diff --git a/thinkphp/.gitignore b/thinkphp/.gitignore new file mode 100644 index 000000000..f7775ba41 --- /dev/null +++ b/thinkphp/.gitignore @@ -0,0 +1,8 @@ +/vendor +composer.phar +composer.lock +.DS_Store +Thumbs.db +/phpunit.xml +/.idea +/.vscode \ No newline at end of file diff --git a/thinkphp/.htaccess b/thinkphp/.htaccess new file mode 100644 index 000000000..3418e55a6 --- /dev/null +++ b/thinkphp/.htaccess @@ -0,0 +1 @@ +deny from all \ No newline at end of file diff --git a/thinkphp/CONTRIBUTING.md b/thinkphp/CONTRIBUTING.md new file mode 100644 index 000000000..6cefcb38c --- /dev/null +++ b/thinkphp/CONTRIBUTING.md @@ -0,0 +1,119 @@ +如何贡献我的源代码 +=== + +此文档介绍了 ThinkPHP 团队的组成以及运转机制,您提交的代码将给 ThinkPHP 项目带来什么好处,以及如何才能加入我们的行列。 + +## 通过 Github 贡献代码 + +ThinkPHP 目前使用 Git 来控制程序版本,如果你想为 ThinkPHP 贡献源代码,请先大致了解 Git 的使用方法。我们目前把项目托管在 GitHub 上,任何 GitHub 用户都可以向我们贡献代码。 + +参与的方式很简单,`fork`一份 ThinkPHP 的代码到你的仓库中,修改后提交,并向我们发起`pull request`申请,我们会及时对代码进行审查并处理你的申请并。审查通过后,你的代码将被`merge`进我们的仓库中,这样你就会自动出现在贡献者名单里了,非常方便。 + +我们希望你贡献的代码符合: + +* ThinkPHP 的编码规范 +* 适当的注释,能让其他人读懂 +* 遵循 Apache2 开源协议 + +**如果想要了解更多细节或有任何疑问,请继续阅读下面的内容** + +### 注意事项 + +* 本项目代码格式化标准选用 [**PSR-2**](http://www.kancloud.cn/thinkphp/php-fig-psr/3141); +* 类名和类文件名遵循 [**PSR-4**](http://www.kancloud.cn/thinkphp/php-fig-psr/3144); +* 对于 Issues 的处理,请使用诸如 `fix #xxx(Issue ID)` 的 commit title 直接关闭 issue。 +* 系统会自动在 PHP 5.4 5.5 5.6 7.0 和 HHVM 上测试修改,其中 HHVM 下的测试容许报错,请确保你的修改符合 PHP 5.4 ~ 5.6 和 PHP 7.0 的语法规范; +* 管理员不会合并造成 CI faild 的修改,若出现 CI faild 请检查自己的源代码或修改相应的[单元测试文件](tests); + +## GitHub Issue + +GitHub 提供了 Issue 功能,该功能可以用于: + +* 提出 bug +* 提出功能改进 +* 反馈使用体验 + +该功能不应该用于: + + * 提出修改意见(涉及代码署名和修订追溯问题) + * 不友善的言论 + +## 快速修改 + +**GitHub 提供了快速编辑文件的功能** + +1. 登录 GitHub 帐号; +2. 浏览项目文件,找到要进行修改的文件; +3. 点击右上角铅笔图标进行修改; +4. 填写 `Commit changes` 相关内容(Title 必填); +5. 提交修改,等待 CI 验证和管理员合并。 + +**若您需要一次提交大量修改,请继续阅读下面的内容** + +## 完整流程 + +1. `fork`本项目; +2. 克隆(`clone`)你 `fork` 的项目到本地; +3. 新建分支(`branch`)并检出(`checkout`)新分支; +4. 添加本项目到你的本地 git 仓库作为上游(`upstream`); +5. 进行修改,若你的修改包含方法或函数的增减,请记得修改[单元测试文件](tests); +6. 变基(衍合 `rebase`)你的分支到上游 master 分支; +7. `push` 你的本地仓库到 GitHub; +8. 提交 `pull request`; +9. 等待 CI 验证(若不通过则重复 5~7,GitHub 会自动更新你的 `pull request`); +10. 等待管理员处理,并及时 `rebase` 你的分支到上游 master 分支(若上游 master 分支有修改)。 + +*若有必要,可以 `git push -f` 强行推送 rebase 后的分支到自己的 `fork`* + +*绝对不可以使用 `git push -f` 强行推送修改到上游* + +### 注意事项 + +* 若对上述流程有任何不清楚的地方,请查阅 GIT 教程,如 [这个](http://backlogtool.com/git-guide/cn/); +* 对于代码**不同方面**的修改,请在自己 `fork` 的项目中**创建不同的分支**(原因参见`完整流程`第9条备注部分); +* 变基及交互式变基操作参见 [Git 交互式变基](http://pakchoi.me/2015/03/17/git-interactive-rebase/) + +## 推荐资源 + +### 开发环境 + +* XAMPP for Windows 5.5.x +* WampServer (for Windows) +* upupw Apache PHP5.4 ( for Windows) + +或自行安装 + +- Apache / Nginx +- PHP 5.4 ~ 5.6 +- MySQL / MariaDB + +*Windows 用户推荐添加 PHP bin 目录到 PATH,方便使用 composer* + +*Linux 用户自行配置环境, Mac 用户推荐使用内置 Apache 配合 Homebrew 安装 PHP 和 MariaDB* + +### 编辑器 + +Sublime Text 3 + phpfmt 插件 + +phpfmt 插件参数 + +```json +{ + "autocomplete": true, + "enable_auto_align": true, + "format_on_save": true, + "indent_with_space": true, + "psr1_naming": false, + "psr2": true, + "version": 4 +} +``` + +或其他 编辑器 / IDE 配合 PSR2 自动格式化工具 + +### Git GUI + +* SourceTree +* GitHub Desktop + +或其他 Git 图形界面客户端 diff --git a/thinkphp/LICENSE.txt b/thinkphp/LICENSE.txt new file mode 100644 index 000000000..574a39c40 --- /dev/null +++ b/thinkphp/LICENSE.txt @@ -0,0 +1,32 @@ + +ThinkPHP遵循Apache2开源协议发布,并提供免费使用。 +版权所有Copyright © 2006-2016 by ThinkPHP (http://thinkphp.cn) +All rights reserved。 +ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。 + +Apache Licence是著名的非盈利开源组织Apache采用的协议。 +该协议和BSD类似,鼓励代码共享和尊重原作者的著作权, +允许代码修改,再作为开源或商业软件发布。需要满足 +的条件: +1. 需要给代码的用户一份Apache Licence ; +2. 如果你修改了代码,需要在被修改的文件中说明; +3. 在延伸的代码中(修改和有源代码衍生的代码中)需要 +带有原来代码中的协议,商标,专利声明和其他原来作者规 +定需要包含的说明; +4. 如果再发布的产品中包含一个Notice文件,则在Notice文 +件中需要带有本协议内容。你可以在Notice中增加自己的 +许可,但不可以表现为对Apache Licence构成更改。 +具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0 + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/thinkphp/README.md b/thinkphp/README.md new file mode 100644 index 000000000..52c34a4bf --- /dev/null +++ b/thinkphp/README.md @@ -0,0 +1,60 @@ +![](http://www.thinkphp.cn/Uploads/editor/2016-06-23/576b4732a6e04.png) + +ThinkPHP 5.1 —— 12载初心,你值得信赖的PHP框架 +=============== + +[![Build Status](https://travis-ci.org/top-think/framework.svg?branch=master)](https://travis-ci.org/top-think/framework) +[![Total Downloads](https://poser.pugx.org/topthink/framework/downloads)](https://packagist.org/packages/topthink/framework) +[![Latest Stable Version](https://poser.pugx.org/topthink/framework/v/stable)](https://packagist.org/packages/topthink/framework) +[![License](https://poser.pugx.org/topthink/framework/license)](https://packagist.org/packages/topthink/framework) + +ThinkPHP5.1对底层架构做了进一步的改进,减少依赖,其主要特性包括: + + + 采用容器统一管理对象 + + 支持Facade + + 更易用的路由 + + 注解路由支持 + + 路由跨域请求支持 + + 验证类增强 + + 配置和路由目录独立 + + 取消系统常量 + + 类库别名机制 + + 模型和数据库增强 + + 依赖注入完善 + + 支持PSR-3日志规范 + +### 废除的功能: + + + 聚合模型 + + 内置控制器扩展类 + + 模型自动验证 + +> ThinkPHP5.1的运行环境要求PHP5.6+。 + + +## 在线手册 + ++ [完全开发手册](https://www.kancloud.cn/manual/thinkphp5_1/content) ++ [升级指导](https://www.kancloud.cn/manual/thinkphp5_1/354155) + +## 命名规范 + +`ThinkPHP5`遵循PSR-2命名规范和PSR-4自动加载规范。 + +## 参与开发 + +请参阅 [ThinkPHP5 核心框架包](https://github.com/top-think/framework)。 + +## 版权信息 + +ThinkPHP遵循Apache2开源协议发布,并提供免费使用。 + +本项目包含的第三方源码和二进制文件之版权信息另行标注。 + +版权所有Copyright © 2006-2018 by ThinkPHP (http://thinkphp.cn) + +All rights reserved。 + +ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。 + +更多细节参阅 [LICENSE.txt](LICENSE.txt) diff --git a/thinkphp/base.php b/thinkphp/base.php new file mode 100644 index 000000000..aad321d6a --- /dev/null +++ b/thinkphp/base.php @@ -0,0 +1,105 @@ + +// +---------------------------------------------------------------------- +namespace think; + +// 载入Loader类 +require __DIR__ . '/library/think/Loader.php'; + +// 注册自动加载 +Loader::register(); + +// 注册错误和异常处理机制 +Error::register(); + +// 实现日志接口 +if (interface_exists('Psr\Log\LoggerInterface')) { + interface LoggerInterface extends \Psr\Log\LoggerInterface + {} +} else { + interface LoggerInterface + {} +} + +// 注册核心类到容器 +Container::getInstance()->bind([ + 'app' => App::class, + 'build' => Build::class, + 'cache' => Cache::class, + 'config' => Config::class, + 'cookie' => Cookie::class, + 'debug' => Debug::class, + 'env' => Env::class, + 'hook' => Hook::class, + 'lang' => Lang::class, + 'log' => Log::class, + 'middleware' => Middleware::class, + 'request' => Request::class, + 'response' => Response::class, + 'route' => Route::class, + 'session' => Session::class, + 'url' => Url::class, + 'validate' => Validate::class, + 'view' => View::class, + 'rule_name' => route\RuleName::class, + // 接口依赖注入 + 'think\LoggerInterface' => Log::class, +]); + +// 注册核心类的静态代理 +Facade::bind([ + facade\App::class => App::class, + facade\Build::class => Build::class, + facade\Cache::class => Cache::class, + facade\Config::class => Config::class, + facade\Cookie::class => Cookie::class, + facade\Debug::class => Debug::class, + facade\Env::class => Env::class, + facade\Hook::class => Hook::class, + facade\Lang::class => Lang::class, + facade\Log::class => Log::class, + facade\Middleware::class => Middleware::class, + facade\Request::class => Request::class, + facade\Response::class => Response::class, + facade\Route::class => Route::class, + facade\Session::class => Session::class, + facade\Url::class => Url::class, + facade\Validate::class => Validate::class, + facade\View::class => View::class, +]); + +// 注册类库别名 +Loader::addClassAlias([ + 'App' => facade\App::class, + 'Build' => facade\Build::class, + 'Cache' => facade\Cache::class, + 'Config' => facade\Config::class, + 'Cookie' => facade\Cookie::class, + 'Db' => Db::class, + 'Debug' => facade\Debug::class, + 'Env' => facade\Env::class, + 'Facade' => Facade::class, + 'Hook' => facade\Hook::class, + 'Lang' => facade\Lang::class, + 'Log' => facade\Log::class, + 'Request' => facade\Request::class, + 'Response' => facade\Response::class, + 'Route' => facade\Route::class, + 'Session' => facade\Session::class, + 'Url' => facade\Url::class, + 'Validate' => facade\Validate::class, + 'View' => facade\View::class, +]); + +// 加载惯例配置文件 +facade\Config::set(include __DIR__ . '/convention.php'); + +// 加载composer autofile文件 +Loader::loadComposerAutoloadFiles(); diff --git a/thinkphp/composer.json b/thinkphp/composer.json new file mode 100644 index 000000000..3e504960e --- /dev/null +++ b/thinkphp/composer.json @@ -0,0 +1,35 @@ +{ + "name": "topthink/framework", + "description": "the new thinkphp framework", + "type": "think-framework", + "keywords": [ + "framework", + "thinkphp", + "ORM" + ], + "homepage": "http://thinkphp.cn/", + "license": "Apache-2.0", + "authors": [ + { + "name": "liu21st", + "email": "liu21st@gmail.com" + }, + { + "name": "yunwuxin", + "email": "448901948@qq.com" + } + ], + "require": { + "php": ">=5.6.0", + "topthink/think-installer": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.0|^6.0", + "johnkary/phpunit-speedtrap": "^1.0", + "mikey179/vfsStream": "~1.6", + "phploc/phploc": "2.*", + "sebastian/phpcpd": "2.*", + "squizlabs/php_codesniffer": "2.*", + "phpdocumentor/reflection-docblock": "^2.0" + } +} diff --git a/thinkphp/convention.php b/thinkphp/convention.php new file mode 100644 index 000000000..3e2d31ffb --- /dev/null +++ b/thinkphp/convention.php @@ -0,0 +1,302 @@ + [ + // 应用名称 + 'app_name' => '', + // 应用地址 + 'app_host' => '', + // 应用调试模式 + 'app_debug' => false, + // 应用Trace + 'app_trace' => false, + // 应用模式状态 + 'app_status' => '', + // 是否支持多模块 + 'app_multi_module' => true, + // 入口自动绑定模块 + 'auto_bind_module' => false, + // 注册的根命名空间 + 'root_namespace' => [], + // 默认输出类型 + 'default_return_type' => 'html', + // 默认AJAX 数据返回格式,可选json xml ... + 'default_ajax_return' => 'json', + // 默认JSONP格式返回的处理方法 + 'default_jsonp_handler' => 'jsonpReturn', + // 默认JSONP处理方法 + 'var_jsonp_handler' => 'callback', + // 默认时区 + 'default_timezone' => 'Asia/Shanghai', + // 是否开启多语言 + 'lang_switch_on' => false, + // 默认全局过滤方法 用逗号分隔多个 + 'default_filter' => '', + // 默认语言 + 'default_lang' => 'zh-cn', + // 应用类库后缀 + 'class_suffix' => false, + // 控制器类后缀 + 'controller_suffix' => false, + + // +---------------------------------------------------------------------- + // | 模块设置 + // +---------------------------------------------------------------------- + + // 默认模块名 + 'default_module' => 'index', + // 禁止访问模块 + 'deny_module_list' => ['common'], + // 默认控制器名 + 'default_controller' => 'Index', + // 默认操作名 + 'default_action' => 'index', + // 默认验证器 + 'default_validate' => '', + // 默认的空模块名 + 'empty_module' => '', + // 默认的空控制器名 + 'empty_controller' => 'Error', + // 操作方法前缀 + 'use_action_prefix' => false, + // 操作方法后缀 + 'action_suffix' => '', + // 自动搜索控制器 + 'controller_auto_search' => false, + + // +---------------------------------------------------------------------- + // | URL设置 + // +---------------------------------------------------------------------- + + // PATHINFO变量名 用于兼容模式 + 'var_pathinfo' => 's', + // 兼容PATH_INFO获取 + 'pathinfo_fetch' => ['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL'], + // pathinfo分隔符 + 'pathinfo_depr' => '/', + // HTTPS代理标识 + 'https_agent_name' => '', + // URL伪静态后缀 + 'url_html_suffix' => 'html', + // URL普通方式参数 用于自动生成 + 'url_common_param' => false, + // URL参数方式 0 按名称成对解析 1 按顺序解析 + 'url_param_type' => 0, + // 是否开启路由延迟解析 + 'url_lazy_route' => false, + // 是否强制使用路由 + 'url_route_must' => false, + // 合并路由规则 + 'route_rule_merge' => false, + // 路由是否完全匹配 + 'route_complete_match' => false, + // 使用注解路由 + 'route_annotation' => false, + // 域名根,如thinkphp.cn + 'url_domain_root' => '', + // 是否自动转换URL中的控制器和操作名 + 'url_convert' => true, + // 默认的访问控制器层 + 'url_controller_layer' => 'controller', + // 表单请求类型伪装变量 + 'var_method' => '_method', + // 表单ajax伪装变量 + 'var_ajax' => '_ajax', + // 表单pjax伪装变量 + 'var_pjax' => '_pjax', + // 是否开启请求缓存 true自动缓存 支持设置请求缓存规则 + 'request_cache' => false, + // 请求缓存有效期 + 'request_cache_expire' => null, + // 全局请求缓存排除规则 + 'request_cache_except' => [], + + // 默认跳转页面对应的模板文件 + 'dispatch_success_tmpl' => __DIR__ . '/tpl/dispatch_jump.tpl', + 'dispatch_error_tmpl' => __DIR__ . '/tpl/dispatch_jump.tpl', + + // +---------------------------------------------------------------------- + // | 异常及错误设置 + // +---------------------------------------------------------------------- + + // 异常页面的模板文件 + 'exception_tmpl' => __DIR__ . '/tpl/think_exception.tpl', + + // 错误显示信息,非调试模式有效 + 'error_message' => '页面错误!请稍后再试~', + // 显示错误信息 + 'show_error_msg' => false, + // 异常处理handle类 留空使用 \think\exception\Handle + 'exception_handle' => '', + ], + + // +---------------------------------------------------------------------- + // | 模板设置 + // +---------------------------------------------------------------------- + + 'template' => [ + // 默认模板渲染规则 1 解析为小写+下划线 2 全部转换小写 + 'auto_rule' => 1, + // 模板引擎类型 支持 php think 支持扩展 + 'type' => 'Think', + // 视图基础目录,配置目录为所有模块的视图起始目录 + 'view_base' => '', + // 当前模板的视图目录 留空为自动获取 + 'view_path' => '', + // 模板后缀 + 'view_suffix' => 'html', + // 模板文件名分隔符 + 'view_depr' => DIRECTORY_SEPARATOR, + // 模板引擎普通标签开始标记 + 'tpl_begin' => '{', + // 模板引擎普通标签结束标记 + 'tpl_end' => '}', + // 标签库标签开始标记 + 'taglib_begin' => '{', + // 标签库标签结束标记 + 'taglib_end' => '}', + ], + + // +---------------------------------------------------------------------- + // | 日志设置 + // +---------------------------------------------------------------------- + + 'log' => [ + // 日志记录方式,内置 file socket 支持扩展 + 'type' => 'File', + // 日志保存目录 + //'path' => LOG_PATH, + // 日志记录级别 + 'level' => [], + // 是否记录trace信息到日志 + 'record_trace' => false, + ], + + // +---------------------------------------------------------------------- + // | Trace设置 开启 app_trace 后 有效 + // +---------------------------------------------------------------------- + 'trace' => [ + // 内置Html Console 支持扩展 + 'type' => 'Html', + 'file' => __DIR__ . '/tpl/page_trace.tpl', + ], + + // +---------------------------------------------------------------------- + // | 缓存设置 + // +---------------------------------------------------------------------- + + 'cache' => [ + // 驱动方式 + 'type' => 'File', + // 缓存保存目录 + //'path' => CACHE_PATH, + // 缓存前缀 + 'prefix' => '', + // 缓存有效期 0表示永久缓存 + 'expire' => 0, + ], + + // +---------------------------------------------------------------------- + // | 会话设置 + // +---------------------------------------------------------------------- + + 'session' => [ + 'id' => '', + // SESSION_ID的提交变量,解决flash上传跨域 + 'var_session_id' => '', + // SESSION 前缀 + 'prefix' => 'think', + // 驱动方式 支持redis memcache memcached + 'type' => '', + // 是否自动开启 SESSION + 'auto_start' => true, + 'httponly' => true, + 'secure' => false, + ], + + // +---------------------------------------------------------------------- + // | Cookie设置 + // +---------------------------------------------------------------------- + 'cookie' => [ + // cookie 名称前缀 + 'prefix' => '', + // cookie 保存时间 + 'expire' => 0, + // cookie 保存路径 + 'path' => '/', + // cookie 有效域名 + 'domain' => '', + // cookie 启用安全传输 + 'secure' => false, + // httponly设置 + 'httponly' => '', + // 是否使用 setcookie + 'setcookie' => true, + ], + + // +---------------------------------------------------------------------- + // | 数据库设置 + // +---------------------------------------------------------------------- + + 'database' => [ + // 数据库类型 + 'type' => 'mysql', + // 数据库连接DSN配置 + 'dsn' => '', + // 服务器地址 + 'hostname' => '127.0.0.1', + // 数据库名 + 'database' => '', + // 数据库用户名 + 'username' => 'root', + // 数据库密码 + 'password' => '', + // 数据库连接端口 + 'hostport' => '', + // 数据库连接参数 + 'params' => [], + // 数据库编码默认采用utf8 + 'charset' => 'utf8', + // 数据库表前缀 + 'prefix' => '', + // 数据库调试模式 + 'debug' => false, + // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) + 'deploy' => 0, + // 数据库读写是否分离 主从式有效 + 'rw_separate' => false, + // 读写分离后 主服务器数量 + 'master_num' => 1, + // 指定从服务器序号 + 'slave_no' => '', + // 是否严格检查字段是否存在 + 'fields_strict' => true, + // 数据集返回类型 + 'resultset_type' => 'array', + // 自动写入时间戳字段 + 'auto_timestamp' => false, + // 时间字段取出后的默认时间格式 + 'datetime_format' => 'Y-m-d H:i:s', + // 是否需要进行SQL性能分析 + 'sql_explain' => false, + // 查询对象 + 'query' => '\\think\\db\\Query', + ], + + //分页配置 + 'paginate' => [ + 'type' => 'bootstrap', + 'var_page' => 'page', + 'list_rows' => 15, + ], + + //控制台配置 + 'console' => [ + 'name' => 'Think Console', + 'version' => '0.1', + 'user' => null, + ], +]; diff --git a/thinkphp/helper.php b/thinkphp/helper.php new file mode 100644 index 000000000..30670f9f1 --- /dev/null +++ b/thinkphp/helper.php @@ -0,0 +1,691 @@ + +// +---------------------------------------------------------------------- + +//------------------------ +// ThinkPHP 助手函数 +//------------------------- + +use think\Container; +use think\Db; +use think\exception\HttpException; +use think\exception\HttpResponseException; +use think\facade\Cache; +use think\facade\Config; +use think\facade\Cookie; +use think\facade\Debug; +use think\facade\Env; +use think\facade\Hook; +use think\facade\Lang; +use think\facade\Log; +use think\facade\Request; +use think\facade\Route; +use think\facade\Session; +use think\facade\Url; +use think\Response; +use think\route\RuleItem; + +if (!function_exists('abort')) { + /** + * 抛出HTTP异常 + * @param integer|Response $code 状态码 或者 Response对象实例 + * @param string $message 错误信息 + * @param array $header 参数 + */ + function abort($code, $message = null, $header = []) + { + if ($code instanceof Response) { + throw new HttpResponseException($code); + } else { + throw new HttpException($code, $message, null, $header); + } + } +} + +if (!function_exists('action')) { + /** + * 调用模块的操作方法 参数格式 [模块/控制器/]操作 + * @param string $url 调用地址 + * @param string|array $vars 调用参数 支持字符串和数组 + * @param string $layer 要调用的控制层名称 + * @param bool $appendSuffix 是否添加类名后缀 + * @return mixed + */ + function action($url, $vars = [], $layer = 'controller', $appendSuffix = false) + { + return app()->action($url, $vars, $layer, $appendSuffix); + } +} + +if (!function_exists('app')) { + /** + * 快速获取容器中的实例 支持依赖注入 + * @param string $name 类名或标识 默认获取当前应用实例 + * @param array $args 参数 + * @param bool $newInstance 是否每次创建新的实例 + * @return object + */ + function app($name = 'think\App', $args = [], $newInstance = false) + { + return Container::get($name, $args, $newInstance); + } +} + +if (!function_exists('behavior')) { + /** + * 执行某个行为(run方法) 支持依赖注入 + * @param mixed $behavior 行为类名或者别名 + * @param mixed $args 参数 + * @return mixed + */ + function behavior($behavior, $args = null) + { + return Hook::exec($behavior, $args); + } +} + +if (!function_exists('bind')) { + /** + * 绑定一个类到容器 + * @access public + * @param string $abstract 类标识、接口 + * @param mixed $concrete 要绑定的类、闭包或者实例 + * @return Container + */ + function bind($abstract, $concrete = null) + { + return Container::getInstance()->bind($abstract, $concrete); + } +} + +if (!function_exists('cache')) { + /** + * 缓存管理 + * @param mixed $name 缓存名称,如果为数组表示进行缓存设置 + * @param mixed $value 缓存值 + * @param mixed $options 缓存参数 + * @param string $tag 缓存标签 + * @return mixed + */ + function cache($name, $value = '', $options = null, $tag = null) + { + if (is_array($options)) { + // 缓存操作的同时初始化 + Cache::connect($options); + } elseif (is_array($name)) { + // 缓存初始化 + return Cache::connect($name); + } + + if ('' === $value) { + // 获取缓存 + return 0 === strpos($name, '?') ? Cache::has(substr($name, 1)) : Cache::get($name); + } elseif (is_null($value)) { + // 删除缓存 + return Cache::rm($name); + } else { + // 缓存数据 + if (is_array($options)) { + $expire = isset($options['expire']) ? $options['expire'] : null; //修复查询缓存无法设置过期时间 + } else { + $expire = is_numeric($options) ? $options : null; //默认快捷缓存设置过期时间 + } + + if (is_null($tag)) { + return Cache::set($name, $value, $expire); + } else { + return Cache::tag($tag)->set($name, $value, $expire); + } + } + } +} + +if (!function_exists('call')) { + /** + * 调用反射执行callable 支持依赖注入 + * @param mixed $callable 支持闭包等callable写法 + * @param array $args 参数 + * @return mixed + */ + function call($callable, $args = []) + { + return Container::getInstance()->invoke($callable, $args); + } +} + +if (!function_exists('class_basename')) { + /** + * 获取类名(不包含命名空间) + * + * @param string|object $class + * @return string + */ + function class_basename($class) + { + $class = is_object($class) ? get_class($class) : $class; + return basename(str_replace('\\', '/', $class)); + } +} + +if (!function_exists('class_uses_recursive')) { + /** + *获取一个类里所有用到的trait,包括父类的 + * + * @param $class + * @return array + */ + function class_uses_recursive($class) + { + if (is_object($class)) { + $class = get_class($class); + } + + $results = []; + $classes = array_merge([$class => $class], class_parents($class)); + foreach ($classes as $class) { + $results += trait_uses_recursive($class); + } + + return array_unique($results); + } +} + +if (!function_exists('config')) { + /** + * 获取和设置配置参数 + * @param string|array $name 参数名 + * @param mixed $value 参数值 + * @return mixed + */ + function config($name = '', $value = null) + { + if (is_null($value) && is_string($name)) { + if ('.' == substr($name, -1)) { + return Config::pull(substr($name, 0, -1)); + } + + return 0 === strpos($name, '?') ? Config::has(substr($name, 1)) : Config::get($name); + } else { + return Config::set($name, $value); + } + } +} + +if (!function_exists('container')) { + /** + * 获取容器对象实例 + * @return Container + */ + function container() + { + return Container::getInstance(); + } +} + +if (!function_exists('controller')) { + /** + * 实例化控制器 格式:[模块/]控制器 + * @param string $name 资源地址 + * @param string $layer 控制层名称 + * @param bool $appendSuffix 是否添加类名后缀 + * @return \think\Controller + */ + function controller($name, $layer = 'controller', $appendSuffix = false) + { + return app()->controller($name, $layer, $appendSuffix); + } +} + +if (!function_exists('cookie')) { + /** + * Cookie管理 + * @param string|array $name cookie名称,如果为数组表示进行cookie设置 + * @param mixed $value cookie值 + * @param mixed $option 参数 + * @return mixed + */ + function cookie($name, $value = '', $option = null) + { + if (is_array($name)) { + // 初始化 + Cookie::init($name); + } elseif (is_null($name)) { + // 清除 + Cookie::clear($value); + } elseif ('' === $value) { + // 获取 + return 0 === strpos($name, '?') ? Cookie::has(substr($name, 1), $option) : Cookie::get($name); + } elseif (is_null($value)) { + // 删除 + return Cookie::delete($name); + } else { + // 设置 + return Cookie::set($name, $value, $option); + } + } +} + +if (!function_exists('db')) { + /** + * 实例化数据库类 + * @param string $name 操作的数据表名称(不含前缀) + * @param array|string $config 数据库配置参数 + * @param bool $force 是否强制重新连接 + * @return \think\db\Query + */ + function db($name = '', $config = [], $force = true) + { + return Db::connect($config, $force)->name($name); + } +} + +if (!function_exists('debug')) { + /** + * 记录时间(微秒)和内存使用情况 + * @param string $start 开始标签 + * @param string $end 结束标签 + * @param integer|string $dec 小数位 如果是m 表示统计内存占用 + * @return mixed + */ + function debug($start, $end = '', $dec = 6) + { + if ('' == $end) { + Debug::remark($start); + } else { + return 'm' == $dec ? Debug::getRangeMem($start, $end) : Debug::getRangeTime($start, $end, $dec); + } + } +} + +if (!function_exists('dump')) { + /** + * 浏览器友好的变量输出 + * @param mixed $var 变量 + * @param boolean $echo 是否输出 默认为true 如果为false 则返回输出字符串 + * @param string $label 标签 默认为空 + * @return void|string + */ + function dump($var, $echo = true, $label = null) + { + return Debug::dump($var, $echo, $label); + } +} + +if (!function_exists('env')) { + /** + * 获取环境变量值 + * @access public + * @param string $name 环境变量名(支持二级 .号分割) + * @param string $default 默认值 + * @return mixed + */ + function env($name = null, $default = null) + { + return Env::get($name, $default); + } +} + +if (!function_exists('exception')) { + /** + * 抛出异常处理 + * + * @param string $msg 异常消息 + * @param integer $code 异常代码 默认为0 + * @param string $exception 异常类 + * + * @throws Exception + */ + function exception($msg, $code = 0, $exception = '') + { + $e = $exception ?: '\think\Exception'; + throw new $e($msg, $code); + } +} + +if (!function_exists('halt')) { + /** + * 调试变量并且中断输出 + * @param mixed $var 调试变量或者信息 + */ + function halt($var) + { + dump($var); + + throw new HttpResponseException(new Response); + } +} + +if (!function_exists('input')) { + /** + * 获取输入数据 支持默认值和过滤 + * @param string $key 获取的变量名 + * @param mixed $default 默认值 + * @param string $filter 过滤方法 + * @return mixed + */ + function input($key = '', $default = null, $filter = '') + { + if (0 === strpos($key, '?')) { + $key = substr($key, 1); + $has = true; + } + + if ($pos = strpos($key, '.')) { + // 指定参数来源 + $method = substr($key, 0, $pos); + if (in_array($method, ['get', 'post', 'put', 'patch', 'delete', 'route', 'param', 'request', 'session', 'cookie', 'server', 'env', 'path', 'file'])) { + $key = substr($key, $pos + 1); + } else { + $method = 'param'; + } + } else { + // 默认为自动判断 + $method = 'param'; + } + + if (isset($has)) { + return request()->has($key, $method, $default); + } else { + return request()->$method($key, $default, $filter); + } + } +} + +if (!function_exists('json')) { + /** + * 获取\think\response\Json对象实例 + * @param mixed $data 返回的数据 + * @param integer $code 状态码 + * @param array $header 头部 + * @param array $options 参数 + * @return \think\response\Json + */ + function json($data = [], $code = 200, $header = [], $options = []) + { + return Response::create($data, 'json', $code, $header, $options); + } +} + +if (!function_exists('jsonp')) { + /** + * 获取\think\response\Jsonp对象实例 + * @param mixed $data 返回的数据 + * @param integer $code 状态码 + * @param array $header 头部 + * @param array $options 参数 + * @return \think\response\Jsonp + */ + function jsonp($data = [], $code = 200, $header = [], $options = []) + { + return Response::create($data, 'jsonp', $code, $header, $options); + } +} + +if (!function_exists('lang')) { + /** + * 获取语言变量值 + * @param string $name 语言变量名 + * @param array $vars 动态变量值 + * @param string $lang 语言 + * @return mixed + */ + function lang($name, $vars = [], $lang = '') + { + return Lang::get($name, $vars, $lang); + } +} + +if (!function_exists('model')) { + /** + * 实例化Model + * @param string $name Model名称 + * @param string $layer 业务层名称 + * @param bool $appendSuffix 是否添加类名后缀 + * @return \think\Model + */ + function model($name = '', $layer = 'model', $appendSuffix = false) + { + return app()->model($name, $layer, $appendSuffix); + } +} + +if (!function_exists('parse_name')) { + /** + * 字符串命名风格转换 + * type 0 将Java风格转换为C的风格 1 将C风格转换为Java的风格 + * @param string $name 字符串 + * @param integer $type 转换类型 + * @param bool $ucfirst 首字母是否大写(驼峰规则) + * @return string + */ + function parse_name($name, $type = 0, $ucfirst = true) + { + if ($type) { + $name = preg_replace_callback('/_([a-zA-Z])/', function ($match) { + return strtoupper($match[1]); + }, $name); + + return $ucfirst ? ucfirst($name) : lcfirst($name); + } else { + return strtolower(trim(preg_replace("/[A-Z]/", "_\\0", $name), "_")); + } + } +} + +if (!function_exists('redirect')) { + /** + * 获取\think\response\Redirect对象实例 + * @param mixed $url 重定向地址 支持Url::build方法的地址 + * @param array|integer $params 额外参数 + * @param integer $code 状态码 + * @return \think\response\Redirect + */ + function redirect($url = [], $params = [], $code = 302) + { + if (is_integer($params)) { + $code = $params; + $params = []; + } + + return Response::create($url, 'redirect', $code)->params($params); + } +} + +if (!function_exists('request')) { + /** + * 获取当前Request对象实例 + * @return Request + */ + function request() + { + return app('request'); + } +} + +if (!function_exists('response')) { + /** + * 创建普通 Response 对象实例 + * @param mixed $data 输出数据 + * @param int|string $code 状态码 + * @param array $header 头信息 + * @param string $type + * @return Response + */ + function response($data = [], $code = 200, $header = [], $type = 'html') + { + return Response::create($data, $type, $code, $header); + } +} + +if (!function_exists('route')) { + /** + * 路由注册 + * @param string $rule 路由规则 + * @param mixed $route 路由地址 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + * @return RuleItem + */ + function route($rule, $route, $option = [], $pattern = []) + { + return Route::rule($rule, $route, '*', $option, $pattern); + } +} + +if (!function_exists('session')) { + /** + * Session管理 + * @param string|array $name session名称,如果为数组表示进行session设置 + * @param mixed $value session值 + * @param string $prefix 前缀 + * @return mixed + */ + function session($name, $value = '', $prefix = null) + { + if (is_array($name)) { + // 初始化 + Session::init($name); + } elseif (is_null($name)) { + // 清除 + Session::clear($value); + } elseif ('' === $value) { + // 判断或获取 + return 0 === strpos($name, '?') ? Session::has(substr($name, 1), $prefix) : Session::get($name, $prefix); + } elseif (is_null($value)) { + // 删除 + return Session::delete($name, $prefix); + } else { + // 设置 + return Session::set($name, $value, $prefix); + } + } +} + +if (!function_exists('token')) { + /** + * 生成表单令牌 + * @param string $name 令牌名称 + * @param mixed $type 令牌生成方法 + * @return string + */ + function token($name = '__token__', $type = 'md5') + { + $token = Request::token($name, $type); + + return ''; + } +} + +if (!function_exists('trace')) { + /** + * 记录日志信息 + * @param mixed $log log信息 支持字符串和数组 + * @param string $level 日志级别 + * @return array|void + */ + function trace($log = '[think]', $level = 'log') + { + if ('[think]' === $log) { + return Log::getLog(); + } else { + Log::record($log, $level); + } + } +} + +if (!function_exists('trait_uses_recursive')) { + /** + * 获取一个trait里所有引用到的trait + * + * @param string $trait + * @return array + */ + function trait_uses_recursive($trait) + { + $traits = class_uses($trait); + foreach ($traits as $trait) { + $traits += trait_uses_recursive($trait); + } + + return $traits; + } +} + +if (!function_exists('url')) { + /** + * Url生成 + * @param string $url 路由地址 + * @param string|array $vars 变量 + * @param bool|string $suffix 生成的URL后缀 + * @param bool|string $domain 域名 + * @return string + */ + function url($url = '', $vars = '', $suffix = true, $domain = false) + { + return Url::build($url, $vars, $suffix, $domain); + } +} + +if (!function_exists('validate')) { + /** + * 实例化验证器 + * @param string $name 验证器名称 + * @param string $layer 业务层名称 + * @param bool $appendSuffix 是否添加类名后缀 + * @return \think\Validate + */ + function validate($name = '', $layer = 'validate', $appendSuffix = false) + { + return app()->validate($name, $layer, $appendSuffix); + } +} + +if (!function_exists('view')) { + /** + * 渲染模板输出 + * @param string $template 模板文件 + * @param array $vars 模板变量 + * @param integer $code 状态码 + * @param callable $filter 内容过滤 + * @return \think\response\View + */ + function view($template = '', $vars = [], $code = 200, $filter = null) + { + return Response::create($template, 'view', $code)->assign($vars)->filter($filter); + } +} + +if (!function_exists('widget')) { + /** + * 渲染输出Widget + * @param string $name Widget名称 + * @param array $data 传入的参数 + * @return mixed + */ + function widget($name, $data = []) + { + return app()->action($name, $data, 'widget'); + } +} + +if (!function_exists('xml')) { + /** + * 获取\think\response\Xml对象实例 + * @param mixed $data 返回的数据 + * @param integer $code 状态码 + * @param array $header 头部 + * @param array $options 参数 + * @return \think\response\Xml + */ + function xml($data = [], $code = 200, $header = [], $options = []) + { + return Response::create($data, 'xml', $code, $header, $options); + } +} diff --git a/thinkphp/lang/zh-cn.php b/thinkphp/lang/zh-cn.php new file mode 100644 index 000000000..5a3e0bd6b --- /dev/null +++ b/thinkphp/lang/zh-cn.php @@ -0,0 +1,141 @@ + +// +---------------------------------------------------------------------- + +// 核心中文语言包 +return [ + // 系统错误提示 + 'Undefined variable' => '未定义变量', + 'Undefined index' => '未定义数组索引', + 'Undefined offset' => '未定义数组下标', + 'Parse error' => '语法解析错误', + 'Type error' => '类型错误', + 'Fatal error' => '致命错误', + 'syntax error' => '语法错误', + + // 框架核心错误提示 + 'dispatch type not support' => '不支持的调度类型', + 'method param miss' => '方法参数错误', + 'method not exists' => '方法不存在', + 'function not exists' => '函数不存在', + 'module not exists' => '模块不存在', + 'controller not exists' => '控制器不存在', + 'class not exists' => '类不存在', + 'property not exists' => '类的属性不存在', + 'template not exists' => '模板文件不存在', + 'illegal controller name' => '非法的控制器名称', + 'illegal action name' => '非法的操作名称', + 'url suffix deny' => '禁止的URL后缀访问', + 'Route Not Found' => '当前访问路由未定义或不匹配', + 'Undefined db type' => '未定义数据库类型', + 'variable type error' => '变量类型错误', + 'PSR-4 error' => 'PSR-4 规范错误', + 'not support total' => '简洁模式下不能获取数据总数', + 'not support last' => '简洁模式下不能获取最后一页', + 'error session handler' => '错误的SESSION处理器类', + 'not allow php tag' => '模板不允许使用PHP语法', + 'not support' => '不支持', + 'redisd master' => 'Redisd 主服务器错误', + 'redisd slave' => 'Redisd 从服务器错误', + 'must run at sae' => '必须在SAE运行', + 'memcache init error' => '未开通Memcache服务,请在SAE管理平台初始化Memcache服务', + 'KVDB init error' => '没有初始化KVDB,请在SAE管理平台初始化KVDB服务', + 'fields not exists' => '数据表字段不存在', + 'where express error' => '查询表达式错误', + 'no data to update' => '没有任何数据需要更新', + 'miss data to insert' => '缺少需要写入的数据', + 'miss complex primary data' => '缺少复合主键数据', + 'miss update condition' => '缺少更新条件', + 'model data Not Found' => '模型数据不存在', + 'table data not Found' => '表数据不存在', + 'delete without condition' => '没有条件不会执行删除操作', + 'miss relation data' => '缺少关联表数据', + 'tag attr must' => '模板标签属性必须', + 'tag error' => '模板标签错误', + 'cache write error' => '缓存写入失败', + 'sae mc write error' => 'SAE mc 写入错误', + 'route name not exists' => '路由标识不存在(或参数不够)', + 'invalid request' => '非法请求', + 'bind attr has exists' => '模型的属性已经存在', + 'relation data not exists' => '关联数据不存在', + 'relation not support' => '关联不支持', + 'chunk not support order' => 'Chunk不支持调用order方法', + 'route pattern error' => '路由变量规则定义错误', + 'route behavior will not support' => '路由行为废弃(使用中间件替代)', + 'closure not support cache(true)' => '使用闭包查询不支持cache(true),请指定缓存Key', + + // 上传错误信息 + 'unknown upload error' => '未知上传错误!', + 'file write error' => '文件写入失败!', + 'upload temp dir not found' => '找不到临时文件夹!', + 'no file to uploaded' => '没有文件被上传!', + 'only the portion of file is uploaded' => '文件只有部分被上传!', + 'upload File size exceeds the maximum value' => '上传文件大小超过了最大值!', + 'upload write error' => '文件上传保存错误!', + 'has the same filename: {:filename}' => '存在同名文件:{:filename}', + 'upload illegal files' => '非法上传文件', + 'illegal image files' => '非法图片文件', + 'extensions to upload is not allowed' => '上传文件后缀不允许', + 'mimetype to upload is not allowed' => '上传文件MIME类型不允许!', + 'filesize not match' => '上传文件大小不符!', + 'directory {:path} creation failed' => '目录 {:path} 创建失败!', + + 'The middleware must return Response instance' => '中间件方法必须返回Response对象实例', + 'The queue was exhausted, with no response returned' => '中间件队列为空', + // Validate Error Message + ':attribute require' => ':attribute不能为空', + ':attribute must' => ':attribute必须', + ':attribute must be numeric' => ':attribute必须是数字', + ':attribute must be integer' => ':attribute必须是整数', + ':attribute must be float' => ':attribute必须是浮点数', + ':attribute must be bool' => ':attribute必须是布尔值', + ':attribute not a valid email address' => ':attribute格式不符', + ':attribute not a valid mobile' => ':attribute格式不符', + ':attribute must be a array' => ':attribute必须是数组', + ':attribute must be yes,on or 1' => ':attribute必须是yes、on或者1', + ':attribute not a valid datetime' => ':attribute不是一个有效的日期或时间格式', + ':attribute not a valid file' => ':attribute不是有效的上传文件', + ':attribute not a valid image' => ':attribute不是有效的图像文件', + ':attribute must be alpha' => ':attribute只能是字母', + ':attribute must be alpha-numeric' => ':attribute只能是字母和数字', + ':attribute must be alpha-numeric, dash, underscore' => ':attribute只能是字母、数字和下划线_及破折号-', + ':attribute not a valid domain or ip' => ':attribute不是有效的域名或者IP', + ':attribute must be chinese' => ':attribute只能是汉字', + ':attribute must be chinese or alpha' => ':attribute只能是汉字、字母', + ':attribute must be chinese,alpha-numeric' => ':attribute只能是汉字、字母和数字', + ':attribute must be chinese,alpha-numeric,underscore, dash' => ':attribute只能是汉字、字母、数字和下划线_及破折号-', + ':attribute not a valid url' => ':attribute不是有效的URL地址', + ':attribute not a valid ip' => ':attribute不是有效的IP地址', + ':attribute must be dateFormat of :rule' => ':attribute必须使用日期格式 :rule', + ':attribute must be in :rule' => ':attribute必须在 :rule 范围内', + ':attribute be notin :rule' => ':attribute不能在 :rule 范围内', + ':attribute must between :1 - :2' => ':attribute只能在 :1 - :2 之间', + ':attribute not between :1 - :2' => ':attribute不能在 :1 - :2 之间', + 'size of :attribute must be :rule' => ':attribute长度不符合要求 :rule', + 'max size of :attribute must be :rule' => ':attribute长度不能超过 :rule', + 'min size of :attribute must be :rule' => ':attribute长度不能小于 :rule', + ':attribute cannot be less than :rule' => ':attribute日期不能小于 :rule', + ':attribute cannot exceed :rule' => ':attribute日期不能超过 :rule', + ':attribute not within :rule' => '不在有效期内 :rule', + 'access IP is not allowed' => '不允许的IP访问', + 'access IP denied' => '禁止的IP访问', + ':attribute out of accord with :2' => ':attribute和确认字段:2不一致', + ':attribute cannot be same with :2' => ':attribute和比较字段:2不能相同', + ':attribute must greater than or equal :rule' => ':attribute必须大于等于 :rule', + ':attribute must greater than :rule' => ':attribute必须大于 :rule', + ':attribute must less than or equal :rule' => ':attribute必须小于等于 :rule', + ':attribute must less than :rule' => ':attribute必须小于 :rule', + ':attribute must equal :rule' => ':attribute必须等于 :rule', + ':attribute has exists' => ':attribute已存在', + ':attribute not conform to the rules' => ':attribute不符合指定规则', + 'invalid Request method' => '无效的请求类型', + 'invalid token' => '令牌数据无效', + 'not conform to the rules' => '规则错误', +]; diff --git a/thinkphp/library/think/App.php b/thinkphp/library/think/App.php new file mode 100644 index 000000000..02a2e6fb4 --- /dev/null +++ b/thinkphp/library/think/App.php @@ -0,0 +1,916 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +use think\exception\ClassNotFoundException; +use think\exception\HttpResponseException; +use think\route\Dispatch; + +/** + * App 应用管理 + */ +class App implements \ArrayAccess +{ + const VERSION = '5.1.9'; + + /** + * 当前模块路径 + * @var string + */ + protected $modulePath; + + /** + * 应用调试模式 + * @var bool + */ + protected $debug = true; + + /** + * 应用开始时间 + * @var float + */ + protected $beginTime; + + /** + * 应用内存初始占用 + * @var integer + */ + protected $beginMem; + + /** + * 应用类库命名空间 + * @var string + */ + protected $namespace = 'app'; + + /** + * 应用类库后缀 + * @var bool + */ + protected $suffix = false; + + /** + * 严格路由检测 + * @var bool + */ + protected $routeMust; + + /** + * 应用类库目录 + * @var string + */ + protected $appPath; + + /** + * 框架目录 + * @var string + */ + protected $thinkPath; + + /** + * 应用根目录 + * @var string + */ + protected $rootPath; + + /** + * 运行时目录 + * @var string + */ + protected $runtimePath; + + /** + * 配置目录 + * @var string + */ + protected $configPath; + + /** + * 路由目录 + * @var string + */ + protected $routePath; + + /** + * 配置后缀 + * @var string + */ + protected $configExt; + + /** + * 应用调度实例 + * @var Dispatch + */ + protected $dispatch; + + /** + * 容器对象实例 + * @var Container + */ + protected $container; + + /** + * 绑定模块(控制器) + * @var string + */ + protected $bind; + + public function __construct($appPath = '') + { + $this->appPath = $appPath ? realpath($appPath) . DIRECTORY_SEPARATOR : $this->getAppPath(); + $this->container = Container::getInstance(); + } + + /** + * 绑定模块或者控制器 + * @access public + * @param string $bind + * @return $this + */ + public function bind($bind) + { + $this->bind = $bind; + return $this; + } + + /** + * 设置应用类库目录 + * @access public + * @param string $path 路径 + * @return $this + */ + public function path($path) + { + $this->appPath = $path; + return $this; + } + + /** + * 初始化应用 + * @access public + * @return void + */ + public function initialize() + { + $this->beginTime = microtime(true); + $this->beginMem = memory_get_usage(); + $this->thinkPath = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR; + $this->rootPath = dirname($this->appPath) . DIRECTORY_SEPARATOR; + $this->runtimePath = $this->rootPath . 'runtime' . DIRECTORY_SEPARATOR; + $this->routePath = $this->rootPath . 'route' . DIRECTORY_SEPARATOR; + $this->configPath = $this->rootPath . 'config' . DIRECTORY_SEPARATOR; + + // 设置路径环境变量 + $this->env->set([ + 'think_path' => $this->thinkPath, + 'root_path' => $this->rootPath, + 'app_path' => $this->appPath, + 'config_path' => $this->configPath, + 'route_path' => $this->routePath, + 'runtime_path' => $this->runtimePath, + 'extend_path' => $this->rootPath . 'extend' . DIRECTORY_SEPARATOR, + 'vendor_path' => $this->rootPath . 'vendor' . DIRECTORY_SEPARATOR, + ]); + + // 加载环境变量配置文件 + if (is_file($this->rootPath . '.env')) { + $this->env->load($this->rootPath . '.env'); + } + + $this->namespace = $this->env->get('app_namespace', $this->namespace); + $this->env->set('app_namespace', $this->namespace); + + // 注册应用命名空间 + Loader::addNamespace($this->namespace, $this->appPath); + + $this->configExt = $this->env->get('config_ext', '.php'); + + // 初始化应用 + $this->init(); + + // 开启类名后缀 + $this->suffix = $this->config('app.class_suffix'); + + // 应用调试模式 + $this->debug = $this->env->get('app_debug', $this->config('app.app_debug')); + $this->env->set('app_debug', $this->debug); + + if (!$this->debug) { + ini_set('display_errors', 'Off'); + } elseif (PHP_SAPI != 'cli') { + //重新申请一块比较大的buffer + if (ob_get_level() > 0) { + $output = ob_get_clean(); + } + ob_start(); + if (!empty($output)) { + echo $output; + } + } + + // 注册根命名空间 + if (!empty($this->config('app.root_namespace'))) { + Loader::addNamespace($this->config('app.root_namespace')); + } + + // 注册类库别名 + Loader::addClassAlias($this->config->pull('alias')); + + // 设置系统时区 + date_default_timezone_set($this->config('app.default_timezone')); + + // 读取语言包 + $this->loadLangPack(); + + // 监听app_init + $this->hook->listen('app_init'); + } + + /** + * 初始化应用或模块 + * @access public + * @param string $module 模块名 + * @return void + */ + public function init($module = '') + { + // 定位模块目录 + $module = $module ? $module . DIRECTORY_SEPARATOR : ''; + $path = $this->appPath . $module; + + // 加载初始化文件 + if (is_file($path . 'init.php')) { + include $path . 'init.php'; + } elseif (is_file($this->runtimePath . $module . 'init.php')) { + include $this->runtimePath . $module . 'init.php'; + } else { + // 加载行为扩展文件 + if (is_file($path . 'tags.php')) { + $tags = include $path . 'tags.php'; + if (is_array($tags)) { + $this->hook->import($tags); + } + } + + // 加载公共文件 + if (is_file($path . 'common.php')) { + include $path . 'common.php'; + } + + if ('' == $module) { + // 加载系统助手函数 + include $this->thinkPath . 'helper.php'; + } + + // 加载中间件 + if (is_file($path . 'middleware.php')) { + $middleware = include $path . 'middleware.php'; + if (is_array($middleware)) { + $this->middleware->import($middleware); + } + } + + // 注册服务的容器对象实例 + if (is_file($path . 'provider.php')) { + $provider = include $path . 'provider.php'; + if (is_array($provider)) { + $this->container->bind($provider); + } + } + + // 自动读取配置文件 + if (is_dir($path . 'config')) { + $dir = $path . 'config'; + } elseif (is_dir($this->configPath . $module)) { + $dir = $this->configPath . $module; + } + + $files = isset($dir) ? scandir($dir) : []; + + foreach ($files as $file) { + if ('.' . pathinfo($file, PATHINFO_EXTENSION) === $this->configExt) { + $filename = $dir . DIRECTORY_SEPARATOR . $file; + $this->config->load($filename, pathinfo($file, PATHINFO_FILENAME)); + } + } + } + + $this->request->filter($this->config('app.default_filter')); + } + + /** + * 执行应用程序 + * @access public + * @return Response + * @throws Exception + */ + public function run() + { + try { + // 初始化应用 + $this->initialize(); + + if ($this->bind) { + // 模块/控制器绑定 + $this->route->bind($this->bind); + } elseif ($this->config('app.auto_bind_module')) { + // 入口自动绑定 + $name = pathinfo($this->request->baseFile(), PATHINFO_FILENAME); + if ($name && 'index' != $name && is_dir($this->appPath . $name)) { + $this->route->bind($name); + } + } + + // 监听app_dispatch + $this->hook->listen('app_dispatch'); + + // 获取应用调度信息 + $dispatch = $this->dispatch; + if (empty($dispatch)) { + // 路由检测 + $this->route + ->lazy($this->config('app.url_lazy_route')) + ->autoSearchController($this->config('app.controller_auto_search')) + ->mergeRuleRegex($this->config('app.route_rule_merge')); + + $dispatch = $this->routeCheck(); + } + + // 记录当前调度信息 + $this->request->dispatch($dispatch); + + // 记录路由和请求信息 + if ($this->debug) { + $this->log('[ ROUTE ] ' . var_export($this->request->routeInfo(), true)); + $this->log('[ HEADER ] ' . var_export($this->request->header(), true)); + $this->log('[ PARAM ] ' . var_export($this->request->param(), true)); + } + + // 监听app_begin + $this->hook->listen('app_begin'); + + // 请求缓存检查 + $this->request->cache( + $this->config('app.request_cache'), + $this->config('app.request_cache_expire'), + $this->config('app.request_cache_except') + ); + + $data = null; + } catch (HttpResponseException $exception) { + $dispatch = null; + $data = $exception->getResponse(); + } + + $this->middleware->add(function (Request $request, $next) use ($dispatch, $data) { + if (is_null($data)) { + try { + // 执行调度 + $data = $dispatch->run(); + } catch (HttpResponseException $exception) { + $data = $exception->getResponse(); + } + } + + // 输出数据到客户端 + if ($data instanceof Response) { + $response = $data; + } elseif (!is_null($data)) { + // 默认自动识别响应输出类型 + $isAjax = $request->isAjax(); + $type = $isAjax ? $this->config('app.default_ajax_return') : $this->config('app.default_return_type'); + + $response = Response::create($data, $type); + } else { + $response = Response::create(); + } + return $response; + }); + + $response = $this->middleware->dispatch($this->request); + + // 监听app_end + $this->hook->listen('app_end', $response); + + return $response; + } + + protected function loadLangPack() + { + // 读取默认语言 + $this->lang->range($this->config('app.default_lang')); + if ($this->config('app.lang_switch_on')) { + // 开启多语言机制 检测当前语言 + $this->lang->detect(); + } + + $this->request->langset($this->lang->range()); + + // 加载系统语言包 + $this->lang->load([ + $this->thinkPath . 'lang' . DIRECTORY_SEPARATOR . $this->request->langset() . '.php', + $this->appPath . 'lang' . DIRECTORY_SEPARATOR . $this->request->langset() . '.php', + ]); + } + + /** + * 设置当前请求的调度信息 + * @access public + * @param Dispatch $dispatch 调度信息 + * @return $this + */ + public function dispatch(Dispatch $dispatch) + { + $this->dispatch = $dispatch; + return $this; + } + + /** + * 记录调试信息 + * @access public + * @param mixed $msg 调试信息 + * @param string $type 信息类型 + * @return void + */ + public function log($msg, $type = 'info') + { + $this->debug && $this->log->record($msg, $type); + } + + /** + * 获取配置参数 为空则获取所有配置 + * @access public + * @param string $name 配置参数名(支持二级配置 .号分割) + * @return mixed + */ + public function config($name = '') + { + return $this->config->get($name); + } + + /** + * URL路由检测(根据PATH_INFO) + * @access public + * @return Dispatch + */ + public function routeCheck() + { + $path = $this->request->path(); + $depr = $this->config('app.pathinfo_depr'); + + // 路由检测 + $files = scandir($this->routePath); + foreach ($files as $file) { + if (strpos($file, '.php')) { + $filename = $this->routePath . $file; + // 导入路由配置 + $rules = include $filename; + if (is_array($rules)) { + $this->route->import($rules); + } + } + } + + if ($this->config('app.route_annotation')) { + // 自动生成路由定义 + if ($this->debug) { + $this->build->buildRoute($this->config('app.controller_suffix')); + } + + $filename = $this->runtimePath . 'build_route.php'; + + if (is_file($filename)) { + include $filename; + } + } + + if (is_file($this->runtimePath . 'rule_regex.php')) { + $this->route->setRuleRegexs(include $this->runtimePath . 'rule_regex.php'); + } + + // 是否强制路由模式 + $must = !is_null($this->routeMust) ? $this->routeMust : $this->config('app.url_route_must'); + + // 路由检测 返回一个Dispatch对象 + return $this->route->check($path, $depr, $must, $this->config('app.route_complete_match')); + } + + /** + * 设置应用的路由检测机制 + * @access public + * @param bool $must 是否强制检测路由 + * @return $this + */ + public function routeMust($must = false) + { + $this->routeMust = $must; + return $this; + } + + /** + * 解析模块和类名 + * @access protected + * @param string $name 资源地址 + * @param string $layer 验证层名称 + * @param bool $appendSuffix 是否添加类名后缀 + * @return array + */ + protected function parseModuleAndClass($name, $layer, $appendSuffix) + { + if (false !== strpos($name, '\\')) { + $class = $name; + $module = $this->request->module(); + } else { + if (strpos($name, '/')) { + list($module, $name) = explode('/', $name, 2); + } else { + $module = $this->request->module(); + } + + $class = $this->parseClass($module, $layer, $name, $appendSuffix); + } + + return [$module, $class]; + } + + /** + * 实例化应用类库 + * @access public + * @param string $name 类名称 + * @param string $layer 业务层名称 + * @param bool $appendSuffix 是否添加类名后缀 + * @param string $common 公共模块名 + * @return object + * @throws ClassNotFoundException + */ + public function create($name, $layer, $appendSuffix = false, $common = 'common') + { + $guid = $name . $layer; + + if ($this->__isset($guid)) { + return $this->__get($guid); + } + + list($module, $class) = $this->parseModuleAndClass($name, $layer, $appendSuffix); + + if (class_exists($class)) { + $object = $this->__get($class); + } else { + $class = str_replace('\\' . $module . '\\', '\\' . $common . '\\', $class); + if (class_exists($class)) { + $object = $this->__get($class); + } else { + throw new ClassNotFoundException('class not exists:' . $class, $class); + } + } + + $this->__set($guid, $class); + + return $object; + } + + /** + * 实例化(分层)模型 + * @access public + * @param string $name Model名称 + * @param string $layer 业务层名称 + * @param bool $appendSuffix 是否添加类名后缀 + * @param string $common 公共模块名 + * @return Model + * @throws ClassNotFoundException + */ + public function model($name = '', $layer = 'model', $appendSuffix = false, $common = 'common') + { + return $this->create($name, $layer, $appendSuffix, $common); + } + + /** + * 实例化(分层)控制器 格式:[模块名/]控制器名 + * @access public + * @param string $name 资源地址 + * @param string $layer 控制层名称 + * @param bool $appendSuffix 是否添加类名后缀 + * @param string $empty 空控制器名称 + * @return object + * @throws ClassNotFoundException + */ + public function controller($name, $layer = 'controller', $appendSuffix = false, $empty = '') + { + list($module, $class) = $this->parseModuleAndClass($name, $layer, $appendSuffix); + + if (class_exists($class)) { + return $this->__get($class); + } elseif ($empty && class_exists($emptyClass = $this->parseClass($module, $layer, $empty, $appendSuffix))) { + return $this->__get($emptyClass); + } + + throw new ClassNotFoundException('class not exists:' . $class, $class); + } + + /** + * 实例化验证类 格式:[模块名/]验证器名 + * @access public + * @param string $name 资源地址 + * @param string $layer 验证层名称 + * @param bool $appendSuffix 是否添加类名后缀 + * @param string $common 公共模块名 + * @return Validate + * @throws ClassNotFoundException + */ + public function validate($name = '', $layer = 'validate', $appendSuffix = false, $common = 'common') + { + $name = $name ?: $this->config('default_validate'); + + if (empty($name)) { + return new Validate; + } + + return $this->create($name, $layer, $appendSuffix, $common); + } + + /** + * 数据库初始化 + * @access public + * @param mixed $config 数据库配置 + * @param bool|string $name 连接标识 true 强制重新连接 + * @return \think\db\Query + */ + public function db($config = [], $name = false) + { + return Db::connect($config, $name); + } + + /** + * 远程调用模块的操作方法 参数格式 [模块/控制器/]操作 + * @access public + * @param string $url 调用地址 + * @param string|array $vars 调用参数 支持字符串和数组 + * @param string $layer 要调用的控制层名称 + * @param bool $appendSuffix 是否添加类名后缀 + * @return mixed + * @throws ClassNotFoundException + */ + public function action($url, $vars = [], $layer = 'controller', $appendSuffix = false) + { + $info = pathinfo($url); + $action = $info['basename']; + $module = '.' != $info['dirname'] ? $info['dirname'] : $this->request->controller(); + $class = $this->controller($module, $layer, $appendSuffix); + + if (is_scalar($vars)) { + if (strpos($vars, '=')) { + parse_str($vars, $vars); + } else { + $vars = [$vars]; + } + } + + return $this->container->invokeMethod([$class, $action . $this->config('action_suffix')], $vars); + } + + /** + * 解析应用类的类名 + * @access public + * @param string $module 模块名 + * @param string $layer 层名 controller model ... + * @param string $name 类名 + * @param bool $appendSuffix + * @return string + */ + public function parseClass($module, $layer, $name, $appendSuffix = false) + { + $name = str_replace(['/', '.'], '\\', $name); + $array = explode('\\', $name); + $class = Loader::parseName(array_pop($array), 1) . ($this->suffix || $appendSuffix ? ucfirst($layer) : ''); + $path = $array ? implode('\\', $array) . '\\' : ''; + + return $this->namespace . '\\' . ($module ? $module . '\\' : '') . $layer . '\\' . $path . $class; + } + + /** + * 获取框架版本 + * @access public + * @return string + */ + public function version() + { + return static::VERSION; + } + + /** + * 是否为调试模式 + * @access public + * @return bool + */ + public function isDebug() + { + return $this->debug; + } + + /** + * 获取模块路径 + * @access public + * @return string + */ + public function getModulePath() + { + return $this->modulePath; + } + + /** + * 设置模块路径 + * @access public + * @param string $path 路径 + * @return void + */ + public function setModulePath($path) + { + $this->modulePath = $path; + $this->env->set('module_path', $path); + } + + /** + * 获取应用根目录 + * @access public + * @return string + */ + public function getRootPath() + { + return $this->rootPath; + } + + /** + * 获取应用类库目录 + * @access public + * @return string + */ + public function getAppPath() + { + if (is_null($this->appPath)) { + $this->appPath = Loader::getRootPath() . 'application' . DIRECTORY_SEPARATOR; + } + + return $this->appPath; + } + + /** + * 获取应用运行时目录 + * @access public + * @return string + */ + public function getRuntimePath() + { + return $this->runtimePath; + } + + /** + * 获取核心框架目录 + * @access public + * @return string + */ + public function getThinkPath() + { + return $this->thinkPath; + } + + /** + * 获取路由目录 + * @access public + * @return string + */ + public function getRoutePath() + { + return $this->routePath; + } + + /** + * 获取应用配置目录 + * @access public + * @return string + */ + public function getConfigPath() + { + return $this->configPath; + } + + /** + * 获取配置后缀 + * @access public + * @return string + */ + public function getConfigExt() + { + return $this->configExt; + } + + /** + * 获取应用类库命名空间 + * @access public + * @return string + */ + public function getNamespace() + { + return $this->namespace; + } + + /** + * 设置应用类库命名空间 + * @access public + * @param string $namespace 命名空间名称 + * @return $this + */ + public function setNamespace($namespace) + { + $this->namespace = $namespace; + return $this; + } + + /** + * 是否启用类库后缀 + * @access public + * @return bool + */ + public function getSuffix() + { + return $this->suffix; + } + + /** + * 获取应用开启时间 + * @access public + * @return float + */ + public function getBeginTime() + { + return $this->beginTime; + } + + /** + * 获取应用初始内存占用 + * @access public + * @return integer + */ + public function getBeginMem() + { + return $this->beginMem; + } + + /** + * 获取容器实例 + * @access public + * @return Container + */ + public function container() + { + return $this->container; + } + + public function __set($name, $value) + { + $this->container->bind($name, $value); + } + + public function __get($name) + { + return $this->container->make($name); + } + + public function __isset($name) + { + return $this->container->bound($name); + } + + public function __unset($name) + { + $this->container->__unset($name); + } + + public function offsetExists($key) + { + return $this->__isset($key); + } + + public function offsetGet($key) + { + return $this->__get($key); + } + + public function offsetSet($key, $value) + { + $this->__set($key, $value); + } + + public function offsetUnset($key) + { + $this->__unset($key); + } +} diff --git a/thinkphp/library/think/Build.php b/thinkphp/library/think/Build.php new file mode 100644 index 000000000..6de014023 --- /dev/null +++ b/thinkphp/library/think/Build.php @@ -0,0 +1,407 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +class Build +{ + /** + * 应用对象 + * @var App + */ + protected $app; + + /** + * 应用目录 + * @var string + */ + protected $basePath; + + public function __construct(App $app) + { + $this->app = $app; + $this->basePath = $this->app->getAppPath(); + } + + /** + * 根据传入的build资料创建目录和文件 + * @access public + * @param array $build build列表 + * @param string $namespace 应用类库命名空间 + * @param bool $suffix 类库后缀 + * @return void + */ + public function run(array $build = [], $namespace = 'app', $suffix = false) + { + // 锁定 + $lockfile = $this->basePath . 'build.lock'; + + if (is_writable($lockfile)) { + return; + } elseif (!touch($lockfile)) { + throw new Exception('应用目录[' . $this->basePath . ']不可写,目录无法自动生成!
请手动生成项目目录~', 10006); + } + + foreach ($build as $module => $list) { + if ('__dir__' == $module) { + // 创建目录列表 + $this->buildDir($list); + } elseif ('__file__' == $module) { + // 创建文件列表 + $this->buildFile($list); + } else { + // 创建模块 + $this->module($module, $list, $namespace, $suffix); + } + } + + // 解除锁定 + unlink($lockfile); + } + + /** + * 创建目录 + * @access protected + * @param array $list 目录列表 + * @return void + */ + protected function buildDir($list) + { + foreach ($list as $dir) { + $this->checkDirBuild($this->basePath . $dir); + } + } + + /** + * 创建文件 + * @access protected + * @param array $list 文件列表 + * @return void + */ + protected function buildFile($list) + { + foreach ($list as $file) { + if (!is_dir($this->basePath . dirname($file))) { + // 创建目录 + mkdir($this->basePath . dirname($file), 0755, true); + } + + if (!is_file($this->basePath . $file)) { + file_put_contents($this->basePath . $file, 'php' == pathinfo($file, PATHINFO_EXTENSION) ? "basePath . $module)) { + // 创建模块目录 + mkdir($this->basePath . $module); + } + + if (basename($this->app->getRuntimePath()) != $module) { + // 创建配置文件和公共文件 + $this->buildCommon($module); + // 创建模块的默认页面 + $this->buildHello($module, $namespace, $suffix); + } + + if (empty($list)) { + // 创建默认的模块目录和文件 + $list = [ + '__file__' => ['common.php'], + '__dir__' => ['controller', 'model', 'view', 'config'], + ]; + } + + // 创建子目录和文件 + foreach ($list as $path => $file) { + $modulePath = $this->basePath . $module . DIRECTORY_SEPARATOR; + if ('__dir__' == $path) { + // 生成子目录 + foreach ($file as $dir) { + $this->checkDirBuild($modulePath . $dir); + } + } elseif ('__file__' == $path) { + // 生成(空白)文件 + foreach ($file as $name) { + if (!is_file($modulePath . $name)) { + file_put_contents($modulePath . $name, 'php' == pathinfo($name, PATHINFO_EXTENSION) ? "checkDirBuild(dirname($filename)); + $content = ''; + break; + default: + // 其他文件 + $content = "app->getNameSpace(); + $modules = glob($this->basePath . '*', GLOB_ONLYDIR); + $content = 'app->config('app.url_controller_layer'); + } + + foreach ($modules as $module) { + $module = basename($module); + + if (in_array($module, $this->app->config('app.deny_module_list'))) { + continue; + } + + $path = $this->basePath . $module . DIRECTORY_SEPARATOR . $layer . DIRECTORY_SEPARATOR; + $content .= $this->buildDirRoute($path, $namespace, $module, $suffix, $layer); + } + + $filename = $this->app->getRuntimePath() . 'build_route.php'; + file_put_contents($filename, $content); + + return $filename; + } + + /** + * 生成子目录控制器类的路由规则 + * @access protected + * @param string $path 控制器目录 + * @param string $namespace 应用命名空间 + * @param string $module 模块 + * @param bool $suffix 类库后缀 + * @param string $layer 控制器层目录名 + * @return string + */ + protected function buildDirRoute($path, $namespace, $module, $suffix, $layer) + { + $content = ''; + $controllers = glob($path . '*.php'); + + foreach ($controllers as $controller) { + $controller = basename($controller, '.php'); + + if ($suffix) { + // 控制器后缀 + $controller = substr($controller, 0, -10); + } + + $class = new \ReflectionClass($namespace . '\\' . $module . '\\' . $layer . '\\' . $controller); + + if (strpos($layer, DIRECTORY_SEPARATOR)) { + // 多级控制器 + $level = str_replace(DIRECTORY_SEPARATOR, '.', substr($layer, 11)); + $controller = $level . '.' . $controller; + } + + $content .= $this->getControllerRoute($class, $module, $controller); + } + + $subDir = glob($path . '*', GLOB_ONLYDIR); + + foreach ($subDir as $dir) { + $content .= $this->buildDirRoute($dir . DIRECTORY_SEPARATOR, $namespace, $module, $suffix, $layer . '\\' . basename($dir)); + } + + return $content; + } + + /** + * 生成控制器类的路由规则 + * @access protected + * @param string $class 控制器完整类名 + * @param string $module 模块名 + * @param string $controller 控制器名 + * @return string + */ + protected function getControllerRoute($class, $module, $controller) + { + $content = ''; + $comment = $class->getDocComment(); + + if (false !== strpos($comment, '@route(')) { + $comment = $this->parseRouteComment($comment); + $route = $module . '/' . $controller; + $comment = preg_replace('/route\(\s?([\'\"][\-\_\/\:\<\>\?\$\[\]\w]+[\'\"])\s?\)/is', 'Route::resourece(\1,\'' . $route . '\')', $comment); + $content .= PHP_EOL . $comment; + } elseif (false !== strpos($comment, '@alias(')) { + $comment = $this->parseRouteComment($comment, '@alias('); + $route = $module . '/' . $controller; + $comment = preg_replace('/alias\(\s?([\'\"][\-\_\/\w]+[\'\"])\s?\)/is', 'Route::alias(\1,\'' . $route . '\')', $comment); + $content .= PHP_EOL . $comment; + } + + $methods = $class->getMethods(\ReflectionMethod::IS_PUBLIC); + + foreach ($methods as $method) { + $comment = $this->getMethodRouteComment($module, $controller, $method); + if ($comment) { + $content .= PHP_EOL . $comment; + } + } + + return $content; + } + + /** + * 解析路由注释 + * @access protected + * @param string $comment + * @param string $tag + * @return string + */ + protected function parseRouteComment($comment, $tag = '@route(') + { + $comment = substr($comment, 3, -2); + $comment = explode(PHP_EOL, substr(strstr(trim($comment), $tag), 1)); + $comment = array_map(function ($item) {return trim(trim($item), ' \t*');}, $comment); + + if (count($comment) > 1) { + $key = array_search('', $comment); + $comment = array_slice($comment, 0, false === $key ? 1 : $key); + } + + $comment = implode(PHP_EOL . "\t", $comment) . ';'; + + if (strpos($comment, '{')) { + $comment = preg_replace_callback('/\{\s?.*?\s?\}/s', function ($matches) { + return false !== strpos($matches[0], '"') ? '[' . substr(var_export(json_decode($matches[0], true), true), 7, -1) . ']' : $matches[0]; + }, $comment); + } + return $comment; + } + + /** + * 获取方法的路由注释 + * @access protected + * @param string $module 模块 + * @param string $controller 控制器名 + * @param \ReflectMethod $reflectMethod + * @return string|void + */ + protected function getMethodRouteComment($module, $controller, $reflectMethod) + { + $comment = $reflectMethod->getDocComment(); + + if (false !== strpos($comment, '@route(')) { + $comment = $this->parseRouteComment($comment); + $action = $reflectMethod->getName(); + + if ($suffix = $this->app->config('app.action_suffix')) { + $action = substr($action, 0, -strlen($suffix)); + } + + $route = $module . '/' . $controller . '/' . $action; + $comment = preg_replace('/route\s?\(\s?([\'\"][\-\_\/\:\<\>\?\$\[\]\w]+[\'\"])\s?\,?\s?[\'\"]?(\w+?)[\'\"]?\s?\)/is', 'Route::\2(\1,\'' . $route . '\')', $comment); + $comment = preg_replace('/route\s?\(\s?([\'\"][\-\_\/\:\<\>\?\$\[\]\w]+[\'\"])\s?\)/is', 'Route::rule(\1,\'' . $route . '\')', $comment); + + return $comment; + } + } + + /** + * 创建模块的欢迎页面 + * @access protected + * @param string $module 模块名 + * @param string $namespace 应用类库命名空间 + * @param bool $suffix 类库后缀 + * @return void + */ + protected function buildHello($module, $namespace, $suffix = false) + { + $filename = $this->basePath . ($module ? $module . DIRECTORY_SEPARATOR : '') . 'controller' . DIRECTORY_SEPARATOR . 'Index' . ($suffix ? 'Controller' : '') . '.php'; + if (!is_file($filename)) { + $content = file_get_contents($this->app->getThinkPath() . 'tpl' . DIRECTORY_SEPARATOR . 'default_index.tpl'); + $content = str_replace(['{$app}', '{$module}', '{layer}', '{$suffix}'], [$namespace, $module ? $module . '\\' : '', 'controller', $suffix ? 'Controller' : ''], $content); + $this->checkDirBuild(dirname($filename)); + + file_put_contents($filename, $content); + } + } + + /** + * 创建模块的公共文件 + * @access protected + * @param string $module 模块名 + * @return void + */ + protected function buildCommon($module) + { + $filename = $this->app->getConfigPath() . ($module ? $module . DIRECTORY_SEPARATOR : '') . 'app.php'; + $this->checkDirBuild(dirname($filename)); + + if (!is_file($filename)) { + file_put_contents($filename, "basePath . ($module ? $module . DIRECTORY_SEPARATOR : '') . 'common.php'; + + if (!is_file($filename)) { + file_put_contents($filename, " +// +---------------------------------------------------------------------- + +namespace think; + +use think\cache\Driver; + +class Cache +{ + /** + * 缓存实例 + * @var array + */ + protected $instance = []; + + /** + * 应用对象 + * @var App + */ + protected $app; + + /** + * 操作句柄 + * @var object + */ + protected $handler; + + public function __construct(App $app) + { + $this->app = $app; + } + + /** + * 连接缓存 + * @access public + * @param array $options 配置数组 + * @param bool|string $name 缓存连接标识 true 强制重新连接 + * @return Driver + */ + public function connect(array $options = [], $name = false) + { + $type = !empty($options['type']) ? $options['type'] : 'File'; + + if (false === $name) { + $name = md5(serialize($options)); + } + + if (true === $name || !isset($this->instance[$name])) { + $class = false !== strpos($type, '\\') ? $type : '\\think\\cache\\driver\\' . ucwords($type); + + // 记录初始化信息 + $this->app->log('[ CACHE ] INIT ' . $type); + + if (true === $name) { + $name = md5(serialize($options)); + } + + $this->instance[$name] = new $class($options); + } + + return $this->instance[$name]; + } + + /** + * 自动初始化缓存 + * @access public + * @param array $options 配置数组 + * @return Driver + */ + public function init(array $options = []) + { + if (is_null($this->handler)) { + // 自动初始化缓存 + $config = $this->app['config']; + + if (empty($options) && 'complex' == $config->get('cache.type')) { + $default = $config->get('cache.default'); + $options = $config->get('cache.' . $default['type']) ?: $default; + } elseif (empty($options)) { + $options = $config->pull('cache'); + } + + $this->handler = $this->connect($options); + } + + return $this->handler; + } + + /** + * 切换缓存类型 需要配置 cache.type 为 complex + * @access public + * @param string $name 缓存标识 + * @return Driver + */ + public function store($name = '') + { + if ('' !== $name && 'complex' == $this->app['config']->get('cache.type')) { + return $this->connect($this->app['config']->get('cache.' . $name), strtolower($name)); + } + + return $this->init(); + } + + public function __call($method, $args) + { + return call_user_func_array([$this->init(), $method], $args); + } + +} diff --git a/thinkphp/library/think/Collection.php b/thinkphp/library/think/Collection.php new file mode 100644 index 000000000..929b51939 --- /dev/null +++ b/thinkphp/library/think/Collection.php @@ -0,0 +1,388 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +use ArrayAccess; +use ArrayIterator; +use Countable; +use IteratorAggregate; +use JsonSerializable; + +class Collection implements ArrayAccess, Countable, IteratorAggregate, JsonSerializable +{ + /** + * 数据集数据 + * @var array + */ + protected $items = []; + + public function __construct($items = []) + { + $this->items = $this->convertToArray($items); + } + + public static function make($items = []) + { + return new static($items); + } + + /** + * 是否为空 + * @access public + * @return bool + */ + public function isEmpty() + { + return empty($this->items); + } + + public function toArray() + { + return array_map(function ($value) { + return ($value instanceof Model || $value instanceof self) ? $value->toArray() : $value; + }, $this->items); + } + + public function all() + { + return $this->items; + } + + /** + * 合并数组 + * + * @access public + * @param mixed $items + * @return static + */ + public function merge($items) + { + return new static(array_merge($this->items, $this->convertToArray($items))); + } + + /** + * 比较数组,返回差集 + * + * @access public + * @param mixed $items + * @return static + */ + public function diff($items) + { + return new static(array_diff($this->items, $this->convertToArray($items))); + } + + /** + * 交换数组中的键和值 + * + * @access public + * @return static + */ + public function flip() + { + return new static(array_flip($this->items)); + } + + /** + * 比较数组,返回交集 + * + * @access public + * @param mixed $items + * @return static + */ + public function intersect($items) + { + return new static(array_intersect($this->items, $this->convertToArray($items))); + } + + /** + * 返回数组中所有的键名 + * + * @access public + * @return static + */ + public function keys() + { + return new static(array_keys($this->items)); + } + + /** + * 删除数组的最后一个元素(出栈) + * + * @access public + * @return mixed + */ + public function pop() + { + return array_pop($this->items); + } + + /** + * 通过使用用户自定义函数,以字符串返回数组 + * + * @access public + * @param callable $callback + * @param mixed $initial + * @return mixed + */ + public function reduce(callable $callback, $initial = null) + { + return array_reduce($this->items, $callback, $initial); + } + + /** + * 以相反的顺序返回数组。 + * + * @access public + * @return static + */ + public function reverse() + { + return new static(array_reverse($this->items)); + } + + /** + * 删除数组中首个元素,并返回被删除元素的值 + * + * @access public + * @return mixed + */ + public function shift() + { + return array_shift($this->items); + } + + /** + * 在数组结尾插入一个元素 + * @access public + * @param mixed $value + * @param mixed $key + * @return void + */ + public function push($value, $key = null) + { + if (is_null($key)) { + $this->items[] = $value; + } else { + $this->items[$key] = $value; + } + } + + /** + * 把一个数组分割为新的数组块. + * + * @access public + * @param int $size + * @param bool $preserveKeys + * @return static + */ + public function chunk($size, $preserveKeys = false) + { + $chunks = []; + + foreach (array_chunk($this->items, $size, $preserveKeys) as $chunk) { + $chunks[] = new static($chunk); + } + + return new static($chunks); + } + + /** + * 在数组开头插入一个元素 + * @access public + * @param mixed $value + * @param mixed $key + * @return void + */ + public function unshift($value, $key = null) + { + if (is_null($key)) { + array_unshift($this->items, $value); + } else { + $this->items = [$key => $value] + $this->items; + } + } + + /** + * 给每个元素执行个回调 + * + * @access public + * @param callable $callback + * @return $this + */ + public function each(callable $callback) + { + foreach ($this->items as $key => $item) { + $result = $callback($item, $key); + + if (false === $result) { + break; + } elseif (!is_object($item)) { + $this->items[$key] = $result; + } + } + + return $this; + } + + /** + * 用回调函数过滤数组中的元素 + * @access public + * @param callable|null $callback + * @return static + */ + public function filter(callable $callback = null) + { + if ($callback) { + return new static(array_filter($this->items, $callback)); + } + + return new static(array_filter($this->items)); + } + + /** + * 返回数据中指定的一列 + * @access public + * @param mixed $columnKey 键名 + * @param mixed $indexKey 作为索引值的列 + * @return array + */ + public function column($columnKey, $indexKey = null) + { + return array_column($this->items, $columnKey, $indexKey); + } + + /** + * 对数组排序 + * + * @access public + * @param callable|null $callback + * @return static + */ + public function sort(callable $callback = null) + { + $items = $this->items; + + $callback = $callback ?: function ($a, $b) { + return $a == $b ? 0 : (($a < $b) ? -1 : 1); + + }; + + uasort($items, $callback); + + return new static($items); + } + + /** + * 将数组打乱 + * + * @access public + * @return static + */ + public function shuffle() + { + $items = $this->items; + + shuffle($items); + + return new static($items); + } + + /** + * 截取数组 + * + * @access public + * @param int $offset + * @param int $length + * @param bool $preserveKeys + * @return static + */ + public function slice($offset, $length = null, $preserveKeys = false) + { + return new static(array_slice($this->items, $offset, $length, $preserveKeys)); + } + + // ArrayAccess + public function offsetExists($offset) + { + return array_key_exists($offset, $this->items); + } + + public function offsetGet($offset) + { + return $this->items[$offset]; + } + + public function offsetSet($offset, $value) + { + if (is_null($offset)) { + $this->items[] = $value; + } else { + $this->items[$offset] = $value; + } + } + + public function offsetUnset($offset) + { + unset($this->items[$offset]); + } + + //Countable + public function count() + { + return count($this->items); + } + + //IteratorAggregate + public function getIterator() + { + return new ArrayIterator($this->items); + } + + //JsonSerializable + public function jsonSerialize() + { + return $this->toArray(); + } + + /** + * 转换当前数据集为JSON字符串 + * @access public + * @param integer $options json参数 + * @return string + */ + public function toJson($options = JSON_UNESCAPED_UNICODE) + { + return json_encode($this->toArray(), $options); + } + + public function __toString() + { + return $this->toJson(); + } + + /** + * 转换成数组 + * + * @access public + * @param mixed $items + * @return array + */ + protected function convertToArray($items) + { + if ($items instanceof self) { + return $items->all(); + } + + return (array) $items; + } +} diff --git a/thinkphp/library/think/Config.php b/thinkphp/library/think/Config.php new file mode 100644 index 000000000..603c655f4 --- /dev/null +++ b/thinkphp/library/think/Config.php @@ -0,0 +1,313 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +class Config implements \ArrayAccess +{ + /** + * 配置参数 + * @var array + */ + private $config = []; + + /** + * 缓存前缀 + * @var string + */ + private $prefix = 'app'; + + /** + * 设置配置参数默认前缀 + * @access public + * @param string $prefix 前缀 + * @return void + */ + public function setDefaultPrefix($prefix) + { + $this->prefix = $prefix; + } + + /** + * 解析配置文件或内容 + * @access public + * @param string $config 配置文件路径或内容 + * @param string $type 配置解析类型 + * @param string $name 配置名(如设置即表示二级配置) + * @return mixed + */ + public function parse($config, $type = '', $name = '') + { + if (empty($type)) { + $type = pathinfo($config, PATHINFO_EXTENSION); + } + + $class = false !== strpos($type, '\\') ? $type : '\\think\\config\\driver\\' . ucwords($type); + + return $this->set((new $class())->parse($config), $name); + } + + /** + * 加载配置文件(多种格式) + * @access public + * @param string $file 配置文件名 + * @param string $name 一级配置名 + * @return mixed + */ + public function load($file, $name = '') + { + if (is_file($file)) { + $name = strtolower($name); + $type = pathinfo($file, PATHINFO_EXTENSION); + + if ('php' == $type) { + return $this->set(include $file, $name); + } elseif ('yaml' == $type && function_exists('yaml_parse_file')) { + return $this->set(yaml_parse_file($file), $name); + } + return $this->parse($file, $type, $name); + } + + return $this->config; + } + + /** + * 自动加载配置文件(PHP格式) + * @access public + * @param string $name 配置名 + * @return void + */ + protected function autoLoad($name) + { + // 如果尚未载入 则动态加载配置文件 + $module = Container::get('request')->module(); + $module = $module ? $module . DIRECTORY_SEPARATOR : ''; + $app = Container::get('app'); + $path = $app->getAppPath() . $module; + + if (is_dir($path . 'config')) { + $file = $path . 'config' . DIRECTORY_SEPARATOR . $name . $app->getConfigExt(); + } elseif (is_dir($app->getConfigPath() . $module)) { + $file = $app->getConfigPath() . $module . $name . $app->getConfigExt(); + } + + if (isset($file) && is_file($file)) { + $this->load($file, $name); + } + } + + /** + * 检测配置是否存在 + * @access public + * @param string $name 配置参数名(支持多级配置 .号分割) + * @return bool + */ + public function has($name) + { + if (!strpos($name, '.')) { + $name = $this->prefix . '.' . $name; + } + + return !is_null($this->get($name)) ? true : false; + } + + /** + * 获取一级配置 + * @access public + * @param string $name 一级配置名 + * @return array + */ + public function pull($name) + { + $name = strtolower($name); + + if (!isset($this->config[$name])) { + // 如果尚未载入 则动态加载配置文件 + $this->autoLoad($name); + } + + return isset($this->config[$name]) ? $this->config[$name] : []; + } + + /** + * 获取配置参数 为空则获取所有配置 + * @access public + * @param string $name 配置参数名(支持多级配置 .号分割) + * @return mixed + */ + public function get($name = null) + { + // 无参数时获取所有 + if (empty($name)) { + return $this->config; + } + + if (!strpos($name, '.')) { + $name = $this->prefix . '.' . $name; + } elseif ('.' == substr($name, -1)) { + return $this->pull(substr($name, 0, -1)); + } + + $name = explode('.', $name); + $name[0] = strtolower($name[0]); + $config = $this->config; + + if (!isset($config[$name[0]])) { + // 如果尚未载入 则动态加载配置文件 + $this->autoLoad($name[0]); + } + + // 按.拆分成多维数组进行判断 + foreach ($name as $val) { + if (isset($config[$val])) { + $config = $config[$val]; + } else { + return; + } + } + + return $config; + } + + /** + * 设置配置参数 name为数组则为批量设置 + * @access public + * @param string|array $name 配置参数名(支持三级配置 .号分割) + * @param mixed $value 配置值 + * @return mixed + */ + public function set($name, $value = null) + { + if (is_string($name)) { + if (!strpos($name, '.')) { + $name = $this->prefix . '.' . $name; + } + + $name = explode('.', $name, 3); + + if (count($name) == 2) { + $this->config[strtolower($name[0])][$name[1]] = $value; + } else { + $this->config[strtolower($name[0])][$name[1]][$name[2]] = $value; + } + + return $value; + } elseif (is_array($name)) { + // 批量设置 + if (!empty($value)) { + if (isset($this->config[$value])) { + $result = array_merge($this->config[$value], $name); + } else { + $result = $name; + } + + $this->config[$value] = $result; + } else { + $result = $this->config = array_merge($this->config, $name); + } + } else { + // 为空直接返回 已有配置 + $result = $this->config; + } + + return $result; + } + + /** + * 移除配置 + * @access public + * @param string $name 配置参数名(支持三级配置 .号分割) + * @return void + */ + public function remove($name) + { + if (!strpos($name, '.')) { + $name = $this->prefix . '.' . $name; + } + + $name = explode('.', $name, 3); + + if (count($name) == 2) { + unset($this->config[strtolower($name[0])][$name[1]]); + } else { + unset($this->config[strtolower($name[0])][$name[1]][$name[2]]); + } + } + + /** + * 重置配置参数 + * @access public + * @param string $prefix 配置前缀名 + * @return void + */ + public function reset($prefix = '') + { + if ('' === $prefix) { + $this->config = []; + } else { + $this->config[$prefix] = []; + } + } + + /** + * 设置配置 + * @access public + * @param string $name 参数名 + * @param mixed $value 值 + */ + public function __set($name, $value) + { + return $this->set($name, $value); + } + + /** + * 获取配置参数 + * @access public + * @param string $name 参数名 + * @return mixed + */ + public function __get($name) + { + return $this->get($name); + } + + /** + * 检测是否存在参数 + * @access public + * @param string $name 参数名 + * @return bool + */ + public function __isset($name) + { + return $this->has($name); + } + + // ArrayAccess + public function offsetSet($name, $value) + { + $this->set($name, $value); + } + + public function offsetExists($name) + { + return $this->has($name); + } + + public function offsetUnset($name) + { + $this->remove($name); + } + + public function offsetGet($name) + { + return $this->get($name); + } +} diff --git a/thinkphp/library/think/Console.php b/thinkphp/library/think/Console.php new file mode 100644 index 000000000..8782aa92e --- /dev/null +++ b/thinkphp/library/think/Console.php @@ -0,0 +1,794 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +use think\console\Command; +use think\console\command\Help as HelpCommand; +use think\console\Input; +use think\console\input\Argument as InputArgument; +use think\console\input\Definition as InputDefinition; +use think\console\input\Option as InputOption; +use think\console\Output; +use think\console\output\driver\Buffer; + +class Console +{ + + private $name; + private $version; + + /** @var Command[] */ + private $commands = []; + + private $wantHelps = false; + + private $catchExceptions = true; + private $autoExit = true; + private $definition; + private $defaultCommand; + + private static $defaultCommands = [ + "think\\console\\command\\Help", + "think\\console\\command\\Lists", + "think\\console\\command\\Build", + "think\\console\\command\\Clear", + "think\\console\\command\\make\\Controller", + "think\\console\\command\\make\\Model", + "think\\console\\command\\make\\Middleware", + "think\\console\\command\\optimize\\Autoload", + "think\\console\\command\\optimize\\Config", + "think\\console\\command\\optimize\\Schema", + "think\\console\\command\\optimize\\Route", + "think\\console\\command\\RunServer", + ]; + + /** + * Console constructor. + * @access public + * @param string $name 名称 + * @param string $version 版本 + * @param null|string $user 执行用户 + */ + public function __construct($name = 'UNKNOWN', $version = 'UNKNOWN', $user = null) + { + $this->name = $name; + $this->version = $version; + + if ($user) { + $this->setUser($user); + } + + $this->defaultCommand = 'list'; + $this->definition = $this->getDefaultInputDefinition(); + + foreach ($this->getDefaultCommands() as $command) { + $this->add($command); + } + } + + /** + * 设置执行用户 + * @param $user + */ + public function setUser($user) + { + $user = posix_getpwnam($user); + if ($user) { + posix_setuid($user['uid']); + posix_setgid($user['gid']); + } + } + + /** + * 初始化 Console + * @access public + * @param bool $run 是否运行 Console + * @return int|Console + */ + public static function init($run = true) + { + static $console; + + if (!$console) { + $config = Container::get('config')->pull('console'); + // 实例化 console + $console = new self($config['name'], $config['version'], $config['user']); + + // 读取指令集 + $file = Container::get('env')->get('app_path') . 'command.php'; + + if (is_file($file)) { + $commands = include $file; + + if (is_array($commands)) { + foreach ($commands as $command) { + if (class_exists($command) && is_subclass_of($command, "\\think\\console\\Command")) { + // 注册指令 + $console->add(new $command()); + } + } + } + } + } + + if ($run) { + // 运行 + return $console->run(); + } else { + return $console; + } + } + + /** + * @access public + * @param string $command + * @param array $parameters + * @param string $driver + * @return Output|Buffer + */ + public static function call($command, array $parameters = [], $driver = 'buffer') + { + $console = self::init(false); + + array_unshift($parameters, $command); + + $input = new Input($parameters); + $output = new Output($driver); + + $console->setCatchExceptions(false); + $console->find($command)->run($input, $output); + + return $output; + } + + /** + * 执行当前的指令 + * @access public + * @return int + * @throws \Exception + * @api + */ + public function run() + { + $input = new Input(); + $output = new Output(); + + $this->configureIO($input, $output); + + try { + $exitCode = $this->doRun($input, $output); + } catch (\Exception $e) { + if (!$this->catchExceptions) { + throw $e; + } + + $output->renderException($e); + + $exitCode = $e->getCode(); + if (is_numeric($exitCode)) { + $exitCode = (int) $exitCode; + if (0 === $exitCode) { + $exitCode = 1; + } + } else { + $exitCode = 1; + } + } + + if ($this->autoExit) { + if ($exitCode > 255) { + $exitCode = 255; + } + + exit($exitCode); + } + + return $exitCode; + } + + /** + * 执行指令 + * @access public + * @param Input $input + * @param Output $output + * @return int + */ + public function doRun(Input $input, Output $output) + { + if (true === $input->hasParameterOption(['--version', '-V'])) { + $output->writeln($this->getLongVersion()); + + return 0; + } + + $name = $this->getCommandName($input); + + if (true === $input->hasParameterOption(['--help', '-h'])) { + if (!$name) { + $name = 'help'; + $input = new Input(['help']); + } else { + $this->wantHelps = true; + } + } + + if (!$name) { + $name = $this->defaultCommand; + $input = new Input([$this->defaultCommand]); + } + + $command = $this->find($name); + + $exitCode = $this->doRunCommand($command, $input, $output); + + return $exitCode; + } + + /** + * 设置输入参数定义 + * @access public + * @param InputDefinition $definition + */ + public function setDefinition(InputDefinition $definition) + { + $this->definition = $definition; + } + + /** + * 获取输入参数定义 + * @access public + * @return InputDefinition The InputDefinition instance + */ + public function getDefinition() + { + return $this->definition; + } + + /** + * Gets the help message. + * @access public + * @return string A help message. + */ + public function getHelp() + { + return $this->getLongVersion(); + } + + /** + * 是否捕获异常 + * @access public + * @param bool $boolean + * @api + */ + public function setCatchExceptions($boolean) + { + $this->catchExceptions = (bool) $boolean; + } + + /** + * 是否自动退出 + * @access public + * @param bool $boolean + * @api + */ + public function setAutoExit($boolean) + { + $this->autoExit = (bool) $boolean; + } + + /** + * 获取名称 + * @access public + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * 设置名称 + * @access public + * @param string $name + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * 获取版本 + * @access public + * @return string + * @api + */ + public function getVersion() + { + return $this->version; + } + + /** + * 设置版本 + * @access public + * @param string $version + */ + public function setVersion($version) + { + $this->version = $version; + } + + /** + * 获取完整的版本号 + * @access public + * @return string + */ + public function getLongVersion() + { + if ('UNKNOWN' !== $this->getName() && 'UNKNOWN' !== $this->getVersion()) { + return sprintf('%s version %s', $this->getName(), $this->getVersion()); + } + + return 'Console Tool'; + } + + /** + * 注册一个指令 + * @access public + * @param string $name + * @return Command + */ + public function register($name) + { + return $this->add(new Command($name)); + } + + /** + * 添加指令 + * @access public + * @param Command[] $commands + */ + public function addCommands(array $commands) + { + foreach ($commands as $command) { + $this->add($command); + } + } + + /** + * 添加一个指令 + * @access public + * @param Command $command + * @return Command + */ + public function add(Command $command) + { + $command->setConsole($this); + + if (!$command->isEnabled()) { + $command->setConsole(null); + return; + } + + if (null === $command->getDefinition()) { + throw new \LogicException(sprintf('Command class "%s" is not correctly initialized. You probably forgot to call the parent constructor.', get_class($command))); + } + + $this->commands[$command->getName()] = $command; + + foreach ($command->getAliases() as $alias) { + $this->commands[$alias] = $command; + } + + return $command; + } + + /** + * 获取指令 + * @access public + * @param string $name 指令名称 + * @return Command + * @throws \InvalidArgumentException + */ + public function get($name) + { + if (!isset($this->commands[$name])) { + throw new \InvalidArgumentException(sprintf('The command "%s" does not exist.', $name)); + } + + $command = $this->commands[$name]; + + if ($this->wantHelps) { + $this->wantHelps = false; + + /** @var HelpCommand $helpCommand */ + $helpCommand = $this->get('help'); + $helpCommand->setCommand($command); + + return $helpCommand; + } + + return $command; + } + + /** + * 某个指令是否存在 + * @access public + * @param string $name 指令名称 + * @return bool + */ + public function has($name) + { + return isset($this->commands[$name]); + } + + /** + * 获取所有的命名空间 + * @access public + * @return array + */ + public function getNamespaces() + { + $namespaces = []; + foreach ($this->commands as $command) { + $namespaces = array_merge($namespaces, $this->extractAllNamespaces($command->getName())); + + foreach ($command->getAliases() as $alias) { + $namespaces = array_merge($namespaces, $this->extractAllNamespaces($alias)); + } + } + + return array_values(array_unique(array_filter($namespaces))); + } + + /** + * 查找注册命名空间中的名称或缩写。 + * @access public + * @param string $namespace + * @return string + * @throws \InvalidArgumentException + */ + public function findNamespace($namespace) + { + $allNamespaces = $this->getNamespaces(); + $expr = preg_replace_callback('{([^:]+|)}', function ($matches) { + return preg_quote($matches[1]) . '[^:]*'; + }, $namespace); + $namespaces = preg_grep('{^' . $expr . '}', $allNamespaces); + + if (empty($namespaces)) { + $message = sprintf('There are no commands defined in the "%s" namespace.', $namespace); + + if ($alternatives = $this->findAlternatives($namespace, $allNamespaces)) { + if (1 == count($alternatives)) { + $message .= "\n\nDid you mean this?\n "; + } else { + $message .= "\n\nDid you mean one of these?\n "; + } + + $message .= implode("\n ", $alternatives); + } + + throw new \InvalidArgumentException($message); + } + + $exact = in_array($namespace, $namespaces, true); + if (count($namespaces) > 1 && !$exact) { + throw new \InvalidArgumentException(sprintf('The namespace "%s" is ambiguous (%s).', $namespace, $this->getAbbreviationSuggestions(array_values($namespaces)))); + } + + return $exact ? $namespace : reset($namespaces); + } + + /** + * 查找指令 + * @access public + * @param string $name 名称或者别名 + * @return Command + * @throws \InvalidArgumentException + */ + public function find($name) + { + $allCommands = array_keys($this->commands); + + $expr = preg_replace_callback('{([^:]+|)}', function ($matches) { + return preg_quote($matches[1]) . '[^:]*'; + }, $name); + + $commands = preg_grep('{^' . $expr . '}', $allCommands); + + if (empty($commands) || count(preg_grep('{^' . $expr . '$}', $commands)) < 1) { + if (false !== $pos = strrpos($name, ':')) { + $this->findNamespace(substr($name, 0, $pos)); + } + + $message = sprintf('Command "%s" is not defined.', $name); + + if ($alternatives = $this->findAlternatives($name, $allCommands)) { + if (1 == count($alternatives)) { + $message .= "\n\nDid you mean this?\n "; + } else { + $message .= "\n\nDid you mean one of these?\n "; + } + $message .= implode("\n ", $alternatives); + } + + throw new \InvalidArgumentException($message); + } + + if (count($commands) > 1) { + $commandList = $this->commands; + + $commands = array_filter($commands, function ($nameOrAlias) use ($commandList, $commands) { + $commandName = $commandList[$nameOrAlias]->getName(); + + return $commandName === $nameOrAlias || !in_array($commandName, $commands); + }); + } + + $exact = in_array($name, $commands, true); + if (count($commands) > 1 && !$exact) { + $suggestions = $this->getAbbreviationSuggestions(array_values($commands)); + + throw new \InvalidArgumentException(sprintf('Command "%s" is ambiguous (%s).', $name, $suggestions)); + } + + return $this->get($exact ? $name : reset($commands)); + } + + /** + * 获取所有的指令 + * @access public + * @param string $namespace 命名空间 + * @return Command[] + * @api + */ + public function all($namespace = null) + { + if (null === $namespace) { + return $this->commands; + } + + $commands = []; + foreach ($this->commands as $name => $command) { + if ($this->extractNamespace($name, substr_count($namespace, ':') + 1) === $namespace) { + $commands[$name] = $command; + } + } + + return $commands; + } + + /** + * 获取可能的指令名 + * @access public + * @param array $names + * @return array + */ + public static function getAbbreviations($names) + { + $abbrevs = []; + foreach ($names as $name) { + for ($len = strlen($name); $len > 0; --$len) { + $abbrev = substr($name, 0, $len); + $abbrevs[$abbrev][] = $name; + } + } + + return $abbrevs; + } + + /** + * 配置基于用户的参数和选项的输入和输出实例。 + * @access protected + * @param Input $input 输入实例 + * @param Output $output 输出实例 + */ + protected function configureIO(Input $input, Output $output) + { + if (true === $input->hasParameterOption(['--ansi'])) { + $output->setDecorated(true); + } elseif (true === $input->hasParameterOption(['--no-ansi'])) { + $output->setDecorated(false); + } + + if (true === $input->hasParameterOption(['--no-interaction', '-n'])) { + $input->setInteractive(false); + } + + if (true === $input->hasParameterOption(['--quiet', '-q'])) { + $output->setVerbosity(Output::VERBOSITY_QUIET); + } else { + if ($input->hasParameterOption('-vvv') || $input->hasParameterOption('--verbose=3') || $input->getParameterOption('--verbose') === 3) { + $output->setVerbosity(Output::VERBOSITY_DEBUG); + } elseif ($input->hasParameterOption('-vv') || $input->hasParameterOption('--verbose=2') || $input->getParameterOption('--verbose') === 2) { + $output->setVerbosity(Output::VERBOSITY_VERY_VERBOSE); + } elseif ($input->hasParameterOption('-v') || $input->hasParameterOption('--verbose=1') || $input->hasParameterOption('--verbose') || $input->getParameterOption('--verbose')) { + $output->setVerbosity(Output::VERBOSITY_VERBOSE); + } + } + } + + /** + * 执行指令 + * @access protected + * @param Command $command 指令实例 + * @param Input $input 输入实例 + * @param Output $output 输出实例 + * @return int + * @throws \Exception + */ + protected function doRunCommand(Command $command, Input $input, Output $output) + { + return $command->run($input, $output); + } + + /** + * 获取指令的基础名称 + * @access protected + * @param Input $input + * @return string + */ + protected function getCommandName(Input $input) + { + return $input->getFirstArgument(); + } + + /** + * 获取默认输入定义 + * @access protected + * @return InputDefinition + */ + protected function getDefaultInputDefinition() + { + return new InputDefinition([ + new InputArgument('command', InputArgument::REQUIRED, 'The command to execute'), + new InputOption('--help', '-h', InputOption::VALUE_NONE, 'Display this help message'), + new InputOption('--version', '-V', InputOption::VALUE_NONE, 'Display this console version'), + new InputOption('--quiet', '-q', InputOption::VALUE_NONE, 'Do not output any message'), + new InputOption('--verbose', '-v|vv|vvv', InputOption::VALUE_NONE, 'Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug'), + new InputOption('--ansi', '', InputOption::VALUE_NONE, 'Force ANSI output'), + new InputOption('--no-ansi', '', InputOption::VALUE_NONE, 'Disable ANSI output'), + new InputOption('--no-interaction', '-n', InputOption::VALUE_NONE, 'Do not ask any interactive question'), + ]); + } + + /** + * 设置默认命令 + * @access protected + * @return Command[] An array of default Command instances + */ + protected function getDefaultCommands() + { + $defaultCommands = []; + + foreach (self::$defaultCommands as $classname) { + if (class_exists($classname) && is_subclass_of($classname, "think\\console\\Command")) { + $defaultCommands[] = new $classname(); + } + } + + return $defaultCommands; + } + + public static function addDefaultCommands(array $classnames) + { + self::$defaultCommands = array_merge(self::$defaultCommands, $classnames); + } + + /** + * 获取可能的建议 + * @access private + * @param array $abbrevs + * @return string + */ + private function getAbbreviationSuggestions($abbrevs) + { + return sprintf('%s, %s%s', $abbrevs[0], $abbrevs[1], count($abbrevs) > 2 ? sprintf(' and %d more', count($abbrevs) - 2) : ''); + } + + /** + * 返回命名空间部分 + * @access public + * @param string $name 指令 + * @param string $limit 部分的命名空间的最大数量 + * @return string + */ + public function extractNamespace($name, $limit = null) + { + $parts = explode(':', $name); + array_pop($parts); + + return implode(':', null === $limit ? $parts : array_slice($parts, 0, $limit)); + } + + /** + * 查找可替代的建议 + * @access private + * @param string $name + * @param array|\Traversable $collection + * @return array + */ + private function findAlternatives($name, $collection) + { + $threshold = 1e3; + $alternatives = []; + + $collectionParts = []; + foreach ($collection as $item) { + $collectionParts[$item] = explode(':', $item); + } + + foreach (explode(':', $name) as $i => $subname) { + foreach ($collectionParts as $collectionName => $parts) { + $exists = isset($alternatives[$collectionName]); + if (!isset($parts[$i]) && $exists) { + $alternatives[$collectionName] += $threshold; + continue; + } elseif (!isset($parts[$i])) { + continue; + } + + $lev = levenshtein($subname, $parts[$i]); + if ($lev <= strlen($subname) / 3 || '' !== $subname && false !== strpos($parts[$i], $subname)) { + $alternatives[$collectionName] = $exists ? $alternatives[$collectionName] + $lev : $lev; + } elseif ($exists) { + $alternatives[$collectionName] += $threshold; + } + } + } + + foreach ($collection as $item) { + $lev = levenshtein($name, $item); + if ($lev <= strlen($name) / 3 || false !== strpos($item, $name)) { + $alternatives[$item] = isset($alternatives[$item]) ? $alternatives[$item] - $lev : $lev; + } + } + + $alternatives = array_filter($alternatives, function ($lev) use ($threshold) { + return $lev < 2 * $threshold; + }); + asort($alternatives); + + return array_keys($alternatives); + } + + /** + * 设置默认的指令 + * @access public + * @param string $commandName The Command name + */ + public function setDefaultCommand($commandName) + { + $this->defaultCommand = $commandName; + } + + /** + * 返回所有的命名空间 + * @access private + * @param string $name + * @return array + */ + private function extractAllNamespaces($name) + { + $parts = explode(':', $name, -1); + $namespaces = []; + + foreach ($parts as $part) { + if (count($namespaces)) { + $namespaces[] = end($namespaces) . ':' . $part; + } else { + $namespaces[] = $part; + } + } + + return $namespaces; + } + +} diff --git a/thinkphp/library/think/Container.php b/thinkphp/library/think/Container.php new file mode 100644 index 000000000..08c48a076 --- /dev/null +++ b/thinkphp/library/think/Container.php @@ -0,0 +1,365 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +use Closure; +use InvalidArgumentException; +use ReflectionClass; +use ReflectionException; +use ReflectionFunction; +use ReflectionMethod; +use think\exception\ClassNotFoundException; + +class Container +{ + /** + * 容器对象实例 + * @var Container + */ + protected static $instance; + + /** + * 容器中的对象实例 + * @var array + */ + protected $instances = []; + + /** + * 容器绑定标识 + * @var array + */ + protected $bind = []; + + /** + * 获取当前容器的实例(单例) + * @access public + * @return static + */ + public static function getInstance() + { + if (is_null(static::$instance)) { + static::$instance = new static; + } + + return static::$instance; + } + + /** + * 获取容器中的对象实例 + * @access public + * @param string $abstract 类名或者标识 + * @param array|true $vars 变量 + * @param bool $newInstance 是否每次创建新的实例 + * @return object + */ + public static function get($abstract, $vars = [], $newInstance = false) + { + return static::getInstance()->make($abstract, $vars, $newInstance); + } + + /** + * 绑定一个类、闭包、实例、接口实现到容器 + * @access public + * @param string $abstract 类标识、接口 + * @param mixed $concrete 要绑定的类、闭包或者实例 + * @return Container + */ + public static function set($abstract, $concrete = null) + { + return static::getInstance()->bind($abstract, $concrete); + } + + /** + * 移除容器中的对象实例 + * @access public + * @param string $abstract 类标识、接口 + * @return void + */ + public static function remove($abstract) + { + return static::getInstance()->delete($abstract); + } + + /** + * 清除容器中的对象实例 + * @access public + * @return void + */ + public static function clear() + { + return static::getInstance()->flush(); + } + + /** + * 绑定一个类、闭包、实例、接口实现到容器 + * @access public + * @param string|array $abstract 类标识、接口 + * @param mixed $concrete 要绑定的类、闭包或者实例 + * @return $this + */ + public function bind($abstract, $concrete = null) + { + if (is_array($abstract)) { + $this->bind = array_merge($this->bind, $abstract); + } elseif ($concrete instanceof Closure) { + $this->bind[$abstract] = $concrete; + } elseif (is_object($concrete)) { + $this->instances[$abstract] = $concrete; + } else { + $this->bind[$abstract] = $concrete; + } + + return $this; + } + + /** + * 绑定一个类实例当容器 + * @access public + * @param string $abstract 类名或者标识 + * @param object $instance 类的实例 + * @return $this + */ + public function instance($abstract, $instance) + { + if (isset($this->bind[$abstract])) { + $abstract = $this->bind[$abstract]; + } + + $this->instances[$abstract] = $instance; + + return $this; + } + + /** + * 判断容器中是否存在类及标识 + * @access public + * @param string $abstract 类名或者标识 + * @return bool + */ + public function bound($abstract) + { + return isset($this->bind[$abstract]) || isset($this->instances[$abstract]); + } + + /** + * 判断容器中是否存在类及标识 + * @access public + * @param string $name 类名或者标识 + * @return bool + */ + public function has($name) + { + return $this->bound($name); + } + + /** + * 创建类的实例 + * @access public + * @param string $abstract 类名或者标识 + * @param array|true $vars 变量 + * @param bool $newInstance 是否每次创建新的实例 + * @return object + */ + public function make($abstract, $vars = [], $newInstance = false) + { + if (true === $vars) { + // 总是创建新的实例化对象 + $newInstance = true; + $vars = []; + } + + if (isset($this->instances[$abstract]) && !$newInstance) { + return $this->instances[$abstract]; + } + + if (isset($this->bind[$abstract])) { + $concrete = $this->bind[$abstract]; + + if ($concrete instanceof Closure) { + $object = $this->invokeFunction($concrete, $vars); + } else { + $object = $this->make($concrete, $vars, $newInstance); + } + } else { + $object = $this->invokeClass($abstract, $vars); + } + + if (!$newInstance) { + $this->instances[$abstract] = $object; + } + + return $object; + } + + /** + * 删除容器中的对象实例 + * @access public + * @param string $abstract 类名或者标识 + * @return void + */ + public function delete($abstract) + { + if (isset($this->instances[$abstract])) { + unset($this->instances[$abstract]); + } + } + + /** + * 清除容器中的对象实例 + * @access public + * @return void + */ + public function flush() + { + $this->instances = []; + $this->bind = []; + } + + /** + * 执行函数或者闭包方法 支持参数调用 + * @access public + * @param mixed $function 函数或者闭包 + * @param array $vars 参数 + * @return mixed + */ + public function invokeFunction($function, $vars = []) + { + try { + $reflect = new ReflectionFunction($function); + + $args = $this->bindParams($reflect, $vars); + + return $reflect->invokeArgs($args); + } catch (ReflectionException $e) { + throw new Exception('function not exists: ' . $function . '()'); + } + } + + /** + * 调用反射执行类的方法 支持参数绑定 + * @access public + * @param mixed $method 方法 + * @param array $vars 参数 + * @return mixed + */ + public function invokeMethod($method, $vars = []) + { + try { + if (is_array($method)) { + $class = is_object($method[0]) ? $method[0] : $this->invokeClass($method[0]); + $reflect = new ReflectionMethod($class, $method[1]); + } else { + // 静态方法 + $reflect = new ReflectionMethod($method); + } + + $args = $this->bindParams($reflect, $vars); + + return $reflect->invokeArgs(isset($class) ? $class : null, $args); + } catch (ReflectionException $e) { + throw new Exception('method not exists: ' . (is_array($method) ? $method[0] . '::' . $method[1] : $method) . '()'); + } + } + + /** + * 调用反射执行类的方法 支持参数绑定 + * @access public + * @param object $instance 对象实例 + * @param mixed $reflect 反射类 + * @param array $vars 参数 + * @return mixed + */ + public function invokeReflectMethod($instance, $reflect, $vars = []) + { + $args = $this->bindParams($reflect, $vars); + + return $reflect->invokeArgs($instance, $args); + } + + /** + * 调用反射执行callable 支持参数绑定 + * @access public + * @param mixed $callable + * @param array $vars 参数 + * @return mixed + */ + public function invoke($callable, $vars = []) + { + if ($callable instanceof Closure) { + return $this->invokeFunction($callable, $vars); + } + + return $this->invokeMethod($callable, $vars); + } + + /** + * 调用反射执行类的实例化 支持依赖注入 + * @access public + * @param string $class 类名 + * @param array $vars 参数 + * @return mixed + */ + public function invokeClass($class, $vars = []) + { + try { + $reflect = new ReflectionClass($class); + + $constructor = $reflect->getConstructor(); + + $args = $constructor ? $this->bindParams($constructor, $vars) : []; + + return $reflect->newInstanceArgs($args); + } catch (ReflectionException $e) { + throw new ClassNotFoundException('class not exists: ' . $class, $class); + } + } + + /** + * 绑定参数 + * @access protected + * @param \ReflectionMethod|\ReflectionFunction $reflect 反射类 + * @param array $vars 参数 + * @return array + */ + protected function bindParams($reflect, $vars = []) + { + if ($reflect->getNumberOfParameters() == 0) { + return []; + } + + // 判断数组类型 数字数组时按顺序绑定参数 + reset($vars); + $type = key($vars) === 0 ? 1 : 0; + $params = $reflect->getParameters(); + + foreach ($params as $param) { + $name = $param->getName(); + $class = $param->getClass(); + + if ($class) { + $className = $class->getName(); + $args[] = $this->make($className); + } elseif (1 == $type && !empty($vars)) { + $args[] = array_shift($vars); + } elseif (0 == $type && isset($vars[$name])) { + $args[] = $vars[$name]; + } elseif ($param->isDefaultValueAvailable()) { + $args[] = $param->getDefaultValue(); + } else { + throw new InvalidArgumentException('method param miss:' . $name); + } + } + + return $args; + } + +} diff --git a/thinkphp/library/think/Controller.php b/thinkphp/library/think/Controller.php new file mode 100644 index 000000000..ffa381866 --- /dev/null +++ b/thinkphp/library/think/Controller.php @@ -0,0 +1,239 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +use think\exception\ValidateException; +use traits\controller\Jump; + +class Controller +{ + use Jump; + + /** + * 视图类实例 + * @var \think\View + */ + protected $view; + + /** + * Request实例 + * @var \think\Request + */ + protected $request; + + /** + * 应用实例 + * @var \think\App + */ + protected $app; + + /** + * 验证失败是否抛出异常 + * @var bool + */ + protected $failException = false; + + /** + * 是否批量验证 + * @var bool + */ + protected $batchValidate = false; + + /** + * 前置操作方法列表 + * @var array $beforeActionList + */ + protected $beforeActionList = []; + + /** + * 构造方法 + * @access public + */ + public function __construct() + { + $this->request = Container::get('request'); + $this->app = Container::get('app'); + $this->view = Container::get('view')->init( + $this->app['config']->pull('template') + ); + + // 控制器初始化 + $this->initialize(); + + // 前置操作方法 + foreach ((array) $this->beforeActionList as $method => $options) { + is_numeric($method) ? + $this->beforeAction($options) : + $this->beforeAction($method, $options); + } + } + + // 初始化 + protected function initialize() + {} + + /** + * 前置操作 + * @access protected + * @param string $method 前置操作方法名 + * @param array $options 调用参数 ['only'=>[...]] 或者['except'=>[...]] + */ + protected function beforeAction($method, $options = []) + { + if (isset($options['only'])) { + if (is_string($options['only'])) { + $options['only'] = explode(',', $options['only']); + } + if (!in_array($this->request->action(), $options['only'])) { + return; + } + } elseif (isset($options['except'])) { + if (is_string($options['except'])) { + $options['except'] = explode(',', $options['except']); + } + if (in_array($this->request->action(), $options['except'])) { + return; + } + } + + call_user_func([$this, $method]); + } + + /** + * 加载模板输出 + * @access protected + * @param string $template 模板文件名 + * @param array $vars 模板输出变量 + * @param array $config 模板参数 + * @return mixed + */ + protected function fetch($template = '', $vars = [], $config = []) + { + return $this->view->fetch($template, $vars, $config); + } + + /** + * 渲染内容输出 + * @access protected + * @param string $content 模板内容 + * @param array $vars 模板输出变量 + * @param array $config 模板参数 + * @return mixed + */ + protected function display($content = '', $vars = [], $config = []) + { + return $this->view->display($content, $vars, $config); + } + + /** + * 模板变量赋值 + * @access protected + * @param mixed $name 要显示的模板变量 + * @param mixed $value 变量的值 + * @return $this + */ + protected function assign($name, $value = '') + { + $this->view->assign($name, $value); + + return $this; + } + + /** + * 视图过滤 + * @access protected + * @param Callable $filter 过滤方法或闭包 + * @return $this + */ + protected function filter($filter) + { + $this->view->filter($filter); + + return $this; + } + + /** + * 初始化模板引擎 + * @access protected + * @param array|string $engine 引擎参数 + * @return $this + */ + protected function engine($engine) + { + $this->view->engine($engine); + + return $this; + } + + /** + * 设置验证失败后是否抛出异常 + * @access protected + * @param bool $fail 是否抛出异常 + * @return $this + */ + protected function validateFailException($fail = true) + { + $this->failException = $fail; + + return $this; + } + + /** + * 验证数据 + * @access protected + * @param array $data 数据 + * @param string|array $validate 验证器名或者验证规则数组 + * @param array $message 提示信息 + * @param bool $batch 是否批量验证 + * @param mixed $callback 回调方法(闭包) + * @return array|string|true + * @throws ValidateException + */ + protected function validate($data, $validate, $message = [], $batch = false, $callback = null) + { + if (is_array($validate)) { + $v = $this->app->validate(); + $v->rule($validate); + } else { + if (strpos($validate, '.')) { + // 支持场景 + list($validate, $scene) = explode('.', $validate); + } + $v = $this->app->validate($validate); + if (!empty($scene)) { + $v->scene($scene); + } + } + + // 是否批量验证 + if ($batch || $this->batchValidate) { + $v->batch(true); + } + + if (is_array($message)) { + $v->message($message); + } + + if ($callback && is_callable($callback)) { + call_user_func_array($callback, [$v, &$data]); + } + + if (!$v->check($data)) { + if ($this->failException) { + throw new ValidateException($v->getError()); + } + return $v->getError(); + } + + return true; + } +} diff --git a/thinkphp/library/think/Cookie.php b/thinkphp/library/think/Cookie.php new file mode 100644 index 000000000..c645fde69 --- /dev/null +++ b/thinkphp/library/think/Cookie.php @@ -0,0 +1,262 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +class Cookie +{ + /** + * 配置参数 + * @var array + */ + protected $config = [ + // cookie 名称前缀 + 'prefix' => '', + // cookie 保存时间 + 'expire' => 0, + // cookie 保存路径 + 'path' => '/', + // cookie 有效域名 + 'domain' => '', + // cookie 启用安全传输 + 'secure' => false, + // httponly设置 + 'httponly' => false, + // 是否使用 setcookie + 'setcookie' => true, + ]; + + /** + * 是否初始化 + * @var bool + */ + protected $init; + + /** + * Cookie初始化 + * @access public + * @param array $config + * @return void + */ + public function init(array $config = []) + { + if (empty($config)) { + $config = Container::get('config')->pull('cookie'); + } + + $this->config = array_merge($this->config, array_change_key_case($config)); + + if (!empty($this->config['httponly'])) { + ini_set('session.cookie_httponly', 1); + } + + $this->init = true; + } + + /** + * 设置或者获取cookie作用域(前缀) + * @access public + * @param string $prefix + * @return string|void + */ + public function prefix($prefix = '') + { + if (empty($prefix)) { + return $this->config['prefix']; + } + + $this->config['prefix'] = $prefix; + } + + /** + * Cookie 设置、获取、删除 + * + * @access public + * @param string $name cookie名称 + * @param mixed $value cookie值 + * @param mixed $option 可选参数 可能会是 null|integer|string + * @return void + */ + public function set($name, $value = '', $option = null) + { + !isset($this->init) && $this->init(); + + // 参数设置(会覆盖黙认设置) + if (!is_null($option)) { + if (is_numeric($option)) { + $option = ['expire' => $option]; + } elseif (is_string($option)) { + parse_str($option, $option); + } + + $config = array_merge($this->config, array_change_key_case($option)); + } else { + $config = $this->config; + } + + $name = $config['prefix'] . $name; + + // 设置cookie + if (is_array($value)) { + array_walk_recursive($value, [$this, 'jsonFormatProtect'], 'encode'); + $value = 'think:' . json_encode($value); + } + + $expire = !empty($config['expire']) ? $_SERVER['REQUEST_TIME'] + intval($config['expire']) : 0; + + if ($config['setcookie']) { + setcookie($name, $value, $expire, $config['path'], $config['domain'], $config['secure'], $config['httponly']); + } + + $_COOKIE[$name] = $value; + } + + /** + * 永久保存Cookie数据 + * @access public + * @param string $name cookie名称 + * @param mixed $value cookie值 + * @param mixed $option 可选参数 可能会是 null|integer|string + * @return void + */ + public function forever($name, $value = '', $option = null) + { + if (is_null($option) || is_numeric($option)) { + $option = []; + } + + $option['expire'] = 315360000; + + $this->set($name, $value, $option); + } + + /** + * 判断Cookie数据 + * @access public + * @param string $name cookie名称 + * @param string|null $prefix cookie前缀 + * @return bool + */ + public function has($name, $prefix = null) + { + !isset($this->init) && $this->init(); + + $prefix = !is_null($prefix) ? $prefix : $this->config['prefix']; + $name = $prefix . $name; + + return isset($_COOKIE[$name]); + } + + /** + * Cookie获取 + * @access public + * @param string $name cookie名称 留空获取全部 + * @param string|null $prefix cookie前缀 + * @return mixed + */ + public function get($name = '', $prefix = null) + { + !isset($this->init) && $this->init(); + + $prefix = !is_null($prefix) ? $prefix : $this->config['prefix']; + $key = $prefix . $name; + + if ('' == $name) { + if ($prefix) { + $value = []; + foreach ($_COOKIE as $k => $val) { + if (0 === strpos($k, $prefix)) { + $value[$k] = $val; + } + } + } else { + $value = $_COOKIE; + } + } elseif (isset($_COOKIE[$key])) { + $value = $_COOKIE[$key]; + + if (0 === strpos($value, 'think:')) { + $value = substr($value, 6); + $value = json_decode($value, true); + array_walk_recursive($value, [$this, 'jsonFormatProtect'], 'decode'); + } + } else { + $value = null; + } + + return $value; + } + + /** + * Cookie删除 + * @access public + * @param string $name cookie名称 + * @param string|null $prefix cookie前缀 + * @return void + */ + public function delete($name, $prefix = null) + { + !isset($this->init) && $this->init(); + + $config = $this->config; + $prefix = !is_null($prefix) ? $prefix : $config['prefix']; + $name = $prefix . $name; + + if ($config['setcookie']) { + setcookie($name, '', $_SERVER['REQUEST_TIME'] - 3600, $config['path'], $config['domain'], $config['secure'], $config['httponly']); + } + + // 删除指定cookie + unset($_COOKIE[$name]); + } + + /** + * Cookie清空 + * @access public + * @param string|null $prefix cookie前缀 + * @return void + */ + public function clear($prefix = null) + { + // 清除指定前缀的所有cookie + if (empty($_COOKIE)) { + return; + } + + !isset($this->init) && $this->init(); + + // 要删除的cookie前缀,不指定则删除config设置的指定前缀 + $config = $this->config; + $prefix = !is_null($prefix) ? $prefix : $config['prefix']; + + if ($prefix) { + // 如果前缀为空字符串将不作处理直接返回 + foreach ($_COOKIE as $key => $val) { + if (0 === strpos($key, $prefix)) { + if ($config['setcookie']) { + setcookie($key, '', $_SERVER['REQUEST_TIME'] - 3600, $config['path'], $config['domain'], $config['secure'], $config['httponly']); + } + unset($_COOKIE[$key]); + } + } + } + + return; + } + + private function jsonFormatProtect(&$val, $key, $type = 'encode') + { + if (!empty($val) && true !== $val) { + $val = 'decode' == $type ? urldecode($val) : urlencode($val); + } + } + +} diff --git a/thinkphp/library/think/Db.php b/thinkphp/library/think/Db.php new file mode 100644 index 000000000..9be2dd2ea --- /dev/null +++ b/thinkphp/library/think/Db.php @@ -0,0 +1,72 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +/** + * Class Db + * @package think + * @method \think\db\Query connect(array $config =[], mixed $name = false) static 连接/切换数据库连接 + * @method \think\db\Query master() static 从主服务器读取数据 + * @method \think\db\Query table(string $table) static 指定数据表(含前缀) + * @method \think\db\Query name(string $name) static 指定数据表(不含前缀) + * @method \think\db\Query where(mixed $field, string $op = null, mixed $condition = null) static 查询条件 + * @method \think\db\Query join(mixed $join, mixed $condition = null, string $type = 'INNER') static JOIN查询 + * @method \think\db\Query view(mixed $join, mixed $field = null, mixed $on = null, string $type = 'INNER') static 视图查询 + * @method \think\db\Query union(mixed $union, boolean $all = false) static UNION查询 + * @method \think\db\Query limit(mixed $offset, integer $length = null) static 查询LIMIT + * @method \think\db\Query order(mixed $field, string $order = null) static 查询ORDER + * @method \think\db\Query cache(mixed $key = null , integer $expire = null) static 设置查询缓存 + * @method mixed value(string $field) static 获取某个字段的值 + * @method array column(string $field, string $key = '') static 获取某个列的值 + * @method mixed find(mixed $data = null) static 查询单个记录 + * @method mixed select(mixed $data = null) static 查询多个记录 + * @method integer insert(array $data, boolean $replace = false, boolean $getLastInsID = false, string $sequence = null) static 插入一条记录 + * @method integer insertGetId(array $data, boolean $replace = false, string $sequence = null) static 插入一条记录并返回自增ID + * @method integer insertAll(array $dataSet) static 插入多条记录 + * @method integer update(array $data) static 更新记录 + * @method integer delete(mixed $data = null) static 删除记录 + * @method boolean chunk(integer $count, callable $callback, string $column = null) static 分块获取数据 + * @method \Generator cursor(mixed $data = null) static 使用游标查找记录 + * @method mixed query(string $sql, array $bind = [], boolean $master = false, bool $pdo = false) static SQL查询 + * @method integer execute(string $sql, array $bind = [], boolean $fetch = false, boolean $getLastInsID = false, string $sequence = null) static SQL执行 + * @method \think\Paginator paginate(integer $listRows = 15, mixed $simple = null, array $config = []) static 分页查询 + * @method mixed transaction(callable $callback) static 执行数据库事务 + * @method void startTrans() static 启动事务 + * @method void commit() static 用于非自动提交状态下面的查询提交 + * @method void rollback() static 事务回滚 + * @method boolean batchQuery(array $sqlArray) static 批处理执行SQL语句 + * @method string getLastInsID(string $sequence = null) static 获取最近插入的ID + * @method mixed getConfig(string $name = '') static 获取数据库的配置参数 + */ +class Db +{ + /** + * 查询次数 + * @var integer + */ + public static $queryTimes = 0; + + /** + * 执行次数 + * @var integer + */ + public static $executeTimes = 0; + + public static function __callStatic($method, $args) + { + $class = Container::get('config')->get('database.query') ?: '\\think\\db\\Query'; + + $query = new $class(); + + return call_user_func_array([$query, $method], $args); + } +} diff --git a/thinkphp/library/think/Debug.php b/thinkphp/library/think/Debug.php new file mode 100644 index 000000000..75003770b --- /dev/null +++ b/thinkphp/library/think/Debug.php @@ -0,0 +1,258 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +use think\exception\ClassNotFoundException; +use think\model\Collection as ModelCollection; +use think\response\Redirect; + +class Debug +{ + /** + * 区间时间信息 + * @var array + */ + protected $info = []; + + /** + * 区间内存信息 + * @var array + */ + protected $mem = []; + + /** + * 应用对象 + * @var App + */ + protected $app; + + public function __construct(App $app) + { + $this->app = $app; + } + + /** + * 记录时间(微秒)和内存使用情况 + * @access public + * @param string $name 标记位置 + * @param mixed $value 标记值 留空则取当前 time 表示仅记录时间 否则同时记录时间和内存 + * @return void + */ + public function remark($name, $value = '') + { + // 记录时间和内存使用 + $this->info[$name] = is_float($value) ? $value : microtime(true); + + if ('time' != $value) { + $this->mem['mem'][$name] = is_float($value) ? $value : memory_get_usage(); + $this->mem['peak'][$name] = memory_get_peak_usage(); + } + } + + /** + * 统计某个区间的时间(微秒)使用情况 + * @access public + * @param string $start 开始标签 + * @param string $end 结束标签 + * @param integer|string $dec 小数位 + * @return integer + */ + public function getRangeTime($start, $end, $dec = 6) + { + if (!isset($this->info[$end])) { + $this->info[$end] = microtime(true); + } + + return number_format(($this->info[$end] - $this->info[$start]), $dec); + } + + /** + * 统计从开始到统计时的时间(微秒)使用情况 + * @access public + * @param integer|string $dec 小数位 + * @return integer + */ + public function getUseTime($dec = 6) + { + return number_format((microtime(true) - $this->app->getBeginTime()), $dec); + } + + /** + * 获取当前访问的吞吐率情况 + * @access public + * @return string + */ + public function getThroughputRate() + { + return number_format(1 / $this->getUseTime(), 2) . 'req/s'; + } + + /** + * 记录区间的内存使用情况 + * @access public + * @param string $start 开始标签 + * @param string $end 结束标签 + * @param integer|string $dec 小数位 + * @return string + */ + public function getRangeMem($start, $end, $dec = 2) + { + if (!isset($this->mem['mem'][$end])) { + $this->mem['mem'][$end] = memory_get_usage(); + } + + $size = $this->mem['mem'][$end] - $this->mem['mem'][$start]; + $a = ['B', 'KB', 'MB', 'GB', 'TB']; + $pos = 0; + + while ($size >= 1024) { + $size /= 1024; + $pos++; + } + + return round($size, $dec) . " " . $a[$pos]; + } + + /** + * 统计从开始到统计时的内存使用情况 + * @access public + * @param integer|string $dec 小数位 + * @return string + */ + public function getUseMem($dec = 2) + { + $size = memory_get_usage() - $this->app->getBeginMem(); + $a = ['B', 'KB', 'MB', 'GB', 'TB']; + $pos = 0; + + while ($size >= 1024) { + $size /= 1024; + $pos++; + } + + return round($size, $dec) . " " . $a[$pos]; + } + + /** + * 统计区间的内存峰值情况 + * @access public + * @param string $start 开始标签 + * @param string $end 结束标签 + * @param integer|string $dec 小数位 + * @return string + */ + public function getMemPeak($start, $end, $dec = 2) + { + if (!isset($this->mem['peak'][$end])) { + $this->mem['peak'][$end] = memory_get_peak_usage(); + } + + $size = $this->mem['peak'][$end] - $this->mem['peak'][$start]; + $a = ['B', 'KB', 'MB', 'GB', 'TB']; + $pos = 0; + + while ($size >= 1024) { + $size /= 1024; + $pos++; + } + + return round($size, $dec) . " " . $a[$pos]; + } + + /** + * 获取文件加载信息 + * @access public + * @param bool $detail 是否显示详细 + * @return integer|array + */ + public function getFile($detail = false) + { + if ($detail) { + $files = get_included_files(); + $info = []; + + foreach ($files as $key => $file) { + $info[] = $file . ' ( ' . number_format(filesize($file) / 1024, 2) . ' KB )'; + } + + return $info; + } + + return count(get_included_files()); + } + + /** + * 浏览器友好的变量输出 + * @access public + * @param mixed $var 变量 + * @param boolean $echo 是否输出 默认为true 如果为false 则返回输出字符串 + * @param string $label 标签 默认为空 + * @param integer $flags htmlspecialchars flags + * @return void|string + */ + public function dump($var, $echo = true, $label = null, $flags = ENT_SUBSTITUTE) + { + $label = (null === $label) ? '' : rtrim($label) . ':'; + if ($var instanceof Model || $var instanceof ModelCollection) { + $var = $var->toArray(); + } + + ob_start(); + var_dump($var); + + $output = ob_get_clean(); + $output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', $output); + + if (PHP_SAPI == 'cli') { + $output = PHP_EOL . $label . $output . PHP_EOL; + } else { + if (!extension_loaded('xdebug')) { + $output = htmlspecialchars($output, $flags); + } + $output = '
' . $label . $output . '
'; + } + if ($echo) { + echo($output); + return; + } + return $output; + } + + public function inject(Response $response, &$content) + { + $config = $this->app['config']->pull('trace'); + $type = isset($config['type']) ? $config['type'] : 'Html'; + $class = false !== strpos($type, '\\') ? $type : '\\think\\debug\\' . ucwords($type); + unset($config['type']); + + if (class_exists($class)) { + $trace = new $class($config); + } else { + throw new ClassNotFoundException('class not exists:' . $class, $class); + } + + if ($response instanceof Redirect) { + //TODO 记录 + } else { + $output = $trace->output($response, $this->app['log']->getLog()); + if (is_string($output)) { + // trace调试信息注入 + $pos = strripos($content, ''); + if (false !== $pos) { + $content = substr($content, 0, $pos) . $output . substr($content, $pos); + } else { + $content = $content . $output; + } + } + } + } +} diff --git a/thinkphp/library/think/Env.php b/thinkphp/library/think/Env.php new file mode 100644 index 000000000..ef5d9468d --- /dev/null +++ b/thinkphp/library/think/Env.php @@ -0,0 +1,109 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +class Env +{ + /** + * 环境变量数据 + * @var array + */ + protected $data = []; + + public function __construct() + { + $this->data = $_ENV; + } + + /** + * 读取环境变量定义文件 + * @access public + * @param string $file 环境变量定义文件 + * @return void + */ + public function load($file) + { + $env = parse_ini_file($file, true); + $this->set($env); + } + + /** + * 获取环境变量值 + * @access public + * @param string $name 环境变量名 + * @param mixed $default 默认值 + * @return mixed + */ + public function get($name = null, $default = null) + { + if (is_null($name)) { + return $this->data; + } + + $name = strtoupper(str_replace('.', '_', $name)); + + if (isset($this->data[$name])) { + return $this->data[$name]; + } + + return $this->getEnv($name, $default); + } + + protected function getEnv($name, $default = null) + { + $result = getenv('PHP_' . $name); + + if (false === $result) { + return $default; + } + + if ('false' === $result) { + $result = false; + } elseif ('true' === $result) { + $result = true; + } + + if (!isset($this->data[$name])) { + $this->data[$name] = $result; + } + + return $result; + } + + /** + * 设置环境变量值 + * @access public + * @param string|array $env 环境变量 + * @param mixed $value 值 + * @return void + */ + public function set($env, $value = null) + { + if (is_array($env)) { + $env = array_change_key_case($env, CASE_UPPER); + + foreach ($env as $key => $val) { + if (is_array($val)) { + foreach ($val as $k => $v) { + $this->data[$key . '_' . strtoupper($k)] = $v; + } + } else { + $this->data[$key] = $val; + } + } + } else { + $name = strtoupper(str_replace('.', '_', $env)); + + $this->data[$name] = $value; + } + } +} diff --git a/thinkphp/library/think/Error.php b/thinkphp/library/think/Error.php new file mode 100644 index 000000000..b8c8fc585 --- /dev/null +++ b/thinkphp/library/think/Error.php @@ -0,0 +1,128 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +use think\console\Output as ConsoleOutput; +use think\exception\ErrorException; +use think\exception\Handle; +use think\exception\ThrowableError; + +class Error +{ + /** + * 注册异常处理 + * @access public + * @return void + */ + public static function register() + { + error_reporting(E_ALL); + set_error_handler([__CLASS__, 'appError']); + set_exception_handler([__CLASS__, 'appException']); + register_shutdown_function([__CLASS__, 'appShutdown']); + } + + /** + * Exception Handler + * @access public + * @param \Exception|\Throwable $e + */ + public static function appException($e) + { + if (!$e instanceof \Exception) { + $e = new ThrowableError($e); + } + + self::getExceptionHandler()->report($e); + + if (PHP_SAPI == 'cli') { + self::getExceptionHandler()->renderForConsole(new ConsoleOutput, $e); + } else { + self::getExceptionHandler()->render($e)->send(); + } + } + + /** + * Error Handler + * @access public + * @param integer $errno 错误编号 + * @param integer $errstr 详细错误信息 + * @param string $errfile 出错的文件 + * @param integer $errline 出错行号 + * @throws ErrorException + */ + public static function appError($errno, $errstr, $errfile = '', $errline = 0) + { + $exception = new ErrorException($errno, $errstr, $errfile, $errline); + if (error_reporting() & $errno) { + // 将错误信息托管至 think\exception\ErrorException + throw $exception; + } + + self::getExceptionHandler()->report($exception); + } + + /** + * Shutdown Handler + * @access public + */ + public static function appShutdown() + { + if (!is_null($error = error_get_last()) && self::isFatal($error['type'])) { + // 将错误信息托管至think\ErrorException + $exception = new ErrorException($error['type'], $error['message'], $error['file'], $error['line']); + + self::appException($exception); + } + + // 写入日志 + Container::get('log')->save(); + } + + /** + * 确定错误类型是否致命 + * + * @access protected + * @param int $type + * @return bool + */ + protected static function isFatal($type) + { + return in_array($type, [E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE]); + } + + /** + * Get an instance of the exception handler. + * + * @access public + * @return Handle + */ + public static function getExceptionHandler() + { + static $handle; + + if (!$handle) { + // 异常处理handle + $class = Container::get('config')->get('exception_handle'); + if ($class && is_string($class) && class_exists($class) && is_subclass_of($class, "\\think\\exception\\Handle")) { + $handle = new $class; + } else { + $handle = new Handle; + if ($class instanceof \Closure) { + $handle->setRender($class); + } + } + } + + return $handle; + } +} diff --git a/thinkphp/library/think/Exception.php b/thinkphp/library/think/Exception.php new file mode 100644 index 000000000..414a090ad --- /dev/null +++ b/thinkphp/library/think/Exception.php @@ -0,0 +1,56 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +class Exception extends \Exception +{ + + /** + * 保存异常页面显示的额外Debug数据 + * @var array + */ + protected $data = []; + + /** + * 设置异常额外的Debug数据 + * 数据将会显示为下面的格式 + * + * Exception Data + * -------------------------------------------------- + * Label 1 + * key1 value1 + * key2 value2 + * Label 2 + * key1 value1 + * key2 value2 + * + * @access protected + * @param string $label 数据分类,用于异常页面显示 + * @param array $data 需要显示的数据,必须为关联数组 + */ + final protected function setData($label, array $data) + { + $this->data[$label] = $data; + } + + /** + * 获取异常额外Debug数据 + * 主要用于输出到异常页面便于调试 + * @access public + * @return array 由setData设置的Debug数据 + */ + final public function getData() + { + return $this->data; + } + +} diff --git a/thinkphp/library/think/Facade.php b/thinkphp/library/think/Facade.php new file mode 100644 index 000000000..c455f6626 --- /dev/null +++ b/thinkphp/library/think/Facade.php @@ -0,0 +1,126 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +class Facade +{ + /** + * 绑定对象 + * @var array + */ + protected static $bind = []; + + /** + * 始终创建新的对象实例 + * @var bool + */ + protected static $alwaysNewInstance; + + /** + * 绑定类的静态代理 + * @static + * @access public + * @param string|array $name 类标识 + * @param string $class 类名 + * @return object + */ + public static function bind($name, $class = null) + { + if (__CLASS__ != static::class) { + return self::__callStatic('bind', func_get_args()); + } + + if (is_array($name)) { + self::$bind = array_merge(self::$bind, $name); + } else { + self::$bind[$name] = $class; + } + } + + /** + * 创建Facade实例 + * @static + * @access protected + * @param string $class 类名或标识 + * @param array $args 变量 + * @param bool $newInstance 是否每次创建新的实例 + * @return object + */ + protected static function createFacade($class = '', $args = [], $newInstance = false) + { + $class = $class ?: static::class; + $facadeClass = static::getFacadeClass(); + + if ($facadeClass) { + $class = $facadeClass; + } elseif (isset(self::$bind[$class])) { + $class = self::$bind[$class]; + } + + if (static::$alwaysNewInstance) { + $newInstance = true; + } + + return Container::getInstance()->make($class, $args, $newInstance); + } + + /** + * 获取当前Facade对应类名 + * @access protected + * @return string + */ + protected static function getFacadeClass() + {} + + /** + * 带参数实例化当前Facade类 + * @access public + * @return object + */ + public static function instance(...$args) + { + if (__CLASS__ != static::class) { + return self::__callStatic('instance', $args); + } + + return self::createFacade('', $args); + } + + /** + * 调用类的实例 + * @access public + * @param string $class 类名或者标识 + * @param array|true $args 变量 + * @param bool $newInstance 是否每次创建新的实例 + * @return object + */ + public static function make($class, $args = [], $newInstance = false) + { + if (__CLASS__ != static::class) { + return self::__callStatic('make', func_get_args()); + } + + if (true === $args) { + // 总是创建新的实例化对象 + $newInstance = true; + $args = []; + } + + return self::createFacade($class, $args, $newInstance); + } + + // 调用实际类的方法 + public static function __callStatic($method, $params) + { + return call_user_func_array([static::createFacade(), $method], $params); + } +} diff --git a/thinkphp/library/think/File.php b/thinkphp/library/think/File.php new file mode 100644 index 000000000..e9985690c --- /dev/null +++ b/thinkphp/library/think/File.php @@ -0,0 +1,494 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +use SplFileObject; + +class File extends SplFileObject +{ + /** + * 错误信息 + * @var string + */ + private $error = ''; + + /** + * 当前完整文件名 + * @var string + */ + protected $filename; + + /** + * 上传文件名 + * @var string + */ + protected $saveName; + + /** + * 上传文件命名规则 + * @var string + */ + protected $rule = 'date'; + + /** + * 上传文件验证规则 + * @var array + */ + protected $validate = []; + + /** + * 是否单元测试 + * @var bool + */ + protected $isTest; + + /** + * 上传文件信息 + * @var array + */ + protected $info = []; + + /** + * 文件hash规则 + * @var array + */ + protected $hash = []; + + public function __construct($filename, $mode = 'r') + { + parent::__construct($filename, $mode); + + $this->filename = $this->getRealPath() ?: $this->getPathname(); + } + + /** + * 是否测试 + * @access public + * @param bool $test 是否测试 + * @return $this + */ + public function isTest($test = false) + { + $this->isTest = $test; + + return $this; + } + + /** + * 设置上传信息 + * @access public + * @param array $info 上传文件信息 + * @return $this + */ + public function setUploadInfo($info) + { + $this->info = $info; + + return $this; + } + + /** + * 获取上传文件的信息 + * @access public + * @param string $name + * @return array|string + */ + public function getInfo($name = '') + { + return isset($this->info[$name]) ? $this->info[$name] : $this->info; + } + + /** + * 获取上传文件的文件名 + * @access public + * @return string + */ + public function getSaveName() + { + return $this->saveName; + } + + /** + * 设置上传文件的保存文件名 + * @access public + * @param string $saveName + * @return $this + */ + public function setSaveName($saveName) + { + $this->saveName = $saveName; + + return $this; + } + + /** + * 获取文件的哈希散列值 + * @access public + * @param string $type + * @return string + */ + public function hash($type = 'sha1') + { + if (!isset($this->hash[$type])) { + $this->hash[$type] = hash_file($type, $this->filename); + } + + return $this->hash[$type]; + } + + /** + * 检查目录是否可写 + * @access protected + * @param string $path 目录 + * @return boolean + */ + protected function checkPath($path) + { + if (is_dir($path)) { + return true; + } + + if (mkdir($path, 0755, true)) { + return true; + } + + $this->error = ['directory {:path} creation failed', ['path' => $path]]; + return false; + } + + /** + * 获取文件类型信息 + * @access public + * @return string + */ + public function getMime() + { + $finfo = finfo_open(FILEINFO_MIME_TYPE); + + return finfo_file($finfo, $this->filename); + } + + /** + * 设置文件的命名规则 + * @access public + * @param string $rule 文件命名规则 + * @return $this + */ + public function rule($rule) + { + $this->rule = $rule; + + return $this; + } + + /** + * 设置上传文件的验证规则 + * @access public + * @param array $rule 验证规则 + * @return $this + */ + public function validate($rule = []) + { + $this->validate = $rule; + + return $this; + } + + /** + * 检测是否合法的上传文件 + * @access public + * @return bool + */ + public function isValid() + { + if ($this->isTest) { + return is_file($this->filename); + } + + return is_uploaded_file($this->filename); + } + + /** + * 检测上传文件 + * @access public + * @param array $rule 验证规则 + * @return bool + */ + public function check($rule = []) + { + $rule = $rule ?: $this->validate; + + if ((isset($rule['size']) && !$this->checkSize($rule['size'])) + || (isset($rule['type']) && !$this->checkMime($rule['type'])) + || (isset($rule['ext']) && !$this->checkExt($rule['ext'])) + || !$this->checkImg()) { + return false; + } + + return true; + } + + /** + * 检测上传文件后缀 + * @access public + * @param array|string $ext 允许后缀 + * @return bool + */ + public function checkExt($ext) + { + if (is_string($ext)) { + $ext = explode(',', $ext); + } + + $extension = strtolower(pathinfo($this->getInfo('name'), PATHINFO_EXTENSION)); + + if (!in_array($extension, $ext)) { + $this->error = 'extensions to upload is not allowed'; + return false; + } + + return true; + } + + /** + * 检测图像文件 + * @access public + * @return bool + */ + public function checkImg() + { + $extension = strtolower(pathinfo($this->getInfo('name'), PATHINFO_EXTENSION)); + + /* 对图像文件进行严格检测 */ + if (in_array($extension, ['gif', 'jpg', 'jpeg', 'bmp', 'png', 'swf']) && !in_array($this->getImageType($this->filename), [1, 2, 3, 4, 6, 13])) { + $this->error = 'illegal image files'; + return false; + } + + return true; + } + + // 判断图像类型 + protected function getImageType($image) + { + if (function_exists('exif_imagetype')) { + return exif_imagetype($image); + } + + try { + $info = getimagesize($image); + return $info ? $info[2] : false; + } catch (\Exception $e) { + return false; + } + } + + /** + * 检测上传文件大小 + * @access public + * @param integer $size 最大大小 + * @return bool + */ + public function checkSize($size) + { + if ($this->getSize() > $size) { + $this->error = 'filesize not match'; + return false; + } + + return true; + } + + /** + * 检测上传文件类型 + * @access public + * @param array|string $mime 允许类型 + * @return bool + */ + public function checkMime($mime) + { + if (is_string($mime)) { + $mime = explode(',', $mime); + } + + if (!in_array(strtolower($this->getMime()), $mime)) { + $this->error = 'mimetype to upload is not allowed'; + return false; + } + + return true; + } + + /** + * 移动文件 + * @access public + * @param string $path 保存路径 + * @param string|bool $savename 保存的文件名 默认自动生成 + * @param boolean $replace 同名文件是否覆盖 + * @return false|File false-失败 否则返回File实例 + */ + public function move($path, $savename = true, $replace = true) + { + // 文件上传失败,捕获错误代码 + if (!empty($this->info['error'])) { + $this->error($this->info['error']); + return false; + } + + // 检测合法性 + if (!$this->isValid()) { + $this->error = 'upload illegal files'; + return false; + } + + // 验证上传 + if (!$this->check()) { + return false; + } + + $path = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR; + // 文件保存命名规则 + $saveName = $this->buildSaveName($savename); + $filename = $path . $saveName; + + // 检测目录 + if (false === $this->checkPath(dirname($filename))) { + return false; + } + + /* 不覆盖同名文件 */ + if (!$replace && is_file($filename)) { + $this->error = ['has the same filename: {:filename}', ['filename' => $filename]]; + return false; + } + + /* 移动文件 */ + if ($this->isTest) { + rename($this->filename, $filename); + } elseif (!move_uploaded_file($this->filename, $filename)) { + $this->error = 'upload write error'; + return false; + } + + // 返回 File对象实例 + $file = new self($filename); + $file->setSaveName($saveName); + $file->setUploadInfo($this->info); + + return $file; + } + + /** + * 获取保存文件名 + * @access protected + * @param string|bool $savename 保存的文件名 默认自动生成 + * @return string + */ + protected function buildSaveName($savename) + { + if (true === $savename) { + // 自动生成文件名 + $savename = $this->autoBuildName(); + } elseif ('' === $savename || false === $savename) { + // 保留原文件名 + $savename = $this->getInfo('name'); + } + + if (!strpos($savename, '.')) { + $savename .= '.' . pathinfo($this->getInfo('name'), PATHINFO_EXTENSION); + } + + return $savename; + } + + /** + * 自动生成文件名 + * @access protected + * @return string + */ + protected function autoBuildName() + { + if ($this->rule instanceof \Closure) { + $savename = call_user_func_array($this->rule, [$this]); + } else { + switch ($this->rule) { + case 'date': + $savename = date('Ymd') . DIRECTORY_SEPARATOR . md5(microtime(true)); + break; + default: + if (in_array($this->rule, hash_algos())) { + $hash = $this->hash($this->rule); + $savename = substr($hash, 0, 2) . DIRECTORY_SEPARATOR . substr($hash, 2); + } elseif (is_callable($this->rule)) { + $savename = call_user_func($this->rule); + } else { + $savename = date('Ymd') . DIRECTORY_SEPARATOR . md5(microtime(true)); + } + } + } + + return $savename; + } + + /** + * 获取错误代码信息 + * @access private + * @param int $errorNo 错误号 + */ + private function error($errorNo) + { + switch ($errorNo) { + case 1: + case 2: + $this->error = 'upload File size exceeds the maximum value'; + break; + case 3: + $this->error = 'only the portion of file is uploaded'; + break; + case 4: + $this->error = 'no file to uploaded'; + break; + case 6: + $this->error = 'upload temp dir not found'; + break; + case 7: + $this->error = 'file write error'; + break; + default: + $this->error = 'unknown upload error'; + } + } + + /** + * 获取错误信息(支持多语言) + * @access public + * @return string + */ + public function getError() + { + $lang = Container::get('lang'); + + if (is_array($this->error)) { + list($msg, $vars) = $this->error; + } else { + $msg = $this->error; + $vars = []; + } + + return $lang->has($msg) ? $lang->get($msg, $vars) : $msg; + } + + public function __call($method, $args) + { + return $this->hash($method); + } +} diff --git a/thinkphp/library/think/Hook.php b/thinkphp/library/think/Hook.php new file mode 100644 index 000000000..b82fb5a09 --- /dev/null +++ b/thinkphp/library/think/Hook.php @@ -0,0 +1,212 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +class Hook +{ + /** + * 钩子行为定义 + * @var array + */ + private $tags = []; + + /** + * 绑定行为列表 + * @var array + */ + protected $bind = []; + + /** + * 入口方法名称 + * @var string + */ + private static $portal = 'run'; + + /** + * 指定入口方法名称 + * @access public + * @param string $name 方法名 + * @return $this + */ + public function portal($name) + { + self::$portal = $name; + return $this; + } + + /** + * 指定行为标识 便于调用 + * @access public + * @param string|array $name 行为标识 + * @param mixed $behavior 行为 + * @return $this + */ + public function alias($name, $behavior = null) + { + if (is_array($name)) { + $this->bind = array_merge($this->bind, $name); + } else { + $this->bind[$name] = $behavior; + } + + return $this; + } + + /** + * 动态添加行为扩展到某个标签 + * @access public + * @param string $tag 标签名称 + * @param mixed $behavior 行为名称 + * @param bool $first 是否放到开头执行 + * @return void + */ + public function add($tag, $behavior, $first = false) + { + isset($this->tags[$tag]) || $this->tags[$tag] = []; + + if (is_array($behavior) && !is_callable($behavior)) { + if (!array_key_exists('_overlay', $behavior)) { + $this->tags[$tag] = array_merge($this->tags[$tag], $behavior); + } else { + unset($behavior['_overlay']); + $this->tags[$tag] = $behavior; + } + } elseif ($first) { + array_unshift($this->tags[$tag], $behavior); + } else { + $this->tags[$tag][] = $behavior; + } + } + + /** + * 批量导入插件 + * @access public + * @param array $tags 插件信息 + * @param bool $recursive 是否递归合并 + * @return void + */ + public function import(array $tags, $recursive = true) + { + if ($recursive) { + foreach ($tags as $tag => $behavior) { + $this->add($tag, $behavior); + } + } else { + $this->tags = $tags + $this->tags; + } + } + + /** + * 获取插件信息 + * @access public + * @param string $tag 插件位置 留空获取全部 + * @return array + */ + public function get($tag = '') + { + if (empty($tag)) { + //获取全部的插件信息 + return $this->tags; + } + + return array_key_exists($tag, $this->tags) ? $this->tags[$tag] : []; + } + + /** + * 监听标签的行为 + * @access public + * @param string $tag 标签名称 + * @param mixed $params 传入参数 + * @param bool $once 只获取一个有效返回值 + * @return mixed + */ + public function listen($tag, $params = null, $once = false) + { + $results = []; + $tags = $this->get($tag); + + foreach ($tags as $key => $name) { + $results[$key] = $this->execTag($name, $tag, $params); + + if (false === $results[$key] || (!is_null($results[$key]) && $once)) { + break; + } + } + + return $once ? end($results) : $results; + } + + /** + * 执行行为 + * @access public + * @param mixed $class 行为 + * @param mixed $params 参数 + * @return mixed + */ + public function exec($class, $params = null) + { + if ($class instanceof \Closure || is_array($class)) { + $method = $class; + } else { + if (isset($this->bind[$class])) { + $class = $this->bind[$class]; + } + $method = [$class, self::$portal]; + } + + return Container::getInstance()->invoke($method, [$params]); + } + + /** + * 执行某个标签的行为 + * @access protected + * @param mixed $class 要执行的行为 + * @param string $tag 方法名(标签名) + * @param mixed $params 参数 + * @return mixed + */ + protected function execTag($class, $tag = '', $params = null) + { + $app = Container::get('app'); + + $app->isDebug() && $app['debug']->remark('behavior_start', 'time'); + + $method = Loader::parseName($tag, 1, false); + + if ($class instanceof \Closure) { + $call = $class; + $class = 'Closure'; + } elseif (strpos($class, '::')) { + $call = $class; + } else { + $obj = Container::get($class); + + if (!is_callable([$obj, $method])) { + $method = self::$portal; + } + + $call = [$class, $method]; + $class = $class . '->' . $method; + } + + $result = Container::getInstance()->invoke($call, [$params]); + + if ($app->isDebug()) { + $debug = $app['debug']; + $debug->remark('behavior_end', 'time'); + $app->log('[ BEHAVIOR ] Run ' . $class . ' @' . $tag . ' [ RunTime:' . $debug->getRangeTime('behavior_start', 'behavior_end') . 's ]'); + } + + return $result; + } + +} diff --git a/thinkphp/library/think/Lang.php b/thinkphp/library/think/Lang.php new file mode 100644 index 000000000..2168c13a5 --- /dev/null +++ b/thinkphp/library/think/Lang.php @@ -0,0 +1,265 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +class Lang +{ + /** + * 多语言信息 + * @var array + */ + private $lang = []; + + /** + * 当前语言 + * @var string + */ + private $range = 'zh-cn'; + + /** + * 多语言自动侦测变量名 + * @var string + */ + protected $langDetectVar = 'lang'; + + /** + * 多语言cookie变量 + * @var string + */ + protected $langCookieVar = 'think_var'; + + /** + * 允许的多语言列表 + * @var array + */ + protected $allowLangList = []; + + /** + * Accept-Language转义为对应语言包名称 系统默认配置 + * @var string + */ + protected $acceptLanguage = [ + 'zh-hans-cn' => 'zh-cn', + ]; + + // 设定当前的语言 + public function range($range = '') + { + if ('' == $range) { + return $this->range; + } else { + $this->range = $range; + } + } + + /** + * 设置语言定义(不区分大小写) + * @access public + * @param string|array $name 语言变量 + * @param string $value 语言值 + * @param string $range 语言作用域 + * @return mixed + */ + public function set($name, $value = null, $range = '') + { + $range = $range ?: $this->range; + // 批量定义 + if (!isset($this->lang[$range])) { + $this->lang[$range] = []; + } + + if (is_array($name)) { + return $this->lang[$range] = array_change_key_case($name) + $this->lang[$range]; + } + + return $this->lang[$range][strtolower($name)] = $value; + } + + /** + * 加载语言定义(不区分大小写) + * @access public + * @param string|array $file 语言文件 + * @param string $range 语言作用域 + * @return array + */ + public function load($file, $range = '') + { + $range = $range ?: $this->range; + if (!isset($this->lang[$range])) { + $this->lang[$range] = []; + } + + // 批量定义 + if (is_string($file)) { + $file = [$file]; + } + + $lang = []; + + foreach ($file as $_file) { + if (is_file($_file)) { + // 记录加载信息 + Container::get('app')->log('[ LANG ] ' . $_file); + $_lang = include $_file; + if (is_array($_lang)) { + $lang = array_change_key_case($_lang) + $lang; + } + } + } + + if (!empty($lang)) { + $this->lang[$range] = $lang + $this->lang[$range]; + } + + return $this->lang[$range]; + } + + /** + * 获取语言定义(不区分大小写) + * @access public + * @param string|null $name 语言变量 + * @param string $range 语言作用域 + * @return bool + */ + public function has($name, $range = '') + { + $range = $range ?: $this->range; + + return isset($this->lang[$range][strtolower($name)]); + } + + /** + * 获取语言定义(不区分大小写) + * @access public + * @param string|null $name 语言变量 + * @param array $vars 变量替换 + * @param string $range 语言作用域 + * @return mixed + */ + public function get($name = null, $vars = [], $range = '') + { + $range = $range ?: $this->range; + + // 空参数返回所有定义 + if (empty($name)) { + return $this->lang[$range]; + } + + $key = strtolower($name); + $value = isset($this->lang[$range][$key]) ? $this->lang[$range][$key] : $name; + + // 变量解析 + if (!empty($vars) && is_array($vars)) { + /** + * Notes: + * 为了检测的方便,数字索引的判断仅仅是参数数组的第一个元素的key为数字0 + * 数字索引采用的是系统的 sprintf 函数替换,用法请参考 sprintf 函数 + */ + if (key($vars) === 0) { + // 数字索引解析 + array_unshift($vars, $value); + $value = call_user_func_array('sprintf', $vars); + } else { + // 关联索引解析 + $replace = array_keys($vars); + foreach ($replace as &$v) { + $v = "{:{$v}}"; + } + $value = str_replace($replace, $vars, $value); + } + } + + return $value; + } + + /** + * 自动侦测设置获取语言选择 + * @access public + * @return string + */ + public function detect() + { + // 自动侦测设置获取语言选择 + $langSet = ''; + + if (isset($_GET[$this->langDetectVar])) { + // url中设置了语言变量 + $langSet = strtolower($_GET[$this->langDetectVar]); + } elseif (isset($_COOKIE[$this->langCookieVar])) { + // Cookie中设置了语言变量 + $langSet = strtolower($_COOKIE[$this->langCookieVar]); + } elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { + // 自动侦测浏览器语言 + preg_match('/^([a-z\d\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches); + $langSet = strtolower($matches[1]); + $acceptLangs = Container::get('config')->get('header_accept_lang'); + if (isset($acceptLangs[$langSet])) { + $langSet = $acceptLangs[$langSet]; + } elseif (isset($this->acceptLanguage[$langSet])) { + $langSet = $this->acceptLanguage[$langSet]; + } + } + + if (empty($this->allowLangList) || in_array($langSet, $this->allowLangList)) { + // 合法的语言 + $this->range = $langSet ?: $this->range; + } + + return $this->range; + } + + /** + * 设置当前语言到Cookie + * @access public + * @param string $lang 语言 + * @return void + */ + public function saveToCookie($lang = null) + { + $range = $lang ?: $this->range; + + $_COOKIE[$this->langCookieVar] = $range; + } + + /** + * 设置语言自动侦测的变量 + * @access public + * @param string $var 变量名称 + * @return void + */ + public function setLangDetectVar($var) + { + $this->langDetectVar = $var; + } + + /** + * 设置语言的cookie保存变量 + * @access public + * @param string $var 变量名称 + * @return void + */ + public function setLangCookieVar($var) + { + $this->langCookieVar = $var; + } + + /** + * 设置允许的语言列表 + * @access public + * @param array $list 语言列表 + * @return void + */ + public function setAllowLangList($list) + { + $this->allowLangList = $list; + } +} diff --git a/thinkphp/library/think/Loader.php b/thinkphp/library/think/Loader.php new file mode 100644 index 000000000..e2bed16f4 --- /dev/null +++ b/thinkphp/library/think/Loader.php @@ -0,0 +1,405 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +class Loader +{ + /** + * 类名映射信息 + * @var array + */ + protected static $classMap = []; + + /** + * 类库别名 + * @var array + */ + protected static $classAlias = []; + + /** + * PSR-4 + * @var array + */ + private static $prefixLengthsPsr4 = []; + private static $prefixDirsPsr4 = []; + private static $fallbackDirsPsr4 = []; + + /** + * PSR-0 + * @var array + */ + private static $prefixesPsr0 = []; + private static $fallbackDirsPsr0 = []; + + /** + * 自动加载的文件列表 + * @var array + */ + private static $autoloadFiles = []; + + /** + * Composer安装路径 + * @var string + */ + private static $composerPath; + + // 获取应用根目录 + public static function getRootPath() + { + if ('cli' == PHP_SAPI) { + $cwdPath = getcwd(); + + if (0 === strpos($_SERVER['argv'][0], $cwdPath)) { + $scriptName = $_SERVER['argv'][0]; + } else { + $scriptName = $cwdPath . DIRECTORY_SEPARATOR . $_SERVER['argv'][0]; + } + } else { + $scriptName = $_SERVER['SCRIPT_FILENAME']; + } + + $path = realpath(dirname($scriptName)); + + if (!is_file($path . DIRECTORY_SEPARATOR . 'think')) { + $path = dirname($path); + } + + return $path . DIRECTORY_SEPARATOR; + } + + // 注册自动加载机制 + public static function register($autoload = '') + { + // 注册系统自动加载 + spl_autoload_register($autoload ?: 'think\\Loader::autoload', true, true); + + $rootPath = self::getRootPath(); + + self::$composerPath = $rootPath . 'vendor' . DIRECTORY_SEPARATOR . 'composer' . DIRECTORY_SEPARATOR; + + // Composer自动加载支持 + if (is_dir(self::$composerPath)) { + if (is_file(self::$composerPath . 'autoload_static.php')) { + require self::$composerPath . 'autoload_static.php'; + + $declaredClass = get_declared_classes(); + $composerClass = array_pop($declaredClass); + + foreach (['prefixLengthsPsr4', 'prefixDirsPsr4', 'prefixesPsr0', 'classMap'] as $attr) { + if (property_exists($composerClass, $attr)) { + self::${$attr} = $composerClass::${$attr}; + } + } + } else { + self::registerComposerLoader(self::$composerPath); + } + } + + // 注册命名空间定义 + self::addNamespace([ + 'think' => __DIR__, + 'traits' => dirname(__DIR__) . DIRECTORY_SEPARATOR . 'traits', + ]); + + // 加载类库映射文件 + if (is_file($rootPath . 'runtime' . DIRECTORY_SEPARATOR . 'classmap.php')) { + self::addClassMap(__include_file($rootPath . 'runtime' . DIRECTORY_SEPARATOR . 'classmap.php')); + } + + // 自动加载extend目录 + self::addAutoLoadDir($rootPath . 'extend'); + } + + // 自动加载 + public static function autoload($class) + { + if (isset(self::$classAlias[$class])) { + return class_alias(self::$classAlias[$class], $class); + } + + if ($file = self::findFile($class)) { + + // Win环境严格区分大小写 + if (strpos(PHP_OS, 'WIN') !== false && pathinfo($file, PATHINFO_FILENAME) != pathinfo(realpath($file), PATHINFO_FILENAME)) { + return false; + } + + __include_file($file); + return true; + } + } + + /** + * 查找文件 + * @access private + * @param string $class + * @return string|false + */ + private static function findFile($class) + { + if (!empty(self::$classMap[$class])) { + // 类库映射 + return self::$classMap[$class]; + } + + // 查找 PSR-4 + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . '.php'; + + $first = $class[0]; + if (isset(self::$prefixLengthsPsr4[$first])) { + foreach (self::$prefixLengthsPsr4[$first] as $prefix => $length) { + if (0 === strpos($class, $prefix)) { + foreach (self::$prefixDirsPsr4[$prefix] as $dir) { + if (is_file($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { + return $file; + } + } + } + } + } + + // 查找 PSR-4 fallback dirs + foreach (self::$fallbackDirsPsr4 as $dir) { + if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // 查找 PSR-0 + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . '.php'; + } + + if (isset(self::$prefixesPsr0[$first])) { + foreach (self::$prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // 查找 PSR-0 fallback dirs + foreach (self::$fallbackDirsPsr0 as $dir) { + if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + return self::$classMap[$class] = false; + } + + // 注册classmap + public static function addClassMap($class, $map = '') + { + if (is_array($class)) { + self::$classMap = array_merge(self::$classMap, $class); + } else { + self::$classMap[$class] = $map; + } + } + + // 注册命名空间 + public static function addNamespace($namespace, $path = '') + { + if (is_array($namespace)) { + foreach ($namespace as $prefix => $paths) { + self::addPsr4($prefix . '\\', rtrim($paths, DIRECTORY_SEPARATOR), true); + } + } else { + self::addPsr4($namespace . '\\', rtrim($path, DIRECTORY_SEPARATOR), true); + } + } + + // 添加Ps0空间 + private static function addPsr0($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + self::$fallbackDirsPsr0 = array_merge( + (array) $paths, + self::$fallbackDirsPsr0 + ); + } else { + self::$fallbackDirsPsr0 = array_merge( + self::$fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset(self::$prefixesPsr0[$first][$prefix])) { + self::$prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + + if ($prepend) { + self::$prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + self::$prefixesPsr0[$first][$prefix] + ); + } else { + self::$prefixesPsr0[$first][$prefix] = array_merge( + self::$prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + // 添加Psr4空间 + private static function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + self::$fallbackDirsPsr4 = array_merge( + (array) $paths, + self::$fallbackDirsPsr4 + ); + } else { + self::$fallbackDirsPsr4 = array_merge( + self::$fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset(self::$prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + + self::$prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + self::$prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + self::$prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + self::$prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + self::$prefixDirsPsr4[$prefix] = array_merge( + self::$prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + // 注册自动加载类库目录 + public static function addAutoLoadDir($path) + { + self::$fallbackDirsPsr4[] = $path; + } + + // 注册类别名 + public static function addClassAlias($alias, $class = null) + { + if (is_array($alias)) { + self::$classAlias = array_merge(self::$classAlias, $alias); + } else { + self::$classAlias[$alias] = $class; + } + } + + // 注册composer自动加载 + public static function registerComposerLoader($composerPath) + { + if (is_file($composerPath . 'autoload_namespaces.php')) { + $map = require $composerPath . 'autoload_namespaces.php'; + foreach ($map as $namespace => $path) { + self::addPsr0($namespace, $path); + } + } + + if (is_file($composerPath . 'autoload_psr4.php')) { + $map = require $composerPath . 'autoload_psr4.php'; + foreach ($map as $namespace => $path) { + self::addPsr4($namespace, $path); + } + } + + if (is_file($composerPath . 'autoload_classmap.php')) { + $classMap = require $composerPath . 'autoload_classmap.php'; + if ($classMap) { + self::addClassMap($classMap); + } + } + } + + // 加载composer autofile文件 + public static function loadComposerAutoloadFiles() + { + if (is_file(self::$composerPath . 'autoload_files.php')) { + $includeFiles = require self::$composerPath . 'autoload_files.php'; + foreach ($includeFiles as $fileIdentifier => $file) { + if (isset($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + continue; + } + + if (empty(self::$autoloadFiles[$fileIdentifier])) { + __require_file($file); + self::$autoloadFiles[$fileIdentifier] = true; + } + } + } + } + + /** + * 字符串命名风格转换 + * type 0 将Java风格转换为C的风格 1 将C风格转换为Java的风格 + * @access public + * @param string $name 字符串 + * @param integer $type 转换类型 + * @param bool $ucfirst 首字母是否大写(驼峰规则) + * @return string + */ + public static function parseName($name, $type = 0, $ucfirst = true) + { + if ($type) { + $name = preg_replace_callback('/_([a-zA-Z])/', function ($match) { + return strtoupper($match[1]); + }, $name); + return $ucfirst ? ucfirst($name) : lcfirst($name); + } + + return strtolower(trim(preg_replace("/[A-Z]/", "_\\0", $name), "_")); + } +} + +/** + * 作用范围隔离 + * + * @param $file + * @return mixed + */ +function __include_file($file) +{ + return include $file; +} + +function __require_file($file) +{ + return require $file; +} diff --git a/thinkphp/library/think/Log.php b/thinkphp/library/think/Log.php new file mode 100644 index 000000000..b584ee78f --- /dev/null +++ b/thinkphp/library/think/Log.php @@ -0,0 +1,398 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +use think\exception\ClassNotFoundException; + +class Log implements LoggerInterface +{ + const EMERGENCY = 'emergency'; + const ALERT = 'alert'; + const CRITICAL = 'critical'; + const ERROR = 'error'; + const WARNING = 'warning'; + const NOTICE = 'notice'; + const INFO = 'info'; + const DEBUG = 'debug'; + const SQL = 'sql'; + + /** + * 日志信息 + * @var array + */ + protected $log = []; + + /** + * 配置参数 + * @var array + */ + protected $config = []; + + /** + * 日志写入驱动 + * @var object + */ + protected $driver; + + /** + * 日志授权key + * @var string + */ + protected $key; + + /** + * 是否允许日志写入 + * @var bool + */ + protected $allowWrite = true; + + /** + * 应用对象 + * @var App + */ + protected $app; + + public function __construct(App $app) + { + $this->app = $app; + } + + /** + * 日志初始化 + * @access public + * @param array $config + * @return $this + */ + public function init($config = []) + { + $type = isset($config['type']) ? $config['type'] : 'File'; + $class = false !== strpos($type, '\\') ? $type : '\\think\\log\\driver\\' . ucwords($type); + + $this->config = $config; + + unset($config['type']); + if (!empty($config['close'])) { + $this->allowWrite = false; + } + + if (class_exists($class)) { + $this->driver = new $class($config); + } else { + throw new ClassNotFoundException('class not exists:' . $class, $class); + } + + // 记录初始化信息 + $this->app->isDebug() && $this->record('[ LOG ] INIT ' . $type); + + return $this; + } + + /** + * 获取日志信息 + * @access public + * @param string $type 信息类型 + * @return array + */ + public function getLog($type = '') + { + return $type ? $this->log[$type] : $this->log; + } + + /** + * 记录日志信息 + * @access public + * @param mixed $msg 日志信息 + * @param string $type 日志级别 + * @param array $context 替换内容 + * @return $this + */ + public function record($msg, $type = 'info', array $context = []) + { + if (!$this->allowWrite) { + return; + } + + if (is_string($msg)) { + $replace = []; + foreach ($context as $key => $val) { + $replace['{' . $key . '}'] = $val; + } + + $msg = strtr($msg, $replace); + } + + $this->log[$type][] = $msg; + + if (PHP_SAPI == 'cli') { + // 命令行日志实时写入 + $this->save(); + } + + return $this; + } + + /** + * 清空日志信息 + * @access public + * @return $this + */ + public function clear() + { + $this->log = []; + + return $this; + } + + /** + * 当前日志记录的授权key + * @access public + * @param string $key 授权key + * @return $this + */ + public function key($key) + { + $this->key = $key; + + return $this; + } + + /** + * 检查日志写入权限 + * @access public + * @param array $config 当前日志配置参数 + * @return bool + */ + public function check($config) + { + if ($this->key && !empty($config['allow_key']) && !in_array($this->key, $config['allow_key'])) { + return false; + } + + return true; + } + + /** + * 关闭本次请求日志写入 + * @access public + * @return $this + */ + public function close() + { + $this->allowWrite = false; + $this->log = []; + + return $this; + } + + /** + * 保存调试信息 + * @access public + * @return bool + */ + public function save() + { + if (empty($this->log) || !$this->allowWrite) { + return true; + } + + if (is_null($this->driver)) { + $this->init($this->app['config']->pull('log')); + } + + if (!$this->check($this->config)) { + // 检测日志写入权限 + return false; + } + + if (empty($this->config['level'])) { + // 获取全部日志 + $log = $this->log; + if (!$this->app->isDebug() && isset($log['debug'])) { + unset($log['debug']); + } + } else { + // 记录允许级别 + $log = []; + foreach ($this->config['level'] as $level) { + if (isset($this->log[$level])) { + $log[$level] = $this->log[$level]; + } + } + } + + $result = $this->driver->save($log); + if ($result) { + $this->log = []; + } + + return $result; + } + + /** + * 实时写入日志信息 并支持行为 + * @access public + * @param mixed $msg 调试信息 + * @param string $type 日志级别 + * @param bool $force 是否强制写入 + * @return bool + */ + public function write($msg, $type = 'info', $force = false) + { + // 封装日志信息 + $log = $this->log; + + if (true === $force || empty($this->config['level'])) { + $log[$type][] = $msg; + } elseif (in_array($type, $this->config['level'])) { + $log[$type][] = $msg; + } else { + return false; + } + + // 监听log_write + $this->app['hook']->listen('log_write', $log); + + if (is_null($this->driver)) { + $this->init($this->app['config']->pull('log')); + } + + // 写入日志 + $result = $this->driver->save($log); + + if ($result) { + $this->log = []; + } + + return $result; + } + + /** + * 记录日志信息 + * @access public + * @param string $level 日志级别 + * @param mixed $message 日志信息 + * @param array $context 替换内容 + * @return void + */ + public function log($level, $message, array $context = []) + { + $this->record($message, $level, $context); + } + + /** + * 记录emergency信息 + * @access public + * @param mixed $message 日志信息 + * @param array $context 替换内容 + * @return void + */ + public function emergency($message, array $context = []) + { + $this->log(__FUNCTION__, $message, $context); + } + + /** + * 记录警报信息 + * @access public + * @param mixed $message 日志信息 + * @param array $context 替换内容 + * @return void + */ + public function alert($message, array $context = []) + { + $this->log(__FUNCTION__, $message, $context); + } + + /** + * 记录紧急情况 + * @access public + * @param mixed $message 日志信息 + * @param array $context 替换内容 + * @return void + */ + public function critical($message, array $context = []) + { + $this->log(__FUNCTION__, $message, $context); + } + + /** + * 记录错误信息 + * @access public + * @param mixed $message 日志信息 + * @param array $context 替换内容 + * @return void + */ + public function error($message, array $context = []) + { + $this->log(__FUNCTION__, $message, $context); + } + + /** + * 记录warning信息 + * @access public + * @param mixed $message 日志信息 + * @param array $context 替换内容 + * @return void + */ + public function warning($message, array $context = []) + { + $this->log(__FUNCTION__, $message, $context); + } + + /** + * 记录notice信息 + * @access public + * @param mixed $message 日志信息 + * @param array $context 替换内容 + * @return void + */ + public function notice($message, array $context = []) + { + $this->log(__FUNCTION__, $message, $context); + } + + /** + * 记录一般信息 + * @access public + * @param mixed $message 日志信息 + * @param array $context 替换内容 + * @return void + */ + public function info($message, array $context = []) + { + $this->log(__FUNCTION__, $message, $context); + } + + /** + * 记录调试信息 + * @access public + * @param mixed $message 日志信息 + * @param array $context 替换内容 + * @return void + */ + public function debug($message, array $context = []) + { + $this->log(__FUNCTION__, $message, $context); + } + + /** + * 记录sql信息 + * @access public + * @param mixed $message 日志信息 + * @param array $context 替换内容 + * @return void + */ + public function sql($message, array $context = []) + { + $this->log(__FUNCTION__, $message, $context); + } +} diff --git a/thinkphp/library/think/Middleware.php b/thinkphp/library/think/Middleware.php new file mode 100644 index 000000000..6c2d22116 --- /dev/null +++ b/thinkphp/library/think/Middleware.php @@ -0,0 +1,132 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +use InvalidArgumentException; +use LogicException; +use think\exception\HttpResponseException; + +class Middleware +{ + protected $queue = []; + + public function import(array $middlewares = []) + { + foreach ($middlewares as $middleware) { + $this->add($middleware); + } + } + + /** + * {@inheritdoc} + */ + public function add($middleware) + { + if (is_null($middleware)) { + return; + } + + $middleware = $this->buildMiddleware($middleware); + + if ($middleware) { + $this->queue[] = $middleware; + } + } + + /** + * {@inheritdoc} + */ + public function unshift($middleware) + { + if (is_null($middleware)) { + return; + } + + $middleware = $this->buildMiddleware($middleware); + + if ($middleware) { + array_unshift($this->queue, $middleware); + } + } + + /** + * {@inheritdoc} + */ + public function all() + { + return $this->queue; + } + + /** + * {@inheritdoc} + */ + public function dispatch(Request $request) + { + return call_user_func($this->resolve(), $request); + } + + protected function buildMiddleware($middleware) + { + if (is_array($middleware)) { + list($middleware, $param) = $middleware; + } + + if ($middleware instanceof \Closure) { + return [$middleware, isset($param) ? $param : null]; + } + + if (!is_string($middleware)) { + throw new InvalidArgumentException('The middleware is invalid'); + } + + if (false === strpos($middleware, '\\')) { + $value = Container::get('config')->get('middleware.' . $middleware); + $middleware = $value ?: Container::get('app')->getNamespace() . '\\http\\middleware\\' . $middleware; + } + + if (is_array($middleware)) { + return $this->import($middleware); + } + + if (strpos($middleware, ':')) { + list($middleware, $param) = explode(':', $middleware, 2); + } + + return [[Container::get($middleware), 'handle'], isset($param) ? $param : null]; + } + + protected function resolve() + { + return function (Request $request) { + $middleware = array_shift($this->queue); + + if (null === $middleware) { + throw new InvalidArgumentException('The queue was exhausted, with no response returned'); + } + + list($call, $param) = $middleware; + + try { + $response = call_user_func_array($call, [$request, $this->resolve(), $param]); + } catch (HttpResponseException $exception) { + $response = $exception->getResponse(); + } + + if (!$response instanceof Response) { + throw new LogicException('The middleware must return Response instance'); + } + + return $response; + }; + } + +} diff --git a/thinkphp/library/think/Model.php b/thinkphp/library/think/Model.php new file mode 100644 index 000000000..9a98a4084 --- /dev/null +++ b/thinkphp/library/think/Model.php @@ -0,0 +1,1014 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +use think\db\Query; + +/** + * Class Model + * @package think + * @mixin Query + */ +abstract class Model implements \JsonSerializable, \ArrayAccess +{ + use model\concern\Attribute; + use model\concern\RelationShip; + use model\concern\ModelEvent; + use model\concern\TimeStamp; + use model\concern\Conversion; + + /** + * 是否更新数据 + * @var bool + */ + private $isUpdate = false; + + /** + * 是否强制更新所有数据 + * @var bool + */ + private $force = false; + + /** + * 更新条件 + * @var array + */ + private $updateWhere; + + /** + * 数据库配置信息 + * @var array|string + */ + protected $connection = []; + + /** + * 数据库查询对象类名 + * @var string + */ + protected $query; + + /** + * 模型名称 + * @var string + */ + protected $name; + + /** + * 数据表名称 + * @var string + */ + protected $table; + + /** + * 写入自动完成定义 + * @var array + */ + protected $auto = []; + + /** + * 新增自动完成定义 + * @var array + */ + protected $insert = []; + + /** + * 更新自动完成定义 + * @var array + */ + protected $update = []; + + /** + * 初始化过的模型. + * @var array + */ + protected static $initialized = []; + + /** + * 查询对象实例 + * @var Query + */ + protected $queryInstance; + + /** + * 错误信息 + * @var mixed + */ + protected $error; + + /** + * 软删除字段默认值 + * @var mixed + */ + protected $defaultSoftDelete; + + /** + * 架构函数 + * @access public + * @param array|object $data 数据 + */ + public function __construct($data = []) + { + if (is_object($data)) { + $this->data = get_object_vars($data); + } else { + $this->data = $data; + } + + if ($this->disuse) { + // 废弃字段 + foreach ((array) $this->disuse as $key) { + if (array_key_exists($key, $this->data)) { + unset($this->data[$key]); + } + } + } + + // 记录原始数据 + $this->origin = $this->data; + + $config = Container::get('config'); + + if (empty($this->name)) { + // 当前模型名 + $name = str_replace('\\', '/', static::class); + $this->name = basename($name); + if ($config->get('class_suffix')) { + $suffix = basename(dirname($name)); + $this->name = substr($this->name, 0, -strlen($suffix)); + } + } + + if (is_null($this->autoWriteTimestamp)) { + // 自动写入时间戳 + $this->autoWriteTimestamp = $config->get('database.auto_timestamp'); + } + + if (is_null($this->dateFormat)) { + // 设置时间戳格式 + $this->dateFormat = $config->get('database.datetime_format'); + } + + if (is_null($this->resultSetType)) { + $this->resultSetType = $config->get('database.resultset_type'); + } + + if (is_null($this->query)) { + // 设置查询对象 + $this->query = $config->get('database.query'); + } + + if (!empty($this->connection) && is_array($this->connection)) { + // 设置模型的数据库连接 + $this->connection = array_merge($config->pull('database'), $this->connection); + } + + // 执行初始化操作 + $this->initialize(); + } + + /** + * 获取当前模型名称 + * @access public + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * 创建新的模型实例 + * @access public + * @param array|object $data 数据 + * @param bool $isUpdate 是否为更新 + * @param mixed $where 更新条件 + * @return Model + */ + public function newInstance($data = [], $isUpdate = false, $where = null) + { + return (new static($data))->isUpdate($isUpdate, $where); + } + + /** + * 创建模型的查询对象 + * @access protected + * @return Query + */ + protected function buildQuery() + { + // 设置当前模型 确保查询返回模型对象 + $class = $this->query; + $query = (new $class())->connect($this->connection)->model($this)->json($this->json); + + // 设置当前数据表和模型名 + if (!empty($this->table)) { + $query->table($this->table); + } else { + $query->name($this->name); + } + + if (!empty($this->pk)) { + $query->pk($this->pk); + } + + return $query; + } + + /** + * 获取当前模型的数据库查询对象 + * @access public + * @param Query $query 查询对象实例 + * @return $this + */ + public function setQuery($query) + { + $this->queryInstance = $query; + return $this; + } + + /** + * 获取当前模型的数据库查询对象 + * @access public + * @param bool $useBaseQuery 是否调用全局查询范围 + * @return Query + */ + public function db($useBaseQuery = true) + { + if ($this->queryInstance) { + return $this->queryInstance; + } + + $query = $this->buildQuery(); + + if ($useBaseQuery) { + // 软删除 + if (method_exists($this, 'withNoTrashed')) { + $this->withNoTrashed($query); + } + + // 全局作用域 + if (method_exists($this, 'base')) { + call_user_func_array([$this, 'base'], [ & $query]); + } + } + + // 返回当前模型的数据库查询对象 + return $query; + } + + /** + * 初始化模型 + * @access protected + * @return void + */ + protected function initialize() + { + if (!isset(static::$initialized[static::class])) { + static::$initialized[static::class] = true; + static::init(); + } + } + + /** + * 初始化处理 + * @access protected + * @return void + */ + protected static function init() + {} + + /** + * 数据自动完成 + * @access protected + * @param array $auto 要自动更新的字段列表 + * @return void + */ + protected function autoCompleteData($auto = []) + { + foreach ($auto as $field => $value) { + if (is_integer($field)) { + $field = $value; + $value = null; + } + + if (!isset($this->data[$field])) { + $default = null; + } else { + $default = $this->data[$field]; + } + + $this->setAttr($field, !is_null($value) ? $value : $default); + } + } + + /** + * 更新是否强制写入数据 而不做比较 + * @access public + * @param bool $force + * @return $this + */ + public function force($force = true) + { + $this->force = $force; + return $this; + } + + /** + * 保存当前数据对象 + * @access public + * @param array $data 数据 + * @param array $where 更新条件 + * @param string $sequence 自增序列名 + * @return integer|false + */ + public function save($data = [], $where = [], $sequence = null) + { + if (is_string($data)) { + $sequence = $data; + $data = []; + } + + if (!$this->checkBeforeSave($data, $where)) { + return false; + } + + $result = $this->isUpdate ? $this->updateData($where) : $this->insertData($sequence); + + if (false === $result) { + return false; + } + + // 写入回调 + $this->trigger('after_write'); + + // 重新记录原始数据 + $this->origin = $this->data; + + return $result; + } + + /** + * 写入之前检查数据 + * @access protected + * @param array $data 数据 + * @param array $where 保存条件 + * @return bool + */ + protected function checkBeforeSave($data, $where) + { + if (!empty($data)) { + + // 数据对象赋值 + foreach ($data as $key => $value) { + $this->setAttr($key, $value, $data); + } + + if (!empty($where)) { + $this->isUpdate = true; + $this->updateWhere = $where; + } + } + + // 数据自动完成 + $this->autoCompleteData($this->auto); + + // 事件回调 + if (false === $this->trigger('before_write')) { + return false; + } + + return true; + } + + /** + * 检查数据是否允许写入 + * @access protected + * @param array $append 自动完成的字段列表 + * @return array + */ + protected function checkAllowFields(array $append = []) + { + // 检测字段 + if (empty($this->field) || true === $this->field) { + $query = $this->db(false); + $table = $this->table ?: $query->getTable(); + + $this->field = $query->getConnection()->getTableFields($table); + + $field = $this->field; + } else { + $field = array_merge($this->field, $append); + + if ($this->autoWriteTimestamp) { + array_push($field, $this->createTime, $this->updateTime); + } + } + + if ($this->disuse) { + // 废弃字段 + $field = array_diff($field, (array) $this->disuse); + } + return $field; + } + + /** + * 保存写入数据 + * @access protected + * @param array $where 保存条件 + * @return int|false + */ + protected function updateData($where) + { + // 自动更新 + $this->autoCompleteData($this->update); + + // 事件回调 + if (false === $this->trigger('before_update')) { + return false; + } + + // 获取有更新的数据 + $data = $this->getChangedData(); + + if (empty($data)) { + // 关联更新 + if (!empty($this->relationWrite)) { + $this->autoRelationUpdate(); + } + + return 0; + } elseif ($this->autoWriteTimestamp && $this->updateTime && !isset($data[$this->updateTime])) { + // 自动写入更新时间 + $data[$this->updateTime] = $this->autoWriteTimestamp($this->updateTime); + + $this->data[$this->updateTime] = $data[$this->updateTime]; + } + + if (empty($where) && !empty($this->updateWhere)) { + $where = $this->updateWhere; + } + + // 检查允许字段 + $allowFields = $this->checkAllowFields(array_merge($this->auto, $this->update)); + + // 保留主键数据 + foreach ($this->data as $key => $val) { + if ($this->isPk($key)) { + $data[$key] = $val; + } + } + + $pk = $this->getPk(); + $array = []; + + foreach ((array) $pk as $key) { + if (isset($data[$key])) { + $array[] = [$key, '=', $data[$key]]; + unset($data[$key]); + } + } + + if (!empty($array)) { + $where = $array; + } + + foreach ((array) $this->relationWrite as $name => $val) { + if (is_array($val)) { + foreach ($val as $key) { + if (isset($data[$key])) { + unset($data[$key]); + } + } + } + } + + // 模型更新 + $result = $this->db(false)->where($where)->strict(false)->field($allowFields)->update($data); + + // 关联更新 + if (!empty($this->relationWrite)) { + $this->autoRelationUpdate(); + } + + // 更新回调 + $this->trigger('after_update'); + + return $result; + } + + /** + * 新增写入数据 + * @access protected + * @param string $sequence 自增名 + * @return int|false + */ + protected function insertData($sequence) + { + // 自动写入 + $this->autoCompleteData($this->insert); + + // 时间戳自动写入 + $this->checkTimeStampWrite(); + + if (false === $this->trigger('before_insert')) { + return false; + } + + // 检查允许字段 + $allowFields = $this->checkAllowFields(array_merge($this->auto, $this->insert)); + + $result = $this->db(false)->strict(false)->field($allowFields)->insert($this->data, false, false, $sequence); + + // 获取自动增长主键 + if ($result && $insertId = $this->db(false)->getLastInsID($sequence)) { + $pk = $this->getPk(); + + foreach ((array) $pk as $key) { + if (!isset($this->data[$key]) || '' == $this->data[$key]) { + $this->data[$key] = $insertId; + } + } + } + + // 关联写入 + if (!empty($this->relationWrite)) { + $this->autoRelationInsert(); + } + + // 标记为更新 + $this->isUpdate = true; + + // 新增回调 + $this->trigger('after_insert'); + + return $result; + } + + /** + * 字段值(延迟)增长 + * @access public + * @param string $field 字段名 + * @param integer $step 增长值 + * @param integer $lazyTime 延时时间(s) + * @return integer|true + * @throws Exception + */ + public function setInc($field, $step = 1, $lazyTime = 0) + { + // 读取更新条件 + $where = $this->getWhere(); + + $result = $this->db(false)->where($where)->setInc($field, $step, $lazyTime); + + if (true !== $result) { + $this->data[$field] += $step; + } + + return $result; + } + + /** + * 字段值(延迟)减少 + * @access public + * @param string $field 字段名 + * @param integer $step 减少值 + * @param integer $lazyTime 延时时间(s) + * @return integer|true + * @throws Exception + */ + public function setDec($field, $step = 1, $lazyTime = 0) + { + // 读取更新条件 + $where = $this->getWhere(); + + $result = $this->db(false)->where($where)->setDec($field, $step, $lazyTime); + + if (true !== $result) { + $this->data[$field] -= $step; + } + + return $result; + } + + /** + * 获取当前的更新条件 + * @access protected + * @return mixed + */ + protected function getWhere() + { + // 删除条件 + $pk = $this->getPk(); + + if (is_string($pk) && isset($this->data[$pk])) { + $where[] = [$pk, '=', $this->data[$pk]]; + } elseif (!empty($this->updateWhere)) { + $where = $this->updateWhere; + } else { + $where = null; + } + + return $where; + } + + /** + * 保存多个数据到当前数据对象 + * @access public + * @param array $dataSet 数据 + * @param boolean $replace 是否自动识别更新和写入 + * @return Collection + * @throws \Exception + */ + public function saveAll($dataSet, $replace = true) + { + $result = []; + + $db = $this->db(false); + $db->startTrans(); + + try { + $pk = $this->getPk(); + + if (is_string($pk) && $replace) { + $auto = true; + } + + foreach ($dataSet as $key => $data) { + if ($this->isUpdate || (!empty($auto) && isset($data[$pk]))) { + $result[$key] = self::update($data, [], $this->field); + } else { + $result[$key] = self::create($data, $this->field); + } + } + + $db->commit(); + + return $this->toCollection($result); + } catch (\Exception $e) { + $db->rollback(); + throw $e; + } + } + + /** + * 是否为更新数据 + * @access public + * @param mixed $update + * @param mixed $where + * @return $this + */ + public function isUpdate($update = true, $where = null) + { + if (is_bool($update)) { + $this->isUpdate = $update; + + if (!empty($where)) { + $this->updateWhere = $where; + } + } else { + $this->isUpdate = true; + $this->updateWhere = $update; + } + + return $this; + } + + /** + * 删除当前的记录 + * @access public + * @return integer + */ + public function delete() + { + if (false === $this->trigger('before_delete')) { + return false; + } + + // 读取更新条件 + $where = $this->getWhere(); + + // 删除当前模型数据 + $result = $this->db(false)->where($where)->delete(); + + // 关联删除 + if (!empty($this->relationWrite)) { + $this->autoRelationDelete(); + } + + $this->trigger('after_delete'); + + // 清空数据 + $this->data = []; + $this->origin = []; + + return $result; + } + + /** + * 设置自动完成的字段( 规则通过修改器定义) + * @access public + * @param array $fields 需要自动完成的字段 + * @return $this + */ + public function auto($fields) + { + $this->auto = $fields; + + return $this; + } + + /** + * 写入数据 + * @access public + * @param array $data 数据数组 + * @param array|true $field 允许字段 + * @return static + */ + public static function create($data = [], $field = null) + { + $model = new static(); + + if (!empty($field)) { + $model->allowField($field); + } + + $model->isUpdate(false)->save($data, []); + + return $model; + } + + /** + * 更新数据 + * @access public + * @param array $data 数据数组 + * @param array $where 更新条件 + * @param array|true $field 允许字段 + * @return static + */ + public static function update($data = [], $where = [], $field = null) + { + $model = new static(); + + if (!empty($field)) { + $model->allowField($field); + } + + $model->isUpdate(true)->save($data, $where); + + return $model; + } + + /** + * 查找单条记录 + * @access public + * @param mixed $data 主键值或者查询条件(闭包) + * @param mixed $with 关联预查询 + * @param bool $cache 是否缓存 + * @param bool $failException 是否抛出异常 + * @return static|null + * @throws exception\DbException + */ + public static function get($data, $with = [], $cache = false, $failException = false) + { + if (is_null($data)) { + return; + } + + if (true === $with || is_int($with)) { + $cache = $with; + $with = []; + } + + $query = static::parseQuery($data, $with, $cache); + + return $query->failException($failException)->find($data); + } + + /** + * 查找单条记录 如果不存在直接抛出异常 + * @access public + * @param mixed $data 主键值或者查询条件(闭包) + * @param mixed $with 关联预查询 + * @param bool $cache 是否缓存 + * @return static|null + * @throws exception\DbException + */ + public static function getOrFail($data, $with = [], $cache = false) + { + return self::get($data, $with, $cache, true); + } + + /** + * 查找所有记录 + * @access public + * @param mixed $data 主键列表或者查询条件(闭包) + * @param array|string $with 关联预查询 + * @param bool $cache 是否缓存 + * @return static[]|false + * @throws exception\DbException + */ + public static function all($data = null, $with = [], $cache = false) + { + if (true === $with || is_int($with)) { + $cache = $with; + $with = []; + } + + $query = static::parseQuery($data, $with, $cache); + + return $query->select($data); + } + + /** + * 分析查询表达式 + * @access public + * @param mixed $data 主键列表或者查询条件(闭包) + * @param string $with 关联预查询 + * @param bool $cache 是否缓存 + * @return Query + */ + protected static function parseQuery(&$data, $with, $cache) + { + $result = self::with($with)->cache($cache); + + if (is_array($data) && key($data) !== 0) { + $result = $result->where($data); + $data = null; + } elseif ($data instanceof \Closure) { + $data($result); + $data = null; + } elseif ($data instanceof Query) { + $result = $data->with($with)->cache($cache); + $data = null; + } + + return $result; + } + + /** + * 删除记录 + * @access public + * @param mixed $data 主键列表 支持闭包查询条件 + * @return integer 成功删除的记录数 + */ + public static function destroy($data) + { + if (empty($data) && 0 !== $data) { + return 0; + } + + $model = new static(); + + $query = $model->db(); + + if (is_array($data) && key($data) !== 0) { + $query->where($data); + $data = null; + } elseif ($data instanceof \Closure) { + $data($query); + $data = null; + } + + $resultSet = $query->select($data); + $count = 0; + + if ($resultSet) { + foreach ($resultSet as $data) { + $result = $data->delete(); + $count += $result; + } + } + + return $count; + } + + /** + * 获取错误信息 + * @access public + * @return mixed + */ + public function getError() + { + return $this->error; + } + + /** + * 解序列化后处理 + */ + public function __wakeup() + { + $this->initialize(); + } + + public function __debugInfo() + { + return [ + 'data' => $this->data, + 'relation' => $this->relation, + ]; + } + + /** + * 修改器 设置数据对象的值 + * @access public + * @param string $name 名称 + * @param mixed $value 值 + * @return void + */ + public function __set($name, $value) + { + $this->setAttr($name, $value); + } + + /** + * 获取器 获取数据对象的值 + * @access public + * @param string $name 名称 + * @return mixed + */ + public function __get($name) + { + return $this->getAttr($name); + } + + /** + * 检测数据对象的值 + * @access public + * @param string $name 名称 + * @return boolean + */ + public function __isset($name) + { + if (array_key_exists($name, $this->data) || array_key_exists($name, $this->relation)) { + return true; + } + + return false; + } + + /** + * 销毁数据对象的值 + * @access public + * @param string $name 名称 + * @return void + */ + public function __unset($name) + { + unset($this->data[$name], $this->relation[$name]); + } + + // ArrayAccess + public function offsetSet($name, $value) + { + $this->setAttr($name, $value); + } + + public function offsetExists($name) + { + return $this->__isset($name); + } + + public function offsetUnset($name) + { + $this->__unset($name); + } + + public function offsetGet($name) + { + return $this->getAttr($name); + } + + /** + * 设置是否使用全局查询范围 + * @access public + * @param bool $use 是否启用全局查询范围 + * @return Query + */ + public static function useGlobalScope($use) + { + $model = new static(); + + return $model->db($use); + } + + public function __call($method, $args) + { + return call_user_func_array([$this->db(), $method], $args); + } + + public static function __callStatic($method, $args) + { + $model = new static(); + + return call_user_func_array([$model->db(), $method], $args); + } +} diff --git a/thinkphp/library/think/Paginator.php b/thinkphp/library/think/Paginator.php new file mode 100644 index 000000000..e2f9b898f --- /dev/null +++ b/thinkphp/library/think/Paginator.php @@ -0,0 +1,437 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +use ArrayAccess; +use ArrayIterator; +use Countable; +use IteratorAggregate; +use JsonSerializable; +use Traversable; + +abstract class Paginator implements ArrayAccess, Countable, IteratorAggregate, JsonSerializable +{ + /** + * 是否简洁模式 + * @var bool + */ + protected $simple = false; + + /** + * 数据集 + * @var Collection + */ + protected $items; + + /** + * 当前页 + * @var integer + */ + protected $currentPage; + + /** + * 最后一页 + * @var integer + */ + protected $lastPage; + + /** + * 数据总数 + * @var integer|null + */ + protected $total; + + /** + * 每页数量 + * @var integer + */ + protected $listRows; + + /** + * 是否有下一页 + * @var bool + */ + protected $hasMore; + + /** + * 分页配置 + * @var array + */ + protected $options = [ + 'var_page' => 'page', + 'path' => '/', + 'query' => [], + 'fragment' => '', + ]; + + public function __construct($items, $listRows, $currentPage = null, $total = null, $simple = false, $options = []) + { + $this->options = array_merge($this->options, $options); + + $this->options['path'] = '/' != $this->options['path'] ? rtrim($this->options['path'], '/') : $this->options['path']; + + $this->simple = $simple; + $this->listRows = $listRows; + + if (!$items instanceof Collection) { + $items = Collection::make($items); + } + + if ($simple) { + $this->currentPage = $this->setCurrentPage($currentPage); + $this->hasMore = count($items) > ($this->listRows); + $items = $items->slice(0, $this->listRows); + } else { + $this->total = $total; + $this->lastPage = (int) ceil($total / $listRows); + $this->currentPage = $this->setCurrentPage($currentPage); + $this->hasMore = $this->currentPage < $this->lastPage; + } + $this->items = $items; + } + + /** + * @access public + * @param $items + * @param $listRows + * @param null $currentPage + * @param null $total + * @param bool $simple + * @param array $options + * @return Paginator + */ + public static function make($items, $listRows, $currentPage = null, $total = null, $simple = false, $options = []) + { + return new static($items, $listRows, $currentPage, $total, $simple, $options); + } + + protected function setCurrentPage($currentPage) + { + if (!$this->simple && $currentPage > $this->lastPage) { + return $this->lastPage > 0 ? $this->lastPage : 1; + } + + return $currentPage; + } + + /** + * 获取页码对应的链接 + * + * @access protected + * @param $page + * @return string + */ + protected function url($page) + { + if ($page <= 0) { + $page = 1; + } + + if (strpos($this->options['path'], '[PAGE]') === false) { + $parameters = [$this->options['var_page'] => $page]; + $path = $this->options['path']; + } else { + $parameters = []; + $path = str_replace('[PAGE]', $page, $this->options['path']); + } + + if (count($this->options['query']) > 0) { + $parameters = array_merge($this->options['query'], $parameters); + } + + $url = $path; + if (!empty($parameters)) { + $url .= '?' . http_build_query($parameters, null, '&'); + } + + return $url . $this->buildFragment(); + } + + /** + * 自动获取当前页码 + * @access public + * @param string $varPage + * @param int $default + * @return int + */ + public static function getCurrentPage($varPage = 'page', $default = 1) + { + $page = Container::get('request')->param($varPage); + + if (filter_var($page, FILTER_VALIDATE_INT) !== false && (int) $page >= 1) { + return $page; + } + + return $default; + } + + /** + * 自动获取当前的path + * @access public + * @return string + */ + public static function getCurrentPath() + { + return Container::get('request')->baseUrl(); + } + + public function total() + { + if ($this->simple) { + throw new \DomainException('not support total'); + } + + return $this->total; + } + + public function listRows() + { + return $this->listRows; + } + + public function currentPage() + { + return $this->currentPage; + } + + public function lastPage() + { + if ($this->simple) { + throw new \DomainException('not support last'); + } + + return $this->lastPage; + } + + /** + * 数据是否足够分页 + * @access public + * @return boolean + */ + public function hasPages() + { + return !(1 == $this->currentPage && !$this->hasMore); + } + + /** + * 创建一组分页链接 + * + * @access public + * @param int $start + * @param int $end + * @return array + */ + public function getUrlRange($start, $end) + { + $urls = []; + + for ($page = $start; $page <= $end; $page++) { + $urls[$page] = $this->url($page); + } + + return $urls; + } + + /** + * 设置URL锚点 + * + * @access public + * @param string|null $fragment + * @return $this + */ + public function fragment($fragment) + { + $this->options['fragment'] = $fragment; + + return $this; + } + + /** + * 添加URL参数 + * + * @access public + * @param array|string $key + * @param string|null $value + * @return $this + */ + public function appends($key, $value = null) + { + if (!is_array($key)) { + $queries = [$key => $value]; + } else { + $queries = $key; + } + + foreach ($queries as $k => $v) { + if ($k !== $this->options['var_page']) { + $this->options['query'][$k] = $v; + } + } + + return $this; + } + + /** + * 构造锚点字符串 + * + * @access public + * @return string + */ + protected function buildFragment() + { + return $this->options['fragment'] ? '#' . $this->options['fragment'] : ''; + } + + /** + * 渲染分页html + * @access public + * @return mixed + */ + abstract public function render(); + + public function items() + { + return $this->items->all(); + } + + public function getCollection() + { + return $this->items; + } + + public function isEmpty() + { + return $this->items->isEmpty(); + } + + /** + * 给每个元素执行个回调 + * + * @access public + * @param callable $callback + * @return $this + */ + public function each(callable $callback) + { + foreach ($this->items as $key => $item) { + $result = $callback($item, $key); + + if (false === $result) { + break; + } elseif (!is_object($item)) { + $this->items[$key] = $result; + } + } + + return $this; + } + + /** + * Retrieve an external iterator + * @access public + * @return Traversable An instance of an object implementing Iterator or + * Traversable + */ + public function getIterator() + { + return new ArrayIterator($this->items->all()); + } + + /** + * Whether a offset exists + * @access public + * @param mixed $offset + * @return bool + */ + public function offsetExists($offset) + { + return $this->items->offsetExists($offset); + } + + /** + * Offset to retrieve + * @access public + * @param mixed $offset + * @return mixed + */ + public function offsetGet($offset) + { + return $this->items->offsetGet($offset); + } + + /** + * Offset to set + * @access public + * @param mixed $offset + * @param mixed $value + */ + public function offsetSet($offset, $value) + { + $this->items->offsetSet($offset, $value); + } + + /** + * Offset to unset + * @access public + * @param mixed $offset + * @return void + * @since 5.0.0 + */ + public function offsetUnset($offset) + { + $this->items->offsetUnset($offset); + } + + /** + * Count elements of an object + */ + public function count() + { + return $this->items->count(); + } + + public function __toString() + { + return (string) $this->render(); + } + + public function toArray() + { + try { + $total = $this->total(); + } catch (\DomainException $e) { + $total = null; + } + + return [ + 'total' => $total, + 'per_page' => $this->listRows(), + 'current_page' => $this->currentPage(), + 'last_page' => $this->lastPage, + 'data' => $this->items->toArray(), + ]; + } + + /** + * Specify data which should be serialized to JSON + */ + public function jsonSerialize() + { + return $this->toArray(); + } + + public function __call($name, $arguments) + { + return call_user_func_array([$this->getCollection(), $name], $arguments); + } + +} diff --git a/thinkphp/library/think/Process.php b/thinkphp/library/think/Process.php new file mode 100644 index 000000000..3b574db49 --- /dev/null +++ b/thinkphp/library/think/Process.php @@ -0,0 +1,1268 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +use think\process\exception\Failed as ProcessFailedException; +use think\process\exception\Timeout as ProcessTimeoutException; +use think\process\pipes\Pipes; +use think\process\pipes\Unix as UnixPipes; +use think\process\pipes\Windows as WindowsPipes; +use think\process\Utils; + +class Process +{ + + const ERR = 'err'; + const OUT = 'out'; + + const STATUS_READY = 'ready'; + const STATUS_STARTED = 'started'; + const STATUS_TERMINATED = 'terminated'; + + const STDIN = 0; + const STDOUT = 1; + const STDERR = 2; + + const TIMEOUT_PRECISION = 0.2; + + private $callback; + private $commandline; + private $cwd; + private $env; + private $input; + private $starttime; + private $lastOutputTime; + private $timeout; + private $idleTimeout; + private $options; + private $exitcode; + private $fallbackExitcode; + private $processInformation; + private $outputDisabled = false; + private $stdout; + private $stderr; + private $enhanceWindowsCompatibility = true; + private $enhanceSigchildCompatibility; + private $process; + private $status = self::STATUS_READY; + private $incrementalOutputOffset = 0; + private $incrementalErrorOutputOffset = 0; + private $tty; + private $pty; + + private $useFileHandles = false; + + /** @var Pipes */ + private $processPipes; + + private $latestSignal; + + private static $sigchild; + + /** + * @var array + */ + public static $exitCodes = [ + 0 => 'OK', + 1 => 'General error', + 2 => 'Misuse of shell builtins', + 126 => 'Invoked command cannot execute', + 127 => 'Command not found', + 128 => 'Invalid exit argument', + // signals + 129 => 'Hangup', + 130 => 'Interrupt', + 131 => 'Quit and dump core', + 132 => 'Illegal instruction', + 133 => 'Trace/breakpoint trap', + 134 => 'Process aborted', + 135 => 'Bus error: "access to undefined portion of memory object"', + 136 => 'Floating point exception: "erroneous arithmetic operation"', + 137 => 'Kill (terminate immediately)', + 138 => 'User-defined 1', + 139 => 'Segmentation violation', + 140 => 'User-defined 2', + 141 => 'Write to pipe with no one reading', + 142 => 'Signal raised by alarm', + 143 => 'Termination (request to terminate)', + // 144 - not defined + 145 => 'Child process terminated, stopped (or continued*)', + 146 => 'Continue if stopped', + 147 => 'Stop executing temporarily', + 148 => 'Terminal stop signal', + 149 => 'Background process attempting to read from tty ("in")', + 150 => 'Background process attempting to write to tty ("out")', + 151 => 'Urgent data available on socket', + 152 => 'CPU time limit exceeded', + 153 => 'File size limit exceeded', + 154 => 'Signal raised by timer counting virtual time: "virtual timer expired"', + 155 => 'Profiling timer expired', + // 156 - not defined + 157 => 'Pollable event', + // 158 - not defined + 159 => 'Bad syscall', + ]; + + /** + * 构造方法 + * @access public + * @param string $commandline 指令 + * @param string|null $cwd 工作目录 + * @param array|null $env 环境变量 + * @param string|null $input 输入 + * @param int|float|null $timeout 超时时间 + * @param array $options proc_open的选项 + * @throws \RuntimeException + * @api + */ + public function __construct($commandline, $cwd = null, array $env = null, $input = null, $timeout = 60, array $options = []) + { + if (!function_exists('proc_open')) { + throw new \RuntimeException('The Process class relies on proc_open, which is not available on your PHP installation.'); + } + + $this->commandline = $commandline; + $this->cwd = $cwd; + + if (null === $this->cwd && (defined('ZEND_THREAD_SAFE') || '\\' === DIRECTORY_SEPARATOR)) { + $this->cwd = getcwd(); + } + if (null !== $env) { + $this->setEnv($env); + } + + $this->input = $input; + $this->setTimeout($timeout); + $this->useFileHandles = '\\' === DIRECTORY_SEPARATOR; + $this->pty = false; + $this->enhanceWindowsCompatibility = true; + $this->enhanceSigchildCompatibility = '\\' !== DIRECTORY_SEPARATOR && $this->isSigchildEnabled(); + $this->options = array_replace([ + 'suppress_errors' => true, + 'binary_pipes' => true, + ], $options); + } + + public function __destruct() + { + $this->stop(); + } + + public function __clone() + { + $this->resetProcessData(); + } + + /** + * 运行指令 + * @access public + * @param callback|null $callback + * @return int + */ + public function run($callback = null) + { + $this->start($callback); + + return $this->wait(); + } + + /** + * 运行指令 + * @access public + * @param callable|null $callback + * @return self + * @throws \RuntimeException + * @throws ProcessFailedException + */ + public function mustRun($callback = null) + { + if ($this->isSigchildEnabled() && !$this->enhanceSigchildCompatibility) { + throw new \RuntimeException('This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.'); + } + + if (0 !== $this->run($callback)) { + throw new ProcessFailedException($this); + } + + return $this; + } + + /** + * 启动进程并写到 STDIN 输入后返回。 + * @access public + * @param callable|null $callback + * @throws \RuntimeException + * @throws \RuntimeException + * @throws \LogicException + */ + public function start($callback = null) + { + if ($this->isRunning()) { + throw new \RuntimeException('Process is already running'); + } + if ($this->outputDisabled && null !== $callback) { + throw new \LogicException('Output has been disabled, enable it to allow the use of a callback.'); + } + + $this->resetProcessData(); + $this->starttime = $this->lastOutputTime = microtime(true); + $this->callback = $this->buildCallback($callback); + $descriptors = $this->getDescriptors(); + + $commandline = $this->commandline; + + if ('\\' === DIRECTORY_SEPARATOR && $this->enhanceWindowsCompatibility) { + $commandline = 'cmd /V:ON /E:ON /C "(' . $commandline . ')'; + foreach ($this->processPipes->getFiles() as $offset => $filename) { + $commandline .= ' ' . $offset . '>' . Utils::escapeArgument($filename); + } + $commandline .= '"'; + + if (!isset($this->options['bypass_shell'])) { + $this->options['bypass_shell'] = true; + } + } + + $this->process = proc_open($commandline, $descriptors, $this->processPipes->pipes, $this->cwd, $this->env, $this->options); + + if (!is_resource($this->process)) { + throw new \RuntimeException('Unable to launch a new process.'); + } + $this->status = self::STATUS_STARTED; + + if ($this->tty) { + return; + } + + $this->updateStatus(false); + $this->checkTimeout(); + } + + /** + * 重启进程 + * @access public + * @param callable|null $callback + * @return Process + * @throws \RuntimeException + * @throws \RuntimeException + */ + public function restart($callback = null) + { + if ($this->isRunning()) { + throw new \RuntimeException('Process is already running'); + } + + $process = clone $this; + $process->start($callback); + + return $process; + } + + /** + * 等待要终止的进程 + * @access public + * @param callable|null $callback + * @return int + */ + public function wait($callback = null) + { + $this->requireProcessIsStarted(__FUNCTION__); + + $this->updateStatus(false); + if (null !== $callback) { + $this->callback = $this->buildCallback($callback); + } + + do { + $this->checkTimeout(); + $running = '\\' === DIRECTORY_SEPARATOR ? $this->isRunning() : $this->processPipes->areOpen(); + $close = '\\' !== DIRECTORY_SEPARATOR || !$running; + $this->readPipes(true, $close); + } while ($running); + + while ($this->isRunning()) { + usleep(1000); + } + + if ($this->processInformation['signaled'] && $this->processInformation['termsig'] !== $this->latestSignal) { + throw new \RuntimeException(sprintf('The process has been signaled with signal "%s".', $this->processInformation['termsig'])); + } + + return $this->exitcode; + } + + /** + * 获取PID + * @access public + * @return int|null + * @throws \RuntimeException + */ + public function getPid() + { + if ($this->isSigchildEnabled()) { + throw new \RuntimeException('This PHP has been compiled with --enable-sigchild. The process identifier can not be retrieved.'); + } + + $this->updateStatus(false); + + return $this->isRunning() ? $this->processInformation['pid'] : null; + } + + /** + * 将一个 POSIX 信号发送到进程中 + * @access public + * @param int $signal + * @return Process + */ + public function signal($signal) + { + $this->doSignal($signal, true); + + return $this; + } + + /** + * 禁用从底层过程获取输出和错误输出。 + * @access public + * @return Process + */ + public function disableOutput() + { + if ($this->isRunning()) { + throw new \RuntimeException('Disabling output while the process is running is not possible.'); + } + if (null !== $this->idleTimeout) { + throw new \LogicException('Output can not be disabled while an idle timeout is set.'); + } + + $this->outputDisabled = true; + + return $this; + } + + /** + * 开启从底层过程获取输出和错误输出。 + * @access public + * @return Process + * @throws \RuntimeException + */ + public function enableOutput() + { + if ($this->isRunning()) { + throw new \RuntimeException('Enabling output while the process is running is not possible.'); + } + + $this->outputDisabled = false; + + return $this; + } + + /** + * 输出是否禁用 + * @access public + * @return bool + */ + public function isOutputDisabled() + { + return $this->outputDisabled; + } + + /** + * 获取当前的输出管道 + * @access public + * @return string + * @throws \LogicException + * @api + */ + public function getOutput() + { + if ($this->outputDisabled) { + throw new \LogicException('Output has been disabled.'); + } + + $this->requireProcessIsStarted(__FUNCTION__); + + $this->readPipes(false, '\\' === DIRECTORY_SEPARATOR ? !$this->processInformation['running'] : true); + + return $this->stdout; + } + + /** + * 以增量方式返回的输出结果。 + * @access public + * @return string + */ + public function getIncrementalOutput() + { + $this->requireProcessIsStarted(__FUNCTION__); + + $data = $this->getOutput(); + + $latest = substr($data, $this->incrementalOutputOffset); + + if (false === $latest) { + return ''; + } + + $this->incrementalOutputOffset = strlen($data); + + return $latest; + } + + /** + * 清空输出 + * @access public + * @return Process + */ + public function clearOutput() + { + $this->stdout = ''; + $this->incrementalOutputOffset = 0; + + return $this; + } + + /** + * 返回当前的错误输出的过程 (STDERR)。 + * @access public + * @return string + */ + public function getErrorOutput() + { + if ($this->outputDisabled) { + throw new \LogicException('Output has been disabled.'); + } + + $this->requireProcessIsStarted(__FUNCTION__); + + $this->readPipes(false, '\\' === DIRECTORY_SEPARATOR ? !$this->processInformation['running'] : true); + + return $this->stderr; + } + + /** + * 以增量方式返回 errorOutput + * @access public + * @return string + */ + public function getIncrementalErrorOutput() + { + $this->requireProcessIsStarted(__FUNCTION__); + + $data = $this->getErrorOutput(); + + $latest = substr($data, $this->incrementalErrorOutputOffset); + + if (false === $latest) { + return ''; + } + + $this->incrementalErrorOutputOffset = strlen($data); + + return $latest; + } + + /** + * 清空 errorOutput + * @access public + * @return Process + */ + public function clearErrorOutput() + { + $this->stderr = ''; + $this->incrementalErrorOutputOffset = 0; + + return $this; + } + + /** + * 获取退出码 + * @access public + * @return null|int + */ + public function getExitCode() + { + if ($this->isSigchildEnabled() && !$this->enhanceSigchildCompatibility) { + throw new \RuntimeException('This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.'); + } + + $this->updateStatus(false); + + return $this->exitcode; + } + + /** + * 获取退出文本 + * @access public + * @return null|string + */ + public function getExitCodeText() + { + if (null === $exitcode = $this->getExitCode()) { + return; + } + + return isset(self::$exitCodes[$exitcode]) ? self::$exitCodes[$exitcode] : 'Unknown error'; + } + + /** + * 检查是否成功 + * @access public + * @return bool + */ + public function isSuccessful() + { + return 0 === $this->getExitCode(); + } + + /** + * 是否未捕获的信号已被终止子进程 + * @access public + * @return bool + */ + public function hasBeenSignaled() + { + $this->requireProcessIsTerminated(__FUNCTION__); + + if ($this->isSigchildEnabled()) { + throw new \RuntimeException('This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.'); + } + + $this->updateStatus(false); + + return $this->processInformation['signaled']; + } + + /** + * 返回导致子进程终止其执行的数。 + * @access public + * @return int + */ + public function getTermSignal() + { + $this->requireProcessIsTerminated(__FUNCTION__); + + if ($this->isSigchildEnabled()) { + throw new \RuntimeException('This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.'); + } + + $this->updateStatus(false); + + return $this->processInformation['termsig']; + } + + /** + * 检查子进程信号是否已停止 + * @access public + * @return bool + */ + public function hasBeenStopped() + { + $this->requireProcessIsTerminated(__FUNCTION__); + + $this->updateStatus(false); + + return $this->processInformation['stopped']; + } + + /** + * 返回导致子进程停止其执行的数。 + * @access public + * @return int + */ + public function getStopSignal() + { + $this->requireProcessIsTerminated(__FUNCTION__); + + $this->updateStatus(false); + + return $this->processInformation['stopsig']; + } + + /** + * 检查是否正在运行 + * @access public + * @return bool + */ + public function isRunning() + { + if (self::STATUS_STARTED !== $this->status) { + return false; + } + + $this->updateStatus(false); + + return $this->processInformation['running']; + } + + /** + * 检查是否已开始 + * @access public + * @return bool + */ + public function isStarted() + { + return self::STATUS_READY != $this->status; + } + + /** + * 检查是否已终止 + * @access public + * @return bool + */ + public function isTerminated() + { + $this->updateStatus(false); + + return self::STATUS_TERMINATED == $this->status; + } + + /** + * 获取当前的状态 + * @access public + * @return string + */ + public function getStatus() + { + $this->updateStatus(false); + + return $this->status; + } + + /** + * 终止进程 + * @access public + */ + public function stop() + { + if ($this->isRunning()) { + if ('\\' === DIRECTORY_SEPARATOR && !$this->isSigchildEnabled()) { + exec(sprintf('taskkill /F /T /PID %d 2>&1', $this->getPid()), $output, $exitCode); + if ($exitCode > 0) { + throw new \RuntimeException('Unable to kill the process'); + } + } else { + $pids = preg_split('/\s+/', `ps -o pid --no-heading --ppid {$this->getPid()}`); + foreach ($pids as $pid) { + if (is_numeric($pid)) { + posix_kill($pid, 9); + } + } + } + } + + $this->updateStatus(false); + if ($this->processInformation['running']) { + $this->close(); + } + + return $this->exitcode; + } + + /** + * 添加一行输出 + * @access public + * @param string $line + */ + public function addOutput($line) +{ + $this->lastOutputTime = microtime(true); + $this->stdout .= $line; + } + + /** + * 添加一行错误输出 + * @access public + * @param string $line + */ + public function addErrorOutput($line) +{ + $this->lastOutputTime = microtime(true); + $this->stderr .= $line; + } + + /** + * 获取被执行的指令 + * @access public + * @return string + */ + public function getCommandLine() +{ + return $this->commandline; + } + + /** + * 设置指令 + * @access public + * @param string $commandline + * @return self + */ + public function setCommandLine($commandline) +{ + $this->commandline = $commandline; + + return $this; + } + + /** + * 获取超时时间 + * @access public + * @return float|null + */ + public function getTimeout() +{ + return $this->timeout; + } + + /** + * 获取idle超时时间 + * @access public + * @return float|null + */ + public function getIdleTimeout() +{ + return $this->idleTimeout; + } + + /** + * 设置超时时间 + * @access public + * @param int|float|null $timeout + * @return self + */ + public function setTimeout($timeout) +{ + $this->timeout = $this->validateTimeout($timeout); + + return $this; + } + + /** + * 设置idle超时时间 + * @access public + * @param int|float|null $timeout + * @return self + */ + public function setIdleTimeout($timeout) +{ + if (null !== $timeout && $this->outputDisabled) { + throw new \LogicException('Idle timeout can not be set while the output is disabled.'); + } + + $this->idleTimeout = $this->validateTimeout($timeout); + + return $this; + } + + /** + * 设置TTY + * @access public + * @param bool $tty + * @return self + */ + public function setTty($tty) +{ + if ('\\' === DIRECTORY_SEPARATOR && $tty) { + throw new \RuntimeException('TTY mode is not supported on Windows platform.'); + } + if ($tty && (!file_exists('/dev/tty') || !is_readable('/dev/tty'))) { + throw new \RuntimeException('TTY mode requires /dev/tty to be readable.'); + } + + $this->tty = (bool) $tty; + + return $this; + } + + /** + * 检查是否是tty模式 + * @access public + * @return bool + */ + public function isTty() +{ + return $this->tty; + } + + /** + * 设置pty模式 + * @access public + * @param bool $bool + * @return self + */ + public function setPty($bool) +{ + $this->pty = (bool) $bool; + + return $this; + } + + /** + * 是否是pty模式 + * @access public + * @return bool + */ + public function isPty() +{ + return $this->pty; + } + + /** + * 获取工作目录 + * @access public + * @return string|null + */ + public function getWorkingDirectory() +{ + if (null === $this->cwd) { + return getcwd() ?: null; + } + + return $this->cwd; + } + + /** + * 设置工作目录 + * @access public + * @param string $cwd + * @return self + */ + public function setWorkingDirectory($cwd) +{ + $this->cwd = $cwd; + + return $this; + } + + /** + * 获取环境变量 + * @access public + * @return array + */ + public function getEnv() +{ + return $this->env; + } + + /** + * 设置环境变量 + * @access public + * @param array $env + * @return self + */ + public function setEnv(array $env) +{ + $env = array_filter($env, function ($value) { + return !is_array($value); + }); + + $this->env = []; + foreach ($env as $key => $value) { + $this->env[(binary) $key] = (binary) $value; + } + + return $this; + } + + /** + * 获取输入 + * @access public + * @return null|string + */ + public function getInput() +{ + return $this->input; + } + + /** + * 设置输入 + * @access public + * @param mixed $input + * @return self + */ + public function setInput($input) +{ + if ($this->isRunning()) { + throw new \LogicException('Input can not be set while the process is running.'); + } + + $this->input = Utils::validateInput(sprintf('%s::%s', __CLASS__, __FUNCTION__), $input); + + return $this; + } + + /** + * 获取proc_open的选项 + * @access public + * @return array + */ + public function getOptions() +{ + return $this->options; + } + + /** + * 设置proc_open的选项 + * @access public + * @param array $options + * @return self + */ + public function setOptions(array $options) +{ + $this->options = $options; + + return $this; + } + + /** + * 是否兼容windows + * @access public + * @return bool + */ + public function getEnhanceWindowsCompatibility() +{ + return $this->enhanceWindowsCompatibility; + } + + /** + * 设置是否兼容windows + * @access public + * @param bool $enhance + * @return self + */ + public function setEnhanceWindowsCompatibility($enhance) +{ + $this->enhanceWindowsCompatibility = (bool) $enhance; + + return $this; + } + + /** + * 返回是否 sigchild 兼容模式激活 + * @access public + * @return bool + */ + public function getEnhanceSigchildCompatibility() +{ + return $this->enhanceSigchildCompatibility; + } + + /** + * 激活 sigchild 兼容性模式。 + * @access public + * @param bool $enhance + * @return self + */ + public function setEnhanceSigchildCompatibility($enhance) +{ + $this->enhanceSigchildCompatibility = (bool) $enhance; + + return $this; + } + + /** + * 是否超时 + */ + public function checkTimeout() +{ + if (self::STATUS_STARTED !== $this->status) { + return; + } + + if (null !== $this->timeout && $this->timeout < microtime(true) - $this->starttime) { + $this->stop(); + + throw new ProcessTimeoutException($this, ProcessTimeoutException::TYPE_GENERAL); + } + + if (null !== $this->idleTimeout && $this->idleTimeout < microtime(true) - $this->lastOutputTime) { + $this->stop(); + + throw new ProcessTimeoutException($this, ProcessTimeoutException::TYPE_IDLE); + } + } + + /** + * 是否支持pty + * @access public + * @return bool + */ + public static function isPtySupported() +{ + static $result; + + if (null !== $result) { + return $result; + } + + if ('\\' === DIRECTORY_SEPARATOR) { + return $result = false; + } + + $proc = @proc_open('echo 1', [['pty'], ['pty'], ['pty']], $pipes); + if (is_resource($proc)) { + proc_close($proc); + + return $result = true; + } + + return $result = false; + } + + /** + * 创建所需的 proc_open 的描述符 + * @access private + * @return array + */ + private function getDescriptors() +{ + if ('\\' === DIRECTORY_SEPARATOR) { + $this->processPipes = WindowsPipes::create($this, $this->input); + } else { + $this->processPipes = UnixPipes::create($this, $this->input); + } + $descriptors = $this->processPipes->getDescriptors($this->outputDisabled); + + if (!$this->useFileHandles && $this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) { + + $descriptors = array_merge($descriptors, [['pipe', 'w']]); + + $this->commandline = '(' . $this->commandline . ') 3>/dev/null; code=$?; echo $code >&3; exit $code'; + } + + return $descriptors; + } + + /** + * 建立 wait () 使用的回调。 + * @access protected + * @param callable|null $callback + * @return callable + */ + protected function buildCallback($callback) +{ + $out = self::OUT; + $callback = function ($type, $data) use ($callback, $out) { + if ($out == $type) { + $this->addOutput($data); + } else { + $this->addErrorOutput($data); + } + + if (null !== $callback) { + call_user_func($callback, $type, $data); + } + }; + + return $callback; + } + + /** + * 更新状态 + * @access protected + * @param bool $blocking + */ + protected function updateStatus($blocking) +{ + if (self::STATUS_STARTED !== $this->status) { + return; + } + + $this->processInformation = proc_get_status($this->process); + $this->captureExitCode(); + + $this->readPipes($blocking, '\\' === DIRECTORY_SEPARATOR ? !$this->processInformation['running'] : true); + + if (!$this->processInformation['running']) { + $this->close(); + } + } + + /** + * 是否开启 '--enable-sigchild' + * @access protected + * @return bool + */ + protected function isSigchildEnabled() +{ + if (null !== self::$sigchild) { + return self::$sigchild; + } + + if (!function_exists('phpinfo')) { + return self::$sigchild = false; + } + + ob_start(); + phpinfo(INFO_GENERAL); + + return self::$sigchild = false !== strpos(ob_get_clean(), '--enable-sigchild'); + } + + /** + * 验证是否超时 + * @access private + * @param int|float|null $timeout + * @return float|null + */ + private function validateTimeout($timeout) +{ + $timeout = (float) $timeout; + + if (0.0 === $timeout) { + $timeout = null; + } elseif ($timeout < 0) { + throw new \InvalidArgumentException('The timeout value must be a valid positive integer or float number.'); + } + + return $timeout; + } + + /** + * 读取pipes + * @access private + * @param bool $blocking + * @param bool $close + */ + private function readPipes($blocking, $close) +{ + $result = $this->processPipes->readAndWrite($blocking, $close); + + $callback = $this->callback; + foreach ($result as $type => $data) { + if (3 == $type) { + $this->fallbackExitcode = (int) $data; + } else { + $callback(self::STDOUT === $type ? self::OUT : self::ERR, $data); + } + } + } + + /** + * 捕获退出码 + */ + private function captureExitCode() +{ + if (isset($this->processInformation['exitcode']) && -1 != $this->processInformation['exitcode']) { + $this->exitcode = $this->processInformation['exitcode']; + } + } + + /** + * 关闭资源 + * @access private + * @return int 退出码 + */ + private function close() +{ + $this->processPipes->close(); + if (is_resource($this->process)) { + $exitcode = proc_close($this->process); + } else { + $exitcode = -1; + } + + $this->exitcode = -1 !== $exitcode ? $exitcode : (null !== $this->exitcode ? $this->exitcode : -1); + $this->status = self::STATUS_TERMINATED; + + if (-1 === $this->exitcode && null !== $this->fallbackExitcode) { + $this->exitcode = $this->fallbackExitcode; + } elseif (-1 === $this->exitcode && $this->processInformation['signaled'] + && 0 < $this->processInformation['termsig'] + ) { + $this->exitcode = 128 + $this->processInformation['termsig']; + } + + return $this->exitcode; + } + + /** + * 重置数据 + */ + private function resetProcessData() +{ + $this->starttime = null; + $this->callback = null; + $this->exitcode = null; + $this->fallbackExitcode = null; + $this->processInformation = null; + $this->stdout = null; + $this->stderr = null; + $this->process = null; + $this->latestSignal = null; + $this->status = self::STATUS_READY; + $this->incrementalOutputOffset = 0; + $this->incrementalErrorOutputOffset = 0; + } + + /** + * 将一个 POSIX 信号发送到进程中。 + * @access private + * @param int $signal + * @param bool $throwException + * @return bool + */ + private function doSignal($signal, $throwException) +{ + if (!$this->isRunning()) { + if ($throwException) { + throw new \LogicException('Can not send signal on a non running process.'); + } + + return false; + } + + if ($this->isSigchildEnabled()) { + if ($throwException) { + throw new \RuntimeException('This PHP has been compiled with --enable-sigchild. The process can not be signaled.'); + } + + return false; + } + + if (true !== @proc_terminate($this->process, $signal)) { + if ($throwException) { + throw new \RuntimeException(sprintf('Error while sending signal `%s`.', $signal)); + } + + return false; + } + + $this->latestSignal = $signal; + + return true; + } + + /** + * 确保进程已经开启 + * @access private + * @param string $functionName + */ + private function requireProcessIsStarted($functionName) +{ + if (!$this->isStarted()) { + throw new \LogicException(sprintf('Process must be started before calling %s.', $functionName)); + } + } + + /** + * 确保进程已经终止 + * @access private + * @param string $functionName + */ + private function requireProcessIsTerminated($functionName) +{ + if (!$this->isTerminated()) { + throw new \LogicException(sprintf('Process must be terminated before calling %s.', $functionName)); + } + } +} diff --git a/thinkphp/library/think/Request.php b/thinkphp/library/think/Request.php new file mode 100644 index 000000000..c627d06d7 --- /dev/null +++ b/thinkphp/library/think/Request.php @@ -0,0 +1,1966 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +use think\exception\HttpResponseException; + +class Request +{ + /** + * 对象实例 + * @var object + */ + protected $instance; + + /** + * 配置对象 + * @var Config + */ + protected $config; + + /** + * 请求类型 + * @var string + */ + protected $method; + + /** + * 域名(含协议及端口) + * @var string + */ + protected $domain; + + /** + * 子域名 + * @var string + */ + protected $subDomain; + + /** + * 泛域名 + * @var string + */ + protected $panDomain; + + /** + * 当前URL地址 + * @var string + */ + protected $url; + + /** + * 基础URL + * @var string + */ + protected $baseUrl; + + /** + * 当前执行的文件 + * @var string + */ + protected $baseFile; + + /** + * 访问的ROOT地址 + * @var string + */ + protected $root; + + /** + * pathinfo + * @var string + */ + protected $pathinfo; + + /** + * pathinfo(不含后缀) + * @var string + */ + protected $path; + + /** + * 当前路由信息 + * @var array + */ + protected $routeInfo = []; + + /** + * 当前调度信息 + * @var array + */ + protected $dispatch = []; + + /** + * 当前模块名 + * @var string + */ + protected $module; + + /** + * 当前控制器名 + * @var string + */ + protected $controller; + + /** + * 当前操作名 + * @var string + */ + protected $action; + + /** + * 当前语言集 + * @var string + */ + protected $langset; + + /** + * 当前请求参数 + * @var array + */ + protected $param = []; + + /** + * 当前GET参数 + * @var array + */ + protected $get = []; + + /** + * 当前POST参数 + * @var array + */ + protected $post = []; + + /** + * 当前REQUEST参数 + * @var array + */ + protected $request = []; + + /** + * 当前ROUTE参数 + * @var array + */ + protected $route = []; + + /** + * 当前PUT参数 + * @var array + */ + protected $put; + + /** + * 当前SESSION参数 + * @var array + */ + protected $session = []; + + /** + * 当前FILE参数 + * @var array + */ + protected $file = []; + + /** + * 当前COOKIE参数 + * @var array + */ + protected $cookie = []; + + /** + * 当前SERVER参数 + * @var array + */ + protected $server = []; + + /** + * 当前ENV参数 + * @var array + */ + protected $env = []; + + /** + * 当前HEADER参数 + * @var array + */ + protected $header = []; + + /** + * 资源类型定义 + * @var array + */ + protected $mimeType = [ + 'xml' => 'application/xml,text/xml,application/x-xml', + 'json' => 'application/json,text/x-json,application/jsonrequest,text/json', + 'js' => 'text/javascript,application/javascript,application/x-javascript', + 'css' => 'text/css', + 'rss' => 'application/rss+xml', + 'yaml' => 'application/x-yaml,text/yaml', + 'atom' => 'application/atom+xml', + 'pdf' => 'application/pdf', + 'text' => 'text/plain', + 'image' => 'image/png,image/jpg,image/jpeg,image/pjpeg,image/gif,image/webp,image/*', + 'csv' => 'text/csv', + 'html' => 'text/html,application/xhtml+xml,*/*', + ]; + + /** + * 当前请求内容 + * @var string + */ + protected $content; + + /** + * 全局过滤规则 + * @var array + */ + protected $filter; + + /** + * 扩展方法 + * @var array + */ + protected $hook = []; + + /** + * php://input内容 + * @var string + */ + // php://input + protected $input; + + /** + * 请求缓存 + * @var array + */ + protected $cache; + + /** + * 缓存是否检查 + * @var bool + */ + protected $isCheckCache; + + /** + * 请求安全Key + * @var string + */ + protected $secureKey; + + /** + * 架构函数 + * @access public + * @param array $options 参数 + */ + public function __construct($options = []) + { + foreach ($options as $name => $item) { + if (property_exists($this, $name)) { + $this->$name = $item; + } + } + + $this->config = Container::get('config'); + + if (is_null($this->filter)) { + $this->filter = $this->config->get('default_filter'); + } + + // 保存 php://input + $this->input = file_get_contents('php://input'); + } + + public function __call($method, $args) + { + if (array_key_exists($method, $this->hook)) { + array_unshift($args, $this); + return call_user_func_array($this->hook[$method], $args); + } + + throw new Exception('method not exists:' . static::class . '->' . $method); + } + + /** + * Hook 方法注入 + * @access public + * @param string|array $method 方法名 + * @param mixed $callback callable + * @return void + */ + public function hook($method, $callback = null) + { + if (is_array($method)) { + $this->hook = array_merge($this->hook, $method); + } else { + $this->hook[$method] = $callback; + } + } + + /** + * 创建一个URL请求 + * @access public + * @param string $uri URL地址 + * @param string $method 请求类型 + * @param array $params 请求参数 + * @param array $cookie + * @param array $files + * @param array $server + * @param string $content + * @return \think\Request + */ + public function create($uri, $method = 'GET', $params = [], $cookie = [], $files = [], $server = [], $content = null) + { + $server['PATH_INFO'] = ''; + $server['REQUEST_METHOD'] = strtoupper($method); + $info = parse_url($uri); + + if (isset($info['host'])) { + $server['SERVER_NAME'] = $info['host']; + $server['HTTP_HOST'] = $info['host']; + } + + if (isset($info['scheme'])) { + if ('https' === $info['scheme']) { + $server['HTTPS'] = 'on'; + $server['SERVER_PORT'] = 443; + } else { + unset($server['HTTPS']); + $server['SERVER_PORT'] = 80; + } + } + + if (isset($info['port'])) { + $server['SERVER_PORT'] = $info['port']; + $server['HTTP_HOST'] = $server['HTTP_HOST'] . ':' . $info['port']; + } + + if (isset($info['user'])) { + $server['PHP_AUTH_USER'] = $info['user']; + } + + if (isset($info['pass'])) { + $server['PHP_AUTH_PW'] = $info['pass']; + } + + if (!isset($info['path'])) { + $info['path'] = '/'; + } + + $options = []; + $queryString = ''; + + $options[strtolower($method)] = $params; + + if (isset($info['query'])) { + parse_str(html_entity_decode($info['query']), $query); + if (!empty($params)) { + $params = array_replace($query, $params); + $queryString = http_build_query($params, '', '&'); + } else { + $params = $query; + $queryString = $info['query']; + } + } elseif (!empty($params)) { + $queryString = http_build_query($params, '', '&'); + } + + if ($queryString) { + parse_str($queryString, $get); + $options['get'] = isset($options['get']) ? array_merge($get, $options['get']) : $get; + } + + $server['REQUEST_URI'] = $info['path'] . ('' !== $queryString ? '?' . $queryString : ''); + $server['QUERY_STRING'] = $queryString; + $options['cookie'] = $cookie; + $options['param'] = $params; + $options['file'] = $files; + $options['server'] = $server; + $options['url'] = $server['REQUEST_URI']; + $options['baseUrl'] = $info['path']; + $options['pathinfo'] = '/' == $info['path'] ? '/' : ltrim($info['path'], '/'); + $options['method'] = $server['REQUEST_METHOD']; + $options['domain'] = isset($info['scheme']) ? $info['scheme'] . '://' . $server['HTTP_HOST'] : ''; + $options['content'] = $content; + + foreach ($options as $name => $item) { + if (property_exists($this, $name)) { + $this->$name = $item; + } + } + + return $this; + } + + /** + * 设置或获取当前包含协议的域名 + * @access public + * @param string $domain 域名 + * @return string|$this + */ + public function domain($domain = null) + { + if (!is_null($domain)) { + $this->domain = $domain; + return $this; + } elseif (!$this->domain) { + $this->domain = $this->scheme() . '://' . $this->host(); + } + + return $this->domain; + } + + /** + * 获取当前根域名 + * @access public + * @return string + */ + public function rootDomain() + { + $root = $this->config->get('app.url_domain_root'); + + if (!$root) { + $item = explode('.', $this->host()); + $count = count($item); + $root = $count > 1 ? $item[$count - 2] . '.' . $item[$count - 1] : $item[0]; + } + + return $root; + } + + /** + * 获取当前子域名 + * @access public + * @return string + */ + public function subDomain() + { + if (is_null($this->subDomain)) { + // 获取当前主域名 + $rootDomain = $this->config->get('app.url_domain_root'); + + if ($rootDomain) { + // 配置域名根 例如 thinkphp.cn 163.com.cn 如果是国家级域名 com.cn net.cn 之类的域名需要配置 + $domain = explode('.', rtrim(stristr($this->host(), $rootDomain, true), '.')); + } else { + $domain = explode('.', $this->host(), -2); + } + + $this->subDomain = implode('.', $domain); + } + + return $this->subDomain; + } + + /** + * 设置或获取当前泛域名的值 + * @access public + * @param string $domain 域名 + * @return string|$this + */ + public function panDomain($domain = null) + { + if (is_null($domain)) { + return $this->panDomain; + } + + $this->panDomain = $domain; + return $this; + } + + /** + * 设置或获取当前完整URL 包括QUERY_STRING + * @access public + * @param string|true $url URL地址 true 带域名获取 + * @return string|$this + */ + public function url($url = null) + { + if (!is_null($url) && true !== $url) { + $this->url = $url; + return $this; + } elseif (!$this->url) { + if ($this->isCli()) { + $this->url = isset($_SERVER['argv'][1]) ? $_SERVER['argv'][1] : ''; + } elseif (isset($_SERVER['HTTP_X_REWRITE_URL'])) { + $this->url = $_SERVER['HTTP_X_REWRITE_URL']; + } elseif (isset($_SERVER['REQUEST_URI'])) { + $this->url = $_SERVER['REQUEST_URI']; + } elseif (isset($_SERVER['ORIG_PATH_INFO'])) { + $this->url = $_SERVER['ORIG_PATH_INFO'] . (!empty($_SERVER['QUERY_STRING']) ? '?' . $_SERVER['QUERY_STRING'] : ''); + } else { + $this->url = ''; + } + } + + return true === $url ? $this->domain() . $this->url : $this->url; + } + + /** + * 设置或获取当前URL 不含QUERY_STRING + * @access public + * @param string $url URL地址 + * @return string|$this + */ + public function baseUrl($url = null) + { + if (!is_null($url) && true !== $url) { + $this->baseUrl = $url; + return $this; + } elseif (!$this->baseUrl) { + $str = $this->url(); + $this->baseUrl = strpos($str, '?') ? strstr($str, '?', true) : $str; + } + + return true === $url ? $this->domain() . $this->baseUrl : $this->baseUrl; + } + + /** + * 设置或获取当前执行的文件 SCRIPT_NAME + * @access public + * @param string $file 当前执行的文件 + * @return string|$this + */ + public function baseFile($file = null) + { + if (!is_null($file) && true !== $file) { + $this->baseFile = $file; + return $this; + } elseif (!$this->baseFile) { + $url = ''; + if (!$this->isCli()) { + $script_name = basename($_SERVER['SCRIPT_FILENAME']); + if (basename($_SERVER['SCRIPT_NAME']) === $script_name) { + $url = $_SERVER['SCRIPT_NAME']; + } elseif (basename($_SERVER['PHP_SELF']) === $script_name) { + $url = $_SERVER['PHP_SELF']; + } elseif (isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME']) === $script_name) { + $url = $_SERVER['ORIG_SCRIPT_NAME']; + } elseif (($pos = strpos($_SERVER['PHP_SELF'], '/' . $script_name)) !== false) { + $url = substr($_SERVER['SCRIPT_NAME'], 0, $pos) . '/' . $script_name; + } elseif (isset($_SERVER['DOCUMENT_ROOT']) && strpos($_SERVER['SCRIPT_FILENAME'], $_SERVER['DOCUMENT_ROOT']) === 0) { + $url = str_replace('\\', '/', str_replace($_SERVER['DOCUMENT_ROOT'], '', $_SERVER['SCRIPT_FILENAME'])); + } + } + $this->baseFile = $url; + } + + return true === $file ? $this->domain() . $this->baseFile : $this->baseFile; + } + + /** + * 设置或获取URL访问根地址 + * @access public + * @param string $url URL地址 + * @return string|$this + */ + public function root($url = null) + { + if (!is_null($url) && true !== $url) { + $this->root = $url; + return $this; + } elseif (!$this->root) { + $file = $this->baseFile(); + if ($file && 0 !== strpos($this->url(), $file)) { + $file = str_replace('\\', '/', dirname($file)); + } + $this->root = rtrim($file, '/'); + } + + return true === $url ? $this->domain() . $this->root : $this->root; + } + + /** + * 获取URL访问根目录 + * @access public + * @return string + */ + public function rootUrl() + { + $base = $this->root(); + $root = strpos($base, '.') ? ltrim(dirname($base), DIRECTORY_SEPARATOR) : $base; + + if ('' != $root) { + $root = '/' . ltrim($root, '/'); + } + + return $root; + } + + /** + * 获取当前请求URL的pathinfo信息(含URL后缀) + * @access public + * @return string + */ + public function pathinfo() + { + if (is_null($this->pathinfo)) { + if (isset($_GET[$this->config->get('var_pathinfo')])) { + // 判断URL里面是否有兼容模式参数 + $_SERVER['PATH_INFO'] = $_GET[$this->config->get('var_pathinfo')]; + unset($_GET[$this->config->get('var_pathinfo')]); + } elseif ($this->isCli()) { + // CLI模式下 index.php module/controller/action/params/... + $_SERVER['PATH_INFO'] = isset($_SERVER['argv'][1]) ? $_SERVER['argv'][1] : ''; + } elseif ('cli-server' == PHP_SAPI) { + $_SERVER['PATH_INFO'] = strpos($_SERVER['REQUEST_URI'], '?') ? strstr($_SERVER['REQUEST_URI'], '?', true) : $_SERVER['REQUEST_URI']; + } + + // 分析PATHINFO信息 + if (!isset($_SERVER['PATH_INFO'])) { + foreach ($this->config->get('pathinfo_fetch') as $type) { + if (!empty($_SERVER[$type])) { + $_SERVER['PATH_INFO'] = (0 === strpos($_SERVER[$type], $_SERVER['SCRIPT_NAME'])) ? + substr($_SERVER[$type], strlen($_SERVER['SCRIPT_NAME'])) : $_SERVER[$type]; + break; + } + } + } + + $this->pathinfo = empty($_SERVER['PATH_INFO']) || '/' == $_SERVER['PATH_INFO'] ? '' : ltrim($_SERVER['PATH_INFO'], '/'); + } + + return $this->pathinfo; + } + + /** + * 获取当前请求URL的pathinfo信息(不含URL后缀) + * @access public + * @return string + */ + public function path() + { + if (is_null($this->path)) { + $suffix = $this->config->get('url_html_suffix'); + $pathinfo = $this->pathinfo(); + if (false === $suffix) { + // 禁止伪静态访问 + $this->path = $pathinfo; + } elseif ($suffix) { + // 去除正常的URL后缀 + $this->path = preg_replace('/\.(' . ltrim($suffix, '.') . ')$/i', '', $pathinfo); + } else { + // 允许任何后缀访问 + $this->path = preg_replace('/\.' . $this->ext() . '$/i', '', $pathinfo); + } + } + + return $this->path; + } + + /** + * 当前URL的访问后缀 + * @access public + * @return string + */ + public function ext() + { + return pathinfo($this->pathinfo(), PATHINFO_EXTENSION); + } + + /** + * 获取当前请求的时间 + * @access public + * @param bool $float 是否使用浮点类型 + * @return integer|float + */ + public function time($float = false) + { + return $float ? $_SERVER['REQUEST_TIME_FLOAT'] : $_SERVER['REQUEST_TIME']; + } + + /** + * 当前请求的资源类型 + * @access public + * @return false|string + */ + public function type() + { + $accept = $this->server('HTTP_ACCEPT'); + + if (empty($accept)) { + return false; + } + + foreach ($this->mimeType as $key => $val) { + $array = explode(',', $val); + foreach ($array as $k => $v) { + if (stristr($accept, $v)) { + return $key; + } + } + } + + return false; + } + + /** + * 设置资源类型 + * @access public + * @param string|array $type 资源类型名 + * @param string $val 资源类型 + * @return void + */ + public function mimeType($type, $val = '') + { + if (is_array($type)) { + $this->mimeType = array_merge($this->mimeType, $type); + } else { + $this->mimeType[$type] = $val; + } + } + + /** + * 当前的请求类型 + * @access public + * @param bool $method true 获取原始请求类型 + * @return string + */ + public function method($method = false) + { + if (true === $method) { + // 获取原始请求类型 + return $this->isCli() ? 'GET' : (isset($this->server['REQUEST_METHOD']) ? $this->server['REQUEST_METHOD'] : $_SERVER['REQUEST_METHOD']); + } elseif (!$this->method) { + if (isset($_POST[$this->config->get('var_method')])) { + $this->method = strtoupper($_POST[$this->config->get('var_method')]); + $this->{$this->method}($_POST); + } elseif (isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])) { + $this->method = strtoupper($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']); + } else { + $this->method = $this->isCli() ? 'GET' : (isset($this->server['REQUEST_METHOD']) ? $this->server['REQUEST_METHOD'] : $_SERVER['REQUEST_METHOD']); + } + } + + return $this->method; + } + + /** + * 是否为GET请求 + * @access public + * @return bool + */ + public function isGet() + { + return $this->method() == 'GET'; + } + + /** + * 是否为POST请求 + * @access public + * @return bool + */ + public function isPost() + { + return $this->method() == 'POST'; + } + + /** + * 是否为PUT请求 + * @access public + * @return bool + */ + public function isPut() + { + return $this->method() == 'PUT'; + } + + /** + * 是否为DELTE请求 + * @access public + * @return bool + */ + public function isDelete() + { + return $this->method() == 'DELETE'; + } + + /** + * 是否为HEAD请求 + * @access public + * @return bool + */ + public function isHead() + { + return $this->method() == 'HEAD'; + } + + /** + * 是否为PATCH请求 + * @access public + * @return bool + */ + public function isPatch() + { + return $this->method() == 'PATCH'; + } + + /** + * 是否为OPTIONS请求 + * @access public + * @return bool + */ + public function isOptions() + { + return $this->method() == 'OPTIONS'; + } + + /** + * 是否为cli + * @access public + * @return bool + */ + public function isCli() + { + return PHP_SAPI == 'cli'; + } + + /** + * 是否为cgi + * @access public + * @return bool + */ + public function isCgi() + { + return strpos(PHP_SAPI, 'cgi') === 0; + } + + /** + * 获取当前请求的参数 + * @access public + * @param mixed $name 变量名 + * @param mixed $default 默认值 + * @param string|array $filter 过滤方法 + * @return mixed + */ + public function param($name = '', $default = null, $filter = '') + { + if (empty($this->param)) { + $method = $this->method(true); + + // 自动获取请求变量 + switch ($method) { + case 'POST': + $vars = $this->post(false); + break; + case 'PUT': + case 'DELETE': + case 'PATCH': + $vars = $this->put(false); + break; + default: + $vars = []; + } + + // 当前请求参数和URL地址中的参数合并 + $this->param = array_merge($this->get(false), $vars, $this->route(false)); + } + + if (true === $name) { + // 获取包含文件上传信息的数组 + $file = $this->file(); + $data = is_array($file) ? array_merge($this->param, $file) : $this->param; + return $this->input($data, '', $default, $filter); + } + + return $this->input($this->param, $name, $default, $filter); + } + + /** + * 设置获取路由参数 + * @access public + * @param mixed $name 变量名 + * @param mixed $default 默认值 + * @param string|array $filter 过滤方法 + * @return mixed + */ + public function route($name = '', $default = null, $filter = '') + { + if (is_array($name)) { + $this->param = []; + return $this->route = array_merge($this->route, $name); + } + + return $this->input($this->route, $name, $default, $filter); + } + + /** + * 设置获取GET参数 + * @access public + * @param mixed $name 变量名 + * @param mixed $default 默认值 + * @param string|array $filter 过滤方法 + * @return mixed + */ + public function get($name = '', $default = null, $filter = '') + { + if (empty($this->get)) { + $this->get = $_GET; + } + + if (is_array($name)) { + $this->param = []; + return $this->get = array_merge($this->get, $name); + } + + return $this->input($this->get, $name, $default, $filter); + } + + /** + * 设置获取POST参数 + * @access public + * @param mixed $name 变量名 + * @param mixed $default 默认值 + * @param string|array $filter 过滤方法 + * @return mixed + */ + public function post($name = '', $default = null, $filter = '') + { + if (empty($this->post)) { + $content = $this->input; + if (empty($_POST) && false !== strpos($this->contentType(), 'application/json')) { + $this->post = (array) json_decode($content, true); + } else { + $this->post = $_POST; + } + } + + if (is_array($name)) { + $this->param = []; + return $this->post = array_merge($this->post, $name); + } + + return $this->input($this->post, $name, $default, $filter); + } + + /** + * 设置获取PUT参数 + * @access public + * @param mixed $name 变量名 + * @param mixed $default 默认值 + * @param string|array $filter 过滤方法 + * @return mixed + */ + public function put($name = '', $default = null, $filter = '') + { + if (is_null($this->put)) { + $content = $this->input; + if (false !== strpos($this->contentType(), 'application/json')) { + $this->put = (array) json_decode($content, true); + } else { + parse_str($content, $this->put); + } + } + + if (is_array($name)) { + $this->param = []; + return $this->put = is_null($this->put) ? $name : array_merge($this->put, $name); + } + + return $this->input($this->put, $name, $default, $filter); + } + + /** + * 设置获取DELETE参数 + * @access public + * @param mixed $name 变量名 + * @param mixed $default 默认值 + * @param string|array $filter 过滤方法 + * @return mixed + */ + public function delete($name = '', $default = null, $filter = '') + { + return $this->put($name, $default, $filter); + } + + /** + * 设置获取PATCH参数 + * @access public + * @param mixed $name 变量名 + * @param mixed $default 默认值 + * @param string|array $filter 过滤方法 + * @return mixed + */ + public function patch($name = '', $default = null, $filter = '') + { + return $this->put($name, $default, $filter); + } + + /** + * 获取request变量 + * @access public + * @param mixed $name 数据名称 + * @param string $default 默认值 + * @param string|array $filter 过滤方法 + * @return mixed + */ + public function request($name = '', $default = null, $filter = '') + { + if (empty($this->request)) { + $this->request = $_REQUEST; + } + + if (is_array($name)) { + $this->param = []; + return $this->request = array_merge($this->request, $name); + } + + return $this->input($this->request, $name, $default, $filter); + } + + /** + * 获取session数据 + * @access public + * @param mixed $name 数据名称 + * @param string $default 默认值 + * @param string|array $filter 过滤方法 + * @return mixed + */ + public function session($name = '', $default = null, $filter = '') + { + if (empty($this->session)) { + $this->session = Container::get('session')->get(); + } + + if (is_array($name)) { + return $this->session = array_merge($this->session, $name); + } + + return $this->input($this->session, $name, $default, $filter); + } + + /** + * 获取cookie参数 + * @access public + * @param mixed $name 数据名称 + * @param string $default 默认值 + * @param string|array $filter 过滤方法 + * @return mixed + */ + public function cookie($name = '', $default = null, $filter = '') + { + $cookie = Container::get('cookie'); + + if (empty($this->cookie)) { + $this->cookie = $cookie->get(); + } + + if (is_array($name)) { + return $this->cookie = array_merge($this->cookie, $name); + } elseif (!empty($name)) { + $data = $cookie->has($name) ? $cookie->get($name) : $default; + } else { + $data = $this->cookie; + } + + // 解析过滤器 + $filter = $this->getFilter($filter, $default); + + if (is_array($data)) { + array_walk_recursive($data, [$this, 'filterValue'], $filter); + reset($data); + } else { + $this->filterValue($data, $name, $filter); + } + + return $data; + } + + /** + * 获取server参数 + * @access public + * @param mixed $name 数据名称 + * @param string $default 默认值 + * @param string|array $filter 过滤方法 + * @return mixed + */ + public function server($name = '', $default = null, $filter = '') + { + if (empty($this->server)) { + $this->server = $_SERVER; + } + + if (is_array($name)) { + return $this->server = array_merge($this->server, $name); + } + + return $this->input($this->server, false === $name ? false : strtoupper($name), $default, $filter); + } + + /** + * 获取上传的文件信息 + * @access public + * @param string|array $name 名称 + * @return null|array|\think\File + */ + public function file($name = '') + { + if (empty($this->file)) { + $this->file = isset($_FILES) ? $_FILES : []; + } + + if (is_array($name)) { + return $this->file = array_merge($this->file, $name); + } + + $files = $this->file; + if (!empty($files)) { + // 处理上传文件 + $array = $this->dealUploadFile($files); + + if (strpos($name, '.')) { + list($name, $sub) = explode('.', $name); + } + + if ('' === $name) { + // 获取全部文件 + return $array; + } elseif (isset($sub) && isset($array[$name][$sub])) { + return $array[$name][$sub]; + } elseif (isset($array[$name])) { + return $array[$name]; + } + } + + return; + } + + protected function dealUploadFile($files) + { + $array = []; + foreach ($files as $key => $file) { + if (is_array($file['name'])) { + $item = []; + $keys = array_keys($file); + $count = count($file['name']); + + for ($i = 0; $i < $count; $i++) { + if (empty($file['tmp_name'][$i]) || !is_file($file['tmp_name'][$i])) { + continue; + } + + $temp['key'] = $key; + + foreach ($keys as $_key) { + $temp[$_key] = $file[$_key][$i]; + } + + $item[] = (new File($temp['tmp_name']))->setUploadInfo($temp); + } + + $array[$key] = $item; + } else { + if ($file instanceof File) { + $array[$key] = $file; + } else { + if (empty($file['tmp_name']) || !is_file($file['tmp_name'])) { + continue; + } + + $array[$key] = (new File($file['tmp_name']))->setUploadInfo($file); + } + } + } + + return $array; + } + + /** + * 获取环境变量 + * @access public + * @param mixed $name 数据名称 + * @param string $default 默认值 + * @param string|array $filter 过滤方法 + * @return mixed + */ + public function env($name = '', $default = null, $filter = '') + { + if (empty($this->env)) { + $this->env = Container::get('env')->get(); + } + + if (is_array($name)) { + return $this->env = array_merge($this->env, $name); + } + + return $this->input($this->env, false === $name ? false : strtoupper($name), $default, $filter); + } + + /** + * 设置或者获取当前的Header + * @access public + * @param string|array $name header名称 + * @param string $default 默认值 + * @return string + */ + public function header($name = '', $default = null) + { + if (empty($this->header)) { + $header = []; + if (function_exists('apache_request_headers') && $result = apache_request_headers()) { + $header = $result; + } else { + $server = $this->server ?: $_SERVER; + foreach ($server as $key => $val) { + if (0 === strpos($key, 'HTTP_')) { + $key = str_replace('_', '-', strtolower(substr($key, 5))); + $header[$key] = $val; + } + } + if (isset($server['CONTENT_TYPE'])) { + $header['content-type'] = $server['CONTENT_TYPE']; + } + if (isset($server['CONTENT_LENGTH'])) { + $header['content-length'] = $server['CONTENT_LENGTH']; + } + } + $this->header = array_change_key_case($header); + } + + if (is_array($name)) { + return $this->header = array_merge($this->header, $name); + } + + if ('' === $name) { + return $this->header; + } + + $name = str_replace('_', '-', strtolower($name)); + + return isset($this->header[$name]) ? $this->header[$name] : $default; + } + + /** + * 获取变量 支持过滤和默认值 + * @access public + * @param array $data 数据源 + * @param string|false $name 字段名 + * @param mixed $default 默认值 + * @param string|array $filter 过滤函数 + * @return mixed + */ + public function input($data = [], $name = '', $default = null, $filter = '') + { + if (false === $name) { + // 获取原始数据 + return $data; + } + + $name = (string) $name; + if ('' != $name) { + // 解析name + if (strpos($name, '/')) { + list($name, $type) = explode('/', $name); + } else { + $type = 's'; + } + + // 按.拆分成多维数组进行判断 + foreach (explode('.', $name) as $val) { + if (isset($data[$val])) { + $data = $data[$val]; + } else { + // 无输入数据,返回默认值 + return $default; + } + } + + if (is_object($data)) { + return $data; + } + } + + // 解析过滤器 + $filter = $this->getFilter($filter, $default); + + if (is_array($data)) { + array_walk_recursive($data, [$this, 'filterValue'], $filter); + reset($data); + } else { + $this->filterValue($data, $name, $filter); + } + + if (isset($type) && $data !== $default) { + // 强制类型转换 + $this->typeCast($data, $type); + } + + return $data; + } + + /** + * 设置或获取当前的过滤规则 + * @access public + * @param mixed $filter 过滤规则 + * @return mixed + */ + public function filter($filter = null) + { + if (is_null($filter)) { + return $this->filter; + } + + $this->filter = $filter; + } + + protected function getFilter($filter, $default) + { + if (is_null($filter)) { + $filter = []; + } else { + $filter = $filter ?: $this->filter; + if (is_string($filter) && false === strpos($filter, '/')) { + $filter = explode(',', $filter); + } else { + $filter = (array) $filter; + } + } + + $filter[] = $default; + + return $filter; + } + + /** + * 递归过滤给定的值 + * @access public + * @param mixed $value 键值 + * @param mixed $key 键名 + * @param array $filters 过滤方法+默认值 + * @return mixed + */ + private function filterValue(&$value, $key, $filters) + { + $default = array_pop($filters); + + foreach ($filters as $filter) { + if (is_callable($filter)) { + // 调用函数或者方法过滤 + $value = call_user_func($filter, $value); + } elseif (is_scalar($value)) { + if (false !== strpos($filter, '/')) { + // 正则过滤 + if (!preg_match($filter, $value)) { + // 匹配不成功返回默认值 + $value = $default; + break; + } + } elseif (!empty($filter)) { + // filter函数不存在时, 则使用filter_var进行过滤 + // filter为非整形值时, 调用filter_id取得过滤id + $value = filter_var($value, is_int($filter) ? $filter : filter_id($filter)); + if (false === $value) { + $value = $default; + break; + } + } + } + } + + return $value; + } + + /** + * 强制类型转换 + * @access public + * @param string $data + * @param string $type + * @return mixed + */ + private function typeCast(&$data, $type) + { + switch (strtolower($type)) { + // 数组 + case 'a': + $data = (array) $data; + break; + // 数字 + case 'd': + $data = (int) $data; + break; + // 浮点 + case 'f': + $data = (float) $data; + break; + // 布尔 + case 'b': + $data = (boolean) $data; + break; + // 字符串 + case 's': + default: + if (is_scalar($data)) { + $data = (string) $data; + } else { + throw new \InvalidArgumentException('variable type error:' . gettype($data)); + } + } + } + + /** + * 是否存在某个请求参数 + * @access public + * @param string $name 变量名 + * @param string $type 变量类型 + * @param bool $checkEmpty 是否检测空值 + * @return mixed + */ + public function has($name, $type = 'param', $checkEmpty = false) + { + if (empty($this->$type)) { + $param = $this->$type(); + } else { + $param = $this->$type; + } + + // 按.拆分成多维数组进行判断 + foreach (explode('.', $name) as $val) { + if (isset($param[$val])) { + $param = $param[$val]; + } else { + return false; + } + } + + return ($checkEmpty && '' === $param) ? false : true; + } + + /** + * 获取指定的参数 + * @access public + * @param string|array $name 变量名 + * @param string $type 变量类型 + * @return mixed + */ + public function only($name, $type = 'param') + { + $param = $this->$type(); + + if (is_string($name)) { + $name = explode(',', $name); + } + + $item = []; + foreach ($name as $key => $val) { + + if (is_int($key)) { + $default = null; + $key = $val; + } else { + $default = $val; + } + + if (isset($param[$key])) { + $item[$key] = $param[$key]; + } elseif (isset($default)) { + $item[$key] = $default; + } + } + + return $item; + } + + /** + * 排除指定参数获取 + * @access public + * @param string|array $name 变量名 + * @param string $type 变量类型 + * @return mixed + */ + public function except($name, $type = 'param') + { + $param = $this->$type(); + if (is_string($name)) { + $name = explode(',', $name); + } + + foreach ($name as $key) { + if (isset($param[$key])) { + unset($param[$key]); + } + } + + return $param; + } + + /** + * 当前是否ssl + * @access public + * @return bool + */ + public function isSsl() + { + $server = array_merge($_SERVER, $this->server); + + if (isset($server['HTTPS']) && ('1' == $server['HTTPS'] || 'on' == strtolower($server['HTTPS']))) { + return true; + } elseif (isset($server['REQUEST_SCHEME']) && 'https' == $server['REQUEST_SCHEME']) { + return true; + } elseif (isset($server['SERVER_PORT']) && ('443' == $server['SERVER_PORT'])) { + return true; + } elseif (isset($server['HTTP_X_FORWARDED_PROTO']) && 'https' == $server['HTTP_X_FORWARDED_PROTO']) { + return true; + } elseif ($this->config->get('https_agent_name') && isset($server[$this->config->get('https_agent_name')])) { + return true; + } + + return false; + } + + /** + * 当前是否Ajax请求 + * @access public + * @param bool $ajax true 获取原始ajax请求 + * @return bool + */ + public function isAjax($ajax = false) + { + $value = $this->server('HTTP_X_REQUESTED_WITH', '', 'strtolower'); + $result = ('xmlhttprequest' == $value) ? true : false; + + if (true === $ajax) { + return $result; + } + + return $this->param($this->config->get('var_ajax')) ? true : $result; + } + + /** + * 当前是否Pjax请求 + * @access public + * @param bool $pjax true 获取原始pjax请求 + * @return bool + */ + public function isPjax($pjax = false) + { + $result = !is_null($this->server('HTTP_X_PJAX')) ? true : false; + + if (true === $pjax) { + return $result; + } + + return $this->param($this->config->get('var_pjax')) ? true : $result; + } + + /** + * 获取客户端IP地址 + * @access public + * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字 + * @param boolean $adv 是否进行高级模式获取(有可能被伪装) + * @return mixed + */ + public function ip($type = 0, $adv = true) + { + $type = $type ? 1 : 0; + static $ip = null; + + if (null !== $ip) { + return $ip[$type]; + } + + $httpAgentIp = $this->config->get('http_agent_ip'); + + if ($httpAgentIp && isset($_SERVER[$httpAgentIp])) { + $ip = $_SERVER[$httpAgentIp]; + } elseif ($adv) { + if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { + $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); + $pos = array_search('unknown', $arr); + if (false !== $pos) { + unset($arr[$pos]); + } + $ip = trim(current($arr)); + } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) { + $ip = $_SERVER['HTTP_CLIENT_IP']; + } elseif (isset($_SERVER['REMOTE_ADDR'])) { + $ip = $_SERVER['REMOTE_ADDR']; + } + } elseif (isset($_SERVER['REMOTE_ADDR'])) { + $ip = $_SERVER['REMOTE_ADDR']; + } + + // IP地址类型 + $ip_mode = (strpos($ip, ':') === false) ? 'ipv4' : 'ipv6'; + + // IP地址合法验证 + if (filter_var($ip, FILTER_VALIDATE_IP) !== $ip) { + $ip = ($ip_mode === 'ipv4') ? '0.0.0.0' : '::'; + } + + // 如果是ipv4地址,则直接使用ip2long返回int类型ip;如果是ipv6地址,暂时不支持,直接返回0 + $long_ip = ($ip_mode === 'ipv4') ? sprintf("%u", ip2long($ip)) : 0; + + $ip = [$ip, $long_ip]; + + return $ip[$type]; + } + + /** + * 检测是否使用手机访问 + * @access public + * @return bool + */ + public function isMobile() + { + if (isset($_SERVER['HTTP_VIA']) && stristr($_SERVER['HTTP_VIA'], "wap")) { + return true; + } elseif (isset($_SERVER['HTTP_ACCEPT']) && strpos(strtoupper($_SERVER['HTTP_ACCEPT']), "VND.WAP.WML")) { + return true; + } elseif (isset($_SERVER['HTTP_X_WAP_PROFILE']) || isset($_SERVER['HTTP_PROFILE'])) { + return true; + } elseif (isset($_SERVER['HTTP_USER_AGENT']) && preg_match('/(blackberry|configuration\/cldc|hp |hp-|htc |htc_|htc-|iemobile|kindle|midp|mmp|motorola|mobile|nokia|opera mini|opera |Googlebot-Mobile|YahooSeeker\/M1A1-R2D2|android|iphone|ipod|mobi|palm|palmos|pocket|portalmmm|ppc;|smartphone|sonyericsson|sqh|spv|symbian|treo|up.browser|up.link|vodafone|windows ce|xda |xda_)/i', $_SERVER['HTTP_USER_AGENT'])) { + return true; + } + + return false; + } + + /** + * 当前URL地址中的scheme参数 + * @access public + * @return string + */ + public function scheme() + { + return $this->isSsl() ? 'https' : 'http'; + } + + /** + * 当前请求URL地址中的query参数 + * @access public + * @return string + */ + public function query() + { + return $this->server('QUERY_STRING'); + } + + /** + * 当前请求的host + * @access public + * @return string + */ + public function host() + { + if (isset($_SERVER['HTTP_X_REAL_HOST'])) { + return $_SERVER['HTTP_X_REAL_HOST']; + } + + return $this->server('HTTP_HOST'); + } + + /** + * 当前请求URL地址中的port参数 + * @access public + * @return integer + */ + public function port() + { + return $this->server('SERVER_PORT'); + } + + /** + * 当前请求 SERVER_PROTOCOL + * @access public + * @return integer + */ + public function protocol() + { + return $this->server('SERVER_PROTOCOL'); + } + + /** + * 当前请求 REMOTE_PORT + * @access public + * @return integer + */ + public function remotePort() + { + return $this->server('REMOTE_PORT'); + } + + /** + * 当前请求 HTTP_CONTENT_TYPE + * @access public + * @return string + */ + public function contentType() + { + $contentType = $this->server('CONTENT_TYPE'); + + if ($contentType) { + if (strpos($contentType, ';')) { + list($type) = explode(';', $contentType); + } else { + $type = $contentType; + } + return trim($type); + } + + return ''; + } + + /** + * 获取当前请求的路由信息 + * @access public + * @param array $route 路由名称 + * @return array + */ + public function routeInfo($route = []) + { + if (!empty($route)) { + $this->routeInfo = $route; + } + + return $this->routeInfo; + } + + /** + * 设置或者获取当前请求的调度信息 + * @access public + * @param array $dispatch 调度信息 + * @return array + */ + public function dispatch($dispatch = null) + { + if (!is_null($dispatch)) { + $this->dispatch = $dispatch; + } + + return $this->dispatch; + } + + /** + * 获取当前请求的安全Key + * @access public + * @return string + */ + public function secureKey() + { + if (is_null($this->secureKey)) { + $this->secureKey = uniqid('', true); + } + + return $this->secureKey; + } + + /** + * 设置或者获取当前的模块名 + * @access public + * @param string $module 模块名 + * @return string|Request + */ + public function module($module = null) + { + if (!is_null($module)) { + $this->module = $module; + return $this; + } + + return $this->module ?: ''; + } + + /** + * 设置或者获取当前的控制器名 + * @access public + * @param string $controller 控制器名 + * @return string|Request + */ + public function controller($controller = null) + { + if (!is_null($controller)) { + $this->controller = $controller; + return $this; + } + + return $this->controller ?: ''; + } + + /** + * 设置或者获取当前的操作名 + * @access public + * @param string $action 操作名 + * @return string|Request + */ + public function action($action = null) + { + if (!is_null($action) && !is_bool($action)) { + $this->action = $action; + return $this; + } + + $name = $this->action ?: ''; + return true === $action ? $name : strtolower($name); + } + + /** + * 设置或者获取当前的语言 + * @access public + * @param string $lang 语言名 + * @return string|Request + */ + public function langset($lang = null) + { + if (!is_null($lang)) { + $this->langset = $lang; + return $this; + } + + return $this->langset ?: ''; + } + + /** + * 设置或者获取当前请求的content + * @access public + * @return string + */ + public function getContent() + { + if (is_null($this->content)) { + $this->content = $this->input; + } + + return $this->content; + } + + /** + * 获取当前请求的php://input + * @access public + * @return string + */ + public function getInput() + { + return $this->input; + } + + /** + * 生成请求令牌 + * @access public + * @param string $name 令牌名称 + * @param mixed $type 令牌生成方法 + * @return string + */ + public function token($name = '__token__', $type = 'md5') + { + $type = is_callable($type) ? $type : 'md5'; + $token = call_user_func($type, $_SERVER['REQUEST_TIME_FLOAT']); + + if ($this->isAjax()) { + header($name . ': ' . $token); + } + + Container::get('session')->set($name, $token); + + return $token; + } + + /** + * 设置当前地址的请求缓存 + * @access public + * @param string $key 缓存标识,支持变量规则 ,例如 item/:name/:id + * @param mixed $expire 缓存有效期 + * @param array $except 缓存排除 + * @param string $tag 缓存标签 + * @return void + */ + public function cache($key, $expire = null, $except = [], $tag = null) + { + if (!is_array($except)) { + $tag = $except; + $except = []; + } + + if (false === $key || !$this->isGet() || $this->isCheckCache || false === $expire) { + // 关闭当前缓存 + return; + } + + // 标记请求缓存检查 + $this->isCheckCache = true; + + foreach ($except as $rule) { + if (0 === stripos($this->url(), $rule)) { + return; + } + } + + if ($key instanceof \Closure) { + $key = call_user_func_array($key, [$this]); + } elseif (true === $key) { + // 自动缓存功能 + $key = '__URL__'; + } elseif (strpos($key, '|')) { + list($key, $fun) = explode('|', $key); + } + + // 特殊规则替换 + if (false !== strpos($key, '__')) { + $key = str_replace(['__MODULE__', '__CONTROLLER__', '__ACTION__', '__URL__'], [$this->module, $this->controller, $this->action, md5($this->url(true))], $key); + } + + if (false !== strpos($key, ':')) { + $param = $this->param(); + foreach ($param as $item => $val) { + if (is_string($val) && false !== strpos($key, ':' . $item)) { + $key = str_replace(':' . $item, $val, $key); + } + } + } elseif (strpos($key, ']')) { + if ('[' . $this->ext() . ']' == $key) { + // 缓存某个后缀的请求 + $key = md5($this->url()); + } else { + return; + } + } + + if (isset($fun)) { + $key = $fun($key); + } + $cache = Container::get('cache'); + + if (strtotime($this->server('HTTP_IF_MODIFIED_SINCE')) + $expire > $_SERVER['REQUEST_TIME']) { + // 读取缓存 + $response = Response::create()->code(304); + throw new HttpResponseException($response); + } elseif ($cache->has($key)) { + list($content, $header) = $cache->get($key); + + $response = Response::create($content)->header($header); + throw new HttpResponseException($response); + } + + $this->cache = [$key, $expire, $tag]; + } + + /** + * 读取请求缓存设置 + * @access public + * @return array + */ + public function getCache() + { + return $this->cache; + } + + /** + * 获取请求数据的值 + * @access public + * @param string $name 名称 + * @return mixed + */ + public function __get($name) + { + return $this->param($name); + } + +} diff --git a/thinkphp/library/think/Response.php b/thinkphp/library/think/Response.php new file mode 100644 index 000000000..de8feaac9 --- /dev/null +++ b/thinkphp/library/think/Response.php @@ -0,0 +1,401 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +use think\response\Redirect as RedirectResponse; + +class Response +{ + /** + * 原始数据 + * @var mixed + */ + protected $data; + + /** + * 当前contentType + * @var string + */ + protected $contentType = 'text/html'; + + /** + * 字符集 + * @var string + */ + protected $charset = 'utf-8'; + + /** + * 状态码 + * @var integer + */ + protected $code = 200; + + /** + * 是否允许请求缓存 + * @var bool + */ + protected $allowCache = true; + + /** + * 输出参数 + * @var array + */ + protected $options = []; + + /** + * header参数 + * @var array + */ + protected $header = []; + + /** + * 输出内容 + * @var string + */ + protected $content = null; + + /** + * 架构函数 + * @access public + * @param mixed $data 输出数据 + * @param int $code + * @param array $header + * @param array $options 输出参数 + */ + public function __construct($data = '', $code = 200, array $header = [], $options = []) + { + $this->data($data); + + if (!empty($options)) { + $this->options = array_merge($this->options, $options); + } + + $this->contentType($this->contentType, $this->charset); + + $this->code = $code; + $this->header = array_merge($this->header, $header); + } + + /** + * 创建Response对象 + * @access public + * @param mixed $data 输出数据 + * @param string $type 输出类型 + * @param int $code + * @param array $header + * @param array $options 输出参数 + * @return Response + */ + public static function create($data = '', $type = '', $code = 200, array $header = [], $options = []) + { + $class = false !== strpos($type, '\\') ? $type : '\\think\\response\\' . ucfirst(strtolower($type)); + + if (class_exists($class)) { + return new $class($data, $code, $header, $options); + } + + return new static($data, $code, $header, $options); + } + + /** + * 发送数据到客户端 + * @access public + * @return void + * @throws \InvalidArgumentException + */ + public function send() + { + // 监听response_send + Container::get('hook')->listen('response_send', $this); + + // 处理输出数据 + $data = $this->getContent(); + + // Trace调试注入 + if ('cli' != PHP_SAPI && Container::get('env')->get('app_trace', Container::get('app')->config('app.app_trace'))) { + Container::get('debug')->inject($this, $data); + } + + if (200 == $this->code && $this->allowCache) { + $cache = Container::get('request')->getCache(); + if ($cache) { + $this->header['Cache-Control'] = 'max-age=' . $cache[1] . ',must-revalidate'; + $this->header['Last-Modified'] = gmdate('D, d M Y H:i:s') . ' GMT'; + $this->header['Expires'] = gmdate('D, d M Y H:i:s', $_SERVER['REQUEST_TIME'] + $cache[1]) . ' GMT'; + + Container::get('cache')->tag($cache[2])->set($cache[0], [$data, $this->header], $cache[1]); + } + } + + if (!headers_sent() && !empty($this->header)) { + // 发送状态码 + http_response_code($this->code); + // 发送头部信息 + foreach ($this->header as $name => $val) { + header($name . (!is_null($val) ? ':' . $val : '')); + } + } + + $this->sendData($data); + + if (function_exists('fastcgi_finish_request')) { + // 提高页面响应 + fastcgi_finish_request(); + } + + // 监听response_end + Container::get('hook')->listen('response_end', $this); + + // 清空当次请求有效的数据 + if (!($this instanceof RedirectResponse)) { + Container::get('session')->flush(); + } + } + + /** + * 处理数据 + * @access protected + * @param mixed $data 要处理的数据 + * @return mixed + */ + protected function output($data) + { + return $data; + } + + /** + * 输出数据 + * @access protected + * @param string $data 要处理的数据 + * @return void + */ + protected function sendData($data) + { + echo $data; + } + + /** + * 输出的参数 + * @access public + * @param mixed $options 输出参数 + * @return $this + */ + public function options($options = []) + { + $this->options = array_merge($this->options, $options); + + return $this; + } + + /** + * 输出数据设置 + * @access public + * @param mixed $data 输出数据 + * @return $this + */ + public function data($data) + { + $this->data = $data; + + return $this; + } + + /** + * 是否允许请求缓存 + * @access public + * @param bool $cache 允许请求缓存 + * @return $this + */ + public function allowCache($cache) + { + $this->allowCache = $cache; + + return $this; + } + + /** + * 设置响应头 + * @access public + * @param string|array $name 参数名 + * @param string $value 参数值 + * @return $this + */ + public function header($name, $value = null) + { + if (is_array($name)) { + $this->header = array_merge($this->header, $name); + } else { + $this->header[$name] = $value; + } + + return $this; + } + + /** + * 设置页面输出内容 + * @access public + * @param mixed $content + * @return $this + */ + public function content($content) + { + if (null !== $content && !is_string($content) && !is_numeric($content) && !is_callable([ + $content, + '__toString', + ]) + ) { + throw new \InvalidArgumentException(sprintf('variable type error: %s', gettype($content))); + } + + $this->content = (string) $content; + + return $this; + } + + /** + * 发送HTTP状态 + * @access public + * @param integer $code 状态码 + * @return $this + */ + public function code($code) + { + $this->code = $code; + + return $this; + } + + /** + * LastModified + * @access public + * @param string $time + * @return $this + */ + public function lastModified($time) + { + $this->header['Last-Modified'] = $time; + + return $this; + } + + /** + * Expires + * @access public + * @param string $time + * @return $this + */ + public function expires($time) + { + $this->header['Expires'] = $time; + + return $this; + } + + /** + * ETag + * @access public + * @param string $eTag + * @return $this + */ + public function eTag($eTag) + { + $this->header['ETag'] = $eTag; + + return $this; + } + + /** + * 页面缓存控制 + * @access public + * @param string $cache 状态码 + * @return $this + */ + public function cacheControl($cache) + { + $this->header['Cache-control'] = $cache; + + return $this; + } + + /** + * 页面输出类型 + * @access public + * @param string $contentType 输出类型 + * @param string $charset 输出编码 + * @return $this + */ + public function contentType($contentType, $charset = 'utf-8') + { + $this->header['Content-Type'] = $contentType . '; charset=' . $charset; + + return $this; + } + + /** + * 获取头部信息 + * @access public + * @param string $name 头部名称 + * @return mixed + */ + public function getHeader($name = '') + { + if (!empty($name)) { + return isset($this->header[$name]) ? $this->header[$name] : null; + } + + return $this->header; + } + + /** + * 获取原始数据 + * @access public + * @return mixed + */ + public function getData() + { + return $this->data; + } + + /** + * 获取输出数据 + * @access public + * @return mixed + */ + public function getContent() + { + if (null == $this->content) { + $content = $this->output($this->data); + + if (null !== $content && !is_string($content) && !is_numeric($content) && !is_callable([ + $content, + '__toString', + ]) + ) { + throw new \InvalidArgumentException(sprintf('variable type error: %s', gettype($content))); + } + + $this->content = (string) $content; + } + + return $this->content; + } + + /** + * 获取状态码 + * @access public + * @return integer + */ + public function getCode() + { + return $this->code; + } +} diff --git a/thinkphp/library/think/Route.php b/thinkphp/library/think/Route.php new file mode 100644 index 000000000..645fb9e1d --- /dev/null +++ b/thinkphp/library/think/Route.php @@ -0,0 +1,858 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +use think\exception\RouteNotFoundException; +use think\route\AliasRule; +use think\route\dispatch\Url as UrlDispatch; +use think\route\Domain; +use think\route\Resource; +use think\route\RuleGroup; +use think\route\RuleItem; + +class Route +{ + /** + * REST定义 + * @var array + */ + protected $rest = [ + 'index' => ['get', '', 'index'], + 'create' => ['get', '/create', 'create'], + 'edit' => ['get', '/:id/edit', 'edit'], + 'read' => ['get', '/:id', 'read'], + 'save' => ['post', '', 'save'], + 'update' => ['put', '/:id', 'update'], + 'delete' => ['delete', '/:id', 'delete'], + ]; + + /** + * 请求方法前缀定义 + * @var array + */ + protected $methodPrefix = [ + 'get' => 'get', + 'post' => 'post', + 'put' => 'put', + 'delete' => 'delete', + 'patch' => 'patch', + ]; + + /** + * 配置对象 + * @var Config + */ + protected $config; + + /** + * 请求对象 + * @var Request + */ + protected $request; + + /** + * 当前HOST + * @var string + */ + protected $host; + + /** + * 当前域名 + * @var string + */ + protected $domain; + + /** + * 当前分组对象 + * @var RuleGroup + */ + protected $group; + + /** + * 路由绑定 + * @var array + */ + protected $bind = []; + + /** + * 域名对象 + * @var array + */ + protected $domains = []; + + /** + * 跨域路由规则 + * @var RuleGroup + */ + protected $cross; + + /** + * 路由别名 + * @var array + */ + protected $alias = []; + + /** + * 路由是否延迟解析 + * @var bool + */ + protected $lazy = true; + + /** + * (分组)路由规则是否合并解析 + * @var bool + */ + protected $mergeRuleRegex = true; + + /** + * 路由解析自动搜索多级控制器 + * @var bool + */ + protected $autoSearchController = true; + + public function __construct(Request $request) + { + $this->request = $request; + $this->host = $this->request->host(); + + $this->setDefaultDomain(); + } + + /** + * 设置路由域名及分组(包括资源路由)是否延迟解析 + * @access public + * @param bool $lazy 路由是否延迟解析 + * @return $this + */ + public function lazy($lazy = true) + { + $this->lazy = $lazy; + return $this; + } + + /** + * 设置路由域名及分组(包括资源路由)是否合并解析 + * @access public + * @param bool $merge 路由是否合并解析 + * @return $this + */ + public function mergeRuleRegex($merge = true) + { + $this->mergeRuleRegex = $merge; + $this->group->mergeRuleRegex($merge); + + return $this; + } + + /** + * 设置路由自动解析是否搜索多级控制器 + * @access public + * @param bool $auto 是否自动搜索多级控制器 + * @return $this + */ + public function autoSearchController($auto = true) + { + $this->autoSearchController = $auto; + return $this; + } + + /** + * 初始化默认域名 + * @access protected + * @return void + */ + protected function setDefaultDomain() + { + // 默认域名 + $this->domain = $this->host; + + // 注册默认域名 + $domain = new Domain($this, $this->host); + + $this->domains[$this->host] = $domain; + + // 默认分组 + $this->group = $domain; + } + + /** + * 设置当前域名 + * @access public + * @param RuleGroup $group 域名 + * @return void + */ + public function setGroup(RuleGroup $group) + { + $this->group = $group; + } + + /** + * 获取当前分组 + * @access public + * @return RuleGroup + */ + public function getGroup() + { + return $this->group; + } + + /** + * 注册变量规则 + * @access public + * @param string|array $name 变量名 + * @param string $rule 变量规则 + * @return $this + */ + public function pattern($name, $rule = '') + { + $this->group->pattern($name, $rule); + + return $this; + } + + /** + * 注册路由参数 + * @access public + * @param string|array $name 参数名 + * @param mixed $value 值 + * @return $this + */ + public function option($name, $value = '') + { + $this->group->option($name, $value); + + return $this; + } + + /** + * 注册域名路由 + * @access public + * @param string|array $name 子域名 + * @param mixed $rule 路由规则 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + * @return Domain + */ + public function domain($name, $rule = '', $option = [], $pattern = []) + { + // 支持多个域名使用相同路由规则 + $domainName = is_array($name) ? array_shift($name) : $name; + + if ('*' != $domainName && !strpos($domainName, '.')) { + $domainName .= '.' . $this->request->rootDomain(); + } + + if (!isset($this->domains[$domainName])) { + $domain = (new Domain($this, $domainName, $rule, $option, $pattern)) + ->lazy($this->lazy) + ->mergeRuleRegex($this->mergeRuleRegex); + + $this->domains[$domainName] = $domain; + } else { + $domain = $this->domains[$domainName]; + $domain->parseGroupRule($rule); + } + + if (is_array($name) && !empty($name)) { + $root = $this->request->rootDomain(); + foreach ($name as $item) { + if (!strpos($item, '.')) { + $item .= '.' . $root; + } + + $this->domains[$item] = $domainName; + } + } + + // 返回域名对象 + return $domain; + } + + /** + * 获取域名 + * @access public + * @return array + */ + public function getDomains() + { + return $this->domains; + } + + /** + * 设置路由绑定 + * @access public + * @param string $bind 绑定信息 + * @param string $domain 域名 + * @return $this + */ + public function bind($bind, $domain = null) + { + $domain = is_null($domain) ? $this->domain : $domain; + + $this->bind[$domain] = $bind; + + return $this; + } + + /** + * 读取路由绑定 + * @access public + * @param string $domain 域名 + * @return string|null + */ + public function getBind($domain = null) + { + if (is_null($domain)) { + $domain = $this->domain; + } elseif (!strpos($domain, '.')) { + $domain .= '.' . $this->request->rootDomain(); + } + + $subDomain = $this->request->subDomain(); + + if (strpos($subDomain, '.')) { + $name = '*' . strstr($subDomain, '.'); + } + + if (isset($this->bind[$domain])) { + $result = $this->bind[$domain]; + } elseif (isset($name) && isset($this->bind[$name])) { + $result = $this->bind[$name]; + } elseif (isset($this->bind['*'])) { + $result = $this->bind['*']; + } else { + $result = null; + } + + return $result; + } + + /** + * 读取路由标识 + * @access public + * @param string $name 路由标识 + * @return mixed + */ + public function getName($name = null) + { + return Container::get('rule_name')->get($name); + } + + /** + * 批量导入路由标识 + * @access public + * @param array $name 路由标识 + * @return $this + */ + public function setName($name) + { + Container::get('rule_name')->import($name); + return $this; + } + + /** + * 导入配置文件的路由规则 + * @access public + * @param array $rules 路由规则 + * @param string $type 请求类型 + * @return void + */ + public function import(array $rules, $type = '*') + { + // 检查域名部署 + if (isset($rules['__domain__'])) { + foreach ($rules['__domain__'] as $key => $rule) { + $this->domain($key, $rule); + } + unset($rules['__domain__']); + } + + // 检查变量规则 + if (isset($rules['__pattern__'])) { + $this->pattern($rules['__pattern__']); + unset($rules['__pattern__']); + } + + // 检查路由别名 + if (isset($rules['__alias__'])) { + $this->alias($rules['__alias__']); + unset($rules['__alias__']); + } + + // 检查资源路由 + if (isset($rules['__rest__'])) { + foreach ($rules['__rest__'] as $key => $rule) { + $this->resource($key, $rule); + } + unset($rules['__rest__']); + } + + // 检查路由规则(包含分组) + foreach ($rules as $key => $val) { + if (is_numeric($key)) { + $key = array_shift($val); + } + + if (empty($val)) { + continue; + } + + if (is_string($key) && 0 === strpos($key, '[')) { + $key = substr($key, 1, -1); + $this->group($key, $val); + } elseif (is_array($val)) { + $this->rule($key, $val[0], $type, $val[1], isset($val[2]) ? $val[2] : []); + } else { + $this->rule($key, $val, $type); + } + } + } + + /** + * 注册路由规则 + * @access public + * @param string $rule 路由规则 + * @param mixed $route 路由地址 + * @param string $method 请求类型 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + * @return RuleItem + */ + public function rule($rule, $route, $method = '*', array $option = [], array $pattern = []) + { + return $this->group->addRule($rule, $route, $method, $option, $pattern); + } + + /** + * 设置跨域有效路由规则 + * @access public + * @param Rule $rule 路由规则 + * @param string $method 请求类型 + * @return $this + */ + public function setCrossDomainRule($rule, $method = '*') + { + if (!isset($this->cross)) { + $this->cross = (new RuleGroup($this))->mergeRuleRegex($this->mergeRuleRegex); + } + + $this->cross->addRuleItem($rule, $method); + + return $this; + } + + /** + * 批量注册路由规则 + * @access public + * @param array $rules 路由规则 + * @param string $method 请求类型 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + * @return void + */ + public function rules($rules, $method = '*', array $option = [], array $pattern = []) + { + $this->group->addRules($rules, $method, $option, $pattern); + } + + /** + * 注册路由分组 + * @access public + * @param string|array $name 分组名称或者参数 + * @param array|\Closure $route 分组路由 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + * @return RuleGroup + */ + public function group($name, $route, array $option = [], array $pattern = []) + { + if (is_array($name)) { + $option = $name; + $name = isset($option['name']) ? $option['name'] : ''; + } + + return (new RuleGroup($this, $this->group, $name, $route, $option, $pattern)) + ->lazy($this->lazy) + ->mergeRuleRegex($this->mergeRuleRegex); + } + + /** + * 注册路由 + * @access public + * @param string $rule 路由规则 + * @param mixed $route 路由地址 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + * @return RuleItem + */ + public function any($rule, $route = '', array $option = [], array $pattern = []) + { + return $this->rule($rule, $route, '*', $option, $pattern); + } + + /** + * 注册GET路由 + * @access public + * @param string $rule 路由规则 + * @param mixed $route 路由地址 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + * @return RuleItem + */ + public function get($rule, $route = '', array $option = [], array $pattern = []) + { + return $this->rule($rule, $route, 'GET', $option, $pattern); + } + + /** + * 注册POST路由 + * @access public + * @param string $rule 路由规则 + * @param mixed $route 路由地址 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + * @return RuleItem + */ + public function post($rule, $route = '', array $option = [], array $pattern = []) + { + return $this->rule($rule, $route, 'POST', $option, $pattern); + } + + /** + * 注册PUT路由 + * @access public + * @param string $rule 路由规则 + * @param mixed $route 路由地址 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + * @return RuleItem + */ + public function put($rule, $route = '', array $option = [], array $pattern = []) + { + return $this->rule($rule, $route, 'PUT', $option, $pattern); + } + + /** + * 注册DELETE路由 + * @access public + * @param string $rule 路由规则 + * @param mixed $route 路由地址 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + * @return RuleItem + */ + public function delete($rule, $route = '', array $option = [], array $pattern = []) + { + return $this->rule($rule, $route, 'DELETE', $option, $pattern); + } + + /** + * 注册PATCH路由 + * @access public + * @param string $rule 路由规则 + * @param mixed $route 路由地址 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + * @return RuleItem + */ + public function patch($rule, $route = '', array $option = [], array $pattern = []) + { + return $this->rule($rule, $route, 'PATCH', $option, $pattern); + } + + /** + * 注册资源路由 + * @access public + * @param string $rule 路由规则 + * @param string $route 路由地址 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + * @return Resource + */ + public function resource($rule, $route = '', array $option = [], array $pattern = []) + { + return (new Resource($this, $this->group, $rule, $route, $option, $pattern, $this->rest)) + ->lazy($this->lazy); + } + + /** + * 注册控制器路由 操作方法对应不同的请求前缀 + * @access public + * @param string $rule 路由规则 + * @param string $route 路由地址 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + * @return RuleGroup + */ + public function controller($rule, $route = '', array $option = [], array $pattern = []) + { + $group = new RuleGroup($this, $this->group, $rule, null, $option, $pattern); + + foreach ($this->methodPrefix as $type => $val) { + $group->addRule('', $val . '', $type); + } + + return $group->prefix($route . '/'); + } + + /** + * 注册视图路由 + * @access public + * @param string|array $rule 路由规则 + * @param string $template 路由模板地址 + * @param array $vars 模板变量 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + * @return RuleItem + */ + public function view($rule, $template = '', array $vars = [], array $option = [], array $pattern = []) + { + return $this->rule($rule, $template, 'GET', $option, $pattern)->view($vars); + } + + /** + * 注册重定向路由 + * @access public + * @param string|array $rule 路由规则 + * @param string $route 路由地址 + * @param array $status 状态码 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + * @return RuleItem + */ + public function redirect($rule, $route = '', $status = 301, array $option = [], array $pattern = []) + { + return $this->rule($rule, $route, '*', $option, $pattern)->redirect()->status($status); + } + + /** + * 注册别名路由 + * @access public + * @param string $rule 路由别名 + * @param string $route 路由地址 + * @param array $option 路由参数 + * @return AliasRule + */ + public function alias($rule, $route, array $option = []) + { + $aliasRule = new AliasRule($this, $this->group, $rule, $route, $option); + + $this->alias[$rule] = $aliasRule; + + return $aliasRule; + } + + /** + * 获取别名路由定义 + * @access public + * @param string $name 路由别名 + * @return string|array|null + */ + public function getAlias($name = null) + { + if (is_null($name)) { + return $this->alias; + } + + return isset($this->alias[$name]) ? $this->alias[$name] : null; + } + + /** + * 设置不同请求类型下面的方法前缀 + * @access public + * @param string|array $method 请求类型 + * @param string $prefix 类型前缀 + * @return $this + */ + public function setMethodPrefix($method, $prefix = '') + { + if (is_array($method)) { + $this->methodPrefix = array_merge($this->methodPrefix, array_change_key_case($method)); + } else { + $this->methodPrefix[strtolower($method)] = $prefix; + } + + return $this; + } + + /** + * 获取请求类型的方法前缀 + * @access public + * @param string $method 请求类型 + * @param string $prefix 类型前缀 + * @return string|null + */ + public function getMethodPrefix($method) + { + $method = strtolower($method); + + return isset($this->methodPrefix[$method]) ? $this->methodPrefix[$method] : null; + } + + /** + * rest方法定义和修改 + * @access public + * @param string $name 方法名称 + * @param array|bool $resource 资源 + * @return $this + */ + public function rest($name, $resource = []) + { + if (is_array($name)) { + $this->rest = $resource ? $name : array_merge($this->rest, $name); + } else { + $this->rest[$name] = $resource; + } + + return $this; + } + + /** + * 获取rest方法定义的参数 + * @access public + * @param string $name 方法名称 + * @return array|null + */ + public function getRest($name = null) + { + if (is_null($name)) { + return $this->rest; + } + + return isset($this->rest[$name]) ? $this->rest[$name] : null; + } + + /** + * 注册未匹配路由规则后的处理 + * @access public + * @param string $route 路由地址 + * @param string $method 请求类型 + * @param array $option 路由参数 + * @return RuleItem + */ + public function miss($route, $method = '*', array $option = []) + { + return $this->group->addMissRule($route, $method, $option); + } + + /** + * 注册一个自动解析的URL路由 + * @access public + * @param string $route 路由地址 + * @return RuleItem + */ + public function auto($route) + { + return $this->group->addAutoRule($route); + } + + /** + * 检测URL路由 + * @access public + * @param string $url URL地址 + * @param string $depr URL分隔符 + * @param bool $must 是否强制路由 + * @param bool $completeMatch 路由是否完全匹配 + * @return Dispatch + * @throws RouteNotFoundException + */ + public function check($url, $depr = '/', $must = false, $completeMatch = false) + { + // 自动检测域名路由 + $domain = $this->checkDomain(); + $url = str_replace($depr, '|', $url); + + $result = $domain->check($this->request, $url, $depr, $completeMatch); + + if (false === $result && !empty($this->cross)) { + // 检测跨域路由 + $result = $this->cross->check($this->request, $url, $depr, $completeMatch); + } + + if (false !== $result) { + // 路由匹配 + return $result; + } elseif ($must) { + // 强制路由不匹配则抛出异常 + throw new RouteNotFoundException(); + } + + // 默认路由解析 + return new UrlDispatch($url, ['depr' => $depr, 'auto_search' => $this->autoSearchController]); + } + + /** + * 检测域名的路由规则 + * @access protected + * @return Domain + */ + protected function checkDomain() + { + // 获取当前子域名 + $subDomain = $this->request->subDomain(); + + $item = false; + + if ($subDomain && count($this->domains) > 1) { + $domain = explode('.', $subDomain); + $domain2 = array_pop($domain); + + if ($domain) { + // 存在三级域名 + $domain3 = array_pop($domain); + } + + if ($subDomain && isset($this->domains[$subDomain])) { + // 子域名配置 + $item = $this->domains[$subDomain]; + } elseif (isset($this->domains['*.' . $domain2]) && !empty($domain3)) { + // 泛三级域名 + $item = $this->domains['*.' . $domain2]; + $panDomain = $domain3; + } elseif (isset($this->domains['*']) && !empty($domain2)) { + // 泛二级域名 + if ('www' != $domain2) { + $item = $this->domains['*']; + $panDomain = $domain2; + } + } + + if (isset($panDomain)) { + // 保存当前泛域名 + $this->request->panDomain($panDomain); + } + } + + if (false === $item) { + // 检测当前完整域名 + $item = $this->domains[$this->host]; + } + + if (is_string($item)) { + $item = $this->domains[$item]; + } + + return $item; + } + + /** + * 设置全局的路由分组参数 + * @access public + * @param string $method 方法名 + * @param array $args 调用参数 + * @return RuleGroup + */ + public function __call($method, $args) + { + return call_user_func_array([$this->group, $method], $args); + } +} diff --git a/thinkphp/library/think/Session.php b/thinkphp/library/think/Session.php new file mode 100644 index 000000000..f52bbc623 --- /dev/null +++ b/thinkphp/library/think/Session.php @@ -0,0 +1,531 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +use think\exception\ClassNotFoundException; + +class Session +{ + /** + * 前缀 + * @var string + */ + protected $prefix = ''; + + /** + * 是否初始化 + * @var bool + */ + protected $init = null; + + /** + * 锁驱动 + * @var object + */ + protected $lockDriver = null; + + /** + * 锁key + * @var string + */ + protected $sessKey = 'PHPSESSID'; + + /** + * 锁超时时间 + * @var integer + */ + protected $lockTimeout = 3; + + /** + * 是否启用锁机制 + * @var bool + */ + protected $lock = false; + + /** + * 设置或者获取session作用域(前缀) + * @access public + * @param string $prefix + * @return string|void + */ + public function prefix($prefix = '') + { + empty($this->init) && $this->boot(); + + if (empty($prefix) && null !== $prefix) { + return $this->prefix; + } else { + $this->prefix = $prefix; + } + } + + /** + * session初始化 + * @access public + * @param array $config + * @return void + * @throws \think\Exception + */ + public function init(array $config = []) + { + if (empty($config)) { + $config = Container::get('config')->pull('session'); + } + + // 记录初始化信息 + Container::get('app')->log('[ SESSION ] INIT ' . var_export($config, true)); + $isDoStart = false; + if (isset($config['use_trans_sid'])) { + ini_set('session.use_trans_sid', $config['use_trans_sid'] ? 1 : 0); + } + + // 启动session + if (!empty($config['auto_start']) && PHP_SESSION_ACTIVE != session_status()) { + ini_set('session.auto_start', 0); + $isDoStart = true; + } + + if (isset($config['prefix'])) { + $this->prefix = $config['prefix']; + } + + if (isset($config['use_lock'])) { + $this->lock = $config['use_lock']; + } + + if (isset($config['var_session_id']) && isset($_REQUEST[$config['var_session_id']])) { + session_id($_REQUEST[$config['var_session_id']]); + } elseif (isset($config['id']) && !empty($config['id'])) { + session_id($config['id']); + } + + if (isset($config['name'])) { + session_name($config['name']); + } + + if (isset($config['path'])) { + session_save_path($config['path']); + } + + if (isset($config['domain'])) { + ini_set('session.cookie_domain', $config['domain']); + } + + if (isset($config['expire'])) { + ini_set('session.gc_maxlifetime', $config['expire']); + ini_set('session.cookie_lifetime', $config['expire']); + } + + if (isset($config['secure'])) { + ini_set('session.cookie_secure', $config['secure']); + } + + if (isset($config['httponly'])) { + ini_set('session.cookie_httponly', $config['httponly']); + } + + if (isset($config['use_cookies'])) { + ini_set('session.use_cookies', $config['use_cookies'] ? 1 : 0); + } + + if (isset($config['cache_limiter'])) { + session_cache_limiter($config['cache_limiter']); + } + + if (isset($config['cache_expire'])) { + session_cache_expire($config['cache_expire']); + } + + if (!empty($config['type'])) { + // 读取session驱动 + $class = false !== strpos($config['type'], '\\') ? $config['type'] : '\\think\\session\\driver\\' . ucwords($config['type']); + + // 检查驱动类 + if (!class_exists($class) || !session_set_save_handler(new $class($config))) { + throw new ClassNotFoundException('error session handler:' . $class, $class); + } + } + + if ($isDoStart) { + session_start(); + $this->init = true; + } else { + $this->init = false; + } + } + + /** + * session自动启动或者初始化 + * @access public + * @return void + */ + public function boot() + { + if (is_null($this->init)) { + $this->init(); + } elseif (false === $this->init) { + if (PHP_SESSION_ACTIVE != session_status()) { + session_start(); + } + $this->init = true; + } + } + + /** + * session设置 + * @access public + * @param string $name session名称 + * @param mixed $value session值 + * @param string|null $prefix 作用域(前缀) + * @return void + */ + public function set($name, $value, $prefix = null) + { + $this->lock(); + + empty($this->init) && $this->boot(); + + $prefix = !is_null($prefix) ? $prefix : $this->prefix; + + if (strpos($name, '.')) { + // 二维数组赋值 + list($name1, $name2) = explode('.', $name); + if ($prefix) { + $_SESSION[$prefix][$name1][$name2] = $value; + } else { + $_SESSION[$name1][$name2] = $value; + } + } elseif ($prefix) { + $_SESSION[$prefix][$name] = $value; + } else { + $_SESSION[$name] = $value; + } + + $this->unlock(); + } + + /** + * session获取 + * @access public + * @param string $name session名称 + * @param string|null $prefix 作用域(前缀) + * @return mixed + */ + public function get($name = '', $prefix = null) + { + $this->lock(); + + empty($this->init) && $this->boot(); + + $prefix = !is_null($prefix) ? $prefix : $this->prefix; + + $value = $prefix ? (!empty($_SESSION[$prefix]) ? $_SESSION[$prefix] : []) : $_SESSION; + + if ('' != $name) { + $name = explode('.', $name); + + foreach ($name as $val) { + if (isset($value[$val])) { + $value = $value[$val]; + } else { + $value = null; + break; + } + } + } + + $this->unlock(); + + return $value; + } + + /** + * session 读写锁驱动实例化 + */ + protected function initDriver() + { + // 不在 init 方法中实例化lockDriver,是因为 init 方法不一定先于 set 或 get 方法调用 + $config = Container::get('config')->pull('session'); + + if (!empty($config['type']) && isset($config['use_lock']) && $config['use_lock']) { + // 读取session驱动 + $class = false !== strpos($config['type'], '\\') ? $config['type'] : '\\think\\session\\driver\\' . ucwords($config['type']); + + // 检查驱动类及类中是否存在 lock 和 unlock 函数 + if (class_exists($class) && method_exists($class, 'lock') && method_exists($class, 'unlock')) { + $this->lockDriver = new $class($config); + } + } + + // 通过cookie获得session_id + if (isset($config['name']) && $config['name']) { + $this->sessKey = $config['name']; + } + + if (isset($config['lock_timeout']) && $config['lock_timeout'] > 0) { + $this->lockTimeout = $config['lock_timeout']; + } + } + + /** + * session 读写加锁 + * @access protected + * @return void + */ + protected function lock() + { + if (empty($this->lock)) { + return; + } + + $this->initDriver(); + + if (null !== $this->lockDriver && method_exists($this->lockDriver, 'lock')) { + $t = time(); + // 使用 session_id 作为互斥条件,即只对同一 session_id 的会话互斥。第一次请求没有 session_id + $sessID = isset($_COOKIE[$this->sessKey]) ? $_COOKIE[$this->sessKey] : ''; + + do { + if (time() - $t > $this->lockTimeout) { + $this->unlock(); + } + } while (!$this->lockDriver->lock($sessID, $this->lockTimeout)); + } + } + + /** + * session 读写解锁 + * @access protected + * @return void + */ + protected function unlock() + { + if (empty($this->lock)) { + return; + } + + $this->pause(); + + if ($this->lockDriver && method_exists($this->lockDriver, 'unlock')) { + $sessID = isset($_COOKIE[$this->sessKey]) ? $_COOKIE[$this->sessKey] : ''; + $this->lockDriver->unlock($sessID); + } + } + + /** + * session获取并删除 + * @access public + * @param string $name session名称 + * @param string|null $prefix 作用域(前缀) + * @return mixed + */ + public function pull($name, $prefix = null) + { + $result = $this->get($name, $prefix); + + if ($result) { + $this->delete($name, $prefix); + return $result; + } else { + return; + } + } + + /** + * session设置 下一次请求有效 + * @access public + * @param string $name session名称 + * @param mixed $value session值 + * @param string|null $prefix 作用域(前缀) + * @return void + */ + public function flash($name, $value) + { + $this->set($name, $value); + + if (!$this->has('__flash__.__time__')) { + $this->set('__flash__.__time__', $_SERVER['REQUEST_TIME_FLOAT']); + } + + $this->push('__flash__', $name); + } + + /** + * 清空当前请求的session数据 + * @access public + * @return void + */ + public function flush() + { + if (!$this->init) { + return; + } + + $item = $this->get('__flash__'); + + if (!empty($item)) { + $time = $item['__time__']; + + if ($_SERVER['REQUEST_TIME_FLOAT'] > $time) { + unset($item['__time__']); + $this->delete($item); + $this->set('__flash__', []); + } + } + } + + /** + * 删除session数据 + * @access public + * @param string|array $name session名称 + * @param string|null $prefix 作用域(前缀) + * @return void + */ + public function delete($name, $prefix = null) + { + empty($this->init) && $this->boot(); + + $prefix = !is_null($prefix) ? $prefix : $this->prefix; + + if (is_array($name)) { + foreach ($name as $key) { + $this->delete($key, $prefix); + } + } elseif (strpos($name, '.')) { + list($name1, $name2) = explode('.', $name); + if ($prefix) { + unset($_SESSION[$prefix][$name1][$name2]); + } else { + unset($_SESSION[$name1][$name2]); + } + } else { + if ($prefix) { + unset($_SESSION[$prefix][$name]); + } else { + unset($_SESSION[$name]); + } + } + } + + /** + * 清空session数据 + * @access public + * @param string|null $prefix 作用域(前缀) + * @return void + */ + public function clear($prefix = null) + { + empty($this->init) && $this->boot(); + $prefix = !is_null($prefix) ? $prefix : $this->prefix; + + if ($prefix) { + unset($_SESSION[$prefix]); + } else { + $_SESSION = []; + } + } + + /** + * 判断session数据 + * @access public + * @param string $name session名称 + * @param string|null $prefix + * @return bool + */ + public function has($name, $prefix = null) + { + empty($this->init) && $this->boot(); + $prefix = !is_null($prefix) ? $prefix : $this->prefix; + + if (strpos($name, '.')) { + // 支持数组 + list($name1, $name2) = explode('.', $name); + + return $prefix ? isset($_SESSION[$prefix][$name1][$name2]) : isset($_SESSION[$name1][$name2]); + } else { + return $prefix ? isset($_SESSION[$prefix][$name]) : isset($_SESSION[$name]); + } + } + + /** + * 添加数据到一个session数组 + * @access public + * @param string $key + * @param mixed $value + * @return void + */ + public function push($key, $value) + { + $array = $this->get($key); + + if (is_null($array)) { + $array = []; + } + + $array[] = $value; + + $this->set($key, $array); + } + + /** + * 启动session + * @access public + * @return void + */ + public function start() + { + session_start(); + + $this->init = true; + } + + /** + * 销毁session + * @access public + * @return void + */ + public function destroy() + { + if (!empty($_SESSION)) { + $_SESSION = []; + } + + session_unset(); + session_destroy(); + + $this->init = null; + $this->lockDriver = null; + } + + /** + * 重新生成session_id + * @access public + * @param bool $delete 是否删除关联会话文件 + * @return void + */ + public function regenerate($delete = false) + { + session_regenerate_id($delete); + } + + /** + * 暂停session + * @access public + * @return void + */ + public function pause() + { + // 暂停session + session_write_close(); + $this->init = false; + } +} diff --git a/thinkphp/library/think/Template.php b/thinkphp/library/think/Template.php new file mode 100644 index 000000000..ef4a197f4 --- /dev/null +++ b/thinkphp/library/think/Template.php @@ -0,0 +1,1304 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +use think\exception\TemplateNotFoundException; + +/** + * ThinkPHP分离出来的模板引擎 + * 支持XML标签和普通标签的模板解析 + * 编译型模板引擎 支持动态缓存 + */ +class Template +{ + /** + * 模板变量 + * @var array + */ + protected $data = []; + + /** + * 模板配置参数 + * @var array + */ + protected $config = [ + 'view_path' => '', // 模板路径 + 'view_base' => '', + 'view_suffix' => 'html', // 默认模板文件后缀 + 'view_depr' => DIRECTORY_SEPARATOR, + 'cache_suffix' => 'php', // 默认模板缓存后缀 + 'tpl_deny_func_list' => 'echo,exit', // 模板引擎禁用函数 + 'tpl_deny_php' => false, // 默认模板引擎是否禁用PHP原生代码 + 'tpl_begin' => '{', // 模板引擎普通标签开始标记 + 'tpl_end' => '}', // 模板引擎普通标签结束标记 + 'strip_space' => false, // 是否去除模板文件里面的html空格与换行 + 'tpl_cache' => true, // 是否开启模板编译缓存,设为false则每次都会重新编译 + 'compile_type' => 'file', // 模板编译类型 + 'cache_prefix' => '', // 模板缓存前缀标识,可以动态改变 + 'cache_time' => 0, // 模板缓存有效期 0 为永久,(以数字为值,单位:秒) + 'layout_on' => false, // 布局模板开关 + 'layout_name' => 'layout', // 布局模板入口文件 + 'layout_item' => '{__CONTENT__}', // 布局模板的内容替换标识 + 'taglib_begin' => '{', // 标签库标签开始标记 + 'taglib_end' => '}', // 标签库标签结束标记 + 'taglib_load' => true, // 是否使用内置标签库之外的其它标签库,默认自动检测 + 'taglib_build_in' => 'cx', // 内置标签库名称(标签使用不必指定标签库名称),以逗号分隔 注意解析顺序 + 'taglib_pre_load' => '', // 需要额外加载的标签库(须指定标签库名称),多个以逗号分隔 + 'display_cache' => false, // 模板渲染缓存 + 'cache_id' => '', // 模板缓存ID + 'tpl_replace_string' => [], + 'tpl_var_identify' => 'array', // .语法变量识别,array|object|'', 为空时自动识别 + 'default_filter' => 'htmlentities', // 默认过滤方法 用于普通标签输出 + ]; + + /** + * 保留内容信息 + * @var array + */ + private $literal = []; + + /** + * 模板包含信息 + * @var array + */ + private $includeFile = []; + + /** + * 模板存储对象 + * @var object + */ + protected $storage; + + /** + * 架构函数 + * @access public + * @param array $config + */ + public function __construct(array $config = []) + { + $this->config['cache_path'] = Container::get('app')->getRuntimePath() . 'temp/'; + $this->config = array_merge($this->config, $config); + + $this->config['taglib_begin_origin'] = $this->config['taglib_begin']; + $this->config['taglib_end_origin'] = $this->config['taglib_end']; + + $this->config['taglib_begin'] = preg_quote($this->config['taglib_begin'], '/'); + $this->config['taglib_end'] = preg_quote($this->config['taglib_end'], '/'); + $this->config['tpl_begin'] = preg_quote($this->config['tpl_begin'], '/'); + $this->config['tpl_end'] = preg_quote($this->config['tpl_end'], '/'); + + // 初始化模板编译存储器 + $type = $this->config['compile_type'] ? $this->config['compile_type'] : 'File'; + $class = false !== strpos($type, '\\') ? $type : '\\think\\template\\driver\\' . ucwords($type); + + $this->storage = new $class(); + } + + /** + * 模板变量赋值 + * @access public + * @param mixed $name + * @param mixed $value + * @return void + */ + public function assign($name, $value = '') + { + if (is_array($name)) { + $this->data = array_merge($this->data, $name); + } else { + $this->data[$name] = $value; + } + } + + /** + * 模板引擎参数赋值 + * @access public + * @param mixed $name + * @param mixed $value + */ + public function __set($name, $value) + { + $this->config[$name] = $value; + } + + /** + * 模板引擎配置项 + * @access public + * @param array|string $config + * @return void|array + */ + public function config($config) + { + if (is_array($config)) { + $this->config = array_merge($this->config, $config); + } elseif (isset($this->config[$config])) { + return $this->config[$config]; + } + } + + /** + * 模板变量获取 + * @access public + * @param string $name 变量名 + * @return mixed + */ + public function get($name = '') + { + if ('' == $name) { + return $this->data; + } + + $data = $this->data; + + foreach (explode('.', $name) as $key => $val) { + if (isset($data[$val])) { + $data = $data[$val]; + } else { + $data = null; + break; + } + } + + return $data; + } + + /** + * 渲染模板文件 + * @access public + * @param string $template 模板文件 + * @param array $vars 模板变量 + * @param array $config 模板参数 + * @return void + */ + public function fetch($template, $vars = [], $config = []) + { + if ($vars) { + $this->data = $vars; + } + + if ($config) { + $this->config($config); + } + + $cache = Container::get('cache'); + + if (!empty($this->config['cache_id']) && $this->config['display_cache']) { + // 读取渲染缓存 + $cacheContent = $cache->get($this->config['cache_id']); + + if (false !== $cacheContent) { + echo $cacheContent; + return; + } + } + + $template = $this->parseTemplateFile($template); + + if ($template) { + $cacheFile = $this->config['cache_path'] . $this->config['cache_prefix'] . md5($this->config['layout_on'] . $this->config['layout_name'] . $template) . '.' . ltrim($this->config['cache_suffix'], '.'); + + if (!$this->checkCache($cacheFile)) { + // 缓存无效 重新模板编译 + $content = file_get_contents($template); + $this->compiler($content, $cacheFile); + } + + // 页面缓存 + ob_start(); + ob_implicit_flush(0); + + // 读取编译存储 + $this->storage->read($cacheFile, $this->data); + + // 获取并清空缓存 + $content = ob_get_clean(); + + if (!empty($this->config['cache_id']) && $this->config['display_cache']) { + // 缓存页面输出 + $cache->set($this->config['cache_id'], $content, $this->config['cache_time']); + } + + echo $content; + } + } + + /** + * 渲染模板内容 + * @access public + * @param string $content 模板内容 + * @param array $vars 模板变量 + * @param array $config 模板参数 + * @return void + */ + public function display($content, $vars = [], $config = []) + { + if ($vars) { + $this->data = $vars; + } + + if ($config) { + $this->config($config); + } + + $cacheFile = $this->config['cache_path'] . $this->config['cache_prefix'] . md5($content) . '.' . ltrim($this->config['cache_suffix'], '.'); + + if (!$this->checkCache($cacheFile)) { + // 缓存无效 模板编译 + $this->compiler($content, $cacheFile); + } + + // 读取编译存储 + $this->storage->read($cacheFile, $this->data); + } + + /** + * 设置布局 + * @access public + * @param mixed $name 布局模板名称 false 则关闭布局 + * @param string $replace 布局模板内容替换标识 + * @return object + */ + public function layout($name, $replace = '') + { + if (false === $name) { + // 关闭布局 + $this->config['layout_on'] = false; + } else { + // 开启布局 + $this->config['layout_on'] = true; + + // 名称必须为字符串 + if (is_string($name)) { + $this->config['layout_name'] = $name; + } + + if (!empty($replace)) { + $this->config['layout_item'] = $replace; + } + } + + return $this; + } + + /** + * 检查编译缓存是否有效 + * 如果无效则需要重新编译 + * @access private + * @param string $cacheFile 缓存文件名 + * @return boolean + */ + private function checkCache($cacheFile) + { + if (!$this->config['tpl_cache'] || !is_file($cacheFile) || !$handle = @fopen($cacheFile, "r")) { + return false; + } + + // 读取第一行 + preg_match('/\/\*(.+?)\*\//', fgets($handle), $matches); + + if (!isset($matches[1])) { + return false; + } + + $includeFile = unserialize($matches[1]); + + if (!is_array($includeFile)) { + return false; + } + + // 检查模板文件是否有更新 + foreach ($includeFile as $path => $time) { + if (is_file($path) && filemtime($path) > $time) { + // 模板文件如果有更新则缓存需要更新 + return false; + } + } + + // 检查编译存储是否有效 + return $this->storage->check($cacheFile, $this->config['cache_time']); + } + + /** + * 检查编译缓存是否存在 + * @access public + * @param string $cacheId 缓存的id + * @return boolean + */ + public function isCache($cacheId) + { + if ($cacheId && $this->config['display_cache']) { + // 缓存页面输出 + return Container::get('cache')->has($cacheId); + } + + return false; + } + + /** + * 编译模板文件内容 + * @access private + * @param string $content 模板内容 + * @param string $cacheFile 缓存文件名 + * @return void + */ + private function compiler(&$content, $cacheFile) + { + // 判断是否启用布局 + if ($this->config['layout_on']) { + if (false !== strpos($content, '{__NOLAYOUT__}')) { + // 可以单独定义不使用布局 + $content = str_replace('{__NOLAYOUT__}', '', $content); + } else { + // 读取布局模板 + $layoutFile = $this->parseTemplateFile($this->config['layout_name']); + + if ($layoutFile) { + // 替换布局的主体内容 + $content = str_replace($this->config['layout_item'], $content, file_get_contents($layoutFile)); + } + } + } else { + $content = str_replace('{__NOLAYOUT__}', '', $content); + } + + // 模板解析 + $this->parse($content); + + if ($this->config['strip_space']) { + /* 去除html空格与换行 */ + $find = ['~>\s+<~', '~>(\s+\n|\r)~']; + $replace = ['><', '>']; + $content = preg_replace($find, $replace, $content); + } + + // 优化生成的php代码 + $content = preg_replace('/\?>\s*<\?php\s(?!echo\b)/s', '', $content); + + // 模板过滤输出 + $replace = $this->config['tpl_replace_string']; + $content = str_replace(array_keys($replace), array_values($replace), $content); + + // 添加安全代码及模板引用记录 + $content = 'includeFile) . '*/ ?>' . "\n" . $content; + // 编译存储 + $this->storage->write($cacheFile, $content); + + $this->includeFile = []; + } + + /** + * 模板解析入口 + * 支持普通标签和TagLib解析 支持自定义标签库 + * @access public + * @param string $content 要解析的模板内容 + * @return void + */ + public function parse(&$content) + { + // 内容为空不解析 + if (empty($content)) { + return; + } + + // 替换literal标签内容 + $this->parseLiteral($content); + + // 解析继承 + $this->parseExtend($content); + + // 解析布局 + $this->parseLayout($content); + + // 检查include语法 + $this->parseInclude($content); + + // 替换包含文件中literal标签内容 + $this->parseLiteral($content); + + // 检查PHP语法 + $this->parsePhp($content); + + // 获取需要引入的标签库列表 + // 标签库只需要定义一次,允许引入多个一次 + // 一般放在文件的最前面 + // 格式: + // 当TAGLIB_LOAD配置为true时才会进行检测 + if ($this->config['taglib_load']) { + $tagLibs = $this->getIncludeTagLib($content); + + if (!empty($tagLibs)) { + // 对导入的TagLib进行解析 + foreach ($tagLibs as $tagLibName) { + $this->parseTagLib($tagLibName, $content); + } + } + } + + // 预先加载的标签库 无需在每个模板中使用taglib标签加载 但必须使用标签库XML前缀 + if ($this->config['taglib_pre_load']) { + $tagLibs = explode(',', $this->config['taglib_pre_load']); + + foreach ($tagLibs as $tag) { + $this->parseTagLib($tag, $content); + } + } + + // 内置标签库 无需使用taglib标签导入就可以使用 并且不需使用标签库XML前缀 + $tagLibs = explode(',', $this->config['taglib_build_in']); + + foreach ($tagLibs as $tag) { + $this->parseTagLib($tag, $content, true); + } + + // 解析普通模板标签 {$tagName} + $this->parseTag($content); + + // 还原被替换的Literal标签 + $this->parseLiteral($content, true); + } + + /** + * 检查PHP语法 + * @access private + * @param string $content 要解析的模板内容 + * @return void + * @throws \think\Exception + */ + private function parsePhp(&$content) + { + // 短标签的情况要将' . "\n", $content); + + // PHP语法检查 + if ($this->config['tpl_deny_php'] && false !== strpos($content, 'getRegex('layout'), $content, $matches)) { + // 替换Layout标签 + $content = str_replace($matches[0], '', $content); + // 解析Layout标签 + $array = $this->parseAttr($matches[0]); + + if (!$this->config['layout_on'] || $this->config['layout_name'] != $array['name']) { + // 读取布局模板 + $layoutFile = $this->parseTemplateFile($array['name']); + + if ($layoutFile) { + $replace = isset($array['replace']) ? $array['replace'] : $this->config['layout_item']; + // 替换布局的主体内容 + $content = str_replace($replace, $content, file_get_contents($layoutFile)); + } + } + } else { + $content = str_replace('{__NOLAYOUT__}', '', $content); + } + } + + /** + * 解析模板中的include标签 + * @access private + * @param string $content 要解析的模板内容 + * @return void + */ + private function parseInclude(&$content) + { + $regex = $this->getRegex('include'); + $func = function ($template) use (&$func, &$regex, &$content) { + if (preg_match_all($regex, $template, $matches, PREG_SET_ORDER)) { + foreach ($matches as $match) { + $array = $this->parseAttr($match[0]); + $file = $array['file']; + unset($array['file']); + + // 分析模板文件名并读取内容 + $parseStr = $this->parseTemplateName($file); + + foreach ($array as $k => $v) { + // 以$开头字符串转换成模板变量 + if (0 === strpos($v, '$')) { + $v = $this->get(substr($v, 1)); + } + + $parseStr = str_replace('[' . $k . ']', $v, $parseStr); + } + + $content = str_replace($match[0], $parseStr, $content); + // 再次对包含文件进行模板分析 + $func($parseStr); + } + unset($matches); + } + }; + + // 替换模板中的include标签 + $func($content); + } + + /** + * 解析模板中的extend标签 + * @access private + * @param string $content 要解析的模板内容 + * @return void + */ + private function parseExtend(&$content) + { + $regex = $this->getRegex('extend'); + $array = $blocks = $baseBlocks = []; + $extend = ''; + + $func = function ($template) use (&$func, &$regex, &$array, &$extend, &$blocks, &$baseBlocks) { + if (preg_match($regex, $template, $matches)) { + if (!isset($array[$matches['name']])) { + $array[$matches['name']] = 1; + // 读取继承模板 + $extend = $this->parseTemplateName($matches['name']); + + // 递归检查继承 + $func($extend); + + // 取得block标签内容 + $blocks = array_merge($blocks, $this->parseBlock($template)); + + return; + } + } else { + // 取得顶层模板block标签内容 + $baseBlocks = $this->parseBlock($template, true); + + if (empty($extend)) { + // 无extend标签但有block标签的情况 + $extend = $template; + } + } + }; + + $func($content); + + if (!empty($extend)) { + if ($baseBlocks) { + $children = []; + foreach ($baseBlocks as $name => $val) { + $replace = $val['content']; + + if (!empty($children[$name])) { + // 如果包含有子block标签 + foreach ($children[$name] as $key) { + $replace = str_replace($baseBlocks[$key]['begin'] . $baseBlocks[$key]['content'] . $baseBlocks[$key]['end'], $blocks[$key]['content'], $replace); + } + } + + if (isset($blocks[$name])) { + // 带有{__block__}表示与所继承模板的相应标签合并,而不是覆盖 + $replace = str_replace(['{__BLOCK__}', '{__block__}'], $replace, $blocks[$name]['content']); + + if (!empty($val['parent'])) { + // 如果不是最顶层的block标签 + $parent = $val['parent']; + + if (isset($blocks[$parent])) { + $blocks[$parent]['content'] = str_replace($blocks[$name]['begin'] . $blocks[$name]['content'] . $blocks[$name]['end'], $replace, $blocks[$parent]['content']); + } + + $blocks[$name]['content'] = $replace; + $children[$parent][] = $name; + + continue; + } + } elseif (!empty($val['parent'])) { + // 如果子标签没有被继承则用原值 + $children[$val['parent']][] = $name; + $blocks[$name] = $val; + } + + if (!$val['parent']) { + // 替换模板中的顶级block标签 + $extend = str_replace($val['begin'] . $val['content'] . $val['end'], $replace, $extend); + } + } + } + + $content = $extend; + unset($blocks, $baseBlocks); + } + } + + /** + * 替换页面中的literal标签 + * @access private + * @param string $content 模板内容 + * @param boolean $restore 是否为还原 + * @return void + */ + private function parseLiteral(&$content, $restore = false) + { + $regex = $this->getRegex($restore ? 'restoreliteral' : 'literal'); + + if (preg_match_all($regex, $content, $matches, PREG_SET_ORDER)) { + if (!$restore) { + $count = count($this->literal); + + // 替换literal标签 + foreach ($matches as $match) { + $this->literal[] = substr($match[0], strlen($match[1]), -strlen($match[2])); + $content = str_replace($match[0], "", $content); + $count++; + } + } else { + // 还原literal标签 + foreach ($matches as $match) { + $content = str_replace($match[0], $this->literal[$match[1]], $content); + } + + // 清空literal记录 + $this->literal = []; + } + + unset($matches); + } + } + + /** + * 获取模板中的block标签 + * @access private + * @param string $content 模板内容 + * @param boolean $sort 是否排序 + * @return array + */ + private function parseBlock(&$content, $sort = false) + { + $regex = $this->getRegex('block'); + $result = []; + + if (preg_match_all($regex, $content, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) { + $right = $keys = []; + + foreach ($matches as $match) { + if (empty($match['name'][0])) { + if (count($right) > 0) { + $tag = array_pop($right); + $start = $tag['offset'] + strlen($tag['tag']); + $length = $match[0][1] - $start; + + $result[$tag['name']] = [ + 'begin' => $tag['tag'], + 'content' => substr($content, $start, $length), + 'end' => $match[0][0], + 'parent' => count($right) ? end($right)['name'] : '', + ]; + + $keys[$tag['name']] = $match[0][1]; + } + } else { + // 标签头压入栈 + $right[] = [ + 'name' => $match[2][0], + 'offset' => $match[0][1], + 'tag' => $match[0][0], + ]; + } + } + + unset($right, $matches); + + if ($sort) { + // 按block标签结束符在模板中的位置排序 + array_multisort($keys, $result); + } + } + + return $result; + } + + /** + * 搜索模板页面中包含的TagLib库 + * 并返回列表 + * @access private + * @param string $content 模板内容 + * @return array|null + */ + private function getIncludeTagLib(&$content) + { + // 搜索是否有TagLib标签 + if (preg_match($this->getRegex('taglib'), $content, $matches)) { + // 替换TagLib标签 + $content = str_replace($matches[0], '', $content); + + return explode(',', $matches['name']); + } + } + + /** + * TagLib库解析 + * @access public + * @param string $tagLib 要解析的标签库 + * @param string $content 要解析的模板内容 + * @param boolean $hide 是否隐藏标签库前缀 + * @return void + */ + public function parseTagLib($tagLib, &$content, $hide = false) + { + if (false !== strpos($tagLib, '\\')) { + // 支持指定标签库的命名空间 + $className = $tagLib; + $tagLib = substr($tagLib, strrpos($tagLib, '\\') + 1); + } else { + $className = '\\think\\template\\taglib\\' . ucwords($tagLib); + } + + $tLib = new $className($this); + + $tLib->parseTag($content, $hide ? '' : $tagLib); + } + + /** + * 分析标签属性 + * @access public + * @param string $str 属性字符串 + * @param string $name 不为空时返回指定的属性名 + * @return array + */ + public function parseAttr($str, $name = null) + { + $regex = '/\s+(?>(?P[\w-]+)\s*)=(?>\s*)([\"\'])(?P(?:(?!\\2).)*)\\2/is'; + $array = []; + + if (preg_match_all($regex, $str, $matches, PREG_SET_ORDER)) { + foreach ($matches as $match) { + $array[$match['name']] = $match['value']; + } + unset($matches); + } + + if (!empty($name) && isset($array[$name])) { + return $array[$name]; + } + + return $array; + } + + /** + * 模板标签解析 + * 格式: {TagName:args [|content] } + * @access private + * @param string $content 要解析的模板内容 + * @return void + */ + private function parseTag(&$content) + { + $regex = $this->getRegex('tag'); + + if (preg_match_all($regex, $content, $matches, PREG_SET_ORDER)) { + foreach ($matches as $match) { + $str = stripslashes($match[1]); + $flag = substr($str, 0, 1); + + switch ($flag) { + case '$': + // 解析模板变量 格式 {$varName} + // 是否带有?号 + if (false !== $pos = strpos($str, '?')) { + $array = preg_split('/([!=]={1,2}|(?<]={0,1})/', substr($str, 0, $pos), 2, PREG_SPLIT_DELIM_CAPTURE); + $name = $array[0]; + + $this->parseVar($name); + //$this->parseVarFunction($name); + + $str = trim(substr($str, $pos + 1)); + $this->parseVar($str); + $first = substr($str, 0, 1); + + if (strpos($name, ')')) { + // $name为对象或是自动识别,或者含有函数 + if (isset($array[1])) { + $this->parseVar($array[2]); + $name .= $array[1] . $array[2]; + } + + switch ($first) { + case '?': + $this->parseVarFunction($name); + $str = ''; + break; + case '=': + $str = ''; + break; + default: + $str = ''; + } + } else { + if (isset($array[1])) { + $express = true; + $this->parseVar($array[2]); + $express = $name . $array[1] . $array[2]; + } else { + $express = false; + } + + if (in_array($first, ['?', '=', ':'])) { + $str = trim(substr($str, 1)); + if ('$' == substr($str, 0, 1)) { + $str = $this->parseVarFunction($str); + } + } + + // $name为数组 + switch ($first) { + case '?': + // {$varname??'xxx'} $varname有定义则输出$varname,否则输出xxx + $str = 'parseVarFunction($name) . ' : ' . $str . '; ?>'; + break; + case '=': + // {$varname?='xxx'} $varname为真时才输出xxx + $str = ''; + break; + case ':': + // {$varname?:'xxx'} $varname为真时输出$varname,否则输出xxx + $str = 'parseVarFunction($name) . ' : ' . $str . '; ?>'; + break; + default: + if (strpos($str, ':')) { + // {$varname ? 'a' : 'b'} $varname为真时输出a,否则输出b + $array = explode(':', $str, 2); + + $array[0] = '$' == substr(trim($array[0]), 0, 1) ? $this->parseVarFunction($array[0]) : $array[0]; + $array[1] = '$' == substr(trim($array[1]), 0, 1) ? $this->parseVarFunction($array[1]) : $array[1]; + + $str = implode(' : ', $array); + } + $str = ''; + } + } + } else { + $this->parseVar($str); + $this->parseVarFunction($str); + $str = ''; + } + break; + case ':': + // 输出某个函数的结果 + $str = substr($str, 1); + $this->parseVar($str); + $str = ''; + break; + case '~': + // 执行某个函数 + $str = substr($str, 1); + $this->parseVar($str); + $str = ''; + break; + case '-': + case '+': + // 输出计算 + $this->parseVar($str); + $str = ''; + break; + case '/': + // 注释标签 + $flag2 = substr($str, 1, 1); + if ('/' == $flag2 || ('*' == $flag2 && substr(rtrim($str), -2) == '*/')) { + $str = ''; + } + break; + default: + // 未识别的标签直接返回 + $str = $this->config['tpl_begin'] . $str . $this->config['tpl_end']; + break; + } + + $content = str_replace($match[0], $str, $content); + } + + unset($matches); + } + } + + /** + * 模板变量解析,支持使用函数 + * 格式: {$varname|function1|function2=arg1,arg2} + * @access public + * @param string $varStr 变量数据 + * @return void + */ + public function parseVar(&$varStr) + { + $varStr = trim($varStr); + + if (preg_match_all('/\$[a-zA-Z_](?>\w*)(?:[:\.][0-9a-zA-Z_](?>\w*))+/', $varStr, $matches, PREG_OFFSET_CAPTURE)) { + static $_varParseList = []; + + while ($matches[0]) { + $match = array_pop($matches[0]); + + //如果已经解析过该变量字串,则直接返回变量值 + if (isset($_varParseList[$match[0]])) { + $parseStr = $_varParseList[$match[0]]; + } else { + if (strpos($match[0], '.')) { + $vars = explode('.', $match[0]); + $first = array_shift($vars); + + if ('$Think' == $first) { + // 所有以Think.打头的以特殊变量对待 无需模板赋值就可以输出 + $parseStr = $this->parseThinkVar($vars); + } elseif ('$Request' == $first) { + // 获取Request请求对象参数 + $method = array_shift($vars); + if (!empty($vars)) { + $params = implode('.', $vars); + if ('true' != $params) { + $params = '\'' . $params . '\''; + } + } else { + $params = ''; + } + + $parseStr = 'app(\'request\')->' . $method . '(' . $params . ')'; + } else { + switch ($this->config['tpl_var_identify']) { + case 'array': // 识别为数组 + $parseStr = $first . '[\'' . implode('\'][\'', $vars) . '\']'; + break; + case 'obj': // 识别为对象 + $parseStr = $first . '->' . implode('->', $vars); + break; + default: // 自动判断数组或对象 + $parseStr = '(is_array(' . $first . ')?' . $first . '[\'' . implode('\'][\'', $vars) . '\']:' . $first . '->' . implode('->', $vars) . ')'; + } + } + } else { + $parseStr = str_replace(':', '->', $match[0]); + } + + $_varParseList[$match[0]] = $parseStr; + } + + $varStr = substr_replace($varStr, $parseStr, $match[1], strlen($match[0])); + } + unset($matches); + } + } + + /** + * 对模板中使用了函数的变量进行解析 + * 格式 {$varname|function1|function2=arg1,arg2} + * @access public + * @param string $varStr 变量字符串 + * @param bool $autoescape 自动转义 + * @return void + */ + public function parseVarFunction(&$varStr, $autoescape = true) + { + if (!$autoescape && false === strpos($varStr, '|')) { + return $varStr; + } elseif ($autoescape && !preg_match('/\|(\s)?raw(\||\s)?/i', $varStr)) { + $varStr .= '|' . $this->config['default_filter']; + } + + static $_varFunctionList = []; + + $_key = md5($varStr); + + //如果已经解析过该变量字串,则直接返回变量值 + if (isset($_varFunctionList[$_key])) { + $varStr = $_varFunctionList[$_key]; + } else { + $varArray = explode('|', $varStr); + + // 取得变量名称 + $name = trim(array_shift($varArray)); + + // 对变量使用函数 + $length = count($varArray); + + // 取得模板禁止使用函数列表 + $template_deny_funs = explode(',', $this->config['tpl_deny_func_list']); + + for ($i = 0; $i < $length; $i++) { + $args = explode('=', $varArray[$i], 2); + + // 模板函数过滤 + $fun = trim($args[0]); + if (in_array($fun, $template_deny_funs)) { + continue; + } + + switch (strtolower($fun)) { + case 'raw': + continue; + case 'date': + $name = 'date(' . $args[1] . ',!is_numeric(' . $name . ')? strtotime(' . $name . ') : ' . $name . ')'; + break; + case 'first': + $name = 'current(' . $name . ')'; + break; + case 'last': + $name = 'end(' . $name . ')'; + break; + case 'upper': + $name = 'strtoupper(' . $name . ')'; + break; + case 'lower': + $name = 'strtolower(' . $name . ')'; + break; + case 'format': + $name = 'sprintf(' . $args[1] . ',' . $name . ')'; + break; + case 'default': // 特殊模板函数 + if (false === strpos($name, '(')) { + $name = '(isset(' . $name . ') && (' . $name . ' !== \'\')?' . $name . ':' . $args[1] . ')'; + } else { + $name = '(' . $name . ' ?: ' . $args[1] . ')'; + } + break; + default: // 通用模板函数 + if (isset($args[1])) { + if (strstr($args[1], '###')) { + $args[1] = str_replace('###', $name, $args[1]); + $name = "$fun($args[1])"; + } else { + $name = "$fun($name,$args[1])"; + } + } else { + if (!empty($args[0])) { + $name = "$fun($name)"; + } + } + } + } + + $_varFunctionList[$_key] = $name; + $varStr = $name; + } + return $varStr; + } + + /** + * 特殊模板变量解析 + * 格式 以 $Think. 打头的变量属于特殊模板变量 + * @access public + * @param array $vars 变量数组 + * @return string + */ + public function parseThinkVar($vars) + { + $type = strtoupper(trim(array_shift($vars))); + $param = implode('.', $vars); + + if ($vars) { + switch ($type) { + case 'SERVER': + $parseStr = 'app(\'request\')->server(\'' . $param . '\')'; + break; + case 'GET': + $parseStr = 'app(\'request\')->get(\'' . $param . '\')'; + break; + case 'POST': + $parseStr = 'app(\'request\')->post(\'' . $param . '\')'; + break; + case 'COOKIE': + $parseStr = 'app(\'cookie\')->get(\'' . $param . '\')'; + break; + case 'SESSION': + $parseStr = 'app(\'session\')->get(\'' . $param . '\')'; + break; + case 'ENV': + $parseStr = 'app(\'request\')->env(\'' . $param . '\')'; + break; + case 'REQUEST': + $parseStr = 'app(\'request\')->request(\'' . $param . '\')'; + break; + case 'CONST': + $parseStr = strtoupper($param); + break; + case 'LANG': + $parseStr = 'app(\'lang\')->get(\'' . $param . '\')'; + break; + case 'CONFIG': + $parseStr = 'app(\'config\')->get(\'' . $param . '\')'; + break; + default: + $parseStr = '\'\''; + break; + } + } else { + switch ($type) { + case 'NOW': + $parseStr = "date('Y-m-d g:i a',time())"; + break; + case 'VERSION': + $parseStr = 'app()->version()'; + break; + case 'LDELIM': + $parseStr = '\'' . ltrim($this->config['tpl_begin'], '\\') . '\''; + break; + case 'RDELIM': + $parseStr = '\'' . ltrim($this->config['tpl_end'], '\\') . '\''; + break; + default: + if (defined($type)) { + $parseStr = $type; + } else { + $parseStr = ''; + } + } + } + + return $parseStr; + } + + /** + * 分析加载的模板文件并读取内容 支持多个模板文件读取 + * @access private + * @param string $templateName 模板文件名 + * @return string + */ + private function parseTemplateName($templateName) + { + $array = explode(',', $templateName); + $parseStr = ''; + + foreach ($array as $templateName) { + if (empty($templateName)) { + continue; + } + + if (0 === strpos($templateName, '$')) { + //支持加载变量文件名 + $templateName = $this->get(substr($templateName, 1)); + } + + $template = $this->parseTemplateFile($templateName); + + if ($template) { + // 获取模板文件内容 + $parseStr .= file_get_contents($template); + } + } + + return $parseStr; + } + + /** + * 解析模板文件名 + * @access private + * @param string $template 文件名 + * @return string|false + */ + private function parseTemplateFile($template) + { + if ('' == pathinfo($template, PATHINFO_EXTENSION)) { + if (strpos($template, '@')) { + list($module, $template) = explode('@', $template); + } + + if (0 !== strpos($template, '/')) { + $template = str_replace(['/', ':'], $this->config['view_depr'], $template); + } else { + $template = str_replace(['/', ':'], $this->config['view_depr'], substr($template, 1)); + } + + if ($this->config['view_base']) { + $module = isset($module) ? $module : Container::get('request')->module(); + $path = $this->config['view_base'] . ($module ? $module . DIRECTORY_SEPARATOR : ''); + } else { + $path = isset($module) ? Container::get('app')->getAppPath() . $module . DIRECTORY_SEPARATOR . basename($this->config['view_path']) . DIRECTORY_SEPARATOR : $this->config['view_path']; + } + + $template = $path . $template . '.' . ltrim($this->config['view_suffix'], '.'); + } + + if (is_file($template)) { + // 记录模板文件的更新时间 + $this->includeFile[$template] = filemtime($template); + + return $template; + } + + throw new TemplateNotFoundException('template not exists:' . $template, $template); + } + + /** + * 按标签生成正则 + * @access private + * @param string $tagName 标签名 + * @return string + */ + private function getRegex($tagName) + { + $regex = ''; + if ('tag' == $tagName) { + $begin = $this->config['tpl_begin']; + $end = $this->config['tpl_end']; + + if (strlen(ltrim($begin, '\\')) == 1 && strlen(ltrim($end, '\\')) == 1) { + $regex = $begin . '((?:[\$]{1,2}[a-wA-w_]|[\:\~][\$a-wA-w_]|[+]{2}[\$][a-wA-w_]|[-]{2}[\$][a-wA-w_]|\/[\*\/])(?>[^' . $end . ']*))' . $end; + } else { + $regex = $begin . '((?:[\$]{1,2}[a-wA-w_]|[\:\~][\$a-wA-w_]|[+]{2}[\$][a-wA-w_]|[-]{2}[\$][a-wA-w_]|\/[\*\/])(?>(?:(?!' . $end . ').)*))' . $end; + } + } else { + $begin = $this->config['taglib_begin']; + $end = $this->config['taglib_end']; + $single = strlen(ltrim($begin, '\\')) == 1 && strlen(ltrim($end, '\\')) == 1 ? true : false; + + switch ($tagName) { + case 'block': + if ($single) { + $regex = $begin . '(?:' . $tagName . '\b(?>(?:(?!name=).)*)\bname=([\'\"])(?P[\$\w\-\/\.]+)\\1(?>[^' . $end . ']*)|\/' . $tagName . ')' . $end; + } else { + $regex = $begin . '(?:' . $tagName . '\b(?>(?:(?!name=).)*)\bname=([\'\"])(?P[\$\w\-\/\.]+)\\1(?>(?:(?!' . $end . ').)*)|\/' . $tagName . ')' . $end; + } + break; + case 'literal': + if ($single) { + $regex = '(' . $begin . $tagName . '\b(?>[^' . $end . ']*)' . $end . ')'; + $regex .= '(?:(?>[^' . $begin . ']*)(?>(?!' . $begin . '(?>' . $tagName . '\b[^' . $end . ']*|\/' . $tagName . ')' . $end . ')' . $begin . '[^' . $begin . ']*)*)'; + $regex .= '(' . $begin . '\/' . $tagName . $end . ')'; + } else { + $regex = '(' . $begin . $tagName . '\b(?>(?:(?!' . $end . ').)*)' . $end . ')'; + $regex .= '(?:(?>(?:(?!' . $begin . ').)*)(?>(?!' . $begin . '(?>' . $tagName . '\b(?>(?:(?!' . $end . ').)*)|\/' . $tagName . ')' . $end . ')' . $begin . '(?>(?:(?!' . $begin . ').)*))*)'; + $regex .= '(' . $begin . '\/' . $tagName . $end . ')'; + } + break; + case 'restoreliteral': + $regex = ''; + break; + case 'include': + $name = 'file'; + case 'taglib': + case 'layout': + case 'extend': + if (empty($name)) { + $name = 'name'; + } + if ($single) { + $regex = $begin . $tagName . '\b(?>(?:(?!' . $name . '=).)*)\b' . $name . '=([\'\"])(?P[\$\w\-\/\.\:@,\\\\]+)\\1(?>[^' . $end . ']*)' . $end; + } else { + $regex = $begin . $tagName . '\b(?>(?:(?!' . $name . '=).)*)\b' . $name . '=([\'\"])(?P[\$\w\-\/\.\:@,\\\\]+)\\1(?>(?:(?!' . $end . ').)*)' . $end; + } + break; + } + } + + return '/' . $regex . '/is'; + } +} diff --git a/thinkphp/library/think/Url.php b/thinkphp/library/think/Url.php new file mode 100644 index 000000000..1e4dfd7d2 --- /dev/null +++ b/thinkphp/library/think/Url.php @@ -0,0 +1,357 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +class Url +{ + /** + * ROOT地址 + * @var string + */ + protected $root; + + /** + * 绑定检查 + * @var bool + */ + protected $bindCheck; + + /** + * 应用对象 + * @var App + */ + protected $app; + + public function __construct(App $app) + { + $this->app = $app; + + if (is_file($app->getRuntimePath() . 'route.php')) { + // 读取路由映射文件 + $app['route']->setName(include $app->getRuntimePath() . 'route.php'); + } + } + + /** + * URL生成 支持路由反射 + * @access public + * @param string $url 路由地址 + * @param string|array $vars 参数(支持数组和字符串)a=val&b=val2... ['a'=>'val1', 'b'=>'val2'] + * @param string|bool $suffix 伪静态后缀,默认为true表示获取配置值 + * @param boolean|string $domain 是否显示域名 或者直接传入域名 + * @return string + */ + public function build($url = '', $vars = '', $suffix = true, $domain = false) + { + // 解析URL + if (0 === strpos($url, '[') && $pos = strpos($url, ']')) { + // [name] 表示使用路由命名标识生成URL + $name = substr($url, 1, $pos - 1); + $url = 'name' . substr($url, $pos + 1); + } + + if (false === strpos($url, '://') && 0 !== strpos($url, '/')) { + $info = parse_url($url); + $url = !empty($info['path']) ? $info['path'] : ''; + + if (isset($info['fragment'])) { + // 解析锚点 + $anchor = $info['fragment']; + + if (false !== strpos($anchor, '?')) { + // 解析参数 + list($anchor, $info['query']) = explode('?', $anchor, 2); + } + + if (false !== strpos($anchor, '@')) { + // 解析域名 + list($anchor, $domain) = explode('@', $anchor, 2); + } + } elseif (strpos($url, '@') && false === strpos($url, '\\')) { + // 解析域名 + list($url, $domain) = explode('@', $url, 2); + } + } + + // 解析参数 + if (is_string($vars)) { + // aaa=1&bbb=2 转换成数组 + parse_str($vars, $vars); + } + + if ($url) { + $rule = $this->app['route']->getName(isset($name) ? $name : $url . (isset($info['query']) ? '?' . $info['query'] : '')); + + if (is_null($rule) && isset($info['query'])) { + $rule = $this->app['route']->getName($url); + // 解析地址里面参数 合并到vars + parse_str($info['query'], $params); + $vars = array_merge($params, $vars); + unset($info['query']); + } + } + + if (!empty($rule) && $match = $this->getRuleUrl($rule, $vars)) { + // 匹配路由命名标识 + $url = $match[0]; + + if (!empty($match[1])) { + $host = $this->app['config']->get('app_host') ?: $this->app['request']->host(); + if ($domain || $match[1] != $host) { + $domain = $match[1]; + } + } + + if (!is_null($match[2])) { + $suffix = $match[2]; + } + } elseif (!empty($rule) && isset($name)) { + throw new \InvalidArgumentException('route name not exists:' . $name); + } else { + // 检查别名路由 + $alias = $this->app['route']->getAlias(); + $matchAlias = false; + + if ($alias) { + // 别名路由解析 + foreach ($alias as $key => $item) { + $val = $item->getRoute(); + + if (0 === strpos($url, $val)) { + $url = $key . substr($url, strlen($val)); + $matchAlias = true; + break; + } + } + } + + if (!$matchAlias) { + // 路由标识不存在 直接解析 + $url = $this->parseUrl($url); + } + + if (isset($info['query'])) { + // 解析地址里面参数 合并到vars + parse_str($info['query'], $params); + $vars = array_merge($params, $vars); + } + } + + // 检测URL绑定 + if (!$this->bindCheck) { + $bind = $this->app['route']->getBind($domain ?: null); + + if ($bind && 0 === strpos($url, $bind)) { + $url = substr($url, strlen($bind) + 1); + } + + } + // 还原URL分隔符 + $depr = $this->app['config']->get('pathinfo_depr'); + $url = str_replace('/', $depr, $url); + + // URL后缀 + if ('/' == substr($url, -1) || '' == $url) { + $suffix = ''; + } else { + $suffix = $this->parseSuffix($suffix); + } + + // 锚点 + $anchor = !empty($anchor) ? '#' . $anchor : ''; + + // 参数组装 + if (!empty($vars)) { + // 添加参数 + if ($this->app['config']->get('url_common_param')) { + $vars = http_build_query($vars); + $url .= $suffix . '?' . $vars . $anchor; + } else { + $paramType = $this->app['config']->get('url_param_type'); + + foreach ($vars as $var => $val) { + if ('' !== trim($val)) { + if ($paramType) { + $url .= $depr . urlencode($val); + } else { + $url .= $depr . $var . $depr . urlencode($val); + } + } + } + + $url .= $suffix . $anchor; + } + } else { + $url .= $suffix . $anchor; + } + + // 检测域名 + $domain = $this->parseDomain($url, $domain); + + // URL组装 + $url = $domain . rtrim($this->root ?: $this->app['request']->root(), '/') . '/' . ltrim($url, '/'); + + $this->bindCheck = false; + + return $url; + } + + // 直接解析URL地址 + protected function parseUrl($url) + { + $request = $this->app['request']; + + if (0 === strpos($url, '/')) { + // 直接作为路由地址解析 + $url = substr($url, 1); + } elseif (false !== strpos($url, '\\')) { + // 解析到类 + $url = ltrim(str_replace('\\', '/', $url), '/'); + } elseif (0 === strpos($url, '@')) { + // 解析到控制器 + $url = substr($url, 1); + } else { + // 解析到 模块/控制器/操作 + $module = $request->module(); + $module = $module ? $module . '/' : ''; + $controller = $request->controller(); + + if ('' == $url) { + $action = $request->action(); + } else { + $path = explode('/', $url); + $action = array_pop($path); + $controller = empty($path) ? $controller : array_pop($path); + $module = empty($path) ? $module : array_pop($path) . '/'; + } + + if ($this->app['config']->get('url_convert')) { + $action = strtolower($action); + $controller = Loader::parseName($controller); + } + + $url = $module . $controller . '/' . $action; + } + + return $url; + } + + // 检测域名 + protected function parseDomain(&$url, $domain) + { + if (!$domain) { + return ''; + } + + $rootDomain = $this->app['request']->rootDomain(); + if (true === $domain) { + + // 自动判断域名 + $domain = $this->app['config']->get('app_host') ?: $this->app['request']->host(); + + $domains = $this->app['route']->getDomains(); + + if ($domains) { + $route_domain = array_keys($domains); + foreach ($route_domain as $domain_prefix) { + if (0 === strpos($domain_prefix, '*.') && strpos($domain, ltrim($domain_prefix, '*.')) !== false) { + foreach ($domains as $key => $rule) { + $rule = is_array($rule) ? $rule[0] : $rule; + if (is_string($rule) && false === strpos($key, '*') && 0 === strpos($url, $rule)) { + $url = ltrim($url, $rule); + $domain = $key; + + // 生成对应子域名 + if (!empty($rootDomain)) { + $domain .= $rootDomain; + } + break; + } elseif (false !== strpos($key, '*')) { + if (!empty($rootDomain)) { + $domain .= $rootDomain; + } + + break; + } + } + } + } + } + } elseif (!strpos($domain, '.')) { + $domain .= '.' . $rootDomain; + } + + if (false !== strpos($domain, '://')) { + $scheme = ''; + } else { + $scheme = $this->app['request']->isSsl() || $this->app['config']->get('is_https') ? 'https://' : 'http://'; + + } + + return $scheme . $domain; + } + + // 解析URL后缀 + protected function parseSuffix($suffix) + { + if ($suffix) { + $suffix = true === $suffix ? $this->app['config']->get('url_html_suffix') : $suffix; + + if ($pos = strpos($suffix, '|')) { + $suffix = substr($suffix, 0, $pos); + } + } + + return (empty($suffix) || 0 === strpos($suffix, '.')) ? $suffix : '.' . $suffix; + } + + // 匹配路由地址 + public function getRuleUrl($rule, &$vars = []) + { + foreach ($rule as $item) { + list($url, $pattern, $domain, $suffix) = $item; + if (empty($pattern)) { + return [rtrim($url, '?/-'), $domain, $suffix]; + } + + $type = $this->app['config']->get('url_common_param'); + + foreach ($pattern as $key => $val) { + if (isset($vars[$key])) { + $url = str_replace(['[:' . $key . ']', '<' . $key . '?>', ':' . $key, '<' . $key . '>'], $type ? $vars[$key] : urlencode($vars[$key]), $url); + unset($vars[$key]); + $url = str_replace(['/?', '-?'], ['/', '-'], $url); + $result = [rtrim($url, '?/-'), $domain, $suffix]; + } elseif (2 == $val) { + $url = str_replace(['/[:' . $key . ']', '[:' . $key . ']', '<' . $key . '?>'], '', $url); + $url = str_replace(['/?', '-?'], ['/', '-'], $url); + $result = [rtrim($url, '?/-'), $domain, $suffix]; + } else { + break; + } + } + + if (isset($result)) { + return $result; + } + } + + return false; + } + + // 指定当前生成URL地址的root + public function root($root) + { + $this->root = $root; + $this->app['request']->root($root); + } +} diff --git a/thinkphp/library/think/Validate.php b/thinkphp/library/think/Validate.php new file mode 100644 index 000000000..bb1700459 --- /dev/null +++ b/thinkphp/library/think/Validate.php @@ -0,0 +1,1487 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +use think\exception\ClassNotFoundException; +use think\validate\ValidateRule; + +class Validate +{ + + /** + * 自定义验证类型 + * @var array + */ + protected static $type = []; + + /** + * 验证类型别名 + * @var array + */ + protected $alias = [ + '>' => 'gt', '>=' => 'egt', '<' => 'lt', '<=' => 'elt', '=' => 'eq', 'same' => 'eq', + ]; + + /** + * 当前验证规则 + * @var array + */ + protected $rule = []; + + /** + * 验证提示信息 + * @var array + */ + protected $message = []; + + /** + * 验证字段描述 + * @var array + */ + protected $field = []; + + /** + * 默认规则提示 + * @var array + */ + protected static $typeMsg = [ + 'require' => ':attribute require', + 'must' => ':attribute must', + 'number' => ':attribute must be numeric', + 'integer' => ':attribute must be integer', + 'float' => ':attribute must be float', + 'boolean' => ':attribute must be bool', + 'email' => ':attribute not a valid email address', + 'mobile' => ':attribute not a valid mobile', + 'array' => ':attribute must be a array', + 'accepted' => ':attribute must be yes,on or 1', + 'date' => ':attribute not a valid datetime', + 'file' => ':attribute not a valid file', + 'image' => ':attribute not a valid image', + 'alpha' => ':attribute must be alpha', + 'alphaNum' => ':attribute must be alpha-numeric', + 'alphaDash' => ':attribute must be alpha-numeric, dash, underscore', + 'activeUrl' => ':attribute not a valid domain or ip', + 'chs' => ':attribute must be chinese', + 'chsAlpha' => ':attribute must be chinese or alpha', + 'chsAlphaNum' => ':attribute must be chinese,alpha-numeric', + 'chsDash' => ':attribute must be chinese,alpha-numeric,underscore, dash', + 'url' => ':attribute not a valid url', + 'ip' => ':attribute not a valid ip', + 'dateFormat' => ':attribute must be dateFormat of :rule', + 'in' => ':attribute must be in :rule', + 'notIn' => ':attribute be notin :rule', + 'between' => ':attribute must between :1 - :2', + 'notBetween' => ':attribute not between :1 - :2', + 'length' => 'size of :attribute must be :rule', + 'max' => 'max size of :attribute must be :rule', + 'min' => 'min size of :attribute must be :rule', + 'after' => ':attribute cannot be less than :rule', + 'before' => ':attribute cannot exceed :rule', + 'expire' => ':attribute not within :rule', + 'allowIp' => 'access IP is not allowed', + 'denyIp' => 'access IP denied', + 'confirm' => ':attribute out of accord with :2', + 'different' => ':attribute cannot be same with :2', + 'egt' => ':attribute must greater than or equal :rule', + 'gt' => ':attribute must greater than :rule', + 'elt' => ':attribute must less than or equal :rule', + 'lt' => ':attribute must less than :rule', + 'eq' => ':attribute must equal :rule', + 'unique' => ':attribute has exists', + 'regex' => ':attribute not conform to the rules', + 'method' => 'invalid Request method', + 'token' => 'invalid token', + 'fileSize' => 'filesize not match', + 'fileExt' => 'extensions to upload is not allowed', + 'fileMime' => 'mimetype to upload is not allowed', + ]; + + /** + * 当前验证场景 + * @var array + */ + protected $currentScene = null; + + /** + * 内置正则验证规则 + * @var array + */ + protected $regex = [ + 'alpha' => '/^[A-Za-z]+$/', + 'alphaNum' => '/^[A-Za-z0-9]+$/', + 'alphaDash' => '/^[A-Za-z0-9\-\_]+$/', + 'chs' => '/^[\x{4e00}-\x{9fa5}]+$/u', + 'chsAlpha' => '/^[\x{4e00}-\x{9fa5}a-zA-Z]+$/u', + 'chsAlphaNum' => '/^[\x{4e00}-\x{9fa5}a-zA-Z0-9]+$/u', + 'chsDash' => '/^[\x{4e00}-\x{9fa5}a-zA-Z0-9\_\-]+$/u', + 'mobile' => '/^1[3-9][0-9]\d{8}$/', + 'idCard' => '/(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)/', + 'zip' => '/\d{6}/', + ]; + + /** + * Filter_var 规则 + * @var array + */ + protected $filter = [ + 'email' => FILTER_VALIDATE_EMAIL, + 'ip' => [FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6], + 'integer' => FILTER_VALIDATE_INT, + 'url' => FILTER_VALIDATE_URL, + 'macAddr' => FILTER_VALIDATE_MAC, + 'float' => FILTER_VALIDATE_FLOAT, + ]; + + /** + * 验证场景定义 + * @var array + */ + protected $scene = []; + + /** + * 验证失败错误信息 + * @var array + */ + protected $error = []; + + /** + * 是否批量验证 + * @var bool + */ + protected $batch = false; + + /** + * 场景需要验证的规则 + * @var array + */ + protected $only = []; + + /** + * 场景需要移除的验证规则 + * @var array + */ + protected $remove = []; + + /** + * 场景需要追加的验证规则 + * @var array + */ + protected $append = []; + + /** + * 架构函数 + * @access public + * @param array $rules 验证规则 + * @param array $message 验证提示信息 + * @param array $field 验证字段描述信息 + */ + public function __construct(array $rules = [], array $message = [], array $field = []) + { + $this->rule = $rules + $this->rule; + $this->message = array_merge($this->message, $message); + $this->field = array_merge($this->field, $field); + } + + /** + * 创建一个验证器类 + * @access public + * @param array $rules 验证规则 + * @param array $message 验证提示信息 + * @param array $field 验证字段描述信息 + * @return Validate + */ + public static function make(array $rules = [], array $message = [], array $field = []) + { + return new self($rules, $message, $field); + } + + /** + * 添加字段验证规则 + * @access protected + * @param string|array $name 字段名称或者规则数组 + * @param mixed $rule 验证规则或者字段描述信息 + * @return $this + */ + public function rule($name, $rule = '') + { + if (is_array($name)) { + $this->rule = $name + $this->rule; + if (is_array($rule)) { + $this->field = array_merge($this->field, $rule); + } + } else { + $this->rule[$name] = $rule; + } + + return $this; + } + + /** + * 注册扩展验证(类型)规则 + * @access public + * @param string $type 验证规则类型 + * @param mixed $callback callback方法(或闭包) + * @return void + */ + public static function extend($type, $callback = null) + { + if (is_array($type)) { + self::$type = array_merge(self::$type, $type); + } else { + self::$type[$type] = $callback; + } + } + + /** + * 设置验证规则的默认提示信息 + * @access public + * @param string|array $type 验证规则类型名称或者数组 + * @param string $msg 验证提示信息 + * @return void + */ + public static function setTypeMsg($type, $msg = null) + { + if (is_array($type)) { + self::$typeMsg = array_merge(self::$typeMsg, $type); + } else { + self::$typeMsg[$type] = $msg; + } + } + + /** + * 设置提示信息 + * @access public + * @param string|array $name 字段名称 + * @param string $message 提示信息 + * @return Validate + */ + public function message($name, $message = '') + { + if (is_array($name)) { + $this->message = array_merge($this->message, $name); + } else { + $this->message[$name] = $message; + } + + return $this; + } + + /** + * 设置验证场景 + * @access public + * @param string $name 场景名 + * @return $this + */ + public function scene($name) + { + // 设置当前场景 + $this->currentScene = $name; + + return $this; + } + + /** + * 判断是否存在某个验证场景 + * @access public + * @param string $name 场景名 + * @return bool + */ + public function hasScene($name) + { + return isset($this->scene[$name]) || method_exists($this, 'scene' . $name); + } + + /** + * 设置批量验证 + * @access public + * @param bool $batch 是否批量验证 + * @return $this + */ + public function batch($batch = true) + { + $this->batch = $batch; + + return $this; + } + + /** + * 指定需要验证的字段列表 + * @access public + * @param array $fields 字段名 + * @return $this + */ + public function only($fields) + { + $this->only = $fields; + + return $this; + } + + /** + * 移除某个字段的验证规则 + * @access public + * @param string|array $field 字段名 + * @param mixed $rule 验证规则 true 移除所有规则 + * @return $this + */ + public function remove($field, $rule = true) + { + if (is_array($field)) { + foreach ($field as $key => $rule) { + if (is_int($key)) { + $this->remove($rule); + } else { + $this->remove($key, $rule); + } + } + } else { + if (is_string($rule)) { + $rule = explode('|', $rule); + } + + $this->remove[$field] = $rule; + } + + return $this; + } + + /** + * 追加某个字段的验证规则 + * @access public + * @param string|array $field 字段名 + * @param mixed $rule 验证规则 + * @return $this + */ + public function append($field, $rule = null) + { + if (is_array($field)) { + foreach ($field as $key => $rule) { + $this->append($key, $rule); + } + } else { + if (is_string($rule)) { + $rule = explode('|', $rule); + } + + $this->append[$field] = $rule; + } + + return $this; + } + + /** + * 数据自动验证 + * @access public + * @param array $data 数据 + * @param mixed $rules 验证规则 + * @param string $scene 验证场景 + * @return bool + */ + public function check($data, $rules = [], $scene = '') + { + $this->error = []; + + if (empty($rules)) { + // 读取验证规则 + $rules = $this->rule; + } + + // 获取场景定义 + $this->getScene($scene); + + foreach ($this->append as $key => $rule) { + if (!isset($rules[$key])) { + $rules[$key] = $rule; + } + } + + foreach ($rules as $key => $rule) { + // field => 'rule1|rule2...' field => ['rule1','rule2',...] + if (strpos($key, '|')) { + // 字段|描述 用于指定属性名称 + list($key, $title) = explode('|', $key); + } else { + $title = isset($this->field[$key]) ? $this->field[$key] : $key; + } + + // 场景检测 + if (!empty($this->only) && !in_array($key, $this->only)) { + continue; + } + + // 获取数据 支持二维数组 + $value = $this->getDataValue($data, $key); + + // 字段验证 + if ($rule instanceof \Closure) { + $result = call_user_func_array($rule, [$value, $data]); + } elseif ($rule instanceof ValidateRule) { + // 验证因子 + $result = $this->checkItem($key, $value, $rule->getRule(), $data, $rule->getTitle() ?: $title, $rule->getMsg()); + } else { + $result = $this->checkItem($key, $value, $rule, $data, $title); + } + + if (true !== $result) { + // 没有返回true 则表示验证失败 + if (!empty($this->batch)) { + // 批量验证 + if (is_array($result)) { + $this->error = array_merge($this->error, $result); + } else { + $this->error[$key] = $result; + } + } else { + $this->error = $result; + return false; + } + } + } + + return !empty($this->error) ? false : true; + } + + /** + * 根据验证规则验证数据 + * @access public + * @param mixed $value 字段值 + * @param mixed $rules 验证规则 + * @return bool + */ + public function checkRule($value, $rules) + { + if ($rules instanceof \Closure) { + return call_user_func_array($rules, [$value]); + } elseif ($rules instanceof ValidateRule) { + $rules = $rules->getRule(); + } elseif (is_string($rules)) { + $rules = explode('|', $rules); + } + + foreach ($rules as $key => $rule) { + if ($rule instanceof \Closure) { + $result = call_user_func_array($rule, [$value]); + } else { + // 判断验证类型 + list($type, $rule) = $this->getValidateType($key, $rule); + + $callback = isset(self::$type[$type]) ? self::$type[$type] : [$this, $type]; + + $result = call_user_func_array($callback, [$value, $rule]); + } + + if (true !== $result) { + return $result; + } + } + + return true; + } + + /** + * 验证单个字段规则 + * @access protected + * @param string $field 字段名 + * @param mixed $value 字段值 + * @param mixed $rules 验证规则 + * @param array $data 数据 + * @param string $title 字段描述 + * @param array $msg 提示信息 + * @return mixed + */ + protected function checkItem($field, $value, $rules, $data, $title = '', $msg = []) + { + if (isset($this->remove[$field]) && true === $this->remove[$field] && empty($this->append[$field])) { + // 字段已经移除 无需验证 + return true; + } + + // 支持多规则验证 require|in:a,b,c|... 或者 ['require','in'=>'a,b,c',...] + if (is_string($rules)) { + $rules = explode('|', $rules); + } + + if (isset($this->append[$field])) { + // 追加额外的验证规则 + $rules = array_merge($rules, $this->append[$field]); + } + + $i = 0; + foreach ($rules as $key => $rule) { + if ($rule instanceof \Closure) { + $result = call_user_func_array($rule, [$value, $data]); + $info = is_numeric($key) ? '' : $key; + } else { + // 判断验证类型 + list($type, $rule, $info) = $this->getValidateType($key, $rule); + + if (isset($this->append[$field]) && in_array($info, $this->append[$field])) { + + } elseif (isset($this->remove[$field]) && in_array($info, $this->remove[$field])) { + // 规则已经移除 + $i++; + continue; + } + + if ('must' == $info || 0 === strpos($info, 'require') || (!is_null($value) && '' !== $value)) { + // 验证类型 + $callback = isset(self::$type[$type]) ? self::$type[$type] : [$this, $type]; + // 验证数据 + $result = call_user_func_array($callback, [$value, $rule, $data, $field, $title]); + } else { + $result = true; + } + } + + if (false === $result) { + // 验证失败 返回错误信息 + if (!empty($msg[$i])) { + $message = $msg[$i]; + if (is_string($message) && strpos($message, '{%') === 0) { + $message = Lang::get(substr($message, 2, -1)); + } + } else { + $message = $this->getRuleMsg($field, $title, $info, $rule); + } + + return $message; + } elseif (true !== $result) { + // 返回自定义错误信息 + if (is_string($result) && false !== strpos($result, ':')) { + $result = str_replace( + [':attribute', ':rule'], + [$title, (string) $rule], + $result); + } + + return $result; + } + $i++; + } + + return $result; + } + + /** + * 获取当前验证类型及规则 + * @access public + * @param mixed $key + * @param mixed $rule + * @return array + */ + protected function getValidateType($key, $rule) + { + // 判断验证类型 + if (!is_numeric($key)) { + return [$key, $rule, $key]; + } + + if (strpos($rule, ':')) { + list($type, $rule) = explode(':', $rule, 2); + if (isset($this->alias[$type])) { + // 判断别名 + $type = $this->alias[$type]; + } + $info = $type; + } elseif (method_exists($this, $rule)) { + $type = $rule; + $info = $rule; + $rule = ''; + } else { + $type = 'is'; + $info = $rule; + } + + return [$type, $rule, $info]; + } + + /** + * 验证是否和某个字段的值一致 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @param array $data 数据 + * @param string $field 字段名 + * @return bool + */ + public function confirm($value, $rule, $data = [], $field = '') + { + if ('' == $rule) { + if (strpos($field, '_confirm')) { + $rule = strstr($field, '_confirm', true); + } else { + $rule = $field . '_confirm'; + } + } + + return $this->getDataValue($data, $rule) === $value; + } + + /** + * 验证是否和某个字段的值是否不同 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @param array $data 数据 + * @return bool + */ + public function different($value, $rule, $data = []) + { + return $this->getDataValue($data, $rule) != $value; + } + + /** + * 验证是否大于等于某个值 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @param array $data 数据 + * @return bool + */ + public function egt($value, $rule, $data = []) + { + return $value >= $this->getDataValue($data, $rule); + } + + /** + * 验证是否大于某个值 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @param array $data 数据 + * @return bool + */ + public function gt($value, $rule, $data) + { + return $value > $this->getDataValue($data, $rule); + } + + /** + * 验证是否小于等于某个值 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @param array $data 数据 + * @return bool + */ + public function elt($value, $rule, $data = []) + { + return $value <= $this->getDataValue($data, $rule); + } + + /** + * 验证是否小于某个值 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @param array $data 数据 + * @return bool + */ + public function lt($value, $rule, $data = []) + { + return $value < $this->getDataValue($data, $rule); + } + + /** + * 验证是否等于某个值 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @return bool + */ + public function eq($value, $rule) + { + return $value == $rule; + } + + /** + * 必须验证 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @return bool + */ + public function must($value, $rule = null) + { + return !empty($value) || '0' == $value; + } + + /** + * 验证字段值是否为有效格式 + * @access public + * @param mixed $value 字段值 + * @param string $rule 验证规则 + * @param array $data 验证数据 + * @return bool + */ + public function is($value, $rule, $data = []) + { + switch (Loader::parseName($rule, 1, false)) { + case 'require': + // 必须 + $result = !empty($value) || '0' == $value; + break; + case 'accepted': + // 接受 + $result = in_array($value, ['1', 'on', 'yes']); + break; + case 'date': + // 是否是一个有效日期 + $result = false !== strtotime($value); + break; + case 'activeUrl': + // 是否为有效的网址 + $result = checkdnsrr($value); + break; + case 'boolean': + case 'bool': + // 是否为布尔值 + $result = in_array($value, [true, false, 0, 1, '0', '1'], true); + break; + case 'number': + $result = ctype_digit((string) $value); + break; + case 'array': + // 是否为数组 + $result = is_array($value); + break; + case 'file': + $result = $value instanceof File; + break; + case 'image': + $result = $value instanceof File && in_array($this->getImageType($value->getRealPath()), [1, 2, 3, 6]); + break; + case 'token': + $result = $this->token($value, '__token__', $data); + break; + default: + if (isset(self::$type[$rule])) { + // 注册的验证规则 + $result = call_user_func_array(self::$type[$rule], [$value]); + } elseif (isset($this->filter[$rule])) { + // Filter_var验证规则 + $result = $this->filter($value, $this->filter[$rule]); + } else { + // 正则验证 + $result = $this->regex($value, $rule); + } + } + + return $result; + } + + // 判断图像类型 + protected function getImageType($image) + { + if (function_exists('exif_imagetype')) { + return exif_imagetype($image); + } + + try { + $info = getimagesize($image); + return $info ? $info[2] : false; + } catch (\Exception $e) { + return false; + } + } + + /** + * 验证是否为合格的域名或者IP 支持A,MX,NS,SOA,PTR,CNAME,AAAA,A6, SRV,NAPTR,TXT 或者 ANY类型 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @return bool + */ + public function activeUrl($value, $rule = 'MX') + { + if (!in_array($rule, ['A', 'MX', 'NS', 'SOA', 'PTR', 'CNAME', 'AAAA', 'A6', 'SRV', 'NAPTR', 'TXT', 'ANY'])) { + $rule = 'MX'; + } + + return checkdnsrr($value, $rule); + } + + /** + * 验证是否有效IP + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 ipv4 ipv6 + * @return bool + */ + public function ip($value, $rule = 'ipv4') + { + if (!in_array($rule, ['ipv4', 'ipv6'])) { + $rule = 'ipv4'; + } + + return $this->filter($value, [FILTER_VALIDATE_IP, 'ipv6' == $rule ? FILTER_FLAG_IPV6 : FILTER_FLAG_IPV4]); + } + + /** + * 验证上传文件后缀 + * @access public + * @param mixed $file 上传文件 + * @param mixed $rule 验证规则 + * @return bool + */ + public function fileExt($file, $rule) + { + if (is_array($file)) { + foreach ($file as $item) { + if (!($item instanceof File) || !$item->checkExt($rule)) { + return false; + } + } + return true; + } elseif ($file instanceof File) { + return $file->checkExt($rule); + } + + return false; + } + + /** + * 验证上传文件类型 + * @access public + * @param mixed $file 上传文件 + * @param mixed $rule 验证规则 + * @return bool + */ + public function fileMime($file, $rule) + { + if (is_array($file)) { + foreach ($file as $item) { + if (!($item instanceof File) || !$item->checkMime($rule)) { + return false; + } + } + return true; + } elseif ($file instanceof File) { + return $file->checkMime($rule); + } + + return false; + } + + /** + * 验证上传文件大小 + * @access public + * @param mixed $file 上传文件 + * @param mixed $rule 验证规则 + * @return bool + */ + public function fileSize($file, $rule) + { + if (is_array($file)) { + foreach ($file as $item) { + if (!($item instanceof File) || !$item->checkSize($rule)) { + return false; + } + } + return true; + } elseif ($file instanceof File) { + return $file->checkSize($rule); + } + + return false; + } + + /** + * 验证图片的宽高及类型 + * @access public + * @param mixed $file 上传文件 + * @param mixed $rule 验证规则 + * @return bool + */ + public function image($file, $rule) + { + if (!($file instanceof File)) { + return false; + } + + if ($rule) { + $rule = explode(',', $rule); + + list($width, $height, $type) = getimagesize($file->getRealPath()); + + if (isset($rule[2])) { + $imageType = strtolower($rule[2]); + + if ('jpeg' == $imageType) { + $imageType = 'jpg'; + } + + if (image_type_to_extension($type, false) != $imageType) { + return false; + } + } + + list($w, $h) = $rule; + + return $w == $width && $h == $height; + } + + return in_array($this->getImageType($file->getRealPath()), [1, 2, 3, 6]); + } + + /** + * 验证请求类型 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @return bool + */ + public function method($value, $rule) + { + $method = Container::get('request')->method(); + return strtoupper($rule) == $method; + } + + /** + * 验证时间和日期是否符合指定格式 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @return bool + */ + public function dateFormat($value, $rule) + { + $info = date_parse_from_format($rule, $value); + return 0 == $info['warning_count'] && 0 == $info['error_count']; + } + + /** + * 验证是否唯一 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 格式:数据表,字段名,排除ID,主键名 + * @param array $data 数据 + * @param string $field 验证字段名 + * @return bool + */ + public function unique($value, $rule, $data, $field) + { + if (is_string($rule)) { + $rule = explode(',', $rule); + } + + if (false !== strpos($rule[0], '\\')) { + // 指定模型类 + $db = new $rule[0]; + } else { + try { + $db = Container::get('app')->model($rule[0]); + } catch (ClassNotFoundException $e) { + $db = Db::name($rule[0]); + } + } + + $key = isset($rule[1]) ? $rule[1] : $field; + + if (strpos($key, '^')) { + // 支持多个字段验证 + $fields = explode('^', $key); + foreach ($fields as $key) { + $map[] = [$key, '=', $data[$key]]; + } + } else { + $map[] = [$key, '=', $data[$field]]; + } + + $pk = !empty($rule[3]) ? $rule[3] : $db->getPk(); + + if (is_string($pk)) { + if (isset($rule[2])) { + $map[] = [$pk, '<>', $rule[2]]; + } elseif (isset($data[$pk])) { + $map[] = [$pk, '<>', $data[$pk]]; + } + } + + if ($db->where($map)->field($pk)->find()) { + return false; + } + + return true; + } + + /** + * 使用行为类验证 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @param array $data 数据 + * @return mixed + */ + public function behavior($value, $rule, $data) + { + return Container::get('hook')->exec($rule, $data); + } + + /** + * 使用filter_var方式验证 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @return bool + */ + public function filter($value, $rule) + { + if (is_string($rule) && strpos($rule, ',')) { + list($rule, $param) = explode(',', $rule); + } elseif (is_array($rule)) { + $param = isset($rule[1]) ? $rule[1] : null; + $rule = $rule[0]; + } else { + $param = null; + } + + return false !== filter_var($value, is_int($rule) ? $rule : filter_id($rule), $param); + } + + /** + * 验证某个字段等于某个值的时候必须 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @param array $data 数据 + * @return bool + */ + public function requireIf($value, $rule, $data) + { + list($field, $val) = explode(',', $rule); + + if ($this->getDataValue($data, $field) == $val) { + return !empty($value) || '0' == $value; + } + + return true; + } + + /** + * 通过回调方法验证某个字段是否必须 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @param array $data 数据 + * @return bool + */ + public function requireCallback($value, $rule, $data) + { + $result = call_user_func_array($rule, [$value, $data]); + + if ($result) { + return !empty($value) || '0' == $value; + } + + return true; + } + + /** + * 验证某个字段有值的情况下必须 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @param array $data 数据 + * @return bool + */ + public function requireWith($value, $rule, $data) + { + $val = $this->getDataValue($data, $rule); + + if (!empty($val)) { + return !empty($value) || '0' == $value; + } + + return true; + } + + /** + * 验证是否在范围内 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @return bool + */ + public function in($value, $rule) + { + return in_array($value, is_array($rule) ? $rule : explode(',', $rule)); + } + + /** + * 验证是否不在某个范围 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @return bool + */ + public function notIn($value, $rule) + { + return !in_array($value, is_array($rule) ? $rule : explode(',', $rule)); + } + + /** + * between验证数据 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @return bool + */ + public function between($value, $rule) + { + if (is_string($rule)) { + $rule = explode(',', $rule); + } + list($min, $max) = $rule; + + return $value >= $min && $value <= $max; + } + + /** + * 使用notbetween验证数据 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @return bool + */ + public function notBetween($value, $rule) + { + if (is_string($rule)) { + $rule = explode(',', $rule); + } + list($min, $max) = $rule; + + return $value < $min || $value > $max; + } + + /** + * 验证数据长度 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @return bool + */ + public function length($value, $rule) + { + if (is_array($value)) { + $length = count($value); + } elseif ($value instanceof File) { + $length = $value->getSize(); + } else { + $length = mb_strlen((string) $value); + } + + if (strpos($rule, ',')) { + // 长度区间 + list($min, $max) = explode(',', $rule); + return $length >= $min && $length <= $max; + } + + // 指定长度 + return $length == $rule; + } + + /** + * 验证数据最大长度 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @return bool + */ + public function max($value, $rule) + { + if (is_array($value)) { + $length = count($value); + } elseif ($value instanceof File) { + $length = $value->getSize(); + } else { + $length = mb_strlen((string) $value); + } + + return $length <= $rule; + } + + /** + * 验证数据最小长度 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @return bool + */ + public function min($value, $rule) + { + if (is_array($value)) { + $length = count($value); + } elseif ($value instanceof File) { + $length = $value->getSize(); + } else { + $length = mb_strlen((string) $value); + } + + return $length >= $rule; + } + + /** + * 验证日期 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @return bool + */ + public function after($value, $rule) + { + return strtotime($value) >= strtotime($rule); + } + + /** + * 验证日期 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @return bool + */ + public function before($value, $rule) + { + return strtotime($value) <= strtotime($rule); + } + + /** + * 验证有效期 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @return bool + */ + public function expire($value, $rule) + { + if (is_string($rule)) { + $rule = explode(',', $rule); + } + + list($start, $end) = $rule; + + if (!is_numeric($start)) { + $start = strtotime($start); + } + + if (!is_numeric($end)) { + $end = strtotime($end); + } + + return $_SERVER['REQUEST_TIME'] >= $start && $_SERVER['REQUEST_TIME'] <= $end; + } + + /** + * 验证IP许可 + * @access public + * @param string $value 字段值 + * @param mixed $rule 验证规则 + * @return mixed + */ + public function allowIp($value, $rule) + { + return in_array($value, is_array($rule) ? $rule : explode(',', $rule)); + } + + /** + * 验证IP禁用 + * @access public + * @param string $value 字段值 + * @param mixed $rule 验证规则 + * @return mixed + */ + public function denyIp($value, $rule) + { + return !in_array($value, is_array($rule) ? $rule : explode(',', $rule)); + } + + /** + * 使用正则验证数据 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 正则规则或者预定义正则名 + * @return bool + */ + public function regex($value, $rule) + { + if (isset($this->regex[$rule])) { + $rule = $this->regex[$rule]; + } + + if (0 !== strpos($rule, '/') && !preg_match('/\/[imsU]{0,4}$/', $rule)) { + // 不是正则表达式则两端补上/ + $rule = '/^' . $rule . '$/'; + } + + return is_scalar($value) && 1 === preg_match($rule, (string) $value); + } + + /** + * 验证表单令牌 + * @access public + * @param mixed $value 字段值 + * @param mixed $rule 验证规则 + * @param array $data 数据 + * @return bool + */ + public function token($value, $rule, $data) + { + $rule = !empty($rule) ? $rule : '__token__'; + $session = Container::get('session'); + + if (!isset($data[$rule]) || !$session->has($rule)) { + // 令牌数据无效 + return false; + } + + // 令牌验证 + if (isset($data[$rule]) && $session->get($rule) === $data[$rule]) { + // 防止重复提交 + $session->delete($rule); // 验证完成销毁session + return true; + } + + // 开启TOKEN重置 + $session->delete($rule); + + return false; + } + + // 获取错误信息 + public function getError() + { + return $this->error; + } + + /** + * 获取数据值 + * @access protected + * @param array $data 数据 + * @param string $key 数据标识 支持二维 + * @return mixed + */ + protected function getDataValue($data, $key) + { + if (is_numeric($key)) { + $value = $key; + } elseif (strpos($key, '.')) { + // 支持二维数组验证 + list($name1, $name2) = explode('.', $key); + $value = isset($data[$name1][$name2]) ? $data[$name1][$name2] : null; + } else { + $value = isset($data[$key]) ? $data[$key] : null; + } + + return $value; + } + + /** + * 获取验证规则的错误提示信息 + * @access protected + * @param string $attribute 字段英文名 + * @param string $title 字段描述名 + * @param string $type 验证规则名称 + * @param mixed $rule 验证规则数据 + * @return string + */ + protected function getRuleMsg($attribute, $title, $type, $rule) + { + $lang = Container::get('lang'); + + if (isset($this->message[$attribute . '.' . $type])) { + $msg = $this->message[$attribute . '.' . $type]; + } elseif (isset($this->message[$attribute][$type])) { + $msg = $this->message[$attribute][$type]; + } elseif (isset($this->message[$attribute])) { + $msg = $this->message[$attribute]; + } elseif (isset(self::$typeMsg[$type])) { + $msg = self::$typeMsg[$type]; + } elseif (0 === strpos($type, 'require')) { + $msg = self::$typeMsg['require']; + } else { + $msg = $title . $lang->get('not conform to the rules'); + } + + if (is_string($msg) && 0 === strpos($msg, '{%')) { + $msg = $lang->get(substr($msg, 2, -1)); + } elseif ($lang->has($msg)) { + $msg = $lang->get($msg); + } + + if (is_string($msg) && is_scalar($rule) && false !== strpos($msg, ':')) { + // 变量替换 + if (is_string($rule) && strpos($rule, ',')) { + $array = array_pad(explode(',', $rule), 3, ''); + } else { + $array = array_pad([], 3, ''); + } + $msg = str_replace( + [':attribute', ':rule', ':1', ':2', ':3'], + [$title, (string) $rule, $array[0], $array[1], $array[2]], + $msg); + } + + return $msg; + } + + /** + * 获取数据验证的场景 + * @access protected + * @param string $scene 验证场景 + * @return void + */ + protected function getScene($scene = '') + { + if (empty($scene)) { + // 读取指定场景 + $scene = $this->currentScene; + } + + $this->only = $this->append = $this->remove = []; + + if (empty($scene)) { + return; + } + + if (method_exists($this, 'scene' . $scene)) { + call_user_func([$this, 'scene' . $scene]); + } elseif (isset($this->scene[$scene])) { + // 如果设置了验证适用场景 + $scene = $this->scene[$scene]; + + if (is_string($scene)) { + $scene = explode(',', $scene); + } + + $this->only = $scene; + } + } + + /** + * 动态方法 直接调用is方法进行验证 + * @access public + * @param string $method 方法名 + * @param array $args 调用参数 + * @return bool + */ + public function __call($method, $args) + { + if ('is' == strtolower(substr($method, 0, 2))) { + $method = substr($method, 2); + } + + array_push($args, lcfirst($method)); + + return call_user_func_array([$this, 'is'], $args); + } +} diff --git a/thinkphp/library/think/View.php b/thinkphp/library/think/View.php new file mode 100644 index 000000000..6127235d9 --- /dev/null +++ b/thinkphp/library/think/View.php @@ -0,0 +1,236 @@ + +// +---------------------------------------------------------------------- + +namespace think; + +class View +{ + /** + * 模板引擎实例 + * @var object + */ + public $engine; + + /** + * 模板变量 + * @var array + */ + protected $data = []; + + /** + * 内容过滤 + * @var mixed + */ + protected $filter; + + /** + * 全局模板变量 + * @var array + */ + protected static $var = []; + + /** + * 初始化 + * @access public + * @param mixed $engine 模板引擎参数 + * @return $this + */ + public function init($engine = []) + { + // 初始化模板引擎 + $this->engine($engine); + + return $this; + } + + /** + * 模板变量静态赋值 + * @access public + * @param mixed $name 变量名 + * @param mixed $value 变量值 + * @return $this + */ + public function share($name, $value = '') + { + if (is_array($name)) { + self::$var = array_merge(self::$var, $name); + } else { + self::$var[$name] = $value; + } + + return $this; + } + + /** + * 模板变量赋值 + * @access public + * @param mixed $name 变量名 + * @param mixed $value 变量值 + * @return $this + */ + public function assign($name, $value = '') + { + if (is_array($name)) { + $this->data = array_merge($this->data, $name); + } else { + $this->data[$name] = $value; + } + + return $this; + } + + /** + * 设置当前模板解析的引擎 + * @access public + * @param array|string $options 引擎参数 + * @return $this + */ + public function engine($options = []) + { + if (is_string($options)) { + $type = $options; + $options = []; + } else { + $type = !empty($options['type']) ? $options['type'] : 'Think'; + } + + $class = false !== strpos($type, '\\') ? $type : '\\think\\view\\driver\\' . ucfirst($type); + + if (isset($options['type'])) { + unset($options['type']); + } + + $this->engine = new $class($options); + + return $this; + } + + /** + * 配置模板引擎 + * @access public + * @param string|array $name 参数名 + * @param mixed $value 参数值 + * @return $this + */ + public function config($name, $value = null) + { + $this->engine->config($name, $value); + + return $this; + } + + /** + * 检查模板是否存在 + * @access public + * @param string|array $name 参数名 + * @return bool + */ + public function exists($name) + { + return $this->engine->exists($name); + } + + /** + * 视图过滤 + * @access public + * @param Callable $filter 过滤方法或闭包 + * @return $this + */ + public function filter($filter) + { + $this->filter = $filter; + return $this; + } + + /** + * 解析和获取模板内容 用于输出 + * @access public + * @param string $template 模板文件名或者内容 + * @param array $vars 模板输出变量 + * @param array $config 模板参数 + * @param bool $renderContent 是否渲染内容 + * @return string + * @throws \Exception + */ + public function fetch($template = '', $vars = [], $config = [], $renderContent = false) + { + // 模板变量 + $vars = array_merge(self::$var, $this->data, $vars); + + // 页面缓存 + ob_start(); + ob_implicit_flush(0); + + // 渲染输出 + try { + $method = $renderContent ? 'display' : 'fetch'; + $this->engine->$method($template, $vars, $config); + } catch (\Exception $e) { + ob_end_clean(); + throw $e; + } + + // 获取并清空缓存 + $content = ob_get_clean(); + + if ($this->filter) { + $content = call_user_func_array($this->filter, [$content]); + } + + return $content; + } + + /** + * 渲染内容输出 + * @access public + * @param string $content 内容 + * @param array $vars 模板输出变量 + * @param array $config 模板参数 + * @return mixed + */ + public function display($content, $vars = [], $config = []) + { + return $this->fetch($content, $vars, $config, true); + } + + /** + * 模板变量赋值 + * @access public + * @param string $name 变量名 + * @param mixed $value 变量值 + */ + public function __set($name, $value) + { + $this->data[$name] = $value; + } + + /** + * 取得模板显示变量的值 + * @access protected + * @param string $name 模板变量 + * @return mixed + */ + public function __get($name) + { + return $this->data[$name]; + } + + /** + * 检测模板变量是否设置 + * @access public + * @param string $name 模板变量名 + * @return bool + */ + public function __isset($name) + { + return isset($this->data[$name]); + } +} diff --git a/thinkphp/library/think/cache/Driver.php b/thinkphp/library/think/cache/Driver.php new file mode 100644 index 000000000..f0ec7baf4 --- /dev/null +++ b/thinkphp/library/think/cache/Driver.php @@ -0,0 +1,353 @@ + +// +---------------------------------------------------------------------- + +namespace think\cache; + +use think\Container; + +/** + * 缓存基础类 + */ +abstract class Driver +{ + /** + * 驱动句柄 + * @var object + */ + protected $handler = null; + + /** + * 缓存读取次数 + * @var integer + */ + protected $readTimes = 0; + + /** + * 缓存写入次数 + * @var integer + */ + protected $writeTimes = 0; + + /** + * 缓存参数 + * @var array + */ + protected $options = []; + + /** + * 缓存标签 + * @var string + */ + protected $tag; + + /** + * 序列化方法 + * @var array + */ + protected static $serialize = ['serialize', 'unserialize', 'think_serialize:', 16]; + + /** + * 判断缓存是否存在 + * @access public + * @param string $name 缓存变量名 + * @return bool + */ + abstract public function has($name); + + /** + * 读取缓存 + * @access public + * @param string $name 缓存变量名 + * @param mixed $default 默认值 + * @return mixed + */ + abstract public function get($name, $default = false); + + /** + * 写入缓存 + * @access public + * @param string $name 缓存变量名 + * @param mixed $value 存储数据 + * @param int $expire 有效时间 0为永久 + * @return boolean + */ + abstract public function set($name, $value, $expire = null); + + /** + * 自增缓存(针对数值缓存) + * @access public + * @param string $name 缓存变量名 + * @param int $step 步长 + * @return false|int + */ + abstract public function inc($name, $step = 1); + + /** + * 自减缓存(针对数值缓存) + * @access public + * @param string $name 缓存变量名 + * @param int $step 步长 + * @return false|int + */ + abstract public function dec($name, $step = 1); + + /** + * 删除缓存 + * @access public + * @param string $name 缓存变量名 + * @return boolean + */ + abstract public function rm($name); + + /** + * 清除缓存 + * @access public + * @param string $tag 标签名 + * @return boolean + */ + abstract public function clear($tag = null); + + /** + * 获取有效期 + * @access protected + * @param integer|\DateTime $expire 有效期 + * @return integer + */ + protected function getExpireTime($expire) + { + if ($expire instanceof \DateTime) { + $expire = $expire->getTimestamp() - time(); + } + + return $expire; + } + + /** + * 获取实际的缓存标识 + * @access protected + * @param string $name 缓存名 + * @return string + */ + protected function getCacheKey($name) + { + return $this->options['prefix'] . $name; + } + + /** + * 读取缓存并删除 + * @access public + * @param string $name 缓存变量名 + * @return mixed + */ + public function pull($name) + { + $result = $this->get($name, false); + + if ($result) { + $this->rm($name); + return $result; + } else { + return; + } + } + + /** + * 如果不存在则写入缓存 + * @access public + * @param string $name 缓存变量名 + * @param mixed $value 存储数据 + * @param int $expire 有效时间 0为永久 + * @return mixed + */ + public function remember($name, $value, $expire = null) + { + if (!$this->has($name)) { + $time = time(); + while ($time + 5 > time() && $this->has($name . '_lock')) { + // 存在锁定则等待 + usleep(200000); + } + + try { + // 锁定 + $this->set($name . '_lock', true); + + if ($value instanceof \Closure) { + // 获取缓存数据 + $value = Container::getInstance()->invokeFunction($value); + } + + // 缓存数据 + $this->set($name, $value, $expire); + + // 解锁 + $this->rm($name . '_lock'); + } catch (\Exception $e) { + $this->rm($name . '_lock'); + throw $e; + } catch (\throwable $e) { + $this->rm($name . '_lock'); + throw $e; + } + } else { + $value = $this->get($name); + } + + return $value; + } + + /** + * 缓存标签 + * @access public + * @param string $name 标签名 + * @param string|array $keys 缓存标识 + * @param bool $overlay 是否覆盖 + * @return $this + */ + public function tag($name, $keys = null, $overlay = false) + { + if (is_null($name)) { + + } elseif (is_null($keys)) { + $this->tag = $name; + } else { + $key = 'tag_' . md5($name); + + if (is_string($keys)) { + $keys = explode(',', $keys); + } + + $keys = array_map([$this, 'getCacheKey'], $keys); + + if ($overlay) { + $value = $keys; + } else { + $value = array_unique(array_merge($this->getTagItem($name), $keys)); + } + + $this->set($key, implode(',', $value), 0); + } + + return $this; + } + + /** + * 更新标签 + * @access protected + * @param string $name 缓存标识 + * @return void + */ + protected function setTagItem($name) + { + if ($this->tag) { + $key = 'tag_' . md5($this->tag); + $prev = $this->tag; + $this->tag = null; + + if ($this->has($key)) { + $value = explode(',', $this->get($key)); + $value[] = $name; + $value = implode(',', array_unique($value)); + } else { + $value = $name; + } + + $this->set($key, $value, 0); + $this->tag = $prev; + } + } + + /** + * 获取标签包含的缓存标识 + * @access protected + * @param string $tag 缓存标签 + * @return array + */ + protected function getTagItem($tag) + { + $key = 'tag_' . md5($tag); + $value = $this->get($key); + + if ($value) { + return array_filter(explode(',', $value)); + } else { + return []; + } + } + + /** + * 序列化数据 + * @access protected + * @param mixed $data + * @return string + */ + protected function serialize($data) + { + if (is_scalar($data) || !$this->options['serialize']) { + return $data; + } + + $serialize = self::$serialize[0]; + + return self::$serialize[2] . $serialize($data); + } + + /** + * 反序列化数据 + * @access protected + * @param string $data + * @return mixed + */ + protected function unserialize($data) + { + if ($this->options['serialize'] && 0 === strpos($data, self::$serialize[2])) { + $unserialize = self::$serialize[1]; + + return $unserialize(substr($data, self::$serialize[3])); + } else { + return $data; + } + } + + /** + * 注册序列化机制 + * @access public + * @param callable $serialize 序列化方法 + * @param callable $unserialize 反序列化方法 + * @param string $prefix 序列化前缀标识 + * @return $this + */ + public static function registerSerialize($serialize, $unserialize, $prefix = 'think_serialize:') + { + self::$serialize = [$serialize, $unserialize, $prefix, strlen($prefix)]; + } + + /** + * 返回句柄对象,可执行其它高级方法 + * + * @access public + * @return object + */ + public function handler() + { + return $this->handler; + } + + public function getReadTimes() + { + return $this->readTimes; + } + + public function getWriteTimes() + { + return $this->writeTimes; + } +} diff --git a/thinkphp/library/think/cache/driver/File.php b/thinkphp/library/think/cache/driver/File.php new file mode 100644 index 000000000..5f10200bf --- /dev/null +++ b/thinkphp/library/think/cache/driver/File.php @@ -0,0 +1,305 @@ + +// +---------------------------------------------------------------------- + +namespace think\cache\driver; + +use think\cache\Driver; +use think\Container; + +/** + * 文件类型缓存类 + * @author liu21st + */ +class File extends Driver +{ + protected $options = [ + 'expire' => 0, + 'cache_subdir' => true, + 'prefix' => '', + 'path' => '', + 'hash_type' => 'md5', + 'data_compress' => false, + 'serialize' => true, + ]; + + protected $expire; + + /** + * 架构函数 + * @param array $options + */ + public function __construct($options = []) + { + if (!empty($options)) { + $this->options = array_merge($this->options, $options); + } + + if (empty($this->options['path'])) { + $this->options['path'] = Container::get('app')->getRuntimePath() . 'cache' . DIRECTORY_SEPARATOR; + } elseif (substr($this->options['path'], -1) != DIRECTORY_SEPARATOR) { + $this->options['path'] .= DIRECTORY_SEPARATOR; + } + + $this->init(); + } + + /** + * 初始化检查 + * @access private + * @return boolean + */ + private function init() + { + // 创建项目缓存目录 + try { + if (!is_dir($this->options['path']) && mkdir($this->options['path'], 0755, true)) { + return true; + } + } catch (\Exception $e) { + } + + return false; + } + + /** + * 取得变量的存储文件名 + * @access protected + * @param string $name 缓存变量名 + * @param bool $auto 是否自动创建目录 + * @return string + */ + protected function getCacheKey($name, $auto = false) + { + $name = hash($this->options['hash_type'], $name); + + if ($this->options['cache_subdir']) { + // 使用子目录 + $name = substr($name, 0, 2) . DIRECTORY_SEPARATOR . substr($name, 2); + } + + if ($this->options['prefix']) { + $name = $this->options['prefix'] . DIRECTORY_SEPARATOR . $name; + } + + $filename = $this->options['path'] . $name . '.php'; + $dir = dirname($filename); + + if ($auto && !is_dir($dir)) { + try { + mkdir($dir, 0755, true); + } catch (\Exception $e) { + } + } + + return $filename; + } + + /** + * 判断缓存是否存在 + * @access public + * @param string $name 缓存变量名 + * @return bool + */ + public function has($name) + { + return $this->get($name) ? true : false; + } + + /** + * 读取缓存 + * @access public + * @param string $name 缓存变量名 + * @param mixed $default 默认值 + * @return mixed + */ + public function get($name, $default = false) + { + $this->readTimes++; + + $filename = $this->getCacheKey($name); + + if (!is_file($filename)) { + return $default; + } + + $content = file_get_contents($filename); + $this->expire = null; + + if (false !== $content) { + $expire = (int) substr($content, 8, 12); + if (0 != $expire && time() > filemtime($filename) + $expire) { + //缓存过期删除缓存文件 + $this->unlink($filename); + return $default; + } + + $this->expire = $expire; + $content = substr($content, 32); + + if ($this->options['data_compress'] && function_exists('gzcompress')) { + //启用数据压缩 + $content = gzuncompress($content); + } + return $this->unserialize($content); + } else { + return $default; + } + } + + /** + * 写入缓存 + * @access public + * @param string $name 缓存变量名 + * @param mixed $value 存储数据 + * @param int|\DateTime $expire 有效时间 0为永久 + * @return boolean + */ + public function set($name, $value, $expire = null) + { + $this->writeTimes++; + + if (is_null($expire)) { + $expire = $this->options['expire']; + } + + $expire = $this->getExpireTime($expire); + $filename = $this->getCacheKey($name, true); + + if ($this->tag && !is_file($filename)) { + $first = true; + } + + $data = $this->serialize($value); + + if ($this->options['data_compress'] && function_exists('gzcompress')) { + //数据压缩 + $data = gzcompress($data, 3); + } + + $data = "\n" . $data; + $result = file_put_contents($filename, $data); + + if ($result) { + isset($first) && $this->setTagItem($filename); + clearstatcache(); + return true; + } else { + return false; + } + } + + /** + * 自增缓存(针对数值缓存) + * @access public + * @param string $name 缓存变量名 + * @param int $step 步长 + * @return false|int + */ + public function inc($name, $step = 1) + { + if ($this->has($name)) { + $value = $this->get($name) + $step; + $expire = $this->expire; + } else { + $value = $step; + $expire = 0; + } + + return $this->set($name, $value, $expire) ? $value : false; + } + + /** + * 自减缓存(针对数值缓存) + * @access public + * @param string $name 缓存变量名 + * @param int $step 步长 + * @return false|int + */ + public function dec($name, $step = 1) + { + if ($this->has($name)) { + $value = $this->get($name) - $step; + $expire = $this->expire; + } else { + $value = -$step; + $expire = 0; + } + + return $this->set($name, $value, $expire) ? $value : false; + } + + /** + * 删除缓存 + * @access public + * @param string $name 缓存变量名 + * @return boolean + */ + public function rm($name) + { + $this->writeTimes++; + + try { + return $this->unlink($this->getCacheKey($name)); + } catch (\Exception $e) { + } + } + + /** + * 清除缓存 + * @access public + * @param string $tag 标签名 + * @return boolean + */ + public function clear($tag = null) + { + if ($tag) { + // 指定标签清除 + $keys = $this->getTagItem($tag); + foreach ($keys as $key) { + $this->unlink($key); + } + $this->rm('tag_' . md5($tag)); + return true; + } + + $this->writeTimes++; + + $files = (array) glob($this->options['path'] . ($this->options['prefix'] ? $this->options['prefix'] . DIRECTORY_SEPARATOR : '') . '*'); + + foreach ($files as $path) { + if (is_dir($path)) { + $matches = glob($path . DIRECTORY_SEPARATOR . '*.php'); + if (is_array($matches)) { + array_map('unlink', $matches); + } + rmdir($path); + } else { + unlink($path); + } + } + + return true; + } + + /** + * 判断文件是否存在后,删除 + * @access private + * @param string $path + * @return bool + * @author byron sampson + * @return boolean + */ + private function unlink($path) + { + return is_file($path) && unlink($path); + } + +} diff --git a/thinkphp/library/think/cache/driver/Lite.php b/thinkphp/library/think/cache/driver/Lite.php new file mode 100644 index 000000000..544663c05 --- /dev/null +++ b/thinkphp/library/think/cache/driver/Lite.php @@ -0,0 +1,209 @@ + +// +---------------------------------------------------------------------- + +namespace think\cache\driver; + +use think\cache\Driver; + +/** + * 文件类型缓存类 + * @author liu21st + */ +class Lite extends Driver +{ + protected $options = [ + 'prefix' => '', + 'path' => '', + 'expire' => 0, // 等于 10*365*24*3600(10年) + ]; + + /** + * 架构函数 + * @access public + * + * @param array $options + */ + public function __construct($options = []) + { + if (!empty($options)) { + $this->options = array_merge($this->options, $options); + } + + if (substr($this->options['path'], -1) != DIRECTORY_SEPARATOR) { + $this->options['path'] .= DIRECTORY_SEPARATOR; + } + + } + + /** + * 取得变量的存储文件名 + * @access protected + * @param string $name 缓存变量名 + * @return string + */ + protected function getCacheKey($name) + { + return $this->options['path'] . $this->options['prefix'] . md5($name) . '.php'; + } + + /** + * 判断缓存是否存在 + * @access public + * @param string $name 缓存变量名 + * @return mixed + */ + public function has($name) + { + return $this->get($name) ? true : false; + } + + /** + * 读取缓存 + * @access public + * @param string $name 缓存变量名 + * @param mixed $default 默认值 + * @return mixed + */ + public function get($name, $default = false) + { + $this->readTimes++; + + $filename = $this->getCacheKey($name); + + if (is_file($filename)) { + // 判断是否过期 + $mtime = filemtime($filename); + + if ($mtime < time()) { + // 清除已经过期的文件 + unlink($filename); + return $default; + } + + return include $filename; + } else { + return $default; + } + } + + /** + * 写入缓存 + * @access public + * @param string $name 缓存变量名 + * @param mixed $value 存储数据 + * @param int|\DateTime $expire 有效时间 0为永久 + * @return bool + */ + public function set($name, $value, $expire = null) + { + $this->writeTimes++; + + if (is_null($expire)) { + $expire = $this->options['expire']; + } + + if ($expire instanceof \DateTime) { + $expire = $expire->getTimestamp(); + } else { + $expire = 0 === $expire ? 10 * 365 * 24 * 3600 : $expire; + $expire = time() + $expire; + } + + $filename = $this->getCacheKey($name); + + if ($this->tag && !is_file($filename)) { + $first = true; + } + + $ret = file_put_contents($filename, ("setTagItem($filename); + touch($filename, $expire); + } + + return $ret; + } + + /** + * 自增缓存(针对数值缓存) + * @access public + * @param string $name 缓存变量名 + * @param int $step 步长 + * @return false|int + */ + public function inc($name, $step = 1) + { + if ($this->has($name)) { + $value = $this->get($name) + $step; + } else { + $value = $step; + } + + return $this->set($name, $value, 0) ? $value : false; + } + + /** + * 自减缓存(针对数值缓存) + * @access public + * @param string $name 缓存变量名 + * @param int $step 步长 + * @return false|int + */ + public function dec($name, $step = 1) + { + if ($this->has($name)) { + $value = $this->get($name) - $step; + } else { + $value = -$step; + } + + return $this->set($name, $value, 0) ? $value : false; + } + + /** + * 删除缓存 + * @access public + * @param string $name 缓存变量名 + * @return boolean + */ + public function rm($name) + { + $this->writeTimes++; + + return unlink($this->getCacheKey($name)); + } + + /** + * 清除缓存 + * @access public + * @param string $tag 标签名 + * @return bool + */ + public function clear($tag = null) + { + if ($tag) { + // 指定标签清除 + $keys = $this->getTagItem($tag); + foreach ($keys as $key) { + unlink($key); + } + + $this->rm('tag_' . md5($tag)); + return true; + } + + $this->writeTimes++; + + array_map("unlink", glob($this->options['path'] . ($this->options['prefix'] ? $this->options['prefix'] . DIRECTORY_SEPARATOR : '') . '*.php')); + } +} diff --git a/thinkphp/library/think/cache/driver/Memcache.php b/thinkphp/library/think/cache/driver/Memcache.php new file mode 100644 index 000000000..ea2c0e234 --- /dev/null +++ b/thinkphp/library/think/cache/driver/Memcache.php @@ -0,0 +1,203 @@ + +// +---------------------------------------------------------------------- + +namespace think\cache\driver; + +use think\cache\Driver; + +class Memcache extends Driver +{ + protected $options = [ + 'host' => '127.0.0.1', + 'port' => 11211, + 'expire' => 0, + 'timeout' => 0, // 超时时间(单位:毫秒) + 'persistent' => true, + 'prefix' => '', + 'serialize' => true, + ]; + + /** + * 架构函数 + * @access public + * @param array $options 缓存参数 + * @throws \BadFunctionCallException + */ + public function __construct($options = []) + { + if (!extension_loaded('memcache')) { + throw new \BadFunctionCallException('not support: memcache'); + } + + if (!empty($options)) { + $this->options = array_merge($this->options, $options); + } + + $this->handler = new \Memcache; + + // 支持集群 + $hosts = explode(',', $this->options['host']); + $ports = explode(',', $this->options['port']); + + if (empty($ports[0])) { + $ports[0] = 11211; + } + + // 建立连接 + foreach ((array) $hosts as $i => $host) { + $port = isset($ports[$i]) ? $ports[$i] : $ports[0]; + $this->options['timeout'] > 0 ? + $this->handler->addServer($host, $port, $this->options['persistent'], 1, $this->options['timeout']) : + $this->handler->addServer($host, $port, $this->options['persistent'], 1); + } + } + + /** + * 判断缓存 + * @access public + * @param string $name 缓存变量名 + * @return bool + */ + public function has($name) + { + $key = $this->getCacheKey($name); + + return $this->handler->get($key) ? true : false; + } + + /** + * 读取缓存 + * @access public + * @param string $name 缓存变量名 + * @param mixed $default 默认值 + * @return mixed + */ + public function get($name, $default = false) + { + $this->readTimes++; + + $result = $this->handler->get($this->getCacheKey($name)); + + return false !== $result ? $this->unserialize($result) : $default; + } + + /** + * 写入缓存 + * @access public + * @param string $name 缓存变量名 + * @param mixed $value 存储数据 + * @param int|DateTime $expire 有效时间(秒) + * @return bool + */ + public function set($name, $value, $expire = null) + { + $this->writeTimes++; + + if (is_null($expire)) { + $expire = $this->options['expire']; + } + + if ($this->tag && !$this->has($name)) { + $first = true; + } + + $key = $this->getCacheKey($name); + $expire = $this->getExpireTime($expire); + $value = $this->serialize($value); + + if ($this->handler->set($key, $value, 0, $expire)) { + isset($first) && $this->setTagItem($key); + return true; + } + + return false; + } + + /** + * 自增缓存(针对数值缓存) + * @access public + * @param string $name 缓存变量名 + * @param int $step 步长 + * @return false|int + */ + public function inc($name, $step = 1) + { + $this->writeTimes++; + + $key = $this->getCacheKey($name); + + if ($this->handler->get($key)) { + return $this->handler->increment($key, $step); + } + + return $this->handler->set($key, $step); + } + + /** + * 自减缓存(针对数值缓存) + * @access public + * @param string $name 缓存变量名 + * @param int $step 步长 + * @return false|int + */ + public function dec($name, $step = 1) + { + $this->writeTimes++; + + $key = $this->getCacheKey($name); + $value = $this->handler->get($key) - $step; + $res = $this->handler->set($key, $value); + + return !$res ? false : $value; + } + + /** + * 删除缓存 + * @access public + * @param string $name 缓存变量名 + * @param bool|false $ttl + * @return bool + */ + public function rm($name, $ttl = false) + { + $this->writeTimes++; + + $key = $this->getCacheKey($name); + + return false === $ttl ? + $this->handler->delete($key) : + $this->handler->delete($key, $ttl); + } + + /** + * 清除缓存 + * @access public + * @param string $tag 标签名 + * @return bool + */ + public function clear($tag = null) + { + if ($tag) { + // 指定标签清除 + $keys = $this->getTagItem($tag); + foreach ($keys as $key) { + $this->handler->delete($key); + } + + $this->rm('tag_' . md5($tag)); + return true; + } + + $this->writeTimes++; + + return $this->handler->flush(); + } +} diff --git a/thinkphp/library/think/cache/driver/Memcached.php b/thinkphp/library/think/cache/driver/Memcached.php new file mode 100644 index 000000000..d04fac087 --- /dev/null +++ b/thinkphp/library/think/cache/driver/Memcached.php @@ -0,0 +1,216 @@ + +// +---------------------------------------------------------------------- + +namespace think\cache\driver; + +use think\cache\Driver; + +class Memcached extends Driver +{ + protected $options = [ + 'host' => '127.0.0.1', + 'port' => 11211, + 'expire' => 0, + 'timeout' => 0, // 超时时间(单位:毫秒) + 'prefix' => '', + 'username' => '', //账号 + 'password' => '', //密码 + 'option' => [], + 'serialize' => true, + ]; + + /** + * 架构函数 + * @access public + * @param array $options 缓存参数 + */ + public function __construct($options = []) + { + if (!extension_loaded('memcached')) { + throw new \BadFunctionCallException('not support: memcached'); + } + + if (!empty($options)) { + $this->options = array_merge($this->options, $options); + } + + $this->handler = new \Memcached; + + if (!empty($this->options['option'])) { + $this->handler->setOptions($this->options['option']); + } + + // 设置连接超时时间(单位:毫秒) + if ($this->options['timeout'] > 0) { + $this->handler->setOption(\Memcached::OPT_CONNECT_TIMEOUT, $this->options['timeout']); + } + + // 支持集群 + $hosts = explode(',', $this->options['host']); + $ports = explode(',', $this->options['port']); + if (empty($ports[0])) { + $ports[0] = 11211; + } + + // 建立连接 + $servers = []; + foreach ((array) $hosts as $i => $host) { + $servers[] = [$host, (isset($ports[$i]) ? $ports[$i] : $ports[0]), 1]; + } + + $this->handler->addServers($servers); + + if ('' != $this->options['username']) { + $this->handler->setOption(\Memcached::OPT_BINARY_PROTOCOL, true); + $this->handler->setSaslAuthData($this->options['username'], $this->options['password']); + } + } + + /** + * 判断缓存 + * @access public + * @param string $name 缓存变量名 + * @return bool + */ + public function has($name) + { + $key = $this->getCacheKey($name); + + return $this->handler->get($key) ? true : false; + } + + /** + * 读取缓存 + * @access public + * @param string $name 缓存变量名 + * @param mixed $default 默认值 + * @return mixed + */ + public function get($name, $default = false) + { + $this->readTimes++; + + $result = $this->handler->get($this->getCacheKey($name)); + + return false !== $result ? $this->unserialize($result) : $default; + } + + /** + * 写入缓存 + * @access public + * @param string $name 缓存变量名 + * @param mixed $value 存储数据 + * @param integer|\DateTime $expire 有效时间(秒) + * @return bool + */ + public function set($name, $value, $expire = null) + { + $this->writeTimes++; + + if (is_null($expire)) { + $expire = $this->options['expire']; + } + + if ($this->tag && !$this->has($name)) { + $first = true; + } + + $key = $this->getCacheKey($name); + $expire = $this->getExpireTime($expire); + $value = $this->serialize($value); + + if ($this->handler->set($key, $value, $expire)) { + isset($first) && $this->setTagItem($key); + return true; + } + + return false; + } + + /** + * 自增缓存(针对数值缓存) + * @access public + * @param string $name 缓存变量名 + * @param int $step 步长 + * @return false|int + */ + public function inc($name, $step = 1) + { + $this->writeTimes++; + + $key = $this->getCacheKey($name); + + if ($this->handler->get($key)) { + return $this->handler->increment($key, $step); + } + + return $this->handler->set($key, $step); + } + + /** + * 自减缓存(针对数值缓存) + * @access public + * @param string $name 缓存变量名 + * @param int $step 步长 + * @return false|int + */ + public function dec($name, $step = 1) + { + $this->writeTimes++; + + $key = $this->getCacheKey($name); + $value = $this->handler->get($key) - $step; + $res = $this->handler->set($key, $value); + + return !$res ? false : $value; + } + + /** + * 删除缓存 + * @access public + * @param string $name 缓存变量名 + * @param bool|false $ttl + * @return bool + */ + public function rm($name, $ttl = false) + { + $this->writeTimes++; + + $key = $this->getCacheKey($name); + + return false === $ttl ? + $this->handler->delete($key) : + $this->handler->delete($key, $ttl); + } + + /** + * 清除缓存 + * @access public + * @param string $tag 标签名 + * @return bool + */ + public function clear($tag = null) + { + if ($tag) { + // 指定标签清除 + $keys = $this->getTagItem($tag); + + $this->handler->deleteMulti($keys); + $this->rm('tag_' . md5($tag)); + + return true; + } + + $this->writeTimes++; + + return $this->handler->flush(); + } +} diff --git a/thinkphp/library/think/cache/driver/Redis.php b/thinkphp/library/think/cache/driver/Redis.php new file mode 100644 index 000000000..77958c334 --- /dev/null +++ b/thinkphp/library/think/cache/driver/Redis.php @@ -0,0 +1,206 @@ + +// +---------------------------------------------------------------------- + +namespace think\cache\driver; + +use think\cache\Driver; + +/** + * Redis缓存驱动,适合单机部署、有前端代理实现高可用的场景,性能最好 + * 有需要在业务层实现读写分离、或者使用RedisCluster的需求,请使用Redisd驱动 + * + * 要求安装phpredis扩展:https://github.com/nicolasff/phpredis + * @author 尘缘 <130775@qq.com> + */ +class Redis extends Driver +{ + protected $options = [ + 'host' => '127.0.0.1', + 'port' => 6379, + 'password' => '', + 'select' => 0, + 'timeout' => 0, + 'expire' => 0, + 'persistent' => false, + 'prefix' => '', + 'serialize' => true, + ]; + + /** + * 架构函数 + * @access public + * @param array $options 缓存参数 + */ + public function __construct($options = []) + { + if (!extension_loaded('redis')) { + throw new \BadFunctionCallException('not support: redis'); + } + + if (!empty($options)) { + $this->options = array_merge($this->options, $options); + } + + $this->handler = new \Redis; + + if ($this->options['persistent']) { + $this->handler->pconnect($this->options['host'], $this->options['port'], $this->options['timeout'], 'persistent_id_' . $this->options['select']); + } else { + $this->handler->connect($this->options['host'], $this->options['port'], $this->options['timeout']); + } + + if ('' != $this->options['password']) { + $this->handler->auth($this->options['password']); + } + + if (0 != $this->options['select']) { + $this->handler->select($this->options['select']); + } + } + + /** + * 判断缓存 + * @access public + * @param string $name 缓存变量名 + * @return bool + */ + public function has($name) + { + return $this->handler->exists($this->getCacheKey($name)); + } + + /** + * 读取缓存 + * @access public + * @param string $name 缓存变量名 + * @param mixed $default 默认值 + * @return mixed + */ + public function get($name, $default = false) + { + $this->readTimes++; + + $value = $this->handler->get($this->getCacheKey($name)); + + if (is_null($value) || false === $value) { + return $default; + } + + return $this->unserialize($value); + } + + /** + * 写入缓存 + * @access public + * @param string $name 缓存变量名 + * @param mixed $value 存储数据 + * @param integer|\DateTime $expire 有效时间(秒) + * @return boolean + */ + public function set($name, $value, $expire = null) + { + $this->writeTimes++; + + if (is_null($expire)) { + $expire = $this->options['expire']; + } + + if ($this->tag && !$this->has($name)) { + $first = true; + } + + $key = $this->getCacheKey($name); + $expire = $this->getExpireTime($expire); + + $value = $this->serialize($value); + + if ($expire) { + $result = $this->handler->setex($key, $expire, $value); + } else { + $result = $this->handler->set($key, $value); + } + + isset($first) && $this->setTagItem($key); + + return $result; + } + + /** + * 自增缓存(针对数值缓存) + * @access public + * @param string $name 缓存变量名 + * @param int $step 步长 + * @return false|int + */ + public function inc($name, $step = 1) + { + $this->writeTimes++; + + $key = $this->getCacheKey($name); + + return $this->handler->incrby($key, $step); + } + + /** + * 自减缓存(针对数值缓存) + * @access public + * @param string $name 缓存变量名 + * @param int $step 步长 + * @return false|int + */ + public function dec($name, $step = 1) + { + $this->writeTimes++; + + $key = $this->getCacheKey($name); + + return $this->handler->decrby($key, $step); + } + + /** + * 删除缓存 + * @access public + * @param string $name 缓存变量名 + * @return boolean + */ + public function rm($name) + { + $this->writeTimes++; + + return $this->handler->delete($this->getCacheKey($name)); + } + + /** + * 清除缓存 + * @access public + * @param string $tag 标签名 + * @return boolean + */ + public function clear($tag = null) + { + if ($tag) { + // 指定标签清除 + $keys = $this->getTagItem($tag); + + foreach ($keys as $key) { + $this->handler->delete($key); + } + + $this->rm('tag_' . md5($tag)); + return true; + } + + $this->writeTimes++; + + return $this->handler->flushDB(); + } + +} diff --git a/thinkphp/library/think/cache/driver/Sqlite.php b/thinkphp/library/think/cache/driver/Sqlite.php new file mode 100644 index 000000000..7e78ec12d --- /dev/null +++ b/thinkphp/library/think/cache/driver/Sqlite.php @@ -0,0 +1,233 @@ + +// +---------------------------------------------------------------------- + +namespace think\cache\driver; + +use think\cache\Driver; + +/** + * Sqlite缓存驱动 + * @author liu21st + */ +class Sqlite extends Driver +{ + protected $options = [ + 'db' => ':memory:', + 'table' => 'sharedmemory', + 'prefix' => '', + 'expire' => 0, + 'persistent' => false, + 'serialize' => true, + ]; + + /** + * 架构函数 + * @access public + * @param array $options 缓存参数 + * @throws \BadFunctionCallException + */ + public function __construct($options = []) + { + if (!extension_loaded('sqlite')) { + throw new \BadFunctionCallException('not support: sqlite'); + } + + if (!empty($options)) { + $this->options = array_merge($this->options, $options); + } + + $func = $this->options['persistent'] ? 'sqlite_popen' : 'sqlite_open'; + + $this->handler = $func($this->options['db']); + } + + /** + * 获取实际的缓存标识 + * @access public + * @param string $name 缓存名 + * @return string + */ + protected function getCacheKey($name) + { + return $this->options['prefix'] . sqlite_escape_string($name); + } + + /** + * 判断缓存 + * @access public + * @param string $name 缓存变量名 + * @return bool + */ + public function has($name) + { + $name = $this->getCacheKey($name); + + $sql = 'SELECT value FROM ' . $this->options['table'] . ' WHERE var=\'' . $name . '\' AND (expire=0 OR expire >' . time() . ') LIMIT 1'; + $result = sqlite_query($this->handler, $sql); + + return sqlite_num_rows($result); + } + + /** + * 读取缓存 + * @access public + * @param string $name 缓存变量名 + * @param mixed $default 默认值 + * @return mixed + */ + public function get($name, $default = false) + { + $this->readTimes++; + + $name = $this->getCacheKey($name); + + $sql = 'SELECT value FROM ' . $this->options['table'] . ' WHERE var=\'' . $name . '\' AND (expire=0 OR expire >' . time() . ') LIMIT 1'; + + $result = sqlite_query($this->handler, $sql); + + if (sqlite_num_rows($result)) { + $content = sqlite_fetch_single($result); + if (function_exists('gzcompress')) { + //启用数据压缩 + $content = gzuncompress($content); + } + + return $this->unserialize($content); + } + + return $default; + } + + /** + * 写入缓存 + * @access public + * @param string $name 缓存变量名 + * @param mixed $value 存储数据 + * @param integer|\DateTime $expire 有效时间(秒) + * @return boolean + */ + public function set($name, $value, $expire = null) + { + $this->writeTimes++; + + $name = $this->getCacheKey($name); + + $value = sqlite_escape_string($this->serialize($value)); + + if (is_null($expire)) { + $expire = $this->options['expire']; + } + + if ($expire instanceof \DateTime) { + $expire = $expire->getTimestamp(); + } else { + $expire = (0 == $expire) ? 0 : (time() + $expire); //缓存有效期为0表示永久缓存 + } + + if (function_exists('gzcompress')) { + //数据压缩 + $value = gzcompress($value, 3); + } + + if ($this->tag) { + $tag = $this->tag; + $this->tag = null; + } else { + $tag = ''; + } + + $sql = 'REPLACE INTO ' . $this->options['table'] . ' (var, value, expire, tag) VALUES (\'' . $name . '\', \'' . $value . '\', \'' . $expire . '\', \'' . $tag . '\')'; + + if (sqlite_query($this->handler, $sql)) { + return true; + } + + return false; + } + + /** + * 自增缓存(针对数值缓存) + * @access public + * @param string $name 缓存变量名 + * @param int $step 步长 + * @return false|int + */ + public function inc($name, $step = 1) + { + if ($this->has($name)) { + $value = $this->get($name) + $step; + } else { + $value = $step; + } + + return $this->set($name, $value, 0) ? $value : false; + } + + /** + * 自减缓存(针对数值缓存) + * @access public + * @param string $name 缓存变量名 + * @param int $step 步长 + * @return false|int + */ + public function dec($name, $step = 1) + { + if ($this->has($name)) { + $value = $this->get($name) - $step; + } else { + $value = -$step; + } + + return $this->set($name, $value, 0) ? $value : false; + } + + /** + * 删除缓存 + * @access public + * @param string $name 缓存变量名 + * @return boolean + */ + public function rm($name) + { + $this->writeTimes++; + + $name = $this->getCacheKey($name); + + $sql = 'DELETE FROM ' . $this->options['table'] . ' WHERE var=\'' . $name . '\''; + sqlite_query($this->handler, $sql); + + return true; + } + + /** + * 清除缓存 + * @access public + * @param string $tag 标签名 + * @return boolean + */ + public function clear($tag = null) + { + if ($tag) { + $name = sqlite_escape_string($tag); + $sql = 'DELETE FROM ' . $this->options['table'] . ' WHERE tag=\'' . $name . '\''; + sqlite_query($this->handler, $sql); + return true; + } + + $this->writeTimes++; + + $sql = 'DELETE FROM ' . $this->options['table']; + + sqlite_query($this->handler, $sql); + + return true; + } +} diff --git a/thinkphp/library/think/cache/driver/Wincache.php b/thinkphp/library/think/cache/driver/Wincache.php new file mode 100644 index 000000000..10966e786 --- /dev/null +++ b/thinkphp/library/think/cache/driver/Wincache.php @@ -0,0 +1,174 @@ + +// +---------------------------------------------------------------------- + +namespace think\cache\driver; + +use think\cache\Driver; + +/** + * Wincache缓存驱动 + * @author liu21st + */ +class Wincache extends Driver +{ + protected $options = [ + 'prefix' => '', + 'expire' => 0, + 'serialize' => true, + ]; + + /** + * 架构函数 + * @access public + * @param array $options 缓存参数 + * @throws \BadFunctionCallException + */ + public function __construct($options = []) + { + if (!function_exists('wincache_ucache_info')) { + throw new \BadFunctionCallException('not support: WinCache'); + } + + if (!empty($options)) { + $this->options = array_merge($this->options, $options); + } + } + + /** + * 判断缓存 + * @access public + * @param string $name 缓存变量名 + * @return bool + */ + public function has($name) + { + $this->readTimes++; + + $key = $this->getCacheKey($name); + + return wincache_ucache_exists($key); + } + + /** + * 读取缓存 + * @access public + * @param string $name 缓存变量名 + * @param mixed $default 默认值 + * @return mixed + */ + public function get($name, $default = false) + { + $this->readTimes++; + + $key = $this->getCacheKey($name); + + return wincache_ucache_exists($key) ? $this->unserialize(wincache_ucache_get($key)) : $default; + } + + /** + * 写入缓存 + * @access public + * @param string $name 缓存变量名 + * @param mixed $value 存储数据 + * @param integer|\DateTime $expire 有效时间(秒) + * @return boolean + */ + public function set($name, $value, $expire = null) + { + $this->writeTimes++; + + if (is_null($expire)) { + $expire = $this->options['expire']; + } + + $key = $this->getCacheKey($name); + $expire = $this->getExpireTime($expire); + $value = $this->serialize($value); + + if ($this->tag && !$this->has($name)) { + $first = true; + } + + if (wincache_ucache_set($key, $value, $expire)) { + isset($first) && $this->setTagItem($key); + return true; + } + + return false; + } + + /** + * 自增缓存(针对数值缓存) + * @access public + * @param string $name 缓存变量名 + * @param int $step 步长 + * @return false|int + */ + public function inc($name, $step = 1) + { + $this->writeTimes++; + + $key = $this->getCacheKey($name); + + return wincache_ucache_inc($key, $step); + } + + /** + * 自减缓存(针对数值缓存) + * @access public + * @param string $name 缓存变量名 + * @param int $step 步长 + * @return false|int + */ + public function dec($name, $step = 1) + { + $this->writeTimes++; + + $key = $this->getCacheKey($name); + + return wincache_ucache_dec($key, $step); + } + + /** + * 删除缓存 + * @access public + * @param string $name 缓存变量名 + * @return boolean + */ + public function rm($name) + { + $this->writeTimes++; + + return wincache_ucache_delete($this->getCacheKey($name)); + } + + /** + * 清除缓存 + * @access public + * @param string $tag 标签名 + * @return boolean + */ + public function clear($tag = null) + { + if ($tag) { + $keys = $this->getTagItem($tag); + foreach ($keys as $key) { + wincache_ucache_delete($key); + } + $this->rm('tag_' . md5($tag)); + return true; + } else { + $this->writeTimes++; + return wincache_ucache_clear(); + } + } + +} diff --git a/thinkphp/library/think/cache/driver/Xcache.php b/thinkphp/library/think/cache/driver/Xcache.php new file mode 100644 index 000000000..6d1bf3f6c --- /dev/null +++ b/thinkphp/library/think/cache/driver/Xcache.php @@ -0,0 +1,177 @@ + +// +---------------------------------------------------------------------- + +namespace think\cache\driver; + +use think\cache\Driver; + +/** + * Xcache缓存驱动 + * @author liu21st + */ +class Xcache extends Driver +{ + protected $options = [ + 'prefix' => '', + 'expire' => 0, + 'serialize' => true, + ]; + + /** + * 架构函数 + * @access public + * @param array $options 缓存参数 + * @throws \BadFunctionCallException + */ + public function __construct($options = []) + { + if (!function_exists('xcache_info')) { + throw new \BadFunctionCallException('not support: Xcache'); + } + + if (!empty($options)) { + $this->options = array_merge($this->options, $options); + } + } + + /** + * 判断缓存 + * @access public + * @param string $name 缓存变量名 + * @return bool + */ + public function has($name) + { + $key = $this->getCacheKey($name); + + return xcache_isset($key); + } + + /** + * 读取缓存 + * @access public + * @param string $name 缓存变量名 + * @param mixed $default 默认值 + * @return mixed + */ + public function get($name, $default = false) + { + $this->readTimes++; + + $key = $this->getCacheKey($name); + + return xcache_isset($key) ? $this->unserialize(xcache_get($key)) : $default; + } + + /** + * 写入缓存 + * @access public + * @param string $name 缓存变量名 + * @param mixed $value 存储数据 + * @param integer|\DateTime $expire 有效时间(秒) + * @return boolean + */ + public function set($name, $value, $expire = null) + { + $this->writeTimes++; + + if (is_null($expire)) { + $expire = $this->options['expire']; + } + + if ($this->tag && !$this->has($name)) { + $first = true; + } + + $key = $this->getCacheKey($name); + $expire = $this->getExpireTime($expire); + $value = $this->serialize($value); + + if (xcache_set($key, $value, $expire)) { + isset($first) && $this->setTagItem($key); + return true; + } + + return false; + } + + /** + * 自增缓存(针对数值缓存) + * @access public + * @param string $name 缓存变量名 + * @param int $step 步长 + * @return false|int + */ + public function inc($name, $step = 1) + { + $this->writeTimes++; + + $key = $this->getCacheKey($name); + + return xcache_inc($key, $step); + } + + /** + * 自减缓存(针对数值缓存) + * @access public + * @param string $name 缓存变量名 + * @param int $step 步长 + * @return false|int + */ + public function dec($name, $step = 1) + { + $this->writeTimes++; + + $key = $this->getCacheKey($name); + + return xcache_dec($key, $step); + } + + /** + * 删除缓存 + * @access public + * @param string $name 缓存变量名 + * @return boolean + */ + public function rm($name) + { + $this->writeTimes++; + + return xcache_unset($this->getCacheKey($name)); + } + + /** + * 清除缓存 + * @access public + * @param string $tag 标签名 + * @return boolean + */ + public function clear($tag = null) + { + if ($tag) { + // 指定标签清除 + $keys = $this->getTagItem($tag); + foreach ($keys as $key) { + xcache_unset($key); + } + $this->rm('tag_' . md5($tag)); + return true; + } + + $this->writeTimes++; + + if (function_exists('xcache_unset_by_prefix')) { + return xcache_unset_by_prefix($this->options['prefix']); + } else { + return false; + } + } +} diff --git a/thinkphp/library/think/config/driver/Ini.php b/thinkphp/library/think/config/driver/Ini.php new file mode 100644 index 000000000..bcd12b697 --- /dev/null +++ b/thinkphp/library/think/config/driver/Ini.php @@ -0,0 +1,24 @@ + +// +---------------------------------------------------------------------- + +namespace think\config\driver; + +class Ini +{ + public function parse($config) + { + if (is_file($config)) { + return parse_ini_file($config, true); + } else { + return parse_ini_string($config, true); + } + } +} diff --git a/thinkphp/library/think/config/driver/Json.php b/thinkphp/library/think/config/driver/Json.php new file mode 100644 index 000000000..808bfff80 --- /dev/null +++ b/thinkphp/library/think/config/driver/Json.php @@ -0,0 +1,26 @@ + +// +---------------------------------------------------------------------- + +namespace think\config\driver; + +class Json +{ + public function parse($config) + { + if (is_file($config)) { + $config = file_get_contents($config); + } + + $result = json_decode($config, true); + + return $result; + } +} diff --git a/thinkphp/library/think/config/driver/Xml.php b/thinkphp/library/think/config/driver/Xml.php new file mode 100644 index 000000000..b149b57fa --- /dev/null +++ b/thinkphp/library/think/config/driver/Xml.php @@ -0,0 +1,33 @@ + +// +---------------------------------------------------------------------- + +namespace think\config\driver; + +class Xml +{ + public function parse($config) + { + if (is_file($config)) { + $content = simplexml_load_file($config); + } else { + $content = simplexml_load_string($config); + } + + $result = (array) $content; + foreach ($result as $key => $val) { + if (is_object($val)) { + $result[$key] = (array) $val; + } + } + + return $result; + } +} diff --git a/thinkphp/library/think/console/Command.php b/thinkphp/library/think/console/Command.php new file mode 100644 index 000000000..d0caad2f6 --- /dev/null +++ b/thinkphp/library/think/console/Command.php @@ -0,0 +1,470 @@ + +// +---------------------------------------------------------------------- + +namespace think\console; + +use think\Console; +use think\console\input\Argument; +use think\console\input\Definition; +use think\console\input\Option; + +class Command +{ + + /** @var Console */ + private $console; + private $name; + private $aliases = []; + private $definition; + private $help; + private $description; + private $ignoreValidationErrors = false; + private $consoleDefinitionMerged = false; + private $consoleDefinitionMergedWithArgs = false; + private $code; + private $synopsis = []; + private $usages = []; + + /** @var Input */ + protected $input; + + /** @var Output */ + protected $output; + + /** + * 构造方法 + * @param string|null $name 命令名称,如果没有设置则比如在 configure() 里设置 + * @throws \LogicException + * @api + */ + public function __construct($name = null) + { + $this->definition = new Definition(); + + if (null !== $name) { + $this->setName($name); + } + + $this->configure(); + + if (!$this->name) { + throw new \LogicException(sprintf('The command defined in "%s" cannot have an empty name.', get_class($this))); + } + } + + /** + * 忽略验证错误 + */ + public function ignoreValidationErrors() + { + $this->ignoreValidationErrors = true; + } + + /** + * 设置控制台 + * @param Console $console + */ + public function setConsole(Console $console = null) + { + $this->console = $console; + } + + /** + * 获取控制台 + * @return Console + * @api + */ + public function getConsole() + { + return $this->console; + } + + /** + * 是否有效 + * @return bool + */ + public function isEnabled() + { + return true; + } + + /** + * 配置指令 + */ + protected function configure() + { + } + + /** + * 执行指令 + * @param Input $input + * @param Output $output + * @return null|int + * @throws \LogicException + * @see setCode() + */ + protected function execute(Input $input, Output $output) + { + throw new \LogicException('You must override the execute() method in the concrete command class.'); + } + + /** + * 用户验证 + * @param Input $input + * @param Output $output + */ + protected function interact(Input $input, Output $output) + { + } + + /** + * 初始化 + * @param Input $input An InputInterface instance + * @param Output $output An OutputInterface instance + */ + protected function initialize(Input $input, Output $output) + { + } + + /** + * 执行 + * @param Input $input + * @param Output $output + * @return int + * @throws \Exception + * @see setCode() + * @see execute() + */ + public function run(Input $input, Output $output) + { + $this->input = $input; + $this->output = $output; + + $this->getSynopsis(true); + $this->getSynopsis(false); + + $this->mergeConsoleDefinition(); + + try { + $input->bind($this->definition); + } catch (\Exception $e) { + if (!$this->ignoreValidationErrors) { + throw $e; + } + } + + $this->initialize($input, $output); + + if ($input->isInteractive()) { + $this->interact($input, $output); + } + + $input->validate(); + + if ($this->code) { + $statusCode = call_user_func($this->code, $input, $output); + } else { + $statusCode = $this->execute($input, $output); + } + + return is_numeric($statusCode) ? (int) $statusCode : 0; + } + + /** + * 设置执行代码 + * @param callable $code callable(InputInterface $input, OutputInterface $output) + * @return Command + * @throws \InvalidArgumentException + * @see execute() + */ + public function setCode(callable $code) + { + if (!is_callable($code)) { + throw new \InvalidArgumentException('Invalid callable provided to Command::setCode.'); + } + + if (PHP_VERSION_ID >= 50400 && $code instanceof \Closure) { + $r = new \ReflectionFunction($code); + if (null === $r->getClosureThis()) { + $code = \Closure::bind($code, $this); + } + } + + $this->code = $code; + + return $this; + } + + /** + * 合并参数定义 + * @param bool $mergeArgs + */ + public function mergeConsoleDefinition($mergeArgs = true) + { + if (null === $this->console + || (true === $this->consoleDefinitionMerged + && ($this->consoleDefinitionMergedWithArgs || !$mergeArgs)) + ) { + return; + } + + if ($mergeArgs) { + $currentArguments = $this->definition->getArguments(); + $this->definition->setArguments($this->console->getDefinition()->getArguments()); + $this->definition->addArguments($currentArguments); + } + + $this->definition->addOptions($this->console->getDefinition()->getOptions()); + + $this->consoleDefinitionMerged = true; + if ($mergeArgs) { + $this->consoleDefinitionMergedWithArgs = true; + } + } + + /** + * 设置参数定义 + * @param array|Definition $definition + * @return Command + * @api + */ + public function setDefinition($definition) + { + if ($definition instanceof Definition) { + $this->definition = $definition; + } else { + $this->definition->setDefinition($definition); + } + + $this->consoleDefinitionMerged = false; + + return $this; + } + + /** + * 获取参数定义 + * @return Definition + * @api + */ + public function getDefinition() + { + return $this->definition; + } + + /** + * 获取当前指令的参数定义 + * @return Definition + */ + public function getNativeDefinition() + { + return $this->getDefinition(); + } + + /** + * 添加参数 + * @param string $name 名称 + * @param int $mode 类型 + * @param string $description 描述 + * @param mixed $default 默认值 + * @return Command + */ + public function addArgument($name, $mode = null, $description = '', $default = null) + { + $this->definition->addArgument(new Argument($name, $mode, $description, $default)); + + return $this; + } + + /** + * 添加选项 + * @param string $name 选项名称 + * @param string $shortcut 别名 + * @param int $mode 类型 + * @param string $description 描述 + * @param mixed $default 默认值 + * @return Command + */ + public function addOption($name, $shortcut = null, $mode = null, $description = '', $default = null) + { + $this->definition->addOption(new Option($name, $shortcut, $mode, $description, $default)); + + return $this; + } + + /** + * 设置指令名称 + * @param string $name + * @return Command + * @throws \InvalidArgumentException + */ + public function setName($name) + { + $this->validateName($name); + + $this->name = $name; + + return $this; + } + + /** + * 获取指令名称 + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * 设置描述 + * @param string $description + * @return Command + */ + public function setDescription($description) + { + $this->description = $description; + + return $this; + } + + /** + * 获取描述 + * @return string + */ + public function getDescription() + { + return $this->description; + } + + /** + * 设置帮助信息 + * @param string $help + * @return Command + */ + public function setHelp($help) + { + $this->help = $help; + + return $this; + } + + /** + * 获取帮助信息 + * @return string + */ + public function getHelp() + { + return $this->help; + } + + /** + * 描述信息 + * @return string + */ + public function getProcessedHelp() + { + $name = $this->name; + + $placeholders = [ + '%command.name%', + '%command.full_name%', + ]; + $replacements = [ + $name, + $_SERVER['PHP_SELF'] . ' ' . $name, + ]; + + return str_replace($placeholders, $replacements, $this->getHelp()); + } + + /** + * 设置别名 + * @param string[] $aliases + * @return Command + * @throws \InvalidArgumentException + */ + public function setAliases($aliases) + { + if (!is_array($aliases) && !$aliases instanceof \Traversable) { + throw new \InvalidArgumentException('$aliases must be an array or an instance of \Traversable'); + } + + foreach ($aliases as $alias) { + $this->validateName($alias); + } + + $this->aliases = $aliases; + + return $this; + } + + /** + * 获取别名 + * @return array + */ + public function getAliases() + { + return $this->aliases; + } + + /** + * 获取简介 + * @param bool $short 是否简单的 + * @return string + */ + public function getSynopsis($short = false) + { + $key = $short ? 'short' : 'long'; + + if (!isset($this->synopsis[$key])) { + $this->synopsis[$key] = trim(sprintf('%s %s', $this->name, $this->definition->getSynopsis($short))); + } + + return $this->synopsis[$key]; + } + + /** + * 添加用法介绍 + * @param string $usage + * @return $this + */ + public function addUsage($usage) + { + if (0 !== strpos($usage, $this->name)) { + $usage = sprintf('%s %s', $this->name, $usage); + } + + $this->usages[] = $usage; + + return $this; + } + + /** + * 获取用法介绍 + * @return array + */ + public function getUsages() + { + return $this->usages; + } + + /** + * 验证指令名称 + * @param string $name + * @throws \InvalidArgumentException + */ + private function validateName($name) + { + if (!preg_match('/^[^\:]++(\:[^\:]++)*$/', $name)) { + throw new \InvalidArgumentException(sprintf('Command name "%s" is invalid.', $name)); + } + } +} diff --git a/thinkphp/library/think/console/Input.php b/thinkphp/library/think/console/Input.php new file mode 100644 index 000000000..2482dfdc0 --- /dev/null +++ b/thinkphp/library/think/console/Input.php @@ -0,0 +1,464 @@ + +// +---------------------------------------------------------------------- + +namespace think\console; + +use think\console\input\Argument; +use think\console\input\Definition; +use think\console\input\Option; + +class Input +{ + + /** + * @var Definition + */ + protected $definition; + + /** + * @var Option[] + */ + protected $options = []; + + /** + * @var Argument[] + */ + protected $arguments = []; + + protected $interactive = true; + + private $tokens; + private $parsed; + + public function __construct($argv = null) + { + if (null === $argv) { + $argv = $_SERVER['argv']; + // 去除命令名 + array_shift($argv); + } + + $this->tokens = $argv; + + $this->definition = new Definition(); + } + + protected function setTokens(array $tokens) + { + $this->tokens = $tokens; + } + + /** + * 绑定实例 + * @param Definition $definition A InputDefinition instance + */ + public function bind(Definition $definition) + { + $this->arguments = []; + $this->options = []; + $this->definition = $definition; + + $this->parse(); + } + + /** + * 解析参数 + */ + protected function parse() + { + $parseOptions = true; + $this->parsed = $this->tokens; + while (null !== $token = array_shift($this->parsed)) { + if ($parseOptions && '' == $token) { + $this->parseArgument($token); + } elseif ($parseOptions && '--' == $token) { + $parseOptions = false; + } elseif ($parseOptions && 0 === strpos($token, '--')) { + $this->parseLongOption($token); + } elseif ($parseOptions && '-' === $token[0] && '-' !== $token) { + $this->parseShortOption($token); + } else { + $this->parseArgument($token); + } + } + } + + /** + * 解析短选项 + * @param string $token 当前的指令. + */ + private function parseShortOption($token) + { + $name = substr($token, 1); + + if (strlen($name) > 1) { + if ($this->definition->hasShortcut($name[0]) + && $this->definition->getOptionForShortcut($name[0])->acceptValue() + ) { + $this->addShortOption($name[0], substr($name, 1)); + } else { + $this->parseShortOptionSet($name); + } + } else { + $this->addShortOption($name, null); + } + } + + /** + * 解析短选项 + * @param string $name 当前指令 + * @throws \RuntimeException + */ + private function parseShortOptionSet($name) + { + $len = strlen($name); + for ($i = 0; $i < $len; ++$i) { + if (!$this->definition->hasShortcut($name[$i])) { + throw new \RuntimeException(sprintf('The "-%s" option does not exist.', $name[$i])); + } + + $option = $this->definition->getOptionForShortcut($name[$i]); + if ($option->acceptValue()) { + $this->addLongOption($option->getName(), $i === $len - 1 ? null : substr($name, $i + 1)); + + break; + } else { + $this->addLongOption($option->getName(), null); + } + } + } + + /** + * 解析完整选项 + * @param string $token 当前指令 + */ + private function parseLongOption($token) + { + $name = substr($token, 2); + + if (false !== $pos = strpos($name, '=')) { + $this->addLongOption(substr($name, 0, $pos), substr($name, $pos + 1)); + } else { + $this->addLongOption($name, null); + } + } + + /** + * 解析参数 + * @param string $token 当前指令 + * @throws \RuntimeException + */ + private function parseArgument($token) + { + $c = count($this->arguments); + + if ($this->definition->hasArgument($c)) { + $arg = $this->definition->getArgument($c); + + $this->arguments[$arg->getName()] = $arg->isArray() ? [$token] : $token; + + } elseif ($this->definition->hasArgument($c - 1) && $this->definition->getArgument($c - 1)->isArray()) { + $arg = $this->definition->getArgument($c - 1); + + $this->arguments[$arg->getName()][] = $token; + } else { + throw new \RuntimeException('Too many arguments.'); + } + } + + /** + * 添加一个短选项的值 + * @param string $shortcut 短名称 + * @param mixed $value 值 + * @throws \RuntimeException + */ + private function addShortOption($shortcut, $value) + { + if (!$this->definition->hasShortcut($shortcut)) { + throw new \RuntimeException(sprintf('The "-%s" option does not exist.', $shortcut)); + } + + $this->addLongOption($this->definition->getOptionForShortcut($shortcut)->getName(), $value); + } + + /** + * 添加一个完整选项的值 + * @param string $name 选项名 + * @param mixed $value 值 + * @throws \RuntimeException + */ + private function addLongOption($name, $value) + { + if (!$this->definition->hasOption($name)) { + throw new \RuntimeException(sprintf('The "--%s" option does not exist.', $name)); + } + + $option = $this->definition->getOption($name); + + if (false === $value) { + $value = null; + } + + if (null !== $value && !$option->acceptValue()) { + throw new \RuntimeException(sprintf('The "--%s" option does not accept a value.', $name, $value)); + } + + if (null === $value && $option->acceptValue() && count($this->parsed)) { + $next = array_shift($this->parsed); + if (isset($next[0]) && '-' !== $next[0]) { + $value = $next; + } elseif (empty($next)) { + $value = ''; + } else { + array_unshift($this->parsed, $next); + } + } + + if (null === $value) { + if ($option->isValueRequired()) { + throw new \RuntimeException(sprintf('The "--%s" option requires a value.', $name)); + } + + if (!$option->isArray()) { + $value = $option->isValueOptional() ? $option->getDefault() : true; + } + } + + if ($option->isArray()) { + $this->options[$name][] = $value; + } else { + $this->options[$name] = $value; + } + } + + /** + * 获取第一个参数 + * @return string|null + */ + public function getFirstArgument() + { + foreach ($this->tokens as $token) { + if ($token && '-' === $token[0]) { + continue; + } + + return $token; + } + return; + } + + /** + * 检查原始参数是否包含某个值 + * @param string|array $values 需要检查的值 + * @return bool + */ + public function hasParameterOption($values) + { + $values = (array) $values; + + foreach ($this->tokens as $token) { + foreach ($values as $value) { + if ($token === $value || 0 === strpos($token, $value . '=')) { + return true; + } + } + } + + return false; + } + + /** + * 获取原始选项的值 + * @param string|array $values 需要检查的值 + * @param mixed $default 默认值 + * @return mixed The option value + */ + public function getParameterOption($values, $default = false) + { + $values = (array) $values; + $tokens = $this->tokens; + + while (0 < count($tokens)) { + $token = array_shift($tokens); + + foreach ($values as $value) { + if ($token === $value || 0 === strpos($token, $value . '=')) { + if (false !== $pos = strpos($token, '=')) { + return substr($token, $pos + 1); + } + + return array_shift($tokens); + } + } + } + + return $default; + } + + /** + * 验证输入 + * @throws \RuntimeException + */ + public function validate() + { + if (count($this->arguments) < $this->definition->getArgumentRequiredCount()) { + throw new \RuntimeException('Not enough arguments.'); + } + } + + /** + * 检查输入是否是交互的 + * @return bool + */ + public function isInteractive() + { + return $this->interactive; + } + + /** + * 设置输入的交互 + * @param bool + */ + public function setInteractive($interactive) + { + $this->interactive = (bool) $interactive; + } + + /** + * 获取所有的参数 + * @return Argument[] + */ + public function getArguments() + { + return array_merge($this->definition->getArgumentDefaults(), $this->arguments); + } + + /** + * 根据名称获取参数 + * @param string $name 参数名 + * @return mixed + * @throws \InvalidArgumentException + */ + public function getArgument($name) + { + if (!$this->definition->hasArgument($name)) { + throw new \InvalidArgumentException(sprintf('The "%s" argument does not exist.', $name)); + } + + return isset($this->arguments[$name]) ? $this->arguments[$name] : $this->definition->getArgument($name) + ->getDefault(); + } + + /** + * 设置参数的值 + * @param string $name 参数名 + * @param string $value 值 + * @throws \InvalidArgumentException + */ + public function setArgument($name, $value) + { + if (!$this->definition->hasArgument($name)) { + throw new \InvalidArgumentException(sprintf('The "%s" argument does not exist.', $name)); + } + + $this->arguments[$name] = $value; + } + + /** + * 检查是否存在某个参数 + * @param string|int $name 参数名或位置 + * @return bool + */ + public function hasArgument($name) + { + return $this->definition->hasArgument($name); + } + + /** + * 获取所有的选项 + * @return Option[] + */ + public function getOptions() + { + return array_merge($this->definition->getOptionDefaults(), $this->options); + } + + /** + * 获取选项值 + * @param string $name 选项名称 + * @return mixed + * @throws \InvalidArgumentException + */ + public function getOption($name) + { + if (!$this->definition->hasOption($name)) { + throw new \InvalidArgumentException(sprintf('The "%s" option does not exist.', $name)); + } + + return isset($this->options[$name]) ? $this->options[$name] : $this->definition->getOption($name)->getDefault(); + } + + /** + * 设置选项值 + * @param string $name 选项名 + * @param string|bool $value 值 + * @throws \InvalidArgumentException + */ + public function setOption($name, $value) + { + if (!$this->definition->hasOption($name)) { + throw new \InvalidArgumentException(sprintf('The "%s" option does not exist.', $name)); + } + + $this->options[$name] = $value; + } + + /** + * 是否有某个选项 + * @param string $name 选项名 + * @return bool + */ + public function hasOption($name) + { + return $this->definition->hasOption($name) && isset($this->options[$name]); + } + + /** + * 转义指令 + * @param string $token + * @return string + */ + public function escapeToken($token) + { + return preg_match('{^[\w-]+$}', $token) ? $token : escapeshellarg($token); + } + + /** + * 返回传递给命令的参数的字符串 + * @return string + */ + public function __toString() + { + $tokens = array_map(function ($token) { + if (preg_match('{^(-[^=]+=)(.+)}', $token, $match)) { + return $match[1] . $this->escapeToken($match[2]); + } + + if ($token && '-' !== $token[0]) { + return $this->escapeToken($token); + } + + return $token; + }, $this->tokens); + + return implode(' ', $tokens); + } +} diff --git a/thinkphp/library/think/console/LICENSE b/thinkphp/library/think/console/LICENSE new file mode 100644 index 000000000..0abe056e1 --- /dev/null +++ b/thinkphp/library/think/console/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2004-2016 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/thinkphp/library/think/console/Output.php b/thinkphp/library/think/console/Output.php new file mode 100644 index 000000000..65dc9fb81 --- /dev/null +++ b/thinkphp/library/think/console/Output.php @@ -0,0 +1,222 @@ + +// +---------------------------------------------------------------------- + +namespace think\console; + +use Exception; +use think\console\output\Ask; +use think\console\output\Descriptor; +use think\console\output\driver\Buffer; +use think\console\output\driver\Console; +use think\console\output\driver\Nothing; +use think\console\output\Question; +use think\console\output\question\Choice; +use think\console\output\question\Confirmation; + +/** + * Class Output + * @package think\console + * + * @see \think\console\output\driver\Console::setDecorated + * @method void setDecorated($decorated) + * + * @see \think\console\output\driver\Buffer::fetch + * @method string fetch() + * + * @method void info($message) + * @method void error($message) + * @method void comment($message) + * @method void warning($message) + * @method void highlight($message) + * @method void question($message) + */ +class Output +{ + const VERBOSITY_QUIET = 0; + const VERBOSITY_NORMAL = 1; + const VERBOSITY_VERBOSE = 2; + const VERBOSITY_VERY_VERBOSE = 3; + const VERBOSITY_DEBUG = 4; + + const OUTPUT_NORMAL = 0; + const OUTPUT_RAW = 1; + const OUTPUT_PLAIN = 2; + + private $verbosity = self::VERBOSITY_NORMAL; + + /** @var Buffer|Console|Nothing */ + private $handle = null; + + protected $styles = [ + 'info', + 'error', + 'comment', + 'question', + 'highlight', + 'warning' + ]; + + public function __construct($driver = 'console') + { + $class = '\\think\\console\\output\\driver\\' . ucwords($driver); + + $this->handle = new $class($this); + } + + public function ask(Input $input, $question, $default = null, $validator = null) + { + $question = new Question($question, $default); + $question->setValidator($validator); + + return $this->askQuestion($input, $question); + } + + public function askHidden(Input $input, $question, $validator = null) + { + $question = new Question($question); + + $question->setHidden(true); + $question->setValidator($validator); + + return $this->askQuestion($input, $question); + } + + public function confirm(Input $input, $question, $default = true) + { + return $this->askQuestion($input, new Confirmation($question, $default)); + } + + /** + * {@inheritdoc} + */ + public function choice(Input $input, $question, array $choices, $default = null) + { + if (null !== $default) { + $values = array_flip($choices); + $default = $values[$default]; + } + + return $this->askQuestion($input, new Choice($question, $choices, $default)); + } + + protected function askQuestion(Input $input, Question $question) + { + $ask = new Ask($input, $this, $question); + $answer = $ask->run(); + + if ($input->isInteractive()) { + $this->newLine(); + } + + return $answer; + } + + protected function block($style, $message) + { + $this->writeln("<{$style}>{$message}"); + } + + /** + * 输出空行 + * @param int $count + */ + public function newLine($count = 1) + { + $this->write(str_repeat(PHP_EOL, $count)); + } + + /** + * 输出信息并换行 + * @param string $messages + * @param int $type + */ + public function writeln($messages, $type = self::OUTPUT_NORMAL) + { + $this->write($messages, true, $type); + } + + /** + * 输出信息 + * @param string $messages + * @param bool $newline + * @param int $type + */ + public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL) + { + $this->handle->write($messages, $newline, $type); + } + + public function renderException(\Exception $e) + { + $this->handle->renderException($e); + } + + /** + * {@inheritdoc} + */ + public function setVerbosity($level) + { + $this->verbosity = (int) $level; + } + + /** + * {@inheritdoc} + */ + public function getVerbosity() + { + return $this->verbosity; + } + + public function isQuiet() + { + return self::VERBOSITY_QUIET === $this->verbosity; + } + + public function isVerbose() + { + return self::VERBOSITY_VERBOSE <= $this->verbosity; + } + + public function isVeryVerbose() + { + return self::VERBOSITY_VERY_VERBOSE <= $this->verbosity; + } + + public function isDebug() + { + return self::VERBOSITY_DEBUG <= $this->verbosity; + } + + public function describe($object, array $options = []) + { + $descriptor = new Descriptor(); + $options = array_merge([ + 'raw_text' => false, + ], $options); + + $descriptor->describe($this, $object, $options); + } + + public function __call($method, $args) + { + if (in_array($method, $this->styles)) { + array_unshift($args, $method); + return call_user_func_array([$this, 'block'], $args); + } + + if ($this->handle && method_exists($this->handle, $method)) { + return call_user_func_array([$this->handle, $method], $args); + } else { + throw new Exception('method not exists:' . __CLASS__ . '->' . $method); + } + } + +} diff --git a/thinkphp/library/think/console/bin/README.md b/thinkphp/library/think/console/bin/README.md new file mode 100644 index 000000000..9acc52fba --- /dev/null +++ b/thinkphp/library/think/console/bin/README.md @@ -0,0 +1 @@ +console 工具使用 hiddeninput.exe 在 windows 上隐藏密码输入,该二进制文件由第三方提供,相关源码和其他细节可以在 [Hidden Input](https://github.com/Seldaek/hidden-input) 找到。 diff --git a/thinkphp/library/think/console/bin/hiddeninput.exe b/thinkphp/library/think/console/bin/hiddeninput.exe new file mode 100644 index 000000000..c8cf65e8d Binary files /dev/null and b/thinkphp/library/think/console/bin/hiddeninput.exe differ diff --git a/thinkphp/library/think/console/command/Build.php b/thinkphp/library/think/console/command/Build.php new file mode 100644 index 000000000..2b83199b1 --- /dev/null +++ b/thinkphp/library/think/console/command/Build.php @@ -0,0 +1,60 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\command; + +use think\console\Command; +use think\console\Input; +use think\console\input\Option; +use think\console\Output; +use think\facade\App; +use think\facade\Build as AppBuild; + +class Build extends Command +{ + + /** + * {@inheritdoc} + */ + protected function configure() + { + $this->setName('build') + ->setDefinition([ + new Option('config', null, Option::VALUE_OPTIONAL, "build.php path"), + new Option('module', null, Option::VALUE_OPTIONAL, "module name"), + ]) + ->setDescription('Build Application Dirs'); + } + + protected function execute(Input $input, Output $output) + { + if ($input->hasOption('module')) { + AppBuild::module($input->getOption('module')); + $output->writeln("Successed"); + return; + } + + if ($input->hasOption('config')) { + $build = include $input->getOption('config'); + } else { + $build = include App::getAppPath() . 'build.php'; + } + + if (empty($build)) { + $output->writeln("Build Config Is Empty"); + return; + } + + AppBuild::run($build); + $output->writeln("Successed"); + + } +} diff --git a/thinkphp/library/think/console/command/Clear.php b/thinkphp/library/think/console/command/Clear.php new file mode 100644 index 000000000..9896aea56 --- /dev/null +++ b/thinkphp/library/think/console/command/Clear.php @@ -0,0 +1,45 @@ + +// +---------------------------------------------------------------------- +namespace think\console\command; + +use think\console\Command; +use think\console\Input; +use think\console\input\Option; +use think\console\Output; +use think\facade\App; + +class Clear extends Command +{ + protected function configure() + { + // 指令配置 + $this + ->setName('clear') + ->addOption('path', 'd', Option::VALUE_OPTIONAL, 'path to clear', null) + ->setDescription('Clear runtime file'); + } + + protected function execute(Input $input, Output $output) + { + $path = $input->getOption('path') ?: App::getRuntimePath(); + $files = scandir($path); + if ($files) { + foreach ($files as $file) { + if ('.' != $file && '..' != $file && is_dir($path . $file)) { + array_map('unlink', glob($path . $file . DIRECTORY_SEPARATOR . '*.*')); + } elseif ('.gitignore' != $file && is_file($path . $file)) { + unlink($path . $file); + } + } + } + $output->writeln("Clear Successed"); + } +} diff --git a/thinkphp/library/think/console/command/Help.php b/thinkphp/library/think/console/command/Help.php new file mode 100644 index 000000000..bae2c6533 --- /dev/null +++ b/thinkphp/library/think/console/command/Help.php @@ -0,0 +1,69 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\command; + +use think\console\Command; +use think\console\Input; +use think\console\input\Argument as InputArgument; +use think\console\input\Option as InputOption; +use think\console\Output; + +class Help extends Command +{ + + private $command; + + /** + * {@inheritdoc} + */ + protected function configure() + { + $this->ignoreValidationErrors(); + + $this->setName('help')->setDefinition([ + new InputArgument('command_name', InputArgument::OPTIONAL, 'The command name', 'help'), + new InputOption('raw', null, InputOption::VALUE_NONE, 'To output raw command help'), + ])->setDescription('Displays help for a command')->setHelp(<<%command.name% command displays help for a given command: + + php %command.full_name% list + +To display the list of available commands, please use the list command. +EOF + ); + } + + /** + * Sets the command. + * @param Command $command The command to set + */ + public function setCommand(Command $command) + { + $this->command = $command; + } + + /** + * {@inheritdoc} + */ + protected function execute(Input $input, Output $output) + { + if (null === $this->command) { + $this->command = $this->getConsole()->find($input->getArgument('command_name')); + } + + $output->describe($this->command, [ + 'raw_text' => $input->getOption('raw'), + ]); + + $this->command = null; + } +} diff --git a/thinkphp/library/think/console/command/Lists.php b/thinkphp/library/think/console/command/Lists.php new file mode 100644 index 000000000..084ddaa23 --- /dev/null +++ b/thinkphp/library/think/console/command/Lists.php @@ -0,0 +1,74 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\command; + +use think\console\Command; +use think\console\Input; +use think\console\Output; +use think\console\input\Argument as InputArgument; +use think\console\input\Option as InputOption; +use think\console\input\Definition as InputDefinition; + +class Lists extends Command +{ + + /** + * {@inheritdoc} + */ + protected function configure() + { + $this->setName('list')->setDefinition($this->createDefinition())->setDescription('Lists commands')->setHelp(<<%command.name% command lists all commands: + + php %command.full_name% + +You can also display the commands for a specific namespace: + + php %command.full_name% test + +It's also possible to get raw list of commands (useful for embedding command runner): + + php %command.full_name% --raw +EOF + ); + } + + /** + * {@inheritdoc} + */ + public function getNativeDefinition() + { + return $this->createDefinition(); + } + + /** + * {@inheritdoc} + */ + protected function execute(Input $input, Output $output) + { + $output->describe($this->getConsole(), [ + 'raw_text' => $input->getOption('raw'), + 'namespace' => $input->getArgument('namespace'), + ]); + } + + /** + * {@inheritdoc} + */ + private function createDefinition() + { + return new InputDefinition([ + new InputArgument('namespace', InputArgument::OPTIONAL, 'The namespace name'), + new InputOption('raw', null, InputOption::VALUE_NONE, 'To output raw command list') + ]); + } +} diff --git a/thinkphp/library/think/console/command/Make.php b/thinkphp/library/think/console/command/Make.php new file mode 100644 index 000000000..3bdfc6b9d --- /dev/null +++ b/thinkphp/library/think/console/command/Make.php @@ -0,0 +1,111 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\command; + +use think\console\Command; +use think\console\Input; +use think\console\input\Argument; +use think\console\Output; +use think\facade\App; +use think\facade\Config; +use think\facade\Env; + +abstract class Make extends Command +{ + + protected $type; + + abstract protected function getStub(); + + protected function configure() + { + $this->addArgument('name', Argument::REQUIRED, "The name of the class"); + } + + protected function execute(Input $input, Output $output) + { + + $name = trim($input->getArgument('name')); + + $classname = $this->getClassName($name); + + $pathname = $this->getPathName($classname); + + if (is_file($pathname)) { + $output->writeln('' . $this->type . ' already exists!'); + return false; + } + + if (!is_dir(dirname($pathname))) { + mkdir(strtolower(dirname($pathname)), 0755, true); + } + + file_put_contents($pathname, $this->buildClass($classname)); + + $output->writeln('' . $this->type . ' created successfully.'); + + } + + protected function buildClass($name) + { + $stub = file_get_contents($this->getStub()); + + $namespace = trim(implode('\\', array_slice(explode('\\', $name), 0, -1)), '\\'); + + $class = str_replace($namespace . '\\', '', $name); + + return str_replace(['{%className%}', '{%namespace%}', '{%app_namespace%}'], [ + $class, + $namespace, + App::getNamespace(), + ], $stub); + + } + + protected function getPathName($name) + { + $name = str_replace(App::getNamespace() . '\\', '', $name); + + return Env::get('app_path') . ltrim(str_replace('\\', '/', $name), '/') . '.php'; + } + + protected function getClassName($name) + { + $appNamespace = App::getNamespace(); + + if (strpos($name, $appNamespace . '\\') !== false) { + return $name; + } + + if (Config::get('app_multi_module')) { + if (strpos($name, '/')) { + list($module, $name) = explode('/', $name, 2); + } else { + $module = 'common'; + } + } else { + $module = null; + } + + if (strpos($name, '/') !== false) { + $name = str_replace('/', '\\', $name); + } + + return $this->getNamespace($appNamespace, $module) . '\\' . $name; + } + + protected function getNamespace($appNamespace, $module) + { + return $module ? ($appNamespace . '\\' . $module) : $appNamespace; + } + +} diff --git a/thinkphp/library/think/console/command/RunServer.php b/thinkphp/library/think/console/command/RunServer.php new file mode 100644 index 000000000..4dd610b6e --- /dev/null +++ b/thinkphp/library/think/console/command/RunServer.php @@ -0,0 +1,54 @@ + +// +---------------------------------------------------------------------- +namespace think\console\command; + +use think\console\Command; +use think\console\Input; +use think\console\input\Option; +use think\console\Output; +use think\facade\App; + +class RunServer extends Command +{ + + public function configure() + { + $this->setName('run') + ->addOption('host', 'H', Option::VALUE_OPTIONAL, + 'The host to server the application on', '127.0.0.1') + ->addOption('port', 'p', Option::VALUE_OPTIONAL, + 'The port to server the application on', 8000) + ->addOption('root', 'r', Option::VALUE_OPTIONAL, + 'The document root of the application', App::getRootPath() . 'public') + ->setDescription('PHP Built-in Server for ThinkPHP'); + } + + public function execute(Input $input, Output $output) + { + $host = $input->getOption('host'); + $port = $input->getOption('port'); + $root = $input->getOption('root'); + + $command = sprintf( + 'php -S %s:%d -t %s %s', + $host, + $port, + escapeshellarg($root), + escapeshellarg($root . DIRECTORY_SEPARATOR . 'router.php') + ); + + $output->writeln(sprintf('ThinkPHP Development server is started On ', $host, $port)); + $output->writeln(sprintf('You can exit with `CTRL-C`')); + $output->writeln(sprintf('Document root is: %s', $root)); + passthru($command); + } + +} diff --git a/thinkphp/library/think/console/command/make/Controller.php b/thinkphp/library/think/console/command/make/Controller.php new file mode 100644 index 000000000..e4cc5bb57 --- /dev/null +++ b/thinkphp/library/think/console/command/make/Controller.php @@ -0,0 +1,57 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\command\make; + +use think\console\command\Make; +use think\console\input\Option; +use think\facade\Config; + +class Controller extends Make +{ + + protected $type = "Controller"; + + protected function configure() + { + parent::configure(); + $this->setName('make:controller') + ->addOption('api', null, Option::VALUE_NONE, 'Generate an api controller class.') + ->addOption('plain', null, Option::VALUE_NONE, 'Generate an empty controller class.') + ->setDescription('Create a new resource controller class'); + } + + protected function getStub() + { + $stubPath = __DIR__ . DIRECTORY_SEPARATOR . 'stubs' . DIRECTORY_SEPARATOR; + + if ($this->input->getOption('api')) { + return $stubPath . 'controller.api.stub'; + } + + if ($this->input->getOption('plain')) { + return $stubPath . 'controller.plain.stub'; + } + + return $stubPath . 'controller.stub'; + } + + protected function getClassName($name) + { + return parent::getClassName($name) . (Config::get('controller_suffix') ? ucfirst(Config::get('url_controller_layer')) : ''); + } + + protected function getNamespace($appNamespace, $module) + { + return parent::getNamespace($appNamespace, $module) . '\controller'; + } + +} diff --git a/thinkphp/library/think/console/command/make/Middleware.php b/thinkphp/library/think/console/command/make/Middleware.php new file mode 100644 index 000000000..bfe821b03 --- /dev/null +++ b/thinkphp/library/think/console/command/make/Middleware.php @@ -0,0 +1,36 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\command\make; + +use think\console\command\Make; + +class Middleware extends Make +{ + protected $type = "Middleware"; + + protected function configure() + { + parent::configure(); + $this->setName('make:middleware') + ->setDescription('Create a new middleware class'); + } + + protected function getStub() + { + return __DIR__ . DIRECTORY_SEPARATOR . 'stubs' . DIRECTORY_SEPARATOR . 'middleware.stub'; + } + + protected function getNamespace($appNamespace, $module) + { + return parent::getNamespace($appNamespace, 'http') . '\middleware'; + } +} diff --git a/thinkphp/library/think/console/command/make/Model.php b/thinkphp/library/think/console/command/make/Model.php new file mode 100644 index 000000000..03e6b3fcd --- /dev/null +++ b/thinkphp/library/think/console/command/make/Model.php @@ -0,0 +1,36 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\command\make; + +use think\console\command\Make; + +class Model extends Make +{ + protected $type = "Model"; + + protected function configure() + { + parent::configure(); + $this->setName('make:model') + ->setDescription('Create a new model class'); + } + + protected function getStub() + { + return __DIR__ . DIRECTORY_SEPARATOR . 'stubs' . DIRECTORY_SEPARATOR . 'model.stub'; + } + + protected function getNamespace($appNamespace, $module) + { + return parent::getNamespace($appNamespace, $module) . '\model'; + } +} diff --git a/thinkphp/library/think/console/command/make/stubs/controller.api.stub b/thinkphp/library/think/console/command/make/stubs/controller.api.stub new file mode 100644 index 000000000..aed9edfbd --- /dev/null +++ b/thinkphp/library/think/console/command/make/stubs/controller.api.stub @@ -0,0 +1,64 @@ + +// +---------------------------------------------------------------------- +namespace think\console\command\optimize; + +use think\console\Command; +use think\console\Input; +use think\console\Output; +use think\Container; + +class Autoload extends Command +{ + + protected function configure() + { + $this->setName('optimize:autoload') + ->setDescription('Optimizes PSR0 and PSR4 packages to be loaded with classmaps too, good for production.'); + } + + protected function execute(Input $input, Output $output) + { + + $classmapFile = <<getNamespace() . '\\' => realpath(rtrim($app->getAppPath())), + 'think\\' => $app->getAppPath() . 'library/think', + 'traits\\' => $app->getAppPath() . 'library/traits', + '' => realpath(rtrim($app->getRootPath() . 'extend')), + ]; + + krsort($namespacesToScan); + $classMap = []; + foreach ($namespacesToScan as $namespace => $dir) { + + if (!is_dir($dir)) { + continue; + } + + $namespaceFilter = '' === $namespace ? null : $namespace; + $classMap = $this->addClassMapCode($dir, $namespaceFilter, $classMap); + } + + ksort($classMap); + foreach ($classMap as $class => $code) { + $classmapFile .= ' ' . var_export($class, true) . ' => ' . $code; + } + $classmapFile .= "];\n"; + $runtimePath = $app->getRuntimePath(); + if (!is_dir($runtimePath)) { + @mkdir($runtimePath, 0755, true); + } + + file_put_contents($runtimePath . 'classmap.php', $classmapFile); + + $output->writeln('Succeed!'); + } + + protected function addClassMapCode($dir, $namespace, $classMap) + { + foreach ($this->createMap($dir, $namespace) as $class => $path) { + + $pathCode = $this->getPathCode($path) . ",\n"; + + if (!isset($classMap[$class])) { + $classMap[$class] = $pathCode; + } elseif ($classMap[$class] !== $pathCode && !preg_match('{/(test|fixture|example|stub)s?/}i', strtr($classMap[$class] . ' ' . $path, '\\', '/'))) { + $this->output->writeln( + 'Warning: Ambiguous class resolution, "' . $class . '"' . + ' was found in both "' . str_replace(["',\n"], [ + '', + ], $classMap[$class]) . '" and "' . $path . '", the first will be used.' + ); + } + } + return $classMap; + } + + protected function getPathCode($path) + { + $baseDir = ''; + $app = Container::get('app'); + $appPath = $this->normalizePath(realpath($app->getAppPath())); + $libPath = $this->normalizePath(realpath($app->getThinkPath() . 'library')); + $extendPath = $this->normalizePath(realpath($app->getRootPath() . 'extend')); + $path = $this->normalizePath($path); + + if (strpos($path, $libPath . '/') === 0) { + $path = substr($path, strlen($app->getThinkPath() . 'library')); + $baseDir = "'" . $libPath . "/'"; + } elseif (strpos($path, $appPath . '/') === 0) { + $path = substr($path, strlen($appPath) + 1); + $baseDir = "'" . $appPath . "/'"; + } elseif (strpos($path, $extendPath . '/') === 0) { + $path = substr($path, strlen($extendPath) + 1); + $baseDir = "'" . $extendPath . "/'"; + } + + if (false !== $path) { + $baseDir .= " . "; + } + + return $baseDir . ((false !== $path) ? var_export($path, true) : ""); + } + + protected function normalizePath($path) + { + $parts = []; + $path = strtr($path, '\\', '/'); + $prefix = ''; + $absolute = false; + + if (preg_match('{^([0-9a-z]+:(?://(?:[a-z]:)?)?)}i', $path, $match)) { + $prefix = $match[1]; + $path = substr($path, strlen($prefix)); + } + + if (substr($path, 0, 1) === '/') { + $absolute = true; + $path = substr($path, 1); + } + + $up = false; + foreach (explode('/', $path) as $chunk) { + if ('..' === $chunk && ($absolute || $up)) { + array_pop($parts); + $up = !(empty($parts) || '..' === end($parts)); + } elseif ('.' !== $chunk && '' !== $chunk) { + $parts[] = $chunk; + $up = '..' !== $chunk; + } + } + + return $prefix . ($absolute ? '/' : '') . implode('/', $parts); + } + + protected function createMap($path, $namespace = null) + { + if (is_string($path)) { + if (is_file($path)) { + $path = [new \SplFileInfo($path)]; + } elseif (is_dir($path)) { + + $objects = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path), \RecursiveIteratorIterator::SELF_FIRST); + + $path = []; + + /** @var \SplFileInfo $object */ + foreach ($objects as $object) { + if ($object->isFile() && $object->getExtension() == 'php') { + $path[] = $object; + } + } + } else { + throw new \RuntimeException( + 'Could not scan for classes inside "' . $path . + '" which does not appear to be a file nor a folder' + ); + } + } + + $map = []; + + /** @var \SplFileInfo $file */ + foreach ($path as $file) { + $filePath = $file->getRealPath(); + + if (pathinfo($filePath, PATHINFO_EXTENSION) != 'php') { + continue; + } + + $classes = $this->findClasses($filePath); + + foreach ($classes as $class) { + if (null !== $namespace && 0 !== strpos($class, $namespace)) { + continue; + } + + if (!isset($map[$class])) { + $map[$class] = $filePath; + } elseif ($map[$class] !== $filePath && !preg_match('{/(test|fixture|example|stub)s?/}i', strtr($map[$class] . ' ' . $filePath, '\\', '/'))) { + $this->output->writeln( + 'Warning: Ambiguous class resolution, "' . $class . '"' . + ' was found in both "' . $map[$class] . '" and "' . $filePath . '", the first will be used.' + ); + } + } + } + + return $map; + } + + protected function findClasses($path) + { + $extraTypes = '|trait'; + + $contents = @php_strip_whitespace($path); + if (!$contents) { + if (!file_exists($path)) { + $message = 'File at "%s" does not exist, check your classmap definitions'; + } elseif (!is_readable($path)) { + $message = 'File at "%s" is not readable, check its permissions'; + } elseif ('' === trim(file_get_contents($path))) { + return []; + } else { + $message = 'File at "%s" could not be parsed as PHP, it may be binary or corrupted'; + } + $error = error_get_last(); + if (isset($error['message'])) { + $message .= PHP_EOL . 'The following message may be helpful:' . PHP_EOL . $error['message']; + } + throw new \RuntimeException(sprintf($message, $path)); + } + + if (!preg_match('{\b(?:class|interface' . $extraTypes . ')\s}i', $contents)) { + return []; + } + + // strip heredocs/nowdocs + $contents = preg_replace('{<<<\s*(\'?)(\w+)\\1(?:\r\n|\n|\r)(?:.*?)(?:\r\n|\n|\r)\\2(?=\r\n|\n|\r|;)}s', 'null', $contents); + // strip strings + $contents = preg_replace('{"[^"\\\\]*+(\\\\.[^"\\\\]*+)*+"|\'[^\'\\\\]*+(\\\\.[^\'\\\\]*+)*+\'}s', 'null', $contents); + // strip leading non-php code if needed + if (substr($contents, 0, 2) !== '.+<\?}s', '?>'); + if (false !== $pos && false === strpos(substr($contents, $pos), '])(?Pclass|interface' . $extraTypes . ') \s++ (?P[a-zA-Z_\x7f-\xff:][a-zA-Z0-9_\x7f-\xff:\-]*+) + | \b(?])(?Pnamespace) (?P\s++[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+(?:\s*+\\\\\s*+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+)*+)? \s*+ [\{;] + ) + }ix', $contents, $matches); + + $classes = []; + $namespace = ''; + + for ($i = 0, $len = count($matches['type']); $i < $len; $i++) { + if (!empty($matches['ns'][$i])) { + $namespace = str_replace([' ', "\t", "\r", "\n"], '', $matches['nsname'][$i]) . '\\'; + } else { + $name = $matches['name'][$i]; + if (':' === $name[0]) { + $name = 'xhp' . substr(str_replace(['-', ':'], ['_', '__'], $name), 1); + } elseif ('enum' === $matches['type'][$i]) { + $name = rtrim($name, ':'); + } + $classes[] = ltrim($namespace . $name, '\\'); + } + } + + return $classes; + } + +} diff --git a/thinkphp/library/think/console/command/optimize/Config.php b/thinkphp/library/think/console/command/optimize/Config.php new file mode 100644 index 000000000..9b692b33b --- /dev/null +++ b/thinkphp/library/think/console/command/optimize/Config.php @@ -0,0 +1,110 @@ + +// +---------------------------------------------------------------------- +namespace think\console\command\optimize; + +use think\console\Command; +use think\console\Input; +use think\console\input\Argument; +use think\console\Output; +use think\Container; +use think\facade\App; + +class Config extends Command +{ + /** @var Output */ + protected $output; + + protected function configure() + { + $this->setName('optimize:config') + ->addArgument('module', Argument::OPTIONAL, 'Build module config cache .') + ->setDescription('Build config and common file cache.'); + } + + protected function execute(Input $input, Output $output) + { + if ($input->getArgument('module')) { + $module = $input->getArgument('module') . DIRECTORY_SEPARATOR; + } else { + $module = ''; + } + + $content = 'buildCacheContent($module); + $runtimePath = App::getRuntimePath(); + if (!is_dir($runtimePath . $module)) { + @mkdir($runtimePath . $module, 0755, true); + } + + file_put_contents($runtimePath . $module . 'init.php', $content); + + $output->writeln('Succeed!'); + } + + protected function buildCacheContent($module) + { + $content = '// This cache file is automatically generated at:' . date('Y-m-d H:i:s') . PHP_EOL; + $path = realpath(App::getAppPath() . $module) . DIRECTORY_SEPARATOR; + if ($module) { + $configPath = is_dir($path . 'config') ? $path . 'config' : App::getConfigPath() . $module; + } else { + $configPath = App::getConfigPath(); + } + $ext = App::getConfigExt(); + $config = Container::get('config'); + + $files = is_dir($configPath) ? scandir($configPath) : []; + + foreach ($files as $file) { + if ('.' . pathinfo($file, PATHINFO_EXTENSION) === $ext) { + $filename = $configPath . DIRECTORY_SEPARATOR . $file; + $config->load($filename, pathinfo($file, PATHINFO_FILENAME)); + } + } + + // 加载行为扩展文件 + if (is_file($path . 'tags.php')) { + $tags = include $path . 'tags.php'; + if (is_array($tags)) { + $content .= PHP_EOL . '\think\facade\Hook::import(' . (var_export($tags, true)) . ');' . PHP_EOL; + } + } + + // 加载公共文件 + if (is_file($path . 'common.php')) { + $common = substr(php_strip_whitespace($path . 'common.php'), 6); + if ($common) { + $content .= PHP_EOL . $common . PHP_EOL; + } + } + + if ('' == $module) { + $content .= PHP_EOL . substr(php_strip_whitespace(App::getThinkPath() . 'helper.php'), 6) . PHP_EOL; + + if (is_file($path . 'middleware.php')) { + $middleware = include $path . 'middleware.php'; + if (is_array($middleware)) { + $content .= PHP_EOL . '\think\Container::get("middleware")->import(' . var_export($middleware, true) . ');' . PHP_EOL; + } + } + } + + if (is_file($path . 'provider.php')) { + $provider = include $path . 'provider.php'; + if (is_array($provider)) { + $content .= PHP_EOL . '\think\Container::getInstance()->bind(' . var_export($provider, true) . ');' . PHP_EOL; + } + } + + $content .= PHP_EOL . '\think\facade\Config::set(' . var_export($config->get(), true) . ');' . PHP_EOL; + + return $content; + } +} diff --git a/thinkphp/library/think/console/command/optimize/Route.php b/thinkphp/library/think/console/command/optimize/Route.php new file mode 100644 index 000000000..b6ad5b52d --- /dev/null +++ b/thinkphp/library/think/console/command/optimize/Route.php @@ -0,0 +1,68 @@ + +// +---------------------------------------------------------------------- +namespace think\console\command\optimize; + +use think\console\Command; +use think\console\Input; +use think\console\Output; +use think\Container; + +class Route extends Command +{ + /** @var Output */ + protected $output; + + protected function configure() + { + $this->setName('optimize:route') + ->setDescription('Build route cache.'); + } + + protected function execute(Input $input, Output $output) + { + $filename = Container::get('app')->getRuntimePath() . 'route.php'; + if (is_file($filename)) { + unlink($filename); + } + file_put_contents($filename, $this->buildRouteCache()); + $output->writeln('Succeed!'); + } + + protected function buildRouteCache() + { + Container::get('route')->setName([]); + Container::get('route')->lazy(false); + // 路由检测 + $path = Container::get('app')->getRoutePath(); + + $files = is_dir($path) ? scandir($path) : []; + + foreach ($files as $file) { + if (strpos($file, '.php')) { + $filename = $path . DIRECTORY_SEPARATOR . $file; + // 导入路由配置 + $rules = include $filename; + if (is_array($rules)) { + Container::get('route')->import($rules); + } + } + } + + if (Container::get('config')->get('route_annotation')) { + include Container::get('build')->buildRoute(); + } + + $content = 'getName(), true) . ';'; + return $content; + } + +} diff --git a/thinkphp/library/think/console/command/optimize/Schema.php b/thinkphp/library/think/console/command/optimize/Schema.php new file mode 100644 index 000000000..61620badd --- /dev/null +++ b/thinkphp/library/think/console/command/optimize/Schema.php @@ -0,0 +1,121 @@ + +// +---------------------------------------------------------------------- +namespace think\console\command\optimize; + +use think\console\Command; +use think\console\Input; +use think\console\input\Option; +use think\console\Output; +use think\Db; +use think\facade\App; + +class Schema extends Command +{ + /** @var Output */ + protected $output; + + protected function configure() + { + $this->setName('optimize:schema') + ->addOption('db', null, Option::VALUE_REQUIRED, 'db name .') + ->addOption('table', null, Option::VALUE_REQUIRED, 'table name .') + ->addOption('module', null, Option::VALUE_REQUIRED, 'module name .') + ->setDescription('Build database schema cache.'); + } + + protected function execute(Input $input, Output $output) + { + if (!is_dir(App::getRuntimePath() . 'schema')) { + @mkdir(App::getRuntimePath() . 'schema', 0755, true); + } + + if ($input->hasOption('module')) { + $module = $input->getOption('module'); + // 读取模型 + $path = App::getAppPath() . $module . DIRECTORY_SEPARATOR . 'model'; + $list = is_dir($path) ? scandir($path) : []; + $namespace = App::getNamespace(); + + foreach ($list as $file) { + if (0 === strpos($file, '.')) { + continue; + } + $class = '\\' . $namespace . '\\' . $module . '\\model\\' . pathinfo($file, PATHINFO_FILENAME); + $this->buildModelSchema($class); + } + + $output->writeln('Succeed!'); + return; + } elseif ($input->hasOption('table')) { + $table = $input->getOption('table'); + if (!strpos($table, '.')) { + $dbName = Db::getConfig('database'); + } + + $tables[] = $table; + } elseif ($input->hasOption('db')) { + $dbName = $input->getOption('db'); + $tables = Db::getConnection()->getTables($dbName); + } elseif (!\think\facade\Config::get('app_multi_module')) { + $namespace = App::getNamespace(); + $path = App::getAppPath() . 'model'; + $list = is_dir($path) ? scandir($path) : []; + + foreach ($list as $file) { + if (0 === strpos($file, '.')) { + continue; + } + $class = '\\' . $namespace . '\\model\\' . pathinfo($file, PATHINFO_FILENAME); + $this->buildModelSchema($class); + } + + $output->writeln('Succeed!'); + return; + } else { + $tables = Db::getConnection()->getTables(); + } + + $db = isset($dbName) ? $dbName . '.' : ''; + $this->buildDataBaseSchema($tables, $db); + + $output->writeln('Succeed!'); + } + + protected function buildModelSchema($class) + { + $reflect = new \ReflectionClass($class); + if (!$reflect->isAbstract() && $reflect->isSubclassOf('\think\Model')) { + $table = $class::getTable(); + $dbName = $class::getConfig('database'); + $content = 'getFields($table); + $content .= var_export($info, true) . ';'; + + file_put_contents(App::getRuntimePath() . 'schema' . DIRECTORY_SEPARATOR . $dbName . '.' . $table . '.php', $content); + } + } + + protected function buildDataBaseSchema($tables, $db) + { + if ('' == $db) { + $dbName = Db::getConfig('database') . '.'; + } else { + $dbName = $db; + } + + foreach ($tables as $table) { + $content = 'getFields($db . $table); + $content .= var_export($info, true) . ';'; + file_put_contents(App::getRuntimePath() . 'schema' . DIRECTORY_SEPARATOR . $dbName . $table . '.php', $content); + } + } +} diff --git a/thinkphp/library/think/console/input/Argument.php b/thinkphp/library/think/console/input/Argument.php new file mode 100644 index 000000000..16223bbeb --- /dev/null +++ b/thinkphp/library/think/console/input/Argument.php @@ -0,0 +1,115 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\input; + +class Argument +{ + + const REQUIRED = 1; + const OPTIONAL = 2; + const IS_ARRAY = 4; + + private $name; + private $mode; + private $default; + private $description; + + /** + * 构造方法 + * @param string $name 参数名 + * @param int $mode 参数类型: self::REQUIRED 或者 self::OPTIONAL + * @param string $description 描述 + * @param mixed $default 默认值 (仅 self::OPTIONAL 类型有效) + * @throws \InvalidArgumentException + */ + public function __construct($name, $mode = null, $description = '', $default = null) + { + if (null === $mode) { + $mode = self::OPTIONAL; + } elseif (!is_int($mode) || $mode > 7 || $mode < 1) { + throw new \InvalidArgumentException(sprintf('Argument mode "%s" is not valid.', $mode)); + } + + $this->name = $name; + $this->mode = $mode; + $this->description = $description; + + $this->setDefault($default); + } + + /** + * 获取参数名 + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * 是否必须 + * @return bool + */ + public function isRequired() + { + return self::REQUIRED === (self::REQUIRED & $this->mode); + } + + /** + * 该参数是否接受数组 + * @return bool + */ + public function isArray() + { + return self::IS_ARRAY === (self::IS_ARRAY & $this->mode); + } + + /** + * 设置默认值 + * @param mixed $default 默认值 + * @throws \LogicException + */ + public function setDefault($default = null) + { + if (self::REQUIRED === $this->mode && null !== $default) { + throw new \LogicException('Cannot set a default value except for InputArgument::OPTIONAL mode.'); + } + + if ($this->isArray()) { + if (null === $default) { + $default = []; + } elseif (!is_array($default)) { + throw new \LogicException('A default value for an array argument must be an array.'); + } + } + + $this->default = $default; + } + + /** + * 获取默认值 + * @return mixed + */ + public function getDefault() + { + return $this->default; + } + + /** + * 获取描述 + * @return string + */ + public function getDescription() + { + return $this->description; + } +} diff --git a/thinkphp/library/think/console/input/Definition.php b/thinkphp/library/think/console/input/Definition.php new file mode 100644 index 000000000..c71977ec3 --- /dev/null +++ b/thinkphp/library/think/console/input/Definition.php @@ -0,0 +1,375 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\input; + +class Definition +{ + + /** + * @var Argument[] + */ + private $arguments; + + private $requiredCount; + private $hasAnArrayArgument = false; + private $hasOptional; + + /** + * @var Option[] + */ + private $options; + private $shortcuts; + + /** + * 构造方法 + * @param array $definition + * @api + */ + public function __construct(array $definition = []) + { + $this->setDefinition($definition); + } + + /** + * 设置指令的定义 + * @param array $definition 定义的数组 + */ + public function setDefinition(array $definition) + { + $arguments = []; + $options = []; + foreach ($definition as $item) { + if ($item instanceof Option) { + $options[] = $item; + } else { + $arguments[] = $item; + } + } + + $this->setArguments($arguments); + $this->setOptions($options); + } + + /** + * 设置参数 + * @param Argument[] $arguments 参数数组 + */ + public function setArguments($arguments = []) + { + $this->arguments = []; + $this->requiredCount = 0; + $this->hasOptional = false; + $this->hasAnArrayArgument = false; + $this->addArguments($arguments); + } + + /** + * 添加参数 + * @param Argument[] $arguments 参数数组 + * @api + */ + public function addArguments($arguments = []) + { + if (null !== $arguments) { + foreach ($arguments as $argument) { + $this->addArgument($argument); + } + } + } + + /** + * 添加一个参数 + * @param Argument $argument 参数 + * @throws \LogicException + */ + public function addArgument(Argument $argument) + { + if (isset($this->arguments[$argument->getName()])) { + throw new \LogicException(sprintf('An argument with name "%s" already exists.', $argument->getName())); + } + + if ($this->hasAnArrayArgument) { + throw new \LogicException('Cannot add an argument after an array argument.'); + } + + if ($argument->isRequired() && $this->hasOptional) { + throw new \LogicException('Cannot add a required argument after an optional one.'); + } + + if ($argument->isArray()) { + $this->hasAnArrayArgument = true; + } + + if ($argument->isRequired()) { + ++$this->requiredCount; + } else { + $this->hasOptional = true; + } + + $this->arguments[$argument->getName()] = $argument; + } + + /** + * 根据名称或者位置获取参数 + * @param string|int $name 参数名或者位置 + * @return Argument 参数 + * @throws \InvalidArgumentException + */ + public function getArgument($name) + { + if (!$this->hasArgument($name)) { + throw new \InvalidArgumentException(sprintf('The "%s" argument does not exist.', $name)); + } + + $arguments = is_int($name) ? array_values($this->arguments) : $this->arguments; + + return $arguments[$name]; + } + + /** + * 根据名称或位置检查是否具有某个参数 + * @param string|int $name 参数名或者位置 + * @return bool + * @api + */ + public function hasArgument($name) + { + $arguments = is_int($name) ? array_values($this->arguments) : $this->arguments; + + return isset($arguments[$name]); + } + + /** + * 获取所有的参数 + * @return Argument[] 参数数组 + */ + public function getArguments() + { + return $this->arguments; + } + + /** + * 获取参数数量 + * @return int + */ + public function getArgumentCount() + { + return $this->hasAnArrayArgument ? PHP_INT_MAX : count($this->arguments); + } + + /** + * 获取必填的参数的数量 + * @return int + */ + public function getArgumentRequiredCount() + { + return $this->requiredCount; + } + + /** + * 获取参数默认值 + * @return array + */ + public function getArgumentDefaults() + { + $values = []; + foreach ($this->arguments as $argument) { + $values[$argument->getName()] = $argument->getDefault(); + } + + return $values; + } + + /** + * 设置选项 + * @param Option[] $options 选项数组 + */ + public function setOptions($options = []) + { + $this->options = []; + $this->shortcuts = []; + $this->addOptions($options); + } + + /** + * 添加选项 + * @param Option[] $options 选项数组 + * @api + */ + public function addOptions($options = []) + { + foreach ($options as $option) { + $this->addOption($option); + } + } + + /** + * 添加一个选项 + * @param Option $option 选项 + * @throws \LogicException + * @api + */ + public function addOption(Option $option) + { + if (isset($this->options[$option->getName()]) && !$option->equals($this->options[$option->getName()])) { + throw new \LogicException(sprintf('An option named "%s" already exists.', $option->getName())); + } + + if ($option->getShortcut()) { + foreach (explode('|', $option->getShortcut()) as $shortcut) { + if (isset($this->shortcuts[$shortcut]) + && !$option->equals($this->options[$this->shortcuts[$shortcut]]) + ) { + throw new \LogicException(sprintf('An option with shortcut "%s" already exists.', $shortcut)); + } + } + } + + $this->options[$option->getName()] = $option; + if ($option->getShortcut()) { + foreach (explode('|', $option->getShortcut()) as $shortcut) { + $this->shortcuts[$shortcut] = $option->getName(); + } + } + } + + /** + * 根据名称获取选项 + * @param string $name 选项名 + * @return Option + * @throws \InvalidArgumentException + * @api + */ + public function getOption($name) + { + if (!$this->hasOption($name)) { + throw new \InvalidArgumentException(sprintf('The "--%s" option does not exist.', $name)); + } + + return $this->options[$name]; + } + + /** + * 根据名称检查是否有这个选项 + * @param string $name 选项名 + * @return bool + * @api + */ + public function hasOption($name) + { + return isset($this->options[$name]); + } + + /** + * 获取所有选项 + * @return Option[] + * @api + */ + public function getOptions() + { + return $this->options; + } + + /** + * 根据名称检查某个选项是否有短名称 + * @param string $name 短名称 + * @return bool + */ + public function hasShortcut($name) + { + return isset($this->shortcuts[$name]); + } + + /** + * 根据短名称获取选项 + * @param string $shortcut 短名称 + * @return Option + */ + public function getOptionForShortcut($shortcut) + { + return $this->getOption($this->shortcutToName($shortcut)); + } + + /** + * 获取所有选项的默认值 + * @return array + */ + public function getOptionDefaults() + { + $values = []; + foreach ($this->options as $option) { + $values[$option->getName()] = $option->getDefault(); + } + + return $values; + } + + /** + * 根据短名称获取选项名 + * @param string $shortcut 短名称 + * @return string + * @throws \InvalidArgumentException + */ + private function shortcutToName($shortcut) + { + if (!isset($this->shortcuts[$shortcut])) { + throw new \InvalidArgumentException(sprintf('The "-%s" option does not exist.', $shortcut)); + } + + return $this->shortcuts[$shortcut]; + } + + /** + * 获取该指令的介绍 + * @param bool $short 是否简洁介绍 + * @return string + */ + public function getSynopsis($short = false) + { + $elements = []; + + if ($short && $this->getOptions()) { + $elements[] = '[options]'; + } elseif (!$short) { + foreach ($this->getOptions() as $option) { + $value = ''; + if ($option->acceptValue()) { + $value = sprintf(' %s%s%s', $option->isValueOptional() ? '[' : '', strtoupper($option->getName()), $option->isValueOptional() ? ']' : ''); + } + + $shortcut = $option->getShortcut() ? sprintf('-%s|', $option->getShortcut()) : ''; + $elements[] = sprintf('[%s--%s%s]', $shortcut, $option->getName(), $value); + } + } + + if (count($elements) && $this->getArguments()) { + $elements[] = '[--]'; + } + + foreach ($this->getArguments() as $argument) { + $element = '<' . $argument->getName() . '>'; + if (!$argument->isRequired()) { + $element = '[' . $element . ']'; + } elseif ($argument->isArray()) { + $element .= ' (' . $element . ')'; + } + + if ($argument->isArray()) { + $element .= '...'; + } + + $elements[] = $element; + } + + return implode(' ', $elements); + } +} diff --git a/thinkphp/library/think/console/input/Option.php b/thinkphp/library/think/console/input/Option.php new file mode 100644 index 000000000..e5707c9ae --- /dev/null +++ b/thinkphp/library/think/console/input/Option.php @@ -0,0 +1,190 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\input; + +class Option +{ + + const VALUE_NONE = 1; + const VALUE_REQUIRED = 2; + const VALUE_OPTIONAL = 4; + const VALUE_IS_ARRAY = 8; + + private $name; + private $shortcut; + private $mode; + private $default; + private $description; + + /** + * 构造方法 + * @param string $name 选项名 + * @param string|array $shortcut 短名称,多个用|隔开或者使用数组 + * @param int $mode 选项类型(可选类型为 self::VALUE_*) + * @param string $description 描述 + * @param mixed $default 默认值 (类型为 self::VALUE_REQUIRED 或者 self::VALUE_NONE 的时候必须为null) + * @throws \InvalidArgumentException + */ + public function __construct($name, $shortcut = null, $mode = null, $description = '', $default = null) + { + if (0 === strpos($name, '--')) { + $name = substr($name, 2); + } + + if (empty($name)) { + throw new \InvalidArgumentException('An option name cannot be empty.'); + } + + if (empty($shortcut)) { + $shortcut = null; + } + + if (null !== $shortcut) { + if (is_array($shortcut)) { + $shortcut = implode('|', $shortcut); + } + $shortcuts = preg_split('{(\|)-?}', ltrim($shortcut, '-')); + $shortcuts = array_filter($shortcuts); + $shortcut = implode('|', $shortcuts); + + if (empty($shortcut)) { + throw new \InvalidArgumentException('An option shortcut cannot be empty.'); + } + } + + if (null === $mode) { + $mode = self::VALUE_NONE; + } elseif (!is_int($mode) || $mode > 15 || $mode < 1) { + throw new \InvalidArgumentException(sprintf('Option mode "%s" is not valid.', $mode)); + } + + $this->name = $name; + $this->shortcut = $shortcut; + $this->mode = $mode; + $this->description = $description; + + if ($this->isArray() && !$this->acceptValue()) { + throw new \InvalidArgumentException('Impossible to have an option mode VALUE_IS_ARRAY if the option does not accept a value.'); + } + + $this->setDefault($default); + } + + /** + * 获取短名称 + * @return string + */ + public function getShortcut() + { + return $this->shortcut; + } + + /** + * 获取选项名 + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * 是否可以设置值 + * @return bool 类型不是 self::VALUE_NONE 的时候返回true,其他均返回false + */ + public function acceptValue() + { + return $this->isValueRequired() || $this->isValueOptional(); + } + + /** + * 是否必须 + * @return bool 类型是 self::VALUE_REQUIRED 的时候返回true,其他均返回false + */ + public function isValueRequired() + { + return self::VALUE_REQUIRED === (self::VALUE_REQUIRED & $this->mode); + } + + /** + * 是否可选 + * @return bool 类型是 self::VALUE_OPTIONAL 的时候返回true,其他均返回false + */ + public function isValueOptional() + { + return self::VALUE_OPTIONAL === (self::VALUE_OPTIONAL & $this->mode); + } + + /** + * 选项值是否接受数组 + * @return bool 类型是 self::VALUE_IS_ARRAY 的时候返回true,其他均返回false + */ + public function isArray() + { + return self::VALUE_IS_ARRAY === (self::VALUE_IS_ARRAY & $this->mode); + } + + /** + * 设置默认值 + * @param mixed $default 默认值 + * @throws \LogicException + */ + public function setDefault($default = null) + { + if (self::VALUE_NONE === (self::VALUE_NONE & $this->mode) && null !== $default) { + throw new \LogicException('Cannot set a default value when using InputOption::VALUE_NONE mode.'); + } + + if ($this->isArray()) { + if (null === $default) { + $default = []; + } elseif (!is_array($default)) { + throw new \LogicException('A default value for an array option must be an array.'); + } + } + + $this->default = $this->acceptValue() ? $default : false; + } + + /** + * 获取默认值 + * @return mixed + */ + public function getDefault() + { + return $this->default; + } + + /** + * 获取描述文字 + * @return string + */ + public function getDescription() + { + return $this->description; + } + + /** + * 检查所给选项是否是当前这个 + * @param Option $option + * @return bool + */ + public function equals(Option $option) + { + return $option->getName() === $this->getName() + && $option->getShortcut() === $this->getShortcut() + && $option->getDefault() === $this->getDefault() + && $option->isArray() === $this->isArray() + && $option->isValueRequired() === $this->isValueRequired() + && $option->isValueOptional() === $this->isValueOptional(); + } +} diff --git a/thinkphp/library/think/console/output/Ask.php b/thinkphp/library/think/console/output/Ask.php new file mode 100644 index 000000000..3933eb296 --- /dev/null +++ b/thinkphp/library/think/console/output/Ask.php @@ -0,0 +1,340 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\output; + +use think\console\Input; +use think\console\Output; +use think\console\output\question\Choice; +use think\console\output\question\Confirmation; + +class Ask +{ + private static $stty; + + private static $shell; + + /** @var Input */ + protected $input; + + /** @var Output */ + protected $output; + + /** @var Question */ + protected $question; + + public function __construct(Input $input, Output $output, Question $question) + { + $this->input = $input; + $this->output = $output; + $this->question = $question; + } + + public function run() + { + if (!$this->input->isInteractive()) { + return $this->question->getDefault(); + } + + if (!$this->question->getValidator()) { + return $this->doAsk(); + } + + $that = $this; + + $interviewer = function () use ($that) { + return $that->doAsk(); + }; + + return $this->validateAttempts($interviewer); + } + + protected function doAsk() + { + $this->writePrompt(); + + $inputStream = STDIN; + $autocomplete = $this->question->getAutocompleterValues(); + + if (null === $autocomplete || !$this->hasSttyAvailable()) { + $ret = false; + if ($this->question->isHidden()) { + try { + $ret = trim($this->getHiddenResponse($inputStream)); + } catch (\RuntimeException $e) { + if (!$this->question->isHiddenFallback()) { + throw $e; + } + } + } + + if (false === $ret) { + $ret = fgets($inputStream, 4096); + if (false === $ret) { + throw new \RuntimeException('Aborted'); + } + $ret = trim($ret); + } + } else { + $ret = trim($this->autocomplete($inputStream)); + } + + $ret = strlen($ret) > 0 ? $ret : $this->question->getDefault(); + + if ($normalizer = $this->question->getNormalizer()) { + return $normalizer($ret); + } + + return $ret; + } + + private function autocomplete($inputStream) + { + $autocomplete = $this->question->getAutocompleterValues(); + $ret = ''; + + $i = 0; + $ofs = -1; + $matches = $autocomplete; + $numMatches = count($matches); + + $sttyMode = shell_exec('stty -g'); + + shell_exec('stty -icanon -echo'); + + while (!feof($inputStream)) { + $c = fread($inputStream, 1); + + if ("\177" === $c) { + if (0 === $numMatches && 0 !== $i) { + --$i; + $this->output->write("\033[1D"); + } + + if ($i === 0) { + $ofs = -1; + $matches = $autocomplete; + $numMatches = count($matches); + } else { + $numMatches = 0; + } + + $ret = substr($ret, 0, $i); + } elseif ("\033" === $c) { + $c .= fread($inputStream, 2); + + if (isset($c[2]) && ('A' === $c[2] || 'B' === $c[2])) { + if ('A' === $c[2] && -1 === $ofs) { + $ofs = 0; + } + + if (0 === $numMatches) { + continue; + } + + $ofs += ('A' === $c[2]) ? -1 : 1; + $ofs = ($numMatches + $ofs) % $numMatches; + } + } elseif (ord($c) < 32) { + if ("\t" === $c || "\n" === $c) { + if ($numMatches > 0 && -1 !== $ofs) { + $ret = $matches[$ofs]; + $this->output->write(substr($ret, $i)); + $i = strlen($ret); + } + + if ("\n" === $c) { + $this->output->write($c); + break; + } + + $numMatches = 0; + } + + continue; + } else { + $this->output->write($c); + $ret .= $c; + ++$i; + + $numMatches = 0; + $ofs = 0; + + foreach ($autocomplete as $value) { + if (0 === strpos($value, $ret) && $i !== strlen($value)) { + $matches[$numMatches++] = $value; + } + } + } + + $this->output->write("\033[K"); + + if ($numMatches > 0 && -1 !== $ofs) { + $this->output->write("\0337"); + $this->output->highlight(substr($matches[$ofs], $i)); + $this->output->write("\0338"); + } + } + + shell_exec(sprintf('stty %s', $sttyMode)); + + return $ret; + } + + protected function getHiddenResponse($inputStream) + { + if ('\\' === DIRECTORY_SEPARATOR) { + $exe = __DIR__ . '/../bin/hiddeninput.exe'; + + $value = rtrim(shell_exec($exe)); + $this->output->writeln(''); + + if (isset($tmpExe)) { + unlink($tmpExe); + } + + return $value; + } + + if ($this->hasSttyAvailable()) { + $sttyMode = shell_exec('stty -g'); + + shell_exec('stty -echo'); + $value = fgets($inputStream, 4096); + shell_exec(sprintf('stty %s', $sttyMode)); + + if (false === $value) { + throw new \RuntimeException('Aborted'); + } + + $value = trim($value); + $this->output->writeln(''); + + return $value; + } + + if (false !== $shell = $this->getShell()) { + $readCmd = $shell === 'csh' ? 'set mypassword = $<' : 'read -r mypassword'; + $command = sprintf("/usr/bin/env %s -c 'stty -echo; %s; stty echo; echo \$mypassword'", $shell, $readCmd); + $value = rtrim(shell_exec($command)); + $this->output->writeln(''); + + return $value; + } + + throw new \RuntimeException('Unable to hide the response.'); + } + + protected function validateAttempts($interviewer) + { + /** @var \Exception $error */ + $error = null; + $attempts = $this->question->getMaxAttempts(); + while (null === $attempts || $attempts--) { + if (null !== $error) { + $this->output->error($error->getMessage()); + } + + try { + return call_user_func($this->question->getValidator(), $interviewer()); + } catch (\Exception $error) { + } + } + + throw $error; + } + + /** + * 显示问题的提示信息 + */ + protected function writePrompt() + { + $text = $this->question->getQuestion(); + $default = $this->question->getDefault(); + + switch (true) { + case null === $default: + $text = sprintf(' %s:', $text); + + break; + + case $this->question instanceof Confirmation: + $text = sprintf(' %s (yes/no) [%s]:', $text, $default ? 'yes' : 'no'); + + break; + + case $this->question instanceof Choice && $this->question->isMultiselect(): + $choices = $this->question->getChoices(); + $default = explode(',', $default); + + foreach ($default as $key => $value) { + $default[$key] = $choices[trim($value)]; + } + + $text = sprintf(' %s [%s]:', $text, implode(', ', $default)); + + break; + + case $this->question instanceof Choice: + $choices = $this->question->getChoices(); + $text = sprintf(' %s [%s]:', $text, $choices[$default]); + + break; + + default: + $text = sprintf(' %s [%s]:', $text, $default); + } + + $this->output->writeln($text); + + if ($this->question instanceof Choice) { + $width = max(array_map('strlen', array_keys($this->question->getChoices()))); + + foreach ($this->question->getChoices() as $key => $value) { + $this->output->writeln(sprintf(" [%-${width}s] %s", $key, $value)); + } + } + + $this->output->write(' > '); + } + + private function getShell() + { + if (null !== self::$shell) { + return self::$shell; + } + + self::$shell = false; + + if (file_exists('/usr/bin/env')) { + $test = "/usr/bin/env %s -c 'echo OK' 2> /dev/null"; + foreach (['bash', 'zsh', 'ksh', 'csh'] as $sh) { + if ('OK' === rtrim(shell_exec(sprintf($test, $sh)))) { + self::$shell = $sh; + break; + } + } + } + + return self::$shell; + } + + private function hasSttyAvailable() + { + if (null !== self::$stty) { + return self::$stty; + } + + exec('stty 2>&1', $output, $exitcode); + + return self::$stty = $exitcode === 0; + } +} diff --git a/thinkphp/library/think/console/output/Descriptor.php b/thinkphp/library/think/console/output/Descriptor.php new file mode 100644 index 000000000..6d98d53c7 --- /dev/null +++ b/thinkphp/library/think/console/output/Descriptor.php @@ -0,0 +1,319 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\output; + +use think\Console; +use think\console\Command; +use think\console\input\Argument as InputArgument; +use think\console\input\Definition as InputDefinition; +use think\console\input\Option as InputOption; +use think\console\Output; +use think\console\output\descriptor\Console as ConsoleDescription; + +class Descriptor +{ + + /** + * @var Output + */ + protected $output; + + /** + * {@inheritdoc} + */ + public function describe(Output $output, $object, array $options = []) + { + $this->output = $output; + + switch (true) { + case $object instanceof InputArgument: + $this->describeInputArgument($object, $options); + break; + case $object instanceof InputOption: + $this->describeInputOption($object, $options); + break; + case $object instanceof InputDefinition: + $this->describeInputDefinition($object, $options); + break; + case $object instanceof Command: + $this->describeCommand($object, $options); + break; + case $object instanceof Console: + $this->describeConsole($object, $options); + break; + default: + throw new \InvalidArgumentException(sprintf('Object of type "%s" is not describable.', get_class($object))); + } + } + + /** + * 输出内容 + * @param string $content + * @param bool $decorated + */ + protected function write($content, $decorated = false) + { + $this->output->write($content, false, $decorated ? Output::OUTPUT_NORMAL : Output::OUTPUT_RAW); + } + + /** + * 描述参数 + * @param InputArgument $argument + * @param array $options + * @return string|mixed + */ + protected function describeInputArgument(InputArgument $argument, array $options = []) + { + if (null !== $argument->getDefault() + && (!is_array($argument->getDefault()) + || count($argument->getDefault())) + ) { + $default = sprintf(' [default: %s]', $this->formatDefaultValue($argument->getDefault())); + } else { + $default = ''; + } + + $totalWidth = isset($options['total_width']) ? $options['total_width'] : strlen($argument->getName()); + $spacingWidth = $totalWidth - strlen($argument->getName()) + 2; + + $this->writeText(sprintf(" %s%s%s%s", $argument->getName(), str_repeat(' ', $spacingWidth), // + 17 = 2 spaces + + + 2 spaces + preg_replace('/\s*\R\s*/', PHP_EOL . str_repeat(' ', $totalWidth + 17), $argument->getDescription()), $default), $options); + } + + /** + * 描述选项 + * @param InputOption $option + * @param array $options + * @return string|mixed + */ + protected function describeInputOption(InputOption $option, array $options = []) + { + if ($option->acceptValue() && null !== $option->getDefault() + && (!is_array($option->getDefault()) + || count($option->getDefault())) + ) { + $default = sprintf(' [default: %s]', $this->formatDefaultValue($option->getDefault())); + } else { + $default = ''; + } + + $value = ''; + if ($option->acceptValue()) { + $value = '=' . strtoupper($option->getName()); + + if ($option->isValueOptional()) { + $value = '[' . $value . ']'; + } + } + + $totalWidth = isset($options['total_width']) ? $options['total_width'] : $this->calculateTotalWidthForOptions([$option]); + $synopsis = sprintf('%s%s', $option->getShortcut() ? sprintf('-%s, ', $option->getShortcut()) : ' ', sprintf('--%s%s', $option->getName(), $value)); + + $spacingWidth = $totalWidth - strlen($synopsis) + 2; + + $this->writeText(sprintf(" %s%s%s%s%s", $synopsis, str_repeat(' ', $spacingWidth), // + 17 = 2 spaces + + + 2 spaces + preg_replace('/\s*\R\s*/', "\n" . str_repeat(' ', $totalWidth + 17), $option->getDescription()), $default, $option->isArray() ? ' (multiple values allowed)' : ''), $options); + } + + /** + * 描述输入 + * @param InputDefinition $definition + * @param array $options + * @return string|mixed + */ + protected function describeInputDefinition(InputDefinition $definition, array $options = []) + { + $totalWidth = $this->calculateTotalWidthForOptions($definition->getOptions()); + foreach ($definition->getArguments() as $argument) { + $totalWidth = max($totalWidth, strlen($argument->getName())); + } + + if ($definition->getArguments()) { + $this->writeText('Arguments:', $options); + $this->writeText("\n"); + foreach ($definition->getArguments() as $argument) { + $this->describeInputArgument($argument, array_merge($options, ['total_width' => $totalWidth])); + $this->writeText("\n"); + } + } + + if ($definition->getArguments() && $definition->getOptions()) { + $this->writeText("\n"); + } + + if ($definition->getOptions()) { + $laterOptions = []; + + $this->writeText('Options:', $options); + foreach ($definition->getOptions() as $option) { + if (strlen($option->getShortcut()) > 1) { + $laterOptions[] = $option; + continue; + } + $this->writeText("\n"); + $this->describeInputOption($option, array_merge($options, ['total_width' => $totalWidth])); + } + foreach ($laterOptions as $option) { + $this->writeText("\n"); + $this->describeInputOption($option, array_merge($options, ['total_width' => $totalWidth])); + } + } + } + + /** + * 描述指令 + * @param Command $command + * @param array $options + * @return string|mixed + */ + protected function describeCommand(Command $command, array $options = []) + { + $command->getSynopsis(true); + $command->getSynopsis(false); + $command->mergeConsoleDefinition(false); + + $this->writeText('Usage:', $options); + foreach (array_merge([$command->getSynopsis(true)], $command->getAliases(), $command->getUsages()) as $usage) { + $this->writeText("\n"); + $this->writeText(' ' . $usage, $options); + } + $this->writeText("\n"); + + $definition = $command->getNativeDefinition(); + if ($definition->getOptions() || $definition->getArguments()) { + $this->writeText("\n"); + $this->describeInputDefinition($definition, $options); + $this->writeText("\n"); + } + + if ($help = $command->getProcessedHelp()) { + $this->writeText("\n"); + $this->writeText('Help:', $options); + $this->writeText("\n"); + $this->writeText(' ' . str_replace("\n", "\n ", $help), $options); + $this->writeText("\n"); + } + } + + /** + * 描述控制台 + * @param Console $console + * @param array $options + * @return string|mixed + */ + protected function describeConsole(Console $console, array $options = []) + { + $describedNamespace = isset($options['namespace']) ? $options['namespace'] : null; + $description = new ConsoleDescription($console, $describedNamespace); + + if (isset($options['raw_text']) && $options['raw_text']) { + $width = $this->getColumnWidth($description->getCommands()); + + foreach ($description->getCommands() as $command) { + $this->writeText(sprintf("%-${width}s %s", $command->getName(), $command->getDescription()), $options); + $this->writeText("\n"); + } + } else { + if ('' != $help = $console->getHelp()) { + $this->writeText("$help\n\n", $options); + } + + $this->writeText("Usage:\n", $options); + $this->writeText(" command [options] [arguments]\n\n", $options); + + $this->describeInputDefinition(new InputDefinition($console->getDefinition()->getOptions()), $options); + + $this->writeText("\n"); + $this->writeText("\n"); + + $width = $this->getColumnWidth($description->getCommands()); + + if ($describedNamespace) { + $this->writeText(sprintf('Available commands for the "%s" namespace:', $describedNamespace), $options); + } else { + $this->writeText('Available commands:', $options); + } + + // add commands by namespace + foreach ($description->getNamespaces() as $namespace) { + if (!$describedNamespace && ConsoleDescription::GLOBAL_NAMESPACE !== $namespace['id']) { + $this->writeText("\n"); + $this->writeText(' ' . $namespace['id'] . '', $options); + } + + foreach ($namespace['commands'] as $name) { + $this->writeText("\n"); + $spacingWidth = $width - strlen($name); + $this->writeText(sprintf(" %s%s%s", $name, str_repeat(' ', $spacingWidth), $description->getCommand($name) + ->getDescription()), $options); + } + } + + $this->writeText("\n"); + } + } + + /** + * {@inheritdoc} + */ + private function writeText($content, array $options = []) + { + $this->write(isset($options['raw_text']) + && $options['raw_text'] ? strip_tags($content) : $content, isset($options['raw_output']) ? !$options['raw_output'] : true); + } + + /** + * 格式化 + * @param mixed $default + * @return string + */ + private function formatDefaultValue($default) + { + return json_encode($default, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); + } + + /** + * @param Command[] $commands + * @return int + */ + private function getColumnWidth(array $commands) + { + $width = 0; + foreach ($commands as $command) { + $width = strlen($command->getName()) > $width ? strlen($command->getName()) : $width; + } + + return $width + 2; + } + + /** + * @param InputOption[] $options + * @return int + */ + private function calculateTotalWidthForOptions($options) + { + $totalWidth = 0; + foreach ($options as $option) { + $nameLength = 4 + strlen($option->getName()) + 2; // - + shortcut + , + whitespace + name + -- + + if ($option->acceptValue()) { + $valueLength = 1 + strlen($option->getName()); // = + value + $valueLength += $option->isValueOptional() ? 2 : 0; // [ + ] + + $nameLength += $valueLength; + } + $totalWidth = max($totalWidth, $nameLength); + } + + return $totalWidth; + } +} diff --git a/thinkphp/library/think/console/output/Formatter.php b/thinkphp/library/think/console/output/Formatter.php new file mode 100644 index 000000000..f8bee5527 --- /dev/null +++ b/thinkphp/library/think/console/output/Formatter.php @@ -0,0 +1,198 @@ + +// +---------------------------------------------------------------------- +namespace think\console\output; + +use think\console\output\formatter\Stack as StyleStack; +use think\console\output\formatter\Style; + +class Formatter +{ + + private $decorated = false; + private $styles = []; + private $styleStack; + + /** + * 转义 + * @param string $text + * @return string + */ + public static function escape($text) + { + return preg_replace('/([^\\\\]?)setStyle('error', new Style('white', 'red')); + $this->setStyle('info', new Style('green')); + $this->setStyle('comment', new Style('yellow')); + $this->setStyle('question', new Style('black', 'cyan')); + $this->setStyle('highlight', new Style('red')); + $this->setStyle('warning', new Style('black', 'yellow')); + + $this->styleStack = new StyleStack(); + } + + /** + * 设置外观标识 + * @param bool $decorated 是否美化文字 + */ + public function setDecorated($decorated) + { + $this->decorated = (bool) $decorated; + } + + /** + * 获取外观标识 + * @return bool + */ + public function isDecorated() + { + return $this->decorated; + } + + /** + * 添加一个新样式 + * @param string $name 样式名 + * @param Style $style 样式实例 + */ + public function setStyle($name, Style $style) + { + $this->styles[strtolower($name)] = $style; + } + + /** + * 是否有这个样式 + * @param string $name + * @return bool + */ + public function hasStyle($name) + { + return isset($this->styles[strtolower($name)]); + } + + /** + * 获取样式 + * @param string $name + * @return Style + * @throws \InvalidArgumentException + */ + public function getStyle($name) + { + if (!$this->hasStyle($name)) { + throw new \InvalidArgumentException(sprintf('Undefined style: %s', $name)); + } + + return $this->styles[strtolower($name)]; + } + + /** + * 使用所给的样式格式化文字 + * @param string $message 文字 + * @return string + */ + public function format($message) + { + $offset = 0; + $output = ''; + $tagRegex = '[a-z][a-z0-9_=;-]*'; + preg_match_all("#<(($tagRegex) | /($tagRegex)?)>#isx", $message, $matches, PREG_OFFSET_CAPTURE); + foreach ($matches[0] as $i => $match) { + $pos = $match[1]; + $text = $match[0]; + + if (0 != $pos && '\\' == $message[$pos - 1]) { + continue; + } + + $output .= $this->applyCurrentStyle(substr($message, $offset, $pos - $offset)); + $offset = $pos + strlen($text); + + if ($open = '/' != $text[1]) { + $tag = $matches[1][$i][0]; + } else { + $tag = isset($matches[3][$i][0]) ? $matches[3][$i][0] : ''; + } + + if (!$open && !$tag) { + // + $this->styleStack->pop(); + } elseif (false === $style = $this->createStyleFromString(strtolower($tag))) { + $output .= $this->applyCurrentStyle($text); + } elseif ($open) { + $this->styleStack->push($style); + } else { + $this->styleStack->pop($style); + } + } + + $output .= $this->applyCurrentStyle(substr($message, $offset)); + + return str_replace('\\<', '<', $output); + } + + /** + * @return StyleStack + */ + public function getStyleStack() + { + return $this->styleStack; + } + + /** + * 根据字符串创建新的样式实例 + * @param string $string + * @return Style|bool + */ + private function createStyleFromString($string) + { + if (isset($this->styles[$string])) { + return $this->styles[$string]; + } + + if (!preg_match_all('/([^=]+)=([^;]+)(;|$)/', strtolower($string), $matches, PREG_SET_ORDER)) { + return false; + } + + $style = new Style(); + foreach ($matches as $match) { + array_shift($match); + + if ('fg' == $match[0]) { + $style->setForeground($match[1]); + } elseif ('bg' == $match[0]) { + $style->setBackground($match[1]); + } else { + try { + $style->setOption($match[1]); + } catch (\InvalidArgumentException $e) { + return false; + } + } + } + + return $style; + } + + /** + * 从堆栈应用样式到文字 + * @param string $text 文字 + * @return string + */ + private function applyCurrentStyle($text) + { + return $this->isDecorated() && strlen($text) > 0 ? $this->styleStack->getCurrent()->apply($text) : $text; + } +} diff --git a/thinkphp/library/think/console/output/Question.php b/thinkphp/library/think/console/output/Question.php new file mode 100644 index 000000000..03975f274 --- /dev/null +++ b/thinkphp/library/think/console/output/Question.php @@ -0,0 +1,211 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\output; + +class Question +{ + + private $question; + private $attempts; + private $hidden = false; + private $hiddenFallback = true; + private $autocompleterValues; + private $validator; + private $default; + private $normalizer; + + /** + * 构造方法 + * @param string $question 问题 + * @param mixed $default 默认答案 + */ + public function __construct($question, $default = null) + { + $this->question = $question; + $this->default = $default; + } + + /** + * 获取问题 + * @return string + */ + public function getQuestion() + { + return $this->question; + } + + /** + * 获取默认答案 + * @return mixed + */ + public function getDefault() + { + return $this->default; + } + + /** + * 是否隐藏答案 + * @return bool + */ + public function isHidden() + { + return $this->hidden; + } + + /** + * 隐藏答案 + * @param bool $hidden + * @return Question + */ + public function setHidden($hidden) + { + if ($this->autocompleterValues) { + throw new \LogicException('A hidden question cannot use the autocompleter.'); + } + + $this->hidden = (bool) $hidden; + + return $this; + } + + /** + * 不能被隐藏是否撤销 + * @return bool + */ + public function isHiddenFallback() + { + return $this->hiddenFallback; + } + + /** + * 设置不能被隐藏的时候的操作 + * @param bool $fallback + * @return Question + */ + public function setHiddenFallback($fallback) + { + $this->hiddenFallback = (bool) $fallback; + + return $this; + } + + /** + * 获取自动完成 + * @return null|array|\Traversable + */ + public function getAutocompleterValues() + { + return $this->autocompleterValues; + } + + /** + * 设置自动完成的值 + * @param null|array|\Traversable $values + * @return Question + * @throws \InvalidArgumentException + * @throws \LogicException + */ + public function setAutocompleterValues($values) + { + if (is_array($values) && $this->isAssoc($values)) { + $values = array_merge(array_keys($values), array_values($values)); + } + + if (null !== $values && !is_array($values)) { + if (!$values instanceof \Traversable || $values instanceof \Countable) { + throw new \InvalidArgumentException('Autocompleter values can be either an array, `null` or an object implementing both `Countable` and `Traversable` interfaces.'); + } + } + + if ($this->hidden) { + throw new \LogicException('A hidden question cannot use the autocompleter.'); + } + + $this->autocompleterValues = $values; + + return $this; + } + + /** + * 设置答案的验证器 + * @param null|callable $validator + * @return Question The current instance + */ + public function setValidator($validator) + { + $this->validator = $validator; + + return $this; + } + + /** + * 获取验证器 + * @return null|callable + */ + public function getValidator() + { + return $this->validator; + } + + /** + * 设置最大重试次数 + * @param null|int $attempts + * @return Question + * @throws \InvalidArgumentException + */ + public function setMaxAttempts($attempts) + { + if (null !== $attempts && $attempts < 1) { + throw new \InvalidArgumentException('Maximum number of attempts must be a positive value.'); + } + + $this->attempts = $attempts; + + return $this; + } + + /** + * 获取最大重试次数 + * @return null|int + */ + public function getMaxAttempts() + { + return $this->attempts; + } + + /** + * 设置响应的回调 + * @param string|\Closure $normalizer + * @return Question + */ + public function setNormalizer($normalizer) + { + $this->normalizer = $normalizer; + + return $this; + } + + /** + * 获取响应回调 + * The normalizer can ba a callable (a string), a closure or a class implementing __invoke. + * @return string|\Closure + */ + public function getNormalizer() + { + return $this->normalizer; + } + + protected function isAssoc($array) + { + return (bool) count(array_filter(array_keys($array), 'is_string')); + } +} diff --git a/thinkphp/library/think/console/output/descriptor/Console.php b/thinkphp/library/think/console/output/descriptor/Console.php new file mode 100644 index 000000000..4648b68e6 --- /dev/null +++ b/thinkphp/library/think/console/output/descriptor/Console.php @@ -0,0 +1,149 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\output\descriptor; + +use think\Console as ThinkConsole; +use think\console\Command; + +class Console +{ + + const GLOBAL_NAMESPACE = '_global'; + + /** + * @var ThinkConsole + */ + private $console; + + /** + * @var null|string + */ + private $namespace; + + /** + * @var array + */ + private $namespaces; + + /** + * @var Command[] + */ + private $commands; + + /** + * @var Command[] + */ + private $aliases; + + /** + * 构造方法 + * @param ThinkConsole $console + * @param string|null $namespace + */ + public function __construct(ThinkConsole $console, $namespace = null) + { + $this->console = $console; + $this->namespace = $namespace; + } + + /** + * @return array + */ + public function getNamespaces() + { + if (null === $this->namespaces) { + $this->inspectConsole(); + } + + return $this->namespaces; + } + + /** + * @return Command[] + */ + public function getCommands() + { + if (null === $this->commands) { + $this->inspectConsole(); + } + + return $this->commands; + } + + /** + * @param string $name + * @return Command + * @throws \InvalidArgumentException + */ + public function getCommand($name) + { + if (!isset($this->commands[$name]) && !isset($this->aliases[$name])) { + throw new \InvalidArgumentException(sprintf('Command %s does not exist.', $name)); + } + + return isset($this->commands[$name]) ? $this->commands[$name] : $this->aliases[$name]; + } + + private function inspectConsole() + { + $this->commands = []; + $this->namespaces = []; + + $all = $this->console->all($this->namespace ? $this->console->findNamespace($this->namespace) : null); + foreach ($this->sortCommands($all) as $namespace => $commands) { + $names = []; + + /** @var Command $command */ + foreach ($commands as $name => $command) { + if (!$command->getName()) { + continue; + } + + if ($command->getName() === $name) { + $this->commands[$name] = $command; + } else { + $this->aliases[$name] = $command; + } + + $names[] = $name; + } + + $this->namespaces[$namespace] = ['id' => $namespace, 'commands' => $names]; + } + } + + /** + * @param array $commands + * @return array + */ + private function sortCommands(array $commands) + { + $namespacedCommands = []; + foreach ($commands as $name => $command) { + $key = $this->console->extractNamespace($name, 1); + if (!$key) { + $key = self::GLOBAL_NAMESPACE; + } + + $namespacedCommands[$key][$name] = $command; + } + ksort($namespacedCommands); + + foreach ($namespacedCommands as &$commandsSet) { + ksort($commandsSet); + } + // unset reference to keep scope clear + unset($commandsSet); + + return $namespacedCommands; + } +} diff --git a/thinkphp/library/think/console/output/driver/Buffer.php b/thinkphp/library/think/console/output/driver/Buffer.php new file mode 100644 index 000000000..c77a2ec4b --- /dev/null +++ b/thinkphp/library/think/console/output/driver/Buffer.php @@ -0,0 +1,52 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\output\driver; + +use think\console\Output; + +class Buffer +{ + /** + * @var string + */ + private $buffer = ''; + + public function __construct(Output $output) + { + // do nothing + } + + public function fetch() + { + $content = $this->buffer; + $this->buffer = ''; + return $content; + } + + public function write($messages, $newline = false, $options = Output::OUTPUT_NORMAL) + { + $messages = (array) $messages; + + foreach ($messages as $message) { + $this->buffer .= $message; + } + if ($newline) { + $this->buffer .= "\n"; + } + } + + public function renderException(\Exception $e) + { + // do nothing + } + +} diff --git a/thinkphp/library/think/console/output/driver/Console.php b/thinkphp/library/think/console/output/driver/Console.php new file mode 100644 index 000000000..e041b5250 --- /dev/null +++ b/thinkphp/library/think/console/output/driver/Console.php @@ -0,0 +1,368 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\output\driver; + +use think\console\Output; +use think\console\output\Formatter; + +class Console +{ + + /** @var Resource */ + private $stdout; + + /** @var Formatter */ + private $formatter; + + private $terminalDimensions; + + /** @var Output */ + private $output; + + public function __construct(Output $output) + { + $this->output = $output; + $this->formatter = new Formatter(); + $this->stdout = $this->openOutputStream(); + $decorated = $this->hasColorSupport($this->stdout); + $this->formatter->setDecorated($decorated); + } + + public function setDecorated($decorated) + { + $this->formatter->setDecorated($decorated); + } + + public function write($messages, $newline = false, $type = Output::OUTPUT_NORMAL, $stream = null) + { + if (Output::VERBOSITY_QUIET === $this->output->getVerbosity()) { + return; + } + + $messages = (array) $messages; + + foreach ($messages as $message) { + switch ($type) { + case Output::OUTPUT_NORMAL: + $message = $this->formatter->format($message); + break; + case Output::OUTPUT_RAW: + break; + case Output::OUTPUT_PLAIN: + $message = strip_tags($this->formatter->format($message)); + break; + default: + throw new \InvalidArgumentException(sprintf('Unknown output type given (%s)', $type)); + } + + $this->doWrite($message, $newline, $stream); + } + } + + public function renderException(\Exception $e) + { + $stderr = $this->openErrorStream(); + $decorated = $this->hasColorSupport($stderr); + $this->formatter->setDecorated($decorated); + + do { + $title = sprintf(' [%s] ', get_class($e)); + + $len = $this->stringWidth($title); + + $width = $this->getTerminalWidth() ? $this->getTerminalWidth() - 1 : PHP_INT_MAX; + + if (defined('HHVM_VERSION') && $width > 1 << 31) { + $width = 1 << 31; + } + $lines = []; + foreach (preg_split('/\r?\n/', $e->getMessage()) as $line) { + foreach ($this->splitStringByWidth($line, $width - 4) as $line) { + + $lineLength = $this->stringWidth(preg_replace('/\[[^m]*m/', '', $line)) + 4; + $lines[] = [$line, $lineLength]; + + $len = max($lineLength, $len); + } + } + + $messages = ['', '']; + $messages[] = $emptyLine = sprintf('%s', str_repeat(' ', $len)); + $messages[] = sprintf('%s%s', $title, str_repeat(' ', max(0, $len - $this->stringWidth($title)))); + foreach ($lines as $line) { + $messages[] = sprintf(' %s %s', $line[0], str_repeat(' ', $len - $line[1])); + } + $messages[] = $emptyLine; + $messages[] = ''; + $messages[] = ''; + + $this->write($messages, true, Output::OUTPUT_NORMAL, $stderr); + + if (Output::VERBOSITY_VERBOSE <= $this->output->getVerbosity()) { + $this->write('Exception trace:', true, Output::OUTPUT_NORMAL, $stderr); + + // exception related properties + $trace = $e->getTrace(); + array_unshift($trace, [ + 'function' => '', + 'file' => $e->getFile() !== null ? $e->getFile() : 'n/a', + 'line' => $e->getLine() !== null ? $e->getLine() : 'n/a', + 'args' => [], + ]); + + for ($i = 0, $count = count($trace); $i < $count; ++$i) { + $class = isset($trace[$i]['class']) ? $trace[$i]['class'] : ''; + $type = isset($trace[$i]['type']) ? $trace[$i]['type'] : ''; + $function = $trace[$i]['function']; + $file = isset($trace[$i]['file']) ? $trace[$i]['file'] : 'n/a'; + $line = isset($trace[$i]['line']) ? $trace[$i]['line'] : 'n/a'; + + $this->write(sprintf(' %s%s%s() at %s:%s', $class, $type, $function, $file, $line), true, Output::OUTPUT_NORMAL, $stderr); + } + + $this->write('', true, Output::OUTPUT_NORMAL, $stderr); + $this->write('', true, Output::OUTPUT_NORMAL, $stderr); + } + } while ($e = $e->getPrevious()); + + } + + /** + * 获取终端宽度 + * @return int|null + */ + protected function getTerminalWidth() + { + $dimensions = $this->getTerminalDimensions(); + + return $dimensions[0]; + } + + /** + * 获取终端高度 + * @return int|null + */ + protected function getTerminalHeight() + { + $dimensions = $this->getTerminalDimensions(); + + return $dimensions[1]; + } + + /** + * 获取当前终端的尺寸 + * @return array + */ + public function getTerminalDimensions() + { + if ($this->terminalDimensions) { + return $this->terminalDimensions; + } + + if ('\\' === DIRECTORY_SEPARATOR) { + if (preg_match('/^(\d+)x\d+ \(\d+x(\d+)\)$/', trim(getenv('ANSICON')), $matches)) { + return [(int) $matches[1], (int) $matches[2]]; + } + if (preg_match('/^(\d+)x(\d+)$/', $this->getMode(), $matches)) { + return [(int) $matches[1], (int) $matches[2]]; + } + } + + if ($sttyString = $this->getSttyColumns()) { + if (preg_match('/rows.(\d+);.columns.(\d+);/i', $sttyString, $matches)) { + return [(int) $matches[2], (int) $matches[1]]; + } + if (preg_match('/;.(\d+).rows;.(\d+).columns/i', $sttyString, $matches)) { + return [(int) $matches[2], (int) $matches[1]]; + } + } + + return [null, null]; + } + + /** + * 获取stty列数 + * @return string + */ + private function getSttyColumns() + { + if (!function_exists('proc_open')) { + return; + } + + $descriptorspec = [1 => ['pipe', 'w'], 2 => ['pipe', 'w']]; + $process = proc_open('stty -a | grep columns', $descriptorspec, $pipes, null, null, ['suppress_errors' => true]); + if (is_resource($process)) { + $info = stream_get_contents($pipes[1]); + fclose($pipes[1]); + fclose($pipes[2]); + proc_close($process); + + return $info; + } + return; + } + + /** + * 获取终端模式 + * @return string x 或 null + */ + private function getMode() + { + if (!function_exists('proc_open')) { + return; + } + + $descriptorspec = [1 => ['pipe', 'w'], 2 => ['pipe', 'w']]; + $process = proc_open('mode CON', $descriptorspec, $pipes, null, null, ['suppress_errors' => true]); + if (is_resource($process)) { + $info = stream_get_contents($pipes[1]); + fclose($pipes[1]); + fclose($pipes[2]); + proc_close($process); + + if (preg_match('/--------+\r?\n.+?(\d+)\r?\n.+?(\d+)\r?\n/', $info, $matches)) { + return $matches[2] . 'x' . $matches[1]; + } + } + return; + } + + private function stringWidth($string) + { + if (!function_exists('mb_strwidth')) { + return strlen($string); + } + + if (false === $encoding = mb_detect_encoding($string)) { + return strlen($string); + } + + return mb_strwidth($string, $encoding); + } + + private function splitStringByWidth($string, $width) + { + if (!function_exists('mb_strwidth')) { + return str_split($string, $width); + } + + if (false === $encoding = mb_detect_encoding($string)) { + return str_split($string, $width); + } + + $utf8String = mb_convert_encoding($string, 'utf8', $encoding); + $lines = []; + $line = ''; + foreach (preg_split('//u', $utf8String) as $char) { + if (mb_strwidth($line . $char, 'utf8') <= $width) { + $line .= $char; + continue; + } + $lines[] = str_pad($line, $width); + $line = $char; + } + if (strlen($line)) { + $lines[] = count($lines) ? str_pad($line, $width) : $line; + } + + mb_convert_variables($encoding, 'utf8', $lines); + + return $lines; + } + + private function isRunningOS400() + { + $checks = [ + function_exists('php_uname') ? php_uname('s') : '', + getenv('OSTYPE'), + PHP_OS, + ]; + return false !== stripos(implode(';', $checks), 'OS400'); + } + + /** + * 当前环境是否支持写入控制台输出到stdout. + * + * @return bool + */ + protected function hasStdoutSupport() + { + return false === $this->isRunningOS400(); + } + + /** + * 当前环境是否支持写入控制台输出到stderr. + * + * @return bool + */ + protected function hasStderrSupport() + { + return false === $this->isRunningOS400(); + } + + /** + * @return resource + */ + private function openOutputStream() + { + if (!$this->hasStdoutSupport()) { + return fopen('php://output', 'w'); + } + return @fopen('php://stdout', 'w') ?: fopen('php://output', 'w'); + } + + /** + * @return resource + */ + private function openErrorStream() + { + return fopen($this->hasStderrSupport() ? 'php://stderr' : 'php://output', 'w'); + } + + /** + * 将消息写入到输出。 + * @param string $message 消息 + * @param bool $newline 是否另起一行 + * @param null $stream + */ + protected function doWrite($message, $newline, $stream = null) + { + if (null === $stream) { + $stream = $this->stdout; + } + if (false === @fwrite($stream, $message . ($newline ? PHP_EOL : ''))) { + throw new \RuntimeException('Unable to write output.'); + } + + fflush($stream); + } + + /** + * 是否支持着色 + * @param $stream + * @return bool + */ + protected function hasColorSupport($stream) + { + if (DIRECTORY_SEPARATOR === '\\') { + return + '10.0.10586' === PHP_WINDOWS_VERSION_MAJOR . '.' . PHP_WINDOWS_VERSION_MINOR . '.' . PHP_WINDOWS_VERSION_BUILD + || false !== getenv('ANSICON') + || 'ON' === getenv('ConEmuANSI') + || 'xterm' === getenv('TERM'); + } + + return function_exists('posix_isatty') && @posix_isatty($stream); + } + +} diff --git a/thinkphp/library/think/console/output/driver/Nothing.php b/thinkphp/library/think/console/output/driver/Nothing.php new file mode 100644 index 000000000..9a55f7779 --- /dev/null +++ b/thinkphp/library/think/console/output/driver/Nothing.php @@ -0,0 +1,33 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\output\driver; + +use think\console\Output; + +class Nothing +{ + + public function __construct(Output $output) + { + // do nothing + } + + public function write($messages, $newline = false, $options = Output::OUTPUT_NORMAL) + { + // do nothing + } + + public function renderException(\Exception $e) + { + // do nothing + } +} diff --git a/thinkphp/library/think/console/output/formatter/Stack.php b/thinkphp/library/think/console/output/formatter/Stack.php new file mode 100644 index 000000000..4864a3f29 --- /dev/null +++ b/thinkphp/library/think/console/output/formatter/Stack.php @@ -0,0 +1,116 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\output\formatter; + +class Stack +{ + + /** + * @var Style[] + */ + private $styles; + + /** + * @var Style + */ + private $emptyStyle; + + /** + * 构造方法 + * @param Style|null $emptyStyle + */ + public function __construct(Style $emptyStyle = null) + { + $this->emptyStyle = $emptyStyle ?: new Style(); + $this->reset(); + } + + /** + * 重置堆栈 + */ + public function reset() + { + $this->styles = []; + } + + /** + * 推一个样式进入堆栈 + * @param Style $style + */ + public function push(Style $style) + { + $this->styles[] = $style; + } + + /** + * 从堆栈中弹出一个样式 + * @param Style|null $style + * @return Style + * @throws \InvalidArgumentException + */ + public function pop(Style $style = null) + { + if (empty($this->styles)) { + return $this->emptyStyle; + } + + if (null === $style) { + return array_pop($this->styles); + } + + /** + * @var int $index + * @var Style $stackedStyle + */ + foreach (array_reverse($this->styles, true) as $index => $stackedStyle) { + if ($style->apply('') === $stackedStyle->apply('')) { + $this->styles = array_slice($this->styles, 0, $index); + + return $stackedStyle; + } + } + + throw new \InvalidArgumentException('Incorrectly nested style tag found.'); + } + + /** + * 计算堆栈的当前样式。 + * @return Style + */ + public function getCurrent() + { + if (empty($this->styles)) { + return $this->emptyStyle; + } + + return $this->styles[count($this->styles) - 1]; + } + + /** + * @param Style $emptyStyle + * @return Stack + */ + public function setEmptyStyle(Style $emptyStyle) + { + $this->emptyStyle = $emptyStyle; + + return $this; + } + + /** + * @return Style + */ + public function getEmptyStyle() + { + return $this->emptyStyle; + } +} diff --git a/thinkphp/library/think/console/output/formatter/Style.php b/thinkphp/library/think/console/output/formatter/Style.php new file mode 100644 index 000000000..d9b099987 --- /dev/null +++ b/thinkphp/library/think/console/output/formatter/Style.php @@ -0,0 +1,189 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\output\formatter; + +class Style +{ + + private static $availableForegroundColors = [ + 'black' => ['set' => 30, 'unset' => 39], + 'red' => ['set' => 31, 'unset' => 39], + 'green' => ['set' => 32, 'unset' => 39], + 'yellow' => ['set' => 33, 'unset' => 39], + 'blue' => ['set' => 34, 'unset' => 39], + 'magenta' => ['set' => 35, 'unset' => 39], + 'cyan' => ['set' => 36, 'unset' => 39], + 'white' => ['set' => 37, 'unset' => 39], + ]; + private static $availableBackgroundColors = [ + 'black' => ['set' => 40, 'unset' => 49], + 'red' => ['set' => 41, 'unset' => 49], + 'green' => ['set' => 42, 'unset' => 49], + 'yellow' => ['set' => 43, 'unset' => 49], + 'blue' => ['set' => 44, 'unset' => 49], + 'magenta' => ['set' => 45, 'unset' => 49], + 'cyan' => ['set' => 46, 'unset' => 49], + 'white' => ['set' => 47, 'unset' => 49], + ]; + private static $availableOptions = [ + 'bold' => ['set' => 1, 'unset' => 22], + 'underscore' => ['set' => 4, 'unset' => 24], + 'blink' => ['set' => 5, 'unset' => 25], + 'reverse' => ['set' => 7, 'unset' => 27], + 'conceal' => ['set' => 8, 'unset' => 28], + ]; + + private $foreground; + private $background; + private $options = []; + + /** + * 初始化输出的样式 + * @param string|null $foreground 字体颜色 + * @param string|null $background 背景色 + * @param array $options 格式 + * @api + */ + public function __construct($foreground = null, $background = null, array $options = []) + { + if (null !== $foreground) { + $this->setForeground($foreground); + } + if (null !== $background) { + $this->setBackground($background); + } + if (count($options)) { + $this->setOptions($options); + } + } + + /** + * 设置字体颜色 + * @param string|null $color 颜色名 + * @throws \InvalidArgumentException + * @api + */ + public function setForeground($color = null) + { + if (null === $color) { + $this->foreground = null; + + return; + } + + if (!isset(static::$availableForegroundColors[$color])) { + throw new \InvalidArgumentException(sprintf('Invalid foreground color specified: "%s". Expected one of (%s)', $color, implode(', ', array_keys(static::$availableForegroundColors)))); + } + + $this->foreground = static::$availableForegroundColors[$color]; + } + + /** + * 设置背景色 + * @param string|null $color 颜色名 + * @throws \InvalidArgumentException + * @api + */ + public function setBackground($color = null) + { + if (null === $color) { + $this->background = null; + + return; + } + + if (!isset(static::$availableBackgroundColors[$color])) { + throw new \InvalidArgumentException(sprintf('Invalid background color specified: "%s". Expected one of (%s)', $color, implode(', ', array_keys(static::$availableBackgroundColors)))); + } + + $this->background = static::$availableBackgroundColors[$color]; + } + + /** + * 设置字体格式 + * @param string $option 格式名 + * @throws \InvalidArgumentException When the option name isn't defined + * @api + */ + public function setOption($option) + { + if (!isset(static::$availableOptions[$option])) { + throw new \InvalidArgumentException(sprintf('Invalid option specified: "%s". Expected one of (%s)', $option, implode(', ', array_keys(static::$availableOptions)))); + } + + if (!in_array(static::$availableOptions[$option], $this->options)) { + $this->options[] = static::$availableOptions[$option]; + } + } + + /** + * 重置字体格式 + * @param string $option 格式名 + * @throws \InvalidArgumentException + */ + public function unsetOption($option) + { + if (!isset(static::$availableOptions[$option])) { + throw new \InvalidArgumentException(sprintf('Invalid option specified: "%s". Expected one of (%s)', $option, implode(', ', array_keys(static::$availableOptions)))); + } + + $pos = array_search(static::$availableOptions[$option], $this->options); + if (false !== $pos) { + unset($this->options[$pos]); + } + } + + /** + * 批量设置字体格式 + * @param array $options + */ + public function setOptions(array $options) + { + $this->options = []; + + foreach ($options as $option) { + $this->setOption($option); + } + } + + /** + * 应用样式到文字 + * @param string $text 文字 + * @return string + */ + public function apply($text) + { + $setCodes = []; + $unsetCodes = []; + + if (null !== $this->foreground) { + $setCodes[] = $this->foreground['set']; + $unsetCodes[] = $this->foreground['unset']; + } + if (null !== $this->background) { + $setCodes[] = $this->background['set']; + $unsetCodes[] = $this->background['unset']; + } + if (count($this->options)) { + foreach ($this->options as $option) { + $setCodes[] = $option['set']; + $unsetCodes[] = $option['unset']; + } + } + + if (0 === count($setCodes)) { + return $text; + } + + return sprintf("\033[%sm%s\033[%sm", implode(';', $setCodes), $text, implode(';', $unsetCodes)); + } +} diff --git a/thinkphp/library/think/console/output/question/Choice.php b/thinkphp/library/think/console/output/question/Choice.php new file mode 100644 index 000000000..f6760e5ef --- /dev/null +++ b/thinkphp/library/think/console/output/question/Choice.php @@ -0,0 +1,163 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\output\question; + +use think\console\output\Question; + +class Choice extends Question +{ + + private $choices; + private $multiselect = false; + private $prompt = ' > '; + private $errorMessage = 'Value "%s" is invalid'; + + /** + * 构造方法 + * @param string $question 问题 + * @param array $choices 选项 + * @param mixed $default 默认答案 + */ + public function __construct($question, array $choices, $default = null) + { + parent::__construct($question, $default); + + $this->choices = $choices; + $this->setValidator($this->getDefaultValidator()); + $this->setAutocompleterValues($choices); + } + + /** + * 可选项 + * @return array + */ + public function getChoices() + { + return $this->choices; + } + + /** + * 设置可否多选 + * @param bool $multiselect + * @return self + */ + public function setMultiselect($multiselect) + { + $this->multiselect = $multiselect; + $this->setValidator($this->getDefaultValidator()); + + return $this; + } + + public function isMultiselect() + { + return $this->multiselect; + } + + /** + * 获取提示 + * @return string + */ + public function getPrompt() + { + return $this->prompt; + } + + /** + * 设置提示 + * @param string $prompt + * @return self + */ + public function setPrompt($prompt) + { + $this->prompt = $prompt; + + return $this; + } + + /** + * 设置错误提示信息 + * @param string $errorMessage + * @return self + */ + public function setErrorMessage($errorMessage) + { + $this->errorMessage = $errorMessage; + $this->setValidator($this->getDefaultValidator()); + + return $this; + } + + /** + * 获取默认的验证方法 + * @return callable + */ + private function getDefaultValidator() + { + $choices = $this->choices; + $errorMessage = $this->errorMessage; + $multiselect = $this->multiselect; + $isAssoc = $this->isAssoc($choices); + + return function ($selected) use ($choices, $errorMessage, $multiselect, $isAssoc) { + // Collapse all spaces. + $selectedChoices = str_replace(' ', '', $selected); + + if ($multiselect) { + // Check for a separated comma values + if (!preg_match('/^[a-zA-Z0-9_-]+(?:,[a-zA-Z0-9_-]+)*$/', $selectedChoices, $matches)) { + throw new \InvalidArgumentException(sprintf($errorMessage, $selected)); + } + $selectedChoices = explode(',', $selectedChoices); + } else { + $selectedChoices = [$selected]; + } + + $multiselectChoices = []; + foreach ($selectedChoices as $value) { + $results = []; + foreach ($choices as $key => $choice) { + if ($choice === $value) { + $results[] = $key; + } + } + + if (count($results) > 1) { + throw new \InvalidArgumentException(sprintf('The provided answer is ambiguous. Value should be one of %s.', implode(' or ', $results))); + } + + $result = array_search($value, $choices); + + if (!$isAssoc) { + if (!empty($result)) { + $result = $choices[$result]; + } elseif (isset($choices[$value])) { + $result = $choices[$value]; + } + } elseif (empty($result) && array_key_exists($value, $choices)) { + $result = $value; + } + + if (empty($result)) { + throw new \InvalidArgumentException(sprintf($errorMessage, $value)); + } + array_push($multiselectChoices, $result); + } + + if ($multiselect) { + return $multiselectChoices; + } + + return current($multiselectChoices); + }; + } +} diff --git a/thinkphp/library/think/console/output/question/Confirmation.php b/thinkphp/library/think/console/output/question/Confirmation.php new file mode 100644 index 000000000..6598f9b3e --- /dev/null +++ b/thinkphp/library/think/console/output/question/Confirmation.php @@ -0,0 +1,57 @@ + +// +---------------------------------------------------------------------- + +namespace think\console\output\question; + +use think\console\output\Question; + +class Confirmation extends Question +{ + + private $trueAnswerRegex; + + /** + * 构造方法 + * @param string $question 问题 + * @param bool $default 默认答案 + * @param string $trueAnswerRegex 验证正则 + */ + public function __construct($question, $default = true, $trueAnswerRegex = '/^y/i') + { + parent::__construct($question, (bool) $default); + + $this->trueAnswerRegex = $trueAnswerRegex; + $this->setNormalizer($this->getDefaultNormalizer()); + } + + /** + * 获取默认的答案回调 + * @return callable + */ + private function getDefaultNormalizer() + { + $default = $this->getDefault(); + $regex = $this->trueAnswerRegex; + + return function ($answer) use ($default, $regex) { + if (is_bool($answer)) { + return $answer; + } + + $answerIsTrue = (bool) preg_match($regex, $answer); + if (false === $default) { + return $answer && $answerIsTrue; + } + + return !$answer || $answerIsTrue; + }; + } +} diff --git a/thinkphp/library/think/db/Builder.php b/thinkphp/library/think/db/Builder.php new file mode 100644 index 000000000..31e5fc5e9 --- /dev/null +++ b/thinkphp/library/think/db/Builder.php @@ -0,0 +1,1166 @@ + +// +---------------------------------------------------------------------- + +namespace think\db; + +use PDO; +use think\Exception; + +abstract class Builder +{ + // connection对象实例 + protected $connection; + + // 查询表达式映射 + protected $exp = ['EQ' => '=', 'NEQ' => '<>', 'GT' => '>', 'EGT' => '>=', 'LT' => '<', 'ELT' => '<=', 'NOTLIKE' => 'NOT LIKE', 'NOTIN' => 'NOT IN', 'NOTBETWEEN' => 'NOT BETWEEN', 'NOTEXISTS' => 'NOT EXISTS', 'NOTNULL' => 'NOT NULL', 'NOTBETWEEN TIME' => 'NOT BETWEEN TIME']; + + // 查询表达式解析 + protected $parser = [ + 'parseCompare' => ['=', '<>', '>', '>=', '<', '<='], + 'parseLike' => ['LIKE', 'NOT LIKE'], + 'parseBetween' => ['NOT BETWEEN', 'BETWEEN'], + 'parseIn' => ['NOT IN', 'IN'], + 'parseExp' => ['EXP'], + 'parseNull' => ['NOT NULL', 'NULL'], + 'parseBetweenTime' => ['BETWEEN TIME', 'NOT BETWEEN TIME'], + 'parseTime' => ['< TIME', '> TIME', '<= TIME', '>= TIME'], + 'parseExists' => ['NOT EXISTS', 'EXISTS'], + ]; + + // SQL表达式 + protected $selectSql = 'SELECT%DISTINCT% %FIELD% FROM %TABLE%%FORCE%%JOIN%%WHERE%%GROUP%%HAVING%%UNION%%ORDER%%LIMIT% %LOCK%%COMMENT%'; + + protected $insertSql = '%INSERT% INTO %TABLE% (%FIELD%) VALUES (%DATA%) %COMMENT%'; + + protected $insertAllSql = '%INSERT% INTO %TABLE% (%FIELD%) %DATA% %COMMENT%'; + + protected $updateSql = 'UPDATE %TABLE% SET %SET%%JOIN%%WHERE%%ORDER%%LIMIT% %LOCK%%COMMENT%'; + + protected $deleteSql = 'DELETE FROM %TABLE%%USING%%JOIN%%WHERE%%ORDER%%LIMIT% %LOCK%%COMMENT%'; + + /** + * 架构函数 + * @access public + * @param Connection $connection 数据库连接对象实例 + */ + public function __construct(Connection $connection) + { + $this->connection = $connection; + } + + /** + * 获取当前的连接对象实例 + * @access public + * @return Connection + */ + public function getConnection() + { + return $this->connection; + } + + /** + * 注册查询表达式解析 + * @access public + * @param string $name 解析方法 + * @param array $parser 匹配表达式数据 + * @return $this + */ + public function bindParser($name, $parser) + { + $this->parser[$name] = $parser; + return $this; + } + + /** + * 数据分析 + * @access protected + * @param Query $query 查询对象 + * @param array $data 数据 + * @param array $fields 字段信息 + * @param array $bind 参数绑定 + * @param string $suffix 参数绑定后缀 + * @return array + */ + protected function parseData(Query $query, $data = [], $fields = [], $bind = [], $suffix = '') + { + if (empty($data)) { + return []; + } + + $options = $query->getOptions(); + + // 获取绑定信息 + if (empty($bind)) { + $bind = $this->connection->getFieldsBind($options['table']); + } + + if (empty($fields)) { + if ('*' == $options['field']) { + $fields = array_keys($bind); + } else { + $fields = $options['field']; + } + } + + $result = []; + + foreach ($data as $key => $val) { + $item = $this->parseKey($query, $key, true); + + if ($val instanceof Expression) { + $result[$item] = $val->getValue(); + continue; + } elseif (!is_scalar($val) && (in_array($key, (array) $query->getOptions('json')) || 'json' == $this->connection->getFieldsType($options['table'], $key))) { + $val = json_encode($val); + } elseif (is_object($val) && method_exists($val, '__toString')) { + // 对象数据写入 + $val = $val->__toString(); + } + + if (false !== strpos($key, '->')) { + list($key, $name) = explode('->', $key); + $item = $this->parseKey($query, $key); + $result[$item] = 'json_set(' . $item . ', \'$.' . $name . '\', ' . $this->parseDataBind($query, $key, $val, $bind, $suffix) . ')'; + } elseif (false === strpos($key, '.') && !in_array($key, $fields, true)) { + if ($options['strict']) { + throw new Exception('fields not exists:[' . $key . ']'); + } + } elseif (is_null($val)) { + $result[$item] = 'NULL'; + } elseif (is_array($val) && !empty($val)) { + switch ($val[0]) { + case 'INC': + $result[$item] = $item . ' + ' . floatval($val[1]); + break; + case 'DEC': + $result[$item] = $item . ' - ' . floatval($val[1]); + break; + } + } elseif (is_scalar($val)) { + // 过滤非标量数据 + $result[$item] = $this->parseDataBind($query, $key, $val, $bind, $suffix); + } + } + + return $result; + } + + /** + * 数据绑定处理 + * @access protected + * @param Query $query 查询对象 + * @param string $key 字段名 + * @param mixed $data 数据 + * @param array $bind 绑定数据 + * @param string $suffix 绑定后缀 + * @return string + */ + protected function parseDataBind(Query $query, $key, $data, $bind = [], $suffix = '') + { + // 过滤非标量数据 + if (0 === strpos($data, ':') && $query->isBind(substr($data, 1))) { + return $data; + } + + $key = str_replace(['.', '->'], '_', $key); + $name = 'data__' . $key . $suffix; + + $query->bind($name, $data, isset($bind[$key]) ? $bind[$key] : PDO::PARAM_STR); + + return ':' . $name; + } + + /** + * 字段名分析 + * @access public + * @param Query $query 查询对象 + * @param string $key 字段名 + * @param bool $strict 严格检测 + * @return string + */ + public function parseKey(Query $query, $key, $strict = false) + { + return $key; + } + + /** + * field分析 + * @access protected + * @param Query $query 查询对象 + * @param mixed $fields 字段名 + * @return string + */ + protected function parseField(Query $query, $fields) + { + if ('*' == $fields || empty($fields)) { + $fieldsStr = '*'; + } elseif (is_array($fields)) { + // 支持 'field1'=>'field2' 这样的字段别名定义 + $array = []; + + foreach ($fields as $key => $field) { + if ($field instanceof Expression) { + $array[] = $field->getValue(); + } elseif (!is_numeric($key)) { + $array[] = $this->parseKey($query, $key) . ' AS ' . $this->parseKey($query, $field, true); + } else { + $array[] = $this->parseKey($query, $field); + } + } + + $fieldsStr = implode(',', $array); + } + + return $fieldsStr; + } + + /** + * table分析 + * @access protected + * @param Query $query 查询对象 + * @param mixed $tables 表名 + * @return string + */ + protected function parseTable(Query $query, $tables) + { + $item = []; + $options = $query->getOptions(); + + foreach ((array) $tables as $key => $table) { + if (!is_numeric($key)) { + $key = $this->connection->parseSqlTable($key); + $item[] = $this->parseKey($query, $key) . ' ' . $this->parseKey($query, $table); + } else { + $table = $this->connection->parseSqlTable($table); + + if (isset($options['alias'][$table])) { + $item[] = $this->parseKey($query, $table) . ' ' . $this->parseKey($query, $options['alias'][$table]); + } else { + $item[] = $this->parseKey($query, $table); + } + } + } + + return implode(',', $item); + } + + /** + * where分析 + * @access protected + * @param Query $query 查询对象 + * @param mixed $where 查询条件 + * @return string + */ + protected function parseWhere(Query $query, $where) + { + $options = $query->getOptions(); + $whereStr = $this->buildWhere($query, $where); + + if (!empty($options['soft_delete'])) { + // 附加软删除条件 + list($field, $condition) = $options['soft_delete']; + + $binds = $this->connection->getFieldsBind($options['table']); + $whereStr = $whereStr ? '( ' . $whereStr . ' ) AND ' : ''; + $whereStr = $whereStr . $this->parseWhereItem($query, $field, $condition, '', $binds); + } + + return empty($whereStr) ? '' : ' WHERE ' . $whereStr; + } + + /** + * 生成查询条件SQL + * @access public + * @param Query $query 查询对象 + * @param mixed $where 查询条件 + * @return string + */ + public function buildWhere(Query $query, $where) + { + if (empty($where)) { + $where = []; + } + + $whereStr = ''; + $binds = $this->connection->getFieldsBind($query->getOptions('table')); + + foreach ($where as $logic => $val) { + $str = []; + + foreach ($val as $value) { + if ($value instanceof Expression) { + $str[] = ' ' . $logic . ' ( ' . $value->getValue() . ' )'; + continue; + } + + if (is_array($value)) { + if (key($value) !== 0) { + throw new Exception('where express error:' . var_export($value, true)); + } + $field = array_shift($value); + } elseif (!($value instanceof \Closure)) { + throw new Exception('where express error:' . var_export($value, true)); + } + + if ($value instanceof \Closure) { + // 使用闭包查询 + $newQuery = $query->newQuery()->setConnection($this->connection); + $value($newQuery); + $whereClause = $this->buildWhere($query, $newQuery->getOptions('where')); + + if (!empty($whereClause)) { + $str[] = ' ' . $logic . ' ( ' . $whereClause . ' )'; + } + } elseif (is_array($field)) { + array_unshift($value, $field); + $str2 = []; + foreach ($value as $item) { + $str2[] = $this->parseWhereItem($query, array_shift($item), $item, $logic, $binds); + } + + $str[] = ' ' . $logic . ' ( ' . implode(' AND ', $str2) . ' )'; + } elseif (strpos($field, '|')) { + // 不同字段使用相同查询条件(OR) + $array = explode('|', $field); + $item = []; + + foreach ($array as $k) { + $item[] = $this->parseWhereItem($query, $k, $value, '', $binds); + } + + $str[] = ' ' . $logic . ' ( ' . implode(' OR ', $item) . ' )'; + } elseif (strpos($field, '&')) { + // 不同字段使用相同查询条件(AND) + $array = explode('&', $field); + $item = []; + + foreach ($array as $k) { + $item[] = $this->parseWhereItem($query, $k, $value, '', $binds); + } + + $str[] = ' ' . $logic . ' ( ' . implode(' AND ', $item) . ' )'; + } else { + // 对字段使用表达式查询 + $field = is_string($field) ? $field : ''; + $str[] = ' ' . $logic . ' ' . $this->parseWhereItem($query, $field, $value, $logic, $binds); + } + } + + $whereStr .= empty($whereStr) ? substr(implode(' ', $str), strlen($logic) + 1) : implode(' ', $str); + } + + return $whereStr; + } + + // where子单元分析 + protected function parseWhereItem(Query $query, $field, $val, $rule = '', $binds = [], $bindName = null) + { + // 字段分析 + $key = $field ? $this->parseKey($query, $field, true) : ''; + + // 查询规则和条件 + if (!is_array($val)) { + $val = is_null($val) ? ['NULL', ''] : ['=', $val]; + } + + list($exp, $value) = $val; + + // 对一个字段使用多个查询条件 + if (is_array($exp)) { + $item = array_pop($val); + + // 传入 or 或者 and + if (is_string($item) && in_array($item, ['AND', 'and', 'OR', 'or'])) { + $rule = $item; + } else { + array_push($val, $item); + } + + foreach ($val as $k => $item) { + $bindName = 'where_' . str_replace('.', '_', $field) . '_' . $k; + $str[] = $this->parseWhereItem($query, $field, $item, $rule, $binds, $bindName); + } + + return '( ' . implode(' ' . $rule . ' ', $str) . ' )'; + } + + // 检测操作符 + $exp = strtoupper($exp); + if (isset($this->exp[$exp])) { + $exp = $this->exp[$exp]; + } + + $bindName = $bindName ?: 'where_' . $rule . '_' . str_replace(['.', '-'], '_', $field); + + if (preg_match('/\W/', $bindName)) { + // 处理带非单词字符的字段名 + $bindName = md5($bindName); + } + + if ($value instanceof Expression) { + + } elseif (is_object($value) && method_exists($value, '__toString')) { + // 对象数据写入 + $value = $value->__toString(); + } + + $bindType = isset($binds[$field]) ? $binds[$field] : PDO::PARAM_STR; + + if (is_scalar($value) && !in_array($exp, ['EXP', 'NOT NULL', 'NULL', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN']) && strpos($exp, 'TIME') === false) { + if (strpos($value, ':') !== 0 || !$query->isBind(substr($value, 1))) { + if ($query->isBind($bindName)) { + $bindName .= '_' . str_replace('.', '_', uniqid('', true)); + } + + $query->bind($bindName, $value, $bindType); + $value = ':' . $bindName; + } + } + + // 解析查询表达式 + foreach ($this->parser as $fun => $parse) { + if (in_array($exp, $parse)) { + $whereStr = $this->$fun($query, $key, $exp, $value, $field, $bindName, $bindType, isset($val[2]) ? $val[2] : 'AND'); + break; + } + } + + if (!isset($whereStr)) { + throw new Exception('where express error:' . $exp); + } + + return $whereStr; + } + + /** + * 模糊查询 + * @access protected + * @param Query $query 查询对象 + * @param string $key + * @param string $exp + * @param mixed $value + * @param string $field + * @param string $bindName + * @param integer $bindType + * @param string $logic + * @return string + */ + protected function parseLike(Query $query, $key, $exp, $value, $field, $bindName, $bindType, $logic) + { + // 模糊匹配 + if (is_array($value)) { + foreach ($value as $k => $item) { + $bindKey = $bindName . '_' . $k; + $bind[$bindKey] = [$item, $bindType]; + $array[] = $key . ' ' . $exp . ' :' . $bindKey; + } + + $query->bind($bind); + + $whereStr = '(' . implode($array, ' ' . strtoupper($logic) . ' ') . ')'; + } else { + $whereStr = $key . ' ' . $exp . ' ' . $value; + } + + return $whereStr; + } + + /** + * 表达式查询 + * @access protected + * @param Query $query 查询对象 + * @param string $key + * @param string $exp + * @param Expression $value + * @param string $field + * @param string $bindName + * @param integer $bindType + * @return string + */ + protected function parseExp(Query $query, $key, $exp, Expression $value, $field, $bindName, $bindType) + { + // 表达式查询 + return '( ' . $key . ' ' . $value->getValue() . ' )'; + } + + /** + * Null查询 + * @access protected + * @param Query $query 查询对象 + * @param string $key + * @param string $exp + * @param mixed $value + * @param string $field + * @param string $bindName + * @param integer $bindType + * @return string + */ + protected function parseNull(Query $query, $key, $exp, $value, $field, $bindName, $bindType) + { + // NULL 查询 + return $key . ' IS ' . $exp; + } + + /** + * 范围查询 + * @access protected + * @param Query $query 查询对象 + * @param string $key + * @param string $exp + * @param mixed $value + * @param string $field + * @param string $bindName + * @param integer $bindType + * @return string + */ + protected function parseBetween(Query $query, $key, $exp, $value, $field, $bindName, $bindType) + { + // BETWEEN 查询 + $data = is_array($value) ? $value : explode(',', $value); + + if ($query->isBind($bindName . '_between_1')) { + $bindKey1 = $bindName . '_between_1' . uniqid(); + $bindKey2 = $bindName . '_between_2' . uniqid(); + } else { + $bindKey1 = $bindName . '_between_1'; + $bindKey2 = $bindName . '_between_2'; + } + + $bind = [ + $bindKey1 => [$data[0], $bindType], + $bindKey2 => [$data[1], $bindType], + ]; + + $query->bind($bind); + + $between = ':' . $bindKey1 . ' AND :' . $bindKey2; + + return $key . ' ' . $exp . ' ' . $between; + } + + /** + * Exists查询 + * @access protected + * @param Query $query 查询对象 + * @param string $key + * @param string $exp + * @param mixed $value + * @param string $field + * @param string $bindName + * @param integer $bindType + * @return string + */ + protected function parseExists(Query $query, $key, $exp, $value, $field, $bindName, $bindType) + { + // EXISTS 查询 + if ($value instanceof \Closure) { + $value = $this->parseClosure($query, $value, false); + } + + return $exp . ' (' . $value . ')'; + } + + /** + * 时间比较查询 + * @access protected + * @param Query $query 查询对象 + * @param string $key + * @param string $exp + * @param mixed $value + * @param string $field + * @param string $bindName + * @param integer $bindType + * @return string + */ + protected function parseTime(Query $query, $key, $exp, $value, $field, $bindName, $bindType) + { + return $key . ' ' . substr($exp, 0, 2) . ' ' . $this->parseDateTime($query, $value, $field, $bindName, $bindType); + } + + /** + * 大小比较查询 + * @access protected + * @param Query $query 查询对象 + * @param string $key + * @param string $exp + * @param mixed $value + * @param string $field + * @param string $bindName + * @param integer $bindType + * @return string + */ + protected function parseCompare(Query $query, $key, $exp, $value, $field, $bindName, $bindType) + { + if (is_array($value)) { + throw new Exception('where express error:' . $exp . var_export($value, true)); + } + + // 比较运算 + if ($value instanceof \Closure) { + $value = $this->parseClosure($query, $value); + } + + return $key . ' ' . $exp . ' ' . $value; + } + + /** + * 时间范围查询 + * @access protected + * @param Query $query 查询对象 + * @param string $key + * @param string $exp + * @param mixed $value + * @param string $field + * @param string $bindName + * @param integer $bindType + * @return string + */ + protected function parseBetweenTime(Query $query, $key, $exp, $value, $field, $bindName, $bindType) + { + if (is_string($value)) { + $value = explode(',', $value); + } + + return $key . ' ' . substr($exp, 0, -4) + . $this->parseDateTime($query, $value[0], $field, $bindName . '_between_1', $bindType) + . ' AND ' + . $this->parseDateTime($query, $value[1], $field, $bindName . '_between_2', $bindType); + + } + + /** + * IN查询 + * @access protected + * @param Query $query 查询对象 + * @param string $key + * @param string $exp + * @param mixed $value + * @param string $field + * @param string $bindName + * @param integer $bindType + * @return string + */ + protected function parseIn(Query $query, $key, $exp, $value, $field, $bindName, $bindType) + { + // IN 查询 + if ($value instanceof \Closure) { + $value = $this->parseClosure($query, $value, false); + } else { + $value = array_unique(is_array($value) ? $value : explode(',', $value)); + + $bind = []; + $array = []; + $i = 0; + + foreach ($value as $k => $v) { + $i++; + if ($query->isBind($bindName . '_in_' . $i)) { + $bindKey = $bindName . '_in_' . uniqid() . '_' . $i; + } else { + $bindKey = $bindName . '_in_' . $i; + } + $bind[$bindKey] = [$v, $bindType]; + $array[] = ':' . $bindKey; + } + + $zone = implode(',', $array); + $query->bind($bind); + + $value = empty($zone) ? "''" : $zone; + } + + return $key . ' ' . $exp . ' (' . $value . ')'; + } + + /** + * 闭包子查询 + * @access protected + * @param Query $query 查询对象 + * @param \Closure $call + * @param bool $show + * @return string + */ + protected function parseClosure(Query $query, $call, $show = true) + { + $newQuery = $query->newQuery()->setConnection($this->connection); + $call($newQuery); + + return $newQuery->buildSql($show); + } + + /** + * 日期时间条件解析 + * @access protected + * @param Query $query 查询对象 + * @param string $value + * @param string $key + * @param array $options + * @param string $bindName + * @param integer $bindType + * @return string + */ + protected function parseDateTime(Query $query, $value, $key, $bindName = null, $bindType = null) + { + $options = $query->getOptions(); + + // 获取时间字段类型 + if (strpos($key, '.')) { + list($table, $key) = explode('.', $key); + + if (isset($options['alias']) && $pos = array_search($table, $options['alias'])) { + $table = $pos; + } + } else { + $table = $options['table']; + } + + $type = $this->connection->getTableInfo($table, 'type'); + + if (isset($type[$key])) { + $info = $type[$key]; + } + + if (isset($info)) { + if (is_string($value)) { + $value = strtotime($value) ?: $value; + } + + if (preg_match('/(datetime|timestamp)/is', $info)) { + // 日期及时间戳类型 + $value = date('Y-m-d H:i:s', $value); + } elseif (preg_match('/(date)/is', $info)) { + // 日期及时间戳类型 + $value = date('Y-m-d', $value); + } + } + + $bindName = $bindName ?: $key; + + $query->bind($bindName, $value, $bindType); + + return ':' . $bindName; + } + + /** + * limit分析 + * @access protected + * @param Query $query 查询对象 + * @param mixed $limit + * @return string + */ + protected function parseLimit(Query $query, $limit) + { + return (!empty($limit) && false === strpos($limit, '(')) ? ' LIMIT ' . $limit . ' ' : ''; + } + + /** + * join分析 + * @access protected + * @param Query $query 查询对象 + * @param array $join + * @return string + */ + protected function parseJoin(Query $query, $join) + { + $joinStr = ''; + + if (!empty($join)) { + foreach ($join as $item) { + list($table, $type, $on) = $item; + + $condition = []; + + foreach ((array) $on as $val) { + if (strpos($val, '=')) { + list($val1, $val2) = explode('=', $val, 2); + $condition[] = $this->parseKey($query, $val1) . '=' . $this->parseKey($query, $val2); + } else { + $condition[] = $val; + } + } + + $table = $this->parseTable($query, $table); + + $joinStr .= ' ' . $type . ' JOIN ' . $table . ' ON ' . implode(' AND ', $condition); + } + } + + return $joinStr; + } + + /** + * order分析 + * @access protected + * @param Query $query 查询对象 + * @param mixed $order + * @return string + */ + protected function parseOrder(Query $query, $order) + { + if (empty($order)) { + return ''; + } + + $array = []; + + foreach ($order as $key => $val) { + if ($val instanceof Expression) { + $array[] = $val->getValue(); + } elseif (is_array($val)) { + if (isset($val['sort'])) { + $sort = ' ' . $val['sort']; + unset($val['sort']); + } else { + $sort = ''; + } + + $options = $query->getOptions(); + $bind = $this->connection->getFieldsBind($options['table']); + + foreach ($val as $k => $item) { + $val[$k] = $this->parseDataBind($query, $key, $item, $bind, $k); + } + + $array[] = 'field(' . $this->parseKey($query, $key, true) . ',' . implode(',', $val) . ')' . $sort; + } elseif ('[rand]' == $val) { + $array[] = $this->parseRand($query); + } else { + if (is_numeric($key)) { + list($key, $sort) = explode(' ', strpos($val, ' ') ? $val : $val . ' '); + } else { + $sort = $val; + } + + $sort = in_array(strtolower($sort), ['asc', 'desc'], true) ? ' ' . $sort : ''; + $array[] = $this->parseKey($query, $key, true) . $sort; + } + } + + $order = implode(',', $array); + + return ' ORDER BY ' . $order; + } + + /** + * group分析 + * @access protected + * @param Query $query 查询对象 + * @param mixed $group + * @return string + */ + protected function parseGroup(Query $query, $group) + { + if (empty($group)) { + return ''; + } + + if (is_string($group)) { + $group = explode(',', $group); + } + + foreach ($group as $key) { + $val[] = $this->parseKey($query, $key); + } + + return ' GROUP BY ' . implode(',', $val); + } + + /** + * having分析 + * @access protected + * @param Query $query 查询对象 + * @param string $having + * @return string + */ + protected function parseHaving(Query $query, $having) + { + return !empty($having) ? ' HAVING ' . $having : ''; + } + + /** + * comment分析 + * @access protected + * @param Query $query 查询对象 + * @param string $comment + * @return string + */ + protected function parseComment(Query $query, $comment) + { + return !empty($comment) ? ' /* ' . $comment . ' */' : ''; + } + + /** + * distinct分析 + * @access protected + * @param Query $query 查询对象 + * @param mixed $distinct + * @return string + */ + protected function parseDistinct(Query $query, $distinct) + { + return !empty($distinct) ? ' DISTINCT ' : ''; + } + + /** + * union分析 + * @access protected + * @param Query $query 查询对象 + * @param mixed $union + * @return string + */ + protected function parseUnion(Query $query, $union) + { + if (empty($union)) { + return ''; + } + + $type = $union['type']; + unset($union['type']); + + foreach ($union as $u) { + if ($u instanceof \Closure) { + $sql[] = $type . ' ' . $this->parseClosure($query, $u); + } elseif (is_string($u)) { + $sql[] = $type . ' ( ' . $this->connection->parseSqlTable($u) . ' )'; + } + } + + return ' ' . implode(' ', $sql); + } + + /** + * index分析,可在操作链中指定需要强制使用的索引 + * @access protected + * @param Query $query 查询对象 + * @param mixed $index + * @return string + */ + protected function parseForce(Query $query, $index) + { + if (empty($index)) { + return ''; + } + + return sprintf(" FORCE INDEX ( %s ) ", is_array($index) ? implode(',', $index) : $index); + } + + /** + * 设置锁机制 + * @access protected + * @param Query $query 查询对象 + * @param bool|string $lock + * @return string + */ + protected function parseLock(Query $query, $lock = false) + { + if (is_bool($lock)) { + return $lock ? ' FOR UPDATE ' : ''; + } elseif (is_string($lock) && !empty($lock)) { + return ' ' . trim($lock) . ' '; + } + } + + /** + * 生成查询SQL + * @access public + * @param Query $query 查询对象 + * @return string + */ + public function select(Query $query) + { + $options = $query->getOptions(); + + return str_replace( + ['%TABLE%', '%DISTINCT%', '%FIELD%', '%JOIN%', '%WHERE%', '%GROUP%', '%HAVING%', '%ORDER%', '%LIMIT%', '%UNION%', '%LOCK%', '%COMMENT%', '%FORCE%'], + [ + $this->parseTable($query, $options['table']), + $this->parseDistinct($query, $options['distinct']), + $this->parseField($query, $options['field']), + $this->parseJoin($query, $options['join']), + $this->parseWhere($query, $options['where']), + $this->parseGroup($query, $options['group']), + $this->parseHaving($query, $options['having']), + $this->parseOrder($query, $options['order']), + $this->parseLimit($query, $options['limit']), + $this->parseUnion($query, $options['union']), + $this->parseLock($query, $options['lock']), + $this->parseComment($query, $options['comment']), + $this->parseForce($query, $options['force']), + ], + $this->selectSql); + } + + /** + * 生成Insert SQL + * @access public + * @param Query $query 查询对象 + * @param bool $replace 是否replace + * @return string + */ + public function insert(Query $query, $replace = false) + { + $options = $query->getOptions(); + + // 分析并处理数据 + $data = $this->parseData($query, $options['data']); + if (empty($data)) { + return 0; + } + + $fields = array_keys($data); + $values = array_values($data); + + return str_replace( + ['%INSERT%', '%TABLE%', '%FIELD%', '%DATA%', '%COMMENT%'], + [ + $replace ? 'REPLACE' : 'INSERT', + $this->parseTable($query, $options['table']), + implode(' , ', $fields), + implode(' , ', $values), + $this->parseComment($query, $options['comment']), + ], + $this->insertSql); + } + + /** + * 生成insertall SQL + * @access public + * @param Query $query 查询对象 + * @param array $dataSet 数据集 + * @param bool $replace 是否replace + * @return string + */ + public function insertAll(Query $query, $dataSet, $replace = false) + { + $options = $query->getOptions(); + + // 获取合法的字段 + if ('*' == $options['field']) { + $allowFields = $this->connection->getTableFields($options['table']); + } else { + $allowFields = $options['field']; + } + + // 获取绑定信息 + $bind = $this->connection->getFieldsBind($options['table']); + + foreach ($dataSet as $k => $data) { + $data = $this->parseData($query, $data, $allowFields, $bind, '_' . $k); + + $values[] = 'SELECT ' . implode(',', array_values($data)); + + if (!isset($insertFields)) { + $insertFields = array_keys($data); + } + } + + $fields = []; + + foreach ($insertFields as $field) { + $fields[] = $this->parseKey($query, $field, true); + } + + return str_replace( + ['%INSERT%', '%TABLE%', '%FIELD%', '%DATA%', '%COMMENT%'], + [ + $replace ? 'REPLACE' : 'INSERT', + $this->parseTable($query, $options['table']), + implode(' , ', $fields), + implode(' UNION ALL ', $values), + $this->parseComment($query, $options['comment']), + ], + $this->insertAllSql); + } + + /** + * 生成slect insert SQL + * @access public + * @param Query $query 查询对象 + * @param array $fields 数据 + * @param string $table 数据表 + * @return string + */ + public function selectInsert(Query $query, $fields, $table) + { + $options = $query->getOptions(); + + if (is_string($fields)) { + $fields = explode(',', $fields); + } + + foreach ($fields as &$field) { + $field = $this->parseKey($query, $field, true); + } + + return 'INSERT INTO ' . $this->parseTable($query, $table, $options) . ' (' . implode(',', $fields) . ') ' . $this->select($options); + } + + /** + * 生成update SQL + * @access public + * @param Query $query 查询对象 + * @return string + */ + public function update(Query $query) + { + $options = $query->getOptions(); + + $table = $this->parseTable($query, $options['table']); + $data = $this->parseData($query, $options['data']); + + if (empty($data)) { + return ''; + } + + foreach ($data as $key => $val) { + $set[] = $key . ' = ' . $val; + } + + return str_replace( + ['%TABLE%', '%SET%', '%JOIN%', '%WHERE%', '%ORDER%', '%LIMIT%', '%LOCK%', '%COMMENT%'], + [ + $this->parseTable($query, $options['table']), + implode(' , ', $set), + $this->parseJoin($query, $options['join']), + $this->parseWhere($query, $options['where']), + $this->parseOrder($query, $options['order']), + $this->parseLimit($query, $options['limit']), + $this->parseLock($query, $options['lock']), + $this->parseComment($query, $options['comment']), + ], + $this->updateSql); + } + + /** + * 生成delete SQL + * @access public + * @param Query $query 查询对象 + * @return string + */ + public function delete(Query $query) + { + $options = $query->getOptions(); + + return str_replace( + ['%TABLE%', '%USING%', '%JOIN%', '%WHERE%', '%ORDER%', '%LIMIT%', '%LOCK%', '%COMMENT%'], + [ + $this->parseTable($query, $options['table']), + !empty($options['using']) ? ' USING ' . $this->parseTable($query, $options['using']) . ' ' : '', + $this->parseJoin($query, $options['join']), + $this->parseWhere($query, $options['where']), + $this->parseOrder($query, $options['order']), + $this->parseLimit($query, $options['limit']), + $this->parseLock($query, $options['lock']), + $this->parseComment($query, $options['comment']), + ], + $this->deleteSql); + } +} diff --git a/thinkphp/library/think/db/Connection.php b/thinkphp/library/think/db/Connection.php new file mode 100644 index 000000000..aa1b74028 --- /dev/null +++ b/thinkphp/library/think/db/Connection.php @@ -0,0 +1,2152 @@ + +// +---------------------------------------------------------------------- + +namespace think\db; + +use InvalidArgumentException; +use PDO; +use PDOStatement; +use think\Container; +use think\Db; +use think\db\exception\BindParamException; +use think\Debug; +use think\Exception; +use think\exception\PDOException; + +abstract class Connection +{ + protected static $instance = []; + /** @var PDOStatement PDO操作实例 */ + protected $PDOStatement; + + /** @var string 当前SQL指令 */ + protected $queryStr = ''; + // 返回或者影响记录数 + protected $numRows = 0; + // 事务指令数 + protected $transTimes = 0; + // 错误信息 + protected $error = ''; + + /** @var PDO[] 数据库连接ID 支持多个连接 */ + protected $links = []; + + /** @var PDO 当前连接ID */ + protected $linkID; + protected $linkRead; + protected $linkWrite; + + // 查询结果类型 + protected $fetchType = PDO::FETCH_ASSOC; + // 字段属性大小写 + protected $attrCase = PDO::CASE_LOWER; + // 监听回调 + protected static $event = []; + + // 数据表信息 + protected static $info = []; + + // 使用Builder类 + protected $builderClassName; + // Builder对象 + protected $builder; + // 数据库连接参数配置 + protected $config = [ + // 数据库类型 + 'type' => '', + // 服务器地址 + 'hostname' => '', + // 数据库名 + 'database' => '', + // 用户名 + 'username' => '', + // 密码 + 'password' => '', + // 端口 + 'hostport' => '', + // 连接dsn + 'dsn' => '', + // 数据库连接参数 + 'params' => [], + // 数据库编码默认采用utf8 + 'charset' => 'utf8', + // 数据库表前缀 + 'prefix' => '', + // 数据库调试模式 + 'debug' => false, + // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) + 'deploy' => 0, + // 数据库读写是否分离 主从式有效 + 'rw_separate' => false, + // 读写分离后 主服务器数量 + 'master_num' => 1, + // 指定从服务器序号 + 'slave_no' => '', + // 是否严格检查字段是否存在 + 'fields_strict' => true, + // 数据集返回类型 + 'resultset_type' => '', + // 自动写入时间戳字段 + 'auto_timestamp' => false, + // 时间字段取出后的默认时间格式 + 'datetime_format' => 'Y-m-d H:i:s', + // 是否需要进行SQL性能分析 + 'sql_explain' => false, + // Builder类 + 'builder' => '', + // Query类 + 'query' => '\\think\\db\\Query', + // 是否需要断线重连 + 'break_reconnect' => false, + // 断线标识字符串 + 'break_match_str' => [], + ]; + + // PDO连接参数 + protected $params = [ + PDO::ATTR_CASE => PDO::CASE_NATURAL, + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL, + PDO::ATTR_STRINGIFY_FETCHES => false, + PDO::ATTR_EMULATE_PREPARES => false, + ]; + + // 服务器断线标识字符 + protected $breakMatchStr = [ + 'server has gone away', + 'no connection to the server', + 'Lost connection', + 'is dead or not enabled', + 'Error while sending', + 'decryption failed or bad record mac', + 'server closed the connection unexpectedly', + 'SSL connection has been closed unexpectedly', + 'Error writing data to the connection', + 'Resource deadlock avoided', + 'failed with errno', + ]; + + // 绑定参数 + protected $bind = []; + + /** + * 架构函数 读取数据库配置信息 + * @access public + * @param array $config 数据库配置数组 + */ + public function __construct(array $config = []) + { + if (!empty($config)) { + $this->config = array_merge($this->config, $config); + } + + // 创建Builder对象 + $class = $this->getBuilderClass(); + + $this->builder = new $class($this); + + // 执行初始化操作 + $this->initialize(); + } + + /** + * 初始化 + * @access protected + * @return void + */ + protected function initialize() + {} + + /** + * 取得数据库连接类实例 + * @access public + * @param mixed $config 连接配置 + * @param bool|string $name 连接标识 true 强制重新连接 + * @return Connection + * @throws Exception + */ + public static function instance($config = [], $name = false) + { + if (false === $name) { + $name = md5(serialize($config)); + } + + if (true === $name || !isset(self::$instance[$name])) { + // 解析连接参数 支持数组和字符串 + $options = self::parseConfig($config); + + if (empty($options['type'])) { + throw new InvalidArgumentException('Undefined db type'); + } + + $class = false !== strpos($options['type'], '\\') ? $options['type'] : '\\think\\db\\connector\\' . ucwords($options['type']); + // 记录初始化信息 + Container::get('app')->log('[ DB ] INIT ' . $options['type']); + + if (true === $name) { + $name = md5(serialize($config)); + } + + self::$instance[$name] = new $class($options); + } + + return self::$instance[$name]; + } + + /** + * 获取当前连接器类对应的Builder类 + * @access public + * @return string + */ + public function getBuilderClass() + { + if (!empty($this->builderClassName)) { + return $this->builderClassName; + } + + return $this->getConfig('builder') ?: '\\think\\db\\builder\\' . ucfirst($this->getConfig('type')); + } + + /** + * 设置当前的数据库Builder对象 + * @access protected + * @param Builder $builder + * @return void + */ + protected function setBuilder(Builder $builder) + { + $this->builder = $builder; + + return $this; + } + + /** + * 获取当前的builder实例对象 + * @access public + * @return Builder + */ + public function getBuilder() + { + return $this->builder; + } + + /** + * 解析pdo连接的dsn信息 + * @access protected + * @param array $config 连接信息 + * @return string + */ + abstract protected function parseDsn($config); + + /** + * 取得数据表的字段信息 + * @access public + * @param string $tableName + * @return array + */ + abstract public function getFields($tableName); + + /** + * 取得数据库的表信息 + * @access public + * @param string $dbName + * @return array + */ + abstract public function getTables($dbName); + + /** + * SQL性能分析 + * @access protected + * @param string $sql + * @return array + */ + abstract protected function getExplain($sql); + + /** + * 对返数据表字段信息进行大小写转换出来 + * @access public + * @param array $info 字段信息 + * @return array + */ + public function fieldCase($info) + { + // 字段大小写转换 + switch ($this->attrCase) { + case PDO::CASE_LOWER: + $info = array_change_key_case($info); + break; + case PDO::CASE_UPPER: + $info = array_change_key_case($info, CASE_UPPER); + break; + case PDO::CASE_NATURAL: + default: + // 不做转换 + } + + return $info; + } + + /** + * 获取字段绑定类型 + * @access public + * @param string $type 字段类型 + * @return integer + */ + public function getFieldBindType($type) + { + if (0 === strpos($type, 'set') || 0 === strpos($type, 'enum')) { + $bind = PDO::PARAM_STR; + } elseif (preg_match('/(int|double|float|decimal|real|numeric|serial|bit)/is', $type)) { + $bind = PDO::PARAM_INT; + } elseif (preg_match('/bool/is', $type)) { + $bind = PDO::PARAM_BOOL; + } else { + $bind = PDO::PARAM_STR; + } + + return $bind; + } + + /** + * 将SQL语句中的__TABLE_NAME__字符串替换成带前缀的表名(小写) + * @access public + * @param string $sql sql语句 + * @return string + */ + public function parseSqlTable($sql) + { + if (false !== strpos($sql, '__')) { + $prefix = $this->getConfig('prefix'); + $sql = preg_replace_callback("/__([A-Z0-9_-]+)__/sU", function ($match) use ($prefix) { + return $prefix . strtolower($match[1]); + }, $sql); + } + + return $sql; + } + + /** + * 获取数据表信息 + * @access public + * @param mixed $tableName 数据表名 留空自动获取 + * @param string $fetch 获取信息类型 包括 fields type bind pk + * @return mixed + */ + public function getTableInfo($tableName, $fetch = '') + { + if (is_array($tableName)) { + $tableName = key($tableName) ?: current($tableName); + } + + if (strpos($tableName, ',')) { + // 多表不获取字段信息 + return false; + } else { + $tableName = $this->parseSqlTable($tableName); + } + + // 修正子查询作为表名的问题 + if (strpos($tableName, ')')) { + return []; + } + + list($tableName) = explode(' ', $tableName); + + if (!strpos($tableName, '.')) { + $schema = $this->getConfig('database') . '.' . $tableName; + } else { + $schema = $tableName; + } + + if (!isset(self::$info[$schema])) { + // 读取缓存 + $cacheFile = Container::get('app')->getRuntimePath() . 'schema' . DIRECTORY_SEPARATOR . $schema . '.php'; + + if (!$this->config['debug'] && is_file($cacheFile)) { + $info = include $cacheFile; + } else { + $info = $this->getFields($tableName); + } + + $fields = array_keys($info); + $bind = $type = []; + + foreach ($info as $key => $val) { + // 记录字段类型 + $type[$key] = $val['type']; + $bind[$key] = $this->getFieldBindType($val['type']); + + if (!empty($val['primary'])) { + $pk[] = $key; + } + } + + if (isset($pk)) { + // 设置主键 + $pk = count($pk) > 1 ? $pk : $pk[0]; + } else { + $pk = null; + } + + self::$info[$schema] = ['fields' => $fields, 'type' => $type, 'bind' => $bind, 'pk' => $pk]; + } + + return $fetch ? self::$info[$schema][$fetch] : self::$info[$schema]; + } + + /** + * 获取数据表的主键 + * @access public + * @param string $tableName 数据表名 + * @return string|array + */ + public function getPk($tableName) + { + return $this->getTableInfo($tableName, 'pk'); + } + + /** + * 获取数据表字段信息 + * @access public + * @param string $tableName 数据表名 + * @return array + */ + public function getTableFields($tableName) + { + return $this->getTableInfo($tableName, 'fields'); + } + + /** + * 获取数据表字段类型 + * @access public + * @param string $tableName 数据表名 + * @param string $field 字段名 + * @return array|string + */ + public function getFieldsType($tableName, $field = null) + { + $result = $this->getTableInfo($tableName, 'type'); + + if ($field && isset($result[$field])) { + return $result[$field]; + } + + return $result; + } + + /** + * 获取数据表绑定信息 + * @access public + * @param string $tableName 数据表名 + * @return array + */ + public function getFieldsBind($tableName) + { + return $this->getTableInfo($tableName, 'bind'); + } + + /** + * 获取数据库的配置参数 + * @access public + * @param string $config 配置名称 + * @return mixed + */ + public function getConfig($config = '') + { + return $config ? $this->config[$config] : $this->config; + } + + /** + * 设置数据库的配置参数 + * @access public + * @param string|array $config 配置名称 + * @param mixed $value 配置值 + * @return void + */ + public function setConfig($config, $value = '') + { + if (is_array($config)) { + $this->config = array_merge($this->config, $config); + } else { + $this->config[$config] = $value; + } + } + + /** + * 连接数据库方法 + * @access public + * @param array $config 连接参数 + * @param integer $linkNum 连接序号 + * @param array|bool $autoConnection 是否自动连接主数据库(用于分布式) + * @return PDO + * @throws Exception + */ + public function connect(array $config = [], $linkNum = 0, $autoConnection = false) + { + if (isset($this->links[$linkNum])) { + return $this->links[$linkNum]; + } + + if (!$config) { + $config = $this->config; + } else { + $config = array_merge($this->config, $config); + } + + // 连接参数 + if (isset($config['params']) && is_array($config['params'])) { + $params = $config['params'] + $this->params; + } else { + $params = $this->params; + } + + // 记录当前字段属性大小写设置 + $this->attrCase = $params[PDO::ATTR_CASE]; + + if (!empty($config['break_match_str'])) { + $this->breakMatchStr = array_merge($this->breakMatchStr, (array) $config['break_match_str']); + } + + try { + if (empty($config['dsn'])) { + $config['dsn'] = $this->parseDsn($config); + } + + if ($config['debug']) { + $startTime = microtime(true); + } + + $this->links[$linkNum] = new PDO($config['dsn'], $config['username'], $config['password'], $params); + + if ($config['debug']) { + // 记录数据库连接信息 + $this->log('[ DB ] CONNECT:[ UseTime:' . number_format(microtime(true) - $startTime, 6) . 's ] ' . $config['dsn']); + } + + return $this->links[$linkNum]; + } catch (\PDOException $e) { + if ($autoConnection) { + $this->log($e->getMessage(), 'error'); + return $this->connect($autoConnection, $linkNum); + } else { + throw $e; + } + } + } + + /** + * 释放查询结果 + * @access public + */ + public function free() + { + $this->PDOStatement = null; + } + + /** + * 获取PDO对象 + * @access public + * @return \PDO|false + */ + public function getPdo() + { + if (!$this->linkID) { + return false; + } + + return $this->linkID; + } + + /** + * 执行查询 使用生成器返回数据 + * @access public + * @param string $sql sql指令 + * @param array $bind 参数绑定 + * @param bool $master 是否在主服务器读操作 + * @param Model $model 模型对象实例 + * @param array $condition 查询条件 + * @param mixed $relation 关联查询 + * @return \Generator + */ + public function getCursor($sql, $bind = [], $master = false, $model = null, $condition = null, $relation = null) + { + $this->initConnect($master); + + // 记录SQL语句 + $this->queryStr = $sql; + + $this->bind = $bind; + + // 释放前次的查询结果 + if (!empty($this->PDOStatement)) { + $this->free(); + } + + Db::$queryTimes++; + + // 调试开始 + $this->debug(true); + + // 预处理 + if (empty($this->PDOStatement)) { + $this->PDOStatement = $this->linkID->prepare($sql); + } + + // 是否为存储过程调用 + $procedure = in_array(strtolower(substr(trim($sql), 0, 4)), ['call', 'exec']); + + // 参数绑定 + if ($procedure) { + $this->bindParam($bind); + } else { + $this->bindValue($bind); + } + + // 执行查询 + $this->PDOStatement->execute(); + + // 调试结束 + $this->debug(false); + + // 返回结果集 + while ($result = $this->PDOStatement->fetch($this->fetchType)) { + if ($model) { + $instance = $model->newInstance($result, $condition); + + if ($relation) { + $instance->relationQuery($relation); + } + + yield $instance; + } else { + yield $result; + } + } + } + + /** + * 执行查询 返回数据集 + * @access public + * @param string $sql sql指令 + * @param array $bind 参数绑定 + * @param bool $master 是否在主服务器读操作 + * @param bool $pdo 是否返回PDO对象 + * @return array + * @throws BindParamException + * @throws \PDOException + * @throws \Exception + * @throws \Throwable + */ + public function query($sql, $bind = [], $master = false, $pdo = false) + { + $this->initConnect($master); + + if (!$this->linkID) { + return false; + } + + // 记录SQL语句 + $this->queryStr = $sql; + + $this->bind = $bind; + + Db::$queryTimes++; + + try { + // 调试开始 + $this->debug(true); + + // 释放前次的查询结果 + if (!empty($this->PDOStatement)) { + $this->free(); + } + + // 预处理 + if (empty($this->PDOStatement)) { + $this->PDOStatement = $this->linkID->prepare($sql); + } + + // 是否为存储过程调用 + $procedure = in_array(strtolower(substr(trim($sql), 0, 4)), ['call', 'exec']); + + // 参数绑定 + if ($procedure) { + $this->bindParam($bind); + } else { + $this->bindValue($bind); + } + + // 执行查询 + $this->PDOStatement->execute(); + + // 调试结束 + $this->debug(false); + + // 返回结果集 + return $this->getResult($pdo, $procedure); + } catch (\PDOException $e) { + if ($this->isBreak($e)) { + return $this->close()->query($sql, $bind, $master, $pdo); + } + + throw new PDOException($e, $this->config, $this->getLastsql()); + } catch (\Throwable $e) { + if ($this->isBreak($e)) { + return $this->close()->query($sql, $bind, $master, $pdo); + } + + throw $e; + } catch (\Exception $e) { + if ($this->isBreak($e)) { + return $this->close()->query($sql, $bind, $master, $pdo); + } + + throw $e; + } + } + + /** + * 执行语句 + * @access public + * @param string $sql sql指令 + * @param array $bind 参数绑定 + * @return int + * @throws BindParamException + * @throws \PDOException + * @throws \Exception + * @throws \Throwable + */ + public function execute($sql, $bind = []) + { + $this->initConnect(true); + + if (!$this->linkID) { + return false; + } + + // 记录SQL语句 + $this->queryStr = $sql; + + $this->bind = $bind; + + Db::$executeTimes++; + try { + // 调试开始 + $this->debug(true); + + //释放前次的查询结果 + if (!empty($this->PDOStatement) && $this->PDOStatement->queryString != $sql) { + $this->free(); + } + + // 预处理 + if (empty($this->PDOStatement)) { + $this->PDOStatement = $this->linkID->prepare($sql); + } + + // 是否为存储过程调用 + $procedure = in_array(strtolower(substr(trim($sql), 0, 4)), ['call', 'exec']); + + // 参数绑定 + if ($procedure) { + $this->bindParam($bind); + } else { + $this->bindValue($bind); + } + + // 执行语句 + $this->PDOStatement->execute(); + + // 调试结束 + $this->debug(false); + + $this->numRows = $this->PDOStatement->rowCount(); + + return $this->numRows; + } catch (\PDOException $e) { + if ($this->isBreak($e)) { + return $this->close()->execute($sql, $bind); + } + + throw new PDOException($e, $this->config, $this->getLastsql()); + } catch (\Throwable $e) { + if ($this->isBreak($e)) { + return $this->close()->execute($sql, $bind); + } + + throw $e; + } catch (\Exception $e) { + if ($this->isBreak($e)) { + return $this->close()->execute($sql, $bind); + } + + throw $e; + } + } + + /** + * 查找单条记录 + * @access public + * @param Query $query 查询对象 + * @return array|null|\PDOStatement|string + * @throws DbException + * @throws ModelNotFoundException + * @throws DataNotFoundException + */ + public function find(Query $query) + { + // 分析查询表达式 + $options = $query->getOptions(); + $pk = $query->getPk($options); + + if (!empty($options['cache']) && true === $options['cache']['key'] && is_string($pk) && isset($options['where']['AND'][$pk])) { + $key = $this->getCacheKey($query, $options['where']['AND'][$pk]); + } + + $data = $options['data']; + + if (empty($options['fetch_sql']) && !empty($options['cache'])) { + // 判断查询缓存 + $cache = $options['cache']; + + if (is_string($cache['key'])) { + $key = $cache['key']; + } elseif (!isset($key)) { + $key = $this->getCacheKey($query, $data); + } + + $result = Container::get('cache')->get($key); + + if (false !== $result) { + return $result; + } + } + + if (is_string($pk) && !is_array($data)) { + if (isset($key) && strpos($key, '|')) { + list($a, $val) = explode('|', $key); + $item[$pk] = $val; + } else { + $item[$pk] = $data; + } + $data = $item; + } + + $query->setOption('data', $data); + $query->setOption('limit', 1); + + // 生成查询SQL + $sql = $this->builder->select($query); + + $bind = $query->getBind(); + + if (!empty($options['fetch_sql'])) { + // 获取实际执行的SQL语句 + return $this->getRealSql($sql, $bind); + } + + // 事件回调 + $result = $query->trigger('before_find'); + + if (!$result) { + // 执行查询 + $resultSet = $this->query($sql, $bind, $options['master'], $options['fetch_pdo']); + + if ($resultSet instanceof \PDOStatement) { + // 返回PDOStatement对象 + return $resultSet; + } + + $result = isset($resultSet[0]) ? $resultSet[0] : null; + } + + if (isset($cache) && $result) { + // 缓存数据 + $this->cacheData($key, $result, $cache); + } + + return $result; + } + + /** + * 使用游标查询记录 + * @access public + * @param Query $query 查询对象 + * @return \Generator + */ + public function cursor(Query $query) + { + // 分析查询表达式 + $options = $query->getOptions(); + + // 生成查询SQL + $sql = $this->builder->select($query); + + $bind = $query->getBind(); + + $condition = isset($options['where']['AND']) ? $options['where']['AND'] : null; + $relation = isset($options['relaltion']) ? $options['relation'] : null; + + // 执行查询操作 + return $this->getCursor($sql, $bind, $options['master'], $query->getModel(), $condition, $relation); + } + + /** + * 查找记录 + * @access public + * @param Query $query 查询对象 + * @return array|\PDOStatement|string + * @throws DbException + * @throws ModelNotFoundException + * @throws DataNotFoundException + */ + public function select(Query $query) + { + // 分析查询表达式 + $options = $query->getOptions(); + + if (empty($options['fetch_sql']) && !empty($options['cache'])) { + $resultSet = $this->getCacheData($query, $options['cache'], null, $key); + + if (false !== $resultSet) { + return $resultSet; + } + } + + // 生成查询SQL + $sql = $this->builder->select($query); + + $bind = $query->getBind(); + + if (!empty($options['fetch_sql'])) { + // 获取实际执行的SQL语句 + return $this->getRealSql($sql, $bind); + } + + $resultSet = $query->trigger('before_select'); + + if (!$resultSet) { + // 执行查询操作 + $resultSet = $this->query($sql, $bind, $options['master'], $options['fetch_pdo']); + + if ($resultSet instanceof \PDOStatement) { + // 返回PDOStatement对象 + return $resultSet; + } + } + + if (!empty($options['cache']) && false !== $resultSet) { + // 缓存数据集 + $this->cacheData($key, $resultSet, $options['cache']); + } + + return $resultSet; + } + + /** + * 插入记录 + * @access public + * @param Query $query 查询对象 + * @param boolean $replace 是否replace + * @param boolean $getLastInsID 返回自增主键 + * @param string $sequence 自增序列名 + * @return integer|string + */ + public function insert(Query $query, $replace = false, $getLastInsID = false, $sequence = null) + { + // 分析查询表达式 + $options = $query->getOptions(); + + // 生成SQL语句 + $sql = $this->builder->insert($query, $replace); + + $bind = $query->getBind(); + + if (!empty($options['fetch_sql'])) { + // 获取实际执行的SQL语句 + return $this->getRealSql($sql, $bind); + } + + // 执行操作 + $result = $this->execute($sql, $bind); + + if ($result) { + $sequence = $sequence ?: (isset($options['sequence']) ? $options['sequence'] : null); + $lastInsId = $this->getLastInsID($sequence); + + $data = $options['data']; + + if ($lastInsId) { + $pk = $query->getPk($options); + if (is_string($pk)) { + $data[$pk] = $lastInsId; + } + } + + $query->setOption('data', $data); + + $query->trigger('after_insert'); + + if ($getLastInsID) { + return $lastInsId; + } + } + + return $result; + } + + /** + * 批量插入记录 + * @access public + * @param Query $query 查询对象 + * @param mixed $dataSet 数据集 + * @param bool $replace 是否replace + * @param integer $limit 每次写入数据限制 + * @return integer|string + * @throws \Exception + * @throws \Throwable + */ + public function insertAll(Query $query, $dataSet = [], $replace = false, $limit = null) + { + if (!is_array(reset($dataSet))) { + return false; + } + + $options = $query->getOptions(); + + if ($limit) { + // 分批写入 自动启动事务支持 + $this->startTrans(); + + try { + $array = array_chunk($dataSet, $limit, true); + $count = 0; + + foreach ($array as $item) { + $sql = $this->builder->insertAll($query, $item, $replace); + $bind = $query->getBind(); + + if (!empty($options['fetch_sql'])) { + $fetchSql[] = $this->getRealSql($sql, $bind); + } else { + $count += $this->execute($sql, $bind); + } + } + + // 提交事务 + $this->commit(); + } catch (\Exception $e) { + $this->rollback(); + throw $e; + } catch (\Throwable $e) { + $this->rollback(); + throw $e; + } + + return isset($fetchSql) ? implode(';', $fetchSql) : $count; + } + + $sql = $this->builder->insertAll($query, $dataSet, $replace); + $bind = $query->getBind(); + + if (!empty($options['fetch_sql'])) { + return $this->getRealSql($sql, $bind); + } + + return $this->execute($sql, $bind); + } + + /** + * 通过Select方式插入记录 + * @access public + * @param Query $query 查询对象 + * @param string $fields 要插入的数据表字段名 + * @param string $table 要插入的数据表名 + * @return integer|string + * @throws PDOException + */ + public function selectInsert(Query $query, $fields, $table) + { + // 分析查询表达式 + $options = $query->getOptions(); + + $table = $this->parseSqlTable($table); + + $sql = $this->builder->selectInsert($query, $fields, $table); + + $bind = $query->getBind(); + + if (!empty($options['fetch_sql'])) { + return $this->getRealSql($sql, $bind); + } + + return $this->execute($sql, $bind); + } + + /** + * 更新记录 + * @access public + * @param Query $query 查询对象 + * @return integer|string + * @throws Exception + * @throws PDOException + */ + public function update(Query $query) + { + $options = $query->getOptions(); + + if (isset($options['cache']) && is_string($options['cache']['key'])) { + $key = $options['cache']['key']; + } + + $pk = $query->getPk($options); + $data = $options['data']; + + if (empty($options['where'])) { + // 如果存在主键数据 则自动作为更新条件 + if (is_string($pk) && isset($data[$pk])) { + $where[$pk] = [$pk, '=', $data[$pk]]; + if (!isset($key)) { + $key = $this->getCacheKey($query, $data[$pk]); + } + unset($data[$pk]); + } elseif (is_array($pk)) { + // 增加复合主键支持 + foreach ($pk as $field) { + if (isset($data[$field])) { + $where[$field] = [$field, '=', $data[$field]]; + } else { + // 如果缺少复合主键数据则不执行 + throw new Exception('miss complex primary data'); + } + unset($data[$field]); + } + } + + if (!isset($where)) { + // 如果没有任何更新条件则不执行 + throw new Exception('miss update condition'); + } else { + $options['where']['AND'] = $where; + $query->setOption('where', ['AND' => $where]); + } + } elseif (!isset($key) && is_string($pk) && isset($options['where']['AND'][$pk])) { + $key = $this->getCacheKey($query, $options['where']['AND'][$pk]); + } + + // 更新数据 + $query->setOption('data', $data); + + // 生成UPDATE SQL语句 + $sql = $this->builder->update($query); + $bind = $query->getBind(); + + if (!empty($options['fetch_sql'])) { + // 获取实际执行的SQL语句 + return $this->getRealSql($sql, $bind); + } + + // 检测缓存 + $cache = Container::get('cache'); + + if (isset($key) && $cache->get($key)) { + // 删除缓存 + $cache->rm($key); + } elseif (!empty($options['cache']['tag'])) { + $cache->clear($options['cache']['tag']); + } + + // 执行操作 + $result = '' == $sql ? 0 : $this->execute($sql, $bind); + + if ($result) { + if (is_string($pk) && isset($where[$pk])) { + $data[$pk] = $where[$pk]; + } elseif (is_string($pk) && isset($key) && strpos($key, '|')) { + list($a, $val) = explode('|', $key); + $data[$pk] = $val; + } + + $query->setOption('data', $data); + $query->trigger('after_update'); + } + + return $result; + } + + /** + * 删除记录 + * @access public + * @param Query $query 查询对象 + * @return int + * @throws Exception + * @throws PDOException + */ + public function delete(Query $query) + { + // 分析查询表达式 + $options = $query->getOptions(); + $pk = $query->getPk($options); + $data = $options['data']; + + if (isset($options['cache']) && is_string($options['cache']['key'])) { + $key = $options['cache']['key']; + } elseif (!is_null($data) && true !== $data && !is_array($data)) { + $key = $this->getCacheKey($query, $data); + } elseif (is_string($pk) && isset($options['where']['AND'][$pk])) { + $key = $this->getCacheKey($query, $options['where']['AND'][$pk]); + } + + if (true !== $data && empty($options['where'])) { + // 如果条件为空 不进行删除操作 除非设置 1=1 + throw new Exception('delete without condition'); + } + + // 生成删除SQL语句 + $sql = $this->builder->delete($query); + + $bind = $query->getBind(); + + if (!empty($options['fetch_sql'])) { + // 获取实际执行的SQL语句 + return $this->getRealSql($sql, $bind); + } + + // 检测缓存 + $cache = Container::get('cache'); + + if (isset($key) && $cache->get($key)) { + // 删除缓存 + $cache->rm($key); + } elseif (!empty($options['cache']['tag'])) { + $cache->clear($options['cache']['tag']); + } + + // 执行操作 + $result = $this->execute($sql, $bind); + + if ($result) { + if (!is_array($data) && is_string($pk) && isset($key) && strpos($key, '|')) { + list($a, $val) = explode('|', $key); + $item[$pk] = $val; + $data = $item; + } + + $options['data'] = $data; + + $query->trigger('after_delete'); + } + + return $result; + } + + /** + * 得到某个字段的值 + * @access public + * @param Query $query 查询对象 + * @param string $field 字段名 + * @param bool $default 默认值 + * @return mixed + */ + public function value(Query $query, $field, $default = null) + { + $options = $query->getOptions(); + + if (empty($options['fetch_sql']) && !empty($options['cache'])) { + + $result = $this->getCacheData($query, $options['cache'], $field, $key); + + if (false !== $result) { + return $result; + } + } + + if (isset($options['field'])) { + $query->removeOption('field'); + } + + if (is_string($field)) { + $field = array_map('trim', explode(',', $field)); + } + + $query->setOption('field', $field); + $query->setOption('limit', 1); + + // 生成查询SQL + $sql = $this->builder->select($query); + + $bind = $query->getBind(); + + if (!empty($options['fetch_sql'])) { + // 获取实际执行的SQL语句 + return $this->getRealSql($sql, $bind); + } + + // 执行查询操作 + $pdo = $this->query($sql, $bind, $options['master'], true); + + $result = $pdo->fetchColumn(); + + if (isset($cache) && false !== $result) { + // 缓存数据 + $this->cacheData($key, $result, $cache); + } + + return false !== $result ? $result : $default; + } + + /** + * 得到某个字段的值 + * @access public + * @param Query $query 查询对象 + * @param string $aggregate 聚合方法 + * @param string $field 字段名 + * @return mixed + */ + public function aggregate(Query $query, $aggregate, $field) + { + $field = $aggregate . '(' . $this->builder->parseKey($query, $field) . ') AS tp_' . strtolower($aggregate); + + return $this->value($query, $field, 0); + } + + /** + * 得到某个列的数组 + * @access public + * @param Query $query 查询对象 + * @param string $field 字段名 多个字段用逗号分隔 + * @param string $key 索引 + * @return array + */ + public function column(Query $query, $field, $key = '') + { + $options = $query->getOptions(); + + if (empty($options['fetch_sql']) && !empty($options['cache'])) { + // 判断查询缓存 + $cache = $options['cache']; + + $guid = is_string($cache['key']) ? $cache['key'] : $this->getCacheKey($query, $field); + + $result = Container::get('cache')->get($guid); + + if (false !== $result) { + return $result; + } + } + + if (isset($options['field'])) { + $query->removeOption('field'); + } + + if (is_null($field)) { + $field = '*'; + } elseif ($key && '*' != $field) { + $field = $key . ',' . $field; + } + + if (is_string($field)) { + $field = array_map('trim', explode(',', $field)); + } + + $query->setOption('field', $field); + + // 生成查询SQL + $sql = $this->builder->select($query); + + $bind = $query->getBind(); + + if (!empty($options['fetch_sql'])) { + // 获取实际执行的SQL语句 + return $this->getRealSql($sql, $bind); + } + + // 执行查询操作 + $pdo = $this->query($sql, $bind, $options['master'], true); + + if (1 == $pdo->columnCount()) { + $result = $pdo->fetchAll(PDO::FETCH_COLUMN); + } else { + $resultSet = $pdo->fetchAll(PDO::FETCH_ASSOC); + + if ('*' == $field && $key) { + $result = array_column($resultSet, null, $key); + } elseif ($resultSet) { + $fields = array_keys($resultSet[0]); + $count = count($fields); + $key1 = array_shift($fields); + $key2 = $fields ? array_shift($fields) : ''; + $key = $key ?: $key1; + + if (strpos($key, '.')) { + list($alias, $key) = explode('.', $key); + } + + if (2 == $count) { + $column = $key2; + } elseif (1 == $count) { + $column = $key1; + } else { + $column = null; + } + + $result = array_column($resultSet, $column, $key); + } else { + $result = []; + } + } + + if (isset($cache) && isset($guid)) { + // 缓存数据 + $this->cacheData($guid, $result, $cache); + } + + return $result; + } + + /** + * 执行查询但只返回PDOStatement对象 + * @access public + * @return \PDOStatement|string + */ + public function pdo(Query $query) + { + // 分析查询表达式 + $options = $query->getOptions(); + + // 生成查询SQL + $sql = $this->builder->select($query); + + $bind = $query->getBind(); + + if (!empty($options['fetch_sql'])) { + // 获取实际执行的SQL语句 + return $this->getRealSql($sql, $bind); + } + + // 执行查询操作 + return $this->query($sql, $bind, $options['master'], true); + } + + /** + * 根据参数绑定组装最终的SQL语句 便于调试 + * @access public + * @param string $sql 带参数绑定的sql语句 + * @param array $bind 参数绑定列表 + * @return string + */ + public function getRealSql($sql, array $bind = []) + { + if (is_array($sql)) { + $sql = implode(';', $sql); + } + + foreach ($bind as $key => $val) { + $value = is_array($val) ? $val[0] : $val; + $type = is_array($val) ? $val[1] : PDO::PARAM_STR; + + if (PDO::PARAM_STR == $type) { + $value = '\'' . addslashes($value) . '\''; + } elseif (PDO::PARAM_INT == $type) { + $value = (float) $value; + } + + // 判断占位符 + $sql = is_numeric($key) ? + substr_replace($sql, $value, strpos($sql, '?'), 1) : + str_replace( + [':' . $key . ')', ':' . $key . ',', ':' . $key . ' ', ':' . $key . PHP_EOL], + [$value . ')', $value . ',', $value . ' ', $value . PHP_EOL], + $sql . ' '); + } + + return rtrim($sql); + } + + /** + * 参数绑定 + * 支持 ['name'=>'value','id'=>123] 对应命名占位符 + * 或者 ['value',123] 对应问号占位符 + * @access public + * @param array $bind 要绑定的参数列表 + * @return void + * @throws BindParamException + */ + protected function bindValue(array $bind = []) + { + foreach ($bind as $key => $val) { + // 占位符 + $param = is_numeric($key) ? $key + 1 : ':' . $key; + + if (is_array($val)) { + if (PDO::PARAM_INT == $val[1] && '' === $val[0]) { + $val[0] = 0; + } + $result = $this->PDOStatement->bindValue($param, $val[0], $val[1]); + } else { + $result = $this->PDOStatement->bindValue($param, $val); + } + + if (!$result) { + throw new BindParamException( + "Error occurred when binding parameters '{$param}'", + $this->config, + $this->getLastsql(), + $bind + ); + } + } + } + + /** + * 存储过程的输入输出参数绑定 + * @access public + * @param array $bind 要绑定的参数列表 + * @return void + * @throws BindParamException + */ + protected function bindParam($bind) + { + foreach ($bind as $key => $val) { + $param = is_numeric($key) ? $key + 1 : ':' . $key; + + if (is_array($val)) { + array_unshift($val, $param); + $result = call_user_func_array([$this->PDOStatement, 'bindParam'], $val); + } else { + $result = $this->PDOStatement->bindValue($param, $val); + } + + if (!$result) { + $param = array_shift($val); + + throw new BindParamException( + "Error occurred when binding parameters '{$param}'", + $this->config, + $this->getLastsql(), + $bind + ); + } + } + } + + /** + * 获得数据集数组 + * @access protected + * @param bool $pdo 是否返回PDOStatement + * @param bool $procedure 是否存储过程 + * @return array + */ + protected function getResult($pdo = false, $procedure = false) + { + if ($pdo) { + // 返回PDOStatement对象处理 + return $this->PDOStatement; + } + + if ($procedure) { + // 存储过程返回结果 + return $this->procedure(); + } + + $result = $this->PDOStatement->fetchAll($this->fetchType); + + $this->numRows = count($result); + + return $result; + } + + /** + * 获得存储过程数据集 + * @access protected + * @return array + */ + protected function procedure() + { + $item = []; + + do { + $result = $this->getResult(); + if ($result) { + $item[] = $result; + } + } while ($this->PDOStatement->nextRowset()); + + $this->numRows = count($item); + + return $item; + } + + /** + * 执行数据库事务 + * @access public + * @param callable $callback 数据操作方法回调 + * @return mixed + * @throws PDOException + * @throws \Exception + * @throws \Throwable + */ + public function transaction($callback) + { + $this->startTrans(); + + try { + $result = null; + if (is_callable($callback)) { + $result = call_user_func_array($callback, [$this]); + } + + $this->commit(); + return $result; + } catch (\Exception $e) { + $this->rollback(); + throw $e; + } catch (\Throwable $e) { + $this->rollback(); + throw $e; + } + } + + /** + * 启动事务 + * @access public + * @return void + * @throws \PDOException + * @throws \Exception + */ + public function startTrans() + { + $this->initConnect(true); + if (!$this->linkID) { + return false; + } + + ++$this->transTimes; + + try { + if (1 == $this->transTimes) { + $this->linkID->beginTransaction(); + } elseif ($this->transTimes > 1 && $this->supportSavepoint()) { + $this->linkID->exec( + $this->parseSavepoint('trans' . $this->transTimes) + ); + } + } catch (\PDOException $e) { + if ($this->isBreak($e)) { + return $this->close()->startTrans(); + } + throw $e; + } catch (\Exception $e) { + if ($this->isBreak($e)) { + return $this->close()->startTrans(); + } + throw $e; + } + } + + /** + * 用于非自动提交状态下面的查询提交 + * @access public + * @return void + * @throws PDOException + */ + public function commit() + { + $this->initConnect(true); + + if (1 == $this->transTimes) { + $this->linkID->commit(); + } + + --$this->transTimes; + } + + /** + * 事务回滚 + * @access public + * @return void + * @throws PDOException + */ + public function rollback() + { + $this->initConnect(true); + + if (1 == $this->transTimes) { + $this->linkID->rollBack(); + } elseif ($this->transTimes > 1 && $this->supportSavepoint()) { + $this->linkID->exec( + $this->parseSavepointRollBack('trans' . $this->transTimes) + ); + } + + $this->transTimes = max(0, $this->transTimes - 1); + } + + /** + * 是否支持事务嵌套 + * @return bool + */ + protected function supportSavepoint() + { + return false; + } + + /** + * 生成定义保存点的SQL + * @access protected + * @param $name + * @return string + */ + protected function parseSavepoint($name) + { + return 'SAVEPOINT ' . $name; + } + + /** + * 生成回滚到保存点的SQL + * @access protected + * @param $name + * @return string + */ + protected function parseSavepointRollBack($name) + { + return 'ROLLBACK TO SAVEPOINT ' . $name; + } + + /** + * 批处理执行SQL语句 + * 批处理的指令都认为是execute操作 + * @access public + * @param array $sqlArray SQL批处理指令 + * @param array $bind 参数绑定 + * @return boolean + */ + public function batchQuery($sqlArray = [], $bind = []) + { + if (!is_array($sqlArray)) { + return false; + } + + // 自动启动事务支持 + $this->startTrans(); + + try { + foreach ($sqlArray as $sql) { + $this->execute($sql, $bind); + } + // 提交事务 + $this->commit(); + } catch (\Exception $e) { + $this->rollback(); + throw $e; + } + + return true; + } + + /** + * 获得查询次数 + * @access public + * @param boolean $execute 是否包含所有查询 + * @return integer + */ + public function getQueryTimes($execute = false) + { + return $execute ? Db::$queryTimes + Db::$executeTimes : Db::$queryTimes; + } + + /** + * 获得执行次数 + * @access public + * @return integer + */ + public function getExecuteTimes() + { + return Db::$executeTimes; + } + + /** + * 关闭数据库(或者重新连接) + * @access public + * @return $this + */ + public function close() + { + $this->linkID = null; + $this->linkWrite = null; + $this->linkRead = null; + $this->links = []; + + return $this; + } + + /** + * 是否断线 + * @access protected + * @param \PDOException|\Exception $e 异常对象 + * @return bool + */ + protected function isBreak($e) + { + if (!$this->config['break_reconnect']) { + return false; + } + + $error = $e->getMessage(); + + foreach ($this->breakMatchStr as $msg) { + if (false !== stripos($error, $msg)) { + return true; + } + } + return false; + } + + /** + * 获取最近一次查询的sql语句 + * @access public + * @return string + */ + public function getLastSql() + { + return $this->getRealSql($this->queryStr, $this->bind); + } + + /** + * 获取最近插入的ID + * @access public + * @param string $sequence 自增序列名 + * @return string + */ + public function getLastInsID($sequence = null) + { + return $this->linkID->lastInsertId($sequence); + } + + /** + * 获取返回或者影响的记录数 + * @access public + * @return integer + */ + public function getNumRows() + { + return $this->numRows; + } + + /** + * 获取最近的错误信息 + * @access public + * @return string + */ + public function getError() + { + if ($this->PDOStatement) { + $error = $this->PDOStatement->errorInfo(); + $error = $error[1] . ':' . $error[2]; + } else { + $error = ''; + } + + if ('' != $this->queryStr) { + $error .= "\n [ SQL语句 ] : " . $this->getLastsql(); + } + + return $error; + } + + /** + * 数据库调试 记录当前SQL及分析性能 + * @access protected + * @param boolean $start 调试开始标记 true 开始 false 结束 + * @param string $sql 执行的SQL语句 留空自动获取 + * @return void + */ + protected function debug($start, $sql = '') + { + if (!empty($this->config['debug'])) { + // 开启数据库调试模式 + $debug = Container::get('debug'); + + if ($start) { + $debug->remark('queryStartTime', 'time'); + } else { + // 记录操作结束时间 + $debug->remark('queryEndTime', 'time'); + $runtime = $debug->getRangeTime('queryStartTime', 'queryEndTime'); + $sql = $sql ?: $this->getLastsql(); + $result = []; + + // SQL性能分析 + if ($this->config['sql_explain'] && 0 === stripos(trim($sql), 'select')) { + $result = $this->getExplain($sql); + } + + // SQL监听 + $this->triggerSql($sql, $runtime, $result); + } + } + } + + /** + * 监听SQL执行 + * @access public + * @param callable $callback 回调方法 + * @return void + */ + public function listen($callback) + { + self::$event[] = $callback; + } + + /** + * 触发SQL事件 + * @access protected + * @param string $sql SQL语句 + * @param float $runtime SQL运行时间 + * @param mixed $explain SQL分析 + * @return bool + */ + protected function triggerSql($sql, $runtime, $explain = []) + { + if (!empty(self::$event)) { + foreach (self::$event as $callback) { + if (is_callable($callback)) { + call_user_func_array($callback, [$sql, $runtime, $explain]); + } + } + } else { + // 未注册监听则记录到日志中 + $this->log('[ SQL ] ' . $sql . ' [ RunTime:' . $runtime . 's ]'); + + if (!empty($explain)) { + $this->log('[ EXPLAIN : ' . var_export($explain, true) . ' ]'); + } + } + } + + public function log($log, $type = 'sql') + { + $this->config['debug'] && Container::get('log')->record($log, $type); + } + + /** + * 初始化数据库连接 + * @access protected + * @param boolean $master 是否主服务器 + * @return void + */ + protected function initConnect($master = true) + { + if (!empty($this->config['deploy'])) { + // 采用分布式数据库 + if ($master || $this->transTimes) { + if (!$this->linkWrite) { + $this->linkWrite = $this->multiConnect(true); + } + + $this->linkID = $this->linkWrite; + } else { + if (!$this->linkRead) { + $this->linkRead = $this->multiConnect(false); + } + + $this->linkID = $this->linkRead; + } + } elseif (!$this->linkID) { + // 默认单数据库 + $this->linkID = $this->connect(); + } + } + + /** + * 连接分布式服务器 + * @access protected + * @param boolean $master 主服务器 + * @return PDO + */ + protected function multiConnect($master = false) + { + $_config = []; + + // 分布式数据库配置解析 + foreach (['username', 'password', 'hostname', 'hostport', 'database', 'dsn', 'charset'] as $name) { + $_config[$name] = explode(',', $this->config[$name]); + } + + // 主服务器序号 + $m = floor(mt_rand(0, $this->config['master_num'] - 1)); + + if ($this->config['rw_separate']) { + // 主从式采用读写分离 + if ($master) // 主服务器写入 + { + $r = $m; + } elseif (is_numeric($this->config['slave_no'])) { + // 指定服务器读 + $r = $this->config['slave_no']; + } else { + // 读操作连接从服务器 每次随机连接的数据库 + $r = floor(mt_rand($this->config['master_num'], count($_config['hostname']) - 1)); + } + } else { + // 读写操作不区分服务器 每次随机连接的数据库 + $r = floor(mt_rand(0, count($_config['hostname']) - 1)); + } + $dbMaster = false; + + if ($m != $r) { + $dbMaster = []; + foreach (['username', 'password', 'hostname', 'hostport', 'database', 'dsn', 'charset'] as $name) { + $dbMaster[$name] = isset($_config[$name][$m]) ? $_config[$name][$m] : $_config[$name][0]; + } + } + + $dbConfig = []; + + foreach (['username', 'password', 'hostname', 'hostport', 'database', 'dsn', 'charset'] as $name) { + $dbConfig[$name] = isset($_config[$name][$r]) ? $_config[$name][$r] : $_config[$name][0]; + } + + return $this->connect($dbConfig, $r, $r == $m ? false : $dbMaster); + } + + /** + * 析构方法 + * @access public + */ + public function __destruct() + { + // 释放查询 + $this->free(); + + // 关闭连接 + $this->close(); + } + + /** + * 缓存数据 + * @access protected + * @param string $key 缓存标识 + * @param mixed $data 缓存数据 + * @param array $config 缓存参数 + */ + protected function cacheData($key, $data, $config = []) + { + $cache = Container::get('cache'); + + if (isset($config['tag'])) { + $cache->tag($config['tag'])->set($key, $data, $config['expire']); + } else { + $cache->set($key, $data, $config['expire']); + } + } + + /** + * 获取缓存数据 + * @access protected + * @param Query $query 查询对象 + * @param mixed $cache 缓存设置 + * @param array $options 缓存 + * @return mixed + */ + protected function getCacheData(Query $query, $cache, $data, &$key = null) + { + // 判断查询缓存 + $key = is_string($cache['key']) ? $cache['key'] : $this->getCacheKey($query, $data); + + return Container::get('cache')->get($key); + } + + /** + * 生成缓存标识 + * @access protected + * @param Query $query 查询对象 + * @param mixed $value 缓存数据 + * @return string + */ + protected function getCacheKey(Query $query, $value) + { + if (is_scalar($value)) { + $data = $value; + } elseif (is_array($value) && isset($value[1], $value[2]) && in_array($value[1], ['=', 'eq'], true) && is_scalar($value[2])) { + $data = $value[2]; + } + + $prefix = 'think:' . $this->getConfig('database') . '.'; + + if (isset($data)) { + return $prefix . $query->getTable() . '|' . $data; + } + + try { + return md5($prefix . serialize($query->getOptions()) . serialize($query->getBind(false))); + } catch (\Exception $e) { + throw new Exception('closure not support cache(true)'); + } + } + + /** + * 数据库连接参数解析 + * @access private + * @param mixed $config + * @return array + */ + private static function parseConfig($config) + { + if (empty($config)) { + $config = Container::get('config')->pull('database'); + } elseif (is_string($config) && false === strpos($config, '/')) { + // 支持读取配置参数 + $config = Container::get('config')->get('database.' . $config); + } + + if (is_string($config)) { + return self::parseDsnConfig($config); + } else { + return $config; + } + } + + /** + * DSN解析 + * 格式: mysql://username:passwd@localhost:3306/DbName?param1=val1¶m2=val2#utf8 + * @access private + * @param string $dsnStr + * @return array + */ + private static function parseDsnConfig($dsnStr) + { + $info = parse_url($dsnStr); + + if (!$info) { + return []; + } + + $dsn = [ + 'type' => $info['scheme'], + 'username' => isset($info['user']) ? $info['user'] : '', + 'password' => isset($info['pass']) ? $info['pass'] : '', + 'hostname' => isset($info['host']) ? $info['host'] : '', + 'hostport' => isset($info['port']) ? $info['port'] : '', + 'database' => !empty($info['path']) ? ltrim($info['path'], '/') : '', + 'charset' => isset($info['fragment']) ? $info['fragment'] : 'utf8', + ]; + + if (isset($info['query'])) { + parse_str($info['query'], $dsn['params']); + } else { + $dsn['params'] = []; + } + + return $dsn; + } + +} diff --git a/thinkphp/library/think/db/Expression.php b/thinkphp/library/think/db/Expression.php new file mode 100644 index 000000000..f1b92abd7 --- /dev/null +++ b/thinkphp/library/think/db/Expression.php @@ -0,0 +1,48 @@ + +// +---------------------------------------------------------------------- + +namespace think\db; + +class Expression +{ + /** + * 查询表达式 + * + * @var string + */ + protected $value; + + /** + * 创建一个查询表达式 + * + * @param string $value + * @return void + */ + public function __construct($value) + { + $this->value = $value; + } + + /** + * 获取表达式 + * + * @return string + */ + public function getValue() + { + return $this->value; + } + + public function __toString() + { + return (string) $this->value; + } +} diff --git a/thinkphp/library/think/db/Query.php b/thinkphp/library/think/db/Query.php new file mode 100644 index 000000000..0329e1c29 --- /dev/null +++ b/thinkphp/library/think/db/Query.php @@ -0,0 +1,3143 @@ + +// +---------------------------------------------------------------------- + +namespace think\db; + +use PDO; +use think\Collection; +use think\Container; +use think\db\exception\BindParamException; +use think\db\exception\DataNotFoundException; +use think\db\exception\ModelNotFoundException; +use think\Exception; +use think\exception\DbException; +use think\exception\PDOException; +use think\Loader; +use think\Model; +use think\model\Relation; +use think\model\relation\OneToOne; +use think\Paginator; + +class Query +{ + /** + * 数据库连接对象列表 + * @var array + */ + protected static $connections = []; + + /** + * 当前数据库连接对象 + * @var Connection + */ + protected $connection; + + /** + * 当前模型对象 + * @var Model + */ + protected $model; + + /** + * 当前数据表名称(不含前缀) + * @var string + */ + protected $name = ''; + + /** + * 当前数据表主键 + * @var string|array + */ + protected $pk; + + /** + * 当前数据表前缀 + * @var string + */ + protected $prefix = ''; + + /** + * 当前查询参数 + * @var array + */ + protected $options = []; + + /** + * 当前参数绑定 + * @var array + */ + protected $bind = []; + + /** + * 事件回调 + * @var array + */ + private static $event = []; + + /** + * 扩展查询方法 + * @var array + */ + private static $extend = []; + + /** + * 日期查询表达式 + * @var array + */ + protected $timeRule = [ + 'today' => ['today', 'tomorrow'], + 'yesterday' => ['yesterday', 'today'], + 'week' => ['this week 00:00:00', 'next week 00:00:00'], + 'last week' => ['last week 00:00:00', 'this week 00:00:00'], + 'month' => ['first Day of this month 00:00:00', 'first Day of next month 00:00:00'], + 'last month' => ['first Day of last month 00:00:00', 'first Day of this month 00:00:00'], + 'year' => ['this year 1/1', 'next year 1/1'], + 'last year' => ['last year 1/1', 'this year 1/1'], + ]; + + /** + * 日期查询快捷定义 + * @var array + */ + protected $timeExp = ['d' => 'today', 'w' => 'week', 'm' => 'month', 'y' => 'year']; + + /** + * 架构函数 + * @access public + */ + public function __construct(Connection $connection = null) + { + if (is_null($connection)) { + $this->connection = Connection::instance(); + } else { + $this->connection = $connection; + } + + $this->prefix = $this->connection->getConfig('prefix'); + } + + /** + * 创建一个新的查询对象 + * @access public + * @return Query + */ + public function newQuery() + { + return new static($this->connection); + } + + /** + * 利用__call方法实现一些特殊的Model方法 + * @access public + * @param string $method 方法名称 + * @param array $args 调用参数 + * @return mixed + * @throws DbException + * @throws Exception + */ + public function __call($method, $args) + { + if (isset(self::$extend[strtolower($method)])) { + // 调用扩展查询方法 + array_unshift($args, $this); + + return Container::getInstance()->invoke(self::$extend[strtolower($method)], $args); + } elseif (strtolower(substr($method, 0, 5)) == 'getby') { + // 根据某个字段获取记录 + $field = Loader::parseName(substr($method, 5)); + return $this->where($field, '=', $args[0])->find(); + } elseif (strtolower(substr($method, 0, 10)) == 'getfieldby') { + // 根据某个字段获取记录的某个值 + $name = Loader::parseName(substr($method, 10)); + return $this->where($name, '=', $args[0])->value($args[1]); + } elseif (strtolower(substr($method, 0, 7)) == 'whereor') { + $name = Loader::parseName(substr($method, 7)); + array_unshift($args, $name); + return call_user_func_array([$this, 'whereOr'], $args); + } elseif (strtolower(substr($method, 0, 5)) == 'where') { + $name = Loader::parseName(substr($method, 5)); + array_unshift($args, $name); + return call_user_func_array([$this, 'where'], $args); + } elseif ($this->model && method_exists($this->model, 'scope' . $method)) { + // 动态调用命名范围 + $method = 'scope' . $method; + array_unshift($args, $this); + + call_user_func_array([$this->model, $method], $args); + return $this; + } else { + throw new Exception('method not exist:' . static::class . '->' . $method); + } + } + + /** + * 扩展查询方法 + * @access public + * @param string|array $method 查询方法名 + * @param callable $callback + * @return void + */ + public static function extend($method, $callback = null) + { + if (is_array($method)) { + foreach ($method as $key => $val) { + self::$extend[strtolower($key)] = $val; + } + } else { + self::$extend[strtolower($method)] = $callback; + } + } + + /** + * 设置当前的数据库Connection对象 + * @access public + * @param Connection $connection + * @return $this + */ + public function setConnection(Connection $connection) + { + $this->connection = $connection; + $this->prefix = $this->connection->getConfig('prefix'); + + return $this; + } + + /** + * 获取当前的数据库Connection对象 + * @access public + * @return Connection + */ + public function getConnection() + { + return $this->connection; + } + + /** + * 指定模型 + * @access public + * @param Model $model 模型对象实例 + * @return $this + */ + public function model(Model $model) + { + $this->model = $model; + return $this; + } + + /** + * 获取当前的模型对象 + * @access public + * @return Model|null + */ + public function getModel() + { + return $this->model ? $this->model->setQuery($this) : null; + } + + /** + * 指定当前数据表名(不含前缀) + * @access public + * @param string $name + * @return $this + */ + public function name($name) + { + $this->name = $name; + return $this; + } + + /** + * 获取当前的数据表名称 + * @access public + * @return string + */ + public function getName() + { + return $this->name ?: $this->model->getName(); + } + + /** + * 得到当前或者指定名称的数据表 + * @access public + * @param string $name + * @return string + */ + public function getTable($name = '') + { + if (empty($name) && isset($this->options['table'])) { + return $this->options['table']; + } + + $name = $name ?: $this->name; + + return $this->prefix . Loader::parseName($name); + } + + /** + * 切换数据库连接 + * @access public + * @param mixed $config 连接配置 + * @param bool|string $name 连接标识 true 强制重新连接 + * @return $this|object + * @throws Exception + */ + public function connect($config = [], $name = false) + { + $this->connection = Connection::instance($config, $name); + + $query = $this->connection->getConfig('query'); + + if (__CLASS__ != trim($query, '\\')) { + return new $query($this->connection); + } + + $this->prefix = $this->connection->getConfig('prefix'); + + return $this; + } + + /** + * 执行查询 返回数据集 + * @access public + * @param string $sql sql指令 + * @param array $bind 参数绑定 + * @param boolean $master 是否在主服务器读操作 + * @param bool|string $class 指定返回的数据集对象 + * @return mixed + * @throws BindParamException + * @throws PDOException + */ + public function query($sql, $bind = [], $master = false, $class = false) + { + return $this->connection->query($sql, $bind, $master, $class); + } + + /** + * 执行语句 + * @access public + * @param string $sql sql指令 + * @param array $bind 参数绑定 + * @return int + * @throws BindParamException + * @throws PDOException + */ + public function execute($sql, $bind = []) + { + return $this->connection->execute($sql, $bind); + } + + /** + * 监听SQL执行 + * @access public + * @param callable $callback 回调方法 + * @return void + */ + public function listen($callback) + { + $this->connection->listen($callback); + } + + /** + * 获取最近插入的ID + * @access public + * @param string $sequence 自增序列名 + * @return string + */ + public function getLastInsID($sequence = null) + { + return $this->connection->getLastInsID($sequence); + } + + /** + * 获取返回或者影响的记录数 + * @access public + * @return integer + */ + public function getNumRows() + { + return $this->connection->getNumRows(); + } + + /** + * 获取最近一次查询的sql语句 + * @access public + * @return string + */ + public function getLastSql() + { + return $this->connection->getLastSql(); + } + + /** + * 执行数据库事务 + * @access public + * @param callable $callback 数据操作方法回调 + * @return mixed + */ + public function transaction($callback) + { + return $this->connection->transaction($callback); + } + + /** + * 启动事务 + * @access public + * @return void + */ + public function startTrans() + { + $this->connection->startTrans(); + } + + /** + * 用于非自动提交状态下面的查询提交 + * @access public + * @return void + * @throws PDOException + */ + public function commit() + { + $this->connection->commit(); + } + + /** + * 事务回滚 + * @access public + * @return void + * @throws PDOException + */ + public function rollback() + { + $this->connection->rollback(); + } + + /** + * 批处理执行SQL语句 + * 批处理的指令都认为是execute操作 + * @access public + * @param array $sql SQL批处理指令 + * @return boolean + */ + public function batchQuery($sql = []) + { + return $this->connection->batchQuery($sql); + } + + /** + * 获取数据库的配置参数 + * @access public + * @param string $name 参数名称 + * @return mixed + */ + public function getConfig($name = '') + { + return $this->connection->getConfig($name); + } + + /** + * 获取数据表字段信息 + * @access public + * @param string $tableName 数据表名 + * @return array + */ + public function getTableFields($tableName = '') + { + if ('' == $tableName) { + $tableName = isset($this->options['table']) ? $this->options['table'] : $this->getTable(); + } + + return $this->connection->getTableFields($tableName); + } + + /** + * 获取数据表字段类型 + * @access public + * @param string $tableName 数据表名 + * @param string $field 字段名 + * @return array|string + */ + public function getFieldsType($tableName = '', $field = null) + { + if ('' == $tableName) { + $tableName = isset($this->options['table']) ? $this->options['table'] : $this->getTable(); + } + + return $this->connection->getFieldsType($tableName, $field); + } + + /** + * 得到分表的的数据表名 + * @access public + * @param array $data 操作的数据 + * @param string $field 分表依据的字段 + * @param array $rule 分表规则 + * @return string + */ + public function getPartitionTableName($data, $field, $rule = []) + { + // 对数据表进行分区 + if ($field && isset($data[$field])) { + $value = $data[$field]; + $type = $rule['type']; + switch ($type) { + case 'id': + // 按照id范围分表 + $step = $rule['expr']; + $seq = floor($value / $step) + 1; + break; + case 'year': + // 按照年份分表 + if (!is_numeric($value)) { + $value = strtotime($value); + } + $seq = date('Y', $value) - $rule['expr'] + 1; + break; + case 'mod': + // 按照id的模数分表 + $seq = ($value % $rule['num']) + 1; + break; + case 'md5': + // 按照md5的序列分表 + $seq = (ord(substr(md5($value), 0, 1)) % $rule['num']) + 1; + break; + default: + if (function_exists($type)) { + // 支持指定函数哈希 + $seq = (ord(substr($type($value), 0, 1)) % $rule['num']) + 1; + } else { + // 按照字段的首字母的值分表 + $seq = (ord($value{0}) % $rule['num']) + 1; + } + } + return $this->getTable() . '_' . $seq; + } + // 当设置的分表字段不在查询条件或者数据中 + // 进行联合查询,必须设定 partition['num'] + $tableName = []; + for ($i = 0; $i < $rule['num']; $i++) { + $tableName[] = 'SELECT * FROM ' . $this->getTable() . '_' . ($i + 1); + } + + $tableName = '( ' . implode(" UNION ", $tableName) . ') AS ' . $this->name; + + return $tableName; + } + + /** + * 得到某个字段的值 + * @access public + * @param string $field 字段名 + * @param mixed $default 默认值 + * @return mixed + */ + public function value($field, $default = null) + { + $this->parseOptions(); + + $result = $this->connection->value($this, $field, $default); + + if (!empty($this->options['fetch_sql'])) { + return $result; + } + + return $result; + } + + /** + * 得到某个列的数组 + * @access public + * @param string $field 字段名 多个字段用逗号分隔 + * @param string $key 索引 + * @return array + */ + public function column($field, $key = '') + { + $this->parseOptions(); + + return $this->connection->column($this, $field, $key); + } + + /** + * 聚合查询 + * @access public + * @param string $aggregate 聚合方法 + * @param string $field 字段名 + * @param bool $force 强制转为数字类型 + * @return mixed + */ + public function aggregate($aggregate, $field, $force = false) + { + $this->parseOptions(); + + $result = $this->connection->aggregate($this, $aggregate, $field); + + if (!empty($this->options['fetch_sql'])) { + return $result; + } elseif ($force) { + $result += 0; + } + + return $result; + } + + /** + * COUNT查询 + * @access public + * @param string $field 字段名 + * @return integer|string + */ + public function count($field = '*') + { + if (isset($this->options['group'])) { + // 支持GROUP + $options = $this->getOptions(); + $subSql = $this->options($options)->field('count(' . $field . ') AS think_count')->bind($this->bind)->buildSql(); + + $query = $this->newQuery()->table([$subSql => '_group_count_']); + + if (!empty($options['fetch_sql'])) { + $query->fetchSql(true); + } + + return $query->aggregate('COUNT', '*', true); + } + + return $this->aggregate('COUNT', $field, true); + } + + /** + * SUM查询 + * @access public + * @param string $field 字段名 + * @return float|int + */ + public function sum($field) + { + return $this->aggregate('SUM', $field, true); + } + + /** + * MIN查询 + * @access public + * @param string $field 字段名 + * @param bool $force 强制转为数字类型 + * @return mixed + */ + public function min($field, $force = true) + { + return $this->aggregate('MIN', $field, $force); + } + + /** + * MAX查询 + * @access public + * @param string $field 字段名 + * @param bool $force 强制转为数字类型 + * @return mixed + */ + public function max($field, $force = true) + { + return $this->aggregate('MAX', $field, $force); + } + + /** + * AVG查询 + * @access public + * @param string $field 字段名 + * @return float|int + */ + public function avg($field) + { + return $this->aggregate('AVG', $field, true); + } + + /** + * 设置记录的某个字段值 + * 支持使用数据库字段和方法 + * @access public + * @param string|array $field 字段名 + * @param mixed $value 字段值 + * @return integer + */ + public function setField($field, $value = '') + { + if (is_array($field)) { + $data = $field; + } else { + $data[$field] = $value; + } + + return $this->update($data); + } + + /** + * 字段值(延迟)增长 + * @access public + * @param string $field 字段名 + * @param integer $step 增长值 + * @param integer $lazyTime 延时时间(s) + * @return integer|true + * @throws Exception + */ + public function setInc($field, $step = 1, $lazyTime = 0) + { + $condition = !empty($this->options['where']) ? $this->options['where'] : []; + + if (empty($condition)) { + // 没有条件不做任何更新 + throw new Exception('no data to update'); + } + + if ($lazyTime > 0) { + // 延迟写入 + $guid = md5($this->getTable() . '_' . $field . '_' . serialize($condition)); + $step = $this->lazyWrite('inc', $guid, $step, $lazyTime); + + if (false === $step) { + // 清空查询条件 + $this->options = []; + return true; + } + } + + return $this->setField($field, ['INC', $step]); + } + + /** + * 字段值(延迟)减少 + * @access public + * @param string $field 字段名 + * @param integer $step 减少值 + * @param integer $lazyTime 延时时间(s) + * @return integer|true + * @throws Exception + */ + public function setDec($field, $step = 1, $lazyTime = 0) + { + $condition = !empty($this->options['where']) ? $this->options['where'] : []; + + if (empty($condition)) { + // 没有条件不做任何更新 + throw new Exception('no data to update'); + } + + if ($lazyTime > 0) { + // 延迟写入 + $guid = md5($this->getTable() . '_' . $field . '_' . serialize($condition)); + $step = $this->lazyWrite('dec', $guid, $step, $lazyTime); + + if (false === $step) { + // 清空查询条件 + $this->options = []; + return true; + } + + $value = ['INC', $step]; + } else { + $value = ['DEC', $step]; + } + + return $this->setField($field, $value); + } + + /** + * 延时更新检查 返回false表示需要延时 + * 否则返回实际写入的数值 + * @access protected + * @param string $type 自增或者自减 + * @param string $guid 写入标识 + * @param integer $step 写入步进值 + * @param integer $lazyTime 延时时间(s) + * @return false|integer + */ + protected function lazyWrite($type, $guid, $step, $lazyTime) + { + $cache = Container::get('cache'); + + if (!$cache->has($guid . '_time')) { + // 计时开始 + $cache->set($guid . '_time', time(), 0); + $cache->$type($guid, $step); + } elseif (time() > $cache->get($guid . '_time') + $lazyTime) { + // 删除缓存 + $value = $cache->$type($guid, $step); + $cache->rm($guid); + $cache->rm($guid . '_time'); + return 0 === $value ? false : $value; + } else { + // 更新缓存 + $cache->$type($guid, $step); + } + + return false; + } + + /** + * 查询SQL组装 join + * @access public + * @param mixed $join 关联的表名 + * @param mixed $condition 条件 + * @param string $type JOIN类型 + * @return $this + */ + public function join($join, $condition = null, $type = 'INNER') + { + if (empty($condition)) { + // 如果为组数,则循环调用join + foreach ($join as $key => $value) { + if (is_array($value) && 2 <= count($value)) { + $this->join($value[0], $value[1], isset($value[2]) ? $value[2] : $type); + } + } + } else { + $table = $this->getJoinTable($join); + + $this->options['join'][] = [$table, strtoupper($type), $condition]; + } + + return $this; + } + + /** + * LEFT JOIN + * @access public + * @param mixed $join 关联的表名 + * @param mixed $condition 条件 + * @return $this + */ + public function leftJoin($join, $condition = null) + { + return $this->join($join, $condition, 'LEFT'); + } + + /** + * RIGHT JOIN + * @access public + * @param mixed $join 关联的表名 + * @param mixed $condition 条件 + * @return $this + */ + public function rightJoin($join, $condition = null) + { + return $this->join($join, $condition, 'RIGHT'); + } + + /** + * FULL JOIN + * @access public + * @param mixed $join 关联的表名 + * @param mixed $condition 条件 + * @return $this + */ + public function fullJoin($join, $condition = null) + { + return $this->join($join, $condition, 'FULL'); + } + + /** + * 获取Join表名及别名 支持 + * ['prefix_table或者子查询'=>'alias'] 'table alias' + * @access protected + * @param array|string $join + * @param string $alias + * @return string + */ + protected function getJoinTable($join, &$alias = null) + { + if (is_array($join)) { + $table = $join; + $alias = array_shift($join); + } else { + $join = trim($join); + + if (false !== strpos($join, '(')) { + // 使用子查询 + $table = $join; + } else { + $prefix = $this->prefix; + if (strpos($join, ' ')) { + // 使用别名 + list($table, $alias) = explode(' ', $join); + } else { + $table = $join; + if (false === strpos($join, '.') && 0 !== strpos($join, '__')) { + $alias = $join; + } + } + + if ($prefix && false === strpos($table, '.') && 0 !== strpos($table, $prefix) && 0 !== strpos($table, '__')) { + $table = $this->getTable($table); + } + } + + if (isset($alias) && $table != $alias) { + $table = [$table => $alias]; + } + } + + return $table; + } + + /** + * 查询SQL组装 union + * @access public + * @param mixed $union + * @param boolean $all + * @return $this + */ + public function union($union, $all = false) + { + $this->options['union']['type'] = $all ? 'UNION ALL' : 'UNION'; + + if (is_array($union)) { + $this->options['union'] = array_merge($this->options['union'], $union); + } else { + $this->options['union'][] = $union; + } + + return $this; + } + + /** + * 查询SQL组装 union all + * @access public + * @param mixed $union + * @return $this + */ + public function unionAll($union) + { + return $this->union($union, true); + } + + /** + * 指定查询字段 支持字段排除和指定数据表 + * @access public + * @param mixed $field + * @param boolean $except 是否排除 + * @param string $tableName 数据表名 + * @param string $prefix 字段前缀 + * @param string $alias 别名前缀 + * @return $this + */ + public function field($field, $except = false, $tableName = '', $prefix = '', $alias = '') + { + if (empty($field)) { + return $this; + } elseif ($field instanceof Expression) { + $this->options['field'][] = $field; + return $this; + } + + if (is_string($field)) { + if (preg_match('/[\<\'\"\(]/', $field)) { + return $this->fieldRaw($field); + } + + $field = array_map('trim', explode(',', $field)); + } + + if (true === $field) { + // 获取全部字段 + $fields = $this->getTableFields($tableName); + $field = $fields ?: ['*']; + } elseif ($except) { + // 字段排除 + $fields = $this->getTableFields($tableName); + $field = $fields ? array_diff($fields, $field) : $field; + } + + if ($tableName) { + // 添加统一的前缀 + $prefix = $prefix ?: $tableName; + foreach ($field as $key => $val) { + if (is_numeric($key)) { + $val = $prefix . '.' . $val . ($alias ? ' AS ' . $alias . $val : ''); + } + $field[$key] = $val; + } + } + + if (isset($this->options['field'])) { + $field = array_merge((array) $this->options['field'], $field); + } + + $this->options['field'] = array_unique($field); + + return $this; + } + + /** + * 表达式方式指定查询字段 + * @access public + * @param string $field 字段名 + * @param array $bind 参数绑定 + * @return $this + */ + public function fieldRaw($field, array $bind = []) + { + $this->options['field'][] = $this->raw($field); + + if ($bind) { + $this->bind($bind); + } + + return $this; + } + + /** + * 设置数据排除字段 + * @access public + * @param mixed $field 字段名或者数据 + * @return $this + */ + public function hidden($field) + { + return $this->field($field, true); + } + + /** + * 设置数据 + * @access public + * @param mixed $field 字段名或者数据 + * @param mixed $value 字段值 + * @return $this + */ + public function data($field, $value = null) + { + if (is_array($field)) { + $this->options['data'] = isset($this->options['data']) ? array_merge($this->options['data'], $field) : $field; + } else { + $this->options['data'][$field] = $value; + } + + return $this; + } + + /** + * 字段值增长 + * @access public + * @param string|array $field 字段名 + * @param integer $step 增长值 + * @return $this + */ + public function inc($field, $step = 1, $op = 'INC') + { + $fields = is_string($field) ? explode(',', $field) : $field; + + foreach ($fields as $field => $val) { + if (is_numeric($field)) { + $field = $val; + } else { + $step = $val; + } + + $this->data($field, [$op, $step]); + } + + return $this; + } + + /** + * 字段值减少 + * @access public + * @param string|array $field 字段名 + * @param integer $step 增长值 + * @return $this + */ + public function dec($field, $step = 1) + { + return $this->inc($field, $step, 'DEC'); + } + + /** + * 使用表达式设置数据 + * @access public + * @param string $field 字段名 + * @param string $value 字段值 + * @return $this + */ + public function exp($field, $value) + { + $this->data($field, $this->raw($value)); + return $this; + } + + /** + * 使用表达式设置数据 + * @access public + * @param mixed $value 表达式 + * @return Expression + */ + public function raw($value) + { + return new Expression($value); + } + + /** + * 指定JOIN查询字段 + * @access public + * @param string|array $table 数据表 + * @param string|array $field 查询字段 + * @param string|array $on JOIN条件 + * @param string $type JOIN类型 + * @return $this + */ + public function view($join, $field = true, $on = null, $type = 'INNER') + { + $this->options['view'] = true; + + if (is_array($join) && key($join) === 0) { + foreach ($join as $key => $val) { + $this->view($val[0], $val[1], isset($val[2]) ? $val[2] : null, isset($val[3]) ? $val[3] : 'INNER'); + } + } else { + $fields = []; + $table = $this->getJoinTable($join, $alias); + + if (true === $field) { + $fields = $alias . '.*'; + } else { + if (is_string($field)) { + $field = explode(',', $field); + } + + foreach ($field as $key => $val) { + if (is_numeric($key)) { + $fields[] = $alias . '.' . $val; + + $this->options['map'][$val] = $alias . '.' . $val; + } else { + if (preg_match('/[,=\.\'\"\(\s]/', $key)) { + $name = $key; + } else { + $name = $alias . '.' . $key; + } + + $fields[] = $name . ' AS ' . $val; + + $this->options['map'][$val] = $name; + } + } + } + + $this->field($fields); + + if ($on) { + $this->join($table, $on, $type); + } else { + $this->table($table); + } + } + + return $this; + } + + /** + * 设置分表规则 + * @access public + * @param array $data 操作的数据 + * @param string $field 分表依据的字段 + * @param array $rule 分表规则 + * @return $this + */ + public function partition($data, $field, $rule = []) + { + $this->options['table'] = $this->getPartitionTableName($data, $field, $rule); + + return $this; + } + + /** + * 指定AND查询条件 + * @access public + * @param mixed $field 查询字段 + * @param mixed $op 查询表达式 + * @param mixed $condition 查询条件 + * @return $this + */ + public function where($field, $op = null, $condition = null) + { + $param = func_get_args(); + array_shift($param); + return $this->parseWhereExp('AND', $field, $op, $condition, $param); + } + + /** + * 指定OR查询条件 + * @access public + * @param mixed $field 查询字段 + * @param mixed $op 查询表达式 + * @param mixed $condition 查询条件 + * @return $this + */ + public function whereOr($field, $op = null, $condition = null) + { + $param = func_get_args(); + array_shift($param); + return $this->parseWhereExp('OR', $field, $op, $condition, $param); + } + + /** + * 指定XOR查询条件 + * @access public + * @param mixed $field 查询字段 + * @param mixed $op 查询表达式 + * @param mixed $condition 查询条件 + * @return $this + */ + public function whereXor($field, $op = null, $condition = null) + { + $param = func_get_args(); + array_shift($param); + return $this->parseWhereExp('XOR', $field, $op, $condition, $param); + } + + /** + * 指定Null查询条件 + * @access public + * @param mixed $field 查询字段 + * @param string $logic 查询逻辑 and or xor + * @return $this + */ + public function whereNull($field, $logic = 'AND') + { + return $this->parseWhereExp($logic, $field, 'NULL', null, [], true); + } + + /** + * 指定NotNull查询条件 + * @access public + * @param mixed $field 查询字段 + * @param string $logic 查询逻辑 and or xor + * @return $this + */ + public function whereNotNull($field, $logic = 'AND') + { + return $this->parseWhereExp($logic, $field, 'NOTNULL', null, [], true); + } + + /** + * 指定Exists查询条件 + * @access public + * @param mixed $condition 查询条件 + * @param string $logic 查询逻辑 and or xor + * @return $this + */ + public function whereExists($condition, $logic = 'AND') + { + $this->options['where'][strtoupper($logic)][] = ['', 'EXISTS', $condition]; + return $this; + } + + /** + * 指定NotExists查询条件 + * @access public + * @param mixed $condition 查询条件 + * @param string $logic 查询逻辑 and or xor + * @return $this + */ + public function whereNotExists($condition, $logic = 'AND') + { + $this->options['where'][strtoupper($logic)][] = ['', 'NOT EXISTS', $condition]; + return $this; + } + + /** + * 指定In查询条件 + * @access public + * @param mixed $field 查询字段 + * @param mixed $condition 查询条件 + * @param string $logic 查询逻辑 and or xor + * @return $this + */ + public function whereIn($field, $condition, $logic = 'AND') + { + return $this->parseWhereExp($logic, $field, 'IN', $condition, [], true); + } + + /** + * 指定NotIn查询条件 + * @access public + * @param mixed $field 查询字段 + * @param mixed $condition 查询条件 + * @param string $logic 查询逻辑 and or xor + * @return $this + */ + public function whereNotIn($field, $condition, $logic = 'AND') + { + return $this->parseWhereExp($logic, $field, 'NOT IN', $condition, [], true); + } + + /** + * 指定Like查询条件 + * @access public + * @param mixed $field 查询字段 + * @param mixed $condition 查询条件 + * @param string $logic 查询逻辑 and or xor + * @return $this + */ + public function whereLike($field, $condition, $logic = 'AND') + { + return $this->parseWhereExp($logic, $field, 'LIKE', $condition, [], true); + } + + /** + * 指定NotLike查询条件 + * @access public + * @param mixed $field 查询字段 + * @param mixed $condition 查询条件 + * @param string $logic 查询逻辑 and or xor + * @return $this + */ + public function whereNotLike($field, $condition, $logic = 'AND') + { + return $this->parseWhereExp($logic, $field, 'NOT LIKE', $condition, [], true); + } + + /** + * 指定Between查询条件 + * @access public + * @param mixed $field 查询字段 + * @param mixed $condition 查询条件 + * @param string $logic 查询逻辑 and or xor + * @return $this + */ + public function whereBetween($field, $condition, $logic = 'AND') + { + return $this->parseWhereExp($logic, $field, 'BETWEEN', $condition, [], true); + } + + /** + * 指定NotBetween查询条件 + * @access public + * @param mixed $field 查询字段 + * @param mixed $condition 查询条件 + * @param string $logic 查询逻辑 and or xor + * @return $this + */ + public function whereNotBetween($field, $condition, $logic = 'AND') + { + return $this->parseWhereExp($logic, $field, 'NOT BETWEEN', $condition, [], true); + } + + /** + * 比较两个字段 + * @access public + * @param string $field1 查询字段 + * @param string $operator 比较操作符 + * @param string $field2 比较字段 + * @param string $logic 查询逻辑 and or xor + * @return $this + */ + public function whereColumn($field1, $operator, $field2 = null, $logic = 'AND') + { + if (is_null($field2)) { + $field2 = $operator; + $operator = '='; + } + + return $this->whereExp($field1, $operator . ' ' . $field2, [], $logic); + } + + /** + * 设置软删除字段及条件 + * @access public + * @param false|string $field 查询字段 + * @param mixed $condition 查询条件 + * @return $this + */ + public function useSoftDelete($field, $condition = null) + { + if ($field) { + $this->options['soft_delete'] = [$field, $condition]; + } + + return $this; + } + + /** + * 指定Exp查询条件 + * @access public + * @param mixed $field 查询字段 + * @param string $condition 查询条件 + * @param array $bind 参数绑定 + * @param string $logic 查询逻辑 and or xor + * @return $this + */ + public function whereExp($field, $condition, $bind = [], $logic = 'AND') + { + $this->options['where'][$logic][] = [$field, 'EXP', $this->raw($condition)]; + + if ($bind) { + $this->bind($bind); + } + return $this; + } + + /** + * 指定表达式查询条件 + * @access public + * @param string $where 查询条件 + * @param array $bind 参数绑定 + * @param string $logic 查询逻辑 and or xor + * @return $this + */ + public function whereRaw($where, $bind = [], $logic = 'AND') + { + $this->options['where'][$logic][] = $this->raw($where); + + if ($bind) { + $this->bind($bind); + } + + return $this; + } + + /** + * 指定表达式查询条件 OR + * @access public + * @param string $where 查询条件 + * @param array $bind 参数绑定 + * @return $this + */ + public function whereOrRaw($where, $bind = []) + { + return $this->whereRaw($where, $bind, 'OR'); + } + + /** + * 分析查询表达式 + * @access protected + * @param string $logic 查询逻辑 and or xor + * @param mixed $field 查询字段 + * @param mixed $op 查询表达式 + * @param mixed $condition 查询条件 + * @param array $param 查询参数 + * @param bool $strict 严格模式 + * @return $this + */ + protected function parseWhereExp($logic, $field, $op, $condition, array $param = [], $strict = false) + { + if ($field instanceof $this) { + $this->options['where'] = $field->getOptions('where'); + return $this; + } + + $logic = strtoupper($logic); + + if (is_string($field) && !empty($this->options['via']) && !strpos($field, '.')) { + $field = $this->options['via'] . '.' . $field; + } + + if ($field instanceof Expression) { + return $this->whereRaw($field, is_array($op) ? $op : []); + } elseif ($strict) { + // 使用严格模式查询 + $where = [$field, $op, $condition]; + } elseif (is_array($field)) { + // 解析数组批量查询 + return $this->parseArrayWhereItems($field, $logic); + } elseif ($field instanceof \Closure) { + $where = $field; + } elseif (is_string($field)) { + if (preg_match('/[,=\<\'\"\(\s]/', $field)) { + return $this->whereRaw($field, $op); + } elseif (is_string($op) && strtolower($op) == 'exp') { + $bind = isset($param[2]) && is_array($param[2]) ? $param[2] : null; + return $this->whereExp($field, $condition, $bind, $logic); + } + + $where = $this->parseWhereItem($logic, $field, $op, $condition, $param); + } + + if (!empty($where)) { + $this->options['where'][$logic][] = $where; + } + + return $this; + } + + /** + * 分析查询表达式 + * @access protected + * @param string $logic 查询逻辑 and or xor + * @param mixed $field 查询字段 + * @param mixed $op 查询表达式 + * @param mixed $condition 查询条件 + * @param array $param 查询参数 + * @return mixed + */ + protected function parseWhereItem($logic, $field, $op, $condition, $param = []) + { + if (is_array($op)) { + // 同一字段多条件查询 + array_unshift($param, $field); + $where = $param; + } elseif ($field && is_null($condition)) { + if (in_array(strtoupper($op), ['NULL', 'NOTNULL', 'NOT NULL'], true)) { + // null查询 + $where = [$field, $op, '']; + } elseif (in_array(strtolower($op), ['=', 'eq', null], true)) { + $where = [$field, 'NULL', '']; + } elseif (in_array(strtolower($op), ['<>', 'neq'], true)) { + $where = [$field, 'NOTNULL', '']; + } else { + // 字段相等查询 + $where = [$field, '=', $op]; + } + } else { + $where = $field ? [$field, $op, $condition] : null; + } + + return $where; + } + + /** + * 数组批量查询 + * @access protected + * @param array $field 批量查询 + * @param string $logic 查询逻辑 and or xor + * @return $this + */ + protected function parseArrayWhereItems($field, $logic) + { + if (key($field) !== 0) { + $where = []; + foreach ($field as $key => $val) { + $where[] = is_null($val) ? [$key, 'NULL', ''] : [$key, '=', $val]; + } + } else { + // 数组批量查询 + $where = $field; + } + + if (!empty($where)) { + $this->options['where'][$logic] = isset($this->options['where'][$logic]) ? array_merge($this->options['where'][$logic], $where) : $where; + } + + return $this; + } + + /** + * 去除某个查询条件 + * @access public + * @param string $field 查询字段 + * @param string $logic 查询逻辑 and or xor + * @return $this + */ + public function removeWhereField($field, $logic = 'AND') + { + $logic = strtoupper($logic); + + if (isset($this->options['where'][$logic][$field])) { + unset($this->options['where'][$logic][$field]); + } + + return $this; + } + + /** + * 去除查询参数 + * @access public + * @param string|bool $option 参数名 true 表示去除所有参数 + * @return $this + */ + public function removeOption($option = true) + { + if (true === $option) { + $this->options = []; + } elseif (is_string($option) && isset($this->options[$option])) { + unset($this->options[$option]); + } + + return $this; + } + + /** + * 条件查询 + * @access public + * @param mixed $condition 满足条件(支持闭包) + * @param \Closure|array $query 满足条件后执行的查询表达式(闭包或数组) + * @param \Closure|array $otherwise 不满足条件后执行 + * @return $this + */ + public function when($condition, $query, $otherwise = null) + { + if ($condition instanceof \Closure) { + $condition = $condition($this); + } + + if ($condition) { + if ($query instanceof \Closure) { + $query($this, $condition); + } elseif (is_array($query)) { + $this->where($query); + } + } elseif ($otherwise) { + if ($otherwise instanceof \Closure) { + $otherwise($this, $condition); + } elseif (is_array($otherwise)) { + $this->where($otherwise); + } + } + + return $this; + } + + /** + * 指定查询数量 + * @access public + * @param mixed $offset 起始位置 + * @param mixed $length 查询数量 + * @return $this + */ + public function limit($offset, $length = null) + { + if (is_null($length) && strpos($offset, ',')) { + list($offset, $length) = explode(',', $offset); + } + + $this->options['limit'] = intval($offset) . ($length ? ',' . intval($length) : ''); + + return $this; + } + + /** + * 指定分页 + * @access public + * @param mixed $page 页数 + * @param mixed $listRows 每页数量 + * @return $this + */ + public function page($page, $listRows = null) + { + if (is_null($listRows) && strpos($page, ',')) { + list($page, $listRows) = explode(',', $page); + } + + $this->options['page'] = [intval($page), intval($listRows)]; + + return $this; + } + + /** + * 分页查询 + * @access public + * @param int|array $listRows 每页数量 数组表示配置参数 + * @param int|bool $simple 是否简洁模式或者总记录数 + * @param array $config 配置参数 + * page:当前页, + * path:url路径, + * query:url额外参数, + * fragment:url锚点, + * var_page:分页变量, + * list_rows:每页数量 + * type:分页类名 + * @return \think\Paginator + * @throws DbException + */ + public function paginate($listRows = null, $simple = false, $config = []) + { + if (is_int($simple)) { + $total = $simple; + $simple = false; + } + + $paginate = Container::get('config')->pull('paginate'); + + if (is_array($listRows)) { + $config = array_merge($paginate, $listRows); + $listRows = $config['list_rows']; + } else { + $config = array_merge($paginate, $config); + $listRows = $listRows ?: $config['list_rows']; + } + + /** @var Paginator $class */ + $class = false !== strpos($config['type'], '\\') ? $config['type'] : '\\think\\paginator\\driver\\' . ucwords($config['type']); + $page = isset($config['page']) ? (int) $config['page'] : call_user_func([ + $class, + 'getCurrentPage', + ], $config['var_page']); + + $page = $page < 1 ? 1 : $page; + + $config['path'] = isset($config['path']) ? $config['path'] : call_user_func([$class, 'getCurrentPath']); + + if (!isset($total) && !$simple) { + $options = $this->getOptions(); + + unset($this->options['order'], $this->options['limit'], $this->options['page'], $this->options['field']); + + $bind = $this->bind; + $total = $this->count(); + $results = $this->options($options)->bind($bind)->page($page, $listRows)->select(); + } elseif ($simple) { + $results = $this->limit(($page - 1) * $listRows, $listRows + 1)->select(); + $total = null; + } else { + $results = $this->page($page, $listRows)->select(); + } + + return $class::make($results, $listRows, $page, $total, $simple, $config); + } + + /** + * 指定当前操作的数据表 + * @access public + * @param mixed $table 表名 + * @return $this + */ + public function table($table) + { + if (is_string($table)) { + if (strpos($table, ')')) { + // 子查询 + } elseif (strpos($table, ',')) { + $tables = explode(',', $table); + $table = []; + + foreach ($tables as $item) { + list($item, $alias) = explode(' ', trim($item)); + if ($alias) { + $this->alias([$item => $alias]); + $table[$item] = $alias; + } else { + $table[] = $item; + } + } + } elseif (strpos($table, ' ')) { + list($table, $alias) = explode(' ', $table); + + $table = [$table => $alias]; + $this->alias($table); + } + } else { + $tables = $table; + $table = []; + + foreach ($tables as $key => $val) { + if (is_numeric($key)) { + $table[] = $val; + } else { + $this->alias([$key => $val]); + $table[$key] = $val; + } + } + } + + $this->options['table'] = $table; + + return $this; + } + + /** + * USING支持 用于多表删除 + * @access public + * @param mixed $using + * @return $this + */ + public function using($using) + { + $this->options['using'] = $using; + return $this; + } + + /** + * 指定排序 order('id','desc') 或者 order(['id'=>'desc','create_time'=>'desc']) + * @access public + * @param string|array $field 排序字段 + * @param string $order 排序 + * @return $this + */ + public function order($field, $order = null) + { + if (empty($field)) { + return $this; + } elseif ($field instanceof Expression) { + $this->options['order'][] = $field; + return $this; + } + + if (is_string($field)) { + if (!empty($this->options['via'])) { + $field = $this->options['via'] . '.' . $field; + } + + if (strpos($field, ',')) { + $field = array_map('trim', explode(',', $field)); + } else { + $field = empty($order) ? $field : [$field => $order]; + } + } elseif (!empty($this->options['via'])) { + foreach ($field as $key => $val) { + if (is_numeric($key)) { + $field[$key] = $this->options['via'] . '.' . $val; + } else { + $field[$this->options['via'] . '.' . $key] = $val; + unset($field[$key]); + } + } + } + + if (!isset($this->options['order'])) { + $this->options['order'] = []; + } + + if (is_array($field)) { + $this->options['order'] = array_merge($this->options['order'], $field); + } else { + $this->options['order'][] = $field; + } + + return $this; + } + + /** + * 表达式方式指定Field排序 + * @access public + * @param string $field 排序字段 + * @param array $bind 参数绑定 + * @return $this + */ + public function orderRaw($field, array $bind = []) + { + $this->options['order'][] = $this->raw($field); + + if ($bind) { + $this->bind($bind); + } + + return $this; + } + + /** + * 指定Field排序 order('id',[1,2,3],'desc') + * @access public + * @param string|array $field 排序字段 + * @param array $values 排序值 + * @param string $order + * @return $this + */ + public function orderField($field, array $values = [], $order = '') + { + $values['sort'] = $order; + + $this->options['order'][$field] = $values; + return $this; + } + + /** + * 随机排序 + * @access public + * @return $this + */ + public function orderRand() + { + $this->options['order'][] = '[rand]'; + return $this; + } + + /** + * 查询缓存 + * @access public + * @param mixed $key 缓存key + * @param integer|\DateTime $expire 缓存有效期 + * @param string $tag 缓存标签 + * @return $this + */ + public function cache($key = true, $expire = null, $tag = null) + { + // 增加快捷调用方式 cache(10) 等同于 cache(true, 10) + if ($key instanceof \DateTime || (is_numeric($key) && is_null($expire))) { + $expire = $key; + $key = true; + } + + if (false !== $key) { + $this->options['cache'] = ['key' => $key, 'expire' => $expire, 'tag' => $tag]; + } + + return $this; + } + + /** + * 指定group查询 + * @access public + * @param string|array $group GROUP + * @return $this + */ + public function group($group) + { + $this->options['group'] = $group; + return $this; + } + + /** + * 指定having查询 + * @access public + * @param string $having having + * @return $this + */ + public function having($having) + { + $this->options['having'] = $having; + return $this; + } + + /** + * 指定查询lock + * @access public + * @param bool|string $lock 是否lock + * @return $this + */ + public function lock($lock = false) + { + $this->options['lock'] = $lock; + $this->options['master'] = true; + + return $this; + } + + /** + * 指定distinct查询 + * @access public + * @param string $distinct 是否唯一 + * @return $this + */ + public function distinct($distinct) + { + $this->options['distinct'] = $distinct; + return $this; + } + + /** + * 指定数据表别名 + * @access public + * @param array|string $alias 数据表别名 + * @return $this + */ + public function alias($alias) + { + if (is_array($alias)) { + foreach ($alias as $key => $val) { + if (false !== strpos($key, '__')) { + $table = $this->connection->parseSqlTable($key); + } else { + $table = $key; + } + $this->options['alias'][$table] = $val; + } + } else { + if (isset($this->options['table'])) { + $table = is_array($this->options['table']) ? key($this->options['table']) : $this->options['table']; + if (false !== strpos($table, '__')) { + $table = $this->connection->parseSqlTable($table); + } + } else { + $table = $this->getTable(); + } + + $this->options['alias'][$table] = $alias; + } + + return $this; + } + + /** + * 指定强制索引 + * @access public + * @param string $force 索引名称 + * @return $this + */ + public function force($force) + { + $this->options['force'] = $force; + return $this; + } + + /** + * 查询注释 + * @access public + * @param string $comment 注释 + * @return $this + */ + public function comment($comment) + { + $this->options['comment'] = $comment; + return $this; + } + + /** + * 获取执行的SQL语句 + * @access public + * @param boolean $fetch 是否返回sql + * @return $this + */ + public function fetchSql($fetch = true) + { + $this->options['fetch_sql'] = $fetch; + return $this; + } + + /** + * 不主动获取数据集 + * @access public + * @param bool $pdo 是否返回 PDOStatement 对象 + * @return $this + */ + public function fetchPdo($pdo = true) + { + $this->options['fetch_pdo'] = $pdo; + return $this; + } + + /** + * 设置从主服务器读取数据 + * @access public + * @return $this + */ + public function master() + { + $this->options['master'] = true; + return $this; + } + + /** + * 设置是否严格检查字段名 + * @access public + * @param bool $strict 是否严格检查字段 + * @return $this + */ + public function strict($strict = true) + { + $this->options['strict'] = $strict; + return $this; + } + + /** + * 设置查询数据不存在是否抛出异常 + * @access public + * @param bool $fail 数据不存在是否抛出异常 + * @return $this + */ + public function failException($fail = true) + { + $this->options['fail'] = $fail; + return $this; + } + + /** + * 设置自增序列名 + * @access public + * @param string $sequence 自增序列名 + * @return $this + */ + public function sequence($sequence = null) + { + $this->options['sequence'] = $sequence; + return $this; + } + + /** + * 设置JSON字段信息 + * @access public + * @param array $json JSON字段 + * @return $this + */ + public function json(array $json = []) + { + $this->options['json'] = $json; + return $this; + } + + /** + * 添加查询范围 + * @access public + * @param array|string|\Closure $scope 查询范围定义 + * @param array $args 参数 + * @return $this + */ + public function scope($scope, ...$args) + { + // 查询范围的第一个参数始终是当前查询对象 + array_unshift($args, $this); + + if ($scope instanceof \Closure) { + call_user_func_array($scope, $args); + return $this; + } + + if (is_string($scope)) { + $scope = explode(',', $scope); + } + + if ($this->model) { + // 检查模型类的查询范围方法 + foreach ($scope as $name) { + $method = 'scope' . trim($name); + + if (method_exists($this->model, $method)) { + call_user_func_array([$this->model, $method], $args); + } + } + } + + return $this; + } + + /** + * 指定数据表主键 + * @access public + * @param string $pk 主键 + * @return $this + */ + public function pk($pk) + { + $this->pk = $pk; + return $this; + } + + /** + * 查询日期或者时间 + * @access public + * @param string $name 时间表达式 + * @param string|array $rule 时间范围 + * @return $this + */ + public function timeRule($name, $rule) + { + $this->timeRule[$name] = $rule; + return $this; + } + + /** + * 查询日期或者时间 + * @access public + * @param string $field 日期字段名 + * @param string|array $op 比较运算符或者表达式 + * @param string|array $range 比较范围 + * @param string $logic AND OR + * @return $this + */ + public function whereTime($field, $op, $range = null, $logic = 'AND') + { + if (is_null($range)) { + if (is_array($op)) { + $range = $op; + } else { + if (isset($this->timeExp[strtolower($op)])) { + $op = $this->timeExp[strtolower($op)]; + } + + if (isset($this->timeRule[strtolower($op)])) { + $range = $this->timeRule[strtolower($op)]; + } else { + $range = $op; + } + } + + $op = is_array($range) ? 'between' : '>='; + } + + return $this->parseWhereExp($logic, $field, strtolower($op) . ' time', $range, [], true); + } + + /** + * 查询日期或者时间范围 + * @access public + * @param string $field 日期字段名 + * @param string $startTime 开始时间 + * @param string $endTime 结束时间 + * @param string $logic AND OR + * @return $this + */ + public function whereBetweenTime($field, $startTime, $endTime = null, $logic = 'AND') + { + if (is_null($endTime)) { + $time = is_string($startTime) ? strtotime($startTime) : $startTime; + $endTime = strtotime('+1 day', $time); + } + + return $this->parseWhereExp($logic, $field, 'between time', [$startTime, $endTime], [], true); + } + + /** + * 获取当前数据表的主键 + * @access public + * @param string|array $options 数据表名或者查询参数 + * @return string|array + */ + public function getPk($options = '') + { + if (!empty($this->pk)) { + $pk = $this->pk; + } else { + $pk = $this->connection->getPk(is_array($options) && isset($options['table']) ? $options['table'] : $this->getTable()); + } + + return $pk; + } + + /** + * 参数绑定 + * @access public + * @param mixed $key 参数名 + * @param mixed $value 绑定变量值 + * @param integer $type 绑定类型 + * @return $this + */ + public function bind($key, $value = false, $type = PDO::PARAM_STR) + { + if (is_array($key)) { + $this->bind = array_merge($this->bind, $key); + } else { + $this->bind[$key] = [$value, $type]; + } + + return $this; + } + + /** + * 检测参数是否已经绑定 + * @access public + * @param string $key 参数名 + * @return bool + */ + public function isBind($key) + { + return isset($this->bind[$key]); + } + + /** + * 查询参数赋值 + * @access public + * @param string $name 参数名 + * @param mixed $value 值 + * @return $this + */ + public function option($name, $value) + { + $this->options[$name] = $value; + return $this; + } + + /** + * 查询参数赋值 + * @access protected + * @param array $options 表达式参数 + * @return $this + */ + protected function options(array $options) + { + $this->options = $options; + return $this; + } + + /** + * 获取当前的查询参数 + * @access public + * @param string $name 参数名 + * @return mixed + */ + public function getOptions($name = '') + { + if ('' === $name) { + return $this->options; + } + return isset($this->options[$name]) ? $this->options[$name] : null; + } + + /** + * 设置当前的查询参数 + * @access public + * @param string $option 参数名 + * @param mixed $value 参数值 + * @return $this + */ + public function setOption($option, $value) + { + $this->options[$option] = $value; + return $this; + } + + /** + * 设置关联查询JOIN预查询 + * @access public + * @param string|array $with 关联方法名称 + * @return $this + */ + public function with($with) + { + if (empty($with)) { + return $this; + } + + if (is_string($with)) { + $with = explode(',', $with); + } + + $first = true; + + /** @var Model $class */ + $class = $this->model; + foreach ($with as $key => $relation) { + $subRelation = ''; + $closure = false; + + if ($relation instanceof \Closure) { + // 支持闭包查询过滤关联条件 + $closure = $relation; + $relation = $key; + $with[$key] = $key; + } elseif (is_array($relation)) { + $subRelation = $relation; + $relation = $key; + } elseif (is_string($relation) && strpos($relation, '.')) { + $with[$key] = $relation; + + list($relation, $subRelation) = explode('.', $relation, 2); + } + + /** @var Relation $model */ + $relation = Loader::parseName($relation, 1, false); + $model = $class->$relation(); + + if ($model instanceof OneToOne && 0 == $model->getEagerlyType()) { + $model->removeOption()->eagerly($this, $relation, $subRelation, $closure, $first); + $first = false; + } elseif ($closure) { + $with[$key] = $closure; + } + } + $this->via(); + + if (isset($this->options['with'])) { + $this->options['with'] = array_merge($this->options['with'], $with); + } else { + $this->options['with'] = $with; + } + + return $this; + } + + /** + * 关联统计 + * @access protected + * @param string|array $relation 关联方法名 + * @param string $aggregate 聚合查询方法 + * @param string $field 字段 + * @param bool $subQuery 是否使用子查询 + * @return $this + */ + protected function withAggregate($relation, $aggregate = 'count', $field = '*', $subQuery = true) + { + $relations = is_string($relation) ? explode(',', $relation) : $relation; + + if (!$subQuery) { + $this->options['with_count'][] = [$relations, $aggregate, $field]; + } else { + if (!isset($this->options['field'])) { + $this->field('*'); + } + + foreach ($relations as $key => $relation) { + $closure = false; + if ($relation instanceof \Closure) { + $closure = $relation; + $relation = $key; + } + $relation = Loader::parseName($relation, 1, false); + $count = '(' . $this->model->$relation()->getRelationCountQuery($closure, $aggregate, $field) . ')'; + $this->field([$count => Loader::parseName($relation) . '_' . $aggregate]); + } + } + + return $this; + } + + /** + * 关联统计 + * @access public + * @param string|array $relation 关联方法名 + * @param bool $subQuery 是否使用子查询 + * @return $this + */ + public function withCount($relation, $subQuery = true) + { + return $this->withAggregate($relation, 'count', '*', $subQuery); + } + + /** + * 关联统计Sum + * @access public + * @param string|array $relation 关联方法名 + * @param string $field 字段 + * @param bool $subQuery 是否使用子查询 + * @return $this + */ + public function withSum($relation, $field, $subQuery = true) + { + return $this->withAggregate($relation, 'sum', $field, $subQuery); + } + + /** + * 关联统计Max + * @access public + * @param string|array $relation 关联方法名 + * @param string $field 字段 + * @param bool $subQuery 是否使用子查询 + * @return $this + */ + public function withMax($relation, $field, $subQuery = true) + { + return $this->withAggregate($relation, 'max', $field, $subQuery); + } + + /** + * 关联统计Min + * @access public + * @param string|array $relation 关联方法名 + * @param string $field 字段 + * @param bool $subQuery 是否使用子查询 + * @return $this + */ + public function withMin($relation, $field, $subQuery = true) + { + return $this->withAggregate($relation, 'min', $field, $subQuery); + } + + /** + * 关联统计Avg + * @access public + * @param string|array $relation 关联方法名 + * @param string $field 字段 + * @param bool $subQuery 是否使用子查询 + * @return $this + */ + public function withAvg($relation, $field, $subQuery = true) + { + return $this->withAggregate($relation, 'avg', $field, $subQuery); + } + + /** + * 关联预加载中 获取关联指定字段值 + * example: + * Model::with(['relation' => function($query){ + * $query->withField("id,name"); + * }]) + * + * @access public + * @param string | array $field 指定获取的字段 + * @return $this + */ + public function withField($field) + { + $this->options['with_field'] = $field; + + return $this; + } + + /** + * 设置当前字段添加的表别名 + * @access public + * @param string $via + * @return $this + */ + public function via($via = '') + { + $this->options['via'] = $via; + + return $this; + } + + /** + * 设置关联查询 + * @access public + * @param string|array $relation 关联名称 + * @return $this + */ + public function relation($relation) + { + if (empty($relation)) { + return $this; + } + + if (is_string($relation)) { + $relation = explode(',', $relation); + } + + if (isset($this->options['relation'])) { + $this->options['relation'] = array_merge($this->options['relation'], $relation); + } else { + $this->options['relation'] = $relation; + } + + return $this; + } + + /** + * 插入记录 + * @access public + * @param array $data 数据 + * @param boolean $replace 是否replace + * @param boolean $getLastInsID 返回自增主键 + * @param string $sequence 自增序列名 + * @return integer|string + */ + public function insert(array $data = [], $replace = false, $getLastInsID = false, $sequence = null) + { + $this->parseOptions(); + + $this->options['data'] = array_merge($this->options['data'], $data); + + return $this->connection->insert($this, $replace, $getLastInsID, $sequence); + } + + /** + * 插入记录并获取自增ID + * @access public + * @param array $data 数据 + * @param boolean $replace 是否replace + * @param string $sequence 自增序列名 + * @return integer|string + */ + public function insertGetId(array $data, $replace = false, $sequence = null) + { + return $this->insert($data, $replace, true, $sequence); + } + + /** + * 批量插入记录 + * @access public + * @param array $dataSet 数据集 + * @param boolean $replace 是否replace + * @param integer $limit 每次写入数据限制 + * @return integer|string + */ + public function insertAll(array $dataSet = [], $replace = false, $limit = null) + { + $this->parseOptions(); + + if (empty($dataSet)) { + $dataSet = $this->options['data']; + } + + if (empty($limit) && !empty($this->options['limit'])) { + $limit = $this->options['limit']; + } + + return $this->connection->insertAll($this, $dataSet, $replace, $limit); + } + + /** + * 通过Select方式插入记录 + * @access public + * @param string $fields 要插入的数据表字段名 + * @param string $table 要插入的数据表名 + * @return integer|string + * @throws PDOException + */ + public function selectInsert($fields, $table) + { + $this->parseOptions(); + + return $this->connection->selectInsert($this, $fields, $table); + } + + /** + * 更新记录 + * @access public + * @param mixed $data 数据 + * @return integer|string + * @throws Exception + * @throws PDOException + */ + public function update(array $data = []) + { + $this->parseOptions(); + + $this->options['data'] = array_merge($this->options['data'], $data); + + return $this->connection->update($this); + } + + /** + * 删除记录 + * @access public + * @param mixed $data 表达式 true 表示强制删除 + * @return int + * @throws Exception + * @throws PDOException + */ + public function delete($data = null) + { + $this->parseOptions(); + + if (!is_null($data) && true !== $data) { + // AR模式分析主键条件 + $this->parsePkWhere($data); + } + + if (!empty($this->options['soft_delete'])) { + // 软删除 + list($field, $condition) = $this->options['soft_delete']; + unset($this->options['soft_delete']); + $this->options['data'] = [$field => $condition]; + + return $this->connection->update($this); + } + + $this->options['data'] = $data; + + return $this->connection->delete($this); + } + + /** + * 执行查询但只返回PDOStatement对象 + * @access public + * @return \PDOStatement|string + */ + public function getPdo() + { + $this->parseOptions(); + + return $this->connection->pdo($this); + } + + /** + * 使用游标查找记录 + * @access public + * @param array|string|Query|\Closure $data + * @return \Generator + */ + public function cursor($data = null) + { + if ($data instanceof \Closure) { + $data($this); + $data = null; + } + + $this->parseOptions(); + + if (!is_null($data)) { + // 主键条件分析 + $this->parsePkWhere($data); + } + + $this->options['data'] = $data; + + $connection = clone $this->connection; + + return $connection->cursor($this); + } + + /** + * 查找记录 + * @access public + * @param array|string|Query|\Closure $data + * @return Collection|array|\PDOStatement|string + * @throws DbException + * @throws ModelNotFoundException + * @throws DataNotFoundException + */ + public function select($data = null) + { + if ($data instanceof Query) { + return $data->select(); + } elseif ($data instanceof \Closure) { + $data($this); + $data = null; + } + + $this->parseOptions(); + + if (false === $data) { + // 用于子查询 不查询只返回SQL + $this->options['fetch_sql'] = true; + } elseif (!is_null($data)) { + // 主键条件分析 + $this->parsePkWhere($data); + } + + $this->options['data'] = $data; + + $resultSet = $this->connection->select($this); + + if ($this->options['fetch_sql']) { + return $resultSet; + } + + // 数据列表读取后的处理 + if (!empty($this->model)) { + // 生成模型对象 + if (count($resultSet) > 0) { + foreach ($resultSet as $key => &$result) { + // 数据转换为模型对象 + $this->resultToModel($result, $this->options, true); + } + + if (!empty($this->options['with'])) { + // 预载入 + $result->eagerlyResultSet($resultSet, $this->options['with']); + } + + // 模型数据集转换 + $resultSet = $result->toCollection($resultSet); + } else { + $resultSet = $this->model->toCollection($resultSet); + } + } else { + if (!empty($this->options['json'])) { + foreach ($resultSet as &$result) { + $this->jsonResult($result, $this->options['json'], true); + } + } + + if ('collection' == $this->connection->getConfig('resultset_type')) { + // 返回Collection对象 + $resultSet = new Collection($resultSet); + } + } + + // 返回结果处理 + if (!empty($this->options['fail']) && count($resultSet) == 0) { + $this->throwNotFound($this->options); + } + + return $resultSet; + } + + /** + * 查找单条记录 + * @access public + * @param array|string|Query|\Closure $data + * @return array|null|\PDOStatement|string|Model + * @throws DbException + * @throws ModelNotFoundException + * @throws DataNotFoundException + */ + public function find($data = null) + { + if ($data instanceof Query) { + return $data->find(); + } elseif ($data instanceof \Closure) { + $data($this); + $data = null; + } + + $this->parseOptions(); + + if (!is_null($data)) { + // AR模式分析主键条件 + $this->parsePkWhere($data); + } + + $this->options['data'] = $data; + + $result = $this->connection->find($this); + + if ($this->options['fetch_sql']) { + return $result; + } + + // 数据处理 + if (!empty($result)) { + if (!empty($this->model)) { + // 返回模型对象 + $this->resultToModel($result, $this->options); + } elseif (!empty($this->options['json'])) { + $this->jsonResult($result, $this->options['json'], true); + } + } elseif (!empty($this->options['fail'])) { + $this->throwNotFound($this->options); + } + + return $result; + } + + /** + * JSON字段数据转换 + * @access protected + * @param array $result 查询数据 + * @param array $json JSON字段 + * @param bool $assoc 是否转换为数组 + * @return void + */ + protected function jsonResult(&$result, $json = [], $assoc = false) + { + foreach ($json as $name) { + if (isset($result[$name])) { + $result[$name] = json_decode($result[$name], $assoc); + } + } + } + + /** + * 查询数据转换为模型对象 + * @access protected + * @param array $result 查询数据 + * @param array $options 查询参数 + * @param bool $resultSet 是否为数据集查询 + * @return void + */ + protected function resultToModel(&$result, $options = [], $resultSet = false) + { + if (!empty($options['json'])) { + $this->jsonResult($result, $options['json']); + } + + $condition = (!$resultSet && isset($options['where']['AND'])) ? $options['where']['AND'] : null; + $result = $this->model->newInstance($result, $condition); + + // 关联查询 + if (!empty($options['relation'])) { + $result->relationQuery($options['relation']); + } + + // 预载入查询 + if (!$resultSet && !empty($options['with'])) { + $result->eagerlyResult($result, $options['with']); + } + + // 关联统计 + if (!empty($options['with_count'])) { + foreach ($options['with_count'] as $val) { + $result->relationCount($result, $val[0], $val[1], $val[2]); + } + } + } + + /** + * 查询失败 抛出异常 + * @access protected + * @param array $options 查询参数 + * @throws ModelNotFoundException + * @throws DataNotFoundException + */ + protected function throwNotFound($options = []) + { + if (!empty($this->model)) { + $class = get_class($this->model); + throw new ModelNotFoundException('model data Not Found:' . $class, $class, $options); + } + $table = is_array($options['table']) ? key($options['table']) : $options['table']; + throw new DataNotFoundException('table data not Found:' . $table, $table, $options); + } + + /** + * 查找多条记录 如果不存在则抛出异常 + * @access public + * @param array|string|Query|\Closure $data + * @return array|\PDOStatement|string|Model + * @throws DbException + * @throws ModelNotFoundException + * @throws DataNotFoundException + */ + public function selectOrFail($data = null) + { + return $this->failException(true)->select($data); + } + + /** + * 查找单条记录 如果不存在则抛出异常 + * @access public + * @param array|string|Query|\Closure $data + * @return array|\PDOStatement|string|Model + * @throws DbException + * @throws ModelNotFoundException + * @throws DataNotFoundException + */ + public function findOrFail($data = null) + { + return $this->failException(true)->find($data); + } + + /** + * 分批数据返回处理 + * @access public + * @param integer $count 每次处理的数据数量 + * @param callable $callback 处理回调方法 + * @param string|array $column 分批处理的字段名 + * @param string $order 字段排序 + * @return boolean + * @throws DbException + */ + public function chunk($count, $callback, $column = null, $order = 'asc') + { + $options = $this->getOptions(); + $column = $column ?: $this->getPk($options); + + if (isset($options['order'])) { + if (Container::get('app')->isDebug()) { + throw new DbException('chunk not support call order'); + } + unset($options['order']); + } + + $bind = $this->bind; + + if (is_array($column)) { + $times = 1; + $query = $this->options($options)->page($times, $count); + } else { + $query = $this->options($options)->limit($count); + + if (strpos($column, '.')) { + list($alias, $key) = explode('.', $column); + } else { + $key = $column; + } + } + + $resultSet = $query->order($column, $order)->select(); + + while (count($resultSet) > 0) { + if ($resultSet instanceof Collection) { + $resultSet = $resultSet->all(); + } + + if (false === call_user_func($callback, $resultSet)) { + return false; + } + + if (isset($times)) { + $times++; + $query = $this->options($options)->page($times, $count); + } else { + $end = end($resultSet); + $lastId = is_array($end) ? $end[$key] : $end->getData($key); + + $query = $this->options($options) + ->limit($count) + ->where($column, 'asc' == strtolower($order) ? '>' : '<', $lastId); + } + + $resultSet = $query->bind($bind)->order($column, $order)->select(); + } + + return true; + } + + /** + * 获取绑定的参数 并清空 + * @access public + * @param bool $clear + * @return array + */ + public function getBind($clear = true) + { + $bind = $this->bind; + if ($clear) { + $this->bind = []; + } + + return $bind; + } + + /** + * 创建子查询SQL + * @access public + * @param bool $sub + * @return string + * @throws DbException + */ + public function buildSql($sub = true) + { + return $sub ? '( ' . $this->select(false) . ' )' : $this->select(false); + } + + /** + * 视图查询处理 + * @access protected + * @param array $options 查询参数 + * @return void + */ + protected function parseView(&$options) + { + foreach (['AND', 'OR'] as $logic) { + if (isset($options['where'][$logic])) { + foreach ($options['where'][$logic] as $key => $val) { + if (array_key_exists($key, $options['map'])) { + array_shift($val); + array_unshift($val, $options['map'][$key]); + $options['where'][$logic][$options['map'][$key]] = $val; + unset($options['where'][$logic][$key]); + } + } + } + } + + if (isset($options['order'])) { + // 视图查询排序处理 + if (is_string($options['order'])) { + $options['order'] = explode(',', $options['order']); + } + foreach ($options['order'] as $key => $val) { + if (is_numeric($key)) { + if (strpos($val, ' ')) { + list($field, $sort) = explode(' ', $val); + if (array_key_exists($field, $options['map'])) { + $options['order'][$options['map'][$field]] = $sort; + unset($options['order'][$key]); + } + } elseif (array_key_exists($val, $options['map'])) { + $options['order'][$options['map'][$val]] = 'asc'; + unset($options['order'][$key]); + } + } elseif (array_key_exists($key, $options['map'])) { + $options['order'][$options['map'][$key]] = $val; + unset($options['order'][$key]); + } + } + } + } + + /** + * 把主键值转换为查询条件 支持复合主键 + * @access public + * @param array|string $data 主键数据 + * @return void + * @throws Exception + */ + public function parsePkWhere($data) + { + $pk = $this->getPk($this->options); + + // 获取当前数据表 + $table = is_array($this->options['table']) ? key($this->options['table']) : $this->options['table']; + + if (!empty($this->options['alias'][$table])) { + $alias = $this->options['alias'][$table]; + } + + if (is_string($pk)) { + $key = isset($alias) ? $alias . '.' . $pk : $pk; + // 根据主键查询 + if (is_array($data)) { + $where[$pk] = isset($data[$pk]) ? [$key, '=', $data[$pk]] : [$key, 'in', $data]; + } else { + $where[$pk] = strpos($data, ',') ? [$key, 'IN', $data] : [$key, '=', $data]; + } + } elseif (is_array($pk) && is_array($data) && !empty($data)) { + // 根据复合主键查询 + foreach ($pk as $key) { + if (isset($data[$key])) { + $attr = isset($alias) ? $alias . '.' . $key : $key; + $where[$key] = [$attr, '=', $data[$key]]; + } else { + throw new Exception('miss complex primary data'); + } + } + } + + if (!empty($where)) { + if (isset($this->options['where']['AND'])) { + $this->options['where']['AND'] = array_merge($this->options['where']['AND'], $where); + } else { + $this->options['where']['AND'] = $where; + } + } + + return; + } + + /** + * 分析表达式(可用于查询或者写入操作) + * @access protected + * @return array + */ + protected function parseOptions() + { + $options = $this->getOptions(); + + // 获取数据表 + if (empty($options['table'])) { + $options['table'] = $this->getTable(); + } + + if (!isset($options['where'])) { + $options['where'] = []; + } elseif (isset($options['view'])) { + // 视图查询条件处理 + $this->parseView($options); + } + + if (!isset($options['field'])) { + $options['field'] = '*'; + } + + foreach (['data', 'order'] as $name) { + if (!isset($options[$name])) { + $options[$name] = []; + } + } + + if (!isset($options['strict'])) { + $options['strict'] = $this->getConfig('fields_strict'); + } + + foreach (['master', 'lock', 'fetch_pdo', 'fetch_sql', 'distinct'] as $name) { + if (!isset($options[$name])) { + $options[$name] = false; + } + } + + foreach (['join', 'union', 'group', 'having', 'limit', 'force', 'comment'] as $name) { + if (!isset($options[$name])) { + $options[$name] = ''; + } + } + + if (isset($options['page'])) { + // 根据页数计算limit + list($page, $listRows) = $options['page']; + $page = $page > 0 ? $page : 1; + $listRows = $listRows > 0 ? $listRows : (is_numeric($options['limit']) ? $options['limit'] : 20); + $offset = $listRows * ($page - 1); + $options['limit'] = $offset . ',' . $listRows; + } + + $this->options = $options; + + return $options; + } + + /** + * 注册回调方法 + * @access public + * @param string $event 事件名 + * @param callable $callback 回调方法 + * @return void + */ + public static function event($event, $callback) + { + self::$event[$event] = $callback; + } + + /** + * 触发事件 + * @access public + * @param string $event 事件名 + * @return bool + */ + public function trigger($event) + { + $result = false; + + if (isset(self::$event[$event])) { + $result = Container::getInstance()->invoke(self::$event[$event], [$this]); + } + + return $result; + } + +} diff --git a/thinkphp/library/think/db/builder/Mysql.php b/thinkphp/library/think/db/builder/Mysql.php new file mode 100644 index 000000000..a17657d9f --- /dev/null +++ b/thinkphp/library/think/db/builder/Mysql.php @@ -0,0 +1,188 @@ + +// +---------------------------------------------------------------------- + +namespace think\db\builder; + +use think\db\Builder; +use think\db\Query; + +/** + * mysql数据库驱动 + */ +class Mysql extends Builder +{ + // 查询表达式解析 + protected $parser = [ + 'parseCompare' => ['=', '<>', '>', '>=', '<', '<='], + 'parseLike' => ['LIKE', 'NOT LIKE'], + 'parseBetween' => ['NOT BETWEEN', 'BETWEEN'], + 'parseIn' => ['NOT IN', 'IN'], + 'parseExp' => ['EXP'], + 'parseRegexp' => ['REGEXP', 'NOT REGEXP'], + 'parseNull' => ['NOT NULL', 'NULL'], + 'parseBetweenTime' => ['BETWEEN TIME', 'NOT BETWEEN TIME'], + 'parseTime' => ['< TIME', '> TIME', '<= TIME', '>= TIME'], + 'parseExists' => ['NOT EXISTS', 'EXISTS'], + ]; + + protected $insertAllSql = '%INSERT% INTO %TABLE% (%FIELD%) VALUES %DATA% %COMMENT%'; + protected $updateSql = 'UPDATE %TABLE% %JOIN% SET %SET% %WHERE% %ORDER%%LIMIT% %LOCK%%COMMENT%'; + + /** + * 生成insertall SQL + * @access public + * @param Query $query 查询对象 + * @param array $dataSet 数据集 + * @param bool $replace 是否replace + * @return string + */ + public function insertAll(Query $query, $dataSet, $replace = false) + { + $options = $query->getOptions(); + + // 获取合法的字段 + if ('*' == $options['field']) { + $allowFields = $this->connection->getTableFields($options['table']); + } else { + $allowFields = $options['field']; + } + + // 获取绑定信息 + $bind = $this->connection->getFieldsBind($options['table']); + + foreach ($dataSet as $k => $data) { + $data = $this->parseData($query, $data, $allowFields, $bind, '_' . $k); + + $values[] = '( ' . implode(',', array_values($data)) . ' )'; + + if (!isset($insertFields)) { + $insertFields = array_keys($data); + } + } + + $fields = []; + foreach ($insertFields as $field) { + $fields[] = $this->parseKey($query, $field); + } + + return str_replace( + ['%INSERT%', '%TABLE%', '%FIELD%', '%DATA%', '%COMMENT%'], + [ + $replace ? 'REPLACE' : 'INSERT', + $this->parseTable($query, $options['table']), + implode(' , ', $fields), + implode(' , ', $values), + $this->parseComment($query, $options['comment']), + ], + $this->insertAllSql); + } + + /** + * 正则查询 + * @access protected + * @param Query $query 查询对象 + * @param string $key + * @param string $exp + * @param mixed $value + * @param string $field + * @return string + */ + protected function parseRegexp(Query $query, $key, $exp, $value, $field) + { + return $key . ' ' . $exp . ' ' . $value; + } + + /** + * 字段和表名处理 + * @access public + * @param Query $query 查询对象 + * @param string $key 字段名 + * @param bool $strict 严格检测 + * @return string + */ + public function parseKey(Query $query, $key, $strict = false) + { + if (is_int($key)) { + return $key; + } + $key = trim($key); + + if (strpos($key, '->') && false === strpos($key, '(')) { + // JSON字段支持 + list($field, $name) = explode('->', $key, 2); + + return 'json_extract(' . $this->parseKey($query, $field) . ', \'$.' . str_replace('->', '.', $name) . '\')'; + } elseif (strpos($key, '.') && !preg_match('/[,\'\"\(\)`\s]/', $key)) { + list($table, $key) = explode('.', $key, 2); + + $alias = $query->getOptions('alias'); + + if ('__TABLE__' == $table) { + $table = $query->getOptions('table'); + $table = is_array($table) ? array_shift($table) : $table; + } + + if (isset($alias[$table])) { + $table = $alias[$table]; + } + } + + if ($strict || !preg_match('/[,\'\"\*\(\)`.\s]/', $key)) { + $key = '`' . $key . '`'; + } + + if (isset($table)) { + if (strpos($table, '.')) { + $table = str_replace('.', '`.`', $table); + } + + $key = '`' . $table . '`.' . $key; + } + + return $key; + } + + /** + * field分析 + * @access protected + * @param Query $query 查询对象 + * @param mixed $fields 字段名 + * @return string + */ + protected function parseField(Query $query, $fields) + { + $fieldsStr = parent::parseField($query, $fields); + $options = $query->getOptions(); + + if (!empty($options['point'])) { + $array = []; + foreach ($options['point'] as $key => $field) { + $key = !is_numeric($key) ? $key : $field; + $array[] = 'AsText(' . $this->parseKey($query, $key) . ') AS ' . $this->parseKey($query, $field); + } + $fieldsStr .= ',' . implode(',', $array); + } + + return $fieldsStr; + } + + /** + * 随机排序 + * @access protected + * @param Query $query 查询对象 + * @return string + */ + protected function parseRand(Query $query) + { + return 'rand()'; + } + +} diff --git a/thinkphp/library/think/db/builder/Pgsql.php b/thinkphp/library/think/db/builder/Pgsql.php new file mode 100644 index 000000000..32373b64d --- /dev/null +++ b/thinkphp/library/think/db/builder/Pgsql.php @@ -0,0 +1,98 @@ + +// +---------------------------------------------------------------------- + +namespace think\db\builder; + +use think\db\Builder; +use think\db\Query; + +/** + * Pgsql数据库驱动 + */ +class Pgsql extends Builder +{ + + protected $insertSql = 'INSERT INTO %TABLE% (%FIELD%) VALUES (%DATA%) %COMMENT%'; + protected $insertAllSql = 'INSERT INTO %TABLE% (%FIELD%) %DATA% %COMMENT%'; + + /** + * limit分析 + * @access protected + * @param Query $query 查询对象 + * @param mixed $limit + * @return string + */ + public function parseLimit(Query $query, $limit) + { + $limitStr = ''; + + if (!empty($limit)) { + $limit = explode(',', $limit); + if (count($limit) > 1) { + $limitStr .= ' LIMIT ' . $limit[1] . ' OFFSET ' . $limit[0] . ' '; + } else { + $limitStr .= ' LIMIT ' . $limit[0] . ' '; + } + } + + return $limitStr; + } + + /** + * 字段和表名处理 + * @access public + * @param Query $query 查询对象 + * @param string $key 字段名 + * @param bool $strict 严格检测 + * @return string + */ + public function parseKey(Query $query, $key, $strict = false) + { + $key = trim($key); + + if (strpos($key, '->') && false === strpos($key, '(')) { + // JSON字段支持 + list($field, $name) = explode('->', $key); + $key = $field . '->>\'' . $name . '\''; + } elseif (strpos($key, '.')) { + list($table, $key) = explode('.', $key, 2); + + $alias = $query->getOptions('alias'); + + if ('__TABLE__' == $table) { + $table = $query->getOptions('table'); + $table = is_array($table) ? array_shift($table) : $table; + } + + if (isset($alias[$table])) { + $table = $alias[$table]; + } + } + + if (isset($table)) { + $key = $table . '.' . $key; + } + + return $key; + } + + /** + * 随机排序 + * @access protected + * @param Query $query 查询对象 + * @return string + */ + protected function parseRand(Query $query) + { + return 'RANDOM()'; + } + +} diff --git a/thinkphp/library/think/db/builder/Sqlite.php b/thinkphp/library/think/db/builder/Sqlite.php new file mode 100644 index 000000000..9b244617e --- /dev/null +++ b/thinkphp/library/think/db/builder/Sqlite.php @@ -0,0 +1,89 @@ + +// +---------------------------------------------------------------------- + +namespace think\db\builder; + +use think\db\Builder; +use think\db\Query; + +/** + * Sqlite数据库驱动 + */ +class Sqlite extends Builder +{ + + /** + * limit + * @access public + * @param Query $query 查询对象 + * @param mixed $limit + * @return string + */ + public function parseLimit(Query $query, $limit) + { + $limitStr = ''; + + if (!empty($limit)) { + $limit = explode(',', $limit); + if (count($limit) > 1) { + $limitStr .= ' LIMIT ' . $limit[1] . ' OFFSET ' . $limit[0] . ' '; + } else { + $limitStr .= ' LIMIT ' . $limit[0] . ' '; + } + } + + return $limitStr; + } + + /** + * 随机排序 + * @access protected + * @param Query $query 查询对象 + * @return string + */ + protected function parseRand(Query $query) + { + return 'RANDOM()'; + } + + /** + * 字段和表名处理 + * @access public + * @param Query $query 查询对象 + * @param string $key 字段名 + * @param bool $strict 严格检测 + * @return string + */ + public function parseKey(Query $query, $key, $strict = false) + { + $key = trim($key); + if (strpos($key, '.')) { + list($table, $key) = explode('.', $key, 2); + + $alias = $query->getOptions('alias'); + + if ('__TABLE__' == $table) { + $table = $query->getOptions('table'); + $table = is_array($table) ? array_shift($table) : $table; + } + + if (isset($alias[$table])) { + $table = $alias[$table]; + } + } + + if (isset($table)) { + $key = $table . '.' . $key; + } + + return $key; + } +} diff --git a/thinkphp/library/think/db/builder/Sqlsrv.php b/thinkphp/library/think/db/builder/Sqlsrv.php new file mode 100644 index 000000000..4d3dc15bc --- /dev/null +++ b/thinkphp/library/think/db/builder/Sqlsrv.php @@ -0,0 +1,149 @@ + +// +---------------------------------------------------------------------- + +namespace think\db\builder; + +use think\db\Builder; +use think\db\Expression; +use think\db\Query; + +/** + * Sqlsrv数据库驱动 + */ +class Sqlsrv extends Builder +{ + protected $selectSql = 'SELECT T1.* FROM (SELECT thinkphp.*, ROW_NUMBER() OVER (%ORDER%) AS ROW_NUMBER FROM (SELECT %DISTINCT% %FIELD% FROM %TABLE%%JOIN%%WHERE%%GROUP%%HAVING%) AS thinkphp) AS T1 %LIMIT%%COMMENT%'; + protected $selectInsertSql = 'SELECT %DISTINCT% %FIELD% FROM %TABLE%%JOIN%%WHERE%%GROUP%%HAVING%'; + protected $updateSql = 'UPDATE %TABLE% SET %SET% FROM %TABLE% %JOIN% %WHERE% %LIMIT% %LOCK%%COMMENT%'; + protected $deleteSql = 'DELETE FROM %TABLE% %USING% FROM %TABLE% %JOIN% %WHERE% %LIMIT% %LOCK%%COMMENT%'; + protected $insertSql = 'INSERT INTO %TABLE% (%FIELD%) VALUES (%DATA%) %COMMENT%'; + protected $insertAllSql = 'INSERT INTO %TABLE% (%FIELD%) %DATA% %COMMENT%'; + + /** + * order分析 + * @access protected + * @param Query $query 查询对象 + * @param mixed $order + * @return string + */ + protected function parseOrder(Query $query, $order) + { + if (empty($order)) { + return ' ORDER BY rand()'; + } + + $array = []; + + foreach ($order as $key => $val) { + if ($val instanceof Expression) { + $array[] = $val->getValue(); + } elseif ('[rand]' == $val) { + $array[] = $this->parseRand($query); + } else { + if (is_numeric($key)) { + list($key, $sort) = explode(' ', strpos($val, ' ') ? $val : $val . ' '); + } else { + $sort = $val; + } + + $sort = in_array(strtolower($sort), ['asc', 'desc'], true) ? ' ' . $sort : ''; + $array[] = $this->parseKey($query, $key, true) . $sort; + } + } + + return ' ORDER BY ' . implode(',', $array); + } + + /** + * 随机排序 + * @access protected + * @param Query $query 查询对象 + * @return string + */ + protected function parseRand(Query $query) + { + return 'rand()'; + } + + /** + * 字段和表名处理 + * @access public + * @param Query $query 查询对象 + * @param string $key 字段名 + * @param bool $strict 严格检测 + * @return string + */ + public function parseKey(Query $query, $key, $strict = false) + { + if (is_int($key)) { + return $key; + } + + $key = trim($key); + + if (strpos($key, '.') && !preg_match('/[,\'\"\(\)\[\s]/', $key)) { + list($table, $key) = explode('.', $key, 2); + + $alias = $query->getOptions('alias'); + + if ('__TABLE__' == $table) { + $table = $query->getOptions('table'); + $table = is_array($table) ? array_shift($table) : $table; + } + + if (isset($alias[$table])) { + $table = $alias[$table]; + } + } + + if ($strict || !preg_match('/[,\'\"\*\(\)\[.\s]/', $key)) { + $key = '[' . $key . ']'; + } + + if (isset($table)) { + $key = '[' . $table . '].' . $key; + } + + return $key; + } + + /** + * limit + * @access protected + * @param Query $query 查询对象 + * @param mixed $limit + * @return string + */ + protected function parseLimit(Query $query, $limit) + { + if (empty($limit)) { + return ''; + } + + $limit = explode(',', $limit); + + if (count($limit) > 1) { + $limitStr = '(T1.ROW_NUMBER BETWEEN ' . $limit[0] . ' + 1 AND ' . $limit[0] . ' + ' . $limit[1] . ')'; + } else { + $limitStr = '(T1.ROW_NUMBER BETWEEN 1 AND ' . $limit[0] . ")"; + } + + return 'WHERE ' . $limitStr; + } + + public function selectInsert(Query $query, $fields, $table) + { + $this->selectSql = $this->selectInsertSql; + + return parent::selectInsert($query, $fields, $table); + } + +} diff --git a/thinkphp/library/think/db/connector/Mysql.php b/thinkphp/library/think/db/connector/Mysql.php new file mode 100644 index 000000000..331d550fe --- /dev/null +++ b/thinkphp/library/think/db/connector/Mysql.php @@ -0,0 +1,157 @@ + +// +---------------------------------------------------------------------- + +namespace think\db\connector; + +use PDO; +use think\db\Connection; +use think\db\Query; + +/** + * mysql数据库驱动 + */ +class Mysql extends Connection +{ + + protected $builder = '\\think\\db\\builder\\Mysql'; + + /** + * 初始化 + * @access protected + * @return void + */ + protected function initialize() + { + // Point类型支持 + Query::extend('point', function ($query, $field, $value = null, $fun = 'GeomFromText', $type = 'POINT') { + if (!is_null($value)) { + $query->data($field, ['point', $value, $fun, $type]); + } else { + if (is_string($field)) { + $field = explode(',', $field); + } + $query->setOption('point', $field); + } + + return $query; + }); + } + + /** + * 解析pdo连接的dsn信息 + * @access protected + * @param array $config 连接信息 + * @return string + */ + protected function parseDsn($config) + { + if (!empty($config['socket'])) { + $dsn = 'mysql:unix_socket=' . $config['socket']; + } elseif (!empty($config['hostport'])) { + $dsn = 'mysql:host=' . $config['hostname'] . ';port=' . $config['hostport']; + } else { + $dsn = 'mysql:host=' . $config['hostname']; + } + $dsn .= ';dbname=' . $config['database']; + + if (!empty($config['charset'])) { + $dsn .= ';charset=' . $config['charset']; + } + + return $dsn; + } + + /** + * 取得数据表的字段信息 + * @access public + * @param string $tableName + * @return array + */ + public function getFields($tableName) + { + list($tableName) = explode(' ', $tableName); + + if (false === strpos($tableName, '`')) { + if (strpos($tableName, '.')) { + $tableName = str_replace('.', '`.`', $tableName); + } + $tableName = '`' . $tableName . '`'; + } + + $sql = 'SHOW COLUMNS FROM ' . $tableName; + $pdo = $this->query($sql, [], false, true); + $result = $pdo->fetchAll(PDO::FETCH_ASSOC); + $info = []; + + if ($result) { + foreach ($result as $key => $val) { + $val = array_change_key_case($val); + $info[$val['field']] = [ + 'name' => $val['field'], + 'type' => $val['type'], + 'notnull' => (bool) ('' === $val['null']), // not null is empty, null is yes + 'default' => $val['default'], + 'primary' => (strtolower($val['key']) == 'pri'), + 'autoinc' => (strtolower($val['extra']) == 'auto_increment'), + ]; + } + } + + return $this->fieldCase($info); + } + + /** + * 取得数据库的表信息 + * @access public + * @param string $dbName + * @return array + */ + public function getTables($dbName = '') + { + $sql = !empty($dbName) ? 'SHOW TABLES FROM ' . $dbName : 'SHOW TABLES '; + $pdo = $this->query($sql, [], false, true); + $result = $pdo->fetchAll(PDO::FETCH_ASSOC); + $info = []; + + foreach ($result as $key => $val) { + $info[$key] = current($val); + } + + return $info; + } + + /** + * SQL性能分析 + * @access protected + * @param string $sql + * @return array + */ + protected function getExplain($sql) + { + $pdo = $this->linkID->query("EXPLAIN " . $sql); + $result = $pdo->fetch(PDO::FETCH_ASSOC); + $result = array_change_key_case($result); + + if (isset($result['extra'])) { + if (strpos($result['extra'], 'filesort') || strpos($result['extra'], 'temporary')) { + $this->log('SQL:' . $this->queryStr . '[' . $result['extra'] . ']', 'warn'); + } + } + + return $result; + } + + protected function supportSavepoint() + { + return true; + } + +} diff --git a/thinkphp/library/think/db/connector/Pgsql.php b/thinkphp/library/think/db/connector/Pgsql.php new file mode 100644 index 000000000..ee9fca017 --- /dev/null +++ b/thinkphp/library/think/db/connector/Pgsql.php @@ -0,0 +1,116 @@ + +// +---------------------------------------------------------------------- + +namespace think\db\connector; + +use PDO; +use think\db\Connection; + +/** + * Pgsql数据库驱动 + */ +class Pgsql extends Connection +{ + protected $builder = '\\think\\db\\builder\\Pgsql'; + + // PDO连接参数 + protected $params = [ + PDO::ATTR_CASE => PDO::CASE_NATURAL, + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL, + PDO::ATTR_STRINGIFY_FETCHES => false, + ]; + + /** + * 解析pdo连接的dsn信息 + * @access protected + * @param array $config 连接信息 + * @return string + */ + protected function parseDsn($config) + { + $dsn = 'pgsql:dbname=' . $config['database'] . ';host=' . $config['hostname']; + + if (!empty($config['hostport'])) { + $dsn .= ';port=' . $config['hostport']; + } + + return $dsn; + } + + /** + * 取得数据表的字段信息 + * @access public + * @param string $tableName + * @return array + */ + public function getFields($tableName) + { + list($tableName) = explode(' ', $tableName); + $sql = 'select fields_name as "field",fields_type as "type",fields_not_null as "null",fields_key_name as "key",fields_default as "default",fields_default as "extra" from table_msg(\'' . $tableName . '\');'; + + $pdo = $this->query($sql, [], false, true); + $result = $pdo->fetchAll(PDO::FETCH_ASSOC); + $info = []; + + if ($result) { + foreach ($result as $key => $val) { + $val = array_change_key_case($val); + $info[$val['field']] = [ + 'name' => $val['field'], + 'type' => $val['type'], + 'notnull' => (bool) ('' !== $val['null']), + 'default' => $val['default'], + 'primary' => !empty($val['key']), + 'autoinc' => (0 === strpos($val['extra'], 'nextval(')), + ]; + } + } + + return $this->fieldCase($info); + } + + /** + * 取得数据库的表信息 + * @access public + * @param string $dbName + * @return array + */ + public function getTables($dbName = '') + { + $sql = "select tablename as Tables_in_test from pg_tables where schemaname ='public'"; + $pdo = $this->query($sql, [], false, true); + $result = $pdo->fetchAll(PDO::FETCH_ASSOC); + $info = []; + + foreach ($result as $key => $val) { + $info[$key] = current($val); + } + + return $info; + } + + /** + * SQL性能分析 + * @access protected + * @param string $sql + * @return array + */ + protected function getExplain($sql) + { + return []; + } + + protected function supportSavepoint() + { + return true; + } +} diff --git a/thinkphp/library/think/db/connector/Sqlite.php b/thinkphp/library/think/db/connector/Sqlite.php new file mode 100644 index 000000000..5b9b3fa64 --- /dev/null +++ b/thinkphp/library/think/db/connector/Sqlite.php @@ -0,0 +1,108 @@ + +// +---------------------------------------------------------------------- + +namespace think\db\connector; + +use PDO; +use think\db\Connection; + +/** + * Sqlite数据库驱动 + */ +class Sqlite extends Connection +{ + + protected $builder = '\\think\\db\\builder\\Sqlite'; + + /** + * 解析pdo连接的dsn信息 + * @access protected + * @param array $config 连接信息 + * @return string + */ + protected function parseDsn($config) + { + $dsn = 'sqlite:' . $config['database']; + + return $dsn; + } + + /** + * 取得数据表的字段信息 + * @access public + * @param string $tableName + * @return array + */ + public function getFields($tableName) + { + list($tableName) = explode(' ', $tableName); + $sql = 'PRAGMA table_info( ' . $tableName . ' )'; + + $pdo = $this->query($sql, [], false, true); + $result = $pdo->fetchAll(PDO::FETCH_ASSOC); + $info = []; + + if ($result) { + foreach ($result as $key => $val) { + $val = array_change_key_case($val); + $info[$val['name']] = [ + 'name' => $val['name'], + 'type' => $val['type'], + 'notnull' => 1 === $val['notnull'], + 'default' => $val['dflt_value'], + 'primary' => '1' == $val['pk'], + 'autoinc' => '1' == $val['pk'], + ]; + } + } + + return $this->fieldCase($info); + } + + /** + * 取得数据库的表信息 + * @access public + * @param string $dbName + * @return array + */ + public function getTables($dbName = '') + { + $sql = "SELECT name FROM sqlite_master WHERE type='table' " + . "UNION ALL SELECT name FROM sqlite_temp_master " + . "WHERE type='table' ORDER BY name"; + + $pdo = $this->query($sql, [], false, true); + $result = $pdo->fetchAll(PDO::FETCH_ASSOC); + $info = []; + + foreach ($result as $key => $val) { + $info[$key] = current($val); + } + + return $info; + } + + /** + * SQL性能分析 + * @access protected + * @param string $sql + * @return array + */ + protected function getExplain($sql) + { + return []; + } + + protected function supportSavepoint() + { + return true; + } +} diff --git a/thinkphp/library/think/db/connector/Sqlsrv.php b/thinkphp/library/think/db/connector/Sqlsrv.php new file mode 100644 index 000000000..4b5417097 --- /dev/null +++ b/thinkphp/library/think/db/connector/Sqlsrv.php @@ -0,0 +1,138 @@ + +// +---------------------------------------------------------------------- + +namespace think\db\connector; + +use PDO; +use think\db\Connection; + +/** + * Sqlsrv数据库驱动 + */ +class Sqlsrv extends Connection +{ + // PDO连接参数 + protected $params = [ + PDO::ATTR_CASE => PDO::CASE_NATURAL, + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL, + PDO::ATTR_STRINGIFY_FETCHES => false, + ]; + + protected $builder = '\\think\\db\\builder\\Sqlsrv'; + + /** + * 解析pdo连接的dsn信息 + * @access protected + * @param array $config 连接信息 + * @return string + */ + protected function parseDsn($config) + { + $dsn = 'sqlsrv:Database=' . $config['database'] . ';Server=' . $config['hostname']; + + if (!empty($config['hostport'])) { + $dsn .= ',' . $config['hostport']; + } + + return $dsn; + } + + /** + * 取得数据表的字段信息 + * @access public + * @param string $tableName + * @return array + */ + public function getFields($tableName) + { + list($tableName) = explode(' ', $tableName); + + $sql = "SELECT column_name, data_type, column_default, is_nullable + FROM information_schema.tables AS t + JOIN information_schema.columns AS c + ON t.table_catalog = c.table_catalog + AND t.table_schema = c.table_schema + AND t.table_name = c.table_name + WHERE t.table_name = '$tableName'"; + + $pdo = $this->query($sql, [], false, true); + $result = $pdo->fetchAll(PDO::FETCH_ASSOC); + $info = []; + + if ($result) { + foreach ($result as $key => $val) { + $val = array_change_key_case($val); + $info[$val['column_name']] = [ + 'name' => $val['column_name'], + 'type' => $val['data_type'], + 'notnull' => (bool) ('' === $val['is_nullable']), // not null is empty, null is yes + 'default' => $val['column_default'], + 'primary' => false, + 'autoinc' => false, + ]; + } + } + + $sql = "SELECT column_name FROM information_schema.key_column_usage WHERE table_name='$tableName'"; + + // 调试开始 + $this->debug(true); + + $pdo = $this->linkID->query($sql); + + // 调试结束 + $this->debug(false, $sql); + + $result = $pdo->fetch(PDO::FETCH_ASSOC); + + if ($result) { + $info[$result['column_name']]['primary'] = true; + } + + return $this->fieldCase($info); + } + + /** + * 取得数据表的字段信息 + * @access public + * @param string $dbName + * @return array + */ + public function getTables($dbName = '') + { + $sql = "SELECT TABLE_NAME + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_TYPE = 'BASE TABLE' + "; + + $pdo = $this->query($sql, [], false, true); + $result = $pdo->fetchAll(PDO::FETCH_ASSOC); + $info = []; + + foreach ($result as $key => $val) { + $info[$key] = current($val); + } + + return $info; + } + + /** + * SQL性能分析 + * @access protected + * @param string $sql + * @return array + */ + protected function getExplain($sql) + { + return []; + } +} diff --git a/thinkphp/library/think/db/connector/pgsql.sql b/thinkphp/library/think/db/connector/pgsql.sql new file mode 100644 index 000000000..e1a09a30c --- /dev/null +++ b/thinkphp/library/think/db/connector/pgsql.sql @@ -0,0 +1,117 @@ +CREATE OR REPLACE FUNCTION pgsql_type(a_type varchar) RETURNS varchar AS +$BODY$ +DECLARE + v_type varchar; +BEGIN + IF a_type='int8' THEN + v_type:='bigint'; + ELSIF a_type='int4' THEN + v_type:='integer'; + ELSIF a_type='int2' THEN + v_type:='smallint'; + ELSIF a_type='bpchar' THEN + v_type:='char'; + ELSE + v_type:=a_type; + END IF; + RETURN v_type; +END; +$BODY$ +LANGUAGE PLPGSQL; + +CREATE TYPE "public"."tablestruct" AS ( + "fields_key_name" varchar(100), + "fields_name" VARCHAR(200), + "fields_type" VARCHAR(20), + "fields_length" BIGINT, + "fields_not_null" VARCHAR(10), + "fields_default" VARCHAR(500), + "fields_comment" VARCHAR(1000) +); + +CREATE OR REPLACE FUNCTION "public"."table_msg" (a_schema_name varchar, a_table_name varchar) RETURNS SETOF "public"."tablestruct" AS +$body$ +DECLARE + v_ret tablestruct; + v_oid oid; + v_sql varchar; + v_rec RECORD; + v_key varchar; +BEGIN + SELECT + pg_class.oid INTO v_oid + FROM + pg_class + INNER JOIN pg_namespace ON (pg_class.relnamespace = pg_namespace.oid AND lower(pg_namespace.nspname) = a_schema_name) + WHERE + pg_class.relname=a_table_name; + IF NOT FOUND THEN + RETURN; + END IF; + + v_sql=' + SELECT + pg_attribute.attname AS fields_name, + pg_attribute.attnum AS fields_index, + pgsql_type(pg_type.typname::varchar) AS fields_type, + pg_attribute.atttypmod-4 as fields_length, + CASE WHEN pg_attribute.attnotnull THEN ''not null'' + ELSE '''' + END AS fields_not_null, + pg_attrdef.adsrc AS fields_default, + pg_description.description AS fields_comment + FROM + pg_attribute + INNER JOIN pg_class ON pg_attribute.attrelid = pg_class.oid + INNER JOIN pg_type ON pg_attribute.atttypid = pg_type.oid + LEFT OUTER JOIN pg_attrdef ON pg_attrdef.adrelid = pg_class.oid AND pg_attrdef.adnum = pg_attribute.attnum + LEFT OUTER JOIN pg_description ON pg_description.objoid = pg_class.oid AND pg_description.objsubid = pg_attribute.attnum + WHERE + pg_attribute.attnum > 0 + AND attisdropped <> ''t'' + AND pg_class.oid = ' || v_oid || ' + ORDER BY pg_attribute.attnum' ; + + FOR v_rec IN EXECUTE v_sql LOOP + v_ret.fields_name=v_rec.fields_name; + v_ret.fields_type=v_rec.fields_type; + IF v_rec.fields_length > 0 THEN + v_ret.fields_length:=v_rec.fields_length; + ELSE + v_ret.fields_length:=NULL; + END IF; + v_ret.fields_not_null=v_rec.fields_not_null; + v_ret.fields_default=v_rec.fields_default; + v_ret.fields_comment=v_rec.fields_comment; + SELECT constraint_name INTO v_key FROM information_schema.key_column_usage WHERE table_schema=a_schema_name AND table_name=a_table_name AND column_name=v_rec.fields_name; + IF FOUND THEN + v_ret.fields_key_name=v_key; + ELSE + v_ret.fields_key_name=''; + END IF; + RETURN NEXT v_ret; + END LOOP; + RETURN ; +END; +$body$ +LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; + +COMMENT ON FUNCTION "public"."table_msg"(a_schema_name varchar, a_table_name varchar) +IS '获得表信息'; + +---重载一个函数 +CREATE OR REPLACE FUNCTION "public"."table_msg" (a_table_name varchar) RETURNS SETOF "public"."tablestruct" AS +$body$ +DECLARE + v_ret tablestruct; +BEGIN + FOR v_ret IN SELECT * FROM table_msg('public',a_table_name) LOOP + RETURN NEXT v_ret; + END LOOP; + RETURN; +END; +$body$ +LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; + +COMMENT ON FUNCTION "public"."table_msg"(a_table_name varchar) +IS '获得表信息'; \ No newline at end of file diff --git a/thinkphp/library/think/db/exception/BindParamException.php b/thinkphp/library/think/db/exception/BindParamException.php new file mode 100644 index 000000000..dce0c7bfc --- /dev/null +++ b/thinkphp/library/think/db/exception/BindParamException.php @@ -0,0 +1,36 @@ + +// +---------------------------------------------------------------------- + +namespace think\db\exception; + +use think\exception\DbException; + +/** + * PDO参数绑定异常 + */ +class BindParamException extends DbException +{ + + /** + * BindParamException constructor. + * @access public + * @param string $message + * @param array $config + * @param string $sql + * @param array $bind + * @param int $code + */ + public function __construct($message, $config, $sql, $bind, $code = 10502) + { + $this->setData('Bind Param', $bind); + parent::__construct($message, $config, $sql, $code); + } +} diff --git a/thinkphp/library/think/db/exception/DataNotFoundException.php b/thinkphp/library/think/db/exception/DataNotFoundException.php new file mode 100644 index 000000000..883e333e3 --- /dev/null +++ b/thinkphp/library/think/db/exception/DataNotFoundException.php @@ -0,0 +1,44 @@ + +// +---------------------------------------------------------------------- + +namespace think\db\exception; + +use think\exception\DbException; + +class DataNotFoundException extends DbException +{ + protected $table; + + /** + * DbException constructor. + * @access public + * @param string $message + * @param string $table + * @param array $config + */ + public function __construct($message, $table = '', array $config = []) + { + $this->message = $message; + $this->table = $table; + + $this->setData('Database Config', $config); + } + + /** + * 获取数据表名 + * @access public + * @return string + */ + public function getTable() + { + return $this->table; + } +} diff --git a/thinkphp/library/think/db/exception/ModelNotFoundException.php b/thinkphp/library/think/db/exception/ModelNotFoundException.php new file mode 100644 index 000000000..ae52baf3b --- /dev/null +++ b/thinkphp/library/think/db/exception/ModelNotFoundException.php @@ -0,0 +1,45 @@ + +// +---------------------------------------------------------------------- + +namespace think\db\exception; + +use think\exception\DbException; + +class ModelNotFoundException extends DbException +{ + protected $model; + + /** + * 构造方法 + * @access public + * @param string $message + * @param string $model + * @param array $config + */ + public function __construct($message, $model = '', array $config = []) + { + $this->message = $message; + $this->model = $model; + + $this->setData('Database Config', $config); + } + + /** + * 获取模型类名 + * @access public + * @return string + */ + public function getModel() + { + return $this->model; + } + +} diff --git a/thinkphp/library/think/debug/Console.php b/thinkphp/library/think/debug/Console.php new file mode 100644 index 000000000..dd063c1c3 --- /dev/null +++ b/thinkphp/library/think/debug/Console.php @@ -0,0 +1,156 @@ + +// +---------------------------------------------------------------------- + +namespace think\debug; + +use think\Container; +use think\Db; +use think\Response; + +/** + * 浏览器调试输出 + */ +class Console +{ + protected $config = [ + 'tabs' => ['base' => '基本', 'file' => '文件', 'info' => '流程', 'notice|error' => '错误', 'sql' => 'SQL', 'debug|log' => '调试'], + ]; + + // 实例化并传入参数 + public function __construct($config = []) + { + if (is_array($config)) { + $this->config = array_merge($this->config, $config); + } + } + + /** + * 调试输出接口 + * @access public + * @param Response $response Response对象 + * @param array $log 日志信息 + * @return bool + */ + public function output(Response $response, array $log = []) + { + $request = Container::get('request'); + $contentType = $response->getHeader('Content-Type'); + $accept = $request->header('accept'); + if (strpos($accept, 'application/json') === 0 || $request->isAjax()) { + return false; + } elseif (!empty($contentType) && strpos($contentType, 'html') === false) { + return false; + } + // 获取基本信息 + $runtime = number_format(microtime(true) - Container::get('app')->getBeginTime(), 10); + $reqs = $runtime > 0 ? number_format(1 / $runtime, 2) : '∞'; + $mem = number_format((memory_get_usage() - Container::get('app')->getBeginMem()) / 1024, 2); + + if (isset($_SERVER['HTTP_HOST'])) { + $uri = $_SERVER['SERVER_PROTOCOL'] . ' ' . $_SERVER['REQUEST_METHOD'] . ' : ' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; + } else { + $uri = 'cmd:' . implode(' ', $_SERVER['argv']); + } + + // 页面Trace信息 + $base = [ + '请求信息' => date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']) . ' ' . $uri, + '运行时间' => number_format($runtime, 6) . 's [ 吞吐率:' . $reqs . 'req/s ] 内存消耗:' . $mem . 'kb 文件加载:' . count(get_included_files()), + '查询信息' => Db::$queryTimes . ' queries ' . Db::$executeTimes . ' writes ', + '缓存信息' => Container::get('cache')->getReadTimes() . ' reads,' . Container::get('cache')->getWriteTimes() . ' writes', + ]; + + if (session_id()) { + $base['会话信息'] = 'SESSION_ID=' . session_id(); + } + + $info = Container::get('debug')->getFile(true); + + // 页面Trace信息 + $trace = []; + foreach ($this->config['tabs'] as $name => $title) { + $name = strtolower($name); + switch ($name) { + case 'base': // 基本信息 + $trace[$title] = $base; + break; + case 'file': // 文件信息 + $trace[$title] = $info; + break; + default: // 调试信息 + if (strpos($name, '|')) { + // 多组信息 + $names = explode('|', $name); + $result = []; + foreach ($names as $name) { + $result = array_merge($result, isset($log[$name]) ? $log[$name] : []); + } + $trace[$title] = $result; + } else { + $trace[$title] = isset($log[$name]) ? $log[$name] : ''; + } + } + } + + //输出到控制台 + $lines = ''; + foreach ($trace as $type => $msg) { + $lines .= $this->console($type, $msg); + } + $js = << +{$lines} + +JS; + return $js; + } + + protected function console($type, $msg) + { + $type = strtolower($type); + $trace_tabs = array_values($this->config['tabs']); + $line[] = ($type == $trace_tabs[0] || '调试' == $type || '错误' == $type) + ? "console.group('{$type}');" + : "console.groupCollapsed('{$type}');"; + + foreach ((array) $msg as $key => $m) { + switch ($type) { + case '调试': + $var_type = gettype($m); + if (in_array($var_type, ['array', 'string'])) { + $line[] = "console.log(" . json_encode($m) . ");"; + } else { + $line[] = "console.log(" . json_encode(var_export($m, 1)) . ");"; + } + break; + case '错误': + $msg = str_replace("\n", '\n', addslashes(is_scalar($m) ? $m : json_encode($m))); + $style = 'color:#F4006B;font-size:14px;'; + $line[] = "console.error(\"%c{$msg}\", \"{$style}\");"; + break; + case 'sql': + $msg = str_replace("\n", '\n', addslashes($m)); + $style = "color:#009bb4;"; + $line[] = "console.log(\"%c{$msg}\", \"{$style}\");"; + break; + default: + $m = is_string($key) ? $key . ' ' . $m : $key + 1 . ' ' . $m; + $msg = json_encode($m); + $line[] = "console.log({$msg});"; + break; + } + } + $line[] = "console.groupEnd();"; + return implode(PHP_EOL, $line); + } + +} diff --git a/thinkphp/library/think/debug/Html.php b/thinkphp/library/think/debug/Html.php new file mode 100644 index 000000000..85f354af0 --- /dev/null +++ b/thinkphp/library/think/debug/Html.php @@ -0,0 +1,106 @@ + +// +---------------------------------------------------------------------- + +namespace think\debug; + +use think\Container; +use think\Db; +use think\Response; + +/** + * 页面Trace调试 + */ +class Html +{ + protected $config = [ + 'file' => '', + 'tabs' => ['base' => '基本', 'file' => '文件', 'info' => '流程', 'notice|error' => '错误', 'sql' => 'SQL', 'debug|log' => '调试'], + ]; + + // 实例化并传入参数 + public function __construct(array $config = []) + { + $this->config = array_merge($this->config, $config); + } + + /** + * 调试输出接口 + * @access public + * @param Response $response Response对象 + * @param array $log 日志信息 + * @return bool + */ + public function output(Response $response, array $log = []) + { + $request = Container::get('request'); + $contentType = $response->getHeader('Content-Type'); + $accept = $request->header('accept'); + if (strpos($accept, 'application/json') === 0 || $request->isAjax()) { + return false; + } elseif (!empty($contentType) && strpos($contentType, 'html') === false) { + return false; + } + // 获取基本信息 + $runtime = number_format(microtime(true) - Container::get('app')->getBeginTime(), 10, '.', ''); + $reqs = $runtime > 0 ? number_format(1 / $runtime, 2) : '∞'; + $mem = number_format((memory_get_usage() - Container::get('app')->getBeginMem()) / 1024, 2); + + // 页面Trace信息 + if (isset($_SERVER['HTTP_HOST'])) { + $uri = $_SERVER['SERVER_PROTOCOL'] . ' ' . $_SERVER['REQUEST_METHOD'] . ' : ' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; + } else { + $uri = 'cmd:' . implode(' ', $_SERVER['argv']); + } + $base = [ + '请求信息' => date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']) . ' ' . $uri, + '运行时间' => number_format($runtime, 6) . 's [ 吞吐率:' . $reqs . 'req/s ] 内存消耗:' . $mem . 'kb 文件加载:' . count(get_included_files()), + '查询信息' => Db::$queryTimes . ' queries ' . Db::$executeTimes . ' writes ', + '缓存信息' => Container::get('cache')->getReadTimes() . ' reads,' . Container::get('cache')->getWriteTimes() . ' writes', + ]; + + if (session_id()) { + $base['会话信息'] = 'SESSION_ID=' . session_id(); + } + + $info = Container::get('debug')->getFile(true); + + // 页面Trace信息 + $trace = []; + foreach ($this->config['tabs'] as $name => $title) { + $name = strtolower($name); + switch ($name) { + case 'base': // 基本信息 + $trace[$title] = $base; + break; + case 'file': // 文件信息 + $trace[$title] = $info; + break; + default: // 调试信息 + if (strpos($name, '|')) { + // 多组信息 + $names = explode('|', $name); + $result = []; + foreach ($names as $name) { + $result = array_merge($result, isset($log[$name]) ? $log[$name] : []); + } + $trace[$title] = $result; + } else { + $trace[$title] = isset($log[$name]) ? $log[$name] : ''; + } + } + } + // 调用Trace页面模板 + ob_start(); + include $this->config['file']; + return ob_get_clean(); + } + +} diff --git a/thinkphp/library/think/exception/ClassNotFoundException.php b/thinkphp/library/think/exception/ClassNotFoundException.php new file mode 100644 index 000000000..eb22e7301 --- /dev/null +++ b/thinkphp/library/think/exception/ClassNotFoundException.php @@ -0,0 +1,32 @@ + +// +---------------------------------------------------------------------- + +namespace think\exception; + +class ClassNotFoundException extends \RuntimeException +{ + protected $class; + public function __construct($message, $class = '') + { + $this->message = $message; + $this->class = $class; + } + + /** + * 获取类名 + * @access public + * @return string + */ + public function getClass() + { + return $this->class; + } +} diff --git a/thinkphp/library/think/exception/DbException.php b/thinkphp/library/think/exception/DbException.php new file mode 100644 index 000000000..0f504257c --- /dev/null +++ b/thinkphp/library/think/exception/DbException.php @@ -0,0 +1,44 @@ + +// +---------------------------------------------------------------------- + +namespace think\exception; + +use think\Exception; + +/** + * Database相关异常处理类 + */ +class DbException extends Exception +{ + /** + * DbException constructor. + * @access public + * @param string $message + * @param array $config + * @param string $sql + * @param int $code + */ + public function __construct($message, array $config, $sql, $code = 10500) + { + $this->message = $message; + $this->code = $code; + + $this->setData('Database Status', [ + 'Error Code' => $code, + 'Error Message' => $message, + 'Error SQL' => $sql, + ]); + + unset($config['username'], $config['password']); + $this->setData('Database Config', $config); + } + +} diff --git a/thinkphp/library/think/exception/ErrorException.php b/thinkphp/library/think/exception/ErrorException.php new file mode 100644 index 000000000..3143b8f70 --- /dev/null +++ b/thinkphp/library/think/exception/ErrorException.php @@ -0,0 +1,56 @@ + +// +---------------------------------------------------------------------- + +namespace think\exception; + +use think\Exception; + +/** + * ThinkPHP错误异常 + * 主要用于封装 set_error_handler 和 register_shutdown_function 得到的错误 + * 除开从 think\Exception 继承的功能 + * 其他和PHP系统\ErrorException功能基本一样 + */ +class ErrorException extends Exception +{ + /** + * 用于保存错误级别 + * @var integer + */ + protected $severity; + + /** + * 错误异常构造函数 + * @access public + * @param integer $severity 错误级别 + * @param string $message 错误详细信息 + * @param string $file 出错文件路径 + * @param integer $line 出错行号 + */ + public function __construct($severity, $message, $file, $line) + { + $this->severity = $severity; + $this->message = $message; + $this->file = $file; + $this->line = $line; + $this->code = 0; + } + + /** + * 获取错误级别 + * @access public + * @return integer 错误级别 + */ + final public function getSeverity() + { + return $this->severity; + } +} diff --git a/thinkphp/library/think/exception/Handle.php b/thinkphp/library/think/exception/Handle.php new file mode 100644 index 000000000..02c85ec13 --- /dev/null +++ b/thinkphp/library/think/exception/Handle.php @@ -0,0 +1,306 @@ + +// +---------------------------------------------------------------------- + +namespace think\exception; + +use Exception; +use think\console\Output; +use think\Container; +use think\Response; + +class Handle +{ + protected $render; + protected $ignoreReport = [ + '\\think\\exception\\HttpException', + ]; + + public function setRender($render) + { + $this->render = $render; + } + + /** + * Report or log an exception. + * + * @access public + * @param \Exception $exception + * @return void + */ + public function report(Exception $exception) + { + if (!$this->isIgnoreReport($exception)) { + // 收集异常数据 + if (Container::get('app')->isDebug()) { + $data = [ + 'file' => $exception->getFile(), + 'line' => $exception->getLine(), + 'message' => $this->getMessage($exception), + 'code' => $this->getCode($exception), + ]; + $log = "[{$data['code']}]{$data['message']}[{$data['file']}:{$data['line']}]"; + } else { + $data = [ + 'code' => $this->getCode($exception), + 'message' => $this->getMessage($exception), + ]; + $log = "[{$data['code']}]{$data['message']}"; + } + + if (Container::get('app')->config('log.record_trace')) { + $log .= "\r\n" . $exception->getTraceAsString(); + } + + Container::get('log')->record($log, 'error'); + } + } + + protected function isIgnoreReport(Exception $exception) + { + foreach ($this->ignoreReport as $class) { + if ($exception instanceof $class) { + return true; + } + } + + return false; + } + + /** + * Render an exception into an HTTP response. + * + * @access public + * @param \Exception $e + * @return Response + */ + public function render(Exception $e) + { + if ($this->render && $this->render instanceof \Closure) { + $result = call_user_func_array($this->render, [$e]); + + if ($result) { + return $result; + } + } + + if ($e instanceof HttpException) { + return $this->renderHttpException($e); + } else { + return $this->convertExceptionToResponse($e); + } + } + + /** + * @access public + * @param Output $output + * @param Exception $e + */ + public function renderForConsole(Output $output, Exception $e) + { + if (Container::get('app')->isDebug()) { + $output->setVerbosity(Output::VERBOSITY_DEBUG); + } + + $output->renderException($e); + } + + /** + * @access protected + * @param HttpException $e + * @return Response + */ + protected function renderHttpException(HttpException $e) + { + $status = $e->getStatusCode(); + $template = Container::get('app')->config('http_exception_template'); + + if (!Container::get('app')->isDebug() && !empty($template[$status])) { + return Response::create($template[$status], 'view', $status)->assign(['e' => $e]); + } else { + return $this->convertExceptionToResponse($e); + } + } + + /** + * @access protected + * @param Exception $exception + * @return Response + */ + protected function convertExceptionToResponse(Exception $exception) + { + // 收集异常数据 + if (Container::get('app')->isDebug()) { + // 调试模式,获取详细的错误信息 + $data = [ + 'name' => get_class($exception), + 'file' => $exception->getFile(), + 'line' => $exception->getLine(), + 'message' => $this->getMessage($exception), + 'trace' => $exception->getTrace(), + 'code' => $this->getCode($exception), + 'source' => $this->getSourceCode($exception), + 'datas' => $this->getExtendData($exception), + 'tables' => [ + 'GET Data' => $_GET, + 'POST Data' => $_POST, + 'Files' => $_FILES, + 'Cookies' => $_COOKIE, + 'Session' => isset($_SESSION) ? $_SESSION : [], + 'Server/Request Data' => $_SERVER, + 'Environment Variables' => $_ENV, + 'ThinkPHP Constants' => $this->getConst(), + ], + ]; + } else { + // 部署模式仅显示 Code 和 Message + $data = [ + 'code' => $this->getCode($exception), + 'message' => $this->getMessage($exception), + ]; + + if (!Container::get('app')->config('show_error_msg')) { + // 不显示详细错误信息 + $data['message'] = Container::get('app')->config('error_message'); + } + } + + //保留一层 + while (ob_get_level() > 1) { + ob_end_clean(); + } + + $data['echo'] = ob_get_clean(); + + ob_start(); + extract($data); + include Container::get('app')->config('exception_tmpl'); + + // 获取并清空缓存 + $content = ob_get_clean(); + $response = Response::create($content, 'html'); + + if ($exception instanceof HttpException) { + $statusCode = $exception->getStatusCode(); + $response->header($exception->getHeaders()); + } + + if (!isset($statusCode)) { + $statusCode = 500; + } + $response->code($statusCode); + + return $response; + } + + /** + * 获取错误编码 + * ErrorException则使用错误级别作为错误编码 + * @access protected + * @param \Exception $exception + * @return integer 错误编码 + */ + protected function getCode(Exception $exception) + { + $code = $exception->getCode(); + + if (!$code && $exception instanceof ErrorException) { + $code = $exception->getSeverity(); + } + + return $code; + } + + /** + * 获取错误信息 + * ErrorException则使用错误级别作为错误编码 + * @access protected + * @param \Exception $exception + * @return string 错误信息 + */ + protected function getMessage(Exception $exception) + { + $message = $exception->getMessage(); + + if (PHP_SAPI == 'cli') { + return $message; + } + + $lang = Container::get('lang'); + + if (strpos($message, ':')) { + $name = strstr($message, ':', true); + $message = $lang->has($name) ? $lang->get($name) . strstr($message, ':') : $message; + } elseif (strpos($message, ',')) { + $name = strstr($message, ',', true); + $message = $lang->has($name) ? $lang->get($name) . ':' . substr(strstr($message, ','), 1) : $message; + } elseif ($lang->has($message)) { + $message = $lang->get($message); + } + + return $message; + } + + /** + * 获取出错文件内容 + * 获取错误的前9行和后9行 + * @access protected + * @param \Exception $exception + * @return array 错误文件内容 + */ + protected function getSourceCode(Exception $exception) + { + // 读取前9行和后9行 + $line = $exception->getLine(); + $first = ($line - 9 > 0) ? $line - 9 : 1; + + try { + $contents = file($exception->getFile()); + $source = [ + 'first' => $first, + 'source' => array_slice($contents, $first - 1, 19), + ]; + } catch (Exception $e) { + $source = []; + } + + return $source; + } + + /** + * 获取异常扩展信息 + * 用于非调试模式html返回类型显示 + * @access protected + * @param \Exception $exception + * @return array 异常类定义的扩展数据 + */ + protected function getExtendData(Exception $exception) + { + $data = []; + + if ($exception instanceof \think\Exception) { + $data = $exception->getData(); + } + + return $data; + } + + /** + * 获取常量列表 + * @access private + * @return array 常量列表 + */ + private static function getConst() + { + $const = get_defined_constants(true); + + return isset($const['user']) ? $const['user'] : []; + } +} diff --git a/thinkphp/library/think/exception/HttpException.php b/thinkphp/library/think/exception/HttpException.php new file mode 100644 index 000000000..01a27fc23 --- /dev/null +++ b/thinkphp/library/think/exception/HttpException.php @@ -0,0 +1,36 @@ + +// +---------------------------------------------------------------------- + +namespace think\exception; + +class HttpException extends \RuntimeException +{ + private $statusCode; + private $headers; + + public function __construct($statusCode, $message = null, \Exception $previous = null, array $headers = [], $code = 0) + { + $this->statusCode = $statusCode; + $this->headers = $headers; + + parent::__construct($message, $code, $previous); + } + + public function getStatusCode() + { + return $this->statusCode; + } + + public function getHeaders() + { + return $this->headers; + } +} diff --git a/thinkphp/library/think/exception/HttpResponseException.php b/thinkphp/library/think/exception/HttpResponseException.php new file mode 100644 index 000000000..52972867b --- /dev/null +++ b/thinkphp/library/think/exception/HttpResponseException.php @@ -0,0 +1,33 @@ + +// +---------------------------------------------------------------------- + +namespace think\exception; + +use think\Response; + +class HttpResponseException extends \RuntimeException +{ + /** + * @var Response + */ + protected $response; + + public function __construct(Response $response) + { + $this->response = $response; + } + + public function getResponse() + { + return $this->response; + } + +} diff --git a/thinkphp/library/think/exception/PDOException.php b/thinkphp/library/think/exception/PDOException.php new file mode 100644 index 000000000..25240b680 --- /dev/null +++ b/thinkphp/library/think/exception/PDOException.php @@ -0,0 +1,40 @@ + +// +---------------------------------------------------------------------- + +namespace think\exception; + +/** + * PDO异常处理类 + * 重新封装了系统的\PDOException类 + */ +class PDOException extends DbException +{ + /** + * PDOException constructor. + * @access public + * @param \PDOException $exception + * @param array $config + * @param string $sql + * @param int $code + */ + public function __construct(\PDOException $exception, array $config, $sql, $code = 10501) + { + $error = $exception->errorInfo; + + $this->setData('PDO Error Info', [ + 'SQLSTATE' => $error[0], + 'Driver Error Code' => isset($error[1]) ? $error[1] : 0, + 'Driver Error Message' => isset($error[2]) ? $error[2] : '', + ]); + + parent::__construct($exception->getMessage(), $config, $sql, $code); + } +} diff --git a/thinkphp/library/think/exception/RouteNotFoundException.php b/thinkphp/library/think/exception/RouteNotFoundException.php new file mode 100644 index 000000000..d22e3a637 --- /dev/null +++ b/thinkphp/library/think/exception/RouteNotFoundException.php @@ -0,0 +1,22 @@ + +// +---------------------------------------------------------------------- + +namespace think\exception; + +class RouteNotFoundException extends HttpException +{ + + public function __construct() + { + parent::__construct(404, 'Route Not Found'); + } + +} diff --git a/thinkphp/library/think/exception/TemplateNotFoundException.php b/thinkphp/library/think/exception/TemplateNotFoundException.php new file mode 100644 index 000000000..420206931 --- /dev/null +++ b/thinkphp/library/think/exception/TemplateNotFoundException.php @@ -0,0 +1,33 @@ + +// +---------------------------------------------------------------------- + +namespace think\exception; + +class TemplateNotFoundException extends \RuntimeException +{ + protected $template; + + public function __construct($message, $template = '') + { + $this->message = $message; + $this->template = $template; + } + + /** + * 获取模板文件 + * @access public + * @return string + */ + public function getTemplate() + { + return $this->template; + } +} diff --git a/thinkphp/library/think/exception/ThrowableError.php b/thinkphp/library/think/exception/ThrowableError.php new file mode 100644 index 000000000..87b6b9d74 --- /dev/null +++ b/thinkphp/library/think/exception/ThrowableError.php @@ -0,0 +1,47 @@ + +// +---------------------------------------------------------------------- + +namespace think\exception; + +class ThrowableError extends \ErrorException +{ + public function __construct(\Throwable $e) + { + + if ($e instanceof \ParseError) { + $message = 'Parse error: ' . $e->getMessage(); + $severity = E_PARSE; + } elseif ($e instanceof \TypeError) { + $message = 'Type error: ' . $e->getMessage(); + $severity = E_RECOVERABLE_ERROR; + } else { + $message = 'Fatal error: ' . $e->getMessage(); + $severity = E_ERROR; + } + + parent::__construct( + $message, + $e->getCode(), + $severity, + $e->getFile(), + $e->getLine() + ); + + $this->setTrace($e->getTrace()); + } + + protected function setTrace($trace) + { + $traceReflector = new \ReflectionProperty('Exception', 'trace'); + $traceReflector->setAccessible(true); + $traceReflector->setValue($this, $trace); + } +} diff --git a/thinkphp/library/think/exception/ValidateException.php b/thinkphp/library/think/exception/ValidateException.php new file mode 100644 index 000000000..b3684169c --- /dev/null +++ b/thinkphp/library/think/exception/ValidateException.php @@ -0,0 +1,33 @@ + +// +---------------------------------------------------------------------- + +namespace think\exception; + +class ValidateException extends \RuntimeException +{ + protected $error; + + public function __construct($error) + { + $this->error = $error; + $this->message = is_array($error) ? implode("\n\r", $error) : $error; + } + + /** + * 获取验证错误信息 + * @access public + * @return array|string + */ + public function getError() + { + return $this->error; + } +} diff --git a/thinkphp/library/think/facade/App.php b/thinkphp/library/think/facade/App.php new file mode 100644 index 000000000..37d995106 --- /dev/null +++ b/thinkphp/library/think/facade/App.php @@ -0,0 +1,54 @@ + +// +---------------------------------------------------------------------- + +namespace think\facade; + +use think\Facade; + +/** + * @see \think\App + * @mixin \think\App + * @method \think\App bind(string $bind) static 绑定模块或者控制器 + * @method void initialize() static 初始化应用 + * @method void init(string $module='') static 初始化模块 + * @method \think\Response run() static 执行应用 + * @method \think\App dispatch(\think\route\Dispatch $dispatch) static 设置当前请求的调度信息 + * @method void log(mixed $log, string $type = 'info') static 记录调试信息 + * @method mixed config(string $name='') static 获取配置参数 + * @method \think\route\Dispatch routeCheck() static URL路由检测(根据PATH_INFO) + * @method \think\App routeMust(bool $must = false) static 设置应用的路由检测机制 + * @method \think\Model model(string $name = '', string $layer = 'model', bool $appendSuffix = false, string $common = 'common') static 实例化模型 + * @method object controller(string $name, string $layer = 'controller', bool $appendSuffix = false, string $empty = '') static 实例化控制器 + * @method \think\Validate validate(string $name = '', string $layer = 'validate', bool $appendSuffix = false, string $common = 'common') static 实例化验证器类 + * @method \think\db\Query db(mixed $config = [], mixed $name = false) static 数据库初始化 + * @method mixed action(string $url, $vars = [], $layer = 'controller', $appendSuffix = false) static 调用模块的操作方法 + * @method string parseClass(string $module, string $layer, string $name, bool $appendSuffix = false) static 解析应用类的类名 + * @method string version() static 获取框架版本 + * @method bool isDebug() static 是否为调试模式 + * @method string getModulePath() static 获取当前模块路径 + * @method void setModulePath(string $path) static 设置当前模块路径 + * @method string getRootPath() static 获取应用根目录 + * @method string getAppPath() static 获取应用类库目录 + * @method string getRuntimePath() static 获取应用运行时目录 + * @method string getThinkPath() static 获取核心框架目录 + * @method string getRoutePath() static 获取路由目录 + * @method string getConfigPath() static 获取应用配置目录 + * @method string getConfigExt() static 获取配置后缀 + * @method string setNamespace(string $namespace) static 设置应用类库命名空间 + * @method string getNamespace() static 获取应用类库命名空间 + * @method string getSuffix() static 是否启用类库后缀 + * @method float getBeginTime() static 获取应用开启时间 + * @method integer getBeginMem() static 获取应用初始内存占用 + * @method \think\Container container() static 获取容器实例 + */ +class App extends Facade +{ +} diff --git a/thinkphp/library/think/facade/Build.php b/thinkphp/library/think/facade/Build.php new file mode 100644 index 000000000..465962367 --- /dev/null +++ b/thinkphp/library/think/facade/Build.php @@ -0,0 +1,24 @@ + +// +---------------------------------------------------------------------- + +namespace think\facade; + +use think\Facade; + +/** + * @see \think\Build + * @mixin \think\Build + * @method void run(array $build = [], string $namespace = 'app', bool $suffix = false) static 根据传入的build资料创建目录和文件 + * @method void module(string $module = '', array $list = [], string $namespace = 'app', bool $suffix = false) static 创建模块 + */ +class Build extends Facade +{ +} diff --git a/thinkphp/library/think/facade/Cache.php b/thinkphp/library/think/facade/Cache.php new file mode 100644 index 000000000..3011d6b3a --- /dev/null +++ b/thinkphp/library/think/facade/Cache.php @@ -0,0 +1,36 @@ + +// +---------------------------------------------------------------------- + +namespace think\facade; + +use think\Facade; + +/** + * @see \think\Cache + * @mixin \think\Cache + * @method \think\cache\Driver connect(array $options = [], mixed $name = false) static 连接缓存 + * @method \think\cache\Driver init(array $options = []) static 初始化缓存 + * @method \think\cache\Driver store(string $name = '') static 切换缓存类型 + * @method bool has(string $name) static 判断缓存是否存在 + * @method mixed get(string $name, mixed $default = false) static 读取缓存 + * @method mixed pull(string $name) static 读取缓存并删除 + * @method mixed set(string $name, mixed $value, int $expire = null) static 设置缓存 + * @method mixed remember(string $name, mixed $value, int $expire = null) static 如果不存在则写入缓存 + * @method mixed inc(string $name, int $step = 1) static 自增缓存(针对数值缓存) + * @method mixed dec(string $name, int $step = 1) static 自减缓存(针对数值缓存) + * @method bool rm(string $name) static 删除缓存 + * @method bool clear(string $tag = null) static 清除缓存 + * @method mixed tag(string $name, mixed $keys = null, bool $overlay = false) static 缓存标签 + * @method object handler() static 返回句柄对象,可执行其它高级方法 + */ +class Cache extends Facade +{ +} diff --git a/thinkphp/library/think/facade/Config.php b/thinkphp/library/think/facade/Config.php new file mode 100644 index 000000000..3332413b8 --- /dev/null +++ b/thinkphp/library/think/facade/Config.php @@ -0,0 +1,27 @@ + +// +---------------------------------------------------------------------- + +namespace think\facade; + +use think\Facade; + +/** + * @see \think\Config + * @mixin \think\Config + * @method bool has(string $name) static 检测配置是否存在 + * @method array pull(string $name) static 获取一级配置 + * @method mixed get(string $name) static 获取配置参数 + * @method mixed set(string $name, mixed $value = null) static 设置配置参数 + * @method array reset(string $prefix ='') static 重置配置参数 + */ +class Config extends Facade +{ +} diff --git a/thinkphp/library/think/facade/Cookie.php b/thinkphp/library/think/facade/Cookie.php new file mode 100644 index 000000000..18efbde0c --- /dev/null +++ b/thinkphp/library/think/facade/Cookie.php @@ -0,0 +1,30 @@ + +// +---------------------------------------------------------------------- + +namespace think\facade; + +use think\Facade; + +/** + * @see \think\Cookie + * @mixin \think\Cookie + * @method void init(array $config = []) static 初始化 + * @method bool has(string $name,string $prefix = null) static 判断Cookie数据 + * @method mixed prefix(string $prefix = '') static 设置或者获取cookie作用域(前缀) + * @method mixed get(string $name,string $prefix = null) static Cookie获取 + * @method mixed set(string $name, mixed $value = null, mixed $option = null) static 设置Cookie + * @method void forever(string $name, mixed $value = null, mixed $option = null) static 永久保存Cookie数据 + * @method void delete(string $name, string $prefix = null) static Cookie删除 + * @method void clear($prefix = null) static Cookie清空 + */ +class Cookie extends Facade +{ +} diff --git a/thinkphp/library/think/facade/Debug.php b/thinkphp/library/think/facade/Debug.php new file mode 100644 index 000000000..ac482a41e --- /dev/null +++ b/thinkphp/library/think/facade/Debug.php @@ -0,0 +1,31 @@ + +// +---------------------------------------------------------------------- + +namespace think\facade; + +use think\Facade; + +/** + * @see \think\Debug + * @mixin \think\Debug + * @method void remark(string $name, mixed $value = '') static 记录时间(微秒)和内存使用情况 + * @method int getRangeTime(string $start, string $end, mixed $dec = 6) static 统计某个区间的时间(微秒)使用情况 + * @method int getUseTime(int $dec = 6) static 统计从开始到统计时的时间(微秒)使用情况 + * @method string getThroughputRate(string $start, string $end, mixed $dec = 6) static 获取当前访问的吞吐率情况 + * @method string getRangeMem(string $start, string $end, mixed $dec = 2) static 记录区间的内存使用情况 + * @method int getUseMem(int $dec = 2) static 统计从开始到统计时的内存使用情况 + * @method string getMemPeak(string $start, string $end, mixed $dec = 2) static 统计区间的内存峰值情况 + * @method mixed getFile(bool $detail = false) static 获取文件加载信息 + * @method mixed dump(mixed $var, bool $echo = true, string $label = null, int $flags = ENT_SUBSTITUTE) static 浏览器友好的变量输出 + */ +class Debug extends Facade +{ +} diff --git a/thinkphp/library/think/facade/Env.php b/thinkphp/library/think/facade/Env.php new file mode 100644 index 000000000..d430d683f --- /dev/null +++ b/thinkphp/library/think/facade/Env.php @@ -0,0 +1,25 @@ + +// +---------------------------------------------------------------------- + +namespace think\facade; + +use think\Facade; + +/** + * @see \think\Env + * @mixin \think\Env + * @method void load(string $file) static 读取环境变量定义文件 + * @method mixed get(string $name = null, mixed $default = null) static 获取环境变量值 + * @method void set(mixed $env, string $value = null) static 设置环境变量值 + */ +class Env extends Facade +{ +} diff --git a/thinkphp/library/think/facade/Hook.php b/thinkphp/library/think/facade/Hook.php new file mode 100644 index 000000000..e18f83b5d --- /dev/null +++ b/thinkphp/library/think/facade/Hook.php @@ -0,0 +1,28 @@ + +// +---------------------------------------------------------------------- + +namespace think\facade; + +use think\Facade; + +/** + * @see \think\Hook + * @mixin \think\Hook + * @method \think\Hook alias(mixed $name, mixed $behavior = null) static 指定行为标识 + * @method void add(string $tag, mixed $behavior, bool $first = false) static 动态添加行为扩展到某个标签 + * @method void import(array $tags, bool $recursive = true) static 批量导入插件 + * @method array get(string $tag = '') static 获取插件信息 + * @method mixed listen(string $tag, mixed $params = null, bool $once = false) static 监听标签的行为 + * @method mixed exec(mixed $class, mixed $params = null) static 执行行为 + */ +class Hook extends Facade +{ +} diff --git a/thinkphp/library/think/facade/Lang.php b/thinkphp/library/think/facade/Lang.php new file mode 100644 index 000000000..3eb5d4acd --- /dev/null +++ b/thinkphp/library/think/facade/Lang.php @@ -0,0 +1,32 @@ + +// +---------------------------------------------------------------------- + +namespace think\facade; + +use think\Facade; + +/** + * @see \think\Lang + * @mixin \think\Lang + * @method mixed range($range = '') static 设定当前的语言 + * @method mixed set(mixed $name, string $value = null, string $range = '') static 设置语言定义 + * @method array load(mixed $file, string $range = '') static 加载语言定义 + * @method mixed get(string $name = null, array $vars = [], string $range = '') static 获取语言定义 + * @method mixed has(string $name, string $range = '') static 获取语言定义 + * @method string detect() static 自动侦测设置获取语言选择 + * @method void saveToCookie(string $lang = null) static 设置当前语言到Cookie + * @method void setLangDetectVar(string $var) static 设置语言自动侦测的变量 + * @method void setLangCookieVar(string $var) static 设置语言的cookie保存变量 + * @method void setAllowLangList(array $list) static 设置允许的语言列表 + */ +class Lang extends Facade +{ +} diff --git a/thinkphp/library/think/facade/Log.php b/thinkphp/library/think/facade/Log.php new file mode 100644 index 000000000..3a1fbf88f --- /dev/null +++ b/thinkphp/library/think/facade/Log.php @@ -0,0 +1,40 @@ + +// +---------------------------------------------------------------------- + +namespace think\facade; + +use think\Facade; + +/** + * @see \think\Log + * @mixin \think\Log + * @method \think\Log init(array $config = []) static 日志初始化 + * @method mixed getLog(string $type = '') static 获取日志信息 + * @method \think\Log record(mixed $msg, string $type = 'info', array $context = []) static 记录日志信息 + * @method \think\Log clear() static 清空日志信息 + * @method \think\Log key(string $key) static 当前日志记录的授权key + * @method bool check(array $config) static 检查日志写入权限 + * @method bool save() static 保存调试信息 + * @method void write(mixed $msg, string $type = 'info', bool $force = false) static 实时写入日志信息 + * @method void log(string $level,mixed $message, array $context = []) static 记录日志信息 + * @method void emergency(mixed $message, array $context = []) static 记录emergency信息 + * @method void alert(mixed $message, array $context = []) static 记录alert信息 + * @method void critical(mixed $message, array $context = []) static 记录critical信息 + * @method void error(mixed $message, array $context = []) static 记录error信息 + * @method void warning(mixed $message, array $context = []) static 记录warning信息 + * @method void notice(mixed $message, array $context = []) static 记录notice信息 + * @method void info(mixed $message, array $context = []) static 记录info信息 + * @method void debug(mixed $message, array $context = []) static 记录debug信息 + * @method void sql(mixed $message, array $context = []) static 记录sql信息 + */ +class Log extends Facade +{ +} diff --git a/thinkphp/library/think/facade/Middleware.php b/thinkphp/library/think/facade/Middleware.php new file mode 100644 index 000000000..468279642 --- /dev/null +++ b/thinkphp/library/think/facade/Middleware.php @@ -0,0 +1,27 @@ + +// +---------------------------------------------------------------------- + +namespace think\facade; + +use think\Facade; + +/** + * @see \think\Middleware + * @mixin \think\Middleware + * @method void import(array $middlewares = []) static 批量设置中间件 + * @method void add(mixed $middleware) static 添加中间件到队列 + * @method void unshift(mixed $middleware) static 添加中间件到队列开头 + * @method array all() static 获取中间件队列 + * @method \think\Response dispatch(\think\Request $request) static 执行中间件调度 + */ +class Middleware extends Facade +{ +} diff --git a/thinkphp/library/think/facade/Request.php b/thinkphp/library/think/facade/Request.php new file mode 100644 index 000000000..20b6429d4 --- /dev/null +++ b/thinkphp/library/think/facade/Request.php @@ -0,0 +1,88 @@ + +// +---------------------------------------------------------------------- + +namespace think\facade; + +use think\Facade; + +/** + * @see \think\Request + * @mixin \think\Request + * @method void hook(mixed $method, mixed $callback = null) static Hook 方法注入 + * @method \think\Request create(string $uri, string $method = 'GET', array $params = [], array $cookie = [], array $files = [], array $server = [], string $content = null) static 创建一个URL请求 + * @method mixed domain(string $domain = null) static 设置或获取当前包含协议的域名 + * @method mixed url(mixed $url = null) static 设置或获取当前完整URL + * @method mixed baseUrl(string $url = null) static 设置或获取当前URL + * @method mixed baseFile(string $file = null) static 设置或获取当前执行的文件 + * @method mixed root(string $url = null) static 设置或获取URL访问根地址 + * @method string rootUrl() static 获取URL访问根目录 + * @method string pathinfo() static 获取当前请求URL的pathinfo信息(含URL后缀) + * @method string path() static 获取当前请求URL的pathinfo信息(不含URL后缀) + * @method string ext() static 当前URL的访问后缀 + * @method float time(bool $float = false) static 获取当前请求的时间 + * @method mixed type() static 当前请求的资源类型 + * @method void mimeType(mixed $type, string $val = '') static 设置资源类型 + * @method string method(bool $method = false) static 当前的请求类型 + * @method bool isGet() static 是否为GET请求 + * @method bool isPost() static 是否为POST请求 + * @method bool isPut() static 是否为PUT请求 + * @method bool isDelete() static 是否为DELTE请求 + * @method bool isHead() static 是否为HEAD请求 + * @method bool isPatch() static 是否为PATCH请求 + * @method bool isOptions() static 是否为OPTIONS请求 + * @method bool isCli() static 是否为cli + * @method bool isCgi() static 是否为cgi + * @method mixed param(mixed $name = '', mixed $default = null, mixed $filter = '') static 获取当前请求的参数 + * @method mixed route(mixed $name = '', mixed $default = null, mixed $filter = '') static 设置获取路由参数 + * @method mixed get(mixed $name = '', mixed $default = null, mixed $filter = '') static 设置获取GET参数 + * @method mixed post(mixed $name = '', mixed $default = null, mixed $filter = '') static 设置获取POST参数 + * @method mixed put(mixed $name = '', mixed $default = null, mixed $filter = '') static 设置获取PUT参数 + * @method mixed delete(mixed $name = '', mixed $default = null, mixed $filter = '') static 设置获取DELETE参数 + * @method mixed patch(mixed $name = '', mixed $default = null, mixed $filter = '') static 设置获取PATCH参数 + * @method mixed request(mixed $name = '', mixed $default = null, mixed $filter = '') static 获取request变量 + * @method mixed session(mixed $name = '', mixed $default = null, mixed $filter = '') static 获取session数据 + * @method mixed cookie(mixed $name = '', mixed $default = null, mixed $filter = '') static 获取cookie参数 + * @method mixed server(mixed $name = '', mixed $default = null, mixed $filter = '') static 获取server参数 + * @method mixed env(mixed $name = '', mixed $default = null, mixed $filter = '') static 获取环境变量 + * @method mixed file(mixed $name = '') static 获取上传的文件信息 + * @method mixed header(mixed $name = '', mixed $default = null) static 设置或者获取当前的Header + * @method mixed input(array $data,mixed $name = '', mixed $default = null, mixed $filter = '') static 获取变量 支持过滤和默认值 + * @method mixed filter(mixed $filter = null) static 设置或获取当前的过滤规则 + * @method mixed has(string $name, string $type = 'param', bool $checkEmpty = false) static 是否存在某个请求参数 + * @method mixed only(mixed $name, string $type = 'param') static 获取指定的参数 + * @method mixed except(mixed $name, string $type = 'param') static 排除指定参数获取 + * @method bool isSsl() static 当前是否ssl + * @method bool isAjax(bool $ajax = false) static 当前是否Ajax请求 + * @method bool isPjax(bool $pjax = false) static 当前是否Pjax请求 + * @method mixed ip(int $type = 0, bool $adv = true) static 获取客户端IP地址 + * @method bool isMobile() static 检测是否使用手机访问 + * @method string scheme() static 当前URL地址中的scheme参数 + * @method string query() static 当前请求URL地址中的query参数 + * @method string host() static 当前请求的host + * @method string port() static 当前请求URL地址中的port参数 + * @method string protocol() static 当前请求 SERVER_PROTOCOL + * @method string remotePort() static 当前请求 REMOTE_PORT + * @method string contentType() static 当前请求 HTTP_CONTENT_TYPE + * @method array routeInfo(array $route = []) static 获取当前请求的路由信息 + * @method array dispatch(array $dispatch = null) static 设置或者获取当前请求的调度信息 + * @method mixed module(string $module = null) static 设置或者获取当前的模块名 + * @method mixed controller(string $controller = null) static 设置或者获取当前的控制器名 + * @method mixed action(string $action = null) static 设置或者获取当前的操作名 + * @method mixed langset(string $lang = null) static 设置或者获取当前的语言 + * @method string getContent() static 设置或者获取当前请求的content + * @method string getInput() static 获取当前请求的php://input + * @method string token(string $name = '__token__', mixed $type = 'md5') static 生成请求令牌 + * @method string cache(string $key, mixed $expire = null, array $except = [], string $tag = null) static 设置当前地址的请求缓存 + * @method string getCache() static 读取请求缓存设置 + */ +class Request extends Facade +{ +} diff --git a/thinkphp/library/think/facade/Response.php b/thinkphp/library/think/facade/Response.php new file mode 100644 index 000000000..4a4de7129 --- /dev/null +++ b/thinkphp/library/think/facade/Response.php @@ -0,0 +1,38 @@ + +// +---------------------------------------------------------------------- + +namespace think\facade; + +use think\Facade; + +/** + * @see \think\Response + * @mixin \think\Response + * @method \think\response create(mixed $data = '', string $type = '', int $code = 200, array $header = [], array $options = []) static 创建Response对象 + * @method void send() static 发送数据到客户端 + * @method \think\Response options(mixed $options = []) static 输出的参数 + * @method \think\Response data(mixed $data) static 输出数据设置 + * @method \think\Response header(mixed $name, string $value = null) static 设置响应头 + * @method \think\Response content(mixed $content) static 设置页面输出内容 + * @method \think\Response code(int $code) static 发送HTTP状态 + * @method \think\Response lastModified(string $time) static LastModified + * @method \think\Response expires(string $time) static expires + * @method \think\Response eTag(string $eTag) static eTag + * @method \think\Response cacheControl(string $cache) static 页面缓存控制 + * @method \think\Response contentType(string $contentType, string $charset = 'utf-8') static 页面输出类型 + * @method mixed getHeader(string $name) static 获取头部信息 + * @method mixed getData() static 获取原始数据 + * @method mixed getContent() static 获取输出数据 + * @method int getCode() static 获取状态码 + */ +class Response extends Facade +{ +} diff --git a/thinkphp/library/think/facade/Route.php b/thinkphp/library/think/facade/Route.php new file mode 100644 index 000000000..c197183ba --- /dev/null +++ b/thinkphp/library/think/facade/Route.php @@ -0,0 +1,48 @@ + +// +---------------------------------------------------------------------- + +namespace think\facade; + +use think\Facade; + +/** + * @see \think\Route + * @mixin \think\Route + * @method \think\route\Domain domain(mixed $name, mixed $rule = '', array $option = [], array $pattern = []) static 注册域名路由 + * @method \think\Route pattern(mixed $name, string $rule = '') static 注册变量规则 + * @method \think\Route option(mixed $name, mixed $value = '') static 注册路由参数 + * @method \think\Route bind(string $bind) static 设置路由绑定 + * @method mixed getBind(string $bind) static 读取路由绑定 + * @method \think\Route name(string $name) static 设置当前路由标识 + * @method mixed getName(string $name) static 读取路由标识 + * @method void setName(string $name) static 批量导入路由标识 + * @method void import(array $rules, string $type = '*') static 导入配置文件的路由规则 + * @method \think\route\RuleItem rule(string $rule, mixed $route, string $method = '*', array $option = [], array $pattern = []) static 注册路由规则 + * @method void rules(string $rules, string $method = '*', array $option = [], array $pattern = []) static 批量注册路由规则 + * @method \think\route\RuleGroup group(string $name, mixed $route, string $method = '*', array $option = [], array $pattern = []) static 注册路由分组 + * @method \think\route\RuleItem any(string $rule, mixed $route, array $option = [], array $pattern = []) static 注册路由 + * @method \think\route\RuleItem get(string $rule, mixed $route, array $option = [], array $pattern = []) static 注册路由 + * @method \think\route\RuleItem post(string $rule, mixed $route, array $option = [], array $pattern = []) static 注册路由 + * @method \think\route\RuleItem put(string $rule, mixed $route, array $option = [], array $pattern = []) static 注册路由 + * @method \think\route\RuleItem delete(string $rule, mixed $route, array $option = [], array $pattern = []) static 注册路由 + * @method \think\route\RuleItem patch(string $rule, mixed $route, array $option = [], array $pattern = []) static 注册路由 + * @method \think\route\Resource resource(string $rule, mixed $route, array $option = [], array $pattern = []) static 注册资源路由 + * @method \think\Route controller(string $rule, mixed $route, array $option = [], array $pattern = []) static 注册控制器路由 + * @method \think\Route alias(string $rule, mixed $route, array $option = [], array $pattern = []) static 注册别名路由 + * @method \think\Route setMethodPrefix(mixed $method, string $prefix = '') static 设置不同请求类型下面的方法前缀 + * @method \think\Route rest(string $name, array $resource = []) static rest方法定义和修改 + * @method \think\RuleItem miss(string $route, string $method = '*', array $option = []) static 注册未匹配路由规则后的处理 + * @method \think\RuleItem auto(string $route) static 注册一个自动解析的URL路由 + * @method \think\Dispatch check(string $url, string $depr = '/', bool $must = false, bool $completeMatch = false) static 检测URL路由 + */ +class Route extends Facade +{ +} diff --git a/thinkphp/library/think/facade/Session.php b/thinkphp/library/think/facade/Session.php new file mode 100644 index 000000000..9aad0b698 --- /dev/null +++ b/thinkphp/library/think/facade/Session.php @@ -0,0 +1,37 @@ + +// +---------------------------------------------------------------------- + +namespace think\facade; + +use think\Facade; + +/** + * @see \think\Session + * @mixin \think\Session + * @method void init(array $config = []) static session初始化 + * @method bool has(string $name,string $prefix = null) static 判断session数据 + * @method mixed prefix(string $prefix = '') static 设置或者获取session作用域(前缀) + * @method mixed get(string $name,string $prefix = null) static session获取 + * @method mixed pull(string $name,string $prefix = null) static session获取并删除 + * @method void push(string $key, mixed $value) static 添加数据到一个session数组 + * @method void set(string $name, mixed $value , string $prefix = null) static 设置session数据 + * @method void flash(string $name, mixed $value = null) static session设置 下一次请求有效 + * @method void flush() static 清空当前请求的session数据 + * @method void delete(string $name, string $prefix = null) static 删除session数据 + * @method void clear($prefix = null) static 清空session数据 + * @method void start() static 启动session + * @method void destroy() static 销毁session + * @method void pause() static 暂停session + * @method void regenerate(bool $delete = false) static 重新生成session_id + */ +class Session extends Facade +{ +} diff --git a/thinkphp/library/think/facade/Url.php b/thinkphp/library/think/facade/Url.php new file mode 100644 index 000000000..db5a16f2b --- /dev/null +++ b/thinkphp/library/think/facade/Url.php @@ -0,0 +1,24 @@ + +// +---------------------------------------------------------------------- + +namespace think\facade; + +use think\Facade; + +/** + * @see \think\Url + * @mixin \think\Url + * @method string build(string $url = '', mixed $vars = '', mixed $suffix = true, mixed $domain = false) static URL生成 支持路由反射 + * @method void root(string $root) static 指定当前生成URL地址的root + */ +class Url extends Facade +{ +} diff --git a/thinkphp/library/think/facade/Validate.php b/thinkphp/library/think/facade/Validate.php new file mode 100644 index 000000000..423446d4d --- /dev/null +++ b/thinkphp/library/think/facade/Validate.php @@ -0,0 +1,65 @@ + +// +---------------------------------------------------------------------- + +namespace think\facade; + +use think\Facade; + +/** + * @see \think\Validate + * @mixin \think\Validate + * @method \think\Validate make(array $rules = [], array $message = [], array $field = []) static 创建一个验证器类 + * @method \think\Validate rule(mixed $name, mixed $rule = '') static 添加字段验证规则 + * @method void extend(string $type, mixed $callback = null) static 注册扩展验证(类型)规则 + * @method void setTypeMsg(mixed $type, string $msg = null) static 设置验证规则的默认提示信息 + * @method \think\Validate message(mixed $name, string $message = '') static 设置提示信息 + * @method \think\Validate scene(string $name) static 设置验证场景 + * @method bool hasScene(string $name) static 判断是否存在某个验证场景 + * @method \think\Validate batch(bool $batch = true) static 设置批量验证 + * @method \think\Validate only(array $fields) static 指定需要验证的字段列表 + * @method \think\Validate remove(mixed $field, mixed $rule = true) static 移除某个字段的验证规则 + * @method \think\Validate append(mixed $field, mixed $rule = null) static 追加某个字段的验证规则 + * @method bool confirm(mixed $value, mixed $rule, array $data = [], string $field = '') static 验证是否和某个字段的值一致 + * @method bool different(mixed $value, mixed $rule, array $data = []) static 验证是否和某个字段的值是否不同 + * @method bool egt(mixed $value, mixed $rule, array $data = []) static 验证是否大于等于某个值 + * @method bool gt(mixed $value, mixed $rule, array $data = []) static 验证是否大于某个值 + * @method bool elt(mixed $value, mixed $rule, array $data = []) static 验证是否小于等于某个值 + * @method bool lt(mixed $value, mixed $rule, array $data = []) static 验证是否小于某个值 + * @method bool eq(mixed $value, mixed $rule) static 验证是否等于某个值 + * @method bool must(mixed $value, mixed $rule) static 必须验证 + * @method bool is(mixed $value, mixed $rule, array $data = []) static 验证字段值是否为有效格式 + * @method bool ip(mixed $value, mixed $rule) static 验证是否有效IP + * @method bool requireIf(mixed $value, mixed $rule) static 验证某个字段等于某个值的时候必须 + * @method bool requireCallback(mixed $value, mixed $rule,array $data) static 通过回调方法验证某个字段是否必须 + * @method bool requireWith(mixed $value, mixed $rule, array $data) static 验证某个字段有值的情况下必须 + * @method bool filter(mixed $value, mixed $rule) static 使用filter_var方式验证 + * @method bool in(mixed $value, mixed $rule) static 验证是否在范围内 + * @method bool notIn(mixed $value, mixed $rule) static 验证是否不在范围内 + * @method bool between(mixed $value, mixed $rule) static between验证数据 + * @method bool notBetween(mixed $value, mixed $rule) static 使用notbetween验证数据 + * @method bool length(mixed $value, mixed $rule) static 验证数据长度 + * @method bool max(mixed $value, mixed $rule) static 验证数据最大长度 + * @method bool min(mixed $value, mixed $rule) static 验证数据最小长度 + * @method bool after(mixed $value, mixed $rule) static 验证日期 + * @method bool before(mixed $value, mixed $rule) static 验证日期 + * @method bool expire(mixed $value, mixed $rule) static 验证有效期 + * @method bool allowIp(mixed $value, mixed $rule) static 验证IP许可 + * @method bool denyIp(mixed $value, mixed $rule) static 验证IP禁用 + * @method bool regex(mixed $value, mixed $rule) static 使用正则验证数据 + * @method bool token(mixed $value, mixed $rule) static 验证表单令牌 + * @method bool dateFormat(mixed $value, mixed $rule) static 验证时间和日期是否符合指定格式 + * @method bool unique(mixed $value, mixed $rule, array $data = [], string $field = '') static 验证是否唯一 + * @method bool check(array $data, mixed $rules = [], string $scene = '') static 数据自动验证 + * @method mixed getError(mixed $value, mixed $rule) static 获取错误信息 + */ +class Validate extends Facade +{ +} diff --git a/thinkphp/library/think/facade/View.php b/thinkphp/library/think/facade/View.php new file mode 100644 index 000000000..0309a760f --- /dev/null +++ b/thinkphp/library/think/facade/View.php @@ -0,0 +1,31 @@ + +// +---------------------------------------------------------------------- + +namespace think\facade; + +use think\Facade; + +/** + * @see \think\View + * @mixin \think\View + * @method \think\View init(mixed $engine = [], array $replace = []) static 初始化 + * @method \think\View share(mixed $name, mixed $value = '') static 模板变量静态赋值 + * @method \think\View assign(mixed $name, mixed $value = '') static 模板变量赋值 + * @method \think\View config(mixed $name, mixed $value = '') static 配置模板引擎 + * @method \think\View exists(mixed $name) static 检查模板是否存在 + * @method \think\View filter(Callable $filter) static 视图内容过滤 + * @method \think\View engine(mixed $engine = []) static 设置当前模板解析的引擎 + * @method string fetch(string $template = '', array $vars = [], array $replace = [], array $config = [], bool $renderContent = false) static 解析和获取模板内容 + * @method string display(string $content = '', array $vars = [], array $replace = [], array $config = []) static 渲染内容输出 + */ +class View extends Facade +{ +} diff --git a/thinkphp/library/think/log/driver/File.php b/thinkphp/library/think/log/driver/File.php new file mode 100644 index 000000000..1db14925b --- /dev/null +++ b/thinkphp/library/think/log/driver/File.php @@ -0,0 +1,163 @@ + +// +---------------------------------------------------------------------- + +namespace think\log\driver; + +use think\Container; + +/** + * 本地化调试输出到文件 + */ +class File +{ + protected $config = [ + 'time_format' => ' c ', + 'single' => false, + 'file_size' => 2097152, + 'path' => '', + 'apart_level' => [], + 'max_files' => 0, + ]; + + protected $writed = []; + + // 实例化并传入参数 + public function __construct($config = []) + { + if (is_array($config)) { + $this->config = array_merge($this->config, $config); + } + + if (empty($this->config['path'])) { + $this->config['path'] = Container::get('app')->getRuntimePath() . 'log' . DIRECTORY_SEPARATOR; + } elseif (substr($this->config['path'], -1) != DIRECTORY_SEPARATOR) { + $this->config['path'] .= DIRECTORY_SEPARATOR; + } + } + + /** + * 日志写入接口 + * @access public + * @param array $log 日志信息 + * @return bool + */ + public function save(array $log = []) + { + if ($this->config['single']) { + $name = is_string($this->config['single']) ? $this->config['single'] : 'single'; + $destination = $this->config['path'] . $name . '.log'; + } else { + $cli = PHP_SAPI == 'cli' ? '_cli' : ''; + + if ($this->config['max_files']) { + $filename = date('Ymd') . $cli . '.log'; + $files = glob($this->config['path'] . '*.log'); + + try { + if (count($files) > $this->config['max_files']) { + unlink($files[0]); + } + } catch (\Exception $e) { + } + } else { + $filename = date('Ym') . DIRECTORY_SEPARATOR . date('d') . $cli . '.log'; + } + + $destination = $this->config['path'] . $filename; + } + + $path = dirname($destination); + !is_dir($path) && mkdir($path, 0755, true); + + $info = ''; + foreach ($log as $type => $val) { + $level = ''; + foreach ($val as $msg) { + if (!is_string($msg)) { + $msg = var_export($msg, true); + } + $level .= '[ ' . $type . ' ] ' . $msg . "\r\n"; + } + + if (in_array($type, $this->config['apart_level'])) { + // 独立记录的日志级别 + if ($this->config['single']) { + $filename = $path . DIRECTORY_SEPARATOR . $name . '_' . $type . '.log'; + } elseif ($this->config['max_files']) { + $filename = $path . DIRECTORY_SEPARATOR . date('Ymd') . '_' . $type . $cli . '.log'; + } else { + $filename = $path . DIRECTORY_SEPARATOR . date('d') . '_' . $type . $cli . '.log'; + } + + $this->write($level, $filename, true); + } else { + $info .= $level; + } + } + + if ($info) { + return $this->write($info, $destination); + } + + return true; + } + + /** + * 日志写入 + * @access protected + * @param array $message 日志信息 + * @param string $destination 日志文件 + * @param bool $apart 是否独立文件写入 + * @return bool + */ + protected function write($message, $destination, $apart = false) + { + // 检测日志文件大小,超过配置大小则备份日志文件重新生成 + if (is_file($destination) && floor($this->config['file_size']) <= filesize($destination)) { + try { + rename($destination, dirname($destination) . DIRECTORY_SEPARATOR . time() . '-' . basename($destination)); + } catch (\Exception $e) { + } + + $this->writed[$destination] = false; + } + + if (empty($this->writed[$destination]) && PHP_SAPI != 'cli') { + if (Container::get('app')->isDebug() && !$apart) { + // 获取基本信息 + $current_uri = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; + $runtime = round(microtime(true) - Container::get('app')->getBeginTime(), 10); + $reqs = $runtime > 0 ? number_format(1 / $runtime, 2) : '∞'; + $time_str = ' [运行时间:' . number_format($runtime, 6) . 's][吞吐率:' . $reqs . 'req/s]'; + $memory_use = number_format((memory_get_usage() - Container::get('app')->getBeginMem()) / 1024, 2); + $memory_str = ' [内存消耗:' . $memory_use . 'kb]'; + $file_load = ' [文件加载:' . count(get_included_files()) . ']'; + $message = '[ info ] ' . $current_uri . $time_str . $memory_str . $file_load . "\r\n" . $message; + } + + $now = date($this->config['time_format']); + $ip = Container::get('request')->ip(); + $method = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : 'CLI'; + $uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : ''; + $message = "---------------------------------------------------------------\r\n[{$now}] {$ip} {$method} {$uri}\r\n" . $message; + + $this->writed[$destination] = true; + } + + if (PHP_SAPI == 'cli') { + $now = date($this->config['time_format']); + $message = "[{$now}]" . $message; + } + + return error_log($message, 3, $destination); + } + +} diff --git a/thinkphp/library/think/log/driver/Socket.php b/thinkphp/library/think/log/driver/Socket.php new file mode 100644 index 000000000..d3e717fe3 --- /dev/null +++ b/thinkphp/library/think/log/driver/Socket.php @@ -0,0 +1,274 @@ + +// +---------------------------------------------------------------------- + +namespace think\log\driver; + +use think\Container; + +/** + * github: https://github.com/luofei614/SocketLog + * @author luofei614 + */ +class Socket +{ + public $port = 1116; //SocketLog 服务的http的端口号 + + protected $config = [ + // socket服务器地址 + 'host' => 'localhost', + // 是否显示加载的文件列表 + 'show_included_files' => false, + // 日志强制记录到配置的client_id + 'force_client_ids' => [], + // 限制允许读取日志的client_id + 'allow_client_ids' => [], + ]; + + protected $css = [ + 'sql' => 'color:#009bb4;', + 'sql_warn' => 'color:#009bb4;font-size:14px;', + 'error' => 'color:#f4006b;font-size:14px;', + 'page' => 'color:#40e2ff;background:#171717;', + 'big' => 'font-size:20px;color:red;', + ]; + + protected $allowForceClientIds = []; //配置强制推送且被授权的client_id + + /** + * 架构函数 + * @access public + * @param array $config 缓存参数 + */ + public function __construct(array $config = []) + { + if (!empty($config)) { + $this->config = array_merge($this->config, $config); + } + } + + /** + * 调试输出接口 + * @access public + * @param array $log 日志信息 + * @return bool + */ + public function save(array $log = []) + { + if (!$this->check()) { + return false; + } + + $trace = []; + + if (Container::get('app')->isDebug()) { + $runtime = round(microtime(true) - Container::get('app')->getBeginTime(), 10); + $reqs = $runtime > 0 ? number_format(1 / $runtime, 2) : '∞'; + $time_str = ' [运行时间:' . number_format($runtime, 6) . 's][吞吐率:' . $reqs . 'req/s]'; + $memory_use = number_format((memory_get_usage() - Container::get('app')->getBeginMem()) / 1024, 2); + $memory_str = ' [内存消耗:' . $memory_use . 'kb]'; + $file_load = ' [文件加载:' . count(get_included_files()) . ']'; + + if (isset($_SERVER['HTTP_HOST'])) { + $current_uri = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; + } else { + $current_uri = 'cmd:' . implode(' ', $_SERVER['argv']); + } + + // 基本信息 + $trace[] = [ + 'type' => 'group', + 'msg' => $current_uri . $time_str . $memory_str . $file_load, + 'css' => $this->css['page'], + ]; + } + + foreach ($log as $type => $val) { + $trace[] = [ + 'type' => 'groupCollapsed', + 'msg' => '[ ' . $type . ' ]', + 'css' => isset($this->css[$type]) ? $this->css[$type] : '', + ]; + + foreach ($val as $msg) { + if (!is_string($msg)) { + $msg = var_export($msg, true); + } + $trace[] = [ + 'type' => 'log', + 'msg' => $msg, + 'css' => '', + ]; + } + + $trace[] = [ + 'type' => 'groupEnd', + 'msg' => '', + 'css' => '', + ]; + } + + if ($this->config['show_included_files']) { + $trace[] = [ + 'type' => 'groupCollapsed', + 'msg' => '[ file ]', + 'css' => '', + ]; + + $trace[] = [ + 'type' => 'log', + 'msg' => implode("\n", get_included_files()), + 'css' => '', + ]; + + $trace[] = [ + 'type' => 'groupEnd', + 'msg' => '', + 'css' => '', + ]; + } + + $trace[] = [ + 'type' => 'groupEnd', + 'msg' => '', + 'css' => '', + ]; + + $tabid = $this->getClientArg('tabid'); + + if (!$client_id = $this->getClientArg('client_id')) { + $client_id = ''; + } + + if (!empty($this->allowForceClientIds)) { + //强制推送到多个client_id + foreach ($this->allowForceClientIds as $force_client_id) { + $client_id = $force_client_id; + $this->sendToClient($tabid, $client_id, $trace, $force_client_id); + } + } else { + $this->sendToClient($tabid, $client_id, $trace, ''); + } + + return true; + } + + /** + * 发送给指定客户端 + * @access protected + * @author Zjmainstay + * @param $tabid + * @param $client_id + * @param $logs + * @param $force_client_id + */ + protected function sendToClient($tabid, $client_id, $logs, $force_client_id) + { + $logs = [ + 'tabid' => $tabid, + 'client_id' => $client_id, + 'logs' => $logs, + 'force_client_id' => $force_client_id, + ]; + + $msg = @json_encode($logs); + $address = '/' . $client_id; //将client_id作为地址, server端通过地址判断将日志发布给谁 + + $this->send($this->config['host'], $msg, $address); + } + + protected function check() + { + $tabid = $this->getClientArg('tabid'); + + //是否记录日志的检查 + if (!$tabid && !$this->config['force_client_ids']) { + return false; + } + + //用户认证 + $allow_client_ids = $this->config['allow_client_ids']; + + if (!empty($allow_client_ids)) { + //通过数组交集得出授权强制推送的client_id + $this->allowForceClientIds = array_intersect($allow_client_ids, $this->config['force_client_ids']); + if (!$tabid && count($this->allowForceClientIds)) { + return true; + } + + $client_id = $this->getClientArg('client_id'); + if (!in_array($client_id, $allow_client_ids)) { + return false; + } + } else { + $this->allowForceClientIds = $this->config['force_client_ids']; + } + + return true; + } + + protected function getClientArg($name) + { + static $args = []; + + $key = 'HTTP_USER_AGENT'; + + if (isset($_SERVER['HTTP_SOCKETLOG'])) { + $key = 'HTTP_SOCKETLOG'; + } + + if (!isset($_SERVER[$key])) { + return; + } + + if (empty($args)) { + if (!preg_match('/SocketLog\((.*?)\)/', $_SERVER[$key], $match)) { + $args = ['tabid' => null]; + return; + } + parse_str($match[1], $args); + } + + if (isset($args[$name])) { + return $args[$name]; + } + + return; + } + + /** + * @access protected + * @param string $host - $host of socket server + * @param string $message - 发送的消息 + * @param string $address - 地址 + * @return bool + */ + protected function send($host, $message = '', $address = '/') + { + $url = 'http://' . $host . ':' . $this->port . $address; + $ch = curl_init(); + + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, $message); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); + curl_setopt($ch, CURLOPT_TIMEOUT, 10); + + $headers = [ + "Content-Type: application/json;charset=UTF-8", + ]; + + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //设置header + + return curl_exec($ch); + } + +} diff --git a/thinkphp/library/think/log/driver/Test.php b/thinkphp/library/think/log/driver/Test.php new file mode 100644 index 000000000..e67f74727 --- /dev/null +++ b/thinkphp/library/think/log/driver/Test.php @@ -0,0 +1,30 @@ + +// +---------------------------------------------------------------------- + +namespace think\log\driver; + +/** + * 模拟测试输出 + */ +class Test +{ + /** + * 日志写入接口 + * @access public + * @param array $log 日志信息 + * @return bool + */ + public function save(array $log = []) + { + return true; + } + +} diff --git a/thinkphp/library/think/model/Collection.php b/thinkphp/library/think/model/Collection.php new file mode 100644 index 000000000..1b6061a27 --- /dev/null +++ b/thinkphp/library/think/model/Collection.php @@ -0,0 +1,84 @@ + +// +---------------------------------------------------------------------- + +namespace think\model; + +use think\Collection as BaseCollection; +use think\Model; + +class Collection extends BaseCollection +{ + /** + * 延迟预载入关联查询 + * @access public + * @param mixed $relation 关联 + * @return $this + */ + public function load($relation) + { + $item = current($this->items); + $item->eagerlyResultSet($this->items, $relation); + + return $this; + } + + /** + * 设置需要隐藏的输出属性 + * @access public + * @param array $hidden 属性列表 + * @param bool $override 是否覆盖 + * @return $this + */ + public function hidden($hidden = [], $override = false) + { + $this->each(function ($model) use ($hidden, $override) { + /** @var Model $model */ + $model->hidden($hidden, $override); + }); + + return $this; + } + + /** + * 设置需要输出的属性 + * @access public + * @param array $visible + * @param bool $override 是否覆盖 + * @return $this + */ + public function visible($visible = [], $override = false) + { + $this->each(function ($model) use ($visible, $override) { + /** @var Model $model */ + $model->visible($visible, $override); + }); + + return $this; + } + + /** + * 设置需要追加的输出属性 + * @access public + * @param array $append 属性列表 + * @param bool $override 是否覆盖 + * @return $this + */ + public function append($append = [], $override = false) + { + $this->each(function ($model) use ($append, $override) { + /** @var Model $model */ + $model && $model->append($append, $override); + }); + + return $this; + } + +} diff --git a/thinkphp/library/think/model/Pivot.php b/thinkphp/library/think/model/Pivot.php new file mode 100644 index 000000000..a3a395e3f --- /dev/null +++ b/thinkphp/library/think/model/Pivot.php @@ -0,0 +1,42 @@ + +// +---------------------------------------------------------------------- + +namespace think\model; + +use think\Model; + +class Pivot extends Model +{ + + /** @var Model */ + public $parent; + + protected $autoWriteTimestamp = false; + + /** + * 架构函数 + * @access public + * @param array|object $data 数据 + * @param Model $parent 上级模型 + * @param string $table 中间数据表名 + */ + public function __construct($data = [], Model $parent = null, $table = '') + { + $this->parent = $parent; + + if (is_null($this->name)) { + $this->name = $table; + } + + parent::__construct($data); + } + +} diff --git a/thinkphp/library/think/model/Relation.php b/thinkphp/library/think/model/Relation.php new file mode 100644 index 000000000..315fb28da --- /dev/null +++ b/thinkphp/library/think/model/Relation.php @@ -0,0 +1,151 @@ + +// +---------------------------------------------------------------------- + +namespace think\model; + +use think\db\Query; +use think\Exception; +use think\Model; + +/** + * Class Relation + * @package think\model + * + * @mixin Query + */ +abstract class Relation +{ + // 父模型对象 + protected $parent; + /** @var Model 当前关联的模型类 */ + protected $model; + /** @var Query 关联模型查询对象 */ + protected $query; + // 关联表外键 + protected $foreignKey; + // 关联表主键 + protected $localKey; + // 基础查询 + protected $baseQuery; + // 是否为自关联 + protected $selfRelation; + + /** + * 获取关联的所属模型 + * @access public + * @return Model + */ + public function getParent() + { + return $this->parent; + } + + /** + * 获取当前的关联模型类的实例 + * @access public + * @return Model + */ + public function getModel() + { + return $this->query->getModel(); + } + + /** + * 设置当前关联为自关联 + * @access public + * @param bool $self 是否自关联 + * @return $this + */ + public function selfRelation($self = true) + { + $this->selfRelation = $self; + return $this; + } + + /** + * 当前关联是否为自关联 + * @access public + * @return bool + */ + public function isSelfRelation() + { + return $this->selfRelation; + } + + /** + * 封装关联数据集 + * @access public + * @param array $resultSet 数据集 + * @return mixed + */ + protected function resultSetBuild($resultSet) + { + return (new $this->model)->toCollection($resultSet); + } + + protected function getQueryFields($model) + { + $fields = $this->query->getOptions('field'); + return $this->getRelationQueryFields($fields, $model); + } + + protected function getRelationQueryFields($fields, $model) + { + if ($fields) { + + if (is_string($fields)) { + $fields = explode(',', $fields); + } + + foreach ($fields as &$field) { + if (false === strpos($field, '.')) { + $field = $model . '.' . $field; + } + } + } else { + $fields = $model . '.*'; + } + + return $fields; + } + + protected function getQueryWhere(&$where, $relation) + { + foreach ($where as $key => $val) { + if (is_string($key)) { + $where[] = [false === strpos($key, '.') ? $relation . '.' . $key : $key, '=', $val]; + unset($where[$key]); + } + } + } + + /** + * 执行基础查询(仅执行一次) + * @access protected + * @return void + */ + protected function baseQuery() + {} + + public function __call($method, $args) + { + if ($this->query) { + // 执行基础查询 + $this->baseQuery(); + + $result = call_user_func_array([$this->query->getModel(), $method], $args); + + return $result === $this->query ? $this : $result; + } else { + throw new Exception('method not exists:' . __CLASS__ . '->' . $method); + } + } +} diff --git a/thinkphp/library/think/model/concern/Attribute.php b/thinkphp/library/think/model/concern/Attribute.php new file mode 100644 index 000000000..c91cd835a --- /dev/null +++ b/thinkphp/library/think/model/concern/Attribute.php @@ -0,0 +1,574 @@ + +// +---------------------------------------------------------------------- + +namespace think\model\concern; + +use InvalidArgumentException; +use think\Exception; +use think\Loader; +use think\model\Relation; + +trait Attribute +{ + /** + * 数据表主键 复合主键使用数组定义 + * @var string|array + */ + protected $pk = 'id'; + + /** + * 数据表字段信息 留空则自动获取 + * @var array + */ + protected $field = []; + + /** + * JSON数据表字段 + * @var array + */ + protected $json = []; + + /** + * 数据表废弃字段 + * @var array + */ + protected $disuse = []; + + /** + * 数据表只读字段 + * @var array + */ + protected $readonly = []; + + /** + * 数据表字段类型 + * @var array + */ + protected $type = []; + + /** + * 当前模型数据 + * @var array + */ + private $data = []; + + /** + * 原始数据 + * @var array + */ + private $origin = []; + + /** + * 获取模型对象的主键 + * @access public + * @return string|array + */ + public function getPk() + { + return $this->pk; + } + + /** + * 判断一个字段名是否为主键字段 + * @access public + * @param string $key 名称 + * @return bool + */ + protected function isPk($key) + { + $pk = $this->getPk(); + if (is_string($pk) && $pk == $key) { + return true; + } elseif (is_array($pk) && in_array($key, $pk)) { + return true; + } + + return false; + } + + /** + * 设置允许写入的字段 + * @access public + * @param array|string|true $field 允许写入的字段 如果为true只允许写入数据表字段 + * @return $this + */ + public function allowField($field) + { + if (is_string($field)) { + $field = explode(',', $field); + } + + $this->field = $field; + + return $this; + } + + /** + * 设置只读字段 + * @access public + * @param array|string $field 只读字段 + * @return $this + */ + public function readonly($field) + { + if (is_string($field)) { + $field = explode(',', $field); + } + + $this->readonly = $field; + + return $this; + } + + /** + * 设置数据对象值 + * @access public + * @param mixed $data 数据或者属性名 + * @param mixed $value 值 + * @return $this + */ + public function data($data, $value = null) + { + if (is_string($data)) { + $this->data[$data] = $value; + return $this; + } + + // 清空数据 + $this->data = []; + + if (is_object($data)) { + $data = get_object_vars($data); + } + + if ($this->disuse) { + // 废弃字段 + foreach ((array) $this->disuse as $key) { + if (array_key_exists($key, $data)) { + unset($data[$key]); + } + } + } + + if (true === $value) { + // 数据对象赋值 + foreach ($data as $key => $value) { + $this->setAttr($key, $value, $data); + } + } elseif (is_array($value)) { + foreach ($value as $name) { + if (isset($data[$name])) { + $this->data[$name] = $data[$name]; + } + } + } else { + $this->data = $data; + } + + return $this; + } + + /** + * 批量设置数据对象值 + * @access public + * @param mixed $data 数据 + * @param bool $set 是否需要进行数据处理 + * @return $this + */ + public function appendData($data, $set = false) + { + if ($set) { + // 进行数据处理 + foreach ($data as $key => $value) { + $this->setAttr($key, $value, $data); + } + } else { + if (is_object($data)) { + $data = get_object_vars($data); + } + + $this->data = array_merge($this->data, $data); + } + + return $this; + } + + /** + * 获取对象原始数据 如果不存在指定字段返回null + * @access public + * @param string $name 字段名 留空获取全部 + * @return mixed + */ + public function getOrigin($name = null) + { + if (is_null($name)) { + return $this->origin; + } + return array_key_exists($name, $this->origin) ? $this->origin[$name] : null; + } + + /** + * 获取对象原始数据 如果不存在指定字段返回false + * @access public + * @param string $name 字段名 留空获取全部 + * @return mixed + * @throws InvalidArgumentException + */ + public function getData($name = null) + { + if (is_null($name)) { + return $this->data; + } elseif (array_key_exists($name, $this->data)) { + return $this->data[$name]; + } elseif (array_key_exists($name, $this->relation)) { + return $this->relation[$name]; + } + throw new InvalidArgumentException('property not exists:' . static::class . '->' . $name); + } + + /** + * 获取变化的数据 并排除只读数据 + * @access public + * @return array + */ + public function getChangedData() + { + if ($this->force) { + $data = $this->data; + } else { + $data = array_udiff_assoc($this->data, $this->origin, function ($a, $b) { + if ((empty($a) || empty($b)) && $a !== $b) { + return 1; + } + + return is_object($a) || $a != $b ? 1 : 0; + }); + } + + if (!empty($this->readonly)) { + // 只读字段不允许更新 + foreach ($this->readonly as $key => $field) { + if (isset($data[$field])) { + unset($data[$field]); + } + } + } + + return $data; + } + + /** + * 修改器 设置数据对象值 + * @access public + * @param string $name 属性名 + * @param mixed $value 属性值 + * @param array $data 数据 + * @return $this + */ + public function setAttr($name, $value, $data = []) + { + if (is_null($value) && $this->autoWriteTimestamp && in_array($name, [$this->createTime, $this->updateTime])) { + // 自动写入的时间戳字段 + $value = $this->autoWriteTimestamp($name); + } else { + // 检测修改器 + $method = 'set' . Loader::parseName($name, 1) . 'Attr'; + + if (method_exists($this, $method)) { + $value = $this->$method($value, array_merge($this->data, $data)); + } elseif (isset($this->type[$name])) { + // 类型转换 + $value = $this->writeTransform($value, $this->type[$name]); + } + } + + // 设置数据对象属性 + $this->data[$name] = $value; + + return $this; + } + + /** + * 是否需要自动写入时间字段 + * @access public + * @param bool $auto + * @return $this + */ + public function isAutoWriteTimestamp($auto) + { + $this->autoWriteTimestamp = $auto; + + return $this; + } + + /** + * 自动写入时间戳 + * @access protected + * @param string $name 时间戳字段 + * @return mixed + */ + protected function autoWriteTimestamp($name) + { + if (isset($this->type[$name])) { + $type = $this->type[$name]; + + if (strpos($type, ':')) { + list($type, $param) = explode(':', $type, 2); + } + + switch ($type) { + case 'datetime': + case 'date': + $format = !empty($param) ? $param : $this->dateFormat; + $value = $this->formatDateTime(time(), $format); + break; + case 'timestamp': + case 'integer': + default: + $value = time(); + break; + } + } elseif (is_string($this->autoWriteTimestamp) && in_array(strtolower($this->autoWriteTimestamp), [ + 'datetime', + 'date', + 'timestamp', + ])) { + $value = $this->formatDateTime(time(), $this->dateFormat); + } else { + $value = $this->formatDateTime(time(), $this->dateFormat, true); + } + + return $value; + } + + /** + * 数据写入 类型转换 + * @access protected + * @param mixed $value 值 + * @param string|array $type 要转换的类型 + * @return mixed + */ + protected function writeTransform($value, $type) + { + if (is_null($value)) { + return; + } + + if (is_array($type)) { + list($type, $param) = $type; + } elseif (strpos($type, ':')) { + list($type, $param) = explode(':', $type, 2); + } + + switch ($type) { + case 'integer': + $value = (int) $value; + break; + case 'float': + if (empty($param)) { + $value = (float) $value; + } else { + $value = (float) number_format($value, $param, '.', ''); + } + break; + case 'boolean': + $value = (bool) $value; + break; + case 'timestamp': + if (!is_numeric($value)) { + $value = strtotime($value); + } + break; + case 'datetime': + $format = !empty($param) ? $param : $this->dateFormat; + $value = is_numeric($value) ? $value : strtotime($value); + $value = $this->formatDateTime($value, $format); + break; + case 'object': + if (is_object($value)) { + $value = json_encode($value, JSON_FORCE_OBJECT); + } + break; + case 'array': + $value = (array) $value; + case 'json': + $option = !empty($param) ? (int) $param : JSON_UNESCAPED_UNICODE; + $value = json_encode($value, $option); + break; + case 'serialize': + $value = serialize($value); + break; + } + + return $value; + } + + /** + * 获取器 获取数据对象的值 + * @access public + * @param string $name 名称 + * @param array $item 数据 + * @return mixed + * @throws InvalidArgumentException + */ + public function getAttr($name, &$item = null) + { + try { + $notFound = false; + $value = $this->getData($name); + } catch (InvalidArgumentException $e) { + $notFound = true; + $value = null; + } + + // 检测属性获取器 + $method = 'get' . Loader::parseName($name, 1) . 'Attr'; + + if (method_exists($this, $method)) { + if ($notFound && $relation = $this->isRelationAttr($name)) { + $modelRelation = $this->$relation(); + $value = $this->getRelationData($modelRelation); + } + + $value = $this->$method($value, $this->data); + } elseif (isset($this->type[$name])) { + // 类型转换 + $value = $this->readTransform($value, $this->type[$name]); + } elseif (in_array($name, [$this->createTime, $this->updateTime])) { + if (is_string($this->autoWriteTimestamp) && in_array(strtolower($this->autoWriteTimestamp), [ + 'datetime', + 'date', + 'timestamp', + ])) { + $value = $this->formatDateTime(strtotime($value), $this->dateFormat); + } else { + $value = $this->formatDateTime($value, $this->dateFormat); + } + } elseif ($notFound) { + $value = $this->getRelationAttribute($name, $item); + } + + return $value; + } + + /** + * 获取关联属性值 + * @access protected + * @param string $name 属性名 + * @param array $item 数据 + * @return mixed + */ + protected function getRelationAttribute($name, &$item) + { + $relation = $this->isRelationAttr($name); + + if ($relation) { + $modelRelation = $this->$relation(); + if ($modelRelation instanceof Relation) { + $value = $this->getRelationData($modelRelation); + + if ($item && method_exists($modelRelation, 'getBindAttr') && $bindAttr = $modelRelation->getBindAttr()) { + + foreach ($bindAttr as $key => $attr) { + $key = is_numeric($key) ? $attr : $key; + + if (isset($item[$key])) { + throw new Exception('bind attr has exists:' . $key); + } else { + $item[$key] = $value ? $value->getAttr($attr) : null; + } + } + + return false; + } + + // 保存关联对象值 + $this->relation[$name] = $value; + + return $value; + } + } + + throw new InvalidArgumentException('property not exists:' . static::class . '->' . $name); + } + + /** + * 数据读取 类型转换 + * @access protected + * @param mixed $value 值 + * @param string|array $type 要转换的类型 + * @return mixed + */ + protected function readTransform($value, $type) + { + if (is_null($value)) { + return; + } + + if (is_array($type)) { + list($type, $param) = $type; + } elseif (strpos($type, ':')) { + list($type, $param) = explode(':', $type, 2); + } + + switch ($type) { + case 'integer': + $value = (int) $value; + break; + case 'float': + if (empty($param)) { + $value = (float) $value; + } else { + $value = (float) number_format($value, $param, '.', ''); + } + break; + case 'boolean': + $value = (bool) $value; + break; + case 'timestamp': + if (!is_null($value)) { + $format = !empty($param) ? $param : $this->dateFormat; + $value = $this->formatDateTime($value, $format); + } + break; + case 'datetime': + if (!is_null($value)) { + $format = !empty($param) ? $param : $this->dateFormat; + $value = $this->formatDateTime(strtotime($value), $format); + } + break; + case 'json': + $value = json_decode($value, true); + break; + case 'array': + $value = empty($value) ? [] : json_decode($value, true); + break; + case 'object': + $value = empty($value) ? new \stdClass() : json_decode($value); + break; + case 'serialize': + try { + $value = unserialize($value); + } catch (\Exception $e) { + $value = null; + } + break; + default: + if (false !== strpos($type, '\\')) { + // 对象类型 + $value = new $type($value); + } + } + + return $value; + } + +} diff --git a/thinkphp/library/think/model/concern/Conversion.php b/thinkphp/library/think/model/concern/Conversion.php new file mode 100644 index 000000000..697e495bf --- /dev/null +++ b/thinkphp/library/think/model/concern/Conversion.php @@ -0,0 +1,276 @@ + +// +---------------------------------------------------------------------- + +namespace think\model\concern; + +use think\Collection; +use think\Exception; +use think\Loader; +use think\Model; +use think\model\Collection as ModelCollection; + +/** + * 模型数据转换处理 + */ +trait Conversion +{ + /** + * 数据输出显示的属性 + * @var array + */ + protected $visible = []; + + /** + * 数据输出隐藏的属性 + * @var array + */ + protected $hidden = []; + + /** + * 数据输出需要追加的属性 + * @var array + */ + protected $append = []; + + /** + * 数据集对象名 + * @var string + */ + protected $resultSetType; + + /** + * 设置需要附加的输出属性 + * @access public + * @param array $append 属性列表 + * @param bool $override 是否覆盖 + * @return $this + */ + public function append($append = [], $override = false) + { + $this->append = $override ? $append : array_merge($this->append, $append); + + return $this; + } + + /** + * 设置附加关联对象的属性 + * @access public + * @param string $attr 关联属性 + * @param string|array $append 追加属性名 + * @return $this + * @throws Exception + */ + public function appendRelationAttr($attr, $append) + { + if (is_string($append)) { + $append = explode(',', $append); + } + + $relation = Loader::parseName($attr, 1, false); + if (isset($this->relation[$relation])) { + $model = $this->relation[$relation]; + } else { + $model = $this->getRelationData($this->$relation()); + } + + if ($model instanceof Model) { + foreach ($append as $key => $attr) { + $key = is_numeric($key) ? $attr : $key; + if (isset($this->data[$key])) { + throw new Exception('bind attr has exists:' . $key); + } else { + $this->data[$key] = $model->$attr; + } + } + } + + return $this; + } + + /** + * 设置需要隐藏的输出属性 + * @access public + * @param array $hidden 属性列表 + * @param bool $override 是否覆盖 + * @return $this + */ + public function hidden($hidden = [], $override = false) + { + $this->hidden = $override ? $hidden : array_merge($this->hidden, $hidden); + + return $this; + } + + /** + * 设置需要输出的属性 + * @access public + * @param array $visible + * @param bool $override 是否覆盖 + * @return $this + */ + public function visible($visible = [], $override = false) + { + $this->visible = $override ? $visible : array_merge($this->visible, $visible); + + return $this; + } + + /** + * 转换当前模型对象为数组 + * @access public + * @return array + */ + public function toArray() + { + $item = []; + $visible = []; + $hidden = []; + + // 合并关联数据 + $data = array_merge($this->data, $this->relation); + + // 过滤属性 + if (!empty($this->visible)) { + $array = $this->parseAttr($this->visible, $visible); + $data = array_intersect_key($data, array_flip($array)); + } elseif (!empty($this->hidden)) { + $array = $this->parseAttr($this->hidden, $hidden, false); + $data = array_diff_key($data, array_flip($array)); + } + + foreach ($data as $key => $val) { + if ($val instanceof Model || $val instanceof ModelCollection) { + // 关联模型对象 + if (isset($visible[$key])) { + $val->visible($visible[$key]); + } elseif (isset($hidden[$key])) { + $val->hidden($hidden[$key]); + } + // 关联模型对象 + $item[$key] = $val->toArray(); + } else { + // 模型属性 + $item[$key] = $this->getAttr($key); + } + } + + // 追加属性(必须定义获取器) + if (!empty($this->append)) { + foreach ($this->append as $key => $name) { + if (is_array($name)) { + // 追加关联对象属性 + $relation = $this->getAttr($key); + $item[$key] = $relation->append($name)->toArray(); + } elseif (strpos($name, '.')) { + list($key, $attr) = explode('.', $name); + // 追加关联对象属性 + $relation = $this->getAttr($key); + $item[$key] = $relation->append([$attr])->toArray(); + } else { + $value = $this->getAttr($name, $item); + if (false !== $value) { + $item[$name] = $value; + } + } + } + } + + return $item; + } + + /** + * 转换当前模型对象为JSON字符串 + * @access public + * @param integer $options json参数 + * @return string + */ + public function toJson($options = JSON_UNESCAPED_UNICODE) + { + return json_encode($this->toArray(), $options); + } + + /** + * 移除当前模型的关联属性 + * @access public + * @return $this + */ + public function removeRelation() + { + $this->relation = []; + return $this; + } + + public function __toString() + { + return $this->toJson(); + } + + // JsonSerializable + public function jsonSerialize() + { + return $this->toArray(); + } + + /** + * 转换数据集为数据集对象 + * @access public + * @param array|Collection $collection 数据集 + * @param string $resultSetType 数据集类 + * @return Collection + */ + public function toCollection($collection, $resultSetType = null) + { + $resultSetType = $resultSetType ?: $this->resultSetType; + + if ($resultSetType && false !== strpos($resultSetType, '\\')) { + $collection = new $resultSetType($collection); + } else { + $collection = new ModelCollection($collection); + } + + return $collection; + } + + /** + * 解析隐藏及显示属性 + * @access protected + * @param array $attrs 属性 + * @param array $result 结果集 + * @param bool $visible + * @return array + */ + protected function parseAttr($attrs, &$result, $visible = true) + { + $array = []; + + foreach ($attrs as $key => $val) { + if (is_array($val)) { + if ($visible) { + $array[] = $key; + } + + $result[$key] = $val; + } elseif (strpos($val, '.')) { + list($key, $name) = explode('.', $val); + + if ($visible) { + $array[] = $key; + } + + $result[$key][] = $name; + } else { + $array[] = $val; + } + } + + return $array; + } +} diff --git a/thinkphp/library/think/model/concern/ModelEvent.php b/thinkphp/library/think/model/concern/ModelEvent.php new file mode 100644 index 000000000..1f5bdafcd --- /dev/null +++ b/thinkphp/library/think/model/concern/ModelEvent.php @@ -0,0 +1,157 @@ + +// +---------------------------------------------------------------------- + +namespace think\model\concern; + +use think\Container; + +/** + * 模型事件处理 + */ +trait ModelEvent +{ + /** + * 模型回调 + * @var array + */ + private static $event = []; + + /** + * 注册回调方法 + * @access public + * @param string $event 事件名 + * @param callable $callback 回调方法 + * @param bool $override 是否覆盖 + * @return void + */ + public static function event($event, $callback, $override = false) + { + $class = static::class; + + if ($override) { + self::$event[$class][$event] = []; + } + + self::$event[$class][$event][] = $callback; + } + + /** + * 触发事件 + * @access protected + * @param string $event 事件名 + * @return bool + */ + protected function trigger($event) + { + $class = static::class; + + if (isset(self::$event[$class][$event])) { + foreach (self::$event[$class][$event] as $callback) { + $result = Container::getInstance()->invoke($callback, [$this]); + + if (false === $result) { + return false; + } + } + } + + return true; + } + + /** + * 模型before_insert事件快捷方法 + * @access protected + * @param callable $callback + * @param bool $override + */ + protected static function beforeInsert($callback, $override = false) + { + self::event('before_insert', $callback, $override); + } + + /** + * 模型after_insert事件快捷方法 + * @access protected + * @param callable $callback + * @param bool $override + */ + protected static function afterInsert($callback, $override = false) + { + self::event('after_insert', $callback, $override); + } + + /** + * 模型before_update事件快捷方法 + * @access protected + * @param callable $callback + * @param bool $override + */ + protected static function beforeUpdate($callback, $override = false) + { + self::event('before_update', $callback, $override); + } + + /** + * 模型after_update事件快捷方法 + * @access protected + * @param callable $callback + * @param bool $override + */ + protected static function afterUpdate($callback, $override = false) + { + self::event('after_update', $callback, $override); + } + + /** + * 模型before_write事件快捷方法 + * @access protected + * @param callable $callback + * @param bool $override + */ + protected static function beforeWrite($callback, $override = false) + { + self::event('before_write', $callback, $override); + } + + /** + * 模型after_write事件快捷方法 + * @access protected + * @param callable $callback + * @param bool $override + */ + protected static function afterWrite($callback, $override = false) + { + self::event('after_write', $callback, $override); + } + + /** + * 模型before_delete事件快捷方法 + * @access protected + * @param callable $callback + * @param bool $override + */ + protected static function beforeDelete($callback, $override = false) + { + self::event('before_delete', $callback, $override); + } + + /** + * 模型after_delete事件快捷方法 + * @access protected + * @param callable $callback + * @param bool $override + */ + protected static function afterDelete($callback, $override = false) + { + self::event('after_delete', $callback, $override); + } + +} diff --git a/thinkphp/library/think/model/concern/RelationShip.php b/thinkphp/library/think/model/concern/RelationShip.php new file mode 100644 index 000000000..2c993bd20 --- /dev/null +++ b/thinkphp/library/think/model/concern/RelationShip.php @@ -0,0 +1,643 @@ + +// +---------------------------------------------------------------------- + +namespace think\model\concern; + +use think\Collection; +use think\db\Query; +use think\Loader; +use think\Model; +use think\model\Relation; +use think\model\relation\BelongsTo; +use think\model\relation\BelongsToMany; +use think\model\relation\HasMany; +use think\model\relation\HasManyThrough; +use think\model\relation\HasOne; +use think\model\relation\MorphMany; +use think\model\relation\MorphOne; +use think\model\relation\MorphTo; + +/** + * 模型关联处理 + */ +trait RelationShip +{ + /** + * 父关联模型对象 + * @var object + */ + private $parent; + + /** + * 模型关联数据 + * @var array + */ + private $relation = []; + + /** + * 关联写入定义信息 + * @var array + */ + private $together; + + /** + * 关联自动写入信息 + * @var array + */ + protected $relationWrite; + + /** + * 设置父关联对象 + * @access public + * @param Model $model 模型对象 + * @return $this + */ + public function setParent($model) + { + $this->parent = $model; + + return $this; + } + + /** + * 获取父关联对象 + * @access public + * @return Model + */ + public function getParent() + { + return $this->parent; + } + + /** + * 获取当前模型的关联模型数据 + * @access public + * @param string $name 关联方法名 + * @return mixed + */ + public function getRelation($name = null) + { + if (is_null($name)) { + return $this->relation; + } elseif (array_key_exists($name, $this->relation)) { + return $this->relation[$name]; + } + return; + } + + /** + * 设置关联数据对象值 + * @access public + * @param string $name 属性名 + * @param mixed $value 属性值 + * @param array $data 数据 + * @return $this + */ + public function setRelation($name, $value, $data = []) + { + // 检测修改器 + $method = 'set' . Loader::parseName($name, 1) . 'Attr'; + + if (method_exists($this, $method)) { + $value = $this->$method($value, array_merge($this->data, $data)); + } + + $this->relation[$name] = $value; + + return $this; + } + + /** + * 关联数据写入 + * @access public + * @param array|string $relation 关联 + * @return $this + */ + public function together($relation) + { + if (is_string($relation)) { + $relation = explode(',', $relation); + } + + $this->together = $relation; + + $this->checkAutoRelationWrite(); + + return $this; + } + + /** + * 根据关联条件查询当前模型 + * @access public + * @param string $relation 关联方法名 + * @param mixed $operator 比较操作符 + * @param integer $count 个数 + * @param string $id 关联表的统计字段 + * @param string $joinType JOIN类型 + * @return Query + */ + public static function has($relation, $operator = '>=', $count = 1, $id = '*', $joinType = 'INNER') + { + $relation = (new static())->$relation(); + + if (is_array($operator) || $operator instanceof \Closure) { + return $relation->hasWhere($operator); + } + + return $relation->has($operator, $count, $id, $joinType); + } + + /** + * 根据关联条件查询当前模型 + * @access public + * @param string $relation 关联方法名 + * @param mixed $where 查询条件(数组或者闭包) + * @param mixed $fields 字段 + * @return Query + */ + public static function hasWhere($relation, $where = [], $fields = '*') + { + return (new static())->$relation()->hasWhere($where, $fields); + } + + /** + * 查询当前模型的关联数据 + * @access public + * @param string|array $relations 关联名 + * @return $this + */ + public function relationQuery($relations) + { + if (is_string($relations)) { + $relations = explode(',', $relations); + } + + foreach ($relations as $key => $relation) { + $subRelation = ''; + $closure = null; + + if ($relation instanceof \Closure) { + // 支持闭包查询过滤关联条件 + $closure = $relation; + $relation = $key; + } + + if (is_array($relation)) { + $subRelation = $relation; + $relation = $key; + } elseif (strpos($relation, '.')) { + list($relation, $subRelation) = explode('.', $relation, 2); + } + + $method = Loader::parseName($relation, 1, false); + + $this->relation[$relation] = $this->$method()->getRelation($subRelation, $closure); + } + + return $this; + } + + /** + * 预载入关联查询 返回数据集 + * @access public + * @param array $resultSet 数据集 + * @param string $relation 关联名 + * @return array + */ + public function eagerlyResultSet(&$resultSet, $relation) + { + $relations = is_string($relation) ? explode(',', $relation) : $relation; + + foreach ($relations as $key => $relation) { + $subRelation = ''; + $closure = false; + + if ($relation instanceof \Closure) { + $closure = $relation; + $relation = $key; + } + + if (is_array($relation)) { + $subRelation = $relation; + $relation = $key; + } elseif (strpos($relation, '.')) { + list($relation, $subRelation) = explode('.', $relation, 2); + } + + $relation = Loader::parseName($relation, 1, false); + + $this->$relation()->eagerlyResultSet($resultSet, $relation, $subRelation, $closure); + } + } + + /** + * 预载入关联查询 返回模型对象 + * @access public + * @param Model $result 数据对象 + * @param string $relation 关联名 + * @return Model + */ + public function eagerlyResult(&$result, $relation) + { + $relations = is_string($relation) ? explode(',', $relation) : $relation; + + foreach ($relations as $key => $relation) { + $subRelation = ''; + $closure = false; + + if ($relation instanceof \Closure) { + $closure = $relation; + $relation = $key; + } + + if (is_array($relation)) { + $subRelation = $relation; + $relation = $key; + } elseif (strpos($relation, '.')) { + list($relation, $subRelation) = explode('.', $relation, 2); + } + + $relation = Loader::parseName($relation, 1, false); + + $this->$relation()->eagerlyResult($result, $relation, $subRelation, $closure); + } + } + + /** + * 关联统计 + * @access public + * @param Model $result 数据对象 + * @param array $relations 关联名 + * @param string $aggregate 聚合查询方法 + * @param string $field 字段 + * @return void + */ + public function relationCount(&$result, $relations, $aggregate = 'sum', $field = '*') + { + foreach ($relations as $key => $relation) { + $closure = false; + + if ($relation instanceof \Closure) { + $closure = $relation; + $relation = $key; + } elseif (is_string($key)) { + $name = $relation; + $relation = $key; + } + + $relation = Loader::parseName($relation, 1, false); + $count = $this->$relation()->relationCount($result, $closure, $aggregate, $field); + + if (!isset($name)) { + $name = Loader::parseName($relation) . '_' . $aggregate; + } + + $result->setAttr($name, $count); + } + } + + /** + * HAS ONE 关联定义 + * @access public + * @param string $model 模型名 + * @param string $foreignKey 关联外键 + * @param string $localKey 当前主键 + * @return HasOne + */ + public function hasOne($model, $foreignKey = '', $localKey = '') + { + // 记录当前关联信息 + $model = $this->parseModel($model); + $localKey = $localKey ?: $this->getPk(); + $foreignKey = $foreignKey ?: $this->getForeignKey($this->name); + + return new HasOne($this, $model, $foreignKey, $localKey); + } + + /** + * BELONGS TO 关联定义 + * @access public + * @param string $model 模型名 + * @param string $foreignKey 关联外键 + * @param string $localKey 关联主键 + * @return BelongsTo + */ + public function belongsTo($model, $foreignKey = '', $localKey = '') + { + // 记录当前关联信息 + $model = $this->parseModel($model); + $foreignKey = $foreignKey ?: $this->getForeignKey((new $model)->getName()); + $localKey = $localKey ?: (new $model)->getPk(); + $trace = debug_backtrace(false, 2); + $relation = Loader::parseName($trace[1]['function']); + + return new BelongsTo($this, $model, $foreignKey, $localKey, $relation); + } + + /** + * HAS MANY 关联定义 + * @access public + * @param string $model 模型名 + * @param string $foreignKey 关联外键 + * @param string $localKey 当前主键 + * @return HasMany + */ + public function hasMany($model, $foreignKey = '', $localKey = '') + { + // 记录当前关联信息 + $model = $this->parseModel($model); + $localKey = $localKey ?: $this->getPk(); + $foreignKey = $foreignKey ?: $this->getForeignKey($this->name); + + return new HasMany($this, $model, $foreignKey, $localKey); + } + + /** + * HAS MANY 远程关联定义 + * @access public + * @param string $model 模型名 + * @param string $through 中间模型名 + * @param string $foreignKey 关联外键 + * @param string $throughKey 关联外键 + * @param string $localKey 当前主键 + * @return HasManyThrough + */ + public function hasManyThrough($model, $through, $foreignKey = '', $throughKey = '', $localKey = '') + { + // 记录当前关联信息 + $model = $this->parseModel($model); + $through = $this->parseModel($through); + $localKey = $localKey ?: $this->getPk(); + $foreignKey = $foreignKey ?: $this->getForeignKey($this->name); + $throughKey = $throughKey ?: $this->getForeignKey((new $through)->getName()); + + return new HasManyThrough($this, $model, $through, $foreignKey, $throughKey, $localKey); + } + + /** + * BELONGS TO MANY 关联定义 + * @access public + * @param string $model 模型名 + * @param string $table 中间表名 + * @param string $foreignKey 关联外键 + * @param string $localKey 当前模型关联键 + * @return BelongsToMany + */ + public function belongsToMany($model, $table = '', $foreignKey = '', $localKey = '') + { + // 记录当前关联信息 + $model = $this->parseModel($model); + $name = Loader::parseName(basename(str_replace('\\', '/', $model))); + $table = $table ?: Loader::parseName($this->name) . '_' . $name; + $foreignKey = $foreignKey ?: $name . '_id'; + $localKey = $localKey ?: $this->getForeignKey($this->name); + + return new BelongsToMany($this, $model, $table, $foreignKey, $localKey); + } + + /** + * MORPH One 关联定义 + * @access public + * @param string $model 模型名 + * @param string|array $morph 多态字段信息 + * @param string $type 多态类型 + * @return MorphOne + */ + public function morphOne($model, $morph = null, $type = '') + { + // 记录当前关联信息 + $model = $this->parseModel($model); + + if (is_null($morph)) { + $trace = debug_backtrace(false, 2); + $morph = Loader::parseName($trace[1]['function']); + } + + if (is_array($morph)) { + list($morphType, $foreignKey) = $morph; + } else { + $morphType = $morph . '_type'; + $foreignKey = $morph . '_id'; + } + + $type = $type ?: get_class($this); + + return new MorphOne($this, $model, $foreignKey, $morphType, $type); + } + + /** + * MORPH MANY 关联定义 + * @access public + * @param string $model 模型名 + * @param string|array $morph 多态字段信息 + * @param string $type 多态类型 + * @return MorphMany + */ + public function morphMany($model, $morph = null, $type = '') + { + // 记录当前关联信息 + $model = $this->parseModel($model); + + if (is_null($morph)) { + $trace = debug_backtrace(false, 2); + $morph = Loader::parseName($trace[1]['function']); + } + + $type = $type ?: get_class($this); + + if (is_array($morph)) { + list($morphType, $foreignKey) = $morph; + } else { + $morphType = $morph . '_type'; + $foreignKey = $morph . '_id'; + } + + return new MorphMany($this, $model, $foreignKey, $morphType, $type); + } + + /** + * MORPH TO 关联定义 + * @access public + * @param string|array $morph 多态字段信息 + * @param array $alias 多态别名定义 + * @return MorphTo + */ + public function morphTo($morph = null, $alias = []) + { + $trace = debug_backtrace(false, 2); + $relation = Loader::parseName($trace[1]['function']); + + if (is_null($morph)) { + $morph = $relation; + } + + // 记录当前关联信息 + if (is_array($morph)) { + list($morphType, $foreignKey) = $morph; + } else { + $morphType = $morph . '_type'; + $foreignKey = $morph . '_id'; + } + + return new MorphTo($this, $morphType, $foreignKey, $alias, $relation); + } + + /** + * 解析模型的完整命名空间 + * @access protected + * @param string $model 模型名(或者完整类名) + * @return string + */ + protected function parseModel($model) + { + if (false === strpos($model, '\\')) { + $path = explode('\\', static::class); + array_pop($path); + array_push($path, Loader::parseName($model, 1)); + $model = implode('\\', $path); + } + + return $model; + } + + /** + * 获取模型的默认外键名 + * @access protected + * @param string $name 模型名 + * @return string + */ + protected function getForeignKey($name) + { + if (strpos($name, '\\')) { + $name = basename(str_replace('\\', '/', $name)); + } + + return Loader::parseName($name) . '_id'; + } + + /** + * 检查属性是否为关联属性 如果是则返回关联方法名 + * @access protected + * @param string $attr 关联属性名 + * @return string|false + */ + protected function isRelationAttr($attr) + { + $relation = Loader::parseName($attr, 1, false); + + if (method_exists($this, $relation)) { + return $relation; + } + + return false; + } + + /** + * 智能获取关联模型数据 + * @access protected + * @param Relation $modelRelation 模型关联对象 + * @return mixed + */ + protected function getRelationData(Relation $modelRelation) + { + if ($this->parent && !$modelRelation->isSelfRelation() && get_class($this->parent) == get_class($modelRelation->getModel())) { + $value = $this->parent; + } else { + // 获取关联数据 + $value = $modelRelation->getRelation(); + } + + return $value; + } + + /** + * 关联数据自动写入检查 + * @access protected + * @return void + */ + protected function checkAutoRelationWrite() + { + foreach ($this->together as $key => $name) { + if (is_array($name)) { + if (key($name) === 0) { + $this->relationWrite[$key] = []; + // 绑定关联属性 + foreach ((array) $name as $val) { + if (isset($this->data[$val])) { + $this->relationWrite[$key][$val] = $this->data[$val]; + } + } + } else { + // 直接传入关联数据 + $this->relationWrite[$key] = $name; + } + } elseif (isset($this->relation[$name])) { + $this->relationWrite[$name] = $this->relation[$name]; + } elseif (isset($this->data[$name])) { + $this->relationWrite[$name] = $this->data[$name]; + unset($this->data[$name]); + } + } + } + + /** + * 自动关联数据更新(针对一对一关联) + * @access protected + * @return void + */ + protected function autoRelationUpdate() + { + foreach ($this->relationWrite as $name => $val) { + if ($val instanceof Model) { + $val->isUpdate()->save(); + } else { + $model = $this->getRelation($name); + if ($model instanceof Model) { + $model->isUpdate()->save($val); + } + } + } + } + + /** + * 自动关联数据写入(针对一对一关联) + * @access protected + * @return void + */ + protected function autoRelationInsert() + { + foreach ($this->relationWrite as $name => $val) { + $method = Loader::parseName($name, 1, false); + $this->$method()->save($val); + } + } + + /** + * 自动关联数据删除(支持一对一及一对多关联) + * @access protected + * @return void + */ + protected function autoRelationDelete() + { + foreach ($this->relationWrite as $key => $name) { + $name = is_numeric($key) ? $name : $key; + $result = $this->getRelation($name); + + if ($result instanceof Model) { + $result->delete(); + } elseif ($result instanceof Collection) { + foreach ($result as $model) { + $model->delete(); + } + } + } + } +} diff --git a/thinkphp/library/think/model/concern/SoftDelete.php b/thinkphp/library/think/model/concern/SoftDelete.php new file mode 100644 index 000000000..68b4c1972 --- /dev/null +++ b/thinkphp/library/think/model/concern/SoftDelete.php @@ -0,0 +1,214 @@ +getDeleteTimeField(); + + if ($field && !empty($this->getOrigin($field))) { + return true; + } + + return false; + } + + /** + * 查询软删除数据 + * @access public + * @return Query + */ + public static function withTrashed() + { + $model = new static(); + + return $model->db(false); + } + + /** + * 只查询软删除数据 + * @access public + * @return Query + */ + public static function onlyTrashed() + { + $model = new static(); + $field = $model->getDeleteTimeField(true); + + if ($field) { + return $model + ->db(false) + ->useSoftDelete($field, $model->getWithTrashedExp()); + } + + return $model->db(false); + } + + /** + * 获取软删除数据的查询条件 + * @access protected + * @return array + */ + protected function getWithTrashedExp() + { + return is_null($this->defaultSoftDelete) ? + ['notnull', ''] : ['<>', $this->defaultSoftDelete]; + } + + /** + * 删除当前的记录 + * @access public + * @param bool $force 是否强制删除 + * @return integer + */ + public function delete($force = false) + { + if (false === $this->trigger('before_delete', $this)) { + return false; + } + + $name = $this->getDeleteTimeField(); + + if ($name && !$force) { + // 软删除 + $this->data($name, $this->autoWriteTimestamp($name)); + + $result = $this->isUpdate()->save(); + } else { + // 读取更新条件 + $where = $this->getWhere(); + + // 删除当前模型数据 + $result = $this->db(false)->where($where)->delete(); + } + + // 关联删除 + if (!empty($this->relationWrite)) { + $this->autoRelationDelete(); + } + + $this->trigger('after_delete', $this); + + // 清空数据 + $this->data = []; + $this->origin = []; + + return $result; + } + + /** + * 删除记录 + * @access public + * @param mixed $data 主键列表 支持闭包查询条件 + * @param bool $force 是否强制删除 + * @return integer 成功删除的记录数 + */ + public static function destroy($data, $force = false) + { + // 包含软删除数据 + $query = self::withTrashed(); + + if (is_array($data) && key($data) !== 0) { + $query->where($data); + $data = null; + } elseif ($data instanceof \Closure) { + call_user_func_array($data, [ & $query]); + $data = null; + } elseif (is_null($data)) { + return 0; + } + + $resultSet = $query->select($data); + $count = 0; + + if ($resultSet) { + foreach ($resultSet as $data) { + $result = $data->delete($force); + $count += $result; + } + } + + return $count; + } + + /** + * 恢复被软删除的记录 + * @access public + * @param array $where 更新条件 + * @return integer + */ + public function restore($where = []) + { + $name = $this->getDeleteTimeField(); + + if (empty($where)) { + $pk = $this->getPk(); + + $where[] = [$pk, '=', $this->getData($pk)]; + } + + if ($name) { + // 恢复删除 + return $this->db(false) + ->where($where) + ->useSoftDelete($name, $this->getWithTrashedExp()) + ->update([$name => $this->defaultSoftDelete]); + } + + return 0; + } + + /** + * 获取软删除字段 + * @access protected + * @param bool $read 是否查询操作 写操作的时候会自动去掉表别名 + * @return string|false + */ + protected function getDeleteTimeField($read = false) + { + $field = property_exists($this, 'deleteTime') && isset($this->deleteTime) ? $this->deleteTime : 'delete_time'; + + if (false === $field) { + return false; + } + + if (!strpos($field, '.')) { + $field = '__TABLE__.' . $field; + } + + if (!$read && strpos($field, '.')) { + $array = explode('.', $field); + $field = array_pop($array); + } + + return $field; + } + + /** + * 查询的时候默认排除软删除数据 + * @access protected + * @param Query $query + * @return void + */ + protected function withNoTrashed($query) + { + $field = $this->getDeleteTimeField(true); + + if ($field) { + $query->useSoftDelete($field, $this->defaultSoftDelete); + } + } +} diff --git a/thinkphp/library/think/model/concern/TimeStamp.php b/thinkphp/library/think/model/concern/TimeStamp.php new file mode 100644 index 000000000..923b7d453 --- /dev/null +++ b/thinkphp/library/think/model/concern/TimeStamp.php @@ -0,0 +1,79 @@ + +// +---------------------------------------------------------------------- + +namespace think\model\concern; + +/** + * 自动时间戳 + */ +trait TimeStamp +{ + /** + * 是否需要自动写入时间戳 如果设置为字符串 则表示时间字段的类型 + * @var bool|string + */ + protected $autoWriteTimestamp; + + /** + * 创建时间字段 false表示关闭 + * @var false|string + */ + protected $createTime = 'create_time'; + + /** + * 更新时间字段 false表示关闭 + * @var false|string + */ + protected $updateTime = 'update_time'; + + /** + * 时间字段显示格式 + * @var string + */ + protected $dateFormat; + + /** + * 时间日期字段格式化处理 + * @access protected + * @param mixed $time 时间日期表达式 + * @param mixed $format 日期格式 + * @param bool $timestamp 是否进行时间戳转换 + * @return mixed + */ + protected function formatDateTime($time, $format, $timestamp = false) + { + if (false !== strpos($format, '\\')) { + $time = new $format($time); + } elseif (!$timestamp && false !== $format) { + $time = date($format, $time); + } + + return $time; + } + + /** + * 检查时间字段写入 + * @access protected + * @return void + */ + protected function checkTimeStampWrite() + { + // 自动写入创建时间和更新时间 + if ($this->autoWriteTimestamp) { + if ($this->createTime && !isset($this->data[$this->createTime])) { + $this->data[$this->createTime] = $this->autoWriteTimestamp($this->createTime); + } + if ($this->updateTime && !isset($this->data[$this->updateTime])) { + $this->data[$this->updateTime] = $this->autoWriteTimestamp($this->updateTime); + } + } + } +} diff --git a/thinkphp/library/think/model/relation/BelongsTo.php b/thinkphp/library/think/model/relation/BelongsTo.php new file mode 100644 index 000000000..bf2dbe53a --- /dev/null +++ b/thinkphp/library/think/model/relation/BelongsTo.php @@ -0,0 +1,247 @@ + +// +---------------------------------------------------------------------- + +namespace think\model\relation; + +use think\Loader; +use think\Model; + +class BelongsTo extends OneToOne +{ + /** + * 架构函数 + * @access public + * @param Model $parent 上级模型对象 + * @param string $model 模型名 + * @param string $foreignKey 关联外键 + * @param string $localKey 关联主键 + * @param string $relation 关联名 + */ + public function __construct(Model $parent, $model, $foreignKey, $localKey, $relation = null) + { + $this->parent = $parent; + $this->model = $model; + $this->foreignKey = $foreignKey; + $this->localKey = $localKey; + $this->joinType = 'INNER'; + $this->query = (new $model)->db(); + $this->relation = $relation; + } + + /** + * 延迟获取关联数据 + * @access public + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包查询条件 + * @return Model + */ + public function getRelation($subRelation = '', $closure = null) + { + if ($closure) { + $closure($this->query); + } + + $foreignKey = $this->foreignKey; + + $relationModel = $this->query + ->removeWhereField($this->localKey) + ->where($this->localKey, $this->parent->$foreignKey) + ->relation($subRelation) + ->find(); + + if ($relationModel) { + $relationModel->setParent(clone $this->parent); + } + + return $relationModel; + } + + /** + * 根据关联条件查询当前模型 + * @access public + * @param string $operator 比较操作符 + * @param integer $count 个数 + * @param string $id 关联表的统计字段 + * @param string $joinType JOIN类型 + * @return Query + */ + public function has($operator = '>=', $count = 1, $id = '*', $joinType = 'INNER') + { + return $this->parent; + } + + /** + * 根据关联条件查询当前模型 + * @access public + * @param mixed $where 查询条件(数组或者闭包) + * @param mixed $fields 字段 + * @return Query + */ + public function hasWhere($where = [], $fields = null) + { + $table = $this->query->getTable(); + $model = basename(str_replace('\\', '/', get_class($this->parent))); + $relation = basename(str_replace('\\', '/', $this->model)); + + if (is_array($where)) { + $this->getQueryWhere($where, $relation); + } + + $fields = $this->getRelationQueryFields($fields, $model); + + return $this->parent->db() + ->alias($model) + ->field($fields) + ->join([$table => $relation], $model . '.' . $this->foreignKey . '=' . $relation . '.' . $this->localKey, $this->joinType) + ->where($where); + } + + /** + * 预载入关联查询(数据集) + * @access protected + * @param array $resultSet 数据集 + * @param string $relation 当前关联名 + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包 + * @return void + */ + protected function eagerlySet(&$resultSet, $relation, $subRelation, $closure) + { + $localKey = $this->localKey; + $foreignKey = $this->foreignKey; + + $range = []; + foreach ($resultSet as $result) { + // 获取关联外键列表 + if (isset($result->$foreignKey)) { + $range[] = $result->$foreignKey; + } + } + + if (!empty($range)) { + $this->query->removeWhereField($localKey); + + $data = $this->eagerlyWhere([ + [$localKey, 'in', $range], + ], $localKey, $relation, $subRelation, $closure); + + // 关联属性名 + $attr = Loader::parseName($relation); + + // 关联数据封装 + foreach ($resultSet as $result) { + // 关联模型 + if (!isset($data[$result->$foreignKey])) { + $relationModel = null; + } else { + $relationModel = $data[$result->$foreignKey]; + $relationModel->setParent(clone $result); + $relationModel->isUpdate(true); + } + + if (!empty($this->bindAttr)) { + // 绑定关联属性 + $this->bindAttr($relationModel, $result); + } else { + // 设置关联属性 + $result->setRelation($attr, $relationModel); + } + } + } + } + + /** + * 预载入关联查询(数据) + * @access protected + * @param Model $result 数据对象 + * @param string $relation 当前关联名 + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包 + * @return void + */ + protected function eagerlyOne(&$result, $relation, $subRelation, $closure) + { + $localKey = $this->localKey; + $foreignKey = $this->foreignKey; + + $this->query->removeWhereField($localKey); + + $data = $this->eagerlyWhere([ + [$localKey, '=', $result->$foreignKey], + ], $localKey, $relation, $subRelation, $closure); + + // 关联模型 + if (!isset($data[$result->$foreignKey])) { + $relationModel = null; + } else { + $relationModel = $data[$result->$foreignKey]; + $relationModel->setParent(clone $result); + $relationModel->isUpdate(true); + } + + if (!empty($this->bindAttr)) { + // 绑定关联属性 + $this->bindAttr($relationModel, $result); + } else { + // 设置关联属性 + $result->setRelation(Loader::parseName($relation), $relationModel); + } + } + + /** + * 添加关联数据 + * @access public + * @param Model $model 关联模型对象 + * @return Model + */ + public function associate($model) + { + $foreignKey = $this->foreignKey; + $pk = $model->getPk(); + + $this->parent->setAttr($foreignKey, $model->$pk); + $this->parent->save(); + + return $this->parent->setRelation($this->relation, $model); + } + + /** + * 注销关联数据 + * @access public + * @return Model + */ + public function dissociate() + { + $foreignKey = $this->foreignKey; + + $this->parent->setAttr($foreignKey, null); + $this->parent->save(); + + return $this->parent->setRelation($this->relation, null); + } + + /** + * 执行基础查询(仅执行一次) + * @access protected + * @return void + */ + protected function baseQuery() + { + if (empty($this->baseQuery)) { + if (isset($this->parent->{$this->foreignKey})) { + // 关联查询带入关联条件 + $this->query->where($this->localKey, '=', $this->parent->{$this->foreignKey}); + } + + $this->baseQuery = true; + } + } +} diff --git a/thinkphp/library/think/model/relation/BelongsToMany.php b/thinkphp/library/think/model/relation/BelongsToMany.php new file mode 100644 index 000000000..674249264 --- /dev/null +++ b/thinkphp/library/think/model/relation/BelongsToMany.php @@ -0,0 +1,631 @@ + +// +---------------------------------------------------------------------- + +namespace think\model\relation; + +use think\Collection; +use think\db\Query; +use think\Exception; +use think\Loader; +use think\Model; +use think\model\Pivot; +use think\model\Relation; + +class BelongsToMany extends Relation +{ + // 中间表表名 + protected $middle; + // 中间表模型名称 + protected $pivotName; + // 中间表模型对象 + protected $pivot; + + /** + * 架构函数 + * @access public + * @param Model $parent 上级模型对象 + * @param string $model 模型名 + * @param string $table 中间表名 + * @param string $foreignKey 关联模型外键 + * @param string $localKey 当前模型关联键 + */ + public function __construct(Model $parent, $model, $table, $foreignKey, $localKey) + { + $this->parent = $parent; + $this->model = $model; + $this->foreignKey = $foreignKey; + $this->localKey = $localKey; + + if (false !== strpos($table, '\\')) { + $this->pivotName = $table; + $this->middle = basename(str_replace('\\', '/', $table)); + } else { + $this->middle = $table; + } + + $this->query = (new $model)->db(); + $this->pivot = $this->newPivot(); + } + + /** + * 设置中间表模型 + * @access public + * @param $pivot + * @return $this + */ + public function pivot($pivot) + { + $this->pivotName = $pivot; + return $this; + } + + /** + * 实例化中间表模型 + * @access public + * @param $data + * @return Pivot + * @throws Exception + */ + protected function newPivot($data = []) + { + $class = $this->pivotName ?: '\\think\\model\\Pivot'; + $pivot = new $class($data, $this->parent, $this->middle); + if ($pivot instanceof Pivot) { + return $pivot; + } else { + throw new Exception('pivot model must extends: \think\model\Pivot'); + } + } + + /** + * 合成中间表模型 + * @access protected + * @param array|Collection|Paginator $models + */ + protected function hydratePivot($models) + { + foreach ($models as $model) { + $pivot = []; + + foreach ($model->getData() as $key => $val) { + if (strpos($key, '__')) { + list($name, $attr) = explode('__', $key, 2); + + if ('pivot' == $name) { + $pivot[$attr] = $val; + unset($model->$key); + } + } + } + + $model->setRelation('pivot', $this->newPivot($pivot)); + } + } + + /** + * 创建关联查询Query对象 + * @access protected + * @return Query + */ + protected function buildQuery() + { + $foreignKey = $this->foreignKey; + $localKey = $this->localKey; + + // 关联查询 + $pk = $this->parent->getPk(); + + $condition[] = ['pivot.' . $localKey, '=', $this->parent->$pk]; + + return $this->belongsToManyQuery($foreignKey, $localKey, $condition); + } + + /** + * 延迟获取关联数据 + * @access public + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包查询条件 + * @return Collection + */ + public function getRelation($subRelation = '', $closure = null) + { + if ($closure) { + $closure($this->query); + } + + $result = $this->buildQuery()->relation($subRelation)->select(); + $this->hydratePivot($result); + + return $result; + } + + /** + * 重载select方法 + * @access public + * @param mixed $data + * @return Collection + */ + public function select($data = null) + { + $result = $this->buildQuery()->select($data); + $this->hydratePivot($result); + + return $result; + } + + /** + * 重载paginate方法 + * @access public + * @param null $listRows + * @param bool $simple + * @param array $config + * @return Paginator + */ + public function paginate($listRows = null, $simple = false, $config = []) + { + $result = $this->buildQuery()->paginate($listRows, $simple, $config); + $this->hydratePivot($result); + + return $result; + } + + /** + * 重载find方法 + * @access public + * @param mixed $data + * @return Model + */ + public function find($data = null) + { + $result = $this->buildQuery()->find($data); + if ($result) { + $this->hydratePivot([$result]); + } + + return $result; + } + + /** + * 查找多条记录 如果不存在则抛出异常 + * @access public + * @param array|string|Query|\Closure $data + * @return Collection + */ + public function selectOrFail($data = null) + { + return $this->failException(true)->select($data); + } + + /** + * 查找单条记录 如果不存在则抛出异常 + * @access public + * @param array|string|Query|\Closure $data + * @return Model + */ + public function findOrFail($data = null) + { + return $this->failException(true)->find($data); + } + + /** + * 根据关联条件查询当前模型 + * @access public + * @param string $operator 比较操作符 + * @param integer $count 个数 + * @param string $id 关联表的统计字段 + * @param string $joinType JOIN类型 + * @return Query + */ + public function has($operator = '>=', $count = 1, $id = '*', $joinType = 'INNER') + { + return $this->parent; + } + + /** + * 根据关联条件查询当前模型 + * @access public + * @param mixed $where 查询条件(数组或者闭包) + * @param mixed $fields 字段 + * @return Query + * @throws Exception + */ + public function hasWhere($where = [], $fields = null) + { + throw new Exception('relation not support: hasWhere'); + } + + /** + * 设置中间表的查询条件 + * @access public + * @param string $field + * @param string $op + * @param mixed $condition + * @return $this + */ + public function wherePivot($field, $op = null, $condition = null) + { + $this->query->where('pivot.' . $field, $op, $condition); + return $this; + } + + /** + * 预载入关联查询(数据集) + * @access public + * @param array $resultSet 数据集 + * @param string $relation 当前关联名 + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包 + * @return void + */ + public function eagerlyResultSet(&$resultSet, $relation, $subRelation, $closure) + { + $localKey = $this->localKey; + $foreignKey = $this->foreignKey; + + $pk = $resultSet[0]->getPk(); + $range = []; + foreach ($resultSet as $result) { + // 获取关联外键列表 + if (isset($result->$pk)) { + $range[] = $result->$pk; + } + } + + if (!empty($range)) { + // 查询关联数据 + $data = $this->eagerlyManyToMany([ + ['pivot.' . $localKey, 'in', $range], + ], $relation, $subRelation); + + // 关联属性名 + $attr = Loader::parseName($relation); + + // 关联数据封装 + foreach ($resultSet as $result) { + if (!isset($data[$result->$pk])) { + $data[$result->$pk] = []; + } + + $result->setRelation($attr, $this->resultSetBuild($data[$result->$pk])); + } + } + } + + /** + * 预载入关联查询(单个数据) + * @access public + * @param Model $result 数据对象 + * @param string $relation 当前关联名 + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包 + * @return void + */ + public function eagerlyResult(&$result, $relation, $subRelation, $closure) + { + $pk = $result->getPk(); + + if (isset($result->$pk)) { + $pk = $result->$pk; + // 查询管理数据 + $data = $this->eagerlyManyToMany([ + ['pivot.' . $this->localKey, '=', $pk], + ], $relation, $subRelation); + + // 关联数据封装 + if (!isset($data[$pk])) { + $data[$pk] = []; + } + + $result->setRelation(Loader::parseName($relation), $this->resultSetBuild($data[$pk])); + } + } + + /** + * 关联统计 + * @access public + * @param Model $result 数据对象 + * @param \Closure $closure 闭包 + * @param string $aggregate 聚合查询方法 + * @param string $field 字段 + * @return integer + */ + public function relationCount($result, $closure, $aggregate = 'count', $field = '*') + { + $pk = $result->getPk(); + $count = 0; + + if (isset($result->$pk)) { + $pk = $result->$pk; + $count = $this->belongsToManyQuery($this->foreignKey, $this->localKey, [ + ['pivot.' . $this->localKey, '=', $pk], + ])->$aggregate($field); + } + + return $count; + } + + /** + * 获取关联统计子查询 + * @access public + * @param \Closure $closure 闭包 + * @param string $aggregate 聚合查询方法 + * @param string $field 字段 + * @return string + */ + public function getRelationCountQuery($closure, $aggregate = 'count', $field = '*') + { + return $this->belongsToManyQuery($this->foreignKey, $this->localKey, [ + [ + 'pivot.' . $this->localKey, 'exp', $this->query->raw('=' . $this->parent->getTable() . '.' . $this->parent->getPk()), + ], + ])->fetchSql()->$aggregate($field); + } + + /** + * 多对多 关联模型预查询 + * @access protected + * @param array $where 关联预查询条件 + * @param string $relation 关联名 + * @param string $subRelation 子关联 + * @return array + */ + protected function eagerlyManyToMany($where, $relation, $subRelation = '') + { + // 预载入关联查询 支持嵌套预载入 + $list = $this->belongsToManyQuery($this->foreignKey, $this->localKey, $where) + ->with($subRelation) + ->select(); + + // 组装模型数据 + $data = []; + foreach ($list as $set) { + $pivot = []; + foreach ($set->getData() as $key => $val) { + if (strpos($key, '__')) { + list($name, $attr) = explode('__', $key, 2); + if ('pivot' == $name) { + $pivot[$attr] = $val; + unset($set->$key); + } + } + } + + $set->setRelation('pivot', $this->newPivot($pivot)); + + $data[$pivot[$this->localKey]][] = $set; + } + + return $data; + } + + /** + * BELONGS TO MANY 关联查询 + * @access protected + * @param string $foreignKey 关联模型关联键 + * @param string $localKey 当前模型关联键 + * @param array $condition 关联查询条件 + * @return Query + */ + protected function belongsToManyQuery($foreignKey, $localKey, $condition = []) + { + // 关联查询封装 + $tableName = $this->query->getTable(); + $table = $this->pivot->getTable(); + $fields = $this->getQueryFields($tableName); + + $query = $this->query + ->field($fields) + ->field(true, false, $table, 'pivot', 'pivot__'); + + if (empty($this->baseQuery)) { + $relationFk = $this->query->getPk(); + $query->join([$table => 'pivot'], 'pivot.' . $foreignKey . '=' . $tableName . '.' . $relationFk) + ->where($condition); + } + + return $query; + } + + /** + * 保存(新增)当前关联数据对象 + * @access public + * @param mixed $data 数据 可以使用数组 关联模型对象 和 关联对象的主键 + * @param array $pivot 中间表额外数据 + * @return array|Pivot + */ + public function save($data, array $pivot = []) + { + // 保存关联表/中间表数据 + return $this->attach($data, $pivot); + } + + /** + * 批量保存当前关联数据对象 + * @access public + * @param array $dataSet 数据集 + * @param array $pivot 中间表额外数据 + * @param bool $samePivot 额外数据是否相同 + * @return array|false + */ + public function saveAll(array $dataSet, array $pivot = [], $samePivot = false) + { + $result = []; + + foreach ($dataSet as $key => $data) { + if (!$samePivot) { + $pivotData = isset($pivot[$key]) ? $pivot[$key] : []; + } else { + $pivotData = $pivot; + } + + $result[] = $this->attach($data, $pivotData); + } + + return empty($result) ? false : $result; + } + + /** + * 附加关联的一个中间表数据 + * @access public + * @param mixed $data 数据 可以使用数组、关联模型对象 或者 关联对象的主键 + * @param array $pivot 中间表额外数据 + * @return array|Pivot + * @throws Exception + */ + public function attach($data, $pivot = []) + { + if (is_array($data)) { + if (key($data) === 0) { + $id = $data; + } else { + // 保存关联表数据 + $model = new $this->model; + $model->save($data); + $id = $model->getLastInsID(); + } + } elseif (is_numeric($data) || is_string($data)) { + // 根据关联表主键直接写入中间表 + $id = $data; + } elseif ($data instanceof Model) { + // 根据关联表主键直接写入中间表 + $relationFk = $data->getPk(); + $id = $data->$relationFk; + } + + if ($id) { + // 保存中间表数据 + $pk = $this->parent->getPk(); + $pivot[$this->localKey] = $this->parent->$pk; + $ids = (array) $id; + + foreach ($ids as $id) { + $pivot[$this->foreignKey] = $id; + $this->pivot->insert($pivot, true); + $result[] = $this->newPivot($pivot); + } + + if (count($result) == 1) { + // 返回中间表模型对象 + $result = $result[0]; + } + + return $result; + } else { + throw new Exception('miss relation data'); + } + } + + /** + * 解除关联的一个中间表数据 + * @access public + * @param integer|array $data 数据 可以使用关联对象的主键 + * @param bool $relationDel 是否同时删除关联表数据 + * @return integer + */ + public function detach($data = null, $relationDel = false) + { + if (is_array($data)) { + $id = $data; + } elseif (is_numeric($data) || is_string($data)) { + // 根据关联表主键直接写入中间表 + $id = $data; + } elseif ($data instanceof Model) { + // 根据关联表主键直接写入中间表 + $relationFk = $data->getPk(); + $id = $data->$relationFk; + } + + // 删除中间表数据 + $pk = $this->parent->getPk(); + $pivot[] = [$this->localKey, '=', $this->parent->$pk]; + + if (isset($id)) { + $pivot[] = is_array($id) ? [$this->foreignKey, 'in', $id] : [$this->foreignKey, '=', $id]; + } + + $this->pivot->where($pivot)->delete(); + + // 删除关联表数据 + if (isset($id) && $relationDel) { + $model = $this->model; + $model::destroy($id); + } + } + + /** + * 数据同步 + * @access public + * @param array $ids + * @param bool $detaching + * @return array + */ + public function sync($ids, $detaching = true) + { + $changes = [ + 'attached' => [], + 'detached' => [], + 'updated' => [], + ]; + + $pk = $this->parent->getPk(); + + $current = $this->pivot + ->where($this->localKey, $this->parent->$pk) + ->column($this->foreignKey); + + $records = []; + + foreach ($ids as $key => $value) { + if (!is_array($value)) { + $records[$value] = []; + } else { + $records[$key] = $value; + } + } + + $detach = array_diff($current, array_keys($records)); + + if ($detaching && count($detach) > 0) { + $this->detach($detach); + $changes['detached'] = $detach; + } + + foreach ($records as $id => $attributes) { + if (!in_array($id, $current)) { + $this->attach($id, $attributes); + $changes['attached'][] = $id; + } elseif (count($attributes) > 0 && $this->attach($id, $attributes)) { + $changes['updated'][] = $id; + } + } + + return $changes; + } + + /** + * 执行基础查询(仅执行一次) + * @access protected + * @return void + */ + protected function baseQuery() + { + if (empty($this->baseQuery) && $this->parent->getData()) { + $pk = $this->parent->getPk(); + $table = $this->pivot->getTable(); + + $this->query + ->join([$table => 'pivot'], 'pivot.' . $this->foreignKey . '=' . $this->query->getTable() . '.' . $this->query->getPk()) + ->where('pivot.' . $this->localKey, $this->parent->$pk); + $this->baseQuery = true; + } + } + +} diff --git a/thinkphp/library/think/model/relation/HasMany.php b/thinkphp/library/think/model/relation/HasMany.php new file mode 100644 index 000000000..aecc25452 --- /dev/null +++ b/thinkphp/library/think/model/relation/HasMany.php @@ -0,0 +1,325 @@ + +// +---------------------------------------------------------------------- + +namespace think\model\relation; + +use think\db\Query; +use think\Loader; +use think\Model; +use think\model\Relation; + +class HasMany extends Relation +{ + /** + * 架构函数 + * @access public + * @param Model $parent 上级模型对象 + * @param string $model 模型名 + * @param string $foreignKey 关联外键 + * @param string $localKey 当前模型主键 + */ + public function __construct(Model $parent, $model, $foreignKey, $localKey) + { + $this->parent = $parent; + $this->model = $model; + $this->foreignKey = $foreignKey; + $this->localKey = $localKey; + $this->query = (new $model)->db(); + } + + /** + * 延迟获取关联数据 + * @access public + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包查询条件 + * @return \think\Collection + */ + public function getRelation($subRelation = '', $closure = null) + { + if ($closure) { + $closure($this->query); + } + + $list = $this->query + ->where($this->foreignKey, $this->parent->{$this->localKey}) + ->relation($subRelation) + ->select(); + + $parent = clone $this->parent; + + foreach ($list as &$model) { + $model->setParent($parent); + } + + return $list; + } + + /** + * 预载入关联查询 + * @access public + * @param array $resultSet 数据集 + * @param string $relation 当前关联名 + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包 + * @return void + */ + public function eagerlyResultSet(&$resultSet, $relation, $subRelation, $closure) + { + $localKey = $this->localKey; + $range = []; + + foreach ($resultSet as $result) { + // 获取关联外键列表 + if (isset($result->$localKey)) { + $range[] = $result->$localKey; + } + } + + if (!empty($range)) { + $where = [ + [$this->foreignKey, 'in', $range], + ]; + $data = $this->eagerlyOneToMany($where, $relation, $subRelation, $closure); + + // 关联属性名 + $attr = Loader::parseName($relation); + + // 关联数据封装 + foreach ($resultSet as $result) { + $pk = $result->$localKey; + if (!isset($data[$pk])) { + $data[$pk] = []; + } + + foreach ($data[$pk] as &$relationModel) { + $relationModel->setParent(clone $result); + } + + $result->setRelation($attr, $this->resultSetBuild($data[$pk])); + } + } + } + + /** + * 预载入关联查询 + * @access public + * @param Model $result 数据对象 + * @param string $relation 当前关联名 + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包 + * @return void + */ + public function eagerlyResult(&$result, $relation, $subRelation, $closure) + { + $localKey = $this->localKey; + + if (isset($result->$localKey)) { + $pk = $result->$localKey; + $where = [ + [$this->foreignKey, '=', $pk], + ]; + $data = $this->eagerlyOneToMany($where, $relation, $subRelation, $closure); + + // 关联数据封装 + if (!isset($data[$pk])) { + $data[$pk] = []; + } + + foreach ($data[$pk] as &$relationModel) { + $relationModel->setParent(clone $result); + } + + $result->setRelation(Loader::parseName($relation), $this->resultSetBuild($data[$pk])); + } + } + + /** + * 关联统计 + * @access public + * @param Model $result 数据对象 + * @param \Closure $closure 闭包 + * @param string $aggregate 聚合查询方法 + * @param string $field 字段 + * @return integer + */ + public function relationCount($result, $closure, $aggregate = 'count', $field = '*') + { + $localKey = $this->localKey; + $count = 0; + + if (isset($result->$localKey)) { + if ($closure) { + $closure($this->query); + } + + $count = $this->query->where($this->foreignKey, '=', $result->$localKey)->$aggregate($field); + } + + return $count; + } + + /** + * 创建关联统计子查询 + * @access public + * @param \Closure $closure 闭包 + * @param string $aggregate 聚合查询方法 + * @param string $field 字段 + * @return string + */ + public function getRelationCountQuery($closure, $aggregate = 'count', $field = '*') + { + if ($closure) { + $closure($this->query); + } + + return $this->query + ->whereExp($this->foreignKey, '=' . $this->parent->getTable() . '.' . $this->parent->getPk()) + ->fetchSql() + ->$aggregate($field); + } + + /** + * 一对多 关联模型预查询 + * @access public + * @param array $where 关联预查询条件 + * @param string $relation 关联名 + * @param string $subRelation 子关联 + * @param bool $closure + * @return array + */ + protected function eagerlyOneToMany($where, $relation, $subRelation = '', $closure = false) + { + $foreignKey = $this->foreignKey; + + $this->query->removeWhereField($this->foreignKey); + + // 预载入关联查询 支持嵌套预载入 + if ($closure) { + $closure($this->query); + } + + $list = $this->query->where($where)->with($subRelation)->select(); + + // 组装模型数据 + $data = []; + + foreach ($list as $set) { + $data[$set->$foreignKey][] = $set; + } + + return $data; + } + + /** + * 保存(新增)当前关联数据对象 + * @access public + * @param mixed $data 数据 可以使用数组 关联模型对象 和 关联对象的主键 + * @return Model|false + */ + public function save($data) + { + if ($data instanceof Model) { + $data = $data->getData(); + } + + // 保存关联表数据 + $data[$this->foreignKey] = $this->parent->{$this->localKey}; + + $model = new $this->model; + + return $model->save($data) ? $model : false; + } + + /** + * 批量保存当前关联数据对象 + * @access public + * @param array $dataSet 数据集 + * @return array|false + */ + public function saveAll(array $dataSet) + { + $result = []; + + foreach ($dataSet as $key => $data) { + $result[] = $this->save($data); + } + + return empty($result) ? false : $result; + } + + /** + * 根据关联条件查询当前模型 + * @access public + * @param string $operator 比较操作符 + * @param integer $count 个数 + * @param string $id 关联表的统计字段 + * @param string $joinType JOIN类型 + * @return Query + */ + public function has($operator = '>=', $count = 1, $id = '*', $joinType = 'INNER') + { + $table = $this->query->getTable(); + $model = basename(str_replace('\\', '/', get_class($this->parent))); + $relation = basename(str_replace('\\', '/', $this->model)); + + return $this->parent->db() + ->alias($model) + ->field($model . '.*') + ->join([$table => $relation], $model . '.' . $this->localKey . '=' . $relation . '.' . $this->foreignKey, $joinType) + ->group($relation . '.' . $this->foreignKey) + ->having('count(' . $id . ')' . $operator . $count); + } + + /** + * 根据关联条件查询当前模型 + * @access public + * @param mixed $where 查询条件(数组或者闭包) + * @param mixed $fields 字段 + * @return Query + */ + public function hasWhere($where = [], $fields = null) + { + $table = $this->query->getTable(); + $model = basename(str_replace('\\', '/', get_class($this->parent))); + $relation = basename(str_replace('\\', '/', $this->model)); + + if (is_array($where)) { + $this->getQueryWhere($where, $relation); + } + + $fields = $this->getRelationQueryFields($fields, $model); + + return $this->parent->db() + ->alias($model) + ->group($model . '.' . $this->localKey) + ->field($fields) + ->join([$table => $relation], $model . '.' . $this->localKey . '=' . $relation . '.' . $this->foreignKey) + ->where($where); + } + + /** + * 执行基础查询(仅执行一次) + * @access protected + * @return void + */ + protected function baseQuery() + { + if (empty($this->baseQuery)) { + if (isset($this->parent->{$this->localKey})) { + // 关联查询带入关联条件 + $this->query->where($this->foreignKey, '=', $this->parent->{$this->localKey}); + } + + $this->baseQuery = true; + } + } + +} diff --git a/thinkphp/library/think/model/relation/HasManyThrough.php b/thinkphp/library/think/model/relation/HasManyThrough.php new file mode 100644 index 000000000..411f3fccf --- /dev/null +++ b/thinkphp/library/think/model/relation/HasManyThrough.php @@ -0,0 +1,155 @@ + +// +---------------------------------------------------------------------- + +namespace think\model\relation; + +use think\db\Query; +use think\Exception; +use think\Loader; +use think\Model; +use think\model\Relation; + +class HasManyThrough extends Relation +{ + // 中间关联表外键 + protected $throughKey; + // 中间表模型 + protected $through; + + /** + * 架构函数 + * @access public + * @param Model $parent 上级模型对象 + * @param string $model 模型名 + * @param string $through 中间模型名 + * @param string $foreignKey 关联外键 + * @param string $throughKey 关联外键 + * @param string $localKey 当前主键 + */ + public function __construct(Model $parent, $model, $through, $foreignKey, $throughKey, $localKey) + { + $this->parent = $parent; + $this->model = $model; + $this->through = $through; + $this->foreignKey = $foreignKey; + $this->throughKey = $throughKey; + $this->localKey = $localKey; + $this->query = (new $model)->db(); + } + + /** + * 延迟获取关联数据 + * @access public + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包查询条件 + * @return \think\Collection + */ + public function getRelation($subRelation = '', $closure = null) + { + if ($closure) { + $closure($this->query); + } + + $this->baseQuery(); + + return $this->query->relation($subRelation)->select(); + } + + /** + * 根据关联条件查询当前模型 + * @access public + * @param string $operator 比较操作符 + * @param integer $count 个数 + * @param string $id 关联表的统计字段 + * @param string $joinType JOIN类型 + * @return Query + */ + public function has($operator = '>=', $count = 1, $id = '*', $joinType = 'INNER') + { + return $this->parent; + } + + /** + * 根据关联条件查询当前模型 + * @access public + * @param mixed $where 查询条件(数组或者闭包) + * @param mixed $fields 字段 + * @return Query + */ + public function hasWhere($where = [], $fields = null) + { + throw new Exception('relation not support: hasWhere'); + } + + /** + * 预载入关联查询 + * @access public + * @param array $resultSet 数据集 + * @param string $relation 当前关联名 + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包 + * @return void + */ + public function eagerlyResultSet(&$resultSet, $relation, $subRelation, $closure) + {} + + /** + * 预载入关联查询 返回模型对象 + * @access public + * @param Model $result 数据对象 + * @param string $relation 当前关联名 + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包 + * @return void + */ + public function eagerlyResult(&$result, $relation, $subRelation, $closure) + {} + + /** + * 关联统计 + * @access public + * @param Model $result 数据对象 + * @param \Closure $closure 闭包 + * @param string $aggregate 聚合查询方法 + * @param string $field 字段 + * @return integer + */ + public function relationCount($result, $closure, $aggregate = 'count', $field = '*') + {} + + /** + * 执行基础查询(仅执行一次) + * @access protected + * @return void + */ + protected function baseQuery() + { + if (empty($this->baseQuery) && $this->parent->getData()) { + $through = $this->through; + $alias = Loader::parseName(basename(str_replace('\\', '/', $this->model))); + $throughTable = $through::getTable(); + $pk = (new $through)->getPk(); + $throughKey = $this->throughKey; + $modelTable = $this->parent->getTable(); + $fields = $this->getQueryFields($alias); + + $this->query + ->field($fields) + ->alias($alias) + ->join($throughTable, $throughTable . '.' . $pk . '=' . $alias . '.' . $throughKey) + ->join($modelTable, $modelTable . '.' . $this->localKey . '=' . $throughTable . '.' . $this->foreignKey) + ->where($throughTable . '.' . $this->foreignKey, $this->parent->{$this->localKey}); + + $this->baseQuery = true; + } + } + +} diff --git a/thinkphp/library/think/model/relation/HasOne.php b/thinkphp/library/think/model/relation/HasOne.php new file mode 100644 index 000000000..02c743c59 --- /dev/null +++ b/thinkphp/library/think/model/relation/HasOne.php @@ -0,0 +1,226 @@ + +// +---------------------------------------------------------------------- + +namespace think\model\relation; + +use think\db\Query; +use think\Loader; +use think\Model; + +class HasOne extends OneToOne +{ + /** + * 架构函数 + * @access public + * @param Model $parent 上级模型对象 + * @param string $model 模型名 + * @param string $foreignKey 关联外键 + * @param string $localKey 当前模型主键 + */ + public function __construct(Model $parent, $model, $foreignKey, $localKey) + { + $this->parent = $parent; + $this->model = $model; + $this->foreignKey = $foreignKey; + $this->localKey = $localKey; + $this->joinType = 'INNER'; + $this->query = (new $model)->db(); + } + + /** + * 延迟获取关联数据 + * @access public + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包查询条件 + * @return Model + */ + public function getRelation($subRelation = '', $closure = null) + { + $localKey = $this->localKey; + + if ($closure) { + $closure($this->query); + } + + // 判断关联类型执行查询 + $relationModel = $this->query + ->removeWhereField($this->foreignKey) + ->where($this->foreignKey, $this->parent->$localKey) + ->relation($subRelation) + ->find(); + + if ($relationModel) { + $relationModel->setParent(clone $this->parent); + } + + return $relationModel; + } + + /** + * 根据关联条件查询当前模型 + * @access public + * @param string $operator 比较操作符 + * @param integer $count 个数 + * @param string $id 关联表的统计字段 + * @param string $joinType JOIN类型 + * @return Query + */ + public function has($operator = '>=', $count = 1, $id = '*', $joinType = 'INNER') + { + $table = $this->query->getTable(); + $model = basename(str_replace('\\', '/', get_class($this->parent))); + $relation = basename(str_replace('\\', '/', $this->model)); + $localKey = $this->localKey; + $foreignKey = $this->foreignKey; + + return $this->parent->db() + ->alias($model) + ->whereExists(function ($query) use ($table, $model, $relation, $localKey, $foreignKey) { + $query->table([$table => $relation]) + ->field($relation . '.' . $foreignKey) + ->whereExp($model . '.' . $localKey, '=' . $relation . '.' . $foreignKey); + }); + } + + /** + * 根据关联条件查询当前模型 + * @access public + * @param mixed $where 查询条件(数组或者闭包) + * @param mixed $fields 字段 + * @return Query + */ + public function hasWhere($where = [], $fields = null) + { + $table = $this->query->getTable(); + $model = basename(str_replace('\\', '/', get_class($this->parent))); + $relation = basename(str_replace('\\', '/', $this->model)); + + if (is_array($where)) { + $this->getQueryWhere($where, $relation); + } + + $fields = $this->getRelationQueryFields($fields, $model); + + return $this->parent->db() + ->alias($model) + ->field($fields) + ->join([$table => $relation], $model . '.' . $this->localKey . '=' . $relation . '.' . $this->foreignKey, $this->joinType) + ->where($where); + } + + /** + * 预载入关联查询(数据集) + * @access protected + * @param array $resultSet 数据集 + * @param string $relation 当前关联名 + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包 + * @return void + */ + protected function eagerlySet(&$resultSet, $relation, $subRelation, $closure) + { + $localKey = $this->localKey; + $foreignKey = $this->foreignKey; + + $range = []; + foreach ($resultSet as $result) { + // 获取关联外键列表 + if (isset($result->$localKey)) { + $range[] = $result->$localKey; + } + } + + if (!empty($range)) { + $this->query->removeWhereField($foreignKey); + + $data = $this->eagerlyWhere([ + [$foreignKey, 'in', $range], + ], $foreignKey, $relation, $subRelation, $closure); + + // 关联属性名 + $attr = Loader::parseName($relation); + + // 关联数据封装 + foreach ($resultSet as $result) { + // 关联模型 + if (!isset($data[$result->$localKey])) { + $relationModel = null; + } else { + $relationModel = $data[$result->$localKey]; + $relationModel->setParent(clone $result); + $relationModel->isUpdate(true); + } + + if (!empty($this->bindAttr)) { + // 绑定关联属性 + $this->bindAttr($relationModel, $result, $this->bindAttr); + } else { + // 设置关联属性 + $result->setRelation($attr, $relationModel); + } + } + } + } + + /** + * 预载入关联查询(数据) + * @access protected + * @param Model $result 数据对象 + * @param string $relation 当前关联名 + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包 + * @return void + */ + protected function eagerlyOne(&$result, $relation, $subRelation, $closure) + { + $localKey = $this->localKey; + $foreignKey = $this->foreignKey; + + $this->query->removeWhereField($foreignKey); + + $data = $this->eagerlyWhere([ + [$foreignKey, '=', $result->$localKey], + ], $foreignKey, $relation, $subRelation, $closure); + + // 关联模型 + if (!isset($data[$result->$localKey])) { + $relationModel = null; + } else { + $relationModel = $data[$result->$localKey]; + $relationModel->setParent(clone $result); + $relationModel->isUpdate(true); + } + + if (!empty($this->bindAttr)) { + // 绑定关联属性 + $this->bindAttr($relationModel, $result, $this->bindAttr); + } else { + $result->setRelation(Loader::parseName($relation), $relationModel); + } + } + + /** + * 执行基础查询(仅执行一次) + * @access protected + * @return void + */ + protected function baseQuery() + { + if (empty($this->baseQuery)) { + if (isset($this->parent->{$this->localKey})) { + // 关联查询带入关联条件 + $this->query->where($this->foreignKey, '=', $this->parent->{$this->localKey}); + } + + $this->baseQuery = true; + } + } +} diff --git a/thinkphp/library/think/model/relation/MorphMany.php b/thinkphp/library/think/model/relation/MorphMany.php new file mode 100644 index 000000000..a50ed8dc8 --- /dev/null +++ b/thinkphp/library/think/model/relation/MorphMany.php @@ -0,0 +1,322 @@ + +// +---------------------------------------------------------------------- + +namespace think\model\relation; + +use think\db\Query; +use think\Exception; +use think\Loader; +use think\Model; +use think\model\Relation; + +class MorphMany extends Relation +{ + // 多态字段 + protected $morphKey; + protected $morphType; + // 多态类型 + protected $type; + + /** + * 架构函数 + * @access public + * @param Model $parent 上级模型对象 + * @param string $model 模型名 + * @param string $morphKey 关联外键 + * @param string $morphType 多态字段名 + * @param string $type 多态类型 + */ + public function __construct(Model $parent, $model, $morphKey, $morphType, $type) + { + $this->parent = $parent; + $this->model = $model; + $this->type = $type; + $this->morphKey = $morphKey; + $this->morphType = $morphType; + $this->query = (new $model)->db(); + } + + /** + * 延迟获取关联数据 + * @access public + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包查询条件 + * @return \think\Collection + */ + public function getRelation($subRelation = '', $closure = null) + { + if ($closure) { + $closure($this->query); + } + + $this->baseQuery(); + + $list = $this->query->relation($subRelation)->select(); + $parent = clone $this->parent; + + foreach ($list as &$model) { + $model->setParent($parent); + } + + return $list; + } + + /** + * 根据关联条件查询当前模型 + * @access public + * @param string $operator 比较操作符 + * @param integer $count 个数 + * @param string $id 关联表的统计字段 + * @param string $joinType JOIN类型 + * @return Query + */ + public function has($operator = '>=', $count = 1, $id = '*', $joinType = 'INNER') + { + throw new Exception('relation not support: has'); + } + + /** + * 根据关联条件查询当前模型 + * @access public + * @param mixed $where 查询条件(数组或者闭包) + * @param mixed $fields 字段 + * @return Query + */ + public function hasWhere($where = [], $fields = null) + { + throw new Exception('relation not support: hasWhere'); + } + + /** + * 预载入关联查询 + * @access public + * @param array $resultSet 数据集 + * @param string $relation 当前关联名 + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包 + * @return void + */ + public function eagerlyResultSet(&$resultSet, $relation, $subRelation, $closure) + { + $morphType = $this->morphType; + $morphKey = $this->morphKey; + $type = $this->type; + $range = []; + + foreach ($resultSet as $result) { + $pk = $result->getPk(); + // 获取关联外键列表 + if (isset($result->$pk)) { + $range[] = $result->$pk; + } + } + + if (!empty($range)) { + $where = [ + [$morphKey, 'in', $range], + [$morphType, '=', $type], + ]; + $data = $this->eagerlyMorphToMany($where, $relation, $subRelation, $closure); + + // 关联属性名 + $attr = Loader::parseName($relation); + + // 关联数据封装 + foreach ($resultSet as $result) { + if (!isset($data[$result->$pk])) { + $data[$result->$pk] = []; + } + + foreach ($data[$result->$pk] as &$relationModel) { + $relationModel->setParent(clone $result); + $relationModel->isUpdate(true); + } + + $result->setRelation($attr, $this->resultSetBuild($data[$result->$pk])); + } + } + } + + /** + * 预载入关联查询 + * @access public + * @param Model $result 数据对象 + * @param string $relation 当前关联名 + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包 + * @return void + */ + public function eagerlyResult(&$result, $relation, $subRelation, $closure) + { + $pk = $result->getPk(); + + if (isset($result->$pk)) { + $key = $result->$pk; + $where = [ + [$this->morphKey, '=', $key], + [$this->morphType, '=', $this->type], + ]; + $data = $this->eagerlyMorphToMany($where, $relation, $subRelation, $closure); + + if (!isset($data[$key])) { + $data[$key] = []; + } + + foreach ($data[$key] as &$relationModel) { + $relationModel->setParent(clone $result); + $relationModel->isUpdate(true); + } + + $result->setRelation(Loader::parseName($relation), $this->resultSetBuild($data[$key])); + } + } + + /** + * 关联统计 + * @access public + * @param Model $result 数据对象 + * @param \Closure $closure 闭包 + * @param string $aggregate 聚合查询方法 + * @param string $field 字段 + * @return integer + */ + public function relationCount($result, $closure, $aggregate = 'count', $field = '*') + { + $pk = $result->getPk(); + $count = 0; + + if (isset($result->$pk)) { + if ($closure) { + $closur($this->query); + } + + $count = $this->query + ->where([ + [$this->morphKey, '=', $result->$pk], + [$this->morphType, '=', $this->type], + ]) + ->$aggregate($field); + } + + return $count; + } + + /** + * 获取关联统计子查询 + * @access public + * @param \Closure $closure 闭包 + * @param string $aggregate 聚合查询方法 + * @param string $field 字段 + * @return string + */ + public function getRelationCountQuery($closure, $aggregate = 'count', $field = '*') + { + if ($closure) { + $closure($this->query); + } + + return $this->query + ->whereExp($this->morphKey, '=' . $this->parent->getTable() . '.' . $this->parent->getPk()) + ->where($this->morphType, '=', $this->type) + ->fetchSql() + ->$aggregate($field); + } + + /** + * 多态一对多 关联模型预查询 + * @access protected + * @param array $where 关联预查询条件 + * @param string $relation 关联名 + * @param string $subRelation 子关联 + * @param bool|\Closure $closure 闭包 + * @return array + */ + protected function eagerlyMorphToMany($where, $relation, $subRelation = '', $closure = false) + { + // 预载入关联查询 支持嵌套预载入 + $this->query->removeOption('where'); + + if ($closure) { + $closure($this->query); + } + + $list = $this->query->where($where)->with($subRelation)->select(); + $morphKey = $this->morphKey; + + // 组装模型数据 + $data = []; + foreach ($list as $set) { + $data[$set->$morphKey][] = $set; + } + + return $data; + } + + /** + * 保存(新增)当前关联数据对象 + * @access public + * @param mixed $data 数据 可以使用数组 关联模型对象 和 关联对象的主键 + * @return Model|false + */ + public function save($data) + { + if ($data instanceof Model) { + $data = $data->getData(); + } + + // 保存关联表数据 + $pk = $this->parent->getPk(); + + $model = new $this->model; + + $data[$this->morphKey] = $this->parent->$pk; + $data[$this->morphType] = $this->type; + + return $model->save($data) ? $model : false; + } + + /** + * 批量保存当前关联数据对象 + * @access public + * @param array $dataSet 数据集 + * @return array|false + */ + public function saveAll(array $dataSet) + { + $result = []; + + foreach ($dataSet as $key => $data) { + $result[] = $this->save($data); + } + + return empty($result) ? false : $result; + } + + /** + * 执行基础查询(仅执行一次) + * @access protected + * @return void + */ + protected function baseQuery() + { + if (empty($this->baseQuery) && $this->parent->getData()) { + $pk = $this->parent->getPk(); + + $this->query->where([ + [$this->morphKey, '=', $this->parent->$pk], + [$this->morphType, '=', $this->type], + ]); + + $this->baseQuery = true; + } + } + +} diff --git a/thinkphp/library/think/model/relation/MorphOne.php b/thinkphp/library/think/model/relation/MorphOne.php new file mode 100644 index 000000000..094440089 --- /dev/null +++ b/thinkphp/library/think/model/relation/MorphOne.php @@ -0,0 +1,245 @@ + +// +---------------------------------------------------------------------- + +namespace think\model\relation; + +use think\db\Query; +use think\Exception; +use think\Loader; +use think\Model; +use think\model\Relation; + +class MorphOne extends Relation +{ + // 多态字段 + protected $morphKey; + protected $morphType; + // 多态类型 + protected $type; + + /** + * 构造函数 + * @access public + * @param Model $parent 上级模型对象 + * @param string $model 模型名 + * @param string $morphKey 关联外键 + * @param string $morphType 多态字段名 + * @param string $type 多态类型 + */ + public function __construct(Model $parent, $model, $morphKey, $morphType, $type) + { + $this->parent = $parent; + $this->model = $model; + $this->type = $type; + $this->morphKey = $morphKey; + $this->morphType = $morphType; + $this->query = (new $model)->db(); + } + + /** + * 延迟获取关联数据 + * @access public + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包查询条件 + * @return Model + */ + public function getRelation($subRelation = '', $closure = null) + { + if ($closure) { + $closure($this->query); + } + + $this->baseQuery(); + + $relationModel = $this->query->relation($subRelation)->find(); + + if ($relationModel) { + $relationModel->setParent(clone $this->parent); + } + + return $relationModel; + } + + /** + * 根据关联条件查询当前模型 + * @access public + * @param string $operator 比较操作符 + * @param integer $count 个数 + * @param string $id 关联表的统计字段 + * @param string $joinType JOIN类型 + * @return Query + */ + public function has($operator = '>=', $count = 1, $id = '*', $joinType = 'INNER') + { + return $this->parent; + } + + /** + * 根据关联条件查询当前模型 + * @access public + * @param mixed $where 查询条件(数组或者闭包) + * @param mixed $fields 字段 + * @return Query + */ + public function hasWhere($where = [], $fields = null) + { + throw new Exception('relation not support: hasWhere'); + } + + /** + * 预载入关联查询 + * @access public + * @param array $resultSet 数据集 + * @param string $relation 当前关联名 + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包 + * @return void + */ + public function eagerlyResultSet(&$resultSet, $relation, $subRelation, $closure) + { + $morphType = $this->morphType; + $morphKey = $this->morphKey; + $type = $this->type; + $range = []; + + foreach ($resultSet as $result) { + $pk = $result->getPk(); + // 获取关联外键列表 + if (isset($result->$pk)) { + $range[] = $result->$pk; + } + } + + if (!empty($range)) { + $data = $this->eagerlyMorphToOne([ + [$morphKey, 'in', $range], + [$morphType, '=', $type], + ], $relation, $subRelation, $closure); + + // 关联属性名 + $attr = Loader::parseName($relation); + + // 关联数据封装 + foreach ($resultSet as $result) { + if (!isset($data[$result->$pk])) { + $relationModel = null; + } else { + $relationModel = $data[$result->$pk]; + $relationModel->setParent(clone $result); + $relationModel->isUpdate(true); + } + + $result->setRelation($attr, $relationModel); + } + } + } + + /** + * 预载入关联查询 + * @access public + * @param Model $result 数据对象 + * @param string $relation 当前关联名 + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包 + * @return void + */ + public function eagerlyResult(&$result, $relation, $subRelation, $closure) + { + $pk = $result->getPk(); + + if (isset($result->$pk)) { + $pk = $result->$pk; + $data = $this->eagerlyMorphToOne([ + [$this->morphKey, '=', $pk], + [$this->morphType, '=', $this->type], + ], $relation, $subRelation, $closure); + + if (isset($data[$pk])) { + $relationModel = $data[$pk]; + $relationModel->setParent(clone $result); + $relationModel->isUpdate(true); + } else { + $relationModel = null; + } + + $result->setRelation(Loader::parseName($relation), $relationModel); + } + } + + /** + * 多态一对一 关联模型预查询 + * @access protected + * @param array $where 关联预查询条件 + * @param string $relation 关联名 + * @param string $subRelation 子关联 + * @param bool|\Closure $closure 闭包 + * @return array + */ + protected function eagerlyMorphToOne($where, $relation, $subRelation = '', $closure = false) + { + // 预载入关联查询 支持嵌套预载入 + if ($closure) { + $closure($this->query); + } + + $list = $this->query->where($where)->with($subRelation)->find(); + $morphKey = $this->morphKey; + + // 组装模型数据 + $data = []; + + foreach ($list as $set) { + $data[$set->$morphKey] = $set; + } + + return $data; + } + + /** + * 保存(新增)当前关联数据对象 + * @access public + * @param mixed $data 数据 可以使用数组 关联模型对象 和 关联对象的主键 + * @return Model|false + */ + public function save($data) + { + if ($data instanceof Model) { + $data = $data->getData(); + } + // 保存关联表数据 + $pk = $this->parent->getPk(); + + $model = new $this->model; + + $data[$this->morphKey] = $this->parent->$pk; + $data[$this->morphType] = $this->type; + return $model->save($data) ? $model : false; + } + + /** + * 执行基础查询(进执行一次) + * @access protected + * @return void + */ + protected function baseQuery() + { + if (empty($this->baseQuery) && $this->parent->getData()) { + $pk = $this->parent->getPk(); + + $this->query->where([ + [$this->morphKey, '=', $this->parent->$pk], + [$this->morphType, '=', $this->type], + ]); + $this->baseQuery = true; + } + } + +} diff --git a/thinkphp/library/think/model/relation/MorphTo.php b/thinkphp/library/think/model/relation/MorphTo.php new file mode 100644 index 000000000..208c6ecf8 --- /dev/null +++ b/thinkphp/library/think/model/relation/MorphTo.php @@ -0,0 +1,306 @@ + +// +---------------------------------------------------------------------- + +namespace think\model\relation; + +use think\Exception; +use think\Loader; +use think\Model; +use think\model\Relation; + +class MorphTo extends Relation +{ + // 多态字段 + protected $morphKey; + protected $morphType; + // 多态别名 + protected $alias; + // 关联名 + protected $relation; + + /** + * 架构函数 + * @access public + * @param Model $parent 上级模型对象 + * @param string $morphType 多态字段名 + * @param string $morphKey 外键名 + * @param array $alias 多态别名定义 + * @param string $relation 关联名 + */ + public function __construct(Model $parent, $morphType, $morphKey, $alias = [], $relation = null) + { + $this->parent = $parent; + $this->morphType = $morphType; + $this->morphKey = $morphKey; + $this->alias = $alias; + $this->relation = $relation; + } + + /** + * 获取当前的关联模型类的实例 + * @access public + * @return Model + */ + public function getModel() + { + $morphType = $this->morphType; + $model = $this->parseModel($this->parent->$morphType); + + return (new $model); + } + + /** + * 延迟获取关联数据 + * @access public + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包查询条件 + * @return Model + */ + public function getRelation($subRelation = '', $closure = null) + { + $morphKey = $this->morphKey; + $morphType = $this->morphType; + + // 多态模型 + $model = $this->parseModel($this->parent->$morphType); + + // 主键数据 + $pk = $this->parent->$morphKey; + + $relationModel = (new $model)->relation($subRelation)->find($pk); + + if ($relationModel) { + $relationModel->setParent(clone $this->parent); + } + + return $relationModel; + } + + /** + * 根据关联条件查询当前模型 + * @access public + * @param string $operator 比较操作符 + * @param integer $count 个数 + * @param string $id 关联表的统计字段 + * @param string $joinType JOIN类型 + * @return Query + */ + public function has($operator = '>=', $count = 1, $id = '*', $joinType = 'INNER') + { + return $this->parent; + } + + /** + * 根据关联条件查询当前模型 + * @access public + * @param mixed $where 查询条件(数组或者闭包) + * @param mixed $fields 字段 + * @return Query + */ + public function hasWhere($where = [], $fields = null) + { + throw new Exception('relation not support: hasWhere'); + } + + /** + * 解析模型的完整命名空间 + * @access public + * @param string $model 模型名(或者完整类名) + * @return string + */ + protected function parseModel($model) + { + if (isset($this->alias[$model])) { + $model = $this->alias[$model]; + } + + if (false === strpos($model, '\\')) { + $path = explode('\\', get_class($this->parent)); + array_pop($path); + array_push($path, Loader::parseName($model, 1)); + $model = implode('\\', $path); + } + + return $model; + } + + /** + * 设置多态别名 + * @access public + * @param array $alias 别名定义 + * @return $this + */ + public function setAlias($alias) + { + $this->alias = $alias; + + return $this; + } + + /** + * 移除关联查询参数 + * @access public + * @return $this + */ + public function removeOption() + { + return $this; + } + + /** + * 预载入关联查询 + * @access public + * @param array $resultSet 数据集 + * @param string $relation 当前关联名 + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包 + * @return void + * @throws Exception + */ + public function eagerlyResultSet(&$resultSet, $relation, $subRelation, $closure) + { + $morphKey = $this->morphKey; + $morphType = $this->morphType; + $range = []; + + foreach ($resultSet as $result) { + // 获取关联外键列表 + if (!empty($result->$morphKey)) { + $range[$result->$morphType][] = $result->$morphKey; + } + } + + if (!empty($range)) { + // 关联属性名 + $attr = Loader::parseName($relation); + + foreach ($range as $key => $val) { + // 多态类型映射 + $model = $this->parseModel($key); + $obj = new $model; + $pk = $obj->getPk(); + $list = $obj->all($val, $subRelation); + $data = []; + + foreach ($list as $k => $vo) { + $data[$vo->$pk] = $vo; + } + + foreach ($resultSet as $result) { + if ($key == $result->$morphType) { + // 关联模型 + if (!isset($data[$result->$morphKey])) { + throw new Exception('relation data not exists :' . $this->model); + } else { + $relationModel = $data[$result->$morphKey]; + $relationModel->setParent(clone $result); + $relationModel->isUpdate(true); + + $result->setRelation($attr, $relationModel); + } + } + } + } + } + } + + /** + * 预载入关联查询 + * @access public + * @param Model $result 数据对象 + * @param string $relation 当前关联名 + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包 + * @return void + */ + public function eagerlyResult(&$result, $relation, $subRelation, $closure) + { + $morphKey = $this->morphKey; + $morphType = $this->morphType; + // 多态类型映射 + $model = $this->parseModel($result->{$this->morphType}); + + $this->eagerlyMorphToOne($model, $relation, $result, $subRelation); + } + + /** + * 关联统计 + * @access public + * @param Model $result 数据对象 + * @param \Closure $closure 闭包 + * @param string $aggregate 聚合查询方法 + * @param string $field 字段 + * @return integer + */ + public function relationCount($result, $closure, $aggregate = 'count', $field = '*') + {} + + /** + * 多态MorphTo 关联模型预查询 + * @access protected + * @param string $model 关联模型对象 + * @param string $relation 关联名 + * @param Model $result + * @param string $subRelation 子关联 + * @return void + */ + protected function eagerlyMorphToOne($model, $relation, &$result, $subRelation = '') + { + // 预载入关联查询 支持嵌套预载入 + $pk = $this->parent->{$this->morphKey}; + $data = (new $model)->with($subRelation)->find($pk); + + if ($data) { + $data->setParent(clone $result); + $data->isUpdate(true); + } + + $result->setRelation(Loader::parseName($relation), $data ?: null); + } + + /** + * 添加关联数据 + * @access public + * @param Model $model 关联模型对象 + * @param string $type 多态类型 + * @return Model + */ + public function associate($model, $type = '') + { + $morphKey = $this->morphKey; + $morphType = $this->morphType; + $pk = $model->getPk(); + + $this->parent->setAttr($morphKey, $model->$pk); + $this->parent->setAttr($morphType, $type ?: get_class($model)); + $this->parent->save(); + + return $this->parent->setRelation($this->relation, $model); + } + + /** + * 注销关联数据 + * @access public + * @return Model + */ + public function dissociate() + { + $morphKey = $this->morphKey; + $morphType = $this->morphType; + + $this->parent->setAttr($morphKey, null); + $this->parent->setAttr($morphType, null); + $this->parent->save(); + + return $this->parent->setRelation($this->relation, null); + } + +} diff --git a/thinkphp/library/think/model/relation/OneToOne.php b/thinkphp/library/think/model/relation/OneToOne.php new file mode 100644 index 000000000..195d0bdda --- /dev/null +++ b/thinkphp/library/think/model/relation/OneToOne.php @@ -0,0 +1,342 @@ + +// +---------------------------------------------------------------------- + +namespace think\model\relation; + +use think\db\Query; +use think\Exception; +use think\Loader; +use think\Model; +use think\model\Relation; + +/** + * Class OneToOne + * @package think\model\relation + * + */ +abstract class OneToOne extends Relation +{ + // 预载入方式 0 -JOIN 1 -IN + protected $eagerlyType = 1; + // 当前关联的JOIN类型 + protected $joinType; + // 要绑定的属性 + protected $bindAttr = []; + // 关联名 + protected $relation; + + /** + * 设置join类型 + * @access public + * @param string $type JOIN类型 + * @return $this + */ + public function joinType($type) + { + $this->joinType = $type; + return $this; + } + + /** + * 预载入关联查询(JOIN方式) + * @access public + * @param Query $query 查询对象 + * @param string $relation 关联名 + * @param string $subRelation 子关联 + * @param \Closure $closure 闭包条件 + * @param bool $first + * @return void + */ + public function eagerly(Query $query, $relation, $subRelation, $closure, $first) + { + $name = Loader::parseName(basename(str_replace('\\', '/', get_class($this->parent)))); + + if ($first) { + $table = $query->getTable(); + $query->table([$table => $name]); + + if ($query->getOptions('field')) { + $field = $query->getOptions('field'); + $query->removeOption('field'); + } else { + $field = true; + } + + $query->field($field, false, $table, $name); + } + + // 预载入封装 + $joinTable = $this->query->getTable(); + $joinAlias = $relation; + $query->via($joinAlias); + + if ($this instanceof BelongsTo) { + $query->join([$joinTable => $joinAlias], $name . '.' . $this->foreignKey . '=' . $joinAlias . '.' . $this->localKey, $this->joinType); + } else { + $query->join([$joinTable => $joinAlias], $name . '.' . $this->localKey . '=' . $joinAlias . '.' . $this->foreignKey, $this->joinType); + } + + if ($closure) { + // 执行闭包查询 + $closure($query); + // 使用withField指定获取关联的字段,如 + // $query->where(['id'=>1])->withField('id,name'); + if ($query->getOptions('with_field')) { + $field = $query->getOptions('with_field'); + $query->removeOption('with_field'); + } else { + $field = true; + } + } elseif (isset($this->option['field'])) { + $field = $this->option['field']; + } else { + $field = true; + } + + $query->field($field, false, $joinTable, $joinAlias, $relation . '__'); + } + + /** + * 预载入关联查询(数据集) + * @access protected + * @param array $resultSet + * @param string $relation + * @param string $subRelation + * @param \Closure $closure + * @return mixed + */ + abstract protected function eagerlySet(&$resultSet, $relation, $subRelation, $closure); + + /** + * 预载入关联查询(数据) + * @access protected + * @param Model $result + * @param string $relation + * @param string $subRelation + * @param \Closure $closure + * @return mixed + */ + abstract protected function eagerlyOne(&$result, $relation, $subRelation, $closure); + + /** + * 预载入关联查询(数据集) + * @access public + * @param array $resultSet 数据集 + * @param string $relation 当前关联名 + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包 + * @return void + */ + public function eagerlyResultSet(&$resultSet, $relation, $subRelation, $closure) + { + if (1 == $this->eagerlyType) { + // IN查询 + $this->eagerlySet($resultSet, $relation, $subRelation, $closure); + } else { + // 模型关联组装 + foreach ($resultSet as $result) { + $this->match($this->model, $relation, $result); + } + } + } + + /** + * 预载入关联查询(数据) + * @access public + * @param Model $result 数据对象 + * @param string $relation 当前关联名 + * @param string $subRelation 子关联名 + * @param \Closure $closure 闭包 + * @return void + */ + public function eagerlyResult(&$result, $relation, $subRelation, $closure) + { + if (1 == $this->eagerlyType) { + // IN查询 + $this->eagerlyOne($result, $relation, $subRelation, $closure); + } else { + // 模型关联组装 + $this->match($this->model, $relation, $result); + } + } + + /** + * 保存(新增)当前关联数据对象 + * @access public + * @param mixed $data 数据 可以使用数组 关联模型对象 和 关联对象的主键 + * @return Model|false + */ + public function save($data) + { + if ($data instanceof Model) { + $data = $data->getData(); + } + + $model = new $this->model; + // 保存关联表数据 + $data[$this->foreignKey] = $this->parent->{$this->localKey}; + + return $model->save($data) ? $model : false; + } + + /** + * 设置预载入方式 + * @access public + * @param integer $type 预载入方式 0 JOIN查询 1 IN查询 + * @return $this + */ + public function setEagerlyType($type) + { + $this->eagerlyType = $type; + + return $this; + } + + /** + * 获取预载入方式 + * @access public + * @return integer + */ + public function getEagerlyType() + { + return $this->eagerlyType; + } + + /** + * 绑定关联表的属性到父模型属性 + * @access public + * @param mixed $attr 要绑定的属性列表 + * @return $this + */ + public function bind($attr) + { + if (is_string($attr)) { + $attr = explode(',', $attr); + } + $this->bindAttr = $attr; + + return $this; + } + + /** + * 获取绑定属性 + * @access public + * @return array + */ + public function getBindAttr() + { + return $this->bindAttr; + } + + /** + * 关联统计 + * @access public + * @param Model $result 数据对象 + * @param \Closure $closure 闭包 + * @param string $aggregate 聚合查询方法 + * @param string $field 字段 + * @return integer + */ + public function relationCount($result, $closure, $aggregate = 'count', $field = '*') + { + throw new Exception('relation not support: ' . $aggregate); + } + + /** + * 一对一 关联模型预查询拼装 + * @access public + * @param string $model 模型名称 + * @param string $relation 关联名 + * @param Model $result 模型对象实例 + * @return void + */ + protected function match($model, $relation, &$result) + { + // 重新组装模型数据 + foreach ($result->getData() as $key => $val) { + if (strpos($key, '__')) { + list($name, $attr) = explode('__', $key, 2); + if ($name == $relation) { + $list[$name][$attr] = $val; + unset($result->$key); + } + } + } + + if (isset($list[$relation])) { + $relationModel = new $model($list[$relation]); + $relationModel->setParent(clone $result); + $relationModel->isUpdate(true); + + if (!empty($this->bindAttr)) { + $this->bindAttr($relationModel, $result, $this->bindAttr); + } + } else { + $relationModel = null; + } + + $result->setRelation(Loader::parseName($relation), $relationModel); + } + + /** + * 绑定关联属性到父模型 + * @access protected + * @param Model $model 关联模型对象 + * @param Model $result 父模型对象 + * @return void + * @throws Exception + */ + protected function bindAttr($model, &$result) + { + foreach ($this->bindAttr as $key => $attr) { + $key = is_numeric($key) ? $attr : $key; + if (isset($result->$key)) { + throw new Exception('bind attr has exists:' . $key); + } else { + $result->setAttr($key, $model ? $model->$attr : null); + } + } + } + + /** + * 一对一 关联模型预查询(IN方式) + * @access public + * @param array $where 关联预查询条件 + * @param string $key 关联键名 + * @param string $relation 关联名 + * @param string $subRelation 子关联 + * @param bool|\Closure $closure + * @return array + */ + protected function eagerlyWhere($where, $key, $relation, $subRelation = '', $closure = false) + { + // 预载入关联查询 支持嵌套预载入 + if ($closure) { + $closure($this->query); + + if ($field = $this->query->getOptions('with_field')) { + $this->query->field($field)->removeOption('with_field'); + } + } + + $list = $this->query->where($where)->with($subRelation)->select(); + + // 组装模型数据 + $data = []; + + foreach ($list as $set) { + $data[$set->$key] = $set; + } + + return $data; + } + +} diff --git a/thinkphp/library/think/paginator/Collection.php b/thinkphp/library/think/paginator/Collection.php new file mode 100644 index 000000000..4005c9ff9 --- /dev/null +++ b/thinkphp/library/think/paginator/Collection.php @@ -0,0 +1,74 @@ + +// +---------------------------------------------------------------------- + +namespace think\paginator; + +use Exception; +use think\Paginator; + +/** + * Class Collection + * @package think\paginator + * @method integer total() + * @method integer listRows() + * @method integer currentPage() + * @method string render() + * @method Paginator fragment($fragment) + * @method Paginator appends($key, $value) + * @method integer lastPage() + * @method boolean hasPages() + */ +class Collection extends \think\Collection +{ + + /** @var Paginator */ + protected $paginator; + + public function __construct($items = [], Paginator $paginator = null) + { + $this->paginator = $paginator; + parent::__construct($items); + } + + public static function make($items = [], Paginator $paginator = null) + { + return new static($items, $paginator); + } + + public function toArray() + { + if ($this->paginator) { + try { + $total = $this->total(); + } catch (Exception $e) { + $total = null; + } + + return [ + 'total' => $total, + 'per_page' => $this->listRows(), + 'current_page' => $this->currentPage(), + 'data' => parent::toArray(), + ]; + } else { + return parent::toArray(); + } + } + + public function __call($method, $args) + { + if ($this->paginator && method_exists($this->paginator, $method)) { + return call_user_func_array([$this->paginator, $method], $args); + } else { + throw new Exception('method not exists:' . __CLASS__ . '->' . $method); + } + } +} diff --git a/thinkphp/library/think/paginator/driver/Bootstrap.php b/thinkphp/library/think/paginator/driver/Bootstrap.php new file mode 100644 index 000000000..ab5315c06 --- /dev/null +++ b/thinkphp/library/think/paginator/driver/Bootstrap.php @@ -0,0 +1,206 @@ + +// +---------------------------------------------------------------------- + +namespace think\paginator\driver; + +use think\Paginator; + +class Bootstrap extends Paginator +{ + + /** + * 上一页按钮 + * @param string $text + * @return string + */ + protected function getPreviousButton($text = "«") + { + + if ($this->currentPage() <= 1) { + return $this->getDisabledTextWrapper($text); + } + + $url = $this->url( + $this->currentPage() - 1 + ); + + return $this->getPageLinkWrapper($url, $text); + } + + /** + * 下一页按钮 + * @param string $text + * @return string + */ + protected function getNextButton($text = '»') + { + if (!$this->hasMore) { + return $this->getDisabledTextWrapper($text); + } + + $url = $this->url($this->currentPage() + 1); + + return $this->getPageLinkWrapper($url, $text); + } + + /** + * 页码按钮 + * @return string + */ + protected function getLinks() + { + if ($this->simple) { + return ''; + } + + $block = [ + 'first' => null, + 'slider' => null, + 'last' => null, + ]; + + $side = 3; + $window = $side * 2; + + if ($this->lastPage < $window + 6) { + $block['first'] = $this->getUrlRange(1, $this->lastPage); + } elseif ($this->currentPage <= $window) { + $block['first'] = $this->getUrlRange(1, $window + 2); + $block['last'] = $this->getUrlRange($this->lastPage - 1, $this->lastPage); + } elseif ($this->currentPage > ($this->lastPage - $window)) { + $block['first'] = $this->getUrlRange(1, 2); + $block['last'] = $this->getUrlRange($this->lastPage - ($window + 2), $this->lastPage); + } else { + $block['first'] = $this->getUrlRange(1, 2); + $block['slider'] = $this->getUrlRange($this->currentPage - $side, $this->currentPage + $side); + $block['last'] = $this->getUrlRange($this->lastPage - 1, $this->lastPage); + } + + $html = ''; + + if (is_array($block['first'])) { + $html .= $this->getUrlLinks($block['first']); + } + + if (is_array($block['slider'])) { + $html .= $this->getDots(); + $html .= $this->getUrlLinks($block['slider']); + } + + if (is_array($block['last'])) { + $html .= $this->getDots(); + $html .= $this->getUrlLinks($block['last']); + } + + return $html; + } + + /** + * 渲染分页html + * @return mixed + */ + public function render() + { + if ($this->hasPages()) { + if ($this->simple) { + return sprintf( + '
    %s %s
', + $this->getPreviousButton(), + $this->getNextButton() + ); + } else { + return sprintf( + '
    %s %s %s
', + $this->getPreviousButton(), + $this->getLinks(), + $this->getNextButton() + ); + } + } + } + + /** + * 生成一个可点击的按钮 + * + * @param string $url + * @param int $page + * @return string + */ + protected function getAvailablePageWrapper($url, $page) + { + return '
  • ' . $page . '
  • '; + } + + /** + * 生成一个禁用的按钮 + * + * @param string $text + * @return string + */ + protected function getDisabledTextWrapper($text) + { + return '
  • ' . $text . '
  • '; + } + + /** + * 生成一个激活的按钮 + * + * @param string $text + * @return string + */ + protected function getActivePageWrapper($text) + { + return '
  • ' . $text . '
  • '; + } + + /** + * 生成省略号按钮 + * + * @return string + */ + protected function getDots() + { + return $this->getDisabledTextWrapper('...'); + } + + /** + * 批量生成页码按钮. + * + * @param array $urls + * @return string + */ + protected function getUrlLinks(array $urls) + { + $html = ''; + + foreach ($urls as $page => $url) { + $html .= $this->getPageLinkWrapper($url, $page); + } + + return $html; + } + + /** + * 生成普通页码按钮 + * + * @param string $url + * @param int $page + * @return string + */ + protected function getPageLinkWrapper($url, $page) + { + if ($this->currentPage() == $page) { + return $this->getActivePageWrapper($page); + } + + return $this->getAvailablePageWrapper($url, $page); + } +} diff --git a/thinkphp/library/think/process/Builder.php b/thinkphp/library/think/process/Builder.php new file mode 100644 index 000000000..da5616397 --- /dev/null +++ b/thinkphp/library/think/process/Builder.php @@ -0,0 +1,233 @@ + +// +---------------------------------------------------------------------- + +namespace think\process; + +use think\Process; + +class Builder +{ + private $arguments; + private $cwd; + private $env = null; + private $input; + private $timeout = 60; + private $options = []; + private $inheritEnv = true; + private $prefix = []; + private $outputDisabled = false; + + /** + * 构造方法 + * @param string[] $arguments 参数 + */ + public function __construct(array $arguments = []) + { + $this->arguments = $arguments; + } + + /** + * 创建一个实例 + * @param string[] $arguments 参数 + * @return self + */ + public static function create(array $arguments = []) + { + return new static($arguments); + } + + /** + * 添加一个参数 + * @param string $argument 参数 + * @return self + */ + public function add($argument) + { + $this->arguments[] = $argument; + + return $this; + } + + /** + * 添加一个前缀 + * @param string|array $prefix + * @return self + */ + public function setPrefix($prefix) + { + $this->prefix = is_array($prefix) ? $prefix : [$prefix]; + + return $this; + } + + /** + * 设置参数 + * @param string[] $arguments + * @return self + */ + public function setArguments(array $arguments) + { + $this->arguments = $arguments; + + return $this; + } + + /** + * 设置工作目录 + * @param null|string $cwd + * @return self + */ + public function setWorkingDirectory($cwd) + { + $this->cwd = $cwd; + + return $this; + } + + /** + * 是否初始化环境变量 + * @param bool $inheritEnv + * @return self + */ + public function inheritEnvironmentVariables($inheritEnv = true) + { + $this->inheritEnv = $inheritEnv; + + return $this; + } + + /** + * 设置环境变量 + * @param string $name + * @param null|string $value + * @return self + */ + public function setEnv($name, $value) + { + $this->env[$name] = $value; + + return $this; + } + + /** + * 添加环境变量 + * @param array $variables + * @return self + */ + public function addEnvironmentVariables(array $variables) + { + $this->env = array_replace($this->env, $variables); + + return $this; + } + + /** + * 设置输入 + * @param mixed $input + * @return self + */ + public function setInput($input) + { + $this->input = Utils::validateInput(sprintf('%s::%s', __CLASS__, __FUNCTION__), $input); + + return $this; + } + + /** + * 设置超时时间 + * @param float|null $timeout + * @return self + */ + public function setTimeout($timeout) + { + if (null === $timeout) { + $this->timeout = null; + + return $this; + } + + $timeout = (float) $timeout; + + if ($timeout < 0) { + throw new \InvalidArgumentException('The timeout value must be a valid positive integer or float number.'); + } + + $this->timeout = $timeout; + + return $this; + } + + /** + * 设置proc_open选项 + * @param string $name + * @param string $value + * @return self + */ + public function setOption($name, $value) + { + $this->options[$name] = $value; + + return $this; + } + + /** + * 禁止输出 + * @return self + */ + public function disableOutput() + { + $this->outputDisabled = true; + + return $this; + } + + /** + * 开启输出 + * @return self + */ + public function enableOutput() + { + $this->outputDisabled = false; + + return $this; + } + + /** + * 创建一个Process实例 + * @return Process + */ + public function getProcess() + { + if (0 === count($this->prefix) && 0 === count($this->arguments)) { + throw new \LogicException('You must add() command arguments before calling getProcess().'); + } + + $options = $this->options; + + $arguments = array_merge($this->prefix, $this->arguments); + $script = implode(' ', array_map([__NAMESPACE__ . '\\Utils', 'escapeArgument'], $arguments)); + + if ($this->inheritEnv) { + // include $_ENV for BC purposes + $env = array_replace($_ENV, $_SERVER, $this->env); + } else { + $env = $this->env; + } + + $process = new Process($script, $this->cwd, $env, $this->input, $this->timeout, $options); + + if ($this->outputDisabled) { + $process->disableOutput(); + } + + return $process; + } +} diff --git a/thinkphp/library/think/process/Utils.php b/thinkphp/library/think/process/Utils.php new file mode 100644 index 000000000..f94c6488e --- /dev/null +++ b/thinkphp/library/think/process/Utils.php @@ -0,0 +1,75 @@ + +// +---------------------------------------------------------------------- + +namespace think\process; + +class Utils +{ + + /** + * 转义字符串 + * @param string $argument + * @return string + */ + public static function escapeArgument($argument) + { + + if ('' === $argument) { + return escapeshellarg($argument); + } + $escapedArgument = ''; + $quote = false; + foreach (preg_split('/(")/i', $argument, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE) as $part) { + if ('"' === $part) { + $escapedArgument .= '\\"'; + } elseif (self::isSurroundedBy($part, '%')) { + // Avoid environment variable expansion + $escapedArgument .= '^%"' . substr($part, 1, -1) . '"^%'; + } else { + // escape trailing backslash + if ('\\' === substr($part, -1)) { + $part .= '\\'; + } + $quote = true; + $escapedArgument .= $part; + } + } + if ($quote) { + $escapedArgument = '"' . $escapedArgument . '"'; + } + return $escapedArgument; + } + + /** + * 验证并进行规范化Process输入。 + * @param string $caller + * @param mixed $input + * @return string + * @throws \InvalidArgumentException + */ + public static function validateInput($caller, $input) + { + if (null !== $input) { + if (is_resource($input)) { + return $input; + } + if (is_scalar($input)) { + return (string) $input; + } + throw new \InvalidArgumentException(sprintf('%s only accepts strings or stream resources.', $caller)); + } + return $input; + } + + private static function isSurroundedBy($arg, $char) + { + return 2 < strlen($arg) && $char === $arg[0] && $char === $arg[strlen($arg) - 1]; + } + +} diff --git a/thinkphp/library/think/process/exception/Faild.php b/thinkphp/library/think/process/exception/Faild.php new file mode 100644 index 000000000..38647bc11 --- /dev/null +++ b/thinkphp/library/think/process/exception/Faild.php @@ -0,0 +1,42 @@ + +// +---------------------------------------------------------------------- + +namespace think\process\exception; + +use think\Process; + +class Faild extends \RuntimeException +{ + + private $process; + + public function __construct(Process $process) + { + if ($process->isSuccessful()) { + throw new \InvalidArgumentException('Expected a failed process, but the given process was successful.'); + } + + $error = sprintf('The command "%s" failed.' . "\nExit Code: %s(%s)", $process->getCommandLine(), $process->getExitCode(), $process->getExitCodeText()); + + if (!$process->isOutputDisabled()) { + $error .= sprintf("\n\nOutput:\n================\n%s\n\nError Output:\n================\n%s", $process->getOutput(), $process->getErrorOutput()); + } + + parent::__construct($error); + + $this->process = $process; + } + + public function getProcess() + { + return $this->process; + } +} diff --git a/thinkphp/library/think/process/exception/Failed.php b/thinkphp/library/think/process/exception/Failed.php new file mode 100644 index 000000000..529508232 --- /dev/null +++ b/thinkphp/library/think/process/exception/Failed.php @@ -0,0 +1,42 @@ + +// +---------------------------------------------------------------------- + +namespace think\process\exception; + +use think\Process; + +class Failed extends \RuntimeException +{ + + private $process; + + public function __construct(Process $process) + { + if ($process->isSuccessful()) { + throw new \InvalidArgumentException('Expected a failed process, but the given process was successful.'); + } + + $error = sprintf('The command "%s" failed.' . "\nExit Code: %s(%s)", $process->getCommandLine(), $process->getExitCode(), $process->getExitCodeText()); + + if (!$process->isOutputDisabled()) { + $error .= sprintf("\n\nOutput:\n================\n%s\n\nError Output:\n================\n%s", $process->getOutput(), $process->getErrorOutput()); + } + + parent::__construct($error); + + $this->process = $process; + } + + public function getProcess() + { + return $this->process; + } +} diff --git a/thinkphp/library/think/process/exception/Timeout.php b/thinkphp/library/think/process/exception/Timeout.php new file mode 100644 index 000000000..d5f1162f4 --- /dev/null +++ b/thinkphp/library/think/process/exception/Timeout.php @@ -0,0 +1,61 @@ + +// +---------------------------------------------------------------------- + +namespace think\process\exception; + +use think\Process; + +class Timeout extends \RuntimeException +{ + + const TYPE_GENERAL = 1; + const TYPE_IDLE = 2; + + private $process; + private $timeoutType; + + public function __construct(Process $process, $timeoutType) + { + $this->process = $process; + $this->timeoutType = $timeoutType; + + parent::__construct(sprintf('The process "%s" exceeded the timeout of %s seconds.', $process->getCommandLine(), $this->getExceededTimeout())); + } + + public function getProcess() + { + return $this->process; + } + + public function isGeneralTimeout() + { + return $this->timeoutType === self::TYPE_GENERAL; + } + + public function isIdleTimeout() + { + return $this->timeoutType === self::TYPE_IDLE; + } + + public function getExceededTimeout() + { + switch ($this->timeoutType) { + case self::TYPE_GENERAL: + return $this->process->getTimeout(); + + case self::TYPE_IDLE: + return $this->process->getIdleTimeout(); + + default: + throw new \LogicException(sprintf('Unknown timeout type "%d".', $this->timeoutType)); + } + } +} diff --git a/thinkphp/library/think/process/pipes/Pipes.php b/thinkphp/library/think/process/pipes/Pipes.php new file mode 100644 index 000000000..82396b8ff --- /dev/null +++ b/thinkphp/library/think/process/pipes/Pipes.php @@ -0,0 +1,93 @@ + +// +---------------------------------------------------------------------- + +namespace think\process\pipes; + +abstract class Pipes +{ + + /** @var array */ + public $pipes = []; + + /** @var string */ + protected $inputBuffer = ''; + /** @var resource|null */ + protected $input; + + /** @var bool */ + private $blocked = true; + + const CHUNK_SIZE = 16384; + + /** + * 返回用于 proc_open 描述符的数组 + * @return array + */ + abstract public function getDescriptors(); + + /** + * 返回一个数组的索引由其相关的流,以防这些管道使用的临时文件的文件名。 + * @return string[] + */ + abstract public function getFiles(); + + /** + * 文件句柄和管道中读取数据。 + * @param bool $blocking 是否使用阻塞调用 + * @param bool $close 是否要关闭管道,如果他们已经到达 EOF。 + * @return string[] + */ + abstract public function readAndWrite($blocking, $close = false); + + /** + * 返回当前状态如果有打开的文件句柄或管道。 + * @return bool + */ + abstract public function areOpen(); + + /** + * {@inheritdoc} + */ + public function close() + { + foreach ($this->pipes as $pipe) { + fclose($pipe); + } + $this->pipes = []; + } + + /** + * 检查系统调用已被中断 + * @return bool + */ + protected function hasSystemCallBeenInterrupted() + { + $lastError = error_get_last(); + + return isset($lastError['message']) && false !== stripos($lastError['message'], 'interrupted system call'); + } + + protected function unblock() + { + if (!$this->blocked) { + return; + } + + foreach ($this->pipes as $pipe) { + stream_set_blocking($pipe, 0); + } + if (null !== $this->input) { + stream_set_blocking($this->input, 0); + } + + $this->blocked = false; + } +} diff --git a/thinkphp/library/think/process/pipes/Unix.php b/thinkphp/library/think/process/pipes/Unix.php new file mode 100644 index 000000000..fd99a5d67 --- /dev/null +++ b/thinkphp/library/think/process/pipes/Unix.php @@ -0,0 +1,196 @@ + +// +---------------------------------------------------------------------- + +namespace think\process\pipes; + +use think\Process; + +class Unix extends Pipes +{ + + /** @var bool */ + private $ttyMode; + /** @var bool */ + private $ptyMode; + /** @var bool */ + private $disableOutput; + + public function __construct($ttyMode, $ptyMode, $input, $disableOutput) + { + $this->ttyMode = (bool) $ttyMode; + $this->ptyMode = (bool) $ptyMode; + $this->disableOutput = (bool) $disableOutput; + + if (is_resource($input)) { + $this->input = $input; + } else { + $this->inputBuffer = (string) $input; + } + } + + public function __destruct() + { + $this->close(); + } + + /** + * {@inheritdoc} + */ + public function getDescriptors() + { + if ($this->disableOutput) { + $nullstream = fopen('/dev/null', 'c'); + + return [ + ['pipe', 'r'], + $nullstream, + $nullstream, + ]; + } + + if ($this->ttyMode) { + return [ + ['file', '/dev/tty', 'r'], + ['file', '/dev/tty', 'w'], + ['file', '/dev/tty', 'w'], + ]; + } + + if ($this->ptyMode && Process::isPtySupported()) { + return [ + ['pty'], + ['pty'], + ['pty'], + ]; + } + + return [ + ['pipe', 'r'], + ['pipe', 'w'], // stdout + ['pipe', 'w'], // stderr + ]; + } + + /** + * {@inheritdoc} + */ + public function getFiles() + { + return []; + } + + /** + * {@inheritdoc} + */ + public function readAndWrite($blocking, $close = false) + { + + if (1 === count($this->pipes) && [0] === array_keys($this->pipes)) { + fclose($this->pipes[0]); + unset($this->pipes[0]); + } + + if (empty($this->pipes)) { + return []; + } + + $this->unblock(); + + $read = []; + + if (null !== $this->input) { + $r = array_merge($this->pipes, ['input' => $this->input]); + } else { + $r = $this->pipes; + } + + unset($r[0]); + + $w = isset($this->pipes[0]) ? [$this->pipes[0]] : null; + $e = null; + + if (false === $n = @stream_select($r, $w, $e, 0, $blocking ? Process::TIMEOUT_PRECISION * 1E6 : 0)) { + + if (!$this->hasSystemCallBeenInterrupted()) { + $this->pipes = []; + } + + return $read; + } + + if (0 === $n) { + return $read; + } + + foreach ($r as $pipe) { + + $type = (false !== $found = array_search($pipe, $this->pipes)) ? $found : 'input'; + $data = ''; + while ('' !== $dataread = (string) fread($pipe, self::CHUNK_SIZE)) { + $data .= $dataread; + } + + if ('' !== $data) { + if ('input' === $type) { + $this->inputBuffer .= $data; + } else { + $read[$type] = $data; + } + } + + if (false === $data || (true === $close && feof($pipe) && '' === $data)) { + if ('input' === $type) { + $this->input = null; + } else { + fclose($this->pipes[$type]); + unset($this->pipes[$type]); + } + } + } + + if (null !== $w && 0 < count($w)) { + while (strlen($this->inputBuffer)) { + $written = fwrite($w[0], $this->inputBuffer, 2 << 18); // write 512k + if ($written > 0) { + $this->inputBuffer = (string) substr($this->inputBuffer, $written); + } else { + break; + } + } + } + + if ('' === $this->inputBuffer && null === $this->input && isset($this->pipes[0])) { + fclose($this->pipes[0]); + unset($this->pipes[0]); + } + + return $read; + } + + /** + * {@inheritdoc} + */ + public function areOpen() + { + return (bool) $this->pipes; + } + + /** + * 创建一个新的 UnixPipes 实例 + * @param Process $process + * @param string|resource $input + * @return self + */ + public static function create(Process $process, $input) + { + return new static($process->isTty(), $process->isPty(), $input, $process->isOutputDisabled()); + } +} diff --git a/thinkphp/library/think/process/pipes/Windows.php b/thinkphp/library/think/process/pipes/Windows.php new file mode 100644 index 000000000..1b8b0d4f2 --- /dev/null +++ b/thinkphp/library/think/process/pipes/Windows.php @@ -0,0 +1,228 @@ + +// +---------------------------------------------------------------------- + +namespace think\process\pipes; + +use think\Process; + +class Windows extends Pipes +{ + + /** @var array */ + private $files = []; + /** @var array */ + private $fileHandles = []; + /** @var array */ + private $readBytes = [ + Process::STDOUT => 0, + Process::STDERR => 0, + ]; + /** @var bool */ + private $disableOutput; + + public function __construct($disableOutput, $input) + { + $this->disableOutput = (bool) $disableOutput; + + if (!$this->disableOutput) { + + $this->files = [ + Process::STDOUT => tempnam(sys_get_temp_dir(), 'sf_proc_stdout'), + Process::STDERR => tempnam(sys_get_temp_dir(), 'sf_proc_stderr'), + ]; + foreach ($this->files as $offset => $file) { + $this->fileHandles[$offset] = fopen($this->files[$offset], 'rb'); + if (false === $this->fileHandles[$offset]) { + throw new \RuntimeException('A temporary file could not be opened to write the process output to, verify that your TEMP environment variable is writable'); + } + } + } + + if (is_resource($input)) { + $this->input = $input; + } else { + $this->inputBuffer = $input; + } + } + + public function __destruct() + { + $this->close(); + $this->removeFiles(); + } + + /** + * {@inheritdoc} + */ + public function getDescriptors() + { + if ($this->disableOutput) { + $nullstream = fopen('NUL', 'c'); + + return [ + ['pipe', 'r'], + $nullstream, + $nullstream, + ]; + } + + return [ + ['pipe', 'r'], + ['file', 'NUL', 'w'], + ['file', 'NUL', 'w'], + ]; + } + + /** + * {@inheritdoc} + */ + public function getFiles() + { + return $this->files; + } + + /** + * {@inheritdoc} + */ + public function readAndWrite($blocking, $close = false) + { + $this->write($blocking, $close); + + $read = []; + $fh = $this->fileHandles; + foreach ($fh as $type => $fileHandle) { + if (0 !== fseek($fileHandle, $this->readBytes[$type])) { + continue; + } + $data = ''; + $dataread = null; + while (!feof($fileHandle)) { + if (false !== $dataread = fread($fileHandle, self::CHUNK_SIZE)) { + $data .= $dataread; + } + } + if (0 < $length = strlen($data)) { + $this->readBytes[$type] += $length; + $read[$type] = $data; + } + + if (false === $dataread || (true === $close && feof($fileHandle) && '' === $data)) { + fclose($this->fileHandles[$type]); + unset($this->fileHandles[$type]); + } + } + + return $read; + } + + /** + * {@inheritdoc} + */ + public function areOpen() + { + return (bool) $this->pipes && (bool) $this->fileHandles; + } + + /** + * {@inheritdoc} + */ + public function close() + { + parent::close(); + foreach ($this->fileHandles as $handle) { + fclose($handle); + } + $this->fileHandles = []; + } + + /** + * 创建一个新的 WindowsPipes 实例。 + * @param Process $process + * @param $input + * @return self + */ + public static function create(Process $process, $input) + { + return new static($process->isOutputDisabled(), $input); + } + + /** + * 删除临时文件 + */ + private function removeFiles() + { + foreach ($this->files as $filename) { + if (file_exists($filename)) { + @unlink($filename); + } + } + $this->files = []; + } + + /** + * 写入到 stdin 输入 + * @param bool $blocking + * @param bool $close + */ + private function write($blocking, $close) + { + if (empty($this->pipes)) { + return; + } + + $this->unblock(); + + $r = null !== $this->input ? ['input' => $this->input] : null; + $w = isset($this->pipes[0]) ? [$this->pipes[0]] : null; + $e = null; + + if (false === $n = @stream_select($r, $w, $e, 0, $blocking ? Process::TIMEOUT_PRECISION * 1E6 : 0)) { + if (!$this->hasSystemCallBeenInterrupted()) { + $this->pipes = []; + } + + return; + } + + if (0 === $n) { + return; + } + + if (null !== $r && 0 < count($r)) { + $data = ''; + while ($dataread = fread($r['input'], self::CHUNK_SIZE)) { + $data .= $dataread; + } + + $this->inputBuffer .= $data; + + if (false === $data || (true === $close && feof($r['input']) && '' === $data)) { + $this->input = null; + } + } + + if (null !== $w && 0 < count($w)) { + while (strlen($this->inputBuffer)) { + $written = fwrite($w[0], $this->inputBuffer, 2 << 18); + if ($written > 0) { + $this->inputBuffer = (string) substr($this->inputBuffer, $written); + } else { + break; + } + } + } + + if ('' === $this->inputBuffer && null === $this->input && isset($this->pipes[0])) { + fclose($this->pipes[0]); + unset($this->pipes[0]); + } + } +} diff --git a/thinkphp/library/think/response/Json.php b/thinkphp/library/think/response/Json.php new file mode 100644 index 000000000..aa5bbd6fa --- /dev/null +++ b/thinkphp/library/think/response/Json.php @@ -0,0 +1,51 @@ + +// +---------------------------------------------------------------------- + +namespace think\response; + +use think\Response; + +class Json extends Response +{ + // 输出参数 + protected $options = [ + 'json_encode_param' => JSON_UNESCAPED_UNICODE, + ]; + + protected $contentType = 'application/json'; + + /** + * 处理数据 + * @access protected + * @param mixed $data 要处理的数据 + * @return mixed + * @throws \Exception + */ + protected function output($data) + { + try { + // 返回JSON数据格式到客户端 包含状态信息 + $data = json_encode($data, $this->options['json_encode_param']); + + if (false === $data) { + throw new \InvalidArgumentException(json_last_error_msg()); + } + + return $data; + } catch (\Exception $e) { + if ($e->getPrevious()) { + throw $e->getPrevious(); + } + throw $e; + } + } + +} diff --git a/thinkphp/library/think/response/Jsonp.php b/thinkphp/library/think/response/Jsonp.php new file mode 100644 index 000000000..9e53da2d1 --- /dev/null +++ b/thinkphp/library/think/response/Jsonp.php @@ -0,0 +1,59 @@ + +// +---------------------------------------------------------------------- + +namespace think\response; + +use think\Container; +use think\Response; + +class Jsonp extends Response +{ + // 输出参数 + protected $options = [ + 'var_jsonp_handler' => 'callback', + 'default_jsonp_handler' => 'jsonpReturn', + 'json_encode_param' => JSON_UNESCAPED_UNICODE, + ]; + + protected $contentType = 'application/javascript'; + + /** + * 处理数据 + * @access protected + * @param mixed $data 要处理的数据 + * @return mixed + * @throws \Exception + */ + protected function output($data) + { + try { + // 返回JSON数据格式到客户端 包含状态信息 [当url_common_param为false时是无法获取到$_GET的数据的,故使用Request来获取] + $var_jsonp_handler = Container::get('request')->param($this->options['var_jsonp_handler'], ""); + $handler = !empty($var_jsonp_handler) ? $var_jsonp_handler : $this->options['default_jsonp_handler']; + + $data = json_encode($data, $this->options['json_encode_param']); + + if (false === $data) { + throw new \InvalidArgumentException(json_last_error_msg()); + } + + $data = $handler . '(' . $data . ');'; + + return $data; + } catch (\Exception $e) { + if ($e->getPrevious()) { + throw $e->getPrevious(); + } + throw $e; + } + } + +} diff --git a/thinkphp/library/think/response/Jump.php b/thinkphp/library/think/response/Jump.php new file mode 100644 index 000000000..214afc7d4 --- /dev/null +++ b/thinkphp/library/think/response/Jump.php @@ -0,0 +1,36 @@ + +// +---------------------------------------------------------------------- + +namespace think\response; + +use think\Container; +use think\Response; + +class Jump extends Response +{ + protected $contentType = 'text/html'; + + /** + * 处理数据 + * @access protected + * @param mixed $data 要处理的数据 + * @return mixed + * @throws \Exception + */ + protected function output($data) + { + $config = Container::get('config'); + $data = Container::get('view') + ->init($config->pull('template')) + ->fetch($this->options['jump_template'], $data); + return $data; + } +} diff --git a/thinkphp/library/think/response/Redirect.php b/thinkphp/library/think/response/Redirect.php new file mode 100644 index 000000000..d6e5101a1 --- /dev/null +++ b/thinkphp/library/think/response/Redirect.php @@ -0,0 +1,116 @@ + +// +---------------------------------------------------------------------- + +namespace think\response; + +use think\Container; +use think\Response; + +class Redirect extends Response +{ + + protected $options = []; + + // URL参数 + protected $params = []; + + public function __construct($data = '', $code = 302, array $header = [], array $options = []) + { + parent::__construct($data, $code, $header, $options); + + $this->cacheControl('no-cache,must-revalidate'); + } + + /** + * 处理数据 + * @access protected + * @param mixed $data 要处理的数据 + * @return mixed + */ + protected function output($data) + { + $this->header['Location'] = $this->getTargetUrl(); + + return; + } + + /** + * 重定向传值(通过Session) + * @access protected + * @param string|array $name 变量名或者数组 + * @param mixed $value 值 + * @return $this + */ + public function with($name, $value = null) + { + $session = Container::get('session'); + + if (is_array($name)) { + foreach ($name as $key => $val) { + $session->flash($key, $val); + } + } else { + $session->flash($name, $value); + } + + return $this; + } + + /** + * 获取跳转地址 + * @access public + * @return string + */ + public function getTargetUrl() + { + if (strpos($this->data, '://') || (0 === strpos($this->data, '/') && empty($this->params))) { + return $this->data; + } else { + return Container::get('url')->build($this->data, $this->params); + } + } + + public function params($params = []) + { + $this->params = $params; + + return $this; + } + + /** + * 记住当前url后跳转 + * @access public + * @return $this + */ + public function remember() + { + Container::get('session')->set('redirect_url', Container::get('request')->url()); + + return $this; + } + + /** + * 跳转到上次记住的url + * @access public + * @return $this + */ + public function restore() + { + $session = Container::get('session'); + + if ($session->has('redirect_url')) { + $this->data = $session->get('redirect_url'); + $session->delete('redirect_url'); + } + + return $this; + } +} diff --git a/thinkphp/library/think/response/View.php b/thinkphp/library/think/response/View.php new file mode 100644 index 000000000..0b4cb28e0 --- /dev/null +++ b/thinkphp/library/think/response/View.php @@ -0,0 +1,99 @@ + +// +---------------------------------------------------------------------- + +namespace think\response; + +use think\Container; +use think\Response; + +class View extends Response +{ + // 输出参数 + protected $options = []; + protected $vars = []; + protected $filter; + protected $contentType = 'text/html'; + + /** + * 处理数据 + * @access protected + * @param mixed $data 要处理的数据 + * @return mixed + */ + protected function output($data) + { + // 渲染模板输出 + $config = Container::get('config'); + return Container::get('view') + ->init($config->pull('template')) + ->filter($this->filter) + ->fetch($data, $this->vars); + } + + /** + * 获取视图变量 + * @access public + * @param string $name 模板变量 + * @return mixed + */ + public function getVars($name = null) + { + if (is_null($name)) { + return $this->vars; + } else { + return isset($this->vars[$name]) ? $this->vars[$name] : null; + } + } + + /** + * 模板变量赋值 + * @access public + * @param mixed $name 变量名 + * @param mixed $value 变量值 + * @return $this + */ + public function assign($name, $value = '') + { + if (is_array($name)) { + $this->vars = array_merge($this->vars, $name); + } else { + $this->vars[$name] = $value; + } + + return $this; + } + + /** + * 视图内容过滤 + * @access public + * @param callable $filter + * @return $this + */ + public function filter($filter) + { + $this->filter = $filter; + return $this; + } + + /** + * 检查模板是否存在 + * @access private + * @param string|array $name 参数名 + * @return bool + */ + public function exists($name) + { + return Container::get('view') + ->init(Container::get('config')->pull('template')) + ->exists($name); + } + +} diff --git a/thinkphp/library/think/response/Xml.php b/thinkphp/library/think/response/Xml.php new file mode 100644 index 000000000..9c1681a4a --- /dev/null +++ b/thinkphp/library/think/response/Xml.php @@ -0,0 +1,116 @@ + +// +---------------------------------------------------------------------- + +namespace think\response; + +use think\Collection; +use think\Model; +use think\Response; + +class Xml extends Response +{ + // 输出参数 + protected $options = [ + // 根节点名 + 'root_node' => 'think', + // 根节点属性 + 'root_attr' => '', + //数字索引的子节点名 + 'item_node' => 'item', + // 数字索引子节点key转换的属性名 + 'item_key' => 'id', + // 数据编码 + 'encoding' => 'utf-8', + ]; + + protected $contentType = 'text/xml'; + + /** + * 处理数据 + * @access protected + * @param mixed $data 要处理的数据 + * @return mixed + */ + protected function output($data) + { + if (is_string($data)) { + if (0 !== strpos($data, 'options['encoding']; + $xml = ""; + $data = $xml . $data; + } + return $data; + } + + // XML数据转换 + return $this->xmlEncode($data, $this->options['root_node'], $this->options['item_node'], $this->options['root_attr'], $this->options['item_key'], $this->options['encoding']); + } + + /** + * XML编码 + * @access protected + * @param mixed $data 数据 + * @param string $root 根节点名 + * @param string $item 数字索引的子节点名 + * @param string $attr 根节点属性 + * @param string $id 数字索引子节点key转换的属性名 + * @param string $encoding 数据编码 + * @return string + */ + protected function xmlEncode($data, $root, $item, $attr, $id, $encoding) + { + if (is_array($attr)) { + $array = []; + foreach ($attr as $key => $value) { + $array[] = "{$key}=\"{$value}\""; + } + $attr = implode(' ', $array); + } + + $attr = trim($attr); + $attr = empty($attr) ? '' : " {$attr}"; + $xml = ""; + $xml .= "<{$root}{$attr}>"; + $xml .= $this->dataToXml($data, $item, $id); + $xml .= ""; + + return $xml; + } + + /** + * 数据XML编码 + * @access protected + * @param mixed $data 数据 + * @param string $item 数字索引时的节点名称 + * @param string $id 数字索引key转换为的属性名 + * @return string + */ + protected function dataToXml($data, $item, $id) + { + $xml = $attr = ''; + + if ($data instanceof Collection || $data instanceof Model) { + $data = $data->toArray(); + } + + foreach ($data as $key => $val) { + if (is_numeric($key)) { + $id && $attr = " {$id}=\"{$key}\""; + $key = $item; + } + $xml .= "<{$key}{$attr}>"; + $xml .= (is_array($val) || is_object($val)) ? $this->dataToXml($val, $item, $id) : $val; + $xml .= ""; + } + + return $xml; + } +} diff --git a/thinkphp/library/think/route/AliasRule.php b/thinkphp/library/think/route/AliasRule.php new file mode 100644 index 000000000..217046596 --- /dev/null +++ b/thinkphp/library/think/route/AliasRule.php @@ -0,0 +1,126 @@ + +// +---------------------------------------------------------------------- + +namespace think\route; + +use think\Route; + +class AliasRule extends Domain +{ + protected $route; + + /** + * 架构函数 + * @access public + * @param Route $router 路由实例 + * @param RuleGroup $parent 上级对象 + * @param string $name 路由别名 + * @param string $route 路由绑定 + * @param array $option 路由参数 + */ + public function __construct(Route $router, RuleGroup $parent, $name, $route, $option = []) + { + $this->router = $router; + $this->parent = $parent; + $this->name = $name; + $this->route = $route; + $this->option = $option; + } + + /** + * 检测域名路由 + * @access public + * @param Request $request 请求对象 + * @param string $url 访问地址 + * @param string $depr 路径分隔符 + * @param bool $completeMatch 路由是否完全匹配 + * @return Dispatch|false + */ + public function check($request, $url, $depr = '/', $completeMatch = false) + { + if ($dispatch = $this->checkCrossDomain($request)) { + // 允许跨域 + return $dispatch; + } + + // 检查参数有效性 + if (!$this->checkOption($this->option, $request)) { + return false; + } + + list($action, $bind) = array_pad(explode('|', $url, 2), 2, ''); + + if (isset($this->option['allow']) && !in_array($action, $this->option['allow'])) { + // 允许操作 + return false; + } elseif (isset($this->option['except']) && in_array($action, $this->option['except'])) { + // 排除操作 + return false; + } + + if (isset($this->option['method'][$action])) { + $this->option['method'] = $this->option['method'][$action]; + } + + // 匹配后执行的行为 + $this->afterMatchGroup($request); + + if ($this->parent) { + // 合并分组参数 + $this->mergeGroupOptions(); + } + + $this->parseBindAppendParam($this->route); + + if (0 === strpos($this->route, '\\')) { + // 路由到类 + return $this->bindToClass($bind, substr($this->route, 1)); + } elseif (0 === strpos($this->route, '@')) { + // 路由到控制器类 + return $this->bindToController($bind, substr($this->route, 1)); + } else { + // 路由到模块/控制器 + return $this->bindToModule($bind, $this->route); + } + } + + /** + * 设置允许的操作方法 + * @access public + * @param array $action 操作方法 + * @return $this + */ + public function allow($action = []) + { + return $this->option('allow', $action); + } + + /** + * 设置排除的操作方法 + * @access public + * @param array $action 操作方法 + * @return $this + */ + public function except($action = []) + { + return $this->option('except', $action); + } + + /** + * 获取当前的路由 + * @access public + * @return string + */ + public function getRoute() + { + return $this->route; + } +} diff --git a/thinkphp/library/think/route/Dispatch.php b/thinkphp/library/think/route/Dispatch.php new file mode 100644 index 000000000..ec7e15497 --- /dev/null +++ b/thinkphp/library/think/route/Dispatch.php @@ -0,0 +1,60 @@ + +// +---------------------------------------------------------------------- + +namespace think\route; + +use think\Container; + +abstract class Dispatch +{ + // 应用实例 + protected $app; + // 调度信息 + protected $dispatch; + // 调度参数 + protected $param; + // 状态码 + protected $code; + // 是否进行大小写转换 + protected $convert; + + public function __construct($dispatch, $param = [], $code = null) + { + $this->app = Container::get('app'); + $this->dispatch = $dispatch; + $this->param = $param; + $this->code = $code; + $this->init(); + } + + protected function init() + {} + + public function convert($convert) + { + $this->convert = $convert; + + return $this; + } + + public function getDispatch() + { + return $this->dispatch; + } + + public function getParam() + { + return $this->param; + } + + abstract public function run(); + +} diff --git a/thinkphp/library/think/route/Domain.php b/thinkphp/library/think/route/Domain.php new file mode 100644 index 000000000..9043017c4 --- /dev/null +++ b/thinkphp/library/think/route/Domain.php @@ -0,0 +1,233 @@ + +// +---------------------------------------------------------------------- + +namespace think\route; + +use think\Container; +use think\Loader; +use think\Route; +use think\route\dispatch\Callback as CallbackDispatch; +use think\route\dispatch\Controller as ControllerDispatch; +use think\route\dispatch\Module as ModuleDispatch; + +class Domain extends RuleGroup +{ + protected $bind; + + /** + * 架构函数 + * @access public + * @param Route $router 路由对象 + * @param string $name 路由域名 + * @param mixed $rule 域名路由 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + */ + public function __construct(Route $router, $name = '', $rule = null, $option = [], $pattern = []) + { + $this->router = $router; + $this->domain = $name; + $this->option = $option; + $this->rule = $rule; + $this->pattern = $pattern; + } + + /** + * 检测域名路由 + * @access public + * @param Request $request 请求对象 + * @param string $url 访问地址 + * @param string $depr 路径分隔符 + * @param bool $completeMatch 路由是否完全匹配 + * @return Dispatch|false + */ + public function check($request, $url, $depr = '/', $completeMatch = false) + { + // 检测别名路由 + $result = $this->checkRouteAlias($request, $url, $depr); + + if (false !== $result) { + return $result; + } + + // 检测URL绑定 + $result = $this->checkUrlBind($url, $depr); + + if (!empty($this->option['append'])) { + $request->route($this->option['append']); + unset($this->option['append']); + } + + if (false !== $result) { + return $result; + } + + // 添加域名中间件 + if (!empty($this->option['middleware'])) { + Container::get('middleware')->import($this->option['middleware']); + unset($this->option['middleware']); + } + + return parent::check($request, $url, $depr, $completeMatch); + } + + /** + * 设置路由绑定 + * @access public + * @param string $bind 绑定信息 + * @return $this + */ + public function bind($bind) + { + $this->bind = $bind; + $this->router->bind($bind, $this->domain); + + return $this; + } + + /** + * 检测路由别名 + * @access private + * @param Request $request + * @param string $url URL地址 + * @param string $depr URL分隔符 + * @return Dispatch|false + */ + private function checkRouteAlias($request, $url, $depr) + { + $alias = strpos($url, '|') ? strstr($url, '|', true) : $url; + + $item = $this->router->getAlias($alias); + + return $item ? $item->check($request, $url, $depr) : false; + } + + /** + * 检测URL绑定 + * @access private + * @param string $url URL地址 + * @param string $depr URL分隔符 + * @return Dispatch|false + */ + private function checkUrlBind($url, $depr = '/') + { + if (!empty($this->bind)) { + $bind = $this->bind; + $this->parseBindAppendParam($bind); + + // 记录绑定信息 + Container::get('app')->log('[ BIND ] ' . var_export($bind, true)); + + // 如果有URL绑定 则进行绑定检测 + $type = substr($bind, 0, 1); + $bind = substr($bind, 1); + + $bindTo = [ + '\\' => 'bindToClass', + '@' => 'bindToController', + ':' => 'bindToNamespace', + ]; + + if (isset($bindTo[$type])) { + return $this->{$bindTo[$type]}($url, $bind, $depr); + } + } + + return false; + } + + protected function parseBindAppendParam(&$bind) + { + if (false !== strpos($bind, '?')) { + list($bind, $query) = explode('?', $bind); + parse_str($query, $vars); + $this->append($vars); + } + } + + /** + * 绑定到类 + * @access protected + * @param string $url URL地址 + * @param string $class 类名(带命名空间) + * @return CallbackDispatch + */ + protected function bindToClass($url, $class) + { + $array = explode('|', $url, 2); + $action = !empty($array[0]) ? $array[0] : Container::get('config')->get('default_action'); + + if (!empty($array[1])) { + $this->parseUrlParams($array[1]); + } + + return new CallbackDispatch([$class, $action]); + } + + /** + * 绑定到命名空间 + * @access protected + * @param string $url URL地址 + * @param string $namespace 命名空间 + * @return CallbackDispatch + */ + protected function bindToNamespace($url, $namespace) + { + $array = explode('|', $url, 3); + $class = !empty($array[0]) ? $array[0] : Container::get('config')->get('default_controller'); + $method = !empty($array[1]) ? $array[1] : Container::get('config')->get('default_action'); + + if (!empty($array[2])) { + $this->parseUrlParams($array[2]); + } + + return new CallbackDispatch([$namespace . '\\' . Loader::parseName($class, 1), $method]); + } + + /** + * 绑定到控制器类 + * @access protected + * @param string $url URL地址 + * @param string $controller 控制器名 (支持带模块名 index/user ) + * @return ControllerDispatch + */ + protected function bindToController($url, $controller) + { + $array = explode('|', $url, 2); + $action = !empty($array[0]) ? $array[0] : Container::get('config')->get('default_action'); + + if (!empty($array[1])) { + $this->parseUrlParams($array[1]); + } + + return new ControllerDispatch($controller . '/' . $action); + } + + /** + * 绑定到模块/控制器 + * @access protected + * @param string $url URL地址 + * @param string $controller 控制器类名(带命名空间) + * @return ModuleDispatch + */ + protected function bindToModule($url, $controller) + { + $array = explode('|', $url, 2); + $action = !empty($array[0]) ? $array[0] : Container::get('config')->get('default_action'); + + if (!empty($array[1])) { + $this->parseUrlParams($array[1]); + } + + return new ModuleDispatch($controller . '/' . $action); + } + +} diff --git a/thinkphp/library/think/route/Resource.php b/thinkphp/library/think/route/Resource.php new file mode 100644 index 000000000..d280cb0b1 --- /dev/null +++ b/thinkphp/library/think/route/Resource.php @@ -0,0 +1,156 @@ + +// +---------------------------------------------------------------------- + +namespace think\route; + +use think\Route; + +class Resource extends RuleGroup +{ + // 资源路由名称 + protected $resource; + // 资源路由地址 + protected $route; + // REST路由方法定义 + protected $rest = []; + + /** + * 架构函数 + * @access public + * @param Route $router 路由对象 + * @param RuleGroup $parent 上级对象 + * @param string $name 资源名称 + * @param string $route 路由地址 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + * @param array $rest 资源定义 + */ + public function __construct(Route $router, RuleGroup $parent = null, $name = '', $route = '', $option = [], $pattern = [], $rest = []) + { + $this->router = $router; + $this->parent = $parent; + $this->resource = $name; + $this->route = $route; + $this->name = strpos($name, '.') ? strstr($name, '.', true) : $name; + + $this->setFullName(); + + // 资源路由默认为完整匹配 + $option['complete_match'] = true; + + $this->pattern = $pattern; + $this->option = $option; + $this->rest = $rest; + + if ($this->parent) { + $this->domain = $this->parent->getDomain(); + $this->parent->addRuleItem($this); + } + } + + /** + * 生成资源路由规则 + * @access protected + * @param string $rule 路由规则 + * @param array $option 路由参数 + * @return void + */ + protected function buildResourceRule($rule, $option = []) + { + $origin = $this->router->getGroup(); + $this->router->setGroup($this); + + if (strpos($rule, '.')) { + // 注册嵌套资源路由 + $array = explode('.', $rule); + $last = array_pop($array); + $item = []; + + foreach ($array as $val) { + $item[] = $val . '/<' . (isset($option['var'][$val]) ? $option['var'][$val] : $val . '_id') . '>'; + } + + $rule = implode('/', $item) . '/' . $last; + } + + // 注册资源路由 + foreach ($this->rest as $key => $val) { + if ((isset($option['only']) && !in_array($key, $option['only'])) + || (isset($option['except']) && in_array($key, $option['except']))) { + continue; + } + + if (isset($last) && strpos($val[1], '') && isset($option['var'][$last])) { + $val[1] = str_replace('', '<' . $option['var'][$last] . '>', $val[1]); + } elseif (strpos($val[1], '') && isset($option['var'][$rule])) { + $val[1] = str_replace('', '<' . $option['var'][$rule] . '>', $val[1]); + } + + $option['rest'] = $key; + + $this->addRule(trim($val[1], '/'), $this->route . '/' . $val[2], $val[0], $option); + } + + $this->router->setGroup($origin); + } + + /** + * rest方法定义和修改 + * @access public + * @param string $name 方法名称 + * @param array|bool $resource 资源 + * @return $this + */ + public function rest($name, $resource = []) + { + if (is_array($name)) { + $this->rest = $resource ? $name : array_merge($this->rest, $name); + } else { + $this->rest[$name] = $resource; + } + + return $this; + } + + /** + * 设置资源允许 + * @access public + * @param array $only + * @return $this + */ + public function only($only) + { + return $this->option('only', $only); + } + + /** + * 设置资源排除 + * @access public + * @param array $except + * @return $this + */ + public function except($except) + { + return $this->option('except', $except); + } + + /** + * 设置资源路由的变量 + * @access public + * @param array $vars + * @return $this + */ + public function vars($vars) + { + return $this->option('var', $vars); + } + +} diff --git a/thinkphp/library/think/route/Rule.php b/thinkphp/library/think/route/Rule.php new file mode 100644 index 000000000..8f9d47e92 --- /dev/null +++ b/thinkphp/library/think/route/Rule.php @@ -0,0 +1,1087 @@ + +// +---------------------------------------------------------------------- + +namespace think\route; + +use think\Container; +use think\exception\ValidateException; +use think\Request; +use think\Response; +use think\route\dispatch\Callback as CallbackDispatch; +use think\route\dispatch\Controller as ControllerDispatch; +use think\route\dispatch\Module as ModuleDispatch; +use think\route\dispatch\Redirect as RedirectDispatch; +use think\route\dispatch\Response as ResponseDispatch; +use think\route\dispatch\View as ViewDispatch; + +abstract class Rule +{ + protected $name; + // 路由对象实例 + protected $router; + // 路由父对象 + protected $parent; + // 路由参数 + protected $option = []; + // 路由变量规则 + protected $pattern = []; + // 需要合并的路由参数 + protected $mergeOptions = ['after', 'before', 'model', 'header', 'response', 'append', 'middleware']; + + abstract public function check($request, $url, $depr = '/'); + + /** + * 注册路由参数 + * @access public + * @param string|array $name 参数名 + * @param mixed $value 值 + * @return $this + */ + public function option($name, $value = '') + { + if (is_array($name)) { + $this->option = array_merge($this->option, $name); + } else { + $this->option[$name] = $value; + } + + return $this; + } + + /** + * 注册变量规则 + * @access public + * @param string|array $name 变量名 + * @param string $rule 变量规则 + * @return $this + */ + public function pattern($name, $rule = '') + { + if (is_array($name)) { + $this->pattern = array_merge($this->pattern, $name); + } else { + $this->pattern[$name] = $rule; + } + + return $this; + } + + /** + * 设置标识 + * @access public + * @param string $name 标识名 + * @return $this + */ + public function name($name) + { + $this->name = $name; + + return $this; + } + + /** + * 获取Name + * @access public + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * 获取Parent对象 + * @access public + * @return $this|null + */ + public function getParent() + { + return $this->parent; + } + + /** + * 获取变量规则定义 + * @access public + * @param string $name 变量名 + * @return mixed + */ + public function getPattern($name = '') + { + if ('' === $name) { + return $this->pattern; + } + + return isset($this->pattern[$name]) ? $this->pattern[$name] : null; + } + + /** + * 获取路由参数定义 + * @access public + * @param string $name 参数名 + * @return mixed + */ + public function getOption($name = '') + { + if ('' === $name) { + return $this->option; + } + + return isset($this->option[$name]) ? $this->option[$name] : null; + } + + /** + * 设置路由请求类型 + * @access public + * @param string $method + * @return $this + */ + public function method($method) + { + return $this->option('method', strtolower($method)); + } + + /** + * 设置路由前置行为 + * @access public + * @param array|\Closure $before + * @return $this + */ + public function before($before) + { + return $this->option('before', $before); + } + + /** + * 设置路由后置行为 + * @access public + * @param array|\Closure $after + * @return $this + */ + public function after($after) + { + return $this->option('after', $after); + } + + /** + * 检查后缀 + * @access public + * @param string $ext + * @return $this + */ + public function ext($ext = '') + { + return $this->option('ext', $ext); + } + + /** + * 检查禁止后缀 + * @access public + * @param string $ext + * @return $this + */ + public function denyExt($ext = '') + { + return $this->option('deny_ext', $ext); + } + + /** + * 检查域名 + * @access public + * @param string $domain + * @return $this + */ + public function domain($domain) + { + return $this->option('domain', $domain); + } + + /** + * 绑定模型 + * @access public + * @param array|string $var 路由变量名 多个使用 & 分割 + * @param string|\Closure $model 绑定模型类 + * @param bool $exception 是否抛出异常 + * @return $this + */ + public function model($var, $model = null, $exception = true) + { + if ($var instanceof \Closure) { + $this->option['model'][] = $var; + } elseif (is_array($var)) { + $this->option['model'] = $var; + } elseif (is_null($model)) { + $this->option['model']['id'] = [$var, true]; + } else { + $this->option['model'][$var] = [$model, $exception]; + } + + return $this; + } + + /** + * 附加路由隐式参数 + * @access public + * @param array $append + * @return $this + */ + public function append(array $append = []) + { + if (isset($this->option['append'])) { + $this->option['append'] = array_merge($this->option['append'], $append); + } else { + $this->option['append'] = $append; + } + + return $this; + } + + /** + * 绑定验证 + * @access public + * @param mixed $validate 验证器类 + * @param string $scene 验证场景 + * @param array $message 验证提示 + * @param bool $batch 批量验证 + * @return $this + */ + public function validate($validate, $scene = null, $message = [], $batch = false) + { + $this->option['validate'] = [$validate, $scene, $message, $batch]; + + return $this; + } + + /** + * 绑定Response对象 + * @access public + * @param mixed $response + * @return $this + */ + public function response($response) + { + $this->option['response'][] = $response; + return $this; + } + + /** + * 设置Response Header信息 + * @access public + * @param string|array $name 参数名 + * @param string $value 参数值 + * @return $this + */ + public function header($header, $value = null) + { + if (is_array($header)) { + $this->option['header'] = $header; + } else { + $this->option['header'][$header] = $value; + } + + return $this; + } + + /** + * 指定路由中间件 + * @access public + * @param string|array|\Closure $middleware + * @param mixed $param + * @return $this + */ + public function middleware($middleware, $param = null) + { + if (is_null($param) && is_array($middleware)) { + $this->option['middleware'] = $middleware; + } else { + foreach ((array) $middleware as $item) { + $this->option['middleware'][] = [$item, $param]; + } + } + + return $this; + } + + /** + * 设置路由缓存 + * @access public + * @param array|string $cache + * @return $this + */ + public function cache($cache) + { + return $this->option('cache', $cache); + } + + /** + * 检查URL分隔符 + * @access public + * @param bool $depr + * @return $this + */ + public function depr($depr) + { + return $this->option('param_depr', $depr); + } + + /** + * 是否合并额外参数 + * @access public + * @param bool $merge + * @return $this + */ + public function mergeExtraVars($merge = true) + { + return $this->option('merge_extra_vars', $merge); + } + + /** + * 设置需要合并的路由参数 + * @access public + * @param array $option + * @return $this + */ + public function mergeOptions($option = []) + { + $this->mergeOptions = array_merge($this->mergeOptions, $option); + return $this; + } + + /** + * 检查是否为HTTPS请求 + * @access public + * @param bool $https + * @return $this + */ + public function https($https = true) + { + return $this->option('https', $https); + } + + /** + * 检查是否为AJAX请求 + * @access public + * @param bool $ajax + * @return $this + */ + public function ajax($ajax = true) + { + return $this->option('ajax', $ajax); + } + + /** + * 检查是否为PJAX请求 + * @access public + * @param bool $pjax + * @return $this + */ + public function pjax($pjax = true) + { + return $this->option('pjax', $pjax); + } + + /** + * 当前路由到一个模板地址 当使用数组的时候可以传入模板变量 + * @access public + * @param bool|array $view + * @return $this + */ + public function view($view = true) + { + return $this->option('view', $view); + } + + /** + * 当前路由为重定向 + * @access public + * @param bool $redirect 是否为重定向 + * @return $this + */ + public function redirect($redirect = true) + { + return $this->option('redirect', $redirect); + } + + /** + * 设置路由完整匹配 + * @access public + * @param bool $match + * @return $this + */ + public function completeMatch($match = true) + { + return $this->option('complete_match', $match); + } + + /** + * 是否去除URL最后的斜线 + * @access public + * @param bool $remove + * @return $this + */ + public function removeSlash($remove = true) + { + return $this->option('remove_slash', $remove); + } + + /** + * 设置是否允许跨域 + * @access public + * @param bool $allow + * @param array $header + * @return $this + */ + public function allowCrossDomain($allow = true, $header = []) + { + if (!empty($header)) { + $this->header($header); + } + + if ($allow && $this->parent) { + $this->parent->addRuleItem($this, 'options'); + } + + return $this->option('cross_domain', $allow); + } + + /** + * 检查OPTIONS请求 + * @access public + * @param Request $request + * @return Dispatch|void + */ + protected function checkCrossDomain($request) + { + if (!empty($this->option['cross_domain'])) { + + $header = [ + 'Access-Control-Allow-Origin' => '*', + 'Access-Control-Allow-Methods' => 'GET, POST, PATCH, PUT, DELETE', + 'Access-Control-Allow-Headers' => 'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-Requested-With', + ]; + + if (!empty($this->option['header'])) { + $header = array_merge($header, $this->option['header']); + } + + $this->option['header'] = $header; + + if ($request->method(true) == 'OPTIONS') { + return new ResponseDispatch(Response::create()->code(204)->header($header)); + } + } + } + + /** + * 设置路由规则全局有效 + * @access public + * @return $this + */ + public function crossDomainRule() + { + if ($this instanceof RuleGroup) { + $method = '*'; + } else { + $method = $this->method; + } + + $this->router->setCrossDomainRule($this, $method); + + return $this; + } + + /** + * 合并分组参数 + * @access protected + * @return void + */ + protected function mergeGroupOptions() + { + $parentOption = $this->parent->getOption(); + // 合并分组参数 + foreach ($this->mergeOptions as $item) { + if (isset($parentOption[$item]) && isset($this->option[$item])) { + $this->option[$item] = array_merge($parentOption[$item], $this->option[$item]); + } + } + + $this->option = array_merge($parentOption, $this->option); + + return $this->option; + } + + /** + * 路由绑定模型实例 + * @access protected + * @param array|\Clousre $bindModel 绑定模型 + * @param array $matches 路由变量 + * @return void + */ + protected function createBindModel($bindModel, $matches) + { + foreach ($bindModel as $key => $val) { + if ($val instanceof \Closure) { + $result = Container::getInstance()->invokeFunction($val, $matches); + } else { + $fields = explode('&', $key); + + if (is_array($val)) { + list($model, $exception) = $val; + } else { + $model = $val; + $exception = true; + } + + $where = []; + $match = true; + + foreach ($fields as $field) { + if (!isset($matches[$field])) { + $match = false; + break; + } else { + $where[] = [$field, '=', $matches[$field]]; + } + } + + if ($match) { + $query = strpos($model, '\\') ? $model::where($where) : Container::get('app')->model($model)->where($where); + $result = $query->failException($exception)->find(); + } + } + + if (!empty($result)) { + // 注入容器 + Container::getInstance()->instance(get_class($result), $result); + } + } + } + + /** + * 处理路由请求缓存 + * @access protected + * @param Request $request 请求对象 + * @param string|array $cache 路由缓存 + * @return void + */ + protected function parseRequestCache($request, $cache) + { + if (is_array($cache)) { + list($key, $expire, $tag) = array_pad($cache, 3, null); + } else { + $key = str_replace('|', '/', $request->url()); + $expire = $cache; + $tag = null; + } + + $request->cache($key, $expire, $tag); + } + + /** + * 解析匹配到的规则路由 + * @access public + * @param Request $request 请求对象 + * @param string $rule 路由规则 + * @param string $route 路由地址 + * @param string $url URL地址 + * @param array $option 路由参数 + * @param array $matches 匹配的变量 + * @return Dispatch + */ + public function parseRule($request, $rule, $route, $url, $option = [], $matches = []) + { + if (is_string($route) && isset($option['prefix'])) { + // 路由地址前缀 + $route = $option['prefix'] . $route; + } + + // 替换路由地址中的变量 + if (is_string($route) && !empty($matches)) { + foreach ($matches as $key => $val) { + if (false !== strpos($route, '<' . $key . '>')) { + $route = str_replace('<' . $key . '>', $val, $route); + } elseif (false !== strpos($route, ':' . $key)) { + $route = str_replace(':' . $key, $val, $route); + } + } + } + + $this->afterMatchRule($request, $option, $matches); + + // 解析额外参数 + $count = substr_count($rule, '/'); + $url = array_slice(explode('|', $url), $count + 1); + $this->parseUrlParams(implode('|', $url), $matches); + + // 记录匹配的路由信息 + $request->routeInfo(['rule' => $rule, 'route' => $route, 'option' => $option, 'var' => $matches]); + + // 检测路由after行为 + if (!empty($option['after'])) { + $dispatch = $this->checkAfter($option['after']); + + if (false !== $dispatch) { + return $dispatch; + } + } + + // 数据自动验证 + if (isset($option['validate'])) { + $this->autoValidate($option['validate'], $request); + } + + // 发起路由调度 + return $this->dispatch($request, $route, $option); + } + + protected function afterMatchRule($request, $option = [], $matches = []) + { + // 添加中间件 + if (!empty($option['middleware'])) { + Container::get('middleware')->import($option['middleware']); + } + + // 绑定模型数据 + if (!empty($option['model'])) { + $this->createBindModel($option['model'], $matches); + } + + // 指定Header数据 + if (!empty($option['header'])) { + $header = $option['header']; + Container::get('hook')->add('response_send', function ($response) use ($header) { + $response->header($header); + }); + } + + // 指定Response响应数据 + if (!empty($option['response'])) { + Container::get('hook')->add('response_send', $option['response']); + } + + // 开启请求缓存 + if (isset($option['cache']) && $request->isGet()) { + $this->parseRequestCache($request, $option['cache']); + } + + if (!empty($option['append'])) { + $request->route($option['append']); + } + } + + /** + * 验证数据 + * @access protected + * @param array $option + * @param \think\Request $request + * @return void + * @throws ValidateException + */ + protected function autoValidate($option, $request) + { + list($validate, $scene, $message, $batch) = $option; + + if (is_array($validate)) { + // 指定验证规则 + $v = Container::get('app')->validate(); + $v->rule($validate); + } else { + // 调用验证器 + $v = Container::get('app')->validate($validate); + if (!empty($scene)) { + $v->scene($scene); + } + } + + if (!empty($message)) { + $v->message($message); + } + + // 批量验证 + if ($batch) { + $v->batch(true); + } + + if (!$v->check($request->param())) { + throw new ValidateException($v->getError()); + } + } + + /** + * 检查路由前置行为 + * @access protected + * @param mixed $before 前置行为 + * @return mixed + */ + protected function checkBefore($before) + { + $hook = Container::get('hook'); + + foreach ((array) $before as $behavior) { + $result = $hook->exec($behavior); + + if (false === $result) { + return false; + } + } + } + + /** + * 检查路由后置行为 + * @access protected + * @param mixed $after 后置行为 + * @return mixed + */ + protected function checkAfter($after) + { + Container::get('log')->notice('路由后置行为建议使用中间件替代!'); + + $hook = Container::get('hook'); + + $result = null; + + foreach ((array) $after as $behavior) { + $result = $hook->exec($behavior); + + if (!is_null($result)) { + break; + } + } + + // 路由规则重定向 + if ($result instanceof Response) { + return new ResponseDispatch($result); + } elseif ($result instanceof Dispatch) { + return $result; + } + + return false; + } + + /** + * 发起路由调度 + * @access protected + * @param Request $request Request对象 + * @param mixed $route 路由地址 + * @param array $option 路由参数 + * @return Dispatch + */ + protected function dispatch($request, $route, $option) + { + if ($route instanceof \Closure) { + // 执行闭包 + $result = new CallbackDispatch($route); + } elseif ($route instanceof Response) { + $result = new ResponseDispatch($route); + } elseif (isset($option['view']) && false !== $option['view']) { + $result = new ViewDispatch($route, is_array($option['view']) ? $option['view'] : []); + } elseif (!empty($option['redirect']) || 0 === strpos($route, '/') || strpos($route, '://')) { + // 路由到重定向地址 + $result = new RedirectDispatch($route, [], isset($option['status']) ? $option['status'] : 301); + } elseif (false !== strpos($route, '\\')) { + // 路由到方法 + $result = $this->dispatchMethod($route); + } elseif (0 === strpos($route, '@')) { + // 路由到控制器 + $result = $this->dispatchController($request, substr($route, 1)); + } else { + // 路由到模块/控制器/操作 + $result = $this->dispatchModule($request, $route); + } + + return $result; + } + + /** + * 解析URL地址为 模块/控制器/操作 + * @access protected + * @param string $route 路由地址 + * @return CallbackDispatch + */ + protected function dispatchMethod($route) + { + list($path, $var) = $this->parseUrlPath($route); + + $route = str_replace('/', '@', implode('/', $path)); + $method = strpos($route, '@') ? explode('@', $route) : $route; + + return new CallbackDispatch($method, $var); + } + + /** + * 解析URL地址为 模块/控制器/操作 + * @access protected + * @param Request $request Request对象 + * @param string $route 路由地址 + * @return ControllerDispatch + */ + protected function dispatchController($request, $route) + { + list($route, $var) = $this->parseUrlPath($route); + + $result = new ControllerDispatch(implode('/', $route), $var); + + $request->action(array_pop($route)); + $app = Container::get('app'); + $request->controller($route ? array_pop($route) : $app->config('default_controller')); + $request->module($route ? array_pop($route) : $app->config('default_module')); + $app->setModulePath($app->getAppPath() . ($app->config('app_multi_module') ? $request->module() . DIRECTORY_SEPARATOR : '')); + + return $result; + } + + /** + * 解析URL地址为 模块/控制器/操作 + * @access protected + * @param Request $request Request对象 + * @param string $route 路由地址 + * @return ModuleDispatch + */ + protected function dispatchModule($request, $route) + { + list($path, $var) = $this->parseUrlPath($route); + + $config = Container::get('config'); + $action = array_pop($path); + $controller = !empty($path) ? array_pop($path) : null; + $module = $config->get('app_multi_module') && !empty($path) ? array_pop($path) : null; + $method = $request->method(); + + if ($config->get('use_action_prefix') && $this->router->getMethodPrefix($method)) { + $prefix = $this->router->getMethodPrefix($method); + // 操作方法前缀支持 + $action = 0 !== strpos($action, $prefix) ? $prefix . $action : $action; + } + + // 设置当前请求的路由变量 + $request->route($var); + + // 路由到模块/控制器/操作 + return new ModuleDispatch([$module, $controller, $action], [], false); + } + + /** + * 路由检查 + * @access protected + * @param array $option 路由参数 + * @param Request $request Request对象 + * @return bool + */ + protected function checkOption($option, Request $request) + { + // 请求类型检测 + if (!empty($option['method'])) { + if (is_string($option['method']) && false === stripos($option['method'], $request->method())) { + return false; + } + } + + // AJAX PJAX 请求检查 + foreach (['ajax', 'pjax'] as $item) { + if (isset($option[$item])) { + $call = 'is' . $item; + if ($option[$item] && !$request->$call() || !$option[$item] && $request->$call()) { + return false; + } + } + } + + // 伪静态后缀检测 + if ($request->url() != '/' && ((isset($option['ext']) && false === stripos('|' . $option['ext'] . '|', '|' . $request->ext() . '|')) + || (isset($option['deny_ext']) && false !== stripos('|' . $option['deny_ext'] . '|', '|' . $request->ext() . '|')))) { + return false; + } + + // 域名检查 + if ((isset($option['domain']) && !in_array($option['domain'], [$_SERVER['HTTP_HOST'], $request->subDomain()]))) { + return false; + } + + // HTTPS检查 + if ((isset($option['https']) && $option['https'] && !$request->isSsl()) + || (isset($option['https']) && !$option['https'] && $request->isSsl())) { + return false; + } + + return true; + } + + /** + * 解析URL地址中的参数Request对象 + * @access protected + * @param string $rule 路由规则 + * @param array $var 变量 + * @return void + */ + protected function parseUrlParams($url, &$var = []) + { + if ($url) { + if (Container::get('config')->get('url_param_type')) { + $var += explode('|', $url); + } else { + preg_replace_callback('/(\w+)\|([^\|]+)/', function ($match) use (&$var) { + $var[$match[1]] = strip_tags($match[2]); + }, $url); + } + } + + // 设置当前请求的参数 + Container::get('request')->route($var); + } + + /** + * 解析URL的pathinfo参数和变量 + * @access protected + * @param string $url URL地址 + * @return array + */ + protected function parseUrlPath($url) + { + // 分隔符替换 确保路由定义使用统一的分隔符 + $url = str_replace('|', '/', $url); + $url = trim($url, '/'); + $var = []; + + if (false !== strpos($url, '?')) { + // [模块/控制器/操作?]参数1=值1&参数2=值2... + $info = parse_url($url); + $path = explode('/', $info['path']); + parse_str($info['query'], $var); + } elseif (strpos($url, '/')) { + // [模块/控制器/操作] + $path = explode('/', $url); + } elseif (false !== strpos($url, '=')) { + // 参数1=值1&参数2=值2... + parse_str($url, $var); + } else { + $path = [$url]; + } + + return [$path, $var]; + } + + /** + * 生成路由的正则规则 + * @access protected + * @param string $rule 路由规则 + * @param array $match 匹配的变量 + * @param array $pattern 路由变量规则 + * @param array $option 路由参数 + * @param bool $completeMatch 路由是否完全匹配 + * @param string $suffix 路由正则变量后缀 + * @return string + */ + protected function buildRuleRegex($rule, $match, $pattern = [], $option = [], $completeMatch = false, $suffix = '') + { + foreach ($match as $name) { + $replace[] = $this->buildNameRegex($name, $pattern, $suffix); + } + + // 是否区分 / 地址访问 + if (!empty($option['remove_slash']) && '/' != $rule) { + $rule = rtrim($rule, '/'); + } + + $regex = str_replace($match, $replace, $rule); + $regex = str_replace([')?/', ')/', ')?-', ')-', '\\\\/'], [')\/', ')\/', ')\-', ')\-', '\/'], $regex); + + return $regex . ($completeMatch ? '$' : ''); + } + + /** + * 生成路由变量的正则规则 + * @access protected + * @param string $name 路由变量 + * @param string $pattern 变量规则 + * @param string $suffix 路由正则变量后缀 + * @return string + */ + protected function buildNameRegex($name, $pattern, $suffix) + { + $optional = ''; + $slash = substr($name, 0, 1); + + if (in_array($slash, ['/', '-'])) { + $prefix = '\\' . $slash; + $name = substr($name, 1); + $slash = substr($name, 0, 1); + } else { + $prefix = ''; + } + + if ('<' != $slash) { + return $prefix . preg_quote($name, '/'); + } + + if (strpos($name, '?')) { + $name = substr($name, 1, -2); + $optional = '?'; + } elseif (strpos($name, '>')) { + $name = substr($name, 1, -1); + } + + if (isset($pattern[$name])) { + $nameRule = $pattern[$name]; + if (0 === strpos($nameRule, '/') && '/' == substr($nameRule, -1)) { + $nameRule = substr($nameRule, 1, -1); + } + } else { + $nameRule = '\w+'; + } + + return '(' . $prefix . '(?<' . $name . $suffix . '>' . $nameRule . '))' . $optional; + } + + /** + * 分析路由规则中的变量 + * @access protected + * @param string $rule 路由规则 + * @return array + */ + protected function parseVar($rule) + { + // 提取路由规则中的变量 + $var = []; + + if (preg_match_all('/<\w+\??>/', $rule, $matches)) { + foreach ($matches[0] as $name) { + $optional = false; + + if (strpos($name, '?')) { + $name = substr($name, 1, -2); + $optional = true; + } else { + $name = substr($name, 1, -1); + } + + $var[$name] = $optional ? 2 : 1; + } + } + + return $var; + } + + /** + * 设置路由参数 + * @access public + * @param string $method 方法名 + * @param array $args 调用参数 + * @return $this + */ + public function __call($method, $args) + { + if (count($args) > 1) { + $args[0] = $args; + } + array_unshift($args, $method); + + return call_user_func_array([$this, 'option'], $args); + } +} diff --git a/thinkphp/library/think/route/RuleGroup.php b/thinkphp/library/think/route/RuleGroup.php new file mode 100644 index 000000000..1fe3b2722 --- /dev/null +++ b/thinkphp/library/think/route/RuleGroup.php @@ -0,0 +1,523 @@ + +// +---------------------------------------------------------------------- + +namespace think\route; + +use think\Container; +use think\Exception; +use think\Request; +use think\Response; +use think\Route; +use think\route\dispatch\Response as ResponseDispatch; +use think\route\dispatch\Url as UrlDispatch; + +class RuleGroup extends Rule +{ + // 分组路由(包括子分组) + protected $rules = [ + '*' => [], + 'get' => [], + 'post' => [], + 'put' => [], + 'patch' => [], + 'delete' => [], + 'head' => [], + 'options' => [], + ]; + + protected $rule; + + // MISS路由 + protected $miss; + + // 自动路由 + protected $auto; + + // 完整名称 + protected $fullName; + + // 所在域名 + protected $domain; + + /** + * 架构函数 + * @access public + * @param Route $router 路由对象 + * @param RuleGroup $parent 上级对象 + * @param string $name 分组名称 + * @param mixed $rule 分组路由 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + */ + public function __construct(Route $router, RuleGroup $parent = null, $name = '', $rule = [], $option = [], $pattern = []) + { + $this->router = $router; + $this->parent = $parent; + $this->rule = $rule; + $this->name = trim($name, '/'); + $this->option = $option; + $this->pattern = $pattern; + + $this->setFullName(); + + if ($this->parent) { + $this->domain = $this->parent->getDomain(); + $this->parent->addRuleItem($this); + } + + if (!empty($option['cross_domain'])) { + $this->router->setCrossDomainRule($this); + } + } + + /** + * 设置分组的路由规则 + * @access public + * @return void + */ + protected function setFullName() + { + if (false !== strpos($this->name, ':')) { + $this->name = preg_replace(['/\[\:(\w+)\]/', '/\:(\w+)/'], ['<\1?>', '<\1>'], $this->name); + } + + if ($this->parent && $this->parent->getFullName()) { + $this->fullName = $this->parent->getFullName() . ($this->name ? '/' . $this->name : ''); + } else { + $this->fullName = $this->name; + } + } + + /** + * 获取所属域名 + * @access public + * @return string + */ + public function getDomain() + { + return $this->domain; + } + + /** + * 检测分组路由 + * @access public + * @param Request $request 请求对象 + * @param string $url 访问地址 + * @param string $depr 路径分隔符 + * @param bool $completeMatch 路由是否完全匹配 + * @return Dispatch|false + */ + public function check($request, $url, $depr = '/', $completeMatch = false) + { + if ($dispatch = $this->checkCrossDomain($request)) { + // 跨域OPTIONS请求 + return $dispatch; + } + + // 检查分组有效性 + if (!$this->checkOption($this->option, $request) || !$this->checkUrl($url)) { + return false; + } + + // 解析分组路由 + if ($this instanceof Resource) { + $this->buildResourceRule($this->resource, $this->option); + } elseif ($this->rule) { + if ($this->rule instanceof Response) { + return new ResponseDispatch($this->rule); + } + + $this->parseGroupRule($this->rule); + } + + // 获取当前路由规则 + $method = strtolower($request->method()); + $rules = $this->getMethodRules($method); + + if (count($rules) == 0) { + return false; + } + + if ($this->parent) { + // 合并分组参数 + $this->mergeGroupOptions(); + // 合并分组变量规则 + $this->pattern = array_merge($this->parent->getPattern(), $this->pattern); + } + + if (isset($this->option['complete_match'])) { + $completeMatch = $this->option['complete_match']; + } + + if (!empty($this->option['merge_rule_regex'])) { + // 合并路由正则规则进行路由匹配检查 + $result = $this->checkMergeRuleRegex($request, $rules, $url, $depr, $completeMatch); + + if (false !== $result) { + return $result; + } + } + + // 检查分组路由 + foreach ($rules as $key => $item) { + $result = $item->check($request, $url, $depr, $completeMatch); + + if (false !== $result) { + return $result; + } + } + + if ($this->auto) { + // 自动解析URL地址 + $result = new UrlDispatch($this->auto . '/' . $url, ['depr' => $depr, 'auto_search' => false]); + } elseif ($this->miss && in_array($this->miss->getMethod(), ['*', $method])) { + // 未匹配所有路由的路由规则处理 + $result = $this->parseRule($request, '', $this->miss->getRoute(), $url, $this->miss->getOption()); + } else { + $result = false; + } + + return $result; + } + + /** + * 获取当前请求的路由规则(包括子分组、资源路由) + * @access protected + * @param string $method + * @return array + */ + protected function getMethodRules($method) + { + return array_merge($this->rules[$method], $this->rules['*']); + } + + /** + * 分组URL匹配检查 + * @access protected + * @param string $url + * @return bool + */ + protected function checkUrl($url) + { + if ($this->fullName) { + $pos = strpos($this->fullName, '<'); + + if (false !== $pos) { + $str = substr($this->fullName, 0, $pos); + } else { + $str = $this->fullName; + } + + if ($str && 0 !== stripos(str_replace('|', '/', $url), $str)) { + return false; + } + } + + return true; + } + + /** + * 延迟解析分组的路由规则 + * @access public + * @param bool $lazy 路由是否延迟解析 + * @return $this + */ + public function lazy($lazy = true) + { + if (!$lazy) { + $this->parseGroupRule($this->rule); + $this->rule = null; + } + + return $this; + } + + /** + * 解析分组和域名的路由规则及绑定 + * @access public + * @param mixed $rule 路由规则 + * @return void + */ + public function parseGroupRule($rule) + { + $origin = $this->router->getGroup(); + $this->router->setGroup($this); + + if ($rule instanceof \Closure) { + Container::getInstance()->invokeFunction($rule); + } elseif (is_array($rule)) { + $this->addRules($rule); + } elseif (is_string($rule) && $rule) { + $this->router->bind($rule, $this->domain); + } + + $this->router->setGroup($origin); + } + + /** + * 检测分组路由 + * @access public + * @param Request $request 请求对象 + * @param array $rules 路由规则 + * @param string $url 访问地址 + * @param string $depr 路径分隔符 + * @param bool $completeMatch 路由是否完全匹配 + * @return Dispatch|false + */ + protected function checkMergeRuleRegex($request, &$rules, $url, $depr, $completeMatch) + { + $url = $depr . str_replace('|', $depr, $url); + + foreach ($rules as $key => $item) { + if ($item instanceof RuleItem) { + $rule = $depr . str_replace('/', $depr, $item->getRule()); + if ($depr == $rule && $depr != $url) { + unset($rules[$key]); + continue; + } + + $complete = null !== $item->getOption('complete_match') ? $item->getOption('complete_match') : $completeMatch; + + if (false === strpos($rule, '<')) { + if (0 === strcasecmp($rule, $url) || (!$complete && 0 === strncasecmp($rule, $url, strlen($rule)))) { + return $item->checkRule($request, $url, []); + } + + unset($rules[$key]); + continue; + } + + $slash = preg_quote('/-' . $depr, '/'); + + if ($matchRule = preg_split('/[' . $slash . ']<\w+\??>/', $rule, 2)) { + if ($matchRule[0] && 0 !== strncasecmp($rule, $url, strlen($matchRule[0]))) { + unset($rules[$key]); + continue; + } + } + + if (preg_match_all('/[' . $slash . ']??/', $rule, $matches)) { + unset($rules[$key]); + $pattern = array_merge($this->getPattern(), $item->getPattern()); + $option = array_merge($this->getOption(), $item->getOption()); + + $regex[$key] = $this->buildRuleRegex($rule, $matches[0], $pattern, $option, $complete, '_THINK_' . $key); + $items[$key] = $item; + } + } + } + + try { + if (!empty($regex) && preg_match('/^(?:' . implode('|', $regex) . ')/u', $url, $match)) { + $var = []; + foreach ($match as $key => $val) { + if (is_string($key) && '' !== $val) { + list($name, $pos) = explode('_THINK_', $key); + + $var[$name] = $val; + } + } + + if (!isset($pos)) { + foreach ($regex as $key => $item) { + if (0 === strpos(str_replace(['\/', '\-', '\\' . $depr], ['/', '-', $depr], $item), $match[0])) { + $pos = $key; + break; + } + } + } + + return $items[$pos]->checkRule($request, $url, $var); + } + + return false; + } catch (\Exception $e) { + throw new Exception('route pattern error'); + } + } + + /** + * 获取分组的MISS路由 + * @access public + * @return RuleItem|null + */ + public function getMissRule() + { + return $this->miss; + } + + /** + * 获取分组的自动路由 + * @access public + * @return string + */ + public function getAutoRule() + { + return $this->auto; + } + + /** + * 注册自动路由 + * @access public + * @param string $route 路由规则 + * @return void + */ + public function addAutoRule($route) + { + $this->auto = $route; + } + + /** + * 注册MISS路由 + * @access public + * @param string $route 路由地址 + * @param string $method 请求类型 + * @param array $option 路由参数 + * @return RuleItem + */ + public function addMissRule($route, $method = '*', $option = []) + { + // 创建路由规则实例 + $ruleItem = new RuleItem($this->router, $this, null, '', $route, strtolower($method), $option); + + $this->miss = $ruleItem; + + return $ruleItem; + } + + /** + * 添加分组下的路由规则或者子分组 + * @access public + * @param string $rule 路由规则 + * @param string $route 路由地址 + * @param string $method 请求类型 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + * @return $this + */ + public function addRule($rule, $route, $method = '*', $option = [], $pattern = []) + { + // 读取路由标识 + if (is_array($rule)) { + $name = $rule[0]; + $rule = $rule[1]; + } elseif (is_string($route)) { + $name = $route; + } else { + $name = null; + } + + $method = strtolower($method); + + // 创建路由规则实例 + $ruleItem = new RuleItem($this->router, $this, $name, $rule, $route, $method, $option, $pattern); + + if (!empty($option['cross_domain'])) { + $this->router->setCrossDomainRule($ruleItem, $method); + } + + $this->addRuleItem($ruleItem, $method); + + return $ruleItem; + } + + /** + * 批量注册路由规则 + * @access public + * @param array $rules 路由规则 + * @param string $method 请求类型 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + * @return void + */ + public function addRules($rules, $method = '*', $option = [], $pattern = []) + { + foreach ($rules as $key => $val) { + if (is_numeric($key)) { + $key = array_shift($val); + } + + if (is_array($val)) { + $route = array_shift($val); + $option = $val ? array_shift($val) : []; + $pattern = $val ? array_shift($val) : []; + } else { + $route = $val; + } + + $this->addRule($key, $route, $method, $option, $pattern); + } + } + + public function addRuleItem($rule, $method = '*') + { + if (strpos($method, '|')) { + $rule->method($method); + $method = '*'; + } + + $this->rules[$method][] = $rule; + + return $this; + } + + /** + * 设置分组的路由前缀 + * @access public + * @param string $prefix + * @return $this + */ + public function prefix($prefix) + { + if ($this->parent && $this->parent->getOption('prefix')) { + $prefix = $this->parent->getOption('prefix') . $prefix; + } + + return $this->option('prefix', $prefix); + } + + /** + * 合并分组的路由规则正则 + * @access public + * @param bool $merge + * @return $this + */ + public function mergeRuleRegex($merge = true) + { + return $this->option('merge_rule_regex', $merge); + } + + /** + * 获取完整分组Name + * @access public + * @return string + */ + public function getFullName() + { + return $this->fullName; + } + + /** + * 获取分组的路由规则 + * @access public + * @param string $method + * @return array + */ + public function getRules($method = '') + { + if ('' === $method) { + return $this->rules; + } + + return isset($this->rules[strtolower($method)]) ? $this->rules[strtolower($method)] : []; + } + +} diff --git a/thinkphp/library/think/route/RuleItem.php b/thinkphp/library/think/route/RuleItem.php new file mode 100644 index 000000000..117c1a9bd --- /dev/null +++ b/thinkphp/library/think/route/RuleItem.php @@ -0,0 +1,330 @@ + +// +---------------------------------------------------------------------- + +namespace think\route; + +use think\Container; +use think\Exception; +use think\Route; + +class RuleItem extends Rule +{ + /** + * 路由规则 + * @var string + */ + protected $rule; + + /** + * 路由地址 + * @var string|\Closure + */ + protected $route; + + /** + * 请求类型 + * @var string + */ + protected $method; + + /** + * 架构函数 + * @access public + * @param Route $router 路由实例 + * @param RuleGroup $parent 上级对象 + * @param string $name 路由标识 + * @param string|array $rule 路由规则 + * @param string $method 请求类型 + * @param string|\Closure $route 路由地址 + * @param array $option 路由参数 + * @param array $pattern 变量规则 + */ + public function __construct(Route $router, RuleGroup $parent, $name, $rule, $route, $method = '*', $option = [], $pattern = []) + { + $this->router = $router; + $this->parent = $parent; + $this->name = $name; + $this->route = $route; + $this->method = $method; + $this->option = $option; + $this->pattern = $pattern; + + $this->setRule($rule); + + if (!empty($option['cross_domain'])) { + $this->router->setCrossDomainRule($this, $method); + } + } + + /** + * 路由规则预处理 + * @access public + * @param string $rule 路由规则 + * @return void + */ + public function setRule($rule) + { + if ('$' == substr($rule, -1, 1)) { + // 是否完整匹配 + $rule = substr($rule, 0, -1); + + $this->option['complete_match'] = true; + } + + $rule = '/' != $rule ? ltrim($rule, '/') : ''; + + if ($this->parent && $prefix = $this->parent->getFullName()) { + $rule = $prefix . ($rule ? '/' . ltrim($rule, '/') : ''); + } + + if (false !== strpos($rule, ':')) { + $this->rule = preg_replace(['/\[\:(\w+)\]/', '/\:(\w+)/'], ['<\1?>', '<\1>'], $rule); + } else { + $this->rule = $rule; + } + + // 生成路由标识的快捷访问 + $this->setRuleName(); + } + + /** + * 获取当前路由规则 + * @access public + * @return string + */ + public function getRule() + { + return $this->rule; + } + + /** + * 获取当前路由地址 + * @access public + * @return mixed + */ + public function getRoute() + { + return $this->route; + } + + /** + * 获取当前路由的请求类型 + * @access public + * @return string + */ + public function getMethod() + { + return strtolower($this->method); + } + + /** + * 检查后缀 + * @access public + * @param string $ext + * @return $this + */ + public function ext($ext = '') + { + $this->option('ext', $ext); + $this->setRuleName(true); + + return $this; + } + + /** + * 设置别名 + * @access public + * @param string $name + * @return $this + */ + public function name($name) + { + $this->name = $name; + $this->setRuleName(true); + + return $this; + } + + /** + * 设置路由标识 用于URL反解生成 + * @access protected + * @param bool $first 是否插入开头 + * @return void + */ + protected function setRuleName($first = false) + { + if ($this->name) { + $vars = $this->parseVar($this->rule); + $name = strtolower($this->name); + + if (isset($this->option['ext'])) { + $suffix = $this->option['ext']; + } elseif ($this->parent->getOption('ext')) { + $suffix = $this->parent->getOption('ext'); + } else { + $suffix = null; + } + + $value = [$this->rule, $vars, $this->parent->getDomain(), $suffix]; + + Container::get('rule_name')->set($name, $value, $first); + } + } + + /** + * 检测路由 + * @access public + * @param Request $request 请求对象 + * @param string $url 访问地址 + * @param array $match 匹配路由变量 + * @param string $depr 路径分隔符 + * @param bool $completeMatch 路由是否完全匹配 + * @return Dispatch|false + */ + public function checkRule($request, $url, $match = null, $depr = '/', $completeMatch = false) + { + if ($dispatch = $this->checkCrossDomain($request)) { + // 允许跨域 + return $dispatch; + } + + // 检查参数有效性 + if (!$this->checkOption($this->option, $request)) { + return false; + } + + // 合并分组参数 + $option = $this->mergeGroupOptions(); + + // 检查前置行为 + if (isset($option['before']) && false === $this->checkBefore($option['before'])) { + return false; + } + + $url = $this->urlSuffixCheck($request, $url, $option); + + if (is_null($match)) { + $match = $this->match($url, $option, $depr, $completeMatch); + } + + if (false !== $match) { + return $this->parseRule($request, $this->rule, $this->route, $url, $option, $match); + } + + return false; + } + + /** + * 检测路由(含路由匹配) + * @access public + * @param Request $request 请求对象 + * @param string $url 访问地址 + * @param string $depr 路径分隔符 + * @param bool $completeMatch 路由是否完全匹配 + * @return Dispatch|false + */ + public function check($request, $url, $depr = '/', $completeMatch = false) + { + return $this->checkRule($request, $url, null, $depr, $completeMatch); + } + + /** + * URL后缀及Slash检查 + * @access protected + * @param Request $request 请求对象 + * @param string $url 访问地址 + * @param array $option 路由参数 + * @return string + */ + protected function urlSuffixCheck($request, $url, $option = []) + { + // 是否区分 / 地址访问 + if (!empty($option['remove_slash']) && '/' != $this->rule) { + $this->rule = rtrim($this->rule, '/'); + $url = rtrim($url, '|'); + } + + if (isset($option['ext'])) { + // 路由ext参数 优先于系统配置的URL伪静态后缀参数 + $url = preg_replace('/\.(' . $request->ext() . ')$/i', '', $url); + } + + return $url; + } + + /** + * 检测URL和规则路由是否匹配 + * @access private + * @param string $url URL地址 + * @param array $option 路由参数 + * @param string $depr URL分隔符(全局) + * @param bool $completeMatch 路由是否完全匹配 + * @return array|false + */ + private function match($url, $option, $depr, $completeMatch) + { + if (isset($option['complete_match'])) { + $completeMatch = $option['complete_match']; + } + + $pattern = array_merge($this->parent->getPattern(), $this->pattern); + + // 检查完整规则定义 + if (isset($pattern['__url__']) && !preg_match(0 === strpos($pattern['__url__'], '/') ? $pattern['__url__'] : '/^' . $pattern['__url__'] . '/', str_replace('|', $depr, $url))) { + return false; + } + + $var = []; + $url = $depr . str_replace('|', $depr, $url); + $rule = $depr . str_replace('/', $depr, $this->rule); + + if ($depr == $rule && $depr != $url) { + return false; + } + + if (false === strpos($rule, '<')) { + if (0 === strcasecmp($rule, $url) || (!$completeMatch && 0 === strncasecmp($rule, $url, strlen($rule)))) { + return $var; + } + return false; + } + + $slash = preg_quote('/-' . $depr, '/'); + + if ($matchRule = preg_split('/[' . $slash . ']?<\w+\??>/', $rule, 2)) { + if ($matchRule[0] && 0 !== strncasecmp($rule, $url, strlen($matchRule[0]))) { + return false; + } + } + + if (preg_match_all('/[' . $slash . ']??/', $rule, $matches)) { + $regex = $this->buildRuleRegex($rule, $matches[0], $pattern, $option, $completeMatch); + + try { + if (!preg_match('/^' . $regex . ($completeMatch ? '$' : '') . '/u', $url, $match)) { + return false; + } + } catch (\Exception $e) { + throw new Exception('route pattern error'); + } + + foreach ($match as $key => $val) { + if (is_string($key)) { + $var[$key] = $val; + } + } + } + + // 成功匹配后返回URL中的动态变量数组 + return $var; + } + +} diff --git a/thinkphp/library/think/route/RuleName.php b/thinkphp/library/think/route/RuleName.php new file mode 100644 index 000000000..408a7c93e --- /dev/null +++ b/thinkphp/library/think/route/RuleName.php @@ -0,0 +1,63 @@ + +// +---------------------------------------------------------------------- + +namespace think\route; + +class RuleName +{ + protected $item = []; + + /** + * 注册路由标识 + * @access public + * @param string $name 路由标识 + * @param array $value 路由规则 + * @param bool $first 是否置顶 + * @return void + */ + public function set($name, $value, $first = false) + { + if ($first && isset($this->item[$name])) { + array_unshift($this->item[$name], $value); + } else { + $this->item[$name][] = $value; + } + } + + /** + * 导入路由标识 + * @access public + * @param array $name 路由标识 + * @return void + */ + public function import($item) + { + $this->item = $item; + } + + /** + * 根据路由标识获取路由信息(用于URL生成) + * @access public + * @param string $name 路由标识 + * @return array|null + */ + public function get($name = null) + { + if (is_null($name)) { + return $this->item; + } + + $name = strtolower($name); + + return isset($this->item[$name]) ? $this->item[$name] : null; + } + +} diff --git a/thinkphp/library/think/route/dispatch/Callback.php b/thinkphp/library/think/route/dispatch/Callback.php new file mode 100644 index 000000000..7168228c3 --- /dev/null +++ b/thinkphp/library/think/route/dispatch/Callback.php @@ -0,0 +1,27 @@ + +// +---------------------------------------------------------------------- + +namespace think\route\dispatch; + +use think\Container; +use think\route\Dispatch; + +class Callback extends Dispatch +{ + public function run() + { + // 执行回调方法 + $vars = array_merge($this->app['request']->param(), $this->param); + + return Container::getInstance()->invoke($this->dispatch, $vars); + } + +} diff --git a/thinkphp/library/think/route/dispatch/Controller.php b/thinkphp/library/think/route/dispatch/Controller.php new file mode 100644 index 000000000..b48bccde2 --- /dev/null +++ b/thinkphp/library/think/route/dispatch/Controller.php @@ -0,0 +1,30 @@ + +// +---------------------------------------------------------------------- + +namespace think\route\dispatch; + +use think\route\Dispatch; + +class Controller extends Dispatch +{ + public function run() + { + // 执行控制器的操作方法 + $vars = array_merge($this->app['request']->param(), $this->param); + + return $this->app->action( + $this->dispatch, $vars, + $this->app->config('app.url_controller_layer'), + $this->app->config('app.controller_suffix') + ); + } + +} diff --git a/thinkphp/library/think/route/dispatch/Module.php b/thinkphp/library/think/route/dispatch/Module.php new file mode 100644 index 000000000..ec341997f --- /dev/null +++ b/thinkphp/library/think/route/dispatch/Module.php @@ -0,0 +1,150 @@ + +// +---------------------------------------------------------------------- + +namespace think\route\dispatch; + +use ReflectionMethod; +use think\Container; +use think\exception\ClassNotFoundException; +use think\exception\HttpException; +use think\Loader; +use think\route\Dispatch; + +class Module extends Dispatch +{ + protected $controller; + protected $actionName; + + public function __construct($dispatch, $param = [], $convert = null) + { + $this->app = Container::get('app'); + $this->dispatch = $dispatch; + $this->param = $param; + $this->convert = $convert; + $this->init(); + } + + protected function init() + { + $result = $this->dispatch; + + if (is_string($result)) { + $result = explode('/', $result); + } + + if ($this->app->config('app.app_multi_module')) { + // 多模块部署 + $module = strip_tags(strtolower($result[0] ?: $this->app->config('app.default_module'))); + $bind = $this->app['route']->getBind(); + $available = false; + + if ($bind && preg_match('/^[a-z]/is', $bind)) { + // 绑定模块 + list($bindModule) = explode('/', $bind); + if (empty($result[0])) { + $module = $bindModule; + } + $available = true; + } elseif (!in_array($module, $this->app->config('app.deny_module_list')) && is_dir($this->app->getAppPath() . $module)) { + $available = true; + } elseif ($this->app->config('app.empty_module')) { + $module = $this->app->config('app.empty_module'); + $available = true; + } + + // 模块初始化 + if ($module && $available) { + // 初始化模块 + $this->app['request']->module($module); + $this->app->init($module); + + // 加载当前模块语言包 + $this->app['lang']->load($this->app->getAppPath() . $module . DIRECTORY_SEPARATOR . 'lang' . DIRECTORY_SEPARATOR . $this->app['request']->langset() . '.php'); + + // 模块请求缓存检查 + $this->app['request']->cache( + $this->app->config('app.request_cache'), + $this->app->config('app.request_cache_expire'), + $this->app->config('app.request_cache_except') + ); + } else { + throw new HttpException(404, 'module not exists:' . $module); + } + } else { + // 单一模块部署 + $module = ''; + $this->app['request']->module($module); + } + + // 当前模块路径 + $this->app->setModulePath($this->app->getAppPath() . ($module ? $module . DIRECTORY_SEPARATOR : '')); + + // 是否自动转换控制器和操作名 + $convert = is_bool($this->convert) ? $this->convert : $this->app->config('app.url_convert'); + // 获取控制器名 + $controller = strip_tags($result[1] ?: $this->app->config('app.default_controller')); + $this->controller = $convert ? strtolower($controller) : $controller; + + // 获取操作名 + $this->actionName = strip_tags($result[2] ?: $this->app->config('app.default_action')); + + // 设置当前请求的控制器、操作 + $this->app['request']->controller(Loader::parseName($this->controller, 1))->action($this->actionName); + + } + + public function run() + { + // 监听module_init + $this->app['hook']->listen('module_init'); + + // 实例化控制器 + try { + $instance = $this->app->controller($this->controller, + $this->app->config('app.url_controller_layer'), + $this->app->config('app.controller_suffix'), + $this->app->config('app.empty_controller')); + } catch (ClassNotFoundException $e) { + throw new HttpException(404, 'controller not exists:' . $e->getClass()); + } + + // 获取当前操作名 + $action = $this->actionName . $this->app->config('app.action_suffix'); + + if (is_callable([$instance, $action])) { + // 执行操作方法 + $call = [$instance, $action]; + + // 严格获取当前操作方法名 + $reflect = new ReflectionMethod($instance, $action); + $methodName = $reflect->getName(); + $suffix = $this->app->config('app.action_suffix'); + $actionName = $suffix ? substr($methodName, 0, -strlen($suffix)) : $methodName; + $this->app['request']->action($actionName); + + // 自动获取请求变量 + $vars = $this->app->config('app.url_param_type') + ? $this->app['request']->route() + : $this->app['request']->param(); + } elseif (is_callable([$instance, '_empty'])) { + // 空操作 + $call = [$instance, '_empty']; + $vars = [$this->actionName]; + $reflect = new ReflectionMethod($instance, '_empty'); + } else { + // 操作不存在 + throw new HttpException(404, 'method not exists:' . get_class($instance) . '->' . $action . '()'); + } + + $this->app['hook']->listen('action_begin', $call); + return Container::getInstance()->invokeReflectMethod($instance, $reflect, $vars); + } +} diff --git a/thinkphp/library/think/route/dispatch/Redirect.php b/thinkphp/library/think/route/dispatch/Redirect.php new file mode 100644 index 000000000..1a9208b0c --- /dev/null +++ b/thinkphp/library/think/route/dispatch/Redirect.php @@ -0,0 +1,23 @@ + +// +---------------------------------------------------------------------- + +namespace think\route\dispatch; + +use think\Response; +use think\route\Dispatch; + +class Redirect extends Dispatch +{ + public function run() + { + return Response::create($this->dispatch, 'redirect')->code($this->code); + } +} diff --git a/thinkphp/library/think/route/dispatch/Response.php b/thinkphp/library/think/route/dispatch/Response.php new file mode 100644 index 000000000..4b5fa16e5 --- /dev/null +++ b/thinkphp/library/think/route/dispatch/Response.php @@ -0,0 +1,23 @@ + +// +---------------------------------------------------------------------- + +namespace think\route\dispatch; + +use think\route\Dispatch; + +class Response extends Dispatch +{ + public function run() + { + return $this->dispatch; + } + +} diff --git a/thinkphp/library/think/route/dispatch/Url.php b/thinkphp/library/think/route/dispatch/Url.php new file mode 100644 index 000000000..f26197aae --- /dev/null +++ b/thinkphp/library/think/route/dispatch/Url.php @@ -0,0 +1,195 @@ + +// +---------------------------------------------------------------------- + +namespace think\route\dispatch; + +use think\exception\HttpException; +use think\Loader; +use think\route\Dispatch; + +class Url extends Dispatch +{ + protected function init() + { + // 解析默认的URL规则 + $url = str_replace($this->param['depr'], '|', $this->dispatch); + $result = $this->parseUrl($url); + + $this->dispatch = new Module($result); + } + + public function run() + { + return $this->dispatch->run(); + } + + /** + * 解析URL地址 + * @access protected + * @param string $url URL + * @return array + */ + protected function parseUrl($url) + { + $router = $this->app['route']; + $bind = $router->getBind(); + $depr = $this->param['depr']; + + if (!empty($bind) && preg_match('/^[a-z]/is', $bind)) { + $bind = str_replace('/', $depr, $bind); + // 如果有模块/控制器绑定 + $url = $bind . ('.' != substr($bind, -1) ? $depr : '') . ltrim($url, $depr); + } + + list($path, $var) = $this->parseUrlPath($url); + if (empty($path)) { + return [null, null, null]; + } + + // 解析模块 + $module = $this->app->config('app_multi_module') ? array_shift($path) : null; + if ($this->param['auto_search']) { + $controller = $this->autoFindController($module, $path); + } else { + // 解析控制器 + $controller = !empty($path) ? array_shift($path) : null; + } + + // 解析操作 + $action = !empty($path) ? array_shift($path) : null; + + // 解析额外参数 + if ($path) { + if ($this->app['config']->get('url_param_type')) { + $var += $path; + } else { + preg_replace_callback('/(\w+)\|([^\|]+)/', function ($match) use (&$var) { + $var[$match[1]] = strip_tags($match[2]); + }, implode('|', $path)); + } + } + + $panDomain = $this->app['request']->panDomain(); + if ($panDomain && $key = array_search('*', $var)) { + // 泛域名赋值 + $var[$key] = $panDomain; + } + + // 设置当前请求的参数 + $this->app['request']->route($var); + + // 封装路由 + $route = [$module, $controller, $action]; + + if ($this->hasDefinedRoute($route, $bind)) { + throw new HttpException(404, 'invalid request:' . str_replace('|', $depr, $url)); + } + + return $route; + } + + /** + * 检查URL是否已经定义过路由 + * @access protected + * @param string $route 路由信息 + * @param string $bind 绑定信息 + * @return bool + */ + protected function hasDefinedRoute($route, $bind) + { + list($module, $controller, $action) = $route; + + // 检查地址是否被定义过路由 + $name = strtolower($module . '/' . Loader::parseName($controller, 1) . '/' . $action); + + $name2 = ''; + + if (empty($module) || $module == $bind) { + $name2 = strtolower(Loader::parseName($controller, 1) . '/' . $action); + } + + $router = $this->app['route']; + + if ($router->getName($name) || $router->getName($name2)) { + return true; + } + + return false; + } + + /** + * 自动定位控制器类 + * @access protected + * @param string $module 模块名 + * @param array $path URL + * @return string + */ + protected function autoFindController($module, &$path) + { + $dir = $this->app->getAppPath() . ($module ? $module . '/' : '') . $this->app->config('url_controller_layer'); + $suffix = $this->app->getSuffix() || $this->app->config('controller_suffix') ? ucfirst($this->app->config('url_controller_layer')) : ''; + + $item = []; + $find = false; + + foreach ($path as $val) { + $item[] = $val; + $file = $dir . '/' . str_replace('.', '/', $val) . $suffix . '.php'; + $file = pathinfo($file, PATHINFO_DIRNAME) . '/' . Loader::parseName(pathinfo($file, PATHINFO_FILENAME), 1) . '.php'; + if (is_file($file)) { + $find = true; + break; + } else { + $dir .= '/' . Loader::parseName($val); + } + } + + if ($find) { + $controller = implode('.', $item); + $path = array_slice($path, count($item)); + } else { + $controller = array_shift($path); + } + + return $controller; + } + + /** + * 解析URL的pathinfo参数和变量 + * @access private + * @param string $url URL地址 + * @return array + */ + private function parseUrlPath($url) + { + // 分隔符替换 确保路由定义使用统一的分隔符 + $url = str_replace('|', '/', $url); + $url = trim($url, '/'); + $var = []; + + if (false !== strpos($url, '?')) { + // [模块/控制器/操作?]参数1=值1&参数2=值2... + $info = parse_url($url); + $path = explode('/', $info['path']); + parse_str($info['query'], $var); + } elseif (strpos($url, '/')) { + // [模块/控制器/操作] + $path = explode('/', $url); + } elseif (false !== strpos($url, '=')) { + // 参数1=值1&参数2=值2... + parse_str($url, $var); + } else { + $path = [$url]; + } + + return [$path, $var]; + } +} diff --git a/thinkphp/library/think/route/dispatch/View.php b/thinkphp/library/think/route/dispatch/View.php new file mode 100644 index 000000000..852c8b9a1 --- /dev/null +++ b/thinkphp/library/think/route/dispatch/View.php @@ -0,0 +1,26 @@ + +// +---------------------------------------------------------------------- + +namespace think\route\dispatch; + +use think\Response; +use think\route\Dispatch; + +class View extends Dispatch +{ + public function run() + { + // 渲染模板输出 + $vars = array_merge($this->app['request']->param(), $this->param); + + return Response::create($this->dispatch, 'view')->assign($vars); + } +} diff --git a/thinkphp/library/think/session/driver/Memcache.php b/thinkphp/library/think/session/driver/Memcache.php new file mode 100644 index 000000000..40d7bb825 --- /dev/null +++ b/thinkphp/library/think/session/driver/Memcache.php @@ -0,0 +1,124 @@ + +// +---------------------------------------------------------------------- + +namespace think\session\driver; + +use SessionHandlerInterface; +use think\Exception; + +class Memcache implements SessionHandlerInterface +{ + protected $handler = null; + protected $config = [ + 'host' => '127.0.0.1', // memcache主机 + 'port' => 11211, // memcache端口 + 'expire' => 3600, // session有效期 + 'timeout' => 0, // 连接超时时间(单位:毫秒) + 'persistent' => true, // 长连接 + 'session_name' => '', // memcache key前缀 + ]; + + public function __construct($config = []) + { + $this->config = array_merge($this->config, $config); + } + + /** + * 打开Session + * @access public + * @param string $savePath + * @param mixed $sessName + */ + public function open($savePath, $sessName) + { + // 检测php环境 + if (!extension_loaded('memcache')) { + throw new Exception('not support:memcache'); + } + + $this->handler = new \Memcache; + + // 支持集群 + $hosts = explode(',', $this->config['host']); + $ports = explode(',', $this->config['port']); + + if (empty($ports[0])) { + $ports[0] = 11211; + } + + // 建立连接 + foreach ((array) $hosts as $i => $host) { + $port = isset($ports[$i]) ? $ports[$i] : $ports[0]; + $this->config['timeout'] > 0 ? + $this->handler->addServer($host, $port, $this->config['persistent'], 1, $this->config['timeout']) : + $this->handler->addServer($host, $port, $this->config['persistent'], 1); + } + + return true; + } + + /** + * 关闭Session + * @access public + */ + public function close() + { + $this->gc(ini_get('session.gc_maxlifetime')); + $this->handler->close(); + $this->handler = null; + + return true; + } + + /** + * 读取Session + * @access public + * @param string $sessID + */ + public function read($sessID) + { + return (string) $this->handler->get($this->config['session_name'] . $sessID); + } + + /** + * 写入Session + * @access public + * @param string $sessID + * @param string $sessData + * @return bool + */ + public function write($sessID, $sessData) + { + return $this->handler->set($this->config['session_name'] . $sessID, $sessData, 0, $this->config['expire']); + } + + /** + * 删除Session + * @access public + * @param string $sessID + * @return bool + */ + public function destroy($sessID) + { + return $this->handler->delete($this->config['session_name'] . $sessID); + } + + /** + * Session 垃圾回收 + * @access public + * @param string $sessMaxLifeTime + * @return true + */ + public function gc($sessMaxLifeTime) + { + return true; + } +} diff --git a/thinkphp/library/think/session/driver/Memcached.php b/thinkphp/library/think/session/driver/Memcached.php new file mode 100644 index 000000000..074b2ff73 --- /dev/null +++ b/thinkphp/library/think/session/driver/Memcached.php @@ -0,0 +1,135 @@ + +// +---------------------------------------------------------------------- + +namespace think\session\driver; + +use SessionHandlerInterface; +use think\Exception; + +class Memcached implements SessionHandlerInterface +{ + protected $handler = null; + protected $config = [ + 'host' => '127.0.0.1', // memcache主机 + 'port' => 11211, // memcache端口 + 'expire' => 3600, // session有效期 + 'timeout' => 0, // 连接超时时间(单位:毫秒) + 'session_name' => '', // memcache key前缀 + 'username' => '', //账号 + 'password' => '', //密码 + ]; + + public function __construct($config = []) + { + $this->config = array_merge($this->config, $config); + } + + /** + * 打开Session + * @access public + * @param string $savePath + * @param mixed $sessName + */ + public function open($savePath, $sessName) + { + // 检测php环境 + if (!extension_loaded('memcached')) { + throw new Exception('not support:memcached'); + } + + $this->handler = new \Memcached; + + // 设置连接超时时间(单位:毫秒) + if ($this->config['timeout'] > 0) { + $this->handler->setOption(\Memcached::OPT_CONNECT_TIMEOUT, $this->config['timeout']); + } + + // 支持集群 + $hosts = explode(',', $this->config['host']); + $ports = explode(',', $this->config['port']); + + if (empty($ports[0])) { + $ports[0] = 11211; + } + + // 建立连接 + $servers = []; + foreach ((array) $hosts as $i => $host) { + $servers[] = [$host, (isset($ports[$i]) ? $ports[$i] : $ports[0]), 1]; + } + + $this->handler->addServers($servers); + + if ('' != $this->config['username']) { + $this->handler->setOption(\Memcached::OPT_BINARY_PROTOCOL, true); + $this->handler->setSaslAuthData($this->config['username'], $this->config['password']); + } + + return true; + } + + /** + * 关闭Session + * @access public + */ + public function close() + { + $this->gc(ini_get('session.gc_maxlifetime')); + $this->handler->quit(); + $this->handler = null; + + return true; + } + + /** + * 读取Session + * @access public + * @param string $sessID + */ + public function read($sessID) + { + return (string) $this->handler->get($this->config['session_name'] . $sessID); + } + + /** + * 写入Session + * @access public + * @param string $sessID + * @param string $sessData + * @return bool + */ + public function write($sessID, $sessData) + { + return $this->handler->set($this->config['session_name'] . $sessID, $sessData, $this->config['expire']); + } + + /** + * 删除Session + * @access public + * @param string $sessID + * @return bool + */ + public function destroy($sessID) + { + return $this->handler->delete($this->config['session_name'] . $sessID); + } + + /** + * Session 垃圾回收 + * @access public + * @param string $sessMaxLifeTime + * @return true + */ + public function gc($sessMaxLifeTime) + { + return true; + } +} diff --git a/thinkphp/library/think/session/driver/Redis.php b/thinkphp/library/think/session/driver/Redis.php new file mode 100644 index 000000000..e09988ee1 --- /dev/null +++ b/thinkphp/library/think/session/driver/Redis.php @@ -0,0 +1,169 @@ + +// +---------------------------------------------------------------------- + +namespace think\session\driver; + +use SessionHandlerInterface; +use think\Exception; + +class Redis implements SessionHandlerInterface +{ + /** @var \Redis */ + protected $handler = null; + protected $config = [ + 'host' => '127.0.0.1', // redis主机 + 'port' => 6379, // redis端口 + 'password' => '', // 密码 + 'select' => 0, // 操作库 + 'expire' => 3600, // 有效期(秒) + 'timeout' => 0, // 超时时间(秒) + 'persistent' => true, // 是否长连接 + 'session_name' => '', // sessionkey前缀 + ]; + + public function __construct($config = []) + { + $this->config = array_merge($this->config, $config); + } + + /** + * 打开Session + * @access public + * @param string $savePath + * @param mixed $sessName + * @return bool + * @throws Exception + */ + public function open($savePath, $sessName) + { + // 检测php环境 + if (!extension_loaded('redis')) { + throw new Exception('not support:redis'); + } + + $this->handler = new \Redis; + + // 建立连接 + $func = $this->config['persistent'] ? 'pconnect' : 'connect'; + $this->handler->$func($this->config['host'], $this->config['port'], $this->config['timeout']); + + if ('' != $this->config['password']) { + $this->handler->auth($this->config['password']); + } + + if (0 != $this->config['select']) { + $this->handler->select($this->config['select']); + } + + return true; + } + + /** + * 关闭Session + * @access public + */ + public function close() + { + $this->gc(ini_get('session.gc_maxlifetime')); + $this->handler->close(); + $this->handler = null; + + return true; + } + + /** + * 读取Session + * @access public + * @param string $sessID + * @return string + */ + public function read($sessID) + { + return (string) $this->handler->get($this->config['session_name'] . $sessID); + } + + /** + * 写入Session + * @access public + * @param string $sessID + * @param string $sessData + * @return bool + */ + public function write($sessID, $sessData) + { + if ($this->config['expire'] > 0) { + return $this->handler->setex($this->config['session_name'] . $sessID, $this->config['expire'], $sessData); + } else { + return $this->handler->set($this->config['session_name'] . $sessID, $sessData); + } + } + + /** + * 删除Session + * @access public + * @param string $sessID + * @return bool + */ + public function destroy($sessID) + { + return $this->handler->delete($this->config['session_name'] . $sessID) > 0; + } + + /** + * Session 垃圾回收 + * @access public + * @param string $sessMaxLifeTime + * @return bool + */ + public function gc($sessMaxLifeTime) + { + return true; + } + + /** + * Redis Session 驱动的加锁机制 + * @access public + * @param string $sessID 用于加锁的sessID + * @param integer $timeout 默认过期时间 + * @return bool + */ + public function lock($sessID, $timeout = 10) + { + if (null == $this->handler) { + $this->open('', ''); + } + + $lockKey = 'LOCK_PREFIX_' . $sessID; + // 使用setnx操作加锁 + $isLock = $this->handler->setnx($lockKey, 1); + if ($isLock) { + // 设置过期时间,防止死任务的出现 + $this->handler->expire($lockKey, $timeout); + return true; + } + + return false; + } + + /** + * Redis Session 驱动的解锁机制 + * @access public + * @param string $sessID 用于解锁的sessID + */ + public function unlock($sessID) + { + if (null == $this->handler) { + $this->open('', ''); + } + + $this->handler->del('LOCK_PREFIX_' . $sessID); + } +} diff --git a/thinkphp/library/think/template/TagLib.php b/thinkphp/library/think/template/TagLib.php new file mode 100644 index 000000000..3653b7d2f --- /dev/null +++ b/thinkphp/library/think/template/TagLib.php @@ -0,0 +1,351 @@ + +// +---------------------------------------------------------------------- + +namespace think\template; + +use think\Exception; + +/** + * ThinkPHP标签库TagLib解析基类 + * @category Think + * @package Think + * @subpackage Template + * @author liu21st + */ +class TagLib +{ + + /** + * 标签库定义XML文件 + * @var string + * @access protected + */ + protected $xml = ''; + protected $tags = []; // 标签定义 + /** + * 标签库名称 + * @var string + * @access protected + */ + protected $tagLib = ''; + + /** + * 标签库标签列表 + * @var array + * @access protected + */ + protected $tagList = []; + + /** + * 标签库分析数组 + * @var array + * @access protected + */ + protected $parse = []; + + /** + * 标签库是否有效 + * @var bool + * @access protected + */ + protected $valid = false; + + /** + * 当前模板对象 + * @var object + * @access protected + */ + protected $tpl; + + protected $comparison = [' nheq ' => ' !== ', ' heq ' => ' === ', ' neq ' => ' != ', ' eq ' => ' == ', ' egt ' => ' >= ', ' gt ' => ' > ', ' elt ' => ' <= ', ' lt ' => ' < ']; + + /** + * 架构函数 + * @access public + * @param \stdClass $template 模板引擎对象 + */ + public function __construct($template) + { + $this->tpl = $template; + } + + /** + * 按签标库替换页面中的标签 + * @access public + * @param string $content 模板内容 + * @param string $lib 标签库名 + * @return void + */ + public function parseTag(&$content, $lib = '') + { + $tags = []; + $lib = $lib ? strtolower($lib) . ':' : ''; + + foreach ($this->tags as $name => $val) { + $close = !isset($val['close']) || $val['close'] ? 1 : 0; + $tags[$close][$lib . $name] = $name; + if (isset($val['alias'])) { + // 别名设置 + $array = (array) $val['alias']; + foreach (explode(',', $array[0]) as $v) { + $tags[$close][$lib . $v] = $name; + } + } + } + + // 闭合标签 + if (!empty($tags[1])) { + $nodes = []; + $regex = $this->getRegex(array_keys($tags[1]), 1); + if (preg_match_all($regex, $content, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) { + $right = []; + foreach ($matches as $match) { + if ('' == $match[1][0]) { + $name = strtolower($match[2][0]); + // 如果有没闭合的标签头则取出最后一个 + if (!empty($right[$name])) { + // $match[0][1]为标签结束符在模板中的位置 + $nodes[$match[0][1]] = [ + 'name' => $name, + 'begin' => array_pop($right[$name]), // 标签开始符 + 'end' => $match[0], // 标签结束符 + ]; + } + } else { + // 标签头压入栈 + $right[strtolower($match[1][0])][] = $match[0]; + } + } + unset($right, $matches); + // 按标签在模板中的位置从后向前排序 + krsort($nodes); + } + + $break = ''; + if ($nodes) { + $beginArray = []; + // 标签替换 从后向前 + foreach ($nodes as $pos => $node) { + // 对应的标签名 + $name = $tags[1][$node['name']]; + $alias = $lib . $name != $node['name'] ? ($lib ? strstr($node['name'], $lib) : $node['name']) : ''; + + // 解析标签属性 + $attrs = $this->parseAttr($node['begin'][0], $name, $alias); + $method = 'tag' . $name; + + // 读取标签库中对应的标签内容 replace[0]用来替换标签头,replace[1]用来替换标签尾 + $replace = explode($break, $this->$method($attrs, $break)); + + if (count($replace) > 1) { + while ($beginArray) { + $begin = end($beginArray); + // 判断当前标签尾的位置是否在栈中最后一个标签头的后面,是则为子标签 + if ($node['end'][1] > $begin['pos']) { + break; + } else { + // 不为子标签时,取出栈中最后一个标签头 + $begin = array_pop($beginArray); + // 替换标签头部 + $content = substr_replace($content, $begin['str'], $begin['pos'], $begin['len']); + } + } + // 替换标签尾部 + $content = substr_replace($content, $replace[1], $node['end'][1], strlen($node['end'][0])); + // 把标签头压入栈 + $beginArray[] = ['pos' => $node['begin'][1], 'len' => strlen($node['begin'][0]), 'str' => $replace[0]]; + } + } + + while ($beginArray) { + $begin = array_pop($beginArray); + // 替换标签头部 + $content = substr_replace($content, $begin['str'], $begin['pos'], $begin['len']); + } + } + } + // 自闭合标签 + if (!empty($tags[0])) { + $regex = $this->getRegex(array_keys($tags[0]), 0); + $content = preg_replace_callback($regex, function ($matches) use (&$tags, &$lib) { + // 对应的标签名 + $name = $tags[0][strtolower($matches[1])]; + $alias = $lib . $name != $matches[1] ? ($lib ? strstr($matches[1], $lib) : $matches[1]) : ''; + // 解析标签属性 + $attrs = $this->parseAttr($matches[0], $name, $alias); + $method = 'tag' . $name; + return $this->$method($attrs, ''); + }, $content); + } + + return; + } + + /** + * 按标签生成正则 + * @access public + * @param array|string $tags 标签名 + * @param boolean $close 是否为闭合标签 + * @return string + */ + public function getRegex($tags, $close) + { + $begin = $this->tpl->config('taglib_begin'); + $end = $this->tpl->config('taglib_end'); + $single = strlen(ltrim($begin, '\\')) == 1 && strlen(ltrim($end, '\\')) == 1 ? true : false; + $tagName = is_array($tags) ? implode('|', $tags) : $tags; + + if ($single) { + if ($close) { + // 如果是闭合标签 + $regex = $begin . '(?:(' . $tagName . ')\b(?>[^' . $end . ']*)|\/(' . $tagName . '))' . $end; + } else { + $regex = $begin . '(' . $tagName . ')\b(?>[^' . $end . ']*)' . $end; + } + } else { + if ($close) { + // 如果是闭合标签 + $regex = $begin . '(?:(' . $tagName . ')\b(?>(?:(?!' . $end . ').)*)|\/(' . $tagName . '))' . $end; + } else { + $regex = $begin . '(' . $tagName . ')\b(?>(?:(?!' . $end . ').)*)' . $end; + } + } + + return '/' . $regex . '/is'; + } + + /** + * 分析标签属性 正则方式 + * @access public + * @param string $str 标签属性字符串 + * @param string $name 标签名 + * @param string $alias 别名 + * @return array + */ + public function parseAttr($str, $name, $alias = '') + { + $regex = '/\s+(?>(?P[\w-]+)\s*)=(?>\s*)([\"\'])(?P(?:(?!\\2).)*)\\2/is'; + $result = []; + + if (preg_match_all($regex, $str, $matches)) { + foreach ($matches['name'] as $key => $val) { + $result[$val] = $matches['value'][$key]; + } + + if (!isset($this->tags[$name])) { + // 检测是否存在别名定义 + foreach ($this->tags as $key => $val) { + if (isset($val['alias'])) { + $array = (array) $val['alias']; + if (in_array($name, explode(',', $array[0]))) { + $tag = $val; + $type = !empty($array[1]) ? $array[1] : 'type'; + $result[$type] = $name; + break; + } + } + } + } else { + $tag = $this->tags[$name]; + // 设置了标签别名 + if (!empty($alias) && isset($tag['alias'])) { + $type = !empty($tag['alias'][1]) ? $tag['alias'][1] : 'type'; + $result[$type] = $alias; + } + } + + if (!empty($tag['must'])) { + $must = explode(',', $tag['must']); + foreach ($must as $name) { + if (!isset($result[$name])) { + throw new Exception('tag attr must:' . $name); + } + } + } + } else { + // 允许直接使用表达式的标签 + if (!empty($this->tags[$name]['expression'])) { + static $_taglibs; + if (!isset($_taglibs[$name])) { + $_taglibs[$name][0] = strlen($this->tpl->config('taglib_begin_origin') . $name); + $_taglibs[$name][1] = strlen($this->tpl->config('taglib_end_origin')); + } + $result['expression'] = substr($str, $_taglibs[$name][0], -$_taglibs[$name][1]); + // 清除自闭合标签尾部/ + $result['expression'] = rtrim($result['expression'], '/'); + $result['expression'] = trim($result['expression']); + } elseif (empty($this->tags[$name]) || !empty($this->tags[$name]['attr'])) { + throw new Exception('tag error:' . $name); + } + } + + return $result; + } + + /** + * 解析条件表达式 + * @access public + * @param string $condition 表达式标签内容 + * @return string + */ + public function parseCondition($condition) + { + if (strpos($condition, ':')) { + $condition = ' ' . substr(strstr($condition, ':'), 1); + } + + $condition = str_ireplace(array_keys($this->comparison), array_values($this->comparison), $condition); + $this->tpl->parseVar($condition); + + // $this->tpl->parseVarFunction($condition); // XXX: 此句能解析表达式中用|分隔的函数,但表达式中如果有|、||这样的逻辑运算就产生了歧异 + return $condition; + } + + /** + * 自动识别构建变量 + * @access public + * @param string $name 变量描述 + * @return string + */ + public function autoBuildVar(&$name) + { + $flag = substr($name, 0, 1); + + if (':' == $flag) { + // 以:开头为函数调用,解析前去掉: + $name = substr($name, 1); + } elseif ('$' != $flag && preg_match('/[a-zA-Z_]/', $flag)) { + // XXX: 这句的写法可能还需要改进 + // 常量不需要解析 + if (defined($name)) { + return $name; + } + + // 不以$开头并且也不是常量,自动补上$前缀 + $name = '$' . $name; + } + + $this->tpl->parseVar($name); + $this->tpl->parseVarFunction($name, false); + + return $name; + } + + /** + * 获取标签列表 + * @access public + * @return array + */ + public function getTags() + { + return $this->tags; + } +} diff --git a/thinkphp/library/think/template/driver/File.php b/thinkphp/library/think/template/driver/File.php new file mode 100644 index 000000000..95a614039 --- /dev/null +++ b/thinkphp/library/think/template/driver/File.php @@ -0,0 +1,79 @@ + +// +---------------------------------------------------------------------- + +namespace think\template\driver; + +use think\Exception; + +class File +{ + /** + * 写入编译缓存 + * @access public + * @param string $cacheFile 缓存的文件名 + * @param string $content 缓存的内容 + * @return void|array + */ + public function write($cacheFile, $content) + { + // 检测模板目录 + $dir = dirname($cacheFile); + + if (!is_dir($dir)) { + mkdir($dir, 0755, true); + } + + // 生成模板缓存文件 + if (false === file_put_contents($cacheFile, $content)) { + throw new Exception('cache write error:' . $cacheFile, 11602); + } + } + + /** + * 读取编译编译 + * @access public + * @param string $cacheFile 缓存的文件名 + * @param array $vars 变量数组 + * @return void + */ + public function read($cacheFile, $vars = []) + { + if (!empty($vars) && is_array($vars)) { + // 模板阵列变量分解成为独立变量 + extract($vars, EXTR_OVERWRITE); + } + + //载入模版缓存文件 + include $cacheFile; + } + + /** + * 检查编译缓存是否有效 + * @access public + * @param string $cacheFile 缓存的文件名 + * @param int $cacheTime 缓存时间 + * @return boolean + */ + public function check($cacheFile, $cacheTime) + { + // 缓存文件不存在, 直接返回false + if (!file_exists($cacheFile)) { + return false; + } + + if (0 != $cacheTime && time() > filemtime($cacheFile) + $cacheTime) { + // 缓存是否在有效期 + return false; + } + + return true; + } +} diff --git a/thinkphp/library/think/template/taglib/Cx.php b/thinkphp/library/think/template/taglib/Cx.php new file mode 100644 index 000000000..ad741f289 --- /dev/null +++ b/thinkphp/library/think/template/taglib/Cx.php @@ -0,0 +1,724 @@ + +// +---------------------------------------------------------------------- + +namespace think\template\taglib; + +use think\template\TagLib; + +/** + * CX标签库解析类 + * @category Think + * @package Think + * @subpackage Driver.Taglib + * @author liu21st + */ +class Cx extends Taglib +{ + + // 标签定义 + protected $tags = [ + // 标签定义: attr 属性列表 close 是否闭合(0 或者1 默认1) alias 标签别名 level 嵌套层次 + 'php' => ['attr' => ''], + 'volist' => ['attr' => 'name,id,offset,length,key,mod', 'alias' => 'iterate'], + 'foreach' => ['attr' => 'name,id,item,key,offset,length,mod', 'expression' => true], + 'if' => ['attr' => 'condition', 'expression' => true], + 'elseif' => ['attr' => 'condition', 'close' => 0, 'expression' => true], + 'else' => ['attr' => '', 'close' => 0], + 'switch' => ['attr' => 'name', 'expression' => true], + 'case' => ['attr' => 'value,break', 'expression' => true], + 'default' => ['attr' => '', 'close' => 0], + 'compare' => ['attr' => 'name,value,type', 'alias' => ['eq,equal,notequal,neq,gt,lt,egt,elt,heq,nheq', 'type']], + 'range' => ['attr' => 'name,value,type', 'alias' => ['in,notin,between,notbetween', 'type']], + 'empty' => ['attr' => 'name'], + 'notempty' => ['attr' => 'name'], + 'present' => ['attr' => 'name'], + 'notpresent' => ['attr' => 'name'], + 'defined' => ['attr' => 'name'], + 'notdefined' => ['attr' => 'name'], + 'load' => ['attr' => 'file,href,type,value,basepath', 'close' => 0, 'alias' => ['import,css,js', 'type']], + 'assign' => ['attr' => 'name,value', 'close' => 0], + 'define' => ['attr' => 'name,value', 'close' => 0], + 'for' => ['attr' => 'start,end,name,comparison,step'], + 'url' => ['attr' => 'link,vars,suffix,domain', 'close' => 0, 'expression' => true], + 'function' => ['attr' => 'name,vars,use,call'], + ]; + + /** + * php标签解析 + * 格式: + * {php}echo $name{/php} + * @access public + * @param array $tag 标签属性 + * @param string $content 标签内容 + * @return string + */ + public function tagPhp($tag, $content) + { + $parseStr = ''; + return $parseStr; + } + + /** + * volist标签解析 循环输出数据集 + * 格式: + * {volist name="userList" id="user" empty=""} + * {user.username} + * {user.email} + * {/volist} + * @access public + * @param array $tag 标签属性 + * @param string $content 标签内容 + * @return string|void + */ + public function tagVolist($tag, $content) + { + $name = $tag['name']; + $id = $tag['id']; + $empty = isset($tag['empty']) ? $tag['empty'] : ''; + $key = !empty($tag['key']) ? $tag['key'] : 'i'; + $mod = isset($tag['mod']) ? $tag['mod'] : '2'; + $offset = !empty($tag['offset']) && is_numeric($tag['offset']) ? intval($tag['offset']) : 0; + $length = !empty($tag['length']) && is_numeric($tag['length']) ? intval($tag['length']) : 'null'; + // 允许使用函数设定数据集 {$vo.name} + $parseStr = 'autoBuildVar($name); + $parseStr .= '$_result=' . $name . ';'; + $name = '$_result'; + } else { + $name = $this->autoBuildVar($name); + } + + $parseStr .= 'if(is_array(' . $name . ') || ' . $name . ' instanceof \think\Collection || ' . $name . ' instanceof \think\Paginator): $' . $key . ' = 0;'; + + // 设置了输出数组长度 + if (0 != $offset || 'null' != $length) { + $parseStr .= '$__LIST__ = is_array(' . $name . ') ? array_slice(' . $name . ',' . $offset . ',' . $length . ', true) : ' . $name . '->slice(' . $offset . ',' . $length . ', true); '; + } else { + $parseStr .= ' $__LIST__ = ' . $name . ';'; + } + + $parseStr .= 'if( count($__LIST__)==0 ) : echo "' . $empty . '" ;'; + $parseStr .= 'else: '; + $parseStr .= 'foreach($__LIST__ as $key=>$' . $id . '): '; + $parseStr .= '$mod = ($' . $key . ' % ' . $mod . ' );'; + $parseStr .= '++$' . $key . ';?>'; + $parseStr .= $content; + $parseStr .= ''; + + if (!empty($parseStr)) { + return $parseStr; + } + + return; + } + + /** + * foreach标签解析 循环输出数据集 + * 格式: + * {foreach name="userList" id="user" key="key" index="i" mod="2" offset="3" length="5" empty=""} + * {user.username} + * {/foreach} + * @access public + * @param array $tag 标签属性 + * @param string $content 标签内容 + * @return string|void + */ + public function tagForeach($tag, $content) + { + // 直接使用表达式 + if (!empty($tag['expression'])) { + $expression = ltrim(rtrim($tag['expression'], ')'), '('); + $expression = $this->autoBuildVar($expression); + $parseStr = ''; + $parseStr .= $content; + $parseStr .= ''; + return $parseStr; + } + + $name = $tag['name']; + $key = !empty($tag['key']) ? $tag['key'] : 'key'; + $item = !empty($tag['id']) ? $tag['id'] : $tag['item']; + $empty = isset($tag['empty']) ? $tag['empty'] : ''; + $offset = !empty($tag['offset']) && is_numeric($tag['offset']) ? intval($tag['offset']) : 0; + $length = !empty($tag['length']) && is_numeric($tag['length']) ? intval($tag['length']) : 'null'; + + $parseStr = 'autoBuildVar($name); + $parseStr .= $var . '=' . $name . '; '; + $name = $var; + } else { + $name = $this->autoBuildVar($name); + } + + $parseStr .= 'if(is_array(' . $name . ') || ' . $name . ' instanceof \think\Collection || ' . $name . ' instanceof \think\Paginator): '; + + // 设置了输出数组长度 + if (0 != $offset || 'null' != $length) { + if (!isset($var)) { + $var = '$_' . uniqid(); + } + $parseStr .= $var . ' = is_array(' . $name . ') ? array_slice(' . $name . ',' . $offset . ',' . $length . ', true) : ' . $name . '->slice(' . $offset . ',' . $length . ', true); '; + } else { + $var = &$name; + } + + $parseStr .= 'if( count(' . $var . ')==0 ) : echo "' . $empty . '" ;'; + $parseStr .= 'else: '; + + // 设置了索引项 + if (isset($tag['index'])) { + $index = $tag['index']; + $parseStr .= '$' . $index . '=0; '; + } + + $parseStr .= 'foreach(' . $var . ' as $' . $key . '=>$' . $item . '): '; + + // 设置了索引项 + if (isset($tag['index'])) { + $index = $tag['index']; + if (isset($tag['mod'])) { + $mod = (int) $tag['mod']; + $parseStr .= '$mod = ($' . $index . ' % ' . $mod . '); '; + } + $parseStr .= '++$' . $index . '; '; + } + + $parseStr .= '?>'; + // 循环体中的内容 + $parseStr .= $content; + $parseStr .= ''; + + if (!empty($parseStr)) { + return $parseStr; + } + + return; + } + + /** + * if标签解析 + * 格式: + * {if condition=" $a eq 1"} + * {elseif condition="$a eq 2" /} + * {else /} + * {/if} + * 表达式支持 eq neq gt egt lt elt == > >= < <= or and || && + * @access public + * @param array $tag 标签属性 + * @param string $content 标签内容 + * @return string + */ + public function tagIf($tag, $content) + { + $condition = !empty($tag['expression']) ? $tag['expression'] : $tag['condition']; + $condition = $this->parseCondition($condition); + $parseStr = '' . $content . ''; + + return $parseStr; + } + + /** + * elseif标签解析 + * 格式:见if标签 + * @access public + * @param array $tag 标签属性 + * @param string $content 标签内容 + * @return string + */ + public function tagElseif($tag, $content) + { + $condition = !empty($tag['expression']) ? $tag['expression'] : $tag['condition']; + $condition = $this->parseCondition($condition); + $parseStr = ''; + + return $parseStr; + } + + /** + * else标签解析 + * 格式:见if标签 + * @access public + * @param array $tag 标签属性 + * @return string + */ + public function tagElse($tag) + { + $parseStr = ''; + + return $parseStr; + } + + /** + * switch标签解析 + * 格式: + * {switch name="a.name"} + * {case value="1" break="false"}1{/case} + * {case value="2" }2{/case} + * {default /}other + * {/switch} + * @access public + * @param array $tag 标签属性 + * @param string $content 标签内容 + * @return string + */ + public function tagSwitch($tag, $content) + { + $name = !empty($tag['expression']) ? $tag['expression'] : $tag['name']; + $name = $this->autoBuildVar($name); + $parseStr = '' . $content . ''; + + return $parseStr; + } + + /** + * case标签解析 需要配合switch才有效 + * @access public + * @param array $tag 标签属性 + * @param string $content 标签内容 + * @return string + */ + public function tagCase($tag, $content) + { + $value = isset($tag['expression']) ? $tag['expression'] : $tag['value']; + $flag = substr($value, 0, 1); + + if ('$' == $flag || ':' == $flag) { + $value = $this->autoBuildVar($value); + $value = 'case ' . $value . ':'; + } elseif (strpos($value, '|')) { + $values = explode('|', $value); + $value = ''; + foreach ($values as $val) { + $value .= 'case "' . addslashes($val) . '":'; + } + } else { + $value = 'case "' . $value . '":'; + } + + $parseStr = '' . $content; + $isBreak = isset($tag['break']) ? $tag['break'] : ''; + + if ('' == $isBreak || $isBreak) { + $parseStr .= ''; + } + + return $parseStr; + } + + /** + * default标签解析 需要配合switch才有效 + * 使用: {default /}ddfdf + * @access public + * @param array $tag 标签属性 + * @param string $content 标签内容 + * @return string + */ + public function tagDefault($tag) + { + $parseStr = ''; + + return $parseStr; + } + + /** + * compare标签解析 + * 用于值的比较 支持 eq neq gt lt egt elt heq nheq 默认是eq + * 格式: {compare name="" type="eq" value="" }content{/compare} + * @access public + * @param array $tag 标签属性 + * @param string $content 标签内容 + * @return string + */ + public function tagCompare($tag, $content) + { + $name = $tag['name']; + $value = $tag['value']; + $type = isset($tag['type']) ? $tag['type'] : 'eq'; // 比较类型 + $name = $this->autoBuildVar($name); + $flag = substr($value, 0, 1); + + if ('$' == $flag || ':' == $flag) { + $value = $this->autoBuildVar($value); + } else { + $value = '\'' . $value . '\''; + } + + switch ($type) { + case 'equal': + $type = 'eq'; + break; + case 'notequal': + $type = 'neq'; + break; + } + $type = $this->parseCondition(' ' . $type . ' '); + $parseStr = '' . $content . ''; + + return $parseStr; + } + + /** + * range标签解析 + * 如果某个变量存在于某个范围 则输出内容 type= in 表示在范围内 否则表示在范围外 + * 格式: {range name="var|function" value="val" type='in|notin' }content{/range} + * example: {range name="a" value="1,2,3" type='in' }content{/range} + * @access public + * @param array $tag 标签属性 + * @param string $content 标签内容 + * @return string + */ + public function tagRange($tag, $content) + { + $name = $tag['name']; + $value = $tag['value']; + $type = isset($tag['type']) ? $tag['type'] : 'in'; // 比较类型 + + $name = $this->autoBuildVar($name); + $flag = substr($value, 0, 1); + + if ('$' == $flag || ':' == $flag) { + $value = $this->autoBuildVar($value); + $str = 'is_array(' . $value . ')?' . $value . ':explode(\',\',' . $value . ')'; + } else { + $value = '"' . $value . '"'; + $str = 'explode(\',\',' . $value . ')'; + } + + if ('between' == $type) { + $parseStr = '= $_RANGE_VAR_[0] && ' . $name . '<= $_RANGE_VAR_[1]):?>' . $content . ''; + } elseif ('notbetween' == $type) { + $parseStr = '$_RANGE_VAR_[1]):?>' . $content . ''; + } else { + $fun = ('in' == $type) ? 'in_array' : '!in_array'; + $parseStr = '' . $content . ''; + } + + return $parseStr; + } + + /** + * present标签解析 + * 如果某个变量已经设置 则输出内容 + * 格式: {present name="" }content{/present} + * @access public + * @param array $tag 标签属性 + * @param string $content 标签内容 + * @return string + */ + public function tagPresent($tag, $content) + { + $name = $tag['name']; + $name = $this->autoBuildVar($name); + $parseStr = '' . $content . ''; + + return $parseStr; + } + + /** + * notpresent标签解析 + * 如果某个变量没有设置,则输出内容 + * 格式: {notpresent name="" }content{/notpresent} + * @access public + * @param array $tag 标签属性 + * @param string $content 标签内容 + * @return string + */ + public function tagNotpresent($tag, $content) + { + $name = $tag['name']; + $name = $this->autoBuildVar($name); + $parseStr = '' . $content . ''; + + return $parseStr; + } + + /** + * empty标签解析 + * 如果某个变量为empty 则输出内容 + * 格式: {empty name="" }content{/empty} + * @access public + * @param array $tag 标签属性 + * @param string $content 标签内容 + * @return string + */ + public function tagEmpty($tag, $content) + { + $name = $tag['name']; + $name = $this->autoBuildVar($name); + $parseStr = 'isEmpty())): ?>' . $content . ''; + + return $parseStr; + } + + /** + * notempty标签解析 + * 如果某个变量不为empty 则输出内容 + * 格式: {notempty name="" }content{/notempty} + * @access public + * @param array $tag 标签属性 + * @param string $content 标签内容 + * @return string + */ + public function tagNotempty($tag, $content) + { + $name = $tag['name']; + $name = $this->autoBuildVar($name); + $parseStr = 'isEmpty()))): ?>' . $content . ''; + + return $parseStr; + } + + /** + * 判断是否已经定义了该常量 + * {defined name='TXT'}已定义{/defined} + * @access public + * @param array $tag + * @param string $content + * @return string + */ + public function tagDefined($tag, $content) + { + $name = $tag['name']; + $parseStr = '' . $content . ''; + + return $parseStr; + } + + /** + * 判断是否没有定义了该常量 + * {notdefined name='TXT'}已定义{/notdefined} + * @access public + * @param array $tag + * @param string $content + * @return string + */ + public function tagNotdefined($tag, $content) + { + $name = $tag['name']; + $parseStr = '' . $content . ''; + + return $parseStr; + } + + /** + * load 标签解析 {load file="/static/js/base.js" /} + * 格式:{load file="/static/css/base.css" /} + * @access public + * @param array $tag 标签属性 + * @param string $content 标签内容 + * @return string + */ + public function tagLoad($tag, $content) + { + $file = isset($tag['file']) ? $tag['file'] : $tag['href']; + $type = isset($tag['type']) ? strtolower($tag['type']) : ''; + + $parseStr = ''; + $endStr = ''; + + // 判断是否存在加载条件 允许使用函数判断(默认为isset) + if (isset($tag['value'])) { + $name = $tag['value']; + $name = $this->autoBuildVar($name); + $name = 'isset(' . $name . ')'; + $parseStr .= ''; + $endStr = ''; + } + + // 文件方式导入 + $array = explode(',', $file); + + foreach ($array as $val) { + $type = strtolower(substr(strrchr($val, '.'), 1)); + switch ($type) { + case 'js': + $parseStr .= ''; + break; + case 'css': + $parseStr .= ''; + break; + case 'php': + $parseStr .= ''; + break; + } + } + + return $parseStr . $endStr; + } + + /** + * assign标签解析 + * 在模板中给某个变量赋值 支持变量赋值 + * 格式: {assign name="" value="" /} + * @access public + * @param array $tag 标签属性 + * @param string $content 标签内容 + * @return string + */ + public function tagAssign($tag, $content) + { + $name = $this->autoBuildVar($tag['name']); + $flag = substr($tag['value'], 0, 1); + + if ('$' == $flag || ':' == $flag) { + $value = $this->autoBuildVar($tag['value']); + } else { + $value = '\'' . $tag['value'] . '\''; + } + + $parseStr = ''; + + return $parseStr; + } + + /** + * define标签解析 + * 在模板中定义常量 支持变量赋值 + * 格式: {define name="" value="" /} + * @access public + * @param array $tag 标签属性 + * @param string $content 标签内容 + * @return string + */ + public function tagDefine($tag, $content) + { + $name = '\'' . $tag['name'] . '\''; + $flag = substr($tag['value'], 0, 1); + + if ('$' == $flag || ':' == $flag) { + $value = $this->autoBuildVar($tag['value']); + } else { + $value = '\'' . $tag['value'] . '\''; + } + + $parseStr = ''; + + return $parseStr; + } + + /** + * for标签解析 + * 格式: + * {for start="" end="" comparison="" step="" name=""} + * content + * {/for} + * @access public + * @param array $tag 标签属性 + * @param string $content 标签内容 + * @return string + */ + public function tagFor($tag, $content) + { + //设置默认值 + $start = 0; + $end = 0; + $step = 1; + $comparison = 'lt'; + $name = 'i'; + $rand = rand(); //添加随机数,防止嵌套变量冲突 + + //获取属性 + foreach ($tag as $key => $value) { + $value = trim($value); + $flag = substr($value, 0, 1); + if ('$' == $flag || ':' == $flag) { + $value = $this->autoBuildVar($value); + } + + switch ($key) { + case 'start': + $start = $value; + break; + case 'end': + $end = $value; + break; + case 'step': + $step = $value; + break; + case 'comparison': + $comparison = $value; + break; + case 'name': + $name = $value; + break; + } + } + + $parseStr = 'parseCondition('$' . $name . ' ' . $comparison . ' $__FOR_END_' . $rand . '__') . ';$' . $name . '+=' . $step . '){ ?>'; + $parseStr .= $content; + $parseStr .= ''; + + return $parseStr; + } + + /** + * url函数的tag标签 + * 格式:{url link="模块/控制器/方法" vars="参数" suffix="true或者false 是否带有后缀" domain="true或者false 是否携带域名" /} + * @access public + * @param array $tag 标签属性 + * @param string $content 标签内容 + * @return string + */ + public function tagUrl($tag, $content) + { + $url = isset($tag['link']) ? $tag['link'] : ''; + $vars = isset($tag['vars']) ? $tag['vars'] : ''; + $suffix = isset($tag['suffix']) ? $tag['suffix'] : 'true'; + $domain = isset($tag['domain']) ? $tag['domain'] : 'false'; + + return ''; + } + + /** + * function标签解析 匿名函数,可实现递归 + * 使用: + * {function name="func" vars="$data" call="$list" use="&$a,&$b"} + * {if is_array($data)} + * {foreach $data as $val} + * {~func($val) /} + * {/foreach} + * {else /} + * {$data} + * {/if} + * {/function} + * @access public + * @param array $tag 标签属性 + * @param string $content 标签内容 + * @return string + */ + public function tagFunction($tag, $content) + { + $name = !empty($tag['name']) ? $tag['name'] : 'func'; + $vars = !empty($tag['vars']) ? $tag['vars'] : ''; + $call = !empty($tag['call']) ? $tag['call'] : ''; + $use = ['&$' . $name]; + + if (!empty($tag['use'])) { + foreach (explode(',', $tag['use']) as $val) { + $use[] = '&' . ltrim(trim($val), '&'); + } + } + + $parseStr = '' . $content . '' : '?>'; + + return $parseStr; + } +} diff --git a/thinkphp/library/think/validate/ValidateRule.php b/thinkphp/library/think/validate/ValidateRule.php new file mode 100644 index 000000000..5253465fa --- /dev/null +++ b/thinkphp/library/think/validate/ValidateRule.php @@ -0,0 +1,171 @@ + +// +---------------------------------------------------------------------- + +namespace think\validate; + +/** + * Class ValidateRule + * @package think\validate + * @method ValidateRule confirm(mixed $rule, string $msg = '') static 验证是否和某个字段的值一致 + * @method ValidateRule different(mixed $rule, string $msg = '') static 验证是否和某个字段的值是否不同 + * @method ValidateRule egt(mixed $rule, string $msg = '') static 验证是否大于等于某个值 + * @method ValidateRule gt(mixed $rule, string $msg = '') static 验证是否大于某个值 + * @method ValidateRule elt(mixed $rule, string $msg = '') static 验证是否小于等于某个值 + * @method ValidateRule lt(mixed $rule, string $msg = '') static 验证是否小于某个值 + * @method ValidateRule eg(mixed $rule, string $msg = '') static 验证是否等于某个值 + * @method ValidateRule in(mixed $rule, string $msg = '') static 验证是否在范围内 + * @method ValidateRule notIn(mixed $rule, string $msg = '') static 验证是否不在某个范围 + * @method ValidateRule between(mixed $rule, string $msg = '') static 验证是否在某个区间 + * @method ValidateRule notBetween(mixed $rule, string $msg = '') static 验证是否不在某个区间 + * @method ValidateRule length(mixed $rule, string $msg = '') static 验证数据长度 + * @method ValidateRule max(mixed $rule, string $msg = '') static 验证数据最大长度 + * @method ValidateRule min(mixed $rule, string $msg = '') static 验证数据最小长度 + * @method ValidateRule after(mixed $rule, string $msg = '') static 验证日期 + * @method ValidateRule before(mixed $rule, string $msg = '') static 验证日期 + * @method ValidateRule expire(mixed $rule, string $msg = '') static 验证有效期 + * @method ValidateRule allowIp(mixed $rule, string $msg = '') static 验证IP许可 + * @method ValidateRule denyIp(mixed $rule, string $msg = '') static 验证IP禁用 + * @method ValidateRule regex(mixed $rule, string $msg = '') static 使用正则验证数据 + * @method ValidateRule token(mixed $rule='__token__', string $msg = '') static 验证表单令牌 + * @method ValidateRule is(mixed $rule, string $msg = '') static 验证字段值是否为有效格式 + * @method ValidateRule isRequire(mixed $rule, string $msg = '') static 验证字段必须 + * @method ValidateRule isNumber(mixed $rule, string $msg = '') static 验证字段值是否为数字 + * @method ValidateRule isArray(mixed $rule, string $msg = '') static 验证字段值是否为数组 + * @method ValidateRule isInteger(mixed $rule, string $msg = '') static 验证字段值是否为整形 + * @method ValidateRule isFloat(mixed $rule, string $msg = '') static 验证字段值是否为浮点数 + * @method ValidateRule isMobile(mixed $rule, string $msg = '') static 验证字段值是否为手机 + * @method ValidateRule isIdCard(mixed $rule, string $msg = '') static 验证字段值是否为身份证号码 + * @method ValidateRule isChs(mixed $rule, string $msg = '') static 验证字段值是否为中文 + * @method ValidateRule isChsDash(mixed $rule, string $msg = '') static 验证字段值是否为中文字母及下划线 + * @method ValidateRule isChsAlpha(mixed $rule, string $msg = '') static 验证字段值是否为中文和字母 + * @method ValidateRule isChsAlphaNum(mixed $rule, string $msg = '') static 验证字段值是否为中文字母和数字 + * @method ValidateRule isDate(mixed $rule, string $msg = '') static 验证字段值是否为有效格式 + * @method ValidateRule isBool(mixed $rule, string $msg = '') static 验证字段值是否为布尔值 + * @method ValidateRule isAlpha(mixed $rule, string $msg = '') static 验证字段值是否为字母 + * @method ValidateRule isAlphaDash(mixed $rule, string $msg = '') static 验证字段值是否为字母和下划线 + * @method ValidateRule isAlphaNum(mixed $rule, string $msg = '') static 验证字段值是否为字母和数字 + * @method ValidateRule isAccepted(mixed $rule, string $msg = '') static 验证字段值是否为yes, on, 或是 1 + * @method ValidateRule isEmail(mixed $rule, string $msg = '') static 验证字段值是否为有效邮箱格式 + * @method ValidateRule isUrl(mixed $rule, string $msg = '') static 验证字段值是否为有效URL地址 + * @method ValidateRule activeUrl(mixed $rule, string $msg = '') static 验证是否为合格的域名或者IP + * @method ValidateRule ip(mixed $rule, string $msg = '') static 验证是否有效IP + * @method ValidateRule fileExt(mixed $rule, string $msg = '') static 验证文件后缀 + * @method ValidateRule fileMime(mixed $rule, string $msg = '') static 验证文件类型 + * @method ValidateRule fileSize(mixed $rule, string $msg = '') static 验证文件大小 + * @method ValidateRule image(mixed $rule, string $msg = '') static 验证图像文件 + * @method ValidateRule method(mixed $rule, string $msg = '') static 验证请求类型 + * @method ValidateRule dateFormat(mixed $rule, string $msg = '') static 验证时间和日期是否符合指定格式 + * @method ValidateRule unique(mixed $rule, string $msg = '') static 验证是否唯一 + * @method ValidateRule behavior(mixed $rule, string $msg = '') static 使用行为类验证 + * @method ValidateRule filter(mixed $rule, string $msg = '') static 使用filter_var方式验证 + * @method ValidateRule requireIf(mixed $rule, string $msg = '') static 验证某个字段等于某个值的时候必须 + * @method ValidateRule requireCallback(mixed $rule, string $msg = '') static 通过回调方法验证某个字段是否必须 + * @method ValidateRule requireWith(mixed $rule, string $msg = '') static 验证某个字段有值的情况下必须 + * @method ValidateRule must(mixed $rule=null, string $msg = '') static 必须验证 + */ +class ValidateRule +{ + // 验证字段的名称 + protected $title; + + // 当前验证规则 + protected $rule = []; + + // 验证提示信息 + protected $message = []; + + /** + * 添加验证因子 + * @access protected + * @param string $name 验证名称 + * @param mixed $rule 验证规则 + * @param string $msg 提示信息 + * @return $this + */ + protected function addItem($name, $rule = null, $msg = '') + { + if ($rule || 0 === $rule) { + $this->rule[$name] = $rule; + } else { + $this->rule[] = $name; + } + + $this->message[] = $msg; + + return $this; + } + + /** + * 获取验证规则 + * @access public + * @return array + */ + public function getRule() + { + return $this->rule; + } + + /** + * 获取验证字段名称 + * @access public + * @return string + */ + public function getTitle() + { + return $this->title; + } + + /** + * 获取验证提示 + * @access public + * @return array + */ + public function getMsg() + { + return $this->message; + } + + /** + * 设置验证字段名称 + * @access public + * @return $this + */ + public function title($title) + { + $this->title = $title; + + return $this; + } + + public function __call($method, $args) + { + if ('is' == strtolower(substr($method, 0, 2))) { + $method = substr($method, 2); + } + + array_unshift($args, lcfirst($method)); + + return call_user_func_array([$this, 'addItem'], $args); + } + + public static function __callStatic($method, $args) + { + $rule = new static(); + + if ('is' == strtolower(substr($method, 0, 2))) { + $method = substr($method, 2); + } + + array_unshift($args, lcfirst($method)); + + return call_user_func_array([$rule, 'addItem'], $args); + } +} diff --git a/thinkphp/library/think/view/driver/Php.php b/thinkphp/library/think/view/driver/Php.php new file mode 100644 index 000000000..f69871528 --- /dev/null +++ b/thinkphp/library/think/view/driver/Php.php @@ -0,0 +1,182 @@ + +// +---------------------------------------------------------------------- + +namespace think\view\driver; + +use think\Container; +use think\exception\TemplateNotFoundException; +use think\Loader; + +class Php +{ + // 模板引擎参数 + protected $config = [ + // 默认模板渲染规则 1 解析为小写+下划线 2 全部转换小写 + 'auto_rule' => 1, + // 视图基础目录(集中式) + 'view_base' => '', + // 模板起始路径 + 'view_path' => '', + // 模板文件后缀 + 'view_suffix' => 'php', + // 模板文件名分隔符 + 'view_depr' => DIRECTORY_SEPARATOR, + ]; + + public function __construct($config = []) + { + $this->config = array_merge($this->config, (array) $config); + } + + /** + * 检测是否存在模板文件 + * @access public + * @param string $template 模板文件或者模板规则 + * @return bool + */ + public function exists($template) + { + if ('' == pathinfo($template, PATHINFO_EXTENSION)) { + // 获取模板文件名 + $template = $this->parseTemplate($template); + } + + return is_file($template); + } + + /** + * 渲染模板文件 + * @access public + * @param string $template 模板文件 + * @param array $data 模板变量 + * @return void + */ + public function fetch($template, $data = []) + { + if ('' == pathinfo($template, PATHINFO_EXTENSION)) { + // 获取模板文件名 + $template = $this->parseTemplate($template); + } + + // 模板不存在 抛出异常 + if (!is_file($template)) { + throw new TemplateNotFoundException('template not exists:' . $template, $template); + } + + // 记录视图信息 + Container::get('app') + ->log('[ VIEW ] ' . $template . ' [ ' . var_export(array_keys($data), true) . ' ]'); + + if (isset($data['template'])) { + $__template__ = $template; + extract($data, EXTR_OVERWRITE); + include $__template__; + } else { + extract($data, EXTR_OVERWRITE); + include $template; + } + } + + /** + * 渲染模板内容 + * @access public + * @param string $content 模板内容 + * @param array $data 模板变量 + * @return void + */ + public function display($content, $data = []) + { + if (isset($data['content'])) { + $__content__ = $content; + extract($data, EXTR_OVERWRITE); + eval('?>' . $__content__); + } else { + extract($data, EXTR_OVERWRITE); + eval('?>' . $content); + } + } + + /** + * 自动定位模板文件 + * @access private + * @param string $template 模板文件规则 + * @return string + */ + private function parseTemplate($template) + { + if (empty($this->config['view_path'])) { + $this->config['view_path'] = Container::get('app')->getModulePath() . 'view' . DIRECTORY_SEPARATOR; + } + + $request = Container::get('request'); + + // 获取视图根目录 + if (strpos($template, '@')) { + // 跨模块调用 + list($module, $template) = explode('@', $template); + } + + if ($this->config['view_base']) { + // 基础视图目录 + $module = isset($module) ? $module : $request->module(); + $path = $this->config['view_base'] . ($module ? $module . DIRECTORY_SEPARATOR : ''); + } else { + $path = isset($module) ? Container::get('app')->getAppPath() . $module . DIRECTORY_SEPARATOR . 'view' . DIRECTORY_SEPARATOR : $this->config['view_path']; + } + + $depr = $this->config['view_depr']; + + if (0 !== strpos($template, '/')) { + $template = str_replace(['/', ':'], $depr, $template); + $controller = Loader::parseName($request->controller()); + + if ($controller) { + if ('' == $template) { + // 如果模板文件名为空 按照默认规则定位 + $template = str_replace('.', DIRECTORY_SEPARATOR, $controller) . $depr . $this->getActionTemplate($request); + } elseif (false === strpos($template, $depr)) { + $template = str_replace('.', DIRECTORY_SEPARATOR, $controller) . $depr . $template; + } + } + } else { + $template = str_replace(['/', ':'], $depr, substr($template, 1)); + } + + return $path . ltrim($template, '/') . '.' . ltrim($this->config['view_suffix'], '.'); + } + + protected function getActionTemplate($request) + { + $rule = [$request->action(true), Loader::parseName($request->action(true)), $request->action()]; + $type = $this->config['auto_rule']; + + return isset($rule[$type]) ? $rule[$type] : $rule[0]; + } + + /** + * 配置模板引擎 + * @access private + * @param string|array $name 参数名 + * @param mixed $value 参数值 + * @return void + */ + public function config($name, $value = null) + { + if (is_array($name)) { + $this->config = array_merge($this->config, $name); + } elseif (is_null($value)) { + return isset($this->config[$name]) ? $this->config[$name] : null; + } else { + $this->config[$name] = $value; + } + } + +} diff --git a/thinkphp/library/think/view/driver/Think.php b/thinkphp/library/think/view/driver/Think.php new file mode 100644 index 000000000..834a8c032 --- /dev/null +++ b/thinkphp/library/think/view/driver/Think.php @@ -0,0 +1,183 @@ + +// +---------------------------------------------------------------------- + +namespace think\view\driver; + +use think\Container; +use think\exception\TemplateNotFoundException; +use think\Loader; +use think\Template; + +class Think +{ + // 模板引擎实例 + private $template; + // 模板引擎参数 + protected $config = [ + // 默认模板渲染规则 1 解析为小写+下划线 2 全部转换小写 + 'auto_rule' => 1, + // 视图基础目录(集中式) + 'view_base' => '', + // 模板起始路径 + 'view_path' => '', + // 模板文件后缀 + 'view_suffix' => 'html', + // 模板文件名分隔符 + 'view_depr' => DIRECTORY_SEPARATOR, + // 是否开启模板编译缓存,设为false则每次都会重新编译 + 'tpl_cache' => true, + ]; + + public function __construct($config = []) + { + $this->config = array_merge($this->config, (array) $config); + if (empty($this->config['view_path'])) { + $this->config['view_path'] = Container::get('app')->getModulePath() . 'view' . DIRECTORY_SEPARATOR; + } + + $this->template = new Template($this->config); + } + + /** + * 检测是否存在模板文件 + * @access public + * @param string $template 模板文件或者模板规则 + * @return bool + */ + public function exists($template) + { + if ('' == pathinfo($template, PATHINFO_EXTENSION)) { + // 获取模板文件名 + $template = $this->parseTemplate($template); + } + + return is_file($template); + } + + /** + * 渲染模板文件 + * @access public + * @param string $template 模板文件 + * @param array $data 模板变量 + * @param array $config 模板参数 + * @return void + */ + public function fetch($template, $data = [], $config = []) + { + if ('' == pathinfo($template, PATHINFO_EXTENSION)) { + // 获取模板文件名 + $template = $this->parseTemplate($template); + } + + // 模板不存在 抛出异常 + if (!is_file($template)) { + throw new TemplateNotFoundException('template not exists:' . $template, $template); + } + + // 记录视图信息 + Container::get('app') + ->log('[ VIEW ] ' . $template . ' [ ' . var_export(array_keys($data), true) . ' ]'); + + $this->template->fetch($template, $data, $config); + } + + /** + * 渲染模板内容 + * @access public + * @param string $template 模板内容 + * @param array $data 模板变量 + * @param array $config 模板参数 + * @return void + */ + public function display($template, $data = [], $config = []) + { + $this->template->display($template, $data, $config); + } + + /** + * 自动定位模板文件 + * @access private + * @param string $template 模板文件规则 + * @return string + */ + private function parseTemplate($template) + { + // 分析模板文件规则 + $request = Container::get('request'); + + // 获取视图根目录 + if (strpos($template, '@')) { + // 跨模块调用 + list($module, $template) = explode('@', $template); + } + + if ($this->config['view_base']) { + // 基础视图目录 + $module = isset($module) ? $module : $request->module(); + $path = $this->config['view_base'] . ($module ? $module . DIRECTORY_SEPARATOR : ''); + } else { + $path = isset($module) ? Container::get('app')->getAppPath() . $module . DIRECTORY_SEPARATOR . 'view' . DIRECTORY_SEPARATOR : $this->config['view_path']; + } + + $depr = $this->config['view_depr']; + + if (0 !== strpos($template, '/')) { + $template = str_replace(['/', ':'], $depr, $template); + $controller = Loader::parseName($request->controller()); + + if ($controller) { + if ('' == $template) { + // 如果模板文件名为空 按照默认规则定位 + $template = str_replace('.', DIRECTORY_SEPARATOR, $controller) . $depr . $this->getActionTemplate($request); + } elseif (false === strpos($template, $depr)) { + $template = str_replace('.', DIRECTORY_SEPARATOR, $controller) . $depr . $template; + } + } + } else { + $template = str_replace(['/', ':'], $depr, substr($template, 1)); + } + + return $path . ltrim($template, '/') . '.' . ltrim($this->config['view_suffix'], '.'); + } + + protected function getActionTemplate($request) + { + $rule = [$request->action(true), Loader::parseName($request->action(true)), $request->action()]; + $type = $this->config['auto_rule']; + + return isset($rule[$type]) ? $rule[$type] : $rule[0]; + } + + /** + * 配置或者获取模板引擎参数 + * @access private + * @param string|array $name 参数名 + * @param mixed $value 参数值 + * @return mixed + */ + public function config($name, $value = null) + { + if (is_array($name)) { + $this->template->config($name); + $this->config = array_merge($this->config, $name); + } elseif (is_null($value)) { + return $this->template->config($name); + } else { + $this->template->$name = $value; + $this->config[$name] = $value; + } + } + + public function __call($method, $params) + { + return call_user_func_array([$this->template, $method], $params); + } +} diff --git a/thinkphp/library/traits/controller/Jump.php b/thinkphp/library/traits/controller/Jump.php new file mode 100644 index 000000000..8ea2ee4a2 --- /dev/null +++ b/thinkphp/library/traits/controller/Jump.php @@ -0,0 +1,158 @@ +error(); + * $this->redirect(); + * } + * } + */ +namespace traits\controller; + +use think\Container; +use think\exception\HttpResponseException; +use think\Response; +use think\response\Redirect; + +trait Jump +{ + /** + * 操作成功跳转的快捷方法 + * @access protected + * @param mixed $msg 提示信息 + * @param string $url 跳转的URL地址 + * @param mixed $data 返回的数据 + * @param integer $wait 跳转等待时间 + * @param array $header 发送的Header信息 + * @return void + */ + protected function success($msg = '', $url = null, $data = '', $wait = 3, array $header = []) + { + if (is_null($url) && isset($_SERVER["HTTP_REFERER"])) { + $url = $_SERVER["HTTP_REFERER"]; + } elseif ('' !== $url) { + $url = (strpos($url, '://') || 0 === strpos($url, '/')) ? $url : Container::get('url')->build($url); + } + + $result = [ + 'code' => 1, + 'msg' => $msg, + 'data' => $data, + 'url' => $url, + 'wait' => $wait, + ]; + + $type = $this->getResponseType(); + // 把跳转模板的渲染下沉,这样在 response_send 行为里通过getData()获得的数据是一致性的格式 + if ('html' == strtolower($type)) { + $type = 'jump'; + } + + $response = Response::create($result, $type)->header($header)->options(['jump_template' => Container::get('config')->get('dispatch_success_tmpl')]); + + throw new HttpResponseException($response); + } + + /** + * 操作错误跳转的快捷方法 + * @access protected + * @param mixed $msg 提示信息 + * @param string $url 跳转的URL地址 + * @param mixed $data 返回的数据 + * @param integer $wait 跳转等待时间 + * @param array $header 发送的Header信息 + * @return void + */ + protected function error($msg = '', $url = null, $data = '', $wait = 3, array $header = []) + { + if (is_null($url)) { + $url = Container::get('request')->isAjax() ? '' : 'javascript:history.back(-1);'; + } elseif ('' !== $url) { + $url = (strpos($url, '://') || 0 === strpos($url, '/')) ? $url : Container::get('url')->build($url); + } + + $result = [ + 'code' => 0, + 'msg' => $msg, + 'data' => $data, + 'url' => $url, + 'wait' => $wait, + ]; + + $type = $this->getResponseType(); + if ('html' == strtolower($type)) { + $type = 'jump'; + } + + $response = Response::create($result, $type)->header($header)->options(['jump_template' => Container::get('config')->get('dispatch_error_tmpl')]); + + throw new HttpResponseException($response); + } + + /** + * 返回封装后的API数据到客户端 + * @access protected + * @param mixed $data 要返回的数据 + * @param integer $code 返回的code + * @param mixed $msg 提示信息 + * @param string $type 返回数据格式 + * @param array $header 发送的Header信息 + * @return void + */ + protected function result($data, $code = 0, $msg = '', $type = '', array $header = []) + { + $result = [ + 'code' => $code, + 'msg' => $msg, + 'time' => time(), + 'data' => $data, + ]; + + $type = $type ?: $this->getResponseType(); + $response = Response::create($result, $type)->header($header); + + throw new HttpResponseException($response); + } + + /** + * URL重定向 + * @access protected + * @param string $url 跳转的URL表达式 + * @param array|integer $params 其它URL参数 + * @param integer $code http code + * @param array $with 隐式传参 + * @return void + */ + protected function redirect($url, $params = [], $code = 302, $with = []) + { + $response = new Redirect($url); + + if (is_integer($params)) { + $code = $params; + $params = []; + } + + $response->code($code)->params($params)->with($with); + + throw new HttpResponseException($response); + } + + /** + * 获取当前的response 输出类型 + * @access protected + * @return string + */ + protected function getResponseType() + { + $isAjax = Container::get('request')->isAjax(); + $config = Container::get('config'); + + return $isAjax + ? $config->get('default_ajax_return') + : $config->get('default_return_type'); + } +} diff --git a/thinkphp/logo.png b/thinkphp/logo.png new file mode 100644 index 000000000..25fd05936 Binary files /dev/null and b/thinkphp/logo.png differ diff --git a/thinkphp/phpunit.xml.dist b/thinkphp/phpunit.xml.dist new file mode 100644 index 000000000..37c3d2b53 --- /dev/null +++ b/thinkphp/phpunit.xml.dist @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + ./library/think/*/tests/ + + + + + + ./library/ + + ./library/think/*/tests + ./library/think/*/assets + ./library/think/*/resources + ./library/think/*/vendor + + + + \ No newline at end of file diff --git a/thinkphp/tpl/default_index.tpl b/thinkphp/tpl/default_index.tpl new file mode 100644 index 000000000..740b19283 --- /dev/null +++ b/thinkphp/tpl/default_index.tpl @@ -0,0 +1,10 @@ +*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px;} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }

    :) 2018新年快乐

    ThinkPHP V5.1
    12载初心不改(2006-2018) - 你值得信赖的PHP框架

    '; + } +} diff --git a/thinkphp/tpl/dispatch_jump.tpl b/thinkphp/tpl/dispatch_jump.tpl new file mode 100644 index 000000000..583376bbb --- /dev/null +++ b/thinkphp/tpl/dispatch_jump.tpl @@ -0,0 +1,49 @@ +{__NOLAYOUT__} + + + + + 跳转提示 + + + +
    + + +

    :)

    +

    + + +

    :(

    +

    + + +

    +

    + 页面自动 跳转 等待时间: +

    +
    + + + diff --git a/thinkphp/tpl/page_trace.tpl b/thinkphp/tpl/page_trace.tpl new file mode 100644 index 000000000..2e5afbab9 --- /dev/null +++ b/thinkphp/tpl/page_trace.tpl @@ -0,0 +1,71 @@ +
    + + +
    +
    +
    getUseTime().'s ';?>
    + +
    + + diff --git a/thinkphp/tpl/think_exception.tpl b/thinkphp/tpl/think_exception.tpl new file mode 100644 index 000000000..19ecbdc1b --- /dev/null +++ b/thinkphp/tpl/think_exception.tpl @@ -0,0 +1,507 @@ +'.end($names).''; + } + } + + if(!function_exists('parse_file')){ + function parse_file($file, $line) + { + return ''.basename($file)." line {$line}".''; + } + } + + if(!function_exists('parse_args')){ + function parse_args($args) + { + $result = []; + + foreach ($args as $key => $item) { + switch (true) { + case is_object($item): + $value = sprintf('object(%s)', parse_class(get_class($item))); + break; + case is_array($item): + if(count($item) > 3){ + $value = sprintf('[%s, ...]', parse_args(array_slice($item, 0, 3))); + } else { + $value = sprintf('[%s]', parse_args($item)); + } + break; + case is_string($item): + if(strlen($item) > 20){ + $value = sprintf( + '\'%s...\'', + htmlentities($item), + htmlentities(substr($item, 0, 20)) + ); + } else { + $value = sprintf("'%s'", htmlentities($item)); + } + break; + case is_int($item): + case is_float($item): + $value = $item; + break; + case is_null($item): + $value = 'null'; + break; + case is_bool($item): + $value = '' . ($item ? 'true' : 'false') . ''; + break; + case is_resource($item): + $value = 'resource'; + break; + default: + $value = htmlentities(str_replace("\n", '', var_export(strval($item), true))); + break; + } + + $result[] = is_int($key) ? $value : "'{$key}' => {$value}"; + } + + return implode(', ', $result); + } + } +?> + + + + + 系统发生错误 + + + + +
    + +
    + +
    +
    + +
    +
    +

    [

    +
    +

    +
    + +
    + +
    +
      $value) { ?>
    +
    + +
    +

    Call Stack

    +
      +
    1. + +
    2. + +
    3. + +
    +
    +
    + +
    + +

    + +
    + + + +
    +

    Exception Datas

    + $value) { ?> + + + + + + + $val) { ?> + + + + + + + +
    empty
    + +
    + +
    + + + +
    +

    Environment Variables

    + $value) { ?> + + + + + + + $val) { ?> + + + + + + + +
    empty
    + +
    + +
    + + + + + + + + diff --git a/vendor/aliyuncs/oss-sdk-php/.coveralls.yml b/vendor/aliyuncs/oss-sdk-php/.coveralls.yml new file mode 100644 index 000000000..850cc5974 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/.coveralls.yml @@ -0,0 +1,2 @@ +coverage_clover: coverage.xml +json_path: coverage.json diff --git a/vendor/aliyuncs/oss-sdk-php/.gitignore b/vendor/aliyuncs/oss-sdk-php/.gitignore new file mode 100644 index 000000000..7cdb514d8 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/.gitignore @@ -0,0 +1,8 @@ +vendor +composer.lock +doc +output +.idea +.buildpath +.project +.settings diff --git a/vendor/aliyuncs/oss-sdk-php/.travis.yml b/vendor/aliyuncs/oss-sdk-php/.travis.yml new file mode 100644 index 000000000..0b40ba23b --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/.travis.yml @@ -0,0 +1,21 @@ +language: php +php: + - 7.1 + - 7.0 + - 5.6 + - 5.5 + - 5.4 +install: + - composer self-update + - composer install --no-interaction +script: + - php vendor/bin/phpunit +after_success: + - php vendor/bin/coveralls -v +env: + global: + - secure: SzmQ854lQmhV6ZkAG7lQNTY3CkazrXnDSb6VMwPU/sdaLGxPO159AW3fJS5d0sO/XN1P8x5WNkoA4i9soDlLBRibEEISNUM/2EMnpszsRymZ9o97PrS2IgORXTUL/OF+rpATzyNVB2p+2l9hBLiGf17exMSA5iOeY7W6E+VKPGi8TFykgbGUnLKU0h1hV3rzmtfGjOXcSpvYU/hxeZD/J/+6m5Gic9b/pNS+AbfTj7Y7Ru9tNsnyUP29V/vtEYtpQir3ZxQiSiUv9idybgGnJBOMYydJofb/mpFYHhYLSWqtMKGNLpeawmqs4z8S1Tvx5U5uzW5+h/mpzhvBaFlWGpm8t89BQxun5LVX5NiYCrV7TqaLitGp1cSpMjMDnrnSTNzk1exVz+rWZZcWS7yB9ULYA681GA8StXWk167qB7Y30iK1dFK3+2mDN2cEY+qLs8+bupDowQ4eOM+eqfhxX8F8+ouKcKomETsjiIwL+CUsIe6wjvnYFWb1YlRhbsI75bblHApflohnt6gVSJ78ZPqID+u2oUMjmIWXLTnRR2Y2tgEW8uqHeIoQ8BBntLdQDmv0BO4FpnGQIwrUUwQYeNzEM0DOr3hWZhyDR6Xvl+9H0l52xjANaSqpuTZfC3zmeFTG7kIjydvxNePRrony6XAawL9BvI7aKWuVF6YVjPM= + - secure: nEhsU8aUQqsAJeuger+boh51oTpeo4YNG7vUWbKxdwVDIrcLb+l7r7RvTlxU7mt8IZTWwicgri18mh+Wi04BwX4ulBA1SCs8jPbL51KEo5izoDGGtLSd2fuPHdslYSrwagrvq90EPnDT/7fHWn/TAoT+rueZzjNyCu5IGSgL3GnXaUThsJ82NMePL2YRdP4Q1qmtZPRFBOkOQ6F0heuV8fw8sLyTO3txaCQum9YneGxrWxOl/E8zB0qtlnPwLE8ogaHZMQh2/jThmTbI5UqwRTxV4f0qoD5eJYH+j0fslsSAjsg/HPnSuVcnccK3zSU+s2sV4dPCcISzECJvZEObwipfxOGhdqt5gMcxHhn8qVsbT97iIh106pG/BJCDgQd2EeVW8WfCi6cCuCKIMipvVkMypkmjQHWU1XaqPzILl7g5diW9Ctp2C4Akq5dYdrdu8IrnVK1ShtkQVaWU+S/Bht8VU5gYP7olPW/GdTz7sceU1NOIC4NPXqmWKbfavR98U5dkHMLMvzABYL1Q87h+KhPD1c14NUyw3YENUW7REiF/X5lERRm5H0kJ/1JqAa+AgeHQEGmPVuZV2s/na4b0S1479QRVmSM/6ZzXQpU+Y8jCRfETpUFA4S331369kirHgCqDlxyIntuEKrzivD02/O+5C3eJ0WHRz6QsN2/R4qg= + - secure: ZTvzNXEZP4efl+a/3VGMmdabfUQp83v5/lecMns039Ro7UuZYPdtbPtpPnpjaTI6Htd22A4Rva5BU/3JCQJAyQvpbKNn5sGou2SmfQu3o0SyhggSB7gWjYAf707aW1j4bHYfP8IjDS5NjuVk3AqXeNSUuLRUXRmwSOB0lSYiRhiTJY+pUdBl382Hx4NbhIU/gmOzRoJCs7coTip8IURXYEHPi5dnDWluajxI+TgNXFccSgEleeQDJajYgXmpLb2EhSj8piipOnVgaCEE5bh5fbp32024Qq38SGHKcbfnwj2IInpZpZESJknRKoqAlFjdOJhork82dBcvAr5JxCBZKx5IuwXcTjxkQ6tRtBeqhPLPFuX3MQ8WrtU+wniPM0RCH/VoFkUKO7JGQDwmoi2AKago4PsuDs4P6Y6CeuOVpcso731GwwMNhIJcyrJJivXprQNEGsEw+9wLjU1qNYs6IIA3S/gPzFrNbdX5Wf8vxt0vLpgYvBNtPnLMejMtknuyfVzf5iKuVVoGPDTEz+ajs06+jfoPfm/4sLTaLghuVH7Adm74OpF769JQNnQYKwJuu4bNlcbLJChulCEMBOx7myqo/9O6RCTuqzHaGmVWNot4RGqRFHgJGl/JJf0WpAVitbhbRH3kGoyKb6jFM74CJbPsE7OORlJLDC3cdD3C8Pk= + - secure: Qr5NR4CVzBKCQgRgMH0x772TPJ1+brx3UCvtRNu8fi4j3p8bz+HDMjBaBDSFmEB09nunLI55/8mj88/5GXmnpFs8+CPTkcW+QZOcxg3cxpI4SNmxoB12/ZawlFHAqSUaRRE7RUWVkY3KL8tIGjEZcFyUBQ1DVNX3OMpiKs3NLtHa7oUIknyBxdSokm4kpLhSXYe7WmO0vhuZbMZE0S1EISToiBS6AdhGUEbTLJ/vNsIDY07fu6+Vh3HxVbyUFPqUZGlkZpQ+2xMJ3kiqPBMrXtRF/IhhPjORDil6Ns9SQ8/AAlaCddvYvRaT4Pjv2/aX+t3l28qI1qmryPtWXpce5UXecWGYqdRpSJc6Y/pEt4m4FeeGoEFWnSPGIs7FRmeiis8q2rojGZ18i4vI/k4iHmqEBnTlMp3SWnRb9L1adJ8ZAWln8aC88gkQXm67w7+1CxLycerbYj9H1ugqHENuHcxv4uHUcZgEENX3EWatu8i9+K2IUuU/2zcmpu7qtsziYcoyW8DOOmYpJfXGMLtmF9+pqp/Tp6i0tltFSEfmY3N8o7xvv3enLvFHsjL+3ElFdd1blUPSrvZJHgA9M3lJ+QF1RJZCpJqgPlQ0XOZK1Bf4P46zpEj01wKaK4JQrkLPRXhbBOuIJn5O6WlFJyPX4+SaBfwTzb4AvM4aUg2TgTg= + - secure: Inw5ftA8fxvhMHRZwoZzATxn4WICJsCq7ZX4y2gI+b/8u0JQIsbLgY9WTYV+XdSxOoNwuVa1oUxEWI0aDORtXKC3XaIXXKrwndag0zxS77JEYwWvQsjM7BhEbF7MF7MYk8rRXpn6mbfGAT/NfqEOx91RCY8UKeMzD0oPkpkBnJ9Ekuod6JBBq+7j3v4mYUItA8pxvw7b4Pdd4z2xzjgOwNhJYMOCpts50DWZI+WXj0HvTYaMXe5mJJtORK5lsr0a9cbsBqAzE6l+3zGI8XkgHn130ux5XH3DE7hZBeti3ZNaO3d2Vv+496/1EObG0rSFk+z3dmNKqjMz4nh3bYIkdLMegwmgCWs2mvQhkwYhzmnPRHVSERrgZjSWnuKn2PKnBar6tui9KaLNgpo2j3jWpwMLJ3bGAfE5JtMppxAxNqj/q+YB2UZo7Mn7EDjkTDjgxCuazTJwWqH7xxCOykWPABBI17P3JaOXQJEK39LavpfSMm3kdmU0ocpUs7FniLuFm6xL71VxY1wHG10yskczEcFHZ3iyIyGM+xum4vbt5y6Yg+zfdExYQsbrxHDDZ3HbHY3tEU0WhM55vrC42NIXRWqXqJ8OAxpl4nivfx96eoBAThiUU9xXtZmh7WRFVYsstoGtxZwfk5+bi+oeVO9kih4xabwbgHgL9BTc1TR1C4U= diff --git a/vendor/aliyuncs/oss-sdk-php/CHANGELOG.md b/vendor/aliyuncs/oss-sdk-php/CHANGELOG.md new file mode 100644 index 000000000..042a72a0b --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/CHANGELOG.md @@ -0,0 +1,92 @@ +# ChangeLog - Aliyun OSS SDK for PHP + +## v2.3.0 / 2018-01-05 + +* 修复:putObject支持创建空文件 +* 修复:createBucket支持IA/Archive +* 增加:支持restoreObject +* 增加:支持Symlink功能 +* 增加:支持getBucketLocation +* 增加:支持getBucketMeta +* 增加:支持代理服务器Proxy + +## v2.2.4 / 2017-04-25 + +* fix getObject to local file bug + +## v2.2.3 / 2017-04-14 + +* fix md5 check + +## v2.2.2 / 2017-01-18 + +* 解决在php7上运行连接数和内存bug + +## v2.2.1 / 2016-12-01 + +* 禁止http curl自动填充Accept-Encoding + +## v2.2.0 / 2016-11-22 + +* 修复PutObject/CompleteMultipartUpload的返回值问题(#26) + +## v2.1.0 / 2016-11-12 + +* 增加[RTMP](https://help.aliyun.com/document_detail/44297.html)接口 +* 增加支持[图片服务](https://help.aliyun.com/document_detail/44686.html) + +## v2.0.7 / 2016-06-17 + +* Support append object + +## v2.0.6 + +* Trim access key id/secret and endpoint +* Refine tests and setup travis CI + +## v2.0.5 + +* 增加Add/Delete/Get BucketCname接口 + +## v2.0.4 + +* 增加Put/Get Object Acl接口 + +## v2.0.3 + +* 修复Util中的常量定义在低于5.6的PHP版本中报错的问题 + +## v2.0.2 + +* 修复multipart上传时无法指定Content-Type的问题 + +## v2.0.1 + +* 增加对ListObjects/ListMultipartUploads时特殊字符的处理 +* 提供接口获取OssException中的详细信息 + + +## 2015.11.25 + +* **大版本升级,不再兼容以前接口,新版本对易用性做了很大的改进,建议用户迁移到新版本。** + +## 修改内容 + +* 不再支持PHP 5.2版本 + +### 新增内容 + +* 引入命名空间 +* 接口命名修正,采用驼峰式命名 +* 接口入参修改,把常用参数从Options参数中提出来 +* 接口返回结果修改,对返回结果进行处理,用户可以直接得到容易处理的数据结构  +* OssClient的构造函数变更 +* 支持CNAME和IP格式的Endpoint地址 +* 重新整理sample文件组织结构,使用function组织功能点 +* 增加设置连接超时,请求超时的接口 +* 去掉Object Group相关的已经过时的接口 +* OssException中的message改为英文 + +### 问题修复 + +* object名称校验不完备 diff --git a/vendor/aliyuncs/oss-sdk-php/LICENSE.md b/vendor/aliyuncs/oss-sdk-php/LICENSE.md new file mode 100644 index 000000000..3183de8c3 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/LICENSE.md @@ -0,0 +1,21 @@ +#The MIT License (MIT) + +Copyright (c) ali-sdk and other contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/README-CN.md b/vendor/aliyuncs/oss-sdk-php/README-CN.md new file mode 100644 index 000000000..8c0cf8430 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/README-CN.md @@ -0,0 +1,149 @@ +# Aliyun OSS SDK for PHP + +[![Latest Stable Version](https://poser.pugx.org/aliyuncs/oss-sdk-php/v/stable)](https://packagist.org/packages/aliyuncs/oss-sdk-php) +[![Build Status](https://travis-ci.org/aliyun/aliyun-oss-php-sdk.svg?branch=master)](https://travis-ci.org/aliyun/aliyun-oss-php-sdk) +[![Coverage Status](https://coveralls.io/repos/github/aliyun/aliyun-oss-php-sdk/badge.svg?branch=master)](https://coveralls.io/github/aliyun/aliyun-oss-php-sdk?branch=master) + +## [README of English](https://github.com/aliyun/aliyun-oss-php-sdk/blob/master/README.md) + +## 概述 + +阿里云对象存储(Object Storage Service,简称OSS),是阿里云对外提供的海量、安全、低成本、高可靠的云存储服务。用户可以通过调用API,在任何应用、任何时间、任何地点上传和下载数据,也可以通过用户Web控制台对数据进行简单的管理。OSS适合存放任意文件类型,适合各种网站、开发企业及开发者使用。 + + +## 运行环境 +- PHP 5.3+ +- cURL extension + +提示: + +- Ubuntu下可以使用apt-get包管理器安装php的cURL扩展 `sudo apt-get install php5-curl` + +## 安装方法 + +1. 如果您通过composer管理您的项目依赖,可以在你的项目根目录运行: + + $ composer require aliyuncs/oss-sdk-php + + 或者在你的`composer.json`中声明对Aliyun OSS SDK for PHP的依赖: + + "require": { + "aliyuncs/oss-sdk-php": "~2.0" + } + + 然后通过`composer install`安装依赖。composer安装完成后,在您的PHP代码中引入依赖即可: + + require_once __DIR__ . '/vendor/autoload.php'; + +2. 您也可以直接下载已经打包好的[phar文件][releases-page],然后在你 + 的代码中引入这个文件即可: + + require_once '/path/to/oss-sdk-php.phar'; + +3. 下载SDK源码,在您的代码中引入SDK目录下的`autoload.php`文件: + + require_once '/path/to/oss-sdk/autoload.php'; + +## 快速使用 + +### 常用类 + +| 类名 | 解释 | +|:------------------|:------------------------------------| +|OSS\OssClient | OSS客户端类,用户通过OssClient的实例调用接口 | +|OSS\Core\OssException | OSS异常类,用户在使用的过程中,只需要注意这个异常| + +### OssClient初始化 + +SDK的OSS操作通过OssClient类完成的,下面代码创建一个OssClient对象: + +```php +"; ; +$accessKeySecret = "<您从OSS获得的AccessKeySecret>"; +$endpoint = "<您选定的OSS数据中心访问域名,例如oss-cn-hangzhou.aliyuncs.com>"; +try { + $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); +} catch (OssException $e) { + print $e->getMessage(); +} +``` + +### 文件操作 + +文件(又称对象,Object)是OSS中最基本的数据单元,您可以把它简单地理解为文件,用下面代码可以实现一个Object的上传: + +```php +"; +$object = "<您使用的Object名字,注意命名规范>"; +$content = "Hello, OSS!"; // 上传的文件内容 +try { + $ossClient->putObject($bucket, $object, $content); +} catch (OssException $e) { + print $e->getMessage(); +} +``` + +### 存储空间操作 + +存储空间(又称Bucket)是一个用户用来管理所存储Object的存储空间,对于用户来说是一个管理Object的单元,所有的Object都必须隶属于某个Bucket。您可以按照下面的代码新建一个Bucket: + +```php +"; +try { + $ossClient->createBucket($bucket); +} catch (OssException $e) { + print $e->getMessage(); +} +``` + +### 返回结果处理 + +OssClient提供的接口返回返回数据分为两种: + +* Put,Delete类接口,接口返回null,如果没有OssException,即可认为操作成功 +* Get,List类接口,接口返回对应的数据,如果没有OssException,即可认为操作成功,举个例子: + +```php +listBuckets(); +$bucketList = $bucketListInfo->getBucketList(); +foreach($bucketList as $bucket) { + print($bucket->getLocation() . "\t" . $bucket->getName() . "\t" . $bucket->getCreatedate() . "\n"); +} +``` +上面代码中的$bucketListInfo的数据类型是 `OSS\Model\BucketListInfo` + + +### 运行Sample程序 + +1. 修改 `samples/Config.php`, 补充配置信息 +2. 执行 `cd samples/ && php RunAll.php` + +### 运行单元测试 + +1. 执行`composer install`下载依赖的库 +2. 设置环境变量 + + export OSS_ACCESS_KEY_ID=access-key-id + export OSS_ACCESS_KEY_SECRET=access-key-secret + export OSS_ENDPOINT=endpoint + export OSS_BUCKET=bucket-name + +3. 执行 `php vendor/bin/phpunit` + +## License + +- MIT + +## 联系我们 + +- [阿里云OSS官方网站](http://oss.aliyun.com) +- [阿里云OSS官方论坛](http://bbs.aliyun.com) +- [阿里云OSS官方文档中心](http://www.aliyun.com/product/oss#Docs) +- 阿里云官方技术支持:[提交工单](https://workorder.console.aliyun.com/#/ticket/createIndex) + +[releases-page]: https://github.com/aliyun/aliyun-oss-php-sdk/releases +[phar-composer]: https://github.com/clue/phar-composer diff --git a/vendor/aliyuncs/oss-sdk-php/README.md b/vendor/aliyuncs/oss-sdk-php/README.md new file mode 100644 index 000000000..3c1da2633 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/README.md @@ -0,0 +1,150 @@ +# Alibaba Cloud OSS SDK for PHP + +[![Latest Stable Version](https://poser.pugx.org/aliyuncs/oss-sdk-php/v/stable)](https://packagist.org/packages/aliyuncs/oss-sdk-php) +[![Build Status](https://travis-ci.org/aliyun/aliyun-oss-php-sdk.svg?branch=master)](https://travis-ci.org/aliyun/aliyun-oss-php-sdk) +[![Coverage Status](https://coveralls.io/repos/github/aliyun/aliyun-oss-php-sdk/badge.svg?branch=master)](https://coveralls.io/github/aliyun/aliyun-oss-php-sdk?branch=master) + +## [README of Chinese](https://github.com/aliyun/aliyun-oss-php-sdk/blob/master/README-CN.md) + +## Overview + +Alibaba Cloud Object Storage Service (OSS) is a cloud storage service provided by Alibaba Cloud, featuring a massive capacity, security, a low cost, and high reliability. You can upload and download data on any application anytime and anywhere by calling APIs, and perform simple management of data through the web console. The OSS can store any type of files and therefore applies to various websites, development enterprises and developers. + + +## Run environment +- PHP 5.3+. +- cURL extension. + +Tips: + +- In Ubuntu, you can use the ***apt-get*** package manager to install the *PHP cURL extension*: `sudo apt-get install php5-curl`. + +## Install OSS PHP SDK + +- If you use the ***composer*** to manage project dependencies, run the following command in your project's root directory: + + composer require aliyuncs/oss-sdk-php + + You can also declare the dependency on Alibaba Cloud OSS SDK for PHP in the `composer.json` file. + + "require": { + "aliyuncs/oss-sdk-php": "~2.0" + } + + Then run `composer install` to install the dependency. After the Composer Dependency Manager is installed, import the dependency in your PHP code: + + require_once __DIR__ . '/vendor/autoload.php'; + +- You can also directly download the packaged [PHAR File][releases-page], and + introduce the file to your code: + + require_once '/path/to/oss-sdk-php.phar'; + +- Download the SDK source code, and introduce the `autoload.php` file under the SDK directory to your code: + + require_once '/path/to/oss-sdk/autoload.php'; + +## Quick use + +### Common classes + +| Class | Explanation | +|:------------------|:------------------------------------| +|OSS\OSSClient | OSS client class. An OSSClient instance can be used to call the interface. | +|OSS\Core\OSSException |OSS Exception class . You only need to pay attention to this exception when you use the OSSClient. | + +### Initialize an OSSClient + +The SDK's operations for the OSS are performed through the OSSClient class. The code below creates an OSSClient object: + +```php +"; +$accessKeySecret = ""; +$endpoint = ""; +try { + $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); +} catch (OssException $e) { + print $e->getMessage(); +} +``` + +### Operations on objects + +Objects are the most basic data units on the OSS. You can simply consider objects as files. The following code uploads an object: + +```php +"; +$object = ""; +$content = "Hello, OSS!"; // Content of the uploaded file +try { + $ossClient->putObject($bucket, $object, $content); +} catch (OssException $e) { + print $e->getMessage(); +} +``` + +### Operations on buckets + +Buckets are the space that you use to manage the stored objects. It is an object management unit for users. Each object must belong to a bucket. You can create a bucket with the following code: + +```php +"; +try { + $ossClient->createBucket($bucket); +} catch (OssException $e) { + print $e->getMessage(); +} +``` + +### Handle returned results + +The OSSClient provides the following two types of returned data from interfaces: + +- Put and Delete interfaces: The *PUT* and *DELETE* operations are deemed successful if *null* is returned by the interfaces without *OSSException*. +- Get and List interfaces: The *GET* and *LIST* operations are deemed successful if the desired data is returned by the interfaces without *OSSException*. For example, + + ```php + listBuckets(); + $bucketList = $bucketListInfo->getBucketList(); + foreach($bucketList as $bucket) { + print($bucket->getLocation() . "\t" . $bucket->getName() . "\t" . $bucket->getCreatedate() . "\n"); + } + ``` +In the above code, $bucketListInfo falls into the 'OSS\Model\BucketListInfo' data type. + + +### Run a sample project + +- Modify `samples/Config.php` to complete the configuration information. +- Run `cd samples/ && php RunAll.php`. + +### Run a unit test + +- Run `composer install` to download the dependent libraries. +- Set the environment variable. + + export OSS_ACCESS_KEY_ID=access-key-id + export OSS_ACCESS_KEY_SECRET=access-key-secret + export OSS_ENDPOINT=endpoint + export OSS_BUCKET=bucket-name + +- Run `php vendor/bin/phpunit` + +## License + +- MIT + +## Contact us + +- [Alibaba Cloud OSS official website](http://oss.aliyun.com). +- [Alibaba Cloud OSS official forum](http://bbs.aliyun.com). +- [Alibaba Cloud OSS official documentation center](http://www.aliyun.com/product/oss#Docs). +- Alibaba Cloud official technical support: [Submit a ticket](https://workorder.console.aliyun.com/#/ticket/createIndex). + +[releases-page]: https://github.com/aliyun/aliyun-oss-php-sdk/releases +[phar-composer]: https://github.com/clue/phar-composer + diff --git a/vendor/aliyuncs/oss-sdk-php/autoload.php b/vendor/aliyuncs/oss-sdk-php/autoload.php new file mode 100644 index 000000000..ec132011c --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/autoload.php @@ -0,0 +1,11 @@ +=5.3" + }, + "require-dev" : { + "phpunit/phpunit": "~4.0", + "satooshi/php-coveralls": "~1.0" + }, + "minimum-stability": "stable", + "autoload": { + "psr-4": {"OSS\\": "src/OSS"} + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/example.jpg b/vendor/aliyuncs/oss-sdk-php/example.jpg new file mode 100644 index 000000000..ffd46a2f8 Binary files /dev/null and b/vendor/aliyuncs/oss-sdk-php/example.jpg differ diff --git a/vendor/aliyuncs/oss-sdk-php/index.php b/vendor/aliyuncs/oss-sdk-php/index.php new file mode 100644 index 000000000..cdc28bc13 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/index.php @@ -0,0 +1,3 @@ + + + + + + + ./src + + + + + + + + ./tests + ./tests/OSS/Tests/BucketCnameTest.php + + + diff --git a/vendor/aliyuncs/oss-sdk-php/samples/Bucket.php b/vendor/aliyuncs/oss-sdk-php/samples/Bucket.php new file mode 100644 index 000000000..bd16e6556 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/samples/Bucket.php @@ -0,0 +1,167 @@ +createBucket($bucket, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE); +Common::println("bucket $bucket created"); + +// 判断Bucket是否存在 +$doesExist = $ossClient->doesBucketExist($bucket); +Common::println("bucket $bucket exist? " . ($doesExist ? "yes" : "no")); + +// 获取Bucket列表 +$bucketListInfo = $ossClient->listBuckets(); + +// 设置bucket的ACL +$ossClient->putBucketAcl($bucket, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE); +Common::println("bucket $bucket acl put"); +// 获取bucket的ACL +$acl = $ossClient->getBucketAcl($bucket); +Common::println("bucket $bucket acl get: " . $acl); + + +//******************************* 完整用法参考下面函数 **************************************************** + +createBucket($ossClient, $bucket); +doesBucketExist($ossClient, $bucket); +deleteBucket($ossClient, $bucket); +putBucketAcl($ossClient, $bucket); +getBucketAcl($ossClient, $bucket); +listBuckets($ossClient); + +/** + * 创建一个存储空间 + * acl 指的是bucket的访问控制权限,有三种,私有读写,公共读私有写,公共读写。 + * 私有读写就是只有bucket的拥有者或授权用户才有权限操作 + * 三种权限分别对应 (OssClient::OSS_ACL_TYPE_PRIVATE,OssClient::OSS_ACL_TYPE_PUBLIC_READ, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE) + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 要创建的存储空间名称 + * @return null + */ +function createBucket($ossClient, $bucket) +{ + try { + $ossClient->createBucket($bucket, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + +/** + * 判断Bucket是否存在 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + */ +function doesBucketExist($ossClient, $bucket) +{ + try { + $res = $ossClient->doesBucketExist($bucket); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + if ($res === true) { + print(__FUNCTION__ . ": OK" . "\n"); + } else { + print(__FUNCTION__ . ": FAILED" . "\n"); + } +} + +/** + * 删除bucket,如果bucket不为空则bucket无法删除成功, 不为空表示bucket既没有object,也没有未完成的multipart上传时的parts + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 待删除的存储空间名称 + * @return null + */ +function deleteBucket($ossClient, $bucket) +{ + try { + $ossClient->deleteBucket($bucket); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + +/** + * 设置bucket的acl配置 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function putBucketAcl($ossClient, $bucket) +{ + $acl = OssClient::OSS_ACL_TYPE_PRIVATE; + try { + $ossClient->putBucketAcl($bucket, $acl); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + + +/** + * 获取bucket的acl配置 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function getBucketAcl($ossClient, $bucket) +{ + try { + $res = $ossClient->getBucketAcl($bucket); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); + print('acl: ' . $res); +} + + +/** + * 列出用户所有的Bucket + * + * @param OssClient $ossClient OssClient实例 + * @return null + */ +function listBuckets($ossClient) +{ + $bucketList = null; + try { + $bucketListInfo = $ossClient->listBuckets(); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); + $bucketList = $bucketListInfo->getBucketList(); + foreach ($bucketList as $bucket) { + print($bucket->getLocation() . "\t" . $bucket->getName() . "\t" . $bucket->getCreatedate() . "\n"); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/samples/BucketCors.php b/vendor/aliyuncs/oss-sdk-php/samples/BucketCors.php new file mode 100644 index 000000000..cc5c0b9c5 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/samples/BucketCors.php @@ -0,0 +1,108 @@ +addAllowedHeader("x-oss-header"); +$rule->addAllowedOrigin("http://www.b.com"); +$rule->addAllowedMethod("POST"); +$rule->setMaxAgeSeconds(10); +$corsConfig->addRule($rule); +$ossClient->putBucketCors($bucket, $corsConfig); +Common::println("bucket $bucket corsConfig created:" . $corsConfig->serializeToXml()); + +// 获取cors配置 +$corsConfig = $ossClient->getBucketCors($bucket); +Common::println("bucket $bucket corsConfig fetched:" . $corsConfig->serializeToXml()); + +// 删除cors配置 +$ossClient->deleteBucketCors($bucket); +Common::println("bucket $bucket corsConfig deleted"); + +//******************************* 完整用法参考下面函数 ***************************************************** + +putBucketCors($ossClient, $bucket); +getBucketCors($ossClient, $bucket); +deleteBucketCors($ossClient, $bucket); +getBucketCors($ossClient, $bucket); + +/** + * 设置bucket的cors配置 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function putBucketCors($ossClient, $bucket) +{ + $corsConfig = new CorsConfig(); + $rule = new CorsRule(); + $rule->addAllowedHeader("x-oss-header"); + $rule->addAllowedOrigin("http://www.b.com"); + $rule->addAllowedMethod("POST"); + $rule->setMaxAgeSeconds(10); + $corsConfig->addRule($rule); + + try { + $ossClient->putBucketCors($bucket, $corsConfig); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + +/** + * 获取并打印bucket的cors配置 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function getBucketCors($ossClient, $bucket) +{ + $corsConfig = null; + try { + $corsConfig = $ossClient->getBucketCors($bucket); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); + print($corsConfig->serializeToXml() . "\n"); +} + +/** + * 删除bucket的所有的cors配置 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function deleteBucketCors($ossClient, $bucket) +{ + try { + $ossClient->deleteBucketCors($bucket); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + diff --git a/vendor/aliyuncs/oss-sdk-php/samples/BucketLifecycle.php b/vendor/aliyuncs/oss-sdk-php/samples/BucketLifecycle.php new file mode 100644 index 000000000..ec0c37f8f --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/samples/BucketLifecycle.php @@ -0,0 +1,109 @@ +addRule($lifecycleRule); +$ossClient->putBucketLifecycle($bucket, $lifecycleConfig); +Common::println("bucket $bucket lifecycleConfig created:" . $lifecycleConfig->serializeToXml()); + +//获取lifecycle规则 +$lifecycleConfig = $ossClient->getBucketLifecycle($bucket); +Common::println("bucket $bucket lifecycleConfig fetched:" . $lifecycleConfig->serializeToXml()); + +//删除bucket的lifecycle配置 +$ossClient->deleteBucketLifecycle($bucket); +Common::println("bucket $bucket lifecycleConfig deleted"); + + +//***************************** 完整用法参考下面函数 *********************************************** + +putBucketLifecycle($ossClient, $bucket); +getBucketLifecycle($ossClient, $bucket); +deleteBucketLifecycle($ossClient, $bucket); +getBucketLifecycle($ossClient, $bucket); + +/** + * 设置bucket的生命周期配置 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function putBucketLifecycle($ossClient, $bucket) +{ + $lifecycleConfig = new LifecycleConfig(); + $actions = array(); + $actions[] = new LifecycleAction(OssClient::OSS_LIFECYCLE_EXPIRATION, OssClient::OSS_LIFECYCLE_TIMING_DAYS, 3); + $lifecycleRule = new LifecycleRule("delete obsoleted files", "obsoleted/", "Enabled", $actions); + $lifecycleConfig->addRule($lifecycleRule); + $actions = array(); + $actions[] = new LifecycleAction(OssClient::OSS_LIFECYCLE_EXPIRATION, OssClient::OSS_LIFECYCLE_TIMING_DATE, '2022-10-12T00:00:00.000Z'); + $lifecycleRule = new LifecycleRule("delete temporary files", "temporary/", "Enabled", $actions); + $lifecycleConfig->addRule($lifecycleRule); + try { + $ossClient->putBucketLifecycle($bucket, $lifecycleConfig); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + +/** + * 获取bucket的生命周期配置 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function getBucketLifecycle($ossClient, $bucket) +{ + $lifecycleConfig = null; + try { + $lifecycleConfig = $ossClient->getBucketLifecycle($bucket); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); + print($lifecycleConfig->serializeToXml() . "\n"); +} + +/** + * 删除bucket的生命周期配置 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function deleteBucketLifecycle($ossClient, $bucket) +{ + try { + $ossClient->deleteBucketLifecycle($bucket); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + + diff --git a/vendor/aliyuncs/oss-sdk-php/samples/BucketLogging.php b/vendor/aliyuncs/oss-sdk-php/samples/BucketLogging.php new file mode 100644 index 000000000..406e1d472 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/samples/BucketLogging.php @@ -0,0 +1,95 @@ +putBucketLogging($bucket, $bucket, "access.log", array()); +Common::println("bucket $bucket lifecycleConfig created"); + +// 获取Bucket访问日志记录规则 +$loggingConfig = $ossClient->getBucketLogging($bucket, array()); +Common::println("bucket $bucket lifecycleConfig fetched:" . $loggingConfig->serializeToXml()); + +// 删除Bucket访问日志记录规则 +$loggingConfig = $ossClient->getBucketLogging($bucket, array()); +Common::println("bucket $bucket lifecycleConfig deleted"); + +//******************************* 完整用法参考下面函数 **************************************************** + +putBucketLogging($ossClient, $bucket); +getBucketLogging($ossClient, $bucket); +deleteBucketLogging($ossClient, $bucket); +getBucketLogging($ossClient, $bucket); + +/** + * 设置bucket的Logging配置 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function putBucketLogging($ossClient, $bucket) +{ + $option = array(); + //访问日志存放在本bucket下 + $targetBucket = $bucket; + $targetPrefix = "access.log"; + + try { + $ossClient->putBucketLogging($bucket, $targetBucket, $targetPrefix, $option); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + +/** + * 获取bucket的Logging配置 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function getBucketLogging($ossClient, $bucket) +{ + $loggingConfig = null; + $options = array(); + try { + $loggingConfig = $ossClient->getBucketLogging($bucket, $options); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); + print($loggingConfig->serializeToXml() . "\n"); +} + +/** + * 删除bucket的Logging配置 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function deleteBucketLogging($ossClient, $bucket) +{ + try { + $ossClient->deleteBucketLogging($bucket); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} diff --git a/vendor/aliyuncs/oss-sdk-php/samples/BucketReferer.php b/vendor/aliyuncs/oss-sdk-php/samples/BucketReferer.php new file mode 100644 index 000000000..3828df696 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/samples/BucketReferer.php @@ -0,0 +1,101 @@ +setAllowEmptyReferer(true); +$refererConfig->addReferer("www.aliiyun.com"); +$refererConfig->addReferer("www.aliiyuncs.com"); +$ossClient->putBucketReferer($bucket, $refererConfig); +Common::println("bucket $bucket refererConfig created:" . $refererConfig->serializeToXml()); +//获取Referer白名单 +$refererConfig = $ossClient->getBucketReferer($bucket); +Common::println("bucket $bucket refererConfig fetched:" . $refererConfig->serializeToXml()); + +//删除referer白名单 +$refererConfig = new RefererConfig(); +$ossClient->putBucketReferer($bucket, $refererConfig); +Common::println("bucket $bucket refererConfig deleted"); + + +//******************************* 完整用法参考下面函数 **************************************************** + +putBucketReferer($ossClient, $bucket); +getBucketReferer($ossClient, $bucket); +deleteBucketReferer($ossClient, $bucket); +getBucketReferer($ossClient, $bucket); + +/** + * 设置bucket的防盗链配置 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function putBucketReferer($ossClient, $bucket) +{ + $refererConfig = new RefererConfig(); + $refererConfig->setAllowEmptyReferer(true); + $refererConfig->addReferer("www.aliiyun.com"); + $refererConfig->addReferer("www.aliiyuncs.com"); + try { + $ossClient->putBucketReferer($bucket, $refererConfig); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + +/** + * 获取bucket的防盗链配置 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function getBucketReferer($ossClient, $bucket) +{ + $refererConfig = null; + try { + $refererConfig = $ossClient->getBucketReferer($bucket); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); + print($refererConfig->serializeToXml() . "\n"); +} + +/** + * 删除bucket的防盗链配置 + * Referer白名单不能直接清空,只能通过重新设置来覆盖之前的规则。 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function deleteBucketReferer($ossClient, $bucket) +{ + $refererConfig = new RefererConfig(); + try { + $ossClient->putBucketReferer($bucket, $refererConfig); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} diff --git a/vendor/aliyuncs/oss-sdk-php/samples/BucketWebsite.php b/vendor/aliyuncs/oss-sdk-php/samples/BucketWebsite.php new file mode 100644 index 000000000..54706f834 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/samples/BucketWebsite.php @@ -0,0 +1,92 @@ +putBucketWebsite($bucket, $websiteConfig); +Common::println("bucket $bucket websiteConfig created:" . $websiteConfig->serializeToXml()); + +// 查看Bucket的静态网站托管状态 +$websiteConfig = $ossClient->getBucketWebsite($bucket); +Common::println("bucket $bucket websiteConfig fetched:" . $websiteConfig->serializeToXml()); + +// 删除Bucket的静态网站托管模式 +$ossClient->deleteBucketWebsite($bucket); +Common::println("bucket $bucket websiteConfig deleted"); + +//******************************* 完整用法参考下面函数 **************************************************** + +putBucketWebsite($ossClient, $bucket); +getBucketWebsite($ossClient, $bucket); +deleteBucketWebsite($ossClient, $bucket); +getBucketWebsite($ossClient, $bucket); + +/** + * 设置bucket的静态网站托管模式配置 + * + * @param $ossClient OssClient + * @param $bucket string 存储空间名称 + * @return null + */ +function putBucketWebsite($ossClient, $bucket) +{ + $websiteConfig = new WebsiteConfig("index.html", "error.html"); + try { + $ossClient->putBucketWebsite($bucket, $websiteConfig); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + +/** + * 获取bucket的静态网站托管状态 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function getBucketWebsite($ossClient, $bucket) +{ + $websiteConfig = null; + try { + $websiteConfig = $ossClient->getBucketWebsite($bucket); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); + print($websiteConfig->serializeToXml() . "\n"); +} + +/** + * 删除bucket的静态网站托管模式配置 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function deleteBucketWebsite($ossClient, $bucket) +{ + try { + $ossClient->deleteBucketWebsite($bucket); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} diff --git a/vendor/aliyuncs/oss-sdk-php/samples/Callback.php b/vendor/aliyuncs/oss-sdk-php/samples/Callback.php new file mode 100644 index 000000000..8612a1c54 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/samples/Callback.php @@ -0,0 +1,83 @@ + $url, + OssClient::OSS_CALLBACK_VAR => $var + ); +$result = $ossClient->putObject($bucket, "b.file", "random content", $options); +Common::println($result['body']); +Common::println($result['info']['http_code']); + +/** + * completeMultipartUpload 使用callback上传内容到oss文件 + * callbackurl参数指定请求回调的服务器url + * callbackbodytype参数可为application/json或application/x-www-form-urlencoded, 可选参数,默认为application/x-www-form-urlencoded + * OSS_CALLBACK_VAR参数可以不设置 + */ +$object = "multipart-callback-test.txt"; +$copiedObject = "multipart-callback-test.txt.copied"; +$ossClient->putObject($bucket, $copiedObject, file_get_contents(__FILE__)); + +/** + * step 1. 初始化一个分块上传事件, 也就是初始化上传Multipart, 获取upload id + */ +$upload_id = $ossClient->initiateMultipartUpload($bucket, $object); + +/** + * step 2. uploadPartCopy + */ +$copyId = 1; +$eTag = $ossClient->uploadPartCopy($bucket, $copiedObject, $bucket, $object, $copyId, $upload_id); +$upload_parts[] = array( + 'PartNumber' => $copyId, + 'ETag' => $eTag, + ); +$listPartsInfo = $ossClient->listParts($bucket, $object, $upload_id); + +/** + * step 3. + */ +$json = + '{ + "callbackUrl":"callback.oss-demo.com:23450", + "callbackHost":"oss-cn-hangzhou.aliyuncs.com", + "callbackBody":"{\"mimeType\":${mimeType},\"size\":${size},\"x:var1\":${x:var1},\"x:var2\":${x:var2}}", + "callbackBodyType":"application/json" + }'; +$var = + '{ + "x:var1":"value1", + "x:var2":"值2" + }'; +$options = array(OssClient::OSS_CALLBACK => $json, + OssClient::OSS_CALLBACK_VAR => $var); + +$result = $ossClient->completeMultipartUpload($bucket, $object, $upload_id, $upload_parts, $options); +Common::println($result['body']); +Common::println($result['info']['http_code']); diff --git a/vendor/aliyuncs/oss-sdk-php/samples/Common.php b/vendor/aliyuncs/oss-sdk-php/samples/Common.php new file mode 100644 index 000000000..f419d1782 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/samples/Common.php @@ -0,0 +1,84 @@ +getMessage() . "\n"); + return null; + } + return $ossClient; + } + + public static function getBucketName() + { + return self::bucket; + } + + /** + * 工具方法,创建一个存储空间,如果发生异常直接exit + */ + public static function createBucket() + { + $ossClient = self::getOssClient(); + if (is_null($ossClient)) exit(1); + $bucket = self::getBucketName(); + $acl = OssClient::OSS_ACL_TYPE_PUBLIC_READ; + try { + $ossClient->createBucket($bucket, $acl); + } catch (OssException $e) { + + $message = $e->getMessage(); + if (\OSS\Core\OssUtil::startsWith($message, 'http status: 403')) { + echo "Please Check your AccessKeyId and AccessKeySecret" . "\n"; + exit(0); + } elseif (strpos($message, "BucketAlreadyExists") !== false) { + echo "Bucket already exists. Please check whether the bucket belongs to you, or it was visited with correct endpoint. " . "\n"; + exit(0); + } + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); + } + + public static function println($message) + { + if (!empty($message)) { + echo strval($message) . "\n"; + } + } +} + +Common::createBucket(); diff --git a/vendor/aliyuncs/oss-sdk-php/samples/Config.php b/vendor/aliyuncs/oss-sdk-php/samples/Config.php new file mode 100644 index 000000000..35c0dc7c4 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/samples/Config.php @@ -0,0 +1,15 @@ +uploadFile($bucketName, $object, "example.jpg"); + +// 图片缩放 +$options = array( + OssClient::OSS_FILE_DOWNLOAD => $download_file, + OssClient::OSS_PROCESS => "image/resize,m_fixed,h_100,w_100", ); +$ossClient->getObject($bucketName, $object, $options); +printImage("imageResize",$download_file); + +// 图片裁剪 +$options = array( + OssClient::OSS_FILE_DOWNLOAD => $download_file, + OssClient::OSS_PROCESS => "image/crop,w_100,h_100,x_100,y_100,r_1", ); +$ossClient->getObject($bucketName, $object, $options); +printImage("iamgeCrop", $download_file); + +// 图片旋转 +$options = array( + OssClient::OSS_FILE_DOWNLOAD => $download_file, + OssClient::OSS_PROCESS => "image/rotate,90", ); +$ossClient->getObject($bucketName, $object, $options); +printImage("imageRotate", $download_file); + +// 图片锐化 +$options = array( + OssClient::OSS_FILE_DOWNLOAD => $download_file, + OssClient::OSS_PROCESS => "image/sharpen,100", ); +$ossClient->getObject($bucketName, $object, $options); +printImage("imageSharpen", $download_file); + +// 图片水印 +$options = array( + OssClient::OSS_FILE_DOWNLOAD => $download_file, + OssClient::OSS_PROCESS => "image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ", ); +$ossClient->getObject($bucketName, $object, $options); +printImage("imageWatermark", $download_file); + +// 图片格式转换 +$options = array( + OssClient::OSS_FILE_DOWNLOAD => $download_file, + OssClient::OSS_PROCESS => "image/format,png", ); +$ossClient->getObject($bucketName, $object, $options); +printImage("imageFormat", $download_file); + +// 获取图片信息 +$options = array( + OssClient::OSS_FILE_DOWNLOAD => $download_file, + OssClient::OSS_PROCESS => "image/info", ); +$ossClient->getObject($bucketName, $object, $options); +printImage("imageInfo", $download_file); + + +/** + * 生成一个带签名的可用于浏览器直接打开的url, URL的有效期是3600秒 + */ + $timeout = 3600; +$options = array( + OssClient::OSS_PROCESS => "image/resize,m_lfit,h_100,w_100", + ); +$signedUrl = $ossClient->signUrl($bucketName, $object, $timeout, "GET", $options); +Common::println("rtmp url: \n" . $signedUrl); + +//最后删除上传的$object +$ossClient->deleteObject($bucketName, $object); + +function printImage($func, $imageFile) +{ + $array = getimagesize($imageFile); + Common::println("$func, image width: " . $array[0]); + Common::println("$func, image height: " . $array[1]); + Common::println("$func, image type: " . ($array[2] === 2 ? 'jpg' : 'png')); + Common::println("$func, image size: " . ceil(filesize($imageFile))); +} diff --git a/vendor/aliyuncs/oss-sdk-php/samples/LiveChannel.php b/vendor/aliyuncs/oss-sdk-php/samples/LiveChannel.php new file mode 100644 index 000000000..2f7d3a8b9 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/samples/LiveChannel.php @@ -0,0 +1,125 @@ + 'live channel test', + 'type' => 'HLS', + 'fragDuration' => 10, + 'fragCount' => 5, + 'playListName' => 'hello.m3u8' + )); +$info = $ossClient->putBucketLiveChannel($bucket, 'test_rtmp_live', $config); +Common::println("bucket $bucket liveChannel created:\n" . +"live channel name: ". $info->getName() . "\n" . +"live channel description: ". $info->getDescription() . "\n" . +"publishurls: ". $info->getPublishUrls()[0] . "\n" . +"playurls: ". $info->getPlayUrls()[0] . "\n"); + +/** + 对创建好的频道,可以使用listBucketLiveChannels来进行列举已达到管理的目的。 + prefix可以按照前缀过滤list出来的频道。 + max_keys表示迭代器内部一次list出来的频道的最大数量,这个值最大不能超过1000,不填写的话默认为100。 + */ +$list = $ossClient->listBucketLiveChannels($bucket); +Common::println("bucket $bucket listLiveChannel:\n" . +"list live channel prefix: ". $list->getPrefix() . "\n" . +"list live channel marker: ". $list->getMarker() . "\n" . +"list live channel maxkey: ". $list->getMaxKeys() . "\n" . +"list live channel IsTruncated: ". $list->getIsTruncated() . "\n" . +"list live channel getNextMarker: ". $list->getNextMarker() . "\n"); + +foreach($list->getChannelList() as $list) +{ + Common::println("bucket $bucket listLiveChannel:\n" . + "list live channel IsTruncated: ". $list->getName() . "\n" . + "list live channel Description: ". $list->getDescription() . "\n" . + "list live channel Status: ". $list->getStatus() . "\n" . + "list live channel getNextMarker: ". $list->getLastModified() . "\n"); +} +/** + 创建直播频道之后拿到推流用的play_url(rtmp推流的url,如果Bucket不是公共读写权限那么还需要带上签名,见下文示例)和推流用的publish_url(推流产生的m3u8文件的url) + */ +$play_url = $ossClient->signRtmpUrl($bucket, "test_rtmp_live", 3600, array('params' => array('playlistName' => 'playlist.m3u8'))); +Common::println("bucket $bucket rtmp url: \n" . $play_url); +$play_url = $ossClient->signRtmpUrl($bucket, "test_rtmp_live", 3600); +Common::println("bucket $bucket rtmp url: \n" . $play_url); + +/** + 创建好直播频道,如果想把这个频道禁用掉(断掉正在推的流或者不再允许向一个地址推流),应该使用putLiveChannelStatus接口,将频道的status改成“Disabled”,如果要将一个禁用状态的频道启用,那么也是调用这个接口,将status改成“Enabled” + */ +$resp = $ossClient->putLiveChannelStatus($bucket, "test_rtmp_live", "enabled"); + +/** + 创建好直播频道之后调用getLiveChannelInfo可以得到频道相关的信息 + */ +$info = $ossClient->getLiveChannelInfo($bucket, 'test_rtmp_live'); +Common::println("bucket $bucket LiveChannelInfo:\n" . +"live channel info description: ". $info->getDescription() . "\n" . +"live channel info status: ". $info->getStatus() . "\n" . +"live channel info type: ". $info->getType() . "\n" . +"live channel info fragDuration: ". $info->getFragDuration() . "\n" . +"live channel info fragCount: ". $info->getFragCount() . "\n" . +"live channel info playListName: ". $info->getPlayListName() . "\n"); + +/** + 如果想查看一个频道历史推流记录,可以调用getLiveChannelHistory。目前最多可以看到10次推流的记录 + */ +$history = $ossClient->getLiveChannelHistory($bucket, "test_rtmp_live"); +if (count($history->getLiveRecordList()) != 0) +{ + foreach($history->getLiveRecordList() as $recordList) + { + Common::println("bucket $bucket liveChannelHistory:\n" . + "live channel history startTime: ". $recordList->getStartTime() . "\n" . + "live channel history endTime: ". $recordList->getEndTime() . "\n" . + "live channel history remoteAddr: ". $recordList->getRemoteAddr() . "\n"); + } +} + +/** + 对于正在推流的频道调用get_live_channel_stat可以获得流的状态信息。 + 如果频道正在推流,那么stat_result中的所有字段都有意义。 + 如果频道闲置或者处于“Disabled”状态,那么status为“Idle”或“Disabled”,其他字段无意义。 + */ +$status = $ossClient->getLiveChannelStatus($bucket, "test_rtmp_live"); +Common::println("bucket $bucket listLiveChannel:\n" . +"live channel status status: ". $status->getStatus() . "\n" . +"live channel status ConnectedTime: ". $status->getConnectedTime() . "\n" . +"live channel status VideoWidth: ". $status->getVideoWidth() . "\n" . +"live channel status VideoHeight: ". $status->getVideoHeight() . "\n" . +"live channel status VideoFrameRate: ". $status->getVideoFrameRate() . "\n" . +"live channel status VideoBandwidth: ". $status->getVideoBandwidth() . "\n" . +"live channel status VideoCodec: ". $status->getVideoCodec() . "\n" . +"live channel status AudioBandwidth: ". $status->getAudioBandwidth() . "\n" . +"live channel status AudioSampleRate: ". $status->getAudioSampleRate() . "\n" . +"live channel status AdioCodec: ". $status->getAudioCodec() . "\n"); + +/** + * 如果希望利用直播推流产生的ts文件生成一个点播列表,可以使用postVodPlaylist方法。 + * 指定起始时间为当前时间减去60秒,结束时间为当前时间,这意味着将生成一个长度为60秒的点播视频。 + * 播放列表指定为“vod_playlist.m3u8”,也就是说这个接口调用成功之后会在OSS上生成一个名叫“vod_playlist.m3u8”的播放列表文件。 + */ +$current_time = time(); +$ossClient->postVodPlaylist($bucket, + "test_rtmp_live", "vod_playlist.m3u8", + array('StartTime' => $current_time - 60, + 'EndTime' => $current_time) +); + +/** + * 如果一个直播频道已经不打算再使用了,那么可以调用delete_live_channel来删除频道。 + */ +$ossClient->deleteBucketLiveChannel($bucket, "test_rtmp_live"); diff --git a/vendor/aliyuncs/oss-sdk-php/samples/MultipartUpload.php b/vendor/aliyuncs/oss-sdk-php/samples/MultipartUpload.php new file mode 100644 index 000000000..e8d69a3ee --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/samples/MultipartUpload.php @@ -0,0 +1,182 @@ +multiuploadFile($bucket, "file.php", __FILE__, array()); +Common::println("local file " . __FILE__ . " is uploaded to the bucket $bucket, file.php"); + + +// 上传本地目录到bucket内的targetdir子目录中 +$ossClient->uploadDir($bucket, "targetdir", __DIR__); +Common::println("local dir " . __DIR__ . " is uploaded to the bucket $bucket, targetdir/"); + + +// 列出当前未完成的分片上传 +$listMultipartUploadInfo = $ossClient->listMultipartUploads($bucket, array()); + + +//******************************* 完整用法参考下面函数 **************************************************** + +multiuploadFile($ossClient, $bucket); +putObjectByRawApis($ossClient, $bucket); +uploadDir($ossClient, $bucket); +listMultipartUploads($ossClient, $bucket); + +/** + * 通过multipart上传文件 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function multiuploadFile($ossClient, $bucket) +{ + $object = "test/multipart-test.txt"; + $file = __FILE__; + $options = array(); + + try { + $ossClient->multiuploadFile($bucket, $object, $file, $options); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + +/** + * 使用基本的api分阶段进行分片上传 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @throws OssException + */ +function putObjectByRawApis($ossClient, $bucket) +{ + $object = "test/multipart-test.txt"; + /** + * step 1. 初始化一个分块上传事件, 也就是初始化上传Multipart, 获取upload id + */ + try { + $uploadId = $ossClient->initiateMultipartUpload($bucket, $object); + } catch (OssException $e) { + printf(__FUNCTION__ . ": initiateMultipartUpload FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": initiateMultipartUpload OK" . "\n"); + /* + * step 2. 上传分片 + */ + $partSize = 10 * 1024 * 1024; + $uploadFile = __FILE__; + $uploadFileSize = filesize($uploadFile); + $pieces = $ossClient->generateMultiuploadParts($uploadFileSize, $partSize); + $responseUploadPart = array(); + $uploadPosition = 0; + $isCheckMd5 = true; + foreach ($pieces as $i => $piece) { + $fromPos = $uploadPosition + (integer)$piece[$ossClient::OSS_SEEK_TO]; + $toPos = (integer)$piece[$ossClient::OSS_LENGTH] + $fromPos - 1; + $upOptions = array( + $ossClient::OSS_FILE_UPLOAD => $uploadFile, + $ossClient::OSS_PART_NUM => ($i + 1), + $ossClient::OSS_SEEK_TO => $fromPos, + $ossClient::OSS_LENGTH => $toPos - $fromPos + 1, + $ossClient::OSS_CHECK_MD5 => $isCheckMd5, + ); + if ($isCheckMd5) { + $contentMd5 = OssUtil::getMd5SumForFile($uploadFile, $fromPos, $toPos); + $upOptions[$ossClient::OSS_CONTENT_MD5] = $contentMd5; + } + //2. 将每一分片上传到OSS + try { + $responseUploadPart[] = $ossClient->uploadPart($bucket, $object, $uploadId, $upOptions); + } catch (OssException $e) { + printf(__FUNCTION__ . ": initiateMultipartUpload, uploadPart - part#{$i} FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + printf(__FUNCTION__ . ": initiateMultipartUpload, uploadPart - part#{$i} OK\n"); + } + $uploadParts = array(); + foreach ($responseUploadPart as $i => $eTag) { + $uploadParts[] = array( + 'PartNumber' => ($i + 1), + 'ETag' => $eTag, + ); + } + /** + * step 3. 完成上传 + */ + try { + $ossClient->completeMultipartUpload($bucket, $object, $uploadId, $uploadParts); + } catch (OssException $e) { + printf(__FUNCTION__ . ": completeMultipartUpload FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + printf(__FUNCTION__ . ": completeMultipartUpload OK\n"); +} + +/** + * 按照目录上传文件 + * + * @param OssClient $ossClient OssClient + * @param string $bucket 存储空间名称 + * + */ +function uploadDir($ossClient, $bucket) +{ + $localDirectory = "."; + $prefix = "samples/codes"; + try { + $ossClient->uploadDir($bucket, $prefix, $localDirectory); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + printf(__FUNCTION__ . ": completeMultipartUpload OK\n"); +} + +/** + * 获取当前未完成的分片上传列表 + * + * @param $ossClient OssClient + * @param $bucket string + */ +function listMultipartUploads($ossClient, $bucket) +{ + $options = array( + 'max-uploads' => 100, + 'key-marker' => '', + 'prefix' => '', + 'upload-id-marker' => '' + ); + try { + $listMultipartUploadInfo = $ossClient->listMultipartUploads($bucket, $options); + } catch (OssException $e) { + printf(__FUNCTION__ . ": listMultipartUploads FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + printf(__FUNCTION__ . ": listMultipartUploads OK\n"); + $listUploadInfo = $listMultipartUploadInfo->getUploads(); + var_dump($listUploadInfo); +} diff --git a/vendor/aliyuncs/oss-sdk-php/samples/Object.php b/vendor/aliyuncs/oss-sdk-php/samples/Object.php new file mode 100644 index 000000000..3bf024b02 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/samples/Object.php @@ -0,0 +1,517 @@ +putObject($bucket, "b.file", "hi, oss"); +Common::println("b.file is created"); +Common::println($result['x-oss-request-id']); +Common::println($result['etag']); +Common::println($result['content-md5']); +Common::println($result['body']); + +// 上传本地文件 +$result = $ossClient->uploadFile($bucket, "c.file", __FILE__); +Common::println("c.file is created"); +Common::println("b.file is created"); +Common::println($result['x-oss-request-id']); +Common::println($result['etag']); +Common::println($result['content-md5']); +Common::println($result['body']); + +// 下载object到本地变量 +$content = $ossClient->getObject($bucket, "b.file"); +Common::println("b.file is fetched, the content is: " . $content); + +// 给object添加symlink +$content = $ossClient->putSymlink($bucket, "test-symlink", "b.file"); +Common::println("test-symlink is created"); +Common::println($result['x-oss-request-id']); +Common::println($result['etag']); + +// 获取symlink +$content = $ossClient->getSymlink($bucket, "test-symlink"); +Common::println("test-symlink refer to : " . $content[OssClient::OSS_SYMLINK_TARGET]); + +// 下载object到本地文件 +$options = array( + OssClient::OSS_FILE_DOWNLOAD => "./c.file.localcopy", +); +$ossClient->getObject($bucket, "c.file", $options); +Common::println("b.file is fetched to the local file: c.file.localcopy"); +Common::println("b.file is created"); + +// 拷贝object +$result = $ossClient->copyObject($bucket, "c.file", $bucket, "c.file.copy"); +Common::println("lastModifiedTime: " . $result[0]); +Common::println("ETag: " . $result[1]); + +// 判断object是否存在 +$doesExist = $ossClient->doesObjectExist($bucket, "c.file.copy"); +Common::println("file c.file.copy exist? " . ($doesExist ? "yes" : "no")); + +// 删除object +$result = $ossClient->deleteObject($bucket, "c.file.copy"); +Common::println("c.file.copy is deleted"); +Common::println("b.file is created"); +Common::println($result['x-oss-request-id']); + +// 判断object是否存在 +$doesExist = $ossClient->doesObjectExist($bucket, "c.file.copy"); +Common::println("file c.file.copy exist? " . ($doesExist ? "yes" : "no")); + +// 批量删除object +$result = $ossClient->deleteObjects($bucket, array("b.file", "c.file")); +foreach($result as $object) + Common::println($object); + +sleep(2); +unlink("c.file.localcopy"); + +//******************************* 完整用法参考下面函数 **************************************************** + +listObjects($ossClient, $bucket); +listAllObjects($ossClient, $bucket); +createObjectDir($ossClient, $bucket); +putObject($ossClient, $bucket); +uploadFile($ossClient, $bucket); +getObject($ossClient, $bucket); +getObjectToLocalFile($ossClient, $bucket); +copyObject($ossClient, $bucket); +modifyMetaForObject($ossClient, $bucket); +getObjectMeta($ossClient, $bucket); +deleteObject($ossClient, $bucket); +deleteObjects($ossClient, $bucket); +doesObjectExist($ossClient, $bucket); +getSymlink($ossClient, $bucket); +putSymlink($ossClient, $bucket); +/** + * 创建虚拟目录 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function createObjectDir($ossClient, $bucket) +{ + try { + $ossClient->createObjectDir($bucket, "dir"); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + +/** + * 把本地变量的内容到文件 + * + * 简单上传,上传指定变量的内存值作为object的内容 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function putObject($ossClient, $bucket) +{ + $object = "oss-php-sdk-test/upload-test-object-name.txt"; + $content = file_get_contents(__FILE__); + $options = array(); + try { + $ossClient->putObject($bucket, $object, $content, $options); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + + +/** + * 上传指定的本地文件内容 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function uploadFile($ossClient, $bucket) +{ + $object = "oss-php-sdk-test/upload-test-object-name.txt"; + $filePath = __FILE__; + $options = array(); + + try { + $ossClient->uploadFile($bucket, $object, $filePath, $options); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + +/** + * 列出Bucket内所有目录和文件, 注意如果符合条件的文件数目超过设置的max-keys, 用户需要使用返回的nextMarker作为入参,通过 + * 循环调用ListObjects得到所有的文件,具体操作见下面的 listAllObjects 示例 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function listObjects($ossClient, $bucket) +{ + $prefix = 'oss-php-sdk-test/'; + $delimiter = '/'; + $nextMarker = ''; + $maxkeys = 1000; + $options = array( + 'delimiter' => $delimiter, + 'prefix' => $prefix, + 'max-keys' => $maxkeys, + 'marker' => $nextMarker, + ); + try { + $listObjectInfo = $ossClient->listObjects($bucket, $options); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); + $objectList = $listObjectInfo->getObjectList(); // 文件列表 + $prefixList = $listObjectInfo->getPrefixList(); // 目录列表 + if (!empty($objectList)) { + print("objectList:\n"); + foreach ($objectList as $objectInfo) { + print($objectInfo->getKey() . "\n"); + } + } + if (!empty($prefixList)) { + print("prefixList: \n"); + foreach ($prefixList as $prefixInfo) { + print($prefixInfo->getPrefix() . "\n"); + } + } +} + +/** + * 列出Bucket内所有目录和文件, 根据返回的nextMarker循环得到所有Objects + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function listAllObjects($ossClient, $bucket) +{ + //构造dir下的文件和虚拟目录 + for ($i = 0; $i < 100; $i += 1) { + $ossClient->putObject($bucket, "dir/obj" . strval($i), "hi"); + $ossClient->createObjectDir($bucket, "dir/obj" . strval($i)); + } + + $prefix = 'dir/'; + $delimiter = '/'; + $nextMarker = ''; + $maxkeys = 30; + + while (true) { + $options = array( + 'delimiter' => $delimiter, + 'prefix' => $prefix, + 'max-keys' => $maxkeys, + 'marker' => $nextMarker, + ); + var_dump($options); + try { + $listObjectInfo = $ossClient->listObjects($bucket, $options); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + // 得到nextMarker,从上一次listObjects读到的最后一个文件的下一个文件开始继续获取文件列表 + $nextMarker = $listObjectInfo->getNextMarker(); + $listObject = $listObjectInfo->getObjectList(); + $listPrefix = $listObjectInfo->getPrefixList(); + var_dump(count($listObject)); + var_dump(count($listPrefix)); + if ($nextMarker === '') { + break; + } + } +} + +/** + * 获取object的内容 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function getObject($ossClient, $bucket) +{ + $object = "oss-php-sdk-test/upload-test-object-name.txt"; + $options = array(); + try { + $content = $ossClient->getObject($bucket, $object, $options); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); + if (file_get_contents(__FILE__) === $content) { + print(__FUNCTION__ . ": FileContent checked OK" . "\n"); + } else { + print(__FUNCTION__ . ": FileContent checked FAILED" . "\n"); + } +} + +/** + * put symlink + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function putSymlink($ossClient, $bucket) +{ + $symlink = "test-samples-symlink"; + $object = "test-samples-object"; + try { + $ossClient->putObject($bucket, $object, 'test-content'); + $ossClient->putSymlink($bucket, $symlink, $object); + $content = $ossClient->getObject($bucket, $symlink); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); + if ($content == 'test-content') { + print(__FUNCTION__ . ": putSymlink checked OK" . "\n"); + } else { + print(__FUNCTION__ . ": putSymlink checked FAILED" . "\n"); + } +} + +/** + * 获取symlink + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function getSymlink($ossClient, $bucket) +{ + $symlink = "test-samples-symlink"; + $object = "test-samples-object"; + try { + $ossClient->putObject($bucket, $object, 'test-content'); + $ossClient->putSymlink($bucket, $symlink, $object); + $content = $ossClient->getSymlink($bucket, $symlink); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); + if ($content[OssClient::OSS_SYMLINK_TARGET]) { + print(__FUNCTION__ . ": getSymlink checked OK" . "\n"); + } else { + print(__FUNCTION__ . ": getSymlink checked FAILED" . "\n"); + } +} + +/** + * get_object_to_local_file + * + * 获取object + * 将object下载到指定的文件 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function getObjectToLocalFile($ossClient, $bucket) +{ + $object = "oss-php-sdk-test/upload-test-object-name.txt"; + $localfile = "upload-test-object-name.txt"; + $options = array( + OssClient::OSS_FILE_DOWNLOAD => $localfile, + ); + + try { + $ossClient->getObject($bucket, $object, $options); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK, please check localfile: 'upload-test-object-name.txt'" . "\n"); + if (file_get_contents($localfile) === file_get_contents(__FILE__)) { + print(__FUNCTION__ . ": FileContent checked OK" . "\n"); + } else { + print(__FUNCTION__ . ": FileContent checked FAILED" . "\n"); + } + if (file_exists($localfile)) { + unlink($localfile); + } +} + +/** + * 拷贝object + * 当目的object和源object完全相同时,表示修改object的meta信息 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function copyObject($ossClient, $bucket) +{ + $fromBucket = $bucket; + $fromObject = "oss-php-sdk-test/upload-test-object-name.txt"; + $toBucket = $bucket; + $toObject = $fromObject . '.copy'; + $options = array(); + + try { + $ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $options); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + +/** + * 修改Object Meta + * 利用copyObject接口的特性:当目的object和源object完全相同时,表示修改object的meta信息 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function modifyMetaForObject($ossClient, $bucket) +{ + $fromBucket = $bucket; + $fromObject = "oss-php-sdk-test/upload-test-object-name.txt"; + $toBucket = $bucket; + $toObject = $fromObject; + $copyOptions = array( + OssClient::OSS_HEADERS => array( + 'Cache-Control' => 'max-age=60', + 'Content-Disposition' => 'attachment; filename="xxxxxx"', + ), + ); + try { + $ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $copyOptions); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + +/** + * 获取object meta, 也就是getObjectMeta接口 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function getObjectMeta($ossClient, $bucket) +{ + $object = "oss-php-sdk-test/upload-test-object-name.txt"; + try { + $objectMeta = $ossClient->getObjectMeta($bucket, $object); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); + if (isset($objectMeta[strtolower('Content-Disposition')]) && + 'attachment; filename="xxxxxx"' === $objectMeta[strtolower('Content-Disposition')] + ) { + print(__FUNCTION__ . ": ObjectMeta checked OK" . "\n"); + } else { + print(__FUNCTION__ . ": ObjectMeta checked FAILED" . "\n"); + } +} + +/** + * 删除object + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function deleteObject($ossClient, $bucket) +{ + $object = "oss-php-sdk-test/upload-test-object-name.txt"; + try { + $ossClient->deleteObject($bucket, $object); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + + +/** + * 批量删除object + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function deleteObjects($ossClient, $bucket) +{ + $objects = array(); + $objects[] = "oss-php-sdk-test/upload-test-object-name.txt"; + $objects[] = "oss-php-sdk-test/upload-test-object-name.txt.copy"; + try { + $ossClient->deleteObjects($bucket, $objects); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + +/** + * 判断object是否存在 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + */ +function doesObjectExist($ossClient, $bucket) +{ + $object = "oss-php-sdk-test/upload-test-object-name.txt"; + try { + $exist = $ossClient->doesObjectExist($bucket, $object); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); + var_dump($exist); +} + diff --git a/vendor/aliyuncs/oss-sdk-php/samples/RunAll.php b/vendor/aliyuncs/oss-sdk-php/samples/RunAll.php new file mode 100644 index 000000000..a4d6d9b9c --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/samples/RunAll.php @@ -0,0 +1,13 @@ +uploadFile($bucket, "a.file", __FILE__); + +// 生成GetObject的签名url,用户可以使用这个url直接在浏览器下载 +$signedUrl = $ossClient->signUrl($bucket, "a.file", 3600); +Common::println($signedUrl); + +// 生成用于putObject的签名URL,用户可以直接用put方法使用这个url上传文件到 "a.file" +$signedUrl = $ossClient->signUrl($bucket, "a.file", "3600", "PUT"); +Common::println($signedUrl); + +// 生成从本地文件上传PutObject的签名url, 用户可以直接使用这个url把本地文件上传到 "a.file" +$signedUrl = $ossClient->signUrl($bucket, "a.file", 3600, "PUT", array('Content-Type' => 'txt')); +Common::println($signedUrl); + +//******************************* 完整用法参考下面函数 **************************************************** + +getSignedUrlForPuttingObject($ossClient, $bucket); +getSignedUrlForPuttingObjectFromFile($ossClient, $bucket); +getSignedUrlForGettingObject($ossClient, $bucket); + +/** + * 生成GetObject的签名url,主要用于私有权限下的读访问控制 + * + * @param $ossClient OssClient OssClient实例 + * @param $bucket string 存储空间名称 + * @return null + */ +function getSignedUrlForGettingObject($ossClient, $bucket) +{ + $object = "test/test-signature-test-upload-and-download.txt"; + $timeout = 3600; + try { + $signedUrl = $ossClient->signUrl($bucket, $object, $timeout); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": signedUrl: " . $signedUrl . "\n"); + /** + * 可以类似的代码来访问签名的URL,也可以输入到浏览器中去访问 + */ + $request = new RequestCore($signedUrl); + $request->set_method('GET'); + $request->add_header('Content-Type', ''); + $request->send_request(); + $res = new ResponseCore($request->get_response_header(), $request->get_response_body(), $request->get_response_code()); + if ($res->isOK()) { + print(__FUNCTION__ . ": OK" . "\n"); + } else { + print(__FUNCTION__ . ": FAILED" . "\n"); + }; +} + +/** + * 生成PutObject的签名url,主要用于私有权限下的写访问控制 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @return null + * @throws OssException + */ +function getSignedUrlForPuttingObject($ossClient, $bucket) +{ + $object = "test/test-signature-test-upload-and-download.txt"; + $timeout = 3600; + $options = NULL; + try { + $signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "PUT"); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": signedUrl: " . $signedUrl . "\n"); + $content = file_get_contents(__FILE__); + + $request = new RequestCore($signedUrl); + $request->set_method('PUT'); + $request->add_header('Content-Type', ''); + $request->add_header('Content-Length', strlen($content)); + $request->set_body($content); + $request->send_request(); + $res = new ResponseCore($request->get_response_header(), + $request->get_response_body(), $request->get_response_code()); + if ($res->isOK()) { + print(__FUNCTION__ . ": OK" . "\n"); + } else { + print(__FUNCTION__ . ": FAILED" . "\n"); + }; +} + +/** + * 生成PutObject的签名url,主要用于私有权限下的写访问控制, 用户可以利用生成的signedUrl + * 从文件上传文件 + * + * @param OssClient $ossClient OssClient实例 + * @param string $bucket 存储空间名称 + * @throws OssException + */ +function getSignedUrlForPuttingObjectFromFile($ossClient, $bucket) +{ + $file = __FILE__; + $object = "test/test-signature-test-upload-and-download.txt"; + $timeout = 3600; + $options = array('Content-Type' => 'txt'); + try { + $signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "PUT", $options); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": signedUrl: " . $signedUrl . "\n"); + + $request = new RequestCore($signedUrl); + $request->set_method('PUT'); + $request->add_header('Content-Type', 'txt'); + $request->set_read_file($file); + $request->set_read_stream_size(filesize($file)); + $request->send_request(); + $res = new ResponseCore($request->get_response_header(), + $request->get_response_body(), $request->get_response_code()); + if ($res->isOK()) { + print(__FUNCTION__ . ": OK" . "\n"); + } else { + print(__FUNCTION__ . ": FAILED" . "\n"); + }; +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Core/MimeTypes.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Core/MimeTypes.php new file mode 100644 index 000000000..e9b88ffa8 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Core/MimeTypes.php @@ -0,0 +1,262 @@ + 1) { + $ext = strtolower(end($parts)); + if (isset(self::$mime_types[$ext])) { + return self::$mime_types[$ext]; + } + } + + return null; + } + + private static $mime_types = array( + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', + 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', + 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', + 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', + 'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12', + 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12', + 'apk' => 'application/vnd.android.package-archive', + 'hqx' => 'application/mac-binhex40', + 'cpt' => 'application/mac-compactpro', + 'doc' => 'application/msword', + 'ogg' => 'audio/ogg', + 'pdf' => 'application/pdf', + 'rtf' => 'text/rtf', + 'mif' => 'application/vnd.mif', + 'xls' => 'application/vnd.ms-excel', + 'ppt' => 'application/vnd.ms-powerpoint', + 'odc' => 'application/vnd.oasis.opendocument.chart', + 'odb' => 'application/vnd.oasis.opendocument.database', + 'odf' => 'application/vnd.oasis.opendocument.formula', + 'odg' => 'application/vnd.oasis.opendocument.graphics', + 'otg' => 'application/vnd.oasis.opendocument.graphics-template', + 'odi' => 'application/vnd.oasis.opendocument.image', + 'odp' => 'application/vnd.oasis.opendocument.presentation', + 'otp' => 'application/vnd.oasis.opendocument.presentation-template', + 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', + 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template', + 'odt' => 'application/vnd.oasis.opendocument.text', + 'odm' => 'application/vnd.oasis.opendocument.text-master', + 'ott' => 'application/vnd.oasis.opendocument.text-template', + 'oth' => 'application/vnd.oasis.opendocument.text-web', + 'sxw' => 'application/vnd.sun.xml.writer', + 'stw' => 'application/vnd.sun.xml.writer.template', + 'sxc' => 'application/vnd.sun.xml.calc', + 'stc' => 'application/vnd.sun.xml.calc.template', + 'sxd' => 'application/vnd.sun.xml.draw', + 'std' => 'application/vnd.sun.xml.draw.template', + 'sxi' => 'application/vnd.sun.xml.impress', + 'sti' => 'application/vnd.sun.xml.impress.template', + 'sxg' => 'application/vnd.sun.xml.writer.global', + 'sxm' => 'application/vnd.sun.xml.math', + 'sis' => 'application/vnd.symbian.install', + 'wbxml' => 'application/vnd.wap.wbxml', + 'wmlc' => 'application/vnd.wap.wmlc', + 'wmlsc' => 'application/vnd.wap.wmlscriptc', + 'bcpio' => 'application/x-bcpio', + 'torrent' => 'application/x-bittorrent', + 'bz2' => 'application/x-bzip2', + 'vcd' => 'application/x-cdlink', + 'pgn' => 'application/x-chess-pgn', + 'cpio' => 'application/x-cpio', + 'csh' => 'application/x-csh', + 'dvi' => 'application/x-dvi', + 'spl' => 'application/x-futuresplash', + 'gtar' => 'application/x-gtar', + 'hdf' => 'application/x-hdf', + 'jar' => 'application/java-archive', + 'jnlp' => 'application/x-java-jnlp-file', + 'js' => 'application/javascript', + 'json' => 'application/json', + 'ksp' => 'application/x-kspread', + 'chrt' => 'application/x-kchart', + 'kil' => 'application/x-killustrator', + 'latex' => 'application/x-latex', + 'rpm' => 'application/x-rpm', + 'sh' => 'application/x-sh', + 'shar' => 'application/x-shar', + 'swf' => 'application/x-shockwave-flash', + 'sit' => 'application/x-stuffit', + 'sv4cpio' => 'application/x-sv4cpio', + 'sv4crc' => 'application/x-sv4crc', + 'tar' => 'application/x-tar', + 'tcl' => 'application/x-tcl', + 'tex' => 'application/x-tex', + 'man' => 'application/x-troff-man', + 'me' => 'application/x-troff-me', + 'ms' => 'application/x-troff-ms', + 'ustar' => 'application/x-ustar', + 'src' => 'application/x-wais-source', + 'zip' => 'application/zip', + 'm3u' => 'audio/x-mpegurl', + 'ra' => 'audio/x-pn-realaudio', + 'wav' => 'audio/x-wav', + 'wma' => 'audio/x-ms-wma', + 'wax' => 'audio/x-ms-wax', + 'pdb' => 'chemical/x-pdb', + 'xyz' => 'chemical/x-xyz', + 'bmp' => 'image/bmp', + 'gif' => 'image/gif', + 'ief' => 'image/ief', + 'png' => 'image/png', + 'wbmp' => 'image/vnd.wap.wbmp', + 'ras' => 'image/x-cmu-raster', + 'pnm' => 'image/x-portable-anymap', + 'pbm' => 'image/x-portable-bitmap', + 'pgm' => 'image/x-portable-graymap', + 'ppm' => 'image/x-portable-pixmap', + 'rgb' => 'image/x-rgb', + 'xbm' => 'image/x-xbitmap', + 'xpm' => 'image/x-xpixmap', + 'xwd' => 'image/x-xwindowdump', + 'css' => 'text/css', + 'rtx' => 'text/richtext', + 'tsv' => 'text/tab-separated-values', + 'jad' => 'text/vnd.sun.j2me.app-descriptor', + 'wml' => 'text/vnd.wap.wml', + 'wmls' => 'text/vnd.wap.wmlscript', + 'etx' => 'text/x-setext', + 'mxu' => 'video/vnd.mpegurl', + 'flv' => 'video/x-flv', + 'wm' => 'video/x-ms-wm', + 'wmv' => 'video/x-ms-wmv', + 'wmx' => 'video/x-ms-wmx', + 'wvx' => 'video/x-ms-wvx', + 'avi' => 'video/x-msvideo', + 'movie' => 'video/x-sgi-movie', + 'ice' => 'x-conference/x-cooltalk', + '3gp' => 'video/3gpp', + 'ai' => 'application/postscript', + 'aif' => 'audio/x-aiff', + 'aifc' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'asc' => 'text/plain', + 'atom' => 'application/atom+xml', + 'au' => 'audio/basic', + 'bin' => 'application/octet-stream', + 'cdf' => 'application/x-netcdf', + 'cgm' => 'image/cgm', + 'class' => 'application/octet-stream', + 'dcr' => 'application/x-director', + 'dif' => 'video/x-dv', + 'dir' => 'application/x-director', + 'djv' => 'image/vnd.djvu', + 'djvu' => 'image/vnd.djvu', + 'dll' => 'application/octet-stream', + 'dmg' => 'application/octet-stream', + 'dms' => 'application/octet-stream', + 'dtd' => 'application/xml-dtd', + 'dv' => 'video/x-dv', + 'dxr' => 'application/x-director', + 'eps' => 'application/postscript', + 'exe' => 'application/octet-stream', + 'ez' => 'application/andrew-inset', + 'gram' => 'application/srgs', + 'grxml' => 'application/srgs+xml', + 'gz' => 'application/x-gzip', + 'htm' => 'text/html', + 'html' => 'text/html', + 'ico' => 'image/x-icon', + 'ics' => 'text/calendar', + 'ifb' => 'text/calendar', + 'iges' => 'model/iges', + 'igs' => 'model/iges', + 'jp2' => 'image/jp2', + 'jpe' => 'image/jpeg', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'kar' => 'audio/midi', + 'lha' => 'application/octet-stream', + 'lzh' => 'application/octet-stream', + 'm4a' => 'audio/mp4a-latm', + 'm4p' => 'audio/mp4a-latm', + 'm4u' => 'video/vnd.mpegurl', + 'm4v' => 'video/x-m4v', + 'mac' => 'image/x-macpaint', + 'mathml' => 'application/mathml+xml', + 'mesh' => 'model/mesh', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mov' => 'video/quicktime', + 'mp2' => 'audio/mpeg', + 'mp3' => 'audio/mpeg', + 'mp4' => 'video/mp4', + 'mpe' => 'video/mpeg', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpga' => 'audio/mpeg', + 'msh' => 'model/mesh', + 'nc' => 'application/x-netcdf', + 'oda' => 'application/oda', + 'ogv' => 'video/ogv', + 'pct' => 'image/pict', + 'pic' => 'image/pict', + 'pict' => 'image/pict', + 'pnt' => 'image/x-macpaint', + 'pntg' => 'image/x-macpaint', + 'ps' => 'application/postscript', + 'qt' => 'video/quicktime', + 'qti' => 'image/x-quicktime', + 'qtif' => 'image/x-quicktime', + 'ram' => 'audio/x-pn-realaudio', + 'rdf' => 'application/rdf+xml', + 'rm' => 'application/vnd.rn-realmedia', + 'roff' => 'application/x-troff', + 'sgm' => 'text/sgml', + 'sgml' => 'text/sgml', + 'silo' => 'model/mesh', + 'skd' => 'application/x-koan', + 'skm' => 'application/x-koan', + 'skp' => 'application/x-koan', + 'skt' => 'application/x-koan', + 'smi' => 'application/smil', + 'smil' => 'application/smil', + 'snd' => 'audio/basic', + 'so' => 'application/octet-stream', + 'svg' => 'image/svg+xml', + 't' => 'application/x-troff', + 'texi' => 'application/x-texinfo', + 'texinfo' => 'application/x-texinfo', + 'tif' => 'image/tiff', + 'tiff' => 'image/tiff', + 'tr' => 'application/x-troff', + 'txt' => 'text/plain', + 'vrml' => 'model/vrml', + 'vxml' => 'application/voicexml+xml', + 'webm' => 'video/webm', + 'webp' => 'image/webp', + 'wrl' => 'model/vrml', + 'xht' => 'application/xhtml+xml', + 'xhtml' => 'application/xhtml+xml', + 'xml' => 'application/xml', + 'xsl' => 'application/xml', + 'xslt' => 'application/xslt+xml', + 'xul' => 'application/vnd.mozilla.xul+xml', + ); +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Core/OssException.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Core/OssException.php new file mode 100644 index 000000000..b0e9e8b0d --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Core/OssException.php @@ -0,0 +1,54 @@ +details = $details; + } else { + $message = $details; + parent::__construct($message); + } + } + + public function getHTTPStatus() + { + return isset($this->details['status']) ? $this->details['status'] : ''; + } + + public function getRequestId() + { + return isset($this->details['request-id']) ? $this->details['request-id'] : ''; + } + + public function getErrorCode() + { + return isset($this->details['code']) ? $this->details['code'] : ''; + } + + public function getErrorMessage() + { + return isset($this->details['message']) ? $this->details['message'] : ''; + } + + public function getDetails() + { + return isset($this->details['body']) ? $this->details['body'] : ''; + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Core/OssUtil.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Core/OssUtil.php new file mode 100644 index 000000000..6e5d4133d --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Core/OssUtil.php @@ -0,0 +1,461 @@ + $value) { + if (is_string($key) && !is_array($value)) { + $temp[] = rawurlencode($key) . '=' . rawurlencode($value); + } + } + return implode('&', $temp); + } + + /** + * 转义字符替换 + * + * @param string $subject + * @return string + */ + public static function sReplace($subject) + { + $search = array('<', '>', '&', '\'', '"'); + $replace = array('<', '>', '&', ''', '"'); + return str_replace($search, $replace, $subject); + } + + /** + * 检查是否是中文编码 + * + * @param $str + * @return int + */ + public static function chkChinese($str) + { + return preg_match('/[\x80-\xff]./', $str); + } + + /** + * 检测是否GB2312编码 + * + * @param string $str + * @return boolean false UTF-8编码 TRUE GB2312编码 + */ + public static function isGb2312($str) + { + for ($i = 0; $i < strlen($str); $i++) { + $v = ord($str[$i]); + if ($v > 127) { + if (($v >= 228) && ($v <= 233)) { + if (($i + 2) >= (strlen($str) - 1)) return true; // not enough characters + $v1 = ord($str[$i + 1]); + $v2 = ord($str[$i + 2]); + if (($v1 >= 128) && ($v1 <= 191) && ($v2 >= 128) && ($v2 <= 191)) + return false; + else + return true; + } + } + } + return false; + } + + /** + * 检测是否GBK编码 + * + * @param string $str + * @param boolean $gbk + * @return boolean + */ + public static function checkChar($str, $gbk = true) + { + for ($i = 0; $i < strlen($str); $i++) { + $v = ord($str[$i]); + if ($v > 127) { + if (($v >= 228) && ($v <= 233)) { + if (($i + 2) >= (strlen($str) - 1)) return $gbk ? true : FALSE; // not enough characters + $v1 = ord($str[$i + 1]); + $v2 = ord($str[$i + 2]); + if ($gbk) { + return (($v1 >= 128) && ($v1 <= 191) && ($v2 >= 128) && ($v2 <= 191)) ? FALSE : TRUE;//GBK + } else { + return (($v1 >= 128) && ($v1 <= 191) && ($v2 >= 128) && ($v2 <= 191)) ? TRUE : FALSE; + } + } + } + } + return $gbk ? TRUE : FALSE; + } + + /** + * 检验bucket名称是否合法 + * bucket的命名规范: + * 1. 只能包括小写字母,数字 + * 2. 必须以小写字母或者数字开头 + * 3. 长度必须在3-63字节之间 + * + * @param string $bucket Bucket名称 + * @return boolean + */ + public static function validateBucket($bucket) + { + $pattern = '/^[a-z0-9][a-z0-9-]{2,62}$/'; + if (!preg_match($pattern, $bucket)) { + return false; + } + return true; + } + + /** + * 检验object名称是否合法 + * object命名规范: + * 1. 规则长度必须在1-1023字节之间 + * 2. 使用UTF-8编码 + * 3. 不能以 "/" "\\"开头 + * + * @param string $object Object名称 + * @return boolean + */ + public static function validateObject($object) + { + $pattern = '/^.{1,1023}$/'; + if (empty($object) || !preg_match($pattern, $object) || + self::startsWith($object, '/') || self::startsWith($object, '\\') + ) { + return false; + } + return true; + } + + + /** + * 判断字符串$str是不是以$findMe开始 + * + * @param string $str + * @param string $findMe + * @return bool + */ + public static function startsWith($str, $findMe) + { + if (strpos($str, $findMe) === 0) { + return true; + } else { + return false; + } + } + + /** + * 生成createBucketXmlBody接口的xml消息 + * + * @param string $storageClass + * @return string + */ + public static function createBucketXmlBody($storageClass) + { + $xml = new \SimpleXMLElement(''); + $xml->addChild('StorageClass', $storageClass); + return $xml->asXML(); + } + + /** + * 检验$options + * + * @param array $options + * @throws OssException + * @return boolean + */ + public static function validateOptions($options) + { + //$options + if ($options != NULL && !is_array($options)) { + throw new OssException ($options . ':' . 'option must be array'); + } + } + + /** + * 检查上传文件的内容是否合法 + * + * @param $content string + * @throws OssException + */ + public static function validateContent($content) + { + if (empty($content)) { + throw new OssException("http body content is invalid"); + } + } + + /** + * 校验BUCKET/OBJECT/OBJECT GROUP是否为空 + * + * @param string $name + * @param string $errMsg + * @throws OssException + * @return void + */ + public static function throwOssExceptionWithMessageIfEmpty($name, $errMsg) + { + if (empty($name)) { + throw new OssException($errMsg); + } + } + + /** + * 仅供测试使用的接口,请勿使用 + * + * @param $filename + * @param $size + */ + public static function generateFile($filename, $size) + { + if (file_exists($filename) && $size == filesize($filename)) { + echo $filename . " already exists, no need to create again. "; + return; + } + $part_size = 1 * 1024 * 1024; + $fp = fopen($filename, "w"); + $characters = << 0) { + if ($size < $part_size) { + $write_size = $size; + } else { + $write_size = $part_size; + } + $size -= $write_size; + $a = $characters[rand(0, $charactersLength - 1)]; + $content = str_repeat($a, $write_size); + $flag = fwrite($fp, $content); + if (!$flag) { + echo "write to " . $filename . " failed.
    "; + break; + } + } + } else { + echo "open " . $filename . " failed.
    "; + } + fclose($fp); + } + + /** + * 得到文件的md5编码 + * + * @param $filename + * @param $from_pos + * @param $to_pos + * @return string + */ + public static function getMd5SumForFile($filename, $from_pos, $to_pos) + { + $content_md5 = ""; + if (($to_pos - $from_pos) > self::OSS_MAX_PART_SIZE) { + return $content_md5; + } + $filesize = filesize($filename); + if ($from_pos >= $filesize || $to_pos >= $filesize || $from_pos < 0 || $to_pos < 0) { + return $content_md5; + } + + $total_length = $to_pos - $from_pos + 1; + $buffer = 8192; + $left_length = $total_length; + if (!file_exists($filename)) { + return $content_md5; + } + + if (false === $fh = fopen($filename, 'rb')) { + return $content_md5; + } + + fseek($fh, $from_pos); + $data = ''; + while (!feof($fh)) { + if ($left_length >= $buffer) { + $read_length = $buffer; + } else { + $read_length = $left_length; + } + if ($read_length <= 0) { + break; + } else { + $data .= fread($fh, $read_length); + $left_length = $left_length - $read_length; + } + } + fclose($fh); + $content_md5 = base64_encode(md5($data, true)); + return $content_md5; + } + + /** + * 检测是否windows系统,因为windows系统默认编码为GBK + * + * @return bool + */ + public static function isWin() + { + return strtoupper(substr(PHP_OS, 0, 3)) == "WIN"; + } + + /** + * 主要是由于windows系统编码是gbk,遇到中文时候,如果不进行转换处理会出现找不到文件的问题 + * + * @param $file_path + * @return string + */ + public static function encodePath($file_path) + { + if (self::chkChinese($file_path) && self::isWin()) { + $file_path = iconv('utf-8', 'gbk', $file_path); + } + return $file_path; + } + + /** + * 判断用户输入的endpoint是否是 xxx.xxx.xxx.xxx:port 或者 xxx.xxx.xxx.xxx的ip格式 + * + * @param string $endpoint 需要做判断的endpoint + * @return boolean + */ + public static function isIPFormat($endpoint) + { + $ip_array = explode(":", $endpoint); + $hostname = $ip_array[0]; + $ret = filter_var($hostname, FILTER_VALIDATE_IP); + if (!$ret) { + return false; + } else { + return true; + } + } + + /** + * 生成DeleteMultiObjects接口的xml消息 + * + * @param string[] $objects + * @param bool $quiet + * @return string + */ + public static function createDeleteObjectsXmlBody($objects, $quiet) + { + $xml = new \SimpleXMLElement(''); + $xml->addChild('Quiet', $quiet); + foreach ($objects as $object) { + $sub_object = $xml->addChild('Object'); + $object = OssUtil::sReplace($object); + $sub_object->addChild('Key', $object); + } + return $xml->asXML(); + } + + /** + * 生成CompleteMultipartUpload接口的xml消息 + * + * @param array[] $listParts + * @return string + */ + public static function createCompleteMultipartUploadXmlBody($listParts) + { + $xml = new \SimpleXMLElement(''); + foreach ($listParts as $node) { + $part = $xml->addChild('Part'); + $part->addChild('PartNumber', $node['PartNumber']); + $part->addChild('ETag', $node['ETag']); + } + return $xml->asXML(); + } + + /** + * 读取目录 + * + * @param string $dir + * @param string $exclude + * @param bool $recursive + * @return string[] + */ + public static function readDir($dir, $exclude = ".|..|.svn|.git", $recursive = false) + { + $file_list_array = array(); + $base_path = $dir; + $exclude_array = explode("|", $exclude); + $exclude_array = array_unique(array_merge($exclude_array, array('.', '..'))); + + if ($recursive) { + foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($dir)) as $new_file) { + if ($new_file->isDir()) continue; + $object = str_replace($base_path, '', $new_file); + if (!in_array(strtolower($object), $exclude_array)) { + $object = ltrim($object, '/'); + if (is_file($new_file)) { + $key = md5($new_file . $object, false); + $file_list_array[$key] = array('path' => $new_file, 'file' => $object,); + } + } + } + } else if ($handle = opendir($dir)) { + while (false !== ($file = readdir($handle))) { + if (!in_array(strtolower($file), $exclude_array)) { + $new_file = $dir . '/' . $file; + $object = $file; + $object = ltrim($object, '/'); + if (is_file($new_file)) { + $key = md5($new_file . $object, false); + $file_list_array[$key] = array('path' => $new_file, 'file' => $object,); + } + } + } + closedir($handle); + } + return $file_list_array; + } + + /** + * Decode key based on the encoding type + * + * @param string $key + * @param string $encoding + * @return string + */ + public static function decodeKey($key, $encoding) + { + if ($encoding == "") { + return $key; + } + + if ($encoding == "url") { + return rawurldecode($key); + } else { + throw new OssException("Unrecognized encoding type: " . $encoding); + } + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Http/LICENSE b/vendor/aliyuncs/oss-sdk-php/src/OSS/Http/LICENSE new file mode 100644 index 000000000..49b38bd62 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Http/LICENSE @@ -0,0 +1,25 @@ +Copyright (c) 2006-2010 Ryan Parman, Foleeo Inc., and contributors. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are +permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, this list + of conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution. + + * Neither the name of Ryan Parman, Foleeo Inc. nor the names of its contributors may be used to + endorse or promote products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS +AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore.php new file mode 100644 index 000000000..06d0f8783 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore.php @@ -0,0 +1,896 @@ +). + */ + public $request_class = 'OSS\Http\RequestCore'; + + /** + * The default class to use for HTTP Responses (defaults to ). + */ + public $response_class = 'OSS\Http\ResponseCore'; + + /** + * Default useragent string to use. + */ + public $useragent = 'RequestCore/1.4.3'; + + /** + * File to read from while streaming up. + */ + public $read_file = null; + + /** + * The resource to read from while streaming up. + */ + public $read_stream = null; + + /** + * The size of the stream to read from. + */ + public $read_stream_size = null; + + /** + * The length already read from the stream. + */ + public $read_stream_read = 0; + + /** + * File to write to while streaming down. + */ + public $write_file = null; + + /** + * The resource to write to while streaming down. + */ + public $write_stream = null; + + /** + * Stores the intended starting seek position. + */ + public $seek_position = null; + + /** + * The location of the cacert.pem file to use. + */ + public $cacert_location = false; + + /** + * The state of SSL certificate verification. + */ + public $ssl_verification = true; + + /** + * The user-defined callback function to call when a stream is read from. + */ + public $registered_streaming_read_callback = null; + + /** + * The user-defined callback function to call when a stream is written to. + */ + public $registered_streaming_write_callback = null; + + /** + * 请求超时时间, 默认是5184000秒,6天 + * + * @var int + */ + public $timeout = 5184000; + + /** + * 连接超时时间,默认是10秒 + * + * @var int + */ + public $connect_timeout = 10; + + /*%******************************************************************************************%*/ + // CONSTANTS + + /** + * GET HTTP Method + */ + const HTTP_GET = 'GET'; + + /** + * POST HTTP Method + */ + const HTTP_POST = 'POST'; + + /** + * PUT HTTP Method + */ + const HTTP_PUT = 'PUT'; + + /** + * DELETE HTTP Method + */ + const HTTP_DELETE = 'DELETE'; + + /** + * HEAD HTTP Method + */ + const HTTP_HEAD = 'HEAD'; + + + /*%******************************************************************************************%*/ + // CONSTRUCTOR/DESTRUCTOR + + /** + * Constructs a new instance of this class. + * + * @param string $url (Optional) The URL to request or service endpoint to query. + * @param string $proxy (Optional) The faux-url to use for proxy settings. Takes the following format: `proxy://user:pass@hostname:port` + * @param array $helpers (Optional) An associative array of classnames to use for request, and response functionality. Gets passed in automatically by the calling class. + * @return $this A reference to the current instance. + */ + public function __construct($url = null, $proxy = null, $helpers = null) + { + // Set some default values. + $this->request_url = $url; + $this->method = self::HTTP_GET; + $this->request_headers = array(); + $this->request_body = ''; + + // Set a new Request class if one was set. + if (isset($helpers['request']) && !empty($helpers['request'])) { + $this->request_class = $helpers['request']; + } + + // Set a new Request class if one was set. + if (isset($helpers['response']) && !empty($helpers['response'])) { + $this->response_class = $helpers['response']; + } + + if ($proxy) { + $this->set_proxy($proxy); + } + + return $this; + } + + /** + * Destructs the instance. Closes opened file handles. + * + * @return $this A reference to the current instance. + */ + public function __destruct() + { + if (isset($this->read_file) && isset($this->read_stream)) { + fclose($this->read_stream); + } + + if (isset($this->write_file) && isset($this->write_stream)) { + fclose($this->write_stream); + } + + return $this; + } + + + /*%******************************************************************************************%*/ + // REQUEST METHODS + + /** + * Sets the credentials to use for authentication. + * + * @param string $user (Required) The username to authenticate with. + * @param string $pass (Required) The password to authenticate with. + * @return $this A reference to the current instance. + */ + public function set_credentials($user, $pass) + { + $this->username = $user; + $this->password = $pass; + return $this; + } + + /** + * Adds a custom HTTP header to the cURL request. + * + * @param string $key (Required) The custom HTTP header to set. + * @param mixed $value (Required) The value to assign to the custom HTTP header. + * @return $this A reference to the current instance. + */ + public function add_header($key, $value) + { + $this->request_headers[$key] = $value; + return $this; + } + + /** + * Removes an HTTP header from the cURL request. + * + * @param string $key (Required) The custom HTTP header to set. + * @return $this A reference to the current instance. + */ + public function remove_header($key) + { + if (isset($this->request_headers[$key])) { + unset($this->request_headers[$key]); + } + return $this; + } + + /** + * Set the method type for the request. + * + * @param string $method (Required) One of the following constants: , , , , . + * @return $this A reference to the current instance. + */ + public function set_method($method) + { + $this->method = strtoupper($method); + return $this; + } + + /** + * Sets a custom useragent string for the class. + * + * @param string $ua (Required) The useragent string to use. + * @return $this A reference to the current instance. + */ + public function set_useragent($ua) + { + $this->useragent = $ua; + return $this; + } + + /** + * Set the body to send in the request. + * + * @param string $body (Required) The textual content to send along in the body of the request. + * @return $this A reference to the current instance. + */ + public function set_body($body) + { + $this->request_body = $body; + return $this; + } + + /** + * Set the URL to make the request to. + * + * @param string $url (Required) The URL to make the request to. + * @return $this A reference to the current instance. + */ + public function set_request_url($url) + { + $this->request_url = $url; + return $this; + } + + /** + * Set additional CURLOPT settings. These will merge with the default settings, and override if + * there is a duplicate. + * + * @param array $curlopts (Optional) A set of key-value pairs that set `CURLOPT` options. These will merge with the existing CURLOPTs, and ones passed here will override the defaults. Keys should be the `CURLOPT_*` constants, not strings. + * @return $this A reference to the current instance. + */ + public function set_curlopts($curlopts) + { + $this->curlopts = $curlopts; + return $this; + } + + /** + * Sets the length in bytes to read from the stream while streaming up. + * + * @param integer $size (Required) The length in bytes to read from the stream. + * @return $this A reference to the current instance. + */ + public function set_read_stream_size($size) + { + $this->read_stream_size = $size; + + return $this; + } + + /** + * Sets the resource to read from while streaming up. Reads the stream from its current position until + * EOF or `$size` bytes have been read. If `$size` is not given it will be determined by and + * . + * + * @param resource $resource (Required) The readable resource to read from. + * @param integer $size (Optional) The size of the stream to read. + * @return $this A reference to the current instance. + */ + public function set_read_stream($resource, $size = null) + { + if (!isset($size) || $size < 0) { + $stats = fstat($resource); + + if ($stats && $stats['size'] >= 0) { + $position = ftell($resource); + + if ($position !== false && $position >= 0) { + $size = $stats['size'] - $position; + } + } + } + + $this->read_stream = $resource; + + return $this->set_read_stream_size($size); + } + + /** + * Sets the file to read from while streaming up. + * + * @param string $location (Required) The readable location to read from. + * @return $this A reference to the current instance. + */ + public function set_read_file($location) + { + $this->read_file = $location; + $read_file_handle = fopen($location, 'r'); + + return $this->set_read_stream($read_file_handle); + } + + /** + * Sets the resource to write to while streaming down. + * + * @param resource $resource (Required) The writeable resource to write to. + * @return $this A reference to the current instance. + */ + public function set_write_stream($resource) + { + $this->write_stream = $resource; + + return $this; + } + + /** + * Sets the file to write to while streaming down. + * + * @param string $location (Required) The writeable location to write to. + * @return $this A reference to the current instance. + */ + public function set_write_file($location) + { + $this->write_file = $location; + } + + /** + * Set the proxy to use for making requests. + * + * @param string $proxy (Required) The faux-url to use for proxy settings. Takes the following format: `proxy://user:pass@hostname:port` + * @return $this A reference to the current instance. + */ + public function set_proxy($proxy) + { + $proxy = parse_url($proxy); + $proxy['user'] = isset($proxy['user']) ? $proxy['user'] : null; + $proxy['pass'] = isset($proxy['pass']) ? $proxy['pass'] : null; + $proxy['port'] = isset($proxy['port']) ? $proxy['port'] : null; + $this->proxy = $proxy; + return $this; + } + + /** + * Set the intended starting seek position. + * + * @param integer $position (Required) The byte-position of the stream to begin reading from. + * @return $this A reference to the current instance. + */ + public function set_seek_position($position) + { + $this->seek_position = isset($position) ? (integer)$position : null; + + return $this; + } + + /** + * A callback function that is invoked by cURL for streaming up. + * + * @param resource $curl_handle (Required) The cURL handle for the request. + * @param resource $header_content (Required) The header callback result. + * @return headers from a stream. + */ + public function streaming_header_callback($curl_handle, $header_content) + { + $code = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE); + + if (isset($this->write_file) && intval($code) / 100 == 2 && !isset($this->write_file_handle)) + { + $this->write_file_handle = fopen($this->write_file, 'w'); + $this->set_write_stream($this->write_file_handle); + } + + $this->response_raw_headers .= $header_content; + return strlen($header_content); + } + + + /** + * Register a callback function to execute whenever a data stream is read from using + * . + * + * The user-defined callback function should accept three arguments: + * + *
      + *
    • $curl_handle - resource - Required - The cURL handle resource that represents the in-progress transfer.
    • + *
    • $file_handle - resource - Required - The file handle resource that represents the file on the local file system.
    • + *
    • $length - integer - Required - The length in kilobytes of the data chunk that was transferred.
    • + *
    + * + * @param string|array|function $callback (Required) The callback function is called by , so you can pass the following values:
      + *
    • The name of a global function to execute, passed as a string.
    • + *
    • A method to execute, passed as array('ClassName', 'MethodName').
    • + *
    • An anonymous function (PHP 5.3+).
    + * @return $this A reference to the current instance. + */ + public function register_streaming_read_callback($callback) + { + $this->registered_streaming_read_callback = $callback; + + return $this; + } + + /** + * Register a callback function to execute whenever a data stream is written to using + * . + * + * The user-defined callback function should accept two arguments: + * + *
      + *
    • $curl_handle - resource - Required - The cURL handle resource that represents the in-progress transfer.
    • + *
    • $length - integer - Required - The length in kilobytes of the data chunk that was transferred.
    • + *
    + * + * @param string|array|function $callback (Required) The callback function is called by , so you can pass the following values:
      + *
    • The name of a global function to execute, passed as a string.
    • + *
    • A method to execute, passed as array('ClassName', 'MethodName').
    • + *
    • An anonymous function (PHP 5.3+).
    + * @return $this A reference to the current instance. + */ + public function register_streaming_write_callback($callback) + { + $this->registered_streaming_write_callback = $callback; + + return $this; + } + + + /*%******************************************************************************************%*/ + // PREPARE, SEND, AND PROCESS REQUEST + + /** + * A callback function that is invoked by cURL for streaming up. + * + * @param resource $curl_handle (Required) The cURL handle for the request. + * @param resource $file_handle (Required) The open file handle resource. + * @param integer $length (Required) The maximum number of bytes to read. + * @return binary Binary data from a stream. + */ + public function streaming_read_callback($curl_handle, $file_handle, $length) + { + // Once we've sent as much as we're supposed to send... + if ($this->read_stream_read >= $this->read_stream_size) { + // Send EOF + return ''; + } + + // If we're at the beginning of an upload and need to seek... + if ($this->read_stream_read == 0 && isset($this->seek_position) && $this->seek_position !== ftell($this->read_stream)) { + if (fseek($this->read_stream, $this->seek_position) !== 0) { + throw new RequestCore_Exception('The stream does not support seeking and is either not at the requested position or the position is unknown.'); + } + } + + $read = fread($this->read_stream, min($this->read_stream_size - $this->read_stream_read, $length)); // Remaining upload data or cURL's requested chunk size + $this->read_stream_read += strlen($read); + + $out = $read === false ? '' : $read; + + // Execute callback function + if ($this->registered_streaming_read_callback) { + call_user_func($this->registered_streaming_read_callback, $curl_handle, $file_handle, $out); + } + + return $out; + } + + /** + * A callback function that is invoked by cURL for streaming down. + * + * @param resource $curl_handle (Required) The cURL handle for the request. + * @param binary $data (Required) The data to write. + * @return integer The number of bytes written. + */ + public function streaming_write_callback($curl_handle, $data) + { + $code = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE); + + if (intval($code) / 100 != 2) + { + $this->response_error_body .= $data; + return strlen($data); + } + + $length = strlen($data); + $written_total = 0; + $written_last = 0; + + while ($written_total < $length) { + $written_last = fwrite($this->write_stream, substr($data, $written_total)); + + if ($written_last === false) { + return $written_total; + } + + $written_total += $written_last; + } + + // Execute callback function + if ($this->registered_streaming_write_callback) { + call_user_func($this->registered_streaming_write_callback, $curl_handle, $written_total); + } + + return $written_total; + } + + /** + * Prepares and adds the details of the cURL request. This can be passed along to a + * function. + * + * @return resource The handle for the cURL object. + * + */ + public function prep_request() + { + $curl_handle = curl_init(); + + // Set default options. + curl_setopt($curl_handle, CURLOPT_URL, $this->request_url); + curl_setopt($curl_handle, CURLOPT_FILETIME, true); + curl_setopt($curl_handle, CURLOPT_FRESH_CONNECT, false); +// curl_setopt($curl_handle, CURLOPT_CLOSEPOLICY, CURLCLOSEPOLICY_LEAST_RECENTLY_USED); + curl_setopt($curl_handle, CURLOPT_MAXREDIRS, 5); + curl_setopt($curl_handle, CURLOPT_HEADER, true); + curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl_handle, CURLOPT_TIMEOUT, $this->timeout); + curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, $this->connect_timeout); + curl_setopt($curl_handle, CURLOPT_NOSIGNAL, true); + curl_setopt($curl_handle, CURLOPT_REFERER, $this->request_url); + curl_setopt($curl_handle, CURLOPT_USERAGENT, $this->useragent); + curl_setopt($curl_handle, CURLOPT_HEADERFUNCTION, array($this, 'streaming_header_callback')); + curl_setopt($curl_handle, CURLOPT_READFUNCTION, array($this, 'streaming_read_callback')); + + // Verification of the SSL cert + if ($this->ssl_verification) { + curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, true); + curl_setopt($curl_handle, CURLOPT_SSL_VERIFYHOST, 2); + } else { + curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($curl_handle, CURLOPT_SSL_VERIFYHOST, false); + } + + // chmod the file as 0755 + if ($this->cacert_location === true) { + curl_setopt($curl_handle, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem'); + } elseif (is_string($this->cacert_location)) { + curl_setopt($curl_handle, CURLOPT_CAINFO, $this->cacert_location); + } + + // Debug mode + if ($this->debug_mode) { + curl_setopt($curl_handle, CURLOPT_VERBOSE, true); + } + + // Handle open_basedir & safe mode + if (!ini_get('safe_mode') && !ini_get('open_basedir')) { + curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, true); + } + + // Enable a proxy connection if requested. + if ($this->proxy) { + + $host = $this->proxy['host']; + $host .= ($this->proxy['port']) ? ':' . $this->proxy['port'] : ''; + curl_setopt($curl_handle, CURLOPT_PROXY, $host); + + if (isset($this->proxy['user']) && isset($this->proxy['pass'])) { + curl_setopt($curl_handle, CURLOPT_PROXYUSERPWD, $this->proxy['user'] . ':' . $this->proxy['pass']); + } + } + + // Set credentials for HTTP Basic/Digest Authentication. + if ($this->username && $this->password) { + curl_setopt($curl_handle, CURLOPT_HTTPAUTH, CURLAUTH_ANY); + curl_setopt($curl_handle, CURLOPT_USERPWD, $this->username . ':' . $this->password); + } + + // Handle the encoding if we can. + if (extension_loaded('zlib')) { + curl_setopt($curl_handle, CURLOPT_ENCODING, ''); + } + + // Process custom headers + if (isset($this->request_headers) && count($this->request_headers)) { + $temp_headers = array(); + + foreach ($this->request_headers as $k => $v) { + $temp_headers[] = $k . ': ' . $v; + } + + curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $temp_headers); + } + + switch ($this->method) { + case self::HTTP_PUT: + //unset($this->read_stream); + curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'PUT'); + if (isset($this->read_stream)) { + if (!isset($this->read_stream_size) || $this->read_stream_size < 0) { + throw new RequestCore_Exception('The stream size for the streaming upload cannot be determined.'); + } + curl_setopt($curl_handle, CURLOPT_INFILESIZE, $this->read_stream_size); + curl_setopt($curl_handle, CURLOPT_UPLOAD, true); + } else { + curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $this->request_body); + } + break; + + case self::HTTP_POST: + curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST'); + if (isset($this->read_stream)) { + if (!isset($this->read_stream_size) || $this->read_stream_size < 0) { + throw new RequestCore_Exception('The stream size for the streaming upload cannot be determined.'); + } + curl_setopt($curl_handle, CURLOPT_INFILESIZE, $this->read_stream_size); + curl_setopt($curl_handle, CURLOPT_UPLOAD, true); + } else { + curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $this->request_body); + } + break; + + case self::HTTP_HEAD: + curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, self::HTTP_HEAD); + curl_setopt($curl_handle, CURLOPT_NOBODY, 1); + break; + + default: // Assumed GET + curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, $this->method); + if (isset($this->write_stream) || isset($this->write_file)) { + curl_setopt($curl_handle, CURLOPT_WRITEFUNCTION, array($this, 'streaming_write_callback')); + curl_setopt($curl_handle, CURLOPT_HEADER, false); + } else { + curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $this->request_body); + } + break; + } + + // Merge in the CURLOPTs + if (isset($this->curlopts) && sizeof($this->curlopts) > 0) { + foreach ($this->curlopts as $k => $v) { + curl_setopt($curl_handle, $k, $v); + } + } + + return $curl_handle; + } + + /** + * Take the post-processed cURL data and break it down into useful header/body/info chunks. Uses the + * data stored in the `curl_handle` and `response` properties unless replacement data is passed in via + * parameters. + * + * @param resource $curl_handle (Optional) The reference to the already executed cURL request. + * @param string $response (Optional) The actual response content itself that needs to be parsed. + * @return ResponseCore A object containing a parsed HTTP response. + */ + public function process_response($curl_handle = null, $response = null) + { + // Accept a custom one if it's passed. + if ($curl_handle && $response) { + $this->response = $response; + } + + // As long as this came back as a valid resource... + if (is_resource($curl_handle)) { + // Determine what's what. + $header_size = curl_getinfo($curl_handle, CURLINFO_HEADER_SIZE); + $this->response_headers = substr($this->response, 0, $header_size); + $this->response_body = substr($this->response, $header_size); + $this->response_code = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE); + $this->response_info = curl_getinfo($curl_handle); + + if (intval($this->response_code) / 100 != 2 && isset($this->write_file)) + { + $this->response_headers = $this->response_raw_headers; + $this->response_body = $this->response_error_body; + } + + // Parse out the headers + $this->response_headers = explode("\r\n\r\n", trim($this->response_headers)); + $this->response_headers = array_pop($this->response_headers); + $this->response_headers = explode("\r\n", $this->response_headers); + array_shift($this->response_headers); + + // Loop through and split up the headers. + $header_assoc = array(); + foreach ($this->response_headers as $header) { + $kv = explode(': ', $header); + $header_assoc[strtolower($kv[0])] = isset($kv[1]) ? $kv[1] : ''; + } + + // Reset the headers to the appropriate property. + $this->response_headers = $header_assoc; + $this->response_headers['info'] = $this->response_info; + $this->response_headers['info']['method'] = $this->method; + + if ($curl_handle && $response) { + return new ResponseCore($this->response_headers, $this->response_body, $this->response_code); + } + } + + // Return false + return false; + } + + /** + * Sends the request, calling necessary utility functions to update built-in properties. + * + * @param boolean $parse (Optional) Whether to parse the response with ResponseCore or not. + * @return string The resulting unparsed data from the request. + */ + public function send_request($parse = false) + { + set_time_limit(0); + + $curl_handle = $this->prep_request(); + $this->response = curl_exec($curl_handle); + + if ($this->response === false) { + throw new RequestCore_Exception('cURL resource: ' . (string)$curl_handle . '; cURL error: ' . curl_error($curl_handle) . ' (' . curl_errno($curl_handle) . ')'); + } + + $parsed_response = $this->process_response($curl_handle, $this->response); + + curl_close($curl_handle); + + if ($parse) { + return $parsed_response; + } + + return $this->response; + } + + /*%******************************************************************************************%*/ + // RESPONSE METHODS + + /** + * Get the HTTP response headers from the request. + * + * @param string $header (Optional) A specific header value to return. Defaults to all headers. + * @return string|array All or selected header values. + */ + public function get_response_header($header = null) + { + if ($header) { + return $this->response_headers[strtolower($header)]; + } + return $this->response_headers; + } + + /** + * Get the HTTP response body from the request. + * + * @return string The response body. + */ + public function get_response_body() + { + return $this->response_body; + } + + /** + * Get the HTTP response code from the request. + * + * @return string The HTTP response code. + */ + public function get_response_code() + { + return $this->response_code; + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore_Exception.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore_Exception.php new file mode 100644 index 000000000..cb4e83c65 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore_Exception.php @@ -0,0 +1,8 @@ +). + * @param string $body (Required) XML-formatted response from AWS. + * @param integer $status (Optional) HTTP response status code from the request. + * @return Mixed Contains an `header` property (HTTP headers as an associative array), a or `body` property, and an `status` code. + */ + public function __construct($header, $body, $status = null) + { + $this->header = $header; + $this->body = $body; + $this->status = $status; + + return $this; + } + + /** + * Did we receive the status code we expected? + * + * @param integer|array $codes (Optional) The status code(s) to expect. Pass an for a single acceptable value, or an of integers for multiple acceptable values. + * @return boolean Whether we received the expected status code or not. + */ + public function isOK($codes = array(200, 201, 204, 206)) + { + if (is_array($codes)) { + return in_array($this->status, $codes); + } + + return $this->status === $codes; + } +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/BucketInfo.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/BucketInfo.php new file mode 100644 index 000000000..9b89674f9 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/BucketInfo.php @@ -0,0 +1,78 @@ +location = $location; + $this->name = $name; + $this->createDate = $createDate; + } + + /** + * 得到bucket所在的region + * + * @return string + */ + public function getLocation() + { + return $this->location; + } + + /** + * 得到bucket的名称 + * + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * 得到bucket的创建时间 + * + * @return string + */ + public function getCreateDate() + { + return $this->createDate; + } + + /** + * bucket所在的region + * + * @var string + */ + private $location; + /** + * bucket的名称 + * + * @var string + */ + private $name; + + /** + * bucket的创建事件 + * + * @var string + */ + private $createDate; + +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/BucketListInfo.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/BucketListInfo.php new file mode 100644 index 000000000..910717f92 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/BucketListInfo.php @@ -0,0 +1,39 @@ +bucketList = $bucketList; + } + + /** + * 得到BucketInfo列表 + * + * @return BucketInfo[] + */ + public function getBucketList() + { + return $this->bucketList; + } + + /** + * BucketInfo信息列表 + * + * @var array + */ + private $bucketList = array(); +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CnameConfig.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CnameConfig.php new file mode 100644 index 000000000..f3597d2f0 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CnameConfig.php @@ -0,0 +1,99 @@ +cnameList = array(); + } + + /** + * @return array + * @example + * array(2) { + * [0]=> + * array(3) { + * ["Domain"]=> + * string(11) "www.foo.com" + * ["Status"]=> + * string(7) "enabled" + * ["LastModified"]=> + * string(8) "20150101" + * } + * [1]=> + * array(3) { + * ["Domain"]=> + * string(7) "bar.com" + * ["Status"]=> + * string(8) "disabled" + * ["LastModified"]=> + * string(8) "20160101" + * } + * } + */ + public function getCnames() + { + return $this->cnameList; + } + + + public function addCname($cname) + { + if (count($this->cnameList) >= self::OSS_MAX_RULES) { + throw new OssException( + "num of cname in the config exceeds self::OSS_MAX_RULES: " . strval(self::OSS_MAX_RULES)); + } + $this->cnameList[] = array('Domain' => $cname); + } + + public function parseFromXml($strXml) + { + $xml = simplexml_load_string($strXml); + if (!isset($xml->Cname)) return; + foreach ($xml->Cname as $entry) { + $cname = array(); + foreach ($entry as $key => $value) { + $cname[strval($key)] = strval($value); + } + $this->cnameList[] = $cname; + } + } + + public function serializeToXml() + { + $strXml = << + + +EOF; + $xml = new \SimpleXMLElement($strXml); + foreach ($this->cnameList as $cname) { + $node = $xml->addChild('Cname'); + foreach ($cname as $key => $value) { + $node->addChild($key, $value); + } + } + return $xml->asXML(); + } + + public function __toString() + { + return $this->serializeToXml(); + } + + const OSS_MAX_RULES = 10; + + private $cnameList = array(); +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CorsConfig.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CorsConfig.php new file mode 100644 index 000000000..c44c10a1a --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CorsConfig.php @@ -0,0 +1,113 @@ +rules = array(); + } + + /** + * 得到CorsRule列表 + * + * @return CorsRule[] + */ + public function getRules() + { + return $this->rules; + } + + + /** + * 添加一条CorsRule + * + * @param CorsRule $rule + * @throws OssException + */ + public function addRule($rule) + { + if (count($this->rules) >= self::OSS_MAX_RULES) { + throw new OssException("num of rules in the config exceeds self::OSS_MAX_RULES: " . strval(self::OSS_MAX_RULES)); + } + $this->rules[] = $rule; + } + + /** + * 从xml数据中解析出CorsConfig + * + * @param string $strXml + * @throws OssException + * @return null + */ + public function parseFromXml($strXml) + { + $xml = simplexml_load_string($strXml); + if (!isset($xml->CORSRule)) return; + foreach ($xml->CORSRule as $rule) { + $corsRule = new CorsRule(); + foreach ($rule as $key => $value) { + if ($key === self::OSS_CORS_ALLOWED_HEADER) { + $corsRule->addAllowedHeader(strval($value)); + } elseif ($key === self::OSS_CORS_ALLOWED_METHOD) { + $corsRule->addAllowedMethod(strval($value)); + } elseif ($key === self::OSS_CORS_ALLOWED_ORIGIN) { + $corsRule->addAllowedOrigin(strval($value)); + } elseif ($key === self::OSS_CORS_EXPOSE_HEADER) { + $corsRule->addExposeHeader(strval($value)); + } elseif ($key === self::OSS_CORS_MAX_AGE_SECONDS) { + $corsRule->setMaxAgeSeconds(strval($value)); + } + } + $this->addRule($corsRule); + } + return; + } + + /** + * 生成xml字符串 + * + * @return string + */ + public function serializeToXml() + { + $xml = new \SimpleXMLElement(''); + foreach ($this->rules as $rule) { + $xmlRule = $xml->addChild('CORSRule'); + $rule->appendToXml($xmlRule); + } + return $xml->asXML(); + } + + public function __toString() + { + return $this->serializeToXml(); + } + + const OSS_CORS_ALLOWED_ORIGIN = 'AllowedOrigin'; + const OSS_CORS_ALLOWED_METHOD = 'AllowedMethod'; + const OSS_CORS_ALLOWED_HEADER = 'AllowedHeader'; + const OSS_CORS_EXPOSE_HEADER = 'ExposeHeader'; + const OSS_CORS_MAX_AGE_SECONDS = 'MaxAgeSeconds'; + const OSS_MAX_RULES = 10; + + /** + * orsRule列表 + * + * @var CorsRule[] + */ + private $rules = array(); +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CorsRule.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CorsRule.php new file mode 100644 index 000000000..2cbe1c17b --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CorsRule.php @@ -0,0 +1,150 @@ +allowedOrigins[] = $allowedOrigin; + } + } + + /** + * Rule中增加一条allowedMethod + * + * @param string $allowedMethod + */ + public function addAllowedMethod($allowedMethod) + { + if (!empty($allowedMethod)) { + $this->allowedMethods[] = $allowedMethod; + } + } + + /** + * Rule中增加一条allowedHeader + * + * @param string $allowedHeader + */ + public function addAllowedHeader($allowedHeader) + { + if (!empty($allowedHeader)) { + $this->allowedHeaders[] = $allowedHeader; + } + } + + /** + * Rule中增加一条exposeHeader + * + * @param string $exposeHeader + */ + public function addExposeHeader($exposeHeader) + { + if (!empty($exposeHeader)) { + $this->exposeHeaders[] = $exposeHeader; + } + } + + /** + * @return int + */ + public function getMaxAgeSeconds() + { + return $this->maxAgeSeconds; + } + + /** + * @param int $maxAgeSeconds + */ + public function setMaxAgeSeconds($maxAgeSeconds) + { + $this->maxAgeSeconds = $maxAgeSeconds; + } + + /** + * 得到AllowedHeaders列表 + * + * @return string[] + */ + public function getAllowedHeaders() + { + return $this->allowedHeaders; + } + + /** + * 得到AllowedOrigins列表 + * + * @return string[] + */ + public function getAllowedOrigins() + { + return $this->allowedOrigins; + } + + /** + * 得到AllowedMethods列表 + * + * @return string[] + */ + public function getAllowedMethods() + { + return $this->allowedMethods; + } + + /** + * 得到ExposeHeaders列表 + * + * @return string[] + */ + public function getExposeHeaders() + { + return $this->exposeHeaders; + } + + /** + * 根据提供的xmlRule, 把this按照一定的规则插入到$xmlRule中 + * + * @param \SimpleXMLElement $xmlRule + * @throws OssException + */ + public function appendToXml(&$xmlRule) + { + if (!isset($this->maxAgeSeconds)) { + throw new OssException("maxAgeSeconds is not set in the Rule"); + } + foreach ($this->allowedOrigins as $allowedOrigin) { + $xmlRule->addChild(CorsConfig::OSS_CORS_ALLOWED_ORIGIN, $allowedOrigin); + } + foreach ($this->allowedMethods as $allowedMethod) { + $xmlRule->addChild(CorsConfig::OSS_CORS_ALLOWED_METHOD, $allowedMethod); + } + foreach ($this->allowedHeaders as $allowedHeader) { + $xmlRule->addChild(CorsConfig::OSS_CORS_ALLOWED_HEADER, $allowedHeader); + } + foreach ($this->exposeHeaders as $exposeHeader) { + $xmlRule->addChild(CorsConfig::OSS_CORS_EXPOSE_HEADER, $exposeHeader); + } + $xmlRule->addChild(CorsConfig::OSS_CORS_MAX_AGE_SECONDS, strval($this->maxAgeSeconds)); + } + + private $allowedHeaders = array(); + private $allowedOrigins = array(); + private $allowedMethods = array(); + private $exposeHeaders = array(); + private $maxAgeSeconds = null; +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelHistory.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelHistory.php new file mode 100644 index 000000000..6643444aa --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelHistory.php @@ -0,0 +1,34 @@ +liveRecordList; + } + + public function parseFromXml($strXml) + { + $xml = simplexml_load_string($strXml); + + if (isset($xml->LiveRecord)) { + foreach ($xml->LiveRecord as $record) { + $liveRecord = new LiveChannelHistory(); + $liveRecord->parseFromXmlNode($record); + $this->liveRecordList[] = $liveRecord; + } + } + } + + public function serializeToXml() + { + throw new OssException("Not implemented."); + } + + private $liveRecordList = array(); +} diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelInfo.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelInfo.php new file mode 100644 index 000000000..0b5edfc4d --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelInfo.php @@ -0,0 +1,68 @@ +description; + } + + public function getStatus() + { + return $this->status; + } + + public function getType() + { + return $this->type; + } + + public function getFragDuration() + { + return $this->fragDuration; + } + + public function getFragCount() + { + return $this->fragCount; + } + + public function getPlayListName() + { + return $this->playlistName; + } + + public function parseFromXml($strXml) + { + $xml = simplexml_load_string($strXml); + + $this->description = strval($xml->Description); + $this->status = strval($xml->Status); + + if (isset($xml->Target)) { + foreach ($xml->Target as $target) { + $this->type = strval($target->Type); + $this->fragDuration = strval($target->FragDuration); + $this->fragCount = strval($target->FragCount); + $this->playlistName = strval($target->PlaylistName); + } + } + } + + public function serializeToXml() + { + throw new OssException("Not implemented."); + } + + private $description; + private $status; + private $type; + private $fragDuration; + private $fragCount; + private $playlistName; +} diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelStatus.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelStatus.php new file mode 100644 index 000000000..2ee7a68b2 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelStatus.php @@ -0,0 +1,107 @@ +status; + } + + public function getConnectedTime() + { + return $this->connectedTime; + } + + public function getRemoteAddr() + { + return $this->remoteAddr; + } + + public function getVideoWidth() + { + return $this->videoWidth; + } + public function getVideoHeight() + { + return $this->videoHeight; + } + public function getVideoFrameRate() + { + return $this->videoFrameRate; + } + public function getVideoBandwidth() + { + return $this->videoBandwidth; + } + public function getVideoCodec() + { + return $this->videoCodec; + } + + public function getAudioBandwidth() + { + return $this->audioBandwidth; + } + public function getAudioSampleRate() + { + return $this->audioSampleRate; + } + public function getAudioCodec() + { + return $this->audioCodec; + } + + + public function parseFromXml($strXml) + { + $xml = simplexml_load_string($strXml); + $this->status = strval($xml->Status); + $this->connectedTime = strval($xml->ConnectedTime); + $this->remoteAddr = strval($xml->RemoteAddr); + + if (isset($xml->Video)) { + foreach ($xml->Video as $video) { + $this->videoWidth = intval($video->Width); + $this->videoHeight = intval($video->Height); + $this->videoFrameRate = intval($video->FrameRate); + $this->videoBandwidth = intval($video->Bandwidth); + $this->videoCodec = strval($video->Codec); + } + } + + if (isset($xml->Video)) { + foreach ($xml->Audio as $audio) { + $this->audioBandwidth = intval($audio->Bandwidth); + $this->audioSampleRate = intval($audio->SampleRate); + $this->audioCodec = strval($audio->Codec); + } + } + + } + + public function serializeToXml() + { + throw new OssException("Not implemented."); + } + + private $status; + private $connectedTime; + private $remoteAddr; + + private $videoWidth; + private $videoHeight; + private $videoFrameRate; + private $videoBandwidth; + private $videoCodec; + + private $audioBandwidth; + private $audioSampleRate; + private $audioCodec; + + +} diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleAction.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleAction.php new file mode 100644 index 000000000..5abd825d0 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleAction.php @@ -0,0 +1,88 @@ +action = $action; + $this->timeSpec = $timeSpec; + $this->timeValue = $timeValue; + } + + /** + * @return LifecycleAction + */ + public function getAction() + { + return $this->action; + } + + /** + * @param string $action + */ + public function setAction($action) + { + $this->action = $action; + } + + /** + * @return string + */ + public function getTimeSpec() + { + return $this->timeSpec; + } + + /** + * @param string $timeSpec + */ + public function setTimeSpec($timeSpec) + { + $this->timeSpec = $timeSpec; + } + + /** + * @return string + */ + public function getTimeValue() + { + return $this->timeValue; + } + + /** + * @param string $timeValue + */ + public function setTimeValue($timeValue) + { + $this->timeValue = $timeValue; + } + + /** + * appendToXml 把actions插入到xml中 + * + * @param \SimpleXMLElement $xmlRule + */ + public function appendToXml(&$xmlRule) + { + $xmlAction = $xmlRule->addChild($this->action); + $xmlAction->addChild($this->timeSpec, $this->timeValue); + } + + private $action; + private $timeSpec; + private $timeValue; + +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleConfig.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleConfig.php new file mode 100644 index 000000000..fc4f5755a --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleConfig.php @@ -0,0 +1,107 @@ +rules = array(); + $xml = simplexml_load_string($strXml); + if (!isset($xml->Rule)) return; + $this->rules = array(); + foreach ($xml->Rule as $rule) { + $id = strval($rule->ID); + $prefix = strval($rule->Prefix); + $status = strval($rule->Status); + $actions = array(); + foreach ($rule as $key => $value) { + if ($key === 'ID' || $key === 'Prefix' || $key === 'Status') continue; + $action = $key; + $timeSpec = null; + $timeValue = null; + foreach ($value as $timeSpecKey => $timeValueValue) { + $timeSpec = $timeSpecKey; + $timeValue = strval($timeValueValue); + } + $actions[] = new LifecycleAction($action, $timeSpec, $timeValue); + } + $this->rules[] = new LifecycleRule($id, $prefix, $status, $actions); + } + return; + } + + + /** + * 生成xml字符串 + * + * @return string + */ + public function serializeToXml() + { + + $xml = new \SimpleXMLElement(''); + foreach ($this->rules as $rule) { + $xmlRule = $xml->addChild('Rule'); + $rule->appendToXml($xmlRule); + } + return $xml->asXML(); + } + + /** + * + * 添加LifecycleRule + * + * @param LifecycleRule $lifecycleRule + * @throws OssException + */ + public function addRule($lifecycleRule) + { + if (!isset($lifecycleRule)) { + throw new OssException("lifecycleRule is null"); + } + $this->rules[] = $lifecycleRule; + } + + /** + * 将配置转换成字符串,便于用户查看 + * + * @return string + */ + public function __toString() + { + return $this->serializeToXml(); + } + + /** + * 得到所有的生命周期规则 + * + * @return LifecycleRule[] + */ + public function getRules() + { + return $this->rules; + } + + /** + * @var LifecycleRule[] + */ + private $rules; +} + + diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleRule.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleRule.php new file mode 100644 index 000000000..ec615b9af --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleRule.php @@ -0,0 +1,126 @@ +id; + } + + /** + * @param string $id 规则ID + */ + public function setId($id) + { + $this->id = $id; + } + + /** + * 得到文件前缀 + * + * @return string + */ + public function getPrefix() + { + return $this->prefix; + } + + /** + * 设置文件前缀 + * + * @param string $prefix 文件前缀 + */ + public function setPrefix($prefix) + { + $this->prefix = $prefix; + } + + /** + * Lifecycle规则的状态 + * + * @return string + */ + public function getStatus() + { + return $this->status; + } + + /** + * 设置Lifecycle规则状态 + * + * @param string $status + */ + public function setStatus($status) + { + $this->status = $status; + } + + /** + * + * @return LifecycleAction[] + */ + public function getActions() + { + return $this->actions; + } + + /** + * @param LifecycleAction[] $actions + */ + public function setActions($actions) + { + $this->actions = $actions; + } + + + /** + * LifecycleRule constructor. + * + * @param string $id 规则ID + * @param string $prefix 文件前缀 + * @param string $status 规则状态,可选[self::LIFECYCLE_STATUS_ENABLED, self::LIFECYCLE_STATUS_DISABLED] + * @param LifecycleAction[] $actions + */ + public function __construct($id, $prefix, $status, $actions) + { + $this->id = $id; + $this->prefix = $prefix; + $this->status = $status; + $this->actions = $actions; + } + + /** + * @param \SimpleXMLElement $xmlRule + */ + public function appendToXml(&$xmlRule) + { + $xmlRule->addChild('ID', $this->id); + $xmlRule->addChild('Prefix', $this->prefix); + $xmlRule->addChild('Status', $this->status); + foreach ($this->actions as $action) { + $action->appendToXml($xmlRule); + } + } + + private $id; + private $prefix; + private $status; + private $actions = array(); + + const LIFECYCLE_STATUS_ENABLED = 'Enabled'; + const LIFECYCLE_STATUS_DISABLED = 'Disabled'; +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ListMultipartUploadInfo.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ListMultipartUploadInfo.php new file mode 100644 index 000000000..105d005b2 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ListMultipartUploadInfo.php @@ -0,0 +1,134 @@ +bucket = $bucket; + $this->keyMarker = $keyMarker; + $this->uploadIdMarker = $uploadIdMarker; + $this->nextKeyMarker = $nextKeyMarker; + $this->nextUploadIdMarker = $nextUploadIdMarker; + $this->delimiter = $delimiter; + $this->prefix = $prefix; + $this->maxUploads = $maxUploads; + $this->isTruncated = $isTruncated; + $this->uploads = $uploads; + } + + /** + * 得到bucket名称 + * + * @return string + */ + public function getBucket() + { + return $this->bucket; + } + + /** + * @return string + */ + public function getKeyMarker() + { + return $this->keyMarker; + } + + /** + * + * @return string + */ + public function getUploadIdMarker() + { + return $this->uploadIdMarker; + } + + /** + * @return string + */ + public function getNextKeyMarker() + { + return $this->nextKeyMarker; + } + + /** + * @return string + */ + public function getNextUploadIdMarker() + { + return $this->nextUploadIdMarker; + } + + /** + * @return string + */ + public function getDelimiter() + { + return $this->delimiter; + } + + /** + * @return string + */ + public function getPrefix() + { + return $this->prefix; + } + + /** + * @return int + */ + public function getMaxUploads() + { + return $this->maxUploads; + } + + /** + * @return string + */ + public function getIsTruncated() + { + return $this->isTruncated; + } + + /** + * @return UploadInfo[] + */ + public function getUploads() + { + return $this->uploads; + } + + private $bucket = ""; + private $keyMarker = ""; + private $uploadIdMarker = ""; + private $nextKeyMarker = ""; + private $nextUploadIdMarker = ""; + private $delimiter = ""; + private $prefix = ""; + private $maxUploads = 0; + private $isTruncated = "false"; + private $uploads = array(); +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ListPartsInfo.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ListPartsInfo.php new file mode 100644 index 000000000..f1d10ee9e --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ListPartsInfo.php @@ -0,0 +1,97 @@ +bucket = $bucket; + $this->key = $key; + $this->uploadId = $uploadId; + $this->nextPartNumberMarker = $nextPartNumberMarker; + $this->maxParts = $maxParts; + $this->isTruncated = $isTruncated; + $this->listPart = $listPart; + } + + /** + * @return string + */ + public function getBucket() + { + return $this->bucket; + } + + /** + * @return string + */ + public function getKey() + { + return $this->key; + } + + /** + * @return string + */ + public function getUploadId() + { + return $this->uploadId; + } + + /** + * @return int + */ + public function getNextPartNumberMarker() + { + return $this->nextPartNumberMarker; + } + + /** + * @return int + */ + public function getMaxParts() + { + return $this->maxParts; + } + + /** + * @return string + */ + public function getIsTruncated() + { + return $this->isTruncated; + } + + /** + * @return array + */ + public function getListPart() + { + return $this->listPart; + } + + private $bucket = ""; + private $key = ""; + private $uploadId = ""; + private $nextPartNumberMarker = 0; + private $maxParts = 0; + private $isTruncated = ""; + private $listPart = array(); +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelConfig.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelConfig.php new file mode 100644 index 000000000..dadedc911 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelConfig.php @@ -0,0 +1,121 @@ +description = $option['description']; + } + if (isset($option['status'])) { + $this->status = $option['status']; + } + if (isset($option['type'])) { + $this->type = $option['type']; + } + if (isset($option['fragDuration'])) { + $this->fragDuration = $option['fragDuration']; + } + if (isset($option['fragCount'])) { + $this->fragCount = $option['fragCount']; + } + if (isset($option['playListName'])) { + $this->playListName = $option['playListName']; + } + } + + public function getDescription() + { + return $this->description; + } + + public function getStatus() + { + return $this->status; + } + + public function getType() + { + return $this->type; + } + + public function getFragDuration() + { + return $this->fragDuration; + } + + public function getFragCount() + { + return $this->fragCount; + } + + public function getPlayListName() + { + return $this->playListName; + } + + public function parseFromXml($strXml) + { + $xml = simplexml_load_string($strXml); + $this->description = strval($xml->Description); + $this->status = strval($xml->Status); + $target = $xml->Target; + $this->type = strval($target->Type); + $this->fragDuration = intval($target->FragDuration); + $this->fragCount = intval($target->FragCount); + $this->playListName = strval($target->PlayListName); + } + + public function serializeToXml() + { + $strXml = << + + +EOF; + $xml = new \SimpleXMLElement($strXml); + if (isset($this->description)) { + $xml->addChild('Description', $this->description); + } + + if (isset($this->status)) { + $xml->addChild('Status', $this->status); + } + + $node = $xml->addChild('Target'); + $node->addChild('Type', $this->type); + + if (isset($this->fragDuration)) { + $node->addChild('FragDuration', $this->fragDuration); + } + + if (isset($this->fragCount)) { + $node->addChild('FragCount', $this->fragCount); + } + + if (isset($this->playListName)) { + $node->addChild('PlayListName', $this->playListName); + } + + return $xml->asXML(); + } + + public function __toString() + { + return $this->serializeToXml(); + } + + private $description; + private $status = "enabled"; + private $type; + private $fragDuration = 5; + private $fragCount = 3; + private $playListName = "playlist.m3u8"; +} diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelHistory.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelHistory.php new file mode 100644 index 000000000..1c1fd4dbc --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelHistory.php @@ -0,0 +1,59 @@ +startTime; + } + + public function getEndTime() + { + return $this->endTime; + } + + public function getRemoteAddr() + { + return $this->remoteAddr; + } + + public function parseFromXmlNode($xml) + { + if (isset($xml->StartTime)) { + $this->startTime = strval($xml->StartTime); + } + + if (isset($xml->EndTime)) { + $this->endTime = strval($xml->EndTime); + } + + if (isset($xml->RemoteAddr)) { + $this->remoteAddr = strval($xml->RemoteAddr); + } + } + + public function parseFromXml($strXml) + { + $xml = simplexml_load_string($strXml); + $this->parseFromXmlNode($xml); + } + + public function serializeToXml() + { + throw new OssException("Not implemented."); + } + + private $startTime; + private $endTime; + private $remoteAddr; +} diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelInfo.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelInfo.php new file mode 100644 index 000000000..c63ec54d6 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelInfo.php @@ -0,0 +1,107 @@ +name = $name; + $this->description = $description; + $this->publishUrls = array(); + $this->playUrls = array(); + } + + public function getName() + { + return $this->name; + } + + public function setName($name) + { + $this->name = $name; + } + + public function getPublishUrls() + { + return $this->publishUrls; + } + + public function getPlayUrls() + { + return $this->playUrls; + } + + public function getStatus() + { + return $this->status; + } + + public function getLastModified() + { + return $this->lastModified; + } + + public function getDescription() + { + return $this->description; + } + + public function setDescription($description) + { + $this->description = $description; + } + + public function parseFromXmlNode($xml) + { + if (isset($xml->Name)) { + $this->name = strval($xml->Name); + } + + if (isset($xml->Description)) { + $this->description = strval($xml->Description); + } + + if (isset($xml->Status)) { + $this->status = strval($xml->Status); + } + + if (isset($xml->LastModified)) { + $this->lastModified = strval($xml->LastModified); + } + + if (isset($xml->PublishUrls)) { + foreach ($xml->PublishUrls as $url) { + $this->publishUrls[] = strval($url->Url); + } + } + + if (isset($xml->PlayUrls)) { + foreach ($xml->PlayUrls as $url) { + $this->playUrls[] = strval($url->Url); + } + } + } + + public function parseFromXml($strXml) + { + $xml = simplexml_load_string($strXml); + $this->parseFromXmlNode($xml); + } + + public function serializeToXml() + { + throw new OssException("Not implemented."); + } + + private $name; + private $description; + private $publishUrls; + private $playUrls; + private $status; + private $lastModified; +} diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelListInfo.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelListInfo.php new file mode 100644 index 000000000..bb5093aa8 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelListInfo.php @@ -0,0 +1,107 @@ +bucket; + } + + public function setBucketName($name) + { + $this->bucket = $name; + } + + /** + * @return string + */ + public function getPrefix() + { + return $this->prefix; + } + + /** + * @return string + */ + public function getMarker() + { + return $this->marker; + } + + /** + * @return int + */ + public function getMaxKeys() + { + return $this->maxKeys; + } + + /** + * @return mixed + */ + public function getIsTruncated() + { + return $this->isTruncated; + } + + /** + * @return LiveChannelInfo[] + */ + public function getChannelList() + { + return $this->channelList; + } + + /** + * @return string + */ + public function getNextMarker() + { + return $this->nextMarker; + } + + public function parseFromXml($strXml) + { + $xml = simplexml_load_string($strXml); + + $this->prefix = strval($xml->Prefix); + $this->marker = strval($xml->Marker); + $this->maxKeys = intval($xml->MaxKeys); + $this->isTruncated = (strval($xml->IsTruncated) == 'true'); + $this->nextMarker = strval($xml->NextMarker); + + if (isset($xml->LiveChannel)) { + foreach ($xml->LiveChannel as $chan) { + $channel = new LiveChannelInfo(); + $channel->parseFromXmlNode($chan); + $this->channelList[] = $channel; + } + } + } + + public function serializeToXml() + { + throw new OssException("Not implemented."); + } + + private $bucket = ''; + private $prefix = ''; + private $marker = ''; + private $nextMarker = ''; + private $maxKeys = 100; + private $isTruncated = 'false'; + private $channelList = array(); +} diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LoggingConfig.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LoggingConfig.php new file mode 100644 index 000000000..978421a25 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LoggingConfig.php @@ -0,0 +1,86 @@ +targetBucket = $targetBucket; + $this->targetPrefix = $targetPrefix; + } + + /** + * @param $strXml + * @return null + */ + public function parseFromXml($strXml) + { + $xml = simplexml_load_string($strXml); + if (!isset($xml->LoggingEnabled)) return; + foreach ($xml->LoggingEnabled as $status) { + foreach ($status as $key => $value) { + if ($key === 'TargetBucket') { + $this->targetBucket = strval($value); + } elseif ($key === 'TargetPrefix') { + $this->targetPrefix = strval($value); + } + } + break; + } + } + + /** + * 序列化成xml字符串 + * + */ + public function serializeToXml() + { + $xml = new \SimpleXMLElement(''); + if (isset($this->targetBucket) && isset($this->targetPrefix)) { + $loggingEnabled = $xml->addChild('LoggingEnabled'); + $loggingEnabled->addChild('TargetBucket', $this->targetBucket); + $loggingEnabled->addChild('TargetPrefix', $this->targetPrefix); + } + return $xml->asXML(); + } + + /** + * @return string + */ + public function __toString() + { + return $this->serializeToXml(); + } + + /** + * @return string + */ + public function getTargetBucket() + { + return $this->targetBucket; + } + + /** + * @return string + */ + public function getTargetPrefix() + { + return $this->targetPrefix; + } + + private $targetBucket = ""; + private $targetPrefix = ""; + +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectInfo.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectInfo.php new file mode 100644 index 000000000..2ae6c99bd --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectInfo.php @@ -0,0 +1,93 @@ +key = $key; + $this->lastModified = $lastModified; + $this->eTag = $eTag; + $this->type = $type; + $this->size = $size; + $this->storageClass = $storageClass; + } + + /** + * @return string + */ + public function getKey() + { + return $this->key; + } + + /** + * @return string + */ + public function getLastModified() + { + return $this->lastModified; + } + + /** + * @return string + */ + public function getETag() + { + return $this->eTag; + } + + /** + * @return string + */ + public function getType() + { + return $this->type; + } + + /** + * @return int + */ + public function getSize() + { + return $this->size; + } + + /** + * @return string + */ + public function getStorageClass() + { + return $this->storageClass; + } + + private $key = ""; + private $lastModified = ""; + private $eTag = ""; + private $type = ""; + private $size = 0; + private $storageClass = ""; +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectListInfo.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectListInfo.php new file mode 100644 index 000000000..dbe7c7a76 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectListInfo.php @@ -0,0 +1,126 @@ +bucketName = $bucketName; + $this->prefix = $prefix; + $this->marker = $marker; + $this->nextMarker = $nextMarker; + $this->maxKeys = $maxKeys; + $this->delimiter = $delimiter; + $this->isTruncated = $isTruncated; + $this->objectList = $objectList; + $this->prefixList = $prefixList; + } + + /** + * @return string + */ + public function getBucketName() + { + return $this->bucketName; + } + + /** + * @return string + */ + public function getPrefix() + { + return $this->prefix; + } + + /** + * @return string + */ + public function getMarker() + { + return $this->marker; + } + + /** + * @return int + */ + public function getMaxKeys() + { + return $this->maxKeys; + } + + /** + * @return string + */ + public function getDelimiter() + { + return $this->delimiter; + } + + /** + * @return mixed + */ + public function getIsTruncated() + { + return $this->isTruncated; + } + + /** + * 返回ListObjects接口返回数据中的ObjectInfo列表 + * + * @return ObjectInfo[] + */ + public function getObjectList() + { + return $this->objectList; + } + + /** + * 返回ListObjects接口返回数据中的PrefixInfo列表 + * + * @return PrefixInfo[] + */ + public function getPrefixList() + { + return $this->prefixList; + } + + /** + * @return string + */ + public function getNextMarker() + { + return $this->nextMarker; + } + + private $bucketName = ""; + private $prefix = ""; + private $marker = ""; + private $nextMarker = ""; + private $maxKeys = 0; + private $delimiter = ""; + private $isTruncated = null; + private $objectList = array(); + private $prefixList = array(); +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/PartInfo.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/PartInfo.php new file mode 100644 index 000000000..439a84d31 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/PartInfo.php @@ -0,0 +1,63 @@ +partNumber = $partNumber; + $this->lastModified = $lastModified; + $this->eTag = $eTag; + $this->size = $size; + } + + /** + * @return int + */ + public function getPartNumber() + { + return $this->partNumber; + } + + /** + * @return string + */ + public function getLastModified() + { + return $this->lastModified; + } + + /** + * @return string + */ + public function getETag() + { + return $this->eTag; + } + + /** + * @return int + */ + public function getSize() + { + return $this->size; + } + + private $partNumber = 0; + private $lastModified = ""; + private $eTag = ""; + private $size = 0; +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/PrefixInfo.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/PrefixInfo.php new file mode 100644 index 000000000..e61eac449 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/PrefixInfo.php @@ -0,0 +1,36 @@ +prefix = $prefix; + } + + /** + * @return string + */ + public function getPrefix() + { + return $this->prefix; + } + + private $prefix; +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/RefererConfig.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/RefererConfig.php new file mode 100644 index 000000000..1d7d975c5 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/RefererConfig.php @@ -0,0 +1,93 @@ +AllowEmptyReferer)) return; + if (!isset($xml->RefererList)) return; + $this->allowEmptyReferer = + (strval($xml->AllowEmptyReferer) === 'TRUE' || strval($xml->AllowEmptyReferer) === 'true') ? true : false; + + foreach ($xml->RefererList->Referer as $key => $refer) { + $this->refererList[] = strval($refer); + } + } + + + /** + * 把RefererConfig序列化成xml + * + * @return string + */ + public function serializeToXml() + { + $xml = new \SimpleXMLElement(''); + if ($this->allowEmptyReferer) { + $xml->addChild('AllowEmptyReferer', 'true'); + } else { + $xml->addChild('AllowEmptyReferer', 'false'); + } + $refererList = $xml->addChild('RefererList'); + foreach ($this->refererList as $referer) { + $refererList->addChild('Referer', $referer); + } + return $xml->asXML(); + } + + /** + * @return string + */ + function __toString() + { + return $this->serializeToXml(); + } + + /** + * @param boolean $allowEmptyReferer + */ + public function setAllowEmptyReferer($allowEmptyReferer) + { + $this->allowEmptyReferer = $allowEmptyReferer; + } + + /** + * @param string $referer + */ + public function addReferer($referer) + { + $this->refererList[] = $referer; + } + + /** + * @return boolean + */ + public function isAllowEmptyReferer() + { + return $this->allowEmptyReferer; + } + + /** + * @return array + */ + public function getRefererList() + { + return $this->refererList; + } + + private $allowEmptyReferer = true; + private $refererList = array(); +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/StorageCapacityConfig.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/StorageCapacityConfig.php new file mode 100644 index 000000000..05e6332c2 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/StorageCapacityConfig.php @@ -0,0 +1,74 @@ +storageCapacity = $storageCapacity; + } + + /** + * Not implemented + */ + public function parseFromXml($strXml) + { + throw new OssException("Not implemented."); + } + + /** + * 把StorageCapacityConfig序列化成xml + * + * @return string + */ + public function serializeToXml() + { + $xml = new \SimpleXMLElement(''); + $xml->addChild('StorageCapacity', strval($this->storageCapacity)); + return $xml->asXML(); + } + + /** + * To string + * + * @return string + */ + function __toString() + { + return $this->serializeToXml(); + } + + /** + * Set storage capacity + * + * @param int $storageCapacity + */ + public function setStorageCapacity($storageCapacity) + { + $this->storageCapacity = $storageCapacity; + } + + /** + * Get storage capacity + * + * @return int + */ + public function getStorageCapacity() + { + return $this->storageCapacity; + } + + private $storageCapacity = 0; +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/UploadInfo.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/UploadInfo.php new file mode 100644 index 000000000..8eaa3639f --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/UploadInfo.php @@ -0,0 +1,55 @@ +key = $key; + $this->uploadId = $uploadId; + $this->initiated = $initiated; + } + + /** + * @return string + */ + public function getKey() + { + return $this->key; + } + + /** + * @return string + */ + public function getUploadId() + { + return $this->uploadId; + } + + /** + * @return string + */ + public function getInitiated() + { + return $this->initiated; + } + + private $key = ""; + private $uploadId = ""; + private $initiated = ""; +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/WebsiteConfig.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/WebsiteConfig.php new file mode 100644 index 000000000..8ea08a030 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/WebsiteConfig.php @@ -0,0 +1,76 @@ +indexDocument = $indexDocument; + $this->errorDocument = $errorDocument; + } + + /** + * @param string $strXml + * @return null + */ + public function parseFromXml($strXml) + { + $xml = simplexml_load_string($strXml); + if (isset($xml->IndexDocument) && isset($xml->IndexDocument->Suffix)) { + $this->indexDocument = strval($xml->IndexDocument->Suffix); + } + if (isset($xml->ErrorDocument) && isset($xml->ErrorDocument->Key)) { + $this->errorDocument = strval($xml->ErrorDocument->Key); + } + } + + /** + * 把WebsiteConfig序列化成xml + * + * @return string + * @throws OssException + */ + public function serializeToXml() + { + $xml = new \SimpleXMLElement(''); + $index_document_part = $xml->addChild('IndexDocument'); + $error_document_part = $xml->addChild('ErrorDocument'); + $index_document_part->addChild('Suffix', $this->indexDocument); + $error_document_part->addChild('Key', $this->errorDocument); + return $xml->asXML(); + } + + /** + * @return string + */ + public function getIndexDocument() + { + return $this->indexDocument; + } + + /** + * @return string + */ + public function getErrorDocument() + { + return $this->errorDocument; + } + + private $indexDocument = ""; + private $errorDocument = ""; +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/XmlConfig.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/XmlConfig.php new file mode 100644 index 000000000..d353a2221 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Model/XmlConfig.php @@ -0,0 +1,27 @@ +hostname = $this->checkEndpoint($endpoint, $isCName); + $this->accessKeyId = $accessKeyId; + $this->accessKeySecret = $accessKeySecret; + $this->securityToken = $securityToken; + $this->requestProxy = $requestProxy; + + self::checkEnv(); + } + + /** + * 列举用户所有的Bucket[GetService], Endpoint类型为cname不能进行此操作 + * + * @param array $options + * @throws OssException + * @return BucketListInfo + */ + public function listBuckets($options = NULL) + { + if ($this->hostType === self::OSS_HOST_TYPE_CNAME) { + throw new OssException("operation is not permitted with CName host"); + } + $this->precheckOptions($options); + $options[self::OSS_BUCKET] = ''; + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_OBJECT] = '/'; + $response = $this->auth($options); + $result = new ListBucketsResult($response); + return $result->getData(); + } + + /** + * 创建bucket,默认创建的bucket的ACL是OssClient::OSS_ACL_TYPE_PRIVATE + * + * @param string $bucket + * @param string $acl + * @param array $options + * @param string $storageType + * @return null + */ + public function createBucket($bucket, $acl = self::OSS_ACL_TYPE_PRIVATE, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_PUT; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_HEADERS] = array(self::OSS_ACL => $acl); + if (isset($options[self::OSS_STORAGE])) { + $this->precheckStorage($options[self::OSS_STORAGE]); + $options[self::OSS_CONTENT] = OssUtil::createBucketXmlBody($options[self::OSS_STORAGE]); + unset($options[self::OSS_STORAGE]); + } + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 删除bucket + * 如果Bucket不为空(Bucket中有Object,或者有分块上传的碎片),则Bucket无法删除, + * 必须删除Bucket中的所有Object以及碎片后,Bucket才能成功删除。 + * + * @param string $bucket + * @param array $options + * @return null + */ + public function deleteBucket($bucket, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_DELETE; + $options[self::OSS_OBJECT] = '/'; + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 判断bucket是否存在 + * + * @param string $bucket + * @return bool + * @throws OssException + */ + public function doesBucketExist($bucket) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'acl'; + $response = $this->auth($options); + $result = new ExistResult($response); + return $result->getData(); + } + + /** + * 获取bucket所属的数据中心位置信息 + * + * @param string $bucket + * @param array $options + * @throws OssException + * @return string + */ + public function getBucketLocation($bucket, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'location'; + $response = $this->auth($options); + $result = new GetLocationResult($response); + return $result->getData(); + } + + /** + * 获取Bucket的Meta信息 + * + * @param string $bucket + * @param array $options 具体参考SDK文档 + * @return array + */ + public function getBucketMeta($bucket, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_HEAD; + $options[self::OSS_OBJECT] = '/'; + $response = $this->auth($options); + $result = new HeaderResult($response); + return $result->getData(); + } + + /** + * 获取bucket的ACL配置情况 + * + * @param string $bucket + * @param array $options + * @throws OssException + * @return string + */ + public function getBucketAcl($bucket, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'acl'; + $response = $this->auth($options); + $result = new AclResult($response); + return $result->getData(); + } + + /** + * 设置bucket的ACL配置情况 + * + * @param string $bucket bucket名称 + * @param string $acl 读写权限,可选值 ['private', 'public-read', 'public-read-write'] + * @param array $options 可以为空 + * @throws OssException + * @return null + */ + public function putBucketAcl($bucket, $acl, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_PUT; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_HEADERS] = array(self::OSS_ACL => $acl); + $options[self::OSS_SUB_RESOURCE] = 'acl'; + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 获取object的ACL属性 + * + * @param string $bucket + * @param string $object + * @throws OssException + * @return string + */ + public function getObjectAcl($bucket, $object) + { + $options = array(); + $this->precheckCommon($bucket, $object, $options, true); + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_OBJECT] = $object; + $options[self::OSS_SUB_RESOURCE] = 'acl'; + $response = $this->auth($options); + $result = new AclResult($response); + return $result->getData(); + } + + /** + * 设置object的ACL属性 + * + * @param string $bucket bucket名称 + * @param string $object object名称 + * @param string $acl 读写权限,可选值 ['default', 'private', 'public-read', 'public-read-write'] + * @throws OssException + * @return null + */ + public function putObjectAcl($bucket, $object, $acl) + { + $this->precheckCommon($bucket, $object, $options, true); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_PUT; + $options[self::OSS_OBJECT] = $object; + $options[self::OSS_HEADERS] = array(self::OSS_OBJECT_ACL => $acl); + $options[self::OSS_SUB_RESOURCE] = 'acl'; + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 获取Bucket的访问日志配置情况 + * + * @param string $bucket bucket名称 + * @param array $options 可以为空 + * @throws OssException + * @return LoggingConfig + */ + public function getBucketLogging($bucket, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'logging'; + $response = $this->auth($options); + $result = new GetLoggingResult($response); + return $result->getData(); + } + + /** + * 开启Bucket访问日志记录功能,只有Bucket的所有者才能更改 + * + * @param string $bucket bucket名称 + * @param string $targetBucket 日志文件存放的bucket + * @param string $targetPrefix 日志的文件前缀 + * @param array $options 可以为空 + * @throws OssException + * @return null + */ + public function putBucketLogging($bucket, $targetBucket, $targetPrefix, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $this->precheckBucket($targetBucket, 'targetbucket is not allowed empty'); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_PUT; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'logging'; + $options[self::OSS_CONTENT_TYPE] = 'application/xml'; + + $loggingConfig = new LoggingConfig($targetBucket, $targetPrefix); + $options[self::OSS_CONTENT] = $loggingConfig->serializeToXml(); + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 关闭bucket访问日志记录功能 + * + * @param string $bucket bucket名称 + * @param array $options 可以为空 + * @throws OssException + * @return null + */ + public function deleteBucketLogging($bucket, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_DELETE; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'logging'; + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 将bucket设置成静态网站托管模式 + * + * @param string $bucket bucket名称 + * @param WebsiteConfig $websiteConfig + * @param array $options 可以为空 + * @throws OssException + * @return null + */ + public function putBucketWebsite($bucket, $websiteConfig, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_PUT; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'website'; + $options[self::OSS_CONTENT_TYPE] = 'application/xml'; + $options[self::OSS_CONTENT] = $websiteConfig->serializeToXml(); + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 获取bucket的静态网站托管状态 + * + * @param string $bucket bucket名称 + * @param array $options + * @throws OssException + * @return WebsiteConfig + */ + public function getBucketWebsite($bucket, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'website'; + $response = $this->auth($options); + $result = new GetWebsiteResult($response); + return $result->getData(); + } + + /** + * 关闭bucket的静态网站托管模式 + * + * @param string $bucket bucket名称 + * @param array $options + * @throws OssException + * @return null + */ + public function deleteBucketWebsite($bucket, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_DELETE; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'website'; + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 在指定的bucket上设定一个跨域资源共享(CORS)的规则,如果原规则存在则覆盖原规则 + * + * @param string $bucket bucket名称 + * @param CorsConfig $corsConfig 跨域资源共享配置,具体规则参见SDK文档 + * @param array $options array + * @throws OssException + * @return null + */ + public function putBucketCors($bucket, $corsConfig, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_PUT; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'cors'; + $options[self::OSS_CONTENT_TYPE] = 'application/xml'; + $options[self::OSS_CONTENT] = $corsConfig->serializeToXml(); + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 获取Bucket的CORS配置情况 + * + * @param string $bucket bucket名称 + * @param array $options 可以为空 + * @throws OssException + * @return CorsConfig + */ + public function getBucketCors($bucket, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'cors'; + $response = $this->auth($options); + $result = new GetCorsResult($response, __FUNCTION__); + return $result->getData(); + } + + /** + * 关闭指定Bucket对应的CORS功能并清空所有规则 + * + * @param string $bucket bucket名称 + * @param array $options + * @throws OssException + * @return null + */ + public function deleteBucketCors($bucket, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_DELETE; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'cors'; + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 为指定Bucket增加CNAME绑定 + * + * @param string $bucket bucket名称 + * @param string $cname + * @param array $options + * @throws OssException + * @return null + */ + public function addBucketCname($bucket, $cname, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_POST; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'cname'; + $options[self::OSS_CONTENT_TYPE] = 'application/xml'; + $cnameConfig = new CnameConfig(); + $cnameConfig->addCname($cname); + $options[self::OSS_CONTENT] = $cnameConfig->serializeToXml(); + $options[self::OSS_COMP] = 'add'; + + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 获取指定Bucket已绑定的CNAME列表 + * + * @param string $bucket bucket名称 + * @param array $options + * @throws OssException + * @return CnameConfig + */ + public function getBucketCname($bucket, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'cname'; + $response = $this->auth($options); + $result = new GetCnameResult($response); + return $result->getData(); + } + + /** + * 解除指定Bucket的CNAME绑定 + * + * @param string $bucket bucket名称 + * @param CnameConfig $cnameConfig + * @param array $options + * @throws OssException + * @return null + */ + public function deleteBucketCname($bucket, $cname, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_POST; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'cname'; + $options[self::OSS_CONTENT_TYPE] = 'application/xml'; + $cnameConfig = new CnameConfig(); + $cnameConfig->addCname($cname); + $options[self::OSS_CONTENT] = $cnameConfig->serializeToXml(); + $options[self::OSS_COMP] = 'delete'; + + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 为指定Bucket创建LiveChannel + * + * @param string $bucket bucket名称 + * @param string channelName $channelName + * @param LiveChannelConfig $channelConfig + * @param array $options + * @throws OssException + * @return LiveChannelInfo + */ + public function putBucketLiveChannel($bucket, $channelName, $channelConfig, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_PUT; + $options[self::OSS_OBJECT] = $channelName; + $options[self::OSS_SUB_RESOURCE] = 'live'; + $options[self::OSS_CONTENT_TYPE] = 'application/xml'; + $options[self::OSS_CONTENT] = $channelConfig->serializeToXml(); + + $response = $this->auth($options); + $result = new PutLiveChannelResult($response); + $info = $result->getData(); + $info->setName($channelName); + $info->setDescription($channelConfig->getDescription()); + + return $info; + } + + /** + * 设置LiveChannel的status + * + * @param string $bucket bucket名称 + * @param string channelName $channelName + * @param string channelStatus $channelStatus 为enabled或disabled + * @param array $options + * @throws OssException + * @return null + */ + public function putLiveChannelStatus($bucket, $channelName, $channelStatus, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_PUT; + $options[self::OSS_OBJECT] = $channelName; + $options[self::OSS_SUB_RESOURCE] = 'live'; + $options[self::OSS_LIVE_CHANNEL_STATUS] = $channelStatus; + + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 获取LiveChannel信息 + * + * @param string $bucket bucket名称 + * @param string channelName $channelName + * @param array $options + * @throws OssException + * @return GetLiveChannelInfo + */ + public function getLiveChannelInfo($bucket, $channelName, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_OBJECT] = $channelName; + $options[self::OSS_SUB_RESOURCE] = 'live'; + + $response = $this->auth($options); + $result = new GetLiveChannelInfoResult($response); + return $result->getData(); + } + + /** + * 获取LiveChannel状态信息 + * + * @param string $bucket bucket名称 + * @param string channelName $channelName + * @param array $options + * @throws OssException + * @return GetLiveChannelStatus + */ + public function getLiveChannelStatus($bucket, $channelName, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_OBJECT] = $channelName; + $options[self::OSS_SUB_RESOURCE] = 'live'; + $options[self::OSS_COMP] = 'stat'; + + $response = $this->auth($options); + $result = new GetLiveChannelStatusResult($response); + return $result->getData(); + } + + /** + *获取LiveChannel推流记录 + * + * @param string $bucket bucket名称 + * @param string channelName $channelName + * @param array $options + * @throws OssException + * @return GetLiveChannelHistory + */ + public function getLiveChannelHistory($bucket, $channelName, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_OBJECT] = $channelName; + $options[self::OSS_SUB_RESOURCE] = 'live'; + $options[self::OSS_COMP] = 'history'; + + $response = $this->auth($options); + $result = new GetLiveChannelHistoryResult($response); + return $result->getData(); + } + + /** + *获取指定Bucket下的live channel列表 + * + * @param string $bucket bucket名称 + * @param array $options + * @throws OssException + * @return LiveChannelListInfo + */ + public function listBucketLiveChannels($bucket, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'live'; + $options[self::OSS_QUERY_STRING] = array( + 'prefix' => isset($options['prefix']) ? $options['prefix'] : '', + 'marker' => isset($options['marker']) ? $options['marker'] : '', + 'max-keys' => isset($options['max-keys']) ? $options['max-keys'] : '', + ); + $response = $this->auth($options); + $result = new ListLiveChannelResult($response); + $list = $result->getData(); + $list->setBucketName($bucket); + + return $list; + } + + /** + * 为指定LiveChannel生成播放列表 + * + * @param string $bucket bucket名称 + * @param string channelName $channelName + * @param string $playlistName 指定生成的点播播放列表的名称,必须以“.m3u8”结尾 + * @param array $setTime startTime和EndTime以unix时间戳格式给定,跨度不能超过一天 + * @throws OssException + * @return null + */ + public function postVodPlaylist($bucket, $channelName, $playlistName, $setTime) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_POST; + $options[self::OSS_OBJECT] = $channelName . '/' . $playlistName; + $options[self::OSS_SUB_RESOURCE] = 'vod'; + $options[self::OSS_LIVE_CHANNEL_END_TIME] = $setTime['EndTime']; + $options[self::OSS_LIVE_CHANNEL_START_TIME] = $setTime['StartTime']; + + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 删除指定Bucket的LiveChannel + * + * @param string $bucket bucket名称 + * @param string channelName $channelName + * @param array $options + * @throws OssException + * @return null + */ + public function deleteBucketLiveChannel($bucket, $channelName, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_DELETE; + $options[self::OSS_OBJECT] = $channelName; + $options[self::OSS_SUB_RESOURCE] = 'live'; + + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 生成带签名的推流地址 + * + * @param string $bucket bucket名称 + * @param string channelName $channelName + * @param int timeout 设置超时时间,单位为秒 + * @param array $options + * @throws OssException + * @return 推流地址 + */ + public function signRtmpUrl($bucket, $channelName, $timeout = 60, $options = NULL) + { + $this->precheckCommon($bucket, $channelName, $options, false); + $expires = time() + $timeout; + $proto = 'rtmp://'; + $hostname = $this->generateHostname($bucket); + $cano_params = ''; + $query_items = array(); + $params = isset($options['params']) ? $options['params'] : array(); + uksort($params, 'strnatcasecmp'); + foreach ($params as $key => $value) { + $cano_params = $cano_params . $key . ':' . $value . "\n"; + $query_items[] = rawurlencode($key) . '=' . rawurlencode($value); + } + $resource = '/' . $bucket . '/' . $channelName; + + $string_to_sign = $expires . "\n" . $cano_params . $resource; + $signature = base64_encode(hash_hmac('sha1', $string_to_sign, $this->accessKeySecret, true)); + + $query_items[] = 'OSSAccessKeyId=' . rawurlencode($this->accessKeyId); + $query_items[] = 'Expires=' . rawurlencode($expires); + $query_items[] = 'Signature=' . rawurlencode($signature); + + return $proto . $hostname . '/live/' . $channelName . '?' . implode('&', $query_items); + } + + /** + * 检验跨域资源请求, 发送跨域请求之前会发送一个preflight请求(OPTIONS)并带上特定的来源域, + * HTTP方法和header信息等给OSS以决定是否发送真正的请求。 OSS可以通过putBucketCors接口 + * 来开启Bucket的CORS支持,开启CORS功能之后,OSS在收到浏览器preflight请求时会根据设定的 + * 规则评估是否允许本次请求 + * + * @param string $bucket bucket名称 + * @param string $object object名称 + * @param string $origin 请求来源域 + * @param string $request_method 表明实际请求中会使用的HTTP方法 + * @param string $request_headers 表明实际请求中会使用的除了简单头部之外的headers + * @param array $options + * @return array + * @throws OssException + * @link http://help.aliyun.com/document_detail/oss/api-reference/cors/OptionObject.html + */ + public function optionsObject($bucket, $object, $origin, $request_method, $request_headers, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_OPTIONS; + $options[self::OSS_OBJECT] = $object; + $options[self::OSS_HEADERS] = array( + self::OSS_OPTIONS_ORIGIN => $origin, + self::OSS_OPTIONS_REQUEST_HEADERS => $request_headers, + self::OSS_OPTIONS_REQUEST_METHOD => $request_method + ); + $response = $this->auth($options); + $result = new HeaderResult($response); + return $result->getData(); + } + + /** + * 设置Bucket的Lifecycle配置 + * + * @param string $bucket bucket名称 + * @param LifecycleConfig $lifecycleConfig Lifecycle配置类 + * @param array $options + * @throws OssException + * @return null + */ + public function putBucketLifecycle($bucket, $lifecycleConfig, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_PUT; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'lifecycle'; + $options[self::OSS_CONTENT_TYPE] = 'application/xml'; + $options[self::OSS_CONTENT] = $lifecycleConfig->serializeToXml(); + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 获取Bucket的Lifecycle配置情况 + * + * @param string $bucket bucket名称 + * @param array $options + * @throws OssException + * @return LifecycleConfig + */ + public function getBucketLifecycle($bucket, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'lifecycle'; + $response = $this->auth($options); + $result = new GetLifecycleResult($response); + return $result->getData(); + } + + /** + * 删除指定Bucket的生命周期配置 + * + * @param string $bucket bucket名称 + * @param array $options + * @throws OssException + * @return null + */ + public function deleteBucketLifecycle($bucket, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_DELETE; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'lifecycle'; + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 设置一个bucket的referer访问白名单和是否允许referer字段为空的请求访问 + * Bucket Referer防盗链具体见OSS防盗链 + * + * @param string $bucket bucket名称 + * @param RefererConfig $refererConfig + * @param array $options + * @return ResponseCore + * @throws null + */ + public function putBucketReferer($bucket, $refererConfig, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_PUT; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'referer'; + $options[self::OSS_CONTENT_TYPE] = 'application/xml'; + $options[self::OSS_CONTENT] = $refererConfig->serializeToXml(); + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 获取Bucket的Referer配置情况 + * Bucket Referer防盗链具体见OSS防盗链 + * + * @param string $bucket bucket名称 + * @param array $options + * @throws OssException + * @return RefererConfig + */ + public function getBucketReferer($bucket, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'referer'; + $response = $this->auth($options); + $result = new GetRefererResult($response); + return $result->getData(); + } + + /** + * 设置bucket的容量大小,单位GB + * 当bucket的容量大于设置的容量时,禁止继续写入 + * + * @param string $bucket bucket名称 + * @param int $storageCapacity + * @param array $options + * @return ResponseCore + * @throws null + */ + public function putBucketStorageCapacity($bucket, $storageCapacity, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_PUT; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'qos'; + $options[self::OSS_CONTENT_TYPE] = 'application/xml'; + $storageCapacityConfig = new StorageCapacityConfig($storageCapacity); + $options[self::OSS_CONTENT] = $storageCapacityConfig->serializeToXml(); + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 获取bucket的容量大小,单位GB + * + * @param string $bucket bucket名称 + * @param array $options + * @throws OssException + * @return int + */ + public function getBucketStorageCapacity($bucket, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'qos'; + $response = $this->auth($options); + $result = new GetStorageCapacityResult($response); + return $result->getData(); + } + + /** + * 获取bucket下的object列表 + * + * @param string $bucket + * @param array $options + * 其中options中的参数如下 + * $options = array( + * 'max-keys' => max-keys用于限定此次返回object的最大数,如果不设定,默认为100,max-keys取值不能大于1000。 + * 'prefix' => 限定返回的object key必须以prefix作为前缀。注意使用prefix查询时,返回的key中仍会包含prefix。 + * 'delimiter' => 是一个用于对Object名字进行分组的字符。所有名字包含指定的前缀且第一次出现delimiter字符之间的object作为一组元素 + * 'marker' => 用户设定结果从marker之后按字母排序的第一个开始返回。 + *) + * 其中 prefix,marker用来实现分页显示效果,参数的长度必须小于256字节。 + * @throws OssException + * @return ObjectListInfo + */ + public function listObjects($bucket, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_HEADERS] = array( + self::OSS_DELIMITER => isset($options[self::OSS_DELIMITER]) ? $options[self::OSS_DELIMITER] : '/', + self::OSS_PREFIX => isset($options[self::OSS_PREFIX]) ? $options[self::OSS_PREFIX] : '', + self::OSS_MAX_KEYS => isset($options[self::OSS_MAX_KEYS]) ? $options[self::OSS_MAX_KEYS] : self::OSS_MAX_KEYS_VALUE, + self::OSS_MARKER => isset($options[self::OSS_MARKER]) ? $options[self::OSS_MARKER] : '', + ); + $query = isset($options[self::OSS_QUERY_STRING]) ? $options[self::OSS_QUERY_STRING] : array(); + $options[self::OSS_QUERY_STRING] = array_merge( + $query, + array(self::OSS_ENCODING_TYPE => self::OSS_ENCODING_TYPE_URL) + ); + + $response = $this->auth($options); + $result = new ListObjectsResult($response); + return $result->getData(); + } + + /** + * 创建虚拟目录 (本函数会在object名称后增加'/', 所以创建目录的object名称不需要'/'结尾,否则,目录名称会变成'//') + * + * 暂不开放此接口 + * + * @param string $bucket bucket名称 + * @param string $object object名称 + * @param array $options + * @return null + */ + public function createObjectDir($bucket, $object, $options = NULL) + { + $this->precheckCommon($bucket, $object, $options); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_PUT; + $options[self::OSS_OBJECT] = $object . '/'; + $options[self::OSS_CONTENT_LENGTH] = array(self::OSS_CONTENT_LENGTH => 0); + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 上传内存中的内容 + * + * @param string $bucket bucket名称 + * @param string $object objcet名称 + * @param string $content 上传的内容 + * @param array $options + * @return null + */ + public function putObject($bucket, $object, $content, $options = NULL) + { + $this->precheckCommon($bucket, $object, $options); + + $options[self::OSS_CONTENT] = $content; + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_PUT; + $options[self::OSS_OBJECT] = $object; + + if (!isset($options[self::OSS_LENGTH])) { + $options[self::OSS_CONTENT_LENGTH] = strlen($options[self::OSS_CONTENT]); + } else { + $options[self::OSS_CONTENT_LENGTH] = $options[self::OSS_LENGTH]; + } + + $is_check_md5 = $this->isCheckMD5($options); + if ($is_check_md5) { + $content_md5 = base64_encode(md5($content, true)); + $options[self::OSS_CONTENT_MD5] = $content_md5; + } + + if (!isset($options[self::OSS_CONTENT_TYPE])) { + $options[self::OSS_CONTENT_TYPE] = $this->getMimeType($object); + } + $response = $this->auth($options); + + if (isset($options[self::OSS_CALLBACK]) && !empty($options[self::OSS_CALLBACK])) { + $result = new CallbackResult($response); + } else { + $result = new PutSetDeleteResult($response); + } + + return $result->getData(); + } + + /** + * 创建symlink + * @param string $bucket bucket名称 + * @param string $symlink symlink名称 + * @param string $targetObject 目标object名称 + * @param array $options + * @return null + */ + public function putSymlink($bucket, $symlink ,$targetObject, $options = NULL) + { + $this->precheckCommon($bucket, $symlink, $options); + + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_PUT; + $options[self::OSS_OBJECT] = $symlink; + $options[self::OSS_SUB_RESOURCE] = self::OSS_SYMLINK; + $options[self::OSS_HEADERS][self::OSS_SYMLINK_TARGET] = rawurlencode($targetObject); + + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 获取symlink + *@param string $bucket bucket名称 + * @param string $symlink symlink名称 + * @return null + */ + public function getSymlink($bucket, $symlink) + { + $this->precheckCommon($bucket, $symlink, $options); + + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_OBJECT] = $symlink; + $options[self::OSS_SUB_RESOURCE] = self::OSS_SYMLINK; + + $response = $this->auth($options); + $result = new SymlinkResult($response); + return $result->getData(); + } + + /** + * 上传本地文件 + * + * @param string $bucket bucket名称 + * @param string $object object名称 + * @param string $file 本地文件路径 + * @param array $options + * @return null + * @throws OssException + */ + public function uploadFile($bucket, $object, $file, $options = NULL) + { + $this->precheckCommon($bucket, $object, $options); + OssUtil::throwOssExceptionWithMessageIfEmpty($file, "file path is invalid"); + $file = OssUtil::encodePath($file); + if (!file_exists($file)) { + throw new OssException($file . " file does not exist"); + } + $options[self::OSS_FILE_UPLOAD] = $file; + $file_size = filesize($options[self::OSS_FILE_UPLOAD]); + $is_check_md5 = $this->isCheckMD5($options); + if ($is_check_md5) { + $content_md5 = base64_encode(md5_file($options[self::OSS_FILE_UPLOAD], true)); + $options[self::OSS_CONTENT_MD5] = $content_md5; + } + if (!isset($options[self::OSS_CONTENT_TYPE])) { + $options[self::OSS_CONTENT_TYPE] = $this->getMimeType($object, $file); + } + $options[self::OSS_METHOD] = self::OSS_HTTP_PUT; + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_OBJECT] = $object; + $options[self::OSS_CONTENT_LENGTH] = $file_size; + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 追加上传内存中的内容 + * + * @param string $bucket bucket名称 + * @param string $object objcet名称 + * @param string $content 本次追加上传的内容 + * @param array $options + * @return int next append position + * @throws OssException + */ + public function appendObject($bucket, $object, $content, $position, $options = NULL) + { + $this->precheckCommon($bucket, $object, $options); + + $options[self::OSS_CONTENT] = $content; + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_POST; + $options[self::OSS_OBJECT] = $object; + $options[self::OSS_SUB_RESOURCE] = 'append'; + $options[self::OSS_POSITION] = strval($position); + + if (!isset($options[self::OSS_LENGTH])) { + $options[self::OSS_CONTENT_LENGTH] = strlen($options[self::OSS_CONTENT]); + } else { + $options[self::OSS_CONTENT_LENGTH] = $options[self::OSS_LENGTH]; + } + + $is_check_md5 = $this->isCheckMD5($options); + if ($is_check_md5) { + $content_md5 = base64_encode(md5($content, true)); + $options[self::OSS_CONTENT_MD5] = $content_md5; + } + + if (!isset($options[self::OSS_CONTENT_TYPE])) { + $options[self::OSS_CONTENT_TYPE] = $this->getMimeType($object); + } + $response = $this->auth($options); + $result = new AppendResult($response); + return $result->getData(); + } + + /** + * 追加上传本地文件 + * + * @param string $bucket bucket名称 + * @param string $object object名称 + * @param string $file 追加上传的本地文件路径 + * @param array $options + * @return int next append position + * @throws OssException + */ + public function appendFile($bucket, $object, $file, $position, $options = NULL) + { + $this->precheckCommon($bucket, $object, $options); + + OssUtil::throwOssExceptionWithMessageIfEmpty($file, "file path is invalid"); + $file = OssUtil::encodePath($file); + if (!file_exists($file)) { + throw new OssException($file . " file does not exist"); + } + $options[self::OSS_FILE_UPLOAD] = $file; + $file_size = filesize($options[self::OSS_FILE_UPLOAD]); + $is_check_md5 = $this->isCheckMD5($options); + if ($is_check_md5) { + $content_md5 = base64_encode(md5_file($options[self::OSS_FILE_UPLOAD], true)); + $options[self::OSS_CONTENT_MD5] = $content_md5; + } + if (!isset($options[self::OSS_CONTENT_TYPE])) { + $options[self::OSS_CONTENT_TYPE] = $this->getMimeType($object, $file); + } + + $options[self::OSS_METHOD] = self::OSS_HTTP_POST; + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_OBJECT] = $object; + $options[self::OSS_CONTENT_LENGTH] = $file_size; + $options[self::OSS_SUB_RESOURCE] = 'append'; + $options[self::OSS_POSITION] = strval($position); + + $response = $this->auth($options); + $result = new AppendResult($response); + return $result->getData(); + } + + /** + * 拷贝一个在OSS上已经存在的object成另外一个object + * + * @param string $fromBucket 源bucket名称 + * @param string $fromObject 源object名称 + * @param string $toBucket 目标bucket名称 + * @param string $toObject 目标object名称 + * @param array $options + * @return null + * @throws OssException + */ + public function copyObject($fromBucket, $fromObject, $toBucket, $toObject, $options = NULL) + { + $this->precheckCommon($fromBucket, $fromObject, $options); + $this->precheckCommon($toBucket, $toObject, $options); + $options[self::OSS_BUCKET] = $toBucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_PUT; + $options[self::OSS_OBJECT] = $toObject; + if (isset($options[self::OSS_HEADERS])) { + $options[self::OSS_HEADERS][self::OSS_OBJECT_COPY_SOURCE] = '/' . $fromBucket . '/' . $fromObject; + } else { + $options[self::OSS_HEADERS] = array(self::OSS_OBJECT_COPY_SOURCE => '/' . $fromBucket . '/' . $fromObject); + } + $response = $this->auth($options); + $result = new CopyObjectResult($response); + return $result->getData(); + } + + /** + * 获取Object的Meta信息 + * + * @param string $bucket bucket名称 + * @param string $object object名称 + * @param string $options 具体参考SDK文档 + * @return array + */ + public function getObjectMeta($bucket, $object, $options = NULL) + { + $this->precheckCommon($bucket, $object, $options); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_HEAD; + $options[self::OSS_OBJECT] = $object; + $response = $this->auth($options); + $result = new HeaderResult($response); + return $result->getData(); + } + + /** + * 删除某个Object + * + * @param string $bucket bucket名称 + * @param string $object object名称 + * @param array $options + * @return null + */ + public function deleteObject($bucket, $object, $options = NULL) + { + $this->precheckCommon($bucket, $object, $options); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_DELETE; + $options[self::OSS_OBJECT] = $object; + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 删除同一个Bucket中的多个Object + * + * @param string $bucket bucket名称 + * @param array $objects object列表 + * @param array $options + * @return ResponseCore + * @throws null + */ + public function deleteObjects($bucket, $objects, $options = null) + { + $this->precheckCommon($bucket, NULL, $options, false); + if (!is_array($objects) || !$objects) { + throw new OssException('objects must be array'); + } + $options[self::OSS_METHOD] = self::OSS_HTTP_POST; + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'delete'; + $options[self::OSS_CONTENT_TYPE] = 'application/xml'; + $quiet = 'false'; + if (isset($options['quiet'])) { + if (is_bool($options['quiet'])) { //Boolean + $quiet = $options['quiet'] ? 'true' : 'false'; + } elseif (is_string($options['quiet'])) { // string + $quiet = ($options['quiet'] === 'true') ? 'true' : 'false'; + } + } + $xmlBody = OssUtil::createDeleteObjectsXmlBody($objects, $quiet); + $options[self::OSS_CONTENT] = $xmlBody; + $response = $this->auth($options); + $result = new DeleteObjectsResult($response); + return $result->getData(); + } + + /** + * 获得Object内容 + * + * @param string $bucket bucket名称 + * @param string $object object名称 + * @param array $options 该参数中必须设置ALIOSS::OSS_FILE_DOWNLOAD,ALIOSS::OSS_RANGE可选,可以根据实际情况设置;如果不设置,默认会下载全部内容 + * @return string + */ + public function getObject($bucket, $object, $options = NULL) + { + $this->precheckCommon($bucket, $object, $options); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_OBJECT] = $object; + if (isset($options[self::OSS_LAST_MODIFIED])) { + $options[self::OSS_HEADERS][self::OSS_IF_MODIFIED_SINCE] = $options[self::OSS_LAST_MODIFIED]; + unset($options[self::OSS_LAST_MODIFIED]); + } + if (isset($options[self::OSS_ETAG])) { + $options[self::OSS_HEADERS][self::OSS_IF_NONE_MATCH] = $options[self::OSS_ETAG]; + unset($options[self::OSS_ETAG]); + } + if (isset($options[self::OSS_RANGE])) { + $range = $options[self::OSS_RANGE]; + $options[self::OSS_HEADERS][self::OSS_RANGE] = "bytes=$range"; + unset($options[self::OSS_RANGE]); + } + $response = $this->auth($options); + $result = new BodyResult($response); + return $result->getData(); + } + + /** + * 检测Object是否存在 + * 通过获取Object的Meta信息来判断Object是否存在, 用户需要自行解析ResponseCore判断object是否存在 + * + * @param string $bucket bucket名称 + * @param string $object object名称 + * @param array $options + * @return bool + */ + public function doesObjectExist($bucket, $object, $options = NULL) + { + $this->precheckCommon($bucket, $object, $options); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_HEAD; + $options[self::OSS_OBJECT] = $object; + $response = $this->auth($options); + $result = new ExistResult($response); + return $result->getData(); + } + + /** + * 针对Archive类型的Object读取 + * 需要使用Restore操作让服务端执行解冻任务 + * + * @param string $bucket bucket名称 + * @param string $object object名称 + * @return null + * @throws OssException + */ + public function restoreObject($bucket, $object, $options = NULL) + { + $this->precheckCommon($bucket, $object, $options); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_POST; + $options[self::OSS_OBJECT] = $object; + $options[self::OSS_SUB_RESOURCE] = self::OSS_RESTORE; + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 获取分片大小,根据用户提供的part_size,重新计算一个更合理的partsize + * + * @param int $partSize + * @return int + */ + private function computePartSize($partSize) + { + $partSize = (integer)$partSize; + if ($partSize <= self::OSS_MIN_PART_SIZE) { + $partSize = self::OSS_MIN_PART_SIZE; + } elseif ($partSize > self::OSS_MAX_PART_SIZE) { + $partSize = self::OSS_MAX_PART_SIZE; + } + return $partSize; + } + + /** + * 计算文件可以分成多少个part,以及每个part的长度以及起始位置 + * 方法必须在 中调用 + * + * @param integer $file_size 文件大小 + * @param integer $partSize part大小,默认5M + * @return array An array 包含 key-value 键值对. Key 为 `seekTo` 和 `length`. + */ + public function generateMultiuploadParts($file_size, $partSize = 5242880) + { + $i = 0; + $size_count = $file_size; + $values = array(); + $partSize = $this->computePartSize($partSize); + while ($size_count > 0) { + $size_count -= $partSize; + $values[] = array( + self::OSS_SEEK_TO => ($partSize * $i), + self::OSS_LENGTH => (($size_count > 0) ? $partSize : ($size_count + $partSize)), + ); + $i++; + } + return $values; + } + + /** + * 初始化multi-part upload + * + * @param string $bucket Bucket名称 + * @param string $object Object名称 + * @param array $options Key-Value数组 + * @throws OssException + * @return string 返回uploadid + */ + public function initiateMultipartUpload($bucket, $object, $options = NULL) + { + $this->precheckCommon($bucket, $object, $options); + $options[self::OSS_METHOD] = self::OSS_HTTP_POST; + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_OBJECT] = $object; + $options[self::OSS_SUB_RESOURCE] = 'uploads'; + $options[self::OSS_CONTENT] = ''; + + if (!isset($options[self::OSS_CONTENT_TYPE])) { + $options[self::OSS_CONTENT_TYPE] = $this->getMimeType($object); + } + if (!isset($options[self::OSS_HEADERS])) { + $options[self::OSS_HEADERS] = array(); + } + $response = $this->auth($options); + $result = new InitiateMultipartUploadResult($response); + return $result->getData(); + } + + /** + * 分片上传的块上传接口 + * + * @param string $bucket Bucket名称 + * @param string $object Object名称 + * @param string $uploadId + * @param array $options Key-Value数组 + * @return string eTag + * @throws OssException + */ + public function uploadPart($bucket, $object, $uploadId, $options = null) + { + $this->precheckCommon($bucket, $object, $options); + $this->precheckParam($options, self::OSS_FILE_UPLOAD, __FUNCTION__); + $this->precheckParam($options, self::OSS_PART_NUM, __FUNCTION__); + + $options[self::OSS_METHOD] = self::OSS_HTTP_PUT; + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_OBJECT] = $object; + $options[self::OSS_UPLOAD_ID] = $uploadId; + + if (isset($options[self::OSS_LENGTH])) { + $options[self::OSS_CONTENT_LENGTH] = $options[self::OSS_LENGTH]; + } + $response = $this->auth($options); + $result = new UploadPartResult($response); + return $result->getData(); + } + + /** + * 获取已成功上传的part + * + * @param string $bucket Bucket名称 + * @param string $object Object名称 + * @param string $uploadId uploadId + * @param array $options Key-Value数组 + * @return ListPartsInfo + * @throws OssException + */ + public function listParts($bucket, $object, $uploadId, $options = null) + { + $this->precheckCommon($bucket, $object, $options); + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_OBJECT] = $object; + $options[self::OSS_UPLOAD_ID] = $uploadId; + $options[self::OSS_QUERY_STRING] = array(); + foreach (array('max-parts', 'part-number-marker') as $param) { + if (isset($options[$param])) { + $options[self::OSS_QUERY_STRING][$param] = $options[$param]; + unset($options[$param]); + } + } + $response = $this->auth($options); + $result = new ListPartsResult($response); + return $result->getData(); + } + + /** + * 中止进行一半的分片上传操作 + * + * @param string $bucket Bucket名称 + * @param string $object Object名称 + * @param string $uploadId uploadId + * @param array $options Key-Value数组 + * @return null + * @throws OssException + */ + public function abortMultipartUpload($bucket, $object, $uploadId, $options = NULL) + { + $this->precheckCommon($bucket, $object, $options); + $options[self::OSS_METHOD] = self::OSS_HTTP_DELETE; + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_OBJECT] = $object; + $options[self::OSS_UPLOAD_ID] = $uploadId; + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * 在将所有数据Part都上传完成后,调用此接口完成本次分块上传 + * + * @param string $bucket Bucket名称 + * @param string $object Object名称 + * @param string $uploadId uploadId + * @param array $listParts array( array("PartNumber"=> int, "ETag"=>string)) + * @param array $options Key-Value数组 + * @throws OssException + * @return null + */ + public function completeMultipartUpload($bucket, $object, $uploadId, $listParts, $options = NULL) + { + $this->precheckCommon($bucket, $object, $options); + $options[self::OSS_METHOD] = self::OSS_HTTP_POST; + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_OBJECT] = $object; + $options[self::OSS_UPLOAD_ID] = $uploadId; + $options[self::OSS_CONTENT_TYPE] = 'application/xml'; + if (!is_array($listParts)) { + throw new OssException("listParts must be array type"); + } + $options[self::OSS_CONTENT] = OssUtil::createCompleteMultipartUploadXmlBody($listParts); + $response = $this->auth($options); + if (isset($options[self::OSS_CALLBACK]) && !empty($options[self::OSS_CALLBACK])) { + $result = new CallbackResult($response); + } else { + $result = new PutSetDeleteResult($response); + } + return $result->getData(); + } + + /** + * 罗列出所有执行中的Multipart Upload事件,即已经被初始化的Multipart Upload但是未被 + * Complete或者Abort的Multipart Upload事件 + * + * @param string $bucket bucket + * @param array $options 关联数组 + * @throws OssException + * @return ListMultipartUploadInfo + */ + public function listMultipartUploads($bucket, $options = null) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_METHOD] = self::OSS_HTTP_GET; + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_SUB_RESOURCE] = 'uploads'; + + foreach (array('delimiter', 'key-marker', 'max-uploads', 'prefix', 'upload-id-marker') as $param) { + if (isset($options[$param])) { + $options[self::OSS_QUERY_STRING][$param] = $options[$param]; + unset($options[$param]); + } + } + $query = isset($options[self::OSS_QUERY_STRING]) ? $options[self::OSS_QUERY_STRING] : array(); + $options[self::OSS_QUERY_STRING] = array_merge( + $query, + array(self::OSS_ENCODING_TYPE => self::OSS_ENCODING_TYPE_URL) + ); + + $response = $this->auth($options); + $result = new ListMultipartUploadResult($response); + return $result->getData(); + } + + /** + * 从一个已存在的Object中拷贝数据来上传一个Part + * + * @param string $fromBucket 源bucket名称 + * @param string $fromObject 源object名称 + * @param string $toBucket 目标bucket名称 + * @param string $toObject 目标object名称 + * @param int $partNumber 分块上传的块id + * @param string $uploadId 初始化multipart upload返回的uploadid + * @param array $options Key-Value数组 + * @return null + * @throws OssException + */ + public function uploadPartCopy($fromBucket, $fromObject, $toBucket, $toObject, $partNumber, $uploadId, $options = NULL) + { + $this->precheckCommon($fromBucket, $fromObject, $options); + $this->precheckCommon($toBucket, $toObject, $options); + + //如果没有设置$options['isFullCopy'],则需要强制判断copy的起止位置 + $start_range = "0"; + if (isset($options['start'])) { + $start_range = $options['start']; + } + $end_range = ""; + if (isset($options['end'])) { + $end_range = $options['end']; + } + $options[self::OSS_METHOD] = self::OSS_HTTP_PUT; + $options[self::OSS_BUCKET] = $toBucket; + $options[self::OSS_OBJECT] = $toObject; + $options[self::OSS_PART_NUM] = $partNumber; + $options[self::OSS_UPLOAD_ID] = $uploadId; + + if (!isset($options[self::OSS_HEADERS])) { + $options[self::OSS_HEADERS] = array(); + } + + $options[self::OSS_HEADERS][self::OSS_OBJECT_COPY_SOURCE] = '/' . $fromBucket . '/' . $fromObject; + $options[self::OSS_HEADERS][self::OSS_OBJECT_COPY_SOURCE_RANGE] = "bytes=" . $start_range . "-" . $end_range; + $response = $this->auth($options); + $result = new UploadPartResult($response); + return $result->getData(); + } + + /** + * multipart上传统一封装,从初始化到完成multipart,以及出错后中止动作 + * + * @param string $bucket bucket名称 + * @param string $object object名称 + * @param string $file 需要上传的本地文件的路径 + * @param array $options Key-Value数组 + * @return null + * @throws OssException + */ + public function multiuploadFile($bucket, $object, $file, $options = null) + { + $this->precheckCommon($bucket, $object, $options); + if (isset($options[self::OSS_LENGTH])) { + $options[self::OSS_CONTENT_LENGTH] = $options[self::OSS_LENGTH]; + unset($options[self::OSS_LENGTH]); + } + if (empty($file)) { + throw new OssException("parameter invalid, file is empty"); + } + $uploadFile = OssUtil::encodePath($file); + if (!isset($options[self::OSS_CONTENT_TYPE])) { + $options[self::OSS_CONTENT_TYPE] = $this->getMimeType($object, $uploadFile); + } + + $upload_position = isset($options[self::OSS_SEEK_TO]) ? (integer)$options[self::OSS_SEEK_TO] : 0; + + if (isset($options[self::OSS_CONTENT_LENGTH])) { + $upload_file_size = (integer)$options[self::OSS_CONTENT_LENGTH]; + } else { + $upload_file_size = filesize($uploadFile); + if ($upload_file_size !== false) { + $upload_file_size -= $upload_position; + } + } + + if ($upload_position === false || !isset($upload_file_size) || $upload_file_size === false || $upload_file_size < 0) { + throw new OssException('The size of `fileUpload` cannot be determined in ' . __FUNCTION__ . '().'); + } + // 处理partSize + if (isset($options[self::OSS_PART_SIZE])) { + $options[self::OSS_PART_SIZE] = $this->computePartSize($options[self::OSS_PART_SIZE]); + } else { + $options[self::OSS_PART_SIZE] = self::OSS_MID_PART_SIZE; + } + + $is_check_md5 = $this->isCheckMD5($options); + // 如果上传的文件小于partSize,则直接使用普通方式上传 + if ($upload_file_size < $options[self::OSS_PART_SIZE] && !isset($options[self::OSS_UPLOAD_ID])) { + return $this->uploadFile($bucket, $object, $uploadFile, $options); + } + + // 初始化multipart + if (isset($options[self::OSS_UPLOAD_ID])) { + $uploadId = $options[self::OSS_UPLOAD_ID]; + } else { + // 初始化 + $uploadId = $this->initiateMultipartUpload($bucket, $object, $options); + } + + // 获取的分片 + $pieces = $this->generateMultiuploadParts($upload_file_size, (integer)$options[self::OSS_PART_SIZE]); + $response_upload_part = array(); + foreach ($pieces as $i => $piece) { + $from_pos = $upload_position + (integer)$piece[self::OSS_SEEK_TO]; + $to_pos = (integer)$piece[self::OSS_LENGTH] + $from_pos - 1; + $up_options = array( + self::OSS_FILE_UPLOAD => $uploadFile, + self::OSS_PART_NUM => ($i + 1), + self::OSS_SEEK_TO => $from_pos, + self::OSS_LENGTH => $to_pos - $from_pos + 1, + self::OSS_CHECK_MD5 => $is_check_md5, + ); + if ($is_check_md5) { + $content_md5 = OssUtil::getMd5SumForFile($uploadFile, $from_pos, $to_pos); + $up_options[self::OSS_CONTENT_MD5] = $content_md5; + } + $response_upload_part[] = $this->uploadPart($bucket, $object, $uploadId, $up_options); + } + + $uploadParts = array(); + foreach ($response_upload_part as $i => $etag) { + $uploadParts[] = array( + 'PartNumber' => ($i + 1), + 'ETag' => $etag, + ); + } + return $this->completeMultipartUpload($bucket, $object, $uploadId, $uploadParts); + } + + /** + * 上传本地目录内的文件或者目录到指定bucket的指定prefix的object中 + * + * @param string $bucket bucket名称 + * @param string $prefix 需要上传到的object的key前缀,可以理解成bucket中的子目录,结尾不能是'/',接口中会补充'/' + * @param string $localDirectory 需要上传的本地目录 + * @param string $exclude 需要排除的目录 + * @param bool $recursive 是否递归的上传localDirectory下的子目录内容 + * @param bool $checkMd5 + * @return array 返回两个列表 array("succeededList" => array("object"), "failedList" => array("object"=>"errorMessage")) + * @throws OssException + */ + public function uploadDir($bucket, $prefix, $localDirectory, $exclude = '.|..|.svn|.git', $recursive = false, $checkMd5 = true) + { + $retArray = array("succeededList" => array(), "failedList" => array()); + if (empty($bucket)) throw new OssException("parameter error, bucket is empty"); + if (!is_string($prefix)) throw new OssException("parameter error, prefix is not string"); + if (empty($localDirectory)) throw new OssException("parameter error, localDirectory is empty"); + $directory = $localDirectory; + $directory = OssUtil::encodePath($directory); + //判断是否目录 + if (!is_dir($directory)) { + throw new OssException('parameter error: ' . $directory . ' is not a directory, please check it'); + } + //read directory + $file_list_array = OssUtil::readDir($directory, $exclude, $recursive); + if (!$file_list_array) { + throw new OssException($directory . ' is empty...'); + } + foreach ($file_list_array as $k => $item) { + if (is_dir($item['path'])) { + continue; + } + $options = array( + self::OSS_PART_SIZE => self::OSS_MIN_PART_SIZE, + self::OSS_CHECK_MD5 => $checkMd5, + ); + $realObject = (!empty($prefix) ? $prefix . '/' : '') . $item['file']; + + try { + $this->multiuploadFile($bucket, $realObject, $item['path'], $options); + $retArray["succeededList"][] = $realObject; + } catch (OssException $e) { + $retArray["failedList"][$realObject] = $e->getMessage(); + } + } + return $retArray; + } + + /** + * 支持生成get和put签名, 用户可以生成一个具有一定有效期的 + * 签名过的url + * + * @param string $bucket + * @param string $object + * @param int $timeout + * @param string $method + * @param array $options Key-Value数组 + * @return string + * @throws OssException + */ + public function signUrl($bucket, $object, $timeout = 60, $method = self::OSS_HTTP_GET, $options = NULL) + { + $this->precheckCommon($bucket, $object, $options); + //method + if (self::OSS_HTTP_GET !== $method && self::OSS_HTTP_PUT !== $method) { + throw new OssException("method is invalid"); + } + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_OBJECT] = $object; + $options[self::OSS_METHOD] = $method; + if (!isset($options[self::OSS_CONTENT_TYPE])) { + $options[self::OSS_CONTENT_TYPE] = ''; + } + $timeout = time() + $timeout; + $options[self::OSS_PREAUTH] = $timeout; + $options[self::OSS_DATE] = $timeout; + $this->setSignStsInUrl(true); + return $this->auth($options); + } + + /** + * 检测options参数 + * + * @param array $options + * @throws OssException + */ + private function precheckOptions(&$options) + { + OssUtil::validateOptions($options); + if (!$options) { + $options = array(); + } + } + + /** + * 校验bucket参数 + * + * @param string $bucket + * @param string $errMsg + * @throws OssException + */ + private function precheckBucket($bucket, $errMsg = 'bucket is not allowed empty') + { + OssUtil::throwOssExceptionWithMessageIfEmpty($bucket, $errMsg); + } + + /** + * 校验object参数 + * + * @param string $object + * @throws OssException + */ + private function precheckObject($object) + { + OssUtil::throwOssExceptionWithMessageIfEmpty($object, "object name is empty"); + } + + /** + * 校验option restore + * + * @param string $restore + * @throws OssException + */ + private function precheckStorage($storage) + { + if (is_string($storage)) { + switch ($storage) { + case self::OSS_STORAGE_ARCHIVE: + return; + case self::OSS_STORAGE_IA: + return; + case self::OSS_STORAGE_STANDARD: + return; + default: + break; + } + } + throw new OssException('storage name is invalid'); + } + + /** + * 校验bucket,options参数 + * + * @param string $bucket + * @param string $object + * @param array $options + * @param bool $isCheckObject + */ + private function precheckCommon($bucket, $object, &$options, $isCheckObject = true) + { + if ($isCheckObject) { + $this->precheckObject($object); + } + $this->precheckOptions($options); + $this->precheckBucket($bucket); + } + + /** + * 参数校验 + * + * @param array $options + * @param string $param + * @param string $funcName + * @throws OssException + */ + private function precheckParam($options, $param, $funcName) + { + if (!isset($options[$param])) { + throw new OssException('The `' . $param . '` options is required in ' . $funcName . '().'); + } + } + + /** + * 检测md5 + * + * @param array $options + * @return bool|null + */ + private function isCheckMD5($options) + { + return $this->getValue($options, self::OSS_CHECK_MD5, false, true, true); + } + + /** + * 获取value + * + * @param array $options + * @param string $key + * @param string $default + * @param bool $isCheckEmpty + * @param bool $isCheckBool + * @return bool|null + */ + private function getValue($options, $key, $default = NULL, $isCheckEmpty = false, $isCheckBool = false) + { + $value = $default; + if (isset($options[$key])) { + if ($isCheckEmpty) { + if (!empty($options[$key])) { + $value = $options[$key]; + } + } else { + $value = $options[$key]; + } + unset($options[$key]); + } + if ($isCheckBool) { + if ($value !== true && $value !== false) { + $value = false; + } + } + return $value; + } + + /** + * 获取mimetype类型 + * + * @param string $object + * @return string + */ + private function getMimeType($object, $file = null) + { + if (!is_null($file)) { + $type = MimeTypes::getMimetype($file); + if (!is_null($type)) { + return $type; + } + } + + $type = MimeTypes::getMimetype($object); + if (!is_null($type)) { + return $type; + } + + return self::DEFAULT_CONTENT_TYPE; + } + + /** + * 验证并且执行请求,按照OSS Api协议,执行操作 + * + * @param array $options + * @return ResponseCore + * @throws OssException + * @throws RequestCore_Exception + */ + private function auth($options) + { + OssUtil::validateOptions($options); + //验证bucket,list_bucket时不需要验证 + $this->authPrecheckBucket($options); + //验证object + $this->authPrecheckObject($options); + //Object名称的编码必须是utf8 + $this->authPrecheckObjectEncoding($options); + //验证ACL + $this->authPrecheckAcl($options); + // 获得当次请求使用的协议头,是https还是http + $scheme = $this->useSSL ? 'https://' : 'http://'; + // 获得当次请求使用的hostname,如果是公共域名或者专有域名,bucket拼在前面构成三级域名 + $hostname = $this->generateHostname($options[self::OSS_BUCKET]); + $string_to_sign = ''; + $headers = $this->generateHeaders($options, $hostname); + $signable_query_string_params = $this->generateSignableQueryStringParam($options); + $signable_query_string = OssUtil::toQueryString($signable_query_string_params); + $resource_uri = $this->generateResourceUri($options); + //生成请求URL + $conjunction = '?'; + $non_signable_resource = ''; + if (isset($options[self::OSS_SUB_RESOURCE])) { + $conjunction = '&'; + } + if ($signable_query_string !== '') { + $signable_query_string = $conjunction . $signable_query_string; + $conjunction = '&'; + } + $query_string = $this->generateQueryString($options); + if ($query_string !== '') { + $non_signable_resource .= $conjunction . $query_string; + $conjunction = '&'; + } + $this->requestUrl = $scheme . $hostname . $resource_uri . $signable_query_string . $non_signable_resource; + + //创建请求 + $request = new RequestCore($this->requestUrl, $this->requestProxy); + $request->set_useragent($this->generateUserAgent()); + // Streaming uploads + if (isset($options[self::OSS_FILE_UPLOAD])) { + if (is_resource($options[self::OSS_FILE_UPLOAD])) { + $length = null; + + if (isset($options[self::OSS_CONTENT_LENGTH])) { + $length = $options[self::OSS_CONTENT_LENGTH]; + } elseif (isset($options[self::OSS_SEEK_TO])) { + $stats = fstat($options[self::OSS_FILE_UPLOAD]); + if ($stats && $stats[self::OSS_SIZE] >= 0) { + $length = $stats[self::OSS_SIZE] - (integer)$options[self::OSS_SEEK_TO]; + } + } + $request->set_read_stream($options[self::OSS_FILE_UPLOAD], $length); + } else { + $request->set_read_file($options[self::OSS_FILE_UPLOAD]); + $length = $request->read_stream_size; + if (isset($options[self::OSS_CONTENT_LENGTH])) { + $length = $options[self::OSS_CONTENT_LENGTH]; + } elseif (isset($options[self::OSS_SEEK_TO]) && isset($length)) { + $length -= (integer)$options[self::OSS_SEEK_TO]; + } + $request->set_read_stream_size($length); + } + } + if (isset($options[self::OSS_SEEK_TO])) { + $request->set_seek_position((integer)$options[self::OSS_SEEK_TO]); + } + if (isset($options[self::OSS_FILE_DOWNLOAD])) { + if (is_resource($options[self::OSS_FILE_DOWNLOAD])) { + $request->set_write_stream($options[self::OSS_FILE_DOWNLOAD]); + } else { + $request->set_write_file($options[self::OSS_FILE_DOWNLOAD]); + } + } + + if (isset($options[self::OSS_METHOD])) { + $request->set_method($options[self::OSS_METHOD]); + $string_to_sign .= $options[self::OSS_METHOD] . "\n"; + } + + if (isset($options[self::OSS_CONTENT])) { + $request->set_body($options[self::OSS_CONTENT]); + if ($headers[self::OSS_CONTENT_TYPE] === 'application/x-www-form-urlencoded') { + $headers[self::OSS_CONTENT_TYPE] = 'application/octet-stream'; + } + + $headers[self::OSS_CONTENT_LENGTH] = strlen($options[self::OSS_CONTENT]); + $headers[self::OSS_CONTENT_MD5] = base64_encode(md5($options[self::OSS_CONTENT], true)); + } + + if (isset($options[self::OSS_CALLBACK])) { + $headers[self::OSS_CALLBACK] = base64_encode($options[self::OSS_CALLBACK]); + } + if (isset($options[self::OSS_CALLBACK_VAR])) { + $headers[self::OSS_CALLBACK_VAR] = base64_encode($options[self::OSS_CALLBACK_VAR]); + } + + if (!isset($headers[self::OSS_ACCEPT_ENCODING])) { + $headers[self::OSS_ACCEPT_ENCODING] = ''; + } + + uksort($headers, 'strnatcasecmp'); + + foreach ($headers as $header_key => $header_value) { + $header_value = str_replace(array("\r", "\n"), '', $header_value); + if ($header_value !== '' || $header_key === self::OSS_ACCEPT_ENCODING) { + $request->add_header($header_key, $header_value); + } + + if ( + strtolower($header_key) === 'content-md5' || + strtolower($header_key) === 'content-type' || + strtolower($header_key) === 'date' || + (isset($options['self::OSS_PREAUTH']) && (integer)$options['self::OSS_PREAUTH'] > 0) + ) { + $string_to_sign .= $header_value . "\n"; + } elseif (substr(strtolower($header_key), 0, 6) === self::OSS_DEFAULT_PREFIX) { + $string_to_sign .= strtolower($header_key) . ':' . $header_value . "\n"; + } + } + // 生成 signable_resource + $signable_resource = $this->generateSignableResource($options); + $string_to_sign .= rawurldecode($signable_resource) . urldecode($signable_query_string); + + //对?后面的要签名的string字母序排序 + $string_to_sign_ordered = $this->stringToSignSorted($string_to_sign); + + $signature = base64_encode(hash_hmac('sha1', $string_to_sign_ordered, $this->accessKeySecret, true)); + $request->add_header('Authorization', 'OSS ' . $this->accessKeyId . ':' . $signature); + + if (isset($options[self::OSS_PREAUTH]) && (integer)$options[self::OSS_PREAUTH] > 0) { + $signed_url = $this->requestUrl . $conjunction . self::OSS_URL_ACCESS_KEY_ID . '=' . rawurlencode($this->accessKeyId) . '&' . self::OSS_URL_EXPIRES . '=' . $options[self::OSS_PREAUTH] . '&' . self::OSS_URL_SIGNATURE . '=' . rawurlencode($signature); + return $signed_url; + } elseif (isset($options[self::OSS_PREAUTH])) { + return $this->requestUrl; + } + + if ($this->timeout !== 0) { + $request->timeout = $this->timeout; + } + if ($this->connectTimeout !== 0) { + $request->connect_timeout = $this->connectTimeout; + } + + try { + $request->send_request(); + } catch (RequestCore_Exception $e) { + throw(new OssException('RequestCoreException: ' . $e->getMessage())); + } + $response_header = $request->get_response_header(); + $response_header['oss-request-url'] = $this->requestUrl; + $response_header['oss-redirects'] = $this->redirects; + $response_header['oss-stringtosign'] = $string_to_sign; + $response_header['oss-requestheaders'] = $request->request_headers; + + $data = new ResponseCore($response_header, $request->get_response_body(), $request->get_response_code()); + //retry if OSS Internal Error + if ((integer)$request->get_response_code() === 500) { + if ($this->redirects <= $this->maxRetries) { + //设置休眠 + $delay = (integer)(pow(4, $this->redirects) * 100000); + usleep($delay); + $this->redirects++; + $data = $this->auth($options); + } + } + + $this->redirects = 0; + return $data; + } + + /** + * 设置最大尝试次数 + * + * @param int $maxRetries + * @return void + */ + public function setMaxTries($maxRetries = 3) + { + $this->maxRetries = $maxRetries; + } + + /** + * 获取最大尝试次数 + * + * @return int + */ + public function getMaxRetries() + { + return $this->maxRetries; + } + + /** + * 打开sts enable标志,使用户构造函数中传入的$sts生效 + * + * @param boolean $enable + */ + public function setSignStsInUrl($enable) + { + $this->enableStsInUrl = $enable; + } + + /** + * @return boolean + */ + public function isUseSSL() + { + return $this->useSSL; + } + + /** + * @param boolean $useSSL + */ + public function setUseSSL($useSSL) + { + $this->useSSL = $useSSL; + } + + /** + * 检查bucket名称格式是否正确,如果非法抛出异常 + * + * @param $options + * @throws OssException + */ + private function authPrecheckBucket($options) + { + if (!(('/' == $options[self::OSS_OBJECT]) && ('' == $options[self::OSS_BUCKET]) && ('GET' == $options[self::OSS_METHOD])) && !OssUtil::validateBucket($options[self::OSS_BUCKET])) { + throw new OssException('"' . $options[self::OSS_BUCKET] . '"' . 'bucket name is invalid'); + } + } + + /** + * + * 检查object名称格式是否正确,如果非法抛出异常 + * + * @param $options + * @throws OssException + */ + private function authPrecheckObject($options) + { + if (isset($options[self::OSS_OBJECT]) && $options[self::OSS_OBJECT] === '/') { + return; + } + + if (isset($options[self::OSS_OBJECT]) && !OssUtil::validateObject($options[self::OSS_OBJECT])) { + throw new OssException('"' . $options[self::OSS_OBJECT] . '"' . ' object name is invalid'); + } + } + + /** + * 检查object的编码,如果是gbk或者gb2312则尝试将其转化为utf8编码 + * + * @param mixed $options 参数 + */ + private function authPrecheckObjectEncoding(&$options) + { + $tmp_object = $options[self::OSS_OBJECT]; + try { + if (OssUtil::isGb2312($options[self::OSS_OBJECT])) { + $options[self::OSS_OBJECT] = iconv('GB2312', "UTF-8//IGNORE", $options[self::OSS_OBJECT]); + } elseif (OssUtil::checkChar($options[self::OSS_OBJECT], true)) { + $options[self::OSS_OBJECT] = iconv('GBK', "UTF-8//IGNORE", $options[self::OSS_OBJECT]); + } + } catch (\Exception $e) { + try { + $tmp_object = iconv(mb_detect_encoding($tmp_object), "UTF-8", $tmp_object); + } catch (\Exception $e) { + } + } + $options[self::OSS_OBJECT] = $tmp_object; + } + + /** + * 检查ACL是否是预定义中三种之一,如果不是抛出异常 + * + * @param $options + * @throws OssException + */ + private function authPrecheckAcl($options) + { + if (isset($options[self::OSS_HEADERS][self::OSS_ACL]) && !empty($options[self::OSS_HEADERS][self::OSS_ACL])) { + if (!in_array(strtolower($options[self::OSS_HEADERS][self::OSS_ACL]), self::$OSS_ACL_TYPES)) { + throw new OssException($options[self::OSS_HEADERS][self::OSS_ACL] . ':' . 'acl is invalid(private,public-read,public-read-write)'); + } + } + } + + /** + * 获得档次请求使用的域名 + * bucket在前的三级域名,或者二级域名,如果是cname或者ip的话,则是二级域名 + * + * @param $bucket + * @return string 剥掉协议头的域名 + */ + private function generateHostname($bucket) + { + if ($this->hostType === self::OSS_HOST_TYPE_IP) { + $hostname = $this->hostname; + } elseif ($this->hostType === self::OSS_HOST_TYPE_CNAME) { + $hostname = $this->hostname; + } else { + // 专有域或者官网endpoint + $hostname = ($bucket == '') ? $this->hostname : ($bucket . '.') . $this->hostname; + } + return $hostname; + } + + /** + * 获得当次请求的资源定位字段 + * + * @param $options + * @return string 资源定位字段 + */ + private function generateResourceUri($options) + { + $resource_uri = ""; + + // resource_uri + bucket + if (isset($options[self::OSS_BUCKET]) && '' !== $options[self::OSS_BUCKET]) { + if ($this->hostType === self::OSS_HOST_TYPE_IP) { + $resource_uri = '/' . $options[self::OSS_BUCKET]; + } + } + + // resource_uri + object + if (isset($options[self::OSS_OBJECT]) && '/' !== $options[self::OSS_OBJECT]) { + $resource_uri .= '/' . str_replace(array('%2F', '%25'), array('/', '%'), rawurlencode($options[self::OSS_OBJECT])); + } + + // resource_uri + sub_resource + $conjunction = '?'; + if (isset($options[self::OSS_SUB_RESOURCE])) { + $resource_uri .= $conjunction . $options[self::OSS_SUB_RESOURCE]; + } + return $resource_uri; + } + + /** + * 生成signalbe_query_string_param, array类型 + * + * @param array $options + * @return array + */ + private function generateSignableQueryStringParam($options) + { + $signableQueryStringParams = array(); + $signableList = array( + self::OSS_PART_NUM, + 'response-content-type', + 'response-content-language', + 'response-cache-control', + 'response-content-encoding', + 'response-expires', + 'response-content-disposition', + self::OSS_UPLOAD_ID, + self::OSS_COMP, + self::OSS_LIVE_CHANNEL_STATUS, + self::OSS_LIVE_CHANNEL_START_TIME, + self::OSS_LIVE_CHANNEL_END_TIME, + self::OSS_PROCESS, + self::OSS_POSITION, + self::OSS_SYMLINK, + self::OSS_RESTORE, + ); + + foreach ($signableList as $item) { + if (isset($options[$item])) { + $signableQueryStringParams[$item] = $options[$item]; + } + } + + if ($this->enableStsInUrl && (!is_null($this->securityToken))) { + $signableQueryStringParams["security-token"] = $this->securityToken; + } + + return $signableQueryStringParams; + } + + /** + * 生成用于签名resource段 + * + * @param mixed $options + * @return string + */ + private function generateSignableResource($options) + { + $signableResource = ""; + $signableResource .= '/'; + if (isset($options[self::OSS_BUCKET]) && '' !== $options[self::OSS_BUCKET]) { + $signableResource .= $options[self::OSS_BUCKET]; + // 如果操作没有Object操作的话,这里最后是否有斜线有个trick,ip的域名下,不需要加'/', 否则需要加'/' + if ($options[self::OSS_OBJECT] == '/') { + if ($this->hostType !== self::OSS_HOST_TYPE_IP) { + $signableResource .= "/"; + } + } + } + //signable_resource + object + if (isset($options[self::OSS_OBJECT]) && '/' !== $options[self::OSS_OBJECT]) { + $signableResource .= '/' . str_replace(array('%2F', '%25'), array('/', '%'), rawurlencode($options[self::OSS_OBJECT])); + } + if (isset($options[self::OSS_SUB_RESOURCE])) { + $signableResource .= '?' . $options[self::OSS_SUB_RESOURCE]; + } + return $signableResource; + } + + /** + * 生成query_string + * + * @param mixed $options + * @return string + */ + private function generateQueryString($options) + { + //请求参数 + $queryStringParams = array(); + if (isset($options[self::OSS_QUERY_STRING])) { + $queryStringParams = array_merge($queryStringParams, $options[self::OSS_QUERY_STRING]); + } + return OssUtil::toQueryString($queryStringParams); + } + + private function stringToSignSorted($string_to_sign) + { + $queryStringSorted = ''; + $explodeResult = explode('?', $string_to_sign); + $index = count($explodeResult); + if ($index === 1) + return $string_to_sign; + + $queryStringParams = explode('&', $explodeResult[$index - 1]); + sort($queryStringParams); + + foreach($queryStringParams as $params) + { + $queryStringSorted .= $params . '&'; + } + + $queryStringSorted = substr($queryStringSorted, 0, -1); + + return $explodeResult[0] . '?' . $queryStringSorted; + } + + /** + * 初始化headers + * + * @param mixed $options + * @param string $hostname hostname + * @return array + */ + private function generateHeaders($options, $hostname) + { + $headers = array( + self::OSS_CONTENT_MD5 => '', + self::OSS_CONTENT_TYPE => isset($options[self::OSS_CONTENT_TYPE]) ? $options[self::OSS_CONTENT_TYPE] : self::DEFAULT_CONTENT_TYPE, + self::OSS_DATE => isset($options[self::OSS_DATE]) ? $options[self::OSS_DATE] : gmdate('D, d M Y H:i:s \G\M\T'), + self::OSS_HOST => $hostname, + ); + if (isset($options[self::OSS_CONTENT_MD5])) { + $headers[self::OSS_CONTENT_MD5] = $options[self::OSS_CONTENT_MD5]; + } + + //添加stsSecurityToken + if ((!is_null($this->securityToken)) && (!$this->enableStsInUrl)) { + $headers[self::OSS_SECURITY_TOKEN] = $this->securityToken; + } + //合并HTTP headers + if (isset($options[self::OSS_HEADERS])) { + $headers = array_merge($headers, $options[self::OSS_HEADERS]); + } + return $headers; + } + + /** + * 生成请求用的UserAgent + * + * @return string + */ + private function generateUserAgent() + { + return self::OSS_NAME . "/" . self::OSS_VERSION . " (" . php_uname('s') . "/" . php_uname('r') . "/" . php_uname('m') . ";" . PHP_VERSION . ")"; + } + + /** + * 检查endpoint的种类 + * 如有有协议头,剥去协议头 + * 并且根据参数 is_cname 和endpoint本身,判定域名类型,是ip,cname,还是专有域或者官网域名 + * + * @param string $endpoint + * @param boolean $isCName + * @return string 剥掉协议头的域名 + */ + private function checkEndpoint($endpoint, $isCName) + { + $ret_endpoint = null; + if (strpos($endpoint, 'http://') === 0) { + $ret_endpoint = substr($endpoint, strlen('http://')); + } elseif (strpos($endpoint, 'https://') === 0) { + $ret_endpoint = substr($endpoint, strlen('https://')); + $this->useSSL = true; + } else { + $ret_endpoint = $endpoint; + } + + if ($isCName) { + $this->hostType = self::OSS_HOST_TYPE_CNAME; + } elseif (OssUtil::isIPFormat($ret_endpoint)) { + $this->hostType = self::OSS_HOST_TYPE_IP; + } else { + $this->hostType = self::OSS_HOST_TYPE_NORMAL; + } + return $ret_endpoint; + } + + /** + * 用来检查sdk所以来的扩展是否打开 + * + * @throws OssException + */ + public static function checkEnv() + { + if (function_exists('get_loaded_extensions')) { + //检测curl扩展 + $enabled_extension = array("curl"); + $extensions = get_loaded_extensions(); + if ($extensions) { + foreach ($enabled_extension as $item) { + if (!in_array($item, $extensions)) { + throw new OssException("Extension {" . $item . "} is not installed or not enabled, please check your php env."); + } + } + } else { + throw new OssException("function get_loaded_extensions not found."); + } + } else { + throw new OssException('Function get_loaded_extensions has been disabled, please check php config.'); + } + } + + /** + //* 设置http库的请求超时时间,单位秒 + * + * @param int $timeout + */ + public function setTimeout($timeout) + { + $this->timeout = $timeout; + } + + /** + * 设置http库的连接超时时间,单位秒 + * + * @param int $connectTimeout + */ + public function setConnectTimeout($connectTimeout) + { + $this->connectTimeout = $connectTimeout; + } + + // 生命周期相关常量 + const OSS_LIFECYCLE_EXPIRATION = "Expiration"; + const OSS_LIFECYCLE_TIMING_DAYS = "Days"; + const OSS_LIFECYCLE_TIMING_DATE = "Date"; + //OSS 内部常量 + const OSS_BUCKET = 'bucket'; + const OSS_OBJECT = 'object'; + const OSS_HEADERS = OssUtil::OSS_HEADERS; + const OSS_METHOD = 'method'; + const OSS_QUERY = 'query'; + const OSS_BASENAME = 'basename'; + const OSS_MAX_KEYS = 'max-keys'; + const OSS_UPLOAD_ID = 'uploadId'; + const OSS_PART_NUM = 'partNumber'; + const OSS_COMP = 'comp'; + const OSS_LIVE_CHANNEL_STATUS = 'status'; + const OSS_LIVE_CHANNEL_START_TIME = 'startTime'; + const OSS_LIVE_CHANNEL_END_TIME = 'endTime'; + const OSS_POSITION = 'position'; + const OSS_MAX_KEYS_VALUE = 100; + const OSS_MAX_OBJECT_GROUP_VALUE = OssUtil::OSS_MAX_OBJECT_GROUP_VALUE; + const OSS_MAX_PART_SIZE = OssUtil::OSS_MAX_PART_SIZE; + const OSS_MID_PART_SIZE = OssUtil::OSS_MID_PART_SIZE; + const OSS_MIN_PART_SIZE = OssUtil::OSS_MIN_PART_SIZE; + const OSS_FILE_SLICE_SIZE = 8192; + const OSS_PREFIX = 'prefix'; + const OSS_DELIMITER = 'delimiter'; + const OSS_MARKER = 'marker'; + const OSS_ACCEPT_ENCODING = 'Accept-Encoding'; + const OSS_CONTENT_MD5 = 'Content-Md5'; + const OSS_SELF_CONTENT_MD5 = 'x-oss-meta-md5'; + const OSS_CONTENT_TYPE = 'Content-Type'; + const OSS_CONTENT_LENGTH = 'Content-Length'; + const OSS_IF_MODIFIED_SINCE = 'If-Modified-Since'; + const OSS_IF_UNMODIFIED_SINCE = 'If-Unmodified-Since'; + const OSS_IF_MATCH = 'If-Match'; + const OSS_IF_NONE_MATCH = 'If-None-Match'; + const OSS_CACHE_CONTROL = 'Cache-Control'; + const OSS_EXPIRES = 'Expires'; + const OSS_PREAUTH = 'preauth'; + const OSS_CONTENT_COING = 'Content-Coding'; + const OSS_CONTENT_DISPOSTION = 'Content-Disposition'; + const OSS_RANGE = 'range'; + const OSS_ETAG = 'etag'; + const OSS_LAST_MODIFIED = 'lastmodified'; + const OS_CONTENT_RANGE = 'Content-Range'; + const OSS_CONTENT = OssUtil::OSS_CONTENT; + const OSS_BODY = 'body'; + const OSS_LENGTH = OssUtil::OSS_LENGTH; + const OSS_HOST = 'Host'; + const OSS_DATE = 'Date'; + const OSS_AUTHORIZATION = 'Authorization'; + const OSS_FILE_DOWNLOAD = 'fileDownload'; + const OSS_FILE_UPLOAD = 'fileUpload'; + const OSS_PART_SIZE = 'partSize'; + const OSS_SEEK_TO = 'seekTo'; + const OSS_SIZE = 'size'; + const OSS_QUERY_STRING = 'query_string'; + const OSS_SUB_RESOURCE = 'sub_resource'; + const OSS_DEFAULT_PREFIX = 'x-oss-'; + const OSS_CHECK_MD5 = 'checkmd5'; + const DEFAULT_CONTENT_TYPE = 'application/octet-stream'; + const OSS_SYMLINK_TARGET = 'x-oss-symlink-target'; + const OSS_SYMLINK = 'symlink'; + const OSS_HTTP_CODE = 'http_code'; + const OSS_REQUEST_ID = 'x-oss-request-id'; + const OSS_INFO = 'info'; + const OSS_STORAGE = 'storage'; + const OSS_RESTORE = 'restore'; + const OSS_STORAGE_STANDARD = 'Standard'; + const OSS_STORAGE_IA = 'IA'; + const OSS_STORAGE_ARCHIVE = 'Archive'; + + //私有URL变量 + const OSS_URL_ACCESS_KEY_ID = 'OSSAccessKeyId'; + const OSS_URL_EXPIRES = 'Expires'; + const OSS_URL_SIGNATURE = 'Signature'; + //HTTP方法 + const OSS_HTTP_GET = 'GET'; + const OSS_HTTP_PUT = 'PUT'; + const OSS_HTTP_HEAD = 'HEAD'; + const OSS_HTTP_POST = 'POST'; + const OSS_HTTP_DELETE = 'DELETE'; + const OSS_HTTP_OPTIONS = 'OPTIONS'; + //其他常量 + const OSS_ACL = 'x-oss-acl'; + const OSS_OBJECT_ACL = 'x-oss-object-acl'; + const OSS_OBJECT_GROUP = 'x-oss-file-group'; + const OSS_MULTI_PART = 'uploads'; + const OSS_MULTI_DELETE = 'delete'; + const OSS_OBJECT_COPY_SOURCE = 'x-oss-copy-source'; + const OSS_OBJECT_COPY_SOURCE_RANGE = "x-oss-copy-source-range"; + const OSS_PROCESS = "x-oss-process"; + const OSS_CALLBACK = "x-oss-callback"; + const OSS_CALLBACK_VAR = "x-oss-callback-var"; + //支持STS SecurityToken + const OSS_SECURITY_TOKEN = "x-oss-security-token"; + const OSS_ACL_TYPE_PRIVATE = 'private'; + const OSS_ACL_TYPE_PUBLIC_READ = 'public-read'; + const OSS_ACL_TYPE_PUBLIC_READ_WRITE = 'public-read-write'; + const OSS_ENCODING_TYPE = "encoding-type"; + const OSS_ENCODING_TYPE_URL = "url"; + + // 域名类型 + const OSS_HOST_TYPE_NORMAL = "normal";//http://bucket.oss-cn-hangzhou.aliyuncs.com/object + const OSS_HOST_TYPE_IP = "ip"; //http://1.1.1.1/bucket/object + const OSS_HOST_TYPE_SPECIAL = 'special'; //http://bucket.guizhou.gov/object + const OSS_HOST_TYPE_CNAME = "cname"; //http://mydomain.com/object + //OSS ACL数组 + static $OSS_ACL_TYPES = array( + self::OSS_ACL_TYPE_PRIVATE, + self::OSS_ACL_TYPE_PUBLIC_READ, + self::OSS_ACL_TYPE_PUBLIC_READ_WRITE + ); + // OssClient版本信息 + const OSS_NAME = "aliyun-sdk-php"; + const OSS_VERSION = "2.3.0"; + const OSS_BUILD = "20180105"; + const OSS_AUTHOR = ""; + const OSS_OPTIONS_ORIGIN = 'Origin'; + const OSS_OPTIONS_REQUEST_METHOD = 'Access-Control-Request-Method'; + const OSS_OPTIONS_REQUEST_HEADERS = 'Access-Control-Request-Headers'; + + //是否使用ssl + private $useSSL = false; + private $maxRetries = 3; + private $redirects = 0; + + // 用户提供的域名类型,有四种 OSS_HOST_TYPE_NORMAL, OSS_HOST_TYPE_IP, OSS_HOST_TYPE_SPECIAL, OSS_HOST_TYPE_CNAME + private $hostType = self::OSS_HOST_TYPE_NORMAL; + private $requestUrl; + private $accessKeyId; + private $accessKeySecret; + private $hostname; + private $securityToken; + private $requestProxy = null; + private $enableStsInUrl = false; + private $timeout = 0; + private $connectTimeout = 0; +} diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/AclResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/AclResult.php new file mode 100644 index 000000000..6da086042 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/AclResult.php @@ -0,0 +1,32 @@ +rawResponse->body; + if (empty($content)) { + throw new OssException("body is null"); + } + $xml = simplexml_load_string($content); + if (isset($xml->AccessControlList->Grant)) { + return strval($xml->AccessControlList->Grant); + } else { + throw new OssException("xml format exception"); + } + } +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/AppendResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/AppendResult.php new file mode 100644 index 000000000..433c03eb1 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/AppendResult.php @@ -0,0 +1,27 @@ +rawResponse->header; + if (isset($header["x-oss-next-append-position"])) { + return intval($header["x-oss-next-append-position"]); + } + throw new OssException("cannot get next-append-position"); + } +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/BodyResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/BodyResult.php new file mode 100644 index 000000000..44ba15ef5 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/BodyResult.php @@ -0,0 +1,19 @@ +rawResponse->body) ? "" : $this->rawResponse->body; + } +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/CallbackResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/CallbackResult.php new file mode 100644 index 000000000..514e985c2 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/CallbackResult.php @@ -0,0 +1,21 @@ +rawResponse->status; + if ((int)(intval($status) / 100) == 2 && (int)(intval($status)) !== 203) { + return true; + } + return false; + } + +} diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/CopyObjectResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/CopyObjectResult.php new file mode 100644 index 000000000..498723e1b --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/CopyObjectResult.php @@ -0,0 +1,30 @@ +rawResponse->body; + $xml = simplexml_load_string($body); + $result = array(); + + if (isset($xml->LastModified)) { + $result[] = $xml->LastModified; + } + if (isset($xml->ETag)) { + $result[] = $xml->ETag; + } + + return $result; + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/DeleteObjectsResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/DeleteObjectsResult.php new file mode 100644 index 000000000..dc373b854 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/DeleteObjectsResult.php @@ -0,0 +1,27 @@ +rawResponse->body; + $xml = simplexml_load_string($body); + $objects = array(); + + if (isset($xml->Deleted)) { + foreach($xml->Deleted as $deleteKey) + $objects[] = $deleteKey->Key; + } + return $objects; + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ExistResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ExistResult.php new file mode 100644 index 000000000..f7aa287c8 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ExistResult.php @@ -0,0 +1,35 @@ +rawResponse->status) === 200 ? true : false; + } + + /** + * 根据返回http状态码判断,[200-299]即认为是OK, 判断是否存在的接口,404也认为是一种 + * 有效响应 + * + * @return bool + */ + protected function isResponseOk() + { + $status = $this->rawResponse->status; + if ((int)(intval($status) / 100) == 2 || (int)(intval($status)) === 404) { + return true; + } + return false; + } + +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetCnameResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetCnameResult.php new file mode 100644 index 000000000..eed01f902 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetCnameResult.php @@ -0,0 +1,19 @@ +rawResponse->body; + $config = new CnameConfig(); + $config->parseFromXml($content); + return $config; + } +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetCorsResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetCorsResult.php new file mode 100644 index 000000000..a51afe2a8 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetCorsResult.php @@ -0,0 +1,35 @@ +rawResponse->body; + $config = new CorsConfig(); + $config->parseFromXml($content); + return $config; + } + + /** + * 根据返回http状态码判断,[200-299]即认为是OK, 获取bucket相关配置的接口,404也认为是一种 + * 有效响应 + * + * @return bool + */ + protected function isResponseOk() + { + $status = $this->rawResponse->status; + if ((int)(intval($status) / 100) == 2 || (int)(intval($status)) === 404) { + return true; + } + return false; + } + +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLifecycleResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLifecycleResult.php new file mode 100644 index 000000000..6b440c352 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLifecycleResult.php @@ -0,0 +1,41 @@ +rawResponse->body; + $config = new LifecycleConfig(); + $config->parseFromXml($content); + return $config; + } + + /** + * 根据返回http状态码判断,[200-299]即认为是OK, 获取bucket相关配置的接口,404也认为是一种 + * 有效响应 + * + * @return bool + */ + protected function isResponseOk() + { + $status = $this->rawResponse->status; + if ((int)(intval($status) / 100) == 2 || (int)(intval($status)) === 404) { + return true; + } + return false; + } +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelHistoryResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelHistoryResult.php new file mode 100644 index 000000000..202a6681d --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelHistoryResult.php @@ -0,0 +1,19 @@ +rawResponse->body; + $channelList = new GetLiveChannelHistory(); + $channelList->parseFromXml($content); + return $channelList; + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelInfoResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelInfoResult.php new file mode 100644 index 000000000..d5a9005e7 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelInfoResult.php @@ -0,0 +1,19 @@ +rawResponse->body; + $channelList = new GetLiveChannelInfo(); + $channelList->parseFromXml($content); + return $channelList; + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelStatusResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelStatusResult.php new file mode 100644 index 000000000..6b8a60f59 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelStatusResult.php @@ -0,0 +1,19 @@ +rawResponse->body; + $channelList = new GetLiveChannelStatus(); + $channelList->parseFromXml($content); + return $channelList; + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLocationResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLocationResult.php new file mode 100644 index 000000000..71c4c96e9 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLocationResult.php @@ -0,0 +1,30 @@ +rawResponse->body; + if (empty($content)) { + throw new OssException("body is null"); + } + $xml = simplexml_load_string($content); + return $xml; + } +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLoggingResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLoggingResult.php new file mode 100644 index 000000000..72fc3aeb1 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLoggingResult.php @@ -0,0 +1,41 @@ +rawResponse->body; + $config = new LoggingConfig(); + $config->parseFromXml($content); + return $config; + } + + /** + * 根据返回http状态码判断,[200-299]即认为是OK, 获取bucket相关配置的接口,404也认为是一种 + * 有效响应 + * + * @return bool + */ + protected function isResponseOk() + { + $status = $this->rawResponse->status; + if ((int)(intval($status) / 100) == 2 || (int)(intval($status)) === 404) { + return true; + } + return false; + } +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetRefererResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetRefererResult.php new file mode 100644 index 000000000..aee50d3ae --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetRefererResult.php @@ -0,0 +1,41 @@ +rawResponse->body; + $config = new RefererConfig(); + $config->parseFromXml($content); + return $config; + } + + /** + * 根据返回http状态码判断,[200-299]即认为是OK, 获取bucket相关配置的接口,404也认为是一种 + * 有效响应 + * + * @return bool + */ + protected function isResponseOk() + { + $status = $this->rawResponse->status; + if ((int)(intval($status) / 100) == 2 || (int)(intval($status)) === 404) { + return true; + } + return false; + } +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetStorageCapacityResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetStorageCapacityResult.php new file mode 100644 index 000000000..84e491606 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetStorageCapacityResult.php @@ -0,0 +1,34 @@ +rawResponse->body; + if (empty($content)) { + throw new OssException("body is null"); + } + $xml = simplexml_load_string($content); + if (isset($xml->StorageCapacity)) { + return intval($xml->StorageCapacity); + } else { + throw new OssException("xml format exception"); + } + } +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetWebsiteResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetWebsiteResult.php new file mode 100644 index 000000000..3099172cd --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetWebsiteResult.php @@ -0,0 +1,40 @@ +rawResponse->body; + $config = new WebsiteConfig(); + $config->parseFromXml($content); + return $config; + } + + /** + * 根据返回http状态码判断,[200-299]即认为是OK, 获取bucket相关配置的接口,404也认为是一种 + * 有效响应 + * + * @return bool + */ + protected function isResponseOk() + { + $status = $this->rawResponse->status; + if ((int)(intval($status) / 100) == 2 || (int)(intval($status)) === 404) { + return true; + } + return false; + } +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/HeaderResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/HeaderResult.php new file mode 100644 index 000000000..c9aae561f --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/HeaderResult.php @@ -0,0 +1,23 @@ +rawResponse->header) ? array() : $this->rawResponse->header; + } + +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/InitiateMultipartUploadResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/InitiateMultipartUploadResult.php new file mode 100644 index 000000000..af985f272 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/InitiateMultipartUploadResult.php @@ -0,0 +1,29 @@ +rawResponse->body; + $xml = simplexml_load_string($content); + if (isset($xml->UploadId)) { + return strval($xml->UploadId); + } + throw new OssException("cannot get UploadId"); + } +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListBucketsResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListBucketsResult.php new file mode 100644 index 000000000..a58fb2d61 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListBucketsResult.php @@ -0,0 +1,33 @@ +rawResponse->body; + $xml = new \SimpleXMLElement($content); + if (isset($xml->Buckets) && isset($xml->Buckets->Bucket)) { + foreach ($xml->Buckets->Bucket as $bucket) { + $bucketInfo = new BucketInfo(strval($bucket->Location), + strval($bucket->Name), + strval($bucket->CreationDate)); + $bucketList[] = $bucketInfo; + } + } + return new BucketListInfo($bucketList); + } +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListLiveChannelResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListLiveChannelResult.php new file mode 100644 index 000000000..1a6e2a41f --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListLiveChannelResult.php @@ -0,0 +1,16 @@ +rawResponse->body; + $channelList = new LiveChannelListInfo(); + $channelList->parseFromXml($content); + return $channelList; + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListMultipartUploadResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListMultipartUploadResult.php new file mode 100644 index 000000000..bcb20bf59 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListMultipartUploadResult.php @@ -0,0 +1,55 @@ +rawResponse->body; + $xml = simplexml_load_string($content); + + $encodingType = isset($xml->EncodingType) ? strval($xml->EncodingType) : ""; + $bucket = isset($xml->Bucket) ? strval($xml->Bucket) : ""; + $keyMarker = isset($xml->KeyMarker) ? strval($xml->KeyMarker) : ""; + $keyMarker = OssUtil::decodeKey($keyMarker, $encodingType); + $uploadIdMarker = isset($xml->UploadIdMarker) ? strval($xml->UploadIdMarker) : ""; + $nextKeyMarker = isset($xml->NextKeyMarker) ? strval($xml->NextKeyMarker) : ""; + $nextKeyMarker = OssUtil::decodeKey($nextKeyMarker, $encodingType); + $nextUploadIdMarker = isset($xml->NextUploadIdMarker) ? strval($xml->NextUploadIdMarker) : ""; + $delimiter = isset($xml->Delimiter) ? strval($xml->Delimiter) : ""; + $delimiter = OssUtil::decodeKey($delimiter, $encodingType); + $prefix = isset($xml->Prefix) ? strval($xml->Prefix) : ""; + $prefix = OssUtil::decodeKey($prefix, $encodingType); + $maxUploads = isset($xml->MaxUploads) ? intval($xml->MaxUploads) : 0; + $isTruncated = isset($xml->IsTruncated) ? strval($xml->IsTruncated) : ""; + $listUpload = array(); + + if (isset($xml->Upload)) { + foreach ($xml->Upload as $upload) { + $key = isset($upload->Key) ? strval($upload->Key) : ""; + $key = OssUtil::decodeKey($key, $encodingType); + $uploadId = isset($upload->UploadId) ? strval($upload->UploadId) : ""; + $initiated = isset($upload->Initiated) ? strval($upload->Initiated) : ""; + $listUpload[] = new UploadInfo($key, $uploadId, $initiated); + } + } + return new ListMultipartUploadInfo($bucket, $keyMarker, $uploadIdMarker, + $nextKeyMarker, $nextUploadIdMarker, + $delimiter, $prefix, $maxUploads, $isTruncated, $listUpload); + } +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectsResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectsResult.php new file mode 100644 index 000000000..fcf493d25 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectsResult.php @@ -0,0 +1,71 @@ +rawResponse->body); + $encodingType = isset($xml->EncodingType) ? strval($xml->EncodingType) : ""; + $objectList = $this->parseObjectList($xml, $encodingType); + $prefixList = $this->parsePrefixList($xml, $encodingType); + $bucketName = isset($xml->Name) ? strval($xml->Name) : ""; + $prefix = isset($xml->Prefix) ? strval($xml->Prefix) : ""; + $prefix = OssUtil::decodeKey($prefix, $encodingType); + $marker = isset($xml->Marker) ? strval($xml->Marker) : ""; + $marker = OssUtil::decodeKey($marker, $encodingType); + $maxKeys = isset($xml->MaxKeys) ? intval($xml->MaxKeys) : 0; + $delimiter = isset($xml->Delimiter) ? strval($xml->Delimiter) : ""; + $delimiter = OssUtil::decodeKey($delimiter, $encodingType); + $isTruncated = isset($xml->IsTruncated) ? strval($xml->IsTruncated) : ""; + $nextMarker = isset($xml->NextMarker) ? strval($xml->NextMarker) : ""; + $nextMarker = OssUtil::decodeKey($nextMarker, $encodingType); + return new ObjectListInfo($bucketName, $prefix, $marker, $nextMarker, $maxKeys, $delimiter, $isTruncated, $objectList, $prefixList); + } + + private function parseObjectList($xml, $encodingType) + { + $retList = array(); + if (isset($xml->Contents)) { + foreach ($xml->Contents as $content) { + $key = isset($content->Key) ? strval($content->Key) : ""; + $key = OssUtil::decodeKey($key, $encodingType); + $lastModified = isset($content->LastModified) ? strval($content->LastModified) : ""; + $eTag = isset($content->ETag) ? strval($content->ETag) : ""; + $type = isset($content->Type) ? strval($content->Type) : ""; + $size = isset($content->Size) ? intval($content->Size) : 0; + $storageClass = isset($content->StorageClass) ? strval($content->StorageClass) : ""; + $retList[] = new ObjectInfo($key, $lastModified, $eTag, $type, $size, $storageClass); + } + } + return $retList; + } + + private function parsePrefixList($xml, $encodingType) + { + $retList = array(); + if (isset($xml->CommonPrefixes)) { + foreach ($xml->CommonPrefixes as $commonPrefix) { + $prefix = isset($commonPrefix->Prefix) ? strval($commonPrefix->Prefix) : ""; + $prefix = OssUtil::decodeKey($prefix, $encodingType); + $retList[] = new PrefixInfo($prefix); + } + } + return $retList; + } +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListPartsResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListPartsResult.php new file mode 100644 index 000000000..fd8a1b863 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListPartsResult.php @@ -0,0 +1,42 @@ +rawResponse->body; + $xml = simplexml_load_string($content); + $bucket = isset($xml->Bucket) ? strval($xml->Bucket) : ""; + $key = isset($xml->Key) ? strval($xml->Key) : ""; + $uploadId = isset($xml->UploadId) ? strval($xml->UploadId) : ""; + $nextPartNumberMarker = isset($xml->NextPartNumberMarker) ? intval($xml->NextPartNumberMarker) : ""; + $maxParts = isset($xml->MaxParts) ? intval($xml->MaxParts) : ""; + $isTruncated = isset($xml->IsTruncated) ? strval($xml->IsTruncated) : ""; + $partList = array(); + if (isset($xml->Part)) { + foreach ($xml->Part as $part) { + $partNumber = isset($part->PartNumber) ? intval($part->PartNumber) : ""; + $lastModified = isset($part->LastModified) ? strval($part->LastModified) : ""; + $eTag = isset($part->ETag) ? strval($part->ETag) : ""; + $size = isset($part->Size) ? intval($part->Size) : ""; + $partList[] = new PartInfo($partNumber, $lastModified, $eTag, $size); + } + } + return new ListPartsInfo($bucket, $key, $uploadId, $nextPartNumberMarker, $maxParts, $isTruncated, $partList); + } +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/PutLiveChannelResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/PutLiveChannelResult.php new file mode 100644 index 000000000..dcac86b78 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/PutLiveChannelResult.php @@ -0,0 +1,16 @@ +rawResponse->body; + $channel = new LiveChannelInfo(); + $channel->parseFromXml($content); + return $channel; + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/PutSetDeleteResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/PutSetDeleteResult.php new file mode 100644 index 000000000..97af003b6 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/PutSetDeleteResult.php @@ -0,0 +1,20 @@ + $this->rawResponse->body); + return array_merge($this->rawResponse->header, $body); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/Result.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/Result.php new file mode 100644 index 000000000..491256f00 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/Result.php @@ -0,0 +1,175 @@ +rawResponse = $response; + $this->parseResponse(); + } + + /** + * 获取requestId + * + * @return string + */ + public function getRequestId() + { + if (isset($this->rawResponse) && + isset($this->rawResponse->header) && + isset($this->rawResponse->header['x-oss-request-id']) + ) { + return $this->rawResponse->header['x-oss-request-id']; + } else { + return ''; + } + } + + /** + * 得到返回数据,不同的请求返回数据格式不同 + * + * $return mixed + */ + public function getData() + { + return $this->parsedData; + } + + /** + * 由子类实现,不同的请求返回数据有不同的解析逻辑,由子类实现 + * + * @return mixed + */ + abstract protected function parseDataFromResponse(); + + /** + * 操作是否成功 + * + * @return mixed + */ + public function isOK() + { + return $this->isOk; + } + + /** + * @throws OssException + */ + public function parseResponse() + { + $this->isOk = $this->isResponseOk(); + if ($this->isOk) { + $this->parsedData = $this->parseDataFromResponse(); + } else { + $httpStatus = strval($this->rawResponse->status); + $requestId = strval($this->getRequestId()); + $code = $this->retrieveErrorCode($this->rawResponse->body); + $message = $this->retrieveErrorMessage($this->rawResponse->body); + $body = $this->rawResponse->body; + + $details = array( + 'status' => $httpStatus, + 'request-id' => $requestId, + 'code' => $code, + 'message' => $message, + 'body' => $body + ); + throw new OssException($details); + } + } + + /** + * 尝试从body中获取错误Message + * + * @param $body + * @return string + */ + private function retrieveErrorMessage($body) + { + if (empty($body) || false === strpos($body, 'Message)) { + return strval($xml->Message); + } + return ''; + } + + /** + * 尝试从body中获取错误Code + * + * @param $body + * @return string + */ + private function retrieveErrorCode($body) + { + if (empty($body) || false === strpos($body, 'Code)) { + return strval($xml->Code); + } + return ''; + } + + /** + * 根据返回http状态码判断,[200-299]即认为是OK + * + * @return bool + */ + protected function isResponseOk() + { + $status = $this->rawResponse->status; + if ((int)(intval($status) / 100) == 2) { + return true; + } + return false; + } + + /** + * 返回原始的返回数据 + * + * @return ResponseCore + */ + public function getRawResponse() + { + return $this->rawResponse; + } + + /** + * 标示请求是否成功 + */ + protected $isOk = false; + /** + * 由子类解析过的数据 + */ + protected $parsedData = null; + /** + * 存放auth函数返回的原始Response + * + * @var ResponseCore + */ + protected $rawResponse; +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/SymlinkResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/SymlinkResult.php new file mode 100644 index 000000000..9c6d861a6 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/SymlinkResult.php @@ -0,0 +1,24 @@ +rawResponse->header[OssClient::OSS_SYMLINK_TARGET] = rawurldecode($this->rawResponse->header[OssClient::OSS_SYMLINK_TARGET]); + return $this->rawResponse->header; + } +} + diff --git a/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/UploadPartResult.php b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/UploadPartResult.php new file mode 100644 index 000000000..c6b66d454 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/UploadPartResult.php @@ -0,0 +1,28 @@ +rawResponse->header; + if (isset($header["etag"])) { + return $header["etag"]; + } + throw new OssException("cannot get ETag"); + + } +} \ No newline at end of file diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/AclResultTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/AclResultTest.php new file mode 100644 index 000000000..12f4b1a7e --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/AclResultTest.php @@ -0,0 +1,59 @@ + + + + 00220120222 + user_example + + + public-read + + +BBBB; + + private $invalidXml = << + + +BBBB; + + public function testParseValidXml() + { + $response = new ResponseCore(array(), $this->validXml, 200); + $result = new AclResult($response); + $this->assertEquals("public-read", $result->getData()); + } + + public function testParseNullXml() + { + $response = new ResponseCore(array(), "", 200); + try { + new AclResult($response); + $this->assertTrue(false); + } catch (OssException $e) { + $this->assertEquals('body is null', $e->getMessage()); + } + } + + public function testParseInvalidXml() + { + $response = new ResponseCore(array(), $this->invalidXml, 200); + try { + new AclResult($response); + $this->assertFalse(true); + } catch (OssException $e) { + $this->assertEquals("xml format exception", $e->getMessage()); + } + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BodyResultTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BodyResultTest.php new file mode 100644 index 000000000..af13d4d4c --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BodyResultTest.php @@ -0,0 +1,26 @@ +assertTrue($result->isOK()); + $this->assertEquals($result->getData(), "hi"); + } + + public function testParseInvalid404() + { + $response = new ResponseCore(array(), null, 200); + $result = new BodyResult($response); + $this->assertTrue($result->isOK()); + $this->assertEquals($result->getData(), ""); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BucketCnameTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BucketCnameTest.php new file mode 100644 index 000000000..87c9e5430 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BucketCnameTest.php @@ -0,0 +1,77 @@ +client = Common::getOssClient(); + $this->bucketName = 'php-sdk-test-bucket-' . strval(rand(0, 10000)); + $this->client->createBucket($this->bucketName); + } + + public function tearDown() + { + $this->client->deleteBucket($this->bucketName); + } + + public function testBucketWithoutCname() + { + $cnameConfig = $this->client->getBucketCname($this->bucketName); + $this->assertEquals(0, count($cnameConfig->getCnames())); + } + + public function testAddCname() + { + $this->client->addBucketCname($this->bucketName, 'www.baidu.com'); + $this->client->addBucketCname($this->bucketName, 'www.qq.com'); + + $ret = $this->client->getBucketCname($this->bucketName); + $this->assertEquals(2, count($ret->getCnames())); + + // add another 2 cnames + $this->client->addBucketCname($this->bucketName, 'www.sina.com.cn'); + $this->client->addBucketCname($this->bucketName, 'www.iqiyi.com'); + + $ret = $this->client->getBucketCname($this->bucketName); + $cnames = $ret->getCnames(); + $cnameList = array(); + + foreach ($cnames as $c) { + $cnameList[] = $c['Domain']; + } + $should = array( + 'www.baidu.com', + 'www.qq.com', + 'www.sina.com.cn', + 'www.iqiyi.com' + ); + $this->assertEquals(4, count($cnames)); + $this->assertEquals(sort($should), sort($cnameList)); + } + + public function testDeleteCname() + { + $this->client->addBucketCname($this->bucketName, 'www.baidu.com'); + $this->client->addBucketCname($this->bucketName, 'www.qq.com'); + + $ret = $this->client->getBucketCname($this->bucketName); + $this->assertEquals(2, count($ret->getCnames())); + + // delete one cname + $this->client->deleteBucketCname($this->bucketName, 'www.baidu.com'); + + $ret = $this->client->getBucketCname($this->bucketName); + $this->assertEquals(1, count($ret->getCnames())); + $cnames = $ret->getCnames(); + $this->assertEquals('www.qq.com', $cnames[0]['Domain']); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BucketInfoTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BucketInfoTest.php new file mode 100644 index 000000000..80fa25c8e --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BucketInfoTest.php @@ -0,0 +1,21 @@ +assertNotNull($bucketInfo); + $this->assertEquals('cn-beijing', $bucketInfo->getLocation()); + $this->assertEquals('name', $bucketInfo->getName()); + $this->assertEquals('today', $bucketInfo->getCreateDate()); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BucketLiveChannelTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BucketLiveChannelTest.php new file mode 100644 index 000000000..bed68b036 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BucketLiveChannelTest.php @@ -0,0 +1,283 @@ +client = Common::getOssClient(); + $this->bucketName = 'php-sdk-test-rtmp-bucket-name-' . strval(rand(0, 10000)); + $this->client->createBucket($this->bucketName); + Common::waitMetaSync(); + } + + public function tearDown() + { + ////to delete created bucket + //1. delele live channel + $list = $this->client->listBucketLiveChannels($this->bucketName); + if (count($list->getChannelList()) != 0) + { + foreach($list->getChannelList() as $list) + { + $this->client->deleteBucketLiveChannel($this->bucketName, $list->getName()); + } + } + //2. delete exsited object + $prefix = 'live-test/'; + $delimiter = '/'; + $nextMarker = ''; + $maxkeys = 1000; + $options = array( + 'delimiter' => $delimiter, + 'prefix' => $prefix, + 'max-keys' => $maxkeys, + 'marker' => $nextMarker, + ); + + try { + $listObjectInfo = $this->client->listObjects($this->bucketName, $options); + } catch (OssException $e) { + printf($e->getMessage() . "\n"); + return; + } + + $objectList = $listObjectInfo->getObjectList(); // 文件列表 + if (!empty($objectList)) + { + foreach($objectList as $objectInfo) + $this->client->deleteObject($this->bucketName, $objectInfo->getKey()); + } + //3. delete the bucket + $this->client->deleteBucket($this->bucketName); + } + + public function testPutLiveChannel() + { + $config = new LiveChannelConfig(array( + 'description' => 'live channel 1', + 'type' => 'HLS', + 'fragDuration' => 10, + 'fragCount' => 5, + 'playListName' => 'hello.m3u8' + )); + $info = $this->client->putBucketLiveChannel($this->bucketName, 'live-1', $config); + $this->client->deleteBucketLiveChannel($this->bucketName, 'live-1'); + + $this->assertEquals('live-1', $info->getName()); + $this->assertEquals('live channel 1', $info->getDescription()); + $this->assertEquals(1, count($info->getPublishUrls())); + $this->assertEquals(1, count($info->getPlayUrls())); + } + + public function testPutLiveChannelWithDefaultParams() + { + $config = new LiveChannelConfig(array( + 'description' => 'live channel 1', + 'type' => 'HLS', + )); + $info = $this->client->putBucketLiveChannel($this->bucketName, 'live-1', $config); + $this->client->deleteBucketLiveChannel($this->bucketName, 'live-1'); + + $this->assertEquals('live-1', $info->getName()); + $this->assertEquals('live channel 1', $info->getDescription()); + $this->assertEquals(1, count($info->getPublishUrls())); + $this->assertEquals(1, count($info->getPlayUrls())); + } + + public function testListLiveChannels() + { + $config = new LiveChannelConfig(array( + 'description' => 'live channel 1', + 'type' => 'HLS', + 'fragDuration' => 10, + 'fragCount' => 5, + 'playListName' => 'hello.m3u8' + )); + $this->client->putBucketLiveChannel($this->bucketName, 'live-1', $config); + + $config = new LiveChannelConfig(array( + 'description' => 'live channel 2', + 'type' => 'HLS', + 'fragDuration' => 10, + 'fragCount' => 5, + 'playListName' => 'hello.m3u8' + )); + $this->client->putBucketLiveChannel($this->bucketName, 'live-2', $config); + + $list = $this->client->listBucketLiveChannels($this->bucketName); + + $this->assertEquals($this->bucketName, $list->getBucketName()); + $this->assertEquals(false, $list->getIsTruncated()); + $channels = $list->getChannelList(); + $this->assertEquals(2, count($channels)); + + $chan1 = $channels[0]; + $this->assertEquals('live-1', $chan1->getName()); + $this->assertEquals('live channel 1', $chan1->getDescription()); + $this->assertEquals(1, count($chan1->getPublishUrls())); + $this->assertEquals(1, count($chan1->getPlayUrls())); + + $chan2 = $channels[1]; + $this->assertEquals('live-2', $chan2->getName()); + $this->assertEquals('live channel 2', $chan2->getDescription()); + $this->assertEquals(1, count($chan2->getPublishUrls())); + $this->assertEquals(1, count($chan2->getPlayUrls())); + + $list = $this->client->listBucketLiveChannels($this->bucketName, array( + 'prefix' => 'live-', + 'marker' => 'live-1', + 'max-keys' => 10 + )); + $channels = $list->getChannelList(); + $this->assertEquals(1, count($channels)); + $chan2 = $channels[0]; + $this->assertEquals('live-2', $chan2->getName()); + $this->assertEquals('live channel 2', $chan2->getDescription()); + $this->assertEquals(1, count($chan2->getPublishUrls())); + $this->assertEquals(1, count($chan2->getPlayUrls())); + + $this->client->deleteBucketLiveChannel($this->bucketName, 'live-1'); + $this->client->deleteBucketLiveChannel($this->bucketName, 'live-2'); + $list = $this->client->listBucketLiveChannels($this->bucketName, array( + 'prefix' => 'live-' + )); + $this->assertEquals(0, count($list->getChannelList())); + } + + public function testDeleteLiveChannel() + { + $channelName = 'live-to-delete'; + $config = new LiveChannelConfig(array( + 'description' => 'live channel to delete', + 'type' => 'HLS', + 'fragDuration' => 10, + 'fragCount' => 5, + 'playListName' => 'hello.m3u8' + )); + $this->client->putBucketLiveChannel($this->bucketName, $channelName, $config); + + $this->client->deleteBucketLiveChannel($this->bucketName, $channelName); + $list = $this->client->listBucketLiveChannels($this->bucketName, array( + 'prefix' => $channelName + )); + + $this->assertEquals(0, count($list->getChannelList())); + } + + public function testSignRtmpUrl() + { + $channelName = '90475'; + $bucket = 'douyu'; + $now = time(); + $url = $this->client->signRtmpUrl($bucket, $channelName, 900, array( + 'params' => array( + 'playlistName' => 'playlist.m3u8' + ) + )); + + $ret = parse_url($url); + $this->assertEquals('rtmp', $ret['scheme']); + parse_str($ret['query'], $query); + + $this->assertTrue(isset($query['OSSAccessKeyId'])); + $this->assertTrue(isset($query['Signature'])); + $this->assertTrue(intval($query['Expires']) - ($now + 900) < 3); + $this->assertEquals('playlist.m3u8', $query['playlistName']); + } + + public function testLiveChannelInfo() + { + $channelName = 'live-to-put-status'; + $config = new LiveChannelConfig(array( + 'description' => 'test live channel info', + 'type' => 'HLS', + 'fragDuration' => 10, + 'fragCount' => 5, + 'playListName' => 'hello.m3u8' + )); + $this->client->putBucketLiveChannel($this->bucketName, $channelName, $config); + + $info = $this->client->getLiveChannelInfo($this->bucketName, $channelName); + $this->assertEquals('test live channel info', $info->getDescription()); + $this->assertEquals('enabled', $info->getStatus()); + $this->assertEquals('HLS', $info->getType()); + $this->assertEquals(10, $info->getFragDuration()); + $this->assertEquals(5, $info->getFragCount()); + $this->assertEquals('playlist.m3u8', $info->getPlayListName()); + + $this->client->deleteBucketLiveChannel($this->bucketName, $channelName); + $list = $this->client->listBucketLiveChannels($this->bucketName, array( + 'prefix' => $channelName + )); + $this->assertEquals(0, count($list->getChannelList())); + } + + public function testPutLiveChannelStatus() + { + $channelName = 'live-to-put-status'; + $config = new LiveChannelConfig(array( + 'description' => 'test live channel info', + 'type' => 'HLS', + 'fragDuration' => 10, + 'fragCount' => 5, + 'playListName' => 'hello.m3u8' + )); + $this->client->putBucketLiveChannel($this->bucketName, $channelName, $config); + + $info = $this->client->getLiveChannelInfo($this->bucketName, $channelName); + $this->assertEquals('test live channel info', $info->getDescription()); + $this->assertEquals('enabled', $info->getStatus()); + $this->assertEquals('HLS', $info->getType()); + $this->assertEquals(10, $info->getFragDuration()); + $this->assertEquals(5, $info->getFragCount()); + $this->assertEquals('playlist.m3u8', $info->getPlayListName()); + $status = $this->client->getLiveChannelStatus($this->bucketName, $channelName); + $this->assertEquals('Idle', $status->getStatus()); + + + $resp = $this->client->putLiveChannelStatus($this->bucketName, $channelName, "disabled"); + $info = $this->client->getLiveChannelInfo($this->bucketName, $channelName); + $this->assertEquals('test live channel info', $info->getDescription()); + $this->assertEquals('disabled', $info->getStatus()); + $this->assertEquals('HLS', $info->getType()); + $this->assertEquals(10, $info->getFragDuration()); + $this->assertEquals(5, $info->getFragCount()); + $this->assertEquals('playlist.m3u8', $info->getPlayListName()); + + $status = $this->client->getLiveChannelStatus($this->bucketName, $channelName); + //getLiveChannelInfo + $this->assertEquals('Disabled', $status->getStatus()); + + $this->client->deleteBucketLiveChannel($this->bucketName, $channelName); + $list = $this->client->listBucketLiveChannels($this->bucketName, array( + 'prefix' => $channelName + )); + $this->assertEquals(0, count($list->getChannelList())); + + } + public function testLiveChannelHistory() + { + $channelName = 'live-test-history'; + $config = new LiveChannelConfig(array( + 'description' => 'test live channel info', + 'type' => 'HLS', + 'fragDuration' => 10, + 'fragCount' => 5, + 'playListName' => 'hello.m3u8' + )); + $this->client->putBucketLiveChannel($this->bucketName, $channelName, $config); + + $history = $this->client->getLiveChannelHistory($this->bucketName, $channelName); + $this->assertEquals(0, count($history->getLiveRecordList())); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CallbackTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CallbackTest.php new file mode 100644 index 000000000..a0db00379 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CallbackTest.php @@ -0,0 +1,297 @@ +ossClient->putObject($this->bucket, $copiedObject, file_get_contents(__FILE__)); + + /** + * step 1. 初始化一个分块上传事件, 也就是初始化上传Multipart, 获取upload id + */ + try { + $upload_id = $this->ossClient->initiateMultipartUpload($this->bucket, $object); + } catch (OssException $e) { + $this->assertFalse(true); + } + /* + * step 2. uploadPartCopy + */ + $copyId = 1; + $eTag = $this->ossClient->uploadPartCopy($this->bucket, $copiedObject, $this->bucket, $object, $copyId, $upload_id); + $upload_parts[] = array( + 'PartNumber' => $copyId, + 'ETag' => $eTag, + ); + + try { + $listPartsInfo = $this->ossClient->listParts($this->bucket, $object, $upload_id); + $this->assertNotNull($listPartsInfo); + } catch (OssException $e) { + $this->assertTrue(false); + } + + /** + * step 3. + */ + + $json = + '{ + "callbackUrl":"oss-demo.aliyuncs.com:23450", + "callbackHost":"oss-cn-hangzhou.aliyuncs.com", + "callbackBody":"{\"mimeType\":${mimeType},\"size\":${size},\"x:var1\":${x:var1},\"x:var2\":${x:var2}}", + "callbackBodyType":"application/json" + }'; + + $var = + '{ + "x:var1":"value1", + "x:var2":"值2" + }'; + $options = array(OssClient::OSS_CALLBACK => $json, + OssClient::OSS_CALLBACK_VAR => $var + ); + + try { + $result = $this->ossClient->completeMultipartUpload($this->bucket, $object, $upload_id, $upload_parts, $options); + $this->assertEquals("200", $result['info']['http_code']); + $this->assertEquals("{\"Status\":\"OK\"}", $result['body']); + } catch (OssException $e) { + $this->assertTrue(false); + } + } + + public function testMultipartUploadCallbackFailed() + { + $object = "multipart-callback-test.txt"; + $copiedObject = "multipart-callback-test.txt.copied"; + $this->ossClient->putObject($this->bucket, $copiedObject, file_get_contents(__FILE__)); + + /** + * step 1. 初始化一个分块上传事件, 也就是初始化上传Multipart, 获取upload id + */ + try { + $upload_id = $this->ossClient->initiateMultipartUpload($this->bucket, $object); + } catch (OssException $e) { + $this->assertFalse(true); + } + /* + * step 2. uploadPartCopy + */ + $copyId = 1; + $eTag = $this->ossClient->uploadPartCopy($this->bucket, $copiedObject, $this->bucket, $object, $copyId, $upload_id); + $upload_parts[] = array( + 'PartNumber' => $copyId, + 'ETag' => $eTag, + ); + + try { + $listPartsInfo = $this->ossClient->listParts($this->bucket, $object, $upload_id); + $this->assertNotNull($listPartsInfo); + } catch (OssException $e) { + $this->assertTrue(false); + } + + /** + * step 3. + */ + + $json = + '{ + "callbackUrl":"www.baidu.com", + "callbackHost":"oss-cn-hangzhou.aliyuncs.com", + "callbackBody":"{\"mimeType\":${mimeType},\"size\":${size},\"x:var1\":${x:var1},\"x:var2\":${x:var2}}", + "callbackBodyType":"application/json" + }'; + + $var = + '{ + "x:var1":"value1", + "x:var2":"值2" + }'; + $options = array(OssClient::OSS_CALLBACK => $json, + OssClient::OSS_CALLBACK_VAR => $var + ); + + try { + $result = $this->ossClient->completeMultipartUpload($this->bucket, $object, $upload_id, $upload_parts, $options); + $this->assertTrue(false); + } catch (OssException $e) { + $this->assertTrue(true); + $this->assertEquals("203", $e->getHTTPStatus()); + } + + } + + public function testPutObjectCallbackNormal() + { + //json + { + $json = + '{ + "callbackUrl":"oss-demo.aliyuncs.com:23450", + "callbackHost":"oss-cn-hangzhou.aliyuncs.com", + "callbackBody":"{\"mimeType\":${mimeType},\"size\":${size}}", + "callbackBodyType":"application/json" + }'; + $options = array(OssClient::OSS_CALLBACK => $json); + $this->putObjectCallbackOk($options, "200"); + } + //url + { + $url = + '{ + "callbackUrl":"oss-demo.aliyuncs.com:23450", + "callbackHost":"oss-cn-hangzhou.aliyuncs.com", + "callbackBody":"bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&imageInfo.height=${imageInfo.height}&imageInfo.width=${imageInfo.width}&imageInfo.format=${imageInfo.format}", + "callbackBodyType":"application/x-www-form-urlencoded" + }'; + $options = array(OssClient::OSS_CALLBACK => $url); + $this->putObjectCallbackOk($options, "200"); + } + // Unspecified typre + { + $url = + '{ + "callbackUrl":"oss-demo.aliyuncs.com:23450", + "callbackHost":"oss-cn-hangzhou.aliyuncs.com", + "callbackBody":"bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&imageInfo.height=${imageInfo.height}&imageInfo.width=${imageInfo.width}&imageInfo.format=${imageInfo.format}" + }'; + $options = array(OssClient::OSS_CALLBACK => $url); + $this->putObjectCallbackOk($options, "200"); + } + //json and body is chinese + { + $json = + '{ + "callbackUrl":"oss-demo.aliyuncs.com:23450", + "callbackHost":"oss-cn-hangzhou.aliyuncs.com", + "callbackBody":"{\" 春水碧于天,画船听雨眠。\":\"垆边人似月,皓腕凝霜雪。\"}", + "callbackBodyType":"application/json" + }'; + $options = array(OssClient::OSS_CALLBACK => $json); + $this->putObjectCallbackOk($options, "200"); + } + //url and body is chinese + { + $url = + '{ + "callbackUrl":"oss-demo.aliyuncs.com:23450", + "callbackHost":"oss-cn-hangzhou.aliyuncs.com", + "callbackBody":"春水碧于天,画船听雨眠。垆边人似月,皓腕凝霜雪", + "callbackBodyType":"application/x-www-form-urlencoded" + }'; + $options = array(OssClient::OSS_CALLBACK => $url); + $this->putObjectCallbackOk($options, "200"); + } + //json and add callback_var + { + $json = + '{ + "callbackUrl":"oss-demo.aliyuncs.com:23450", + "callbackHost":"oss-cn-hangzhou.aliyuncs.com", + "callbackBody":"{\"mimeType\":${mimeType},\"size\":${size},\"x:var1\":${x:var1},\"x:var2\":${x:var2}}", + "callbackBodyType":"application/json" + }'; + + $var = + '{ + "x:var1":"value1", + "x:var2":"aliyun.com" + }'; + $options = array(OssClient::OSS_CALLBACK => $json, + OssClient::OSS_CALLBACK_VAR => $var + ); + $this->putObjectCallbackOk($options, "200"); + } + //url and add callback_var + { + $url = + '{ + "callbackUrl":"oss-demo.aliyuncs.com:23450", + "callbackHost":"oss-cn-hangzhou.aliyuncs.com", + "callbackBody":"bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&imageInfo.height=${imageInfo.height}&imageInfo.width=${imageInfo.width}&imageInfo.format=${imageInfo.format}&my_var1=${x:var1}&my_var2=${x:var2}", + "callbackBodyType":"application/x-www-form-urlencoded" + }'; + $var = + '{ + "x:var1":"value1凌波不过横塘路,但目送,芳", + "x:var2":"值2" + }'; + $options = array(OssClient::OSS_CALLBACK => $url, + OssClient::OSS_CALLBACK_VAR => $var + ); + $this->putObjectCallbackOk($options, "200"); + } + + } + + public function testPutCallbackWithCallbackFailed() + { + { + $json = + '{ + "callbackUrl":"http://www.baidu.com", + "callbackHost":"oss-cn-hangzhou.aliyuncs.com", + "callbackBody":"{\"mimeType\":${mimeType},\"size\":${size}}", + "callbackBodyType":"application/json" + }'; + $options = array(OssClient::OSS_CALLBACK => $json); + $this->putObjectCallbackFailed($options, "203"); + } + + { + $url = + '{ + "callbackUrl":"http://www.baidu.com", + "callbackHost":"oss-cn-hangzhou.aliyuncs.com", + "callbackBody":"bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&imageInfo.height=${imageInfo.height}&imageInfo.width=${imageInfo.width}&imageInfo.format=${imageInfo.format}&my_var1=${x:var1}&my_var2=${x:var2}", + "callbackBodyType":"application/x-www-form-urlencoded" + }'; + $options = array(OssClient::OSS_CALLBACK => $url); + $this->putObjectCallbackFailed($options, "203"); + } + + } + + private function putObjectCallbackOk($options, $status) + { + $object = "oss-php-sdk-callback-test.txt"; + $content = file_get_contents(__FILE__); + try { + $result = $this->ossClient->putObject($this->bucket, $object, $content, $options); + $this->assertEquals($status, $result['info']['http_code']); + $this->assertEquals("{\"Status\":\"OK\"}", $result['body']); + } catch (OssException $e) { + $this->assertFalse(true); + } + } + + private function putObjectCallbackFailed($options, $status) + { + $object = "oss-php-sdk-callback-test.txt"; + $content = file_get_contents(__FILE__); + try { + $result = $this->ossClient->putObject($this->bucket, $object, $content, $options); + $this->assertTrue(false); + } catch (OssException $e) { + $this->assertEquals($status, $e->getHTTPStatus()); + $this->assertTrue(true); + } + } + + public function setUp() + { + parent::setUp(); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CnameConfigTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CnameConfigTest.php new file mode 100644 index 000000000..e3c1ce902 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CnameConfigTest.php @@ -0,0 +1,77 @@ + + + + www.foo.com + enabled + 20150101 + + + bar.com + disabled + 20160101 + + +BBBB; + + public function testFromXml() + { + $cnameConfig = new CnameConfig(); + $cnameConfig->parseFromXml($this->xml1); + + $cnames = $cnameConfig->getCnames(); + $this->assertEquals(2, count($cnames)); + $this->assertEquals('www.foo.com', $cnames[0]['Domain']); + $this->assertEquals('enabled', $cnames[0]['Status']); + $this->assertEquals('20150101', $cnames[0]['LastModified']); + + $this->assertEquals('bar.com', $cnames[1]['Domain']); + $this->assertEquals('disabled', $cnames[1]['Status']); + $this->assertEquals('20160101', $cnames[1]['LastModified']); + } + + public function testToXml() + { + $cnameConfig = new CnameConfig(); + $cnameConfig->addCname('www.foo.com'); + $cnameConfig->addCname('bar.com'); + + $xml = $cnameConfig->serializeToXml(); + $comp = new CnameConfig(); + $comp->parseFromXml($xml); + + $cnames1 = $cnameConfig->getCnames(); + $cnames2 = $comp->getCnames(); + + $this->assertEquals(count($cnames1), count($cnames2)); + $this->assertEquals(count($cnames1[0]), count($cnames2[0])); + $this->assertEquals(1, count($cnames1[0])); + $this->assertEquals($cnames1[0]['Domain'], $cnames2[0]['Domain']); + } + + public function testCnameNumberLimit() + { + $cnameConfig = new CnameConfig(); + for ($i = 0; $i < CnameConfig::OSS_MAX_RULES; $i += 1) { + $cnameConfig->addCname(strval($i) . '.foo.com'); + } + try { + $cnameConfig->addCname('www.foo.com'); + $this->assertFalse(true); + } catch (OssException $e) { + $this->assertEquals( + $e->getMessage(), + "num of cname in the config exceeds self::OSS_MAX_RULES: " . strval(CnameConfig::OSS_MAX_RULES)); + } + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/Common.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/Common.php new file mode 100644 index 000000000..9d7190ccf --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/Common.php @@ -0,0 +1,70 @@ +getMessage() . "\n"); + return null; + } + return $ossClient; + } + + public static function getBucketName() + { + return getenv('OSS_BUCKET'); + } + + /** + * 工具方法,创建一个bucket + */ + public static function createBucket() + { + $ossClient = self::getOssClient(); + if (is_null($ossClient)) exit(1); + $bucket = self::getBucketName(); + $acl = OssClient::OSS_ACL_TYPE_PUBLIC_READ; + try { + $ossClient->createBucket($bucket, $acl); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); + } + + /** + * Wait for bucket meta sync + */ + public static function waitMetaSync() + { + if (getenv('TRAVIS')) { + sleep(10); + } + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ContentTypeTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ContentTypeTest.php new file mode 100644 index 000000000..606c81041 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ContentTypeTest.php @@ -0,0 +1,133 @@ +/dev/null', $output, $status); + + $this->assertEquals(0, $status); + } + + private function getContentType($bucket, $object) + { + $client = Common::getOssClient(); + $headers = $client->getObjectMeta($bucket, $object); + return $headers['content-type']; + } + + public function testByFileName() + { + $client = Common::getOssClient(); + $bucket = Common::getBucketName(); + + $file = '/tmp/x.html'; + $object = 'test/x'; + $this->runCmd('touch ' . $file); + + $client->uploadFile($bucket, $object, $file); + $type = $this->getContentType($bucket, $object); + + $this->assertEquals('text/html', $type); + + $file = '/tmp/x.json'; + $object = 'test/y'; + $this->runCmd('dd if=/dev/urandom of=' . $file . ' bs=1024 count=100'); + + $client->multiuploadFile($bucket, $object, $file, array('partSize' => 100)); + $type = $this->getContentType($bucket, $object); + + $this->assertEquals('application/json', $type); + } + + public function testByObjectKey() + { + $client = Common::getOssClient(); + $bucket = Common::getBucketName(); + + $object = "test/x.txt"; + $client->putObject($bucket, $object, "hello world"); + $type = $this->getContentType($bucket, $object); + + $this->assertEquals('text/plain', $type); + + $file = '/tmp/x.html'; + $object = 'test/x.txt'; + $this->runCmd('touch ' . $file); + + $client->uploadFile($bucket, $object, $file); + $type = $this->getContentType($bucket, $object); + + $this->assertEquals('text/html', $type); + + $file = '/tmp/x.none'; + $object = 'test/x.txt'; + $this->runCmd('touch ' . $file); + + $client->uploadFile($bucket, $object, $file); + $type = $this->getContentType($bucket, $object); + + $this->assertEquals('text/plain', $type); + + $file = '/tmp/x.mp3'; + $object = 'test/y.json'; + $this->runCmd('dd if=/dev/urandom of=' . $file . ' bs=1024 count=100'); + + $client->multiuploadFile($bucket, $object, $file, array('partSize' => 100)); + $type = $this->getContentType($bucket, $object); + + $this->assertEquals('audio/mpeg', $type); + + $file = '/tmp/x.none'; + $object = 'test/y.json'; + $this->runCmd('dd if=/dev/urandom of=' . $file . ' bs=1024 count=100'); + + $client->multiuploadFile($bucket, $object, $file, array('partSize' => 100)); + $type = $this->getContentType($bucket, $object); + + $this->assertEquals('application/json', $type); + } + + public function testByUser() + { + $client = Common::getOssClient(); + $bucket = Common::getBucketName(); + + $object = "test/x.txt"; + $client->putObject($bucket, $object, "hello world", array( + 'Content-Type' => 'text/html' + )); + $type = $this->getContentType($bucket, $object); + + $this->assertEquals('text/html', $type); + + $file = '/tmp/x.html'; + $object = 'test/x'; + $this->runCmd('touch ' . $file); + + $client->uploadFile($bucket, $object, $file, array( + 'Content-Type' => 'application/json' + )); + $type = $this->getContentType($bucket, $object); + + $this->assertEquals('application/json', $type); + + $file = '/tmp/x.json'; + $object = 'test/y'; + $this->runCmd('dd if=/dev/urandom of=' . $file . ' bs=1024 count=100'); + + $client->multiuploadFile($bucket, $object, $file, array( + 'partSize' => 100, + 'Content-Type' => 'audio/mpeg' + )); + $type = $this->getContentType($bucket, $object); + + $this->assertEquals('audio/mpeg', $type); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CopyObjectResult.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CopyObjectResult.php new file mode 100644 index 000000000..171d4c84d --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CopyObjectResult.php @@ -0,0 +1,52 @@ + + + Fri, 24 Feb 2012 07:18:48 GMT + "5B3C1A2E053D763E1B002CC607C5A0FE" + +BBBB; + + public function testNullResponse() + { + $response = null; + try { + new CopyObjectResult($response); + $this->assertFalse(true); + } catch (OssException $e) { + $this->assertEquals('raw response is null', $e->getMessage()); + } + } + + public function testOkResponse() + { + $header= array(); + $response = new ResponseCore($header, $this->body, 200); + $result = new CopyObjectResult($response); + $data = $result->getData(); + $this->assertTrue($result->isOK()); + $this->assertEquals("Fri, 24 Feb 2012 07:18:48 GMT", $data[0]); + $this->assertEquals("\"5B3C1A2E053D763E1B002CC607C5A0FE\"", $data[1]); + } + + public function testFailResponse() + { + $response = new ResponseCore(array(), "", 404); + try { + new CopyObjectResult($response); + $this->assertFalse(true); + } catch (OssException $e) { + + } + } + +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CorsConfigTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CorsConfigTest.php new file mode 100644 index 000000000..ddc4d3ab8 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CorsConfigTest.php @@ -0,0 +1,140 @@ + + + +http://www.b.com +http://www.a.com +http://www.a.com +GET +PUT +POST +x-oss-test +x-oss-test2 +x-oss-test2 +x-oss-test3 +x-oss-test1 +x-oss-test1 +x-oss-test2 +10 + + +http://www.b.com +GET +x-oss-test +x-oss-test1 +110 + + +BBBB; + + private $validXml2 = << + + +http://www.b.com +http://www.a.com +http://www.a.com +GET +PUT +POST +x-oss-test +x-oss-test2 +x-oss-test2 +x-oss-test3 +x-oss-test1 +x-oss-test1 +x-oss-test2 +10 + + +BBBB; + + public function testParseValidXml() + { + $corsConfig = new CorsConfig(); + $corsConfig->parseFromXml($this->validXml); + $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml($corsConfig->serializeToXml())); + $this->assertNotNull($corsConfig->getRules()); + $rules = $corsConfig->getRules(); + $this->assertNotNull($rules[0]->getAllowedHeaders()); + $this->assertNotNull($rules[0]->getAllowedMethods()); + $this->assertNotNull($rules[0]->getAllowedOrigins()); + $this->assertNotNull($rules[0]->getExposeHeaders()); + $this->assertNotNull($rules[0]->getMaxAgeSeconds()); + } + + public function testParseValidXml2() + { + $corsConfig = new CorsConfig(); + $corsConfig->parseFromXml($this->validXml2); + $this->assertEquals($this->cleanXml($this->validXml2), $this->cleanXml($corsConfig->serializeToXml())); + } + + public function testCreateCorsConfigFromMoreThan10Rules() + { + $corsConfig = new CorsConfig(); + $rule = new CorsRule(); + for ($i = 0; $i < CorsConfig::OSS_MAX_RULES; $i += 1) { + $corsConfig->addRule($rule); + } + try { + $corsConfig->addRule($rule); + $this->assertFalse(true); + } catch (OssException $e) { + $this->assertEquals($e->getMessage(), "num of rules in the config exceeds self::OSS_MAX_RULES: " . strval(CorsConfig::OSS_MAX_RULES)); + } + } + + public function testCreateCorsConfigParamAbsent() + { + $corsConfig = new CorsConfig(); + $rule = new CorsRule(); + $corsConfig->addRule($rule); + + try { + $xml = $corsConfig->serializeToXml(); + $this->assertFalse(true); + } catch (OssException $e) { + $this->assertEquals($e->getMessage(), "maxAgeSeconds is not set in the Rule"); + } + } + + public function testCreateCorsConfigFromScratch() + { + $corsConfig = new CorsConfig(); + $rule = new CorsRule(); + $rule->addAllowedHeader("x-oss-test"); + $rule->addAllowedHeader("x-oss-test2"); + $rule->addAllowedHeader("x-oss-test2"); + $rule->addAllowedHeader("x-oss-test3"); + $rule->addAllowedOrigin("http://www.b.com"); + $rule->addAllowedOrigin("http://www.a.com"); + $rule->addAllowedOrigin("http://www.a.com"); + $rule->addAllowedMethod("GET"); + $rule->addAllowedMethod("PUT"); + $rule->addAllowedMethod("POST"); + $rule->addExposeHeader("x-oss-test1"); + $rule->addExposeHeader("x-oss-test1"); + $rule->addExposeHeader("x-oss-test2"); + $rule->setMaxAgeSeconds(10); + $corsConfig->addRule($rule); + $this->assertEquals($this->cleanXml($this->validXml2), $this->cleanXml($corsConfig->serializeToXml())); + $this->assertEquals($this->cleanXml($this->validXml2), $this->cleanXml(strval($corsConfig))); + } + + private function cleanXml($xml) + { + return str_replace("\n", "", str_replace("\r", "", $xml)); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ExistResultTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ExistResultTest.php new file mode 100644 index 000000000..e1b4e8142 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ExistResultTest.php @@ -0,0 +1,38 @@ +assertTrue($result->isOK()); + $this->assertEquals($result->getData(), true); + } + + public function testParseInvalid404() + { + $response = new ResponseCore(array(), "", 404); + $result = new ExistResult($response); + $this->assertTrue($result->isOK()); + $this->assertEquals($result->getData(), false); + } + + public function testInvalidResponse() + { + $response = new ResponseCore(array(), "", 300); + try { + new ExistResult($response); + $this->assertTrue(false); + } catch (OssException $e) { + + } + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetCorsResultTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetCorsResultTest.php new file mode 100644 index 000000000..a3281c856 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetCorsResultTest.php @@ -0,0 +1,67 @@ + + + +http://www.b.com +http://www.a.com +http://www.a.com +GET +PUT +POST +x-oss-test +x-oss-test2 +x-oss-test2 +x-oss-test3 +x-oss-test1 +x-oss-test1 +x-oss-test2 +10 + + +http://www.b.com +GET +x-oss-test +x-oss-test1 +110 + + +BBBB; + + public function testParseValidXml() + { + $response = new ResponseCore(array(), $this->validXml, 200); + $result = new GetCorsResult($response); + $this->assertTrue($result->isOK()); + $this->assertNotNull($result->getData()); + $this->assertNotNull($result->getRawResponse()); + $corsConfig = $result->getData(); + $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml($corsConfig->serializeToXml())); + } + + private function cleanXml($xml) + { + return str_replace("\n", "", str_replace("\r", "", $xml)); + } + + public function testInvalidResponse() + { + $response = new ResponseCore(array(), $this->validXml, 300); + try { + new GetCorsResult($response); + $this->assertTrue(false); + } catch (OssException $e) { + + } + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetLifecycleResultTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetLifecycleResultTest.php new file mode 100644 index 000000000..92ae2086a --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetLifecycleResultTest.php @@ -0,0 +1,59 @@ + + + +delete obsoleted files +obsoleted/ +Enabled +3 + + +delete temporary files +temporary/ +Enabled +2022-10-12T00:00:00.000Z +2022-10-12T00:00:00.000Z + + +BBBB; + + public function testParseValidXml() + { + $response = new ResponseCore(array(), $this->validXml, 200); + $result = new GetLifecycleResult($response); + $this->assertTrue($result->isOK()); + $this->assertNotNull($result->getData()); + $this->assertNotNull($result->getRawResponse()); + $lifecycleConfig = $result->getData(); + $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml($lifecycleConfig->serializeToXml())); + } + + private function cleanXml($xml) + { + return str_replace("\n", "", str_replace("\r", "", $xml)); + } + + public function testInvalidResponse() + { + $response = new ResponseCore(array(), $this->validXml, 300); + try { + new GetLifecycleResult($response); + $this->assertTrue(false); + } catch (OssException $e) { + + } + } + +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetLoggingResultTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetLoggingResultTest.php new file mode 100644 index 000000000..619501481 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetLoggingResultTest.php @@ -0,0 +1,51 @@ + + + +TargetBucket +TargetPrefix + + +BBBB; + + public function testParseValidXml() + { + $response = new ResponseCore(array(), $this->validXml, 200); + $result = new GetLoggingResult($response); + $this->assertTrue($result->isOK()); + $this->assertNotNull($result->getData()); + $this->assertNotNull($result->getRawResponse()); + $loggingConfig = $result->getData(); + $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml($loggingConfig->serializeToXml())); + $this->assertEquals("TargetBucket", $loggingConfig->getTargetBucket()); + $this->assertEquals("TargetPrefix", $loggingConfig->getTargetPrefix()); + } + + private function cleanXml($xml) + { + return str_replace("\n", "", str_replace("\r", "", $xml)); + } + + public function testInvalidResponse() + { + $response = new ResponseCore(array(), $this->validXml, 300); + try { + new GetLoggingResult($response); + $this->assertTrue(false); + } catch (OssException $e) { + + } + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetRefererResultTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetRefererResultTest.php new file mode 100644 index 000000000..072aa43ac --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetRefererResultTest.php @@ -0,0 +1,51 @@ + + +true + +http://www.aliyun.com +https://www.aliyun.com +http://www.*.com +https://www.?.aliyuncs.com + + +BBBB; + + public function testParseValidXml() + { + $response = new ResponseCore(array(), $this->validXml, 200); + $result = new GetRefererResult($response); + $this->assertTrue($result->isOK()); + $this->assertNotNull($result->getData()); + $this->assertNotNull($result->getRawResponse()); + $refererConfig = $result->getData(); + $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml($refererConfig->serializeToXml())); + } + + private function cleanXml($xml) + { + return str_replace("\n", "", str_replace("\r", "", $xml)); + } + + public function testInvalidResponse() + { + $response = new ResponseCore(array(), $this->validXml, 300); + try { + new GetRefererResult($response); + $this->assertTrue(false); + } catch (OssException $e) { + + } + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetWebsiteResultTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetWebsiteResultTest.php new file mode 100644 index 000000000..70e155943 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetWebsiteResultTest.php @@ -0,0 +1,50 @@ + + + +index.html + + +errorDocument.html + + +BBBB; + + public function testParseValidXml() + { + $response = new ResponseCore(array(), $this->validXml, 200); + $result = new GetWebsiteResult($response); + $this->assertTrue($result->isOK()); + $this->assertNotNull($result->getData()); + $this->assertNotNull($result->getRawResponse()); + $websiteConfig = $result->getData(); + $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml($websiteConfig->serializeToXml())); + } + + private function cleanXml($xml) + { + return str_replace("\n", "", str_replace("\r", "", $xml)); + } + + public function testInvalidResponse() + { + $response = new ResponseCore(array(), $this->validXml, 300); + try { + new GetWebsiteResult($response); + $this->assertTrue(false); + } catch (OssException $e) { + + } + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/HeaderResultTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/HeaderResultTest.php new file mode 100644 index 000000000..dae497544 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/HeaderResultTest.php @@ -0,0 +1,23 @@ + 'value'), "", 200); + $result = new HeaderResult($response); + $this->assertTrue($result->isOK()); + $this->assertTrue(is_array($result->getData())); + $data = $result->getData(); + $this->assertEquals($data['key'], 'value'); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/HttpTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/HttpTest.php new file mode 100644 index 000000000..a59dfcd2d --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/HttpTest.php @@ -0,0 +1,77 @@ +assertFalse($res->isOK()); + $this->assertTrue($res->isOK(500)); + } + + public function testGet() + { + $httpCore = new RequestCore("http://www.baidu.com"); + $httpResponse = $httpCore->send_request(); + $this->assertNotNull($httpResponse); + } + + public function testSetProxyAndTimeout() + { + $httpCore = new RequestCore("http://www.baidu.com"); + $httpCore->set_proxy("1.0.2.1:8888"); + $httpCore->connect_timeout = 1; + try { + $httpResponse = $httpCore->send_request(); + $this->assertTrue(false); + } catch (RequestCore_Exception $e) { + + } + } + + public function testGetParseTrue() + { + $httpCore = new RequestCore("http://www.baidu.com"); + $httpCore->curlopts = array(CURLOPT_HEADER => true); + $url = $httpCore->send_request(true); + foreach ($httpCore->get_response_header() as $key => $value) { + $this->assertEquals($httpCore->get_response_header($key), $value); + } + $this->assertNotNull($url); + } + + public function testParseResponse() + { + $httpCore = new RequestCore("http://www.baidu.com"); + $response = $httpCore->send_request(); + $parsed = $httpCore->process_response(null, $response); + $this->assertNotNull($parsed); + } + + public function testExceptionGet() + { + $httpCore = null; + $exception = false; + try { + $httpCore = new RequestCore("http://www.notexistsitexx.com"); + $httpCore->set_body(""); + $httpCore->set_method("GET"); + $httpCore->connect_timeout = 10; + $httpCore->timeout = 10; + $res = $httpCore->send_request(); + } catch (RequestCore_Exception $e) { + $exception = true; + } + $this->assertTrue($exception); + } +} + + diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/InitiateMultipartUploadResultTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/InitiateMultipartUploadResultTest.php new file mode 100644 index 000000000..9f6c7a53e --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/InitiateMultipartUploadResultTest.php @@ -0,0 +1,47 @@ + + + multipart_upload + multipart.data + 0004B9894A22E5B1888A1E29F8236E2D + +BBBB; + + private $invalidXml = << + + multipart_upload + multipart.data + +BBBB; + + + public function testParseValidXml() + { + $response = new ResponseCore(array(), $this->validXml, 200); + $result = new InitiateMultipartUploadResult($response); + $this->assertEquals("0004B9894A22E5B1888A1E29F8236E2D", $result->getData()); + } + + public function testParseInvalidXml() + { + $response = new ResponseCore(array(), $this->invalidXml, 200); + try { + $result = new InitiateMultipartUploadResult($response); + $this->assertTrue(false); + } catch (OssException $e) { + + } + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/LifecycleConfigTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/LifecycleConfigTest.php new file mode 100644 index 000000000..7bd033185 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/LifecycleConfigTest.php @@ -0,0 +1,130 @@ + + + +delete obsoleted files +obsoleted/ +Enabled +3 + + +delete temporary files +temporary/ +Enabled +2022-10-12T00:00:00.000Z +2022-10-12T00:00:00.000Z + + +BBBB; + + private $validLifecycle2 = << + +delete temporary files +temporary/ +Enabled +2022-10-12T00:00:00.000Z +2022-10-12T00:00:00.000Z + + +BBBB; + + private $nullLifecycle = << + +BBBB; + + public function testConstructValidConfig() + { + $lifecycleConfig = new LifecycleConfig(); + $actions = array(); + $actions[] = new LifecycleAction("Expiration", "Days", 3); + $lifecycleRule = new LifecycleRule("delete obsoleted files", "obsoleted/", "Enabled", $actions); + $lifecycleConfig->addRule($lifecycleRule); + $actions = array(); + $actions[] = new LifecycleAction("Expiration", "Date", '2022-10-12T00:00:00.000Z'); + $actions[] = new LifecycleAction("Expiration2", "Date", '2022-10-12T00:00:00.000Z'); + $lifecycleRule = new LifecycleRule("delete temporary files", "temporary/", "Enabled", $actions); + $lifecycleConfig->addRule($lifecycleRule); + try { + $lifecycleConfig->addRule(null); + $this->assertFalse(true); + } catch (OssException $e) { + $this->assertEquals('lifecycleRule is null', $e->getMessage()); + } + $this->assertEquals($this->cleanXml(strval($lifecycleConfig)), $this->cleanXml($this->validLifecycle)); + } + + public function testParseValidXml() + { + $lifecycleConfig = new LifecycleConfig(); + $lifecycleConfig->parseFromXml($this->validLifecycle); + $this->assertEquals($this->cleanXml($lifecycleConfig->serializeToXml()), $this->cleanXml($this->validLifecycle)); + $this->assertEquals(2, count($lifecycleConfig->getRules())); + $rules = $lifecycleConfig->getRules(); + $this->assertEquals('delete temporary files', $rules[1]->getId()); + } + + public function testParseValidXml2() + { + $lifecycleConfig = new LifecycleConfig(); + $lifecycleConfig->parseFromXml($this->validLifecycle2); + $this->assertEquals($this->cleanXml($lifecycleConfig->serializeToXml()), $this->cleanXml($this->validLifecycle2)); + $this->assertEquals(1, count($lifecycleConfig->getRules())); + $rules = $lifecycleConfig->getRules(); + $this->assertEquals('delete temporary files', $rules[0]->getId()); + } + + public function testParseNullXml() + { + $lifecycleConfig = new LifecycleConfig(); + $lifecycleConfig->parseFromXml($this->nullLifecycle); + $this->assertEquals($this->cleanXml($lifecycleConfig->serializeToXml()), $this->cleanXml($this->nullLifecycle)); + $this->assertEquals(0, count($lifecycleConfig->getRules())); + } + + public function testLifecycleRule() + { + $lifecycleRule = new LifecycleRule("x", "x", "x", array('x')); + $lifecycleRule->setId("id"); + $lifecycleRule->setPrefix("prefix"); + $lifecycleRule->setStatus("Enabled"); + $lifecycleRule->setActions(array()); + + $this->assertEquals('id', $lifecycleRule->getId()); + $this->assertEquals('prefix', $lifecycleRule->getPrefix()); + $this->assertEquals('Enabled', $lifecycleRule->getStatus()); + $this->assertEmpty($lifecycleRule->getActions()); + } + + public function testLifecycleAction() + { + $action = new LifecycleAction('x', 'x', 'x'); + $this->assertEquals($action->getAction(), 'x'); + $this->assertEquals($action->getTimeSpec(), 'x'); + $this->assertEquals($action->getTimeValue(), 'x'); + $action->setAction('y'); + $action->setTimeSpec('y'); + $action->setTimeValue('y'); + $this->assertEquals($action->getAction(), 'y'); + $this->assertEquals($action->getTimeSpec(), 'y'); + $this->assertEquals($action->getTimeValue(), 'y'); + } + + private function cleanXml($xml) + { + return str_replace("\n", "", str_replace("\r", "", $xml)); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListBucketsResultTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListBucketsResultTest.php new file mode 100644 index 000000000..1abe1f503 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListBucketsResultTest.php @@ -0,0 +1,97 @@ + + + + ut_test_put_bucket + ut_test_put_bucket + + + + oss-cn-hangzhou-a + xz02tphky6fjfiuc0 + 2014-05-15T11:18:32.000Z + + + oss-cn-hangzhou-a + xz02tphky6fjfiuc1 + 2014-05-15T11:18:32.000Z + + + +BBBB; + + private $nullXml = << + + + ut_test_put_bucket + ut_test_put_bucket + + + + +BBBB; + + public function testParseValidXml() + { + $response = new ResponseCore(array(), $this->validXml, 200); + $result = new ListBucketsResult($response); + $this->assertTrue($result->isOK()); + $this->assertNotNull($result->getData()); + $this->assertNotNull($result->getRawResponse()); + $bucketListInfo = $result->getData(); + $this->assertEquals(2, count($bucketListInfo->getBucketList())); + } + + public function testParseNullXml() + { + $response = new ResponseCore(array(), $this->nullXml, 200); + $result = new ListBucketsResult($response); + $this->assertTrue($result->isOK()); + $this->assertNotNull($result->getData()); + $this->assertNotNull($result->getRawResponse()); + $bucketListInfo = $result->getData(); + $this->assertEquals(0, count($bucketListInfo->getBucketList())); + } + + public function test403() + { + $errorHeader = array( + 'x-oss-request-id' => '1a2b-3c4d' + ); + + $errorBody = <<< BBBB + + + NoSuchBucket + The specified bucket does not exist. + 566B870D207FB3044302EB0A + hello.oss-test.aliyun-inc.com + hello + +BBBB; + $response = new ResponseCore($errorHeader, $errorBody, 403); + try { + new ListBucketsResult($response); + } catch (OssException $e) { + $this->assertEquals( + $e->getMessage(), + 'NoSuchBucket: The specified bucket does not exist. RequestId: 1a2b-3c4d'); + $this->assertEquals($e->getHTTPStatus(), '403'); + $this->assertEquals($e->getRequestId(), '1a2b-3c4d'); + $this->assertEquals($e->getErrorCode(), 'NoSuchBucket'); + $this->assertEquals($e->getErrorMessage(), 'The specified bucket does not exist.'); + $this->assertEquals($e->getDetails(), $errorBody); + } + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListMultipartUploadResultTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListMultipartUploadResultTest.php new file mode 100644 index 000000000..5c757d315 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListMultipartUploadResultTest.php @@ -0,0 +1,114 @@ + + + oss-example + xx + 3 + oss.avi + 0004B99B8E707874FC2D692FA5D77D3F + x + xx + 1000 + false + + multipart.data + 0004B999EF518A1FE585B0C9360DC4C8 + 2012-02-23T04:18:23.000Z + + + multipart.data + 0004B999EF5A239BB9138C6227D69F95 + 2012-02-23T04:18:23.000Z + + + oss.avi + 0004B99B8E707874FC2D692FA5D77D3F + 2012-02-23T06:14:27.000Z + + +BBBB; + + private $validXmlWithEncodedKey = << + + oss-example + url + php%2Bkey-marker + 3 + php%2Bnext-key-marker + 0004B99B8E707874FC2D692FA5D77D3F + %2F + php%2Bprefix + 1000 + true + + php%2Bkey-1 + 0004B999EF518A1FE585B0C9360DC4C8 + 2012-02-23T04:18:23.000Z + + + php%2Bkey-2 + 0004B999EF5A239BB9138C6227D69F95 + 2012-02-23T04:18:23.000Z + + + php%2Bkey-3 + 0004B99B8E707874FC2D692FA5D77D3F + 2012-02-23T06:14:27.000Z + + +BBBB; + + public function testParseValidXml() + { + $response = new ResponseCore(array(), $this->validXml, 200); + $result = new ListMultipartUploadResult($response); + $listMultipartUploadInfo = $result->getData(); + $this->assertEquals("oss-example", $listMultipartUploadInfo->getBucket()); + $this->assertEquals("xx", $listMultipartUploadInfo->getKeyMarker()); + $this->assertEquals(3, $listMultipartUploadInfo->getUploadIdMarker()); + $this->assertEquals("oss.avi", $listMultipartUploadInfo->getNextKeyMarker()); + $this->assertEquals("0004B99B8E707874FC2D692FA5D77D3F", $listMultipartUploadInfo->getNextUploadIdMarker()); + $this->assertEquals("x", $listMultipartUploadInfo->getDelimiter()); + $this->assertEquals("xx", $listMultipartUploadInfo->getPrefix()); + $this->assertEquals(1000, $listMultipartUploadInfo->getMaxUploads()); + $this->assertEquals("false", $listMultipartUploadInfo->getIsTruncated()); + $uploads = $listMultipartUploadInfo->getUploads(); + $this->assertEquals("multipart.data", $uploads[0]->getKey()); + $this->assertEquals("0004B999EF518A1FE585B0C9360DC4C8", $uploads[0]->getUploadId()); + $this->assertEquals("2012-02-23T04:18:23.000Z", $uploads[0]->getInitiated()); + } + + public function testParseValidXmlWithEncodedKey() + { + $response = new ResponseCore(array(), $this->validXmlWithEncodedKey, 200); + $result = new ListMultipartUploadResult($response); + $listMultipartUploadInfo = $result->getData(); + $this->assertEquals("oss-example", $listMultipartUploadInfo->getBucket()); + $this->assertEquals("php+key-marker", $listMultipartUploadInfo->getKeyMarker()); + $this->assertEquals("php+next-key-marker", $listMultipartUploadInfo->getNextKeyMarker()); + $this->assertEquals(3, $listMultipartUploadInfo->getUploadIdMarker()); + $this->assertEquals("0004B99B8E707874FC2D692FA5D77D3F", $listMultipartUploadInfo->getNextUploadIdMarker()); + $this->assertEquals("/", $listMultipartUploadInfo->getDelimiter()); + $this->assertEquals("php+prefix", $listMultipartUploadInfo->getPrefix()); + $this->assertEquals(1000, $listMultipartUploadInfo->getMaxUploads()); + $this->assertEquals("true", $listMultipartUploadInfo->getIsTruncated()); + $uploads = $listMultipartUploadInfo->getUploads(); + $this->assertEquals("php+key-1", $uploads[0]->getKey()); + $this->assertEquals("0004B999EF518A1FE585B0C9360DC4C8", $uploads[0]->getUploadId()); + $this->assertEquals("2012-02-23T04:18:23.000Z", $uploads[0]->getInitiated()); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListObjectsResultTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListObjectsResultTest.php new file mode 100644 index 000000000..85f262ca4 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListObjectsResultTest.php @@ -0,0 +1,151 @@ + + + testbucket-hf + + + 1000 + / + false + + oss-php-sdk-test/ + + + test/ + + +BBBB; + + private $validXml2 = << + + testbucket-hf + oss-php-sdk-test/ + xx + 1000 + / + false + + oss-php-sdk-test/upload-test-object-name.txt + 2015-11-18T03:36:00.000Z + "89B9E567E7EB8815F2F7D41851F9A2CD" + Normal + 13115 + Standard + + cname_user + cname_user + + + +BBBB; + + private $validXmlWithEncodedKey = << + + testbucket-hf + url + php%2Fprefix + php%2Fmarker + php%2Fnext-marker + 1000 + %2F + true + + php/a%2Bb + 2015-11-18T03:36:00.000Z + "89B9E567E7EB8815F2F7D41851F9A2CD" + Normal + 13115 + Standard + + cname_user + cname_user + + + +BBBB; + + public function testParseValidXml1() + { + $response = new ResponseCore(array(), $this->validXml1, 200); + $result = new ListObjectsResult($response); + $this->assertTrue($result->isOK()); + $this->assertNotNull($result->getData()); + $this->assertNotNull($result->getRawResponse()); + $objectListInfo = $result->getData(); + $this->assertEquals(2, count($objectListInfo->getPrefixList())); + $this->assertEquals(0, count($objectListInfo->getObjectList())); + $this->assertEquals('testbucket-hf', $objectListInfo->getBucketName()); + $this->assertEquals('', $objectListInfo->getPrefix()); + $this->assertEquals('', $objectListInfo->getMarker()); + $this->assertEquals(1000, $objectListInfo->getMaxKeys()); + $this->assertEquals('/', $objectListInfo->getDelimiter()); + $this->assertEquals('false', $objectListInfo->getIsTruncated()); + $prefixes = $objectListInfo->getPrefixList(); + $this->assertEquals('oss-php-sdk-test/', $prefixes[0]->getPrefix()); + $this->assertEquals('test/', $prefixes[1]->getPrefix()); + } + + public function testParseValidXml2() + { + $response = new ResponseCore(array(), $this->validXml2, 200); + $result = new ListObjectsResult($response); + $this->assertTrue($result->isOK()); + $this->assertNotNull($result->getData()); + $this->assertNotNull($result->getRawResponse()); + $objectListInfo = $result->getData(); + $this->assertEquals(0, count($objectListInfo->getPrefixList())); + $this->assertEquals(1, count($objectListInfo->getObjectList())); + $this->assertEquals('testbucket-hf', $objectListInfo->getBucketName()); + $this->assertEquals('oss-php-sdk-test/', $objectListInfo->getPrefix()); + $this->assertEquals('xx', $objectListInfo->getMarker()); + $this->assertEquals(1000, $objectListInfo->getMaxKeys()); + $this->assertEquals('/', $objectListInfo->getDelimiter()); + $this->assertEquals('false', $objectListInfo->getIsTruncated()); + $objects = $objectListInfo->getObjectList(); + $this->assertEquals('oss-php-sdk-test/upload-test-object-name.txt', $objects[0]->getKey()); + $this->assertEquals('2015-11-18T03:36:00.000Z', $objects[0]->getLastModified()); + $this->assertEquals('"89B9E567E7EB8815F2F7D41851F9A2CD"', $objects[0]->getETag()); + $this->assertEquals('Normal', $objects[0]->getType()); + $this->assertEquals(13115, $objects[0]->getSize()); + $this->assertEquals('Standard', $objects[0]->getStorageClass()); + } + + public function testParseValidXmlWithEncodedKey() + { + $response = new ResponseCore(array(), $this->validXmlWithEncodedKey, 200); + $result = new ListObjectsResult($response); + $this->assertTrue($result->isOK()); + $this->assertNotNull($result->getData()); + $this->assertNotNull($result->getRawResponse()); + $objectListInfo = $result->getData(); + $this->assertEquals(0, count($objectListInfo->getPrefixList())); + $this->assertEquals(1, count($objectListInfo->getObjectList())); + $this->assertEquals('testbucket-hf', $objectListInfo->getBucketName()); + $this->assertEquals('php/prefix', $objectListInfo->getPrefix()); + $this->assertEquals('php/marker', $objectListInfo->getMarker()); + $this->assertEquals('php/next-marker', $objectListInfo->getNextMarker()); + $this->assertEquals(1000, $objectListInfo->getMaxKeys()); + $this->assertEquals('/', $objectListInfo->getDelimiter()); + $this->assertEquals('true', $objectListInfo->getIsTruncated()); + $objects = $objectListInfo->getObjectList(); + $this->assertEquals('php/a+b', $objects[0]->getKey()); + $this->assertEquals('2015-11-18T03:36:00.000Z', $objects[0]->getLastModified()); + $this->assertEquals('"89B9E567E7EB8815F2F7D41851F9A2CD"', $objects[0]->getETag()); + $this->assertEquals('Normal', $objects[0]->getType()); + $this->assertEquals(13115, $objects[0]->getSize()); + $this->assertEquals('Standard', $objects[0]->getStorageClass()); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListPartsResultTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListPartsResultTest.php new file mode 100644 index 000000000..c446714f6 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListPartsResultTest.php @@ -0,0 +1,62 @@ + + + multipart_upload + multipart.data + 0004B999EF5A239BB9138C6227D69F95 + 5 + 1000 + false + + 1 + 2012-02-23T07:01:34.000Z + "3349DC700140D7F86A078484278075A9" + 6291456 + + + 2 + 2012-02-23T07:01:12.000Z + "3349DC700140D7F86A078484278075A9" + 6291456 + + + 5 + 2012-02-23T07:02:03.000Z + "7265F4D211B56873A381D321F586E4A9" + 1024 + + +BBBB; + + public function testParseValidXml() + { + $response = new ResponseCore(array(), $this->validXml, 200); + $result = new ListPartsResult($response); + $listPartsInfo = $result->getData(); + $this->assertEquals("multipart_upload", $listPartsInfo->getBucket()); + $this->assertEquals("multipart.data", $listPartsInfo->getKey()); + $this->assertEquals("0004B999EF5A239BB9138C6227D69F95", $listPartsInfo->getUploadId()); + $this->assertEquals(5, $listPartsInfo->getNextPartNumberMarker()); + $this->assertEquals(1000, $listPartsInfo->getMaxParts()); + $this->assertEquals("false", $listPartsInfo->getIsTruncated()); + $this->assertEquals(3, count($listPartsInfo->getListPart())); + $parts = $listPartsInfo->getListPart(); + $this->assertEquals(1, $parts[0]->getPartNumber()); + $this->assertEquals('2012-02-23T07:01:34.000Z', $parts[0]->getLastModified()); + $this->assertEquals('"3349DC700140D7F86A078484278075A9"', $parts[0]->getETag()); + $this->assertEquals(6291456, $parts[0]->getSize()); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/LiveChannelXmlTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/LiveChannelXmlTest.php new file mode 100644 index 000000000..cc3e2199b --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/LiveChannelXmlTest.php @@ -0,0 +1,249 @@ + + + xxx + enabled + + hls + 1000 + 5 + hello.m3u8 + + +BBBB; + + private $info = << + + live-1 + xxx + + rtmp://bucket.oss-cn-hangzhou.aliyuncs.com/live/213443245345 + + + http://bucket.oss-cn-hangzhou.aliyuncs.com/213443245345/播放列表.m3u8 + + enabled + 2015-11-24T14:25:31.000Z + +BBBB; + + private $list = << + +xxx + yyy + 100 + false + 121312132 + + 12123214323431 + xxx + + rtmp://bucket.oss-cn-hangzhou.aliyuncs.com/live/1 + + + http://bucket.oss-cn-hangzhou.aliyuncs.com/1/播放列表.m3u8 + + enabled + 2015-11-24T14:25:31.000Z + + + 432423432423 + yyy + + rtmp://bucket.oss-cn-hangzhou.aliyuncs.com/live/2 + + + http://bucket.oss-cn-hangzhou.aliyuncs.com/2/播放列表.m3u8 + + enabled + 2016-11-24T14:25:31.000Z + + +BBBB; + + private $status = << + + Live + 2016-10-20T14:25:31.000Z + 10.1.2.4:47745 + + + +BBBB; + + private $history = << + + + 2013-11-24T14:25:31.000Z + 2013-11-24T15:25:31.000Z + 10.101.194.148:56861 + + + 2014-11-24T14:25:31.000Z + 2014-11-24T15:25:31.000Z + 10.101.194.148:56862 + + + 2015-11-24T14:25:31.000Z + 2015-11-24T15:25:31.000Z + 10.101.194.148:56863 + + +BBBB; + + public function testLiveChannelStatus() + { + $stat = new GetLiveChannelStatus(); + $stat->parseFromXml($this->status); + + $this->assertEquals('Live', $stat->getStatus()); + $this->assertEquals('2016-10-20T14:25:31.000Z', $stat->getConnectedTime()); + $this->assertEquals('10.1.2.4:47745', $stat->getRemoteAddr()); + + $this->assertEquals(1280, $stat->getVideoWidth()); + $this->assertEquals(536, $stat->getVideoHeight()); + $this->assertEquals(24, $stat->getVideoFrameRate()); + $this->assertEquals(72513, $stat->getVideoBandwidth()); + $this->assertEquals('H264', $stat->getVideoCodec()); + $this->assertEquals(6519, $stat->getAudioBandwidth()); + $this->assertEquals(44100, $stat->getAudioSampleRate()); + $this->assertEquals('AAC', $stat->getAudioCodec()); + + } + + public function testLiveChannelHistory() + { + $history = new GetLiveChannelHistory(); + $history->parseFromXml($this->history); + + $recordList = $history->getLiveRecordList(); + $this->assertEquals(3, count($recordList)); + + $list0 = $recordList[0]; + $this->assertEquals('2013-11-24T14:25:31.000Z', $list0->getStartTime()); + $this->assertEquals('2013-11-24T15:25:31.000Z', $list0->getEndTime()); + $this->assertEquals('10.101.194.148:56861', $list0->getRemoteAddr()); + + $list1 = $recordList[1]; + $this->assertEquals('2014-11-24T14:25:31.000Z', $list1->getStartTime()); + $this->assertEquals('2014-11-24T15:25:31.000Z', $list1->getEndTime()); + $this->assertEquals('10.101.194.148:56862', $list1->getRemoteAddr()); + + $list2 = $recordList[2]; + $this->assertEquals('2015-11-24T14:25:31.000Z', $list2->getStartTime()); + $this->assertEquals('2015-11-24T15:25:31.000Z', $list2->getEndTime()); + $this->assertEquals('10.101.194.148:56863', $list2->getRemoteAddr()); + + } + + public function testLiveChannelConfig() + { + $config = new LiveChannelConfig(array('name' => 'live-1')); + $config->parseFromXml($this->config); + + $this->assertEquals('xxx', $config->getDescription()); + $this->assertEquals('enabled', $config->getStatus()); + $this->assertEquals('hls', $config->getType()); + $this->assertEquals(1000, $config->getFragDuration()); + $this->assertEquals(5, $config->getFragCount()); + $this->assertEquals('hello.m3u8', $config->getPlayListName()); + + $xml = $config->serializeToXml(); + $config2 = new LiveChannelConfig(array('name' => 'live-2')); + $config2->parseFromXml($xml); + $this->assertEquals('xxx', $config2->getDescription()); + $this->assertEquals('enabled', $config2->getStatus()); + $this->assertEquals('hls', $config2->getType()); + $this->assertEquals(1000, $config2->getFragDuration()); + $this->assertEquals(5, $config2->getFragCount()); + $this->assertEquals('hello.m3u8', $config2->getPlayListName()); + } + + public function testLiveChannelInfo() + { + $info = new LiveChannelInfo(array('name' => 'live-1')); + $info->parseFromXml($this->info); + + $this->assertEquals('live-1', $info->getName()); + $this->assertEquals('xxx', $info->getDescription()); + $this->assertEquals('enabled', $info->getStatus()); + $this->assertEquals('2015-11-24T14:25:31.000Z', $info->getLastModified()); + $pubs = $info->getPublishUrls(); + $this->assertEquals(1, count($pubs)); + $this->assertEquals('rtmp://bucket.oss-cn-hangzhou.aliyuncs.com/live/213443245345', $pubs[0]); + + $plays = $info->getPlayUrls(); + $this->assertEquals(1, count($plays)); + $this->assertEquals('http://bucket.oss-cn-hangzhou.aliyuncs.com/213443245345/播放列表.m3u8', $plays[0]); + } + + public function testLiveChannelList() + { + $list = new LiveChannelListInfo(); + $list->parseFromXml($this->list); + + $this->assertEquals('xxx', $list->getPrefix()); + $this->assertEquals('yyy', $list->getMarker()); + $this->assertEquals(100, $list->getMaxKeys()); + $this->assertEquals(false, $list->getIsTruncated()); + $this->assertEquals('121312132', $list->getNextMarker()); + + $channels = $list->getChannelList(); + $this->assertEquals(2, count($channels)); + + $chan1 = $channels[0]; + $this->assertEquals('12123214323431', $chan1->getName()); + $this->assertEquals('xxx', $chan1->getDescription()); + $this->assertEquals('enabled', $chan1->getStatus()); + $this->assertEquals('2015-11-24T14:25:31.000Z', $chan1->getLastModified()); + $pubs = $chan1->getPublishUrls(); + $this->assertEquals(1, count($pubs)); + $this->assertEquals('rtmp://bucket.oss-cn-hangzhou.aliyuncs.com/live/1', $pubs[0]); + + $plays = $chan1->getPlayUrls(); + $this->assertEquals(1, count($plays)); + $this->assertEquals('http://bucket.oss-cn-hangzhou.aliyuncs.com/1/播放列表.m3u8', $plays[0]); + + $chan2 = $channels[1]; + $this->assertEquals('432423432423', $chan2->getName()); + $this->assertEquals('yyy', $chan2->getDescription()); + $this->assertEquals('enabled', $chan2->getStatus()); + $this->assertEquals('2016-11-24T14:25:31.000Z', $chan2->getLastModified()); + $pubs = $chan2->getPublishUrls(); + $this->assertEquals(1, count($pubs)); + $this->assertEquals('rtmp://bucket.oss-cn-hangzhou.aliyuncs.com/live/2', $pubs[0]); + + $plays = $chan2->getPlayUrls(); + $this->assertEquals(1, count($plays)); + $this->assertEquals('http://bucket.oss-cn-hangzhou.aliyuncs.com/2/播放列表.m3u8', $plays[0]); + } + +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/LoggingConfigTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/LoggingConfigTest.php new file mode 100644 index 000000000..01496bb8f --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/LoggingConfigTest.php @@ -0,0 +1,47 @@ + + + +TargetBucket +TargetPrefix + + +BBBB; + + private $nullXml = << + +BBBB; + + public function testParseValidXml() + { + $loggingConfig = new LoggingConfig(); + $loggingConfig->parseFromXml($this->validXml); + $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml(strval($loggingConfig))); + } + + public function testConstruct() + { + $loggingConfig = new LoggingConfig('TargetBucket', 'TargetPrefix'); + $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml($loggingConfig->serializeToXml())); + } + + public function testFailedConstruct() + { + $loggingConfig = new LoggingConfig('TargetBucket', null); + $this->assertEquals($this->cleanXml($this->nullXml), $this->cleanXml($loggingConfig->serializeToXml())); + } + + private function cleanXml($xml) + { + return str_replace("\n", "", str_replace("\r", "", $xml)); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/MimeTypesTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/MimeTypesTest.php new file mode 100644 index 000000000..0697409e1 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/MimeTypesTest.php @@ -0,0 +1,13 @@ +assertEquals('application/xml', MimeTypes::getMimetype('file.xml')); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ObjectAclTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ObjectAclTest.php new file mode 100644 index 000000000..d39728814 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ObjectAclTest.php @@ -0,0 +1,28 @@ +deleteObject($bucket, $object); + $client->putObject($bucket, $object, "hello world"); + + $acl = $client->getObjectAcl($bucket, $object); + $this->assertEquals('default', $acl); + + $client->putObjectAcl($bucket, $object, 'public-read'); + $acl = $client->getObjectAcl($bucket, $object); + $this->assertEquals('public-read', $acl); + + $content = $client->getObject($bucket, $object); + $this->assertEquals('hello world', $content); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketCorsTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketCorsTest.php new file mode 100644 index 000000000..a32154b55 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketCorsTest.php @@ -0,0 +1,84 @@ +addAllowedHeader("x-oss-test"); + $rule->addAllowedHeader("x-oss-test2"); + $rule->addAllowedHeader("x-oss-test2"); + $rule->addAllowedHeader("x-oss-test3"); + $rule->addAllowedOrigin("http://www.b.com"); + $rule->addAllowedOrigin("http://www.a.com"); + $rule->addAllowedOrigin("http://www.a.com"); + $rule->addAllowedMethod("GET"); + $rule->addAllowedMethod("PUT"); + $rule->addAllowedMethod("POST"); + $rule->addExposeHeader("x-oss-test1"); + $rule->addExposeHeader("x-oss-test1"); + $rule->addExposeHeader("x-oss-test2"); + $rule->setMaxAgeSeconds(10); + $corsConfig->addRule($rule); + $rule = new CorsRule(); + $rule->addAllowedHeader("x-oss-test"); + $rule->addAllowedMethod("GET"); + $rule->addAllowedOrigin("http://www.b.com"); + $rule->addExposeHeader("x-oss-test1"); + $rule->setMaxAgeSeconds(110); + $corsConfig->addRule($rule); + + try { + $this->ossClient->putBucketCors($this->bucket, $corsConfig); + } catch (OssException $e) { + $this->assertFalse(True); + } + + try { + Common::waitMetaSync(); + $object = "cors/test.txt"; + $this->ossClient->putObject($this->bucket, $object, file_get_contents(__FILE__)); + $headers = $this->ossClient->optionsObject($this->bucket, $object, "http://www.a.com", "GET", "", null); + $this->assertNotEmpty($headers); + } catch (OssException $e) { + var_dump($e->getMessage()); + } + + try { + Common::waitMetaSync(); + $corsConfig2 = $this->ossClient->getBucketCors($this->bucket); + $this->assertNotNull($corsConfig2); + $this->assertEquals($corsConfig->serializeToXml(), $corsConfig2->serializeToXml()); + } catch (OssException $e) { + $this->assertFalse(True); + } + + try { + Common::waitMetaSync(); + $this->ossClient->deleteBucketCors($this->bucket); + } catch (OssException $e) { + $this->assertFalse(True); + } + + try { + Common::waitMetaSync(); + $corsConfig3 = $this->ossClient->getBucketCors($this->bucket); + $this->assertNotNull($corsConfig3); + $this->assertNotEquals($corsConfig->serializeToXml(), $corsConfig3->serializeToXml()); + } catch (OssException $e) { + $this->assertFalse(True); + } + + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketLifecycleTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketLifecycleTest.php new file mode 100644 index 000000000..46da1f063 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketLifecycleTest.php @@ -0,0 +1,57 @@ +addRule($lifecycleRule); + $actions = array(); + $actions[] = new LifecycleAction("Expiration", "Date", '2022-10-12T00:00:00.000Z'); + $lifecycleRule = new LifecycleRule("delete temporary files", "temporary/", "Enabled", $actions); + $lifecycleConfig->addRule($lifecycleRule); + + try { + $this->ossClient->putBucketLifecycle($this->bucket, $lifecycleConfig); + } catch (OssException $e) { + $this->assertTrue(false); + } + + try { + Common::waitMetaSync(); + $lifecycleConfig2 = $this->ossClient->getBucketLifecycle($this->bucket); + $this->assertEquals($lifecycleConfig->serializeToXml(), $lifecycleConfig2->serializeToXml()); + } catch (OssException $e) { + $this->assertTrue(false); + } + + try { + Common::waitMetaSync(); + $this->ossClient->deleteBucketLifecycle($this->bucket); + } catch (OssException $e) { + $this->assertTrue(false); + } + + try { + Common::waitMetaSync(); + $lifecycleConfig3 = $this->ossClient->getBucketLifecycle($this->bucket); + $this->assertNotEquals($lifecycleConfig->serializeToXml(), $lifecycleConfig3->serializeToXml()); + } catch (OssException $e) { + $this->assertTrue(false); + } + + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketLoggingTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketLoggingTest.php new file mode 100644 index 000000000..16a10ebfa --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketLoggingTest.php @@ -0,0 +1,43 @@ +bucket, 'prefix'); + try { + $this->ossClient->putBucketLogging($this->bucket, $this->bucket, 'prefix'); + } catch (OssException $e) { + var_dump($e->getMessage()); + $this->assertTrue(false); + } + try { + Common::waitMetaSync(); + $loggingConfig2 = $this->ossClient->getBucketLogging($this->bucket); + $this->assertEquals($loggingConfig->serializeToXml(), $loggingConfig2->serializeToXml()); + } catch (OssException $e) { + $this->assertTrue(false); + } + try { + Common::waitMetaSync(); + $this->ossClient->deleteBucketLogging($this->bucket); + } catch (OssException $e) { + $this->assertTrue(false); + } + try { + Common::waitMetaSync(); + $loggingConfig3 = $this->ossClient->getBucketLogging($this->bucket); + $this->assertNotEquals($loggingConfig->serializeToXml(), $loggingConfig3->serializeToXml()); + } catch (OssException $e) { + $this->assertTrue(false); + } + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketRefererTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketRefererTest.php new file mode 100644 index 000000000..ba7d14f5b --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketRefererTest.php @@ -0,0 +1,48 @@ +addReferer('http://www.aliyun.com'); + + try { + $this->ossClient->putBucketReferer($this->bucket, $refererConfig); + } catch (OssException $e) { + var_dump($e->getMessage()); + $this->assertTrue(false); + } + try { + Common::waitMetaSync(); + $refererConfig2 = $this->ossClient->getBucketReferer($this->bucket); + $this->assertEquals($refererConfig->serializeToXml(), $refererConfig2->serializeToXml()); + } catch (OssException $e) { + $this->assertTrue(false); + } + try { + Common::waitMetaSync(); + $nullRefererConfig = new RefererConfig(); + $nullRefererConfig->setAllowEmptyReferer(false); + $this->ossClient->putBucketReferer($this->bucket, $nullRefererConfig); + } catch (OssException $e) { + $this->assertTrue(false); + } + try { + Common::waitMetaSync(); + $refererConfig3 = $this->ossClient->getBucketLogging($this->bucket); + $this->assertNotEquals($refererConfig->serializeToXml(), $refererConfig3->serializeToXml()); + } catch (OssException $e) { + $this->assertTrue(false); + } + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketStorageCapacityTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketStorageCapacityTest.php new file mode 100644 index 000000000..87548f974 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketStorageCapacityTest.php @@ -0,0 +1,56 @@ +ossClient->getBucketStorageCapacity($this->bucket); + $this->assertEquals($storageCapacity, -1); + } catch (OssException $e) { + $this->assertTrue(false); + } + + try { + $this->ossClient->putBucketStorageCapacity($this->bucket, 1000); + } catch (OssException $e) { + $this->assertTrue(false); + } + + try { + Common::waitMetaSync(); + $storageCapacity = $this->ossClient->getBucketStorageCapacity($this->bucket); + $this->assertEquals($storageCapacity, 1000); + } catch (OssException $e) { + $this->assertTrue(false); + } + + try { + $this->ossClient->putBucketStorageCapacity($this->bucket, 0); + + Common::waitMetaSync(); + + $storageCapacity = $this->ossClient->getBucketStorageCapacity($this->bucket); + $this->assertEquals($storageCapacity, 0); + + $this->ossClient->putObject($this->bucket, 'test-storage-capacity','test-content'); + $this->assertTrue(false); + } catch (OssException $e) { + $this->assertEquals('Bucket storage exceed max storage capacity.',$e->getErrorMessage()); + } + + try { + $this->ossClient->putBucketStorageCapacity($this->bucket, -2); + $this->assertTrue(false); + } catch (OssException $e) { + $this->assertEquals(400, $e->getHTTPStatus()); + $this->assertEquals('InvalidArgument', $e->getErrorCode()); + } + } + +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketTest.php new file mode 100644 index 000000000..f207ca1ae --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketTest.php @@ -0,0 +1,113 @@ +ossClient->createBucket("s"); + $this->assertFalse(true); + } catch (OssException $e) { + $this->assertEquals('"s"bucket name is invalid', $e->getMessage()); + } + } + + public function testBucketWithInvalidACL() + { + try { + $this->ossClient->createBucket($this->bucket, "invalid"); + $this->assertFalse(true); + } catch (OssException $e) { + $this->assertEquals('invalid:acl is invalid(private,public-read,public-read-write)', $e->getMessage()); + } + } + + public function testBucket() + { + $this->ossClient->createBucket($this->bucket, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE); + + $bucketListInfo = $this->ossClient->listBuckets(); + $this->assertNotNull($bucketListInfo); + + $bucketList = $bucketListInfo->getBucketList(); + $this->assertTrue(is_array($bucketList)); + $this->assertGreaterThan(0, count($bucketList)); + + $this->ossClient->putBucketAcl($this->bucket, OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE); + Common::waitMetaSync(); + $this->assertEquals($this->ossClient->getBucketAcl($this->bucket), OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE); + + $this->assertTrue($this->ossClient->doesBucketExist($this->bucket)); + $this->assertFalse($this->ossClient->doesBucketExist($this->bucket . '-notexist')); + + $this->assertEquals($this->ossClient->getBucketLocation($this->bucket), 'oss-us-west-1'); + + $res = $this->ossClient->getBucketMeta($this->bucket); + $this->assertEquals('200', $res['info']['http_code']); + $this->assertEquals('oss-us-west-1', $res['x-oss-bucket-region']); + } + + public function testCreateBucketWithStorageType() + { + $object = 'storage-object'; + + $this->ossClient->putObject($this->archiveBucket, $object,'testcontent'); + try { + $this->ossClient->getObject($this->archiveBucket, $object); + $this->assertTrue(false); + } catch (OssException $e) { + $this->assertEquals('403', $e->getHTTPStatus()); + $this->assertEquals('InvalidObjectState', $e->getErrorCode()); + } + + $this->ossClient->putObject($this->iaBucket, $object,'testcontent'); + $result = $this->ossClient->getObject($this->iaBucket, $object); + $this->assertEquals($result, 'testcontent'); + + $this->ossClient->putObject($this->bucket, $object,'testcontent'); + $result = $this->ossClient->getObject($this->bucket, $object); + $this->assertEquals($result, 'testcontent'); + } + + public function setUp() + { + parent::setUp(); + + $this->iaBucket = 'ia-' . $this->bucket; + $this->archiveBucket = 'archive-' . $this->bucket; + $options = array( + OssClient::OSS_STORAGE => OssClient::OSS_STORAGE_IA + ); + + $this->ossClient->createBucket($this->iaBucket, OssClient::OSS_ACL_TYPE_PRIVATE, $options); + + $options = array( + OssClient::OSS_STORAGE => OssClient::OSS_STORAGE_ARCHIVE + ); + + $this->ossClient->createBucket($this->archiveBucket, OssClient::OSS_ACL_TYPE_PRIVATE, $options); + } + + public function tearDown() + { + parent::tearDown(); + + $object = 'storage-object'; + + $this->ossClient->deleteObject($this->iaBucket, $object); + $this->ossClient->deleteObject($this->archiveBucket, $object); + $this->ossClient->deleteBucket($this->iaBucket); + $this->ossClient->deleteBucket($this->archiveBucket); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketWebsiteTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketWebsiteTest.php new file mode 100644 index 000000000..dfa9cc174 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketWebsiteTest.php @@ -0,0 +1,46 @@ +ossClient->putBucketWebsite($this->bucket, $websiteConfig); + } catch (OssException $e) { + var_dump($e->getMessage()); + $this->assertTrue(false); + } + + try { + Common::waitMetaSync(); + $websiteConfig2 = $this->ossClient->getBucketWebsite($this->bucket); + $this->assertEquals($websiteConfig->serializeToXml(), $websiteConfig2->serializeToXml()); + } catch (OssException $e) { + $this->assertTrue(false); + } + try { + Common::waitMetaSync(); + $this->ossClient->deleteBucketWebsite($this->bucket); + } catch (OssException $e) { + $this->assertTrue(false); + } + try { + Common::waitMetaSync(); + $websiteConfig3 = $this->ossClient->getBucketLogging($this->bucket); + $this->assertNotEquals($websiteConfig->serializeToXml(), $websiteConfig3->serializeToXml()); + } catch (OssException $e) { + $this->assertTrue(false); + } + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientImageTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientImageTest.php new file mode 100644 index 000000000..df8bd6c25 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientImageTest.php @@ -0,0 +1,100 @@ +client = Common::getOssClient(); + $this->bucketName = 'php-sdk-test-bucket-image-' . strval(rand(0, 10000)); + $this->client->createBucket($this->bucketName); + Common::waitMetaSync(); + $this->local_file = "example.jpg"; + $this->object = "oss-example.jpg"; + $this->download_file = "image.jpg"; + + $this->client->uploadFile($this->bucketName, $this->object, $this->local_file); + } + + public function tearDown() + { + $this->client->deleteObject($this->bucketName, $this->object); + $this->client->deleteBucket($this->bucketName); + } + + public function testImageResize() + { + $options = array( + OssClient::OSS_FILE_DOWNLOAD => $this->download_file, + OssClient::OSS_PROCESS => "image/resize,m_fixed,h_100,w_100", ); + $this->check($options, 100, 100, 3267, 'jpg'); + } + + public function testImageCrop() + { + $options = array( + OssClient::OSS_FILE_DOWNLOAD => $this->download_file, + OssClient::OSS_PROCESS => "image/crop,w_100,h_100,x_100,y_100,r_1", ); + $this->check($options, 100, 100, 1969, 'jpg'); + } + + public function testImageRotate() + { + $options = array( + OssClient::OSS_FILE_DOWNLOAD => $this->download_file, + OssClient::OSS_PROCESS => "image/rotate,90", ); + $this->check($options, 267, 400, 20998, 'jpg'); + } + + public function testImageSharpen() + { + $options = array( + OssClient::OSS_FILE_DOWNLOAD => $this->download_file, + OssClient::OSS_PROCESS => "image/sharpen,100", ); + $this->check($options, 400, 267, 23015, 'jpg'); + } + + public function testImageWatermark() + { + $options = array( + OssClient::OSS_FILE_DOWNLOAD => $this->download_file, + OssClient::OSS_PROCESS => "image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ", ); + $this->check($options, 400, 267, 26369, 'jpg'); + } + + public function testImageFormat() + { + $options = array( + OssClient::OSS_FILE_DOWNLOAD => $this->download_file, + OssClient::OSS_PROCESS => "image/format,png", ); + $this->check($options, 400, 267, 160733, 'png'); + } + + public function testImageTofile() + { + $options = array( + OssClient::OSS_FILE_DOWNLOAD => $this->download_file, + OssClient::OSS_PROCESS => "image/resize,m_fixed,w_100,h_100", ); + $this->check($options, 100, 100, 3267, 'jpg'); + } + + private function check($options, $width, $height, $size, $type) + { + $this->client->getObject($this->bucketName, $this->object, $options); + $array = getimagesize($this->download_file); + $this->assertEquals($width, $array[0]); + $this->assertEquals($height, $array[1]); + $this->assertEquals($type === 'jpg' ? 2 : 3, $array[2]);//2 <=> jpg + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientMultipartUploadTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientMultipartUploadTest.php new file mode 100644 index 000000000..a95f412d3 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientMultipartUploadTest.php @@ -0,0 +1,313 @@ +ossClient->uploadDir($this->bucket, "", "abc/ds/s/s/notexitst"); + $this->assertFalse(true); + } catch (OssException $e) { + $this->assertEquals("parameter error: abc/ds/s/s/notexitst is not a directory, please check it", $e->getMessage()); + } + + } + + public function testMultipartUploadBigFile() + { + $bigFileName = __DIR__ . DIRECTORY_SEPARATOR . "/bigfile.tmp"; + $localFilename = __DIR__ . DIRECTORY_SEPARATOR . "/localfile.tmp"; + OssUtil::generateFile($bigFileName, 6 * 1024 * 1024); + $object = 'mpu/multipart-bigfile-test.tmp'; + try { + $this->ossClient->multiuploadFile($this->bucket, $object, $bigFileName, array(OssClient::OSS_PART_SIZE => 1)); + $options = array(OssClient::OSS_FILE_DOWNLOAD => $localFilename); + $this->ossClient->getObject($this->bucket, $object, $options); + $this->assertEquals(md5_file($bigFileName), md5_file($localFilename)); + } catch (OssException $e) { + var_dump($e->getMessage()); + $this->assertFalse(true); + } + unlink($bigFileName); + unlink($localFilename); + } + + public function testMultipartUploadBigFileWithMD5Check() + { + $bigFileName = __DIR__ . DIRECTORY_SEPARATOR . "/bigfile.tmp"; + $localFilename = __DIR__ . DIRECTORY_SEPARATOR . "/localfile.tmp"; + OssUtil::generateFile($bigFileName, 6 * 1024 * 1024); + $object = 'mpu/multipart-bigfile-test.tmp'; + $options = array( + OssClient::OSS_CHECK_MD5 => true, + OssClient::OSS_PART_SIZE => 1, + ); + try { + $this->ossClient->multiuploadFile($this->bucket, $object, $bigFileName, $options); + $options = array(OssClient::OSS_FILE_DOWNLOAD => $localFilename); + $this->ossClient->getObject($this->bucket, $object, $options); + $this->assertEquals(md5_file($bigFileName), md5_file($localFilename)); + } catch (OssException $e) { + var_dump($e->getMessage()); + $this->assertFalse(true); + } + unlink($bigFileName); + unlink($localFilename); + } + + public function testCopyPart() + { + $object = "mpu/multipart-test.txt"; + $copiedObject = "mpu/multipart-test.txt.copied"; + $this->ossClient->putObject($this->bucket, $copiedObject, file_get_contents(__FILE__)); + /** + * step 1. 初始化一个分块上传事件, 也就是初始化上传Multipart, 获取upload id + */ + try { + $upload_id = $this->ossClient->initiateMultipartUpload($this->bucket, $object); + } catch (OssException $e) { + $this->assertFalse(true); + } + /* + * step 2. uploadPartCopy + */ + $copyId = 1; + $eTag = $this->ossClient->uploadPartCopy($this->bucket, $copiedObject, $this->bucket, $object, $copyId, $upload_id); + $upload_parts[] = array( + 'PartNumber' => $copyId, + 'ETag' => $eTag, + ); + + try { + $listPartsInfo = $this->ossClient->listParts($this->bucket, $object, $upload_id); + $this->assertNotNull($listPartsInfo); + } catch (OssException $e) { + $this->assertTrue(false); + } + + /** + * step 3. + */ + try { + $this->ossClient->completeMultipartUpload($this->bucket, $object, $upload_id, $upload_parts); + } catch (OssException $e) { + var_dump($e->getMessage()); + $this->assertTrue(false); + } + + $this->assertEquals($this->ossClient->getObject($this->bucket, $object), file_get_contents(__FILE__)); + $this->assertEquals($this->ossClient->getObject($this->bucket, $copiedObject), file_get_contents(__FILE__)); + } + + public function testAbortMultipartUpload() + { + $object = "mpu/multipart-test.txt"; + /** + * step 1. 初始化一个分块上传事件, 也就是初始化上传Multipart, 获取upload id + */ + try { + $upload_id = $this->ossClient->initiateMultipartUpload($this->bucket, $object); + } catch (OssException $e) { + $this->assertFalse(true); + } + /* + * step 2. 上传分片 + */ + $part_size = 10 * 1024 * 1024; + $upload_file = __FILE__; + $upload_filesize = filesize($upload_file); + $pieces = $this->ossClient->generateMultiuploadParts($upload_filesize, $part_size); + $response_upload_part = array(); + $upload_position = 0; + $is_check_md5 = true; + foreach ($pieces as $i => $piece) { + $from_pos = $upload_position + (integer)$piece[OssClient::OSS_SEEK_TO]; + $to_pos = (integer)$piece[OssClient::OSS_LENGTH] + $from_pos - 1; + $up_options = array( + OssClient::OSS_FILE_UPLOAD => $upload_file, + OssClient::OSS_PART_NUM => ($i + 1), + OssClient::OSS_SEEK_TO => $from_pos, + OssClient::OSS_LENGTH => $to_pos - $from_pos + 1, + OssClient::OSS_CHECK_MD5 => $is_check_md5, + ); + if ($is_check_md5) { + $content_md5 = OssUtil::getMd5SumForFile($upload_file, $from_pos, $to_pos); + $up_options[OssClient::OSS_CONTENT_MD5] = $content_md5; + } + //2. 将每一分片上传到OSS + try { + $response_upload_part[] = $this->ossClient->uploadPart($this->bucket, $object, $upload_id, $up_options); + } catch (OssException $e) { + $this->assertFalse(true); + } + } + $upload_parts = array(); + foreach ($response_upload_part as $i => $eTag) { + $upload_parts[] = array( + 'PartNumber' => ($i + 1), + 'ETag' => $eTag, + ); + } + + try { + $listPartsInfo = $this->ossClient->listParts($this->bucket, $object, $upload_id); + $this->assertNotNull($listPartsInfo); + } catch (OssException $e) { + $this->assertTrue(false); + } + $this->assertEquals(1, count($listPartsInfo->getListPart())); + + $numOfMultipartUpload1 = 0; + $options = null; + try { + $listMultipartUploadInfo = $listMultipartUploadInfo = $this->ossClient->listMultipartUploads($this->bucket, $options); + $this->assertNotNull($listMultipartUploadInfo); + $numOfMultipartUpload1 = count($listMultipartUploadInfo->getUploads()); + } catch (OssException $e) { + $this->assertFalse(true); + } + + try { + $this->ossClient->abortMultipartUpload($this->bucket, $object, $upload_id); + } catch (OssException $e) { + $this->assertTrue(false); + } + + $numOfMultipartUpload2 = 0; + try { + $listMultipartUploadInfo = $listMultipartUploadInfo = $this->ossClient->listMultipartUploads($this->bucket, $options); + $this->assertNotNull($listMultipartUploadInfo); + $numOfMultipartUpload2 = count($listMultipartUploadInfo->getUploads()); + } catch (OssException $e) { + $this->assertFalse(true); + } + $this->assertEquals($numOfMultipartUpload1 - 1, $numOfMultipartUpload2); + } + + public function testPutObjectByRawApis() + { + $object = "mpu/multipart-test.txt"; + /** + * step 1. 初始化一个分块上传事件, 也就是初始化上传Multipart, 获取upload id + */ + try { + $upload_id = $this->ossClient->initiateMultipartUpload($this->bucket, $object); + } catch (OssException $e) { + $this->assertFalse(true); + } + /* + * step 2. 上传分片 + */ + $part_size = 10 * 1024 * 1024; + $upload_file = __FILE__; + $upload_filesize = filesize($upload_file); + $pieces = $this->ossClient->generateMultiuploadParts($upload_filesize, $part_size); + $response_upload_part = array(); + $upload_position = 0; + $is_check_md5 = true; + foreach ($pieces as $i => $piece) { + $from_pos = $upload_position + (integer)$piece[OssClient::OSS_SEEK_TO]; + $to_pos = (integer)$piece[OssClient::OSS_LENGTH] + $from_pos - 1; + $up_options = array( + OssClient::OSS_FILE_UPLOAD => $upload_file, + OssClient::OSS_PART_NUM => ($i + 1), + OssClient::OSS_SEEK_TO => $from_pos, + OssClient::OSS_LENGTH => $to_pos - $from_pos + 1, + OssClient::OSS_CHECK_MD5 => $is_check_md5, + ); + if ($is_check_md5) { + $content_md5 = OssUtil::getMd5SumForFile($upload_file, $from_pos, $to_pos); + $up_options[OssClient::OSS_CONTENT_MD5] = $content_md5; + } + //2. 将每一分片上传到OSS + try { + $response_upload_part[] = $this->ossClient->uploadPart($this->bucket, $object, $upload_id, $up_options); + } catch (OssException $e) { + $this->assertFalse(true); + } + } + $upload_parts = array(); + foreach ($response_upload_part as $i => $eTag) { + $upload_parts[] = array( + 'PartNumber' => ($i + 1), + 'ETag' => $eTag, + ); + } + + try { + $listPartsInfo = $this->ossClient->listParts($this->bucket, $object, $upload_id); + $this->assertNotNull($listPartsInfo); + } catch (OssException $e) { + $this->assertTrue(false); + } + + /** + * step 3. + */ + try { + $this->ossClient->completeMultipartUpload($this->bucket, $object, $upload_id, $upload_parts); + } catch (OssException $e) { + $this->assertTrue(false); + } + } + + function testPutObjectsByDir() + { + $localDirectory = dirname(__FILE__); + $prefix = "samples/codes"; + try { + $this->ossClient->uploadDir($this->bucket, $prefix, $localDirectory); + } catch (OssException $e) { + var_dump($e->getMessage()); + $this->assertFalse(true); + + } + $this->assertTrue($this->ossClient->doesObjectExist($this->bucket, 'samples/codes/' . "OssClientMultipartUploadTest.php")); + } + + public function testPutObjectByMultipartUpload() + { + $object = "mpu/multipart-test.txt"; + $file = __FILE__; + $options = array(); + + try { + $this->ossClient->multiuploadFile($this->bucket, $object, $file, $options); + } catch (OssException $e) { + $this->assertFalse(true); + } + } + + public function testPutObjectByMultipartUploadWithMD5Check() + { + $object = "mpu/multipart-test.txt"; + $file = __FILE__; + $options = array(OssClient::OSS_CHECK_MD5 => true); + + try { + $this->ossClient->multiuploadFile($this->bucket, $object, $file, $options); + } catch (OssException $e) { + $this->assertFalse(true); + } + } + + public function testListMultipartUploads() + { + $options = null; + try { + $listMultipartUploadInfo = $this->ossClient->listMultipartUploads($this->bucket, $options); + $this->assertNotNull($listMultipartUploadInfo); + } catch (OssException $e) { + $this->assertFalse(true); + } + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientObjectTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientObjectTest.php new file mode 100644 index 000000000..34e3ded7d --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientObjectTest.php @@ -0,0 +1,588 @@ +ossClient->getObjectMeta($this->bucket, $object); + $this->assertEquals('200', $res['info']['http_code']); + $this->assertEquals('text/plain', $res['content-type']); + $this->assertEquals('Accept-Encoding', $res['vary']); + $this->assertTrue(isset($res['content-length'])); + $this->assertFalse(isset($res['content-encoding'])); + } catch (OssException $e) { + $this->assertTrue(false); + } + + $options = array(OssClient::OSS_HEADERS => array(OssClient::OSS_ACCEPT_ENCODING => 'deflate, gzip')); + + try { + $res = $this->ossClient->getObjectMeta($this->bucket, $object, $options); + $this->assertEquals('200', $res['info']['http_code']); + $this->assertEquals('text/plain', $res['content-type']); + $this->assertEquals('Accept-Encoding', $res['vary']); + $this->assertFalse(isset($res['content-length'])); + $this->assertEquals('gzip', $res['content-encoding']); + } catch (OssException $e) { + $this->assertTrue(false); + } + } + + public function testGetObjectWithAcceptEncoding() + { + $object = "oss-php-sdk-test/upload-test-object-name.txt"; + $options = array(OssClient::OSS_HEADERS => array(OssClient::OSS_ACCEPT_ENCODING => 'deflate, gzip')); + + try { + $res = $this->ossClient->getObject($this->bucket, $object, $options); + $this->assertEquals(file_get_contents(__FILE__), $res); + } catch (OssException $e) { + $this->assertTrue(false); + } + } + + public function testGetObjectWithHeader() + { + $object = "oss-php-sdk-test/upload-test-object-name.txt"; + try { + $res = $this->ossClient->getObject($this->bucket, $object, array(OssClient::OSS_LAST_MODIFIED => "xx")); + $this->assertEquals(file_get_contents(__FILE__), $res); + } catch (OssException $e) { + $this->assertEquals('"/ilegal.txt" object name is invalid', $e->getMessage()); + } + } + + public function testGetObjectWithIleggalEtag() + { + $object = "oss-php-sdk-test/upload-test-object-name.txt"; + try { + $res = $this->ossClient->getObject($this->bucket, $object, array(OssClient::OSS_ETAG => "xx")); + $this->assertEquals(file_get_contents(__FILE__), $res); + } catch (OssException $e) { + $this->assertEquals('"/ilegal.txt" object name is invalid', $e->getMessage()); + } + } + + public function testObject() + { + /** + * 上传本地变量到bucket + */ + $object = "oss-php-sdk-test/upload-test-object-name.txt"; + $content = file_get_contents(__FILE__); + $options = array( + OssClient::OSS_LENGTH => strlen($content), + OssClient::OSS_HEADERS => array( + 'Expires' => 'Fri, 28 Feb 2020 05:38:42 GMT', + 'Cache-Control' => 'no-cache', + 'Content-Disposition' => 'attachment;filename=oss_download.log', + 'Content-Encoding' => 'utf-8', + 'Content-Language' => 'zh-CN', + 'x-oss-server-side-encryption' => 'AES256', + 'x-oss-meta-self-define-title' => 'user define meta info', + ), + ); + + try { + $this->ossClient->putObject($this->bucket, $object, $content, $options); + } catch (OssException $e) { + $this->assertFalse(true); + } + + try { + $this->ossClient->putObject($this->bucket, $object, $content, $options); + } catch (OssException $e) { + $this->assertFalse(true); + } + + try { + $result = $this->ossClient->deleteObjects($this->bucket, "stringtype", $options); + $this->assertEquals('stringtype', $result[0]); + } catch (OssException $e) { + $this->assertEquals('objects must be array', $e->getMessage()); + } + + try { + $result = $this->ossClient->deleteObjects($this->bucket, "stringtype", $options); + $this->assertFalse(true); + } catch (OssException $e) { + $this->assertEquals('objects must be array', $e->getMessage()); + } + + try { + $this->ossClient->uploadFile($this->bucket, $object, "notexist.txt", $options); + $this->assertFalse(true); + } catch (OssException $e) { + $this->assertEquals('notexist.txt file does not exist', $e->getMessage()); + } + + /** + * getObject到本地变量,检查是否match + */ + try { + $content = $this->ossClient->getObject($this->bucket, $object); + $this->assertEquals($content, file_get_contents(__FILE__)); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * getObject的前五个字节 + */ + try { + $options = array(OssClient::OSS_RANGE => '0-4'); + $content = $this->ossClient->getObject($this->bucket, $object, $options); + $this->assertEquals($content, 'assertFalse(true); + } + + + /** + * 上传本地文件到object + */ + try { + $this->ossClient->uploadFile($this->bucket, $object, __FILE__); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 下载文件到本地变量,检查是否match + */ + try { + $content = $this->ossClient->getObject($this->bucket, $object); + $this->assertEquals($content, file_get_contents(__FILE__)); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 下载文件到本地文件 + */ + $localfile = "upload-test-object-name.txt"; + $options = array( + OssClient::OSS_FILE_DOWNLOAD => $localfile, + ); + + try { + $this->ossClient->getObject($this->bucket, $object, $options); + } catch (OssException $e) { + $this->assertFalse(true); + } + $this->assertTrue(file_get_contents($localfile) === file_get_contents(__FILE__)); + if (file_exists($localfile)) { + unlink($localfile); + } + + /** + * 下载文件到本地文件 no such key + */ + $localfile = "upload-test-object-name-no-such-key.txt"; + $options = array( + OssClient::OSS_FILE_DOWNLOAD => $localfile, + ); + + try { + $this->ossClient->getObject($this->bucket, $object . "no-such-key", $options); + $this->assertTrue(false); + } catch (OssException $e) { + $this->assertTrue(true); + $this->assertFalse(file_exists($localfile)); + if (strpos($e, "The specified key does not exist") == false) + { + $this->assertTrue(true); + } + } + + /** + * 下载文件到内容 no such key + */ + try { + $result = $this->ossClient->getObject($this->bucket, $object . "no-such-key"); + $this->assertTrue(false); + } catch (OssException $e) { + $this->assertTrue(true); + if (strpos($e, "The specified key does not exist") == false) + { + $this->assertTrue(true); + } + } + + /** + * 复制object + */ + $to_bucket = $this->bucket; + $to_object = $object . '.copy'; + $options = array(); + try { + $result = $this->ossClient->copyObject($this->bucket, $object, $to_bucket, $to_object, $options); + $this->assertFalse(empty($result)); + $this->assertEquals(strlen("2016-11-21T03:46:58.000Z"), strlen($result[0])); + $this->assertEquals(strlen("\"5B3C1A2E053D763E1B002CC607C5A0FE\""), strlen($result[1])); + } catch (OssException $e) { + $this->assertFalse(true); + var_dump($e->getMessage()); + + } + + /** + * 检查复制的是否相同 + */ + try { + $content = $this->ossClient->getObject($this->bucket, $to_object); + $this->assertEquals($content, file_get_contents(__FILE__)); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 列出bucket内的文件列表 + */ + $prefix = ''; + $delimiter = '/'; + $next_marker = ''; + $maxkeys = 1000; + $options = array( + 'delimiter' => $delimiter, + 'prefix' => $prefix, + 'max-keys' => $maxkeys, + 'marker' => $next_marker, + ); + + try { + $listObjectInfo = $this->ossClient->listObjects($this->bucket, $options); + $objectList = $listObjectInfo->getObjectList(); + $prefixList = $listObjectInfo->getPrefixList(); + $this->assertNotNull($objectList); + $this->assertNotNull($prefixList); + $this->assertTrue(is_array($objectList)); + $this->assertTrue(is_array($prefixList)); + + } catch (OssException $e) { + $this->assertTrue(false); + } + + /** + * 设置文件的meta信息 + */ + $from_bucket = $this->bucket; + $from_object = "oss-php-sdk-test/upload-test-object-name.txt"; + $to_bucket = $from_bucket; + $to_object = $from_object; + $copy_options = array( + OssClient::OSS_HEADERS => array( + 'Expires' => '2012-10-01 08:00:00', + 'Content-Disposition' => 'attachment; filename="xxxxxx"', + ), + ); + try { + $this->ossClient->copyObject($from_bucket, $from_object, $to_bucket, $to_object, $copy_options); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 获取文件的meta信息 + */ + $object = "oss-php-sdk-test/upload-test-object-name.txt"; + try { + $objectMeta = $this->ossClient->getObjectMeta($this->bucket, $object); + $this->assertEquals('attachment; filename="xxxxxx"', $objectMeta[strtolower('Content-Disposition')]); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 删除单个文件 + */ + $object = "oss-php-sdk-test/upload-test-object-name.txt"; + + try { + $this->assertTrue($this->ossClient->doesObjectExist($this->bucket, $object)); + $this->ossClient->deleteObject($this->bucket, $object); + $this->assertFalse($this->ossClient->doesObjectExist($this->bucket, $object)); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 删除多个个文件 + */ + $object1 = "oss-php-sdk-test/upload-test-object-name.txt"; + $object2 = "oss-php-sdk-test/upload-test-object-name.txt.copy"; + $list = array($object1, $object2); + try { + $this->assertTrue($this->ossClient->doesObjectExist($this->bucket, $object2)); + + $result = $this->ossClient->deleteObjects($this->bucket, $list); + $this->assertEquals($list[1], $result[0]); + $this->assertEquals($list[0], $result[1]); + + $result = $this->ossClient->deleteObjects($this->bucket, $list, array('quiet' => 'true')); + $this->assertEquals(array(), $result); + $this->assertFalse($this->ossClient->doesObjectExist($this->bucket, $object2)); + } catch (OssException $e) { + $this->assertFalse(true); + } + } + + public function testAppendObject() + { + $object = "oss-php-sdk-test/append-test-object-name.txt"; + $content_array = array('Hello OSS', 'Hi OSS', 'OSS OK'); + + /** + * 追加上传字符串 + */ + try { + $position = $this->ossClient->appendObject($this->bucket, $object, $content_array[0], 0); + $this->assertEquals($position, strlen($content_array[0])); + $position = $this->ossClient->appendObject($this->bucket, $object, $content_array[1], $position); + $this->assertEquals($position, strlen($content_array[0]) + strlen($content_array[1])); + $position = $this->ossClient->appendObject($this->bucket, $object, $content_array[2], $position); + $this->assertEquals($position, strlen($content_array[0]) + strlen($content_array[1]) + strlen($content_array[1])); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 检查内容的是否相同 + */ + try { + $content = $this->ossClient->getObject($this->bucket, $object); + $this->assertEquals($content, implode($content_array)); + } catch (OssException $e) { + $this->assertFalse(true); + } + + + /** + * 删除测试object + */ + try { + $this->ossClient->deleteObject($this->bucket, $object); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 追加上传本地文件 + */ + try { + $position = $this->ossClient->appendFile($this->bucket, $object, __FILE__, 0); + $this->assertEquals($position, filesize(__FILE__)); + $position = $this->ossClient->appendFile($this->bucket, $object, __FILE__, $position); + $this->assertEquals($position, filesize(__FILE__) * 2); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 检查复制的是否相同 + */ + try { + $content = $this->ossClient->getObject($this->bucket, $object); + $this->assertEquals($content, file_get_contents(__FILE__) . file_get_contents(__FILE__)); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 删除测试object + */ + try { + $this->ossClient->deleteObject($this->bucket, $object); + } catch (OssException $e) { + $this->assertFalse(true); + } + + + $options = array( + OssClient::OSS_HEADERS => array( + 'Expires' => '2012-10-01 08:00:00', + 'Content-Disposition' => 'attachment; filename="xxxxxx"', + ), + ); + + /** + * 带option的追加上传 + */ + try { + $position = $this->ossClient->appendObject($this->bucket, $object, "Hello OSS, ", 0, $options); + $position = $this->ossClient->appendObject($this->bucket, $object, "Hi OSS.", $position); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 获取文件的meta信息 + */ + try { + $objectMeta = $this->ossClient->getObjectMeta($this->bucket, $object); + $this->assertEquals('attachment; filename="xxxxxx"', $objectMeta[strtolower('Content-Disposition')]); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 删除测试object + */ + try { + $this->ossClient->deleteObject($this->bucket, $object); + } catch (OssException $e) { + $this->assertFalse(true); + } + } + + public function testPutIllelObject() + { + $object = "/ilegal.txt"; + try { + $this->ossClient->putObject($this->bucket, $object, "hi", null); + $this->assertFalse(true); + } catch (OssException $e) { + $this->assertEquals('"/ilegal.txt" object name is invalid', $e->getMessage()); + } + } + + public function testCheckMD5() + { + $object = "oss-php-sdk-test/upload-test-object-name.txt"; + $content = file_get_contents(__FILE__); + $options = array(OssClient::OSS_CHECK_MD5 => true); + + /** + * 上传数据开启MD5 + */ + try { + $this->ossClient->putObject($this->bucket, $object, $content, $options); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 检查复制的是否相同 + */ + try { + $content = $this->ossClient->getObject($this->bucket, $object); + $this->assertEquals($content, file_get_contents(__FILE__)); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 上传文件开启MD5 + */ + try { + $this->ossClient->uploadFile($this->bucket, $object, __FILE__, $options); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 检查复制的是否相同 + */ + try { + $content = $this->ossClient->getObject($this->bucket, $object); + $this->assertEquals($content, file_get_contents(__FILE__)); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 删除测试object + */ + try { + $this->ossClient->deleteObject($this->bucket, $object); + } catch (OssException $e) { + $this->assertFalse(true); + } + + $object = "oss-php-sdk-test/append-test-object-name.txt"; + $content_array = array('Hello OSS', 'Hi OSS', 'OSS OK'); + $options = array(OssClient::OSS_CHECK_MD5 => true); + + /** + * 追加上传字符串 + */ + try { + $position = $this->ossClient->appendObject($this->bucket, $object, $content_array[0], 0, $options); + $this->assertEquals($position, strlen($content_array[0])); + $position = $this->ossClient->appendObject($this->bucket, $object, $content_array[1], $position, $options); + $this->assertEquals($position, strlen($content_array[0]) + strlen($content_array[1])); + $position = $this->ossClient->appendObject($this->bucket, $object, $content_array[2], $position, $options); + $this->assertEquals($position, strlen($content_array[0]) + strlen($content_array[1]) + strlen($content_array[1])); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 检查内容的是否相同 + */ + try { + $content = $this->ossClient->getObject($this->bucket, $object); + $this->assertEquals($content, implode($content_array)); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 删除测试object + */ + try { + $this->ossClient->deleteObject($this->bucket, $object); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 追加上传本地文件 + */ + try { + $position = $this->ossClient->appendFile($this->bucket, $object, __FILE__, 0, $options); + $this->assertEquals($position, filesize(__FILE__)); + $position = $this->ossClient->appendFile($this->bucket, $object, __FILE__, $position, $options); + $this->assertEquals($position, filesize(__FILE__) * 2); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 检查复制的是否相同 + */ + try { + $content = $this->ossClient->getObject($this->bucket, $object); + $this->assertEquals($content, file_get_contents(__FILE__) . file_get_contents(__FILE__)); + } catch (OssException $e) { + $this->assertFalse(true); + } + + /** + * 删除测试object + */ + try { + $this->ossClient->deleteObject($this->bucket, $object); + } catch (OssException $e) { + $this->assertFalse(true); + } + } + + public function setUp() + { + parent::setUp(); + $this->ossClient->putObject($this->bucket, 'oss-php-sdk-test/upload-test-object-name.txt', file_get_contents(__FILE__)); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientRestoreObjectTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientRestoreObjectTest.php new file mode 100644 index 000000000..cc1412f80 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientRestoreObjectTest.php @@ -0,0 +1,96 @@ +ossClient->putObject($this->iaBucket, $object,'testcontent'); + try{ + $this->ossClient->restoreObject($this->iaBucket, $object); + $this->assertTrue(false); + }catch (OssException $e){ + $this->assertEquals('400', $e->getHTTPStatus()); + $this->assertEquals('OperationNotSupported', $e->getErrorCode()); + } + } + + public function testNullObjectRestoreObject() + { + $object = 'null-object'; + + try{ + $this->ossClient->restoreObject($this->bucket, $object); + $this->assertTrue(false); + }catch (OssException $e){ + $this->assertEquals('404', $e->getHTTPStatus()); + } + } + + public function testArchiveRestoreObject() + { + $object = 'storage-object'; + + $this->ossClient->putObject($this->archiveBucket, $object,'testcontent'); + try{ + $this->ossClient->getObject($this->archiveBucket, $object); + $this->assertTrue(false); + }catch (OssException $e){ + $this->assertEquals('403', $e->getHTTPStatus()); + $this->assertEquals('InvalidObjectState', $e->getErrorCode()); + } + $result = $this->ossClient->restoreObject($this->archiveBucket, $object); + common::waitMetaSync(); + $this->assertEquals('202', $result['info']['http_code']); + + try{ + $this->ossClient->restoreObject($this->archiveBucket, $object); + }catch(OssException $e){ + $this->assertEquals('409', $e->getHTTPStatus()); + $this->assertEquals('RestoreAlreadyInProgress', $e->getErrorCode()); + } + } + + public function setUp() + { + parent::setUp(); + + $this->iaBucket = 'ia-' . $this->bucket; + $this->archiveBucket = 'archive-' . $this->bucket; + $options = array( + OssClient::OSS_STORAGE => OssClient::OSS_STORAGE_IA + ); + + $this->ossClient->createBucket($this->iaBucket, OssClient::OSS_ACL_TYPE_PRIVATE, $options); + + $options = array( + OssClient::OSS_STORAGE => OssClient::OSS_STORAGE_ARCHIVE + ); + + $this->ossClient->createBucket($this->archiveBucket, OssClient::OSS_ACL_TYPE_PRIVATE, $options); + } + + public function tearDown() + { + parent::tearDown(); + + $object = 'storage-object'; + + $this->ossClient->deleteObject($this->iaBucket, $object); + $this->ossClient->deleteObject($this->archiveBucket, $object); + $this->ossClient->deleteBucket($this->iaBucket); + $this->ossClient->deleteBucket($this->archiveBucket); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientSignatureTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientSignatureTest.php new file mode 100644 index 000000000..109121d0f --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientSignatureTest.php @@ -0,0 +1,111 @@ +ossClient->putObject($this->bucket, $object, file_get_contents(__FILE__)); + $timeout = 3600; + try { + $signedUrl = $this->ossClient->signUrl($this->bucket, $object, $timeout); + } catch (OssException $e) { + $this->assertFalse(true); + } + + $request = new RequestCore($signedUrl); + $request->set_method('GET'); + $request->add_header('Content-Type', ''); + $request->send_request(); + $res = new ResponseCore($request->get_response_header(), $request->get_response_body(), $request->get_response_code()); + $this->assertEquals(file_get_contents(__FILE__), $res->body); + } + + public function testGetSignedUrlForPuttingObject() + { + $object = "a.file"; + $timeout = 3600; + try { + $signedUrl = $this->ossClient->signUrl($this->bucket, $object, $timeout, "PUT"); + $content = file_get_contents(__FILE__); + $request = new RequestCore($signedUrl); + $request->set_method('PUT'); + $request->add_header('Content-Type', ''); + $request->add_header('Content-Length', strlen($content)); + $request->set_body($content); + $request->send_request(); + $res = new ResponseCore($request->get_response_header(), + $request->get_response_body(), $request->get_response_code()); + $this->assertTrue($res->isOK()); + } catch (OssException $e) { + $this->assertFalse(true); + } + } + + public function testGetSignedUrlForPuttingObjectFromFile() + { + $file = __FILE__; + $object = "a.file"; + $timeout = 3600; + $options = array('Content-Type' => 'txt'); + try { + $signedUrl = $this->ossClient->signUrl($this->bucket, $object, $timeout, "PUT", $options); + $request = new RequestCore($signedUrl); + $request->set_method('PUT'); + $request->add_header('Content-Type', 'txt'); + $request->set_read_file($file); + $request->set_read_stream_size(filesize($file)); + $request->send_request(); + $res = new ResponseCore($request->get_response_header(), + $request->get_response_body(), $request->get_response_code()); + $this->assertTrue($res->isOK()); + } catch (OssException $e) { + $this->assertFalse(true); + } + + } + + public function tearDown() + { + $this->ossClient->deleteObject($this->bucket, "a.file"); + parent::tearDown(); + } + + public function setUp() + { + parent::setUp(); + /** + * 上传本地变量到bucket + */ + $object = "a.file"; + $content = file_get_contents(__FILE__); + $options = array( + OssClient::OSS_LENGTH => strlen($content), + OssClient::OSS_HEADERS => array( + 'Expires' => 'Fri, 28 Feb 2020 05:38:42 GMT', + 'Cache-Control' => 'no-cache', + 'Content-Disposition' => 'attachment;filename=oss_download.log', + 'Content-Encoding' => 'utf-8', + 'Content-Language' => 'zh-CN', + 'x-oss-server-side-encryption' => 'AES256', + 'x-oss-meta-self-define-title' => 'user define meta info', + ), + ); + + try { + $this->ossClient->putObject($this->bucket, $object, $content, $options); + } catch (OssException $e) { + $this->assertFalse(true); + } + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientTest.php new file mode 100644 index 000000000..f92b3461f --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientTest.php @@ -0,0 +1,216 @@ +assertFalse($ossClient->isUseSSL()); + $ossClient->setUseSSL(true); + $this->assertTrue($ossClient->isUseSSL()); + $this->assertTrue(true); + $this->assertEquals(3, $ossClient->getMaxRetries()); + $ossClient->setMaxTries(4); + $this->assertEquals(4, $ossClient->getMaxRetries()); + $ossClient->setTimeout(10); + $ossClient->setConnectTimeout(20); + } catch (OssException $e) { + assertFalse(true); + } + } + + public function testConstrunct2() + { + try { + $ossClient = new OssClient('id', "", 'http://oss-cn-hangzhou.aliyuncs.com'); + $this->assertFalse(true); + } catch (OssException $e) { + $this->assertEquals("access key secret is empty", $e->getMessage()); + } + } + + public function testConstrunct3() + { + try { + $ossClient = new OssClient("", 'key', 'http://oss-cn-hangzhou.aliyuncs.com'); + $this->assertFalse(true); + } catch (OssException $e) { + $this->assertEquals("access key id is empty", $e->getMessage()); + } + } + + public function testConstrunct4() + { + try { + $ossClient = new OssClient('id', 'key', ""); + $this->assertFalse(true); + } catch (OssException $e) { + $this->assertEquals('endpoint is empty', $e->getMessage()); + } + } + + public function testConstrunct5() + { + try { + $ossClient = new OssClient('id', 'key', "123.123.123.1"); + } catch (OssException $e) { + $this->assertTrue(false); + } + } + + public function testConstrunct6() + { + try { + $ossClient = new OssClient('id', 'key', "https://123.123.123.1"); + $this->assertTrue($ossClient->isUseSSL()); + } catch (OssException $e) { + $this->assertTrue(false); + } + } + + public function testConstrunct7() + { + try { + $ossClient = new OssClient('id', 'key', "http://123.123.123.1"); + $this->assertFalse($ossClient->isUseSSL()); + } catch (OssException $e) { + $this->assertTrue(false); + } + } + + public function testConstrunct8() + { + try { + $ossClient = new OssClient('id', 'key', "http://123.123.123.1", true); + $ossClient->listBuckets(); + $this->assertFalse(true); + } catch (OssException $e) { + + } + } + + public function testConstrunct9() + { + try { + $accessKeyId = ' ' . getenv('OSS_ACCESS_KEY_ID') . ' '; + $accessKeySecret = ' ' . getenv('OSS_ACCESS_KEY_SECRET') . ' '; + $endpoint = ' ' . getenv('OSS_ENDPOINT') . '/ '; + $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false); + $ossClient->listBuckets(); + } catch (OssException $e) { + $this->assertFalse(true); + } + } + + public function testSupportPutEmptyObject() + { + try { + $accessKeyId = ' ' . getenv('OSS_ACCESS_KEY_ID') . ' '; + $accessKeySecret = ' ' . getenv('OSS_ACCESS_KEY_SECRET') . ' '; + $endpoint = ' ' . getenv('OSS_ENDPOINT') . '/ '; + $bucket = getenv('OSS_BUCKET'); + $ossClient = new OssClient($accessKeyId, $accessKeySecret , $endpoint, false); + $ossClient->putObject($bucket,'test_emptybody',''); + } catch (OssException $e) { + $this->assertFalse(true); + } + } + + public function testCreateObjectDir() + { + try { + $accessKeyId = ' ' . getenv('OSS_ACCESS_KEY_ID') . ' '; + $accessKeySecret = ' ' . getenv('OSS_ACCESS_KEY_SECRET') . ' '; + $endpoint = ' ' . getenv('OSS_ENDPOINT') . '/ '; + $bucket = getenv('OSS_BUCKET'); + $object='test-dir'; + $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false); + $ossClient->createObjectDir($bucket,$object); + } catch (OssException $e) { + $this->assertFalse(true); + } + } + + public function testGetBucketCors() + { + try { + $accessKeyId = ' ' . getenv('OSS_ACCESS_KEY_ID') . ' '; + $accessKeySecret = ' ' . getenv('OSS_ACCESS_KEY_SECRET') . ' '; + $endpoint = ' ' . getenv('OSS_ENDPOINT') . '/ '; + $bucket = getenv('OSS_BUCKET'); + $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false); + $ossClient->getBucketCors($bucket); + } catch (OssException $e) { + $this->assertFalse(true); + } + } + + public function testGetBucketCname() + { + try { + $accessKeyId = ' ' . getenv('OSS_ACCESS_KEY_ID') . ' '; + $accessKeySecret = ' ' . getenv('OSS_ACCESS_KEY_SECRET') . ' '; + $endpoint = ' ' . getenv('OSS_ENDPOINT') . '/ '; + $bucket = getenv('OSS_BUCKET'); + $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false); + $ossClient->getBucketCname($bucket); + } catch (OssException $e) { + $this->assertFalse(true); + } + } + + public function testProxySupport() + { + $accessKeyId = ' ' . getenv('OSS_ACCESS_KEY_ID') . ' '; + $accessKeySecret = ' ' . getenv('OSS_ACCESS_KEY_SECRET') . ' '; + $endpoint = ' ' . getenv('OSS_ENDPOINT') . '/ '; + $bucket = getenv('OSS_BUCKET') . '-proxy'; + $requestProxy = getenv('OSS_PROXY'); + $key = 'test-proxy-srv-object'; + $content = 'test-content'; + $proxys = parse_url($requestProxy); + + $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, null, $requestProxy); + + $result = $ossClient->createBucket($bucket); + $this->checkProxy($result, $proxys); + + $result = $ossClient->putObject($bucket, $key, $content); + $this->checkProxy($result, $proxys); + $result = $ossClient->getObject($bucket, $key); + $this->assertEquals($content, $result); + + // list object + $objectListInfo = $ossClient->listObjects($bucket); + $objectList = $objectListInfo->getObjectList(); + $this->assertNotNull($objectList); + $this->assertTrue(is_array($objectList)); + $objects = array(); + foreach ($objectList as $value) { + $objects[] = $value->getKey(); + } + $this->assertEquals(1, count($objects)); + $this->assertTrue(in_array($key, $objects)); + + $result = $ossClient->deleteObject($bucket, $key); + $this->checkProxy($result,$proxys); + + $result = $ossClient->deleteBucket($bucket); + $this->checkProxy($result, $proxys); + } + + private function checkProxy($result, $proxys) + { + $this->assertEquals($result['info']['primary_ip'], $proxys['host']); + $this->assertEquals($result['info']['primary_port'], $proxys['port']); + $this->assertTrue(array_key_exists('via', $result)); + } + +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssExceptionTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssExceptionTest.php new file mode 100644 index 000000000..4a418d53e --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssExceptionTest.php @@ -0,0 +1,19 @@ +assertTrue(false); + } catch (OssException $e) { + $this->assertNotNull($e); + $this->assertEquals($e->getMessage(), "ERR"); + } + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssUtilTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssUtilTest.php new file mode 100644 index 000000000..adf645719 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssUtilTest.php @@ -0,0 +1,225 @@ +assertEquals(OssUtil::chkChinese("hello,world"), 0); + $str = '你好,这里是卖咖啡!'; + $strGBK = OssUtil::encodePath($str); + $this->assertEquals(OssUtil::chkChinese($str), 1); + $this->assertEquals(OssUtil::chkChinese($strGBK), 1); + } + + public function testIsGB2312() + { + $str = '你好,这里是卖咖啡!'; + $this->assertFalse(OssUtil::isGb2312($str)); + } + + public function testCheckChar() + { + $str = '你好,这里是卖咖啡!'; + $this->assertFalse(OssUtil::checkChar($str)); + $this->assertTrue(OssUtil::checkChar(iconv("UTF-8", "GB2312//IGNORE", $str))); + } + + public function testIsIpFormat() + { + $this->assertTrue(OssUtil::isIPFormat("10.101.160.147")); + $this->assertTrue(OssUtil::isIPFormat("12.12.12.34")); + $this->assertTrue(OssUtil::isIPFormat("12.12.12.12")); + $this->assertTrue(OssUtil::isIPFormat("255.255.255.255")); + $this->assertTrue(OssUtil::isIPFormat("0.1.1.1")); + $this->assertFalse(OssUtil::isIPFormat("0.1.1.x")); + $this->assertFalse(OssUtil::isIPFormat("0.1.1.256")); + $this->assertFalse(OssUtil::isIPFormat("256.1.1.1")); + $this->assertFalse(OssUtil::isIPFormat("0.1.1.0.1")); + $this->assertTrue(OssUtil::isIPFormat("10.10.10.10:123")); + } + + public function testToQueryString() + { + $option = array("a" => "b"); + $this->assertEquals('a=b', OssUtil::toQueryString($option)); + } + + public function testSReplace() + { + $str = "<>&'\""; + $this->assertEquals("&lt;&gt;&'"", OssUtil::sReplace($str)); + } + + public function testCheckChinese() + { + $str = '你好,这里是卖咖啡!'; + $this->assertEquals(OssUtil::chkChinese($str), 1); + if (OssUtil::isWin()) { + $strGB = OssUtil::encodePath($str); + $this->assertEquals($str, iconv("GB2312", "UTF-8", $strGB)); + } + } + + public function testValidateOption() + { + $option = 'string'; + + try { + OssUtil::validateOptions($option); + $this->assertFalse(true); + } catch (OssException $e) { + $this->assertEquals("string:option must be array", $e->getMessage()); + } + + $option = null; + + try { + OssUtil::validateOptions($option); + $this->assertTrue(true); + } catch (OssException $e) { + $this->assertFalse(true); + } + + } + + public function testCreateDeleteObjectsXmlBody() + { + $xml = <<trueobj1 +BBBB; + $a = array('obj1'); + $this->assertEquals($xml, $this->cleanXml(OssUtil::createDeleteObjectsXmlBody($a, 'true'))); + } + + public function testCreateCompleteMultipartUploadXmlBody() + { + $xml = <<2xx +BBBB; + $a = array(array("PartNumber" => 2, "ETag" => "xx")); + $this->assertEquals($this->cleanXml(OssUtil::createCompleteMultipartUploadXmlBody($a)), $xml); + } + + public function testCreateBucketXmlBody() + { + $xml = <<Standard +BBBB; + $storageClass ="Standard"; + $this->assertEquals($this->cleanXml(OssUtil::createBucketXmlBody($storageClass)), $xml); + } + + public function testValidateBucket() + { + $this->assertTrue(OssUtil::validateBucket("xxx")); + $this->assertFalse(OssUtil::validateBucket("XXXqwe123")); + $this->assertFalse(OssUtil::validateBucket("XX")); + $this->assertFalse(OssUtil::validateBucket("/X")); + $this->assertFalse(OssUtil::validateBucket("")); + } + + public function testValidateObject() + { + $this->assertTrue(OssUtil::validateObject("xxx")); + $this->assertTrue(OssUtil::validateObject("xxx23")); + $this->assertTrue(OssUtil::validateObject("12321-xxx")); + $this->assertTrue(OssUtil::validateObject("x")); + $this->assertFalse(OssUtil::validateObject("/aa")); + $this->assertFalse(OssUtil::validateObject("\\aa")); + $this->assertFalse(OssUtil::validateObject("")); + } + + public function testStartWith() + { + $this->assertTrue(OssUtil::startsWith("xxab", "xx"), true); + } + + public function testReadDir() + { + $list = OssUtil::readDir("./src", ".|..|.svn|.git", true); + $this->assertNotNull($list); + } + + public function testIsWin() + { + //$this->assertTrue(OssUtil::isWin()); + } + + public function testGetMd5SumForFile() + { + $this->assertEquals(OssUtil::getMd5SumForFile(__FILE__, 0, filesize(__FILE__) - 1), base64_encode(md5(file_get_contents(__FILE__), true))); + } + + public function testGenerateFile() + { + $path = __DIR__ . DIRECTORY_SEPARATOR . "generatedFile.txt"; + OssUtil::generateFile($path, 1024 * 1024); + $this->assertEquals(filesize($path), 1024 * 1024); + unlink($path); + } + + public function testThrowOssExceptionWithMessageIfEmpty() + { + $null = null; + try { + OssUtil::throwOssExceptionWithMessageIfEmpty($null, "xx"); + $this->assertTrue(false); + } catch (OssException $e) { + $this->assertEquals('xx', $e->getMessage()); + } + } + + public function testThrowOssExceptionWithMessageIfEmpty2() + { + $null = ""; + try { + OssUtil::throwOssExceptionWithMessageIfEmpty($null, "xx"); + $this->assertTrue(false); + } catch (OssException $e) { + $this->assertEquals('xx', $e->getMessage()); + } + } + + public function testValidContent() + { + $null = ""; + try { + OssUtil::validateContent($null); + $this->assertTrue(false); + } catch (OssException $e) { + $this->assertEquals('http body content is invalid', $e->getMessage()); + } + + $notnull = "x"; + try { + OssUtil::validateContent($notnull); + $this->assertTrue(true); + } catch (OssException $e) { + $this->assertEquals('http body content is invalid', $e->getMessage()); + } + } + + public function testThrowOssExceptionWithMessageIfEmpty3() + { + $null = "xx"; + try { + OssUtil::throwOssExceptionWithMessageIfEmpty($null, "xx"); + $this->assertTrue(True); + } catch (OssException $e) { + $this->assertTrue(false); + } + } + + private function cleanXml($xml) + { + return str_replace("\n", "", str_replace("\r", "", $xml)); + } + +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/PutSetDeleteResultTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/PutSetDeleteResultTest.php new file mode 100644 index 000000000..b298e4418 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/PutSetDeleteResultTest.php @@ -0,0 +1,66 @@ +assertFalse(true); + } catch (OssException $e) { + $this->assertEquals('raw response is null', $e->getMessage()); + } + } + + public function testOkResponse() + { + $header= array( + 'x-oss-request-id' => '582AA51E004C4550BD27E0E4', + 'etag' => '595FA1EA77945233921DF12427F9C7CE', + 'content-md5' => 'WV+h6neUUjOSHfEkJ/nHzg==', + 'info' => array( + 'http_code' => '200', + 'method' => 'PUT' + ), + ); + $response = new ResponseCore($header, "this is a mock body, just for test", 200); + $result = new PutSetDeleteResult($response); + $data = $result->getData(); + $this->assertTrue($result->isOK()); + $this->assertEquals("this is a mock body, just for test", $data['body']); + $this->assertEquals('582AA51E004C4550BD27E0E4', $data['x-oss-request-id']); + $this->assertEquals('595FA1EA77945233921DF12427F9C7CE', $data['etag']); + $this->assertEquals('WV+h6neUUjOSHfEkJ/nHzg==', $data['content-md5']); + $this->assertEquals('200', $data['info']['http_code']); + $this->assertEquals('PUT', $data['info']['method']); + } + + public function testFailResponse() + { + $response = new ResponseCore(array(), "", 301); + try { + new PutSetDeleteResult($response); + $this->assertFalse(true); + } catch (OssException $e) { + + } + } + + public function setUp() + { + + } + + public function tearDown() + { + + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/RefererConfigTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/RefererConfigTest.php new file mode 100644 index 000000000..8360a242c --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/RefererConfigTest.php @@ -0,0 +1,54 @@ + + +true + +http://www.aliyun.com +https://www.aliyun.com +http://www.*.com +https://www.?.aliyuncs.com + + +BBBB; + + private $validXml2 = << + +true + +http://www.aliyun.com + + +BBBB; + + public function testParseValidXml() + { + $refererConfig = new RefererConfig(); + $refererConfig->parseFromXml($this->validXml); + $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml($refererConfig->serializeToXml())); + } + + public function testParseValidXml2() + { + $refererConfig = new RefererConfig(); + $refererConfig->parseFromXml($this->validXml2); + $this->assertEquals(true, $refererConfig->isAllowEmptyReferer()); + $this->assertEquals(1, count($refererConfig->getRefererList())); + $this->assertEquals($this->cleanXml($this->validXml2), $this->cleanXml(strval($refererConfig))); + } + + private function cleanXml($xml) + { + return str_replace("\n", "", str_replace("\r", "", $xml)); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/StorageCapacityTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/StorageCapacityTest.php new file mode 100644 index 000000000..4562da7c3 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/StorageCapacityTest.php @@ -0,0 +1,59 @@ + + + 1 + +BBBB; + + private $validXml = << + + 1 + +BBBB; + + public function testParseInValidXml() + { + $response = new ResponseCore(array(), $this->inValidXml, 300); + try { + new GetStorageCapacityResult($response); + $this->assertTrue(false); + } catch (OssException $e) {} + } + + public function testParseEmptyXml() + { + $response = new ResponseCore(array(), "", 300); + try { + new GetStorageCapacityResult($response); + $this->assertTrue(false); + } catch (OssException $e) {} + } + + public function testParseValidXml() + { + $response = new ResponseCore(array(), $this->validXml, 200); + $result = new GetStorageCapacityResult($response); + $this->assertEquals($result->getData(), 1); + } + + public function testSerializeToXml() + { + $xml = "\n1\n"; + + $storageCapacityConfig = new StorageCapacityConfig(1); + $content = $storageCapacityConfig->serializeToXml(); + $this->assertEquals($content, $xml); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/SymlinkTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/SymlinkTest.php new file mode 100644 index 000000000..d257c9485 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/SymlinkTest.php @@ -0,0 +1,74 @@ +ossClient ->putObject($bucket, $object, 'test_content'); + $this->ossClient->putSymlink($bucket, $symlink, $object); + $result = $this->ossClient->getObject($bucket, $symlink); + $this->assertEquals('test_content', $result); + + $this->ossClient ->putObject($bucket, $special_object, 'test_content'); + $this->ossClient->putSymlink($bucket, $symlink, $special_object); + $result = $this->ossClient->getObject($bucket, $symlink); + $this->assertEquals('test_content', $result); + } + + public function testGetSymlink() + { + $bucket = getenv('OSS_BUCKET'); + $symlink = 'test-link'; + $object = 'exist_object^$#!~'; + + $result = $this->ossClient->getSymlink($bucket, $symlink); + $this->assertEquals($result[OssClient::OSS_SYMLINK_TARGET], $object); + $this->assertEquals('200', $result[OssClient::OSS_INFO][OssClient::OSS_HTTP_CODE]); + $this->assertTrue(isset($result[OssClient::OSS_ETAG])); + $this->assertTrue(isset($result[OssClient::OSS_REQUEST_ID])); + } + + public function testPutNullSymlink() + { + $bucket = getenv('OSS_BUCKET'); + $symlink = 'null-link'; + $object_not_exist = 'not_exist_object+$#!b不'; + $this->ossClient->putSymlink($bucket, $symlink, $object_not_exist); + + try{ + $this->ossClient->getObject($bucket, $symlink); + $this->assertTrue(false); + }catch (OssException $e){ + $this->assertEquals('The symlink target object does not exist', $e->getErrorMessage()); + } + } + + public function testGetNullSymlink() + { + $bucket = getenv('OSS_BUCKET'); + $symlink = 'null-link-new'; + + try{ + $result = $this->ossClient->getSymlink($bucket, $symlink); + $this->assertTrue(false); + }catch (OssException $e){ + $this->assertEquals('The specified key does not exist.', $e->getErrorMessage()); + } + } +} + + diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/TestOssClientBase.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/TestOssClientBase.php new file mode 100644 index 000000000..4abd31f92 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/TestOssClientBase.php @@ -0,0 +1,51 @@ +bucket = Common::getBucketName() . rand(100000, 999999); + $this->ossClient = Common::getOssClient(); + $this->ossClient->createBucket($this->bucket); + Common::waitMetaSync(); + } + + public function tearDown() + { + if (!$this->ossClient->doesBucketExist($this->bucket)) { + return; + } + + $objects = $this->ossClient->listObjects( + $this->bucket, array('max-keys' => 1000, 'delimiter' => ''))->getObjectList(); + $keys = array(); + foreach ($objects as $obj) { + $keys[] = $obj->getKey(); + } + if (count($keys) > 0) { + $this->ossClient->deleteObjects($this->bucket, $keys); + } + $uploads = $this->ossClient->listMultipartUploads($this->bucket)->getUploads(); + foreach ($uploads as $up) { + $this->ossClient->abortMultipartUpload($this->bucket, $up->getKey(), $up->getUploadId()); + } + + $this->ossClient->deleteBucket($this->bucket); + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/UploadPartResultTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/UploadPartResultTest.php new file mode 100644 index 000000000..e4789efe6 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/UploadPartResultTest.php @@ -0,0 +1,33 @@ + '7265F4D211B56873A381D321F586E4A9'); + private $invalidHeader = array(); + + public function testParseValidHeader() + { + $response = new ResponseCore($this->validHeader, "", 200); + $result = new UploadPartResult($response); + $eTag = $result->getData(); + $this->assertEquals('7265F4D211B56873A381D321F586E4A9', $eTag); + } + + public function testParseInvalidHeader() + { + $response = new ResponseCore($this->invalidHeader, "", 200); + try { + new UploadPartResult($response); + $this->assertTrue(false); + } catch (OssException $e) { + $this->assertEquals('cannot get ETag', $e->getMessage()); + } + } +} diff --git a/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/WebsiteConfigTest.php b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/WebsiteConfigTest.php new file mode 100644 index 000000000..2ec0fcbb5 --- /dev/null +++ b/vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/WebsiteConfigTest.php @@ -0,0 +1,56 @@ + + + +index.html + + +errorDocument.html + + +BBBB; + + private $nullXml = << +BBBB; + private $nullXml2 = << +BBBB; + + public function testParseValidXml() + { + $websiteConfig = new WebsiteConfig("index"); + $websiteConfig->parseFromXml($this->validXml); + $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml($websiteConfig->serializeToXml())); + } + + public function testParsenullXml() + { + $websiteConfig = new WebsiteConfig(); + $websiteConfig->parseFromXml($this->nullXml); + $this->assertTrue($this->cleanXml($this->nullXml) === $this->cleanXml($websiteConfig->serializeToXml()) || + $this->cleanXml($this->nullXml2) === $this->cleanXml($websiteConfig->serializeToXml())); + } + + public function testWebsiteConstruct() + { + $websiteConfig = new WebsiteConfig("index.html", "errorDocument.html"); + $this->assertEquals('index.html', $websiteConfig->getIndexDocument()); + $this->assertEquals('errorDocument.html', $websiteConfig->getErrorDocument()); + $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml($websiteConfig->serializeToXml())); + } + + private function cleanXml($xml) + { + return str_replace("\n", "", str_replace("\r", "", $xml)); + } +} diff --git a/vendor/autoload.php b/vendor/autoload.php new file mode 100644 index 000000000..b43db8758 --- /dev/null +++ b/vendor/autoload.php @@ -0,0 +1,7 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see http://www.php-fig.org/psr/psr-0/ + * @see http://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + // PSR-4 + private $prefixLengthsPsr4 = array(); + private $prefixDirsPsr4 = array(); + private $fallbackDirsPsr4 = array(); + + // PSR-0 + private $prefixesPsr0 = array(); + private $fallbackDirsPsr0 = array(); + + private $useIncludePath = false; + private $classMap = array(); + private $classMapAuthoritative = false; + private $missingClasses = array(); + private $apcuPrefix; + + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', $this->prefixesPsr0); + } + + return array(); + } + + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array $classMap Class to filename map + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 base directories + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + } + + /** + * Unregisters this instance as an autoloader. + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return bool|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + includeFile($file); + + return true; + } + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath.'\\'; + if (isset($this->prefixDirsPsr4[$search])) { + foreach ($this->prefixDirsPsr4[$search] as $dir) { + $length = $this->prefixLengthsPsr4[$first][$search]; + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + */ +function includeFile($file) +{ + include $file; +} diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE new file mode 100644 index 000000000..f27399a04 --- /dev/null +++ b/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php new file mode 100644 index 000000000..1d267a20c --- /dev/null +++ b/vendor/composer/autoload_classmap.php @@ -0,0 +1,176 @@ + $vendorDir . '/endroid/qr-code/src/Bundle/Controller/QrCodeController.php', + 'Endroid\\QrCode\\Bundle\\DependencyInjection\\Configuration' => $vendorDir . '/endroid/qr-code/src/Bundle/DependencyInjection/Configuration.php', + 'Endroid\\QrCode\\Bundle\\DependencyInjection\\EndroidQrCodeExtension' => $vendorDir . '/endroid/qr-code/src/Bundle/DependencyInjection/EndroidQrCodeExtension.php', + 'Endroid\\QrCode\\Bundle\\EndroidQrCodeBundle' => $vendorDir . '/endroid/qr-code/src/Bundle/EndroidQrCodeBundle.php', + 'Endroid\\QrCode\\Bundle\\Twig\\Extension\\QrCodeExtension' => $vendorDir . '/endroid/qr-code/src/Bundle/Twig/Extension/QrCodeExtension.php', + 'Endroid\\QrCode\\Exceptions\\DataDoesntExistsException' => $vendorDir . '/endroid/qr-code/src/Exceptions/DataDoesntExistsException.php', + 'Endroid\\QrCode\\Exceptions\\FreeTypeLibraryMissingException' => $vendorDir . '/endroid/qr-code/src/Exceptions/FreeTypeLibraryMissingException.php', + 'Endroid\\QrCode\\Exceptions\\ImageFunctionFailedException' => $vendorDir . '/endroid/qr-code/src/Exceptions/ImageFunctionFailedException.php', + 'Endroid\\QrCode\\Exceptions\\ImageFunctionUnknownException' => $vendorDir . '/endroid/qr-code/src/Exceptions/ImageFunctionUnknownException.php', + 'Endroid\\QrCode\\Exceptions\\ImageSizeTooLargeException' => $vendorDir . '/endroid/qr-code/src/Exceptions/ImageSizeTooLargeException.php', + 'Endroid\\QrCode\\Exceptions\\ImageTypeInvalidException' => $vendorDir . '/endroid/qr-code/src/Exceptions/ImageTypeInvalidException.php', + 'Endroid\\QrCode\\Exceptions\\VersionTooLargeException' => $vendorDir . '/endroid/qr-code/src/Exceptions/VersionTooLargeException.php', + 'Endroid\\QrCode\\Factory\\QrCodeFactory' => $vendorDir . '/endroid/qr-code/src/Factory/QrCodeFactory.php', + 'Endroid\\QrCode\\QrCode' => $vendorDir . '/endroid/qr-code/src/QrCode.php', + 'Ip2Region' => $vendorDir . '/zoujingli/ip2region/Ip2Region.php', + 'OSS\\Core\\MimeTypes' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Core/MimeTypes.php', + 'OSS\\Core\\OssException' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Core/OssException.php', + 'OSS\\Core\\OssUtil' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Core/OssUtil.php', + 'OSS\\Http\\RequestCore' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore.php', + 'OSS\\Http\\RequestCore_Exception' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore_Exception.php', + 'OSS\\Http\\ResponseCore' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Http/ResponseCore.php', + 'OSS\\Model\\BucketInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/BucketInfo.php', + 'OSS\\Model\\BucketListInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/BucketListInfo.php', + 'OSS\\Model\\CnameConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/CnameConfig.php', + 'OSS\\Model\\CorsConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/CorsConfig.php', + 'OSS\\Model\\CorsRule' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/CorsRule.php', + 'OSS\\Model\\GetLiveChannelHistory' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelHistory.php', + 'OSS\\Model\\GetLiveChannelInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelInfo.php', + 'OSS\\Model\\GetLiveChannelStatus' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelStatus.php', + 'OSS\\Model\\LifecycleAction' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleAction.php', + 'OSS\\Model\\LifecycleConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleConfig.php', + 'OSS\\Model\\LifecycleRule' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleRule.php', + 'OSS\\Model\\ListMultipartUploadInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/ListMultipartUploadInfo.php', + 'OSS\\Model\\ListPartsInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/ListPartsInfo.php', + 'OSS\\Model\\LiveChannelConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelConfig.php', + 'OSS\\Model\\LiveChannelHistory' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelHistory.php', + 'OSS\\Model\\LiveChannelInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelInfo.php', + 'OSS\\Model\\LiveChannelListInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelListInfo.php', + 'OSS\\Model\\LoggingConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/LoggingConfig.php', + 'OSS\\Model\\ObjectInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectInfo.php', + 'OSS\\Model\\ObjectListInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectListInfo.php', + 'OSS\\Model\\PartInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/PartInfo.php', + 'OSS\\Model\\PrefixInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/PrefixInfo.php', + 'OSS\\Model\\RefererConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/RefererConfig.php', + 'OSS\\Model\\StorageCapacityConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/StorageCapacityConfig.php', + 'OSS\\Model\\UploadInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/UploadInfo.php', + 'OSS\\Model\\WebsiteConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/WebsiteConfig.php', + 'OSS\\Model\\XmlConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/XmlConfig.php', + 'OSS\\OssClient' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/OssClient.php', + 'OSS\\Result\\AclResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/AclResult.php', + 'OSS\\Result\\AppendResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/AppendResult.php', + 'OSS\\Result\\BodyResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/BodyResult.php', + 'OSS\\Result\\CallbackResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/CallbackResult.php', + 'OSS\\Result\\CopyObjectResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/CopyObjectResult.php', + 'OSS\\Result\\DeleteObjectsResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/DeleteObjectsResult.php', + 'OSS\\Result\\ExistResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/ExistResult.php', + 'OSS\\Result\\GetCnameResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetCnameResult.php', + 'OSS\\Result\\GetCorsResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetCorsResult.php', + 'OSS\\Result\\GetLifecycleResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLifecycleResult.php', + 'OSS\\Result\\GetLiveChannelHistoryResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelHistoryResult.php', + 'OSS\\Result\\GetLiveChannelInfoResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelInfoResult.php', + 'OSS\\Result\\GetLiveChannelStatusResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelStatusResult.php', + 'OSS\\Result\\GetLocationResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLocationResult.php', + 'OSS\\Result\\GetLoggingResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLoggingResult.php', + 'OSS\\Result\\GetRefererResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetRefererResult.php', + 'OSS\\Result\\GetStorageCapacityResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetStorageCapacityResult.php', + 'OSS\\Result\\GetWebsiteResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetWebsiteResult.php', + 'OSS\\Result\\HeaderResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/HeaderResult.php', + 'OSS\\Result\\InitiateMultipartUploadResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/InitiateMultipartUploadResult.php', + 'OSS\\Result\\ListBucketsResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListBucketsResult.php', + 'OSS\\Result\\ListLiveChannelResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListLiveChannelResult.php', + 'OSS\\Result\\ListMultipartUploadResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListMultipartUploadResult.php', + 'OSS\\Result\\ListObjectsResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectsResult.php', + 'OSS\\Result\\ListPartsResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListPartsResult.php', + 'OSS\\Result\\PutLiveChannelResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/PutLiveChannelResult.php', + 'OSS\\Result\\PutSetDeleteResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/PutSetDeleteResult.php', + 'OSS\\Result\\Result' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/Result.php', + 'OSS\\Result\\SymlinkResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/SymlinkResult.php', + 'OSS\\Result\\UploadPartResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/UploadPartResult.php', + 'Qiniu\\Auth' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Auth.php', + 'Qiniu\\Cdn\\CdnManager' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Cdn/CdnManager.php', + 'Qiniu\\Config' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Config.php', + 'Qiniu\\Etag' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Etag.php', + 'Qiniu\\Http\\Client' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Http/Client.php', + 'Qiniu\\Http\\Error' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Http/Error.php', + 'Qiniu\\Http\\Request' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Http/Request.php', + 'Qiniu\\Http\\Response' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Http/Response.php', + 'Qiniu\\Processing\\ImageUrlBuilder' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Processing/ImageUrlBuilder.php', + 'Qiniu\\Processing\\Operation' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Processing/Operation.php', + 'Qiniu\\Processing\\PersistentFop' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Processing/PersistentFop.php', + 'Qiniu\\Storage\\BucketManager' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Storage/BucketManager.php', + 'Qiniu\\Storage\\FormUploader' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Storage/FormUploader.php', + 'Qiniu\\Storage\\ResumeUploader' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Storage/ResumeUploader.php', + 'Qiniu\\Storage\\UploadManager' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Storage/UploadManager.php', + 'Qiniu\\Zone' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Zone.php', + 'Symfony\\Component\\OptionsResolver\\Exception\\AccessException' => $vendorDir . '/symfony/options-resolver/Exception/AccessException.php', + 'Symfony\\Component\\OptionsResolver\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/options-resolver/Exception/ExceptionInterface.php', + 'Symfony\\Component\\OptionsResolver\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/options-resolver/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\OptionsResolver\\Exception\\InvalidOptionsException' => $vendorDir . '/symfony/options-resolver/Exception/InvalidOptionsException.php', + 'Symfony\\Component\\OptionsResolver\\Exception\\MissingOptionsException' => $vendorDir . '/symfony/options-resolver/Exception/MissingOptionsException.php', + 'Symfony\\Component\\OptionsResolver\\Exception\\NoSuchOptionException' => $vendorDir . '/symfony/options-resolver/Exception/NoSuchOptionException.php', + 'Symfony\\Component\\OptionsResolver\\Exception\\OptionDefinitionException' => $vendorDir . '/symfony/options-resolver/Exception/OptionDefinitionException.php', + 'Symfony\\Component\\OptionsResolver\\Exception\\UndefinedOptionsException' => $vendorDir . '/symfony/options-resolver/Exception/UndefinedOptionsException.php', + 'Symfony\\Component\\OptionsResolver\\Options' => $vendorDir . '/symfony/options-resolver/Options.php', + 'Symfony\\Component\\OptionsResolver\\OptionsResolver' => $vendorDir . '/symfony/options-resolver/OptionsResolver.php', + 'WeChat\\Card' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Card.php', + 'WeChat\\Contracts\\BasicPushEvent' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Contracts/BasicPushEvent.php', + 'WeChat\\Contracts\\BasicWeChat' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Contracts/BasicWeChat.php', + 'WeChat\\Contracts\\DataArray' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Contracts/DataArray.php', + 'WeChat\\Contracts\\DataError' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Contracts/DataError.php', + 'WeChat\\Contracts\\Tools' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Contracts/Tools.php', + 'WeChat\\Custom' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Custom.php', + 'WeChat\\Exceptions\\InvalidArgumentException' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Exceptions/InvalidArgumentException.php', + 'WeChat\\Exceptions\\InvalidDecryptException' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Exceptions/InvalidDecryptException.php', + 'WeChat\\Exceptions\\InvalidResponseException' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Exceptions/InvalidResponseException.php', + 'WeChat\\Exceptions\\LocalCacheException' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Exceptions/LocalCacheException.php', + 'WeChat\\Limit' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Limit.php', + 'WeChat\\Media' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Media.php', + 'WeChat\\Menu' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Menu.php', + 'WeChat\\Oauth' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Oauth.php', + 'WeChat\\Pay' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Pay.php', + 'WeChat\\Product' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Product.php', + 'WeChat\\Qrcode' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Qrcode.php', + 'WeChat\\Receive' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Receive.php', + 'WeChat\\Scan' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Scan.php', + 'WeChat\\Script' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Script.php', + 'WeChat\\Shake' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Shake.php', + 'WeChat\\Tags' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Tags.php', + 'WeChat\\Template' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Template.php', + 'WeChat\\User' => $vendorDir . '/zoujingli/wechat-developer/WeChat/User.php', + 'WeChat\\Wifi' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Wifi.php', + 'WeOpen\\Service' => $vendorDir . '/zoujingli/weopen-developer/WeOpen/Service.php', + 'app\\admin\\controller\\Auth' => $baseDir . '/application/admin/controller/Auth.php', + 'app\\admin\\controller\\Config' => $baseDir . '/application/admin/controller/Config.php', + 'app\\admin\\controller\\Index' => $baseDir . '/application/admin/controller/Index.php', + 'app\\admin\\controller\\Log' => $baseDir . '/application/admin/controller/Log.php', + 'app\\admin\\controller\\Login' => $baseDir . '/application/admin/controller/Login.php', + 'app\\admin\\controller\\Menu' => $baseDir . '/application/admin/controller/Menu.php', + 'app\\admin\\controller\\Node' => $baseDir . '/application/admin/controller/Node.php', + 'app\\admin\\controller\\Plugs' => $baseDir . '/application/admin/controller/Plugs.php', + 'app\\admin\\controller\\User' => $baseDir . '/application/admin/controller/User.php', + 'app\\goods\\controller\\Brand' => $baseDir . '/application/goods/controller/Brand.php', + 'app\\goods\\controller\\Cate' => $baseDir . '/application/goods/controller/Cate.php', + 'app\\goods\\controller\\Product' => $baseDir . '/application/goods/controller/Product.php', + 'app\\goods\\controller\\Spec' => $baseDir . '/application/goods/controller/Spec.php', + 'app\\goods\\service\\ProductService' => $baseDir . '/application/goods/service/ProductService.php', + 'app\\index\\controller\\Index' => $baseDir . '/application/index/controller/Index.php', + 'app\\wechat\\controller\\Block' => $baseDir . '/application/wechat/controller/Block.php', + 'app\\wechat\\controller\\Config' => $baseDir . '/application/wechat/controller/Config.php', + 'app\\wechat\\controller\\Fans' => $baseDir . '/application/wechat/controller/Fans.php', + 'app\\wechat\\controller\\Keys' => $baseDir . '/application/wechat/controller/Keys.php', + 'app\\wechat\\controller\\Menu' => $baseDir . '/application/wechat/controller/Menu.php', + 'app\\wechat\\controller\\News' => $baseDir . '/application/wechat/controller/News.php', + 'app\\wechat\\controller\\Review' => $baseDir . '/application/wechat/controller/Review.php', + 'app\\wechat\\controller\\Tags' => $baseDir . '/application/wechat/controller/Tags.php', + 'app\\wechat\\controller\\api\\Js' => $baseDir . '/application/wechat/controller/api/Js.php', + 'app\\wechat\\controller\\api\\Push' => $baseDir . '/application/wechat/controller/api/Push.php', + 'app\\wechat\\controller\\api\\Tools' => $baseDir . '/application/wechat/controller/api/Tools.php', + 'app\\wechat\\service\\FansService' => $baseDir . '/application/wechat/service/FansService.php', + 'app\\wechat\\service\\MediaService' => $baseDir . '/application/wechat/service/MediaService.php', + 'app\\wechat\\service\\TagsService' => $baseDir . '/application/wechat/service/TagsService.php', + 'think\\captcha\\Captcha' => $vendorDir . '/topthink/think-captcha/src/Captcha.php', + 'think\\captcha\\CaptchaController' => $vendorDir . '/topthink/think-captcha/src/CaptchaController.php', + 'think\\composer\\Plugin' => $vendorDir . '/topthink/think-installer/src/Plugin.php', + 'think\\composer\\ThinkExtend' => $vendorDir . '/topthink/think-installer/src/ThinkExtend.php', + 'think\\composer\\ThinkFramework' => $vendorDir . '/topthink/think-installer/src/ThinkFramework.php', + 'think\\composer\\ThinkTesting' => $vendorDir . '/topthink/think-installer/src/ThinkTesting.php', +); diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php new file mode 100644 index 000000000..d83d945e0 --- /dev/null +++ b/vendor/composer/autoload_files.php @@ -0,0 +1,11 @@ + $vendorDir . '/topthink/think-captcha/src/helper.php', + '841780ea2e1d6545ea3a253239d59c05' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/functions.php', +); diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php new file mode 100644 index 000000000..b7fc0125d --- /dev/null +++ b/vendor/composer/autoload_namespaces.php @@ -0,0 +1,9 @@ + array($vendorDir . '/topthink/think-installer/src'), + 'think\\captcha\\' => array($vendorDir . '/topthink/think-captcha/src'), + 'app\\' => array($baseDir . '/application'), + 'WeOpen\\' => array($vendorDir . '/zoujingli/weopen-developer/WeOpen'), + 'WeChat\\' => array($vendorDir . '/zoujingli/wechat-developer/WeChat'), + 'Symfony\\Component\\OptionsResolver\\' => array($vendorDir . '/symfony/options-resolver'), + 'Qiniu\\' => array($vendorDir . '/qiniu/php-sdk/src/Qiniu'), + 'OSS\\' => array($vendorDir . '/aliyuncs/oss-sdk-php/src/OSS'), + 'Endroid\\QrCode\\' => array($vendorDir . '/endroid/qr-code/src'), +); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php new file mode 100644 index 000000000..4aed4751e --- /dev/null +++ b/vendor/composer/autoload_real.php @@ -0,0 +1,70 @@ += 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); + if ($useStaticLoader) { + require_once __DIR__ . '/autoload_static.php'; + + call_user_func(\Composer\Autoload\ComposerStaticInite11d5d0f579f9ff8739edc30bb4f8f32::getInitializer($loader)); + } else { + $map = require __DIR__ . '/autoload_namespaces.php'; + foreach ($map as $namespace => $path) { + $loader->set($namespace, $path); + } + + $map = require __DIR__ . '/autoload_psr4.php'; + foreach ($map as $namespace => $path) { + $loader->setPsr4($namespace, $path); + } + + $classMap = require __DIR__ . '/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + } + + $loader->register(true); + + if ($useStaticLoader) { + $includeFiles = Composer\Autoload\ComposerStaticInite11d5d0f579f9ff8739edc30bb4f8f32::$files; + } else { + $includeFiles = require __DIR__ . '/autoload_files.php'; + } + foreach ($includeFiles as $fileIdentifier => $file) { + composerRequiree11d5d0f579f9ff8739edc30bb4f8f32($fileIdentifier, $file); + } + + return $loader; + } +} + +function composerRequiree11d5d0f579f9ff8739edc30bb4f8f32($fileIdentifier, $file) +{ + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + require $file; + + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + } +} diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php new file mode 100644 index 000000000..3e32647b7 --- /dev/null +++ b/vendor/composer/autoload_static.php @@ -0,0 +1,265 @@ + __DIR__ . '/..' . '/topthink/think-captcha/src/helper.php', + '841780ea2e1d6545ea3a253239d59c05' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/functions.php', + ); + + public static $prefixLengthsPsr4 = array ( + 't' => + array ( + 'think\\composer\\' => 15, + 'think\\captcha\\' => 14, + ), + 'a' => + array ( + 'app\\' => 4, + ), + 'W' => + array ( + 'WeOpen\\' => 7, + 'WeChat\\' => 7, + ), + 'S' => + array ( + 'Symfony\\Component\\OptionsResolver\\' => 34, + ), + 'Q' => + array ( + 'Qiniu\\' => 6, + ), + 'O' => + array ( + 'OSS\\' => 4, + ), + 'E' => + array ( + 'Endroid\\QrCode\\' => 15, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'think\\composer\\' => + array ( + 0 => __DIR__ . '/..' . '/topthink/think-installer/src', + ), + 'think\\captcha\\' => + array ( + 0 => __DIR__ . '/..' . '/topthink/think-captcha/src', + ), + 'app\\' => + array ( + 0 => __DIR__ . '/../..' . '/application', + ), + 'WeOpen\\' => + array ( + 0 => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeOpen', + ), + 'WeChat\\' => + array ( + 0 => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat', + ), + 'Symfony\\Component\\OptionsResolver\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/options-resolver', + ), + 'Qiniu\\' => + array ( + 0 => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu', + ), + 'OSS\\' => + array ( + 0 => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS', + ), + 'Endroid\\QrCode\\' => + array ( + 0 => __DIR__ . '/..' . '/endroid/qr-code/src', + ), + ); + + public static $classMap = array ( + 'Endroid\\QrCode\\Bundle\\Controller\\QrCodeController' => __DIR__ . '/..' . '/endroid/qr-code/src/Bundle/Controller/QrCodeController.php', + 'Endroid\\QrCode\\Bundle\\DependencyInjection\\Configuration' => __DIR__ . '/..' . '/endroid/qr-code/src/Bundle/DependencyInjection/Configuration.php', + 'Endroid\\QrCode\\Bundle\\DependencyInjection\\EndroidQrCodeExtension' => __DIR__ . '/..' . '/endroid/qr-code/src/Bundle/DependencyInjection/EndroidQrCodeExtension.php', + 'Endroid\\QrCode\\Bundle\\EndroidQrCodeBundle' => __DIR__ . '/..' . '/endroid/qr-code/src/Bundle/EndroidQrCodeBundle.php', + 'Endroid\\QrCode\\Bundle\\Twig\\Extension\\QrCodeExtension' => __DIR__ . '/..' . '/endroid/qr-code/src/Bundle/Twig/Extension/QrCodeExtension.php', + 'Endroid\\QrCode\\Exceptions\\DataDoesntExistsException' => __DIR__ . '/..' . '/endroid/qr-code/src/Exceptions/DataDoesntExistsException.php', + 'Endroid\\QrCode\\Exceptions\\FreeTypeLibraryMissingException' => __DIR__ . '/..' . '/endroid/qr-code/src/Exceptions/FreeTypeLibraryMissingException.php', + 'Endroid\\QrCode\\Exceptions\\ImageFunctionFailedException' => __DIR__ . '/..' . '/endroid/qr-code/src/Exceptions/ImageFunctionFailedException.php', + 'Endroid\\QrCode\\Exceptions\\ImageFunctionUnknownException' => __DIR__ . '/..' . '/endroid/qr-code/src/Exceptions/ImageFunctionUnknownException.php', + 'Endroid\\QrCode\\Exceptions\\ImageSizeTooLargeException' => __DIR__ . '/..' . '/endroid/qr-code/src/Exceptions/ImageSizeTooLargeException.php', + 'Endroid\\QrCode\\Exceptions\\ImageTypeInvalidException' => __DIR__ . '/..' . '/endroid/qr-code/src/Exceptions/ImageTypeInvalidException.php', + 'Endroid\\QrCode\\Exceptions\\VersionTooLargeException' => __DIR__ . '/..' . '/endroid/qr-code/src/Exceptions/VersionTooLargeException.php', + 'Endroid\\QrCode\\Factory\\QrCodeFactory' => __DIR__ . '/..' . '/endroid/qr-code/src/Factory/QrCodeFactory.php', + 'Endroid\\QrCode\\QrCode' => __DIR__ . '/..' . '/endroid/qr-code/src/QrCode.php', + 'Ip2Region' => __DIR__ . '/..' . '/zoujingli/ip2region/Ip2Region.php', + 'OSS\\Core\\MimeTypes' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Core/MimeTypes.php', + 'OSS\\Core\\OssException' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Core/OssException.php', + 'OSS\\Core\\OssUtil' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Core/OssUtil.php', + 'OSS\\Http\\RequestCore' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore.php', + 'OSS\\Http\\RequestCore_Exception' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore_Exception.php', + 'OSS\\Http\\ResponseCore' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Http/ResponseCore.php', + 'OSS\\Model\\BucketInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/BucketInfo.php', + 'OSS\\Model\\BucketListInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/BucketListInfo.php', + 'OSS\\Model\\CnameConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/CnameConfig.php', + 'OSS\\Model\\CorsConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/CorsConfig.php', + 'OSS\\Model\\CorsRule' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/CorsRule.php', + 'OSS\\Model\\GetLiveChannelHistory' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelHistory.php', + 'OSS\\Model\\GetLiveChannelInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelInfo.php', + 'OSS\\Model\\GetLiveChannelStatus' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelStatus.php', + 'OSS\\Model\\LifecycleAction' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleAction.php', + 'OSS\\Model\\LifecycleConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleConfig.php', + 'OSS\\Model\\LifecycleRule' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleRule.php', + 'OSS\\Model\\ListMultipartUploadInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/ListMultipartUploadInfo.php', + 'OSS\\Model\\ListPartsInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/ListPartsInfo.php', + 'OSS\\Model\\LiveChannelConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelConfig.php', + 'OSS\\Model\\LiveChannelHistory' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelHistory.php', + 'OSS\\Model\\LiveChannelInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelInfo.php', + 'OSS\\Model\\LiveChannelListInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelListInfo.php', + 'OSS\\Model\\LoggingConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/LoggingConfig.php', + 'OSS\\Model\\ObjectInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectInfo.php', + 'OSS\\Model\\ObjectListInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectListInfo.php', + 'OSS\\Model\\PartInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/PartInfo.php', + 'OSS\\Model\\PrefixInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/PrefixInfo.php', + 'OSS\\Model\\RefererConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/RefererConfig.php', + 'OSS\\Model\\StorageCapacityConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/StorageCapacityConfig.php', + 'OSS\\Model\\UploadInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/UploadInfo.php', + 'OSS\\Model\\WebsiteConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/WebsiteConfig.php', + 'OSS\\Model\\XmlConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/XmlConfig.php', + 'OSS\\OssClient' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/OssClient.php', + 'OSS\\Result\\AclResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/AclResult.php', + 'OSS\\Result\\AppendResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/AppendResult.php', + 'OSS\\Result\\BodyResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/BodyResult.php', + 'OSS\\Result\\CallbackResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/CallbackResult.php', + 'OSS\\Result\\CopyObjectResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/CopyObjectResult.php', + 'OSS\\Result\\DeleteObjectsResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/DeleteObjectsResult.php', + 'OSS\\Result\\ExistResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/ExistResult.php', + 'OSS\\Result\\GetCnameResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetCnameResult.php', + 'OSS\\Result\\GetCorsResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetCorsResult.php', + 'OSS\\Result\\GetLifecycleResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLifecycleResult.php', + 'OSS\\Result\\GetLiveChannelHistoryResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelHistoryResult.php', + 'OSS\\Result\\GetLiveChannelInfoResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelInfoResult.php', + 'OSS\\Result\\GetLiveChannelStatusResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelStatusResult.php', + 'OSS\\Result\\GetLocationResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLocationResult.php', + 'OSS\\Result\\GetLoggingResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLoggingResult.php', + 'OSS\\Result\\GetRefererResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetRefererResult.php', + 'OSS\\Result\\GetStorageCapacityResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetStorageCapacityResult.php', + 'OSS\\Result\\GetWebsiteResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetWebsiteResult.php', + 'OSS\\Result\\HeaderResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/HeaderResult.php', + 'OSS\\Result\\InitiateMultipartUploadResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/InitiateMultipartUploadResult.php', + 'OSS\\Result\\ListBucketsResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListBucketsResult.php', + 'OSS\\Result\\ListLiveChannelResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListLiveChannelResult.php', + 'OSS\\Result\\ListMultipartUploadResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListMultipartUploadResult.php', + 'OSS\\Result\\ListObjectsResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectsResult.php', + 'OSS\\Result\\ListPartsResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListPartsResult.php', + 'OSS\\Result\\PutLiveChannelResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/PutLiveChannelResult.php', + 'OSS\\Result\\PutSetDeleteResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/PutSetDeleteResult.php', + 'OSS\\Result\\Result' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/Result.php', + 'OSS\\Result\\SymlinkResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/SymlinkResult.php', + 'OSS\\Result\\UploadPartResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/UploadPartResult.php', + 'Qiniu\\Auth' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Auth.php', + 'Qiniu\\Cdn\\CdnManager' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Cdn/CdnManager.php', + 'Qiniu\\Config' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Config.php', + 'Qiniu\\Etag' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Etag.php', + 'Qiniu\\Http\\Client' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Http/Client.php', + 'Qiniu\\Http\\Error' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Http/Error.php', + 'Qiniu\\Http\\Request' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Http/Request.php', + 'Qiniu\\Http\\Response' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Http/Response.php', + 'Qiniu\\Processing\\ImageUrlBuilder' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Processing/ImageUrlBuilder.php', + 'Qiniu\\Processing\\Operation' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Processing/Operation.php', + 'Qiniu\\Processing\\PersistentFop' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Processing/PersistentFop.php', + 'Qiniu\\Storage\\BucketManager' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Storage/BucketManager.php', + 'Qiniu\\Storage\\FormUploader' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Storage/FormUploader.php', + 'Qiniu\\Storage\\ResumeUploader' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Storage/ResumeUploader.php', + 'Qiniu\\Storage\\UploadManager' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Storage/UploadManager.php', + 'Qiniu\\Zone' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Zone.php', + 'Symfony\\Component\\OptionsResolver\\Exception\\AccessException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/AccessException.php', + 'Symfony\\Component\\OptionsResolver\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/ExceptionInterface.php', + 'Symfony\\Component\\OptionsResolver\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\OptionsResolver\\Exception\\InvalidOptionsException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/InvalidOptionsException.php', + 'Symfony\\Component\\OptionsResolver\\Exception\\MissingOptionsException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/MissingOptionsException.php', + 'Symfony\\Component\\OptionsResolver\\Exception\\NoSuchOptionException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/NoSuchOptionException.php', + 'Symfony\\Component\\OptionsResolver\\Exception\\OptionDefinitionException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/OptionDefinitionException.php', + 'Symfony\\Component\\OptionsResolver\\Exception\\UndefinedOptionsException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/UndefinedOptionsException.php', + 'Symfony\\Component\\OptionsResolver\\Options' => __DIR__ . '/..' . '/symfony/options-resolver/Options.php', + 'Symfony\\Component\\OptionsResolver\\OptionsResolver' => __DIR__ . '/..' . '/symfony/options-resolver/OptionsResolver.php', + 'WeChat\\Card' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Card.php', + 'WeChat\\Contracts\\BasicPushEvent' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Contracts/BasicPushEvent.php', + 'WeChat\\Contracts\\BasicWeChat' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Contracts/BasicWeChat.php', + 'WeChat\\Contracts\\DataArray' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Contracts/DataArray.php', + 'WeChat\\Contracts\\DataError' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Contracts/DataError.php', + 'WeChat\\Contracts\\Tools' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Contracts/Tools.php', + 'WeChat\\Custom' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Custom.php', + 'WeChat\\Exceptions\\InvalidArgumentException' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Exceptions/InvalidArgumentException.php', + 'WeChat\\Exceptions\\InvalidDecryptException' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Exceptions/InvalidDecryptException.php', + 'WeChat\\Exceptions\\InvalidResponseException' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Exceptions/InvalidResponseException.php', + 'WeChat\\Exceptions\\LocalCacheException' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Exceptions/LocalCacheException.php', + 'WeChat\\Limit' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Limit.php', + 'WeChat\\Media' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Media.php', + 'WeChat\\Menu' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Menu.php', + 'WeChat\\Oauth' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Oauth.php', + 'WeChat\\Pay' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Pay.php', + 'WeChat\\Product' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Product.php', + 'WeChat\\Qrcode' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Qrcode.php', + 'WeChat\\Receive' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Receive.php', + 'WeChat\\Scan' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Scan.php', + 'WeChat\\Script' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Script.php', + 'WeChat\\Shake' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Shake.php', + 'WeChat\\Tags' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Tags.php', + 'WeChat\\Template' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Template.php', + 'WeChat\\User' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/User.php', + 'WeChat\\Wifi' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Wifi.php', + 'WeOpen\\Service' => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeOpen/Service.php', + 'app\\admin\\controller\\Auth' => __DIR__ . '/../..' . '/application/admin/controller/Auth.php', + 'app\\admin\\controller\\Config' => __DIR__ . '/../..' . '/application/admin/controller/Config.php', + 'app\\admin\\controller\\Index' => __DIR__ . '/../..' . '/application/admin/controller/Index.php', + 'app\\admin\\controller\\Log' => __DIR__ . '/../..' . '/application/admin/controller/Log.php', + 'app\\admin\\controller\\Login' => __DIR__ . '/../..' . '/application/admin/controller/Login.php', + 'app\\admin\\controller\\Menu' => __DIR__ . '/../..' . '/application/admin/controller/Menu.php', + 'app\\admin\\controller\\Node' => __DIR__ . '/../..' . '/application/admin/controller/Node.php', + 'app\\admin\\controller\\Plugs' => __DIR__ . '/../..' . '/application/admin/controller/Plugs.php', + 'app\\admin\\controller\\User' => __DIR__ . '/../..' . '/application/admin/controller/User.php', + 'app\\goods\\controller\\Brand' => __DIR__ . '/../..' . '/application/goods/controller/Brand.php', + 'app\\goods\\controller\\Cate' => __DIR__ . '/../..' . '/application/goods/controller/Cate.php', + 'app\\goods\\controller\\Product' => __DIR__ . '/../..' . '/application/goods/controller/Product.php', + 'app\\goods\\controller\\Spec' => __DIR__ . '/../..' . '/application/goods/controller/Spec.php', + 'app\\goods\\service\\ProductService' => __DIR__ . '/../..' . '/application/goods/service/ProductService.php', + 'app\\index\\controller\\Index' => __DIR__ . '/../..' . '/application/index/controller/Index.php', + 'app\\wechat\\controller\\Block' => __DIR__ . '/../..' . '/application/wechat/controller/Block.php', + 'app\\wechat\\controller\\Config' => __DIR__ . '/../..' . '/application/wechat/controller/Config.php', + 'app\\wechat\\controller\\Fans' => __DIR__ . '/../..' . '/application/wechat/controller/Fans.php', + 'app\\wechat\\controller\\Keys' => __DIR__ . '/../..' . '/application/wechat/controller/Keys.php', + 'app\\wechat\\controller\\Menu' => __DIR__ . '/../..' . '/application/wechat/controller/Menu.php', + 'app\\wechat\\controller\\News' => __DIR__ . '/../..' . '/application/wechat/controller/News.php', + 'app\\wechat\\controller\\Review' => __DIR__ . '/../..' . '/application/wechat/controller/Review.php', + 'app\\wechat\\controller\\Tags' => __DIR__ . '/../..' . '/application/wechat/controller/Tags.php', + 'app\\wechat\\controller\\api\\Js' => __DIR__ . '/../..' . '/application/wechat/controller/api/Js.php', + 'app\\wechat\\controller\\api\\Push' => __DIR__ . '/../..' . '/application/wechat/controller/api/Push.php', + 'app\\wechat\\controller\\api\\Tools' => __DIR__ . '/../..' . '/application/wechat/controller/api/Tools.php', + 'app\\wechat\\service\\FansService' => __DIR__ . '/../..' . '/application/wechat/service/FansService.php', + 'app\\wechat\\service\\MediaService' => __DIR__ . '/../..' . '/application/wechat/service/MediaService.php', + 'app\\wechat\\service\\TagsService' => __DIR__ . '/../..' . '/application/wechat/service/TagsService.php', + 'think\\captcha\\Captcha' => __DIR__ . '/..' . '/topthink/think-captcha/src/Captcha.php', + 'think\\captcha\\CaptchaController' => __DIR__ . '/..' . '/topthink/think-captcha/src/CaptchaController.php', + 'think\\composer\\Plugin' => __DIR__ . '/..' . '/topthink/think-installer/src/Plugin.php', + 'think\\composer\\ThinkExtend' => __DIR__ . '/..' . '/topthink/think-installer/src/ThinkExtend.php', + 'think\\composer\\ThinkFramework' => __DIR__ . '/..' . '/topthink/think-installer/src/ThinkFramework.php', + 'think\\composer\\ThinkTesting' => __DIR__ . '/..' . '/topthink/think-installer/src/ThinkTesting.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInite11d5d0f579f9ff8739edc30bb4f8f32::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInite11d5d0f579f9ff8739edc30bb4f8f32::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInite11d5d0f579f9ff8739edc30bb4f8f32::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json new file mode 100644 index 000000000..15e38b73b --- /dev/null +++ b/vendor/composer/installed.json @@ -0,0 +1,484 @@ +[ + { + "name": "topthink/think-installer", + "version": "v1.0.12", + "version_normalized": "1.0.12.0", + "source": { + "type": "git", + "url": "https://github.com/top-think/think-installer.git", + "reference": "1be326e68f63de4e95977ed50f46ae75f017556d" + }, + "dist": { + "type": "zip", + "url": "https://files.phpcomposer.com/files/top-think/think-installer/1be326e68f63de4e95977ed50f46ae75f017556d.zip", + "reference": "1be326e68f63de4e95977ed50f46ae75f017556d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0" + }, + "require-dev": { + "composer/composer": "1.0.*@dev" + }, + "time": "2017-05-27T06:58:09+00:00", + "type": "composer-plugin", + "extra": { + "class": "think\\composer\\Plugin" + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "think\\composer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "yunwuxin", + "email": "448901948@qq.com" + } + ] + }, + { + "name": "zoujingli/ip2region", + "version": "dev-master", + "version_normalized": "9999999-dev", + "source": { + "type": "git", + "url": "https://github.com/zoujingli/ip2region.git", + "reference": "5d981fbf3b574bad7fe9652e7aecba0920f54325" + }, + "dist": { + "type": "zip", + "url": "https://files.phpcomposer.com/files/zoujingli/ip2region/5d981fbf3b574bad7fe9652e7aecba0920f54325.zip", + "reference": "5d981fbf3b574bad7fe9652e7aecba0920f54325", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "time": "2017-11-09T03:36:17+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "Ip2Region.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache 2.0" + ], + "description": "Ip2Region", + "homepage": "https://github.com/zoujingli/Ip2Region", + "keywords": [ + "Ip2Region" + ] + }, + { + "name": "zoujingli/wechat-developer", + "version": "v1.0.5", + "version_normalized": "1.0.5.0", + "source": { + "type": "git", + "url": "https://github.com/zoujingli/WeChatDeveloper.git", + "reference": "e05fe6bb24438d15259a6af4915bd0638dc3914a" + }, + "dist": { + "type": "zip", + "url": "https://files.phpcomposer.com/files/zoujingli/WeChatDeveloper/e05fe6bb24438d15259a6af4915bd0638dc3914a.zip", + "reference": "e05fe6bb24438d15259a6af4915bd0638dc3914a", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-openssl": "*", + "php": ">=5.4" + }, + "time": "2018-04-09T11:07:00+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "WeChat\\": "WeChat" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anyon", + "email": "zoujingli@qq.com", + "homepage": "http://ctolog.com" + } + ], + "description": "WeChat platform and WeChat payment development tools", + "homepage": "https://github.com/zoujingli/WeChatDeveloper", + "keywords": [ + "WeChatDeveloper", + "wechat", + "wechatpay" + ] + }, + { + "name": "zoujingli/weopen-developer", + "version": "dev-master", + "version_normalized": "9999999-dev", + "source": { + "type": "git", + "url": "https://github.com/zoujingli/WeOpenDeveloper.git", + "reference": "8bb75bc08488a43964c00f027b21b93ed58e8d5a" + }, + "dist": { + "type": "zip", + "url": "https://files.phpcomposer.com/files/zoujingli/WeOpenDeveloper/8bb75bc08488a43964c00f027b21b93ed58e8d5a.zip", + "reference": "8bb75bc08488a43964c00f027b21b93ed58e8d5a", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-openssl": "*", + "php": ">=5.4", + "zoujingli/wechat-developer": "^1.0.0" + }, + "time": "2018-03-21T05:06:35+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "WeOpen\\": "WeOpen" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anyon", + "email": "zoujingli@qq.com", + "homepage": "http://ctolog.com" + } + ], + "description": "WeChat Open development of SDK", + "homepage": "https://github.com/zoujingli/WeOpenDeveloper", + "keywords": [ + "WeChatOpen", + "WeChatOpenDeveloper", + "wechat" + ] + }, + { + "name": "topthink/framework", + "version": "v5.1.9", + "version_normalized": "5.1.9.0", + "source": { + "type": "git", + "url": "https://github.com/top-think/framework.git", + "reference": "c49df2fa54879105e451f7eaaf841d218206f02f" + }, + "dist": { + "type": "zip", + "url": "https://files.phpcomposer.com/files/top-think/framework/c49df2fa54879105e451f7eaaf841d218206f02f.zip", + "reference": "c49df2fa54879105e451f7eaaf841d218206f02f", + "shasum": "" + }, + "require": { + "php": ">=5.6.0", + "topthink/think-installer": "~1.0" + }, + "require-dev": { + "johnkary/phpunit-speedtrap": "^1.0", + "mikey179/vfsstream": "~1.6", + "phpdocumentor/reflection-docblock": "^2.0", + "phploc/phploc": "2.*", + "phpunit/phpunit": "^5.0|^6.0", + "sebastian/phpcpd": "2.*", + "squizlabs/php_codesniffer": "2.*" + }, + "time": "2018-04-12T11:16:28+00:00", + "type": "think-framework", + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "liu21st", + "email": "liu21st@gmail.com" + }, + { + "name": "yunwuxin", + "email": "448901948@qq.com" + } + ], + "description": "the new thinkphp framework", + "homepage": "http://thinkphp.cn/", + "keywords": [ + "framework", + "orm", + "thinkphp" + ] + }, + { + "name": "topthink/think-captcha", + "version": "v2.0.2", + "version_normalized": "2.0.2.0", + "source": { + "type": "git", + "url": "https://github.com/top-think/think-captcha.git", + "reference": "54c8a51552f99ff9ea89ea9c272383a8f738ceee" + }, + "dist": { + "type": "zip", + "url": "https://files.phpcomposer.com/files/top-think/think-captcha/54c8a51552f99ff9ea89ea9c272383a8f738ceee.zip", + "reference": "54c8a51552f99ff9ea89ea9c272383a8f738ceee", + "shasum": "" + }, + "require": { + "topthink/framework": "5.1.*" + }, + "time": "2017-12-31T16:37:49+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "think\\captcha\\": "src/" + }, + "files": [ + "src/helper.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "yunwuxin", + "email": "448901948@qq.com" + } + ], + "description": "captcha package for thinkphp5" + }, + { + "name": "symfony/options-resolver", + "version": "v3.3.6", + "version_normalized": "3.3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "ff48982d295bcac1fd861f934f041ebc73ae40f0" + }, + "dist": { + "type": "zip", + "url": "https://files.phpcomposer.com/files/symfony/options-resolver/ff48982d295bcac1fd861f934f041ebc73ae40f0.zip", + "reference": "ff48982d295bcac1fd861f934f041ebc73ae40f0", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "time": "2017-04-12T14:14:56+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ] + }, + { + "name": "endroid/qr-code", + "version": "1.9.3", + "version_normalized": "1.9.3.0", + "source": { + "type": "git", + "url": "https://github.com/endroid/qr-code.git", + "reference": "c9644bec2a9cc9318e98d1437de3c628dcd1ef93" + }, + "dist": { + "type": "zip", + "url": "https://files.phpcomposer.com/files/endroid/qr-code/c9644bec2a9cc9318e98d1437de3c628dcd1ef93.zip", + "reference": "c9644bec2a9cc9318e98d1437de3c628dcd1ef93", + "shasum": "" + }, + "require": { + "ext-gd": "*", + "php": ">=5.4", + "symfony/options-resolver": "^2.3|^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0|^5.0", + "sensio/framework-extra-bundle": "^3.0", + "symfony/browser-kit": "^2.3|^3.0", + "symfony/framework-bundle": "^2.3|^3.0", + "symfony/http-kernel": "^2.3|^3.0" + }, + "time": "2017-04-08T09:13:59+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Endroid\\QrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeroen van den Enden", + "email": "info@endroid.nl", + "homepage": "http://endroid.nl/" + } + ], + "description": "Endroid QR Code", + "homepage": "https://github.com/endroid/QrCode", + "keywords": [ + "bundle", + "code", + "endroid", + "qr", + "qrcode", + "symfony" + ] + }, + { + "name": "aliyuncs/oss-sdk-php", + "version": "v2.3.0", + "version_normalized": "2.3.0.0", + "source": { + "type": "git", + "url": "https://github.com/aliyun/aliyun-oss-php-sdk.git", + "reference": "e69f57916678458642ac9d2fd341ae78a56996c8" + }, + "dist": { + "type": "zip", + "url": "https://files.phpcomposer.com/files/aliyun/aliyun-oss-php-sdk/e69f57916678458642ac9d2fd341ae78a56996c8.zip", + "reference": "e69f57916678458642ac9d2fd341ae78a56996c8", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0", + "satooshi/php-coveralls": "~1.0" + }, + "time": "2018-01-08T06:59:35+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "OSS\\": "src/OSS" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aliyuncs", + "homepage": "http://www.aliyun.com" + } + ], + "description": "Aliyun OSS SDK for PHP", + "homepage": "http://www.aliyun.com/product/oss/" + }, + { + "name": "qiniu/php-sdk", + "version": "v7.2.3", + "version_normalized": "7.2.3.0", + "source": { + "type": "git", + "url": "https://github.com/qiniu/php-sdk.git", + "reference": "67852ba9cdd7f48e0e080961abebafee134fb329" + }, + "dist": { + "type": "zip", + "url": "https://files.phpcomposer.com/files/qiniu/php-sdk/67852ba9cdd7f48e0e080961abebafee134fb329.zip", + "reference": "67852ba9cdd7f48e0e080961abebafee134fb329", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.3" + }, + "time": "2018-02-20T13:59:54+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Qiniu\\": "src/Qiniu" + }, + "files": [ + "src/Qiniu/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Qiniu", + "email": "sdk@qiniu.com", + "homepage": "http://www.qiniu.com" + } + ], + "description": "Qiniu Resource (Cloud) Storage SDK for PHP", + "homepage": "http://developer.qiniu.com/", + "keywords": [ + "cloud", + "qiniu", + "sdk", + "storage" + ] + } +] diff --git a/vendor/endroid/qr-code/.gitignore b/vendor/endroid/qr-code/.gitignore new file mode 100644 index 000000000..d0eeedab8 --- /dev/null +++ b/vendor/endroid/qr-code/.gitignore @@ -0,0 +1,5 @@ +/bin +/composer.lock +/composer.phar +/phpunit.xml +/vendor diff --git a/vendor/endroid/qr-code/.travis.yml b/vendor/endroid/qr-code/.travis.yml new file mode 100644 index 000000000..de30ea6f7 --- /dev/null +++ b/vendor/endroid/qr-code/.travis.yml @@ -0,0 +1,21 @@ +language: php + +php: + - 5.4 + - 5.5 + - 5.6 + - 7.0 + - 7.1 + - hhvm + +matrix: + fast_finish: true + +before_install: + - if [[ "$TRAVIS_PHP_VERSION" != "hhvm" ]]; then phpenv config-rm xdebug.ini; fi; + - composer self-update && composer install --no-interaction + +script: bin/phpunit + +notifications: + email: info@endroid.nl diff --git a/vendor/endroid/qr-code/LICENSE b/vendor/endroid/qr-code/LICENSE new file mode 100644 index 000000000..0966ce0e4 --- /dev/null +++ b/vendor/endroid/qr-code/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) Jeroen van den Enden + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/endroid/qr-code/README.md b/vendor/endroid/qr-code/README.md new file mode 100644 index 000000000..2c51a989f --- /dev/null +++ b/vendor/endroid/qr-code/README.md @@ -0,0 +1,132 @@ +QR Code +======= + +*By [endroid](http://endroid.nl/)* + +[![Latest Stable Version](http://img.shields.io/packagist/v/endroid/qrcode.svg)](https://packagist.org/packages/endroid/qrcode) +[![Build Status](http://img.shields.io/travis/endroid/QrCode.svg)](http://travis-ci.org/endroid/QrCode) +[![Total Downloads](http://img.shields.io/packagist/dt/endroid/qrcode.svg)](https://packagist.org/packages/endroid/qrcode) +[![Monthly Downloads](http://img.shields.io/packagist/dm/endroid/qrcode.svg)](https://packagist.org/packages/endroid/qrcode) +[![License](http://img.shields.io/packagist/l/endroid/qrcode.svg)](https://packagist.org/packages/endroid/qrcode) + +This library based on QRcode Perl CGI & PHP scripts by Y. Swetake helps you generate images containing a QR code. + +## Installation + +Use [Composer](https://getcomposer.org/) to install the library. + +``` bash +$ composer require endroid/qrcode +``` + +## Usage + +```php +use Endroid\QrCode\QrCode; + +$qrCode = new QrCode(); +$qrCode + ->setText('Life is too short to be generating QR codes') + ->setSize(300) + ->setPadding(10) + ->setErrorCorrection('high') + ->setForegroundColor(['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0]) + ->setBackgroundColor(['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0]) + ->setLabel('Scan the code') + ->setLabelFontSize(16) + ->setImageType(QrCode::IMAGE_TYPE_PNG) +; + +// now we can directly output the qrcode +header('Content-Type: '.$qrCode->getContentType()); +$qrCode->render(); + +// save it to a file +$qrCode->save('qrcode.png'); + +// or create a response object +$response = new Response($qrCode->get(), 200, ['Content-Type' => $qrCode->getContentType()]); +``` + +![QR Code](http://endroid.nl/qrcode/Life%20is%20too%20short%20to%20be%20generating%20QR%20codes.png?label=Scan%20the%20code) + +## Symfony integration + +Register the Symfony bundle in the kernel. + +```php +// app/AppKernel.php + +public function registerBundles() +{ + $bundles = [ + // ... + new Endroid\QrCode\Bundle\EndroidQrCodeBundle(), + ]; +} +``` + +The default parameters can be overridden via the configuration. +Alpha channel available range is [0, 127] in foreground and background colors. + +```yaml +endroid_qr_code: + size: 100 + padding: 10 + extension: gif + error_correction_level: high + foreground_color: { r: 0, g: 0, b: 0, a: 0 } + background_color: { r: 255, g: 255, b: 255, a: 0 } + label: 'My label' + label_font_size: 16 +``` + +Now you can retrieve the factory as follows. + +```php +$factory = $this->get('endroid.qrcode.factory'); +$factory->createQrCode(); +``` + +Add the following section to your routing to be able to handle QR code URLs. +This step can be skipped when you only use data URIs to display your images. + +``` yml +EndroidQrCodeBundle: + resource: "@EndroidQrCodeBundle/Controller/" + type: annotation + prefix: /qrcode +``` + +After installation and configuration, QR codes can be generated by appending +the QR code text to the url as mounted, followed by .png, .jpg or .gif. + +## Twig extension + +The bundle also provides a Twig extension for quickly generating QR code urls. +Optional parameters are extension, size, padding and errorCorrectionLevel. When +a parameter is omitted, the value in the bundle configuration is used. + +``` twig + + + +``` + +You can also use the data URI helper to embed the QR code within your HTML +instead of requiring a separate HTTP request to load your image. + +``` twig + +``` + +## Versioning + +Version numbers follow the MAJOR.MINOR.PATCH scheme. Backwards compatibility +breaking changes will be kept to a minimum but be aware that these can occur. +Lock your dependencies for production and test your code when upgrading. + +## License + +This bundle is under the MIT license. For the full copyright and license +information please view the LICENSE file that was distributed with this source code. diff --git a/vendor/endroid/qr-code/assets/data/qrv10_0.dat b/vendor/endroid/qr-code/assets/data/qrv10_0.dat new file mode 100644 index 000000000..8c073a815 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv10_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv10_1.dat b/vendor/endroid/qr-code/assets/data/qrv10_1.dat new file mode 100644 index 000000000..9a3cf4db8 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv10_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv10_2.dat b/vendor/endroid/qr-code/assets/data/qrv10_2.dat new file mode 100644 index 000000000..4a57e8afa Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv10_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv10_3.dat b/vendor/endroid/qr-code/assets/data/qrv10_3.dat new file mode 100644 index 000000000..e2de0eca3 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv10_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv11_0.dat b/vendor/endroid/qr-code/assets/data/qrv11_0.dat new file mode 100644 index 000000000..18853fec1 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv11_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv11_1.dat b/vendor/endroid/qr-code/assets/data/qrv11_1.dat new file mode 100644 index 000000000..365deb3be Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv11_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv11_2.dat b/vendor/endroid/qr-code/assets/data/qrv11_2.dat new file mode 100644 index 000000000..0357a6431 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv11_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv11_3.dat b/vendor/endroid/qr-code/assets/data/qrv11_3.dat new file mode 100644 index 000000000..bb8621b23 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv11_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv12_0.dat b/vendor/endroid/qr-code/assets/data/qrv12_0.dat new file mode 100644 index 000000000..636f201ce Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv12_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv12_1.dat b/vendor/endroid/qr-code/assets/data/qrv12_1.dat new file mode 100644 index 000000000..c67964856 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv12_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv12_2.dat b/vendor/endroid/qr-code/assets/data/qrv12_2.dat new file mode 100644 index 000000000..4544e9db1 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv12_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv12_3.dat b/vendor/endroid/qr-code/assets/data/qrv12_3.dat new file mode 100644 index 000000000..9adba362e Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv12_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv13_0.dat b/vendor/endroid/qr-code/assets/data/qrv13_0.dat new file mode 100644 index 000000000..73d6117c7 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv13_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv13_1.dat b/vendor/endroid/qr-code/assets/data/qrv13_1.dat new file mode 100644 index 000000000..9ae40dd71 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv13_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv13_2.dat b/vendor/endroid/qr-code/assets/data/qrv13_2.dat new file mode 100644 index 000000000..c4d9997d5 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv13_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv13_3.dat b/vendor/endroid/qr-code/assets/data/qrv13_3.dat new file mode 100644 index 000000000..2f333926e Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv13_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv14_0.dat b/vendor/endroid/qr-code/assets/data/qrv14_0.dat new file mode 100644 index 000000000..956dae425 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv14_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv14_1.dat b/vendor/endroid/qr-code/assets/data/qrv14_1.dat new file mode 100644 index 000000000..5dd0e3ed9 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv14_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv14_2.dat b/vendor/endroid/qr-code/assets/data/qrv14_2.dat new file mode 100644 index 000000000..466b94d82 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv14_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv14_3.dat b/vendor/endroid/qr-code/assets/data/qrv14_3.dat new file mode 100644 index 000000000..cdd2b21fb Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv14_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv15_0.dat b/vendor/endroid/qr-code/assets/data/qrv15_0.dat new file mode 100644 index 000000000..fcbb6447e Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv15_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv15_1.dat b/vendor/endroid/qr-code/assets/data/qrv15_1.dat new file mode 100644 index 000000000..59f7ed18a Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv15_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv15_2.dat b/vendor/endroid/qr-code/assets/data/qrv15_2.dat new file mode 100644 index 000000000..3b8611729 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv15_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv15_3.dat b/vendor/endroid/qr-code/assets/data/qrv15_3.dat new file mode 100644 index 000000000..4e9aa0ec0 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv15_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv16_0.dat b/vendor/endroid/qr-code/assets/data/qrv16_0.dat new file mode 100644 index 000000000..d835c66f5 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv16_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv16_1.dat b/vendor/endroid/qr-code/assets/data/qrv16_1.dat new file mode 100644 index 000000000..ab1be3b03 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv16_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv16_2.dat b/vendor/endroid/qr-code/assets/data/qrv16_2.dat new file mode 100644 index 000000000..e34b2e3c6 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv16_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv16_3.dat b/vendor/endroid/qr-code/assets/data/qrv16_3.dat new file mode 100644 index 000000000..a91c7f71a Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv16_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv17_0.dat b/vendor/endroid/qr-code/assets/data/qrv17_0.dat new file mode 100644 index 000000000..48fd2764d Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv17_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv17_1.dat b/vendor/endroid/qr-code/assets/data/qrv17_1.dat new file mode 100644 index 000000000..33f541137 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv17_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv17_2.dat b/vendor/endroid/qr-code/assets/data/qrv17_2.dat new file mode 100644 index 000000000..0c3b80f0a Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv17_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv17_3.dat b/vendor/endroid/qr-code/assets/data/qrv17_3.dat new file mode 100644 index 000000000..c386c177e Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv17_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv18_0.dat b/vendor/endroid/qr-code/assets/data/qrv18_0.dat new file mode 100644 index 000000000..f499e0e53 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv18_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv18_1.dat b/vendor/endroid/qr-code/assets/data/qrv18_1.dat new file mode 100644 index 000000000..8272c4186 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv18_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv18_2.dat b/vendor/endroid/qr-code/assets/data/qrv18_2.dat new file mode 100644 index 000000000..0074b18b9 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv18_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv18_3.dat b/vendor/endroid/qr-code/assets/data/qrv18_3.dat new file mode 100644 index 000000000..b8eaec68e Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv18_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv19_0.dat b/vendor/endroid/qr-code/assets/data/qrv19_0.dat new file mode 100644 index 000000000..28f6107e5 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv19_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv19_1.dat b/vendor/endroid/qr-code/assets/data/qrv19_1.dat new file mode 100644 index 000000000..98af58bb3 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv19_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv19_2.dat b/vendor/endroid/qr-code/assets/data/qrv19_2.dat new file mode 100644 index 000000000..60f41f205 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv19_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv19_3.dat b/vendor/endroid/qr-code/assets/data/qrv19_3.dat new file mode 100644 index 000000000..7b98e51b5 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv19_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv1_0.dat b/vendor/endroid/qr-code/assets/data/qrv1_0.dat new file mode 100644 index 000000000..b941d488a Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv1_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv1_1.dat b/vendor/endroid/qr-code/assets/data/qrv1_1.dat new file mode 100644 index 000000000..11df75712 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv1_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv1_2.dat b/vendor/endroid/qr-code/assets/data/qrv1_2.dat new file mode 100644 index 000000000..851c3fa2b Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv1_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv1_3.dat b/vendor/endroid/qr-code/assets/data/qrv1_3.dat new file mode 100644 index 000000000..1f300f511 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv1_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv20_0.dat b/vendor/endroid/qr-code/assets/data/qrv20_0.dat new file mode 100644 index 000000000..12963c2b7 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv20_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv20_1.dat b/vendor/endroid/qr-code/assets/data/qrv20_1.dat new file mode 100644 index 000000000..99d8afa99 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv20_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv20_2.dat b/vendor/endroid/qr-code/assets/data/qrv20_2.dat new file mode 100644 index 000000000..e6074eaa9 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv20_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv20_3.dat b/vendor/endroid/qr-code/assets/data/qrv20_3.dat new file mode 100644 index 000000000..60acb51ad Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv20_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv21_0.dat b/vendor/endroid/qr-code/assets/data/qrv21_0.dat new file mode 100644 index 000000000..487b8f230 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv21_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv21_1.dat b/vendor/endroid/qr-code/assets/data/qrv21_1.dat new file mode 100644 index 000000000..54003fc4f Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv21_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv21_2.dat b/vendor/endroid/qr-code/assets/data/qrv21_2.dat new file mode 100644 index 000000000..33003315e Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv21_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv21_3.dat b/vendor/endroid/qr-code/assets/data/qrv21_3.dat new file mode 100644 index 000000000..fa344525d Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv21_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv22_0.dat b/vendor/endroid/qr-code/assets/data/qrv22_0.dat new file mode 100644 index 000000000..444981c6d Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv22_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv22_1.dat b/vendor/endroid/qr-code/assets/data/qrv22_1.dat new file mode 100644 index 000000000..690ff6366 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv22_1.dat @@ -0,0 +1,209 @@ +hghghghghghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababa_`_`_`_`_`_`_`_`]]]]]]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIGHGHGGGGGHGHGHGHFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:987878787878787878765656565656565656565654343434343434343434343432121212121212121/0/0/////0/0/0/0.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!         hghghghghghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababa_`_`_`_`_`_`_`_`^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIGGHGHGHGGHGHGHGHFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:987878787878787878787876565656565656565656565654343434343434343432121212121212121212121//0/0/0//0/0/0/0.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!           hghghghghghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababa_`_______`_`_`_`^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGGHGGGGGGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:987878787878787878787878765656565656565656565656543434343434343432121212121212121212121210/0/0/0//0//////.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!            hghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`__`_`_`_`^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:987878787878787878787878765656565656565656565656543434343434343432121212121212121210/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!            hghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_______`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGGGGGGHHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:9878787878787878787878787656565656565656565656565434343434343434321212121212121210//////00/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!            hghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIGHGHGHGHHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:987878787878787878787878765656565656565656565656543434343434343432121212121212121/0/0/0/00/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!            hghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababa_____`_``_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIGHGHGHGHGGGGGHGHHGHGHGGGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCBABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:987878787878787878787878765656565656565656565656543434343434343432121212121212121/0/0/0/0/////0/00/0/0///.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!            hghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababa_`_`_`_``_`_`___`_`_`_`_^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIGHGHGHGHGHGHGHGHGGHGHGHGFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:987878787878787878787878765656565656565656565656543434343434343432121212121212121/0/0/0/0/0/0/0/0//0/0/0/.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!            hghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababa_`_`_`_`___`_`_``_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIGHGHGHGHGHGHGHGHHGFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:987878787878787878787878765656565656565656543434343434343434343432121212121212121/0/0/0/0/0/0/0/00/.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!                        + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + +             + + + + + + + + + + +          + + + + + + + + + + + +            + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + + hhggffeeDDCCBBAA 99::;;<<]]^^__``FFEEDDCC""##$$%%PPQQRRSSVUUTTSSR-,,++**)(())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKee__^^]]776655// ))**++,,WWXXYYZZONNMMLKJ&%%$$##"(())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKee__^^]]776655// ))**++,,WWXXYYZZONNMMLKJ&%%$$##"(())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKee__^^]]776655// ))**++,,WWXXYYZZONNMMLKJ&%%$$##"ddccbbaa@@??>>====>>??@@aabbccddBBAA@@??&&''(())TTUUVVWWRQQPPOON)((''&&% + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOO\\[[ZZYY..--,,++--..//55[[\\]]^^IHGGFFEE"!!  + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOO\\[[ZZYY..--,,++--..//55[[\\]]^^IHGGFFEE"!!  + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOO\\[[ZZYY..--,,++--..//55[[\\]]^^IHGGFFEE"!! ``__^^]]<<;;::99 AABBCCDDeeffgghh>>==<<;; **++,,--XXYYZZ[[NMMLKJIH%$$##""! 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSSXXWWVVUU**))(('' + + 66778899__eeffggDDCCBBAA 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSSXXWWVVUU**))(('' + + 66778899__eeffggDDCCBBAA 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSSXXWWVVUU**))(('' + + 66778899__eeffggDDCCBBAA\\[[ZZYY88776655!!""##$$EEFFGGHHhhggffee::998877 + + ..//5566\\]]^^__GGFFEEDD! 44556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWTTSSRRQQ&&%%$$## ::;;<<==hhhhggff@@??>>==44556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWTTSSRRQQ&&%%$$## ::;;<<==hhhhggff@@??>>==44556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWTTSSRRQQ&&%%$$## ::;;<<==hhhhggff@@??>>== + + XXWWVVUU44332211 %%&&''((IIJJKKLL__^^]]\\6655//.. + + 778899::eeffgghhCCBBAA@@8899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[PPOONNMM""!! >>??@@AAeedcba`_<<;;::998899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[PPOONNMM""!! >>??@@AAeedcba`_<<;;::998899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[PPOONNMM""!! >>??@@AAeedcba`_<<;;::99 TTSSRRQQ00//..-- + + ))**++,,MMNNOOPP[[ZZYYXX--,,++** ;;<<==>>hhggffee??>>==<<<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__GGFFEEDDBBCCDDEE_^^]]\\[88776655 <<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__GGFFEEDDBBCCDDEE_^^]]\\[88776655 <<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__GGFFEEDDBBCCDDEE_^^]]\\[88776655 PPOONNMM,,++**)) + + --..//00QQRRSSTTWWVVUUTT))((''&&??@@AABBdcba`__^;;::9988@@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccCCBBAA@@ FFGGMMNN[ZZYYXXW43210//. + + @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccCCBBAA@@ FFGGMMNN[ZZYYXXW43210//. + + @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccCCBBAA@@ FFGGMMNN[ZZYYXXW43210//. + + LLKKJJII((''&&%% 11223344UUVVWWXXSSRRQQPP%%$$##""CCDDEEFF^]]\\[[Z77665543 !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffgg??>>==<<!!""##$$OOPPQQRRWVVUUTTS.--,,++* !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffgg??>>==<<!!""##$$OOPPQQRRWVVUUTTS.--,,++* !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffgg??>>==<<!!""##$$OOPPQQRRWVVUUTTS.--,,++*HHGGFFEE$$##""!!55667788YYZZ[[\\OONNMMGG!!  !!GGMMNNOOZYYXXWWV210//..- + + $$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggff;;::9988 + +%%&&''((SSTTUUVVSRRQQPPO*))((''&$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggff;;::9988 + +%%&&''((SSTTUUVVSRRQQPPO*))((''&$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggff;;::9988 + +%%&&''((SSTTUUVVSRRQQPPO*))((''& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__DDCCBBAA$$%%&&''RRSSTTUUEEDDCCBB!! 8899::;;$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbcc@@??>>==(())**++VVWWXXYYAA@@??>><<==>>??(())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffgg<<;;::99 ,,--..//ZZ[[\\]]==<<;;::@@AABBCC,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhh``__^^88776655 + + + +55667788]]\\[[ZZ99887766 !!""##DDEEFFGG00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKK]]\\[[ZZ//..--,, 99::;;<>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOYYXXWWVV++**))((==>>??@@UUTTSSRR1100//.. + +(())**++LLMMNNOO8899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSSUUTTSSRR''&&%%$$AABBCCDDQQPPOONN--,,++** + + ,,--..//PPQQRRSS<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWQQPPOONN##""!! EEFFGGMMMMLLKKJJ))((''&& 00112233TTUUVVWW@@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[MMGGFFEE !!""##NNOOPPQQIIHHGGFF%%$$##""44556677XXYYZZ[[\\]]ZHAbZHAbZHAb|ZdQb|ZdQb|ZdQbv`fHXv`˂rXQZp˂tbdQdrtnvffH~fH~XQr˂XQr˂XQr˂btlbtlbtlHfpvHfpvHfpvZp˂Zp˂Zp˂|dr|dr|dtAfH~fH~fH~XQr˂XQr˂rbtbtlbtlHXv`~HX`pvbHAZ`ےbrtAJtbdQpfHfH~fH~XQr˂XQr˂XQr˂btlbtlbtlHfpvHfpvHfpvZp˂Zp˂Zp˂|dr|dr|dtAfH~fH~fH~XQr˂XQr˂rbtbtlbtlHXv`~HX`pvbHAZ`ےbrtAJtbdQpfHfH~fH~XQr˂XQr˂XQr˂btlbtlbtlHfpvHfpvHfpvZp˂Zp˂Zp˂|dr|dr|dtAfH~fH~fH~XQr˂XQr˂rbtbtlbtlHXv`~HX`pvbHAZ`ےbrtAJtbdQے`JXQے`JXQے`JXQtlJtlJtlJ~Hfpf~HJ`ےrXQJ`Z|dAJltf`vXf`vXf`vXpZHAbpZHAbpZHAbJtArdJtArdJtArdnXvnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJlJltf`vXf`vXfZHAbpZHAbpZHAblJtAdJtArdJtArdf~Hv`fnrXQJp˂HAZp˂bdQZ|Z|df`vXf`vXf`vXpZHAbpZHAbpZHAbJtArdJtArdJtArdnXvnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJlJltf`vXf`vXfZHAbpZHAbpZHAblJtAdJtArdJtArdf~Hv`fnrXQJp˂HAZp˂bdQZ|Z|df`vXf`vXf`vXpZHAbpZHAbpZHAbJtArdJtArdJtArdnXvnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJlJltf`vXf`vXfZHAbpZHAbpZHAblJtAdJtArdJtArdf~Hv`fnrXQJp˂HAZp˂bdQZ|Z|dr˂pr˂pr˂ptArdtArdtArdvnXfpvbHAZpےbHArtAJbbdQZ|nvpnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~`fHےbHAےbHAےbHAtbdQZtbdQZbnvnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQfpv~Hfp`p˂bHAZpbHAdrtArtAJbnvpnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~`fHےbHAےbHAےbHAtbdQZtbdQZbnvnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQfpv~Hfp`p˂bHAZpbHAdrtArtAJbnvpnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~`fHےbHAےbHAےbHAtbdQZtbdQZbnvnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQfpv~Hfp`p˂bHAZpbHAdrtArtAJbpfHZHAbZHAbZHAb|ZdQb|ZdQbf~Hv`fnXv`˂bZp˂dQZ|drtfH~fH~fH~XQr˂XQr˂XQr˂btlbtlbtlHfpvHfpvfpvZp˂Zp˂Zdr|dr|drpfHfH~fH~XQr˂XQr˂XQr˂btlbtlbtlnXv`vnXrXQJ`˂rXQZdrJltdQZ|fH~fH~fH~XQr˂XQr˂XQr˂btlbtlbtlHfpvHfpvfpvZp˂Zp˂Zdr|dr|drpfHfH~fH~XQr˂XQr˂XQr˂btlbtlbtlnXv`vnXrXQJ`˂rXQZdrJltdQZ|fH~fH~fH~XQr˂XQr˂XQr˂btlbtlbtlHfpvHfpvfpvZp˂Zp˂Zdr|dr|drpfHfH~fH~XQr˂XQr˂XQr˂btlbtlbtlnXv`vnXrXQJ`˂rXQZdrJltdQZ|f`vXے`JXQے`JXQے`JXQtlJtlJXv`f~HXvp˂rHAZp˂bHAZdrtAJAJbdQf`vXf`vXf`vXpZHAbpZHAbpZHAJtArdJtArdJtArdnXvnXvnrXQJrXQJ`rXQJ`tAJltAJltAJlf`vXf`vXf`vXpZHAbpZHAbpZHAbJtArdJtArdJtArdf~Hv`fےbHAJ`ےtAJbdbdQZ|drtAJf`vXf`vXf`vXpZHAbpZHAbpZHAJtArdJtArdJtArdnXvnXvnrXQJrXQJ`rXQJ`tAJltAJltAJlf`vXf`vXf`vXpZHAbpZHAbpZHAbJtArdJtArdJtArdf~Hv`fےbHAJ`ےtAJbdbdQZ|drtAJf`vXf`vXf`vXpZHAbpZHAbpZHAJtArdJtArdJtArdnXvnXvnrXQJrXQJ`rXQJ`tAJltAJltAJlf`vXf`vXf`vXpZHAbpZHAbpZHAbJtArdJtArdJtArdf~Hv`fےbHAJ`ےtAJbdbdQZ|drtAJnvpr˂pr˂pr˂ptArdtArd~Hf`f~XQJ`ےrXQJdrtAltbZ|dnvpnvpnvpے`Jے`Jے`JXQ|ZdQ|ZdQf~`f~`f~`ےHAےbHAےbHAtbdQZtbdQZtbdQZnvpnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQXv`f~HXvZp˂bHAZpQZ|ddrtAltbnvpnvpnvpے`Jے`Jے`JXQ|ZdQ|ZdQf~`f~`f~`ےHAےbHAےbHAtbdQZtbdQZtbdQZnvpnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQXv`f~HXvZp˂bHAZpQZ|ddrtAltbnvpnvpnvpے`Jے`Jے`JXQ|ZdQ|ZdQf~`f~`f~`ےHAےbHAےbHAtbdQZtbdQZtbdQZnvpnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQXv`f~HXvZp˂bHAZpQZ|ddrtAltbfH~ZHAbZHAb|ZdQb|ZdQb|ZdQbpvnHfpvbHAZ`ےbJbdQdQZ|rtAJlfH~fH~fH~XQr˂XQr˂rbtbtlbtlHfpvHfpvHfpvZp˂Zp˂Zp˂|dr|dr|drfH~fH~fH~XQr˂XQr˂XQr˂btlbtlbtl~Hf`f~bHAZ˂brtAJlJbdQdQZ|fH~fH~fH~XQr˂XQr˂rbtbtlbtlHfpvHfpvHfpvZp˂Zp˂Zp˂|dr|dr|drfH~fH~fH~XQr˂XQr˂XQr˂btlbtlbtl~Hf`f~bHAZ˂brtAJlJbdQdQZ|fH~fH~fH~XQr˂XQr˂rbtbtlbtlHfpvHfpvHfpvZp˂Zp˂Zp˂|dr|dr|drfH~fH~fH~XQr˂XQr˂XQr˂btlbtlbtl~Hf`f~bHAZ˂brtAJlJbdQdQZ|f`vXے`JXQے`JXQtlJtlJtlJXv`fnXvp˂HAZp˂Z|ddrtAJtbdQf`vXf`vXfZHAbpZHAbpZHAblJtAdJtArdJtArdnXvnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJltAJlf`vXf`vXf`vXpZHAbpZHAbpZHAJtArdJtArdJtArdpvnHfpvp˂rHAZp˂tbdZ|dAJltf`vXf`vXfZHAbpZHAbpZHAblJtAdJtArdJtArdnXvnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJltAJlf`vXf`vXf`vXpZHAbpZHAbpZHAJtArdJtArdJtArdpvnHfpvp˂rHAZp˂tbdZ|dAJltf`vXf`vXfZHAbpZHAbpZHAblJtAdJtArdJtArdnXvnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJltAJlf`vXf`vXf`vXpZHAbpZHAbpZHAJtArdJtArdJtArdpvnHfpvp˂rHAZp˂tbdZ|dAJltnvpr˂pr˂ptArdtArdtArd~HX`f~bHAZpbHArtAJl璉bdQZ|Z|dnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~`f~ےbHAےbHAےbHAtbdQZtbdQZtbdQZnvpnvpnvpے`Jے`Jے`JXQ|ZdQ|ZdQf~Xv`fnXvXQJ`ےrXQJQZ|drtAJlbnvnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~`f~ےbHAےbHAےbHAtbdQZtbdQZtbdQZnvpnvpnvpے`Jے`Jے`JXQ|ZdQ|ZdQf~Xv`fnXvXQJ`ےrXQJQZ|drtAJlbnvnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~`f~ےbHAےbHAےbHAtbdQZtbdQZtbdQZnvpnvpnvpے`Jے`Jے`JXQ|ZdQ|ZdQf~Xv`fnXvXQJ`ےrXQJQZ|drtAJlbnvfH~f`vXf`vXfZHAbpZHAbpZHAblJtAdJtArdJtArdnXvnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJltAJlf`vXf`vXf`vXZHAb˂pZHAb㉀ۑpZQXb㉀pfH~pfH~Z|dZ|dnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~`f~ےbHAےbHAےbHAtbdQZtbdQZtbdQZnvpnvpnvpے`JXQbے`JAHr󙐒ۑpJAHf۝`vf۝`vrQtJlrQtJlfH~fH~XQr˂XQr˂XQr˂btlbtlbtlHfpvHfpvHfpvZp˂Zp˂Zp˂|dr|dr|dtAfH~fH~fH~r˂pJXQrˁ`ZQXr󙐂ˁ`Xnv˅Xnv˒tbAdtbAdf`vXf`vXpZHAbpZHAbpZHAbJtArdJtArdJtArdnXvnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJlJltf`vXf`vXfr˂ZHAb˂p`ZAHr󙐂ˍpfH~pfH~pfH~Z|dZ|dnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~`fHےbHAےbHAےbHAtbdQZtbdQZbnvnvpnvppZHAb˂pZQXb㉀ہ`ZQXbㅐf۝`vf۝`vf۝`vrQtJlrQtJlfH~fH~XQr˂XQr˂XQr˂btlbtlbtlHfpvHfpvfpvZp˂Zp˂Zdr|dr|drpfHfH~fH~ے`JHAbےpJAHr󉀒ۑpJXnv˅Xnv˅Xnv˒tbAdtbAdf`vXf`vXpZHAbpZHAbpZHAJtArdJtArdJtArdnXvnXvnrXQJrXQJ`rXQJ`tAJltAJltAJlf`vXf`vXf`vXXQr˂`JXQrˁ`ZAHr󙐂ˍpfH~pfH~p|dZ|dZ|dnvpnvpے`Jے`Jے`JXQ|ZdQ|ZdQf~`f~`f~`ےHAےbHAےbHAtbdQZtbdQZtbdQZnvpnvpnvppZHAb˂pZQXAHr󙐁`ZQXAHf۝`vf۝`vrQtJlrQtJlrQtJlfH~fH~XQr˂XQr˂rbtbtlbtlHfpvHfpvHfpvZp˂Zp˂Zp˂|dr|dr|drfH~fH~fH~˂pHAbˁ`ZQXr󙐂ˁ`Xnv˅Xnv˒tbAdtbAdtbAdZ|abcdefghhgfedcb \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv22_2.dat b/vendor/endroid/qr-code/assets/data/qrv22_2.dat new file mode 100644 index 000000000..3ea03b9ad Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv22_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv22_3.dat b/vendor/endroid/qr-code/assets/data/qrv22_3.dat new file mode 100644 index 000000000..b23d9198a Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv22_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv23_0.dat b/vendor/endroid/qr-code/assets/data/qrv23_0.dat new file mode 100644 index 000000000..827fb6eb3 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv23_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv23_1.dat b/vendor/endroid/qr-code/assets/data/qrv23_1.dat new file mode 100644 index 000000000..766946efe --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv23_1.dat @@ -0,0 +1,217 @@ +lklklklklklklklklklklklkjijijijijijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKKLKKKKKKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:987878787878787878787878765656565656565653434343434343434334343432121212121212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!        lklklklklklklklklklklklkjijijijijijijijijijijijihghghghghghghghgfefefefefefefefecccccdcddcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:987878787878787878765656565656565656565653434333334343434432121212121212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!           lklklklklklklklklklklklkjijijijijijijijijijijijihghghghghghghghgfefefefefefefefecdcdcdcddcdcdcccdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKKKKKKLLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:9878787878787878765656565656565656565656533434343343434342121212121212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!            lklklklklklklklklklklklkjijijijijijijijijijijijihghghghghghghghgfefefefefefefefecdcdcdcdcccdcdcddcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMKLKLKLKLLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:9878787878787878765656565656565656565656543434343343333332121212121212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!            lklklklklklklklklklklklkjijijijijijijijijijijijihghghghghghghghgfefefefefefefefecdcdcdcdcdcdcdcddcdcdcdcbababababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMKLKLKLKLKKKKKLKLLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:9878787878787878765656565656565656543434343434343434343432121212121212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!         lklklklklklklklklklklklkjijijijijijijijihghghghghghghghghghghghgfefefefefefefefecdcdcdcdcdcdcdcdaaaaaabababababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMKLKLKLKLKLKLKLKLLKLKLKKKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:9878787878787878765656565656565654333333443434343434343432121212121212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!        lklklklklklklklklklklklkjijijijijijijijihghghghghghghghghghghghgfefefefefefefefecdcccccccdcdcdcdbabababababababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMKLKLKLKLKLKLKLKLKKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:9878787878787878765656565656565653434343443434343434343432121212121212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!        lklklklklklklklkjijijijijijijijijijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdccdcdcdcdbabababababababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMKLKLKKKKKLKLKLKLLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:9878787878787878787878765656565656565653434343433333434434343432121212121212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!        lklklklklklklklkjijijijijijijijijijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdcccccccdcbabababababababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMKKLKLKLKKLKLKLKLJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:987878787878787878787878765656565656565653434343434343434434343332121212121212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!                    + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + + llkkjjiiHHGGFFEE$$##""!!55667788YYZZ[[\\WWVVUUTT))((''&&??@@AABBllkkjjiiCCBBAA@@8899::;;\\]]^^__YYXXWWVV554433228899::;;\\]]^^__YYXXWWVV554433228899::;;\\]]^^__YYXXWWVV554433228899::;;\\]]^^__YYXXWWVV554433228899::;;\\]]^^__TTSSRRQQ&&%%$$## ::;;<<==cciijjkkHHGGFFEE"!!  + + ,,--..//PPQQRRSSeeddccbbAA@@??>> + + ,,--..//PPQQRRSSeeddccbbAA@@??>> + + ,,--..//PPQQRRSSeeddccbbAA@@??>> + + ,,--..//PPQQRRSSeeddccbbAA@@??>> + + ,,--..//PPQQRRSS``__^^]]221100// ))**++,,WWXXYYZZWVVUUTTS.--,,++* !!""##DDEEFFGGhhiijjkkMMLLKKJJ))((''&& !!""##DDEEFFGGhhiijjkkMMLLKKJJ))((''&& !!""##DDEEFFGGhhiijjkkMMLLKKJJ))((''&& !!""##DDEEFFGGhhiijjkkMMLLKKJJ))((''&& !!""##DDEEFFGGhhiijjkkCCBBAA@@FFGGHHIIcbbaa``_<<;;::998899::;;\\]]^^__YYXXWWVV55443322hhggffeeDDCCBBAA 99::;;<<]]^^__``SSRRQQKK%%$$##""CCDDEEFFhgfedccb??>>==<<<<==>>??``aabbccUUTTSSRR1100//.. + +<<==>>??``aabbccUUTTSSRR1100//.. + +<<==>>??``aabbccUUTTSSRR1100//.. + +<<==>>??``aabbccUUTTSSRR1100//.. + +<<==>>??``aabbccKKJJIIHH""!!>>??@@AAllllkkjjDDCCBBAA 00112233TTUUVVWWaa``__^^==<<;;:: 00112233TTUUVVWWaa``__^^==<<;;:: 00112233TTUUVVWWaa``__^^==<<;;:: 00112233TTUUVVWWaa``__^^==<<;;:: 00112233TTUUVVWW\\[[ZZYY..--,,++--..//00[[\\]]^^SRRQQPON*))((''&$$%%&&''HHIIJJKKllllkkjjIIHHGGFF%%$$##""$$%%&&''HHIIJJKKllllkkjjIIHHGGFF%%$$##""$$%%&&''HHIIJJKKllllkkjjIIHHGGFF%%$$##""$$%%&&''HHIIJJKKllllkkjjIIHHGGFF%%$$##""$$%%&&''HHIIJJKKllllkkjj??>>==<<!!""##$$JJKKQQRR_^^]]\\[87654332 <<==>>??``aabbccUUTTSSRR1100//..ddccbbaa@@??>>====>>??@@aabbccddJJIIHHGG!!!!GGHHIIJJbaa``__^;;::9987@@AABBCCddeeffggQQPPOONN--,,++** @@AABBCCddeeffggQQPPOONN--,,++** @@AABBCCddeeffggQQPPOONN--,,++** @@AABBCCddeeffggQQPPOONN--,,++** @@AABBCCddeeffggGGFFEEDDBBCCDDEEiihgfedc@@??>>==44556677XXYYZZ[[]]\\[[ZZ9988776644556677XXYYZZ[[]]\\[[ZZ9988776644556677XXYYZZ[[]]\\[[ZZ9988776644556677XXYYZZ[[]]\\[[ZZ9988776644556677XXYYZZ[[XXWWVVUU**))(('' + + 11223399__``aabbMLKKJJII&%%$$##"(())**++LLMMNNOOiihhggffEEDDCCBB!! (())**++LLMMNNOOiihhggffEEDDCCBB!! (())**++LLMMNNOOiihhggffEEDDCCBB!! (())**++LLMMNNOOiihhggffEEDDCCBB!! (())**++LLMMNNOOiiccbbaa;;::9933 + +%%&&''((SSTTUUVV[ZZYYXXW21100//. + + @@AABBCCddeeffggQQPPOONN--,,++**``__^^]]<<;;::99 AABBCCDDeeffgghhFFEEDDCC""##$$%%KKQQRRSS^]]\\[[Z65433221 !!""##DDEEFFGGhhiijjkkMMLLKKJJ))((''&& !!""##DDEEFFGGhhiijjkkMMLLKKJJ))((''&& !!""##DDEEFFGGhhiijjkkMMLLKKJJ))((''&& !!""##DDEEFFGGhhiijjkkMMLLKKJJ))((''&& !!""##DDEEFFGGhhiijjkkCCBBAA@@FFGGHHIIcbbaa``_<<;;::998899::;;\\]]^^__YYXXWWVV554433228899::;;\\]]^^__YYXXWWVV554433228899::;;\\]]^^__YYXXWWVV554433228899::;;\\]]^^__YYXXWWVV554433228899::;;\\]]^^__TTSSRRQQ&&%%$$## ::;;<<==cciijjkkHHGGFFEE"!!  + + ,,--..//PPQQRRSSeeddccbbAA@@??>> + + ,,--..//PPQQRRSSeeddccbbAA@@??>> + + ,,--..//PPQQRRSSeeddccbbAA@@??>> + + ,,--..//PPQQRRSSeeddccbbAA@@??>> + + ,,--..//PPQQRRSS``__^^]]221100// ))**++,,WWXXYYZZWVVUUTTS.--,,++* !!""##DDEEFFGGhhiijjkkMMLLKKJJ))((''&&\\[[ZZYY88776655!!""##$$EEFFGGHHiijjkkllBBAA@@??&&''(())TTUUVVWWZYYXXWWV100//..- + + $$%%&&''HHIIJJKKllllkkjjIIHHGGFF%%$$##""$$%%&&''HHIIJJKKllllkkjjIIHHGGFF%%$$##""$$%%&&''HHIIJJKKllllkkjjIIHHGGFF%%$$##""$$%%&&''HHIIJJKKllllkkjjIIHHGGFF%%$$##""$$%%&&''HHIIJJKKllllkkjj??>>==<<!!""##$$JJKKQQRR_^^]]\\[87654332 <<==>>??``aabbccUUTTSSRR1100//.. + +<<==>>??``aabbccUUTTSSRR1100//.. + +<<==>>??``aabbccUUTTSSRR1100//.. + +<<==>>??``aabbccUUTTSSRR1100//.. + +<<==>>??``aabbccKKJJIIHH""!!>>??@@AAllllkkjjDDCCBBAA 00112233TTUUVVWWaa``__^^==<<;;:: 00112233TTUUVVWWaa``__^^==<<;;:: 00112233TTUUVVWWaa``__^^==<<;;:: 00112233TTUUVVWWaa``__^^==<<;;:: 00112233TTUUVVWW\\[[ZZYY..--,,++--..//00[[\\]]^^SRRQQPON*))((''&$$%%&&''HHIIJJKKllllkkjjIIHHGGFF%%$$##""XXWWVVUU44332211 %%&&''((IIJJKKLLllkkjjii>>==<<;; **++,,--XXYYZZ[[VUUTTSSR-,,++**)(())**++LLMMNNOOiihhggffEEDDCCBB!! (())**++LLMMNNOOiihhggffEEDDCCBB!! (())**++LLMMNNOOiihhggffEEDDCCBB!! (())**++LLMMNNOOiihhggffEEDDCCBB!! (())**++LLMMNNOOiiccbbaa;;::9933 + +%%&&''((SSTTUUVV[ZZYYXXW21100//. + + @@AABBCCddeeffggQQPPOONN--,,++** @@AABBCCddeeffggQQPPOONN--,,++** @@AABBCCddeeffggQQPPOONN--,,++** @@AABBCCddeeffggQQPPOONN--,,++** @@AABBCCddeeffggGGFFEEDDBBCCDDEEiihgfedc@@??>>==44556677XXYYZZ[[]]\\[[ZZ9988776644556677XXYYZZ[[]]\\[[ZZ9988776644556677XXYYZZ[[]]\\[[ZZ9988776644556677XXYYZZ[[]]\\[[ZZ9988776644556677XXYYZZ[[XXWWVVUU**))(('' + + 11223399__``aabbMLKKJJII&%%$$##"(())**++LLMMNNOOiihhggffEEDDCCBB!!  + +TTSSRRQQ00//..-- + + ))**++,,MMNNOOPPccbbaa``::993322 + + ..//0011\\]]^^__RQQPONML)((''&&% + + ,,--..//PPQQRRSSeeddccbbAA@@??>> + + ,,--..//PPQQRRSSeeddccbbAA@@??>> + + ,,--..//PPQQRRSSeeddccbbAA@@??>> + + ,,--..//PPQQRRSSeeddccbbAA@@??>> + + ,,--..//PPQQRRSS``__^^]]221100// ))**++,,WWXXYYZZWVVUUTTS.--,,++* !!""##DDEEFFGGhhiijjkkMMLLKKJJ))((''&& !!""##DDEEFFGGhhiijjkkMMLLKKJJ))((''&& !!""##DDEEFFGGhhiijjkkMMLLKKJJ))((''&& !!""##DDEEFFGGhhiijjkkMMLLKKJJ))((''&& !!""##DDEEFFGGhhiijjkkCCBBAA@@FFGGHHIIcbbaa``_<<;;::998899::;;\\]]^^__YYXXWWVV554433228899::;;\\]]^^__YYXXWWVV554433228899::;;\\]]^^__YYXXWWVV554433228899::;;\\]]^^__YYXXWWVV554433228899::;;\\]]^^__TTSSRRQQ&&%%$$## ::;;<<==cciijjkkHHGGFFEE"!!  + + ,,--..//PPQQRRSSeeddccbbAA@@??>> PPOONNMM,,++**)) + + --..//00QQRRSSTT__^^]]\\1100//.. + + 223399::``aabbccKKJJIIHH%$$##""! 00112233TTUUVVWWaa``__^^==<<;;:: 00112233TTUUVVWWaa``__^^==<<;;:: 00112233TTUUVVWWaa``__^^==<<;;:: 00112233TTUUVVWWaa``__^^==<<;;:: 00112233TTUUVVWW\\[[ZZYY..--,,++--..//00[[\\]]^^SRRQQPON*))((''&$$%%&&''HHIIJJKKllllkkjjIIHHGGFF%%$$##""$$%%&&''HHIIJJKKllllkkjjIIHHGGFF%%$$##""$$%%&&''HHIIJJKKllllkkjjIIHHGGFF%%$$##""$$%%&&''HHIIJJKKllllkkjjIIHHGGFF%%$$##""$$%%&&''HHIIJJKKllllkkjj??>>==<<!!""##$$JJKKQQRR_^^]]\\[87654332 <<==>>??``aabbccUUTTSSRR1100//.. + +<<==>>??``aabbccUUTTSSRR1100//.. + +<<==>>??``aabbccUUTTSSRR1100//.. + +<<==>>??``aabbccUUTTSSRR1100//.. + +<<==>>??``aabbccKKJJIIHH""!!>>??@@AAllllkkjjDDCCBBAA 00112233TTUUVVWWaa``__^^==<<;;::LLKKJJII((''&&%% 11223344UUVVWWXX[[ZZYYXX--,,++** ;;<<==>>iijjkkllGGFFEEDD! 44556677XXYYZZ[[]]\\[[ZZ9988776644556677XXYYZZ[[]]\\[[ZZ9988776644556677XXYYZZ[[]]\\[[ZZ9988776644556677XXYYZZ[[]]\\[[ZZ9988776644556677XXYYZZ[[XXWWVVUU**))(('' + + 11223399__``aabbMLKKJJII&%%$$##"(())**++LLMMNNOOiihhggffEEDDCCBB!! (())**++LLMMNNOOiihhggffEEDDCCBB!! (())**++LLMMNNOOiihhggffEEDDCCBB!! (())**++LLMMNNOOiihhggffEEDDCCBB!! (())**++LLMMNNOOiiccbbaa;;::9933 + +%%&&''((SSTTUUVV[ZZYYXXW21100//. + + @@AABBCCddeeffggQQPPOONN--,,++** @@AABBCCddeeffggQQPPOONN--,,++** @@AABBCCddeeffggQQPPOONN--,,++** @@AABBCCddeeffggQQPPOONN--,,++** @@AABBCCddeeffggGGFFEEDDBBCCDDEEiihgfedc@@??>>==44556677XXYYZZ[[]]\\[[ZZ99887766(())**++LLMMNNOOiihhggffEEDDCCBB!! (())**++LLMMNNOOiihhggffEEDDCCBB!! (())**++LLMMNNOOiihhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^33221100 + + + +00112233^^__``aaAA@@??>><<==>>?? + + ,,--..//PPQQRRSSeeddccbbAA@@??>> + + ,,--..//PPQQRRSSeeddccbbAA@@??>> + + ,,--..//PPQQRRSSeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ//..--,, 99::;;<>??@@]]\\[[ZZ99887766 !!""##DDEEFFGG44556677XXYYZZ[[]]\\[[ZZ9988776644556677XXYYZZ[[]]\\[[ZZ9988776644556677XXYYZZ[[]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR''&&%%$$AABBCCDDYYXXWWVV55443322$$%%&&''HHIIJJKK8899::;;\\]]^^__YYXXWWVV554433228899::;;\\]]^^__YYXXWWVV554433228899::;;\\]]^^__YYXXWWVV554433228899::;;\\]]^^__QQKKJJII##""!!EEFFGGHHUUTTSSRR1100//.. + +(())**++LLMMNNOO<<==>>??``aabbccUUTTSSRR1100//.. + +<<==>>??``aabbccUUTTSSRR1100//.. + +<<==>>??``aabbccUUTTSSRR1100//.. + +<<==>>??``aabbccHHGGFFEE!!""##IIJJKKQQQQPPOONN--,,++** + + ,,--..//PPQQRRSS@@AABBCCddeeffggQQPPOONN--,,++** @@AABBCCddeeffggQQPPOONN--,,++** @@AABBCCddeeffggQQPPOONN--,,++** @@AABBCCddeeffggDDCCBBAA$$%%&&''RRSSTTUUMMLLKKJJ))((''&& 00112233TTUUVVWW !!""##DDEEFFGGhhiijjkkMMLLKKJJ))((''&& !!""##DDEEFFGGhhiijjkkMMLLKKJJ))((''&& !!""##DDEEFFGGhhiijjkkMMLLKKJJ))((''&& !!""##DDEEFFGGhhiijjkk@@??>>==(())**++VVWWXXYYIIHHGGFF%%$$##""44556677XXYYZZ[[$$%%&&''HHIIJJKKllllkkjjIIHHGGFF%%$$##""$$%%&&''HHIIJJKKllllkkjjIIHHGGFF%%$$##""$$%%&&''HHIIJJKKllllkkjjIIHHGGFF%%$$##""$$%%&&''HHIIJJKKllddccbb<<;;::99 ,,--..//ZZ[[\\]]EEDDCCBB!! 8899::;;\\]]^^__``aabdQZ|bdQZ|bdQZ|H~fH~fH~f`JXQrے`JtArdlJtArnXv`~HfvnXZp˂Zp˂Zp˂tAJltAJltAJlf`vXf`vXf`vXے`Jے`Jے`J|ZdQ|ZdQ|ZdQHfpvHfpvHfpvZp˂Zp˂Zp˂tAJltAJltAJlf`vXf`vXf`vXr˂pJXQrbtlZdQbtl|ZdQnXv`v`f~fZp˂Zp˂Zp˂tAJltAJltAJlf`vXf`vXf`vXے`Jے`Jے`J|ZdQ|ZdQ|ZdQHfpvHfpvHfpvZp˂Zp˂Zp˂tAJltAJltAJlf`vXf`vXf`vXr˂pJXQrp`JXQtArdlJtArvnXv`ffpvZp˂Zp˂Zp˂tAJltAJlJltf`vXf`vXf`vXے`Jے`Jے`JXQ|ZdQ|ZdQ|ZdQHfpvHfpvfpvZp˂Zp˂Zp˂tAJltAJlJltf`vXf`vXf`vXHAbےpZHAbbtlZdQbtvnXnXv`~HfZp˂Zp˂Zp˂tAJltAJldrtAdrtAdrtA`vXn`vXn`vXn˂p`XQr˂|ZdQbd|Zf~fppvnv`frXQJ`rXQJ`rXQJ`tbdQZtbdQZtbdQZnvpnvpnvpXQr˂XQr˂XQr˂btlbtlbtlnXvnXvnXvrXQJ`rXQJ`rXQJ`tbdQZtbdQZtbdQZnvpnvpnvp`JXQr˂p`JJtArdlJtAbnXvf~HpvnrXQJ`rXQJ`rXQJ`tbdQZtbdQZtbdQZnvpnvpnvpXQr˂XQr˂XQr˂btlbtlbtlnXvnXvnXvrXQJ`rXQJ`rXQJ`tbdQZtbdQZtbdQZnvpnvpnvpZHAb˂pZHArbt|ZdQbd|Zv`f~~HfpnrXQJrXQJ`rXQJ`rbdQZtbdQZtbdQZbnvnvpnvpnr˂XQr˂XQr˂rbtbtlbtlbnXvnXvnXvnrXQJrXQJ`rXQJ`rbdQZtbdQZtbdQZbnvnvpnvpnr˂`JXQrے`J|ZdQbl|Zv`ff~fppvnrXQJ`rXQJ`rXQJ`tbdQZtbdQZJltJltJltvpfvpfvpfJXQrp`JXQtl|dQbtvnXXv`f~HfpےbHAےbHAےbHA|dr|dr|dtAfH~fH~fH~pZHAbpZHAbpZHAJtArdJtArdJtArd`f~`f~`fHےbHAےbHAےbHA|dr|dr|dtAfH~fH~fH~˂pZXQr˂|ZdQrd|`f~fpfpvXv`fےbHAےbHAےbHA|dr|dr|drfH~fH~fH~pZHAbpZHAbpZHAbJtArdJtArdJtArd`f~`f~`f~ےbHAےbHAےbHA|dr|dr|drfH~fH~fH~ے`JXQbے`l|ZdQtl|dQbt璅fpvvnX`ےHAےbHAےbHA|dr|dr|drpfHfH~fH~pZHAbpZHAbpZHAblJtAdJtArdJtArd`f~`f~`f~`ےHAےbHAےbHA|dr|dr|drpfHfH~fH~p`JXQ˂p`XQr˂tlJdQbt璕~HfpvnXXv`fےbHAےbHAےbHA|dr|drbdQZ|bdQZ|bdQZ|H~fH~fH~f˂pZHAr˂pZdQbtl|ZdQv`f~fpvvnXZp˂Zp˂Zp˂tAJltAJlJltf`vXf`vXf`vXے`Jے`Jے`JXQ|ZdQ|ZdQ|ZdQHfpvHfpvfpvZp˂Zp˂Zp˂tAJltAJlJltf`vXf`vXf`vXHAbےpZHAbbtlZdQbtvnXnXv`~HfZp˂Zp˂Zp˂tAJltAJltAJlf`vXf`vXf`vXے`Jے`Jے`J|ZdQ|ZdQ|ZdQHfpvHfpvHfpvZp˂Zp˂Zp˂tAJltAJltAJlf`vXf`vXf`vXr˂pJXQrbtlZdQbtl|ZdQnXv`v`f~fZp˂Zp˂Zp˂tAJltAJltAJlf`vXf`vXf`vXے`Jے`Jے`J|ZdQ|ZdQ|ZdQHfpvHfpvHfpvZp˂Zp˂Zp˂tAJltAJltAJlf`vXf`vXf`vXr˂pJXQrp`JXQtArdlJtArvnXv`ffpvZp˂Zp˂Zp˂tAJltAJldrtAdrtAdrtA`vXn`vXn`vXnbے`ZHAblJtAbtl~HfpۅnXv`v`frXQJ`rXQJ`rbdQZtbdQZtbdQZbnvnvpnvpnr˂XQr˂XQr˂rbtbtlbtlbnXvnXvnXvnrXQJrXQJ`rXQJ`rbdQZtbdQZtbdQZbnvnvpnvpnr˂`JXQrے`J|ZdQbl|Zv`ff~fppvnrXQJ`rXQJ`rXQJ`tbdQZtbdQZtbdQZnvpnvpnvpXQr˂XQr˂XQr˂btlbtlbtlnXvnXvnXvrXQJ`rXQJ`rXQJ`tbdQZtbdQZtbdQZnvpnvpnvp`JXQr˂p`JJtArdlJtAbnXvf~HpvnrXQJ`rXQJ`rXQJ`tbdQZtbdQZtbdQZnvpnvpnvpXQr˂XQr˂XQr˂btlbtlbtlnXvnXvnXvrXQJ`rXQJ`rXQJ`tbdQZtbdQZtbdQZnvpnvpnvpZHAb˂pZHArbt|ZdQbd|Zv`f~~HfpnrXQJrXQJ`rXQJ`rbdQZtbdQZtbdQZtAJlJltJltJltvpfvpfr˂pJXQrے`JXQrd|JtArdvnXf~HrQJHAےbHAےbHA|dr|dr|drpfHfH~fH~pZHAbpZHAbpZHAblJtAdJtArdJtArd`f~`f~`f~`ےHAےbHAےbHA|dr|dr|drpfHfH~fH~p`JXQ˂p`XQr˂tlJdQbt璕~HfpvnXXv`fےbHAےbHAےbHA|dr|dr|dtAfH~fH~fH~pZHAbpZHAbpZHAJtArdJtArdJtArd`f~`f~`fHےbHAےbHAےbHA|dr|dr|dtAfH~fH~fH~˂pZXQr˂|ZdQrd|`f~fpfpvXv`fےbHAےbHAےbHA|dr|dr|drfH~fH~fH~pZHAbpZHAbpZHAbJtArdJtArdJtArd`f~`f~`f~ےbHAےbHAےbHA|dr|dr|drfH~fH~fH~ے`JXQbے`l|ZdQtl|dQbt璅fpvvnX`ےHAےbHAےbHA|dr|dr|drtbdQZbdQZ|bdQZ|bdQZ|H~fH~f`JXQr˂p`Jr˂pZdQbt|ZdQv`f~ffpvZp˂Zp˂Zp˂tAJltAJltAJlf`vXf`vXf`vXے`Jے`Jے`J|ZdQ|ZdQ|ZdQHfpvHfpvHfpvZp˂Zp˂Zp˂tAJltAJltAJlf`vXf`vXf`vXr˂pJXQrp`JXQtArdlJtArvnXv`ffpvZp˂Zp˂Zp˂tAJltAJlJltf`vXf`vXf`vXے`Jے`Jے`JXQ|ZdQ|ZdQ|ZdQHfpvHfpvfpvZp˂Zp˂Zp˂tAJltAJlJltf`vXf`vXf`vXHAbےpZHAbbtlZdQbtvnXnXv`~HfZp˂Zp˂Zp˂tAJltAJltAJlf`vXf`vXf`vXے`Jے`Jے`J|ZdQ|ZdQ|ZdQHfpvHfpvHfpvZp˂Zp˂Zp˂tAJltAJltAJlf`vXf`vXf`vXr˂pJXQrbtlZdQbtl|ZdQnXv`v`f~fZp˂Zp˂Zp˂tAJltAJltAJl|dtAdrtAdrtA`vXn`vXn`vXn˂pZXQr˂|ZdQbl|ZbtlpvnnXv`rXQJ`rXQJ`rXQJ`tbdQZtbdQZtbdQZnvpnvpnvpXQr˂XQr˂XQr˂btlbtlbtlnXvnXvnXvrXQJ`rXQJ`rXQJ`tbdQZtbdQZtbdQZnvpnvpnvpZHAb˂pZHArbt|ZdQbd|Zv`f~~HfpnrXQJrXQJ`rXQJ`rbdQZtbdQZtbdQZbnvnvpnvpnr˂XQr˂XQr˂rbtbtlbtlbnXvnXvnXvnrXQJrXQJ`rXQJ`rbdQZtbdQZtbdQZbnvnvpnvpnr˂`JXQrے`J|ZdQbl|Zv`ff~fppvnrXQJ`rXQJ`rXQJ`tbdQZtbdQZtbdQZnvpnvpnvpXQr˂XQr˂XQr˂btlbtlbtlnXvnXvnXvrXQJ`rXQJ`rXQJ`tbdQZtbdQZtbdQZnvpnvpnvp`JXQr˂p`JJtArdlJtAbnXvf~HpvnrXQJ`rXQJ`rXQJ`tbdQZtbdQZtbdQZJltJltJltvpfvpfvpfHAbےpZHAbtlJdQbt|ZdQbXv`ff~fpےbHAےbHAےbHA|dr|dr|drfH~fH~fH~pZHAbpZHAbpZHAbJtArdJtArdJtArd`f~`f~`f~ےbHAےbHAےbHA|dr|dr|drfH~fH~fH~ے`JXQbے`l|ZdQtl|dQbt璅fpvvnX`ےHAےbHAےbHA|dr|dr|drpfHfH~fH~pZHAbpZHAbpZHAblJtAdJtArdJtArd`f~`f~`f~`ےHAےbHAےbHA|dr|dr|drpfHfH~fH~p`JXQ˂p`XQr˂tlJdQbt璕~HfpvnXXv`fےbHAےbHAےbHA|dr|dr|dtAfH~fH~fH~pZHAbpZHAbpZHAJtArdJtArdJtArd`f~`f~`fHےbHAےbHAےbHA|dr|dr|dtAfH~fH~fH~˂pZXQr˂|ZdQrd|`f~fpfpvXv`fےbHAےbHAےbHA|dr|dr|drbnvpfHfH~fH~pZHAbpZHAbpZHAblJtAdJtArdJtArd`f~`f~`f~`ےHAےbHAےbHA|dr|dr|drpfHfH~fH~XQr˂`JXQr˂p`Zb㉀ۑpZQXb㉀f۝`vf۝`vrQtJlrQtJlf`vXf`vXf`vXے`Jے`Jے`J|ZdQ|ZdQ|ZdQHfpvHfpvHfpvZp˂Zp˂Zp˂tAJltAJltAJlf`vXf`vXf`vXpZHAb˂pZQXb㉀ہ`ZQXbXnv˅Xnv˅Xnv˒tbAdtbAdnvpnvpnvpXQr˂XQr˂XQr˂btlbtlbtlnXvnXvnXvrXQJ`rXQJ`rXQJ`tbdQZtbdQZtbdQZnvpnvpnvpے`JHAbےpJAHr󉀒ۑpJpfH~pfH~pfH~Z|dZ|dfH~fH~fH~pZHAbpZHAbpZHAbJtArdJtArdJtArd`f~`f~`f~ےbHAےbHAےbHA|dr|dr|drfH~fH~fH~XQr˂`JXQrˁ`ZAHr󙐂˅f۝`vf۝`vf۝`vrQtJlrQtJlf`vXf`vXf`vXے`Jے`Jے`J|ZdQ|ZdQ|ZdQHfpvHfpvHfpvZp˂Zp˂Zp˂tAJltAJltAJlf`vXf`vXf`vXp`JXQ˂p`QXb㉀ہ`ZQXbXnv˅Xnv˅Xnv˒tbAdtbAdnvpnvpnvpXQr˂XQr˂XQr˂btlbtlbtlnXvnXvnXvrXQJ`rXQJ`rXQJ`tbdQZtbdQZtbdQZnvpnvpnvpr˂pJXQrp`ZQXۑp`pfH~pfH~p|dZ|dZ|dfH~fH~fH~pZHAbpZHAbpZHAJtArdJtArdJtArd`f~`f~`fHےbHAےbHAےbHA|dr|dr|dtAfH~fH~fH~ZHAb˂pZHAb㉀ۑpZQXb㉀f۝`vf۝`vrQtJlrQtJlrQtJlf`vXf`vXf`vXے`Jے`Jے`JXQ|ZdQ|ZdQ|ZdQHfpvHfpvfpvZp˂Zp˂Zp˂tAJltAJlJltf`vXf`vXf`vXے`JXQbے`JAHr󙐒ۑpJAHXnv˅Xnv˒tbAdtbAdtbAdnvpnvpnr˂XQr˂XQr˂rbtbtlbtlbnXvnXvnXvnrXQJrXQJ`rXQJ`rbdQZtbdQZtbdQZbnvnvpnvpnے`Jr˂pJXQrˁ`ZQXr󙐂ˁ`pfH~pfH~Z|dZ|dZ|drQtefghijkllkjihgf \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv23_2.dat b/vendor/endroid/qr-code/assets/data/qrv23_2.dat new file mode 100644 index 000000000..50e0b3e29 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv23_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv23_3.dat b/vendor/endroid/qr-code/assets/data/qrv23_3.dat new file mode 100644 index 000000000..b0734437c Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv23_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv24_0.dat b/vendor/endroid/qr-code/assets/data/qrv24_0.dat new file mode 100644 index 000000000..fdae76297 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv24_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv24_1.dat b/vendor/endroid/qr-code/assets/data/qrv24_1.dat new file mode 100644 index 000000000..fce059e71 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv24_1.dat @@ -0,0 +1,225 @@ +popopopopopopopopopopoponmnmnmnmnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijighghghggghghghghfefefefefefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPOMNMNMNMNMNMNMNMNLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:9878787878787878765656565656565656543434343434343434343432121212121212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!            popopopopopopopopopopoponmnmnmnmnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijigggghghgghghghghfefefefefefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbababababababababa`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPONMNMNMMNMNMNMNMNMNMNMNLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:9878787878787878765656565656565654333333443434343434343432121212121212121212121210/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!            popopopopopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklklklklklkjijijijijijijijihghghghgghghggggfefefefefefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMMMMMNMMNMNMNMMMNMNMNMNLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:9878787878787878765656565656565653434343443434343434343432121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!            popopopopopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijijijijijihghghghggghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcdcbababababababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMMMMMNMNMMNMNMNMNLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:9878787878787878765656565656565653434343433333434434343332121212121212121210/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!            popopopopopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMMNMNMMMMLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:98787878787878787656565656565656534343434343434343343434321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!            popopopopopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijiggggghghhghghghghghghghgfefefefefefefefefedcdcdcdcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMMMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:98787878787878787656565656565656534343434343434344321212121212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!         popopopopopopoponmnmnmnmnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijighghghghhghghggghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCBABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:98787878787878787878787656565656565656534343434343434342121212121212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!        popopopopopopoponmnmnmnmnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijighghghghggghghghhghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOMMMMMNMNNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878787878787656565656565656533333343343434342121212121212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!           popopopopopopoponmnmnmnmnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijighghghghghghghgheeeeeefefefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOMNMNMNMNNMNMNMMMLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9878787878787878787656565656565656565656543434343343434332121212121212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!            popopopopopopoponmnmnmnmnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijighghghghghghghghfefefefefefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOMNMNMNMNMMMNMNMNLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:9878787878787878765656565656565656565656543434343333343432121212121212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!                       + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + +             + + + + + + + +             + + + + + + + + + + +             + + + + + + + + + + + +          + + + + + + + + + + + +         + + + + + + + + + + + + ppoonnmmHHGGFFEE AABBCCDDiijjkkllFFEEDDCC**++,,--\\]]^^__VUUTTSSR)((''&&% 44556677\\]]^^__]]\\[[ZZ55443322 + +DDEEFFGGllmmnnooMMLLKKJJ%%$$##"",,--..//TTUUVVWWeeddccbb==<<;;::<<==>>??ddeeffggUUTTSSRR--,,++**$$%%&&''LLMMNNOOmmllkkjjEEDDCCBBBBCCDDEEmmggffee;;::9933 ())**++,UVVWWXXYaa``__^^99887766@@AABBCChhiijjkkQQPPOONN))((''&&(())**++PPQQRRSSiihhggffAA@@??>>8899::;;``aabbccYYXXWWVV1100//..  !!""##HHIIJJKKppppoonnIIHHGGFF!!  + + 00112233XXYYZZ[[\\[[ZZYY**))(('' >>??@@AAppppoonnDDCCBBAA<<==>>??ddeeffggUUTTSSRR--,,++**$$%%&&''LLMMNNOOmmllkkjjEEDDCCBB 44556677\\]]^^__]]\\[[ZZ55443322 + +DDEEFFGGllmmnnooMMLLKKJJ%%$$##"",,--..//TTUUVVWWeeddccbb==<<;;:: JJKKLLMM``__^^]]..--,,++ 01122334]^^__``allkkjjiiDDCCBBAA EEFFGGHHmmnnooppBBAA@@?? ..//0011``aabbccQPONMMLL%$$##""!8899::;;``aabbccYYXXWWVV1100//..  !!""##HHIIJJKKppppoonnIIHHGGFF!!  + + 00112233XXYYZZ[[aa``__^^99887766@@AABBCChhiijjkkQQPPOONN))((''&&(())**++PPQQRRSSiihhggffAA@@??>>FFGGHHIIddccbbaa221100//,--..//0YZZ[[\\]]]\\[[ZZ55443322 + +DDEEFFGGllmmnnooMMLLKKJJ%%$$##"",,--..//TTUUVVWWeeddccbb==<<;;::<<==>>??ddeeffggUUTTSSRR--,,++**$$%%&&''LLMMNNOOmmllkkjjEEDDCCBB 44556677\\]]^^__XXWWVVUU&&%%$$##BBCCDDEEmmlkjihg@@??>>==@@AABBCChhiijjkkQQPPOONN))((''&&(())**++PPQQRRSSiihhggffAA@@??>>8899::;;``aabbccYYXXWWVV1100//..  !!""##HHIIJJKKppppoonnIIHHGGFF!!  + + 00112233XXYYZZ[[aa``__^^99887766!!""##$$SSTTUUVV\\[[ZZYY**))(('' + + 567899::abbccddehhggffee@@??>>==!!""##$$IIJJKKLLppoonnmm>>==<<;; + + 223399::ddeeffggKKJJIIHH! <<==>>??ddeeffggUUTTSSRR--,,++**$$%%&&''LLMMNNOOmmllkkjjEEDDCCBB 44556677\\]]^^__]]\\[[ZZ55443322 + +DDEEFFGGllmmnnooMMLLKKJJ%%$$##"",,--..//TTUUVVWWeeddccbb==<<;;:: JJKKLLMM``__^^]]..--,,++ 01122334]^^__``aYYXXWWVV1100//..  !!""##HHIIJJKKppppoonnIIHHGGFF!!  + + 00112233XXYYZZ[[aa``__^^99887766@@AABBCChhiijjkkQQPPOONN))((''&&(())**++PPQQRRSSiihhggffAA@@??>>8899::;;``aabbccTTSSMMLL""!! FFGGHHIIgffeeddc<<;;::99 DDEEFFGGllmmnnooMMLLKKJJ%%$$##"",,--..//TTUUVVWWeeddccbb==<<;;::<<==>>??ddeeffggUUTTSSRR--,,++**$$%%&&''LLMMNNOOmmllkkjjEEDDCCBB 44556677\\]]^^__]]\\[[ZZ55443322 + +%%&&''((WWXXYYZZXXWWVVUU&&%%$$##;;<<==>>effgghijddccbbaa<<;;::99%%&&''((MMNNOOPPggffeedd::993322 + + ;;<<==>>mmnnooppGGFFEEDD@@AABBCChhiijjkkQQPPOONN))((''&&(())**++PPQQRRSSiihhggffAA@@??>>8899::;;``aabbccYYXXWWVV1100//..  !!""##HHIIJJKKppppoonnIIHHGGFF!!  + + 00112233XXYYZZ[[aa``__^^99887766!!""##$$SSTTUUVV\\[[ZZYY**))(('' + + 567899::abbccddeUUTTSSRR--,,++**$$%%&&''LLMMNNOOmmllkkjjEEDDCCBB 44556677\\]]^^__]]\\[[ZZ55443322 + +DDEEFFGGllmmnnooMMLLKKJJ%%$$##"",,--..//TTUUVVWWeeddccbb==<<;;::<<==>>??ddeeffggKKJJIIHH JJKKLLMMcbbaa``_87654332 + +  !!""##HHIIJJKKppppoonnIIHHGGFF!!  + + 00112233XXYYZZ[[aa``__^^99887766@@AABBCChhiijjkkQQPPOONN))((''&&(())**++PPQQRRSSiihhggffAA@@??>>8899::;;``aabbccYYXXWWVV1100//.. ))**++,,[[\\]]^^TTSSMMLL""!! ??@@AABBklmmnnoo``__^^]]88776655 ))**++,,QQRRSSTTccbbaa``1100//.. ??@@AABBppoonnmmCCBBAA@@DDEEFFGGllmmnnooMMLLKKJJ%%$$##"",,--..//TTUUVVWWeeddccbb==<<;;::<<==>>??ddeeffggUUTTSSRR--,,++**$$%%&&''LLMMNNOOmmllkkjjEEDDCCBB 44556677\\]]^^__]]\\[[ZZ55443322 + +%%&&''((WWXXYYZZXXWWVVUU&&%%$$##;;<<==>>effgghijQQPPOONN))((''&&(())**++PPQQRRSSiihhggffAA@@??>>8899::;;``aabbccYYXXWWVV1100//..  !!""##HHIIJJKKppppoonnIIHHGGFF!!  + + 00112233XXYYZZ[[aa``__^^99887766@@AABBCChhiijjkkGGFFEEDD!!""##$$SSTTUUVV_^^]]\\[21100//.$$%%&&''LLMMNNOOmmllkkjjEEDDCCBB 44556677\\]]^^__]]\\[[ZZ55443322 + +DDEEFFGGllmmnnooMMLLKKJJ%%$$##"",,--..//TTUUVVWWeeddccbb==<<;;::<<==>>??ddeeffggUUTTSSRR--,,++**--..//00__``aabbKKJJIIHHCCDDEEFFppppoonn\\[[ZZYY44332211 + + --..//00UUVVWWXX__^^]]\\--,,++**CCDDEEFFlkjihggf??>>==<< !!""##HHIIJJKKppppoonnIIHHGGFF!!  + + 00112233XXYYZZ[[aa``__^^99887766@@AABBCChhiijjkkQQPPOONN))((''&&(())**++PPQQRRSSiihhggffAA@@??>>8899::;;``aabbccYYXXWWVV1100//.. ))**++,,[[\\]]^^TTSSMMLL""!! ??@@AABBklmmnnooMMLLKKJJ%%$$##"",,--..//TTUUVVWWeeddccbb==<<;;::<<==>>??ddeeffggUUTTSSRR--,,++**$$%%&&''LLMMNNOOmmllkkjjEEDDCCBB 44556677\\]]^^__]]\\[[ZZ55443322 + +DDEEFFGGllmmnnooCCBBAA@@%%&&''((WWXXYYZZ[ZZYYXXW.--,,++*(())**++PPQQRRSSiihhggffAA@@??>>8899::;;``aabbccYYXXWWVV1100//..  !!""##HHIIJJKKppppoonnIIHHGGFF!!  + + 00112233XXYYZZ[[aa``__^^99887766@@AABBCChhiijjkkQQPPOONN))((''&&11223399ccddeeffGGFFEEDD GGHHIIJJmmllkkjjXXWWVVUU00//..-- + + 11223344YYZZ[[\\[[ZZYYXX))((''&&GGHHIIJJfeeddccb;;::9987 $$%%&&''LLMMNNOOmmllkkjjEEDDCCBB 44556677\\]]^^__]]\\[[ZZ55443322 + +DDEEFFGGllmmnnooMMLLKKJJ%%$$##"",,--..//TTUUVVWWeeddccbb==<<;;::<<==>>??ddeeffggUUTTSSRR--,,++**--..//00__``aabbKKJJIIHHCCDDEEFFppppoonnIIHHGGFF!!  + + 00112233XXYYZZ[[aa``__^^99887766@@AABBCChhiijjkkQQPPOONN))((''&&(())**++PPQQRRSSiihhggffAA@@??>>8899::;;``aabbccYYXXWWVV1100//..  !!""##HHIIJJKKppppoonn??>>==<< + +))**++,,[[\\]]^^WVVUUTTS*))((''&,,--..//TTUUVVWWeeddccbb==<<;;::<<==>>??ddeeffggUUTTSSRR--,,++**$$%%&&''LLMMNNOOmmllkkjjEEDDCCBB 44556677\\]]^^__]]\\[[ZZ55443322 + +DDEEFFGGllmmnnooMMLLKKJJ%%$$##"" + + ::;;<<==ggmmnnooCCBBAA@@ !!""##$KKLLMMNOiihhggffYYXXWWVVTTSSRRQQ,,++**)) 55667788]]^^__``WWVVUUTT%%$$##"" !!KKLLMMSSbaa``__^65433221 + + (())**++PPQQRRSSiihhggffAA@@??>>8899::;;``aabbccYYXXWWVV1100//..  !!""##HHIIJJKKppppoonnIIHHGGFF!!  + + 00112233XXYYZZ[[aa``__^^99887766@@AABBCChhiijjkkQQPPOONN))((''&&11223399ccddeeffGGFFEEDD GGHHIIJJmmllkkjjEEDDCCBB 44556677\\]]^^__]]\\[[ZZ55443322 + +DDEEFFGGllmmnnooMMLLKKJJ%%$$##"",,--..//TTUUVVWWeeddccbb==<<;;::<<==>>??ddeeffggUUTTSSRR--,,++**$$%%&&''LLMMNNOOmmggffee;;::9933 --..//00__``aabbSRQPONMM&%%$$##" + + 00112233XXYYZZ[[aa``__^^99887766@@AABBCChhiijjkkQQPPOONN))((''&&(())**++PPQQRRSSiihhggffAA@@??>>8899::;;``aabbccYYXXWWVV1100//..  !!""##HHIIJJKKppppoonnIIHHGGFF!!  >>??@@AAppppoonn??>>==<< + +$%%&&''(PQRSSTTUeeddccbbUUTTSSRRPPOONNMM((''&&%%99::;;<>??ddeeffggUUTTSSRR--,,++**$$%%&&''LLMMNNOOmmllkkjjEEDDCCBB 44556677\\]]^^__]]\\[[ZZ55443322 + +DDEEFFGGllmmnnooMMLLKKJJ%%$$##"" + + ::;;<<==ggmmnnooCCBBAA@@ !!""##$KKLLMMNOiihhggffAA@@??>>8899::;;``aabbccYYXXWWVV1100//..  !!""##HHIIJJKKppppoonnIIHHGGFF!!  + + 00112233XXYYZZ[[aa``__^^99887766@@AABBCChhiijjkkQQPPOONN))((''&&(())**++PPQQRRSSddccbbaa221100//11223399ccddeeffLLKKJJII"!!  44556677\\]]^^__]]\\[[ZZ55443322 + +DDEEFFGGllmmnnooMMLLKKJJ%%$$##"",,--..//TTUUVVWWeeddccbb==<<;;::<<==>>??ddeeffggUUTTSSRR--,,++**$$%%&&''LLMMNNOOmmllkkjjEEDDCCBBBBCCDDEEmmggffee;;::9933 ())**++,UVVWWXXYaa``__^^QQPPOONNLLKKJJII$$##""!!==>>??@@eeffgghhJJIIHHGG&&''(())XXYYZZ[[ZYYXXWWV-,,++**) + + 00112233XXYYZZ[[aa``__^^99887766@@AABBCChhiijjkkQQPPOONN))((''&&(())**++PPQQRRSSiihhggffAA@@??>>8899::;;``aabbccYYXXWWVV1100//..  !!""##HHIIJJKKppppoonnIIHHGGFF!!  >>??@@AAppppoonn??>>==<< + +$%%&&''(PQRSSTTUeeddccbb==<<;;::<<==>>??ddeeffggUUTTSSRR--,,++**$$%%&&''LLMMNNOOmmllkkjjEEDDCCBB 44556677\\]]^^__]]\\[[ZZ55443322 + +DDEEFFGGllmmnnooMMLLKKJJ%%$$##"",,--..//TTUUVVWW``__^^]]..--,,++ + + ::;;<<==ggmmnnooHHGGFFEE8899::;;``aabbccYYXXWWVV1100//..  !!""##HHIIJJKKppppoonnIIHHGGFF!!  + + 00112233XXYYZZ[[aa``__^^99887766@@AABBCChhiijjkkQQPPOONN))((''&&(())**++PPQQRRSSiihhggffAA@@??>>FFGGHHIIddccbbaa221100//,--..//0YZZ[[\\]]]\\[[ZZMMLLKKJJIIHHGGFF!!  + + 00112233XXYYZZ[[aa``__^^99887766@@AABBCChhiijjkkQQPPOONN))((''&&(())**++PPQQRRSSiihhggffAA@@??>>8899::;;``aabbccLLKKJJII$$%%&&''VVWWXXYYMMLLKKJJ%%$$##""<<==>>??EEDDCCBB 44556677\\]]^^__]]\\[[ZZ55443322 + +DDEEFFGGllmmnnooMMLLKKJJ%%$$##"",,--..//TTUUVVWWeeddccbb==<<;;::<<==>>??ddeeffggHHGGFFEE(())**++ZZ[[\\]]IIHHGGFF!! @@AABBCCAA@@??>>8899::;;``aabbccYYXXWWVV1100//..  !!""##HHIIJJKKppppoonnIIHHGGFF!!  + + 00112233XXYYZZ[[aa``__^^99887766@@AABBCChhiijjkkDDCCBBAA,,--..//^^__``aaEEDDCCBBDDEEFFGG==<<;;::<<==>>??ddeeffggUUTTSSRR--,,++**$$%%&&''LLMMNNOOmmllkkjjEEDDCCBB 44556677\\]]^^__]]\\[[ZZ55443322 + +DDEEFFGGllmmnnoo@@??>>== 00112233bbccddeeAA@@??>> !!""##HHIIJJKK99887766@@AABBCChhiijjkkQQPPOONN))((''&&(())**++PPQQRRSSiihhggffAA@@??>>8899::;;``aabbccYYXXWWVV1100//..  !!""##HHIIJJKKpphhggff<<;;::99 + + + +99::;;<>??ddeeffggUUTTSSRR--,,++**$$%%&&''LLMMNNOOeeddccbb33221100 ==>>??@@aa``__^^99887766(())**++PPQQRRSS1100//..  !!""##HHIIJJKKppppoonnIIHHGGFF!!  + + 00112233XXYYZZ[[aa``__^^99887766@@AABBCChhiijjkkQQPPOONN))((''&&(())**++PPQQRRSSaa``__^^//..--,,AABBCCDD]]\\[[ZZ55443322 + +,,--..//TTUUVVWW--,,++**$$%%&&''LLMMNNOOmmllkkjjEEDDCCBB 44556677\\]]^^__]]\\[[ZZ55443322 + +DDEEFFGGllmmnnooMMLLKKJJ%%$$##"",,--..//TTUUVVWW]]\\[[ZZ++**))((EEFFGGHHYYXXWWVV1100//.. + + 00112233XXYYZZ[[))((''&&(())**++PPQQRRSSiihhggffAA@@??>>8899::;;``aabbccYYXXWWVV1100//..  !!""##HHIIJJKKppppoonnIIHHGGFF!!  + + 00112233XXYYZZ[[YYXXWWVV''&&%%$$IIJJKKLLUUTTSSRR--,,++** 44556677\\]]^^__%%$$##"",,--..//TTUUVVWWeeddccbb==<<;;::<<==>>??ddeeffggUUTTSSRR--,,++**$$%%&&''LLMMNNOOmmllkkjjEEDDCCBB 44556677\\]]^^__UUTTSSMM##""!! !!""##MMSSTTUUQQPPOONN))((''&&8899::;;``aabbccddeefpvnXv`f~HXQJ`ےbHAZp˂rZ|ddrtA~f`f`vXJXQrے`JXbtlJtArd|ZdQ`f~HfpvnXvےbHAZp˂rXQJ`tAJltbdQZpfHf`vXnvpے`JXQr˂pZHAb|ZdQbtlJtArdnXv`f~fpvrXQJ`ےbHAtbdQZ|drtAJlfH~~f`XQHAb˂p`p`JXQJtArdlJtnXv`f~HfpvrXQJ`ےbHAZp˂|drtAJlbnvfH~f`vXpZHAbے`JXQr˂JtArd|ZdQbtlHfpvnXv`fHZp˂rXQJ`ےJltbdQZ|drf`vXnvpfH~ZHAbbے`btllJtAJfpvf~HXv`fZp˂rXQJ`ےbHAtbdQZ|drJltnvpfH~XQr˂pZHAbے`JbtlJtArd|ZdQ`f~HfpvnXvےbHAZp˂rXQJ`tAJltbdQZpfHf`vXnvpے`JXQr˂pZHAbbtdlJtAnXv`v`f`AZprXQJ`˂rXnXv`f~HfpvbHAZp˂rXQJ`ےrtAJlJltvXnnvpZAbےQr˂pJtArd|ZdQbtlHfpvnXv`fHZp˂rXQJ`ےJltbdQZ|drf`vXnvpfH~XQr˂pZHAbے`JbtlJtArd|ZdQ`f~HfpvnrXQJےbHAZp˂|drtAJltbdQZf`vXvXnے`JXQJXQrrbt璂|ZdQArd|`f~HfpvnXvےbHAZp˂rXQJ`tAJltbdQZpfHf`vXnvpے`JXQr˂pZHAb|ZdQbtlJtArdnXv`f~fpvrXQJ`ےbHAtbdQZ|drtAJlnvpfH~f`vXے`JXQJXQrJtArdrd|nvffpv~HfrXQJ`ےbHAZp˂|drtAJlbnvfH~f`vXpZHAbے`JXQr˂JtArd|ZdQbtlHfpvnXv`fHZp˂rXQJ`ےJltbdQZ|drf`vXnvpfH~XQr˂pZHAbے`J|ZdQbdQbtf~H~Hfp˂rXQbAZp˂QJ`ےf~HfpvnXv`p˂rXQJ`ےJlttbdQbdQZ|vp`vfH~`JXQrZHAb|ZdQbtlJtArdnXv`f~fpvrXQJ`ےbHAtbdQZ|drtAJlnvpfH~f`vXpZHAbے`JXQr˂JtArd|ZdQbtlHfpvnXv`ےHAZp˂rXQJ`tAJltbdQZ|drnfvpfHr˂p˂pZHAlJA|btlJZdQbtHfpvnXv`fHZp˂rXQJ`ےJltbdQZ|drf`vXnvpfH~XQr˂pZHAbے`JbtlJtArd|ZdQ`f~HfpvnrXQJےbHAZp˂|drtAJltbdQZfH~f`vXnvprے˂pZHA|ZdQZdQbt~HfpnXv`pvnےbHAZp˂rXQJ`tAJltbdQZpfHf`vXnvpے`JXQr˂pZHAb|ZdQbtlJtArdnXv`f~fpvrXQJ`ےbHAtbdQZ|drtAJlnvpfH~f`vXpZHAbے`JXQr˂tlJlJtArfpvvnXJ`ےrXQJbHAZfpvnXv`f~HXQJ`ےbHAZdrtAJZ|l`vXnXnvvpf˂pZJXQrbtlJtArd|ZdQ`f~HfpvnrXQJےbHAZp˂|drtAJltbdQZfH~f`vXnvpے`JXQr˂pZHA|ZdQbtlJfpvnXv`f~Zp˂rXQJ`ےbHAtbdQZ|drtAJl`vXnXnvZHAbbے`ZdQbtAr|ZlJtnXv`f~fpvrXQJ`ےbHAtbdQZ|drtAJlnvpfH~f`vXpZHAbے`JXQr˂JtArd|ZdQbtlHfpvnXv`ےHAZp˂rXQJ`tAJltbdQZ|drf`vXnvpfH~`JXQrXQr˂btdlJtAvnXf~fpXv`fZp˂rXQJ`ےJltbdQZ|drf`vXnvpfH~XQr˂pZHAbے`JbtlJtArd|ZdQ`f~HfpvnrXQJےbHAZp˂|drtAJltbdQZfH~f`vXnvpے`JXQr˂pZHAtArdd|ZnXHfv`fbHAZp`ےbrXQJ`nXv`f~HfpvbHAZp˂rltbtbdQZvpfpfH~ے`JXQHAbے˂pZHAJtArd|ZdQbtlHfpvnXv`ےHAZp˂rXQJ`tAJltbdQZ|drf`vXnvpfH~XQr˂pZHAbے`JXQbtlJtArdnXv`f~HfpvrXQJ`ےbHAZp˂|drtAJltbdQZvpfpfH~ے`JXQJXQrlJtAdQbtArdZ`f~HfpvnrXQJےbHAZp˂|drtAJltbdQZfH~f`vXnvpے`JXQr˂pZHA|ZdQbtlJfpvnXv`f~Zp˂rXQJ`ےbHAtbdQZ|drtAJlnvpfH~f`vX˂pZpZHAb|ZdQbdQbt璕v`fvnXfpvrXQJ`ےbHAtbdQZ|drtAJlnvpfH~f`vXpZHAbے`JXQr˂JtArd|ZdQbtlHfpvnXv`ےHAZp˂rXQJ`tAJltbdQZ|drf`vXnvpfH~XQr˂pZHAbے`JXQ|ZdQbdQbtpvnnXv˂rXQHAZp˂ےJlf~HfpvnXv`p˂rXQJ`ےdQZ||drH~ff`vrZHA`JXQrbے`|ZdQbtlJfpvnXv`f~Zp˂rXQJ`ےbHAtbdQZ|drtAJlnvpfH~f`vXpZHAbے`JrbtJtArd|ZdQ`f~HfpvnXvےbHAZp˂rXQJ`tAJltbdQZ|dtAH~ff`vrے˂pZHArd|lJtArQbtlHfpvnXv`ےHAZp˂rXQJ`tAJltbdQZ|drf`vXnvpfH~XQr˂pZHAbے`JXQbtlJtArdnXv`f~HfpvrXQJ`ےbHAZp˂|drtAJltbdQZfH~f`vXnvpHAbےے`JtlJlJtAr~Hfpv`fnrXQJےbHAZp˂|drtAJltbdQZfH~f`vXnvpے`JXQr˂pZHA|ZdQbtlJfpvnXv`f~Zp˂rXQJ`ےbHAtbdQZ|drtAJlnvpfH~f`vXpZHAbے`Jrbttl|lJtArXv`f`f~JbHArXQJtbdQZfpvnXv`p˂rXQJ`ےbHAZdrtAJtAJl`vXnXnvbے`˂pZAJXQrbtlJtArdnXv`f~HfpvrXQJ`ےbHAZp˂|drtAJltbdQZfH~f`vXnvpے`JXQr˂lJtAd|ZdQbtlHfpvnXv`f~Zp˂rXQJ`ےbHAtbdQZ|drJlt`vXnXnv`JXQrXQr˂ZdQbtd|ZJfpvnXv`f~Zp˂rXQJ`ےbHAtbdQZ|drtAJlnvpfH~f`vXpZHAbے`JrbtJtArd|ZdQ`f~HfpvnXvےbHAZp˂rXQJ`tAJltbdQZ|dtAf`vXnvpfے`J`JXQrXQr˂tArdd|ZvnX~Hfp`ےHAZp˂rXQJ`tAJltbdQZ|drf`vXnvpfH~XQr˂pZHAbے`JXQbtlJtArdnXv`f~HfpvrXQJ`ےbHAZp˂|drtAJltbdQZfH~f`vXnvpے`JXQr˂l|ZdQZdQbtdtl~HfHfpvZp˂`ےbA|drtAJlnXv`f~HXQJ`ےbHAZp˂rltbtbdQZf`pfHXJXQrb`JX˂pZHAJtArd|ZdQ`f~HfpvnXvےbHAZp˂rXQJ`tAJltbdQZ|dtAf`vXnvpfے`JXQr˂pZHAb|ZdQbtlJtArdnXv`f~HfpvrXQJ`ےbHAZp˂|drtAJlbnvvp`pfH~˂pZpZHAbJArddQbt璀nXv`f~HfpvrXQJ`ےbHAZp˂|drtAJltbdQZfH~f`vXnvpے`JXQr˂lJtAd|ZdQbtlHfpvnXv`f~Zp˂rXQJ`ےbHAtbdQZ|drJltnvpfH~XQHAb˂p`p`JXQ|ZdQbdQbt璕vf~HvnXZp˂rXQJ`ےbHAtbdQZ|drtAJlnvpfH~f`vXpZHAbے`JrbtJtArd|ZdQ`f~HfpvnXvےbHAZp˂rXQJ`tAJltbdQZ|dtAf`vXnvpfے`JXQr˂pZHAbbtllJtAJfpvpvnnXvrXQJ`ZrXtAJltbdQZf~HfpvbHAZp˂rXQJ`ےdQtAJl|dtvXnnvppZHAQr˂pbJAd|ZdQbtlHfpvnXv`f~Zp˂rXQJ`ےbHAtbdQZ|drJltnvpfH~XQr˂pZHAbے`JbtlJtArd|ZdQ`f~HfpvnXvےbHAZp˂rXQJ`tAJltbdQZp`vXvXnvpHAbےے`J|ZdQlJtAr`f~HfpvnXvےbHAZp˂rXQJ`tAJltbdQZ|dtAf`vXnvpfے`JXQr˂pZHAb|ZdQbtlJtArdnXv`f~HfpvrXQJ`ےbHAZp˂|drtAJlbnvfH~f`vXے`JXQJXQrrbttl|lJtArfpvv`f~rXQJ`ےbHAZp˂|drtAJltbdQZfH~f`vXnvpے`JXQr˂lJtAd|ZdQbtlHfpvnXv`f~Zp˂rXQJ`ےbHAtbdQZ|drJltnvpfH~XQr˂pZHAbے`JJtArdrd|~HXv`p`pvbHAQJ`ےtbdQZ|drfpvnXv`p˂rXQJ`ےbHAZtbdQbdQZ|vpfHfH~bے`ZHAb|ZdQbtlJtArdnXv`f~HfpvrXQJ`ےbHAZp˂|drtAJlbnvfH~f`vXpZHAbے`JXQr˂JtArd|ZdQbtlHfpvnXv`fHZp˂rXQJ`ےJltbdQZ|drnvpvpfHfے`J`JXQrXQr˂btlZdQbtHfpvnXv`f~Zp˂rXQJ`ےbHAtbdQZ|drJltnvpfH~XQr˂pZHAbے`JbtlJtArd|ZdQ`f~HfpvnXvےbHAZp˂rXQJ`tAJltbdQZpfHf`vXnvpr˂p˂pZHAl|ZdQZdQbtdtlnXv`fvnےbHAZp˂rXQJ`tAJltbdQZ|dtAf`vXnvpfے`JXQr˂pZHAb|ZdQbtlJtArdnXv`f~HfpvrXQJ`ےbHAZp˂|drtAJlbnvfH~f`vXpZHAbے`JXQr˂|ZdQZdQbtfpvvnXnrXQJZp˂bHAZp|drtAJltbdQZ|drf`vXnvpfH~XQr˂pZHAbے`JbtlJtArd|ZdQ`f~HfpvnrXQJےbHAZp˂|drtAJltbdQZfH~f`vXnvpے`JXQHAXQrb㉀ۑpۑpJAHf۝`vXnvZ|drQtJl|drtAJlnvpfH~f`vXpZHAbے`JXQr˂JtArd|ZdQbtlHfpvnXv`ےHAZp˂rXQJ`tAJltbdQZ|drf`vXnvpfH~r˂p˂pZHAJAHrr󙐂ˁ`XnvˍpfH~rQtJltbAdtAJltbdQZfH~f`vXnvpے`JXQr˂pZHA|ZdQbtlJfpvnXv`f~Zp˂rXQJ`ےbHAtbdQZ|drtAJlnvpfH~f`vXZHAbbے`ˁ`ZQXZQXb㉀pfH~ㅐf۝`vtbAdZ|dtbdQZ|drf`vXnvpfH~XQr˂pZHAbے`JXQbtlJtArdnXv`f~HfpvrXQJ`ےbHAZp˂|drtAJltbdQZfH~f`vXnvpے`JXQJXQrb㉀ۑpۑpJAHf۝`vXnvZ|drQtJl|drtAJlnvpfH~f`vXpZHAbے`JrbtJtArd|ZdQ`f~HfpvnXvےbHAZp˂rXQJ`tAJltbdQZ|dtAf`vXnvpfZHAbr˂p˂p`Z`ZQXbㅐf۝`vXnvˍpfH~rQtJltbAdtAJltbdQZfH~f`vXnvpے`JXQr˂lJtAd|ZdQbtlHfpvnXv`f~Zp˂rXQJ`ےbHAtbdQZ|drJltnvpfH~ے`J`JXQrQXb㉀ۉۑpJXnvˍpfH~ㅐf۝`vtbAdZ|dtbdQZ|dtAf`vXnvpfے`JXQr˂pZHAb|ZdQbtlJtArdnXv`f~HfpvrXQJ`ےbHAZp˂|drtAJlbnvfH~f`vXXQr˂˂pZpJAHrAHr󙐂ˍpfH~ㅐf۝`vXnvZ|drQtJl|drJltnvpfH~XQr˂pZHAbے`JbtlJtArd|ZdQ`f~HfpvnXvےbHAZp˂rXQJ`tAJltbdQZpfHf`vXnvppZHAbHAbےˁ`Z`ZQXbㅐf۝`vXnvˍp|drQtJltbAdtAJlbnvfH~f`vXpZHAbے`JXQr˂JtArd|ZdQbtlHfpvnXv`fHZp˂rXQJ`ےJltbdQZ|drf`vXnvpfH~ے`J`JXQrQXb㉀ۑpJXnvˍpfH~rQtJltbAdZ|dtbdQZpfHf`vXnvpے`JXQr˂pZHAb|ZdQbtlJtArdnXv`f~fpvrXQJ`ےbHAtbdQZ|drtAJlnvpfH~f`vXXQr˂pZˁ`ZQXAHQXb㉀pfH~ㅐf۝`vtbAdZ|drQtJltijklmnopponmlkj \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv24_2.dat b/vendor/endroid/qr-code/assets/data/qrv24_2.dat new file mode 100644 index 000000000..405fb37a7 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv24_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv24_3.dat b/vendor/endroid/qr-code/assets/data/qrv24_3.dat new file mode 100644 index 000000000..f270bac41 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv24_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv25_0.dat b/vendor/endroid/qr-code/assets/data/qrv25_0.dat new file mode 100644 index 000000000..14b076021 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv25_0.dat @@ -0,0 +1,233 @@ +tstststststststsrqrqrqrqpopopoponmnmnmnmkkkklklkjijijijijijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQQQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:987878787656565654343434343434343212121210/0/0/0/.-.-.-.-tstststststststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijijijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQPOPOPOPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:9:987878787878787656565654343434343212121212121210/0/0/0/.-.-.-.-tstststststststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijijijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_`_^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABABA@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98777777887878787656565654343434321212121212121210/0/0/0/.-.-.-.-tstststststststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijijijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQQQQQRQRPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:97878787887878787656565654343434321212121212121210/0/0/0/.-.-.-.-tstststststststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijijihghghghghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQRPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKLKJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:97878787887878777656565654343434321212121212121210/0/0/0/.-.-.-.-tstststststststsrqrqrqrqpopopoponmnmnmnmlklklkkkjijijijihghghghghghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQRPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:97878787877878787656565654343434321212121212121210/0/0/0/.-.-.-.-tstststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmkkklklkljijijijihghghghghghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQRPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:97878787887656565656565654343434321212121212121210/0/0/0/.-.-.-.-tstststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmklklklkljijijijihghghghghghghghgfefefefedcdcdcdcdcbababababababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQRPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEFEDCDCDCDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:97878787865656565656565654343434321212121212121210/0/0/0/.-.-.-.-tstststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmklklklkljijijijihghghghghghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:97777778765656565656565654343434321212121212121210/0/0/0/.-.-.-.-.-.-.-.-tstststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmklklklkljijijijihghghghghghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSQQQQRQRQPOPOPOPOPONMNMNMNMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878765656565656565654343434321212121210/0/0/0/0/0/0/.-.-.-.-.-.-.-.-tstststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmklklklkljijijijihghghghghghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]^]\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?@?>=>=>=>=>=>=>=<;<;<;<;:9:9:9:987878787656565656565656543434343212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-tstststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmklklkkkkjijijijihghghghghghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:987878787656565656565656543434343212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-tstststsrqrqrqrqpopopopopopopoponmnmnmnmkklklklkjijijijihghghghghgfefefefefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIJIHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:987878787656565656565656543434343212121210/0/0/0/0/0/0/0/.-.-.-.-.-,+,+,+tstststsrqrqrqrqpopopoponmnmnmnmnmnmnmnmlklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWXWVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:987878787656565656565656543434343212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+tstststsrqrqrqrqpopopoponmnmnmnmlklklklklklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQQQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:977777878656565656543434343434343212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+tstststsrqrqrqrqpopopoponmnmnmnmkkkkklkllklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbababababa`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUTSTSTSTSTSTSTSQQQRQRQRPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCDCBABABABABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:978787878656565654343434343434343212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+tstststsrqrqrqrqpopopoponmnmnmnmklklklkllklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSQRQRQRQRPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:978787878656565654343434343434343212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+tstststsrqrqrqrqpopopoponmnmnmnmklklklkllklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSRQRQRQQRQRQRQRPOPOPOPONMNMNMNMNMLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:978787878656565654343434343434343212121210/0/0/0/0/.-.-.-.-.-.-.-,+,+,+,+tstststsrqrqrqrqpopopoponmnmnmnmklklklkliiiiiijijijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[\[ZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQQQQQRQQRQRQRQRPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=>=<;<;<;<;<;<;<;:9:9:9:978787878656565654343434343434343212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+tstststsrqrqrqrqpopopoponmnmnmnmklklklkljijijijijijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQQRQRQRQRPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:978787877656565654343434343434343212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+tstststsrqrqrqrqpopopoponmnmnmnmklklklkkjijijijijijijijihghghghgfefefefefedcdcdcdcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQQRQRQQQQPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGHGFEFEFEFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=<;<;<;<;<;:9:9:9:9:9:9:977778787656565654343434343434343212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!        + + + + ,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!        + + + + ,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%&%$#$#$#$#$#$#$#"!"!"!"!        + + + + ,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!        + + + + ,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!        + + + + ,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!        + + + + ,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!        + + + + ,+,+,+,+*)*)*)*)*)('('('('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!        + + + + + + + ,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!        + + + + + + + + ,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!        + + + + + + + + ,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#$#"!"!"!"!"!"!"!        + + + + + + + + ,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!        + + + + + + + + ,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!              + + + + + + + + ,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!                + + + + + + + + ,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!             + + + + + + + + ,+,+,+,+*)*)*)*)('('('('('&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!            + + + + + ,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!            + + + + ,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!            + + + + ,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!            + + + + ,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!            + + + + ,+*)*)*)*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!         + + + + ttssrrqq EEFFGGHHFFEEDDCC..//0011UTSRQQPPddeeffgg1100//..$$%%&&''qqppoonn8899::;;]]\\[[ZZ LLMMNNOOIIHHGGFF ``aabbcc55443322))**++,,XXWWQQPPopqqrrss%%$$##""00112233eeddccbbDDEEFFGGQQPPOONNXXYYZZ[[==<<;;::llmmnnoo))((''&&,,--..//ddccbbaa + + kkqqrrss<<==>>??YYXXWWVVPPQQRRSSEEDDCCBBppoonnmmIIJJKKLLBBAA@@??22334455OONNMMLLhhiijjkk--,,++**(())**++mmllkkjj<<==>>??YYXXWWVVPPQQRRSSEEDDCCBBddeeffgg1100//..--..//00OONNMMLLttttssrr!! 44556677aa``__^^ + +HHIIJJKKMMLLKKJJ + + \\]]^^__99887766ppqqrrss%%$$##""00112233``__^^]] ttttssrr@@AABBCCUUTTSSRRTTUUVVWWAA@@??>>llkkjjiiMMNNOOPP>>==77666677==>>KKJJIIHHllmmnnoo))((''&&,,--..//iihhggff@@AABBCCUUTTSSRRTTUUVVWWAA@@??>>hhiijjkk--,,++**11223344KKJJIIHHqqppoonn8899::;;]]\\[[ZZ LLMMNNOOIIHHGGFF ``aabbcc55443322 !!""##ttttssrr!! 44556677\\[[ZZYYqqponmlkDDEEFFGGQQPPOONNXXYYZZ[[==<<;;::hhggffeeQQRRSSTT55443322??@@AABBGGFFEEDDppqqrrss%%$$##""00112233eeddccbbDDEEFFGGQQPPOONNXXYYZZ[[==<<;;::llmmnnoo))((''&&556677==GGFFEEDD !"##$mmllkkjj<<==>>??YYXXWWVVPPQQRRSSEEDDCCBBddeeffgg1100//..$$%%&&''qqppoonn8899::;;XXWWQQPPkjjiihhg HHIIJJKKMMLLKKJJ + + \\]]^^__99887766ddccbbaa UUVVWWXX1100//..CCDDEEFFCCBBAA@@ !!""##ttttssrr!! 44556677aa``__^^ + +HHIIJJKKMMLLKKJJ + + \\]]^^__99887766ppqqrrss%%$$##"">>??@@AACCBBAA@@$%%&&''(iihhggff@@AABBCCUUTTSSRRTTUUVVWWAA@@??>>hhiijjkk--,,++**(())**++mmllkkjj<<==>>??OONNMMLLgffeeddc + + LLMMNNOOIIHHGGFF ``aabbcc55443322 !!""##``__^^]] + + YYZZ[[\\--,,++**GGHHIIJJ??>>==<;$$%%&&''qqppoonn8899::;;]]\\[[ZZ LLMMNNOOIIHHGGFF ``aabbcc55443322 !!""##ttttssrr!! BBCCDDEE??>>==77())**++,eeddccbbDDEEFFGGQQPPOONNXXYYZZ[[==<<;;::llmmnnoo))((''&&,,--..//iihhggff@@AABBCCKKJJIIHH##$$cbbaa``_PPQQRRSSEEDDCCBBddeeffgg1100//..$$%%&&''\\[[ZZYY + + ]]^^__``))((''&&KKLLMMNN:9877665(())**++mmllkkjj<<==>>??YYXXWWVVPPQQRRSSEEDDCCBBddeeffgg1100//..$$%%&&''qqppoonnFFGGHHII66554433,--..//0aa``__^^ + +HHIIJJKKMMLLKKJJ + + \\]]^^__99887766ppqqrrss%%$$##""00112233eeddccbbDDEEFFGGGGFFEEDD%%&&''((_^^]]\\[TTUUVVWWAA@@??>>hhiijjkk--,,++**(())**++XXWWVVUU aabbccdd%%$$##OOPPQQWW54433221,,--..//iihhggff@@AABBCCUUTTSSRRTTUUVVWWAA@@??>>hhiijjkk--,,++**(())**++mmllkkjjJJKKLLMM221100//01122334]]\\[[ZZ LLMMNNOOIIHHGGFF ``aabbcc55443322 !!""##ttttssrr!! 44556677aa``__^^ + +HHIIJJKKCCBBAA@@))**++,,[ZZYYXXWXXYYZZ[[==<<;;::llmmnnoo))((''&&,,--..//TTSSRRQQeeffgghhXXYYZZ[[100//..-00112233eeddccbbDDEEFFGGQQPPOONNXXYYZZ[[==<<;;::llmmnnoo))((''&&,,--..//iihhggffNNOOPPQQ..--,,++45566778YYXXWWVVPPQQRRSSEEDDCCBBddeeffgg1100//..$$%%&&''qqppoonn8899::;;]]\\[[ZZ LLMMNNOO??>>==77--..//00WVUTSRQQ + + \\]]^^__99887766ppqqrrss%%$$##""00112233ddeeffggPPOONNMMiijjkkll\\]]^^__-,,++**)44556677aa``__^^ + +HHIIJJKKMMLLKKJJ + + \\]]^^__99887766ppqqrrss%%$$##""00112233eeddccbbWWXXYYZZ**))((''9:;<==>>UUTTSSRRTTUUVVWWAA@@??>>hhiijjkk--,,++**(())**++mmllkkjj<<==>>??YYXXWWVVPPQQRRSS6655443311223344PPOONNMM ``aabbcc55443322 !!""##ttttssrr!! 44556677hhiijjkkLLKKJJIImmnnoopp``aabbcc)((''&&%8899::;;]]\\[[ZZ LLMMNNOOIIHHGGFF ``aabbcc55443322 !!""##ttttssrr!! 44556677aa``__^^ + +[[\\]]^^&&%%$$##??@@AABBQQPPOONNXXYYZZ[[==<<;;::llmmnnoo))((''&&,,--..//iihhggff@@AABBCCUUTTSSRRTTUUVVWW221100//556677==LLKKJJIIddeeffgg1100//..$$%%&&''qqppoonn8899::;;llmmnnooHHGGFFEE qqrrsstt ddeeffgg%$$##"! <<==>>??YYXXWWVVPPQQRRSSEEDDCCBBddeeffgg1100//..$$%%&&''qqppoonn8899::;;]]\\[[ZZ __``aabbCCDDEEFFMMLLKKJJ + + \\]]^^__99887766ppqqrrss%%$$##""00112233eeddccbbDDEEFFGGQQPPOONNXXYYZZ[[..--,,++>>??@@AAHHGGFFEEhhiijjkk--,,++**(())**++mmllkkjj<<==>>??ppqqrrssDDCCBBAA!!""##$$ttssrrqq + + hhiijjkk@@AABBCCUUTTSSRRTTUUVVWWAA@@??>>hhiijjkk--,,++**(())**++mmllkkjj<<==>>??YYXXWWVVccddeeffGGHHIIJJIIHHGGFF ``aabbcc55443322 !!""##ttttssrr!! 44556677aa``__^^ + +HHIIJJKKMMLLKKJJ + + \\]]^^__**))((''BBCCDDEEDDCCBBAAllmmnnoo))((''&&,,--..//iihhggff@@AABBCCttttssrr@@??>>==%%&&''((kkjjiihh + + qqrrssttDDEEFFGGQQPPOONNXXYYZZ[[==<<;;::llmmnnoo))((''&&,,--..//iihhggff@@AABBCCUUTTSSRRgghhiijjKKLLMMNNEEDDCCBBddeeffgg1100//..$$%%&&''qqppoonn8899::;;]]\\[[ZZ LLMMNNOOIIHHGGFF ``aabbcc&&%%$$##FFGGHHII@@??>>==ppqqrrss%%$$##""00112233eeddccbbDDEEFFGGqqppoonn<<;;::99))**++,,ggffeedd ttssrrqqHHIIJJKKMMLLKKJJ + + \\]]^^__99887766ppqqrrss%%$$##""00112233eeddccbbDDEEFFGGQQPPOONN + + kkqqrrssOOPPQQRSAA@@??>>hhiijjkk--,,++**(())**++mmllkkjj<<==>>??YYXXWWVVPPQQRRSSEEDDCCBBddeeffggJJKKLLMM<;:98776 !!""##ttttssrr!! 44556677aa``__^^ + +HHIIJJKKmmllkkjj88776655--..//00ccbbaa``ponmlkkjLLMMNNOOIIHHGGFF ``aabbcc55443322 !!""##ttttssrr!! 44556677aa``__^^ + +HHIIJJKKMMLLKKJJ ttttssrr + +TUVWWXXY==<<;;::llmmnnoo))((''&&,,--..//iihhggff@@AABBCCUUTTSSRRTTUUVVWWAA@@??>>hhiijjkkNNOOPPQQ65544332$$%%&&''qqppoonn8899::;;]]\\[[ZZ LLMMNNOOiihhggff4433221111223344__^^]]\\jiihhggf PPQQRRSSEEDDCCBBddeeffgg1100//..$$%%&&''qqppoonn8899::;;]]\\[[ZZ LLMMNNOOIIHHGGFFqqkkjjii YZZ[[\\]99887766ppqqrrss%%$$##""00112233eeddccbbDDEEFFGGQQPPOONNXXYYZZ[[==<<;;::llmmnnooWWXXYYZZ21100//.(())**++mmllkkjj<<==>>??YYXXWWVVPPQQRRSSeeddccbb00//..--55667788[[ZZYYXXfeeddccb + + TTUUVVWWAA@@??>>hhiijjkk--,,++**(())**++mmllkkjj<<==>>??YYXXWWVVPPQQRRSSEEDDCCBBhhggffee]^^__``a55443322 !!""##ttttssrr!! 44556677aa``__^^ + +HHIIJJKKMMLLKKJJ + + \\]]^^__99887766ppqqrrss[[\\]]^^.--,,++*,,--..//iihhggff@@AABBCCUUTTSSRRTTUUVVWWaa``__^^,,++**))99::;;<>ddccbbaa abbccdde1100//..$$%%&&''qqppoonn8899::;;]]\\[[ZZ LLMMNNOOIIHHGGFF ``aabbcc55443322 !!""##ttttssrr + +__``aabb*))((''&00112233eeddccbbDDEEFFGGQQPPOONNXXYYZZ[[]]\\[[ZZ((''&&%%==>>??@@NNMMLLKK&&''(())^]]\\[[Z + + \\]]^^__99887766ppqqrrss%%$$##""00112233eeddccbbDDEEFFGGQQPPOONNXXYYZZ[[==<<;;::##$$``__^^]] + + effgghhi--,,++**(())**++mmllkkjj<<==>>??YYXXWWVVPPQQRRSSEEDDCCBBddeeffgg1100//..$$%%&&''qqkkjjii ccddeeff&%%$$##"44556677aa``__^^ + +HHIIJJKKMMLLKKJJ + + \\]]^^__YYXXWWVV$$##""!!AABBCCDDJJIIHHGG**++,,--ZYYXXWWV ``aabbcc55443322 !!""##ttttssrr!! 44556677aa``__^^ + +HHIIJJKKMMLLKKJJ + + \\]]^^__99887766%%&&''((\\[[ZZYYijjkklmn))((''&&,,--..//iihhggff@@AABBCCUUTTSSRRTTUUVVWWAA@@??>>hhiijjkk--,,++**(())**++hhggffeegghhiijj! 8899::;;]]\\[[ZZ LLMMNNOOIIHHGGFF ``aabbccUUTTSSRRQQPPOONNXXYYZZ[[==<<;;::llmmnnoo))((''&&556677==GGFFEEDD !"##$mmllkkjj<<==>>??YYXXWWVVPPQQRRSSEEDDCCBBddeeffgg1100//..$$%%&&''qqppoonn8899::;;PPOONNMM$$%%&&''QQPPOONNMMLLKKJJ + + \\]]^^__99887766ppqqrrss%%$$##"">>??@@AACCBBAA@@$%%&&''(iihhggff@@AABBCCUUTTSSRRTTUUVVWWAA@@??>>hhiijjkk--,,++**(())**++mmllkkjj<<==>>??LLKKJJII(())**++MMLLKKJJIIHHGGFF ``aabbcc55443322 !!""##ttttssrr!! BBCCDDEE??>>==77())**++,eeddccbbDDEEFFGGQQPPOONNXXYYZZ[[==<<;;::llmmnnoo))((''&&,,--..//iihhggff@@AABBCCHHGGFFEE,,--..//IIHHGGFFEEDDCCBBddeeffgg1100//..$$%%&&''qqppoonnFFGGHHII66554433,--..//0aa``__^^ + +HHIIJJKKMMLLKKJJ + + \\]]^^__99887766ppqqrrss%%$$##""00112233eeddccbbDDEEFFGGDDCCBBAA00112233EEDDCCBB !!""##AA@@??>>hhiijjkk--,,++**(())**++mmllkkjjJJKKLLMM221100//01122334]]\\[[ZZ LLMMNNOOIIHHGGFF ``aabbcc55443322 !!""##ttttssrr!! 44556677aa``__^^ + +HHIIJJKK@@??>>==44556677AA@@??>>$$%%&&''==<<;;::llmmnnoo))((''&&,,--..//iihhggffNNOOPPQQ..--,,++45566778YYXXWWVVPPQQRRSSEEDDCCBBddeeffgg1100//..$$%%&&''qqppoonn8899::;;]]\\[[ZZ LLMMNNOO77665544==>>??@@==<<;;::(())**++99887766ppqqrrss%%$$##""00112233eeddccbbWWXXYYZZ**))((''9:;<==>>UUTTSSRRTTUUVVWWAA@@??>>hhiijjkk--,,++**(())**++mmllkkjj<<==>>??YYXXWWVVPPQQRRSS33221100AABBCCDD99887766,,--..//55443322 !!""##ttttssrr!! 44556677aa``__^^ + +[[\\]]^^&&%%$$##??@@AABBQQPPOONNXXYYZZ[[==<<;;::llmmnnoo))((''&&,,--..//iihhggff@@AABBCCUUTTSSRRTTUUVVWW//..--,,EEFFGGHH55443322001122331100//..$$%%&&''qqppoonn8899::;;]]\\[[ZZ __``aabbCCDDEEFFMMLLKKJJ + + \\]]^^__99887766ppqqrrss%%$$##""00112233eeddccbbDDEEFFGGQQPPOONNXXYYZZ[[++**))((IIJJKKLL1100//..44556677--,,++**(())**++mmllkkjj<<==>>??YYXXWWVVccddeeffGGHHIIJJIIHHGGFF ``aabbcc55443322 !!""##ttttssrr!! 44556677aa``__^^ + +HHIIJJKKMMLLKKJJ + + \\]]^^__''&&%%$$MMNNOOPP--,,++**8899::;;))((''&&,,--..//iihhggff@@AABBCCUUTTSSRRgghhiijjKKLLMMNNEEDDCCBBddeeffgg1100//..$$%%&&''qqppoonn8899::;;]]\\[[ZZ LLMMNNOOIIHHGGFF ``aabbcc##QQWWXXYY))((''&&<<==>>??%%$$##""00112233eeddccbbDDEEFFGGQQPPOONN + + kkqqrrssOOPPQQRSAA@@??>>hhiijjkk--,,++**(())**++mmllkkjj<<==>>??YYXXWWVVPPQQRRSSEEDDCCBBddeeffggZZ[[\\]]%%$$##""@@AABBCC!! 44556677aa``__^^ + +HHIIJJKKMMLLKKJJ ttttssrr + +TUVWWXXY==<<;;::llmmnnoo))((''&&,,--..//iihhggff@@AABBCCUUTTSSRRTTUUVVWWAA@@??>>hhiijjkk^^__``aa!! DDEEFFGG8899::;;]]\\[[ZZ LLMMNNOOIIHHGGFFqqkkjjii YZZ[[\\]99887766ppqqrrss%%$$##""00112233eeddccbbDDEEFFGGQQPPOONNXXYYZZ[[==<<;;::llmmnnoobbccddeeHHIIJJKK<<==>>??YYXXWWVVPPQQRRSSEEDDCCBBhhggffee]^^__``a55443322 !!""##ttttssrr!! 44556677aa``__^^ + +HHIIJJKKMMLLKKJJ + + \\]]^^__99887766ppqqrrss ffgghhiiLLMMNNOO@@AABBCCUUTTSSRRTTUUVVWWAA@@??>>ddccbbaa abbccdde1100//..$$%%&&''qqppoonn8899::;;]]\\[[ZZ LLMMNNOOIIHHGGFF ``aabbcc55443322 !!""##ttllkkjj + + + +iihhggffPPQQRRSSDDEEFFGGQQPPOONNXXYYZZ[[==<<;;::##$$``__^^]] + + effgghhi--,,++**(())**++mmllkkjj<<==>>??YYXXWWVVPPQQRRSSEEDDCCBBddeeffgg1100//..$$%%&&''iihhggff eeddccbbTTUUVVWW + +HHIIJJKKMMLLKKJJ + + \\]]^^__99887766%%&&''((\\[[ZZYYijjkklmn))((''&&,,--..//iihhggff@@AABBCCUUTTSSRRTTUUVVWWAA@@??>>hhiijjkk--,,++**(())**++eeddccbbaa``__^^ + +XXYYZZ[[ LLMMNNOOIIHHGGFF ``aabbcc55443322))**++,,XXWWQQPPopqqrrss%%$$##""00112233eeddccbbDDEEFFGGQQPPOONNXXYYZZ[[==<<;;::llmmnnoo))((''&&,,--..//aa``__^^]]\\[[ZZ + + \\]]^^__PPQQRRSSEEDDCCBBddeeffgg1100//..--..//00OONNMMLLttttssrr!! 44556677aa``__^^ + +HHIIJJKKMMLLKKJJ + + \\]]^^__99887766ppqqrrss%%$$##""00112233]]\\[[ZZYYXXWWVV ``aabbccTTUUVVWWAA@@??>>hhiijjkk--,,++**11223344KKJJIIHHqqppoonn8899::;;]]\\[[ZZ LLMMNNOOIIHHGGFF ``aabbcc55443322 !!""##ttttssrr!! 44556677YYXXWWQQ##UUTTSSRRddeeffgghhiiZHAbZHAb|ZdQbv`f˂rXQbQZ|fH~fH~XQr˂btlHfpvHfpvZp˂|dr|dtAfH~XQr˂btlbtlHfpvbHAZJl|~f`fH~XQr˂btlHfpvHfpvZp˂|drpfHfH~XQr˂btlbtlHfpvZp˂Jltp`vXXH~`JXQrbtlHfpvfpvZp˂|drfH~ے`JXQے`JXQtlJ~HfpJ`ےdrtAJf`vXf`vXpZHAbJtArdnXvnXvrXQJ`tAJlJltf`vXpZHAbJtArdJtArdnXvp˂rdrtAJvXnfZHAbpZHAbJtArdnXvnXvrXQJ`tAJlf`vXf`vXpZHAbJtArdJtArdnXvrXQJ`bdQZ|nvpfZHAb˂pZJtArdnXvnrXQJrXQJ`tAJlf`vXr˂pr˂ptArdv~bHAXQJltbnvpnvpے`J|ZdQ`f~`f~ےbHAtbdQZbnvnvpے`J|ZdQ|ZdQ`f~XQJ`ےltbvpfHے`Jے`J|ZdQ`f~`fHےbHAtbdQZnvpnvpے`J|ZdQf~`f~ےbHAdrtAfH~JQrHAbے|ZdQ`f~`ےHAےbHAtbdQZnvpZHAbZHAb|ZdQbHfpv`ےbdQZ|fH~fH~XQr˂btlHfpvHfpvZp˂|drpfHfH~XQr˂btlbtlHfpvbHAXQdQZ|~fvXXQr˂XQr˂btlHfpvfpvZp˂|drfH~fH~XQr˂btlHfpvHfpvZp˂Jl|f`vX˂pZH`JXQrbtlHfpvZp˂Zp˂|drfH~ے`JXQے`JXQtlJnXvHAZp˂drtAJf`vXfZHAbpZHAbJtArdnXvnXvrXQJ`tAJlf`vXf`vXpZHAbJtArdJtArdnXvJ`ےdrtAJnvppZHAbpZHAbJtArdnXvnrXQJrXQJ`tAJlf`vXf`vXpZHAbJtArdnXvnXvrXQJ`drtAJnvpAbے`˂pZAJtArdnXvrXQJ`rXQJ`tAJlf`vXr˂pr˂ptArd`f~rXQJltbQnvpے`Jے`J|ZdQ`f~`fHےbHAtbdQZnvpnvpے`J|ZdQf~`f~bHAZpltdfH~ːے`Jے`J|ZdQ`f~`ےHAےbHAtbdQZnvpnvpے`J|ZdQ`f~`f~ےbHAltbfHXnJXQr`JXQ|ZdQ`f~ےbHAےbHAtbdQZnvpZHAb|ZdQb|ZdQbHfpv`ےbZdrtfH~XQr˂XQr˂btlHfpvfpvZp˂|drfH~fH~XQr˂btlHfpvHfpv˂rXQrtAJlf`vXXQr˂XQr˂btlHfpvZp˂Zp˂|drfH~fH~XQr˂btlHfpvHfpvZp˂dQZ|vpf˂pZHrbtbtlHfpvZp˂Zp˂|drfH~ے`JXQtlJtlJnXHHAZp`AJltf`vXpZHAbpZHAbJtArdnXvnrXQJrXQJ`tAJlf`vXf`vXpZHAbJtArdnXvnXvJ`ےtbdQnvppZHAbpZHAJtArdnXvrXQJ`rXQJ`tAJlf`vXfZHAbpZHAbJtArdnXvnXvrXQJ`drtAJH~fAbے`lJtAdJtArdnXvrXQJ`rXQJ`tAJlf`vXr˂ptArdtArdfpvےbHAbdQZ|nvpے`Jے`J|ZdQ`f~`ےHAےbHAtbdQZnvpnvpے`J|ZdQ`f~`f~bHAZpZ|dfH~fے`Jے`JXQ|ZdQ`f~ےbHAےbHAtbdQZnvpے`Jے`J|ZdQ`f~`fHےbHAltd`vXnJQrp|ZdQ|ZdQ`f~ےbHAےbHAtbdQZnvpfH~ZHAb|ZdQb|ZdQbnXv`Zp˂drtfH~XQr˂XQr˂btlHfpvZp˂Zp˂|drfH~fH~XQr˂btlHfpvHfpv`ےbrtAJlvnvXQr˂rbtbtlHfpvZp˂Zp˂|drfH~XQr˂XQr˂btlHfpvfpvZp˂rtAJlvpfZHAbbtlbtlHfpvZp˂Zdr|drfH~f`vXے`JXQtlJtlJf~HrXQJ`AJltf`vXpZHAbpZHAJtArdnXvrXQJ`rXQJ`tAJlf`vXfZHAbpZHAbJtArdnXvnXvHAZp˂tbdQpfH~pZHAblJtAdJtArdnXvrXQJ`rXQJ`tAJlf`vXpZHAbpZHAbJtArdnXvnrXQJrXQJ`tbdQH~ے`JXQJtArdJtArdnXvrXQJ`tAJltAJlf`vXnvpr˂ptArdtArdfpvےbHAbdQZnvpے`Jے`JXQ|ZdQ`f~ےbHAےbHAtbdQZnvpے`Jے`J|ZdQ`f~`fHrXQJtAJl璐f`vے`J|ZdQ|ZdQ`f~ےbHAےbHAtbdQZnvpے`Jے`J|ZdQ`f~`ےHAےbHAZ|dvpfHr˂p|ZdQ|ZdQ`f~ےbHAtbdQZtbdQZnvpfH~ZHAb|ZdQbf~HnXv`Zp˂rtAJlfH~XQr˂rbtbtlHfpvZp˂Zp˂|drfH~XQr˂XQr˂btlHfpvfpv`ےbtbdQZXnvXQr˂btlbtlHfpvZp˂Zdr|drfH~XQr˂XQr˂btlHfpvZp˂Zp˂rtAJl~f`ZHAbbtlbtlHfpvZp˂|dr|drfH~fZHAbے`JXQtlJXv`fp˂rbHAZtbdQf`vXpZHAblJtAdJtArdnXvrXQJ`rXQJ`tAJlf`vXpZHAbpZHAbJtArdnXvnrXQJHAZp˂|drpfH~pZHAbJtArdJtArdnXvrXQJ`tAJltAJlf`vXpZHAbpZHAJtArdnXvrXQJ`rXQJ`tbdQvXnے`JXQJtArdJtArdnXvrXQJ`tAJltAJlf`vXے`Jr˂ptArd~HfXQJ`ےdrtAZ|dnvpے`J|ZdQ|ZdQ`f~ےbHAےbHAtbdQZnvpے`Jے`J|ZdQ`f~`p˂bHAtAJl璐f`vے`J|ZdQ|ZdQ`f~ےbHAtbdQZtbdQZnvpے`Jے`JXQ|ZdQ`f~ےbHAےbHAtAJlvpfHrZHA|ZdQf~`f~ےbHAtbdQZtbdQZnvpXQr˂ZHAb|ZdQbpvnbHAZJbdQrtAJlfH~XQr˂btlbtlHfpvZp˂Zdr|drfH~XQr˂XQr˂btlHfpvrXQJ`ZdrtbdQZnvpfHXQr˂btlbtlHfpvZp˂|dr|drfH~XQr˂rbtbtlHfpvZp˂Zp˂tbdQZ~f`bے`btlHfpvHfpvZp˂|dr|dtAfH~pZHAbے`JXQtlJXv`fp˂rZ|dtbdQf`vXpZHAbJtArdJtArdnXvrXQJ`tAJltAJlf`vXpZHAbpZHAJtArdnXvےbHAtAdQZ||lt~f`pZHAbJtArdJtArdnXvrXQJ`tAJltAJlf`vXpZHAblJtAdJtArdnXvrXQJ`rXQJ`|drpfH~JXQrJtArdnXvnXvrXQJ`tAJlJltf`vXے`Jr˂ptArd~HfXQJ`ےrtAJlZ|dnvpے`J|ZdQ|ZdQ`f~ےbHAtbdQZtbdQZnvpے`Jے`JXQ|ZdQ`f~Zp˂drtAbnvvXnے`J|ZdQf~`f~ےbHAtbdQZtbdQZnvpے`J|ZdQ|ZdQ`f~ےbHAےbHAtAJl璐f`vpZHA|ZdQ`f~`f~ےbHAtbdQZbnvnvpXQr˂ZHAb|ZdQbp`frXQtbdQnvffH~XQr˂btlbtlHfpvZp˂|dr|drfH~XQr˂rbtbtlHfpvrXQJ`Jltpff`vpfHXQr˂btlHfpvHfpvZp˂|dr|dtAfH~XQr˂btlbtlHfpvZp˂ZdrtbdQZXnvbے`btlHfpvHfpvZp˂|drpfHfH~pZHAbے`JXQtlJ~HfpJ`ےZ|df`vXf`vXpZHAbJtArdJtArdnXvrXQJ`tAJltAJlf`vXpZHAblJtAdJtArdnXvےrbdQZ|vXn~f`pZHAbJtArdnXvnXvrXQJ`tAJlJltf`vXpZHAbJtArdJtArdnXvrXQJ`tAdQZ||ltpfH~JXQrJtArdnXvnXvrXQJ`tAJlf`vXf`vXے`Jr˂ptArdvnXbHAZprtAJlnvpnvpے`J|ZdQf~`f~ےbHAtbdQZtbdQZnvpے`J|ZdQ|ZdQ`f~XQJ`ےdrtAvpfHvXnvے`J|ZdQ`f~`f~ےbHAtbdQZbnvnvpے`J|ZdQ|ZdQ`f~ےbHAdrtAbnvf`vZAbے|ZdQ`f~`fHےbHAtbdQZnvpnvpXQr˂pZHAblJtAdJtArdnXvrXQJ`rXQJ`tAJlH~˂pZrZdQnXvnXvrXQJ`tAJlJltf`vXpZHAbJtArdJtArdnXvrXQJ`tAJltAJlf`vXZHAbb㉀ۑppfH~Z|dے`J|ZdQ|ZdQ`f~ےbHAےbHAtbdQZvpfHHAbےbtl`f~`f~ےbHAtbdQZbnvnvpے`J|ZdQ|ZdQ`f~ےbHAtbdQZtbdQZnvpے`JXQJAHr󙐅f۝`vrQtJlXQr˂btlbtlHfpvZp˂Zdr|dr~f``JXQHAJtArdHfpvHfpvZp˂|drpfHfH~XQr˂btlbtlHfpvZp˂|dr|drfH~r˂pˁ`ZQXXnv˒tbAdpZHAbJtArdJtArdnXvrXQJ`tAJltAJlvXnbے`|ZdQnXvnXvrXQJ`tAJlf`vXf`vXpZHAbJtArdJtArdnXvrXQJ`tAJltAJlf`vXZHAbb㉀ۑppfH~Z|dے`J|ZdQ|ZdQ`f~ےbHAtbdQZtbdQZvpfHJXQrbtl`f~`fHےbHAtbdQZnvpnvpے`J|ZdQf~`f~ےbHAtbdQZtbdQZnvpے`JXQJAHr󙐅f۝`vrQtJlXQr˂btlbtlHfpvZp˂|dr|dr~f`˂pZHAJtArdHfpvfpvZp˂|drfH~fH~XQr˂btlHfpvHfpvZp˂|dr|dtAfH~HAbےۑpJXnv˒tbAdpZHAbJtArdJtArdnXvrXQJ`tAJltAJlpfH~bے`ZQbt璀nXvnrXQJrXQJ`tAJlf`vXf`vXpZHAbJtArdnXvnXvrXQJ`tAJlJltf`vX`JXQrAHr󙐂ˍpfH~Z|dے`J|ZdQf~`f~ےbHAtbdQZtbdQZf`vJXQrlJtAr`f~`ےHAےbHAtbdQZnvpnvpے`J|ZdQ`f~`f~ےbHAtbdQZbnvnvp˂pZ`ZQXbㅐf۝`vrQtJlXQr˂btlHfpvHfpvZp˂|dr|dtAXnvے`Jd|ZHfpvZp˂Zp˂|drfH~fH~XQr˂btlHfpvHfpvZp˂|drpfHfH~HAbےۑpJXnv˒tbAdpZHAbJtArdnXvnXvrXQJ`tAJlJltpfH~XQr˂dQbt璀nXvrXQJ`rXQJ`tAJlf`vXfZHAbpZHAbJtArdnXvnXvrXQJ`tAJlf`vXf`vX`JXQrAHr󙐂ˍpfH~Z|dے`J|ZdQ`f~`f~ےbHAtbdQZbnvf`vpZHAblJtAr`f~ےbHAےbHAtbdQZnvpے`Jے`J|ZdQ`f~`fHےbHAtbdQZnvpnvpے``pJAHf۝`vrQtJlXQr˂btlHfpvHfpvZp˂|drp`vXXH~ے`Jd|ZQHfpvZp˂Zp˂|drfH~XQr˂XQr˂btlHfpvfpvZp˂|drfH~fH~JXQrr󙐂ˁ`Xnv˒tbAdpZHAbJtArdnXvnXvrXQJ`tAJlnvpfZHAbXQr˂blJtnXvrXQJ`rXQJ`tAJlf`vXpZHAbpZHAbJtArdnXvnrXQJrXQJ`tAJlf`vXf`vX˂pZHAZQXb㉀pfH~Z|dے`J|ZdQ`f~`fHےbHAtbdQZfH~˂pp`JXQArd|`f~ےbHAےbHAtbdQZnvpے`Jے`J|ZdQ`f~`ےHAےbHAtbdQZnvpnvpbے`ۑpJAHf۝`vrQtJlXQr˂btlHfpvfpvZp˂|drf`vXZHAbrbt璁ZdQbtHfpvZp˂Zdr|drfH~XQr˂XQr˂btlHfpvZp˂Zp˂|drfH~fH~JXQrr󙐂ˁ`Xnv˒tbAdpZHAbJtArdnXvnrXQJrXQJ`tAJlnvpے`JXQlJA|lJtnXvrXQJ`tAJltAJlf`vXpZHAbpZHAJtArdnXvrXQJ`rXQJ`tAJlf`vXfr˂˂p`ZpfH~pfH~Z|dے`J|ZdQ`f~`ےHAےbHAtbdQZfHXnr˂pZdQbtArd|`f~ےbHAtbdQZtbdQZnvpے`Jے`JXQ|ZdQ`f~ےbHAےbHAtbdQZnvppZHAbQXb㉀ۅf۝`vf۝`vrQtJlXQr˂btlHfpvZp˂Zp˂|drvpfZHAblJtAZdQbHfpvZp˂|dr|drfH~XQr˂rbtbtlHfpvZp˂Zp˂|drfH~ے`JpJAHrXnv˅Xnv˒tbAdpZHAJtArdnXvrXQJ`rXQJ`tAJlH~fے`pZrd|JtArdnXvrXQJ`tAJltAJlf`vXpZHAblJtAdJtArdnXvrXQJ`rXQJ`tAJlf`vXXQr˂ˁ`ZpfH~p|dZ|dے`JXQ|ZdQ`f~ےbHAےbHAtbdQZ`vXnHAbےZdQbtf~`f~ےbHAtbdQZtbdQZnvpے`J|ZdQ|ZdQ`f~ےbHAےbHAtbdQZnvppZHAbQXb㉀ۅf۝`vrQtJlrQtJlrbtbtlHfpvZp˂Zp˂|drvpf`JXQrlJtAHfpvHfpvZp˂|dr|dtAfH~XQr˂btlbtlHfpvZp˂Zdr|drfH~ے`ppJAHQXXnv˒tbAdtbAdZ|mnopqrsttsrqponKKKKKKKKLLLLLLLLLLLLL \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv25_1.dat b/vendor/endroid/qr-code/assets/data/qrv25_1.dat new file mode 100644 index 000000000..6d2446efa --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv25_1.dat @@ -0,0 +1,233 @@ +tstststststststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghghgfefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSQRQRQRQRQRQRQRQRPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878787878787656565656565656543434343434343434343434321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        tstststststststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSQRQRQRQRQRQRQRQRPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878787878787656565656565656543434343434343434343434321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        tstststststststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmlklklklklklklkkklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSRQRQRQQRQRQRQQQRQRQQQQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878787878787656565656565656543434343434343434343434321212121212121210/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        tstststststststsrqrqrqrqrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmkkkkklklkkklklkliiiiiijijijijijijijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbababababababababa`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUTSTSTSTSTSTSTSRQQQQQRQQQQQRQRQQQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCBABABABABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878787878787656565656565656543434343434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        tstststststststsrqrqrqrqrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmklklklklklklklkljijijijijijijijijijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:98787878787878787878777656565656565656543434343434343434321212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        tstststststststsrqrqrqrqrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmklklklklklklklkljijijijijijijijijijijijihghghghghghghghgfefefefefefefefefedcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;:9:9:9:9:9:9:9877777787777787877878787656565656565656543434343434343432121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        tstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmklklklklklklklkljijijijijijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9787878787878787887656565656565656565656543434343434343432121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!     tstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmklklklklklklklkljijijijijijijijijihghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9787878787878787865656565656565656565656543434343434343432121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!       tstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmklklklkkklklkkkkjijijijijijijijihghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQQQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9787878787878787865656565656565656565656543434343434343432121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!        tstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmkkkklklkkklklklkjijijijijijijijihghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSQQQQQRQRQQQRQRQRPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9787878787878787865656565656565656565656543434343434343432121212121212121210/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        tstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcbababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSQRQRQRQRQRQRQRQRPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:97878787878787877656565656565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        tstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSQRQRQRQRQRQRQRQRPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:97777778777778787656565656565656565434343434343434343434321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!                + + + + + + + +         + + + + + + + + + + +         + + + + + + + + + + + +            + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + +             + + + + + + + +          + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + + ttssrrqqDDCCBBAA--..//00]]^^__``WWQQPPOO..//0011hhiijjkkGGFFEEDD(())**++XXYYZZ[[aa``__^^1100//..00112233``aabbccYYXXWWVV))((''&& + + 8899::;;hhiijjkkQQPPOONN!! @@AABBCCppqqrrssIIHHGGFFHHIIJJKKqqppoonnAA@@??>>))**++,,ccddeeffGGFFEEDD + +,--..//0abbccddeUUTTSSRR%%$$##"" <<==>>??llmmnnooMMLLKKJJDDEEFFGGttttssrrEEDDCCBBLLMMNNOOmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWeeddccbb55443322,,--..//\\]]^^__XXWWQQPP%%&&''((__``aabbPPOONNMMHHIIJJKKqqppoonnAA@@??>> !!""##PPQQRRSSiihhggff99887766 (())**++XXYYZZ[[aa``__^^1100//..00112233``aabbccYYXXWWVV))((''&& + + 8899::;;hhiijjkkQQPPOONN!! NNOOPPQQ\\[[ZZYYOOPPQQRSeeddccbb55443322,,--..//\\]]^^__ppoonnmm@@??>>== 11223344aabbccddNNMMLLKK22334455qqrrssttCCBBAA@@ ,,--..//\\]]^^__]]\\[[ZZ--,,++**44556677ddeeffggUUTTSSRR%%$$##"" <<==>>??llmmnnooMMLLKKJJDDEEFFGGttttssrrEEDDCCBBLLMMNNOOmmllkkjj==<<;;:: + +--..//00gghhiijjCCBBAA@@ 01122334effgghhiQQPPOONN!! @@AABBCCppqqrrssIIHHGGFFHHIIJJKKqqppoonnAA@@??>> !!""##PPQQRRSSiihhggff99887766 (())**++XXYYZZ[[aa``__^^1100//..00112233``aabbccOONNMMLL))**++,,ccddeeffLLKKJJIILLMMNNOOmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWeeddccbb55443322,,--..//\\]]^^__]]\\[[ZZ--,,++**44556677ddeeffggUUTTSSRR%%$$##"" <<==>>??llmmnnooMMLLKKJJWWXXYYZZXXWWQQPP !"##$TUVWWXXYaa``__^^1100//..00112233``aabbccllkkjjii<<;;::99 + + 55667788eeffgghhJJIIHHGG 6677==>>ttssrrqq??>>==<; + + 00112233``aabbccYYXXWWVV))((''&& + + 8899::;;hhiijjkkQQPPOONN!! @@AABBCCppqqrrssIIHHGGFFHHIIJJKKqqppoonnAA@@??>> !!""##PPQQRRSSiihhggff99887766 11223344kkqqrrss??>>==7745566778ijjkklmnMMLLKKJJDDEEFFGGttttssrrEEDDCCBBLLMMNNOOmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWeeddccbb55443322,,--..//\\]]^^__]]\\[[ZZ--,,++**44556677ddeeffggKKJJIIHH--..//00gghhiijjHHGGFFEE !!""##PPQQRRSSiihhggff99887766 (())**++XXYYZZ[[aa``__^^1100//..00112233``aabbccYYXXWWVV))((''&& + + 8899::;;hhiijjkkQQPPOONN!! @@AABBCCppqqrrssIIHHGGFF##$$[[\\]]^^OONNMMLL$%%&&''(YZZ[[\\]]]\\[[ZZ--,,++**44556677ddeeffgghhggffee88776655 + + 99::;;<>??llmmnnooMMLLKKJJDDEEFFGGttttssrrEEDDCCBBLLMMNNOOmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWeeddccbb55443322556677==ttttssrr66554433 9:;<==>>opqqrrssIIHHGGFFHHIIJJKKqqppoonnAA@@??>> !!""##PPQQRRSSiihhggff99887766 (())**++XXYYZZ[[aa``__^^1100//..00112233``aabbccYYXXWWVV))((''&& + + 8899::;;hhiijjkkGGFFEEDD + +11223344kkqqrrssDDCCBBAA $$%%&&''TTUUVVWWeeddccbb55443322,,--..//\\]]^^__]]\\[[ZZ--,,++**44556677ddeeffggUUTTSSRR%%$$##"" <<==>>??llmmnnooMMLLKKJJDDEEFFGGttttssrrEEDDCCBB%%&&''((__``aabbKKJJIIHH())**++,]^^__``aYYXXWWVV))((''&& + + 8899::;;hhiijjkkddccbbaa44332211 ==>>??@@mmnnooppBBAA@@?? + + CCDDEEFFjiihhggf54433221 + + 8899::;;hhiijjkkQQPPOONN!! @@AABBCCppqqrrssIIHHGGFFHHIIJJKKqqppoonnAA@@??>> !!""##PPQQRRSSiihhggff99887766 (())**++XXYYZZ[[aa``__^^1100//..>>??@@AAqqkkjjii221100// + + ??@@AABBttttssrrEEDDCCBBLLMMNNOOmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWeeddccbb55443322,,--..//\\]]^^__]]\\[[ZZ--,,++**44556677ddeeffggUUTTSSRR%%$$##"" <<==>>??llmmnnooCCBBAA@@ 556677==ttttssrr@@??>>== + + (())**++XXYYZZ[[aa``__^^1100//..00112233``aabbccYYXXWWVV))((''&& + + 8899::;;hhiijjkkQQPPOONN!! @@AABBCCppqqrrssIIHHGGFFHHIIJJKKqqppoonnAA@@??>>))**++,,ccddeeffGGFFEEDD + +,--..//0abbccddeUUTTSSRR%%$$##"" <<==>>??llmmnnoo``__^^]]00//..--AABBCCDDqqrrsstt>>==7766 GGHHIIJJfeeddccb100//..- <<==>>??llmmnnooMMLLKKJJDDEEFFGGttttssrrEEDDCCBBLLMMNNOOmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWeeddccbb55443322,,--..//\\]]^^__]]\\[[ZZ--,,++** + + BBCCDDEEhhggffee..--,,++CCDDEEFFqqppoonnAA@@??>> !!""##PPQQRRSSiihhggff99887766 (())**++XXYYZZ[[aa``__^^1100//..00112233``aabbccYYXXWWVV))((''&& + + 8899::;;hhiijjkkQQPPOONN!! @@AABBCCppqqrrss??>>==77>>??@@AAqqponmlk<;:98776,,--..//\\]]^^__]]\\[[ZZ--,,++**44556677ddeeffggUUTTSSRR%%$$##"" <<==>>??llmmnnooMMLLKKJJDDEEFFGGttttssrrEEDDCCBBLLMMNNOOmmllkkjj==<<;;:: + +--..//00gghhiijjCCBBAA@@ 01122334effgghhiQQPPOONN!! @@AABBCCppqqrrss\\[[ZZYY,,++**))EEFFGGHHttssrrqq55443322KKLLMMNNbaa``__^-,,++**)@@AABBCCppqqrrssIIHHGGFFHHIIJJKKqqppoonnAA@@??>> !!""##PPQQRRSSiihhggff99887766 (())**++XXYYZZ[[aa``__^^1100//..00112233``aabbccYYXXWWVV))((''&& FFGGHHIIddccbbaa**))((''GGHHIIJJmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWeeddccbb55443322,,--..//\\]]^^__]]\\[[ZZ--,,++**44556677ddeeffggUUTTSSRR%%$$##"" <<==>>??llmmnnooMMLLKKJJDDEEFFGGttttssrr66554433 + + BBCCDDEEkjjiihhg6554433200112233``aabbccYYXXWWVV))((''&& + + 8899::;;hhiijjkkQQPPOONN!! @@AABBCCppqqrrssIIHHGGFFHHIIJJKKqqppoonnAA@@??>> !!""##PPQQRRSSiihhggff99887766 11223344kkqqrrss??>>==7745566778ijjkklmnMMLLKKJJDDEEFFGGttttssrrXXWWVVUU((''&&%%IIJJKKLLkkjjiihh1100//..OOPPQQWW^]]\\[[Z)((''&&%DDEEFFGGttttssrrEEDDCCBBLLMMNNOOmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWeeddccbb55443322,,--..//\\]]^^__]]\\[[ZZ--,,++**44556677ddeeffggUUTTSSRR%%$$##""JJKKLLMM``__^^]]&&%%$$##KKLLMMNNiihhggff99887766 (())**++XXYYZZ[[aa``__^^1100//..00112233``aabbccYYXXWWVV))((''&& + + 8899::;;hhiijjkkQQPPOONN!! @@AABBCCppqqrrssIIHHGGFFHHIIJJKKqqkkjjii221100// FFGGHHIIgffeeddc21100//.44556677ddeeffggUUTTSSRR%%$$##"" <<==>>??llmmnnooMMLLKKJJDDEEFFGGttttssrrEEDDCCBBLLMMNNOOmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWeeddccbb55443322556677==ttttssrr66554433 9:;<==>>opqqrrssIIHHGGFFHHIIJJKKqqppoonnTTSSRRQQ$$##""!! MMNNOOPPggffeedd--,,++**XXYYZZ[[ZYYXXWWV%$$##"! HHIIJJKKqqppoonnAA@@??>> !!""##PPQQRRSSiihhggff99887766 (())**++XXYYZZ[[aa``__^^1100//..00112233``aabbccYYXXWWVV))((''&& + + 8899::;;hhiijjkkQQPPOONN!! NNOOPPQQ\\[[ZZYYOOPPQQRSeeddccbb55443322,,--..//\\]]^^__]]\\[[ZZ--,,++**44556677ddeeffggUUTTSSRR%%$$##"" <<==>>??llmmnnooMMLLKKJJDDEEFFGGttttssrrEEDDCCBBLLMMNNOOhhggffee..--,,++JJKKLLMMcbbaa``_.--,,++* + + 8899::;;hhiijjkkQQPPOONN!! @@AABBCCppqqrrssIIHHGGFFHHIIJJKKqqppoonnAA@@??>> !!""##PPQQRRSSiihhggff99887766 (())**++XXYYZZ[[aa``__^^1100//..>>??@@AAqqkkjjii221100// + + ??@@AABBttttssrrEEDDCCBBLLMMNNOOmmllkkjj]]\\[[ZZPPOONNMM !!""##$$QQRRSSTTccbbaa``))((''&&##$$%%\\]]^^__UTSRQQPPLLMMNNOOmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWeeddccbb55443322,,--..//\\]]^^__]]\\[[ZZ--,,++**44556677ddeeffggUUTTSSRR%%$$##"" <<==>>??llmmnnooMMLLKKJJWWXXYYZZXXWWQQPP !"##$TUVWWXXYaa``__^^1100//..00112233``aabbccYYXXWWVV))((''&& + + 8899::;;hhiijjkkQQPPOONN!! @@AABBCCppqqrrssIIHHGGFFHHIIJJKKqqppoonnAA@@??>> !!""##PPQQRRSSddccbbaa**))((''NNOOPPQQ_^^]]\\[*))((''& <<==>>??llmmnnooMMLLKKJJDDEEFFGGttttssrrEEDDCCBBLLMMNNOOmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWeeddccbb55443322,,--..//\\]]^^__]]\\[[ZZ--,,++** + + BBCCDDEEhhggffee..--,,++CCDDEEFFqqppoonnAA@@??>> !!""##PPQQRRSSiihhggffYYXXWWVVLLKKJJII%%&&''((UUVVWWXX__^^]]\\%%$$##&&''(())``aabbccOONNMMLL !!""##PPQQRRSSiihhggff99887766 (())**++XXYYZZ[[aa``__^^1100//..00112233``aabbccYYXXWWVV))((''&& + + 8899::;;hhiijjkkQQPPOONN!! @@AABBCCppqqrrssIIHHGGFF##$$[[\\]]^^OONNMMLL$%%&&''(YZZ[[\\]]]\\[[ZZ--,,++**44556677ddeeffggUUTTSSRR%%$$##"" <<==>>??llmmnnooMMLLKKJJDDEEFFGGttttssrrEEDDCCBBLLMMNNOOmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWW``__^^]]&&%%$$##WWXXYYZZ[ZZYYXXW&%%$$##"@@AABBCCppqqrrssIIHHGGFFHHIIJJKKqqppoonnAA@@??>> !!""##PPQQRRSSiihhggff99887766 (())**++XXYYZZ[[aa``__^^1100//..00112233``aabbccYYXXWWVV))((''&& FFGGHHIIddccbbaa**))((''GGHHIIJJmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWeeddccbbUUTTSSRRHHGGFFEE))**++,,YYZZ[[\\[[ZZYYXX**++,,--ddeeffggKKJJIIHH$$%%&&''TTUUVVWWeeddccbb55443322,,--..//\\]]^^__]]\\[[ZZ--,,++**44556677ddeeffggUUTTSSRR%%$$##"" <<==>>??llmmnnooMMLLKKJJDDEEFFGGttttssrrEEDDCCBB%%&&''((__``aabbKKJJIIHH())**++,]^^__``aYYXXWWVV))((''&& + + 8899::;;hhiijjkkQQPPOONN!! @@AABBCCppqqrrssIIHHGGFFHHIIJJKKqqppoonnAA@@??>> !!""##PPQQRRSSiihhggff99887766 (())**++XXYYZZ[[\\[[ZZYY##$$[[\\]]^^WVUTSRQQ! DDEEFFGGttttssrrEEDDCCBBLLMMNNOOmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWeeddccbb55443322,,--..//\\]]^^__]]\\[[ZZ--,,++**44556677ddeeffggUUTTSSRR%%$$##""JJKKLLMM``__^^]]&&%%$$##KKLLMMNNiihhggff99887766 (())**++XXYYZZ[[aa``__^^QQPPOONNMMLLKKJJDDEEFFGGttttssrrEEDDCCBBLLMMNNOOmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWeeddccbb55443322,,--..//\\]]^^__PPOONNMM00112233iihhggff99887766 + + 8899::;;IIHHGGFFHHIIJJKKqqppoonnAA@@??>> !!""##PPQQRRSSiihhggff99887766 (())**++XXYYZZ[[aa``__^^1100//..00112233``aabbccLLKKJJII44556677eeddccbb55443322 <<==>>??EEDDCCBBLLMMNNOOmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWeeddccbb55443322,,--..//\\]]^^__]]\\[[ZZ--,,++**44556677ddeeffggHHGGFFEE ==>>??@@aa``__^^1100//..@@AABBCCAA@@??>> !!""##PPQQRRSSiihhggff99887766 (())**++XXYYZZ[[aa``__^^1100//..00112233``aabbccYYXXWWVV))((''&& + + 8899::;;hhiijjkkDDCCBBAA + + + +AABBCCDD]]\\[[ZZ--,,++**DDEEFFGG==<<;;:: + +$$%%&&''TTUUVVWWeeddccbb55443322,,--..//\\]]^^__]]\\[[ZZ--,,++**44556677ddeeffggUUTTSSRR%%$$##"" <<==>>??llmmnnoo@@??>>== EEFFGGHHYYXXWWVV))((''&&HHIIJJKK99887766 (())**++XXYYZZ[[aa``__^^1100//..00112233``aabbccYYXXWWVV))((''&& + + 8899::;;hhiijjkkQQPPOONN!! @@AABBCCppqqrrss77665544IIJJKKLLUUTTSSRR%%$$##""LLMMNNOO55443322,,--..//\\]]^^__]]\\[[ZZ--,,++**44556677ddeeffggUUTTSSRR%%$$##"" <<==>>??llmmnnooMMLLKKJJDDEEFFGGttllkkjj33221100MMNNOOPPQQPPOONN!!  !!""##PPQQRRSS1100//..00112233``aabbccYYXXWWVV))((''&& + + 8899::;;hhiijjkkQQPPOONN!! @@AABBCCppqqrrssIIHHGGFFHHIIJJKKiihhggff//..--,,QQWWXXYYMMLLKKJJ$$%%&&''TTUUVVWW--,,++**44556677ddeeffggUUTTSSRR%%$$##"" <<==>>??llmmnnooMMLLKKJJDDEEFFGGttttssrrEEDDCCBBLLMMNNOOeeddccbb++**))((##ZZ[[\\]]IIHHGGFF(())**++XXYYZZ[[))((''&& + + 8899::;;hhiijjkkQQPPOONN!! @@AABBCCppqqrrssIIHHGGFFHHIIJJKKqqppoonnAA@@??>> !!""##PPQQRRSSaa``__^^''&&%%$$$$%%&&''^^__``aaEEDDCCBB,,--..//\\]]^^__%%$$##"" <<==>>??llmmnnooMMLLKKJJDDEEFFGGttttssrrEEDDCCBBLLMMNNOOmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWW]]\\[[ZZ##(())**++bbccddeeAA@@??>>00112233``aabbcc!! @@AABBCCppqqrrssIIHHGGFFHHIIJJKKqqppoonnAA@@??>> !!""##PPQQRRSSiihhggff99887766 (())**++XXYYZZ[[YYXXWWQQ,,--..//ffgghhii==<<;;:: + +44556677ddeeffgghhiiZHAbZHAbZHAb|ZdQb|ZdQbp`fnXv`˂rXQZp˂dQZ|rtAJlfH~fH~XQr˂XQr˂rbtbtlbtlHfpvHfpvZp˂Zp˂Zp˂|dr|drfH~fH~fH~XQr˂XQr˂btlbtlHfpvHfpvHfpvbHAZ`ےbdQZ|tbdQZf`vXvpfHXQr˂XQr˂btlbtlbtlHfpvHfpvZp˂Zp˂Zdr|dr|drfH~fH~XQr˂XQr˂XQr˂btlbtlHfpvHfpvfpvZp˂Zp˂Jl|tbdQZvpfXnvZHAb`JXQrbtlbtlHfpvHfpvHfpvZp˂Zp˂|dr|dr|dtAfH~fH~XQr˂XQr˂rbtbtlbtlHfpvHfpvZp˂Zp˂Zp˂|dr|drf`vX~f`ZHAbے`JlJtAd|ZQHfpvHfpvfpvZp˂Zp˂ے`JXQے`JXQے`JXQtlJtlJ~Hfpf~HJ`ےbHAZdrtAJtbdQf`vXf`vXpZHAbpZHAblJtAdJtArdJtArdnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJlf`vXf`vXfZHAbpZHAbpZHAbJtArdJtArdnXvnXvnXvp˂rHAZp˂drtAJ|ltnvp~f`pZHAbpZHAbJtArdJtArdJtArdnXvnXvrXQJ`rXQJ`tAJltAJltAJlf`vXf`vXpZHAbpZHAbpZHAJtArdJtArdnXvnXvnrXQJrXQJ`rXQJ`drtAJ|drH~fpfH~ے`JXQ˂pZJtArdJtArdnXvnXvnXvrXQJ`rXQJ`tAJltAJlJltf`vXf`vXpZHAbpZHAblJtAdJtArdJtArdnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJlnvppfH~ے`pZXQr˂rZdQblJtnXvnXvnrXQJrXQJ`rXQJ`r˂pr˂pr˂ptArdtArdvnXfpvbHAXQJdrtAltbQZ|dnvpnvpے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~ےbHAےbHAےbHAtbdQZtbdQZnvpnvpے`Jے`Jے`J|ZdQ|ZdQ`f~`f~`fHXQJ`ےbHAltdbnvfH~fvXnvے`Jے`J|ZdQ|ZdQf~`f~`f~ےbHAےbHAtbdQZtbdQZtbdQZnvpnvpے`Jے`Jے`JXQ|ZdQ|ZdQ`f~`f~`ےHAےbHAےbHAltbtAJl`vXnf`vr˂pHAbے|ZdQ|ZdQ`f~`f~`fHےbHAےbHAtbdQZtbdQZbnvnvpnvpے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~ےbHAےbHAےbHAtbdQZtbdQZfHXnf`vHAbےpZHAbbtlArd|`f~`f~`ےHAےbHAےbHAZHAbZHAb|ZdQb|ZdQb|ZdQbv`fnXv``ےbJbdQZdrtnvffH~fH~XQr˂XQr˂btlbtlbtlHfpvHfpvZp˂Zp˂Zdr|dr|drfH~fH~XQr˂XQr˂XQr˂btlbtlHfpvHfpvfpvbHAXQZdrrtAJlpff`vnvfH~XQr˂XQr˂btlbtlHfpvHfpvHfpvZp˂Zp˂|dr|dr|dtAfH~fH~XQr˂XQr˂rbtbtlbtlHfpvHfpvZp˂Zp˂Zp˂dQZ|tbdQZvpfXH~ZHAb`JXQrbtlbtlHfpvHfpvfpvZp˂Zp˂|dr|drpfHfH~fH~XQr˂XQr˂btlbtlbtlHfpvHfpvZp˂Zp˂Zdr|dr|drvpfXnv`JXQrے`JJtArdZdQbtHfpvHfpvZp˂Zp˂Zp˂ے`JXQے`JXQtlJtlJtlJ~Hfpp˂rHAZp˂Z|dAJltf`vXf`vXf`vXpZHAbpZHAbJtArdJtArdJtArdnXvnXvrXQJ`rXQJ`tAJltAJltAJlf`vXf`vXpZHAbpZHAbpZHAJtArdJtArdnXvnXvnrXQJJ`ےtAdQZ|tbdQvXnpfH~fZHAbpZHAbpZHAbJtArdJtArdnXvnXvnXvrXQJ`rXQJ`tAJltAJlJltf`vXf`vXpZHAbpZHAblJtAdJtArdJtArdnXvnXvrXQJ`rXQJ`rXQJ`drtAJ|ltH~fZHAbے`JXQ˂pZAJtArdJtArdnXvnXvnrXQJrXQJ`rXQJ`tAJltAJlf`vXf`vXf`vXpZHAbpZHAbJtArdJtArdJtArdnXvnXvrXQJ`rXQJ`tAJltAJltAJlH~fpfH~˂pZXQr˂|ZdQlJtnXvnXvrXQJ`rXQJ`rXQJ`r˂pr˂ptArdtArdtArdv~XQJ`ےrXQJrtAJlbdQZ|nvpnvpnvpے`Jے`J|ZdQ|ZdQf~`f~`f~ےbHAےbHAtbdQZtbdQZtbdQZnvpnvpے`Jے`Jے`JXQ|ZdQ|ZdQ`f~`f~`p˂bHAZpdrtAZ|dvpfHf`vے`Jے`Jے`J|ZdQ|ZdQ`f~`f~`fHےbHAےbHAtbdQZtbdQZbnvnvpnvpے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~ےbHAےbHAےbHAltdbnvvpfHJQrrZHA㙒`JXQ|ZdQ|ZdQ`f~`f~`ےHAےbHAےbHAtbdQZtbdQZnvpnvpnvpے`Jے`J|ZdQ|ZdQf~`f~`f~ےbHAےbHAtbdQZtbdQZtbdQZ`vXnf`vHAbےp`JXQbtlArd|`f~`f~ےbHAےbHAےbHAZHAbZHAb|ZdQb|ZdQbf~HHfpvbHAZ`ےbtbdQdrtfH~fH~fH~XQr˂XQr˂btlbtlHfpvHfpvHfpvZp˂Zp˂|dr|dr|dtAfH~fH~XQr˂XQr˂rbtbtlbtlHfpvHfpvrXQJ`˂rXQJltrtAJl~f`XnvXQr˂XQr˂XQr˂btlbtlHfpvHfpvfpvZp˂Zp˂|dr|drpfHfH~fH~XQr˂XQr˂btlbtlbtlHfpvHfpvZp˂Zp˂ZdrrtAJlp`vX~f`˂pZHbے`rbtbtlbtlHfpvHfpvZp˂Zp˂Zp˂|dr|drfH~fH~fH~XQr˂XQr˂btlbtlHfpvHfpvHfpvZp˂Zp˂|dr|dr|dtAvpfXH~`JXQHArbtJtArdZdQbHfpvHfpvZp˂Zp˂Zdrے`JXQے`JXQtlJtlJXv`fnXvp˂rHAZp`Z|dAJltf`vXf`vXfZHAbpZHAbpZHAbJtArdJtArdnXvnXvnXvrXQJ`rXQJ`tAJltAJlJltf`vXf`vXpZHAbpZHAblJtAdJtArdJtArdnXvnXvےbHAJ`ےbdQZ|tbdQvXnpfH~pZHAbpZHAbpZHAJtArdJtArdnXvnXvnrXQJrXQJ`rXQJ`tAJltAJlf`vXf`vXf`vXpZHAbpZHAbJtArdJtArdJtArdnXvnXvrXQJ`rXQJ`tAdQZ|tbdQnvpvXnAbے`JXQrlJtAdJtArdJtArdnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJlf`vXf`vXfZHAbpZHAbpZHAbJtArdJtArdnXvnXvnXvrXQJ`rXQJ`tAJltAJlJltH~fZHAbbے`lJA|ZQbt璑JtArdnXvnXvrXQJ`rXQJ`tAJlr˂pr˂ptArdtArd~Hf`f~XQJ`ےےbHArtAJlbdQZnvpnvpے`Jے`Jے`J|ZdQ|ZdQ`f~`f~`fHےbHAےbHAtbdQZtbdQZbnvnvpnvpے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~Zp˂bHAZpdrtAtAJlvpfHf`vے`Jے`Jے`JXQ|ZdQ|ZdQ`f~`f~`ےHAےbHAےbHAtbdQZtbdQZnvpnvpnvpے`Jے`J|ZdQ|ZdQf~`f~`f~ےbHAےbHAdrtAZ|dfH~vpfHJXQrpZHA|ZdQ|ZdQ|ZdQ`f~`f~ےbHAےbHAےbHAtbdQZtbdQZnvpnvpے`Jے`Jے`J|ZdQ|ZdQ`f~`f~`fHےbHAےbHAtbdQZtbdQZbnvvpfH˂pJXQrZdQbtlJtArf~`f~`f~ےbHAےbHAtbdQZ|drZHAbZHAb|ZdQb|ZdQbpvnHfpvrXQZp˂bQZ|rtAJlfH~fH~XQr˂XQr˂XQr˂btlbtlHfpvHfpvfpvZp˂Zp˂|dr|drpfHfH~fH~XQr˂XQr˂btlbtlbtlHfpvHfpvrXQJ``ےbJl|tbdQZ~fvXnvpfHXQr˂XQr˂rbtbtlbtlHfpvHfpvZp˂Zp˂Zp˂|dr|drfH~fH~fH~XQr˂XQr˂btlbtlHfpvHfpvHfpvZp˂Zp˂JltrtAJlf`vX~f`˂pZHbے`btlbtlbtlHfpvHfpvZp˂Zp˂Zdr|dr|drfH~fH~XQr˂XQr˂XQr˂btlbtlHfpvHfpvfpvZp˂Zp˂|dr|drp`vX~f`ZHAb˂pZHAlJtAd|ZHfpvHfpvHfpvZp˂Zp˂|drtAJlے`JXQے`JXQtlJtlJXv`fnXHJ`ےrXQJ`drtAJtbdQf`vXf`vXpZHAbpZHAbpZHAJtArdJtArdnXvnXvnrXQJrXQJ`rXQJ`tAJltAJlf`vXf`vXf`vXpZHAbpZHAbJtArdJtArdJtArdnXvnXvےrHAZp˂drtAJ|drnvp~f`pZHAbpZHAblJtAdJtArdJtArdnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJlf`vXf`vXfZHAbpZHAbpZHAbJtArdJtArdnXvnXvnXvrXQJ`rXQJ`bdQZ|tbdQnvppfH~Abے`JXQrJtArdJtArdJtArdnXvnXvrXQJ`rXQJ`tAJltAJltAJlf`vXf`vXpZHAbpZHAbpZHAJtArdJtArdnXvnXvnrXQJrXQJ`rXQJ`tAJltAJlnvpvXnے`JXQbے`rd|dQbt璀nXvnXvnXvrXQJ`rXQJ`tAJltbdQZr˂pr˂ptArdtArd~HffpvbHAZpےbHAltbZ|dnvpnvpے`Jے`Jے`JXQ|ZdQ|ZdQ`f~`f~`ےHAےbHAےbHAtbdQZtbdQZnvpnvpnvpے`Jے`J|ZdQ|ZdQf~`f~`f~XQJ`ےrXQJltbtAJlfH~ˍvXnے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~ےbHAےbHAےbHAtbdQZtbdQZnvpnvpے`Jے`Jے`J|ZdQ|ZdQ`f~`f~`fHےbHAےbHAdrtAtAJlfHXnf`vJQrpZAbے|ZdQ|ZdQf~`f~`f~ےbHAےbHAtbdQZtbdQZtbdQZnvpnvpے`Jے`Jے`JXQ|ZdQ|ZdQ`f~`f~`ےHAےbHAےbHAtbdQZtbdQZfH~vpfHr˂pJXQrZdQbtlJtAr`f~`f~`fHےbHAےbHAtbdQZ|drtAJltAJlf`vXf`vXfZHAbpZHAbpZHAbJtArdJtArdnXvnXvnXvrXQJ`rXQJ`tAJltAJlJltf`vXf`vXZHAb˂pZHAb㉀ۑppfH~pfH~p|dZ|dtbdQZtbdQZnvpnvpے`Jے`Jے`J|ZdQ|ZdQ`f~`f~`fHےbHAےbHAtbdQZtbdQZbnvnvpnvpے`JXQbے`JAHr󙐅f۝`vf۝`vrQtJlrQtJl|dr|drfH~fH~XQr˂XQr˂XQr˂btlbtlHfpvHfpvfpvZp˂Zp˂|dr|drpfHfH~fH~r˂pJXQrۑpJXnv˅Xnv˒tbAdtbAdtAJltAJlf`vXf`vXpZHAbpZHAbpZHAJtArdJtArdnXvnXvnrXQJrXQJ`rXQJ`tAJltAJlf`vXf`vXf`vXZHAb˂p`ZAHr󙐂ˍpfH~pfH~Z|dZ|dtbdQZtbdQZnvpnvpے`Jے`Jے`JXQ|ZdQ|ZdQ`f~`f~`ےHAےbHAےbHAtbdQZtbdQZnvpnvpnvpے`JXQQXb㉀ہ`ZQXbㅐf۝`vf۝`vrQtJlrQtJl|dr|dtAfH~fH~XQr˂XQr˂rbtbtlbtlHfpvHfpvZp˂Zp˂Zp˂|dr|drfH~fH~fH~HAbےpJAHr󉀒ۑpJXnv˅Xnv˒tbAdtbAdtAJlJltf`vXf`vXpZHAbpZHAblJtAdJtArdJtArdnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJlf`vXf`vXfr˂`JXQrˁ`ZAHr󙐂ˍpfH~pfH~Z|dZ|dtbdQZbnvnvpnvpے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~ےbHAےbHAےbHAtbdQZtbdQZnvpnvppZHAb˂pZQXb㉀ہ`pJAHf۝`vf۝`vrQtJlrQtJl|drpfHfH~fH~XQr˂XQr˂btlbtlbtlHfpvHfpvZp˂Zp˂Zdr|dr|drfH~fH~ے`JHAbےpJAHQXr󙐂ˁ`Xnv˅Xnv˒tbAdtbAdtAJlf`vXf`vXf`vXpZHAbpZHAbJtArdJtArdJtArdnXvnXvrXQJ`rXQJ`tAJltAJltAJlf`vXf`vXXQr˂`JXQrb㉀ۑpZQXb㉀pfH~pfH~Z|dZ|dtbdQZnvpnvpnvpے`Jے`J|ZdQ|ZdQf~`f~`f~ےbHAےbHAtbdQZtbdQZtbdQZnvpnvppZHAbے`JAHr󙐒ۑpJAHf۝`vf۝`vrQtJlrQtJl|drfH~fH~fH~XQr˂XQr˂btlbtlHfpvHfpvHfpvZp˂Zp˂|dr|dr|dtAfH~fH~ے`pJXQrˁ`ZQXr󙐂ˁ`Xnv˅Xnv˒tbAdtbAdZ|mnopqrsttsrqpon \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv25_2.dat b/vendor/endroid/qr-code/assets/data/qrv25_2.dat new file mode 100644 index 000000000..2de8eb367 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv25_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv25_3.dat b/vendor/endroid/qr-code/assets/data/qrv25_3.dat new file mode 100644 index 000000000..d8e70cb76 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv25_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv26_0.dat b/vendor/endroid/qr-code/assets/data/qrv26_0.dat new file mode 100644 index 000000000..7b0b0e69b --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv26_0.dat @@ -0,0 +1,241 @@ +xwxwxwxwxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopooonmnmnmnmlklklklklklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSSSSSSTTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:987878787656565656565656543434343212121210/0/0/0/xwxwxwxwxwxwxwxwvuvuvuvutstststsrqrqrqrqooopopopnmnmnmnmlklklklklklklklkjijijijihghghghgfefefefefedcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTTSTSTSSSRQRQRQRQPOPOPOPONMNMNMNMNMLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:987878787656565656543434343434343212121210/0/0/0/xwxwxwxwxwxwxwxwvuvuvuvutstststsrqrqrqrqopopopopnmnmnmnmlklklklklklklklkjijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTSSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:987878787656565654343434343434343212121210/0/0/0/xwxwxwxwxwxwxwxwvuvuvuvutstststsrqrqrqrqopopopopnmnmnmnmlklklklklkjijijijijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTTSRQRQRQRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:987878787656565654343434343434343212121210/0/0/0/xwxwxwxwxwxwxwxwvuvuvuvutstststsrqrqrqrqopopopopnmnmnmnmlklklklkjijijijijijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?>=>=>=>=>=>=>=<;<;<;<;:9:9:9:977777878656565654343434343434343212121210/0/0/0/xwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqopopopopnmnmnmnmlklklklkjijijijijijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:978787878656565654343434343434343212121210/0/0/0/xwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqopopopopnmnmnmnmlklklklkjijijijijijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]^]\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSSSSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEFEDCDCDCDCDCDCDCBABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:978787878656565654343434343434343212121210/0/0/0/xwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqooooooponmnmnmnmlklklklkjijijijijijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:978787878656565654343434343434343212121210/0/0/0/xwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijijijijijihghghghgfefefefedcdcdcdcdcbababababababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKLKJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:978787878656565654343434343212121212121210/0/0/0/xwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijijijijijihghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:978787878656565654343434321212121212121210/0/0/0/xwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopopopopoponmnmnmnmlklklklkjijijijijihghghghghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:978777777656565654343434321212121212121210/0/0/0/xwxwxwxwvuvuvuvutstststsrqrqrqrqooooopoppopopoponmnmnmnmlklklklkjijijijihghghghghghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?>=>=>=>=>=<;<;<;<;<;<;<;:9:9:9:987878787656565654343434321212121212121210/0/0/0/xwxwxwxwvuvuvuvutstststsrqrqrqrqopopopoppopopoponmnmnmnmlklklklkjijijijihghghghghghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;<;:9:9:9:9:9:9:987878787656565654343434321212121212121210/0/0/0/xwxwxwxwvuvuvuvutstststsrqrqrqrqopopopopmmmmmmnmnmnmnmnmlklklklkjijijijihghghghghghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[\[ZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUSSSSSTSTRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCDCBABABABABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:9:987878787878787656565654343434321212121212121210/0/0/0/xwxwxwxwvuvuvuvutstststsrqrqrqrqopopopopnmnmnmnmnmnmnmnmlklklklkjijijijihghghghghghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98777777887878787656565654343434321212121212121210/0/0/0/xwxwxwxwvuvuvuvutstststsrqrqrqrqopopopopnmnmnmnmnmnmnmnmlklklklkjijijijihghghghghghghghgfefefefedcdcdcdcbababababa`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIJIHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:97878787887878777656565654343434321212121210/0/0/0/0/0/0/xwxwxwxwvuvuvuvutstststsrqrqrqrqopopopopnmnmnmnmnmnmnmnmlklklklkjijijijihghghghghghghghgfefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:978787878778787876565656543434343212121210/0/0/0/0/0/0/0/xwxwxwxwvuvuvuvutstststsrqrqrqrqopoooooonmnmnmnmnmnmnmnmlklklklkjijijijihghghghghgfefefefefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTRQRQRQRQPOPOPOPOPONMNMNMNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:978787878876565656565656543434343212121210/0/0/0/0/0/0/0/xwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmnmnmnmnmlklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:978787878656565656565656543434343212121210/0/0/0/0/0/0/0/xwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmnmlklklklklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUSTSSSSSSRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:978787878656565656565656543434343212121210/0/0/0/0/0/0/0/.-.-.-.-xwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklklklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCBABABABABA@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:978787777656565656565656543434343212121210/0/0/0/0/0/0/0/.-.-.-.-xwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklklklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:977878787656565656565656543434343212121210/0/0/0/0/0/0/0/.-.-.-.-xwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklklklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_`_^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGHGFEFEFEFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:987878787656565656565656543434343212121210/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('('&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!           + + + + .-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!            + + + + .-.-.-.-.-,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!            + + + + .-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!            + + + + .-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!            + + + + .-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!            + + + + .-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!            + + + + .-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%$#$#$#$#$#$#$#"!"!"!"!         + + + + .-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!        + + + + .-.-.-.-,+,+,+,+,+*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!        + + + + .-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!        + + + + .-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!        + + + + .-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!        + + + + .-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!        + + + + .-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#"!"!"!"!"!"!"!        + + + + + + + .-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!        + + + + + + + + .-.-.-.-,+,+,+,+*)*)*)*)*)('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!        + + + + + + + + .-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!        + + + + + + + + .-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!        + + + + + + + + .-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!        + + + + + + + + .-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!        + + + + + + + + .-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!           + + + + + .-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + + xxwwvvuuQQRRSSTT55443322GGHHIIJJ??>>==<;,,--..//iihhggff + +PPQQRRSSEEDDCCBBttuuvvww!! <<==>>??YYXXWWVV``aabbcc55443322(())**++hhggffee uutsrqpo PPQQRRSSEEDDCCBBttuuvvww!! <<==>>??YYXXWWVV``aabbcc55443322(())**++mmllkkjjLLMMNNOO??>>==77556677==LLKKJJIIttuuvvww!! <<==>>??YYXXWWVVttssrrqqUUVVWWXX1100//..KKLLMMNN:987766500112233eeddccbb TTUUVVWWAA@@??>>xxxxwwvv@@AABBCCUUTTSSRR + + ddeeffgg1100//..,,--..//ddccbbaaonnmmllk + + TTUUVVWWAA@@??>>xxxxwwvv@@AABBCCUUTTSSRR + + ddeeffgg1100//..,,--..//iihhggff + +PPQQRRSS66554433>>??@@AAHHGGFFEExxxxwwvv@@AABBCCUUTTSSRRppoonnmmYYZZ[[\\--,,++**OOPPQQRR5443322144556677aa``__^^XXYYZZ[[==<<;;:: !!""##uuttssrrDDEEFFGGQQPPOONN hhiijjkk--,,++**00112233``__^^]]kjjiihhgXXYYZZ[[==<<;;:: !!""##uuttssrrDDEEFFGGQQPPOONN hhiijjkk--,,++**00112233eeddccbb TTUUVVWW221100//BBCCDDEEDDCCBBAA !!""##uuttssrrDDEEFFGGQQPPOONNllkkjjii ]]^^__``))((''&&SSYYZZ[[100//..-8899::;;]]\\[[ZZ\\]]^^__99887766$$%%&&''qqppoonnHHIIJJKKMMLLKKJJllmmnnoo))((''&&44556677\\[[ZZYYgffeeddc\\]]^^__99887766$$%%&&''qqppoonnHHIIJJKKMMLLKKJJllmmnnoo))((''&&44556677aa``__^^XXYYZZ[[..--,,++FFGGHHII@@??>>==$$%%&&''qqppoonnHHIIJJKKMMLLKKJJhhggffee + + aabbccdd%%$$##""\\]]^^__-,,++**)<<==>>??YYXXWWVV``aabbcc55443322(())**++mmllkkjjLLMMNNOOIIHHGGFFppqqrrss%%$$##""8899::;;SSRRQQPP!!""##$$cbbaa``_``aabbcc55443322(())**++mmllkkjjLLMMNNOOIIHHGGFFppqqrrss%%$$##""8899::;;]]\\[[ZZ\\]]^^__**))((''JJKKLLMM<;:98776(())**++mmllkkjjLLMMNNOOIIHHGGFFddccbbaa + + eeffgghh!!``aabbcc)((''&&%@@AABBCCUUTTSSRR + + ddeeffgg1100//..,,--..//iihhggff + +PPQQRRSSEEDDCCBBttuuvvww!! <<==>>??OONNMMLL%%&&''((_^^]]\\[ + + ddeeffgg1100//..,,--..//iihhggff + +PPQQRRSSEEDDCCBBttuuvvww!! <<==>>??YYXXWWVV``aabbcc&&%%$$##NNOOPPQQ65544332,,--..//iihhggff + +PPQQRRSSEEDDCCBB``__^^]] iijjkkllddeeffgg%$$##""!DDEEFFGGQQPPOONN hhiijjkk--,,++**00112233eeddccbb TTUUVVWWAA@@??>>xxxxwwvv@@AABBCCKKJJIIHH))**++,,[ZZYYXWV hhiijjkk--,,++**00112233eeddccbb TTUUVVWWAA@@??>>xxxxwwvv@@AABBCCUUTTSSRR + + ddeeffgg""!!RRSSYYZZ21100//.00112233eeddccbb TTUUVVWWAA@@??>>\\[[ZZYYmmnnoopphhiijjkk! HHIIJJKKMMLLKKJJllmmnnoo))((''&&44556677aa``__^^XXYYZZ[[==<<;;:: !!""##uuttssrrDDEEFFGGGGFFEEDD--..//00UTSSRRQQllmmnnoo))((''&&44556677aa``__^^XXYYZZ[[==<<;;:: !!""##uuttssrrDDEEFFGGQQPPOONN hhiijjkk[[\\]]^^.--,,++*44556677aa``__^^XXYYZZ[[==<<;;::XXWWVVUUqqrrsstt llmmnnooLLMMNNOOIIHHGGFFppqqrrss%%$$##""8899::;;]]\\[[ZZ\\]]^^__99887766$$%%&&''qqppoonnHHIIJJKKCCBBAA@@11223344PPOONNMMppqqrrss%%$$##""8899::;;]]\\[[ZZ\\]]^^__99887766$$%%&&''qqppoonnHHIIJJKKMMLLKKJJllmmnnoo__``aabb*))((''&8899::;;]]\\[[ZZ\\]]^^__99887766TTSSRRQQuuvvwwxx + + uuvvwwxxPPQQRRSSEEDDCCBBttuuvvww!! <<==>>??YYXXWWVV``aabbcc55443322(())**++mmllkkjjLLMMNNOO??>>==77556677==LLKKJJIIttuuvvww!! <<==>>??YYXXWWVV``aabbcc55443322(())**++mmllkkjjLLMMNNOOIIHHGGFFppqqrrssccddeeff&%%$$##"<<==>>??YYXXWWVV``aabbcc55443322PPOONNMM xxwwvvuu + + xxwwvvuuTTUUVVWWAA@@??>>xxxxwwvv@@AABBCCUUTTSSRR + + ddeeffgg1100//..,,--..//iihhggff + +PPQQRRSS66554433>>??@@AAHHGGFFEExxxxwwvv@@AABBCCUUTTSSRR + + ddeeffgg1100//..,,--..//iihhggff + +PPQQRRSSEEDDCCBBttuuvvww + +gghhiijj"!! @@AABBCCUUTTSSRR + + ddeeffgg1100//..LLKKJJII!!""##$$oonnmmll tsrqpoon XXYYZZ[[==<<;;:: !!""##uuttssrrDDEEFFGGQQPPOONN hhiijjkk--,,++**00112233eeddccbb TTUUVVWW221100//BBCCDDEEDDCCBBAA !!""##uuttssrrDDEEFFGGQQPPOONN hhiijjkk--,,++**00112233eeddccbb TTUUVVWWAA@@??>>xxxxwwvv kkllmmnnDDEEFFGGQQPPOONN hhiijjkk--,,++**HHGGFFEE%%&&''((kkjjiihhnmmllkkj + + \\]]^^__99887766$$%%&&''qqppoonnHHIIJJKKMMLLKKJJllmmnnoo))((''&&44556677aa``__^^XXYYZZ[[..--,,++FFGGHHII@@??>>==$$%%&&''qqppoonnHHIIJJKKMMLLKKJJllmmnnoo))((''&&44556677aa``__^^XXYYZZ[[==<<;;:: !!""##uuoonnmmoouuvvwwHHIIJJKKMMLLKKJJllmmnnoo))((''&&DDCCBBAA))**++,,ggffeeddjiihhggf``aabbcc55443322(())**++mmllkkjjLLMMNNOOIIHHGGFFppqqrrss%%$$##""8899::;;]]\\[[ZZ\\]]^^__**))((''JJKKLLMM<;:98776(())**++mmllkkjjLLMMNNOOIIHHGGFFppqqrrss%%$$##""8899::;;]]\\[[ZZ\\]]^^__99887766$$%%&&''llkkjjii + + xxxxwwvvLLMMNNOOIIHHGGFFppqqrrss%%$$##""@@??>>==--..//00ccbbaa``!!feeddccb + + ddeeffgg1100//..,,--..//iihhggff + +PPQQRRSSEEDDCCBBttuuvvww!! <<==>>??YYXXWWVV``aabbcc&&%%$$##NNOOPPQQ65544332,,--..//iihhggff + +PPQQRRSSEEDDCCBBttuuvvww!! <<==>>??YYXXWWVV``aabbcc55443322(())**++hhggffee uutsrqpo PPQQRRSSEEDDCCBBttuuvvww!! <<;;::9911223344__^^]]\\""##$$%%baa``__^ hhiijjkk--,,++**00112233eeddccbb TTUUVVWWAA@@??>>xxxxwwvv@@AABBCCUUTTSSRR + + ddeeffgg""!!RRSSYYZZ21100//.00112233eeddccbb TTUUVVWWAA@@??>>xxxxwwvv@@AABBCCUUTTSSRR + + ddeeffgg1100//..,,--..//ddccbbaaonnmmllk + + TTUUVVWWAA@@??>>xxxxwwvv8877665555667788[[ZZYYSS&&''(())^]]\\[[Zllmmnnoo))((''&&44556677aa``__^^XXYYZZ[[==<<;;:: !!""##uuttssrrDDEEFFGGQQPPOONN hhiijjkk[[\\]]^^.--,,++*44556677aa``__^^XXYYZZ[[==<<;;:: !!""##uuttssrrDDEEFFGGQQPPOONN hhiijjkk--,,++**00112233``__^^]]kjjiihhgXXYYZZ[[==<<;;:: !!""##uuttssrr4433221199::;;<>??@@NNMMLLKK..//0011SSRRQQPPttuuvvww!! <<==>>??YYXXWWVV``aabbcc55443322(())**++mmllkkjjLLMMNNOOIIHHGGFFppqqrrssccddeeff&%%$$##"<<==>>??YYXXWWVV``aabbcc55443322(())**++mmllkkjjLLMMNNOOIIHHGGFFppqqrrss%%$$##""8899::;;SSRRQQPP!!""##$$cbbaa``_``aabbcc55443322(())**++mmllkkjj,,++**))AABBCCDDJJIIHHGG22334455OONNMMLLxxxxwwvv@@AABBCCUUTTSSRR + + ddeeffgg1100//..,,--..//iihhggff + +PPQQRRSSEEDDCCBBttuuvvww + +gghhiijj"!! @@AABBCCUUTTSSRR + + ddeeffgg1100//..,,--..//iihhggff + +PPQQRRSSEEDDCCBBttuuvvww!! <<==>>??OONNMMLL%%&&''((_^^]]\\[ + + ddeeffgg1100//..,,--..//iihhggff + +((''&&%%EEFFGGHHFFEEDDCC6677==>>KKJJIIHH !!""##uuttssrrDDEEFFGGQQPPOONN hhiijjkk--,,++**00112233eeddccbb TTUUVVWWAA@@??>>xxxxwwvv kkllmmnnDDEEFFGGQQPPOONN hhiijjkk--,,++**00112233eeddccbb TTUUVVWWAA@@??>>xxxxwwvv@@AABBCCKKJJIIHH))**++,,[ZZYYXWV hhiijjkk--,,++**00112233eeddccbb  + + $$##""!!IIJJKKLLBBAA@@????@@AABBGGFFEEDD$$%%&&''qqppoonnHHIIJJKKMMLLKKJJllmmnnoo))((''&&44556677aa``__^^XXYYZZ[[==<<;;:: !!""##uuoonnmmoouuvvwwHHIIJJKKMMLLKKJJllmmnnoo))((''&&44556677aa``__^^XXYYZZ[[==<<;;:: !!""##uuttssrrDDEEFFGGGGFFEEDD--..//00UTSSRRQQllmmnnoo))((''&&44556677aa``__^^  MMNNOOPP>>==7766CCDDEEFFCCBBAA@@(())**++mmllkkjjLLMMNNOOIIHHGGFFppqqrrss%%$$##""8899::;;]]\\[[ZZ\\]]^^__99887766$$%%&&''llkkjjii + + xxxxwwvvLLMMNNOOIIHHGGFFppqqrrss%%$$##""8899::;;]]\\[[ZZ\\]]^^__99887766$$%%&&''qqppoonnHHIIJJKKCCBBAA@@11223344PPOONNMMppqqrrss%%$$##""8899::;;]]\\[[ZZppqqrrss%%$$##""8899::;;]]\\[[ZZ\\]]^^__99887766$$%%&&''llkkjjii + + xxxxwwvvLLMMNNOOIIHHGGFFppqqrrss%%$$##""8899::;;]]\\[[ZZ\\]]^^__99887766$$%%&&''iihhggff]]\\[[ZZttuuvvww!! <<==>>??YYXXWWVV``aabbcc55443322(())**++hhggffee uutsrqpo PPQQRRSSEEDDCCBBttuuvvww!! <<==>>??YYXXWWVV``aabbcc55443322(())**++eeddccbbYYXXWWVVxxxxwwvv@@AABBCCUUTTSSRR + + ddeeffgg1100//..,,--..//ddccbbaaonnmmllk + + TTUUVVWWAA@@??>>xxxxwwvv@@AABBCCUUTTSSRR + + ddeeffgg1100//..,,--..//aa``__^^!!""##UUTTSSRR !!""##uuttssrrDDEEFFGGQQPPOONN hhiijjkk--,,++**00112233``__^^]]kjjiihhgXXYYZZ[[==<<;;:: !!""##uuttssrrDDEEFFGGQQPPOONN hhiijjkk--,,++**00112233]]\\[[ZZ$$%%&&''QQPPOONN$$%%&&''qqppoonnHHIIJJKKMMLLKKJJllmmnnoo))((''&&44556677\\[[ZZYYgffeeddc\\]]^^__99887766$$%%&&''qqppoonnHHIIJJKKMMLLKKJJllmmnnoo))((''&&44556677YYSSRRQQ(())**++MMLLKKJJ !!""##(())**++mmllkkjjLLMMNNOOIIHHGGFFppqqrrss%%$$##""8899::;;SSRRQQPP!!""##$$cbbaa``_``aabbcc55443322(())**++mmllkkjjLLMMNNOOIIHHGGFFppqqrrss%%$$##""8899::;;PPOONNMM,,--..//IIHHGGFF$$%%&&'',,--..//iihhggff + +PPQQRRSSEEDDCCBBttuuvvww!! <<==>>??OONNMMLL%%&&''((_^^]]\\[ + + ddeeffgg1100//..,,--..//iihhggff + +PPQQRRSSEEDDCCBBttuuvvww!! <<==>>??LLKKJJII00112233EEDDCCBB(())**++00112233eeddccbb TTUUVVWWAA@@??>>xxxxwwvv@@AABBCCKKJJIIHH))**++,,[ZZYYXWV hhiijjkk--,,++**00112233eeddccbb TTUUVVWWAA@@??>>xxxxwwvv@@AABBCCHHGGFFEE44556677AA@@??>>,,--..//44556677aa``__^^XXYYZZ[[==<<;;:: !!""##uuttssrrDDEEFFGGGGFFEEDD--..//00UTSSRRQQllmmnnoo))((''&&44556677aa``__^^XXYYZZ[[==<<;;:: !!""##uuttssrrDDEEFFGGDDCCBBAA==>>??@@==<<;;::001122338899::;;]]\\[[ZZ\\]]^^__99887766$$%%&&''qqppoonnHHIIJJKKCCBBAA@@11223344PPOONNMMppqqrrss%%$$##""8899::;;]]\\[[ZZ\\]]^^__99887766$$%%&&''qqppoonnHHIIJJKK@@??>>==AABBCCDD9988776644556677<<==>>??YYXXWWVV``aabbcc55443322(())**++mmllkkjjLLMMNNOO??>>==77556677==LLKKJJIIttuuvvww!! <<==>>??YYXXWWVV``aabbcc55443322(())**++mmllkkjjLLMMNNOO77665544EEFFGGHH554433228899::;;@@AABBCCUUTTSSRR + + ddeeffgg1100//..,,--..//iihhggff + +PPQQRRSS66554433>>??@@AAHHGGFFEExxxxwwvv@@AABBCCUUTTSSRR + + ddeeffgg1100//..,,--..//iihhggff + +PPQQRRSS33221100IIJJKKLL1100//..<<==>>??DDEEFFGGQQPPOONN hhiijjkk--,,++**00112233eeddccbb TTUUVVWW221100//BBCCDDEEDDCCBBAA !!""##uuttssrrDDEEFFGGQQPPOONN hhiijjkk--,,++**00112233eeddccbb TTUUVVWW//..--,,MMNNOOPP--,,++**@@AABBCCHHIIJJKKMMLLKKJJllmmnnoo))((''&&44556677aa``__^^XXYYZZ[[..--,,++FFGGHHII@@??>>==$$%%&&''qqppoonnHHIIJJKKMMLLKKJJllmmnnoo))((''&&44556677aa``__^^XXYYZZ[[++**))((QQRRSSYY))((''&&DDEEFFGGLLMMNNOOIIHHGGFFppqqrrss%%$$##""8899::;;]]\\[[ZZ\\]]^^__**))((''JJKKLLMM<;:98776(())**++mmllkkjjLLMMNNOOIIHHGGFFppqqrrss%%$$##""8899::;;]]\\[[ZZ\\]]^^__''&&%%$$ZZ[[\\]]%%$$##""HHIIJJKKPPQQRRSSEEDDCCBBttuuvvww!! <<==>>??YYXXWWVV``aabbcc&&%%$$##NNOOPPQQ65544332,,--..//iihhggff + +PPQQRRSSEEDDCCBBttuuvvww!! <<==>>??YYXXWWVV``aabbcc##""!!^^__``aa!! LLMMNNOOTTUUVVWWAA@@??>>xxxxwwvv@@AABBCCUUTTSSRR + + ddeeffgg""!!RRSSYYZZ21100//.00112233eeddccbb TTUUVVWWAA@@??>>xxxxwwvv@@AABBCCUUTTSSRR + + ddeeffggbbccddeePPQQRRSSXXYYZZ[[==<<;;:: !!""##uuttssrrDDEEFFGGQQPPOONN hhiijjkk[[\\]]^^.--,,++*44556677aa``__^^XXYYZZ[[==<<;;:: !!""##uuttssrrDDEEFFGGQQPPOONN hhiijjkkffgghhiiTTUUVVWW\\]]^^__99887766$$%%&&''qqppoonnHHIIJJKKMMLLKKJJllmmnnoo__``aabb*))((''&8899::;;]]\\[[ZZ\\]]^^__99887766$$%%&&''qqppoonnHHIIJJKKMMLLKKJJllmmnnoojjkkllmmXXYYZZ[[``aabbcc55443322(())**++mmllkkjjLLMMNNOOIIHHGGFFppqqrrssccddeeff&%%$$##"<<==>>??YYXXWWVV``aabbcc55443322(())**++mmllkkjjLLMMNNOOIIHHGGFFppqqrrss mmllkkjj\\]]^^__ddeeffgg1100//..,,--..//iihhggff + +PPQQRRSSEEDDCCBBttuuvvww + +gghhiijj"!! @@AABBCCUUTTSSRR + + ddeeffgg1100//..,,--..//iihhggff + +PPQQRRSSEEDDCCBBttuuvvww + + + +iihhggff + +``aabbcchhiijjkk--,,++**00112233eeddccbb TTUUVVWWAA@@??>>xxxxwwvv kkllmmnnDDEEFFGGQQPPOONN hhiijjkk--,,++**00112233eeddccbb TTUUVVWWAA@@??>>xxppoonn eeddccbb + + ddeeffggllmmnnoo))((''&&44556677aa``__^^XXYYZZ[[==<<;;:: !!""##uuoonnmmoouuvvwwHHIIJJKKMMLLKKJJllmmnnoo))((''&&44556677aa``__^^XXYYZZ[[==<<;;:: !!""##mmllkkjjaa``__^^ hhiijjkkllmmbdQZ|Jlt`vXnے`JdQbtpvnZp˂|drtbdQZf`vXpZHAbbtl|ZdQ`f~rXQJ`tAJlpfHnvpے`JJtArdf~HrXQJ`|rAJlltbf`vXpZHAbbtl|ZdQ`f~rXQJ`tAJlpfHnvpے`JJtArdnXvHfpvےbHAltdH~ے`JXQbtl|ZdQ`f~rXQJ`tAJldrtAbdQZ|vpfXQr˂lJtArvf~HrXQJ`tAJl|dtAnvpے`JJtArdbnXvHfpvےbHAtbdQZf`vXfH~XQr˂|ZdQfpvےbHAtbddQZ|nvpے`JJtArdbnXvHfpvےbHAtbdQZf`vXfH~XQr˂|ZdQ`f~nXvZp˂rtAJlvpfHr˂pJtArdbnXvHfpvےbHAtbdQZJltdrtAH~fpZHAbd|ZfpvےbHAtbdQZJltfH~XQr˂|ZdQ`f~nXvZp˂|drnvpf`vXpZHAbbtlnXv`Zp˂QZ|dAJltfH~XQr˂|ZdQ`f~nXvZp˂|drnvpf`vXpZHAbbtlHfpv`fHrXQJ`tbdQ~f`ZHAb|ZdQ`f~nXvZp˂|drbdQZ|Jlt`vXnے`JdQtArdnXv`Zp˂|drbnvf`vXpZHAbbtlHfpv`f~rXQJ`tAJlfH~nvpے`JJtArdf~HrXQJ`rtAJlbnvf`vXpZHAbbtlHfpv`f~rXQJ`tAJlfH~nvpے`JJtArdnXvfpvےbHAZ|dvXnے`JXQbtlHfpv`f~rXQJ`tAJldrtAbdQZ|vpfXQr˂|ZdQf~HrXQJ`tAJlpfHnvpے`JJtArdnXvHfpvےbHAtbdQZf`vXfH~XQr˂|ZdQXv`fp˂rtbdpfHnvpے`JJtArdnXvHfpvےbHAtbdQZf`vXfH~XQr˂|ZdQ`f~nrXQJZp˂rtAJlvpfHrZHAJtArdnXvHfpvےbHAtbdQZJlt`vXnH~fp`JXQbtlfpvےbHAtbdQZf`vXfH~XQr˂|ZdQ`f~nXvZp˂|drnvpf`vXpZHAbbtl~HfXQJ`ےQZ|df`vXfH~XQr˂|ZdQ`f~nXvZp˂|drnvpf`vXpZHAbbtlHfpv`ےHArXQJ`tbdQ~f`bے`|ZdQ`f~nXvZp˂|drbdQZ|vpf`vXnr˂pJtArdnXv`Zp˂|drnvpf`vXpZHAbbtlHfpv`fHrXQJ`tAJlfH~nr˂ے`JJtArdpvnbHAZrtAJnvpf`vXpZHAbbtlHfpv`fHrXQJ`tAJlfH~nr˂ے`JJtArdnXvZp˂ےbHAZ|lvXH~JXQrbtlHfpv`fHrXQJ`tAJldrtAH~fvpfZHAb|ZdQf~fprXQJ`tAJlfH~nvpے`JJtArdnXvfpvےbHAtbdQZf`vXpZHAbXQr˂|ZdQXv`fp˂rbdQZ|fH~nvpے`JJtArdnXvfpvےbHAtbdQZf`vXpZHAbXQr˂|ZdQ`f~rXQJ`Zp˂tbdQZf`vpZHAJtArdnXvfpvےbHAtbdQZJlt`vXnH~fے`JXQbtlvnXےbHAtbdQZf`vXfH~XQr˂|ZdQ`f~nrXQJZp˂|drnvpے`JpZHAbbtl~HfXQJ`ےdrtAf`vXfH~XQr˂|ZdQ`f~nrXQJZp˂|drnvpے`JpZHAbbtlHfpvےbHArXQJ`|drXnvbے`|ZdQ`f~nrXQJZp˂|drbdQZ|vpf`vXnr˂p|ZdQbv`fZp˂|drnvpf`vXpZHAbbtlHfpv`ےHArXQJ`tAJlfH~XQr˂ے`JJtArdpvbHAXQJltnvpf`vXpZHAbbtlHfpv`ےHArXQJ`tAJlfH~XQr˂ے`JJtArdnXvZp˂ےbHAtAJlpfH~JXQrbtlHfpv`ےHArXQJ`tAJldrtAH~fr˂p|ZdQbnXv`~HfprXQJ`tAJlfH~nr˂ے`JJtArdnXvZp˂ےbHAtbdQZf`vXpZHAbXQr˂|ZdQ~HfpJ`ےbdQZ|fH~nr˂ے`JJtArdnXvZp˂ےbHAtbdQZf`vXpZHAbXQr˂|ZdQ`f~rXQJ`Zp˂tbdQZf`vpZAbJtArdnXvZp˂ےbHAtbdQZJlt`vXn`JXQrtlJf~fpvnXےbHAtbdQZf`vXpZHAbXQr˂|ZdQ`f~rXQJ`Zp˂|drnvpے`JpZHAbtlvnXbHAZpdrtAf`vXpZHAbXQr˂|ZdQ`f~rXQJ`Zp˂|drnvpے`JpZHAbtlHfpvےbHArbdQZ|ltXnv`JXQr|ZdQ`f~rXQJ`Zp˂|drbdQZ|vpf˂pZtArdvnXv`fZp˂|drnvpے`JpZHAbbtlHfpvےbHArXQJ`tAJlfH~XQr˂ے`JXQJtArdv`f˂rXQJltnvpے`JpZHAbbtlHfpvےbHArXQJ`tAJlfH~XQr˂ے`JXQJtArdnXvZp˂|ltbnvp`vX˂pZbtlHfpvےbHArXQJ`tAJldrtAH~fHAbے|ZdQbv`frQJHArXQJ`tAJlfH~XQr˂ے`JJtArdnXvZp˂ےbHAtbdQZf`vXpZHAbrbt|ZdQ~HfpJ`ےbQZdfH~XQr˂ے`JJtArdnXvZp˂ےbHAtbdQZf`vXpZHAbrbt|ZdQ`f~rXQJ`bdQZ|p`vXnr˂HAbےJtArdnXvZp˂ےbHAtbdQZJlt`vXn`JXQrtl|~HfpZp˂ےbHAtbdQZf`vXpZHAbXQr˂|ZdQ`f~rXQJ`Zp˂|drnvpے`JlJtAdbtlvnXbHAZprtAJlf`vXpZHAbXQr˂|ZdQ`f~rXQJ`Zp˂|drnvpے`JlJtAdbtlHfpvےbHAdrtAnvppZAb``JXQr|ZdQ`f~rXQJ`Zp˂|drbdQZ|vpf˂pZZdQbtvnXrXQJ`Zp˂|drnvpے`JpZHAbtlHfpvےbHArbdQZtAJlfH~XQr˂|ZdQJtArdv`pv˂btbdQnvpے`JpZHAbtlHfpvےbHArbdQZtAJlfH~XQr˂|ZdQJtArdnXvZp˂JltfH~JXQr˂pZAbtlHfpvےbHArbdQZtAJldrtAH~fHAblJtAv`fےbHArXQJ`tAJlfH~XQr˂ے`JXQJtArdnXvZp˂|drtbdQZf`vXpZHAbbtl|ZdQnXvHAZp˂Z|dfH~XQr˂ے`JXQJtArdnXvZp˂|drtbdQZf`vXpZHAbbtl|ZdQ`f~rXQJ`bdQZ|f`vX˂pZH`JXQJtArdnXvZp˂|drtbdQZJlt`vXn˂pZHArd|~HfvnZp˂ےbHAtbdQZf`vXpZHAbrbt|ZdQ`f~rXQJ`tAJl|drnvpے`JJtArdbtl`f~rXQJrtAJlf`vXpZHAbrbt|ZdQ`f~rXQJ`tAJl|drnvpے`JJtArdbtlHfpvےbHAdrtAnvpAbے`rbt|ZdQ`f~rXQJ`tAJl|drbdQZ|vpfbے`ZdQbtXv`frXQJ`Zp˂|drnvpے`JlJtAdbtlHfpvےbHAtbdQZtAJlfH~XQr˂|ZdQJtArdHfpv`ےbtbdQnvpے`JlJtAdbtlHfpvےbHAtbdQZtAJlfH~XQr˂|ZdQJtArdnXvZp˂dQZ|`vXnJXQrlJtAdbtlHfpvےbHAtbdQZtAJldrtAH~fJXQrlJtA~HfےbHArbdQZtAJlfH~XQr˂|ZdQJtArdnXvZp˂|drtbdQZf`vXpZHAbbtl|ZdQnXvHAZp˂Z|rAJfH~XQr˂|ZdQJtArdnXvZp˂|drtbdQZf`vXpZHAbbtl|ZdQ`f~rXQJ`drtAJvpf˂pZH|ZdQJtArdnXvZp˂|drtbdQZpfHJlt`vXn˂pZHArdtpvnZp˂|drtbdQZf`vXpZHAbbtl|ZdQ`f~rXQJ`tAJl|dtAnvpے`JJtArdbnXv`pvrXQJltbf`vXpZHAbbtl|ZdQ`f~rXQJ`tAJl|dtAnvpے`JJtArdbnXvHfpvےbHAltbH~fAbJbtl|ZdQ`f~rXQJ`tAJl|dtAf`vXbdQZ|vpfbے`lJtArXv`frXQJ`tAJl|drnvpے`JJtArdbtlHfpvےbHAtbdQZJltfH~XQr˂|ZdQ`pvnrXQJ`p˂dQZ|nvpے`JJtArdbtlHfpvےbHAtbdQZJltfH~XQr˂|ZdQ`f~nXvZp˂dQZ|`vXnQr˂pJtArdbtlHfpvےbHAtbdQZJltnvpdrtAH~fJXQHAbd|Z~HfےbHAtbdQZtAJlfH~XQr˂|ZdQJtArdnXvZp˂|drbnvf`vXpZHAbbtlnXv``p˂rbdQZdrtAJfH~XQr˂|ZdQJtArdnXvZp˂|drbnvf`vXpZHAbbtlHfpv`f~rXQJ`drtAJvpfZHAb|ZdQJtArdnXvZp˂|drbnvfH~f`vXfH~XQr˂|ZdQ`f~nrXQJZp˂|drnvpr˂pl|ZdQbnXv~HfےbHAtbdQZf`vXfH~XQr˂|ZdQ`f~nrXQJZp˂|drnvppZHAbˁ`ZpfH~tbAdnvpf`vXpZHAbbtlHfpv`ےHArXQJ`tAJlfH~ZHAbbtl`f~fppvnZp˂|drnvpf`vXpZHAbbtlHfpv`ےHArXQJ`tAJlfH~ے`JQXb㉀ۅf۝`vZ|dfH~nr˂ے`JJtArdnXvZp˂ےbHAtbdQZf`vXے`JXQJtArdvnXXv`frXQJ`tAJlfH~nr˂ے`JJtArdnXvZp˂ےbHAtbdQZf`vXXQr˂p`ZQXXnvrQtJlf`vXpZHAbXQr˂|ZdQ`f~rXQJ`Zp˂|drnvpr˂p|ZdQv`ffpvےbHAtbdQZf`vXpZHAbXQr˂|ZdQ`f~rXQJ`Zp˂|drnvppZHAbb㉀ۑppfH~tbAdnvpے`JpZHAbbtlHfpvےbHArXQJ`tAJlfH~ZHAbbtl~HfpnrXQJZp˂|drnvpے`JpZHAbbtlHfpvےbHArXQJ`tAJlfH~˂pJAHr󙐅f۝`vZ|dfH~XQr˂ے`JJtArdnXvZp˂ےbHAtbdQZf`vX˂pZ|ZdQbvnX`ےHArXQJ`tAJlfH~XQr˂ے`JJtArdnXvZp˂ےbHAtbdQZf`vXZHAbˁ`ZQXXnvrQtJlf`vXpZHAbXQr˂|ZdQ`f~rXQJ`Zp˂|drnvpHAbےtlJv`fZp˂ےbHAtbdQZf`vXpZHAbXQr˂|ZdQ`f~rXQJ`Zp˂|drnvpے`JXQb㉀ۑppfH~tbAdnvpے`JpZHAbtlHfpvےbHArbdQZtAJlfH~`JXQrtArd~HfvrXQJ`Zp˂|drnvpے`JpZHAbtlHfpvےbHArbdQZtAJlfH~r˂pJAHr󙐅f۝`vZ|dfH~XQr˂ے`JXQJtArdnXvZp˂|drtbdQZf`vX˂pZ|ZdQbnXv`ےbHArXQJ`tAJlfH~XQr˂ے`JXQJtArdnXvZp˂|drtbdQZf`vXZHAbۑpJXnvrQtJlf`vXpZHAbrbt|ZdQ`f~rXQJ`tAJl|drnvpHAbےtlJf~HZp˂ےbHAtbdQZf`vXpZHAbrbt|ZdQ`f~rXQJ`tAJl|drnvpے`JXQAHr󙐂ˍpfH~tbAdnvpے`JlJtAdbtlHfpvےbHAtbdQZtAJlfH~`JXQHAtArdtfpvrXQJ`Zp˂|drnvpے`JlJtAdbtlHfpvےbHAtbdQZtAJlfH~HAbے`ZQXbㅐf۝`vZ|dfH~XQr˂|ZdQJtArdnXvZp˂|drtbdQZf`vXbے`lJtAnXv`ےbHArbdQZtAJlfH~XQr˂|ZdQJtArdnXvZp˂|drtbdQZf`vX`JXQrۑpJXnvrQtJlf`vXpZHAbbtl|ZdQ`f~rXQJ`tAJl|dtAnvpJXQrrd|f~HZp˂|drtbdQZf`vXpZHAbbtl|ZdQ`f~rXQJ`tAJl|dtAnvp˂pZAHr󙐂ˍpfH~tbAdnvpے`JJtArdbtlHfpvےbHAtbdQZJltfH~˂pZHAZdQbtfpvrXQJ`tAJl|drnvpے`JJtArdbtlHfpvےbHAtbdQZJltfH~HAbے`ZQXAHf۝`vZ|dfH~XQr˂|ZdQJtArdnXvZp˂|drbnvf`vXbے`lJtAnvfےbHAtbdQZtAJlfH~XQr˂|ZdQJtArdnXvZp˂|drbnvf`vX`JXQrr󙐂ˁ`XnvrQtJlf`vXpZHAbbtl|ZdQ`f~rXQJ`tAJlpfHnvpJXQrrd|~HfpZp˂|drtbdQZf`vXpZHAbbtl|ZdQ`f~rXQJ`tAJlpfHnvp˂p`ZQXb㉀pfH~tbAdnvpے`JJtArdbnXvHfpvےbHAtbdQZf`vXfH~˂p`JZdQtArvnXrXQJ`tAJl|dtAnvpے`JJtArdbnXvHfpvےbHAtbdQZf`vXfH~JXQrۑpJAHf۝`vZ|dfH~XQr˂|ZdQ`f~nXvZp˂|drnvpf`vXXQr˂d|Zv`fےbHAtbdQZJltfH~XQr˂|ZdQ`f~nXvZp˂|drnvpf`vX˂pZHAr󙐂ˁ`XnvrQtJlf`vXpZHAbbtlHfpv`f~rXQJ`tAJlfH~nvppZHAbdQbt~HfpZp˂|drbnvf`vXpZHAbbtlHfpv`f~rXQJ`tAJlfH~nvpbے`ZQXb㉀pfH~tbAdnvpے`JJtArdnXvHfpvےbHAtbdQZf`vXfH~ے`JlJtArvnXrXQJ`tAJlpfHnvpے`JJtArdnXvHfpvےbHAtbdQZf`vXfH~JXQrXnv˅f۝`vZ|dfH~XQr˂|ZdQ`f~nXvZp˂|drnvpf`vXXQr˂d|Zv`f~fےbHAtbdQZf`vXfH~XQr˂|ZdQ`f~nXvZp˂|drnvpf`vX˂p`ZpfH~XnvrQtJlf`vXpZHAbbtlHfpv`fHrXQJ`tAJlfH~nr˂p`JXQdQbtpvnZp˂|drnvpf`vXpZHAbbtlHfpv`fHrXQJ`tAJlfH~nے`JQXb㉀ۅf۝`vp|dtbAdnvpے`JJtArdnXvfpvےbHAtbdQZf`vXp`JXQrbtl|ZdQXv`frXQJ`tAJlfH~nvpے`JJtArdnXvfpvےbHAtbdQZf`vXXQr˂pJAHrXnvrQtJlZ|drQtqrstuvwxxwvutsrJJJJJJJJJJJJJJJJJJJKKKK \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv26_1.dat b/vendor/endroid/qr-code/assets/data/qrv26_1.dat new file mode 100644 index 000000000..b8939ddc1 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv26_1.dat @@ -0,0 +1,241 @@ +xwxwxwxwxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqopopopopopopopopnmnmnmnmnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijijijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9787878787777787877878787656565656565656543434343434343434343434321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        xwxwxwxwxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqopooooooopopopopnmnmnmnmnmnmnmnmnmlklklklklklklklklklklkjijijijijijijijijihghghghghghghghghghghgfefefefefefefefefedcdcdcdcdcdcdcdcdcdcdcbababababababababa`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9787878787878787887656565656565656565656543434343434343434321212121212121212121210/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!        xwxwxwxwxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopoooooooponmnmnmnmnmnmnmnmlklklklklklklklklklklklkjijijijijijijijihghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSSSSSSTTSTSTSTSTSTSTSSSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9787878787878787865656565656565656565656543434343434343432121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!        xwxwxwxwxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklklklklklkjijijijijijijijihghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUSTSTSTSTSSSSSTSTSSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9787878787878787865656565656565656565656543434343434343432121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!        xwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklklklklklkjijijijijijijijihghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUSTSTSTSTSTSTSTSTTSRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCBABABABABABABABABABABA@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9787878787878787865656565656565656565656543434343434343432121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!        xwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklklklklklkjijijijijijijijihghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUSTSTSTSTSTSTSTSTRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9787877777878787865656565656565656565656543434343434343432121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!        xwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvuvuvuvuvutstststststststsrqrqrqrqpopopopopopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklklklklklkjijijijijijijijihghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUSTSTSTSTSTSTSTSTRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9778787877877777765656565656565656565656543434343434343432121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!        xwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvuvuvuvuvutstststsrqrqrqrqrqrqrqrqooooopoppopopooopopopoponmnmnmnmnmnmnmnmlklklklklklklklklkjijijijijijijijijijijihghghghghghghghghgfefefefefefefefefefefedcdcdcdcdcdcdcdcdcbababababababababababa`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUSTSTSTSTSTSTSTSTRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565656565656543434343434343434343432121212121212121210/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)('('('('('('('('('('('&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!        xwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqopopopopooopopopmmmmmmnmnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijijijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUSTSTSSSSSTSTSTSTRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878787878787656565656565656543434343434343434343434321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        xwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqopopopopopopopopnmnmnmnmnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijijijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUSSTSTSTSSTSSSSSSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878787878787656565656565656543434343434343434343434321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        xwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqopopopopopopopopnmnmnmnmnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijijijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878787878787878787656565656565656543434343434343434343434321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        xwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqopopopopopopopopnmnmnmnmnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijijijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9877777788787878787878777656565656565656543434343434343434343434321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!                    + + + + + + + + + + + +             + + + + + + + + + + + +          + + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + +            + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + + xxwwvvuuHHGGFFEE))**++,,YYZZ[[\\ccbbaa``))((''&&""##$$%%\\]]^^__^]]\\[[Z)((''&&%DDEEFFGGttuuvvwwMMLLKKJJDDEEFFGGttuuvvwwMMLLKKJJDDEEFFGGttuuvvwwMMLLKKJJDDEEFFGGttuuvvwwMMLLKKJJDDEEFFGGttuuvvwwMMLLKKJJDDEEFFGGttuuvvwwCCBBAA@@ 556677==oouuvvwwHHGGFFEE !!""##PPQQRRSSqqppoonnAA@@??>> !!""##PPQQRRSSqqppoonnAA@@??>> !!""##PPQQRRSSqqppoonnAA@@??>> !!""##PPQQRRSSqqppoonnAA@@??>> !!""##PPQQRRSSqqppoonnAA@@??>> !!""##PPQQRRSSllkkjjii221100// FFGGHHIIonnmmllk<;:98776,,--..//\\]]^^__eeddccbb55443322,,--..//\\]]^^__eeddccbb55443322,,--..//\\]]^^__eeddccbb55443322,,--..//\\]]^^__eeddccbb55443322,,--..//\\]]^^__eeddccbb55443322,,--..//\\]]^^__``__^^]]&&%%$$##RRSSYYZZcbbaa``_.--,,++* + + 8899::;;ttssrrqqDDCCBBAA--..//00]]^^__``__^^]]\\%%$$##""&&''(())``aabbccZYYXWVUT%$$##""!HHIIJJKKxxxxwwvvIIHHGGFFHHIIJJKKxxxxwwvvIIHHGGFFHHIIJJKKxxxxwwvvIIHHGGFFHHIIJJKKxxxxwwvvIIHHGGFFHHIIJJKKxxxxwwvvIIHHGGFFHHIIJJKKxxxxwwvv??>>==77>>??@@AAxxxxwwvvDDCCBBAA $$%%&&''TTUUVVWWmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWhhggffee..--,,++JJKKLLMMkjjiihhg6554433200112233``aabbccaa``__^^1100//..00112233``aabbccaa``__^^1100//..00112233``aabbccaa``__^^1100//..00112233``aabbccaa``__^^1100//..00112233``aabbccaa``__^^1100//..00112233``aabbcc\\[[ZZYY""!!!!""##$$[[\\]]^^_^^]]\\[*))((''& <<==>>??ppoonnmm@@??>>== 11223344aabbccdd[[ZZYYSS!!**++,,--ddeeffggSSRRQQPP! LLMMNNOOuuttssrrEEDDCCBBLLMMNNOOuuttssrrEEDDCCBBLLMMNNOOuuttssrrEEDDCCBBLLMMNNOOuuttssrrEEDDCCBBLLMMNNOOuuttssrrEEDDCCBBLLMMNNOOuuoonnmm66554433 + + BBCCDDEEuutsrqpo@@??>>== + + (())**++XXYYZZ[[iihhggff99887766 (())**++XXYYZZ[[iihhggff99887766 (())**++XXYYZZ[[iihhggff99887766 (())**++XXYYZZ[[iihhggff99887766 (())**++XXYYZZ[[iihhggff99887766 (())**++XXYYZZ[[ddccbbaa**))((''NNOOPPQQgffeeddc21100//.44556677ddeeffgg]]\\[[ZZ--,,++**44556677ddeeffgg]]\\[[ZZ--,,++**44556677ddeeffgg]]\\[[ZZ--,,++**44556677ddeeffgg]]\\[[ZZ--,,++**44556677ddeeffgg]]\\[[ZZ--,,++**44556677ddeeffggSSRRQQPP%%&&''((__``aabb[ZZYYXWV&%%$$##"@@AABBCCllkkjjii<<;;::99 + + 55667788eeffgghhRRQQPPOO..//0011hhiijjkkOONNMMLL !!""##PPQQRRSSqqppoonnAA@@??>> !!""##PPQQRRSSqqppoonnAA@@??>> !!""##PPQQRRSSqqppoonnAA@@??>> !!""##PPQQRRSSqqppoonnAA@@??>> !!""##PPQQRRSSqqppoonnAA@@??>> !!""##PPQQRRSSllkkjjii221100// FFGGHHIIonnmmllk<;:98776,,--..//\\]]^^__eeddccbb55443322,,--..//\\]]^^__eeddccbb55443322,,--..//\\]]^^__eeddccbb55443322,,--..//\\]]^^__eeddccbb55443322,,--..//\\]]^^__eeddccbb55443322,,--..//\\]]^^__``__^^]]&&%%$$##RRSSYYZZcbbaa``_.--,,++* + + 8899::;;hhiijjkkYYXXWWVV))((''&& + + 8899::;;hhiijjkkYYXXWWVV))((''&& + + 8899::;;hhiijjkkYYXXWWVV))((''&& + + 8899::;;hhiijjkkYYXXWWVV))((''&& + + 8899::;;hhiijjkkYYXXWWVV))((''&& + + 8899::;;hhiijjkkOONNMMLL))**++,,ccddeeffUTSSRRQQ"!! DDEEFFGGhhggffee88776655 + + 99::;;<>??llmmnnooUUTTSSRR%%$$##"" <<==>>??llmmnnooUUTTSSRR%%$$##"" <<==>>??llmmnnooUUTTSSRR%%$$##"" <<==>>??llmmnnooUUTTSSRR%%$$##"" <<==>>??llmmnnooUUTTSSRR%%$$##"" <<==>>??llmmnnooKKJJIIHH--..//00gghhiijjPPOONNMMHHIIJJKKddccbbaa44332211 ==>>??@@mmnnooppJJIIHHGG 6677==>>uuvvwwxxGGFFEEDD(())**++XXYYZZ[[iihhggff99887766 (())**++XXYYZZ[[iihhggff99887766 (())**++XXYYZZ[[iihhggff99887766 (())**++XXYYZZ[[iihhggff99887766 (())**++XXYYZZ[[iihhggff99887766 (())**++XXYYZZ[[ddccbbaa**))((''NNOOPPQQgffeeddc21100//.44556677ddeeffgg]]\\[[ZZ--,,++**44556677ddeeffgg]]\\[[ZZ--,,++**44556677ddeeffgg]]\\[[ZZ--,,++**44556677ddeeffgg]]\\[[ZZ--,,++**44556677ddeeffgg]]\\[[ZZ--,,++**44556677ddeeffggSSRRQQPP%%&&''((__``aabb[ZZYYXWV&%%$$##"@@AABBCCppqqrrssQQPPOONN!! @@AABBCCppqqrrssQQPPOONN!! @@AABBCCppqqrrssQQPPOONN!! @@AABBCCppqqrrssQQPPOONN!! @@AABBCCppqqrrssQQPPOONN!! @@AABBCCppqqrrssGGFFEEDD + +11223344kkllmmnnLLKKJJIILLMMNNOO``__^^]]00//..--AABBCCDDqqrrssttFFEEDDCC + + ??@@AABBxxwwvvuuCCBBAA@@ ,,--..//\\]]^^__eeddccbb55443322,,--..//\\]]^^__eeddccbb55443322,,--..//\\]]^^__eeddccbb55443322,,--..//\\]]^^__eeddccbb55443322,,--..//\\]]^^__eeddccbb55443322,,--..//\\]]^^__``__^^]]&&%%$$##RRSSYYZZcbbaa``_.--,,++* + + 8899::;;hhiijjkkYYXXWWVV))((''&& + + 8899::;;hhiijjkkYYXXWWVV))((''&& + + 8899::;;hhiijjkkYYXXWWVV))((''&& + + 8899::;;hhiijjkkYYXXWWVV))((''&& + + 8899::;;hhiijjkkYYXXWWVV))((''&& + + 8899::;;hhiijjkkOONNMMLL))**++,,ccddeeffUTSSRRQQ"!! DDEEFFGGttuuvvwwMMLLKKJJDDEEFFGGttuuvvwwMMLLKKJJDDEEFFGGttuuvvwwMMLLKKJJDDEEFFGGttuuvvwwMMLLKKJJDDEEFFGGttuuvvwwMMLLKKJJDDEEFFGGttuuvvwwCCBBAA@@ 556677==oouuvvwwHHGGFFEE !!""##PPQQRRSS\\[[ZZYY,,++**))EEFFGGHHuuvvwwxxBBAA@@?? + + CCDDEEFFtsrqpoon??>>==<; + + 00112233``aabbccaa``__^^1100//..00112233``aabbccaa``__^^1100//..00112233``aabbccaa``__^^1100//..00112233``aabbccaa``__^^1100//..00112233``aabbccaa``__^^1100//..00112233``aabbcc\\[[ZZYY""!!!!""##$$[[\\]]^^_^^]]\\[*))((''& <<==>>??llmmnnooUUTTSSRR%%$$##"" <<==>>??llmmnnooUUTTSSRR%%$$##"" <<==>>??llmmnnooUUTTSSRR%%$$##"" <<==>>??llmmnnooUUTTSSRR%%$$##"" <<==>>??llmmnnooUUTTSSRR%%$$##"" <<==>>??llmmnnooKKJJIIHH--..//00gghhiijjPPOONNMMHHIIJJKKxxxxwwvvIIHHGGFFHHIIJJKKxxxxwwvvIIHHGGFFHHIIJJKKxxxxwwvvIIHHGGFFHHIIJJKKxxxxwwvvIIHHGGFFHHIIJJKKxxxxwwvvIIHHGGFFHHIIJJKKxxxxwwvv??>>==77>>??@@AAxxxxwwvvDDCCBBAA $$%%&&''TTUUVVWWXXWWVVUU((''&&%%IIJJKKLLxxwwvvuu>>==7766 GGHHIIJJnmmllkkj:987766544556677ddeeffgg]]\\[[ZZ--,,++**44556677ddeeffgg]]\\[[ZZ--,,++**44556677ddeeffgg]]\\[[ZZ--,,++**44556677ddeeffgg]]\\[[ZZ--,,++**44556677ddeeffgg]]\\[[ZZ--,,++**44556677ddeeffggSSRRQQPP%%&&''((__``aabb[ZZYYXWV&%%$$##"@@AABBCCppqqrrssQQPPOONN!! @@AABBCCppqqrrssQQPPOONN!! @@AABBCCppqqrrssQQPPOONN!! @@AABBCCppqqrrssQQPPOONN!! @@AABBCCppqqrrssQQPPOONN!! @@AABBCCppqqrrssGGFFEEDD + +11223344kkllmmnnLLKKJJIILLMMNNOOuuttssrrEEDDCCBBLLMMNNOOuuttssrrEEDDCCBBLLMMNNOOuuttssrrEEDDCCBBLLMMNNOOuuttssrrEEDDCCBBLLMMNNOOuuttssrrEEDDCCBBLLMMNNOOuuoonnmm66554433 + + BBCCDDEEuutsrqpo@@??>>== + + (())**++XXYYZZ[[TTSSRRQQ$$##""!! MMNNOOPPoonnmmll55443322KKLLMMNNjiihhggf54433221 + + 8899::;;hhiijjkkYYXXWWVV))((''&& + + 8899::;;hhiijjkkYYXXWWVV))((''&& + + 8899::;;hhiijjkkYYXXWWVV))((''&& + + 8899::;;hhiijjkkYYXXWWVV))((''&& + + 8899::;;hhiijjkkYYXXWWVV))((''&& + + 8899::;;hhiijjkkOONNMMLL))**++,,ccddeeffUTSSRRQQ"!! DDEEFFGGttuuvvwwMMLLKKJJDDEEFFGGttuuvvwwMMLLKKJJDDEEFFGGttuuvvwwMMLLKKJJDDEEFFGGttuuvvwwMMLLKKJJDDEEFFGGttuuvvwwMMLLKKJJDDEEFFGGttuuvvwwCCBBAA@@ 556677==oouuvvwwHHGGFFEE !!""##PPQQRRSSqqppoonnAA@@??>> !!""##PPQQRRSSqqppoonnAA@@??>> !!""##PPQQRRSSqqppoonnAA@@??>> !!""##PPQQRRSSqqppoonnAA@@??>> !!""##PPQQRRSSqqppoonnAA@@??>> !!""##PPQQRRSSllkkjjii221100// FFGGHHIIonnmmllk<;:98776,,--..//\\]]^^__PPOONNMM !!""##$$QQRRSSTTkkjjiihh1100//..OOPPQQRRfeeddccb100//..- <<==>>??llmmnnooUUTTSSRR%%$$##"" <<==>>??llmmnnooUUTTSSRR%%$$##"" <<==>>??llmmnnooUUTTSSRR%%$$##"" <<==>>??llmmnnooUUTTSSRR%%$$##"" <<==>>??llmmnnooUUTTSSRR%%$$##"" <<==>>??llmmnnooKKJJIIHH--..//00gghhiijjPPOONNMMHHIIJJKKxxxxwwvvIIHHGGFFHHIIJJKKxxxxwwvvIIHHGGFFHHIIJJKKxxxxwwvvIIHHGGFFHHIIJJKKxxxxwwvvIIHHGGFFHHIIJJKKxxxxwwvvIIHHGGFFHHIIJJKKxxxxwwvv??>>==77>>??@@AAxxxxwwvvDDCCBBAA $$%%&&''TTUUVVWWmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWhhggffee..--,,++JJKKLLMMkjjiihhg6554433200112233``aabbcchhiijjkkLLKKJJII%%&&''((UUVVWWXXggffeedd--,,++**!!SSYYZZ[[baa``__^-,,++**)@@AABBCCppqqrrssQQPPOONN!! @@AABBCCppqqrrssQQPPOONN!! @@AABBCCppqqrrssQQPPOONN!! @@AABBCCppqqrrssQQPPOONN!! @@AABBCCppqqrrssQQPPOONN!! @@AABBCCppqqrrssGGFFEEDD + +11223344kkllmmnnLLKKJJIILLMMNNOOuuttssrrEEDDCCBBLLMMNNOOuuttssrrEEDDCCBBLLMMNNOOuuttssrrEEDDCCBBLLMMNNOOuuttssrrEEDDCCBBLLMMNNOOuuttssrrEEDDCCBBLLMMNNOOuuoonnmm66554433 + + BBCCDDEEuutsrqpo@@??>>== + + (())**++XXYYZZ[[iihhggff99887766 (())**++XXYYZZ[[iihhggff99887766 (())**++XXYYZZ[[iihhggff99887766 (())**++XXYYZZ[[iihhggff99887766 (())**++XXYYZZ[[iihhggff99887766 (())**++XXYYZZ[[ddccbbaa**))((''NNOOPPQQgffeeddc21100//.44556677ddeeffggllmmnnooppqqrrssQQPPOONN!! @@AABBCCppqqrrssQQPPOONN!! @@AABBCCppqqrrssQQPPOONN!! @@AABBCCppqqrrssQQPPOONN!! @@AABBCCppqqrrssDDCCBBAA + + + +AABBCCDDeeddccbb55443322 <<==>>??ttuuvvwwMMLLKKJJDDEEFFGGttuuvvwwMMLLKKJJDDEEFFGGttuuvvwwMMLLKKJJDDEEFFGGttuuvvwwMMLLKKJJDDEEFFGGttuuvvww@@??>>== EEFFGGHHaa``__^^1100//..@@AABBCCxxxxwwvvIIHHGGFFHHIIJJKKxxxxwwvvIIHHGGFFHHIIJJKKxxxxwwvvIIHHGGFFHHIIJJKKxxxxwwvvIIHHGGFFHHIIJJKKxxppoonn77665544IIJJKKLL]]\\[[ZZ--,,++**DDEEFFGGuuttssrrEEDDCCBBLLMMNNOOuuttssrrEEDDCCBBLLMMNNOOuuttssrrEEDDCCBBLLMMNNOOuuttssrrEEDDCCBBLLMMNNOOmmllkkjj33221100MMNNOOPPYYXXWWVV))((''&&HHIIJJKKqqppoonnAA@@??>> !!""##PPQQRRSSqqppoonnAA@@??>> !!""##PPQQRRSSqqppoonnAA@@??>> !!""##PPQQRRSSqqppoonnAA@@??>> !!""##PPQQRRSSiihhggff//..--,,QQRRSSYYUUTTSSRR%%$$##""LLMMNNOOmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWmmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWeeddccbb++**))((!!""##ZZ[[\\]]QQPPOONN!!  !!""##PPQQRRSSiihhggff99887766 (())**++XXYYZZ[[iihhggff99887766 (())**++XXYYZZ[[iihhggff99887766 (())**++XXYYZZ[[iihhggff99887766 (())**++XXYYZZ[[aa``__^^''&&%%$$$$%%&&''^^__``aaMMLLKKJJ$$%%&&''TTUUVVWWeeddccbb55443322,,--..//\\]]^^__eeddccbb55443322,,--..//\\]]^^__eeddccbb55443322,,--..//\\]]^^__eeddccbb55443322,,--..//\\]]^^__]]\\[[ZZ##""!!(())**++bbccddeeIIHHGGFF(())**++XXYYZZ[[aa``__^^1100//..00112233``aabbccaa``__^^1100//..00112233``aabbccaa``__^^1100//..00112233``aabbccaa``__^^1100//..00112233``aabbccYYSSRRQQ,,--..//ffgghhiiEEDDCCBB,,--..//\\]]^^__]]\\[[ZZ--,,++**44556677ddeeffgg]]\\[[ZZ--,,++**44556677ddeeffgg]]\\[[ZZ--,,++**44556677ddeeffgg]]\\[[ZZ--,,++**44556677ddeeffggPPOONNMM00112233jjkkllmmAA@@??>>00112233``aabbccYYXXWWVV))((''&& + + 8899::;;hhiijjkkYYXXWWVV))((''&& + + 8899::;;hhiijjkkYYXXWWVV))((''&& + + 8899::;;hhiijjkkYYXXWWVV))((''&& + + 8899::;;hhiijjkkLLKKJJII44556677mmllkkjj==<<;;:: + +44556677ddeeffggUUTTSSRR%%$$##"" <<==>>??llmmnnooUUTTSSRR%%$$##"" <<==>>??llmmnnooUUTTSSRR%%$$##"" <<==>>??llmmnnooUUTTSSRR%%$$##"" <<==>>??llmmnnooHHGGFFEE ==>>??@@iihhggff99887766 + + 8899::;;hhiijjkkllmmbdQZ|bdQZ|bdQZ|H~fH~f`JXQrے`JZdQbt|ZdQv`ffpvZp˂Zp˂Zp˂tAJltAJlf`vXf`vXf`vXے`Jے`J|ZdQ|ZdQ|ZdQHfpvHfpvZp˂Zp˂Zp˂tAJltAJlf`vXf`vXf`vXے`Jے`J|ZdQ|ZdQ|ZdQ~Hf`pvbHAXQ`p˂bdQZ|drtAJf`vXf`vXے`Jے`Jے`J|ZdQ|ZdQHfpvHfpvHfpvZp˂Zp˂tAJltAJltAJlf`vXf`vXے`Jے`Jے`J|ZdQ|ZdQHfpvHfpvHfpvZp˂Zp˂bdQZ|tbdQnvpvXnJXQrrZHA㙒`JXQ|ZdQ|ZdQHfpvHfpvfpvZp˂Zp˂tAJltAJlJltf`vXf`vXے`Jے`Jے`JXQ|ZdQ|ZdQHfpvHfpvfpvZp˂Zp˂tAJltAJlJltf`vXf`vXr˂pJXQrbtlZdQtArvnXv`fZp˂Zp˂drtAdrtAdrtA`vXn`vXn˂pZXQr˂lJtAbtl~HfvnnXv`rXQJ`rXQJ`rbdQZtbdQZtbdQZnvpnvpnr˂XQr˂XQr˂btlbtlbnXvnXvnXvrXQJ`rXQJ`rbdQZtbdQZtbdQZnvpnvpnr˂XQr˂XQr˂btlbtlbnXvpvnrXQJJ`ےrbdQZdrtAltbnvpnvpXQr˂XQr˂XQr˂btlbtlnXvnXvnXvrXQJ`rXQJ`tbdQZtbdQZtbdQZnvpnvpXQr˂XQr˂XQr˂btlbtlnXvnXvnXvrXQJ`rXQJ`drtAZ|dfH~vpfH˂pZHbے`rbtbtlbtlnXvnXvnrXQJrXQJ`rXQJ`tbdQZtbdQZbnvnvpnvpXQr˂XQr˂rbtbtlbtlnXvnXvnrXQJrXQJ`rXQJ`tbdQZtbdQZbnvnvpnvpZHAb˂p`J|ZdQbd|Zv`f~HfprXQJ`rXQJ`JltJltJltvpfvpfHAbp`JXQrd|JtArdXv`ff~fpےbHAےbHA|dr|dr|drfH~fH~pZHAbpZHAbpZHAbJtArdJtArd`f~`f~`f~ےbHAےbHA|dr|dr|drfH~fH~pZHAbpZHAbpZHAbJtArdJtArd`pv~Hfp`p˂bHAZp|rAJlJltdQZ|fH~fH~pZHAbpZHAbpZHAJtArdJtArd`f~`f~`fHےbHAےbHA|dr|dr|dtAfH~fH~pZHAbpZHAbpZHAJtArdJtArd`f~`f~`fHےbHAےbHAJltrtAJlf`vX~f`Abے`JXQrlJtAdJtArdJtArd`f~`f~`ےHAےbHAےbHA|dr|drpfHfH~fH~pZHAbpZHAblJtAdJtArdJtArd`f~`f~`ےHAےbHAےbHA|dr|drpfHfH~fH~˂pZXQr˂tlJdQbt璕~HfvvnXےbHAےbHAbdQZ|bdQZ|bdQZ|H~fH~f˂pZHAr˂pZdQbt|ZdQ~HfvnXZp˂Zp˂tAJltAJltAJlf`vXf`vXے`Jے`Jے`J|ZdQ|ZdQHfpvHfpvHfpvZp˂Zp˂tAJltAJltAJlf`vXf`vXے`Jے`Jے`J|ZdQ|ZdQnXv`vnXrXQJ`˂rXQtbdbQZdAJltf`vXf`vXے`Jے`Jے`JXQ|ZdQ|ZdQHfpvHfpvfpvZp˂Zp˂tAJltAJlJltf`vXf`vXے`Jے`Jے`JXQ|ZdQ|ZdQHfpvHfpvfpvZp˂Zp˂bdQZ|tbdQnvpvXH~JXQrpZHA|ZdQ|ZdQ|ZdQHfpvHfpvZp˂Zp˂Zp˂tAJltAJlf`vXf`vXf`vXے`Jے`J|ZdQ|ZdQ|ZdQHfpvHfpvZp˂Zp˂Zp˂tAJltAJlf`vXf`vXf`vXHAbےpZHAbtArdlJtArnXv`v`f~fZp˂Zp˂drtAdrtA`vXn`vXn`vXnbے`ZHAblJtAbtlpvnv`frXQJ`rXQJ`tbdQZtbdQZtbdQZnvpnvpXQr˂XQr˂XQr˂btlbtlnXvnXvnXvrXQJ`rXQJ`tbdQZtbdQZtbdQZnvpnvpXQr˂XQr˂XQr˂btlbtlf~Hv`fےbHAJ`ےQZ|drtAJlbnvnvpnvpXQr˂XQr˂rbtbtlbtlnXvnXvnrXQJrXQJ`rXQJ`tbdQZtbdQZbnvnvpnvpXQr˂XQr˂rbtbtlbtlnXvnXvnrXQJrXQJ`rXQJ`drtAZ|l`vXnf`v˂pZHbے`btlbtlbtlnXvnXvrXQJ`rXQJ`rXQJ`tbdQZtbdQZnvpnvpnvpXQr˂XQr˂btlbtlbtlnXvnXvrXQJ`rXQJ`rXQJ`tbdQZtbdQZnvpnvpnvp`JXQrے`J|ZdQbd|Zf~HpvnrXQJ`rXQJ`JltJltvpfvpfvpfJXQrے`JXQrdt|ZdQbXv`f~HfpےbHAےbHA|dr|dr|dtAfH~fH~pZHAbpZHAbpZHAJtArdJtArd`f~`f~`fHےbHAےbHA|dr|dr|dtAfH~fH~pZHAbpZHAbpZHAJtArdJtArdfpv~HfpZp˂bHAZprtAJltbdQpfHfH~fH~pZHAbpZHAblJtAdJtArdJtArd`f~`f~`ےHAےbHAےbHA|dr|drpfHfH~fH~pZHAbpZHAblJtAdJtArdJtArd`f~`f~`ےHAےbHAےbHAdQZ|tbdQZvpfXnvAbJJXQrJtArdJtArdJtArd`f~`f~ےbHAےbHAےbHA|dr|drfH~fH~fH~pZHAbpZHAbJtArdJtArdJtArd`f~`f~ےbHAےbHAےbHA|dr|drfH~fH~fH~˂pZXQr˂tlJdQbtfpvXv`fےbHAےbHAbdQZ|bdQZ|H~fH~fH~f˂pZHAr˂plJtArnXv`~HfvnXZp˂Zp˂tAJltAJlJltf`vXf`vXے`Jے`Jے`JXQ|ZdQ|ZdQHfpvHfpvfpvZp˂Zp˂tAJltAJlJltf`vXf`vXے`Jے`Jے`JXQ|ZdQ|ZdQnXv`vnXrXQJ`˂btbdZ|df`vXf`vXf`vXے`Jے`J|ZdQ|ZdQ|ZdQHfpvHfpvZp˂Zp˂Zp˂tAJltAJlf`vXf`vXf`vXے`Jے`J|ZdQ|ZdQ|ZdQHfpvHfpvZp˂Zp˂Zp˂drtAJ|drH~fpfH~Qr˂ppZAb|ZdQ|ZdQ|ZdQHfpvHfpvZp˂Zp˂Zp˂tAJltAJlf`vXf`vXf`vXے`Jے`J|ZdQ|ZdQ|ZdQHfpvHfpvZp˂Zp˂Zp˂tAJltAJlf`vXf`vXf`vXHAbےp`JXQtArdtl|ZdQnXv`~HfZp˂Zp˂drtAdrtA`vXn`vXn`vXnbے`|ZdQbd|Zf~fppvnv`frXQJ`rXQJ`tbdQZtbdQZbnvnvpnvpXQr˂XQr˂rbtbtlbtlnXvnXvnrXQJrXQJ`rXQJ`tbdQZtbdQZbnvnvpnvpXQr˂XQr˂rbtbtlbtlf~Hv`pvp˂rHAZp˂QZ|drtAJlnvpnvpnvpXQr˂XQr˂btlbtlbtlnXvnXvrXQJ`rXQJ`rXQJ`tbdQZtbdQZnvpnvpnvpXQr˂XQr˂btlbtlbtlnXvnXvrXQJ`rXQJ`rXQJ`ltbtAJl`vXnf`vZHAb`JXQrbtlbtlbnXvnXvnXvrXQJ`rXQJ`rbdQZtbdQZtbdQZnvpnvpnr˂XQr˂XQr˂btlbtlbnXvnXvnXvrXQJ`rXQJ`rbdQZtbdQZtbdQZnvpnvpnr˂`JXQHArbtlJtAbnXvf~HpvnrXQJ`rXQJ`JltJltvpfvpfr˂pJXQHAbtlJdQbtvnXvf~HrQJHAےbHAےbHA|dr|drpfHfH~fH~pZHAbpZHAblJtAdJtArdJtArd`f~`f~`ےHAےbHAےbHA|dr|drpfHfH~fH~pZHAbpZHAblJtAdJtArdJtArdXv`fnXvXQJ`ےrXQJrtAJtbdQfH~fH~fH~pZHAbpZHAbJtArdJtArdJtArd`f~`f~ےbHAےbHAےbHA|dr|drfH~fH~fH~pZHAbpZHAbJtArdJtArdJtArd`f~`f~ےbHAےbHAےbHAdQZ|tbdQZvpfXnvے`JXQ˂pZJtArdJtArd`f~`f~`f~ےbHAےbHA|dr|dr|drfH~fH~pZHAbpZHAbpZHAbJtArdJtArd`f~`f~`f~ےbHAےbHA|dr|dr|drfH~fH~p`JXQbے`l|ZdQrd|`f~fpfpvXv`fےbHAےbHAbdQZ|bdQZ|H~fH~f`JXQrے`JtArdlJtArv`ffpvZp˂Zp˂Zp˂tAJltAJlf`vXf`vXf`vXے`Jے`J|ZdQ|ZdQ|ZdQHfpvHfpvZp˂Zp˂Zp˂tAJltAJlf`vXf`vXf`vXے`Jے`J|ZdQ|ZdQ|ZdQ~Hf`f~bHAZ`ےbbdQZ|Z|rAJf`vXf`vXf`vXے`Jے`J|ZdQ|ZdQ|ZdQHfpvHfpvZp˂Zp˂Zp˂tAJltAJlf`vXf`vXf`vXے`Jے`J|ZdQ|ZdQ|ZdQHfpvHfpvZp˂Zp˂Zp˂drtAJ|ltH~p`vXr˂pHAbے|ZdQ|ZdQHfpvHfpvHfpvZp˂Zp˂tAJltAJltAJlf`vXf`vXے`Jے`Jے`J|ZdQ|ZdQHfpvHfpvHfpvZp˂Zp˂tAJltAJltAJlf`vXf`vXr˂pJXQrbtlZdQbtvnXnvffpvZp˂Zp˂drtAdrtA`vXn`vXn˂pZXQr˂|ZdQbd|Z~HfpۅnXv`rXQJ`rXQJ`rXQJ`tbdQZtbdQZnvpnvpnvpXQr˂XQr˂btlbtlbtlnXvnXvrXQJ`rXQJ`rXQJ`tbdQZtbdQZnvpnvpnvpXQr˂XQr˂btlbtlbtlpvnHfpvp˂rHAZp˂drtAltbnvpnvpnr˂XQr˂XQr˂btlbtlbnXvnXvnXvrXQJ`rXQJ`rbdQZtbdQZtbdQZnvpnvpnr˂XQr˂XQr˂btlbtlbnXvnXvnXvrXQJ`rXQJ`rbdQZltdbnvvpfHnr˂ZHAb`JXQrbtlbtlnXvnXvnXvrXQJ`rXQJ`tbdQZtbdQZtbdQZnvpnvpXQr˂XQr˂XQr˂btlbtlnXvnXvnXvrXQJ`rXQJ`tbdQZtbdQZtbdQZnvpnvpZHAb˂pZHAJtArdlJtAv`f~HfpnrXQJrXQJ`rXQJ`Zp˂JltJltvpfvpfHAbےpZHAbtl|dQtArdvnXf~HےbHAےbHAےbHA|dr|drfH~fH~fH~pZHAbpZHAbJtArdJtArdJtArd`f~`f~ےbHAےbHAےbHA|dr|drfH~fH~fH~pZHAbpZHAbJtArdJtArdJtArdXv`fnXvXQJ`ےrXQJJltdQZ|fH~fH~pZHAbpZHAbpZHAbJtArdJtArd`f~`f~`f~ےbHAےbHA|dr|dr|drfH~fH~pZHAbpZHAbpZHAbJtArdJtArd`f~`f~`f~ےbHAےbHA|ltrtAJlp`vX~f`pZAb`ے`JXQ˂pZAJtArdJtArd`f~`f~`fHےbHAےbHA|dr|dr|dtAfH~fH~pZHAbpZHAbpZHAJtArdJtArd`f~`f~`fHےbHAےbHA|dr|dr|dtAfH~fH~ے`JXQbے`|ZdQrd|~HfpvnX`ےHAےbHAےbHArXQJ`ےbHA|dr|drfH~fH~fH~pZHAbpZHAbJtArdJtArdJtArd`f~`f~ےbHAےbHAےbHA|dr|drfH~fH~fH~ZHAb˂p`ZAHr󙐂˅f۝`vf۝`vrQtJlrQtJlZp˂tAJltAJlf`vXf`vXf`vXے`Jے`J|ZdQ|ZdQ|ZdQHfpvHfpvZp˂Zp˂Zp˂tAJltAJlf`vXf`vXf`vXے`JXQQXb㉀ہ`ZQXbXnv˅Xnv˒tbAdtbAdrbdQZtbdQZtbdQZnvpnvpnr˂XQr˂XQr˂btlbtlbnXvnXvnXvrXQJ`rXQJ`rbdQZtbdQZtbdQZnvpnvpnے`JHAbےpJAHr󉀒ۑpJpfH~pfH~Z|dZ|d|dr|dr|drfH~fH~pZHAbpZHAbpZHAbJtArdJtArd`f~`f~`f~ےbHAےbHA|dr|dr|drfH~fH~XQr˂`JXQrˁ`ZAHr󙐂˅f۝`vf۝`vrQtJlrQtJltAJltAJltAJlf`vXf`vXے`Jے`Jے`J|ZdQ|ZdQHfpvHfpvHfpvZp˂Zp˂tAJltAJltAJlf`vXf`vXpZHAb˂pZQXb㉀ہ`ZQXAHXnv˅Xnv˒tbAdtbAdtbdQZtbdQZtbdQZnvpnvpXQr˂XQr˂XQr˂btlbtlnXvnXvnXvrXQJ`rXQJ`tbdQZtbdQZtbdQZnvpnvpے`JHAbےp`ZQXr󙐂ˁ`pfH~pfH~Z|dZ|d|dr|dr|dtAfH~fH~pZHAbpZHAbpZHAJtArdJtArd`f~`f~`fHےbHAےbHA|dr|dr|dtAfH~fH~XQr˂`JXQrb㉀ۑpZQXb㉀f۝`vf۝`vrQtJlrQtJltAJltAJlJltf`vXf`vXے`Jے`Jے`JXQ|ZdQ|ZdQHfpvHfpvfpvZp˂Zp˂tAJltAJlJltf`vXf`vXpZHAb˂p`JAHr󙐒ۑpJAHXnv˅Xnv˒tbAdtbAdtbdQZtbdQZbnvnvpnvpXQr˂XQr˂rbtbtlbtlnXvnXvnrXQJrXQJ`rXQJ`tbdQZtbdQZbnvnvpnvp˂pJXQrˁ`ZQXr󙐂ˁ`pfH~pfH~Z|dZ|d|dr|drpfHfH~fH~pZHAbpZHAblJtAdJtArdJtArd`f~`f~`ےHAےbHAےbHA|dr|drpfHfH~fH~ZHAb˂pZHAb㉀ۑpZQXb㉀f۝`vf۝`vrQtJlrQtJltAJltAJlf`vXf`vXf`vXے`Jے`J|ZdQ|ZdQ|ZdQHfpvHfpvZp˂Zp˂Zp˂tAJltAJlf`vXf`vXf`vXے`JXQbے`JAHr󙐅Xnv˅Xnv˅Xnv˒tbAdtbAdtbdQZtbdQZnvpnvpnvpXQr˂XQr˂btlbtlbtlnXvnXvrXQJ`rXQJ`rXQJ`tbdQZtbdQZnvpnvpnvpr˂pJXQrۑpJpfH~pfH~p|dZ|dZ|drQtqrstuvwxxwvutsr \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv26_2.dat b/vendor/endroid/qr-code/assets/data/qrv26_2.dat new file mode 100644 index 000000000..9b026a043 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv26_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv26_3.dat b/vendor/endroid/qr-code/assets/data/qrv26_3.dat new file mode 100644 index 000000000..35f67462b --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv26_3.dat @@ -0,0 +1,241 @@ +xwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTSTRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFExwxwxwxwvuvuvuvutstststsooooopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcbababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTSTRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFExwxwxwxwvuvuvuvutstststsopopopopnmnmnmnmlklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSSSSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIHGHGHGFEFEFEFExwxwxwxwvuvuvuvutstststsopopopopnmnmnmnmlklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWSSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFExwxwxwxwvuvuvuvutstststsopopopopnmnmnmnmlklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFExwxwxwxwvuvuvuvutstststsopopopopnmnmnmnmlklklklkjijijijihghghghgfedcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFExwxwxwxwvuvuvuvutstststsopopopopnmnmnmnmlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKJIJIJIHGHGHGHGFEFEFEFExwxwxwxwvuvuvuvutstststsopoooooonmnmnmnmlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFExwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFExwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkjijijijihgfefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSSSSSTSTRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFExwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTSTRQRQRQRQPOPOPOPONMLKLKLKJIJIJIJIHGHGHGHGFEFEFEFExwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTSTRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFExwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTSTRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFExwxwxwxwvuvuvuvurqrqrqrqpopopooonmnmnmnmlklklklkjihghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTSTRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFExwxwxwxwvuvuvuvurqrqrqrqooopopopnmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTSTRQRQRQRQPONMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFExwxwxwxwvuvuvuvurqrqrqrqopopopopnmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYXWXWXWVUVUVUVUSTSSSSSSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFExwxwxwxwvuvuvuvurqrqrqrqopopopopnmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFExwxwxwxwvuvuvuvurqrqrqrqopopopopnmnmnmnmlkjijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFExwxwxwxwvuvuvuvurqrqrqrqopopopopnmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFExwxwxwxwvuvuvuvurqrqrqrqopopopopnmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[ZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFExwxwxwxwvuvuvuvurqrqrqrqooooooponmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSSSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFExwxwxwxwvuvuvuvurqrqrqrqpopopoponmlklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUSSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFExwxwxwxwtstststsrqrqrqrqpopopopolklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFExwxwxwxwtstststsrqrqrqrqpopopopolklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFExwxwxwxwtstststsrqrqrqrqpopopopolklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFExwxwxwxwtstststsrqrqrqrqpopopopolklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFExwxwxwxwtstststsrqrqrqrqmmmmmmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFExwxwxwxwtstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEDCDCDCDCDCDCDCvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCDCDCDCDCvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSSSSSSTRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCDCDCDCDCvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcba`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTSTRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCDCDCDCDCvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTSTRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGFEFEFEDCDCDCDCDCDCDCDCvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTSTRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABA@?@?@?@?>=>=>=>=:9:9:9:977777878656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + DCDCDCDCBABABABA@?@?@?@?>=>=>=>=:9:9:9:9787878786565656543434343210/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + DCDCDCDCBABABABA@?@?@?@?>=>=>=>=:9:9:9:97878787865656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + DCDCDCDCBABABABA@?@?@?@?>=>=>=>=:9:9:9:97878787865656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!       + + + + DCDCDCDCBABABABA@?@?@?@?>=>=>=>=:9:9:9:97878787865656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + DCDCDCDCBABABABA@?@?@?@?>=>=>=>=:9:9:9:97878787865656565432121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + DCDCDCDCBABABABA@?@?@?@?>=<;<;<;:9:9:9:97877777765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + DCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#"!"!"!        + + + + DCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + DCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:98787878765434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        DCDCDCDCBABABABA@?>=>=>=<;<;<;<;:9:9:9:98787878743434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        DCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:98787877743434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%$#$#$#"!"!"!"!        DCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:97787878743434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + DCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:98765656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + + DCDCDCDCBA@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + + DCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('&%&%&%$#$#$#$#"!"!"!"!        + + + + DCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     + + + + DCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     + + + + DCBABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     + + + + BABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + + BABABABA@?@?@?@?>=>=>=>=<;<;<;<;:98787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!       + + + + BABABABA@?@?@?@?>=>=>=>=<;<;<;<;877777786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + BABABABA@?@?@?@?>=>=>=>=<;<;<;<;787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + BABABABA@?@?@?@?>=>=>=>=<;<;<;<;787878786565656543434343212121210/0/0/0/.-.-.-.-,+*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + BABABABA@?@?@?@?>=>=>=>=<;<;<;<;787878786565656543434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + BABABABA@?@?@?@?>=>=>=>=<;<;<;<;787878786565656543434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + BABABABA@?@?@?@?>=>=>=>=<;<;<;<;787878786565656543434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + BABABABA@?@?@?@?>=>=>=>=<;<;<;<;787877776565656543434343212121210/0/0/0/.-,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + + BABABABA@?@?@?@?>=>=>=>=<;<;<;<;778787876565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + BABABABA@?@?@?@?>=>=>=>=<;<;<;<;878787876565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + BABABABA@?@?@?@?>=>=>=>=<;:9:9:9878787876565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + BABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787876565656543434343212121210/.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + BABABABA@?@?@?@?>=>=>=>=:9:9:9:987878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + BABABABA@?@?@?@?>=>=>=>=:9:9:9:987878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + xxwwvvuu!!""##$$>>==7766xxwwvvuu$$%%&&''EEDDCCBBDDEEFFGG%%$$##""ddeeffggmmllkkjjMMLLKKJJ<<==>>??cbbaa``_0011223399887766PPQQRRSSppqqrrss + + ttssrrqq%%&&''((55443322tsrqpoon(())**++AA@@??>>HHIIJJKK!! hhiijjkkiihhggff !!""##IIHHGGFF@@AABBCC_^^]]\\[4455667755443322TTUUVVWWttuuvvww ppoonnmm))**++,,1100//..nmmllkkj,,--..//==<<;;::LLMMNNOOllmmnnooeeddccbb$$%%&&''EEDDCCBBDDEEFFGG[ZZYYXWV8899::;;1100//..XXYYZZ[[xxxxwwvvllkkjjii--..//00--,,++**jiihhggf0011223399887766PPQQRRSSppqqrrss + + aa``__^^(())**++AA@@??>>HHIIJJKK + +UTSSRRQQ<<==>>??--,,++**\\]]^^__ + +uuttssrrhhggffee11223344))((''&&feeddccb4455667755443322TTUUVVWWttuuvvww ]]\\[[ZZ,,--..//==<<;;::LLMMNNOO PPOONNMM@@AABBCC))((''&&``aabbcc qqppoonnddccbbaa55667788%%$$##""baa``__^8899::;;1100//..XXYYZZ[[xxxxwwvvYYXXWWVV0011223399887766PPQQRRSSLLKKJJIIDDEEFFGG%%$$##""ddeeffggmmllkkjj``__^^]]99::;;<>??--,,++**\\]]^^__ + +uuttssrrUUTTSSRR4455667755443322TTUUVVWW + + HHGGFFEEHHIIJJKK!! hhiijjkkiihhggff !!""##\\[[ZZYY==>>??@@ZYYXWVUT@@AABBCC))((''&&``aabbcc qqppoonnQQPPOONN8899::;;1100//..XXYYZZ[[ DDCCBBAALLMMNNOOllmmnnooeeddccbb$$%%&&''XXWWVVUUAABBCCDDSSRRQQPPDDEEFFGG%%$$##""ddeeffggmmllkkjjMMLLKKJJ<<==>>??--,,++**\\]]^^__@@??>>==PPQQRRSSppqqrrss + + aa``__^^(())**++TTSSRRQQEEFFGGHH OONNMMLLHHIIJJKK!! hhiijjkkiihhggff !!""##IIHHGGFF@@AABBCC))((''&&``aabbcc<;:98776TTUUVVWWttuuvvww ]]\\[[ZZ,,--..//PPOONNMMIIJJKKLL + + KKJJIIHHLLMMNNOOllmmnnooeeddccbb$$%%&&''EEDDCCBBDDEEFFGG%%$$##""ddeeffgg65544332XXYYZZ[[xxxxwwvvYYXXWWVV00112233LLKKJJIIMMNNOOPP + + GGFFEEDDPPQQRRSSppqqrrss + + aa``__^^(())**++AA@@??>>HHIIJJKK!! hhiijjkk!!""##$$21100//.\\]]^^__ + +uuttssrrUUTTSSRR44556677HHGGFFEEQQRRSSTT CCBBAA@@TTUUVVWWttuuvvww ]]\\[[ZZ,,--..//==<<;;::LLMMNNOOllmmnnoo%%&&''((.--,,++*``aabbcc qqppoonnQQPPOONN8899::;;DDCCBBAAUUVVWWXX??>>==<;XXYYZZ[[xxxxwwvvYYXXWWVV0011223399887766PPQQRRSSppqqrrss))**++,,*))((''&ddeeffggmmllkkjjMMLLKKJJ<<==>>??@@??>>==YYZZ[[\\:9877665\\]]^^__ + +uuttssrrUUTTSSRR4455667755443322TTUUVVWWttuuvvww--..//00&%%$$##"hhiijjkkiihhggff !!""##IIHHGGFF@@AABBCC<<;;::99]]^^__``!!54433221``aabbcc qqppoonnQQPPOONN8899::;;1100//..XXYYZZ[[xxxxwwvv11223344"!! llmmnnooeeddccbb$$%%&&''EEDDCCBBDDEEFFGG88776655aabbccdd""##$$%%100//..-ddeeffggmmllkkjjMMLLKKJJ<<==>>??--,,++**\\]]^^__ + +uuoonnmm556677==ppqqrrss + + aa``__^^(())**++AA@@??>>HHIIJJKK44332211eeffgghh&&''(())-,,++**)hhiijjkkiihhggff !!""##IIHHGGFF@@AABBCC))((''&&``aabbcc llkkjjii>>??@@AAttuuvvww ]]\\[[ZZ,,--..//==<<;;::LLMMNNOO00//..--iijjkkll**++,,--)((''&&%llmmnnooeeddccbb$$%%&&''EEDDCCBBDDEEFFGG%%$$##""ddeeffgghhggffeeBBCCDDEExxxxwwvvYYXXWWVV0011223399887766PPQQRRSS,,++**))mmnnoopp..//0011%$$##""!ppqqrrss + + aa``__^^(())**++AA@@??>>HHIIJJKK!! hhiijjkkddccbbaaFFGGHHII uuttssrrUUTTSSRR4455667755443322TTUUVVWW((''&&%%qqrrsstt22334455! ttuuvvww ]]\\[[ZZ,,--..//==<<;;::LLMMNNOOllmmnnoo``__^^]]JJKKLLMM + + qqppoonnQQPPOONN8899::;;1100//..XXYYZZ[[$$##""!!uuvvwwxx6677==>>xxxxwwvvYYXXWWVV0011223399887766PPQQRRSSppqqrrss + + \\[[ZZYYNNOOPPQQmmllkkjjMMLLKKJJ<<==>>??--,,++**\\]]^^__ xxwwvvuu??@@AABBuuttssrrUUTTSSRR4455667755443322TTUUVVWWttuuvvww SSRRQQPPRRSSYYZZiihhggff !!""##IIHHGGFF@@AABBCC))((''&&``aabbccoonnmmllCCDDEEFFqqppoonnQQPPOONN8899::;;1100//..XXYYZZ[[xxxxwwvvOONNMMLL[[\\]]^^eeddccbb$$%%&&''EEDDCCBBDDEEFFGG%%$$##""ddeeffggkkjjiihhGGHHIIJJ mmllkkjjMMLLKKJJ<<==>>??--,,++**\\]]^^__ + +uuttssrrKKJJIIHH__``aabb + + aa``__^^(())**++AA@@??>>HHIIJJKK!! hhiijjkkggffeeddKKLLMMNN + + iihhggff !!""##IIHHGGFF@@AABBCC))((''&&``aabbcc qqppoonnGGFFEEDDccddeeff ]]\\[[ZZ,,--..//==<<;;::LLMMNNOOllmmnnoo ccbbaa``OOPPQQRReeddccbb$$%%&&''EEDDCCBBDDEEFFGG%%$$##""ddeeffggmmllkkjjCCBBAA@@gghhiijjYYXXWWVV0011223399887766PPQQRRSSppqqrrss + + __^^]]\\SSYYZZ[[ + + aa``__^^(())**++AA@@??>>HHIIJJKK!! hhiijjkkiihhggff !!""##??>>==77kkllmmnnUUTTSSRR4455667755443322TTUUVVWWttuuvvww + + [[ZZYYSS\\]]^^__ ]]\\[[ZZ,,--..//==<<;;::LLMMNNOOllmmnnooeeddccbb$$%%&&''66554433oouuvvwwQQPPOONN8899::;;1100//..XXYYZZ[[xxxxwwvvaa``__^^ RRQQPPOO``aabbccYYXXWWVV0011223399887766PPQQRRSSppqqrrss + + aa``__^^(())**++221100//xxxxwwvvMMLLKKJJ<<==>>??--,,++**\\]]^^__ + +uuttssrr]]\\[[ZZNNMMLLKKddeeffggUUTTSSRR4455667755443322TTUUVVWWttuuvvww ]]\\[[ZZ,,--..//..--,,++uutsrqpo !!""##IIHHGGFF@@AABBCC))((''&&``aabbcc qqppoonnYYXXWWVVJJIIHHGGhhiijjkkQQPPOONN8899::;;1100//..XXYYZZ[[xxxxwwvvYYXXWWVV00112233**))((''onnmmllk$$%%&&''EEDDCCBBDDEEFFGG%%$$##""ddeeffggmmllkkjjUUTTSSRRFFEEDDCCllmmnnooMMLLKKJJ<<==>>??--,,++**\\]]^^__ + +uuttssrrUUTTSSRR44556677&&%%$$##kjjiihhg(())**++AA@@??>>HHIIJJKK!! hhiijjkkiihhggffQQPPOONN BBAA@@??uuvvwwxx !!""##IIHHGGFF@@AABBCC))((''&&``aabbcc qqppoonnQQPPOONN8899::;;""!!gffeeddc,,--..//==<<;;::LLMMNNOOllmmnnooeeddccbbMMLLKKJJIIHHGGFF@@AABBCC))((''&&``aabbcc<;:98776TTUUVVWWttuuvvww ]]\\[[ZZ,,--..//==<<;;::LLMMNNOOllmmnnoo%%&&''((.--,,++*``aabbcc qqppoonnQQPPOONN8899::;;1100//..XXYYZZ[[--,,++**EEDDCCBBDDEEFFGG%%$$##""ddeeffgg65544332XXYYZZ[[xxxxwwvvYYXXWWVV0011223399887766PPQQRRSSppqqrrss))**++,,*))((''&ddeeffggmmllkkjjMMLLKKJJ<<==>>??--,,++**\\]]^^__!!""##))((''&&AA@@??>>HHIIJJKK!! hhiijjkk!!""##$$21100//.\\]]^^__ + +uuttssrrUUTTSSRR4455667755443322TTUUVVWWttuuvvww--..//00&%%$$##"hhiijjkkiihhggff !!""##IIHHGGFF@@AABBCC))((''&&``aabbcc$$%%&&''%%$$##""==<<;;::LLMMNNOOllmmnnoo%%&&''((.--,,++*``aabbcc qqppoonnQQPPOONN8899::;;1100//..XXYYZZ[[xxxxwwvv11223344"!! llmmnnooeeddccbb$$%%&&''EEDDCCBBDDEEFFGG%%$$##""ddeeffgg(())**++!! 99887766PPQQRRSSppqqrrss))**++,,*))((''&ddeeffggmmllkkjjMMLLKKJJ<<==>>??--,,++**\\]]^^__ + +uuoonnmm556677==ppqqrrss + + aa``__^^(())**++AA@@??>>HHIIJJKK!! hhiijjkk,,--..//55443322TTUUVVWWttuuvvww--..//00&%%$$##"hhiijjkkiihhggff !!""##IIHHGGFF@@AABBCC))((''&&``aabbcc llkkjjii>>??@@AAttuuvvww ]]\\[[ZZ,,--..//==<<;;::LLMMNNOOllmmnnoo001122331100//..XXYYZZ[[xxxxwwvv11223344"!! llmmnnooeeddccbb$$%%&&''EEDDCCBBDDEEFFGG%%$$##""ddeeffgghhggffeeBBCCDDEExxxxwwvvYYXXWWVV0011223399887766PPQQRRSSppqqrrss44556677--,,++**\\]]^^__ + +uuoonnmm556677==ppqqrrss + + aa``__^^(())**++AA@@??>>HHIIJJKK!! hhiijjkkddccbbaaFFGGHHII uuttssrrUUTTSSRR4455667755443322TTUUVVWWttuuvvww==>>??@@))((''&&``aabbcc llkkjjii>>??@@AAttuuvvww ]]\\[[ZZ,,--..//==<<;;::LLMMNNOOllmmnnoo``__^^]]JJKKLLMM + + qqppoonnQQPPOONN8899::;;1100//..XXYYZZ[[xxppoonnAABBCCDD + +%%$$##""ddeeffgghhggffeeBBCCDDEExxxxwwvvYYXXWWVV0011223399887766PPQQRRSSppqqrrss + + \\[[ZZYYNNOOPPQQmmllkkjjMMLLKKJJ<<==>>??--,,++**\\]]^^__ + +mmllkkjjEEFFGGHH + + !! hhiijjkkddccbbaaFFGGHHII uuttssrrUUTTSSRR4455667755443322TTUUVVWWttuuvvww SSRRQQPPRRSSYYZZiihhggff !!""##IIHHGGFF@@AABBCC))((''&&``aabbcc iihhggffIIJJKKLL llmmnnoo``__^^]]JJKKLLMM + + qqppoonnQQPPOONN8899::;;1100//..XXYYZZ[[xxxxwwvvOONNMMLL[[\\]]^^eeddccbb$$%%&&''EEDDCCBBDDEEFFGG%%$$##""ddeeffggeeddccbbMMNNOOPPppqqrrss + + \\[[ZZYYNNOOPPQQmmllkkjjMMLLKKJJ<<==>>??--,,++**\\]]^^__ + +uuttssrrKKJJIIHH__``aabb + + aa``__^^(())**++AA@@??>>HHIIJJKK!! hhiijjkkaa``__^^QQRRSSYYttuuvvww SSRRQQPPRRSSYYZZiihhggff !!""##IIHHGGFF@@AABBCC))((''&&``aabbcc qqppoonnGGFFEEDDccddeeff ]]\\[[ZZ,,--..//==<<;;::LLMMNNOOllmmnnoo]]\\[[ZZZZ[[\\]]xxxxwwvvOONNMMLL[[\\]]^^eeddccbb$$%%&&''EEDDCCBBDDEEFFGG%%$$##""ddeeffggmmllkkjjCCBBAA@@gghhiijjYYXXWWVV0011223399887766PPQQRRSSppqqrrss + + YYSSRRQQ^^__``aa + +uuttssrrKKJJIIHH__``aabb + + aa``__^^(())**++AA@@??>>HHIIJJKK!! hhiijjkkiihhggff !!""##??>>==77kkllmmnnUUTTSSRR4455667755443322TTUUVVWWttuuvvww PPOONNMMbbccddee !!""## qqppoonnGGFFEEDDccddeeff ]]\\[[ZZ,,--..//==<<;;::LLMMNNOOllmmnnooeeddccbb$$%%&&''66554433oouuvvwwQQPPOONN8899::;;1100//..XXYYZZ[[xxxxwwvvLLKKJJIIffgghhii$$%%&&''mmllkkjjCCBBAA@@gghhiijjYYXXWWVV0011223399887766PPQQRRSSppqqrrss + + aa``__^^(())**++221100//xxxxwwvvMMLLKKJJ<<==>>??--,,++**\\]]^^__ + +uuttssrrHHGGFFEEjjkkllmm(())**++iihhggff !!""##??>>==77kkllmmnnUUTTSSRR4455667755443322TTUUVVWWttuuvvww ]]\\[[ZZ,,--..//..--,,++uutsrqpo !!""##IIHHGGFF@@AABBCC))((''&&``aabbcc qqppoonnDDCCBBAAmmllkkjj,,--..//eeddccbb$$%%&&''66554433oouuvvwwQQPPOONN8899::;;1100//..XXYYZZ[[xxxxwwvvYYXXWWVV00112233**))((''onnmmllk$$%%&&''EEDDCCBBDDEEFFGG%%$$##""ddeeffggmmllkkjj@@??>>==iihhggff00112233 + + aa``__^^(())**++221100//xxxxwwvvMMLLKKJJ<<==>>??--,,++**\\]]^^__ + +uuttssrrUUTTSSRR44556677&&%%$$##kjjiihhg(())**++AA@@??>>HHIIJJKK!! hhiijjkkiihhggff !!""##77665544eeddccbb44556677 ]]\\[[ZZ,,--..//..--,,++uutsrqpo !!""##IIHHGGFF@@AABBCC))((''&&``aabbcc qqppoonnQQPPOONN8899::;;""!!gffeeddc,,--..//==<<;;::LLMMNNOOllmmnnooeeddccbb$$%%&&''33221100aa``__^^8899::;;YYXXWWVV00112233**))((''onnmmllk$$%%&&''EEDDCCBBDDEEFFGG%%$$##""ddeeffggmmllkkjjMMLLKKJJ<<==>>??cbbaa``_0011223399887766PPQQRRSSppqqrrss + + aa``__^^(())**++//..--,,]]\\[[ZZ<<==>>??UUTTSSRR44556677&&%%$$##kjjiihhg(())**++AA@@??>>HHIIJJKK!! hhiijjkkiihhggff !!""##IIHHGGFF@@AABBCC_^^]]\\[4455667755443322TTUUVVWWttuuvvww ]]\\[[ZZ,,--..//++**))((YYXXWWVV@@AABBCCQQPPOONN8899::;;""!!gffeeddc,,--..//==<<;;::LLMMNNOOllmmnnooeeddccbb$$%%&&''EEDDCCBBDDEEFFGG[ZZYYXWV8899::;;1100//..XXYYZZ[[xxxxwwvvYYXXWWVV00112233''&&%%$$UUTTSSRRDDEEFFGGMMLLKKJJ<<==>>??cbbaa``_0011223399887766PPQQRRSSppqqrrss + + aa``__^^(())**++AA@@??>>HHIIJJKK + +UTSSRRQQ<<==>>??--,,++**\\]]^^__ + +uuttssrrUUTTSSRR44556677##""!!QQPPOONNHHIIJJKK !!""##IIHHGGFF@@AABBCC_^^]]\\[4455667755443322TTUUVVWWttuuvvww ]]\\[[ZZ,,--..//==<<;;::LLMMNNOO PPOONNMM@@AABBCC))((''&&``aabbcc qqppoonnQQPPOONN8899::;;MMLLKKJJLLMMNNOO$$%%&&''EEDDCCBBDDEEFFGG[ZZYYXWV8899::;;1100//..XXYYZZ[[xxxxwwvvYYXXWWVV0011223399887766PPQQRRSSLLKKJJIIDDEEFFGG%%$$##""ddeeffggmmllkkjjMMLLKKJJ<<==>>??IIHHGGFFPPQQRRSS(())**++AA@@??>>HHIIJJKK + +UTSSRRQQ<<==>>??--,,++**\\]]^^__ + +uuttssrrUUTTSSRR4455667755443322TTUUVVWW + + HHGGFFEEHHIIJJKK!! hhiijjkkiihhggff !!""##IIHHGGFF@@AABBCCEEDDCCBBTTUUVVWW,,--..//==<<;;::LLMMNNOO PPOONNMM@@AABBCC))((''&&``aabbcc qqppoonnQQPPOONN8899::;;1100//..XXYYZZ[[ DDCCBBAALLMMNNOOllmmnnooeeddccbb$$%%&&''EEDDCCBBDDEEFFGG AA@@??>>XXYYZZ[[0011223399887766PPQQRRSSLLKKJJIIDDEEFFGG%%$$##""ddeeffggmmllkkjjMMLLKKJJ<<==>>??--,,++**\\]]^^__@@??>>==PPQQRRSSppqqrrss + + aa``__^^(())**++AA@@??>>HHIIJJKK + + + +==<<;;::\\]]^^__4455667755443322TTUUVVWW + + HHGGFFEEHHIIJJKK!! hhiijjkkiihhggff !!""##IIHHGGFF@@AABBCC))((''&&``aabbcc<;:98776TTUUVVWWttuuvvww ]]\\[[ZZ,,--..//==<<;;::LLMMNNOO 99887766``aabbcc8899::;;1100//..XXYYZZ[[ DDCCBBAALLMMNNOOllmmnnooeeddccbb$$%%&&''EEDDCCBBDDEEFFGG%%$$##""ddeeffgg65544332XXYYZZ[[xxxxwwvvYYXXWWVV0011223399887766PPQQRRSS55443322ddeeffgg<<==>>??--,,++**\\]]^^__@@??>>==PPQQRRSSppqqrrss + + aa``__^^(())**++AA@@??>>HHIIJJKK!! hhiijjkk!!""##$$21100//.\\]]^^__ + +uuttssrrUUTTSSRR4455667755443322TTUUVVWW1100//..hhiijjkkllmmbdQZ|`vXnJXQHAbnXv`rXQJ`|drf`vXXQr˂JtArdfpvtbdQZfH~ے`JbtlnXvtbdnvppZHAb|ZdQnXvےbHAf`vXdrtAvpfے`Jf~fpےbHAtAJlnvppZHAb|ZdQnrXQJ|drf`vXXQr˂JtArd`f~QZ|dfH~ے`Jbtl`f~Zp˂nvpJltH~fXQr˂vnXZp˂tbdQZfH~ے`Jbtl`ےHAtAJlnvppZHAb|ZdQHfpvrtAJf`vXXQr˂JtArdHfpvrbdQZfH~bdQZ|`vXnpZHAbv`frXQJ`|drf`vXXQr˂JtArdZp˂tbdQZfH~ے`JbtlnXvbdQZ|nvppZHAb|ZdQnXv|drf`vXdrtAvpfے`J~HfpےbHAtAJlnvppZHAb|ZdQrXQJ`|drf`vXXQr˂JtArd`pvdrtAfH~ے`Jbtl`fHtAJlnvpJltH~fXQr˂vnXZp˂tbdQZfH~ے`JbnXvےbHAtAJlnvppZHAb|ZdQnrXQJJltf`vXXQr˂JtArdfpvtbdQZfH~bdQZ|`vXnp`JXQv`frXQJ`|drf`vXXQr˂`f~Zp˂tbdQZfH~ے`Jbtl`p˂bdQZ|nvppZHAb|ZdQnrXQJ|drf`vXdrtAvpfr˂p~HfvnےbHAtAJlnvppZHAHfpvrXQJ`|drf`vXXQr˂JtArdrXQJ`drtAfH~ے`Jbtl`ےHAtAJlnvpJltH~fZHAbXv`fZp˂tbdQZfH~ے`JXQnXvےbHAtAJlnvppZHAb|ZdQےbHAJltf`vXXQr˂JtArdZp˂tbdQZfH~bdQZ|`vXnے`JXQ~HfrXQJ`|drf`vXrbt`f~Zp˂tbdQZfH~ے`JbtlZp˂bQZdnvppZHAb|ZdQrXQJ`|drf`vXdrtAvpfr˂ppvnےbHAtAJlnvplJtAdHfpvrXQJ`|drf`vXXQr˂JtArdrXQJ`rtAJlfH~ے`JbnXvےbHAtAJlnvpJltH~f|ZdQbXv`fZp˂tbdQZfH~|ZdQnXvےbHAtAJlnvppZHAb|ZdQp˂rtbdQf`vXXQr˂`f~Zp˂tbdQZfH~bdQZ|`vXntlJ~HfrXQJ`|drf`vXbtl`f~Zp˂tbdQZfH~ے`JbtlXQJ`ےZ|dnvppZHAHfpvrXQJ`|drf`vXdrtAvpftArdpvnےbHAtAJlnr˂JtArdHfpvrXQJ`|drf`vXXQr˂JtArdbHAZrtAJlfH~ے`JXQnXvےbHAtAJlnvpJltH~f|ZdQbvf~HZp˂tbdQZpZHAb|ZdQnXvےbHAtAJlnvppZHAb|ZdQp˂rtbdQf`vXrbt`f~Zp˂tbdQZfH~bdQZ|`vXntl|fpvrXQJ`|dtAے`Jbtl`f~Zp˂tbdQZfH~ے`JbnXvXQJ`ےZ|rAJnvplJtAdHfpvrXQJ`|drf`vXdrtAvpfZdQbtnXv`ےbHAJltXQr˂JtArdHfpvrXQJ`|drf`vXXQr˂`pvbHAXQltbfH~|ZdQnXvےbHAtAJlnvpJltH~flJtAf~HZp˂bnvpZHAb|ZdQnXvےbHAtAJlnvppZHAnXv`J`ےdQZ|f`vXbtl`f~Zp˂tbdQZfH~bdQZ|`vXnrd|fpvrXQJ`pfHے`Jbtl`f~Zp˂tbdQZfH~ے`JXQf~HbHAZpdrtAJnr˂JtArdHfpvrXQJ`|drf`vXdrtAvpfZdQbtnXv`ےbHAf`vXXQr˂JtArdHfpvrXQJ`|drf`vXrbtfpv˂rXQltbpZHAb|ZdQnXvےbHAtAJlnvpJltH~flJtAf~fpZp˂nvppZHAb|ZdQnXvےbHAtAJlnvplJtAdnXv`J`ےdQZ|ے`Jbtl`f~Zp˂tbdQZfH~bdQZ|`vXnrdtvnXrbdQZfH~ے`Jbtl`f~Zp˂tbdQZfH~|ZdQf~HbHAZpAJltXQr˂JtArdHfpvrXQJ`|drf`vXdrtAr˂plJtArv`f|drf`vXXQr˂JtArdHfpvrXQJ`|drf`vXbtlXv`f˂bbnvpZHAb|ZdQnXvےbHAtAJlnvpJlt`JXQrd|Z~HfptAJlnvppZHAb|ZdQnXvےbHAtAJlnr˂JtArd~HfHAZp˂pfHے`Jbtl`f~Zp˂tbdQZfH~bdQZ|˂pZdQbtvnXtbdQZfH~ے`Jbtl`f~Zp˂tbdQZpZHAb|ZdQpvnrXQJf`vXXQr˂JtArdHfpvrXQJ`|drf`vXdrtAHAbےlJtArv`f|drf`vXXQr˂JtArdHfpvrXQJ`|dtAے`JbtlXv`f`ےbnvppZHAb|ZdQnXvےbHAtAJlnvpJlt`JXQrd|ZrQJHAtAJlnvppZHAb|ZdQnXvےbHAJltXQr˂JtArd~HfHAZp˂fH~ے`Jbtl`f~Zp˂tbdQZfH~bdQZ|˂pZdQtArdZp˂tbdQZfH~ے`Jbtl`f~Zp˂bnvpZHAb|ZdQpvrXQJf`vXXQr˂JtArdHfpvrXQJ`|drf`vX`vXnHAb|ZdQrXQJ`|drf`vXXQr˂JtArdHfpvrXQJ`pfHے`Jbtl~Hfp`p˂nvppZHAb|ZdQnXvےbHAtAJlnr˂XQr˂vpf˂pZHAbtlےbHAtAJlnvppZHAb|ZdQnXvےbHAf`vXXQr˂JtArdvnXrbdQZfH~ے`Jbtl`f~Zp˂tbdQZpZHAbpZHAbH~fbے`JtArdZp˂tbdQZfH~ے`Jbtl`f~Zp˂nvppZHAb|ZdQv`f|rAJlf`vXXQr˂JtArdHfpvrXQJ`|dtAے`Jے`J`vXnJXQr|ZdQrXQJ`|drf`vXXQr˂JtArdHfpvrbdQZfH~ے`Jbtl~HfptbdnvppZHAb|ZdQnXvےbHAJltXQr˂XQr˂vpf˂pZHAbtlےbHAtAJlnvppZHAb|ZdQnXv|drf`vXXQr˂JtArdvnXQZ|dfH~ے`Jbtl`f~Zp˂bnvpZHAbpZHAbH~fbے`|ZdQbZp˂tbdQZfH~ے`Jbtl`fHtAJlnvppZHAb|ZdQv`pvrtAJlf`vXXQr˂JtArdHfpvrXQJ`pfHے`Jے`JXQr˂JtArdHfpvrXQJ`f`vXrZHAbtl`f~Zp˂nvppZHAb|ZdQnXvےbHAtAJlnvptlJv`frXQJ`|dtAے`Jbtl`f~Zp˂tbdQZfH~QXb㉀ۍpfH~pZHAb|ZdQnXvےbHAnvpbے`JtArdHfpvrbdQZfH~ے`Jbtl`f~Zp˂tbdQZfH~tArd~HfpےbHAJltXQr˂JtArdHfpvrXQJ`|drf`vXp`ZQXf۝`vے`Jbtl`f~Zp˂`vXnJXQr|ZdQnXv|drf`vXXQr˂JtArdHfpvrXQJ`|drf`vX|ZdQbvnXZp˂bnvpZHAb|ZdQnXvےbHAtAJlnvpb㉀ۑpXnvXQr˂JtArdHfpvrXQJ`vpfpZHAbtl`fHtAJlnvppZHAb|ZdQnXvےbHAtAJlnr˂tlJv`f~frXQJ`pfHے`Jbtl`f~Zp˂tbdQZfH~JAHr󙐍pfH~pZHAb|ZdQnXvےbHAH~fbے`JtArdfpvtbdQZfH~ے`Jbtl`f~Zp˂tbdQZp`JXQtArdtpvnےbHAf`vXXQr˂JtArdHfpvrXQJ`|drf`vXˁ`ZQXf۝`vے`Jbtl`f~Zp˂`vXnJXQr|ZdQnrXQJ|drf`vXXQr˂JtArdHfpvrXQJ`|dtAr˂plJtAXv`fZp˂nvppZHAb|ZdQnXvےbHAtAJlnvpb㉀ۑpXnvXQr˂JtArdHfpvrbdQZvpfpZAbbtl`ےHAtAJlnvppZHAb|ZdQnXvےbHAJltZHAbrd|~HfrbdQZfH~ے`Jbtl`f~Zp˂tbdQZfH~JAHr󙐍pfH~pZHAb|ZdQnXv|ltH~`JXQrJtArdZp˂tbdQZfH~ے`Jbtl`f~Zp˂bnvے`JXQZdQbtpvn|drf`vXXQr˂JtArdHfpvrXQJ`|drf`vXۑpJf۝`vے`Jbtl`fHbdQZ|vpfH˂pZ|ZdQrXQJ`|drf`vXXQr˂JtArdHfpvrXQJ`pfHr˂plJtAXv`ftAJlnvppZHAb|ZdQnXvےbHAtAJlnے`JAHr󙐂˅XnvXQr˂JtArdfpvdrtA~f`HAbےbnXvےbHAtAJlnvppZHAb|ZdQnXvےbHAf`vXZHAbrd|fpvtbdQZfH~ے`Jbtl`f~Zp˂tbdQZXQr˂`ZQXbp|dpZHAb|ZdQnrXQJJltvXn`JXQr`f~Zp˂tbdQZfH~ے`Jbtl`f~Zp˂nvp˂pZZdQtArnrXQJ|drf`vXXQr˂JtArdHfpvrXQJ`|dtApZHAbۑpJrQtJlے`Jbtl`ےHAbdQZ|vpfH˂pZAHfpvrXQJ`|drf`vXXQr˂JtArdHfpvrbdQZfH~HAbےd|Z`ےHAtAJlnvppZHAb|ZdQnXvےbHAJltے`JAHr󙐂˒tbAdXQr˂JtArdZp˂drtA~f``JXQnXvےbHAtAJlnvppZHAb|ZdQnXv|drf`vX`JXQrdQbtZp˂tbdQZfH~ے`Jbtl`f~Zp˂bnvXQr˂`ZQXAHZ|dpZHAb|ZdQrXQJ`dQZ|vXH~rbt`f~Zp˂tbdQZfH~ے`Jbtl`fHtAJlnvp˂pZlJtArrXQJ`|drf`vXXQr˂JtArdHfpvrXQJ`pfHpZHAbr󙐂ˁ`rQtJlے`JbnXvےbHAdrtAJf`vlJtAdHfpvrXQJ`|drf`vXXQr˂JtArdfpvtbdQZfH~HAbےd|ZےbHAtAJlnvppZHAb|ZdQnXvےbHAf`vX˂pZQXb㉀tbAdXQr˂`f~Zp˂ltbXnv|ZdQnXvےbHAtAJlnvppZHAb|ZdQnrXQJ|drf`vX`JXQHAdQbtZp˂tbdQZfH~ے`Jbtl`f~Zp˂nvpZHAbۑpJAHZ|dpZHAHfpvrXQJ`dQZ|pfH~btl`f~Zp˂tbdQZfH~ے`Jbtl`ےHAtAJlnvpbے`l|ZdQrXQJ`|drf`vXXQr˂JtArdHfpvrbdQZfH~ے`JXQr󙐂ˁ`rQtJlے`JXQnXvےbHAdrtAJf`vJtArdHfpvrXQJ`|drf`vXXQr˂JtArdZp˂tbdQZfH~JXQrbnXvےbHAtAJlnvppZHAb|ZdQnXv|drf`vXr˂pZQXb㉀tbAdrbt`f~Zp˂ltdXnv|ZdQnXvےbHAtAJlnvppZHAb|ZdQrXQJ`|drf`vX˂pZHA`f~fpZp˂tbdQZfH~ے`Jbtl`fHtAJlnvpZHAbXnvZ|dlJtAdHfpvrXQJ`rtAJlp`vXbtl`f~Zp˂tbdQZfH~ے`JbnXvےbHAtAJlnvpbے`vnXrXQJ`|drf`vXXQr˂JtArdfpvtbdQZfH~ے`JXQpfH~rQtJl|ZdQnXvےbHAtbdQnr˂JtArdHfpvrXQJ`|drf`vXXQr˂`f~Zp˂tbdQZfH~JXQrv`fےbHAtAJlnvppZHAb|ZdQnrXQJ|drf`vXHAbےf۝`vtbAdbtl`f~Zp˂Z|dpZAb`|ZdQnXvےbHAtAJlnvppZHAHfpvrXQJ`|drf`vX˂p`J~HfpZp˂tbdQZfH~ے`Jbtl`ےHAtAJlnvp`JXQrXnvZ|dJtArdHfpvrXQJ`rtAJlJXQrbtl`f~Zp˂tbdQZfH~ے`JXQnXvےbHAtAJlnvpXQr˂vnXrXQJ`|drf`vXXQr˂JtArdZp˂tbdQZfH~˂pZpfH~rQtJl|ZdQnXvےbHAtbdQ˂pZHJtArdHfpvrXQJ`|drf`vXrbt`f~Zp˂tbdQZfH~pZHAbv`fےbHAtAJlnvppZHAb|ZdQrXQJ`|drf`vXHAbےf۝`vtbAdbtl`f~Zp˂Z|lAbے`|ZdQnXvےbHAtAJlnvplJtAdHfpvrXQJ`|drf`vXے`J~HfvZp˂tbdQZfH~ے`JbnXvےbHAtAJlnvp`JXQrXnvZ|dJtArdHfpvrXQJ`tbdQZJXQrbtl`f~Zp˂tbdQZfH~|ZdQnXvےbHAtAJlnvpXQr˂nXv`rXQJ`|drf`vXXQr˂`f~Zp˂tbdQZfH~˂p`pfH~rQtJl|ZdQnXvےbHA|dr˂pZHJtArdHfpvrXQJ`|drf`vXbtl`f~Zp˂tbdQZfH~p`JXQf~HےbHAtAJlnvppZHAHfpvrXQJ`|drf`vXJXQrf۝`vtbAdbtl`f~Zp˂tAJlAbJ|ZdQnXvےbHAtAJlnr˂JtArdHfpvrXQJ`|drf`vXrbtfpvZp˂tbdQZfH~ے`JXQnXvےbHAtAJlnvp˂pZHAXnvZ|dJtArdHfpvrXQJ`tbdQZQr˂pbtl`f~Zp˂tbdQZpZHAb|ZdQnXvےbHAtAJlnvpl|ZdQnXv`rXQJ`|drf`vXrbt`f~Zp˂tbdQZfH~bے`pfH~rQtJl|ZdQnXvےbHA|ltZHAbJtArdHfpvrXQJ`|dtAے`Jbtl`f~Zp˂tbdQZfH~btlf~HےbHAtAJlnvplJtAdHfpvrXQJ`|drf`vXJXQrf۝`vtbAdbtl`f~Zp˂bnvے`JXQ|ZdQnXvےbHAJltXQr˂JtArdHfpvrXQJ`|drf`vXJtArdfpvZp˂tbdQZfH~|ZdQnXvےbHAtAJlnvp˂p`ZXnvZ|dJtArdHfpvrXQJ`p`vXr˂pbtl`f~Zp˂bnvpZHAb|ZdQnXvےbHAtAJlnvp|ZdQnvfrXQJ`|drf`vXbtl`f~Zp˂tbdQZfH~QXb㉀ۍpfH~rQtJl|ZdQnXvےbHAnvpZHAbJtArdHfpvrXQJ`pfHے`Jbtl`f~Zp˂tbdQZfH~btl~HfpےbHAtAJlnr˂JtArdHfpvrXQJ`|drf`vXpJAHrf۝`vtbAdbtl`f~Zp˂fH~ے`JXQ|ZdQnXvےbHAf`vXXQr˂JtArdHfpvrXQJ`|drf`vX|ZdQbvnXZp˂tbdQZpZHAb|ZdQnXvےbHAtAJlnvpˁ`ZXnvZ|drQtqrstuvwxxwvutsr2222222222222222222222222222333333 \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv27_0.dat b/vendor/endroid/qr-code/assets/data/qrv27_0.dat new file mode 100644 index 000000000..7fde28104 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv27_0.dat @@ -0,0 +1,249 @@ +|{|{|{|{|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvuststststrqrqrqrqpopopoponmnmnmnmnmlklklklklklklkjijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWXWWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOPONMNMNMNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=;;<;<;<;:9:9:9:9:9:9:9:987878787656565654343434321212121|{|{|{|{|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvusssssstsrqrqrqrqpopopoponmnmnmnmlklklklklklklklkjijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWXXWVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:9:987878787878787656565654343434321212121|{|{|{|{|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklklklklklkjijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWXVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878787878787656565654343434321212121|{|{|{|{|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklklklklklkjijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWXVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878787878787656565654343434321212121|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklklklklklkjijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWXVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878787878787656565654343434321212121|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklklklklklkjijijijihghghghgfefefefedcdcdcdcdcbababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWWWWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEFEDCDCDCDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878787878787656565654343434321212121|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwtstststststststsrqrqrqrqpopopoponmnmnmnmlklklklklkjijijijijijijihghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMNMLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?>=>=>=>=;;;;;<;<:9:9:9:98787878787878787656565654343434321212121|{|{|{|{zyzyzyzyzyzyzyzyvuvuvuvussssststtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijijijijijihghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?>=>=>=>=;<;<;<;<:9:9:9:98787878787656565656565654343434321212121|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvuststststqqqqqqrqrqrqrqrqpopopoponmnmnmnmlklklklkjijijijijijijijihghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?>=>=>=>=;<;<;<;<:9:9:9:98787878765656565656565654343434321212121|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvuststststrqrqrqrqrqrqrqrqpopopoponmnmnmnmlklklklkjijijijijijijijihghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?>=>=>=>=;<;<;<;<:9:9:9:98787878765656565656565654343434321212121|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvuststststrqrqrqrqrqrqrqrqpopopoponmnmnmnmlklklklkjijijijijijijijihghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?>=>=>=>=;<;<;<;<:9:9:9:98787878765656565656565654343434321212121|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvuststststrqrqrqrqrqrqrqrqpopopoponmnmnmnmlklklklkjijijijijijijijihghghghgfefefefedcdcdcdcbababababa`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCDCBABABABABABABA@?@?@?@?>=>=>=>=;<;<;<;<:9:9:9:98787878765656565656565654343434321212121|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvuststststrqrqrqrqrqrqrqrqpopopoponmnmnmnmlklklklkjijijijijihghghghghghghgfefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWWWWWXWXVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKLKJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=;<;;;;;;:9:9:9:98787878765656565656565654343434321212121|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvustssssssrqrqrqrqrqpopopopopopoponmnmnmnmlklklklkjijijijihghghghghghghghgfefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWXVUVUVUVUTSTSTSTSTSRQRQRQRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878765656565654343434343434321212121|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopopopopoponmnmnmnmlklklklkjijijijihghghghghghghghgfefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWXVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878765656565434343434343434321212121|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopopopopoponmnmnmnmlklklklkjijijijihghghghghghghghgfefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWXVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878765656565434343434343434321212121|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopopopopoponmnmnmnmlklklklkjijijijihghghghghghghghgfefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWXVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878765656565434343434343434321212121|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopopopopoponmnmnmnmlklklklkjijijijihghghghghghghghgfefefefedcdcdcdcbabababa`_`_`_`_`_^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWXVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABABA@?@?@?@?>=>=>=>=<;<;<;<;<;<;<;:9:9:9:98787878765656565434343434343434321212121|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopopopopoponmnmnmnmlklklklkjijijijihghghghghgfefefefefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYWXWWWWWWVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIJIHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;;;;;;<<;<;<;;;:9:9:9:98787878765656565434343434343434321212121|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutststsssrqrqrqrqpopopopoponmnmnmnmnmnmnmlklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=;<;<;<;<;;<;<;<;:9:9:9:98787878765656565434343434321212121212121|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvussstststrqrqrqrqpopopoponmnmnmnmnmnmnmnmlklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=;<;<;<;<<;:9:9:9:9:9:9:98787878765656565434343432121212121212121|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvuststststrqrqrqrqpopopoponmnmnmnmnmnmnmnmlklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=;<;<;<;<:9:9:9:9:9:9:9:98787878765656565434343432121212121212121|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvuststststrqrqrqrqpopopoponmnmnmnmnmnmnmnmlklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=;<;<;<;<:9:9:9:9:9:9:9:98787878765656565434343432121212121212121210/0/0/|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvuststststrqrqrqrqpopopoponmnmnmnmnmnmnmnmlklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=;<;<;<;<:9:9:9:9:9:9:9:987878787656565654343434321212121212121210/0/0/0/|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvuststststrqrqrqrqpopopoponmnmnmnmnmnmnmnmlklklklkjijijijihghghghgfefefefefedcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWWWWWWXXWXWXWWWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGHGFEFEFEFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=;<;<;;;;:9:9:9:9:9:9:9:987878787656565654343434321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + + + + + 0/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + + + + + 0/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!        + + + + + 0/0/0/0/0/.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!     + + + + 0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!        + + + + 0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!        + + + + 0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!        + + + + 0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!        + + + + 0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%$#$#$#$#"!"!"!"!           + + + + 0/0/0/0/.-.-.-.-.-,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!           + + + + 0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!               + + + + 0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!            + + + + 0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!            + + + + 0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!            + + + + 0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!            + + + + 0/0/0/0/.-.-.-.-,+,+,+,+,+*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!       + + + + 0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!       + + + + 0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + 0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + 0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + 0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + 0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + + + + 0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!      + + + + + + + + 0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + + + + + 0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + + + + + ||{{zzyy]]^^__``))((''&&``aabbcc)((''&&%HHIIJJKKMMLLKKJJ||||{{zzLLMMNNOOIIHHGGFFyyxxwwvvPPQQRRSSEEDDCCBB !!""##ppoonnmm srrqqppo``aabbcc5544332200112233eeddccbbddeeffgg1100//..44556677aa``__^^hhiijjkk--,,++**8899::;;SSRRQQPP))**++,,YXWWVVUUxxyyzz{{HHIIJJKKMMLLKKJJxxwwvvuuaabbccdd%%ddeeffgg%$#"! LLMMNNOOIIHHGGFFyyxxwwvvPPQQRRSSEEDDCCBB !!""##uuttssrrTTUUVVWWAA@@??>>$$%%&&''llkkjjiionnmmllkddeeffgg1100//..44556677aa``__^^hhiijjkk--,,++**8899::;;]]\\[[ZZ + + llmmnnoo))((''&&<<==>>??OONNMMLL--..//00TTSSRRQQ||||{{zzLLMMNNOOIIHHGGFFttssrrqq eeffgghhhhiijjkkPPQQRRSSEEDDCCBB !!""##uuttssrrTTUUVVWWAA@@??>>$$%%&&''qqppoonn + +XXYYZZ[[==<<;;::(())**++hhggffeekjjiihhghhiijjkk--,,++**8899::;;]]\\[[ZZ + + llmmnnoo))((''&&<<==>>??YYXXWWVV ppqqrrss%%$$##""@@AABBCCKKJJIIHH11223344PPOONNMMyyxxwwvvPPQQRRSSEEDDCCBB !!""##ppoonnmm + + iijjkkllllmmnnooTTUUVVWWAA@@??>>$$%%&&''qqppoonn + +XXYYZZ[[==<<;;::(())**++mmllkkjj \\]]^^__99887766,,--..//ddccbbaagffeeddc + + llmmnnoo))((''&&<<==>>??YYXXWWVV ppqqrrss%%$$##""@@AABBCCUUTTSSRRttuuvvww!! DDEEFFGGGGFFEEDD55667788LLKKJJII !!""##uuttssrrTTUUVVWWAA@@??>>$$%%&&''llkkjjii + + mmnnooppppqqrrssXXYYZZ[[==<<;;::(())**++mmllkkjj \\]]^^__99887766,,--..//iihhggff``aabbcc5544332200112233``__^^]]cbbaa``_ ppqqrrss%%$$##""@@AABBCCUUTTSSRRttuuvvww!! DDEEFFGGQQPPOONNxxyyzz{{HHIIJJKKCCBBAA;;99::;;AAHHGGFFEE$$%%&&''qqppoonn + +XXYYZZ[[==<<;;::(())**++hhggffee qqrrsstt yyzz{{||\\]]^^__99887766,,--..//iihhggff``aabbcc5544332200112233eeddccbbddeeffgg1100//..44556677WWVVUUTT%%&&''((_^^]]\[Zttuuvvww!! DDEEFFGGQQPPOONNxxyyzz{{HHIIJJKKMMLLKKJJ||||{{zzLLMMNNOO::998877BBCCDDEEDDCCBBAA(())**++mmllkkjj \\]]^^__99887766,,--..//ddccbbaauuvvwwxx + + ||{{zzyy ``aabbcc5544332200112233eeddccbbddeeffgg1100//..44556677aa``__^^hhiijjkk--,,++**8899::;;SSRRQQPP))**++,,YXWWVVUUxxyyzz{{HHIIJJKKMMLLKKJJ||||{{zzLLMMNNOOIIHHGGFFyyxxwwvvPPQQRRSS66554433FFGGHHII@?>=<;;:,,--..//iihhggff``aabbcc5544332200112233``__^^]]yyzz{{|| + + xwvutssr + + ddeeffgg1100//..44556677aa``__^^hhiijjkk--,,++**8899::;;]]\\[[ZZ + + llmmnnoo))((''&&<<==>>??OONNMMLL--..//00TTSSRRQQ||||{{zzLLMMNNOOIIHHGGFFyyxxwwvvPPQQRRSSEEDDCCBB !!""##uuttssrrTTUUVVWW221100//JJKKLLMM:998877600112233eeddccbbddeeffgg1100//..44556677\\[[ZZYY||{{zzyy rqqppoonhhiijjkk--,,++**8899::;;]]\\[[ZZ + + llmmnnoo))((''&&<<==>>??YYXXWWVV ppqqrrss%%$$##""@@AABBCCKKJJIIHH11223344PPOONNMMyyxxwwvvPPQQRRSSEEDDCCBB !!""##uuttssrrTTUUVVWWAA@@??>>$$%%&&''qqppoonn + +XXYYZZ[[..--,,++NNOOPPQQ6554433244556677aa``__^^hhiijjkk--,,++**8899::;;XXWWVVUU ssrrqqppnmmllkkj + + llmmnnoo))((''&&<<==>>??YYXXWWVV ppqqrrss%%$$##""@@AABBCCUUTTSSRRttuuvvww!! DDEEFFGGGGFFEEDD55667788LLKKJJII !!""##uuttssrrTTUUVVWWAA@@??>>$$%%&&''qqppoonn + +XXYYZZ[[==<<;;::(())**++mmllkkjj \\]]^^__**))((''RRSSTTUU21100//.8899::;;]]\\[[ZZ + + llmmnnoo))((''&&<<==>>??TTSSRRQQ!!""##$$oonnmmlljiihhggf ppqqrrss%%$$##""@@AABBCCUUTTSSRRttuuvvww!! DDEEFFGGQQPPOONNxxyyzz{{HHIIJJKKCCBBAA;;99::;;AAHHGGFFEE$$%%&&''qqppoonn + +XXYYZZ[[==<<;;::(())**++mmllkkjj \\]]^^__99887766,,--..//iihhggff``aabbcc&&%%VVWW]]^^.--,,++*<<==>>??YYXXWWVV ppqqrrss%%$$##""@@AABBCCPPOONNMM%%&&''((kkjjiihhfeeddccbttuuvvww!! DDEEFFGGQQPPOONNxxyyzz{{HHIIJJKKMMLLKKJJ||||{{zzLLMMNNOO::998877BBCCDDEEDDCCBBAA(())**++mmllkkjj \\]]^^__99887766,,--..//iihhggff``aabbcc5544332200112233eeddccbbddeeffgg__``aabb*))((''&@@AABBCCUUTTSSRRttuuvvww!! DDEEFFGGLLKKJJII))**++,,ggffeedd%%baa``__^xxyyzz{{HHIIJJKKMMLLKKJJ||||{{zzLLMMNNOOIIHHGGFFyyxxwwvvPPQQRRSS66554433FFGGHHII@?>=<;;:,,--..//iihhggff``aabbcc5544332200112233eeddccbbddeeffgg1100//..44556677aa``__^^hhiijjkkccddeeff&%%$#"! DDEEFFGGQQPPOONNxxyyzz{{HHIIJJKKHHGGFFEE--..//00ccbbaa``&&''(())^]]\[ZYX||||{{zzLLMMNNOOIIHHGGFFyyxxwwvvPPQQRRSSEEDDCCBB !!""##uuttssrrTTUUVVWW221100//JJKKLLMM:998877600112233eeddccbbddeeffgg1100//..44556677aa``__^^hhiijjkk--,,++**8899::;;]]\\[[ZZ + + llmmnnoogghhiijjHHIIJJKKMMLLKKJJ||||{{zzLLMMNNOODDCCBBAA11223344__^^]]WW**++,,--WWVVUUTTyyxxwwvvPPQQRRSSEEDDCCBB !!""##uuttssrrTTUUVVWWAA@@??>>$$%%&&''qqppoonn + +XXYYZZ[[..--,,++NNOOPPQQ6554433244556677aa``__^^hhiijjkk--,,++**8899::;;]]\\[[ZZ + + llmmnnoo))((''&&<<==>>??YYXXWWVV ppqqrrsskkllmmnnLLMMNNOOIIHHGGFFyyxxwwvvPPQQRRSS@@??>>==55667788VVUUTTSS..//0011SSRRQQPP !!""##uuttssrrTTUUVVWWAA@@??>>$$%%&&''qqppoonn + +XXYYZZ[[==<<;;::(())**++mmllkkjj \\]]^^__**))((''RRSSTTUU21100//.8899::;;]]\\[[ZZ + + llmmnnoo))((''&&<<==>>??YYXXWWVV ppqqrrss%%$$##""@@AABBCCUUTTSSRRttuuvvww + +ooppqqrrPPQQRRSSEEDDCCBB !!""##uuttssrrTTUUVVWW<<;;::9999::;;<>??YYXXWWVV ppqqrrss%%$$##""@@AABBCCUUTTSSRRttuuvvww!! DDEEFFGGQQPPOONNxxyyzz{{ ssyyzz{{TTUUVVWWAA@@??>>$$%%&&''qqppoonn + +XXYYZZ[[88776655==>>??@@NNMMLLKK66778899KKJJIIHH(())**++mmllkkjj \\]]^^__99887766,,--..//iihhggff``aabbcc5544332200112233eeddccbbddeeffgg__``aabb*))((''&@@AABBCCUUTTSSRRttuuvvww!! DDEEFFGGQQPPOONNxxyyzz{{HHIIJJKKMMLLKKJJ||||{{zz||||{{zz XXYYZZ[[==<<;;::(())**++mmllkkjj \\]]^^__44332211AABBCCDDJJIIHHGG::;;AABBGGFFEEDD,,--..//iihhggff``aabbcc5544332200112233eeddccbbddeeffgg1100//..44556677aa``__^^hhiijjkkccddeeff&%%$#"! DDEEFFGGQQPPOONNxxyyzz{{HHIIJJKKMMLLKKJJ||||{{zzLLMMNNOOIIHHGGFFyyssrrqq + + yyxwvuts + + \\]]^^__99887766,,--..//iihhggff``aabbcc00//..--EEFFGGHHFFEEDDCCCCDDEEFFCCBBAA@?00112233eeddccbbddeeffgg1100//..44556677aa``__^^hhiijjkk--,,++**8899::;;]]\\[[ZZ + + llmmnnoogghhiijjHHIIJJKKMMLLKKJJ||||{{zzLLMMNNOOIIHHGGFFyyxxwwvvPPQQRRSSEEDDCCBB !!""##ppoonnmm srrqqppo``aabbcc5544332200112233eeddccbbddeeffgg,,++**))IIJJKKLLBBAA;;::GGHHIIJJ>=<;;::944556677aa``__^^hhiijjkk--,,++**8899::;;]]\\[[ZZ + + llmmnnoo))((''&&<<==>>??YYXXWWVV ppqqrrsskkllmmnnLLMMNNOOIIHHGGFFyyxxwwvvPPQQRRSSEEDDCCBB !!""##uuttssrrTTUUVVWWAA@@??>>$$%%&&''llkkjjiionnmmllkddeeffgg1100//..44556677aa``__^^hhiijjkk((''&&%%MMNNOOPP99887766KKLLMMNN988776658899::;;]]\\[[ZZ + + llmmnnoo))((''&&<<==>>??YYXXWWVV ppqqrrss%%$$##""@@AABBCCUUTTSSRRttuuvvww + +ooppqqrrPPQQRRSSEEDDCCBB !!""##uuttssrrTTUUVVWWAA@@??>>$$%%&&''qqppoonn + +XXYYZZ[[==<<;;::(())**++hhggffeekjjiihhghhiijjkk--,,++**8899::;;]]\\[[ZZ + + llmmnnoo$$##""!!QQRRSSTT55443322OOPPQQRR54433221<<==>>??YYXXWWVV ppqqrrss%%$$##""@@AABBCCUUTTSSRRttuuvvww!! DDEEFFGGQQPPOONNxxyyzz{{ ssyyzz{{TTUUVVWWAA@@??>>$$%%&&''qqppoonn + +XXYYZZ[[==<<;;::(())**++mmllkkjj \\]]^^__99887766,,--..//ddccbbaagffeeddc + + llmmnnoo))((''&&<<==>>??YYXXWWVV ppqqrrss||||{{zz UUVVWWXX1100//..SSTTUUVV100//..-@@AABBCCUUTTSSRRttuuvvww!! DDEEFFGGQQPPOONNxxyyzz{{HHIIJJKKMMLLKKJJ||||{{zz||||{{zz XXYYZZ[[==<<;;::(())**++mmllkkjj \\]]^^__99887766,,--..//iihhggff``aabbcc5544332200112233``__^^]]cbbaa``_ ppqqrrss%%$$##""@@AABBCCUUTTSSRRttuuvvwwyyxxwwvvYYZZ[[\\--,,++**WW]]^^__-,,++**)DDEEFFGGQQPPOONNxxyyzz{{HHIIJJKKMMLLKKJJ||||{{zzLLMMNNOOIIHHGGFFyyssrrqq + + yyxwvuts + + \\]]^^__99887766,,--..//iihhggff``aabbcc5544332200112233eeddccbbddeeffgg1100//..44556677WWVVUUTT%%&&''((_^^]]\[Zttuuvvww!! DDEEFFGGQQPPOONNxxyyzz{{uuttssrrqqppoonn + +XXYYZZ[[==<<;;::(())**++mmllkkjj \\]]^^__**))((''RRSSTTUU21100//.8899::;;]]\\[[ZZ + + llmmnnoo))((''&&<<==>>??YYXXWWVV ppqqrrss%%$$##""@@AABBCCUUTTSSRRttuuvvww + + + +iihhggff mmllkkjj \\]]^^__99887766,,--..//iihhggff``aabbcc&&%%VVWW]]^^.--,,++*<<==>>??YYXXWWVV ppqqrrss%%$$##""@@AABBCCUUTTSSRRttuuvvww!! DDEEFFGGQQPPOONNxxyyzz{{ eeddccbbiihhggff``aabbcc5544332200112233eeddccbbddeeffgg__``aabb*))((''&@@AABBCCUUTTSSRRttuuvvww!! DDEEFFGGQQPPOONNxxyyzz{{HHIIJJKKMMLLKKJJ||ttssrraa``__^^eeddccbbddeeffgg1100//..44556677aa``__^^hhiijjkkccddeeff&%%$#"! DDEEFFGGQQPPOONNxxyyzz{{HHIIJJKKMMLLKKJJ||||{{zzLLMMNNOOIIHHGGFFqqppoonn]]\\[[ZZaa``__^^hhiijjkk--,,++**8899::;;]]\\[[ZZ + + llmmnnoogghhiijjHHIIJJKKMMLLKKJJ||||{{zzLLMMNNOOIIHHGGFFyyxxwwvvPPQQRRSSEEDDCCBB !!""##mmllkkjjYYXXWWVV]]\\[[ZZ + + llmmnnoo))((''&&<<==>>??YYXXWWVV ppqqrrsskkllmmnnLLMMNNOOIIHHGGFFyyxxwwvvPPQQRRSSEEDDCCBB !!""##uuttssrrTTUUVVWWAA@@??>>$$%%&&''iihhggffUUTTSSRR !!""##YYXXWWVV ppqqrrss%%$$##""@@AABBCCUUTTSSRRttuuvvww + +ooppqqrrPPQQRRSSEEDDCCBB !!""##uuttssrrTTUUVVWWAA@@??>>$$%%&&''qqppoonn + +XXYYZZ[[==<<;;::(())**++eeddccbb%%&&''QQPPOONN$$%%&&''UUTTSSRRttuuvvww!! DDEEFFGGQQPPOONNxxyyzz{{ ssyyzz{{TTUUVVWWAA@@??>>$$%%&&''qqppoonn + +XXYYZZ[[==<<;;::(())**++mmllkkjj \\]]^^__99887766,,--..//aa``__^^(())**++MMLLKKJJ(())**++QQPPOONNxxyyzz{{HHIIJJKKMMLLKKJJ||||{{zz||||{{zz XXYYZZ[[==<<;;::(())**++mmllkkjj \\]]^^__99887766,,--..//iihhggff``aabbcc5544332200112233]]WWVVUU,,--..//IIHHGGFF,,--..//MMLLKKJJ||||{{zzLLMMNNOOIIHHGGFFyyssrrqq + + yyxwvuts + + \\]]^^__99887766,,--..//iihhggff``aabbcc5544332200112233eeddccbbddeeffgg1100//..44556677TTSSRRQQ00112233EEDDCCBB00112233IIHHGGFFyyxxwwvvPPQQRRSSEEDDCCBB !!""##ppoonnmm srrqqppo``aabbcc5544332200112233eeddccbbddeeffgg1100//..44556677aa``__^^hhiijjkk--,,++**8899::;;PPOONNMM44556677AA@@??>>44556677EEDDCCBB !!""##uuttssrrTTUUVVWWAA@@??>>$$%%&&''llkkjjiionnmmllkddeeffgg1100//..44556677aa``__^^hhiijjkk--,,++**8899::;;]]\\[[ZZ + + llmmnnoo))((''&&<<==>>??LLKKJJII8899::;;==<<;;::8899::;;AA@@??>>$$%%&&''qqppoonn + +XXYYZZ[[==<<;;::(())**++hhggffeekjjiihhghhiijjkk--,,++**8899::;;]]\\[[ZZ + + llmmnnoo))((''&&<<==>>??YYXXWWVV ppqqrrss%%$$##""@@AABBCCHHGGFFEEAABBCCDD99887766<<==>>??==<<;;::(())**++mmllkkjj \\]]^^__99887766,,--..//ddccbbaagffeeddc + + llmmnnoo))((''&&<<==>>??YYXXWWVV ppqqrrss%%$$##""@@AABBCCUUTTSSRRttuuvvww!! DDEEFFGGDDCCBBAAEEFFGGHH55443322@@AABBCC99887766,,--..//iihhggff``aabbcc5544332200112233``__^^]]cbbaa``_ ppqqrrss%%$$##""@@AABBCCUUTTSSRRttuuvvww!! DDEEFFGGQQPPOONNxxyyzz{{HHIIJJKK;;::9988IIJJKKLL1100//..DDEEFFGG5544332200112233eeddccbbddeeffgg1100//..44556677WWVVUUTT%%&&''((_^^]]\[Zttuuvvww!! DDEEFFGGQQPPOONNxxyyzz{{HHIIJJKKMMLLKKJJ||||{{zzLLMMNNOO77665544MMNNOOPP--,,++**HHIIJJKK1100//..44556677aa``__^^hhiijjkk--,,++**8899::;;SSRRQQPP))**++,,YXWWVVUUxxyyzz{{HHIIJJKKMMLLKKJJ||||{{zzLLMMNNOOIIHHGGFFyyxxwwvvPPQQRRSS33221100QQRRSSTT))((''&&LLMMNNOO--,,++**8899::;;]]\\[[ZZ + + llmmnnoo))((''&&<<==>>??OONNMMLL--..//00TTSSRRQQ||||{{zzLLMMNNOOIIHHGGFFyyxxwwvvPPQQRRSSEEDDCCBB !!""##uuttssrrTTUUVVWW//..--,,UUVVWW]]%%$$##""PPQQRRSS))((''&&<<==>>??YYXXWWVV ppqqrrss%%$$##""@@AABBCCKKJJIIHH11223344PPOONNMMyyxxwwvvPPQQRRSSEEDDCCBB !!""##uuttssrrTTUUVVWWAA@@??>>$$%%&&''qqppoonn + +XXYYZZ[[++**))((^^__``aa!! TTUUVVWW%%$$##""@@AABBCCUUTTSSRRttuuvvww!! DDEEFFGGGGFFEEDD55667788LLKKJJII !!""##uuttssrrTTUUVVWWAA@@??>>$$%%&&''qqppoonn + +XXYYZZ[[==<<;;::(())**++mmllkkjj \\]]^^__''&&%%bbccddeeXXYYZZ[[!! DDEEFFGGQQPPOONNxxyyzz{{HHIIJJKKCCBBAA;;99::;;AAHHGGFFEE$$%%&&''qqppoonn + +XXYYZZ[[==<<;;::(())**++mmllkkjj \\]]^^__99887766,,--..//iihhggff``aabbccffgghhii\\]]^^__HHIIJJKKMMLLKKJJ||||{{zzLLMMNNOO::998877BBCCDDEEDDCCBBAA(())**++mmllkkjj \\]]^^__99887766,,--..//iihhggff``aabbcc5544332200112233eeddccbbddeeffggjjkkllmm``aabbccLLMMNNOOIIHHGGFFyyxxwwvvPPQQRRSS66554433FFGGHHII@?>=<;;:,,--..//iihhggff``aabbcc5544332200112233eeddccbbddeeffgg1100//..44556677aa``__^^hhiijjkknnooppqqddeeffggPPQQRRSSEEDDCCBB !!""##uuttssrrTTUUVVWW221100//JJKKLLMM:998877600112233eeddccbbddeeffgg1100//..44556677aa``__^^hhiijjkk--,,++**8899::;;]]\\[[ZZ + + llmmnnooqqppoonn + +hhiijjkkTTUUVVWWAA@@??>>$$%%&&''qqppoonn + +XXYYZZ[[..--,,++NNOOPPQQ6554433244556677aa``__^^hhiijjkk--,,++**8899::;;]]\\[[ZZ + + llmmnnoo))((''&&<<==>>??YYXXWWVV ppqqrrss mmllkkjj + + llmmnnooppqqfpvnXv`p˂rtAJlnvpے`JXbtlHfpvrXQJ`ےJltbdQZfH~XQr˂JtArdnXv`f~Zp˂|drf`vXے`JXQbtl~HfpfpvrXQJ`tAJlnvpے`JrbtJtArdnXvےbHAtbdQZpfHf`vXpZHAb|ZdQXv`fbHAZAJltf`vXnvpے`JbtlHfpvrXQJ`nXv`f~HXQJ`ےtdrtAfH~QrZHAJtArdnXvےbHAtbdQZ|drf`vXpZHAb|ZdQ`f~HfpvrXQJ`tAJlnvpr˂pJtArdvnXnrXQJےbHAtbdQZfH~XQr˂lJtAd|ZdQ`f~Zp˂|drf`vXnvpے`Jbtl~Hfp˂rbdQZ|nvpfے`JXQr˂JtArdnXvےbHAf~HfpvbHAZJltf`vXbے`|ZdQ`f~Zp˂|drtAJlnvpے`JbtlHfpvnXvےbHAtbdQZfH~ZHAb|ZdQv`f`ےHAZp˂|drf`vXpZHAb|ZdQbtlHfpvrXQJ`tAJlnvpfH~XQr˂JtArdpvnXQJ`ےdrtAfH~XQr˂pZHAb|ZdQ`f~Zp˂fpvnXv`p˂rbdQZ|nvpJXQrbtlHfpvrXQJ`tAJltbdQZfH~XQr˂JtArdnXv`fHZp˂|drf`vXے`JXQbtl~HfpZp˂rXQJ`tAJlnvpے`JbtlJtArdnXvےbHAtbdQZfH~f`vXpZHAb|ZdQXv`fbHAZJltf`vXpZHAbے`JbtlHfpvrXQJ`nXv`p˂rXQJ`ےdrtAfH~˂pZHAJtArdnXvےbHAtbdQZ|dtAf`vXpZHAb|ZdQ`f~fpvrXQJ`tAJlnvpr˂pJtArdvnXrXQJ`ےbHAtbdQZfH~XQr˂JtArd|ZdQ`f~Zp˂|drf`vXnvpے`Jbtl~HXp˂bdQZ|nvpے`JXQr˂JtArdnXvےbHAf~HXQJ`ےbHAZJltvpfbے`|ZdQ`f~Zp˂|drJltnvpے`JbtlHfpvnrXQJےbHAtbdQZfH~`JXQrtlJv`f~ےbHAZp˂|drf`vXpZHAb|ZdQbtlHfpvrXQJ`tAJlnvpfے`JXQr˂JtArdv`fbHAZpdrtAfH~XQr˂pZHA|ZdQ`f~Zp˂fpvbHAZp˂rbdQZ|ے`JXQJXQrbtlHfpvrXQJ`tAJlbnvfH~XQr˂JtArdnXv`ےHAZp˂|drf`vX˂pZtArdfpvZp˂rXQJ`tAJlnvpے`JbtlJfpvnXvےbHAtbdQZfH~XQr˂pZHAb|ZdQ~Hfp˂rXQJbdQf`vXpZHAbے`JXQbtlHfpvrXQJ`nXv`p˂rXQJ`ے`vXnrZHA˂pZHAJtArdnXvےbHAtbdQZpfHf`vXpZHAb|ZdQ`f~Zp˂rXQJ`tAJlnvpHAbے|ZdQbnXv`rXQJ`ےJltbdQZfH~XQr˂JtArdnXv`f~Zp˂|drf`vXpZHAbے`JbtlvnXJ`ےZ|dnvpے`JrbtJtArdnXvےbHAf~HXQJ`ےJltvpfbے`bJAd|ZdQ`f~Zp˂|drf`vXnvpے`JbtlHfpvrXQJ`ےbHAtbdQZfH~`JXQrtlJf~HےbHAtbdQZ|drf`vXpZHAb|ZdQ`f~HfpvrXQJ`tAJlnvpے`JXQr˂JtArdv`fbHAZprtAJlfH~XQr˂lJtAd|ZdQ`f~Zp˂fpvbHAZdrtAJH~fJXQr|ZdQbtlHfpvrXQJ`tAJlnvpfH~XQr˂JtArdnXvےbHAZp˂|drf`vX˂pZtArdfpvZp˂|drtAJlnvpے`JbtlHfpvnXvےbHAtbdQZfH~XQr˂pZHA|ZdQ~Hfp˂rXQtbdQf`vXpZHAb|ZdQbtlHfpvrXQJ`nXv`p˂rltb`vXnpZHAbtlJtArdnXvےbHAtbdQZfH~f`vXpZHAb|ZdQ`f~Zp˂rXQJ`tAJlnvpHAb|ZdQtAnXv`rXQJ`tAJltbdQZfH~XQr˂JtArdnXv`fHZp˂|drf`vXpZHAbے`JXQbtlv~J`p˂Z|dnvpے`JbtlJtArdnXvےbHAf~HXQJ`ےdQZ|vpfbے`JtArd|ZdQ`f~Zp˂|drf`vXnvpے`JbtlHfpvrXQJ`ےJltbdQZfH~˂pZHArd|f~HےbHAtbdQZ|dtAf`vXpZHAb|ZdQ`f~fpvrXQJ`tAJlnvpے`JrbtJtArdHfpvrXQJrtAJlfH~XQr˂JtArd|ZdQ`f~Zp˂fpvbHAZdrtAJH~JXQr|ZdQbtlHfpvrXQJ`tAJlnvpfے`JXQr˂JtArdnXvےbHAtbdQZ|drf`vXbے`ZdQbtfvnXZp˂|drJltnvpے`JbtlHfpvnrXQJےbHAtbdQZfH~XQr˂lJtAd|ZdQnXv`ےbtbQZf`vXpZHAb|ZdQbtlHfpvrXQJ`nXv`p˂rltbvpfHpZAbbtlJfpvnXvےbHAtbdQZfH~XQr˂pZHAb|ZdQ`f~Zp˂|drtAJlnvpJXQrlJtAv`frXQJ`tAJlbnvfH~XQr˂JtArdnXv`ےHAZp˂|drf`vXpZHAb|ZdQbtl`f~HAZp˂drtAJnvpے`JbtlJfpvnXvےbHAf~HXQJ`ےdQZ|l~f``JXQrJtArdnXv`f~Zp˂|drf`vXpZHAbے`JbtlHfpvrXQJ`tAJltbdQZfH~˂pZHArd|~HfpےbHAtbdQZpfHf`vXpZHAb|ZdQ`f~Zp˂rXQJ`tAJlnvpے`JbtlJtArdHfpvrXQJltbfH~XQr˂JtArdnXv`f~Zp˂fpvbHAZtbdQvXn˂pZ|ZdQ`f~HfpvrXQJ`tAJlnvpے`JXQr˂JtArdnXvےbHAtbdQZ|dtAf`vXbے`ZdQbtvnXZp˂|drf`vXnvpے`JbtlHfpvrXQJ`ےbHAtbdQZfH~XQr˂JtArd|ZdQnXv`ےbdQZ|f`vXpZHAb|ZdQ`f~HfpvrXQJ`nXv`p˂rZ|dvpfHHAbےbtlHfpvnXvےbHAtbdQZfH~XQr˂pZHA|ZdQ`f~Zp˂|drJltnvpJXQHAbl|Zv`frXQJ`tAJlnvpfH~XQr˂JtArdnXvےbHAZp˂|drf`vXpZHAb|ZdQbtl`pvHAXQJ`drtAJnvpے`JbtlHfpvnXvےbHAf~HXQJ`ےrtAJl~f``JXQrJtArdnXv`fHZp˂|drf`vXpZHAbے`JXQbtlHfpvrXQJ`tAJlbnvfH~ے`JdQbt~HfpےbHAtbdQZfH~f`vXpZHAb|ZdQ`f~Zp˂rXQJ`tAJlnvpے`JbtlJfpvnrXQJےJlltbfH~XQr˂JtArdnXv`fHZp˂fpvbHAZtbdQvXH~˂pZ|ZdQ`f~fpvrXQJ`tAJlnvpے`JrbtJtArdnXvےbHAtbdQZpfHf`vXXQr˂lJtArvnvfZp˂|drf`vXnvpے`JbtlHfpvrXQJ`ےJltbdQZfH~XQr˂JtArd~H`p˂tbQZddQZ|f`vXpZHAb|ZdQ`f~fpvrXQJ`nXv`p˂rZ|df`vHAbbtlHfpvnrXQJےbHAtbdQZfH~XQr˂lJtAd|ZdQ`f~Zp˂|drf`vXnvppZHAbd|Z~HfrXQJ`tAJlnvpfے`JXQr˂JtArdnXvےbHAtbdQZ|drf`vXpZHAb|ZdQfpvrXQJ`rtAJlAJltnvpے`JbtlHfpvnrXQJےbHAf~HXQJ`ےrtAdQZXnvJQr˂pJtArdnXv`ےHAZp˂|drf`vXpZHAb|ZdQbtlHfpvrXQJ`tAJlnvpfH~ے`JdQbtpvnےbHAtbdQZfH~XQr˂pZHAb|ZdQ`f~Zp˂|drtAJlnvpے`JbtlnXv`ےbHAtbdbnvfH~XQr˂JtArdnXv`ےHAZp˂fpvbHAZ|drpfH~ZHAb|ZdQ`f~Zp˂rXQJ`tAJlnvpے`JbtlJtArdnXvےbHAtbdQZfH~f`vXXQr˂lJtArXv`fZp˂|drf`vXpZHAbے`JbtlHfpvrXQJ`tAJltbdQZfH~XQr˂JtArdf~HZp˂QZ|dpfHf`vXpZHAb|ZdQ`f~Zp˂rXQJ`nXv`p˂rtAJl璐f`vے`JXbtlHfpvrXQJ`ےbHAtbdQZfH~XQr˂JtArd|ZdQ`f~Zp˂|drf`vXnvpp`JXQdtl~HfrXQJ`tAJlnvpے`JXQr˂JtArdnXvےbHAtbdQZ|dtAf`vXpZHAb|ZdQfpvrXQJ`rtAJlf`vXnvpے`JbtlHfpvrXQJ`ےbHAےJlf~HXQJ`ےtbdQZXnvQr˂pJtArdnXvےbHAZp˂|drf`vXpZHAb|ZdQbtlHfpvrXQJ`tAJlnvpfے`JrbtJfpvpvnےbHAtbdQZfH~XQr˂pZHA|ZdQ`f~Zp˂|drJltnvpے`JbtlnXv`ےbHAtbdnvpfH~XQr˂JtArdnXvےbHAZp˂tbdQZfpvbHAZ|drp`vXZHAb|ZdQ`f~Zp˂rXQJ`tAJlnvpے`JbtlJfpvnXvےbHAtbdQZfH~XQHAbl|ZdQnvfXv`fZp˂|drf`vXpZHAbے`JXQbtlHfpvrXQJ`tAJlbnvfH~XQr˂JtArdpvnXQJ`ےQZ|rfH~f`vXpZHAb|ZdQ`f~Zp˂rXQJ`|drtAJltbdQZfH~XQr˂JtArdnXv`fHZp˂rtAJlvXnJXQr|ZdQ`f~Zp˂rXQJ`tAJlnvpے`JbtlJtArdnXvےbHAtbdQZfH~f`vX˂p`ZpfH~rQtJltbdQZ|dtAf`vXpZHAb|ZdQ`f~fpvrXQJ`tdrvp`vpZHAbtlHfpvrXQJ`ےbHAtbdQZfH~XQr˂JtArd|ZdQ`f~Zp˂|drf`vXnvpQXb㉀ۅf۝`vtbAd|drJltnvpے`JbtlHfpvnrXQJےbHAtAJlXnvbے`JtArdnXvےbHAZp˂|drf`vXpZHAb|ZdQbtlHfpvrXQJ`tAJlnvpfZHAbpJAHrXnvZ|dtAJlbnvfH~XQr˂JtArdnXv`ےHAZp˂tbdQZpfH~JXQrZ|ZdQ`f~Zp˂rXQJ`tAJlnvpے`JbtlJfpvnXvےbHAtbdQZfH~ے`Jˁ`ZpfH~rQtJltbdQZpfHf`vXpZHAb|ZdQ`f~Zp˂rXQJ`|drf`vHAbےbtlHfpvrXQJ`ےJltbdQZfH~XQr˂JtArdnXv`f~Zp˂|drf`vXXQr˂QXb㉀ۅf۝`vtbAd|drf`vXnvpے`JbtlHfpvrXQJ`ےbHAtAJlXnv`JXQrJtArdnXvےbHAtbdQZ|drf`vXpZHAb|ZdQ`f~HfpvrXQJ`tAJlnvppZHAbpJAHrXnvZ|dtAJlnvpfH~XQr˂JtArdnXvےbHAZp˂tbdQZpfH~˂pZ|ZdQ`f~Zp˂|drtAJlnvpے`JbtlHfpvnXvےbHAtbdQZfH~ے`JۑppfH~rQtJltbdQZfH~f`vXpZHAb|ZdQ`f~Zp˂rXQJ`|ltvpHAbےbtlHfpvrXQJ`tAJltbdQZfH~XQr˂JtArdnXv`fHZp˂|drf`vXXQr˂JAHr󙐅f۝`vtbAd|drf`vXnvpے`JbtlHfpvrXQJ`ےJlbnvfے`J`JXQrJtArdnXvےbHAtbdQZ|dtAf`vXpZHAb|ZdQ`f~fpvrXQJ`tAJlnvpp`JXQˁ`ZQXXnvZ|dtAJlnvpfے`JXQr˂JtArdnXvےbHAtdrtAp`vXXQrZH˂pZA|ZdQ`f~Zp˂|drJltnvpے`JbtlHfpvnrXQJےbHAtbdQZfH~r˂pb㉀ۑppfH~rQtJltbdQZfH~XQr˂pZHAb|ZdQ`f~Zp˂JltnvpAbے``JXQbtlHfpvrXQJ`tAJlbnvfH~XQr˂JtArdnXv`ےHAZp˂|drf`vXZHAbJAHr󙐅f۝`vtbAd|drf`vXpZHAbے`JbtlHfpvrXQJ`bdQZ|fH~JXQrrbtJtArdnXvےbHAtbdQZpfHf`vXpZHAb|ZdQ`f~Zp˂rXQJ`tAJlnvpے`JXQˁ`ZQXXnvZ|dtAJlnvpے`JXQr˂JtArdnXvےbHAdrtAf`vX˂pZHlJtAd|ZdQ`f~Zp˂|drf`vXnvpے`JbtlHfpvrXQJ`ےbHAtbdQZfH~r˂pAHr󙐂ˍpfH~rQtJltbdQZfH~XQr˂pZHA|ZdQ`f~Zp˂JltnvpAbے`|ZdQbtlHfpvrXQJ`tAJlnvpfH~XQr˂JtArdnXvےbHAZp˂|drf`vXZHAb`ZQXbㅐf۝`vtbAd|drf`vXpZHAbے`JXQbtlHfpvrXQJ`bdQZ|fH~JXQrbtlJtArdnXvےbHAtbdQZfH~f`vXpZHAb|ZdQ`f~Zp˂rXQJ`tAJlnvp˂pZۑpJXnvZ|dtAJlnvpے`JrbtJtArdnXvےbHAltbvpf˂pZAbJtArd|ZdQ`f~Zp˂|drf`vXnvpے`JbtlHfpvrXQJ`ےJltbdQZfH~HAbےAHr󙐂ˍpfH~rQtJltbdQZfH~XQr˂lJtAd|ZdQ`f~Zp˂dQZ|H~f`JXQ|ZdQbtlHfpvrXQJ`tAJlnvpfے`JXQr˂JtArdnXvےbHAtbdQZ|drf`vX`JXQr`ZQXbㅐf۝`vtbAd|drf`vXpZHAb|ZdQbtlHfpvrXQJ`drtAJ`vXnr˂pbtlJfpvnXvےbHAtbdQZfH~XQr˂pZHAb|ZdQ`f~Zp˂|drtAJlnvp˂pZۑp`XnvZ|dtAJlnvpے`JbtlJtArdnXvےbHAltbvpfZHAbJtArdnXv`f~Zp˂|drf`vXpZHAbے`JbtlHfpvrXQJ`tAJltbdQZfH~HAbےZQXb㉀pfH~rQtJltbdQZfH~XQr˂JtArd|ZdQ`f~Zp˂dQZ|H~fے`JXQ|ZdQ`f~HfpvrXQJ`tAJlnvpے`JXQr˂JtArdnXvےbHAtbdQZ|dtAf`vX`JXQHAۑpJAHf۝`vtbAd|drf`vXpZHAb|ZdQbtlHfpvrXQJ`drtAdQ`vXHr˂pbtlHfpvnXvےbHAtbdQZfH~XQr˂pZHA|ZdQ`f~Zp˂|drJltnvpbے`r󙐂ˁ`XnvZ|dtAJlnvpے`JbtlJfpvnXvےbHAZ|d~f`ZHAbJtArdnXv`fHZp˂|drf`vXpZHAbے`JXQbtlHfpvrXQJ`tAJlbnvfH~JXQrZQXb㉀pfH~rQtJltbdQZfH~XQr˂JtArdnXv`f~Zp˂rtAJlvXnJQr|ZdQ`f~fpvrXQJ`tAJlnvpے`JrbtJtArdnXvےbHAtbdQZpfHf`vX˂pZHAۑpJAHf۝`vtbAd|drf`vXpZHAb|ZdQ`f~HfpvrXQJ`tbdQvpfHpZHAbtlHfpvnrXQJےbHAtbdQZfH~XQr˂lJtAd|ZdQ`f~Zp˂|drf`vXnvpbے`f۝`vXnvZ|dtAJlnvpے`JbtlHfpvnXvےbHAZ|d~f`bے`JtArdnXv`ےHAZp˂|drf`vXpZHAb|ZdQbtlHfpvrXQJ`tAJlnvpfH~JXQrXnvˍp|drQtJltuvwxyz{||{zyxwvIIIIIIIIIIIIIIIIIIIIIIJJJ \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv27_1.dat b/vendor/endroid/qr-code/assets/data/qrv27_1.dat new file mode 100644 index 000000000..7dd308192 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv27_1.dat @@ -0,0 +1,249 @@ +|{|{|{|{|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvuststststssstststtstststsrqrqrqrqrqrqrqrqpopopopopopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklklklklklkjijijijijijijijihghghghghghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYWXWXWXWXWXWXWXWXVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=;<;<;<;<;<;<;<;<:9:9:9:9:9:9:9:9:9:9:9:9878787878787878787656565656565656565656543434343434343434343434321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!      |{|{|{|{|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvuststststststststqqqqqqrqrqrqrqrqrqrqrqrqpopopopopopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklklklklklkjijijijijijijijihghghghghghghghghghghghgfefefefefefefefefedcdcdcdcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYWXWXWXWXWXWXWXWXVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=;<;<;;;;;<;<;<;<:9:9:9:9:9:9:9:9:9:9:9:9878787878787878765656565656565656565656543434343434343434343434321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!    |{|{|{|{|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvuststststststststrqrqrqrqrqrqrqrqrqrqrqrqpopopopopopopopoponmnmnmnmnmnmnmnmnmnmnmlklklklklklklklklklklklkjijijijijijijijihghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYWXWXWWWWWXWXWXWXVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=;;<;<;<;;<;;;;;;:9:9:9:9:9:9:9:9:9:9:9:9878787878787878765656565656565656565656543434343434343434321212121212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        |{|{|{|{|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvuststststststststrqrqrqrqrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmnmnmnmnmlklklklklklklklklklklklkjijijijijijijijihghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbababababababababa`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYWWXWXWXWWXWWWWWWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:9878787878787878765656565656565656565656543434343434343432121212121212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        |{|{|{|{|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvuststststststststrqrqrqrqrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmnmnmnmnmlklklklklklklklklkjijijijijijijijijijijihghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:9878787878787878765656565656565656565656543434343434343432121212121212121212121210/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!        |{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvustssssssststststrqrqrqrqrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijijijijijihghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9878787878787878787878765656565656565656565656543434343434343432121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!           |{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststssssssstsrqrqrqrqrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijijijijijihghghghghghghghghgfefefefefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:987878787878787878787878765656565656565656565656543434343434343432121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!         |{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqrqpopopopopopopopopopoponmnmnmnmnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijijijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;;;;;;<<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:987878787878787878787878765656565656565656543434343434343434343432121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        |{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopopopopopoponmnmnmnmnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijijijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcdcbababababababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWWWWWWXXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=;<;<;<;<;;;;;<;<<;<;<;;;:9:9:9:9:9:9:9:987878787878787878787878765656565656565654343434343434343434343432121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!           |{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopopopopopoponmnmnmnmnmnmnmnmnmlklklklklklklklklklklkjijijijijijijijijijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYWXWXWXWXWWWWWXWXXWXWXWWWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCBABABABABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=;<;<;<;<;<;<;<;<;;<;<;<;:9:9:9:9:9:9:9:987878787878787878787878765656565656565654343434343434343434343432121212121212121210/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        |{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststststststsrqrqrqrqrqrqrqrqpopopopopopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklklklklklkjijijijijijijijijijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYWXWXWXWXWXWXWXWXWWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=;<;<;<;<;<;<;<;<<;:9:9:9:9:9:9:9:9:9:9:9878787878787878787878787656565656565656543434343434343434343434321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        |{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvussssststtststssststststsrqrqrqrqrqrqrqrqpopopopopopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklklklklklkjijijijijijijijijihghghghghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYWXWXWXWXWXWXWXWXXWVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=;<;<;<;<;<;<;<;<:9:9:9:9:9:9:9:9:9:9:9:9878787878787878787878787656565656565656543434343434343434343434321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!                + + + + + + + +            + + + + + + + +             + + + + + + + +             + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + +          + + + + + + + + + + + +         + + + + + + + + + + + +         + + + + + + + + +         + + + + + + + + ||{{zzyyLLKKJJII%%&&''((UUVVWWXXoonnmmll55443322KKLLMMNNrqqppoon>=<;;::9 + + 00112233``aabbcciihhggff99887766 (())**++XXYYZZ[[qqppoonnAA@@??>> !!""##PPQQRRSSyyxxwwvvIIHHGGFFHHIIJJKKxxyyzz{{QQPPOONN!! @@AABBCCppqqrrssYYXXWWVV))((''&& + + 8899::;;hhiijjkkWWVVUUTTVVWW]]^^gffeeddc21100//.44556677ddeeffggeeddccbb55443322,,--..//\\]]^^__mmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWuuttssrrEEDDCCBBLLMMNNOO||||{{zzMMLLKKJJDDEEFFGGttuuvvwwUUTTSSRR%%$$##"" <<==>>??llmmnnooSSRRQQPP%%&&''((__``aabbcbbaa``_.--,,++* + + 8899::;;hhiijjkkaa``__^^1100//..00112233``aabbcciihhggff99887766 (())**++XXYYZZ[[qqppoonnAA@@??>> !!""##PPQQRRSSyyxxwwvvIIHHGGFFHHIIJJKKxxyyzz{{QQPPOONN!! @@AABBCCppqqrrssOONNMMLL))**++,,ccddeeff_^^]]\[Z*))((''& <<==>>??llmmnnoo]]\\[[ZZ--,,++**xxwwvvuuHHGGFFEE))**++,,YYZZ[[\\kkjjiihh1100//..OOPPQQRRnmmllkkj9887766544556677ddeeffggeeddccbb55443322,,--..//\\]]^^__mmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWuuttssrrEEDDCCBBLLMMNNOO||||{{zzMMLLKKJJDDEEFFGGttuuvvwwUUTTSSRR%%$$##"" <<==>>??llmmnnooSSRRQQPP%%&&''((__``aabbcbbaa``_.--,,++* + + 8899::;;hhiijjkkaa``__^^1100//..00112233``aabbcciihhggff99887766 (())**++XXYYZZ[[qqppoonnAA@@??>> !!""##PPQQRRSSyyxxwwvvIIHHGGFFHHIIJJKKxxyyzz{{QQPPOONN!! @@AABBCCppqqrrssOONNMMLL))**++,,ccddeeff_^^]]\[Z*))((''& <<==>>??llmmnnoo]]\\[[ZZ--,,++**44556677ddeeffggeeddccbb55443322,,--..//\\]]^^__mmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWuuttssrrEEDDCCBBLLMMNNOO||||{{zzMMLLKKJJDDEEFFGGttuuvvwwKKJJIIHH--..//00gghhiijjYXWWVVUU&%%$#"! @@AABBCCppqqrrssYYXXWWVV))((''&& + + ttssrrqqDDCCBBAA--..//00]]^^__``ggffeedd--,,++**SSTTUUVVjiihhggf54433221 + + 8899::;;hhiijjkkaa``__^^1100//..00112233``aabbcciihhggff99887766 (())**++XXYYZZ[[qqppoonnAA@@??>> !!""##PPQQRRSSyyxxwwvvIIHHGGFFHHIIJJKKxxyyzz{{QQPPOONN!! @@AABBCCppqqrrssOONNMMLL))**++,,ccddeeff_^^]]\[Z*))((''& <<==>>??llmmnnoo]]\\[[ZZ--,,++**44556677ddeeffggeeddccbb55443322,,--..//\\]]^^__mmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWuuttssrrEEDDCCBBLLMMNNOO||||{{zzMMLLKKJJDDEEFFGGttuuvvwwKKJJIIHH--..//00gghhiijjYXWWVVUU&%%$#"! @@AABBCCppqqrrssYYXXWWVV))((''&& + + 8899::;;hhiijjkkaa``__^^1100//..00112233``aabbcciihhggff99887766 (())**++XXYYZZ[[qqppoonnAA@@??>> !!""##PPQQRRSSyyxxwwvvIIHHGGFFHHIIJJKKxxyyzz{{GGFFEEDD + +11223344kkllmmnnTTSSRRQQDDEEFFGGttuuvvwwUUTTSSRR%%$$##"" ppoonnmm@@??>>== 11223344aabbccddccbbaa``))((''&&%%WW]]^^__feeddccb100//..- <<==>>??llmmnnoo]]\\[[ZZ--,,++**44556677ddeeffggeeddccbb55443322,,--..//\\]]^^__mmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWuuttssrrEEDDCCBBLLMMNNOO||||{{zzMMLLKKJJDDEEFFGGttuuvvwwKKJJIIHH--..//00gghhiijjYXWWVVUU&%%$#"! @@AABBCCppqqrrssYYXXWWVV))((''&& + + 8899::;;hhiijjkkaa``__^^1100//..00112233``aabbcciihhggff99887766 (())**++XXYYZZ[[qqppoonnAA@@??>> !!""##PPQQRRSSyyxxwwvvIIHHGGFFHHIIJJKKxxyyzz{{GGFFEEDD + +11223344kkllmmnnTTSSRRQQDDEEFFGGttuuvvwwUUTTSSRR%%$$##"" <<==>>??llmmnnoo]]\\[[ZZ--,,++**44556677ddeeffggeeddccbb55443322,,--..//\\]]^^__mmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWuuttssrrEEDDCCBBLLMMNNOO||||{{zzCCBBAA;; 55667788ooppqqrrPPOONNMMHHIIJJKKxxyyzz{{QQPPOONN!! llkkjjii<<;;::99 + + 55667788eeffgghh__^^]]WW%%&&''(())``aabbccbaa``__^-,,++**)@@AABBCCppqqrrssYYXXWWVV))((''&& + + 8899::;;hhiijjkkaa``__^^1100//..00112233``aabbcciihhggff99887766 (())**++XXYYZZ[[qqppoonnAA@@??>> !!""##PPQQRRSSyyxxwwvvIIHHGGFFHHIIJJKKxxyyzz{{GGFFEEDD + +11223344kkllmmnnTTSSRRQQDDEEFFGGttuuvvwwUUTTSSRR%%$$##"" <<==>>??llmmnnoo]]\\[[ZZ--,,++**44556677ddeeffggeeddccbb55443322,,--..//\\]]^^__mmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWuuttssrrEEDDCCBBLLMMNNOO||||{{zzCCBBAA;; 55667788ooppqqrrPPOONNMMHHIIJJKKxxyyzz{{QQPPOONN!! @@AABBCCppqqrrssYYXXWWVV))((''&& + + 8899::;;hhiijjkkaa``__^^1100//..00112233``aabbcciihhggff99887766 (())**++XXYYZZ[[qqppoonnAA@@??>> !!""##PPQQRRSSyyssrrqq::99887799::;;AAssyyzz{{LLKKJJIILLMMNNOO||||{{zzMMLLKKJJhhggffee88776655 + + 99::;;<>??llmmnnoo]]\\[[ZZ--,,++**44556677ddeeffggeeddccbb55443322,,--..//\\]]^^__mmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWuuttssrrEEDDCCBBLLMMNNOO||||{{zzCCBBAA;; 55667788ooppqqrrPPOONNMMHHIIJJKKxxyyzz{{QQPPOONN!! @@AABBCCppqqrrssYYXXWWVV))((''&& + + 8899::;;hhiijjkkaa``__^^1100//..00112233``aabbcciihhggff99887766 (())**++XXYYZZ[[qqppoonnAA@@??>> !!""##PPQQRRSSyyssrrqq::99887799::;;AAssyyzz{{LLKKJJIILLMMNNOO||||{{zzMMLLKKJJDDEEFFGGttuuvvwwUUTTSSRR%%$$##"" <<==>>??llmmnnoo]]\\[[ZZ--,,++**44556677ddeeffggeeddccbb55443322,,--..//\\]]^^__mmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWppoonnmm66554433 + + BBCCDDEE||||{{zzHHGGFFEE !!""##PPQQRRSSyyxxwwvvIIHHGGFFddccbbaa44332211 ==>>??@@mmnnooppRRQQPPOO..//0011hhiijjkkWWVVUUTT%$#"! HHIIJJKKxxyyzz{{QQPPOONN!! @@AABBCCppqqrrssYYXXWWVV))((''&& + + 8899::;;hhiijjkkaa``__^^1100//..00112233``aabbcciihhggff99887766 (())**++XXYYZZ[[qqppoonnAA@@??>> !!""##PPQQRRSSyyssrrqq::99887799::;;AAssyyzz{{LLKKJJIILLMMNNOO||||{{zzMMLLKKJJDDEEFFGGttuuvvwwUUTTSSRR%%$$##"" <<==>>??llmmnnoo]]\\[[ZZ--,,++**44556677ddeeffggeeddccbb55443322,,--..//\\]]^^__mmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWppoonnmm66554433 + + BBCCDDEE||||{{zzHHGGFFEE !!""##PPQQRRSSyyxxwwvvIIHHGGFFHHIIJJKKxxyyzz{{QQPPOONN!! @@AABBCCppqqrrssYYXXWWVV))((''&& + + 8899::;;hhiijjkkaa``__^^1100//..00112233``aabbcciihhggff99887766 (())**++XXYYZZ[[llkkjjii221100// FFGGHHIIyyxwvutsDDCCBBAA $$%%&&''TTUUVVWWuuttssrrEEDDCCBB``__^^]]00//..--AABBCCDDqqrrssttNNMMLLKK22334455llmmnnooSSRRQQPPLLMMNNOO||||{{zzMMLLKKJJDDEEFFGGttuuvvwwUUTTSSRR%%$$##"" <<==>>??llmmnnoo]]\\[[ZZ--,,++**44556677ddeeffggeeddccbb55443322,,--..//\\]]^^__mmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWppoonnmm66554433 + + BBCCDDEE||||{{zzHHGGFFEE !!""##PPQQRRSSyyxxwwvvIIHHGGFFHHIIJJKKxxyyzz{{QQPPOONN!! @@AABBCCppqqrrssYYXXWWVV))((''&& + + 8899::;;hhiijjkkaa``__^^1100//..00112233``aabbcciihhggff99887766 (())**++XXYYZZ[[llkkjjii221100// FFGGHHIIyyxwvutsDDCCBBAA $$%%&&''TTUUVVWWuuttssrrEEDDCCBBLLMMNNOO||||{{zzMMLLKKJJDDEEFFGGttuuvvwwUUTTSSRR%%$$##"" <<==>>??llmmnnoo]]\\[[ZZ--,,++**44556677ddeeffggeeddccbb55443322,,--..//\\]]^^__hhggffee..--,,++JJKKLLMMsrrqqppo@?>=<;;: + + (())**++XXYYZZ[[qqppoonnAA@@??>> !!""##\\[[ZZYY,,++**))EEFFGGHHuuvvwwxxJJIIHHGG 66778899ppqqrrssOONNMMLL !!""##PPQQRRSSyyxxwwvvIIHHGGFFHHIIJJKKxxyyzz{{QQPPOONN!! @@AABBCCppqqrrssYYXXWWVV))((''&& + + 8899::;;hhiijjkkaa``__^^1100//..00112233``aabbcciihhggff99887766 (())**++XXYYZZ[[llkkjjii221100// FFGGHHIIyyxwvutsDDCCBBAA $$%%&&''TTUUVVWWuuttssrrEEDDCCBBLLMMNNOO||||{{zzMMLLKKJJDDEEFFGGttuuvvwwUUTTSSRR%%$$##"" <<==>>??llmmnnoo]]\\[[ZZ--,,++**44556677ddeeffggeeddccbb55443322,,--..//\\]]^^__hhggffee..--,,++JJKKLLMMsrrqqppo@?>=<;;: + + (())**++XXYYZZ[[qqppoonnAA@@??>> !!""##PPQQRRSSyyxxwwvvIIHHGGFFHHIIJJKKxxyyzz{{QQPPOONN!! @@AABBCCppqqrrssYYXXWWVV))((''&& + + 8899::;;hhiijjkkaa``__^^1100//..00112233``aabbccddccbbaa**))((''NNOOPPQQonnmmllk:9988776,,--..//\\]]^^__mmllkkjj==<<;;:: + +$$%%&&''44556677XXWWVVUU((''&&%%IIJJKKLLyyzz{{||FFEEDDCC + + ::;;AABByyzz{{||KKJJIIHH$$%%&&''TTUUVVWWuuttssrrEEDDCCBBLLMMNNOO||||{{zzMMLLKKJJDDEEFFGGttuuvvwwUUTTSSRR%%$$##"" <<==>>??llmmnnoo]]\\[[ZZ--,,++**44556677ddeeffggeeddccbb55443322,,--..//\\]]^^__hhggffee..--,,++JJKKLLMMsrrqqppo@?>=<;;: + + (())**++XXYYZZ[[qqppoonnAA@@??>> !!""##PPQQRRSSyyxxwwvvIIHHGGFFHHIIJJKKxxyyzz{{QQPPOONN!! @@AABBCCppqqrrssYYXXWWVV))((''&& + + 8899::;;hhiijjkkaa``__^^1100//..00112233``aabbccddccbbaa**))((''NNOOPPQQonnmmllk:9988776,,--..//\\]]^^__mmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWuuttssrrEEDDCCBBLLMMNNOO||||{{zzMMLLKKJJDDEEFFGGttuuvvwwUUTTSSRR%%$$##"" <<==>>??llmmnnoo]]\\[[ZZ--,,++**44556677ddeeffgg``__^^]]&&%%RRSSTTUUkjjiihhg6554433200112233``aabbcciihhggff99887766 (())**++8899::;;TTSSRRQQ$$##""!! MMNNOOPP||{{zzyyBBAA;;:: + + CCDDEEFF||{{zzyyGGFFEEDD(())**++XXYYZZ[[qqppoonnAA@@??>> !!""##PPQQRRSSyyxxwwvvIIHHGGFFHHIIJJKKxxyyzz{{QQPPOONN!! @@AABBCCppqqrrssYYXXWWVV))((''&& + + 8899::;;hhiijjkkaa``__^^1100//..00112233``aabbccddccbbaa**))((''NNOOPPQQonnmmllk:9988776,,--..//\\]]^^__mmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWuuttssrrEEDDCCBBLLMMNNOO||||{{zzMMLLKKJJDDEEFFGGttuuvvwwUUTTSSRR%%$$##"" <<==>>??llmmnnoo]]\\[[ZZ--,,++**44556677ddeeffgg``__^^]]&&%%RRSSTTUUkjjiihhg6554433200112233``aabbcciihhggff99887766 (())**++XXYYZZ[[qqppoonnAA@@??>> !!""##PPQQRRSSyyxxwwvvIIHHGGFFHHIIJJKKxxyyzz{{QQPPOONN!! @@AABBCCppqqrrssYYXXWWVV))((''&& + + 8899::;;hhiijjkkWWVVUUTTVVWW]]^^gffeeddc21100//.44556677ddeeffggeeddccbb55443322,,--..//<<==>>??PPOONNMM !!""##$$QQRRSSTTssrrqqpp99887766 GGHHIIJJxwvutssrCCBBAA@? ,,--..//\\]]^^__mmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWuuttssrrEEDDCCBBLLMMNNOO||||{{zzMMLLKKJJDDEEFFGGttuuvvwwUUTTSSRR%%$$##"" <<==>>??llmmnnoo]]\\[[ZZ--,,++**44556677ddeeffgg``__^^]]&&%%RRSSTTUUkjjiihhg6554433200112233``aabbcciihhggff99887766 (())**++XXYYZZ[[qqppoonnAA@@??>> !!""##PPQQRRSSyyxxwwvvIIHHGGFFHHIIJJKKxxyyzz{{QQPPOONN!! @@AABBCCppqqrrssYYXXWWVV))((''&& + + 8899::;;hhiijjkkWWVVUUTTVVWW]]^^gffeeddc21100//.44556677ddeeffggeeddccbb55443322,,--..//\\]]^^__mmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWuuttssrrEEDDCCBBLLMMNNOO||||{{zzMMLLKKJJDDEEFFGGttuuvvwwUUTTSSRR%%$$##"" <<==>>??llmmnnooSSRRQQPP%%&&''((__``aabbcbbaa``_.--,,++* + + 8899::;;hhiijjkkaa``__^^1100//..00112233@@AABBCCDDEEFFGGttuuvvwwUUTTSSRR%%$$##"" <<==>>??llmmnnoo]]\\[[ZZ--,,++**44556677ddeeffggeeddccbb55443322,,--..//\\]]^^__mmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWmmllkkjj33221100MMNNOOPPaa``__^^1100//..@@AABBCCHHIIJJKKxxyyzz{{QQPPOONN!! @@AABBCCppqqrrssYYXXWWVV))((''&& + + 8899::;;hhiijjkkaa``__^^1100//..00112233``aabbcciihhggff99887766 (())**++XXYYZZ[[iihhggff//..--,,QQRRSSTT]]\\[[ZZ--,,++**DDEEFFGGLLMMNNOO||||{{zzMMLLKKJJDDEEFFGGttuuvvwwUUTTSSRR%%$$##"" <<==>>??llmmnnoo]]\\[[ZZ--,,++**44556677ddeeffggeeddccbb55443322,,--..//\\]]^^__eeddccbb++**))((UUVVWW]]YYXXWWVV))((''&&HHIIJJKKPPQQRRSSyyxxwwvvIIHHGGFFHHIIJJKKxxyyzz{{QQPPOONN!! @@AABBCCppqqrrssYYXXWWVV))((''&& + + 8899::;;hhiijjkkaa``__^^1100//..00112233``aabbccaa``__^^''&&%%%%&&''^^__``aaUUTTSSRR%%$$##""LLMMNNOOTTUUVVWWuuttssrrEEDDCCBBLLMMNNOO||||{{zzMMLLKKJJDDEEFFGGttuuvvwwUUTTSSRR%%$$##"" <<==>>??llmmnnoo]]\\[[ZZ--,,++**44556677ddeeffgg]]WWVVUU(())**++bbccddeeQQPPOONN!!  !!""##PPQQRRSSXXYYZZ[[qqppoonnAA@@??>> !!""##PPQQRRSSyyxxwwvvIIHHGGFFHHIIJJKKxxyyzz{{QQPPOONN!! @@AABBCCppqqrrssYYXXWWVV))((''&& + + 8899::;;hhiijjkkTTSSRRQQ,,--..//ffgghhiiMMLLKKJJ$$%%&&''TTUUVVWW\\]]^^__mmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWuuttssrrEEDDCCBBLLMMNNOO||||{{zzMMLLKKJJDDEEFFGGttuuvvwwUUTTSSRR%%$$##"" <<==>>??llmmnnooPPOONNMM00112233jjkkllmmIIHHGGFF(())**++XXYYZZ[[``aabbcciihhggff99887766 (())**++XXYYZZ[[qqppoonnAA@@??>> !!""##PPQQRRSSyyxxwwvvIIHHGGFFHHIIJJKKxxyyzz{{QQPPOONN!! @@AABBCCppqqrrssLLKKJJII44556677nnooppqqEEDDCCBB,,--..//\\]]^^__ddeeffggeeddccbb55443322,,--..//\\]]^^__mmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWuuttssrrEEDDCCBBLLMMNNOO||||{{zzMMLLKKJJDDEEFFGGttuuvvwwHHGGFFEE 8899::;;qqppoonnAA@@??>>00112233``aabbcchhiijjkkaa``__^^1100//..00112233``aabbcciihhggff99887766 (())**++XXYYZZ[[qqppoonnAA@@??>> !!""##PPQQRRSSyyxxwwvvIIHHGGFFHHIIJJKKxxyyzz{{DDCCBBAA + + + +AABBCCDDmmllkkjj==<<;;:: + +44556677ddeeffggllmmnnoo]]\\[[ZZ--,,++**44556677ddeeffggeeddccbb55443322,,--..//\\]]^^__mmllkkjj==<<;;:: + +$$%%&&''TTUUVVWWuuttssrrEEDDCCBBLLMMNNOO||ttssrr;;::9988 EEFFGGHHiihhggff99887766 + + 8899::;;hhiijjkkppqqrrssYYXXWWVV))((''&& + + 8899::;;hhiijjkkaa``__^^1100//..00112233``aabbcciihhggff99887766 (())**++XXYYZZ[[qqppoonnAA@@??>> !!""##PPQQRRSSqqppoonn77665544IIJJKKLLeeddccbb55443322 <<==>>??llmmnnooppqqfpvfpvfpvXQJ`ےXQJ`ےltbtAJlH~fpfH~bے`JQr˂p˂pZHAbtlbtl`f~`f~`fHےbHAےbHAtAJltAJltAJlf`vXf`vXXQr˂XQr˂XQr˂btlbtlbtl`f~`f~ےbHAےbHAےbHAtAJltAJlf`vXf`vXf`vX`JXQrے`JJtArdl|Z~HfpvnX`ےHAےbHAےbHAtAJltAJlJltf`vXf`vXXQr˂XQr˂XQr˂btlbtl`f~`f~`f~ےbHAےbHAےJltAJltAJlf`vXf`vXf`vXXQr˂XQr˂btlbtlbtlXv`fnXvXQJ`ےrXQJtbdZ|df`vXf`vXf`vXXQr˂XQr˂rbtbtlbtl`f~`f~`fHےbHAےbHAtAJltAJltAJlf`vXf`vXXQr˂XQr˂XQr˂btlbtlbtl`f~`f~ےbHAےbHAےbHAdrtAJ|drH~fpfH~˂pZAbbے`btlbtlbtl`f~`f~`ےHAnXv`nXv`nXv`bHAZbHAZdQZ|tbdQZ`vXnf`vJXQrˑZHAbbJAdJtArdJtArdHfpvHfpvfpvZp˂Zp˂tbdQZtbdQZtbdQZnvpnvppZHAbpZHAbpZHAbJtArdJtArdJfpvHfpvHfpvZp˂Zp˂Zp˂tbdQZtbdQZnvpnvpnvp˂pZXQr˂tlJdQbt璝vnXv`fZp˂Zp˂Zp˂tbdQZtbdQZbnvnvpnvppZHAbpZHAbpZHAJtArdJtArdHfpvHfpvHfpvZp˂Zp˂tbdQZtbdQZtbdQZnvpnvpnvppZHAbpZHAbJtArdJtArdJtArd~Hf`f~bHAZ`ےbQZ|rrtAJlnvpnvpnvppZHAbpZHAblJtAdJtArdJtArdHfpvHfpvfpvZp˂Zp˂tbdQZtbdQZtbdQZnvpnvppZHAbpZHAbpZHAbJtArdJtArdJfpvHfpvHfpvZp˂Zp˂Zp˂ltbtAJl`vXnf`v`JXQJXQrZJtArdJtArdJtArdHfpvHfpvZp˂f~Hf~Hf~Hp˂rp˂rdrtAJ|drvpfXnvpZHAے`JX|ZdQ|ZdQ|ZdQnXvnXvnrXQJrXQJ`rXQJ`|dr|dr|dtAfH~fH~ے`Jے`Jے`J|ZdQ|ZdQnXvnXvnXvrXQJ`rXQJ`rXQJ`|dr|drfH~fH~fH~HAbےpZHAbtArdlJtArv`f~~HfprXQJ`rXQJ`rXQJ`|dr|drpfHfH~fH~ے`Jے`Jے`JXQ|ZdQ|ZdQnXvnXvnXvrXQJ`rXQJ`|dr|dr|drfH~fH~fے`Jے`Jے`J|ZdQ|ZdQ|ZdQpvnHfpvp˂rHAZp˂AJlttbQZfH~fH~fH~ے`Jے`J|ZdQ|ZdQ|ZdQnXvnXvnrXQJrXQJ`rXQJ`|dr|dr|dtAfH~fH~ے`Jے`Jے`J|ZdQ|ZdQnXvnXvnXvrXQJ`rXQJ`rXQJ`dQZ|tbdQZvpfXnvr˂pHAbے|ZdQ|ZdQ|ZdQnXvnXvrXQJ`fpvfpvfpvXQJ`ےXQJ`ےltbtAJlH~p`vXbے`Qr˂pbtlbtlbtl`f~`f~`ےHAےbHAےbHAtAJltAJlJltf`vXf`vXXQr˂XQr˂XQr˂btlbtl`f~`f~`f~ےbHAےbHAےJltAJltAJlf`vXf`vXf`vX`JXQrے`J|ZdQbd|ZfpvvnvfےbHAےbHAےbHAtAJltAJlf`vXf`vXf`vXXQr˂XQr˂rbtbtlbtl`f~`f~`fHےbHAےbHAtAJltAJltAJlf`vXf`vXXQr˂XQr˂XQr˂btlbtlbtlXv`fnXvXQJ`ےrXQJbdQZ|drtAJf`vXf`vXf`vXXQr˂XQr˂btlbtlbtl`f~`f~`ےHAےbHAےbHAtAJltAJlJltf`vXf`vXXQr˂XQr˂XQr˂btlbtl`f~`f~`f~ےbHAےbHAےJldrtAdQ|ltH~fpfH~ZHAb`JXQrbtlbtlbtl`f~`f~ےbHAnXv`nXv`nXv`bHAZbHAZdQZ|ltdrtAvpfHnvpJXQrˑZHAbJtArdJtArdJtArdHfpvHfpvZp˂Zp˂Zp˂tbdQZtbdQZbnvnvpnvppZHAbpZHAbpZHAJtArdJtArdHfpvHfpvHfpvZp˂Zp˂tbdQZtbdQZtbdQZnvpnvpnvp˂pZXQr˂tlJdQbtnXv`~HfZp˂Zp˂Zp˂tbdQZtbdQZnvpnvpnvppZHAbpZHAblJtAdJtArdJtArdHfpvHfpvfpvZp˂Zp˂tbdQZtbdQZtbdQZnvpnvppZHAbpZHAbpZHAbJtArdJtArdJfpv~HX`pvbHAZ`ےbdrtAltbnvpnvpnvppZHAbpZHAbJtArdJtArdJtArdHfpvHfpvZp˂Zp˂Zp˂tbdQZtbdQZbnvnvpnvppZHAbpZHAbpZHAJtArdJtArdHfpvHfpvHfpvZp˂Zp˂tdrtAZ|dbnv`vXHvpے`JXQ˂pZJtArdJtArdJfpvHfpvHfpvZp˂f~Hf~Hp˂rp˂rp˂rtbdQJlt~f`fH~pZAbے`JX|ZdQ|ZdQ|ZdQnXvnXvrXQJ`rXQJ`rXQJ`|dr|drpfHfH~fH~ے`Jے`Jے`JXQ|ZdQ|ZdQnXvnXvnXvrXQJ`rXQJ`|dr|dr|drfH~fH~fے`JHAbp`JXQtArdlJtArf~HpvnrXQJ`rXQJ`rXQJ`|dr|drfH~fH~fH~ے`Jے`J|ZdQ|ZdQ|ZdQnXvnXvnrXQJrXQJ`rXQJ`|dr|dr|dtAfH~fH~ے`Jے`Jے`J|ZdQ|ZdQ~Hv`fnrXQJp˂HAXQJ`JltdQZ|fH~fH~fے`Jے`Jے`J|ZdQ|ZdQ|ZdQnXvnXvrXQJ`rXQJ`rXQJ`|dr|drpfHfH~fH~ے`Jے`Jے`JXQ|ZdQ|ZdQnXvnXvnXvrXQJ`rXQJ`JltrtAJlp`vX~f`fے`Jr˂pHAbے|ZdQ|ZdQnXvnXvnXvrXQJ`fpvfpvXQJ`ےXQJ`ےXQJ`ےZ|dbdQZ|vXnf`vX`JXQrQrZHAbtlbtlbtl`f~`f~ےbHAےbHAےbHAtAJltAJlf`vXf`vXf`vXXQr˂XQr˂rbtbtlbtl`f~`f~`fHےbHAےbHAtAJltAJltAJlf`vXf`vXXQHAb˂pZHArbt|ZdQtAdtlfpvXv`fےbHAےbHAےJltAJltAJlf`vXf`vXf`vXXQr˂XQr˂btlbtlbtl`f~`f~`ےHAےbHAےbHAtAJltAJlJltf`vXf`vXXQr˂XQr˂XQr˂btlbtlfpv~Hfp`p˂bHAZpےJlbdQZ|drtAJf`vXf`vXXQr˂XQr˂XQr˂btlbtlbtl`f~`f~ےbHAےbHAےbHAtAJltAJlf`vXf`vXf`vXXQr˂XQr˂rbtbtlbtl`f~`f~`fHےbHAےbHAbdQZ|tbdQnvpvXnXQrZHZHAb`JXQrbtlbtl`f~`f~`f~ےbHAnXv`nXv`bHAZbHAZbHAZrtAJldrtAvpfHnvp˂pZbے`JtArdJtArdJfpvHfpvHfpvZp˂Zp˂Zp˂tbdQZtbdQZnvpnvpnvppZHAbpZHAblJtAdJtArdJtArdHfpvHfpvfpvZp˂Zp˂tbdQZtbdQZtbdQZnvpnvpے`JXQbے`l|ZdQrd|JfpvnXv`~HfZp˂Zp˂tbdQZtbdQZtbdQZnvpnvpnvppZHAbpZHAbJtArdJtArdJtArdHfpvHfpvZp˂Zp˂Zp˂tbdQZtbdQZbnvnvpnvppZHAbpZHAbpZHAJtArdJtArdnXv`vnXrXQJ`˂rXQtbQZddrtAltbnvpnvppZHAbpZHAbpZHAbJtArdJtArdJfpvHfpvHfpvZp˂Zp˂Zp˂tbdQZtbdQZnvpnvpnvppZHAbpZHAblJtAdJtArdJtArdHfpvHfpvfpvZp˂Zp˂drtAZ|dfH~vpfHAbے`JQrˀ˂pZAJtArdJtArdHfpvHfpvHfpvZp˂f~Hf~Hp˂rp˂rp˂rtbdQJlt~f`fH~HAbےJXQr|ZdQ|ZdQnXvnXvnXvrXQJ`rXQJ`rXQJ`|dr|drfH~fH~fH~ے`Jے`J|ZdQ|ZdQ|ZdQnXvnXvnrXQJrXQJ`rXQJ`|dr|dr|dtAfH~fH~r˂pJXQrbtlZdQbtnvff~HpvnrXQJ`rXQJ`|dr|dr|drfH~fH~fے`Jے`Jے`J|ZdQ|ZdQ|ZdQnXvnXvrXQJ`rXQJ`rXQJ`|dr|drpfHfH~fH~ے`Jے`Jے`JXQ|ZdQ|ZdQf~Hv`fےbHAJ`ےrtAJlJbdQdQZ|fH~fH~ے`Jے`Jے`J|ZdQ|ZdQnXvnXvnXvrXQJ`rXQJ`rXQJ`|dr|drfH~fH~fH~ے`Jے`J|ZdQ|ZdQ|ZdQnXvnXvnrXQJrXQJ`rXQJ`JltrtAJlf`vX~f`JXQrpZHA㙒`JXQ|ZdQ|ZdQnXvnXvnXvrXQJ`ےbHAfpvfpvXQJ`ےXQJ`ےXQJ`ےZ|dbdQZ|vXH~vpf`JXQr˂pZHAbtlbtl`f~`f~`f~ےbHAےbHAےJltAJltAJlf`vXf`vXf`vXXQr˂XQr˂btlbtlbtl`f~`f~`ےHAےbHAےbHAtAJltAJlJltf`vXf`vXZHAb˂pZHAJtArdlJtA~HfpfvnXXv`fےbHAےbHAtAJltAJltAJlf`vXf`vXXQr˂XQr˂XQr˂btlbtlbtl`f~`f~ےbHAےbHAےbHAtAJltAJlf`vXf`vXf`vXXQr˂XQr˂rbtbtlbtlfpv~HfpZp˂bHAZptbdZ|dAJltf`vXf`vXXQr˂XQr˂XQr˂btlbtl`f~`f~`f~ےbHAےbHAےJltAJltAJlf`vXf`vXf`vXXQr˂XQr˂btlbtlbtl`f~`f~`ےHAےbHAےbHAbdQZ|tdrnvpvXn˂pZHbے`rbtbtlbtl`f~`f~`fHےbHAZp˂nXv`nXv`bHAZbHAZJltrtAdQZ`vXnf`vے`JXQ˂pZbے`JtArdJtArdHfpvHfpvHfpvZp˂Zp˂tbdQZtbdQZtbdQZnvpnvpnvppZHAbpZHAbJtArdJtArdJtArdHfpvHfpvZp˂Zp˂Zp˂tbdQZtbdQZbnvnvpnvpے`JXQbے`|ZdQrd|vnXv`ffpvZp˂Zp˂tbdQZtbdQZtbdQZnvpnvppZHAbpZHAbpZHAbJtArdJtArdJfpvHfpvHfpvZp˂Zp˂Zp˂tbdQZtbdQZnvpnvpnvppZHAbpZHAblJtAdJtArdJtArdnXv`v~rXQJ`˂rXQQZ|drtAJlbnvnvpnvppZHAbpZHAbpZHAJtArdJtArdHfpvHfpvHfpvZp˂Zp˂tbdQZtbdQZtbdQZnvpnvpnvppZHAbpZHAbJtArdJtArdJtArdHfpvHfpvZp˂Zp˂Zp˂ltbtAJlfH~vp`vAbے`JXQrlJtAdJtArdJtArdHfpvHfpvfpvZp˂rXQJ`f~Hf~Hp˂rp˂rdrtAJ|drvpfXnvrZHAHAbJXQr|ZdQ|ZdQnXvnXvnXvrXQJ`rXQJ`|dr|dr|drfH~fH~fے`Jے`Jے`J|ZdQ|ZdQ|ZdQnXvnXvrXQJ`rXQJ`rXQJ`|dr|drpfHfH~fH~r˂pJXQHAbbtlZdQbtv`f~HfpnrXQJrXQJ`rXQJ`|dr|dr|dtAfH~fH~ے`Jے`Jے`J|ZdQ|ZdQnXvnXvnXvrXQJ`rXQJ`rXQJ`|dr|drfH~fH~fH~ے`Jے`J|ZdQ|ZdQ|ZdQpvnHfpvےbHAJ`p˂rtAJltbdQpfHfH~fH~ے`Jے`Jے`JXQ|ZdQ|ZdQnXvnXvnXvrXQJ`rXQJ`|dr|dr|drfH~fH~fے`Jے`Jے`J|ZdQ|ZdQ|ZdQnXvnXvrXQJ`rXQJ`rXQJ`dQZ|tbdQZvpfXnvJXQrpZHA|ZdQ|ZdQ|ZdQnXvnXvnrXQJrXQJ`ےbHAZp˂Zp˂tbdQZtbdQZnvpnvpnvppZHAbpZHAblJtAdJtArdJtArdHfpvHfpvfpvZp˂Zp˂tbdQZtbdQZtbdQZnvpnvpXQr˂`JXQrˁ`ZAHr󙐂˅Xnv˅Xnv˒tbAdtbAdrXQJ`rXQJ`|dr|drfH~fH~fH~ے`Jے`J|ZdQ|ZdQ|ZdQnXvnXvnrXQJrXQJ`rXQJ`|dr|dr|dtAfH~fH~pZHAb˂pZQXb㉀ہ`ZQXbpfH~pfH~Z|dZ|dےbHAےJltAJltAJlf`vXf`vXf`vXXQr˂XQr˂btlbtlbtl`f~`f~`ےHAےbHAےbHAtAJltAJlJltf`vXf`vXے`JHAbےpJAHr󉀒ۑp`f۝`vf۝`vrQtJlrQtJlZp˂tbdQZtbdQZtbdQZnvpnvpnvppZHAbpZHAbJtArdJtArdJtArdHfpvHfpvZp˂Zp˂Zp˂tbdQZtbdQZbnvnvpnvpXQr˂`JXQHAۑpZQXb㉀Xnv˅Xnv˒tbAdtbAdrXQJ`|dr|dr|drfH~fH~fے`Jے`Jے`J|ZdQ|ZdQ|ZdQnXvnXvrXQJ`rXQJ`rXQJ`|dr|drpfHfH~fH~p`JXQbے`JAHr󙐒ۑpJAHpfH~pfH~Z|dZ|dےbHAtAJltAJltAJlf`vXf`vXXQr˂XQr˂XQr˂btlbtlbtl`f~`f~ےbHAےbHAےbHAtAJltAJlf`vXf`vXf`vXr˂pJXQrˁ`ZQXr󙐂ˁ`f۝`vf۝`vrQtJlrQtJlZp˂tbdQZtbdQZtbdQZnvpnvppZHAbpZHAbpZHAbJtArdJtArdJfpvHfpvHfpvZp˂Zp˂Zp˂tbdQZtbdQZnvpnvpnvpZHAb˂pZHAb㉀ۑpZQXb㉀Xnv˅Xnv˒tbAdtbAdrXQJ`|dr|dr|dtAfH~fH~ے`Jے`Jے`J|ZdQ|ZdQnXvnXvnXvrXQJ`rXQJ`rXQJ`|dr|drfH~fH~fH~ے`JXQbے`JAHr󙐒ۑpJAHpfH~pfH~Z|dZ|dےbHAtAJltAJlJltf`vXf`vXXQr˂XQr˂XQr˂btlbtl`f~`f~`f~ےbHAےbHAےJltAJltAJlf`vXf`vXf`vXr˂pJXQrˁ`ZQXf۝`vf۝`vf۝`vrQtJlrQtJlZp˂tbdQZtbdQZbnvnvpnvppZHAbpZHAbpZHAJtArdJtArdHfpvHfpvHfpvZp˂Zp˂tbdQZtbdQZtbdQZnvpnvpnvpZHAb˂p`ZAHr󙐂˅Xnv˅Xnv˅Xnv˒tbAdtbAdrXQJ`|dr|drpfHfH~fH~ے`Jے`Jے`JXQ|ZdQ|ZdQnXvnXvnXvrXQJ`rXQJ`|dr|dr|drfH~fH~fZHAb˂pZQXb㉀ہ`ZQXbpfH~pfH~p|dZ|dZ|dےbHAtAJltAJlf`vXf`vXf`vXXQr˂XQr˂rbtbtlbtl`f~`f~`fHےbHAےbHAtAJltAJltAJlf`vXf`vXے`JHAbےpJAHr󉀒ۑpJf۝`vf۝`vrQtJlrQtJlrQtJltuvwxyz{||{zyxwv \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv27_2.dat b/vendor/endroid/qr-code/assets/data/qrv27_2.dat new file mode 100644 index 000000000..536c7cab1 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv27_2.dat @@ -0,0 +1,249 @@ +|{|{|{|{zyzyzyzyxwxwxwxwssstststrqrqrqrqnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVU|{|{|{|{zyzyzyzyxwxwxwxwststststrqrqrqrqnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVU|{|{|{|{zyzyzyzyvuvuvuvuststststrqrqrqrqnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVU|{|{|{|{zyzyzyzyvuvuvuvuststststrqpopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYXWXWXWVUVUVUVU|{|{|{|{zyzyzyzyvuvuvuvuststststpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[XWWWWWWXVUVUVUVU|{|{|{|{zyzyzyzyvuvuvuvuststststpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[WXWXWXWXVUVUVUVU|{|{|{|{zyzyzyzyvuvuvuvusssssstspopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[WXWXWXWXVUVUVUVU|{|{|{|{zyzyzyzyvuvuvuvutstststspopopoponmnmnmnmlklklklkjihghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[WXWXWXWXVUVUVUVU|{|{|{|{zyzyzyzyvuvuvuvutstststspopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[WXWXWXWXVUVUVUVU|{|{|{|{zyzyzyzyvuvuvuvutstststspopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[WXWXWXWXVUVUVUVU|{|{|{|{zyzyzyzyvuvuvuvutstststspopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[WXWXWWWWVUVUVUVU|{|{|{|{zyzyzyzyvuvuvuvutstststspopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdcba`_`_`_^]^]^]^]\[\[\[\[WWXWXWXWVUVUVUVU|{|{|{|{zyzyzyzyvuvuvuvutstststspopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTS|{|{|{|{zyzyzyzyvuvuvuvuqqqqqqrqpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTS|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTS|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTS|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopoponmnmnmnmlkjijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTS|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[WWWWWXWXVUVUVUVUTSTSTSTS|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[ZYZYZYWXWXWXWXVUVUVUVUTSTSTSTS|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYWXWXWXWXVUVUVUVUTSTSTSTS|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcbababa`_`_`_`_^]^]^]^]ZYZYZYZYWXWXWXWXVUVUVUVUTSTSTSTS|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYWXWXWXWXVUVUVUVUTSTSTSTS|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYWXWXWXWXVUTSTSTSTSTSTSTS|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYWXWWWWWWTSTSTSTSTSTSTSTS|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSTSTSTSTS|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopoponmlklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSTSRQRQRQ|{|{|{|{xwxwxwxwtstststsrqrqrqrqpopopopolklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQ|{|{|{|{xwxwxwxwssssststrqrqrqrqpopopopolklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQ|{|{|{|{xwxwxwxwststststrqrqrqrqpopopopolklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQzyzyzyzyxwxwxwxwststststrqrqrqrqpopopopolklklklkjijijijihghghghgfedcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWWWTSTSTSTSRQRQRQRQzyzyzyzyxwxwxwxwststststrqrqrqrqpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYWWXWXWXWTSTSTSTSRQRQRQRQzyzyzyzyxwxwxwxwststststrqrqrqrqpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWVUVUVUTSTSTSTSRQRQRQRQzyzyzyzyxwxwxwxwststststrqrqrqrqpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQzyzyzyzyxwxwxwxwstssssssrqrqrqrqpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQzyzyzyzyxwxwxwxwtstststsrqrqrqrqponmnmnmlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQzyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQzyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQzyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQzyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmlklklklkjijijijihgfefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQzyzyzyzyxwxwxwxwtststsssrqrqrqrqnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?;<;<;<;<:9:9:9:98787878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!    + + + + RQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?;<;<;;;;:9:9:9:98787878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!  + + + + RQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEDCDCDCBABABABA@?@?@?@?;;<;<;<;:9:9:9:98787878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"! + + + + RQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:98787878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%$#$#$#"!"!"!"! + + + + RQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:98765656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + RQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + RQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + RQRQRQRQPONMNMNMLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + RQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?;;;;;<;<:9:9:9:96565656543434343212121210/.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + RQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?>=>=>=;<;<;<;<:9:9:9:9656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!   + + + + RQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=;<;<;<;<:9:9:9:9656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + RQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGFEFEFEDCDCDCDCBABABABA>=>=>=>=;<;<;<;<:9:9:9:9656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + RQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=;<;<;<;<:9:9:9:9656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('&%&%&%$#$#$#$#"!"!"!"!    + + + + RQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=;<;<;<;<:9878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!       + + + + RQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=;<;;;;;;87878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#      + + + + RQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;87878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + RQPOPOPONMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;87878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + POPOPOPONMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787876565656543434343210/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + POPOPOPONMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + POPOPOPONMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + POPOPOPONMNMNMNMLKLKLKLKJIHGHGHGFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;;;8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#      + + + + POPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDCBABABABA>=>=>=>=;;<;<;<;8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)('('('&%&%&%&%$#$#$#$#       + + + + POPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;:9:9:98787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        + POPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDCBABABABA>=>=>=>=:9:9:9:98787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        POPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDCBA@?@?@?>=>=>=>=:9:9:9:98787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        POPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:98787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        POPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:98787878765656565432121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        POPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#      POPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#"!"!"!        POPOPOPONMNMNMNMLKJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        POPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+*)*)*)('('('('&%&%&%&%"!"!"!"!        POPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + POPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + POPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEDCBABABA@?@?@?@?>=>=>=>=:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + + POPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + POPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;;;;;;<:9:9:9:98787878765434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + POPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?;<;<;<;<:9:9:9:98787878743434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + POPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?;<;<;<;<:9:9:9:98787878743434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + POPOPOPONMLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?;<;<;<;<:9:9:9:98787878743434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + POPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?;<;<;<;<:9:9:9:98787878743434343212121210/0/0/0/.-,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!       + + + + ||{{zzyy55667788 >=<;;::9ppqqrrssAA@@??>>``aabbcc + + QQPPOONNPPQQRRSS WWVVUUTTkkllmmnn$$%%&&''xxwwvvuu99::;;<< + + 98877665ttuuvvww==<<;;::ddeeffgg MMLLKKJJTTUUVVWWSSRRQQPPooppqqrr(())**++ttssrrqq==>>??@@ + + 54433221xxyyzz{{ !!""##99887766hhiijjkkIIHHGGFFXXYYZZ[[OONNMMLLssyyzz{{,,--..//ppoonnmmAABBCCDD 100//..-||||{{zz$$%%&&''55443322llmmnnooEEDDCCBB\\]]^^__KKJJIIHH||||{{zz00112233llkkjjiiEEFFGGHH-,,++**)yyxxwwvv(())**++1100//..ppqqrrssAA@@??>>``aabbcc + + GGFFEEDDyyxwvuts44556677hhggffeeIIJJKKLL)((''&&%uuttssrr,,--..//--,,++**ttuuvvww==<<;;::ddeeffgg CCBBAA;;srrqqppo8899::;;ddccbbaaMMNNOOPP%$#"! qqppoonn00112233))((''&&xxyyzz{{ !!""##99887766hhiijjkk::998877onnmmllk<<==>>??``__^^]]QQRRSSTT%%mmllkkjj44556677%%$$##""||||{{zz$$%%&&''55443322llmmnnoo66554433kjjiihhg@@AABBCC\\[[ZZYYUUVVWWXX&&''(())iihhggff8899::;;!! yyxxwwvv(())**++1100//..ppqqrrss221100//gffeeddcDDEEFFGGXXWWVVUUYYZZ[[\\**++,,--eeddccbb<<==>>??uuttssrr,,--..//--,,++**ttuuvvww..--,,++cbbaa``_HHIIJJKKTTSSRRQQ]]^^__``..//0011aa``__^^@@AABBCCqqppoonn00112233))((''&&xxyyzz{{ !!""##**))((''_^^]]\[ZLLMMNNOOPPOONNMMaabbccdd22334455 ]]\\[[ZZDDEEFFGGmmllkkjj44556677%%$$##""||||{{zz$$%%&&''&&%%YXWWVVUUPPQQRRSSLLKKJJIIeeffgghh66778899 + + YYXXWWVVHHIIJJKKiihhggff8899::;;!! yyxxwwvv(())**++TTSSRRQQTTUUVVWW55443322HHGGFFEEiijjkkll::;;AABBUUTTSSRRLLMMNNOO + +eeddccbb<<==>>??uuttssrr,,--..//PPOONNMMXXYYZZ[[1100//..DDCCBBAAmmnnooppCCDDEEFF + + QQPPOONNPPQQRRSS aa``__^^@@AABBCCqqppoonn00112233LLKKJJII\\]]^^__--,,++**@@??>>==qqrrssttGGHHIIJJ MMLLKKJJTTUUVVWW]]\\[[ZZDDEEFFGGmmllkkjj44556677HHGGFFEE``aabbcc))((''&&<<;;::99uuvvwwxxKKLLMMNNIIHHGGFFXXYYZZ[[YYXXWWVVHHIIJJKKiihhggff8899::;; + +DDCCBBAAddeeffgg%%$$##""88776655yyzz{{||OOPPQQRREEDDCCBB\\]]^^__UUTTSSRRLLMMNNOO + +eeddccbb<<==>>?? @?>=<;;:hhiijjkk!! 44332211||{{zzyySSTTUUVVAA@@??>>``aabbcc + + QQPPOONNPPQQRRSS aa``__^^@@AABBCC:9988776llmmnnoo00//..--ssrrqqppWW]]^^__==<<;;::ddeeffgg MMLLKKJJTTUUVVWW]]\\[[ZZDDEEFFGG + + 65544332ppqqrrss,,++**))oonnmmll``aabbcc !!""##99887766hhiijjkkIIHHGGFFXXYYZZ[[YYXXWWVVHHIIJJKK 21100//.ttuuvvww((''&&%%kkjjiihhddeeffgg$$%%&&''55443322llmmnnooEEDDCCBB\\]]^^__UUTTSSRRLLMMNNOO.--,,++*xxyyzz{{$$##""!!ggffeeddhhiijjkk(())**++1100//..ppqqrrssAA@@??>>``aabbcc + + QQPPOONNPPQQRRSS*))((''&||||{{zz + + ccbbaa``llmmnnoo,,--..//--,,++**ttuuvvww==<<;;::ddeeffgg MMLLKKJJTTUUVVWW&%%$#"! yyxxwwvv __^^]]WWppqqrrss00112233))((''&&xxyyzz{{ !!""##99887766hhiijjkkIIHHGGFFXXYYZZ[[uuttssrrVVUUTTSSyyzz{{||44556677%%$$##""||||{{zz$$%%&&''55443322llmmnnooEEDDCCBB\\]]^^__%%&&''((qqppoonnRRQQPPOO||{{zzyy8899::;;!! yyxxwwvv(())**++1100//..ppqqrrssAA@@??>>``aabbcc))**++,,mmllkkjj NNMMLLKKxwvutssr<<==>>??uuttssrr,,--..//--,,++**ttuuvvww==<<;;::ddeeffgg--..//00iihhggff + + + + JJIIHHGGrqqppoon@@AABBCCqqppoonn00112233))((''&&xxyyzz{{ !!""##99887766hhiijjkk11223344 eeddccbb  + + FFEEDDCCnmmllkkjDDEEFFGGmmllkkjj44556677%%$$##""||||{{zz$$%%&&''55443322llmmnnoo55667788 + + aa``__^^ BBAA;;::jiihhggfHHIIJJKKiihhggff8899::;;!! yyxxwwvv(())**++1100//..ppqqrrss99::;;AA]]\\[[ZZ99887766feeddccbLLMMNNOO + +eeddccbb<<==>>??uuttssrr,,--..//--,,++**ttuuvvwwBBCCDDEEYYXXWWVV55443322baa``__^PPQQRRSS aa``__^^@@AABBCCqqppoonn00112233))((''&&xxyyzz{{FFGGHHIIUUTTSSRR1100//..^]]\[ZYXTTUUVVWW]]\\[[ZZDDEEFFGGmmllkkjj44556677%%$$##""||||{{zzJJKKLLMM + + QQPPOONN !!""## --,,++**WWVVUUTTXXYYZZ[[YYXXWWVVHHIIJJKKiihhggff8899::;;!! yyssrrqqNNOOPPQQ MMLLKKJJ$$%%&&''!!""##$$))((''&&SSRRQQPP\\]]^^__UUTTSSRRLLMMNNOO + +eeddccbb<<==>>??ppoonnmmRRSSTTUUIIHHGGFF(())**++%%&&''((%%OONNMMLL``aabbcc + + QQPPOONNPPQQRRSS aa``__^^@@AABBCCllkkjjiiVVWW]]^^EEDDCCBB,,--..//))**++,,KKJJIIHHddeeffgg MMLLKKJJTTUUVVWW]]\\[[ZZDDEEFFGGhhggffee__``aabbAA@@??>>00112233--..//00GGFFEEDDhhiijjkkIIHHGGFFXXYYZZ[[YYXXWWVVHHIIJJKKddccbbaaccddeeff==<<;;::4455667711223344CCBBAA@?llmmnnooEEDDCCBB\\]]^^__UUTTSSRRLLMMNNOO + +``__^^]]gghhiijj !!""##998877668899::;;<<==>>??uuttssrr,,--..//--,,++**ttuuvvww..--,,++cbbaa``_HHIIJJKKiihhggff8899::;;!! yyxxwwvv(())**++1100//..ppqqrrss99::;;AA]]\\[[ZZDDEEFFGGmmllkkjj44556677%%$$##""||||{{zz$$%%&&''AA@@??>>@@AABBCCqqppoonn00112233))((''&&xxyyzz{{ !!""##**))((''_^^]]\[ZLLMMNNOO + +eeddccbb<<==>>??uuttssrr,,--..//--,,++**ttuuvvwwBBCCDDEEYYXXWWVVHHIIJJKKiihhggff8899::;;!! yyxxwwvv(())**++==<<;;::DDEEFFGGmmllkkjj44556677%%$$##""||||{{zz$$%%&&''&&%%YXWWVVUUPPQQRRSS aa``__^^@@AABBCCqqppoonn00112233))((''&&xxyyzz{{FFGGHHIIUUTTSSRRLLMMNNOO + +eeddccbb<<==>>??uuttssrr,,--..//99887766HHIIJJKKiihhggff8899::;;!! yyxxwwvv(())**++TTSSRRQQTTUUVVWW]]\\[[ZZDDEEFFGGmmllkkjj44556677%%$$##""||||{{zzJJKKLLMM + + QQPPOONNPPQQRRSS aa``__^^@@AABBCCqqppoonn0011223355443322LLMMNNOO + +eeddccbb<<==>>??uuttssrr,,--..//PPOONNMMXXYYZZ[[YYXXWWVVHHIIJJKKiihhggff8899::;;!! yyssrrqqNNOOPPQQ MMLLKKJJTTUUVVWW]]\\[[ZZDDEEFFGGmmllkkjj44556677 1100//..PPQQRRSS aa``__^^@@AABBCCqqppoonn00112233LLKKJJII\\]]^^__UUTTSSRRLLMMNNOO + +eeddccbb<<==>>??ppoonnmmRRSSTTUUIIHHGGFFXXYYZZ[[YYXXWWVVHHIIJJKKiihhggff8899::;; + + + +--,,++**TTUUVVWW]]\\[[ZZDDEEFFGGmmllkkjj44556677HHGGFFEE``aabbcc + + QQPPOONNPPQQRRSS aa``__^^@@AABBCCllkkjjiiVVWW]]^^EEDDCCBB\\]]^^__UUTTSSRRLLMMNNOO + +eeddccbb<<==>>?? ))((''&&XXYYZZ[[YYXXWWVVHHIIJJKKiihhggff8899::;; + +DDCCBBAAddeeffgg MMLLKKJJTTUUVVWW]]\\[[ZZDDEEFFGGhhggffee__``aabbAA@@??>>``aabbcc + + QQPPOONNPPQQRRSS aa``__^^@@AABBCC%%$$##""\\]]^^__UUTTSSRRLLMMNNOO + +eeddccbb<<==>>?? @?>=<;;:hhiijjkkIIHHGGFFXXYYZZ[[YYXXWWVVHHIIJJKKddccbbaaccddeeff==<<;;::ddeeffgg MMLLKKJJTTUUVVWW]]\\[[ZZDDEEFFGG!! ``aabbcc + + QQPPOONNPPQQRRSS aa``__^^@@AABBCC:9988776llmmnnooEEDDCCBB\\]]^^__UUTTSSRRLLMMNNOO + +``__^^]]gghhiijj !!""##99887766hhiijjkkIIHHGGFFXXYYZZ[[YYXXWWVVHHIIJJKKddeeffgg MMLLKKJJTTUUVVWW]]\\[[ZZDDEEFFGG + + 65544332ppqqrrssAA@@??>>``aabbcc + + QQPPOONNPPQQRRSS WWVVUUTTkkllmmnn$$%%&&''55443322llmmnnooEEDDCCBB\\]]^^__UUTTSSRRLLMMNNOOhhiijjkkIIHHGGFFXXYYZZ[[YYXXWWVVHHIIJJKK 21100//.ttuuvvww==<<;;::ddeeffgg MMLLKKJJTTUUVVWWSSRRQQPPooppqqrr(())**++1100//..ppqqrrssAA@@??>>``aabbcc + + QQPPOONNPPQQRRSS%%&&''llmmnnooEEDDCCBB\\]]^^__UUTTSSRRLLMMNNOO.--,,++*xxyyzz{{ !!""##99887766hhiijjkkIIHHGGFFXXYYZZ[[OONNMMLLssyyzz{{,,--..//--,,++**ttuuvvww==<<;;::ddeeffgg MMLLKKJJTTUUVVWW(())**++ppqqrrssAA@@??>>``aabbcc + + QQPPOONNPPQQRRSS*))((''&||||{{zz$$%%&&''55443322llmmnnooEEDDCCBB\\]]^^__KKJJIIHH||||{{zz00112233))((''&&xxyyzz{{ !!""##99887766hhiijjkkIIHHGGFFXXYYZZ[[,,--..// + +ttuuvvww==<<;;::ddeeffgg MMLLKKJJTTUUVVWW&%%$#"! yyxxwwvv(())**++1100//..ppqqrrssAA@@??>>``aabbcc + + GGFFEEDDyyxwvuts44556677%%$$##""||||{{zz$$%%&&''55443322llmmnnooEEDDCCBB\\]]^^__00112233 + + xxyyzz{{ !!""##99887766hhiijjkkIIHHGGFFXXYYZZ[[uuttssrr,,--..//--,,++**ttuuvvww==<<;;::ddeeffgg CCBBAA;;srrqqppo8899::;;!! yyxxwwvv(())**++1100//..ppqqrrssAA@@??>>``aabbcc44556677 ||||{{zz$$%%&&''55443322llmmnnooEEDDCCBB\\]]^^__%%&&''((qqppoonn00112233))((''&&xxyyzz{{ !!""##99887766hhiijjkk::998877onnmmllk<<==>>??uuttssrr,,--..//--,,++**ttuuvvww==<<;;::ddeeffgg8899::;;yyxxwwvv(())**++1100//..ppqqrrssAA@@??>>``aabbcc))**++,,mmllkkjj44556677%%$$##""||||{{zz$$%%&&''55443322llmmnnoo66554433kjjiihhg@@AABBCCqqppoonn00112233))((''&&xxyyzz{{ !!""##99887766hhiijjkkAABBCCDDuuttssrr,,--..//--,,++**ttuuvvww==<<;;::ddeeffgg--..//00iihhggff8899::;;!! yyxxwwvv(())**++1100//..ppqqrrss221100//gffeeddcDDEEFFGGmmllkkjj44556677%%$$##""||||{{zz$$%%&&''55443322llmmnnooEEFFGGHHqqppoonn00112233))((''&&xxyyzz{{ !!""##99887766hhiijjkk11223344 eeddccbb<<==>>??uuttssrr,,--..//--,,++**ttuuvvww..--,,++cbbaa``_HHIIJJKKiihhggff8899::;;!! yyxxwwvv(())**++1100//..ppqqrrssIIJJKKLLmmllkkjj44556677%%$$##""||||{{zz$$%%&&''55443322llmmnnoo55667788 + + aa``__^^@@AABBCCqqppoonn00112233))((''&&xxyyzz{{ !!""##**))((''_^^]]\[ZLLMMNNOO + +eeddccbb<<==>>??uuttssrr,,--..//--,,++**ttuuvvwwMMNNOOPP !!""##iihhggff8899::;;!! yyxxwwvv(())**++1100//..ppqqrrss99::;;AA]]\\[[ZZDDEEFFGGmmllkkjj44556677%%$$##""||||{{zz$$%%&&''&&%%YXWWVVUUPPQQRRSS aa``__^^@@AABBCCqqppoonn00112233))((''&&xxyyzz{{QQRRSSTT$$%%&&''eeddccbb<<==>>??uuttssrr,,--..//--,,++**ttuuvvwwBBCCDDEEYYXXWWVVHHIIJJKKiihhggff8899::;;!! yyxxwwvv(())**++TTSSRRQQTTUUVVWW]]\\[[ZZDDEEFFGGmmllkkjj44556677%%$$##""||ttssrrUUVVWW]](())**++aa``__^^@@AABBCCqqppoonn00112233))((''&&xxyyzz{{FFGGHHIIUUTTSSRRLLMMNNOO + +eeddccbb<<==>>??uuttssrr,,--..//PPOONNMMXXYYZZ[[YYXXWWVVHHIIJJKKiihhggff8899::;;!! qqppoonn^^__``aa,,--..//]]\\[[ZZDDEEFFGGmmllkkjj44556677%%$$##""||||{{zzJJKKLLMM + + QQPPOONNPPQQRRSS aa``__^^@@AABBCCqqppoonn00112233LLKKJJII\\]]^^__UUTTSSRRLLMMNNOO + +eeddccbb<<==>>??mmllkkjjbbccddee00112233YYXXWWVVHHIIJJKKiihhggff8899::;;!! yyssrrqqNNOOPPQQ MMLLKKJJTTUUVVWW]]\\[[ZZDDEEFFGGmmllkkjj44556677HHGGFFEE``aabbcc + + QQPPOONNPPQQRRSS aa``__^^@@AABBCCiihhggffffgghhii44556677UUTTSSRRLLMMNNOO + +eeddccbb<<==>>??ppoonnmmRRSSTTUUIIHHGGFFXXYYZZ[[YYXXWWVVHHIIJJKKiihhggff8899::;; + +DDCCBBAAddeeffgg MMLLKKJJTTUUVVWW]]\\[[ZZDDEEFFGGeeddccbbjjkkllmm8899::;;QQPPOONNPPQQRRSS aa``__^^@@AABBCCllkkjjiiVVWW]]^^EEDDCCBB\\]]^^__UUTTSSRRLLMMNNOO + +eeddccbb<<==>>?? @?>=<;;:hhiijjkkIIHHGGFFXXYYZZ[[YYXXWWVVHHIIJJKKaa``__^^nnooppqq<<==>>??MMLLKKJJTTUUVVWW]]\\[[ZZDDEEFFGGhhggffee__``aabbAA@@??>>``aabbcc + + QQPPOONNPPQQRRSS aa``__^^@@AABBCC:9988776llmmnnooEEDDCCBB\\]]^^__UUTTSSRRLLMMNNOO + +]]WWVVUUqqppoonn@@AABBCCIIHHGGFFXXYYZZ[[YYXXWWVVHHIIJJKKddccbbaaccddeeff==<<;;::ddeeffgg MMLLKKJJTTUUVVWW]]\\[[ZZDDEEFFGG + + 65544332ppqqrrssAA@@??>>``aabbcc + + QQPPOONNPPQQRRSS TTSSRRQQmmllkkjjDDEEFFGGEEDDCCBB\\]]^^__UUTTSSRRLLMMNNOO + +``__^^]]gghhiijj !!""##99887766hhiijjkkIIHHGGFFXXYYZZ[[YYXXWWVVHHIIJJKK 21100//.ttuuvvww==<<;;::ddeeffgg MMLLKKJJTTUUVVWWPPOONNMMiihhggffHHIIJJKKAA@@??>>``aabbcc + + QQPPOONNPPQQRRSS WWVVUUTTkkllmmnn$$%%&&''55443322llmmnnooEEDDCCBB\\]]^^__UUTTSSRRLLMMNNOO.--,,++*xxyyzz{{ !!""##99887766hhiijjkkIIHHGGFFXXYYZZ[[LLKKJJIIeeddccbbLLMMNNOO==<<;;::ddeeffgg MMLLKKJJTTUUVVWWSSRRQQPPooppqqrr(())**++1100//..ppqqrrssAA@@??>>``aabbcc + + QQPPOONNPPQQRRSS*))((''&||||{{zz$$%%&&''55443322llmmnnooEEDDCCBB\\]]^^__HHGGFFEEaa``__^^PPQQRRSS99887766hhiijjkkIIHHGGFFXXYYZZ[[OONNMMLLssyyzz{{,,--..//--,,++**ttuuvvww==<<;;::ddeeffgg MMLLKKJJTTUUVVWW&%%$#"! yyxxwwvv(())**++1100//..ppqqrrssAA@@??>>``aabbcc + + DDCCBBAA]]\\[[ZZTTUUVVWW55443322llmmnnooEEDDCCBB\\]]^^__KKJJIIHH||||{{zz00112233))((''&&xxyyzz{{ !!""##99887766hhiijjkkIIHHGGFFXXYYZZ[[uuttssrr,,--..//--,,++**ttuuvvww==<<;;::ddeeffgg ;;::9988YYXXWWVVXXYYZZ[[1100//..ppqqrrssAA@@??>>``aabbcc + + GGFFEEDDyyxwvuts44556677%%$$##""||||{{zz$$%%&&''55443322llmmnnooEEDDCCBB\\]]^^__%%&&''((qqppoonn00112233))((''&&xxyyzz{{ !!""##99887766hhiijjkk77665544UUTTSSRR\\]]^^__--,,++**ttuuvvww==<<;;::ddeeffgg CCBBAA;;srrqqppo8899::;;!! yyxxwwvv(())**++1100//..ppqqrrssAA@@??>>``aabbcc))**++,,mmllkkjj44556677%%$$##""||||{{zz$$%%&&''55443322llmmnnoo33221100QQPPOONN``aabbcc))((''&&xxyyzz{{ !!""##99887766hhiijjkk::998877onnmmllk<<==>>??uuttssrr,,--..//--,,++**ttuuvvww==<<;;::ddeeffgg--..//00iihhggff8899::;;!! yyxxwwvv(())**++1100//..ppqqrrss//..--,,MMLLKKJJddeeffgg%%$$##""||||{{zz$$%%&&''55443322llmmnnoo66554433kjjiihhg@@AABBCCqqppoonn00112233))((''&&xxyyzz{{ !!""##99887766hhiijjkk11223344 eeddccbb<<==>>??uuttssrr,,--..//--,,++**ttuuvvww++**))((IIHHGGFFhhiijjkk!! yyxxwwvv(())**++1100//..ppqqrrss221100//gffeeddcDDEEFFGGmmllkkjj44556677%%$$##""||||{{zz$$%%&&''55443322llmmnnoo55667788 + + aa``__^^@@AABBCCqqppoonn00112233))((''&&xxyyzz{{ !!""##''&&%%EEDDCCBBllmmnnooppqqfpvbHAZJltJQr˂pJtArdrXQJ`tAJlnvp|ZdQ`f~Zp˂|dtA`JXQrdQbtrXQJ`nXv`p˂rbdQZ|ZHAb|ZdQےbHAtbdQZfH~btlHfpvrXQJ`Jlt˂pZlJtArےbHAf~HXQJ`ے`vXnے`JXbtlZp˂|drf`vXJtArdnXvےbHAbnvHAbےdtlZp˂fpvbHAZvpfQr˂pJfpvrXQJ`tAJlnvp|ZdQ`f~Zp˂pfH`JXQrJfpvrXQJ`nXv`p˂rH~fZHAbnXvےbHAtbdQZfH~btlHfpvrXQJ`f`vX˂pZnvfےbHAf~HXQJ`ے`vXnے`JX`f~Zp˂|drf`vXJtArdnXvےbHAnvpHAb~HfpZp˂fpvbHAZvpfQrZHAHfpvrXQJ`tAJlnvp|ZdQ`f~Zp˂fH~˂pZHAvnXrXQJ`nXv`p˂rH~bے`nXvےbHAtbdQZfے`JbtlHfpvrXQJ`f`vXbے`v`fےbHAf~HXQJ`ےvpfHJXQr`f~Zp˂|drXQr˂JtArdnXvےbHAnvpJXQr~HfpZp˂fpvbHAZ~f`˂pZHAHfpvrXQJ`tAJlpZHAb|ZdQ`f~Zp˂fH~˂pZHAvnXrXQJ`nXv`p˂rvXnbے`nXvےbHAtbdQZے`JbtlHfpvrXQJ`f`vXbے`v`f~ےbHAf~HXQJ`ےvpfHJXQr`f~Zp˂|drXQr˂JtArdnXvےJlnvpJXQHAbfpvZp˂fpvbHAZ~f`˂pZHAHfpvrXQJ`tAJlpZHAb|ZdQ`f~tbdQZfH~ے`JnXv`rXQJ`tAJlnXv`p˂rvXH~bJAdnXvےbHAtbdQZے`JbtlHfpv|drf`vXXQr˂f~HےbHAtbdQZf~HXQJ`ےf`v|ZdQ`f~Zp˂|dtAXQr˂JtArdnXvtAJlnvppZHAbfpvZp˂|drfpvbHAZXnvbtlHfpvrXQJ`JltpZHAb|ZdQ`f~tbdQZfH~ے`JnXv`rXQJ`tAJlnXv`p˂rpfH~JtArdnXvےbHAbnvے`JbtlHfpv|drf`vXXQr˂f~HےbHAtbdQZf~HXQJ`ےf`v|ZdQ`f~Zp˂pfHXQr˂JtArdnXvtAJlnvpp`JXQfvnXZp˂|drfpvJltXnvbtlHfpvrXQJ`f`vXpZHAb|ZdQ`fHtbdQZfH~rbtv`frXQJ`tAJlnXv`drtAJp`vXJtArdnXvےbHAnvpے`Jbtlfpv|drf`vXl|ZdQ~HfpےbHAtbdQZf~Hltbnvp|ZdQ`f~Zp˂fH~XQr˂JtArdnrXQJtAJlnvpbtlvnXZp˂|drfpvdQZ|fH~btlHfpvrXQJ`f`vXpZHAb|ZdQ`ےHAtbdQZfH~JtArdv`frXQJ`tAJlnXv`drtAJf`vXJtArdnXvےbHAnvpے`JbtlZp˂|drf`vX|ZdQ~HfpےJltbdQZf~Hltbnvp|ZdQ`f~Zp˂fH~XQr˂JtArdrXQJ`tAJlnvpbtlvnvftbdQZ|dtAfpvdQZ|lfH~btlHfpvrXQJ`f`vXpZHAb|ZdQےbHAtbdQZfH~JtArd~Hf|drJltnXv`tbdQvpfJtArdnXvےJlnvpے`JbtlZp˂|drf`vXtlJpvntAJlbnvf~HZ|dے`JXQ|ZdQ`f~tbdQZfH~XQr˂JtArdrXQJ`tAJlnvptArdXv`ftbdQZpfHfpvrtAJlrZHAbtlHfpv|drf`vXpZHAb|ZdQےbHAtbdQZfH~|ZdQb~Hf|drf`vXnXv`tbdQbے`JtArdnXvtAJlnvpے`JbtlZp˂|drf`vXtlJpvntAJlnvpp˂rZ|dJXQr|ZdQ`f~tbdQZfH~XQr˂JfpvrXQJ`tAJlnvptArdXv`ftbdQZfH~XQJ`ےrtAdQZpZHAbtlHfpv|drf`vXpZHAbnXvےbHAtbdQZfH~|ZdQtAfpv|drf`vXbHAZ|drbے`JtArdnXvtAJlnvpے`J`f~Zp˂|drf`vXrd|nrXQJtAJlnvpp˂rtAJlJXQr|ZdQ`fHtbdQZfH~XQr˂HfpvrXQJ`tAJlnvpZdQbt`ےHAtbdQZfH~XQJ`ےtbdQZpZAbbtlfpv|drf`vXpZHAbnXvےbHAtbdQZfے`JlJtAZp˂|drf`vXbHAZ|dr`JXQrJtArdnrXQJtAJlnvpے`J`f~Zp˂|drXQHAbrd|rXQJ`tAJlnvpp˂rtAJl璀˂pZ|ZdQ`ےHAtbdQZfH~XQr˂HfpvrXQJ`tAJlے`JXQZdQbtےbHAtbdQZfH~XQJ`ےtdrtAHAbےbtlZp˂|drf`vXpZHAnXvےbHAtbdQZr˂pl|ZZp˂|drf`vXbHAZJlt`JXQrJtArdrXQJ`tAJlnvpے`JXQ`f~Zp˂|drZHAbdQbtrXQJ`tAJlnvpp˂rbdQZ|˂pZ|ZdQےbHAtbdQZfH~rbtHfpvrXQJ`tAJlے`JXQlJtArےbHAtbdQZfH~XQJ`ےdrtAHAbbtlZp˂|drf`vXlJtAdnXvےbHAtbdQZr˂pd|ZZp˂|drf`vXnvpے`J`f~Zp˂|drf`vXJtArdv`ftbdnvpے`J`f~Zp˂|drXQr˂JtArdnXvےbHA`vXH`JXQ`f~Zp˂|drXQr˂JtArdnXvےJlnvpbے`f۝`vfH~XQr˂HfpvrXQJ`tAJlnvp|ZdQ~HfpQZ|rfH~XQr˂HfpvrXQJ`tAJlpZHAb|ZdQ`f~Zp˂~f`rbtHfpvrXQJ`tAJlpZHAb|ZdQ`f~tbdQZfH~JXQrXnvf`vXpZHAbnXvےbHAtbdQZfے`Jbtlv~AJltf`vXpZHAnXvےbHAtbdQZے`JbtlHfpvrXQJ`vXnlJtAdnXvےbHAtbdQZے`JbtlHfpv|drf`vX˂pZHApfH~nvpے`J`f~Zp˂|drXQr˂JtArdHfpvbdQZ|nvpے`JXQ`f~Zp˂|drXQr˂JtArdnXvےJlvpfH|ZdQ`f~Zp˂|dtAXQr˂JtArdnXvtAJlnvpbے`f۝`vfH~XQr˂HfpvrXQJ`tAJlpZHAb|ZdQnXvdrtAfH~rbtHfpvrXQJ`tAJlpZHAb|ZdQ`f~tdrtA~f`btlHfpvrXQJ`JltpZHAb|ZdQ`f~tbdQZfH~JXQrXnvf`vXpZHAnXvےbHAtbdQZے`Jbtl`f~Jltf`vXlJtAdnXvےbHAtbdQZے`JbtlHfpvJltvXnJtArdnXvےbHAbnvے`JbtlHfpv|drf`vX˂p`ZpfH~nvpے`JXQ`f~Zp˂|drXQr˂JtArdHfpvbdQZ|nvp|ZdQ`f~Zp˂|dtAXQr˂JtArdnXvbdQZ|vp`v|ZdQ`f~Zp˂pfHXQr˂JtArdnXvtAJlnvpQXb㉀ۅf۝`vfH~rbtHfpvrXQJ`tAJlpZHAb|ZdQnXvdrtAfH~btlHfpvrXQJ`JltpZHAb|ZdQ`f~drtAXnvbtlHfpvrXQJ`f`vXpZHAb|ZdQ`fHtbdQZfH~pJAHrXnvf`vXlJtAdnXvےbHAtbdQZے`Jbtl`pvJbdQf`vXJtArdnXvےbHAbnvے`JbtlHfpvJltpfH~JtArdnXvےbHAnvpے`Jbtlfpv|drf`vXˁ`ZpfH~nvp|ZdQ`f~Zp˂|dtAXQr˂JtArdnrXQJZ|dnvp|ZdQ`f~Zp˂pfHXQr˂JtArdnXvbdQZ|f`v|ZdQ`f~Zp˂fH~XQr˂JtArdnrXQJtAJlnvpQXb㉀ۅf۝`vfH~btlHfpvrXQJ`JltpZHAb|ZdQ`p˂rtAJlfH~btlHfpvrXQJ`f`vXpZHAb|ZdQ`fHltbXnvbtlHfpvrXQJ`f`vXpZHAb|ZdQ`ےHAtbdQZfH~pJAHrXnvf`vXJtArdnXvےbHAbnvے`JbtlrXQJ`tbdQf`vXJtArdnXvےbHAnvpے`JbtlfpvdQZ|pfH~JtArdnXvےbHAnvpے`JbtlZp˂|drf`vXۑppfH~nvp|ZdQ`f~Zp˂pfHXQr˂JtArdےbHAZ|dnvp|ZdQ`f~Zp˂fH~XQr˂JtArdnrXQJdrtAJvp|ZdQ`f~Zp˂fH~XQr˂JtArdrXQJ`tAJlnvpJAHr󙐅f۝`vfH~btlHfpvrXQJ`f`vXpZHAb|ZdQZp˂rtAJlfے`JbtlHfpvrXQJ`f`vXpZHAb|ZdQ`ےHAltbfے`JbtlHfpvrXQJ`f`vXpZHAb|ZdQےbHAtbdQZfH~ˁ`ZQXXnvf`vXJtArdnXvےbHAnvpے`JbtlrXQJ`tbQZXQr˂JtArdnXvےbHAnvpے`JbtlZp˂dQZ|XQrZHJtArdnXvےJlnvpے`JbtlZp˂|drf`vXb㉀ۑpp|dnvp|ZdQ`f~Zp˂fH~XQr˂JtArdےbHAdrtAJpZHAb|ZdQ`f~Zp˂fH~XQr˂JtArdrXQJ`drtAdQAbے`|ZdQ`f~tbdQZfH~XQr˂JtArdrXQJ`tAJlnvpJAHrrQtJlfے`JbtlHfpvrXQJ`f`vXpZHAb|ZdQXQJ`ےltbے`JbtlHfpvrXQJ`f`vXpZHAb|ZdQےbHAZ|dJXQrbtlHfpv|drf`vXpZHAb|ZdQےbHAtbdQZfH~ˁ`ZQXtbAdXQr˂JtArdnXvےbHAnvpے`JbtlbHAZdQZ|XQr˂JtArdnXvےJlnvpے`JbtlZp˂rtAJl˂pZHJtArdnXvtAJlnvpے`JbtlZp˂|drf`vXAHr󙐂Z|dpZHAb|ZdQ`f~Zp˂fH~XQr˂JtArdp˂rdrtAJpZHAb|ZdQ`f~tbdQZfH~XQr˂JtArdrXQJ`tbdQAbے`|ZdQ`f~tbdQZfH~XQr˂JfpvrXQJ`tAJlnvp`ZQXbrQtJlے`JbtlHfpvrXQJ`f`vXpZHAb|ZdQXQJ`ےltbے`JbtlHfpv|drf`vXpZHAb|ZdQےbHAZ|dJXQrbtlHfpv|drf`vXpZHAbnXvےbHAtbdQZfH~ۑpJtbAdXQr˂JtArdnXvےJlnvpے`JbtlbHAZdQZ|XQr˂JtArdnXvtAJlnvpے`JbtlZp˂rtAJl˂pZAbJtArdnXvtAJlnvpے`J`f~Zp˂|drf`vXAHr󙐂Z|dpZHAb|ZdQ`f~tbdQZfH~XQr˂JtArdp˂AJltpZHAb|ZdQ`f~tbdQZfH~XQr˂JfpvrXQJ`tdr`JXQ|ZdQ`fHtbdQZfH~XQr˂HfpvrXQJ`tAJlnvp`ZQXbrQtJlے`JbtlHfpv|drf`vXpZHAb|ZdQbHAZpbnvے`JbtlHfpv|drf`vXpZHAbnXvےbHAtAJlr˂pbtlfpv|drf`vXpZHAbnXvےbHAtbdQZfZHAbۑp`tbAdXQr˂JtArdnXvtAJlnvpے`Jbtl˂rXQpfHXQr˂JtArdnXvtAJlnvpے`J`f~Zp˂tbdQZZHAbJtArdnrXQJtAJlnvpے`J`f~Zp˂|drے`JZQXb㉀Z|dpZHAb|ZdQ`f~tbdQZfH~XQr˂JfpvJ`ےf`vXpZHAb|ZdQ`fHtbdQZfH~XQr˂HfpvrXQJ`|drے`JXQ|ZdQ`ےHAtbdQZfH~XQr˂HfpvrXQJ`tAJlXQr˂ۑpJAHrQtJlے`JbtlHfpv|drf`vXpZHAb~HbHAZpnvpے`Jbtlfpv|drf`vXpZHAbnXvےbHAtAJlr˂pbtlZp˂|drf`vXpZHAnXvےbHAtbdQZpZHAbr󙐂ˁ`tbAdXQr˂JtArdnXvtAJlnvpے`Jfpv˂rXQfH~XQr˂JtArdnrXQJtAJlnvpے`J`f~Zp˂tbdQZZHAbJtArdrXQJ`tAJlnvpے`JXQ`f~Zp˂|drے`JZQXb㉀Z|dpZHAb|ZdQ`fHtbdQZfH~XQr˂nXv`J`p˂f`vXpZHAb|ZdQ`ےHAtbdQZfH~XQr˂HfpvrXQJ`|ltJQr|ZdQےbHAtbdQZfH~rbtHfpvrXQJ`tAJlXQr˂ۑpJAHrQtJlے`Jbtlfpv|drf`vXpZHAbf~HrXQJnvpے`JbtlZp˂|drf`vXpZHAnXvےbHAbnvpZHAbtlZp˂|drf`vXlJtAdnXvےbHAtbdQZp`JXQf۝`vtbAdXQr˂JtArdnrXQJtAJlnvpے`Jfpv`ےbfH~XQr˂JtArdrXQJ`tAJlnvpے`JXQ`f~Zp˂p`vXbے`JtArdrXQJ`tAJlnvp|ZdQ`f~Zp˂|dtAr˂pXnvZ|dpZHAb|ZdQ`ےHAtbdQZfH~XQr˂nXv`HAZp˂f`vXpZHAb|ZdQےbHAtbdQZfH~rbtHfpvrXQJ`nvpJXQr|ZdQےbHAtbdQZfH~btlHfpvrXQJ`JltZHAbpfH~rQtJlے`JbtlZp˂|drf`vXpZHApvnrXQJnvpے`JbtlZp˂|drf`vXlJtAdnXvےbHAfH~pZHAbtlZp˂|drf`vXJtArdnXvےbHAbnvے`JXQf۝`vtbAdXQr˂JtArdrXQJ`tAJlnvpے`JXQXv`f`ےbfH~XQr˂JtArdrXQJ`tAJlnvp|ZdQ`f~Zp˂f`vXbے`JfpvrXQJ`tAJlnvp|ZdQ`f~Zp˂pfHr˂pXnvZ|dpZHAb|ZdQےbHAtbdQZfH~rbt璐~HfHAXQJ`f`vXpZHAb|ZdQےbHAtbdQZfH~btlHfpvrXQJ`nvpJXQrZnXvےbHAtbdQZfH~btlHfpvrXQJ`f`vXZHAbpfH~rQtJlے`JbtlZp˂|drf`vXlJtAdpvnےJlnvpے`JbtlZp˂|drf`vXJtArdnXvےbHAfH~HAbے`f~Zp˂|drf`vXJtArdnXvےbHAnvp˂pZf۝`vtbAdXQr˂JtArdrXQJ`tAJlnvp|ZdQXv`ftbQZdfH~XQr˂JfpvrXQJ`tAJlnvp|ZdQ`f~Zp˂vpf`JXQrHfpvrXQJ`tAJlnvp|ZdQ`f~Zp˂fH~HAbےXnvZ|dpZHAb|ZdQےbHAtbdQZfH~btl~HXrtAJlf`vXpZHAbnXvےbHAtbdQZfH~btlHfpvrXQJ`H~f˂pZnXvےbHAtbdQZfے`JbtlHfpvrXQJ`f`vX`JXQrpfH~rQtJlے`JbtlZp˂|drf`vXJtArdv`ftbdnvpے`J`f~Zp˂|drf`vXJtArdnXvےbHA`vXnHAbے`f~Zp˂|drXQr˂JtArdnXvےbHAnvp˂pZf۝`vtbAdXQr˂JfpvrXQJ`tAJlnvp|ZdQ~HfpQZ|dfH~XQr˂HfpvrXQJ`tAJlnvp|ZdQ`f~Zp˂vpf`JXQrHfpvrXQJ`tAJlpZHAb|ZdQ`f~Zp˂fH~HAbےXnvZ|dpZHAbnXvےbHAtbdQZfH~btlvnXrtAJlf`vXpZHAbnXvےbHAtbdQZfے`JbtlHfpvrXQJ`H~f˂pZAnXvےbHAtbdQZے`JbtlHfpvrXQJ`f`vX`JXQHApfH~rQtJltuvwxyz{||{zyxwv------------............................ \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv27_3.dat b/vendor/endroid/qr-code/assets/data/qrv27_3.dat new file mode 100644 index 000000000..468ef041a --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv27_3.dat @@ -0,0 +1,249 @@ +|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJI|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJI|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJI|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcba`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJI|{|{|{|{zyzyzyzyxwxwxwxwtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJI|{|{|{|{zyzyzyzyxwxwxwxwssssststrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWWWTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJI|{|{|{|{zyzyzyzyxwxwxwxwststststrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcbababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJI|{|{|{|{zyzyzyzyxwxwxwxwststststrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJI|{|{|{|{zyzyzyzyxwxwxwxwststststrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHG|{|{|{|{zyzyzyzyxwxwxwxwststststrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfedcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHG|{|{|{|{zyzyzyzyxwxwxwxwststststrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHG|{|{|{|{zyzyzyzyxwxwxwxwstssssssrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHG|{|{|{|{zyzyzyzyxwxwxwxwtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihgfefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHG|{|{|{|{zyzyzyzyxwxwxwxwtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHG|{|{|{|{zyzyzyzyvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWWWWWWXVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHG|{|{|{|{zyzyzyzyvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjihghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[WXWXWXWXVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHG|{|{|{|{zyzyzyzyvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[WXWXWXWXVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHG|{|{|{|{zyzyzyzyvuvuvuvutststsssrqrqrqrqpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[WXWXWXWXVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHG|{|{|{|{zyzyzyzyvuvuvuvussstststrqrqrqrqpopopoponmnmnmnmlkjijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[WXWXWXWXVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHG|{|{|{|{zyzyzyzyvuvuvuvuststststrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[WXWXWXWXVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHG|{|{|{|{zyzyzyzyvuvuvuvuststststrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[WXWXWWWWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIHGHGHGHGHGHGHG|{|{|{|{zyzyzyzyvuvuvuvuststststrqrqrqrqpopopoponmlklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[WWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKHGHGHGHGHGHGHGHG|{|{|{|{zyzyzyzyvuvuvuvuststststrqrqrqrqpopopopolklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[ZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKHGHGHGHGHGHGHGHG|{|{|{|{zyzyzyzyvuvuvuvuststststrqrqrqrqpopopopolklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKJIJIJIHGHGHGHGHGHGHGHG|{|{|{|{xwxwxwxwvuvuvuvusssssstsrqrqrqrqponmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGHGHGHGHG|{|{|{|{xwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGHGFEFEFE|{|{|{|{xwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMLKLKLKJIJIJIJIHGHGHGHGFEFEFEFE|{|{|{|{xwxwxwxwvuvuvuvutstststsrqpopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYWWWWWXWXVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFE|{|{|{|{xwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYWXWXWXWXVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEzyzyzyzyxwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYWXWXWXWXVUVUVUVUTSTSTSTSRQRQRQRQPONMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEzyzyzyzyxwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYWXWXWXWXVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEzyzyzyzyxwxwxwxwvuvuvuvuqqqqqqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]\[\[\[ZYZYZYZYWXWXWXWXVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEzyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYWXWXWXWXVUVUVUVUTSTSTSTSRQPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEzyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYWXWWWWWWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABA@?@?@?@?;<;<;<;<:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + FEFEFEFEDCDCDCDCBABABABA@?@?@?@?;<;<;<;<:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!       + + + + FEFEFEFEDCDCDCDCBABABABA@?@?@?@?;<;<;<;<:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!       + + + + FEFEFEFEDCDCDCDCBABABABA@?@?@?@?;<;<;<;<:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + + FEFEFEFEDCDCDCDCBABABABA@?@?@?@?;<;<;<;<:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + FEFEFEFEDCDCDCDCBABABABA@?@?@?@?;<;<;;;;:9:9:9:9878787876565656543434343212121210/0/0/0/.-,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    FEFEFEFEDCDCDCDCBABABABA@?@?@?@?;;<;<;<;:9:9:9:9878787876565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    FEFEFEFEDCDCDCDCBABABABA@?>=>=>=<;<;<;<;:9:9:9:9878787876565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + FEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:9878787876565656543434343212121210/.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + FEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:987878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!       + + + + FEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:987878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#   + + + + FEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:9878787876565656543434343210/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#     + + + + FEFEFEFEDCDCDCDCBABABABA>=>=>=>=;;;;;<;<:9:9:9:98787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#     + + + + FEFEFEFEDCDCDCDCBABABABA>=>=>=>=;<;<;<;<:9:9:9:98787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#       + + + + FEFEFEFEDCDCDCDCBABABABA>=>=>=>=;<;<;<;<:9:9:9:98787878765656565432121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + FEFEFEFEDCDCDCDCBABABABA>=>=>=>=;<;<;<;<:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + FEFEFEFEDCDCDCDCBA@?@?@?>=>=>=>=;<;<;<;<:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#      + + + + FEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=;<;<;<;<:9:9:9:98787878765434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#       + + + + FEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=;<;;;;;;:9:9:9:98787878743434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#"!"!"!        + + + + FEFEFEFEDCBABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878743434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + FEFEFEFEBABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98765656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + FEFEFEFEBABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + FEDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + DCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;:98787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!      + + + + DCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;;;878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + DCDCDCDCBABABABA@?@?@?@?>=>=>=>=;;<;<;<;878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + DCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + DCDCDCDCBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%$#$#$#"!"!"!"!        + + + + DCDCDCDCBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + + DCDCDCDCBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + + DCDCDCDCBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('&%&%&%$#$#$#$#"!"!"!"!        + + + + DCDCDCDCBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!        + + + + DCDCDCDCBABABABA@?@?@?@?>=<;<;<;:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!        + + + + DCDCDCDCBABABABA@?@?@?@?<;;;;;;<:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + ||{{zzyy JJIIHHGGhhiijjkkaa``__^^(())**++IIHHGGFF@@AABBCC1100//..XXYYZZ[[ppqqrrssllkkjjii99::;;AAllmmnnoouuttssrr]]\\[[ZZ,,--..//xxwwvvuu!!""##$$FFEEDDCCllmmnnoo]]\\[[ZZ,,--..//EEDDCCBBDDEEFFGG--,,++**\\]]^^__ttuuvvwwhhggffeeBBCCDDEEppqqrrssqqppoonnYYXXWWVV00112233ttssrrqq%%&&''((BBAA;;::ppqqrrssYYXXWWVV00112233AA@@??>>HHIIJJKK))((''&&``aabbccxxyyzz{{ + + ddccbbaaFFGGHHIIttuuvvwwmmllkkjjUUTTSSRR44556677ppoonnmm))**++,,99887766yyzz{{||UUTTSSRR44556677==<<;;::LLMMNNOO%%$$##""ddeeffgg + +||||{{zz ``__^^]]JJKKLLMMxxyyzz{{ + + iihhggff !!""##QQPPOONN8899::;;llkkjjii--..//0055443322||{{zzyy !!""##QQPPOONN8899::;;99887766PPQQRRSS!! hhiijjkk yyxxwwvvWWVVUUTTNNOOPPQQ ||||{{zz eeddccbb$$%%&&''MMLLKKJJ<<==>>??hhggffee112233441100//..xwvutssr$$%%&&''MMLLKKJJ<<==>>??55443322TTUUVVWWllmmnnoouuttssrrSSRRQQPPRRSSTTUU + + yyxxwwvvaa``__^^(())**++IIHHGGFF@@AABBCCddccbbaa55667788--,,++**rqqppoon(())**++IIHHGGFF@@AABBCC1100//..XXYYZZ[[ppqqrrssqqppoonnOONNMMLLVVWW]]^^uuttssrr]]\\[[ZZ,,--..//EEDDCCBBDDEEFFGG``__^^]]99::;;<<))((''&&nmmllkkj,,--..//EEDDCCBBDDEEFFGG--,,++**\\]]^^__ttuuvvwwmmllkkjjKKJJIIHH__``aabbqqppoonnYYXXWWVV00112233AA@@??>>HHIIJJKK\\[[ZZYY==>>??@@%%jiihhggf00112233AA@@??>>HHIIJJKK))((''&&``aabbccxxyyzz{{ + + iihhggff !!""##GGFFEEDDccddeeffmmllkkjjUUTTSSRR44556677==<<;;::LLMMNNOOEEDDCCBBXXWWVVUUAABBCCDDfeeddccb44556677==<<;;::LLMMNNOO%%$$##""ddeeffgg + +||||{{zz eeddccbb$$%%&&''CCBBAA;;gghhiijj + + iihhggff !!""##QQPPOONN8899::;;99887766PPQQRRSSAA@@??>>TTSSRRQQEEFFGGHHbaa``__^8899::;;99887766PPQQRRSS!! hhiijjkk yyxxwwvvaa``__^^(())**++::998877kkllmmnn eeddccbb$$%%&&''MMLLKKJJ<<==>>??55443322TTUUVVWW==<<;;::PPOONNMMIIJJKKLL^]]\[ZYX<<==>>??55443322TTUUVVWWllmmnnoouuttssrr]]\\[[ZZ,,--..//66554433ooppqqrraa``__^^(())**++IIHHGGFF@@AABBCC1100//..XXYYZZ[[99887766LLKKJJIIMMNNOOPP WWVVUUTT@@AABBCC1100//..XXYYZZ[[ppqqrrssqqppoonnYYXXWWVV00112233221100//ssyyzz{{]]\\[[ZZ,,--..//EEDDCCBBDDEEFFGG--,,++**\\]]^^__55443322HHGGFFEEQQRRSSTT + + SSRRQQPPDDEEFFGG--,,++**\\]]^^__ttuuvvwwmmllkkjjUUTTSSRR44556677..--,,++||||{{zzYYXXWWVV00112233AA@@??>>HHIIJJKK))((''&&``aabbcc1100//..DDCCBBAAUUVVWWXX + + OONNMMLLHHIIJJKK))((''&&``aabbccxxyyzz{{ + + iihhggff !!""##QQPPOONN8899::;;**))((''yyxwvutsUUTTSSRR44556677==<<;;::LLMMNNOO%%$$##""ddeeffgg--,,++**@@??>>==YYZZ[[\\ KKJJIIHHLLMMNNOO%%$$##""ddeeffgg + +||||{{zz eeddccbb$$%%&&''MMLLKKJJ<<==>>??&&%%srrqqppo !!""##QQPPOONN8899::;;99887766PPQQRRSS!! hhiijjkk))((''&&<<;;::99]]^^__``GGFFEEDDPPQQRRSS!! hhiijjkk yyxxwwvvaa``__^^(())**++IIHHGGFF@@AABBCConnmmllk$$%%&&''MMLLKKJJ<<==>>??55443322TTUUVVWWllmmnnoo%%$$##""88776655aabbccddCCBBAA@?TTUUVVWWllmmnnoouuttssrr]]\\[[ZZ,,--..//EEDDCCBBDDEEFFGGkjjiihhg(())**++IIHHGGFF@@AABBCC1100//..XXYYZZ[[ppqqrrss!! 44332211eeffgghh>=<;;::9XXYYZZ[[ppqqrrssqqppoonnYYXXWWVV00112233AA@@??>>HHIIJJKKgffeeddc,,--..//EEDDCCBBDDEEFFGG--,,++**\\]]^^__ttuuvvww00//..--iijjkkll%%98877665\\]]^^__ttuuvvwwmmllkkjjUUTTSSRR44556677==<<;;::LLMMNNOOcbbaa``_00112233AA@@??>>HHIIJJKK))((''&&``aabbccxxyyzz{{,,++**))mmnnoopp&&''(())54433221``aabbccxxyyzz{{ + + iihhggff !!""##QQPPOONN8899::;;99887766PPQQRRSS + +_^^]]\[Z44556677==<<;;::LLMMNNOO%%$$##""ddeeffgg + +||||{{zz((''&&%%qqrrsstt**++,,--100//..-ddeeffgg + +||||{{zz eeddccbb$$%%&&''MMLLKKJJ<<==>>??55443322TTUUVVWW YXWWVVUU8899::;;99887766PPQQRRSS!! hhiijjkk yyxxwwvv$$##""!!uuvvwwxx..//0011-,,++**)hhiijjkk yyxxwwvvaa``__^^(())**++IIHHGGFF@@AABBCC1100//..XXYYZZ[[TTSSRRQQ<<==>>??55443322TTUUVVWWllmmnnoouuttssrr + + yyzz{{||22334455)((''&&%llmmnnoouuttssrr]]\\[[ZZ,,--..//EEDDCCBBDDEEFFGG--,,++**\\]]^^__ + + PPOONNMM@@AABBCC1100//..XXYYZZ[[ppqqrrssqqppoonn ||{{zzyy66778899%$#"! ppqqrrssqqppoonnYYXXWWVV00112233AA@@??>>HHIIJJKK))((''&&``aabbcc LLKKJJIIDDEEFFGG--,,++**\\]]^^__ttuuvvwwmmllkkjjssrrqqpp::;;AABBttuuvvwwmmllkkjjUUTTSSRR44556677==<<;;::LLMMNNOO%%$$##""ddeeffggHHGGFFEEHHIIJJKK))((''&&``aabbccxxyyzz{{ + + iihhggffoonnmmllCCDDEEFFxxyyzz{{ + + iihhggff !!""##QQPPOONN8899::;;99887766PPQQRRSS!! hhiijjkkDDCCBBAALLMMNNOO%%$$##""ddeeffgg + +||||{{zz eeddccbb kkjjiihhGGHHIIJJ||||{{zz eeddccbb$$%%&&''MMLLKKJJ<<==>>??55443322TTUUVVWWllmmnnoo@?>=<;;:PPQQRRSS!! hhiijjkk yyxxwwvvaa``__^^ + + + + ggffeeddKKLLMMNNyyxxwwvvaa``__^^(())**++IIHHGGFF@@AABBCC1100//..XXYYZZ[[ppqqrrss:9988776TTUUVVWWllmmnnoouuttssrr]]\\[[ZZ  + + ccbbaa``OOPPQQRR uuttssrr]]\\[[ZZ,,--..//EEDDCCBBDDEEFFGG--,,++**\\]]^^__ttuuvvww%%&&''((65544332XXYYZZ[[ppqqrrssqqppoonnYYXXWWVV __^^]]WWSSTTUUVV + + qqppoonnYYXXWWVV00112233AA@@??>>HHIIJJKK))((''&&``aabbccxxyyzz{{))**++,,21100//.\\]]^^__ttuuvvwwmmllkkjjUUTTSSRRVVUUTTSSWW]]^^__mmllkkjjUUTTSSRR44556677==<<;;::LLMMNNOO%%$$##""ddeeffgg + +||||{{zz--..//00.--,,++*``aabbccxxyyzz{{ + + iihhggff !!""##QQPPOONNRRQQPPOO``aabbcc + + iihhggff !!""##QQPPOONN8899::;;99887766PPQQRRSS!! hhiijjkk yyssrrqq11223344*))((''&ddeeffgg + +||||{{zz eeddccbb$$%%&&''MMLLKKJJNNMMLLKKddeeffgg eeddccbb$$%%&&''MMLLKKJJ<<==>>??55443322TTUUVVWWllmmnnooppoonnmm55667788&%%$#"! hhiijjkk yyxxwwvvaa``__^^(())**++IIHHGGFF !!""##$$%%&&''MMLLKKJJ<<==>>??&&%%srrqqppo !!""##QQPPOONN8899::;;99887766PPQQRRSS!! hhiijjkk yyxxwwvvWWVVUUTTNNOOPPQQ ||||{{zz eeddccbb$$%%&&''MMLLKKJJ<<==>>??55443322TTUUVVWWllmmnnoo(())**++))((''&&(())**++IIHHGGFF@@AABBCConnmmllk$$%%&&''MMLLKKJJ<<==>>??55443322TTUUVVWWllmmnnoouuttssrrSSRRQQPPRRSSTTUU + + yyxxwwvvaa``__^^(())**++IIHHGGFF@@AABBCC1100//..XXYYZZ[[ppqqrrss,,--..//%%$$##"",,--..//EEDDCCBBDDEEFFGGkjjiihhg(())**++IIHHGGFF@@AABBCC1100//..XXYYZZ[[ppqqrrssqqppoonnOONNMMLLVVWW]]^^uuttssrr]]\\[[ZZ,,--..//EEDDCCBBDDEEFFGG--,,++**\\]]^^__ttuuvvww00112233!! 00112233AA@@??>>HHIIJJKKgffeeddc,,--..//EEDDCCBBDDEEFFGG--,,++**\\]]^^__ttuuvvwwmmllkkjjKKJJIIHH__``aabbqqppoonnYYXXWWVV00112233AA@@??>>HHIIJJKK))((''&&``aabbccxxyyzz{{4455667744556677==<<;;::LLMMNNOOcbbaa``_00112233AA@@??>>HHIIJJKK))((''&&``aabbccxxyyzz{{ + + iihhggff !!""##GGFFEEDDccddeeffmmllkkjjUUTTSSRR44556677==<<;;::LLMMNNOO%%$$##""ddeeffgg + +||ttssrr8899::;;8899::;;99887766PPQQRRSS + +_^^]]\[Z44556677==<<;;::LLMMNNOO%%$$##""ddeeffgg + +||||{{zz eeddccbb$$%%&&''CCBBAA;;gghhiijj + + iihhggff !!""##QQPPOONN8899::;;99887766PPQQRRSS!! hhiijjkk qqppoonnAABBCCDD<<==>>??55443322TTUUVVWW YXWWVVUU8899::;;99887766PPQQRRSS!! hhiijjkk yyxxwwvvaa``__^^(())**++::998877kkllmmnn eeddccbb$$%%&&''MMLLKKJJ<<==>>??55443322TTUUVVWWllmmnnoommllkkjjEEFFGGHH@@AABBCC1100//..XXYYZZ[[TTSSRRQQ<<==>>??55443322TTUUVVWWllmmnnoouuttssrr]]\\[[ZZ,,--..//66554433ooppqqrraa``__^^(())**++IIHHGGFF@@AABBCC1100//..XXYYZZ[[ppqqrrssiihhggffIIJJKKLL + +DDEEFFGG--,,++**\\]]^^__ + + PPOONNMM@@AABBCC1100//..XXYYZZ[[ppqqrrssqqppoonnYYXXWWVV00112233221100//ssyyzz{{]]\\[[ZZ,,--..//EEDDCCBBDDEEFFGG--,,++**\\]]^^__ttuuvvwweeddccbbMMNNOOPP + + HHIIJJKK))((''&&``aabbcc LLKKJJIIDDEEFFGG--,,++**\\]]^^__ttuuvvwwmmllkkjjUUTTSSRR44556677..--,,++||||{{zzYYXXWWVV00112233AA@@??>>HHIIJJKK))((''&&``aabbccxxyyzz{{ + + aa``__^^QQRRSSTT LLMMNNOO%%$$##""ddeeffggHHGGFFEEHHIIJJKK))((''&&``aabbccxxyyzz{{ + + iihhggff !!""##QQPPOONN8899::;;**))((''yyxwvutsUUTTSSRR44556677==<<;;::LLMMNNOO%%$$##""ddeeffgg + +||||{{zz ]]WWVVUUUUVVWW]]PPQQRRSS!! hhiijjkkDDCCBBAALLMMNNOO%%$$##""ddeeffgg + +||||{{zz eeddccbb$$%%&&''MMLLKKJJ<<==>>??&&%%srrqqppo !!""##QQPPOONN8899::;;99887766PPQQRRSS!! hhiijjkk yyxxwwvvTTSSRRQQ^^__``aaTTUUVVWWllmmnnoo@?>=<;;:PPQQRRSS!! hhiijjkk yyxxwwvvaa``__^^(())**++IIHHGGFF@@AABBCConnmmllk$$%%&&''MMLLKKJJ<<==>>??55443322TTUUVVWWllmmnnoouuttssrrPPOONNMMbbccddeeXXYYZZ[[ppqqrrss:9988776TTUUVVWWllmmnnoouuttssrr]]\\[[ZZ,,--..//EEDDCCBBDDEEFFGGkjjiihhg(())**++IIHHGGFF@@AABBCC1100//..XXYYZZ[[ppqqrrssqqppoonnLLKKJJIIffgghhii\\]]^^__ttuuvvww%%&&''((65544332XXYYZZ[[ppqqrrssqqppoonnYYXXWWVV00112233AA@@??>>HHIIJJKKgffeeddc,,--..//EEDDCCBBDDEEFFGG--,,++**\\]]^^__ttuuvvwwmmllkkjjHHGGFFEEjjkkllmm !!""##``aabbccxxyyzz{{))**++,,21100//.\\]]^^__ttuuvvwwmmllkkjjUUTTSSRR44556677==<<;;::LLMMNNOOcbbaa``_00112233AA@@??>>HHIIJJKK))((''&&``aabbccxxyyzz{{ + + iihhggff !!""##DDCCBBAAnnooppqq$$%%&&''ddeeffgg + +||||{{zz--..//00.--,,++*``aabbccxxyyzz{{ + + iihhggff !!""##QQPPOONN8899::;;99887766PPQQRRSS + +_^^]]\[Z44556677==<<;;::LLMMNNOO%%$$##""ddeeffgg + +||||{{zz eeddccbb$$%%&&'';;::9988qqppoonn(())**++hhiijjkk yyssrrqq11223344*))((''&ddeeffgg + +||||{{zz eeddccbb$$%%&&''MMLLKKJJ<<==>>??55443322TTUUVVWW YXWWVVUU8899::;;99887766PPQQRRSS!! hhiijjkk yyxxwwvvaa``__^^(())**++77665544mmllkkjj,,--..//llmmnnooppoonnmm55667788&%%$#"! hhiijjkk yyxxwwvvaa``__^^(())**++IIHHGGFF@@AABBCC1100//..XXYYZZ[[TTSSRRQQ<<==>>??55443322TTUUVVWWllmmnnoouuttssrr]]\\[[ZZ,,--..//33221100iihhggff00112233ppqqrrssllkkjjii99::;;AAllmmnnoouuttssrr]]\\[[ZZ,,--..//EEDDCCBBDDEEFFGG--,,++**\\]]^^__ + + PPOONNMM@@AABBCC1100//..XXYYZZ[[ppqqrrssqqppoonnYYXXWWVV00112233//..--,,eeddccbb44556677ttuuvvwwhhggffeeBBCCDDEEppqqrrssqqppoonnYYXXWWVV00112233AA@@??>>HHIIJJKK))((''&&``aabbcc LLKKJJIIDDEEFFGG--,,++**\\]]^^__ttuuvvwwmmllkkjjUUTTSSRR44556677++**))((aa``__^^8899::;;xxyyzz{{ + + ddccbbaaFFGGHHIIttuuvvwwmmllkkjjUUTTSSRR44556677==<<;;::LLMMNNOO%%$$##""ddeeffggHHGGFFEEHHIIJJKK))((''&&``aabbccxxyyzz{{ + + iihhggff !!""##QQPPOONN8899::;;''&&%%]]\\[[ZZ<<==>>??||||{{zz ``__^^]]JJKKLLMMxxyyzz{{ + + iihhggff !!""##QQPPOONN8899::;;99887766PPQQRRSS!! hhiijjkkDDCCBBAALLMMNNOO%%$$##""ddeeffgg + +||||{{zz eeddccbb$$%%&&''MMLLKKJJ<<==>>??YYXXWWVV@@AABBCCyyxxwwvvWWVVUUTTNNOOPPQQ ||||{{zz eeddccbb$$%%&&''MMLLKKJJ<<==>>??55443322TTUUVVWWllmmnnoo@?>=<;;:PPQQRRSS!! hhiijjkk yyxxwwvvaa``__^^(())**++IIHHGGFF@@AABBCCUUTTSSRRDDEEFFGGuuttssrrSSRRQQPPRRSSTTUU + + yyxxwwvvaa``__^^(())**++IIHHGGFF@@AABBCC1100//..XXYYZZ[[ppqqrrss:9988776TTUUVVWWllmmnnoouuttssrr]]\\[[ZZ,,--..//EEDDCCBBDDEEFFGGQQPPOONNHHIIJJKKqqppoonnOONNMMLLVVWW]]^^uuttssrr]]\\[[ZZ,,--..//EEDDCCBBDDEEFFGG--,,++**\\]]^^__ttuuvvww%%&&''((65544332XXYYZZ[[ppqqrrssqqppoonnYYXXWWVV00112233AA@@??>>HHIIJJKKMMLLKKJJLLMMNNOOmmllkkjjKKJJIIHH__``aabbqqppoonnYYXXWWVV00112233AA@@??>>HHIIJJKK))((''&&``aabbccxxyyzz{{))**++,,21100//.\\]]^^__ttuuvvwwmmllkkjjUUTTSSRR44556677==<<;;::LLMMNNOO IIHHGGFFPPQQRRSSiihhggff !!""##GGFFEEDDccddeeffmmllkkjjUUTTSSRR44556677==<<;;::LLMMNNOO%%$$##""ddeeffgg + +||||{{zz--..//00.--,,++*``aabbccxxyyzz{{ + + iihhggff !!""##QQPPOONN8899::;;99887766PPQQRRSS + + + +EEDDCCBBTTUUVVWWeeddccbb$$%%&&''CCBBAA;;gghhiijj + + iihhggff !!""##QQPPOONN8899::;;99887766PPQQRRSS!! hhiijjkk yyssrrqq11223344*))((''&ddeeffgg + +||||{{zz eeddccbb$$%%&&''MMLLKKJJ<<==>>??55443322TTUUVVWW AA@@??>>XXYYZZ[[aa``__^^(())**++::998877kkllmmnn eeddccbb$$%%&&''MMLLKKJJ<<==>>??55443322TTUUVVWWllmmnnooppoonnmm55667788&%%$#"! hhiijjkk yyxxwwvvaa``__^^(())**++IIHHGGFF@@AABBCC1100//..XXYYZZ[[==<<;;::\\]]^^__]]\\[[ZZ,,--..//66554433ooppqqrraa``__^^(())**++IIHHGGFF@@AABBCC1100//..XXYYZZ[[ppqqrrssllkkjjii99::;;AAllmmnnoouuttssrr]]\\[[ZZ,,--..//EEDDCCBBDDEEFFGG--,,++**\\]]^^__99887766``aabbccYYXXWWVV00112233221100//ssyyzz{{]]\\[[ZZ,,--..//EEDDCCBBDDEEFFGG--,,++**\\]]^^__ttuuvvwwhhggffeeBBCCDDEEppqqrrssqqppoonnYYXXWWVV00112233AA@@??>>HHIIJJKK))((''&&``aabbcc55443322ddeeffggUUTTSSRR44556677..--,,++||||{{zzYYXXWWVV00112233AA@@??>>HHIIJJKK))((''&&``aabbccxxyyzz{{ + + ddccbbaaFFGGHHIIttuuvvwwmmllkkjjUUTTSSRR44556677==<<;;::LLMMNNOO%%$$##""ddeeffgg1100//..hhiijjkkQQPPOONN8899::;;**))((''yyxwvutsUUTTSSRR44556677==<<;;::LLMMNNOO%%$$##""ddeeffgg + +||||{{zz ``__^^]]JJKKLLMMxxyyzz{{ + + iihhggff !!""##QQPPOONN8899::;;99887766PPQQRRSS!! hhiijjkk%%&&''--,,++**llmmnnooppqqfpvbHAZtbdQf`vXJtArdnXvےbHAtbdQZfH~XQr˂JtArdnXvےbHAbnvr˂p|ZdQtA~HfrXQJ`JltpZHAb|ZdQ`f~Zp˂nXv`p˂rZ|dnvp|ZdQ`f~Zp˂|drf`vXpZHAb|ZdQ`f~Zp˂pfHZHAbrd|pvnےbHAbnvے`JbtlHfpvrXQJ`f~HXQJ`ےrtAdQZfH~btlHfpvrXQJ`tAJlnvpے`JbtlHfpvrXQJ`f`vXے`JXQZdQbtXv`fZp˂pfHXQr˂JtArdnXvےbHAfpvbHAZ|drvpfJtArdnXvےbHAtbdQZfH~XQr˂JtArdnXvےJlnvpr˂plJtA~HfrXQJ`f`vXpZHAb|ZdQ`f~Zp˂nXv`p˂rtAJlے`JXQ|ZdQ`f~Zp˂|drf`vXpZHAb|ZdQ`fHtbdQZfH~`JXQrrd|pvnےJlnvpے`JbtlHfpvrXQJ`f~HXQJ`ےtbdQZrZHAbtlHfpvrXQJ`tAJlnvpے`Jbtlfpv|drf`vX˂pZZdQbtXv`ftbdQZfH~XQr˂JtArdnXvےbHAfpvbHAZ|drbے`JtArdnXvےbHAtbdQZfH~XQr˂JtArdnrXQJtAJlnvpHAbےl|Zfpv|drf`vXpZHAb|ZdQ`f~Zp˂nXv`p˂rtAJlJXQr|ZdQ`f~Zp˂|drf`vXpZHAb|ZdQ`ےHAtbdQZfH~`JXQrdQbtnrXQJtAJlnvpے`JbtlHfpvrXQJ`f~HXQJ`ےtdrtApZHAbtlHfpvrXQJ`tAJlnvpے`JbtlZp˂|drf`vX˂pZlJtAr`ےHAtbdQZfH~XQr˂JtArdnXvےbHA|drfpvbHAZJltbے`JtArdnXvےbHAtbdQZfH~XQr˂JfpvrXQJ`tAJlnvpHAbd|ZZp˂|drf`vXpZHAb|ZdQ`f~Zp˂tAJlnXv`p˂rbdQZ|JXQr|ZdQ`f~Zp˂|drf`vXpZHAnXvےbHAtbdQZfH~˂pZHAdQbtrXQJ`tAJlnvpے`JbtlHfpvrXQJ`tbdQZf~HXQJ`ےdrtApZAbbtlHfpvrXQJ`tAJlnvpے`JXQ`f~Zp˂|drf`vXbے`lJtArےbHAtbdQZfH~XQr˂JtArdnXvےbHA|drfpvbHAZJlt`JXQrJtArdnXvےbHAtbdQZfH~rbtHfpvrXQJ`tAJlnvpJXQrdtlZp˂|drf`vXpZHAb|ZdQ`f~Zp˂tAJlnXv`p˂rbdQZ|˂pZ|ZdQ`f~Zp˂|drf`vXlJtAdnXvےbHAtbdQZfH~˂pZHAJfpvrXQJ`tAJlnvpے`JbtlHfpvrXQJ`tbdQZf~HXQJ`ے`vXnHAbےbtlHfpvrXQJ`tAJlnvp|ZdQ`f~Zp˂|drf`vXbے`nvfےbHAtbdQZfH~XQr˂JtArdnXvےbHA|drfpvbHAZvpf`JXQrJtArdnXvےbHAtbdQZfے`JbtlHfpvrXQJ`tAJlnvpJXQHAb~HfpZp˂|drf`vXpZHAb|ZdQ`f~Zp˂tAJlnXv`p˂rH~f˂pZ|ZdQ`f~Zp˂|dtAXQr˂JtArdnXvےbHAtbdQZfH~ے`JvnXrXQJ`tAJlnvpے`JbtlHfpvrXQJ`tbdQZf~HXQJ`ے`vXnHAbbtlHfpvrXQJ`JltpZHAb|ZdQ`f~Zp˂|drf`vXXQr˂v`fےbHAtbdQZfH~XQr˂JtArdnXvےbHA|drfpvbHAZvpfJQr˂pJtArdnXvےbHAbnvے`JbtlHfpvrXQJ`tAJlnvppZHAb~HfpZp˂|drf`vXpZHAb|ZdQ`f~Zp˂tAJlnXv`p˂rH~ZHAb|ZdQ`f~Zp˂pfHXQr˂JtArdnXvےbHAtbdQZfH~ے`JvnXrXQJ`tAJlnvpے`JbtlHfpvrXQJ`tbdQZf~HXQJ`ےvpfHے`JXbtlHfpvrXQJ`f`vXpZHAb|ZdQ`f~Zp˂|drf`vXXQr˂v`f~ےbHAtbdQZfH~XQr˂JtArdnXvےJl|drfpvbHAZ~f`Qr˂pJtArdnXvےJlnvpے`JbtlHfpvrXQJ`tAJlnvpp`JXQfpvZp˂|drf`vXpZHAb|ZdQ`fHtbdQZtAJlnXv`p˂rvXnZHAb|ZdQ`fHtbdQZfH~XQr˂JtArdnXvےbHAtbdQZfH~rbtnXv`rXQJ`tAJlnvpے`Jbtlfpv|drtbdQZf~HXQJ`ےvpfHے`JXbtlfpv|drf`vXpZHAb|ZdQ`f~Zp˂|drf`vXl|ZdQf~HےbHAtbdQZfH~XQr˂JtArdnrXQJtAJl|dtAfpvJlt~f`QrZHAJtArdnrXQJtAJlnvpے`JbtlHfpvrXQJ`tAJlnvpbtlfpvZp˂|drf`vXpZHAb|ZdQ`ےHAtbdQZJltnXv`drtAJvXH~bے`|ZdQ`ےHAtbdQZfH~XQr˂JtArdnXvےbHAtbdQZfH~JtArdnXv`rXQJ`tAJlnvpے`JbtlZp˂|drbnvf~Hltbf`vJXQrbtlZp˂|drf`vXpZHAb|ZdQ`f~Zp˂|drf`vX|ZdQf~HےbHAtbdQZfH~XQr˂JfpvrXQJ`tAJlpfHfpvdQZ|Xnv˂pZHAJfpvrXQJ`tAJlnvpے`JbtlHfpvrXQJ`tAJlnvpbtlfvnXZp˂|drf`vXpZHAnXvےbHAtbdQZf`vXnXv`drtAJpfH~bے`nXvےbHAtbdQZfH~XQr˂JtArdnXvےbHAtbdQZfH~JtArdv`frXQJ`tAJlnvpے`JXQ`f~Zp˂|drnvpp˂rltbf`vJXQr`f~Zp˂|drf`vXpZHAb|ZdQ`f~Zp˂|drf`vXtlJ~HfpےbHAtbdQZfH~rbtHfpvrXQJ`tAJlfH~XQJ`ےdQZ|lXnv˂pZHAHfpvrXQJ`tAJlnvpے`JbtlHfpvrXQJ`tAJlnvptArdvnXZp˂|drf`vXlJtAdnXvےbHAtbdQZf`vXbHAZtbdQp`vXbJAdnXvےbHAtbdQZfH~XQr˂JtArdnXvےbHAtbdQZfے`J|ZdQbv`frXQJ`tAJlnvp|ZdQ`f~Zp˂|drnvpp˂rZ|dnvp|ZdQ`f~Zp˂|drf`vXpZHAb|ZdQ`f~Zp˂|dtAXQHAbtlJ~HfpےbHAtbdQZfے`JbtlHfpvrXQJ`tAJlfH~XQJ`ےrtAJlfH~btlHfpvrXQJ`tAJlnvpے`JbtlHfpvrXQJ`Jltے`JXQtArdvnvfZp˂|dtAXQr˂JtArdnXvےbHAtbdQZf`vXnvpے`Jbtlv~rtAJlf`vXpZHAb|ZdQ`f~Zp˂|drf`vXpZHAnXvےbHAltb~f``JXQrJfpvrXQJ`tAJlnvpے`JbtlHfpvrXQJ`tAJlnvpJAHr󙐅f۝`vfH~XQr˂JtArdHfpvtbdnvpے`JbtlHfpvrXQJ`tAJlnvpے`JXQ`f~Zp˂dQZ|vXn˂pZAnXvےbHAtbdQZfH~XQr˂JtArdnXvےbHAtbdQZfH~ˁ`ZQXXnvf`vXpZHAb|ZdQnXvQZ|dfH~XQr˂JtArdnXvےbHAtbdQZfH~rbtHfpvrXQJ`drtAJvp`v`JXQ`f~Zp˂|drf`vXpZHAb|ZdQ`f~Zp˂|drf`vXb㉀ۑppfH~nvpے`Jbtl`f~rtAJlf`vXpZHAb|ZdQ`f~Zp˂|drf`vXlJtAdnXvےbHAltbXnvrbtHfpvrXQJ`tAJlnvpے`JbtlHfpvrXQJ`tAJlnvpJAHr󙐅f۝`vfH~XQr˂JtArdHfpvtbdnvpے`JbtlHfpvrXQJ`tAJlnvp|ZdQ`f~Zp˂dQZ|pfH~lJtAdnXvےbHAtbdQZfH~XQr˂JtArdnXvےbHAtbdQZfZHAbˁ`ZQXXnvf`vXpZHAb|ZdQnXvQZ|rfH~XQr˂JtArdnXvےbHAtbdQZfے`JbtlHfpvrXQJ`drtAdQf`v|ZdQ`f~Zp˂|drf`vXpZHAb|ZdQ`f~Zp˂|dtAے`JAHr󙐂ˍpfH~nvpے`Jbtl`pvAJltf`vXpZHAb|ZdQ`f~Zp˂|dtAXQr˂JtArdnXvےbHAZ|dXnvbtlHfpvrXQJ`tAJlnvpے`JbtlHfpvrXQJ`JltXQr˂`ZQXbㅐf۝`vfH~XQr˂JtArdnrXQJbdQZ|nvpے`JbtlHfpvrXQJ`JltpZHAb|ZdQ`f~Zp˂rtAJlpfH~JtArdnXvےbHAtbdQZfH~XQr˂JtArdnXvےbHAbnvpZHAbۑpJXnvf`vXpZHAb|ZdQ`p˂drtAfH~XQr˂JtArdnXvےbHAbnvے`JbtlHfpvrXQJ`tbdQvp|ZdQ`f~Zp˂|drf`vXpZHAb|ZdQ`f~Zp˂pfHے`JAHr󙐂ˍp|dnvpے`JbtlrXQJ`Jltf`vXpZHAb|ZdQ`f~Zp˂pfHXQr˂JtArdnXvےbHAZ|dfے`JbtlHfpvrXQJ`tAJlnvpے`JbtlHfpvrXQJ`f`vXXQr˂`ZQXbrQtJlfH~XQr˂JtArdےbHAbdQZ|nvpے`JbtlHfpvrXQJ`f`vXpZHAb|ZdQ`f~Zp˂rtAJlXQrZHJtArdnXvےbHAtbdQZfH~XQr˂JtArdnXvےJlnvpp`JXQۑp`tbAdf`vXpZHAb|ZdQZp˂drtAfH~XQr˂JtArdnXvےJlnvpے`JbtlHfpvrXQJ`tdrAbے`|ZdQ`f~Zp˂|drf`vXpZHAb|ZdQ`fHtbdQZfH~r˂pZQXb㉀Z|dnvpے`JbtlrXQJ`JbdQf`vXpZHAb|ZdQ`fHtbdQZfH~XQr˂JtArdnXvےbHAtAJl璁JXQrbtlHfpvrXQJ`tAJlnvpے`Jbtlfpv|drf`vXZHAbۑpJAHrQtJlfH~XQr˂JtArdےbHAZ|dnvpے`Jbtlfpv|drf`vXpZHAb|ZdQ`f~Zp˂tbdQZ˂pZHJtArdnXvےbHAtbdQZfH~XQr˂JtArdnrXQJtAJlnvpے`JXQr󙐂ˁ`tbAdf`vXpZHAb|ZdQXQJ`ےrtAJlfH~XQr˂JtArdnrXQJtAJlnvpے`JbtlHfpvrXQJ`|drAbے`|ZdQ`f~Zp˂|drf`vXpZHAb|ZdQ`ےHAtbdQZfH~r˂pZQXb㉀Z|dnvpے`JbtlbHAZtbdQf`vXpZHAb|ZdQ`ےHAtbdQZfH~XQr˂JtArdnXvےbHAtAJl璁JXQrbtlHfpvrXQJ`tAJlnvpے`JbtlZp˂|drf`vXZHAbۑpJAHrQtJlfH~XQr˂Jfpvp˂rZ|dnvpے`JbtlZp˂|drf`vXpZHAb|ZdQ`f~Zp˂tbdQZ˂pZAbJtArdnXvےbHAtbdQZfH~XQr˂JfpvrXQJ`tAJlnvp˂pZf۝`vtbAdf`vXpZHA~HXQJ`ےrtAJlfH~XQr˂JfpvrXQJ`tAJlnvpے`JbtlHfpvrXQJ`|lt`JXQ|ZdQ`f~Zp˂|drf`vXpZHAnXvےbHAtbdQZfH~HAbےXnvZ|dnvpے`JXQfpvbHAZtbQZf`vXpZHAnXvےbHAtbdQZfH~XQr˂JtArdnXvےbHAbnvr˂pbtlHfpvrXQJ`tAJlnvpے`JXQ`f~Zp˂|drf`vX`JXQrpfH~rQtJlfH~rbtnXv`p˂drtAJnvpے`JXQ`f~Zp˂|drf`vXpZHAb|ZdQ`f~Zp˂p`vXZHAbJtArdnXvےbHAtbdQZfH~rbtHfpvrXQJ`tAJlnvp˂pZf۝`vtbAdf`vXlJtAdf~HbHAZpltbfH~rbtHfpvrXQJ`tAJlnvpے`JbtlHfpvrXQJ`nvpے`JXQ|ZdQ`f~Zp˂|drf`vXlJtAdnXvےbHAtbdQZfH~HAbےXnvZ|dnvp|ZdQfpv˂rXQdQZ|f`vXlJtAdnXvےbHAtbdQZfH~XQr˂JtArdnXvےbHAfH~r˂pbtlHfpvrXQJ`tAJlnvp|ZdQ`f~Zp˂|drf`vX`JXQHApfH~rQtJlfے`JbtlnXv`J`ےdrtAJnvp|ZdQ`f~Zp˂|drf`vXpZHAb|ZdQ`f~Zp˂f`vXZHAbJtArdnXvےbHAtbdQZfے`JbtlHfpvrXQJ`tAJlnvpbے`f۝`vtbAdXQr˂JtArdpvnbHAZpltbfے`JbtlHfpvrXQJ`tAJlnvpے`JbtlHfpvrXQJ`nvpJQr|ZdQ`f~Zp˂|dtAXQr˂JtArdnXvےbHAtbdQZfH~JXQrXnvZ|dpZHAb|ZdQXv`f˂rXQdQZ|XQr˂JtArdnXvےbHAtbdQZfH~XQr˂JtArdnXvےbHAfH~pZHAbtlHfpvrXQJ`JltpZHAb|ZdQ`f~Zp˂|drf`vX˂pZHApfH~rQtJlے`Jbtl~HfJ`p˂AJltpZHAb|ZdQ`f~Zp˂|drf`vXpZHAb|ZdQ`f~Zp˂vpfbے`JtArdnXvےbHAbnvے`JbtlHfpvrXQJ`tAJlnvpbے`f۝`vtbAdXQr˂JtArdpvnrXQJbnvے`JbtlHfpvrXQJ`tAJlnvpے`JbtlHfpvrXQJ`H~fJXQr|ZdQ`f~Zp˂pfHXQr˂JtArdnXvےbHAtbdQZfH~JXQrXnvZ|dpZHAb|ZdQXv`f`ےbpfHXQr˂JtArdnXvےbHAtbdQZfH~XQr˂JtArdnXvےJl`vXnpZHAbtlHfpvrXQJ`f`vXpZHAb|ZdQ`f~Zp˂|drf`vX˂p`ZpfH~rQtJlے`Jbtl~HXHAZp˂f`vXpZHAb|ZdQ`f~Zp˂|drf`vXpZHAb|ZdQ`fHtdrtAvpfbے`JtArdnXvےJlnvpے`JbtlHfpvrXQJ`tAJlnvpQXb㉀ۅf۝`vtbAdXQr˂JtArdv`frXQJnvpے`JbtlHfpvrXQJ`tAJlnvpے`JbtlfpvJltH~fJXQrZ|ZdQ`fHtbdQZfH~XQr˂JtArdnXvےbHAtbdQZfH~pJAHrXnvZ|dpZHAb|ZdQ~Hfp`ےbfH~XQr˂JtArdnXvےbHAtbdQZfH~XQr˂JtArdnrXQJbdQZ|`vXHHAbےbtlfpv|drf`vXpZHAb|ZdQ`f~Zp˂|drf`vXˁ`ZpfH~rQtJlے`JbtlvnXHAXQJ`f`vXpZHAb|ZdQ`f~Zp˂|drf`vXpZHAb|ZdQ`ےHAdrtA~f``JXQrJtArdnrXQJtAJlnvpے`JbtlHfpvrXQJ`tAJlnvpQXb㉀ۅf۝`vtbAdXQr˂JtArdv`fےJlnvpے`JbtlHfpvrXQJ`tAJlnvpے`JbtlZp˂JltvXn˂pZ|ZdQ`ےHAtbdQZfH~XQr˂JtArdnXvےbHAtbdQZfH~pJAHrXnvZ|dpZHAb|ZdQ~HfptbQZdfH~XQr˂JtArdnXvےbHAtbdQZfH~XQr˂JfpvrXQJ`bdQZ|vpfHHAbےbtlZp˂|drf`vXpZHAb|ZdQ`f~Zp˂|drf`vXۑppfH~rQtJltuvwxyz{||{zyxwv5555555566666666666666666666666666 \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv28_0.dat b/vendor/endroid/qr-code/assets/data/qrv28_0.dat new file mode 100644 index 000000000..2f3b6460d --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv28_0.dat @@ -0,0 +1,257 @@ +~}~}~}~}|{|{|{|{zyzyzyzywwwwwxwxuvuvuvuvststststqrqrqrqropopopopopopopopmnmnmnmnklklklklijijijijghghghghgfefefefefefefefcdcdcdcdabababab______`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878787878787856565656~}~}~}~}|{|{|{|{zyzyzyzywxwxwxwxuvuvuvuvststststqrqrqrqropopopopopopopopmnmnmnmnklklklklijijijijghghghghefefefefefefefefcdcdcdcdabababab`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878787878787856565656~}~}~}~}|{|{|{|{zyzyzyzywxwxwxwxuvuvuvuvststststqrqrqrqropopopoponmnmnmnmnmnmnmnklklklklijijijijghghghghefefefefefefefefcdcdcdcdabababab`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIGGGGGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878787878787856565656~}~}~}~}|{|{|{|{zyzyxwxwwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnmnmnmnmnklklklklijijijijghghghghefefefefefefefefcdcdcdcdababa`_``_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:78787878787878765656565634343434~}~}~}~}~}~}~}~}|{|{|{|{xwxwwwwwwxwxwxwuuvuvuvuvststststqrqrqrqropopopopmnmnmnmnmnmnmnmnklklklklijijijijghghghghefefefefefefefefcdcdcdcb_`_`____`_`_____^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:78787878565656565656565634343434~}~}~}~}~}~}~}~}|{|{|{zywxwxwxwxuuuuuvuvuvuvuvuvststststqrqrqrqropopopopmnmnmnmnmnmnmnmnklklklklijijijijghghghghefefefefefefefefabababab__`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIHGHGGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?>=>=>=>=>;<;<;<;<9:9:9:9:78787878565656565656565634343434~}~}~}~}~}~}~}~}zyzyzyzywxwxwxwxuvuvuvuvuvuvuvuvststststqrqrqrqropopopopmnmnmnmnmnmnmnmnklklklklijijijijghghghghefefefefedcdcdcdabababab`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKJIHGHGGGGGGHGGGGGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:78787878565656565656565634343434~}~}~}~}~}~}~}~}zyzyzyzywxwxwxwxuvuvuvuvuvuvuvuvststststqrqrqrqropopopopmnmnmnmnmnmnmnmnklklklklijijijijghghghghefefefefcdcdcdcdabababab`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMJIJIJIJIGHGHGHGHGHGHGHGFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:78787878565656565656565634343434~}~}~}~}|{|{|{|{zyzyzyzywxwxwxwxuvuvuvuvuvuvuvuvststststqrqrqrqropopopopmnmnmnmnmlklklklklklklklijijijijghghghghefefefefcdcdcdcdabababab`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:78787878565656565656565634343434~}~}~}~}|{|{|{|{zyzyzyzywxwxwxwwuvuvuvuvuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklklklklklijijijijghghghghefefefefcdcdcdcdabababab`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:78787878565656565656565434343434~}~}~}~}|{|{|{|{zyzyzyzywwwwxwxwuvuvuvuvutstststststststqrqrqrqropopopopmnmnmnmnklklklklklklklklijijijijghghghghefefefefcdcdcdcdabababab_____`_`^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:78787878565656563434343434343434~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwuvuvuvuvststststststststqrqrqrqropopopopmnmnmnmnklklklklklklklklijijijijghghghghefefefefcdcdcdcdabababab_`_`_`_`^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIGHGHGHGGEFEFEFEFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=<;<;<;<;<9:9:9:9:78787878565656563434343434343212~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwuvuvuvuvststststststststqrqrqrqropopopopmnmnmnmnklklklklklklklklijijijijghghghghefefefefcdcdcdcdabababab_`_`_`_`^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIGGGGHGHGEFEFEFEFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:78787878565656563434343412121212~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwuvuvuvuvststststststststqrqrqrqropopopopmnmnmnmnklklklklklklklklijijijijghghghghefefefefcdcdcdcdabababab_`_`_`_`^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGEFEFEFEFEFEFEFEDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:78787878565656563434343412121212~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwuvuvuvuvststststststststqrqrqrqropopopopmnmnmnmnklklklklkjijijijijijijijghghghghefefefefcdcdcdcdabababab_`_`_`_`^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGEFEFEFEFCDCDCDCDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:78787878565656563434343412121212~}~}~}~}|{|{|{|{zyzyzyzyxwwwwwwxuvuvuvuvststststststststqrqrqrqropopopopmnmnmnmnklklklklijijijijijijijijghghghghefefefefcdcdcdcdabababab_`______^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGEFEFEFEFCDCDCDCDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:78787878565656563434343412121212~}~}~}~}|{|{|{|{zyzyzyzywxwxwxwxuvuvuvuvststststsrqrqrqrqrqrqrqropopopopmnmnmnmnklklklklijijijijijijijijghghghghefefefefcdcdcdcdabababab`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGEFEFEFEFCDCDCDCDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:78787878565656563434343412121212~}~}~}~}|{|{|{|{zyzyzyzywxwxwxwxuvuvuvuvststststqrqrqrqrqrqrqrqropopopopmnmnmnmnklklklklijijijijijijijijghghghghefefefefcdcdcdcdabababab`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGGGGGGHEFEFEFEFCDCDCDCDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;:9:9:9:9:78787878565656563434343412121212~}~}~}~}|{|{|{|{zyzyzyzywxwxwxwxuvuvuvuvststststqrqrqrqrqrqrqrqropopopopmnmnmnmnklklklklijijijijijijijijghghghghefefefefcdcdcdcdabababab`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:78787878565656563434343412121212~}~}~}~}|{|{|{|{zyzyzyzywxwxwxwxuvuvuvuvststststqrqrqrqrqrqrqrqropopopopmnmnmnmnklklklklijijijijijijijijghghghghefefefefcdcdcdcdabababab`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCBABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:78787878565656563434343412121212~}~}~}~}|{|{|{|{zyzyzyzywxwxwwwwuvuvuvuvststststqrqrqrqrqrqrqrqropopopopmnmnmnmnklklklklijijijijihghghghghghghghefefefefcdcdcdcdabababab`_`_`___^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:78787878565656563434343412121212~}~}~}~}|{|{|{|{zyzyzyzywwxwxwxwuvuvuvuvststststqrqrqrqrqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghghghghghefefefefcdcdcdcdabababab___`_`_`^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:78787878565656563434343412121212~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwuvuvuvuvststststqrqrqrqrqpopopopopopopopmnmnmnmnklklklklijijijijghghghghghghghghefefefefcdcdcdcdabababab_`_`_`_`^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIGHGHGGGGEFEFEFEFCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:78787878565656563434343412121212~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwuvuvuvuvststststqrqrqrqropopopopopopopopmnmnmnmnklklklklijijijijghghghghghghghghefefefefcdcdcdcdabababab_`_`_`_`^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIGGHGHGHGEFEFEFEFCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9878787878565656563434343412121212~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwuvuvuvuvststststqrqrqrqropopopopopopopopmnmnmnmnklklklklijijijijghghghghghghghghefefefefcdcdcdcdabababab_`_`_`_`^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGEFEFEFEFCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787878787878565656563434343412121212~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwuvuvuvuvststststqrqrqrqropopopopopopopopmnmnmnmnklklklklijijijijghghghghghghghghefefefefcdcdcdcdabababab_`_`_`_`^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGEFEFEFEFCDCDCDCDABABABABABABABA@?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787878787878565656563434343412121212121212120/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!         + + + + + + + +121212120/0/////.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!         + + + + + + + +12121212/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!          + + + + + + + +12121212/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!             + + + + + + + +12121212/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)('('('('('&%&%&%&%$#$#$#$#"!"!"!"!             + + + + + + 12121212/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!             + + + +12121212/0/0/0//.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!             + + + +12121212////0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!             + + + +121212120/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!            + + + +121212120/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +1210/0/00/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('&%&%&%&%&%$#$#$#$#"!"!"!"!         + + + +/0//////0/////0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!         + + + +0/0/0/0/0/0/0/.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!          + + + +0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!             + + + +0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!             + + + +0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!             + + + +0/0/0///.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%$#$#$#$#$#"!"!"!"!             + + + +///0/0/0.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!             + + + +/0/0/0/0.-.-.-.-.-.-.-,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!           + + + +/0/0/0/0.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!         + + + +/0/0/0/0.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!         + + + +/0/0/0/0.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!         + + + +//////0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#"!"!"!"!"!         + + + +0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!         + + + +0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!         + + + + + +0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!         + + + + + + + +~~}}aabbccdd$$##""!!nnooppqqXYYZZ[[\A@@??>>=())**++,qppoonnm `aabbccd9887766501122334ihhggffehiijjkklmnnooppqQQRRSSTTHHGGFFEE!!""##$$xxwwvvuu YYZZ[[\\@@??>>==))**++,,ppoonnmmaabbccdd$$##""!!ffgghhii$$##""!!IJJKKLLMPOONNMML~~}}|QRRSSTTUHGGFFEED!""##$$%xwwvvuut YZZ[[\\]||{{zzyyeeffgghh rrssttuu\]]^^__`=<<;;::9,--..//0mllkkjjideeffggh5443322145566778eddccbbalmmnnoopqrrssttuUUVVWWXXDDCCBBAA%%&&''((ttssrrqq + + ]]^^__``<<;;::99--..//00llkkjjiieeffgghh jjkkllmm MNNOOPPQLKKJJIIH !|{{zzyyxUVVWWXXYDCCBBAA@%&&''(()tssrrqqp + + ]^^__``axxwwvvuu iijjkkllvvww}}~~`aabbccd9887766501122334ihhggffehiijjkkl100//..-899::;;>==))**++,,ppoonnmmaabbccdd8877665511223344hhggffeeiijjkkllnnooppqqQRRSSTTUHGGFFEED!""##$$%xwwvvuut YZZ[[\\]@??>>==<)**++,,-poonnmmlabbccddettssrrqq + + mmnnoopp +deeffggh5443322145566778eddccbbalmmnnoop-,,++**)<==>>??@]\\[[ZZY tuuvvwwx + + ~ ]]^^__``<<;;::99--..//00llkkjjiieeffgghh4433221155667788ddccbbaammnnoopprrssttuuUVVWWXXYDCCBBAA@%&&''(()tssrrqqp + + ]^^__``a<;;::998-..//001lkkjjiiheffgghhi,++**))(ppoonnmm + + qqrrsstt ~~}}|{zy + hiijjkkl100//..-899::;;>==<)**++,,-poonnmmlabbccdde8776655412233445hggffeedijjkkllm(''&&%%$llkkjjii uuvvwwxx + + xwwvvuutlmmnnoop-,,++**)<==>>??@]\\[[ZZY tuuvvwwx%$$##""!DEEFFGGHUTTSSRRQ|}}~~ yxwwvvuueeffgghh4433221155667788ddccbbaammnnoopp,,++**))==>>??@@\\[[ZZYY uuvvwwxx + +  +]^^__``a<;;::998-..//001lkkjjiiheffgghhi4332211056677889dccbbaa` mnnooppq$##""!! hhggffeeyyzz{{|| + + tssrrqqp + + pqqrrsst)((''&&%@AABBCCDYXXWWVVUxyyzz{{|! HIIJJKKLQPPOONNM~~} + + ttssrrqqiijjkkll00//..--99::;;<<``__^^]] + + qqrrsstt((''&&%%AABBCCDDXXWWVVUUyyzz{{||~~}}|{zy + abbccdde8776655412233445hggffeedijjkkllm0//..--,9::;;<<=`__^^]]\ + + qrrssttu ddccbbaa}}~~poonnmml tuuvvwwx%$$##""!DEEFFGGHUTTSSRRQ|}}~~LMMNNOOPMLLKKJJI }wwvvuut ppoonnmmmmnnoopp,,++**))==>>??@@\\[[ZZYY uuvvwwxx$$##""!!EEFFGGHHTTSSRRQQ}}~~ xwwvvuuteffgghhi4332211056677889dccbbaa` mnnooppq,++**))(=>>??@@A\[[ZZYYX uvvwwxxy``__^^]]~~}}lkkjjiihxyyzz{{|! HIIJJKKLQPPOONNM~~}PQQRRSSTIHHGGFFE !!""##$tssrrqqpllkkjjii + + qqrrsstt((''&&%%AABBCCDDXXWWVVUUyyzz{{|| IIJJKKLLPPOONNMM~~}} + + tssrrqqpijjkkllm0//..--,9::;;<<=`__^^]]\ + + qrrssttu(''&&%%$ABBCCDDEXWWVVUUTyzz{{||}\\[[ZZYY wwvvuutthggffeed|}}~~LMMNNOOPMLLKKJJI }||{{zzyTUUVVWWXEDDCCBBA$%%&&''(poonnmmlhhggffee uuvvwwxx$$##""!!EEFFGGHHTTSSRRQQ}}~~MMNNOOPPLLKKJJII wwvvuuttpoonnmml mnnooppq,++**))(=>>??@@A\[[ZZYYX uvvwwxxy$##""!! EFFGGHHITSSRRQQP}~~ XXWWVVUU!!""##$$ssrrqqpp !!""cba`__^^~~}PQQRRSSTIHHGGFFE !!""##$yxxwwvvu XYYZZ[[\A@@??>>=())**++,lkkjjiih !!"dcba`__^yyzz{{|| IIJJKKLLPPOONNMM~~}}QQRRSSTTHHGGFFEE!!""##$$ssrrqqpplkkjjiih + + qrrssttu(''&&%%$ABBCCDDEXWWVVUUTyzz{{||} IJJKKLLMPOONNMML~~}}w + + TTSSRRQQ%%&&''((oonnmmll##$$%%&&]]\\[[ZZ }||{{zzyTUUVVWWXEDDCCBBA$%%&&''(uttssrrq + + \]]^^__`=<<;;::9,--..//0hggffee_"##$$%%&^]]\\[[Z}}~~MMNNOOPPLLKKJJII ||{{zzyyUUVVWWXXDDCCBBAA%%&&''((oonnmmllhggffeed uvvwwxxy$##""!! EFFGGHHITSSRRQQP}~~MNNOOPPQLKKJJIIH !wvvuuttsPPOONNMM))**++,,kkjjiihh''(())**YYXXWWVV !!""##$yxxwwvvu XYYZZ[[\A@@??>>=())**++,qppoonnm `aabbccd9887766501122334_^^]]\\[&''(())*ZYYXXWWV~~}}QQRRSSTTHHGGFFEE!!""##$$xxwwvvuu YYZZ[[\\@@??>>==))**++,,kkjjiihh !!""cba`__^^yzz{{||} IJJKKLLMPOONNMML~~}}|QRRSSTTUHGGFFEED!""##$$%srrqqppo +LLKKJJII--..//00ggffee__++,,--..UUTTSSRR$%%&&''(uttssrrq + + \]]^^__`=<<;;::9,--..//0mllkkjjideeffggh5443322145566778[ZZYYXXW*++,,--.VUUTTSSR ||{{zzyyUUVVWWXXDDCCBBAA%%&&''((ttssrrqq + + ]]^^__``<<;;::99--..//00ggffee__##$$%%&&]]\\[[ZZ}~~MNNOOPPQLKKJJIIH !|{{zzyyxUVVWWXXYDCCBBAA@%&&''(()onnmmllk + HHGGFFEE11223344^^]]\\[[//556677QQPPOONN())**++,qppoonnm `aabbccd9887766501122334ihhggffehiijjkkl100//..-899::;;>==))**++,,ppoonnmmaabbccdd8877665511223344^^]]\\[[''(())**YYXXWWVV~~}}|QRRSSTTUHGGFFEED!""##$$%xwwvvuut YZZ[[\\]@??>>==<)**++,,-kjjiihhgDDCCBBAA55667788ZZYYXXWW8899::;;MMLKJIHG,--..//0mllkkjjideeffggh5443322145566778eddccbbalmmnnoop-,,++**)<==>>??@SRRQQPPO78899::;NMMLKJIH%%&&''((ttssrrqq + + ]]^^__``<<;;::99--..//00llkkjjiieeffgghh4433221155667788ZZYYXXWW++,,--..UUTTSSRR !|{{zzyyxUVVWWXXYDCCBBAA@%&&''(()tssrrqqp + + ]^^__``a<;;::998-..//001gffee__^@@??>>==99::;;<>??GFFEEDDC01122334ihhggffehiijjkkl100//..-899::;;>?GGFFEEDD))**++,,ppoonnmmaabbccdd8877665511223344hhggffeeiijjkkll00//..--99::;;<>==<)**++,,-poonnmmlabbccdde8776655412233445^]]\\[[Z<<;;::99==>>??@@RRQQPPOO@@AABBCCCBBAA@@?45566778eddccbbalmmnnoop-,,++**)<==>>??@]\\[[ZZY tuuvvwwx%$$##""!DEEFFGGHFEEDDCCB?@@AABBCCCBBAA@@--..//00llkkjjiieeffgghh4433221155667788ddccbbaammnnoopp,,++**))==>>??@@RRQQPPOO8899::;;MMLKJIHG%&&''(()tssrrqqp + + ]^^__``a<;;::998-..//001lkkjjiiheffgghhi4332211056677889ZYYXXWWV !!""#88776655AABBCCDDNNMMGGFFDDEEFFGG?>>==<<;899::;;CDDEEFFG??>>==<<11223344hhggffeeiijjkkll00//..--99::;;<<``__^^]] + + qqrrsstt((''&&%%AABBCCDDNNMMGGFF<<==>>??GFFEEDDC)**++,,-poonnmmlabbccdde8776655412233445hggffeedijjkkllm0//..--,9::;;<<=VUUTTSSR#$$%%&&'44332211EEFFGGHHEEDDCCBBMMNNOOPP;::99887<==>>??@]\\[[ZZY tuuvvwwx%$$##""!DEEFFGGHUTTSSRRQ|}}~~LMMNNOOP>==<<;;:GMMNNOOP;;::998855667788ddccbbaammnnoopp,,++**))==>>??@@\\[[ZZYY uuvvwwxx$$##""!!EEFFGGHHEEDDCCBB@@AABBCCCBBAA@@?-..//001lkkjjiiheffgghhi4332211056677889dccbbaa` mnnooppq,++**))(=>>??@@ARQQPPOON'(())**+00//..--IIJJKKLLAA@@??>>QQRRSSTT76655432@AABBCCDYXXWWVVUxyyzz{{|! HIIJJKKLQPPOONNM~~}PQQRRSST:9988776PQQRRSST7766554399::;;<<``__^^]] + + qqrrsstt((''&&%%AABBCCDDXXWWVVUUyyzz{{|| IIJJKKLLAA@@??>>DDEEFFGG?>>==<<;12233445hggffeedijjkkllm0//..--,9::;;<<=`__^^]]\ + + qrrssttu(''&&%%$ABBCCDDENMMGGFFE+,,--../,,++**))MMNNOOPP==<<;;::UUVVWWXX10//..--DEEFFGGHUTTSSRRQ|}}~~LMMNNOOPMLLKKJJI }||{{zzyTUUVVWWX655//..-TUUVVWWX210//..-==>>??@@\\[[ZZYY uuvvwwxx$$##""!!EEFFGGHHTTSSRRQQ}}~~MMNNOOPP==<<;;::MMNNOOPP;::9988756677889dccbbaa` mnnooppq,++**))(=>>??@@A\[[ZZYYX uvvwwxxy$##""!! EFFGGHHIEDDCCBBA/5566778((''&&%%QQRRSSTT99887766YYZZ[[\\,,++**))HIIJJKKLQPPOONNM~~}PQQRRSSTIHHGGFFE !!""##$yxxwwvvu XYYZZ[[\-,,++**)XYYZZ[[\-,,++**)AABBCCDDXXWWVVUUyyzz{{|| IIJJKKLLPPOONNMM~~}}QQRRSSTT99887766QQRRSSTT766554329::;;<<=`__^^]]\ + + qrrssttu(''&&%%$ABBCCDDEXWWVVUUTyzz{{||} IJJKKLLMA@@??>>=899::;;<$$##""!!UUVVWWXX55//..--]]^^__ee((''&&%%LMMNNOOPMLLKKJJI }||{{zzyTUUVVWWXEDDCCBBA$%%&&''(uttssrrq + + \]]^^__`)((''&&%\]]^^__e)((''&&%EEFFGGHHTTSSRRQQ}}~~MMNNOOPPLLKKJJII ||{{zzyyUUVVWWXX55//..--UUVVWWXX10//..--=>>??@@A\[[ZZYYX uvvwwxxy$##""!! EFFGGHHITSSRRQQP}~~MNNOOPPQ=<<;;::9<==>>??@ YYZZ[[\\,,++**))ffgghhii$$##""!!PQQRRSSTIHHGGFFE !!""##$yxxwwvvu XYYZZ[[\A@@??>>=())**++,qppoonnm `aabbccd%$$##""!effgghhi%$$##""!IIJJKKLLPPOONNMM~~}}QQRRSSTTHHGGFFEE!!""##$$xxwwvvuu YYZZ[[\\,,++**))YYZZ[[\\,,++**))ABBCCDDEXWWVVUUTyzz{{||} IJJKKLLMPOONNMML~~}}|QRRSSTTU98877665@AABBCCD]]^^__``((''&&%%jjkkllmm TUUVVWWXEDDCCBBA$%%&&''(uttssrrq + + \]]^^__`=<<;;::9,--..//0mllkkjjideeffggh! ijjkkllm! MMNNOOPPLLKKJJII ||{{zzyyUUVVWWXXDDCCBBAA%%&&''((ttssrrqq + + ]]^^__``((''&&%%]]^^__ee((''&&%%EFFGGHHITSSRRQQP}~~MNNOOPPQLKKJJIIH !|{{zzyyxUVVWWXXY5//..--,DEEFFGGMMNNOOPPQ::99887766778899ccbbaa`` nnooppqq++**))((>>??@@AA[[ZZYYXXvvwwxxyy##""!! FFGGHHIIDDCCBBAAAABBCCDDBAA@@??>.//00112kjjiihhgfgghhiij3221100/6778899:cbbaa``_ +nooppqqr mllkkjji QRRSSTTU66554321::;;<<==__^^]]\\ + + rrssttuu''&&%%$$BBCCDDEEWWVVUUTTzz{{||}}JJKKLLMM@@??>>==EEFFGGMM>==<<;;:23344556gffeeddcjkkllmmn/..--,,+:;;<<==>_^^]]\\[ + rssttuuv + + +ihhggffeUVVWWXXY0//..--,>>??@@AA[[ZZYYXXvvwwxxyy##""!! FFGGHHIISSRRQQPP~~NNOOPPQQ<<;;::99NNOOPPQQ:99887766778899:cbbaa``_ +nooppqqr+**))(('>??@@AAB[ZZYYXXWvwwxxyyz + eddccbbaYZZ[[\\],++**))(BBCCDDEEWWVVUUTTzz{{||}}JJKKLLMMOONNMMLL~~}}||RRSSTTUU88776655RRSSTTUU65543210:;;<<==>_^^]]\\[ + rssttuuv'&&%%$$#BCCDDEEFWVVUUTTSz{{||}}~a``__^^]]^^__eef(''&&%%$FFGGHHIISSRRQQPP~~NNOOPPQQKKJJIIHH !!{{zzyyxxVVWWXXYY//..--,,VVWWXXYY//..--,,>??@@AAB[ZZYYXXWvwwxxyyz#""!! FGGHHIIJSRRQQPPO~xxw]\\[[ZZY fgghhiij$##""!! JJKKLLMMOONNMMLL~~}}||RRSSTTUUGGFFEEDD""##$$%%wwvvuutt ZZ[[\\]]++**))((ZZ[[\\]]++**))((BCCDDEEFWVVUUTTSz{{||}}~JKKLLMMNONNMMLLKwvvuuttsYXXWWVVU !!""##$jkkllmmn NNOOPPQQKKJJIIHH !!{{zzyyxxVVWWXXYYCCBBAA@@&&''(())ssrrqqpp + + ^^__``aa''&&%%$$^^__eeff''&&%%$$FGGHHIIJSRRQQPPO~NOOPPQQRKJJIIHHG !!"srrqqppo !!""#UTTSSRRQ$%%&&''(nooppqqrRRSSTTUUGGFFEEDD""##$$%%wwvvuutt ZZ[[\\]]??>>==<<**++,,--oonnmmllbbccddee##""!! gghhiijj##""!! JKKLLMMNONNMMLLK~~}}||{RSSTTUUVGFFEEDDC"##$$%%&onnmmllk#$$%%&&'QPPOONNM())**++,rssttuuvVVWWXXYYCCBBAA@@&&''(())ssrrqqpp + + ^^__``aa;;::9988..//0011kkjjiihhffgghhiikkllmmnnNOOPPQQRKJJIIHHG !!"{zzyyxxwVWWXXYYZCBBAA@@?&''(())*kjjiihhg'(())**+MLLKKJJI,--..//0vww}}~~ZZ[[\\]]??>>==<<**++,,--oonnmmllbbccddee7766554422334455ggffeeddjjkkllmmooppqqrrRSSTTUUVGFFEEDDC"##$$%%&wvvuutts Z[[\\]]^?>>==<<;*++,,--.gffee__^+,,--../IHHGGFFE01122334~ + +^^__``aa;;::9988..//0011kkjjiihhffgghhii3322110066778899ccbbaa`` nnooppqqssttuuvvVWWXXYYZCBBAA@@?&''(())*srrqqppo + + ^__``aab;::99887.//00112^]]\\[[Z/5566778EDDCCBBA45566778~}}|{zyx bbccddee7766554422334455ggffeeddjjkkllmm//..--,,::;;<<==__^^]]\\ + + rrssttuu ww}}~~ Z[[\\]]^?>>==<<;*++,,--.onnmmllkbccddeef7665544323344556ZYYXXWWV899::;;>=899::;;>??@@AA[[ZZYYXXvvwwxxyy + + ~~ + + ^__``aab;::99887.//00112kjjiihhgfgghhiij3221100/6778899:VUUTTSSR<==>>??@=<<;;::9<==>>??@ssrrqqppjjkkllmm//..--,,::;;<<==__^^]]\\ + + rrssttuu''&&%%$$BBCCDDEEWWVVUUTTzz{{||}}}}|{zyxw bccddeef7665544323344556gffeeddcjkkllmmn/..--,,+:;;<<==>RQQPPOON@AABBCCD98877665@AABBCCDoonnmmll nnooppqq++**))((>>??@@AA[[ZZYYXXvvwwxxyy##""!! FFGGHHIISSRRQQPP~~ + +wvvuuttsfgghhiij3221100/6778899:cbbaa``_ +nooppqqr+**))(('>??@@AABNMMGGFFEDEEFFGGM54433221DEEFFGGHkkjjiihh + + rrssttuu''&&%%$$BBCCDDEEWWVVUUTTzz{{||}}JJKKLLMMOONNMMLL~~}}ww srrqqppojkkllmmn/..--,,+:;;<<==>_^^]]\\[ + rssttuuv'&&%%$$#BCCDDEEFEDDCCBBAMNNOOPPQ100//..-HIIJJKKLggffeedcvvwwxxyy##""!! FFGGHHIISSRRQQPP~~NNOOPPQQKKJJIIHH !!vvuuttssonnmmllk +nooppqqr+**))(('>??@@AAB[ZZYYXXWvwwxxyyz#""!! FGGHHIIJA@@??>>=QRRSSTTU-,,++**)LMMNNOOPba`__^^]zz{{||}}JJKKLLMMOONNMMLL~~}}||RRSSTTUUGGFFEEDD""##$$%%rrqqppookjjiihhg + rssttuuv'&&%%$$#BCCDDEEFWVVUUTTSz{{||}}~JKKLLMMN=<<;;::9UVVWWXXY)((''&&%PQQRRSST]\\[[ZZY~~NNOOPPQQKKJJIIHH !!{{zzyyxxVVWWXXYYCCBBAA@@&&''(())nnmmllkkgffeedcbvwwxxyyz#""!! FGGHHIIJSRRQQPPO~NOOPPQQR98877665YZZ[[\\]%$$##""!TUUVVWWXYXXWWVVU~~}}||RRSSTTUUGGFFEEDD""##$$%%wwvvuutt ZZ[[\\]]??>>==<<**++,,--jjiihhgg !!""##a`__^^]]z{{||}}~JKKLLMMNONNMMLLK~~}}||{RSSTTUUV5//..--,]^^__eef! XYYZZ[[\UTTSSRRQ !!{{zzyyxxVVWWXXYYCCBBAA@@&&''(())ssrrqqpp + + ^^__``aa;;::9988..//0011ffee__^^$$%%&&''\\[[ZZYY~NOOPPQQRKJJIIHHG !!"{zzyyxxwVWWXXYYZ,++**))(fgghhiij\]]^^__`QPPOONNM""##$$%%wwvvuutt ZZ[[\\]]??>>==<<**++,,--oonnmmllbbccddee7766554422334455]]\\[[ZZ(())**++XXWWVVUU~~}}||{RSSTTUUVGFFEEDDC"##$$%%&wvvuutts Z[[\\]]^(''&&%%$jkkllmmn`aabbccdMLKJIHGG&&''(())ssrrqqpp + + ^^__``aa;;::9988..//0011kkjjiihhffgghhii3322110066778899YYXXWWVV,,--..//TTSSRRQQ !!"{zzyyxxwVWWXXYYZCBBAA@@?&''(())*srrqqppo + + ^__``aab$##""!! nooppqqrdeeffgghFFEEDDCC**++,,--oonnmmllbbccddee7766554422334455ggffeeddjjkkllmm//..--,,::;;<<==UUTTSSRR55667788PPOONNMM"##$$%%&wvvuutts Z[[\\]]^?>>==<<;*++,,--.onnmmllkbccddeef rssttuuu hiijjkklBBAA@@??..//0011kkjjiihhffgghhii3322110066778899ccbbaa`` nnooppqq++**))((>>??@@AAQQPPOONN99::;;<>==<<;;22334455ggffeeddjjkkllmm//..--,,::;;<<==__^^]]\\ + + rrssttuu''&&%%$$BBCCDDEEMMGGFFEE==>>??@@FEEDDCCB*++,,--.onnmmllkbccddeef7665544323344556gffeeddcjkkllmmnqppoonnm + + pqqrrssttuuZHAbr˂ptlJnXv`J`ےJbdQfH~˙ے`JXJtArdfpvfHrXQJ`ہdrtnvpZHAbrbtl|ZdQXv`QJ`ےAJbdQ`vXnr˂p|ZdQbnXv`fpvbHAZJltH~fے`JXQZHAےtlJnXv`bHAZpbdQZ|vpfHZHAbۉlJtf~HnXv`ˑ˂rXbdQZ|vXnr˂p`JXQArd|ے`JXQZHAbtArdf~HbHAZpZ|df`vXQr˂p|ZdQnXv`fpv㒐bHAAJltfH~˙ے`JXJtAdbtlf~HbHAZpZ|dvpfZHAbtlJf~HnXv`p˂rbdQZ|`vXnr˂p`JXQrtArdf~H˂rXQdrtA~f``JXQArd|fpvf~HQJ`ےdrtAvpfHZHAbr˂pZdQbtr˂pے`JXQ|ZdQbXv`f˂brtAJlnvpZHAbbtlf~HnrXQJ`Zp˂bdQZ|f`vXQr˂p|ZdQJtArdfpv˂rtAJlH~fے`JXQtArdfpvfHfXQJ`ےdrtAvpfZHAbbtl|ZdQbXv`fJ`ےJbdQvXnr˂pZdQbtnXv`fpvbHAZpJlt~f``JXQZHAے`lJtZHAbr˂ptlJ~HfHAZdtbdQfH~˙ے`JXJtArdfpvےHArXQJ`ہdrtnvpZHAbbtl|ZdQnXv`pbHAZdtbdQ`vXnr˂p|ZdQbnXv`pvnbHAZJltH~fے`JXQJtAdtlJ~HfbHAZpZ|dvpfHZHAbۉlJtf~HnXv`ˑ˂rXbdQZ|vXnr˂pJXQrArd|f~Hے`JXQ|ZdQbtArdpvnrtAJZ|dnf`vXQr˂p|ZdQnXv`Zp˂󒐙bHAAJltfH~˙ے`JXJtArdbtlvnrtAJZ|AJvpfZHAbtlJf~HrXQJ`p˂rbdQZ|`vXnr˂p|ZdQbtArdpvn˂brtAJl~f``JXQArd|fpvfHfpQJ`ےdrtAvpfHZHAbbtlZdQbtfpvr˂ptlJ|ZdQbXv`pbdQZ|vfnvpZHAbbtlf~HrXQJ`Zp˂bdQZ|f`vXQr˂p|ZdQJtArdrXQJ`pbdQZ|ltbH~fے`JXQtArdfpvےHAZXQJ`ےdrtAvpfZHAbtlJ|ZdQbXv`pHAZdtbdQvXnr˂pZdQbtnXv`˝vnbHAZpJlt~f``JXQJtAd|lJtnXv`ZHAbtArdtlJ˂rXQdrtAf`vXfH~˙ے`JXJtArdfpvbHArXQJ`ہdrtnvpZHAbbtlf~H˂rXdrtAnvp`vXnr˂p|ZdQbnXv`p˂rbHAZJltH~fے`JXQtArdtlJvnrrtAJZ|AJlvpfHZHAbۉlJtf~HrXQJ`ۑ˂rXbdQZ|vXnr˂pZdQbtArd|f~HXے`JXQ|ZdQbtArdJ`ےJltnvpf`vXQr˂p|ZdQnXv`Zp˂󒐙bHAAJltfH~˙ے`JXJtArdXv`QJ`ےJltfHfvpfZHAbtlJf~HXQJ`ےp˂rbdQZ|`vXnr˂p|ZdQbtArdXQJ`pbdQZ|tb~f``JXQArd|fpv㒐HAZpQJ`ےdrtAvpfHZHAbۉlJtZdQbtv`fr˂ptlJf~HbHAZpbdQZ|fH~nvpZHAbbtlf~HrXQJ`ZdrtbdQZ|f`vXQr˂p|ZdQf~HbHAZpbdQZ|`vXnH~fے`JXQtArdfpvbHAZXQJ`ےdrtAvpfZHAbtlJf~H˂rXQdrtAnvpvXnr˂pZdQbtnXv`ˑ˂rXbHAZpJlt~f``JXQArd|lJt~HfpZHAbtArdXv`f˂bdrtAJf`vXfH~˙ے`JXJtArdfpvbHAAJltdrtnvpZHAbbtlfpv˂drtAvpf`vXnr˂p|ZdQbnXv`p˂rbHAZJltH~fے`JXQtArdXv`fJ`ےJltfHf`vpfHZHAbۉlJtf~HQJ`ے˂rXbdQZ|vXnr˂pZdQbtArd˝vnXے`JXQ|ZdQb~HfHAZp˂bdQZnvpfZHAbQr˂p|ZdQnXv`Zp˂bdQZ|AJltfH~˙ے`JXJtArdnXv`bHAZpJbdQH~fvpfZHAbtlJf~HXQJ`ےdrtAbdQZ|`vXnr˂p|ZdQb~HfbHAZpbdQZ|vXn~f``JXQArd|fpvbHAZpQJ`ےdrtAvpfHZHAbۉlJtf~HXv`pr˂ptlJpvnrXQJ|drfH~˙ے`JXZHAbbtlf~HrXQJ`ہdrtbdQZ|f`vXQr˂p|ZdQf~HXrXQZ|d`vXnH~fے`JXQtArdfpvbHAZJltdrtAvpfZHAbtlJpvn˂bdrtAJvpfHvXnr˂pZdQbtnXv`ˑ˂rXbHAZJlt~f``JXQArd|v`fvnrXZHAbtArdXv`f`ےbtAJlf`vXQr˂pے`JXJtArdfpvbHAAJltdtAnvpZHAbbtlv`fJ`ےrtAJl瀅vpfZHAbr˂p|ZdQbnXv`p˂rbdQZ|JltH~fے`JXQtArdXv`fHAZp˂bdQZ~f`vpfHZHAbۉlJtf~HQJ`ےdrtAbdQZ|vXnr˂pZdQbt~HfpQJ`pے`JXQ|ZdQb~HXHAZp˂tbdQZnvpZHAbQr˂p|ZdQnXv`Zp˂bdQZ|JltfH~˙ے`JXJtArd~HfpbHAZp˒tbdQH~fے`JXQZHAbtlJf~HXQJ`ےdrtAbdQZ|`vXnr˂p|ZdQb~HXrXQJ|drvXn~f`JXQArd|fpvbHAZpJltdrtAvpfHZHAbۉlJtvnXrXQr˂ptlJv`fbHA|drfH~˙ے`JXZHAbtlf~HrXQJ`ہdrtbnvpf`vXQr˂p|ZdQvnXbHZ|d`vXnr˂pے`JXQtArdfpvbHAZJltdtAJvpfZHAbtlJv`f`ےbtAJl璅vpfHZHAbr˂pZdQbtnXv`ˑ˂rXbdQZ|Jlt~f``JXQArd|v`fJ`ےZHAbtArd~HfpZp˂tAJbdf`vXQr˂p`JXQJtArdfpvbHAAJltfHnvpZHAbbtlv`fAZp˂rtAJbvpfZHAbr˂p|ZdQbnXv`p˂rbdQZ|ltbH~fے`JXQtArd~HfpHAZp˂tbdQZ~f``JXQZHAbۉlJtf~HQJ`ےdrtAbdQZ|vXnr˂pZdQbt~HXbHAZpے`JXQ|ZdQbvnXrXQJ`QZ|dnvpZHAbrbtl|ZdQnXv`Zp˂bdQZ|f`vXfH~˙ے`JXJtArd~HXrXQJ`dQZ|H~fے`JXQZHAےtlJf~HXQJ`ےdrtAnvp`vXnr˂p|ZdQbvnXbHA|drvXnr˂p`JXQArd|fpvbHAZpJltdtAJlvpfHZHAbۉlJtv`f󂀉bHr˂ptlJv`fےbHArtAJlfH~˙ے`JXJtAdbtlf~HrXQJ`ہdrtnvpf`vXQr˂p|ZdQv`fےbHdrtAJ`vXnr˂p`JXQrtArdfpvbHAZJltfHfvpfZHAbtlJv`fZp˂tAJbdvpfHZHAbr˂pZdQbtnXv`ˑ˂rXbdQZ|tb~f``JXQArd|~HfpAZp˂ZHAbtArd~HXvZp˂tbdf`vXQr˂p|ZdQJtArdfpvbHAAJltfH~nvpZHAbbtl~HfpAZp˂ltbvpfZHAbbtl|ZdQbnXv`p˂rbdQZ|`vXnH~fے`JXQtArd~HXvrXQJ`QZ|d~f``JXQZHAے`lJtf~HQJ`ےdrtAnvpvXnr˂pZdQbtvnXrXQJ`ے`JXQ|ZdQb`f~bHAZQZ|dnvpZHAbbtl|ZdQnXv`Zp˂bdQZ|f`vXfH~˙ے`JXJtArdvnXbHAdQZ|H~fے`JXQJtAdtlJf~HXQJ`ےdrtAvpf`vXnr˂p|ZdQb`f~ےbHArtAJlvXnr˂pJXQrArd|fpvbHAZpJltfHf`vpfHZHAbۉlJtv`fےbHr˂ptlJHfpvp˂rrtAJfH~˙ے`JXJtArdbtlf~HrXQJ`ہdrtnvpfZHAbQr˂p|ZdQv`fZp˂drtAJ`vXnr˂p|ZdQbtArdfpvbHAZJltH~fvpfZHAbtlJHfpvZp˂tbdvpfHZHAbbtlZdQbtnXv`ˑ˂rXbdQZ|vXn~f``JXQArd|~HXv`AZp˂ZHAbtArdnXvXQJ`ےbdQZ|f`vXQr˂p|ZdQJtArdfpvbHAAJltfH~˙ے`JXZHAbbtl~HXv`rXQJ`ےbdQZ|vpfZHAbtlJ|ZdQbnXv`p˂rbdQZ|`vXnH~fے`JXQtArdnXvbHAZQZ|d~f``JXQJtAd|lJtf~HQJ`ےdrtAvpfHvXnr˂pZdQbtf~HbHAے`JXQ|ZdQb`f~bHAZdrtAnvpZHAbbtlf~HnXv`Zp˂bdQZ|f`vXQr˂pے`JXJtArdf~HbHAdrtH~fے`JXQtArdtlJf~HXQJ`ےdrtAvpfZHAbr˂p|ZdQb`f~p˂rrtAJvXnr˂pZdQbtArd|fpvbHAZpJlt~f`vpfHZHAbۉlJtfpvZp˂r˂ptlJHXv`p˂JltfH~˙ے`JXJtArdfpvf~HrXQJ`ہdrtnvpZHAbQr˂p|ZdQfpvZp˂AJlt`vXnr˂p|ZdQbtArdfpvbHAZJltH~fے`JXQZHAbtlJHXv`XQJ`ےbdQZ|vpfHZHAbۉlJtZdQbtnXv`ˑ˂rXbdQZ|vXn~f`JXQArd|nXv`rXQJ`ZHAbtArdf~HbHAZpbdQZ|f`vXQr˂p|ZdQnXv`fpvbHAAJltfH~˙ے`JXZHAbtlnXv`bHAZpbdQZ|vpfZHAbtlJf~HnXv`p˂rbdQZ|`vXnr˂pے`JXQtArdf~HbHAZdrtA~f``JXQArd|lJtf~HQJ`ےdrtAvpfHZHAbr˂pZdQbtf~HbHAے`JXQ|ZdQbfpv˂rXQdrtAnvpZHAbbtlf~HnXv`Zp˂bdQZ|f`vXQr˂p`JXQJtArdf~H˂rXdrtH~fے`JXQtArdfpvf~HXQJ`ےdrtAvpfZHAbr˂p|ZdQbfpvp˂JltvXnr˂pZdQbtArdfpvbHAZpJlt~f``JXQZHAbۉlJtXv`Zp˂bHAZpZ|d~f``JXQrtAd|lJtA~HfJ`ےdrtAJvpfHvXn˂pZZdQbtf~HbHAZrtAJlvXnۉ˂pZHJXQrbtrd|vnXbHAZpˑtbdf`vpfHJXQrXnvˍQtJl˂rXrtAJvXn˂pZZdQbtrd|pvnbHAZpltb~f`vpfHHAbےlJtAfpvp˂tbdQvpfHAbے`lJtZdQbtv`frXQQZ|dvXn~f`˂p`ZpfH~tbAdZQJ`ےbdQZ|vpfHHAbےlJtAZdQbtXv`f˂rXQdQZ|vXn~fZ`JXQrrd|nXv`bHAZpZ|d~f`JXQrAd|lJtA~HfpJ`ےrtAJlvpfHvXnQXb㉀f۝`v|drbHAZpdrtA~f``JXQrrd|lJtA~HfJ`ےdrtAJvpfHHAbے˂pZZdQbtf~H˂rXQrtAJbvXnۉ˂pZHZdQbtrd|vnXbHAZpˑtbd~f`vpfHۑpJAHrXnvˍQtJl˂JltvXn˂pZZdQbtrdfpvnbHAZpltb~f``JXQrHAbےlJtAXv`fJ`ےdQZ|vpfHAbے`lJtAZdQbtv`frXQQZ|dvXn~fr󙐂ˁ`ZpfH~tbAdZbHAZpbdQZ|vpfHHAbےlJtA~HfXv`f˂rXQdQZ|vXn˂pZ`JXQrrd|~HfbHAZpdrtAJ~f`JXQrrd|lJtA~HfpJ`ےrtAJlvpfH˂pZHQXAHrf۝`v|drrXQdrtAJ~f``JXQrrd|pvn~HfJ`ےdrtAJvpfHHAbے˂pZZdQbtpvn˂bltbvXnۉ˂pZHZdQbtrdfvnXbHAZpˑtbd~f`Abے`ˁ`ZQXnvˍQtJlJ`ے㑒bdQZvXn˂pZZdQbtXv`fpvnbHAZpltb~f``JXQrHAے`lJtAXv`fHAZp˂dQZ|vpfHAbے`lJtA~Hfpv`frXQQZ|dvXnہJXQrXb㉀ۑpfH~tbAdZbHAZp|drvpfHHAbےlJtA~HfXv`f˂rXQdQZ|vXn˂pZJXQrbrd|~HXrXQJdrtAJ~f`JXQrrd|vnX~HfpJ`ےrtAJlvpfH˂pZHpJAHrf۝`v|drbHtAJl~f``JXQrrd|pvnHfpJ`ےdrtAJvpfHHAbےtlJZdQbtv`f`ےbbdQZ|vXnۉ˂pZHZdQbtv`fvnXbHAZpˑtbd~f`Abːˁ`ZQXnvˍQtJlAZdtbdQZvXn˂pZZdQbtXv`fvnrbHAZpltb~f``JXQrtAd|lJtA~HfpHAZp˂drtvpfHAbے`lJtA~Hfpv`frXQQZ|dvXnۂpZHAXAHr󙐂pfH~tbAdZrtAJb|AJlvpfHHAbےlJtA~HfXQJ`ے˂rXQdQZ|vXn˂pZZdQbtrd|vnXbHAAJlt~f`JXQrrd|vnXHfpJ`ےrtAJlvpfHbے`ˁ`ZQXbf۝`v|drdQZ|tbn~f``JXQrrd|pvnHAZpJ`ےdrtAJvpfHHAbےlJtAZdQbtv`pvZdrbdQZ|vXnۉ˂pZHZdQbtv`fvnrXbHAZpˑtbd~f`JXQr㉀ۑpJXnvˍQtJldrtAJvpfvXn˂pZZdQbtXv`f˂rXQbHAZpltb~f``JXQrrd|lJtAnrXQtAJbdAJlvpfHAbے`lJtA~HfpQJ`ےrXQQZ|dvXnۂpZHAAHr󙐂pfH~tbAdZltbHf`vpfHHAbےlJtA~HfJ`ے˂rXQdQZ|vXn˂pZZdQbtrdfJ`p˂QZ|dtbn~f`JXQrrd|vnXHAZpJ`ےrtAJlvpfHb˂pˁ`ZQXAf۝`v|drdQZ|vXn~f``JXQrrd|pvnbHAZpJ`ےdrtAJvpfHHAbےlJtA~HXrXQJrtAJlvpfHvXnۉ˂pZHZdQbtv`frXQbHAZpˑtbd~f`ZHAbHr󙐂ˁXnvˍQtJldrtAJvpfHvXn˂pZZdQbtXv`f˂rXQbHAZltb~f``JXQrrd|v`f`ےbtbdf`vpfHAbے`lJtA~HfpJ`ےむrXQQZ|dvXnۙے`JX`ZQXbpfH~tbAdZbdQZ|~f`vpfHHAbےlJtA~HfJ`ےdrtAJdQZ|vXn˂pZZdQbt~HfpHAZp˂QZ|dvXn~f`JXQrrd|vnXbHAZpJ`ےrtAJlvpfHQr˂pۑpJAf۝`v|drdrtvXn~fZ`JXQrrd|pvnbHAZpltbdrtAJvpfHHAbےlJtAvnXbHArtAJvpfHvXnۉ˂pZHZdQbtv`frXQbHAZdtbd~f`ZHAbHr󙐂ˁXnvˍQtJlAJltvpfHHAbے˂pZZdQbtXv`f˂rXQdQZ|ltb~f``JXQrrd|v`fZp˂bdQZ|~f`vpfHAbے`lJtA~HfpJ`ےrtAJlQZ|dvXnۙ˂p`ZQXAHrpfH~tbAdZbdQZ|~f``JXQrHAbےlJtA~HfJ`ےdrtAJdQZ|vXn˂pZZdQbt~HXvrXQJ`drtAvXn~fZHJXQrrd|vnXbHAZpˑtbdrtAJlvpfHZHAb󙐂ˁ`Zf۝`v|drdrtvXn˂pZ`JXQrrd|pvnbHAZpltbdtAJlvpfHHAbےlJtA`f~ےbHAJltvpfHAbے`˂pZHZdQbtv`frXQQZ|dtbd~f``JXQQXb㉀XnvˍQtJlAJbdQvpfHHAbے˂pZZdQbtXv`f˂rXQdQZ|tbn~f``JXQrrd|HfpvZp˂bdQZ|~f`JXQrAbے`lJtA~HfpJ`ےrtAJlQZ|dvXnr˂pۑpJAHrpfH~tbAdZZ|d~f``JXQrHAے`lJtA~HfJ`ےdrtAJvpfvXn˂pZZdQbtnXvbHAZdrtAvXnۉ˂pZHJXQrrd|vnXbHAZpˑtbdtAJlvpfHZHAb󙐂ˁ`f۝`v|drrtAJlvXn˂pZJXQrbrd|pvnbHAZpltbHf`vpfHHAbےlJtA`f~p˂rJbdQvpfHAbے`˂pZHZdQbtv`frXQQZ|dtbn~f`˂pZHpfH~XnvˍQtJltbdQvpfHHAbےtlJZdQbtXv`f˂rXQdQZ|vXn~f``JXQrrd|HXv`XQJ`ےZ|d~f`JXQrAے`lJtA~HfpJ`ےrtAJlvpfHvXnAbے`f۝`vp|drtbAdZ|yz{|}~~}|{zIIIJJJJJJJJJJJJJJJJJJJJJJJ \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv28_1.dat b/vendor/endroid/qr-code/assets/data/qrv28_1.dat new file mode 100644 index 000000000..ac9d23bbd --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv28_1.dat @@ -0,0 +1,257 @@ +~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwwwwwwxwxuvuvuvuvuvuvuvuvststststststststststststqrqrqrqrqrqrqrqropopopopopopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklklklklklijijijijijijijijghghghghghghghghgfefefefefefefefefefefefcdcdcdcdcdcdcdcdabababababababab_`_`_`_`______`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:7878787878787878787878785656565656565656343434343434343412121212121212120/0/0////0/0/0/0.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!            ~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwwxwxwxwxuvuvuvuvuvuvuvuvststststststststststststqrqrqrqrqrqrqrqropopopopopopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklkjijijijijijijijijijijijghghghghghghghghefefefefefefefefefefefefcdcdcdcdcdcdcdcdabababababababab_`_`_`_``_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:787878787878787878787878565656565656565634343434343434341212121212121212///0/0/0/0/0/0/0.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!            ~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwwwwwwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststststststqrqrqrqrqrqrqrqropopopopopopopoponmnmnmnmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijijijijijghghghghghghghghefefefefefefefefefefefefcdcdcdcdcdcdcdcdabababababababab_`______`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGGGGGGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:787878787878787878787878565656565656565634343434343434341212121212121212/0/0/0/0/0/0/0/0.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!            ~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyxwxwwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststsrqrqrqrqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijijijijijghghghghghghghghefefefefefefefefefefefefcdcdcdcdcdcdcdcdababababababa`_``_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:787878787878787878787876565656565656565634343434343434341212121212121212/0/0/0/0/0/0/0//.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!            ~}~}~}~}~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyxwxwwwwwwxwxwxwxwxwxwxwuuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijijijijijghghghghghghghghefefefefefefefefefefefefcdcdcdcdcdcdcdcbabababab_`_`____`_`_`_`_`_`_____^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGGGGGGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:787878787878787856565656565656565656565634343434343434341212121212121212/0/0/0/0////0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!            ~}~}~}~}~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{zyzyzyzyzywxwxwxwxwxwxwxwxuuuuuvuvuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijijijijijghghghghghghghghefefefefefefefefefefefefcdcdcdcdabababababababab__`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIHGHGGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:9:9:9:9:787878787878787856565656565656565656565634343434343434341212121212121212/0/0/0/00/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!           ~}~}~}~}~}~}~}~}~}~}~}~}|{|{|{|{zyzyzyzyzyzyzyzywxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijijijijijghghghghghghghghefefefefefefefefedcdcdcdcdcdcdcdabababababababab`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKJIJIJIJIJIHGHGGGGGGHGHGHGHGHGGGGGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:9:9:9:9:787878787878787856565656565656565656565634343434343434341212121212121212//////0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!        ~}~}~}~}~}~}~}~}~}~}~}~}|{|{|{|{zyzyzyzyzyzyzyzywxwxwxwxwxwxwwwwuvuvuvuvuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijihghghghghghghghghghghghefefefefefefefefcdcdcdcdcdcdcdcdabababababababab`_`_`_`_`_`_`___^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:9:9:9:9:78787878787878785656565656565656565656563434343434343434121212121210/0/00/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!        ~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzywxwxwxwxwwxwxwxwuvuvuvuvuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnmlklklklklklklklklklklklijijijijijijijijghghghghghghghghghghghghefefefefefefefefcdcdcdcdcdcdcdcdabababababababab`_`_`_`____`_`_`^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:9:9:9:9:7878787878787878565656565656565656565656343434343434321212121212/0//////0/0/0/0/0/////0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!        ~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzywxwxwxwwxwxwxwxwuvuvuvuvuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrqpopopopopopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklklklklklijijijijijijijijghghghghghghghghghghghghefefefefefefefefcdcdcdcdcdcdcdcdabababababababab`_`_`_`__`_`_`_`^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIGHGHGHGHGHGHGGGGEFEFEFEFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:9:9:9:9:78787878787878785656565656565656565656543434343412121212121212120/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!        ~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzywwwwxwxwxwxwxwxwuvuvuvuvuvuvuvuvutstststststststststststqrqrqrqrqrqrqrqropopopopopopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklklklklklijijijijijijijijghghghghghghghghghghghghefefefefefefefefcdcdcdcdcdcdcdcdabababababababab_____`_`_`_`_`_`^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIGHGHGHGHGGHGHGHGEFEFEFEFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:9:9:9:9878787878787878785656565656565656343434343434343412121212121212120/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!        ~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwuvuvuvuvuvuvuvuvststststststststststststqrqrqrqrqrqrqrqropopopopopopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklklklklklijijijijijijijijghghghghghghghghghghghghefefefefefefefefcdcdcdcdcdcdcdcdabababababababab_`_`_`_`_`_`_`_`^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIGHGHGHGGHGHGHGHGEFEFEFEFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:7878787878787878787878785656565656565656343434343434343412121212121212120/0/0/0/0/0/////.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!        ~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwuvuvuvuvuvuvuvuvststststststststststststqrqrqrqrqrqrqrqropopopopopopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklklklklklijijijijijijijijghghghghghghghghghghghghefefefefefefefefcdcdcdcdcdcdcdcdabababababababab_`_`_`_`_`_`_`_`^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIGGGGHGHGHGHGHGHGEFEFEFEFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABA@?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:7878787878787878787878785656565656565656343434343434343412121212121212120/0/0/0//0/0/0/0.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!                      + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + +            + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + + + +          + + + + + + + + + + + +~~}}LLKKJJII--..//00aabbccddggffee__$$##""!!++,,--..nnooppqqUUTTSSRR$%%&&''(XYYZZ[[\uttssrrqA@@??>>= + + ())**++,\]]^^__`qppoonnm=<<;;::9 ,--..//0`aabbccdmllkkjji9887766501122334deeffgghihhggffe5443322145566778hiijjkkl[ZZYYXXW*++,,--.mnnooppqVUUTTSSR QQRRSSTT||{{zzyyHHGGFFEE!!""##$$UUVVWWXXxxwwvvuuDDCCBBAA %%&&''((YYZZ[[\\ttssrrqq@@??>>== + + ))**++,,]]^^__``ppoonnmm<<;;::99--..//00aabbccddggffee__$$##""!!##$$%%&&ffgghhii]]\\[[ZZ$$##""!!IJJKKLLM}~~POONNMMLMNNOOPPQ~~}}|LKKJJIIH !QRRSSTTU|{{zzyyxHGGFFEED!""##$$%UVVWWXXYxwwvvuutDCCBBAA@ %&&''(()YZZ[[\\]onnmmllk,++**))(YZZ[[\\]ggffeedc,++**))(BBCCDDEEvvwwxxyyWWVVUUTT##""!! FFGGHHIIzz{{||}}SSRRQQPPJJKKLLMM~~OONNMMLLNNOOPPQQ~~}}||KKJJIIHH !!RRSSTTUU||{{zzyyHHGGFFEE11223344eeffgghh^^]]\\[[ //556677rrssttuuQQPPOONN())**++,\]]^^__`qppoonnm=<<;;::9 ,--..//0`aabbccdmllkkjji9887766501122334deeffgghihhggffe5443322145566778hiijjkkleddccbba100//..-899::;;>== + + ))**++,,]]^^__``ppoonnmm<<;;::99--..//00aabbccddllkkjjii8877665511223344eeffgghh^^]]\\[[ ''(())**jjkkllmmYYXXWWVV MNNOOPPQ~~}}|LKKJJIIH !QRRSSTTU|{{zzyyxHGGFFEED!""##$$%UVVWWXXYxwwvvuutDCCBBAA@ %&&''(()YZZ[[\\]tssrrqqp@??>>==< + + )**++,,-]^^__``akjjiihhg(''&&%%$ !!""#]^^__eefba`__^^](''&&%%$FFGGHHIIzz{{||}}SSRRQQPPJJKKLLMM~~OONNMMLLNNOOPPQQ~~}}||KKJJIIHH !!RRSSTTUU{{zzyyxxGGFFEEDD""##$$%%VVWWXXYYxxwwvvuuDDCCBBAA 55667788iijjkkllZZYYXXWW8899::;;vvww}}~~MMLKJIHG,--..//0`aabbccdmllkkjji9887766501122334deeffgghihhggffe5443322145566778hiijjkkleddccbba100//..-899::;;>??@pqqrrsstSRRQQPPO 78899::;uvvww}}~NMMLKJIH%%&&''((YYZZ[[\\ttssrrqq@@??>>== + + ))**++,,]]^^__``ppoonnmm<<;;::99--..//00aabbccddllkkjjii8877665511223344eeffgghhhhggffee4433221155667788iijjkkllZZYYXXWW++,,--..nnooppqqUUTTSSRR !QRRSSTTU|{{zzyyxHGGFFEED!""##$$%UVVWWXXYxwwvvuutDCCBBAA@ %&&''(()YZZ[[\\]tssrrqqp@??>>==< + + )**++,,-]^^__``apoonnmml<;;::998-..//001abbccddegffee__^$##""!! #$$%%&&'fgghhiij]\\[[ZZY$##""!! JJKKLLMM~~OONNMMLLNNOOPPQQ~~}}||KKJJIIHH !!RRSSTTUU{{zzyyxxGGFFEEDD""##$$%%VVWWXXYYwwvvuuttCCBBAA@@ &&''(())ZZ[[\\]]ttssrrqq@@??>>== + + 99::;;<>??GFFEEDDC +01122334deeffgghihhggffe5443322145566778hiijjkkleddccbba100//..-899::;;>??@pqqrrsst]\\[[ZZY)((''&&% @AABBCCDtuuvvwwxONNMMGGF + + ;<<==>>?~GGFFEEDD ))**++,,]]^^__``ppoonnmm<<;;::99--..//00aabbccddllkkjjii8877665511223344eeffgghhhhggffee4433221155667788iijjkkllddccbbaa00//..--99::;;<>==< + + )**++,,-]^^__``apoonnmml<;;::998-..//001abbccddelkkjjiih8776655412233445effgghhi^]]\\[[Z '(())**+jkkllmmnYXXWWVVU NNOOPPQQ~~}}||KKJJIIHH !!RRSSTTUU{{zzyyxxGGFFEEDD""##$$%%VVWWXXYYwwvvuuttCCBBAA@@ &&''(())ZZ[[\\]]ssrrqqpp??>>==<< + + **++,,--^^__``aavvuuttssppoonnmm<<;;::99 + + ==>>??@@qqrrssttRRQQPPOO @@AABBCC~~}}|{zyCBBAA@@? + 45566778hiijjkkleddccbba100//..-899::;;>??@pqqrrsst]\\[[ZZY)((''&&% @AABBCCDtuuvvwwxYXXWWVVU%$$##""!DEEFFGGHxyyzz{{|FEEDDCCB?@@AABBC~~}}|{zCCBBAA@@ + + --..//00aabbccddllkkjjii8877665511223344eeffgghhhhggffee4433221155667788iijjkkllddccbbaa00//..--99::;;<>??@@qqrrssttRRQQPPOO 8899::;;vvww}}~~MMLKJIHG%&&''(()YZZ[[\\]tssrrqqp@??>>==< + + )**++,,-]^^__``apoonnmml<;;::998-..//001abbccddelkkjjiih8776655412233445effgghhihggffeed4332211056677889ijjkkllmZYYXXWWV+,,--../nooppqqrUTTSSRRQ !!RRSSTTUU{{zzyyxxGGFFEEDD""##$$%%VVWWXXYYwwvvuuttCCBBAA@@ &&''(())ZZ[[\\]]ssrrqqpp??>>==<< + + **++,,--^^__``aaoonnmmll;;::9988..//0011bbccddeerrqqppoollkkjjii88776655 AABBCCDDuuvvwwxxNNMMGGFF + + DDEEFFGGxwwvvuut?>>==<<;899::;;>??@pqqrrsst]\\[[ZZY)((''&&% @AABBCCDtuuvvwwxYXXWWVVU%$$##""!DEEFFGGHxyyzz{{|UTTSSRRQ! HIIJJKKL|}}~~BAA@@??> CDDEEFFGyxwwvvuu??>>==<<11223344eeffgghhhhggffee4433221155667788iijjkkllddccbbaa00//..--99::;;<>??@@qqrrsstt\\[[ZZYY((''&&%% AABBCCDDuuvvwwxxNNMMGGFF + + <<==>>??GFFEEDDC +)**++,,-]^^__``apoonnmml<;;::998-..//001abbccddelkkjjiih8776655412233445effgghhihggffeed4332211056677889ijjkkllmdccbbaa`0//..--, 9::;;<<=mnnooppqVUUTTSSR/5566778rssttuuvQPPOONNM""##$$%%VVWWXXYYwwvvuuttCCBBAA@@ &&''(())ZZ[[\\]]ssrrqqpp??>>==<< + + **++,,--^^__``aaoonnmmll;;::9988..//0011bbccddeekkjjiihh7766554422334455ffgghhiinnmmllkkhhggffee44332211EEFFGGHHyyzz{{||EEDDCCBB + + MMNNOOPPtssrrqqp;::99887 + + <==>>??@pqqrrsst]\\[[ZZY)((''&&% @AABBCCDtuuvvwwxYXXWWVVU%$$##""!DEEFFGGHxyyzz{{|UTTSSRRQ! HIIJJKKL|}}~~QPPOONNMLMMNNOOP~~}>==<<;;: + + GMMNNOOPttssrrqq;;::998855667788iijjkkllddccbbaa00//..--99::;;<>??@@qqrrsstt\\[[ZZYY((''&&%% AABBCCDDuuvvwwxxXXWWVVUU$$##""!!EEFFGGHHyyzz{{||EEDDCCBB@@AABBCC~~}}|{zyCBBAA@@? + -..//001abbccddelkkjjiih8776655412233445effgghhihggffeed4332211056677889ijjkkllmdccbbaa`0//..--, 9::;;<<=mnnooppq`__^^]]\,++**))( + + =>>??@@AqrrssttuRQQPPOON 899::;;>==<< + + **++,,--^^__``aaoonnmmll;;::9988..//0011bbccddeekkjjiihh7766554422334455ffgghhiiggffeedd3322110066778899jjkkllmmjjiihhggddccbbaa00//..--IIJJKKLL}}~~AA@@??>>QQRRSSTTpoonnmml76655432 @AABBCCDtuuvvwwxYXXWWVVU%$$##""!DEEFFGGHxyyzz{{|UTTSSRRQ! HIIJJKKL|}}~~QPPOONNMLMMNNOOP~~}MLLKKJJI PQQRRSST}wwvvuut:9988776 PQQRRSSTppoonnmm7766554399::;;<>??@@qqrrsstt\\[[ZZYY((''&&%% AABBCCDDuuvvwwxxXXWWVVUU$$##""!!EEFFGGHHyyzz{{||TTSSRRQQ IIJJKKLL}}~~AA@@??>> DDEEFFGGxwwvvuut?>>==<<;12233445effgghhihggffeed4332211056677889ijjkkllmdccbbaa`0//..--, 9::;;<<=mnnooppq`__^^]]\,++**))( + + =>>??@@Aqrrssttu\[[ZZYYX(''&&%%$ ABBCCDDEuvvwwxxyNMMGGFFE + + <==>>??@~FFEEDDCC + +**++,,--^^__``aaoonnmmll;;::9988..//0011bbccddeekkjjiihh7766554422334455ffgghhiiggffeedd3322110066778899jjkkllmmccbbaa``//..--,, ::;;<<==nnooppqqffee__^^``__^^]],,++**))MMNNOOPP~~}}==<<;;::UUVVWWXXlkkjjiih10//..--DEEFFGGHxyyzz{{|UTTSSRRQ! HIIJJKKL|}}~~QPPOONNMLMMNNOOP~~}MLLKKJJI PQQRRSST}||{{zzyIHHGGFFE !!""##$TUUVVWWXtssrrqqp655//..-TUUVVWWXllkkjjii210//..- + + ==>>??@@qqrrsstt\\[[ZZYY((''&&%% AABBCCDDuuvvwwxxXXWWVVUU$$##""!!EEFFGGHHyyzz{{||TTSSRRQQ IIJJKKLL}}~~PPOONNMMMMNNOOPP~~}}==<<;;:: + + MMNNOOPPtssrrqqp;::9988756677889ijjkkllmdccbbaa`0//..--, 9::;;<<=mnnooppq`__^^]]\,++**))( + + =>>??@@Aqrrssttu\[[ZZYYX(''&&%%$ ABBCCDDEuvvwwxxyXWWVVUUT$##""!! EFFGGHHIyzz{{||}EDDCCBBA@AABBCCD~}}|{zyxBBAA@@?? ..//0011bbccddeekkjjiihh7766554422334455ffgghhiiggffeedd3322110066778899jjkkllmmccbbaa``//..--,, ::;;<<==nnooppqq__^^]]\\++**))(( + + >>??@@AArrssttuu]]\\[[ZZ\\[[ZZYY((''&&%% QQRRSSTTwwvvuutt99887766YYZZ[[\\hggffeed,,++**))HIIJJKKL|}}~~QPPOONNMLMMNNOOP~~}MLLKKJJI PQQRRSST}||{{zzyIHHGGFFE !!""##$TUUVVWWXyxxwwvvuEDDCCBBA $%%&&''(XYYZZ[[\poonnmml-,,++**)XYYZZ[[\hhggffee-,,++**) AABBCCDDuuvvwwxxXXWWVVUU$$##""!!EEFFGGHHyyzz{{||TTSSRRQQ IIJJKKLL}}~~PPOONNMMMMNNOOPP~~}}LLKKJJII QQRRSSTTwwvvuutt99887766QQRRSSTTpoonnmml76655432 9::;;<<=mnnooppq`__^^]]\,++**))( + + =>>??@@Aqrrssttu\[[ZZYYX(''&&%%$ ABBCCDDEuvvwwxxyXWWVVUUT$##""!! EFFGGHHIyzz{{||}TSSRRQQP IJJKKLLM}~~A@@??>>= +DEEFFGGMwwvvuutt>>==<<;;22334455ffgghhiiggffeedd3322110066778899jjkkllmmccbbaa``//..--,, ::;;<<==nnooppqq__^^]]\\++**))(( + + >>??@@AArrssttuu[[ZZYYXX''&&%%$$BBCCDDEEvvwwxxyyYYXXWWVVXXWWVVUU$$##""!!!!""##$$UUVVWWXXssrrqqpp55//..-- !!""]]^^__eecba`__^^((''&&%%LMMNNOOP~~}MLLKKJJI PQQRRSST}||{{zzyIHHGGFFE !!""##$TUUVVWWXyxxwwvvuEDDCCBBA $%%&&''(XYYZZ[[\uttssrrqA@@??>>= + + ())**++,\]]^^__`lkkjjiih)((''&&% !!"\]]^^__edcba`__^)((''&&%EEFFGGHHyyzz{{||TTSSRRQQ IIJJKKLL}}~~PPOONNMMMMNNOOPP~~}}LLKKJJII QQRRSSTT||{{zzyyHHGGFFEE!!""##$$UUVVWWXXssrrqqpp55//..--UUVVWWXXlkkjjiih10//..-- + + =>>??@@Aqrrssttu\[[ZZYYX(''&&%%$ ABBCCDDEuvvwwxxyXWWVVUUT$##""!! EFFGGHHIyzz{{||}TSSRRQQP IJJKKLLM}~~POONNMMLMNNOOPPQ~~}}w=<<;;::9 + MNNOOPPQssrrqqpp::99887766778899jjkkllmmccbbaa``//..--,, ::;;<<==nnooppqq__^^]]\\++**))(( + + >>??@@AArrssttuu[[ZZYYXX''&&%%$$BBCCDDEEvvwwxxyyWWVVUUTT##""!! FFGGHHIIzz{{||}}UUTTSSRRTTSSRRQQ %%&&''((YYZZ[[\\oonnmmll,,++**))##$$%%&&ffgghhii]]\\[[ZZ$$##""!! PQQRRSST}||{{zzyIHHGGFFE !!""##$TUUVVWWXyxxwwvvuEDDCCBBA $%%&&''(XYYZZ[[\uttssrrqA@@??>>= + + ())**++,\]]^^__`qppoonnm=<<;;::9 ,--..//0`aabbccdhggffee_%$$##""!"##$$%%&effgghhi^]]\\[[Z%$$##""!IIJJKKLL}}~~PPOONNMMMMNNOOPP~~}}LLKKJJII QQRRSSTT||{{zzyyHHGGFFEE!!""##$$UUVVWWXXxxwwvvuuDDCCBBAA %%&&''((YYZZ[[\\oonnmmll,,++**))YYZZ[[\\hggffeed,,++**)) ABBCCDDEuvvwwxxyXWWVVUUT$##""!! EFFGGHHIyzz{{||}TSSRRQQP IJJKKLLM}~~POONNMMLMNNOOPPQ~~}}|LKKJJIIH !QRRSSTTUwvvuutts98877665QRRSSTTUoonnmmll66554321 ::;;<<==nnooppqq__^^]]\\++**))(( + + >>??@@AArrssttuu[[ZZYYXX''&&%%$$BBCCDDEEvvwwxxyyWWVVUUTT##""!! FFGGHHIIzz{{||}}SSRRQQPPJJKKLLMM~~QQPPOONNPPOONNMM))**++,,]]^^__``kkjjiihh((''&&%%''(())**jjkkllmmYYXXWWVV  !!""##$TUUVVWWXyxxwwvvuEDDCCBBA $%%&&''(XYYZZ[[\uttssrrqA@@??>>= + + ())**++,\]]^^__`qppoonnm=<<;;::9 ,--..//0`aabbccdmllkkjji9887766501122334deeffggh_^^]]\\[! &''(())*ijjkkllmZYYXXWWV! MMNNOOPP~~}}LLKKJJII QQRRSSTT||{{zzyyHHGGFFEE!!""##$$UUVVWWXXxxwwvvuuDDCCBBAA %%&&''((YYZZ[[\\ttssrrqq@@??>>== + + ))**++,,]]^^__``kkjjiihh((''&&%% !!""]]^^__eecba`__^^((''&&%%EFFGGHHIyzz{{||}TSSRRQQP IJJKKLLM}~~POONNMMLMNNOOPPQ~~}}|LKKJJIIH !QRRSSTTU|{{zzyyxHGGFFEED!""##$$%UVVWWXXYsrrqqppo5//..--,UVVWWXXYkkjjiihh0//..--, + + >>??@@AArrssttuu[[ZZYYXX''&&%%$$BBCCDDEEvvwwxxyyWWVVUUTT##""!! FFGGHHIIzz{{||}}SSRRQQPPJJKKLLMM~~OONNMMLLNNOOPPQQ~~}}wwMMGGFFEEDDCCBBAAAABBCCDD}}|{zyxwBAA@@??> .//00112bccddeefkjjiihhg7665544323344556fgghhiijgffeeddc3221100/6778899:jkkllmmncbbaa``_/..--,,+ +:;;<<==>nooppqqrRQQPPOON @AABBCCDmllkkjji98877665 @AABBCCD@@??>>== + +EEFFGGMMwvvuutts>==<<;;:23344556fgghhiijgffeeddc3221100/6778899:jkkllmmncbbaa``_/..--,,+ +:;;<<==>nooppqqr_^^]]\\[+**))((' + >??@@AABrssttuuvNMMGGFFE + + +DEEFFGGMihhggffe54433221DEEFFGGH<<;;::99 NNOOPPQQsrrqqppo:99887766778899:jkkllmmncbbaa``_/..--,,+ +:;;<<==>nooppqqr_^^]]\\[+**))((' + >??@@AABrssttuuv[ZZYYXXW'&&%%$$#BCCDDEEFvwwxxyyzEDDCCBBA + MNNOOPPQeddccbba100//..-HIIJJKKL88776655RRSSTTUUonnmmllk65543210 +:;;<<==>nooppqqr_^^]]\\[+**))((' + >??@@AABrssttuuv[ZZYYXXW'&&%%$$#BCCDDEEFvwwxxyyzWVVUUTTS#""!! FGGHHIIJz{{||}}~A@@??>>=QRRSSTTUa``__^^]-,,++**)LMMNNOOP//..--,,VVWWXXYYkjjiihhg//..--,, + >??@@AABrssttuuv[ZZYYXXW'&&%%$$#BCCDDEEFvwwxxyyzWVVUUTTS#""!! FGGHHIIJz{{||}}~SRRQQPPOJKKLLMMN~xxw=<<;;::9UVVWWXXY]\\[[ZZY)((''&&% PQQRRSST++**))((ZZ[[\\]]gffeedcb++**))((BCCDDEEFvwwxxyyzWVVUUTTS#""!! FGGHHIIJz{{||}}~SRRQQPPOJKKLLMMN~ONNMMLLKNOOPPQQRwvvuutts98877665YZZ[[\\]YXXWWVVU%$$##""! !!""##$TUUVVWWX''&&%%$$ !!""##^^__eeffa`__^^]]''&&%%$$FGGHHIIJz{{||}}~SRRQQPPOJKKLLMMN~ONNMMLLKNOOPPQQR~~}}||{KJJIIHHG !!"RSSTTUUVsrrqqppo5//..--, !!""#]^^__eefUTTSSRRQ! $%%&&''(XYYZZ[[\##""!! $$%%&&''gghhiijj\\[[ZZYY##""!! JKKLLMMN~ONNMMLLKNOOPPQQR~~}}||{KJJIIHHG !!"RSSTTUUV{zzyyxxwGFFEEDDC"##$$%%&VWWXXYYZonnmmllk,++**))(#$$%%&&'fgghhiijQPPOONNM())**++,\]]^^__`(())**++kkllmmnnXXWWVVUUNOOPPQQR~~}}||{KJJIIHHG !!"RSSTTUUV{zzyyxxwGFFEEDDC"##$$%%&VWWXXYYZwvvuuttsCBBAA@@? &''(())*Z[[\\]]^kjjiihhg(''&&%%$'(())**+jkkllmmnMLLKKJJI,--..//0`aabbccd,,--..//ooppqqrrTTSSRRQQ !!"RSSTTUUV{zzyyxxwGFFEEDDC"##$$%%&VWWXXYYZwvvuuttsCBBAA@@? &''(())*Z[[\\]]^srrqqppo?>>==<<; + + *++,,--.^__``aabgffee__^$##""!! +,,--../nooppqqrIHHGGFFE01122334deeffggh55667788ssttuuvvPPOONNMM"##$$%%&VWWXXYYZwvvuuttsCBBAA@@? &''(())*Z[[\\]]^srrqqppo?>>==<<; + + *++,,--.^__``aabonnmmllk;::99887.//00112bccddeef^]]\\[[Z /5566778rssttuuuEDDCCBBA 45566778hiijjkkl 99::;;<>==<<; + + *++,,--.^__``aabonnmmllk;::99887.//00112bccddeefkjjiihhg7665544323344556fgghhiijZYYXXWWV899::;;>= + + 899::;;>??@@~~FEEDDCCB + + *++,,--.^__``aabonnmmllk;::99887.//00112bccddeefkjjiihhg7665544323344556fgghhiijgffeeddc3221100/6778899:jkkllmmnVUUTTSSR<==>>??@qppoonnm=<<;;::9 + + <==>>??@pqqrrssttuuZHAbے`JXQr˂p|ZdQbtlJ~HXnXv`HAZp˂J`ےtbdQZJbdQnvpfH~ˑZHAbے`JXQr˂pJtArd|ZdQfpvnXv`fHZp˂rXQJ`ۉbdQZ|drtJltnvpfH~ˑZHAbے`JXrbtlJtArd|ZdQ~HfpXv`bHAZpQJ`ےtbdQAJbdQH~f`vXnے`JXQr˂pZHAb|ZdQbtlJnXv`f~HfpvXQJ`ےbHAZdrtAJltbdQZ|H~f`vXnے`JXQr˂pZHAے|ZdQbtlJ~HXnXv`rXQJbHAZp|drbdQZ|vXnvpfH~fZHAbے`JXQlJtArd|f~HfpvnXv`˙bHAZp˂rXJltbdQZ|drtAvXnvpfHr˂pZHAbے`JXQlJtArd|vnXf~HbHbHAZpdrtAJdrtAvpfH~f`vXn`JXQr˂pZrd|ZdQbtlJtAXv`f~Hf˂rXQJ`ےbHAZdrtAJltbvpfH~f`HAbے`JXQr˂pZrd|ZdQbtے`JXQr˂pZHAbtlJtArdv`ff~HbHAbHAZp|drZ|dfH~f`vXے`JXQr˂pZHAۂ|ZdQbtlnXv`f~HfpvrXQJ`ےbHAdrtAJltbnvpfH~f`vXے`JXQr˂pJtAd|ZdQbtlvnXf~HbHbHAZpZ|dZ|d`vXnvpfr˂pZHAbے`JXQtlJtArdf~HfpvnXv`bHAZp˂rJltbdQZ|dtAJ`vXnvpfr˂pZHAb`JXQrtlJtArdv`ff~H`ےb˂rXQtAJldrtAvpfH~f`ZHAbے`JXQr˂pArd|ZdQbtfpvnXv`f~H˂rXQJ`ےbdQZ|drtAJltvpfH~f`ZHAbے`JXQr˂pArd|ZdQbtv`ffpvAZp˂˂㒉bdQZ|Jlt~f`vXnvpfH˂pZHAbےZdQbtlJtArdf~HfpvnJ`ےbHAZpdrtAJltbdQZ|~f`vXn`JXQr˂pZHAbےZdQbtlJtAr˂pZHAbے`JXQtArd|ZdQb~HfpXv`fZp˂˂btAJbdrtAJlf`vXnvpQr˂pZHAb`JXQbtlJtArdf~HfpvnrXQJ`bHAZp˂AJltbdQZ|fHf`vXnvpQr˂pZHAb|ZdQbtlJtArdv`ffpvAZp˂˂rtAJbrtAJlvpfH~fZHAbے`JXQr˂ptArd|ZdQbfpvnXv`fHfp˂rXQJ`ےbdQZ|drtAltbvpfH~fZHAbے`JXQbtltArd|ZdQb~HfpXv`fHAZp˂J`ےtbdQZJbdQ~f`vXn`JXQr˂pZHAbہZdQbtlJtnXv`f~HfpvQJ`ےbHAZpdrtAJltbdQZ|~f`vXn`JXQr˂pZHAے`ZdQbtlJt~HXnXv`ˉrXQJ`bHAZpˁdrtbdQZ|vXnvpfH~fZHAbے`JXQrlJtArd|~HfpvnXv`fbHAZp˂rXQltbdQZ|drtAJvXnvpfH˂pZHAbے`JXQrlJtArd|ZHAbے`JXQr˂p|ZdQbtlJvnX~HfrXQJ`HAZdQZ|dtbdQnvpfH~ˑZHAbے`JXrbtlJtArd|ZdQfpvnXv`ےHAZp˂rXQJ`ۉbdQZ|drtf`vXnvpfH~ˑZHAbے`JXbtlJtArd|ZdQ~HXnXv`prXQJ`bHAZddQZ|tbdQH~f`vXnے`JXQr˂pZHAے|ZdQbtlJnXv`f~HpvnXQJ`ےbHAZdrtAJltnvpH~f`vXnے`JXQr˂pJtAd|ZdQbtlJvnX~HfbHAbHAZp|drZ|dvXnvpfHr˂pZHAbے`JXQlJtArd|f~HfpvnXv`˙bHAZp˂rXJltbdQZ|dtAJlvXnvpfHr˂pZHAbہJXQrlJtArd|v`ff~HXےbHrXQAJltdrtAJvpfH~f`HAbے`JXQr˂pZrd|ZdQbtpvnXv`f~Hf˂rXQJ`ےdQZ|drtAJltbvpfH~f`HAbے`JXQr˂pZrd|ZdQbtv`fے`JXQr˂p|ZdQbtlJtArdv`fpvnےbHArtAJrtAJlZ|dnfH~f`vXے`JXQr˂pJtAd|ZdQbtlnXv`f~HZp˂rXQJ`ےbHAdrtAJltnvpfH~f`vXے`JXQr˂pJtArd|ZdQbtlv`fvnےbHrtAJdrtAJZ|AJ`vXnvpfr˂pZHAb`JXQrtlJtArdf~HfpvrXQJ`bHAZp˂rJltbdQZ|fHf`vXnvpfr˂pZHAb|ZdQbtlJtArdv`fpvnZp˂˂btAJbdrtAJlvpfH~f`ZHAbے`JXQr˂pArd|ZdQbtfpvnXv`fHfp˂rXQJ`ےbdQZ|drtAtbvpfH~f`ZHAbے`JXQbtlArd|ZdQbt~Hfpەv`fAZp˂J`ےbdQZ|bdQZ~f`vXn`JXQr˂pZHAbےZdQbtlJtAXv`f~HfpvnJ`ےbHAZpdrtAJltbdQZ|~f`vXn`JXQr˂pZHAے`ZdQbtlJtA~Hfpr˂pZHAbtlJtArd|ZdQb~HXvXv`pZp˂bdQZ|tbdvff`vXnvpQr˂pZHAb|ZdQbtlJtArdf~HfpvrXQJ`ےbHAZp˂AJltbdQZ|fH~f`vXnvpQr˂pZHAb|ZdQbtlJtArd~HfprXQJ`pAZp˂bdQZ|ltbltbvpfH~fZHAbے`JXQbtltArd|ZdQbfpvnXv`ےHAZp˂rXQJ`ےbdQZ|drtA`vXnvpfH~fZHAbے`JXQtlJtArd|ZdQb~HXvXv`prXQJ`HAZdQZ|dtbdQ~f`vXn`JXQr˂pZHAے`ZdQbtlJtnXv`f~HvnQJ`ےbHAZpdrtAJltnvp~f`vXn`JXQr˂pJtAd|ZdQbtlJtvnX~HfpbHAbHAZpˁdrt|drvXnvpfH˂pZHAbے`JXQrlJtArd|~HfpvnXv`fbHAZp˂rXQltbdQZ|dtAJlvXnvpfH˂pZHAbےJXQrblJtArd|vnXZHAbے`JXQtArd|ZdQbtlJ`f~˂rXQbHAZdrtAQZ|df`vXnvpfH~ˑZHAbے`JXbtlJtArd|ZdQfpvnXv`bHAZp˂rXQJ`ۉbdQZ|drtf`vXnvpfH~ˑZHAbے`JXbtlJtArdf~HvnX˂rXbHAdrtAdQZ|nvpH~f`vXnے`JXQr˂pJtAd|ZdQbtlJnXv`f~Hp˂rXQJ`ےbHAZdrtAJltvpfH~f`vXnے`JXQr˂ptArd|ZdQbtlJ`f~vnrےbHArtAJrtAJlZ|AJlvXnvpfHr˂pZHAbہJXQrlJtArd|f~HfpvrXQJ`ۙbHAZp˂rXJltbdQZ|fHf`vXnvpfHr˂pZHAbہZdQbtlJtArd|v`fvnXZp˂󂀉bHAJbdQtAJlvpfH~f`HAbے`JXQr˂pZrd|ZdQbtpvnXv`fHfp˂rXQJ`ےdQZ|drtAJtbnvpfH~f`HAbے`JXQrtlJrd|ZdQbtv`fے`JXQr˂p|ZdQbtlJtArdHfpvJ`ےp˂rJltrtAJnvpfH~f`vXے`JXQr˂pJtArd|ZdQbtlnXv`f~HZp˂rXQJ`ےbHAdrtAJltnvpfH~fZHAbے`JXQr˂pJtArd|ZdQXv`v`fQJ`ےZp˂JltdrtAJfHf`vXnvpfr˂pZHAb|ZdQbtlJtArdf~HfpvXQJ`ےbHAZp˂rJltbdQZ|H~f`vXnvpfr˂pZHAb|ZdQbtlJtArdHfpvXQJ`pZp˂bdQZ|tbdtbvpfH~f`ZHAbے`JXQbtlArd|ZdQbtfpvnXv`˒HAZp˂rXQJ`ےbdQZ|drtAvXnvpfH~f`ZHAbے`JXQlJtArd|ZdQbt~HXv`v`prXQJ`AZdZ|dtbdQZ~f`vXn`JXQr˂pZHAے`ZdQbtlJtAXv`f~HfvnrJ`ےbHAZpdrtAJltbvpf~f`vXn`JXQr˂pZtAd|ZdQbtlJtA~HXvr˂pZHAbtlJtArdf~HnXvbHAZpXQJ`ےbdQZ|bdQZ|fH~f`vXnvpQr˂pZHAb|ZdQbtlJtArdf~HfpvrXQJ`ےbHAZdrtAJltbdQZ|fH~f`vXے`JXQr˂pZHAb|ZdQbtlf~H~HXv`bHAZprXQJ`bdQZ|bdQZ|`vXnvpfH~fZHAbے`JXQtlJtArd|ZdQbfpvnXv`bHAZp˂rXQJ`ےbdQZ|drtA`vXnvpfH~fZHAbے`JXQtlJtArdf~HnXv˂rXQbHAZdrtAQZ|dnvp~f`vXn`JXQr˂pJtAd|ZdQbtlJtnXv`f~H˂rXQJ`ےbHAZpdrtAJltvpfH~f`vXn`JXQr˂pArd|ZdQbtlJtf~HvnrXbHArtAJbrtAJl|AJlvXnvpfH˂pZHAbےJXQrblJtArd|~HfpvnXQJ`ےbHAZp˂rXQltbdQZ|Hf`vXnvpfH˂pZHAbےZdQbtlJtArd|`f~ZHAbے`JXQtArd|ZdQbXv`f`f~˂bbHAZdrtAJdrtAf`vXnvpfH~ˑZHAbے`JXbtlJtArdf~HfpvnXv`bHAZp˂AJltbdQZ|drtf`vXnvpQr˂pZHAbے`JXbtlJtArdfpvf~H˂㒐bHAdrtAdrtvpfH~f`vXnے`JXQr˂ptArd|ZdQbtlJnXv`f~Hp˂rXQJ`ےbHAZdrtAJltvpfH~fZHAbے`JXQr˂ptArd|ZdQbXv`f`f~J`ےp˂rJltrtAJfHf`vXnvpfHr˂pZHAbہZdQbtlJtArd|f~HfpvQJ`ےbHAZp˂rXJltbdQZ|~f`vXnvpfHr˂pZHAbہZdQbtlJtArd˅fpvQJ`pZp˂dQZ|tbdQtbnvpfH~f`HAbے`JXQrtlJrd|ZdQbtpvnXv`fHAZp˂rXQJ`ےdQZ|drtAJvXnvpfH~f`HAbے`JXQrlJtArd|ZdQbtHfpvے`JXQr˂p|ZdQbtlJ~HfHXv`HAZp˂p˂bdQZJltnvpfH~fZHAbے`JXQr˂pJtArd|ZdQfpvnXv`f~HZp˂rXQJ`ۉbdQZ|drtAJltnvpfH~ˑZHAbے`JXQr˂pJtArd|ZdQnXv`˅fpvbHAZpZp˂JbdQAJltH~f`vXnvpfr˂pZHAb|ZdQbtlJtArdf~HfpvXQJ`ےbHAZdrtAJltbdQZ|H~f`vXnے`JXQr˂pZHAb|ZdQbtlJ~HfHXv`bHAZpXQJ`ےbdQZ|bdQZ|vXnvpfH~f`ZHAbے`JXQlJtArd|ZdQbtfpvnXv`˙bHAZp˂rXQJ`ےbdQZ|drtAvXnvpfH~fZHAbے`JXQlJtArd|f~HXnXv`rXQbHAZpdrtAJZ|dvpf~f`vXn`JXQr˂pZtAd|ZdQbtlJtAXv`f~Hf˂rXQJ`ےbHAZpdrtAJltbvpfH~f`vXn`JXQr˂pZrd|ZdQbtlJtAnXvr˂pZHAbtlJtArdpvnf~HrXQJbHAZp|drbdQZ|fH~f`vXے`JXQr˂pZHAb|ZdQbtlnXv`f~HfpvrXQJ`ےbHAdrtAJltbdQZ|fH~f`vXے`JXQr˂pZHAۂ|ZdQbtlf~HXnXv`rXQbHAZpZ|dbdQZ|`vXnvpfH~fZHAbے`JXQtlJtArdf~HfpvnXv`bHAZp˂rJltbdQZ|drtA`vXnvpfr˂pZHAbے`JXQtlJtArdpvnf~H˂bbHAZdrtAJdrtAvpfH~f`vXn`JXQr˂pArd|ZdQbtlJtnXv`f~H˂rXQJ`ےbHAZdrtAJltvpfH~f`ZHAbے`JXQr˂pArd|ZdQbtv`ff~HJ`ے˂rXltbrtAJHf`vXnvpfH˂pZHAbےZdQbtlJtArd|~HfpvnJ`ےbHAZp˂rXQltbdQZ|~f`vXnvpfH˂pZHAbےZdQbtlJtArdf`f~ZHAbے`JXQtArd|ZdQbXv`ffpv`ےb˂rXQtAJldrtAf`vXnvpQr˂pZHAbے`JXbtlJtArdf~HfpvnXv`bHAZp˂AJltbdQZ|dtAf`vXnvpQr˂pZHAb`JXQbtlJtArdv`ff~HJ`ے˂rXrtAJldrtvpfH~fZHAbے`JXQr˂ptArd|ZdQbfpvnXv`f~Hp˂rXQJ`ےbdQZ|drtAJltvpfH~fZHAbے`JXQr˂ptArd|ZdQbXv`ffpvHAZp˂p˂bdQZJlt~f`vXnvpfHr˂pZHAbہZdQbtlJtArdf~HfpvQJ`ےbHAZpdrtAJltbdQZ|~f`vXn`JXQr˂pZHAbہZdQbtlJt~HfpXv`bHAZpQJ`ےdQZ|bdQZ|vXnvpfH~f`HAbے`JXQrlJtArd|ZdQbtpvnXv`fbHAZp˂rXQJ`ےdQZ|drtAJvXnvpfH~fZHAbے`JXQrlJtArd|~HXHXv`f~HnrXQbHAZtAJbdrtAJl灂AJlvXnvpfH˂pZHAbے`JXQrbtlJtArd|~HfpvnXQJ`ےbHAZp˂rXQtbdQZ|df`vXnvpfHpZHAJXQrAHr󙐂XnvˍpfH~QtJltbAdZfpvJ`p˂p˂QZ|dtbdQtbnvpfH~f`Abے`JXQrlJtrd|ZdQbtvnXv`fHAZp˂rXQJ`ےQZ|drtAJlvXnvpfH~f`b˂p˂p`Zˁ`ZQXApfH~ㅐf۝`vtbAdZ|drnXv`rXQJbHAZprtAJlZ|dvpfH~f`vXnہJXQr˂pZHAd|ZdQbtlJtAv`f~HfprXQJ`ےbHAZp˙rtAJltbdvpfH~f`vXnۑZHAbQXb㉀Hr󙐂ˁf۝`vXnvˍ|drQtJlf~H`ےb˂rXQtbdrtAJbf`vXnvpfH˂pZHAbے`ZdQbtlJtArd|~HfpvnXJ`ےbHAZp˂rXQtbdQZ|d~f`vXnvpfHے`JXۑpJAHr`ZQXbXnvˍpfH~QtJltbAdZXv`fHAZp˂J`ےQZ|ddQZ|vXnvpfH~f`Abے`JXQrlJtArd|ZdQbtvnXv`fbHAZp˂rXQJ`ےQZ|drtAJlvXnvpfH~frQr˂p󙐂ˁ`ZۑpJApfH~ㅐf۝`vtbAdZ|dr~HfbHAbHAZprtAJdrtAJvpfH~f`vXnہJXQr˂pZHrd|ZdQbtlJtAv`f~HfprXQJ`ےbHAZdrtAJltbdvpfH~f`˂pZHZHAbQXAHrHr󙐂ˁf۝`vXnvˍ|drQtJlpvnZp˂˂bbdQZ|ltb~f`vXnvpfH˂pZHAbے`ZdQbtlJtArdf~HfpvnXJ`ےbHAZp˙rtAJltbdQZ|d~f`vXnAbے`˂pˁ`ZQ`ZQXAHrXnvˍpfH~QtJltbAdZXv`frXQJ`HAZp˂drtAdQZ|vXnvpfH~fZHAbے`JXQrlJtArd|~HfpvnXv`fbHAZp˂rXQtbdQZ|drtAJlvXnvpfHJXQrZHAbXb㉀ۑ󙐂ˁ`ZpfH~ㅐf۝`vtbAdZ|dr~HXےbHArXQJJltdrtAJvpfH~f`Abے`JXQr˂pZHrd|ZdQbtvnXv`f~HfprXQJ`ےQZ|drtAJltbdvpfH~f`˂pZH`JXQpJAHrQXb㉀f۝`vXnvˍ|drQtJlv`fZp˂`ےbbdQZ|bdQZ|~f`vXnہJXQr˂pZHAbے`ZdQbtlJtAv`f~HfpvnXJ`ےbHAZp˙rtAJltbdQZ|d~f`vXnAbr˂pˁ`ZQۑpJAHrXnvˍpfH~QtJltbAdZ~HfpbHAZHAZp˂drtAdrtvXnvpfH˂pZHAbے`JXQrlJtArd|~HfpvnXv`fbHAZp˂rXQtbdQZ|dtAJlvXnvpfHpZHAZHAbXAHr󙐂󙐂ˁ`pfH~ㅐf۝`vtbAdZ|drvnXp˂rbHAJbdQAJltvpfH~f`Abے`JXQr˂pZHrd|ZdQbtvnXv`fHfpۂrXQJ`ےQZ|drtAJltbnvpfH~f`bے`˂pZHˁ`ZQXbpfH~ㅐf۝`vXnvˍ|drQtJlv`pvXQJ`ےZdrZ|dbdQZ|~f`vXnہJXQr˂pZHAے`ZdQbtlJtAv`f~HfpvnrXJ`ےbHAZp˙rtAJltbdvpfH~f`vXnJXQrAbے`㉀ۑpJf۝`vXnvˍp|drQtJltbAdZ|yz{|}~~}|{z \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv28_2.dat b/vendor/endroid/qr-code/assets/data/qrv28_2.dat new file mode 100644 index 000000000..5122e09dd --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv28_2.dat @@ -0,0 +1,257 @@ +~}~}~}~}zyzyzyzyxwxwxwxwststststqrqrqrqropopopopmlklklklijijijijghghghghefefefefabababab^]^]^]^]\[\[\[\[ZYZYZYZY~}~}~}~}zyzyzyzyxwxwxwxwststststqrqrqrqropopopopklklklklijijijijghghghghefefefefabababab^]^]^]^]\[\[\[\[ZYZYZYZY~}~}~}~}zyzyzyzyxwxwxwxwststststqrqrqrqropopopopklklklklijijijijghghghghedcdcdcdabababab^]^]^]^]\[\[\[\[ZYZYZYZY~}~}~}~}zyzyzyzyxwxwxwxwststststqrqrqrqropopopopklklklklijijijijghghghghcdcdcdcdabababab^]^]^]^]\[\[\[\[ZYZYZYZY~}~}~}~}zyzyzyzywwwwwxwxststststqrqrqrqropopopopklklklklijijijijghghghghcdcdcdcdabababab^]^]^]^]\[\[\[\[ZYZYZYZY~}~}~}~}zyzyzyzywxwxwxwxststststqrqrqrqropopopopklklklklijijijijghghghghcdcdcdcdabababab^]^]^]^]\[\[\[\[ZYZYZYZY~}~}~}~}zyzyzyzywxwxwxwxststststqrqrqrqropopopopklklklklijijijijghghghghcdcdcdcdabababab^]^]^]^]\[\[\[\[ZYZYZYZY~}~}~}~}zyzyzyzywxwxwxwxststststqrqrqrqropopopopklklklklijijijijghghghghcdcdcdcdabababab^]^]^]^]\[\[\[\[ZYZYZYZY~}~}~}~}zyzyzyzywxwxwxwuststststqrqrqrqropopopopklklklklijijijijghghghghcdcdcdcdabababab^]^]^]^]\[\[\[\[XWXWXWXW~}~}~}~}zyzyzyzyuuuuuvuvststststqrqrqrqropopopopklklklklijijijijghghghghcdcdcdcdababa`_`^]^]^]^]\[\[\[\[XWXWXWXW~}~}~}~}zyzyzyzyuvuvuvuvststststqrqrqrqronmnmnmnklklklklijijijijghghghghcdcdcdcd_`_`____^]^]^]^]\[\[\[\[XWXWXWXW~}~}~}~}zyzyzyzyuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijghghghghcdcdcdcd__`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVU~}~}~}~}zyzyzyzyuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijgfefefefcdcdcdcd`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVU~}~}~}~}zyzyzyzyuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijefefefefcdcdcdcd`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVU~}~}~}~}zyzyzyzyuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijefefefefcdcdcdcd`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVU~}~}~}~}zyzyzyzyuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijefefefefcdcdcdcd`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVU~}~}~}~}zyzyzyzyuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijefefefefcdcdcdcd_____`_`^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVU~}~}~}~}zyzyzyzyuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijefefefefcdcdcdcd_`_`_`_`^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVU|{|{|{|{zyzyzyzyuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijefefefefcdcdcdcd_`_`_`_`^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVU|{|{|{|{zyzyzyzyuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijefefefefcdcdcdcd_`_`_`_`^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVU|{|{|{|{zyzyzyzyuvuvuvuvststststqpopopopmnmnmnmnklklklklijijijijefefefefcdcdcdcd_`_`_`_`^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVU|{|{|{|{zyzyzyzyuvuvuvuvststststopopopopmnmnmnmnklklklklijijijijefefefefcdcdcdcd_`______^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVU|{|{|{|{zyzyzyzyuvuvuvuvststststopopopopmnmnmnmnklklklklihghghghefefefefcdcdcdcd`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVU|{|{|{|{zyzyxwxwuvuvuvuvststststopopopopmnmnmnmnklklklklghghghghefefefefcdcdcdcd`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVU|{|{|{|{xwxwwwwwuvuvuvuvststststopopopopmnmnmnmnklklklklghghghghefefefefcdcdcdcd`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVU|{|{|{|{wxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklghghghghefefefefcdcdcdcd`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVU|{|{|{|{wxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklghghghghefefefefcdcdcdcb`_`_`___^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVU|{|{|{|{wxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklghghghghefefefefabababab___`_`_`^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVU|{|{|{|{wxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklghghghghefefefefabababab_`_`_`_`\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVU|{|{|{|{wxwxwxwwuvuvuvuvststststopopopopmnmnmnmnklklklklghghghghefefefefabababab_`_`_`_`\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVU~}~}~}~}|{|{|{|{wwwwxwxwuvuvuvuvsrqrqrqropopopopmnmnmnmnklklklklghghghghefefefefabababab_`_`_`_`\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVU~}~}~}~}|{|{|{|{xwxwxwxwuvuvuvuvqrqrqrqropopopopmnmnmnmnklklklklghghghghefefefefabababab_`_`_`_`\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVU~}~}~}~}|{|{|{|{xwxwxwxwuvuvuvuvqrqrqrqropopopopmnmnmnmnkjijijijghghghghefefefefabababab______`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVU~}~}~}~}|{|{|{|{xwxwxwxwuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijghghghghefefefefabababab`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVU~}~}~}~}|{|{|{|{xwxwxwxwuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijghghghghefefefefabababab`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVU~}~}~}~}|{|{|{|{xwwwwwwxuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijghghghghefefefefabababab`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVU~}~}~}~}|{|{|{|{wxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijghghghghefefefefabababab`_`_____\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVU~}~}~}~}|{|{|{|{wxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijghghghghefefefefabababab`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVU~}~}~}~}|{|{|{|{wxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijghghghghefefefefabababab^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVU~}~}~}~}|{|{|{|{wxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijghghghghefefefefabababab^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVU~}~}~}~}|{|{|{|{wxwxwwwwutstststqrqrqrqropopopopmnmnmnmnijijijijghghghghefefefefabababab^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUVUVUVUVU~}~}~}~}|{|{|{zywwxwxwxwststststqrqrqrqropopopopmnmnmnmnijijijijghghghghefefefefabababab^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:56565656343434340/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +TSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:56565656343434340/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +TSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:56565656343434340/0/0///.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +TSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:5656565634343434///0/0/0.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +TSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:5656565634343434/0/0/0/0.-.-.-.-,+,+,+*)('('('('&%&%&%&%$#$#$#$#       + + + +TSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:5656565634343434/0/0/0/0.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#     + + + +TSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIEFEFEFEFCDCDCDCDABABABA@=>=>=>=>;<;<;<;<9:9:9:9:5656565634343434/0/0/0/0.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#"!     + + + +TSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:5656565634343434/0/0/0/0.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +TSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIHGHGEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:985656565634343434//////0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +TSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKHGHGGGGGEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +TSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +TSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +TSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +TSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656343432120/0/////.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +TSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKGHGHGHGGEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<787878785656565612121212/0/0/0/0.-.-.-,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!      + + + +TSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKGGGGHGHGEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<787878785656565612121212/0/0/0/0,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +TSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGEFEFEFEFCDCDCDCB?@?@?@?@=>=>=>=>;<;<;<;<787878785656565612121212/0/0/0/0,+,+,+,+*)*)*)*)('('('('&%&%&%$#"!"!"!"!         + + + +TSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGEFEFEFEFABABABAB?@?@?@?@=>=>=>=>;<;<;<;<787878785656565612121212/0/0/0/0,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +TSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGEFEFEFEFABABABAB?@?@?@?@=>=>=>=>;<;<;<;:787878785656565612121212/0/0/0//,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +TSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:787878785656565612121212////0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +TSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGGGGGGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787856565656121212120/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +TSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787856565656121212120/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +TSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787856565656121212120/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +TSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787856565656121212120/////0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +TSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787856565656121212120/0/0/.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +TSTSTSTSPOPOPOPONMNMNMNMLKLKLKJIGHGHGGGGEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:787878785656565612121212.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +TSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIGGHGHGHGEFEFEFEDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:787878785656565612121212.-.-.-.-,+,+,+,+*)*)*)*)('('('&%$#$#$#$#"!"!"!"!         + + TSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:787878785656565612121212.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!         TSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGCDCDCDCDABABABAB?@?@?@?@=>=>=>=<9:9:9:9:787878785656565612121212.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!        TSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:787878785656565612121212.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     TSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:787878785656565412121212.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     RQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIGGGGGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:787878783434343412121212.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     RQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:787878783434343412121212.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     RQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:787878783434343412121212.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     RQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:787878783434343412121212.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     RQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIGHGGGGGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:787878783434343412121212.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     RQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIGHGHGHGFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:787878783434343412121212.-.-.-.-,+,+,+,+*)*)*)('&%&%&%&%$#$#$#$#"!"!"!"!     + +RQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:787878783434343412121212.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +RQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIEFEFEFEFCDCDCDCDABABABAB?@?@?@?>;<;<;<;<9:9:9:9:78787878343434341210/0/0.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!      + + + +RQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:7878787834343434/0//////.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +RQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:78787876343434340/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +RQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:56565656343434340/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +~~}}99::;;<< + + ,,++**))yxxwwvvu01122334)((''&&%~~}())**++,100//..-xyyzz{{|PQQRRSSTHHGGFFEEaabbccdd||{{zzyy==>>??@@((''&&%%uttssrrq45566778%$$##""!}||{{zzy,--..//0-,,++**)|}}~~TUUVVWWXDDCCBBAAeeffgghhxxwwvvuuAABBCCDD$$##""!!qppoonnm899::;;>==iijjkkllttssrrqqEEFFGGHH mllkkjji<==>>??@uttssrrq45566778%$$##""!}wwvvuut\]]^^__e <<;;::99mmnnooppppoonnmmIIJJKKLL !!""ihhggffe@AABBCCDqppoonnm899::;;>??@poonnmmlijjkkllm%%&&''((44332211uuvvwwxxhhggffeeQQRRSSTT''(())**a``__^^]HIIJJKKL ihhggffe@AABBCCDlkkjjiihmnnooppq))**++,,00//..--yyzz{{||ddccbbaaUUVVWWXX++,,--.. +]\\[[ZZYLMMNNOOP + + eddccbbaDEEFFGGHhggffee_qrrssttu--..//00,,++**))}}~~``__^^]]YYZZ[[\\//556677 + YXXWWVVUPQQRRSST a``__^^]HIIJJKKL _^^]]\\[uvvww}}~11223344((''&&%%~~}}\\[[ZZYY]]^^__``8899::;;UTTSSRRQTUUVVWWX]\\[[ZZYLMMNNOOP + + [ZZYYXXW~55667788$$##""!!||{{zzyyXXWWVVUUaabbccdd<<==>>?? + + QPPOONNMXYYZZ[[\YXXWWVVUPQQRRSST WVVUUTTS~~}}|{z99::;;<< xxwwvvuuTTSSRRQQeeffgghh@@AABBCC MLLKKJJI\]]^^__`UTTSSRRQTUUVVWWXSRRQQPPOyxwwvvuu==>>??@@ttssrrqq + + PPOONNMMiijjkkllDDEEFFGGIHHGGFFE`aabbccd + + QPPOONNMXYYZZ[[\ONNMMGGFttssrrqqAABBCCDDppoonnmm LLKKJJIImmnnooppMMNNOOPPEDDCCBBAdeeffggh MLLKKJJI\]]^^__`FEEDDCCBppoonnmmEEFFGGHHllkkjjiiHHGGFFEEqqrrssttQQRRSSTTA@@??>>=hiijjkklIHHGGFFE`aabbccd + + BAA@@??>llkkjjiiIIJJKKLL hhggffeeDDCCBBAAuuvvwwxxUUVVWWXX =<<;;::9lmmnnoopEDDCCBBAdeeffggh >==<<;;:hhggffeeMMNNOOPP + + ddccbbaa@@??>>==yyzz{{||YYZZ[[\\ !!""##$98877665pqqrrsstA@@??>>=hiijjkkl:9988776dcba`__^QQRRSSTT``__^^]] <<;;::99}}~~]]^^__ee$%%&&''(54433221tuuvvwwx =<<;;::9lmmnnoop655//..-^]]\\[[ZUUVVWWXX\\[[ZZYY!!""##$$88776655~~}}ffgghhii())**++,100//..-xyyzz{{| !!""##$98877665pqqrrsst-,,++**)ZYYXXWWVYYZZ[[\\XXWWVVUU%%&&''((44332211wwvvuuttjjkkllmm,--..//0-,,++**)|}}~~$%%&&''(54433221tuuvvwwx )((''&&%VUUTTSSR]]^^__``TTSSRRQQ))**++,,00//..--ssrrqqppnnooppqq01122334)((''&&%~~}())**++,100//..-xyyzz{{| !!""##$%$$##""!RQQPPOONaabbccdd + + PPOONNMM--..//00,,++**))oonnmmllrrssttuu45566778%$$##""!}||{{zzy,--..//0-,,++**)|}}~~$%%&&''(! NMMLKJIHeeffgghh LLKKJJII11223344((''&&%%kkjjiihhvvww}}~~899::;;>??@uttssrrq45566778%$$##""!}||{{zzy,--..//0CCBBAA@@mmnnooppDDCCBBAA99::;;<< ^^]]\\[[~~}}|{zy@AABBCCDqppoonnm899::;;>==<>====>>??@@ZZYYXXWWxwwvvuutDEEFFGGHmllkkjji<==>>??@uttssrrq45566778 + + ;;::9988uuvvwwxx <<;;::99AABBCCDDVVUUTTSStssrrqqpHIIJJKKL ihhggffe@AABBCCDqppoonnm899::;;<77665543yyzz{{||!!""##$$88776655EEFFGGHHRRQQPPOOpoonnmmlLMMNNOOP + + eddccbbaDEEFFGGHmllkkjji<==>>??@ 210//..-}}~~%%&&''((44332211IIJJKKLL NNMMGGFFlkkjjiihPQQRRSST a``__^^]HIIJJKKL ihhggffe@AABBCCD + + -,,++**)~~}}))**++,,00//..--MMNNOOPP + + EEDDCCBBhggffeedTUUVVWWX]\\[[ZZYLMMNNOOP + + eddccbbaDEEFFGGH )((''&&%||{{zzyy--..//00,,++**))QQRRSSTT + + AA@@??>>cba`__^^XYYZZ[[\YXXWWVVUPQQRRSST a``__^^]HIIJJKKL%$$##""!xxwwvvuu11223344((''&&%%UUVVWWXX ==<<;;::]]\\[[ZZ\]]^^__`UTTSSRRQTUUVVWWX]\\[[ZZYLMMNNOOP! ttssrrqq55667788$$##""!!YYZZ[[\\99887766YYXXWWVV`aabbccd + + QPPOONNMXYYZZ[[\YXXWWVVUPQQRRSST !!"ppoonnmm99::;;<< ]]^^__``55//..--UUTTSSRRdeeffggh MLLKKJJI\]]^^__`UTTSSRRQTUUVVWWX"##$$%%&llkkjjii==>>??@@aabbccdd,,++**))QQPPOONNhiijjkklIHHGGFFE`aabbccd + + QPPOONNMXYYZZ[[\&''(())*hhggffeeAABBCCDDeeffgghh ((''&&%%MMLKJIHGlmmnnoopEDDCCBBAdeeffggh MLLKKJJI\]]^^__`*++,,--. ddccbbaaEEFFGGHHiijjkkll!!""##$$$$##""!!GFFEEDDCpqqrrsstA@@??>>=hiijjkklIHHGGFFE`aabbccd.//55667 + + ``__^^]]IIJJKKLL mmnnoopp%%&&''(( CBBAA@@?tuuvvwwx =<<;;::9lmmnnoopEDDCCBBAdeeffggh78899::;\\[[ZZYYMMNNOOPP + + qqrrsstt))**++,,?>>==<<;xyyzz{{| !!""##$98877665pqqrrsstA@@??>>=hiijjkkl;<<==>>?XXWWVVUUQQRRSSTTuuvvwwxx--..//00;::99887|}}~~$%%&&''(54433221tuuvvwwx =<<;;::9lmmnnoop?@@AABBCTTSSRRQQUUVVWWXXyyzz{{||11223344 76655432~~}())**++,100//..-xyyzz{{| !!""##$98877665pqqrrsstCDDEEFFG + + PPOONNMMYYZZ[[\\}}~~55667788 + + 10//..--}||{{zzy,--..//0-,,++**)|}}~~$%%&&''(54433221tuuvvwwxGMMNNOOP LLKKJJII]]^^__``~~}}||{{zzyy--..//00,,++**))}}~~UUVVWWXXDCCBBAA@effgghhi LKKJJIIH]^^__``a EDDCCBBAoonnmmllFFGGHHIIkkjjiihh>>??@@AAssrrqqpp66778899 + + :9988776vwwxxyyz !!";::99887nooppqqr,++**))(EDDCCBBAxxwwvvuu11223344((''&&%%~~}}YYZZ[[\\@??>>==>=kkjjiihhJJKKLLMM ggffeeddBBCCDDEEoonnmmll::;;<<==65543210z{{||}}~"##$$%%&76655443rssttuuv(''&&%%$A@@??>>=ttssrrqq55667788$$##""!!wwvvuutt]]^^__ee !<;;::998mnnooppqDCCBBAA@effgghhi =<<;;::9ggffeedcNNOOPPQQ + + ccbbaa``FFGGHHIIkkjjiihh>>??@@AA + +//..--,,~&''(())*3221100/vwwxxyyz !!"$##""!! =<<;;::9ppoonnmm99::;;<< ssrrqqppffgghhii!""##$$%87766554qrrssttu@??>>==>??@@oonnmmlljjkkllmm%&&''(()43322110uvvwwxxy !<;;::998mnnooppq5//..--,]\\[[ZZYVVWWXXYY[[ZZYYXXNNOOPPQQ + + ccbbaa``FFGGHHII''&&%%$${zzyyxxw.//00112+**))(('~&''(())*54433221hhggffeeAABBCCDDkkjjiihhnnooppqq)**++,,-0//..--,yzz{{||}!""##$$%87766554qrrssttu,++**))(YXXWWVVUZZ[[\\]]WWVVUUTTRRSSTTUU__^^]]\\JJKKLLMM##""!! wvvuutts23344556'&&%%$$#~~}}||{*++,,--.100//..-ddccbbaaEEFFGGHHggffee__rrssttuu-..//001,++**))(}~~%&&''(()43322110uvvwwxxy !(''&&%%$UTTSSRRQ^^__``aa SSRRQQPPVVWWXXYY[[ZZYYXXNNOOPPQQsrrqqppo6778899:#""!! {zzyyxxw.//00112 -,,++**)``__^^]]IIJJKKLL ^^]]\\[[vvww}}~~12233445(''&&%%$~~}}|)**++,,-0//..--,yzz{{||}!""##$$%$##""!! QPPOONNMbbccddee + + OONNMMLLZZ[[\\]]WWVVUUTTRRSSTTUU !!""##onnmmllk:;;<<==>wvvuutts23344556 + + +)((''&&%\\[[ZZYYMMNNOOPP + + ZZYYXXWW56677889$##""!! |{{zzyyx-..//001,++**))(}~~%&&''(() MLKJIHGGffgghhiiKKJJIIHH^^__``aa SSRRQQPPVVWWXXYY$$%%&&''kjjiihhg>??@@AABsrrqqppo6778899: + %$$##""!XXWWVVUUQQRRSSTTVVUUTTSS~~}}|{zy9::;;<<= xwwvvuut12233445(''&&%%$~~}}|)**++,,-FFEEDDCCjjkkllmmGGFFEEDDbbccddee + + OONNMMLLZZ[[\\]](())**++ gffeeddcBCCDDEEFonnmmllk:;;<<==>! TTSSRRQQUUVVWWXXRRQQPPOOxwwvvuut=>>??@@Atssrrqqp56677889$##""!! |{{zzyyx-..//001BBAA@@??nnooppqqCCBBAA@@ffgghhiiKKJJIIHH^^__``aa,,--..// + + cbbaa``_FGGHHIIJkjjiihhg>??@@AABPPOONNMMYYZZ[[\\NNMMGGFFtssrrqqpABBCCDDEpoonnmml9::;;<<= xwwvvuut12233445 >>==<<;;rrssttuu??>>==<>??@@Atssrrqqp56677889 + + ::998877vvwwxxyy !!;;::9988nnooppqqCCBBAA@@ffgghhii99::;;<<[ZZYYXXWNOOPPQQR + + cbbaa``_FGGHHIIJ !!""#HHGGFFEEaabbccdd + + AA@@??>>lkkjjiihIJJKKLLM hggffeedABBCCDDEpoonnmml9::;;<<=66554321zz{{||}}""##$$%%77665544rrssttuu??>>==<>??@@WVVUUTTSRSSTTUUV_^^]]\\[JKKLLMMN#$$%%&&' DDCCBBAAeeffgghh ==<<;;::hggffeedMNNOOPPQ + + dccbbaa`EFFGGHHIlkkjjiih=>>??@@A +0//..--,~~&&''(())33221100vvwwxxyy !!;;::9988nnooppqqAABBCCDD +SRRQQPPOVWWXXYYZ[ZZYYXXWNOOPPQQR'(())**+ + + @@??>>==iijjkkll99887766cba`__^^QRRSSTTU`__^^]]\IJJKKLLM hggffeedABBCCDDE + ,++**))(~~}}||**++,,--//..--,,zz{{||}}""##$$%%77665544rrssttuuEEFFGGMM + ONNMMLLKZ[[\\]]^WVVUUTTSRSSTTUUV+,,--../ + + <<;;::99mmnnoopp55//..--]]\\[[ZZUVVWWXXY\[[ZZYYXMNNOOPPQ + + dccbbaa`EFFGGHHI(''&&%%${{zzyyxx..//0011++**))((~~&&''(())33221100vvwwxxyyNNOOPPQQKJJIIHHG^__``aab +SRRQQPPOVWWXXYYZ/5566778 88776655qqrrsstt,,++**))YYXXWWVVYZZ[[\\]XWWVVUUTQRRSSTTU`__^^]]\IJJKKLLM$##""!! wwvvuutt22334455''&&%%$$~~}}||**++,,--//..--,,zz{{||}}RRSSTTUUGFFEEDDCbccddeef + ONNMMLLKZ[[\\]]^899::;;<44332211uuvvwwxx ((''&&%%UUTTSSRR]^^__``a TSSRRQQPUVVWWXXY\[[ZZYYXMNNOOPPQ ssrrqqpp66778899##""!! {{zzyyxx..//0011++**))((~~VVWWXXYYCBBAA@@?fgghhiijKJJIIHHG^__``aab<==>>??@00//..--yyzz{{||!!""##$$$$##""!!QQPPOONNabbccdde + + POONNMMLYZZ[[\\]XWWVVUUTQRRSSTTU !!""#oonnmmll::;;<<==wwvvuutt22334455''&&%%$$~~}}wwZZ[[\\]]?>>==<<;jkkllmmnGFFEEDDCbccddeef@AABBCCD,,++**))}}~~%%&&''(( MMLKJIHGeffgghhi LKKJJIIH]^^__``a TSSRRQQPUVVWWXXY#$$%%&&'kkjjiihh>>??@@AAssrrqqpp66778899##""!! vvuuttss^^__eeff !!";::99887nooppqqrCBBAA@@?fgghhiijDEEFFGGM ((''&&%%~~}}))**++,,GFFEEDDCijjkkllmHGGFFEEDabbccdde + + POONNMMLYZZ[[\\]'(())**+ggffeeddBBCCDDEEoonnmmll::;;<<==rrqqppoogghhiijj"##$$%%&76655443rssttuuv?>>==<<;jkkllmmnMNNOOPPQ !!""##$$$##""!!||{{zzyy--..//00CBBAA@@?mnnooppqDCCBBAA@effgghhi LKKJJIIH]^^__``a+,,--../ + +ccbbaa``FFGGHHIIkkjjiihh>>??@@AAnnmmllkkkkllmmnn&''(())*3221100/vwwxxyyz !!";::99887nooppqqrQRRSSTTU$%%&&''( xxwwvvuu11223344 ?>>==<<;qrrssttu@??>>==>==>??@WWVVUUTTRRSSTTUU__^^]]\\JJKKLLMM ]]\\[[ZZww}}~~23344556'&&%%$$#~~}}||{*++,,--./..--,,+z{{||}}~]^^__eef01122334llkkjjii==>>??@@ 10//..--}~~%&&''(()43322110uvvwwxxy !<;;::998mnnooppq@AABBCCD SSRRQQPPVVWWXXYY[[ZZYYXXNNOOPPQQ + + YYXXWWVV~~6778899:#""!! {zzyyxxw.//00112+**))(('~xxwfgghhiij45566778 hhggffeeAABBCCDD + + ,,++**))~~}}|)**++,,-0//..--,yzz{{||}!""##$$%87766554qrrssttuDEEFFGGM + + OONNMMLLZZ[[\\]]WWVVUUTTRRSSTTUUUUTTSSRR}}|{zyxw:;;<<==>wvvuutts23344556'&&%%$$#wvvuuttsjkkllmmn899::;;< + + ddccbbaaEEFFGGHH((''&&%%|{{zzyyx-..//001,++**))(}~~%&&''(()43322110uvvwwxxyMNNOOPPQKKJJIIHH^^__``aa SSRRQQPPVVWWXXYYQQPPOONNwvvuutts>??@@AABsrrqqppo6778899:#""!! srrqqpponooppqqr<==>>??@``__^^]]IIJJKKLL$$##""!!xwwvvuut12233445(''&&%%$~~}}|)**++,,-0//..--,yzz{{||}QRRSSTTUGGFFEEDDbbccddee + + OONNMMLLZZ[[\\]]MMGGFFEEsrrqqppoBCCDDEEFonnmmllk:;;<<==>onnmmllkrssttuuu@AABBCCD\\[[ZZYYMMNNOOPP tssrrqqp56677889$##""!! |{{zzyyx-..//001,++**))(}~~UVVWWXXYCCBBAA@@ffgghhiiKKJJIIHH^^__``aa DDCCBBAAonnmmllkFGGHHIIJkjjiihhg>??@@AABkjjiihhguttssrrqDEEFFGGHXXWWVVUUQQRRSSTT !!""poonnmml9::;;<<= xwwvvuut12233445(''&&%%$~~}}wYZZ[[\\]??>>==<>==kjjiihhgJKKLLMMN gffeeddcBCCDDEEFgffee__^qppoonnmHIIJJKKLTTSSRRQQUUVVWWXX##$$%%&&lkkjjiih=>>??@@Atssrrqqp56677889$##""!! wvvuutts]^^__eef !!;;::9988nnooppqqCCBBAA@@ffgghhii<<;;::99gffeedcbNOOPPQQR + + cbbaa``_FGGHHIIJ^]]\\[[ZmllkkjjiLMMNNOOP + + PPOONNMMYYZZ[[\\''(())**hggffeedABBCCDDEpoonnmml9::;;<<= srrqqppofgghhiij""##$$%%77665544rrssttuu??>>==<>??@@Aonnmmllkjkkllmmn&&''(())33221100vvwwxxyy !!;;::9988nnooppqq//..--,,\\[[ZZYYVWWXXYYZ[ZZYYXXWNOOPPQQR + + VUUTTSSReddccbbaTUUVVWWXHHGGFFEEaabbccdd//556677 + `__^^]]\IJJKKLLM hggffeedABBCCDDEkjjiihhgnooppqqr**++,,--//..--,,zz{{||}}""##$$%%77665544rrssttuu++**))((XXWWVVUUZ[[\\]]^WVVUUTTSRSSTTUUVRQQPPOONa``__^^]XYYZZ[[\DDCCBBAAeeffgghh8899::;;\[[ZZYYXMNNOOPPQ + + dccbbaa`EFFGGHHIgffee__^rssttuuv..//0011++**))((~~&&''(())33221100vvwwxxyy !!''&&%%$$TTSSRRQQ^__``aab +SRRQQPPOVWWXXYYZNMMGGFFE]\\[[ZZY\]]^^__`@@??>>==iijjkkll<<==>>??XWWVVUUTQRRSSTTU`__^^]]\IJJKKLLM ^]]\\[[Zvww}}~~22334455''&&%%$$~~}}||**++,,--//..--,,zz{{||}}""##$$%%##""!! PPOONNMMbccddeef + ONNMMLLKZ[[\\]]^EDDCCBBAYXXWWVVU`aabbccd <<;;::99mmnnoopp@@AABBCC TSSRRQQPUVVWWXXY\[[ZZYYXMNNOOPPQ + + ZYYXXWWV~66778899##""!! {{zzyyxx..//0011++**))((~~&&''(())LKJIHGGFfgghhiijKJJIIHHG^__``aab +A@@??>>=UTTSSRRQdeeffggh!!""##$$88776655qqrrssttDDEEFFGG + + POONNMMLYZZ[[\\]XWWVVUUTQRRSSTTUVUUTTSSR~}}|{zyx::;;<<==wwvvuutt22334455''&&%%$$~~}}||**++,,--FEEDDCCBjkkllmmnGFFEEDDCbccddeef + =<<;;::9QPPOONNMhiijjkkl%%&&''((44332211uuvvwwxxMMNNOOPP LKKJJIIH]^^__``a TSSRRQQPUVVWWXXYRQQPPOONwwvvuutt>>??@@AAssrrqqpp66778899##""!! {{zzyyxx..//0011BAA@@??>nooppqqrCBBAA@@?fgghhiij98877665MLLKKJJIlmmnnoop))**++,,00//..--yyzz{{||QQRRSSTTHGGFFEEDabbccdde + + POONNMMLYZZ[[\\]NMMGGFFEssrrqqppBBCCDDEEoonnmmll::;;<<==wwvvuutt22334455 >==<<;;:rssttuuv?>>==<<;jkkllmmn5//..--,IHHGGFFEpqqrrssttuuZHAb|ZdQb˂rXQdrtAQr˂pbtlfpvZdrtfH~Qr˂pbtlZp˂H~fr˂ptlJے`JXQtlJJ`ےJltZHAbJtArdnXv`AJltf`vXZHAbJtArdrXQJ``vXnZHAbtArdr˂ptArdbHAZpbdQZ|ے`JX|ZdQf~HbdQZ|nvpے`JXf~HbHAvpfے`JXQ|ZdQbZHAb|ZdQb˂bdrtAQr˂pbtlfpvdrtfH~Qr˂pXv`Zp˂H~fr˂ptlJے`JXQtlJHAZp˂JbdQZHAbJtArdnXv`AJltf`vXZHAbf~HbHAZp`vXnZHAbtArdr˂ptArdrXQJZ|dے`JX|ZdQf~HbdQZ|nvpے`JXfpv˂rXvpfے`JXQ|ZdQbZHAb|ZdQb`ےbrtAJlQr˂pbtlfpvdrtfH~Qr˂pnXv`QJ`ےH~fr˂ptlJے`JXQtlJHAZp˂tbdQZHAbJtArdnXv`AJltf`vXZHAbf~HXbHAZp`vXnZHAbtArdr˂ptArdbHAZ|dnے`JX|ZdQfHbdQZ|nvpے`JXv`f˂々vpfے`JXQf~HZHAb|ZdQbZp˂vfQr˂pbtlfpvdrtfH~Qr˂p~HfpbHAZdH~fr˂pfpvے`JXQtlJrXQJ`f`vXZHAbJtArdnrXQJ`AJltf`vXZHA۝vnXrtAJ`vXnZHAbnXv`r˂ptArdےbHAnvpے`JX|ZdQےHAbdQZ|nvp`JXQv`fbdQZ|vpfے`JXQf~Hp˂rZHAb|ZdQbZp˂fH~Qr˂pbtlZp˂drtfH~rbtl~HXdrtAH~fr˂pfpvXQJ`ےے`JXQtlJbHAZf`vXZHAbJtArdrXQJ`AJltf`vXJtAdv`fJlt`vXnZHAbnXv`bHAZr˂ptArdp˂rnvpے`JX|ZdQbHAbdQZ|nvp|ZdQ~HfpbdQZ|vpfے`JXQf~Hp˂rZHAb|ZdQbXQJ`ےfH~Qr˂pbtlZp˂drtfH~btlvnXdrtAH~fr˂pfpvXQJ`ےے`JXQtlJbHAZf`vXZHAbJtArdrXQJ`AJltf`vXJtArdv`fJbdQ`vXnZHAےnXv`bHAZr˂ptArdp˂nvpے`JX|ZdQbHAbdQZ|nvp|ZdQ~HXv`Z|dvpf`JXQrf~Hp˂rZHAbf~HbHAZpfH~Qr˂pbtlZp˂drtfH~btlf~HrtAJlH~fbtlfpvXQJ`ےے`JXQXv`f˂rXQf`vXZHAbJtArdrXQJ`AJltf`vXJtArdfpvtbdQ`vXnJtAdnXv`bHAZr˂p~HfJ`ےnvpے`JXf~HbHAbdQZ|nvp|ZdQnXv`Z|dvpf|ZdQbf~Hp˂rZHAbpvnbHAZpfH~Qr˂pfpvZp˂drtfH~btlf~HrtAJbH~ftlJfpvXQJ`ےے`JXQXv`f˂bf`vXZHAbnXv`rXQJ`AJltfZHAbJtArdXv`dQZ|`vXntArdnXv`bHAZr˂p~HXHAZdnvpے`JXf~HbHAbdQZ|ے`JX|ZdQf~HdrtAJvpf|ZdQbf~Hp˂rZHAbv`frtAJfH~Qr˂pfpvZp˂drtQr˂pbtlfpvltbH~ftlJfpvXQJ`ےے`JXQ~HfpbdQZ|f`vXZHAbnXv`rXQJ`AJltZHAbJtArdnXv`pdQZ|`vXntArdnXv`bHAZr˂pvnXdrtAnvpے`JXf~HbHAbdQZ|ے`JX|ZdQvndrtAJvpf|ZdQbf~Hp˂rZHAbv`fJltfH~Qr˂pfpvZp˂drtQr˂pbtlrXQJ`pbdQZ|H~ftlJfpvXQJ`ےے`JXQ~HXvbdQZ|f`vXZHAۅnXv`rXQJ`AJltZHAbJtArd˂rXdrtZHAbtArdnXv`bHAZr˂p`f~drtAJnvp`JXQf~HbHAbdQZ|ے`JX|ZdQQJ`ےAJltے`JXQ|ZdQbf~Hp˂r|ZdQbHfpvbdQZfH~rbtlfpvZp˂dtAQr˂pbtlbHAZpbdQZ|r˂ptlJfpvXQJ`ےtlJnXv|drf`vXJtAdnXv`rXQJ`JltZHAbJtArd˂drtZHAbtArdnXv`bHAZtArd`f~tAJlnvp|ZdQf~HbHAbnvpے`JX|ZdQbHAZpAJbdQے`JXQ|ZdQbf~Hp˂r|ZdQbHXv`tbdQZfH~btlfpvZp˂fHQr˂pbtlrXQZ|dr˂ptlJfpvXQJ`ےtlJf~H|drf`vXJtArdnXv`rXQJ`f`vXZHAbJtArdJ`ےrtAJlZHAbtArdnXv`bHAZtArdfpvtAJbdnvp|ZdQf~HbHAnvpے`JX|ZdQbHAZptbdQے`JXQ|ZdQbf~Hp˂r|ZdQbnXv`QZ|dfH~btlfpvZp˂fH~Qr˂pbtlbHZ|AJr˂ptlJfpvXQJ`ےtlJf~HrtAJlf`vXJtArdnXv`rXQJ`f`vXZHAbJtArdAZp˂ltbZHAbtArdnXv`bHAZtArdXv`ftbdnvp|ZdQf~HbHAnvpے`JX|ZdQrXQJ`nvpے`JXQ|ZdQbfHfp˂r|ZdQb~HfQZ|dfH~btlfpvZp˂fH~Qr˂pbtlےbHfHfr˂ptlJpvnXQJ`ےtlJpvnrtAJfZHAbJtArdnXv`rXQJ`f`vXZHAbJtArdAZp˂`vXnZHAbtArdrXQJ`bHAZtArdXv`pbdQZ|ے`JX|ZdQf~HbHAnvpے`JX|ZdQbHAvpfے`JXQ|ZdQbےHAZdrtAJlt`vXnZHAbtArdXQJ`ےvXnZHAbArd|QJ`ےJltvXnJtAd|f~HltbvXnHAbےXv`fJ`ےltbHAbےrd|v`pvZ|dvXnrd|v`fJ`ےvXnZHAbpfH~bdQZ|vpfے`JXQf~HbHAZvpfH`JXQZdQbtbHAZpbdQZ|vpfHZdQbtfpvdQZ|vpfH`JXQr~HfbHAZpdQZ|`JXQrZdQbtnrXQrtAJbvpfHZdQbt~HfpbHAZpvpfH`JXQf۝`vdrtAH~fr˂pXv`fp˂~f`r˂plJt˂rXdrtA~f`lJtnXv`drtAJ~f`˂pZpvn˂rXQdrtAJ˂pZlJtAJ`p˂dQZ|~fZHlJtAvnXrXQ~f`r˂pXnvˍJlt`vXnZHAb~HfbHAZpvXnZHAbArd|QJ`ےJltvXnArd|f~HbdQZ|vXnHAے`Xv`fJ`ےltbHAbےrd|rXQJdrtAJAbے`rd|v`fJ`ےvXnZHAbpfH~bdQZ|vpfے`JXQpvn˂rXQvpfH`JXQZdQbtbHAZpbdQZ|vpfHZdQbtXv`ˁdrtvpfHJXQrb~HfbHAZpdQZ|`JXQrZdQbt`ےbltbJXQrZdQbt~HfpbHAZdvpfH˂pZHf۝`vdrtAH~fr˂pXv`fJ`ے~f`r˂plJt˂rXdrtA~f`lJtf~HAJlt~f`tlJpvn˂rXQdtAJl˂pZlJtAHAZp˂dQZ|˂pZHlJtAvnXrtAJl~f`Abے`XnvˍJlt`vXnZHAb~HXbHAZpvXnZHAbArdQJ`ےJltvXnArd|fpvbdQZ|vXntAd|Xv`fJ`ےtbnHAbےrd|bHAdrtAJAbے`rd|v`ftbdvXnہJXQrpfH~bdQZ|vpfے`JXQv`f˂bvpfH`JXQf~HbHAZpbdQZ|vpfHZdQbtnXv`ˁdrtvpfHZdQbt~HfbHAZpvpf`JXQrZdQbtZp˂bdQZ|JXQrZdQbt~HfpQZ|dvpfH˂p`Zf۝`vdrtAH~fr˂p~HfpHAZd~f`r˂pfpv˂rXdrtA~flJtf~HXAJbdQ~f`lJtApvn˂rXQHf`˂pZlJtArXQJ`drt˂pZHlJtAvnXrtAJl~f`QXb㉀XnvˍJlt`vXnZHAےvnXrtAJvXnZHAbnXv`QJ`ےJltZHAbArd|v`fZ|dvXnrd|Xv`fJ`ےvXnHAbےrd|ےbHAAJltAbے`rd|v`ftbdvXnۑpJAHrpfH~bdQZ|vpf`JXQrv`fbdQZ|vpfH`JXQf~HbHAZpbdQZ|`JXQZdQbt~HfprtAJlvpfHZdQbt~HfbHAZpvpfH`JXQrZdQbtZp˂bdQZ|JXQrZdQbt~HfpQZ|dvpfH󙐂ˁ`Zf۝`vdrtAH~fbtl~HXvdrtA~f`r˂pfpv˂rXdrtAr˂plJtvnXtbdQ~f`lJtApvn˂rXQ~f`˂pZlJtAbHAZAJl˂pZHlJtAvnXrtAJl~f`QXAHrXnvˍJlt`vXnJtAd`f~JltvXnZHAbnXv`QJ`ےJltZHAbArd|v`pZ|dvXnrd|Xv`fJ`ےvXnHAbےrd|p˂rtbnAbے`rd|v`ftbdvXnېˁ`ZQpfH~bdQZ|vpf|ZdQbHfpvbdQZ|vpfH`JXQf~HbHAZpbdQZ|`JXQZdQbtvnrXrtAJvpfHZdQbt~HfbHAZpvpfH`JXQrZdQbtXQJ`ےvpfHJXQrZdQbtHfpQZ|dvpfHXb㉀ۑf۝`vdrtAH~ftlJnXvdrtAJ~f`r˂pfpv˂rXdrtAr˂plJtQJ`pbdQZ|~fZlJtApvn˂rXQ~f`˂pZlJtAbHAZf`˂pZHlJtAvnrXrtAJl~f`pJAHrXnvˍJlt`vXntArd`f~bdQZvXnZHAے`nXv`QJ`ےJltZHAbArd|rXQdrtAHAbےrd|Xv`fJ`ےvXnHAbےrd|p˂vXnAbے`rd|QJ`ےtbdvXnېˁ`ZQp|drbdQZ|vpf|ZdQbHXv`|drvpfHJXQrf~HbHAZpbdQZ|`JXQZdQbtJ`ےJlt`JXQrZdQbt~HfbHAZvpfH`JXQrZdQbtbHAZpvpfHJXQrZdQbtHAZpQZ|dvpfHXAHr󙐂QtJldrtAH~ftlJf~HtAJl璅~f`btlfpv˂rXdtAJlr˂plJtbHAZpbdQZ|˂pZlJtApvndrtAJ~f`˂pZlJtA˂rXQ~f`˂pZHlJtArXQrtAJl~f`ˁ`ZQXbtbAdZJlt`vXntArdfpvtbdQZvXnJtAd|nXv`QJ`ےtbZHAbArd|bHdrtAJHAbےrd|Xv`fltbvXnHAbےrdfJ`ےvXnAbے`rd|J`ےtbdvXn㉀ۑpJ|drbdQZ|vpf|ZdQbnXv`|drvpfHZdQbtf~HbHAZpnvp`JXQZdQbtAZp˂bdQZ`JXQrZdQbt~HfdQZ|vpfH`JXQr~HXbHAZpvpfHJXQrZdQbtbHAZpQZ|dvpfHAHr󙐂QtJldrtAH~ftlJf~HtAJbd~f`lJtfpv˂rXfHf`r˂plJtrXQJ`|dr˂pZlJtApvndrtAJ~f`˂pZv`f˂b~f`˂pZHlJtArXQrtAJl~f`ˁ`ZQXAtbAdZJltZHAbtArdXv`fQZ|dvXnArd|nXv`QJ`ےvXnZHAbArd|ےbHtAJlHAbےrd|Xv`fltbvXnHAbے~HfpHAZp˂vXnAbے`rd|J`ےtbdvXnHr󙐂ˁ|drbdQZ|ے`JXQ|ZdQb~HfrtAJlvpfHZdQbtf~HbHAZpvpfH`JXQZdQbtAZp˂tbdQZ`JXQrZdQbt~HfdQZ|vpfH`JXQrvnXrXQJvpfHJXQrZdQbtbHAZpQZ|dvpfH`ZQXbQtJldrtAr˂ptlJpvntbd~f`lJtfpv˂rX~f`r˂plJtbHA|AJl˂pZlJtApvndrtAJ~f`˂pZv`f`ےb~f`˂pZHlJtArXQrtAJl~f`ۑpJAtbAdZJltZHAbtArdXv`pQZ|dvXnArd|nXv`QJ`ےvXnZHAbArd|Zp˂tbnHAbےrd|Xv`fltbvXnHAbے~HXvHAZp˂vXnAbے`rdfJ`ےtbdvXnHr󙐂ˁ|drbdQZ|ے`JXQ|ZdQbvnrrtAJvpfHZdQbtf~HbHAZpvpfH`JXQZdQbtrXQJ`ۀvpf`JXQrZdQbtHfpdQZ|vpfH`JXQr`f~bHAvpfHJXQr~HfpbHAZpQZ|dvpfH`ZQXAHrQtJldrtAr˂ptlJXQJ`pbdQZ|~flJtfpv˂rX~f`r˂plJtbHAHf`˂pZlJtAvnrdrtAJ~f`˂pZHfpvZdr~f`˂pZHvnXrXQrtAJl~fr󙐂ˁ`ZtbAdZJltZHAbtArd˂rXQdrtAZHAbArd|nXv`QJ`ےvXnZHAbArd|Zp˂vXnHAbےrd|XQJ`ےltbvXnHAے`nXvtAJbdvXnAbے`v`fJ`ےtbd˂pZHQXb㉀|drbdQZ|ے`JXQ|ZdQbJ`ےJlt`JXQZdQbtf~HbHAZvpfH`JXQZdQbtbHAZpvpfH`JXQrZdQbtHAZpdQZ|vpfHJXQrb`f~QZ|dvpfHJXQr~HfpbHAZpQZ|dAbے`ۑpJAHrQtJldtAJr˂ptlJbHAZpbdQZ|r˂plJtfpvdrtA~f`r˂plJt˂rX~f`˂pZlJtA˂rXQdrtAJ~f`tlJHXv`rtAJl~f`˂pZHvnXrXQrtAJlJXQr󙐂ˁ`tbAdZltbZHAbtArd˂bdrtAZHAbArd|nXv`JltvXnZHAbArdQJ`ےvXnHAbےrd|J`ےltbvXntAd|f~HtbdvXnAbے`v`fJ`ےtbd˂pZHpfH~|drnvpے`JXQ|ZdQbHAZp˂JbdQ`JXQZdQbtf~HbdQZ|vpfH`JXQf~HXbHAZpvpfH`JXQrZdQbtbHAZpdQZ|vpfHZdQbtfpvQZ|dvpfHJXQr~HfpbHAZpQZ|dAbːf۝`vQtJlfHfr˂ptlJrXQJZ|dr˂plJtfpvdrtA~f`r˂pv`f˂~f`˂pZlJtA˂rXQdrtAJ~f`lJtAnXv`rtAJ~f`˂pZHvnXrXQrtAJlpZHAXnvˍtbAdZ`vXnZHAbtArd`ےbrtAJlZHAbArd|nXv`JltvXnZHAbە~HfpbHAZpvXnHAbےrd|J`ےltbvXnrd|f~HbdQZ|vXnAے`v`fJ`ےtbdbے`pfH~|drvpfے`JXQ|ZdQbHAZp˂tbdQ`JXQZdQbtf~HbdQZ|vpfH`JXQvnXrXQvpfH`JXQrZdQbtbHAZpdQZ|vpfHZdQbtXv`fdrtAvpfHJXQrbt~HfpbHAZpQZ|dJXQrːf۝`vQtJlH~fr˂ptlJbHAZ|AJlr˂plJtfpvdrtA~f`r˂pv`fJ`ے~f`˂pZlJtA˂rXQdrtAJ~f`lJtA~HfJlt~f`lJtvnXrXQtAJlpZHAXnvˍtbAdZ`vXnZHAbtArdZp˂tbZHAbArd|nXv`JltvXnZHAbە~HXbHAZpvXnHAbےrdfJ`ےltbvXnrd|pvnbdQZ|vXnAd|v`fJ`ےtbnb˂ppfH~|drvpfے`JXQ|ZdQbrXQJ`nvp`JXQZdQbtfHfpbdQZ|vpfH`JXQv`f󂀉bHvpfH`JXQr~HfbHAZpdQZ|vpfHZdQbtXv`fdrtAvpfHZdQbt~HfpbHAZp˅vpfHZHAbf۝`vQtJlH~fr˂ptlJےbHAfHf`r˂plJtvndrtA~f`r˂p~HfpAZd~f`˂pZpvn˂rXQdrtAJ~fZlJtA~HXJbdQ~f`lJtAvnXrXQf`ے`JXXnvˍtbAdZ`vXnZHAbtArdZp˂vXnZHAbArd|rXQJ`JltvXnZHAے`vnXrtAJbvXnHAbےXv`fJ`ےltbHAbےrd|v`fZ|dvXnrd|v`fJ`ےvXnQr˂ppfH~|drvpfے`JXQ|ZdQbbHAZvpfH`JXQZdQbtHAZpbdQZ|vpfHJXQrv`fdQZ|vpfH`JXQr~HfbHAZpdQZ|`JXQrZdQbt~HfprtAJlvpfHZdQbt~HfpbHAZpvpfHZHAbf۝`vQtJlH~fr˂ptlJp˂r~f`r˂plJt˂rXdrtA~f`btl~HXv`drtAJ~f`˂pZpvn˂rXQdrtAJ˂pZlJtAvnXtbdQ~f`lJtAvnXrXQ~f`˂pXnvˍtbAdZ|yz{|}~~}|{z-----------............................... \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv28_3.dat b/vendor/endroid/qr-code/assets/data/qrv28_3.dat new file mode 100644 index 000000000..f1fc12977 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv28_3.dat @@ -0,0 +1,257 @@ +~}~}~}~}|{|{|{|{zyzyzyzyuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefabababab_`_`_`_`^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLK~}~}~}~}|{|{|{|{zyzyzyzyuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefabababab_`_`_`_`^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLK~}~}~}~}|{|{|{|{zyzyxwxwuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghedcdcdcdabababab_`_`_`_`^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLK~}~}~}~}|{|{|{|{xwxwwwwwuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghcdcdcdcdabababab_`_`_`_`^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLK~}~}~}~}|{|{|{|{wxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghcdcdcdcdabababab______`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKGHGHGHGH~}~}~}~}|{|{|{|{wxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijgfefefefcdcdcdcdabababab`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKGHGHGHGH~}~}~}~}|{|{|{|{wxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijefefefefcdcdcdcdabababab`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKGHGHGHGH~}~}~}~}|{|{|{|{wxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijefefefefcdcdcdcdabababab`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKJIGHGHGHGG~}~}~}~}|{|{|{|{wxwxwxwwuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklihghghghefefefefcdcdcdcdabababab`_`_____\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIGGGGHGHG~}~}~}~}|{|{|{|{wwwwxwxwuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklghghghghefefefefcdcdcdcdabababab`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHG~}~}~}~}|{|{|{|{xwxwxwxwuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklghghghghefefefefcdcdcdcdabababab^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHG~}~}~}~}|{|{|{|{xwxwxwxwuvuvuvuvststststqrqrqrqropopopopmnmnmnmnkjijijijghghghghefefefefcdcdcdcdabababab^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHG~}~}~}~}|{|{|{|{xwxwxwxwuvuvuvuvststststqrqrqrqropopopopmnmnmnmnijijijijghghghghefefefefcdcdcdcdabababab^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHG~}~}~}~}|{|{|{zyxwxwxwxwuvuvuvuvststststqrqrqrqropopopopmnmnmnmnijijijijghghghghefefefefcdcdcdcdabababab^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIHGGGGGGH~}~}~}~}zyzyzyzyxwwwwwwxuvuvuvuvststststqrqrqrqropopopopmlklklklijijijijghghghghefefefefcdcdcdcdabababab^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIGHGHGHGH~}~}~}~}zyzyzyzywxwxwxwxuvuvuvuvststststqrqrqrqropopopopklklklklijijijijghghghghefefefefcdcdcdcdabababab^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIGHGHGHGH~}~}~}~}zyzyzyzywxwxwxwxuvuvuvuvststststqrqrqrqropopopopklklklklijijijijghghghghefefefefcdcdcdcdababa`_`^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIGHGHGHGH~}~}~}~}zyzyzyzywxwxwxwxuvuvuvuvststststqrqrqrqronmnmnmnklklklklijijijijghghghghefefefefcdcdcdcd_`_`____^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIGHGHGHGH~}~}~}~}zyzyzyzywxwxwxwxuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijghghghghefefefefcdcdcdcd__`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIGHGHGGGG~}~}~}~}zyzyzyzywxwxwwwwuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijghghghghefefefefcdcdcdcd`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIGGHGHGHG~}~}~}~}zyzyzyzywwxwxwxwuvuvuvuvststststqpopopopmnmnmnmnklklklklijijijijghghghghefefefefcdcdcdcd`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHG~}~}~}~}zyzyzyzyxwxwxwxwuvuvuvuvststststopopopopmnmnmnmnklklklklijijijijghghghghefefefefcdcdcdcd`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHG~}~}~}~}zyzyzyzyxwxwxwxwuvuvuvuvststststopopopopmnmnmnmnklklklklijijijijghghghghefefefefcdcdcdcd`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHG~}~}~}~}zyzyzyzyxwxwxwxwuvuvuvuvsrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefcdcdcdcd_____`_`^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHG~}~}~}~}zyzyzyzyxwxwxwxwuvuvuvuvqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefcdcdcdcd_`_`_`_`^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIGGGGGHGH|{|{|{|{zyzyzyzywwwwwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefcdcdcdcd_`_`_`_`^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIGHGHGHGH|{|{|{|{zyzyzyzywxwxwxwxutstststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefcdcdcdcb_`_`_`_`^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIGHGHGHGH|{|{|{|{zyzyzyzywxwxwxwxststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefabababab_`_`_`_`^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIGHGHGHGH|{|{|{|{zyzyzyzywxwxwxwxststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefabababab_`______^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIGHGGGGGH|{|{|{|{zyzyzyzywxwxwxwuststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefabababab`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIGHGHGHGF~}~}~}~}|{|{|{|{zyzyzyzyuuuuuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefabababab`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIEFEFEFEF~}~}~}~}|{|{|{|{zyzyzyzyuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefabababab`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIEFEFEFEF~}~}~}~}|{|{|{|{zyzyzyzyuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefabababab`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIHGHGEFEFEFEF~}~}~}~}|{|{|{|{zyzyzyzyuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefabababab`_`_`___^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKHGHGGGGGEFEFEFEF~}~}~}~}|{|{|{|{zyzyzyzyuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefabababab___`_`_`^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878785656565612121212/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!         + + + +EFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878785656565612121212/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +EFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878785656565412121212/0/0/0/0.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +EFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878783434343412121212/0/0/0/0.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +EFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878783434343412121212/0/0/0//.-.-.-.-,+,+,+*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +EFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878763434343412121212////0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + EFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:5656565634343434121212120/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         EFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:5656565634343434121212120/0/0/0/.-.-.-,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         EFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:985656565634343434121212120/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + +EFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<787878785656565634343434121212120/////0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +EFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<787878785656565634343434121212120/0/0/.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +EFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;:78787878565656563434343412121212.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!       + + + +EFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:78787878565656563434343412121212.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +EFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:78787878565656563434343412121212.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +EFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=<9:9:9:9:78787878565656563434343412121212.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!      + + + +EFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:78787878565656563434343412121212.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +EFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:78787878565656563434343412121212.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +EFEFEFEFCDCDCDCDABABABAB?@?@?@?>;<;<;<;<9:9:9:9:7878787856565656343434341210/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +EFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:787878785656565634343434/0//////.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +EFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656343434340/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +EFEFEFEFCDCDCDCDABABABA@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656343434340/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +EFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656343434340/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + +EFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656343434340/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +EFEFEFEFCDCDCDCB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656343434340/0/0///.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +EFEFEFEFABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878785656565634343434///0/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!      + + + +EFEFEFEFABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878785656565634343434/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#         + + + +EFEFEFEDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878785656565634343434/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#         + + + +CDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878785656565634343212/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#"!         + + + +CDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878785656565612121212/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +CDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878785656565612121212//////0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +CDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656121212120/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%$#"!"!"!"!         + + + +CDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656121212120/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +CDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656121212120/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +CDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656121212120/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('&%$#$#$#$#"!"!"!"!         + + + +CDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656121212120/0/////.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!         + + + +~~}} NNMMGGFFrrssttuu]\\[[ZZY01122334EDDCCBBAHIIJJKKL-,,++**)`aabbccdxyyzz{{|*++,,--.-,,++**)eeffgghh }}~~ + + llkkjjii!!""##$$TTSSRRQQ99::;;<<((''&&%%||{{zzyy!!""##$$EEDDCCBBvvww}}~~ YXXWWVVU45566778A@@??>>=LMMNNOOP)((''&&%deeffggh |}}~~.//55667)((''&&%iijjkkll + + ~~}} hhggffee%%&&''((PPOONNMM==>>??@@$$##""!!xxwwvvuu%%&&''((AA@@??>> !!""##$UTTSSRRQ899::;;<=<<;;::9PQQRRSST%$$##""!hiijjkkl + + ~~}78899::;%$$##""!mmnnoopp||{{zzyyddccbbaa))**++,,LLKKJJIIAABBCCDD ttssrrqq))**++,,==<<;;::~~}}|{zy$%%&&''(QPPOONNM<==>>??@98877665TUUVVWWX! lmmnnoop }wwvvuut;<<==>>?! qqrrssttxxwwvvuu``__^^]]--..//00HHGGFFEEEEFFGGHHppoonnmm--..//0099887766xwwvvuut())**++,MLLKKJJI@AABBCCD54433221XYYZZ[[\pqqrrssttssrrqqp?@@AABBCuuvvwwxxttssrrqq\\[[ZZYY11223344DDCCBBAAIIJJKKLLtssrrqqpllkkjjii1122334455//..--tssrrqqp,--..//0IHHGGFFEDEEFFGGH100//..-\]]^^__`tuuvvwwxpoonnmmlCDDEEFFGyyzz{{||ppoonnmm XXWWVVUU55667788@@??>>==MMNNOOPP poonnmmlhhggffee55667788,,++**))poonnmml01122334EDDCCBBAHIIJJKKL-,,++**)`aabbccdxyyzz{{|lkkjjiihGMMNNOOP}}~~ + + llkkjjii!!""##$$TTSSRRQQ99::;;<<<<;;::99QQRRSSTT + + lkkjjiihddccbbaa99::;;<<((''&&%%lkkjjiih45566778A@@??>>=LMMNNOOP)((''&&%deeffggh |}}~~ + + hggffee_PQQRRSST ~~}} hhggffee%%&&''((PPOONNMM==>>??@@88776655UUVVWWXXhggffeed``__^^]]==>>??@@$$##""!!hggffeed899::;;<=<<;;::9PQQRRSST%$$##""!hiijjkkl + + ~~} _^^]]\\[TUUVVWWX + + ||{{zzyyddccbbaa))**++,,LLKKJJIIAABBCCDD44332211YYZZ[[\\ cba`__^^\\[[ZZYYAABBCCDD cba`__^^<==>>??@98877665TUUVVWWX! lmmnnoop }||{{zzy[ZZYYXXWXYYZZ[[\xxwwvvuu``__^^]]--..//00HHGGFFEEEEFFGGHH00//..--]]^^__`` + + ]]\\[[ZZXXWWVVUUEEFFGGHH]]\\[[ZZ@AABBCCD54433221XYYZZ[[\pqqrrsstyxxwwvvuWVVUUTTS\]]^^__ettssrrqq\\[[ZZYY11223344DDCCBBAAIIJJKKLL,,++**))aabbccddYYXXWWVVTTSSRRQQIIJJKKLLYYXXWWVVDEEFFGGH100//..-\]]^^__`tuuvvwwxuttssrrqSRRQQPPOeffgghhippoonnmm XXWWVVUU55667788@@??>>==MMNNOOPP((''&&%%eeffgghhUUTTSSRRPPOONNMMMMNNOOPP UUTTSSRRHIIJJKKL-,,++**)`aabbccdxyyzz{{|qppoonnm ONNMMGGFijjkkllm + + llkkjjii!!""##$$TTSSRRQQ99::;;<<<<;;::99QQRRSSTT$$##""!!iijjkkllQQPPOONNLLKKJJIIQQRRSSTT + + QQPPOONNLMMNNOOP)((''&&%deeffggh |}}~~ + + mllkkjji !!""##$FEEDDCCBmnnooppq hhggffee%%&&''((PPOONNMM==>>??@@88776655UUVVWWXX mmnnoopp !!""MMLKJIHGHHGGFFEEUUVVWWXX + + MMLKJIHGPQQRRSST%$$##""!hiijjkkl + + ~~} ihhggffe$%%&&''(BAA@@??>qrrssttuddccbbaa))**++,,LLKKJJIIAABBCCDD44332211YYZZ[[\\qqrrsstt##$$%%&&GFFEEDDCDDCCBBAAYYZZ[[\\GFFEEDDCTUUVVWWX! lmmnnoop }||{{zzyeddccbba())**++,>==<<;;:uvvww}}~``__^^]]--..//00HHGGFFEEEEFFGGHH00//..--]]^^__``uuvvwwxx''(())**CBBAA@@?@@??>>==]]^^__``CBBAA@@?XYYZZ[[\pqqrrsstyxxwwvvua``__^^],--..//0:9988776~\\[[ZZYY11223344DDCCBBAAIIJJKKLL,,++**))aabbccddyyzz{{||++,,--..?>>==<<;<<;;::99aabbccdd?>>==<<;\]]^^__`tuuvvwwxuttssrrq]\\[[ZZY01122334655//..-~~}}|{z XXWWVVUU55667788@@??>>==MMNNOOPP((''&&%%eeffgghh }}~~//556677;::9988788776655eeffgghh !!"";::99887`aabbccdxyyzz{{|qppoonnm YXXWWVVU45566778-,,++**)yxwwvvuu!!""##$$TTSSRRQQ99::;;<<<<;;::99QQRRSSTT$$##""!!iijjkkll + + ~~}}8899::;;7665543244332211iijjkkll##$$%%&&76655432deeffggh |}}~~ + + mllkkjji !!""##$UTTSSRRQ899::;;<)((''&&%ttssrrqq%%&&''((PPOONNMM==>>??@@88776655UUVVWWXX mmnnooppwwvvuutt<<==>>??10//..--00//..--mmnnoopp''(())**10//..--hiijjkkl + + ~~} ihhggffe$%%&&''(QPPOONNM<==>>??@%$$##""!ppoonnmm))**++,,LLKKJJIIAABBCCDD44332211YYZZ[[\\qqrrssttssrrqqpp@@AABBCC,,++**)),,++**))qqrrsstt++,,--..,,++**))lmmnnoop }||{{zzyeddccbba())**++,MLLKKJJI@AABBCCD! llkkjjii--..//00HHGGFFEEEEFFGGHH00//..--]]^^__``uuvvwwxxoonnmmllDDEEFFGG((''&&%%((''&&%%uuvvwwxx//556677((''&&%%pqqrrsstyxxwwvvua``__^^],--..//0IHHGGFFEDEEFFGGHhhggffee11223344DDCCBBAAIIJJKKLL,,++**))aabbccddyyzz{{||kkjjiihhMMNNOOPP$$##""!!$$##""!!yyzz{{||8899::;;$$##""!!tuuvvwwxuttssrrq]\\[[ZZY01122334EDDCCBBAHIIJJKKLdcba`__^55667788@@??>>==MMNNOOPP((''&&%%eeffgghh }}~~ + + ggffee__QQRRSSTT  }}~~<<==>>?? xyyzz{{|qppoonnm YXXWWVVU45566778A@@??>>=LMMNNOOP ^]]\\[[Z99::;;<<<<;;::99QQRRSSTT$$##""!!iijjkkll + + ~~}} ^^]]\\[[UUVVWWXX~~}}@@AABBCC|}}~~ + + mllkkjji !!""##$UTTSSRRQ899::;;<=<<;;::9PQQRRSST + + ZYYXXWWV==>>??@@88776655UUVVWWXX mmnnoopp||{{zzyyZZYYXXWWYYZZ[[\\wwvvuuttDDEEFFGG~~} ihhggffe$%%&&''(QPPOONNM<==>>??@98877665TUUVVWWXVUUTTSSRAABBCCDD44332211YYZZ[[\\qqrrssttxxwwvvuuVVUUTTSS]]^^__eessrrqqppMMNNOOPP}||{{zzyeddccbba())**++,MLLKKJJI@AABBCCD54433221XYYZZ[[\ RQQPPOONEEFFGGHH00//..--]]^^__``uuvvwwxxttssrrqqRRQQPPOOffgghhii + oonnmmllQQRRSSTT +yxxwwvvua``__^^],--..//0IHHGGFFEDEEFFGGH100//..-\]]^^__` + + NMMLKJIHIIJJKKLL,,++**))aabbccddyyzz{{||ppoonnmm NNMMGGFFjjkkllmm +  + + kkjjiihhUUVVWWXX + uttssrrq]\\[[ZZY01122334EDDCCBBAHIIJJKKL-,,++**)`aabbccd GGFFEEDDMMNNOOPP((''&&%%eeffgghh }}~~ + + llkkjjii!!""##$$EEDDCCBBnnooppqq + + ggffee__YYZZ[[\\qppoonnm YXXWWVVU45566778A@@??>>=LMMNNOOP)((''&&%deeffgghCCBBAA@@QQRRSSTT$$##""!!iijjkkll + + ~~}} hhggffee%%&&''((AA@@??>>rrssttuu ^^]]\\[[]]^^__ee + + mllkkjji !!""##$UTTSSRRQ899::;;<=<<;;::9PQQRRSST%$$##""!hiijjkkl??>>==<>??@98877665TUUVVWWX! lmmnnoop !!";;::9988YYZZ[[\\qqrrssttxxwwvvuu``__^^]]--..//0099887766 + + VVUUTTSSjjkkllmmeddccbba())**++,MLLKKJJI@AABBCCD54433221XYYZZ[[\pqqrrsst"##$$%%&77665543]]^^__``uuvvwwxxttssrrqq\\[[ZZYY1122334455//..--~~}}|{zy RRQQPPOOnnooppqqa``__^^],--..//0IHHGGFFEDEEFFGGH100//..-\]]^^__`tuuvvwwx&''(())*210//..-aabbccddyyzz{{||ppoonnmm XXWWVVUU55667788,,++**))xwwvvuut`__^^]]\-..//001HGGFFEEDEFFGGHHI0//..--,]^^__``auvvwwxxy'(())**+0//..--,bbccddeezz{{||}} oonnmmll !!WWVVUUTT66778899++**))((wvvuutts"##$$%%&SRRQQPPO:;;<<==>;::99887RSSTTUUV#""!! jkkllmmn'(())**+)((''&&%\[[ZZYYX12233445DCCBBAA@IJJKKLLM,++**))(abbccddeyzz{{||}+,,--../,++**))(ffgghhii ~~ + + kkjjiihh""##$$%%SSRRQQPP::;;<<==''&&%%$$srrqqppo&''(())*ONNMMLLK>??@@AAB76655443VWWXXYYZnooppqqr+,,--../%$$##""! !XWWVVUUT56677889@??>>==>??@@AA##""!! onnmmllk*++,,--.KJJIIHHGBCCDDEEF3221100/Z[[\\]]^rssttuuv/5566778! !""##$$%TSSRRQQP9::;;<<=<;;::998QRRSSTTU$##""!! ijjkkllm + + ~~}}w899::;;<$##""!! nnooppqq{{zzyyxxccbbaa``**++,,--KKJJIIHHBBCCDDEEkjjiihhg.//00112GFFEEDDCFGGHHIIJ/..--,,+^__``aabvwwxxyyz899::;;<%&&''(()POONNMML=>>??@@A87766554UVVWWXXY mnnooppqwvvuutts<==>>??@ rrssttuuwwvvuutt__^^]]\\..//0011GGFFEEDDFFGGHHIIgffeedcb23344556CBBAA@@?JKKLLMMN+**))(('bccddeefz{{||}}~<==>>??@)**++,,-LKKJJIIHABBCCDDE43322110YZZ[[\\]qrrssttusrrqqppo@AABBCCDvvwwxxyyssrrqqpp[[ZZYYXX22334455CCBBAA@@JJKKLLMMa`__^^]]6778899:?>>==<<;NOOPPQQR'&&%%$$#fgghhiij ~xxw@AABBCCD-..//001HGGFFEEDEFFGGHHI0//..--,]^^__``auvvwwxxyonnmmllkDEEFFGGMzz{{||}} oonnmmll !!WWVVUUTT66778899??>>==<;::99887RSSTTUUV#""!! jkkllmmn + + wvvuuttsDEEFFGGM 12233445DCCBBAA@IJJKKLLM,++**))(abbccddeyzz{{||} kjjiihhgMNNOOPPQ~~ + + kkjjiihh""##$$%%SSRRQQPP::;;<<==;;::9988RRSSTTUU + + XXWWVVUU>??@@AAB76655443VWWXXYYZnooppqqrsrrqqppoMNNOOPPQ + + 56677889@??>>==>??@@AA77665544VVWWXXYYTTSSRRQQBCCDDEEF3221100/Z[[\\]]^rssttuuvonnmmllkQRRSSTTU + + 9::;;<<=<;;::998QRRSSTTU$##""!! ijjkkllm + + ~~}}| ^]]\\[[ZUVVWWXXY {{zzyyxxccbbaa``**++,,--KKJJIIHHBBCCDDEE33221100ZZ[[\\]] + +PPOONNMMFGGHHIIJ/..--,,+^__``aabvwwxxyyzkjjiihhgUVVWWXXY =>>??@@A87766554UVVWWXXY mnnooppq|{{zzyyxZYYXXWWVYZZ[[\\]wwvvuutt__^^]]\\..//0011GGFFEEDDFFGGHHII//..--,,^^__``aa LKJIHGGFJKKLLMMN+**))(('bccddeefz{{||}}~ +gffee__^YZZ[[\\]ABBCCDDE43322110YZZ[[\\]qrrssttuxwwvvuutVUUTTSSR]^^__eefssrrqqpp[[ZZYYXX22334455CCBBAA@@JJKKLLMM++**))((bbccddeeFEEDDCCBNOOPPQQR'&&%%$$#fgghhiij ~ + ^]]\\[[Z]^^__eefEFFGGHHI0//..--,]^^__``auvvwwxxytssrrqqpRQQPPOONfgghhiij oonnmmll !!WWVVUUTT66778899??>>==<RSSTTUUV#""!! jkkllmmn + + ~~}}||{ZYYXXWWVfgghhiijIJJKKLLM,++**))(abbccddeyzz{{||} poonnmml !NMMGGFFEjkkllmmn + + kkjjiihh""##$$%%SSRRQQPP::;;<<==;;::9988RRSSTTUU##""!! jjkkllmm>==<<;;:VWWXXYYZnooppqqr{zzyyxxwVUUTTSSRjkkllmmn MNNOOPPQ(''&&%%$effgghhi }~~ + + lkkjjiih!""##$$%EDDCCBBAnooppqqrggffeedd&&''(())OONNMMLL>>??@@AA77665544VVWWXXYYnnooppqq !!""##:9988776Z[[\\]]^rssttuuvwvvuuttsRQQPPOONnooppqqr !!""##$QRRSSTTU$##""!! ijjkkllm + + ~~}}| hggffeed%&&''(()A@@??>>=rssttuuvccbbaa``**++,,--KKJJIIHHBBCCDDEE33221100ZZ[[\\]]rrssttuu$$%%&&''65543210^__``aabvwwxxyyzsrrqqppoNMMGGFFErssttuuu$%%&&''(UVVWWXXY mnnooppq|{{zzyyxdccbbaa`)**++,,-=<<;;::9vww}}~~__^^]]\\..//0011GGFFEEDDFFGGHHII//..--,,^^__``aavvwwxxyy(())**++//..--,,bccddeefz{{||}}~ +onnmmllk !!"EDDCCBBAuttssrrq())**++,YZZ[[\\]qrrssttuxwwvvuut`__^^]]\-..//00198877665~[[ZZYYXX22334455CCBBAA@@JJKKLLMM++**))((bbccddeezz{{||}},,--..//++**))((fgghhiij ~ + kjjiihhg"##$$%%&A@@??>>=qppoonnm,--..//0]^^__``auvvwwxxytssrrqqp\[[ZZYYX122334455//..--,~}}|{zyx !!WWVVUUTT66778899??>>==<>??@@AA77665544VVWWXXYYnnooppqqvvuuttss==>>??@@rssttuuvwvvuutts_^^]]\\[.//001125//..--,eddccbba899::;;>??@@A$##""!! oonnmmll**++,,--KKJJIIHHBBCCDDEE33221100ZZ[[\\]]rrssttuurrqqppooAABBCCDDvwwxxyyzsrrqqppo[ZZYYXXW23344556,++**))(a``__^^]<==>>??@mnnooppq|{{zzyyxdccbbaa`)**++,,-LKKJJIIHABBCCDDE kkjjiihh..//0011GGFFEEDDFFGGHHII//..--,,^^__``aavvwwxxyynnmmllkkEEFFGGMMz{{||}}~ +onnmmllk !!"WVVUUTTS6778899:(''&&%%$]\\[[ZZY@AABBCCDqrrssttuxwwvvuut`__^^]]\-..//001HGGFFEEDEFFGGHHIggffeedc22334455CCBBAA@@JJKKLLMM++**))((bbccddeezz{{||}} jjiihhggNNOOPPQQ ~ + kjjiihhg"##$$%%&SRRQQPPO:;;<<==>$##""!! YXXWWVVUDEEFFGGHuvvwwxxytssrrqqp\[[ZZYYX12233445DCCBBAA@IJJKKLLMba`__^^]66778899??>>==<??@@AAB UTTSSRRQHIIJJKKLyzz{{||} poonnmml !XWWVVUUT56677889@??>>==>??@@AA77665544VVWWXXYYnnooppqq{{zzyyxxYYXXWWVVZZ[[\\]]wvvuutts_^^]]\\[.//00112GFFEEDDCFGGHHIIJMLLKKJJIPQQRRSST~~}}| hggffeed%&&''(()POONNMML=>>??@@A87766554UVVWWXXYUTTSSRRQBBCCDDEE33221100ZZ[[\\]]rrssttuuwwvvuuttUUTTSSRR^^__eeffsrrqqppo[ZZYYXXW23344556CBBAA@@?JKKLLMMN IHHGGFFETUUVVWWX|{{zzyyxdccbbaa`)**++,,-LKKJJIIHABBCCDDE43322110YZZ[[\\] +QPPOONNMFFGGHHII//..--,,^^__``aavvwwxxyyssrrqqppQQPPOONNgghhiijj +onnmmllk !!"WVVUUTTS6778899:?>>==<<;NOOPPQQR + + +EDDCCBBAXYYZZ[[\xwwvvuut`__^^]]\-..//001HGGFFEEDEFFGGHHI0//..--,]^^__``a + MLKJIHGGJJKKLLMM++**))((bbccddeezz{{||}} oonnmmll !!MMGGFFEEkkllmmnn + kjjiihhg"##$$%%&SRRQQPPO:;;<<==>;::99887RSSTTUUV + A@@??>>=\]]^^__`tssrrqqp\[[ZZYYX12233445DCCBBAA@IJJKKLLM,++**))(abbccddeFFEEDDCCNNOOPPQQ''&&%%$$ffgghhii ~~ + + kkjjiihh""##$$%%DDCCBBAAooppqqrrgffeeddc&''(())*ONNMMLLK>??@@AAB76655443VWWXXYYZ=<<;;::9`aabbccdpoonnmml !XWWVVUUT56677889@??>>==>==ssttuuvvcbbaa``_*++,,--.KJJIIHHGBCCDDEEF3221100/Z[[\\]]^98877665deeffgghlkkjjiih!""##$$%TSSRRQQP9::;;<<=<;;::998QRRSSTTU$##""!! ijjkkllm>>==<<;;VVWWXXYYnnooppqq{{zzyyxxccbbaa``**++,,--<<;;::99ww}}~~_^^]]\\[.//00112GFFEEDDCFGGHHIIJ/..--,,+^__``aab54433221hiijjkklhggffeed%&&''(()POONNMML=>>??@@A87766554UVVWWXXY mnnooppq !!""#::998877ZZ[[\\]]rrssttuuwwvvuutt__^^]]\\..//001188776655~~[ZZYYXXW23344556CBBAA@@?JKKLLMMN+**))(('bccddeef !!""#100//..-lmmnnoopdccbbaa`)**++,,-LKKJJIIHABBCCDDE43322110YZZ[[\\]qrrssttu#$$%%&&'66554321^^__``aavvwwxxyyssrrqqpp[[ZZYYXX22334455//..--,,}}|{zyxw !!"WVVUUTTS6778899:?>>==<<;NOOPPQQR'&&%%$$#fgghhiij#$$%%&&'-,,++**)pqqrrssttuuZHAbtArd~HXvbHAZpnvpZHAbbtlf~HrXQJ`ہdrtnvpZHAbbtlbHAZpˁdrtH~fے`JXQtArdp˂rbdQZ|`vXnr˂p|ZdQbfpvے`JXQ|ZdQb`f~˂bfH~˙ے`JXJtArdfpvbHAAJltfH~˙ے`JXJtArdbHAJlt`vXnr˂pf~HXQJ`ےdrtAvpfZHAbtlJnXv`r˂ptlJHfpvHAZdf`vXQr˂p|ZdQnXv`Zp˂bdQZ|f`vXQr˂pf~HAZp˂bdQZ|vpfZHAےfpvbHAZJltH~fے`JXQtArdf~HZHAbtArdnXvrtAJnvpZHAbbtlf~HrXQJ`ہdrtnvpZHAۅXv`ˉrXQJ`drtH~f`JXQrnXv`p˂rbdQZ|`vXnr˂p|ZdQbXv`fے`JXQ|ZdQb`f~bdQZ|fH~˙ے`JXJtArdfpvbHAAJltfH~˒`JXQf~HےbHAJbdQ`vXnbtlf~HXQJ`ےdrtAvpfZHAbtlJ~HfdrtAr˂ptlJHXv`drtAf`vXQr˂p|ZdQnXv`Zp˂bdQZ|f`vXrbtlfpvAZp˂Z|dvpfJtAdfpvbHAZJltH~fے`JXQtArdpvnJltZHAbtArdf~HJltnvpZHAbbtlf~HrXQJ`ہdrtnvpJtAdnXv`ˉbHArtAJlH~f|ZdQbnXv`p˂rbdQZ|`vXnr˂p|ZdQbXv`pbdQZ|ے`JXQ|ZdQbfpvbdQZ|fH~˙ے`JXJtArdfpvbHAAJltfH~˂|ZdQf~HXZp˂tbdQZHAbtlJf~HXQJ`ےdrtAvpfZHAbtlJvnrdrtAJr˂ptlJnXv`drtAJf`vXQr˂p|ZdQnXv`Zp˂bdQZ|fZHAbbtlv`frXQJ`Z|AJے`JXQtArdfpvbHAZJltH~fے`JXQtArdXQJ`pbdQZZHAbtArdf~HbdQZnvpZHAbbtlf~HrXQJ`ہdtAے`JXJtArd~HfpbHAltbr˂p|ZdQbnXv`p˂rbdQZ|`vXnr˂p|ZdQb˂rXQ|drے`JXQ|ZdQbXv`f|drfH~˙ے`JXJtArdfpvbHAJltQr˂p|ZdQvnXZp˂nvpZHAbtlJf~HXQJ`ےdrtAvpfZHAbtlJJ`ےtAJlr˂ptlJ~HftAJlf`vXQr˂p|ZdQnXv`Zp˂bnvpZHAbbtlv`fbHAZpfHfے`JXQtArdfpvbHAZJltH~fے`JXQtArdbHAZptbdQZZHAbtArdpvntbdQZnvpZHAbbtlf~HrXQJ`۝fH˙ے`JXJtArd~HX˂rX`vXnr˂p|ZdQbnXv`p˂rbdQZ|`vXnr˂p|ZdQb˂b|drے`JXQ|ZdQbXv`p|drfH~˙ے`JXJtArdfpvbHAf`vXQr˂p|ZdQv`fQJ`ےvpfZHAbtlJf~HXQJ`ےdrtAvpfZHAbtlJHAZp˂tAJbdr˂ptlJ˂rXQtAJbdf`vXQr˂p|ZdQnXv`ZdrtnvpZHAbbtl~HfpۙbHAZpH~fے`JXQtArdfpvbHAZJltH~fے`JXQtArdrXQJQZ|dZHAbtArdJ`ےQZ|dnvpZHAbbtlfHAJltfH~˙ے`JXJtArdvnX˂`vXnr˂p|ZdQbnXv`p˂rbdQZ|`vXnr˂p|ZdQb`ےbrtAJlے`JXQ|ZdQbbHAZprtAJlfH~˙ے`JXJtArdfpvbdQZ|f`vXQr˂p|ZdQv`fbHAZdvpfZHAbtlJf~HXQJ`ےdrtAvpfZHAbtlJHAZp˂tbdr˂ptlJ˂btbdf`vXQr˂p|ZdQnrXQJ`drtnvpZHAbbtl~HXv`rtAJH~fے`JXQtArdfpvbHAZJltH~fے`JXQtArdbHAQZ|dZHAbtArdHAZp˂QZ|dnvpZHAbbtlےHAAJltfH~˙ے`JXJtArdf~HbdQZ|`vXnr˂p|ZdQbnXv`p˂rbdQZ|`vXnr˂pf~HZp˂rtAJے`JXQ|ZdQbrXQJrtAJfH~˙ے`JXJtArdZp˂bdQZ|f`vXQr˂p|ZdQfpvdrtAvpfZHAbtlJf~HXQJ`ےdrtAvpfZHAےXv`frXQJ`bdQZ|r˂ptlJ`ےbbdQZ|f`vXQr˂pf~HrXQJ`ہdrtnvpZHAbbtlnXv`JltH~fے`JXQtArdfpvbHAZJltH~f`JXQr~HfےbHAdrtAZHAbtArdHAZp˂drtAnvpZHAۅfpvbHAAJltfH~˙ے`JXJtArdf~HbdQZ|`vXnr˂p|ZdQbnXv`p˂rbdQZ|`vXnbtlpvnZp˂Jltے`JXQ|ZdQbbHAJltfH~˒`JXQnXv`Zp˂bdQZ|f`vXQr˂p|ZdQXv`drtAvpfZHAbtlJf~HXQJ`ےdrtAvpfJtAdXv`fbHAZbdQZ|r˂ptlJZp˂bdQZ|f`vXrbtlf~HrXQJ`ہdrtnvpZHAbbtlf~HJbdQH~fے`JXQtArdfpvbHAZJltH~f|ZdQb~HXp˂rdrtAZHAbtArdrXQJ`drtAnvpJtAdfpvbHAAJltfH~˙ے`JXJtArdfpvZ|d`vXnr˂p|ZdQbnXv`p˂rbdQZ|ZHAbtlJv`fXQJ`ےJbdQے`JXQf~HےbHAJbdQfH~˂|ZdQnXv`Zp˂bdQZ|f`vXQr˂p|ZdQnXv`prtAJl瀅vpfZHAbtlJf~HXQJ`ےdtAJے`JXQtArd~HfpbHAZZ|dr˂pXv`fZp˂Z|dfZHAbbtlf~HrXQJ`ہdrtnvpZHAbbtlvntbdQH~fے`JXQtArdfpvbHAZltbr˂p|ZdQbvnXp˂rtAJlZHAb~HfbHAZrtAJlے`JXJtArdfpvbHAAJltfH~˙ے`JXJtArdrXQJ`pZ|d`vXnr˂p|ZdQbnXv`p˂rnvpZHAbtlJv`fbHAZptbdQے`JXQpvnp˂rtbdQQr˂p|ZdQnXv`Zp˂bdQZ|f`vXQr˂p|ZdQ˂rXrtAJbvpfZHAbtlJf~HXQJ`ےfHfے`JXQtArd~HXv˂rXQZ|AJlr˂pXv`fXQJ`ےZ|dnZHAbbtlf~HrXQJ`ہdrtnvpZHAbbtlQJ`ےdQZ|H~fے`JXQtArdfpvbHAZ`vXnr˂p|ZdQb`f~J`ےtb|ZdQb~HXbHAZvf˙ے`JXJtArdfpvbHAAJltfH~˙ے`JXJtArdbHAZpdrtAJ`vXnr˂p|ZdQbnXv`drtAvpfZHAbtlJHfpvbHAZpnvptlJv`fp˂f`vXQr˂p|ZdQnXv`Zp˂bdQZ|f`vXQr˂p|ZdQ˂ltbvpfZHAbtlJfHfJltH~fے`JXQtArdnXv˂bfHf`tArd~HfpbHAZpnvpZHAbbtlf~HrXQJ`ہdrtnvpZHAbbtlbHAZpdQZ|H~fے`JXQtArdpvnbdQZ|`vXnr˂p|ZdQb`f~HAZdvXn|ZdQbvnX˂rXQfH~˙ے`JXJtArdfpvbHAAJltfH~˙ے`JXJtArdrXQdrtAJ`vXnr˂p|ZdQbrXQJ`drtAvpfZHAbtlJHXv`rtAJvpfHtlJv`fJ`ےf`vXQr˂p|ZdQnXv`Zp˂bdQZ|f`vXQr˂p|ZdQJ`ے㒉bdQZ|vpfZHAbtlJےHAZJltH~fے`JXQtArdf~HbdQZ|~f`vXnr˂pZdQbtnXv`ˑ˂rXbdQZ|vXnr˂pZdQbtےbHbdQZ|vpfHHAbےlJtAHAZpltb~f``JXQrrd|~HfQZ|dvXnۉ˂pZHZdQbtv`frXQQZ|dvXnpJAHrf۝`vvpfHZHAbۉlJtf~HQJ`ےdrtAvpfHZHAbۉlJtAZp˂drtA~f``JXQrrdf˂rXQdQZ|vXn˂pZZdQbtpvnrtAJlvpfHAbے`lJtA~HfpJ`ےrtAJlvpfHˁ`ZQXnvˍ~f``JXQArd|fpvbHAZpJlt~f``JXQArdˉbHAJltvXn˂pZ~HfJ`ےdrtAJvpfHHAbےlJtAXv`ftbd~f`JXQrrd|vnXbHAZpˑtbd~f`XAHr󙐂pfH~ㅍvXnr˂pZdQbtnXv`ˑ˂rXbdQZ|vXnr˂pf~HXZp˂bdQZ|vpfHHAے`pvnbHAZpltb~f``JXQrrd|~HXQZ|dvXnۉ˂pZHZdQbtv`frXQQZ|dvXnˁ`ZQXbf۝`vvpfHZHAbۉlJtf~HQJ`ےdrtAvpfHZHAے`v`frXQJ`ۂdrtAJ~f`JXQrbXv`f˂rXQdQZ|vXn˂pZZdQbtv`frtAJvpfHAbے`lJtA~HfpJ`ےrtAJlvpfH㉀ۑpJXnvˍ~f``JXQArd|fpvbHAZpJlt~f`JXQr~HfpbHAbdQZvXntlJ~HfJ`ےdrtAJvpfHHAbےlJtA~HfpbdQZ|~f`JXQrrd|vnXbHAZpˑtbd~frAHr󙐂pfH~ㅍvXnr˂pZdQbtnXv`ˑ˂rXbdQZ|vXnbtlvnXZp˂|drvpfHtAd|pvnbHAZpltb~f``JXQrrd|vnXdrtAvXnۉ˂pZHZdQbtv`frXQQZ|d˂pZHˁ`ZQXAf۝`vvpfHZHAbۉlJtf~HQJ`ےdrtAvpfHJtAd|v`fbHAZptAJl~fZZdQbtXv`f˂rXQdQZ|vXn˂pZZdQbtv`pvJltvpfHAbے`lJtA~HfpJ`ےtAJlAbے`Hr󙐂ˁXnvˍ~f``JXQArd|fpvbHAZpJlt~fZdQbt~HX˂rXtbdQZHAbےlJtA~HfJ`ےdrtAJvpfHHAbےlJtAnrXQbdQZ|~f`JXQrrd|vnXbHAZp˒tbnJXQr`ZQXbp|drvXnr˂pZdQbtnXv`ˑ˂rXbdQZ|ZHAbۉlJtv`fQJ`ے|AJl`JXQrrd|pvnbHAZpltb~f``JXQrrd|J`p˂drtAvXnۉ˂pZHZdQbtv`frXQvpfH˂pZHۑpJAQtJlvpfHZHAbۉlJtf~HQJ`ےdtAJl`JXQArd|~HfpۙbHAZptbn˂pZZdQbtXv`f˂rXQdQZ|vXn˂pZZdQbtrXQJJbdQvpfHAbے`lJtA~HfpJ`ےㅐf`AbHr󙐂ˁtbAdZ~f``JXQArd|fpvbHAZptbr˂pZdQbtvnX˂々vpfHAbےlJtA~HfJ`ےdrtAJvpfHHAbےlJtA`ےbZ|d~f`JXQrrd|vnXbHAZdvXnۂpZHA`ZQXAHr|drvXnr˂pZdQbtnXv`ˑ˂rXnvpZHAbۉlJtv`fbHAZpHf``JXQrrd|pvnbHAZpltb~f``JXQrrd|HAZp˂rtAJlvXnۉ˂pZHZdQbtv`frtAJlvpfHbے`󙐂ˁ`ZQtJlvpfHZHAbۉlJtf~HQJ`ےfHf``JXQArd|~HXv`rXQvXn˂pZZdQbtXv`f˂rXQdQZ|vXn˂pZZdQbtbHAtbdQvpfHAbے`lJtAHfpۑtbd~f`JXQrQXb㉀tbAdZ~f``JXQArd|fpvbHAZvXnr˂pZdQbtf~HJ`ےvpfHHAbےlJtA~HfJ`ےdrtAJvpfHHAbےlJtAZp˂Z|d~f`JXQrrd|vnrXQZ|dvXnۂpZHAۑpJAHr|drvXnr˂pZdQbtnXv`˂drtAvpfHZHAbۉlJtfpvbHAZp~f``JXQrrd|pvnbHAZpltb~f``JXQrrd|rXQJ`rtAJbvXnۉ˂pZHZdQbtQJ`ےrtAJlvpfHb˂p󙐂ˁ`QtJlvpfHZHAbۉlJtfHfpJlt~f``JXQArd|nXv`bHvXn˂pZZdQbtXv`f˂rXQdQZ|vXn˂pZZdQbtےbHAdQZ|vpfHAbے`lJtAHAZpˑtbd~f`ZHAbpfH~tbAdZ~f``JXQArd|vnbdQZ|vXnr˂pZdQbtf~HAZdvpfHHAbےlJtA~HfJ`ےdrtAJvpfHHAbےlJtAZp˂drtAJ~f`JXQrrdfrXQQZ|dvXnۙے`JXf۝`v|drvXnr˂pZdQbtrXQJ`ۂdrtAvpfHZHAbۉlJtXv`rtAJb~f``JXQrrd|pvnbHAZpltb~f``JXQrrdfbHAZltbvXnۉ˂pZH~HfpJ`ےrtAJlvpfHQr˂pXnvˍQtJlvpfHZHAbۉlJtHAZpJlt~f``JXQArd|f~HdQZ|vXn˂pZZdQbtXv`f˂rXQdQZ|vXn˂pZ~HXp˂rdQZ|vpfHAے`vnXbHAZpˑtbd~f`ZHAbpfH~tbAdZ~f``JXQArdˑ˂rXbdQZ|vXnr˂pZdQbtfpvdrtAJvpfHHAbےlJtA~HfJ`ےdrtAJvpfHHAے`v`fXQJ`ےdrtAJ~f`JXQrbtv`frXQQZ|dvXnۙ˂pf۝`v|drvXnr˂pf~HQJ`ےdrtAvpfHZHAbۉlJtnXv`ltb~f``JXQrrd|pvnbHAZpltb~f`JXQrb~HfpbHAZbdQZ|vXnۉlJt~HfpJ`ےrtAJlvpfHZHAbXnvˍQtJlvpfHZHAے`fpvbHAZpJlt~f``JXQArd|f~HXdQZ|vXn˂pZZdQbtXv`f˂rXQdQZ|vXntlJvnXp˂drtvpfHAd|vnXbHAZpˑtbd~f``JXQpfH~tbAdZ~f`JXQrnXv`ˑ˂rXbdQZ|vXnr˂pZdQbtv`fdrtAJvpfHHAbےlJtA~HfJ`ےdrtAJvpfHtAd|v`fbHAZpAJlt~fZHZdQbtv`frXQQZ|dvXnr˂pf۝`v|drvXnbtlf~HQJ`ےdrtAvpfHZHAbۉlJt~HfpbdQZ|~f``JXQrrd|pvnbHAZpltb~fZZdQbt~HXv˂rXQbdQZ|Abے`lJtA~HfpJ`ےrtAJlvpfHZHAbXnvˍQtJlvpfHJtAd|fpvbHAZpJlt~f``JXQArd|vnXdrtvXn˂pZZdQbtXv`f˂rXQdQZ|HAbےlJtA`f~J`ےAJlJXQrrd|vnXbHAZpˑtbd~f`˂pZHpfH~tbAdZ~fZdQbtnXv`ˑ˂rXbdQZ|vXnr˂pZdQbtv`pAJltvpfHHAbےlJtA~HfJ`ےdtAJl`JXQrrd|HfpvbHAZptbn˂pZHZdQbtv`frXQQZ|dvXnAbے`f۝`v|drZHAbۉlJtf~HQJ`ےdrtAvpfHZHAbۉlJtvnrXbdQZ|~f``JXQrrd|pvnbHAZptbn˂pZZdQbtnXv˂bvpfHAbے`lJtA~HfpJ`ےrtAJlvpfHJXQrXnvˍQtJl`JXQArd|fpvbHAZpJlt~f``JXQArd|QJ`pˁdrtvXn˂pZZdQbtXv`f˂rXQvpfHAbےlJtA`f~HAZp˂f`JXQrrd|vnXbHAZpˑtbd~f`˂p`ZpfH~tbAdZr˂pZdQbtnXv`ˑ˂rXbdQZ|vXnr˂pZdQbtrXQAJbdQvpfHHAbےlJtA~HfJ`ےHf``JXQrrd|HXv`rXQJvXnۉ˂pZHZdQbtv`frXQQZ|dvXnQXb㉀f۝`v|drZHAbۉlJtf~HQJ`ےdrtAvpfHZHAbۉlJtJ`ےZ|d~f``JXQrrd|pvnbHAZvXn˂pZZdQbtf~H`ےbvpfHAbے`lJtA~HfpJ`ےrtAJlvpfHۑpJAHrXnvˍQtJl`JXQArd|fpvbHAZpJlt~f``JXQArd|bHAZprtAJlvXn˂pZZdQbtXv`fdrtAJvpfHHAbےlJtAfpvHAZp˂~f`JXQrrd|vnXbHAZpˑtbd~f`󙐂ˁ`ZpfH~tbAdZr˂pZdQbtnXv`ˑ˂rXbdQZ|vXnr˂pZdQbtbHtbdQvpfHHAbےlJtAHfpltb~f``JXQrrd|nXv`bHAvXnۉ˂pZHZdQbtv`frXQQZ|dvXnQXAHrf۝`v|drZHAbۉlJtf~HQJ`ےdrtAvpfHZHAbۉlJtAZp˂Z|d~f``JXQrrd|vnrdQZ|vXn˂pZZdQbtf~HZdrvpfHAbے`lJtA~HfpJ`ےrtAJlvpfHˁ`ZQXnvˍQtJl`JXQArd|fpvbHAZpJlt~f``JXQArd|rXQJ`rtAJvXn˂pZZdQbtXQJ`ےdrtAJvpfHHAbےlJtAXv`ftAJbd~f`JXQrrd|vnXbHAZpˑtbd~f`Xb㉀ۑpfH~tbAdZ|yz{|}~~}|{z66667777777777777777777777777777777 \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv29_0.dat b/vendor/endroid/qr-code/assets/data/qrv29_0.dat new file mode 100644 index 000000000..b6cc568c6 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv29_0.dat @@ -0,0 +1,265 @@ +|{|{{{{{yyyyyzyzyzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopopopopopmnmnmnmnklklklklijijijijghghghghefefefefdcdcdcccbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQNMNMNMNMKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?>=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopoponmnmnmnmnmnmnmnklklklklijijijijghghghghefefefefcccdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQNMNMNMNMKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656~}{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnmnmnmnmnklklklklijijijijghghghghefefefefcdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656~}~}~}~}{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnmnmnmnmnklklklklijijijijghghghghefefefefcdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKKIJIJIJIJIJIJIJIHGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656~}~}~}~}{|{|{|{|yzyzyzyzyxwxwxwxwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnmnmnmnmnklklklklijijijijghghghghefefefefcdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKKKKLKLKIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656~}~}~}~}{|{|{|{{yzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnmnmnmnmnklklklklijijijijghghghghefefefefcdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=<;<;<;<;<9:9:9:9:7878787856565656~}~}~}~}{{{{|{|{yzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnmlklklklklklklklijijijijghghghghefefefefccccccdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:7878787856565656~}~}~}~}|{|{|{|{yzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklklklklklijijijijghghghghefefefefdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:7878787856565656~}~}~}~}|{|{|{|{yzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklklklklklijijijijghghghghefefefefdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJGHGHGHGHGHGHGHGFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:7878787856565656~}~}~}~}|{|{|{|{yzyzyzyzwxwxwxwxwvuvuvuvuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklklklklklijijijijghghghghefefefefdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKKKKKKLIJIJIJIJGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:7878787856565656~}~}~}~}|{|{|{|{yzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklklklklklijijijijghghghghefefefefdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;:9:9:9:9:7878787856565656~}~}~}~}|{{{{{{|yzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklkjijijijijijijijghghghghefefedcddcdcccccbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:7878787856543434~}~}~}~}{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijijijijijghghghghcdcdccccdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:7878787834333333~}~}~}~}{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijijijijijghghghgfccdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFEFEFEFEDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:7878765643434343~}~}~}~}{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvutstststststststqrqrqrqropopopopmnmnmnmnklklklklijijijijijijijijefefefefdcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKKKKIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:5656565643434343~}~}~}~}{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststststststqrqrqrqropopopopmnmnmnmnklklklklijijijijijijijijefefefefdcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKKLKLKLKIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:985656565643434343~}~}~}~}{|{|{{{{yzyzyzyzwxwxwxwxuvuvuvuvststststststststqrqrqrqropopopopmnmnmnmnklklklklijijijijihghghghefefefefdcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878785656565643434343~}~}~}~}{{|{|{|{yzyzyzyzwxwxwxwxuvuvuvuvststststststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefdcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878785656565643434333~}~}~}~}|{|{|{|{yzyzyzyzwxwxwxwxuvuvuvuvststststststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefcccccdcdbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCBABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878785656565633343434~}~}~}~}|{|{|{|{yzyzyzyzwxwxwxwxuvuvuvuvststststsrqrqrqrqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefcdcdcdcdbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878785656565634343434~}~}~}~}|{|{|{|{yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefcdcdcdcdbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKKKKKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878785656565634343434~}~}~}~}|{|{|{|{yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefcdcdcdcdbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:78787878565656563434343443433333~}~}~}~}{{{{{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefcdcdcdcdbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:78787878565656563434343434343434~}~}~}~}{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefcdccccccbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABA@?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:78787878565656563333334334343434~}~}~}~}{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrqpopopopopopopopmnmnmnmnklklklklijijijijghghghghefefefefdcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:78787878565656564343434334343434~}~}~}~}{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopopopopopmnmnmnmnklklklklijijijijghghghghefefefefdcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMLKLKKLKKKKKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:78787878565656564343434334343434~}~}~}~}{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopopopopopmnmnmnmnklklklklijijijijghghghghefefefefdcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOLKLKKKKKKLKLKLKJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:78787878565656564343434334343433~}~}|{|{{|{|{|{yyzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopopopopopmnmnmnmnklklklklijijijijghghghghefefefefdcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPONMKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656434343433333434343434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +43434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +43434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)('('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +43434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + + + +43333343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + + + + + +43434321212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + + + + + +21212121212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + + + + + +21212121212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('&%&%&%&%&%$#$#$#$#"!"!"!"!         + + + + + + + +21212121212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!         + + + + + + 21212121212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!         + + + +212121212121210/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!         + + + +212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!         + + + +212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%$#$#$#$#$#"!"!"!"!         + + + +212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!         + + + +212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!         + + + +212121210/0/0/0/0/0/0/.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!         + + + +212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!         + + + +212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#"!"!"!"!"!         + + + +212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!         + + + +212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!         + + + +212121210/0/0/0/.-.-.-.-.-.-.-,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!       + + + +212121210/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!      + + + +212121210/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!          + + + +212121210/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!             + + + +212121210/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!             + + + +212121210/0/0/0/.-.-.-.-,+,+,+,+,+,+,+*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!             + + + +212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!           + + + +212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +mmnnoopp~}tuuvvwwx%$$##""!LMMNNOOPMLLKKJJI$%%&&''(uttssrrqlmmnnoop-,,++**)DEEFFGGHFEEDDCCBGHHIIJJK;;::9987==>>??@@\\[[ZZYY]]^^__``<<;;::9955667788ddccbbaa }}~~ xwwvvuut uvvwwxxy$##""!! MNNOOPPQLKKJJIIH%&&''(()tssrrqqpmnnooppq,++**))(EFFGGHHIEDDCCBBAHIIJJKKQ~~}} qqrrsstt |{{zzyyx + + xyyzz{{|! PQQRRSSTIHHGGFFE())**++,qppoonnmpqqrrsst)((''&&%HIIJJKKLBAA@@??>KQQRRSST65433221AABBCCDDXXWWVVUU~~}} aabbccdd8877665599::;;<<``__^^]] + + tssrrqqp + + yzz{{||} QRRSSTTUHGGFFEED)**++,,-poonnmmlqrrssttu(''&&%%$IJJKKLLMA@@??>>=QRRSSTTU||{{zzyy + + uuvvwwxx + + xwwvvuut |}}~~TUUVVWWXEDDCCBBA,--..//0mllkkjjituuvvwwx%$$##""!LMMNNOOP>==<<;;:TUUVVWWX100//..-EEFFGGHHTTSSRRQQ ||{{zzyy + + eeffgghh44332211==>>??@@\\[[ZZYYpoonnmml }~~UVVWWXXYDCCBBAA@-..//001lkkjjiih uvvwwxxy$##""!! MNNOOPPQ=<<;;::9UVVWWXXYxxwwvvuu + + yyzz{{|| + + tssrrqqpXYYZZ[[\A@@??>>=01122334ihhggffe + + xyyzz{{|! PQQRRSST:9933221XYYZZ[[\-,,++**)IIJJKKLLPPOONNMM!!""##$$xxwwvvuuiijjkkll00//..--AABBCCDDXXWWVVUU{{zzyyxxlkkjjiihYZZ[[\\]@??>>==<12233445hggffeed + + yzz{{||} QRRSSTTU93322110YZZ[[\\]ttssrrqq }}~~poonnmml\]]^^__`=<<;;::945566778eddccbba |}}~~TUUVVWWX100//..-\]]^^__`)((''&&%MMNNOOPPLLKKJJII%%&&''((ttssrrqqmmnnoopp,,++**))EEFFGGHHTTSSRRQQ wwvvuuttgfedccbb]^^__``a<;;::99856677889dccbbaa` }~~UVVWWXXY0//..--,]^^__``appoonnmmlkkjjiih~~} `aabbccd98877665899::;;>??@]\\[[ZZY\]]^^__`)((''&&%ijjkkllm! UUVVWWXXDDCCBBAA--..//00llkkjjiiuuvvwwxx$$##""!!MMNNOOPPLLKKJJII%%&&''((oonnmmll##$$%%&&]]\\[[ZZ !|{{zzyyx + + effgghhi43322110=>>??@@A\[[ZZYYX]^^__``a(''&&%%$jkkllmmnhhggffee{{zzyyxx!!""aa``__^^ !!""##$yxxwwvvu hiijjkkl100//..-@AABBCCDYXXWWVVU~~} `aabbccd%$$##""!mnnooppqYYZZ[[\\@@??>>==11223344hhggffee + + yyzz{{|| QQRRSSTTHHGGFFEE))**++,,kkjjiicc''(())**YYXXWWVV!""##$$%xwwvvuutijjkkllm0//..--,ABBCCDDEXWWVVUUT~~}}| abbccdde$##""!!nooppqqrddccbbaa wwvvuutt##$$%%&&]]\\[[ZZ$%%&&''(uttssrrqlmmnnoop-,,++**)DEEFFGGHUTTSSRRQ }||{{zzy + + deeffggh!qrrssttu]]^^__``<<;;::9955667788ddccbbaa }}~~UUVVWWXXDDCCBBAA--..//00bbaa``__++,,--..UUTTSSRR%&&''(()tssrrqqpmnnooppq,++**))(EFFGGHHITSSRRQQP !|{{zzyyx + + effgghhirssttuuv``__^^]]!!""##$$ssrrqqpp''(())**YYXXWWVV())**++,qppoonnmpqqrrsst)((''&&%HIIJJKKLQPPOONNM !!""##$yxxwwvvu hiijjkkluvvwwxxyaabbccdd8877665599::;;<<``__^^]]YYZZ[[\\@@??>>==11223344^^]]\\[[//001122QQPONMLK)**++,,-poonnmmlqrrssttu(''&&%%$IJJKKLLMPOONNMML!""##$$%xwwvvuutijjkkllmvwwxxyyz\\[[ZZYY%%&&''((oonnmmll++,,--..UUTTSSRR,--..//0mllkkjjituuvvwwx%$$##""!LMMNNOOPMLLKKJJI$%%&&''(uttssrrqlmmnnoopyzz{{ eeffgghh44332211==>>??@@\\[[ZZYY]]^^__``<<;;::9955667788ZZYYXXWW3399::;;KJJIIHHG-..//001lkkjjiih uvvwwxxy$##""!! MNNOOPPQLKKJJIIH%&&''(()tssrrqqpmnnooppqz{{XXWWVVUU))**++,,kkjjiicc//001122QQPONMLK01122334ihhggffe + + xyyzz{{|! PQQRRSSTIHHGGFFE())**++,qppoonnmpqqrrsst + + iijjkkll00//..--AABBCCDDXXWWVVUU~~}} aabbccdd8877665599::;;<>??GFFEEDDC12233445hggffeed + + yzz{{||} QRRSSTTUHGGFFEED)**++,,-poonnmmlqrrssttu TTSSRRQQ--..//00bbaa``__3399::;;KJJIIHHG45566778eddccbba |}}~~TUUVVWWXEDDCCBBA,--..//0mllkkjjituuvvwwx + + ~mmnnoopp,,++**))EEFFGGHHTTSSRRQQ ||{{zzyy + + eeffgghh44332211==>>??@@RRQQKKJJ@@AABBCCCBBAA@@?56677889dccbbaa` }~~UVVWWXXYDCCBBAA@-..//001lkkjjiih uvvwwxxy + + ~}|PPOONNMM11223344^^]]\\[[<<==>>??GFFEEDDC899::;;>=01122334ihhggffe + + xyyzz{{|}|{{zzyyqqrrsstt((''&&%%IIJJKKLLPPOONNMM!!""##$$xxwwvvuuiijjkkll00//..--AABBCCDDIIHHGGFFDDEEFFGG?>>==<<;9::;;<<=`__^^]]\YZZ[[\\]@??>>==<12233445hggffeed + + yzz{{||}{{zzyyxxLLKKJJII55667788ZZYYXXWW@@AABBCCCBBAA@@?<==>>??@]\\[[ZZY\]]^^__`=<<;;::945566778eddccbba |}}~~ xxwwvvuuuuvvwwxx$$##""!!MMNNOOPPLLKKJJII%%&&''((ttssrrqqmmnnoopp,,++**))EEFFGGHHEEDDCCBBHHIIJJKK;::99876=>>??@@A\[[ZZYYX]^^__``a<;;::99856677889dccbbaa` }~~ +wwvvuuttHHGGFFEE99::;;<>==<<;@AABBCCDYXXWWVVU~~} `aabbccd98877665899::;;>QQRRSSTT54332211ABBCCDDEXWWVVUUT~~}}| abbccdde877665549::;;<<=`__^^]]\ + ssrrqqppDDCCBBAA==>>??@@RRQQKKJJHHIIJJKK;::99876DEEFFGGHUTTSSRRQ }||{{zzy + + deeffggh54433221<==>>??@]\\[[ZZY ppoonnmm }}~~UUVVWWXXDDCCBBAA--..//00llkkjjiiuuvvwwxx$$##""!!MMNNOOPP==<<;;::UUVVWWXX00//..--EFFGGHHITSSRRQQP !|{{zzyyx + + effgghhi43322110=>>??@@A\[[ZZYYX{oonnmmll@@??>>==AABBCCDDIIHHGGFFQQRRSSTT54332211HIIJJKKLQPPOONNM !!""##$yxxwwvvu hiijjkkl100//..-@AABBCCDYXXWWVVU{{zzyyxllkkjjiiYYZZ[[\\@@??>>==11223344hhggffee + + yyzz{{|| QQRRSSTT99332211YYZZ[[\\,,++**))IJJKKLLMPOONNMML!""##$$%xwwvvuutijjkkllm0//..--,ABBCCDDEXWWVVUUT{zzyyxxwkkjjiihg<<;;::99EEFFGGHHEEDDCCBBUUVVWWXX00//..--LMMNNOOPMLLKKJJI$%%&&''(uttssrrqlmmnnoop-,,++**)DEEFFGGHUTTSSRRQ xwwvvuuthgfedccb]]^^__``<<;;::9955667788ddccbbaa }}~~UUVVWWXX00//..--]]^^__``((''&&%%MNNOOPPQLKKJJIIH%&&''(()tssrrqqpmnnooppq,++**))(EFFGGHHITSSRRQQP !wvvuuttsfedccbba88776655IIJJKKLLAA@@??>>YYZZ[[\\,,++**))PQQRRSSTIHHGGFFE())**++,qppoonnmpqqrrsst)((''&&%HIIJJKKLQPPOONNM !!""##$tssrrqqp!!"baa``__^~~}} aabbccdd8877665599::;;<<``__^^]]YYZZ[[\\,,++**))aabbccii$$##""!!QRRSSTTUHGGFFEED)**++,,-poonnmmlqrrssttu(''&&%%$IJJKKLLMPOONNMML!""##$$%srrqqppo!!""#a``__^^]44332211MMNNOOPP==<<;;::]]^^__``((''&&%%TUUVVWWXEDDCCBBA,--..//0mllkkjjituuvvwwx%$$##""!LMMNNOOPMLLKKJJI$%%&&''(poonnmml"##$$%%&^]]\\[[Z ||{{zzyy + + eeffgghh44332211==>>??@@\\[[ZZYY]]^^__``((''&&%%jjkkllmm UVVWWXXYDCCBBAA@-..//001lkkjjiih uvvwwxxy$##""!! MNNOOPPQLKKJJIIH%&&''(()onnmmllk#$$%%&&']\\[[ZZY00//..--QQRRSSTT99332211aabbccii$$##""!!XYYZZ[[\A@@??>>=01122334ihhggffe + + xyyzz{{|! PQQRRSSTIHHGGFFE())**++,lkkjjiic&''(())*ZYYXXWWV!!""##$$xxwwvvuuiijjkkll00//..--AABBCCDDXXWWVVUU~~}} aabbccdd$$##""!!nnooppqqYZZ[[\\]@??>>==<12233445hggffeed + + yzz{{||} QRRSSTTUHGGFFEED)**++,,-kjjiiccb'(())**+YXXWWVVU::998765,,++**))UUVVWWXX00//..--jjkkllmm \]]^^__`=<<;;::945566778eddccbba |}}~~TUUVVWWXEDDCCBBA,--..//0cbbaa``_*++,,--.VUUTTSSR%%&&''((ttssrrqqmmnnoopp,,++**))EEFFGGHHTTSSRRQQ ||{{zzyy + + eeffgghhrrssttuu]^^__``a<;;::99856677889dccbbaa` }~~UVVWWXXYDCCBBAA@-..//001baa``__^+,,--../UTTSSRRQ43322110((''&&%%YYZZ[[\\,,++**))nnooppqq`aabbccd98877665899::;;>=01122334_^^]]\\[.//00112RQQPONML))**++,,ppoonnmmqqrrsstt((''&&%%IIJJKKLLPPOONNMM!!""##$$xxwwvvuuiijjkkllvvwwxxyyabbccdde877665549::;;<<=`__^^]]\YZZ[[\\]@??>>==<12233445^]]\\[[Z/0011223QPONMLKK0//..--,$$##""!!]]^^__``((''&&%%rrssttuudeeffggh54433221<==>>??@]\\[[ZZY\]]^^__`=<<;;::945566778[ZZYYXXW23399::;KKJJIIHH--..//00llkkjjiiuuvvwwxx$$##""!!MMNNOOPPLLKKJJII%%&&''((ttssrrqqmmnnooppzz{{ +effgghhi43322110=>>??@@A\[[ZZYYX]^^__``a<;;::99856677889ZYYXXWWV399::;;>?GGFFEEDD11223344hhggffee + + yyzz{{|| QQRRSSTTHHGGFFEE))**++,,ppoonnmmqqrrsstt + ijjkkllm0//..--,ABBCCDDEXWWVVUUT~~}}| abbccdde877665549::;;<<=VUUTTSSR<==>>??@FFEEDDCC(''&&%%$eeffgghhzz{{ +lmmnnoop-,,++**)DEEFFGGHUTTSSRRQ }||{{zzy + + deeffggh54433221<==>>??@SRRQQKKJ?@@AABBCCCBBAA@@55667788ddccbbaa }}~~UUVVWWXXDDCCBBAA--..//00llkkjjiiuuvvwwxx + + ~}mnnooppq,++**))(EFFGGHHITSSRRQQP !|{{zzyyx + + effgghhi43322110=>>??@@ARQQKKJJI@AABBCCDBBAA@@??$##""!! iijjkkll + pqqrrsst)((''&&%HIIJJKKLQPPOONNM !!""##$yxxwwvvu hiijjkkl100//..-@AABBCCDJIIHHGGFCDDEEFFG??>>==<<99::;;<<``__^^]]YYZZ[[\\@@??>>==11223344hhggffee + + yyzz{{|||{{zzyyxqrrssttu(''&&%%$IJJKKLLMPOONNMML!""##$$%xwwvvuutijjkkllm0//..--,ABBCCDDEIHHGGFFEDEEFFGGH>>==<<;;ZZ[[\\]]??>>==<<22334455ggffeedd + + zz{{||}}RRSSTTUUGGFFEEDD**++,,--jjiiccbb(())**++XXWWVVUU"##$$%%&wvvuuttsjkkllmmn/..--,,+BCCDDEEFWVVUUTTS~~}}||{ bccddeefyxxwwvvu + + ^^__``aa;;::998866778899ccbbaa``~~VVWWXXYYCCBBAA@@..//0011aa``__^^,,--..//TTSSRRQQ&''(())*srrqqpponooppqqr+**))(('FGGHHIIJSRRQQPPO !!"{zzyyxxw + + fgghhiijuttssrrq bbccddee77665544::;;<<==__^^]]\\ZZ[[\\]]??>>==<<22334455]]\\[[ZZ00112233PONMLKKJ*++,,--.onnmmllkrssttuuv'&&%%$$#JKKLLMMNONNMMLLK"##$$%%&wvvuuttsjkkllmmnqppoonnm + +ffgghhii33221100>>??@@AA[[ZZYYXX^^__``aa;;::998866778899YYXXWWVV99::;;<>??@@FEEDDCCB23344556gffeeddc + z{{||}}~RSSTTUUVGFFEEDDC*++,,--.onnmmllkrssttuuv + + +ihhggffennooppqq++**))((FFGGHHIISSRRQQPP !!{{zzyyxx + + ffgghhii33221100>>??@@AAQQKKJJIIAABBCCDDBAA@@??>6778899:cbbaa``_~VWWXXYYZCBBAA@@?.//00112kjjiihhg +vwwxxyyz + eddccbba rrssttuu''&&%%$$JJKKLLMMOONNMMLL""##$$%%wwvvuuttjjkkllmm//..--,,BBCCDDEEHHGGFFEEEEFFGGHH>==<<;;::;;<<==>_^^]]\\[Z[[\\]]^?>>==<<;23344556gffeeddc + z{{||}}~a``__^^] !!""##$ vvwwxxyy##""!! NNOOPPQQKKJJIIHH&&''(())ssrrqqppnnooppqq++**))((FFGGHHIIDDCCBBAAIIJJKKQQ:9987654>??@@AAB[ZZYYXXW^__``aab;::998876778899:cbbaa``_~]\\[[ZZY$%%&&''( + + zz{{||}}RRSSTTUUGGFFEEDD**++,,--oonnmmllrrssttuu''&&%%$$JJKKLLMM@@??>>==RRSSTTUU33221100BCCDDEEFWVVUUTTS~~}}||{ bccddeef76655443:;;<<==>_^^]]\\[||{YXXWWVVU())**++,~~VVWWXXYYCCBBAA@@..//0011kkjjiihh vvwwxxyy##""!! NNOOPPQQ<<;;::99VVWWXXYY//..--,,FGGHHIIJSRRQQPPO !!"{zzyyxxw + + fgghhiij3221100/>??@@AAB[ZZYYXXW{zzyyxxw!!""#UTTSSRRQ,--..//0ZZ[[\\]]??>>==<<22334455ggffeedd + + zz{{||}}RRSSTTUU33221100ZZ[[\\]]++**))((JKKLLMMNONNMMLLK"##$$%%&wvvuuttsjkkllmmn/..--,,+BCCDDEEFWVVUUTTSwvvuutts#$$%%&&'QPPOONNM01122334^^__``aa;;::998866778899ccbbaa``~~VVWWXXYY//..--,,^^__``aa''&&%%$$NOOPPQQRKJJIIHHG&''(())*srrqqpponooppqqr+**))(('FGGHHIIJSRRQQPPO !!"srrqqppo'(())**+MLLKKJJI45566778~~}}|| bbccddee77665544::;;<<==__^^]]\\ZZ[[\\]]++**))((bbcciijj##""!! RSSTTUUVGFFEEDDC*++,,--.onnmmllkrssttuuv'&&%%$$#JKKLLMMNONNMMLLK"##$$%%&onnmmllk+,,--../IHHGGFFE899::;;< !!{{zzyyxx + + ffgghhii33221100>>??@@AA[[ZZYYXX^^__``aa''&&%%$$kkllmmnnVWWXXYYZCBBAA@@?.//00112kjjiihhg +vwwxxyyz#""!! NOOPPQQRKJJIIHHG&''(())*kjjiiccb/0011223EDDCCBBA<==>>??@""##$$%%wwvvuuttjjkkllmm//..--,,BBCCDDEEWWVVUUTT~~}}|| bbccddee##""!!ooppqqrrZ[[\\]]^?>>==<<;23344556gffeeddc + z{{||}}~RSSTTUUVGFFEEDDC*++,,--.baa``__^399::;;>=@AABBCCD&&''(())ssrrqqppnnooppqq++**))((FFGGHHIISSRRQQPP !!{{zzyyxx + + ffgghhiissttuuvv^__``aab;::998876778899:cbbaa``_~VWWXXYYZCBBAA@@?.//00112^]]\\[[Z<==>>??@=<<;;::9DEEFFGGH**++,,--oonnmmllrrssttuu''&&%%$$JJKKLLMMOONNMMLL""##$$%%wwvvuuttjjkkllmmwwxxyyzz bccddeef76655443:;;<<==>_^^]]\\[Z[[\\]]^?>>==<<;23344556ZYYXXWWV@AABBCCD98877665HIIJJKKL..//0011kkjjiihh vvwwxxyy##""!! NNOOPPQQKKJJIIHH&&''(())ssrrqqppnnooppqq{{ + + fgghhiij3221100/>??@@AAB[ZZYYXXW^__``aab;::998876778899:VUUTTSSRDEEFFGGH54433221LMMNNOOP22334455ggffeedd + + zz{{||}}RRSSTTUUGGFFEEDD**++,,--oonnmmllrrssttuu jkkllmmn/..--,,+BCCDDEEFWVVUUTTS~~}}||{ bccddeef76655443:;;<<==>RQQKKJJIHIIJJKKQ100//..-PQQRRSST66778899ccbbaa``~~VVWWXXYYCCBBAA@@..//0011kkjjiihh vvwwxxyy + + ~}|{nooppqqr+**))(('FGGHHIIJSRRQQPPO !!"{zzyyxxw + + fgghhiij3221100/>??@@AABIHHGGFFEQRRSSTTU-,,++**)TUUVVWWX::;;<<==__^^]]\\ZZ[[\\]]??>>==<<22334455ggffeedd + + zz{{||}}{zzyyxxwrssttuuv'&&%%$$#JKKLLMMNONNMMLLK"##$$%%&wvvuuttsjkkllmmn/..--,,+BCCDDEEFEDDCCBBAUVVWWXXY)((''&&%XYYZZ[[\>>??@@AA[[ZZYYXX^^__``aa;;::998866778899ccbbaa``~~ + +wvvuutts +vwwxxyyz#""!! NOOPPQQRKJJIIHHG&''(())*srrqqpponooppqqr+**))(('FGGHHIIJA@@??>>=YZZ[[\\]%$$##""!\]]^^__`BBCCDDEEWWVVUUTT~~}}|| bbccddee77665544::;;<<==__^^]]\\ srrqqppo + z{{||}}~RSSTTUUVGFFEEDDC*++,,--.onnmmllkrssttuuv'&&%%$$#JKKLLMMN=<<;;::9]^^__``a! `aabbccdFFGGHHIISSRRQQPP !!{{zzyyxx + + ffgghhii33221100>>??@@AA[[ZZYYXX{{onnmmllk~VWWXXYYZCBBAA@@?.//00112kjjiihhg +vwwxxyyz#""!! NOOPPQQR93322110abbcciijdeeffgghJJKKLLMMOONNMMLL""##$$%%wwvvuuttjjkkllmm//..--,,BBCCDDEEWWVVUUTTzzyyxxwwkjjiihgfZ[[\\]]^?>>==<<;23344556gffeeddc + z{{||}}~RSSTTUUV0//..--,jkkllmmnhiijjkklNNOOPPQQKKJJIIHH&&''(())ssrrqqppnnooppqq++**))((FFGGHHIISSRRQQPP !!vvuuttssedccbbaa^__``aab;::998876778899:cbbaa``_~VWWXXYYZ,++**))(nooppqqrlmmnnoopRRSSTTUUGGFFEEDD**++,,--oonnmmllrrssttuu''&&%%$$JJKKLLMMOONNMMLL""##$$%%rrqqppoo!!""##``__^^]]~~}}||{ bccddeef76655443:;;<<==>_^^]]\\[Z[[\\]]^(''&&%%$rssttuuv pqqrrsstVVWWXXYYCCBBAA@@..//0011kkjjiihh vvwwxxyy##""!! NNOOPPQQKKJJIIHH&&''(())nnmmllkk$$%%&&''\\[[ZZYY !!"{zzyyxxw + + fgghhiij3221100/>??@@AAB[ZZYYXXW^__``aab$##""!!vwwxxyyy + + tuuvvwwxxyybdQZ|drtAvpfHAbےv`f~QJHAZp˂bdQZ|fH~˙ے`JXbtlf~HfpvrXQJ`ہdrtf`vXpZHAQbtlXv`fXQJ`ےdrtA`vXnr˂pZHAb|ZdQbnXv`bHAZJltvpfH~ftl|nXv`˒HAZp˂rXbdQZ|~f``JXQlJtf~HvnQJ`ےdrtAvXnZHAbbtl|drtAJltH~f`JXQrfpvZp˂rXQJ`ہdrtf`vXQr˂pJtArdfpvnrXQJ`bHAAJltnvpbے`|ZdQ~fpvbHAZJltvpfZHAbے`JXQtlJf~Hp˂rbdQZ|H~f`vXnZdQbtf~H˂rXQJ`ےdrtAvXnr˂pArd|fpvrXQJ`ۙbHAZpJltvpfHے`JXZdQbtJltbdQZ|`vXn˂p|nXv`rXQJ`ےbHAAJltnvpZHAb|ZdQnXv`ےHAZp˂bdQZ|fH~JXQrbtlnXv`p˂rbdQZ|H~fے`JXQr˂ptArdfpvXQJ`ےdrtA`vXnr˂plJtAfpvQJ`ےbHAZpJltvpfHZHAbہZdQbtnXv`˒HAZp˂rXbdQZ|~f`Qr˂plJtbdQZ|`vXnvpfZdQbtf~HbHAZp˂bdQZ|fH~˙ے`JXbtlf~HZp˂rXQJ`ہdrtf`vXp`JXJtArdf~HXQJ`ےdrtA`vXnr˂pZHAے|ZdQbnXv`bHAZJltvpf`JXQrrd|nXv`fbHAZp˂rbdQZ|~f``JXQlJtf~H˂rXQJ`ےdrtAvXn`JXQArd|drtAvpfH~flJtAfpvZp˂rbdQZ|drtf`vXQr˂pJtArdfpvrXQJ`ےbHAAJltnvpQr˂p|ZdQfpvbHAZJltvpfZHAb`JXQrtlJf~Hp˂rbdQZ|H~f˂pZZdQbt~fpv˂rXbdQZ|drtAvXnr˂pArd|fpvQJ`ےbHAZpJltvpfHr˂pZdQbtJltH~f`vXnrd|nXv`frXQJ`ہdrtAJltnvpZHAb|ZdQnXv`bHAZp˂bdQZ|fH~ˑZHAbbtl|nXv`p˂rbdQZ|H~fے`JXQbtltArdfpvXQJ`ےdrtA`vXnHAbےl|ZnXvQJ`ےdrtAJltvpfHZHAbہZdQbtnXv`˙bHAZp˂rbdQZ|~f`ZHAbۉl|bdQZ|`vXnr˂pZdQbt~fpvbHAAJltbdQZ|fH~˙ے`JXbtlf~HZp˂rbdQZ|drtf`vXے`JXZdQbtf~fpXQJ`ےdrtA`vXnr˂pJtAd|ZdQbnXv`bHAZJltvpf`JXQrdQbt`f~bHAZpJltbdQZ|~f``JXQlJtf~H˂rXbdQZ|drtAvXn`JXQZdQbtdrtAvpf`JXQrl|ZnXvZp˂bdQZ|dtAf`vXQr˂pJtArdfpvrXQJ`ہdrtAJltnvpQr˂plJtvnXbHAZJltvpfZHAb|ZdQbtlJf~Hp˂rbdQZ|H~f˂p`lJtArHfpv˂rXbdQZ|dtAJlvXnr˂pArd|fpvQJ`ےdrtAJltvpfHr˂p`lJtAJltH~f˂pZdQbt`f~rXQJ`ہdrtJltnvpZHAb|ZdQnXv`bHAAJltbdQZ|fH~ˑ`JXQArd|v`fp˂rbdQZ|H~fے`JXQtlJtArdfpvXQJ`ےdrtA`vXnJXQrd|ZnXvQJ`ےdrtAtbvpfHZHAbہZdQbtnXv`˙bHAZpJltbdQZ|~f`JXQrrd|bdQZ|`vXnHAbےlJtArHfpvbHAAJltbnvpfH~˙ے`JXbtlf~HZp˂bdQZ|dtAf`vXr˂pZdQbt~HfpXQJ`ےdrtA`vXnr˂ptArd|ZdQbnXv`bHAZJltvpf˂pZHAdQbt`f~fpbHAZpJltnvp~f``JXQlJtf~H˂rXbdQZ|dtAJlvXn˂pZHZdQbtdrtAvpf`JXQrd|ZnXvZp˂bdQZ|fHf`vXQr˂pJtArdfpvrXQJ`ہdrtJltnvpZHAbۉl|vnXbHAZJltvpfZHAb|ZdQbnXv`f~Hp˂rbdQZ|H~fbے`l|ZdQvnX˂rXbdQZ|fHf`vXnr˂pArd|fpvQJ`ےdrtAtbvpfHAbے`l|ZdJltH~f˂p`dQbt`f~fprXQJ`ہdrtf`vXnvpZHAb|ZdQnXv`bHAAJltbnvpfH~˒`JXQZdQbnXv`ffp˂rbdQZ|H~fے`JXQtlJf~HfpvXQJ`ےdrtA`vXnJXQrbtlv`fQJ`ےdrtAvXnvpfHZHAbہZdQbtnXv`˙bHAZpJltnvp~f`JXQrQbnXbdQZ|`vXnJXQrl|ZdQvnXbHAAJltnvpfH~˙ے`JXbtlf~HZp˂bdQZ|fHf`vXr˂p`v`f~pvnXQJ`ےdrtA`vXnr˂ptArdfpvnXv`bHAZJltvpf˂p`JJtArd~HfpbHAZpJltvpfH~f``JXQlJtf~H˂rXbdQZ|fHf`vXn˂p`v`f~fdrtAvpf˂pZHAbtlv`fZp˂bdQZ|fH~f`vXQr˂pJtArdfpvrXQJ`ہdrtf`vXnvpJXQrfpvrXQJ`bHAZJltvpfZHAb|ZdQbnXv`fHfp˂rbdQZ|H~fXQr˂|ZdQvnX˂rXbdQZ|~f`vXnr˂pArd|fpvQJ`ےdrtAvXnvpfHJXQrbtpvnJltH~fbے`JtArd~HfprXQJ`ہdrtf`vXnr˂pZHAb|ZdQnXv`bHAAJltnvpfH~btl|nXv`ےHAZp˂rbdQZ|H~fے`JXQtlJf~HpvnXQJ`ےdrtA`vXnpZHAbbtlv`f~QJ`ےdrtAvXnr˂pZHAbہZdQbtnXv`˙bHAZpJltvpfH~f`l|Xv`fbdQZ|`vXnJXQr|ZdQvnXbHAAJltnvpZHAbے`JXbtlf~HZp˂bdQZ|fH~f`vXZdQbtf~Hp˂rXQJ`ےdrtA`vXnr˂ptArdfpvrXQJ`bHAZJltvpfے`J|ZdQbfpvbHAZpJltvpfHZHAbے`JXQlJtf~H˂rXbdQZ|~f`vXnZdQbt琕~HfdrtAvpf˂p`Jbtlv`f~Zp˂bdQZ|fH~˙ے`JXQr˂pJtArdfpvrXQJ`ہdrtf`vXnr˂plJtfpvXQJ`ےbHAZJltvpfZHAb|ZdQbnXv`ےHAZp˂rbdQZ|H~fXQr˂tlJnXv`˂rXbdQZ|~f``JXQr˂pArd|fpvQJ`ےdrtAvXnr˂p`lJtApvnJltH~fXQr˂|ZdQbfpvrXQJ`ہdrtf`vXQr˂pZHAۂ|ZdQnXv`bHAAJltnvp`JXQArd|nXv`bHAZp˂rbdQZ|H~fے`JXQtlJf~Hp˂rXQJ`ےdrtA`vXnp`JXQtArdf~HQJ`ےdrtAvXnr˂pZHAے`ZdQbtnXv`˙bHAZpJltvpfHJXQrrd|Xv`fbdQZ|`vXnpZHAbtlJnXv`bHAAJltnvpZHAb`JXQbtlf~HZp˂bdQZ|fH~r˂pZdQbtf~fpp˂rbdQZ|drtA`vXnr˂ptArdfpvXQJ`ےbHAZJltvpfr˂p|ZdQbfpvbHAZpJltvpfHZHAbہJXQrlJtf~H˂rXbdQZ|~f`˂pZHZdQbt~fpvdrtAvpfے`JtArdf~HZp˂bdQZ|fH~˙ے`JXrbtlJtArdfpvrXQJ`ہdrtf`vXZHAbۉl|vnXXQJ`ےdrtAJltvpfZHAb|ZdQbnXv`bHAZp˂rbdQZ|H~fZHAbtl|nXv`˂rXbdQZ|~f``JXQbtlArd|fpvQJ`ےdrtAvXnAbے`l|ZdnXv`JltH~fXQr˂|ZdQbfpvrXQJ`ہdrtf`vXQr˂pJtAd|ZdQnXv`bHAAJltnvp`JXQZdQbtv`fbHAZJltbdQZ|H~fے`JXQtlJf~Hp˂rbdQZ|drtA`vXnے`JXQZdQbtf~fpQJ`ےdrtAvXnr˂pJtAd|ZdQbtnXv`˙bHAZpJltvpfHJXQrQbtlf~HbdQZ|`vXnp`JXQtl|nXv`bHAAJltnvpZHAb|ZdQbtlf~HZp˂bdQZ|fH~r˂p`lJtA~Hfpp˂rbdQZ|dtAJ`vXnr˂ptArdfpvXQJ`ےdrtAJltvpfr˂plJtAvnXbHAZpJltvpfHZHAbہZdQbtlJtf~H˂rXbdQZ|~f`˂p`JtArdfpvv`f~drtAvpfr˂pZdQbtf~fpZp˂bdQZ|fH~˙ے`JXbtlJtArdfpvrXQJ`ہdrtf`vXJXQrrd|vnXXQJ`ےdrtAltbvpfZHAb|ZdQbnXv`bHAZJltbdQZ|H~f`JXQrrd|v`f˂rXbdQZ|~f``JXQlJtArd|fpvQJ`ےdrtAvXnJXQr˙|ZdnXv`fpvJltH~fZHAblJtAvnXrXQJ`ہdrtf`vXQr˂pJtArd|ZdQnXv`bHAAJltnvp˂pZHZdQbtv`f~fbHAZJltnvpH~fے`JXQtlJf~Hp˂rbdQZ|dtAJ`vXn˂pZZdQbt~HfpQJ`ےdrtAvXnr˂pArd|ZdQbnXv`˙bHAZpJltvpfHpZHAQbtlf~fpnXv`bdQZ|`vXnے`JXQrd|v`f󒐙bHAAJltnvpZHAb|ZdQbnXv`f~HZp˂bdQZ|fH~Abے`l|Zdpvnp˂rbdQZ|fHf`vXnr˂ptArdfpvXQJ`ےdrtAltbvpfHAbےl|ZvnXbHAZpJltvpfHZHAbہZdQbtnXv`f~H˂rXbdQZ|~f`bے`|ZdQvnXf~HdrtAvpfr˂pZdQbt~HfpZp˂bdQZ|fH~˙ے`JXbtlf~HfpvrXQJ`ہdrtf`vXJXQrQbtlXv`fXQJ`ےdrtA`vXnvpfZHAb|ZdQbnXv`bHAZJltnvpH~f`JXQrdQbnXv`ffp˂rXbdQZ|~f``JXQlJtf~HfpvQJ`ےdrtAvXnJXQrbtlv`ffpvJltH~f`JXQrl|ZvnXrXQJ`ہdrtf`vXQr˂pJtArdfpvnXv`bHAAJltnvp˂p`JtArd~HfbHAZJltvpfH~fے`JXQtlJf~Hp˂rbdQZ|fHf`vXn˂p`v`f~vnQJ`ےdrtAvXnr˂pArd|fpvnXv`˙bHAZpJltvpfHp`JXJtArd~HfpnXv`fbdQZ|`vXn˂pZdQbnXv`frbHAAJltnvpZHAb|ZdQnXv`fHZp˂bdQZ|fH~JXQr˙|Zdpvnp˂rbdQZ|H~f`vXnr˂ptArdfpvXQJ`ےdrtA`vXnvpfJXQrbfpvrXQJ`ۙbHAZpJltvpfHZHAbہZdQbtnXv`fHfp˂rXbdQZ|~f`Qr˂p|ZdQvnX~fpvnXvbHAZpltbvpfHHAbےZdQbtlJtA~Hf˂rXQdQZ|~f`˂p`JJtArdfpvrXQQZ|dtAJlvXnۉ˂pZHrd|vnXJ`ےrtAJltbdvpfHJXQrXnvˍp|dr`f~˂rXQdQZ|~f``JXQrlJtArd|pvnJ`ےdrtAJvXnXQr˂|ZdQnXv`J`ےrtAJltbnvpfHAbے`ZdQbtv`fbHAZpˑtbdQZ|d~f`˂pZHpfH~QtJlHfpvJ`ےdrtAJvXn˂pZrd|ZdQbnXv`fbHAZpltbvpfHpZHAbbtlf~fpbHAZpˑtbdvpfH~f`JXQrlJtA~HfprXQQZ|dtAJlvXnAbے`f۝`vtbAdZnXvbHAZpltbvpfHHAbےZdQbtXv`f~Hf˂rXQdQZ|~f`ے`J|ZdQbvnXrXQQZ|df`vXnۉ˂pZHrd|vnXJ`ےrtAJltbnvpfHJXQrXnvˍ|dr`ffp˂rXQdQZ|~f``JXQrlJtA~HfpvnJ`ےdrtAJvXnXQr˂tlJv`fJ`ےrtAJlvXnvpfHAbے`ZdQbtv`fbHAZpˑtbdvpfH~f`˂p`ZpfH~QtJlvnrJ`ےdrtAJvXn˂pZrd|pvnXv`fbHAZpltbvpfHp`JXQtArd~HfpbHAZpˑtbdvpfH~f`JXQrlJtA~HfprXQQZ|df`vXnQXb㉀f۝`vtbAdZXQJ`ےbHAZpltbvpfHHAbےZdQbtXv`fHfp˂rXQdQZ|~f`r˂p|ZdQbvnXrXQQZ|d~f`vXnr˂pZHrd|vnXJ`ےrtAJlvXnvpfHۑpJAHrXnvˍ|drHAZp˂rXQdQZ|~f``JXQrlJtA~HfvnrJ`ےdrtAJvXnZHAbtl|v`f~fJ`ےrtAJlvXnۉ˂pZHAbے`ZdQbtv`fbHAZpˑtbdvpfH~f`󙐂ˁ`ZpfH~QtJl˂rXQJ`ےdrtAJvXn˂pZrd|pvnXQJ`ےbHAZpltbvpfHے`JXQZdQbtpvnbHAZpˑtbdvpfHAbے`JXQrlJtA~HfprXQQZ|d~f`vXnے`QXb㉀f۝`vtbAdZJ`ےbHAZpltbvpfHHAbےZdQbtXv`fHAZp˂rXQdQZ|~f`r˂plJtAXv`frXQQZ|d~f`JXQr˂pZHrd|vnXJ`ےrtAJlvXnہJXQrۑp`ZQXnvˍ|drbHAZp˂rbdQZ|~f``JXQrlJtA~Hf˂rXQJ`ےdrtAJvXn`JXQrrd|~HfJ`ےrtAJlvXnۉ˂pZHAے`ZdQbtv`fbHAZpˑtbdvpfH˂pZHXb㉀ۑpfH~QtJl˂rXQdQZ|drtAJvXn˂pZrd|pvnJ`ےbHAZpltbvpfH˂pZZdQbtpvnbHAZpˑtbdvpfHAbے`JXQrbtlJtA~HfprXQQZ|d~f`Abے`pJAHrf۝`vtbAdZJ`ےdrtAJltbvpfHHAbےZdQbtXv`fbHAZp˂rbdQZ|~f`HAbےl|ZXv`frXQQZ|d~f`JXQrlJtrd|vnXJ`ےrtAJlvXnہJXQrˁ`ZQXnvˍ|drbHAZpltbdQZ|~f``JXQrlJtA~Hf˂rXQdQZ|drtAJvXn`JXQrdQbt~fpvJ`ےrtAJlvXnۉ˂pZHAd|ZdQbtv`fbHAZpˑtbdvpfH˂p`Xb㉀ۑpfH~QtJl˂rXQdQZ|dtAJlvXn˂pZrd|pvnJ`ےdrtAJltbvpfH˂p`lJtArnXv`bHAZpˑtbdvpfHAbے`ZdQbtlJtA~HfprXQQZ|d~f`JXQrp`ZQXbf۝`vtbAdZJ`ےdrtAJtbnvpfHHAbےZdQbtXv`fbHAZpltbdQZ|~f`JXQrd|Zf~HrXQQZ|d~f`JXQrlJtArd|vnXJ`ےrtAJlvXnۂpZHA㉀ۑpJXnvˍ|drbHAZpltbvpf~f``JXQrlJtA~Hf˂rXQdQZ|dtAJlvXn˂pZHAdQbt璅fpvJ`ےrtAJlvXnۉ˂pZHrd|ZdQbnXv`fbHAZpˑtbdvpfHbے`AHr󙐂pfH~QtJl˂rXQdQZ|Hf`vXn˂pZrd|pvnJ`ےdrtAJtbnvpfHbے`l|ZdQnXv`bHAZpˑtbdvpfHAbے`ZdQbtv`f~HfprXQQZ|d~f`JXQrˁ`ZQXbf۝`vtbAdZJ`ےdrtAJvXnvpfHHAbےZdQbtXv`fbHAZpltbvpf~f`JXQrbnXvffpۂrXQQZ|d~f`JXQrlJtA~HfpvnXJ`ےrtAJlvXnۂp`JX㉀ۑpXnvˍ|drbHAZpltbvpfH~f``JXQrlJtA~Hf˂rXQdQZ|Hf`vXn˂p`J`f~fpvnrXJ`ےrtAJlvXnۉ˂pZHrd|vnXv`fbHAZpˑtbdvpfHQr˂p`ZQXbpfH~QtJl˂rXQdQZ|~f`vXnr˂pZrd|pvnJ`ےdrtAJvXnvpfHXQrbtvnXQJ`ےbHAZpˑtbdvpfHAbے`ZdQbtv`fHfpۂrXQQZ|d~f`ZHAbۑpJAf۝`vtbAdZJ`ےdrtAJvXn˂pZHAbےZdQbtXv`fbHAZpltbvpfH~f`l|Zv`fHAZp˂rXQQZ|d~f`JXQrlJtA~HfpvnrXJ`ےrtAJlvXnۙے`JXHr󙐂ˁXnvˍ|drbHAZpltbvpfHHAbے`JXQrlJtA~Hf˂rXQdQZ|~f`vXnrdQbt璕~HfprXQJ`ےrtAJlvXnۉ˂pZHrd|vnXQJ`ےbHAZpˑtbdvpfHQr˂p`ZQXbpfH~QtJl˂rXQdQZ|~f``JXQr˂pZrd|pvnJ`ےdrtAJvXn˂p`lJtArvnXJ`ےbHAZpˑtbdvpfHAbے`ZdQbtv`fHAZp˂rXQQZ|d~f``JXQۑp`Zf۝`vtbAdZJ`ےdrtAJvXn˂pZHAے`ZdQbtXv`fbHAZpltbvpfHJXQrd|Zv`f~bHAZp˂rbdQZ|d~f`JXQrlJtA~HfprXQJ`ےrtAJlvXnr˂pQXb㉀Xnvˍ|drbHAZpltbvpfHHAbےJXQrblJtA~Hf˂rXQdQZ|~f`˂pZHAdQbt璅fpvrXQQZ|drtAJlvXnۉ˂pZHrd|vnXJ`ےbHAZpˑtbdvpfHZHAbۑpJAHrpfH~QtJl˂rXQdQZ|~f``JXQrtlJrd|pvnJ`ےdrtAJvXnbے`l|ZdQnXv`J`ےrtAJltbdvpfHAbے`ZdQbtv`fbHAZp˂rbdQZ|d~f``JXQ󙐂ˁ`Zf۝`vtbAdZJ`ےdrtAJvXn˂pZtAd|ZdQbtXv`fbHAZpltbvpfHJXQrbtlf~HbHAZpˑtbdQZ|d~f`JXQrlJtA~HfprXQQZ|drtAJlvXnr˂p`QXb㉀Xnvˍ|drQt}~~IIIIIIIIIIIIIIIIIIIIIJJJJJJJ \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv29_1.dat b/vendor/endroid/qr-code/assets/data/qrv29_1.dat new file mode 100644 index 000000000..294c49ad5 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv29_1.dat @@ -0,0 +1,265 @@ +~}~}~}~}|{|{{{{{{|{|{|{|yyyyyzyzyzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvutstststststststststststqrqrqrqrqrqrqrqropopopopopopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijijijijijghghghghefefefefefefefefdcdcdcdcdcdcdcccbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMKLKLKLKLKLKLKKKKIJIJIJIJIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:9:9:9:9:78787878565656565656565643434343434333332121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!    ~}~}~}~}{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststststststqrqrqrqrqrqrqrqropopopopopopopoponmnmnmnmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijijijijijghghghghefefefefefefefefdcdcdcdccccdcdcdbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMKLKLKLKLKKLKLKLKIJIJIJIJIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:9:9:9:9878787878565656565656565643434343343434342121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!     ~}~}~}~}~}{|{|{|{|{|{|{{{{yzyzyzyzyzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststststststqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijihghghghghghghghefefefefefefefefdcdcdcdccdcdcdcdbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMKLKLKLKLLKLKLKLKIJIJIJIJIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:7878787878787878565656565656565643434343343434342121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        ~}~}~}~}~}~}~}~}{|{|{|{|{{|{|{|{yzyzyzyzyzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststststststqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijghghghghghghghghefefefefefefefefdcdcdcdccdcdcdcdbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMKLKLKLKKLKLKLKLKIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878785656565656565656434343333434343421212121212121212121210/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        ~}~}~}~}~}~}~}~}{|{|{|{||{|{|{|{yzyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststststststqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijghghghghghghghghefefefefefefefefcccccdcdcdcdcdcdbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMKKKKLKLKLKLKLKLKIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878785656565656565656333434343434343421212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        ~}~}~}~}~}~}~}~}{|{|{|{{|{|{|{|{yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststsrqrqrqrqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijghghghghghghghghefefefefefefefefcdcdcdcdcdcdcdcdbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878785656565656565656343434343434343321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        ~}~}~}~}~}~}~}~}{{{{|{|{|{|{|{|{yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnmlklklklklklklklklklklklijijijijijijijijghghghghghghghghefefefefefefefefcdcdcdcdccccccdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKKKKKKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878785656565656565656343434343333434321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        ~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklklklklklijijijijijijijijghghghghghghghghefefefefefefefefcdcdcdcddcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878785656565656565656343434344343434321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        ~}~}~}~}~}~}~}~}|{|{|{|{{{{{{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklklklklklijijijijijijijijghghghghghghghghefefefefefefefefcdcdcdcddcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878785656565656565656343434344343434321212121212121210/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        ~}~}~}~}~}~}~}~}|{|{|{|{{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklklklklklijijijijijijijijghghghghghghghghefefefefefefefefcdccccccdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKKKKKKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABA@?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878785656565656565656333333434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        ~}~}~}~}~}~}~}~}|{|{|{|{{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrqpopopopopopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklklklklklijijijijijijijijghghghghghghghghefefefefefefefefdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:78787878787878785656565656565656434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!        ~}~}~}~}~}~}~}~}|{{{{{{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklkjijijijijijijijijijijijghghghghghghghghefefefefefefedcddcdcdcdcdcdcccccbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMLKLKKLKLKLKLKLKKKKKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:9:9:9:9:78787878787878785656565656543434434343434333334321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!        ~}~}~}~}~}~}~}~}{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijijijijijghghghghghghghghefefefefcdcdccccdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKKKKKKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:9:9:9:9:78787878787878785656565634333333434343434343432121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!        ~}~}~}~}~}~}|{|{{|{|{|{|{|{|{|{yyzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijijijijijghghghghghghghgfefefefefccdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPONMNMNMNMNMKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:9:9:9:9:78787878787876565656565643434343434343432121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!               + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + + + +         + + + + + + + + + + + +         + + + + + + + + + + + +         + + + + + + + + + + + +          + + + + + + + + + + + +             + + + + + + + + + +              + + + + + + + +             + + + + + + + +             + + + + + + + +           + + + + + + + +         + + + + + + + +LLKKJJII55667788mmnnooppZZYYXXWW@@AABBCC~}CBBAA@@?<==>>??@tuuvvwwx]\\[[ZZY%$$##""!LMMNNOOPMLLKKJJI$%%&&''(\]]^^__`uttssrrq=<<;;::945566778lmmnnoopeddccbba-,,++**) DEEFFGGH|}}~~FEEDDCCB GHHIIJJKxxwwvvuu;;::9987==>>??@@uuvvwwxx\\[[ZZYY$$##""!!MMNNOOPPLLKKJJII%%&&''((]]^^__``ttssrrqq<<;;::9955667788mmnnooppddccbbaa,,++**)) EEFFGGHH}}~~EEDDCCBB HHIIJJKKxwwvvuut;::99876 =>>??@@Auvvwwxxy\[[ZZYYX$##""!! MNNOOPPQLKKJJIIH%&&''(()]^^__``atssrrqqp<;;::99856677889mnnooppqdccbbaa`,++**))( EFFGGHHI}~~EDDCCBBA +HIIJJKKQwwvvuutt::998765 >>??@@AAvvwwxxyy[[ZZYYXX##""!! NNOOPPQQKKJJIIHH&&''(())^^__``aassrrqqpp;;::998866778899nnooppqqccbbaa``++**))((FFGGHHII~~DDCCBBAA + +IIJJKKQQ~~}}HHGGFFEE 99::;;<>==<<; + + @AABBCCDxyyzz{{|YXXWWVVU! PQQRRSST~~}IHHGGFFE ())**++,`aabbccdqppoonnm98877665899::;; + + KQQRRSSTttssrrqq65433221 + + AABBCCDDyyzz{{||XXWWVVUU QQRRSSTT~~}}HHGGFFEE ))**++,,aabbccddppoonnmm8877665599::;;<> + + QQRRSSTTtssrrqqp54332211 + + ABBCCDDEyzz{{||}XWWVVUUT QRRSSTTU~~}}|HGGFFEED )**++,,-abbccddepoonnmml877665549::;;<<=qrrssttu`__^^]]\(''&&%%$IJJKKLLMA@@??>>= + QRRSSTTUssrrqqpp43322110 + + BBCCDDEEzz{{||}}WWVVUUTTRRSSTTUU~~}}||GGFFEEDD **++,,--bbccddeeoonnmmll77665544::;;<<==rrssttuu__^^]]\\''&&%%$$JJKKLLMM@@??>>== RRSSTTUU||{{zzyyDDCCBBAA + + ==>>??@@uuvvwwxxRRQQKKJJ + + HHIIJJKKxwwvvuut;::99876 DEEFFGGH|}}~~UTTSSRRQ TUUVVWWX}||{{zzyEDDCCBBA + + ,--..//0deeffgghmllkkjji54433221<==>>??@tuuvvwwx]\\[[ZZY%$$##""!LMMNNOOP>==<<;;: TUUVVWWXppoonnmm100//..- EEFFGGHH}}~~TTSSRRQQ UUVVWWXX||{{zzyyDDCCBBAA + + --..//00eeffgghhllkkjjii44332211==>>??@@uuvvwwxx\\[[ZZYY$$##""!!MMNNOOPP==<<;;::UUVVWWXXpoonnmml00//..-- EFFGGHHI}~~TSSRRQQP !UVVWWXXY|{{zzyyxDCCBBAA@ + + -..//001effgghhilkkjjiih43322110 =>>??@@Auvvwwxxy\[[ZZYYX$##""!! MNNOOPPQ{=<<;;::9UVVWWXXYoonnmmll0//..--,FFGGHHII~~SSRRQQPP !!VVWWXXYY{{zzyyxxCCBBAA@@ + + ..//0011ffgghhiikkjjiihh33221100 >>??@@AAvvwwxxyy[[ZZYYXX##""!! NNOOPPQQ{{<<;;::99VVWWXXYYxxwwvvuu@@??>>== + + AABBCCDDyyzz{{||IIHHGGFF + + QQRRSSTTtssrrqqp54332211HIIJJKKLQPPOONNM !!""##$XYYZZ[[\yxxwwvvuA@@??>>= 01122334hiijjkklihhggffe100//..- + + @AABBCCDxyyzz{{|YXXWWVVU! PQQRRSST{{zzyyx:9933221XYYZZ[[\llkkjjii-,,++**)IIJJKKLLPPOONNMM!!""##$$YYZZ[[\\xxwwvvuu@@??>>==11223344iijjkkllhhggffee00//..-- + + AABBCCDDyyzz{{||XXWWVVUU QQRRSSTT{{zzyyxx99332211YYZZ[[\\lkkjjiih,,++**))IJJKKLLMPOONNMML!""##$$%YZZ[[\\]xwwvvuut@??>>==<12233445ijjkkllmhggffeed0//..--, + + ABBCCDDEyzz{{||}XWWVVUUT QRRSSTTU{zzyyxxw93322110YZZ[[\\]kkjjiihg,++**))(JJKKLLMMOONNMMLL""##$$%%ZZ[[\\]]wwvvuutt??>>==<<22334455jjkkllmmggffeedd//..--,, + + BBCCDDEEzz{{||}}WWVVUUTTRRSSTTUUzzyyxxww33221100ZZ[[\\]]ttssrrqq<<;;::99 EEFFGGHH}}~~EEDDCCBBUUVVWWXXpoonnmml00//..--LMMNNOOPMLLKKJJI$%%&&''(\]]^^__`uttssrrq=<<;;::945566778lmmnnoopeddccbba-,,++**) DEEFFGGH|}}~~UTTSSRRQ TUUVVWWXxwwvvuut100//..-\]]^^__`hgfedccb)((''&&%MMNNOOPPLLKKJJII%%&&''((]]^^__``ttssrrqq<<;;::9955667788mmnnooppddccbbaa,,++**)) EEFFGGHH}}~~TTSSRRQQ UUVVWWXXwwvvuutt00//..--]]^^__``gfedccbb((''&&%%MNNOOPPQLKKJJIIH%&&''(()]^^__``atssrrqqp<;;::99856677889mnnooppqdccbbaa`,++**))( EFFGGHHI}~~TSSRRQQP !UVVWWXXYwvvuutts0//..--,]^^__``afedccbba(''&&%%$NNOOPPQQKKJJIIHH&&''(())^^__``aassrrqqpp;;::998866778899nnooppqqccbbaa``++**))((FFGGHHII~~SSRRQQPP !!VVWWXXYYvvuuttss//..--,,^^__``aappoonnmm88776655IIJJKKLLAA@@??>>YYZZ[[\\lkkjjiih,,++**))PQQRRSST~~}IHHGGFFE ())**++,`aabbccdqppoonnm98877665899::;;>??@tuuvvwwx]\\[[ZZY%$$##""!LMMNNOOPMLLKKJJI$%%&&''(\]]^^__`poonnmml)((''&&%"##$$%%&ijjkkllm^]]\\[[Z!  UUVVWWXX||{{zzyyDDCCBBAA + + --..//00eeffgghhllkkjjii44332211==>>??@@uuvvwwxx\\[[ZZYY$$##""!!MMNNOOPPLLKKJJII%%&&''((]]^^__``oonnmmll((''&&%%##$$%%&&jjkkllmm]]\\[[ZZ  !UVVWWXXY|{{zzyyxDCCBBAA@ + + -..//001effgghhilkkjjiih43322110 =>>??@@Auvvwwxxy\[[ZZYYX$##""!! MNNOOPPQLKKJJIIH%&&''(()]^^__``aonnmmllk(''&&%%$#$$%%&&'jkkllmmn]\\[[ZZY !!VVWWXXYY{{zzyyxxCCBBAA@@ + + ..//0011ffgghhiikkjjiihh33221100 >>??@@AAvvwwxxyy[[ZZYYXX##""!! NNOOPPQQKKJJIIHH&&''(())^^__``aannmmllkk''&&%%$$$$%%&&''kkllmmnnhhggffee00//..--QQRRSSTT{{zzyyxx99332211!!""aabbcciiaa``__^^$$##""!! !!""##$XYYZZ[[\yxxwwvvuA@@??>>= 01122334hiijjkklihhggffe100//..- + + @AABBCCDxyyzz{{|YXXWWVVU! PQQRRSST~~}IHHGGFFE ())**++,`aabbccdlkkjjiic%$$##""!&''(())*mnnooppqZYYXXWWV!!""##$$YYZZ[[\\xxwwvvuu@@??>>==11223344iijjkkllhhggffee00//..-- + + AABBCCDDyyzz{{||XXWWVVUU QQRRSSTT~~}}HHGGFFEE ))**++,,aabbccddkkjjiicc$$##""!!''(())**nnooppqqYYXXWWVV!""##$$%YZZ[[\\]xwwvvuut@??>>==<12233445ijjkkllmhggffeed0//..--, + + ABBCCDDEyzz{{||}XWWVVUUT QRRSSTTU~~}}|HGGFFEED )**++,,-abbccddekjjiiccb$##""!!'(())**+nooppqqrYXXWWVVU""##$$%%ZZ[[\\]]wwvvuutt??>>==<<22334455jjkkllmmggffeedd//..--,, + + BBCCDDEEzz{{||}}WWVVUUTTRRSSTTUU~~}}||GGFFEEDD **++,,--bbccddeejjiiccbb##""!!(())**++ooppqqrrwvvuuttsddccbbaa,,++**)) UUVVWWXXwwvvuutt00//..--##$$%%&&jjkkllmm]]\\[[ZZ $%%&&''(\]]^^__`uttssrrq=<<;;::945566778lmmnnoopeddccbba-,,++**) DEEFFGGH|}}~~UTTSSRRQ TUUVVWWX}||{{zzyEDDCCBBA + + ,--..//0deeffgghcbbaa``_!*++,,--.qrrssttuVUUTTSSR%%&&''((]]^^__``ttssrrqq<<;;::9955667788mmnnooppddccbbaa,,++**)) EEFFGGHH}}~~TTSSRRQQ UUVVWWXX||{{zzyyDDCCBBAA + + --..//00eeffgghhbbaa``__++,,--..rrssttuuUUTTSSRR%&&''(()]^^__``atssrrqqp<;;::99856677889mnnooppqdccbbaa`,++**))( EFFGGHHI}~~TSSRRQQP !UVVWWXXY|{{zzyyxDCCBBAA@ + + -..//001effgghhibaa``__^+,,--../rssttuuvUTTSSRRQ&&''(())^^__``aassrrqqpp;;::998866778899nnooppqqccbbaa``++**))((FFGGHHII~~SSRRQQPP !!VVWWXXYY{{zzyyxxCCBBAA@@ + + ..//0011ffgghhiiaa``__^^,,--..//ssttuuvvsrrqqppo``__^^]]((''&&%%!!""##$$YYZZ[[\\ssrrqqpp,,++**))''(())**nnooppqqYYXXWWVV())**++,`aabbccdqppoonnm98877665899::;;>= 01122334hiijjkkl_^^]]\\[.//00112uvvwwxxyRQQPONML))**++,,aabbccddppoonnmm8877665599::;;<>==11223344iijjkkll^^]]\\[[//001122vvwwxxyyQQPONMLK)**++,,-abbccddepoonnmml877665549::;;<<=qrrssttu`__^^]]\(''&&%%$IJJKKLLMPOONNMML!""##$$%YZZ[[\\]xwwvvuut@??>>==<12233445ijjkkllm^]]\\[[Z/0011223vwwxxyyzQPONMLKK**++,,--bbccddeeoonnmmll77665544::;;<<==rrssttuu__^^]]\\''&&%%$$JJKKLLMMOONNMMLL""##$$%%ZZ[[\\]]wwvvuutt??>>==<<22334455jjkkllmm]]\\[[ZZ00112233wwxxyyzzonnmmllk\\[[ZZYY$$##""!!%%&&''((]]^^__``oonnmmll((''&&%%++,,--..rrssttuuUUTTSSRR,--..//0deeffgghmllkkjji54433221<==>>??@tuuvvwwx]\\[[ZZY%$$##""!LMMNNOOPMLLKKJJI$%%&&''(\]]^^__`uttssrrq=<<;;::945566778lmmnnoop[ZZYYXXW23399::;yzz{{KKJJIIHH --..//00eeffgghhllkkjjii44332211==>>??@@uuvvwwxx\\[[ZZYY$$##""!!MMNNOOPPLLKKJJII%%&&''((]]^^__``ttssrrqq<<;;::9955667788mmnnooppZZYYXXWW3399::;;zz{{KJJIIHHG +-..//001effgghhilkkjjiih43322110 =>>??@@Auvvwwxxy\[[ZZYYX$##""!! MNNOOPPQLKKJJIIH%&&''(()]^^__``atssrrqqp<;;::99856677889mnnooppqZYYXXWWV399::;;>??@@AAvvwwxxyy[[ZZYYXX##""!! NNOOPPQQKKJJIIHH&&''(())^^__``aassrrqqpp;;::998866778899nnooppqqYYXXWWVV99::;;<<{{kjjiihgfXXWWVVUU ))**++,,aabbccddkkjjiicc$$##""!!//001122vvwwxxyyQQPONMLK01122334hiijjkklihhggffe100//..- + + @AABBCCDxyyzz{{|YXXWWVVU! PQQRRSST~~}IHHGGFFE ())**++,`aabbccdqppoonnm98877665899::;;>?GGFFEEDD + + 11223344iijjkkllhhggffee00//..-- + + AABBCCDDyyzz{{||XXWWVVUU QQRRSSTT~~}}HHGGFFEE ))**++,,aabbccddppoonnmm8877665599::;;<>??GFFEEDDC + 12233445ijjkkllmhggffeed0//..--, + + ABBCCDDEyzz{{||}XWWVVUUT QRRSSTTU~~}}|HGGFFEED )**++,,-abbccddepoonnmml877665549::;;<<=qrrssttuVUUTTSSR <==>>??@FFEEDDCC 22334455jjkkllmmggffeedd//..--,, + + BBCCDDEEzz{{||}}WWVVUUTTRRSSTTUU~~}}||GGFFEEDD **++,,--bbccddeeoonnmmll77665544::;;<<==rrssttuuUUTTSSRR ==>>??@@edccbbaaTTSSRRQQ--..//00eeffgghhbbaa``__3399::;;zz{{KJJIIHHG +45566778lmmnnoopeddccbba-,,++**) DEEFFGGH|}}~~UTTSSRRQ TUUVVWWX}||{{zzyEDDCCBBA + + ,--..//0deeffgghmllkkjji54433221<==>>??@tuuvvwwxSRRQQKKJ + + ?@@AABBC~CCBBAA@@55667788mmnnooppddccbbaa,,++**)) EEFFGGHH}}~~TTSSRRQQ UUVVWWXX||{{zzyyDDCCBBAA + + --..//00eeffgghhllkkjjii44332211==>>??@@uuvvwwxxRRQQKKJJ + + @@AABBCC~}CBBAA@@?56677889mnnooppqdccbbaa`,++**))( EFFGGHHI}~~TSSRRQQP !UVVWWXXY|{{zzyyxDCCBBAA@ + + -..//001effgghhilkkjjiih43322110 =>>??@@AuvvwwxxyRQQKKJJI + + @AABBCCD~}|BBAA@@??66778899nnooppqqccbbaa``++**))((FFGGHHII~~SSRRQQPP !!VVWWXXYY{{zzyyxxCCBBAA@@ + + ..//0011ffgghhiikkjjiihh33221100 >>??@@AAvvwwxxyyQQKKJJII + + AABBCCDD~}|{``__^^]]PPOONNMM11223344iijjkkll^^]]\\[[<<==>>??GFFEEDDC + 899::;;>= 01122334hiijjkklihhggffe100//..- + + @AABBCCDxyyzz{{|JIIHHGGFCDDEEFFG}|{{zzyy??>>==<<99::;;<>==11223344iijjkkllhhggffee00//..-- + + AABBCCDDyyzz{{||IIHHGGFFDDEEFFGG|{{zzyyx?>>==<<;9::;;<<=qrrssttu`__^^]]\(''&&%%$IJJKKLLMPOONNMML!""##$$%YZZ[[\\]xwwvvuut@??>>==<12233445ijjkkllmhggffeed0//..--, + + ABBCCDDEyzz{{||}IHHGGFFEDEEFFGGH{{zzyyxx>>==<<;;::;;<<==rrssttuu__^^]]\\''&&%%$$JJKKLLMMOONNMMLL""##$$%%ZZ[[\\]]wwvvuutt??>>==<<22334455jjkkllmmggffeedd//..--,, + + BBCCDDEEzz{{||}}HHGGFFEEEEFFGGHH{zzyyxxw\\[[ZZYYXXWWVVUU"##$$%%&Z[[\\]]^wvvuutts?>>==<<;23344556jkkllmmngffeeddc/..--,,+ + BCCDDEEFz{{||}}~WVVUUTTSRSSTTUUV~~}}||{GFFEEDDC *++,,--.bccddeefbaa``__^399::;;>= + + @AABBCCDTTSSRRQQ&''(())*^__``aabsrrqqppo;::998876778899:nooppqqrcbbaa``_+**))(('FGGHHIIJ~SRRQQPPO !!"VWWXXYYZ{zzyyxxwCBBAA@@? + + .//00112fgghhiij^]]\\[[Z<==>>??@uttssrrq=<<;;::9 DEEFFGGHPONMLKKJ *++,,--.bccddeefonnmmllk76655443:;;<<==>rssttuuv_^^]]\\['&&%%$$#JKKLLMMNONNMMLLK"##$$%%&Z[[\\]]^wvvuutts?>>==<<;23344556jkkllmmnZYYXXWWV@AABBCCDqppoonnm98877665HIIJJKKLJIIHHGGF + + .//00112fgghhiijkjjiihhg3221100/ +>??@@AABvwwxxyyz[ZZYYXXW#""!! NOOPPQQRKJJIIHHG&''(())*^__``aabsrrqqppo;::998876778899:nooppqqrVUUTTSSR DEEFFGGHmllkkjji54433221LMMNNOOPFEEDDCCB 23344556jkkllmmngffeeddc/..--,,+ + BCCDDEEFz{{||}}~WVVUUTTSRSSTTUUV~~}}||{GFFEEDDC *++,,--.bccddeefonnmmllk76655443:;;<<==>rssttuuvRQQKKJJI + + +HIIJJKKQihhggffe100//..-PQQRRSSTBAA@@??>6778899:nooppqqrcbbaa``_+**))(('FGGHHIIJ~SRRQQPPO !!"VWWXXYYZ{zzyyxxwCBBAA@@? + + .//00112fgghhiijkjjiihhg3221100/ +>??@@AABvwwxxyyzIHHGGFFE + QRRSSTTUeddccbba-,,++**) TUUVVWWX>==<<;;::;;<<==>rssttuuv_^^]]\\['&&%%$$#JKKLLMMNONNMMLLK"##$$%%&Z[[\\]]^wvvuutts?>>==<<;23344556jkkllmmngffeeddc/..--,,+ + BCCDDEEFz{{||}}~EDDCCBBAUVVWWXXYa``__^^])((''&&% !!""##$XYYZZ[[\:9987654 +>??@@AABvwwxxyyz[ZZYYXXW#""!! NOOPPQQRKJJIIHHG&''(())*^__``aabsrrqqppo;::998876778899:nooppqqrcbbaa``_+**))(('FGGHHIIJ~A@@??>>=YZZ[[\\]]\\[[ZZY%$$##""!$%%&&''(\]]^^__`33221100 + BCCDDEEFz{{||}}~WVVUUTTSRSSTTUUV~~}}||{GFFEEDDC *++,,--.bccddeefonnmmllk76655443:;;<<==>rssttuuv_^^]]\\['&&%%$$#JKKLLMMN||{=<<;;::9]^^__``aYXXWWVVU! ())**++,`aabbccd//..--,,FGGHHIIJ~SRRQQPPO !!"VWWXXYYZ{zzyyxxwCBBAA@@? + + .//00112fgghhiijkjjiihhg3221100/ +>??@@AABvwwxxyyz[ZZYYXXW#""!! NOOPPQQR{zzyyxxw93322110!!""#abbcciijUTTSSRRQ,--..//0deeffggh++**))((JKKLLMMNONNMMLLK"##$$%%&Z[[\\]]^wvvuutts?>>==<<;23344556jkkllmmngffeeddc/..--,,+ + BCCDDEEFz{{||}}~WVVUUTTSRSSTTUUVwvvuutts0//..--,#$$%%&&'jkkllmmnQPPOONNM01122334hiijjkkl''&&%%$$NOOPPQQRKJJIIHHG&''(())*^__``aabsrrqqppo;::998876778899:nooppqqrcbbaa``_+**))(('FGGHHIIJ~SRRQQPPO !!"VWWXXYYZsrrqqppo,++**))('(())**+nooppqqrMLLKKJJI45566778lmmnnoop##""!! RSSTTUUV~~}}||{GFFEEDDC *++,,--.bccddeefonnmmllk76655443:;;<<==>rssttuuv_^^]]\\['&&%%$$#JKKLLMMNONNMMLLK"##$$%%&Z[[\\]]^onnmmllk(''&&%%$+,,--../rssttuuvIHHGGFFE 899::;;??@@AABvwwxxyyz[ZZYYXXW#""!! NOOPPQQRKJJIIHHG&''(())*^__``aabkjjiiccb$##""!!/0011223vwwxxyyyEDDCCBBA + + <==>>??@tuuvvwwxxyybdQZ|JltdrtAH~fvpfbے`HAbےJtArdv`f~~HfpQJHArXQJ`Zp˂drtbdQZ|f`vXfH~nr˂pے`JXZHAbbtl|ZdQf~HnXv`fpv㒐bHArXQJ`AJltdrtnvpf`vXfH~˂pZHAbtl|QbtlnXv`Xv`fےHAZXQJ`ےp˂rdrtAbdQZ|`vXnH~fr˂pے`JXQZHAbtlJ|ZdQbf~HnXv`pvnbHAZXQJ`ےJltdrtAvpf`vXnH~fpZHAbtl|btlnXv`˕v`f~HAZpQJ`ے˂rXdrtAbdQZ|vXn~f`r˂p`JXQZHAbۉlJtZdQbtf~HnXv`˝vnbHAZpQJ`ےJltdrtAvpfHvXn~f`ZHAbl|btl|Xv`fv`f~HAZpJ`ے˂rXQdrtAJdQZ|vXn~f`˂pZ`JXQrHAbےlJtAZdQbt~HfXv`fvnrbHAZpJ`ےltbdrtAJvpfHvXn~f`ZHAbl|Ztl|drtAbdQZ|Jlt`vXnH~fJXQr`JXQr|ZdQfpvvnXZp˂󒐙bHArXQJ`AJltdrtnvpf`vXZHAbQr˂pے`JXJtArdbtlfpvf~HnrXQJ`Zp˂󒐙bHAbdQZ|AJltfH~nvpf`vXbے`ZdQbt|ZdQf~H~fpvp˂rbHAZXQJ`ےJltdrtAvpf`vXnZHAbr˂pے`JXQtArdtlJfpvf~HrXQJ`p˂rbHAZbdQZ|JltH~fvpf`vXnے`JZdQbt|ZdQbf~Hfpv˂rXbHAZpQJ`ےJltdrtAvpfHvXnZHAbr˂p`JXQArd|lJtfpvf~HrXQJ`ۑ˂rXbHAZpbdQZ|Jlt~f`vpfHvXnے`JXZdQbtZdQbt~Hffpv˂rXQbHAZpJ`ےltbdrtAJvpfHvXnHAbے˂pZ`JXQrrd|lJtApvn~HfXQJ`ے˂rXQbHAZpdQZ|ltb~f`vpfHvXnrے`JXQdQbtZdQbtJltdrtAbdQZ|vpf`vXn˂p`J˂p|btlnXv`˕v`f~rXQJ`Zp˂󒐙bHAbdQZ|AJltfH~nvpے`JXZHAbQr˂p|ZdQJtArdnXv`fpvےHArXQJ`Zp˂drtbdQZ|f`vXfH~nr˂pJXQrˉlJtbtlfpvnXv`XQJ`ےp˂rbHAZbdQZ|JltH~fvpfے`JXQZHAbr˂p|ZdQbtArdnXv`fpvےHAZXQJ`ےp˂rdrtAbdQZ|`vXnH~fr˂pXQr˂lJtAtlJfpvnXv`QJ`ے˂rXbHAZpbdQZ|Jlt~f`vpfH`JXQZHAbr˂pZdQbtArd|nXv`fpv㒐HAZpQJ`ے˂rXdrtAbdQZ|vXn~f`r˂p`Qr˂plJtAlJtpvnnXv`J`ے˂rXQbHAZpdQZ|ltb~f`vpfH`JXQrHAbے˂pZZdQbtrd|Xv`fpvnHAZpJ`ے˂rXQdrtAJdQZ|vXn~f`˂p`r˂plJtArlJtAbdQZ|Jlt`vXnH~fvpfXQr˂ZdQbt|ZdQbf~HfpvbHArXQJ`Zp˂drtbdQZ|f`vXfH~Qr˂pے`JXZHAbtl|ZdQf~HnXv`Zp˂󒐙bHArXQJ`AJltdrtnvpf`vX`JXQp`JXArd|JtArdnXv`f~HbHAZXQJ`ےp˂rdrtAbdQZ|`vXnH~fr˂pے`JXQZHAےtlJ|ZdQbf~HnXv`p˂rbHAZXQJ`ےJltdrtAvpf`vXn`JXQrp`JXQrd|tArdnXv`ff~HbHAZpQJ`ے˂rdrtAbdQZ|vXn~f`r˂p`JXQZHAے`lJtZdQbtf~HnXv`ˑ˂rXbHAZpQJ`ےJltdrtAvpfHvXnJXQr`JXQrd|Ard|Xv`ff~HbHAZpJ`ے˂rbdrtAJdQZ|vXn~f`˂pZ`JXQrHAے`lJtAZdQbt~HfXv`f˂rXQbHAZpJ`ےltbdrtAJvpfHvXnJXQr`JXQrd|Zrd|drtAbdQZ|vpf`vXnH~fpZHAblJtAtlJfpvnXv`Zp˂󒐙bHArbdQZ|AJltdrtnvpf`vXZHAbQr˂p`JXQJtArdbtlfpvf~HrXQJ`Zp˂󒐙bHAbdQZ|AJltfH~nvpr˂pQr˂pZdQbt|ZdQf~fpۅfpvp˂rbHAZbdQZ|JltdrtAvpf`vXnZHAbr˂p`JXQrtArdtlJfpvf~HXQJ`ےp˂rbHAZbdQZ|JltH~fvpf˂pZr˂pZdQbt|ZdQb~fpvfpv˂rXbHAZpbdQZ|JltdrtAvpfHvXnZHAbr˂pJXQrArd|lJtfpvf~HQJ`ے˂rXbHAZpbdQZ|Jlt~f`vpfH˂pZHr˂pZdQbtZdQbt~fpvfpv˂rXQbHAZpdQZ|ltbdrtAJvpfHvXnHAbے˂pZJXQrbrd|lJtApvn~HfJ`ے˂rXQbHAZpdQZ|ltb~f`vpfH˂pZHA˂pZdQbtZdQbtJltdrtAH~fvpf`vXnے`Jrd|tArdnXv`ff~HrXQJ`Zp˂drtbdQZ|AJltfH~nvpے`JXZHAbrbtl|ZdQJtArdnXv`fpvbHArXQJ`Zp˂drtbdQZ|f`vXfH~ZHAbۑZHAbl|btl|vnXnXv`XQJ`ےp˂rdrtAbdQZ|JltH~fvpfے`JXQZHAbbtl|ZdQbtArdnXv`fpvbHAZXQJ`ےp˂rdrtAbdQZ|`vXnH~fHAbےZHAbl|Ztl|nXvnXv`QJ`ے˂rXdrtAbdQZ|Jlt~f`vpfH`JXQZHAbbtlZdQbtArd|nXv`fpvbHAZpQJ`ے˂rdrtAbdQZ|vXn~f`Abے`ZHAbےl|Zdl|nXv`nXv`fJ`ے˂rXQdrtAJdQZ|ltb~f`vpfH`JXQrHAbےtlJZdQbtrd|Xv`fpvnbHAZpJ`ے˂rbdrtAJdQZ|vXn~f`bے`HAbےl|ZdQl|ZbdQZ|Jlt`vXnH~fr˂pXQr˂ZdQbt|ZdQb~fpvfpvbHArXQJ`AJltdrtbdQZ|f`vXfH~Qr˂pے`JXJtAdbtl|ZdQf~HnXv`Zp˂󒐙bHArbdQZ|AJltdrtnvpf`vX`JXQے`JXZdQbtZdQbtv`ff~fpbHAZXQJ`ےJltdrtAbdQZ|`vXnH~fr˂pے`JXQJtAdtlJ|ZdQbf~HnXv`p˂rbHAZbdQZ|JltdrtAvpf`vXn`JXQrے`JXQdQbtZdQbt`f~f~fpۙbHAZpQJ`ےJltdrtAbdQZ|vXn~f`r˂p`JXQJtAd|lJtZdQbtf~HnXv`ˑ˂rXbHAZpbdQZ|JltdrtAvpfHvXnJXQr`JXQQbtlZdQbtf~H~fpvbHAZpJ`ےltbdrtAJdQZ|vXn~f`˂pZ`JXQrtAd|lJtAZdQbt~HfXv`f˂rXQbHAZpdQZ|ltbdrtAJvpfHvXnJXQr`JXQrbtldQbtdrtAbdQZ|vpf`vXn`JXQrp`JXQl|Ztl|nXvnXv`Zp˂󒐙bHAbdQZ|AJltdtAnvpf`vXZHAbQr˂p|ZdQJtArdbtlfpvf~HrXQJ`Zp˂drtbdQZ|AJltfH~nvpr˂p`Qr˂plJtAlJt~HfpvnXp˂rbHAZbdQZ|JltdtAJvpf`vXnZHAbr˂p|ZdQbtArdtlJfpvf~HXQJ`ےp˂rdrtAbdQZ|JltH~fvpf˂p`r˂plJtArlJtAHfpvvnX˂rXbHAZpbdQZ|JltdtAJlvpfHvXnZHAbr˂pZdQbtArd|lJtfpvf~HQJ`ے˂rXdrtAbdQZ|Jlt~f`vpfH˂p`r˂p`JtArdlJtAfpvnXv˂rXQbHAZpdQZ|ltbdtAJlvpfHvXnHAbے˂pZZdQbtrd|lJtApvn~HfJ`ے˂rXQdrtAJdQZ|ltb~f`vpfH˂p`J˂p`JtArdlJtArv`fJltdrtAH~fvpf˂pZr˂pdQbtZdQbt`f~f~fprXQJ`Zp˂drtbdQZ|JltfH~nvpے`JXZHAbbtl|ZdQJtArdnXv`fpvbHArXQJ`AJltdrtbdQZ|f`vXfH~ˁJXQr`JXQrd|Ard|vnXv`fXQJ`ےp˂rdrtAbdQZ|ltbH~fvpfے`JXQZHAbtlJ|ZdQbtArdnXv`fpvbHAZXQJ`ےJltdrtAbdQZ|`vXnH~fJXQr`JXQrd|Zrd|nXvv`fQJ`ے˂rXdrtAbdQZ|tb~f`vpfH`JXQZHAbۉlJtZdQbtArd|nXv`fpvbHAZpQJ`ےJltdrtAbdQZ|vXn~f`JXQrˁJXQr|Zdrd|nXv``f~J`ے˂rXQdrtAJdQZ|tbn~f`vpfH`JXQrHAbےlJtAZdQbtrd|Xv`fpvnbHAZpJ`ےltbdrtAJdQZ|vXn~f`XQr˂JXQr|ZdQd|Z~HfpbdQZ|Jlt`vXnH~fHAbےZHAblJtArlJtAHfpvvnXbHArXQJ`AJltdrtbnvpf`vXfH~Qr˂pے`JXJtArdbtl|ZdQf~HnXv`Zp˂󒐙bHAbdQZ|AJltdtAnvpf`vX˂pZHr˂pZdQbtZdQbtv`f~f~HfpbHAZXQJ`ےJltdrtAnvp`vXnH~fr˂pے`JXQtArdtlJ|ZdQbf~HnXv`p˂rbHAZbdQZ|JltdtAJvpf`vXn˂pZHA˂pZdQbtZdQbt`f~fp~HfpۙbHAZpQJ`ےJltdrtAnvpvXn~f`r˂p`JXQArd|lJtZdQbf~HnXv`ˑ˂rXbHAZpbdQZ|JltdtAJlvpfHvXnpZHA˂pZHQbtlZdQbtf~fpHfpvbHAZpJ`ےltbdrtAJvpfvXn~f`˂pZ`JXQrrd|lJtAZdQbn~HfXv`f˂rXQbHAZpdQZ|ltbdtAJlvpfHvXnpZHAb˂pZHAbtldQbt璝vnXdrtAbdQZ|vpf`vXn`JXQrے`JXQd|Zrd|nXvv`fZp˂󒐙bHAbdQZ|AJltfHnvpf`vXZHAbQr˂p|ZdQJtArdbnXv`fpvf~HrXQJ`Zp˂drtbdQZ|JltfH~nvpAbے`ZHAbےl|Zdl|pvnvnXp˂rbHAZbdQZ|JltfHfvpf`vXnZHAbr˂p|ZdQbtArdnXv`fpvf~HXQJ`ےp˂rdrtAbdQZ|ltbH~fvpfbے`HAbےl|ZdQl|ZvnXvnX˂rXbHAZpbdQZ|JltfHf`vpfHvXnZHAbr˂pZdQbtArd|nXv`fpvf~HQJ`ے˂rXdrtAbdQZ|tb~f`vpfHbے`Abے`|ZdQl|ZdvnXnXv˂rXQbHAZpdQZ|ltbHf`vpfHvXnHAbے˂pZZdQbtrd|Xv`fpvn~HfJ`ے˂rXQdrtAJdQZ|tbn~f`vpfHے`Jbے`|ZdQbl|ZdQv`f~JltdrtAH~fvpf˂p`r˂pdQbtZdQbt`f~fp~HfprXQJ`Zp˂drtbdQZ|f`vXfH~nvpے`JXZHAbbtl|ZdQf~HnXv`fpvbHArXQJ`AJltdrtbnvpf`vXfH~ˁJXQr`JXQQbtlZdQbnXXv`fv`ffXQJ`ےp˂rdrtAbdQZ|`vXnH~fvpfے`JXQZHAbtlJ|ZdQbf~HnXv`fpvbHAZXQJ`ےJltdrtAnvp`vXnH~fJXQr`JXQrbtldQbnXv`fv`ffpQJ`ے˂rXdrtAbdQZ|vXn~f`vpfH`JXQZHAbۉlJtZdQbtf~HnXv`fpvbHAZpQJ`ےJltdrtAnvpvXn~f`JXQrˁJXQrbtlQbnXv`f`ffpJ`ے˂rXQdrtAJdQZ|vXn~f`vpfH`JXQrHAbےlJtAZdQbt~HfXv`fpvnbHAZpJ`ےltbdrtAJvpfvXn~f`XQr˂JXQrtlJbnXvfpvbdQZ|Jlt`vXnH~fJXQr`JXQrl|ZdQl|ZvnXvnXbHArXQJ`AJltdrtnvpf`vXfH~Qr˂pے`JXJtArdbtlfpvf~HnXv`Zp˂󒐙bHAbdQZ|AJltfHnvpf`vX˂p`r˂p`JtArdv`f~~HfpvnbHAZXQJ`ےJltdrtAvpf`vXnH~fr˂pے`JXQtArdtlJfpvf~HnXv`p˂rbHAZbdQZ|JltfHfvpf`vXn˂p`J˂p`JtArdv`f~~HfpvnbHAZpQJ`ےJltdrtAvpfHvXn~f`r˂p`JXQArd|lJtfpvf~HnXv`ˑ˂rXbHAZpbdQZ|JltfHf`vpfHvXnp`JX˂p`JtArdv`f~f~HfpvnrbHAZpJ`ےltbdrtAJvpfHvXn~f`˂pZ`JXQrrd|lJtApvn~HfXv`f˂rXQbHAZpdQZ|ltbHf`vpfHvXnp`JXQ˂p`JtArd`f~fpnXv`drtAbdQZ|vpf`vXn˂pZHA˂pZbtldQbnXv`fv`frZp˂󒐙bHAbdQZ|AJltfH~nvpf`vXZHAbQr˂p|ZdQJtArdnXv`fpvfHrXQJ`Zp˂drtbdQZ|f`vXfH~nvpJXQrˁJXQr|ZdfpvpvnrXQJ`p˂rbHAZbdQZ|JltH~fvpf`vXnZHAbr˂p|ZdQbtArdnXv`fpvfHfXQJ`ےp˂rdrtAbdQZ|`vXnH~fvpfXQr˂JXQrb|ZdQfpvvnXrXQJ`ۑ˂rXbHAZpbdQZ|Jlt~f`vpfHvXnZHAbr˂pZdQbtArd|nXv`fpvfHfpQJ`ے˂rXdrtAbdQZ|vXn~f`vpfHQr˂pJXQrbt|ZdQpvnvnXXQJ`ے˂rXQbHAZpdQZ|ltb~f`vpfHvXnrHAbے˂pZZdQbtrd|Xv`fpvnHfpJ`ے˂rXQdrtAJdQZ|vXn~f`vpfHr˂pXQrbt|ZdQbvnXf~HfpvnXv`rXQbHAZpQZ|dtbdtAJlvpfHvXnAbے`˂pZHZdQbtrd|lJtAvnX~HfpJ`ےむrXQrtAJlQZ|dtbd~f`vpfHJXQrˁJXQrp`ZQXbXnvˍf۝`vp|drtbAdZnXv`f~HJ`ےむrXQrtAJlQZ|dtbn~f`vpfHJXQrAbے`lJtAZdQbtrd|v`fvnXbHAZpJ`ےtbdrtAJlQZ|dvXn~f`pZHA˂pZH㉀ۑpJpfH~XnvˍQtJl|drf~fpۅfpvbHAZpJ`ےtbdrtAJlvpfHvXn~f`˂pZHJXQrrd|lJtAZdQbnX~Hfpv`frXQbHAZpQZ|dtbdtAJlvpfHvXnbے`Abے`AHr󙐂f۝`vpfH~tbAdZQtJlvnXnXv`rXQbHAZpQZ|dtbdf`vpfHvXnAbے`˂pZHZdQbtrd|v`fvnX~HfpJ`ےむrXQrtAJlQZ|dtbn~f`vpfHJXQrˁJXQrˁ`ZQXbXnvˍf۝`v|drtbAdZv`fffpJ`ےむrXQrtAJlQZ|dvXn~f`vpfHJXQrAbے`lJtAZdQbt~Hfpv`fvnXbHAZpJ`ےtbdrtAJlvpfHvXn~f`p`JX˂p`Z㉀ۑppfH~XnvˍQtJl|dr~HfpvnrXbHAZpJ`ےtbdrtAJlvpfHvXn~f`˂pZHJXQrrd|lJtAvnX~Hfpv`frXQbHAZpQZ|dtbdf`vpfHvXnQr˂pQXb㉀`ZQXb㉐f۝`vpfH~tbAdZQtJlvnXQJ`ےrXQbHAZpQZ|dtbd~f`vpfHvXnrAbے`˂pZHZdQbtrd|v`fvnXHfpJ`ےむrXQrtAJlQZ|dvXn~f`vpfHZHAbۑpJAHrۑpJAXnvˍf۝`v|drtbAdZv`f~fHAZpJ`ےむrXQrtAJlQZ|dvXn~f`˂pZHJXQrAbے`lJtAZdQbt~Hfpv`fvnrXbHAZpJ`ےtbdrtAJlvpfHvXn~f`ے`JX󙐂ˁ`ZHr󙐂ˁpfH~XnvˍQtJl|drpvnrXQbHAZpJ`ےtbdrtAJlvpfHvXnAbے`˂pZHJXQrrd|lJtAvnX~HfpQJ`ےrXQbHAZpQZ|dtbd~f`vpfHvXnے`Qr˂pQXb㉀`ZQXb㉐f۝`vpfH~tbAdZQtJlXv`fJ`ےむrXQbHAZpQZ|dtbd~f`vpfHJXQrAbے`˂pZHZdQbtrd|v`fvnXHAZpJ`ےむrXQrtAJlQZ|dvXn~f`JXQr`JXQۑp`ZQۑp`ZXnvˍf۝`v|drtbAdZ~HfbHAZpJ`ےむrbdrtAJlQZ|dvXn~f`˂pZHJXQrAے`lJtAZdQbt~Hfpv`frXQbHAZpJ`ےtbdrtAJlvpfHvXnۉ˂pZHr˂pXb㉀ۑQXb㉀pfH~XnvˍQtJl|drpvnrXQbHAZpQZ|dtbdrtAJlvpfHvXnAbے`˂pZHJXQrbtrd|lJtAvnX~HfpJ`ےむrXQbHAZpQZ|dtbd~f`vpfHAbے`ZHAbpJAHrۑpJAHrf۝`vpfH~tbAdZQtJlXv`fJ`ےむrXQrtAJlQZ|dtbd~f`vpfHJXQrAbے`lJtZdQbtrd|v`fvnXbHAZpJ`ےむrbdrtAJlQZ|dvXn~f`JXQr`JXQˁ`ZQ󙐂ˁ`ZXnvˍf۝`v|drtbAdZ~fpvbHAZpJ`ےtbdrtAJlQZ|dvXn~f`˂pZHJXQrAd|lJtAZdQbt~Hfpv`frXQbHAZpQZ|dtbdrtAJlvpfHvXnۉ˂p`r˂p`Xb㉀ۑQXb㉀pfH~XnvˍQtJl|drQt}~~ \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv29_2.dat b/vendor/endroid/qr-code/assets/data/qrv29_2.dat new file mode 100644 index 000000000..2b36dd3c3 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv29_2.dat @@ -0,0 +1,265 @@ +~}~}~}~}{|{|{|{|wxwxwxwxuvuvuvuvststststopopopopmnmnmnmnijijijijghghghghcdcdcdcdbabababa^]^]^]^]\[\[\[\[~}~}~}~}{|{|{|{|wxwxwxwxuvuvuvuvsrqrqrqropopopopmnmnmnmnijijijijghghghghcdcdcdcdbabababa^]^]^]^]\[\[\[\[~}~}~}~}{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijghghghghcdcdcdcdbabababa^]^]^]^]\[\[\[\[~}~}~}~}{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijghghghghcdcdcdcdbabababa^]^]^]^]\[\[\[\[~}~}~}~}{|{|{|{ywxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijghghghghcdccccccbabababa^]^]^]^]\[\[\[\[~}~}~}~}yyyyyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijghghghghdcdcdcdcbabababa^]^]^]^]\[\[\[\[~}~}~}~}yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijghghghghdcdcdcdcbabababa^]^]^]^]\[\[\[\[~}~}~}~}yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijghghghghdcdcdcdcbabababa^]^]^]^]\[\[\[\[~}~}~}~}yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijghghghghdcdcdcdcbabababa^]^]^]^]\[\[\[\[~}~}~}~}yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijghghghghdcdcdcccbabababa^]^]^]^]\[\[\[\[~}~}~}~}yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmlklklklijijijijghghghghcccdcdcd`_`_`_`_^]^]^]^]\[\[\[\[~}~}~}~}yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklijijijijghghghgfcdcdcdcd`_`_`_`_^]^]^]^]\[\[\[\[~}~}~}~}yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklijijijijefefefefcdcdcdcd`_`_`_`_^]^]^]^]\[\[\[\[~}~}~}~}yzyzyzyzwxwxwxwxutstststqrqrqrqropopopopklklklklijijijijefefefefcdcdcdcd`_`_`_`_^]^]^]^]\[\[\[\[~}~}~}~}yzyzyzyzwxwxwxwxststststqrqrqrqropopopopklklklklijijijijefefefefcdcdcdcd`_`_`_`_^]^]^]^]\[\[\[\[~}~}~}~}yzyzyzyzwxwxwxwxststststqrqrqrqropopopopklklklklijijijijefefefefccccccdc`_`_`_`_^]^]^]^]\[\[\[\[~}~}~}~}yzyzyzyzwxwxwxwxststststqrqrqrqropopopopklklklklijijijijefefefefdcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[~}~}~}~}yzyzyzyzwxwxwxwxststststqrqrqrqropopopopklklklklijijijijefefefefdcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[~}~}~}~}yzyzyzyzwxwxwxwxststststqrqrqrqropopopopklklklklijijijijefefefefdcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[~}~}~}~}yzyzyzyzwxwxwxwxststststqrqrqrqropopopopklklklklijijijijefefefefdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYZYZYZYZY~}~}~}~}yzyzyzyzwxwxwxwxststststqrqrqrqropopopopklklklklijijijijefefefefdcdccccc`_`_`_`_^]^]^]^]ZYZYZYZYZYZYZYZY~}~}|{|{yzyzyzyzwxwxwxwxststststqrqrqrqropopopopklklklklijijijijefefefefdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYZYZYZYZY|{|{{{{{yzyzyzyzwxwxwxwxststststqrqrqrqronmnmnmnklklklklijijijijefefefefbabababa`_`_`_`_^]^]^]^]ZYZYZYZYZYZYZYZY{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnklklklklijijijijefefefefbabababa`_`_`_`_^]^]^]^]ZYZYZYZYZYZYZYZY{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnklklklklijijijijefefefefbabababa`_`_`_`_^]^]^]^]ZYZYZYZYZYZYZYZY{|{|{|{|yzyzyzyzwvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijefefefefbabababa`_`_`_`_^]^]^]^]ZYZYZYZYZYZYZYZY{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijefefefefbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXW{|{|{|{{yzyzyzyzuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijefefefefbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXW{{{{|{|{yzyzyzyzuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijefefefefbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXW|{|{|{|{yzyzyzyzuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijefefefefbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXW|{|{|{|{yzyzyzyzuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijefefefefbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXW|{|{|{|{yzyzyzyzuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklihghghghefefefefbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXW|{|{|{|{yzyzyzyzuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklghghghghefefefefbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXW|{{{{{{|yzyzyzyzuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklghghghghefefefefbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXW{|{|{|{|yzyzyzyzuvuvuvuvststststqpopopopmnmnmnmnklklklklghghghghefefefefbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXW{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopmnmnmnmnklklklklghghghghefefefefbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXW{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopmnmnmnmnklklklklghghghghefefefefbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXW{|{|{|{|yxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklghghghghefefedcdbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXW{|{|{{{{wxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklghghghghcdcdccccbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXW{{|{|{|{wxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklghghghghccdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXW|{|{|{|{wxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklghghghghdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXW~}|{|{|{|{wxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklghghghghdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXW~}~}~}~}|{|{|{|{wxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklghghghghdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXW~}~}~}~}|{|{|{|{wxwxwxwxuvuvuvuvststststopopopopmnmnmnmnkjijijijghghghghdcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXW~}~}~}~}{{{{{|{|wxwxwxwxuvuvuvuvststststopopopopmnmnmnmnijijijijghghghghcccccdcdbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOKLKLKKKKIJIJIJIHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +XWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPOKKLKLKLKGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<7878787856543434212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +XWXWXWXWTSTSTSTSRQRQRQRQPOPOPONMLKLKLKLKGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<7878787834333333212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<7878787843434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('&%$#$#$#$#"!"!"!"!     + + + +XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<7878787843434343212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     + + + +XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<7878787843434343212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     + + + +XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMKKKKKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;:7878787843434343212121210/0/0/.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     + + + +XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:787878784343433321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     + + + +XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:787878783334343421212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     + + + +XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCB?@?@?@?@=>=>=>=>9:9:9:9:787878783434343421212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!   + + + +XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:787878783434343421212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"! + + + +XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMKLKKKKKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:787878783434343421212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"! + + + +XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:787878783434343421212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!  + + + +VUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:787878783333334321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + +VUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:787878784343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + +VUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:787878784343434321212121.-.-.-.-,+,+,+,+*)*)*)('&%&%&%&%$#$#$#$#     + + + +VUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#     + + + +VUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#     + + + +VUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=<9:9:9:9:78787878434333332121210/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#     + + + +VUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:9:9:78787878343434340/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#     + + + +VUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:9:9:78787656343434340/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#     + + + +VUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHEFEFEFEDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656343434340/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#      + + + +VUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656343434340/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +VUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656343434330/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +VUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656333343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#"!         + + + +VUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!         + + + +VUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!         + + + +VUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656434343430/0/0/0/.-.-.-.-,+,+,+*)('('('('&%&%&%&%"!"!"!"!         + + + +VUVUVUVUTSTSTSTSPOPOPOPONMNMLKLKIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +VUVUVUVUTSTSTSTSPOPOPOPOLKLKKKKKIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656433333430/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +VUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?>;<;<;<;<9:9:9:9:56565656434343210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + VUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:56565656212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         VUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:56565656212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         VUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLIJIJIJIJGHGHGHGFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:56565656212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         VUVUVUVURQRQRQRQPOPOPOPOKLKLKLKKIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:56565656212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         VUVUVUVURQRQRQRQPOPOPOPOKKKKLKLKIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:56565656212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         VUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:56565656212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%$#"!"!"!"!         VUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:56565656212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!         VUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:56565656212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!       VUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9856565656212121210/0/0/0/.-.-.-,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     VUVUVUVURQRQRQRQPOPOPOPOLKKKKKKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<7878787856565656212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     VUVUVUVURQRQRQRQPOPOPOPOKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<7878787856565656212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     VUVUVUVURQRQRQRQPOPOPOPOKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABA@=>=>=>=>;<;<;<;<7878787856565656212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + +VUVUVUVURQRQRQRQPOPOPOPOKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +AABBCCDDeddccbbaPQQRRSSTYXXWWVVU\]]^^__` + + >==<<;;:baa``__^]]^^__`` + + LLKKJJII~~}}EEFFGGHH!!""a``__^^]TUUVVWWXUTTSSRRQ`aabbccd :9933221^]]\\[[Zaabbccdd HHGGFFEE||{{zzyyIIJJKKLL##$$%%&&]\\[[ZZYXYYZZ[[\QPPOONNMdeeffggh100//..-ZYYXXWWVeeffgghhDDCCBBAAxxwwvvuuMMNNOOPP''(())** +YXXWWVVU\]]^^__` + + MLLKKJJIhiijjkkl-,,++**)VUUTTSSRiijjkkll@@??>>==ttssrrqqQQRRSSTT++,,--.. + UTTSSRRQ`aabbccd IHHGGFFElmmnnoop)((''&&%RQQPONMLmmnnoopp<<;;::99ppoonnmmUUVVWWXX//001122QPPOONNMdeeffgghEDDCCBBApqqrrsst %$$##""!KKJJIIHHqqrrsstt 88776655llkkjjiiYYZZ[[\\3399::;; + + MLLKKJJIhiijjkklA@@??>>=tuuvvwwx !!""##$!GGFFEEDDuuvvwwxx!!""##$$44332211hhggffee]]^^__``<<==>>?? IHHGGFFElmmnnoop=<<;;::9xyyzz{{|$%%&&''(CCBBAA@@yyzz{{||%%&&''((00//..--ddccbbaaaabbccdd@@AABBCCEDDCCBBApqqrrsst 98877665|}}~~())**++,??>>==<<}}~~))**++,,,,++**))``__^^]]eeffgghhDDEEFFGGA@@??>>=tuuvvwwx !!""##$54433221,--..//0 ;;::9987--..//00((''&&%%\\[[ZZYYiijjkkllHHIIJJKK=<<;;::9xyyzz{{|$%%&&''(100//..-01122334 + + 6543322111223344$$##""!!XXWWVVUUmmnnooppQQRRSSTT 98877665|}}~~())**++,-,,++**)~~}45566778100//..-~~}}55667788 TTSSRRQQqqrrssttUUVVWWXX !!""##$54433221,--..//0)((''&&%}||{{zzy899::;;< -,,++**)||{{zzyy99::;;<<PPOONNMMuuvvwwxxYYZZ[[\\$%%&&''(100//..-01122334%$$##""!yxxwwvvu<==>>??@ + + )((''&&%xxwwvvuu==>>??@@LLKKJJIIyyzz{{||]]^^__``())**++,-,,++**)~~}45566778! uttssrrq@AABBCCD %$$##""!ttssrrqqAABBCCDDHHGGFFEE}}~~aabbccii,--..//0)((''&&%}||{{zzy899::;;<qppoonnmDEEFFGGH! ppoonnmmEEFFGGHH DDCCBBAAjjkkllmm01122334%$$##""!yxxwwvvu<==>>??@mllkkjjiHIIJJKKLllkkjjiiIIJJKKLL + + @@??>>==nnooppqq45566778! uttssrrq@AABBCCDihhggffeLMMNNOOP!!"hhggffeeMMNNOOPP<<;;::99{{zzyyxxrrssttuu899::;;<qppoonnmDEEFFGGH eddccbbaPQQRRSST"##$$%%&ddccbbaaQQRRSSTT88776655wwvvuuttvvwwxxyy<==>>??@mllkkjjiHIIJJKKL + + a``__^^]TUUVVWWX&''(())* ``__^^]]UUVVWWXXiijjkkll44332211ssrrqqppzz{{@AABBCCDihhggffeLMMNNOOP ]\\[[ZZYXYYZZ[[\*++,,--. + + \\[[ZZYYYYZZ[[\\mmnnoopp00//..--oonnmmllDEEFFGGH eddccbbaPQQRRSSTYXXWWVVU\]]^^__`.//00112XXWWVVUU]]^^__`` + + qqrrsstt,,++**))kkjjiicc~}HIIJJKKL + + a``__^^]TUUVVWWXUTTSSRRQ`aabbccd23399::;TTSSRRQQaabbccdd uuvvwwxx((''&&%%bbaa``__|{{zzyyxLMMNNOOP ]\\[[ZZYXYYZZ[[\QPPOONNMdeeffggh;<<==>>?PPOONNMMeeffgghhyyzz{{||$$##""!!^^]]\\[[xwwvvuutPQQRRSSTYXXWWVVU\]]^^__` + + MLLKKJJIhiijjkkl?@@AABBC + + LLKKJJIIiijjkkll}}~~ ZZYYXXWWtssrrqqpTUUVVWWXUTTSSRRQ`aabbccd IHHGGFFElmmnnoopCDDEEFFG HHGGFFEEmmnnooppVVUUTTSSpoonnmmlXYYZZ[[\QPPOONNMdeeffgghEDDCCBBApqqrrsstGHHIIJJKDDCCBBAAqqrrsstt RRQQKKJJlkkjjiih\]]^^__` + + MLLKKJJIhiijjkklA@@??>>=tuuvvwwxKQQRRSST@@??>>==uuvvwwxx!!""##$$~~}}IIHHGGFFgfedccbb`aabbccd IHHGGFFElmmnnoop=<<;;::9xyyzz{{|TUUVVWWX<<;;::99yyzz{{||%%&&''((||{{zzyy EEDDCCBBaa``__^^deeffgghEDDCCBBApqqrrsst 98877665|}}~~XYYZZ[[\ 88776655}}~~))**++,,xxwwvvuu + + AA@@??>>]]\\[[ZZhiijjkklA@@??>>=tuuvvwwx !!""##$54433221\]]^^__`!!""##$$44332211--..//00ttssrrqq + + ==<<;;::YYXXWWVVlmmnnoop=<<;;::9xyyzz{{|$%%&&''(100//..-`aabbcci%%&&''((00//..--11223344ppoonnmm 99332211UUTTSSRRpqqrrsst 98877665|}}~~())**++,-,,++**){{zzyyxijjkkllm))**++,,,,++**))~~}}55667788llkkjjii00//..--QQPONMLKtuuvvwwx !!""##$54433221,--..//0)((''&&%xwwvvuutmnnooppq--..//00((''&&%%||{{zzyy99::;;<>??@@ddccbbaa((''&&%%GFFEEDDC|}}~~())**++,-,,++**)~~}45566778! poonnmmluvvwwxxy55667788 ttssrrqqAABBCCDD``__^^]] $$##""!!CBBAA@@?,--..//0)((''&&%}||{{zzy899::;;<lkkjjiicyzz{{99::;;<<ppoonnmmEEFFGGHH\\[[ZZYY!!""##$$?>>==<<;01122334%$$##""!yxxwwvvu<==>>??@cbbaa``_==>>??@@llkkjjiiIIJJKKLLXXWWVVUU%%&&''((;::99876~~}45566778! uttssrrq@AABBCCD_^^]]\\[~AABBCCDDhhggffeeMMNNOOPPTTSSRRQQ))**++,,54332211}||{{zzy899::;;<qppoonnmDEEFFGGH [ZZYYXXW}|{{zzyyEEFFGGHH ddccbbaaQQRRSSTTPPOONNMM--..//00 00//..--yxxwwvvu<==>>??@mllkkjjiHIIJJKKL + + WVVUUTTSxxwwvvuuIIJJKKLL + + ``__^^]]UUVVWWXXLLKKJJII11223344 + + ,,++**))uttssrrq@AABBCCDihhggffeLMMNNOOP SRRQQKKJttssrrqqMMNNOOPP\\[[ZZYYYYZZ[[\\HHGGFFEE55667788 + + ((''&&%%qppoonnmDEEFFGGH eddccbbaPQQRRSSTJIIHHGGFppoonnmmQQRRSSTTXXWWVVUU]]^^__``DDCCBBAA99::;;<<$$##""!!mllkkjjiHIIJJKKL + + a``__^^]TUUVVWWXFEEDDCCBllkkjjiiUUVVWWXXTTSSRRQQaabbccdd@@??>>====>>??@@ ihhggffeLMMNNOOP ]\\[[ZZYXYYZZ[[\BAA@@??>hgfedccbYYZZ[[\\PPOONNMMeeffgghh<<;;::9988776655}}~~))**++,,?>>==<<;}~~)**++,,-,++**))(~~}}|56677889 onnmmllkvwwxxyyz66778899ssrrqqppBBCCDDEEggffeeddNNOOPPQQ!!""##gffeeddcNOOPPQQR[ZZYYXXWZ[[\\]]^ +=<<;;::9MLLKKJJI44332211--..//00 ;::99876-..//001(''&&%%$|{{zzyyx9::;;<<=kjjiiccbz{{::;;<<==oonnmmllFFGGHHII ccbbaa``RRSSTTUU$$%%&&'' cbbaa``_RSSTTUUVWVVUUTTS^__``aab + 93322110IHHGGFFE00//..--11223344 + + 5433221112233445$##""!! xwwvvuut=>>??@@Abaa``__^>>??@@AAkkjjiihhJJKKLLMM + + __^^]]\\VVWWXXYY(())**++ + + _^^]]\\[VWWXXYYZSRRQQPPObccddeef0//..--,EDDCCBBA,,++**))~~}}5566778800//..--~~}}|56677889 tssrrqqpABBCCDDE^]]\\[[Z~}|BBCCDDEEggffeeddNNOOPPQQ[[ZZYYXXZZ[[\\]],,--..// [ZZYYXXWZ[[\\]]^ +ONNMMLLKfgghhiij,++**))(A@@??>>=((''&&%%||{{zzyy99::;;<< ,,++**))|{{zzyyx9::;;<<=poonnmmlEFFGGHHI ZYYXXWWV{{zzyyxxFFGGHHII ccbbaa``RRSSTTUUWWVVUUTT^^__``aa00112233WVVUUTTS^__``aab + KJJIIHHGjkkllmmn(''&&%%$=<<;;::9$$##""!!xxwwvvuu==>>??@@ + + ((''&&%%xwwvvuut=>>??@@AlkkjjiihIJJKKLLM + + VUUTTSSRwwvvuuttJJKKLLMM + + __^^]]\\VVWWXXYYSSRRQQPPbbccddee99::;;<<SRRQQPPObccddeefGFFEEDDCnooppqqr$##""!!98877665 ttssrrqqAABBCCDD$$##""!!tssrrqqpABBCCDDEhggffeedMNNOOPPQRQQKKJJIssrrqqppNNOOPPQQ[[ZZYYXXZZ[[\\]] OONNMMLLffgghhii==>>??@@ +ONNMMLLKfgghhiijCBBAA@@?rssttuuv !!"54433221ppoonnmmEEFFGGHH poonnmmlEFFGGHHI dccbbaa`QRRSSTTUIHHGGFFEoonnmmllRRSSTTUUWWVVUUTT^^__``aa + + KKJJIIHHjjkkllmmAABBCCDD + KJJIIHHGjkkllmmn?>>==<<;vwwxxyyz"##$$%%&100//..-llkkjjiiIIJJKKLLlkkjjiihIJJKKLLM + + `__^^]]\UVVWWXXYEDDCCBBAkkjjiihgVVWWXXYYSSRRQQPPbbccddeeGGFFEEDDnnooppqqEEFFGGHHGFFEEDDCnooppqqr;::99887z{{||}}~&''(())*-,,++**)hhggffeeMMNNOOPP!!""hggffeedMNNOOPPQ\[[ZZYYXYZZ[[\\] A@@??>>=fedccbbaZZ[[\\]] OONNMMLLffgghhiiCCBBAA@@rrssttuuIIJJKKQQCBBAA@@?rssttuuv !!"76655443~*++,,--. )((''&&% ddccbbaaQQRRSSTT##$$%%&&dccbbaa`QRRSSTTUXWWVVUUT]^^__``a + + =<<;;::9a``__^^]^^__``aa + + KKJJIIHHjjkkllmm??>>==<>==<<;vwwxxyyz"##$$%%&3221100/.//00112 + + +%$$##""! + + ``__^^]]UUVVWWXX''(())** +`__^^]]\UVVWWXXYTSSRRQQPabbccdde 93322110]\\[[ZZYbbccddeeGGFFEEDDnnooppqq;;::9988zz{{||}}VVWWXXYY;::99887z{{||}}~&''(())*/..--,,+23344556 + ! \\[[ZZYYYYZZ[[\\++,,--.. + \[[ZZYYXYZZ[[\\] POONNMMLeffgghhi0//..--,YXXWWVVUffgghhiiCCBBAA@@rrssttuu !!77665544~~ZZ[[\\]] !!"76655443~*++,,--.+**))(('~~}}||{6778899:XXWWVVUU]]^^__``//001122XWWVVUUT]^^__``a + + LKKJJIIHijjkkllm,++**))(UTTSSRRQjjkkllmm??>>==<TTSSRRQQaabbccdd3399::;;TSSRRQQPabbccdde HGGFFEEDmnnooppq(''&&%%$QPONMLKKnnooppqq;;::9988zz{{||}}&&''(())//..--,,{{bbcciijj&''(())*/..--,,+23344556#""!! wvvuutts>??@@AABPPOONNMMeeffgghh<<==>>?? POONNMMLeffgghhiDCCBBAA@qrrssttu !$##""!!JJIIHHGGrrssttuu !!77665544~~**++,,--++**))((zzyyxxwwkkllmmnn*++,,--.+**))(('~~}}||{6778899:srrqqppoBCCDDEEF!!""# + + LLKKJJIIiijjkkll@@AABBCC + + LKKJJIIHijjkkllm@??>>==onnmmllkFGGHHIIJ#$$%%&&' + + HHGGFFEEmmnnooppDDEEFFGG HGGFFEEDmnnooppq<;;::998yzz{{||}%&&''(()BBAA@@??zz{{||}}&&''(())//..--,,22334455##""!! rrqqppoossttuuvv23344556#""!! wvvuutts>??@@AABkjjiihhgJKKLLMMN'(())**+ + + DDCCBBAAqqrrssttHHIIJJKKDCCBBAA@qrrssttu !87766554}~~)**++,,->>==<<;;~~**++,,--++**))((~~}}||66778899nnmmllkkwwxxyyzz6778899:srrqqppoBCCDDEEFgffeeddcNOOPPQQR+,,--../ @@??>>==uuvvwwxxQQRRSSTT@??>>==onnmmllkFGGHHIIJ cbbaa``_RSSTTUUV/0011223<<;;::99yyzz{{||UUVVWWXX<;;::998yzz{{||}%&&''(()0//..--,12233445 + + 4332211022334455##""!! wwvvuutt>>??@@AAaa``__^^>??@@AABkjjiihhgJKKLLMMN + + _^^]]\\[VWWXXYYZ399::;;< 88776655}}~~YYZZ[[\\ !87766554}~~)**++,,-,++**))(~~}}|566778890//..--,~~}}||66778899ssrrqqppBBCCDDEE]]\\[[ZZ~}|{BCCDDEEFgffeeddcNOOPPQQR[ZZYYXXWZ[[\\]]^<==>>??@!!""##$$44332211]]^^__``!""##$$%43322110-..//001(''&&%%$|{{zzyyx9::;;<<= +,++**))({{zzyyxx::;;<<==oonnmmllFFGGHHII YYXXWWVV{zzyyxxwFGGHHIIJ cbbaa``_RSSTTUUVWVVUUTTS^__``aab@AABBCCD %%&&''((00//..--aabbccii%&&''(()0//..--,12233445$##""!! xwwvvuut=>>??@@A + (''&&%%$wwvvuutt>>??@@AAkkjjiihhJJKKLLMM + + UUTTSSRRwvvuuttsJKKLLMMN + + _^^]]\\[VWWXXYYZSRRQQPPObccddeefDEEFFGGH !!""##$))**++,,,,++**)){{zzyyxxjjkkllmm)**++,,-,++**))(~~}}|56677889 tssrrqqpABBCCDDE$##""!! ssrrqqppBBCCDDEEggffeeddNNOOPPQQQQKKJJIIsrrqqppoNOOPPQQR[ZZYYXXWZ[[\\]]^ +ONNMMLLKfgghhiijHIIJJKKQ$%%&&''(--..//00((''&&%%wwvvuuttnnooppqq-..//001(''&&%%$|{{zzyyx9::;;<<=poonnmmlEFFGGHHIoonnmmllFFGGHHII ccbbaa``RRSSTTUUHHGGFFEEonnmmllkRSSTTUUVWVVUUTTS^__``aab + KJJIIHHGjkkllmmnQRRSSTTU())**++,11223344$$##""!!ssrrqqpprrssttuu12233445$##""!! xwwvvuut=>>??@@AlkkjjiihIJJKKLLMkkjjiihhJJKKLLMM + + __^^]]\\VVWWXXYYDDCCBBAAkjjiihgfVWWXXYYZSRRQQPPObccddeefGFFEEDDCnooppqqrUVVWWXXY,--..//055667788 oonnmmllvvwwxxyy56677889 tssrrqqpABBCCDDEhggffeedMNNOOPPQ!!""#ggffeeddNNOOPPQQ[[ZZYYXXZZ[[\\]] @@??>>==edccbbaaZ[[\\]]^ +ONNMMLLKfgghhiijCBBAA@@?rssttuuvYZZ[[\\]0112233499::;;<<kkjjiicczz{{9::;;<<=poonnmmlEFFGGHHI dccbbaa`QRRSSTTU#$$%%&&'ccbbaa``RRSSTTUUWWVVUUTT^^__``aa + + <<;;::99``__^^]]^__``aab + KJJIIHHGjkkllmmn?>>==<<;vwwxxyyz]^^__``a45566778==>>??@@bbaa``__=>>??@@AlkkjjiihIJJKKLLM + + `__^^]]\UVVWWXXY'(())**+ + +__^^]]\\VVWWXXYYSSRRQQPPbbccddee33221100\\[[ZZYYbccddeefGFFEEDDCnooppqqr;::99887z{{||}}~abbcciij899::;;>??@EEFFGGHH ZZYYXXWW|{{zzyyxEFFGGHHI dccbbaa`QRRSSTTUXWWVVUUT]^^__``a/0011223WWVVUUTT^^__``aa + + KKJJIIHHjjkkllmm++**))((TTSSRRQQjkkllmmn?>>==<<;vwwxxyyz"##$$%%&3221100/||{nooppqqr@AABBCCDIIJJKKLL + + VVUUTTSSxwwvvuutIJJKKLLM + + `__^^]]\UVVWWXXYTSSRRQQPabbccdde399::;;<SSRRQQPPbbccddeeGGFFEEDDnnooppqq''&&%%$$PONMLKKJnooppqqr;::99887z{{||}}~&''(())*/..--,,+{zzyyxxwrssttuuvDEEFFGGHMMNNOOPPRRQQKKJJtssrrqqpMNNOOPPQ\[[ZZYYXYZZ[[\\] POONNMMLeffgghhi<==>>??@ OONNMMLLffgghhiiCCBBAA@@rrssttuu !!##""!!JIIHHGGFrssttuuv !!"76655443~*++,,--.+**))(('wvvuuttsvwwxxyyyHIIJJKKLQQRRSSTTIIHHGGFFpoonnmmlQRRSSTTUXWWVVUUT]^^__``a + + LKKJJIIHijjkkllm@AABBCCD + + KKJJIIHHjjkkllmm??>>==<z{{||}}~&''(())*/..--,,+23344556#""!! onnmmllkuttssrrqPQQRRSSTYYZZ[[\\AA@@??>>gfedccbbYZZ[[\\] POONNMMLeffgghhiDCCBBAA@qrrssttuHIIJJKKQCCBBAA@@rrssttuu !!77665544~~**++,,-->==<<;;:~*++,,--.+**))(('~~}}||{6778899:kjjiiccbqppoonnmTUUVVWWX]]^^__`` + + ==<<;;::aa``__^^]^^__``a + + LKKJJIIHijjkkllm@??>>==>==<baa``__^mllkkjjiXYYZZ[[\aabbccdd 99332211]]\\[[ZZabbccdde HGGFFEEDmnnooppq<;;::998yzz{{||}UVVWWXXY;;::9988zz{{||}}&&''(())//..--,,22334455 + + 3322110023344556#""!! wvvuutts>??@@AAB^]]\\[[Zihhggffe\]]^^__`eeffgghh00//..--YYXXWWVVeffgghhiDCCBBAA@qrrssttu !87766554}~~YZZ[[\\] !!77665544~~**++,,--++**))((~~}}||66778899//..--,,~~}}||{6778899:srrqqppoBCCDDEEFZYYXXWWVeddccbba`aabbccdiijjkkll,,++**))UUTTSSRRijjkkllm@??>>==onnmmllkFGGHHIIJ VUUTTSSRa``__^^]deeffgghmmnnoopp((''&&%%QQPONMLKmnnooppq<;;::998yzz{{||}%&&''(()0//..--,{abbcciij&&''(())//..--,,22334455##""!! wwvvuutt>>??@@AA ''&&%%$$wvvuutts>??@@AABkjjiihhgJKKLLMMN + + RQQKKJJI]\\[[ZZYhiijjkklqqrrsstt $$##""!!KJJIIHHGqrrssttu !87766554}~~)**++,,-,++**))({zzyyxxwjkkllmmn**++,,--++**))((~~}}||66778899ssrrqqppBBCCDDEE##""!! srrqqppoBCCDDEEFgffeeddcNOOPPQQRIHHGGFFEYXXWWVVUlmmnnoopuuvvwwxx!!""##$$GFFEEDDCuvvwwxxy!""##$$%43322110-..//001(''&&%%$wvvuuttsnooppqqr..//0011''&&%%$${{zzyyxx::;;<<==oonnmmllFFGGHHIIonnmmllkFGGHHIIJ cbbaa``_RSSTTUUVEDDCCBBAUTTSSRRQpqqrrsstyyzz{{||%%&&''((CBBAA@@?yzz{{||}%&&''(()0//..--,12233445$##""!! srrqqpporssttuuv22334455##""!! wwvvuutt>>??@@AAkkjjiihhJJKKLLMMkjjiihhgJKKLLMMN + + _^^]]\\[VWWXXYYZA@@??>>=QPPOONNMtuuvvwwxxyybdQZ|H~fZdQbtvnXAJltf`vX`JXQfpvZp˂f`vXJXQrvnXp˂r`vXnے`JXQdrtA`vXnl|Zv`fbdQZ|nvprbtlnXv`rXQJ`nvpp`JXv`fXQJ`ےvpfr˂pJltvpfdQbt~HfpہdrtfH~ˑJtAdf~HbHAfH~Qr˂p~HfpېbHAZH~fZHAbbdQZ|H~flJtArvnXAJltf`vX|ZdQfpvZp˂f`vXZHAbvnXp˂r`vXnے`JXQdrtA`vXnd|Zv`frbdQZ|nvpbtlnXv`rXQJ`nvpے`JXv`f~fXQJ`ےvpfr˂pJltvpfdQbtQJHAdrtfH~JtArdf~HbHAfH~Qr˂ppvnbHAZH~fZHAbbdQZ|H~fl|ZdQZp˂AJltf`vX|ZdQfpvZp˂f`vX`JXQXv`fp˂r`vXnے`JXQdrtA`vXnbtlrXQJ`ۉbdQZ|nvpbtlnXv`rXQJ`nvpr˂p~HfXQJ`ےvpfr˂pJltvpfJtArdbHAdrtfH~JtArdf~HbHAfH~ZHAbpvnbHAZH~fZHAbbdQZ|H~f|ZdQZp˂AJltf`vX|ZdQfpvZp˂f`vX`JXQXv`fp˂r`vXnے`JXQdrtA`vXnbtlrXQJ`ۉbdQZ|nvpbtlnXv`rbdQZ|nvpr˂p`~fpvbdQZ|vpfr˂pJltvpf|ZdQbbHAdrtfH~JtArdf~HdrtfH~ˁJXQrnXv`drtAH~fZHAbbdQZ|H~ftlJZp˂AJltf`vX|ZdQfpvAJltf`vXbtl|f~HJlt`vXnے`JXQdrtA`vXntArdrXQJ`ۉbdQZ|nr˂pbtlnXv`bdQZ|nvpZdQbtfpvbdQZ|vpfr˂pJltvpf|ZdQbbHAdrtZHAbJtArdf~HdrtfH~ˉlJtnXv`drtAH~fZHAbbdQZ|H~ftl|Zp˂AJltے`JX|ZdQfpvAJltf`vXArd|f~fpJlt`vXnے`JXQdrtA`vXnZdQbtrXQJ`ۉbdQZ|Qr˂pbtlnXv`bdQZ|nvpZdQbtvnXbdQZ|vpfr˂pJltr˂plJtAbHAdrtZHAbJtArdf~HdrtfH~ˉl|v`fdrtAH~fZHAےbdQZ|`JXQrrd|Zp˂AJltے`JX|ZdQfpvAJltf`vXZdQbt~HfpJlt`vXn`JXQrdrtA˂pZZdQbtrXQJ`ۉbdQZ|Qr˂pbtlnXv`bdQZ|nvplJtAvnXbdQZ|vpfbtl|ZdQbJltHAbےl|ZbHAdrtZHAbJtArdfHdrtfH~rd|v`ffdrtAH~fJtAdtlJbdQZ|`JXQrdQbnXZp˂AJltے`JX|ZdQfpvAJltf`vXZdQbtpvnJlt`vXn|ZdQbtArddrtA˂p`v`f~rXQJ`ۉbdQZ|Qr˂pbtlnrXQJ`bdQZ|nvpl|ZdrXQJ`bdQZ|vpftlJ|ZdQbJltJXQrfpv㒐bHAdtAZHAbJtArdےHAdrtfH~QbtlےHAZdrtAH~ftArdtlJbdQZ|˂pZHAnXv`Zp˂Jltے`JX|ZdQZp˂AJltf`vXJtArdp˂rJlt`vXn|ZdQbtArddrtAbے`f~HrXQJ`bnvpQr˂pbtlrXQJ`ۉbdQZ|nvp|ZdXQJ`ےbdQZ|vpftlJ|ZdQbJltJXQrfpv㒐bHAfHˑZHAbJtArdbHAdrtfH~QbtlbHAZdrtAH~ftArdnXv`bdQZ|˂p`JnXv`fZp˂f`vXے`JX|ZdQZp˂AJltf`vX|ZdQp˂rJlt`vXn|ZdQbf~HdrtAXQr˂~fpvrXQJ`nvpQr˂pbtlrXQJ`ۉbdQZ|nvpbtlXQJ`ےbdQZ|vpftlJfpvJltpZHAbnXvbHAfH~ˑZHAbJtArdbHAdrtfH~JtArdbHAZdrtAH~ftArdnXv`bdQZ|ے`J`f~Zp˂f`vXے`JX|ZdQZp˂AJltf`vX|ZdQp˂rJlt`vXn|ZdQbf~H`vXnXQr˂HfpvrXQJ`nvpQr˂pbtlrXQJ`ۉbdQZ|nr˂pbtl|XQJ`ےbdQZ|r˂ptlJfpvvpfp`JXQnXvbHAfH~ˑZHAbJtArdbHAdrt`JXQZdQbtbHAZdrtAZHAbtArdnXv`H~fr˂p`f~fpZp˂f`vXے`JX|ZdQZp˂AJltr˂plJtp˂rJltے`JXQ|ZdQbf~H`vXnZHAbvnXrXQJ`nvpQr˂pbnXv`rXQJ`ۉbdQZ|ZHAbArd|XQJ`ےbdQZ|r˂ptlJfpvvpfے`JXQv`fbHAfH~ˑZHAbf~HbHAdrt`JXQZdQbtbHAZdrtAZHAbtArdnXv`H~fr˂p~HfpZp˂f`vXے`JXfpvZp˂AJltr˂p`l|p˂rJltے`JXQ|ZdQbf~H`vXn`JXQrvnXrbdQZ|nvpQr˂pnXv`rXQJ`ۉbdQZ|JXQrZdQbnXXQJ`ےbdQZ|r˂ptlJfpvvpf˂pZv`f~drtfH~ˑZHAbf~HbHAdrt˂pZHv`f~bHAZdrtAZHAbtArdnXv`H~fHAbےfpvAJltf`vXے`JXfpvZp˂AJltAbے`fpvp˂rJltے`JXQ|ZdQbf~H`vXn`JXQrnXv`bdQZ|nvpQr˂pnXv`rXQJ`ۉbdQZ|JXQrnXv`XQJ`ےbdQZ|r˂ptlJfpvvpf˂p|f~HdrtfH~ˑZHAbf~HbHAdtA˂p`f~HbHAZdtAJZHAbtArdnXv`H~fZdQbtfpvAJltf`vXے`JXfpvZp˂JltJXQrfpvp˂rltbے`JXQ|ZdQbf~H`vXnlJtAnXv`bdQZ|nvpQr˂pnXv`rXQJ`bnvppZHAnXv`XQJ`ےnvpr˂ptlJfpvvpfrd|f~fpہdrtfH~ˑZHAۍf~HbHAfHbے`f~fpېbHAZfHfZHAbtArdnXv`f~HbHAZH~fHAbےvnXbHAZp~f`ZHAbf~HbHAZpdrtAJXQrZdQbtbHAZpdrtAJHAbےrd|~HfdrtAJ~f`l|ZdQf~HrtAJl~f`Aے`~HfpbHAZp˅f`Qr˂pf۝`vfpvp˂r`vXn`JXQrv`f~˂rvXn`JXQfpv˂rXJlt˂p`l|Zd˂rXQltb`JXQrZdQbtpvnltbvXnbtlfpvtbdvXnJXQrbtvnXrXQvXnۑ`JXQXnvˍnXv`bdQZ|vpf˂p`fpvbdQZ|vpfHr˂pnXv`QJ`ےbdQZ|JXQrQbnXJ`ےdQZ|˂pZlJtAXv`fdQZ|vpfHJtArdnXv`QZ|dvpfHlJtv`fJ`ےvpfHr˂ppfH~f~HdrtAH~fJXQrbnXv`drtA~f`ZHAbf~HbHAZpdrtApZHAv`f~fbHAZpdrtAJHAbےrd|HfpdrtAJ~f`|ZdQffpۙrtAJl~f`Ad|~HfpbHAZp~f`ZHAbېf۝`vfpvJlt`vXntl|f~HJltvXn`JXQfpv˂rXJltbے`pvn˂rXQltb`JXQrZdQbtvnrltbvXnbtlvnrXtbdvXnZdQbtvnXrXQvXnے`JXQXnvˍnXv`bdQZ|vpfZdQbtfpvbdQZ|vpfHr˂pnXv`QJ`ےbdQZ|JXQrXv`fJ`ےdQZ|˂pZlJtAXQJ`ےdQZ|vpfH|ZdQbQJ`ےQZ|dvpfHlJtAv`fJ`ےvpfHr˂p`pfH~f~HdrtAH~flJtAnXv`drtA~f`ZHAbf~HbHAZpdtAJlp`JX~HfbHAZpdtAJlHAbےrd|HAZpdrtAJ~f`tlJHAZp˙rtAJl~f`rd|~HfpbHAZp~f`JXQrf۝`vfpvJlt`vXnrd|f~fpJltvXn`JXQfpv˂rXtbQr˂ppvn˂rXQtbn`JXQrZdQbt˂rXQltbvXntArdrXQtbdvXnZdQbtvnXrXQvXnۉ˂pZHXnvˍnXv`bdQZ|vpfZdQbtvnXbdQZ|vpfHr˂pnXv`QJ`ےnvpZHAbXv`fJ`ےvpf˂pZlJtAJ`ےdQZ|vpfH|ZdQbJ`ےQZ|dvpfHlJtAv`fJ`ےvpfHAbے`pfH~f~HdrtAH~fl|Zv`fdrtA~f`ZHAے`f~HbHAZpfHf`ے`JX~fpvbHAZpHf`HAbےrd|bHAZpdrtAJ~f`tl|bHAZp˙rtAJl~f`rd|~HfpbHAZp~f`JXQrf۝`vfpvJlt`vXndQbt~HfpJltvXnJXQrfpv˂rXvXnQr˂pnXv`˂rXQvXn`JXQrZdQbt˂rXQltbvXnZdQbtrXQtbdvXnZdQbtvnXrbdvXnۉ˂p`ZXnvˍnXv`bdQZ|vpflJtArvnXbdQZ|vpfHbtlnXv`QJ`ےvpfH`JXQf~HJ`ےvpfH˂pZlJtAJ`ےdQZ|vpfHlJtAJ`ےQZ|dvpfHlJtAv`fQZ|dvpfHQXb㉀pfH~fHfdrtAH~fd|Zv`ffpdrtA~f`JtAd|f~HbHAZp~f`r˂pfpvbHAZp~f`HAbےrd|bHAZpdrtAJ~f`rd|bHAZp˙rtAJl~f`rd|~HfprtAJl~f`ۑpJAHrf۝`vpvnJlt`vXndQbt璝vnJltvXnZdQbtfpv˂rXvXnZHAbۅnXv`˂rXQvXn`JXQrZdQbt˂rXQltbvXnrZdQbtrXQtbdvXnrZdQbtvnXtbdvXn󙐂ˁ`ZXnvˍrXQJ`bdQZ|vpfl|ZdQrXQJ`bdQZ|vpfHlJtnXv`QJ`ےvpfH`JXQf~fpJ`ےvpfH˂pZlJtAJ`ےdQZ|˂p`l|ZJ`ےQZ|d˂pZHlJtAv`fQZ|dvpfHQXb㉀pfH~ےHAZdrtAH~fbtlHAZpdrtA~f`Ard|f~HbHAZp~f`r˂p`vnXbHAZp~f`HAbےrd|bHAZpdrtAJJXQrdQbtbHAZp˙rtAJlAbے`rd|~HfprtAJl~f`ۑp`ZQf۝`vp˂rJlt`vXnJtArd˂rXJltvXnZdQbtfpv˂rXvXnJXQrv`f˂rXQvXn`JXQrZdQbn˂rXQltb˂pZHAlJtArrXQtbdJXQrZdQbtvnXtbdvXnXb㉀ۑXnvˍXQJ`ےbdQZ|vpf|ZdQQJ`ےbdQZ|vpfHlJtnXv`QJ`ےvpfH˂pZH~HfpJ`ےvpfH˂pZXv`fJ`ےdQZ|bے`d|ZJ`ےQZ|d˂pZHlJtAv`fQZ|dvpfHpJAHrp|drbHAZdrtAH~fbtlbHAZpdrtA~f`Ard|f~HbHAZp~f`Abے`vnXbHAZp~f`HAbے~HfbHAZpdrtAJJXQrdQbtbHAZp˙rtAJlAbے`rd|~HfprtAJl~f`ˁ`ZQQtJlp˂rJlt`vXn|ZdQb˂rXJltvXnZdQbtfpv˂rvXnJXQrv`f~˂rbvXn`JXQrpvn˂rXQltb˂p`Jl|ZdQrXQtbdJXQrZdQbtvnXtbdvXnXb㉀ۑtbAdZXQJ`ےbdQZ|vpftlJQJ`ےbdQZ|vpfHlJtnXv`bdQZ|vpfH˂p`fpvdQZ|vpfH˂pZXv`fJ`ےdQZ|XQr˂bnXvJ`ےQZ|d˂pZHlJtAv`fQZ|dvpfHp`ZQXb|drbHAZdrtAH~ftArdbHAZpdrtA~f`Ard|f~HdrtA~f`JXQrbtnXv`drtAJ~f`HAbے~HfbHAZpdrtAJpZHAb`f~fpbHAZp˙rtAJlAbے`rd|HfpۙrtAJl~f`㉀ۑpJQtJlp˂rJlt`vXn|ZdQb˂rXJltvXnZdQbtfpvJltvXnl|f~HltbvXn`JXQrpvn˂rXQltbے`JvnXrXQtbdJXQrZdQbtvnrXtbdvXnAHr󙐂tbAdZXQJ`ےbdQZ|r˂ptl|QJ`ےbdQZ|r˂plJtnXv`bdQZ|vpfHZdQbtfpvdQZ|vpfH˂pZXv`fJ`ےdQZ|XQr˂v`fJ`ےQZ|d˂pZHlJtAQJ`ےQZ|dvpfHˁ`ZQXb|drbHAZdrtA`JXQrZdQbtbHAZpdrtAZHAbArd|f~HdrtA~f`lJtAnXv`fdrtAJ~f`HAbے~HfbHAZpdtAJlp`JXQ~HfpbHAZp˙tAJlAbے`rd|HAZp˙rtAJl~f`㉀ۑpQtJlp˂rJlt˂pZlJtA˂rXJlt`JXQZdQbtfpvJltvXnrd|~fpvltbvXn`JXQrpvn˂rXQtbnr˂pvnXrXQtbnJXQrZdQbt炀rXQtbdvXn`ZQXbtbAdZXQJ`ےbdQZ|HAbےrd|QJ`ےbdQZ|r˂plJtnXv`bdQZ|vpfHZdQbt瀅nXvdQZ|vpfH˂pZXv`fJ`ےvpfZHAbv`f~J`ےvpfH˂pZHlJtAJ`ےQZ|dvpfHۑpJA|drbHAZdrtA`JXQrZdQbtbHAZpdrtAZHAbArd|f~HdrtA~f`l|Zd`f~drtAJ~f`HAے`~HfbHAZpHf`ے`JXQfpvbHAZp˅f`Abے`rd|bHAZp˙rtAJl~f`Hr󙐂ˁQtJlp˂rJlt˂p`l|Z˂rXJlt`JXQZdQbtfpvJltvXnQbtlHfpvltbvXnJXQrbpvn˂rXQvXnr˂pnXv`rXQvXnہJXQrZdQbt炀rXQtbdvXn`ZQXbtbAdZXQJ`ےbdQZ|JXQrdQbnXQJ`ےbdQZ|r˂plJtnXv`bdQZ|vpfHJtArdnXvdQZ|vpfHtlJXv`fJ`ےvpfH`JXQrf~HJ`ےvpfH˂pZHlJtAJ`ےQZ|dvpfHۑp`Z|drbHAZdrtA˂pZHAv`f~bHAZpdrtAZHAbArd|fHfpdrtA~f`|Zd`ffpdrtAJ~f`tAd|~HfbHAZp~f`˂pZfpvbHAZp~f`Abے`rd|bHAZp˙rtAJl~f`QXb㉀QtJlp˂rJltbے`fpv˂rXJlt`JXQZdQbtvnJltvXnQbtlvnrltbvXnZdQbtpvn˂rXQvXnHAbےnXv`rXQvXnہJXQrZdQbt炀rXQtbdvXnے`ۑpJAHrtbAdZXQJ`ےbdQZ|JXQrnXv`QJ`ےbdQZ|r˂plJtrXQJ`bdQZ|vpfH|ZdQXQJ`ےdQZ|vpfHlJtAXv`fJ`ےvpfH`JXQrf~fpJ`ےvpfH˂pZHlJtAJ`ےQZ|dJXQr󙐂ˁ`Z|drbHAZdtAJ˂p`Jf~HbHAZpdtAJlZHAbArd|HAZpdrtA~f`btlHAZpdrtAJ~f`rd|~HfbHAZp~f`˂p`vnXbHAZp~f`Abے`rd|bHAZp˙rtAJl˂pZHQXb㉀QtJlp˂rltbXQr˂fpv˂rXtb`JXQZdQbt˂rXJltvXnJtArd˂rXQltbvXnZdQbtpvn˂rXQvXnJXQrv`f󂀉rXQvXnہJXQrZdQbnXrXQtbdAbے`XnvˍtbAdZXQJ`ےnvppZHAbnXv`fQJ`ےnvpr˂plJtQJ`ےbdQZ|vpfH|ZdQJ`ےdQZ|vpfHlJtAXv`fJ`ےvpfH˂pZHA~HfpJ`ےvpfH˂pZHv`fJ`ےQZ|dJXQrpfH~|drbHAZfHfے`J~fpvbHAZpfHf`ZHAbArd|bHAZpdrtA~f`btl|bHAZpdrtAJ~f`rd|~HfbHAZp~f`bے`vnXbHAZp~f`Abے`~HfpbHAZp˙rtAJl˂p`f۝`vQtJlp˂r`vXnXQr˂nXv˂rXvXn`JXQZdQbt˂rXJltvXnZdQbt˂rXQltbvXnZdQbtpvn˂rbvXnJXQrv`f~frbdvXnہJXQrvnXrXQtbdJXQrXnvˍtbAdZXQJ`ےvpfp`JXQ`f~QJ`ےvpfHr˂plJtQJ`ےbdQZ|vpfHlJtJ`ےdQZ|vpfHlJtAXv`fdQZ|vpfH˂p`JpvnQZ|dvpfH˂pZHv`fJ`ےQZ|dpZHApfH~|drbHAZH~fr˂pHfpvbHAZp~f`ZHAbArd|bHAZpdrtA~f`Ard|bHAZpdrtAJ~f`rd|~HfdrtAJ~f`XQrbtXv`frtAJl~f`Abے`~HfpbHAZp˙rtAJlbے`f۝`vQtJlp˂r`vXnZHAbnXv˂rXvXn`JXQZdQbt˂rXJltvXnZdQbt˂rXQltbvXnrZdQbtpvnltbvXnl|Z~HftbdvXnہJXQrvnXrXQtbdJXQrXnvˍtbAdZXQJ`ےvpfے`JXQ`f~fpQJ`ےvpfHr˂plJtQJ`ےbdQZ|r˂p`l|J`ےdQZ|˂pZlJtAXv`fdQZ|vpfHdQbtpvnQZ|dvpfH˂pZHv`fJ`ےQZ|dp`JXpfH~|drbHAZH~fr˂pvnXbHAZp~f`ZHAbArd|bHAZpdrtAJXQrZdQbtbHAZpdrtAJHAbےrd|~HfdrtAJ~f`lJtArXv`frtAJl~f`Abے`~HfpbHAZp˙tAJlQr˂pf۝`vQtJlp˂r`vXn`JXQrv`f˂rXvXn`JXQZdQb˂rXJlt˂pZHlJtA˂rXQltb`JXQrZdQbtpvnltbvXnd|Z~fpvtbdvXnہJXQrvnXrXQtbnZHAbXnvˍtbAdZXQJ`ےvpf˂pZ~HfpQJ`ےvpfHr˂pnXv`QJ`ےbdQZ|Abے`rd|J`ےdQZ|˂pZlJtAXv`fdQZ|vpfHdQbt璅nXv`QZ|dvpfH˂pZHv`fJ`ےvpfHے`JXpfH~|drQt}~~-------------------.......................... \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv29_3.dat b/vendor/endroid/qr-code/assets/data/qrv29_3.dat new file mode 100644 index 000000000..5670535c8 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv29_3.dat @@ -0,0 +1,265 @@ +{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqpopopopmnmnmnmnklklklklijijijijghghghghcccccdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPO{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklijijijijghghghghcdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLK{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklijijijijghghghghcdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLK{|{|{|{{yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklijijijijghghghghcdcdcdcdbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPONMLKLKLKLK{{{{|{|{yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklijijijijghghghghcdcdcdcdbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKKKKKKL|{|{|{|{yzyzyzyzwxwxwxwxuvuvuvuvsrqrqrqropopopopmnmnmnmnklklklklijijijijghghghgfcdccccccbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKL|{|{|{|{yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnklklklklijijijijefefefefdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKL|{|{|{|{yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnklklklklijijijijefefefefdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKL|{|{|{|{yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnklklklklijijijijefefefefdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKL|{{{{{{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnklklklklijijijijefefefefdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMKLKLKKKK~}{|{|{|{|yzyzyzyzwxwxwxwxutstststqrqrqrqropopopopmnmnmnmnklklklklijijijijefefefefdcdcdcccbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMKKLKLKLK~}~}~}~}{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqropopopopmnmnmnmnklklklklijijijijefefefefcccdcdcdbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLK~}~}~}~}{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqropopopopmnmnmnmnklklklklijijijijefefefefcdcdcdcdbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLK~}~}~}~}{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqropopopopmnmnmnmnklklklklijijijijefefefefcdcdcdcdbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLK~}~}~}~}{|{|{{{{yzyzyzyzwxwxwxwxststststqrqrqrqropopopopmnmnmnmnklklklklijijijijefefefefcdcdcdcdbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLK~}~}~}~}{{|{|{|{yzyzyzyzwvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijefefefefcdcdcdcdbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMKKKKKLKL~}~}~}~}|{|{|{|{yzyzyzyzuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijefefefefccccccdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMKLKLKLKL~}~}~}~}|{|{|{|{yzyzyzyzuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijefefefefdcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMKLKLKLKL~}~}~}~}|{|{|{|{yzyzyzyzuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklihghghghefefefefdcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMKLKLKLKL~}~}~}~}|{|{|{|{yzyzyzyzuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklghghghghefefefefdcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMKLKLKLKL~}~}~}~}{{{{{|{|yxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklghghghghefefefefdcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMKLKKKKKL~}~}~}~}{|{|{|{|wxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklghghghghefefefefdcdccccc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMKLKLKLKJ~}~}~}~}{|{|{|{|wxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklghghghghefefefefdcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMIJIJIJIJ~}~}~}~}{|{|{|{|wxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnkjijijijghghghghefefefefbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMIJIJIJIJ~}~}~}~}{|{|{|{|wxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnijijijijghghghghefefefefbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMIJIJIJIJ~}~}~}~}{|{|{|{ywxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnijijijijghghghghefefefefbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMIJIJIJIJ~}~}~}~}yyyyyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnijijijijghghghghefefefefbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMIJIJIJIJ~}~}~}~}yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnijijijijghghghghefefefefbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMIJIJIJIJ~}~}~}~}yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmlklklklijijijijghghghghefefefefbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMIJIJIJIJ~}~}~}~}yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopklklklklijijijijghghghghefefefefbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPONMNMLKLKIJIJIJIJ~}~}~}~}yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopklklklklijijijijghghghghefefefefbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPOLKLKKKKKIJIJIJIJ~}~}~}~}yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopklklklklijijijijghghghghefefedcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOKLKLKLKLIJIJIJIJ~}~}~}~}yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopklklklklijijijijghghghghcdcdccccbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOKLKLKLKLIJIJIJIJ~}~}~}~}yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqronmnmnmnklklklklijijijijghghghghccdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOKLKLKLKLIJIJIJIJ~}~}~}~}yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijghghghghdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOKLKLKLKLIJIJIJIJ~}~}|{|{yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijghghghghdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOKLKLKLKKIJIJIJIJ|{|{{{{{yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijghghghghdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOKKKKLKLKIJIJIJIJ{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijghghghghdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKIJIJIJIJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787834343434212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!       + + + +IJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787834343434212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +IJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878765633333343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +IJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:5656565643434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +IJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:5656565643434343212121210/0/0/0/.-.-.-,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +IJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:5656565643434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +IJIJIJIJGHGHGHGHEFEFEFEDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:5656565643434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +IJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:5656565643433333212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +IJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:5656565634343434212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +IJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:5656565634343434212121210/0/0/.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +IJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:565656563434343421212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + IJIJIJIJGHGHGHGFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:565656563434343421212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     IJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:565656563434343321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!      IJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:565656563333434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#         IJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9856565656434343432121210/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#         IJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#         + +IJIJIJIHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#         + + + +GHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#"!         + + + +GHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656433333430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +GHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;:7878787856565656434343210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +GHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787856565656212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!       + + + +GHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787856565656212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +GHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787856565656212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%$#"!"!"!"!     + + + +GHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787856565656212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +GHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=<9:9:9:9:7878787856565656212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +GHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:7878787856565656212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!      + + + +GHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:7878787856565656212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +GHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:7878787856565656212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('&%$#$#$#$#"!"!"!"!         + + + +GHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:7878787856543434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!         + + + +GHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?>;<;<;<;<9:9:9:9:7878787834333333212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!         + + + +GHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:7878787843434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!         + + + +GHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:7878787843434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!         + + + +GHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:7878787843434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +GHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:7878787843434343212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +GHGHGHGHEFEFEFEFCDCDCDCDABABABA@=>=>=>=>;<;<;<;<9:9:9:9:7878787843434333212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +GHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787833343434212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +GHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787834343434212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +GHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787834343434212121210/0/0/0/.-.-.-.-,+,+,+*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +%%&&''((==<<;;::xwwvvuut45566778=<<;;::9\]]^^__`]\\[[ZZY<==>>??@!hgfedccb==>>??@@44332211eeffgghh + + ||{{zzyy TTSSRRQQEEFFGGHH~~}}))**++,,99332211tssrrqqp899::;;<98877665`aabbccd ~~}YXXWWVVU@AABBCCDbaa``__^AABBCCDD00//..--iijjkkllxxwwvvuu!!""##$$PPOONNMMIIJJKKLL ]]\\[[ZZ||{{zzyy--..//0000//..--poonnmml<==>>??@54433221deeffggh + + }||{{zzy UTTSSRRQDEEFFGGH^]]\\[[ZEEFFGGHH,,++**))mmnnooppttssrrqq%%&&''((LLKKJJIIMMNNOOPP + + YYXXWWVVxxwwvvuu11223344,,++**))lkkjjiih@AABBCCD100//..-hiijjkkl yxxwwvvu !!""##$QPPOONNMHIIJJKKL ZYYXXWWVIIJJKKLL((''&&%%qqrrssttppoonnmm))**++,,HHGGFFEEQQRRSSTTUUTTSSRRttssrrqq55667788((''&&%%gfedccbbDEEFFGGH-,,++**)lmmnnooputtssrrq$%%&&''(MLLKKJJILMMNNOOP + + VUUTTSSRMMNNOOPP$$##""!!uuvvwwxxllkkjjii--..//00DDCCBBAAUUVVWWXX QQPONMLKppoonnmm99::;;<<$$##""!!aa``__^^HIIJJKKL)((''&&%pqqrrsstqppoonnm())**++,IHHGGFFEPQQRRSSTRQQPONMLQQRRSSTT yyzz{{|| + + hhggffee11223344@@??>>==YYZZ[[\\ + + KJJIIHHGllkkjjii==>>??@@]]\\[[ZZLMMNNOOP%$$##""!tuuvvwwxmllkkjji,--..//0EDDCCBBATUUVVWWX KKJJIIHHUUVVWWXX}}~~ ddccbbaa55667788<<;;::99]]^^__``GFFEEDDChhggffeeAABBCCDDYYXXWWVVPQQRRSST! xyyzz{{| + + ihhggffe01122334A@@??>>=XYYZZ[[\ + + GGFFEEDDYYZZ[[\\``__^^]]99::;;<<88776655aabbccddCBBAA@@?ddccbbaaEEFFGGHHUUTTSSRRTUUVVWWX|}}~~ eddccbba45566778=<<;;::9\]]^^__` CCBBAA@@]]^^__``\\[[ZZYY==>>??@@44332211eeffgghh?>>==<<;``__^^]]IIJJKKLL QQPONMLKXYYZZ[[\a``__^^]899::;;<98877665`aabbccd??>>==<>??@54433221deeffggh;;::9987eeffgghh + + ||{{zzyy TTSSRRQQEEFFGGHH,,++**))mmnnoopp##$$%%&&54332211XXWWVVUUQQRRSSTT + + GFFEEDDC`aabbccd ~~}YXXWWVVU@AABBCCD100//..-hiijjkkl!!"65433221iijjkkllxxwwvvuu!!""##$$PPOONNMMIIJJKKLL((''&&%%qqrrsstt''(())**00//..--TTSSRRQQUUVVWWXXCBBAA@@?deeffggh + + }||{{zzy UTTSSRRQDEEFFGGH-,,++**)lmmnnoop"##$$%%&100//..-mmnnooppttssrrqq%%&&''((LLKKJJIIMMNNOOPP$$##""!!uuvvwwxx++,,--..,,++**))PPOONNMMYYZZ[[\\?>>==<<;hiijjkkl yxxwwvvu !!""##$QPPOONNMHIIJJKKL)((''&&%pqqrrsst&''(())*-,,++**)qqrrssttppoonnmm))**++,,HHGGFFEEQQRRSSTT yyzz{{||//001122((''&&%%LLKKJJII]]^^__``;::99876lmmnnooputtssrrq$%%&&''(MLLKKJJILMMNNOOP%$$##""!tuuvvwwx*++,,--.)((''&&%uuvvwwxxllkkjjii--..//00DDCCBBAAUUVVWWXX}}~~3399::;;$$##""!!HHGGFFEEaabbccdd!!""54332211pqqrrsstqppoonnm())**++,IHHGGFFEPQQRRSST! xyyzz{{|.//00112%$$##""!yyzz{{|| + + hhggffee11223344@@??>>==YYZZ[[\\<<==>>?? DDCCBBAAeeffgghh##$$%%&&00//..--tuuvvwwxmllkkjji,--..//0EDDCCBBATUUVVWWX|}}~~23399::;! }}~~ ddccbbaa55667788<<;;::99]]^^__``@@AABBCC@@??>>==iijjkkll''(())**,,++**))xyyzz{{| + + ihhggffe01122334A@@??>>=XYYZZ[[\;<<==>>?``__^^]]99::;;<<88776655aabbccdd {{zzyyxxDDEEFFGG<<;;::99mmnnoopp++,,--..((''&&%%|}}~~ eddccbba45566778=<<;;::9\]]^^__`?@@AABBC\\[[ZZYY==>>??@@44332211eeffgghh + + wwvvuuttHHIIJJKK88776655qqrrsstt//001122$$##""!!a``__^^]899::;;<98877665`aabbccd {{zzyyxCDDEEFFG~~}}XXWWVVUUAABBCCDD00//..--iijjkkllssrrqqppQQRRSSTT +44332211uuvvwwxx3399::;; ]\\[[ZZY<==>>??@54433221deeffggh + + xwwvvuutGHHIIJJK ||{{zzyy TTSSRRQQEEFFGGHH,,++**))mmnnooppoonnmmllUUVVWWXX + 00//..--yyzz{{||<<==>>??~~}YXXWWVVU@AABBCCD100//..-hiijjkkl tssrrqqpKQQRRSST + + xxwwvvuu!!""##$$PPOONNMMIIJJKKLL((''&&%%qqrrssttkkjjiiccYYZZ[[\\,,++**))}}~~@@AABBCC}||{{zzy UTTSSRRQDEEFFGGH-,,++**)lmmnnooppoonnmmlTUUVVWWXttssrrqq%%&&''((LLKKJJIIMMNNOOPP$$##""!!uuvvwwxxbbaa``__]]^^__``((''&&%%DDEEFFGGyxxwwvvu !!""##$QPPOONNMHIIJJKKL)((''&&%pqqrrsstlkkjjiicXYYZZ[[\ppoonnmm))**++,,HHGGFFEEQQRRSSTT yyzz{{|| + + ^^]]\\[[aabbccii $$##""!!HHIIJJKK +uttssrrq$%%&&''(MLLKKJJILMMNNOOP%$$##""!tuuvvwwxcbbaa``_\]]^^__`llkkjjii--..//00DDCCBBAAUUVVWWXX}}~~ ZZYYXXWWjjkkllmm + + {{zzyyxxQQRRSSTT + qppoonnm())**++,IHHGGFFEPQQRRSST! xyyzz{{| + + _^^]]\\[`aabbcci + + hhggffee11223344@@??>>==YYZZ[[\\VVUUTTSSnnooppqq wwvvuuttUUVVWWXXmllkkjji,--..//0EDDCCBBATUUVVWWX|}}~~ [ZZYYXXWijjkkllm ddccbbaa55667788<<;;::99]]^^__``RRQQKKJJrrssttuussrrqqppYYZZ[[\\ + + ihhggffe01122334A@@??>>=XYYZZ[[\WVVUUTTSmnnooppq``__^^]]99::;;<<88776655aabbccdd ~~}}IIHHGGFFvvwwxxyyoonnmmll]]^^__`` eddccbba45566778=<<;;::9\]]^^__`SRRQQKKJqrrssttu\\[[ZZYY==>>??@@44332211eeffgghh + + ||{{zzyy EEDDCCBBzz{{ kkjjiiccaabbcciia``__^^]899::;;<98877665`aabbccd ~~}JIIHHGGFuvvwwxxyXXWWVVUUAABBCCDD00//..--iijjkkllxxwwvvuu!!""##$$AA@@??>> ! + + bbaa``__jjkkllmm]\\[[ZZY<==>>??@54433221deeffggh + + }||{{zzy FEEDDCCByzz{{ TTSSRRQQEEFFGGHH,,++**))mmnnooppttssrrqq%%&&''((==<<;;::~}!""##$$% + + ^^]]\\[[nnooppqqYXXWWVVU@AABBCCD100//..-hiijjkkl yxxwwvvu !!""##$BAA@@??>!!""##$$PPOONNMMIIJJKKLL((''&&%%qqrrssttppoonnmm))**++,,99332211|{{zzyyx%&&''(() ZZYYXXWWrrssttuu UTTSSRRQDEEFFGGH-,,++**)lmmnnooputtssrrq$%%&&''(>==<<;;:~%%&&''((LLKKJJIIMMNNOOPP$$##""!!uuvvwwxxllkkjjii--..//0000//..--xwwvvuut)**++,,-VVUUTTSSvvwwxxyy !!""##$QPPOONNMHIIJJKKL)((''&&%pqqrrsstqppoonnm())**++,:9933221}|{{zzyy))**++,,HHGGFFEEQQRRSSTT yyzz{{|| + + hhggffee11223344,,++**))tssrrqqp-..//001RRQQKKJJzz{{$%%&&''(MLLKKJJILMMNNOOP%$$##""!tuuvvwwxmllkkjji,--..//0100//..-xxwwvvuu--..//00DDCCBBAAUUVVWWXX}}~~ ddccbbaa55667788((''&&%%poonnmml12233445IIHHGGFF())**++,IHHGGFFEPQQRRSST! xyyzz{{| + + ihhggffe01122334-,,++**)ttssrrqq11223344@@??>>==YYZZ[[\\``__^^]]99::;;<<$$##""!!lkkjjiih56677889 EEDDCCBB~},--..//0EDDCCBBATUUVVWWX|}}~~ eddccbba45566778)((''&&%ppoonnmm55667788<<;;::99]]^^__``\\[[ZZYY==>>??@@gfedccbb9::;;<<=!!""##$$AA@@??>>|{{zzyyx01122334A@@??>>=XYYZZ[[\a``__^^]899::;;<%$$##""!llkkjjii99::;;<<88776655aabbccdd ~~}}XXWWVVUUAABBCCDDaa``__^^=>>??@@AABBCCDDE0//..--,ijjkkllmxwwvvuut!""##$$%POONNMMLIJJKKLLM YXXWWVVUJJKKLLMM''&&%%$$rrssttuuoonnmmll**++,,--GGFFEEDDRRSSTTUUPONMLKKJRSSTTUUVz{{||}}~ + gffeeddc23344556?>>==<<;Z[[\\]]^100//..-EFFGGHHI,++**))(mnnooppqtssrrqqp%&&''(()LKKJJIIHMNNOOPPQ + + UTTSSRRQNNOOPPQQ##""!! vvwwxxyy kkjjiihh..//0011CCBBAA@@VVWWXXYY + +JIIHHGGFVWWXXYYZ~cbbaa``_6778899:;::99887^__``aab!!""#-,,++**)IJJKKLLM(''&&%%$qrrssttupoonnmml)**++,,-HGGFFEEDQRRSSTTUQPONMLKKRRSSTTUUzz{{||}} + + ggffeedd22334455??>>==<76655443bccddeef#$$%%&&')((''&&%MNNOOPPQ$##""!! uvvwwxxy lkkjjiih-..//001DCCBBAA@UVVWWXXY +JJIIHHGGVVWWXXYY~~ccbbaa``66778899;;::9988^^__``aaBAA@@??>^__``aab[ZZYYXXW>??@@AAB3221100/fgghhiij'(())**+%$$##""!QRRSSTTU yzz{{||} + + hggffeed12233445@??>>====<<;;:bccddeef ~~}}||{WVVUUTTSBCCDDEEF/..--,,+jkkllmmn+,,--../! UVVWWXXY}~~ dccbbaa`56677889<;;::998]^^__``aBBAA@@??^^__``aa[[ZZYYXX>>??@@AA33221100ffgghhii:9987654fgghhiij + + {zzyyxxw !!"SRRQQPPOFGGHHIIJ+**))(('nooppqqr/0011223YZZ[[\\]`__^^]]\9::;;<<=87766554abbccdde>>==<<;;bbccddee ~~}}||WWVVUUTTBBCCDDEE//..--,,jjkkllmm!!""##33221100jkkllmmnwvvuutts"##$$%%&ONNMMLLKJKKLLMMN'&&%%$$#rssttuuv399::;;<]^^__``a\[[ZZYYX=>>??@@A43322110effgghhi::998765ffgghhii + + {{zzyyxx !!SSRRQQPPFFGGHHII++**))((nnooppqq$$%%&&''//..--,,nooppqqrsrrqqppo&''(())*KJJIIHHGNOOPPQQR#""!! vwwxxyyz<==>>??@abbccdde ~~}}|XWWVVUUTABBCCDDE0//..--,ijjkkllm!!""#43322110jjkkllmmwwvvuutt""##$$%%OONNMMLLJJKKLLMM''&&%%$$rrssttuu(())**++++**))((rssttuuvonnmmllk*++,,--.GFFEEDDCRSSTTUUVz{{||}}~@AABBCCD effgghhi + + |{{zzyyx !TSSRRQQPEFFGGHHI,++**))(mnnooppq#$$%%&&'0//..--,nnooppqqssrrqqpp&&''(())KKJJIIHHNNOOPPQQ##""!! vvwwxxyy,,--..//''&&%%$$vwwxxyyz +kjjiihhg.//00112CBBAA@@?VWWXXYYZ~DEEFFGGH + + ijjkkllmxwwvvuut!""##$$%POONNMMLIJJKKLLM(''&&%%$qrrssttu'(())**+,++**))(rrssttuuoonnmmll**++,,--GGFFEEDDRRSSTTUUzz{{||}}00112233##""!! z{{||}}~ + gffeeddc23344556?>>==<<;Z[[\\]]^||{HIIJJKKQ + + mnnooppqtssrrqqp%&&''(()LKKJJIIHMNNOOPPQ$##""!! uvvwwxxy+,,--../(''&&%%$vvwwxxyy kkjjiihh..//0011CCBBAA@@VVWWXXYY~~99::;;<<~cbbaa``_6778899:;::99887^__``aab{zzyyxxwQRRSSTTU qrrssttupoonnmml)**++,,-HGGFFEEDQRRSSTTU yzz{{||}/0011223$##""!! zz{{||}} + + ggffeedd22334455??>>==<>??@@_^^]]\\[:;;<<==>76655443bccddeef wvvuuttsUVVWWXXYuvvwwxxy lkkjjiih-..//001DCCBBAA@UVVWWXXY}~~399::;;<~~ccbbaa``66778899;;::9988^^__``aa{{AABBCCDD[ZZYYXXW>??@@AAB3221100/fgghhiij + + srrqqppoYZZ[[\\]yzz{{||} + + hggffeed12233445@??>>==>??@__^^]]\\::;;<<==77665544bbccddee zzyyxxwwEEFFGGHH ~~}}||{WVVUUTTSBCCDDEEF/..--,,+jkkllmmnonnmmllk]^^__``a}~~ dccbbaa`56677889<;;::998]^^__``a{@AABBCCD[[ZZYYXX>>??@@AA33221100ffgghhii + + vvuuttssIIJJKKQQ + + {zzyyxxw !!"SRRQQPPOFGGHHIIJ+**))(('nooppqqrkjjiiccbabbcciij `__^^]]\9::;;<<=87766554abbccdde {zzyyxxwDEEFFGGH~~}}||WWVVUUTTBBCCDDEE//..--,,jjkkllmmrrqqppooRRSSTTUU wvvuutts"##$$%%&ONNMMLLKJKKLLMMN'&&%%$$#rssttuuvbaa``__^jkkllmmn !!""##$\[[ZZYYX=>>??@@A43322110effgghhi + + wvvuuttsHIIJJKKQ + +{{zzyyxx !!SSRRQQPPFFGGHHII++**))((nnooppqqnnmmllkkVVWWXXYYsrrqqppo&''(())*KJJIIHHGNOOPPQQR#""!! vwwxxyyz +^]]\\[[Znooppqqr$%%&&''(~~}}|XWWVVUUTABBCCDDE0//..--,ijjkkllmsrrqqppoQRRSSTTU wwvvuutt""##$$%%OONNMMLLJJKKLLMM''&&%%$$rrssttuujjiiccbbZZ[[\\]]onnmmllk*++,,--.GFFEEDDCRSSTTUUVz{{||}}~ + ZYYXXWWVrssttuuv())**++,|{{zzyyx !TSSRRQQPEFFGGHHI,++**))(mnnooppqonnmmllkUVVWWXXYssrrqqpp&&''(())KKJJIIHHNNOOPPQQ##""!! vvwwxxyy aa``__^^^^__``aa +kjjiihhg.//00112CBBAA@@?VWWXXYYZ~VUUTTSSRvwwxxyyy,--..//0xwwvvuut!""##$$%POONNMMLIJJKKLLM(''&&%%$qrrssttukjjiiccbYZZ[[\\]oonnmmll**++,,--GGFFEEDDRRSSTTUUzz{{||}} + + ]]\\[[ZZbbcciijj + gffeeddc23344556?>>==<<;Z[[\\]]^RQQKKJJIyxxwwvvu01122334tssrrqqp%&&''(()LKKJJIIHMNNOOPPQ$##""!! uvvwwxxy baa``__^]^^__``a kkjjiihh..//0011CCBBAA@@VVWWXXYY~~YYXXWWVVkkllmmnncbbaa``_6778899:;::99887^__``aabIHHGGFFEuttssrrq45566778poonnmml)**++,,-HGGFFEEDQRRSSTTU yzz{{||} + + ^]]\\[[Zabbcciij + + ggffeedd22334455??>>==<76655443bccddeef ~~}}||{EDDCCBBAqppoonnm899::;;??@@AAB3221100/fgghhiij + + {zzyyxxw !!"A@@??>>=mllkkjji<==>>??@hggffeed12233445@??>>==>??@@AA33221100ffgghhii + + {{zzyyxx !!DDCCBBAA{{ !!"SRRQQPPOFGGHHIIJ+**))(('nooppqqrsrrqqppo&''(())*93322110eddccbbaDEEFFGGH`__^^]]\9::;;<<=87766554abbccdde ~~}}|IHHGGFFEvwwxxyyzWWVVUUTTBBCCDDEE//..--,,jjkkllmmwwvvuutt""##$$%%@@??>>=="##$$%%&ONNMMLLKJKKLLMMN'&&%%$$#rssttuuvonnmmllk*++,,--.0//..--,a``__^^]HIIJJKKL\[[ZZYYX=>>??@@A43322110effgghhi + + |{{zzyyx !EDDCCBBAz{{ !!SSRRQQPPFFGGHHII++**))((nnooppqqssrrqqpp&&''(())<<;;::99~}|{&''(())*KJJIIHHGNOOPPQQR#""!! vwwxxyyz +kjjiihhg.//00112,++**))(]\\[[ZZYLMMNNOOPXWWVVUUTABBCCDDE0//..--,ijjkkllmxwwvvuut!""##$$%A@@??>>=""##$$%%OONNMMLLJJKKLLMM''&&%%$$rrssttuuoonnmmll**++,,--33221100{zzyyxxw*++,,--.GFFEEDDCRSSTTUUVz{{||}}~ + gffeeddc23344556(''&&%%$YXXWWVVUPQQRRSSTTSSRRQQPEFFGGHHI,++**))(mnnooppqtssrrqqp%&&''(()=<<;;::9~}|&&''(())KKJJIIHHNNOOPPQQ##""!! vvwwxxyy kkjjiihh..//0011//..--,,wvvuutts.//00112CBBAA@@?VWWXXYYZ~cbbaa``_6778899:$##""!!UTTSSRRQTUUVVWWXPOONNMMLIJJKKLLM(''&&%%$qrrssttupoonnmml)**++,,-93322110{{zzyyxx**++,,--GGFFEEDDRRSSTTUUzz{{||}} + + ggffeedd22334455++**))((srrqqppo23344556?>>==<<;Z[[\\]]^_^^]]\\[:;;<<==>QPPOONNMXYYZZ[[\LKKJJIIHMNNOOPPQ$##""!! uvvwwxxy lkkjjiih-..//0010//..--,wwvvuutt..//0011CCBBAA@@VVWWXXYY~~ccbbaa``66778899''&&%%$$onnmmllk6778899:;::99887^__``aab[ZZYYXXW>??@@AABMLLKKJJI\]]^^__`HGGFFEEDQRRSSTTU yzz{{||} + + hggffeed12233445,++**))(ssrrqqpp22334455??>>==<76655443bccddeef ~~}}||{WVVUUTTSBCCDDEEFIHHGGFFE`aabbccdDCCBBAA@UVVWWXXY}~~ dccbbaa`56677889(''&&%%$oonnmmll66778899;;::9988^^__``aa[[ZZYYXX>>??@@AAedccbbaa>??@@AAB3221100/fgghhiij + + {zzyyxxw !!"SRRQQPPOFGGHHIIJ EDDCCBBAdeeffggh@??>>==>=hiijjkkl<;;::998]^^__``a\[[ZZYYX=>>??@@Afedccbba>>??@@AA33221100ffgghhii + + {{zzyyxx !!SSRRQQPPFFGGHHII\\[[ZZYYFGGHHIIJ+**))(('nooppqqrsrrqqppo&''(())*KJJIIHHGNOOPPQQR + =<<;;::9lmmnnoop87766554abbccdde ~~}}|XWWVVUUTABBCCDDEa``__^^]BBCCDDEE//..--,,jjkkllmmwwvvuutt""##$$%%OONNMMLLJJKKLLMM XXWWVVUUJKKLLMMN'&&%%$$#rssttuuvonnmmllk*++,,--.GFFEEDDCRSSTTUUV98877665pqqrrsst43322110effgghhi + + |{{zzyyx !TSSRRQQPEFFGGHHI]\\[[ZZYFFGGHHII++**))((nnooppqqssrrqqpp&&''(())KKJJIIHHNNOOPPQQ + + TTSSRRQQNOOPPQQR#""!! vwwxxyyz +kjjiihhg.//00112CBBAA@@?VWWXXYYZ54433221tuuvvwwxxyybdQZ|vpfXQr˂nXv`˒bHAbdQZ|f`vXZHAbbnXv`Zp˂drtnvp`JXQf~fpXQJ`ےJltH~fr˂pfpvbHAZbdQZ|`vXnHAbےdrtAH~fp`JXQf~HZp˂drtnvpے`JXf~HrXQJ`AJltfH~r˂pvnXbHAZbdQZ|`vXnZHAےnXv`p˂rdrtAvpf`JXQr`f~Jlt`vXnr˂pfpvrXQJ`AJltfH~Qr˂pfpvbHAbdQZ|f`vXZHAbv`fp˂rdrtAvpf`JXQrf~HXQJ`ےJltH~f˂p`HfpvbdQZ|vpfZHAbnXv`fbHAbdQZ|f`vXZHAۅnXv`Zp˂drtnvp`JXQ~HfpXQJ`ےJltH~fbtlfpvbHAZbdQZ|`vXnJXQrbnXvdrtAH~fے`JXQ~fpvZp˂drtnvp`JXQf~HrXQJ`AJltfH~r˂p`vnXbHAZbdQZ|`vXnJtAdnXv`p˂rdrtAvpftl|`f~fpJlt`vXnr˂pnXvrXQJ`AJltfH~rbtlfpvbHAbdQZ|f`vXJXQrv`f~fp˂rdrtAvpf|ZdQbf~HXQJ`ےJltH~fZdQbtvnXbdQZ|vpf`JXQr`f~bHAbdQZ|f`vXJtAdnXv`Zp˂drtnvpbtl|pvnXQJ`ےJltH~ftlJfpvbHAZbdQZ|`vXnlJtAv`fdrtAH~f˂pZHfpvZp˂drtnvp|ZdQf~HrXQJ`AJltfH~ˁZdQbtXv`fbHAZbdQZ|`vXntArdnXv`p˂rdrtAvpfrd|~HfpJlt`vXnHAbےnXvrXQJ`AJltfH~btlfpvbHAbdQZ|f`vXlJt~Hfp˂rdrtAr˂p|ZdQbf~HXQJ`ےJltH~fZdQbtvnXbdQZ|vpf`JXQr`f~fpbHAbdQZ|f`vXJtArdnXv`Zp˂drtnvpArd|pvnXQJ`ےJltZHAbtlJfpvbHAZbdQZ|`vXnl|Zv`f~drtAH~f˂p|vnXZp˂drtnr˂p|ZdQf~HrXQJ`AJltfH~ˁZdQbtXv`fbHAZbdQZ|ے`JXQtArdnXv`p˂rdrtAvpfdQbt璅fpvJlt`vXnZdQbtv`frXQJ`AJltZHAbbtlfpvbHAbdQZ|f`vXl|~fpvp˂rdtAJr˂p|ZdQbf~HXQJ`ےJltH~flJtArnXv`bdQZ|vpflJtA~HfpbHAbdQZ|ے`JXJtArdnXv`Zp˂drtnvpZdQbtnXv`XQJ`ےltbZHAbtlJfpvbHAZbdQZ|`vXnd|Zf~HdrtAH~frd|vnXZp˂dtAQr˂p|ZdQf~HrXQJ`AJltfH~˒lJtAf~HbHAZnvpے`JXQtArdnXv`p˂rdrtAvpfdQbtfpvJlt`vXnZdQbtv`f~rXQJ`JltZHAbbtlfpvbHAbdQZ|f`vXrd|fpvp˂rfHfr˂p|ZdQbf~HXQJ`ےJltH~fl|ZdQnXv`bdQZ|vpfl|ZfpvbHAbnvpے`JXJtArdnXv`Zp˂drtnvpZdQbtnXv`XQJ`ے`vXnZHAbtlJfpvbHAZbdQZ|`vXnbtlf~fpdrtAH~fdQbtnXv`Zp˂fHQr˂p|ZdQf~HrXQJ`AJltfH~˒l|Zdf~fpbHAZvpfے`JXQtArdnXv`p˂rdrtAr˂pJtArdvnXJlt`vXnlJtArf~HrXQJ`f`vXZHAbbtlfpvbHAbdQZ|f`vXQbtlvnXp˂rH~fr˂p|ZdQbf~HXQJ`ےJlt`JXQr|ZdQv`fbdQZ|vpfd|ZfpvbHAnvpے`JXJtArdnXv`Zp˂drtnr˂pJtArdv`fbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|˂pZbtl~HfpdrtAH~fdQbtnXv`Zp˂fH~Qr˂p|ZdQf~HrXQJ`AJlt`JXQ|Zd~HfpdrtAvpfے`JXQtArdnXv`p˂rdtAJHAbے|ZdQbvnXJlt`vXnl|ZdQf~fprbdQZ|f`vXZHAbbtlfpvbHAbdQZ|r˂pQbtlvnXJltH~fr˂p|ZdQbf~HXQJ`ےltb`JXQrtlJv`ffpbdQZ|vpfbtlvnXdrtnvpے`JXJtArdnXv`Zp˂dtAZHAbۑ|ZdQv`ffbdQZ|`vXnZHAbtlJfpvbHAZnvp˂p`tArdvndrtAH~fJtArdv`fAJltfH~Qr˂p|ZdQf~HrXQJ`Jlt`JXQbtlpvndrtAvpfے`JXQtArdnXv`p˂rfHfJXQr|ZdQbrXQJ`Jlt`vXn|ZdQ~HfpۉbdQZ|f`vXZHAbbtlfpvbHAbnvpr˂p`JtArdrXQJ`JltH~fr˂p|ZdQbf~HXQJ`ے`vXn˂pZHAtl|HAZpbdQZ|r˂pbtlvnXdrtnvpے`JXJtArdnXv`Zp˂fHˁJXQr|ZdQےHAZbdQZ|`vXnZHAbtlJfpvbHAZvpfbے`ZdQbt˂rXdrtA`JXQr|ZdQbv`frAJltfH~Qr˂p|ZdQf~HrXQJ`f`vX˂pZHbtl|p˂rdrtAvpfے`JXQtArdnXv`p˂rH~fJXQrlJtAQJ`ےJlt˂pZtlJQJHAbdQZ|f`vXZHAbbtlfpvbHAnvpAbے`ZdQbtXQJ`ےJltH~fr˂p|ZdQbf~HbdQZ|`vXn˂p`Jrd|bHAZpbdQZ|HAbےtArdZp˂drtnvpے`JXJtArdnXv`Zp˂fH~ˁJXQrlJtbHAZbdQZ|`vXnZHAbtlJfpvdrtAvpfXQr˂ZdQbt˂rXdrtA`JXQr|ZdQbrXQJ`AJltfH~Qr˂p|ZdQf~HrbdQZ|f`vX˂p`Ard|p˂rdrtAvpfے`JXQtArdnXv`JltH~fpZHAbl|ZQJ`ےJlt˂p`tl|bHAbdQZ|f`vXZHAbbtlfpvdrtnvpJXQrˁZdQbtXQJ`ےJltH~fr˂p|ZdQbfHfbdQZ|`vXnے`JdQbnXbHAZpbdQZ|JXQrZdQbtZp˂drtnvpے`JXJtArdnXv`AJltfH~˂pZHAl|琙bHAZbdQZ|`vXnZHAbtlJpvndrtAvpfXQr˂v`f~˂rX`vXn˂pZHAlJtArXQJ`AJltfH~Qr˂p|ZdQfHbdQZ|f`vXbے`ZdQbnXp˂rdrtAvpfے`JXQtArdrXQJ`JltH~fp`JXQfpvQJ`ےvpfbے`rd|bHAbdQZ|f`vXZHAbbtlfpvdrtnvpJXQr˕v`f~XQJ`ےJltH~fr˂p|ZdQbےHAZbdQZ|`vXnr˂pnXv`˙bHAZpH~fJXQrZdQbtZp˂drtnvpے`JXJtArdnrXQJ`AJltfH~˂p`JXfpvbHAZbdQZ|`vXnZHAbtlJp˂rdrtAvpfZHAbf~H˂rX`vXn˂p`Jl|ZrXQJ`AJltfH~Qr˂p|ZdQےHAbdQZ|f`vXQr˂pnXv`p˂rdrtAvpfے`JXQtArdXQJ`ےJltH~fے`JXQfpvQJ`ےvpfXQr˂dQbnXbHAbdQZ|f`vXZHAbbtlZp˂drtnvpZHAbf~HXQJ`ےJltH~fr˂p|ZdQbbHAZbdQZ|`vXnr˂pnXv`fbHAZpH~fpZHAbv`f~Zp˂drtnvpے`JXJtArdrXQJ`AJltfH~˙ے`JXfpvbHAZbdQZ|`vXnZHAbnXv`p˂rdrtAvpf`JXQr~fpv˂rX`vXnے`JfpvrXQJ`AJltfH~Qr˂p|ZdQbHAbdQZ|f`vXQr˂pnXv`p˂rdrtAvpfے`JXQf~HXQJ`ےJltH~f˂pZnXvQJ`ےbHAZpbdQZ|vXnZHAے`nXv`ˑ˂rXdrtAvpfHJXQrfpvJ`ےltb~f`tlJpvnbHAZpdQZ|vXnXQrbtf~fpۂrXQrtAJlvpfHZdQbt~HfpJ`ےtbd~f`QXb㉀Xnvˍ˂rXdrtAvpfHJXQrf~HQJ`ےJlt~f`˂p`nXv`bHAZpdQZ|vXntAd|Xv`f˂rXQdrtAJvpfHl|ZvnXJ`ےtbd~f`lJtAvnXbHAZpQZ|dvXnۑp`ZQpfH~QJ`ےJlt~f`btlfpvbHAZpbdQZ|vXnJXQrbtf~fp˂rXQdrtAJvpfHZdQbt~HfJ`ےltb~f`dQbtv`fbHAZpQZ|dvXnrrd|v`frXQrtAJlvpfHXb㉀ۑf۝`vbHAZpbdQZ|vXnJtAd|nXv`ˑ˂rXdrtAvpfHl|vnXJ`ےltb~f`lJtApvnbHAZpdQZ|vXnlJtAr~HfpۂrXQrtAJl˂pZHZdQbt~HfpJ`ےtbd~f`pJAHrXnvˍ˂rXdrtAvpfHZdQbtf~HQJ`ےJlt~f`ZdQbtv`fbHAZpdQZ|vXnrrd|Xv`f˂rXQdrtAJvpfHd|ZvnXJ`ےtbdAbے`lJtAvnXbHAZpQZ|dvXnېˁ`ZQpfH~QJ`ےJlt~f`lJtfpvbHAZpbdQZ|vXnlJtA~Hfp˂rXQdrtAJ˂pZZdQbt~HfJ`ےltb~f`dQbtv`f~fbHAZpQZ|dJXQrrd|v`frXQrtAJlvpfHXb㉀ۑf۝`vbHAZpbdQZ|vXnArd|nXv`ˑ˂rXdrtAvpfHrd|vnXJ`ےltbHAbےlJtApvnbHAZpdQZ|vXnl|ZdQpvnrXQtAJl˂pZHZdQbt~HfpJ`ےtbd~f`p`ZQXbXnvˍ˂rXdrtAr˂pZdQbtf~HQJ`ےJlt~f`ZdQbtv`f~bHAZpdQZ|`JXQrrd|Xv`f˂rXQdrtAJvpfHbtlXv`fJ`ےtbnAbے`lJtAvnXbHAZpQZ|dvXn㉀ۑpJpfH~QJ`ےJltZHAbۉlJtfpvbHAZpbdQZ|vXnl|Zdfpv˂rXQdtAJl˂pZZdQbt~HfJ`ےltb~f`JtArd~HfbHAZp˅vpfHJXQrrd|v`frXQrtAJlvpfHAHr󙐂f۝`vbHAZpbdQZ|`JXQArd|nXv`ˑ˂rXdrtAvpfHQbtlnXv`J`ےtbnHAbےlJtApvnbHAZpdQZ|vXn|ZdQpvnrXQf`˂pZHZdQbt~HfpJ`ےtbd~f`ˁ`ZQXbXnvˍ˂rXdtAJlr˂pZdQbtf~HQJ`ےJlt~f`JtArdf~HbHAZpvpf`JXQrrd|Xv`f˂rXQdrtAJvpfHbtlXv`fJ`ےvXnAbے`lJtAvnXbHAZpQZ|dvXnے`㉀ۑpp|drQJ`ےtbZHAbۉlJtfpvbHAZpbdQZ|vXn|Zdfpv˂rXQHf`˂pZZdQbt~HfJ`ےltb~f`|ZdQb~fpvbHAZpvpfHJXQrrd|v`frXQrtAJlJXQr`ZQXbQtJlbHAZpnvp`JXQArd|nXv`ˑ˂rXdrtAvpfHQbtlnXv`fJ`ےvXnHAbےlJtApvnbHAZpdQZ|vXnrtlJnXv`rbd~f`˂pZHZdQbt~HfpJ`ےtbd˂pZHۑpJAtbAdZ˂rXfHf`r˂pZdQbtf~HQJ`ےJlt~f`|ZdQ~fpvbHAZpvpfH`JXQrrd|Xv`f˂rXQdrtAJ˂p`tArdf~HQZ|dvXnAbے`lJtAvnXbHAZpQZ|dAbے`Hr󙐂ˁ|drQJ`ےvXnZHAbۉlJtfpvbHAZpbdQZ|vXnbtlnXv˂rb~f`˂pZZdQbt~HfJ`ےltbJXQr|ZdQbfpvrtAJlvpfHJXQrrd|v`frXQtAJlJXQr`ZQXbQtJlbHAZpvpfH`JXQArd|nXv`ˑ˂rXdrtAr˂p`JtArd`f~dQZ|vXnHAbےlJtApvnbHAZpdQZ|˂pZHAtl|nXv`tbd~f`˂pZHZdQbt~HfpJ`ےtbn˂p`ۑp`ZtbAdZ˂r~f`r˂pZdQbtf~HQJ`ےJltJXQr|ZdQHfpvdrtAJvpfH`JXQrrd|Xv`f˂rXQdtAJlbے`ZdQbtffpQZ|dvXnAbے`lJtAvnXbHAZp˅vpfHJXQrQXb㉀|drbdQZ|vXnZHAbۉlJtfpvbHAZpbdQZ|˂pZHbtl|nXvltb~f`˂pZZdQbt~HfJ`ےtbnJXQrlJtAvnrXrtAJlvpfHJXQrrd|v`frXQf`pZHAۑpJAHrQtJldrtAvpfH`JXQArd|nXv`ˑ˂rXdtAJlAbے`ZdQbt`ffpdQZ|vXnHAbےlJtApvnbHAZpvpf˂p`Jrd|QJ`ےtbd~f`˂pZHZdQbt~HfpJ`ےvXnbے`󙐂ˁ`ZtbAdZJlt~f`r˂pZdQbtf~HQJ`ےtbJXQrlJtvnrdrtAJvpfH`JXQrrd|Xv`f˂rXQHf`XQr˂ZdQbtHAZpQZ|dvXnAbے`lJtAvnXbHAZpvpfHJXQrQXb㉀|drbdQZ|vXnZHAbۉlJtfpvbHAZpnvp˂p`Ard|XQJ`ےltb~f`˂pZZdQbt~HfJ`ےvXnpZHAbl|ZrXQrtAJlvpfHJXQrrd|v`frbd~f`p`JXXnvˍQtJldrtAvpfH`JXQArd|nXv`ˑ˂rXfHf`JXQrˁZdQbtHAZpdQZ|vXnHAbےlJtApvnbHAZpvpfHے`JdQbtJ`ےtbd~f`˂pZHZdQbt~HfpQZ|dvXnQr˂ppfH~tbAdZJlt~f`r˂pZdQbtf~HQJ`ےvXnpZHAl|˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rb~f`XQr˂lJtArbHAZpQZ|dvXnAbے`lJtAvnXrtAJlvpfHZHAbf۝`v|drbdQZ|vXnZHAbۉlJtfpvbHAZpvpfHbے`ZdQbtJ`ےltb~f`˂pZZdQbt~HfdQZ|vXnp`JXQd|ZrXQrtAJlvpfHJXQrrd|v`ftbd~f`ے`JXXnvˍQtJldrtAvpfH`JXQArd|nXv`ˑ˂r~f`JXQr˒lJtAbHAZpdQZ|vXnHAbےlJtApvndrtAJvpfHr˂pdQbtJ`ےtbd~f`˂pZHZdQbtHfpQZ|dvXnQr˂ppfH~tbAdZJlt~f`r˂pZdQbtf~HbdQZ|vXnp`JXrd|˂rXQdrtAJvpfH`JXQrrd|Xv`fltb~f`ZHAbl|ZdQbHAZpQZ|dvXnAbے`lJtAvnrXrtAJlvpfH`JXQf۝`v|drbdQZ|vXnZHAbۉlJtfpvdrtAvpfHQr˂pZdQbtJ`ےltb~f`˂pZZdQbtHfpdQZ|vXnے`JXQbnXvrXQrtAJlvpfHJXQrrd|QJ`ےtbd~f`r˂pXnvˍQtJldrtAvpfH`JXQArd|nXv`Jlt~f`ZHAbl|ZdbHAZpdQZ|vXnHAbےlJtAvnrdrtAJvpfHr˂p`f~fpJ`ےtbd~f`˂pZHZdQbtHAZpQZ|dvXnZHAbpfH~tbAdZJlt~f`r˂pZdQbtfHfpbdQZ|vXnے`JXQbnX˂rXQdrtAJvpfH`JXQrrd|XQJ`ےltb~f``JXQrvnXbHAZpQZ|dvXnAbے`lJtArXQrtAJlvpfH`JXQf۝`v|drbdQZ|vXnZHAbۉlJtvndrtAvpfHQr˂pv`f~fJ`ےltb~f`˂pZZdQbtHAZpdQZ|vXn˂pZv`frXQrtAJlvpfHJXQrrd|J`ےtbd~f`r˂p`XnvˍQtJldrtAvpfH`JXQArd|rXQJ`Jlt~f``JXQpvnbHAZpdQZ|vXnHAbےlJtA˂rXQdrtAJvpfHHAbے~HfpJ`ےtbd~f`˂pZHZdQbnXbHAZpQZ|dvXnہJXQrpfH~tbAdZJlt~f`r˂pZdQbtHAZpbdQZ|vXnr˂pXv`f˂rXQdrtAJvpfH`JXQrrd|J`ےltb~f``JXQrvnXbHAZpQZ|dvXnAbے`v`frXQrtAJlvpfH˂pZHf۝`v|drbdQZ|vXnZHAbۉlJt˂rXdrtAvpfHZHAbې~HfJ`ےltb~f`˂pZZdQbnbHAZpdQZ|vXn˂p`v`f~rXQrtAJlvpfHJXQr~HfpJ`ےtbd~f`Abے`XnvˍQtJldrtAvpfH`JXQArd|QJ`ےJlt~f``JXQpvnbHAZpdQZ|vXnHAbےXv`f˂rXQdrtAJvpfHJXQrfpvJ`ےtbd~f`˂pZHvnXbHAZpQZ|dvXnہJXQrpfH~tbAdZJlt~f`r˂pZdQbbHAZpbdQZ|vXnr˂p`Xv`f˂rXQdrtAJvpfH`JXQr~HfJ`ےltb~f`˂pZHAnXv`bHAZpQZ|dvXnAے`v`frXQrtAJlvpfH˂p`Zf۝`v|drbdQZ|vXnZHAbnXv`ˑ˂rXdrtAvpfHJXQr~fpvJ`ےltb~f`˂pZpvnbHAZpdQZ|vXnbے`f~HrXQrtAJlvpfHJXQrbt~HfpJ`ےtbd~f`QXb㉀XnvˍQtJldrtAvpfH`JXQf~HQJ`ےJlt~f`˂pZHnXv`bHAZpdQZ|vXnHAے`Xv`f˂rXQdrtAJvpfHJXQrfpvJ`ےtbd~f`lJtvnXbHAZpQZ|dvXnۑpJAHrpfH~tbAdZJlt~f`r˂pfpvbHAZpbdQZ|vXnAbے`f~H˂rXQdrtAJvpfHJXQrb~HfJ`ےltb~f`˂p`JnXv`bHAZpQZ|dvXnAd|v`frXQrtAJlvpfH󙐂ˁ`Zf۝`v|drQt}~~56666666666666666666666666666666666666 \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv2_0.dat b/vendor/endroid/qr-code/assets/data/qrv2_0.dat new file mode 100644 index 000000000..e82090e91 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv2_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv2_1.dat b/vendor/endroid/qr-code/assets/data/qrv2_1.dat new file mode 100644 index 000000000..5fc94c09a Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv2_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv2_2.dat b/vendor/endroid/qr-code/assets/data/qrv2_2.dat new file mode 100644 index 000000000..2beed99d8 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv2_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv2_3.dat b/vendor/endroid/qr-code/assets/data/qrv2_3.dat new file mode 100644 index 000000000..fd8bc282b Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv2_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv30_0.dat b/vendor/endroid/qr-code/assets/data/qrv30_0.dat new file mode 100644 index 000000000..45c75896d --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv30_0.dat @@ -0,0 +1,273 @@ +}}}}}~}~}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststsrqrqrqrqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefdcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKKKKKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefdcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABA@?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefdcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefeeeedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~}|{|{|{|{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghgheefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMLKLKKLKKKKKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrqpopopopopopopopmnmnmnmnklklklklijijijijghghghghfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOLKLKKKKKKLKLKLKJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopopopopopmnmnmnmnklklklklijijijijghghghghfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPONMKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?>=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopopopopopmnmnmnmnklklklklijijijijghghghghfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQNMNMNMNMKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopopopopopmnmnmnmnklklklklijijijijghghghghfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQNMNMNMNMKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|{zyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopopopopopmnmnmnmnklklklklijijijijghghghghfefeeeeedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopoponmnmnmnmnmnmnmnklklklklijijijijghghghghefefefefdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLIJIJIJIJIJIJIJIHGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnmnmnmnmnklklklklijijijijghghghghefefefefdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKKKKKKIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=<;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnmnmnmnmnklklklklijijijijghghghghefefefefdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnmnmnmnmnklklklklijijijijghghghghefefefefdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|yzyzyzyzyxwxwxwxwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnmnmnmnmnklklklklijijijijghghghghefefefefdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnmlklklklklklklklijijijijghghgfefefeeeeeedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJGHGHGHGHGHGHGHGFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklklklklklijijijijefefeeeefefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;:9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklklklklklijijijihefefefefdcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKKKKKKLIJIJIJIJGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklklklklklghghghghefefefefdcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxwvuvuvuvuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklklklklklghghghghefefefefdcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:787878785656565634343434}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklkjijijijghghghghefefefeedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFEFEFEFEDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:787878785656565634343434}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghgheeeefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:98787878785656565634343434}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:78787878787878785656565634343434}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKKKKKKLKIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:78787878787878785656565634343434}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvutstststststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:78787878787878785656543434343434}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCBABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:78787878787878783434343434343434}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghfefefeeedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:78787878787878763434343434343434}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghgheeefefefdcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:78787878565656563434343434343434}}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststststststqrqrqrqropopopopmnmnmnmnklklklklijijijijghghghghefefefefdcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656343434343434343434343434121111110/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!            + + + +34343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +34343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +34343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + + + +34343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)('('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + + + + + +34343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + + + + + +34343434211111120/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + + + + + +34343434121212120/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + + + + + +34343434121212120/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + + + + 34343434121212120/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('&%&%&%&%&%$#$#$#$#"!"!"!"!         + + + +34343434121212120/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!         + + + +34343434121212120/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!         + + + +34321212111111210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!         + + + +121111122121210/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!         + + + +121212120/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%$#$#$#$#$#"!"!"!"!         + + + +121212120/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!         + + + +121212120/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!         + + + +121211110/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!         + + + +112121210/0/0/0/0/0/0/.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!         + + + +212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#"!"!"!"!"!         + + + +212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!         + + + +212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!         + + + +212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!          + + + +212111110/0/0/0/.-.-.-.-.-.-.-,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!             + + + +121212120/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!              + + + +121212120/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!                 + + + +121212120/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!                 + + + +121212120/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!               + + + +121212120/0/0/0/.-.-.-.-,+,+,+,+,+,+,+*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!             + + + +qqrrssttxyyzz{{|%$$##""!PQQRRSSTMLLKKJJI())**++,uttssrrqtuuvvwwx)((''&&%LMMNNOOPQPPOONNM-..//001RQQKKJJI=>>??@@AXXWWVVUU ~~}} + + iijjkkll44332211AABBCCDD\\[[ZZYY eeffgghh$$##""!!rrssttuu]^^__``a@??>>==<56677889hggffeed YZZ[[\\]DCCBBAA@12233445lkkjjiih  uuvvwwxx ~~}}| + + |}}~~! TUUVVWWXIHHGGFFE,--..//0qppoonnmxyyzz{{|%$$##""!PQQRRSSTMLLKKJJI1778899:IHHGGFFEABBCCDDETTSSRRQQ!!""##$$||{{zzyymmnnoopp00//..--EEFFGGHHXXWWVVUU ~~}} + + iijjkkll vvwwxxyyabbccdde<;;::9989::;;<<=dccbbaa`]^^__``a@??>>==<56677889hggffeed~~}} + + yyzz{{|| + + |{{zzyyx XYYZZ[[\EDDCCBBA01122334mllkkjji + + |}}~~! TUUVVWWXIHHGGFFE:;;<<==>EDDCCBBAEFFGGHHIPPOONNMM%%&&''((xxwwvvuuqqrrsstt,,++**))IIJJKKLLTTSSRRQQ!!""##$$||{{zzyymmnnooppzz{{||}}effgghhi87766554=>>??@@A`__^^]]\abbccdde<;;::9989::;;<<=dccbbaa`||{{zzyy + + }}~~ + + xwwvvuut\]]^^__`A@@??>>=45566778ihhggffe XYYZZ[[\EDDCCBBA>??@@AABA@@??>>=IJJKKLMNLLKKJJII))**++,,ttssrrqquuvvwwxx((''&&%%MMNNOOPPPPOONNMM%%&&''((xxwwvvuuqqrrsstt~~ +ijjkkllm43322110ABBCCDDE\[[ZZYYX effgghhi87766554=>>??@@A`__^^]]\ !!"xxwwvvuu tssrrqqp`aabbccd=<<;;::9899::;;>=BCCDDEEF=<<;;::9OPQQRRSSHHGGFFEE--..//00ppoonnmmyyzz{{||$$##""!!QQRRSSTTLLKKJJII))**++,,ttssrrqquuvvwwxx + mnnooppq0//..--,EFFGGHHIXWWVVUUT !~~}}| + + ijjkkllm43322110ABBCCDDE\[[ZZYYX"##$$%%&ttssrrqqpoonnmml deeffggh98877665<==>>??@a``__^^]`aabbccd=<<;;::9FGGHHIIJ98877110TTUUVVWWDDCCBBAA11223344llkkjjii + + }}~~ UUVVWWXXHHGGFFEE--..//00ppoonnmmyyzz{{|| + + qrrssttu,++**))(IJJKKLLMTSSRRQQP!""##$$%|{{zzyyxmnnooppq0//..--,EFFGGHHIXWWVVUUT&''(())*ppoonnmmlkkjihgf ~~} + + hiijjkkl54433221@AABBCCD]\\[[ZZY deeffggh98877665JKKQQRRS0//..--,XXYYZZ[[@@??>>==55667788hhggffee YYZZ[[\\DDCCBBAA11223344llkkjjii + + }}~~~~}}|uvvwwxxy(''&&%%$MNNOOPPQPOONNMML%&&''(()xwwvvuutqrrssttu,++**))(IJJKKLLMTSSRRQQP*++,,--.llkkjjii~~}}|| !!""eeddccbb !!""##$}||{{zzy lmmnnoop100//..-DEEFFGGHYXXWWVVU ~~} + + hiijjkkl54433221STTUUVVW,++**))(\\]]^^__<<;;::9999::;;<>==55667788hhggffee  |{{zzyyx yzz{{||}$##""!! QRRSSTTULKKJJIIH)**++,,-tssrrqqpuvvwwxxy(''&&%%$MNNOOPPQPOONNMML.//00117hhggffee {{zzyyxx##$$%%&&aa``__^^$%%&&''(yxxwwvvupqqrrsst-,,++**)HIIJJKKLUTTSSRRQ !!""##$}||{{zzy lmmnnoop100//..-WXXYYZZ[(''&&%%$``aabbcc88776655==>>??@@``__^^]]aabbccdd<<;;::9999::;;<>??@@``__^^]]tssrrqqp YZZ[[\\]DCCBBAA@12233445lkkjjiih + + }~~ UVVWWXXYHGGFFEED;<<==>>?``__^^]]%%&&''((ssrrqqpp++,,--..YYXXWWVV,--..//0qppoonnmxyyzz{{|%$$##""!PQQRRSSTMLLKKJJI())**++,uttssrrqtuuvvwwx)((''&&%_``aabbc jkkllmmn00//..--EEFFGGHHXXWWVVUU ~~}} + + iijjkkll44332211AABBCCDD\\[[ZZYY~~}}||poonnmml]^^__``a@??>>==<56677889hggffeed YZZ[[\\]DCCBBAA@?@@AABBC\\[[ZZYY))**++,,oonnmmll//001177UUTTSSRR01122334mllkkjji + + |}}~~! TUUVVWWXIHHGGFFE,--..//0qppoonnmxyyzz{{|%$$##""!cddeekklnooppqqr,,++**))IIJJKKLLTTSSRRQQ!!""##$$||{{zzyymmnnoopp00//..--EEFFGGHHXXWWVVUU {{zzyyxxlkkjihgfabbccdde<;;::9989::;;<<=dccbbaa`]^^__``a@??>>==>??@@A`__^^]]\abbccdde<;;::998GHHIIJJKTTSSRRQQ11223344bbaa``__<<==>>??KJJIIHHG899::;;>=45566778ihhggffe pqqrrsst vwwxxyyz$$##""!!QQRRSSTTLLKKJJII))**++,,ttssrrqquuvvwwxx((''&&%%MMNNOOPPPPOONNMM%%&&''((ssrrqqpp##$$%%&&aa``__^^ !~~}}| + + ijjkkllm43322110ABBCCDDE\[[ZZYYX effgghhi87766554KQQRRSSTPPOONNMM55667788^^]]\\[[@@AABBCCGFFEEDDC<==>>??@a``__^^]`aabbccd=<<;;::9899::;;>??@a``__^^]xyyzz{{|~YYZZ[[\\DDCCBBAA11223344llkkjjii + + }}~~ UUVVWWXXHHGGFFEE--..//00kkeeddcc++,,--..YYXXWWVV%&&''(()xwwvvuutqrrssttu,++**))(IJJKKLLMTSSRRQQP!""##$$%|{{zzyyxmnnooppq0//..--,XYYZZ[[\HHGGFFEE==>>??@@VVUUTTSSHHIIJJKK?>>==<<;DEEFFGGHYXXWWVVU ~~} + + hiijjkkl54433221@AABBCCD]\\[[ZZY |}}~~]]^^__``@@??>>==55667788hhggffee YYZZ[[\\DDCCBBAA11223344bbaa``__//001177UUTTSSRR)**++,,-tssrrqqpuvvwwxxy(''&&%%$MNNOOPPQPOONNMML%&&''(()xwwvvuutqrrssttu,++**))(\]]^^__`DDCCBBAAAABBCCDDRRQQKKJJQQRRSSTT;::99887HIIJJKKLUTTSSRRQ !!""##$}||{{zzy lmmnnoop100//..-DEEFFGGHYXXWWVVU ~~} + +  + + aabbccdd<<;;::9999::;;<>==55667788^^]]\\[[8899::;;QQPONMLK-..//001poonnmml yzz{{||}$##""!! QRRSSTTULKKJJIIH)**++,,-tssrrqqpuvvwwxxy(''&&%%$`aabbccd@@??>>==EEFFGGHHIIHHGGFFUUVVWWXX76543211LMMNNOOPQPPOONNM$%%&&''(yxxwwvvupqqrrsst-,,++**)HIIJJKKLUTTSSRRQ !!""##$}||{{zzy   eeffgghh88776655==>>??@@``__^^]]aabbccdd<<;;::9999::;;<>??KJJIIHHG12233445lkkjjiih + + }~~ UVVWWXXYHGGFFEED-..//001poonnmml yzz{{||}$##""!! deekkllm<<;;::99IIJJKKLLEEDDCCBBYYZZ[[\\00//..--PQQRRSSTMLLKKJJI())**++,uttssrrqtuuvvwwx)((''&&%LMMNNOOPQPPOONNM$%%&&''(yxxwwvvu~~}}||{~~}} + + iijjkkll44332211AABBCCDD\\[[ZZYY eeffgghh88776655==>>??@@VVUUTTSS@@AABBCCGFFEEDDC56677889hggffeed YZZ[[\\]DCCBBAA@12233445lkkjjiih + + }~~ mnnooppqrqqppoon88776655MMNNOOPPAA@@??>>]]^^__``,,++**))TUUVVWWXIHHGGFFE,--..//0qppoonnmxyyzz{{|%$$##""!PQQRRSSTMLLKKJJI())**++,uttssrrq{zzyyxxw||{{zzyymmnnoopp00//..--EEFFGGHHXXWWVVUU ~~}} + + iijjkkll44332211AABBCCDDRRQQKKJJDDEEFFGGCBBAA@@?9::;;<<=dccbbaa`]^^__``a@??>>==<56677889hggffeed qrrssttunmmllkke44332211QQRRSSTT==<<;;::aabbccdd((''&&%%XYYZZ[[\EDDCCBBA01122334mllkkjji + + |}}~~! TUUVVWWXIHHGGFFE,--..//0qppoonnm + + wvvuuttsxxwwvvuuqqrrsstt,,++**))IIJJKKLLTTSSRRQQ!!""##$$||{{zzyymmnnoopp00//..--EEFFGGHHIIHHGGFFHHIIJJKK?>>==<<;=>>??@@A`__^^]]\abbccdde<;;::9989::;;<<=dccbbaa`uvvwwxxyeddccbba00//..--UUVVWWXX99887711eekkllmm$$##""!!\]]^^__`A@@??>>=45566778ihhggffe XYYZZ[[\EDDCCBBA01122334mllkkjji srrqqppo !!""ttssrrqquuvvwwxx((''&&%%MMNNOOPPPPOONNMM%%&&''((xxwwvvuuqqrrsstt,,++**))IIJJKKLLEEDDCCBBQQRRSSTT;::99887ABBCCDDE\[[ZZYYX effgghhi87766554=>>??@@A`__^^]]\yzz{{||}a``__^^],,++**))YYZZ[[\\00//..--nnooppqq `aabbccd=<<;;::9899::;;>=45566778ihhggffeonnmmllk##$$%%&&ppoonnmmyyzz{{||$$##""!!QQRRSSTTLLKKJJII))**++,,ttssrrqquuvvwwxx((''&&%%MMNNOOPPAA@@??>>UUVVWWXX76543211EFFGGHHIXWWVVUUT !~~}}| + + ijjkkllm43322110ABBCCDDE\[[ZZYYX }~~]\\[[ZZY((''&&%%]]^^__``,,++**))rrssttuudeeffggh98877665<==>>??@a``__^^]`aabbccd=<<;;::9899::;;>??@a``__^^] !baa``__^++,,--..hhggffee YYZZ[[\\DDCCBBAA11223344llkkjjii + + }}~~ UUVVWWXX99887711]]^^__``,,++**))MNNOOPPQPOONNMML%&&''(()xwwvvuutqrrssttu,++**))(IJJKKLLMTSSRRQQP!""##$$%|{{zzyyx~UTTSSRRQ eeffgghh$$##""!!zz{{||}}lmmnnoop100//..-DEEFFGGHYXXWWVVU ~~} + + hiijjkkl54433221@AABBCCD]\\[[ZZY!""##$$%^]]\\[[Z//001123ddccbbaa]]^^__``@@??>>==55667788hhggffee YYZZ[[\\00//..--aabbccdd((''&&%%QRRSSTTULKKJJIIH)**++,,-tssrrqqpuvvwwxxy(''&&%%$MNNOOPPQPOONNMML%&&''(()xwwvvuut~}}||{{zQKKJJIIHiijjkkll ~~ +pqqrrsst-,,++**)HIIJJKKLUTTSSRRQ !!""##$}||{{zzy lmmnnoop100//..-DEEFFGGHYXXWWVVU%&&''(()ZYYXXWWV45677889``__^^]]aabbccdd<<;;::9999::;;<>??@@``__^^]]aabbccdd((''&&%%nnooppqq YZZ[[\\]DCCBBAA@12233445lkkjjiih + + }~~ UVVWWXXYHGGFFEED-..//001poonnmml + + vuuttssrDCCBBAA@@??>>==>==<<66778899ggffeeddZZ[[\\]]CCBBAA@@22334455kkjjiihh + + ~~~~}}||{vwwxxyyz'&&%%$$#NOOPPQQRONNMMLLK&''(())*wvvuuttsrssttuuv qppoonnm+**))((']]^^__``;;::9988::;;<<==ccbbaa``^^__``aa??>>==<<66778899ggffeedd + +{zzyyxxw +z{{||}}~#""!! RSSTTUUVKJJIIHHG*++,,--.srrqqppovwwxxyyz + + +mllkkjji'&&%%$$#aabbccdd77665544>>??@@AA__^^]]\\bbccddee;;::9988::;;<<==ccbbaa`` wvvuutts + ~VWWXXYYZGFFEEDDC.//00112onnmmllk +z{{||}}~ + ihhggffe #""!! eefghijk33221100BBCCDDEE[[ZZYYXX ffgghhii77665544>>??@@AA__^^]]\\srrqqppoZ[[\\]]^CBBAA@@?23344556kjjiihhg + ~eddccbba !!""##$kllmmnno//..--,,FFGGHHIIWWVVUUTT !!~~}}|| + + jjkkllmm33221100BBCCDDEE[[ZZYYXX~~}}||{{onnmmllk^__``aab?>>==<<;6778899:gffeeddca``__^^]$%%&&''(oppqqrrs++**))((JJKKLLMMSSRRQQPP""##$$%%{{zzyyxxnnooppqq//..--,,FFGGHHIIWWVVUUTT !!zzyyxxwwkjihgfeebccddeef;::99887:;;<<==>cbbaa``_]\\[[ZZY())**++,sttuuvvw''&&%%$$NNOOPPQQOONNMMLL&&''(())wwvvuuttrrssttuu++**))((JJKKLLMMSSRRQQPP""##$$%%vvuuttss !!""##ddccbbaa fgghhiij76655443>??@@AAB_^^]]\\[~~}}||{ !!""#YXXWWVVU,--..//0 +wxxyyzz{##""!! RRSSTTUUKKJJIIHH**++,,--ssrrqqppvvwwxxyy''&&%%$$NNOOPPQQOONNMMLL&&''(())rrqqppoo$$%%&&''``__^^]] !!"~~}}||{ + + jkkllmmn3221100/BCCDDEEF[ZZYYXXW{zzyyxxw#$$%%&&'UTTSSRRQ01122334 + {||}}~~VVWWXXYYGGFFEEDD..//0011oonnmmll zz{{||}}##""!! RRSSTTUUKKJJIIHH**++,,--nnmmllkk(())**++\\[[ZZYY"##$$%%&{zzyyxxwnooppqqr/..--,,+FGGHHIIJWVVUUTTS !!"wvvuutts'(())**+QPPOONNM45566778ZZ[[\\]]CCBBAA@@22334455kkjjiihh + + ~~VVWWXXYYGGFFEEDD..//0011eeddccbb,,--..//XXWWVVUU&''(())*wvvuuttsrssttuuv+**))(('JKKLLMMNSRRQQPPO"##$$%%&srrqqppo+,,--../MLLKKJJI899::;;< ^^__``aa??>>==<<66778899ggffeeddZZ[[\\]]CCBBAA@@22334455aa``__^^00117788TTSSRRQQ*++,,--.srrqqppovwwxxyyz'&&%%$$#NOOPPQQRONNMMLLK&''(())*onnmmllk/0011778IHHGGFFE<==>>??@ + + bbccddee;;::9988::;;<<==ccbbaa``^^__``aa??>>==<<66778899]]\\[[ZZ99::;;<>??@@AA__^^]]\\bbccddee;;::9988::;;<<==YYXXWWVV==>>??@@JIIHHGGF23344556kjjiihhg + ~VWWXXYYZGFFEEDDC.//00112baa``__^<==>>??@A@@??>>=DEEFFGGH~~}}|| + + jjkkllmm33221100BBCCDDEE[[ZZYYXX ffgghhii77665544>>??@@AAUUTTSSRRAABBCCDDFEEDDCCB6778899:gffeeddcZ[[\\]]^CBBAA@@?23344556^]]\\[[Z@AABBCCD=<<;;::9HIIJJKKL{{zzyyxxnnooppqq//..--,,FFGGHHIIWWVVUUTT !!~~}}|| + + jjkkllmm33221100BBCCDDEEQQKKJJIIEEFFGGHHBAA@@??>:;;<<==>cbbaa``_^__``aab?>>==<<;6778899:ZYYXXWWVDEEFFGGH98877665LMMNNOOPwwvvuuttrrssttuu++**))((JJKKLLMMSSRRQQPP""##$$%%{{zzyyxxnnooppqq//..--,,FFGGHHIIHHGGFFEEIIJJKKQQ>==<<;;:>??@@AAB_^^]]\\[bccddeef;::99887:;;<<==>VUUTTSSRHIIJJKKQ54433221PQQRRSST !!""##ssrrqqppvvwwxxyy''&&%%$$NNOOPPQQOONNMMLL&&''(())wwvvuuttrrssttuu++**))((JJKKLLMMDDCCBBAARRSSTTUU:9988776BCCDDEEF[ZZYYXXW fgghhiij76655443>??@@AABRQQKKJJIQRRSSTTU100//..-TUUVVWWX$$%%&&''oonnmmll zz{{||}}##""!! RRSSTTUUKKJJIIHH**++,,--ssrrqqppvvwwxxyy''&&%%$$NNOOPPQQ@@??>>==VVWWXXYY54321100FGGHHIIJWVVUUTTS !!"~~}}||{ + + jkkllmmn3221100/BCCDDEEFIHHGGFFEUVVWWXXY-,,++**)XYYZZ[[\(())**++kkjjiihh + + ~~VVWWXXYYGGFFEEDD..//0011oonnmmll zz{{||}}##""!! RRSSTTUU<<;;::99ZZ[[\\]]//..--,,JKKLLMMNSRRQQPPO"##$$%%&{zzyyxxwnooppqqr/..--,,+FGGHHIIJEDDCCBBAYZZ[[\\])((''&&%\]]^^__`,,--..//ggffeeddZZ[[\\]]CCBBAA@@22334455kkjjiihh + + ~~VVWWXXYY88771100^^__``aa++**))((NOOPPQQRONNMMLLK&''(())*wvvuuttsrssttuuv+**))(('JKKLLMMNA@@??>>=]^^__``a%$$##""!`aabbccd00112345ccbbaa``^^__``aa??>>==<<66778899ggffeeddZZ[[\\]]//..--,,bbccddee''&&%%$$RSSTTUUVKJJIIHHG*++,,--.srrqqppovwwxxyyz'&&%%$$#NOOPPQQR=<<;;::9abbccdde! deeffggh6778899:__^^]]\\bbccddee;;::9988::;;<<==ccbbaa``^^__``aa++**))((kkllmmnn##""!! VWWXXYYZGFFEEDDC.//00112onnmmllk +z{{||}}~#""!! RSSTTUUV98877110ekkllmmnhiijjkkl:;;<<==>[[ZZYYXX ffgghhii77665544>>??@@AA__^^]]\\bbccddee''&&%%$$ooppqqrrZ[[\\]]^CBBAA@@?23344556kjjiihhg + ~VWWXXYYZ0//..--,nooppqqrlmmnnoop>??@@AABWWVVUUTT !!~~}}|| + + jjkkllmm33221100BBCCDDEE[[ZZYYXX ffgghhii##""!! ssttuuvv^__``aab?>>==<<;6778899:gffeeddcZ[[\\]]^,++**))(rssttuuvpqqrrsstBCCDDEEFSSRRQQPP""##$$%%{{zzyyxxnnooppqq//..--,,FFGGHHIIWWVVUUTT !!~~}}|| + + jjkkllmmwwxxyyzzbccddeef;::99887:;;<<==>cbbaa``_^__``aab(''&&%%$vwwxxyyz tuuvvwwxFGGHHIIJOONNMMLL&&''(())wwvvuuttrrssttuu++**))((JJKKLLMMSSRRQQPP""##$$%%{{zzyyxxnnooppqq{{||}}~~ fgghhiij76655443>??@@AAB_^^]]\\[bccddeef$##""!! z{{||}}} + + xyyzz{{||}}fpvf~HbHAZdrtAJJXQrJAdbtlnXv`Zp˂AJltfH~ˑZHAbrbtl|ZdQfpvbHAdrtvXnp`JXlJtfpvbHAZdrtAbdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|JltH~fr˂prd|fvnX˂rXJlt~f`ZHAbۉlJtZdQbtfpvbHAZpdrtAvpfHr˂plJtnXv`fpvp˂rltbZHAbۂ|ZdQJtArdf~HrXQJ`ۉbdQZ|f`vXے`JXJtAdbtlnXv`Zp˂AJltf`Qr˂pArd|nXv`p˂rJltdtAJvpfr˂p|ZdQbfpvbHAZdrtAbdQZ|`vXnZHAbZdQbtv`fQJ`ےbdQZ|vXn`JXQArd|lJnXv`ˑ˂rXJlt~f`ZHAbArd|f~HnXv`XQJ`ےdQZ|``JXQbtl|ZdQfpvbHAdrtnvpQr˂p|ZdQJtArdf~HrXQJ`ۉbdQZ|vXnۑZHAbZdQbtf~HXQJ`ےbdQZ|ltbH~fZHAbtlJnXv`p˂rJltdtAJvpf˂pZlJtA~HfpۙbHAZpdrtAvpfHr˂pZdQbtfpvf~HQJ`ےbdQZ|vXn`JXQZdQtAfpvp˂rbHAZvXnr˂pJtArdbtlnXv`Zp˂AJltfH~ˑZHAbbtl|ZdQfpvbHAdrtvpfHے`JXlJArfpvbHAZdrtAnvp`vXnے`JXQtArdf~HXQJ`ےbdQZ|ltbH~fHAbےrdtvnX˂rXJlt~f`ZHAbۉlJtnXv`fpvbHAZpdrtAvpfHr˂prd|nXv`XQJ`ےp˂rvpfHZHAbۂ|ZdQJfpvf~HrXQJ`ۉbdQZ|f`vXے`JXJtArdbtlnXv`Zp˂AJlt~f`Qr˂p|ZdQnXv`p˂rJltfHfvpfr˂p|ZdQbfpvbHAZdrtAnvp`vXn`JXQrlJfpv`ffpQJ`ےbdQZ|vXn`JXQArd|f~HnXv`ˑ˂rXJlt~f`ZHAbZdQbtf~HbHAZXQJ`ے~f``JXQbtlnXv`fpvbHAdrtnvpQr˂p|ZdQJfpvf~HrXQJ`ۉbdQZ|vXnۑZHAXQbtlf~HXQJ`ےbdQZ|`vXnH~fZHAbtlJnXv`p˂rJltfHfvpf˂p`vnvvnbHAZpdrtAvpfHr˂pZdQbtfpvfHfpQJ`ےbdQZ|vXn`JXQlJtAfpvp˂rJltvXH~rZAbJtArdf~HnXv`Zp˂AJltfH~ˑZHAbbtlnXv`fpvbHAdrtvp`vXr˂pJtArdfpvbHAZdrtAvpf`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXnH~fJXQrbf~HrXQJ`ۑ˂rXJlt~f`ZHAbۉlJtnXv`˝vnbHAZpdrtAvpfHr˂prd|nXv`XQJ`ےdrtAJf`vے`J|ZdQfpvfHrXQJ`ۉbdQZ|f`vXے`JXJtArdf~HnXv`Zp˂AJltnvpZHAb|ZdQnXv`p˂rJltH~fvpfr˂p|ZdQbfpvbHAZdrtAvpf`vXntl|fpv㒐HAZpQJ`ےbdQZ|vXn`JXQArd|f~HrXQJ`ۑ˂rXJlt~f`ZHAbZdQbtdf~HbHAZltbXnvXQr˂btlnXv`fpv㒐bHAdrtnvpQr˂p|ZdQfpvfHrXQJ`ۉbdQZ|fH~`JXQbtlf~HXQJ`ےbdQZ|`vXnے`JXQZHAbtlJnXv`p˂rJltH~fvpfZdQbtnXv`ˑ˂rXbHAZpdrtAvpfHr˂pZdQbtfpv㒐HAZpQJ`ےbdQZ|vXn`JXQ|Zdfpvp˂rdQZ|pfH~pZHAbJtArdf~HnrXQJ`Zp˂AJltfH~ˑZHAbbtlnXv`fpv㒐bHAdrtf`vXr˂pJtArfpvbHAZdrtAvpfr˂pے`JXQtArdf~HXQJ`ےbdQZ|`vXnے`JXQlJtAf~HQJ`ے˂rXJlt~f`ZHAbۉlJtnXv`ˑ˂rXbHAZpdrtAvpfHr˂pQbtlnXv`XQJ`ےdrtAJf`vے`J|ZdQfpvےHArXQJ`ۉbdQZ|f`vXے`JXJtArdf~HnrXQJ`Zp˂AJltnvpZHAbZdQbtnXv`p˂rJltH~fZHAbr˂p|ZdQbfpvbHAZdrtAvpfHAbےrd|fpvbHAZpQJ`ےbdQZ|vXn`JXQArd|f~HQJ`ے˂rXJlt~f`ZHAbۑJtArdf~HbHAZltbXnXQr˂btlnXv`Zp˂󒐙bHAdrtnvpQr˂p|ZdQfpvےHArXQJ`ۉbdQZ|fHX˂pZHlJtAf~HXQJ`ےbdQZ|`vXnے`JXQZHAےtlJnXv`p˂rJltH~f`JXQrZdQtArnXvf~˂rXJltdrtAvpfHr˂pZdQbtfpvbHAZpQJ`ےbdQZ|vXn`JXQ|Zdfpvp˂rdQtAJlf`vXpZAb`JtArdf~HrXQJ`Zp˂AJltfH~ˑZHAbbtlnXv`Zp˂󒐙bHAdrtnvpAbے`rd|fpvbHAZdrtAvpfr˂p`JXQrtArdf~HXQJ`ےbdQZ|`vXn˂pZd|ZHfpvQJ`ےbdQZ|Jlt~f`ZHAbۉlJtnXv`ˑ˂rXJltdrtAvpfHr˂pQbtlnXv`XQJ`ےtbdQnvpJXQr|ZdQfpvbHArXQJ`ۉbdQZ|f`vXے`JXJtArdf~HrXQJ`Zp˂AJltfH~ˁJXQrZdQbtnXv`p˂rJltH~fZHAbbtl|ZdQbfpvbHAZdrtAvpfHAbےdQbt璀nXvbHAZpdrtAbdQZ|vXn`JXQArd|f~HQJ`ےbdQZ|Jlt~f`ZHAbۑ|ZdQf~HbHAZZ|dfH~˂pZHbtlnXv`Zp˂JltdrtnvpQr˂p|ZdQfpvbHArXQJ`ۉbdQZ|f`vX˂p`lJtAf~HXQJ`ےbdQZ|`vXnے`JXQJtAdtlJnXv`p˂rJltH~f`JXQrlJtAr`f~˂rXJltdtAJlvpfHr˂pZdQbtfpvbHAZpdrtAbdQZ|vXn`JXQbtlfpvp˂rrtAJlf`vXAbے`JtArdf~HrXQJ`ۉbdQZ|AJltfH~ˑZHAbbtlnXv`Zp˂JltdrtnvpJXQrbtrdZQbfpvbHAZdrtAvpfr˂p|ZdQbtArdf~HXQJ`ےbdQZ|`vXnے`d|ZHfpvQJ`ےbdQZ|tb~f`ZHAbۉlJtnXv`ˑ˂rXJltdtAJlvpfHr˂pJtArdnXv`XQJ`ےtbdQnvpJXQr|ZdQfpvbHAdrtbdQZ|f`vXے`JXJtArdf~HrXQJ`ۉbdQZ|AJltfH~lJAtlJnXv`p˂rJltH~fZHAbtlJ|ZdQbfpvbHAZdrtAvpfJXQrdQbtdnXvbHAZpdrtAnvpvXn`JXQArd|f~HQJ`ےbdQZ|tb~f`ZHAbۂ|ZdQf~HbHAZZ|l`vXn˂pZHbtlnXv`Zp˂AJltdtAnvpQr˂p|ZdQfpvbHAdrtbdQZ|vpfۂ|ZdQfpvf~HXQJ`ےbdQZ|`vXnے`JXQtArdtlJnXv`p˂rJltH~f˂pZHA|ZdQ`f~fp˂rXJltfHf`vpfHr˂pZdQbtfpvbHAZpdrtAnvpvXn`JXQbtlfpvp˂rtbdQZvpfAbJXQJtArdf~HrXQJ`ۉbdQZ|JltfH~ˑZHAbbtlnXv`Zp˂AJltdtA`JXQHbtlnXv`fpvbHAZdrtAvpfr˂p|ZdQbfpvf~HXQJ`ےbdQZ|`vXnbے`btlvnXQJ`ےbdQZ|vXn~f`ZHAbۉlJtnXv`ˑ˂rXJltfHf`vpfHr˂pJtAdQbtnXv`XQJ`ے|drH~fr˂p|ZdQfpvbHAdrtbnvpf`vXے`JXJtArdf~HrXQJ`ۉbdQZ|JltAbے`JtArdf~HnXv`p˂rJltH~fZHAbtlJnXv`fpvbHAZdrtAvpfJXQrJtArdv`fbHAZpdrtAvpfHvXn`JXQArd|f~HQJ`ےbdQZ|vXn~f`ZHAbۉlJt~Hfpf~HbHAZtAJl`vXnZHAbbtlnXv`Zp˂AJltfHnvpQr˂p|ZdQfpvbHAdrtbnvpJXQr|ZdQbfpvfHfXQJ`ےbdQZ|`vXnے`JXQtArdf~HnXv`p˂rJltH~f˂p`J|ZdQ~Hfp˂rXJlt~f`vpfr˂pZdQbtfpvbHAZpdrtAvpfHvXn`JXQArd|vnXHfpvp˂rtbdQZvpfے`JXQJtArdf~HrXQJ`ۉbdQZ|f`vXfH~ˑZHAbbtlnXv`Zp˂AJlt`vX˂pZHJtArnXv`pvnbHAZdrtAvpfr˂p|ZdQbfpvfHfXQJ`ےbdQZ|`vXnXQr˂btlvnXQJ`ےbdQZ|vXn`JXQZHAbۉlJtnXv`ˑ˂rXJlt~f`vpfr˂pZdQbtfpvnXv`XQJ`ے|dtHXnr˂p|ZdQfpvbHAdrtnvpf`vXے`JXJtArdf~HrXQJ`ۉbdQZ|nvpAbے`d|Zf~HrXQJ`p˂rJltH~fZHAbtlJnXv`pvnbHAZdrtAvpfpZHAb|ZdQbv`fbHAZpdrtAvpfHr˂p`JXQArd|f~HQJ`ےbdQZ|vXn`JXQZHAbۉlJtnXv`f~HbHAZbdQZ|vpfHZHAbbtlnXv`Zp˂AJltfH~nvpQr˂p|ZdQfpvbHAdrtfH~ˁJXQrdQbtfpvےHAZXQJ`ےbdQZ|`vXnے`JXQtArdf~HrXQJ`p˂rJltH~fے`JtlJ~fv˂rXJlt~f`ZHAbr˂pZdQbtfpvbHAZpdrtAvpfHr˂p`JXQArdtf~Hfpvp˂rdrtA~f`JQrJtArdf~HrXQJ`ۉbdQZ|f`vXfے`JXZHAbbtlnXv`Zp˂AJltf`vXHے`lJtArnXv`p˂rbHAZdrtAvpfr˂p|ZdQbfpvےHAZXQJ`ےbdQZ|`vXnXQr˂tArdnXv`QJ`ےbdQZ|vXn`JXQZHAے`lJtnXv`ˑ˂rXJlt~f`ZHAbr˂plJfpfpvnXv`XQJ`ےJltvXnpZHA|ZdQfpvbHAdrtnvpQr˂pے`JXJtArdf~HrXQJ`ۉbdQZ|~f`JXQrd|Zf~HXQJ`ےp˂rJltH~fZHAbtlJnXv`p˂rbHAZdrtAvpfpZHAXQ|ZdQbf~HbHAZpdrtAvpfHr˂pJXQrArd|f~HQJ`ےbdQZ|vXn`JXQZHAے`vnXv`f~HbHAZbdQZ|vpfHbے`btlnXv`Zp˂AJltfH~ˑZHAbQr˂p|ZdQfpvbHAdrtvXnpZHAdQbtfpvbHAZXQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےp˂rJltH~fr˂ptlJfpv˂rXJlt~f`ZHAbbtlZdQbtfpvbHAZpdrtAvpfHr˂pJXQr~Hfpۍpvfpvp˂rdrtA~vJXQrJtArdf~HrXQJ`ۉbdQZ|f`vXے`JXZHAbtlnXv`Zp˂AJltvpfHbے`JArd|nXv`p˂rJltdrtAvpfr˂p|ZdQbfpvbHAZXQJ`ےbdQZ|`vXnZHAbtAdQbtnXv`QJ`ےbdQZ|vXn`JXQJtAd|lJtnXv`ˑ˂rXJlt~f`ZHAbbtl|vnXnXv`nXv`XQJ`ےdQZ|pfے`pZHAb|ZdQfpvbHAdrtnvpQr˂p`JXQJtArdf~HrXQJ`ۉbdQZ|~f`JXQrˁZdQbtf~HXQJ`ےbdQZ|JltH~fZHAbtlJnXv`p˂rJltdrtAvpfے`JXQlJtAf~HbHAZpdrtAvpfHr˂pZdQbtArd|f~HQJ`ےbdQZ|vXn`JXQZdQbtv`ff~HfpvJ`bAZltb~f`HAbےtlJZdQbtpvnbHAZpdrtAJvpfH˂pZJXQrbrd|~HfpHAXQJ`bdQZ|vXnہJXQrrd|~HfpJ`ےQZ|dtbd~f`ZHAbf۝`vp|drnXv`p˂rdQZ|vXn`JXQrtAd|lJtAXv`f˂rXQltb~f`HAbےtlJZdQbtvnXےJl璁AJlvpfH˂pZHZdQbtvnXbHAZp˙rtAJlQZ|dvXnۉ˂pZHXnvˍQtJlfnXXQJ`ےdrtAJvpfH˂pZZdQbtrd|~HfJ`ےdQZ|vXn`JXQrtAd|lJtAv`pvtbQZdtbn~f`Abے`lJtAv`frXQtbdtAJlvpfHAbے`pfH~tbAdZv`fbHAZltb~f`HAbےlJtAZdQbtpvnbHAZpdrtAJvpfH˂pZZdQbtrd|nrXQrtAJlvpfHvXnہJXQrrd|~HfpJ`ےQZ|dtbn~f`JXQrf۝`v|dr~Hfpp˂rdQZ|vXn`JXQrrd|lJfXv`f˂rXQltb~f`HAbےlJtAZdQbtJ`p˂tbdf`vpfH˂pZHZdQbtvnXbHAZp˙rtAJlvpfHvXnۉ˂p`ZXnvˍQtJlvnXXQJ`ےdrtAJvpfH˂pZZdQbtpvn~HfJ`ےdQZ|vXn`JXQrrd|lJfrXQJQZ|dvXn~f`Abے`lJtAv`frXQtbdf`vpfHQXb㉀pfH~tbAdZv`fbAZltb~f`HAbےlJtAXv`fpvnbHAZpdrtAJvpfH˂pZZdQbtpv`ےbrtAJlvpfHvXnہJXQrrd|~HfpJ`ےQZ|dvXn~f`ۑpJAHrf۝`v|dr~HXrXQJ`dQZ|vXn`JXQrrd|~HfXv`f˂rXQltb~f`HAbےlJtA~HfpHAZp˂tbd~f`vpfے`˂pZHZdQbtvnXbHAZp˙rtAJlvpfHvXn󙐂ˁ`ZXnvˍQtJlv`fےbHdrtAJvpfH˂pZZdQbtpvnHfpJ`ےdQZ|vXn`JXQrrd|vnXbHAQZrtAvXnہJXQrAbے`lJtAv`frXQtbd~f`vpfZHQXAHrpfH~tbAdZ~HfpAZp˂ltb~f`HAbےlJtAXv`fvnrbHAZpdrtAJvpfH˂pZZdQbtv`fZp˂JltvpfH˂pZHJXQrrd|~HfpJ`ےQZ|dvXnAbے`ˁ`ZQf۝`v|drvnXrXQJ`dQZ|vXn`JXQrrd|~HfXQJ`ے˂rXQltb~f`HAbےlJtA~HfprXQJ`bdQZ|~f`Abے`˂pZHZdQbtvnXbHAZp˙rtAJlvpfHJXQrXb㉀ۑXnvˍQtJlv`pvےbHdrtAJvpfH˂pZZdQbtpvnHAZpJ`ےdQZ|vXn`JXQrrd|vnXےbHAdrtAvXnہJXQrAے`lJtAv`frXQtbd~f`˂pZHpJAHrpfH~tbAdZnrXQAZrXQltb~f`HAbےlJtAXv`f˂rXQbHAZpdrtAJvpfH˂pZZdQbtHfpvZp˂JltvpfH˂pZHJXQrbtrd|~HfpJ`ےQZ|dvXnAbے`ˁ`ZQf۝`v|drJ`AZpJ`ےJdQZ|vXn`JXQrrd|~HfJ`ے˂rXQltb~f`HAbےlJtAnXvrXQHAZbdQZ|~f`Abے`lJtZdQbtvnXbHAZp˙rtAJlvpfHJXQrXb㉀XnvˍQtJl˂rXltbdrtAJvpfH˂pZZdQbtpvnbHAZpJ`ےJdQZ|vXn`JXQrrd|`f~p˂rrAJlvXnہJXQrAd|lJtAv`frXQtbd~f`ے`ˁ`ZQXbpfH~tbAdZQJ`ےdQZ|ltb~f`HAbےlJtAXv`f˂rXQltbdrtAJvpfH˂pZZdQbtHfpvXQJ`ےtbdQvpfH˂pZHZdQbtrd|~HfpJ`ےQZ|dvXnJXQr㉀ۑpJf۝`v|drbHAZpdrtAJdQZ|vXn`JXQrrd|~HfJ`ےdQZ|ltb~f`HAbےlJtAnXvbHAZZ|d~f`Abے`lJtAZdQbtvnXbHAZp˙rtAJlvpfHpZHAAHr󙐂XnvˍQtJl˂rQJltbdtAJlvpfH˂pZZdQbtpvnbHAZpdrtAJdQZ|vXn`JXQrrd|`pvp˂rrtAJlvXnہJXQrrd|lJfpv`frXQtbd~f`bے`ˁ`ZQXbpfH~tbAdZbHAdQZ|tbn~f`HAbےlJtAXv`f˂rXQltbdtAJlvpfH˂pZZdQbtnXv`XQJ`ptbdQvpfH˂pZHZdQbtvnX~HfpJ`ےQZ|dvXnJXQr㉀ۑpf۝`v|drZp˂drtAJvpfvXn`JXQrrd|~HfJ`ےdQZ|tbn~f`HAbےlJtAf~H˂rXQZ|dr~f`Abے`lJtAv`fvnXbHAZp˙rtAJlvpfHp`JX`ZQXbXnvˍQtJlrXQJ`ltbHf`vpfH˂pZZdQbtpvnbHAZpdrtAJvpfvXn`JXQrrd|fpvJ`ےAJtbvXnہJXQrrd|~Hfpv`frXQtbd~f`Qr˂pۑpJApfH~tbAdZےbHAdQZ|vXn~f`HAbےlJtAXv`f˂rXQltbHf`vpfH˂pZZdQbtnXv`bHAZpdQZ|vpfH˂pZHZdQbtvnXHfpJ`ےQZ|dvXnۑZHAbHr󙐂ˁf۝`v|drZp˂drtAJvpfHvXn`JXQrrd|~HfJ`ےdQZ|vXn~f`HAbےlJtAfn˂rXQdrtAJ~f`Abے`lJtAv`fvnrXbHAZp˙rtAJlvpfHے`JX`ZQXbXnvˍQtJlrXQJltb~f`vpfے˂pZZdQbtpvnbHAZpdrtAJvpfHvXn`JXQrrd|Xv`fJ`ےltbvXnہJXQrrd|~HfpQJ`ےrXQtbd~f`Qr˂pۑpJApfH~tbAdZbHAZpdQZ|vXn`JXQrHAbےlJtAXv`f˂rXQltb~f`vpfے˂pZZdQbt~HfrXQJdQZ|vpfH˂pZHZdQbtvnXHAZpJ`ےQZ|dvXnۑZHAXQHQXb㉀f۝`v|drrXQdrtAJvpfH˂pZ`JXQrrd|~HfJ`ےdQZ|vXn`JXQrHAbےlJtApvn`ےbdrtAJ~f`Abے`lJtAv`frXQbHAZp˙rtAJlvpfHr˂pۑpJAHrXnvˍQtJlJ`ےltb~f`HAbے˂pZZdQbtpvnbHAZpdrtAJvpfH˂pZ`JXQrrd|Xv`fHAZp˂bdQZ|vXnہJXQrrd|~HfpJ`ےむrXQtbd~f`ZHAb󙐂ˁ`ZpfH~tbAdZbHAZpdQZ|vXn`JXQrHAے`lJtAXv`f˂rXQltb~f`HAbے˂pZZdQbt~HXrXQJdrtvpfH˂pZHZdQbtvnXbHAZpJ`ےJlQZ|dvXnے`JXQQXb㉀f۝`v|drrXQdrtAJvpfH˂pZJXQrbrd|~HfJ`ےdQZ|vXn`JXQrHAے`lJtAv`f`ےbAJlt~f`Abے`lJtAv`frXQtbdrtAJlvpfHr˂pۑpJAHXnvˍQtJltKKKKKKKKKKKKKKKKKKKLLLLLLLLLL \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv30_1.dat b/vendor/endroid/qr-code/assets/data/qrv30_1.dat new file mode 100644 index 000000000..e50183cc4 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv30_1.dat @@ -0,0 +1,273 @@ +}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststststststqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnmlklklklklklklklklklklklijijijijijijijihghghghghefefefefeefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMKLKLKLKLKLKKKKKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878785656565656565656343434343434343421212121121212120/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststststststqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklklklklklijijijijghghghghghghghghefefefeffefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMLKLKKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878785656565656565656343434343434343421211111121212120/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststststststqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklklklklklijijijijghghghghghghghghefefefeefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKKKKKKLKLKLKLIJIJIJIJIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878785656565656565656343434343434343412121212121212120/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststsrqrqrqrqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklklklklklijijijijghghghghghghghgheeeefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:78787878787878785656565656565656343434343434343412121212121212120/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklkjijijijijijijijghghghghghghghghfefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPONMNMNMNMNMKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:9:9:9:9:78787878787878785656565656565656343434343434343412121212111111210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijghghghghghghghghfefefefefefeeeeedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMKLKLKLKLKKKKKKLKIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:9:9:9:9:787878787878787856565656565656563434343434321212121212122121210/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijghghghghghghghghfefefefeefefefefdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMKLKLKLKLLKLKLKLKIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABA@?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:9:9:9:9:787878787878787856565656565656563434343412111112121212120/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrqpopopopopopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijghghghghghghghghfefefefeefefefefdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMKLKLKLKLLKLKLKLKIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:9:9:9:98787878787878787856565656565656563434343412121212121111110/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!         }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijghghghghghghghghfefefeeeefefefefdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMKLKKKKKKLKLKLKLKIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878787878787856565656565654343434343412121212212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!            }}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijghghghghghghghgheeefefefefefefefdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878787878787856565656343434343434343412121212212121210/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!            }}}}}~}~}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijghghghghghghghghefefefefefefefefdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878787878787856565656343434343434343412121111212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!            }~}~}~}~}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopoponmnmnmnmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijghghghghghghghghefefefefefeeeeeedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKKKKKKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878787878787656565656343434343434343411212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!           }~}~}~}~}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijghghghghghghgfefefefefeffefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878785656565656565656343434343434343421212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijghghghghefefeeeeefefefefdcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878785656565656565656343434343434343421212121211111120/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvutstststststststststststqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnmnmnmnmnklklklklklklklklijijijijijijijijghghghghefefefefefefeeeedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKKKKKKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878785656565656565656343434343434343421212121121212120/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!                  + + + + + + + +             + + + + + + + +             + + + + + + + +             + + + + + + + +           + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + + + +         + + + + + + + + + + + +         + + + + + + + + + + + +         + + + + + + + + + + + +         + + + + + + + + + +          + + + + + + + +         + + + + + + + +LLKKJJII ==>>??@@yyzz{{||RRQQKKJJ + + UUVVWWXXtssrrqqp00//..--TUUVVWWX~~}EDDCCBBA 45566778pqqrrssteddccbba)((''&&%PQQRRSSTIHHGGFFE + + 01122334lmmnnoopihhggffe-,,++**)LMMNNOOPMLLKKJJI :;;<<==>A@@??>>= OPQQRRSS~~}}DDCCBBAA55667788qqrrssttddccbbaa((''&&%%QQRRSSTTHHGGFFEE + + 11223344mmnnoopphhggffee,,++**))MMNNOOPPLLKKJJII --..//00iijjkkllbbaa``__8899::;;~~KJJIIHHG + 56677889qrrssttudccbbaa`(''&&%%$QRRSSTTUHGGFFEED + + 12233445mnnooppqhggffeed,++**))(MNNOOPPQLKKJJIIH -..//001ijjkkllmlkkjjiih0//..--,\]]^^__`eddccbba,,--..//oppqqrrsccbbaa``''&&%%$$RRSSTTUUGGFFEEDD + + 22334455nnooppqqggffeedd++**))((NNOOPPQQKKJJIIHH ..//0011jjkkllmmkkjjiihh//..--,,HHGGFFEE + + AABBCCDD}}~~IIHHGGFFYYZZ[[\\poonnmml,,++**)) XYYZZ[[\}||{{zzyA@@??>>=899::;;??@@AAB=<<;;::9TTUUVVWW||{{zzyy@@??>>==99::;;<>??GFFEEDDC9::;;<<=uvvwwxxy`__^^]]\$##""!! UVVWWXXY~~}}|DCCBBAA@56677889qrrssttudccbbaa`(''&&%%$QRRSSTTUHGGFFEED + + 12233445mnnooppqhggffeed,++**))(`aabbccda``__^^]00112345sttuuvvw__^^]]\\##""!! VVWWXXYY~~}}||CCBBAA@@66778899rrssttuuccbbaa``''&&%%$$RRSSTTUUGGFFEEDD + + 22334455nnooppqqggffeedd++**))((~~}}DDCCBBAA + + EEFFGGHHEEDDCCBB]]^^__``lkkjihgf((''&&%% !!""##$\]]^^__`yxxwwvvu=<<;;::9<==>>??@xyyzz{{|]\\[[ZZY!  XYYZZ[[\}||{{zzyA@@??>>=899::;;>??@@yyzz{{||\\[[ZZYY  YYZZ[[\\||{{zzyy@@??>>==99::;;<>??@@Ayzz{{||}\[[ZZYYX  !YZZ[[\\]|{{zzyyx@??>>==<9::;;<<=uvvwwxxy`__^^]]\$##""!! UVVWWXXY~~}}|DCCBBAA@56677889qrrssttudccbbaa`(''&&%%$ !!"deekkllm]\\[[ZZY6778899:wxxyyzz{[[ZZYYXX !!ZZ[[\\]]{{zzyyxx??>>==<<::;;<<==vvwwxxyy__^^]]\\##""!! VVWWXXYY~~}}||CCBBAA@@66778899rrssttuuccbbaa``''&&%%$$||{{zzyy@@??>>== IIJJKKLLAA@@??>>aabbccddeeddccbb$$##""!!$%%&&''(`aabbccduttssrrq98877665@AABBCCD|}}~~YXXWWVVU !!""##$\]]^^__`yxxwwvvu=<<;;::9<==>>??@xyyzz{{|]\\[[ZZY!  XYYZZ[[\}||{{zzyA@@??>>=FGGHHIIJ{zzyyxxw0//..--,\\]]^^__ttssrrqq88776655AABBCCDD}}~~XXWWVVUU!!""##$$]]^^__``xxwwvvuu<<;;::99==>>??@@yyzz{{||\\[[ZZYY  YYZZ[[\\||{{zzyy@@??>>==99::;;<>==<<; ABBCCDDE}~~XWWVVUUT!""##$$%]^^__``axwwvvuut<;;::998=>>??@@Ayzz{{||}\[[ZZYYX  !YZZ[[\\]|{{zzyyx@??>>==<9::;;<<=uvvwwxxy`__^^]]\$##""!! "##$$%%&mnnooppqYXXWWVVU +:;;<<==>{||}}~~WWVVUUTT""##$$%%^^__``aawwvvuutt;;::9988>>??@@AAzz{{||}}[[ZZYYXX !!ZZ[[\\]]{{zzyyxx??>>==<<::;;<<==vvwwxxyy__^^]]\\##""!! xxwwvvuu<<;;::99MMNNOOPP==<<;;:: !!""eekkllmmaa``__^^ ())**++,deeffgghqppoonnm54433221 + + DEEFFGGHUTTSSRRQ$%%&&''(`aabbccduttssrrq98877665@AABBCCD|}}~~YXXWWVVU !!""##$\]]^^__`yxxwwvvu=<<;;::9JKKQQRRSwvvuutts,++**))( !!""``aabbccppoonnmm44332211 + + EEFFGGHHTTSSRRQQ%%&&''((aabbccddttssrrqq88776655AABBCCDD}}~~XXWWVVUU!!""##$$]]^^__``xxwwvvuu<<;;::99==>>??@@yyzz{{||RRQQKKJJHHIIJJKK|{{zzyyx;::99887 + + EFFGGHHITSSRRQQP%&&''(()abbccddetssrrqqp87766554 ABBCCDDE}~~XWWVVUUT!""##$$%]^^__``axwwvvuut<;;::998=>>??@@Ayzz{{||}\[[ZZYYX &''(())*qrrssttuUTTSSRRQ + >??@@AABSSRRQQPP&&''(())bbccddeessrrqqpp77665544 BBCCDDEE~~WWVVUUTT""##$$%%^^__``aawwvvuutt;;::9988>>??@@AAzz{{||}}[[ZZYYXXttssrrqq88776655QQRRSSTT~~}}||99887711##$$%%&&nnooppqq]]\\[[ZZ,--..//0hiijjkklmllkkjji100//..- HIIJJKKLQPPOONNM())**++,deeffgghqppoonnm54433221 + + DEEFFGGHUTTSSRRQ$%%&&''(`aabbccduttssrrq98877665 + + STTUUVVWsrrqqppo(''&&%%$##$$%%&&ddeefghillkkjjii00//..-- IIJJKKLLPPOONNMM))**++,,eeffgghhppoonnmm44332211 + + EEFFGGHHTTSSRRQQ%%&&''((aabbccddttssrrqq88776655AABBCCDD}}~~IIHHGGFF QQRRSSTTxwwvvuut76543211 IJJKKLLMPOONNMML)**++,,-effgghhipoonnmml43322110 + + EFFGGHHITSSRRQQP%&&''(()abbccddetssrrqqp87766554 ABBCCDDE}~~XWWVVUUT*++,,--.uvvwwxxyQKKJJIIHBCCDDEEFOONNMMLL**++,,--ffgghhiioonnmmll33221100 + + FFGGHHIISSRRQQPP&&''(())bbccddeessrrqqpp77665544 BBCCDDEE~~WWVVUUTTppoonnmm44332211UUVVWWXX{{zzyyxx00//..--''(())**rrssttuuYYXXWWVV01122334lmmnnoopihhggffe-,,++**)LMMNNOOPMLLKKJJI ,--..//0hiijjkklmllkkjji100//..- HIIJJKKLQPPOONNM())**++,deeffgghqppoonnm54433221 WXXYYZZ[onnmmllk$##""!! ''(())**jkkllmmnhhggffee,,++**))MMNNOOPPLLKKJJII --..//00iijjkkllllkkjjii00//..-- IIJJKKLLPPOONNMM))**++,,eeffgghhppoonnmm44332211 + + EEFFGGHHEEDDCCBB + + UUVVWWXXtssrrqqp00//..--MNNOOPPQLKKJJIIH -..//001ijjkkllmlkkjjiih0//..--, IJJKKLLMPOONNMML)**++,,-effgghhipoonnmml43322110 + + EFFGGHHITSSRRQQP.//00117yzz{{||}HGGFFEED FGGHHIIJKKJJIIHH ..//0011jjkkllmmkkjjiihh//..--,,JJKKLLMMOONNMMLL**++,,--ffgghhiioonnmmll33221100 + + FFGGHHIISSRRQQPPllkkjjii00//..-- YYZZ[[\\wwvvuutt,,++**))++,,--..vvwwxxyyUUTTSSRR45566778pqqrrssteddccbba)((''&&%PQQRRSSTIHHGGFFE + + 01122334lmmnnoopihhggffe-,,++**)LMMNNOOPMLLKKJJI ,--..//0hiijjkklmllkkjji100//..-[\\]]^^_keeddccb ++,,--..nooppqqrddccbbaa((''&&%%QQRRSSTTHHGGFFEE + + 11223344mmnnoopphhggffee,,++**))MMNNOOPPLLKKJJII --..//00iijjkkllllkkjjii00//..-- IIJJKKLLAA@@??>>YYZZ[[\\poonnmml,,++**))QRRSSTTUHGGFFEED + + 12233445mnnooppqhggffeed,++**))(MNNOOPPQLKKJJIIH -..//001ijjkkllmlkkjjiih0//..--, IJJKKLLMPOONNMML78899::;}~~DCCBBAA@ + + JKKLMNOPGGFFEEDD + + 22334455nnooppqqggffeedd++**))((NNOOPPQQKKJJIIHH ..//0011jjkkllmmkkjjiihh//..--,,JJKKLLMMOONNMMLLhhggffee,,++**))!!""##$$]]^^__``ssrrqqpp((''&&%%//001177zz{{||}}QQPONMLK +899::;;>?@??>>==< QQRRSSTT~~}}||CCBBAA@@66778899rrssttuuccbbaa``''&&%%$$RRSSTTUUGGFFEEDD + + 22334455nnooppqqggffeedd++**))((NNOOPPQQKKJJIIHH ddccbbaa((''&&%%%%&&''((aabbccddoonnmmll$$##""!!8899::;;~~KJJIIHHG + <==>>??@xyyzz{{|]\\[[ZZY!  XYYZZ[[\}||{{zzyA@@??>>=899::;;>==99::;;<>==<9::;;<<=uvvwwxxy`__^^]]\$##""!! UVVWWXXY~~}}|DCCBBAA@56677889qrrssttudccbbaa`(''&&%%$QRRSSTTUHGGFFEED + + ?@@AABBC~<;;::998UUVVWWXX{{zzyyxx??>>==<<::;;<<==vvwwxxyy__^^]]\\##""!! VVWWXXYY~~}}||CCBBAA@@66778899rrssttuuccbbaa``''&&%%$$RRSSTTUUGGFFEEDD + +  !!``__^^]]$$##""!!))**++,,eeffgghhkkeeddcc <<==>>??GFFEEDDC@AABBCCD|}}~~YXXWWVVU !!""##$\]]^^__`yxxwwvvu=<<;;::9<==>>??@xyyzz{{|]\\[[ZZY!  XYYZZ[[\}||{{zzyA@@??>>=899::;;>??@@yyzz{{||\\[[ZZYY  YYZZ[[\\||{{zzyy@@??>>==99::;;<>??@@Ayzz{{||}\[[ZZYYX  !YZZ[[\\]|{{zzyyx@??>>==<9::;;<<=uvvwwxxy`__^^]]\$##""!! UVVWWXXY~~}}|DCCBBAA@CDDEEFFG~}}||{{z8771100/YYZZ[[\\wwvvuutt;;::9988>>??@@AAzz{{||}}[[ZZYYXX !!ZZ[[\\]]{{zzyyxx??>>==<<::;;<<==vvwwxxyy__^^]]\\##""!! VVWWXXYY~~}}||CCBBAA@@""##$$%%\\[[ZZYY --..//00iijjkkllbbaa``__@@AABBCCCBBAA@@? + + DEEFFGGHUTTSSRRQ$%%&&''(`aabbccduttssrrq98877665@AABBCCD|}}~~YXXWWVVU !!""##$\]]^^__`yxxwwvvu=<<;;::9<==>>??@xyyzz{{|]\\[[ZZY! %&&''(()pqqrrsstVUUTTSSR + + =>>??@@A~TTSSRRQQ%%&&''((aabbccddttssrrqq88776655AABBCCDD}}~~XXWWVVUU!!""##$$]]^^__``xxwwvvuu<<;;::99==>>??@@yyzz{{||\\[[ZZYY  YYZZ[[\\wwvvuutt,,++**))##$$%%&&nnooppqq]]\\[[ZZ%&&''(()abbccddetssrrqqp87766554 ABBCCDDE}~~XWWVVUUT!""##$$%]^^__``axwwvvuut<;;::998=>>??@@Ayzz{{||}\[[ZZYYX  !YZZ[[\\]|{{zzyyx@??>>==<GHHIIJJKzyyxxwwv/..--,,+]]^^__``ssrrqqpp77665544 BBCCDDEE~~WWVVUUTT""##$$%%^^__``aawwvvuutt;;::9988>>??@@AAzz{{||}}[[ZZYYXX !!ZZ[[\\]]{{zzyyxx??>>==<<&&''(())XXWWVVUU11223344mmnnoopp^^]]\\[[DDEEFFGG~~}}|?>>==<<; HIIJJKKLQPPOONNM())**++,deeffgghqppoonnm54433221 + + DEEFFGGHUTTSSRRQ$%%&&''(`aabbccduttssrrq98877665@AABBCCD|}}~~YXXWWVVU)**++,,-tuuvvwwxRQQKKJJIABBCCDDEPPOONNMM))**++,,eeffgghhppoonnmm44332211 + + EEFFGGHHTTSSRRQQ%%&&''((aabbccddttssrrqq88776655AABBCCDD}}~~XXWWVVUU!!""##$$]]^^__``ssrrqqpp((''&&%%''(())**rrssttuuYYXXWWVV)**++,,-effgghhipoonnmml43322110 + + EFFGGHHITSSRRQQP%&&''(()abbccddetssrrqqp87766554 ABBCCDDE}~~XWWVVUUT!""##$$%]^^__``axwwvvuut<;;::998 KQQRRSSTvuuttssr+**))((' !!""##aabbccddoonnmmll33221100 + + FFGGHHIISSRRQQPP&&''(())bbccddeessrrqqpp77665544 BBCCDDEE~~WWVVUUTT""##$$%%^^__``aawwvvuutt;;::9988**++,,--TTSSRRQQ55667788qqrrssttZZYYXXWW HHIIJJKK|{{zzyyx;::99887LMMNNOOPMLLKKJJI ,--..//0hiijjkklmllkkjji100//..- HIIJJKKLQPPOONNM())**++,deeffgghqppoonnm54433221 + + DEEFFGGHUTTSSRRQ-..//001xyyzz{{|IHHGGFFEEFFGGHHILLKKJJII --..//00iijjkkllllkkjjii00//..-- IIJJKKLLPPOONNMM))**++,,eeffgghhppoonnmm44332211 + + EEFFGGHHTTSSRRQQ%%&&''((aabbccddoonnmmll$$##""!!++,,--..vvwwxxyyUUTTSSRR-..//001ijjkkllmlkkjjiih0//..--, IJJKKLLMPOONNMML)**++,,-effgghhipoonnmml43322110 + + EFFGGHHITSSRRQQP%&&''(()abbccddetssrrqqp87766554 + + TUUVVWWXrqqppoon'&&%%$$#$$%%&&''eefghijkkkjjiihh//..--,,JJKKLLMMOONNMMLL**++,,--ffgghhiioonnmmll33221100 + + FFGGHHIISSRRQQPP&&''(())bbccddeessrrqqpp77665544 ..//0011PPOONNMM99::;;<>??@@AABz{{||}}~[ZZYYXXW !!"Z[[\\]]^{zzyyxxw?>>==<<;:;;<<==>vwwxxyyz_^^]]\\[#""!! VWWXXYYZwvvuutts,++**))(+,,--../vwwxxyyzIHHGGFFE + + @AABBCCD::;;<<==vvwwxxyyUUTTSSRR + + EEFFGGHH~~}}||{>==<<;;: +BCCDDEEF~WVVUUTTS"##$$%%&^__``aabwvvuutts;::99887>??@@AABz{{||}}~[ZZYYXXW !!"Z[[\\]]^srrqqppo(''&&%%$/0011778z{{||}}}EDDCCBBA + + DEEFFGGH>>??@@AAzz{{||}}QQKKJJIIIIJJKKQQ{zzyyxxw:9988776 + FGGHHIIJSRRQQPPO&''(())*bccddeefsrrqqppo76655443 +BCCDDEEF~WVVUUTTS"##$$%%&^__``aabonnmmllk$##""!! 899::;;<}||{{zzyA@@??>>= HIIJJKKLBBCCDDEE~~HHGGFFEE + +RRSSTTUUwvvuutts54321100JKKLLMMNONNMMLLK*++,,--.fgghhiijonnmmllk3221100/ + FGGHHIIJSRRQQPPO&''(())*bccddeefkeeddccb <==>>??@yxxwwvvu=<<;;::9LMMNNOOPFFGGHHIIDDCCBBAA VVWWXXYYsrrqqppo//..--,,NOOPPQQRKJJIIHHG .//00112jkkllmmnkjjiihhg/..--,,+JKKLLMMNONNMMLLK*++,,--.fgghhiijbaa``__^@AABBCCDuttssrrq98877665PQQRRSSTJJKKLLMM@@??>>==ZZ[[\\]]onnmmllk++**))((RSSTTUUVGFFEEDDC + + 23344556nooppqqrgffeeddc+**))(('NOOPPQQRKJJIIHHG .//00112jkkllmmn^]]\\[[ZDEEFFGGHqppoonnm54433221TUUVVWWXNNOOPPQQ<<;;::99^^__``aakjihgfee''&&%%$$VWWXXYYZ~~}}||{CBBAA@@?6778899:rssttuuvcbbaa``_'&&%%$$#RSSTTUUVGFFEEDDC + + 23344556nooppqqrZYYXXWWV HIIJJKKQmllkkjji100//..- XYYZZ[[\RRSSTTUU~~}}||{{88771100bbccddeeddccbbaa##""!!  !!"Z[[\\]]^{zzyyxxw?>>==<<;:;;<<==>vwwxxyyz_^^]]\\[#""!! VWWXXYYZ~~}}||{CBBAA@@?6778899:rssttuuvVUUTTSSR + + +QRRSSTTUihhggffe-,,++**) !!""##$\]]^^__`VVWWXXYYzzyyxxww//..--,, !!""##kkllmmnn``__^^]]"##$$%%&^__``aabwvvuutts;::99887>??@@AABz{{||}}~[ZZYYXXW !!"Z[[\\]]^{zzyyxxw?>>==<<;:;;<<==>vwwxxyyzRQQKKJJI + UVVWWXXYeddccbba)((''&&%$%%&&''(`aabbccdZZ[[\\]]vvuuttss++**))(($$%%&&''ooppqqrr\\[[ZZYY&''(())*bccddeefsrrqqppo76655443 +BCCDDEEF~WVVUUTTS"##$$%%&^__``aabwvvuutts;::99887>??@@AABz{{||}}~IHHGGFFEYZZ[[\\]a``__^^]%$$##""!())**++,deeffggh^^__``aarrqqppoo''&&%%$$(())**++ssttuuvvXXWWVVUU*++,,--.fgghhiijonnmmllk3221100/ + FGGHHIIJSRRQQPPO&''(())*bccddeefsrrqqppo76655443 +BCCDDEEF~EDDCCBBA]^^__``a]\\[[ZZY! ,--..//0hiijjkklbbccddeennmmllkk##""!! ,,--..//wwxxyyzzTTSSRRQQ .//00112jkkllmmnkjjiihhg/..--,,+JKKLLMMNONNMMLLK*++,,--.fgghhiijonnmmllk3221100/ + FGGHHIIJA@@??>>=abbccddeYXXWWVVU01122334lmmnnoopffgghhiieeddccbb00117788{{||}}~~PONMLKKJ + + 23344556nooppqqrgffeeddc+**))(('NOOPPQQRKJJIIHHG .//00112jkkllmmnkjjiihhg/..--,,+JKKLLMMN=<<;;::9 !!""#ekkllmmnUTTSSRRQ45566778pqqrrsstjjkkllmmaa``__^^99::;;<<JIIHHGGF 6778899:rssttuuvcbbaa``_'&&%%$$#RSSTTUUVGFFEEDDC + + 23344556nooppqqrgffeeddc+**))(('NOOPPQQR~~}}||{98877110#$$%%&&'nooppqqrQPPOONNM899::;;>??@@FEEDDCCB:;;<<==>vwwxxyyz_^^]]\\[#""!! VWWXXYYZ~~}}||{CBBAA@@?6778899:rssttuuvcbbaa``_'&&%%$$#RSSTTUUV{zzyyxxw0//..--,'(())**+rssttuuvMLLKKJJI <==>>??@xyyzz{{||}}fpvfpvfpvXQJ`ےXQJ`ےZ|lvXnvpfZHAbr˂pbtlbtlf~Hf~HfHbHAbHAAJltAJltf`vXf`vXQr˂pQr˂pQr˂pbtlbtlf~Hf~HbHAbHAJltAJltAJltvXnۅvpfۙے`JXbtl|ZdQf~Hf~HfHfbHAZbHAZJltJlt`vXn`vXnr˂pr˂pr˂ptlJtlJf~Hf~HbHAZbHAZJltJltJlt`vXn`vXnJXQr˂pZ|ZdQrdt璝vnXv`ffpbHAZpbHAZpJltJltvXnvXnr˂pr˂pr˂plJtlJtf~Hf~HbHAZpbHAZpJltJltJltvXnvXnr˂pr˂pArd||ZdQfpv~HXZp˂ےbHltbltbvXnvXn˂pZ˂pZ˂pZlJtAlJtA~Hf~HfbHAZpbHAZpltbltbltbvXnvXn˂pZ˂pZnXv`nXv`nXv`bHAZbHAZtbdQZvpfHH~f`JXQZHAbJtArdJtArdfpvfpvfpvZp˂Zp˂bdQZ|bdQZ|nvpnvpZHAbZHAbZHAJtArdJtArdfpvfpvZp˂Zp˂bdQZ|bdQZ|bdQZ|vpfH`JXQHQr˂pJtArdbtlfpvfpvpvnp˂rp˂rbdQZ|bdQZ|vpfvpfZHAbZHAbZHAےtArdtArdfpvfpvp˂rp˂rbdQZ|bdQZ|bdQZ|vpfvpf˂pZHAHAbےbtllJfpv`fvn˂rX˂rXbdQZ|bdQZ|vpfHvpfHZHAbZHAbZHAے`Ard|Ard|fpvfpv˂rX˂rXbdQZ|bdQZ|bdQZ|vpfHvpfHZHAbZHAbہZdQtAbtlnXv`v`frXQJAZp˂dQZ|dQZ|vpfHvpfHHAbےHAbےHAے`rd|rd|pvnpvn˂rXQ˂rXQdQZ|dQZ|dQZ|vpfHvpfHHAbےHAbےf~Hf~Hp˂rp˂rp˂r|dr~f``vXnrZAbے`JXQ|ZdQ|ZdQnXv`nXv`nrXQJ`rXQJ`rXQJ`ہdrtdrtfH~fH~˙ے`JXے`JX`JXQ|ZdQ|ZdQnXv`nXv`rXQJ`rXQJ`ہdrtdrtdtA~f`Abے`ZHAXQ|ZdQbJtArdnXv`nXv`rXQJ`XQJ`ےXQJ`ےdrtAdrtAH~fH~fے`JXQے`JXQ`JXQr|ZdQb|ZdQbnXv`nXv`XQJ`ےXQJ`ےdrtAdrtAdtAJH~fH~fbے``JXQrJtArdvnv~HfprXQJ`QJ`ےQJ`ےdrtAdrtA~f`~f``JXQ`JXQJXQrZdQbtZdQbtnXv`nXv`QJ`ےQJ`ےdrtAdrtAdtAJl~f`~f``JXQ`JXQrd|JtAdQbtf~H~HfpbHAZpˉrXQJ`drtAJdrtAJ~f`~f``JXQr`JXQrJXQrbZdQbtZdQbtXv`fXv`fJ`ےJ`ےdrtAJdrtAJdtAJl~f`~f``JXQr`JXQrfpvfpvXQJ`ےXQJ`ےXQJ`ےtAJlvXH~vpfے`Jr˂pbtlbtlf~Hf~HےHAbHAbHAAJltAJltf`vXf`vXQr˂pQr˂prbtlbtlbtlf~Hf~HbHAbHAAJltAJltJltvXnہJXQrr˂pJtAr|ZdQf~Hf~HےHAZbHAZbHAZJltJlt`vXn`vXnr˂pr˂pbtltlJtlJf~Hf~HbHAZbHAZJltJltltb`vXn`vXnJXQr˂p`|ZdQf~HvnXHAZpbHAZpbHAZpJltJltvXnvXnr˂pr˂pbtllJtlJtf~Hf~HbHAZpbHAZpJltJlttbvXnvXnr˂pr˂pZdQbtlJtfpvvnXrXQےbHltbltbvXnvXn˂pZ˂pZtlJlJtAlJtA~Hf~HfbHAZpbHAZpltbltbtbnvXnvXn˂pZ˂pZnXv`nXv`bHAZbHAZJlttbdQZf`vHXnXQr˂ZHAbJtArdJtArdfpvfpvZp˂Zp˂Zp˂bdQZ|bdQZ|nvpnvpZHAbZHAbJtAdJtArdJtArdfpvfpvZp˂Zp˂bdQZ|bdQZ|bnvpvp`vX˂pZHZHAbd|Zbtlfpvfpvp˂rp˂rp˂rbdQZ|bdQZ|vpfvpfZHAbZHAbJtAdtArdtArdfpvfpvp˂rp˂rbdQZ|bdQZ|nvpvpfvpf˂p`JJXQrbbtlfpvv`f˂rX˂rX˂rXbdQZ|bdQZ|vpfHvpfHZHAbZHAbJtAd|Ard|Ard|fpvfpv˂rX˂rXbdQZ|bdQZ|nvpvpfHvpfHZHAbZHAbےlJtAArd|nXv`v`pvJ`ےAZrXQdQZ|dQZ|vpfHvpfHHAbےHAbےtAd|rd|rd|pvnpvn˂rXQ˂rXQdQZ|dQZ|vpfvpfHvpfHHAbےHAbےf~Hf~Hp˂rp˂rdrtAJ|dtXnvvpfHpZHAbJQr˂|ZdQ|ZdQnXv`nXv`rXQJ`rXQJ`rXQJ`ہdrtdrtfH~fH~˙ے`JXے`JX|ZdQ|ZdQ|ZdQnXv`nXv`rXQJ`rXQJ`ہdrtdrt`vXnvpAbے``JXQdQbtJtArnXv`nXv`XQJ`ےXQJ`ےXQJ`ےdrtAdrtAH~fH~fے`JXQے`JXQ|ZdQb|ZdQb|ZdQbnXv`nXv`XQJ`ےXQJ`ےdrtAdrtAfHfH~fH~fXQr˂tl||ZdQbnXv`˕~fvQJ`ےQJ`ےQJ`ےdrtAdrtA~f`~f``JXQ`JXQZdQbtZdQbtZdQbtnXv`nXv`QJ`ےQJ`ےdrtAdrtAfHf`~f`~f``JXQ`JXQrd|ZdQbtpvnrXQbHAZpJ`ےJdrtAJdrtAJ~f`~f``JXQr`JXQrZdQbtZdQbtZdQbtXv`fXv`fJ`ےJ`ےdrtAJdrtAJHf`~f`~f``JXQr`JXQrlJtAfpvfpvXQJ`ےXQJ`ےltbbdQZ|pfH~~f`ے`JpZHAbtlbtlf~Hf~HbHAbHAJltAJltAJltf`vXf`vXQr˂pQr˂pbtlbtlbtlf~Hf~HbHAbHAAJltAJltnvpfH~JXQrr˂plJtArZdQbtf~Hf~HbHAZbHAZJltJltJlt`vXn`vXnr˂pr˂ptlJtlJtlJf~Hf~HbHAZbHAZJltJlt`vXn`vXn`vXnpZHAbZdQbttlJf~HnXv`bHAZpbHAZpJltJltJltvXnvXnr˂pr˂plJtlJtlJf~Hf~HbHAZpbHAZpJltJltvXnvXnvXnr˂pr˂pZdQbtdlJtnXv`J`AZprXQltbltbltbvXnvXn˂pZ˂pZlJtAlJtAlJf~Hf~HfbHAZpbHAZpltbltbvXnvXnvXn˂pZ˂pZrd|nXv`nXv`bHAZbHAZdQZ|drtAf`vvXnXQr˂bے`JtArdJtArdfpvfpvZp˂Zp˂bdQZ|bdQZ|bdQZ|nvpnvpZHAbZHAbJtArdJtArdJfpvfpvfpvZp˂Zp˂bdQZ|bdQZ|fH~˕f`vXے`ZHAbd|ZlJtAfpvfpvp˂rp˂rbdQZ|bdQZ|bdQZ|vpfvpfZHAbZHAbtArdtArdfpvfpvfpvp˂rp˂rbdQZ|bdQZ|vpfvpfvpfے`JlJtAtArdfpvf~H˂rX˂rXbdQZ|bdQZ|bdQZ|vpfHvpfHZHAbZHAbArd|Ard|fpvfpvfpv˂rX˂rXbdQZ|bdQZ|vpfHvpfHvpfZHAbZHAbۙ|ZdArdtf~H˂rXJ`bAZdQZ|dQZ|dQZ|vpfHvpfHHAbےHAbےrd|rd|pvnpvnpvn˂rXQ˂rXQdQZ|dQZ|vpfHvpfHvpfےHAbےHAbےZdQbtf~Hf~Hp˂rp˂rdrtAJJltXnvpfHpZAb`JXQr˂|ZdQ|ZdQnXv`nXv`rXQJ`rXQJ`ہdrtdrtdtAfH~fH~˙ے`JXے`JX|ZdQ|ZdQnXv`nXv`nXv`rXQJ`rXQJ`ہdrtdrtf`vXHnvpJXQrˉ˂pZHdQbtrd|nXv`nXv`XQJ`ےXQJ`ےdrtAdrtAdtAJH~fH~fے`JXQے`JXQ|ZdQb|ZdQbnXv`nXv`nXv`XQJ`ےXQJ`ےdrtAdrtAH~fH~fے`JXQXQr˂rd||ZdQbnXvf~fpvQJ`ےQJ`ےdrtAdrtAdtAJl~f`~f``JXQ`JXQZdQbtZdQbtnXv`nXv`nXv`QJ`ےQJ`ےdrtAdrtA~f`~f``JXQ`JXQ`JXQQbtllJfpfpvQJ`ےp˂rdrtAJdrtAJdtAJl~f`~f``JXQr`JXQrZdQbtZdQbtXv`fXv`fXv`fJ`ےJ`ےdrtAJdrtAJ~f`~f``JXQr`JXQr`JXQrlJtAfpvfpvXQJ`ےXQJ`ےltbbdQZ|f`vX~vJXQrpZHAbbtlbtlf~Hf~HbHAbHAAJltAJltJltf`vXf`vXQr˂pQr˂pbtlbtlf~Hf~HfHbHAbHAAJltAJlt~f`fHXpZHAAbے`JArd|ZdQbtf~Hf~HbHAZbHAZJltJltltb`vXn`vXnr˂pr˂ptlJtlJf~Hf~HfHfbHAZbHAZJltJlt`vXn`vXnHAbےpZHAXQZdQtArtlJHfpvnXv`bHAZpbHAZpJltJlttbvXnvXnr˂pr˂plJtlJtf~Hf~HfHfpbHAZpbHAZpJltJltvXnvXnr˂pr˂pr˂pJtArdvnXv`˙bHAZpXQJ`ےltbltbtbnvXnvXn˂pZ˂pZlJtAlJtA~Hf~HfHfpbHAZpbHAZpltbltbvXnvXn˂pZ˂pZ˂pZrd|nXv`nXv`bHAZbHAZdQtAJldrtAnvppfے`˂pZHJAdJtArdJtArdfpvfpvZp˂Zp˂bdQZ|bdQZ|bnvpnvpnvpZHAbZHAbJtArdJtArdfpvfpvfpvZp˂Zp˂bdQZ|bdQZ|vXnnvpbے`JXQrZdQbtlJtAfpvfpvp˂rp˂rbdQZ|bdQZ|nvpvpfvpfZHAbZHAbtArdtArdfpvfpvpvnp˂rp˂rbdQZ|bdQZ|vpfvpf`JXQrr˂pd|ZtAdQbtnXvf~H˂rX˂rXbdQZ|bdQZ|nvpvpfHvpfHZHAbZHAbArd|Ard|fpvfpvvn˂rX˂rXbdQZ|bdQZ|vpfHvpfHZHAbZHAbZHAے`|Zd~HfpfnX˂rQJbHAZdQZ|dQZ|vpfvpfHvpfHHAbےHAbےrd|rd|pvnpvnvnr˂rXQ˂rXQdQZ|dQZ|vpfHvpfHHAbےHAbےHAے`ZdQbtf~Hf~Hp˂rp˂rtbdQdQZ|fH~JXQrAbے`|ZdQ|ZdQ|ZdQnXv`nXv`rXQJ`rXQJ`ہdrtdrtfHfH~fH~˙ے`JXے`JX|ZdQ|ZdQnXv`nXv`nrXQJ`rXQJ`rXQJ`ہdrtdrtvpfHfH~JXQrˉ˂p`lJtrdZQbnXv`nXv`XQJ`ےXQJ`ےdrtAdrtAfHfH~fH~fے`JXQے`JXQ|ZdQb|ZdQbnXv`nXv`rXQJ`XQJ`ےXQJ`ےdrtAdrtAH~fH~f˂pZZHAbdQbtlJtA`f~fvnXQJ`ےQJ`ےdrtAdrtAfHf`~f`~f``JXQ`JXQZdQbtZdQbtnXv`nXv`rXQJ`QJ`ےQJ`ےdrtAdrtA~f`~f``JXQ`JXQJXQrQbtlvnXv`fbHAp˂rdrtAJdrtAJHf`~f`~f``JXQr`JXQrZdQbtZdQbtXv`fXv`fXQJ`ےJ`ےJ`ےdrtAJdrtAJ~f`~f``JXQr`JXQrJXQrblJtAfpvfpvXQJ`ےXQJ`ےZ|ddrtAJf`vXZHAbہJXQrbtlbtlbtlf~Hf~HbHAbHAAJltAJltf`vXf`vXf`vXQr˂pQr˂pbtlbtlf~Hf~HےHAbHAbHAAJltAJlt~f`f`vXp`JXJXQrbtArd|tlJf~Hf~HbHAZbHAZJltJlt`vXn`vXn`vXnr˂pr˂ptlJtlJf~Hf~HےHAZbHAZbHAZJltJlt`vXn`vXnHAbےے`JXQlJtArrd|Hfpvv`fbHAZpbHAZpJltJltvXnvXnvXnr˂pr˂plJtlJtf~Hf~HHAZpbHAZpbHAZpJltJltvXnvXnr˂pr˂pbtl||ZdQv`f~HfpZp˂XQJ`ےltbltbvXnvXnvXn˂pZ˂pZlJtAlJtA~Hf~HfHAZpbHAZpbHAZpltbltbvXnvXn˂pZ˂pZtlJrd|nXv`nXv`bHAZbHAZrtAJlltbnvp`JXQ˂pZHJtArdJtArdJfpvfpvfpvZp˂Zp˂bdQZ|bdQZ|nvpnvpnvpZHAbZHAbJtArdJtArdfpvfpvZp˂Zp˂Zp˂bdQZ|bdQZ|vXnnvpQr˂plJAZdQbtfpvfpvfpvp˂rp˂rbdQZ|bdQZ|vpfvpfvpfZHAbZHAbtArdtArdfpvfpvp˂rp˂rp˂rbdQZ|bdQZ|vpfvpf`JXQrr˂pd|ZZdQbtnXv~Hfpۑ˂rX˂rXbdQZ|bdQZ|vpfHvpfHvpfZHAbZHAbArd|Ard|fpvfpv˂rX˂rX˂rXbdQZ|bdQZ|vpfHvpfHZHAbZHAbہZdQbtbtl~Hfp۝vnXrXQJ`bAZdQZ|dQZ|vpfHvpfHvpfےHAbےHAbےrd|rd|pvnpvn˂rXQ˂rXQ˂rXQdQZ|dQZ|vpfHvpfHHAbےHAbےtAd|ZdQbtf~Hf~Hp˂rp˂rtbdQdQZ|``vXnr˂pAbJXQ|ZdQ|ZdQnXv`nXv`nXv`rXQJ`rXQJ`ہdrtdrtfH~fH~fے`JXے`JXے`JX|ZdQ|ZdQnXv`nXv`rXQJ`rXQJ`rXQJ`ہdrtdrtf`fH~ZHAb|ZdQlJArnXv`nXv`nXv`XQJ`ےXQJ`ےdrtAdrtAH~fH~fے`JXQے`JXQے`JXQ|ZdQb|ZdQbnXv`nXv`XQJ`ےXQJ`ےXQJ`ےdrtAdrtAH~fH~fے`ZHAbdQbtdlJtA`f~fpvnXQJ`ےQJ`ےdrtAdrtA~f`~f``JXQ`JXQ`JXQZdQbtZdQbtnXv`nXv`QJ`ےQJ`ےQJ`ےdrtAdrtA~f`~f``JXQ`JXQlJtJtArdvnXHv`fےbHArXQJ`drtAJdrtAJ~f`~f``JXQr`JXQr`JXQrZdQbtZdQbtXv`fXv`fJ`ےJ`ےJ`ےJdrtAJdrtAJ~f`~f``JXQr`JXQrZdQbtlJtArd|rd|HfpvvnXbHAZtbQZdrtAJlvpfHvpfHvpfHAbے`Abے`rd|rd|vnXvnXvnrXrXQrXQQZ|dQZ|dvpfHvpfH˂pZHZHAbېˁ`ZQQXb㉀XnvˍXnvˍtbAdZZdQbtZdQbtnXvv`pvp˂rrtAJltbdQ煐f`~f`~f`JXQrJXQrZdQbtZdQbtv`fv`fQJ`ےJ`ےJ`ےrtAJlrtAJl~f`~f`Abے``JXQXb㉀ۑpJAHpfH~p|dr|drlJtAlJtA`pvnrXQXQJ`ptbdZ|drvXnvXnvXnۉ˂pZH˂pZHlJtAlJtA~Hfp~HfpHAZpbHAZpbHAZpˑtbdtbdvXnvXnہJXQrr˂pˁ`ZQXbf۝`vf۝`vQtJlQtJlrd|rd|nXv`J`p˂˂rXQQZ|dAJtbvpfHvpfHvpfے`Abے`Abے`rd|rd|vnXvnXrXQrXQrXQQZ|dQZ|dvpfHvpfH󉐙ے`ZHAb㉀ۑpJXnvˍXnvˍtbAdZtbAdZZdQbtZdQbtf~HrXQJJ`ےrtAJldQZ|~f`~f`JXQrJXQrJXQrZdQbtZdQbtv`fv`fJ`ےJ`ےJ`ےJlrtAJlrtAJl~f`~f`JXQrˉ˂pZHAHr󙐂pfH~pfH~|dr|drlJtAlJffpv`ےbbHAZptbddrtAJvXnvXnۉ˂pZH˂pZH˂pZHlJtAlJtA~Hfp~HfpbHAZpbHAZpˑtbdtbdtbdvXnvXnۂpZHAAbے`ˁ`ZQXbf۝`vf۝`vQtJlQtJlrd|pvnXv`HAZp˂˂rXQQZrtAltbvpfHvpfHAbے`Abے`Aے`rd|rd|vnXvnXrXQrXQQZ|dQZ|dQZ|dvpfHvpfHbے`JXQr㉀ۑpXnvˍXnvˍtbAdZtbAdZZdQbt~HfpfnbHAJ`ےJltdQZ|~f`~f`JXQrJXQrJXQrbtZdQbtZdQbtv`fv`fJ`ےJ`ےrtAJlrtAJltAJl~f`~f`JXQrˉ˂p`Z`ZQXbpfH~pfH~|dr|drlJtAvnXXv`fZp˂rXQJbdQZ|drtAJvXnvXnۉ˂pZH˂pZHlJtlJtAlJtA~Hfp~HfpbHAZpbHAZpˑtbdtbdtbnvXnvXnۂp`JXQXb㉀ۑpJAf۝`vf۝`vQtJlQtJlrd|v`f~HfrXQJ``ےbdrtAbdQZ|vpfHvpfHAbے`Abے`Ad|rd|rd|vnXvnXrXQrXQQZ|dQZ|dvpfHvpfHvpfHQr˂pۑpJAHrHr󙐂ˁXnvˍXnvˍtbAdZtbAdZZdQbt~HfppvnےbHAHAZp˂Jltdrt~f`~f`JXQrJXQrZdQbtZdQbtZdQbtv`fv`fJ`ےJ`ےrtAJlrtAJlf`~f`~f`ZHAb󙐂ˁ`Z`ZQXbpfH~pfH~|dr|drlJtAvnXXv`fZp˂rXQJbdQZ|AJltvXnvXnۉ˂pZH˂pZHlJtAlJtAlJfp~Hfp~HfpbHAZpbHAZpˑtbdtbdvXnvXnvXnۙے`JXQXAHr󙀒ۑpJAf۝`vf۝`vQtJlQtJlrd|Hfpv~HXrXQHAZ`ےbrAJlbdQZ|vpfHvpfHAbے`Abے`rd|rd|vnXvnXvnXrXQrXQQZ|dQZ|dvpfHvpfHvpfZHQr˂pˁ`ZQHQXb㉀XnvˍXnvˍtbAdZtbAdZZdQbtnXvv`fp˂rHAXQJ`tbdQ灂AJl~f`~f`JXQrJXQrZdQbtZdQbtv`fv`fv`fJ`ےJ`ےrtAJlrtAJl~f`~f`Abے`ZHAXQXb㉀ۑۑpJAHrpfH~pfH~|dr|drlJtA`f~~HfpXQJ`ےےJlZ|dtbnvXnvXnۉ˂pZH˂pZHlJtAlJtA~Hfp~HfpHfpbHAZpbHAZpˑtbdtbdvXnvXnہJXQrr˂ppJAHr󙐂ˁ`Zf۝`vf۝`vQtJlQtJlt \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv30_2.dat b/vendor/endroid/qr-code/assets/data/qrv30_2.dat new file mode 100644 index 000000000..2211b2895 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv30_2.dat @@ -0,0 +1,273 @@ +}{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopmnmnmnmnklklklklghghghghdcdcdcdcbabababa^]^]^]^]}}}}}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopmnmnmnmnklklklklghghghghdcdcdcdcbabababa^]^]^]^]}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopmnmnmnmnklklklklghghghghdcdcdcdcbabababa^]^]^]^]}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopmnmnmnmnklklklklghghghghdcdcdcdcbabababa^]^]^]^]}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopmnmnmnmnkjijijijghghghghdcdcdcdcbabababa^]^]^]^]}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopmnmnmnmnijijijijghghghghdcdcdcdcbabababa^]^]^]^]}~}~}~}~{|{|{|{|yxwxwxwxuvuvuvuvststststopopopopmnmnmnmnijijijijghghghghdcdcdcdcbabababa^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststopopopopmnmnmnmnijijijijghghghghdcdcdcdcbabababa^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststopopopopmnmnmnmnijijijijghghghghdcdcdcdcbabababa^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststopopopopmnmnmnmnijijijijghghgfefdcdcdcdcbabababa^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststopopopopmnmnmnmnijijijijefefeeeedcdcdcdcbabababa^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststopopopopmnmnmnmnijijijijefefefefdcdcdcdcbabababa^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvsrqrqrqropopopopmnmnmnmnijijijijefefefefdcdcdcdc`_`_`_`_^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijefefefefdcdcdcdc`_`_`_`_^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijefefefeedcdcdcdc`_`_`_`_^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijeeeefefedcdcdcdc`_`_`_`_^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijfefefefedcdcdcdc`_`_`_`_^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijfefefefedcdcdcdc`_`_`_`_^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopmlklklklijijijijfefefefedcdcdcdc`_`_`_`_^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklijijijijfefefefedcdcdcdc`_`_`_`_^]^]^]^]}~}~}~}~{zyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklijijijijfefefeeedcdcdcdc`_`_`_`_^]^]^]^]}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklijijijijeeefefefdcdcdcdc`_`_`_`_^]^]^]^]}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklijijijijefefefefdcdcdcdc`_`_`_`_^]^]^]^]}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklijijijijefefefefdcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklijijijijefefefefdcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklijijijijefefefefdcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[}~}~}~}~yzyzyzyzwxwxwxwxutstststqrqrqrqropopopopklklklklijijijijefefeeeebabababa`_`_`_`_^]^]^]^]\[\[\[\[}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqropopopopklklklklijijijijeefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqropopopopklklklklijijijijfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqropopopopklklklklijijijijfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqropopopopklklklklijijijihfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqropopopopklklklklghghghghfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqronmnmnmnklklklklghghghghfefeeeeebabababa`_`_`_`_\[\[\[\[\[\[\[\[}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnklklklklghghghghefefefefbabababa`_`_`_`_\[\[\[\[\[\[\[\[}|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnklklklklghghghghefefefefbabababa`_`_`_`_\[\[\[\[\[\[\[\[{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnklklklklghghghghefefefefbabababa`_`_`_`_\[\[\[\[\[\[\[\[{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnklklklklghghghghefefefefbabababa`_`_`_`_\[\[\[\[\[\[\[\[{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnklklklklghghghghefefefefbabababa`_`_`_`_\[\[\[\[\[\[\[\[{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnklklklklghghghghefeeeeeebabababa`_`_`_`_\[\[\[\[\[\[\[\[{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnklklklklghghghghfefefefebabababa`_`_`_`_\[\[\[\[\[\[\[\[{|{|{|{|yzyzyzyzwvuvuvuvststststqrqrqrqrmnmnmnmnklklklklghghghghdcdcdcdcbabababa`_`_`_`_\[\[\[\[\[\[\[\[{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklghghghghdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZY{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklghghghghdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZY{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklghghghghdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZY{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklghghghghdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZY{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklghghghghdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZY{|{|{|{|yzyzyzyzuvuvuvuvststststqpopopopmnmnmnmnklklklklghghghghdcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZY{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopmnmnmnmnklklklklghghghghdcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:78787878343434340/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!         ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMKKKKKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:78787878343434340/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!         ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:78787878343434340/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!         + +ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:78787878343434340/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!         + + + +ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=<9:9:9:9:78787878343434340/0/0/0/.-.-.-.-,+,+,+*)('('('('&%&%&%&%"!"!"!"!         + + + +ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMKLKKKKKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:9:9:78787878343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:9:9:78787878343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:9:9:78787878343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:9:9:78787878343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:9:9:78787878343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:9:9:78787876343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%$#"!"!"!"!         + + + +ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHEFEFEFEDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656343212120/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!      + + + +ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656121111120/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + +ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?>;<;<;<;<9:9:9:9:56565656121212120/0/0/0/.-.-.-,+*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + +ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:56565656121212120/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + +ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:56565656121212120/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + +ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:56565656121211110/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + +ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:56565656112121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + +ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:56565656212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + +ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPONMNMLKLKIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9856565656212121210/0/0/0/,+,+,+,+*)*)*)*)('('('&%$#$#$#$#"!"!"!"! + + + +ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKKKKKIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<7878787856565656212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"! + + + +ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLIJIJIJIJGHGHGHGFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<7878787856565656212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"! + + + +XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<7878787856565656212111110/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"! + + + +XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<7878787856565656121212120/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"! + + + +XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<7878787856565656121212120/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"! + + + +XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<7878787856565656121212120/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!   + + + +XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPOKLKKKKKKIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<7878787856565656121212120/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKIJIJIJIJEFEFEFEFCDCDCDCDABABABA@=>=>=>=>;<;<;<;<7878787856565656121212120/0/0/.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<787878785656565612111111.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<787878785656565621212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<787878785656565621212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<787878785656565621212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKKKKKKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<787878785656543421212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;:787878783434343421212121.-.-.-.-,+,+,+,+*)*)*)('&%&%&%&%$#$#$#$#         XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:787878783434343421111112.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOKLKLKLKLIJIJIJIHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:787878783434343412121212.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:787878783434343412121212.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:787878783434343412121212.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOKKKKKKLKGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:787878783434343412121212.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:787878783434343412121212.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#"!         XWXWXWXWVUVUVUVURQRQRQRQPOPOPONMLKLKLKLKGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:787878783434343411111121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!         XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKGHGHGHGHEFEFEFEFCDCDCDCB?@?@?@?@=>=>=>=>9:9:9:9:78787878343434342121210/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!         XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:78787878343434340/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!         IIJJKKLL''(())** + QPPOONNMpqqrrsst !!""##$100//..-~~}@AABBCCD 0//..--,hhggffeeYYZZ[[\\ + + MMNNOOPP++,,--..MLLKKJJItuuvvwwx$%%&&''(-,,++**)}||{{zzyDEEFFGGH + + ,++**))(ddccbbaa]]^^__`` ~~}}QQRRSSTT//001177 + + IHHGGFFExyyzz{{|())**++,)((''&&%yxxwwvvuHIIJJKKL (''&&%%$``__^^]]aabbccdd||{{zzyyUUVVWWXX8899::;; EDDCCBBA|}}~~,--..//0%$$##""!uttssrrqLMMNNOOP$##""!! \\[[ZZYYeeffgghhxxwwvvuuYYZZ[[\\<<==>>??A@@??>>=01122334! qppoonnmPQQRRSST XXWWVVUUiijjkkllttssrrqq]]^^__``@@AABBCC=<<;;::945566778mllkkjjiTUUVVWWX + + TTSSRRQQmmnnoopp ppoonnmmaabbccddDDEEFFGG98877665899::;;<ihhggffeXYYZZ[[\ PPOONNMMqqrrsstt!!""##$$llkkjjiieeffgghhHHIIJJKK 54433221<==>>??@eddccbba\]]^^__` LLKKJJIIuuvvwwxx%%&&''((hhggffeeiijjkkllQQRRSSTT !!""##$100//..-~~}@AABBCCD a``__^^]`aabbccd + + HHGGFFEEyyzz{{||))**++,,ddccbbaammnnooppUUVVWWXX$%%&&''(-,,++**)}||{{zzyDEEFFGGH + + ]\\[[ZZYdeeffggh !DDCCBBAA}}~~--..//00``__^^]]qqrrssttYYZZ[[\\())**++,)((''&&%yxxwwvvuHIIJJKKL YXXWWVVUhiijjkkl!""##$$%@@??>>==11223344\\[[ZZYYuuvvwwxx]]^^__``,--..//0%$$##""!uttssrrqLMMNNOOPUTTSSRRQlmmnnoop%&&''(() + + <<;;::9955667788XXWWVVUUyyzz{{||aabbccdd01122334! qppoonnmPQQRRSSTQPPOONNMpqqrrsst)**++,,- 8877665599::;;<>??@@PPOONNMMnnooppqq899::;;<ihhggffeXYYZZ[[\ + + IHHGGFFExyyzz{{|1778899:00//..--~~}}AABBCCDDLLKKJJIIrrssttuu<==>>??@eddccbba\]]^^__` EDDCCBBA|}}~~:;;<<==>,,++**))||{{zzyyEEFFGGHHHHGGFFEEvvwwxxyy@AABBCCD a``__^^]`aabbccdA@@??>>=>??@@AAB !!""((''&&%%xxwwvvuuIIJJKKLLDDCCBBAA~~}}||zz{{||}}DEEFFGGH + + ]\\[[ZZYdeeffggh=<<;;::9BCCDDEEF##$$%%&&$$##""!!ttssrrqqMMNNOOPP@@??>>=={{zzyyxx~~HIIJJKKL YXXWWVVUhiijjkkl98877665FGGHHIIJ''(())** ppoonnmmQQRRSSTT<<;;::99wwvvuuttLMMNNOOPUTTSSRRQlmmnnoop 54433221JKKQQRRS++,,--..llkkjjiiUUVVWWXX88776655ssrrqqppPQQRRSSTQPPOONNMpqqrrsst !!""##$100//..-~~}STTUUVVW//001123hhggffeeYYZZ[[\\44332211oonnmmll~~}}|TUUVVWWXMLLKKJJItuuvvwwx$%%&&''(-,,++**)}||{{zzyWXXYYZZ[45677889ddccbbaa]]^^__``00//..--kkeeddcc|{{zzyyxXYYZZ[[\ + + IHHGGFFExyyzz{{|())**++,)((''&&%yxxwwvvu[\\]]^^_9::;;<<= ``__^^]]aabbccdd,,++**))bbaa``__xwwvvuut\]]^^__` EDDCCBBA|}}~~,--..//0%$$##""!uttssrrq_``aabbc=>>??@@A + + \\[[ZZYYeeffgghhHHGGFFEE((''&&%%^^]]\\[[tssrrqqp`aabbccdA@@??>>=01122334! qppoonnmcddeekklABBCCDDEXXWWVVUUiijjkkllDDCCBBAA$$##""!!ZZYYXXWWpoonnmmldeeffggh=<<;;::945566778mllkkjjilmmnnoopEFFGGHHITTSSRRQQmmnnoopp@@??>>== VVUUTTSSlkkjihgfhiijjkkl98877665899::;;<ihhggffepqqrrsstIJJKKLMNPPOONNMMqqrrsstt<<;;::99RRQQKKJJeeddccbblmmnnoop 54433221<==>>??@eddccbbatuuvvwwxOPQQRRSSLLKKJJIIuuvvwwxx88776655IIHHGGFFaa``__^^pqqrrsst !!""##$100//..-~~}@AABBCCD a``__^^]xyyzz{{|TTUUVVWW + + HHGGFFEEyyzz{{||44332211EEDDCCBB]]\\[[ZZtuuvvwwx$%%&&''(-,,++**)}||{{zzyDEEFFGGH + + ]\\[[ZZY|}}~~XXYYZZ[[ DDCCBBAA}}~~00//..-- AA@@??>>YYXXWWVVxyyzz{{|())**++,)((''&&%yxxwwvvuHIIJJKKL YXXWWVVU\\]]^^__@@??>>==,,++**)) + + ==<<;;::UUTTSSRR|}}~~,--..//0%$$##""!uttssrrqLMMNNOOPUTTSSRRQ``aabbcc<<;;::99((''&&%% + + 99887711QQPONMLK01122334! qppoonnmPQQRRSSTQPPOONNM~~}}||{ddeefghi88776655$$##""!! 00//..--KJJIIHHG45566778mllkkjjiTUUVVWWXMLLKKJJI{zzyyxxwjkkllmmn 44332211 ,,++**))GFFEEDDC899::;;<ihhggffeXYYZZ[[\ + + IHHGGFFEwvvuuttsnooppqqr!!""##$$00//..--~~}}((''&&%%CBBAA@@?<==>>??@eddccbba\]]^^__` EDDCCBBAsrrqqpporssttuuv%%&&''((,,++**))||{{zzyy$$##""!!?>>==<<;~~}@AABBCCD a``__^^]`aabbccdA@@??>>=onnmmllkvwwxxyyz))**++,,((''&&%%xxwwvvuu ;::99887}||{{zzyDEEFFGGH + + ]\\[[ZZYdeeffggh=<<;;::9keeddccbz{{||}}~--..//00$$##""!!ttssrrqq !!""##$$76543211yxxwwvvuHIIJJKKL YXXWWVVUhiijjkkl98877665baa``__^~11223344 ppoonnmm + + %%&&''((00//..--uttssrrqLMMNNOOPUTTSSRRQlmmnnoop 54433221^]]\\[[Z55667788llkkjjii))**++,, ,,++**))qppoonnmPQQRRSSTQPPOONNMpqqrrsst !!""##$100//..-ZYYXXWWV99::;;<<hhggffee--..//00 + + ((''&&%%mllkkjjiTUUVVWWXMLLKKJJItuuvvwwx$%%&&''(-,,++**)VUUTTSSR==>>??@@ddccbbaa11223344 + + $$##""!!ihhggffeXYYZZ[[\ + + IHHGGFFExyyzz{{|())**++,)((''&&%RQQKKJJI~~}}AABBCCDD ``__^^]]55667788 eddccbba\]]^^__` EDDCCBBA|}}~~,--..//0%$$##""!IHHGGFFE||{{zzyyEEFFGGHH + + \\[[ZZYY + + 99::;;<<a``__^^]`aabbccdA@@??>>=01122334! EDDCCBBAxxwwvvuuIIJJKKLLXXWWVVUU ==>>??@@]\\[[ZZYdeeffggh=<<;;::945566778A@@??>>=ttssrrqqMMNNOOPPTTSSRRQQAABBCCDD !!""YXXWWVVUhiijjkkl98877665899::;;<=<<;;::9ppoonnmmQQRRSSTTPPOONNMMEEFFGGHH##$$%%&& +UTTSSRRQlmmnnoop 54433221<==>>??@98877110llkkjjiiUUVVWWXXLLKKJJII 44332211==>>??@@ lkkjjiihUVVWWXXY LKKJJIIHuvvwwxxy%&&''((),++**))(UTTSSRRQ>>??@@AAccbbaa``^^__``aaCCBBAA@@~~^^__``aa&''(())*+**))(('{zzyyxxwFGGHHIIJ + + IHHGGFFEUTTSSRRQ!!""##$$00//..--~~}}AABBCCDDhggffeedYZZ[[\\] + + HGGFFEEDyzz{{||})**++,,-(''&&%%$QKKJJIIH~~}}||BBCCDDEE __^^]]\\bbccddee??>>==<>=MLLKKJJI))**++,,((''&&%%xxwwvvuuIIJJKKLL !!""`__^^]]\abbccdde@??>>==<12233445 DCCBBAA@wwvvuuttJJKKLLMMWWVVUUTTjjkkllmm77665544ooppqqrr23344556onnmmllkRSSTTUUV=<<;;::9IHHGGFFE--..//00$$##""!!ttssrrqqMMNNOOPP##$$%%&& +\[[ZZYYXeffgghhi<;;::99856677889@??>>==gffeeddcZ[[\\]]^ + 0//..--,A@@??>>=55667788llkkjjiiUUVVWWXX++,,--..TSSRRQQPmnnooppq !43322110=>>??@@A8771100/kkjjiihhVVWWXXYY KKJJIIHHvvwwxxyy&&''(())++**))((vvuuttss{{||}}~~>??@@AABcbbaa``_^__``aab,++**))(=<<;;::999::;;<<hhggffeeYYZZ[[\\//001177POONNMMLqrrssttu!""##$$%0//..--,~~}}|ABBCCDDE /..--,,+ggffeeddZZ[[\\]] + + GGFFEEDDzz{{||}}**++,,--''&&%%$$rrqqppooBCCDDEEF _^^]]\\[bccddeef(''&&%%$98877665==>>??@@ddccbbaa]]^^__``8899::;; LKKJJIIHuvvwwxxy%&&''((),++**))(|{{zzyyxEFFGGHHI + + +**))(('ccbbaa``^^__``aaCCBBAA@@~~..//0011##""!! nnmmllkkFGGHHIIJ + + [ZZYYXXWfgghhiij$##""!! 54433221AABBCCDD ``__^^]]aabbccdd<<==>>?? + + HGGFFEEDyzz{{||})**++,,-(''&&%%$xwwvvuutIJJKKLLM'&&%%$$#__^^]]\\bbccddee??>>==<<22334455eeddccbbJKKLLMMNWVVUUTTSjkkllmmn 100//..-EEFFGGHH + + \\[[ZZYYeeffgghh@@AABBCC DCCBBAA@}~~-..//001$##""!! tssrrqqpMNNOOPPQ#""!! [[ZZYYXXffgghhii;;::998866778899aa``__^^~~}}||{NOOPPQQRSRRQQPPOnooppqqr !!"-,,++**)IIJJKKLLXXWWVVUUiijjkkllDDEEFFGG@??>>==<12233445 poonnmmlQRRSSTTU WWVVUUTTjjkkllmm77665544::;;<<==]]\\[[ZZ{zzyyxxwRSSTTUUVONNMMLLKrssttuuv"##$$%%&)((''&&%MMNNOOPPTTSSRRQQmmnnooppHHIIJJKK<;;::99856677889lkkjjiihUVVWWXXY + + SSRRQQPPnnooppqq !!33221100>>??@@AAYYXXWWVVwvvuuttsVWWXXYYZ +KJJIIHHGvwwxxyyz&''(())* %$$##""!QQRRSSTTPPOONNMMqqrrssttQQRRSSTT877665549::;;<<=hggffeedYZZ[[\\] OONNMMLLrrssttuu""##$$%%//..--,,~~}}||BBCCDDEE UUTTSSRRsrrqqppoZ[[\\]]^ + GFFEEDDCz{{||}}~*++,,--. + + +! UUVVWWXXLLKKJJIIuuvvwwxxUUVVWWXX !43322110=>>??@@Adccbbaa`]^^__``a +KKJJIIHHvvwwxxyy&&''(())++**))(({{zzyyxxFFGGHHII + + QQKKJJIIonnmmllk^__``aabCBBAA@@?~.//00112 + YYZZ[[\\ + + HHGGFFEEyyzz{{||YYZZ[[\\!""##$$%0//..--,~~}}|ABBCCDDE `__^^]]\abbccdde + GGFFEEDDzz{{||}}**++,,--''&&%%$$wwvvuuttJJKKLLMMHHGGFFEEkjihgfeebccddeef?>>==<<;23344556]]^^__`` DDCCBBAA}}~~]]^^__``%&&''((),++**))(|{{zzyyxEFFGGHHI + + \[[ZZYYXeffgghhi !!"CCBBAA@@~~..//0011##""!! ssrrqqppNNOOPPQQDDCCBBAAddccbbaafgghhiij;::998876778899:aabbccdd@@??>>==aabbccdd)**++,,-(''&&%%$xwwvvuutIJJKKLLMXWWVVUUTijjkkllm"##$$%%& ??>>==<<22334455oonnmmllRRSSTTUU@@??>>==``__^^]]jkkllmmn76655443:;;<<==> eeffgghh<<;;::99eekkllmm-..//001$##""!! tssrrqqpMNNOOPPQTSSRRQQPmnnooppq&''(())* + + ;;::998866778899kkjjiihhVVWWXXYY <<;;::99\\[[ZZYYnooppqqr !!"3221100/>??@@AAB !!""# + + iijjkkll88776655nnooppqq12233445 poonnmmlQRRSSTTUPOONNMMLqrrssttu*++,,--. 77665544::;;<<==ggffeeddZZ[[\\]] + + 88771100XXWWVVUUrssttuuv"##$$%%&/..--,,+~~}}||{BCCDDEEF#$$%%&&' + + mmnnoopp 44332211~~}}||rrssttuu56677889lkkjjiihUVVWWXXY LKKJJIIHuvvwwxxy.//0011733221100>>??@@AAccbbaa``^^__``aa//..--,,TTSSRRQQvwwxxyyz&''(())*+**))(('{zzyyxxwFGGHHIIJ'(())**+ qqrrsstt!!""##$$00//..--{{zzyyxxvvwwxxyy9::;;<<=hggffeedYZZ[[\\] + + HGGFFEEDyzz{{||}78899::;//..--,,~~}}||BBCCDDEE __^^]]\\bbccddee++**))((PONMLKKJz{{||}}~*++,,--.'&&%%$$#wvvuuttsJKKLLMMN+,,--../uuvvwwxx%%&&''((,,++**))wwvvuuttzz{{||}}=>>??@@Adccbbaa`]^^__``a DCCBBAA@}~~;<<==>>?++**))(({{zzyyxxFFGGHHII + + [[ZZYYXXffgghhii''&&%%$$JIIHHGGF~.//00112#""!! srrqqppoNOOPPQQR/0011778yyzz{{||))**++,,((''&&%%ssrrqqpp~~ABBCCDDE `__^^]]\abbccdde@??>>==6778899:kjjiihhgVWWXXYYZ<==>>??@ 11223344 kkeeddccIJJKKLLMXWWVVUUTijjkkllm87766554GHHIIJJK(())**++oonnmmllRRSSTTUUOONNMMLLrrssttuu""##$$%%>==<<;;::;;<<==>gffeeddcZ[[\\]]^@AABBCCD !!""##$55667788bbaa``__~~}}|MNNOOPPQTSSRRQQPmnnooppq !43322110KQQRRSST,,--..//kkjjiihhVVWWXXYY KKJJIIHHvvwwxxyy&&''(()):9988776>??@@AABcbbaa``_^__``aabDEEFFGGH$%%&&''(99::;;<<^^]]\\[[|{{zzyyxQRRSSTTUPOONNMMLqrrssttu!""##$$%0//..--,~~}}|TUUVVWWX00112345ggffeeddZZ[[\\]] + + GGFFEEDDzz{{||}}**++,,-- 54321100~~}}||{BCCDDEEF _^^]]\\[bccddeefHIIJJKKQ())**++,==>>??@@ZZYYXXWWxwwvvuutUVVWWXXY LKKJJIIHuvvwwxxy%&&''((),++**))(|{{zzyyxXYYZZ[[\6778899:ccbbaa``^^__``aaCCBBAA@@~~..//0011 + + //..--,,{zzyyxxwFGGHHIIJ + + [ZZYYXXWfgghhiijQRRSSTTU,--..//0~~}}AABBCCDD VVUUTTSStssrrqqpYZZ[[\\] + + HGGFFEEDyzz{{||})**++,,-(''&&%%$xwwvvuut\]]^^__`:;;<<==> __^^]]\\bbccddee??>>==<<22334455++**))((wvvuuttsJKKLLMMNWVVUUTTSjkkllmmnUVVWWXXY01122334||{{zzyyEEFFGGHH + + RRQQKKJJpoonnmml]^^__``a DCCBBAA@}~~-..//001$##""!! tssrrqqp`aabbccd>??@@AAB + + [[ZZYYXXffgghhii;;::998866778899 + +''&&%%$$srrqqppoNOOPPQQRSRRQQPPOnooppqqrYZZ[[\\]45566778xxwwvvuuIIJJKKLLIIHHGGFFlkkjihgfabbccdde@??>>==<12233445 poonnmmldeekkllmBCCDDEEFWWVVUUTTjjkkllmm77665544::;;<<== ##""!! onnmmllkRSSTTUUVONNMMLLKrssttuuv]^^__``a899::;;>??@@AAkjjiihhgVWWXXYYZ +KJJIIHHGvwwxxyyzabbccdde<==>>??@ppoonnmmQQRRSSTTAA@@??>>aa``__^^ijjkkllm877665549::;;<<=hggffeedqrrssttuJKKLMNOPOONNMMLLrrssttuu""##$$%%//..--,,~~}}||BBCCDDEEgffeeddcZ[[\\]]^ + GFFEEDDCz{{||}}~ekkllmmn@AABBCCDllkkjjiiUUVVWWXX==<<;;::]]\\[[ZZmnnooppq !43322110=>>??@@Adccbbaa`uvvwwxxyQQRRSSTT KKJJIIHHvvwwxxyy&&''(())++**))(({{zzyyxxFFGGHHIIcbbaa``_^__``aabCBBAA@@?~nooppqqrDEEFFGGHhhggffeeYYZZ[[\\ + + 99887711YYXXWWVVqrrssttu!""##$$%0//..--,~~}}|ABBCCDDE `__^^]]\yzz{{||}UUVVWWXX + + GGFFEEDDzz{{||}}**++,,--''&&%%$$wwvvuuttJJKKLLMM !!""## _^^]]\\[bccddeef?>>==<<;rssttuuvHIIJJKKLddccbbaa]]^^__`` 00//..--UUTTSSRRuvvwwxxy%&&''((),++**))(|{{zzyyxEFFGGHHI + + \[[ZZYYX}~~YYZZ[[\\CCBBAA@@~~..//0011##""!! ssrrqqppNNOOPPQQ$$%%&&'' + + [ZZYYXXWfgghhiij;::99887vwwxxyyzLMMNNOOP``__^^]]aabbccdd,,++**))QQPONMLKyzz{{||})**++,,-(''&&%%$xwwvvuutIJJKKLLMXWWVVUUT]]^^__``??>>==<<22334455oonnmmllRRSSTTUU(())**++ WVVUUTTSjkkllmmn76655443~~}}||{z{{||}}}PQQRRSST\\[[ZZYYeeffgghh((''&&%%KJJIIHHG}~~-..//001$##""!! tssrrqqpMNNOOPPQTSSRRQQP~aabbccdd;;::998866778899kkjjiihhVVWWXXYY,,--..//SRRQQPPOnooppqqr !!"3221100/{zzyyxxw}||{{zzyTUUVVWWXXXWWVVUUiijjkkll$$##""!!GFFEEDDC12233445 poonnmmlQRRSSTTUPOONNMML~}}||{{zeefghijk77665544::;;<<==ggffeeddZZ[[\\]]00117788ONNMMLLKrssttuuv"##$$%%&/..--,,+wvvuuttsyxxwwvvuXYYZZ[[\TTSSRRQQmmnnoopp CBBAA@@?56677889lkkjjiihUVVWWXXY LKKJJIIHzyyxxwwvkllmmnno !!33221100>>??@@AAccbbaa``^^__``aa99::;;<< +KJJIIHHGvwwxxyyz&''(())*+**))(('srrqqppouttssrrq\]]^^__`PPOONNMMqqrrsstt!!""##$$?>>==<<;9::;;<<=hggffeedYZZ[[\\] + + HGGFFEEDvuuttssroppqqrrs""##$$%%//..--,,~~}}||BBCCDDEE __^^]]\\bbccddee==>>??@@ + GFFEEDDCz{{||}}~*++,,--.'&&%%$$#onnmmllkqppoonnm`aabbccdLLKKJJIIuuvvwwxx%%&&''((;::99887=>>??@@Adccbbaa`]^^__``a DCCBBAA@rqqppoonsttuuvvw&&''(())++**))(({{zzyyxxFFGGHHII + + [[ZZYYXXffgghhiiAABBCCDDCBBAA@@?~.//00112#""!! keeddccbmllkkjjideeffgghHHGGFFEEyyzz{{||))**++,, 76543211~~}}|ABBCCDDE `__^^]]\abbccdde@??>>==>==<<;23344556baa``__^ihhggffehiijjkklDDCCBBAA}}~~--..//00 + + 00//..--|{{zzyyxEFFGGHHI + + \[[ZZYYXeffgghhi<;;::998eddccbba{||}}~~..//0011##""!! ssrrqqppNNOOPPQQSSRRQQPPnnooppqqIIJJKKQQ;::998876778899:^]]\\[[Zeddccbbalmmnnoop@@??>>==11223344,,++**))xwwvvuutIJJKKLLMXWWVVUUTijjkkllm87766554a``__^^]22334455oonnmmllRRSSTTUUOONNMMLLrrssttuuRRSSTTUU76655443:;;<<==>ZYYXXWWVa``__^^]pqqrrsst<<;;::9955667788 ((''&&%%tssrrqqpMNNOOPPQTSSRRQQPmnnooppq !43322110]\\[[ZZY66778899kkjjiihhVVWWXXYY KKJJIIHHvvwwxxyyVVWWXXYY !!"3221100/>??@@AABVUUTTSSR]\\[[ZZYtuuvvwwx8877665599::;;<< + + $$##""!!poonnmmlQRRSSTTUPOONNMMLqrrssttu!""##$$%0//..--,YXXWWVVU::;;<<==ggffeeddZZ[[\\]] + + GGFFEEDDzz{{||}}ZZ[[\\]]"##$$%%&/..--,,+~~}}||{BCCDDEEF RQQKKJJIYXXWWVVUxyyzz{{||}}fpvXQJ`ےpfH~pZHAbf~HbHAf`vXQr˂pf~HbHAAJltr˂pf~HbHAZ`vXnnXv`bHAZf`vJAdfpvZp˂nvpZHAbfpvZp˂bdQZ|ZHAbfpvp˂rvpff~Hp˂rXn|ZdQnXv`rXQJ`fH~˙ے`JXnXv`rXQJ`ہdtA`JXQnXv`XQJ`ےH~ffpvXQJ`ےf`vXbtlf~HbHAf`vXQr˂pf~HbHAJltr˂pf~HbHAZ`vXnnXv`bHAZnvpJtArdfpvZp˂nvpZHAbfpvZp˂bnvpZHAbfpvp˂rvpff~Hp˂rfH~|ZdQnXv`rXQJ`fH~˙ے`JXnXv`rXQJ`۝`vX˂pZHnXv`XQJ`ےH~ffpvXQJ`ےf`vXbtlf~HJltf`vXQr˂pf~HbHAnvpAbے`f~HbHAZ`vXnnXv`bHAZnvpJtArdfpvbdQZ|nvpZHAbfpvZp˂fH~ˁJXQrfpvp˂rvpff~Hp˂r`vXn|ZdQnXv`drtfH~˙ے`JXnXv`rXQJ`f`vXH˂p`nXv`XQJ`ےH~ffpvXQJ`ےvpfbtlf~HAJltf`vXQr˂pf~HbHA~f`JXQrbtf~HbHAZ`vXnnXv`bHAZH~fJtArdfpvbdQZ|nvpZHAۅfpvZp˂vXnlJAfpvp˂rvpff~Hp˂r`vXn|ZdQnXv`drtfH~˒`JXQnXv`rXQJ`ۅvpfH|ZdQnXv`XQJ`ےH~ffpvXQJ`ےvpfbtlf~HAJltf`vXrbtlf~HbHA~f`btlf~HJlt`vXnnXv`bHAZHXnJtArdfpvbdQZ|nvpJtAdfpvZp˂vXnJtArdfpvbdQZ|vpff~Hp˂rvpfH|ZdQnXv`drtfH~˂|ZdQnXv`rXQJ`ۅf`|ZdQbnXv`drtAH~ffpvXQJ`ے~f`btlf~HAJltf`vXbtlf~HbHAvXnۉJtArf~HJlt`vXnnXv`JltvXnJtArdfpvbdQZ|nvpJtArdfpvZp˂vpfHd|ZfpvbdQZ|vpff~HdrtAJvpfH|ZdQnXv`drtfH~˂|ZdQnXv`rXQJ`~f`dQbtnXv`drtAH~ffpvltb~vbtlfHAJltf`vXbtlf~HJltvXnlJtArf~HJlt`vXnnXv`dQZ|pfے`JtArdfpvbdQZ|nvpJtArdfpvbdQZ|vp`vXd|ZfpvbdQZ|vpff~HdrtAJJXQr|ZdQnrXQJ`drtfH~˂|ZdQnXv`drtnvpdQbtnXv`drtAH~ffpvltbZHAbbtlےHAAJltf`vXbtlf~HAJltfH~JArd|f~HJlt`vXnnXv`dQtAJl`JXQJtArdZp˂bdQZ|nvpJtArdfpvbdQZ|f`vXZdQbtfpvbdQZ|vpff~HtbdQr˂p|ZdQrXQJ`ہdrtfH~˂|ZdQnXv`drtnvplJtnXv`drtAH~fr˂pfpvZ|dZHAbbtlbHAAJltf`vXbtlf~HAJltfHXArd|fHfJlt`vXnZHAbnXv`rtAJl`JXQJtArdZp˂bdQZ|nvpJtArdfpvbdQZ|nvpZdQbtpvnbdQZ|vpfے`JXQf~HtbdQrZAb|ZdQrXQJ`ہdrtfے`JX|ZdQnXv`drtfH~ˉlJArrXQJ`drtAH~fr˂pfpvZ|l璐ے`JbtlbHAAJltQr˂pbtlf~HAJltf`vX㙂|ZdQےHAZJlt`vXnZHAbnXv`tbdQZXQr˂JtArdZp˂bdQZ|ZHAbJtArdfpvbdQZ|nvpbtlp˂rbdQZ|vpfے`JXQf~H|drpZHAb|ZdQrXQJ`ہdrtے`JX|ZdQnXv`drtfH~JtArdXQJ`ےdrtAH~fr˂pfpvtAJl璐ے`JbtlbHAAJltQr˂pbtlfHAJltvpf|ZdQbHAZJlt`vXnZHAbnXv`tbdQZXQr˂JtArdZp˂bdQZ|ZHAbJtArdfpvbdQZ|`JXQHbtlp˂rbdQZ|vpfے`JXQp˂r|dtpZAb`|ZdQrXQJ`ہdrtے`JX|ZdQnrXQJ`drtAbے`JtArXQJ`ےdrtAے`JXQr˂pXQJ`ےbdQZ|JXQrbtlbHAAJltQr˂pbtlےHAAJltJXQrZdQbt琙bHAZJltr˂pZHAbbHAZdrtA˂pZHJfpvZp˂bdQZ|ZHAbJtArdZp˂bdQZ|˂pZHlJtAp˂rbdQZ|ZHAbے`JXQp˂rJltAbے`nXv`rXQJ`ہdrtے`JX|ZdQrXQJ`ہdrtAbے`rd|XQJ`ےdrtAے`JXQr˂pXQJ`ےbdQZ|JXQrf~HbHAAJltQr˂pbtlbHAAJltJXQrZdQbt琙bHAZJltr˂pZHAbbHAZdrtA˂pZHfpvZp˂bdQZ|ZHAbJtArdZp˂bdQZ|ے`lJtAp˂rbdQZ|ZHAbے`JXQp˂rdQZ|AbJXQnXv`rXQJ`ہdtAے`JX|ZdQrXQJ`ہdrtJXQrrdZQbXQJ`ےdrtAے`JXQr˂pXQJ`ےdrtAJr˂pf~HbHAJltQr˂pbtlbHAAJltpZHAtlJbHAZJltr˂pZHAےbHAZltbZHAbfpvZp˂bnvpZHAbJtArdZp˂bdQZ|bے`fpvp˂rbdQZ|ZHAb`JXQrp˂rdQZ|`ے`JXQnXv`rXQJ`۝fH˙ے`JX|ZdQrXQJ`ہdrtJXQrnXv`XQJ`ےdrtAے`JXQbtlXQJ`ےvXnr˂pf~HbHAf`vXQr˂pbtlbHAAJltp`JXf~HbHAZJltr˂pJtAdbHAZvpfHZHAbfpvZp˂nvpZHAbJtArdZp˂bdQZ|Qr˂pfpvp˂rbdQZ|ZHAb|ZdQbp˂r~f`JQr˅nXv`rXQJ`fH~˙ے`JX|ZdQrXQJ`ہdrtZHAbnXv`XQJ`ےdtAJے`JXQtlJXQJ`ےvXH~pZHAf~HbHAf`vXQr˂pbtlbHAAJltے`JXf~HbHAZltbr˂ptArdbHAZf`vbے`fpvZp˂nvpZHAbJfpvZp˂bdQZ|Qr˂pfpvp˂rnvpZHAb|ZdQbp˂rXnvJXQr˅nXv`rXQJ`fH~˙ے`JXnXv`rXQJ`ہdrtZHAXQnXv`XQJ`ےfHfے`JXQtlJtArdfpvbdQZ|vpflJtAf~HbdQZ|vpfHJtAd|fpv˂rXvpfHZHAbۅnXv`dQZ|vpfHHAbےpvn˂rXQvpfHHAbےrd|˂rXQvpfHAbے`vnXrXQQZ|dQr˂pXnvˍ|ZdQbnXv`drtAH~frd|fvnXdrtA~f`ZdQbtnXv`QJ`ے~f``JXQpvdrtAJ~f``JXQrXv`fJ`ے~f``JXQrZdQbtJ`ے~f`JXQrv`fJ`ےtAJlZHAbpfH~tlJf~HJlt`vXnZdQtArv`fJltvXnlJtf~HbHAZpvXnr˂pnXv`ltbvXn˂pZ~HfbHAZpvXn˂pZlJfrXQJvXnۉ˂pZH~HfpbHAZp˒tbnے`JXf۝`vtArdfpvbdQZ|vpfd|Z~HfpbdQZ|vpfHArd|fpv˂rXvpfHZHAbf~HdQZ|vpfHHAے`pvn˂rXQvpfHHAbےpv`ےbvpfHAbے`vnXrXQvpfHQr˂pXnvˍ|ZdQbnXv`drtAH~fdQbtvnXdrtA~f`ZdQbtnXv`QJ`ے~f``JXQfpvdrtAJ~f`JXQrbXv`fJ`ے~f``JXQr~HfpHAZp˂~f`JXQrv`fJ`ےㅐf`ZHAXQpfH~tlJf~HJlt`vXnlJtArv`ffpJltvXnlJtf~HJltvXnr˂pnXv`ltbvXntlJ~HfbHAZpvXn˂pZvnXrXQJvXnۉ˂pZH~HfpbHAZpvXnr˂pf۝`vtArdfpvbdQZ|vpfd|ZvnbdQZ|vpfHArd|fpvbdQZ|vpfHZHAbfnXdQZ|vpfHtAd|pvn˂rXQvpfHHAbےv`f`ےbvpfHAbے`vnXrXQvpfHZHAbXnvˍ|ZdQbnXv`drtAH~fdQbtdrXQJ`ۂdrtA~f`ZdQbtnXv`˂drtA~f``JXQv`fdrtAJ~f`ZdQbtXv`fJ`ے~f``JXQr~HfpHAXQJ`~f`JXQrv`fJ`ے~f``JXQpfH~tlJf~HJlt`vXn|ZdQHAZpJltvXnlJtf~HJltvXnr˂p~HfpltbvXnlJtA~HfbHAZpvXn˂pZvnXےJlvXnۉ˂pZH~HfpbHAZpvXnr˂pf۝`vtArdfpvbdQZ|vpfbtl˂rXbdQZ|vpfHArd|fpvbdQZ|vpfHZHAے`vnXdQZ|vpfHrd|pvn˂rXQvpfHHAbےHfpvtbQZdvpfHAے`vnXrXQvpfHZHAbXnvˍ|ZdQbnXv`drtAH~fJtArdQJ`ےdrtA~f`ZdQbtnXv`˂drtA~f`JXQrv`fdrtAJ~f`ZdQbtXv`fJ`ےJ~f``JXQrnXvrtAJl~f`JXQrbtv`fJ`ے~f`˂pZHpfH~tlJfHfJlt`vXn|ZdQbHAZpJltvXnlJtf~HJltvXnbtl|~HXltbvXnlJtA~HfltbvXn˂pZ`f~tbdvXnۉlJt~HfpbHAZpvXnAbے`f۝`vtArdpvnbdQZ|vpfbtl˂rXbdQZ|vpfArd|fpvbdQZ|vpfHZdQbtv`fdQZ|vpfHrd|pvndQZ|vpfHHAbےHfpvQZ|dvpfHAd|vnXrXQvpfHJXQrXnvˍ|ZdQbrXQJ`drtAH~f|ZdQbQJ`ےdrtA`JXQZdQbtnXv`˂drtA~f`lJt~HfpdrtAJ~f`ZdQbtXv`fdrtAJ~f``JXQrnXvrtAJl~f`ZdQbtv`fJ`ے~f`˂p`ZpfH~tlJےHAZJlt`vXntlJbHAZpJltr˂plJtf~HJltvXnArd|vnXltbvXnlJtA~HfltbvXn˂pZ`pvtbdvXnےlJtA~HfpbHAZpvXnQXb㉀f۝`vtArdp˂rbdQZ|vpftArd˂rXbdQZ|ZHAbArd|fpvbdQZ|vpfHZdQtAv`pvdQZ|vpfHrd|pvndQZ|vpfHHAے`nXv`QZrtAvpfHrd|vnXrXQvpfHۑpJAHrXnvˍ|ZdQbXQJ`ےdrtAH~f|ZdQbQJ`ےdrtA`JXQZdQbtnXv`˂drtA~f`rd|nrXQdrtAJ~f`ZdQbtXv`fdrtAJ~f`JXQrbf~HJlt~f`ZdQbtv`fJ`ےJl~f`󙐂ˁ`ZpfH~tlJbHAZJlt`vXntlJbHAZpJltr˂plJtfHfpJltvXnZdQbtJ`AZpltbvXnlJtA~HfltbvXntlJfpvbdQZ|vXnےlJtA~HfptbdvXnQXAHrf۝`vtArdp˂rbdQZ|vpftAdQbt˂rXbdQZ|ZHAbArd|vnbdQZ|vpfHlJtA˂rXdQZ|vpfےrd|pvndQZ|vpfHtAd|nXv`drtAvpfHrd|vnXQZ|dvpfHˁ`ZQXnvˍ|ZdQbXQJ`ےdrtAے`JXQlJtAQJ`ےdrtA`JXQZdQbtrXQJ`ۂdrtA~f`rd|QJ`ےdrtAJ`JXQrZdQbtXv`fdrtAJ~f`ZdQbtfnJlt~f`ZdQbtv`frtAJl~f`Xb㉀ۑp|drtlJbHAZJltHAbےrd|bHAZpJltr˂plJtHAZpJltvXnZdQbtdbHAZpltb˂pZlJtA~HfltbvXnlJtAXv`fbdQZ|vXnےlJtA~HfptbdvXnpJAHrQtJltArdp˂rbdQZ|`JXQrZdQbt˂rXbdQZ|ZHAbArd|˂rXbdQZ|vpfH|Zd˂rQJdQZ|HAbےrd|pvndQZ|vpfHrd|~HfrAJlvpfHrd|vnXQZ|dvpfHˁ`ZQtbAdZ|ZdQbXQJ`ےdrtA˂pZlJtAQJ`ےdrtA`JXQZdQbtQJ`ےdrtA~f`QbtlbHAdrtAJ`JXQrZdQbtXv`fdrtAJ~f`ZdQbtpvntbdQ~f`ZdQbtv`frtAJl~f`Xb㉀|drtlJbHAZJltHAbےrdt璙bHAZpJltr˂plJtbHAZpJltvXnJtArdZp˂ltb˂pZlJtAHfpltbvXnlJtAXv`fZ|dvXnےlJtA~HfptbdvXnˁ`ZQXbQtJltArdp˂rbdQZ|`JXQrlJfp˂rXbdQZ|ZHAbArd|˂rXbdQZ|vpfۙ|ZdrXQJ`dQZ|HAbےrd|vnrdQZ|vpfHrd|~HXrtAJlvpfے`rd|vnXQZ|dvpfH㉀ۑpJtbAdZ|ZdQbXQJ`ےdrtAے`vnvQJ`ےdtAJl`JXQZdQbtQJ`ےdrtA`JXQQbtlےbHAdrtAJ`JXQrZdQbtXQJ`ےdrtAJ~f`ZdQbtv`ftbdQJXQrZdQbtv`frtAJl~f`AHr󙐂|drtlJbHAZJltJXQrf~HbHAZptbr˂plJtbHAZpJltr˂p|ZdQZp˂ltb˂pZlJtAHAZpltbvXnlJtA~HfpZ|dr˂pZHlJtA~HfptbdvXnˁ`ZQXbQtJlfpvp˂rbdQZ|˂pZHAfpv˂rXnvpZHAbArd|˂rXbdQZ|ZHAbbtlrXQJdQZ|HAbےrd|˂rXQdQZ|vpfHrd|vnXAJtbAbے`rd|vnXQZ|dvpfH㉀ۑptbAdZnXv`XQJ`ےdrtAbے`nXv`QJ`ےfHf``JXQZdQbtQJ`ےdrtA`JXQJtArdbHAZpdrtAJ`JXQrZdQbtJ`ےdrtAJ~f`ZdQbtv`pvdQZ|JXQrZdQbtv`frtAJl~f``ZQXb|drf~HbHAZJltJXQrf~HbHAZpvXnr˂plJtbHAZpJltr˂p|ZdQrXQltb˂pZlJtAbHAZpltbvXnlJtAnrXQdrtAJ˂pZHlJtAHfpۑtbdvXnۀۑpJAQtJlfpvp˂rbdQZ|˂p`Jfpv˂rXvpfHZHAbArd|˂rXbdQZ|ZHAbbtlJ`ےdQZ|HAbےrd|˂rXQdQZ|vpfےrd|J`p˂ltbAbے`rd|vnrXQZ|dvpfHHr󙐂ˁtbAdZnXv`XQJ`ےdtAJXQr˂nXvf~QJ`ے~f``JXQZdQbtQJ`ےdrtA`JXQJtAdQbtbHAZpdtAJl`JXQrZdQbtJ`ےdrtAJ`JXQrZdQbtrXQJdQZ|JXQrZdQbtQJ`ےrtAJl~f``ZQXb|drf~HbHAZltbpZHAbHfpvbHAZpvXnr˂plJbHAZpJltr˂plJtrXQtbn˂pZlJtAbHAZpltb˂pZlJtA`ےbdrtAJ˂pZHlJtAHAZpˑtbdvXnۀۑpJAQtJlfpvp˂rnvpے`JnXv˂rXvpfHZHAbfpv˂rXbdQZ|ZHAbArd|J`bAZvpfHAbےrd|˂rXQdQZ|HAbےrd|HAZp˂bdQZ|Abے`rd|炀rXQQZ|dvpfHHQXb㉀tbAdZnXv`XQJ`ےfHfXQr˂`f~QJ`ے~f``JXQnXv`QJ`ےdrtA`JXQZdQbtp˂rHf``JXQrZdQbtJ`ےdrtAJ`JXQrZdQbtbHAdrtJXQrZdQbtJ`ےrtAJl~f`ۑpJAHr|drf~HbHAZ`vXnpZHAXQHfpvbHAZpvXnr˂pf~HbHAZpJltr˂plJtXQJ`ےvXn˂pZlJtAbHAZpltb˂pZlJtAZp˂AJlt˂pZHlJtAbHAZpˑtbdvXn󙐂ˁ`ZQtJlfpvp˂rvpfr˂pnXv˂rXvpfHZHAbfpv˂rXbdQZ|ZHAbArdt琙bHAZvpfHHAbےrd|˂rXQdQZ|HAbےrd|rXQJ`bdQZ|Abے`rd|炀rXQQZ|dvpfZHQXb㉀tbAdZnXv`XQJ`ےH~fZHAb`f~fpQJ`ے~f``JXQnXv`QJ`ےdtAJl`JXQlJfpp˂r~f``JXQrZdQbtJ`ےdrtAJ`JXQrZdQbtےbHAAJlJXQrZdQbtJ`ےrtAJlAbے`ۑpJAH|drf~HbHAZ`vXnے`JXQvnXbHAZpvXnr˂pf~HbHAZptbr˂pvXQJ`ےvXn˂pZlJfbHAZpltb˂pZlJtAZp˂tbn˂pZHlJtAbHAZpˑtbdJXQrf۝`vQtJlfpvp˂rvpfr˂pv`f˂rXvpfHZHAbfpv˂rXnvpZHAb~HfpېbAZvpfHHAbےpvn˂rXQdQZ|HAbےrd|rXQHAZvpfHAbے`rd|炀rXQQZ|d˂pZHXnvˍtbAdZnXv`XQJ`ےH~fZHAb~HfpQJ`ے~f``JXQnXv`QJ`ےfHf``JXQvnXrXQJ`~f``JXQrXv`fJ`ےdrtAJ`JXQrZdQbtp˂rf`JXQrZdQbtJ`ےrtAJlAbے`pfH~|drf~HbHAZ`vXn˂pZvnXJltvXnr˂pf~HbHAZpvXnr˂pv`fےbHvXn˂pZ~HfbHAZpltb˂pZlJtAXQJ`ےvXnۉ˂pZHlJtAbHAZpˑtbdJXQrf۝`vQtJlfpvp˂rvpfHAbےv`fbdQZ|vpfHZHAbfpv˂rXvpfHZHAb~HfpAZp˂vpfHHAbےpvn˂rXQdQZ|HAbےrd|bHAZvpfHAbے`rd|炀rXQQZ|dے`XnvˍtbAdZnXv`XQJ`ےH~f`JXQr~fvdrtA~f``JXQnXv`QJ`ے~f``JXQvnXHrXQJ`~f``JXQrXv`fJ`ےdtAJl`JXQrZdQbtp˂r~f`JXQrZdQbtJ`ےrtAJlJXQrpfH~|drf~HbHAZ`vXn˂p`nXv`JltvXnr˂pf~HbHAZpvXnr˂pfpvےbHvXn˂pZ~HfbHAZptbn˂pZlJtAXQJ`pvXnۉ˂pZHlJfpbHAZpˑtbdpZHAf۝`vQtJlfpvp˂rvpfJXQrbf~HbdQZ|vpfHZHAے`fpv˂rXvpfHZHAbۅnXv`AZrXQvpfHHAbےpvn˂rXQvpfHAbےrd|˂rXQvpfHAbے`vnXrXQQZ|dbے`XnvˍtbAdZnXv`XQJ`ےH~ftl|fpvdrtA~f`JXQrnXv`QJ`ے~f``JXQf~HJ`ےJ~f``JXQrXv`fJ`ےHf``JXQrZdQbtJ`ے~f`JXQrv`fJ`ےrtAJlJXQrpfH~|drf~HJlt`vXnZdQbtnXv`JltvXnbtlf~HbHAZpvXnr˂pfpvltbvXn˂pZ~HfbHAZpvXn˂pZlJtAbHAZpvXnۉ˂pZH~HfpbHAZpˑtbdp`JXf۝`vQtJlt-----------------------......................... \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv30_3.dat b/vendor/endroid/qr-code/assets/data/qrv30_3.dat new file mode 100644 index 000000000..29e3e0dd4 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv30_3.dat @@ -0,0 +1,273 @@ +}~}~}~}~{|{|{|{|yzyzyzyzwvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklghghghghfefeeeeedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPO}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklghghghghefefefefdcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPO}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklghghghghefefefefbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPO}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklghghghghefefefefbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPO}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqropopopopmnmnmnmnkjijijijghghghghefefefefbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPO}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqropopopopmnmnmnmnijijijijghghghghefefefefbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPO}~}~}~}~{|{|{|{|yxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnijijijijghghghghefeeeeeebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPO}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnijijijijghghghghfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPO}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnijijijijghghghghdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPO}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnijijijijghghghghdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPO}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststqrqrqrqropopopopmlklklklijijijijghghghghdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPO}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststqrqrqrqropopopopklklklklijijijijghghghghdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPO}~}~}~}~{zyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopklklklklijijijijghghghghdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPO}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopklklklklijijijijghghghghdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPO}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopklklklklijijijijghghghghdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPONM}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopklklklklijijijijghghghghdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMNMNMNMNM}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqronmnmnmnklklklklijijijijghghghghdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMNMNMLKLK}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijghghgfefdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKKKKK}|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijefefeeeedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKL{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijefefefefdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKL{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijefefefefdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKL{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklijijijijefefefefdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKL{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqpopopopmnmnmnmnklklklklijijijijefefefeedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKL{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklijijijijeeeefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMKLKKKKKK}{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklijijijijfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLK}}}}}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklijijijijfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLK}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklijijijijfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLK}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklijijijijfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLK}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvsrqrqrqropopopopmnmnmnmnklklklklijijijijfefefeeedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLK}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnklklklklijijijijeeefefefdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKKKKKKL}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnklklklklijijijihefefefefdcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMKLKLKLKL}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnklklklklghghghghefefefefdcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMKLKLKLKL}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnklklklklghghghghefefefefdcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMKLKLKLKL}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnklklklklghghghghefefefefdcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMKLKLKLKL}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxutstststqrqrqrqropopopopmnmnmnmnklklklklghghghghefefeeeedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMKLKLKLKL}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqropopopopmnmnmnmnklklklklghghghgheefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMKKKKKKLK}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqropopopopmnmnmnmnklklklklghghghghfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLK}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqropopopopmnmnmnmnklklklklghghghghfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLK}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqropopopopmnmnmnmnklklklklghghghghfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLK}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqropopopopmnmnmnmnklklklklghghghghfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKIJIJIJIHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787856565656343212120/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('&%$#$#$#$#"!"!"!"!         + + + +KKKKKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787856565656121111120/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!         + + + +KLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787856565656121212120/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!         + + + +KLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787856565656121212120/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!         + + + +KLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=<9:9:9:9:7878787856565656121212120/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!         + + + +KLKKKKKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:7878787856565656121211110/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!         + + + +KLKLKLKJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:7878787856565656112121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +IJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:7878787856565656212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +IJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:7878787856565656212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +IJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:7878787856565656212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +IJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?>;<;<;<;<9:9:9:9:7878787856565656212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +IJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656212111110/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +IJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656121212120/0/0/0/.-.-.-.-,+,+,+*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + IJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:7878787856565434121212120/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         IJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:7878787834343434121212120/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         IJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:7878787834343434121212120/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         IJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABA@=>=>=>=>;<;<;<;<9:9:9:9:7878787834343434121212120/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        IJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787834343434121111110/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     IJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787834343434212121210/0/0/0/.-.-.-,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + +IJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787834343434212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +IJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787834343434212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +IJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787834343434212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +IJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787834343434212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!      + + + +IJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787834343434211111120/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#         + + + +IJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787834343434121212120/0/0/.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#       + + + +IJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878783434343412121212.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#     + + + +IJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:787878763434343412121212.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#     + + + +IJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:565656563434343412121212.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#     + + + +IJIJIJIJGHGHGHGHEFEFEFEDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:565656563434343412121212.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#"!     + + + +IJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:565656563434343411111121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +IJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:56565656343434342121210/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!      + + + +IJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:56565656343434340/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +IJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9856565656343434340/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +IJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656343434340/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +IJIJIJIJGHGHGHGFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656343434340/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%$#"!"!"!"!         + + + +IJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656343434340/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +IJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656343434340/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +IJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656343434340/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +IJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;:7878787856565656343434340/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +IJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787856565656343434340/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +))**++,,99887711tssrrqqp@AABBCCD100//..-pqqrrsstqppoonnm01122334A@@??>>=`aabbccd ZYYXXWWVddeefghixxwwvvuu))**++,,HHGGFFEEYYZZ[[\\IIHHGGFF--..//0000//..--poonnmmlDEEFFGGH-,,++**)tuuvvwwxmllkkjji45566778=<<;;::9deeffggh + + VUUTTSSRjkkllmmnttssrrqq--..//00DDCCBBAA]]^^__`` EEDDCCBB~~}}11223344,,++**))lkkjihgfHIIJJKKL)((''&&%xyyzz{{| + + ihhggffe899::;;<98877665hiijjkkl RQQKKJJInooppqqrppoonnmm11223344@@??>>==aabbccdd ~~}}!!""##$$AA@@??>>||{{zzyy55667788((''&&%%eeddccbbLMMNNOOP%$$##""!|}}~~ eddccbba<==>>??@54433221lmmnnoopIHHGGFFErssttuuvllkkjjii55667788<<;;::99eeffgghh + + ||{{zzyy%%&&''((==<<;;::xxwwvvuu99::;;<<$$##""!!aa``__^^PQQRRSST! a``__^^]@AABBCCD100//..-pqqrrsstEDDCCBBAvwwxxyyz + + hhggffee99::;;<<88776655iijjkkllxxwwvvuu))**++,,99887711ttssrrqq==>>??@@ ]]\\[[ZZTUUVVWWX]\\[[ZZYDEEFFGGH-,,++**)tuuvvwwx + + A@@??>>=z{{||}}~ ddccbbaa==>>??@@44332211mmnnooppttssrrqq--..//0000//..--ppoonnmmAABBCCDDYYXXWWVVXYYZZ[[\YXXWWVVUHIIJJKKL)((''&&%xyyzz{{| =<<;;::9~``__^^]]AABBCCDD00//..--qqrrssttppoonnmm11223344,,++**))llkkjjiiEEFFGGHHUUTTSSRR\]]^^__` UTTSSRRQLMMNNOOP%$$##""!|}}~~98877110\\[[ZZYYEEFFGGHH,,++**))uuvvwwxxllkkjjii55667788((''&&%%hhggffeeIIJJKKLL QQPONMLK`aabbccd ~~} !!""##$QPPOONNMPQQRRSST! 0//..--,XXWWVVUUIIJJKKLL((''&&%%yyzz{{|| + + hhggffee99::;;<<$$##""!!ddccbbaaMMNNOOPP + + KJJIIHHGdeeffggh + + }||{{zzy$%%&&''(MLLKKJJITUUVVWWX !,++**))( TTSSRRQQMMNNOOPP$$##""!!}}~~ ddccbbaa==>>??@@ ``__^^]]QQRRSSTT + + GFFEEDDChiijjkkl yxxwwvvu())**++,IHHGGFFEXYYZZ[[\!""##$$%(''&&%%$~~}}!!""##$$PPOONNMMQQRRSSTT ``__^^]]AABBCCDD\\[[ZZYYUUVVWWXXCBBAA@@?lmmnnooputtssrrq,--..//0EDDCCBBA\]]^^__`%&&''(()$##""!! ||{{zzyy%%&&''((LLKKJJIIUUVVWWXX\\[[ZZYYEEFFGGHHXXWWVVUUYYZZ[[\\?>>==<<;pqqrrsstqppoonnm01122334A@@??>>=`aabbccd ~~})**++,,- xxwwvvuu))**++,,HHGGFFEEYYZZ[[\\XXWWVVUUIIJJKKLL TTSSRRQQ]]^^__``;::99887tuuvvwwxmllkkjji45566778=<<;;::9deeffggh + + }||{{zzy-..//001ttssrrqq--..//00DDCCBBAA]]^^__`` TTSSRRQQMMNNOOPP + + PPOONNMMaabbccdd !!""76543211xyyzz{{| + + ihhggffe899::;;<98877665hiijjkkl yxxwwvvu1778899:ppoonnmm11223344@@??>>==aabbccdd ~~}}!!""##$$PPOONNMMQQRRSSTTLLKKJJIIeeffgghh##$$%%&&00//..--|}}~~ eddccbba<==>>??@54433221lmmnnooputtssrrq:;;<<==> llkkjjii55667788<<;;::99eeffgghh + + ||{{zzyy%%&&''((LLKKJJIIUUVVWWXX ~~HHGGFFEEiijjkkll''(())**,,++**))a``__^^]@AABBCCD100//..-pqqrrsstqppoonnm>??@@AAB + + hhggffee99::;;<<88776655iijjkkllxxwwvvuu))**++,,HHGGFFEEYYZZ[[\\ + + DDCCBBAAmmnnoopp++,,--..((''&&%%]\\[[ZZYDEEFFGGH-,,++**)tuuvvwwxmllkkjjiBCCDDEEFddccbbaa==>>??@@44332211mmnnooppttssrrqq--..//00DDCCBBAA]]^^__``@@??>>==qqrrsstt//001177$$##""!!YXXWWVVUHIIJJKKL)((''&&%xyyzz{{| + + ihhggffeFGGHHIIJ``__^^]]AABBCCDD00//..--qqrrssttppoonnmm11223344@@??>>==aabbccdd~~}}|<<;;::99uuvvwwxx8899::;;  UTTSSRRQLMMNNOOP%$$##""!|}}~~ eddccbbaJKKQQRRS + + \\[[ZZYYEEFFGGHH,,++**))uuvvwwxxllkkjjii55667788<<;;::99eeffgghh|{{zzyyx88776655yyzz{{||<<==>>??~~} !!""##$QPPOONNMPQQRRSST! a``__^^]STTUUVVW XXWWVVUUIIJJKKLL((''&&%%yyzz{{|| + + hhggffee99::;;<<88776655iijjkkll !!""xwwvvuut44332211}}~~@@AABBCC}||{{zzy$%%&&''(MLLKKJJITUUVVWWX]\\[[ZZYWXXYYZZ[TTSSRRQQMMNNOOPP$$##""!!}}~~ ddccbbaa==>>??@@44332211mmnnoopp##$$%%&&tssrrqqp00//..--DDEEFFGGyxxwwvvu())**++,IHHGGFFEXYYZZ[[\YXXWWVVU[\\]]^^_PPOONNMMQQRRSSTT ``__^^]]AABBCCDD00//..--qqrrsstt''(())**poonnmml,,++**))HHIIJJKK +uttssrrq,--..//0EDDCCBBA\]]^^__` UTTSSRRQ_``aabbcLLKKJJIIUUVVWWXX\\[[ZZYYEEFFGGHH,,++**))uuvvwwxx++,,--..lkkjihgf((''&&%%QQRRSSTT + qppoonnm01122334A@@??>>=`aabbccd ~~} !!""##$QPPOONNMcddeekkl !!""HHGGFFEEYYZZ[[\\XXWWVVUUIIJJKKLL((''&&%%yyzz{{||//001177eeddccbb$$##""!!~~}}||UUVVWWXXmllkkjji45566778=<<;;::9deeffggh + + }||{{zzy$%%&&''(MLLKKJJIlmmnnoop##$$%%&&DDCCBBAA]]^^__`` TTSSRRQQMMNNOOPP$$##""!!}}~~8899::;;aa``__^^ {{zzyyxxYYZZ[[\\ + + ihhggffe899::;;<98877665hiijjkkl yxxwwvvu())**++,IHHGGFFEpqqrrsst''(())**@@??>>==aabbccdd ~~}}!!""##$$PPOONNMMQQRRSSTT <<==>>??]]\\[[ZZwwvvuutt]]^^__`` eddccbba<==>>??@54433221lmmnnooputtssrrq,--..//0EDDCCBBAtuuvvwwx++,,--..<<;;::99eeffgghh + + ||{{zzyy%%&&''((LLKKJJIIUUVVWWXX@@AABBCCYYXXWWVVssrrqqppaabbccdda``__^^]@AABBCCD100//..-pqqrrsstqppoonnm01122334A@@??>>=xyyzz{{|//00112388776655iijjkkllxxwwvvuu))**++,,HHGGFFEEYYZZ[[\\DDEEFFGGUUTTSSRRoonnmmlleekkllmm]\\[[ZZYDEEFFGGH-,,++**)tuuvvwwxmllkkjji45566778=<<;;::9|}}~~4567788944332211mmnnooppttssrrqq--..//00DDCCBBAA]]^^__``~~}}||HHIIJJKKQQPONMLK kkeeddccnnooppqqYXXWWVVUHIIJJKKL)((''&&%xyyzz{{| + + ihhggffe899::;;<988776659::;;<<=00//..--qqrrssttppoonnmm11223344@@??>>==aabbccdd {{zzyyxxQQRRSSTTKJJIIHHG + + bbaa``__rrssttuu UTTSSRRQLMMNNOOP%$$##""!|}}~~ eddccbba<==>>??@54433221=>>??@@A,,++**))uuvvwwxxllkkjjii55667788<<;;::99eeffgghh + + wwvvuuttUUVVWWXXGFFEEDDC + + ^^]]\\[[vvwwxxyy !!""##$QPPOONNMPQQRRSST! a``__^^]@AABBCCD100//..-~~}}||{ABBCCDDE((''&&%%yyzz{{|| + + hhggffee99::;;<<88776655iijjkkllssrrqqppYYZZ[[\\CBBAA@@? ZZYYXXWWzz{{||}}$%%&&''(MLLKKJJITUUVVWWX]\\[[ZZYDEEFFGGH-,,++**){zzyyxxwEFFGGHHI$$##""!!}}~~ ddccbbaa==>>??@@44332211mmnnooppoonnmmll]]^^__``?>>==<<;VVUUTTSS~~())**++,IHHGGFFEXYYZZ[[\YXXWWVVUHIIJJKKL)((''&&%wvvuuttsIJJKKLMN ``__^^]]AABBCCDD00//..--qqrrssttkkeeddccaabbccdd;::99887RRQQKKJJ,--..//0EDDCCBBA\]]^^__` UTTSSRRQLMMNNOOP%$$##""!srrqqppoOPQQRRSS\\[[ZZYYEEFFGGHH,,++**))uuvvwwxxbbaa``__eekkllmm76543211IIHHGGFF01122334A@@??>>=`aabbccd ~~} !!""##$QPPOONNMPQQRRSST! onnmmllkTTUUVVWWXXWWVVUUIIJJKKLL((''&&%%yyzz{{|| + + ^^]]\\[[nnooppqq00//..-- EEDDCCBB~~}}|45566778=<<;;::9deeffggh + + }||{{zzy$%%&&''(MLLKKJJITUUVVWWXkeeddccbXXYYZZ[[ TTSSRRQQMMNNOOPP$$##""!!}}~~ ZZYYXXWWrrssttuu,,++**))!!""##$$AA@@??>>|{{zzyyx899::;;<98877665hiijjkkl yxxwwvvu())**++,IHHGGFFEXYYZZ[[\baa``__^\\]]^^__ ~~}}!!""##$$PPOONNMMQQRRSSTT VVUUTTSSvvwwxxyy((''&&%%%%&&''((==<<;;::xwwvvuut<==>>??@54433221lmmnnooputtssrrq,--..//0EDDCCBBA\]]^^__`^]]\\[[Z``aabbcc + + ||{{zzyy%%&&''((LLKKJJIIUUVVWWXXRRQQKKJJzz{{||}}$$##""!! \[[ZZYYXEFFGGHHI,++**))(uvvwwxxy lkkjjiihCDDEEFFGccbbaa``>>??@@AA33221100nnooppqqssrrqqpp..//0011CCBBAA@@^^__``aaBAA@@??>fgghhiij + + {zzyyxxw&''(())*KJJIIHHGVWWXXYYZ54433221XWWVVUUTIJJKKLLM(''&&%%$yzz{{||} + + hggffeedGHHIIJJK __^^]]\\BBCCDDEE//..--,,rrssttuuoonnmmll22334455??>>==<==<<;;:jkkllmmnwvvuutts*++,,--.GFFEEDDCZ[[\\]]^100//..- !TSSRRQQPMNNOOPPQ$##""!! }~~ dccbbaa`KQQRRSST + + [[ZZYYXXFFGGHHII++**))((vvwwxxyy kkjjiihh66778899;;::9988ffgghhii:9988776nooppqqrsrrqqppo.//00112CBBAA@@?^__``aab !!""#-,,++**)~~}}|!""##$$%POONNMMLQRRSSTTU `__^^]]\TUUVVWWX WWVVUUTTJJKKLLMM''&&%%$$zz{{||}} + + ggffeedd::;;<<==77665544jjkkllmm !!""##54321100rssttuuvonnmmllk23344556?>>==<<;bccddeef#$$%%&&')((''&&% +|{{zzyyx%&&''(()LKKJJIIHUVVWWXXY\[[ZZYYXXYYZZ[[\SSRRQQPPNNOOPPQQ##""!! ~~ccbbaa``>>??@@AA33221100nnooppqq$$%%&&''//..--,,vwwxxyyz +kjjiihhg6778899:;::99887fgghhiij'(())**+%$$##""! + xwwvvuut)**++,,-HGGFFEEDYZZ[[\\]XWWVVUUT\]]^^__`OONNMMLLRRSSTTUU__^^]]\\BBCCDDEE//..--,,rrssttuu(())**++++**))((z{{||}}~ + gffeeddc:;;<<==>76655443jkkllmmn+,,--../! tssrrqqp-..//001DCCBBAA@]^^__``a !TSSRRQQP`aabbccdKKJJIIHHVVWWXXYY[[ZZYYXXFFGGHHII++**))((vvwwxxyy,,--..//''&&%%$$~cbbaa``_>??@@AAB3221100/nooppqqr/0011778poonnmml12233445@??>>==>??@ + + hggffeed9::;;<<=87766554ijjkkllmxwwvvuut)**++,,-HGGFFEEDqrrssttu(())**++??>>==<>??@@WVVUUTTSJKKLLMMN'&&%%$$#z{{||}}~@AABBCCD dccbbaa`=>>??@@A43322110mnnooppqtssrrqqp-..//001DCCBBAA@uvvwwxxy,,--..//;;::9988ffgghhii + + {{zzyyxx&&''(())KKJJIIHHVVWWXXYYAABBCCDD !!"SRRQQPPONOOPPQQR#""!! ~DEEFFGGH + + `__^^]]\ABBCCDDE0//..--,qrrssttupoonnmml12233445@??>>==//..--,,rrssttuuoonnmmll22334455??>>==<>??@@A43322110~>??@@AAB++**))((vvwwxxyy kkjjiihh66778899;;::9988ffgghhii + + vvuuttssVVWWXXYYsrrqqppo.//00112CBBAA@@?^__``aab{zzyyxxwYZZ[[\\]!""##$$%POONNMMLQRRSSTTU `__^^]]\ABBCCDDE0//..--,~}}||{{zBCCDDEEF''&&%%$$zz{{||}} + + ggffeedd::;;<<==77665544jjkkllmmrrqqppooZZ[[\\]]onnmmllk23344556?>>==<<;bccddeef wvvuutts]^^__``a%&&''(()LKKJJIIHUVVWWXXY\[[ZZYYXEFFGGHHI,++**))(zyyxxwwvFGGHHIIJ##""!! ~~ccbbaa``>>??@@AA33221100nnooppqqnnmmllkk^^__``aa +kjjiihhg6778899:;::99887fgghhiij + + srrqqppoabbccdde )**++,,-HGGFFEEDYZZ[[\\]XWWVVUUTIJJKKLLM(''&&%%$vuuttssrJKKLMNOP__^^]]\\BBCCDDEE//..--,,rrssttuueeddccbbbbccddee + gffeeddc:;;<<==>76655443jkkllmmnonnmmllkekkllmmn !!""##$-..//001DCCBBAA@]^^__``a !TSSRRQQPMNNOOPPQ$##""!! rqqppoonQQRRSSTT[[ZZYYXXFFGGHHII++**))((vvwwxxyy aa``__^^kkllmmnncbbaa``_>??@@AAB3221100/nooppqqrkeeddccbnooppqqr$%%&&''(12233445@??>>==>??@@A43322110mnnooppqtssrrqqp-..//001DCCBBAA@]^^__``a]\\[[ZZYaabbccdd + + {{zzyyxx&&''(())KKJJIIHHVVWWXXYYQQKKJJII{{||}}~~ !!"SRRQQPPONOOPPQQR#""!! ~VUUTTSSR}||{{zzy45566778ABBCCDDE0//..--,qrrssttupoonnmml12233445@??>>==>??@IJJKKLLM(''&&%%$yzz{{||} + + hggffeed9::;;<<=87766554ijjkkllmQKKJJIIHoppqqrrsoonnmmll22334455??>>==<>==*++,,--.GFFEEDDCZ[[\\]]^EDDCCBBAqppoonnm@AABBCCDMNNOOPPQ$##""!! }~~ dccbbaa`=>>??@@A43322110mnnooppqHGGFFEEDsttuuvvw kkjjiihh66778899;;::9988ffgghhii + + {{zzyyxx&&''(())<<;;::99~~}}||{.//00112CBBAA@@?^__``aab !!"A@@??>>=mllkkjjiDEEFFGGHQRRSSTTU `__^^]]\ABBCCDDE0//..--,qrrssttu DCCBBAA@wxxyyzz{ + + ggffeedd::;;<<==77665544jjkkllmmwwvvuutt**++,,--88771100{zzyyxxw23344556?>>==<<;bccddeef ~~}}||{"##$$%%&=<<;;::9ihhggffeHIIJJKKLUVVWWXXY\[[ZZYYXEFFGGHHI,++**))(uvvwwxxy + + @??>>==<{||}}~~ccbbaa``>>??@@AA33221100nnooppqqssrrqqpp..//0011//..--,,wvvuutts6778899:;::99887fgghhiij + + {zzyyxxw&''(())*98877110eddccbbaLMMNNOOPYZZ[[\\]XWWVVUUTIJJKKLLM(''&&%%$yzz{{||} <;;::998__^^]]\\BBCCDDEE//..--,,rrssttuuoonnmmll22334455++**))((srrqqppo:;;<<==>76655443jkkllmmnwvvuutts*++,,--.0//..--,a``__^^]PQQRRSST]^^__``a !TSSRRQQPMNNOOPPQ$##""!! }~~8771100/[[ZZYYXXFFGGHHII++**))((vvwwxxyy kkjjiihh66778899''&&%%$$onnmmllk>??@@AAB3221100/nooppqqrsrrqqppo.//00112,++**))(]\\[[ZZYTUUVVWWXabbccdde ~~}}|!""##$$%POONNMMLQRRSSTTU /..--,,+WWVVUUTTJJKKLLMM''&&%%$$zz{{||}} + + ggffeedd::;;<<==##""!! kjihgfeeBCCDDEEF/..--,,+rssttuuvonnmmllk23344556(''&&%%$YXXWWVVUXYYZZ[[\effgghhi + + |{{zzyyx%&&''(()LKKJJIIHUVVWWXXY !!"+**))((' !!SSRRQQPPNNOOPPQQ##""!! ~~ccbbaa``>>??@@AAddccbbaaFGGHHIIJ+**))(('vwwxxyyz +kjjiihhg6778899:$##""!! UTTSSRRQ\]]^^__`ijjkkllmxwwvvuut)**++,,-HGGFFEEDYZZ[[\\]"##$$%%&'&&%%$$#~~}}||""##$$%%OONNMMLLRRSSTTUU__^^]]\\BBCCDDEE``__^^]]JKKLLMMN'&&%%$$#z{{||}}~ + gffeeddc:;;<<==> QPPOONNM`aabbccdmnnooppqtssrrqqp-..//001DCCBBAA@]^^__``a&''(())*#""!! {{zzyyxx&&''(())KKJJIIHHVVWWXXYY[[ZZYYXXFFGGHHII\\[[ZZYYNOOPPQQR#""!! ~cbbaa``_>??@@AABMLLKKJJIdeeffgghqrrssttupoonnmml12233445@??>>==>==<>=pqqrrsst}~~ dccbbaa`=>>??@@A43322110mnnooppqtssrrqqp;<<==>>? +kkjjiihh66778899;;::9988ffgghhii + + {{zzyyxx&&''(())KKJJIIHHVVWWXXYY + +JIIHHGGF^__``aab !!"SRRQQPPONOOPPQQR + =<<;;::9tuuvvwwx`__^^]]\ABBCCDDE0//..--,qrrssttupoonnmml?@@AABBC + ggffeedd::;;<<==77665544jjkkllmmwwvvuutt**++,,--GGFFEEDDZZ[[\\]] FEEDDCCBbccddeef ~~}}||{"##$$%%&ONNMMLLKRSSTTUUV98877665xyyzz{{||}}fpvbHAZ|dtZHAbJtArdnXv`bHAbnvpے`JXbtlfpvrXQJ`AJltbے`JtArfHfbdQZ|H~fr˂ptArdnXv`JltvpfXQr˂nXv`p˂rbdQZ|`JXQ|ZdQf~HZp˂fHQr˂pJtArdnXv`bHAbdQZ|JXQrZdQbtpvndrtA`vXnZHAb|ZdQbf~HbdQZ|H~fpZHAbf~HXQJ`ےdrtArZAbbtlfpvrXQJ`f`vXZHAb|ZdQf~HZp˂dtAp`JXlJtArXQJ`Jltvpfے`JXQtlJfpvdrtA`vXnے`JfpvbHAZJltے`JJtArdnXv`bHAnvpے`JXbtlfpvrXQJ`JltQr˂prd|ےHAZbdQZ|H~fr˂ptArdnXv`JltvpfXQr˂nXv`p˂rbdQZ|XQr˂|ZdQf~HZp˂fH~Qr˂pJtArdnXv`bHAbnvpZHAbZdQbtp˂rdrtA`vXnZHAb|ZdQbfHfbdQZ|H~fpZHAXQf~HXQJ`ےdrtApZHAbbtlfpvrXQJ`f`vXZHAb|ZdQf~HZp˂`vXے`JXlJtAXQJ`ےJltvpfے`JXQtlJpvndrtA`vXnr˂pfpvbHAZdQZ|ے`JJtArdnXv`Jltnvpے`JXbtlfpvrXQJ`nvpQr˂prdZQbbHAZbdQZ|H~fr˂ptArdrXQJ`JltvpfZHAbnXv`p˂rdrtAJXQr˂|ZdQf~HbdQZ|fH~Qr˂pJtArdnXv`bHAfH~ˑZHAXQtlJp˂rdrtA`vXnZHAb|ZdQbےHAZbdQZ|H~fے`JXQf~HXQJ`ےltbpZAb`btlfpvdrtf`vXZHAb|ZdQf~HZp˂f`vXHr˂pfpvXQJ`ےJltvpfے`JXQtlJp˂rdrtA`vXnr˂pfpvbHAZdQZ|`JXQrJtArdnXv`AJltnvpے`JXbtlfpvrXQJ`ۅ~f`ZHAbnXv`bHAZbdQZ|H~fr˂ptArdXQJ`ےJltvpfZHAbnXv`p˂rvXn˂pZH|ZdQfHbdQZ|fH~Qr˂pJtArdnXv`JltvXn`JXQf~Hp˂rdrtA`vXnZHAb|ZdQbbHAZbdQZ|H~f˂pZf~HXQJ`ےvpfHAbے`btlfpvdrtf`vXZHAb|ZdQf~HbdQZ|vpfHr˂pfpvXQJ`ےJltvpfے`JXQtlJp˂rdrtA`vXnHAbےfpvbHAZ~f`JXQrJtArdnrXQJ`AJltnvpے`JXbtlfpvdrt~f`ZHAbnXv`bHAZbdQZ|H~fr˂pfpvXQJ`ےJltvpf`JXQrnXv`p˂rvXH~˂pZH|ZdQےHAbdQZ|fH~Qr˂pJtArdnXv`AJltvXn˂pZHf~Hp˂rdrtA`vXnZHAbnXv`bHAZbdQZ|H~f˂p`f~HXQJ`ےf`vAbJXQbtlZp˂drtf`vXZHAb|ZdQfHbdQZ|f`Abے`fpvXQJ`ےJltvpfے`JXQf~Hp˂rdrtA`vXnJXQrbfpvbHAZXnvr˂pJtArdrXQJ`AJltnvpے`JXbtlfpvdrtvXnہJXQrnXv`bHAZbdQZ|H~fr˂pfpvXQJ`ےJltvpftl|rdtnXv`p˂rpfH~ZHAb|ZdQbHAbdQZ|fH~Qr˂pJtArdnrXQJ`AJltvpfH˂p`f~Hp˂rdrtA`vXnZHAےnXv`bHAZbdQZ|H~fZdQbtlJfpf~HXQJ`ےf`vے`JXQbtlZp˂drtf`vXZHAb|ZdQےHAbdQZ|~f`JXQrbtfpvXQJ`ےJltvpf`JXQrf~Hp˂rdrtA`vXnlJtAvnvfpvbHAZXnr˂pJfpvrXQJ`AJltnvpے`JXbtlZp˂drtvXnۉlJAnXv`bHAZbdQZ|H~fbtlfpvXQJ`ےJltvpfrd|f~HnXv`p˂rf`vXZHAbnXv`bHAbdQZ|fH~Qr˂pJtArdrXQJ`AJltvp`vX|ZdQf~Hp˂rdrtA`vXnJtAdnXv`bHAZbdQZ|H~fZdQtArfpvf~HXQJ`ےnvpJQrˍf~HZp˂drtf`vXZHAb|ZdQbHAbdQZ|nvpbtlfpvXQJ`ےJltvpf|ZdQbf~Hp˂rdrtA`vXnd|ZnXv`fpvbHAZfH~pZHAfpvrXQJ`AJltnvpے`JXbtlZp˂drtfH~JtArdnXv`bHAZbdQZ|H~ftlJfpvXQJ`ےJltvpfdQbtf~HnXv`p˂rf`vXbے`nXv`bHAbdQZ|fH~Qr˂pJfpvrXQJ`AJltf`vX|ZdQbf~Hp˂rdrtA`vXntArdnXv`bHAZbdQZ|H~flJtArfpvf~HXQJ`ےnvpJXQrˍf~HZp˂drtf`vXZHAbnXv`bHAbdQZ|nvpJtArfpvXQJ`ےJltvpf|ZdQbf~Hp˂rdrtA`vXnd|ZnXvf~fpvJlt`vXnpZHAbfpvrXQJ`AJltnvpے`JXf~HZp˂drtfHXd|ZnXv`bHAZbdQZ|ے`JXQtlJfpvXQJ`ےJltvpfdQbtdHfpvnXv`drtAJvpfJAdnXv`bHAbdQZ|fH~Qr˂pfpvrXQJ`AJltnvpdQbtf~Hp˂rdrtAr˂ptArdnXv`bHAZbdQZ|H~f|ZdQnXvf~HltbH~f|ZdQf~HZp˂drtf`vXZHAۅnXv`bHAbdQZ|fH~lJtArfpvXQJ`ےJltZHAb|ZdQbf~Hp˂rdrtA`vXnbtl`f~fpvdQZ|`vXnbtlfpvrXQJ`AJltnvp`JXQf~HZp˂drtf`vXd|ZnXv`bHAZbdQZ|ے`JXQtlJfpvXQJ`ےJltvpfJtArdHfpvnXv`drtAJvpfJtArdnXv`bHAbdQZ|fH~rbtlfpvrXQJ`AJltnvpdQbtf~Hp˂rdtAJr˂ptArdnXv`bHAZbdQZ|ے`JXQ|ZdQnXvf~HltbHXn|ZdQf~HZp˂drtf`vXJtAdnXv`bHAbdQZ|fH~JArd|fpvXQJ`ےltbZHAb|ZdQbf~Hp˂rdrtAHAbےbtl`f~fpfpvdQtAJlvpfHbtlfpvrXQJ`AJltnvp|ZdQf~HZp˂drtvpfہZdQbtnXv`bHAZnvpے`JXQtlJfpvXQJ`ےJlt`JXQr|ZdQbvnXnXv`tbdQ~f`JtArdnXv`bHAbdQZ|fH~btlfpvrXQJ`AJlt`JXQHlJtf~Hp˂rfHfr˂ptArdnXv`bHAZbdQZ|˂pZtlJv`fp˂rZ|dvXn|ZdQf~HZp˂drtf`vXJtArdnXv`bHAbdQZ|Abے`Ard|fpvXQJ`ے`vXnZHAb|ZdQbf~Hp˂rdtAJHAbےtArd~HfpXQJ`ےrtAJlvpfHbtlfpvrXQJ`AJltnvp|ZdQf~HZp˂drtJXQrZdQbtnXv`bHAZvpfے`JXQtlJfpvXQJ`ےltb`JXQr|ZdQbvnXbHAZtbdQ~vJtArdnXv`bHAbdQZ|fے`JXbtlfpvrXQJ`AJlt˂pZHlJArf~Hp˂rH~fr˂ptArdnXv`bHAZnvpے`tlJv`fp˂rZ|lpfے`|ZdQf~HZp˂drtQr˂pJtArdnXv`bHAbdQZ|Abے`|ZdQfpvXQJ`ے`vXnZHAb|ZdQbf~Hp˂rfHfJXQrtAdQbt~fvXQJ`ےtbdQZJXQrbtlfpvrXQJ`AJltZHAb|ZdQf~HZp˂drtJXQrbtlnXv`Jltvpfے`JXQtlJfpvXQJ`ے`vXn˂pZHAlJtAnXv`bHAZ|drZHAbJtArdnXv`bHAbdQZ|ے`JXbtlfpvrXQJ`AJltے`JtArdf~HbdQZ|H~fr˂ptArdnXv`bHAZvpfbے`rd|f~Hp˂rtAJl璒`JXQ|ZdQf~HZp˂dtAQr˂pJtArdnXv`bHAbdQZ|JXQr|ZdQfpvdrtA`vXnZHAb|ZdQbf~Hp˂rH~fJXQrZdQbtfpvXQJ`ےtbdQZr˂pbtlfpvrXQJ`JltZHAb|ZdQf~HZp˂drtpZHAbtlnXv`Jltvpfے`JXQtlJfpvXQJ`ے`vXn˂p`JlJtAnXv`f~HQJ`ےvXnZHAbہZdQbtf~H˂rXfHf`r˂p|ZdnrXQltbvpfH`JXQrlJtAvnrdrtAJvXnHAbےZdQbt`ےbrtAJl~f`˂pZHvnXJ`ےtbdvpfH󙐂ˁ`Zf۝`vfvnXJltvpfH`JXQlJtfpvQJ`ےvXnZHAbQbtlJ`AZpdQZ|~f`˂pZrd|XQJ`ےltbvpfH`JXQrlJtAHAZp˂tbdQvXnAے`v`fbHAZpQZ|d~f`QXAHrXnvˍv`fbdQZ|~f`r˂pArd|nXv`˙bHAZpvpfH`JXQ|ZdQ˂rXdrtAJvXnHAbےZdQbtHAZpdQZ|~f`˂pZrd|bHAZ|drvpfHJXQrbt~HfprXQrtAJlvXnېˁ`ZQpfH~~HfpۂdrtAvXnZHAbہZdQbtf~H˂rX~f`r˂pbtlQJ`ےltbvpfH`JXQrlJtA˂rXQdrtAJvXnHAbےZdQbtZp˂AJtb~f`lJtvnXJ`ےtbdvpfHXb㉀ۑf۝`vvnXJltvpfH`JXQlJtfpvQJ`ےvXnZHAbJtArdbHAZpdQZ|~f`˂pZrd|J`ےltbvpfH`JXQrlJtArXQJ`dQZ|vXnAd|v`fbHAZpQZ|d~f`pJAHrXnvˍv`ffpbdQZ|~f`r˂pArd|nXv`JltvpfH`JXQ|ZdQ˂rQJdrtAJvXnHAbےZdQbtbHAZpdQZ|~f`˂pZrd|ےbHAdrtAJvpfHZdQbt~HfprXQrtAJlvXnېˁ`ZQpfH~ㅝvndrtAvXnZHAbہZdQbtf~HbdQZ|~f`r˂pbtlbHAltbvpfH`JXQrlJf˂rXQdrtAJvXnHAbےZdQbtZp˂ltb~f`lJtAvnXJ`ےtbdvpfHXb㉀f۝`vrXQJ`JltvpfH`JXQlJtfpvdrtAvXnZHAbJtAdQbtZp˂dQZ|~f`˂pZpvnJ`ےltbvpfH`JXQrlJtArXQHAZdQZ|vXnrd|v`fbHAZpQZ|d~f`ˁ`ZQXbXnvˍHAZpbdQZ|~f`r˂pArd|nXv`JltvpfH`JXQlJtrXQJ`drtAJvXnHAbےXv`fbHAZpdQZ|~f`˂pZrd|p˂rdrtAJvpfے`ZdQbt~HfprXQrtAJlvXn㉀ۑpJpfH~ㅑ˂rXdrtAvXnZHAbہZdQbtfHfpbdQZ|~f`r˂pArd|ےbHAltbvpfH`JXQr~Hf˂rXQdrtAJvXnHAbےZdQbtXQJ`ےbdQZ|JXQrlJtAvnXJ`ےtbdvpfHAHr󙐂f۝`vQJ`ےJltvpfH`JXQlJtvndrtAvXnZHAbہZdQbtZp˂dQZ|~f`˂pZpvnJ`ےltbvpfH`JXQrlJfbHAZdrt˂pZHrd|v`fbHAZpQZ|d~f`ˁ`ZQXbXnvˍbHAZpbdQZ|~f`r˂pArd|rXQJ`JltvpfH`JXQlJtrXQJdrtAJvXnHAے`Xv`fbHAZpdQZ|~f`˂pZpvp˂rAJltAbے`ZdQbt~HfprXQrtAJlvXn㉀ۑpp|dr˂rXdrtAvXnZHAbہZdQbtHAZpbdQZ|~f`r˂pArdtbHAZpltbvpfHJXQrb~Hf˂rXQdrtAJvXnHAbے~HfpXQJ`pbdQZ|JXQrlJtAvnXJ`ےtbdvpfZH`ZQXbQtJlQJ`ےJltvpfH`JXQlJt˂rXdrtAvXnZHAbےlJfprXQdQZ|~f`tlJpvnJ`ےltbvpfH`JXQrvnX˂rXQAJl˂pZHrd|v`fbHAZpQZ|dAbے`ۑpJAtbAdZbHAZpbdQZ|~f`r˂pArd|QJ`ےJltvpfH`JXQvJ`ےdrtAJvXntAd|Xv`fbHAZpdQZ|~f`˂pZv`fJ`ےtbnAbے`ZdQbt~HfprXQrtAJlJXQrHr󙐂ˁ|dr˂rXdrtAvXnZHAbہZdQbtbHAZpbdQZ|~f`r˂p~HfpbHAZpltbvpfHZdQbt~Hf˂rXQdrtAJvXnHAے`~HfpbHAZpvpfHJXQrlJtAvnXJ`ےtbd˂pZH`ZQXbQtJlQJ`ےJltvpfH`JXQlJ˂rXdrtAvXnZHAbvnXrXQdQZ|~f`lJtApvnJ`ےltbvpfHJXQrbvnX˂rXQf`˂pZHrd|v`fbHAZpQZ|dAbے`ۑpJAtbAdZbHAZpbdQZ|~f`r˂pfpvQJ`ےJltvpfH`JXQv`fJ`bAZdrtAJvXnrd|Xv`fbHAZpdQZ|~f`tlJHfpvJ`ےvXnAbے`ZdQbt~HfprXQtAJlJXQrHQXb㉀|dr˂rXdrtAvXnZHAbnXv`˙bHAZpbdQZ|~f`r˂p~Hfpp˂rltbvpfےZdQbt~Hf˂rXQdrtAJvXntAd|nXvrXQJvpfHJXQrlJtAvnXJ`ےtbnے`ۑpJAHrQtJlQJ`ےJltvpfH`JXQf~H˂rXdrtAvXnZHAbvnXHXQJ`ےdQZ|`JXQrlJtApvnJ`ےltbvpfHZdQbt`f~`ےb~f`˂pZHrd|v`fbHAZp˅vpfHJXQr󙐂ˁ`ZtbAdZbHAZpbdQZ|~f`r˂pfpvQJ`ےJltvpfH`JXQfpvbHAZdrtAJ˂pZrd|Xv`fbHAZpdQZ|~f`lJtAHfpvHAZp˂vXnAbے`ZdQbt~HfprXQf`pZHAQXb㉀|dr˂rXdrtAvXnZHAے`nXv`˙bHAZpbdQZ|~f`r˂pnXv`p˂rltbHAbےZdQbt~Hf˂rXQdrtAJvXnrd|nXvrXQJvpfHJXQrlJtAvnXJ`ےvXnbے`ۑpJAHQtJlQJ`ےJltvpfHJXQrf~H˂rXdrtAvXnZHAbۍf~HXQJ`ےdQZ|`JXQrlJtApvnJ`ےltbvpfےZdQbt`pv`ےb~f`˂pZHrd|v`fbHAZpvpfHJXQrːf۝`vtbAdZbHAZpbdQZ|~f`btlfpvQJ`ےJltvpfH`JXQfpvbAZdtAJl˂pZrd|Xv`fbHAZpdQZ|`JXQrlJtAnXv`HAXQJ`vXnAbے`ZdQbt~HfprXQ~f`p`JXXnvˍ|dr˂rXdrtAvXnJtAd|nXv`˙bHAZpbdQZ|~f`r˂pnXv`rXQJ`tbnHAbےZdQbt~Hf˂rXQdrtAJ˂pZrd|f~HےJlvpfHJXQrlJtAvnXJ`ےJlvXnQr˂ppfH~QtJlQJ`ےJltvpfHZdQbtf~H˂rXdrtAvXnZHAے`pvےbHvpf`JXQrlJtApvnJ`ےltbHAbےZdQbtfpvtbQZd~f`˂pZHrd|v`ftbdvpfHZHAbf۝`vtbAdZbHAZpbdQZ|~f`lJtfpvQJ`ےJltvpfHJXQrnXv`AZp˂Hf`˂pZrd|Xv`fbHAZpdQZ|`JXQrlJtAnXv`rtAJlvXnAbے`ZdQbt~HfpQZ|d~f`ے`JXXnvˍ|dr˂rXdrtAvXnArd|nXv`˙bHAZpbdQZ|~f`btl|f~HrXQJ`vXnHAbےZdQbt~Hf˂rXQdtAJl˂pZrd|fntbdvpfHJXQrlJtAvnXrtAJlvXnQr˂ppfH~QtJlQJ`ےJltvpfہZdQbtf~H˂rXdrtAvXnZdQbtfpvےbHvpfH`JXQrlJtApvnJ`ےtbnHAbےZdQbtXv`fQZ|d~f`˂pZHrd|v`ftbdvpfHZHAXQf۝`vtbAdZbHAZpbdQZ|`JXQlJtfpvQJ`ےJltvpfHlJtnXv`AZrXQ~f`˂pZrd|Xv`fbHAZpvpf`JXQrlJtA~HfrtAJlvXnAbے`ZdQbtHfpQZ|d~f`r˂pXnvˍ|dr˂rXdrtAr˂pArd|nXv`˙bHAZpbdQZ|~f`Ard|fnXJ`ےJvXnHAbےZdQbt~Hf˂rXQHf`˂pZrd|pvntbdvpfHJXQrlJtAvnrXrtAJlvXnZHAbpfH~QtJlQJ`ےJltZHAbہZdQbtf~H˂rXdrtAvXnZdQtAv`fltbvpfH`JXQrlJtApvnJ`ےvXnHAbےZdQbtXv`fQZrtA~f`˂pZHrd|QJ`ےtbdvpfH`JXQf۝`vtbAdZbHAZpbdQZ|`JXQlJtfpvQJ`ےJltvpfrd|~HfpdQZ|~f`˂pZrd|Xv`fbHAZpvpfH`JXQrlJtA~HXJltvXnAbے`ZdQbtHAZpQZ|d~f`r˂pXnvˍ|dr˂rXdtAJlr˂pArd|nXv`˙bHAZpbdQZ|`JXQZdQbtvnXdrtAJvXnHAbےZdQbt~Hf˂rXQ~f`˂pZrd|v`fbdQZ|vpfHJXQrlJtArXQrtAJlvXnZHAbpfH~QtJlQJ`ےtbZHAbہZdQbtf~H˂rXdrtAr˂plJtAv`fltbvpfH`JXQrlJtApvnJ`ےJvXnHAbےZdQbt~HfpdrtA~f`˂pZHrd|J`ےtbdvpfH˂pZHf۝`vtbAdZbHAZpnvp`JXQlJtfpvQJ`ےJltZHAbrd|~HXdQZ|~f`˂pZrd|Xv`fltbvpfH`JXQrlJtAvnXJltvXnAbے`ZdQbtbHAZpQZ|d~f`Abے`Xnvˍ|dr˂rXfHf`r˂pArd|nXv`˙bHAZpbdQZ|`JXQZdQbtdv`fdrtAJvXnHAbےZdQbt~HfdQZ|~f`˂pZrd|v`pvbdQZ|vpfHJXQrlJfprXQrtAJlvXnہJXQrpfH~QtJlQJ`ےvXnZHAbہZdQbtf~H˂rXdtAJlr˂p|Zd~HfpltbvpfH`JXQrlJtApvndrtAJvXnHAbےZdQbtnrXQrAJl~f`˂pZHvnXJ`ےtbdvpfH˂p`Zf۝`vtbAdZbHAZpvpfH`JXQlJtfpvQJ`ےtbZHAbQbtlvnXdQZ|~f`˂pZrd|Xv`fltbvpfH`JXQrlJtAJ`p˂tbdQvXnAbے`v`fbHAZpQZ|d~f`QXb㉀Xnvˍ|dr˂rX~f`r˂pArd|nXv`˙bHAZpnvp`JXQJtArdv`pvdrtAJvXnHAbےZdQbtHfpdQZ|~f`˂pZrd|rXQJZ|dvpfHJXQr~HfprXQrtAJlvXnۑpJAHrpfH~QtJlt6666666666666667777777777777777777777777 \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv31_0.dat b/vendor/endroid/qr-code/assets/data/qrv31_0.dat new file mode 100644 index 000000000..0449f38ff --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv31_0.dat @@ -0,0 +1,281 @@ +}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopopopopopklklklklijijijijhghghghghghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSPOPOOOOOMNMNMNMNMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?>=>=>=>=>;<;<;<;<9:9:9:9:}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopopopopopklklklklijijijijhghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:~}~}~}~}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopopopopopklklklklijijijiihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSRQOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:78787878}~}~}~}~}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopoponmnmnmnklklklkliiiijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVURQRQRQRQOPOPOPOPMNMNMNMNMNMNMNMLKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:78787878}~}~}~}~}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklkljijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVURQRQRQRQOPOPOPOPMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=<;<;<;<;<9:9:9:9:78765656}~}~}~}~}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklkljijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVURQRQRQRQOPOPOPOPMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;<9:9:987856555556}~}~}~}~}|{|{|{|{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklkljijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQOPOOOOOOMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;<7878787856565656}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklkljijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOMNMNMNMNKLKLKLKLKLKLKLKJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;<7878787856565656}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklkljijijiiihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOMNMNMNMNKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;:7878787856565656}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklkliiijijijhghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOMNMNMNMNKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|{zyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijhghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOMNMNMNMNKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565555}~}~}~}~{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijhghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOMNMNMNMNKLKLKLKLIJIJIJIJIJIJIJIHGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787855656565}~}~}~}~{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijhghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOOOOOOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787865656565}~}~}~}~{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijhghghghgfefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQOPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787865656565}~}~}~}~{|{|{|{|yzyzyzyzyxwxwxwxwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijiiiihghghghgfefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQOPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787865656565}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklkliijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQOPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHGHGHGHGFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787865656565}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQOPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787865655555}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQOPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxwvuvuvuvuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQOOOOOOPOMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFEFEFEFEDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklkljijiiiiihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvststststqrqrqrqropopopopmnmnmnmnklklklklijijijijhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvutstststststststqrqrqrqropopopopmnmnmnmnklklklklijijijijhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856555555}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststststststqrqrqrqropopopopmnmnmnmnklklklklijijijijhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCBABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787865656565}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststststststqrqrqrqropopopopmnmnmnmnklklklklijijijijhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQOOOOOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787865656565}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststststststqrqrqrqropopopopmnmnmnmnklklklklijijijijhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQOPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787865656565}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststsrqrqrqrqrqrqrqropopopopmnmnmnmnklklklklijiiiiiihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQOPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787865656565}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrqrqrqrqropopopopmnmnmnmnklklkjijjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQOPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABA@?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787865656565}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrqrqrqrqropopopopmnmnmnmnijijiiiihghghghghghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQOPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787865555556}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrqrqrqrqropopopopmnmnmnmnijijijijhghghghghghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQOPOOOOOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:7878787856565656}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrqpopopopopopopopmnmnmnmlijijijijhghghghghghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQPOPOOPOPOPONMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:78787878565656565656565643434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!          + + + +5656565643434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('&%&%&%&%&%$#$#$#$#"!"!"!"!             + + + +5656565643434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!             + + + +5555556543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!             + + + +6565654343434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!           + + + +4343434343434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%$#$#$#$#$#"!"!"!"!         + + + +4343434343434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!         + + + +4343434343434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!         + + + +4343434343434321212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!         + + + + + +4343434321212121212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#"!"!"!"!"!         + + + + + + + +4343434321212121212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!       + + + + + + + +4343434321212121212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!     + + + + + + + +43434343212121212121210/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!     + + + + + + 43434343212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!      + + + +43434343212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +43434343212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +43434343212121210/0/0/0/0/0/0/.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +43434343212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +43434343212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +43434343212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +43434343212121210/0/0/0/.-.-.-.-.-.-.-,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +43434343212121210/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +43434343212121210/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +43434343212121210/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +43434343212121210/0/0/0/.-.-.-.-,+,+,+,+,+,+,+*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +43434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +43434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +43434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +43434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)('('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +43434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +43434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + + }}~~ + + xwwvvuut tuuvvwwx)((''&&%TUUVVWWXIHHGGFFE45566778ihhggffe + + ~~}}yyzz{{||$$##""!!YYZZ[[\\DDCCBBAA99::;;<>==<=>>??@@A`__^^]]\ !~~}}|yzz{{||}$##""!! qrrssttu + + tssrrqqp ~~}xyyzz{{|%$$##""!XYYZZ[[\EDDCCBBA899::;;>====>>??@@``__^^]] ~~}}yyzz{{|| + +  abbccdde<;;::998ABBCCDDE\[[ZZYYX!""##$$%|{{zzyyx}~~ uvvwwxxy + + poonmlkj !!""##$}||{{zzy|}}~~! \]]^^__`A@@??>>=<==>>??@a``__^^] ~~}~~}}||{xxwwvvuuaabbccdd<<;;::99AABBCCDD\\[[ZZYY!!""##$$||{{zzyy}}~~~~}}| + + effgghhi87766554EFFGGHHIXWWVVUUT%&&''(()xwwvvuut yzz{{||} +~~}} iihhggff$%%&&''(yxxwwvvu`aabbccd=<<;;::9@AABBCCD]\\[[ZZY !!""##$}||{{zzy{zzyyxxw !!""ttssrrqq + + eeffgghh88776655EEFFGGHHXXWWVVUU%%&&''((xxwwvvuu |{{zzyyx ijjkkllm43322110IJJKKLLMTSSRRQQP)**++,,-tssrrqqp + + }~~ + ||{{zzyy!!""eeddccbb())**++,uttssrrq + + deeffggh98877665DEEFFGGHYXXWWVVU$%%&&''(yxxwwvvu + + wvvuutts##$$%%&&ppoonnmm iijjkkll44332211IIJJKKLLTTSSRRQQ))**++,,ttssrrqq + + + + xwwvvuut mnnooppq0//..--,MNNOOPPQPOONNMML-..//001poonnmml xxwwvvuu##$$%%&&aa``__^^,--..//0qppoonnm hiijjkkl54433221HIIJJKKLUTTSSRRQ())**++,uttssrrq srrqqppo''(())**llkkjjii mmnnoopp00//..--MMNNOOPPPPOONNMM--..//00ppoonnmm tssrrqqp + + qrrssttu,++**))(QRRSSTTULKKJJIIH12233445lkkjjiih  ttssrrqq~~}}||''(())**]]\\[[ZZ01122334mllkkjji lmmnnoop100//..-LMMNNOOPQPPOONNM,--..//0qppoonnmoiihhggf++,,--..hhggffee + + qqrrsstt,,++**))QQRRSSTTLLKKJJII11223344llkkjjiipoonmlkjuvvwwxxy(''&&%%$UVVWWXXYHGGFFEED56677889hggffeed + +  + + ppoonnmm {{zzyyxx++,,--..YYXXWWVV45566778ihhggffe + + pqqrrsst-,,++**)PQQRRSSTMLLKKJJI01122334mllkkjjifeeddccb//001122ddccbbaauuvvwwxx((''&&%%UUVVWWXXHHGGFFEE55667788hhggffeeiihhggff !~~}}|yzz{{||}$##""!! YZZ[[\\]DCCBBAA@9::;;<<=dccbbaa`~ llkkjjii!!""##$$wwvvuutt//001122UUTSRQPO899::;;>==<=>>??@@A`__^^]]\ !~~}}|~}}||{{zhhggffee%%&&''((ssrrqqpp334455;;ONNMMLLK<==>>??@a``__^^] ~~}xyyzz{{|%$$##""!XYYZZ[[\EDDCCBBA899::;;>====>>??@@``__^^]] {{zzyyxx##$$%%&&aa``__^^%&&''(()xwwvvuut abbccdde<;;::998ABBCCDDE\[[ZZYYX!""##$$%|{{zzyyx zyyxxwwvddccbbaa))**++,,ooiihhgg<<==>>??KJJIIHHG@AABBCCD]\\[[ZZY !!""##$}||{{zzy|}}~~! \]]^^__`A@@??>>=<==>>??@a``__^^]%&&''(()ZYYXXWWV=>>??@@AXXWWVVUU%%&&''((xxwwvvuuaabbccdd<<;;::99AABBCCDD\\[[ZZYY!!""##$$wwvvuutt''(())**]]\\[[ZZ)**++,,-tssrrqqp + + effgghhi87766554EFFGGHHIXWWVVUUT%&&''(()xwwvvuut + + vuuttssr``__^^]]--..//00ffeeddcc@@AABBCCGFFEEDDCDEEFFGGHYXXWWVVU$%%&&''(yxxwwvvu`aabbccd=<<;;::9@AABBCCD]\\[[ZZY)**++,,-VUUOONNMABBCCDDETTSSRRQQ))**++,,ttssrrqq + + eeffgghh88776655EEFFGGHHXXWWVVUU%%&&''((ssrrqqpp++,,--..YYXXWWVV-..//001poonnmml ijjkkllm43322110IJJKKLLMTSSRRQQP)**++,,-tssrrqqp rqqppooi !!""##\\[[ZZYY11223344bbaa``__DDEEFFGGCBBAA@@?HIIJJKKLUTTSSRRQ())**++,uttssrrq + + deeffggh98877665DEEFFGGHYXXWWVVU-..//001MLLKKJJIEFFGGHHIPPOONNMM--..//00ppoonnmm iijjkkll44332211IIJJKKLLTTSSRRQQ))**++,,ooiihhgg//001122UUTSRQPO12233445lkkjjiih mnnooppq0//..--,MNNOOPPQPOONNMML-..//001poonnmmlihhggffe$$%%&&''XXWWVVUU55667788^^]]\\[[HHIIJJKK?>>==<<;LMMNNOOPQPPOONNM,--..//0qppoonnm hiijjkkl54433221HIIJJKKLUTTSSRRQ12233445IHHGGFFEIJJKKLLMLLKKJJII11223344llkkjjii mmnnoopp00//..--MMNNOOPPPPOONNMM--..//00ffeeddcc334455;;ONNMMLLK56677889hggffeed + + qrrssttu,++**))(QRRSSTTULKKJJIIH12233445lkkjjiiheddccbba(())**++TTSSRRQQ99::;;<EDDCCBBAMNNOOPQRHHGGFFEE55667788hhggffee + + qqrrsstt,,++**))QQRRSSTTLLKKJJII11223344bbaa``__<<==>>??KJJIIHHG9::;;<<=dccbbaa`uvvwwxxy(''&&%%$UVVWWXXYHGGFFEED56677889hggffeed!!"a``__^^],,--..//PPOONNMM==>>??@@VVUUOONNUUVVWWXX44332211TUUVVWWXIHHGGFFE45566778ihhggffe + + pqqrrsst-,,++**)PQQRRSSTMLLKKJJI>??@@AABA@@??>>=STUUVVWWDDCCBBAA99::;;<>??@@A`__^^]]\ !~~}}|yzz{{||}$##""!! YZZ[[\\]DCCBBAA@9::;;<<=dccbbaa`"##$$%%&]\\[[ZZY00112233LLKKJJIIAABBCCDDMMLLKKJJYYZZ[[\\00//..--XYYZZ[[\EDDCCBBA899::;;>====>>??@@``__^^]] ~~}}yyzz{{||$$##""!!YYZZ[[\\DDCCBBAA99::;;<>==<=>>??@@A`__^^]]\&''(())*YXXWWVVU44556789HHGGFFEEEEFFGGHHIIHHGGFF]]^^__``,,++**))\]]^^__`A@@??>>=<==>>??@a``__^^] ~~}xyyzz{{|%$$##""!XYYZZ[[\EDDCCBBAFGGHHIIJ43322110\\]]^^__<<;;::99AABBCCDD\\[[ZZYY!!""##$$||{{zzyy}}~~ ]]^^__``@@??>>====>>??@@VVUUOONNHHIIJJKK?>>==<<;EFFGGHHIXWWVVUUT%&&''(()xwwvvuut abbccdde<;;::998ABBCCDDE\[[ZZYYX*++,,--.UOONNMML:;;<<==>DDCCBBAAIIJJKKLLEEDDCCBBaabbccdd((''&&%%`aabbccd=<<;;::9@AABBCCD]\\[[ZZY !!""##$}||{{zzy|}}~~! \]]^^__`A@@??>>=JKKLLMMN0//..--,``aabbcc88776655EEFFGGHHXXWWVVUU%%&&''((xxwwvvuuaabbccdd<<;;::99AABBCCDDMMLLKKJJLLMMNNOO;:987655IJJKKLLMTSSRRQQP)**++,,-tssrrqqp + + effgghhi87766554EFFGGHHIXWWVVUUT.//00112LKKJJIIH>??@@AAB@@??>>==MMNNOOPPAA@@??>>eeffgghh$$##""!!deeffggh98877665DEEFFGGHYXXWWVVU$%%&&''(yxxwwvvu`aabbccd=<<;;::9NOOUUVVW,++**))(ddeeffgg44332211IIJJKKLLTTSSRRQQ))**++,,ttssrrqq + + eeffgghh88776655EEFFGGHHIIHHGGFFUUVVWWXX44332211MNNOOPPQPOONNMML-..//001poonnmml ijjkkllm43322110IJJKKLLMTSSRRQQP2334455;HGGFFEEDBCCDDEEF<<;;::99QQRRSSTT==<<;;55iiooppqq hiijjkkl54433221HIIJJKKLUTTSSRRQ())**++,uttssrrq + + deeffggh98877665WXXYYZZ[(''&&%%$hhiijklm00//..--MMNNOOPPPPOONNMM--..//00ppoonnmm iijjkkll44332211IIJJKKLLEEDDCCBBYYZZ[[\\00//..--QRRSSTTULKKJJIIH12233445lkkjjiih mnnooppq0//..--,MNNOOPPQPOONNMML;<<==>>?DCCBBAA@FGGHHIIJ88776655UUVVWWXX44332211rrssttuulmmnnoop100//..-LMMNNOOPQPPOONNM,--..//0qppoonnm hiijjkkl54433221[\\]]^^_$##""!!nooppqqr,,++**))QQRRSSTTLLKKJJII11223344llkkjjii mmnnoopp00//..--MMNNOOPPAA@@??>>]]^^__``,,++**))UVVWWXXYHGGFFEED56677889hggffeed + + qrrssttu,++**))(QRRSSTTULKKJJIIH?@@AABBC@??>>==>==<=>>??@@A`__^^]]\ !~~}}|yzz{{||}$##""!! YZZ[[\\]DCCBBAA@GHHIIJJK3221100/UUVVWWXX,,++**))aabbccdd((''&&%%~~ +xyyzz{{|%$$##""!XYYZZ[[\EDDCCBBA899::;;>====>>??@@``__^^]] ~~}}yyzz{{||$$##""!!YYZZ[[\\00//..--iiooppqq abbccdde<;;::998ABBCCDDE\[[ZZYYX!""##$$%|{{zzyyx}~~ ]^^__``a@??>>==>=<==>>??@a``__^^] ~~}xyyzz{{|%$$##""!pqqrrsst ~aabbccdd<<;;::99AABBCCDD\\[[ZZYY!!""##$$||{{zzyy}}~~ ]]^^__``,,++**))rrssttuueffgghhi87766554EFFGGHHIXWWVVUUT%&&''(()xwwvvuut abbccdde<;;::998OUUVVWWX+**))((']]^^__``$$##""!!iijjkkll`aabbccd=<<;;::9@AABBCCD]\\[[ZZY !!""##$}||{{zzy|}}~~! tuuvvwwx + + eeffgghh88776655EEFFGGHHXXWWVVUU%%&&''((xxwwvvuuaabbccdd((''&&%%vvwwxxyyijjkkllm43322110IJJKKLLMTSSRRQQP)**++,,-tssrrqqp + + effgghhi87766554XYYZZ[[\'&&%%$$#aabbccdd mmnnoopp + + deeffggh98877665DEEFFGGHYXXWWVVU$%%&&''(yxxwwvvuxyyzz{{|iijjkkll44332211IIJJKKLLTTSSRRQQ))**++,,ttssrrqq + + eeffgghh$$##""!!zz{{||}}mnnooppq0//..--,MNNOOPPQPOONNMML-..//001poonnmml ijjkkllm43322110\]]^^__`#""!!eeffgghhqqrrsstt hiijjkkl54433221HIIJJKKLUTTSSRRQ())**++,uttssrrq + + |}}~~ mmnnoopp00//..--MMNNOOPPPPOONNMM--..//00ppoonnmm iijjkkll~~ +qrrssttu,++**))(QRRSSTTULKKJJIIH12233445lkkjjiih mnnooppq0//..--,`aabbccdiijklmnouuvvwwxx ~~}}| lmmnnoop100//..-LMMNNOOPQPPOONNM,--..//0qppoonnm  + + + + qqrrsstt,,++**))QQRRSSTTLLKKJJII11223344llkkjjii mmnnoopp + uvvwwxxy(''&&%%$UVVWWXXYHGGFFEED56677889hggffeed + + qrrssttu,++**))(deeffgghoppqqrrsyyzz{{|| + + |{{zzyyx + + pqqrrsst-,,++**)PQQRRSSTMLLKKJJI01122334mllkkjji uuvvwwxx((''&&%%UUVVWWXXHHGGFFEE55667788hhggffee + + qqrrssttyzz{{||}$##""!! YZZ[[\\]DCCBBAA@9::;;<<=dccbbaa`uvvwwxxy(''&&%%$hiiooppqsttuuvvwwxxyyzz{##""!! ZZ[[\\]]CCBBAA@@::;;<<==ccbbaa``vvwwxxyy''&&%%$$VVWWXXYY33221100ffgghhii##""!! ^__``aab?>>==<<;>??@@AAB_^^]]\\[ !!"~~}}||{z{{||}}~#""!! Z[[\\]]^,++**))(z{{||}}~ + + {||}}~~^^__``aa??>>==<<>>??@@AA__^^]]\\ !!~~}}||zz{{||}}##""!! ZZ[[\\]]//..--,,ooppqqrrbccddeef;::99887BCCDDEEF[ZZYYXXW"##$$%%&{zzyyxxw~^__``aab(''&&%%$~ + + bbccddee;;::9988BBCCDDEE[[ZZYYXX""##$$%%{{zzyyxx~~^^__``aa++**))((ssttuuvvfgghhiij76655443FGGHHIIJWVVUUTTS&''(())*wvvuutts +bccddeef$##""!!~~} ffgghhii77665544FFGGHHIIWWVVUUTT&&''(())wwvvuutt bbccddee''&&%%$$wwxxyyzzjkkllmmn3221100/JKKLLMMNSRRQQPPO*++,,--.srrqqppo + fgghhiij}||{{zzyjjkkllmm33221100JJKKLLMMSSRRQQPP**++,,--ssrrqqpp + + ffgghhii##""!!{{||}}~~ nooppqqr/..--,,+NOOPPQQRONNMMLLK.//00112onnmmllkjkkllmmnyxxwwvvu nnooppqq//..--,,NNOOPPQQOONNMMLL..//0011oonnmmlljjkkllmm + + rssttuuv+**))(('RSSTTUUVKJJIIHHG23344556kjjiihhg nooppqqruttssrrq + + rrssttuu++**))((RRSSTTUUKKJJIIHH22334455kkjjiihh nnooppqq vwwxxyyz'&&%%$$#VWWXXYYZGFFEEDDC6778899:gffeeddc + + rssttuuv qppoonnm vvwwxxyy''&&%%$$VVWWXXYYGGFFEEDD66778899ggffeedd + + rrssttuuz{{||}}~#""!! Z[[\\]]^CBBAA@@?:;;<<==>cbbaa``_vwwxxyyz + + +mllkkjji !!""##$~~}}||zz{{||}}##""!! ZZ[[\\]]CCBBAA@@::;;<<==ccbbaa``vvwwxxyy ~^__``aab?>>==<<;>??@@AAB_^^]]\\[ !!"~~}}||{z{{||}}~ + ihhggffe$%%&&''({{zzyyxx~~^^__``aa??>>==<<>>??@@AA__^^]]\\ !!~~}}||zz{{||}} + +  +bccddeef;::99887BCCDDEEF[ZZYYXXW"##$$%%&{zzyyxxw~eddccbba())**++,wwvvuutt bbccddee;;::9988BBCCDDEE[[ZZYYXX""##$$%%{{zzyyxx~~~~}}||{ + fgghhiij76655443FGGHHIIJWVVUUTTS&''(())*wvvuutts +a``__^^],--..//0ssrrqqpp + + ffgghhii77665544FFGGHHIIWWVVUUTT&&''(())wwvvuutt  + +{zzyyxxwjkkllmmn3221100/JKKLLMMNSRRQQPPO*++,,--.srrqqppo + ]\\[[ZZY01122334oonnmmlljjkkllmm33221100JJKKLLMMSSRRQQPP**++,,--ssrrqqpp + + wvvuutts nooppqqr/..--,,+NOOPPQQRONNMMLLK.//00112onnmmllk!!""#YXXWWVVU45566778kkjjiihh nnooppqq//..--,,NNOOPPQQOONNMMLL..//0011oonnmmllsrrqqppo + + rssttuuv+**))(('RSSTTUUVKJJIIHHG23344556kjjiihhg#$$%%&&'UTTSSRRQ899::;;>??@ccbbaa``vvwwxxyy''&&%%$$VVWWXXYYGGFFEEDD66778899ggffeeddhhggffee !!"~~}}||{z{{||}}~#""!! Z[[\\]]^CBBAA@@?:;;<<==>cbbaa``_{zzyyxxw+,,--../MLLKKJJI@AABBCCD__^^]]\\ !!~~}}||zz{{||}}##""!! ZZ[[\\]]CCBBAA@@::;;<<==ccbbaa``~~}}||{{!!""##ddccbbaa"##$$%%&{zzyyxxw~^__``aab?>>==<<;>??@@AAB_^^]]\\[ !!"wvvuutts/0011223IHHGGFFEDEEFFGGH[[ZZYYXX""##$$%%{{zzyyxx~~^^__``aa??>>==<<>>??@@AA__^^]]\\ !!zzyyxxww$$%%&&''``__^^]]&''(())*wvvuutts +bccddeef;::99887BCCDDEEF[ZZYYXXW"##$$%%&srrqqppo34455;;>??@A@@??>>=LMMNNOOPSSRRQQPP**++,,--ssrrqqpp + + ffgghhii77665544FFGGHHIIWWVVUUTT&&''(())rrqqppoo,,--..//XXWWVVUU.//00112onnmmllkjkkllmmn3221100/JKKLLMMNSRRQQPPO*++,,--.feeddccb@AABBCCD=<<;;::9PQQRRSSTOONNMMLL..//0011oonnmmlljjkkllmm33221100JJKKLLMMSSRRQQPP**++,,--iihhggff00112233TSRQPOON23344556kjjiihhg nooppqqr/..--,,+NOOPPQQRONNMMLLK.//00112baa``__^DEEFFGGH98877665TUUVVWWXKKJJIIHH22334455kkjjiihh nnooppqq//..--,,NNOOPPQQOONNMMLL..//0011eeddccbb4455;;<>??@@JIIHHGGF:;;<<==>cbbaa``_vwwxxyyz'&&%%$$#VWWXXYYZGFFEEDDC6778899:ZYYXXWWVLMMNNOOU100//..-\]]^^__`CCBBAA@@::;;<<==ccbbaa``vvwwxxyy''&&%%$$VVWWXXYYGGFFEEDD66778899]]\\[[ZZAABBCCDDFEEDDCCB>??@@AAB_^^]]\\[ !!"~~}}||{z{{||}}~#""!! Z[[\\]]^CBBAA@@?:;;<<==>VUUOONNMUVVWWXXY-,,++**)`aabbccd??>>==<<>>??@@AA__^^]]\\ !!~~}}||zz{{||}}##""!! ZZ[[\\]]CCBBAA@@::;;<<==YYXXWWVVEEFFGGHHBAA@@??>BCCDDEEF[ZZYYXXW"##$$%%&{zzyyxxw~^__``aab?>>==<<;>??@@AABMLLKKJJIYZZ[[\\])((''&&%deeffggh;;::9988BBCCDDEE[[ZZYYXX""##$$%%{{zzyyxx~~^^__``aa??>>==<<>>??@@AAUUOONNMMIIJJKKLL>==<<;;:FGGHHIIJWVVUUTTS&''(())*wvvuutts +bccddeef;::99887BCCDDEEFIHHGGFFE]^^__``a%$$##""!hiijjkkl77665544FFGGHHIIWWVVUUTT&&''(())wwvvuutt bbccddee;;::9988BBCCDDEELLKKJJIIMMNNOOUU98765544JKKLLMMNSRRQQPPO*++,,--.srrqqppo + fgghhiij76655443FGGHHIIJEDDCCBBAabbccdde! lmmnnoop33221100JJKKLLMMSSRRQQPP**++,,--ssrrqqpp + + ffgghhii77665544FFGGHHIIHHGGFFEEVVWWXXYY33221100NOOPPQQRONNMMLLK.//00112onnmmllkjkkllmmn3221100/JKKLLMMNA@@??>>=effgghhipqqrrsst//..--,,NNOOPPQQOONNMMLL..//0011oonnmmlljjkkllmm33221100JJKKLLMMDDCCBBAAZZ[[\\]]//..--,,RSSTTUUVKJJIIHHG23344556kjjiihhg nooppqqr/..--,,+NOOPPQQR=<<;;554iooppqqrtuuvvwwx++**))((RRSSTTUUKKJJIIHH22334455kkjjiihh nnooppqq//..--,,NNOOPPQQ@@??>>==^^__``aa++**))((VWWXXYYZGFFEEDDC6778899:gffeeddc + + rssttuuv+**))(('RSSTTUUV43322110rssttuuvxyyzz{{|''&&%%$$VVWWXXYYGGFFEEDD66778899ggffeedd + + rrssttuu++**))((RRSSTTUU<<;;5544bbccddee''&&%%$$Z[[\\]]^CBBAA@@?:;;<<==>cbbaa``_vwwxxyyz'&&%%$$#VWWXXYYZ0//..--,vwwxxyyz |}}~~ZHAbے`JXQtArd˂rXQbdQZ|nvpQr˂pZHAۂ|ZdQfpvrXQJ`ۉbdQZ|fH~ˑZHAb|ZdQfpvnXv`drtAdfH~ZHAb`JXQrtlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`fHfp˂rltbbJQbtlArd|f~H˂rXJltvpfHr˂pArd|f~HvnQJ`ےbdQZ|~f`ے`JXQr˂p|ZdQbJ`ےdrtAfH~ˑZHAb`JXQbtlnXv`bHAdrtf`vXے`JXbtlnXv`fHQZ|df`vXے`JXQbtltArdf~Hp˂rJltvpfr˂ptArdf~HpvnXQJ`ےdQZ|lr˂pJtAd|ZdQbtfpvQJ`ےbdQZ|~f`ZHAbہZdQbtfpvrXQJ`ۙbHAZpdrtAvXnr˂p|ZdQbtlJbHAZpJlbQZf`vXے`JXrbtlJtArdf~HZp˂AJltnvpQr˂pJtArdf~HfpvrtAJlnvpfr˂pJtAd|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvrXQJ`bHAZtbnZHAbہZdQbtlJtnXv`˙bHAZpdrtAvXn`JXQlJtnXv`˒HAZp˂rXJltvpfHJXQrZHAbtlJtArd˂rXQ|drnvpQr˂pJtAd|ZdQfpvrXQJ`ۉbdQZ|fH~ˑZHAb|ZdQfpvnrXQJ`tbd~f`vZHAb|ZdQbtlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`ےHAZp˂rvp``JXQlJtArdf~H˂rXJltvpfHr˂pArd|f~H˂rXQJ`ےbdQZ|~f`p`JXے`JXQtArdf~HJ`p˂tAJlfH~ˑZHAb|ZdQbtlnXv`bHAdrtf`vXے`JXbtlnXv`p˂QZ|dXnvے`JXQtlJtArdf~Hp˂rJltvpfr˂ptArdf~Hp˂rXQJ`ےvXnr˂pArd|f~HfpvQJ`ےbdQZ|~f`ZHAbہZdQbtfpvQJ`ےbHAZdrtAvXHQrbtr˂p|ZdQbXv`frXQJtbdQZf`vXے`JXbtlJtArdf~HZp˂AJltnvpQr˂pJtArdf~HrXQJ`ۙrtAJlpfH~r˂ptArdf~HfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbHAZvpfHZHAbہZdQbtfpvnXv`˙bHAZpdrtAvXn`JXQlJtnXv`˙bHAZpdrtAJlt~fZHlJA|ZHAbtlJ~Hf`ےb|drnvpQr˂pJtArdf~HfpvrXQJ`ۉbdQZ|fH~ˑZHAb|ZdQfpvbHA|df`vZHAb|ZdQbfpvnXv`bHAZdrtA`vXnے`JXQtlJnXv`bHAZdrtA~f``JQrlJtnXv`fHfp˂rXJltvpfHr˂pArd|f~H˂rXJltbdQZ|AbˁZdQbtے`JXQtArdpvnHAZp˂tAJlfH~ˑZHAb|ZdQfpvnXv`bHAdrtf`vXے`JXbtlnXv`Zp˂rtAJlXnvے`JXQtlJnXv`fHfp˂rJltvpfr˂ptArdf~Hp˂rdQZ|vXnpZHAbArd|f~HvnQJ`ےbdQZ|~f`ZHAbہZdQbtfpvQJ`ےbdQZ|dtAJlpZHAlJtr˂p|ZdQbXv`frXQJtbQZdf`vXے`JXbtlnXv`fHZp˂AJltnvpQr˂pJtArdf~HrXQJ`ptbdQpfH~r˂ptArdf~HpvnXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےdrtAJvp`vے`JZdQbtfpvrXQJ`ۙbHAZpdrtAvXn`JXQlJtnXv`˙bHAZpdrtAtbbے`Ard|ZHAbtlJ~Hf`ےrtAJlnvpQr˂pJtArdf~HfpvrXQJ`ۉbdQZ|fH~ˑZHAb|ZdQfpv˂rXZ|dfvXnZHAb|ZdQbfpvrXQJ`bHAZdrtA`vXnے`JXQtlJnXv`bHAZltbXnvXQr˂lJtnXv`˒HAZp˂rXJltvpfHr˂pArd|f~H˂rXJltnvp`JXQrˁZdQbtے`JXQtArdp`frXQJ`tbdfH~ˑZHAb|ZdQfpvnrXQJ`bHAdrtf`vXے`JXbtlnXv`QJ`ےrtAJlvpfHے`JXQtlJnXv`ےHAZp˂rJltvpfr˂ptArdf~Hp˂rdQZ|pfH~pZHAbArd|f~H˂rXQJ`ےbdQZ|~f`ZHAbہZdQbtfpvQJ`ےbdQZ|vXnpZHAlJArr˂p|ZdQb~HfpےbHAQZ|df`vXے`JXbtlnXv`ےHAZp˂AJltnvpQr˂pJtArdf~HbHAZptdrt~f`r˂ptArdf~Hp˂rXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےdrtAJf`vے`JZdQbtfpvQJ`ےbHAZdrtAvXn`JXQlJtnXv`˙bHAZpdrtAvpfHbے`p|ZdQZHAbtlJvnXZp˂rtAJlnvpQr˂pJtArdf~HZp˂rXQJ`ۉbdQZ|fH~ˑZHAb|ZdQfpv˂rXAJltvXnZHAb|ZdQbfpvXQJ`ےbHAZdrtA`vXnے`JXQtlJnXv`bHAZl|dXnvXQrZHlJtnXv`˙bHAZpdrtAJltvpfHr˂pArd|f~H˂rXJlt~f`ZHAbbtlے`JXQtArdv`frXQJ`tbdfH~ˑZHAb|ZdQfpvrXQJ`ےbHAdrtf`vXے`JXbtlnXv`QJ`ےbdQZ|vpfHے`JXQtlJnXv`bHAZdrtAJltvpfr˂ptArdf~Hp˂rrtAJlpfHXAbے`Ard|f~H˂rXJltbdQZ|~f`ZHAbہZdQbtfpvQJ`ےbdQZ|vXnے`JXJtArdr˂p|ZdQb~HfpےbHAQZrtAf`vXے`JXbtlnXv`bHAZdrtAJltnvpQr˂pJtArdf~HrXQdrt~fvr˂ptArdf~Hp˂rJltbdQZ|H~fZHAb|ZdQbfpvXQJ`ےtbdQnvpJXQrZdQbtfpvQJ`ےbdQZ|dtAJlvXn`JXQlJtnXv`˙bHAZpdrtAvp`Qr˂p|ZdQZHAbtlJv~XQJ`ےJltnvpQr˂pJtArdf~HZp˂AJltbdQZ|fH~ˑZHAb|ZdQfpvJ`ےAJltnvpZHAb|ZdQbfpvXQJ`ےbdQZ|dtAJ`vXnے`JXQtlJnXv`bHAZZ|dfH~˂pZHlJtnXv`˙bHAZpdrtAtbvpfHr˂pArd|f~H˂rXJltvXnۑZHAbbtlے`JXQtArdHfpvbHAZbdQZ|fH~ˑZHAb|ZdQfpvrXQJ`ۉbdQZ|dtAf`vXے`JXbtlnXv`bHAZpˉbdQtAfH~ے`JXQtlJnXv`bHAZdrtAltbvpfr˂ptArdf~Hp˂rrtAJlf`vXAbے`Ard|f~H˂rXJltnvp~f`ZHAbہZdQbtfpvQJ`ےbdQZ|vpfHے`JXJtArr˂p|ZdQbnXvp˂rdrtAf`vXے`JXbtlnXv`bHAdrtJltnvpQr˂pJtArdf~HrXQJltf`vXr˂ptArdf~Hp˂rJltnvpH~fZHAb|ZdQbfpvXQJ`ےtdrnvpJXQrZdQbtfpvQJ`ےbdQZ|fHf`vXn`JXQlJtnXv`˙bHAZpdrtA~f`QHAbZdQbtZHAbtlJ`f~XQJ`ےJltnvpQr˂pJtArdf~HZp˂AJltbnvpfH~ˑZHAb|ZdQfpvJ`ےbdQZ|nvpZHAb|ZdQbfpvXQJ`ےbdQZ|fHf`vXnے`JXQtlJnXv`bHAZtAJlfH~ZAblJtnXv`˙bHAZpdrtAvXnvpfHr˂pArd|f~H˂rXJltvXnے`JXQlJtAے`JXQtArdHfpvbHAZbdQZ|fH~ˑZHAb|ZdQfpvrXQJ`ۉbdQZ|fHf`vXے`JXbtlnXv`bHAXQJ`drtAfH~ے`JXQtlJnXv`bHAZdrtA`vXnvpfr˂ptArdf~Hp˂rtbdQZvpfے`JXQArd|f~H˂rXJltvpfH~fZHAbہZdQbtfpvQJ`ےbdQZ|vpfHXr˂prd|r˂p|ZdQbnXHp`ےrAJlf`vXے`JXbtlnXv`bHAdrtf`vXnvpQr˂pJtArdf~HےbHJltf`vnr˂ptArdf~Hp˂rJltvpfH~fZHAb|ZdQbfpvXQJ`ے|drH~fr˂pZdQbtfpvQJ`ےbdQZ|~f`ZHAbے`JXQlJtnXv`˙bHAZpdrtAnvpZHAbZdQbtZHAbtlJfpvbHAZptbdQnvpQr˂pJtArdf~HZp˂AJltnvpfH~ˑZHAb|ZdQfpvAZp˂bdQZ|lvpfHZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAbے`JXQtlJnXv`bHAZtAJl`vXnZHAblJtnXv`˙bHAZpdrtAvXn`JXQr˂pArd|f~H˂rXJltfH~`JXQlJtAے`JXQtArdnXv`˂rXQZ|dfH~ˑZHAb|ZdQfpvrXQJ`ۉbdQZ|fH~fZHAbے`JXbtlnXv`rXQJ`tbd~f`ے`JXQtlJnXv`bHAZdrtA`vXnے`JXQr˂ptArdf~Hp˂rtbdQtAvpfے`JXQArd|f~H˂rXJltvpfHr˂pZHAے`ZdQbtfpvQJ`ےbdQZ|f`vXrے`rdZQbr˂p|ZdQbf~HJ`ےrtAJlf`vXے`JXbtlnXv`bHAdrtf`vXے`JXQr˂pJtArdf~HےbHQZ|dvXnr˂ptArdf~Hp˂rJltvpfr˂pZHAے|ZdQbfpvXQJ`ےJltH~fr˂pZdQbtfpvQJ`ےbdQZ|~f`ZHAbہJXQrlJtnXv`˙bHAZpdrtAnvpJXQrtlJZHAbtlJfpvbHAZptbdQnvpQr˂pJtArdf~HZp˂AJltnvpQr˂pZHAۂ|ZdQfpvAZp`ۙrtAJlvpfHZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAb`JXQrtlJnXv`bHAZbdQZ|`pfHZAb`lJtnXv`˙bHAZpdrtAvXn`JXQbtlArd|f~H˂rXJltfH~˂pZHtArdے`JXQtArdnXv`˂bZ|dnfH~ˑZHAb|ZdQfpvrXQJ`ۉbdQZ|fH~ˑZHAb`JXQbtlnXv`bHAtbd~f`ے`JXQtlJnXv`bHAZdrtA`vXnے`JXQbtltArdf~Hp˂rdrtA~f`JXQrArd|f~H˂rXJltvpfHr˂pJtAd|ZdQbtfpvQJ`ےbdQZ|vpAbے`|ZdQbr˂p|ZdQbpvnHAZdvff`vXے`JXbtlnXv`bHAdrtf`vXے`JXrbtlJtArdf~HZp˂QZ|lvXnvfr˂ptArdf~Hp˂rJltvpfr˂pJtAd|ZdQbfpvXQJ`ےJltvXnpZHAZdQbtfpvQJ`ےbdQZ|~f`ZHAbہZdQbtlJtnXv`˙bHAZpdrtAfH~ˁJXQrtlJZHAbtlJXv`frtAJf`vXnvpQr˂pJtArdf~HZp˂AJltnvpQr˂pJtAd|ZdQfpvrXQJ`ےtbnH~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbtlJnXv`bHAZbdQZ|vpfHbے`lJtnXv`˙bHAZpdrtAvXn`JXQlJtArdf~H˂rXJltf`vX˂p`tArdے`JXQtArd~HfbdQZ|nvpfH~ˑZHAb|ZdQfpvrXQJ`ۉbdQZ|fH~ˑZHAb|ZdQbtlnXv`bHAvpfZHAbے`JXQtlJnXv`bHAZdrtA`vXnے`JXQtlJtArdf~Hp˂rltb~f`JXQrArd|f~H˂rXJltvpfHr˂pArd|f~HfpvQJ`ےbdQZ|nvpJXQr|ZQblr˂p|ZdQbpvndrtAfH~fZHAbے`JXbtlnXv`bHAdrtf`vXے`JXbtlJtArdf~HZp˂f`vXے`JXQr˂ptArdf~Hp˂rJltvpfr˂ptArdf~HfpvXQJ`ےdQZ|vXH~pZA`ZdQbtfpvQJ`ےbdQZ|~f`ZHAbہZdQbtfpvnXv`˙bHAZpdrtAfH~˂pZHAJtArdZHAbtlJXv`pJltf`vXے`JXQr˂pJtArdf~HZp˂AJltnvpQr˂pJtArdf~HfpvbHAZnvpr˂pZHAے|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvnXv`bHAZdrtAJfZHAJXQrlJtnXv`˙bHAZpdrtAvXn`JXQlJtnXv`fHfp˂rXJltf`pfHbے`|ZdQbtlXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fHfp˂rXQltbvpfH`JXQrrd|Xv`frXQtbdvpfH˂pZHrd|~HfpvnrXJ`ےQZ|d~f`ZHAbۑpJAHrXnvˍJtArd~Hf˂rXQltbvpfH˂pZrd|~HfvnrJ`ےdQZ|~f`˂pZlJtAr~fpvJ`ےQZ|d~f`Abے`ZdQbtvnXQJ`ےbHAZp˙rtAJlvXnے`JXQ󙐂ˁ`p|dr|ZdpvnJ`ےdQZ|~f`HAbےZdQbtpvnXQJ`ےbHAZpdrtAJvXnHAbےd|ZnXv`bHAZp˙rtAJlvXnہJXQrlJtAv`fHAZp˂rXQtbdvpfHr˂p`pfH~QtJlQbJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fHAZp˂rXQltbvpfH`JXQrdQbt璍f~HrXQtbdvpfH˂pZHrd|~HfprXQJ`ےQZ|d~f`JXQrf۝`vtbAdZrdf~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQJ`ےdQZ|~f`˂p`lJtArfpvJ`ےQZ|d~f`Abے`ZdQbtvnXJ`ےbHAZdrtAJlvXnۉ˂pZHXnvˍ|dr~HfpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےbHAZdrtAJvXnJXQrd|ZnXv`bHAZp˙rtAJlvXnہJXQrlJtAv`fbHAZp˙rtAJltbdvpfHAbے`pfH~QtJlpvnXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZpdrtAJltbvpfH˂pZHAdQtArdffpۂrXQtbdvpfH˂pZHrd|~HfprXQtbdQZ|d~f`JXQrf۝`vtbAdZXv`fHfp˂rXQltbvpfH˂pZrd|~Hf˂rXQltbdQZ|~f`bے`f~vnrXJ`ےQZ|d~f`Abے`ZdQbtvnXJ`ےQZ|dtAJlvXnۉ˂p`ZXnvˍ|dr~HfvnrJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےdQZ|dtAJlvXnJXQrHfvnXQJ`ےbHAZp˙rtAJlvXnہJXQrlJtAv`fbHAZp˙rtAJltbnvpfHQXb㉀pfH~QtJlpvnXQJ`ےbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZpdrtAJtbnvpfH˂p`Jv`fHAZp˂rXQtbdvpfH˂pZHrd|~HfprXQtbdvpfH~f`ۑpJAHrf۝`vtbAdZXv`fHAZp˂rXQltbvpfH˂pZrd|~Hf˂rXQltbvpf~f`XQrbt~HfprXQJ`ےQZ|d~f`Abے`ZdQbtvnXJ`ےQZ|df`vXn󙐂ˁ`ZXnvˍ|dr~Hf˂rXQJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےdQZ|Hf`vXnl|ZvnXJ`ےbHAZdrtAJlvXnہJXQrlJtAv`fbHAZp˙rtAJlvXnvpfHQXb㉀pfH~QtJlpvnJ`ےbHAZdrtAJvXn`JXQrlJtAXv`fbHAZpdrtAJvXnvpfHdQbt璕v`fbHAZp˙rtAJltbdvpfH˂pZHrd|~HfprXQtbdvpfH~frۑp`ZQf۝`vtbAdZXv`fbHAZpdrtAJltbvpfH˂pZrd|~Hf˂rXQltbvpfH~fZlJtAr~HfprXQtbdQZ|d~f`Abے`ZdQbtvnXJ`ےQZ|d~f`˂pZHXb㉀ۑXnvˍ|dr~Hf˂rXQltbdQZ|~f`HAbےZdQbtpvnJ`ےdQZ|~f`HAbd|Zvnv`J`ےQZ|dtAJlvXnہJXQrlJtAv`fbHAZp˙rtAJlvXnAbے`pJAHrpfH~QtJlpvnJ`ےdQZ|dtAJlvXn`JXQrlJtAXv`fbHAZpdrtAJvXn˂pZHAdQbtf~HbHAZp˙rtAJltbnvpfH˂pZHrd|~HfprXQtbdvpfHJXQrˁ`ZQf۝`vtbAdZXv`fbHAZpdrtAJtbnvpfH˂pZrd|~Hf˂rXQltbvpfHbے`l|ZdQfpvrXQtbdvpfH~f`Abے`ZdQbtvnXJ`ےQZ|d~f`˂pZHXb㉀ۑXnvˍ|dr~Hf˂rXQltbvpf~f`HAbےZdQbtpvnJ`ےdQZ|~f`JXQrbtlnXv`J`ےQZ|df`vXnہJXQrlJtAv`fbHAZp˙rtAJlvXnAbے`pJAHQXbpfH~QtJlpvnJ`ےdQZ|Hf`vXn`JXQrlJtAXv`fbHAZpdrtAJvXn˂pZHAJtArdf~HbHAZp˙rtAJlvXnvpfH˂pZHrd|~HfprXQtbdvpfHpZHA㉀ۑpJf۝`vtbAdZXv`fbHAZpdrtAJvXnvpfH˂pZrd|~Hf˂rXQltbvpfHbے`|ZdQfpvrXQtbdvpfH~fZHAbے`ZdQbtvnXJ`ےQZ|d~f`bے`AHr󙐂Xnvˍ|dr~Hf˂rXQltbvpfH~fZHAbےZdQbtpvnJ`ےdQZ|~f`pZHAbbtlnvfJ`ےQZ|d~f`Abے`JXQrlJtAv`fbHAZp˙rtAJlvXnJXQrˁ`ZQXbpfH~QtJlpvnJ`ےdQZ|~f`HAbے`JXQrlJtAXv`fbHAZpdrtAJvXnے`JJtAdQb~HfpbHAZp˙rtAJlvXnہJXQr˂pZHrd|~HfprXQtbdvpfHpZHA㉀ۑpJf۝`vtbAdZXv`fbHAZpdrtAJvXn`JXQr˂pZrd|~Hf˂rXQltbvpfHXQr˂tlJvnXrXQtbdvpfH˂pZHAے`ZdQbtvnXJ`ےQZ|d~f`bے`AHr󙐉Xnvˍ|dr~Hf˂rXQltbvpfH˂pZHAے`ZdQbtpvnJ`ےdQZ|~f`pZHAbtArdv`fJ`ےQZ|d~f`Abے`JXQrbtlJtAv`fbHAZp˙rtAJlvXnJXQHAbۑpJApfH~QtJlpvnJ`ےdQZ|~f`HAbےJXQrblJtAXv`fbHAZpdrtAJvXnے`J|ZdQb~HfpbHAZp˙rtAJlvXnہJXQrlJtrd|~HfprXQtbdvpfHے`JXHr󙐂ˁf۝`vtbAdZXv`fbHAZpdrtAJvXn`JXQrtlJrd|~Hf˂rXQltbvpfHXQHAbtlJvnXvrXQtbdvpfH˂pZHAd|ZdQbtvnXJ`ےQZ|d~f`Qr˂p`ZQXbXnvˍ|dr~Hf˂rXQltbvpfH˂pZtAd|ZdQbtpvnJ`ےdQZ|~f`ے`JXQtArdtf~HfJ`ےQZ|d~f`Abے`ZdQbtlJtAv`fbHAZp˙rtAJlvXnۑZHAbۑpJApfH~QtJlpvnJ`ےdQZ|~f`HAbےZdQbtlJtAXv`fbHAZpdrtAJvXnr˂plJtApvnbHAZp˙rtAJlvXnہJXQrlJtArdf~HfprXQtbdvpfHے`JXHr󙐂ˁf۝`vtbAdZXv`fbHAZpdrtAJvXn`JXQrlJtArdf~Hf˂rXQltbvpfHZHAbrd|Xv`frXQtbdvpfH˂pZHrd|~HfpvnXJ`ےQZ|d~f`Qr`pJAHrXnvˍ|dr~Hf˂rXQltbvpfH˂pZrd|~HfpvnJ`ےdQZ|~f`ے`JXQZdQbt~HfJ`ےQZ|d~f`Abے`ZdQbtvnXv`fbHAZp˙rtAJlvXnے`JXQ󙐂ˁ`ZpfH~QtJlpvnJ`ےdQZ|~f`HAbےZdQbtpvnXv`fbHAZpdrtAJvXnrےlJtApvnbHAZp˙rtAJlvXnہJXQrlJtAv`fHfpۂrXQtbdvpfHr˂pQXb㉀f۝`vtbAdZ|JJKKKKKKKKKKKKKKKKKKKKKKKKKKKKK \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv31_1.dat b/vendor/endroid/qr-code/assets/data/qrv31_1.dat new file mode 100644 index 000000000..98ce5641a --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv31_1.dat @@ -0,0 +1,281 @@ +}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrqpopopopopopopopopopopopmnmnmnmnklklklklklklklklijijijiijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOOOOOOPOPOPOPMNMNMNMNMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878786565555556565656434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!    }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopopopopopmnmnmnmnklklklklklklklkliiiijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQOPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878785656565656565656434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!     }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopopopopopmnmnmnmnklklklklklklklkljijijijijijiiiiihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQOPOPOPOPOOOOOOPOMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878785656565655555565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopoponmnmnmnmnmnmnmnklklklklklklklkljijijijiijijijijhghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSRQRQRQRQRQOPOPOPOPPOPOPOPOMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABA@?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878785656565665656543434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklkljijijijiijijijijhghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQOPOPOPOPPOPOPOPOMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787656565656565643434343434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklkljijijijiijijijijhghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQOPOPOPOPPOPOPOPOMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878565555565656565643434343434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklkljijijiiiijijijijhghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQOPOOOOOOPOPOPOPOMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878565656565655555543434343434343434343432121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklkliiijijijijijijijhghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878565656566565656543434343434343432121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklijijijijijiiiiiihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOOOOOOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:987878787878565656566565656543434343434343432121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnklklklklklklklklijijijijjijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<9:9:9:9:78787878787878785656565665656565434343434343434321212121212121212121210/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvutstststststststststststqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnklklklklklklkjijijijijijhghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<;<;<;<;<9:9:9:9:78787878787878785656555565656565434343434343434321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        ~}~}~}~}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststststststqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnklklklklijijiiiiijijijijhghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<;<;<;<;<9:9:9:9:78787878787878785565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststststststqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnklklklklijijijijijijiiiihghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOOOOOOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:78787878787878786565656565555556434343434343434321212121212121210/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststsrqrqrqrqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmnklklklklijijijijiijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQOPOPOPOPOPOOOOOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878786565656556565656434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!      }~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnmnmnmnmlklklklklijijijijjijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878786565656556565656434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!    }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnklklklklklklklklijijijijjijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQPOPOOPOPOPOPMNMNMNMNMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878787878786565656556565656434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!             + + + + + + + + + +          + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + +          + + + + + + + +             + + + + + + + +             + + + + + + + +           + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + + + +         + + + + + + + + + + + +         + + + + + + + + + + + +LLKKJJII + + EEFFGGHHEEDDCCBBeeffgghheeddccbb ,--..//0lmmnnoopmllkkjji-,,++**)TUUVVWWXEDDCCBBA<==>>??@|}}~~]\\[[ZZY$%%&&''(deeffgghuttssrrq54433221 LMMNNOOPMLLKKJJI + + BCCDDEEF43322110``aabbccttssrrqq44332211 MMNNOOPPLLKKJJII + + 55667788uuvvwwxxddccbbaa$$##""!! ]]^^__``||{{zzyy<<;;::99EEFFGGHHTTSSRRQQ--..//00mmnnooppbbaa``__@@AABBCCCBBAA@@? EFFGGHHITSSRRQQP-..//001mnnooppqlkkjjiih,++**))(UVVWWXXYDCCBBAA@=>>??@@A}~~\[[ZZYYX%&&''(()effgghhitssrrqqp43322110`aabbccdeddccbba44556789{||}}~~[[ZZYYXX&&''(())ffgghhiissrrqqpp33221100NNOOPPQQKKJJIIHH + + 66778899vvwwxxyyccbbaa``##""!!  !!^^__``aa{{zzyyxx;;::9988 FFGGHHIIDDCCBBAAHHGGFFEE + + IIJJKKLLAA@@??>>!!""iiooppqqaa``__^^01122334pqqrrsstihhggffe)((''&&%XYYZZ[[\~~}A@@??>>=@AABBCCDYXXWWVVU())**++,hiijjkklqppoonnm100//..-PQQRRSSTIHHGGFFE FGGHHIIJ~~}}||{0//..--, !!""ddeeffggppoonnmm00//..--QQRRSSTTHHGGFFEE99::;;<>==<<; + + IJJKKLLMPOONNMML 12233445qrrssttuhggffeed(''&&%%$YZZ[[\\]~~}}|@??>>==<ABBCCDDEXWWVVUUT)**++,,-ijjkkllmpoonnmml0//..--,deeffggha``__^^]:;;<<==>WWVVUUTT**++,,--jjkkllmmoonnmmll//..--,,RRSSTTUUGGFFEEDD::;;<<==zz{{||}}__^^]]\\""##$$%%bbccddeewwvvuutt77665544 + + JJKKLLMM@@??>>==DDCCBBAA MMNNOOPP==<<;;55##$$%%&&rrssttuu]]\\[[ZZ45566778tuuvvwwxeddccbba%$$##""! \]]^^__`}||{{zzy=<<;;::9DEEFFGGHUTTSSRRQ,--..//0lmmnnoopmllkkjji-,,++**)TUUVVWWXEDDCCBBAJKKLLMMN{zzyyxxw,++**))(##$$%%&&hhiijklmllkkjjii,,++**))UUVVWWXXDDCCBBAA==>>??@@}}~~\\[[ZZYY%%&&''((eeffgghhttssrrqq44332211 MMNNOOPPLLKKJJII + + 55667788uuvvwwxxZZYYXXWW + + HHIIJJKK~~}}|;:987655 MNNOOPPQLKKJJIIH + + 56677889uvvwwxxydccbbaa`$##""!!  !]^^__``a|{{zzyyx<;;::998 EFFGGHHITSSRRQQP-..//001mnnooppqlkkjjiih,++**))(!!"hiiooppq]\\[[ZZY +>??@@AABSSRRQQPP..//0011nnooppqqkkjjiihh++**))((VVWWXXYYCCBBAA@@>>??@@AA~~[[ZZYYXX&&''(())ffgghhiissrrqqpp33221100NNOOPPQQ<<;;5544~~}}@@??>>==QQRRSSTT44332211''(())**vvwwxxyyYYXXWWVV899::;;>=NOOUUVVWwvvuutts(''&&%%$''(())**nooppqqrhhggffee((''&&%%YYZZ[[\\~~}}@@??>>==AABBCCDDXXWWVVUU))**++,,iijjkkllppoonnmm00//..--QQRRSSTTHHGGFFEE99::;;<>==<<BBCCDDEEWWVVUUTT**++,,--jjkkllmmoonnmmll//..--,,RRSSTTUU33221100||{{zzyy<<;;::99UUVVWWXX~~}}||00//..--++,,--..zz{{||}}UUTSRQPO +<==>>??@|}}~~]\\[[ZZY$%%&&''(deeffgghuttssrrq54433221 LMMNNOOPMLLKKJJI + + 45566778tuuvvwwxeddccbba%$$##""! \]]^^__`}||{{zzy=<<;;::9 + + WXXYYZZ[srrqqppo$##""!!++,,--..rssttuuvddccbbaa$$##""!! ]]^^__``||{{zzyy<<;;::99EEFFGGHHTTSSRRQQ--..//00mmnnooppllkkjjii,,++**))UUVVWWXXDDCCBBAA==>>??@@}}~~MMLLKKJJ UUVVWWXXxwwvvuut00//..--UVVWWXXYDCCBBAA@=>>??@@A}~~\[[ZZYYX%&&''(()effgghhitssrrqqp43322110 MNNOOPPQLKKJJIIH + + 56677889uvvwwxxydccbbaa`$##""!! &''(())*uvvwwxxyUOONNMMLFGGHHIIJKKJJIIHH + + 66778899vvwwxxyyccbbaa``##""!!  !!^^__``aa{{zzyyxx;;::9988 FFGGHHIISSRRQQPP..//0011nnooppqqkkjjiihh++**))((VVWWXXYY~~}}||{{//..--,,xxwwvvuu88776655YYZZ[[\\{{zzyyxx,,++**))//001122~~ONNMMLLK + @AABBCCDYXXWWVVU())**++,hiijjkklqppoonnm100//..-PQQRRSSTIHHGGFFE 899::;;>==AABBCCDDIIHHGGFF + + YYZZ[[\\tssrrqqp,,++**))YZZ[[\\]~~}}|@??>>==<ABBCCDDEXWWVVUUT)**++,,-ijjkkllmpoonnmml0//..--,QRRSSTTUHGGFFEED9::;;<<=yzz{{||}`__^^]]\ *++,,--.yzz{{||}LKKJJIIH JKKLLMMNGGFFEEDD::;;<<==zz{{||}}__^^]]\\""##$$%%bbccddeewwvvuutt77665544 + + JJKKLLMMOONNMMLL 22334455rrssttuuggffeedd''&&%%$$ZZ[[\\]]zzyyxxww++**))((ttssrrqq44332211 ]]^^__``wwvvuutt((''&&%%334455;;KJJIIHHGDEEFFGGHUTTSSRRQ,--..//0lmmnnoopmllkkjji-,,++**)TUUVVWWXEDDCCBBA<==>>??@|}}~~]\\[[ZZY$%%&&''(deeffgghuttssrrq54433221_``aabbcfeeddccb33445567z{{||}}~\\[[ZZYY%%&&''((eeffgghhttssrrqq44332211 MMNNOOPPLLKKJJII + + 55667788uuvvwwxxddccbbaa$$##""!! ]]^^__``||{{zzyy<<;;::99EEFFGGHHEEDDCCBB]]^^__``poonmlkj((''&&%% !]^^__``a|{{zzyyx<;;::998 EFFGGHHITSSRRQQP-..//001mnnooppqlkkjjiih,++**))(UVVWWXXYDCCBBAA@=>>??@@A}~~\[[ZZYYX.//00112}~~HGGFFEED + + NOOPQRSTCCBBAA@@>>??@@AA~~[[ZZYYXX&&''(())ffgghhiissrrqqpp33221100NNOOPPQQKKJJIIHH + + 66778899vvwwxxyyccbbaa``##""!!  !!^^__``aavvuuttss''&&%%$$ppoonnmm00//..--!!""##$$aabbccddssrrqqpp$$##""!!<<==>>??GFFEEDDC + + HIIJJKKLQPPOONNM 01122334pqqrrsstihhggffe)((''&&%XYYZZ[[\~~}A@@??>>=@AABBCCDYXXWWVVU())**++,hiijjkklqppoonnm100//..-cddeeffgbaa``__^89:;;<<=~XXWWVVUU))**++,,iijjkkllppoonnmm00//..--QQRRSSTTHHGGFFEE99::;;<>aabbccddiihhggff$$##""!!!""##$$%abbccddexwwvvuut87766554 + + IJJKKLLMPOONNMML 12233445qrrssttuhggffeed(''&&%%$YZZ[[\\]~~}}|@??>>==<ABBCCDDEXWWVVUUT2334455;DCCBBAA@ UUVVWWXX~~}}||??>>==<<BBCCDDEEWWVVUUTT**++,,--jjkkllmmoonnmmll//..--,,RRSSTTUUGGFFEEDD::;;<<==zz{{||}}__^^]]\\""##$$%%bbccddeerrqqppoo##""!!llkkjjii,,++**))%%&&''((eeffgghhooiihhgg@@AABBCCCBBAA@@? LMMNNOOPMLLKKJJI + + 45566778tuuvvwwxeddccbba%$$##""! \]]^^__`}||{{zzy=<<;;::9DEEFFGGHUTTSSRRQ,--..//0lmmnnoopmllkkjji-,,++**)!ghhiioop^]]\\[[Z =>>??@@ATTSSRRQQ--..//00mmnnooppllkkjjii,,++**))UUVVWWXXDDCCBBAA==>>??@@}}~~\\[[ZZYY%%&&''((eeffgghhttssrrqq44332211 MMNNOOPP==<<;;55eeffgghheeddccbb %&&''(()effgghhitssrrqqp43322110 MNNOOPPQLKKJJIIH + + 56677889uvvwwxxydccbbaa`$##""!!  !]^^__``a|{{zzyyx<;;::998 EFFGGHHITSSRRQQP;<<==>>?@??>>==<YYZZ[[\\{{zzyyxx;;::9988 FFGGHHIISSRRQQPP..//0011nnooppqqkkjjiihh++**))((VVWWXXYYCCBBAA@@>>??@@AA~~[[ZZYYXX&&''(())ffgghhiiiihhggffhhggffee((''&&%%))**++,,iijjkkllffeeddccDDEEFFGG?>>==<<;PQQRRSSTIHHGGFFE 899::;;>==AABBCCDDXXWWVVUU))**++,,iijjkkllppoonnmm00//..--QQRRSSTT44332211!!""iiooppqqaa``__^^)**++,,-ijjkkllmpoonnmml0//..--,QRRSSTTUHGGFFEED9::;;<<=yzz{{||}`__^^]]\ !""##$$%abbccddexwwvvuut87766554 + + IJJKKLLMPOONNMML ?@@AABBC<;;55443]]^^__``wwvvuutt77665544 + + JJKKLLMMOONNMMLL 22334455rrssttuuggffeedd''&&%%$$ZZ[[\\]]~~}}||??>>==<<BBCCDDEEWWVVUUTT**++,,--jjkkllmmeeddccbbddccbbaa$$##""!!--..//00mmnnooppbbaa``__HHIIJJKK~~}}|;:987655TUUVVWWXEDDCCBBA<==>>??@|}}~~]\\[[ZZY$%%&&''(deeffgghuttssrrq54433221 LMMNNOOPMLLKKJJI + + 45566778tuuvvwwxeddccbba%$$##""!%&&''(()tuuvvwwxVUUOONNMEFFGGHHILLKKJJII + + 55667788uuvvwwxxddccbbaa$$##""!! ]]^^__``||{{zzyy<<;;::99EEFFGGHHTTSSRRQQ--..//00mmnnooppllkkjjii,,++**))UUVVWWXX~~}}||00//..--##$$%%&&rrssttuu]]\\[[ZZ-..//001mnnooppqlkkjjiih,++**))(UVVWWXXYDCCBBAA@=>>??@@A}~~\[[ZZYYX%&&''(()effgghhitssrrqqp43322110 MNNOOPPQLKKJJIIH + + CDDEEFFG~3221100/aabbccddssrrqqpp33221100NNOOPPQQKKJJIIHH + + 66778899vvwwxxyyccbbaa``##""!!  !!^^__``aa{{zzyyxx;;::9988 FFGGHHIISSRRQQPP..//0011nnooppqqaa``__^^``__^^]] 11223344qqrrsstt^^]]\\[[ LLMMNNOO|{{zzyyx44332211XYYZZ[[\~~}A@@??>>=@AABBCCDYXXWWVVU())**++,hiijjkklqppoonnm100//..-PQQRRSSTIHHGGFFE 899::;;>==<ABBCCDDEXWWVVUUT)**++,,-ijjkkllmpoonnmml0//..--,QRRSSTTUHGGFFEEDGHHIIJJK~}}||{{z/..--,,+ !!""##eeffgghhoonnmmll//..--,,RRSSTTUUGGFFEEDD::;;<<==zz{{||}}__^^]]\\""##$$%%bbccddeewwvvuutt77665544 + + JJKKLLMMOONNMMLL 22334455rrssttuu]]\\[[ZZ \\[[ZZYY55667788uuvvwwxxZZYYXXWW + + UUVVWWXXxwwvvuut00//..-- \]]^^__`}||{{zzy=<<;;::9DEEFFGGHUTTSSRRQ,--..//0lmmnnoopmllkkjji-,,++**)TUUVVWWXEDDCCBBA<==>>??@|}}~~]\\[[ZZY-..//001|}}~~IHHGGFFE + + MNNOOPQRDDCCBBAA==>>??@@}}~~\\[[ZZYY%%&&''((eeffgghhttssrrqq44332211 MMNNOOPPLLKKJJII + + 55667788uuvvwwxxddccbbaa$$##""!! ]]^^__``wwvvuutt((''&&%%++,,--..zz{{||}}UUTSRQPO +56677889uvvwwxxydccbbaa`$##""!!  !]^^__``a|{{zzyyx<;;::998 EFFGGHHITSSRRQQP-..//001mnnooppqlkkjjiih,++**))(UVVWWXXYDCCBBAA@KLLMMNNOzyyxxwwv+**))(('$$%%&&''iijklmnokkjjiihh++**))((VVWWXXYYCCBBAA@@>>??@@AA~~[[ZZYYXX&&''(())ffgghhiissrrqqpp33221100NNOOPPQQKKJJIIHH + + 66778899vvwwxxyyYYXXWWVV + + XXWWVVUU99::;;<>=@AABBCCDYXXWWVVU12233445EDDCCBBA STUUVVWW~~}}@@??>>==AABBCCDDXXWWVVUU))**++,,iijjkkllppoonnmm00//..--QQRRSSTTHHGGFFEE99::;;<>==< OUUVVWWXvuuttssr'&&%%$$#(())**++oppqqrrsggffeedd''&&%%$$ZZ[[\\]]~~}}||??>>==<<BBCCDDEEWWVVUUTT**++,,--jjkkllmmoonnmmll//..--,,RRSSTTUUGGFFEEDD::;;<<==zz{{||}}UUOONNMMTTSSRRQQ==>>??@@}}~~MMLLKKJJ]]^^__``poonmlkj((''&&%%$%%&&''(deeffgghuttssrrq54433221 LMMNNOOPMLLKKJJI + + 45566778tuuvvwwxeddccbba%$$##""! \]]^^__`}||{{zzy=<<;;::9DEEFFGGHUTTSSRRQ5;;<<==>A@@??>>=XXYYZZ[[||{{zzyy<<;;::99EEFFGGHHTTSSRRQQ--..//00mmnnooppllkkjjii,,++**))UUVVWWXXDDCCBBAA==>>??@@}}~~\\[[ZZYY%%&&''((eeffgghhooiihhgg334455;;KJJIIHHG=>>??@@A}~~\[[ZZYYX%&&''(()effgghhitssrrqqp43322110 MNNOOPPQLKKJJIIH + + 56677889uvvwwxxydccbbaa`$##""!!  !]^^__``a|{{zzyyx<;;::998 + + XYYZZ[[\rqqppooi#""!!,,--..//sttuuvvwccbbaa``##""!!  !!^^__``aa{{zzyyxx;;::9988 FFGGHHIISSRRQQPP..//0011nnooppqqkkjjiihh++**))((VVWWXXYYCCBBAA@@>>??@@AA~~LLKKJJII + +PPOONNMM AABBCCDDIIHHGGFFaabbccddiihhggff$$##""!!())**++,hiijjkklqppoonnm100//..-PQQRRSSTIHHGGFFE 899::;;??@@AAB=<<;;554\\]]^^__xxwwvvuu88776655 + + IIJJKKLLPPOONNMM 11223344qqrrsstthhggffee((''&&%%YYZZ[[\\~~}}@@??>>==AABBCCDDXXWWVVUU))**++,,iijjkkllffeeddcc<<==>>??GFFEEDDCABBCCDDEXWWVVUUT)**++,,-ijjkkllmpoonnmml0//..--,QRRSSTTUHGGFFEED9::;;<<=yzz{{||}`__^^]]\ !""##$$%abbccddexwwvvuut87766554 \]]^^__`ihhggffe00112233wxxyyzz{__^^]]\\""##$$%%bbccddeewwvvuutt77665544 + + JJKKLLMMOONNMMLL 22334455rrssttuuggffeedd''&&%%$$ZZ[[\\]]~~}}||??>>==<<BBCCDDEEHHGGFFEE !!""##ooppqqrr``__^^]]*++,,--.jkkllmmnonnmmllk/..--,,+RSSTTUUVGFFEEDDC:;;<<==>z{{||}}~_^^]]\\["##$$%%&bccddeefwvvuutts76655443 + JKKLLMMN=<<;;554#$$%%&&'rssttuuvQPPOONNM @AABBCCD$$%%&&''ssttuuvv\\[[ZZYY.//00112nooppqqrkjjiihhg+**))(('VWWXXYYZCBBAA@@?>??@@AAB~[ZZYYXXW&''(())*fgghhiijsrrqqppo3221100/NOOPPQQR43322110'(())**+vwwxxyyzMLLKKJJI + + DEEFFGGH(())**++wwxxyyzzXXWWVVUU 23344556rssttuuvgffeeddc'&&%%$$#Z[[\\]]^~~}}||{?>>==<<;BCCDDEEFWVVUUTTS*++,,--.jkkllmmnonnmmllk/..--,,+RSSTTUUV~~}}||{0//..--,+,,--../z{{||}}~IHHGGFFE + + HIIJJKKL,,--..//{{||}}~~TSRQPOON + + 6778899:vwwxxyyzcbbaa``_#""!!  !!"^__``aab{zzyyxxw;::99887 +FGGHHIIJSRRQQPPO.//00112nooppqqrkjjiihhg+**))(('VWWXXYYZ{zzyyxxw,++**))(/0011223~EDDCCBBA LMMNNOOP00112233NMMLLKKJ :;;<<==>z{{||}}~_^^]]\\["##$$%%&bccddeefwvvuutts76655443 + JKKLLMMNONNMMLLK 23344556rssttuuvgffeeddc'&&%%$$#Z[[\\]]^wvvuutts(''&&%%$34455;;<~~}A@@??>>=PQQRRSST4455;;<??@@AAB~[ZZYYXXW&''(())*fgghhiijsrrqqppo3221100/NOOPPQQRKJJIIHHG + + 6778899:vwwxxyyzcbbaa``_#""!!  !!"^__``aabsrrqqppo$##""!!<==>>??@}||{{zzy=<<;;::9TUUVVWWX==>>??@@FEEDDCCBBCCDDEEFWVVUUTTS*++,,--.jkkllmmnonnmmllk/..--,,+RSSTTUUVGFFEEDDC:;;<<==>z{{||}}~_^^]]\\["##$$%%&bccddeefoiihhggf@AABBCCDyxxwwvvu98877665XYYZZ[[\AABBCCDDBAA@@??> +FGGHHIIJSRRQQPPO.//00112nooppqqrkjjiihhg+**))(('VWWXXYYZCBBAA@@?>??@@AAB~[ZZYYXXW&''(())*fgghhiijfeeddccbDEEFFGGHuttssrrq54433221 \]]^^__`EEFFGGHH>==<<;;: + JKKLLMMNONNMMLLK 23344556rssttuuvgffeeddc'&&%%$$#Z[[\\]]^~~}}||{?>>==<<;BCCDDEEFWVVUUTTS*++,,--.jkkllmmnbaa``__^HIIJJKKLqppoonnm100//..- !!""##$`aabbccdIIJJKKLL~~}}||{98765544NOOPPQQRKJJIIHHG + + 6778899:vwwxxyyzcbbaa``_#""!!  !!"^__``aab{zzyyxxw;::99887 +FGGHHIIJSRRQQPPO.//00112nooppqqr^]]\\[[Z LMMNNOOUmllkkjji-,,++**)$%%&&''(deeffgghMMNNOOUU{zzyyxxw33221100RSSTTUUVGFFEEDDC:;;<<==>z{{||}}~_^^]]\\["##$$%%&bccddeefwvvuutts76655443 + JKKLLMMNONNMMLLK 23344556rssttuuvZYYXXWWV + + +UVVWWXXYihhggffe)((''&&%())**++,hiijjkklVVWWXXYYwvvuutts//..--,,VWWXXYYZCBBAA@@?>??@@AAB~[ZZYYXXW&''(())*fgghhiijsrrqqppo3221100/NOOPPQQRKJJIIHHG + + 6778899:vwwxxyyzVUUOONNM + YZZ[[\\]eddccbba%$$##""!,--..//0lmmnnoopZZ[[\\]]srrqqppo++**))((Z[[\\]]^~~}}||{?>>==<<;BCCDDEEFWVVUUTTS*++,,--.jkkllmmnonnmmllk/..--,,+RSSTTUUVGFFEEDDC:;;<<==>z{{||}}~MLLKKJJI]^^__``aa``__^^]! 01122334pqqrrsst^^__``aaonmlkjii''&&%%$$ !!"^__``aab{zzyyxxw;::99887 +FGGHHIIJSRRQQPPO.//00112nooppqqrkjjiihhg+**))(('VWWXXYYZCBBAA@@?>??@@AAB~IHHGGFFEabbccdde]\\[[ZZY45566778tuuvvwwxbbccddeehhggffee##""!! "##$$%%&bccddeefwvvuutts76655443 + JKKLLMMNONNMMLLK 23344556rssttuuvgffeeddc'&&%%$$#Z[[\\]]^~~}}||{?>>==<<;BCCDDEEFEDDCCBBAeffgghhiYXXWWVVU899::;;>=!!""#iooppqqrUTTSSRRQ<==>>??@|}}~~ZHAbے`JXQr˂p|ZdQbtlJ`f~˂rXQbHAZtAJl璂rAJlf`vXnvpQr˂pZHAb|ZdQbtlnXv`f~HfpvrXQJ`ےbHAdrtAJltnvpfH~ˑZHAbے`JXbtlJtArdf~HfpvnXv`bHAZpQZ|dJltnvpfnvpZHAbے`JXQtlJtArdf~HfpvnXv`bHAZp˂rJltbdQZ|H~f`vXnے`JXQr˂pJtAd|ZdQbtlJnXv`f~Hp˂rXQJ`ےtbdQdrtAJfH~bJQAbے`JtAd|ZdQbtlJtnXv`f~H˂rXQJ`ےbdQZ|drtAvXnvpfHr˂pZHAbہJXQrlJtArd|f~HfpvQJ`ےbHAZpdrtAJlt~f`nvpے`JXpZHAJtArJtArd~HfpvnJ`ےbHAZpdrtAJltbvpfH~f`HAbے`JXQr˂pZrd|ZdQbtpvnXv`fbHAZp˂rXQltbdQZ|Hf`vXnvpfHZHAbے`JXQr˂p|ZdQbtlJtArdHfpvJ`p˂p`ےtbdQZtbdQnvpfH~ˑZHAbے`JXbtlJtArdf~HfpvnrXQJ`bHAZp˂AJltbdQZ|fH~f`vXے`JXQr˂pJtArd|ZdQfpvnXv`fHrXQrtAJlbdQZ|~f`vfH~ے`JXQr˂ptArd|ZdQbfpvnXv`fHfp˂rXQJ`ےbdQZ|drtA`vXnvpfr˂pZHAb|ZdQbtlJtArdf~HfpvXQJ`ےbHAZZ|dltbf`vXr˂pJXQrZdQbtlJtArdf~HfpvQJ`ےbHAZpdrtAJltvpfH~f`ZHAbے`JXQbtlArd|ZdQbtfpvnXv`˙bHAZp˂rXJltbdQZ|vXnfH~Qr˂pbے`ZdQbt|ZdpvnXv`fbHAZp˂rXQltbdQZ|~f`vXn`JXQr˂pZHAے`ZdQbtlJtAXv`f~Hf˂rXQJ`ےdQZ|drtAJvXnvpfH~fZے`JXQr˂pZHAbtlJtArdf~HnXHrXQJbHAZp|drZ|dfH~f`vXے`JXQr˂pJtArd|ZdQfpvnXv`ےHAZp˂rXQJ`ۉbdQZ|drtf`vXnvpQr˂pZHAb|ZdQbtlnXv`f~HfpvJ`ےtbddrtAXnvf`vnr˂pZHAb|ZdQbtlJnXv`f~HpvnXQJ`ےbHAZdrtAJltvpfH~fZHAbے`JXQtlJtArdf~HfpvnXv`bHAZp˂rrtAJldQZ|lnvpZHAbۉZAblJtArd|f~HfpvnXv`˙bHAZp˂rXJltbdQZ|~f`vXn`JXQr˂pJtAd|ZdQbtlJtnXv`f~H˂rXQJ`ےbdQZ|drtAvp`f`pfHZHAbJXQr˒lJtAQbJtAXv`f~Hf˂rXQJ`ےdQZ|drtAJvXnvpfH˂pZHAbےJXQrblJtArd|~HfpvnJ`ےbHAZpdrtAJltbvpfH~f`HAbrےZHAbے`JXQtArd|ZdQbXv`ffpv`ےb˂rXQtAJlrtAJlf`vXnvpQr˂pZHAb|ZdQbtlnXv`f~HZp˂rXQJ`ےbHAdrtAJltnvpfH~ˑZHAbے`JXbtlJtArdf~HfpvnrXQJ`bHAXQJ`QZ|dJltpfH~vpfHZHAbے`JXQtlJtArdf~HfpvrXQJ`bHAZp˂rJltbdQZ|H~f`vXnے`JXQr˂ptArd|ZdQbfpvnXv`fHfp˂rXQJ`ےtdrtbnfH~`JXQے`JXQArd|ZdQbtfpvnXv`fHfp˂rXQJ`ےbdQZ|drtAvXnvpfHr˂pZHAbہZdQbtlJtArdf~HfpvQJ`ےbHAZpdrtAJltvXnۅ~f`ے`JXp`JXrd|rdf~HfpvnJ`ےbHAZpdrtAJltbvpfH~f`HAbے`JXQrtlJrd|ZdQbtpvnXv`fbHAZp˂rXQltbdQZ|~f`vXn˂pZHA`JXQrے`JXQr˂p|ZdQbtlJ~HfnXv`HAZp˂J`ےtbQZdtbdQnvpfH~ˑZHAbے`JXbtlJtArdf~HfpvrXQJ`ےbHAZdrtAJltbdQZ|fH~f`vXے`JXQr˂pJtArd|ZdQfpvnXv`p˂ےbHrtAJlbdQZ|lf`v~f`ے`JXQr˂ptArd|ZdQbfpvnXv`ےHAZp˂rXQJ`ےbdQZ|drtA`vXnvpfr˂pZHAb|ZdQbtlJnXv`f~HpvnXQJ`ےbHAZtAJl璀vp`vpfr˂pr˂pZdQbtlJtnXv`f~HvnQJ`ےbHAZpdrtAJltvpfH~f`ZHAbے`JXQlJtArd|f~HfpvnXv`˙bHAZp˂rXJltbdQZ|vpfHvXnQHAbQrbtZdQbt琕~HfpvnXv`fbHAZp˂rXQltbdQZ|~f`vXn`JXQr˂pZtAd|ZdQbtlJtAXv`f~Hf˂rXQJ`ےdQZ|drtAJvXnvpfHbے`˂pZr˂pZHAbtlJtArdpvnf~HrXQJbHAZprtAJlZ|dnfH~f`vXے`JXQr˂pJtArd|ZdQfpvnXv`bHAZp˂AJltbdQZ|dtAf`vXnvpQr˂pZHAb|ZdQbtlnXv`f~HrXQJ`AZp˂|dtbdXnvvXnr˂pZHAb|ZdQbtlJnXv`f~Hp˂rXQJ`ےbHAZdrtAJltvpfH~fZHAbے`JXQtlJtArdf~HfpvrXQJ`bHAZp˂rtbdQZvXnH~fZHAbZHAblJtArd|f~HfpvrXQJ`ۙbHAZp˂rXJltbdQZ|~f`vXn`JXQr˂pArd|ZdQbtfpvnXv`fHfp˂rXQJ`ےbdQZ|drtA~f`vpfH`JXQlJA|lJtApvnXv`fHfp˂rXQJ`ےdQZ|drtAJvXnvpfH˂pZHAbےZdQbtlJtArdf~HfpvnJ`ےbHAZpdrtAJltbvpfH~f`JXQrHAbےZHAbے`JXQtArd|ZdQbXv`ffpv`ے˂btbdvff`vXnvpQr˂pZHAb|ZdQbtlnXv`f~HZp˂rXQJ`ۉbdQZ|drtJltnvpfH~ˑZHAbے`JXbtlJtArdf~HfpvbHArXQJ`rtAJlQZ|dpfH~vpfHZHAbے`JXQtlJtArdf~HfpvXQJ`ےbHAZdrtAJltbdQZ|H~f`vXnے`JXQr˂ptArd|ZdQbfpvnXv`ےHAZp˂rXQJ`ے|drvpfH`vXn`JQrے`JXQArd|ZdQbtfpvnXv`˒HAZp˂rXQJ`ےbdQZ|drtAvXnvpfHr˂pZHAbہZdQbtlJtnXv`f~HvnQJ`ےbHAZpdrtAJltvXnۅ~f`r˂pZdQbtrdZQbXv`f~HfvnrJ`ےbHAZpdrtAJltbvpfH~f`HAbے`JXQrlJtArd|~HfpvnXv`fbHAZp˂rXQltbdQZ|~f`vXn˂pZHA`JXQrے`JXQr˂p|ZdQbtlJ~HfnXv`rXQJ`HAZdQZ|df`vXnvpfH~ˑZHAbے`JXbtlJtArdf~HfpvrXQJ`ےbHAdrtAJltbnvpfH~f`vXے`JXQr˂pJtArd|ZdQfpvnXv`Zp˂ےbHtbdQrtAJlfvXn~f`ے`JXQr˂ptArd|ZdQbfpvnXv`bHAZp˂rJltbdQZ|dtAJ`vXnvpfr˂pZHAb|ZdQbtlJnXv`f~Hp˂rXQJ`ےbHAZtAJl~f`vpfpZHAbr˂pZdQbtlJtnXv`f~H˂rXQJ`ےbHAZdrtAJltvpfH~f`ZHAbے`JXQlJtArd|f~HfpvrXQJ`ۙbHAZp˂rXJltbdQZ|vpfHXvXHZHAbۉlJttlJ~HfpvnXQJ`ےbHAZp˂rXQltbdQZ|~f`vXn`JXQr˂pZrd|ZdQbtpvnXv`fHfp˂rXQJ`ےdQZ|drtAJvXnvpfHbے`˂p`r˂pZHAbtlJtArdp`fpvnےbHArtAJrtAJlnvpfH~fZHAbے`JXQr˂pJtArd|ZdQfpvnXv`bHAZp˂AJltbdQZ|fHf`vXnvpQr˂pZHAb|ZdQbtlnXv`f~HrXQJ`pAZp`Z|dtbdvpfHvXnvfr˂pZHAb|ZdQbtlJnXv`f~Hp˂rXQJ`ےbdQZ|drtAltbvpfH~fZHAbے`JXQtlJtArdf~HfpvXQJ`ےbHAZdrtAtbdQtAvXnH~fے`JZAb`lJtArd|f~HfpvQJ`ےbHAZpdrtAJltbdQZ|~f`vXn`JXQr˂pArd|ZdQbtfpvnXv`˒HAZp˂rXQJ`ےbdQZ|drtAnvp~fZH`JXQArd|tArdpvnXv`fHAZp˂rXQJ`ےdQZ|drtAJvXnvpfH˂pZHAbےZdQbtlJtAXv`f~HfvnrJ`ےbHAZpdrtAJltbvpfH~f`pZHAbJXQrZHAbے`JXQtArd|ZdQb~HfpXv`fZp˂bdQZ|tbdfH~f`vXے`JXQr˂pZHAۂ|ZdQbtlnXv`f~HZp˂rXQJ`ۉbdQZ|drtf`vXnvpfH~ˑZHAbے`JXbtlJtArdf~Hfpv˂rXbHArtAJlQZ|l~f`H~fZHAbے`JXQtlJtArdf~HfpvXQJ`ےbHAZdrtAJltnvpH~f`vXnے`JXQr˂ptArd|ZdQbfpvnXv`bHAZp˂rdQZ|Jltvp`v`pfHXQr˂JXQrArd|ZdQbtfpvnXv`˙bHAZp˂rXJltbdQZ|dtAJlvXnvpfHr˂pZHAbہZdQbtlJtnXv`f~H˂rXQJ`ےbHAZdrtAJltfH~Abrے`ZdQbt|ZdQbXv`f~Hf˂rXQJ`ےbHAZdrtAJltbvpfH~f`HAbے`JXQrlJtArd|~HfpvnXQJ`ےbHAZp˂rXQltbdQZ|~f`vXnے`J˂pZHAے`JXQr˂p|ZdQbtlJvnX~HfrXQJ`drtAQZrtAf`vXnvpQr˂pZHAb`JXQbtlJtArdf~HfpvrXQJ`ےbHAdrtAJltnvpfH~fZHAbے`JXQr˂pJtArd|ZdQfpvnXv`QJ`ےZp˂tdrttbnvXnZHAbے`JXQr˂ptArd|ZdQbfpvnXv`bHAZp˂rJltbdQZ|fHf`vXnvpfr˂pZHAb|ZdQbtlJnXv`f~Hp˂rXQJ`ےdrtAJbdQZ|Xnv~f`pZHAbpZHAZdQbtlJtnXv`f~H˂rXQJ`ےbdQZ|drtAtbvpfH~f`ZHAbے`JXQlJtArd|f~HfpvQJ`ےbHAZpdrtAJltbdQZ|f`vXpZHAJXQrlJArtlJ~HfpvnJ`ےbHAZpdrtAJltbdQZ|~f`vXn`JXQr˂pZrd|ZdQbtpvnXv`fHAZp˂rXQJ`ےdQZ|drtAJvXnvpfHXQr˂bے`r˂pZHAbtlJtArdv`fpvnےbHAJltJltnvpfH~ˑZHAbے`JXrbtlJtArd|ZdQfpvnXv`bHAZp˂AJltbdQZ|fH~f`vXے`JXQr˂pZHAۂ|ZdQbtlnXv`f~HbHAZprXQJ`AJltvpfvpfHے`JXQr˂pZHAے|ZdQbtlJnXv`f~Hp˂rXQJ`ےbdQZ|drtA`vXnvpfH~fZHAbے`JXQtlJtArdf~HfpvXQJ`ےbHAZltbdrtApfH~vXnے`Jbے`lJtArd|f~HfpvQJ`ےbHAZpdrtAJltnvp~f`vXn`JXQr˂pArd|ZdQbtfpvnXv`˙bHAZp˂rXJltbdQZ|dtAJlnvpbے`˂pZH|ZdQtArdpvnXv`fbHAZp˂rXQltbdQZ|dtAJlvXnvpfH˂pZHAbےZdQbtlJtAXv`f~Hf˂rXQJ`ےbHAZdrtAJltbvpfH~f`pZHAbJXQrZHAbے`JXQtArd|ZdQb~HfpXv`pXQJ`ےbdQZ|bdQZ|fH~f`vXے`JXQr˂pJtAd|ZdQbtlnXv`f~HZp˂rXQJ`ۉbdQZ|drtf`vXnvpQr˂pZHAb`JXQbtlJtArdf~Hfpv˂rXbHAbdQZ|f`vX~fvr˂pZHAb`JXQrtlJtArdf~HfpvXQJ`ےbHAZdrtAJltvpfH~fZHAbے`JXQr˂ptArd|ZdQbfpvnXv`bHAZp˂rdQZ|Jltf`vvpfHXQrZHJXQrArd|ZdQbtfpvnXv`˙bHAZp˂rXJltbdQZ|fHf`vXnvpfHr˂pZHAbہZdQbtlJtnXv`f~H˂rXQJ`ےbdQZ|drtAtbfH~JXQrAbے`btl|ZQblXv`f~Hf˂rXQJ`ےdQZ|drtAJtbnvpfH~f`HAbے`JXQrlJtArd|~HfpvnJ`ےbHAZpdrtAJltbdQZ|~f`vXnے`J˂p`Jے`JXQr˂p|ZdQbtlJv~˂rXQbHAZdrtAdrtAf`vXnvpQr˂pZHAb|ZdQbtlJtArdf~HfpvrXQJ`ےbHAdrtAJltnvpfH~ˑZHAbے`JXrbtlJtArd|ZdQfpvnXv`QJ`ےZp˂drtnvpnvpZHAbے`JXQbtltArd|ZdQbfpvnXv`bHAZp˂rJltbdQZ|H~f`vXnے`JXQr˂pZHAے|ZdQbtlJnXv`f~Hp˂rXQJ`ےdrtAJbdQZ|Xnv~f`Abے`pZA`ZdQbtlJtnXv`f~H˂rXQJ`ےbdQZ|drtAvXnvpfH~fZHAbے`JXQlJtArd|f~HfpvQJ`ےbHAZpdrtAJltnvp`vppZHAJXQrJtArdJtArd~HfpvnJ`ےbHAZpdrtAJltbvpf~f`vXn`JXQr˂pZrd|ZdQbtpvnXv`fbHAZp˂rXQltbdQZ|dtAJlvXnvpfHXQHAbXQrbtlJtArr˂pZHAbtlJtArdHfpvJ`ےp˂rJlbQZJltnvpfH~ˑZHAbے`JXbtlJtArdf~HfpvnXv`bHAZp˂AJltbdQZ|fH~f`vXے`JXQr˂pJtAd|ZdQbtlnXv`f~HrXQbHAZAJltfH~fH~ے`JXQr˂pJtAd|ZdQbtlJnXv`f~Hp˂rXQJ`ےbdQZ|drtA`vXnvpfr˂pZHAb`JXQrtlJtArdf~HfpvXQJ`ےbHAZl|dltbpfHXvXH~JXQrJXQrlJtArd|f~HfpvQJ`ےbHAZpdrtAJltvpfH~f`ZHAbے`JXQr˂pArd|ZdQbtfpvnXv`˙bHAZp˂rXJltbdQZ|vXnfH~bے`p˂p`|ZdQ|ZdpvnXv`fbHAZp˂rXQltbdQZ|Hf`vXnvpfH˂pZHAbےZdQbtlJtAXv`f~Hf˂rXQJ`ےdQZ|drtAJtbnvpfH~f`ے`JXQl|Zd|ZZHAbے`JXQtArd|ZdQbnXvbHAZpXQJ`ے|drbdQZ|fH~f`vXے`JXQr˂pJtArd|ZdQfpvnXv`fHZp˂rXQJ`ۉbdQZ|drtf`vXnvpQr˂pZHAb|ZdQbtlJtArdf~HfpvJ`ےdrtAdbdQtAf`vXf`vXr˂pZHAb|ZdQbtlJtArdf~HfpvXQJ`ےbHAZdrtAJltvpfH~fZHAbے`JXQbtltArd|ZdQbfpvnXv`bHAZp˂rrtAJldQZ|nvpfZHA˂pZHbtlArd|ZdQbtfpvnXv`˙bHAZp˂rXJltbdQZ|~f`vXn`JXQr˂pZHAے`ZdQbtlJtnXv`f~H˂rXQJ`ےbdQZ|drtAvpfHf`vXZHAbJXQrbtlQbtlXv`f~Hf˂rXQJ`ےdQZ|drtAJvXnvpfH~fZHAbے`JXQrlJtArd|~HfpvnJ`ےbHAZpdrtAJltbvpf~f`vXnr˂pdQbtdQbtl|ZdQlJtArnXv`nXv`bHAZp˂rXQtbdQZ|d~f`vXnہJXQr˂pZHAے`ZdQbtlJtAv`f~HfprXQJ`ےQZ|drtAJlvXnvpfH~frQrXb㉀ۑ󙐂ˁ`ZpfH~ㅐf۝`vtbAdZbtld|Zf~Hf~HrXQJ`ےQZ|drtAJlvXnvpfH˂pZHAbے`JXQrbtlJtArd|~HfpvnXJ`ےbHAZp˙rtAJltbdvpfH~f`˂pZH`JXQpJAHrQXb㉀f۝`vXnvˍ|drJtArddQbtfpvfpvJ`ےbHAZp˙rtAJltbdvpfH~f`Abے`JXQrlJtrd|ZdQbtvnXv`fbHAZp˂rXQtbdQZ|d~f`vXnAbے`r˂pˁ`ZQۑpJAHrXnvˍp|drQtJl|ZdQlJtArnvfnXv`bHAZp˂rXQtbdQZ|d~f`vXnہJXQr˂pZHAd|ZdQbtlJtAv`f~HfprXQJ`ےQZ|drtAJlvXnvpfHJXQrZHAbXb㉀ۑ󙐂ˁ`pfH~QtJltbAdZbtld|Z~HfpۍffpۂrXQJ`ےQZ|drtAJlvXnvpfH˂pZHAbے`ZdQbtlJtArdf~HfpvnXJ`ےbHAZp˙rtAJltbdvpfH~f`˂pZH`JXQpJAHQXbpfH~ㅐf۝`vtbAdZ|drJtAdQbdQtArdvnXvnrXJ`ےbHAZp˙rtAJltbdvpfH~f`Abے`JXQrlJtArd|~HfpvnXv`fbHAZp˂rXQtbdQZ|d~f`vXnAbے`r˂p`㉀ۑpJf۝`vXnvˍ|drQtJltlJf~v`fQJ`ےbHAZp˂rXQtbdQZ|d~f`vXnہJXQr˂pZHrd|ZdQbtvnXv`fHfpۂrXQJ`ےQZ|drtAJlvXnvpfHpZHAJXQrAHr󙐂XnvˍpfH~QtJltbAdZtArdHfvnX~HfpۙHAZp˂rXQJ`ےQZ|drtAJlvXnvpfH˂pZHAbے`ZdQbtlJtAv`f~HfpvnrXJ`ےbHAZp˙rtAJltbdvpfH~f`bے`˂pZHˁ`ZQXbpfH~ㅐf۝`vtbAdZ|dr|ZdQbv`fvnXvrXQJ`ےbHAZdrtAJltbdvpfH~f`Abے`JXQrlJtArd|~HfpvnXQJ`ےbHAZp˂rXQtbdQZ|d~f`vXnJXQrAbے`㉀ۑpJf۝`vXnvˍ|drQtJltlJ~Hfpf~HfJ`ےbHAZp˙rtAJltbdQZ|d~f`vXnہJXQr˂pZHrd|ZdQbtvnXv`fHAZp˂rXQJ`ےQZ|drtAJlvXnvpfHpZHAJXQrAHr󙐉XnvˍpfH~QtJltbAdZtArdtvnXpvnbHAZp˂rXQtbdQZ|dtAJlvXnvpfH˂pZHAbے`ZdQbtlJtAv`f~HfprXQJ`ےbHAZdrtAJltbdvpfH~f`bے`˂p`ZۑpJApfH~ㅐf۝`vtbAdZ|drlJtAv`fXv`frXQJ`ےQZ|drtAJltbnvpfH~f`Abے`JXQrlJtArd|~HfpvnXJ`ےbHAZp˙rtAJltbdQZ|d~f`vXnJXQHAbQXb㉀Hr󙐂ˁf۝`vXnvˍ|drQtJlrd|~Hfp~HfJ`ےbHAZp˙rtAJltbdvpfH~f`vXnہJXQr˂pZHrd|ZdQbtvnXv`fbHAZp˂rXQtbdQZ|dtAJlvXnvpfHے`JXۑpJAHr`ZQXbXnvˍpfH~QtJltbAdZZdQbtvnv`pvnbHAZp˂rXQtbdQZ|df`vXnvpfH˂pZHAbے`ZdQbtlJtAv`f~HfprXQJ`ےQZ|drtAJltbnvpfH~f`Qr˂p󙐂ˁ`ZۑpJApfH~ㅐf۝`vtbAdZ|drlJtAf~HXv`frXQJ`ےQZ|drtAJlvXnvpfH~fZHAbے`JXQrlJtArd|~HfpvnXJ`ےbHAZp˙rtAJltbdvpfH~f`vXnۑZHAbQXb㉀Hr󙐂ˁf۝`vXnvˍ|drQtJlrd|fpv~fpvJ`ےbHAZp˙rtAJltbdvpfH~f`Abے`JXQr˂pZHrd|ZdQbtvnXv`fbHAZp˂rXQtbdQZ|df`vXnvpfHے`JXۑp`ZQ`pJAHrXnvˍpfH~QtJltbAdZ| \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv31_2.dat b/vendor/endroid/qr-code/assets/data/qrv31_2.dat new file mode 100644 index 000000000..8bfc63022 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv31_2.dat @@ -0,0 +1,281 @@ +{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmniiiijijihghghghgdcdcdcdcbabababa{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnjijijijihghghghgdcdcdcdcbabababa{|{|{|{|yzyzyzyzwvuvuvuvststststqrqrqrqrmnmnmnmnjijijijihghghghgdcdcdcdcbabababa{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqrmnmnmnmnjijijijihghghghgdcdcdcdcbabababa{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqrmnmnmnmnjijijijihghghghgdcdcdcdcbabababa{|{|{|{|yzyzyzyzuvuvuvuvststststqpopopopmnmnmnmnjijijiiihghghghgdcdcdcdcbabababa{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopmnmnmnmniiijijijhghghghgdcdcdcdcbabababa{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopmnmnmnmnijijijijhghghghgdcdcdcdcbabababa{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopmnmnmnmnijijijijhghghghgdcdcdcdcbabababa{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopmnmnmnmnijijijijfefefefedcdcdcdcbabababa{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopmnmnmnmnijijijijfefefefedcdcdcdcbabababa{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopmnmnmnmnijijiiiifefefefedcdcdcdcbabababa{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopmnmnmnmniijijijifefefefedcdcdcdc`_`_`_`_{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopmnmnmnmnjijijijifefefefedcdcdcdc`_`_`_`_{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopmnmnmnmnjijijijifefefefedcdcdcdc`_`_`_`_~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopmnmnmnmnjijijijifefefefedcdcdcdc`_`_`_`_}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopmnmnmnmljijijijifefefefedcdcdcdc`_`_`_`_}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopklklklkljijiiiiifefefefedcdcdcdc`_`_`_`_}~}~}~}~{|{|{|{|yxwxwxwxuvuvuvuvststststopopopopklklklklijijijijfefefefedcdcdcdc`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststopopopopklklklklijijijijfefefefedcdcdcdc`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststopopopopklklklklijijijijfefefefedcdcdcdc`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvsrqrqrqropopopopklklklklijijijijfefefefedcdcdcdc`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklijijijijfefefefedcdcdcdc`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklijiiiiiifefefefedcdcdcdc`_`_`_`_^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopklklklkljijijijifefefefedcdcdcdc`_`_`_`_^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklhghghghgfefefefebabababa`_`_`_`_^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklhghghghgfefefefebabababa`_`_`_`_^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklhghghghgfefefefebabababa`_`_`_`_^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklhghghghgfefefefebabababa`_`_`_`_^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklhghghghgfefefefebabababa`_`_`_`_^]^]^]^]}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklhghghghgfefefefebabababa`_`_`_`_^]^]^]^]}~}~}~}~{zyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklhghghghgfefefefebabababa`_`_`_`_^]^]^]^]}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklhghghghgfefefefebabababa`_`_`_`_^]^]^]^]}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopklklklklhghghghgfefefefebabababa`_`_`_`_^]^]^]^]}~}~}~}~yzyzyzyzwxwxwxwxutstststqrqrqrqropopopopklklklklhghghghgfefefefebabababa`_`_`_`_^]^]^]^]}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqropopopopklklklklhghghghgfefefefebabababa`_`_`_`_^]^]^]^]}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqropopopopklklklklhghghghgfefefefebabababa`_`_`_`_^]^]^]^]}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqronmnmnmnklklklklhghghghgfefefefebabababa`_`_`_`_^]^]^]^]}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnklklklklhghghghgfefefefebabababa`_`_`_`_^]^]^]^]}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnklklklklhghghghgfefefefebabababa`_`_`_`_^]^]^]^]}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnklklklklhghghghgfefefefebabababa`_`_`_`_^]^]^]^]}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnklklkjijhghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnijijiiiihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnijijijijhghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnijijijijhghghghgdcdcdcdcbabababa^]^]^]^]^]^]^]^]}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnijijijijhghghghgdcdcdcdcbabababa^]^]^]^]^]^]^]^]}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnijijijijhghghghgdcdcdcdcbabababa^]^]^]^]^]^]^]^]}|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnijijijiihghghghgdcdcdcdcbabababa^]^]^]^]^]^]^]^]^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<7878787856565656212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOOOOOOMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<7878787856565656212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<7878787855555565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         \[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<7878787865656543212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         \[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<7878787843434343212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         \[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<7878787843434343212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         \[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<7878787843434343212121210/0/0/.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + +\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOOOOOOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<787878784343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<787878784343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSOPOPOPOPMNMNMNMLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<787878784343434321212121.-.-.-.-,+,+,+,+*)*)*)('&%&%&%&%$#$#$#$#         + + + +\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSOPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSOPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSOPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#"!         + + + +\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSOOOOOOPOKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!         + + + +\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!         + + + +\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABA@=>=>=>=>;<;<;<;<787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!         + + + +\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!         + + + +\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSRQPOPOPOPOKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!         + + + +\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;:787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!         + + + +\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQOOOOOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!         + + + +\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQOPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!         + + + +\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQOPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!         + + + +\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQOPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:78787878434343432121210/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!       + + + +\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQOPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:78765656434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + +\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQOPOOOOOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:56555556434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!   + + + +\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQOPOPOPONKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:56565656434343430/0/0/0/.-.-.-.-,+,+,+*)('('('('&%&%&%&%"!"!"!"! + + + +\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:56565656434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"! + + + +\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:56565656434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"! + + + +\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNKLKLKLKLIJIJIJIHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:56565656434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%$#"!"!"!"! + + + +\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:56565555434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + +\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:55656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + +\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCB?@?@?@?@=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + +\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + +\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + +\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=<9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + +\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:9:9:65655555434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + +\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + +\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + +ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656434343210/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!  + + + +ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56565656212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:9:9:56555555212121210/0/0/0/.-.-.-,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:9:9:65656565212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:9:9:65656565212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQMNMNMNMNKLKLKLKJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:9:9:65656565212121210/0/0/0/,+,+,+,+*)*)*)*)('('('&%$#$#$#$#"!"!"!"!     ZYZYZYZYXWXWXWXWTSTSTSTSRQRQPOPOMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:9:9:65656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     ZYZYZYZYXWXWXWXWTSTSTSTSPOPOOOOOMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<9:9:987865656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEDABABABAB?@?@?@?@;<;<;<;<7878787865555556212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!      ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<7878787856565656212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<7878787856565656212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?>;<;<;<;<7878787856565656212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         QQRRSSTT334455;;=<<;;::9DEEFFGGH UTTSSRRQxyyzz{{|5;;<<==> !!""$$##""!!ppoonnmm]]^^__``UUVVWWXX<<==>>??98877665HIIJJKKLQPPOONNM|}}~~>??@@AAB##$$%%&& llkkjjiiaabbccddYYZZ[[\\@@AABBCC54433221~~}LMMNNOOPMLLKKJJIBCCDDEEF''(())**hhggffeeeeffgghh~~}}]]^^__``DDEEFFGG 100//..-}||{{zzyPQQRRSSTIHHGGFFEFGGHHIIJ++,,--..ddccbbaaiijjkkll||{{zzyyaabbccddHHIIJJKK !!""##$-,,++**)yxxwwvvuTUUVVWWX + + EDDCCBBAJKKLLMMN//001122``__^^]]mmnnooppxxwwvvuueeffgghhLLMMNNOO$%%&&''()((''&&%uttssrrqXYYZZ[[\ A@@??>>=NOOUUVVW33445567 \\[[ZZYYqqrrssttttssrrqqiijjkkllUUVVWWXX())**++,%$$##""!qppoonnm\]]^^__`=<<;;::9WXXYYZZ[89:;;<<= + + XXWWVVUUuuvvwwxxppoonnmmmmnnooppYYZZ[[\\,--..//0! mllkkjji`aabbccd98877665[\\]]^^_=>>??@@ATTSSRRQQyyzz{{||llkkjjiiqqrrsstt]]^^__``01122334ihhggffedeeffggh54433221~~}_``aabbcABBCCDDEPPOONNMM}}~~hhggffeeuuvvwwxxaabbccdd45566778eddccbbahiijjkkl 100//..-}||{{zzycddeeffgEFFGGHHILLKKJJIIddccbbaayyzz{{||eeffgghh899::;;<a``__^^]lmmnnoop !!""##$-,,++**)yxxwwvvughhiioopIJJKKLLMHHGGFFEE``__^^]]}}~~iiooppqq<==>>??@ ]\\[[ZZYpqqrrsst$%%&&''()((''&&%uttssrrqpqqrrsstMNNOOPQR + + DDCCBBAA\\[[ZZYYrrssttuu@AABBCCD + + YXXWWVVUtuuvvwwx())**++,%$$##""!qppoonnmtuuvvwwxSTUUVVWW @@??>>==XXWWVVUUvvwwxxyyDEEFFGGH UTTSSRRQxyyzz{{|,--..//0! mllkkjjixyyzz{{|XXYYZZ[[<<;;::99TTSSRRQQzz{{||}}HIIJJKKLQPPOONNM|}}~~01122334ihhggffe|}}~~\\]]^^__88776655PPOONNMM~~LMMNNOOPMLLKKJJI45566778eddccbba``aabbcc44332211~~}}LLKKJJIIPQQRRSSTIHHGGFFE899::;;<a``__^^]ddeeffgg 00//..--||{{zzyyHHGGFFEE~~}}||TUUVVWWX + + EDDCCBBA<==>>??@ ]\\[[ZZYhhiijklm!!""##$$,,++**))xxwwvvuuDDCCBBAA{{zzyyxxXYYZZ[[\ A@@??>>=@AABBCCD + + YXXWWVVUnooppqqr%%&&''((((''&&%%ttssrrqq@@??>>==wwvvuutt\]]^^__`=<<;;::9DEEFFGGH UTTSSRRQ~~}}||{rssttuuv))**++,,$$##""!!ppoonnmm<<;;::99ssrrqqpp~~}}|`aabbccd98877665HIIJJKKLQPPOONNM{zzyyxxwvwwxxyyz--..//00 llkkjjii88776655ooiihhgg|{{zzyyxdeeffggh54433221~~}LMMNNOOPMLLKKJJIwvvuuttsz{{||}}~11223344hhggffee44332211ffeeddccxwwvvuuthiijjkkl 100//..-}||{{zzyPQQRRSSTIHHGGFFEsrrqqppo~55667788ddccbbaa00//..--bbaa``__tssrrqqplmmnnoop !!""##$-,,++**)yxxwwvvuTUUVVWWX + + EDDCCBBAoiihhggf99::;;<<``__^^]],,++**))^^]]\\[[poonmlkjpqqrrsst$%%&&''()((''&&%uttssrrqXYYZZ[[\ A@@??>>=feeddccb==>>??@@ \\[[ZZYY((''&&%%ZZYYXXWWiihhggfftuuvvwwx())**++,%$$##""!qppoonnm\]]^^__`=<<;;::9baa``__^AABBCCDD + + XXWWVVUU$$##""!!VVUUOONNeeddccbbxyyzz{{|,--..//0! mllkkjji`aabbccd98877665^]]\\[[ZEEFFGGHHTTSSRRQQ MMLLKKJJaa``__^^|}}~~01122334ihhggffedeeffggh54433221ZYYXXWWVIIJJKKLLPPOONNMM!!""##$$IIHHGGFF]]\\[[ZZ45566778eddccbbahiijjkkl 100//..-VUUOONNM~~}}MMNNOOPPLLKKJJII%%&&''((EEDDCCBBYYXXWWVV899::;;<a``__^^]lmmnnoop !!""##$-,,++**)MLLKKJJI||{{zzyyQQRRSSTTHHGGFFEE))**++,,AA@@??>>UUTSRQPO<==>>??@ ]\\[[ZZYpqqrrsst$%%&&''()((''&&%IHHGGFFExxwwvvuuUUVVWWXX + + DDCCBBAA--..//00 ==<<;;55ONNMMLLK@AABBCCD + + YXXWWVVUtuuvvwwx())**++,%$$##""!EDDCCBBAttssrrqqYYZZ[[\\ @@??>>==11223344 + + 44332211KJJIIHHGDEEFFGGH UTTSSRRQxyyzz{{|,--..//0! A@@??>>=ppoonnmm]]^^__``<<;;::9955667788 + + 00//..--GFFEEDDCHIIJJKKLQPPOONNM|}}~~01122334=<<;;554llkkjjiiaabbccdd8877665599::;;<< ,,++**))CBBAA@@?~~}LMMNNOOPMLLKKJJI4556677843322110hhggffeeeeffgghh44332211==>>??@@((''&&%%?>>==<<;}||{{zzyPQQRRSSTIHHGGFFE899::;;<0//..--,ddccbbaaiijjkkll 00//..--AABBCCDD$$##""!!;:987655yxxwwvvuTUUVVWWX + + EDDCCBBA<==>>??@ ,++**))(``__^^]]mmnnoopp!!""##$$,,++**))EEFFGGHH44332211uttssrrqXYYZZ[[\ A@@??>>=@AABBCCD + + (''&&%%$\\[[ZZYYqqrrsstt%%&&''((((''&&%%IIJJKKLL 00//..--qppoonnm\]]^^__`=<<;;::9DEEFFGGH $##""!!XXWWVVUUuuvvwwxx))**++,,$$##""!!MMNNOOPP!!""##$$,,++**))mllkkjji`aabbccd98877665HIIJJKKLTTSSRRQQyyzz{{||--..//00 QQRRSSTT%%&&''(( ((''&&%%ihhggffedeeffggh54433221~~}LMMNNOOPPPOONNMM}}~~11223344UUVVWWXX))**++,, + + $$##""!!eddccbbahiijjkkl 100//..-}||{{zzyPQQRRSST + + LLKKJJII55667788YYZZ[[\\--..//00 + + a``__^^]lmmnnoop !!""##$-,,++**)yxxwwvvuTUUVVWWX  HHGGFFEE99::;;<<]]^^__``11223344]\\[[ZZYpqqrrsst$%%&&''()((''&&%uttssrrqXYYZZ[[\ + + DDCCBBAA==>>??@@ aabbccdd55667788YXXWWVVUtuuvvwwx())**++,%$$##""!qppoonnm\]]^^__`@@??>>==AABBCCDD + + eeffgghh99::;;<<UTTSSRRQxyyzz{{|,--..//0! mllkkjji`aabbccd!<<;;::99EEFFGGHHiijjkkll==>>??@@!!"" +QPPOONNM|}}~~01122334ihhggffedeeffggh!""##$$% + + 88776655IIJJKKLLmmnnooppAABBCCDD##$$%%&& + MLLKKJJI45566778eddccbbahiijjkkl%&&''(() 44332211~~}}MMNNOOPPqqrrssttEEFFGGHH''(())**IHHGGFFE899::;;<a``__^^]lmmnnoop)**++,,-00//..--||{{zzyyQQRRSSTTuuvvwwxxIIJJKKLL++,,--.. + + EDDCCBBA<==>>??@ ]\\[[ZZYpqqrrsst-..//001,,++**))xxwwvvuuUUVVWWXX + + yyzz{{||MMNNOOPP//001122 A@@??>>=@AABBCCD + + YXXWWVVUtuuvvwwx12233445((''&&%%ttssrrqqYYZZ[[\\ }}~~55667788ZZYYXXWWtssrrqqpeffgghhi43322110~~}}|MNNOOPPQLKKJJIIHvuuttssr{||}}~~22334455ggffeeddffgghhii33221100zzyyxxwwJKKLLMMNONNMMLLK~23344556ZYYXXWWV]\\[[ZZY99::;;<<VVUUOONNpoonmlkjijjkkllm !0//..--,|{{zzyyxQRRSSTTU HGGFFEEDrqqppooi66778899ccbbaa``jjkkllmm !!//..--,,vvuuttssNOOPPQQRKJJIIHHG6778899:VUUOONNMYXXWWVVU==>>??@@ MMLLKKJJiihhggffmnnooppq!""##$$%,++**))(xwwvvuutUVVWWXXY + + DCCBBAA@ihhggffe::;;<<==__^^]]\\nnooppqq""##$$%%++**))((rrqqppooRSSTTUUV +GFFEEDDC:;;<<==>MLLKKJJIUTTSSRRQAABBCCDD + + IIHHGGFFeeddccbbqrrssttu%&&''(()(''&&%%$tssrrqqpYZZ[[\\] @??>>==>??@@AA [[ZZYYXXrrssttuu&&''(())''&&%%$$iihhggffVWWXXYYZ + CBBAA@@?>??@@AAB IHHGGFFEQPPOONNMEEFFGGHHEEDDCCBBaa``__^^uvvwwxxy)**++,,-$##""!! poonnmml]^^__``a<;;::998a``__^^]BBCCDDEE + + WWVVUUTTvvwwxxyy**++,,--##""!! eeddccbb~~}}||{Z[[\\]]^?>>==<<;BCCDDEEF + + EDDCCBBAMLLKKJJIIIJJKKLLAA@@??>>]]\\[[ZZyzz{{||}-..//001 lkkjjiihabbccdde87766554]\\[[ZZYFFGGHHIISSRRQQPPzz{{||}}..//0011aa``__^^{zzyyxxw^__``aab;::99887FGGHHIIJA@@??>>=IHHGGFFE~~}}MMNNOOPP==<<;;55YYXXWWVV}~~12233445hggffeedeffgghhi43322110YXXWWVVUJJKKLLMMOONNMMLL~~22334455]]\\[[ZZwvvuuttsbccddeef76655443JKKLLMMN=<<;;554EDDCCBBA||{{zzyyQQRRSSTT44332211UUTSRQPO56677889dccbbaa`ijjkkllm !0//..--,UOONNMML~~}}||NNOOPPQQKKJJIIHH66778899YYXXWWVVsrrqqppofgghhiij3221100/~~}}||{NOOPPQQR43322110A@@??>>=xxwwvvuuUUVVWWXX + + 00//..--ONNMMLLK9::;;<<=`__^^]]\mnnooppq!""##$$%,++**))(LKKJJIIH{{zzyyxxRRSSTTUU GGFFEEDD::;;<<==UUOONNMMonmlkjiijkkllmmn !!"/..--,,+{zzyyxxwRSSTTUUV +0//..--,=<<;;::9ttssrrqqYYZZ[[\\ ,,++**))KJJIIHHG=>>??@@A \[[ZZYYXqrrssttu%&&''(()(''&&%%$HGGFFEEDwwvvuuttVVWWXXYY + + CCBBAA@@>>??@@AA LLKKJJIIhhggffeenooppqqr"##$$%%&+**))(('wvvuuttsVWWXXYYZ + ,++**))(98877665ppoonnmm]]^^__``((''&&%%GFFEEDDCABBCCDDE + + XWWVVUUTuvvwwxxy)**++,,-$##""!! DCCBBAA@ssrrqqppZZ[[\\]]??>>==<>==>==<<;IJJKKLLMPOONNMML}~~12233445<;;55443kkjjiihhbbccddee77665544JJKKLLMM@@??>>==\\[[ZZYYz{{||}}~.//00112kjjiihhgbccddeef-,,++**)ddccbbaaiijjkkll ;:987655~~}}|MNNOOPPQLKKJJIIH566778893221100/ggffeeddffgghhii33221100~~}}||NNOOPPQQ<<;;5544XXWWVVUU~23344556gffeeddcfgghhiij)((''&&%``__^^]]mmnnoopp!!""##$$44332211|{{zzyyxQRRSSTTU HGGFFEED9::;;<<=/..--,,+ccbbaa``jjkkllmm !!//..--,,{{zzyyxxRRSSTTUU 33221100TSRQPOON6778899:cbbaa``_jkkllmmn !!"%$$##""!\\[[ZZYYqqrrsstt%%&&''(( 00//..--xwwvvuutUVVWWXXY + + DCCBBAA@=>>??@@A +**))(('__^^]]\\nnooppqq""##$$%%++**))((wwvvuuttVVWWXXYY + + //..--,,NMMLLKKJ:;;<<==>_^^]]\\[nooppqqr"##$$%%& ! XXWWVVUUuuvvwwxx))**++,, + + ,,++**))tssrrqqpYZZ[[\\] @??>>==??@@AAB [ZZYYXXWrssttuuv&''(())* + + +TTSSRRQQyyzz{{||--..//00((''&&%%poonnmml]^^__``a<;;::998EFFGGHHI#""!!WWVVUUTTvvwwxxyy**++,,--##""!! oonnmmll^^__``aa''&&%%$$FEEDDCCBBCCDDEEF + + WVVUUTTSvwwxxyyz*++,,--. + PPOONNMM}}~~11223344 $$##""!!lkkjjiihabbccdde87766554IJJKKLLMSSRRQQPPzz{{||}}..//0011kkjjiihhbbccddee##""!!BAA@@??>FGGHHIIJSRRQQPPOz{{||}}~.//00112LLKKJJII55667788 + + hggffeedeffgghhi43322110~~}}|MNNOOPPQ OONNMMLL~~22334455ggffeeddffgghhii>==<<;;:JKKLLMMNONNMMLLK~23344556 HHGGFFEE99::;;<<dccbbaa`ijjkkllm !0//..--,|{{zzyyxQRRSSTTU + + KKJJIIHH66778899ccbbaa``jjkkllmm !!98765544~~}}||{NOOPPQQRKJJIIHHG6778899: + + DDCCBBAA==>>??@@`__^^]]\mnnooppq!""##$$%,++**))(xwwvvuutUVVWWXXY  +GGFFEEDD::;;<<==__^^]]\\nnooppqq""##$$%%33221100{zzyyxxwRSSTTUUV +GFFEEDDC:;;<<==>!!""# + + @@??>>==AABBCCDD\[[ZZYYXqrrssttu%&&''(()(''&&%%$tssrrqqpYZZ[[\\] + CCBBAA@@>>??@@AA [[ZZYYXXrrssttuu&&''(()) //..--,,wvvuuttsVWWXXYYZ + CBBAA@@?>??@@AAB#$$%%&&' <<;;::99EEFFGGHH!!"" +XWWVVUUTuvvwwxxy)**++,,-$##""!! poonnmml]^^__``a??>>==<>==<<;BCCDDEEF'(())**+88776655IIJJKKLL##$$%%&& + TSSRRQQPyzz{{||}-..//001 lkkjjiihabbccdde!!" ;;::9988FFGGHHIISSRRQQPPzz{{||}}..//0011''&&%%$$onnmmllk^__``aab;::99887FGGHHIIJ+,,--../44332211~~}}MMNNOOPP''(())**POONNMML}~~12233445hggffeedeffgghhi"##$$%%& + + 77665544JJKKLLMMOONNMMLL~~22334455 + +##""!! kjjiihhgbccddeef76655443JKKLLMMN/001122300//..--||{{zzyyQQRRSSTT++,,--..LKKJJIIH56677889dccbbaa`ijjkkllm&''(())* 33221100~~}}||NNOOPPQQKKJJIIHH66778899 gffeeddcfgghhiij3221100/~~}}||{NOOPPQQR34455;;< ,,++**))xxwwvvuuUUVVWWXX//001122 HGGFFEED9::;;<<=`__^^]]\mnnooppq*++,,--.//..--,,{{zzyyxxRRSSTTUU GGFFEEDD::;;<<==cbbaa``_jkkllmmn !!"/..--,,+{zzyyxxwRSSTTUUV<==>>??@ !!""##$((''&&%%ttssrrqqYYZZ[[\\334455;; + + DCCBBAA@=>>??@@A \[[ZZYYXqrrssttu.//00112++**))((wwvvuuttVVWWXXYY + + CCBBAA@@>>??@@AA_^^]]\\[nooppqqr"##$$%%&+**))(('wvvuuttsVWWXXYYZ@AABBCCD$%%&&''($$##""!!ppoonnmm]]^^__``<<==>>?? @??>>==>==<>? !!""####""!! oonnmmll^^__``aa;;::9988FFGGHHII!!""## + + WVVUUTTSvwwxxyyz*++,,--.#""!! onnmmllk^__``aabHIIJJKKL,--..//0hhggffeeeeffgghhDDEEFFGG87766554IJJKKLLMPOONNMML}~~?@@AABBC$$%%&&''kkjjiihhbbccddee77665544JJKKLLMM$$%%&&'' SRRQQPPOz{{||}}~.//00112kjjiihhgbccddeefLMMNNOOU01122334ddccbbaaiijjkkllHHIIJJKK43322110~~}}|MNNOOPPQLKKJJIIHCDDEEFFG(())**++ggffeeddffgghhii33221100~~}}||NNOOPPQQ(())**++ONNMMLLK~23344556gffeeddcfgghhiijUVVWWXXY45566778``__^^]]mmnnooppLLMMNNOO !0//..--,|{{zzyyxQRRSSTTU HGGFFEEDGHHIIJJK,,--..//ccbbaa``jjkkllmm !!//..--,,{{zzyyxxRRSSTTUU,,--..//KJJIIHHG6778899:cbbaa``_jkkllmmnYZZ[[\\]899::;;< \\[[ZZYYqqrrssttUUVVWWXX!""##$$%,++**))(xwwvvuutUVVWWXXY + + DCCBBAA@KLLMMNNO00112233__^^]]\\nnooppqq""##$$%%++**))((wwvvuuttVVWWXXYY00112233 +GFFEEDDC:;;<<==>_^^]]\\[nooppqqr]^^__``a<==>>??@ + + XXWWVVUUuuvvwwxxYYZZ[[\\%&&''(()(''&&%%$tssrrqqpYZZ[[\\] @??>>==??@@AAB [ZZYYXXWrssttuuvabbccdde@AABBCCDTTSSRRQQyyzz{{||]]^^__``)**++,,-$##""!! poonnmml]^^__``a<;;::998XYYZZ[[\:;;<<==> + + WWVVUUTTvvwwxxyy**++,,--##""!! oonnmmll^^__``aa==>>??@@?>>==<<;BCCDDEEF + + WVVUUTTSvwwxxyyzeffgghhiDEEFFGGHPPOONNMM}}~~aabbccdd-..//001 lkkjjiihabbccdde87766554\]]^^__`>??@@AABSSRRQQPPzz{{||}}..//0011kkjjiihhbbccddeeAABBCCDD;::99887FGGHHIIJSRRQQPPOz{{||}}~iooppqqrHIIJJKKLLLKKJJIIeeffgghh12233445hggffeedeffgghhi43322110~~}}|`aabbccdBCCDDEEFOONNMMLL~~22334455ggffeeddffgghhiiEEFFGGHH76655443JKKLLMMNONNMMLLK~rssttuuvLMMNNOOPHHGGFFEEiiooppqq56677889dccbbaa`ijjkkllm !0//..--,|{{zzyyxdeeffgghFGGHHIIJKKJJIIHH66778899ccbbaa``jjkkllmmIIJJKKLL3221100/~~}}||{NOOPPQQRKJJIIHHGvwwxxyyzPQQRRSST + + DDCCBBAArrssttuu9::;;<<=`__^^]]\mnnooppq!""##$$%,++**))(xwwvvuuthiiooppqJKKLLMMN GGFFEEDD::;;<<==__^^]]\\nnooppqqMMNNOOUU !!"/..--,,+{zzyyxxwRSSTTUUV +GFFEEDDCz{{||}}~TUUVVWWX @@??>>==vvwwxxyy=>>??@@A \[[ZZYYXqrrssttu%&&''(()(''&&%%$tssrrqqpqrrssttuNOOPQRST + + CCBBAA@@>>??@@AA [[ZZYYXXrrssttuuVVWWXXYY"##$$%%&+**))(('wvvuuttsVWWXXYYZ + CBBAA@@?~XYYZZ[[\<<;;::99zz{{||}}ABBCCDDE + + XWWVVUUTuvvwwxxy)**++,,-$##""!! poonnmmluvvwwxxyUUVVWWXX??>>==<>==<<;~~}\]]^^__`88776655~~}}||~~EFFGGHHITSSRRQQPyzz{{||}-..//001 lkkjjiihyzz{{||}YYZZ[[\\;;::9988FFGGHHIISSRRQQPPzz{{||}}^^__``aa*++,,--.#""!! onnmmllk^__``aab;::99887~~}}||{}||{{zzy`aabbccd44332211{{zzyyxxIJJKKLLMPOONNMML}~~12233445hggffeed}~~]]^^__``77665544JJKKLLMMOONNMMLL~~bbccddee.//00112kjjiihhgbccddeef76655443{zzyyxxwyxxwwvvudeeffggh 00//..--wwvvuuttMNNOOPPQLKKJJIIH56677889dccbbaa`aabbccdd33221100~~}}||NNOOPPQQKKJJIIHHffgghhii23344556gffeeddcfgghhiij3221100/wvvuuttsuttssrrqhiijjkkl!!""##$$,,++**))ssrrqqppQRRSSTTU HGGFFEED9::;;<<=`__^^]]\eeffgghh !!//..--,,{{zzyyxxRRSSTTUU GGFFEEDDooppqqrr6778899:cbbaa``_jkkllmmn !!"/..--,,+srrqqppoqppoonnmlmmnnoop%%&&''((((''&&%%ooiihhggUVVWWXXY + + DCCBBAA@=>>??@@A \[[ZZYYXiijklmno""##$$%%++**))((wwvvuuttVVWWXXYY + + CCBBAA@@ssttuuvv:;;<<==>_^^]]\\[nooppqqr"##$$%%&+**))(('oiihhggfmllkkjjipqqrrsst))**++,,$$##""!!ffeeddcc~~}}|YZZ[[\\] @??>>==>==<??@@AAB [ZZYYXXWrssttuuv&''(())*'&&%%$$#feeddccbihhggffetuuvvwwx--..//00 bbaa``__|{{zzyyx]^^__``a<;;::998EFFGGHHITSSRRQQP~}}||{{zsttuuvvw**++,,--##""!! oonnmmll^^__``aa;;::9988{{||}}~~BCCDDEEF + + WVVUUTTSvwwxxyyz*++,,--.#""!! baa``__^eddccbbaxyyzz{{|11223344^^]]\\[[xwwvvuutabbccdde87766554IJJKKLLMPOONNMMLzyyxxwwvwxxyyzz{..//0011kkjjiihhbbccddee77665544~~}}||{{FGGHHIIJSRRQQPPOz{{||}}~.//00112^]]\\[[Za``__^^]|}}~~ZHAb|ZdQb`ےfH~Qr˂pfpvZp˂dtAQr˂pbtlrXQ~f`vr˂pfpvp˂rے`JXQtlJrXQJ`f`vXZHAbnXv`rXQJ`JltZHAbJtArdJ`ےXnvZHAbnXv`XQJ`ےr˂ptArdےbHAnvpے`JXf~HbHAbnvpے`JX|ZdQbHAZppfH~ے`JXQf~HbHAZZHAb|ZdQbZp˂fH~Qr˂pfpvZp˂fHQr˂pbtlrXQf`vr˂pfpvp˂rے`JXQtlJrXQJ`f`vXZHAbnXv`rXQJ`f`vXZHAbJtArdJ`ےXnvZHAbnXv`XQJ`ےr˂ptArdےbHAnvpے`JXf~HbHAnvpے`JXf~HbHAXQJ`pfH~ے`JXQf~HbHAZZHAb|ZdQbXQJ`ےfH~Qr˂pfpvZp˂fH~Qr˂pfpvےbHfvXnr˂pfpvp˂rے`JXQtlJbHAZf`vXZHAbnXv`rXQJ`f`vXZHAbnXv`AZp˂vpfHZHAےnXv`XQJ`ےr˂ptArdp˂rnvpے`JXf~HbHAnvpے`JXf~HrXQJ`~f``JXQrf~HbHAZZHAb|ZdQbXQJ`ےfH~Qr˂pfpvZp˂fH~Qr˂pfpvےbHvXnbtlfpvp˂rے`JXQtlJbHAZf`vXZHAbnXv`rXQJ`f`vXZHAbnXv`AZp`ۅvpfHJtAdnXv`XQJ`ےr˂ptArdp`ےnvpے`JXf~HbHAnvpے`JXf~HbHA~fv|ZdQbf~HbHAZZHAb|ZdQbbHAZpfH~Qr˂pfpvZp˂fH~Qr˂pfpvZp˂nvptlJfpvdrtAے`JXQtlJ˂rXQf`vXZHAۅnXv`rXQJ`f`vXZHAbnXv`rXQJ`fH~tArdnXv`Jltr˂ptArdJ`ےnvp`JXQf~HbHAnvpے`JXf~HbHAf`vX|ZdQbf~HbdQZ|ZHAbf~HbHAZpfH~rbtlfpvZp˂fH~Qr˂pfpvZp˂nvptlJfpvdrtAے`JXQXv`f˂bf`vXJtAdnXv`rXQJ`f`vXZHAbnXv`bHAZfH~tArdnXv`Jltr˂p~HfHAZdnvp|ZdQf~HbHAnvpے`JXf~HdrtAdf`vn|ZdQbf~HbdQZ|ZHAbpvnrtAJfH~btlfpvZdrtfH~Qr˂pfpvQZ|dvpfHtlJfpvdrtAے`JXQXv`fbdQZ|f`vXJtArdnXv`AJltf`vXZHAۅnXv`rtAJl~f`tArdnXv`Jltr˂p~HfdrtAnvp|ZdQf~HbdQZ|nvp`JXQf~HtbdvXn|ZdQbf~HbdQZ|ZHAbp`fJltfH~btlfpvdrtfH~rbtlfpvQZ|dvpfHtlJfpvdrtAے`JXQ~HfpbdQZ|f`vXJtArdnXv`AJltf`vXJtAdnXv`rtAJl~f`tArdnXv`Jltr˂pvnXdrtAnvp|ZdQf~HbdQZ|nvp|ZdQf~H|dvXnvf|ZdQbf~HbdQZ|H~fZHAbv`fJlbQZfH~btlfpvdrtfH~btlfpvrtAJlH~ftlJfpvdrtA`vXnے`JXQ~Hfp|drf`vXJtArdnXv`AJltf`vXJtArdnXv`tbdQZHAbtArdnXv`Jltvpfr˂pv~tAJlnvp|ZdQf~HbdQZ|nvp|ZdQf~HZ|dے`JXQ|ZdQbfHfbdQZ|H~fZHAbHfpvtbdQZfH~btlfpvdrtfH~btlfpvrtAJlr˂ptlJpvndrtA`vXnے`JXQnXv|drf`vXJtArdnXv`AJltf`vXJtArdnXv`tdrtZHAbtArdrXQJ`Jltvpfr˂p`f~tAJlnvp|ZdQf~HbdQZ|nvp|ZdQf~HAJltے`JXQ|ZdQbےHAZbdQZ|H~fZHAbHfpvtbQZdfH~btlfpvdrtfH~btlfpvbdQZ|r˂ptlJp˂rdrtA`vXnے`JXQnXHrtAJlfZHAbJtArdnXv`AJltf`vXJtArdnXv`drtZHAbtArdXQJ`ےJltvpfr˂pfpvtbdے`JX|ZdQfHbdQZ|nvp|ZdQf~HAJltے`JXQ|ZdQbbHAZbdQZ|H~f|ZdQbnXv`QZ|dQr˂pbtlfpvdrtfH~btlfpvbdQtAr˂ptlJp˂rdrtA`vXntlJf~HrtAJlZHAbJtArdnrXQJ`AJltf`vXJtArdnXv`JltZHAbtArdXQJ`ےJltvpftArdfpvtbdے`JX|ZdQےHAbdQZ|nvp|ZdQf~HbdQZ|ے`JXQ|ZdQbbHAZbdQZ|H~f|ZdQbnXv`QZrtAQr˂pbtlZp˂drtfH~btlfpvdrtAr˂ptlJp˂rdrtA`vXntlJpvnJltZHAbJtArdrXQJ`AJltfZHAbJtArdnXv`JltZHAbtArdXQJ`ےJltvpftArdXv`fbdQZ|ے`JX|ZdQbHAbdQZ|ے`JX|ZdQfHbdQZ|lے`JXQ|ZdQbbHAZbdQZ|H~f|ZdQb~HfdrtAQr˂pbtlZp˂drtQr˂pbtlfpvtbdr˂ptlJp˂rdrtA`vXntlJpvnJltZHAbJtArdrXQJ`AJltZHAbJtArdnrXQJ`QZ|dZHAbtArdXQJ`ےJltvpftArdXv`pbdQZ|ے`JX|ZdQbHAbdQZ|ے`JX|ZdQp˂rtAJlے`JXQ|ZdQbbHAZbdQZ|H~f|ZdQb˂rXQrAJlQr˂pbtlZp˂drtQr˂pbtlrXQJ`ۑtbdr˂ptlJp˂rdrtA`vXntlJJ`ےtbdQZHAbJtArdrXQJ`AJltZHAbJtArdbHAQZ|lZHAbtArdXQJ`ےJltvpftArdbHAZpZ|dے`JX|ZdQbHAbdQZ|ے`JX|ZdQZp˂tbnے`JXQf~HbHAZbdQZ|H~f|ZdQb˂rXQrtAJlQr˂pbtlZp˂drtQr˂pbtlrXQJ`pvpfr˂pfpvp˂rdtAJ`vXntlJJ`p˂tbdQZHAbJtArdrXQJ`AJltZHAbJtArd˂rXf`vXZHAbnXv`XQJ`ےltbvpftArdrXQJZ|dnے`JX|ZdQbHAbdQZ|ے`JX|ZdQQJ`ےnvpے`JXQf~HbHAZnvpH~f|ZdQb`ےbvfQr˂pbtlZp˂drtQr˂pbtlbHAZpfH~r˂pfpvp˂rfHf`vXntlJHAZp˂f`vXZHAbJtArdrXQJ`AJltZHAbJtArd˂rXf`vXZHAbnXv`XQJ`ے`vXnvpftArdrXQJnvpے`JXf~HbHAbdQZ|ے`JX|ZdQQJ`ےnvpfے`JXQf~HbHAZvpfH~f`vXntArdnXv`rtAJlZHAbArd|QJ`ےJltZHAbArd|rXQJ`JltpZHAJtArdJ`ےltbHAbےrd|J`ےltbJXQrdQtArdJ`ےtbnAbے`rd|J`ےtbdbے`pfH~ㅀvpf|ZdQbf~Htdr`JQrZdQbtbHAZpbdQZ|`JXQZdQbtHAZpbdQZ|bے`p|ZdbHAZpdQZ|`JXQrZdQbtbHAZpdQZ|˂pZHAf~bHAZp˅vpfHJXQrZdQbtbHAZpQZ|dJXQHAbf۝`vH~ftlJfpvtAJlpZHAblJt˂rXdrtAr˂plJt˂rXdrtAZHAbQbJtA˂rXQdrtAJ˂pZlJtA˂rXQdrtAJbے`HfvnXrXQf`˂pZHlJtArXQrtAJlے`JXXnvˍZHAbtArdnXv`tbdQZے`JArd|QJ`ےJltZHAbArd|QJ`ےJltے`JXrdfJ`ےltbHAbےrd|J`ےltbpZHAbv`fJ`ےvXnAbے`rdfJ`ےtbdQr˂ppfH~ے`JXQ|ZdQbfHf|drXQr˂ZdQbtbHAZpbdQZ|`JXQZdQbtbHAZpbdQZ|Qr˂p~HfbHAZpdQZ|`JXQrZdQbtbHAZpdQZ|ے`J~HfpbHAZpvpfHJXQr~HfpbHAZpQZ|dZHAbf۝`vr˂ptlJpvntAJlpZHAblJt˂rXdrtAr˂plJt˂rXdrtAZHAbpvn˂rXQdtAJl˂pZlJtA˂rXQdrtAJXQr˂vnXrXQ~f`˂pZHvnXrXQtAJlے`JXXnvˍZHAbtArdrXQJ`tbdQtAے`JArd|QJ`ےJltZHAbArd|QJ`ےJltے`JXXv`fJ`ےtbnHAbےrd|J`ےltbpZHAbv`fJ`ےvXnAbے`v`fJ`ےtbnQrpfH~ے`JXQ|ZdQbےHAZJltXQrZHZdQbtbHAZpbdQZ|`JXQZdQbtbHAZpbdQZ|QHAbې~HfbHAZpvpf`JXQrZdQbtbHAZpdQZ|ے`J~HfpbHAZpvpfHJXQr~HfpbHAZp˅vpfH`JXQf۝`vr˂ptlJp˂rbdQZ|Abے`lJt˂rXdrtAr˂plJt˂rXdrtA`JXQpvn˂rXQHf`˂pZlJtA˂rXQdrtAJXQHAbvnv`rXQ~f`˂pZHvnXrXQf`r˂pXnvˍZHAbtArdXQJ`ےdrtAJXQrArdQJ`ےJltZHAbArd|QJ`ےJltr˂pXv`fJ`ےvXnHAbےrdfJ`ےltbے`JXQf~HJ`ےvXnAbے`v`fJ`ےvXnZHAbpfH~ے`JXQ|ZdQbbHAZJlt˂pZHf~HbHAZpbdQZ|`JXQZdQbtbHAZpbdQZ|ZHAbې~HfbHAZpvpfH`JXQr~HfbHAZpdQZ|r˂pfpvbHAZpvpfHJXQr~HfpbHAZpvpfH`JXQf۝`vr˂ptlJp˂rbdQZ|Abے`fpv˂rXdtAJlr˂plJt˂rXdrtA`JXQpvn˂rXQ~f`˂pZpvn˂rXQdtAJlZHAbnXv`rXQ~f`˂pZHvnXrXQ~f`r˂p`XnvˍZHAbtArdXQJ`ےltbJXQrnXv`QJ`ےtbZHAbArd|QJ`ےJltrے`Xv`fJ`ےvXnHAbےXv`fJ`ےtbnے`JXQf~HJ`ےvXnAbے`v`fJ`ےvXnہJXQrpfH~ے`JXQ|ZdQbbHAZdQZ|ZAbf~HbHAZpnvp`JXQZdQbtbHAZpbdQZ|JXQr~HfbHAZpvpfH`JXQr~HfbHAZpvpfrےfpvbHAZpvpfHJXQr~HfpbHAZpvpfH˂pZHf۝`vr˂ptlJp˂rdrtAJے`JXQfpv˂rXfHf`r˂plJt˂rXdrtA˂pZHpvn˂rXQ~f`˂pZpvn˂rXQHf``JXQrnvf󂀉rXQ~f`˂pZHvnXrXQ~f`Abے`XnvˍZHAbtArdXQJ`ےltbr˂pnXv`QJ`ےvXnZHAbArdQJ`ےJltAbے`Xv`fJ`ےvXnHAbےXv`fJ`ےvXn˂pZ~HfpJ`ےvXnAbے`v`fJ`ےvXnہJXQrpfH~ے`JXQ|ZdQbbHAZdQZ|lZHAbf~HbHAZpvpfH`JXQf~HbHAZpbdQZ|JXQr~HfbHAZpvpfH`JXQr~HfbHAZpvpfHHAbےvnXbHAZdvpfHJXQr~HfpbHAZpvpfH˂p`Zf۝`vr˂ptlJp˂rtbnے`JXQfpv˂rX~f`r˂pfpv˂rXdtAJl˂p`pvn˂rXQ~f`˂pZpvn˂rXQ~f``JXQrv`frtAJl~f`˂pZHvnXrXQ~f`QXb㉀XnvˍZHAbtArdXQJ`ےvp`r˂pnXv`QJ`ےvXnZHAbnXv`QJ`ےtbJXQrXv`fJ`ےvXnHAbےXv`fJ`ےvXn˂p`~HfpۑtbdvXnAے`v`fJ`ےvXnۑpJAHrpfH~ے`JXQ|ZdQbbHAZvXnZAb`f~HbHAZpvpfH`JXQf~HbHAZpnvp`pZHA㐕~HfbHAZpvpfH`JXQr~HfbHAZpvpfHJXQrvnXvQZ|dvpfHJXQrbt~HfpbHAZpvpfH󙐂ˁ`Zf۝`vr˂ptlJp˂rvpfHJXQrfpv˂rX~f`r˂pfpv˂rXvXnbے`pvn˂rXQ~f`˂pZpvn˂rXQ~f`˂pZHAf~HfrtAJl~f`lJtvnXrXQ~f`QXb㉀XnvˍZHAbtArdXQJ`ے~f`pZHAnXv`QJ`ےvXnZHAbnXv`QJ`ےvpfHJXQrXv`fJ`ےvXnHAbےXv`fJ`ےvXnbے`pvntbdvXnAd|v`fJ`ےvXnۑp`ZQp|drے`JXQf~HbHAZvXnbے`f~HbHAZpvpfH`JXQf~HbHAZp~f`p`JX~HfbHAZvpfH`JXQr~HfbHAZpvpfHJXQrXv`fQZ|dvpfHZdQbt~HfpbHAZdvpfHXb㉀ۑQtJlr˂pfpvp˂rvp`vJXQrfpv˂rX~f`r˂pfpv˂rXvXnQrbtpvndrtAJ~f`˂pZpvn˂rXQ~f`˂p`J~HfrtAJl~f`lJtAvnXrtAJl~f`pJAHrtbAdZZHAbnXv`XQJ`ےXnvpZA`nXv`QJ`ےvXnZHAbnXv`QJ`ےvp`lJA|Xv`fltbvXnHAے`Xv`fJ`ےvXnXQrbtpvntbdvXnrd|v`ftbdvXnېˁ`ZQ|drے`JXQf~HbHAZpfH~JXQrf~HbHAZpvpfH`JXQf~HbHAZpvXnہZdQbt~HfdQZ|vpfHJXQrb~HfbHAZpvpfHl|ZXv`fQZ|dvpfHZdQbt~HfpQZ|dvpfHXb㉀ۑQtJlr˂pfpvp˂rf`vbtlfpv˂rX~f`r˂pfpv˂rXvpfHlJtpvndrtAJ~f`tlJpvn˂rXQ~f`dQbt~fpvrtAJl~f`lJtAvnXrtAJl~f`pJAHQXbtbAdZZHAbnXv`XQJ`ےXnvJtAd|nXv`QJ`ےvXnZHAbnXv`QJ`ے~f`Ard|Xv`fltbvXntAd|Xv`fJ`ےvXnlJtArnXv`tbdvXnrd|v`ftbdvXn㉀ۑpJ|drے`JXQf~HbHAZpfHXZdQbtf~HbHAZvpfH`JXQf~HbHAZpvXnہZdQbt~HfdQZ|vpfHZdQbt~HfbHAZvpfHd|Zf~HQZ|dvpfHZdQbt~HfpQZ|dvpfHAHr󙐂QtJlr˂pfpvp˂rnvplJtfpvdrtA~f`r˂pfpv˂rXvpfHXlJArpvndrtAJ~f`lJtApvndrtAJ~f`dQbt璅fpvrtAJl~f`lJtAvnXrtAJl~f`ˁ`ZQXbtbAdZZHAbnXv`XQJ`ےfH~Ard|nXv`JltvXnZHAے`nXv`QJ`ےnvp|ZdQXv`fltbvXnrd|Xv`fltbvXnl|ZdQnXv`tbdvXnrd|v`ftbdvXn㉀ۑpJ|drے`JXQf~HbHAZf`vXZdQbtf~HbdQZ|vpfHJXQrf~HbHAZpfH~btl~HfdQZ|vpfHZdQbt~HfdQZ|vpfHbtlffpQZ|dvpfHZdQbt~HfpQZ|dvpfHAHr󙐉QtJlr˂pfpvp˂rnvplJtfpvdrtA~f`btlfpv˂rXf`vXJtArdpvndrtAJ~f`lJtApvndrtAJ~f`JtArdvnrXrtAJl~f`lJtAvnXrtAJl~f`ۑpJAtbAdZZHAbnXv`XQJ`ےfH~Ard|nXv`JltvXnJtAd|nXv`QJ`ےnvp|ZdQXv`fltbvXnrd|Xv`fltbvXn|ZdQQJ`ےtbdvXnrd|v`ftbdvXnHr󙐂ˁ|drے`JXQf~HbHAZvpfZdQbtf~HbdQZ|vpfHZdQbtf~HbHAZfH~btl~HfdQZ|vpfHZdQbt~HfdQZ|vpfHbtlHAZpQZ|dvpfHZdQbt~HfpQZ|dvpfH`ZQXbQtJlr˂pfpvp˂rH~flJtfpvdrtA~f`lJtfpvdrtAvpJtArpvndrtAJ~f`lJtApvndrtAJ~f`JtAdQbrXQrtAJl~fZHlJtAvnXrtAJl~f`ۑpJAtbAdZZHAےnXv`XQJ`ے`vXnArd|nXv`JltvXnArd|nXv`JltfH~ZdQbtXv`fltbvXnrd|Xv`fltbvXntlJJ`ےtbdAbے`rd|v`ftbdvXnHr󙐂ˁ|dr`JXQrf~HbHAZvpfZdQbtf~HbdQZ|vpfHZdQbtf~HbdQZ|f`vXlJtAHfpdQZ|vpfHZdQbt~HfdQZ|vpfHtArdbHAZpQZ|dJXQrZdQbtHfpQZ|dvpfH`pJAHrQtJlbtlfpvp˂rH~flJtfpvdrtA~f`lJtfpvdrtAnvprd|vnrdrtAJ~f`lJtApvndrtAJ~f`|ZdQbrXQrtAJl˂pZHlJtAvnrXrtAJl~f`󙐂ˁ`ZtbAdZJtAdnXv`XQJ`ے`pfHArd|nXv`JltvXnArd|nXv`JltfH~ZdQbtXQJ`ےltbvXnrd|Xv`fltbvXntlJJ`ےtbdAbے`rd|QJ`ےtbdvXnQXb㉀|dr|ZdQbf~HbHAZ~f`ZdQbtf~HbdQZ|vpfHZdQbtf~HbdQZ|f`pfHlJtAHAZpdQZ|vpfHZdQbt~HfdQZ|vpfHtArdtbHAZpQZ|dJXQrZdQbtHAZpQZ|dvpfHۑpJAHrQtJltlJfpvdrtAvXnlJtfpvdrtA~f`lJtfpvdrtA~f`rdZQb˂rXQdrtAJ~fZlJtApvndrtAJ~f`lJtArXQrtAJl˂pZHlJtArXQrtAJl~fr󙐂ˁ`tbAdZtArdnXv`dQZ|vpfHArd|nXv`JltvXnArd|nXv`JltvXntlJJ`ےltbHAbےrd|Xv`fltbvXnrd|J`ےtbdAbے`rd|J`ےtbd˂pZHpfH~|dr|ZdQbf~HdrtAJ~f`ZdQbtfHfpbdQZ|vpfHZdQbtf~HbdQZ|vpfHtArdbHAZpdQZ|`JXQrZdQbtHfpdQZ|vpfHZdQbtbHAZpQZ|dJXQrZdQbtbHAZpQZ|dAbے`f۝`vQtJltlJfpvltbvXH~lJtvndrtA~f`lJtfpvdrtA~f`|ZdQb˂rXQdrtAJ˂pZlJtAvnrdrtAJ~f`lJtArXQrtAJl˂pZHlJtArXQrtAJlJXQrXnvˍtbAdZtArdnXv`dQZ|fZHAArd|rXQJ`JltvXnArd|nXv`JltvXHtlJJ`ےltbHAbےrd|XQJ`ےltbvXnrd|J`ےtbdAbے`rd|J`ےtbd˂pZHpfH~|dr|ZdQbf~HdrtAJbJQZdQbtHAZpbdQZ|vpfHZdQbtf~HbdQZ|~fZHtArdbHAZpdQZ|`JXQrZdQbtHAZpdQZ|vpfHlJtArbHAZpQZ|dJXQrZdQbtbHAZpQZ|dAbے`f۝`vQtJltlJfpvl|dr˂plJt˂rXdrtA~flJtfpvdrtAAb|ZQbl˂rXQdrtAJ˂pZlJtA˂rXQdrtAJ~fZd|ZrXQrtAJl˂pZHlJtArXQrtAJlpZHAXnvˍtbAdZtArdnXv`rtAJlZHAbArd|QJ`ےJltZHAbArd|nXv`JltpZHAJtArdJ`ےltbHAbےrd|J`ےltbHAbdQbtJ`ےtbdAbے`rd|J`ےtbdbے`pfH~|dr|ZdQbf~HtbdQ`JXQZdQbtbHAZpbdQZ|`JXQZdQbtfHfpbdQZ|bے`|ZdbHAZpdQZ|`JXQrZdQbtbHAZpdQZ|˂pZHAlJtArbHAZpQZ|dJXQrZdQbtbHAZpQZ|dJXQrːf۝`vQtJltlJfpvZ|dr˂plJt˂rXdrtAr˂plJtvndrtAJXQrQbtl˂rXQdrtAJ˂pZlJtA˂rXQdrtAJbے`d|ZrXQtAJl˂pZHlJtArXQrtAJlpZHAXnvˍtbAdZ|-----------------------............................ \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv31_3.dat b/vendor/endroid/qr-code/assets/data/qrv31_3.dat new file mode 100644 index 000000000..c72dfda01 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv31_3.dat @@ -0,0 +1,281 @@ +{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijijhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQ{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnijijijiihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQ{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmniiiijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQPOPO{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOOOOO~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSOPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSOPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopmnmnmnmnjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSOPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxutstststqrqrqrqropopopopmnmnmnmnjijijiiihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSOPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqropopopopmnmnmnmniiijijijhghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSOPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqropopopopmnmnmnmnijijijijhghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSOPOOOOOO}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqropopopopmnmnmnmlijijijijhghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPO}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqropopopopklklklklijijijijhghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPO}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqropopopopklklklklijijijijhghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPO}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqropopopopklklklklijijiiiihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPO}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqropopopopklklklkliijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPO}~}~}~}~{|{|{|{|yzyzyzyzwvuvuvuvststststqrqrqrqropopopopklklklkljijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOOOOOOP}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqropopopopklklklkljijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSOPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqropopopopklklklkljijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSRQOPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqropopopopklklklkljijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQOPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqropopopopklklklkljijiiiiifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQOPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqropopopopklklklklijijijijfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQOPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqropopopopklklklklijijijijfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQOOOOOOPO}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqropopopopklklklklijijijijfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPO}~}~}~}~{|{|{|{|yxwxwxwxuvuvuvuvststststqrqrqrqropopopopklklklklijijijijfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPO}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststqrqrqrqropopopopklklklklijijijijfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPO}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststqrqrqrqropopopopklklklklijiiiiiifefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPO}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststqrqrqrqronmnmnmnklklklkljijijijifefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPO}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklhghghghgfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQOOOOOPOP}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklhghghghgfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQOPOPOPOP}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklhghghghgfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQOPOPOPOP}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQOPOPOPOP}~}~}~}~{zyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQOPOPOPOP}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQOPOOOOOP}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrmnmnmnmnklklklklhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQOPOPOPON}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvststststqpopopopmnmnmnmnklklklklhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQMNMNMNMN}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQMNMNMNMN}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQMNMNMNMN}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklklklhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQMNMNMNMN}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnklklkjijhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQMNMNMNMN}|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnijijiiiihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQMNMNMNMN{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnijijijijhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQMNMNMNMN{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnijijijijhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQMNMNMNMN{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvsrqrqrqropopopopmnmnmnmnijijijijhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQMNMNMNMNMNMNMNMNMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787843434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +MNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787843434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +MNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787843434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!      + + + +MNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=<9:9:9:9:7878787843434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#         + + + +MNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:7878787843434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#         + + + +MNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:7878787843434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#         + + + +MNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:7878787843434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#         + + + +MNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:7878787843434343212121210/0/0/0/.-.-.-,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#         + + + +MNMNMNMNKLKLKLKLIJIJIJIHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:7876565643434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#         + + + +MNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:5655555643434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#         + + + +MNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:5656565643434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#"!         + + + +MNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?>;<;<;<;<9:9:9:9:5656565643434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +MNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:5656565643434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +MNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:5656565643434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +MNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:5656555543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +MNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:5565656543434343212121210/0/0/.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +MNMNMNMNKLKLKLKJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +MNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + MNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:9:9:9:656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%$#"!"!"!"!         MNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABA@=>=>=>=>;<;<;<;<9:9:9:9:656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         MNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:656555554343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         MNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:565656564343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         MNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:565656564343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         MNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<9:9:987856565656434343432121210/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         MNMNMNMLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         KLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + +KLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<7878787856555555434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('&%$#$#$#$#"!"!"!"!         + + + +KLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCB?@?@?@?@=>=>=>=>;<;<;<;<7878787865656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!         + + + +KLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>;<;<;<;<7878787865656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!         + + + +KLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>;<;<;<;<7878787865656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!         + + + +KLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>;<;<;<;<7878787865656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!       + + + +KLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>;<;<;<;<7878787865656565434343210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     + + + +KLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>;<;<;<;<7878787865555556212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     + + + +KLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!   + + + +KLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)('&%&%&%&%$#$#$#$#"!"!"!"! + + + +KLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"! + + + +KLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"! + + + +KLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<7878787856565656212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"! + + + +KLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;:7878787855555565212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"! + + + +KLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787865656543212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"! + + + +KLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787843434343212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"! + + + +KLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787843434343212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!  + + + +KLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787843434343212121210/0/0/0/.-.-.-.-,+,+,+*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +11223344((''&&%%aa``__^^\]]^^__` }||{{zzy01122334=<<;;::9pqqrrsstihhggffeWXXYYZZ[LLKKJJIIaabbccdd + + xxwwvvuu5566778888776655uuvvwwxx + + ZZYYXXWW~~55667788$$##""!!]]\\[[ZZ`aabbccd + + yxxwwvvu4556677898877665tuuvvwwx + + eddccbba[\\]]^^_HHGGFFEEeeffgghhttssrrqq99::;;<<44332211yyzz{{|| VVUUOONN99::;;<<YYXXWWVVdeeffggh uttssrrq899::;;<54433221xyyzz{{| a``__^^]_``aabbc !!""DDCCBBAAiijjkkllppoonnmm==>>??@@00//..--}}~~MMLLKKJJ~~}}==>>??@@UUTSRQPOhiijjkklqppoonnm<==>>??@100//..-|}}~~]\\[[ZZYcddeeffg##$$%%&&@@??>>==mmnnooppllkkjjiiAABBCCDD,,++**))IIHHGGFF||{{zzyyAABBCCDDONNMMLLKlmmnnoopmllkkjji@AABBCCD-,,++**)YXXWWVVUghhiioop''(())**<<;;::99qqrrsstthhggffeeEEFFGGHH((''&&%%EEDDCCBBxxwwvvuuEEFFGGHH KJJIIHHGpqqrrsstihhggffeDEEFFGGH)((''&&%UTTSSRRQpqqrrsst++,,--..88776655uuvvwwxx + + ddccbbaaIIJJKKLL$$##""!! AA@@??>>~~}}|ttssrrqqIIJJKKLL + + GFFEEDDCtuuvvwwx + + eddccbbaHIIJJKKL%$$##""! QPPOONNMtuuvvwwx//00112244332211yyzz{{|| ``__^^]]MMNNOOPP !!""##$$==<<;;55|{{zzyyxppoonnmmMMNNOOPP + + CBBAA@@?xyyzz{{| a``__^^]LMMNNOOP!  !!""##$MLLKKJJIxyyzz{{|3344556700//..--}}~~\\[[ZZYYQQRRSSTT%%&&''((44332211xwwvvuutllkkjjiiQQRRSSTT?>>==<<;|}}~~]\\[[ZZYPQQRRSST$%%&&''(IHHGGFFE|}}~~89:;;<<=,,++**))XXWWVVUUUUVVWWXX))**++,,00//..--tssrrqqphhggffeeUUVVWWXX;:987655YXXWWVVUTUUVVWWX())**++,EDDCCBBA=>>??@@A((''&&%%TTSSRRQQYYZZ[[\\~~}}--..//00,,++**))poonmlkjddccbbaaYYZZ[[\\44332211UTTSSRRQXYYZZ[[\~~},--..//0A@@??>>=ABBCCDDE$$##""!! PPOONNMM]]^^__`` ||{{zzyy11223344((''&&%%iihhggff``__^^]]]]^^__``!!""00//..-- QPPOONNM\]]^^__` }||{{zzy01122334=<<;;::9EFFGGHHI !!""##$$LLKKJJIIaabbccdd + + xxwwvvuu55667788$$##""!!eeddccbb\\[[ZZYYaabbccdd##$$%%&&,,++**)) !!""##$MLLKKJJI`aabbccd + + yxxwwvvu4556677898877665IJJKKLLM%%&&''((HHGGFFEEeeffgghhttssrrqq99::;;<<aa``__^^XXWWVVUUeeffgghh''(())**((''&&%%$%%&&''(IHHGGFFEdeeffggh uttssrrq899::;;<54433221~~}}||{MNNOOPQR))**++,,DDCCBBAAiijjkkllppoonnmm==>>??@@]]\\[[ZZTTSSRRQQiijjkkll++,,--..$$##""!!())**++,EDDCCBBAhiijjkklqppoonnm<==>>??@100//..-{zzyyxxwSTUUVVWW~~}}--..//00@@??>>==mmnnooppllkkjjiiAABBCCDDYYXXWWVVPPOONNMMmmnnoopp//001122 ~~},--..//0A@@??>>=lmmnnoopmllkkjji@AABBCCD-,,++**)wvvuuttsXXYYZZ[[ ||{{zzyy11223344<<;;::99qqrrsstthhggffeeEEFFGGHH UUTSRQPOLLKKJJIIqqrrsstt334455;;}||{{zzy01122334=<<;;::9pqqrrsstihhggffeDEEFFGGH)((''&&%srrqqppo\\]]^^__ + + xxwwvvuu5566778888776655uuvvwwxx + + ddccbbaaIIJJKKLL + + ONNMMLLKHHGGFFEEuuvvwwxx<<==>>??yxxwwvvu4556677898877665tuuvvwwx + + eddccbbaHIIJJKKL%$$##""!oiihhggf``aabbccttssrrqq99::;;<<44332211yyzz{{|| ``__^^]]MMNNOOPPKJJIIHHGDDCCBBAAyyzz{{||@@AABBCCuttssrrq899::;;<54433221xyyzz{{| a``__^^]LMMNNOOP! feeddccbddeeffggppoonnmm==>>??@@00//..--}}~~\\[[ZZYYQQRRSSTT GFFEEDDC@@??>>==}}~~DDEEFFGG +qppoonnm<==>>??@100//..-|}}~~]\\[[ZZYPQQRRSSTbaa``__^hhiijklmllkkjjiiAABBCCDD,,++**))XXWWVVUUUUVVWWXX + + CBBAA@@?<<;;::99HHIIJJKK + mllkkjji@AABBCCD-,,++**)YXXWWVVUTUUVVWWX^]]\\[[ZnooppqqrhhggffeeEEFFGGHH((''&&%%TTSSRRQQYYZZ[[\\?>>==<<;88776655LLMMNNOOihhggffeDEEFFGGH)((''&&%UTTSSRRQXYYZZ[[\ZYYXXWWVrssttuuv + + ddccbbaaIIJJKKLL$$##""!! PPOONNMM]]^^__``;:98765544332211UUVVWWXX + + eddccbbaHIIJJKKL%$$##""! QPPOONNM\]]^^__` VUUOONNMvwwxxyyz ``__^^]]MMNNOOPP !!""##$$LLKKJJIIaabbccdd4433221100//..--YYZZ[[\\ a``__^^]LMMNNOOP!  !!""##$MLLKKJJI`aabbccd + + MLLKKJJIz{{||}}~\\[[ZZYYQQRRSSTT%%&&''((HHGGFFEEeeffgghh!!""00//..--,,++**))]]^^__``]\\[[ZZYPQQRRSST$%%&&''(IHHGGFFEdeeffggh IHHGGFFE~XXWWVVUUUUVVWWXX))**++,,DDCCBBAAiijjkkll##$$%%&&,,++**))((''&&%%~~}}||aabbccddYXXWWVVUTUUVVWWX())**++,EDDCCBBAhiijjkklEDDCCBBATTSSRRQQYYZZ[[\\~~}}--..//00@@??>>==mmnnoopp''(())**((''&&%%$$##""!!{{zzyyxxeeffgghhUTTSSRRQXYYZZ[[\~~},--..//0A@@??>>=lmmnnoopA@@??>>= PPOONNMM]]^^__`` ||{{zzyy11223344<<;;::99qqrrsstt++,,--..$$##""!! wwvvuuttiiooppqq QPPOONNM\]]^^__` }||{{zzy01122334=<<;;::9pqqrrsst + + =<<;;554!!""##$$LLKKJJIIaabbccdd + + xxwwvvuu5566778888776655uuvvwwxx//001122 ssrrqqpprrssttuu !!""##$MLLKKJJI`aabbccd + + yxxwwvvu4556677898877665tuuvvwwx 43322110%%&&''((HHGGFFEEeeffgghhttssrrqq99::;;<<44332211yyzz{{||334455;;ooiihhggvvwwxxyy$%%&&''(IHHGGFFEdeeffggh uttssrrq899::;;<54433221xyyzz{{|0//..--,))**++,,DDCCBBAAiijjkkllppoonnmm==>>??@@00//..--}}~~<<==>>??ffeeddcczz{{||}}())**++,EDDCCBBAhiijjkklqppoonnm<==>>??@100//..-|}}~~,++**))(~~}}--..//00@@??>>==mmnnooppllkkjjiiAABBCCDD,,++**))@@AABBCC bbaa``__~~,--..//0A@@??>>=lmmnnoopmllkkjji@AABBCCD-,,++**)!(''&&%%$||{{zzyy11223344<<;;::99qqrrsstthhggffeeEEFFGGHH((''&&%%DDEEFFGG + + + ^^]]\\[[01122334=<<;;::9pqqrrsstihhggffeDEEFFGGH)((''&&%!""##$$%$##""!!xxwwvvuu5566778888776655uuvvwwxx + + ddccbbaaIIJJKKLL$$##""!!HHIIJJKK +  + + ZZYYXXWW4556677898877665tuuvvwwx + + eddccbbaHIIJJKKL%$$##""!%&&''(()ttssrrqq99::;;<<44332211yyzz{{|| ``__^^]]MMNNOOPP LLMMNNOO VVUUOONN899::;;<54433221xyyzz{{| a``__^^]LMMNNOOP! )**++,,-ppoonnmm==>>??@@00//..--}}~~\\[[ZZYYQQRRSSTTUUVVWWXXMMLLKKJJ<==>>??@100//..-|}}~~]\\[[ZZYPQQRRSST-..//001llkkjjiiAABBCCDD,,++**))XXWWVVUUUUVVWWXX~~}}||YYZZ[[\\ IIHHGGFF~~}}|@AABBCCD-,,++**)YXXWWVVUTUUVVWWX12233445 hhggffeeEEFFGGHH((''&&%%TTSSRRQQYYZZ[[\\{{zzyyxx]]^^__`` + + EEDDCCBB|{{zzyyxDEEFFGGH)((''&&%UTTSSRRQXYYZZ[[\~~}5;;<<==> + + ddccbbaaIIJJKKLL$$##""!! PPOONNMM]]^^__`` wwvvuuttaabbccdd  AA@@??>>xwwvvuutHIIJJKKL%$$##""! QPPOONNM\]]^^__` }||{{zzy>??@@AAB``__^^]]MMNNOOPP !!""##$$LLKKJJIIaabbccdd + + ssrrqqppeeffgghh!!""##$$==<<;;55tssrrqqpLMMNNOOP!  !!""##$MLLKKJJI`aabbccd + + yxxwwvvuBCCDDEEF\\[[ZZYYQQRRSSTT%%&&''((HHGGFFEEeeffgghhooiihhggiiooppqq%%&&''((44332211poonmlkjPQQRRSST$%%&&''(IHHGGFFEdeeffggh uttssrrqFGGHHIIJ + + XXWWVVUUUUVVWWXX))**++,,DDCCBBAAiijjkkllffeeddccrrssttuu))**++,,00//..--iihhggffTUUVVWWX())**++,EDDCCBBAhiijjkklqppoonnmJKKLLMMN TTSSRRQQYYZZ[[\\~~}}--..//00@@??>>==mmnnooppbbaa``__vvwwxxyy !--..//00,,++**))eeddccbbXYYZZ[[\~~},--..//0A@@??>>=lmmnnoopmllkkjjiNOOUUVVWPPOONNMM]]^^__`` ||{{zzyy11223344<<;;::99qqrrsstt^^]]\\[[zz{{||}}!""##$$%%&&''(())**++,,-DCCBBAA@ijjkkllmpoonnmml=>>??@@A0//..--,}~~+**))(('~~}}||..//0011??>>==<>==3221100/z{{||}}~_^^]]\\[NOOPPQQR544332215667788987766554uvvwwxxy + + dccbbaa`IJJKKLLM$##""!! &''(())*ssrrqqpp::;;<<==33221100zz{{||}}__^^]]\\NNOOPPQQMMNNOOUUonnmmllk>??@@AAB/..--,,+~[ZZYYXXWRSSTTUUV100//..-9::;;<<=43322110yzz{{||} `__^^]]\MNNOOPPQ *++,,--.oonnmmll>>??@@AA//..--,,~~[[ZZYYXXRRSSTTUUVVWWXXYYkjjiihhgBCCDDEEF+**))(('WVVUUTTSVWWXXYYZ-,,++**)=>>??@@A0//..--,}~~\[[ZZYYXQRRSSTTU.//00112kkjjiihhBBCCDDEE++**))((WWVVUUTTVVWWXXYY~~}}||{{ZZ[[\\]] +gffeeddcFGGHHIIJ'&&%%$$#SRRQQPPOZ[[\\]]^!!""#)((''&&%ABBCCDDE,++**))(XWWVVUUTUVVWWXXY2334455; +ggffeeddFFGGHHII''&&%%$$SSRRQQPPZZ[[\\]]zzyyxxww^^__``aa + cbbaa``_JKKLLMMN#""!!  !!"ONNMMLLK^__``aab#$$%%&&'%$$##""!EFFGGHHI(''&&%%$TSSRRQQPYZZ[[\\]~~}}|;<<==>>? + ccbbaa``JJKKLLMM##""!!  !!OONNMMLL^^__``aa vvuuttssbbccddee_^^]]\\[NOOPPQQR"##$$%%&KJJIIHHGbccddeef'(())**+! IJJKKLLM$##""!!  !POONNMML]^^__``a |{{zzyyx?@@AABBC__^^]]\\NNOOPPQQ""##$$%%KKJJIIHHbbccddee + + rrqqppooffgghhii[ZZYYXXWRSSTTUUV&''(())*GFFEEDDCfgghhiij+,,--../MNNOOPPQ !""##$$%LKKJJIIHabbccdde + + xwwvvuutCDDEEFFG [[ZZYYXXRRSSTTUU&&''(())GGFFEEDDffgghhiiiihhggffooppqqrrWVVUUTTSVWWXXYYZ*++,,--.CBBAA@@?jkkllmmn/0011223QRRSSTTU%&&''(()HGGFFEEDeffgghhitssrrqqpGHHIIJJK + + WWVVUUTTVVWWXXYY**++,,--CCBBAA@@jjkkllmmeeddccbbssttuuvvSRRQQPPOZ[[\\]]^~~}}||{.//00112?>>==<<;nooppqqr34455;;<UVVWWXXY)**++,,-DCCBBAA@ijjkkllmpoonnmmlKLLMMNNO SSRRQQPPZZ[[\\]]~~}}||..//0011??>>==<>??@ YZZ[[\\]~~}}|-..//001@??>>==3221100/z{{||}}~DEEFFGGH + + abbccdde + + xwwvvuut5667788987766554uvvwwxxy + + dccbbaa`\]]^^__`GGFFEEDDffgghhiissrrqqpp::;;<<==33221100zz{{||}}UUOONNMM*++,,--.CBBAA@@?jkkllmmnonnmmllk>??@@AAB/..--,,+~HIIJJKKL effgghhitssrrqqp9::;;<<=43322110yzz{{||} `__^^]]\`aabbccd !!""##CCBBAA@@jjkkllmmoonnmmll>>??@@AA//..--,,~~LLKKJJII.//00112?>>==<<;nooppqqrkjjiihhgBCCDDEEF+**))(('LMMNNOOUijjkkllmpoonnmml=>>??@@A0//..--,}~~\[[ZZYYXdeeffggh$$%%&&''??>>==<>==~~}}||{:;;<<==>3221100/z{{||}}~_^^]]\\[NOOPPQQR]^^__``a uvvwwxxy + + dccbbaa`IJJKKLLM$##""!!  !POONNMMLuvvwwxxy0011223333221100zz{{||}}__^^]]\\NNOOPPQQ""##$$%%<<;;5544{zzyyxxw>??@@AAB/..--,,+~[ZZYYXXWRSSTTUUV~~}}||{abbccdde !!""##$yzz{{||} `__^^]]\MNNOOPPQ !""##$$%LKKJJIIHyzz{{||}44556789//..--,,~~[[ZZYYXXRRSSTTUU&&''(())33221100wvvuuttsBCCDDEEF+**))(('WVVUUTTSVWWXXYYZ{zzyyxxweffgghhi$%%&&''(}~~\[[ZZYYXQRRSSTTU%&&''(()HGGFFEED}~~:;;<<==>++**))((WWVVUUTTVVWWXXYY**++,,--//..--,,srrqqppoFGGHHIIJ'&&%%$$#SRRQQPPOZ[[\\]]^wvvuuttsiooppqqr())**++,XWWVVUUTUVVWWXXY)**++,,-DCCBBAA@>??@@AAB''&&%%$$SSRRQQPPZZ[[\\]]~~}}||..//0011++**))((onmlkjiiJKKLLMMN#""!!  !!"ONNMMLLK^__``aab srrqqpporssttuuv,--..//0TSSRRQQPYZZ[[\\]~~}}|-..//001@??>>==>??@@AA\\[[ZZYYZ[[\\]]^~~}}||{.//00112?>>==<<;nooppqqr^]]\\[[Z~~}<==>>??@)**++,,-DCCBBAA@ijjkkllmpoonnmml=>>??@@A0//..--,zyyxxwwvUUVVWWXX~~}}||..//0011??>>==<>==3221100/z{{||}}~MLLKKJJIuttssrrqHIIJJKKLxwwvvuut5667788987766554uvvwwxxy + + dccbbaa`IJJKKLLM$##""!! ihhggffeaabbccddssrrqqpp::;;<<==33221100zz{{||}}__^^]]\\NNOOPPQQJIIHHGGFjkkllmmnonnmmllk>??@@AAB/..--,,+~IHHGGFFEqppoonnmLMMNNOOPtssrrqqp9::;;<<=43322110yzz{{||} `__^^]]\MNNOOPPQ eddccbbaeeffgghhoonnmmll>>??@@AA//..--,,~~[[ZZYYXXRRSSTTUU + +FEEDDCCBnooppqqrkjjiihhgBCCDDEEF+**))(('EDDCCBBAmllkkjjiPQQRRSSTpoonnmml=>>??@@A0//..--,}~~\[[ZZYYXQRRSSTTUa``__^^]iijklmnokkjjiihhBBCCDDEE++**))((WWVVUUTTVVWWXXYY BAA@@??>rssttuuv +gffeeddcFGGHHIIJ'&&%%$$#A@@??>>=ihhggffeTUUVVWWXlkkjjiihABBCCDDE,++**))(XWWVVUUTUVVWWXXY]\\[[ZZYoppqqrrs ggffeeddFFGGHHII''&&%%$$SSRRQQPPZZ[[\\]]>==<<;;:vwwxxyyz + cbbaa``_JKKLLMMN#""!!  !!"=<<;;554eddccbbaXYYZZ[[\hggffeedEFFGGHHI(''&&%%$TSSRRQQPYZZ[[\\]YXXWWVVUsttuuvvw + + ccbbaa``JJKKLLMM##""!!  !!OONNMMLL^^__``aa98765544z{{||}}~_^^]]\\[NOOPPQQR"##$$%%&43322110a``__^^]\]]^^__`dccbbaa`IJJKKLLM$##""!!  !POONNMML]^^__``a UOONNMMLwxxyyzz{__^^]]\\NNOOPPQQ""##$$%%KKJJIIHHbbccddee33221100~[ZZYYXXWRSSTTUUV&''(())*0//..--,]\\[[ZZY`aabbccd`__^^]]\MNNOOPPQ !""##$$%LKKJJIIHabbccdde + + LKKJJIIH{||}}~~[[ZZYYXXRRSSTTUU&&''(())GGFFEEDDffgghhii!!""##//..--,,WVVUUTTSVWWXXYYZ*++,,--.,++**))(YXXWWVVUdeeffggh\[[ZZYYXQRRSSTTU%&&''(()HGGFFEEDeffgghhiHGGFFEEDWWVVUUTTVVWWXXYY**++,,--CCBBAA@@jjkkllmm$$%%&&''++**))((SRRQQPPOZ[[\\]]^~~}}||{.//00112(''&&%%$UTTSSRRQhiijjkklXWWVVUUTUVVWWXXY)**++,,-DCCBBAA@ijjkkllmDCCBBAA@SSRRQQPPZZ[[\\]]~~}}||..//0011??>>==<>==>==< !!OONNMMLL^^__``aa {{zzyyxx22334455;;::9988rrssttuu,,--..//##""!! "##$$%%&KJJIIHHGbccddeef + + wvvuutts6778899:MLLKKJJIpqqrrsstPOONNMML]^^__``a |{{zzyyx12233445<;;::998qrrssttu + + <;;55443""##$$%%KKJJIIHHbbccddee + + wwvvuutt6677889977665544vvwwxxyy00112233&''(())*GFFEEDDCfgghhiijsrrqqppo:;;<<==>IHHGGFFEtuuvvwwxLKKJJIIHabbccdde + + xwwvvuut5667788987766554uvvwwxxy 3221100/&&''(())GGFFEEDDffgghhiissrrqqpp::;;<<==33221100zz{{||}}4455;;<<*++,,--.CBBAA@@?jkkllmmnonnmmllk>??@@AABEDDCCBBAxyyzz{{|HGGFFEEDeffgghhitssrrqqp9::;;<<=43322110yzz{{||}/..--,,+**++,,--CCBBAA@@jjkkllmmoonnmmll>>??@@AA//..--,,~~==>>??@@~~}}||{.//00112?>>==<<;nooppqqrkjjiihhgBCCDDEEF A@@??>>=|}}~~ZHAbtlJfpvtbdQZf`vXے`JXfpvrXQJ`ۉbdQZ|fH~ˑJtAdf~HےbHf`vXے`JXQtlJnXv`bdQZ|H~fZHAb|ZdQbp˂rrtAJl~f`ے`JXQtArdnXv`|drnvpQr˂pnXv`bHAdrtf`vX|ZdQfpvAZp˂nvpfr˂ptArdfHfdrtA`vXnے`JXQtlJXQJ`ےtdrvXH~r˂p|ZdQbpvntAJlfH~ˑZHAۍf~HZp˂AJltnvpbtlnXv`rXQJ`~f`vZHAb|ZdQbpvnJltvpfr˂ptArdbHAZtAJl璐fZHAZHAbtlJXv`ftbQZdf`vX`JXQfpvrXQJ`ۉbdQZ|fH~JtArdf~HےbHXnvے`JXQtlJrXQJ`bdQZ|H~fZHAb|ZdQbp˂rtbdQZbJQے`JXQtArd~HfrtAJlnvprbtlnXv`bHAdrtf`vX|ZdQfpvAZp`pfH~r˂ptArdےHAZdrtA`vXnے`JXQtlJXQJ`ے|drr˂pr˂p|ZdQbpvntbdfH~ˑJtAdf~HZp˂AJltnvpbtlnXv`bHAf`vZHAb|ZdQbp˂rJltvpfr˂ptArdbHAZtAJlZHAbZHAbtlJXv`pQZ|df`vX|ZdQfpvrXQJ`ۉbdQZ|fH~JtArdf~HZp˂Xnvے`JXQtlJXQJ`ےbdQZ|H~fZHAbf~Hp˂rtbdQtA`JXQے`JXQtArd˂rXQrtAJlnvpbtlnXv`bHAdrtfZHAb|ZdQfpvrXQJ`pfH~r˂ptArdbHAZdrtA`vXnے`JXQfpvXQJ`ےJltr˂pr˂p|ZdQbJ`ےtbdfH~JtArdf~HZp˂AJltے`JXbtlnXv`bHAfvXnZHAb|ZdQbp˂rJltvpfr˂pnXv`bHAZbdQZ|ZHAbZHAbtlJbHAZpQZrtAf`vX|ZdQfpvrXQJ`ۉbdQZ|Qr˂pJtArdf~HZp˂vpfHے`JXQtlJXQJ`ےbdQZ|H~fZHAbf~Hp˂rdrtA`JQrے`JXQtArd˂rXQJltnvpbtlnXv`bHAdrtZHAb|ZdQfpvbHAZ~f`r˂ptArdbHAZdrtA`vXnے`JXQfpvXQJ`ےJltpZHAbr˂p|ZdQbJ`p˂bdQZ|fH~JtArdf~HZp˂AJltے`JXbtlnXv`drtAdvXnZHAbf~Hp˂rJltvpfr˂pnXv`bHAZbdQZ|ے`JZHAbtlJrXQJdrtAfZHAb|ZdQfpvrXQJ`ۉbdQZ|Qr˂pJtArdf~HQZ|dvpfHے`JXQfpvXQJ`ےbdQZ|H~fZHAےf~Hp˂rltbXQr˂ے`JXQtArd`ےbJltے`JXbtlnXv`bHAdtAZHAb|ZdQfpvrtAJl~fvr˂pnXv`bHAZdrtA`vXn`JXQrfpvXQJ`ےdQZ|pZHAbr˂p|ZdQbHAZp˂bdQZ|Qr˂pJtArdf~HZp˂Jltے`JXbtlnXv`tbdnvpZHAbf~Hp˂rJltvpfbtlnXv`bHAZdrtAJے`JZHAbtlJrXQJrAJlZHAb|ZdQfpvrXQJ`bnvpQr˂pJtArdf~HQZ|dfH~ے`JXQfpvXQJ`ےbdQZ|H~fJtAdf~Hp˂rltbXQrZHے`JXQtArd`ےtbdQے`JXbtlnXv`bHAfHˑZHAb|ZdQfpvrtAJlf`vXr˂pnXv`bHAZdrtA`vXn|ZdQbfpvXQJ`ےdQZ|lAbے`r˂p|ZdQbrXQJ`Z|dQr˂pJtArdf~HZp˂f`vXے`JXbtlnXv`|dnvpZHAےf~Hp˂rJltvpftlJnXv`bHAZtbnJXQrZHAbtlJےbHArtAJlZHAb|ZdQfpvrXQJ`nvpQr˂pJtArdf~HrtAJlfH~`JXQrfpvXQJ`ےbdQZ|H~ftArdf~Hp˂rvp`˂pZHے`JXQtArdZp˂tbdQے`JXbtlnXv`bHAfH~ˑZHAb|ZdQfpvtbdQf`vnbtlnXv`bHAZdrtA`vXn|ZdQbfpvXQJ`ےvXnAbے`r˂p|ZdQbrXQJ`Z|dnQr˂pJtArdf~HZp˂f`vXے`JXbtlnXv`Z|dvpfHJtAdf~Hp˂rJltvpftlJnXv`bHAZvpfHJXQrZHAbtlJےbHAvfˑZHAb|ZdQfpvrXQJ`nvpQr˂pJtArdf~HrtAJl~f`|ZdQbfpvXQJ`ےbdQZ|H~ftArdf~Hp˂r~f`ZAbے`JXQtArdXQJ`ےf`vXے`JXbtlnXv`bHAfH~ˑZHAb|ZdQfpvtdrtvXntlJnXv`bHAZdrtAZHAb|ZdQbfpvXQJ`ےvXnے`JXQr˂pf~HbHAZnvpQr˂pJtArdf~HZdrtf`vXے`JXbtlnXv`AJltvpfHtArdf~Hp˂rJltے`JXQtlJnXv`bHAZvp`vr˂pZHAbXv`fp˂rfH~ˑZHAb|ZdQfpvAJltnvpQr˂pJtArdfHbdQZ|~f`|ZdQbfpvXQJ`ےbdQZ|r˂ptArdf~Hp˂rXnvZHAbے`JXQ~HfXQJ`ےf`vXے`JXbtlnXv`bdQZ|fH~ˑZHAb|ZdQfpvdrtvXnvftlJnXv`bHAZdrtAZHAb|ZdQbfpvXQJ`ےpfH~ے`JXQr˂ppvnbHAZnvpQr˂pJtArdf~Hdrtf`vXے`JXbtlnrXQJ`AJltH~ftArdf~Hp˂rJltے`JXQtlJnXv`bHAZf`vr˂pZHAbXv`fp`ےfH~ˑZHAb|ZdQfpvAJltnvpQr˂pJtArdp˂bdQtAZHAb|ZdQbfpvXQJ`ےbdQZ|r˂ptArdf~Hp˂rXnvZAb`ے`JXQ~HfbHAZpf`vXے`JXbtlnXv`bdQZ|fH~ˑZHAb|ZdQrXQJ`Jltے`JXQtlJnXv`bHAZdtAJZHAb|ZdQbfpvXQJ`ےpfHXJXQrr˂pp`f˂rXQnvpQr˂pJtArdfHdrtf`vXے`JXbtlbHAbdQZ|r˂ptArdf~Hp˂rltbے`JXQtlJnXv`bHAZnvppZHAZHAb~HfpJ`ےfH~ˑZHAb|ZdQfpvAJltnvpQr˂pJtArdZp˂drtAZHAb|ZdQbfpvXQJ`ےnvpr˂ptArdf~Hp˂rfH~bے`ے`JXQvnXbHAZpf`vXے`JXbtlnrXQJ`bdQZ|fH~ˑZHAb|ZdQrXQJ`pJltے`JXQtlJnXv`bHAZfHfZHAb|ZdQbfpvXQJ`ےf`vXJXQrr˂pv`f˂bnvpQr˂pJtArdےHAdrtf`vXے`JXbtl˂rXbdQZ|lr˂ptArdf~Hp˂r`vXnے`JXQtlJnXv`bHAZnvppZA`|ZdQb~HfpHAZdfH~ˑZHAb|ZdQZp˂AJltnvpQr˂pJtArdQJ`ےtbdZHAb|ZdQbfpvXQJ`ےvpfr˂ptArdf~HdrtAfH~JXQrtlJv~rtAJf`vXے`JXbtlrXQJ`ۉbdQZ|fH~ˑZHAbf~HbHAZpQZ|dے`JXQtlJnXv`bHAZH~fZHAb|ZdQbfpvdQZ|vpfbtltArdHfpvbdQZ|nvpQr˂pJtArdbHAdrtf`vXے`JXfpv˂rXrtAJlr˂ptArdf~Hp˂r`vXnے`JXQtlJnXv`drtAJH~fJtAd||ZdQbnXvdrtAfH~ˑZHAb|ZdQZp˂AJltnvpQr˂pnXv`QJ`ےtbdZHAb|ZdQbfpvXQJ`ےvpfr˂ptArdf~Hltb`vXnZdQbttlJ`f~Jltf`vXے`JXbtlrXQJ`ۉbdQZ|fH~ˑZHAbf~HrXQQZ|lے`JXQtlJnXv`bHAZH~fZHAb|ZdQbfpvdQZ|vpflJttArdHfpvbdQZ|nvpQr˂pJtArdbHAdrtf`vXے`JXfpvJ`ےtbnr˂ptArdf~HdrtA`vXnے`JXQtlJnXv`drtAJH~fArd||ZdQbnXHdrtAfH~ˑZHAbf~HZp˂AJltnvpQr˂pnXv`bHAZp˅vpfZHAb|ZdQbfpvJltvpfr˂ptArdfHfl|d`pfHZdQbttlJfpvJlbQZf`vXے`JXfpvrXQJ`ۉbdQZ|fH~ˑZHAۍf~HrXQf`vXے`JXQtlJnXv`bdQZ|H~fZHAb|ZdQbpvnrtAJl~f`lJttArdnXv`|drnvpQr˂pnXv`bHAdrtf`vX`JXQfpvJ`ےnvpr˂ptArdf~HdrtA`vXnے`JXQtlJrXQJ`tbdQvXnArd||ZdQbf~HtAJlfH~ˑZHAbf~HZp˂AJltnvprbtlnXv`bHAXQJ`fH~ZHAb|ZdQbfpvJltvpfr˂ptArdےHAZZ|dvpfHZdQbtlJtArd|f~H˂rXtb`JXQlJtnXv`˙bHAZpvXnAbے`~Hf˂rXQltbvpfHtlJXv`fbHAZpdrtAJvXntArdfpvtbdvpfH˂pZHrd|HAZp˙rtAJlvXnۉ˂p`ZXnvˍZdQbtfpvQJ`ےnvpr˂pArd|f~H˂rXvp`JXQrpvnJ`ےdQZ|~f`tAd|~Hf˂rXQltbvpfH|ZdQbnXv`QZ|d~f`Abے`ZdQbt炀rXQtbdvpfHQXb㉀pfH~ㅉlJtnXv`˙bHAZpfHf`ZHAbہZdQbtfpvQJ`ےvXnۉ˂p`Xv`fbHAZpdrtAJvXnZdQbtpvnJ`ےdQZ|~fZtlJffpۙrtAJlvXnہJXQrlJtAJ`ےQZ|d~f`ۑpJAHrf۝`vArd|f~H˂rXvXn`JXQlJtnXv`˙bHAZvpfHJXQrː~Hf˂rXQltbvpfHlJtAXv`fbHAZpdrtAJHAbtArdtvnrXtbdvpfH˂pZHrd|bHAZp˙rtAJlvXn󙐂ˁ`ZXnvˍZdQbtfpvQJ`ےvpfHr˂pArd|f~HdrtA~f`pZHApvnJ`ےdQZ|~f`rd|~Hf˂rXQltb˂pZHAlJtAQJ`ےQZ|d~f`Abے`ZdQbt炀rXQtbdvpfHQXb㉀pfH~ㅉlJtnXv`˙bHAZp~f`ZHAbہZdQbtfpvJltvXnbے`Xv`fbHAZpdrtAJvXnZdQbtpvnJ`ےdQZ|bے`rd|HAZp˙rtAJlvXnہJXQrlJtAJ`ےQZ|d~f`ۑp`ZQf۝`vArd|f~H˂rXvXn`JXQlJtnXv`bdQZ|vpfHXJXQrː~Hf˂rXQltbvpfHlJtAXv`fbHAZpdrtAJJXQrZdQbtrXQtbdvpfH˂pZHrdfbHAZp˙rtAJlvXnXb㉀ۑXnvˍZdQbtfpvQJ`ےvpfHr˂pArd|f~HdrtAnvpp`JXpvnJ`ےdQZ|~fZrd|~Hf˂rXQltb˂pZHAlJtAJ`ےQZ|d~f`Abے`~HfprXQtbdvpfHpJAHrpfH~ㅉlJtnXv`˙bHAZ~f`ZHAbہZdQbtfpvJltfH~QrbtXv`fbHAZpdrtAJHAbےZdQbtpvnJ`ےdQZ|bے`rd|bHAZp˙rtAJlvXnہJXQrvnXJ`ےQZ|d~f`ˁ`ZQf۝`vArd|f~HdrtAvXn`JXQlJtnXv`bdQZ|f`vXlJA|~Hf˂rXQltb`JXQrlJtAXv`fbHAZpdtAJlpZHAblJtArrXQtbdvpfH˂pZHv`fbHAZp˙rtAJlvXnXb㉀ۑXnvˍZdQbtfpvJltvpfHr˂pArd|fHfpdrtAnvpZdQbtpvnJ`ےdQZ|˂pZrd|~Hf˂rXQtbnے`Jd|ZJ`ےQZ|d~f`Abے`~HfprXQtbdvpfHpJAHQXbpfH~ㅉlJtnXv`bdQZ|~f`ZHAbہZdQbtvnJltfH~lJtXv`fbHAZpdrtAJHAbےZdQbtpvnJ`ےvpfXQr˂dQbtbHAZp˙rtAJlvXnہJXQrvnXJ`ےQZ|d~f`㉀ۑpJf۝`vArd|f~HdrtAvXn`JXQlJtrXQJ`bdQZ|vpArd|~Hf˂rXQltb`JXQrlJtAXv`fbHAZpHf`pZHAblJtArrXQtbdvpfH˂pZHv`fbHAZp˙rtAJlvXnAHr󙐂XnvˍZdQbtfpvJltvpfHr˂pArd|HAZpdrtAfH~ˁZdQbtpvnJ`ےdQZ|˂pZrd|~Hf˂rXQvXnے`Jd|ZJ`ےQZ|d~f`Aے`~HfprXQtbdvpfHˁ`ZQXbp|drlJtnXv`bdQZ|~f`ZHAbہZdQbt˂rXJltf`vXlJArXv`fbHAZpdtAJlHAbےZdQbtpvnJ`ےvpfHXQHAbdQtArdbHAZp˙rtAJlvXnJXQrbtvnXJ`ےQZ|d~f`㉀ۑpJQtJlArd|fHfpdrtAvXn`JXQlJtQJ`ےbdQZ|nvp|ZdQ~Hf˂rXQtbn`JXQrlJtAXv`fbHAZp~f`ے`JXQf~rXQtbdvpfHlJtv`fbHAZp˙rtAJlvXnAHr󙐉tbAdZZdQbtvnJltvpfHr˂pArd|bHAZpdrtAfH~btlpvnJ`ےvpf˂pZrd|~Hf˂rXQvXnr˂pHfvnXJ`ےQZ|d~f`Ad|~HfprXQtbdvpfHۑpJA|drlJtrXQJ`bdQZ|~f`ZHAbہZdQbt˂rXJltf`pfHJtArdXv`fbHAZpHf`HAbےZdQbtpvnJ`ےvpfHZHAbv`fbHAZp˙rtAJlvXnZdQbtvnXJ`ےQZ|d~frHr󙐂ˁQtJlArd|HAZpdrtAvXn`JXQlJtQJ`ےbdQZ|~f`|ZdQ~Hf˂rXQvXn`JXQrlJtAXv`fbHAZ~f`ے`JXQ~HfprXQtbdvpfHlJtAv`fbHAZp˙rtAJl˂pZH`ZQXbtbAdZZdQbt˂rXJltvpfHr˂pArd˙bHAZpdrtAvXnbtlpvnJ`ےvpfH˂pZrd|~HfdrtAJvXnrےvnXJ`ےQZ|d~f`rd|~HfprXQtbdAbے`ۑpJA|drlJtQJ`ےbdQZ|~f`ZHAbf~H˂rXJltvpfHJtArXv`fbHAZp~f`HAbےZdQbtpvnltbvpfH`JXQrv`fbHAZp˙rtAJlvXnZdQbtvnXJ`ےQZ|dJXQrHr󙐂ˁQtJlArd|bHAZpdrtAvXn`JXQfpvQJ`ےbdQZ|~f`ZdQbt琕~Hf˂rXQvXn`JXQrlJtAXv`fdQZ|~f`˂pZ~HfprXQtbdvpfHlJtAv`fbHAZp˙rtAJl˂pZH`pJAHrtbAdZZdQbt˂rXJltvpfHr˂pnXv`˙bHAZpdrtAvXHlJtApvnJ`ےvpfH˂pZrd|~HfdrtAJvXnHAbےvnv`J`ےQZ|d~fZHrd|~HfprXQtbdAbے`󙐂ˁ`Z|drlJtQJ`ےbdQZ|~f`ZHAbf~H˂rXJlt~fZHrd|Xv`fbHAZ~f`HAbےZdQbtpvnltbvpfH`JXQrf~HbHAZp˙rtAJlAbے`ZdQbtvnXJ`ےQZ|dpZHAQXb㉀QtJlArd˙bHAZpdrtAvXn`JXQfpvQJ`ےbdQZ|AbZdQbt琕~HfdrtAJvXn`JXQrlJtAXv`fdQZ|~f`˂p`fpvrXQtbdJXQrlJtAv`fbHAZp˙tAJlbے`ۑpJAHrtbAdZf~H˂rXJltvpfHr˂pnXv`˙bHAZpdrtApZHAlJtApvnltbvpfH˂pZrd|HfpdrtAJvXnJXQrnXv`J`ےQZ|d˂pZHrd|~HfprXQtbnJXQr󙐂ˁ`|drfpvQJ`ےbdQZ|~f`ZHAے`f~H˂rXJltbے`rdZQbXv`fdQZ|~f`HAbےZdQbtvnrltbvpfH˂pZHAf~HbHAZp˙rtAJlAbے`ZdQbtvnXJ`ےvpfHpZHApfH~QtJlnXv`˙bHAZpdrtAvXnJXQrfpvQJ`ےbdQZ|JXQrtlJ~HfdrtAJvXn`JXQrlJtAXQJ`ےdQZ|~f`bے`fpvrXQtbdJXQrlJtAv`fbHAZp˅f`bے`f۝`vtbAdZf~H˂rXJltvpfHbtlnXv`˙bHAZpdrtApZHAtArdpvnltbvpfH˂pZrd|HAZpdrtAJvXnJXQrnvfJ`ےQZ|d˂pZHrd|~HfprXQvXnJXQHAbXnvˍ|drfpvQJ`ےbdQZ|~f`JtAd|f~H˂rXJltbے`p|ZdQbXv`fdQZ|~f`HAbےZdQbt˂rXQltbvpfH˂p`J~HfpbHAZp˙tAJlAbے`ZdQbtvnXJ`ےvpfHے`JXpfH~QtJlnXv`˙bHAZpdrtAvXnZdQbtfpvQJ`ےbdQZ|ZHAbtlJHfpdrtAJvXn`JXQrlJtAJ`ےdQZ|~f`XQrbtvnXrXQtbnJXQrlJtAv`fbHAZp~f`Qr˂pf۝`vtbAdZf~H˂rXJltvpfHlJtnXv`˙bHAZpdrtAے`JXtArdvnrltbvpfH˂pZrd|bHAZpdrtAJvXnl|Zv`fJ`ےvpfH˂pZHrd|~HfprXQvXnۑZHAbXnvˍ|drfpvQJ`ےbdQZ|~f`Ard|f~H˂rXJltQr˂p|ZQblXQJ`ےdQZ|~f`HAbےZdQbt˂rXQltbvpfHdQbt~HfpbHAZp˅f`Abے`ZdQbtvnXJ`ےvpfHے`JXpfH~QtJlnXv`˙bHAZpdrtAvXnZdQbtfpvQJ`ےbdQZ|ZHAbJtArdHAZpdrtAJvXn`JXQrlJtAJ`ےdQZ|~f`lJtArvnXvrXQvXnہJXQrlJtAv`fbHAZd~f`Qrېf۝`vtbAdZf~H˂rXJltvpfHlJtnXv`˙bHAZpdrtAے`JX|Zd˂rXQltbvpfH˂pZrdfbHAZpdrtAJvXnd|Zf~HfJ`ےvpfH˂pZHrd|~HfprtAJlvXnے`JXQXnvˍ|drfpvQJ`ےbdQZ|~fArd|f~H˂rXJltQHAbQbtlJ`ےdQZ|~f`HAbے~Hf˂rXQltbvpfHdQbtpvnbHAZp~f`Abے`ZdQbtvnXtbdvpfHr˂ppfH~QtJlnXv`˙bHAZpdrtAZHAbہZdQbtfpvQJ`ےbdQZ|`JXQJtArdbHAZpdrtAJvXn`JXQrpvnJ`ےdQZ|~f`l|ZdQXv`frXQvXnہJXQrlJtAv`fQZ|d~f`ZHAbېf۝`vtbAdZf~H˂rXJlt`JXQlJtnXv`˙bHAZpdtAJlr˂p|Zd˂rXQltbvpfH˂pZXv`fbHAZpdrtAJvXnbtl~HfJ`ےvpfH˂pZHrd|~HfprtAJlvXnے`JXQXnvˍ|drfpvQJ`ےbdQZ|r˂pArd|f~H˂rXtbZHAbQbJtAJ`ےdQZ|~f`HAbے~Hf˂rXQltbvpfHJtArdpvnbHAZd~f`Abے`ZdQbtvnXtbdvpfHr˂p`pfH~QtJlnXv`˙bHAZpdrtAZHAbہZdQbtfpvQJ`ےnvp``JXQrdfbHAZpdrtAJvXn`JXQrpvnJ`ےdQZ|~f`|ZdQXv`frtAJlvXnہJXQrlJtAv`fQZ|d~f`JXQrf۝`vtbAdZf~H˂rXJlt`JXQlJtnXv`˙bHAZpvXnrے`~Hf˂rXQltbvpfH˂pZXv`fbHAZpdrtAJvXnbtl~fpvtbdvpfH˂pZHrd|HfpۙrtAJlvXnۉ˂pZHXnvˍ|drfpvQJ`ےbdQZ|r˂pArd|f~H˂rXvpfHJXQrpvnJ`ےdQZ|~f`HAے`~Hf˂rXQltbvpfHJtAdQbnXv`QZ|d~f`Abے`ZdQbtvnrXtbdvpfHAbے`pfH~QtJlnXv`˙bHAZpdtAJlZHAbہZdQbtfpvQJ`ے~f`˂pZHXv`fbHAZpdrtAJvXnJXQrbpvnJ`ےdQZ|~f`tlJf~HrtAJlvXnہJXQrlJtAQJ`ےQZ|d~f`JXQrf۝`vtbAdZ|6666666666666666666666666666666666666666667 \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv32_0.dat b/vendor/endroid/qr-code/assets/data/qrv32_0.dat new file mode 100644 index 000000000..b72bdaa20 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv32_0.dat @@ -0,0 +1,289 @@ +}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTSTQRQRQRQRQRQRQRQPOPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:~}~}~}~}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTSTQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:}~}~}~}~}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopnmnmmmmmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWVUSTSTSTSTQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:}~}~}~}~}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPOPOPOPONMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:}~}~}~}~}|{|{|{|{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYVUVUVUVUSTSSSSSSQRQRQRQROPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:999999}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYVUVUVUVUTSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNMNMNMNMLKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<:9:9:9:9}~}~}~}~{|{|{|{|{zyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<:9:9:9:9}~}~}~}~{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmmmmmmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<:9:9:9:9}~}~}~}~{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLKLKLKLKJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<:9:9:9:9}~}~}~}~{|{|{|{|yzyzyzyzyxwxwxwxwxwxwxwxuvuvuvuvststststqrqrqrqropoponmnlklklklklklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<:9:9:9:987878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvststststqrqrqrqrmnmnmmmmlklklklklklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSSSSSSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<:999999:87878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvststststqrqrqrqrmnmnmnmnlklklklklklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJIJIJIJIHGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:87878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxwvuvuvuvuvuvuvuvststststqrqrqrqrmnmnmnmnlklklklkjijijijijijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:87878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvststststqrqrqrqpmnmnmnmnlklklklkjijijijijijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:87878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvststststopopopopmnmnmnmnlklklklkjijijijijijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHGHGHGHGFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:87878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvutstststststststopopopopmnmnmnmnlklklklkjijijijihghghghghghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:87878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststststststopopopopmnmnmnmmlklklklkjijijijihghghghghghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSSSSSSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<999999:987878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststststststopopopopmmmmnmnmlklklklkjijijijihghghghghghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFEFEFEFEDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<:9:9:98787878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststsrqrqrqropopopopnmnmnmnmlklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;:9:9:8787878787878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopnmnmnmnmlklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:99999:8787878787878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopnmnmnmnmlklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCBABABABAB?@?@?@?@=>=>=>=>9:9:9:9:8787878787878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>9:9:9:9:8787878787878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopnmnmnmmmlklklklkjijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSSSSSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=<;<9:9:9:9:8787878787878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmmmnmnmnlklklklkjijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABA@?@?@?@?@;<;<;<;<9:9:9:9:8787878787878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnlklklklkjijijijihghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?@;<;<;<;<9:9:9:9:8787878787878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnlklklklkjijijijihghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?@;<;<;<;<9:9:99998787878787878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnlklklklkjijijijihghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?>;<;<;<;<99:9:9:98787878787878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmnmnlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<:9:9:9:98787878787878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmnmnmmmmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSSSSSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<:9:9:9:98787878787878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopmmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSRQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<:9:9:9:98787878787878787}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUTSTSQRQRQRQRQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<:9:9:9:98787878787878765}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSSSSSQRQRQRQRQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<:9:999998787878765656565656565656565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +656565656565654343434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +656565654343434343434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + +656565654343434343434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!       + + + +656565654343434343434321212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +656565654343434321212121212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +656565654343434321212121212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +6565656543434343212121212121210/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!          + + + +6565656543434343212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!            + + + +6565656543434343212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!            + + + +6565656543434343212121210/0/0/0/0/0/0/.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!           + + + +6565656543434343212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +6565656543434343212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +6565656543434343212121210/0/0/0/.-.-.-.-.-.-.-,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + + + +6565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + + + + + +6565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!       + + + + + + + +6565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+,+,+,+*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!       + + + + + + 6565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!        + + + +6565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#       + + + +6565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)('('('('('&%&%&%&%$#$#$#$#         + + + +6565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#         + + + +6565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#"!"!         + + + +6565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('&%&%&%&%&%"!"!"!"!         + + + +6565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%"!"!"!"!         + + + +6565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%"!"!"!"!      + + + +6565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%$#"!"!"!"!         + + + +6565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +6565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +6565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +6565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +6565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!       + + + +6565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +6565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + + + + iihhggff,--..//0qppoonnmhiijjkkl54433221PQQRRSSTMLLKKJJIFGGHHIIJ43322110ddeeffgg44332211QQRRSSTTLLKKJJII99::;;<>==??@@AAB + + eeddccbb01122334mllkkjjilmmnnoop100//..-TUUVVWWXIHHGGFFEJKKLLMMN0//..--,hhiijjkk00//..--UUVVWWXXHHGGFFEE==>>??@@``__^^]]%%&&''((xxwwvvuu  + + yyzz{{|| + +   + + yzz{{||}$##""!! abbccdde<;;::998IJJKKLLMTSSRRQQP12233445lkkjjiih%%&]\\[[ZZYBCCDDEEF %%&&aa``__^^45566778ihhggffe ~~}pqqrrsst-,,++**)XYYZZ[[\EDDCCBBANOOPPQQR,++**))(llmmnopq,,++**))YYZZ[[\\DDCCBBAAAABBCCDD\\[[ZZYY))**++,,ttssrrqq}}~~~~}}|}~~ effgghhi87766554MNNOOPPQPOONNMML56677889hggffeed&''(())*YSSRRQQPFGGHHIIJ''(())**]]\\[[ZZ899::;;>=RSSYYZZ[(''&&%%rssttuuv((''&&%%]]^^__``@@??>>==EEFFGGHHXXWWVVUU--..//00ppoonnmm |{{zzyyxijjkkllm43322110QRRSSTTULKKJJIIH9::;;<<=dccbbaa`*++,,--.POONNMMLJKKLLMMN~~}}++,,--..YYXWVUTS<==>>??@a``__^^]$%%&&''(yxxwwvvu  + + xyyzz{{|%$$##""!`aabbccd=<<;;::9[\\]]^^_vwwxxyyz$$##""!!aabbccdd<<;;::99IIJJKKLLTTSSRRQQ11223344llkkjjii + + xwwvvuutmnnooppq0//..--,UVVWWXXYHGGFFEED=>>??@@A`__^^]]\.//00112LKKJJIIHNOOPPQQR||{{zzyy~~}}||//001122SRRQQPPO@AABBCCD]\\[[ZZY())**++,uttssrrq |}}~~! deeffggh98877665_``aabbcz{{||}}~ eeffgghh88776655MMNNOOPPPPOONNMM55667788hhggffee ~~}}tssrqpon !~~}}| qrrssttu,++**))(YZZ[[\\]DCCBBAA@ABBCCDDE\[[ZZYYX23344556HGGFFEEDRSSTUVWXxxwwvvuu {{zzyyxx33445566ONNMMLLKDEEFFGGHYXXWWVVU,--..//0qppoonnmhiijjkkl54433221cddeeffg~iijjkkll44332211QQRRSSTTLLKKJJII99::;;<>==>??@@``__^^]]%%&&''((xxwwvvuu iihhggff%&&''(()xwwvvuut  + + yzz{{||}$##""!! abbccdde<;;::998IJJKKLLMTSSRRQQP?@@AABBC@??99887]]^^__``ppoonnmm%%&&''((ssmmllkk@@AABBCCGFFEEDDCLMMNNOOPQPPOONNM45566778ihhggffe ~~}pqqrrsst-,,++**)kllmmsst qqrrsstt,,++**))YYZZ[[\\DDCCBBAAAABBCCDD\\[[ZZYY))**++,,ttssrrqqeeddccbb)**++,,-tssrrqqp}~~ effgghhi87766554MNNOOPPQPOONNMMLCDDEEFFG76655443aabbccddllkkjjii))**++,,jjiihhggDDEEFFGGCBBAA@@?PQQRRSSTMLLKKJJI899::;;>==EEFFGGHHXXWWVVUU--..//00ppoonnmm%%&&aa``__^^-..//001poonnmmlijjkkllm43322110QRRSSTTULKKJJIIHGHHIIJJK3221100/eeffgghhhhggffee--..//00ffeeddccHHIIJJKK?>=<;:99TUUVVWWXIHHGGFFE<==>>??@a``__^^]$%%&&''(yxxwwvvu  + + xyyzz{{|%$$##""!xyyzz{{| + + yyzz{{||$$##""!!aabbccdd<<;;::99IIJJKKLLTTSSRRQQ11223344llkkjjii~~}}||''(())**]]\\[[ZZ12233445lkkjjiihmnnooppq0//..--,UVVWWXXYHGGFFEEDKLLMMNNO/..--,,+iijjkkllWWVVUUTTddccbbaa11223344bbaa``__LLMMNNOO88776655XYYZZ[[\EDDCCBBA@AABBCCD]\\[[ZZY())**++,uttssrrq |}}~~! |}}~~}}~~ eeffgghh88776655MMNNOOPPPPOONNMM55667788hhggffee {{zzyyxx++,,--..YYXWVUTS56677889hggffeed !~~}}| qrrssttu,++**))(YZZ[[\\]DCCBBAA@OPPQQRRS+**))(('mmnopqrsSSRRQQPP``__^^]]55667788^^]]\\[[PPQQRRSS44332211\]]^^__`A@@??>>=DEEFFGGHYXXWWVVU,--..//0qppoonnm + + iijjkkll44332211QQRRSSTTLLKKJJII99::;;<>==>??@@``__^^]]%%&&''((ssmmllkk33445566ONNMMLLK=>>??@@A`__^^]]\%&&''(()xwwvvuut  + + yzz{{||}$##""!! abbccdde<;;::998\]]^^__`wxxyyzz{KKJJIIHHXXWWVVUU==>>??@@QQPPOONN]]^^__``,,++**))deeffggh98877665LMMNNOOPQPPOONNM45566778ihhggffe ~~}~~}}qqrrsstt,,++**))YYZZ[[\\DDCCBBAAAABBCCDD\\[[ZZYY))**++,,jjiihhgg778899??KJJIIHHGABBCCDDE\[[ZZYYX)**++,,-tssrrqqp}~~ effgghhi87766554`aabbccd{||}}~~GGFFEEDDTTSSRRQQAABBCCDDMMLLKKJJaabbccdd((''&&%%hiijjkkl54433221PQQRRSSTMLLKKJJI899::;;>==EEFFGGHHXXWWVVUU--..//00ffeeddcc@@AABBCCGFFEEDDCEFFGGHHIXWWVVUUT-..//001poonnmmlijjkkllm43322110deeffgghCCBBAA@@PPOONNMMEEFFGGHHIIHHGGFFeeffgghh$#"! lmmnnoop100//..-TUUVVWWXIHHGGFFE<==>>??@a``__^^]$%%&&''(yxxwwvvu  + + xxwwvvuu  + + yyzz{{||$$##""!!aabbccdd<<;;::99IIJJKKLLTTSSRRQQ11223344bbaa``__DDEEFFGGCBBAA@@?IJJKKLLMTSSRRQQP12233445lkkjjiihmnnooppq0//..--,hiijjkkl??>>==<=<;:99MNNOOPPQPOONNMML56677889hggffeed !~~}}| qrrssttu,++**))(lmmssttu +;;::9988HHGGFFEEMMNNOOPPAA@@??99mmssttuutuuvvwwx)((''&&%\]]^^__`A@@??>>=DEEFFGGHYXXWWVVU,--..//0qppoonnm~~}}||{!"#$%%&&ppoonnmmiijjkkll44332211QQRRSSTTLLKKJJII99::;;<>??@@QQPPOONNPPQQRRSS44332211UVVWWXXYHGGFFEED=>>??@@A`__^^]]\%&&''(()xwwvvuut  + + yzz{{||}$##""!! yzz{{||}33221100@@??>>==UUVVWWXX44332211zz{{||}}|}}~~! deeffggh98877665LMMNNOOPQPPOONNM45566778ihhggffe ~~} + + wvvuutts++,,--..hhggffee ~~}}qqrrsstt,,++**))YYZZ[[\\DDCCBBAAAABBCCDDMMLLKKJJYYZZ[[\\00//..--YZZ[[\\]DCCBBAA@ABBCCDDE\[[ZZYYX)**++,,-tssrrqqp}~~ }~~ //..--,,<<;;::99YYZZ[[\\00//..--~~ +hiijjkkl54433221PQQRRSSTMLLKKJJI899::;;>==EEFFGGHHIIHHGGFF]]^^__``,,++**))]^^__``a@??>>==>??@a``__^^]$%%&&''(yxxwwvvujiihhggf33445566``__^^]]%%&&''((xxwwvvuu  + + yyzz{{||$$##""!!aabbccdd<<;;::99IIJJKKLLEEDDCCBBaabbccdd((''&&%%abbccdde<;;::998IJJKKLLMTSSRRQQP12233445lkkjjiih ''&&%%$$44332211aabbccdd((''&&%%pqqrrsst-,,++**)XYYZZ[[\EDDCCBBA@AABBCCD]\\[[ZZY())**++,uttssrrqfeeddccb778899:;\\[[ZZYY))**++,,ttssrrqq}}~~ eeffgghh88776655MMNNOOPPAA@@??99eeffgghh$#"! effgghhi87766554MNNOOPPQPOONNMML56677889hggffeed !~~}}| ~~}}||##""!! 00//..--eeffgghh + +  tuuvvwwx)((''&&%\]]^^__`A@@??>>=DEEFFGGHYXXWWVVU,--..//0qppoonnmbaa``__^<=>??@@AXXWWVVUU--..//00ppoonnmmiijjkkll44332211QQRRSSTT88776655iijjkkllijjkkllm43322110QRRSSTTULKKJJIIH9::;;<<=dccbbaa`!""##$$%|{{zzyyx + +  {{zzyyxx,,++**))iijjkkll  + + xyyzz{{|%$$##""!`aabbccd=<<;;::9HIIJJKKLUTTSSRRQ01122334mllkkjji%^]]\\[[ZABBCCDDETTSSRRQQ11223344llkkjjiimmnnoopp00//..--UUVVWWXX44332211mmssttuumnnooppq0//..--,UVVWWXXYHGGFFEED=>>??@@A`__^^]]\%&&''(()xwwvvuut  + + wwvvuutt((''&&%%mmnnoopp |}}~~! deeffggh98877665LMMNNOOPQPPOONNM45566778ihhggffe%&&''(()ZYYSSRRQEFFGGHHIPPOONNMM55667788hhggffee ~~}}qqrrsstt,,++**))YYZZ[[\\00//..--vvwwxxyyqrrssttu,++**))(YZZ[[\\]DCCBBAA@ABBCCDDE\[[ZZYYX)**++,,-tssrrqqp~ !"ssrrqqpp$$##""!!qqrrsstthiijjkkl54433221PQQRRSSTMLLKKJJI899::;;>==>??@a``__^^]-..//001MLLKKJJIMNNOOPPQHHGGFFEE==>>??@@``__^^]]%%&&''((xxwwvvuu  + + yyzz{{||$$##""!!aabbccdd((''&&%%~~ +yzz{{||}$##""!! abbccdde<;;::998IJJKKLLMTSSRRQQP12233445lkkjjiih zyyxxwwv(())**++kkjjiihh yyzz{{|| + + |{{zzyyx ~~}pqqrrsst-,,++**)XYYZZ[[\EDDCCBBA@AABBCCD]\\[[ZZY12233445IHHGGFFEQRRSSTUVDDCCBBAAAABBCCDD\\[[ZZYY))**++,,ttssrrqq}}~~ eeffgghh + }~~ effgghhi87766554MNNOOPPQPOONNMML56677889hggffeed !~~}}| + + vuuttssm,,--..//ggffeedd + + }}~~ + + xwwvvuut !!""##$}||{{zzy + +  tuuvvwwx)((''&&%\]]^^__`A@@??>>=DEEFFGGHYXXWWVVU56677889EDDCCBBAWXYYZZ[[@@??>>==EEFFGGHHXXWWVVUU--..//00ppoonnmmiijjkkllijjkkllm43322110QRRSSTTULKKJJIIH9::;;<<=dccbbaa`!""##$$%|{{zzyyx mllkkjji00112233ccbbaa``tssrqpon$%%&&''(yxxwwvvu  + + xyyzz{{|%$$##""!`aabbccd=<<;;::9HIIJJKKLUTTSSRRQ9??@@AABA@@??998\\]]^^__<<;;::99IIJJKKLLTTSSRRQQ11223344llkkjjiimmnnooppmnnooppq0//..--,UVVWWXXYHGGFFEED=>>??@@A`__^^]]\%&&''(()xwwvvuutihhggffe44556677__^^]]\\ mmllkkjj())**++,uttssrrq |}}~~! deeffggh98877665LMMNNOOPQPPOONNMBCCDDEEF87766554``aabbcc88776655MMNNOOPPPPOONNMM55667788hhggffee ~~}}qqrrsstt qrrssttu,++**))(YZZ[[\\]DCCBBAA@ABBCCDDE\[[ZZYYX)**++,,-tssrrqqpeddccbba8899:;<=[[ZZYYXX rrssttuu++**))((ZZ[[\\]]CCBBAA@@BBCCDDEE[[ZZYYXX**++,,--iihhggff8899??@@JIIHHGGFBCCDDEEF[ZZYYXXW*++,,--.srrqqppo~fgghhiij76655443NOOPPQQR87766554vwwxxyyz + +  vvwwxxyy''&&%%$$^^__``aa??>>==<JKKLLMMNSRRQQPPO23344556kjjiihhgnooppqqr/..--,,+VWWXXYYZ0//..--,~ + + ~~ffgghhii77665544NNOOPPQQOONNMMLL66778899]]\\[[ZZIIJJKKLL=<;:9988NOOPPQQRONNMMLLK6778899:gffeeddc !!"~~}}||{ +rssttuuv+**))(('Z[[\\]]^,++**))( jjkkllmm33221100RRSSTTUUKKJJIIHH::;;<<==YYSSRRQQMMNNOOPP77665544RSSTTUUVKJJIIHHG:;;<<==>cbbaa``_"##$$%%&{zzyyxxw +  vwwxxyyz'&&%%$$#^__``aab(''&&%%nnooppqq//..--,,VVWWXXYYGGFFEEDD>>??@@AAPPOONNMMQQRRSSYY33221100VWWXXYYZGFFEEDDC>??@@AAB_^^]]\\[&''(())*wvvuutts + + z{{||}}~#""!! bccddeef~~} !!~~}}|| rrssttuu++**))((ZZ[[\\]]CCBBAA@@BBCCDDEELLKKJJIIZZ[[\\]]//..--,,Z[[\\]]^CBBAA@@?BCCDDEEF[ZZYYXXW*++,,--.srrqqppo~fgghhiij}||{{zzy""##$$%%{{zzyyxx + +  vvwwxxyy''&&%%$$^^__``aa??>>==<>==<<;FGGHHIIJWVVUUTTS.//00112onnmmllkjkkllmmnyxxwwvvu &&''(())wwvvuutt + + zz{{||}}##""!! bbccddee;;::9988JJKKLLMMDDCCBBAAbbccddee''&&%%$#bccddeef;::99887JKKLLMMNSRRQQPPO23344556kjjiihhgnooppqqruttssrrq !!""##$**++,,--ssrrqqpp~~ffgghhii77665544NNOOPPQQ@@??9988ffgghhii"! fgghhiij76655443NOOPPQQRONNMMLLK6778899:gffeeddc !!"~~}}||{ +rssttuuv qppoonnm$%%&&''(..//0011oonnmmlljjkkllmm33221100RRSSTTUU77665544jjkkllmmjkkllmmn3221100/RSSTTUUVKJJIIHHG:;;<<==>cbbaa``_"##$$%%&{zzyyxxw +  vwwxxyyz + + +mllkkjji())**++,22334455kkjjiihhnnooppqq//..--,,VVWWXXYY33221100ssttuuvvnooppqqr/..--,,+VWWXXYYZGFFEEDDC>??@@AAB_^^]]\\[&''(())*wvvuutts + + z{{||}}~ + ihhggffe,--..//066778899ggffeedd !!~~}}|| rrssttuu++**))((ZZ[[\\]]//..--,,wwxxyyzzrssttuuv+**))(('Z[[\\]]^CBBAA@@?BCCDDEEF[ZZYYXXW*++,,--.srrqqppo~eddccbba01122334::;;<<==ccbbaa``""##$$%%{{zzyyxx + +  vvwwxxyy''&&%%$$^^__``aa++**))(({{||}}~~ vwwxxyyz'&&%%$$#^__``aab?>>==<<;FGGHHIIJWVVUUTTS.//00112onnmmllka``__^^]45566778>>??@@AA__^^]]\\&&''(())wwvvuutt + + zz{{||}}##""!! bbccddee''&&%% + + z{{||}}~#""!! bccddeef;::99887JKKLLMMNSRRQQPPO23344556kjjiihhg]\\[[ZZY899::;;>??@FFGGHHIIWWVVUUTT..//0011oonnmmlljjkkllmmjkkllmmn3221100/RSSTTUUVKJJIIHHG:;;<<==>cbbaa``_"##$$%%&{zzyyxxw + %%&&'UTTSSRRQ@AABBCCDJJKKLLMMSSRRQQPP22334455kkjjiihhnnooppqqnooppqqr/..--,,+VWWXXYYZGFFEEDDC>??@@AAB_^^]]\\[&''(())*wvvuutts'(())**+QPPOONNMDEEFFGGHNNOOPPQQOONNMMLL66778899ggffeedd !!~~}}|| rrssttuu +rssttuuv+**))(('Z[[\\]]^CBBAA@@?BCCDDEEF[ZZYYXXW*++,,--.srrqqppo+,,--../MLLKKJJIHIIJJKKLRRSSTTUUKKJJIIHH::;;<<==ccbbaa``""##$$%%{{zzyyxx + +  vvwwxxyy +  vwwxxyyz'&&%%$$#^__``aab?>>==<<;FGGHHIIJWVVUUTTS.//00112onnmmllk~~}}||{/0011223IHHGGFFELMMNNOOPVVWWXXYYGGFFEEDD>>??@@AA__^^]]\\&&''(())wwvvuutt + + zz{{||}} + +  + + z{{||}}~#""!! bccddeef;::99887JKKLLMMNSRRQQPPO23344556kjjiihhg{zzyyxxw34455667EDDCCBBAPQQRRSSTZZ[[\\]]CCBBAA@@BBCCDDEE[[ZZYYXX**++,,--ssrrqqpp~~~~}}||{~fgghhiij76655443NOOPPQQRONNMMLLK6778899:gffeeddc !!"wvvuutts78899??@A@@??>>=TUUVVWWX^^__``aa??>>==<cbbaa``_"##$$%%&smmllkkj@AABBCCD=<<;;::9XYYZZ[[\bbccddee;;::9988JJKKLLMMSSRRQQPP22334455kkjjiihh wvvuuttsnooppqqr/..--,,+VWWXXYYZGFFEEDDC>??@@AAB_^^]]\\[&''(())*jiihhggfDEEFFGGH98877665\]]^^__`ffgghhii77665544NNOOPPQQOONNMMLL66778899ggffeedd !!~~}}|| srqponmm !!"~~}}||{ +rssttuuv+**))(('Z[[\\]]^CBBAA@@?BCCDDEEF[ZZYYXXW*++,,--.feeddccbHIIJJKKL54433221`aabbccdjjkkllmm33221100RRSSTTUUKKJJIIHH::;;<<==ccbbaa``""##$$%%{{zzyyxx + + llkkjjii"##$$%%&{zzyyxxw +  vwwxxyyz'&&%%$$#^__``aab?>>==<<;FGGHHIIJWVVUUTTS.//00112baa``__^LMMNNOOP100//..-deeffgghnnooppqq//..--,,VVWWXXYYGGFFEEDD>>??@@AA__^^]]\\&&''(())wwvvuutthhggffee&''(())*wvvuutts + + z{{||}}~#""!! bccddeef;::99887JKKLLMMNSRRQQPPO23344556^]]\\[[ZPQQRRSSY-,,++**)hiijjkklrrssttuu++**))((ZZ[[\\]]CCBBAA@@BBCCDDEE[[ZZYYXX**++,,--ssrrqqppddccbbaa*++,,--.srrqqppo~fgghhiij76655443NOOPPQQRONNMMLLK6778899:ZYYSSRRQYZZ[[\\])((''&&%lmmnnoopvvwwxxyy''&&%%$$^^__``aa??>>==<QPPOONNM]^^__``a%$$##""!pqqrrsstzz{{||}}##""!! bbccddee;;::9988JJKKLLMMSSRRQQPP22334455kkjjiihh~~}}||{{(())**++\\[[ZZYY23344556kjjiihhgnooppqqr/..--,,+VWWXXYYZGFFEEDDC>??@@AABMLLKKJJIabbccdde! tuuvvwwx~~ffgghhii77665544NNOOPPQQOONNMMLL66778899ggffeedd !!zzyyxxww,,--..//XWVUTSSR6778899:gffeeddc !!"~~}}||{ +rssttuuv+**))(('Z[[\\]]^CBBAA@@?BCCDDEEFIHHGGFFEeffgghhixyyzz{{|jjkkllmm33221100RRSSTTUUKKJJIIHH::;;<<==ccbbaa``""##$$%%vvuuttss00112233RQQPPOON:;;<<==>cbbaa``_"##$$%%&{zzyyxxw +  vwwxxyyz'&&%%$$#^__``aab?>>==<<;FGGHHIIJEDDCCBBAijjkkllm|}}~~nnooppqq//..--,,VVWWXXYYGGFFEEDD>>??@@AA__^^]]\\&&''(())mmllkkjj44556677NMMLLKKJ>??@@AAB_^^]]\\[&''(())*wvvuutts + + z{{||}}~#""!! bccddeef;::99887JKKLLMMNA@@??998mssttuuvbdQZ|bdQZ|H~fZdQbt`f~Zp˂AJltf`vXے`JX`JXQ|ZdQfpvZp˂AJltf`vXے`JXZdQbtfpvےbHAJlt`vXnے`JXQ|ZdQbfpvp˂rJlt`vXn`vXnے`JXQ|ZdQbpvnJltvXnvXn`JXQZdQbtfpv˂rXJltvXn`JXQZdQbtfpvQJ`ےbdQZ|vpfHdrtA`vXn`vXnlJtAHfpvrXQJ`ۉbdQZ|nvpQr˂prbtlbtlnXv`rXQJ`ۉbdQZ|nvpQr˂plJtAnXv`Zp˂bdQZ|vpfr˂ptlJnXv`XQJ`ےbdQZ|vpfr˂pr˂ptlJXv`pbdQZ|vpfHr˂pr˂plJtnXv`QJ`ےbdQZ|vpfHr˂plJtnXv`˙bHAXQdrt~f`Jltvpfr˂prdt璀nXvbHAdrtfH~ˑZHAbJtAdJtArdf~HbHAdrtfH~ˑZHAbrd|f~HrXQJdrtAH~fZHAbtArdf~HbHAZdrtAH~fZHAbZHAےtArdvnrdrtA~f`ZHAbZHAے`Ard|f~HbHAZpdrtA~f`ZHAbArd|f~HJ`ےAdQZ|vXnbdQZ|H~f`JXQrlJtAr`f~Zp˂AJltf`vXے`JX|ZdQ|ZdQfpvZp˂AJltf`vXے`JXZdQtArdfpvbHAZpJlt`vXnے`JXQ|ZdQbfpvp˂rJlt`vXnے`JXQ`JXQr|ZdQbXQJ`pJltvXn`JXQJXQrZdQbtfpv˂rXJltvXn`JXQZdQbtfpvbHAZp˂drtAvpfHdrtA`vXn˂pZd|ZHfvnXrXQJ`ۉbdQZ|nvpQr˂pbtlbnXv`nXv`rXQJ`ۉbdQZ|nvpQr˂p|Zd~HfprXQbdQZ|vpfr˂ptlJnXv`XQJ`ےbdQZ|vpfr˂pbtltlJ˂rXQbdQZ|vpfHr˂pbtllJtnXv`QJ`ےbdQZ|vpfHr˂plJtnXv`˂rXQJlt~f`JltvpfHAbےdQbt璕v`fbHAdrtfH~ˑZHAbJtArdf~HfHbHAdrtfH~ˑZHAbQbtlvnXJ`ےdrtAH~fZHAbtArdf~HbHAZdrtAH~fZHAbJtAdtArdJ`ےdrAJ~f`ZHAbJtAd|Ard|f~HbHAZpdrtA~f`ZHAbArd|f~HJ`ےbdQZ|vXnvfbdQZ|H~f`JXQrlJtAr~HfpZp˂AJltf`vXے`JX|ZdQfpvfpvZp˂AJltf`vXے`JXJtArdv`fbHAZpJlt`vXnے`JXQ|ZdQbfpvp˂rJlt`vXnے`JXQ|ZdQb|ZdQbbHAZptbdQZvXn`JXQZdQbtZdQbfpv˂rXJltvXn`JXQZdQbtfpvbHAZp`drtAH~fdrtA`vXn˂pZd|lvnXrXQJ`ۉbdQZ|nvpQr˂pbtlnXv`nrXQJ`rXQJ`ۉbdQZ|nvpQr˂p|Zd~HfprXQbdQZ|vpfr˂ptlJnXv`XQJ`ےbdQZ|vpfr˂ptlJnXv`˂rXQ|drvpfHr˂plJtnXv`nXv`QJ`ےbdQZ|vpfHr˂plJtnXv`ˁےbHJl|d`vXnJltvpfHAXQrJtArdv`fbHAdrtfH~ˑZHAbJtArdf~HےHAbHAdrtfH~ˑZHAbQbtdvnXJ`bAZdrtAH~fZHAbtArdf~HbHAZdrtAH~fZHAbtArdpvnJ`ےtAJl璅~f`ZHAbArd|f~HfHfpbHAZpdrtA~f`ZHAbArd|f~HAZp˂rtAJlvpfbdQZ|H~f˂pZHA|ZdQ~HfpZp˂AJltf`vXے`JX|ZdQfpvZp˂Zp˂AJltf`vXے`JX|ZdQv`pp˂rJlt`vXnے`JXQ|ZdQbfpvp˂rJlt`vXnے`JXQ|ZdQbXv`fbHAXQJtbdQZvXn`JXQZdQbtfpvvn˂rXJltvXn`JXQZdQbtfpvrXQJ`tbdH~fdrtA`vXnbے`btlvnv`rXQJ`ۉbdQZ|nvpQr˂pbtlnXv`rXQJ`rbdQZ|bdQZ|nvpQr˂pbtlvnrXbdQZ|bdQZ|vpfr˂ptlJnXv`XQJ`ےbdQZ|vpfr˂ptlJ~Hf`ےb|drvpfHr˂plJtnXv`rXQJ`QJ`ےbdQZ|vpfHr˂plJtnXv`ˁےbHQZ|d`vXn`JXQrJltvpfJXQrJtArdf~HbHAdrtfH~ˑZHAbJtArdf~HbHAdrtdtAfH~ˑZHAbJtArdQJ`AdrtAdtAJH~fZHAbtArdf~HbHAZdrtAH~fZHAbtArdpvnHAZp˂tAJbd~f`ZHAbArd|f~HHAZpbHAZpdrtA~f`ZHAbArd|f~HAZp˂rtAJlvf~˂pZbdQZ|H~f˂pZHA|ZdQfpvZp˂AJltf`vXے`JX|ZdQfpvZp˂AJltJltf`vXے`JX|ZdQZp˂Jltltb`vXnے`JXQ|ZdQbfpvp˂rJlt`vXnے`JXQ|ZdQbXv`frXQJQZ|dvXn`JXQZdQbtfpv˂rX˂rJltvXn`JXQZdQbtfpv㉐bHAtdf`vXHAbےdrtA`vXnb˂tArdnXv`rXQJ`ۉbdQZ|nvpQr˂pbtlnXv`rXQJ`ۉbdQZ|bnvpnvpQr˂pbtl|rXQJ`bdQZ|nvpvpfr˂ptlJnXv`XQJ`ےbdQZ|vpfr˂ptlJnX`ےbrtAJlvpfHr˂plJtnXv`QJ`ےbdQZ|bdQZ|vpfHr˂plJtnXv`Zp˂rtAJlnvp`JXQrJltvpfpZHAb|ZdQbf~HbHAdrtfH~ˑZHAbJtArdf~HbHAdrtfHfH~ˑZHAbZdQb㒐bHAdrtAfHfH~fZHAbtArdf~HbHAZdrtAH~fZHAbtArdv`fHAZp`tbd~f`ZHAbArd|f~HbHAZpdrtAdtAJl~f`ZHAbArd|f~HrXQJ`ےtbdQfH~˂pZbdQZ|H~fے`JtlJfpvZp˂AJltf`vXے`JX|ZdQfpvZp˂AJltf`vXf`vXے`JXnXv`pZp˂Jlt`vXn`vXnے`JXQ|ZdQbfpvp˂rJlt`vXnے`JXQ|ZdQb~HfpےbHAQZ|dvXn`JXQZdQbtfpv˂rXJlttbvXn`JXQZdQbtfpv㒐bHAZ|df`vXHAbےdrtA`vXnXQr˂tArdnvfrXQJ`ۉbdQZ|nvpQr˂pbtlnXv`rXQJ`ۉbdQZ|nvpnr˂pQr˂pvnXrXQJ`bdQZ|vpfr˂pr˂ptlJnXv`XQJ`ےbdQZ|vpfr˂ptlJvnXZp˂rtAJlvpfHr˂plJtnXv`QJ`ےbdQZ|nvpvpfHr˂plJtnXv`Zp˂rtAJlnvp`JXQrJltvpfpZHAb|ZdQb~HfpےbHAdrtfH~ˑZHAbJtArdf~HbHAdrtfH~ˑZHAbZHAەv`fbHAZdrtAH~fZHAbZHAےtArdf~HbHAZdrtAH~fZHAbtArdv`frXQJ`bQZ|~f`ZHAbArd|f~HbHAZpdrtAfHf`~f`ZHAbArd|f~HrXQHAZptbdQf~f`˂pZbdQZ|H~fے`ptd|vnXZp˂AJltf`vXے`JX|ZdQfpvZp˂AJltf`vXے`JX`JXQ~HfprXQJJlt`vXnے`JXQ`JXQr|ZdQbfpvp˂rJlt`vXnے`JXQ|ZdQb~HXvےbHAdrtAvXn`JXQZdQbtfpv˂rXJltvXnvXn`JXQZdQbtfpv˂rXZ|ltvXnrHAbےdrtA`vXnZHAbZdQbtv`frXQJ`ۉbdQZ|nvpQr˂pbtlnXv`rXQJ`ۉbdQZ|nvpQr˂prbtlvnX`ےbbdQZ|vpfr˂pbtltlJnXv`XQJ`ےbdQZ|vpfr˂ptlJ`f~Zp˂JltvpfHr˂plJtnXv`QJ`ےbdQZ|vpfHr˂pr˂plJtnXv`QJ`ےbnۀ˂pZ`JXQrJltvpfے`JXQlJtA~HfpےbHAdrtfH~ˑZHAbJtArdf~HbHAdrtfH~ˑZHAb|ZdQv`fHAZp˂drtAH~fZHAbJtAdtArdf~HbHAZdrtAH~fZHAbtArdHfpvbHAZbdQZ|~f`ZHAbArd|f~HbHAZpdrtA~f`ZHAbZHAے`Ard|f~HbHAZpvpff`HAbے˂pZbdQZ|H~fr˂prd|vnXZp˂AJltf`vXے`JX|ZdQfpvZp˂AJltf`vXے`JXbtlnXrXQJJlt`vXnے`JXQ|ZdQb|ZdQbfpvp˂rJlt`vXnے`JXQ|ZdQbnXvp˂rdrtAvXn`JXQZdQbtfpv˂rXJltvXn`JXQJXQrZdQbtfpv˂rXvXn`JXQrHAbےdrtA`vXnZHAbZdQbtv`frrXQJ`ۉbdQZ|nvpQr˂pbtlnXv`rXQJ`ۉbdQZ|nvpQr˂pJtArdv`f`ےbbdQZ|vpfr˂ptlJnXv`nXv`XQJ`ےbdQZ|vpfr˂ptlJ`f~XQJ`ےJltvpfHr˂plJtnXv`QJ`ےbdQZ|vpfHr˂pbtllJtnXv`QJ`p˅vpfH˂pZ`JXQrJltvpfے`JXQl|ZQJHAbHAdrtfH~ˑZHAbJtArdf~HbHAdrtfH~ˑZHAb|ZdQ~HfpHAZpdrtAH~fZHAbtArdf~HfHfbHAZdrtAH~fZHAbtArdHfp`bHAZbQZd~f`ZHAbArd|f~HbHAZpdrtA~f`ZHAbJtAd|Ard|f~Hrbd~f`HAbے˂pZbdQZ|H~fHAbےdQbnXZp˂Zp˂AJltf`vXے`JX|ZdQfpvZp˂AJltf`vXے`JXbtlvnXrQJ`ےJlt`vXnے`JXQ|ZdQbfpvpvnp˂rJlt`vXnے`JXQ|ZdQbf~Hp˂rrtAJlvXn`JXQZdQbtfpv˂rXJltvXn`JXQZdQbtZdQbfpvQZ|lvXn`JXQrHAbےdrtA`vXn`JXQrv`f~rXQJ`rbdQZ|bdQZ|nvpQr˂pbtlnXv`rXQJ`ۉbdQZ|nvpQr˂pJtArdtv`fbHAZpbdQZ|vpfr˂ptlJnXv`rXQJ`XQJ`ےbdQZ|vpfr˂ptlJfpvXQHAZptbdQvpfHr˂plJtnXv`QJ`ےbdQZ|vpfHr˂plJtnXv`nXv`˒tbdQvpfH˂pZ`JXQrJltvpf˂pZfpv㒐bHAdrtdtAfH~ˑZHAbJtArdf~HbHAdrtfH~ˑZHAblJt~HXv`˂rXdrtAH~fZHAbtArdf~HےHAZbHAZdrtAH~fZHAbtArdnXv`˂rXQZ|d~f`ZHAbArd|f~HbHAZpdrtA~f`ZHAbArd|f~HfHfpZ|d~fvHAbے˂pZbdQZ|H~fHAbےnXv`Zp˂AJltJltf`vXے`JX|ZdQfpvZp˂AJltf`vXے`JXArd|f~HQJ`ےJlt`vXnے`JXQ|ZdQbfpvp˂rp˂rJlt`vXnے`JXQ|ZdQbf~HJ`ےrtAJlvXn`JXQZdQbtfpv˂rXJltvXn`JXQZdQbtfpvvnrtAJlnvp`JXQrHAbےdrtA`vXn`JXQrf~HrXQJ`ۉbdQZ|bnvpnvpQr˂pbtlnXv`rXQJ`ۉbdQZ|nvpQr˂pZdQbtfpvbHAZpbdQZ|vpfr˂ptlJnXv`XQJ`ےbdQZ|bdQZ|vpfr˂ptlJfpvbHAZptbdQvpfHr˂plJtnXv`QJ`ےbdQZ|vpfHr˂plJtnXv`rXQJ`ptbdQfH~˂pZ`JXQrJltvpf˂p|fpv㒐bHAdrtfHfH~ˑZHAbJtArdf~HbHAdrtfH~ˑZHAblJtnXv`˂rQJdrtAH~fZHAbtArdf~HbHAZdrtAdtAJH~fZHAbtArd~Hf˂rXQZ|AJl~f`ZHAbArd|f~HbHAZpdrtA~f`ZHAbArd|f~H˂rXZ|dtf`vXHAbے˂pZbdQZ|H~fZdQbtnXv`Zp˂AJltf`vXf`vXے`JX|ZdQfpvZp˂AJltf`vXے`JXArd|f~HbHAJlt`vXnے`JXQ|ZdQbfpvp˂rJltltb`vXnے`JXQ|ZdQbpvnJ`p˂tbvXn`JXQZdQbtfpv˂rXJltvXn`JXQZdQbtfpvQJ`ےbdQZ|nvp`JXQrHAے`drtA`vXnlJtAf~fvrXQJ`ۉbdQZ|nvpnr˂pQr˂pbtlnXv`rXQJ`ۉbdQZ|nvpQr˂plJtAfp`Zp˂bdQZ|vpfr˂ptlJnXv`XQJ`ےbdQZ|nvpvpfr˂ptlJXv`frbdQnvpvpfHr˂plJtnXv`QJ`ےbdQZ|vpfHr˂plJtnXv`˙bHAZpdrtfH~˂pZJXQrbJltvpfrd|nXvbHAdrtfH~ˑZHAbZHAJtArdf~HbHAdrtfH~ˑZHAbrd|f~HrXQJ`drtAH~fZHAbtArdf~HbHAZdrtAfHfH~fZHAbtArd~HfZ|rAfHf`~f`ZHAbArd|f~HbHAZpdrtA~f`ZHAbArd|f~H˂rXAJltf`vnHAbےtlJtAd|rd|~HfbHAZpdrtAJ~f`HAbےrd|~HfbHAZp|drf`pfJXQrrd|~HfpbHAZp˙rtAJl~f`Abے`Aے`rd|~HfpbHAZp˙rtAJl~f`ZHAbQXb㉀f۝`vZdQbtZdQbnpvn˂rXQltbvXn`JXQrZdQbtpvn˂rXQtAJlH~fpZHAZdQbtvnXrXQtbdvXnہJXQrJXQrbtZdQbtvnXrXQtbdvXnے`JXQۑpJAHrXnvˍlJtAXv`fXv`fJ`ےdQZ|vpfH˂pZlJtAXv`fJ`ےtbdQZ`vXnbے`JlJtAv`fJ`ےQZ|dvpfH˂pZHlJtlJtAv`fJ`ےQZ|dvpfHr˂p󙐂ˁ`Zp|drrd|~HfHfpbHAZpdrtAJ~f`HAbےrd|~HfbHAZp|drvpfQrpZrd|~HfpbHAZp˙rtAJl~f`Abے`Ad|rd|~HfpbHAZp˙rtAJl~f`ZHAbQXb㉀QtJlZdQbtpvnvnr˂rXQltbvXn`JXQrZdQbtpvn˂rXQtAdQZ|H~fHAbےZdQbtvnXrXQtbdvXnہJXQrZdQbtZdQbnXvnXrXQtbdvXnے`JXQHXnvˍtbAdZlJtAXv`fXQJ`ےJ`ےdQZ|vpfH˂pZlJtAXv`fJ`ےdrtA`vXH`JXQrlJtAv`fJ`ےQZ|dvpfH˂pZHlJtAv`fv`fJ`ےQZ|dvpfHAbے`pfH~|drrd|~HfHAZpbHAZpdrtAJ~f`HAbےrd|~HfbHAZpJlt~f`˂pZrd|~HfpbHAZp˙rtAJl~f`Abے`rd|~HfpHfpbHAZp˙rtAJl~f`JXQrf۝`vQtJlZdQbtpvn˂rXQ˂rbltbvXn`JXQrZdQbtpvn˂rXQbdQZ|vXnHAbےZdQbtvnXrXQtbdvXnہJXQrZdQbtvnXvnrXrXQtbdvXnۉ˂pZHXnvˍtbAdZlJtAXv`fJ`ےdQZ|dQZ|vpfH˂pZlJtAXv`fJ`ےdrtAvpfH`JXQrlJtAv`fJ`ےQZ|dvpfH˂pZHlJtAv`fQJ`ےJ`ےQZ|dvpfHAbے`pfH~|drrd|~HfbHAZpdrtAJdtAJl~f`HAbےrd|~HfbHAZpJl|~f`ZHAbrd|~HfpbHAZp˙rtAJl~f`Abے`rd|~HfpHAZpbHAZp˙rtAJl~f`JXQrf۝`vQtJlZdQbtpvn˂rXQltbtbnvXn`JXQrZdQbtpvn˂rXQdrtAJvXnے`JXZdQbtvnXrXQtbdvXnہJXQrZdQbtvnXrXQrbdtbdvXnۉ˂p`ZXnvˍtbAdZlJtAXv`fJ`ےdQZ|vpfvpfH˂pZlJtAXv`fJ`ےltbf`vQr˂plJtAv`fJ`ےQZ|dvpfH˂pZHlJtAv`fJ`ےQZ|dQZ|dvpfHQXb㉀pfH~|drrd|~HfbHAZpdrtAJHf`~f`HAbےrd|~HfbHAZpdQZ|XnvZHAbrd|~HfpbHAZp˙rtAJl~f`Abے`rd|~HfpbHAZp˙rtAJltAJl~f`ۑpJAHrf۝`vQtJlZdQbtpvn˂rXQltbvXnvXnr`JXQrZdQbtpvn˂rXQdrtAJpfH~ے`JXZdQbtvnXrXQtbdvXnہJXQrZdQbtvnXrXQtbdtbnvXn󙐂ˁ`ZXnvˍtbAdZlJtAXv`fJ`ےdQZ|vpfH˂pZ˂pZlJtAXv`fJ`ےltdf`vQr˂plJtAv`fJ`ےQZ|dvpfH˂pZHlJtAv`fJ`ےQZ|dvpfHvpfHQXb㉀pfH~|drrd|~HfbHAZpdrtAJ~f`HAbےHAے`rd|~HfbHAZprtAJlXnvZA`rd|~HfpbHAZp˙rtAJl~f`Abے`rd|~HfpbHAZp˙rtAJlf`~f`ۑpJAHrf۝`vQtJlZdQbtpvn˂rXQltbvXn`JXQrJXQrbZdQbtpvn˂rXQtbdQp`vXJXQrbtZdQbtvnXrXQtbdvXnہJXQrZdQbtvnXrXQtbdvXnvXnے`󙐉ۑXnvˍtbAdZlJtAXv`fJ`ےdQZ|vpfH˂pZtlJlJtAXv`fJ`ےZ|dnr˂lJtlJtAv`fJ`ےQZ|dvpfH˂pZHlJtAv`fJ`ےQZ|dvpfHJXQrpJAHrpfH~|drrd|~HfbHAZpdrtAJ~f`HAbےtAd|rd|~HfbHAZprtAJlpZAb`Ad|rd|~HfpbHAZp˙rtAJl~f`Abے`rd|~HfpbHAZp˙rtAJl~f`˂pZHˁ`ZQf۝`vQtJlZdQbtpvn˂rXQltbvXn`JXQrZdQbtZdQbnpvn˂rXQtbdQJXQrZdQbtZdQbnXvnXrXQtbdvXnہJXQrZdQbtvnXrXQtbdvXnAbے`Xb㉀ۑXnvˍtbAdZlJtAXv`fJ`ےdQZ|vpfH˂pZlJtAXv`fXv`fJ`ےZ|l璉˂pZHlJtAv`fv`fJ`ےQZ|dvpfH˂pZHlJtAv`fJ`ےQZ|dvpfHJXQrpJAHrpfH~|drrd|~HfbHAZpdrtAJ~f`HAbےrd|~HfHfpbHAZptbnAbے`rd|~HfpHfpbHAZp˙rtAJl~f`Abے`rd|~HfpbHAZp˙rtAJl~f`˂pZHˁ`pJf۝`vQtJlZdQbtpvn˂rXQltbvXn`JXQrZdQbtpvnvnr˂rXQvp`vJXQrZdQbtvnXvnrXrXQtbdvXnہJXQrZdQbtvnXrXQtbdvXnAXQrAHr󙐂XnvˍtbAdZlJtAXv`fJ`ےdQZ|vpfH˂pZlJtAXv`fXQJ`ےJ`ےXnv˂pZHlJtAv`fQJ`ےJ`ےQZ|dvpfH˂pZHlJtAv`fJ`ےQZ|dvpfHpZHAˁ`ZQXbpfH~|drrd|~HfbHAZpdrtAJ~f`HAbےrd|~HfHAZpbHAZppfH~AbJXQrd|~HfpHAZpbHAZp˙rtAJl~f`Abے`rd|~HfpbHAZp˙rtAJl~f`bے`㉀ۑpJf۝`vQtJlZdQbtpvn˂rXQltbvXn`JXQrZdQbtpvn˂rXQ˂rbf`vr˂pZdQbtvnXrXQrbdtbdvXnہJXQrZdQbtvnXrXQtbdvXnJXQrAHr󙐂XnvˍtbAdZlJtAXv`fJ`ےdQZ|vpfH˂pZlJtAXv`fJ`ےdQZ|lXnvZHAblJtAv`fJ`ےQZ|dQZ|dvpfH˂pZHlJtAv`fJ`ےQZ|dvpfHpZHAˁ`ZQXApfH~|drrd|~HfbHAZpdrtAJ~f`HAbےrd|~HfbHAZptbdQpfH~ے`JXQrd|~HfpbHAZp˙rtAJltAJl~f`Abے`rd|~HfpbHAZp˙rtAJl~f`b˂pHr󙐂ˁf۝`vQtJlZdQbtpvn˂rXQltbvXn`JXQrZdQbtpvn˂rXQZ|dvpr˂pZdQbtvnXrXQtbdtbnvXnہJXQrZdQbtvnXrXQtbdvXnۑZHAb`ZQXbXnvˍtbAdZlJtAXv`fJ`ےdQZ|vpfH˂pZlJtAXv`fJ`ےrtAJlfH~ZHAblJtAv`fJ`ےQZ|dvpfHvpfH˂pZHlJtAv`fJ`ےQZ|dvpfHے`JXۑpJApfH~|drrd|~HfbHAZpdrtAJ~f`HAbےrd|~HfbHAZptbdQf`vXJQrrd|~HfpbHAZp˙rtAJlf`~f`Abے`rd|~HfpbHAZp˙rtAJl~f`Qr˂pHr󙐂ˁf۝`vQtJlZdQbtpvn˂rXQltbvXn`JXQrZdQbtpvn˂rXQZ|dnvppZHAZdQbtvnXrXQtbdvXnvXnrJXQrZdQbtvnXrXQtbdvXnۑZHAb`ZQXbXnvˍtbAdZlJtAXv`fJ`ےdQZ|vpfH˂pZlJtAXv`fJ`ےtbdQZfH~bے`lJtAv`fJ`ےQZ|dvpfH˂pZH˂pZHlJtAv`fJ`ےQZ|dvpfHے`pˁ`ZpfH~|drQtJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKK \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv32_1.dat b/vendor/endroid/qr-code/assets/data/qrv32_1.dat new file mode 100644 index 000000000..d19aed965 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv32_1.dat @@ -0,0 +1,289 @@ +}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvuvuvuvuvststststststststqrqrqrqropopopopopopopopmnmnmnmmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUSTSTSTSTQRQRQRQRQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABA@?@?@?@?@?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;<99:9:9:9:999999:87878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!       }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvuvuvuvuvststststststststqrqrqrqropopopopopopopopmmmmnmnmnmnmmmmmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUTSTSSTSTSTSTQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;<:9:9:9:99:9:9:9:87878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!     }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvutstststststststststststqrqrqrqropopopopopopopopnmnmnmnmmnmnmnmnlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSSSSSSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>;<;<;<;<;<;<;<;<:9:9:9:99:9:9:9:87878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!      }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststststststqrqrqrqropopopopopopopopnmnmnmnmmnmnmnmnlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUSTSTSTSTSSSSSSTSQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<:9:9:9:99:9:9:9:87878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!       }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststsrqrqrqrqrqrqrqropopopopopopopopnmnmnmnmmnmnmnmnlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUSTSTSTSTTSTSTSTSQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<:9:9:9:99:9:9:9:87878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!       }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopnmnmnmnmmnmnmnmnlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUSTSTSTSTTSTSTSTSQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<:9:999999:9:9:9:87878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#"!"!"!"!"!"!       }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopnmnmnmmmmnmnmnmnlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWVUVUVUVUVUSTSTSTSTTSTSTSTSQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:999999:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!       }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopmmmnmnmnmnmmmmmmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUSTSTSTSTTSTSTSTSQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9::9:9:98787878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!    }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUSTSSSSSSTSTSTSTSQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:8787878787878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('&%&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!       ~}~}~}~}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopopopopmnmnmnmnlklklklklklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSSSSSSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;:9:9:9:9:9:9:8787878787878787878787656565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopopoponmnmnmnmnmnlklklklklklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:99999:9:9:9:9:8787878787878787656565656565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopmnmnmmmmmnmnmnmnlklklklklklklklkjijijijijijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:9:9999998787878787878787656565656565656565656543434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopmnmnmnmnmnmnmmmmlklklklklklklklkjijijijijijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9::9:9:9:98787878787878787656565656565656543434343434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopmnmnmnmnmmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9::9:9:9:98787878787878787656565656565656543434343434343434343432121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!      }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropopopopmnmnmnmnnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSSSSSSTSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=<;<;<;<;<;<9:9:9:9::9:9:9:98787878787878787656565656565656543434343434343432121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!      }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqpopopopopmnmnmnmnnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUSTSTSTSTSTSSSSSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9::9:9:9:987878787878787876565656565656565434343434343434321212121212121212121210/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!      }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqropopopopopopopopmnmnmnmnnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>;<;<;<;<;<;<;<;<9:9:9999:9:9:9:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!             + + + + + + + +         + + + + + + + + + +         + + + + + + + + + + + +         + + + + + + + + + +          + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + +         + + + + + + + +          + + + + + + + +             + + + + + + + +           + + + + + + + +LLKKJJII + + MMNNOOPP88776655''(())**zz{{||}}YYXWVUTS +@AABBCCDYXXWWVVU01122334tuuvvwwxihhggffe%$$##""! !!""##$deeffgghyxxwwvvu54433221TUUVVWWXEDDCCBBADEEFFGGHUTTSSRRQ BCCDDEEF43322110 hhiijjkkppoonnmm,,++**))]]^^__``~~}}<<;;::99 + + MMNNOOPPLLKKJJII==>>??@@\\[[ZZYY--..//00qqrrssttllkkjjii((''&&%% aabbccddwwvvuutt33445566KJJIIHHGEFFGGHHITSSRRQQP 56677889yzz{{||}dccbbaa` %&&''(()ijjkkllmtssrrqqp0//..--,YZZ[[\\]@??>>==< IJJKKLLMPOONNMML + + GHHIIJJK~/..--,,+#$%%&&''mmnopqrskkjjiihh''&&%%$$ !!bbccddee{{zzyyxx77665544RRSSTTUUGGFFEEDDBBCCDDEEWWVVUUTT22334455vvwwxxyyggffeedd##""!! ""##$$%%ffgghhiimmllkkjj8899??@@FEEDDCCBHHGGFFEE QQRRSSTT44332211++,,--..~~SRRQQPPO + DEEFFGGHUTTSSRRQ 45566778xyyzz{{|eddccbba! $%%&&''(hiijjkkluttssrrq100//..-XYYZZ[[\A@@??>>=HIIJJKKLQPPOONNM + + FGGHHIIJ0//..--,!"#$%%&&llmmnopqllkkjjii((''&&%% aabbccdd||{{zzyy88776655 QQRRSSTTHHGGFFEEAABBCCDDXXWWVVUU11223344uuvvwwxxhhggffee$$##""!!!!""##$$eeffgghhssmmllkk778899??GFFEEDDC IJJKKLLMPOONNMML + + 9::;;<<=}~~`__^^]]\)**++,,-mnnooppqpoonnmml,++**))(]^^__``a~~}}|<;;::998 + + MNNOOPPQLKKJJIIHKLLMMNNO~}}||{{z+**))(('(())**++sttuuvvwggffeedd##""!! ""##$$%%ffgghhiiwwvvuutt33221100VVWWXXYYCCBBAA@@FFGGHHIISSRRQQPP 66778899zz{{||}}ccbbaa``&&''(())jjkkllmmiihhggffAABBCCDDBAA@@??>DDCCBBAAUUVVWWXX00//..--//001122ONNMMLLKHIIJJKKLQPPOONNM + + 899::;;<|}}~~a``__^^]())**++,lmmnnoopqppoonnm-,,++**)\]]^^__`~~}=<<;;::9 + + LMMNNOOPMLLKKJJI JKKLLMMN~~}}||{,++**))(''(())**rssttuuvhhggffee$$##""!!!!""##$$eeffgghhxxwwvvuu44332211UUVVWWXXDDCCBBAAEEFFGGHHTTSSRRQQ 55667788yyzz{{||ddccbbaa %%&&''((iijjkklljjiihhgg@@AABBCCCBBAA@@? + + MNNOOPPQLKKJJIIH=>>??@@A\[[ZZYYX-..//001qrrssttulkkjjiih(''&&%%$ !abbccdde|{{zzyyx87766554 QRRSSTTUHGGFFEEDOPPQQRRSzyyxxwwv'&&%%,,--..//wxxyyzz{ccbbaa``&&''(())jjkkllmmssrrqqpp//..--,,ZZ[[\\]]??>>==<< JJKKLLMMOONNMMLL + + ::;;<<==~~__^^]]\\**++,,--nnooppqqeeddccbbEEFFGGHH=<;:9988@@??>>==YYZZ[[\\~~}}||,,++**))33445566KJJIIHHG + + LMMNNOOPMLLKKJJI <==>>??@]\\[[ZZY,--..//0pqqrrsstmllkkjji)((''&&% `aabbccd}||{{zzy98877665 PQQRRSSTIHHGGFFENOOPPQQR{zzyyxxw(''&&%%++,,--..vwwxxyyzddccbbaa %%&&''((iijjkkllttssrrqq00//..--YYZZ[[\\@@??>>==IIJJKKLLPPOONNMM + + 99::;;<<}}~~``__^^]]))**++,,mmnnooppffeeddccDDEEFFGG?>=<;:99 QRRSSTTUHGGFFEEDABBCCDDEXWWVVUUT12233445uvvwwxxyhggffeed$##""!! !""##$$%effgghhixwwvvuut43322110UVVWWXXYDCCBBAA@ SYYZZ[[\vuuttssm00112233{||}}~~__^^]]\\**++,,--nnooppqqoonnmmll++**))((^^__``aa~~}}||;;::9988 + + NNOOPPQQKKJJIIHH>>??@@AA[[ZZYYXX..//0011rrssttuuaa``__^^ IIJJKKLL77665544~~}}<<;;::99]]^^__``{{zzyyxx((''&&%%778899??GFFEEDDC PQQRRSSTIHHGGFFE@AABBCCDYXXWWVVU01122334tuuvvwwxihhggffe%$$##""! !!""##$deeffgghyxxwwvvu54433221TUUVVWWXEDDCCBBARSSYYZZ[wvvuutts//001122z{{||}}~``__^^]]))**++,,mmnnooppppoonnmm,,++**))]]^^__``~~}}<<;;::99 + + MMNNOOPPLLKKJJII==>>??@@\\[[ZZYY--..//00qqrrssttbbaa``__ HHIIJJKK88776655UVVWWXXYDCCBBAA@EFFGGHHITSSRRQQP 56677889yzz{{||}dccbbaa` %&&''(()ijjkkllmtssrrqqp0//..--,YZZ[[\\]@??>>==< + + \]]^^__`mllkkjji44556677[[ZZYYXX..//0011rrssttuukkjjiihh''&&%%$$ !!bbccddee{{zzyyxx77665544RRSSTTUUGGFFEEDDBBCCDDEEWWVVUUTT22334455vvwwxxyy]]\\[[ZZ + + MMNNOOPP~~}}||{33221100||{{zzyy88776655 aabbccddwwvvuutt@@AABBCCCBBAA@@?TUUVVWWXEDDCCBBADEEFFGGHUTTSSRRQ 45566778xyyzz{{|eddccbba! $%%&&''(hiijjkkluttssrrq100//..-XYYZZ[[\A@@??>>= + + [\\]]^^_smmllkkj33445566~\\[[ZZYY--..//00qqrrssttllkkjjii((''&&%% aabbccdd||{{zzyy88776655 QQRRSSTTHHGGFFEEAABBCCDDXXWWVVUU11223344uuvvwwxx^^]]\\[[ + + LLMMNNOO~~}}|44332211YZZ[[\\]@??>>==< IJJKKLLMPOONNMML + + 9::;;<<=}~~`__^^]]\)**++,,-mnnooppqpoonnmml,++**))(]^^__``a~~}}|<;;::998 `aabbccdihhggffe8899:;<=WWVVUUTT22334455vvwwxxyyggffeedd##""!! ""##$$%%ffgghhiiwwvvuutt33221100VVWWXXYYCCBBAA@@FFGGHHIISSRRQQPP 66778899zz{{||}}YYSSRRQQQQRRSSYY{zzyyxxw//..--,,xxwwvvuu44332211!!""##$$eeffgghhssmmllkkDDEEFFGG?>=<;:99XYYZZ[[\A@@??>>=HIIJJKKLQPPOONNM + + 899::;;<|}}~~a``__^^]())**++,lmmnnoopqppoonnm-,,++**)\]]^^__`~~}=<<;;::9 _``aabbcjiihhggf778899:;XXWWVVUU11223344uuvvwwxxhhggffee$$##""!!!!""##$$eeffgghhxxwwvvuu44332211UUVVWWXXDDCCBBAAEEFFGGHHTTSSRRQQ 55667788yyzz{{||ZZYYSSRRPPQQRRSS|{{zzyyx00//..--]^^__``a~~}}|<;;::998 + + MNNOOPPQLKKJJIIH=>>??@@A\[[ZZYYX-..//001qrrssttulkkjjiih(''&&%%$ !abbccdde|{{zzyyx87766554deeffggheddccbba>??@@AABSSRRQQPP 66778899zz{{||}}ccbbaa``&&''(())jjkkllmmssrrqqpp//..--,,ZZ[[\\]]??>>==<< JJKKLLMMOONNMMLL + + ::;;<<==~~PPOONNMM + +ZZ[[\\]]wvvuutts++**))((ttssrrqq00//..--%%&&''((iijjkklljjiihhggHHIIJJKK88776655\]]^^__`~~}=<<;;::9 + + LMMNNOOPMLLKKJJI <==>>??@]\\[[ZZY,--..//0pqqrrsstmllkkjji)((''&&% `aabbccd}||{{zzy98877665cddeeffgfeeddccb<=>??@@ATTSSRRQQ 55667788yyzz{{||ddccbbaa %%&&''((iijjkkllttssrrqq00//..--YYZZ[[\\@@??>>==IIJJKKLLPPOONNMM + + 99::;;<<}}~~QQPPOONN YYZZ[[\\xwwvvuut,,++**)) !abbccdde|{{zzyyx87766554 QRRSSTTUHGGFFEEDABBCCDDEXWWVVUUT12233445uvvwwxxyhggffeed$##""!! !""##$$%effgghhixwwvvuut43322110hiijjkkla``__^^] +BCCDDEEFOONNMMLL + + ::;;<<==~~__^^]]\\**++,,--nnooppqqoonnmmll++**))((^^__``aa~~}}||;;::9988 + + NNOOPPQQKKJJIIHH>>??@@AALLKKJJII ^^__``aasrqponmm''&&%%$#ppoonnmm,,++**))))**++,,mmnnooppffeeddccLLMMNNOO~~}}|44332211 `aabbccd}||{{zzy98877665 PQQRRSSTIHHGGFFE@AABBCCDYXXWWVVU01122334tuuvvwwxihhggffe%$$##""! !!""##$deeffgghyxxwwvvu54433221ghhiijjkbaa``__^ ABBCCDDEPPOONNMM + + 99::;;<<}}~~``__^^]]))**++,,mmnnooppppoonnmm,,++**))]]^^__``~~}}<<;;::99 + + MMNNOOPPLLKKJJII==>>??@@MMLLKKJJ + + ]]^^__``tssrqpon((''&&%%!""##$$%effgghhixwwvvuut43322110UVVWWXXYDCCBBAA@EFFGGHHITSSRRQQP 56677889yzz{{||}dccbbaa` %&&''(()ijjkkllmtssrrqqp0//..--,lmmssttu]\\[[ZZY + FGGHHIIJKKJJIIHH>>??@@AA[[ZZYYXX..//0011rrssttuukkjjiihh''&&%%$$ !!bbccddee{{zzyyxx77665544RRSSTTUUGGFFEEDDBBCCDDEEHHGGFFEEbbccddeellkkjjii"! llkkjjii((''&&%%--..//00qqrrssttbbaa``__ PPQQRRSS|{{zzyyx00//..-- !!""##$deeffgghyxxwwvvu54433221TUUVVWWXEDDCCBBADEEFFGGHUTTSSRRQ 45566778xyyzz{{|eddccbba! $%%&&''(hiijjkkluttssrrq100//..-kllmmsst^]]\\[[Z + + EFFGGHHILLKKJJII==>>??@@\\[[ZZYY--..//00qqrrssttllkkjjii((''&&%% aabbccdd||{{zzyy88776655 QQRRSSTTHHGGFFEEAABBCCDDIIHHGGFFaabbccddmmllkkjj$#"! %&&''(()ijjkkllmtssrrqqp0//..--,YZZ[[\\]@??>>==< IJJKKLLMPOONNMML + + 9::;;<<=}~~`__^^]]\)**++,,-mnnooppqpoonnmml,++**))(%%&uvvwwxxyYSSRRQQPJKKLLMMNGGFFEEDDBBCCDDEEWWVVUUTT22334455vvwwxxyyggffeedd##""!! ""##$$%%ffgghhiiwwvvuutt33221100VVWWXXYYCCBBAA@@FFGGHHIIDDCCBBAAffgghhiihhggffeehhggffee$$##""!!11223344uuvvwwxx^^]]\\[[ + + YYZZ[[\\xwwvvuut,,++**))$%%&&''(hiijjkkluttssrrq100//..-XYYZZ[[\A@@??>>=HIIJJKKLQPPOONNM + + 899::;;<|}}~~a``__^^]())**++,lmmnnoopqppoonnm-,,++**)%tuuvvwwxZYYSSRRQIJJKKLLMHHGGFFEEAABBCCDDXXWWVVUU11223344uuvvwwxxhhggffee$$##""!!!!""##$$eeffgghhxxwwvvuu44332211UUVVWWXXDDCCBBAAEEFFGGHHEEDDCCBBeeffgghhiihhggff)**++,,-mnnooppqpoonnmml,++**))(]^^__``a~~}}|<;;::998 + + MNNOOPPQLKKJJIIH=>>??@@A\[[ZZYYX-..//001qrrssttulkkjjiih(''&&%%$&''(())*yzz{{||}POONNMML NOOPPQQRCCBBAA@@FFGGHHIISSRRQQPP 66778899zz{{||}}ccbbaa``&&''(())jjkkllmmssrrqqpp//..--,,ZZ[[\\]]??>>==<< JJKKLLMM@@??9988jjkkllmmddccbbaaddccbbaa 55667788yyzz{{||ZZYYSSRR + + ]]^^__``tssrqpon((''&&%%())**++,lmmnnoopqppoonnm-,,++**)\]]^^__`~~}=<<;;::9 + + LMMNNOOPMLLKKJJI <==>>??@]\\[[ZZY,--..//0pqqrrsstmllkkjji)((''&&%%&&''(()xyyzz{{|QPPOONNMMNNOOPPQDDCCBBAAEEFFGGHHTTSSRRQQ 55667788yyzz{{||ddccbbaa %%&&''((iijjkkllttssrrqq00//..--YYZZ[[\\@@??>>==IIJJKKLLAA@@??99iijjkklleeddccbb-..//001qrrssttulkkjjiih(''&&%%$ !abbccdde|{{zzyyx87766554 QRRSSTTUHGGFFEEDABBCCDDEXWWVVUUT12233445uvvwwxxyhggffeed$##""!! *++,,--.}~~LKKJJIIH + + RSSTUVWX??>>==<< JJKKLLMMOONNMMLL + + ::;;<<==~~__^^]]\\**++,,--nnooppqqoonnmmll++**))((^^__``aa~~}}||;;::9988 + + NNOOPPQQ77665544ssttuuvv``__^^]]``__^^]]99::;;<<}}~~QQPPOONNaabbccddmmllkkjj$#"! ,--..//0pqqrrsstmllkkjji)((''&&% `aabbccd}||{{zzy98877665 PQQRRSSTIHHGGFFE@AABBCCDYXXWWVVU01122334tuuvvwwxihhggffe%$$##""!)**++,,-|}}~~MLLKKJJI + + QRRSSTUV@@??>>==IIJJKKLLPPOONNMM + + 99::;;<<}}~~``__^^]]))**++,,mmnnooppppoonnmm,,++**))]]^^__``~~}}<<;;::99 + + MMNNOOPP88776655mmssttuuaa``__^^12233445uvvwwxxyhggffeed$##""!! !""##$$%effgghhixwwvvuut43322110UVVWWXXYDCCBBAA@EFFGGHHITSSRRQQP 56677889yzz{{||}dccbbaa` .//00112HGGFFEED YYZZ[[\\~~}}||;;::9988 + + NNOOPPQQKKJJIIHH>>??@@AA[[ZZYYXX..//0011rrssttuukkjjiihh''&&%%$$ !!bbccddee{{zzyyxx77665544RRSSTTUU33221100%%&&''wwxxyyzz\\[[ZZYY \\[[ZZYY==>>??@@MMLLKKJJeeffgghhiihhggff01122334tuuvvwwxihhggffe%$$##""! !!""##$deeffgghyxxwwvvu54433221TUUVVWWXEDDCCBBADEEFFGGHUTTSSRRQ 45566778xyyzz{{|eddccbba! -..//001IHHGGFFE WXYYZZ[[~~}}<<;;::99 + + MMNNOOPPLLKKJJII==>>??@@\\[[ZZYY--..//00qqrrssttllkkjjii((''&&%% aabbccdd||{{zzyy88776655 QQRRSSTT44332211%%&&vvwwxxyy]]\\[[ZZ56677889yzz{{||}dccbbaa` %&&''(()ijjkkllmtssrrqqp0//..--,YZZ[[\\]@??>>==< IJJKKLLMPOONNMML + + 9::;;<<=}~~`__^^]]\23344556DCCBBAA@]]^^__``{{zzyyxx77665544RRSSTTUUGGFFEEDDBBCCDDEEWWVVUUTT22334455vvwwxxyyggffeedd##""!! ""##$$%%ffgghhiiwwvvuutt33221100VVWWXXYY//..--,,(())**++{{||}}~~XWVUTSSR + + XXWWVVUUAABBCCDDIIHHGGFFiijjkklleeddccbb45566778xyyzz{{|eddccbba! $%%&&''(hiijjkkluttssrrq100//..-XYYZZ[[\A@@??>>=HIIJJKKLQPPOONNM + + 899::;;<|}}~~a``__^^]12233445EDDCCBBA\\]]^^__||{{zzyy88776655 QQRRSSTTHHGGFFEEAABBCCDDXXWWVVUU11223344uuvvwwxxhhggffee$$##""!!!!""##$$eeffgghhxxwwvvuu44332211UUVVWWXX00//..--''(())**zz{{||}}YYXWVUTS +9::;;<<=}~~`__^^]]\)**++,,-mnnooppqpoonnmml,++**))(]^^__``a~~}}|<;;::998 + + MNNOOPPQLKKJJIIH=>>??@@A\[[ZZYYX6778899?@??99887aabbccddwwvvuutt33221100VVWWXXYYCCBBAA@@FFGGHHIISSRRQQPP 66778899zz{{||}}ccbbaa``&&''(())jjkkllmmssrrqqpp//..--,,ZZ[[\\]]~~}}||{{++**))((,,--..//RQQPPOON TTSSRRQQ EEFFGGHHEEDDCCBBmmssttuuaa``__^^899::;;<|}}~~a``__^^]())**++,lmmnnoopqppoonnm-,,++**)\]]^^__`~~}=<<;;::9 + + LMMNNOOPMLLKKJJI <==>>??@]\\[[ZZY56677889A@@??998``aabbccxxwwvvuu44332211UUVVWWXXDDCCBBAAEEFFGGHHTTSSRRQQ 55667788yyzz{{||ddccbbaa %%&&''((iijjkkllttssrrqq00//..--YYZZ[[\\~~}}||,,++**))++,,--..~~SRRQQPPO + =>>??@@A\[[ZZYYX-..//001qrrssttulkkjjiih(''&&%%$ !abbccdde|{{zzyyx87766554 QRRSSTTUHGGFFEEDABBCCDDEXWWVVUUT?@@AABBC76655443eeffgghhssrrqqpp//..--,,ZZ[[\\]]??>>==<< JJKKLLMMOONNMMLL + + ::;;<<==~~__^^]]\\**++,,--nnooppqqoonnmmll++**))((^^__``aazzyyxxww''&&%%00112233NMMLLKKJPPOONNMM + + IIJJKKLLAA@@??99%%&&vvwwxxyy]]\\[[ZZ<==>>??@]\\[[ZZY,--..//0pqqrrsstmllkkjji)((''&&% `aabbccd}||{{zzy98877665 PQQRRSSTIHHGGFFE@AABBCCDYXXWWVVU9??@@AAB87766554ddeeffggttssrrqq00//..--YYZZ[[\\@@??>>==IIJJKKLLPPOONNMM + + 99::;;<<}}~~``__^^]]))**++,,mmnnooppppoonnmm,,++**))]]^^__``{{zzyyxx((''&&%%//001122ONNMMLLKABBCCDDEXWWVVUUT12233445uvvwwxxyhggffeed$##""!! !""##$$%effgghhixwwvvuut43322110UVVWWXXYDCCBBAA@EFFGGHHITSSRRQQP CDDEEFFG3221100/ !"iijjkklloonnmmll++**))((^^__``aa~~}}||;;::9988 + + NNOOPPQQKKJJIIHH>>??@@AA[[ZZYYXX..//0011rrssttuukkjjiihh''&&%%$$ !!bbccddeevvuuttss44556677JIIHHGGF +JKKLLMMNONNMMLLK + + :;;<<==>~_^^]]\\[*++,,--.nooppqqronnmmllk+**))(('^__``aab~~}}||{;::99887 + NOOPPQQRKJJIIHHG>??@@AABIHHGGFFEijjkkllmYXXWWVVU@AABBCCD + NOOPPQQRKJJIIHHG>??@@AAB[ZZYYXXW.//00112rssttuuvkjjiihhg'&&%%$$# !!"bccddeef{zzyyxxw76655443RSSTTUUVGFFEEDDCBCCDDEEFEDDCCBBAmssttuuvUTTSSRRQ DEEFFGGHRSSTTUUVGFFEEDDCBCCDDEEFWVVUUTTS23344556vwwxxyyzgffeeddc#""!! "##$$%%&fgghhiijwvvuutts3221100/VWWXXYYZCBBAA@@?FGGHHIIJA@@??998%%&&'vwwxxyyzQPPOONNM + + HIIJJKKLVWWXXYYZCBBAA@@?FGGHHIIJSRRQQPPO 6778899:z{{||}}~cbbaa``_&''(())*jkkllmmnsrrqqppo/..--,,+Z[[\\]]^?>>==<<; +JKKLLMMN87766554'(())**+z{{||}}~MLLKKJJI + + LMMNNOOPZ[[\\]]^?>>==<<; +JKKLLMMNONNMMLLK + + :;;<<==>~_^^]]\\[*++,,--.nooppqqronnmmllk+**))(('^__``aab~~}}||{;::99887 + NOOPPQQR43322110+,,--../~IHHGGFFE PQQRRSST^__``aab~~}}||{;::99887 + NOOPPQQRKJJIIHHG>??@@AAB[ZZYYXXW.//00112rssttuuvkjjiihhg'&&%%$$# !!"bccddeef{zzyyxxw76655443RSSTTUUV0//..--,/0011223EDDCCBBATUUVVWWX !!"bccddeef{zzyyxxw76655443RSSTTUUVGFFEEDDCBCCDDEEFWVVUUTTS23344556vwwxxyyzgffeeddc#""!! "##$$%%&fgghhiijwvvuutts3221100/VWWXXYYZ~~}}||{,++**))(34455667A@@??>>=XYYZZ[[\"##$$%%&fgghhiijwvvuutts3221100/VWWXXYYZCBBAA@@?FGGHHIIJSRRQQPPO 6778899:z{{||}}~cbbaa``_&''(())*jkkllmmnsrrqqppo/..--,,+Z[[\\]]^{zzyyxxw(''&&%%78899??@~~}=<<;;::9\]]^^__`&''(())*jkkllmmnsrrqqppo/..--,,+Z[[\\]]^?>>==<<; +JKKLLMMNONNMMLLK + + :;;<<==>~_^^]]\\[*++,,--.nooppqqronnmmllk+**))(('^__``aabwvvuutts@AABBCCD}||{{zzy98877665 `aabbccd*++,,--.nooppqqronnmmllk+**))(('^__``aab~~}}||{;::99887 + NOOPPQQRKJJIIHHG>??@@AAB[ZZYYXXW.//00112rssttuuvkjjiihhg'&&%%$$# !!"bccddeefsmmllkkjDEEFFGGHyxxwwvvu54433221 !!""##$deeffggh.//00112rssttuuvkjjiihhg'&&%%$$# !!"bccddeef{zzyyxxw76655443RSSTTUUVGFFEEDDCBCCDDEEFWVVUUTTS23344556vwwxxyyzgffeeddc#""!! "##$$%%&fgghhiijjiihhggfHIIJJKKLuttssrrq100//..-$%%&&''(hiijjkkl23344556vwwxxyyzgffeeddc#""!! "##$$%%&fgghhiijwvvuutts3221100/VWWXXYYZCBBAA@@?FGGHHIIJSRRQQPPO 6778899:z{{||}}~cbbaa``_&''(())*jkkllmmnfeeddccbLMMNNOOPqppoonnm-,,++**)())**++,lmmnnoop6778899:z{{||}}~cbbaa``_&''(())*jkkllmmnsrrqqppo/..--,,+Z[[\\]]^?>>==<<; +JKKLLMMNONNMMLLK + + :;;<<==>~_^^]]\\[*++,,--.nooppqqrbaa``__^ PQQRRSSYmllkkjji)((''&&%,--..//0pqqrrsst:;;<<==>~_^^]]\\[*++,,--.nooppqqronnmmllk+**))(('^__``aab~~}}||{;::99887 + NOOPPQQRKJJIIHHG>??@@AAB[ZZYYXXW.//00112rssttuuv^]]\\[[Z + + +YZZ[[\\]ihhggffe%$$##""!01122334tuuvvwwx>??@@AAB[ZZYYXXW.//00112rssttuuvkjjiihhg'&&%%$$# !!"bccddeef{zzyyxxw76655443RSSTTUUVGFFEEDDCBCCDDEEFWVVUUTTS23344556vwwxxyyzZYYSSRRQ + ]^^__``aeddccbba! 45566778xyyzz{{|BCCDDEEFWVVUUTTS23344556vwwxxyyzgffeeddc#""!! "##$$%%&fgghhiijwvvuutts3221100/VWWXXYYZCBBAA@@?FGGHHIIJSRRQQPPO 6778899:z{{||}}~QPPOONNMabbccddea``__^^]899::;;<|}}~~FGGHHIIJSRRQQPPO 6778899:z{{||}}~cbbaa``_&''(())*jkkllmmnsrrqqppo/..--,,+Z[[\\]]^?>>==<<; +JKKLLMMNONNMMLLK + + :;;<<==>~MLLKKJJIeffgghhi]\\[[ZZY<==>>??@bdQZ|Jlt`vXnH~fr˂pZHAblJtArlJtAHfvnXvnXbHArXQJ`AJltdrtnvpf`vXZHAbQr˂p|ZdQJtArdnXv`fpvbHArXQJ`AJltdrtbnvpf`vXfH~Qr˂pے`JXrd|vnXfpv㒐bHAZZp˂JltdrtAvpf`vXnZHAbr˂p|ZdQbtArdnXv`fpvfHfXQJ`ےp˂rdrtAbdQZ|`vXnH~fr˂pے`JXQtArdtlJXv`f~Hf`ےbJ`p˂tbdnvpvXn~f`r˂p`JXQArd|lJtfpvf~HQJ`ے˂rXdrtAbdQZ|vXn~f`r˂p`JXQJtAd|lJtZdQbf~HnXv`ˉrXQJ`Z|dQZ|dnvpvf~˂pZ`JXQrrd|lJtApvn~HfJ`ے˂rXQdrtAJdQZ|tbn~f`vpfH`JXQrHAbےlJtAZdQbt~HfXv`f˂rXQbHAZptbdQZtbdQf`pfnr˂pZHAdrtAbdQZ|vpf`vXn`JXQrے`JXQd|Zrd|v`fv`frZp˂󒐙bHAbdQZ|AJltfH~nvpے`JXZHAbbtl|ZdQf~HnXv`Zp˂󒐙bHAbdQZ|AJltfHnvpf`vXZHAbQr˂pZdQbtv`fnXv`ˑrXQJrXQJbdQZ|JltH~fvpfے`JXQZHAbtlJ|ZdQbf~HnXv`pvnbHAZXQJ`ےJltdrtAvpf`vXnZHAbr˂p|ZdQbtArdnXpvnHAZp`rbdQQZ|dfHf`vpfHvXnZHAbr˂pZdQbtArd|nXv`fpvbHAZpQJ`ےJltdrtAvpfHvXnZHAbr˂pZdQbtArd|nXv`fpvfHfpےbHrtAJlrtAJlfH~f`vXHAbے˂pZZdQbtrd|Xv`fpvnbHAZpJ`ےltbdrtAJvpfvXn~f`˂pZ`JXQrrd|lJtApvn~HfJ`ے˂rXQ|drZ|dH~fpZAb`bے`JJltdrtAH~fvpf˂pZr˂pdQbtZdQbt~HfpQJHArXQJ`Zp˂drtbdQZ|f`vXfH~Qr˂pے`JXJtArdbtlfpvf~HrXQJ`Zp˂drtbdQZ|f`vXfH~nr˂pے`JXZHAےlJtA~Hfpf~H`ےbbHAZpdrtAbdQZ|`vXnH~fr˂pے`JXQtArdtlJfpvf~HrXQJ`p˂rbHAZbdQZ|JltH~fvpfے`JXQZHAbtlJ|ZdQbv`fXv`fےbHAZ|rArtAJlvXn~f`r˂p`JXQZHAے`lJtZdQbtf~HnXv`ˑ˂rXbHAZpbdQZ|Jlt~f`vpfH`JXQZHAbۉlJtZdQbtf~HnXv`˝vnAZp˂tbdQtdf`vXnvp`JXQrHAbےlJtAZdQbt~HfXv`f˂rXQbHAZpdQZ|ltbHf`vpfHvXnrHAbے˂pZZdQbtrd|Xv`fpvnbHAZpJ`ےtAJlrtAJl`vXnJXQrQrpZbdQZ|Jlt`vXnH~fHAbےZHAblJtArl|ZvnXZp˂󒐙bHArbdQZ|AJltdtAnvpf`vXZHAbQr˂p|ZdQJtArdnXv`fpvbHArXQJ`AJltdrtnvpf`vXZHAbQr˂p`JXQrd|vnXfpvHAZp˂rXQJltdrtAvpf`vXnZHAbr˂p|ZdQbtArdnXv`fpvےHAZXQJ`ےp˂rdrtAbdQZ|`vXnH~fr˂pے`JXQtArdtlJ~Hfp~HfZp˂JltbQZ|vpfHvXnZHAbr˂pJXQrArd|lJtfpvf~HQJ`ے˂rXdrtAbdQZ|vXn~f`r˂p`JXQArd|lJtfpvf~HrXQJ`pbHAZ|dtrtAJlnvpfH~˂pZ`JXQrrd|lJtApvn~HfJ`ے˂rXQdrtAJdQZ|vXn~f`˂pZ`JXQrHAے`lJtAZdQbt~HfXv`f˂rXQbHAZptbdQZtbdQvpf˂pZHHAbےdrtAbdQZ|vpf`vXn`JXQrے`JXQd|ldQbnXv`frXQJ`Zp˂drtbdQZ|JltfH~nvpے`JXZHAbbtl|ZdQf~HnXv`Zp˂󒐙bHAbdQZ|AJltfH~nvpے`JXZHAbrbtlZdQtArdv`f~HfprXQJJ`ےbdQZ|JltH~fvpfے`JXQZHAbtlJ|ZdQbf~HnXv`p˂rbHAZbdQZ|JltdtAJvpf`vXnZHAbr˂p|ZdQbtArdvnXpvnrXQJ`bdQZ|drtA~f`vpfH`JXQZHAbbtlZdQbtArd|nXv`fpvbHAZpQJ`ےJltdrtAvpfHvXnZHAbr˂pZdQbtArd|nXv`fpv˂rXZp˂bdQZ|tbdQfH~f`vXHAbے˂pZZdQbtrd|Xv`fpvnbHAZpJ`ےltbdrtAJvpfHvXnHAbے˂pZJXQrbrd|lJtApvn~HfJ`ے˂rXQ|drZ|lH~fAbے``JXQrJltdrtAH~fvpf˂pZHAbےJtArdv`f~~HfpbHArXQJ`AJltdrtbnvpf`vXfH~Qr˂pے`JXJtArdbtlfpvf~HrXQJ`Zp˂drtbdQZ|f`vXfH~Qr˂pے`JX|ZdQ|ZdnXvnX`ےbbHAZpdrtAbdQZ|`vXnH~fr˂pے`JXQtArdtlJfpvf~HXQJ`ےp˂rdrtAbdQZ|ltbH~fvpfے`JXQZHAbtlJ|ZdQbv`fXv`pےbHAdrtAJltvXn~f`r˂p`JXQJtAd|lJtZdQbf~HnXv`ˑ˂rXbHAZpbdQZ|Jlt~f`vpfH`JXQZHAbۉlJtZdQbtf~HnXv`QJ`ےrXQJ`ہdrtZ|df`vnnvp`JXQrHAbےlJtAZdQbt~HfXv`f˂rXQbHAZpdQZ|ltb~f`vpfH`JXQrHAbےtlJZdQbtrd|Xv`fpvnbHAZpJ`ےtAdQZ|tbn`vXHJXQr˂pZbdQZ|Jlt`vXnH~fHAXQr`JXQr|ZdQfpvvnv`Zp˂󒐙bHAbdQZ|AJltfHnvpf`vXZHAbQr˂p|ZdQJtArdnXv`fpvbHArXQJ`AJltdrtnvpf`vXZHAbQr˂pbtlQbtlv`fv`fHAZprXQJltdrtAvpf`vXnZHAbr˂p|ZdQbtArdnXv`fpvbHAZXQJ`ےJltdrtAnvp`vXnH~fr˂pے`JXQtArdtlJ~HXvvnrZp˂JltbdQZ|vpfHvXnZHAbr˂pZdQbtArd|nXv`fpvfHfpQJ`ے˂rXdrtAbdQZ|vXn~f`r˂p`JXQArd|lJtfpvf~HbHAZpbHAAJltrtAJlvpfHf~f`˂pZ`JXQrrd|lJtApvn~HfJ`ے˂rXQdrtAJdQZ|vXn~f`˂pZ`JXQrtAd|lJtAZdQbn~HfXv`f˂rXQbHAZpdrtAvp`v~f`˂pZHHAbےdrtAbdQZ|vpf`vXn˂pZHA˂pZbtlnXv`f~HrXQJ`Zp˂drtbdQZ|f`vXfH~nr˂pے`JXZHAbtl|ZdQf~HnXv`Zp˂󒐙bHAbdQZ|AJltfH~nvpے`JXZHAbJtArdJtArd~Hfpە~HfprQJ`ےJ`bAZbdQZ|JltH~fvpfے`JXQZHAbtlJ|ZdQbf~HnXv`p˂rbHAZbdQZ|JltfHfvpf`vXnZHAbr˂p|ZdQbtArd`f~XQJ`pbHAZbdQZ|drtA~f`vpfH`JXQZHAbۉlJtZdQbtf~HnXv`˝vnbHAZpQJ`ےJltdrtAvpfHvXnZHAbr˂pZdQbtArd|nXv`fpv˂rXZp˂bdQZ|tbdQ~f`vXnrHAbے˂pZZdQbtrd|Xv`fpvnbHAZpJ`ےltbdrtAJvpfHvXnHAbے˂pZZdQbtrd|Xv`fpvnHfpJ`ے˂rXQJltXnvvXnAbJXQ`JXQrJltdrtAH~fvpfbے`HAbےJtArdf~HfpvbHArXQJ`AJltdrtnvpf`vXZHAbQr˂p`JXQJtArdbtlfpvf~HrXQJ`Zp˂drtbdQZ|f`vXfH~Qr˂pے`JX|ZdQ|ZdvnXvnXbHAZpp˂rdrtAbdQZ|`vXnH~fr˂pے`JXQtArdtlJfpvf~HXQJ`ےp˂rdrtAbdQZ|`vXnH~fr˂pے`JXQZHAےtlJ|ZdQbHfpv˂rXQp˂rdrAJJltvXn~f`r˂p`JXQArd|lJtfpvf~HrXQJ`ۑ˂rXbHAZpbdQZ|Jlt~f`vpfH`JXQZHAbۉlJtZdQbtf~HnXv`QJ`ےrXQHAZpdrtZ|ltvXnۀ˂pZ`JXQrHAے`lJtAZdQbt~HfXv`f˂rXQbHAZpdQZ|ltb~f`vpfH`JXQrHAbےlJtAZdQbt~HfXv`fvnrbHAZpJ`ےbdQZ|pfH~vpfHr˂pZHAbbdQZ|Jlt`vXnH~fJXQr`JXQr|ZdQfpvnXv`Zp˂󒐙bHAbdQZ|AJltfH~nvpے`JXZHAbrbtl|ZdQJtArdnXv`fpvbHArXQJ`AJltdrtnvpf`vXZHAbQr˂pbtlQbtdv`fv`pۑ˂rXbdQZ|JltdtAJvpf`vXnZHAbr˂p|ZdQbtArdnXv`fpvbHAZXQJ`ےJltdrtAvpf`vXnZHAbr˂p`JXQrtArdtlJnXvJ`ےXQJ`ےtbdQZbQZdvpfHvXnZHAbr˂pZdQbtArd|nXv`fpv㒐HAZpQJ`ے˂rdrtAbdQZ|vXn~f`r˂p`JXQArd|lJtfpvf~HbHAXQ˂rXAdQZ|bnvpfHHAbے˂pZJXQrbrd|lJtApvn~HfJ`ے˂rXQdrtAJdQZ|vXn~f`˂pZ`JXQrrd|lJtApvn~HfXQJ`ے˂rXQbHAZpdrtAf`v~f`ZHAbے`JXdrtAbdQZ|vpf`vXn˂pZHA˂p|tArdnXv`f~HrXQJ`Zp˂drtbdQZ|f`vXfH~Qr˂pے`JXJtAdbtl|ZdQf~HnXv`Zp˂󒐙bHAbdQZ|AJltfH~nvpے`JXZHAbJtArdt|ZdQ~HXv`vnrXQJ`ےdrtAbdQZ|ltbH~fvpfے`JXQZHAbtlJ|ZdQbf~HnXv`p˂rbHAZbdQZ|JltH~fvpfے`JXQZHAbbtl|ZdQbtArd`f~bHAZpbHAZ|drrtAJl~f`vpfH`JXQZHAbۉlJtZdQbtf~HnXv`ˑ˂rXbHAZpbdQZ|JltdtAJlvpfHvXnZHAbr˂pZdQbtArd|nXv`fpvJ`ےQJ`ےdrtAvpff`~f``JXQrHAbےtlJZdQbtrd|Xv`fpvnbHAZpJ`ےltbdrtAJvpfHvXnHAbے˂pZZdQbtrd|Xv`fpvnHAZpJ`ے˂rbJl|XnvvXnے`JXQQr˂pJltdrtAH~fvpfb˂ZdQbt|ZdQbf~fvfpvbHArXQJ`AJltdrtnvpf`vXZHAbQr˂p|ZdQJtArdbnXv`fpvfHrXQJ`Zp˂drtbdQZ|f`vXfH~Qr˂pے`JXlJtbtlf~HQJ`AbHAZpJltdrtAnvp`vXnH~fr˂pے`JXQtArdtlJfpvf~HXQJ`ےp˂rdrtAbdQZ|`vXnH~fr˂pے`JXQJtAdtlJ|ZdQbHfp`˂rXQp˂rtAJl璒tbdQvXn~f`r˂p`JXQArd|lJtfpvf~HQJ`ے˂rXdrtAbdQZ|tb~f`vpfH`JXQZHAbۉlJtZdQbtf~HnXv`bHAZp˙bHAZpJltvXnvXnvf˂pZ`JXQrtAd|lJtAZdQbn~HfXv`f˂rXQbHAZpdQZ|ltb~f`vpfH`JXQrHAbےlJtAZdQbt~HfXv`f˂rXQbHAZpdQZ|ldrtAJpfH~f`vr˂pZHAbbdQZ|Jlt`vXnH~fpZHAblJtAtlJnXvnvfZp˂󒐙bHAbdQZ|AJltfH~nvpے`JXZHAbbtl|ZdQf~HnXv`fpv㒐bHArXQJ`AJltdrtnvpf`vXZHAbQr˂pArd|JtArdfpvZp˂˂rQJbdQZ|JltfHfvpf`vXnZHAbr˂p|ZdQbtArdnXv`fpvbHAZXQJ`ےJltdrtAvpf`vXnZHAbr˂p|ZdQbtArdnXv`f~HJ`ےXQHAZptbdQZZ|dvpfHvXnZHAbr˂pZdQbtArd|nXv`fpvbHAZpQJ`ےJltdrtAnvpvXn~f`r˂p`JXQArd|lJtfpvf~HrXQ˂rXbdQZ|vpfHH~fHAbے˂pZZdQbtrd|Xv`fpvnHfpJ`ے˂rXQdrtAJdQZ|vXn~f`˂pZ`JXQrrd|lJtApvn~HfJ`ے˂rXQtbdQltbvpXnvZHAbے`JXdrtAbdQZ|vpf`vXnے`Jrd|tArd`f~~HfprXQJ`Zp˂drtbdQZ|f`vXfH~Qr˂pے`JXJtArdbtlfpvf~HnrXQJ`Zp˂󒐙bHAbdQZ|AJltfH~nvpے`JXZHAbZdQbt|ZdQnXv`rXQJ`ہbHAdrtAbdQZ|`vXnH~fr˂pے`JXQZHAےtlJ|ZdQbf~HnXv`p˂rbHAZbdQZ|JltH~fvpfے`JXQZHAbtlJ|ZdQbpvnfpvbHAXQJ˂rXQ|drrtAJl~f`vpfH`JXQZHAbۉlJtZdQbtf~HnXv`ˑ˂rXbHAZpbdQZ|JltfHf`vpfHvXnZHAbr˂pZdQbtArd|nXv`fpvJ`ےQJ`p˂drtA~f``vXn`JXQrHAbےlJtAZdQbt~HfXv`fvnrbHAZpJ`ےltbdrtAJvpfHvXnHAbے˂pZZdQbtrd|Xv`fpvnbHAZpJ`ےZ|ddQZ|fH~pfH~JQrQr˂pJltdrtAH~fvpfXQr˂ZdQbt|ZdQbHfpvvnXbHArXQJ`AJltdrtnvpf`vXZHAbQr˂p|ZdQJtArdnXv`fpvےHArXQJ`Zp˂drtbdQZ|f`vXfH~Qr˂pے`JXlJtbtl|f~HbHAZp˂JltdrtAvpf`vXnZHAbr˂p`JXQrtArdtlJfpvf~HXQJ`ےp˂rdrtAbdQZ|`vXnH~fr˂pے`JXQtArdtlJXv`fnXv``ےbJ`ےtAJbdtbdQvXn~f`r˂p`JXQArd|lJtfpvf~HQJ`ے˂rXdrtAbdQZ|vXn~f`r˂p`JXQZHAے`lJtZdQbtf~HnXv`bHAZp`rbdJl|dvXnvpf˂pZ`JXQrrd|lJtApvn~HfXQJ`ے˂rXQbHAZpdQZ|ltb~f`vpfH`JXQrHAbےlJtAZdQbt~HfXv`f˂rXQbHAZprtAJldrtAJf`vXf`vpZHAZA`bdQZ|Jlt`vXnH~fpZHAblJtAtd|nXvv`fZp˂󒐙bHAbdQZ|AJltfH~nvpے`JXZHAbbtl|ZdQf~HnXv`Zp˂󒐙bHArbdQZ|AJltdtAnvpf`vXZHAbQr˂pArd|ZdQbfp`Zp˂rXQJ`bdQZ|JltH~fvpfے`JXQZHAbbtl|ZdQbtArdnXv`fpvbHAZXQJ`ےJltdrtAvpf`vXnZHAbr˂p|ZdQbtArd~Hff~HHAZp˂bHAZpQZ|dZ|AJlvpfHvXnZHAbr˂pZdQbtArd|nXv`fpvbHAZpQJ`ےJltdrtAvpfHvXnZHAbr˂pJXQrArd|lJtfpvf~HےbHQZ|lrtAJlvpfHH~fHAbے˂pZZdQbtrd|Xv`fpvnHAZpJ`ے˂rbdrtAJdQZ|vXn~f`˂pZ`JXQrrd|lJtApvn~HfJ`ے˂rXQtbdQltdnvpXnvbے`JXQrbtdrtAbdQZ|vpf`vXnے`prdtZdQbt`f~~HfprXQJ`Zp˂drtbdQZ|f`vXfH~Qr˂pے`JXJtArdbtlfpvf~HrXQJ`Zp˂drtbdQZ|JltfH~nvpے`JXZHAblJtAnXv`pf~HrXQJ`ےbHAdrtAbdQZ|`vXnH~fr˂pے`JXQJtAdtlJ|ZdQbf~HnXv`p˂rbHAZbdQZ|JltH~fvpfے`JXQZHAbtlJ|ZdQbpvnfpvrXQJ˂rXQrtAJltb~f`vpfH`JXQZHAbۉlJtZdQbtf~HnXv`ˑ˂rXbHAZpbdQZ|Jlt~f`vpfH`JXQZHAbbtlZdQbtArd|nXv`fpvAZp˂tbdQtbd~fv`vXn`JXQrHAbےlJtAZdQbt~HfXv`f˂rXQbHAZpdQZ|ltbdtAJlvpfHvXnHAbے˂pZZdQbtrd|Xv`fpvnbHAZpJ`ےZ|drtAJlfH~p`vXJXQrˉlJtAd|lJtAZdQbnX~Hfpv`frXQbHAZpQZ|dtbd~f`vpfHJXQrAbے`lJtAZdQbt~Hfpv`frXQbHAZpQZ|dtbdtAJlvpfHvXnQr˂pQXb㉀`ZQXb㉐f۝`vpfH~tbAdZZdQbtrd|v`fvnXHfpJ`ےむrXQrtAJlQZ|dvXn~f`˂pZHJXQrrd|lJtAvnX~HfpJ`ےむrXQrtAJlQZ|dtbn~f`vpfHZHAbۑpJAHrˁ`ZXnvˍf۝`v|drlJtAZdQbt~Hfpv`fvnrXbHAZpJ`ےtbdrtAJlvpfHvXnAbے`˂pZHZdQbtrd|v`fvnXbHAZpJ`ےtbdrtAJlvpfHvXn~f`ے`p󙐉ۑQXb㉀pfH~XnvˍQtJlrd|lJtAvnX~HfpQJ`ےrXQbHAZpQZ|dtbd~f`vpfHJXQrAbے`lJtAZdQbt~Hfpv`frXQbHAZpQZ|dtbdf`vpfHvXnے`ZHAbpJAHrۑpJAHrf۝`vp|drtbAdZZdQbtrd|v`fvnXHAZpJ`ےむrbdrtAJlQZ|dvXn~f`˂pZHJXQrrd|lJtAvnX~HfpJ`ےむrXQrtAJlQZ|dvXn~f`JXQr`JXQˁ`ZQ󙐂ˁ`ZXnvˍQtJl|drlJtAZdQbt~Hfpv`frXQbHAZpQZ|dtbdtAJlvpfHvXnAbے`˂pZHZdQbtrd|v`fvnXbHAZpJ`ےtbdrtAJlvpfHvXnۉ˂pZHr˂pXb㉀ۑQXb㉀pfH~tbAdZQtJlrd|lJtAvnX~HfpJ`ےむrXQrtAJlQZ|dtbn~f`vpfHJXQrAbے`lJtAZdQbt~Hfpv`frXQbHAZpQZ|dtbd~f`vpfHAbے`ZHAbpJAHrXnvˍf۝`v|drtbAdZZdQbtrd|v`fvnXbHAZpJ`ےtbdrtAJlvpfHvXn~f`˂pZHJXQrrd|lJtAvnX~HfpJ`ےむrXQrtAJlQZ|dvXn~f`JXQr`JXQHˁ`pJpfH~XnvˍQtJl|drlJtAZdQbt~Hfpv`frXQbHAZpQZ|dtbdf`vpfHvXnrAbے`˂pZHZdQbtrd|v`fvnXbHAZpJ`ےtbdrtAJlvpfHvXnۉ˂pZHAbے`AHr󙐂f۝`vpfH~tbAdZQtJlrd|lJtAvnX~HfpJ`ےむrXQrtAJlQZ|dvXn~f`˂pZHJXQrAے`lJtAZdQbt~Hfpv`frXQbHAZpQZ|dtbd~f`vpfHAXQrˁJXQrˁ`ZQXbXnvˍf۝`v|drtbAdZZdQbtrd|v`fvnXbHAZpJ`ےtbdrtAJlvpfHvXnAbے`˂pZHJXQrbtrd|lJtAvnX~HfpJ`ےむrXQrtAJlQZ|dvXn~f`pZHA˂pZH㉀ۑpJpfH~XnvˍQtJl|drlJtAZdQbt~Hfpv`frXQbHAZpQZ|dtbd~f`vpfHJXQrAbے`lJtZdQbtrd|v`fvnXbHAZpJ`ےtbdrtAJlvpfHvXnbے`Abے`AHr󙐂f۝`vpfH~tbAdZQtJlrd|lJtAvnX~HfpJ`ےむrXQrtAJlQZ|dvXn~f`˂pZHJXQrAd|lJtAZdQbnX~Hfpv`frXQbHAZpQZ|dtbd~f`vpfHJXQrˁJXQrˁ`ZQXAXnvˍf۝`v|drtbAdZZdQbtrd|v`fvnXbHAZpJ`ےtbdrtAJlvpfHvXnAbے`˂pZHZdQbtrd|v`fvnXHfpJ`ےむrXQrtAJlQZ|dvXn~f`pZHA˂p`ZHr󙐂ˁpfH~XnvˍQtJl|drlJtAZdQbt~Hfpv`frXQbHAZpQZ|dtbd~f`vpfHJXQrAbے`lJtAZdQbt~Hfpv`fvnrXbHAZpJ`ےtbdrtAJlvpfHvXnb˂pQXb㉀`ZQXb㉐f۝`vpfH~tbAdZQtJlrd|lJtAvnX~HfpJ`ےむrXQrtAJlQZ|dvXn~f`˂pZHJXQrrd|lJtAvnX~HfpQJ`ےrXQbHAZpQZ|dtbd~f`vpfHZHAbۑpJAHrۑpJAXnvˍf۝`v|drtbAdZZdQbtrd|v`fvnXbHAZpJ`ےtbdrtAJlvpfHvXnAbے`˂pZHZdQbtrd|v`fvnXHAZpJ`ےむrbdrtAJlQZ|dvXn~f`ے`JX󙐂ˁ`ZHr󙐂ˁpfH~XnvˍQtJl|drQt \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv32_2.dat b/vendor/endroid/qr-code/assets/data/qrv32_2.dat new file mode 100644 index 000000000..d254d2962 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv32_2.dat @@ -0,0 +1,289 @@ +}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqrnmnmnmnmjijijijihghghghgdcdcdcdc}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqrnmnmnmnmjijijijihghghghgdcdcdcdc}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqpnmnmmmmmjijijijihghghghgdcdcdcdc}~}~}~}~yzyzyzyzwxwxwxwxststststopopopopmnmnmnmnjijijijihghghghgdcdcdcdc}~}~}~}~yzyzyzyzwxwxwxwxststststopopopopmnmnmnmnjijijijihghghghgdcdcdcdc}~}~}~}~yzyzyzyzwxwxwxwxststststopopopopmnmnmnmnjijijijihghghghgdcdcdcdc}~}~}~}~yzyzyzyzwxwxwxwxststststopopopopmnmnmnmnjijijijihghghghgdcdcdcdc}~}~}~}~yzyzyzyzwxwxwxwxststststopopopopmnmnmnmnjijijijihghghghgdcdcdcdc}~}~}~}~yzyzyzyzwxwxwxwxststststopopopopmnmmmmmmjijijijihghghghgdcdcdcdc}~}~}~}~yzyzyzyzwxwxwxwxststststopopopopnmnmnmnmjijijijihghghghgdcdcdcdc}|{|{|{|yzyzyzyzwvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdcbabababa{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdcbabababa{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdcbabababa{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdcbabababa{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdcbabababa{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdcbabababa{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdcbabababa{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdcbabababa{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdcbabababa~}~}~}~{|{|{|{|yxwxwxwxuvuvuvuvsrqrqrqropopopoplklklklkhghghghgfefefefebabababababababa}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopoplklklklkhghghghgfefefefebabababa`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropopopoplklklklkhghghghgfefefefebabababa`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqropoponmnlklklklkhghghghgfefefefebabababa`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrmnmnmmmmlklklklkhghghghgfefefefebabababa`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrmnmnmnmnlklklklkhghghghgfefefefebabababa`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrmnmnmnmnlklklklkhghghghgfefefefebabababa`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrmnmnmnmnlklklklkhghghghgfefefefebabababa`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrmnmnmnmnlklklklkhghghghgfefefefebabababa`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrmnmnmnmnlklklklkhghghghgfefefefebabababa`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrmnmnmnmmlklklklkhghghghgfefefefebabababa`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrmmmmnmnmlklklklkhghghghgfefefefebabababa`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgfefefefebabababa`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgfefefefebabababa`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgfefefefebabababa`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgfefefefebabababa`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmmmlklklklkhghghghgfefefefebabababa`_`_`_`_}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrmmmnmnmnlklklklkhghghghgfefefefebabababa`_`_`_`_}~}~}~}~{zyzyzyzwxwxwxwxutstststqrqrqrqrmnmnmnmnjijijijihghghghgdcdcdcdcbabababa`_`_`_`_}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnjijijijihghghghgdcdcdcdcbabababa`_`_`_`_}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnjijijijihghghghgdcdcdcdcbabababa`_`_`_`_}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnjijijijihghghghgdcdcdcdcbabababa`_`_`_`_}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmmmmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqrmmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqrnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_}~}~}~}~yzyzyzyzwxwxwxwxststststqrqrqrqrnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#         `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#         `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#         `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=<;<:999999:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#      `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@;<;<;<;<9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#         `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@;<;<;<;<9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#         `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@;<;<;<;<9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#         `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@;<;<;<;<9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#         `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@;<;<;<;<9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#         `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@;<;<;<;<999999:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#       `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPONKLKLKLKLIJIJIJIHEFEFEFEFCDCDCDCB?@?@?@?@;<;<;<;<:9:9:98765656565434343210/0/0/0/.-.-.-,+*)*)*)*)('('('&%$#$#$#$#         + +^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +^]^]^]^]\[\[\[\[XWXWXWXWVUVUTSTSQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + +^]^]^]^]\[\[\[\[XWXWXWXWTSTSSSSSQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#       + + + +^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + +^]^]^]^]\[\[\[\[XWXWXWXWSTSSSSSSQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#"!"!        + + + +^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!         + + + +^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!         + + + +^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!         + + + +^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!         + + + +^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!         + + + +^]^]^]^]\[\[\[\[XWXWXWXWTSSSSSSTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!       + + + +^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTQRQRQRQPMNMNMNMNKLKLKLKJGHGHGHGHEFEFEFEDABABABAB?@?@?@?>;<;<;<;<8787878765656543212121210/0/0/.-,+,+,+,+*)*)*)('&%&%&%&%"!"!"!"!     + + + +^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + +^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + +^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + +^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;:9:9:878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + +^]^]^]^]ZYZYZYZYXWXWXWXWSSSSSSTSOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>9:99999:878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + +^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>9:9:9:9:878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + +^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>9:9:9:9:878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + +^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>9:9:9:9:878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + +^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>9:9:9:9:878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + +^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>9:9:9:9:878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + +^]^]^]^]ZYZYZYZYXWXWXWVUSSSSSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>9:9:9999878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + +^]^]^]^]ZYZYZYZYVUVUVUVUSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>99:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + +^]^]^]^]ZYZYZYZYVUVUVUVUSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + +^]^]^]^]ZYZYZYZYVUVUVUVUSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + +^]^]^]^]ZYZYZYZYVUVUVUVUSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + +^]^]^]^]ZYZYZYZYVUVUVUVUSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + +^]^]^]^]ZYZYZYZYVUVUVUVUSTSSSSSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>:9:99999878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + +^]^]^]^]ZYZYZYZYVUVUVUVUSTSTSTSROPOPOPOPMNMNMNMLIJIJIJIJGHGHGHGFCDCDCDCDABABABA@=>=>=>=>9:9:9:9:87878765434343432121210/.-.-.-.-,+,+,+*)('('('('&%&%&%$#"!"!"!"!  + + \[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     \[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     \[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     \[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!        \[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:99999965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#       \[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#         \[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#         YYZZ[[\\DDEEFFGG !!""##$)((''&&%qppoonnmhiijjkkl !!""##$)((''&&%qppoonnmddeeffgg!!""##$$((''&&%%ppoonnmm]]^^__``HHIIJJKK$%%&&''(%$$##""!mllkkjjilmmnnoop$%%&&''(%$$##""!mllkkjjihhiijjkk%%&&''(($$##""!!llkkjjiiaabbccddLLMMNNOO())**++,! ihhggffepqqrrsst())**++,! ihhggffellmmnopq))**++,, hhggffeeeeffgghhPPQQRRSS,--..//0eddccbbatuuvvwwx,--..//0eddccbbarssttuuv--..//00ddccbbaa~~}}iijjkkllYYZZ[[\\01122334a``__^^]xyyzz{{|01122334a``__^^]vwwxxyyz11223344``__^^]]||{{zzyymmnnoopp]]^^__``45566778]\\[[ZZY|}}~~45566778]\\[[ZZYz{{||}}~55667788\\[[ZZYYxxwwvvuuqqrrssttaabbccdd899::;;< YXXWWVVU899::;;< YXXWWVVU~~}}||{~99::;;<< XXWWVVUUttssrrqquuvvwwxxeeffgghh<==>>??@ + + UTTSSRRQ<==>>??@ + + UTTSSRRQ{zzyyxxw==>>??@@ + + TTSSRRQQppoonnmmyyzz{{||iijjkkll@AABBCCD QPPOONNM@AABBCCD QPPOONNMwvvuuttsAABBCCDDPPOONNMMllkkjjii}}~~mmssttuuDEEFFGGHMLLKKJJIDEEFFGGHMLLKKJJIsmmllkkjEEFFGGHHLLKKJJIIhhggffeevvwwxxyyHIIJJKKLIHHGGFFEHIIJJKKLIHHGGFFEjiihhggfIIJJKKLLHHGGFFEEddccbbaazz{{||}}LMMNNOOPEDDCCBBALMMNNOOPEDDCCBBAfeeddccbMMNNOOPPDDCCBBAA``__^^]]~~PQQRRSST + + A@@??>>=PQQRRSST + + A@@??>>=baa``__^QQRRSSTT + + @@??>>==\\[[ZZYYTUUVVWWX =<<;;::9TUUVVWWX =<<;;::9^]]\\[[ZUUVVWWXX <<;;::99XXWWVVUUXYYZZ[[\98877665~~}XYYZZ[[\98877665ZYYSSRRQ~~}}YYZZ[[\\88776655TTSSRRQQ\]]^^__`54433221}||{{zzy\]]^^__`54433221QPPOONNM||{{zzyy]]^^__``44332211PPOONNMM`aabbccd100//..-yxxwwvvu`aabbccd100//..-MLLKKJJIxxwwvvuuaabbccdd00//..--LLKKJJII~~}}||deeffggh -,,++**)uttssrrqdeeffggh -,,++**)IHHGGFFEttssrrqqeeffgghh ,,++**))HHGGFFEE{{zzyyxxhiijjkkl !!""##$)((''&&%qppoonnmhiijjkkl !!""##$)((''&&%EDDCCBBAppoonnmmiijjkkll!!""##$$((''&&%%DDCCBBAAwwvvuutt~~}}|lmmnnoop$%%&&''(%$$##""!mllkkjjilmmnnoop$%%&&''(%$$##""!A@@??998llkkjjiimmnnoopp%%&&''(($$##""!!iijjkkll@@??>>==ssmmllkk|{{zzyyxpqqrrsst())**++,! ihhggffepqqrrsst())**++,! 87766554hhggffeeqqrrsstt))**++,, mmnnoopp<<;;::99jjiihhggxwwvvuuttuuvvwwx,--..//0eddccbbatuuvvwwx,--..//043322110ddccbbaauuvvwwxx--..//00qqrrsstt88776655ffeeddcctssrqponxyyzz{{|01122334a``__^^]xyyzz{{|011223340//..--,``__^^]]yyzz{{||11223344uuvvwwxx44332211bbaa``__mmllkkjj|}}~~45566778]\\[[ZZY|}}~~45566778,++**))(\\[[ZZYY}}~~55667788yyzz{{||00//..--^^]]\\[[iihhggff899::;;< YXXWWVVU899::;;< (''&&%%XXWWVVUU99::;;<< }}~~,,++**))ZZYYSSRReeddccbb<==>>??@ + + UTTSSRRQ<==>>??@ + + TTSSRRQQ==>>??@@ + + ((''&&%%QQPPOONNaa``__^^@AABBCCD QPPOONNM@AABBCCD PPOONNMMAABBCCDD$$##""!!MMLLKKJJ]]\\[[ZZDEEFFGGHMLLKKJJIDEEFFGGHLLKKJJIIEEFFGGHH IIHHGGFFYYXWVUTSHIIJJKKLIHHGGFFEHIIJJKKLHHGGFFEEIIJJKKLLEEDDCCBBSRRQQPPOLMMNNOOPEDDCCBBALMMNNOOP + +  DDCCBBAAMMNNOOPPAA@@??99ONNMMLLKPQQRRSST + + A@@??>>=PQQRRSST  + + @@??>>==QQRRSSTT + + 88776655KJJIIHHGTUUVVWWX =<<;;::9TUUVVWWX<<;;::99UUVVWWXX  44332211GFFEEDDC~~}XYYZZ[[\98877665~~}XYYZZ[[\88776655~~}}YYZZ[[\\ + + 00//..--CBBAA@@?}||{{zzy\]]^^__`54433221}||{{zzy\]]^^__` + + 44332211||{{zzyy]]^^__``~~}} + + ,,++**))?>=<;:99yxxwwvvu`aabbccd100//..-yxxwwvvu`aabbccd% 00//..--xxwwvvuuaabbccdd||{{zzyy ((''&&%%88776655uttssrrqdeeffggh -,,++**)uttssrrqdeeffggh%&&''((),,++**))ttssrrqqeeffgghh xxwwvvuu44332211qppoonnmhiijjkkl !!""##$)((''&&%qppoonnmhiijjkkl)**++,,-((''&&%%ppoonnmmiijjkkll!!""##$$ttssrrqq00//..--mllkkjjilmmnnoop$%%&&''(%$$##""!mllkkjjilmmnnoop-..//001$$##""!!llkkjjiimmnnoopp%%&&''((ppoonnmm,,++**))ihhggffepqqrrsst())**++,! ihhggffepqqrrsst12233445 hhggffeeqqrrsstt))**++,,llkkjjii ((''&&%%eddccbbatuuvvwwx,--..//0eddccbbatuuvvwwx56677889!"#$%%&&ddccbbaauuvvwwxx--..//00hhggffee!!""##$$ $#"! a``__^^]xyyzz{{|01122334a``__^^]xyyzz{{|9??@@AAB''(())**``__^^]]yyzz{{||11223344ddccbbaa%%&&''(( + + ]\\[[ZZY|}}~~45566778]\\[[ZZY|}}~~BCCDDEEF++,,--..\\[[ZZYY}}~~55667788``__^^]]))**++,, + + YXXWWVVU899::;;< YXXWWVVUFGGHHIIJ//001122 XXWWVVUU99::;;<<\\[[ZZYY--..//00UTTSSRRQ<==>>??@ + + UTTSSRRQJKKLLMMN33445566 + + TTSSRRQQ==>>??@@XXWWVVUU11223344QPPOONNM@AABBCCD QPPOONNMNOOPPQQR778899:;PPOONNMMAABBCCDDTTSSRRQQ55667788 +MLLKKJJIDEEFFGGHMLLKKJJIRSSYYZZ[<=>??@@ALLKKJJIIEEFFGGHHPPOONNMM99::;;<< + IHHGGFFEHIIJJKKLIHHGGFFE[\\]]^^_ABBCCDDEHHGGFFEEIIJJKKLLLLKKJJII==>>??@@%%&&EDDCCBBALMMNNOOPEDDCCBBA_``aabbcEFFGGHHIDDCCBBAAMMNNOOPPHHGGFFEEAABBCCDD''(())** + + A@@??>>=PQQRRSST + + A@@??>>=cddeeffgIJJKKLLM + + @@??>>==QQRRSSTTDDCCBBAAEEFFGGHH++,,--.. =<<;;::9TUUVVWWX =<<;;::9ghhiijjkMNNOOPPQ <<;;::99UUVVWWXX@@??>>==IIJJKKLL//00112298877665~~}XYYZZ[[\98877665~~}kllmmsstQRRSSTUV88776655~~}}YYZZ[[\\<<;;::99MMNNOOPP3344556654433221}||{{zzy\]]^^__`54433221}||{{zzytuuvvwwxWXYYZZ[[44332211||{{zzyy]]^^__``88776655QQRRSSTT778899??100//..-yxxwwvvu`aabbccd100//..-yxxwwvvuxyyzz{{|\\]]^^__00//..--xxwwvvuuaabbccdd44332211UUVVWWXX@@AABBCC -,,++**)uttssrrqdeeffggh -,,++**)uttssrrq|}}~~``aabbcc ,,++**))ttssrrqqeeffgghh00//..--,,++**))ttssrrqqeeffgghhHHIIJJKK !,++**))(tssrrqqpeffgghhi !,++**))(tssrrqqp}~~aabbccdd !!++**))((ssrrqqppffgghhii !!++**))((iihhggff~~}}||{fgghhiij !!"+**))(('srrqqppofgghhiij !!"+**))(('feeddccbeddccbba((''&&%%ppoonnmmiijjkkllLLMMNNOO!""##$$%(''&&%%$poonnmmlijjkkllm!""##$$%(''&&%%$poonnmmleeffgghh""##$$%%''&&%%$$oonnmmlljjkkllmm""##$$%%''&&%%$$eeddccbb{zzyyxxwjkkllmmn"##$$%%&'&&%%$$#onnmmllkjkkllmmn"##$$%%&'&&%%$$#baa``__^a``__^^]$$##""!!llkkjjiimmnnooppPPQQRRSS%&&''(()$##""!! lkkjjiihmnnooppq%&&''(()$##""!! lkkjjiihiijjkkll&&''(())##""!! kkjjiihhnnooppqq&&''(())##""!! aa``__^^wvvuuttsnooppqqr&''(())*#""!! kjjiihhgnooppqqr&''(())*#""!! ^]]\\[[Z]\\[[ZZY hhggffeeqqrrssttYYZZ[[\\)**++,,- hggffeedqrrssttu)**++,,- hggffeedmmnopqrs**++,,--ggffeeddrrssttuu**++,,--]]\\[[ZZsrqponmmrssttuuv*++,,--.gffeeddcrssttuuv*++,,--.ZYYSSRRQYXXWWVVUddccbbaauuvvwwxx]]^^__``-..//001dccbbaa`uvvwwxxy-..//001dccbbaa`sttuuvvw..//0011ccbbaa``vvwwxxyy..//0011YYSSRRQQllkkjjiivwwxxyyz.//00112cbbaa``_vwwxxyyz.//00112QPPOONNMUTTSSRRQ``__^^]]yyzz{{||aabbccdd12233445`__^^]]\yzz{{||}12233445`__^^]]\wxxyyzz{22334455__^^]]\\zz{{||}}22334455PPOONNMMhhggffeez{{||}}~23344556_^^]]\\[z{{||}}~23344556MLLKKJJIQPPOONNM\\[[ZZYY}}~~eeffgghh56677889\[[ZZYYX}~~56677889\[[ZZYYX~{||}}~~66778899[[ZZYYXX~~66778899LLKKJJIIddccbbaa~6778899:[ZZYYXXW~6778899:IHHGGFFEMLLKKJJI XXWWVVUUiijjkkll9::;;<<= XWWVVUUT9::;;<<= XWWVVUUT~}}||{{z::;;<<== WWVVUUTT::;;<<== HHGGFFEE``__^^]]:;;<<==> WVVUUTTS:;;<<==> EDDCCBBAIHHGGFFE + + TTSSRRQQmmssttuu=>>??@@A + + TSSRRQQP=>>??@@A + + TSSRRQQPzyyxxwwv>>??@@AA + + SSRRQQPP>>??@@AA + + DDCCBBAA\\[[ZZYY>??@@AAB + + SRRQQPPO>??@@AAB + + A@@??998EDDCCBBAPPOONNMMvvwwxxyyABBCCDDEPOONNMMLABBCCDDEPOONNMMLvuuttssmBBCCDDEEOONNMMLLBBCCDDEE@@??9988XWVUTSSRBCCDDEEFONNMMLLKBCCDDEEF87766554A@@??>>=LLKKJJIIzz{{||}}EFFGGHHILKKJJIIHEFFGGHHILKKJJIIHmllkkjjiFFGGHHIIKKJJIIHHFFGGHHII77665544RQQPPOONFGGHHIIJKJJIIHHGFGGHHIIJ43322110=<<;;::9HHGGFFEE~~IJJKKLLMHGGFFEEDIJJKKLLMHGGFFEEDihhggffeJJKKLLMMGGFFEEDDJJKKLLMM33221100NMMLLKKJJKKLLMMNGFFEEDDCJKKLLMMN0//..--,98877665DDCCBBAAMNNOOPPQ DCCBBAA@MNNOOPPQ DCCBBAA@eddccbbaNNOOPPQQ CCBBAA@@NNOOPPQQ //..--,,JIIHHGGFNOOPPQQR +CBBAA@@?NOOPPQQR +,++**))(54433221 + + @@??>>==QRRSSTTU + + @??>>==>==>==<>==<<;RSSTTUUV + (''&&%%100//..- <<;;::99~~}}||UVVWWXXY <;;::998UVVWWXXY <;;::998]\\[[ZZYVVWWXXYY;;::9988VVWWXXYY''&&%%BAA@@??>VWWXXYYZ;::99887VWWXXYYZ-,,++**)88776655{{zzyyxxYZZ[[\\]87766554~~}}|YZZ[[\\]87766554YSSRRQQP~~}}||ZZ[[\\]]77665544~~}}||ZZ[[\\]]=<;:9988~~}}||{Z[[\\]]^76655443~~}}||{Z[[\\]]^)((''&&%44332211wwvvuutt]^^__``a43322110|{{zzyyx]^^__``a43322110POONNMML{{zzyyxx^^__``aa33221100{{zzyyxx^^__``aa77665544{zzyyxxw^__``aab3221100/{zzyyxxw^__``aab%$$##""!00//..--ssmmllkkabbccdde0//..--,xwwvvuutabbccdde0//..--,LKKJJIIHwwvvuuttbbccddee//..--,,wwvvuuttbbccddee33221100wvvuuttsbccddeef/..--,,+wvvuuttsbccddeef!  ,,++**))jjiihhgg~~}}|effgghhi !,++**))(tssrrqqpeffgghhi !,++**))(HGGFFEEDssrrqqppffgghhii !!++**))((ssrrqqppffgghhii !!//..--,,srrqqppofgghhiij !!"+**))(('srrqqppofgghhiij !!" !!""##$$((''&&%%ffeeddcc|{{zzyyxijjkkllm!""##$$%(''&&%%$poonnmmlijjkkllm!""##$$%(''&&%%$DCCBBAA@oonnmmlljjkkllmm""##$$%%''&&%%$$oonnmmlljjkkllmm""##$$%% ++**))((onnmmllkjkkllmmn"##$$%%&'&&%%$$#onnmmllkjkkllmmn"##$$%%& + + +%%&&''(($$##""!!bbaa``__xwwvvuutmnnooppq%&&''(()$##""!! lkkjjiihmnnooppq%&&''(()$##""!! @??99887kkjjiihhnnooppqq&&''(())##""!! kkjjiihhnnooppqq&&''(()) + + ''&&%%$#kjjiihhgnooppqqr&''(())*#""!! kjjiihhgnooppqqr&''(())* + ))**++,, ^^]]\\[[tssrqponqrrssttu)**++,,- hggffeedqrrssttu)**++,,- 76655443ggffeeddrrssttuu**++,,--ggffeeddrrssttuu**++,,--"! gffeeddcrssttuuv*++,,--.gffeeddcrssttuuv*++,,--. --..//00ZZYYSSRRmmllkkjjuvvwwxxy-..//001dccbbaa`uvvwwxxy-..//0013221100/ccbbaa``vvwwxxyy..//0011ccbbaa``vvwwxxyy..//0011 + +cbbaa``_vwwxxyyz.//00112cbbaa``_vwwxxyyz.//00112 + + 11223344QQPPOONNiihhggffyzz{{||}12233445`__^^]]\yzz{{||}12233445/..--,,+__^^]]\\zz{{||}}22334455__^^]]\\zz{{||}}22334455 _^^]]\\[z{{||}}~23344556_^^]]\\[z{{||}}~23344556 + + 55667788MMLLKKJJeeddccbb}~~56677889\[[ZZYYX}~~56677889+**))(('[[ZZYYXX~~66778899[[ZZYYXX~~66778899[ZZYYXXW~6778899:[ZZYYXXW~6778899: 99::;;<< IIHHGGFFaa``__^^9::;;<<= XWWVVUUT9::;;<<= '&&%%WWVVUUTT::;;<<== WWVVUUTT::;;<<== WVVUUTTS:;;<<==> WVVUUTTS:;;<<==>%%&&'==>>??@@ + + EEDDCCBB]]\\[[ZZ=>>??@@A + + TSSRRQQP=>>??@@A + + SSRRQQPP>>??@@AA + + SSRRQQPP>>??@@AA + + SRRQQPPO>??@@AAB + + SRRQQPPO>??@@AAB'(())**+AABBCCDDAA@@??99YYXWVUTSABBCCDDEPOONNMMLABBCCDDEOONNMMLLBBCCDDEEOONNMMLLBBCCDDEE ONNMMLLKBCCDDEEFONNMMLLKBCCDDEEF+,,--../EEFFGGHH88776655SRRQQPPOEFFGGHHILKKJJIIHEFFGGHHIKKJJIIHHFFGGHHIIKKJJIIHHFFGGHHII%%&&''KJJIIHHGFGGHHIIJKJJIIHHGFGGHHIIJ/0011223 IIJJKKLL44332211ONNMMLLKIJJKKLLMHGGFFEEDIJJKKLLM GGFFEEDDJJKKLLMMGGFFEEDDJJKKLLMM(())**++GFFEEDDCJKKLLMMNGFFEEDDCJKKLLMMN34455667 !!""##$MMNNOOPP00//..--KJJIIHHGMNNOOPPQ DCCBBAA@MNNOOPPQ + +  +CCBBAA@@NNOOPPQQ CCBBAA@@NNOOPPQQ,,--..// +CBBAA@@?NOOPPQQR +CBBAA@@?NOOPPQQR78899??@$%%&&''(QQRRSSTT + + ,,++**))GFFEEDDCQRRSSTTU + + @??>>==>==<>==<>==<<;RSSTTUUV + ?>>==<<;RSSTTUUV@AABBCCD())**++,UUVVWWXX ((''&&%%CBBAA@@?UVVWWXXY <;;::998UVVWWXXY;;::9988VVWWXXYY;;::9988VVWWXXYY44556677;::99887VWWXXYYZ;::99887VWWXXYYZDEEFFGGH,--..//0YYZZ[[\\?>=<;:99~~}}|YZZ[[\\]87766554~~}}|YZZ[[\\] 77665544~~}}||ZZ[[\\]]77665544~~}}||ZZ[[\\]]8899??@@76655443~~}}||{Z[[\\]]^76655443~~}}||{Z[[\\]]^HIIJJKKL01122334]]^^__``88776655|{{zzyyx]^^__``a43322110|{{zzyyx]^^__``a + + 33221100{{zzyyxx^^__``aa33221100{{zzyyxx^^__``aaAABBCCDD3221100/{zzyyxxw^__``aab3221100/{zzyyxxw^__``aabLMMNNOOP45566778aabbccdd44332211xwwvvuutabbccdde0//..--,xwwvvuutabbccdde%%& //..--,,wwvvuuttbbccddee//..--,,wwvvuuttbbccddeeEEFFGGHH/..--,,+wvvuuttsbccddeef/..--,,+wvvuuttsbccddeefPQQRRSSY899::;;>??@iijjkkll!!""##$$ ,,++**))poonnmmlijjkkllm!""##$$%(''&&%%$poonnmmlijjkkllm*++,,--.''&&%%$$oonnmmlljjkkllmm""##$$%%''&&%%$$oonnmmlljjkkllmmMMNNOOPP"##$$%%&'&&%%$$#onnmmllkjkkllmmn"##$$%%&'&&%%$$#onnmmllkjkkllmmn]^^__``a@AABBCCDmmnnoopp%%&&''(( + + ((''&&%%lkkjjiihmnnooppq%&&''(()$##""!! lkkjjiihmnnooppq.//00112##""!! kkjjiihhnnooppqq&&''(())##""!! kkjjiihhnnooppqqQQRRSSYY&''(())*#""!! kjjiihhgnooppqqr&''(())*#""!! kjjiihhgnooppqqrabbccddeDEEFFGGHqqrrsstt))**++,,$#"! hggffeedqrrssttu)**++,,- hggffeedqrrssttu23344556 !"ggffeeddrrssttuu**++,,--ggffeeddrrssttuuZZ[[\\]]*++,,--.gffeeddcrssttuuv*++,,--.gffeeddcrssttuuveffgghhiHIIJJKKLuuvvwwxx--..//00 dccbbaa`uvvwwxxy-..//001dccbbaa`uvvwwxxy6778899?#$%%&&''ccbbaa``vvwwxxyy..//0011ccbbaa``vvwwxxyy^^__``aa.//00112cbbaa``_vwwxxyyz.//00112cbbaa``_vwwxxyyzijjkkllmLMMNNOOPyyzz{{||11223344 + + `__^^]]\yzz{{||}12233445`__^^]]\yzz{{||}?@@AABBC(())**++__^^]]\\zz{{||}}22334455__^^]]\\zz{{||}}bbccddee23344556_^^]]\\[z{{||}}~23344556_^^]]\\[z{{||}}~mssttuuvPQQRRSST}}~~55667788\[[ZZYYX}~~56677889\[[ZZYYX}~~CDDEEFFG,,--..//[[ZZYYXX~~66778899[[ZZYYXX~~ffgghhii6778899:[ZZYYXXW~6778899:[ZZYYXXW~vwwxxyyzTUUVVWWX99::;;<<XWWVVUUT9::;;<<= XWWVVUUTGHHIIJJK00112233 WWVVUUTT::;;<<== WWVVUUTTjjkkllmm:;;<<==> WVVUUTTS:;;<<==> WVVUUTTSz{{||}}~XYYZZ[[\==>>??@@ +TSSRRQQP=>>??@@A + + TSSRRQQPKLLMMNNO44556677 + + SSRRQQPP>>??@@AA + + SSRRQQPPssttuuvv>??@@AAB + + SRRQQPPO>??@@AAB + + SRRQQPPO~\]]^^__`AABBCCDD + POONNMMLABBCCDDEPOONNMMLOPPQQRRS8899:;<=OONNMMLLBBCCDDEEOONNMMLLwwxxyyzzBCCDDEEFONNMMLLKBCCDDEEFONNMMLLK`aabbccdEEFFGGHH%%&&LKKJJIIHEFFGGHHILKKJJIIHSYYZZ[[\>??@@AABKKJJIIHHFFGGHHIIKKJJIIHH{{||}}~~FGGHHIIJKJJIIHHGFGGHHIIJKJJIIHHGdeeffgghIIJJKKLL''(())**HGGFFEEDIJJKKLLMHGGFFEED\]]^^__`BCCDDEEFGGFFEEDDJJKKLLMMGGFFEEDDJKKLLMMNGFFEEDDCJKKLLMMNGFFEEDDC~~}hiijjkklMMNNOOPP++,,--.. DCCBBAA@MNNOOPPQ DCCBBAA@`aabbccdFGGHHIIJ CCBBAA@@NNOOPPQQ CCBBAA@@NOOPPQQR +CBBAA@@?NOOPPQQR +CBBAA@@?}||{{zzylmmnnoopQQRRSSTT//001122 + + @??>>==>==>==<>==<<RSSTTUUV + ?>>==<<;RSSTTUUV + ?>>==<<;~~}}||{yxxwwvvupqqrrsstUUVVWWXX33445566 <;;::998UVVWWXXY <;;::998hiijjkklNOOPPQQR;;::9988VVWWXXYY;;::9988~~}}||{{VWWXXYYZ;::99887VWWXXYYZ;::99887{zzyyxxwuttssrrqtuuvvwwx~~}}YYZZ[[\\778899??87766554~~}}|YZZ[[\\]87766554~~}}|lmmssttuRSSTUVWX77665544~~}}||ZZ[[\\]]77665544zzyyxxwwZ[[\\]]^76655443~~}}||{Z[[\\]]^76655443wvvuuttsqppoonnmxyyzz{{|||{{zzyy]]^^__``@@AABBCC43322110|{{zzyyx]^^__``a43322110|{{zzyyxuvvwwxxyYYZZ[[\\33221100{{zzyyxx^^__``aa33221100vvuuttss^__``aab3221100/{zzyyxxw^__``aab3221100/smmllkkjmllkkjji|}}~~xxwwvvuuaabbccddDDEEFFGG0//..--,xwwvvuutabbccdde0//..--,xwwvvuutyzz{{||}]]^^__``//..--,,wwvvuuttbbccddee//..--,,mmllkkjjbccddeef/..--,,+wvvuuttsbccddeef/..--,,+jiihhggfihhggffebdQZ|H~f|ZdQZp˂AJltے`JX|ZdQZp˂AJltے`JX|ZdQےbHA`vXnے`JXQfpvdrtA`vXnbtlrXQJ`ۉbdQZ|Qr˂pbtlrXQJ`ۉbdQZ|Qr˂pbtl|Zp˂vpfr˂pnXv`JltvpfJtArdbHAdrtZHAbJtArdbHAdrtZHAbZdQbrXQJH~fZHAbf~HbdQZ|H~f|ZdQZp˂AJltے`JX|ZdQZp˂AJltے`JXnXv`pbHAZp`vXnے`JXQfpvdrtA`vXntArdrXQJ`ۉbdQZ|Qr˂pbtlrXQJ`ۉbdQZ|Qr˂pvnXrXQvpfr˂pnXv`Jltvpf|ZdQbbHAdrtZHAbJtArdbHAdrtZHAbv`fJ`ےH~fZHAbf~HbdQZ|H~ftlJZp˂AJltے`JX|ZdQZp˂AJltے`JX~HfpbHAZp`vXnے`JXQfpvdrtA`vXntArdrXQJ`ۉbdQZ|Qr˂pbtlrXQJ`ۉbdQZ|Qr˂pvnXrXQvpfr˂pnXv`Jltvpf|ZdQbbHAdtAZHAbJtArdbHAdtAZHAbv`fJ`bAZH~fZHAےf~HbdQZ|H~ftd|Zp˂Jltے`JX|ZdQZp˂Jltے`JXnXp˂r`vXn`JXQrfpvdrtA`vXnZdQbtrXQJ`bnvpQr˂pbnXv`rXQJ`bnvpQr˂pv`fbdQZ|vpfbtlnXv`JltvpflJtAbHAfHˑZHAbf~HbHAfHˑZHAb~HfpdrtAH~fJtAdf~HbdQZ|H~frd|Zp˂f`vXے`JXfpvZp˂f`vXے`JXvnXJlt`vXn|ZdQbfpvdrtA`vXnZdQbtrXQJ`nvpQr˂pnXv`rXQJ`nvpQr˂pv`fbdQZ|vpftlJnXv`Jltr˂pl|ZbHAfH~ˑZHAbf~HbHAfH~ˑZHAb~HXv`drtAH~ftArdf~HbdQZ|`JXQrdQbnXZp˂f`vXے`JXfpvZp˂f`vXے`JXf~HJlt`vXn|ZdQbfpvdrtA˂pZv`f~rXQJ`nvpQr˂pnXv`rXQJ`nvpQr˂pfpvbdQZ|vpftlJnXv`JltHAbےfpv㒐bHAfH~ˑZHAbf~HbHAfH~ˑZHAbnXv`drtAH~ftArdf~HbdQZ|`JXQrnXv`Zp˂f`vXے`JXfpvZp˂f`vXے`JXf~HJlt`vXn|ZdQbfpvdrtA˂pZf~HrXQJ`nvpQr˂pnXv`rXQJ`nvpQr˂pfp`bdQZ|vpftlJnXv`p˂rJltHAXQrfpv㒐bHAfH~ˑZHAbf~HbHAfH~ˑZHAbf~HdrtAH~ftArdf~HXQJ`ےbdQZ|˂pZHAnXv`Zp˂f`vXے`JXfpvZp˂f`vXے`JXfpvJlt`vXn|ZdQbfpvbHAZdrtAbے`f~fvrXQJ`nvpQr˂pnXv`rXQJ`nvpQr˂pnXv`bdQZ|vpftlJnXv`p˂rJltJXQrnXvbHAfH~ˑZHAbf~HbHAfH~ˑZHAbf~HdrtAH~ftArdf~HXQJ`ےbdQZ|˂pZHA`f~Zp˂f`vXے`JXfpvZp˂f`vXے`JXfpvJlt`vXn|ZdQbfpvbHAZdrtAb˂HfpvrXQJ`nvpQr˂pnXv`rXQJ`nvpQr˂p~HfpbdQZ|vpftlJnXv`p˂rJltpZHAbnXvbHAfH~ˑZHAۍf~HbHAfH~ˑZHA۝vnXdrtAH~ftArdfHfXQJ`ےbdQZ|ے`J`f~Zp˂f`vX`JXQfpvZp˂f`vX`JXQv`fJlt`vXn|ZdQbpvnbHAZdrtAXQr˂HfvnXrbdQZ|nvprbtlnXv`rbdQZ|nvprbtl~HfpbdQZ|r˂ptlJrXQJ`p˂rJltpZHAbv`fdrtfH~ˑJtAdf~HdrtfH~ˑ|ZdQvnXdrtAZHAbtArdےHAZbdQZ|bdQZ|ے`p~HfpAJltf`vX|ZdQfpvAJltf`vXbtlv`pJltے`JXQ|ZdQbp˂rdrtAdrtAZHAbvnXbdQZ|nvpbtlnXv`bdQZ|nvpJtArdvnrXbdQZ|r˂ptlJXQJ`ےJltJltے`JXQv`fdrtfH~JtArdf~HdrtfH~˂|ZdQQJ`AdrtAZHAbtArdbHAZbdQZ|bdQZ|r˂p~HfpAJltf`vX|ZdQfpvAJltf`vXbtlZp˂Jltے`JXQ|ZdQbp˂rdrtA`vXnZHAbvnv`bdQZ|nvpbtlnXv`bdQZ|nvpJtArdtrXQJ`bdQZ|r˂ptlJXQJ`ےJltvpfے`JXQf~HdrtfH~JtArdf~HdrtfH~ˉlJtbHAdrtAZHAbtArdbHAZbdQZ|H~fHAbےfpvAJltf`vX|ZdQfpvAJltf`vXArd|Zp˂Jltے`JXQ|ZdQbp˂rdrtA`vXn`JXQrnXv`bdQZ|nvpbtlnXv`bdQZ|nvpZdQbtrXQJ`bdQZ|r˂ptlJXQJ`ےJltvpf˂pZf~HdrtfH~JtArdf~HdrtfH~ˉlJtbHAZdrtAZHAbtArdbHAZbdQZ|H~fHAbےfpvAJltf`vX|ZdQfpvAJltf`vXArd|rXQJJltے`JXQ|ZdQbp˂rdrtA`vXn`JXQrnvfbdQZ|nvpbtlnXv`bdQZ|nvplJtA`ےbbdQZ|r˂ptlJXQJ`ےJltvpf˂p|~HfpہdrtfH~JtArdf~HdrtfH~rd|HAZp˂drtAZHAbtArdbHAZbdQZ|H~fZdQbtvnXAJltf`vX|ZdQfpvAJltf`vXZdQbt瀉rXQJJltے`JXQ|ZdQbp˂rdrtA`vXnlJtAv`fbdQZ|nvpbtlnXv`bdQZ|nvplJtA`ےbbdQZ|r˂ptlJXQJ`ےJltvpfrd|~HfpہdrtfH~JtArdfHdrtfH~rd|HAZpdtAJZHAbtArdbHAZbdQZ|H~fZdQbtvnXAJltf`vX|ZdQfpvAJltf`vXZdQtArdrQJ`ےltbے`JXQ|ZdQbp˂rdrtA`vXnlJtAv`frbdQZ|nr˂pbtlnrXQJ`bdQZ|nr˂p|ZdbHAZpnvpr˂pnXv`XQJ`ےJltvpfrdtQJHAdrtZHAbJtArdےHAdrtZHAbQbtl˂rXfHfZHAbf~HbHAZbdQZ|H~flJtArZp˂AJltے`JX|ZdQZp˂AJltے`JXJtArdQJ`ے`vXnے`JXQfpvp˂rdrtA`vXnd|ZrXQJ`ۉbdQZ|Qr˂pbtlrXQJ`ۉbdQZ|Qr˂p|ZdbHAZpvpfr˂pnXv`XQJ`ےJltvpfdQbt璒bHAdrtZHAbJtArdbHAdrtZHAbQbtd˂rQJH~fZHAbf~HbHAZbdQZ|H~flJtArZp˂AJltے`JX|ZdQZp˂AJltے`JX|ZdQbHA`vXnے`JXQfpvp˂rdrtA`vXnd|lrXQJ`ۉbdQZ|Qr˂pbtlrXQJ`ۉbdQZ|Qr˂pbtlZp˂vpfr˂pnXv`XQJ`ےJltvpfJtArdbHAdrtZHAbJtArdbHAdrtZHAbJtArdrXQJ`H~fZHAbf~HbHAZbdQZ|drtAZHAbtArdrXQJ`~f`ZHAbf~HbHAZp~f`ZHAbf~HbHAZpvpfrd|~HfdrtAJ~f`rd|~Hf|drAbے`rd|bHAZp˙rtAJlAbے`rd|bHAZp˙rtAJlbے`f۝`vJltے`JXQ|ZdQbےbHAvXn`JXQfpv˂rXvXn`JXQfpv˂rXH~fZdQbtpvnltbvXnZdQbtpvntAJl璁JXQrZdQbt炀rXQtbdJXQrZdQbt炀rXQtbdJXQrXnvˍbdQZ|r˂ptlJZp˂vpfHr˂pnXv`QJ`ےvpfHr˂pnXv`QJ`p`vXnlJtAXv`fdQZ|vpfHlJtAXv`ftbdQZ˂pZHlJtAJ`ےQZ|d˂pZHlJtAJ`ےQZ|dpZHApfH~drtAZHAbtArdbHAZ~f`ZHAbf~HbHAZp~f`ZHAbf~Hrbdvf~rd|~HfdrtAJ~f`rd|~Hf|drAbJXQrd|bHAZp˙rtAJlAbے`rd|bHAZp˙rtAJlb˂pf۝`vJltے`JXQ|ZdQbp˂rvXn`JXQfpv˂rXvXn`JXQfpvQZ|lf`vXZdQbtpvnltbvXnZdQbtpvntAdQZ|r˂pZdQbt炀rXQtbdJXQrZdQbt炀rXQtbdZHAbXnvˍbdQZ|r˂ptlJXQJ`ےvpfHr˂pnXv`QJ`ےvpfHr˂pnXv`˒tbdQnvplJtAXv`fdQZ|vpfHlJtAXv`fdrtAZHAblJtAJ`ےQZ|d˂pZHlJtAJ`ےQZ|dے`JXpfH~drtAZHAbtArdbHAZ~f`ZHAbf~HbHAZp~f`ZHAbf~HZ|dfH~rd|~HfdrtAJ~f`rd|~HfJltے`JXQrd|bHAZp˙rtAJlAbے`rd|bHAZp˙rtAJlQr˂pf۝`vJltے`JXQ|ZdQbp˂rvXn`JXQfpv˂rXvXn`JXQfpvrtAJlf`vXZdQbtpvnltbvXnZdQbtpvnbdQZ|r˂pZdQbt炀rXQtbdJXQrZdQbt炀rXQtbdZHAbXnvˍbdQZ|r˂ptlJXQHAZpvpfHr˂pnXv`QJ`ےvpfHr˂pnXv`˒tbdQnvplJtAXv`fdQZ|vpfHlJtAXv`fdrtAZHAblJtAJ`ےQZ|d˂pZHlJtAJ`ےQZ|dے`ppfH~dtAJZHAbtArd˂rXQ~f`ZHAے`f~HbHAZp~f`ZHAے`f~HZ|dtf~f`rd|HfpdrtAJ~f`rd|HfpJl|JQrrd|bHAZp˙tAJlAbے`rd|bHAZp˙tAJlZHAbېf۝`vltbے`JXQ|ZdQbJ`ےvXnJXQrfpv˂rvXnJXQrfpvbdQZ|vXnrZdQbtvnrltbvXnrZdQbtvnrdrtAJpZHAZdQbnXrXQtbnJXQrZdQbnXrXQtbn`JXQXnvˍnvpr˂pnXv`bHAZpvpfHbtlnXv`bdQZ|vpfHbtlnXv`ˁdrt˂pZlJtAXQJ`ےdQZ|˂pZlJtAXQJ`ےltbbے`v`fJ`ےvpfH˂pZHv`fJ`ےvpfHr˂ppfH~fHfZHAbpvn˂rXQ~f`JtAd|f~HdrtA~f`JtAd|f~HAJltHAbےrd|HAZpdrtAJHAbےrd|HAZpdQZ|JXQr˕~HfpbHAZp˅f`Abے`~HfpbHAZp˅f`ZHAbېf۝`v`vXnے`JXQXv`fJ`p˂vXnZdQbtfpvJltvXnZdQbtfpvbdQZ|`JXQrZdQbt˂rXQltb`JXQrZdQbt˂rXQdrtAJpZHAvnXrXQvXnہJXQrvnXrXQvXnے`JXQHXnvˍvpfr˂p~HfrbdQvpfHlJtnXv`bdQZ|vpfHlJtnXv`ˁdrt˂pZlJtAJ`ےdQZ|˂pZlJtAJ`ےltdbے`Jv`fJ`ےvpfH˂pZHv`fJ`ےvpfHAbے`pfH~H~fZHAbpvnZ|rA~f`Ard|f~HdrtA~f`Ard|f~HAdQZ|HAbےrd|bHAZpdrtAJHAbےrd|bHAZprtAJlQrpZ~HfpbHAZp~f`Abے`~HfpbHAZp~f`JXQrf۝`v`vXnے`JXQXv`fJltvXnZdQbtfpvJltvXnZdQbtfpvdrtA`JXQrZdQbt˂rXQltb`JXQrZdQbt˂rXQtbdQHAbےvnXrXQvXnہJXQrvnXrXQvXnۉ˂pZHXnvˍvpfr˂pnXbdQZ|vpfHlJtnXv`bdQZ|vpfHlJtnXv`Jlt˂pZlJtAJ`ےdQZ|˂pZlJtAJ`ےZ|d`JXQrv`fJ`ےvpfH˂pZHv`fJ`ےvpfHAbے`pfH~H~fZHAbv`fdrtA~f`Ard|f~HdrtA~f`Ard|f~HbdQZ|HAbےrd|bHAZpdrtAJHAbےrd|bHAZprtAJl˂pZ~HfpbHAZp~f`Abے`~HfpbHAZp~f`JXQrf۝`v`vXnے`JXQ~HfpJltvXnZdQbtfpvJltvXnZdQbtfpvdrtA`JXQrZdQbt˂rXQltb`JXQrZdQbt˂rXQtbdQHAbےvnXrXQvXnہJXQrvnXrXQvXnۉ˂p`ZXnvˍvpfr˂pvnXbdQZ|vpfHlJtnXv`bdQZ|vpfHlJtnXv`Jl|d˂pZlJtAJ`ےdQZ|˂pZlJtAJ`ےZ|l`JXQrv`fJ`ےvpfH˂pZHv`fJ`ےvpfHQXb㉀pfH~H~fZHAbv`fdrAJ~f`Ard|f~HdrtA~f`Ard|f~HrtAJlHAbےrd|bHAZpdrtAJHAbےrd|bHAZptbnZHAb~HfpbHAZp~f`Abے`~HfpbHAZp~f`ۑpJAHrf۝`v`vXnے`JXQ~HXvtbdQZvXnZdQbtfpvJltvXnZdQbtfpvtbd`JXQrZdQbt˂rXQltb`JXQrZdQbt˂rXQvp`vے`JXvnXrXQvXnہJXQrvnXrXQvXn󙐂ˁ`ZXnvˍvpfr˂p`f~|drvpfHlJtnXv`bdQZ|vpfHlJtnXv`QZ|d˂pZlJtAJ`ےdQZ|˂pZlJtAJ`ےXnvQr˂pv`fJ`ےvpfH˂pZHv`fJ`ےvpfHQXb㉀p|drH~fZHAbHfpvtAJl璅~f`Ard|f~HdrtA~f`Ard|f~HrtAJlHAbےrd|bHAZpdrtAJHAbےrd|bHAZppfH~ZHAb~HfpbHAZp~f`Abے`~HfpbHAZp~f`ۑpJAHrQtJl`vXnے`JXQnXvtbdQZvXnZdQbtfpvJltvXnZdQbtfpvtd`JXQrZdQbt˂rXQltb`JXQrZdQbt˂rXQf`vے`JXvnXrXQvXnہJXQrvnXrXQvXn󙐉ۑtbAdZvpfr˂p`f~|drvpfHlJtnXv`bdQZ|vpfHlJtnXv`rtAJl瀉˂pZlJtAJ`ےdQZ|˂pZlJtAJ`ےXnvQr˂pv`fJ`ےvpfH˂pZHv`fJ`ےvpfHpJAHr|drH~fZHAےHfp`tAJbd~f`Ard|fHfpdrtA~f`Ard|fHfptbdQHAbےrd|bHAZpdtAJlHAbےrd|bHAZppfH~ZA`~HfpbHAZp~f`Aے`~HfpbHAZp~f`ˁ`ZQQtJl`vXn`JXQrf~HQZ|dvXnZdQbtvnJltvXnZdQbtvnZ|d`JXQrZdQbn˂rXQtbn`JXQrZdQbn˂rXQvpJXQrbtvnXrbdvXnJXQrbtvnXrbdvXnXb㉀ۑtbAdZvpfbtlfpvrtAJlr˂plJtrXQJ`bdQZ|r˂plJtrXQJ`prtAJl瀉˂pZXv`fJ`ےvpf˂pZXv`fJ`ےfH~lJtv`fQZ|dvpfHlJtv`fQZ|dvpfHpJAHr|drH~fJtAdnXv`tbdZHAbArd|HAZpdrtAZHAbArd|˂rXtbdQHAbے~HfbHAZpHf`HAbے~HfbHAZpf`vXAd|~HfprtAJl~f`Ad|~HfprtAJl~f`ˁ`pJQtJl`vXn|ZdQbf~HQZ|d`JXQZdQbt˂rXJlt`JXQZdQbtQJ`ےZ|lt`JXQrpvn˂rXQvXn`JXQrpvn˂rXQnvpZdQbtvnXtbdvXnZdQbtvnXtbdvXnAHr󙐂tbAdZvpftlJfpvrtAJlr˂plJtQJ`ےbdQZ|r˂plJtbHAZpbnۀ˂pZXv`fJ`ےvpfH˂pZXv`fJ`ےfH~lJtAv`fQZ|dvpfHlJtAv`fQZ|dvpfHˁ`ZQXb|drH~ftArd~HfbQZ|ZHAbArd|bHAZpdrtAZHAbArd|˂rXvpff`HAbے~HfbHAZp~f`HAbے~HfbHAZpf`pfrd|~HfprtAJl~f`rd|~HfprtAJl~f`㉀ۑpJQtJl`vXn|ZdQbpvndrtA`JXQZdQbt˂rXJlt`JXQZdQbtQJ`ےvXn`JXQrpvn˂rXQvXn`JXQrpvn˂rXQH~fZdQbtvnXtbdvXnZdQbtvnXtbdvXnAHr󙐂tbAdZvpftlJXv`fJltr˂plJtQJ`ےbdQZ|r˂plJtbHAXQvpfH˂pZXv`fJ`ےvpfH˂pZXv`fJ`ے`vXnlJtAv`fQZ|dvpfHlJtAv`fQZ|dvpfHˁ`ZQXA|drH~ftArd~HfbdQZ|ZHAbArd|bHAZpdrtAZHAbArd|J`ے~f`HAbے~HfbHAZp~f`HAbے~HfbHAZpvpfrd|~HfprtAJl~f`rd|~HfprtAJl~f`Hr󙐂ˁQtJl`vXn|ZdQbpvndrtA`JXQZdQbt˂rXJlt`JXQZdQbtbHAZpˍvXn`JXQrpvn˂rXQvXn`JXQrpvn˂rXQH~fZdQbtvnXtbdvXnZdQbtvnXtbdvXn`ZQXbtbAdZvpftlJXv`pJltr˂plJtQJ`ےbdQZ|r˂plJtrXQvpfH˂pZXv`fJ`ےvpfH˂pZXv`fJ`ے`vXHlJtAv`fQZ|dvpfHlJtAv`fQZ|dvpfHۑpJA|drH~ftArdvnrbQZdZHAbArd|bHAZpdrtAZHAbArd|J`ے~fvHAbے~HfbHAZp~f`HAbے~HfbHAZp~f`rd|~HfprtAJl~f`rd|~HfprtAJl~f`Hr󙐂ˁQtJl`vXn|ZdQbXQJ`prtAJl`JXQZdQbt˂rXJlt`JXQZdQbtbHAZp`nvp`JXQrpvn˂rXQvXn`JXQrpvn˂rXQvXnZdQbtvnXtbdvXnZdQbtvnXtbdvXn`ZQXbtbAdZvpftlJ˂rXQtbdQr˂plJtQJ`ےbdQZ|r˂plJtےbHfH~˂pZXv`fJ`ےvpfH˂pZXv`fJ`ےvpfHlJtAv`fQZ|dvpfHlJtAv`fQZ|dvpfH󀙐ˁ`Z|drH~ftArdJ`ےZ|dZHAbArd|bHAZpdrtAZHAbArd|AZp˂f`vXHAbے~HfbHAZp~f`HAbے~HfbHAZp~f`rd|~HfprtAJl~f`rd|~HfprtAJl~f`QXb㉀QtJl`vXn|ZdQbbHAZprtAJl`JXQZdQbt˂rXJlt`JXQZdQbtrXQJ`nvp`JXQrpvn˂rXQvXn`JXQrpvn˂rXQvXnZdQbtvnXtbdvXnZdQbtvnXtbdvXnۑpJAHrtbAdZvpftlJ˂rXQtbdQr˂plJtQJ`ےbdQZ|r˂plJtےbHfH~˂pZXv`fJ`ےvpfH˂pZXv`fJ`ےf`vlJtAv`fQZ|dvpfHlJtAv`fQZ|dvpfH󙐂ˁ`Z|drH~ftArdJ`ےZ|AJlZHAbArd|bHAZpdtAJlZHAbArd|AZp˂f`vnHAے`~HfbHAZp~f`HAے`~HfbHAZpXnvrd|HfpۙrtAJl~f`rd|HfpۙrtAJl~f`QXb㉀QtJl`vXn|ZdQbbHAXQJtb`JXQZdQb˂rXtb`JXQZdQb㉐bHAvpfHJXQrbpvn˂rbvXnJXQrbpvn˂rbpfH~ZdQbtvnrXtbdvXnrZdQbtvnrXtbdvXnے`XnvˍtbAdZr˂ptlJ`ےbnvpr˂pnXv`QJ`ےnvpr˂pnXv`Zp˂~f`tlJXv`fdQZ|vpfHtlJXv`fdQZ|lf`vlJtAQJ`ےQZ|d˂pZHlJtAQJ`ےQZ|dJXQrpfH~|drZHAbtArdHAZp˂fHf`ZHAbf~HbHAZpfHf`ZHAbf~HrXQJ`vXntAd|~HfdrtAJ~f`tAd|~HftbdQXnvrd|HAZp˙rtAJlAbے`rd|HAZp˙rtAJl˂pZHf۝`vQtJlے`JXQ|ZdQbrXQJvXn`JXQfpv˂rXvXn`JXQfpv㒐bHAvpfHZdQbtpvnltbvXnZdQbtpvnZ|dp`vXZdQbt炀rXQtbdJXQrZdQbt炀rXQtbdAbے`XnvˍtbAdZr˂ptlJ`ےbvpfHr˂pnXv`QJ`ےvpfHr˂pnXv`Zp˂~f`lJtAXv`fdQZ|vpfHlJtAXv`frtAJlnr˂lJtAJ`ےQZ|d˂pZHlJtAJ`ےQZ|dJXQrpfH~|drZHAbtArdHAZp`~f`ZHAbf~HbHAZp~f`ZHAbf~HrXQHAZpvXnvfrd|~HfdrtAJ~f`rd|~HftbdQpZAb`rd|bHAZp˙rtAJlAbے`rd|bHAZp˙rtAJl˂pZHf۝`vQtJlے`JXQ|ZdQbےbHAvXn`JXQfpv˂rXvXn`JXQfpv˂rXH~fZdQbtpvnltbvXnZdQbtpvnZ|dJXQrZdQbt炀rXQtbdJXQrZdQbt炀rXQtbdAXQrXnvˍtbAdZr˂ptlJZp˂vpfHr˂pnXv`QJ`ےvpfHr˂pnXv`QJ`ے`vXnlJtAXv`fdQZ|vpfHlJtAXv`ftbdQZ˂pZHlJtAJ`ےQZ|d˂pZHlJtAJ`ےQZ|dpZHApfH~|drQt-------------------................................... \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv32_3.dat b/vendor/endroid/qr-code/assets/data/qrv32_3.dat new file mode 100644 index 000000000..5487dd475 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv32_3.dat @@ -0,0 +1,289 @@ +}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqrmmmnmnmnlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTST}~}~}~}~{|{|{|{|yxwxwxwxuvuvuvuvststststqrqrqrqrmnmnmnmnlklklklkhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTST}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststqrqrqrqpmnmnmnmnlklklklkhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWVUSTSTSTST}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststopopopopmnmnmnmnlklklklkhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTST}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststopopopopmnmnmnmnlklklklkhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTST}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststopopopopmnmnmmmmlklklklkhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSSSSSSTS}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststopopopopmmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTS}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststopopopopnmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTS}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststopopopopnmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTS}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststopopopopnmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTS}~}~}~}~{zyzyzyzwxwxwxwxuvuvuvuvststststopopopopnmnmnmnmjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSQRQRQRQR}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopnmnmmmmmjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSSSSSTSTQRQRQRQR}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTSTQRQRQRQR}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTSTQRQRQRQR}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTSTQRQRQRQR}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTSTQRQRQRQR}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmnmnmnjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTSTQRQRQRQR}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopmnmmmmmmjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSSSSSTQRQRQRQR}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvststststopopopopnmnmnmnmjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTSRQRQRQRQR}|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvsrqrqrqropopopoplklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUQRQRQRQRQRQRQRQP{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopoplklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUQRQRQRQROPOPOPOP{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopoplklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUQRQRQRQROPOPOPOP{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopoplklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUQRQRQRQROPOPOPOP{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopoplklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUQRQRQRQROPOPOPOP{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopoplklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUQRQRQRQROPOPOPOP{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopoplklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUQRQRQRQROPOPOPOP{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopoplklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUQRQRQRQROPOPOPOP{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopoplklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUQRQRQRQROPOPOPOP~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxutstststqrqrqrqropopopoplklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUQRQRQRQROPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqropopopoplklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUQRQRQRQROPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqropopopoplklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUQRQRQRQROPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqropoponmnlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUTSTSQRQRQRQROPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmmmmlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSSSSSQRQRQRQROPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTSTQRQRQRQROPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTSTQRQRQRQROPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTSTQRQRQRQROPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrmnmnmnmnlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTSTQRQRQRQROPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzwvuvuvuvststststqrqrqrqrmnmnmnmnlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTSTQRQRQRQROPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqrmnmnmnmmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWSTSSSSSSQRQRQRQROPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqrmmmmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSQRQRQRQROPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqrnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSQRQRQRQROPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqrnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSQRQRQRQROPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqrnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSQRQRQRQROPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqrnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSQRQRQRQROPOPOPOP}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststqrqrqrqrnmnmnmmmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWTSSSSSSTQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + +OPOPOPOPMNMNMNMLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCB?@?@?@?@=>=>=>=>9:9:9:9:8787878765656565434343210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)('&%&%&%&%$#$#$#$#      + + + +OPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:8787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +OPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:99998787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#      + + + +OPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>99:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +OPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +OPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +OPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +OPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +OPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>:9:999998787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#       + + + +OPOPOPONKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:8787878765656543212121210/0/0/0/.-.-.-.-,+,+,+*)('('('('&%&%&%&%$#$#$#$#         + + + +MNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:8787878743434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#         + + + +MNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=<;<9:9:9:9:8787878743434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#"!"!         + + + +MNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:8787878743434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +MNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:8787878743434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + +MNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9999998787878743434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!       + + + +MNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<:9:9:9:98787878743434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +MNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<:9:9:9:98787878743434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +MNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<:9:9:9:98787878743434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +MNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<:9:9:9:98787876543434343212121210/0/0/0/.-.-.-,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + MNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<:9:9:9:96565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        MNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<:999999:6565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        MNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:6565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         MNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:6565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         MNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:6565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         MNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:6565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         MNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:6565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!         MNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<999999:96565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!       MNMNMNMNKLKLKLKLIJIJIJIHEFEFEFEFCDCDCDCDABABABAB?@?@?@?>;<;<;<;<:9:9:9876565656543434343212121210/0/0/.-,+,+,+,+*)*)*)*)('('('('&%&%&%$#"!"!"!"!       + +MNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<87878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +MNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<87878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +MNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<87878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +MNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<87878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +MNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<87878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +MNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<87878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +MNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<87878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +MNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<87878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +MNMNMNMNKLKLKLKJGHGHGHGHEFEFEFEFCDCDCDCDABABABA@=>=>=>=>;<;<;<;<8787878765656565434343432121210/.-.-.-.-,+,+,+,+*)*)*)*)('('('&%$#$#$#$#"!"!"!"!   + + + +MNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"! + + + +MNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"! + + + +MNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"! + + + +MNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;:9:9:8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!    + + + +MNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:99999:8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#   + + + +MNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + +MNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + +55667788]]\\[[ZZhiijjkklqppoonnmDEEFFGGH)((''&&% !!""##$MLLKKJJI<=>??@@A((''&&%%!!""##$$LLKKJJIIiijjkkllppoonnmmEEFFGGHH SRRQQPPO99::;;<<YYXWVUTSlmmnnoopmllkkjjiHIIJJKKL%$$##""!$%%&&''(IHHGGFFEABBCCDDE$$##""!!%%&&''((HHGGFFEEmmnnooppllkkjjiiIIJJKKLL + + ONNMMLLK==>>??@@SRRQQPPOpqqrrsstihhggffeLMMNNOOP! ())**++,EDDCCBBAEFFGGHHI ))**++,,DDCCBBAAqqrrsstthhggffeeMMNNOOPPKJJIIHHGAABBCCDDONNMMLLKtuuvvwwx + + eddccbbaPQQRRSST,--..//0A@@??>>=IJJKKLLM--..//00@@??>>==uuvvwwxx + + ddccbbaaQQRRSSTT GFFEEDDC~~}}EEFFGGHH KJJIIHHGxyyzz{{| a``__^^]TUUVVWWX01122334=<<;;::9MNNOOPPQ11223344<<;;::99yyzz{{|| ``__^^]]UUVVWWXX + + CBBAA@@?||{{zzyyIIJJKKLL + + GFFEEDDC|}}~~]\\[[ZZYXYYZZ[[\~~}4556677898877665QRRSSTUV~~}}5566778888776655}}~~\\[[ZZYYYYZZ[[\\?>=<;:99xxwwvvuuMMNNOOPP + + CBBAA@@?YXXWWVVU\]]^^__` }||{{zzy899::;;<54433221~~}}||{WXYYZZ[[ ||{{zzyy99::;;<<44332211XXWWVVUU]]^^__``88776655ttssrrqqQQRRSSTT?>=<;:99UTTSSRRQ`aabbccd + + yxxwwvvu<==>>??@100//..-{zzyyxxw\\]]^^__ + + xxwwvvuu==>>??@@00//..--TTSSRRQQaabbccdd44332211ppoonnmmUUVVWWXX88776655 QPPOONNMdeeffggh uttssrrq@AABBCCD-,,++**)wvvuutts``aabbccttssrrqqAABBCCDD,,++**)) PPOONNMMeeffgghh00//..--llkkjjiiYYZZ[[\\44332211 !!""##$MLLKKJJIhiijjkklqppoonnmDEEFFGGH)((''&&%smmllkkjddeeffggppoonnmmEEFFGGHH((''&&%%!!""##$$LLKKJJIIiijjkkll%%&&,,++**))hhggffee]]^^__``00//..--$%%&&''(IHHGGFFElmmnnoopmllkkjjiHIIJJKKL%$$##""!jiihhggfhhiijjkkllkkjjiiIIJJKKLL$$##""!!%%&&''((HHGGFFEEmmnnoopp''(())**((''&&%%ijjkkllmddccbbaaaabbccdd%%&&,,++**))())**++,EDDCCBBApqqrrsstihhggffeLMMNNOOP! feeddccbllmmnopqhhggffeeMMNNOOPP ))**++,,DDCCBBAAqqrrsstt++,,--..$#"! mnnooppq``__^^]]eeffgghh''(())**((''&&%%,--..//0A@@??>>=tuuvvwwx + + eddccbbaPQQRRSSTbaa``__^rssttuuv + + ddccbbaaQQRRSSTT--..//00@@??>>==uuvvwwxx//001122qrrssttu\\[[ZZYYiijjkkll++,,--..$#"! 01122334=<<;;::9xyyzz{{| a``__^^]TUUVVWWX^]]\\[[Zvwwxxyyz ``__^^]]UUVVWWXX11223344<<;;::99yyzz{{||33445566uvvwwxxyXXWWVVUUmmnnoopp//001122~~}4556677898877665|}}~~]\\[[ZZYXYYZZ[[\ZYYSSRRQz{{||}}~\\[[ZZYYYYZZ[[\\~~}}5566778888776655}}~~778899??yzz{{||}TTSSRRQQqqrrsstt33445566}||{{zzy899::;;<54433221YXXWWVVU\]]^^__` QPPOONNM~XXWWVVUU]]^^__`` ||{{zzyy99::;;<<44332211@@AABBCC}~~PPOONNMMuuvvwwxx778899??yxxwwvvu<==>>??@100//..-UTTSSRRQ`aabbccd + + MLLKKJJITTSSRRQQaabbccdd + + xxwwvvuu==>>??@@00//..--DDEEFFGG +LLKKJJIIyyzz{{||@@AABBCCuttssrrq@AABBCCD-,,++**) QPPOONNMdeeffggh IHHGGFFE PPOONNMMeeffgghhttssrrqqAABBCCDD,,++**))HHIIJJKK + HHGGFFEE}}~~DDEEFFGG +qppoonnmDEEFFGGH)((''&&% !!""##$MLLKKJJIhiijjkklEDDCCBBA!!""##$$LLKKJJIIiijjkkllppoonnmmEEFFGGHH((''&&%%LLMMNNOODDCCBBAAHHIIJJKK + mllkkjjiHIIJJKKL%$$##""!$%%&&''(IHHGGFFElmmnnoopA@@??998%%&&''((HHGGFFEEmmnnooppllkkjjiiIIJJKKLL$$##""!!PPQQRRSS@@??>>==LLMMNNOOihhggffeLMMNNOOP! ())**++,EDDCCBBApqqrrsst + + 87766554))**++,,DDCCBBAAqqrrsstthhggffeeMMNNOOPP YYZZ[[\\ <<;;::99PPQQRRSS + + eddccbbaPQQRRSST,--..//0A@@??>>=tuuvvwwx 43322110--..//00@@??>>==uuvvwwxx + + ddccbbaaQQRRSSTT]]^^__`` + + 88776655YYZZ[[\\ a``__^^]TUUVVWWX01122334=<<;;::9xyyzz{{|0//..--,11223344<<;;::99yyzz{{|| ``__^^]]UUVVWWXX~~}}||aabbccdd 44332211]]^^__``]\\[[ZZYXYYZZ[[\~~}4556677898877665|}}~~,++**))(~~}}5566778888776655}}~~\\[[ZZYYYYZZ[[\\{{zzyyxxeeffgghh00//..--aabbccddYXXWWVVU\]]^^__` }||{{zzy899::;;<54433221(''&&%%||{{zzyy99::;;<<44332211XXWWVVUU]]^^__`` wwvvuuttiijjkkll~~}}|,,++**))eeffgghhUTTSSRRQ`aabbccd + + yxxwwvvu<==>>??@100//..-%xxwwvvuu==>>??@@00//..--TTSSRRQQaabbccdd + + ssmmllkkmmssttuu|{{zzyyx((''&&%%~~}}||iijjkkll QPPOONNMdeeffggh uttssrrq@AABBCCD-,,++**)%&&''(()ttssrrqqAABBCCDD,,++**)) PPOONNMMeeffgghhjjiihhggvvwwxxyy !xwwvvuut$$##""!!{{zzyyxxmmssttuu !!""##$MLLKKJJIhiijjkklqppoonnmDEEFFGGH)((''&&%)**++,,-ppoonnmmEEFFGGHH((''&&%%!!""##$$LLKKJJIIiijjkkllffeeddcczz{{||}}!""##$$%tssrrqqp wwvvuuttvvwwxxyy$%%&&''(IHHGGFFElmmnnoopmllkkjjiHIIJJKKL%$$##""!-..//001llkkjjiiIIJJKKLL$$##""!!%%&&''((HHGGFFEEmmnnooppbbaa``__~~%&&''(()poonnmmlssmmllkkzz{{||}}())**++,EDDCCBBApqqrrsstihhggffeLMMNNOOP! 12233445 hhggffeeMMNNOOPP ))**++,,DDCCBBAAqqrrsstt^^]]\\[[)**++,,-lkkjjiihjjiihhgg~~,--..//0A@@??>>=tuuvvwwx + + eddccbbaPQQRRSST56677889 + + ddccbbaaQQRRSSTT--..//00@@??>>==uuvvwwxx + + ZZYYSSRR-..//001hggffeedffeeddcc01122334=<<;;::9xyyzz{{| a``__^^]TUUVVWWX9??@@AAB``__^^]]UUVVWWXX11223344<<;;::99yyzz{{|| QQPPOONN12233445dccbbaa` bbaa``__4556677898877665|}}~~]\\[[ZZYXYYZZ[[\~~}BCCDDEEF\\[[ZZYYYYZZ[[\\~~}}5566778888776655}}~~MMLLKKJJ56677889`__^^]]\ + + ^^]]\\[[899::;;<54433221YXXWWVVU\]]^^__` }||{{zzyFGGHHIIJ + + XXWWVVUU]]^^__`` ||{{zzyy99::;;<<44332211IIHHGGFF9::;;<<=\[[ZZYYX + + ZZYYSSRR<==>>??@100//..-UTTSSRRQ`aabbccd + + yxxwwvvuJKKLLMMN TTSSRRQQaabbccdd + + xxwwvvuu==>>??@@00//..--EEDDCCBB=>>??@@AXWWVVUUT QQPPOONN@AABBCCD-,,++**) QPPOONNMdeeffggh uttssrrqNOOPPQQRPPOONNMMeeffgghhttssrrqqAABBCCDD,,++**)) AA@@??99~~}}|ABBCCDDETSSRRQQPMMLLKKJJDEEFFGGH)((''&&% !!""##$MLLKKJJIhiijjkklqppoonnmRSSYYZZ[LLKKJJIIiijjkkllppoonnmmEEFFGGHH((''&&%%!!""##$$88776655|{{zzyyxEFFGGHHIPOONNMMLIIHHGGFF~~}}|HIIJJKKL%$$##""!$%%&&''(IHHGGFFElmmnnoopmllkkjji[\\]]^^_HHGGFFEEmmnnooppllkkjjiiIIJJKKLL$$##""!!%%&&''((44332211xwwvvuutIJJKKLLMLKKJJIIHEEDDCCBB|{{zzyyxLMMNNOOP! ())**++,EDDCCBBApqqrrsstihhggffe_``aabbc DDCCBBAAqqrrsstthhggffeeMMNNOOPP ))**++,,00//..--tssrqponMNNOOPPQHGGFFEED AA@@??99xwwvvuutPQQRRSST,--..//0A@@??>>=tuuvvwwx + + eddccbbacddeeffg!"#$%%&&@@??>>==uuvvwwxx + + ddccbbaaQQRRSSTT--..//00,,++**))mmllkkjjQRRSSTTUDCCBBAA@!!""##$$88776655tssrqponTUUVVWWX01122334=<<;;::9xyyzz{{| a``__^^]ghhiijjk''(())**<<;;::99yyzz{{|| ``__^^]]UUVVWWXX11223344((''&&%%iihhggffUVVWWXXY@??>>==<%%&&''((44332211mmllkkjjXYYZZ[[\~~}4556677898877665|}}~~]\\[[ZZYkllmmsst++,,--..88776655}}~~\\[[ZZYYYYZZ[[\\~~}}55667788eeddccbbYZZ[[\\]<;;::998))**++,,00//..--iihhggff\]]^^__` }||{{zzy899::;;<54433221YXXWWVVUtuuvvwwx//00112244332211XXWWVVUU]]^^__`` ||{{zzyy99::;;<<aa``__^^]^^__``a87766554--..//00,,++**))eeddccbb`aabbccd + + yxxwwvvu<==>>??@100//..-UTTSSRRQxyyzz{{|3344556600//..--TTSSRRQQaabbccdd + + xxwwvvuu==>>??@@]]\\[[ZZabbccdde4332211011223344((''&&%%aa``__^^deeffggh uttssrrq@AABBCCD-,,++**) QPPOONNM|}}~~778899:;,,++**)) PPOONNMMeeffgghhttssrrqqAABBCCDDYYXWVUTSeffgghhi0//..--,,++**))( !POONNMMLeffgghhitssrrqqpOPPQQRRSOONNMMLLffgghhiissrrqqppBBCCDDEE++**))(( !!@@??9988~~}}||{BCCDDEEF+**))((' !!"ONNMMLLKfgghhiijsrrqqppoBCCDDEEF A@@??>>=(''&&%%$!""##$$%LKKJJIIHijjkkllmpoonnmmlSYYZZ[[\KKJJIIHHjjkkllmmoonnmmllFFGGHHII''&&%%$$""##$$%%77665544{zzyyxxwFGGHHIIJ'&&%%$$#"##$$%%&KJJIIHHGjkkllmmnonnmmllkFGGHHIIJ + + +=<<;;::9$##""!! %&&''(()HGGFFEEDmnnooppqlkkjjiih\]]^^__`GGFFEEDDnnooppqqkkjjiihhJJKKLLMM##""!! &&''(())33221100wvvuuttsJKKLLMMN#""!! &''(())*GFFEEDDCnooppqqrkjjiihhgJKKLLMMN + 98877665 )**++,,-DCCBBAA@qrrssttu hggffeed`aabbccd !"CCBBAA@@rrssttuu ggffeeddNNOOPPQQ**++,,--//..--,,srqponmmNOOPPQQR*++,,--.CBBAA@@?rssttuuv +gffeeddcNOOPPQQR54433221-..//001@??>>==>==<>==<<;vwwxxyyz + cbbaa``_RSSTTUUV100//..-12233445<;;::998yzz{{||} `__^^]]\hiijjkkl(())**++;;::9988zz{{||}}__^^]]\\VVWWXXYY22334455''&&%%hhggffeeVWWXXYYZ23344556;::99887z{{||}}~_^^]]\\[VWWXXYYZ-,,++**)~~}}|5667788987766554}~~\[[ZZYYXlmmssttu,,--..//77665544~~[[ZZYYXXZZ[[\\]]~~}}||66778899ddccbbaaZ[[\\]]^~~}}||{6778899:76655443~[ZZYYXXWZ[[\\]]^)((''&&% |{{zzyyx9::;;<<=43322110XWWVVUUTuvvwwxxy0011223333221100WWVVUUTT^^__``aa {{zzyyxx::;;<<==``__^^]]^__``aab {zzyyxxw:;;<<==>3221100/WVVUUTTS^__``aab%%&&'%$$##""! + + xwwvvuut=>>??@@A0//..--,TSSRRQQPyzz{{||}44556677//..--,,SSRRQQPPbbccddee + + wwvvuutt>>??@@AA\\[[ZZYYbccddeef + + wvvuutts>??@@AAB/..--,,+SRRQQPPObccddeef'(())**+! tssrrqqpABBCCDDE,++**))( !POONNMML}~~8899:;<=++**))(( !!OONNMMLLffgghhiissrrqqppBBCCDDEEXWVUTSSRfgghhiijsrrqqppoBCCDDEEF+**))((' !!"ONNMMLLKfgghhiij+,,--../poonnmmlEFFGGHHI(''&&%%$!""##$$%LKKJJIIH>??@@AAB''&&%%$$""##$$%%KKJJIIHHjjkkllmmoonnmmllFFGGHHII RQQPPOONjkkllmmnonnmmllkFGGHHIIJ'&&%%$$#"##$$%%&KJJIIHHGjkkllmmn/0011223lkkjjiihIJJKKLLM$##""!! %&&''(()HGGFFEEDBCCDDEEF##""!! &&''(())GGFFEEDDnnooppqqkkjjiihhJJKKLLMM + + NMMLLKKJnooppqqrkjjiihhgJKKLLMMN#""!! &''(())*GFFEEDDCnooppqqr34455667 hggffeedMNNOOPPQ )**++,,-DCCBBAA@FGGHHIIJ**++,,--CCBBAA@@rrssttuu ggffeeddNNOOPPQQJIIHHGGFrssttuuv +gffeeddcNOOPPQQR*++,,--.CBBAA@@?rssttuuv78899??@ + + dccbbaa`QRRSSTTU-..//001@??>>==>==<>==<<;vwwxxyyz@AABBCCD + + `__^^]]\UVVWWXXY12233445<;;::998NOOPPQQR22334455;;::9988zz{{||}}__^^]]\\VVWWXXYY BAA@@??>z{{||}}~_^^]]\\[VWWXXYYZ23344556;::99887z{{||}}~DEEFFGGH + + \[[ZZYYXYZZ[[\\]~~}}|5667788987766554~RSSTUVWX~~}}||6677889977665544~~[[ZZYYXXZZ[[\\]]=<;:9988~[ZZYYXXWZ[[\\]]^~~}}||{6778899:76655443~HIIJJKKL XWWVVUUT]^^__``a |{{zzyyx9::;;<<=43322110~}}||{{zYYZZ[[\\ {{zzyyxx::;;<<==33221100WWVVUUTT^^__``aa77665544WVVUUTTS^__``aab {zzyyxxw:;;<<==>3221100/LMMNNOOPTSSRRQQPabbccdde + + xwwvvuut=>>??@@A0//..--,zyyxxwwv]]^^__`` + + wwvvuutt>>??@@AA//..--,,SSRRQQPPbbccddee33221100SRRQQPPObccddeef + + wvvuutts>??@@AAB/..--,,+PQQRRSSY !POONNMMLeffgghhitssrrqqpABBCCDDE,++**))(vuuttssmaabbccddssrrqqppBBCCDDEE++**))(( !!OONNMMLLffgghhii//..--,, !!"ONNMMLLKfgghhiijsrrqqppoBCCDDEEF+**))(('YZZ[[\\]!""##$$%LKKJJIIHijjkkllmpoonnmmlEFFGGHHI(''&&%%$mllkkjjieeffgghhoonnmmllFFGGHHII''&&%%$$""##$$%%KKJJIIHHjjkkllmm%%&&''++**))(("##$$%%&KJJIIHHGjkkllmmnonnmmllkFGGHHIIJ'&&%%$$#]^^__``a %&&''(()HGGFFEEDmnnooppqlkkjjiihIJJKKLLM$##""!! ihhggffeiijjkkllkkjjiihhJJKKLLMM##""!! &&''(())GGFFEEDDnnooppqq(())**++''&&%%$#&''(())*GFFEEDDCnooppqqrkjjiihhgJKKLLMMN#""!! abbccdde !!""##$)**++,,-DCCBBAA@qrrssttu hggffeedMNNOOPPQ eddccbbammnopqrs ggffeeddNNOOPPQQ**++,,--CCBBAA@@rrssttuu,,--..//"! *++,,--.CBBAA@@?rssttuuv +gffeeddcNOOPPQQReffgghhi$%%&&''(-..//001@??>>==>==<>==<<;vwwxxyyz + cbbaa``_RSSTTUUV~~}}||{ijjkkllm())**++,12233445<;;::998yzz{{||} `__^^]]\UVVWWXXY]\\[[ZZYwxxyyzz{__^^]]\\VVWWXXYY22334455;;::9988zz{{||}}4455667723344556;::99887z{{||}}~_^^]]\\[VWWXXYYZ{zzyyxxwmssttuuv,--..//05667788987766554}~~\[[ZZYYXYZZ[[\\]YSSRRQQP{||}}~~[[ZZYYXXZZ[[\\]]~~}}||6677889977665544~~8899??@@~~}}||{6778899:76655443~[ZZYYXXWZ[[\\]]^wvvuuttsvwwxxyyz011223349::;;<<=43322110XWWVVUUT]^^__``a POONNMMLWWVVUUTT^^__``aa {{zzyyxx::;;<<==33221100AABBCCDD {zzyyxxw:;;<<==>3221100/WVVUUTTS^__``aab smmllkkjz{{||}}~45566778=>>??@@A0//..--,TSSRRQQPabbccdde + + LKKJJIIHSSRRQQPPbbccddee + + wwvvuutt>>??@@AA//..--,,EEFFGGHH + + wvvuutts>??@@AAB/..--,,+SRRQQPPObccddeef + + jiihhggf~899::;;>??@EFFGGHHI(''&&%%$!""##$$%LKKJJIIHijjkkllmDCCBBAA@""##$$%%KKJJIIHHjjkkllmmoonnmmllFFGGHHII''&&%%$$MMNNOOPPonnmmllkFGGHHIIJ'&&%%$$#"##$$%%&KJJIIHHGjkkllmmnbaa``__^@AABBCCDIJJKKLLM$##""!! %&&''(()HGGFFEEDmnnooppq @??99887&&''(())GGFFEEDDnnooppqqkkjjiihhJJKKLLMM##""!! QQRRSSYYkjjiihhgJKKLLMMN#""!! &''(())*GFFEEDDCnooppqqr^]]\\[[Z~~}DEEFFGGHMNNOOPPQ )**++,,-DCCBBAA@qrrssttu + + 76655443**++,,--CCBBAA@@rrssttuu ggffeeddNNOOPPQQZZ[[\\]] +gffeeddcNOOPPQQR*++,,--.CBBAA@@?rssttuuv +ZYYSSRRQ}||{{zzyHIIJJKKLQRRSSTTU-..//001@??>>==>==<>==<<;vwwxxyyz + QPPOONNMyxxwwvvuLMMNNOOPUVVWWXXY12233445<;;::998yzz{{||}/..--,,+22334455;;::9988zz{{||}}__^^]]\\VVWWXXYY~~}}||{{bbccddee_^^]]\\[VWWXXYYZ23344556;::99887z{{||}}~MLLKKJJIuttssrrqPQQRRSSTYZZ[[\\]~~}}|5667788987766554}~~+**))(('~~}}||6677889977665544~~[[ZZYYXXZZ[[\\]]zzyyxxwwffgghhii[ZZYYXXWZ[[\\]]^~~}}||{6778899:76655443~IHHGGFFEqppoonnmTUUVVWWX]^^__``a |{{zzyyx9::;;<<=43322110'&&%%{{zzyyxx::;;<<==33221100WWVVUUTT^^__``aa vvuuttssjjkkllmmWVVUUTTS^__``aab {zzyyxxw:;;<<==>3221100/EDDCCBBAmllkkjjiXYYZZ[[\abbccdde + + xwwvvuut=>>??@@A0//..--,%%&wwvvuutt>>??@@AA//..--,,SSRRQQPPbbccddee + + mmllkkjjssttuuvvSRRQQPPObccddeef + + wvvuutts>??@@AAB/..--,,+A@@??998ihhggffe\]]^^__`effgghhitssrrqqpABBCCDDE,++**))(&''(())*ssrrqqppBBCCDDEE++**))(( !!OONNMMLLffgghhiiiihhggffwwxxyyzz !!"ONNMMLLKfgghhiijsrrqqppoBCCDDEEF+**))((' !!"87766554eddccbba`aabbccdijjkkllmpoonnmmlEFFGGHHI(''&&%%$*++,,--.oonnmmllFFGGHHII''&&%%$$""##$$%%KKJJIIHHjjkkllmmeeddccbb{{||}}~~"##$$%%&KJJIIHHGjkkllmmnonnmmllkFGGHHIIJ'&&%%$$#"##$$%%&43322110a``__^^]deeffgghmnnooppqlkkjjiihIJJKKLLM$##""!! .//00112kkjjiihhJJKKLLMM##""!! &&''(())GGFFEEDDnnooppqqaa``__^^&''(())*GFFEEDDCnooppqqrkjjiihhgJKKLLMMN#""!! &''(())*0//..--,]\\[[ZZYhiijjkklqrrssttu hggffeedMNNOOPPQ 23344556 +ggffeeddNNOOPPQQ**++,,--CCBBAA@@rrssttuu ]]\\[[ZZ*++,,--.CBBAA@@?rssttuuv +gffeeddcNOOPPQQR*++,,--.,++**))(YXXWWVVUlmmnnoopuvvwwxxy + + dccbbaa`QRRSSTTU6778899? + ccbbaa``RRSSTTUU..//0011??>>==<>==<<;vwwxxyyz + cbbaa``_RSSTTUUV.//00112(''&&%%UTTSSRRQpqqrrsstyzz{{||} `__^^]]\UVVWWXXY?@@AABBC__^^]]\\VVWWXXYY22334455;;::9988zz{{||}}PPOONNMM23344556;::99887z{{||}}~_^^]]\\[VWWXXYYZ23344556QPPOONNMtuuvvwwx}~~\[[ZZYYXYZZ[[\\]~~}}|CDDEEFFG [[ZZYYXXZZ[[\\]]~~}}||6677889977665544~~LLKKJJII6778899:76655443~[ZZYYXXWZ[[\\]]^~~}}||{6778899:MLLKKJJIxyyzz{{|XWWVVUUT]^^__``a |{{zzyyxGHHIIJJK + + WWVVUUTT^^__``aa {{zzyyxx::;;<<==33221100HHGGFFEE:;;<<==>3221100/WVVUUTTS^__``aab {zzyyxxw:;;<<==>IHHGGFFE|}}~~TSSRRQQPabbccdde + + xwwvvuutKLLMMNNO SSRRQQPPbbccddee + + wwvvuutt>>??@@AA//..--,,DDCCBBAA>??@@AAB/..--,,+SRRQQPPObccddeef + + wvvuutts>??@@AABEDDCCBBAbdQZ|H~fHAbے`f~Zp˂Jltے`JX|ZdQfpvZp˂f`vXے`JX|ZdQrQJ`ےJlt`vXn|ZdQbfpvp˂rltbے`JXQ|ZdQbpvnQZ|ddrtA`vXn`JXQrHfvnXrXQJ`bnvpQr˂pbtlnXv`rbdQZ|nvpQr˂pbtl|bHAZpbdQZ|r˂ptlJnXv`XQJ`ےnvpr˂ptlJXv`prtAJlJltvpf˂pZv`fbHAfHˑZHAbJtArdf~HdrtfH~ˑZHAbZdQb˂rXdrtAZHAbtArdf~HbHAZfHfZHAbtArdvnrtbdbdQZ|H~fHAbے~HfpZp˂f`vXے`JX|ZdQfpvAJltf`vXے`JXnXv`pQJ`ےJltے`JXQ|ZdQbfpvp˂r`vXnے`JXQ|ZdQbXQJ`pQZ|ddrtA`vXn`JXQrvnXrXQJ`nvpQr˂pbtlnXv`bdQZ|nvpQr˂pvnXbHAZpbdQZ|r˂ptlJnXv`XQJ`ےvpfr˂ptlJ˂rXQrtAJlJltvpf˂p|v`fbHAfH~ˑZHAbJtArdf~HdrtfH~ˑZHAbv`f˂rQJdrtAZHAbtArdf~HbHAZH~fZHAbtArdJ`ےbQZ|bdQZ|H~fZdQbt~HfpZp˂f`vXے`JX|ZdQfpvAJltf`vXے`JX~HfpbHAJltے`JXQ|ZdQbfpvp˂r`vXnے`JXQ|ZdQbbHAZpdrtAdrtA`vXnlJtAvnv`rXQJ`nvpQr˂pbtlnXv`bdQZ|nvpQr˂pvnXZp˂bdQZ|r˂ptlJnXv`XQJ`ےvpfr˂ptlJ˂rXQJltJltvpfrd|f~HbHAfH~ˑZHAbJtArdfHdrtfH~ˑZHAbv`frXQJ`dtAJZHAbtArdf~HbHAZH~fZHAbtArdJ`ےbdQZ|bdQZ|H~fZdQbtfpvZp˂f`vXے`JX|ZdQfpvAJltf`vXے`JXnXےbHAltbے`JXQ|ZdQbfpvp˂r`vXnے`JXQ|ZdQbbHAXQJdrtAdrtA`vXnlJtAnXv`rbdQZ|nvpQr˂pbtlnrXQJ`bdQZ|nvpQr˂pv`fZp˂nvpr˂ptlJnXv`bdQZ|vpfr˂ptlJ`ےbJltvXnJltvpfrdtf~HdrtfH~ˑZHAbJtArdےHAdrtfH~ˑZHAb~HfprXQJfHfZHAbtArdf~HdrtAH~fZHAbtArdHAZp˂bQZdvpfHbdQZ|H~flJtArfpvAJltf`vXے`JX|ZdQZp˂AJltf`vXے`JXvnXbHAZp`vXnے`JXQ|ZdQbfpvJlt`vXnے`JXQ|ZdQbrXQJrtAJl~f`drtA`vXnd|ZnvfbdQZ|nvpQr˂pbtlrXQJ`ۉbdQZ|nvpQr˂pv`f󂀉rXQvpfr˂ptlJnXv`bdQZ|vpfr˂ptlJ`ےbtbdQvXnJltvpfdQbt~HfpہdrtfH~ˑZHAbJtArdbHAdrtfH~ˑZHAb~HXv`J`ےH~fZHAbtArdf~HdrtAH~fZHAbtArdHAZp`Z|dvpfHbdQZ|H~flJtArvnXAJltf`vXے`JX|ZdQZp˂AJltf`vXے`JXf~HbHAZp`vXnے`JXQ|ZdQbfpvJlt`vXnے`JXQ|ZdQbےbHArtAJl~f`drtA`vXnd|lv`fbdQZ|nvpQr˂pbtlrXQJ`ۉbdQZ|nvpQr˂pfpvrXQvpfr˂ptlJnXv`bdQZ|vpfr˂ptlJZp˂tbdQvXnJltvpfJtArd~HfpہdrtfH~ˑZHAbJtArdbHAdrtfH~ˑZHAۅnXv`J`bAZH~fZHAbtArdfHfdrtAH~fZHAbtArdrXQJ`Z|AJlvpfHbdQZ|H~f|ZdQvnXAJltf`vXے`JX|ZdQZp˂AJltf`vX`JXQf~Hp˂r`vXnے`JXQ|ZdQbpvnJlt`vXnے`JXQ|ZdQbےbHAtb~f`drtA`vXnbtlv`frbdQZ|nvpQr˂pbnXv`rXQJ`ۉbdQZ|nvprbtlfp`bdQZ|vpfr˂ptlJrXQJ`bdQZ|vpfr˂pnXv`Zp˂nvpvXnJltvpfJtArdQJHAdrtfH~ˑZHAbf~HbHAdrtfH~ˑ|ZdQf~HdrtAH~fZHAbtArdےHAZdrtAH~fZHAbpvnbHAZfHf`r˂pbdQZ|H~f|ZdQZp˂AJltf`vXے`JXfpvZp˂AJltf`vXbtlfpvJlt`vXnے`JXQ|ZdQbp˂rJlt`vXnے`JXQXv`fp˂rvXnZHAbdrtA`vXntArdrXQJ`ۉbdQZ|nvpQr˂pnXv`rXQJ`ۉbdQZ|nvpJtArdnXv`bdQZ|vpfr˂ptlJXQJ`ےbdQZ|vpfr˂p~HfXQJ`ےvpfH`JXQJltr˂p|ZdQbbHAdrtfH~ˑZHAbf~HbHAdrtfH~˂|ZdQf~HdrtAH~fZHAbtArdbHAZdrtAH~fZHAbpvnbHAZ~f`r˂pbdQZ|`JXQrtlJZp˂AJltf`vXے`JXfpvZp˂AJltf`vXbtlfpvJlt`vXnے`JXQ|ZdQbp˂rJlt`vXnے`JXQXv`fp˂rvXnZHAbdrtA˂pZtArdrXQJ`ۉbdQZ|nvpQr˂pnXv`rXQJ`ۉbdQZ|nvpJtArdt~HfpbdQZ|vpfr˂ptlJXQJ`ےbdQZ|vpfr˂pnXXQHAZpvpfH`JXQJltHAbے|ZdQbbHAdrtfH~ˑZHAۍf~HbHAdrtfH~ˉlJtvnXdrtAH~fZHAbtArdbHAZdrtAH~fZHAےv`f˂rXQ~f`r˂pbdQZ|`JXQrtd|Zp˂AJltf`vX`JXQfpvZp˂AJltf`vXArd|v`fJlt`vXnے`JXQ|ZdQbp˂rJlt`vXn`JXQr~HfpJ`ےvXnZHAbdrtA˂pZZdQbtrXQJ`ۉbdQZ|nvprbtlnXv`rXQJ`ۉbdQZ|nr˂pZdQbt~HfpbdQZ|vpfr˂pnXv`XQJ`ےbdQZ|vpfbtlvnXbHAZpvpfH`JXQJltHAXQrlJtAbHAdrtfH~ˑJtAdf~HbHAdrtZHAblJtvnXdrtAH~fZHAbf~HbHAZdrtAH~fJtAdv`f˂rXQ~f`r˂pbdQZ|˂pZHArd|Zp˂AJltf`vX|ZdQfpvZp˂AJltے`JXArd|v`pJlt`vXnے`JXQfpvp˂rJlt`vXn|ZdQb~HXvJ`p˂vXnZHAbdrtAbے`ZdQbtrXQJ`ۉbdQZ|nvpbtlnXv`rXQJ`ۉbdQZ|Qr˂plJtAvnrXbdQZ|vpfr˂pnXv`XQJ`ےbdQZ|vpftlJ`f~rbdQvpfH`JXQJltJXQrl|ZbHAdrtfH~JtArdf~HbHAdrtZHAbrd|QJ`AdrtAH~fZHAbf~HbHAZdrtAH~ftArdHfpvZ|rA~f`r˂pbdQZ|˂pZHAdQbnXZp˂AJltf`vX|ZdQfpvZp˂AJltے`JXZdQbtZp˂Jlt`vXnے`JXQfpvp˂rJlt`vXn|ZdQbnXvJltvXnZHAb`vXnb˂v`f~rXQJ`ۉbdQZ|nvpbtlnXv`rXQJ`ۉbdQZ|Qr˂plJtArXQJ`bdQZ|vpfr˂pnXv`XQJ`ےbdQZ|vpftlJ`f~bdQZ|vpfH`JXQvpfpZHAbfpv㒐bHAdrtfH~JtArdf~HbHAdtAZHAbrd|璐bHAdrtAH~fZHAےf~HbHAZdrtAH~ftArdHfp`drtA~f`r˂pH~fے`JnXv`Zp˂AJltf`vX|ZdQfpvZp˂Jltے`JXZdQtArdZp˂Jlt`vXn`JXQrfpvp˂rJlt`vXn|ZdQbf~HJltvXnZHAb`vXnXQr˂f~HrXQJ`ۉbdQZ|nr˂pbtlnXv`rXQJ`bnvpQr˂p|ZdrXQJ`bdQZ|vpfbtlnXv`XQJ`ےbdQZ|r˂ptlJfpvbdQZ|vpfH`JXQvpfpZHAbfpv㒐bHAdrtZHAbJtArdf~HbHAfHˑZHAbQbtlbHAZdrtAH~fJtAdf~HbHAZdrtAZHAbtArdnXv`drAJ~f`r˂pH~fے`pnXv`Zp˂AJltے`JX|ZdQfpvZp˂f`vXے`JXJtArdrXQJJlt`vXn|ZdQbfpvp˂rJltے`JXQ|ZdQbf~HtbdQZvXnZHAb`vXnZHAbf~fvrXQJ`ۉbdQZ|Qr˂pbtlnXv`rXQJ`nvpQr˂p|Zd`ےbbdQZ|vpftlJnXv`XQJ`ےbdQZ|r˂ptlJfpv|drvpfH`JXQvpfے`JXQnXvbHAdrtZHAbJtArdf~HbHAfH~ˑZHAbQbtdHAZp˂drtAH~ftArdf~HbHAZdrtAZHAbtArd~HftAJl璅~f`r˂pH~fr˂p`f~Zp˂AJltے`JX|ZdQfpvZp˂f`vXے`JX|ZdQrXQJJlt`vXn|ZdQbfpvp˂rJltے`JXQ|ZdQbpvntbdQZvXnZHAb`vXnZHAbHfpvrXQJ`ۉbdQZ|Qr˂pbtlnXv`rXQJ`nvpQr˂pbtl`ےbbdQZ|vpftlJnXv`XQJ`ےbdQZ|r˂ptlJXv`f|drvpfH`JXQvpfے`JXQnXvbHAdtAZHAbJtArdf~HbHAfH~ˑZHAbJtArdHAZpdrtAH~ftArdf~HbHAZdtAJZHAbtArd~HftAJbd~f`r˂pZHAbArd|bHAZpdrtA~f`ZHAے`f~HAZp˂~f`HAbےrd|HfpdrtAJ~f`HAbےrd|bHAZpJl|Abے`rd|~HfpbHAZp~f`Abے`rd|HfpۙrtAJl~f`JXQrf۝`v`JXQZdQb˂rXJltvXnJXQrfpv㉐bHAvXn`JXQrZdQbtvnrltbvXn`JXQrZdQbn˂rXQdrtAJJXQrZdQbtvnXrbdvXnہJXQrZdQbtvnrXtbdvXnۉ˂p`ZXnvˍr˂pnXv`QJ`ےbdQZ|vpfHbtlnXv`Zp˂vpfH˂pZlJtAXQJ`ےdQZ|vpfH˂pZXv`fJ`ےltb˂pZHlJtAv`fQZ|dvpfH˂pZHlJtAQJ`ےQZ|dvpfHQXb㉀pfH~ZHAbf~HbHAZpdrtA~f`JtAd|f~HrXQJ`ۅ~fvHAbےrd|HAZpdrtAJ~f`HAbے~HfbHAZpdQZ|AbJXQrd|~HfprtAJl~f`Abے`rd|HAZp˙rtAJl~f`ۑpJAHrf۝`v`JXQfpv˂rXJltvXnZdQbtfpv㒐bHAnvp`JXQrZdQbt˂rXQltbvXn`JXQrpvn˂rXQdrtAJr˂pZdQbtvnXtbdvXnہJXQrZdQbt炀rXQtbdvXn󙐂ˁ`ZXnvˍr˂pnXv`QJ`ےbdQZ|vpfHlJtnXv`Zp˂fH~˂pZlJtAJ`ےdQZ|vpfH˂pZXv`fJ`ےltdZHAblJtAv`fQZ|dvpfH˂pZHlJtAJ`ےQZ|dvpfHQXb㉀pfH~ZHAbf~HbHAZpdrtA~f`Ard|f~HrXQHAZpf`vXHAbےrd|bHAZpdrtAJ~f`HAbے~HfbHAZprtAJlے`JXQrd|~HfprtAJl~f`Abے`rd|bHAZp˙rtAJl~f`ۑpJAHrf۝`v`JXQfpv˂rXJltvXnZdQbtfpv˂rXnvp`JXQrZdQbt˂rXQltbvXn`JXQrpvn˂rXQtbdQr˂pZdQbtvnXtbdvXnہJXQrZdQbt炀rXQtbdvXn󙐉ۑXnvˍr˂pnXv`QJ`ےbdQZ|vpfHlJtnXv`QJ`ےfH~˂pZlJtAJ`ےdQZ|vpfH˂pZXv`fJ`ےZ|dZHAblJtAv`fQZ|dvpfH˂pZHlJtAJ`ےQZ|dvpfHpJAHrpfH~ZHAے`f~HbHAZpdrtA~f`Ard|f~HbHAZpf`vnHAbےrd|bHAZpdrtAJ~f`HAے`~HfbHAZprtAJlJQrrd|HfpۙrtAJl~f`Abے`rd|bHAZp˙rtAJl~f`ˁ`ZQf۝`vJXQrfpv˂rXJltvXnZdQbtfpv˂rXvpfH`JXQrZdQbn˂rXQltbvXnJXQrbpvn˂rXQtbdQpZHAZdQbtvnrXtbdvXnہJXQrZdQbnXrXQtbdvXnXb㉀ۑXnvˍbtlnXv`QJ`ےbdQZ|r˂plJtnXv`QJ`p~f`˂pZXv`fJ`ےdQZ|vpfHtlJXv`fJ`ےZ|lbے`lJtAQJ`ےQZ|dvpfH˂pZHv`fJ`ےQZ|dvpfHpJAHrpfH~JtAd|f~HbHAZpdrtAZHAbArd|f~HrbdvXnHAbے~HfbHAZpdrtAJ~f`tAd|~HfbHAZptbnJXQrrd|HAZp˙rtAJl~f`Abے`~HfpbHAZp˙rtAJl~f`ˁ`pJf۝`vZdQbtfpv˂rXJlt`JXQZdQbtfpvQZ|lvpfH`JXQrpvn˂rXQltbvXnZdQbtpvn˂rXQvp`vpZHAZdQbt炀rXQtbdvXnہJXQrvnXrXQtbdvXnAHr󙐂XnvˍlJtnXv`QJ`ےbdQZ|r˂plJtnXv`˒tbdQ~f`˂pZXv`fJ`ےdQZ|vpfHlJtAXv`fJ`ےXnvbے`JlJtAJ`ےQZ|dvpfH˂pZHv`fJ`ےQZ|dvpfHˁ`ZQXbp|drArd|f~HbHAZpdrtAZHAbArd|f~HZ|dvXnvfHAbے~HfbHAZpdrtAJ~f`rd|~HfbHAZppfH~QrpZrd|bHAZp˙rtAJl~f`Abے`~HfpbHAZp˙rtAJl~f`㉀ۑpJQtJlZdQbtfpv˂rXJlt`JXQZdQbtfpvrtAJlH~f`JXQrpvn˂rXQltbvXnZdQbtpvn˂rXQf`vHAbےZdQbt炀rXQtbdvXnہJXQrvnXrXQtbdvXnAHr󙐂tbAdZlJtnXv`QJ`ےbdQZ|r˂plJtnXv`˒tbdQ`vXn˂pZXv`fJ`ےdQZ|vpfHlJtAXv`fJ`ےXnv`JXQrlJtAJ`ےQZ|dvpfH˂pZHv`fJ`ےQZ|dvpfHˁ`ZQXA|drArd|f~HbHAZpdtAJlZHAbArd|f~HZ|dtvpfHAے`~HfbHAZpdrtAJ~f`rd|~HfbHAZppfH~˂pZrd|bHAZp˙rtAJl~f`Aے`~HfpbHAZp˙rtAJl~f`Hr󙐂ˁQtJlZdQbtfpv˂rXtb`JXQZdQbtfpvbdQZ|H~fJXQrbpvn˂rXQltbvXnrZdQbtpvn˂rXQvpHAbےZdQbnXrXQtbdvXnJXQrbtvnXrXQtbdvXnے``ZQXbtbAdZlJtnXv`QJ`ےnvpr˂plJtnXv`ˁdrt`vXntlJXv`fJ`ےdQZ|˂pZlJtAXv`fJ`ےfH~`JXQrv`fJ`ےQZ|dvpfHlJtv`fJ`ےQZ|dJXQrۑpJA|drArd|f~HbHAZpfHf`ZHAbArd|f~HAJltvf~tAd|~HfbHAZpdrtAJHAbےrd|~HfbHAZpf`vXZHAb~HfpbHAZp˙rtAJl~f`Ad|~HfpbHAZp˙rtAJl˂pZHHr󙐂ˁQtJlZdQbtfpv˂rXvXn`JXQZdQbtfpvbdQZ|f`vXZdQbtpvn˂rXQltb`JXQrZdQbtpvn˂rXQnvpے`JXvnXrXQtbdvXnZdQbtvnXrXQtbdAbے``ZQXbtbAdZlJtnXv`QJ`ےvpfHr˂plJtnXv`ˁdrtnvplJtAXv`fJ`ےdQZ|˂pZlJtAXv`fJ`ےfH~Qr˂pv`fJ`ےQZ|dvpfHlJtAv`fJ`ےQZ|dJXQrˁ`Z|drArd|f~HbHAZp~f`ZHAbArd|f~HAdQZ|fH~rd|~HfbHAZpdrtAJHAbےrd|~HfbHAZpf`pfZHAb~HfpbHAZp˙rtAJl~f`rd|~HfpbHAZp˙rtAJl˂pZHQXb㉀QtJlZdQbtfpv˂rXvXn`JXQZdQbtfpvdrtAf`vXZdQbtpvn˂rXQltb`JXQrZdQbtpvn˂rXQH~fے`JXvnXrXQtbdvXnZdQbtvnXrXQtbdAXQrۑpJAHrtbAdZlJtnXv`QJ`ےvpfHr˂plJtnXv`JltnvplJtAXv`fJ`ےdQZ|˂pZlJtAXv`fJ`ے`vXnQr˂pv`fJ`ےQZ|dvpfHlJtAv`fJ`ےQZ|dpZHA󙐂ˁ`Z|drArd|f~HbHAZp~f`ZHAbArd|fHfpbdQZ|f~f`rd|~HfbHAZpdtAJlHAbےrd|~HfbHAZpvpfZA`~HfpbHAZp˙rtAJl~f`rd|~HfpbHAZp˙tAJlbے`QXb㉀QtJlZdQbtfpv˂rvXn`JXQZdQbtvndrtAvXnrZdQbtpvn˂rXQtbn`JXQrZdQbtpvn˂rbH~fJXQrbtvnXrXQtbdvXnrZdQbtvnXrXQtbnJXQrXnvˍtbAdZlJtnXv`bdQZ|vpfHr˂plJtrXQJ`pJl|d˂pZlJtAXv`fJ`ےvpf˂pZlJtAXv`fdQZ|l`vXHlJtv`fJ`ےQZ|d˂pZHlJtAv`fJ`ےvpfHpZHApfH~|drArd|f~HdrtA~f`ZHAbArd|˂rXrtAJlHAbےrd|~HfbHAZpHf`HAbےrd|~HftbdQ~f`Ad|~HfpbHAZp˙rtAJlAbے`rd|~HfpbHAZp˅f`b˂pf۝`vQtJlZdQbtfpvJltvXn`JXQZdQbtQJ`ےtbd`JXQrZdQbtpvn˂rXQvXn`JXQrZdQbtpvnZ|dvXnZdQbtvnXrXQtbdJXQrZdQbtvnXrXQvXnۑZHAbXnvˍtbAdZlJtnXv`bdQZ|vpfHr˂plJtbHAZpQZ|d˂pZlJtAXv`fJ`ےvpfH˂pZlJtAXv`frtAJlvpfHlJtAv`fJ`ےQZ|d˂pZHlJtAv`fJ`ےvpfHے`JXpfH~|drArd|f~HdrtA~f`ZHAbArd|˂rXrtAJlHAbےrd|~HfbHAZp~f`HAbےrd|~HftbdQ~f`rd|~HfpbHAZp˙rtAJlAbے`rd|~HfpbHAZp~f`Qr˂pf۝`vQtJlZdQbtfpvJltvXn`JXQZdQbtQJ`ےtd`JXQrZdQbtpvn˂rXQvXn`JXQrZdQbtpvnZ|dvXnZdQbtvnXrXQtbdJXQrZdQbtvnXrXQvXnۑZHAbXnvˍtbAdZlJtnXv`bdQZ|vpfHr˂plJtbHAXQrtAJl瀉˂pZlJtAXv`fJ`ےvpfH˂pZlJtAXv`ftbdQZf`vlJtAv`fJ`ےQZ|d˂pZHlJtAv`fJ`ےvpfHے`ppfH~|drArd|fHfpdrtA~f`ZHAbArd|J`ےtbdQHAbےrd|~HfbHAZp~f`HAbےrd|Hfp|drXnvrd|~HfpbHAZp˙tAJlAbے`rd|~HfpbHAZp~f`ZHAbېf۝`vQtJlZdQbtvnJltvXn`JXQZdQbbHAZpZ|d`JXQrZdQbtpvn˂rbvXn`JXQrZdQbtvnrtAJlpfH~ZdQbtvnXrXQtbnJXQrZdQbtvnXrbdvXnے`JXQXnvˍtbAdZlJtrXQJ`bdQZ|vpfHr˂pnXv`˂rXQrtAJl瀉˂pZlJtAXv`fdQZ|vpfH˂pZlJtAXQJ`ےtbdQZf`vlJtAv`fJ`ےvpfH˂pZHlJtAv`fQZ|dvpfHr˂ppfH~|drArd|HAZpdrtA~f`ZHAbf~HJ`ےtbdQHAbےrd|~HfdrtAJ~f`HAbےrd|HAZp|drXnvrd|~HfpbHAZp˅f`Abے`rd|~HfprtAJl~f`ZHAbېf۝`vQtJlZdQbt˂rXJltvXn`JXQfpvbHAZp`Z|lt`JXQrZdQbtpvnltbvXn`JXQrZdQbt˂rXQtAdQZ|p`vXZdQbtvnXrXQvXnہJXQrZdQbtvnXtbdvXnے`JXQHXnvˍtbAdZlJtQJ`ےbdQZ|vpfHr˂pnXv`ˁےbHbnۀ˂pZlJtAXv`fdQZ|vpfH˂pZlJtAJ`ےdrtAnr˂lJtAv`fJ`ےvpfH˂pZHlJtAv`fQZ|dvpfHAbے`pfH~|drArd|bHAZpdrtA~f`ZHAbf~HAZp˂vpff`HAbےrd|~HfdrtAJ~f`HAbےrd|bHAZpJltpZAb`rd|~HfpbHAZp~f`Abے`rd|~HfprtAJl~f`JXQrf۝`vQtJlZdQbt˂rXJltvXn`JXQfpvrXQJ`vXn`JXQrZdQbtpvnltbvXn`JXQrZdQbt˂rXQbdQZ|JXQrZdQbtvnXrXQvXnہJXQrZdQbtvnXtbdvXnۉ˂pZHXnvˍtbAdZlJtQJ`ےbdQZ|vpfHr˂pnXv`ˁےbHvpfH˂pZlJtAXv`fdQZ|vpfH˂pZlJtAJ`ےdrtA˂pZHlJtAv`fJ`ےvpfH˂pZHlJtAv`fQZ|dvpfHAbے`pfH~|drQt666666666677777777777777777777777777777777777 \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv33_0.dat b/vendor/endroid/qr-code/assets/data/qrv33_0.dat new file mode 100644 index 000000000..42ea5d54f --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv33_0.dat @@ -0,0 +1,297 @@ +}~}~}~}~{|{|{|{|{zyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvstststsrpopopoponmnmnmnmlklklklkjijijijihghghghghghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<}~}~}~}~{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqrpopopoponmnmnmnmlklklklkjijijijihghghghghghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<}~}~}~}~{|{|{|{|yzyzyzyzyxwxwxwxwxwxwxwxuvuvuvuvqrqrqrqrpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSSSSSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvqrqrqrqrooooopopnmnmnmnmlklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSRQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxwvuvuvuvuvuvuvuvqrqrqrqropopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUQRQRQRQRQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvqrqrqrqropopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUTSTSQRQRQRQRQRQRQRQPOPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvutstststqrqrqrqropopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSSSSSQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTSTQRQRQRQROPOPOPOPOPOPOPONMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropoooooonmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNMNMNMNMLKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLKLKLKLKJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTSSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYVUVUVUVUSSSSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJIJIJIJIHGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYVUVUVUVUTSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrpopopooonmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYVUVUVUVUTSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHGHGHGHGFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrooopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFEFEFEFEDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSSSSSSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCBABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>;<;<;:9:9:9:9:9:}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqropopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABA@?@?@?@?@=>=>=>=>9:9:9:9:9:9:9:9:}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrooooooponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?@=>=>=>=>9:9:9:9:9:9:9:9:}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@?@?@?@?>=>=>=>=>9:9:9:9:9:9:9:9:}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=>9:9:9:9:9:9:9:9:}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSSSSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>=>=>=>=<9:9:9:9:9:9:9:9:}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrpopooooonmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqrqrnmnmnmnmnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:9:987878}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststqrqrqpopnmnmnmnmnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:78777777~}~}~}~}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststopopoooonmnmnmnmlklklklklklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:87878787}~}~}~}~}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststoopopoponmnmnmnmlklklklklklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSSSSSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:87878787}~}~}~}~}|{|{|{|{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststpopopoponmnmnmnmlklklklkjijijijijijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:87878787}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststpopopoponmnmnmnmlklklklkjijijijijijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<9:9:9:9:87878787878787876565656543434343212121210/0/0/0/0/0/0/.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +878787776565656543434343212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +777878786565656543434343212121210/0/0/0/.-.-.-.-.-.-.-,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+,+,+,+*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)('('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +777777876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('&%&%&%&%&%$#$#$#$#"!"!"!"!         + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!       + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%$#$#$#$#$#"!"!"!"!     + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!     + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#"!"!"!"!"!     + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!     + + + +878777776565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!       + + + +787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!             + + + +787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!           + + + +787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + + + +787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + + + + + +787878776565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + + + + 777787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +877777876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +878787656565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +656565656565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +656565656565654343434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +656565654343434343434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +656565654343434343434321212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +656565654343434321212121212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +6565656543434343212121212121210/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +6565656543434343212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + + + + ''(())**]]\\[[ZZ@AABBCCD]\\[[ZZY01122334mllkkjji !!""##$}||{{zzy |}}~~~~}} + + uuvvwwxx((''&&%%eeffgghh88776655UUVVWWXX44332211zz{{||}}}~~ mnnooppq0//..--,]^^__``a@??>>==>??@@A`__^^]]\-..//001feeddccb ++,,--..YYXWVUTSDEEFFGGHYXXWWVVU45566778ihhggffe$%%&&''(yxxwwvvu + +  ||{{zzyy ~~}} yyzz{{||$$##""!!iijjkkll44332211YYZZ[[\\00//..--~~ +qrrssttu,++**))(abbccdde<;;::998QRRSSTTULKKJJIIHABBCCDDE\[[ZZYYX12233445baa``__^//001122SRRQQPPOHIIJJKKLUTTSSRRQ899::;;>??@a``__^^],--..//0qppoonnm ~~}  tsrqpoon%%&&''((xxwwvvuu + + qqrrsstt,,++**))aabbccdd((''&&%%yzz{{||}$##""!! ijjkkllm43322110YZZ[[\\]DCCBBAA@IJJKKLLMTSSRRQQP9::;;<<=ZYYSSRRQ~~}}||77==>>??KJJIIHHGPQQRRSSTMLLKKJJI@AABBCCD]\\[[ZZY01122334mllkkjji !!""##$}||{{zzynmmllkkj))**++,,ttssrrqq + + uuvvwwxx((''&&%%eeffgghh$$##""!! }~~ mnnooppq0//..--,]^^__``a@??>>==>??@@AQPPOONNM~~}} {{zzyyxx@@AABBCCGFFEEDDCTUUVVWWXIHHGGFFEDEEFFGGHYXXWWVVU45566778ihhggffe$%%&&''(yxxwwvvujiihhggf--..//00ppoonnmm ~~}} yyzz{{||$$##""!!iijjkkll + + qrrssttu,++**))(abbccdde<;;::998QRRSSTTULKKJJIIHABBCCDDEMLLKKJJI||{{zzyy!!""##$$wwvvuuooDDEEFFGGCBBAA@@?XYYZZ[[\EDDCCBBAHIIJJKKLUTTSSRRQ899::;;>==<;:\]]^^__`A@@??>>=LMMNNOOPQPPOONNM<==>>??@a``__^^],--..//0qppoonnm ~~} "##$$%%&baa``__^55667788hhggffee%%&&''((xxwwvvuu + + qqrrsstt yzz{{||}$##""!! ijjkkllm43322110YZZ[[\\]DCCBBAA@IJJKKLLMEDDCCBBAttssrrqq))**++,,jjiihhggLLMMNNOO98776655`aabbccd=<<;;::9PQQRRSSTMLLKKJJI@AABBCCD]\\[[ZZY01122334mllkkjji !!""##$}||{{zzy&''(())*^]]\\[[Z99::;;<>==>=ppoonnmm--..//00ffeeddccPPQQRRSS44332211deeffggh98877665TUUVVWWXIHHGGFFEDEEFFGGHYXXWWVVU45566778ihhggffe$%%&&''(yxxwwvvu*++,,--.ZYYXWVUT==>>??@@``__^^]]--..//00ppoonnmm ~~}} yyzz{{|| + +  + + qrrssttu,++**))(abbccdde<;;::998QRRSSTTU=7766554llkkjjii11223344bbaa``__YYZZ[[\\00//..--hiijjkkl54433221XYYZZ[[\EDDCCBBAHIIJJKKLUTTSSRRQ899::;;>=LMMNNOOPQPPOONNM<==>>??@a``__^^],--..//0qppoonnm |{{zzyyx23344556OONNMMLLEEFFGGHHXXWWVVUU55667788hhggffee%%&&''((xxwwvvuu + +  |{{zzyyx !~~}}| yzz{{||}$##""!! ijjkkllm43322110YZZ[[\\]0//..--,ddccbbaa99::;;<>?KKJJIIHHIIJJKKLLTTSSRRQQ99::;;<>??@@QQPPOONNeeffgghh$$##""!!tuuvvwwx)((''&&%deeffggh98877665TUUVVWWXIHHGGFFEDEEFFGGHYXXWWVVU45566778ihhggffe$%%&&''(onnmmllk?@@AABBCGGFFEEDDMMNNOOPPPPOONNMM==>>??@@``__^^]]--..//00ppoonnmm ~~}} srqpoonn%&&''(()xwwvvuut + + qrrssttu,++**))(abbccdde(''&&%%$\\[[ZZYYAABBCCDDMMLLKKJJiijjkkll xyyzz{{|%$$##""!hiijjkkl54433221XYYZZ[[\EDDCCBBAHIIJJKKLUTTSSRRQ899::;;>=LMMNNOOPQPPOONNM<==>>??@a``__^^],--..//0gffeeddcGHHIIJJK??>>==<;UUVVWWXXHHGGFFEEEEFFGGHHXXWWVVUU55667788hhggffee%%&&''((xxwwvvuuiihhggff-..//001poonnmml !~~}}| yzz{{||}$##""!! ijjkkllmLMMNNOOPTTSSRRQQIIJJKKLLEEDDCCBBvvwwxxyypqqrrsst-,,++**)`aabbccd=<<;;::9PQQRRSSTMLLKKJJI@AABBCCD]\\[[ZZY01122334cbbaa``_KLLMMNNO:9877665YYZZ[[\\DDCCBBAAIIJJKKLLTTSSRRQQ99::;;<>zz{{||}}tuuvvwwx)((''&&%deeffggh98877665TUUVVWWXIHHGGFFEDEEFFGGHYXXWWVVU45566778_^^]]\\[OPPQQRRS54433221]]^^__``@@??>>==MMNNOOPPPPOONNMM==>>??@@``__^^]]--..//00ppoonnmm ~~}} ##$$%%&&aa``__^^56677889hggffeed%&&''(()xwwvvuut + + qrrssttuYZZ[[\\]LLKKJJIIQQRRSSTT==776655~~ +xyyzz{{|%$$##""!hiijjkkl54433221XYYZZ[[\EDDCCBBAHIIJJKKLUTTSSRRQ899::;;<[ZZYYSSRSYYZZ[[\100//..-aabbccdd<<;;::99QQRRSSTTLLKKJJIIAABBCCDD\\[[ZZYY11223344llkkjjii!!""##$$||{{zzyy''(())**]]\\[[ZZ9::;;<<=dccbbaa`)**++,,-tssrrqqp + + uvvwwxxy ]^^__``aHHGGFFEEUUVVWWXX44332211 +  |}}~~! lmmnnoop100//..-\]]^^__`A@@??>>=LMMNNOOPQPPOONNM<==>>??@RQQPPOON\]]^^__`-,,++**)eeffgghh88776655UUVVWWXXHHGGFFEEEEFFGGHHXXWWVVUU55667788hhggffee%%&&''((xxwwvvuu++,,--..YYXWVUTS=>>??@@A`__^^]]\-..//001poonnmml !~~}}| yzz{{||} + + abbccddeDDCCBBAAYYZZ[[\\00//..-- + + pqqrrsst-,,++**)`aabbccd=<<;;::9PQQRRSSTMLLKKJJI@AABBCCDNMMLLKKJ`aabbccd)((''&&%iijjkkll44332211YYZZ[[\\DDCCBBAAIIJJKKLLTTSSRRQQ99::;;<>==]]^^__``,,++**)) + + tuuvvwwx)((''&&%deeffggh98877665TUUVVWWXIHHGGFFEDEEFFGGHJIIHHGGFdeeffggh%$$##""!mmnnoopp00//..--]]^^__``@@??>>==MMNNOOPPPPOONNMM==>>??@@``__^^]]--..//00ppoonnmm {{zzyyxx33445566ONNMMLLKEFFGGHHIXWWVVUUT56677889hggffeed%&&''(()xwwvvuut + +  +ijjkkllm<<;;::99aabbccdd((''&&%% xyyzz{{|%$$##""!hiijjkkl54433221XYYZZ[[\EDDCCBBAHIIJJKKLFEEDDCCBhiijjkkl! qqrrsstt,,++**))aabbccdd<<;;::99QQRRSSTTLLKKJJIIAABBCCDD\\[[ZZYY11223344llkkjjii!!""##$$wwvvuuoo77==>>??KJJIIHHGIJJKKLLMTSSRRQQP9::;;<<=dccbbaa`)**++,,-tssrrqqp + +  + mnnoouuv88776655eeffgghh$$##""!! |}}~~! lmmnnoop100//..-\]]^^__`A@@??>>=LMMNNOOPBAA@@??>lmmnnoouuuvvwwxx((''&&%%eeffgghh88776655UUVVWWXXHHGGFFEEEEFFGGHHXXWWVVUU55667788hhggffee%%&&''((nnmmllkk@@AABBCCGFFEEDDCMNNOOPPQPOONNMML=>>??@@A`__^^]]\-..//001poonnmml !~~}}| vwwxxyyz44332211iijjkkll + + pqqrrsst-,,++**)`aabbccd=<<;;::9PQQRRSST>==77665uvvwwxxyyyzz{{||$$##""!!iijjkkll44332211YYZZ[[\\DDCCBBAAIIJJKKLLTTSSRRQQ99::;;<>==MMNNOOPPPPOONNMM==>>??@@``__^^]]--..//00ffeeddccHHIIJJKK?>>==<;:UVVWWXXYHGGFFEEDEFFGGHHIXWWVVUUT56677889hggffeed%&&''(()xwwvvuut ~,,++**))qqrrsstt ~~} xyyzz{{|%$$##""!hiijjkkl54433221XYYZZ[[\100//..-}~~ qqrrsstt,,++**))aabbccdd<<;;::99QQRRSSTTLLKKJJIIAABBCCDD\\[[ZZYY11223344bbaa``__LLMMNNOO98776655YZZ[[\\]DCCBBAA@IJJKKLLMTSSRRQQP9::;;<<=dccbbaa`)**++,,-tssrrqqp + + !!""#((''&&%%uuvvwwxx ~~}}| !!""##$}||{{zzy |}}~~! lmmnnoop100//..-\]]^^__`-,,++**) + + uuvvwwxx((''&&%%eeffgghh88776655UUVVWWXXHHGGFFEEEEFFGGHHXXWWVVUU55667788^^]]\\[[PPQQRRSS44332211]^^__``a@??>>==>??@@A`__^^]]\-..//001poonnmml !~~}}| #$$%%&&'$$##""!!yyzz{{|| + + |{{zzyyx$%%&&''(yxxwwvvu + + pqqrrsst-,,++**)`aabbccd)((''&&%yyzz{{||$$##""!!iijjkkll44332211YYZZ[[\\DDCCBBAAIIJJKKLLTTSSRRQQ99::;;<>==MMNNOOPPPPOONNMM==>>??@@QQPPOONN]]^^__``,,++**))effgghhi87766554UVVWWXXYHGGFFEEDEFFGGHHIXWWVVUUT56677889hggffeed%&&''(()xwwvvuut+,,--../srqpoonn,--..//0qppoonnm ~~} xyyzz{{|%$$##""!hiijjkkl! + + qqrrsstt,,++**))aabbccdd<<;;::99QQRRSSTTLLKKJJIIAABBCCDDMMLLKKJJaabbccdd((''&&%%ijjkkllm43322110YZZ[[\\]DCCBBAA@IJJKKLLMTSSRRQQP9::;;<<=dccbbaa`)**++,,-tssrrqqp~~}}||{/0011223mmllkkjj01122334mllkkjji !!""##$}||{{zzy |}}~~! lmmnnoop + + uuvvwwxx((''&&%%eeffgghh88776655UUVVWWXXHHGGFFEEEEFFGGHHIIHHGGFFeeffgghh$$##""!!mnnooppq0//..--,]^^__``a@??>>==>??@@A`__^^]]\-..//001poonnmml !{zzyyxxw34455667iihhggff45566778ihhggffe$%%&&''(yxxwwvvu + + pqqrrsst yyzz{{||$$##""!!iijjkkll44332211YYZZ[[\\DDCCBBAAIIJJKKLLEEDDCCBBiijjkkll qrrssttu,++**))(abbccdde<;;::998QRRSSTTULKKJJIIHABBCCDDE\[[ZZYYX12233445lkkjjiih!""##$$%wvvuuoon7==>>??@ !!""eeddccbb899::;;>==MMNNOOPPAA@@??>>mmnnoouuuvvwwxxy(''&&%%$effgghhi87766554UVVWWXXYHGGFFEEDEFFGGHHIXWWVVUUT56677889hggffeed%&&''(()nmmllkkj@AABBCCD + + ##$$%%&&aa``__^^<==>>??@a``__^^],--..//0qppoonnm ~~} xyyzz{{| + +  + + qqrrsstt,,++**))aabbccdd<<;;::99QQRRSSTT==776655vvwwxxyyyzz{{||}$##""!! ijjkkllm43322110YZZ[[\\]DCCBBAA@IJJKKLLMTSSRRQQP9::;;<<=dccbbaa`)**++,,-jiihhggfDEEFFGGH~~}}||{{zzyyxx !!~~}}||zz{{||}}##""!! jjkkllmm33221100ZZ[[\\]]//..--,, + + rssttuuv+**))(('bccddeef;::99887RSSTTUUVKJJIIHHGBCCDDEEFIHHGGFFEmnnoouuvwwvvuuts""##$$%%{{zzyyxx ~~nnooppqq//..--,,^^__``aa++**))(( vwwxxyyz'&&%%$$#fgghhiij76655443VWWXXYYZGFFEEDDCFGGHHIIJEDDCCBBAvwwxxyyz rqpoonnm&&''(())wwvvuutt + + rrssttuu++**))((bbccddee''&&%%$$z{{||}}~#""!! jkkllmmn3221100/Z[[\\]]^CBBAA@@?JKKLLMMNA@@??>>=z{{||}}~ + + mllkkjji**++,,--ssrrqqpp + + vvwwxxyy''&&%%$$ffgghhii##""!! ~nooppqqr/..--,,+^__``aab?>>==<<;NOOPPQQR=7766554~ + + ihhggffe..//0011oonnmmll !!~~}}||zz{{||}}##""!! jjkkllmm + + + rssttuuv+**))(('bccddeef;::99887RSSTTUUV43322110 eddccbba22334455kkjjiihh""##$$%%{{zzyyxx ~~nnooppqq + vwwxxyyz'&&%%$$#fgghhiij76655443VWWXXYYZ0//..--,a``__^^]66778899ggffeedd&&''(())wwvvuutt + + rrssttuuz{{||}}~#""!! jkkllmmn3221100/Z[[\\]]^,++**))(]\\[[ZZY::;;<<==ccbbaa``**++,,--ssrrqqpp + + vvwwxxyy  ~nooppqqr/..--,,+^__``aab(''&&%%$YXWVUTSS>>??@@AA__^^]]\\..//0011oonnmmll !!~~}}||zz{{||}} + +  + + + rssttuuv+**))(('bccddeef$##""!!~~} RRQQPPOOBBCCDDEE[[ZZYYXX22334455kkjjiihh""##$$%%{{zzyyxx ~~~~}}||{ + vwwxxyyz'&&%%$$#fgghhiij}||{{zzy !!""##$NNMMLLKKFFGGHHIIWWVVUUTT66778899ggffeedd&&''(())wwvvuutt + +  + +{zzyyxxw !!"~~}}||{z{{||}}~#""!! jkkllmmnyxxwwvvu$%%&&''(JJIIHHGGJJKKLLMMSSRRQQPP::;;<<==ccbbaa``**++,,--ssrrqqpp + +  wvvuutsr"##$$%%&{zzyyxxw ~nooppqqruttssrrq())**++,FFEEDDCCNNOOPPQQOONNMMLL>>??@@AA__^^]]\\..//0011oonnmmll !!~~}}||qpoonnmm&''(())*wvvuutts + + + rssttuuv qppoonnm,--..//0BBAA@@??RRSSTTUUKKJJIIHHBBCCDDEE[[ZZYYXX22334455kkjjiihh""##$$%%{{zzyyxxllkkjjii*++,,--.srrqqppo + vwwxxyyz + + +mllkkjji01122334>>==<;:9VVWWXXYYGGFFEEDDFFGGHHIIWWVVUUTT66778899ggffeedd&&''(())wwvvuutt hhggffee.//00112onnmmllk !!"~~}}||{z{{||}}~ + ihhggffe4556677887766554ZZ[[\\]]CCBBAA@@JJKKLLMMSSRRQQPP::;;<<==ccbbaa``**++,,--ssrrqqpp + + !!""##ddccbbaa23344556kjjiihhg"##$$%%&{zzyyxxw ~eddccbba899::;;<43322110^^__``aa??>>==<>??@@AA__^^]]\\..//0011oonnmmll !!~~}}||$$%%&&''``__^^]]6778899:gffeeddc&''(())*wvvuutts + + + a``__^^]<==>>??@0//..--,bbccddee;;::9988RRSSTTUUKKJJIIHHBBCCDDEE[[ZZYYXX22334455kkjjiihh""##$$%%{{zzyyxx(())**++\\[[ZZYY:;;<<==>cbbaa``_*++,,--.srrqqppo + ]\\[[ZZY@AABBCCD,++**))(ffgghhii77665544VVWWXXYYGGFFEEDDFFGGHHIIWWVVUUTT66778899ggffeedd&&''(())wwvvuutt,,--..//XWVUTSSR>??@@AAB_^^]]\\[.//00112onnmmllk !!"~~}}||{!!""#YXXWWVVUDEEFFGGH(''&&%%$jjkkllmm33221100ZZ[[\\]]CCBBAA@@JJKKLLMMSSRRQQPP::;;<<==ccbbaa``**++,,--ssrrqqpp~~}}||{{00112233RQQPPOONBCCDDEEF[ZZYYXXW23344556kjjiihhg"##$$%%&{zzyyxxw#$$%%&&'UTTSSRRQHIIJJKKL$##""!! nnooppqq//..--,,^^__``aa??>>==<>??@@AA__^^]]\\..//0011oonnmmll !!zzyyxxww44556677NMMLLKKJFGGHHIIJWVVUUTTS6778899:gffeeddc&''(())*wvvuutts +'(())**+QPPOONNMLMMNNOOPrrssttuu++**))((bbccddee;;::9988RRSSTTUUKKJJIIHHBBCCDDEE[[ZZYYXX22334455kkjjiihh""##$$%%vvuuoonn==>>??@@JIIHHGGFJKKLLMMNSRRQQPPO:;;<<==>cbbaa``_*++,,--.srrqqppo + +,,--../MLLKKJJIPQQRRSSTvvwwxxyy''&&%%$$ffgghhii77665544VVWWXXYYGGFFEEDDFFGGHHIIWWVVUUTT66778899ggffeedd&&''(())mmllkkjjAABBCCDDFEEDDCCBNOOPPQQRONNMMLLK>??@@AAB_^^]]\\[.//00112onnmmllk !!"~~}}||{/0011223IHHGGFFETUUVVWWXzz{{||}}##""!! jjkkllmm33221100ZZ[[\\]]CCBBAA@@JJKKLLMMSSRRQQPP::;;<<==ccbbaa``**++,,--iihhggffEEFFGGHHBAA@@??>RSSTTUUVKJJIIHHGBCCDDEEF[ZZYYXXW23344556kjjiihhg"##$$%%&{zzyyxxw34455667EDDCCBBAXYYZZ[[\~~nnooppqq//..--,,^^__``aa??>>==<>??@@AA__^^]]\\..//0011eeddccbbIIJJKKLL>==<;:98VWWXXYYZGFFEEDDCFGGHHIIJWVVUUTTS6778899:gffeeddc&''(())*wvvuutts~~}}||{7==>>??@A@@??>>=\]]^^__` + +rrssttuu++**))((bbccddee;;::9988RRSSTTUUKKJJIIHHBBCCDDEE[[ZZYYXX22334455aa``__^^MMNNOOPP77665544Z[[\\]]^CBBAA@@?JKKLLMMNSRRQQPPO:;;<<==>cbbaa``_*++,,--.srrqqppo{zzyyxxw@AABBCCD=<<;;::9`aabbccd vvwwxxyy''&&%%$$ffgghhii77665544VVWWXXYYGGFFEEDDFFGGHHIIWWVVUUTT66778899]]\\[[ZZQQRRSSYY33221100^__``aab?>>==<<;NOOPPQQRONNMMLLK>??@@AAB_^^]]\\[.//00112onnmmllk !!"wvvuuoonDEEFFGGH98877665deeffgghzz{{||}}##""!! jjkkllmm33221100ZZ[[\\]]CCBBAA@@JJKKLLMMSSRRQQPP::;;<<==YYSSRRQQZZ[[\\]]//..--,,bccddeef;::99887RSSTTUUVKJJIIHHGBCCDDEEF[ZZYYXXW23344556kjjiihhg"##$$%%&nmmllkkjHIIJJKKL54433221hiijjkkl ~~nnooppqq//..--,,^^__``aa??>>==<>??@@AAPPOONNMM^^__``aa++**))((fgghhiij76655443VWWXXYYZGFFEEDDCFGGHHIIJWVVUUTTS6778899:gffeeddc&''(())*jiihhggfLMMNNOOP100//..-lmmnnoop + + rrssttuu++**))((bbccddee;;::9988RRSSTTUUKKJJIIHHBBCCDDEELLKKJJIIbbccddee''&&%%$$jkkllmmn3221100/Z[[\\]]^CBBAA@@?JKKLLMMNSRRQQPPO:;;<<==>cbbaa``_*++,,--.feeddccbPQQRRSSY-,,++**)pqqrrsst + + vvwwxxyy''&&%%$$ffgghhii77665544VVWWXXYYGGFFEEDDFFGGHHIIHHGGFFEEffgghhii##""!! nooppqqr/..--,,+^__``aab?>>==<<;NOOPPQQRONNMMLLK>??@@AAB_^^]]\\[.//00112baa``__^YZZ[[\\])((''&&%tuuvvwwxzz{{||}}##""!! jjkkllmm33221100ZZ[[\\]]CCBBAA@@JJKKLLMMDDCCBBAAjjkkllmmrssttuuv+**))(('bccddeef;::99887RSSTTUUVKJJIIHHGBCCDDEEF[ZZYYXXW23344556^]]\\[[Z]^^__``a%$$##""!xyyzz{{| ~~nnooppqq//..--,,^^__``aa??>>==<>==nnoouuvvvwwxxyyz'&&%%$$#fgghhiij76655443VWWXXYYZGFFEEDDCFGGHHIIJWVVUUTTS6778899:ZYYSSRRQabbccdde! |}}~~ + + rrssttuu++**))((bbccddee;;::9988RRSSTTUU77665544wwxxyyzzz{{||}}~#""!! jkkllmmn3221100/Z[[\\]]^CBBAA@@?JKKLLMMNSRRQQPPO:;;<<==>QPPOONNMeffgghhi + + vvwwxxyy''&&%%$$ffgghhii77665544VVWWXXYY33221100{{||}}~~ ~nooppqqr/..--,,+^__``aab?>>==<<;NOOPPQQRONNMMLLK>??@@AABMLLKKJJIijjkkllmfpvp˂rJltpfH~pZHAbJtArdf~HrXQJ`ۉbdQZ|f`vXے`JXJtArdf~HnrXQJ`Zp˂AJltfH~ˁJXQrf~HXQJ`ےbdQZ|`vXnے`JXQZHAےtlJnXv`p˂rJltH~fZHAbtlJfpvJ`ےrtAJl~f`ZHAbۉlJtnXv`ˑ˂rXJlt~f`ZHAbۉlJtnXv`ˑ˂rXrtAJlnXv`XQJ`ےdrtAJf`vJQr|ZdQfpvbHAdrtnvpQr˂p|ZdQfpvےHArXQJ`ۉbdQZ|f`vXbtl|fpvbHAZdrtAvpfr˂p`JXQrtArdf~HXQJ`ےbdQZ|`vXnے`JXQtArdnXv`bHAZptbdQvXn`JXQArd|f~HQJ`ےbdQZ|vXn`JXQArd|f~HQJ`ےtbdQf~HbHAZltbXnv˂pZHbtlnXv`Zp˂AJltfH~ˑZHAbbtlnXv`Zp˂JltdtAnvpZdQbtnXv`p˂rJltH~fZHAbbtl|ZdQbfpvbHAZdrtAvpfr˂p|ZdQbf~H˂rXQZ|AJlvpfHr˂pZdQbtfpvbHAZpdrtAvpfHr˂pZdQbtfpvbHAZpZ|dfpvp˂rdQZ|pfH~Abے`JtArdf~HrXQJ`ۉbdQZ|f`vXے`JXJtArdf~HrXQJ`ۉbdQZ|JltfH~ˉlJtf~fpXQJ`ےbdQZ|`vXnے`JXQJtAdtlJnXv`p˂rJltH~fZHAbtlJfpvJ`ےtb~f`ZHAbۉlJtnXv`ˑ˂rXJlt~f`ZHAbۉlJtnXv`ˑ˂rXrtAdQZ|nXv`XQJ`ےdrtAJvpJXQr|ZdQfpvbHAdrtnvpQr˂p|ZdQfpvbHAdrtbnvpf`vXArd|vnXbHAZdrtAvpfr˂p|ZdQbfpvfHfXQJ`ےbdQZ|`vXnے`JXQtArdnXv`bHAXQJnvpvXn`JXQArd|f~HQJ`ےbdQZ|vXn`JXQArd|f~HQJ`ےdrtf~HbHAZltbfH~˂pZHbtlnXv`Zp˂AJltfH~ˑZHAbbtlnXv`Zp˂AJltfHnvpZdQbtv`fp˂rJltH~fZHAbtlJnXv`pvnbHAZdrtAvpfr˂p|ZdQbpvn`ےJlfHf`vpfr˂pZdQbtfpvbHAZpdrtAvpfHr˂pZdQbtfpvbHAZpAJltfpvp˂rdQZ|lf`vXAbے`JtArdf~HrXQJ`ۉbdQZ|f`vXے`JXJtArdf~HrXQJ`ۉbdQZ|f`vXfے`JXl|~HfpXQJ`ےbdQZ|`vXnے`JXQtArdf~HrXQJ`p˂rJltH~fZHAbtlJXv`ftbQZvXn`JXQZHAے`lJtnXv`ˑ˂rXJlt~f`ZHAbۉlJtnXv`ˑ˂rXbdQZ|nXv`XQJ`ےtbdQnvpJXQr|ZdQfpvbHAdrtnvpQr˂p|ZdQfpvbHAdrtnvpQHAbZdQbtvnXbHAZdrtAvpfr˂p|ZdQbfpvےHAZXQJ`ےbdQZ|`vXnے`JXQtArd~HfdrtAvpfHr˂pJXQrArd|f~HQJ`ےbdQZ|vXn`JXQArd|f~HQJ`ےdrtf~HbHAZZ|dfH~ZHAbbtlnXv`Zp˂AJltfH~ˑZHAbbtlnXv`Zp˂AJltfH~˒`JXQlJtAv`fp˂rJltH~fZHAbtlJnXv`p˂rJltdtAJvpfr˂p|ZdQbpvnJlt~f`ZHAbbtlZdQbtfpvbHAZpdrtAvpfHr˂pZdQbtfpvbHAZpAJltfpvp˂rrtAJlf`vXے`JXQJtArdf~HrXQJ`ۉbdQZ|f`vXے`JXJtArdf~HrXQJ`ۉbdQZ|f`vXr˂prd|~HfvnXQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|ltbH~fZHAbtlJXv`pbdQZ|vXn`JXQJtAd|lJnXv`ˑ˂rXJlt~f`ZHAbۉlJtnXv`ˑ˂rXdrtAnXv`XQJ`ےtbdQH~fr˂p|ZdQfpvbHAdrtnvpQr˂p|ZdQfpvbHAdrtnvpZHAbZdQbtXv`fbHAZdrtAvpfr˂p|ZdQbfpvbHAZdrtAnvp`vXnے`JXQtArdvnrdrtAvpfHr˂pZdQbtfpvfHfpQJ`ےbdQZ|vXn`JXQArd|f~HQJ`ےJltf~HbHAZZ|d`vXnZHAbbtlnXv`Zp˂AJltfH~ˑZHAbbtlnXv`Zp˂AJltfH~˒`JXQlJtA~Hfp˂rJltH~fZHAbtlJnXv`p˂rJltfHfvpfr˂p|ZdQbXQJ`pJlt~f`ZHAbۉlJtnXv`˝vnbHAZpdrtAvpfHr˂pZdQbtfpvbHAZpbdQZ|fpvp˂rrtAdQZvpfے`JXQJtArdf~HrXQJ`ۉbdQZ|f`vXے`JXJtArdf~HrXQJ`ۉbdQZ|f`vXr˂p`rdtlpvnXQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXnے`JXQZHAےtlJ˂rXQbdQZ|vXn`JXQArd|f~HrXQJ`ۑ˂rXJlt~f`ZHAbۉlJtnXv`ˑ˂rXdrtAnXv`XQJ`ے|drH~fr˂p|ZdQfpvbHAdrtnvpQr˂p|ZdQfpvbHAdrtnvpJXQrJtArdXv`fbHAZdrtAvpfr˂p|ZdQbfpvbHAZdrtAvpfr˂p`JXQrtArdJ`ےrAJl璅vpfHr˂pZdQbtfpv㒐HAZpQJ`ےbdQZ|vXn`JXQArd|f~HQJ`ےJltf~HbHAZtAJl`vXnZAb`btlnXv`Zp˂AJltfH~ˑZHAbbtlnXv`Zp˂AJltfH~ˉ˂pZH|Zd~Hfp˂rJltH~fZHAbtlJnXv`p˂rJltH~fZHAbbtl|ZdQbbHAZptbdQZ~f`ZHAbۉlJtnXv`ˑ˂rXJltdtAJlvpfHr˂pZdQbtfpvbHAZpbdQZ|lnvpfpvp˂rtbdQZvp`JXQrJtArdf~HrXQJ`ۉbdQZ|f`vXے`JXJtArdf~HrXQJ`ۉbdQZ|f`vXAbے`QbtlpvnXQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXnے`JXQJtAdtlJ˂rXQ|drvXn`JXQArd|f~HQJ`ےbdQZ|tb~f`ZHAbۉlJtnXv`ˑ˂rXtbdfH~nXv`XQJ`ے|drvXnpZHA|ZdQfpvbHAdrtnvpQr˂p|ZdQfpvbHAdrtnvpJXQrJtArdvf~HbHAZdrtAvpfr˂p|ZdQbfpvbHAZdrtAvpfr˂p|ZdQbfpvJ`p˂tAJl璅vpfHr˂pZdQbtfpvbHAZpdrtAnvpvXn`JXQArd|f~HQJ`ےQZ|df`vXHf~HbHAZtAJlvpfHbے`btlnXv`Zp˂AJltfH~ˑZHAbbtlnXv`Zp˂AJltfH~ˉ˂pZH|Zdfpvp˂rJltH~fZHAbtlJnXv`p˂rJltH~fZHAbtlJ~HfrXQJtbdQZ~f`ZHAbۉlJtnXv`ˑ˂rXJltfHf`vpfr˂pZdQbtfpvbHAZprtAJl~f`fpvp˂rtdrtA~f`JXQrJtArdf~HrXQJ`ۉbdQZ|f`vXے`JXJtArdf~HrXQJ`ۉbdQZ|f`vXAbQtArdnXv`XQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXnے`JXQtArdpvn`ےb|drvXn`JXQArd|f~HQJ`ےbdQZ|vXn`JXQZHAے`lJtnXv`ˑ˂rXtbdvXnnXv`XQJ`ےJltvXnpZHAb|ZdQfpvbHAdrtnvpQr˂p|ZdQfpvbHAdrtnvppZHA|ZdQf~HbHAZdrtAvpfr˂p|ZdQbfpvbHAZdrtAvpfr˂p|ZdQbXv`fHAZp˂tAJbdvpfHr˂pZdQbtfpvbHAZpdrtAvpfHr˂pJXQrArd|f~HQJ`ےQZ|lvpfHf~HbHAZbdQZ|vpfHJAdbtlnXv`Zp˂AJltfH~ˑZHAbbtlnXv`Zp˂AJltfH~bے`btlfpvp˂rJltH~fZHAbtlJnXv`p˂rJltH~fZHAbtlJ~HfrXQJQZ|d~f`ZHAbۉlJtnXv`ˑ˂rXJlt~f`ZHAbbtlZdQbtfpvbHAZptbn~f`fpvp˂rdrtA~v|ZdQJfpvfHrXQJ`ۉbdQZ|f`vXے`JXJtArdf~HrXQJ`ۉbdQZ|f`vXJXQrJtArdnXv`XQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXnے`JXQtArdpvn`ےbrtAJlvXn`JXQArd|f~HQJ`ےbdQZ|vXn`JXQJtAd|lJnXv`ˑ˂rXvp`vXnnXv`XQJ`ےJltpfے`btlnXv`fpv㒐bHAdrtnvpQr˂p|ZdQfpvbHAdrtnvppZHA|ZdQf~fpbHAZdrtAvpfr˂p|ZdQbfpvbHAZdrtAvpfr˂p|ZdQbXv`pHAXQJ`tbdvpfHr˂pZdQbtfpvbHAZpdrtAvpfHr˂pZdQbtfpvfHfpQJ`ےvXnۅvp`f~HbHAZbdQZ|JXQrJtArdf~HnrXQJ`Zp˂AJltfH~ˑZHAbbtlnXv`Zp˂AJltfH~bے`btl|vnXp˂rJltH~fZHAbtlJnXv`p˂rJltH~fZHAbtlJvnXےbHAQZ|d~f`ZHAbۉlJtnXv`ˑ˂rXJlt~f`ZHAbۉlJtnXv`˝vnbHAZpvpfHvXnfpvp˂rltbZHAbۂ|ZdQfpvےHArXQJ`ۉbdQZ|f`vXے`JXJtArdf~HrXQJ`ۉbdQZ|f`vXJXQHAbZdQbtv`fXQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXnے`JXQtArdv`fZp˂rtAJlvXn`JXQArd|f~HQJ`ےbdQZ|vXn`JXQArd|f~HrXQJ`ۑ˂rX~f`vpfHnXv`XQJ`ےdQZ|`JXQbtlnXv`Zp˂JltdtAnvpQr˂p|ZdQfpvbHAdrtnvpے`JXlJt~HfpbHAZdrtAvpfr˂p|ZdQbfpvbHAZdrtAvpfr˂p|ZdQb~HfprXQJ`tbQZvpfHr˂pZdQbtfpvbHAZpdrtAvpfHr˂pZdQbtfpv㒐HAZpQJ`ےvXn~f`f~HbHAZdrtAJr˂pJtArdf~HrXQJ`ۉbdQZ|JltfH~ˑZHAbbtlnXv`Zp˂AJltfH~Qr˂pArd|vnXp˂rJltH~fZHAbtlJnXv`p˂rJltH~fZHAbtlJvnXےbHAdrtA~f`ZHAbۉlJtnXv`ˑ˂rXJlt~f`ZHAbۉlJtnXv`ˑ˂rXJltdvp`vXvXnfpvp˂rltbZHAbۂ|ZdQfpvbHAdrtbnvpf`vXے`JXJtArdf~HrXQJ`ۉbdQZ|f`vXZHAbZdQbtv`ffXQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXnے`JXQtArdv`fZp˂JltvXn`JXQArd|f~HQJ`ےbdQZ|vXn`JXQArd|f~HQJ`ےrtAJlnvpvpfHnXv`XQJ`ےdQZ|``JXQbtlnXv`Zp˂AJltfHnvpQr˂p|ZdQfpvbHAdrtnvpے`JXlJtpvnbHAZdrtAvpfr˂p|ZdQbfpvbHAZdrtAvpfr˂p|ZdQb~HXvbHAZbdQZ|vpfHr˂pZdQbtfpvbHAZpdrtAvpfHr˂pZdQbtfpvbHAZptbdfH~~vpf~HbHAZvXnr˂pZJtArdf~HrXQJ`ۉbdQZ|f`vXfے`JXZHAbtlnXv`Zp˂AJltfH~Qr˂pArdtrXQJ`p˂rJltH~fZHAbtlJnXv`p˂rJltH~fZHAbtlJ`f~p˂rdrtA~f`ZHAbۉlJtnXv`ˑ˂rXJlt~f`ZHAbۉlJtnXv`ˑ˂rXQZ|df`vXfے`fpvp˂rvpfHAb`J|ZdQfpvbHAdrtnvpQr˂p`JXQJtArdf~HrXQJ`ۉbdQZ|f`vX`JXQlJfpےHAZXQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXnے`JXQtArdHfpvXQJ`ےJltvXn`JXQArd|f~HQJ`ےbdQZ|vXn`JXQArd|f~HQJ`ےrtAJlnvpJXQrZnXv`XQJ`ے~f`XQr˂btlnXv`Zp˂AJltfH~ˑZHAbrbtl|ZdQfpvbHAdrtnvpr˂pvnvp˂rJltdtAJvpfr˂p|ZdQbfpvbHAZdrtAvpfr˂p|ZdQbnXvbHAZbdQZ|vpfHr˂pZdQbtfpvbHAZpdrtAvpfHr˂pZdQbtfpvbHAZptbdfH~HAbےf~HbHAZvXnpZHAbJtArdf~HrXQJ`ۉbdQZ|f`vXے`JXJtAdbtlnXv`Zp˂AJltfH~ZHAbۍf~HXQJ`ےbdQZ|ltbH~fZHAbtlJnXv`p˂rJltH~fZHAbtlJ`f~p˂rrAJl~f`ZHAbۉlJtnXv`ˑ˂rXJlt~f`ZHAbۉlJtnXv`ˑ˂rXQZ|l畀vp`JXQrfpvp˂rvp`vے`J|ZdQfpvbHAdrtnvpQr˂p|ZdQJfpvfHrXQJ`ۉbdQZ|f`vX`JXQfpvbHAZdrtAnvp`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXnے`JXQtArdHfpvXQJ`ptbdQvXn`JXQArd|f~HQJ`ےbdQZ|vXn`JXQArd|f~HQJ`ےtbdQfH~ˀ˂pZnXv`XQJ`ےXnvXQr˂btlnXv`Zp˂AJltfH~ˑZHAbbtlnXv`fpv㒐bHAdrtnvpr˂p`nXv`p˂rJltfHfvpfr˂p|ZdQbfpvbHAZdrtAvpfr˂p|ZdQb~H˂rXQZ|dvpfHr˂pZdQbtfpvbHAZpdrtAvpfHr˂pZdQbtfpvbHAZpZ|df`vXHAbے`JXQrrd|~HfJ`ےdQZ|tbn~f`HAbےlJtAXv`f˂rXQltb~f`˂pZd|ZnXv`rXQtbd~f`Abے`lJtAv`frXQtbd~f`Qr˂pۑp`ZpfH~ㅀ˂pZAZdQbtpvnbHAZpdrtAJvpfvXn`JXQrrd|~HfJ`ےdQZ|vXnHAbےdQbt璍ffpJ`ےQZ|dvXnہJXQrrd|~HfpJ`ےQZ|dvXnۑZHAbQXb㉀f۝`vb`JXlJtAXv`f˂rXQltbHf`vpfے˂pZZdQbtpvnbHAZpdrtAJvpfH`JXQrlJtArvnrXbHAZp˙rtAJlvpfH˂pZHZdQbtvnXbHAZp˙rtAJlvpfHے`JXۑpJAHrXnvˍQr˂prd|~HfJ`ےdQZ|vXn`JXQrHAے`lJtAXv`f˂rXQltb~f`˂p`dtlQJ`ےrXQtbd~f`Abے`lJtAv`frXQtbd~f`QHAb󙐂ˁ`Zp|drZHAbZdQbtpvnbHAZpdrtAJvpfH˂pZJXQrbrd|~HfJ`ےdQZ|vXnJXQrJfpvHAZpJ`ےJlQZ|dvXnہJXQrrd|~HfpJ`ےQZ|dvXnے`JXQQXb㉀QtJlے`JXlJtAXv`f˂rXQltb~f`HAbےtlJZdQbtpvnbHAZpdrtAJvpfH˂pZHAnvfrXQtbdtAJlvpfH˂pZHZdQbtvnXbHAZp˙rtAJlvpfHr˂pۑpJAHtbAdZQr˂prd|~HfJ`ےdQZ|vXn`JXQrtAd|lJfXv`f˂rXQltb~f`bے`~HfpJ`ےQZ|dtbn~f`Abے`lJtAv`frXQtbd~f`ZHAbېf۝`v|drZHAbZdQbtpvnbHAZpdrtAJvpfH˂pZZdQbtpvnHfpJ`ےdQZ|vXnJXQrvnXbHAZp˙rtAJlvpfHvXnہJXQrrd|~HfpJ`ےQZ|dvXnے`JXQXnvˍQtJlJQrlJtAXv`f˂rXQltb~f`HAbےlJtAXv`fvnrbHAZpdrtAJvpfH˂p`Jv`frXQtbdf`vpfے`˂pZHZdQbtvnXbHAZp˙rtAJlvpfHr˂p`pfH~tbAdZ˂pZHArd|~HfJ`ےdQZ|vXn`JXQrrd|~HfXQJ`ے˂rXQltb~f`XQrbt~HfpJ`ےQZ|dvXnہJXQrAے`lJtAv`frXQtbd~f`JXQrf۝`v|drbے`ZdQbtpvnbHAZpdrtAJvpfH˂pZZdQbtpvnHAZpJ`ےJdQZ|vXnl|ZvnXbHAZp˙rtAJlvpfH˂pZHJXQrbtrd|~HfpJ`ےQZ|dvXnۉ˂pZHXnvˍQtJlJXQrlJtAXv`f˂rXQltb~f`HAbےlJtAXv`f˂rXQltbdtAJlvpfHdQbt璕v`f~rXQtbd~f`Abے`lJtZdQbtvnXbHAZp˙rtAJlvpfHAbے`pfH~tbAdZ˂pZHArd|~HfJ`ےdQZ|vXn`JXQrrd|~HfJ`ےdQZ|tbn~f`lJtArfpvJ`ےQZ|dvXnہJXQrAd|lJfpv`frXQtbd~f`JXQrf۝`v|drbے`ZdQbtpvnbHAZpdrtAJvpfH˂pZZdQbtpvnbHAZpdrtAJvpfvXnd|ZnXv`bHAZp˙rtAJlvpfH˂pZHZdQbtvnXHfpJ`ےQZ|dvXnۉ˂p`ZXnvˍQtJlJXQrlJtAXv`f˂rXQltb~f`HAbےlJtAXv`f˂rXQltbHf`vpfےdQbtf~HrXQtbd~f`Abے`lJtAv`fvnrXbHAZp˙rtAJlvpfHQXb㉀pfH~tbAdZZHAbrd|~HfJ`ےdQZ|vXn`JXQrrd|~HfJ`ےdQZ|vXn`JXQHAl|ZdQfpvJ`ےQZ|dvXnہJXQrrd|~HfpQJ`ےrXQtbd~f`ۑpJAHrf۝`v|dr`JXQZdQbtpvnbHAZpdrtAJvpfH˂pZZdQbtpvnbHAZpdrtAJvpfHbے`btlnXv`bHAZp˙rtAJlvpfH˂pZHZdQbtvnXHAZpJ`ےJlQZ|dvXn󙐂ˁ`ZXnvˍQtJlr˂plJtAXv`f˂rXQltb~f`HAbےlJtAXv`f˂rXQltb~f`JXQrJtArdf~HrXQtbd~f`Abے`lJtAv`frXQtbdtAJlvpfHQXb㉀pfH~tbAdZZHAbrd|~HfJ`ےdQZ|vXn`JXQrrd|~HfJ`ےdQZ|vXn˂pZHA|ZdQfvnXJ`ےQZ|dvXnہJXQrrd|~HfpJ`ےQZ|dtbn~f`ۑp`ZQf۝`v|dr`JXQZdQbtpvnbHAZpdrtAJvpfH˂pZZdQbtpvnbHAZpdrtAJvpfHbے`btlv`fbHAZp˙rtAJlvpfH˂pZHZdQbtvnXbHAZp˙rtAJlvpfHvXnXb㉀ۑXnvˍQtJlr˂pZlJtAXv`f˂rXQltb~f`HAbےlJtAXv`f˂rXQltb~f`JXQrJtArd~HfpۂrXQtbd~f`Abے`lJtAv`frXQtbdf`vpfZHpJAHrpfH~tbAdZAb`Jrd|~HfJ`ےdQZ|vXn`JXQrrd|~HfJ`ےdQZ|vXn˂p`JtlJvnXJ`ےQZ|dvXnہJXQrrd|~HfpJ`ےQZ|dvXnAbے`ˁ`ZQf۝`v|drXQr˂ZdQbtpvnbHAZpdrtAJvpfH˂pZZdQbtpvnbHAZpdrtAJvpfHXQr˂tArdv`fbHAZp˙rtAJlvpfH˂pZHZdQbtvnXbHAZp˙rtAJlvpfHJXQrXb㉀ۑXnvˍQtJlpZHAblJtAXv`f˂rXQltb~f`HAbےlJtAXv`f˂rXQltb~f`pZHAb|ZdQb~HfpۂrXQtbd~f`Abے`lJtAv`frXQtbd~f`˂pZHpJAHrpfH~tbAdZے`Jrd|~HfJ`ےdQZ|vXn`JXQrrd|~HfJ`ےdQZ|vXnے`JtlJvnvfJ`ےQZ|dvXnہJXQrrd|~HfpJ`ےQZ|dvXnAbے`ۑpJf۝`v|drXQr˂ZdQbtpvnbHAZpdrtAJvpfH˂pZZdQbtpvnbHAZpdrtAJvpfHXQr˂tArd~HfbHAZp˙rtAJlvpfH˂pZHZdQbtvnXbHAZp˙rtAJlvpfHJXQrAHr󙐂XnvˍQtJlpZA`lJtAXv`f˂rXQltb~f`HAbےlJtAXv`f˂rXQltb~f`pZHAb|ZdQtApvnrXQtbd~f`Abے`lJtAv`frXQtbd~f`˂p`ˁ`ZQXbpfH~tbAdZJXQrbrd|~HfJ`ےdQZ|vXn`JXQrrd|~HfJ`ےdQZ|vXn˂prd|Xv`fJ`ےQZ|dvXnہJXQrrd|~HfpJ`ےQZ|dvXnJXQr㉀ۑpJf۝`v|drtlJZdQbtpvnbHAZpdrtAJvpfH˂pZZdQbtpvnbHAZpdrtAJvpfHZHAbZdQbt~HfbHAZp˙rtAJlvpfH˂pZHZdQbtvnXbHAZp˙rtAJlvpfHpZHAAHr󙐂XnvˍQtJltAd|lJfXv`f˂rXQltb~f`HAbےlJtAXv`f˂rXQltb~f`ے`JXQlJtApvnrXQtbd~f`Abے`lJtAv`frXQtbd~f`bے`ˁ`ZQXApfH~tbAdZZdQbtpvnHfpJ`ےdQZ|vXn`JXQrrd|~HfJ`ےdQZ|vXnr˂prd|Xv`fJ`ےQZ|dvXnہJXQrrd|~HfpJ`ےQZ|dvXnJXQrHr󙐂ˁf۝`v|drlJtAXv`fvnrbHAZpdrtAJvpfH˂pZZdQbtpvnbHAZpdrtAJvpfHZHAbZdQbt~fpvbHAZp˙rtAJlvpfH˂pZHZdQbtvnXbHAZp˙rtAJlvpfHpZHA`ZQXbXnvˍQtJlrd|~HfXQJ`ے˂rXQltb~f`HAbےlJtAXv`f˂rXQltb~f`ے`JXQl|ZnXv`rXQtbd~f`Abے`lJtAv`frXQtbd~f`b˂pۑpJApfH~tbAdZZdQbtpvnHAZpJ`ےJdQZ|vXn`JXQrrd|~HfJ`ےdQZ|vXnHAbےdQbt璍f~HJ`ےQZ|dvXnہJXQrrd|~HfpJ`ےQZ|dvXnۑZHAbHr󙐂ˁf۝`v|drlJtAXv`f˂rXQltbdtAJlvpfH˂pZZdQbtpvnbHAZpdrtAJvpfH`JXQrlJtArfpvbHAZp˙rtAJlvpfH˂pZHZdQbtvnXbHAZp˙rtAJlvpfHے`JX`ZQXbXnvˍQtJltJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKK \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv33_1.dat b/vendor/endroid/qr-code/assets/data/qrv33_1.dat new file mode 100644 index 000000000..128d06bae --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv33_1.dat @@ -0,0 +1,297 @@ +}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrpopopopoopopopopnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSSSSSSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:78787878878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvstststststststsrqrqrqrqrpopopopoopopopopnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:77777787877777876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststqrqrqrqrqrqrqrqrpopopopoopopopopnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:87878787878787656565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!~}~}~}~}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststqrqrqrqrqrqrqrqrooooopopopopopopnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:87878787656565656565656565656543434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!}~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststqrqrqrqrqrqrqrqropopopopooooooponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:9:9:9:87878787656565656565656543434343434343434343432121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststqrqrqrqrqrqrqrqropopopoppopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSSSSSSTSTSSSSSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:9:987878878787876565656565656565434343434343434321212121212121212121210/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststqrqrqrqrqrqrqrqropopopoppopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:78777777878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvuvuvuvuvststststqrqrqrqrqrqrqrqropopopoppopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUSTSTSTSTQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:87878787878777776565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvutstststststststqrqrqrqrqrqrqrqropopopoppopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:87878787787878786565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqropoooooopopooooonmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUTSTSSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:87878787787878786565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSSSSSSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;<;<9:9:9:9:87878787787878786565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrpopopoponmnmnmnmnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUSTSTSTSTSTSTSSSSQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<;<;<;:9:9:9:9:9:87878787787878786565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqrqrpopopoponmnmnmnmnmnmnmnmlklklklklklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUSTSTSTSTSSTSTSTSQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:87878777787878786565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrqrqrqpoppopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUSTSTSTSTTSTSTSTSQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:77787878787878776565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"! }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqropopoooopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUSTSTSTSTTSTSTSTSQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:78787878777787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!    }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqroopopopopopopooonmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWVUVUVUVUVUSTSTSTSTTSTSTSTSQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABABABABABA@?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:78787878878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!    }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrpopopopoooopopopnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUSTSTSTSSTSTSTSTSQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>;<;<;<;<9:9:9:9:9:9:9:9:78787878878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!    }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvststststststststqrqrqrqrpopopopoopopopopnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUSSSSTSTSTSTSTSTSQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<9:9:9:9:9:9:9:9:78787878878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!                         + + + + + + + +                 + + + + + + + +                 + + + + + + + +                  + + + + + + + +                   + + + + + + + +                 + + + + + + + + + +               + + + + + + + + + +              + + + + + + + +             + + + + + + + +             + + + + + + + +             + + + + + + + +             + + + + + + + +             + + + + + + + +             + + + + + + + +             + + + + + + + +             + + + + + + + +             + + + + + + + +             + + + + + + + +LLKKJJII UUVVWWXX00//..--33445566KJJIIHHG TUUVVWWXEDDCCBBALMMNNOOPMLLKKJJIDEEFFGGHUTTSSRRQ + + <==>>??@]\\[[ZZY45566778|}}~~eddccbba,--..//0tuuvvwwxcbbaa``_ + + OPPQQRRS~~}}100//..- eeffgghh||{{zzyy44332211]]^^__``<<;;::99 UUVVWWXXDDCCBBAAMMNNOOPPLLKKJJIIEEFFGGHHTTSSRRQQ + + ==>>??@@MMLLKKJJeeffgghhmmllkkjj -..//001uvvwwxxylkkjjiih$##""!! %&&''(()mnnooppqtssrrqqp,++**))( !effgghhi|{{zzyyx43322110]^^__``a<;;::998 UVVWWXXYDCCBBAA@ MNNOOPPQ=7766554#$$%%&&'z{{||}}~]\\[[ZZY + +>>??@@AA[[ZZYYXX66778899~~ccbbaa``..//0011vvwwxxyykkjjiihh##""!! &&''(())nnooppqqssrrqqpp++**))(( !!ffgghhii{{zzyyxx33221100^^__``aaHHGGFFEEYYZZ[[\\,,++**))77==>>??GFFEEDDCXYYZZ[[\A@@??>>= + + PQQRRSSTIHHGGFFEHIIJJKKLQPPOONNM @AABBCCDYXXWWVVU 899::;;>== + + QQRRSSTTHHGGFFEEIIJJKKLLPPOONNMMAABBCCDDIIHHGGFFiijjkklliihhggff12233445yzz{{||}hggffeed )**++,,-qrrssttupoonnmml(''&&%%$!""##$$%ijjkkllmxwwvvuut0//..--,abbccdde~~}}|87766554YZZ[[\\]@??>>==< + + QRRSSTTU43322110'(())**+~YXWVUTSS BBCCDDEEWWVVUUTT ::;;<<==__^^]]\\22334455zz{{||}}ggffeedd**++,,--rrssttuuoonnmmll''&&%%$$""##$$%%jjkkllmmwwvvuutt//..--,,bbccddeeDDCCBBAA]]^^__``~~}}||((''&&%%@@AABBCCCBBAA@@?\]]^^__`=<<;;::9 TUUVVWWXEDDCCBBALMMNNOOPMLLKKJJIDEEFFGGHUTTSSRRQ + + <==>>??@]\\[[ZZY45566778|}}~~[ZZYYSSR \]]^^__`xxwwvvuu)((''&&%%%&&''((mmnnooppttssrrqq,,++**)) eeffgghh||{{zzyy44332211]]^^__``<<;;::99 UUVVWWXXDDCCBBAAMMNNOOPPLLKKJJIIEEFFGGHHEEDDCCBBmmnnoouueeddccbb56677889}~~dccbbaa`-..//001uvvwwxxylkkjjiih$##""!! %&&''(()mnnooppqtssrrqqp,++**))( !effgghhi|{{zzyyx43322110]^^__``a<;;::998 UVVWWXXY0//..--,+,,--../RRQQPPOOFFGGHHIISSRRQQPP + + >>??@@AA[[ZZYYXX66778899~~ccbbaa``..//0011vvwwxxyykkjjiihh##""!! &&''(())nnooppqqssrrqqpp++**))(( !!ffgghhii@@??>>==aabbccdd{{zzyyxx$$##""!!DDEEFFGG?>>==<;:`aabbccd~~}98877665XYYZZ[[\A@@??>>= + + PQQRRSSTIHHGGFFEHIIJJKKLQPPOONNM @AABBCCDYXXWWVVU 899::;;>== + + QQRRSSTTHHGGFFEEIIJJKKLLAA@@??>>!!""vvwwxxyyaa``__^^9::;;<<=`__^^]]\12233445yzz{{||}hggffeed )**++,,-qrrssttupoonnmml(''&&%%$!""##$$%ijjkkllmxwwvvuut0//..--,abbccdde~~}}|87766554YZZ[[\\],++**))(/0011223NNMMLLKKJJKKLLMMOONNMMLLBBCCDDEEWWVVUUTT ::;;<<==__^^]]\\22334455zz{{||}}ggffeedd**++,,--rrssttuuoonnmmll''&&%%$$""##$$%%jjkkllmm<<;;::99 eeffgghhwwvvuuooHHIIJJKK98776655 deeffggh}||{{zzy54433221\]]^^__`=<<;;::9 TUUVVWWXEDDCCBBALMMNNOOPMLLKKJJIDEEFFGGHUTTSSRRQ + + <==>>??@NMMLLKKJ deeffgghnmmllkkj! --..//00uuvvwwxxllkkjjii$$##""!!%%&&''((mmnnooppttssrrqq,,++**)) eeffgghh||{{zzyy44332211]]^^__``<<;;::99 UUVVWWXXDDCCBBAAMMNNOOPP==776655##$$%%&&zz{{||}}]]\\[[ZZ +=>>??@@A\[[ZZYYX56677889}~~dccbbaa`-..//001uvvwwxxylkkjjiih$##""!! %&&''(()mnnooppqtssrrqqp,++**))( !effgghhi|{{zzyyx43322110]^^__``a~~}}||{(''&&%%$34455667JJIIHHGG NNOOPPQQKKJJIIHHFFGGHHIISSRRQQPP + + >>??@@AA[[ZZYYXX66778899~~ccbbaa``..//0011vvwwxxyykkjjiihh##""!! &&''(())nnooppqq~~}}88776655!!""##$$iijjkkllnnmmllkkLLMMNNOO44332211 !!""##$hiijjkklyxxwwvvu100//..-`aabbccd~~}98877665XYYZZ[[\A@@??>>= + + PQQRRSSTIHHGGFFEHIIJJKKLQPPOONNM @AABBCCDJIIHHGGFhiijjkkljiihhggf11223344yyzz{{||hhggffee ))**++,,qqrrssttppoonnmm((''&&%%!!""##$$iijjkkllxxwwvvuu00//..--aabbccdd~~}}88776655YYZZ[[\\@@??>>== + + QQRRSSTT44332211''(())**~~YYXWVUTS + ABBCCDDEXWWVVUUT 9::;;<<=`__^^]]\12233445yzz{{||}hggffeed )**++,,-qrrssttupoonnmml(''&&%%$!""##$$%ijjkkllmxwwvvuut0//..--,abbccdde{zzyyxxw$##""!!7==>>??@FFEEDDCC + + RRSSTTUUGGFFEEDDJJKKLLMMOONNMMLLBBCCDDEEWWVVUUTT ::;;<<==__^^]]\\22334455zz{{||}}ggffeedd**++,,--rrssttuu||{{zzyy44332211%%&&''((mmnnooppjjiihhggPPQQRRSS~~}}|00//..--$%%&&''(lmmnnooputtssrrq-,,++**) deeffggh}||{{zzy54433221\]]^^__`=<<;;::9 TUUVVWWXEDDCCBBALMMNNOOPMLLKKJJIDEEFFGGHFEEDDCCBlmmnnooufeeddccb55667788}}~~ddccbbaa--..//00uuvvwwxxllkkjjii$$##""!!%%&&''((mmnnooppttssrrqq,,++**)) eeffgghh||{{zzyy44332211]]^^__``<<;;::99 UUVVWWXX00//..--++,,--..SRRQQPPOEFFGGHHITSSRRQQP + + =>>??@@A\[[ZZYYX56677889}~~dccbbaa`-..//001uvvwwxxylkkjjiih$##""!! %&&''(()mnnooppqtssrrqqp,++**))( !effgghhiwvvuuoon@AABBCCDBBAA@@??VVWWXXYYCCBBAA@@ NNOOPPQQKKJJIIHHFFGGHHIISSRRQQPP + + >>??@@AA[[ZZYYXX66778899~~ccbbaa``..//0011vvwwxxyyxxwwvvuu00//..--))**++,,qqrrssttffeeddcc YYZZ[[\\|{{zzyyx,,++**))())**++,pqqrrsstqppoonnm)((''&&% !!""##$hiijjkklyxxwwvvu100//..-`aabbccd~~}98877665XYYZZ[[\A@@??>>= + + PQQRRSSTIHHGGFFEHIIJJKKLBAA@@??>!!"uvvwwxxybaa``__^99::;;<<``__^^]]11223344yyzz{{||hhggffee ))**++,,qqrrssttppoonnmm((''&&%%!!""##$$iijjkkllxxwwvvuu00//..--aabbccdd~~}}88776655YYZZ[[\\,,++**))//001122ONNMMLLKIJJKKLLMPOONNMMLABBCCDDEXWWVVUUT 9::;;<<=`__^^]]\12233445yzz{{||}hggffeed )**++,,-qrrssttupoonnmml(''&&%%$!""##$$%ijjkkllmnmmllkkjDEEFFGGH>>==<;:9ZZ[[\\]]??>>==<< + + RRSSTTUUGGFFEEDDJJKKLLMMOONNMMLLBBCCDDEEWWVVUUTT ::;;<<==__^^]]\\22334455zz{{||}}ttssrrqq,,++**))--..//00uuvvwwxxbbaa``__ + + ]]^^__``xwwvvuut((''&&%%,--..//0tuuvvwwxmllkkjji%$$##""!$%%&&''(lmmnnooputtssrrq-,,++**) deeffggh}||{{zzy54433221\]]^^__`=<<;;::9 TUUVVWWXEDDCCBBALMMNNOOP>==77665"##$$%%&yzz{{||}^]]\\[[Z ==>>??@@\\[[ZZYY55667788}}~~ddccbbaa--..//00uuvvwwxxllkkjjii$$##""!!%%&&''((mmnnooppttssrrqq,,++**)) eeffgghh||{{zzyy44332211]]^^__``~~}}||((''&&%%33445566KJJIIHHG MNNOOPPQLKKJJIIHEFFGGHHITSSRRQQP + + =>>??@@A\[[ZZYYX56677889}~~dccbbaa`-..//001uvvwwxxylkkjjiih$##""!! %&&''(()mnnooppqjiihhggfHIIJJKKL87766554^^__``aa;;::9988VVWWXXYYCCBBAA@@ NNOOPPQQKKJJIIHHFFGGHHIISSRRQQPP + + >>??@@AA[[ZZYYXX66778899~~ppoonnmm((''&&%%11223344yyzz{{||^^]]\\[[ + + aabbccddsrqpoonn$$##""!!01122334xyyzz{{|ihhggffe! ())**++,pqqrrsstqppoonnm)((''&&% !!""##$hiijjkklyxxwwvvu100//..-`aabbccd~~}98877665XYYZZ[[\A@@??>>= + + PQQRRSST54433221&''(())*}~~ZYYXWVUT + + AABBCCDDXXWWVVUU 99::;;<<``__^^]]11223344yyzz{{||hhggffee ))**++,,qqrrssttppoonnmm((''&&%%!!""##$$iijjkkllxxwwvvuu00//..--aabbccdd{{zzyyxx$$##""!!77==>>??GFFEEDDC + + QRRSSTTUHGGFFEEDIJJKKLLMPOONNMMLABBCCDDEXWWVVUUT 9::;;<<=`__^^]]\12233445yzz{{||}hggffeed )**++,,-qrrssttufeeddccb LMMNNOOP43322110bbccddee~~}}||77665544ZZ[[\\]]??>>==<< + + RRSSTTUUGGFFEEDDJJKKLLMMOONNMMLLBBCCDDEEWWVVUUTT ::;;<<==llkkjjii$$##""!!55667788}}~~ZZYYSSRReeffgghhmmllkkjj 45566778|}}~~eddccbba,--..//0tuuvvwwxmllkkjji%$$##""!$%%&&''(lmmnnooputtssrrq-,,++**) deeffggh}||{{zzy54433221\]]^^__`=<<;;::9 TUUVVWWX100//..-*++,,--.SSRRQQPPEEFFGGHHTTSSRRQQ + + ==>>??@@\\[[ZZYY55667788}}~~ddccbbaa--..//00uuvvwwxxllkkjjii$$##""!!%%&&''((mmnnooppttssrrqq,,++**)) eeffgghhwwvvuuoo@@AABBCCCBBAA@@? UVVWWXXYDCCBBAA@ MNNOOPPQLKKJJIIHEFFGGHHITSSRRQQP + + =>>??@@A\[[ZZYYX56677889}~~dccbbaa`-..//001uvvwwxxybaa``__^ + + PQQRRSSY~~}}||0//..--, !!ffgghhii{{zzyyxx33221100^^__``aa;;::9988VVWWXXYYCCBBAA@@ NNOOPPQQKKJJIIHHFFGGHHIISSRRQQPP + + >>??@@AAhhggffee 99::;;<>==<;:YZZ[[\\]@??>>==< + + QRRSSTTUHGGFFEEDIJJKKLLMPOONNMMLABBCCDDEXWWVVUUT 9::;;<<=`__^^]]\12233445yzz{{||}^]]\\[[ZYZZ[[\\]{{zzyyxx,++**))(""##$$%%jjkkllmmwwvvuutt//..--,,bbccddee~~}}||77665544ZZ[[\\]]??>>==<< + + RRSSTTUUGGFFEEDDJJKKLLMMOONNMMLLBBCCDDEEddccbbaa==>>??@@MMLLKKJJmmnnoouueeddccbb<==>>??@]\\[[ZZY45566778|}}~~eddccbba,--..//0tuuvvwwxmllkkjji%$$##""!$%%&&''(lmmnnooputtssrrq-,,++**) deeffggh}||{{zzy54433221\]]^^__`~~}}|)((''&&%23344556KKJJIIHHMMNNOOPPLLKKJJIIEEFFGGHHTTSSRRQQ + + ==>>??@@\\[[ZZYY55667788}}~~ddccbbaa--..//00uuvvwwxxllkkjjii$$##""!!%%&&''((mmnnooppjjiihhggHHIIJJKK98776655]^^__``a<;;::998 UVVWWXXYDCCBBAA@ MNNOOPPQLKKJJIIHEFFGGHHITSSRRQQP + + =>>??@@A\[[ZZYYX56677889}~~ZYYSSRRQ +]^^__``awwvvuuts(''&&%%$&&''(())nnooppqqssrrqqpp++**))(( !!ffgghhii{{zzyyxx33221100^^__``aa;;::9988VVWWXXYYCCBBAA@@ NNOOPPQQKKJJIIHHFFGGHHII``__^^]]AABBCCDDIIHHGGFF!!""vvwwxxyyaa``__^^@AABBCCDYXXWWVVU 899::;;>?GGFFEEDD + + QQRRSSTTHHGGFFEEIIJJKKLLPPOONNMMAABBCCDDXXWWVVUU 99::;;<<``__^^]]11223344yyzz{{||hhggffee ))**++,,qqrrssttffeeddcc LLMMNNOO44332211abbccdde~~}}|87766554YZZ[[\\]@??>>==< + + QRRSSTTUHGGFFEEDIJJKKLLMPOONNMMLABBCCDDEXWWVVUUT 9::;;<<=QPPOONNM + abbccdderqpoonnm$##""!! **++,,--rrssttuuoonnmmll''&&%%$$""##$$%%jjkkllmmwwvvuutt//..--,,bbccddee~~}}||77665544ZZ[[\\]]??>>==<< + + RRSSTTUUGGFFEEDDJJKKLLMM\\[[ZZYYEEFFGGHHEEDDCCBB##$$%%&&zz{{||}}]]\\[[ZZ +DEEFFGGHUTTSSRRQ + + <==>>??@]\\[[ZZY45566778|}}~~eddccbba,--..//0tuuvvwwxmllkkjji%$$##""!$%%&&''(lmmnnooputtssrrq-,,++**) deeffgghxwwvvuuo!?@@AABBCCCBBAA@@ UUVVWWXXDDCCBBAAMMNNOOPPLLKKJJIIEEFFGGHHTTSSRRQQ + + ==>>??@@\\[[ZZYY55667788}}~~ddccbbaa--..//00uuvvwwxxbbaa``__ + + PPQQRRSS~~}}|00//..-- !effgghhi|{{zzyyx43322110]^^__``a<;;::998 UVVWWXXYDCCBBAA@ MNNOOPPQLKKJJIIHEFFGGHHITSSRRQQP + + =>>??@@AMLLKKJJIeffgghhimllkkjji..//0011vvwwxxyykkjjiihh##""!! &&''(())nnooppqqssrrqqpp++**))(( !!ffgghhii{{zzyyxx33221100^^__``aa;;::9988VVWWXXYYCCBBAA@@ NNOOPPQQXXWWVVUU IIJJKKLLAA@@??>>''(())**~~YYXWVUTS + HIIJJKKLQPPOONNM @AABBCCDYXXWWVVU 899::;;>==<;YYZZ[[\\@@??>>== + + QQRRSSTTHHGGFFEEIIJJKKLLPPOONNMMAABBCCDDXXWWVVUU 99::;;<<``__^^]]11223344yyzz{{||^^]]\\[[YYZZ[[\\|{{zzyyx,,++**))!""##$$%ijjkkllmxwwvvuut0//..--,abbccdde~~}}|87766554YZZ[[\\]@??>>==< + + QRRSSTTUHGGFFEEDIJJKKLLMPOONNMMLABBCCDDEIHHGGFFEijjkkllmihhggffe22334455zz{{||}}ggffeedd**++,,--rrssttuuoonnmmll''&&%%$$""##$$%%jjkkllmmwwvvuutt//..--,,bbccddee~~}}||77665544ZZ[[\\]]??>>==<< + + RRSSTTUUTTSSRRQQ + + MMNNOOPP==776655++,,--..SRRQQPPOLMMNNOOPMLLKKJJIDEEFFGGHUTTSSRRQ + + <==>>??@]\\[[ZZY45566778|}}~~eddccbba,--..//0tuuvvwwxmllkkjji%$$##""!$%%&&''(lmmnnoopkjjiihhgGHHIIJJK:9877665]]^^__``<<;;::99 UUVVWWXXDDCCBBAAMMNNOOPPLLKKJJIIEEFFGGHHTTSSRRQQ + + ==>>??@@\\[[ZZYY55667788}}~~ZZYYSSRR ]]^^__``xwwvvuut((''&&%%%&&''(()mnnooppqtssrrqqp,++**))( !effgghhi|{{zzyyx43322110]^^__``a<;;::998 UVVWWXXYDCCBBAA@ MNNOOPPQLKKJJIIHEFFGGHHIEDDCCBBAmnnoouuveddccbba66778899~~ccbbaa``..//0011vvwwxxyykkjjiihh##""!! &&''(())nnooppqqssrrqqpp++**))(( !!ffgghhii{{zzyyxx33221100^^__``aa;;::9988VVWWXXYYPPOONNMM + + QQRRSSTT44332211//001122ONNMMLLK + + PQQRRSSTIHHGGFFEHIIJJKKLQPPOONNM @AABBCCDYXXWWVVU 899::;;>== + + QQRRSSTTHHGGFFEEIIJJKKLLPPOONNMMAABBCCDDXXWWVVUU 99::;;<>==< + + QRRSSTTUHGGFFEEDIJJKKLLMA@@??>>=!!""#vwwxxyyza``__^^]::;;<<==__^^]]\\22334455zz{{||}}ggffeedd**++,,--rrssttuuoonnmmll''&&%%$$""##$$%%jjkkllmmwwvvuutt//..--,,bbccddee~~}}||77665544ZZ[[\\]]~~}}||{{zzyyxxww##""!!==>>??@@FEEDDCCB + RSSTTUUVGFFEEDDCJKKLLMMNONNMMLLKBCCDDEEFWVVUUTTS :;;<<==>_^^]]\\[23344556z{{||}}~ZYYSSRRQeffgghhia``__^^]@AABBCCDvvuuoonnAABBCCDDBAA@@??>VWWXXYYZCBBAA@@? +NOOPPQQRKJJIIHHGFGGHHIIJSRRQQPPO + + >??@@AAB[ZZYYXXW6778899:~QPPOONNMijjkkllm]\\[[ZZYDEEFFGGHmmllkkjjEEFFGGHH>==<;:98Z[[\\]]^?>>==<<; + RSSTTUUVGFFEEDDCJKKLLMMNONNMMLLKBCCDDEEFWVVUUTTS :;;<<==>MLLKKJJImnnoouuvYXXWWVVU HIIJJKKLiihhggffIIJJKKLL77665544^__``aab;::99887VWWXXYYZCBBAA@@? +NOOPPQQRKJJIIHHGFGGHHIIJSRRQQPPO + + >??@@AABIHHGGFFE!!""#vwwxxyyzUTTSSRRQ + + LMMNNOOPeeddccbb MMNNOOPP33221100bccddeef~~}}||{76655443Z[[\\]]^?>>==<<; + RSSTTUUVGFFEEDDCJKKLLMMNONNMMLLKBCCDDEEFEDDCCBBA#$$%%&&'z{{||}}~QPPOONNM + + PQQRRSSTaa``__^^ + + QQRRSSYY~~}}||{//..--,, !!"fgghhiij{zzyyxxw3221100/^__``aab;::99887VWWXXYYZCBBAA@@? +NOOPPQQRKJJIIHHGFGGHHIIJA@@??>>='(())**+~MLLKKJJI TUUVVWWX]]\\[[ZZZZ[[\\]]{zzyyxxw++**))(("##$$%%&jkkllmmnwvvuutts/..--,,+bccddeef~~}}||{76655443Z[[\\]]^?>>==<<; + RSSTTUUVGFFEEDDCJKKLLMMN=7766554+,,--../IHHGGFFEXYYZZ[[\YYSSRRQQ + +^^__``aawvvuutsr''&&%%$$&''(())*nooppqqrsrrqqppo+**))((' !!"fgghhiij{zzyyxxw3221100/^__``aab;::99887VWWXXYYZCBBAA@@? +NOOPPQQR43322110/0011223EDDCCBBA\]]^^__`PPOONNMM bbccddeeqpoonnmm##""!! *++,,--.rssttuuvonnmmllk'&&%%$$#"##$$%%&jkkllmmnwvvuutts/..--,,+bccddeef~~}}||{76655443Z[[\\]]^?>>==<<; + RSSTTUUV0//..--,34455667A@@??>>=`aabbccdLLKKJJIIffgghhiillkkjjii.//00112vwwxxyyzkjjiihhg#""!! &''(())*nooppqqrsrrqqppo+**))((' !!"fgghhiij{zzyyxxw3221100/^__``aab;::99887VWWXXYYZ,++**))(7==>>??@=<<;;::9 deeffgghHHGGFFEEjjkkllmmhhggffee23344556z{{||}}~gffeeddc*++,,--.rssttuuvonnmmllk'&&%%$$#"##$$%%&jkkllmmnwvvuutts/..--,,+bccddeef~~}}||{76655443Z[[\\]]^~~}}||{(''&&%%$@AABBCCD~~}98877665 !!""##$hiijjkklDDCCBBAAnnoouuvvddccbbaa6778899:~cbbaa``_.//00112vwwxxyyzkjjiihhg#""!! &''(())*nooppqqrsrrqqppo+**))((' !!"fgghhiij{zzyyxxw3221100/^__``aab{zzyyxxw$##""!!DEEFFGGH}||{{zzy54433221$%%&&''(lmmnnoop@@??>>==!!""##wwxxyyzz``__^^]] :;;<<==>_^^]]\\[23344556z{{||}}~gffeeddc*++,,--.rssttuuvonnmmllk'&&%%$$#"##$$%%&jkkllmmnwvvuutts/..--,,+bccddeefwvvuuoonHIIJJKKLyxxwwvvu100//..-())**++,pqqrrsst77665544$$%%&&''{{||}}~~\\[[ZZYY + + >??@@AAB[ZZYYXXW6778899:~cbbaa``_.//00112vwwxxyyzkjjiihhg#""!! &''(())*nooppqqrsrrqqppo+**))((' !!"fgghhiijnmmllkkjLMMNNOOPuttssrrq-,,++**),--..//0tuuvvwwx33221100(())**++XWVUTSSR BCCDDEEFWVVUUTTS :;;<<==>_^^]]\\[23344556z{{||}}~gffeeddc*++,,--.rssttuuvonnmmllk'&&%%$$#"##$$%%&jkkllmmnjiihhggfPQQRRSSYqppoonnm)((''&&%01122334xyyzz{{|//..--,,,,--..//RQQPPOONFGGHHIIJSRRQQPPO + + >??@@AAB[ZZYYXXW6778899:~cbbaa``_.//00112vwwxxyyzkjjiihhg#""!! &''(())*nooppqqrfeeddccb YZZ[[\\]mllkkjji%$$##""!45566778|}}~~++**))((00112233NMMLLKKJJKKLLMMNONNMMLLKBCCDDEEFWVVUUTTS :;;<<==>_^^]]\\[23344556z{{||}}~gffeeddc*++,,--.rssttuuvbaa``__^ + + +]^^__``aihhggffe! 899::;;<''&&%%$$44556677JIIHHGGF +NOOPPQQRKJJIIHHGFGGHHIIJSRRQQPPO + + >??@@AAB[ZZYYXXW6778899:~cbbaa``_.//00112vwwxxyyz^]]\\[[Z + abbccddeeddccbba<==>>??@fpvfpvXQJ`ےXQJ`ےltbbdQZ|pfH~~vJXQrbtlbtlf~Hf~HےHAbHAJltAJltJltf`vXf`vXQr˂pQr˂pbtlbtlf~Hf~HbHAbHAAJltAJltf`vXf`vXJXQrr˂p`|Zdf~HnXv`bHAZbHAZJltJlt`vXn`vXnr˂pr˂ptlJtlJf~Hf~HےHAZbHAZJltJltltb`vXn`vXnr˂pr˂ptlJtlJHfpvJ`ےbHAZtbdQZrAJlvXnvXnr˂pr˂plJtlJtf~Hf~HbHAZpbHAZpJltJltvXnvXnr˂pr˂plJtlJtf~Hf~HHAZpbHAZpJltddrtAnvpvpfHZHAbXQr˂lJtAlJtA~Hf~HfbHAZpbHAZpltbltbvXnvXn˂pZ˂pZlJtAlJtA~Hf~HfbHAZpbHAZpltbltbvXnvXnnXv`nXv`bHAZbHAZdQZ|drtAvppfے`˂pZHJtArdJtArdfpvfpvZp˂Zp˂bdQZ|bdQZ|bnvpnvpnvpZHAbZHAJtArdJtArdfpvfpvZp˂Zp˂bdQZ|bdQZ|nvpnvp˂pZHJXQrQtArdfpvf~Hp˂rp˂rbdQZ|bdQZ|vpfvpfZHAbZHAbtArdtArdfpvfpvp˂rp˂rbdQZ|bdQZ|nvpvpfvpfZHAbZHAےtArdtArdnXvbHAZpp˂r|drtbdQvpfHvpfHZHAbZHAbArd|Ard|fpvfpv˂rX˂rXbdQZ|bdQZ|vpfHvpfHZHAbZHAbArd|Ard|fpvfpv˂rX˂rXrtAJlJltfH~~f`JQrpZA`rd|rd|pvnpvn˂rXQ˂rXQdQZ|dQZ|vpfHvpfHHAbےHAbےrd|rd|pvnpvn˂rXQ˂rXQdQZ|dQZ|vpfHvpfHf~Hf~Hp˂rp˂rdrtAJJltfH~JXQrAbے`|ZdQ|ZdQnXv`nXv`rXQJ`rXQJ`ہdrtdrtfHfH~fے`JXے`JX`JXQ|ZdQ|ZdQnXv`nXv`rXQJ`rXQJ`ہdrtdrtfH~fH~Abbtl||ZdQnXv`fpvXQJ`ےXQJ`ےdrtAdrtAH~fH~fے`JXQے`JXQ|ZdQb|ZdQbnXv`nXv`XQJ`ےXQJ`ےdrtAdrtAfHfH~fے`JXQے`JXQ`JXQr|ZdQb|ZdQb`f~˂rXQXQJ`ptAJlZ|d~f`~f``JXQ`JXQZdQbtZdQbtnXv`nXv`QJ`ےQJ`ےdrtAdrtA~f`~f``JXQ`JXQZdQbtZdQbtnXv`nXv`QJ`ےQJ`ےtbdbdQZ|f`vXvXn˂pZHAJXQrbZdQbtZdQbtXv`fXv`fJ`ےJ`ےdrtAJdrtAJ~f`~f``JXQr`JXQrZdQbtZdQbtXv`fXv`fJ`ےJ`ےdrtAJdrtAJ~f`~f`fpvfpvXQJ`ےXQJ`ےltbbdQZ|f`vXZHAbہJXQrbtlbtlf~Hf~HbHAbHAAJltAJltf`vXf`vXQr˂pQr˂prbtlbtlbtlf~HfHbHAbHAAJltAJltf`vXf`vXpZHAZdQbtbtlf~fpۅnXv`bHAZbHAZJltJlt`vXn`vXnr˂pr˂ptlJtlJf~Hf~HbHAZbHAZJltJlt`vXn`vXnr˂pr˂pbtltlJtlJHfpvJ`p˂˂rXQtbdQZrtAJlvXnvXnr˂pr˂plJtlJtf~Hf~HbHAZpbHAZpJltJltvXnvXnr˂pr˂plJtlJtf~Hf~HbHAZpbHAZpQZ|ddrtAnvpvpfHbے`tlJlJtAlJf~HfHfpbHAZpbHAZpltbltbvXnvXn˂pZ˂pZlJtAlJtA~Hf~HfbHAZpbHAZpltbltbvXnvXnnXv`nXv`bHAZbHAZdQZ|lltbnvp`JXQZHAbJtArdJtArdfpvfpvZp˂Zp˂bdQZ|bdQZ|nvpnvpZHAbZHAbJtAdJtArdJfpvfpvfpvZp˂Zp˂bdQZ|bdQZ|nvpnvpbے`lJtJtArdvnXf~fpp˂rp˂rbdQZ|bdQZ|vpfvpfZHAbZHAbtArdtArdfpvfpvp˂rp˂rbdQZ|bdQZ|vpfvpfZHAbZHAbJtAdtArdfpv~HrXQJJ`ے|drtbdQvpfHvpfHZHAbZHAbArd|Ard|fpvfpv˂rX˂rXbdQZ|bdQZ|vpfHvpfHZHAbZHAbArd|Ard|fpvfpv˂rX˂rXrtAJlJltfH~~vpJXQrtAd|rd|pvnpvnvnr˂rXQ˂rXQdQZ|dQZ|vpfHvpfHHAbےHAbےrd|rd|pvnpvn˂rXQ˂rXQdQZ|dQZ|vpfHvpfHf~Hf~Hp˂rp˂rtbdQdQZ|fH~r˂pے`JXQ|ZdQ|ZdQnXv`nXv`rXQJ`rXQJ`ہdrtdrtfH~fH~˙ے`JXے`JX|ZdQ|ZdQnXv`nXv`nrXQJ`rXQJ`rXQJ`ہdrtdtAfH~fH~JXQrArd||ZdQv`fvnXXQJ`ےXQJ`ےdrtAdrtAH~fH~fے`JXQے`JXQ|ZdQb|ZdQbnXv`nXv`XQJ`ےXQJ`ےdrtAdrtAH~fH~fے`JXQے`JXQ|ZdQb|ZdQb~Hffpv`ےbbHAZptAJbdZ|AJl~f`~f``JXQ`JXQZdQbtZdQbtnXv`nXv`QJ`ےQJ`ےdrtAdrtA~f`~f``JXQ`JXQZdQbtZdQbtnXv`nXv`QJ`ےQJ`ےtbdbdQZ|lvpfے`˂pZHAZdQbtZdQbtXv`fXv`fXQJ`ےJ`ےJ`ےJdrtAJdtAJl~f`~f``JXQr`JXQrZdQbtZdQbtXv`fXv`fJ`ےJ`ےdrtAJdrtAJ~f`~f`fpvfpvXQJ`ےXQJ`ےZ|ddrtAJf`vXZHAbr˂pbtlbtlf~Hf~HbHAbHAAJltAJltf`vXf`vXQr˂pQr˂pbtlbtlf~Hf~HےHAbHAJltAJltJltf`vXf`vXpZHAZdQbtbtl|~Hfpv`fbHAZbHAZJltJlt`vXn`vXnr˂pr˂ptlJtlJf~Hf~HbHAZbHAZJltJlt`vXn`vXnr˂pr˂ptlJtlJpvnnXv`HAZp˂˂rXQQZ|dtbvXnvXnr˂pr˂plJtlJtf~Hf~HbHAZpbHAZpJltJltvXnvXnr˂pr˂plJtlJtf~Hf~HbHAZpbHAZpQZ|ltbdfH~JXQrZbے`lJtAlJtA~Hf~HfHAZpbHAZpltbltbtbnvXnvXn˂pZ˂pZlJtAlJtA~Hf~HfbHAZpbHAZpltbltbvXnvXnnXv`nXv`bHAZbHAZrtAJlltbH~f`JXQZHAbJtArdJtArdfpvfpvZp˂Zp˂bdQZ|bdQZ|nvpnvpZHAbZHAbJtArdJtArdfpvfpvZp˂Zp˂bdQZ|bdQZ|bnvpnvpnvpbے`l|ZdQbtvnX~Hfpp˂rp˂rbdQZ|bdQZ|vpfvpfZHAbZHAbtArdtArdfpvfpvp˂rp˂rbdQZ|bdQZ|vpfvpfZHAbZHAbtArdtArdXv`ff~HrXQJJ`ےrtAJlnvpvpfHvpfZHAbZHAے`Ard|Ard|fpvfpv˂rX˂rXbdQZ|bdQZ|vpfHvpfHZHAbZHAbArd|Ard|fpvfpv˂rX˂rXtbdQQZ|df`vXHAbےJXQrrd|rd|pvnpvn˂rXQ˂rXQdQZ|dQZ|vpfvpfHvpfےHAbےHAے`rd|rd|pvnpvn˂rXQ˂rXQdQZ|dQZ|vpfHvpfHf~Hf~Hp˂rp˂rtbdQdQZ|``vXnr˂pZے`JXQ|ZdQ|ZdQnXv`nXv`rXQJ`rXQJ`ہdrtdrtfH~fH~˙ے`JXے`JX|ZdQ|ZdQnXv`nXv`rXQJ`rXQJ`ہdrtdrtfHfH~fے`JXJXQHAbZdQbtlJtv`fvnXXQJ`ےXQJ`ےdrtAdrtAH~fH~fے`JXQے`JXQ|ZdQb|ZdQbnXv`nXv`XQJ`ےXQJ`ےdrtAdrtAH~fH~fے`JXQے`JXQ|ZdQb|ZdQb~Hffpv`ےbbHAXQJtbdfHf`~f``JXQ`JXQJXQrZdQbtZdQbtnXv`nXv`QJ`ےQJ`ےdrtAdrtA~f`~f``JXQ`JXQZdQbtZdQbtnXv`nXv`QJ`ےQJ`ےZ|drtAJlnvp`JXQrZHAbZdQbtZdQbtXv`fXv`fJ`ےJ`ےdrtAJdrtAJHf`~f``JXQr`JXQrJXQrbZdQbtZdQbtXv`fXv`fJ`ےJ`ےdrtAJdrtAJ~f`~f`fpvfpvXQJ`ےXQJ`ےZ|dvXnvpfAb`Jr˂pbtlbtlf~Hf~HbHAbHAAJltAJltf`vXf`vXQr˂pQr˂pbtlbtlf~Hf~HbHAbHAAJltAJltf`vXf`vXQHAbۙے`JXlJtAArd|~Hfvnv`ffbHAZbHAZJltJlt`vXn`vXnr˂pr˂ptlJtlJf~Hf~HbHAZbHAZJltJlt`vXn`vXnr˂pr˂ptlJtlJpvnnXv`HAXQJ``ےJlQZ|dvXnvXnr˂pr˂pbtllJtlJf~HfHfpbHAZpbHAZpJltJltvXnvXnr˂pr˂plJtlJtf~Hf~HbHAZpbHAZprtAJltbdfH~ˀ˂pZ`JXQlJtAlJtA~Hf~HfbHAZpbHAZpltbltbvXnvXn˂pZ˂pZtlJlJtAlJf~HfHfpbHAZpbHAZpltbltbvXnvXnnXv`nXv`bHAZbHAZrtAdQZvpfHH~fXQr˂ZAb`JtArdJtArdfpvfpvZp˂Zp˂bdQZ|bdQZ|nvpnvpZHAbZHAbJtArdJtArdfpvfpvZp˂Zp˂bdQZ|bdQZ|nvpnvp`JXQQr˂prd|ZdQbtXv`fpvnp˂rp˂rbdQZ|bdQZ|vpfvpfZHAbZHAbtArdtArdfpvfpvp˂rp˂rbdQZ|bdQZ|vpfvpfZHAbZHAbtArdtArdXv`ppvnےbHAtbQZrtAJlvpfHvpfHZHAbZHAbJtAd|Ard|fpvfpvvn˂rX˂rXbdQZ|bdQZ|vpfHvpfHZHAbZHAbArd|Ard|fpvfpv˂rX˂rXtbdQQZ|lf`vXHHAbےr˂prd|rd|pvnpvn˂rXQ˂rXQdQZ|dQZ|vpfHvpfHHAbےHAbےtAd|rd|pvnpvnvnr˂rXQ˂rXQdQZ|dQZ|vpfHvpfHf~Hf~Hp˂rp˂r|dr~f``vXnpZHAbJXQr˂|ZdQ|ZdQnXv`nXv`rXQJ`rXQJ`ہdrtdrtfH~fH~˙ے`JXے`JX|ZdQ|ZdQnXv`nXv`rXQJ`rXQJ`ہdrtdrtfH~fH~r˂pZHAbZdQbtlJt~HfrXQJ`XQJ`ےXQJ`ےdrtAdtAJH~fH~fے`JXQے`JXQ|ZdQb|ZdQbnXv`nXv`XQJ`ےXQJ`ےdrtAdrtAH~fH~fے`JXQے`JXQ|ZdQb|ZdQbvnXXv`fZp˂drtAtbQZ~f`~f``JXQ`JXQZdQbtZdQbtnXv`nXv`rXQJ`QJ`ےQJ`ےdrtAdtAJl~f`~f``JXQ`JXQZdQbtZdQbtnXv`nXv`QJ`ےQJ`ےZ|dtbn~f``JXQrZHAbZdQbtZdQbtXv`fXv`fJ`ےJ`ےdrtAJdrtAJ~f`~f``JXQr`JXQrZdQbtZdQbtXv`fXv`fXQJ`ےJ`ےJ`ےJdrtAJdtAJl~f`~f`fpvfpvXQJ`ےXQJ`ےtAJlvXnvp`ے`JpZHAbtlbtlf~Hf~HbHAbHAAJltAJltf`vXf`vXQr˂pQr˂pbtlbtlf~Hf~HbHAbHAAJltAJltf`vXf`vXZHAbۙے`JXlJtAArdtpvnےHAZbHAZJltJltltb`vXn`vXnr˂pr˂ptlJtlJf~Hf~HbHAZbHAZJltJlt`vXn`vXnr˂pr˂ptlJtlJv`f~HfrXQJ`JltdrtAvXnvXnr˂pr˂plJtlJtf~Hf~HHAZpbHAZpJltJlttbvXnvXnr˂pr˂plJtlJtf~Hf~HbHAZpbHAZprtAdQZ|vp`vXn˂pZA`JXQlJtAlJtA~Hf~HfbHAZpbHAZpltbltbvXnvXn˂pZ˂pZlJtAlJtA~Hf~HfHAZpbHAZpltbltbtbnvXnvXnnXv`nXv`bHAZbHAZtbdQZvp`vvXnXQr˂bے`JtArdJtArdfpvfpvZp˂Zp˂bdQZ|bdQZ|nvpnvpZHAbZHAbJtArdJtArdfpvfpvZp˂Zp˂bdQZ|bdQZ|nvpnvp`JXQQr˂prdtllJfpXv`fp˂rp˂rbdQZ|bdQZ|nvpvpfvpfZHAbZHAےtArdtArdfpvfpvp˂rp˂rbdQZ|bdQZ|vpfvpfZHAbZHAbtArdtArd~HfppvnےbHAbdQZ|JltvpfHvpfHZHAbZHAbArd|Ard|fpvfpv˂rX˂rXbdQZ|bdQZ|nvpvpfHvpfZHAbZHAے`Ard|Ard|fpvfpv˂rX˂rXdrtvXnۅvpfHb`JXr˂pZrd|rd|pvnpvn˂rXQ˂rXQdQZ|dQZ|vpfHvpfHHAbےHAbےrd|rd|pvnpvn˂rXQ˂rXQdQZ|dQZ|vpfvpfHvpfےf~Hf~Hp˂rp˂r|drXnvvpfHpZHAbJXQr˂|ZdQ|ZdQnXv`nXv`rXQJ`rXQJ`ہdrtdrtfH~fH~˙ے`JXے`JX|ZdQ|ZdQnXv`nXv`rXQJ`rXQJ`ہdrtdrtfH~fH~r˂p``JXQJtArdvnv~HfXQJ`ےXQJ`ےdrtAdrtAfHfH~fے`JXQے`JXQ`JXQr|ZdQb|ZdQbnXv`nXv`XQJ`ےXQJ`ےdrtAdrtAH~fH~fے`JXQے`JXQ|ZdQb|ZdQbvnXXv`pZp˂drtAbdQZ|~f`~f``JXQ`JXQZdQbtZdQbtnXv`nXv`QJ`ےQJ`ےdrtAdrtAfHf`~f``JXQ`JXQJXQrZdQbtZdQbtnXv`nXv`QJ`ےQJ`ےAJltvpfH~f`Qr˂pAb`JZdQbtZdQbtXv`fXv`fJ`ےJ`ےdrtAJdrtAJ~f`~f``JXQr`JXQrZdQbtZdQbtXv`fXv`fJ`ےJ`ےdrtAJdrtAJHf`~f``JXQHAfpvfpvXQJ`ےXQJ`ےtAJlpfH~~f`JQrpZHAbbtlbtlf~HfHbHAbHAAJltAJltf`vXf`vXQr˂pQr˂pbtlbtlf~Hf~HbHAbHAAJltAJltf`vXf`vXJXQrr˂p|Zdf~HpvnbHAZbHAZJltJlt`vXn`vXnr˂pr˂pbtltlJtlJf~HfHfbHAZbHAZJltJlt`vXn`vXnr˂pr˂ptlJtlJv`fvnrbHAZJltdrtAvXnvXnr˂pr˂plJtlJtf~Hf~HbHAZpbHAZpJltJltvXnvXnr˂pr˂pbtllJtlJf~HfHfpbHAZpbHAZpbdQZ|~f`vXnZHAbXQr˂lJtAlJtA~Hf~HfbHAZpbHAZpltbltbvXnvXn˂pZ˂pZlJtAlJtA~Hf~HfbHAZpbHAZpltbltbvXnvXnbے`nXv`nXv`bHAZJlttdrtAf`vvXn˂pZHJAdJtArdJfpvfpvfpvZp˂Zp˂bdQZ|bdQZ|nvpnvpZHAbZHAbJtArdJtArdfpvfpvZp˂Zp˂bdQZ|bdQZ|nvpnvp˂pZHZHAbQbtlfpvvf~Hp˂rp˂rbdQZ|bdQZ|vpfvpfZHAbZHAbJtAdtArdfpvfpvpvnp˂rp˂rbdQZ|bdQZ|vpfvpfZHAbZHAbtArdtArd~HXvXQJ`pp˂rbdQZ|JltvpfHvpfHZHAbZHAbArd|Ard|fpvfpv˂rX˂rXbdQZ|bdQZ|vpfHvpfHZHAbZHAbJtAd|Ard|fpvfpvvn˂rX˂rXdrtvXnۅvp`ے`JXpZHAbrd|rd|pvnpvn˂rXQ˂rXQdQZ|dQZ|vpfHvpfHHAbےHAbےrd|rd|pvnpvn˂rXQ˂rXQdQZ|dQZ|vpfHvpfHJXQrf~Hp˂rp˂rdrtAJJltXnvvpfHAbے`|ZdQ|ZdQnXv`nXv`nrXQJ`rXQJ`rXQJ`ہdrtdtAfH~fH~˙ے`JXے`JX|ZdQ|ZdQnXv`nXv`rXQJ`rXQJ`ہdrtdrtfH~fH~Abے``JXQJtArdnXv`fpvXQJ`ےXQJ`ےdrtAdrtAH~fH~fے`JXQے`JXQ|ZdQb|ZdQbnXv`nXv`rXQJ`XQJ`ےXQJ`ےdrtAdtAJH~fH~fے`JXQے`JXQ|ZdQb|ZdQb`f~˂rXQXQJ`ےrAJlbdQZ|~f`~f``JXQ`JXQZdQbtZdQbtnXv`nXv`QJ`ےQJ`ےdrtAdrtA~f`~f``JXQ`JXQZdQbtZdQbtnXv`nXv`rXQJ`QJ`ےQJ`ےAJltvp`vXvXnQr˂pے`JZdQbtZdQbtXv`fXv`fJ`ےJ`ےdrtAJdrtAJ~f`~f``JXQr`JXQrZdQbtZdQbtXv`fXv`fJ`ےJ`ےdrtAJdrtAJ~f`~f`˂pZHAbے`JXQr˂p`tlJJfpvv`f󂀉rXQrXQQZ|dQZ|dvpfHvpfHvpfے`Abے`Aے`rd|rd|vnXvnXrXQrXQQZ|dQZ|dvpfHvpfHb˂pۑpJAHrHr󙐂ˁXnvˍXnvˍtbAdZ˂p`JJXQrtArdnvf~HfpJ`ےJ`ےrtAJlrtAJlf`~f`JXQrJXQrJXQrbtZdQbtZdQbtv`fv`fJ`ےJ`ےrtAJlrtAJl~f`~f`ZHAb󙐂ˁ`Z`ZQXbpfH~pfH~|drXQr˂˂pZHA|ZdQb~HfpvnvfbHAZpbHAZpˑtbdtbdvXnvXnۉ˂pZH˂pZHlJtlJtAlJfp~HfpHfpbHAZpbHAZpˑtbdtbdvXnvXnۙے`JXQXb㉀ۑp`Zf۝`vf۝`vQtJlpZHAbbے`tlJvnX~HfrXQrXQQZ|dQZ|dvpfHvpfHAbے`Abے`Ad|rd|vnXvnXvnrXrXQrXQQZ|dQZ|dvpfHvpfHQr˂pۑp`ZQQXb㉀XnvˍXnvˍtbAdZے`JJXQrtArdv`fpvnJ`ےJ`ےrtAJlrtAJl~f`~f`JXQrJXQrZdQbtZdQbtv`fv`fQJ`ےJ`ےJ`ےJlrtAJltAJl~f`~f`ZHAbXb㉀ۑۑpJAHrpfH~p|dr|drXQr˂˂p`J|ZdQtA~HfpXv`fbHAZpbHAZpˑtbdtbdvXnvXnۉ˂pZH˂pZHlJtAlJtA~Hfp~HfpHAZpbHAZpˑtbdtbdtbnvXnvXnۙے`JXpJAHr󙐂ˁ`Zf۝`vQtJlQtJlpZHAbXQrbtrd|vnX~HfrXQrXQQZ|dQZ|dvpfHvpfHAbے`Abے`rd|rd|vnXvnXrXQrXQQZ|dQZ|dvpfHvpfHvpfZHQHAbېˁ`ZQQXb㉀XnvˍtbAdZtbAdZ˂pl|ZZdQbtv`f~pvnJ`ےJ`ےrtAJlrtAJl~f`~f`JXQrJXQrZdQbtZdQbtv`fv`fJ`ےJ`ےrtAJlrtAJlf`~f`Abے``JXQXb㉀ۑۑpJAHpfH~|dr|drZHAbdQbtlJtAfpvXv`fbHAZpbHAZpˑtbdtbdvXnvXnۉ˂pZH˂pZHlJtAlJtA~Hfp~HfpbHAZpbHAZpˑtbdtbdvXnvXnہJXQrr˂ppJAHrf۝`vf۝`vQtJlQtJlے`JXQlJtArrd|nXv`~fpvrXQrXQQZ|dQZ|dvpfHvpfHAbے`Abے`rd|rd|vnXvnXrXQrXQQZ|dQZ|dvpfHvpfH˂pZHZHAbېۑpJXnvˍXnvˍtbAdZtbAdZr˂pd|ZZdQbtf~HnXv`J`ےJ`ےrtAJlrtAJl~f`~f`JXQrJXQrZdQbtZdQbtv`fv`fJ`ےJ`ےrtAJlrtAJl~f`~f`Abے``JXQAHr󙐂pfH~pfH~|dr|drZHAbdQbtl|Zfpvf~HbHAZpbHAZpˑtbdtbdvXnvXnۉ˂pZH˂pZHlJtAlJtA~Hfp~HfpbHAZpbHAZpˑtbdtbdvXnvXnہJXQrr˂p`ˁ`ZQXbf۝`vf۝`vQtJlQtJlے`JXQl|ZdQdQbtnXv`fpvrXQrXQQZ|dQZ|dvpfHvpfHAbے`Abے`rd|rd|vnXvnXrXQrXQQZ|dQZ|dvpfHvpfH˂p`JXQr㉀ۑpJXnvˍXnvˍtbAdZtbAdZHAbےbtllJtArf~HnXv`J`ےJ`ےrtAJlrtAJl~f`~f`JXQrJXQrZdQbtZdQbtv`fv`fJ`ےJ`ےrtAJlrtAJl~f`~f`JXQrˉ˂pZHAHr󙐂pfH~pfH~|dr|dr`JXQrJtArdd|ZfvnXffpbHAZpbHAZpˑtbdtbdvXnvXnۉ˂pZH˂pZHlJtAlJtA~Hfp~HfpbHAZpbHAZpˑtbdtbdvXnvXnۂpZHAAbے`ˁ`ZQXAf۝`vf۝`vQtJlQtJl˂pZ|ZdQdQbtv`fvnrXrXQrXQQZ|dQZ|dvpfHvpfHAbے`Abے`rd|rd|vnXvnXrXQrXQQZ|dQZ|dvpfHvpfHbے`JXQrHr󙐂ˁXnvˍXnvˍtbAdZtbAdZHAbےbtllJtAr~HfpQJ`ےJ`ےJ`ےJlrtAJltAJl~f`~f`JXQrJXQrZdQbtZdQbtv`fv`fJ`ےJ`ےrtAJlrtAJl~f`~f`JXQrˉ˂p`Z`ZQXbpfH~pfH~|dr|dr`JXQrJtArddtlvnXHAZpbHAZpˑtbdtbdtbnvXnvXnۉ˂pZH˂pZHlJtAlJtA~Hfp~HfpbHAZpbHAZpˑtbdtbdvXnvXnۂpZHAQXb㉀ۑpJAf۝`vf۝`vQtJlQtJlt \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv33_2.dat b/vendor/endroid/qr-code/assets/data/qrv33_2.dat new file mode 100644 index 000000000..cc3686817 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv33_2.dat @@ -0,0 +1,297 @@ +}~}~}~}~yzyzyzyzwxwxwxwxststststoopopoponmnmnmnmjijijijihghghghg}~}~}~}~yzyzyzyzwxwxwxwxststststpopopoponmnmnmnmjijijijihghghghg}~}~}~}~yzyzyzyzwxwxwxwxststststpopopoponmnmnmnmjijijijihghghghg}~}~}~}~yzyzyzyzwxwxwxwxststststpopopoponmnmnmnmjijijijihghghghg}~}~}~}~yzyzyzyzwxwxwxwxststststpopopoponmnmnmnmjijijijihghghghg}~}~}~}~yzyzyzyzwxwxwxwxststststpopopoponmnmnmnmjijijijihghghghg}~}~}~}~yzyzyzyzwxwxwxwxststststooooopopnmnmnmnmjijijijihghghghg}~}~}~}~yzyzyzyzwxwxwxwxststststopopopopnmnmnmnmjijijijihghghghg}~}~}~}~yzyzyzyzwxwxwxwxststststopopopopnmnmnmnmjijijijihghghghg}~}~}~}~yzyzyzyzwxwxwxwxststststopopopopnmnmnmnmjijijijifefefefe}~}~}~}~yzyzyzyzwxwxwxwxststststopopopopnmnmnmnmjijijijifefefefe}~}~}~}~yzyzyzyzwxwxwxwxststststopopopopnmnmnmnmjijijijifefefefedcdcdcdc}~}~}~}~yzyzyzyzwxwxwxwxststststopoooooolklklklkjijijijifefefefedcdcdcdc}~}~}~}~yzyzyzyzwxwxwxwxststststpopopopolklklklkjijijijifefefefedcdcdcdc}~}~}~}~yzyzyzyzwxwxwxwxststststpopopopolklklklkjijijijifefefefedcdcdcdc}~}~}~}~yzyzyzyzwxwxwxwxststststpopopopolklklklkjijijijifefefefedcdcdcdc}~}~}~}~yzyzyzyzwvuvuvuvststststpopopopolklklklkjijijijifefefefedcdcdcdc}~}~}~}~yzyzyzyzuvuvuvuvststststpopopopolklklklkjijijijifefefefedcdcdcdc}~}~}~}~yzyzyzyzuvuvuvuvststststpopopooolklklklkjijijijifefefefedcdcdcdc}|{|{|{|yzyzyzyzuvuvuvuvststststooopopoplklklklkjijijijifefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvststststopopopoplklklklkjijijijifefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvstststsroooooopolklklklkjijijijifefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvqrqrqrqrpopopopolklklklkjijijijifefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvqrqrqrqrpopopopolklklklkjijijijifefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvqrqrqrqrpopopopolklklklkjijijijifefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvqrqrqrqrpopopopolklklklkhghghghgfefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvqrqrqrqrpopooooolklklklkhghghghgfefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvqrqrqrqrpopopopolklklklkhghghghgfefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgfefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgfefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgfefefefedcdcdcdc{|{|{|{|yzyzyzyzuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgfefefefedcdcdcdc{|{|{|{|yxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgfefefefedcdcdcdc{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgfefefefebabababa{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgfefefefebabababa~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgfefefefebabababa}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgfefefefebabababa}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgfefefefebabababa}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgfefefefebabababa}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgfefefefebabababa}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgfefefefebabababa}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgfefefefebabababa}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgdcdcdcdcbabababa}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgdcdcdcdcbabababa}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmlklklklkhghghghgdcdcdcdcbabababa}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmjijijijihghghghgdcdcdcdcbabababa}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmjijijijihghghghgdcdcdcdcbabababa}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmjijijijihghghghgdcdcdcdcbabababa}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmjijijijihghghghgdcdcdcdcbabababa}~}~}~}~{|{|{|{|wxwxwxwxutstststqrqrqrqrnmnmnmnmjijijijihghghghgdcdcdcdcbabababa}~}~}~}~{|{|{|{|wxwxwxwxststststqrqrqrqrnmnmnmnmjijijijihghghghgdcdcdcdcbabababa}~}~}~}~{|{|{|{|wxwxwxwxststststqrqrqpopnmnmnmnmjijijijihghghghgdcdcdcdcbabababa}~}~}~}~{zyzyzyzwxwxwxwxststststopopoooonmnmnmnmjijijijihghghghgdcdcdcdcbabababababababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?>;<;<;<;<878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB=>=>=>=>;<;<;<;<878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB=>=>=>=>;<;<;<;<878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSSQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEDABABABAB=>=>=>=>;<;<;<;<878777774343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     babababa^]^]^]^]\[\[\[\[XWXWXWXWSSSSTSTSQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     babababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     babababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSQRQRQRQRMNMNMNMNKLKLKLKJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     babababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSQRQRQRQRMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%$#"!"!"!"!     babababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSQRQRQRQRMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<787878784343434321212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"!     babababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSQRQRQRQPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<787878774343434321212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"!     babababa^]^]^]^]\[\[\[\[XWXWXWXWTSSSSSSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;:9:777787874343434321212121.-.-.-.-,+,+,+*)('('('('$#$#$#$#"!"!"!"!     babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>9:9:9:9:878787874343434321212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>9:9:9:9:878787874343434321212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>9:9:9:9:87878787434343432121210/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     babababa^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>9:9:9:9:87878787434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + +babababa^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>9:9:9:9:87777787434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +babababa^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSSSSOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>9:9:9:9:87878765434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWSSTSTSTSOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABA@=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWVUSSSSSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!      + + + +`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#         + + + +`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUSTSTSTSTOPOPOPOPMNMNMNMLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#         + + + +`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUSTSTSTSTOPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('&%$#$#$#$#         + + + +`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUSTSSSSSTOPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#         + + + +`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUSTSTSTSROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#         + + + +`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:65656565434343430/0/0/0/.-.-.-,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:65656565434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:65656565434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:65656565434343210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:65656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#       + + + +`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:65656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + +`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:65656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + +`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=<9:9:9:9:65656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + +`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@;<;<;<;<9:9:9:9:65656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + +`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@;<;<;<;<9:9:9:9:65656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + +`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCB?@?@?@?@;<;<;<;<9:98787865656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + +`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFABABABAB?@?@?@?@;<;<;<;<7877777765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + +`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + +`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + +`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#"!     + + + +`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPOPKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!     + + + +`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQROPOPOPONKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!     + + + +`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787877765656565212121210/0/0/0/,+,+,+,+*)*)*)('&%&%&%&%"!"!"!"!     + + + +`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<7778787865656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + +`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<7878787865656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + +`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<7878787865656565212121210/0/0/.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + +`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVUQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<787878786565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + `_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVUQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<787878786565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     `_`_`_`_\[\[\[\[XWXWXWXWVUVUTSTSQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<787878786565654321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     ^]^]^]^]\[\[\[\[XWXWXWXWTSTSSSSSQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<777777874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    ^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     ^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     aabbccddPPQQRRSS01122334YXXWWVVUHIIJJKKLA@@??>>=~~}}|eeffgghh!!""##$$$$##""!!eeffgghhYYZZ[[\\45566778 UTTSSRRQLMMNNOOP + + =<<;;::9|{{zzyyxiijjkkll%%&&''(( iijjkkll]]^^__``899::;;< + + QPPOONNMPQQRRSST 98877665xwwvvuuommnnoopp))**++,,mmnnooppaabbccdd<==>>??@ MLLKKJJITUUVVWWX54433221onnmmllk~~}}qqrrsstt--..//00qqrrsstteeffgghh@AABBCCDIHHGGFFEXYYZZ[[\100//..-kjjiihhg||{{zzyyuuvvwwxx11223344~~}}uuvvwwxxiijjkkllDEEFFGGHEDDCCBBA\]]^^__`-,,++**)gffeeddcxxwwvvuuyyzz{{||55667788 ||{{zzyyyyzz{{||mmnnoouuHIIJJKKLA@@??>>=`aabbccd )((''&&%cbbaa``_tsrqpoon}}~~99::;;<< + + xxwwvvuu}}~~vvwwxxyyLMMNNOOP + + =<<;;::9~~}deeffggh !!""##$%$$##""!_^^]]\\[nmmllkkj==>>??@@ttssrrqqzz{{||}}PQQRRSST 98877665}||{{zzyhiijjkkl$%%&&''(! [ZZYYSSRjiihhggfAABBCCDDppoonnmm~~TUUVVWWX54433221yxxwwvvulmmnnoop())**++,RQQPPOONfeeddccbEEFFGGHHllkkjjiiXYYZZ[[\100//..-uttssrrqpqqrrsst,--..//0NMMLLKKJbaa``__^IIJJKKLLhhggffee\]]^^__`-,,++**)qppoonnmtuuvvwwx01122334JIIHHGGF^]]\\[[ZMMNNOOPP + + hhggffeeddccbbaa`aabbccd )((''&&%mllkkjjixyyzz{{|45566778 FEEDDCCBZYYXWVUTQQRRSSTT ddccbbaa``__^^]]deeffggh !!""##$%$$##""!ihhggffe|}}~~899::;;< + + BAA@@??>SSRRQQPPUUVVWWXX``__^^]]\\[[ZZYYhiijjkkl$%%&&''(! eddccbba<==>>??@ >==77665OONNMMLLYYZZ[[\\\\[[ZZYYXXWWVVUUlmmnnoop())**++,a``__^^]@AABBCCD54433221KKJJIIHH]]^^__``XXWWVVUUTTSSRRQQpqqrrsst,--..//0]\\[[ZZYDEEFFGGH100//..-GGFFEEDDaabbccdd TTSSRRQQPPOONNMM~~}}||tuuvvwwx01122334YXXWWVVUHIIJJKKL-,,++**)CCBBAA@@~~}}eeffgghh!!""##$$PPOONNMMLLKKJJII{{zzyyxx~~}}|xyyzz{{|45566778 UTTSSRRQLMMNNOOP + + )((''&&%??>>==<;||{{zzyyiijjkkll%%&&''((LLKKJJIIHHGGFFEEwwvvuuoo|{{zzyyx|}}~~899::;;< + + QPPOONNMPQQRRSST %$$##""!:9877665xxwwvvuummnnoopp))**++,,HHGGFFEEDDCCBBAAnnmmllkkxwwvvuut<==>>??@ MLLKKJJITUUVVWWX!54433221ttssrrqqqqrrsstt--..//00DDCCBBAA@@??>>==jjiihhggsrqpoonn@AABBCCDIHHGGFFEXYYZZ[[\100//..-ppoonnmmuuvvwwxx11223344@@??>>==<<;;::99ffeeddccmmllkkjjDEEFFGGHEDDCCBBA\]]^^__`-,,++**)llkkjjiiyyzz{{||55667788<<;;::9988776655bbaa``__iihhggffHIIJJKKLA@@??>>=`aabbccd  )((''&&%hhggffee}}~~99::;;<<8877665544332211^^]]\\[[eeddccbbLMMNNOOP + + =<<;;::9~~}deeffggh !!""##$ + + %$$##""!ddccbbaa==>>??@@4433221100//..--ZZYYSSRRaa``__^^PQQRRSST 98877665}||{{zzyhiijjkkl$%%&&''(! ``__^^]]AABBCCDD00//..--,,++**))QQPPOONN]]\\[[ZZTUUVVWWX54433221yxxwwvvulmmnnoop())**++, \\[[ZZYYEEFFGGHH,,++**))((''&&%%MMLLKKJJYYXWVUTSXYYZZ[[\100//..-uttssrrqpqqrrsst,--..//0 + + XXWWVVUUIIJJKKLL((''&&%%$$##""!!IIHHGGFFSRRQQPPO\]]^^__`-,,++**)qppoonnmtuuvvwwx01122334 TTSSRRQQMMNNOOPP$$##""!! EEDDCCBBONNMMLLK`aabbccd )((''&&%mllkkjjixyyzz{{|45566778 PPOONNMMQQRRSSTT AA@@??>>KJJIIHHG~~}deeffggh !!""##$%$$##""!ihhggffe|}}~~899::;;< + + LLKKJJIIUUVVWWXX==776655GFFEEDDC}||{{zzyhiijjkkl$%%&&''(! eddccbba<==>>??@!!"HHGGFFEEYYZZ[[\\44332211CBBAA@@?yxxwwvvulmmnnoop())**++,a``__^^]@AABBCCD"##$$%%&DDCCBBAA]]^^__`` 00//..--?>>==<;:uttssrrqpqqrrsst,--..//0]\\[[ZZYDEEFFGGH&''(())*@@??>>==aabbccdd + + ,,++**))98776655qppoonnmtuuvvwwx01122334YXXWWVVUHIIJJKKL*++,,--. + + <<;;::99~~}}eeffgghh + + + + ((''&&%%44332211mllkkjjixyyzz{{|45566778 UTTSSRRQLMMNNOOP.//00112 88776655||{{zzyyiijjkkll $$##""!!00//..--ihhggffe|}}~~899::;;< + + QPPOONNMPQQRRSST2334455644332211xxwwvvuummnnoopp,,++**))eddccbba<==>>??@ MLLKKJJITUUVVWWX677==>>?00//..--ttssrrqqqqrrsstt((''&&%%a``__^^]@AABBCCDIHHGGFFEXYYZZ[[\?@@AABBC,,++**))ppoonnmmuuvvwwxx$$##""!!]\\[[ZZYDEEFFGGHEDDCCBBA\]]^^__`CDDEEFFG ((''&&%%llkkjjiiyyzz{{|| + +   YXXWWVVUHIIJJKKLA@@??>>=`aabbccdGHHIIJJK!!""##$$$$##""!!hhggffee}}~~ !!""##$$ + + UTTSSRRQLMMNNOOP + + =<<;;::9~~}deeffgghKLLMMNNO%%&&''(( ddccbbaa%%&&''(( + + QPPOONNMPQQRRSST 98877665}||{{zzyhiijjkklOPPQQRRS))**++,,``__^^]]))**++,,MLLKKJJITUUVVWWX54433221yxxwwvvulmmnnoopSYYZZ[[\--..//00\\[[ZZYY--..//00 +IHHGGFFEXYYZZ[[\100//..-uttssrrqpqqrrsst\]]^^__`11223344XXWWVVUU 11223344 + EDDCCBBA\]]^^__`-,,++**)qppoonnmtuuvvwwx`aabbccd55667788 TTSSRRQQ!!""##$$55667788!!""A@@??>>=`aabbccd )((''&&%mllkkjjixyyzz{{|deeffggh99::;;<< + + PPOONNMM%%&&''((99::;;<<##$$%%&& + + =<<;;::9~~}deeffggh !!""##$%$$##""!ihhggffe|}}~~hiijjkkl==>>??@@LLKKJJII))**++,,==>>??@@''(())** 98877665}||{{zzyhiijjkkl$%%&&''(! eddccbbalmmnnoouAABBCCDDHHGGFFEE--..//00AABBCCDD++,,--..54433221yxxwwvvulmmnnoop())**++,a``__^^]uvvwwxxyEEFFGGHHDDCCBBAA11223344EEFFGGHH//001122100//..-uttssrrqpqqrrsst,--..//0]\\[[ZZYyzz{{||}IIJJKKLL@@??>>==55667788IIJJKKLL33445566-,,++**)qppoonnmtuuvvwwx01122334YXXWWVVU}~~MMNNOOPP + + <<;;::99~~}}99::;;<>?? )((''&&%mllkkjjixyyzz{{|45566778 UTTSSRRQQQRRSSTT 88776655||{{zzyy==>>??@@QQRRSSTT@@AABBCC !!""##$%$$##""!ihhggffe|}}~~899::;;< + + QPPOONNMUUVVWWXX44332211xxwwvvuuAABBCCDDUUVVWWXXDDEEFFGG$%%&&''(! eddccbba<==>>??@ MLLKKJJIYYZZ[[\\00//..--ttssrrqqEEFFGGHHYYZZ[[\\HHIIJJKK())**++,a``__^^]@AABBCCDIHHGGFFE]]^^__``,,++**))ppoonnmmIIJJKKLL]]^^__``LLMMNNOO,--..//0]\\[[ZZYDEEFFGGHEDDCCBBAaabbccdd ((''&&%%llkkjjiiMMNNOOPPQQRRSSTT 88776655wwvvuuoomnnooppq)**++,,-`__^^]]\ABBCCDDE43322110JJIIHHGG^^__``aa++**))((oonnmmllvvwwxxyy22334455 SRRQQPPONOOPPQQR + ;::99887wvvuuoonmllkkjjiUUVVWWXX44332211nnmmllkk~~}}|qrrssttu-..//001\[[ZZYYXEFFGGHHI0//..--,FFEEDDCCbbccddee !!''&&%%$$kkjjiihhzz{{||}}66778899 + + ONNMMLLKRSSTTUUV76655443nmmllkkjihhggffeYYZZ[[\\00//..--jjiihhgg|{{zzyyxuvvwwxxy12233445XWWVVUUTIJJKKLLM ,++**))(BBAA@@??~~}}||ffgghhii""##$$%%##""!! ggffeedd~~::;;<<== KJJIIHHGVWWXXYYZ3221100/jiihhggfeddccbba]]^^__``,,++**))ffeeddccxwwvvuutyzz{{||}56677889 TSSRRQQPMNNOOPPQ + + (''&&%%$>>==<;:9{{zzyyxxjjkkllmm&&''(())ccbbaa``>>??@@AA!!""##GFFEEDDCZ[[\\]]^/..--,,+feeddccba``__^^]aabbccdd ((''&&%%bbaa``__srqpoonn}~~9::;;<<= + + POONNMMLQRRSSTTU $##""!!87766554wwvvuuttnnooppqq**++,,--__^^]]\\BBCCDDEE$$%%&&''CBBAA@@?^__``aab+**))(('baa``__^]\\[[ZZYeeffgghh!!""##$$$$##""!!^^]]\\[[mmllkkjj=>>??@@ALKKJJIIHUVVWWXXY43322110ssrrqqpprrssttuu..//0011[[ZZYYXXFFGGHHII(())**++ +?>>==<<;bccddeef !!"'&&%%$$#^]]\\[[ZYXXWWVVUiijjkkll%%&&''(( ZZYYSSRRiihhggffABBCCDDEHGGFFEEDYZZ[[\\]0//..--,oonnmmllvvwwxxyy22334455WWVVUUTTJJKKLLMM,,--..// + ;::99887~~}}||{fgghhiij"##$$%%&#""!! ZYYSSRRQUTTSSRRQmmnnoopp))**++,,QQPPOONNeeddccbbEFFGGHHIDCCBBAA@]^^__``a,++**))(kkjjiihhzz{{||}}66778899 SSRRQQPPNNOOPPQQ0011223376655443{zzyyxxwjkkllmmn&''(())*QPPOONNMQPPOONNMqqrrsstt--..//00MMLLKKJJaa``__^^IJJKKLLM @??>>==>??@@AAKKJJIIHHVVWWXXYY==>>??@@/..--,,+srrqqpporssttuuv.//00112IHHGGFFEIHHGGFFEyyzz{{||55667788 EEDDCCBBYYXWVUTSQRRSSTTU 87766554|{{zzyyxijjkkllm%&&''(()__^^]]\\BBCCDDEEGGFFEEDDZZ[[\\]]AABBCCDD+**))(('onnmmllkvwwxxyyz23344556EDDCCBBAEDDCCBBA}}~~99::;;<< + + AA@@??>>SRRQQPPOUVVWWXXY43322110xwwvvuutmnnooppq)**++,,- +[[ZZYYXXFFGGHHIICCBBAA@@^^__``aaEEFFGGHH !!"'&&%%$$#kjjiihhgz{{||}}~6778899: A@@??>>=A@@??>>===>>??@@==776655ONNMMLLKYZZ[[\\]0//..--,tssrrqqpqrrssttu-..//001 + WWVVUUTTJJKKLLMM ??>>==< + + =7766554=<<;;::9AABBCCDD44332211KJJIIHHG]^^__``a,++**))(poonnmmluvvwwxxy12233445SSRRQQPPNNOOPPQQ + + ;;::9988~~}}||ffgghhiiMMNNOOPP&''(())*cbbaa``_>??@@AAB4332211098877665EEFFGGHH00//..--GFFEEDDCabbccdde !(''&&%%$lkkjjiihyzz{{||}56677889 + +OONNMMLLRRSSTTUU77665544{{zzyyxxjjkkllmmQQRRSSYY*++,,--._^^]]\\[BCCDDEEF0//..--,54433221IIJJKKLL,,++**))CBBAA@@?~~}}|effgghhi!""##$$%$##""!! hggffeed}~~9::;;<<= KKJJIIHHVVWWXXYY33221100wwvvuuttnnooppqqZZ[[\\]].//00112[ZZYYXXWFGGHHIIJ,++**))(100//..-MMNNOOPP + + ((''&&%%?>>==<;:|{{zzyyxijjkkllm%&&''(() dccbbaa`=>>??@@A!!""#GGFFEEDDZZ[[\\]]//..--,,ssrrqqpprrssttuu^^__``aa23344556WVVUUTTSJKKLLMMN +(''&&%%$-,,++**)QQRRSSTT $$##""!!98776655xwwvvuutmnnooppq)**++,,-`__^^]]\ABBCCDDE#$$%%&&'CCBBAA@@^^__``aa++**))((oonnmmllvvwwxxyybbccddee6778899: SRRQQPPONOOPPQQR + $##""!!)((''&&%UUVVWWXX44332211tssrrqqpqrrssttu-..//001\[[ZZYYXEFFGGHHI'(())**+ ??>>==< + + ONNMMLLKRSSTTUUV%$$##""!YYZZ[[\\00//..--poonnmmluvvwwxxy12233445XWWVVUUTIJJKKLLM+,,--../ + + ;;::9988~~}}||ffgghhii""##$$%%##""!! ggffeedd~~jjkkllmm>??@@AABKJJIIHHGVWWXXYYZ! ]]^^__``,,++**))lkkjjiihyzz{{||}56677889 TSSRRQQPMNNOOPPQ/001122377665544{{zzyyxxjjkkllmm&&''(())ccbbaa``nnoouuvvBCCDDEEFGFFEEDDCZ[[\\]]^aabbccdd  ((''&&%%hggffeed}~~9::;;<<= + + POONNMMLQRRSSTTU3445566733221100wwvvuuttnnooppqq**++,,--__^^]]\\wwxxyyzzFGGHHIIJCBBAA@@?^__``aab ~~}}eeffgghh!!""##$$ + + $$##""!!dccbbaa`=>>??@@ALKKJJIIHUVVWWXXY7==>>??@//..--,,ssrrqqpprrssttuu..//0011[[ZZYYXX{{||}}~~JKKLLMMN +?>>==<<;bccddeef !!" + + +||{{zzyyiijjkkll%%&&''(( `__^^]]\ABBCCDDEHGGFFEEDYZZ[[\\]@AABBCCD++**))((oonnmmllvvwwxxyy22334455WWVVUUTTNOOPPQQR + ;::99887~~}}||{fgghhiij"##$$%%& +  xxwwvvuummnnoopp))**++,, \[[ZZYYXEFFGGHHIDCCBBAA@]^^__``aDEEFFGGH !!''&&%%$$kkjjiihhzz{{||}}66778899 SSRRQQPPRSSTTUUV76655443{zzyyxxwjkkllmmn&''(())* + + ttssrrqqqqrrsstt--..//00 + + XWWVVUUTIJJKKLLM @??>>==>??@@AAKKJJIIHHZ[[\\]]^/..--,,+srrqqpporssttuuv.//00112 llkkjjiiyyzz{{||55667788 +POONNMMLQRRSSTTU 87766554|{{zzyyxijjkkllmPQQRRSSY**++,,--__^^]]\\BBCCDDEEGGFFEEDD^__``aab+**))(('onnmmllkvwwxxyyz23344556!!""#hhggffee}}~~99::;;<< + LKKJJIIHUVVWWXXY43322110xwwvvuutmnnooppqYZZ[[\\]..//0011[[ZZYYXXFFGGHHIICCBBAA@@bccddeef !!"'&&%%$$#kjjiihhgz{{||}}~6778899:#$$%%&&'ddccbbaa==>>??@@!!""HGGFFEEDYZZ[[\\]0//..--,tssrrqqpqrrssttu]^^__``a22334455WWVVUUTTJJKKLLMM ??>>==<<~~}}||{{fgghhiij"##$$%%&#""!! gffeeddc~:;;<<==>'(())**+``__^^]]AABBCCDD##$$%%&&DCCBBAA@]^^__``a,++**))(poonnmmluvvwwxxyabbccdde66778899 SSRRQQPPNNOOPPQQ + + ;;::9988zzyyxxwwjkkllmmn&''(())*cbbaa``_>??@@AAB+,,--../ \\[[ZZYYEEFFGGHH''(())** @??>>==>??@@AAKKJJIIHHVVWWXXYY33221100mmllkkjj~~}}||{rssttuuv.//00112[ZZYYXXWFGGHHIIJ34455667$%%&&''(TTSSRRQQMMNNOOPP//001122 87766554|{{zzyyxijjkkllm%&&''(() dccbbaa`mnnoouuvBBCCDDEEGGFFEEDDZZ[[\\]]//..--,,iihhggff{zzyyxxwvwwxxyyz23344556WVVUUTTSJKKLLMMN7==>>??@())**++,PPOONNMMQQRRSSTT3344556643322110xwwvvuutmnnooppq)**++,,-`__^^]]\vwwxxyyzFFGGHHIICCBBAA@@^^__``aa++**))((eeddccbbwvvuutsrz{{||}}~6778899: SRRQQPPONOOPPQQR@AABBCCD,--..//0LLKKJJIIUUVVWWXX77==>>??0//..--,tssrrqqpqrrssttu-..//001\[[ZZYYXz{{||}}~JJKKLLMM ??>>==< + + ONNMMLLKRSSTTUUVDEEFFGGH01122334HHGGFFEEYYZZ[[\\@@AABBCC,++**))(poonnmmluvvwwxxy12233445XWWVVUUT~NNOOPPQQ + + ;;::9988~~}}||ffgghhii""##$$%%##""!! ]]\\[[ZZllkkjjii>??@@AABKJJIIHHGVWWXXYYZHIIJJKKL45566778DDCCBBAA]]^^__``DDEEFFGG !(''&&%%$lkkjjiihyzz{{||}56677889 TSSRRQQPRRSSTTUU77665544{{zzyyxxjjkkllmm&&''(())YYSSRRQQhhggffeeBCCDDEEFGFFEEDDCZ[[\\]]^LMMNNOOP899::;;<@@??>>==aabbccddHHIIJJKK!""##$$%$##""!! hggffeed}~~9::;;<<= + + POONNMMLVVWWXXYY33221100wwvvuuttnnooppqq**++,,--PPOONNMMddccbbaaFGGHHIIJCBBAA@@?^__``aabPQQRRSSY<==>>??@<<;;::99~~}}eeffgghhLLMMNNOO%&&''(() dccbbaa`=>>??@@ALKKJJIIHZZ[[\\]]//..--,,ssrrqqpprrssttuu..//0011LLKKJJII``__^^]]JKKLLMMN +?>>==<<;bccddeefYZZ[[\\]@AABBCCD88776655||{{zzyyiijjkkllPPQQRRSS)**++,,-`__^^]]\ABBCCDDEHGGFFEED^^__``aa++**))((oonnmmllvvwwxxyy22334455HHGGFFEE\\[[ZZYYNOOPPQQR + ;::99887~~}}||{fgghhiij]^^__``aDEEFFGGH44332211xxwwvvuummnnooppYYZZ[[\\-..//001\[[ZZYYXEFFGGHHIDCCBBAA@bbccddee !!''&&%%$$kkjjiihhzz{{||}}66778899 DDCCBBAAXWVUTSSRRSSTTUUV76655443{zzyyxxwjkkllmmnabbccddeHIIJJKKL00//..--ttssrrqqqqrrsstt]]^^__``12233445XWWVVUUTIJJKKLLM @??>>==<~~}}||{ffgghhii""##$$%%##""!! ggffeedd~~::;;<<== + + @@??>>==RQQPPOONVWWXXYYZ3221100/wvvuuttsnooppqqreffgghhiLMMNNOOP,,++**))ppoonnmmuuvvwwxxaabbccdd56677889 TSSRRQQPMNNOOPPQ + + <;;::998{zzyyxxwjjkkllmm&&''(())ccbbaa``>>??@@AA77665544NMMLLKKJZ[[\\]]^/..--,,+srrqqpporssttuuvijjkkllmPQQRRSST((''&&%%llkkjjiiyyzz{{||eeffgghh9::;;<<= + + POONNMMLQRRSSTTU 87766554wvvuuoonnnooppqq**++,,--__^^]]\\BBCCDDEE33221100JIIHHGGF^__``aab+**))(('onnmmllkvwwxxyyzmnnoouuvTUUVVWWX$$##""!!hhggffee}}~~iijjkkll=>>??@@ALKKJJIIHUVVWWXXY43322110nmmllkkj~~}}||rrssttuu..//0011[[ZZYYXXFFGGHHII//..--,,FEEDDCCBbccddeef !!"'&&%%$$#kjjiihhgz{{||}}~vwwxxyyzXYYZZ[[\ ddccbbaammnnoouuABBCCDDEHGGFFEEDYZZ[[\\]0//..--,jiihhggf{{zzyyxxvvwwxxyy22334455WWVVUUTTJJKKLLMM ++**))((BAA@@??>~~}}||{fgghhiij"##$$%%&#""!! gffeeddc~z{{||}}~\]]^^__```__^^]]vvwwxxyyEFFGGHHIDCCBBAA@]^^__``a,++**))(feeddccbwwvvuutszz{{||}}66778899 SSRRQQPPNNOOPPQQ + + ''&&%%$$>==<;:98{zzyyxxwjkkllmmn&''(())*cbbaa``_~`aabbccd\\[[ZZYYzz{{||}}IJJKKLLM @??>>==>??@@AAKKJJIIHHVVWWXXYY33221100srrqqpporssttuuv.//00112[ZZYYXXWhiijjkkl TTSSRRQQQRRSSTTU 87766554|{{zzyyxijjkkllm%&&''(() ZYYSSRRQihhggffeBBCCDDEEGGFFEEDDZZ[[\\]]//..--,,onnmmllkvwwxxyyz23344556WVVUUTTSlmmnnoop + + PPOONNMMUVVWWXXY43322110xwwvvuutmnnooppq)**++,,-QPPOONNMeddccbbaFFGGHHIICCBBAA@@^^__``aa++**))((kjjiihhgz{{||}}~6778899: SRRQQPPOpqqrrsstLLKKJJIIYZZ[[\\]0//..--,tssrrqqpqrrssttu-..//001MLLKKJJIa``__^^]JJKKLLMM ??>>==< + + ONNMMLLK~~}tuuvvwwxHHGGFFEE]^^__``a,++**))(poonnmmluvvwwxxy12233445IHHGGFFE]\\[[ZZYNNOOPPQQ + + ;;::9988~~}}||ffgghhii""##$$%% + + ##""!! cbbaa``_>??@@AABKJJIIHHG}||{{zzyxyyzz{{|DDCCBBAAabbccdde !(''&&%%$lkkjjiihyzz{{||}56677889 EDDCCBBAYXWVUTSSRRSSTTUU77665544{{zzyyxxjjkkllmm&&''(())_^^]]\\[BCCDDEEFGFFEEDDCyxxwwvvu|}}~~@@??>>==~~}}||effgghhi!""##$$%$##""!! hggffeed}~~9::;;<<= + + A@@??>>=RRQQPPOOVVWWXXYY33221100wwvvuuttnnooppqq**++,,-- + +[ZZYYXXWFGGHHIIJCBBAA@@?~~}}||{uttssrrq + + <<;;::99{{zzyyxxijjkkllm%&&''(() dccbbaa`=>>??@@A=7766554NNMMLLKKZZ[[\\]]//..--,,ssrrqqpprrssttuu..//0011 WVVUUTTSJKKLLMMN +?>>==<<;{zzyyxxwqppoonnmfpvXQJ`ےf`vXbtlf~HAJltf`vXbtlےHAAJltZHAbۍf~HbHAZ`vXnr˂pnXv`bHAZH~fJtArdfpvbdQZ|nvpJtArdZp˂bdQZ|`JXQfpvp˂rvpfZHAbf~Hp˂r`vXn|ZdQnXv`drtfے`JX|ZdQrXQJ`ہdrtr˂p`nXv`XQJ`ےH~fے`JXQfpvXQJ`ےvpfbtlfHAJltQr˂pbtlbHAAJltJXQrf~HbHAZ`vXnr˂pnXv`bHAZH~fJtArdfpvbdQZ|ZHAbJtArdZp˂bdQZ|˂pZHfpvp˂rvpfZHAbf~Hp˂r`vXn|ZdQnrXQJ`drtے`JX|ZdQrXQJ`ہdrtAbے`nXv`XQJ`ےH~fے`JXQfpvXQJ`ےvp`btlےHAAJltQr˂pbtlbHAAJltJXQrf~fpېbHAZ`vXnr˂pnXv`bHAZvXnJtArdZp˂bdQZ|ZHAbJtArdZp˂bdQZ|˂pZHvnXp˂rvpfZHAےf~Hp˂rvpfH|ZdQrXQJ`ہdrtے`JX|ZdQrXQJ`ہdrtAbv`fXQJ`ےH~f`JXQrfpvXQJ`ے~f`btlbHAAJltQr˂pbtlbHAAJltpZHA~HfpېbHAZ`vXnbtlnXv`bHAZvXnJtArdZp˂bdQZ|ZHAbJtArdZp˂bdQZ|bے`vnXp˂rvpfJtAdf~Hp˂rvpfH|ZdQrXQJ`ہdrtے`JX|ZdQrXQJ`ہdrtJXQrv`fXQJ`ےH~f|ZdQbf~HfpvXQJ`ے~vbtlbHAAJltQr˂pbtlbHAAJltpZHA~HfvnJlt`vXntlJfpvnXv`Jltpfے`JtArdZp˂bdQZ|ZHAbJtArdZp˂bdQZ|bے`Xv`fbdQZ|vpftArdnXv`f~HdrtAJJXQr|ZdQrXQJ`ہdrtے`JX|ZdQrXQJ`ہdtAJXQHAb~HfdrtAH~f|ZdQbf~HfpvltbZHAbbtlbHAAJltQr˂pbtlbHAJltے`JXpvnJlt`vXntlJfpvnXv`dQZ|`JXQJtArdZp˂bdQZ|ZHAbJtArdZp˂bnvpQr˂pXv`fbdQZ|vpftArdnXv`f~HdrtAJr˂p|ZdQrXQJ`ہdrtے`JX|ZdQrXQJ`۝fHˑZHAb~HfdrtAH~f|ZdQbf~HfpvltbZHAbbtlbHAAJltQr˂pbtlbHAf`vXے`JXpvnJlt`vXntlJfpvnXv`dQZ|l`JXQJtArdZp˂bdQZ|ZHAbJfpvZp˂nvpQr˂pvf~HbdQZ|vpftArdnXv`f~HtbdQr˂pZ|ZdQrXQJ`ہdtAے`JXnXv`rXQJ`fH~ˑ`JXQfpvdrtAH~f|ZdQbf~HfpvZ|dAb`JbtlbHAJltQr˂pf~HbHAf`vXr˂pnXv`Jlt`vXntlJfpvnXv`rtAJlXQr˂JtArdZp˂bnvpZHAbfpvZp˂nvpZHAbۍf~HbdQZ|vpftArdnXv`f~HtbdQpZHAb|ZdQrXQJ`۝fH˙ے`JXnXv`rXQJ`fH~˒`JXQfpvdrtAH~f|ZdQbf~HfpvZ|dے`JbtlbHAf`vXQr˂pf~HbHAf`vXr˂p`nXv`Jlt`vXntlJfpvnXv`rtAdQZXQr˂JfpvZp˂nvpZHAbfpvZp˂nvpJXQrf~fpbdQZ|vpftArdnXv`f~H|drpZHAbnXv`rXQJ`fH~˙ے`JXnXv`rXQJ`fH~btl|vnXdrtAH~f|ZdQbf~HfpvtAJl璐JQrf~HbHAf`vXQr˂pf~HbHAf`vXZdQbtv`fJlt`vXntlJfpvnXv`tbdQZ˂pZHfpvZp˂nvpZHAbfpvZp˂nvplJt~HfpbdQZ|vpftArdnXv`f~H|drAbے`nXv`rXQJ`fH~˙ے`JXnXv`rXQJ`fH~Ard|vnXdrtAے`JXQ|ZdQbf~HfpvtAJl璁JXQrf~HbHAf`vXQr˂pf~HbHAf`vXZdQbtv`ffJltr˂ptlJfpvnXv`tdrtA˂pZHfpvZp˂nvpZHAbfpvZp˂nvpl|pvnbdQZ|ZHAbtArdnXv`f~HJltAbے`nXv`rXQJ`fH~˙ے`JXnXv`rXQJ`fH~ZdQbtrXQJ`drtAے`JXQ|ZdQbf~HfpvbdQZ|JXQrf~HbHAf`vXQr˂pf~HbHAf`vXlJtAےHAZJltr˂ptlJfpvnXv`drtAZHAbfpvZp˂nvpZHAbfpvZp˂nvprd|p˂rbdQZ|ZHAbtArdnXv`p˂rJltے`JXQnXv`rXQJ`fH~˙ے`JXnXv`rXQJ`fH~ZdQbtXQJ`ےdrtAے`JXQ|ZdQbfHfXQJ`ےbdQZ|r˂pf~HbHAf`vXQr˂pf~HJltf`vXlJtAbHAZJltr˂ptlJpvnbHAZltbZHAbfpvZp˂nvpZHAۅfpvbdQZ|nvprdtlp˂rbdQZ|ZHAbtArdrXQJ`p˂rdQZ|ے`JXQnXv`rXQJ`fH~˒`JXQnXv`drtfH~ˑJtArdXQJ`ےdrtAے`JXQ|ZdQbےHAZXQJ`ےdrtAJr˂pf~HbHAf`vXrbtlf~HAJltf`vX|ZdbHAZJltr˂ptlJp˂rbHAZltbZAb`fpvZp˂nvpJtAdfpvbdQZ|nvpQbtlp˂rbdQZ|ZHAbtArdXQJ`ےp˂rdQZ|`JXQr˅nXv`rXQJ`fH~˂|ZdQnXv`drtfH~ˑJtArdXQJ`ےdrtAے`JXQ|ZdQbbHAZXQJ`ےvXnpZHAf~HJltf`vXbtlf~HAJltf`vX|ZdbHAZJltr˂ptlJp˂rbHAZvpfHbے`fpvbdQZ|nvpJtArdfpvbdQZ|nvpQtArdp˂rbdQZ|ZHAbtArdXQJ`ےp˂r~f`JXQr˅nXv`drtfH~˂|ZdQnXv`drtfH~˂|ZdQXQJ`ےdrtAے`JXQ|ZdQbbHAZXQJ`ےvXnpZHAbf~HAJltf`vXbtlf~HAJltf`vXbtlbHAZJltr˂ptlJp˂rbHAZvp`vJAdfpvbdQZ|nvpJtArdfpvbdQZ|nvpJtArdp˂rbdQZ|ZHAbfpvXQJ`ےp˂rXnv|ZdQnXv`drtfH~˂|ZdQnXv`drtfH~˂|ZdQXQJ`ےdtAJے`JXQnXv`bHAZXQJ`ےpfH~btlf~HAJltf`vXbtlf~HAJltf`vXbtl|bHAZltbr˂pf~Hp˂rbHAZf`vJtArdfpvbdQZ|nvpJtArdfpvbdQZ|nvpZdQbtp˂rnvpZHAbfpvXQJ`ےp˂rXnv|ZdQnXv`drtfH~˂|ZdQnXv`drtfH~ˉlJtXQJ`ےfHfے`JXQnXv`bHAZXQJ`ےpfH~btlf~HAJltf`vXbtlf~HAJltf`vXArd|bHAZ`vXnr˂pf~Hp˂rbHAZvpJtArdfpvbdQZ|nvpJtArdfpvbdQZ|nvpZdQbtp˂rvpfZHAbfpvXQJ`ےp˂rfH~|ZdQnXv`drtfH~˂|ZdQnXv`drtfے`JXlJtXQJ`ےH~fے`JXQnXv`bHAZXQJ`ےf`vXbtlf~HAJltf`vXbtlfHAJltQHAbArdt琙bHAZ`vXnr˂pf~Hp˂rbHAZnvpJtArdfpvbdQZ|nvpJtArdfpvbdQZ|`JXQlJfpp˂rvpfZHAbfpvXQJ`ےp˂rfH~|ZdQnXv`drtfH~˂|ZdQnrXQJ`drtr˂pvnvXQJ`ےH~fے`JXQnXv`bHAZp˂rvpfZHAbXv`pbdQZ|vpfHArd|fpvbdQZ|vpfHArd|vnJltJXQrpvn˂rXQvpfHHAbےpvn˂rXQvpfHlJtArfpvQZ|dvpfے`rd|炀rXQQZ|d˂p`XnvˍXQJ`ےH~fے`JXQvnXdrtA~f`ZdQbtnXv`˂drtA~f`ZdQbtrXQJ`bdQZ|˂pZHAXv`fJ`ے~f``JXQrXv`fJ`ے~f`d|ZnXv`rtAJlJXQrZdQbtJ`ےrtAJlJXQrpfH~ㅐbHAZ`vXnr˂pv`fJltvXnlJtf~HJltvXnlJtHAZpdrtAbے`~HfbHAZpvXn˂pZ~HfbHAZpvXndQbt璍ffpۑtbd˂pZHlJtAbHAZpˑtbdpZHAf۝`vp˂rvpfZHAb~HfpbdQZ|vpfHArd|fpvbdQZ|vpfArd|˂rXJltJXQrpvn˂rXQvpfHHAbےpvn˂rXQvpfHl|ZdQvnrXQZ|dAbے`rd|炀rXQQZ|dbے`XnvˍXQJ`ےH~fے`JXQvnXrAJl璅~f`ZdQbtnXv`˂drtA`JXQZdQbtQJ`ےbdQZ|lZHAbXv`fJ`ے~f``JXQrXv`fJ`ے~f`btlQJ`ےrtAJlJXQrZdQbtJ`ےrtAJlJXQrpfH~ㅐbHAZ`vXnr˂pv`ftbdQZvXnlJtfHfpJltr˂plJtbHAZptbd`JXQ~HfbHAZpvXn˂pZ~HfbHAZpvXnJtArdHAZpˑtbd˂pZHlJtAbHAZpˑtbdpZHAf۝`vp˂rvpfZHAb~HXv|drvpfHArd|vnbdQZ|ZHAbArd|˂rXQZ|dr˂ppvn˂rXQvpfHHAbےpvn˂rXQvpfH|ZdQrXQQZ|dAbے`rd|炀rXQQZ|db˂pXnvˍXQJ`ےH~fے`JXQ`f~tAJl璅~f`ZdQbtrXQJ`ۂdrtA`JXQZdQbtQJ`ےrtAJlZHAbXv`fJ`ے~f``JXQrXv`fJ`ےJ~f`btlJ`ےrtAJlJXQrZdQbtJ`ےrtAJlZHAbpfH~ㅐbHAZ`vXnr˂pHfpvtbdQZvXnlJtHAZpJltr˂plJtbHAZptbd`JXQ~HfbHAZpvXn˂pZ~HfltbvXnJtArdbHAZpˑtbd˂pZHlJtAbHAZpˑtbdے`JXf۝`vp˂rvpfZHAbnXv|drvpfArd|˂rXbdQZ|ZHAbArd|˂rXQZ|lr˂pZpvn˂rXQvpfHHAے`pvndQZ|vpfHtlJrXQQZ|dAbے`rd|炀rXQQZ|dQr˂pXnvˍXQJ`ےH~fے`JXQ`f~tAJbd`JXQZdQbtQJ`ےdrtA`JXQZdQbtQJ`ےtbnAb`JXv`fJ`ے~f`JXQrbXv`fdrtAJ~f`tArdJ`ےrtAJlJXQrZdQbtJ`ےrtAJlZHAbpfH~ㅐbHAZ`vXnr˂pHfpvQZ|dr˂plJtbHAZpJltr˂plJtbHAZpvp`XQr˂~HfbHAZpvXntlJ~HfltbvXn|ZdQbbHAZpˑtbd˂pZHlJtAbHAZpˑtbdے`JXf۝`vp˂rvpfZHAے~HrtAJlZHAbArd|˂rXbdQZ|ZHAbArd|˂rXvXnpZHAbpvn˂rXQvpfHtAd|pvndQZ|vpfHtlJrXQQZ|dAbے`rd|炀rXQQZ|dQHAbXnvˍXQJ`ےH~f`JXQrfpvtbd`JXQZdQbtQJ`ےdrtA`JXQZdQbtQJ`ےvpfHے`JXv`fJ`ےJ~f`ZdQbtXv`fdrtAJ~f`tArdJ`ےrtAJlJXQrZdQbtJ`ےtAJl`JXQpfH~ㅐbHAZ`vXnbtlnXv`QZ|dr˂plJtbHAZpJltr˂plJtbHAZp~f`XQr˂~HfltbvXnlJtA~HfltbvXn|ZdQtAbHAZpˑtbd˂pZHlJtAbHAZp˒tbnr˂pf۝`vp˂rvpfJtAdf~HrtAJlZHAbArd|˂rXbdQZ|ZHAbArd|˂rXvXnpZA`pvndQZ|vpfHrd|pvndQZ|vpfHrd|rXQQZ|dAbے`rd|炀rXQvpfHZHAbXnvˍXQJ`ےH~f|ZdQbfpvtbQZ`JXQZdQbtQJ`ےdrtA`JXQZdQbtQJ`ےvp`vXJXQrbXv`fdrtAJ~f`ZdQbtXv`fdrtAJ~f`ZdQbtJ`ےrtAJlJXQrZdQbtJ`ےㅐf``JXQpfH~Jlt`vXntlJnXv`drtAr˂plJtbHAZpJltr˂plJtbHAZpnvptlJ~HfltbvXnlJtA~HfltbvXnlJtAbHAZpˑtbd˂pZHlJfpbHAZpvXnr˂p`f۝`vbdQZ|vpftArdpvnJltZHAbArd|˂rXbdQZ|ZHAbArd|˂rXfH~tAd|pvndQZ|vpfHrd|pvndQZ|vpfHrd|rXQQZ|dAbے`vnXrXQvpfHJXQrXnvˍdrtAH~f|ZdQbXv`fbdQZ|`JXQZdQbtQJ`ےdrtA`JXQZdQbtQJ`ےf`vXZdQbtXv`fdrtAJ~f`ZdQbtXv`fdrtAJ~f`ZdQbtJ`ےtAJlJXQrv`fJ`ے~f`˂pZHpfH~Jlt`vXntlJ~HfdrtAr˂plJtbHAZpJltr˂plJbHAZpnvplJtA~HfltbvXnlJtA~HfltbvXnl|ZbHAZp˒tbn˂pZH~HfpbHAZpvXnAbے`f۝`vbdQZ|vpftArdpvnJltZHAbArd|˂rXbdQZ|ZHAbfpv˂rXfH~rd|pvndQZ|vpfHrd|pvndQZ|vpfHdQbt璂rXQvpfHAbے`vnXrXQvpfHJXQrXnvˍdrtAH~f|ZdQbXv`pbdQZ|`JXQZdQbtQJ`ےdtAJl`JXQnXv`QJ`ےvpZdQbtXv`fdrtAJ~f`ZdQbtXv`fdrtAJ~f`lJtArJ`ےㅐf`JXQrv`fJ`ے~f`˂p`ZpfH~Jlt`vXntlJvnrrAJlr˂plJtbHAZptbr˂pf~HbHAZpfH~lJtA~HfltbvXnlJtA~HfltbvXnd|ZbHAZpvXnۉ˂pZH~HfpbHAZpvXnQXb㉀f۝`vbdQZ|vpftArdXQJ`ptbdQZHAbArd|˂rXnvpZHAbfpv˂rXf`vXrd|pvndQZ|vpfHrd|pvndQZ|vpfےdQbt璂rXQvpfHAbے`vnXrXQvpfHۑpJAHrXnvˍdrtAH~f|ZdQb˂rXQZ|d`JXQZdQbtQJ`ےfHf``JXQnXv`QJ`ےnvpZdQbtXv`fdrtAJ~f`ZdQbtXv`fdrtAJ`JXQHAlJtArJ`ے~f`JXQrv`fJ`ے~f`󙐂ˁ`Zp|drJlt`vXntlJJ`ےrtAJlr˂plJbHAZpvXnr˂pf~HbHAZpfH~lJtA~HfltbvXnlJtAHfpltbbے`dtlbHAZpvXnۉ˂pZH~HfpbHAZpvXnQXb㉀QtJlbdQZ|vpftArdbHAZptbdQZHAbfpv˂rXvpfHZHAbfpv˂rXf`vXHrd|pvndQZ|vpfHrd|vnrdQZ|JXQrJfpvrXQvpfHAbے`vnXrXQvpfHۑp`ZQtbAdZdrtAH~f|ZdQb˂rXQZ|AJl`JXQnXv`QJ`ے~f``JXQnXv`QJ`ے~f`ZdQbtXv`fdrtAJ~f`ZdQbtXQJ`ےdrtAJ˂pZHAnvfJ`ے~f`JXQrv`fJ`ے~f`Xb㉀ۑ|drJlt`vXntlJJ`p˂tbr˂pf~HbHAZpvXnr˂pf~HbHAZpvXnlJtA~HfltbvXnlJtAHAZpltbbے`~HfpbHAZpvXnۉ˂pZH~HfpbHAZpvXnpJAHrQtJlbdQZ|vpftArdrXQJnvpZHAbfpv˂rXvpfHZHAbfpv˂rXvpfHrd|pvndQZ|vpfےrd|˂rXQdQZ|JXQrvnXrXQvpfHAbے`vnXrXQvpfHˁ`ZQtbAdZdrtAH~f|ZdQb`ےbfHf``JXQnXv`QJ`ے~f``JXQnXv`QJ`ے~f`ZdQbtXv`fdrtAJ`JXQrZdQbtJ`ےdrtAJ˂p`Jv`fJ`ے~f`JXQrv`fJ`ے~f`Xb㉀ۑ|drJlt`vXntlJHAZp˂vXnr˂pf~HbHAZpvXnr˂pf~HbHAZpvXnlJtAHfpltb˂pZlJtAbHAZpltbXQr˂~HfpbHAZpvXnۉ˂pZH~HfpbHAZpvXnpJAHrQtJlbdQZ|vpftArdrXQJvpfHZHAbfpv˂rXvpfHZHAbfpv˂rXvp`rd|vnrdQZ|HAbےrd|˂rXQdQZ|pZHAbvnXrXQvpfHAbے`vnXrXQvpfH󐉀ۑpJtbAdZdrtAے`JXQ|ZdQb`ےb~f``JXQnXv`QJ`ے~f``JXQnXv`QJ`ےvXnZdQbtXQJ`ےdrtAJ`JXQrZdQbtJ`ےdrtAJے`Jv`f~J`ے~f`JXQrv`fJ`ےJl~f`AHr󙐂|drJltr˂ptlJHAXQJ`vXnr˂pf~HbHAZpvXnr˂pf~HbHAZpvpfHlJtAHAZpltb˂pZlJtAbHAZpltbXQr˂fpvbHAZpvXnۉ˂pZH~HfptbdvXnˁ`ZQXbQtJlbdQZ|ZHAbtArdےbHAvpfHZHAbfpv˂rXvpfHZHAbfpv˂rX~f`rd|˂rXQdQZ|HAbےrd|˂rXQdQZ|pZHAbnXv`rXQvpfHAے`vnXQZ|dvpfH㉀ۑpJtbAdZdrtAے`JXQ|ZdQbZp˂~f``JXQnXv`QJ`ے~f``JXQnXv`QJ`ےvXnZdQbtJ`ےdrtAJ`JXQrZdQbtJ`ےdrtAJ˂pf~HJ`ے~f`JXQrbtv`frtAJl~f`AHr󙐂|drJltr˂ptlJrXQJ`vXnr˂pf~HbHAZpvXnr˂pf~HJltdvpfHlJtAbHAZpltb˂pZlJtAbHAZpltbZHAbfpvbHAZpvXnۉlJt~HfptbdvXnˁ`ZQXAQtJlbdQZ|ZHAbtArdےbHAvpfHZHAbfpv˂rXvpfHZHAے`fpvrtAJl~vprd|˂rXQdQZ|HAbےrd|˂rXQdQZ|ے`JXQnXv`rXQvpfHAd|vnXQZ|dvpfHHr󙐂ˁtbAdZdrtAے`JXQ|ZdQbZp˂~f``JXQnXv`QJ`ے~f`JXQrnXv`ˑtbdfے`ZdQbtJ`ےdrtAJ`JXQrZdQbtJ`ےdrtAJr˂pf~HJ`ےJl~f`ZdQbtv`frtAJl~f``ZQXb|drJltr˂ptlJbHAZvXnr˂pf~HbHAZpvXnbtlf~HQZ|dJXQrZlJtAbHAZpltb˂pZlJtAbHAZpltbZHAbfvnXtbdvXnےlJtA~HfptbdvXnۀۑpJAQtJlbdQZ|ZHAbtArdp˂rvpfHZHAbfpv˂rXvpfHJtAd|fpvrtAJlHAbےrd|˂rXQdQZ|HAbےrd|˂rXQdQZ|ے`JXQv`fQZ|dvpfHrd|vnXQZ|dvpfHHr󙐂ˁtbAdZdrtAے`JXQ|ZdQbXQJ`ے~f``JXQnXv`QJ`ے~f`ZdQbtnXv`ˑtbd`JXQrZdQbtJ`ےdrtAJ`JXQrZdQbtJ`ےdtAJlHAbے~HfpۙrtAJl~f`ZdQbtv`frtAJl~f``ZQXb|drJltr˂ptlJbHAZvXnr˂pf~HJltvXnlJtf~HQZ|l瀉˂pZlJtAbHAZpltb˂pZlJtAbHAZptbn`JXQrvnXtbdvXnےlJtA~HfptbdvXnۀۑp`ZQtJlbdQZ|ZHAbtArdp˂rvpfHZHAے`fpvbdQZ|vpfHArd|fpvtbdQHAbےrd|˂rXQdQZ|HAbےrd|˂rXQvpf˂pZv`fQZ|dvpfHrd|vnXQZ|dvpfHQXb㉀tbAdZdrtAے`JXQ|ZdQbXQJ`p~f`JXQrnXv`˂drtA~f`ZdQbtnXv`Z|d`JXQrZdQbtJ`ےdrtAJ`JXQrZdQbtJ`ےHf`HAbے~HfpۙrtAJl~f`ZdQbtv`frtAJl~f`ۑpJAHr|drJltr˂ptlJ˂rXQvXnbtlf~HJltvXnlJtf~HrtAJl瀉˂pZAlJtAbHAZpltb˂pZlJfbHAZpvXn`JXQrvnvftbdvXnےlJtA~HfptbdvXn󙐂ˁ`ZQtJlbdQZ|ZHAbtArdJ`ےvpfHJtAd|fpvbdQZ|vpfHArd|fpvtbdQb`JXrd|˂rXQdQZ|HAbےpvn˂rXQvpfH˂p`~HfQZ|dvpfHrd|vnXQZ|dvpfHQXb㉀tbAdZdrtAے`JXQ|ZdQbbHAZp~f`ZdQbtnXv`˂drtA~f`ZdQbtnXv`Z|dQr˂pZdQbtJ`ےdtAJl`JXQrXv`fJ`ے~f`JXQrpvnrtAJl~f`ZdQbtv`frtAJl~f`ۑpJAH|drJltr˂ptlJ˂rXQvXnlJtf~HJltvXnlJtf~HrtAdQZ|ZHAblJtAbHAZptbn˂pZ~HfbHAZpvXn˂pZHAXv`ftbdvXnےlJtA~HfptbdvXnېf۝`vQtJlbdQZ|ZHAbfpvJ`ےvpfHArd|fpvbdQZ|vpfHArd|fpvdrtے`JXrd|˂rXQvpfHAbےpvn˂rXQvpfHbے`~HfQZ|dvpfHrd|vnXQZ|dvpfZHXnvˍtbAdZdtAJے`JXQ~HfbHAXQJ~f`ZdQbtnXv`˂drtA~f`ZdQbtnXv`AJltQr˂pZdQbtJ`ےHf``JXQrXv`fJ`ے~f`JXQrpvnrtAJl~f`ZdQbtv`frtAJlAbے`pfH~|drltbr˂ppvn`ےJlvXnlJtf~HJltvXnlJtf~HbdQZ|ZHAblJfbHAZpvXn˂pZ~HfbHAZpvXn˂p`JXv`ftbdvXnےlJtAHfpۑtbdJXQrf۝`vQtJlnvpZHAbXv`ftbQZvpfHArd|fpvbdQZ|vpfHArd|fpvdrtJQrpvn˂rXQvpfHHAbےpvn˂rXQvpfHXQrbt~fpvQZ|dvpfHrd|vnrXQZ|d˂pZHXnvˍtbAdZfHfے`JXQ~HfdrtA~f`ZdQbtnXv`˂drtA~f`ZdQbtnXv`AJlt˂pZHAXv`fJ`ے~f``JXQrXv`fJ`ے~f`l|ZnXv`rtAJl~f`ZdQbtQJ`ےrtAJlAbے`pfH~|dr`vXnr˂ppvnJltvXnlJtf~HJltvXnlJtfHfpdrtAbے`~HfbHAZpvXn˂pZ~HfbHAZpvXndQbt璍f~HtbdvXnےlJtAHAZpˑtbdJXQrf۝`vQtJlt-----------.............................................. \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv33_3.dat b/vendor/endroid/qr-code/assets/data/qrv33_3.dat new file mode 100644 index 000000000..815f34988 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv33_3.dat @@ -0,0 +1,297 @@ +}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVU}~}~}~}~{|{|{|{|yzyzyzyzwvuvuvuvststststqrqrqpopnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVU}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststopopoooonmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVU}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststoopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVU}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVU}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVU}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVU}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVU}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVU}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststooooopopnmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVU}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopnmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVU}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststopopopopnmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVU}~}~}~}~{|{|{|{|yxwxwxwxuvuvuvuvststststopopopopnmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVU}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststopopopopnmnmnmnmjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVU}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststopopopopnmnmnmnmjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVU}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststopoooooonmnmnmnmjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVU}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVU}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststpopopoponmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVU}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvststststpopopoponmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVU}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvstststsrpopopoponmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVU}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrpopopoponmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVU}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrpopopooonmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUTSTS}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvqrqrqrqrooopopopnmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSSSSS}~}~}~}~{zyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopopnmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTST}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopoplklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTST}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopoplklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTST}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopoplklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTST}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqropopopoplklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTST}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqroooooopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTSS}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqrpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWSSSSTSTSSSSSSTST}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqrpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSSTSTSTST}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqrpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSSTSTSTST}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqrpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSSTSTSTST}~}~}~}~yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqrpopooooolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSSTSTSTST}|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqrpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSSTSSSSST{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWTSSSSSSTSTSTSTSR{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTSTQRQRQRQR{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvqrqrqrqrnmnmnmnmlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTSTQRQRQRQR{|{|{|{|yzyzyzyzwxwxwxwxutstststqrqrqrqrnmnmnmnmlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTSTQRQRQRQR{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWVUSTSTSTSTQRQRQRQR{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTSTQRQRQRQR{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSSSSQRQRQRQR{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUSSTSTSTSQRQRQRQR{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSQRQRQRQR{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSQRQRQRQR~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSQRQRQRQR}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSQRQRQRQR}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststststqrqrqrqrnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSQRQRQRQRQRQRQRQROPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787743434343212121210/0/0/0/.-.-.-,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +QRQRQRQROPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7777878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +QRQRQRQROPOPOPOPMNMNMNMLIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:8787878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +QRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:8787878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +QRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:8787878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%$#"!"!"!"!     + + + +QRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:8787878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +QRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:8777778743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +QRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:8787876543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +QRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:6565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +QRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=>9:9:9:9:6565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!      + + + +QRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@=>=>=>=<9:9:9:9:6565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +QRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:6565656543434343212121210/0/0/.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!         + + + +QRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!       + + + +QRQRQRQROPOPOPONKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +QRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +QRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('&%$#$#$#$#"!"!"!"!     + + + +QRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     + + + +QRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     + + + +QRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     + + + +QRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     + + + +QRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;<;<;<9:9:9:9:656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     + + + +QRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB?@?@?@?>;<;<;<;<9:9:9:9:656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     + + + +QRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<9:98787865656565434343432121210/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     + + + +QRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<7877777765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     + + + +QRQRQRQPMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     + + OPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!     OPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)('&%&%&%&%$#$#$#$#"!"!"!"!     OPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!     OPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!     OPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<8787877765656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!     OPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<7778787865656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!      OPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<7878787865656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         OPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCDABABABA@=>=>=>=>;<;<;<;<7878787865656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         OPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<7878787865656565434343210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         OPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<7878787865656565212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         OPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<7878787865656565212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + +OPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<7777778765656565212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +OPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<8787878765656565212121210/0/0/0/.-.-.-.-,+,+,+*)('('('('&%&%&%&%$#$#$#$#         + + + +OPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<8787878765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#         + + + +OPOPOPOPMNMNMNMNKLKLKLKJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;<;<8787878765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#         + + + +OPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>;<;<;:9:8787878765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#         + + + +OPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:8787878765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#"!         + + + +OPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>9:9:9:9:8787777765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +OPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCB?@?@?@?@=>=>=>=>9:9:9:9:7878787865656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +OPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787865656543212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +OPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787843434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +OPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787843434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!       + + + +OPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@=>=>=>=>9:9:9:9:7878787843434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +==>>??@@KJJIIHHG MLLKKJJItuuvvwwx ]\\[[ZZYdeeffgghcbbaa``_5566778844332211%%&&''((DDCCBBAA}}~~TTSSRRQQmmnnoopp++,,--..AABBCCDD GFFEEDDC !!""##$IHHGGFFExyyzz{{|YXXWWVVUhiijjkkl_^^]]\\[99::;;<<00//..--))**++,,@@??>>==PPOONNMMqqrrsstt//001122EEFFGGHH + + CBBAA@@?$%%&&''(EDDCCBBA|}}~~UTTSSRRQlmmnnoop[ZZYYSSR==>>??@@,,++**))--..//00<<;;::99 LLKKJJIIuuvvwwxx33445566IIJJKKLL + + ?>>==<;:())**++,A@@??>>=QPPOONNMpqqrrsst + + RQQPPOONAABBCCDD((''&&%%1122334488776655!!""##$$HHGGFFEEyyzz{{||77==>>??MMNNOOPP98776655,--..//0=<<;;::9 MLLKKJJItuuvvwwx NMMLLKKJEEFFGGHH$$##""!!5566778844332211%%&&''((DDCCBBAA}}~~@@AABBCC~~}}QQRRSSTT443322110112233498877665 !!""##$IHHGGFFExyyzz{{|JIIHHGGFIIJJKKLL 99::;;<<00//..--))**++,,@@??>>==DDEEFFGG||{{zzyyUUVVWWXX00//..--4556677854433221$%%&&''(EDDCCBBA|}}~~FEEDDCCB~~}}MMNNOOPP==>>??@@,,++**))--..//00<<;;::99HHIIJJKKxxwwvvuuYYZZ[[\\!!"",,++**))899::;;<100//..-())**++,A@@??>>=BAA@@??>||{{zzyyQQRRSSTT~~}}AABBCCDD((''&&%%1122334488776655LLMMNNOOttssrrqq]]^^__``##$$%%&&((''&&%%<==>>??@-,,++**),--..//0=<<;;::9 >==77665xxwwvvuuUUVVWWXX||{{zzyyEEFFGGHH$$##""!!5566778844332211PPQQRRSSppoonnmmaabbccdd''(())**$$##""!!~~}@AABBCCD)((''&&%0112233498877665 !!""##$54433221tsrqpoonYYZZ[[\\ xxwwvvuuIIJJKKLL 99::;;<<00//..--YYZZ[[\\llkkjjiieeffgghh++,,--.. }||{{zzyDEEFFGGH%$$##""!4556677854433221$%%&&''(100//..-nmmllkkj]]^^__`` + + ttssrrqqMMNNOOPP==>>??@@,,++**))]]^^__``hhggffeeiijjkkll//001122yxxwwvvuHIIJJKKL! 899::;;<100//..-())**++,-,,++**)jiihhggfaabbccddppoonnmmQQRRSSTT~~}}AABBCCDD((''&&%%aabbccddddccbbaammnnoopp33445566uttssrrqLMMNNOOP<==>>??@-,,++**),--..//0)((''&&%feeddccbeeffgghhllkkjjiiUUVVWWXX||{{zzyyEEFFGGHH$$##""!!eeffgghh``__^^]]qqrrsstt77==>>??qppoonnmPQQRRSST~~}@AABBCCD)((''&&%01122334%$$##""!baa``__^iijjkkllhhggffeeYYZZ[[\\ xxwwvvuuIIJJKKLL iijjkkll\\[[ZZYYuuvvwwxx@@AABBCC +mllkkjjiTUUVVWWX}||{{zzyDEEFFGGH%$$##""!45566778!^]]\\[[Zmmnnooppddccbbaa]]^^__`` + + ttssrrqqMMNNOOPP~~}}||mmnnoouuXXWWVVUUyyzz{{||DDEEFFGG + ihhggffeXYYZZ[[\ yxxwwvvuHIIJJKKL! 899::;;<ZYYXWVUTqqrrsstt + + ``__^^]]aabbccddppoonnmmQQRRSSTT{{zzyyxxvvwwxxyyTTSSRRQQ}}~~HHIIJJKKeddccbba\]]^^__` + + uttssrrqLMMNNOOP<==>>??@SSRRQQPPuuvvwwxx \\[[ZZYYeeffgghhllkkjjiiUUVVWWXXwwvvuuoozz{{||}}PPOONNMMLLMMNNOO + + a``__^^]`aabbccd qppoonnmPQQRRSST~~}@AABBCCD OONNMMLLyyzz{{||XXWWVVUUiijjkkllhhggffeeYYZZ[[\\ nnmmllkk~~LLKKJJIIPPQQRRSS ]\\[[ZZYdeeffgghmllkkjjiTUUVVWWX}||{{zzyDEEFFGGH + + KKJJIIHH}}~~TTSSRRQQmmnnooppddccbbaa]]^^__`` + + jjiihhggHHGGFFEEYYZZ[[\\YXXWWVVUhiijjkklihhggffeXYYZZ[[\ yxxwwvvuHIIJJKKLGGFFEEDDPPOONNMMqqrrsstt + + ``__^^]]aabbccddffeeddccDDCCBBAA]]^^__``UTTSSRRQlmmnnoopeddccbba\]]^^__` + + uttssrrqLMMNNOOP CCBBAA@@ LLKKJJIIuuvvwwxx \\[[ZZYYeeffgghhbbaa``__@@??>>==aabbccddQPPOONNMpqqrrsst + + a``__^^]`aabbccd qppoonnmPQQRRSST + + ??>>==<;!!""##$$HHGGFFEEyyzz{{||XXWWVVUUiijjkkll^^]]\\[[<<;;::99eeffgghh MLLKKJJItuuvvwwx ]\\[[ZZYdeeffgghmllkkjjiTUUVVWWX :9877665%%&&''((DDCCBBAA}}~~TTSSRRQQmmnnooppZZYYSSRR88776655iijjkkll !!""##$IHHGGFFExyyzz{{|YXXWWVVUhiijjkklihhggffeXYYZZ[[\54433221))**++,,@@??>>==PPOONNMMqqrrsstt + + QQPPOONN44332211mmnnoouu$%%&&''(EDDCCBBA|}}~~UTTSSRRQlmmnnoopeddccbba\]]^^__`100//..---..//00<<;;::99 LLKKJJIIuuvvwwxx MMLLKKJJ00//..--vvwwxxyy())**++,A@@??>>=QPPOONNMpqqrrsst + + a``__^^]`aabbccd!!"-,,++**)1122334488776655!!""##$$HHGGFFEEyyzz{{||IIHHGGFF,,++**))~~}}||zz{{||}},--..//0=<<;;::9 MLLKKJJItuuvvwwx ]\\[[ZZYdeeffggh"##$$%%&)((''&&%5566778844332211%%&&''((DDCCBBAA}}~~EEDDCCBB~~}}|((''&&%%{{zzyyxx~~0112233498877665 !!""##$IHHGGFFExyyzz{{|YXXWWVVUhiijjkkl&''(())*%$$##""!99::;;<<00//..--))**++,,@@??>>==AA@@??>>|{{zzyyx$$##""!!wwvvuuoo4556677854433221$%%&&''(EDDCCBBA|}}~~UTTSSRRQlmmnnoop*++,,--.! ==>>??@@,,++**))--..//00<<;;::99 ==776655xwwvvuut nnmmllkk899::;;<100//..-())**++,A@@??>>=QPPOONNMpqqrrsst.//00112~~}}AABBCCDD((''&&%%1122334488776655!!""##$$44332211srqpoonn jjiihhgg<==>>??@-,,++**),--..//0=<<;;::9 MLLKKJJItuuvvwwx23344556||{{zzyyEEFFGGHH$$##""!!5566778844332211%%&&''((00//..--mmllkkjjffeeddcc@AABBCCD)((''&&%0112233498877665 !!""##$IHHGGFFExyyzz{{|677==>>?xxwwvvuuIIJJKKLL 99::;;<<00//..--))**++,,,,++**))iihhggffbbaa``__DEEFFGGH%$$##""!4556677854433221$%%&&''(EDDCCBBA|}}~~?@@AABBC ttssrrqqMMNNOOPP==>>??@@,,++**))--..//00((''&&%%eeddccbb ^^]]\\[[HIIJJKKL! 899::;;<100//..-())**++,A@@??>>=CDDEEFFG + + ppoonnmmQQRRSSTT~~}}AABBCCDD((''&&%%11223344$$##""!!aa``__^^ + + + ZZYYSSRRLMMNNOOP<==>>??@-,,++**),--..//0=<<;;::9GHHIIJJKllkkjjiiUUVVWWXX||{{zzyyEEFFGGHH$$##""!!55667788]]\\[[ZZ +  + + QQPPOONNPQQRRSST~~}@AABBCCD)((''&&%0112233498877665KLLMMNNOhhggffeeYYZZ[[\\ xxwwvvuuIIJJKKLL 99::;;<<YYXWVUTS MMLLKKJJ~~}}|TUUVVWWX}||{{zzyDEEFFGGH%$$##""!4556677854433221OPPQQRRSddccbbaa]]^^__`` + + ttssrrqqMMNNOOPP==>>??@@SRRQQPPOIIHHGGFF|{{zzyyxXYYZZ[[\ yxxwwvvuHIIJJKKL! 899::;;<100//..-SYYZZ[[\ + + ``__^^]]aabbccddppoonnmmQQRRSSTT~~}}AABBCCDD ONNMMLLK EEDDCCBBxwwvvuut\]]^^__` + + uttssrrqLMMNNOOP<==>>??@-,,++**)\]]^^__` \\[[ZZYYeeffgghhllkkjjiiUUVVWWXX||{{zzyyEEFFGGHH + + KJJIIHHG + + AA@@??>>srqpoonn`aabbccd qppoonnmPQQRRSST~~}@AABBCCD)((''&&%`aabbccdXXWWVVUUiijjkkllhhggffeeYYZZ[[\\ xxwwvvuuIIJJKKLLGFFEEDDC  ==776655mmllkkjjdeeffgghmllkkjjiTUUVVWWX}||{{zzyDEEFFGGH%$$##""!deeffgghTTSSRRQQmmnnooppddccbbaa]]^^__`` + + ttssrrqqMMNNOOPP CBBAA@@?!!""##$$44332211iihhggffhiijjkklihhggffeXYYZZ[[\ yxxwwvvuHIIJJKKL! hiijjkklPPOONNMMqqrrsstt + + ``__^^]]aabbccddppoonnmmQQRRSSTT + + ?>>==<;:%%&&''((00//..--eeddccbblmmnnoopeddccbba\]]^^__` + + uttssrrqLMMNNOOP~~}}|lmmnnoou LLKKJJIIuuvvwwxx \\[[ZZYYeeffgghhllkkjjiiUUVVWWXX98776655))**++,,,,++**))aa``__^^pqqrrsst + + a``__^^]`aabbccd qppoonnmPQQRRSST|{{zzyyxuvvwwxxy!!""##$$HHGGFFEEyyzz{{||XXWWVVUUiijjkkllhhggffeeYYZZ[[\\44332211 !--..//00((''&&%%]]\\[[ZZtuuvvwwx ]\\[[ZZYdeeffgghmllkkjjiTUUVVWWXxwwvvuuoyzz{{||}%%&&''((DDCCBBAA}}~~TTSSRRQQmmnnooppddccbbaa]]^^__``00//..--!""##$$%11223344$$##""!!YYXWVUTSxyyzz{{|YXXWWVVUhiijjkklihhggffeXYYZZ[[\ onnmmllk}~~))**++,,@@??>>==PPOONNMMqqrrsstt + + ``__^^]]aabbccdd!!"",,++**))%&&''(()55667788SRRQQPPO|}}~~UTTSSRRQlmmnnoopeddccbba\]]^^__` + + kjjiihhg--..//00<<;;::99 LLKKJJIIuuvvwwxx \\[[ZZYYeeffgghh##$$%%&&((''&&%%)**++,,-99::;;<<ONNMMLLKQPPOONNMpqqrrsst + + a``__^^]`aabbccd gffeeddc1122334488776655!!""##$$HHGGFFEEyyzz{{||XXWWVVUUiijjkkll''(())**$$##""!!-..//0011223344587766554!""##$$%HGGFFEEDyzz{{||}XWWVVUUTijjkkllm'(())**+$##""!! ::;;<<==//..--,,**++,,--??>>==<<@@??>>=={zzyyxxwRSSTTUUV~~}}||{BCCDDEEF'&&%%$$#23344556IHHGGFFE5667788943322110%&&''(()DCCBBAA@}~~TSSRRQQPmnnooppq+,,--../>>??@@AA++**))((..//0011;;::9988 !!77665544wvvuutsrVWWXXYYZ{zzyyxxwFGGHHIIJ#""!! 6778899:EDDCCBBA9::;;<<=0//..--,)**++,,-@??>>==<POONNMMLqrrssttu/0011223~~}}||BBCCDDEE''&&%%$$2233445577665544""##$$%%33221100qpoonnmmZ[[\\]]^ wvvuuttsJKKLLMMN:;;<<==>A@@??>>==>>??@@A,++**))(-..//001<;;::998 !LKKJJIIHuvvwwxxy34455667{{zzyyxxFFGGHHII##""!! 6677889933221100&&''(())//..--,,llkkjjii^__``aab + + srrqqppoNOOPPQQR>??@@AAB =<<;;::9ABBCCDDE(''&&%%$1223344587766554!""##$$%HGGFFEEDyzz{{||}7==>>??@wwvvuuttJJKKLLMM::;;<<==//..--,,**++,,--++**))((hhggffeebccddeefonnmmllkRSSTTUUV~~}}||{BCCDDEEF + + +98877665EFFGGHHI$##""!! 5667788943322110%&&''(()DCCBBAA@}~~@AABBCCD + +ssrrqqppNNOOPPQQ>>??@@AA++**))((..//0011''&&%%$$ddccbbaafgghhiijkjjiihhgVWWXXYYZ{zzyyxxwFGGHHIIJ + 54433221IJJKKLLM 9::;;<<=0//..--,)**++,,-@??>>==>??@@A,++**))(-..//001<;;::998HIIJJKKLkkjjiihhVVWWXXYY{{zzyyxxFFGGHHII##""!! 66778899\\[[ZZYYnooppqqr +cbbaa``_^__``aab + + srrqqppoNOOPPQQR-,,++**)QRRSSTTU~~}}|ABBCCDDE(''&&%%$1223344587766554LMMNNOOPggffeeddZZ[[\\]] wwvvuuttJJKKLLMM::;;<<==XWVUTSSRrssttuuv + _^^]]\\[bccddeefonnmmllkRSSTTUUV)((''&&%UVVWWXXY|{{zzyyxEFFGGHHI$##""!! 5667788943322110PQQRRSSY ccbbaa``^^__``aa + + ssrrqqppNNOOPPQQ>>??@@AARQQPPOONvwwxxyyz[ZZYYXXWfgghhiijkjjiihhgVWWXXYYZ!!""#%$$##""!YZZ[[\\] xwwvvuutIJJKKLLM 9::;;<<=0//..--,YZZ[[\\] + + __^^]]\\bbccddeeoonnmmllRRSSTTUU~~}}||BBCCDDEE NMMLLKKJz{{||}}~WVVUUTTSjkkllmmngffeeddcZ[[\\]]^#$$%%&&'! ]^^__``a + + tssrrqqpMNNOOPPQ=>>??@@A,++**))(]^^__``a[[ZZYYXXffgghhiikkjjiihhVVWWXXYY{{zzyyxxFFGGHHII + + JIIHHGGF~SRRQQPPOnooppqqr +cbbaa``_^__``aab'(())**+abbccddepoonnmmlQRRSSTTU~~}}|ABBCCDDE(''&&%%$abbccddeWWVVUUTTjjkkllmmggffeeddZZ[[\\]] wwvvuuttJJKKLLMMFEEDDCCBONNMMLLKrssttuuv + _^^]]\\[bccddeef+,,--../effgghhilkkjjiihUVVWWXXY|{{zzyyxEFFGGHHI$##""!! effgghhiSSRRQQPPnnooppqq ccbbaa``^^__``aa + + ssrrqqppNNOOPPQQ + +BAA@@??> !!"KJJIIHHGvwwxxyyz[ZZYYXXWfgghhiij/0011223ijjkkllmhggffeedYZZ[[\\] xwwvvuutIJJKKLLM ijjkkllmOONNMMLLrrssttuu + + __^^]]\\bbccddeeoonnmmllRRSSTTUU >==<;:98"##$$%%&GFFEEDDCz{{||}}~WVVUUTTSjkkllmmn34455667 mnnooppq dccbbaa`]^^__``a + + tssrrqqpMNNOOPPQ~~}}||{mnnoouuv !!KKJJIIHHvvwwxxyy[[ZZYYXXffgghhiikkjjiihhVVWWXXYY77665544&''(())*CBBAA@@?~SRRQQPPOnooppqqr7==>>??@ + + qrrssttu + + `__^^]]\abbccddepoonnmmlQRRSSTTU{zzyyxxwvwwxxyyz""##$$%%GGFFEEDDzz{{||}}WWVVUUTTjjkkllmmggffeeddZZ[[\\]]33221100*++,,--.?>>==<<;ONNMMLLKrssttuuv@AABBCCD + + uvvwwxxy \[[ZZYYXeffgghhilkkjjiihUVVWWXXYwvvuuoonz{{||}}~&&''(())CCBBAA@@~~SSRRQQPPnnooppqq ccbbaa``^^__``aa//..--,,.//00112;::99887 !!"KJJIIHHGvwwxxyyzDEEFFGGH yzz{{||}XWWVVUUTijjkkllmhggffeedYZZ[[\\] nmmllkkj~**++,,--??>>==<<OONNMMLLrrssttuu + + __^^]]\\bbccddee!!""##++**))((2334455676655443"##$$%%&GFFEEDDCz{{||}}~HIIJJKKL}~~TSSRRQQPmnnooppq dccbbaa`]^^__``a + + jiihhggf..//0011;;::9988 !!KKJJIIHHvvwwxxyy[[ZZYYXXffgghhii$$%%&&''''&&%%$$6778899:3221100/&''(())*CBBAA@@?~LMMNNOOPPOONNMMLqrrssttu + + `__^^]]\abbccddefeeddccb2233445577665544""##$$%%GGFFEEDDzz{{||}}WWVVUUTTjjkkllmm(())**++##""!! :;;<<==>/..--,,+*++,,--.?>>==<<;PQQRRSSY !LKKJJIIHuvvwwxxy \[[ZZYYXeffgghhibaa``__^6677889933221100&&''(())CCBBAA@@~~SSRRQQPPnnooppqq,,--..//>??@@AAB+**))(('.//00112;::99887YZZ[[\\] !""##$$%HGGFFEEDyzz{{||}XWWVVUUTijjkkllm^]]\\[[Z::;;<<==//..--,,**++,,--??>>==<<OONNMMLLrrssttuu00112233~~}}||{BCCDDEEF'&&%%$$#2334455676655443]^^__``a !!""##$%&&''(()DCCBBAA@}~~TSSRRQQPmnnooppq ZYYSSRRQ>>??@@AA++**))((..//0011;;::9988 !!KKJJIIHHvvwwxxyy44556677{zzyyxxwFGGHHIIJ#""!! 6778899:3221100/abbccdde$%%&&''()**++,,-@??>>==<POONNMMLqrrssttu + + QPPOONNMBBCCDDEE''&&%%$$2233445577665544""##$$%%GGFFEEDDzz{{||}}==>>??@@ wvvuuttsJKKLLMMN:;;<<==>/..--,,+effgghhi())**++,-..//001<;;::998 !LKKJJIIHuvvwwxxy MLLKKJJIFFGGHHII##""!! 6677889933221100&&''(())CCBBAA@@~~AABBCCDD + + srrqqppoNOOPPQQR>??@@AAB+**))(('ijjkkllm,--..//01223344587766554!""##$$%HGGFFEEDyzz{{||}IHHGGFFEJJKKLLMM::;;<<==//..--,,**++,,--??>>==<>??@@AA++**))((..//0011;;::9988IIJJKKLLkjjiihhgVWWXXYYZ{zzyyxxwFGGHHIIJ#""!! vwwxxyyz455667789::;;<<=0//..--,)**++,,-@??>>==<A@@??>>={{zzyyxxRRSSTTUU~~}}||BBCCDDEE''&&%%$$2233445577665544MMNNOOPPgffeeddcZ[[\\]]^ wvvuuttsJKKLLMMN~~}}||{z{{||}}~899::;;<=>>??@@A,++**))(-..//001<;;::998 !=7766554wwvvuutsVVWWXXYY{{zzyyxxFFGGHHII##""!! 6677889933221100QQRRSSYY +cbbaa``_^__``aab + + srrqqppoNOOPPQQR{zzyyxxw~<==>>??@~~}}|ABBCCDDE(''&&%%$1223344587766554!""##$$%43322110rqpoonnmZZ[[\\]] wwvvuuttJJKKLLMM::;;<<==//..--,,ZZ[[\\]] + _^^]]\\[bccddeefonnmmllkRSSTTUUVwvvuuoon@AABBCCD|{{zzyyxEFFGGHHI$##""!! 5667788943322110%&&''(()0//..--,mllkkjji^^__``aa + + ssrrqqppNNOOPPQQ>>??@@AA++**))((^^__``aa[ZZYYXXWfgghhiijkjjiihhgVWWXXYYZnmmllkkjDEEFFGGHxwwvvuutIJJKKLLM 9::;;<<=0//..--,)**++,,-,++**))(ihhggffebbccddeeoonnmmllRRSSTTUU~~}}||BBCCDDEE''&&%%$$bbccddeeWVVUUTTSjkkllmmngffeeddcZ[[\\]]^ jiihhggfHIIJJKKLtssrrqqpMNNOOPPQ=>>??@@A,++**))(-..//001(''&&%%$eddccbbaffgghhiikkjjiihhVVWWXXYY{{zzyyxxFFGGHHII##""!! ffgghhiiSRRQQPPOnooppqqr +cbbaa``_^__``aab + + feeddccbLMMNNOOPpoonnmmlQRRSSTTU~~}}|ABBCCDDE(''&&%%$12233445$##""!!a``__^^]jjkkllmmggffeeddZZ[[\\]] wwvvuuttJJKKLLMMjjkkllmmONNMMLLKrssttuuv + _^^]]\\[bccddeefbaa``__^~~}PQQRRSSTlkkjjiihUVVWWXXY|{{zzyyxEFFGGHHI$##""!! 56677889]\\[[ZZYnnooppqq ccbbaa``^^__``aa + + ssrrqqppNNOOPPQQ~~}}||{{nnoouuvv !!"KJJIIHHGvwwxxyyz[ZZYYXXWfgghhiij^]]\\[[Z}||{{zzyTUUVVWWXhggffeedYZZ[[\\] xwwvvuutIJJKKLLM 9::;;<<=YXWVUTSSrrssttuu + + __^^]]\\bbccddeeoonnmmllRRSSTTUUzzyyxxwwwwxxyyzz"##$$%%&GFFEEDDCz{{||}}~WVVUUTTSjkkllmmnZYYSSRRQyxxwwvvuXYYZZ[[\dccbbaa`]^^__``a + + tssrrqqpMNNOOPPQ=>>??@@ARRQQPPOOvvwwxxyy[[ZZYYXXffgghhiikkjjiihhVVWWXXYYvvuuoonn{{||}}~~&''(())*CBBAA@@?~SRRQQPPOnooppqqr +QPPOONNMuttssrrq\]]^^__``__^^]]\abbccddepoonnmmlQRRSSTTU~~}}|ABBCCDDE NNMMLLKKzz{{||}}WWVVUUTTjjkkllmmggffeeddZZ[[\\]] mmllkkjj*++,,--.?>>==<<;ONNMMLLKrssttuuv + MLLKKJJIqppoonnm`aabbccd\[[ZZYYXeffgghhilkkjjiihUVVWWXXY|{{zzyyxEFFGGHHI + + JJIIHHGG~~SSRRQQPPnnooppqq ccbbaa``^^__``aa + + iihhggff.//00112;::99887 !!"KJJIIHHGvwwxxyyzIHHGGFFEmllkkjjideeffgghXWWVVUUTijjkkllmhggffeedYZZ[[\\] xwwvvuutIJJKKLLMFFEEDDCCOONNMMLLrrssttuu + + __^^]]\\bbccddeeeeddccbb2334455676655443"##$$%%&GFFEEDDCz{{||}}~EDDCCBBAihhggffehiijjkklTSSRRQQPmnnooppq dccbbaa`]^^__``a + + tssrrqqpMNNOOPPQ +BBAA@@?? !!KKJJIIHHvvwwxxyy[[ZZYYXXffgghhiiaa``__^^6778899:3221100/&''(())*CBBAA@@?~A@@??>>=eddccbbalmmnnoopPOONNMMLqrrssttu + + `__^^]]\abbccddepoonnmmlQRRSSTTU + >>==<;:9""##$$%%GGFFEEDDzz{{||}}WWVVUUTTjjkkllmm]]\\[[ZZ:;;<<==>/..--,,+*++,,--.?>>==<<;=7766554a``__^^]pqqrrsstLKKJJIIHuvvwwxxy \[[ZZYYXeffgghhilkkjjiihUVVWWXXY87766554&&''(())CCBBAA@@~~SSRRQQPPnnooppqq YYSSRRQQ>??@@AAB+**))(('.//00112;::99887 !!"43322110]\\[[ZZYtuuvvwwxHGGFFEEDyzz{{||}XWWVVUUTijjkkllmhggffeedYZZ[[\\]43322110**++,,--??>>==<<OONNMMLLrrssttuu + + PPOONNMMBCCDDEEF'&&%%$$#2334455676655443"##$$%%&0//..--,YXXWWVVUxyyzz{{|DCCBBAA@}~~TSSRRQQPmnnooppq dccbbaa`]^^__``a0//..--,..//0011;;::9988 !!KKJJIIHHvvwwxxyyLLKKJJIIFGGHHIIJ#""!! 6778899:3221100/&''(())*,++**))(UTTSSRRQ|}}~~@??>>==<POONNMMLqrrssttu + + `__^^]]\abbccdde!!""#,++**))(2233445577665544""##$$%%GGFFEEDDzz{{||}}HHGGFFEEJKKLLMMN:;;<<==>/..--,,+*++,,--.(''&&%%$QPPOONNM<;;::998 !LKKJJIIHuvvwwxxy \[[ZZYYXeffgghhi#$$%%&&'(''&&%%$6677889933221100&&''(())CCBBAA@@~~DDCCBBAA~~}}||{NOOPPQQR>??@@AAB+**))(('.//00112$##""!!MLLKKJJIfpvXQJ`ےdrtAJJXQrbtlbHAAJltf`vXbtlf~HbHAJltJXQrArdt琙bHAZJlt`vXntlJf~HbHAZ`vXnr˂ptlJHAZp˂nXv`bHAZltb˂pZHJtArdZp˂bdQZ|nvpJtArdfpvZp˂bnvp˂pZHlJfpp˂rbdQZ|vpftArdfpvp˂rvpfZHAbtArdrXQJf~Hp˂rdQZ|`Abے`|ZdQrXQJ`ہdrtfH~˂|ZdQnXv`rXQJ`۝fHAb˝vnvXQJ`ےdrtAے`JXQ|ZdQbnXv`XQJ`ےH~fے`JXQ|ZdQb`ےbfpvXQJ`ےvXnJXQrbtlbHAAJltf`vXbtlf~HbHAf`vXpZHAf~HbHAZJltr˂ptlJf~HbHAZ`vXnr˂ptlJHAXQJ`nXv`bHAZvpfHZHAbJfpvZp˂bdQZ|nvpJtArdfpvZp˂nvpbے`fpvp˂rbdQZ|ZHAbtArdfpvp˂rvpfZHAbtArdےbHAf~Hp˂r~f`ے`JXQnXv`rXQJ`ہdrtfH~˂|ZdQnXv`rXQJ`fH~JXQrnXv`XQJ`ےdrtAے`JXQ|ZdQbnXv`XQJ`ےH~fے`JXQ|ZdQbZp˂fpvXQJ`ےvXnr˂pf~HbHAAJltf`vXbtlf~HbHAf`vXpZHAf~HbHAZJltr˂ptlJf~HJlt`vXnr˂ptlJrXQJ`nXv`bHAZvp`vZHAbfpvZp˂bdQZ|nvpJtArdfpvZp˂nvpbے`fpvp˂rbdQZ|ZHAbtArdfpvbdQZ|vpfZHAbtArdےbHAf~Hp˂rXnvے`JXQnXv`rXQJ`ہdrtfے`JX|ZdQnXv`rXQJ`fH~JXQHAbnXv`XQJ`ےdrtAے`JXQ|ZdQbnXv`drtAH~fے`JXQ|ZdQbZp˂fpvXQJ`ےpfH~r˂pf~HbHAAJltQr˂pbtlf~HbHAf`vXے`JXf~fpېbHAZJltr˂ptlJf~HJlt`vXnr˂ptlJbHAZnXv`bHAZf`vZAb`fpvZp˂bdQZ|ZHAbJtArdfpvZp˂nvpQr˂pvnXp˂rbdQZ|ZHAbtArdfpvbdQZ|vpfZHAbfpvp˂rf~Hp˂rXnvJXQr˅nXv`rXQJ`ہdrtے`JX|ZdQnXv`rXQJ`fH~ˑZHAbv`fXQJ`ےdtAJے`JXQ|ZdQbnXv`drtAH~fے`JXQ~HfXQJ`ےfpvXQJ`ےpfH~pZHAf~HbHAAJltQr˂pbtlf~HJltf`vXے`JX~HfpېbHAZltbr˂ptlJf~HJlt`vXnr˂ppvnbHAZnXv`bHAZvpbے`fpvZp˂bdQZ|ZHAbJtArdfpvbdQZ|nvpQr˂pvnXp˂rnvpZHAbtArdfpvbdQZ|vpfZHAbXv`fp˂rf~Hp˂rfH~JXQr˅nXv`rXQJ`ہdrtے`JX|ZdQnXv`drtfH~ˑ`JXQv`fXQJ`ےfHfے`JXQ|ZdQbnXv`drtAH~fے`JXQ~HfXQJ`pfpvXQJ`ےf`vXpZHAbf~HbHAAJltQr˂pbtlf~HAJltf`vXr˂p~HfvnbHAZ`vXnr˂ptlJfHfJlt`vXnr˂ppvn˂rXQnXv`bHAZnvpJAdfpvZp˂bdQZ|ZHAbJtArdfpvbdQZ|nvpZHAbXv`fp˂rvpfZHAbtArdpvnbdQZ|vpfZHAbXv`pJ`ےf~Hp˂rfH~|ZdQnXv`rXQJ`ہdtAے`JX|ZdQnXv`drtfH~˒`JXQ~HfXQJ`ےH~fے`JXQ|ZdQbrXQJ`drtAH~fے`JXQvnXbHAZpfpvXQJ`ےf`vXbtlf~HbHAJltQr˂pbtlf~HAJltf`vXr˂p`pvnbHAZ`vXnr˂ptlJےHAZJlt`vXnr˂pv`f˂rXQnXv`bHAZH~fJtArdfpvZp˂bnvpZHAbJtArdfpvbdQZ|nvpJXQrXv`fp˂rvpfZHAbtArdp˂rbdQZ|vpfZHAے~HfpJ`ےf~Hp˂r`vXn|ZdQnXv`rXQJ`۝fH˙ے`JX|ZdQnXv`drtfH~btl|~HfXQJ`ےH~fے`JXQ|ZdQbXQJ`ےdrtAH~f`JXQrvnXbHAXQJfpvXQJ`ےvpfbtlf~HbHAf`vXQr˂pbtlfHAJltf`vXZdQbtpvnbHAZ`vXnr˂ptlJbHAZJlt`vXnbtlv`f`ےJlnXv`JltH~fJtArdfpvZp˂nvpZHAbJtArdfpvbdQZ|nvplJtvf~Hp˂rvpfZHAbtArdp˂rbdQZ|vpfJtAd~HXvtbQZf~HdrtAJ`vXn|ZdQnXv`rXQJ`fH~˙ے`JX|ZdQnrXQJ`drtfH~Ard|fpvXQJ`ےH~fے`JXQ|ZdQbXQJ`ےdrtAH~f|ZdQb`f~drtAfpvltbvp`btlf~HbHAf`vXQr˂pbtlےHAAJltf`vXZdQbtnXv`Jlt`vXnr˂ptlJbHAZJlt`vXntlJHfpvJltnXv`dQZ|vXnJtArdfpvZp˂nvpZHAbJtArdZp˂bdQZ|nvpl|f~HbdQZ|vpfZHAbtArdp˂rbdQZ|vpftArdnXvbdQZ|f~HdrtAJvpfH|ZdQnXv`rXQJ`fH~˙ے`JX|ZdQrXQJ`ہdrtfH~ZdQbtfpvdrtAH~fے`JXQ|ZdQbXQJ`ےdrtAH~f|ZdQb`f~drtAfpvltb~f`btlf~HbHAf`vXQr˂pbtlbHAAJltf`vXlJtAnXv`Jlt`vXnr˂ptlJbHAZJlt`vXntlJHfpvJltnXv`dQZ|lvXnJtArdfpvZp˂nvpZHAbJtArdZp˂bdQZ|nvprd|f~fpbdQZ|vpfZHAbfpvp˂rbdQZ|vpftArd~HbdQZ|f~HtbdQvpfH|ZdQnXv`rXQJ`fH~˙ے`JX|ZdQrXQJ`ہdrtfH~ZdQbtvnXdrtAH~fے`JXQnXv`XQJ`ےdrtAH~f|ZdQbfpvrAJl璂rAJlfpvZ|d~vbtlf~HJltf`vXQr˂pbtlbHAAJltf`vXlJtAv`fJlt`vXnr˂pf~HbHAZJlt`vXntlJnXv`tbdQZtbdQnXv`rtAJlpfے`JtArdfpvbdQZ|nvpZHAbJtArdZp˂bdQZ|nvprdtl~HfpbdQZ|vpfZHAbfpvp˂rbdQZ|vpftArdf~H|drZ|df~HtbdQJXQr|ZdQnXv`drtfH~˙ے`JX|ZdQrXQJ`ہdrtfH~ˑJtArdvnXdrtAH~fے`JXQnXv`XQJ`ےdrtAے`JXQ|ZdQbfpvtAJlrtAJlfpvZ|dZHAbbtlf~HAJltf`vXQr˂pbtlbHAAJltf`vX|Zdv`ffJlt`vXnr˂pf~HbHAZJltr˂ptlJnXv`tbdQZtbdQnXv`rtAdQZ`JXQJtArdfpvbdQZ|nvpZHAbJfpvZp˂bdQZ|nvpQbtlpvnbdQZ|vpfZHAbfpvp˂rbdQZ|ZHAbtArdpvn|drZ|AJlp˂r|drr˂p|ZdQnXv`drtfH~˙ے`JXnXv`rXQJ`ہdrtfH~ˑJtArdrXQJ`drtAH~fے`JXQnXv`XQJ`ےdrtAے`JXQ|ZdQbXv`ftAJbdtbXQJ`ےtAJlZHAbbtlf~HAJltf`vXQr˂pf~HbHAAJltf`vX|ZdےHAZJlt`vXnr˂pf~HbHAZJltr˂ptlJ~HfQZ|dnvpbHAZtbdQZ`JXQJtArdfpvbdQZ|nvpZHAbfpvZp˂bdQZ|nvpQtArdp˂rbdQZ|vpfZHAےfpvp˂rbdQZ|ZHAbtArdpvnrtAJlfHf`p˂r|drr˂pZ|ZdQnXv`drtfH~˙ے`JXnXv`rXQJ`ہdrtfے`JX|ZdQXQJ`ےdrtAH~f`JXQrnXv`XQJ`ےdrtAے`JXQ|ZdQbXv`ptbdvXnXQJ`ےtAJlAb`JbtlfHAJltf`vXQr˂pf~HbHAAJltQHAbbtlbHAZJlt`vXnbtlf~HbHAZJltr˂ptlJvnrQZ|dvpfHbHAZtdrtAXQr˂JtArdfpvbdQZ|nvpZHAbfpvZp˂bdQZ|`JXQJtArdp˂rbdQZ|vpfJtAdfpvp˂rbdQZ|ZHAbtArdXQJ`prtAJl~f`p˂rJltpZHAb|ZdQnrXQJ`drtfH~˙ے`JXnXv`rXQJ`ہdrtr˂p|ZdQXQJ`ےdrtAH~f|ZdQbnXv`XQJ`ےdtAJے`JXQ|ZdQb˂rXQtbQZvXnXQJ`ےbdQZ|ے`JbtlےHAAJltf`vXQr˂pf~HbHAAJltZHAbbtl|bHAZJlt`vXntlJf~HbHAZltbr˂ptlJJ`ےdrtAvpfHbHAZdrtAXQr˂JtArdZp˂bdQZ|nvpZHAۅfpvZp˂bdQZ|`JXQZdQbtp˂rbdQZ|vpftArdfpvp˂rnvpZHAbtArdbHAZpJlt~f`p˂rJltpZHAb|ZdQrXQJ`ہdrtfH~˒`JXQnXv`rXQJ`ہdrtr˂p`lJtXQJ`ےdrtAH~f|ZdQbnXv`XQJ`ےfHfے`JXQ|ZdQb˂rXQbdQZ|vXnXQJ`ےbdQZ|JQrbtlbHAAJltf`vXrbtlf~HbHAAJltJXQrArd|bHAZJlt`vXntlJf~HbHAZ`vXnr˂ptlJJ`p˂drtAvpfHbHAZltb˂pZHJtArdZp˂bdQZ|nvpJtAdfpvZp˂bdQZ|˂pZHZdQbtp˂rbdQZ|vpftArdfpvp˂rvpfZHAbtArdrXQJJlt~f`p˂rdQZ|Abے`|ZdQrXQJ`ہdrtfH~˂|ZdQnXv`rXQJ`ہdtAAbے`lJtXQJ`ےdrtAH~f|ZdQbnXv`XQJ`ےH~fے`JXQ|ZdQb`ےbbdQZ|vXnvpfHZHAbArd|˂rXbdQZ|vpfHArd|fpv˂rXfH~r˂pZpvn˂rXQdQZ|vpfےrd|pvn˂rXQvpfHے`JXQvnXrXQQZ|dAbے`rd|vnXQZ|dvpfHJXQrXnvˍ~f``JXQZdQbtQJ`ےdrtA~f`ZdQbtnXv`QJ`ےf`vXAb`JXv`fJ`ےdrtAJ`JXQrZdQbtXv`fJ`ے~f`HAbےv`f~J`ےrtAJlJXQrZdQbtv`frtAJl~f`˂pZHpfH~ㅍvXnr˂plJbHAZpJltvXnlJtf~HbHAZpnvpXQr˂~HfbHAZpltb˂pZlJtA~HfbHAZpvXn`JXQrfpvbHAZpˑtbd˂pZHlJtA~HfptbdvXnAbے`f۝`vvpfHZHAbfpv˂rXbdQZ|vpfHArd|fpv˂rXfH~pZHAbpvn˂rXQdQZ|HAbےrd|pvn˂rXQvpfH˂pZnXv`rXQQZ|dAbے`rd|vnXQZ|dvpfHJXQrXnvˍ~f``JXQnXv`QJ`ےdrtA~f`ZdQbtnXv`QJ`ےvpے`JXv`fJ`ےdrtAJ`JXQrZdQbtXv`fJ`ےJ~f`HAbےf~HJ`ےtAJlJXQrZdQbtv`frtAJl~f`˂p`ZpfH~ㅍvXnr˂pf~HbHAZpJltvXnlJtf~HbHAZpfH~XQr˂~HfbHAZpltb˂pZlJtA~HfltbvXn`JXQrfpvbHAZp˒tbn˂pZHlJtA~HfptbdvXnQXb㉀f۝`vvpfHZHAbfpv˂rXbdQZ|vpfArd|fpv˂rXf`vXpZA`pvn˂rXQdQZ|HAbےrd|pvndQZ|vpfH˂p`nXv`rXQvpfHAbے`rd|vnXQZ|dvpfHۑpJAHrXnvˍ~f``JXQnXv`QJ`ےdrtA`JXQZdQbtnXv`QJ`ےnvpJXQrbXv`fJ`ےdrtAJ`JXQrZdQbtXv`fdrtAJ~f`JXQrf~HJ`ےㅐf`JXQrZdQbtv`frtAJl~f`󙐂ˁ`ZpfH~ㅍvXnr˂pf~HbHAZpJltr˂plJtf~HbHAZpfH~tlJ~HfbHAZpltb˂pZlJtA~HfltbvXn˂pZHAfvnXbHAZpvXnۉ˂pZHlJtAHfpۑtbdvXnQXb㉀f۝`vvpfHZHAbfpv˂rXbdQZ|ZHAbArd|fpv˂rXf`vXHtAd|pvn˂rXQdQZ|HAbےrd|pvndQZ|vpfHbے`v`f󂀉rXQvpfHAbے`rd|vnrXQZ|dvpfHۑp`ZQXnvˍ~f``JXQnXv`QJ`ےdrtA`JXQZdQbtnXv`QJ`ے~f`ZdQbtXv`fJ`ےdtAJl`JXQrZdQbtXv`fdrtAJ~f`JXQr~HfpJ`ے~f`JXQrZdQbtQJ`ےrtAJl~f`Xb㉀ۑpfH~ㅍvXnr˂pf~HbHAZpJltr˂plJtf~HJltdvXnlJtA~HfbHAZptbn˂pZlJtA~HfltbvXn˂p`JvnXbHAZpvXnۉ˂pZHlJtAHAZpˑtbdvXnpJAHrf۝`vvpfHZHAے`fpv˂rXbdQZ|ZHAbArd|fpvrtAJlvpfHrd|pvn˂rXQvpfHAbےrd|pvndQZ|vpfHXQrbtv`f󂀉rXQvpfHAbے`rd|炀rXQQZ|dvpfHˁ`ZQXnvˍ~f`JXQrnXv`QJ`ےdrtA`JXQZdQbtnXv`ˑtbd~f`ZdQbtXv`fJ`ےHf``JXQrZdQbtXv`fdrtAJ~f`l|Z~HfpJ`ے~f`JXQrZdQbtJ`ےrtAJl~f`Xb㉀ۑpfH~ㅍvXnbtlf~HbHAZpJltr˂plJtf~HQZ|dvXnlJtA~HfbHAZpvXn˂pZlJtAHfpltbvXndQbtvnvfbHAZpvXnۉ˂pZHlJtAbHAZpˑtbdvXnpJAHrf۝`vvpfHJtAd|fpv˂rXbdQZ|ZHAbArd|fpvrtAJlvp`rd|pvn˂rXQvpfHHAbےrd|vnrdQZ|vpfHlJtAr~HfrXQvpfHAbے`rd|炀rXQQZ|dvpfH󐉀ۑpJXnvˍ~f`ZdQbtnXv`QJ`ےdtAJl`JXQZdQbtnXv`ˑtbdvXnZdQbtXv`fJ`ے~f``JXQrZdQbtXQJ`ےdrtAJ~f`d|ZpvnJ`ےJl~f`JXQrZdQbtJ`ےrtAJl~f`AHr󙐂p|drvXnlJtf~HbHAZptbr˂plJtf~HQZ|lvpfHlJtA~HfbHAZpvXn˂pZlJtAHAZpltbvXndQbtXv`ftbdvXnۉ˂pZHlJtAbHAZpˑtbdvXnˁ`ZQXbQtJlvpfHArd|fpv˂rXnvpZHAbArd|fpvtbdQ~f`rd|pvn˂rXQvpfHHAbےrd|˂rXQdQZ|vpfHl|ZdQ~HfQZ|dvpfHAbے`rd|炀rXQQZ|dvpfH㉀ۑpJtbAdZ~f`ZdQbtnXv`QJ`ےfHf``JXQZdQbtnXv`Z|dvXnZdQbtXv`fJ`ے~f``JXQrZdQbtJ`ےdrtAJ~f`btlpvnrtAJl~f`JXQrZdQbtJ`ےrtAJl~f`AHr󙐂|drvXnlJtf~HbHAZpvXnr˂plJtfHfprtAJlvpfHlJtA~HfbHAZpvXn˂pZlJtAbHAZpltbvXnJtArdXv`ftbdvXnۉ˂pZHlJfpbHAZpˑtbdvXnˁ`ZQXAQtJlvpfHArd|fpv˂rXvpfHZHAbArd|vntbdQ~vprd|pvn˂rXQvpfHHAbےrd|˂rXQdQZ|vpfH|ZdQ~fpvQZ|dvpfHAbے`vnXrXQQZ|dvpfHHr󙐂ˁtbAdZ~f`ZdQbtnXv`QJ`ے~f``JXQZdQbtrXQJ`Z|dfے`ZdQbtXv`fJ`ےJ~f``JXQrZdQbtJ`ےdrtAJ~f`btlnXv`rtAJl~f`JXQrv`fJ`ےrtAJl~f``ZQXb|drvXnlJtf~HbHAZpvXnr˂plJtHAZprtAdQZ|JXQrZlJtA~HfltbvXn˂pZlJtAbHAZpltbvXnJtArdf~HtbdvXnۉ˂pZH~HfpbHAZpˑtbdvXnۀۑpJAQtJlvpfArd|fpv˂rXvpfHZHAbArd|˂rXdrtHAbےrd|pvndQZ|vpfHHAbےrd|˂rXQdQZ|vpfHtlJfpvQZ|dvpfHAbے`vnXrXQQZ|dvpfZHHr󙐂ˁtbAdZ`JXQZdQbtnXv`QJ`ے~f``JXQZdQbtQJ`ےAJlt`JXQrZdQbtXv`fdrtAJ~f``JXQrZdQbtJ`ےdrtAJ~f`tArdnXv`rtAJl~f`JXQrv`fJ`ےrtAJlAbے``ZQXb|drr˂plJtf~HbHAZpvXnr˂plJtbHAZpbdQZ|˂pZlJtA~HfltbvXn˂pZlJfbHAZpltbvXn|ZdQbffpۑtbdvXnۉ˂pZH~HfpbHAZpˑtbdJXQrۑp`ZQtJlZHAbArd|fpv˂rXvpfHZHAbArd|˂rXdrtHAbےrd|pvndQZ|vpfHHAbےpvn˂rXQdQZ|vpfHtlJvnrXQZ|dvpfHAbے`vnXrXQQZ|d˂pZHQXb㉀tbAdZ`JXQZdQbtnXv`QJ`ے~f``JXQZdQbtQJ`ےAJlt`JXQrZdQbtXv`fdrtAJ~f``JXQrXv`fJ`ےdrtAJ~f`tArdQJ`ےrtAJl~f`JXQrv`fJ`ےrtAJlAbے`ۑpJAHr|drr˂plJtf~HJltvXnr˂plJtbHAZpdrtA˂pZAlJtA~HfltbvXn˂pZ~HfbHAZpltbvXn|ZdQtAHAZpˑtbdvXnۉ˂pZH~HfpbHAZpˑtbdJXQr󙐂ˁ`ZQtJlZHAbArd|fpvbdQZ|vpfHZHAbArd|˂rXJltb`JXrd|pvndQZ|vpfHHAbےpvn˂rXQdQZ|vpfےrd|rXQQZ|dvpfHAے`vnXrXQQZ|d˂p`QXb㉀tbAdZ`JXQZdQbtnXv`˂drtA~f``JXQZdQbtQJ`ےbdQZ|Qr˂pZdQbtXv`fdrtAJ~f``JXQrXv`fJ`ےdrtAJ`JXQHAZdQbtJ`ےrtAJl~f`JXQrbtv`fJ`ےrtAJlJXQrۑpJAH|drr˂plJtf~HJltvXnr˂plJbHAZpdrtAZHAblJtAHfpltbvXn˂pZ~HfbHAZpltbbے`lJtAbHAZpˑtbdvXnۉlJt~HfpbHAZpˑtbdpZHAf۝`vQtJlZHAbArd|fpvbdQZ|vpfHZHAbfpv˂rXJltے`JXrd|vnrdQZ|vpfHHAbےpvn˂rXQdQZ|JXQrrd|rXQQZ|dvpfHAd|vnXrXQQZ|dbے`XnvˍtbAdZ`JXQZdQbtnXv`˂drtA~f``JXQnXv`QJ`ےbdQZ|lQr˂pZdQbtXQJ`ےdrtAJ~f``JXQrXv`fJ`ےdrtAJ˂pZHAZdQbtJ`ےrtAJl~f`ZdQbtv`fJ`ےtAJlJXQrpfH~|drr˂plJtf~HJltvXnr˂pf~HbHAZptbdZHAblJtAHAZpltbvXn˂pZ~HfbHAZpltbbے`l|ZbHAZpˑtbdvXnےlJtA~HfpbHAZp˒tbnpZHAf۝`vQtJlZHAbArd|fpvbdQZ|vpfHZHAbfpv˂rXQZ|dJQrrd|˂rXQdQZ|vpfHHAے`pvn˂rXQdQZ|JXQrdQbt璂rXQQZ|dvpfHrd|vnXrXQvpfHb˂pXnvˍtbAdZ`JXQZdQbtnXv`˂drtA~f``JXQnXv`QJ`ےrtAJl˂pZHAZdQbtJ`ےdrtAJ~f`JXQrbXv`fJ`ےdrtAJ˂p`JlJtArJ`ےrtAJl~f`ZdQbtv`fJ`ےㅐf`ZHAbpfH~|drr˂plJtfHfpJltvXnr˂pf~HbHAZptbdbے`lJtAbHAZpltbvXntlJ~HfbHAZpltbXQr˂d|ZbHAZpˑtbdvXnےlJtA~HfpbHAZpvXnۙے`JXf۝`vQtJlZHAbArd|vnbdQZ|vpfHZHAbfpv˂rXQZ|lJXQrrd|˂rXQdQZ|vpfHtAd|pvn˂rXQdQZ|pZHAbdQbt璂rXQQZ|dvpfHrd|vnXrXQvpfHQr˂pXnvˍtbAdZ`JXQZdQbtrXQJ`ۂdrtA~f``JXQnXv`QJ`ےtbn˂pZHAZdQbtJ`ےdrtAJ~f`ZdQbtXv`fJ`ےdtAJlے`JlJtArJ`ےrtAJl~f`ZdQbtv`fJ`ے~f`ZHAbpfH~|drr˂plJtHAZpJltvXnr˂pf~HbHAZpvp`bے`lJtAbHAZpltbvXnlJtA~HfbHAZptbnXQr˂dtlbHAZpˑtbdvXnےlJtA~HfpbHAZpvXnۙے`JXf۝`vQtJlZHAbArd|˂rXbdQZ|vpfHZHAے`fpv˂rXvXnJXQrrd|˂rXQdQZ|vpfHrd|pvn˂rXQvpfpZHAbJfpvrXQQZ|dvpfے`rd|vnXrXQvpfHQHAbXnvˍtbAdZ`JXQZdQbtQJ`ےdrtA~f`JXQrnXv`QJ`ےvpfHZHAbZdQbtJ`ےdrtAJ~f`ZdQbtXv`fJ`ےHf`˂pnvfJ`ےrtAJlJXQrZdQbtv`fJ`ے~f``JXQpfH~|drr˂plJtbHAZpJltvXnbtlf~HbHAZp~f``JXQlJfbHAZpltbvXnlJtA~HfbHAZpvXnZHAb~HfpbHAZpˑtbd˂pZHlJtA~HfpbHAZpvXnr˂pf۝`vQtJlZHAbArd|˂rXbdQZ|vpfHJtAd|fpv˂rXvXnr˂ppvn˂rXQdQZ|vpfHrd|pvn˂rXQvpfHے`JXQvnXrXQQZ|dAbے`rd|vnXrXQvpfHZHAbXnvˍtbAdZ`JXQZdQbtQJ`ےdrtA~f`ZdQbtnXv`QJ`ےvp`vXZHAbXv`fJ`ےdrtAJ~f`ZdQbtXv`fJ`ے~f`r˂pv`fJ`ےrtAJlJXQrZdQbtv`fJ`ےJl~f``JXQpfH~|drr˂plJtbHAZpJltvXnlJtf~HbHAZpnvp`JXQ~HfbHAZpltbvXnlJtA~HfbHAZpvXnZHAb~HfpbHAZpˑtbd˂pZHlJtA~HfptbdvXnr˂p`f۝`vQtJlt666666666666666666666666666667777777777777777777 \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv34_0.dat b/vendor/endroid/qr-code/assets/data/qrv34_0.dat new file mode 100644 index 000000000..690400562 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv34_0.dat @@ -0,0 +1,305 @@ +}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWWWWWXWXUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWXUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWXUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWXUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvsssssstsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWXUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWXUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWWWWWXUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=<;<;<}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWVUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@;<;;;;;;}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYUVUVUVUVUVUVUVUTSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@<;<;<;<;}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYUVUVUVUVSTSTSTSTSTSTSTSRQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@<;<;<;<;}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvtstsssssrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYXWXWUVUVUVUVSTSTSTSTQRQRQRQRQRQRQRQPOPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@<;<;<;<;}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWWWWWUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPOPOPOPONMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@<;<;<;<;}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvrqrqrqrqrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[WXWXWXWXUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNMNMNMNMLKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?>=><;<;<;<;}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvrqrqrqrqpopopopopopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[WXWXWXWXUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLKLKLKLKJIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=><;<;<;;;}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvutstrqrqrqrqpopopoponmnmnmnmnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[WXWXWXWXUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJIJIJIJIHGHGHGHGHEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;;;<;<;<<;<;<;<;}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxststssssrqrqrqrqpopopoponmnmnmnmlklklklklklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[WXWXWXWXUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHGHGHGHGFEFEFEFEFCDCDCDCDABABABAB=>=>=>=>;<;<;<;<<;<;<;<;}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxsstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijijijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[ZYWXWXWXWXUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFEFEFEFEDCDCDCDCDABABABAB=>=>=>=>;<;<;<;<<;;;;;<;}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghghghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYWXWXWXWWUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDCDCDCDCBABABABAB=>=>=>=>;<;<;<;<<;<;<;:9}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefefefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYWWWWXWXWUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABABABABABA@=>=>=>=>;<;<;<;<:9:9:9:9}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<:9:9:9:9}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwvtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababababababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;;;;;;<;:9:9:9:9}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=><;<;<;<;:9:9:9:9}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvssssststrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]^]^]^]^]ZYZYZYZYXWXWXWXWUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=><;<;<;<;:9:9:9:9}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=><;<;<;<;:9:9:9:9~}~}~}~}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvststststrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWWWWWWXUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=><;<;<;<;:9:9:9:9}~}~}~}~}|{|{|{|{|{|{|{|yzyzyzyzuvuvuvuvststststrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWXUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=><;<;<;<;:9:9:9:9}~}~}~}~{|{|{|{|{zyzyzyzyzyzyzyzuvuvuvuvststststrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWXUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=><;<;;;;;:9:9:9:9}~}~}~}~{|{|{|{|yzyzyzyzyxwxwxwxuvuvuvuvststststrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWXUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<:9:9:9:9}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvstssssssrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWXUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<:9:9:9:9}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWXWXUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<:9:9:9:9}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWXWXWWWWUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<:9:9:9:9}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYWWXWXWXWUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;<:9:9:9:9}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;<;<;<;;:9:9:9:9}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=>;;;;<;<;:9:9:9:9}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvtststsssrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=><;<;<;<;:9:9:9:9}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvssstststrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=><;<;<;<;:9:9:9:9}~}~}~}~{|{|{|{|yzyzyzyzwxwxwxwxuvuvuvuvststststrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWUVUVUVUVSTSTSTSTQRQRQRQROPOPOPOPMNMNMNMNKLKLKLKLIJIJIJIJGHGHGHGHEFEFEFEFCDCDCDCDABABABAB?@?@?@?@=>=>=>=><;<;<;<;:9:9:9:9:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + +:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + +:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!       + + + +:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!       + + + +:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + +:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!        + + + +:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#       + + + +:9:9:987878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#         + + + +87878787878787656565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#         + + + +87878787656565656565654343434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#         + + + +87878787656565654343434343434321212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#          + + + +878787876565656543434343212121212121210/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#"!"!           + + + +878787876565656543434343212121210/0/0/0/0/0/0/.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!       + + + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-.-.-.-,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + + + 878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+,+,+,+*)*)*)*)*)('('('('&%&%&%&%"!"!"!"!         + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)('('('('('&%&%&%&%"!"!"!"!         + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('&%&%&%&%&%"!"!"!"!         + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%$#"!"!"!"!         + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!       + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + +878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!      + + + + 33445566ONNMMLLKTUUVVWWXIHHGGFFELMMNNOOPQPPOONNMDEEFFGGHYXXWWVVU<==>>??@a``__^^]45566778ihhggffe,--..//0gffeeddcOPPQQRRS54433221eeffgghh88776655]]^^__``@@??>>==UUVVWWXXHHGGFFEEMMNNOOPPPPOONNMMEEFFGGHHXXWWVVUU==>>??@@QQPPOONNeeffgghh$#"! uvvwwxxy(''&&%%$mnnooppq0//..--,effgghhi87766554]^^__``a@??>>==>=TUUVVWWXIHHGGFFELMMNNOOPQPPOONNMDEEFFGGHYXXWWVVU<==>>??@a``__^^]45566778_^^]]WWVW]]^^__`-,,++**)mmnnoopp00//..--eeffgghh88776655]]^^__``@@??>>==UUVVWWXXHHGGFFEEMMNNOOPPPPOONNMMEEFFGGHHIIHHGGFFmmnnoopp}~~ uvvwwxxy(''&&%%$mnnooppq0//..--,effgghhi87766554]^^__``a@??>>==`aabbccd=<<;;::9XYYZZ[[\EDDCCBBAPQQRRSSTMLLKKJJIHIIJJKKLUTTSSRRQ@AABBCCD]\\[[ZZY899::;;>=TUUVVWWXIHHGGFFELMMNNOOPQPPOONNMDEEFFGGHYXXWWVVU<==>>??@RQQPPOONdeeffggh%$#"! uuvvwwxx((''&&%%mmnnoopp00//..--eeffgghh88776655]]^^__``@@??>>==UUVVWWXXHHGGFFEEMMNNOOPPAA;;::99zz{{||}}}~~ uvvwwxxy(''&&%%$mnnooppq0//..--,effgghhi87766554]^^__``a,++**))(!!""##$$rrqqppooLLMMNNOO88776655hiijjkkl54433221`aabbccd=<<;;::9XYYZZ[[\EDDCCBBAPQQRRSSTMLLKKJJIHIIJJKKLUTTSSRRQ@AABBCCDNMMLLKKJhiijjkklyyzz{{||$$##""!!qqrrsstt,,++**))iijjkkll44332211aabbccdd<<;;::99YYZZ[[\\DDCCBBAAQQRRSSTT88776655~~ +yzz{{||}$##""!! qrrssttu,++**))(ijjkkllm43322110abbccdde(''&&%%~~}}%%&&''((nnmmllkkPPQQRRSS44332211lmmnnoop100//..-deeffggh98877665\]]^^__`A@@??>>=TUUVVWWXIHHGGFFELMMNNOOPQPPOONNMDEEFFGGHJIIHHGGFlmmnnoop}}~~ uuvvwwxx((''&&%%mmnnoopp00//..--eeffgghh88776655]]^^__``@@??>>==UUVVWWXX44332211 +  }~~ uvvwwxxy(''&&%%$mnnooppq0//..--,effgghhi||{{zzyy))**++,,jjiihhggTTUUVVWW00//..--pqqrrsst-,,++**)hiijjkkl54433221`aabbccd=<<;;::9XYYZZ[[\EDDCCBBAPQQRRSSTMLLKKJJIHIIJJKKLFEEDDCCBpqqrrssyyyzz{{||$$##""!!qqrrsstt,,++**))iijjkkll44332211aabbccdd<<;;::99YYZZ[[\\00//..-- + + yzz{{||}$##""!! qrrssttu,++**))(ijjkkllmxxwwvvuu--..//00ffeeddcc]]^^__``,,++**))tuuvvwwx)((''&&%lmmnnoop100//..-deeffggh98877665\]]^^__`A@@??>>=TUUVVWWXIHHGGFFELMMNNOOPBAA;;::9yzz{{||}}}~~ uuvvwwxx((''&&%%mmnnoopp00//..--eeffgghh88776655]]^^__``,,++**)) }~~ uvvwwxxy(''&&%%$mnnooppqttssrrqq11223344bbaa``__aabbccdd((''&&%%xyyzz{{|%$$##""!pqqrrsst-,,++**)hiijjkkl54433221`aabbccd=<<;;::9XYYZZ[[\EDDCCBBAPQQRRSST98877665}~~ yyzz{{||$$##""!!qqrrsstt,,++**))iijjkkll44332211aabbccdd((''&&%%  + + yzz{{||}$##""!! qrrssttuppoonnmm55667788^^]]WWVVeeffgghh$#"! |}}~~! tuuvvwwx)((''&&%lmmnnoop100//..-deeffggh98877665\]]^^__`A@@??>>=TUUVVWWX54433221 + +  }}~~ uuvvwwxx((''&&%%mmnnoopp00//..--eeffgghh + +  }~~ uvvwwxxy llkkjjii99::;;<>??@@QQPPOONNmmnnoopp|}}~~! tuuvvwwx)((''&&%lmmnnoop100//..-deeffggh98877665\]]^^__`-,,++**) }}~~ uuvvwwxx((''&&%%mmnnoopp + +  }~~~~}}||ddccbbaaAABBCCDDMMLLKKJJqqrrssyyxyyzz{{|%$$##""!pqqrrsst-,,++**)hiijjkkl54433221`aabbccd)((''&&% + + yyzz{{||$$##""!!qqrrsstt   + +  +{{zzyyxw``__^^]]EEFFGGHHIIHHGGFFzz{{||}} |}}~~! tuuvvwwx)((''&&%lmmnnoop100//..-deeffggh% + +  }}~~ uuvvwwxx  + +  + vutssrrq\\[[ZZYYIIJJKKLLEEDDCCBB~~ + + + xyyzz{{|%$$##""!pqqrrsst-,,++**)hiijjkkl  + + yyzz{{|| + +  !~~}}|   + + qppoonnm + +XXWWVVUUMMNNOOPPAA;;::99 +   |}}~~! tuuvvwwx)((''&&%lmmnnoop + +  }}~~~~}}|!""##$$%|{{zzyyx + + mllkkjji TTSSRRQQQQRRSSTT88776655 + + xyyzz{{|%$$##""!pqqrrsst  + +  |{{zzyyx%&&''(()xwwvvuut !~~}}|  ihhggffePPOONNMMUUVVWWXX44332211 + +   |}}~~! tuuvvwwx  + +  + + wvutssrr)**++,,-tssrrqqp!""##$$%|{{zzyyx + + eddccbbaLLKKJJIIYYZZ[[\\00//..--  + + xyyzz{{| + +  ~~}}  + + qqppoonn-..//001poonnmml%&&''(()xwwvvuut !~~}}|  %%&&'a``__^^] HHGGFFEE]]^^__``,,++**)) + +   |}}~~~~}}!!""##$$||{{zzyy + + mmllkkjj12233445lkkjjiih)**++,,-tssrrqqp!""##$$%|{{zzyyx + + '(())**+]\[ZYXWW + + DDCCBBAAaabbccdd((''&&%%  + +  ||{{zzyy%%&&''((xxwwvvuu ~~}} iihhggff56677889hggffeed-..//001poonnmml%&&''(()xwwvvuut !~~}}| +,,--../VVUUTTSS@@??>>==eeffgghh + +   + + xwvutssr))**++,,ttssrrqq!!""##$$||{{zzyy + + eeddccbb9::;;<<=dccbbaa`12233445lkkjjiih)**++,,-tssrrqqp!""##$$%|{{zzyyx/0011223RRQQPPOO<<;;::99iijjkkll ~~}  + + rqqppoon--..//00ppoonnmm%%&&''((xxwwvvuu ~~}} %%&&aa``__^^=>>??@@A`__^^]]\56677889hggffeed-..//001poonnmml%&&''(()xwwvvuut !~~}}|34455667NNMMLLKK88776655mmnnoopp !!""##$}||{{zzy + +  nmmllkkj11223344llkkjjii))**++,,ttssrrqq!!""##$$||{{zzyy + + ''(())**]]\[ZYXWABBCCDDE\[[ZZYYX9::;;<<=dccbbaa`12233445lkkjjiih)**++,,-tssrrqqp!""##$$%|{{zzyyx~~}}||{78899::;JJIIHHGG44332211qqrrsstt$%%&&''(yxxwwvvu ~~} jiihhggf55667788hhggffee--..//00ppoonnmm%%&&''((xxwwvvuu ~~}} ++,,--..WVVUUTTSEFFGGHHIXWWVVUUT=>>??@@A`__^^]]\56677889hggffeed-..//001poonnmml%&&''(()xwwvvuut !{zzyyssr;AABBCCDFFEEDDCC !!00//..--uuvvwwxx ~~}}|())**++,uttssrrq !!""##$}||{{zzy + + feeddccb99::;;<=""##$$%%,,++**))yyzz{{|| + + |{{zzyyx,--..//0qppoonnm$%%&&''(yxxwwvvu ~~} %%&baa``__^==>>??@@``__^^]]55667788hhggffee--..//00ppoonnmm%%&&''((xxwwvvuu ~~}}33445566ONNMMLLKMNNOOPPQPOONNMMLEFFGGHHIXWWVVUUT=>>??@@A`__^^]]\56677889hggffeed-..//001poonnmml%&&''(()nmmllkkjHIIJJKKL<;;::998&&''(())((''&&%%}}~~ + + wvutssrr01122334mllkkjji())**++,uttssrrq !!""##$}||{{zzy + + &''(())*^]]\[ZYXAABBCCDD\\[[ZZYY99::;;<>??@@``__^^]]55667788hhggffee--..//00ppoonnmm%%&&''((xxwwvvuu {{zzyyss;;AABBCCGFFEEDDCUVVWWXXYHGGFFEEDMNNOOPPQPOONNMMLEFFGGHHIXWWVVUUT=>>??@@A`__^^]]\56677889hggffeed-..//001feeddccbPQQRRSST43322110..//0011 mmllkkjj899::;;YZZ[[\\]DCCBBAA@QRRSSTTULKKJJIIHIJJKKLLMTSSRRQQPABBCCDDE\[[ZZYYX9::;;<<=dccbbaa`12233445baa``__^TUUVVWW]0//..--,22334455iihhggff<==>>??@a``__^^]45566778ihhggffe,--..//0qppoonnm$%%&&''(yxxwwvvu ~~}23344556OONNMMLLMMNNOOPPPPOONNMMEEFFGGHHXXWWVVUU==>>??@@``__^^]]55667788hhggffee--..//00ppoonnmm%%&&''((nnmmllkkHHIIJJKK=<;;::99]^^__``a@??>>==>??@@A`__^^]]\56677889^]]WWVVU]^^__``a,++**))(66778899eeddccbb@AABBCCD]\\[[ZZY899::;;>??@a``__^^]45566778ihhggffe,--..//0qppoonnm$%%&&''(yxxwwvvu |{{zzyys:;;AABBCGGFFEEDDUUVVWWXXHHGGFFEEMMNNOOPPPPOONNMMEEFFGGHHXXWWVVUU==>>??@@``__^^]]55667788hhggffee--..//00ffeeddccPPQQRRSS44332211effgghhi87766554]^^__``a@??>>==>??@@AQPPOONNMeffgghhi#"! >>??@@AA ''(())**]]\[ZYXWHIIJJKKLUTTSSRRQ@AABBCCD]\\[[ZZY899::;;>??@a``__^^]45566778ihhggffe,--..//0qppoonnm$%%&&''(onnmmllkGHHIIJJK>=<;;::9]]^^__``@@??>>==UUVVWWXXHHGGFFEEMMNNOOPPPPOONNMMEEFFGGHHXXWWVVUU==>>??@@``__^^]]55667788^^]]WWVV]]^^__``,,++**))mnnooppq0//..--,effgghhi87766554]^^__``a@??>>==>??@@AA__^^]]\\66778899ggffeedd..//0011oonnmmll&&''(())mmllkkjjIIJJKKLL;;::9988^__``aab?>>==<<;VWWXXYYZGFFEEDDCNOOPPQQRONNMMLLKFGGHHIIJWVVUUTTS>??@@AAB_^^]]\\[6778899:UTTSSRRQijjkkllmRRSSTTUUKKJJIIHHJJKKLLMMSSRRQQPPBBCCDDEE[[ZZYYXX::;;<<==ccbbaa``22334455kkjjiihh**++,,--iihhggffMMNNOOPP77665544bccddeef;::99887Z[[\\]]^CBBAA@@?RSSTTUUVKJJIIHHGJKKLLMMNSRRQQPPOBCCDDEEF[ZZYYXXW:;;<<==>QPPOONNMmnnooppqVVWWXXYYGGFFEEDDNNOOPPQQOONNMMLLFFGGHHIIWWVVUUTT>>??@@AA__^^]]\\66778899ggffeedd..//0011eeddccbbQQRRSSTT33221100fgghhiij76655443^__``aab?>>==<<;VWWXXYYZGFFEEDDCNOOPPQQRONNMMLLKFGGHHIIJWVVUUTTS>??@@AABMLLKKJJIqrrssyyz ZZ[[\\]]CCBBAA@@RRSSTTUUKKJJIIHHJJKKLLMMSSRRQQPPBBCCDDEE[[ZZYYXX::;;<<==ccbbaa``22334455aa``__^^UUVVWW]]//..--,,jkkllmmn3221100/bccddeef;::99887Z[[\\]]^CBBAA@@?RSSTTUUVKJJIIHHGJKKLLMMNSRRQQPPOBCCDDEEFIHHGGFFEz{{||}}~ + + ^^__``aa??>>==<>??@@AA__^^]]\\66778899]]WWVVUU^^__``aa++**))((nooppqqr/..--,,+fgghhiij76655443^__``aab?>>==<<;VWWXXYYZGFFEEDDCNOOPPQQRONNMMLLKFGGHHIIJEDDCCBBA~ + + bbccddee;;::9988ZZ[[\\]]CCBBAA@@RRSSTTUUKKJJIIHHJJKKLLMMSSRRQQPPBBCCDDEE[[ZZYYXX::;;<<==TTSSRRQQbbccddee''&&%%$#rssttuuv+**))(('jkkllmmn3221100/bccddeef;::99887Z[[\\]]^CBBAA@@?RSSTTUUVKJJIIHHGJKKLLMMNA;;::998 ffgghhii77665544^^__``aa??>>==<>??@@AAPPOONNMMffgghhii"! vwwxxyyz'&&%%$$#nooppqqr/..--,,+fgghhiij76655443^__``aab?>>==<<;VWWXXYYZGFFEEDDCNOOPPQQR87766554jjkkllmm33221100bbccddee;;::9988ZZ[[\\]]CCBBAA@@RRSSTTUUKKJJIIHHJJKKLLMMSSRRQQPPBBCCDDEELLKKJJIIjjkkllmmz{{||}}~#""!! rssttuuv+**))(('jkkllmmn3221100/bccddeef;::99887Z[[\\]]^CBBAA@@?RSSTTUUV43322110nnooppqq//..--,,ffgghhii77665544^^__``aa??>>==<>==<<;VWWXXYYZ0//..--,rrssttuu++**))((jjkkllmm33221100bbccddee;;::9988ZZ[[\\]]CCBBAA@@RRSSTTUUKKJJIIHHJJKKLLMMDDCCBBAArrssyyzzz{{||}}~#""!! rssttuuv+**))(('jkkllmmn3221100/bccddeef;::99887Z[[\\]]^,++**))( vvwwxxyy''&&%%$$nnooppqq//..--,,ffgghhii77665544^^__``aa??>>==<>==<>??@ ~~vvwwxxyy''&&%%$$nnooppqq +  ~eddccbba@AABBCCD + + zz{{||}}##""!! rrssttuu + + + a``__^^]DEEFFGGH ~~vvwwxxyy  +  ]\\[[ZZYHIIJJKKL  + + zz{{||}} + +  !!"~~}}||{ + + + YXXWWVVULMMNNOOP + +  ~~~~}}||{"##$$%%&{zzyyxxw + %%&&'UTTSSRRQPQQRRSST  + +  + +{zzyyxwv&''(())*wvvuutts !!"~~}}||{ +'(())**+QPPOONNMTUUVVWWX + +  utssrrqq*++,,--.srrqqppo"##$$%%&{zzyyxxw + +,,--../MLLKKJJIXYYZZ[[\~~}}||  + + ppoonnmm.//00112onnmmllk&''(())*wvvuutts !!"~~}}||{ +/0011223IHHGGFFE\]]^^__`{{zzyyxx + + llkkjjii23344556kjjiihhg*++,,--.srrqqppo"##$$%%&{zzyyxxw + 34455667EDDCCBBA`aabbccdwwvvuutt !!~~}}|| hhggffee6778899:gffeeddc.//00112onnmmllk&''(())*wvvuutts !!"~~}}||{78899::;A@@??>>=deeffgghssrrqqpp""##$$%%{{zzyyxx + + ddccbbaa:;;<<==>cbbaa``_23344556kjjiihhg*++,,--.srrqqppo"##$$%%&{zzyyxxw;AABBCCD=<<;;::9hiijjkkloonnmmll&&''(())wwvvuutt !!~~}}|| %%&&''``__^^]]>??@@AAB_^^]]\\[6778899:gffeeddc.//00112onnmmllk&''(())*wvvuutts !!"~~}}||{~~}}||{DEEFFGGH98877665lmmnnoopkkjjiihh**++,,--ssrrqqpp""##$$%%{{zzyyxx + + (())**++\[ZYXWWVBCCDDEEF[ZZYYXXW:;;<<==>cbbaa``_23344556kjjiihhg*++,,--.srrqqppo"##$$%%&{zzyyxxw{zzyyssrHIIJJKKL54433221pqqrrsstggffeedd..//0011oonnmmll&&''(())wwvvuutt !!~~}}||,,--..//VUUTTSSRFGGHHIIJWVVUUTTS>??@@AAB_^^]]\\[6778899:gffeeddc.//00112onnmmllk&''(())*wvvuutts !!"rqqppoonLMMNNOOP100//..-tuuvvwwxccbbaa``22334455kkjjiihh**++,,--ssrrqqpp""##$$%%{{zzyyxx00112233RQQPPOONJKKLLMMNSRRQQPPOBCCDDEEF[ZZYYXXW:;;<<==>cbbaa``_23344556kjjiihhg*++,,--.srrqqppo"##$$%%&nmmllkkjPQQRRSST-,,++**)xyyzz{{|__^^]]\\66778899ggffeedd..//0011oonnmmll&&''(())wwvvuutt !!~~}}||44556677NMMLLKKJNOOPPQQRONNMMLLKFGGHHIIJWVVUUTTS>??@@AAB_^^]]\\[6778899:gffeeddc.//00112onnmmllk&''(())*jiihhggfTUUVVWW])((''&&%|}}~~[[ZZYYXX::;;<<==ccbbaa``22334455kkjjiihh**++,,--ssrrqqpp""##$$%%{{zzyyxx~~}}||{{8899::;;JIIHHGGFRSSTTUUVKJJIIHHGJKKLLMMNSRRQQPPOBCCDDEEF[ZZYYXXW:;;<<==>cbbaa``_23344556kjjiihhg*++,,--.feeddccb]^^__``a%$$##""!WWVVUUTT>>??@@AA__^^]]\\66778899ggffeedd..//0011oonnmmll&&''(())wwvvuutt !!zzyyssrrAABBCCDDFEEDDCCBVWWXXYYZGFFEEDDCNOOPPQQRONNMMLLKFGGHHIIJWVVUUTTS>??@@AAB_^^]]\\[6778899:gffeeddc.//00112baa``__^abbccdde! SSRRQQPPBBCCDDEE[[ZZYYXX::;;<<==ccbbaa``22334455kkjjiihh**++,,--ssrrqqpp""##$$%%qqppoonnEEFFGGHHBAA@?>=cbbaa``_23344556^]]WWVVUeffgghhiZHAbtlJ~Hf`ےbrtAJlnvpQr˂pJtArdf~HZp˂AJltnvpQr˂pJtArdf~HZp˂rtAJlf`vXے`JXtArdf~Hp˂rJltvpfr˂ptArdf~Hp˂rJltvpfpZHAbtArdnvf˂rXJltvpfHr˂pArd|f~H˂rXJltvpfHr˂pArd|Xv`J`ےے`JXQtArdpvnHAZp˂tbdfH~ˑZHAb|ZdQfpvrXQJ`ۉbdQZ|fH~ˑZHAb|ZdQfpvrXQJ`ۑtbdnvpQr˂p|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fے`J|ZdQb~HfpQJ`ےbdQZ|~f`ZHAbہZdQbtfpvQJ`ےbdQZ|~f`ZHAbہZdQbtf~HbHAZpr˂p|ZdQbXv`fbHAQZ|df`vXے`JXbtlnXv`bHAdrtf`vXے`JXbtlnXv`bHAQZ|l`vXZHAbtlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXnXQr˂tlJvnXbHAZpdrtAvXn`JXQlJtnXv`˙bHAZpdrtAvXn`JXQlJtfpvむrXQZHAbtlJ~HfZp˂rtAJnvpQr˂pJtArdf~HZp˂AJltnvpQr˂pJtArdf~HZp˂tbdQnvpے`JXtArdf~Hp˂rJltvpfr˂ptArdf~Hp˂rJltvpfpZHAbtArdtv`f˂rXJltvpfHr˂pArd|f~H˂rXJltvpfHr˂pArd|nXv`J`ےے`JXQtArdpvrXQJ`bdQZ|fH~ˑZHAb|ZdQfpvrXQJ`ۉbdQZ|fH~ˑZHAb|ZdQfpvrXQJ`Z|dfH~QrZHA|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~f˂plJtA~HfpQJ`ےbdQZ|~f`ZHAbہZdQbtfpvQJ`ےbdQZ|~f`ZHAbہZdQbtf~HbHAZpr˂p|ZdQb~HfpےbHAdrtAf`vXے`JXbtlnXv`bHAdrtf`vXے`JXbtlnXv`bHArtAJlf`vXbے`tlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXnZHAbrd|vnXbHAZpdrtAvXn`JXQlJtnXv`˙bHAZpdrtAvXn`JXQlJtfpvbHZHAbtlJvnXZp˂JltnvpQr˂pJtArdf~HZp˂AJltnvpQr˂pJtArdf~HZp˂tbdQnvpJXQrtArdf~Hp˂rJltvpfr˂ptArdf~Hp˂rJltvpfے`JXQZdQbtv`ffp˂rXJltvpfHr˂pArd|f~H˂rXJltvpfHr˂pArd|~HfpAZdے`JXQtArdv`frXQJ`bdQZ|fH~ˑZHAb|ZdQfpvrXQJ`ۉbdQZ|fH~ˑZHAb|ZdQfpvrXQJ`Z|dfH~˂pZHA|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fr˂plJtAvnQJ`ےbdQZ|~f`ZHAbہZdQbtfpvQJ`ےbdQZ|~f`ZHAbہZdQbtvnXrtAJbr˂p|ZdQb~Hfpp˂rdrtAf`vXے`JXbtlnXv`bHAdrtf`vXے`JXbtlnXv`bHArtAdQZ|vpfHbے`tlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXnZHAbrd|rXQJ`ۙbHAZdtAJlvXn`JXQlJtnXv`˙bHAZpdrtAvXn`JXQlJtv`fdQZ|ZHAbtlJvnXXQJ`ےJltnvpQr˂pJtArdf~HZp˂AJltnvpQr˂pJtArdf~HZp˂drt~f`JXQrtArdf~Hp˂rJltvpfr˂ptArdf~Hp˂rJltvpfے`JXQZdQtArHAZpdrtAtbvpfHr˂pArd|f~H˂rXJltvpfHr˂pArd|~HfpdrtAJے`JXQtArdv`pvbHAZbQZdfH~ˑZHAb|ZdQfpvrXQJ`ۉbdQZ|fH~ˑZHAb|ZdQfpvrXQJ`AJltvXn˂pZA|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fHAbےdf˂rXJltnvp~fZHAے`ZdQbtfpvQJ`ےbdQZ|~f`ZHAbہZdQbtvnXltbr˂p|ZdQbnXvp˂rrtAJlf`vXے`JXbtlnXv`bHAdrtf`vXے`JXbtlnXv`bHAbdQZ|vpfH`JXQrtlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXn`JXQr~HfvQJ`ےbdQZ|fHf`ZHAbہJXQrlJtnXv`˙bHAZpdrtAvXn`JXQlJtv`pdQZ|ZHAbtlJ`f~XQJ`ےtbdQnvpQr˂pJtArdf~HZp˂AJltnvpQr˂pJtArdf~HZp˂drt~f`btltArdfHfp˂rJltvpfr˂ptArdf~Hp˂rJltvpf˂pZnXv`˙bHAZpdrtAvXn`JXQbtlArdfHfp˂rXJltvpfHr˂pArd|vnrXdrtAJے`JXQtArdHfpvbHAXQZ|dfH~ˑZHAb|ZdQfpvrXQJ`ۉbdQZ|fH~ˑZHAb|ZdQfpvrXQJ`AJltvXHJtAdf~HpvnXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fHAbےf~H˂rXJltvpfHr˂pJtAd|f~HvnQJ`ےbdQZ|~f`ZHAbہZdQbtQJ`pltbQr˂p|ZdQbnXvJ`ےrtAJlf`vXے`JXbtlnXv`bHAdrtf`vXے`JXbtlnXv`bHAdrtA~fZH|ZdQbfpvrXQJ`bHAZdtAJ`vXnے`JXQtlJnXv`bHAZdrtA`vXn`JXQrfpvQJ`ےbdQZ|~f`ZHAbہZdQbtfpvrXQJ`ۙbHAZdtAJlvXn`JXQlJtrXQZdrttAJlZHAbtlJ`f~bHAZptbdQnvpQr˂pJtArdf~HZp˂AJltnvpQr˂pJtArdf~HZp˂JltAbJtlJnXv`ےHAZdrtAltbvpfr˂ptArdf~Hp˂rJltvpf˂p`nXv`˙bHAZpdrtAvXn`JXQlJtnXv`˒HAZpdrtAtbvpfHr˂pArd|J`ےAJlttbdQZے`JXQtArdHXv`˂rXQZ|dnfH~ˑZHAۂ|ZdQfpvrXQJ`ۉbdQZ|fH~ˑZHAb|ZdQfpvrXQJ`bdQZ|Qr˂ptArdf~Hp˂rJltnvpH~fZHAے|ZdQbfpvXQJ`ےbdQZ|H~fJXQrbf~H˂rXJltvpfHr˂pArd|f~H˂rXJltnvp~fZHAے`ZdQbtbHAZpˉbdQZ||AJlr˂p|ZdQbf~HJ`ےvffZHAb`JXQbtlnXv`bHAdrtf`vXے`JXbtlnXv`bHAdrtAZHAb|ZdQbfpvXQJ`ےbdQZ|fHfZHAb`JXQrtlJnXv`bHAZdrtA`vXntl|fpvnQJ`ےbdQZ|~f`ZHAbہZdQbtfpvQJ`ےbdQZ|fHf`ZHAbہJXQrlJtrXQdrttbnZHAbtlJfpvbHAZpf`vXے`JXrbtlJtArdfHZp˂AJltnvpQr˂pJtArdf~HZp˂Jltے`JXQtlJnXv`bHAZdrtA`vXnے`JXQbtltArdfHfp˂rJltvpfZdQbtvf~bHAZpdrtAvXn`JXQlJtnXv`˙bHAZpdrtAvXn`JXQbtlArdJ`ےAJltvpfے`JXQtArdnXv`˂bnvpQr˂pJtAdf~HfpvrXQJ`ۉbdQZ|fH~ˑZHAb|ZdQfpvrXQJ`bdQZ|lr˂ptArdf~Hp˂rJltvpfr˂pJtAdf~HpvnXQJ`ےbdQZ|H~flJtAHfpv˂rXJltvpfHr˂pArd|f~H˂rXJltvpfHr˂pJtAd|f~HXbHAXQJ`bdQZ|Hf`r˂p|ZdQbf~HHAZdfH~ˑZHAb|ZdQfpvnrXQJ`bHAdtAf`vXے`JXbtlnXv`bHAtbZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvrXQJ`bHAZdtAJ`vXnrd|nXvQJ`ےbdQZ|~f`ZHAbہZdQbtfpvQJ`ےbdQZ|~f`ZHAbہZdQbtv`fےbHrAJlvXnZHAbtlJfpvrtAJf`vXے`JXbtlnXv`ےHAZdrtJltnvpQr˂pJtArdf~HZp˂nvp`ے`JXQtlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`ےHAZdrtAltbvpfZdQbt`f~bHAZpdrtAvXn`JXQlJtnXv`˙bHAZpdrtAvXn`JXQlJt~HfpAZp˂tbdQvpfHے`JXQtArd~HfbdQZ|nvpQr˂pJtArdf~HZp˂AJltbnvpfH~ˑZHAۂ|ZdQfpvrXQJ`ۍvXnrZHAtArdf~Hp˂rJltvpfr˂ptArdf~Hp˂rJltnvpH~flJtAHfpv˂rXJltvpfHr˂pArd|f~H˂rXJltvpfHr˂pArd|vnXrXQJ`Z|d~f`r˂p|ZdQbpvndrtAfH~ˑZHAb|ZdQfpvrXQJ`ۉbdQZ|fHfZHAb`JXQbtlnXv`bHAvpfHbے`|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|fHfZHAbrdt璀nXvQJ`ےbdQZ|~f`ZHAbہZdQbtfpvQJ`ےbdQZ|~f`ZHAbہZdQbtv`fےbHrtAJlvXnZHAbtlJXv`fJltf`vXے`JXbtlnXv`bHAdrtf`vXے`JXrbtlJtArdfHZp˂~f`JXQrtlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXn˂pZlJtAr`f~fpbHAZpdrtAvXn`JXQlJtnXv`˙bHAZpdrtAvXn`JXQlJt~HfpAZp˂tbdQvpfHے`JXQtArd~HfbdQZ|nvpQr˂pJtArdf~HZp˂AJltnvpQr˂pJtAdf~HfpvrXQJ`ۍvXnpZHAtArdf~Hp˂rJltvpfr˂ptArdf~Hp˂rJltvpfHAbےd|ZvnX˂rXJltvpfHr˂pArd|f~H˂rXJltvpfHr˂pArd|v󉐙bHAZ|d~f`r˂p|ZdQbpvndrtAfH~ˑZHAb|ZdQfpvrXQJ`ۉbdQZ|fH~ˑZHAb|ZdQfpvnrXQJ`bHAvpfHbے`|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~f`JXQrdQbt璕v`fQJ`ےbdQZ|~f`ZHAbہZdQbtfpvQJ`ےbdQZ|~f`ZHAbہZdQbt~HfpZp˂rtAJvXnZHAbtlJXv`pJltbf`vXے`JXbtlnXv`bHAdrtf`vXے`JXbtlnXv`ےHAZdrt~JXQrtlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXn˂pZlJtAr~HfpbHAZpdrtAvXn`JXQlJtnXv`˙bHAZpdrtAvXn`JXQlJtvnXrXQJ`bdQZ|vpfHے`JXQtArd˂rXQQZdrnvpQr˂pJtArdf~HZp˂AJltnvpQr˂pJtArdf~HZp˂AdQZ|vpfHpZAbtArdf~Hp˂rJltvpfr˂ptArdf~Hp˂rJltvpfHAbےd|ZvnX˂rXJltvpfHr˂pArd|f~H˂rXJltvpfHr˂pArd|v`f󒐙bHAdrtA~f`r˂p|ZdQbJ`ےtAJlfH~ˑZHAb|ZdQfpvrXQJ`ۉbdQZ|fH~ˑZHAb|ZdQfpvrXQJ`ۂdrtA~f``JXQr|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~f`JXQHAdQtArdv`fQJ`ےbdQZ|~f`ZHAbہZdQbtfpvQJ`ےbdQZ|~f`ZHAbہZdQbt~HfpZp˂JltvXnZHAbtlJbHAZptbdQZf`vXے`JXbtlnXv`bHAdrtf`vXے`JXbtlnXv`bHAJltvXnۀ˂pZtlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXnbے`|ZdQ~HfvbHAZpdrtAvXn`JXQlJtnXv`˙bHAZpdrtAvXn`JXQlJtvnXrXQJ`pbdQZ|vpfHے`JXQtArd˂rXQ|drnvpQr˂pJtArdf~HZp˂AJltnvpQr˂pJtArdf~HZp˂bdQZ|vpfHHAbےtArdf~Hp˂rJltvpfr˂ptArdf~Hp˂rJltvpfJXQrbtlnXv`˂rXJltvpfHr˂pArd|f~H˂rXJltvpfHr˂pArd|v`pv˂rXdrtA~f`r˂p|ZdQbJ`ےtAJlfH~ˑZHAb|ZdQfpvrXQJ`ۉbdQZ|fH~ˑZHAb|ZdQfpvrXQJ`ۂdrtA~f``JXQr|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~f˂pZHAJtArdf~HQJ`ےbdQZ|~f`ZHAbہZdQbtfpvQJ`ےbdQZ|~f`ZHAbہZdQbtnXv`QJ`ےJltbvXnZHAbtlJbHAXQJtbdQZf`vXے`JXbtlnXv`bHAdrtf`vXے`JXbtlnXv`bHAJltdvXH~˂pZtlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXnbے`|ZdQfpvbHAZpdrtAvXn`JXQlJtnXv`˙bHAZpdrtAvXn`JXQlJtf~HbHAZpQZdrvpfHے`JXQtArd`ےb|rAJlnvpQr˂pJtArdf~HZp˂AJltnvpQr˂pJtArdf~HZp˂rtAJlf`vXHAbtArdf~Hp˂rJltvpfr˂ptArdf~Hp˂rJltvpfJXQrbtlnXv`˂rXJltvpfHr˂pArd|f~H˂rXJltvpfHr˂pArd|fpv˂rXtAJl~f`r˂pf~HHAZp˂tbdfH~ˑZHAb|ZdQfpvrXQJ`ۉbdQZ|fH~ˑZHAb|ZdQfpvrXQJ`ۑtbdnvpJQr˂p|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~f˂p`J|ZdQbf~HQJ`ےbdQZ|~f`ZHAbہZdQbtfpvQJ`ےbdQZ|~f`ZHAbہZdQbtnXv`QJ`ےtbdQZvXn|ZdQbXv`frXQJQZ|df`vXے`JXbtlnXv`bHAdrtf`vXے`JXbtlnXv`bHAQZ|dfH~ZHAbtlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXnXQr˂tlJfpvbHAZpdrtAvXn`JXQlJtnXv`˙bHAZpdrtAvXn`JXQlJtf~HbHAXQ|drvpfH~f`HAbےZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےtbdQZvpf˂pZZdQbtvnXJ`ےQZ|d~f`Abے`ZdQbtvnXJ`ےQZ|d~f`Qr˂p`ZQXbXnvˍvXn`JXQrlJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZp|drH~fHAbےlJtAv`fbHAZp˙rtAJlvXnہJXQrlJtAv`fbHAZp˙rtAJlvXnۑZHAbۑpJApfH~vpfH˂pZrd|~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQtAJl`vXn`JXQrrd|~HfprXQtbdvpfH˂pZHrd|~HfprXQtbdvpfHے`JXHr󙐉f۝`v~f`HAbےZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےtbdQZvp`˂pZZdQbtvnXJ`ےQZ|d~f`Abے`ZdQbtvnXJ`ےQZ|d~f`Qr˂pۑpJAHrXnvˍvXn`JXQrlJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZp|ltvXnHAbےlJtAv`fbHAZp˙rtAJlvXnہJXQrlJtAv`fbHAZp˙rtAJlvXnۑZHAb󙐂ˁ`Zp|drvpfH˂pZrd|~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQbdQZ|vpfH`JXQrrd|~HfprXQtbdvpfH˂pZHrd|~HfprXQtbdvpfH󙀉˂pQXb㉀QtJl~f`HAbےZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےdrtA~f`ZHAbZdQbtvnXJ`ےQZ|d~f`Abے`ZdQbtvnXJ`ےQZ|d~f`ZHAbۑpJAHrtbAdZvXn`JXQrlJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZpJltvXnے`JXlJtAv`fbHAZp˙rtAJlvXnہJXQrlJtAv`fbHAZp˙rtAJlvXnے`JXQ󙐂ˁ`|drvpfH˂pZrd|~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQbdQZ|vpfHQr˂prd|~HfprXQtbdvpfH˂pZHrd|~HfprXQtbdvpfHr˂ppfH~QtJl~f`HAbےZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےdrtA~vZHAbZdQbtvnXJ`ےQZ|d~f`Abے`ZdQbtvnXJ`ےQZ|d~f`ZHAbېf۝`vtbAdZvXn`JXQrlJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZpdQZ|pfH~ے`JXlJtAv`fbHAZp˙rtAJlvXnہJXQrlJtAv`fbHAZp˙rtAJlvXnے`JXQHXnvˍ|drvpfH˂pZrd|~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQdrtAJf`vQr˂prd|~HfprXQtbdvpfH˂pZHrd|~HfprXQtbdvpfHAbے`pfH~QtJl~f`HAbےZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےltbXnvZA`ZdQbtvnXJ`ےQZ|d~f`Abے`ZdQbtvnXJ`ےQZ|d~f`JXQrf۝`vtbAdZvXn`JXQrlJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZpdQZ|pfH~JXQrbtlJtAv`fbHAZp˙rtAJlvXnہJXQrlJtAv`fbHAZp˙rtAJlvXnۉ˂pZHXnvˍ|drvpfH˂pZrd|~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQdrtAJf`vlJtrdfHfpۂrXQtbdvpfH˂pZHrd|~HfprXQtbdvpfHAbے`pfH~QtJl~f`HAbےZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےltdXH~Ad|~HfpvnrXJ`ےQZ|d~f`Abے`ZdQbtvnXJ`ےQZ|d~f`JXQrf۝`vtbAdZvXn`JXQrlJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZprtAJlfZHAbZdQbtvnXQJ`ےbHAZdtAJlvXnہJXQrlJtAv`fbHAZp˙rtAJlvXnۉ˂p`ZXnvˍ|drvpfH˂pZrd|~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQtbdQJQrlJtAv`fHAZp˙rtAJltbnvpfH˂pZHrd|~HfprXQtbdvpfHQXb㉀pfH~QtJl~fZHAے`ZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےZ|d˂pZHrd|~HfprXQtbdvpfH~fZHAے`ZdQbtvnXJ`ےQZ|d~f`ۑpJAHrf۝`vtbAdZHAbےJXQrblJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZprtAJlAbے`ZdQbtvnXJ`ےQZ|df`Abے`JXQrbtlJtAv`fbHAZp˙rtAJlvXn󙐂ˁ`ZXnvˍ|dr`JXQrtlJrdfHfp˂rXQltbvpfH˂pZrd|~Hf˂rXQtbdQJXQrlJtAv`fbHAZp˙rtAJlvXnہJXQrlJtrdfHfpۂrXQtbdvpfHQXb㉀pfH~QtJl˂pZtAd|~HfvnrJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےZ|l璉˂pZHrd|~HfprXQtbdvpfH˂pZHAd|~HfpvnrXJ`ےQZ|d~f`ۑpJAHrf۝`vtbAdZHAbےZdQbtpvnXQJ`ےbHAZdtAJlvXn`JXQrlJtAXv`fbHAZptbnAbے`ZdQbtvnXJ`ےQZ|d~f`Abے`ZdQbtvnXQJ`ےbHAZdtAJlvXn󙐉ۑXnvˍ|dr`JXQrlJtAXv`fHAZpdrtAJtbnvpfH˂pZrd|~Hf˂rXQvp`vJXQrlJtAv`fbHAZp˙rtAJlvXnہJXQrlJtAv`fHAZp˙rtAJltbnvpfHpJAHrpfH~QtJl˂pZrd|~Hf˂rXQltbvpf~fZHAے`ZdQbtpvnJ`ےXnvZHAbrd|~HfprXQtbdvpfH˂pZHrd|~HfprXQtbdvpfH~frˁ`ZQf۝`vtbAdZHAbےZdQbtpvnJ`ےdQZ|Hf`HAbےJXQrblJtAXv`fbHAZppfH~ے`JXQZdQbtvnXJ`ےQZ|d~f`Abے`ZdQbtvnXJ`ےQZ|df`˂pZHXb㉀ۑXnvˍ|dr`JXQrlJtAXv`fbHAZpdrtAJvXn`JXQrtlJrdfHfp˂rXQf`vr˂plJtAv`fbHAZp˙rtAJlvXnہJXQrlJtAv`fbHAZp˙rtAJlvXnAbے`pJAHrpfH~QtJl˂pZrd|~Hf˂rXQltbvpfH˂pZtAd|~HfvnrJ`ےXnvZHAbrd|~HfprXQtbdvpfH˂pZHrd|~HfprXQtbdvpfHJXQrˁ`ZQf۝`vtbAdZHAbےZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtpvnXQJ`ےbHAZpfH~ے`JXQZdQbtvnXJ`ےQZ|d~f`Abے`ZdQbtvnXJ`ےQZ|d~f`˂pZHXAHr󙐂Xnvˍ|dr`JXQrlJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fHAZpdrtAdQvpr˂plJtAv`fbHAZp˙rtAJlvXnہJXQrlJtAv`fbHAZp˙rtAJlvXnAbے`ˁ`ZQXbpfH~QtJl˂pZrd|~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQZ|dfH~ZAb`rd|~HfprXQtbdvpfH˂pZHrd|~HfprXQtbdvpfHJXQHA㉀ۑpJf۝`vtbAdZHAbےZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےrtAJlf`vXJXQrZdQbtvnXJ`ےQZ|d~f`Abے`ZdQbtvnXJ`ےQZ|d~f`bے`AHr󙐂Xnvˍ|dr`JXQrlJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZptbdQnvppZHAlJtAv`fbHAZp˙rtAJlvXnہJXQrlJtAv`fbHAZp˙rtAJlvXnJXQrˁ`ZQXbpfH~QtJl˂pZrd|~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQZ|dfH~bے`rd|~HfprXQtbdvpfH˂pZHrd|~HfprXQtbdvpfHpZHA㉀ۑpf۝`vtbAdZHAbےZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےrtAJlf`vXJXQrZdQbtvnXJ`ےQZ|d~f`Abے`ZdQbtvnXJ`ےQZ|d~f`bے``ZQXbXnvˍ|dr`JXQrlJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZptdrH~fpZHAlJtAv`fbHAZp˙rtAJlvXnہJXQrlJtAv`fbHAZp˙rtAJlvXnJXQrˀۑpJApfH~QtJl˂pZrd|~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQtAJl`vXnbJQrrd|~HfprXQtbdvpfH˂pZHrd|~HfprXQtbdvpfHp`JXHr󙐂ˁf۝`vtbAdZ|JJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKK \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv34_1.dat b/vendor/endroid/qr-code/assets/data/qrv34_1.dat new file mode 100644 index 000000000..2cf2bf90e --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv34_1.dat @@ -0,0 +1,305 @@ +}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvtstststsststststrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYWXWXWXWXWWXWXWXWUVUVUVUVUVUVUVUVSTSTSTSTSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>;<;;;;;;<;<;;;;;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvtstststsststststrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYWXWXWXWXXWXWXWXWUVUVUVUVUVUVUVUVSTSTSTSTSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=><;<;<;<;;<;<;<;<:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvtstststsststststrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYWXWXWXWXXWXWXWXWUVUVUVUVUVUVUVUVSTSTSTSTSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=><;<;<;<;;<;<;<;<:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvtstststsststststrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYWXWXWXWXXWXWXWXWUVUVUVUVUVUVUVUVSTSTSTSTSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=><;<;<;<;;<;<;<;<:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwvuvuvuvuvtstststsststststrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYWXWXWXWXXWXWXWXWUVUVUVUVUVUVUVUVSTSTSTSTSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=><;<;<;<;;<;<;<;<:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvssssststsssssstsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[ZYZYZYZYZYWXWXWXWWXWXWXWXWUVUVUVUVUVUVUVUVSTSTSTSTSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=><;<;<;<;;<;<;<;<:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvststststtstststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYWWWWXWXWWWWWWXWXUVUVUVUVUVUVUVUVSTSTSTSTSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?>=>=>=>=>=><;<;<;;;;<;<;<;;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvststststtstststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWWXWXWXWXUVUVUVUVUVUVUVUVSTSTSTSTSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;;;<;<;<;;;;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#"!"!"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvststststtstststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWWXWXWXWXUVUVUVUVUVUVUVUVSTSTSTSTSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<<;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvststststtstststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWWXWXWXWXUVUVUVUVUVUVUVUVSTSTSTSTSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<<;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvststststtstststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWWXWXWXWXUVUVUVUVUVUVUVUVSTSTSTSTSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<<;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxuvuvuvuvuvuvuvuvstsssssststsssssrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWWXWXWXWXUVUVUVUVUVUVUVUVSTSTSTSTSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<<;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvtstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWWWWWWXWXWWWWWXUVUVUVUVUVUVUVUVSTSTSTSTSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@=>=>=>=>=>=>=>=>;<;<;<;<<;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!}~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvtstststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@=>=>=>=>=>=>=>=>;;;;;;<;<;;;;;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!"!   }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvtstststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYWXWXWXWXUVUVUVUVUVUVUVUVSTSTSTSTSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=><;<;<;<;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#"!"!"!"!"!"!"!"!  }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvuvuvtstststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYWXWXWXWXUVUVUVUVUVUVUVUVSTSTSTSTSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=><;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!    }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvuvuvutsttstststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYWXWXWXWXUVUVUVUVUVUVUVUVSTSTSTSTSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=><;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!    }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvststsssstststsssrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYXWXWWXWXWXWXUVUVUVUVUVUVUVUVSTSTSTSTSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=>=>=><;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!    }~}~}~}~}~}~}~}~{|{|{|{|{|{|{|{|yzyzyzyzyzyzyzyzwxwxwxwxwxwxwxwxuvuvuvuvsstststsssstststrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWWWWWWXWXWWWWUVUVUVUVUVUVUVUVSTSTSTSTSTSTSTSTQRQRQRQRQRQRQRQROPOPOPOPOPOPOPOPMNMNMNMNMNMNMNMNKLKLKLKLKLKLKLKLIJIJIJIJIJIJIJIJGHGHGHGHGHGHGHGHEFEFEFEFEFEFEFEFCDCDCDCDCDCDCDCDABABABABABABABAB?@?@?@?@?@?@?@?@=>=>=>=>=>=<;<;<<;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!                    + + + + + + + +              + + + + + + + +               + + + + + + + +                 + + + + + + + +                 + + + + + + + +                 + + + + + + + +                 + + + + + + + +                 + + + + + + + +             + + + + + + + +              + + + + + + + +              + + + + + + + +             + + + + + + + +             + + + + + + + +             + + + + + + + +          + + + + + + + +             + + + + + + + +             + + + + + + + +             + + + + + + + +             + + + + + + + +LLKKJJII]]^^__``((''&&%%DDEEFFGG=<;;::99 hiijjkkl}||{{zzy100//..- hiijjkkl}||{{zzy100//..- hiijjkkl}||{{zzy100//..- hiijjkkl}||{{zzy100//..- hiijjkkl}||{{zzy100//..- hiijjkklsrrqqppoGHHIIJJK98877665eeffgghh~~}}44332211eeffgghh~~}}44332211eeffgghh~~}}44332211eeffgghh~~}}44332211eeffgghh~~}}44332211eeffgghh{{zzyyssDDEEFFGG=<;;::99abbccdde87766554abbccdde87766554abbccdde87766554abbccdde87766554abbccdde87766554abbccdde~~}}||{;AABBCCDBBAA@?>=^^__``aa;;::9988^^__``aa;;::9988^^__``aa;;::9988^^__``aa;;::9988^^__``aa;;::9988^^__``aa''&&%%8899::;;HHGGFFEEaabbccdd~~}}||HHIIJJKK88776655 !!""##$lmmnnoopyxxwwvvu-,,++**) !!""##$lmmnnoopyxxwwvvu-,,++**) !!""##$lmmnnoopyxxwwvvu-,,++**) !!""##$lmmnnoopyxxwwvvu-,,++**) !!""##$lmmnnoopyxxwwvvu-,,++**) !!""##$lmmnnooponnmmllkKLLMMNNO54433221 iijjkkll||{{zzyy00//..-- iijjkkll||{{zzyy00//..-- iijjkkll||{{zzyy00//..-- iijjkkll||{{zzyy00//..-- iijjkkll||{{zzyy00//..-- iijjkkllrrqqppooHHIIJJKK88776655effgghhi~~}}|43322110effgghhi~~}}|43322110effgghhi~~}}|43322110effgghhi~~}}|43322110effgghhi~~}}|43322110effgghhi{zzyyssrDEEFFGGH<;;::998bbccddee77665544bbccddee77665544bbccddee77665544bbccddee77665544bbccddee77665544bbccddee~~}}||{{AABBCCDDDDCCBBAAeeffgghh{{zzyyssLLMMNNOO44332211$%%&&''(pqqrrsstuttssrrq)((''&&%$%%&&''(pqqrrsstuttssrrq)((''&&%$%%&&''(pqqrrsstuttssrrq)((''&&%$%%&&''(pqqrrsstuttssrrq)((''&&%$%%&&''(pqqrrsstuttssrrq)((''&&%$%%&&''(pqqrrsstkjjiihhg OPPQQRRS100//..-!!""##$$mmnnooppxxwwvvuu,,++**))!!""##$$mmnnooppxxwwvvuu,,++**))!!""##$$mmnnooppxxwwvvuu,,++**))!!""##$$mmnnooppxxwwvvuu,,++**))!!""##$$mmnnooppxxwwvvuu,,++**))!!""##$$mmnnooppnnmmllkkLLMMNNOO44332211 !ijjkkllm|{{zzyyx0//..--, !ijjkkllm|{{zzyyx0//..--, !ijjkkllm|{{zzyyx0//..--, !ijjkkllm|{{zzyyx0//..--, !ijjkkllm|{{zzyyx0//..--, !ijjkkllmrqqppoonHIIJJKKL87766554ffgghhii~~}}||33221100ffgghhii~~}}||33221100ffgghhii~~}}||33221100ffgghhii~~}}||33221100ffgghhii~~}}||33221100ffgghhiizzyyssrrEEFFGGHH@@??>>== iijjkkllrrqqppooPPQQRRSS00//..--())**++,tuuvvwwxqppoonnm%$$##""!())**++,tuuvvwwxqppoonnm%$$##""!())**++,tuuvvwwxqppoonnm%$$##""!())**++,tuuvvwwxqppoonnm%$$##""!())**++,tuuvvwwxqppoonnm%$$##""!())**++,tuuvvwwxgffeeddc + + STTUUVVW~~}}-,,++**)%%&&''((qqrrssttttssrrqq((''&&%%%%&&''((qqrrssttttssrrqq((''&&%%%%&&''((qqrrssttttssrrqq((''&&%%%%&&''((qqrrssttttssrrqq((''&&%%%%&&''((qqrrssttttssrrqq((''&&%%%%&&''((qqrrssttjjiihhgg PPQQRRSS00//..--!""##$$%mnnooppqxwwvvuut,++**))(!""##$$%mnnooppqxwwvvuut,++**))(!""##$$%mnnooppqxwwvvuut,++**))(!""##$$%mnnooppqxwwvvuut,++**))(!""##$$%mnnooppqxwwvvuut,++**))(!""##$$%mnnooppqnmmllkkjLMMNNOOP43322110 !!jjkkllmm{{zzyyxx//..--,, !!jjkkllmm{{zzyyxx//..--,, !!jjkkllmm{{zzyyxx//..--,, !!jjkkllmm{{zzyyxx//..--,, !!jjkkllmm{{zzyyxx//..--,, !!jjkkllmmqqppoonnIIJJKKLL<<;;::99!!""##$$mmnnooppnnmmllkkTTUUVVWW~~}}|,,++**)),--..//0xyyzz{{|mllkkjji! ,--..//0xyyzz{{|mllkkjji! ,--..//0xyyzz{{|mllkkjji! ,--..//0xyyzz{{|mllkkjji! ,--..//0xyyzz{{|mllkkjji! ,--..//0xyyzz{{|cbbaa``_W]]^^__`||{{zzyy)((''&&%))**++,,uuvvwwxxppoonnmm$$##""!!))**++,,uuvvwwxxppoonnmm$$##""!!))**++,,uuvvwwxxppoonnmm$$##""!!))**++,,uuvvwwxxppoonnmm$$##""!!))**++,,uuvvwwxxppoonnmm$$##""!!))**++,,uuvvwwxxffeeddcc + + TTUUVVWW~~}}|,,++**))%&&''(()qrrssttutssrrqqp(''&&%%$%&&''(()qrrssttutssrrqqp(''&&%%$%&&''(()qrrssttutssrrqqp(''&&%%$%&&''(()qrrssttutssrrqqp(''&&%%$%&&''(()qrrssttutssrrqqp(''&&%%$%&&''(()qrrssttujiihhggf PQQRRSST0//..--,""##$$%%nnooppqqwwvvuutt++**))((""##$$%%nnooppqqwwvvuutt++**))((""##$$%%nnooppqqwwvvuutt++**))((""##$$%%nnooppqqwwvvuutt++**))((""##$$%%nnooppqqwwvvuutt++**))((""##$$%%nnooppqqmmllkkjjMMNNOOPP88776655%%&&''((qqrrssttjjiihhgg ]]^^__``|{{zzyyx((''&&%%01122334|}}~~ihhggffe01122334|}}~~ihhggffe01122334|}}~~ihhggffe01122334|}}~~ihhggffe01122334|}}~~ihhggffe01122334|}}~~_^^]]WWV `aabbccdxwvutssr%$#"! --..//00yyzz{{||llkkjjii --..//00yyzz{{||llkkjjii --..//00yyzz{{||llkkjjii --..//00yyzz{{||llkkjjii --..//00yyzz{{||llkkjjii --..//00yyzz{{||bbaa``__]]^^__``|{{zzyyx((''&&%%)**++,,-uvvwwxxypoonnmml$##""!! )**++,,-uvvwwxxypoonnmml$##""!! )**++,,-uvvwwxxypoonnmml$##""!! )**++,,-uvvwwxxypoonnmml$##""!! )**++,,-uvvwwxxypoonnmml$##""!! )**++,,-uvvwwxxyfeeddccb + + TUUVVWW]~~}}||,++**))(&&''(())rrssttuussrrqqpp''&&%%$$&&''(())rrssttuussrrqqpp''&&%%$$&&''(())rrssttuussrrqqpp''&&%%$$&&''(())rrssttuussrrqqpp''&&%%$$&&''(())rrssttuussrrqqpp''&&%%$$&&''(())rrssttuuiihhggff QQRRSSTT~~}}44332211))**++,,uuvvwwxxffeeddcc + + aabbccddwvutssrr$#"! 45566778eddccbba45566778eddccbba45566778eddccbba45566778eddccbba45566778eddccbba45566778VUUTTSSR + + deeffgghrqqppoon11223344}}~~hhggffee11223344}}~~hhggffee11223344}}~~hhggffee11223344}}~~hhggffee11223344}}~~hhggffee11223344}}~~^^]]WWVV aabbccddwvutssrr$#"! -..//001yzz{{||}lkkjjiih -..//001yzz{{||}lkkjjiih -..//001yzz{{||}lkkjjiih -..//001yzz{{||}lkkjjiih -..//001yzz{{||}lkkjjiih -..//001yzz{{||}baa``__^]^^__``a{{zzyyxw(''&&%%$**++,,--vvwwxxyyoonnmmll##""!! **++,,--vvwwxxyyoonnmmll##""!! **++,,--vvwwxxyyoonnmmll##""!! **++,,--vvwwxxyyoonnmmll##""!! **++,,--vvwwxxyyoonnmmll##""!! **++,,--vvwwxxyyeeddccbb + + UUVVWW]]||{{zzyy00//..----..//00yyzz{{||bbaa``__ + + eeffgghhqqppoonn899::;;>??@]\\[[ZZY <==>>??@]\\[[ZZY <==>>??@]\\[[ZZY <==>>??@]\\[[ZZY <==>>??@]\\[[ZZY <==>>??@NMMLLKKJlmmnnoopjiihhggf99::;;<<``__^^]]99::;;<<``__^^]]99::;;<<``__^^]]99::;;<<``__^^]]99::;;<<``__^^]]99::;;<>??@@\\[[ZZYY ==>>??@@\\[[ZZYY ==>>??@@\\[[ZZYY ==>>??@@\\[[ZZYY ==>>??@@\\[[ZZYY ==>>??@@MMLLKKJJmmnnooppiihhggff9::;;<<=`__^^]]\9::;;<<=`__^^]]\9::;;<<=`__^^]]\9::;;<<=`__^^]]\9::;;<<=`__^^]]\9::;;<<=QPPOONNMijjkkllmmllkkjji66778899ccbbaa``66778899ccbbaa``66778899ccbbaa``66778899ccbbaa``66778899ccbbaa``66778899TTSSRRQQ ffgghhiippoonnmm$$##""!!99::;;<>??@@A\[[ZZYYX =>>??@@A\[[ZZYYX =>>??@@A\[[ZZYYX =>>??@@A\[[ZZYYX =>>??@@A\[[ZZYYX =>>??@@AMLLKKJJImnnooppqihhggffe::;;<<==__^^]]\\::;;<<==__^^]]\\::;;<<==__^^]]\\::;;<<==__^^]]\\::;;<<==__^^]]\\::;;<<==PPOONNMMjjkkllmmllkkjjii ==>>??@@MMLLKKJJzz{{||}}aa``__^^ +HIIJJKKLQPPOONNMHIIJJKKLQPPOONNMHIIJJKKLQPPOONNMHIIJJKKLQPPOONNMHIIJJKKLQPPOONNMHIIJJKKLBAA;;::9%%&}~~^]]\[ZYX + + EEFFGGHHTTSSRRQQEEFFGGHHTTSSRRQQEEFFGGHHTTSSRRQQEEFFGGHHTTSSRRQQEEFFGGHHTTSSRRQQEEFFGGHHEEDDCCBBzz{{||}}aa``__^^ +ABBCCDDEXWWVVUUT + + ABBCCDDEXWWVVUUT + + ABBCCDDEXWWVVUUT + + ABBCCDDEXWWVVUUT + + ABBCCDDEXWWVVUUT + + ABBCCDDEIHHGGFFEqrrssyyzeddccbba>>??@@AA[[ZZYYXX >>??@@AA[[ZZYYXX >>??@@AA[[ZZYYXX >>??@@AA[[ZZYYXX >>??@@AA[[ZZYYXX >>??@@AALLKKJJIInnooppqqhhggffeeAABBCCDDIIHHGGFF%%&&~~]]\[ZYXW + LMMNNOOPMLLKKJJILMMNNOOPMLLKKJJILMMNNOOPMLLKKJJILMMNNOOPMLLKKJJILMMNNOOPMLLKKJJILMMNNOOP98877665&''(())*WWVVUUTTIIJJKKLLPPOONNMMIIJJKKLLPPOONNMMIIJJKKLLPPOONNMMIIJJKKLLPPOONNMMIIJJKKLLPPOONNMMIIJJKKLLAA;;::99%%&&~~]]\[ZYXW + EFFGGHHITSSRRQQPEFFGGHHITSSRRQQPEFFGGHHITSSRRQQPEFFGGHHITSSRRQQPEFFGGHHITSSRRQQPEFFGGHHIEDDCCBBAz{{||}}~a``__^^] + +BBCCDDEEWWVVUUTT + + BBCCDDEEWWVVUUTT + + BBCCDDEEWWVVUUTT + + BBCCDDEEWWVVUUTT + + BBCCDDEEWWVVUUTT + + BBCCDDEEHHGGFFEErrssyyzzddccbbaaEEFFGGHHEEDDCCBB''(())**WVVUUTTSPQQRRSSTIHHGGFFEPQQRRSSTIHHGGFFEPQQRRSSTIHHGGFFEPQQRRSSTIHHGGFFEPQQRRSSTIHHGGFFEPQQRRSST54433221*++,,--.SSRRQQPPMMNNOOPPLLKKJJIIMMNNOOPPLLKKJJIIMMNNOOPPLLKKJJIIMMNNOOPPLLKKJJIIMMNNOOPPLLKKJJIIMMNNOOPP88776655''(())**WVVUUTTSIJJKKLLMPOONNMMLIJJKKLLMPOONNMMLIJJKKLLMPOONNMMLIJJKKLLMPOONNMMLIJJKKLLMPOONNMMLIJJKKLLMA;;::998%%&&'~]\[ZYXWW FFGGHHIISSRRQQPPFFGGHHIISSRRQQPPFFGGHHIISSRRQQPPFFGGHHIISSRRQQPPFFGGHHIISSRRQQPPFFGGHHIIDDCCBBAA{{||}}~~``__^^]]IIJJKKLLAA;;::99++,,--..SRRQQPPO + + TUUVVWWXEDDCCBBA + + TUUVVWWXEDDCCBBA + + TUUVVWWXEDDCCBBA + + TUUVVWWXEDDCCBBA + + TUUVVWWXEDDCCBBA + + TUUVVWWX100//..-.//00112OONNMMLLQQRRSSTTHHGGFFEEQQRRSSTTHHGGFFEEQQRRSSTTHHGGFFEEQQRRSSTTHHGGFFEEQQRRSSTTHHGGFFEEQQRRSSTT44332211++,,--..SRRQQPPOMNNOOPPQLKKJJIIHMNNOOPPQLKKJJIIHMNNOOPPQLKKJJIIHMNNOOPPQLKKJJIIHMNNOOPPQLKKJJIIHMNNOOPPQ87766554'(())**+VVUUTTSSJJKKLLMMOONNMMLLJJKKLLMMOONNMMLLJJKKLLMMOONNMMLLJJKKLLMMOONNMMLLJJKKLLMMOONNMMLLJJKKLLMM;;::9988%%&&''\\[[ZZYY MMNNOOPP88776655//001122ONNMMLLK XYYZZ[[\A@@??>>= XYYZZ[[\A@@??>>= XYYZZ[[\A@@??>>= XYYZZ[[\A@@??>>= XYYZZ[[\A@@??>>= XYYZZ[[\-,,++**)23344556KKJJIIHH + + UUVVWWXXDDCCBBAA + + UUVVWWXXDDCCBBAA + + UUVVWWXXDDCCBBAA + + UUVVWWXXDDCCBBAA + + UUVVWWXXDDCCBBAA + + UUVVWWXX00//..--//001122ONNMMLLK QRRSSTTUHGGFFEED QRRSSTTUHGGFFEED QRRSSTTUHGGFFEED QRRSSTTUHGGFFEED QRRSSTTUHGGFFEED QRRSSTTU43322110+,,--../RRQQPPOONNOOPPQQKKJJIIHHNNOOPPQQKKJJIIHHNNOOPPQQKKJJIIHHNNOOPPQQKKJJIIHHNNOOPPQQKKJJIIHHNNOOPPQQ77665544(())**++XXWWVVUU + + QQRRSSTT4433221133445566KJJIIHHG\]]^^__`=<<;;::9\]]^^__`=<<;;::9\]]^^__`=<<;;::9\]]^^__`=<<;;::9\]]^^__`=<<;;::9\]]^^__`)((''&&%6778899:GGFFEEDD YYZZ[[\\@@??>>== YYZZ[[\\@@??>>== YYZZ[[\\@@??>>== YYZZ[[\\@@??>>== YYZZ[[\\@@??>>== YYZZ[[\\,,++**))33445566KJJIIHHG + + UVVWWXXYDCCBBAA@ + + UVVWWXXYDCCBBAA@ + + UVVWWXXYDCCBBAA@ + + UVVWWXXYDCCBBAA@ + + UVVWWXXYDCCBBAA@ + + UVVWWXXY0//..--,/0011223NNMMLLKK RRSSTTUUGGFFEEDD RRSSTTUUGGFFEEDD RRSSTTUUGGFFEEDD RRSSTTUUGGFFEEDD RRSSTTUUGGFFEEDD RRSSTTUU33221100,,--..//TTSSRRQQ + + UUVVWWXX00//..--778899::GFFEEDDC`aabbccd98877665`aabbccd98877665`aabbccd98877665`aabbccd98877665`aabbccd98877665`aabbccd~~}}|%:;;AABBCCCBBAA@?]]^^__``<<;;::99]]^^__``<<;;::99]]^^__``<<;;::99]]^^__``<<;;::99]]^^__``<<;;::99]]^^__``((''&&%%778899::GFFEEDDC YZZ[[\\]@??>>==< YZZ[[\\]@??>>==< YZZ[[\\]@??>>==< YZZ[[\\]@??>>==< YZZ[[\\]@??>>==< YZZ[[\\],++**))(34455667JJIIHHGG + + VVWWXXYYCCBBAA@@ + + VVWWXXYYCCBBAA@@ + + VVWWXXYYCCBBAA@@ + + VVWWXXYYCCBBAA@@ + + VVWWXXYYCCBBAA@@ + + VVWWXXYY//..--,,00112233PPOONNMM YYZZ[[\\,,++**));;AABBCCCBBAA@?>deeffggh~~}54433221deeffggh~~}54433221deeffggh~~}54433221deeffggh~~}54433221deeffggh~~}54433221deeffggh|{{zzyysCDDEEFFG>=<;;::9aabbccdd88776655aabbccdd88776655aabbccdd88776655aabbccdd88776655aabbccdd88776655aabbccdd~~}}||;;AABBCCCBBAA@?>]^^__``a<;;::998]^^__``a<;;::998]^^__``a<;;::998]^^__``a<;;::998]^^__``a<;;::998]^^__``a(''&&%%78899::;FFEEDDCCZZ[[\\]]??>>==<<ZZ[[\\]]??>>==<<ZZ[[\\]]??>>==<<ZZ[[\\]]??>>==<<ZZ[[\\]]??>>==<<ZZ[[\\]]++**))((44556677~~}}||{++**))((&''(())*rssttuuvsrrqqppo'&&%%$$#&''(())*rssttuuvsrrqqppo'&&%%$$#&''(())*rssttuuvsrrqqppo'&&%%$$#&''(())*rssttuuvsrrqqppo'&&%%$$#&''(())*rssttuuvsrrqqppo'&&%%$$#&''(())*rssttuuvfeeddccb + + +abbccddeihhggffe@AABBCCD{zzyyxwv''&&%%$#*++,,--.vwwxxyyzonnmmllk#""!! *++,,--.vwwxxyyzonnmmllk#""!! *++,,--.vwwxxyyzonnmmllk#""!! *++,,--.vwwxxyyzonnmmllk#""!! *++,,--.vwwxxyyzonnmmllk#""!! *++,,--.vwwxxyyzbaa``__^ + effgghhieddccbbaDEEFFGGHutssrrqq"! .//00112z{{||}}~kjjiihhg.//00112z{{||}}~kjjiihhg.//00112z{{||}}~kjjiihhg.//00112z{{||}}~kjjiihhg.//00112z{{||}}~kjjiihhg.//00112z{{||}}~^]]WWVVUijjkkllma``__^^]HIIJJKKLppoonnmm23344556~gffeeddc23344556~gffeeddc23344556~gffeeddc23344556~gffeeddc23344556~gffeeddc23344556~UTTSSRRQmnnooppq]\\[[ZZY LMMNNOOPllkkjjii6778899:cbbaa``_6778899:cbbaa``_6778899:cbbaa``_6778899:cbbaa``_6778899:cbbaa``_6778899:QPPOONNMqrrssyyzYXXWWVVU + + PQQRRSSThhggffee:;;<<==>_^^]]\\[:;;<<==>_^^]]\\[:;;<<==>_^^]]\\[:;;<<==>_^^]]\\[:;;<<==>_^^]]\\[:;;<<==>MLLKKJJIz{{||}}~UTTSSRRQ + + TUUVVWWXddccbbaa >??@@AAB[ZZYYXXW >??@@AAB[ZZYYXXW >??@@AAB[ZZYYXXW >??@@AAB[ZZYYXXW >??@@AAB[ZZYYXXW >??@@AABIHHGGFFE%%&&'~QPPOONNM XYYZZ[[\``__^^]] + + BCCDDEEFWVVUUTTS + + BCCDDEEFWVVUUTTS + + BCCDDEEFWVVUUTTS + + BCCDDEEFWVVUUTTS + + BCCDDEEFWVVUUTTS + + BCCDDEEFEDDCCBBA'(())**+MLLKKJJI\]]^^__`\[ZYXWWV FGGHHIIJSRRQQPPOFGGHHIIJSRRQQPPOFGGHHIIJSRRQQPPOFGGHHIIJSRRQQPPOFGGHHIIJSRRQQPPOFGGHHIIJA;;::998+,,--../IHHGGFFE`aabbccdVUUTTSSRJKKLLMMNONNMMLLKJKKLLMMNONNMMLLKJKKLLMMNONNMMLLKJKKLLMMNONNMMLLKJKKLLMMNONNMMLLKJKKLLMMN87766554/0011223EDDCCBBAdeeffgghRQQPPOONNOOPPQQRKJJIIHHGNOOPPQQRKJJIIHHGNOOPPQQRKJJIIHHGNOOPPQQRKJJIIHHGNOOPPQQRKJJIIHHGNOOPPQQR4332211034455667A@@??>>= hiijjkklNMMLLKKJ +RSSTTUUVGFFEEDDC +RSSTTUUVGFFEEDDC +RSSTTUUVGFFEEDDC +RSSTTUUVGFFEEDDC +RSSTTUUVGFFEEDDC +RSSTTUUV0//..--,78899::;=<<;;::9 !!""##$lmmnnoopJIIHHGGF + VWWXXYYZCBBAA@@? + VWWXXYYZCBBAA@@? + VWWXXYYZCBBAA@@? + VWWXXYYZCBBAA@@? + VWWXXYYZCBBAA@@? + VWWXXYYZ,++**))(;AABBCCD98877665$%%&&''(pqqrrsstFEEDDCCBZ[[\\]]^?>>==<<;Z[[\\]]^?>>==<<;Z[[\\]]^?>>==<<;Z[[\\]]^?>>==<<;Z[[\\]]^?>>==<<;Z[[\\]]^(''&&%%DEEFFGGH~~}54433221())**++,tuuvvwwxBAA@?>=<^__``aab;::99887^__``aab;::99887^__``aab;::99887^__``aab;::99887^__``aab;::99887^__``aab~~}}||{HIIJJKKL}||{{zzy100//..-,--..//0xyyzz{{|;;::9988bccddeef76655443bccddeef76655443bccddeef76655443bccddeef76655443bccddeef76655443bccddeef{zzyyssrLMMNNOOPyxxwwvvu-,,++**)01122334|}}~~77665544fgghhiij~~}}||{3221100/fgghhiij~~}}||{3221100/fgghhiij~~}}||{3221100/fgghhiij~~}}||{3221100/fgghhiij~~}}||{3221100/fgghhiijrqqppoonPQQRRSSTuttssrrq)((''&&%4556677833221100 !!"jkkllmmn{zzyyxxw/..--,,+ !!"jkkllmmn{zzyyxxw/..--,,+ !!"jkkllmmn{zzyyxxw/..--,,+ !!"jkkllmmn{zzyyxxw/..--,,+ !!"jkkllmmn{zzyyxxw/..--,,+ !!"jkkllmmnnmmllkkjTUUVVWW]qppoonnm%$$##""!899::;;>??@ZHAbے`JXQtArd|ZdQbXv`ffpvZp˂bdQZ|bdQZ|fH~f`vXے`JXQr˂pJtArd|ZdQfpvnXv`bHAZp˂AJltbdQZ|fH~f`vXے`JXQr˂pJtArd|ZdQfpvnXv`bHAZp˂rtAJlbdQZ|nvpZHAbZHAbtlJtArdf~HfpvXQJ`ےbHAZdrtAJltvpfH~fZHAbے`JXQtlJtArdf~HfpvXQJ`ےbHAZdrtAJltvpfH~f`JXQHA`JXQr|ZdQnXv`˅nXv`˂rXQJ`ےbdQZ|drtAvXnvpfHr˂pZHAbہZdQbtlJtnXv`f~H˂rXQJ`ےbdQZ|drtAvXnvpfHr˂pZHAbہZdQbtlJt~Hfp~HfpbHArtAJbrtAJ~f`vXn`JXQr˂pZrd|ZdQbtpvnXv`fbHAZp˂rXQltbdQZ|~f`vXn`JXQr˂pZrd|ZdQbtpvnXv`fbHAZp˂rXQZ|dltdf`vXے`JXQr˂p|ZdQbtlJ~Hf~HfrXQJ`drtAdrtAf`vXnvpQr˂pZHAb|ZdQbtlnXv`f~HZp˂rXQJ`ۉbdQZ|drtf`vXnvpQr˂pZHAb|ZdQbtlnXv`f~HZp˂rXQJ`ۑtbddrtAfH~ے`JXQے`JXtArd|ZdQbfpvnXv`bHAZp˂rJltbdQZ|H~f`vXnے`JXQr˂ptArd|ZdQbfpvnXv`bHAZp˂rJltbdQZ|H~f`vXnbے`˂pZbtlf~Hf~HQJ`ےbHAZpdrtAJltvpfH~f`ZHAbے`JXQlJtArd|f~HfpvQJ`ےbHAZpdrtAJltvpfH~f`ZHAbے`JXQlJtArd|vvnXZp˂dQZ|bdQZ|vXnvpfH˂pZHAbےZdQbtlJtAXv`f~Hf˂rXQJ`ےdQZ|drtAJvXnvpfH˂pZHAbےZdQbtlJtAXv`f~Hf˂rXQJ`ےrtAJlrtAJlH~fr˂pZHAbtlJtArdpvpvnےbHAJltJltnvpfH~ˑZHAbے`JXbtlJtArdf~HfpvrXQJ`ےbHAdrtAJltnvpfH~ˑZHAbے`JXbtlJtArdf~HfpvrXQJ`ےbHAQZ|dJltf`vXr˂pQr˂p|ZdQbtlJnXv`f~Hp˂rXQJ`ےbdQZ|drtA`vXnvpfr˂pZHAb|ZdQbtlJnXv`f~Hp˂rXQJ`ےbdQZ|drtA`vXnvpfJXQrHAbےJtArdfpvfpvbHAZp˂rXJltbdQZ|~f`vXn`JXQr˂pArd|ZdQbtfpvnXv`˙bHAZp˂rXJltbdQZ|~f`vXn`JXQr˂pArd|ZdQbt~Hfpەv`frXQJ`drtAJdrtAvpfH~f`HAbے`JXQrlJtArd|~HfpvnJ`ےbHAZpdrtAJltbvpfH~f`HAbے`JXQrlJtArd|~HfpvnJ`ےbHAZptdrtbdQ`vXnZHAbے`JXQtArd|ZdQb~HfpXv`fZp˂bdQZ|bdQZ|fH~f`vXے`JXQr˂pJtArd|ZdQfpvnXv`bHAZp˂AJltbdQZ|fH~f`vXے`JXQr˂pJtArd|ZdQfpvnXv`bHAZp˂rtAJlbdQZ|lnvpZHAbZHAbtlJtArdf~HfpvXQJ`ےbHAZdrtAJltvpfH~fZHAbے`JXQtlJtArdf~HfpvXQJ`ےbHAZdrtAJltvpfH~f˂pZHA`JXQr|ZdQnXv`nXv`˂rXQJ`ےbdQZ|drtAvXnvpfHr˂pZHAbہZdQbtlJtnXv`f~H˂rXQJ`ےbdQZ|drtAvXnvpfHr˂pZHAbہZdQbtlJtvnX~HfpbHAltbJlt~f`vXn`JXQr˂pZrd|ZdQbtpvnXv`fbHAZp˂rXQltbdQZ|~f`vXn`JXQr˂pZrd|ZdQbtpvnXv`fbHAZp˂rXQtAJlZ|dvpfے`JXQr˂p|ZdQbtlJvnX~HfrXQJ`drtAdrtAf`vXnvpQr˂pZHAb|ZdQbtlnXv`f~HZp˂rXQJ`ۉbdQZ|drtf`vXnvpQr˂pZHAb|ZdQbtlnXv`f~HZp˂rXQJ`ۑtbdtb`vXے`JXQے`JXtArd|ZdQbfpvnXv`bHAZp˂rJltbdQZ|H~f`vXnے`JXQr˂ptArd|ZdQbfpvnXv`bHAZp˂rJltbdQZ|H~f`vXnbے`˂p`btlf~Hf~HQJ`ےbHAZpdrtAJltvpfH~f`ZHAbے`JXQlJtArd|f~HfpvQJ`ےbHAZpdrtAJltvpfH~f`ZHAbے`JXQlJtArd|v`fvnXZp˂dQZ|bdQZ|vXnvpfH˂pZHAbےZdQbtlJtAXv`f~Hf˂rXQJ`ےdQZ|drtAJvXnvpfH˂pZHAbےZdQbtlJtAXv`f~Hf˂rXQJ`ےtbdQZrtAJlH~fr˂pZHAbtlJtArdv`fpvnp˂rJltbJltnvpfH~ˑZHAbے`JXbtlJtArdf~HfpvrXQJ`ےbHAdrtAJltnvpfH~ˑZHAbے`JXbtlJtArdf~HfpvrXQJ`ےbHAQZ|lnvp`nvprZHAQrZHA|ZdQbtlJnXv`f~Hp˂rXQJ`ےbdQZ|drtA`vXnvpfr˂pZHAb|ZdQbtlJnXv`f~Hp˂rXQJ`ےbdQZ|drtA`vXnvpfJXQrJXQrb|ZdQbfpvnfpvbHAZp˂rXJltbdQZ|~f`vXn`JXQr˂pArd|ZdQbtfpvnXv`˙bHAZp˂rXJltbdQZ|~f`vXn`JXQr˂pArd|ZdQbt~Hfpەv`prXQJ`pdrtAJdrtAvpfH~f`HAbے`JXQrlJtArd|~HfpvnJ`ےbHAZpdrtAJltbvpfH~f`HAbے`JXQrlJtArd|~HfpvnJ`ےbHAZp|drtbdQ`vXnZHAbے`JXQtArd|ZdQb~HfpXv`pXQJ`ےQZdrbQZdfH~f`vXے`JXQr˂pJtArd|ZdQfpvnXv`bHAZp˂AJltbdQZ|fH~f`vXے`JXQr˂pJtArd|ZdQfpvnXv`bHAZp˂tbdQvXnfH~bے`bے`tlJtArdf~HfpvXQJ`ےbHAZdrtAJltvpfH~fZHAbے`JXQtlJtArdf~HfpvXQJ`ےbHAZdrtAJltvpfH~f˂p`Jtl|tlJvf~nvf˂rXQJ`ےbdQZ|drtAvXnvpfHr˂pZHAbہZdQbtlJtnXv`f~H˂rXQJ`ےbdQZ|drtAvXnvpfHr˂pZHAbہZdQbtlJtvnXvnrX˂rXltbQJltb~f`vXn`JXQr˂pZrd|ZdQbtpvnXv`fbHAZp˂rXQltbdQZ|~f`vXn`JXQr˂pZrd|ZdQbtpvnXv`fbHAZp˂rXQtAJlZ|l璀vp`ے`JXQr˂p|ZdQbtlJvnX˂rXQbHAZtAJlrtAJlf`vXnvpQr˂pZHAb|ZdQbtlnXv`f~HZp˂rXQJ`ۉbdQZ|drtf`vXnvpQr˂pZHAb|ZdQbtlnXv`f~HZp˂rXQJ`Z|dvpfHf`vXJXQrJXQrtArd|ZdQbfpvnXv`bHAZp˂rJltbdQZ|H~f`vXnے`JXQr˂ptArd|ZdQbfpvnXv`bHAZp˂rJltbdQZ|H~f`vXnXQr˂ZdQbttArdHfpv~HfpQJ`ےbHAZpdrtAJltvpfH~f`ZHAbے`JXQlJtArd|f~HfpvQJ`ےbHAZpdrtAJltvpfH~f`ZHAbے`JXQlJtArd|v`pvQJ`pQJ`ےZdrtQZdrvXnvpfH˂pZHAbےZdQbtlJtAXv`f~Hf˂rXQJ`ےdQZ|drtAJvXnvpfH˂pZHAbےZdQbtlJtAXv`f~Hf˂rXQJ`ےtbdQZtbnvXnr˂pZHAbtlJtArdv`pvJ`ےp˂rtbdQZtbdQnvpfH~ˑZHAbے`JXbtlJtArdf~HfpvrXQJ`ےbHAdrtAJltnvpfH~ˑZHAbے`JXbtlJtArdf~HfpvrXQJ`ےbHArtAJl~f`nvppZHA˂pZHA|ZdQbtlJnXv`f~Hp˂rXQJ`ےbdQZ|drtA`vXnvpfr˂pZHAb|ZdQbtlJnXv`f~Hp˂rXQJ`ےbdQZ|drtA`vXnvpfpZHAblJtA|ZdQbnXvvnXbHAZp˂rXJltbdQZ|~f`vXn`JXQr˂pArd|ZdQbtfpvnXv`˙bHAZp˂rXJltbdQZ|~f`vXn`JXQr˂pArd|ZdQbtnXv`rXQbHAZpAJlttAJlvpfH~f`HAbے`JXQrlJtArd|~HfpvnJ`ےbHAZpdrtAJltbvpfH~f`HAbے`JXQrlJtArd|~HfpvnJ`ےbHAZp|ltvp`vvpfHZHAbے`JXQtArd|ZdQbnXvbHAZpXQJ`ے|drZ|dfH~f`vXے`JXQr˂pJtArd|ZdQfpvnXv`bHAZp˂AJltbdQZ|fH~f`vXے`JXQr˂pJtArd|ZdQfpvnXv`bHAZp˂tbdQvXnfH~bے`bے`tlJtArdf~HfpvXQJ`ےbHAZdrtAJltvpfH~fZHAbے`JXQtlJtArdf~HfpvXQJ`ےbHAZdrtAJltvpfH~fے`Jrd|tlJ`f~v`f˂rXQJ`ےbdQZ|drtAvXnvpfHr˂pZHAbہZdQbtlJtnXv`f~H˂rXQJ`ےbdQZ|drtAvXnvpfHr˂pZHAbہZdQbtlJtf~HJ`ے˂rXbdQZ|tbdQZ~f`vXn`JXQr˂pZrd|ZdQbtpvnXv`fbHAZp˂rXQltbdQZ|~f`vXn`JXQr˂pZrd|ZdQbtpvnXv`fbHAZp˂rXQbdQZ|Xnv~f`ے`JXQr˂p|ZdQbtlJ`f~˂rXQbHAXQtAJlrtAJlf`vXnvpQr˂pZHAۂ|ZdQbtlnXv`fHZp˂rXQJ`ۉbdQZ|dtAf`vXnvpQr˂pZHAۂ|ZdQbtlnXv`fHZp˂rXQJ`Z|dvpfHvpfHJXQrJXQrtArd|ZdQbfpvnXv`bHAZp˂rJltbdQZ|H~f`vXnے`JXQr˂ptArd|ZdQbfpvnXv`bHAZp˂rJltbdQZ|H~f`vXnXQr˂ZdQbttArdtHfpv~HfpQJ`ےbHAZpdrtAJltvpfH~f`ZHAbے`JXQlJtArd|f~HfpvQJ`ےbHAZpdrtAJltvpfH~f`ZHAbے`JXQlJtArd|fpvbHAZpQJ`ےdrt|drvXnvpfH˂pZHAbےZdQbtlJtAXv`f~Hf˂rXQJ`ےdQZ|drtAJvXnvpfH˂pZHAbےZdQbtlJtAXv`f~Hf˂rXQJ`ےdrtApfH~vXnr˂pZHAbtlJtArdHfpvJ`ےJ`ےtbdQZtbdQnvpfH~ˑZHAb`JXQbtlJtArdf~HfpvrXQJ`ےbHAdrtJltnvpfH~ˑZHAb`JXQbtlJtArdf~HfpvrXQJ`ےbHArtAdQZ|~ۅ~f`pZAb˂pZA|ZdQbtlJnXv`fHfp˂rXQJ`ےbdQZ|dtAJ`vXnvpfr˂pZHAے|ZdQbtlJnXv`fHfp˂rXQJ`ےbdQZ|dtAJ`vXnvpfpZHAblJtAlJtAnXvvnXbHAZp˂rXJltbdQZ|~f`vXn`JXQr˂pArd|ZdQbtfpvnXv`˙bHAZp˂rXJltbdQZ|~f`vXn`JXQr˂pArd|ZdQbtnXv`rXQbHAXQAJlttAJlvpfH~f`HAbے`JXQrlJtArd|~HfpvnJ`ےbHAZpdrtAJltbvpfH~f`HAbے`JXQrlJtArd|~HfpvnJ`ےbHAZpJltf`vvpfHZHAbے`JXQtArd|ZdQbnXvbHAXQJbHAZp|rAJlZ|dnfH~fZHAbے`JXrbtlJtArdf~HfpvnrXQJ`bHAZdrtAJltbnvpfH~fZHAbے`JXrbtlJtArdf~HfpvnrXQJ`bHAZdrtdrtvpfHvXn`JXQr`JXQrtlJtArdf~HpvnXQJ`ےbHAZdrtAltbvpfH~fZHAb`JXQrtlJtArdf~HpvnXQJ`ےbHAZdrtAltbvpfH~f˂prdtrd|`f~fpv`ffp˂rXQJ`ےbdQZ|dtAJlvXnvpfHr˂pZHAے`ZdQbtlJtnXv`fHfp˂rXQJ`ےbdQZ|dtAJlvXnvpfHr˂pZHAے`ZdQbtlJtf~HJ`ےJ`ےbdQZ|tbdQZ~f`vXn`JXQr˂pZrd|ZdQbtpvnXv`fbHAZp˂rXQltbdQZ|~f`vXn`JXQr˂pZrd|ZdQbtpvnXv`fbHAZp˂rXQbdQZ|Xnv~vے`JXQr˂p|ZdQbtlJ`f~`ےb˂rXQtbdvff`vXے`JXQr˂pJtAd|ZdQfpvnXv`ےHAZp˂AJltbdQZ|fHf`vXے`JXQr˂pJtAd|ZdQfpvnXv`ےHAZp˂AdQZ|AJlt~f`vpfH˂pZbtltArdf~HfpvrXQJ`bHAZdrtAJltnvpH~fZHAbے`JXQbtltArdf~HfpvrXQJ`bHAZdrtAJltnvpH~fZHAbZHAblJtArZdQbtvnXvnQJ`ےbHAZdrtAtbvpfH~fZHAbہJXQrlJtArdf~HvnQJ`ےbHAZdrtAtbvpfH~fZHAbہJXQrlJtArd˅Xv`bHAXQJ`bHAZpˁrAJl|AJlvXnvpfH˂pZHAے`ZdQbtlJtAXv`fHfp˂rXQJ`ےdQZ|dtAJlvXnvpfH˂pZHAے`ZdQbtlJtAXv`fHfp˂rXQJ`ےdrtApfH~pfH~fZHAbr˂pZHAbtlJtArdHXv`HAZp˂J`ےQZ|df`vXnvpQr˂pZHAb|ZdQbtlnXv`f~HZp˂rXQJ`ۉbdQZ|drtf`vXnvpQr˂pZHAb|ZdQbtlnXv`f~HZp˂rXQJ`ۂdrtAbdQZ|vXnۅ~f`HAbےJtAd|ZdQbfpvnXv`ےHAZp˂rJltbdQZ|fHf`vXnے`JXQr˂pJtAd|ZdQbfpvnXv`ےHAZp˂rJltbdQZ|fHf`vXn˂pZے`JXQd|ZlJtAv`frXQJ`ۙbHAZpdrtAJltnvp~f`ZHAbے`JXQbtlArd|f~HfpvrXQJ`ۙbHAZpdrtAJltnvp~f`ZHAbے`JXQbtlArd|f~HXf~HےbHrXQtbdQtbnvpfH~fZHAbےJXQrblJtArdf~HfvnrJ`ےbHAZdrtAJtbnvpfH~fZHAbےJXQrblJtArdf~HfvnrJ`ےbHAZdQZ|vpf`vJQrZHAbے`JXQtArdf~Hf~HrXQJbHAZprtAJlnvpfH~ˑZHAbے`JXbtlJtArdf~HfpvrXQJ`ےbHAdrtAJltnvpfH~ˑZHAbے`JXbtlJtArdf~HfpvrXQJ`ےbHAJltdrtvpfHvXH`JXQr|ZdQbtlJnXv`f~Hp˂rXQJ`ےbdQZ|drtA`vXnvpfr˂pZHAb|ZdQbtlJnXv`f~Hp˂rXQJ`ےbdQZ|drtA`vXnvpfHAbےr˂pdQbtrd|~HfpHAZp˂rXJltbdQZ|fHf`vXn`JXQr˂pJtAd|ZdQbtfpvnXv`˒HAZp˂rXJltbdQZ|fHf`vXn`JXQr˂pJtAd|ZdQbtv`ffpvAZp˂J`ےZ|dvpf~f`HAbے`JXQrtlJrd|~HfpvnXQJ`ےbHAZpdrtAJltbvpf~f`HAbے`JXQrtlJrd|~HfpvnXQJ`ےbHAZpdrtAdQdrtAJfH~Xnv˂pZHے`JXQr˂p|ZdQbXv`ffpv`ےb˂btbdfH~f`vXے`JXQr˂pJtArd|ZdQfpvnXv`bHAZp˂AJltbdQZ|fH~f`vXے`JXQr˂pJtArd|ZdQfpvnXv`bHAZp˂bdQZ|AJlt~f`~fZH˂pZtlJtArdf~HfpvXQJ`ےbHAZdrtAJltvpfH~fZHAbے`JXQtlJtArdf~HfpvXQJ`ےbHAZdrtAJltvpfH~f`JXQrZHAblJtArZdQtArvnX˂rXQJ`ےbdQZ|drtAvXnvpfHr˂pZHAbہZdQbtlJtnXv`f~H˂rXQJ`ےbdQZ|drtAvXnvpfHr˂pZHAbہZdQbtlJt~HfpnXv`ˉrXQJ`bHAZprtAJlHf`vXn`JXQr˂pZtAd|ZdQbtpvnXv`fHAZp˂rXQltbdQZ|Hf`vXn`JXQr˂pZtAd|ZdQbtpvnXv`fHAZp˂rXQZ|dltbf`vXpfH~Abے`r˂p|ZdQbtlJ~HfnXv`HAZp˂HAZdQZ|df`vXnvpQr˂pZHAb|ZdQbtlnXv`f~HZp˂rXQJ`ۉbdQZ|drtf`vXnvpQr˂pZHAb|ZdQbtlnXv`f~HZp˂rXQJ`ۂdrtAdrtAvXH~AbJHAbtArd|ZdQbfpvnXv`bHAZp˂rJltbdQZ|H~f`vXnے`JXQr˂ptArd|ZdQbfpvnXv`bHAZp˂rJltbdQZ|H~f`vXn˂pZے`JXQd|Zdfv`fQJ`ےbHAZpdrtAJltvpfH~f`ZHAbے`JXQlJtArd|f~HfpvQJ`ےbHAZpdrtAJltvpfH~f`ZHAbے`JXQlJtArd|vnXf~HےbHbHtbdQvXnvpfH˂pZHAbےZdQbtlJtAXv`f~Hf˂rXQJ`ےdQZ|drtAJvXnvpfH˂pZHAbےZdQbtlJtAXv`f~Hf˂rXQJ`ےrtAJldQZ|nvpf`vJXQrZHAbtlJtArdpvnf~HbHArtAJrtAJnvpfH~ˑZHAbے`JXbtlJtArdf~HfpvrXQJ`ےbHAdrtAJltnvpfH~ˑZHAbے`JXbtlJtArdf~HfpvrXQJ`ےbHAJltdJltf`vXQr˂pJQr˂p|ZdQbtlJnXv`f~Hp˂rXQJ`ےbdQZ|drtA`vXnvpfr˂pZHAb|ZdQbtlJnXv`f~Hp˂rXQJ`ےbdQZ|drtA`vXnvpfHAbےHAbےdQtArd~Hfv~HfvbHAZp˂rXJltbdQZ|~f`vXn`JXQr˂pArd|ZdQbtfpvnXv`˙bHAZp˂rXJltbdQZ|~f`vXn`JXQr˂pArd|ZdQbtv`ffpvAZp˂AZdZ|dvpfH~f`HAbے`JXQrlJtArd|~HfpvnJ`ےbHAZpdrtAJltbvpfH~f`HAbے`JXQrlJtArd|~HfpvnJ`ےbHAZptbdQdrtAJfH~XH~˂pZHAbے`HAbےlJtArd|~HfpvnXJ`ےbHAZp˙rtAJltbdvpfH~f`Abے`JXQrlJtArd|~HfpvnXJ`ےbHAZp˙rtAJltbdvpfH~f`bے`˂p`ZۑpJApfH~ㅐf۝`vtbAdZJXQr`JXQrrd|ZdQbtvnXv`fbHAZp˂rXQtbdQZ|d~f`vXnہJXQr˂pZHrd|ZdQbtvnXv`fbHAZp˂rXQtbdQZ|d~f`vXnJXQrQXb㉀Hr󙐂ˁf۝`vXnvˍ|drZHAbZHAbZdQbtlJtAv`f~HfprXQJ`ےQZ|drtAJlvXnvpfH˂pZHAbے`ZdQbtlJtAv`f~HfprXQJ`ےQZ|drtAJlvXnvpfHp`JXۑpJAHr`ZQXbXnvˍpfH~QtJlے`JXQے`JXlJtArd|~HfpvnXJ`ےbHAZp˙rtAJltbdvpfH~f`Abے`JXQrlJtArd|~HfpvnXJ`ےbHAZp˙rtAJltbdvpfH~f`Qr˂p󙐂ˁ`ZۑpJApfH~ㅐf۝`vtbAdZr˂pQr˂prd|ZdQbtvnXv`fbHAZp˂rXQtbdQZ|d~f`vXnہJXQr˂pZHrd|ZdQbtvnXv`fbHAZp˂rXQtbdQZ|d~f`vXnۑZHAbQXb㉀Hr󙐉f۝`vXnvˍ|drZHAbZHAbZdQbtlJtAv`f~HfprXQJ`ےQZ|drtAJlvXnvpfH˂pZHAbے`ZdQbtlJtAv`f~HfprXQJ`ےQZ|drtAJlvXnvpfHے`JXۑpJAHrۑpJAHrXnvˍp|drQtJlے`JXQے`JXlJtArd|~HfpvnXJ`ےbHAZp˙rtAJltbdvpfH~f`Abے`JXQrlJtArd|~HfpvnXJ`ےbHAZp˙rtAJltbdvpfH~f`Qr˂p󙐉ۑ󙐂ˁ`ZpfH~QtJltbAdZr˂pQr˂prd|ZdQbtvnXv`fbHAZp˂rXQtbdQZ|d~f`vXnہJXQr˂pZHrd|ZdQbtvnXv`fbHAZp˂rXQtbdQZ|d~f`vXnۑZHAbpJAHrQXb㉀f۝`vtbAdZ|drZAb`ZA`ZdQbtlJtAv`fHfpۂrXQJ`ےQZ|dtAJlvXnvpfH˂pZHAے`ZdQbtlJtAv`fHfpۂrXQJ`ےQZ|dtAJlvXnvpfH󙀉˂pˁ`ZQۑpJAHrXnvˍ|drQtJlJXQrJXQrbtlJtArdf~HfpvnrXJ`ےbHAZdrtAJltbnvpfH~fZHAbے`JXQrbtlJtArdf~HfpvnrXJ`ےbHAZdrtAJltbnvpfH~frZHAbXb㉀ۑ󙐂ˁ`pfH~QtJltbAdZpZHAlJtrd|~HfpvnXQJ`ےbHAZp˙rtAJltbdvpfH~f`Abے`JXQrlJtrd|~HfpvnXQJ`ےbHAZp˙rtAJltbdvpfH~f`˂pZH`JXQpJAHrpfH~ㅐf۝`vtbAdZ|drbے`Ad|ZdQbtvnXv`fHAZp˂rXQtbdQZ|df`vXnہJXQr˂pZHAd|ZdQbtvnXv`fHAZp˂rXQtbdQZ|df`vXnAbے`r˂pˁ`ZQf۝`vXnvˍ|drQtJlJXQrZdQbtlJtAv`f~HfprXQJ`ےQZ|drtAJlvXnvpfH˂pZHAbے`ZdQbtlJtAv`f~HfprXQJ`ےQZ|drtAJlvXnvpfHJXQrZHAbXAHr󙐂XnvˍpfH~QtJltbAdZpZHAlJtArd|~HfpvnXJ`ےbHAZp˙rtAJltbdvpfH~f`Abے`JXQrlJtArd|~HfpvnXJ`ےbHAZp˙rtAJltbdvpfH~f`˂pZH`JXQHˁ`ZQXbpfH~ㅐf۝`vtbAdZ|drbJQrrd|ZdQbtvnXv`fbHAZp˂rXQtbdQZ|d~f`vXnہJXQr˂pZHrd|ZdQbtvnXv`fbHAZp˂rXQtbdQZ|d~f`vXnAbے`Abے`㉀ۑpJf۝`vXnvˍ|drQtJl˂pZZdQbtlJtAv`f~HfprXQJ`ےQZ|drtAJlvXnvpfH˂pZHAbے`ZdQbtlJtAv`f~HfprXQJ`ےQZ|drtAJlvXnvpfHJXQHAJXQrAHr󙐂XnvˍpfH~QtJltbAdZHAbےlJtArd|~HfpvnXJ`ےbHAZp˙rtAJltbdvpfH~f`Abے`JXQrlJtArd|~HfpvnXJ`ےbHAZp˙rtAJltbdvpfH~f`bے`˂pZHˁ`ZQXbpfH~ㅐf۝`vtbAdZ|dr`JXQrrd|ZdQbtvnXv`fbHAZp˂rXQtbdQZ|d~f`vXnہJXQr˂pZHrd|ZdQbtvnXv`fbHAZp˂rXQtbdQZ|d~f`vXnJXQrAbے`㉀ۑpf۝`vXnvˍ|drQtJl˂pZZdQbtlJtAv`f~HfprXQJ`ےQZ|drtAJlvXnvpfH˂pZHAbے`ZdQbtlJtAv`f~HfprXQJ`ےQZ|drtAJlvXnvpfHpZHAJXQr`ZQXbXnvˍpfH~QtJltbAdZ| \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv34_2.dat b/vendor/endroid/qr-code/assets/data/qrv34_2.dat new file mode 100644 index 000000000..4829b3148 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv34_2.dat @@ -0,0 +1,305 @@ +}~}~}~}~{|{|{|{|wxwxwxwxtstststspopopoponmnmnmnmjijijijihghghghg}~}~}~}~{|{|{|{|wxwxwxwxtstststspopopoponmnmnmnmjijijijihghghghg}~}~}~}~{|{|{|{|wxwxwxwxtstststspopopoponmnmnmnmjijijijihghghghg}~}~}~}~{|{|{|{|wxwxwxwxtststssspopopoponmnmnmnmjijijijihghghghg}~}~}~}~{zyzyzyzwxwxwxwxssstststpopopoponmnmnmnmjijijijihghghghg}~}~}~}~yzyzyzyzwxwxwxwxststststpopopoponmnmnmnmjijijijihghghghg}~}~}~}~yzyzyzyzwxwxwxwxststststpopopoponmnmnmnmjijijijifefefefe}~}~}~}~yzyzyzyzwxwxwxwxststststpopopoponmnmnmnmjijijijifefefefe}~}~}~}~yzyzyzyzwxwxwxwxststststpopopoponmnmnmnmjijijijifefefefe}~}~}~}~yzyzyzyzwxwxwxwxststststpopopoponmnmnmnmjijijijifefefefe}~}~}~}~yzyzyzyzwxwxwxwxsssssstspopopoponmnmnmnmjijijijifefefefe}~}~}~}~yzyzyzyzwxwxwxwxtstststspopopoponmnmnmnmjijijijifefefefe}~}~}~}~yzyzyzyzwxwxwxwvtstststspopopopolklklklkjijijijifefefefe}~}~}~}~yzyzyzyzuvuvuvuvtstststspopopopolklklklkjijijijifefefefe}~}~}~}~yzyzyzyzuvuvuvuvtstststspopopopolklklklkjijijijifefefefe}~}~}~}~yzyzyzyzuvuvuvuvtstststspopopopolklklklkjijijijifefefefe}~}~}~}~yzyzyzyzuvuvuvuvtstssssspopopopolklklklkjijijijifefefefe}~}~}~}~yzyzyzyzuvuvuvuvtstststspopopopolklklklkjijijijifefefefe}~}~}~}~yzyzyzyzuvuvuvuvrqrqrqrqpopopopolklklklkjijijijifefefefe}~}~}~}~yzyzyzyzuvuvuvuvrqrqrqrqpopopopolklklklkjijijijifefefefe}~}~}~}~yzyzyzyzuvuvuvuvrqrqrqrqpopopopolklklklkjijijijifefefefe}~}~}~}~yzyzyzyzuvuvuvuvrqrqrqrqpopopopolklklklkjijijijifefefefe}~}~}~}~yzyzyzyzuvuvuvuvrqrqrqrqpopopopolklklklkjijijijifefefefe}~}~}~}~yzyzyzyzuvuvuvuvrqrqrqrqpopopopolklklklkjijijijifefefefe}~}~}~}~yzyzyzyzuvuvuvuvrqrqrqrqpopopopolklklklkjijijijifefefefe}~}~}~}~yzyzyzyzuvuvuvuvrqrqrqrqpopopopolklklklkjijijijifefefefe}|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqpopopopolklklklkjijijijifefefefe{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqpopopopolklklklkjijijijifefefefe{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqpopopopolklklklkhghghghgfefefefe{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqpopopopolklklklkhghghghgfefefefe{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqpopopopolklklklkhghghghgfefefefe{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqpopopopolklklklkhghghghgfefefefe{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqpopopopolklklklkhghghghgfefefefe{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqpopopopolklklklkhghghghgfefefefe{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe{|{|{|{|yxwxwxwxuvuvuvuvrqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe{|{|{|{|wxwxwxwxuvuvutstrqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe{|{|{|{|wxwxwxwxststssssrqrqrqrqnmnmnmnmlklklklkhghghghgdcdcdcdc{|{|{|{|wxwxwxwxsstststsrqrqrqrqnmnmnmnmlklklklkhghghghgdcdcdcdc{|{|{|{|wxwxwxwxtstststsrqrqrqrqnmnmnmnmlklklklkhghghghgdcdcdcdc{|{|{|{|wxwxwxwxtstststsrqrqrqrqnmnmnmnmlklklklkhghghghgdcdcdcdc~}~}~}~{|{|{|{|wxwxwxwxtstststsrqrqrqrqnmnmnmnmlklklklkhghghghgdcdcdcdc}~}~}~}~{|{|{|{|wxwxwxwxtstststsrqrqrqrqnmnmnmnmlklklklkhghghghgdcdcdcdc}~}~}~}~{|{|{|{|wxwxwxwxtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdc}~}~}~}~{|{|{|{|wxwxwxwxssssststrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdc}~}~}~}~{|{|{|{|wxwxwxwxststststrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdc}~}~}~}~{|{|{|{|wxwxwxwxststststrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdc}~}~}~}~{|{|{|{|wxwxwxwxststststrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdc}~}~}~}~{|{|{|{|wxwxwxwxststststrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdc}~}~}~}~{|{|{|{|wxwxwxwxststststpopopoponmnmnmnmjijijijihghghghgdcdcdcdc}~}~}~}~{|{|{|{|wxwxwxwxstsssssspopopoponmnmnmnmjijijijihghghghgdcdcdcdc}~}~}~}~{|{|{|{|wxwxwxwxtstststspopopoponmnmnmnmjijijijihghghghgdcdcdcdc}~}~}~}~{|{|{|{|wxwxwxwxtstststspopopoponmnmnmnmjijijijihghghghgdcdcdcdcdcdcdcdcdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUVSTSTSTSTOPOPOPOPMNMNMNMLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@;<;<;<;<:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! dcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUVSTSTSTSTOPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@;<;<;<;<:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! dcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUVSTSTSTSTOPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@;<;<;<;<:9:9:98765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!  dcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUVSTSTSTSTOPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!     dcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUVSTSTSTSTOPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@;;;;;;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!     dcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUVSTSTSTSTOPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!     dcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUVSTSTSTSROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)('&%&%&%&%"!"!"!"!     dcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUVQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!     dcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUVQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!     dcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUVQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!     dcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUVQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCB?@?@?@?@<;<;;;;;8787878765656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!     dcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUVQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!     dcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUVQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFABABABAB?@?@?@?@;<;<;<;<8787878765656565212121210/0/0/.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     dcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUVQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFABABABAB?@?@?@?@;<;<;<;<878787876565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     dcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUVQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFABABABAB?@?@?@?@;<;<;<;<878787876565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     dcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYUVUVUVUVQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJEFEFEFEFABABABAB?@?@?@?@;<;<;<;<878787876565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     dcdcdcdc`_`_`_`_\[\[\[\[ZYZYXWXWUVUVUVUVQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIHEFEFEFEFABABABAB?@?@?@?@;<;<;<;;878787876565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     dcdcdcdc`_`_`_`_\[\[\[\[XWXWWWWWUVUVUVUVQRQRQRQROPOPOPOPKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;;;;<;<;878787876565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     dcdcdcdc`_`_`_`_\[\[\[\[WXWXWXWXUVUVUVUVQRQRQRQROPOPOPOPKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?@?@<;<;<;<;878787876565654321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + +dcdcdcdc`_`_`_`_\[\[\[\[WXWXWXWXUVUVUVUVQRQRQRQROPOPOPOPKLKLKLKLGHGHGHGHEFEFEFEFABABABAB?@?@?>=><;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + +dcdcdcdc`_`_`_`_\[\[\[\[WXWXWXWXUVUVUVUVQRQRQRQROPOPOPOPKLKLKLKLGHGHGHGHEFEFEFEFABABABAB=>=>=>=><;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + +babababa`_`_`_`_\[\[\[\[WXWXWXWXUVUVUVUVQRQRQRQROPOPOPOPKLKLKLKLGHGHGHGHEFEFEFEFABABABAB=>=>=>=><;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + +babababa`_`_`_`_\[\[\[\[WXWXWXWXUVUVUVUVQRQRQRQROPOPOPONKLKLKLKLGHGHGHGHEFEFEFEFABABABAB=>=>=>=><;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%$#"!"!"!"!     + + + +babababa`_`_`_`_\[\[\[\[WXWXWXWWUVUVUVUVQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB=>=>=>=><;;;;;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"!     + + + +babababa`_`_`_`_\[\[\[\[WWWWXWXWUVUVUVUVQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB=>=>=>=><;<;<;:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!        + + + +babababa`_`_`_`_\[\[\[\[XWXWXWXWUVUVUVUVQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB=>=>=>=>:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#       + + + +babababa`_`_`_`_\[\[\[\[XWXWXWXWUVUVUVUVQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB=>=>=>=>:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#         + + + +babababa`_`_`_`_\[\[\[\[XWXWXWXWUVUVUVUVQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB=>=>=>=>:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#         + + + +babababa`_`_`_`_\[\[\[\[XWXWXWXWUVUVUVUTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB=>=>=>=>:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+*)('('('('$#$#$#$#         + + + +babababa`_`_`_`_\[\[\[\[XWXWXWXWSTSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB=>=>=>=>:9:9:9:9878787874343434321212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#         + + + +babababa`_`_`_`_\[\[\[\[XWWWWWWXSTSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB=>=>=>=>:9:9:9:9878787874343434321212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#         + + + +babababa`_`_`_`_\[\[\[\[WXWXWXWXSTSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFABABABAB=>=>=>=>:9:9:9:9878787874343434321212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#       + + + +babababa`_`_`_`_\[\[\[\[WXWXWXWXSTSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEDABABABAB=>=>=>=>:9:9:9:9878787874343434321212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + +babababa`_`_`_`_\[\[\[\[WXWXWXWXSTSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHCDCDCDCDABABABAB=>=>=>=>:9:9:9:9878787874343434321212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#         + + + +babababa`_`_`_`_\[\[\[\[WXWXWXWXSTSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHCDCDCDCDABABABAB=>=>=>=>:9:9:9:987878787434343432121210/.-.-.-.-*)*)*)*)('('('('$#$#$#$#         + + + +babababa`_`_`_`_\[\[\[\[WXWXWXWXSTSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHCDCDCDCDABABABAB=>=>=>=>:9:9:9:987878787434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#         + + + +babababa`_`_`_`_\[\[\[\[WXWXWWWWSTSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHCDCDCDCDABABABAB=>=>=>=>:9:9:9:987878787434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#         + + + +babababa^]^]^]^]\[\[\[\[WWXWXWXWSTSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLGHGHGHGHCDCDCDCDABABABAB=>=>=>=>:9:9:9:987878787434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#         + + + +babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTQRQRQRQRMNMNMNMNKLKLKLKJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>:9:9:9:987878787434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#       + + + +babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTQRQRQRQRMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>:9:9:9:987878787434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#         + + + +babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTQRQRQRQRMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>:9:9:9:987878765434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#       + + + +babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTQRQRQRQRMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#     + + + +babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTQRQRQRQRMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#     + + + +babababa^]^]^]^]\[\[\[\[WWWWWXWXSTSTSTSTQRQRQRQRMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#     + + + +babababa^]^]^]^]\[\[\[\[WXWXWXWXSTSTSTSTQRQRQRQPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('&%$#$#$#$#  + + + +babababa^]^]^]^]\[\[\[ZYWXWXWXWXSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     + + + +babababa^]^]^]^]ZYZYZYZYWXWXWXWXSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     + + + +babababa^]^]^]^]ZYZYZYZYWXWXWXWXSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     + + + +babababa^]^]^]^]ZYZYZYZYWXWXWXWXSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCDABABABA@=>=>=>=>:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     + + + +babababa^]^]^]^]ZYZYZYZYWXWWWWWXSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCD?@?@?@?@=>=>=>=>:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     + + + +babababa^]^]^]^]ZYZYZYZYWXWXWXWVSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCD?@?@?@?@=>=<;<;<:9:9:9:965656565434343430/0/0/0/.-.-.-,+*)*)*)*)&%&%&%&%$#$#$#$#    + + + +babababa^]^]^]^]ZYZYZYZYUVUVUVUVSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCD?@?@?@?@;<;;;;;;:9:9:9:965656565434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#    + + + +babababa^]^]^]^]ZYZYZYZYUVUVUVUVSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCD?@?@?@?@<;<;<;<;:9:9:9:965656565434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + +babababa^]^]^]^]ZYZYZYZYUVUVUVUVSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHCDCDCDCD?@?@?@?@<;<;<;<;:9:9:9:965656565434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#"!"!     + + + +babababa^]^]^]^]ZYZYZYZYUVUVUVUVSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGFCDCDCDCD?@?@?@?@<;<;<;<;:9:9:9:965656565434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!     + + + +babababa^]^]^]^]ZYZYZYZYUVUVUVUVSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@<;<;<;<;:9:9:9:965656565434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!     + + + +babababa^]^]^]^]ZYZYZYZYUVUVUVUVSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@<;<;<;<;:9:9:9:965656565434343210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!     + + babababa^]^]^]^]ZYZYZYZYUVUVUVUVSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@<;<;<;;;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!   babababa^]^]^]^]ZYZYZYZYUVUVUVUVSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@;;;<;<;<:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!   `_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUVSTSTSTSTOPOPOPOPMNMNMNMNIJIJIJIJEFEFEFEFCDCDCDCD?@?@?@?@;<;<;<;<:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! iijjkkllaabbccdd@AABBCCDA@@??>>=~~}pqqrrsst01122334 BAA;;::9OONNMMLLiijjkkll))**++,,mmnnooppeeffgghhDEEFFGGH=<<;;::9}||{{zzytuuvvwwx45566778 + + 98877665KKJJIIHHmmnnoopp--..//00qqrrssttiijjkkllHIIJJKKL + + 98877665yxxwwvvuxyyzz{{|899::;;< 54433221GGFFEEDD~~}}qqrrsstt11223344 uuvvwwxxmmnnooppLMMNNOOP 54433221uttssrrq|}}~~<==>>??@100//..-CCBBAA@?||{{zzyyuuvvwwxx55667788 + + yyzz{{||qqrrssyyPQQRRSST100//..-qppoonnm@AABBCCD-,,++**)>=<;;::9xxwwvvuuyyzz{{||99::;;<<}}~~zz{{||}}TUUVVWWX-,,++**)mllkkjjiDEEFFGGH)((''&&%98877665ttssrrqq}}~~==>>??@@~~}}~~XYYZZ[[\)((''&&%ihhggffeHIIJJKKL + + %54433221ppoonnmmAABBCCDD||{{zzyy\]]^^__` %$$##""!eddccbbaLMMNNOOP 100//..-llkkjjiiEEFFGGHHxxwwvvuu`aabbccd !!""##$! a``__^^]PQQRRSST-,,++**)hhggffeeIIJJKKLL + + ttssrrqqdeeffggh$%%&&''(]\\[[ZZYTUUVVWWX)((''&&%ddccbbaaMMNNOOPP ppoonnmmhiijjkkl())**++,YXXWWVVUXYYZZ[[\ %$#"! ``__^^]]QQRRSSTTllkkjjiilmmnnoop,--..//0UTTSSRRQ\]]^^__` + + \\[[ZZYYUUVVWWXXhhggffeepqqrrsst01122334 QPPOONNM`aabbccd !!""##$XXWWVVUUYYZZ[[\\ddccbbaatuuvvwwx45566778 + + MLLKKJJIdeeffggh$%%&&''( TTSSRRQQ]]^^__`` ``__^^]]xyyzz{{|899::;;< IHHGGFFEhiijjkkl())**++, + + PPOONNMMaabbccdd!!""##$$\\[[ZZYY|}}~~<==>>??@EDDCCBBAlmmnnoop,--..//0  LLKKJJIIeeffgghh%%&&''((XXWWVVUU@AABBCCDA@@??>>=~~}pqqrrsst01122334 + + HHGGFFEEiijjkkll))**++,,TTSSRRQQ~~}}||~~}}|DEEFFGGH=<<;;::9}||{{zzytuuvvwwx45566778DDCCBBAAmmnnoopp--..//00PPOONNMM{{zzyyss|{{zzyyxHIIJJKKL + + 98877665yxxwwvvuxyyzz{{|899::;;<@@??>>==~~}}qqrrsstt11223344LLKKJJIIrrqqppoowvutssrrLMMNNOOP 54433221uttssrrq|}}~~<==>>??@%%&<<;;::99||{{zzyyuuvvwwxx55667788HHGGFFEEnnmmllkkqqppoonnPQQRRSST100//..-qppoonnm@AABBCCD&''(())* + + 88776655xxwwvvuuyyzz{{||99::;;<>??@@@@??>>==ffeeddcciihhggffXYYZZ[[\)((''&&%ihhggffeHIIJJKKL.//0011200//..--ppoonnmmAABBCCDD<<;;::99bbaa``__eeddccbb\]]^^__` %$$##""!eddccbbaLMMNNOOP23344556,,++**))llkkjjiiEEFFGGHH88776655^^]]WWVVaa``__^^`aabbccd !!""##$! a``__^^]PQQRRSST6778899:((''&&%%hhggffeeIIJJKKLL44332211UUTTSSRR]]\[ZYXWdeeffggh$%%&&''(]\\[[ZZYTUUVVWWX:;;AABBC $$##""!!ddccbbaaMMNNOOPP00//..--QQPPOONNWVVUUTTShiijjkkl())**++,YXXWWVVUXYYZZ[[\CDDEEFFG!!""##$$ ``__^^]]QQRRSSTT,,++**))MMLLKKJJSRRQQPPOlmmnnoop,--..//0UTTSSRRQ\]]^^__`GHHIIJJK%%&&''((\\[[ZZYYUUVVWWXX((''&&%%IIHHGGFFONNMMLLK~~}pqqrrsst01122334 QPPOONNM`aabbccdKLLMMNNO))**++,,XXWWVVUUYYZZ[[\\$$##""!!EEDDCCBBKJJIIHHG}||{{zzytuuvvwwx45566778 + + MLLKKJJIdeeffgghOPPQQRRS--..//00TTSSRRQQ]]^^__`` AA;;::99GFFEEDDCyxxwwvvuxyyzz{{|899::;;< IHHGGFFEhiijjkklSTTUUVVW11223344 PPOONNMMaabbccdd88776655CBBAA@?>uttssrrq|}}~~<==>>??@EDDCCBBAlmmnnoopW]]^^__`55667788 + + LLKKJJIIeeffgghh44332211=<;;::99qppoonnm@AABBCCDA@@??>>=~~}pqqrrsst`aabbccd99::;;<<HHGGFFEEiijjkkll00//..--88776655mllkkjjiDEEFFGGH=<<;;::9}||{{zzytuuvvwwxdeeffggh==>>??@@DDCCBBAAmmnnoopp ,,++**))44332211ihhggffeHIIJJKKL + + 98877665yxxwwvvuxyyzz{{|hiijjkklAABBCCDD@@??>>==~~}}qqrrsstt + + ((''&&%%00//..--eddccbbaLMMNNOOP 54433221uttssrrq|}}~~lmmnnoopEEFFGGHH<<;;::99||{{zzyyuuvvwwxx + + ,,++**))a``__^^]PQQRRSST100//..-qppoonnmpqqrrssyIIJJKKLL + + 88776655xxwwvvuuyyzz{{|| ((''&&%%]\\[[ZZYTUUVVWWX-,,++**)mllkkjjiyzz{{||}MMNNOOPP 44332211ttssrrqq}}~~$#"! YXXWWVVUXYYZZ[[\)((''&&%ihhggffe}~~QQRRSSTT00//..--ppoonnmmUTTSSRRQ\]]^^__` %$$##""!eddccbbaUUVVWWXX,,++**))llkkjjii QPPOONNM`aabbccd !!""##$! a``__^^]YYZZ[[\\((''&&%%hhggffee + + MLLKKJJIdeeffggh$%%&&''(]\\[[ZZY]]^^__`` $$##""!!ddccbbaa!!""##$$ + + IHHGGFFEhiijjkkl())**++,YXXWWVVUaabbccdd!!""##$$ ``__^^]]%%&&''(( +EDDCCBBAlmmnnoop,--..//0UTTSSRRQeeffgghh%%&&''((\\[[ZZYY))**++,, + A@@??>>=~~}pqqrrsst01122334 QPPOONNMiijjkkll))**++,,XXWWVVUU--..//00=<<;;::9}||{{zzytuuvvwwx45566778 + + MLLKKJJImmnnoopp--..//00TTSSRRQQ11223344 + + 98877665yxxwwvvuxyyzz{{|899::;;< IHHGGFFEqqrrsstt11223344 PPOONNMM55667788%%&& 54433221uttssrrq|}}~~<==>>??@EDDCCBBA~~}}|uuvvwwxx55667788 + + LLKKJJII99::;;<<''(())**100//..-qppoonnm@AABBCCDA@@??>>=|{{zzyysyyzz{{||99::;;<<HHGGFFEE==>>??@@++,,--..-,,++**)mllkkjjiDEEFFGGH=<<;;::9srrqqppo~~}}}}~~==>>??@@DDCCBBAAAABBCCDD//001122)((''&&%ihhggffeHIIJJKKL + + 98877665onnmmllk||{{zzyyAABBCCDD@@??>>==~~}}EEFFGGHH33445566 %$$##""!eddccbbaLMMNNOOP 54433221kjjiihhgxwvutssrEEFFGGHH<<;;::99||{{zzyyIIJJKKLL778899:: !!""##$! a``__^^]PQQRRSST100//..-gffeeddcrqqppoonIIJJKKLL + + 88776655xxwwvvuuMMNNOOPP;;AABBCC$%%&&''(]\\[[ZZYTUUVVWWX-,,++**)cbbaa``_nmmllkkjMMNNOOPP 44332211ttssrrqqQQRRSSTTDDEEFFGG())**++,YXXWWVVUXYYZZ[[\)((''&&%_^^]]WWVjiihhggfQQRRSSTT00//..--ppoonnmmUUVVWWXXHHIIJJKK,--..//0UTTSSRRQ\]]^^__` %$$##""!VUUTTSSRfeeddccbUUVVWWXX,,++**))llkkjjiiYYZZ[[\\LLMMNNOO01122334 QPPOONNM`aabbccd !!""##$! RQQPPOONbaa``__^YYZZ[[\\((''&&%%hhggffee]]^^__``PPQQRRSS45566778 + + MLLKKJJIdeeffggh$%%&&''(NMMLLKKJ^]]\[ZYX]]^^__`` $$##""!!ddccbbaaaabbccddTTUUVVWW899::;;< IHHGGFFEhiijjkkl())**++,JIIHHGGFWWVVUUTTaabbccdd!!""##$$ ``__^^]]eeffgghh]]^^__``<==>>??@EDDCCBBAlmmnnoop,--..//0FEEDDCCBSSRRQQPPeeffgghh%%&&''((\\[[ZZYYXXWWVVUUTTSSRRQQ]]^^__``HHIIJJKK%&&''(()\[[ZZYYXUVVWWXXY,++**))(baa``__^mllkkjjiNNOOPPQQ33221100ssrrqqpp~~>>??@@AA%%&&'' +;::99887{zzyyxxwvwwxxyyz6778899: + + KJJIIHHGuttssrrqPPOONNMMaabbccddLLMMNNOO)**++,,-XWWVVUUTYZZ[[\\](''&&%%$^]]WWVVUihhggffeRRSSTTUU//..--,,oonnmmllBBCCDDEE(())**++ + 76655443wvvuuttsz{{||}}~:;;<<==>GFFEEDDC~~}}||{qppoonnmLLKKJJIIeeffgghhPPQQRRSS-..//001TSSRRQQP]^^__``a !$##""!! UTTSSRRQeddccbbaVVWWXXYY++**))((kkjjiihhFFGGHHII,,--..//3221100/srrqqppo~>??@@AABCBBAA@@?{zzyyssrmllkkjjiHHGGFFEEiijjkkllTTUUVVWW12233445 POONNMMLabbccdde!""##$$% QPPOONNMa``__^^]ZZ[[\\]]''&&%%$$ggffeeddJJKKLLMM00112233/..--,,+onnmmllkBCCDDEEF?>>==<<;rqqppoonihhggffeDDCCBBAAmmnnoopp]]^^__``56677889 + + LKKJJIIHeffgghhi%&&''(()MLLKKJJI]\[ZYXWW^^__``aa !!##""!! ccbbaa``NNOOPPQQ44556677+**))(('kjjiihhgFGGHHIIJ +;::99887nmmllkkjeddccbba@@??>>==~~}}qqrrssttaabbccdd9::;;<<=HGGFFEEDijjkkllm)**++,,-IHHGGFFEVVUUTTSSbbccddee""##$$%%__^^]]\\RRSSTTUU8899::;;'&&%%$$#gffeeddcJKKLLMMN + 76655443jiihhggfa``__^^]<<;;::99||{{zzyyuuvvwwxxeeffgghh=>>??@@ADCCBBAA@mnnooppq-..//001EDDCCBBARRQQPPOOffgghhii&&''(())[[ZZYYXXVVWWXXYYAABBCCDD !!"#""!! cbbaa``_NOOPPQQR3221100/feeddccb]\\[[ZZY88776655xxwwvvuuyyzz{{||iijjkkllABBCCDDE@??>>==<~~}}|qrrssttu12233445 A;;::998NNMMLLKKjjkkllmm**++,,--WWVVUUTTZZ[[\\]]EEFFGGHH"##$$%%&_^^]]\\[RSSTTUUV/..--,,+baa``__^YXXWWVVU44332211ttssrrqq}}~~mmnnooppEFFGGHHI <;;::998|{{zzyyxuvvwwxxy56677889 + + 87766554JJIIHHGGnnooppqq..//0011SSRRQQPP^^__``aaIIJJKKLL&''(())*[ZZYYXXWVWWXXYYZ+**))(('^]]WWVVUUTTSSRRQ00//..--ppoonnmmqqrrssyyIJJKKLLM + + 87766554xwwvvuutyzz{{||}9::;;<<=43322110FFEEDDCC~~}}||rrssttuu22334455 OONNMMLLbbccddeeMMNNOOPP*++,,--.WVVUUTTSZ[[\\]]^'&&%%$$#UTTSSRRQQPPOONNM,,++**))llkkjjiizz{{||}}MNNOOPPQ 43322110tssrrqqp}~~=>>??@@A0//..--,BBAA@?>={{zzyyxxvvwwxxyy66778899 + + KKJJIIHHffgghhiiQQRRSSTT.//00112SRRQQPPO^__``aab !!"#""!! QPPOONNMMLLKKJJI((''&&%%hhggffee~~QRRSSTTU0//..--,poonnmmlABBCCDDE,++**))(<;;::998wwvvuuttzz{{||}}::;;<<==GGFFEEDDjjkkllmmUUVVWW]]23344556 ONNMMLLKbccddeef"##$$%%&MLLKKJJIIHHGGFFE$$##""!!ddccbbaaUVVWWXXY,++**))(lkkjjiihEFFGGHHI (''&&%%87766554ssrrqqpp~~>>??@@AACCBBAA@@nnooppqq^^__``aa6778899: + + KJJIIHHGfgghhiij&''(())*IHHGGFFEEDDCCBBA ``__^^]]YZZ[[\\](''&&%%$hggffeedIJJKKLLM + + 43322110oonnmmllBBCCDDEE??>>==<<~~}}||rrssttuubbccddee:;;<<==>GFFEEDDCjkkllmmn*++,,--.EDDCCBBAA@@??>>=\\[[ZZYY]^^__``a !$##""!! dccbbaa`MNNOOPPQ 0//..--,kkjjiihhFFGGHHII ;;::9988{{zzyyxxvvwwxxyyffgghhii>??@@AABCBBAA@@?nooppqqr.//00112A;;::998=<<;;::9XXWWVVUUabbccdde!""##$$% `__^^]]\QRRSSTTU,++**))(ggffeeddJJKKLLMM + + 77665544wwvvuuttzz{{||}}jjkkllmmBCCDDEEF?>>==<<;~~}}||{rssttuuv23344556 8776655498877665TTSSRRQQeffgghhi%&&''(()\[[ZZYYXUVVWWXXY(''&&%%$ccbbaa``NNOOPPQQ33221100ssrrqqpp~~nnooppqqFGGHHIIJ +;::99887{zzyyxxwvwwxxyyz6778899: + + 4332211054433221 PPOONNMMijjkkllm)**++,,-XWWVVUUTYZZ[[\\] #"! __^^]]\\RRSSTTUU//..--,,oonnmmllrrssyyzzJKKLLMMN + 76655443wvvuuttsz{{||}}~:;;<<==>0//..--,100//..- + + LLKKJJIImnnooppq-..//001TSSRRQQP]^^__``a ! + + [[ZZYYXXVVWWXXYY++**))((kkjjiihh{{||}}~~NOOPPQQR3221100/srrqqppo~>??@@AAB,++**))(-,,++**)HHGGFFEEqrrssttu12233445 POONNMMLabbccdde!""##$$%WWVVUUTTZZ[[\\]]''&&%%$$ggffeeddRSSTTUUV/..--,,+onnmmllkBCCDDEEF(''&&%%)((''&&%DDCCBBAA~~}}||uvvwwxxy56677889 + + LKKJJIIHeffgghhi%&&''(() +SSRRQQPP^^__``aa !!##""!! ccbbaa``VWWXXYYZ+**))(('kjjiihhgFGGHHIIJ +%$$##""!@@??>>=={{zzyyssyzz{{||}9::;;<<=HGGFFEEDijjkkllm)**++,,- + OONNMMLLbbccddee""##$$%%__^^]]\\Z[[\\]]^'&&%%$$#gffeeddcJKKLLMMN + ! <<;;::99rrqqppoo~~}}|}~~=>>??@@ADCCBBAA@mnnooppq-..//001 + +KKJJIIHHffgghhii&&''(())[[ZZYYXX^__``aab !!"#""!! cbbaa``_NOOPPQQR + + 88776655nnmmllkk|{{zzyyxABBCCDDE@??>>==<~~}}|qrrssttu12233445 GGFFEEDDjjkkllmm**++,,--WWVVUUTTbccddeef"##$$%%&_^^]]\\[RSSTTUUV 44332211jjiihhggwvutssrrEFFGGHHI <;;::998|{{zzyyxuvvwwxxy56677889CCBBAA@@nnooppqq..//0011SSRRQQPPfgghhiij&''(())*[ZZYYXXWVWWXXYYZ 00//..--ffeeddccqqppoonnIJJKKLLM + + 87766554xwwvvuutyzz{{||}9::;;<<=??>>==<<~~}}||rrssttuu22334455 OONNMMLLjkkllmmn*++,,--.WVVUUTTSZ[[\\]]^ + + + ,,++**))bbaa``__mmllkkjjMNNOOPPQ 43322110tssrrqqp}~~=>>??@@A%%&&' ;;::9988{{zzyyxxvvwwxxyy66778899 + + KKJJIIHHnooppqqr.//00112SRRQQPPO^__``aab !!" +  + + ((''&&%%^^]]WWVViihhggffQRRSSTTU0//..--,poonnmmlABBCCDDE'(())**+ + + 77665544wwvvuuttzz{{||}}::;;<<==GGFFEEDDrssttuuv23344556 ONNMMLLKbccddeef"##$$%%& + +  $$##""!!UUTTSSRReeddccbbUVVWWXXY,++**))(lkkjjiihEFFGGHHI+,,--../33221100ssrrqqpp~~>>??@@AACCBBAA@@~~}}||{{vwwxxyyz6778899: + + KJJIIHHGfgghhiij&''(())* !!""##$$ QQPPOONNaa``__^^YZZ[[\\](''&&%%$hggffeedIJJKKLLM/0011223//..--,,oonnmmllBBCCDDEE??>>==<GFFEEDDCjkkllmmn*++,,--.%%&&''((MMLLKKJJ]]\[ZYXW]^^__``a !$##""!! dccbbaa`MNNOOPPQ34455667++**))((kkjjiihhFFGGHHII ;;::9988qqppoonn~~}}||{~>??@@AABCBBAA@@?nooppqqr.//00112))**++,,IIHHGGFFWVVUUTTSabbccdde!""##$$% `__^^]]\QRRSSTTU78899::;''&&%%$$ggffeeddJJKKLLMM + + 77665544mmllkkjj{zzyyxwvBCCDDEEF?>>==<<;~~}}||{rssttuuv23344556%%&&'--..//00EEDDCCBBSRRQQPPOeffgghhi%&&''(()\[[ZZYYXUVVWWXXY;AABBCCD !!##""!! ccbbaa``NNOOPPQQ33221100iihhggffutssrrqqFGGHHIIJ +;::99887{zzyyxxwvwwxxyyz6778899:'(())**+ 11223344 AA;;::99ONNMMLLKijjkkllm)**++,,-XWWVVUUTYZZ[[\\]DEEFFGGH""##$$%%__^^]]\\RRSSTTUU//..--,,eeddccbbppoonnmmJKKLLMMN + 76655443wvvuuttsz{{||}}~:;;<<==>+,,--../ !!""##$55667788 + + 88776655KJJIIHHGmnnooppq-..//001TSSRRQQP]^^__``aHIIJJKKL&&''(())[[ZZYYXXVVWWXXYY++**))((aa``__^^llkkjjiiNOOPPQQR3221100/srrqqppo~>??@@AAB/0011223$%%&&''(99::;;<<44332211GFFEEDDC~~}}|qrrssttu12233445 POONNMMLabbccddeLMMNNOOP**++,,--WWVVUUTTZZ[[\\]]''&&%%$$]]WWVVUUhhggffeeRSSTTUUV/..--,,+onnmmllkBCCDDEEF34455667())**++,==>>??@@00//..--CBBAA@?>|{{zzyyxuvvwwxxy56677889 + + LKKJJIIHeffgghhiPQQRRSST..//0011SSRRQQPP^^__``aa !!##""!! TTSSRRQQddccbbaaVWWXXYYZ+**))(('kjjiihhgFGGHHIIJ78899::;,--..//0AABBCCDD,,++**))=<;;::99xwwvvuutyzz{{||}9::;;<<=HGGFFEEDijjkkllmTUUVVWW]22334455 OONNMMLLbbccddee""##$$%%PPOONNMM``__^^]]Z[[\\]]^'&&%%$$#gffeeddcJKKLLMMN;AABBCCD01122334EEFFGGHH((''&&%%88776655tssrrqqp}~~=>>??@@ADCCBBAA@mnnooppq]^^__``a66778899 + + KKJJIIHHffgghhii&&''(())LLKKJJII\[ZYXWWV^__``aab !!"#""!! cbbaa``_NOOPPQQRDEEFFGGH45566778IIJJKKLL + + 44332211poonnmmlABBCCDDE@??>>==<~~}}|qrrssttuabbccdde::;;<<==GGFFEEDDjjkkllmm**++,,--HHGGFFEEVUUTTSSRbccddeef"##$$%%&_^^]]\\[RSSTTUUVHIIJJKKL899::;;>??@@AACCBBAA@@nnooppqq..//0011DDCCBBAARQQPPOONfgghhiij&''(())*[ZZYYXXWVWWXXYYZLMMNNOOP<==>>??@QQRRSSTT,,++**))hggffeedIJJKKLLM + + 87766554xwwvvuutyzz{{||}ijjkkllmBBCCDDEE??>>==<<~~}}||rrssttuu22334455 ;;::9988NMMLLKKJjkkllmmn*++,,--.WVVUUTTSZ[[\\]]^PQQRRSST@AABBCCDUUVVWWXX((''&&%%dccbbaa`MNNOOPPQ 43322110tssrrqqp}~~mnnooppqFFGGHHII ;;::9988{{zzyyxxvvwwxxyy66778899 + + 77665544JIIHHGGFnooppqqr.//00112SRRQQPPO^__``aabTUUVVWW]DEEFFGGHYYZZ[[\\ $#"! `__^^]]\QRRSSTTU0//..--,poonnmmlqrrssyyzJJKKLLMM + + 77665544wwvvuuttzz{{||}}::;;<<==33221100FEEDDCCB~~}}||{rssttuuv23344556 ONNMMLLKbccddeef]^^__``aHIIJJKKL]]^^__`` + + \[[ZZYYXUVVWWXXY,++**))(lkkjjiihz{{||}}~NNOOPPQQ33221100ssrrqqpp~~>>??@@AA//..--,,BAA@?>=<{zzyyxxwvwwxxyyz6778899: + + KJJIIHHGfgghhiijabbccddeLMMNNOOPaabbccdd!!""##$$XWWVVUUTYZZ[[\\](''&&%%$hggffeed~RRSSTTUU//..--,,oonnmmllBBCCDDEE++**))((;;::9988wvvuuttsz{{||}}~:;;<<==>GFFEEDDCjkkllmmneffgghhiPQQRRSSTeeffgghh%%&&''(( TSSRRQQP]^^__``a !$##""!! dccbbaa`VVWWXXYY++**))((kkjjiihhFFGGHHII ''&&%%77665544srrqqppo~>??@@AABCBBAA@@?nooppqqrijjkkllmTUUVVWWXiijjkkll))**++,, + + POONNMMLabbccdde!""##$$% `__^^]]\ZZ[[\\]]''&&%%$$ggffeeddJJKKLLMM + + 33221100onnmmllkBCCDDEEF?>>==<<;~~}}||{rssttuuvmnnooppqXYYZZ[[\mmnnoopp--..//00 +LKKJJIIHeffgghhi%&&''(()\[[ZZYYX^^__``aa !!##""!! ccbbaa``NNOOPPQQ//..--,,kjjiihhgFGGHHIIJ +;::99887{zzyyxxwvwwxxyyzqrrssyyz\]]^^__`qqrrsstt11223344 + HGGFFEEDijjkkllm)**++,,-XWWVVUUTbbccddee""##$$%%__^^]]\\RRSSTTUU++**))((gffeeddcJKKLLMMN + 76655443wvvuuttsz{{||}}~z{{||}}~`aabbccduuvvwwxx55667788DCCBBAA@mnnooppq-..//001TSSRRQQPffgghhii&&''(())[[ZZYYXXVVWWXXYY''&&%%$#cbbaa``_NOOPPQQR3221100/srrqqppo~~deeffgghyyzz{{||99::;;<<@??>>==<~~}}|qrrssttu12233445 POONNMMLjjkkllmm**++,,--WWVVUUTTZZ[[\\]] "! _^^]]\\[RSSTTUUV/..--,,+onnmmllkhiijjkkl}}~~==>>??@@%%&& <;;::998|{{zzyyxuvvwwxxy56677889 + + LKKJJIIHnnooppqq..//0011SSRRQQPP^^__``aa !! + + [ZZYYXXWVWWXXYYZ+**))(('kjjiihhglmmnnoopAABBCCDD''(())** + + 87766554xwwvvuutyzz{{||}9::;;<<=HGGFFEEDrrssttuu22334455 OONNMMLLbbccddee""##$$%%WVVUUTTSZ[[\\]]^'&&%%$$#gffeeddcpqqrrsstEEFFGGHH++,,--.. 43322110tssrrqqp}~~=>>??@@ADCCBBAA@~~}}||{vvwwxxyy66778899 + + KKJJIIHHffgghhii&&''(()) + +SRRQQPPO^__``aab !!"#""!! cbbaa``_tuuvvwwxIIJJKKLL//0011220//..--,poonnmmlABBCCDDE@??>>==<{zzyyssrzz{{||}}::;;<<==GGFFEEDDjjkkllmm**++,,--  ONNMMLLKbccddeef"##$$%%&_^^]]\\[xyyzz{{|MMNNOOPP33445566,++**))(lkkjjiihEFFGGHHI <;;::998rqqppoon~~}}||~~>>??@@AACCBBAA@@nnooppqq..//0011 + + KJJIIHHGfgghhiij&''(())*[ZZYYXXW|}}~~QQRRSSTT778899::(''&&%%$hggffeedIJJKKLLM + + 87766554nmmllkkj{{zzyyxwBBCCDDEE??>>==<<~~}}||rrssttuu22334455 GFFEEDDCjkkllmmn*++,,--.WVVUUTTS~~}UUVVWWXX;;AABBCC !$##""!! dccbbaa`MNNOOPPQ 43322110jiihhggfvutssrrqFFGGHHII ;;::9988{{zzyyxxvvwwxxyy66778899CBBAA@@?nooppqqr.//00112SRRQQPPO}||{{zzyYYZZ[[\\DDEEFFGG!""##$$% `__^^]]\QRRSSTTU0//..--,feeddccbqppoonnmJJKKLLMM + + 77665544wwvvuuttzz{{||}}::;;<<==?>>==<<;~~}}||{rssttuuv23344556 ONNMMLLKyxxwwvvuZHAb|ZdQbXQJ`ےfH~rbtlfpvdrtfH~btlfpvrtAdQZ|HAbےfpvp˂rH~fr˂pے`JXQtlJbHAZf`vXJtAdnXv`AJltf`vXJtArdnXv`drt`JXQrnXv`XQJ`ے`vXnZHAbr˂ptArdp˂rnvp|ZdQf~HbdQZ|nvp|ZdQfHAJlt˂pZf~HbHAZvpfے`JXQZHAb|ZdQbXQJ`ےfH~btlfpvdrtfH~btlfpvbdQZ|HAbfpvp˂rH~fr˂pے`JXQtlJbHAXQf`vXJtArdnXv`AJltf`vXJtArdnrXQJ`drtJQr˂pnXv`XQJ`ے`vXnZHAےr˂ptArdJ`ےnvp|ZdQf~HbdQZ|nvp|ZdQےHAAJltZHAbf~HbHAZvpf`JXQrZHAb|ZdQbbHAZpfH~btlfpvdrtfH~btlZp˂drtAے`JXfpvp˂rH~fbtlے`JXQtlJ˂rXQf`vXJtArdnXv`AJltf`vXJtArdrXQJ`JltQr˂pnXv`XQJ`ے`vXnJtAdr˂ptArdJ`ےnvp|ZdQf~HbdQZ|nvp|ZdQbHAbdQZ|ZHAbf~HbHAZvpf|ZdQbZHAb|ZdQbbHAZpfH~btlfpvdrtfH~btlZp˂drtAے`JXfpvp˂rH~ftlJے`JXQtlJ˂bf`vXJtArdnXv`AJltfZHAbJtArdrXQJ`JltQrZHAnXv`XQJ`ے`vXntArdr˂ptArdHAZdnvp|ZdQf~HbdQZ|ے`JX|ZdQbHAbdQZ|lbے`f~HbHAZvpf|ZdQbZHAbf~HrtAJfH~btlfpvdrtQr˂pbtlZp˂tbJXQrfpvdrtAH~ftlJے`JXQXv`fbdQZ|f`vXJtArdnXv`AJltZHAbJtArdrXQJ`nvp`˂pZHAnXv`Jlt`vXntArdr˂p~HfdrtAnvp|ZdQfHbdQZ|ے`JX|ZdQbHAvXnbے`f~HbdQZ|vpf|ZdQbZHAbpvnJltfH~btlfpvdrtQr˂pbtlZp˂vpfHJXQrfpvdrtAH~ftlJے`JXQXv`fbdQZ|f`vXJtArdnrXQJ`AJltZHAbJtArdrXQJ`ۅ~f`˂pZAnXv`Jlt`vXntArdr˂p~HfdrtAnvp|ZdQےHAbdQZ|ے`JX|ZdQbHAvXn`JXQrf~HbdQZ|vpf|ZdQbZHAbpvJltbfH~btlZp˂drtQr˂pbtlZp˂vpfHbtlfpvdrtAH~ftlJے`JXQ~HfpQZdrf`vXJtArdrXQJ`AJltZHAbJtArdrXQJ`ۅ~JtAdnXv`Jlt`vXntArdr˂pvnXtAJlnvp|ZdQbHAbdQZ|ے`JX|ZdQbHAvpfH|ZdQbf~HbdQZ|vpf|ZdQbZHAbv`ftbdQZfH~btlZp˂drtQr˂pbtlZp˂~f`tlJfpvdrtAH~ftlJے`JXQ~Hfp|drfZHAbJtArdrXQJ`AJltZHAbJtArdrXQJ`vXntArdnXv`Jlt`vXntArdr˂pvnXtAJl璙ے`JX|ZdQbHAbdQZ|ے`JX|ZdQbHAvpfH|ZdQbf~HbdQZ|vpf|ZdQbZHAbv`pvtbdQZQr˂pbtlZp˂drtQr˂pbtlZp˂~f`tlJfpvdrtAH~ftlJے`JXQnXv|rAJlZHAbJtArdrXQJ`AJltZHAbJtArdrXQJ`vXH~tArdnXv`Jlt`vXntArdr˂p`f~tbdے`JX|ZdQbHAbdQZ|ے`JXf~HbHAf`vX|ZdQbf~HbdQZ|vpf|ZdQbZHAbHfpvQZ|dQr˂pbtlZp˂drtQr˂pfpvZp˂nvptlJfpvdrtAH~ftlJے`JXQnXvrtAJlZHAbJtArdrXQJ`AJltZHAbnXv`rXQJ`۝fH~tArdnXv`JltZHAbtArdr˂p`f~tbdے`JX|ZdQbHAbdQZ|ے`JXf~HbHAf`vX|ZdQbf~HbdQZ|ے`JXQ|ZdQbZHAbHXv`QZ|dQr˂pbtlZp˂dtAQr˂pfpvZp˂nvptlJfpvdrtAr˂ptlJے`JXQf~HrtAJZHAbJtArdrXQJ`JltZHAbnXv`rXQJ`۝`vXtArdnXv`JltZHAbtArdr˂pfpvbdQZ|ے`JX|ZdQbHAbnvpے`JXf~HbHAnvp|ZdQbfHfbdQZ|ے`JXQ|ZdQbZHAbnXv`drtAQr˂pbtlZp˂fHQr˂pfpvZp˂fH~tlJpvndrtAr˂ptlJے`JXQf~HJltZHAbJtArdrXQJ`f`vXZHAbnXv`rXQJ`f`vXtArdrXQJ`JltZHAbtArdr˂pfpvbdQZ|ے`JX|ZdQbHAnvpے`JXf~HbHAnvp|ZdQbےHAZbdQZ|ے`JXQ|ZdQb|ZdQb~HfdrtAQr˂pbtlZp˂fH~Qr˂pfpvZp˂fH~tlJp˂rdrtAr˂ptlJtlJpvnJltZHAbJtArdrXQJ`f`vXZHAbnXv`rXQJ`ۅvpfHtArdXQJ`ےJltZHAbtArdtArdXv`fbQZdے`JXf~HbHAnvpے`JXf~HbHA~f`|ZdQbbHAZbdQZ|ے`JXQ|ZdQb|ZdQb~HfrtAJlQr˂pfpvZp˂fH~Qr˂pfpvZp˂vXntlJp˂rdrtAr˂ptlJtlJpvntbdQZHAbnXv`rXQJ`f`vXZHAbnXv`rXQJ`ۅvpfHtArdXQJ`ےJltZHAbtArdtArdXv`pZ|dے`JXf~HbHAnvpے`JXf~HbHA~f`|ZdQbbHAZbdQZ|ے`JXQ|ZdQb|ZdQb˂rXQrtAJlQr˂pfpvZp˂fH~Qr˂pfpvZdrtvXHtlJp˂rdrtAr˂ptlJtlJJ`ےtbdQZHAbnXv`rXQJ`f`vXZHAbnXv`AdQZ|~fZHtArdXQJ`ےJltZHAbtArdtArdbHAZpZ|dnے`JXf~HbHAnvpے`JXf~HdrtAAbJ|ZdQbbHAZbdQZ|ے`JXQf~H|ZdQb˂rXQvfQr˂pfpvZp˂fH~Qr˂pfpvJltQr˂ptlJp˂rdrtAr˂pfpvtlJJ`ےf`vXZHAbnXv`rXQJ`f`vXZHAۅnXv`bdQZ|ZHAbtArdXQJ`ےJltZHAbnXv`tArdbHAXQJnvpے`JXf~HbHAnvp`JXQf~HdrtAے`JXQ|ZdQbbHAZbdQZ|ے`JXQf~H|ZdQb`ےbfH~Qr˂pfpvZp˂fH~rbtlfpvJltdr˂ptlJp˂rdtAJr˂pfpvtlJHAZp˂f`vXZHAbnXv`rXQJ`f`vXJtAdnXv`rtAJlZHAbtArdXQJ`ےltbZHAbnXv`tArdrXQJnvpے`JXf~HbHAnvp|ZdQf~Htbdے`JXQ|ZdQbbHAZnvpے`JXQf~H|ZdQb`ےbfH~Qr˂pfpvZp˂fH~btlfpvQZ|drZHAtlJp˂rfHfr˂pfpvtlJHAZp˂f`vXZHAbnXv`rXQJ`f`vXJtArdnXv`rtAJlbے`tArdXQJ`ے`vXnZHAbnXv`tArdbHAnvpے`JXf~HbHAnvp|ZdQf~HtbdJXQr|ZdQbbHAZvpfے`JXQf~H|ZdQbZp˂fH~Qr˂pfpvZdrtfH~btlfpvQZ|lpZHAtlJp˂rH~fr˂pfpvtlJrXQJ`f`vXZHAbnXv`AJltf`vXJtArdnXv`tbdQbے`tArdXQJ`ے`vXnZHAbnXv`tArdےbHAnvpے`JXf~HbdQZ|nvp|ZdQf~HZ|dJXQrf~HbHAZvpfے`JXQf~H|ZdQbZp˂fH~Qr˂pfpvdrtfH~btlfpvrtAJlpZAbfpvp˂rH~fr˂pfpvtlJrXQJ`f`vXZHAۅnXv`AJltf`vXJtArdnXv`tbdQ`JXQrnXv`XQJ`ے`vXnZHAbnXv`tArdp˂rnvp`JXQf~HbdQZ|nvp|ZdQf~HZ|d˂pZf~HbHAZvpfے`JXQf~HfpvnXv`Jlt`vXnbtlQJ`ےJltZHAbArdQJ`ےvXnZHAbvnXbdQZ|vXnrd|J`ےltbHAbےrd|J`ےvpAd|v`ftbdvXnrd|v`ftbd˂pZHpfH~f~HbdQZ|vpfJtArdbHAZpbdQZ|`JXQf~HbHAZpvpfH`JXQv`pvdrtvpfHZdQbtbHAZpdQZ|`JXQrZdQbtbHAZpfH~ZdQbt~HfpQZ|dvpfHZdQbtHfpQZ|dAbے`f۝`vfpvdrtAH~f|ZdQ˂rXdrtAr˂pfpv˂rX~f`r˂pnXv`AJlt~fZlJtA˂rXQdrtAJ˂pZlJtA˂rXQf`vXlJtAvnXrtAJl~f`lJtAvnrXrtAJlJXQHAXnvˍnXv`Jlt`vXnbtlQJ`ےJltZHAbnXv`QJ`ےvXnZHAbۍf~HbdQZ|HAbےrd|J`ےltbHAbےrd|J`ےnvprd|v`ftbdvXnrd|QJ`ےtbdbے`pfH~f~HbdQZ|vpf|ZdQbbHAZpbdQZ|`JXQf~HbHAZpvpfH`JXQfpvrAJl`JXQrZdQbtbHAZpdQZ|`JXQrZdQbtbHAZpfH~ZdQbt~HfpQZ|dvpfHZdQbtHAZpQZ|dJXQrːf۝`vfpvdrtAH~ftlJ˂rXdtAJlr˂pfpv˂rX~f`r˂pnXv`tbdQ˂pZlJtA˂rXQdrtAJ˂pZlJtA˂rXQf`vXlJtAvnXrtAJl~f`lJtArXQrtAJlpZHAXnvˍnXv`Jlt`vXntArdQJ`ےtbZHAbnXv`QJ`ےvXnZHAbۍf~HZ|dHAbےrd|J`ےltbHAbےrdfJ`ےH~frd|v`ftbdvXnrd|J`ےtbdbے`pfH~f~HbdQZ|vpf|ZdQbbHAZpnvp`JXQf~HbHAZpvpfH`JXQXv`rtAJl`JXQrZdQbtbHAZpdQZ|`JXQr~HfbHAZp`vXnZdQbt~HfpQZ|dvpfHZdQbtbHAZpQZ|dJXQrːf۝`vfpvdrtAH~ftlJ˂rXfHf`r˂pfpv˂rX~f`r˂pf~HtbdQ˂pZlJtA˂rXQdrtAJ˂pZpvn˂rXQvpflJtAvnXrtAJl~fZHlJtArXQrtAJlp`JXXnvˍnXv`Jlt`vXntArdtQJ`ےvXnZHAbnXv`QJ`ےvXnZHAے`fpvZ|dHAbےrd|J`ےltbHAbےXv`fJ`ےH~frd|v`ftbdAbے`rd|J`ےtbdQr˂ppfH~f~HbdQZ|vpflJtAbHAZpvpfH`JXQf~HbHAZpvpfHJXQrnXv`rtAJ`JXQrZdQbtbHAZpdQZ|`JXQr~HfbHAZp`vXnZdQbt~HfpQZ|dJXQrZdQbtbHAZpQZ|dZHAbf۝`vfpvdrtAH~frd|˂rX~f`r˂pfpv˂rX~f`btlf~HbdQZ|˂pZlJtA˂rXQdtAJl˂pZpvn˂rXQvp`lJtAvnXrtAJl˂pZHlJtArXQrtAJlے`JXXnvˍnXv`Jlt`vXnZdQbtQJ`ےvXnZHAbnXv`QJ`ےvXnJtAd|fpvdrtAHAbےrd|J`ےtbnHAbےXv`fJ`ےvXnrd|v`ftbdAbے`rd|J`ےtbdQr˂ppfH~f~HbdQZ|vpflJtAbHAZpvpfH`JXQf~HbHAZpvpfHZdQbt~HfpJlt`JXQrZdQbtbHAZpvpf`JXQr~HfbHAZpvpfHZdQbtHfpQZ|dJXQrZdQbtbHAZpQZ|dZHAbf۝`vfpvdrtAH~frd|˂rX~f`r˂pfpv˂rX~f`lJtvnXbdQZ|˂pZlJtA˂rXQHf`˂pZpvn˂rXQ~f`lJtAvnrXrtAJl˂pZHlJtArXQrtAJl˂pXnvˍnXv`JltZHAbZdQtArQJ`ےvXnZHAbnXv`QJ`ےvXnArd|v`fdrtAHAbےrd|J`ےvXnHAbےXv`fJ`ےvXnrd|QJ`ےtbdAbے`rd|J`ےtbdZHAbpfH~f~HbdQZ|˂pZdfbHAZpvpfH`JXQf~HbHAZvpfHZdQbt~HfpJltb`JXQrZdQbtbHAZpvpfH`JXQr~HfbHAZpvpfHZdQbtHAZpQZ|dJXQrZdQbtbHAZpQZ|d`JXQf۝`vfpvdrtAHAbے~Hfv˂rX~f`r˂pfpvdrtA~f`lJtvnXQZdr˂pZlJtA˂rXQ~f`˂pZpvn˂rXQ~vlJtArXQrtAJl˂pZHlJtArXQtAJlr˂pXnvˍnXv`Jlt`JXQrnXv`QJ`ےvXnZHAbnXv`JltvXnArd|v`ptAJlHAbےrdfJ`ےvXnHAbےXv`fJ`ےpfH~rd|J`ےtbdAbے`rd|J`ےtbnZHAbpfH~fHfbdQZ|˂pZf~HbHAZpvpfH`JXQf~HbdQZ|vpfHZdQbtvnrXtbdQZ`JXQr~HfbHAZpvpfH`JXQr~HfbHAZpf`vZdQbtbHAZpQZ|dJXQrZdQbtbHAZp˅vpfH`JXQHf۝`vpvndrtAHAbےfpv˂rX~f`r˂pfpvdrtA~f`lJtQJ`p|dr˂pZpvn˂rXQ~f`˂pZpvn˂rXQXnvlJtArXQrtAJl˂pZHlJtArXQf`Abے`XnvˍrXQJ`Jlt`JXQHAnXv`QJ`ےvXnZHAے`nXv`JltvXnArd|rXQtAJlHAbےXv`fJ`ےvXnHAbےXv`fJ`ےpfH~rd|J`ےtbdAbے`rd|J`ےvXnہJXQrpfH~ےHAZbdQZ|bے`f~HbHAZpvpfHJXQrf~HbdQZ|vpfHZdQbtJ`ےtbdQZ`JXQr~HfbHAZpvpfH`JXQr~HfbHAZf`vZdQbtbHAZpQZ|dJXQrZdQbtbHAZpvpfH˂pZHf۝`vp˂rdrtAJXQrfpvn˂rX~f`btlfpvdrtA~f`lJtbHAZp|AJl˂pZpvn˂rXQ~f`˂pZpvndrtAdQXH~lJtArXQrtAJl˂pZHlJtArXQ~f`Abے`XnvˍXQJ`ےJlt˂pZHAvf~QJ`ےvXnJtAd|nXv`JltvXnArd|rXQtbnHAbےXv`fJ`ےvXnHAbےXv`fZ|dfZHAbrd|J`ےtbdAbے`rdfJ`ےvXnہJXQrpfH~ㅐbHAZbdQZ|bے`HfpvbHAZpvpfHZdQbtf~HbdQZ|vpfHZdQbtJ`ے々vpf`JXQr~HfbHAZpvpfH`JXQr~HfrtAJlJQrZdQbtbHAZpQZ|dJXQr~HfpbHAZpvpfH˂p`Zf۝`vp˂rdrtAJXQrnXv˂rX~f`lJtfpvdrtA~f`lJtbHAXQJ`Hf`˂pZpvn˂rXQ~f`˂pZpvntbdQ˂pZHlJtArXQrtAJl˂pZHvnXrXQ~f`QXb㉀XnvˍXQJ`ےJlt˂p`J`f~QJ`ےvXnArd|nXv`JltvXnArd|ےbHvXnHAbےXv`fJ`ےvXnHAے`Xv`fZ|dAbے`rd|J`ےtbdAbے`v`fJ`ےvXnۑpJAHrp|drbHAZbdQZ|XQr˂HfpvbHAZvpfHZdQbtf~HbdQZ|vpfHZdQbtAZp˂vpfH`JXQr~HfbHAZpvpfHJXQrb~HfrtAJlJXQrZdQbtbHAZpQZ|dJXQr~HfpbHAZpvpfH󙐂ˁ`ZQtJlp˂rdrtApZHAbnXvdrtA~f`lJtfpvdrtA~f`lJtrXQJ`~f`˂pZpvn˂rXQ~f`tlJpvntdr˂pZHlJtArXQtAJl˂pZHvnXrXQ~f`QXb㉀tbAdZXQJ`ےJltے`J`f~fpJltvXnArd|nXv`JltvXnArd|ےbHvXnHAbےXv`fJ`ےvXntAd|Xv`ftAJlAbے`rd|J`ےtbnAbے`v`fJ`ےvXnۑpJAHr|drbHAZbdQZ|XQr˂vnXbdQZ|vpfHZdQbtf~HbdQZ|vpfHZdQbtAZp˂vpfH`JXQr~HfbHAZpvpfHZdQbt~HftbdQZJXQrZdQbtbHAZp˅vpfHJXQr~HfpbHAZpvpfH󙐉ۑQtJlp˂rdrtApZHAbv`fdrtA~f`lJtfpvdrtA~flJtbHA~f`˂pZpvn˂rXQ~f`lJtApvn|drZHAblJtArXQf`˂pZHvnXrXQ~f`pJAHrtbAdZXQJ`ےJlt˂p~HfpJltvXnArd|nXv`JltZHAbArd|Zp˂vXnHAbےXv`fJ`ےvXnrd|Xv`ftAJlے`JXQrd|J`ےvXnAbے`v`fJ`ےvXnېˁ`ZQ|drbHAZbdQZ|ZHAbvnXbdQZ|vpfHZdQbtf~HbdQZ|`JXQZdQbtrXQJ`vpfH`JXQr~HfbHAZvpfHZdQbt~HftbdQZr˂pZdQbtbHAZpvpfHJXQr~HfpbHAZpvpfHXb㉀ۑQtJlp˂rdtAJے`JXQv`fdrtA~f`lJtfpvdrtAr˂plJtbHA~f`˂pZpvndrtAJ~f`lJtApvn|ltZHAblJtArXQ~f`˂pZHvnXrXQ~f`pJAHrtbAdZXQJ`ےltbr˂p~HfvJltvXnArd|nXv`JltZHAbArd|Zp˂vXnHAbےXv`fltbvXnrd|Xv`fbdQZ|ے`JXQrdfJ`ےvXnAbے`v`fJ`ےvXnېˁ`ZQ|drbHAZnvpZHAbnXv`bdQZ|vpfHZdQbtfHfpbdQZ|`JXQZdQbtrXQJ`pvpfH`JXQr~HfdQZ|vpfHZdQbt~HfdrtAr˂p~HfpbHAZpvpfHJXQr~HfpbHAZpvpfHXAHr󙐂QtJlp˂rfHfے`JXQf~HdrtA~f`lJtvndrtAr˂plJt˂rX~f`˂pZpvndrtAJ~f`lJtApvnJltZAb`vnXrXQ~f`˂pZHvnXrXQ~f`ˁ`ZQXbtbAdZXQJ`ے`vXnHAbےfpvJltvXnArd|rXQJ`JltZHAbArd|QJ`ےvXnHAے`Xv`fltbvXnrd|Xv`fbdQZ|JXQr˕v`fJ`ےvXnAbے`v`fJ`ےvXn㉀ۑpJ|drbHAZvpf`JXQrnXv`bdQZ|vpfHZdQbtHAZpbdQZ|`JXQZdQbtbHAZpvpfHJXQrb~HfdQZ|vpfHZdQbt~HfdrtApZHA~HfpbHAZpvpfHJXQr~HfpbHAZdvpfHAHr󙐂QtJlp˂rH~f˂pZf~HdrtA~f`lJt˂rXdrtAr˂plJt˂rX~f`tlJpvndrtAJ~f`lJtApvndQZ|bے`vnXrXQ~f`˂pZHvnXrtAJl~f`ˁ`ZQXbtbAdZXQJ`ے`vXnHAbےfpvJltvXnArd|QJ`ےJltZHAbArd|QJ`ےvXntAd|Xv`fltbvXnrd|Xv`fdrtAJJXQr˕v`fJ`ےvXnAbے`v`ftbdvXn㉀ۑp|drbHAZvpf`JXQrnvfbdQZ|vpfHZdQbtbHAZpbdQZ|`JXQZdQbtbHAXQvpfHZdQbt~HfdQZ|vpfHZdQbtHfpltbpZHA~HfpbHAZpvpfHJXQr~HfpQZ|dvpfH`ZQXbQtJlp˂rH~f˂p`~HfpۂdrtA~flJt˂rXdrtAr˂plJtJ`ے~f`lJtApvndrtAJ~f`lJtAvnrdQZ|bJQrvnXrXQ~f`˂pZHvnXrtAJl~f`ۑpJAtbAdZXQJ`ے`vXnJXQrbvnXJltZHAbArd|QJ`ےJltZHAbArd|bHAZpvXnrd|Xv`fltbvXnrd|XQJ`ےdrtAJ˂pZv`fJ`ےvXnAے`v`ftbdvXnHr󙐂ˁ|drbHAZvpftl|v`fbdQZ|`JXQZdQbtbHAZpbdQZ|`JXQZdQbtrXQvpfHZdQbt~HfdQZ|vpfHZdQbtHAZpltdHAbے~HfpbHAZpvpfHJXQrbt~HfpQZ|dvpfH`ZQXbQtJlp˂rH~fZdQbt~HfpۂdrtAr˂plJt˂rXdrtAr˂plJtJ`ے~f`lJtApvndrtAJ~f`lJtA˂rXQrtAJl`JXQrvnXrXQ~f`lJtvnXrtAJl~f`ۑpJAtbAdZXQJ`ے`vXnlJtAvnXJltZHAbArd|QJ`ےJltZHAbArdbHAZpvXnrd|Xv`fltbvXnrd|J`ےtbdQ˂pZv`fJ`ےvXnAd|v`ftbdvXnHr󙐉|drbHAZvpfrd|v`ffpbdQZ|`JXQZdQbtbHAZpbdQZ|`JXQf~HXbHvpfHZdQbt~HfdQZ|vpfHZdQbtbHAZpZ|dHAbے~HfpbHAZpvpfHZdQbt~HfpQZ|dvpfHۑpJAHrQtJlp˂rH~fZdQbtvndrtAr˂plJt˂rXdrtAr˂pv`fAZd~f`lJtApvndrtAJ~fZlJtA˂rXQrtAJl`JXQrvnXrXQ~f`lJtAvnXrtAJl~f`󙐂ˁ`ZtbAdZXQJ`ے`vXnlJtArXQJ`JltZHAbArd|QJ`ےJltZHAbە~HfprtAJbvXnrd|Xv`fltbHAbےrd|J`ےtbdQZHAbv`fJ`ےvXnrd|v`ftbdvXnQXb㉀|drbHAZvpfrdt璒HAZpbdQZ|`JXQZdQbtbHAZpbdQZ|`JXQvnXdQZ|vpfHZdQbt~HfdQZ|`JXQrZdQbtbHAZpZ|l璙ے`JX~HfpbHAZdvpfHZdQbt~HfpQZ|dvpfHۑpJAHrQtJlp˂rH~flJtAr˂rXdrtAr˂plJt˂rXdtAJlr˂pv`fdrtAJ~f`lJtApvndrtAJ˂pZlJtA˂rXQtbnQr˂pvnXrtAJl~f`lJtAvnXrtAJl~f`󙐂ˁ`tbAdZXQJ`ے`vXnd|ZQJ`ےJltZHAbArd|QJ`ےtbZHAbە~HfpltbvXnrd|Xv`fltbHAbےrd|J`ےvp`vZHAbv`ftbdvXnrd|v`ftbdvXnpfH~|drbHAZvpfdQbt璙bHAZpbdQZ|`JXQZdQbtbHAZpnvp`JXQvdQZ|vpfHZdQbtHfpdQZ|`JXQrZdQbtbHAZpXnvے`JX~HfpQZ|dvpfHZdQbt~HfpQZ|dvpfHf۝`vQtJlp˂rH~flJtAr˂rXdrtAr˂plJt˂rXfHf`r˂p~HfpdrtAJ~f`lJtAvnrdrtAJ˂pZlJtA˂rXQpfH~Qr˂pvnXrtAJl~f`lJtAvnXrtAJl~frXnvˍtbAdZXQJ`ے`vXnd|ZQJ`ےJltZHAbArd|QJ`ےvXnZHAbvnXltbQvXnrd|XQJ`ےltbHAbےrd|J`ےf`vZA`v`ftbdvXnrd|v`ftbd˂pZHpfH~|drbHAZvpfdQtArdbHAZpbdQZ|`JXQZdQbtbHAZpvpfH`JXQv`fZdrtvpfHZdQbtHAZpdQZ|`JXQrZdQbtbHAZpXnvJXQrbt~HfpQZ|dvpfHZdQbt~HfpQZ|dAbے`f۝`vQtJldrtAH~f|ZdQ˂rXdrtAr˂plJt˂rX~f`r˂p~HfpAJlt~f`lJtA˂rXQdrtAJ˂pZlJtA˂rXQpfH~lJtvnXrtAJl~f`lJtAvnXrtAJlJXQrXnvˍtbAdZ|.........................................................../ \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv34_3.dat b/vendor/endroid/qr-code/assets/data/qrv34_3.dat new file mode 100644 index 000000000..a9e264c6a --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv34_3.dat @@ -0,0 +1,305 @@ +{|{|{|{|yzyzyzyzwxwxwxwvtststsssrqrqrqrqnmnmnmnmlklklklkjijijijifefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[WXWXWXWX{|{|{|{|yzyzyzyzuvuvuvuvssstststrqrqrqrqnmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[WXWXWXWX{|{|{|{|yzyzyzyzuvuvuvuvststststpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[WXWXWXWX{|{|{|{|yzyzyzyzuvuvuvuvststststpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[WXWXWXWX{|{|{|{|yzyzyzyzuvuvuvuvststststpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[ZYWXWXWWWW{|{|{|{|yzyzyzyzuvuvuvuvststststpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYWWXWXWXW{|{|{|{|yzyzyzyzuvuvuvuvststststpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXW{|{|{|{|yzyzyzyzuvuvuvuvsssssstspopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXW{|{|{|{|yzyzyzyzuvuvuvuvtstststspopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXW~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvtstststspopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXW}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvtstststspopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXW}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvtstststspopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYWWWWWXWX}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvtstststspopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYWXWXWXWX}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvtstssssspopopoponmnmnmnmlklklklkhghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYWXWXWXWX}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvtstststspopopoponmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYWXWXWXWX}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYWXWXWXWX}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYWXWXWXWX}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYWXWWWWWX}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYWXWXWXWV}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUV}~}~}~}~{|{|{|{|yzyzyzyzuvuvuvuvrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUV}~}~}~}~{|{|{|{|yxwxwxwxuvuvuvuvrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUV}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUV}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUV}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZYUVUVUVUV}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_\[\[\[\[ZYZYZYZYUVUVUVUV}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvrqrqrqrqpopopoponmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYUVUVUVUV}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvrqrqrqrqpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYUVUVUVUV}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvrqrqrqrqpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYUVUVUVUV}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvrqrqrqrqpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYUVUVUVUV}~}~}~}~{|{|{|{|wxwxwxwxuvuvuvuvrqrqrqrqpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYUVUVUVUV}~}~}~}~{|{|{|{|wxwxwxwxuvuvutstrqrqrqrqpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYUVUVUVUV}~}~}~}~{|{|{|{|wxwxwxwxststssssrqrqrqrqpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYUVUVUVUV}~}~}~}~{|{|{|{|wxwxwxwxsstststsrqrqrqrqpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYUVUVUVUV}~}~}~}~{zyzyzyzwxwxwxwxtstststsrqrqrqrqpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYUVUVUVUV}~}~}~}~yzyzyzyzwxwxwxwxtstststsrqrqrqrqpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYXWXWUVUVUVUV}~}~}~}~yzyzyzyzwxwxwxwxtstststsrqrqrqrqpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[XWXWWWWWUVUVUVUV}~}~}~}~yzyzyzyzwxwxwxwxtstststsrqrqrqrqpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_\[\[\[\[WXWXWXWXUVUVUVUV}~}~}~}~yzyzyzyzwxwxwxwxtstststsrqrqrqrqpopopopolklklklkjijijijihghghghgdcdcdcdcbabababa^]^]^]^]\[\[\[\[WXWXWXWXUVUVUVUV}~}~}~}~yzyzyzyzwxwxwxwxssssststrqrqrqrqpopopopolklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[WXWXWXWXUVUVUVUV}~}~}~}~yzyzyzyzwxwxwxwxststststrqrqrqrqnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[WXWXWXWXUVUVUVUV}~}~}~}~yzyzyzyzwxwxwxwxststststrqrqrqrqnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[WXWXWXWXUVUVUVUV}~}~}~}~yzyzyzyzwxwxwxwxststststrqrqrqrqnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[WXWXWXWWUVUVUVUV}~}~}~}~yzyzyzyzwxwxwxwxststststrqrqrqrqnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[WWWWXWXWUVUVUVUV}~}~}~}~yzyzyzyzwxwxwxwxststststrqrqrqrqnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[XWXWXWXWUVUVUVUVUVUVUVUV}~}~}~}~yzyzyzyzwxwxwxwxstssssssrqrqrqrqnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[XWXWXWXWUVUVUVUVUVUVUVUV}~}~}~}~yzyzyzyzwxwxwxwxtstststsrqrqrqrqnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[XWXWXWXWUVUVUVUVUVUVUVUV}|{|{|{|yzyzyzyzwxwxwxwxtstststsrqrqrqrqnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[XWXWXWXWUVUVUVUVUVUVUVUV{|{|{|{|yzyzyzyzwxwxwxwxtstststsrqrqrqrqnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[XWXWXWXWUVUVUVUVUVUVUVUV{|{|{|{|yzyzyzyzwxwxwxwxtstststsrqrqrqrqnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[XWWWWWWXUVUVUVUVUVUVUVUT{|{|{|{|yzyzyzyzwxwxwxwxtstststsrqrqrqrqnmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[WXWXWXWXUVUVUVUVSTSTSTSTSTSTSTSTQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@<;<;<;<;:9:9:9:9656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)('&%&%&%&%$#$#$#$#         + + + +STSTSTSTQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?>=><;<;;;;;:9:9:9:965656565434343432121210/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +STSTSTSTQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<:9:9:98765656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +STSTSTSTQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#         + + + +STSTSTSTQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#       + + + +STSTSTSTQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#"!"!  + + + +STSTSTSTQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;<8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + +STSTSTSTQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;<;<;<;;8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + +STSTSTSTQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB=>=>=>=>;;;;<;<;8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + +STSTSTSTQRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGFCDCDCDCDABABABAB=>=>=>=><;<;<;<;8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + +STSTSTSTQRQRQRQROPOPOPONKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=><;<;<;<;8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + +STSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=><;<;<;<;8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + +STSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=><;<;<;<;8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + +STSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=><;<;<;<;8787878765656565434343430/0/0/0/.-.-.-.-,+,+,+*)('('('('&%&%&%&%"!"!"!"!     + + + +STSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=><;;;;;<;8787878765656565434343210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +STSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=><;<;<;:98787878765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +STSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +STSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!      + + + +STSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!       + + + +STSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!       + + + +STSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABAB=>=>=>=>:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +STSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIJEFEFEFEFCDCDCDCDABABABA@=>=>=>=>:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +STSTSTSTQRQRQRQRMNMNMNMNKLKLKLKLIJIJIJIHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +STSTSTSTQRQRQRQPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +STSTSTSTOPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + +STSTSTSTOPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%$#"!"!"!"!     + + + +STSTSTSTOPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>:9:9:9:98787878765656565212121210/0/0/0/.-.-.-,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +STSTSTSTOPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>:9:9:9:98787878765656543212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +STSTSTSTOPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>:9:9:9:98787878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + +STSTSTSTOPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>:9:9:9:98787878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + STSTSTSTOPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>:9:9:9:98787878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     STSTSTSTOPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=>=>=>:9:9:9:98787878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     STSTSTSTOPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@=>=<;<;<:9:9:9:98787878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     STSTSTSTOPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCD?@?@?@?@;<;;;;;;:9:9:9:98787878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     STSTSTSTOPOPOPOPMNMNMNMNKLKLKLKLGHGHGHGHEFEFEFEFCDCDCDCB?@?@?@?@<;<;<;<;:9:9:9:98787878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     STSTSTSTOPOPOPOPMNMNMNMNKLKLKLKJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@<;<;<;<;:9:9:9:98787878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!     STSTSTSROPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@<;<;<;<;:9:9:9:98787878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!        QRQRQRQROPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@<;<;<;<;:9:9:9:98787878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#       QRQRQRQROPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@<;<;<;<;:9:9:9:98787878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('&%$#$#$#$#         QRQRQRQROPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@<;<;<;;;:9:9:9:98787878743434343212121210/0/0/.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         QRQRQRQROPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;;;<;<;<:9:9:9:9878787654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         QRQRQRQROPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<:9:9:9:9656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         QRQRQRQROPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<:9:9:9:9656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + +QRQRQRQROPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<:9:9:9:9656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#       + + + +QRQRQRQROPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<:9:9:9:9656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + +QRQRQRQROPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;<;<;<;<:9:9:9:9656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +QRQRQRQROPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEFABABABAB?@?@?@?@;;;;;;<;:9:9:9:9656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +QRQRQRQROPOPOPOPMNMNMNMNIJIJIJIJGHGHGHGHEFEFEFEDABABABAB?@?@?@?@<;<;<;<;:9:9:9:9656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +QRQRQRQROPOPOPOPMNMNMNMLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@<;<;<;<;:9:9:9:9656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +QRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@<;<;<;<;:9:9:9:9656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#         + + + +QRQRQRQROPOPOPOPKLKLKLKLIJIJIJIJGHGHGHGHCDCDCDCDABABABAB?@?@?@?@<;<;<;<;:9:9:9:9656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#       + + + +EEFFGGHH + + 88776655<==>>??@)((''&&%@AABBCCD%$$##""!DEEFFGGHCCBBAA@?--..//0088776655112233444433221155667788SRRQQPPOIIJJKKLL44332211@AABBCCD%$$##""!DEEFFGGH! HIIJJKKL >=<;;::911223344443322115566778800//..--99::;;<<ONNMMLLKMMNNOOPP00//..--DEEFFGGH! HIIJJKKL~~}LMMNNOOP + + 988776655566778800//..--99::;;<<,,++**))==>>??@@ KJJIIHHGQQRRSSTT,,++**))HIIJJKKL~~}LMMNNOOP}||{{zzyPQQRRSST 5443322199::;;<<,,++**))==>>??@@((''&&%%AABBCCDD + + GFFEEDDCUUVVWWXX((''&&%%~~}LMMNNOOP}||{{zzyPQQRRSSTyxxwwvvuTUUVVWWX100//..-==>>??@@((''&&%%AABBCCDD$$##""!!EEFFGGHHCBBAA@?>YYZZ[[\\%%&&$#"! }||{{zzyPQQRRSSTyxxwwvvuTUUVVWWX uttssrrqXYYZZ[[\-,,++**)AABBCCDD$$##""!!EEFFGGHH IIJJKKLL =<;;::99~~}}]]^^__``''(())**yxxwwvvuTUUVVWWX uttssrrqXYYZZ[[\ + + qppoonnm\]]^^__`)((''&&%EEFFGGHH IIJJKKLL~~}}MMNNOOPP + + 88776655||{{zzyyaabbccdd++,,--..uttssrrqXYYZZ[[\ + + qppoonnm\]]^^__` mllkkjji`aabbccd%%&%$#"! IIJJKKLL~~}}MMNNOOPP||{{zzyyQQRRSSTT44332211xxwwvvuueeffgghh//001122qppoonnm\]]^^__` mllkkjji`aabbccdihhggffedeeffggh&''(())*~~}}MMNNOOPP||{{zzyyQQRRSSTTxxwwvvuuUUVVWWXX00//..--ttssrrqqiijjkkll33445566mllkkjji`aabbccdihhggffedeeffggheddccbbahiijjkkl*++,,--.||{{zzyyQQRRSSTTxxwwvvuuUUVVWWXX ttssrrqqYYZZ[[\\,,++**))ppoonnmmmmnnoopp778899:: +ihhggffedeeffggheddccbbahiijjkkla``__^^]lmmnnoop.//00112xxwwvvuuUUVVWWXX ttssrrqqYYZZ[[\\ + + ppoonnmm]]^^__``((''&&%%llkkjjiiqqrrsstt;;AABBCC + eddccbbahiijjkkla``__^^]lmmnnoop + + ]\\[[ZZYpqqrrsst23344556ttssrrqqYYZZ[[\\ + + ppoonnmm]]^^__``llkkjjiiaabbccdd%%&&$#"! hhggffeeuuvvwwxxDDEEFFGGa``__^^]lmmnnoop + + ]\\[[ZZYpqqrrsst YXXWWVVUtuuvvwwx6778899: ppoonnmm]]^^__``llkkjjiiaabbccddhhggffeeeeffgghh''(())**ddccbbaayyzz{{||HHIIJJKK + + ]\\[[ZZYpqqrrsst YXXWWVVUtuuvvwwxUTTSSRRQxyyzz{{|:;;AABBC + + llkkjjiiaabbccddhhggffeeeeffgghhddccbbaaiijjkkll++,,--..``__^^]]}}~~LLMMNNOO YXXWWVVUtuuvvwwxUTTSSRRQxyyzz{{|QPPOONNM|}}~~CDDEEFFGhhggffeeeeffgghhddccbbaaiijjkkll``__^^]]mmnnoopp//001122\\[[ZZYYPPQQRRSSUTTSSRRQxyyzz{{|QPPOONNM|}}~~MLLKKJJIGHHIIJJKddccbbaaiijjkkll``__^^]]mmnnoopp + + \\[[ZZYYqqrrsstt33445566XXWWVVUUTTUUVVWWQPPOONNM|}}~~MLLKKJJI IHHGGFFEKLLMMNNO``__^^]]mmnnoopp + + \\[[ZZYYqqrrsstt XXWWVVUUuuvvwwxx778899:: +TTSSRRQQ]]^^__``MLLKKJJI IHHGGFFE !!""##$EDDCCBBAOPPQQRRS + + \\[[ZZYYqqrrsstt XXWWVVUUuuvvwwxxTTSSRRQQyyzz{{||;;AABBCC + PPOONNMMaabbccdd IHHGGFFE !!""##$EDDCCBBA$%%&&''(A@@??>>=STTUUVVW XXWWVVUUuuvvwwxxTTSSRRQQyyzz{{||PPOONNMM}}~~DDEEFFGGLLKKJJIIeeffgghh !!""##$EDDCCBBA$%%&&''(A@@??>>=())**++,=<<;;::9W]]^^__`TTSSRRQQyyzz{{||PPOONNMM}}~~LLKKJJIIHHIIJJKKHHGGFFEEiijjkkll$%%&&''(A@@??>>=())**++,=<<;;::9,--..//098877665`aabbccdPPOONNMM}}~~LLKKJJII HHGGFFEELLMMNNOO DDCCBBAAmmnnoopp())**++,=<<;;::9,--..//0988776650112233454433221deeffgghLLKKJJII HHGGFFEE!!""##$$DDCCBBAAPPQQRRSS + + @@??>>==qqrrssyy,--..//098877665011223345443322145566778100//..-hiijjkkl HHGGFFEE!!""##$$DDCCBBAA%%&&''((@@??>>==TTUUVVWW <<;;::99zz{{||}}011223345443322145566778100//..-899::;;<-,,++**)lmmnnoop!!""##$$DDCCBBAA%%&&''((@@??>>==))**++,,<<;;::99]]^^__``88776655~~45566778100//..-899::;;<-,,++**)<==>>??@)((''&&%pqqrrssy%%&&''((@@??>>==))**++,,<<;;::99--..//0088776655aabbccdd44332211899::;;<-,,++**)<==>>??@)((''&&%@AABBCCD%$$##""!yzz{{||}))**++,,<<;;::99--..//00887766551122334444332211eeffgghh00//..--~~}}||<==>>??@)((''&&%@AABBCCD%$$##""!DEEFFGGH! ~~}}|}~~--..//008877665511223344443322115566778800//..--iijjkkll !,,++**)){{zzyyss@AABBCCD%$$##""!DEEFFGGH! HIIJJKKL|{{zzyys11223344443322115566778800//..--99::;;<<,,++**))mmnnoopp!""##$$%((''&&%%rrqqppooDEEFFGGH! HIIJJKKL~~}LMMNNOOPsrrqqppo5566778800//..--99::;;<<,,++**))==>>??@@((''&&%%qqrrssyy%&&''(()$$##""!!nnmmllkkHIIJJKKL~~}LMMNNOOP}||{{zzyPQQRRSSTonnmmllk99::;;<<,,++**))==>>??@@((''&&%%AABBCCDD$$##""!!zz{{||}})**++,,- jjiihhggLMMNNOOP}||{{zzyPQQRRSSTyxxwwvvuTUUVVWWX kjjiihhg==>>??@@((''&&%%AABBCCDD$$##""!!EEFFGGHH ~~}}||~~-..//001ffeeddccPQQRRSSTyxxwwvvuTUUVVWWX uttssrrqXYYZZ[[\ + + gffeeddcAABBCCDD$$##""!!EEFFGGHH IIJJKKLL{{zzyyss12233445bbaa``__TUUVVWWX uttssrrqXYYZZ[[\ + + qppoonnm\]]^^__` cbbaa``_EEFFGGHH IIJJKKLL~~}}MMNNOOPPrrqqppoo56677889^^]]WWVVXYYZZ[[\ + + qppoonnm\]]^^__` mllkkjji`aabbccd_^^]]WWVIIJJKKLL~~}}MMNNOOPP||{{zzyyQQRRSSTTnnmmllkk9::;;<<= UUTTSSRR\]]^^__` mllkkjji`aabbccdihhggffedeeffgghVUUTTSSRMMNNOOPP||{{zzyyQQRRSSTTxxwwvvuuUUVVWWXX jjiihhgg=>>??@@A + + QQPPOONN~~}}|`aabbccdihhggffedeeffggheddccbbahiijjkklRQQPPOONQQRRSSTTxxwwvvuuUUVVWWXX ttssrrqqYYZZ[[\\ + + ffeeddccABBCCDDE + + MMLLKKJJ|{{zzyyxdeeffggheddccbbahiijjkkla``__^^]lmmnnoop + + NMMLLKKJUUVVWWXX ttssrrqqYYZZ[[\\ + + ppoonnmm]]^^__``bbaa``__EFFGGHHI IIHHGGFFwvutssrrhiijjkkla``__^^]lmmnnoop + + ]\\[[ZZYpqqrrsst JIIHHGGF~~}}YYZZ[[\\ + + ppoonnmm]]^^__``llkkjjiiaabbccdd^^]]WWVVIJJKKLLMEEDDCCBBqqppoonnlmmnnoop + + ]\\[[ZZYpqqrrsst YXXWWVVUtuuvvwwxFEEDDCCB||{{zzyy]]^^__``llkkjjiiaabbccddhhggffeeeeffgghhUUTTSSRRMNNOOPPQAA;;::99mmllkkjjpqqrrsst YXXWWVVUtuuvvwwxUTTSSRRQxyyzz{{|BAA;;::9xwvutssraabbccddhhggffeeeeffgghhddccbbaaiijjkkllQQPPOONNQRRSSTTU88776655iihhggfftuuvvwwxUTTSSRRQxyyzz{{|QPPOONNM|}}~~98877665rqqppooneeffgghhddccbbaaiijjkkll``__^^]]mmnnoopp + + MMLLKKJJUVVWWXXY 44332211eeddccbbxyyzz{{|QPPOONNM|}}~~MLLKKJJI 54433221nmmllkkjiijjkkll``__^^]]mmnnoopp + + \\[[ZZYYqqrrsstt IIHHGGFF~~}}|YZZ[[\\]!!""##$$00//..--aa``__^^|}}~~MLLKKJJI IHHGGFFE !!""##$100//..-jiihhggfmmnnoopp + + \\[[ZZYYqqrrsstt XXWWVVUUuuvvwwxxEEDDCCBB|{{zzyyx]^^__``a%%&&''((,,++**))]]\[ZYXW IHHGGFFE !!""##$EDDCCBBA$%%&&''(-,,++**)feeddccbqqrrsstt XXWWVVUUuuvvwwxxTTSSRRQQyyzz{{||AA;;::99wvutssrrabbccdde))**++,,((''&&%%WVVUUTTS !!""##$EDDCCBBA$%%&&''(A@@??>>=())**++,)((''&&%baa``__^uuvvwwxxTTSSRRQQyyzz{{||PPOONNMM}}~~88776655qqppoonneffgghhi--..//00SRRQQPPO$%%&&''(A@@??>>=())**++,=<<;;::9,--..//0%^]]\[ZYXyyzz{{||PPOONNMM}}~~LLKKJJII 44332211mmllkkjjijjkkllm11223344ONNMMLLK())**++,=<<;;::9,--..//09887766501122334WWVVUUTT}}~~LLKKJJII HHGGFFEE!!""##$$00//..--iihhggffmnnooppq55667788KJJIIHHG,--..//098877665011223345443322145566778SSRRQQPP HHGGFFEE!!""##$$DDCCBBAA%%&&''((,,++**))eeddccbbqrrssttu99::;;<<GFFEEDDC011223345443322145566778100//..-899::;;<OONNMMLL!!""##$$DDCCBBAA%%&&''((@@??>>==))**++,,((''&&%%aa``__^^uvvwwxxy==>>??@@ CBBAA@?>45566778100//..-899::;;<-,,++**)<==>>??@ KKJJIIHH%%&&''((@@??>>==))**++,,<<;;::99--..//00]]\[ZYXWyzz{{||}AABBCCDD + + =<;;::99899::;;<-,,++**)<==>>??@)((''&&%@AABBCCD + + GGFFEEDD))**++,,<<;;::99--..//008877665511223344WVVUUTTS}~~9::;;<<=,++**))(=>>??@@A(''&&%%$ABBCCDDE + + FFEEDDCC**++,,--;;::9988..//00117766554422334455VUUTTSSR~KJJIIHHG !!"GFFEEDDC"##$$%%&,++**))(QPPOONNM=>>??@@A(''&&%%$ABBCCDDE$##""!! EFFGGHHIBBAA@?>=..//001177665544223344553322110066778899RQQPPOON !!"GFFEEDDC"##$$%%&CBBAA@@?&''(())*(''&&%%MLLKKJJIABBCCDDE$##""!! EFFGGHHI IJJKKLLM +<;;::998223344553322110066778899//..--,,::;;<<==NMMLLKKJ"##$$%%&CBBAA@@?&''(())*?>>==<<;*++,,--.IHHGGFFEEFFGGHHI IJJKKLLM~~}}|MNNOOPPQ + 8776655466778899//..--,,::;;<<==++**))((>>??@@AA JIIHHGGF&''(())*?>>==<<;*++,,--.;::99887.//00112EDDCCBBAIJJKKLLM~~}}|MNNOOPPQ|{{zzyyxQRRSSTTU43322110::;;<<==++**))((>>??@@AA''&&%%$$BBCCDDEE + + FEEDDCCB*++,,--.;::99887.//001127665544323344556A@@??>>=~~}}|MNNOOPPQ|{{zzyyxQRRSSTTUxwwvvuutUVVWWXXY0//..--,>>??@@AA''&&%%$$BBCCDDEE##""!! FFGGHHIIBAA@?>=<.//0011276655443233445563221100/6778899:=<<;;::9|{{zzyyxQRRSSTTUxwwvvuutUVVWWXXY tssrrqqpYZZ[[\\],++**))(BBCCDDEE##""!! FFGGHHIIJJKKLLMM + +;;::9988233445563221100/6778899:/..--,,+:;;<<==> 98877665xwwvvuutUVVWWXXY tssrrqqpYZZ[[\\] + + poonnmml]^^__``a(''&&%%$FFGGHHIIJJKKLLMM~~}}||NNOOPPQQ 776655446778899:/..--,,+:;;<<==>+**))(('>??@@AAB + + +54433221tssrrqqpYZZ[[\\] + + poonnmml]^^__``alkkjjiihabbccdde%%&&'#"! JJKKLLMM~~}}||NNOOPPQQ{{zzyyxxRRSSTTUU33221100:;;<<==>+**))(('>??@@AAB'&&%%$$#BCCDDEEF + 100//..-poonnmml]^^__``alkkjjiihabbccddehggffeedeffgghhi'(())**+~~}}||NNOOPPQQ{{zzyyxxRRSSTTUUwwvvuuttVVWWXXYY//..--,,>??@@AAB'&&%%$$#BCCDDEEF#""!! FGGHHIIJ-,,++**)lkkjjiihabbccddehggffeedeffgghhidccbbaa`ijjkkllm+,,--../{{zzyyxxRRSSTTUUwwvvuuttVVWWXXYY ssrrqqppZZ[[\\]]++**))((BCCDDEEF#""!! FGGHHIIJJKKLLMMN)((''&&%hggffeedeffgghhidccbbaa`ijjkkllm `__^^]]\mnnooppq/0011223wwvvuuttVVWWXXYY ssrrqqppZZ[[\\]] + + oonnmmll^^__``aa''&&%%$#FGGHHIIJJKKLLMMN~~}}||{NOOPPQQR%$$##""!dccbbaa`ijjkkllm `__^^]]\mnnooppq + + \[[ZZYYXqrrssttu34455667ssrrqqppZZ[[\\]] + + oonnmmll^^__``aakkjjiihhbbccddee%%&&''"! JKKLLMMN~~}}||{NOOPPQQR{zzyyxxwRSSTTUUV! `__^^]]\mnnooppq + + \[[ZZYYXqrrssttu XWWVVUUTuvvwwxxy78899::; + +oonnmmll^^__``aakkjjiihhbbccddeeggffeeddffgghhii(())**++~~}}||{NOOPPQQR{zzyyxxwRSSTTUUVwvvuuttsVWWXXYYZ%%&&'\[[ZZYYXqrrssttu XWWVVUUTuvvwwxxyTSSRRQQPyzz{{||};AABBCCD kkjjiihhbbccddeeggffeeddffgghhiiccbbaa``jjkkllmm,,--..//{zzyyxxwRSSTTUUVwvvuuttsVWWXXYYZ srrqqppoZ[[\\]]^'(())**+XWWVVUUTuvvwwxxyTSSRRQQPyzz{{||}POONNMML}~~DEEFFGGHggffeeddffgghhiiccbbaa``jjkkllmm __^^]]\\nnooppqq00112233wvvuuttsVWWXXYYZ srrqqppoZ[[\\]]^ + + onnmmllk^__``aab+,,--../TSSRRQQPyzz{{||}POONNMML}~~LKKJJIIHHIIJJKKLccbbaa``jjkkllmm __^^]]\\nnooppqq + + [[ZZYYXXrrssttuu44556677 srrqqppoZ[[\\]]^ + + onnmmllk^__``aabkjjiihhgbccddeef/0011223 POONNMML}~~LKKJJIIH !HGGFFEEDLMMNNOOP __^^]]\\nnooppqq + + [[ZZYYXXrrssttuuWWVVUUTTvvwwxxyy8899::;; + + onnmmllk^__``aabkjjiihhgbccddeefgffeeddcfgghhiij34455667 + + LKKJJIIH !HGGFFEED!""##$$%DCCBBAA@PQQRRSST + + [[ZZYYXXrrssttuuWWVVUUTTvvwwxxyySSRRQQPPzz{{||}}AABBCCDD kjjiihhgbccddeefgffeeddcfgghhiijcbbaa``_jkkllmmn78899::; + + HGGFFEED!""##$$%DCCBBAA@%&&''(()@??>>==>==<)**++,,-<;;::998]^^__``aSSRRQQPPzz{{||}}OONNMMLL~~KKJJIIHHIIJJKKLLcbbaa``_jkkllmmn +_^^]]\\[nooppqqr + [ZZYYXXWrssttuuvDEEFFGGH@??>>==<)**++,,-<;;::998-..//00187766554abbccddeOONNMMLL~~KKJJIIHH !!GGFFEEDDMMNNOOPP +_^^]]\\[nooppqqr + [ZZYYXXWrssttuuvWVVUUTTSvwwxxyyzHIIJJKKL<;;::998-..//001877665541223344543322110effgghhiKKJJIIHH !!GGFFEEDD""##$$%%CCBBAA@@QQRRSSTT + [ZZYYXXWrssttuuvWVVUUTTSvwwxxyyzSRRQQPPOz{{||}}~LMMNNOOP877665541223344543322110566778890//..--,ijjkkllm !!GGFFEEDD""##$$%%CCBBAA@@&&''(())??>>==<>==<<**++,,--;;::9988^^__``aaSRRQQPPOz{{||}}~ONNMMLLK~KJJIIHHGTUUVVWW] !!""##$0//..--,9::;;<<=,++**))(=>>??@@A(''&&%%$qrrssyyz&&''(())??>>==<<**++,,--;;::9988..//001177665544bbccddeeONNMMLLK~KJJIIHHG !!"GFFEEDDC]^^__``a$%%&&''(,++**))(=>>??@@A(''&&%%$ABBCCDDE$##""!! z{{||}}~**++,,--;;::9988..//0011776655442233445533221100ffgghhiiKJJIIHHG !!"GFFEEDDC"##$$%%&CBBAA@@?abbccdde())**++,(''&&%%$ABBCCDDE$##""!! EFFGGHHI ~~}}||{~..//001177665544223344553322110066778899//..--,,jjkkllmm !!"GFFEEDDC"##$$%%&CBBAA@@?&''(())*?>>==<<;effgghhi,--..//0$##""!! EFFGGHHI IJJKKLLM{zzyyssr223344553322110066778899//..--,,::;;<<==++**))((nnooppqq"##$$%%&CBBAA@@?&''(())*?>>==<<;*++,,--.;::99887ijjkkllm01122334 IJJKKLLM~~}}|MNNOOPPQrqqppoon66778899//..--,,::;;<<==++**))((>>??@@AA''&&%%$$rrssyyzz&''(())*?>>==<<;*++,,--.;::99887.//0011276655443mnnooppq45566778~~}}|MNNOOPPQ|{{zzyyxQRRSSTTUnmmllkkj::;;<<==++**))((>>??@@AA''&&%%$$BBCCDDEE##""!! {{||}}~~*++,,--.;::99887.//0011276655443233445563221100/qrrssyyz899::;;<|{{zzyyxQRRSSTTUxwwvvuutUVVWWXXY jiihhggf>>??@@AA''&&%%$$BBCCDDEE##""!! FFGGHHII~~}}||{{.//0011276655443233445563221100/6778899:/..--,,+z{{||}}~<==>>??@xwwvvuutUVVWWXXY tssrrqqpYZZ[[\\] + + feeddccbBBCCDDEE##""!! FFGGHHIIJJKKLLMMzzyyssrr233445563221100/6778899:/..--,,+:;;<<==>+**))(('~@AABBCCD tssrrqqpYZZ[[\\] + + poonnmml]^^__``abaa``__^FFGGHHIIJJKKLLMM~~}}||NNOOPPQQqqppoonn6778899:/..--,,+:;;<<==>+**))(('>??@@AAB'&&%%$$#DEEFFGGH + + poonnmml]^^__``alkkjjiihabbccdde^]]WWVVUJJKKLLMM~~}}||NNOOPPQQ{{zzyyxxRRSSTTUUmmllkkjj:;;<<==>+**))(('>??@@AAB'&&%%$$#BCCDDEEF#""!! ~~}}||{HIIJJKKLlkkjjiihabbccddehggffeedeffgghhiUTTSSRRQNNOOPPQQ{{zzyyxxRRSSTTUUwwvvuuttVVWWXXYY iihhggff>??@@AAB'&&%%$$#BCCDDEEF#""!! FGGHHIIJ{zzyyssrLMMNNOOPhggffeedeffgghhidccbbaa`ijjkkllm QPPOONNMRRSSTTUUwwvvuuttVVWWXXYY ssrrqqppZZ[[\\]] + + eeddccbbBCCDDEEF#""!! FGGHHIIJJKKLLMMNrqqppoonPQQRRSSTdccbbaa`ijjkkllm `__^^]]\mnnooppq + + MLLKKJJIVVWWXXYY ssrrqqppZZ[[\\]] + + oonnmmll^^__``aaaa``__^^FGGHHIIJJKKLLMMN~~}}||{NOOPPQQRnmmllkkjTUUVVWWX `__^^]]\mnnooppq + + \[[ZZYYXqrrssttu IHHGGFFE~~}}||ZZ[[\\]] + + oonnmmll^^__``aakkjjiihhbbccddee]]WWVVUUJKKLLMMN~~}}||{NOOPPQQR{zzyyxxwRSSTTUUVjiihhggfXYYZZ[[\ + + \[[ZZYYXqrrssttu XWWVVUUTuvvwwxxyEDDCCBBA{{zzyyxw^^__``aakkjjiihhbbccddeeggffeeddffgghhiiTTSSRRQQNOOPPQQR{zzyyxxwRSSTTUUVwvvuuttsVWWXXYYZ feeddccb~~}\]]^^__` XWWVVUUTuvvwwxxyTSSRRQQPyzz{{||}A;;::998vutssrrqbbccddeeggffeeddffgghhiiccbbaa``jjkkllmm PPOONNMMRSSTTUUVwvvuuttsVWWXXYYZ srrqqppoZ[[\\]]^ + + baa``__^}||{{zzy`aabbccdTSSRRQQPyzz{{||}POONNMML}~~87766554qppoonnmffgghhiiccbbaa``jjkkllmm __^^]]\\nnooppqq + + LLKKJJIIVWWXXYYZ srrqqppoZ[[\\]]^ + + onnmmllk^__``aab^]]WWVVUyxxwwvvudeeffgghPOONNMML}~~LKKJJIIH !43322110mllkkjjijjkkllmm __^^]]\\nnooppqq + + [[ZZYYXXrrssttuuHHGGFFEE~~}}||{Z[[\\]]^ + + onnmmllk^__``aabkjjiihhgbccddeefUTTSSRRQuttssrrqhiijjkklLKKJJIIH !HGGFFEED!""##$$%0//..--,ihhggffennooppqq + + [[ZZYYXXrrssttuuWWVVUUTTvvwwxxyyDDCCBBAA{zzyyxwv^__``aabkjjiihhgbccddeefgffeeddcfgghhiijQPPOONNMqppoonnmlmmnnoop !HGGFFEED!""##$$%DCCBBAA@%&&''((),++**))(eddccbbarrssttuuWWVVUUTTvvwwxxyySSRRQQPPzz{{||}};;::9988utssrrqqbccddeefgffeeddcfgghhiijcbbaa``_jkkllmmn +MLLKKJJImllkkjjipqqrrsst!""##$$%DCCBBAA@%&&''(()@??>>==<)**++,,-(''&&%%a``__^^]vvwwxxyySSRRQQPPzz{{||}}OONNMMLL~~77665544ppoonnmmfgghhiijcbbaa``_jkkllmmn +_^^]]\\[nooppqqr + IHHGGFFEihhggffetuuvvwwx%&&''(()@??>>==<)**++,,-<;;::998-..//001]\[ZYXWWzz{{||}}OONNMMLL~~KKJJIIHH !!33221100llkkjjiijkkllmmn +_^^]]\\[nooppqqr + [ZZYYXXWrssttuuvEDDCCBBAeddccbbaxyyzz{{|)**++,,-<;;::998-..//0018776655412233445VVUUTTSS~~KKJJIIHH !!GGFFEEDD""##$$%%//..--,,hhggffeenooppqqr + [ZZYYXXWrssttuuvWVVUUTTSvwwxxyyzA;;::998a``__^^]|}}~~-..//00187766554122334454332211056677889RRQQPPOO !!GGFFEEDD""##$$%%CCBBAA@@&&''(())++**))((ddccbbaarssttuuvWVVUUTTSvwwxxyyzSRRQQPPOz{{||}}~87766554]\\[[ZZY1223344543322110566778890//..--,9::;;<<=NNMMLLKK""##$$%%CCBBAA@@&&''(())??>>==<<**++,,--''&&%%``__^^]]vwwxxyyzSRRQQPPOz{{||}}~ONNMMLLK~43322110YXXWWVVU566778890//..--,9::;;<<=,++**))(=>>??@@A JJIIHHGG&&''(())??>>==<<**++,,--;;::9988..//0011\[ZYXWWVz{{||}}~ONNMMLLK~KJJIIHHG !!"0//..--,UTTSSRRQZHAb|ZdQb˂rXQdrtAQr˂pbtlfpvdrtfH~Qr˂pfpvZp˂tbHAbtlJp˂rdrtAH~ftlJfpvdrtAH~f˂pZv`fے`JXQtlJJ`ےJltZHAbJtArdnXv`AJltf`vXZHAbnXv`rXQJ`nvp`JQr˂ptArdXQJ`ےJltZHAbtArdnXv`Jlt`vXnHAbے~Hfpr˂ptArdbHAZpbdQZ|ے`JX|ZdQf~HbdQZ|nvpے`JXf~HbHAvXnZHAbf~HbHAZbdQZ|ے`JXQ|ZdQbf~HbdQZ|vpf`JXQrvnXZHAb|ZdQb˂rXQdrtAQr˂pbtlfpvdrtfH~Qr˂pfpvZp˂vpfHے`JXfpvp˂rdrtAr˂ptlJfpvdrtAH~f˂p`v`fے`JXQtlJJ`ےJltZHAbJtArdnXv`AJltf`vXZHAbnXv`rXQJ`ۅ~f`Qr˂pnXv`XQJ`ےJltZHAbtArdnXv`Jlt`vXnJXQrb~Hfvr˂ptArdbHAXQJbQZdے`JX|ZdQf~HbdQZ|nvpے`JXf~HbHAvXnZHAbf~HbHAZbdQZ|ے`JXQ|ZdQbf~HbdQZ|vpftl|nXv`ZHAb|ZdQb`ےbrtAJlQr˂pbtlfpvdrtfH~Qr˂pfpvZp˂vpfHے`JXfpvp˂rdrtAr˂ptlJfpvdrtAH~fZdQbtf~Hے`JXQtlJHAZp˂tbdQZHAbJtArdnXv`AJltf`vXZHAۅnXv`rXQJ`ۅ~QrZHAnXv`XQJ`ےJltZHAbtArdnXv`Jlt`vXnlJtAfpvr˂ptArdrXQJZ|dے`JX|ZdQfHbdQZ|nvp`JXQf~HbHAvpfHbے`f~HbHAZbdQZ|ے`JXQ|ZdQbf~HbdQZ|vpfrd|nXv`ZHAb|ZdQb`ےbrtAJlQr˂pbtlfpvdrtfH~rbtlfpvZp˂~f`JXQrfpvp˂rdrtAr˂ptlJfpvdrtAH~fZdQbtf~Hے`JXQtlJHAZp˂tbdQZHAbJtArdnrXQJ`AJltf`vXJtAdnXv`rXQJ`vXn˂pZHAnXv`XQJ`ےJltZHAbtArdnXv`Jlt`vXnlJtAfpvr˂ptArdbHAZ|dnے`JX|ZdQےHAbdQZ|nvp|ZdQf~HbHAvpfHbے`f~HbHAZbdQZ|ے`JXQ|ZdQbfHfbdQZ|vpfrdtnvfZHAb|ZdQbZp˂vfQr˂pbtlZp˂drtfH~btlfpvZp˂~f`JXQrfpvp˂rdtAJr˂ptlJpvndrtAH~flJtAr~Hfpے`JXQtlJrXQJ`f`vXZHAbJtArdrXQJ`AJltf`vXJtArdnXv`rXQJ`vXH~˂pZAnXv`XQJ`ےltbZHAbtArdrXQJ`Jlt`vXnd|ZvnXr˂ptArdےbHAnvpے`JX|ZdQbHAbdQZ|nvp|ZdQf~HbHAf`vX`JXQrf~HbHAZnvpے`JXQ|ZdQbےHAZbdQZ|vpfdQbtv`fZHAb|ZdQbZp˂fH~Qr˂pbtlZp˂drtfH~btlfpvZp˂nvpbtlfpvp˂rfHfr˂ptlJp˂rdrtAH~flJtAr~Hfpے`JXQtlJrXQJ`f`vXZHAbJtArdrXQJ`AJltf`vXJtArdnXv`rXQJ`۝fH~JtAdnXv`XQJ`ے`vXnZHAbtArdXQJ`ےJlt`vXnd|ZvnXr˂ptArdp˂rnvpے`JX|ZdQbHAbdQZ|nvp|ZdQf~HbHAf`vX|ZdQbf~HbHAZvpfے`JXQ|ZdQbbHAZbdQZ|vpfdQtArdv`ffpZHAb|ZdQbXQJ`ےfH~Qr˂pbtlZp˂drtfH~btlfpvZp˂nvptlJfpvp˂rH~fr˂ptlJp˂rdrtAH~f|ZdQvnے`JXQtlJbHAZf`vXZHAbJtArdrXQJ`AJltf`vXJtArdnXv`rXQJ`۝`vXtArdnXv`XQJ`ے`vXnZHAbtArdXQJ`ےJlt`vXnbtlrXQJ`r˂ptArdp˂rnvpے`JX|ZdQbHAbdQZ|nvp|ZdQf~HbHAnvp|ZdQbf~HbHAZvpfے`JXQ|ZdQbbHAZbdQZ|vpfJtArdHAZpZHAbf~HXQJ`ےfH~Qr˂pbtlZp˂drtfH~btlfpvZdrtfH~tlJfpvp˂rH~fr˂ptlJp˂rdrtAH~f|ZdQ˂rXے`JXQXv`fbHAXQf`vXZHAbJtArdrXQJ`AJltfZHAbJtArdnXv`AdQZ|f`vXtArdnXv`XQJ`ے`vXnZHAbtArdXQJ`ےJlt`vXnbtlQJ`ےr˂p~HfJ`ےnvpے`JXf~HbHAbdQZ|ے`JX|ZdQf~HdrtAnvp|ZdQbf~HbHAZvpfے`JXQ|ZdQbbHAZbdQZ|vpf|ZdQbbHAZpZHAbpvnbHAZpfH~Qr˂pfpvZp˂drtQr˂pbtlfpvJltfH~tlJfpvp˂rH~fr˂ptlJp˂rdrtAH~ftlJ˂rXے`JXQXv`f˂rXQf`vXZHAbnXv`rXQJ`AJltZHAbJtArdnXv`bdQZ|vpfHtArdnXv`XQJ`ے`vXnZHAbtArdXQJ`ےJltZHAbtArdQJ`ےr˂p~HfJ`ےnvpے`JXf~HbHAbdQZ|ے`JX|ZdQf~HdrtA~f`|ZdQbf~HbHAZvpfے`JXQf~HbHAZbdQZ|˂pZ|ZdQbbHAZpZHAbpvbHAZpfH~Qr˂pfpvZp˂drtQr˂pbtlfpvJltdvXntlJfpvdrtAH~fr˂pfpvp˂rdrtAHAbےtlJ˂rXے`JXQ~Hfp˂bf`vXZHAbnXv`rXQJ`AJltZHAbJtArdnXv`rtAJlvpfHtArdnXv`Jlt`vXnZHAbnXv`XQJ`ےJlt`JXQrtArdtQJ`ےr˂pvnXHAZdnvpے`JXf~HbHAbdQZ|ے`JX|ZdQf~Htbd~f`|ZdQbf~HbdQZ|vpfے`JXQf~HbHAZbdQZ|˂pZlJtAbHAZpZHAbv`frtAJfH~Qr˂pfpvZp˂drtQr˂pbtlfpvQZ|dvXHtlJfpvdrtAH~fr˂pfpvp˂rdrtAHAbےrd|˂rXے`JXQ~HfpbdQZ|f`vXZHAbnXv`rXQJ`AJltZHAbJtArdnXv`rtAJl~fZHtArdnXv`Jlt`vXnZHAbnXv`XQJ`ےJlt`JXQHAZdQbtQJ`ےr˂pvnXdrtAnvpے`JXf~HbHAbdQZ|ے`JX|ZdQfHtbdAbJ|ZdQbf~HbdQZ|vpfے`JXQf~HbHAZbdQZ|bے`lJtAbHAZpZHAbv`pvJltfH~Qr˂pfpvZp˂dtAQr˂pbtlfpvQZ|lQr˂ptlJfpvdrtAH~fr˂pfpvp˂rdrtAJXQrrd|˂rXے`JXQnXvbdQZ|f`vXZHAۅnXv`rXQJ`JltZHAbJtArdnrXQJ`tbdQZHAbtArdnXv`Jlt`vXnZHAbnXv`XQJ`ےJlt˂pZHAZdQtArQJ`ےr˂p`f~drtAnvp`JXQf~HbHAbnvpے`JX|ZdQےHAZ|dے`JXQ|ZdQbf~HbdQZ|vpfے`JXQf~HbHAZbdQZ|bے`dfbHAZp|ZdQbHfpvJltbfH~rbtlfpvZp˂fHQr˂pbtlZp˂rtAJlr˂ptlJfpvdrtAH~fr˂pfpvp˂rdtAJJXQr~Hfv˂rXtlJnXvQZdrf`vXJtAdnXv`rXQJ`f`vXZHAbJtArdrXQJ`ےtbdQZHAbtArdnXv`Jlt`vXnZHAےnXv`XQJ`ےltb˂p`JnXv`QJ`ےtArd`f~tAJlnvp|ZdQf~HbHAnvpے`JX|ZdQbHAZ|dے`JXQ|ZdQbfHfbdQZ|vpf`JXQrf~HbHAZnvpXQr˂f~HbHAZp|ZdQbHXv`tbdQZfH~btlfpvZp˂fH~Qr˂pbtlZp˂rtAdQZ|rZHAtlJpvndrtAH~fbtlfpvp˂rfHfpZHAbfpv˂rXtlJf~H|drf`vXJtArdnXv`rXQJ`f`vXZHAbJtArdrXQJ`ہdrtbے`tArdrXQJ`Jlt`vXnJtAdnXv`XQJ`ے`vXnے`JnXv`QJ`ےtArdfpvtAJlnvp|ZdQf~HbHAnvpے`JX|ZdQbHAAJltJXQr|ZdQbےHAZbdQZ|vpf|ZdQbf~HbHAZvpfXQr˂f~HbHAZp|ZdQbnXv`tbdQZfH~btlfpvZp˂fH~Qr˂pbtlZp˂bdQZ|pZHAtlJp˂rdrtAH~ftlJfpvp˂rH~fpZHAbfpvn˂rXtlJf~H|rAJlf`vXJtArdnXv`rXQJ`f`vXZHAbJtArdrXQJ`ہdrtbے`tArdXQJ`ےJlt`vXntArdnXv`XQJ`ے`vXn˂pvf~QJ`ےtArdfpvtbdnvp|ZdQf~HbHAnvpے`JX|ZdQbHAAJltJXQr|ZdQbbHAZbdQZ|vpf|ZdQbf~HbHAZvpfZHAbHfpvbHAZp˂rX|ZdQb~HfQZ|dfH~btlfpvZp˂fH~Qr˂pbtlZp˂drtApZAbtlJp˂rdrtAH~ftlJfpvp˂rH~fے`JXQnXv˂rXQJ`ےtlJpvnrtAJlf`vXJtArdnXv`rXQJ`f`vXZHAbJtArdrXQJ`Jlt`JXQrtArdXQJ`ےJlt`vXntArdnXv`XQJ`ے`vXnr˂p`f~QJ`ےbHAZptArdXv`ftbdnvp|ZdQf~HbHAnvpے`JXf~HbHAbdQZ|˂pZ|ZdQbbHAZbdQZ|vpf|ZdQbf~HbHAZvpfZHAbHfpvbHAZp˂rX|ZdQb~HfQZ|dfH~btlfpvZdrtfH~Qr˂pfpvZp˂drtAHAbےtlJp˂rdrtAH~ftlJfpvp˂rH~fے`JXQnXv˂rXQJ`ےtlJpvnrtAJfZHAbJtArdnXv`AJltf`vXZHAbnXv`rXQJ`Jlt`JXQrtArdXQJ`ےJlt`vXntArdnXv`XQJ`ے`vXnHAbے`f~fpQJ`ےbHAZtArdXv`pbdQZ|ے`JX|ZdQf~HbdQZ|nvpے`JXf~HbHAbdQZ|l˂pZ|ZdQbbHAZbdQZ|vpf|ZdQbf~HbHAZvpf`JXQrvnXbHAZpdrtAJltvXnZHAbnXv`QJ`ےJltZHAbArd|v`pZ|dvXnrd|Xv`fJ`ےvXnHAbےrdfJ`ےtbdQJXQrrd|J`ےtbdvXnrd|v`fJ`ےvXnZHAbpfH~bdQZ|vpfH`JXQf~HbHAZpbdQZ|`JXQZdQbtvnrXrtAJvpfHZdQbt~HfbHAZvpfH`JXQr~HfbHAZpZ|dpZHAZdQbtbHAZpQZ|dvpfHZdQbt~HfpbHAZpvpfH`JXQHf۝`vdrtA~f`r˂pfpv˂rXdrtAr˂plJtQJ`pbdQZ|~fZlJtApvndrtAJ~f`˂pZpvn˂rXQrtAJlbے`lJtArXQrtAJl~f`lJtAvnXrXQ~f`Abے`XnvˍJltvXnZHAbnXv`QJ`ےJltZHAbArd|rXQdrtAHAbےrd|Xv`fltbvXnHAbےXv`fJ`ےtbdQJXQrrd|J`ےtbdvXnrd|v`fJ`ےvXnہJXQrpfH~bdQZ|vpfH`JXQf~HbHAZpbdQZ|`JXQZdQbtJ`ےJlt`JXQrZdQbt~HfdQZ|vpfH`JXQr~HfbHAZpZ|l璂pZHAZdQbtbHAZpQZ|dvpfHZdQbt~HfpbHAZdvpfH˂pZHf۝`vdrtA~f`r˂pfpv˂rXdrtAr˂plJtbHAZpbdQZ|˂pZlJtApvndrtAJ~f`˂pZpvn˂rXQtbnbJQrlJtArXQrtAJl~fZHlJtAvnXrtAJl~f`Abے`XnvˍJltvXnZHAbnXv`QJ`ےJltZHAbArd|rXQdrtAHAbےrd|Xv`fltbvXnHAbےXv`fJ`ےvp`v˂pZrdfJ`ےtbdAbے`rd|v`ftbdvXnہJXQrpfH~bdQZ|vpfH`JXQf~HbHAZpbdQZ|`JXQZdQbtJ`ےJltb`JXQrZdQbt~HfdQZ|vpfH`JXQr~HfbHAZpXnvHAbے~HfpbHAZpQZ|dJXQrZdQbt~HfpQZ|dvpfH˂p`Zf۝`vdrtA~f`r˂pfpv˂rXdtAJlr˂plJtbHAXQJ`QZdr˂pZlJtApvndrtAJ~f`˂pZpvn˂rXQpfH~`JXQrvnXrXQrtAJl˂pZHlJtAvnXrtAJl~f`QXb㉀XnvˍJltvXnZHAے`nXv`QJ`ےtbZHAbArd|ےbHtAJlHAbےrd|Xv`fltbvXnHAbےXv`fJ`ےf`v˂pZv`fJ`ےtbdAbے`rd|v`ftbdvXnۑpJAHrpfH~bdQZ|vpfHJXQrf~HbHAZpnvp`JXQZdQbtAZp˂tbdQZ`JXQrZdQbt~HfdQZ|vpfH`JXQr~HfbHAZpXnvHAbے~HfpbHAZpQZ|dJXQrZdQbt~HfpQZ|dvpfH󙐂ˁ`Zf۝`vdrtA~f`btlfpv˂rXfHf`r˂plJtrXQJ`|dr˂pZlJtApvndrtAJ~f`˂pZpvn˂rXQpfH~`JXQrvnXrXQrtAJl˂pZHlJtAvnXrtAJl~f`QXb㉀XnvˍJltvXnJtAd|nXv`QJ`ےvXnZHAbArd|ےbHtAJlHAbےrd|Xv`fltbvXnHAے`Xv`fJ`ےvpZHAbv`fJ`ےtbdAbے`rd|v`ftbdvXnۑpJAHrpfH~bdQZ|vpfHZdQbtf~HbHAZpvpfH`JXQZdQbtAZp˂tbdQZ`JXQrZdQbtHfpdQZ|vpfHJXQrb~HfbHAZpfH~ے`JX~HfpbHAZpQZ|dJXQrZdQbt~HfpQZ|dvpfH󙐉ۑf۝`vdrtA~f`lJtfpv˂rX~f`r˂plJtbHA|AJl˂pZlJtAvnrdrtAJ~f`tlJpvn˂rXQf`vXQr˂pvnXrXQrtAJl˂pZHlJtAvnXrtAJl~f`pJAHrXnvˍJltvXnArd|nXv`QJ`ےvXnZHAbArd|Zp˂tbnHAbےrd|XQJ`ےltbvXntAd|Xv`fJ`ےnvpZHAbv`fJ`ےtbdAbے`rd|v`ftbdvXnېˁ`ZQpfH~bdQZ|vpfHZdQbtf~HbHAZpvpfH`JXQZdQbtrXQJ`ۀvpf`JXQrZdQbtHAZpdQZ|vpfHZdQbt~HfbHAZpfH~ے`JX~HfpbHAZpQZ|dJXQrZdQbtHfpQZ|dvpfHXb㉀ۑf۝`vdrtA~f`lJtfpv˂rX~f`r˂plJtbHAHf`˂pZlJtA˂rXQdrtAJ~f`lJtApvn˂rXQf`vXQr˂pvnXrXQtAJl˂pZHlJtAvnrXrtAJl~f`pJAHrXnvˍJltvXnArd|nXv`QJ`ےvXnZHAbArd|Zp˂vXnHAbےrd|J`ےltbvXnrd|Xv`fJ`ےH~fZA`v`fJ`ےtbnAbے`rd|QJ`ےtbdvXnېˁ`ZQp|drbdQZ|vpfHZdQbtf~HbHAZpvpfH`JXQZdQbtrXQJ`pvpfH`JXQrZdQbtbHAZpdQZ|vpfHZdQbt~HfbHAZp`vXnJXQrbt~HfpbHAZp˅vpfHJXQrZdQbtHAZpQZ|dvpfHXAHr󙐂QtJldrtA~f`lJtfpv˂rX~f`r˂plJt˂rX~f`˂pZlJtA˂rXQdrtAJ~f`lJtApvn˂rXQvpflJtvnXrXQf`˂pZHlJtArXQrtAJl~f`ˁ`ZQXbtbAdZJltvXnArd|nXv`QJ`ےvXnZHAbArdQJ`ےvXnHAbےrd|J`ےltbvXnrd|Xv`fJ`ےH~fAd|v`fJ`ےvXnAbے`rd|J`ےtbdvXn㉀ۑpJ|drbdQZ|vpfHZdQbtf~HbHAZvpfH`JXQf~HXbHAZpvpfH`JXQrZdQbtbHAZpdQZ|vpfHZdQbt~HfbHAZp`vXnZdQbt~HfpbHAZpvpfHJXQrZdQbtbHAZpQZ|dvpfHAHr󙐂QtJldrtA~flJtfpvdrtA~f`r˂pv`f˂rX~f`˂pZlJtA˂rXQdrtAJ~f`lJtApvn˂rXQvp`lJtAvnXrXQ~f`˂pZHlJtArXQrtAJl~f`ˁ`ZQXbtbAdZJltZHAbArd|nXv`JltvXnZHAbە~HfpQJ`ےvXnHAbےrd|J`ےltbvXnrd|Xv`fJ`ےvXnrd|v`fJ`ےvXnAbے`rd|J`ےtbdvXn㉀ۑp|drbdQZ|`JXQZdQbtf~HbdQZ|vpfH`JXQvnXbHAXQvpfH`JXQrZdQbtbHAZpdQZ|vpfHZdQbt~HfbHAZvpfHZdQbt~HfpbHAZpvpfHJXQrZdQbtbHAZpQZ|dvpfH`ZQXbQtJldrtAr˂plJtfpvdrtA~f`r˂pv`fJ`ے~f`˂pZlJtA˂rXQdrtAJ~fZlJtApvndrtAdQ~f`lJtAvnXrXQ~f`˂pZHlJtArXQrtAJl~f`ۑpJAtbAdZJltZHAbArd|nXv`JltvXnZHAbە~HfpbHAZpvXnHAbےrdfJ`ےltbHAbےrd|Xv`fZ|dvXnrd|v`fJ`ےvXnAbے`rd|J`ےtbdvXnHr󙐂ˁ|drbdQZ|`JXQZdQbtf~HbdQZ|vpfH`JXQv󂀉rXQvpfH`JXQr~HfbHAZpdQZ|`JXQrZdQbt~HfrtAJlvpfHZdQbt~HfpbHAZpvpfHJXQrZdQbtbHAZpQZ|dvpfH`ZQXbQtJldrtAr˂plJtfpvdrtA~f`r˂p~HfpJ`ے~f`˂pZpvn˂rXQdrtAJ˂pZlJtApvntbdQ~vlJtAvnXrXQ~f`˂pZHlJtArXQrtAJl~frۑpJAtbAdZJltZHAbArd|nXv`JltvXnZHAbvnXbHAZpvXnHAbےXv`fJ`ےltbHAbےrd|Xv`fZ|dpfH~rd|v`fJ`ےvXnAbے`rdfJ`ےtbd˂pZHHr󙐉|drbdQZ|`JXQZdQbtf~HbdQZ|vpfH`JXQv`f󂀉bHvpfH`JXQr~HfbHAZpdQZ|`JXQrZdQbt~HfrtAJlf`vZdQbt~HfpbHAZdvpfHJXQr~HfpbHAZpQZ|dAbے`ۑpJAHrQtJldrtAr˂plJtfpvdrtA~f`r˂p~HfpAZd~f`˂pZpvn˂rXQdrtAJ˂pZlJtApvntdrXnvlJtAvnXrtAJl~f`˂pZHvnXrXQrtAJlJXQr󙐂ˁ`ZtbAdZJltZHAbArd|nXv`JltvXnZHAے`vnXrtAJbvXnHAbےXv`fJ`ےltbHAbےrd|Xv`ftAJlpfH~rd|v`ftbdvXnAbے`v`fJ`ےtbd˂pZHQXb㉀|drbdQZ|`JXQZdQbtfHfpbdQZ|vpfHJXQrv`pvdQZ|vpfH`JXQr~HfbHAZpdQZ|`JXQrZdQbt~HftbdQZf`vZdQbt~HfpQZ|dvpfHJXQr~HfpbHAZpQZ|dAbے`ۑpJAHrQtJldtAJlr˂plJtvndrtA~f`btlnXv`drtAJ~f`˂pZpvn˂rXQdrtAJ˂pZlJtApvn|drXH~lJtAvnXrtAJl~f`˂pZHvnXrXQrtAJlJXQHA󙐂ˁ`tbAdZtbZHAbArd|rXQJ`JltvXnJtAd|f~HltbvXnHAbےXv`fJ`ےltbHAbےrd|Xv`ftAJlfZHAbrd|v`ftbdvXnAbے`v`fJ`ےtbdbے`pfH~|drnvp`JXQZdQbtHAZpbdQZ|vpfHZdQbtfpvdQZ|vpfH`JXQr~HfbHAZpdQZ|`JXQrZdQbtHfptbdQZJQrZdQbt~HfpQZ|dvpfHJXQr~HfpbHAZpQZ|dJXQrːf۝`vQtJlfHf`r˂plJt˂rXdrtA~f`lJtnXv`drtAJ~f`˂pZpvn˂rXQdtAJl˂pZlJtAvnr|lt˂pZHlJtAvnXrtAJl~f`˂pZHvnXrXQrtAJlpZHAXnvˍtbAdZvXnZHAbArd|QJ`ےJltvXnArd|f~HltbQvXnHAے`Xv`fJ`ےtbnHAbےrd|XQJ`ےbdQZ|Abے`rd|v`ftbdvXnAbے`v`fJ`ےtbdbے`pfH~|drvpfH`JXQZdQbtbHAZpbdQZ|vpfHZdQbtXv`ZdrtvpfHJXQrb~HfbHAZpvpf`JXQrZdQbtHAZpdrtAJXQrZdQbt~HfpQZ|dvpfHJXQr~HfpbHAZpQZ|dJXQrːf۝`vQtJl~f`r˂plJt˂rXdrtA~f`lJtf~HAJlt~f`tlJpvn˂rXQHf`˂pZlJtA˂rXQJlt˂pZHlJtAvnXrtAJl~f`˂pZHvnXrXQtAJlp`JXXnvˍtbAdZvXnZHAbArd|QJ`ےJltvXnArd|fpvbdQZ|vXntAd|Xv`fJ`ےvXnHAbےrd|J`ےbdQZ|Abے`rd|v`ftbdvXnAے`v`fJ`ےtbnQr˂ppfH~|drvpfH`JXQZdQbtbHAZpbdQZ|vpfHZdQbtnXv`ˁdrtvpfHZdQbt~HfbHAZpvpfH`JXQrZdQbtbHAZpdrtAJXQrZdQbtHfpQZ|dvpfHJXQrbt~HfpbHAZp˅vpfHZHAbf۝`vQtJl~f`r˂plJt˂rXdrtA~f`lJtf~HAJlt~f`lJtApvn˂rXQ~f`˂pZlJtA˂rXQdQZ|ZHAblJtAvnrXrtAJl~f`lJtvnXrXQf`ے`JXXnvˍtbAdZvXnZHAbArd|QJ`ےJltvXnArd|fpvbdQZ|vXnrd|Xv`fJ`ےvXnHAbےrd|J`ےdrtAJے`JXQrd|QJ`ےtbdvXnAd|v`fJ`ےvXnQr˂ppfH~|drvpfH`JXQZdQbtbHAZpbdQZ|vpfHZdQbt~HfprAJlvpfHZdQbt~HfbHAZpvpfH`JXQrZdQbtbHAZpltbr˂pZdQbtHAZpQZ|dvpfHZdQbt~HfpbHAZpvpfHZHAbf۝`vQtJl~f`r˂plJt˂rXdrtA~flJtvnXtbdQ~f`lJtApvn˂rXQ~f`˂pZlJtA˂rXQdQZ|ZHAblJtArXQrtAJl~f`lJtAvnXrXQ~f`˂pXnvˍtbAdZvXnZHAbArdQJ`ےJltZHAbArd|v`fZ|dvXnrd|Xv`fJ`ےvXnHAbےrd|J`ےdrtAJے`JXQrd|J`ےtbdvXnrd|v`fJ`ےvXnZHAbpfH~|drvpfH`JXQf~HbHAZpbdQZ|`JXQZdQbt~HfprtAJlvpfHZdQbt~HfbHAZpvpfH`JXQrZdQbtbHAZpltdr˂pZdQbtbHAZpQZ|dvpfHZdQbt~HfpbHAZpvpfH`JXQf۝`vQtJl~f`r˂pfpv˂rXdrtAr˂plJtvnXtbdQ~f`lJtApvn˂rXQ~f`˂pZlJtA˂rXQrtAJlZAb`lJtArXQrtAJl~f`lJtAvnXrXQ~f`r˂pXnvˍtbAdZ|666666666666666666666666666666666666666666667777777 \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv35_0.dat b/vendor/endroid/qr-code/assets/data/qrv35_0.dat new file mode 100644 index 000000000..712d99df8 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv35_0.dat @@ -0,0 +1,313 @@ +~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgcccdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYZYZYXWXWXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgcdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWXWXWVUVUVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKKKKKKLJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgcdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUVUVUTSTSTSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKLJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=~}~}~}~}|{{{{{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgcdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSTSTSRQRQRQRQRQRQNMNMNMNMKLKLKLKLJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=~}~}~}~}|{|{|{zyzyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgcdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQRQRQPOPONMNMNMNMKLKLKLKLJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=~}~}~}~}zyzyzyzyzyzyzyxwxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgccccccdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=~}~}~}~}zyzyzyzyxwxwxwxwxwxwxwvuvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihgfefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKKKKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvuvuvuvutststststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutststststststsrqrqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>={{{{{|{|zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqrqrqrqpopopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>={|{|{|{|zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopopopoponmnmnmnmnmlklklklkjijijijifefefefedcdcccccbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>={|{|{|{|zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmnmnmnmlklklklklkjijijijifefefefecdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>={|{|{|{|zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklklklklkjijijijijifefefefecdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKKKKKLKLJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;{|{|{|{|zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijijijijihgfefefefecdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;{|{{{{{{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefecdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefecdcdcdccbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefeccccdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKLKLKLJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKLKKKKKKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;~}~}~}~}|{|{|{{{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;~}~}~}~}{{{|{|{|zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;~}~}~}~}{|{|{|{|zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedccccccdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;~}~}~}~}{|{|{|{|zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefecdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKKKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;~}~}~}~}{|{|{|{|zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefecdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMKKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;~}~}~}~}{|{|{|{|zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefecdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;~}~}~}~}{{{{{{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefecdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIJIHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefecdcdccccbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGHGFEFEFEFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefeccdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMLKLKJIJIJIJIHGHGHGHGFEFEFEFEFEDCDCDCDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKKKKKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCDCBABABABABABABA@?@?@?@?>=>=>=>=<;<;<;<;~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOKLKLKLKLJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABABA@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;~}~}~}~}|{|{{{{{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOKLKLKLKLJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?>=>=>=>=>=>=>=<;<;<;<;~}~}~}~}{|{|{|{|zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOKLKLKLKLJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=>=<;<;<;<;<;<;<;~}~}~}~}{|{|{|{|zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefeccccdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOKLKLKLKLJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;<;<;<;<;~}~}~}~}{|{|{|{|zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcbabababababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOKLKLKLKKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;<;<;<;<;~}~}~}~}{|{|{|{|zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefebabababababa`_`_`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOKKKKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;<;<;<;<;~}~}~}~}{|{|{|{{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefebabababa`_`_`_`_`_`_^]^]^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;<;<;<;<;~}~}~}~}{{{{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefedcbabababa`_`_`_`_^]^]^]^]^]^]\[\[\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;<;<;<;<;~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgdcdcdcccbabababa`_`_`_`_^]^]^]^]\[\[\[\[\[\[ZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:96565656533333434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:96565656534343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;:9:9:9:9:9:9:96565656534343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9:98787876565656534343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9878787876565656534343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9878787876565656534333333212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9878787876565656543434333212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9878787876565656533343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9878787876565656534343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9878787876565656534343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9878787876565656534343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9878787876565656534343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9878787876565656533333343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!         + + + + :9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!           + + + + :9:9:9:9878787876565656543433333212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + + :9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + + + + :9:9:9:9878787876565656521212121212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:98787878765656565212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!      + + + + :9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + :9:9:9:98787878765434343212121210/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + :9:9:9:98787878743333334212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + :9:9:9:98787878734343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + :9:9:9:98787878734343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!    + + + + :9:9:9:98787878734343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!    + + + + :9:9:9:98787878734343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!    + + + + :9:9:9:98787878734343333212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:98787876533434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + +  ==>>??@@FFEEDDCCaabbccdd@@??>>==YYZZ[[\\HHGGFFEEQQRRSSTTPPOONNMMIIJJKKLLXXWWVVUUAABBCCDDQQKKJJIIssttuuvv~~##""!! vvwwxxyy++**))((nnooppqq33221100ffgghhii""!!  mmllkkjj8899::;;iihhggff00112233qqppoonn(())**++yyxxwwvv !!""##AABBCCDDBBAA@@??eeffgghh<<;;::99]]^^__``DDCCBBAAUUVVWWXXLLKKJJIIMMNNOOPPTTSSRRQQEEFFGGHHHHGGFFEEwwxxyyzzzz{{||}}''&&%%$$rrssttuu//..--,,jjkkllmm + + + + iihgfedc<<==>>??eeddccbb44556677mmllkkjj,,--..//uuttssrr$$%%&&''EEFFGGHH>>==<<;;iijjkkll88776655aabbccdd@@??>>==YYZZ[[\\HHGGFFEEQQRRSSTTPPOONNMMIIJJKKLLDDCCBBAA{{ + +~~##""!! vvwwxxyy++**))((nnooppqq !!cbbaa``_@@AABBCCaa``__^^8899::;;iihhggff00112233qqppoonn(())**++{{IIJJKKQQ::998765mmnnoopp44332211eeffgghh<<;;::99]]^^__``DDCCBBAAUUVVWWXXLLKKJJIIMMNNOOPP@@??>>==  zz{{||}}''&&%%$$rrssttuu !!"" + +""##$$%%_^^]]\\[DDEEFFGG]]\\[[ZZ<<==>>??eeddccbb44556677mmllkkjj,,--..// zzyyxxwwRRSSTTUU43322110qqrrsstt00//..--iijjkkll88776655aabbccdd@@??>>==YYZZ[[\\HHGGFFEEQQRRSSTT<<;;::99 + + ~~##""!! vvwwxxyy + +##$$%%&&~~}}||{{ &&''(())[ZZYYXXWHHIIJJKKYYXXWWVV@@AABBCCaa``__^^8899::;;iihhggff00112233!!""##$$vvuuttssVVWWXXYY0//..--,uuvvwwxx,,++**))mmnnoopp44332211eeffgghh<<;;::99]]^^__``DDCCBBAAUUVVWWXX33221100 zz{{||}} ~}|{{''(())**zzyyxxww !!"" + +**++,,--WVVUUTTSLLMMNNOOUUTTSSRRDDEEFFGG]]\\[[ZZ<<==>>??eeddccbb44556677%%&&''((rrqqppooZZ[[\\]],++**))(yyzz{{||((''&&%%qqrrsstt00//..--iijjkkll88776655aabbccdd@@??>>==YYZZ[[\\//..--,,  + + ~~zzyyxxww++,,--..vvuuttss##$$%%&&~~}}||{{ ..//0011SRRQQPONPPQQRRSSQQPPOONNHHIIJJKKYYXXWWVV@@AABBCCaa``__^^8899::;;~~}}))**++,,nnmmllkk^^__``aa(''&&%%$}}~~$$##""!!uuvvwwxx,,++**))mmnnoopp44332211eeffgghh<<;;::99]]^^__``++**))(( + +   + + vvuuttss//001122rrqqppoo''(())**zzyyxxww !!""223399::MLKKJJIITTUUVVWWMMLLKKJJLLMMNNOOUUTTSSRRDDEEFFGG]]\\[[ZZ<<==>>??||{{zzyy--..//00jjiiccbbbbcciijj$##""!! yyzz{{||((''&&%%qqrrsstt00//..--iijjkkll88776655aabbccdd''&&%%$$  + +  rrqqppoo33445566nnmmllkk++,,--..vvuuttss##$$%%&&~~}}||{{;;<<==>>HHGGFFEEXXYYZZ[[IIHHGGFFPPQQRRSSQQPPOONNHHIIJJKKYYXXWWVV@@AABBCCxxwwvvuu11223344aa``__^^kkllmmnn}}~~$$##""!!uuvvwwxx,,++**))mmnnoopp44332211eeffgghh##""!! + +  nnmmllkk778899::jjiihhgg//001122rrqqppoo''(())**zzyyxxww !!""??@@AABBDDCCBBAA\\]]^^__EEDDCCBBTTUUVVWWMMLLKKJJLLMMNNOOUUTTSSRRDDEEFFGGttssrrqq55667788]]\\[[ZZooppqqrr yyzz{{||((''&&%%qqrrsstt00//..--iijjkkll  + + jjiihgfe;;<<==>>ffeeddcc33445566nnmmllkk++,,--..vvuuttss##$$%%&&~~}}||{{{{zzyyCCDDEEFF@@??>>==``aabbccAA@@??>>XXYYZZ[[IIHHGGFFPPQQRRSSQQPPOONNHHIIJJKKppoonnmm99::;;<>??@@UUTTSSRRwwxxyyzz  yyzz{{||((''&&%%qqrrsstt !! !!""##$$`__^^]]\CCDDEEFF^^]]\\[[;;<<==>>ffeeddcc33445566nnmmllkk++,,--..vvuuttss##$$%%&&ttssrrqqKKQQRRSS87654332hhiijjkk99887766``aabbccAA@@??>>XXYYZZ[[IIHHGGFFPPQQRRSS~~hhggffeeAABBCCDDQQKKJJII{{ + + + + }}~~$$##""!!uuvvwwxx ""##$$%%~~}}|| + + %%&&''((\[[ZZYYXGGHHIIJJZZYYXXWW??@@AABBbbaa``__778899::jjiihhgg//001122rrqqppoo''(())**ppoonnmmTTUUVVWW21100//.llmmnnoo55443322ddeeffgg==<<;;::\\]]^^__EEDDCCBBTTUUVVWW}}||{{zzddccbbaaEEFFGGHHHHGGFFEE   yyzz{{|| + + ~}|&&''(()){{zzyyxx !! ))**++,,XWWVVUUTKKLLMMNNVVUUTTSSCCDDEEFF^^]]\\[[;;<<==>>ffeeddcc33445566nnmmllkk++,,--..llkkjjiiXXYYZZ[[.--,,++*ppqqrrss1100//..hhiijjkk99887766``aabbccAA@@??>>XXYYZZ[[yyxxwwvv``__^^]]IIJJKKLLDDCCBBAA + + }}~~{{zzyyxx**++,,--wwvvuutt""##$$%%~~}}|| + + --..//00TSSRRQQPOOPPQQRRRRQQPPOOGGHHIIJJZZYYXXWW??@@AABBbbaa``__778899::jjiihhgg//001122ccbbaa``\\]]^^__*))((''&ttuuvvww--,,++**llmmnnoo55443322ddeeffgg==<<;;::\\]]^^__uuttssrr\\[[ZZYYMMNNOOPP@@??>>== + +   + +wwvvuutt..//0011ssrrqqpp&&''(()){{zzyyxx !!11223399ONMLKKJJSSTTUUVVNNMMLLKKKKLLMMNNVVUUTTSSCCDDEEFF^^]]\\[[;;<<==>>ffeeddcc33445566__^^]]\\``aabbcc&%%$$##"xxyyzz{{))((''&&ppqqrrss1100//..hhiijjkk99887766``aabbccqqppoonnXXWWVVUUQQRRSSTT<<;;::99  + +  ssrrqqpp22334455oonnmmll**++,,--wwvvuutt""##$$%%~~}}||::;;<<==IIHHGGFFWWXXYYZZJJIIHHGGOOPPQQRRRRQQPPOOGGHHIIJJZZYYXXWW??@@AABBbbaa``__778899::[[ZZYYXXiijjkkll"!! ||}}~~%%$$##""ttuuvvww--,,++**llmmnnoo55443322ddeeffggmmllkkjjTTSSRRQQUUVVWWXX33221100 + +  oonnmmll66778899kkjjiihh..//0011ssrrqqpp&&''(()){{zzyyxx !!>>??@@AAEEDDCCBB[[\\]]^^FFEEDDCCSSTTUUVVNNMMLLKKKKLLMMNNVVUUTTSSCCDDEEFF^^]]\\[[;;<<==>>WWVVUUTTmmnnoopp!! xxyyzz{{))((''&&ppqqrrss1100//..hhiijjkkiihhggffPPOONNMMYYZZ[[\\//..--,,  + + kkjjiihg::;;<<==ggffeedd22334455oonnmmll**++,,--wwvvuutt""##$$%%~~}}||{{zzBBCCDDEEAA@@??>>__``aabbBBAA@@??WWXXYYZZJJIIHHGGOOPPQQRRRRQQPPOOGGHHIIJJZZYYXXWW??@@AABBSSRRQQKKqqrrsstt||}}~~%%$$##""ttuuvvww--,,++**llmmnnooeeddccbbLLKKJJII]]^^__``++**))(( + + fedccbba>>??@@AAccbbaa``66778899kkjjiihh..//0011ssrrqqpp&&''(()){{zzyyxx !!yyxxwwvvFFGGHHII==<<;;::ccddeeff>>==<<;;[[\\]]^^FFEEDDCCSSTTUUVVNNMMLLKKKKLLMMNNVVUUTTSSCCDDEEFFJJIIHHGGuuvvwwxx!! xxyyzz{{))((''&&ppqqrrssaa``__^^HHGGFFEEaabbccdd''&&%%$$  !!""##a``__^^]BBCCDDEE__^^]]\\::;;<<==ggffeedd22334455oonnmmll**++,,--wwvvuutt""##$$%%uuttssrrJJKKQQRR99876543gghhiijj::998877__``aabbBBAA@@??WWXXYYZZJJIIHHGGOOPPQQRRRRQQPPOOGGHHIIJJFFEEDDCCyyzz{{ ||}}~~%%$$##""ttuuvvww]]\\[[ZZDDCCBBAAeeffgghh##""!!!!""##$$~~}} + + $$%%&&'']\\[[ZZYFFGGHHII[[ZZYYXX>>??@@AAccbbaa``66778899kkjjiihh..//0011ssrrqqpp&&''(())qqppoonnSSTTUUVV3221100/kkllmmnn66554433ccddeeff>>==<<;;[[\\]]^^FFEEDDCCSSTTUUVVNNMMLLKKKKLLMMNNBBAA@@?? + + !! xxyyzz{{YYXXWWVV@@??>>==iijjkkll%%&&''((||{{zzyy  (())**++YXXWWVVUJJKKLLMMWWVVUUTTBBCCDDEE__^^]]\\::;;<<==ggffeedd22334455oonnmmll**++,,--mmllkkjjWWXXYYZZ/..--,,+ooppqqrr221100//gghhiijj::998877__``aabbBBAA@@??WWXXYYZZJJIIHHGGOOPPQQRR>>==<<;; + +||}}~~UUTTSSRR<<;;::99mmnnoopp))**++,,xxwwvvuu!!""##$$~~}} + + ,,--..//UTTSSRRQNNOOPPQQSSRRQQPPFFGGHHII[[ZZYYXX>>??@@AAccbbaa``66778899kkjjiihh..//0011iiccbbaa[[\\]]^^+**))(('ssttuuvv..--,,++kkllmmnn66554433ccddeeff>>==<<;;[[\\]]^^FFEEDDCCSSTTUUVV::993322 QQPPOONN88776655qqrrsstt~}|--..//00ttssrrqq%%&&''((||{{zzyy  00112233QPONMLKKRRSSTTUUOONNMMLLJJKKLLMMWWVVUUTTBBCCDDEE__^^]]\\::;;<<==ggffeedd22334455``__^^]]__``aabb'&&%%$$#wwxxyyzz**))((''ooppqqrr221100//gghhiijj::998877__``aabbBBAA@@??WWXXYYZZ1100//.. + +MMLLKKJJ44332211uuvvwwxx {{zzyyxx11223344ppoonnmm))**++,,xxwwvvuu!!""##$$~~}}99::;;<>??@@AAccbbaa``66778899\\[[ZZYYcciijjkk#""!! {{||}}~~&&%%$$##ssttuuvv..--,,++kkllmmnn66554433ccddeeff>>==<<;;[[\\]]^^--,,++** + +  IIHHGGFF00//..--yyzz{{|| + + + +wwvvuutt55667788llkkjjii--..//00ttssrrqq%%&&''((||{{zzyy ==>>??@@FFEEDDCCZZ[[\\]]GGFFEEDDRRSSTTUUOONNMMLLJJKKLLMMWWVVUUTTBBCCDDEE__^^]]\\::;;<<==XXWWVVUUllmmnnoo""!! wwxxyyzz**))((''ooppqqrr221100//gghhiijj::998877__``aabb))((''&&  + +EEDDCCBB,,++**))}}~~ ssrrqqpp99::;;<>??@@AATTSSRRQQppqqrrss{{||}}~~&&%%$$##ssttuuvv..--,,++kkllmmnn66554433ccddeeff%%$$##"" + +  AA@@??>>((''&&%%oonnmmll==>>??@@ddccbbaa55667788llkkjjii--..//00ttssrrqq%%&&''((||{{zzyy zzyyxxwwEEFFGGHH>>==<<;;bbccddee??>>==<>??@@ddccbbaa55667788llkkjjii--..//00ttssrrqq%%&&''((rrqqppooRRSSTTUU43322110jjkkllmm77665544bbccddee??>>==<>==<< {{||}}~~&&%%$$##ssttuuvv !!""##~~ + + 1100//..$$%%&&'']\\[[ZZYMMNNOOPPTTSSRRQQEEFFGGHH\\[[ZZYY==>>??@@ddccbbaa55667788llkkjjii--..//00jjiiccbbZZ[[\\]],++**))(rrssttuu//..--,,jjkkllmm77665544bbccddee??>>==<>??@@ddccbbaa55667788]]\\[[ZZbbcciijj$##""!! zz{{||}}''&&%%$$rrssttuu//..--,,jjkkllmm77665544bbccddee??>>==<>??@@UUTTSSRRooppqqrrzz{{||}}''&&%%$$rrssttuu//..--,,jjkkllmm77665544bbccddee&&%%$$## + + + +  qqppoonn44556677mmllkkjj,,--..//uuttssrr$$%%&&''}}||{{zz xxwwvvuu--..//00ttssrrqq%%&&''((||{{zzyy  00112233QPONMLKKRRSSTTUUOONNMMLLJJKKLLMMWWVVUUTTBBCCDDEE__^^]]\\::;;<<==ggffeedd22334455]]\\[[ZZooppqqrr + + ttssrrqq11223344ppoonnmm))**++,,xxwwvvuu!!""##$$~~}}99::;;<>??@@AAccbbaa``66778899YYXXWWVVssttuuvvppoonnmm55667788llkkjjii--..//00ttssrrqq%%&&''((||{{zzyy ==>>??@@FFEEDDCCZZ[[\\]]GGFFEEDDRRSSTTUUOONNMMLLJJKKLLMMWWVVUUTTBBCCDDEE__^^]]\\::;;<<==UUTTSSRRwwxxyyzz + +llkkjjii99::;;<>??@@AAQQKKJJII{{ + + hgfedccb==>>??@@ddccbbaa55667788llkkjjii--..//00ttssrrqq%%&&''((||{{zzyy zzyyxxwwEEFFGGHH>>==<<;;bbccddee??>>==<>??@@ddccbbaa55667788llkkjjii--..//00ttssrrqq%%&&''((rrqqppooRRSSTTUU43322110jjkkllmm77665544bbccddee??>>==<>==''(())**ZYYXXWWVIIJJKKLLXXWWVVUUAABBCCDD``__^^]]99::;;<>??@@ddccbbaa55667788llkkjjii--..//00jjiiccbbZZ[[\\]],++**))(rrssttuu//..--,,jjkkllmm77665544bbccddee??>>==<>??@@ddccbbaa55667788]]\\[[ZZbbcciijj$##""!! zz{{||}}''&&%%$$rrssttuu//..--,,jjkkllmm77665544bbccddee??>>==<>??GGFFEEDDYYZZ[[\\HHGGFFEEQQRRSSTTPPOONNMMIIJJKKLLXXWWVVUUAABBCCDD``__^^]]99::;;<>??@@UUTTSSRRooppqqrrzz{{||}}''&&%%$$rrssttuu//..--,,jjkkllmm77665544bbccddee##""!!~~}}||**++,,--{{zzyyxxDDEEFFGG??>>==<>==YYZZ[[\\HHGGFFEEQQRRSSTTPPOONNMMIIJJKKLLXXWWVVUUAABBCCDDQQKKJJIIssttuuvv~~##""!! vvwwxxyy++**))((nnooppqq33221100ffgghhii{{zzyyxx..//0011 !!""##wwvvuuttHHIIJJKK;;::9987eeffgghh<<;;::99]]^^__``DDCCBBAAUUVVWWXXLLKKJJIIMMNNOOPPTTSSRRQQEEFFGGHHHHGGFFEEwwxxyyzzzz{{||}}''&&%%$$rrssttuu//..--,,jjkkllmmwwvvuutt22334455$$%%&&''ssrrqqppQQRRSSTT65433221iijjkkll88776655aabbccdd@@??>>==YYZZ[[\\HHGGFFEEQQRRSSTTPPOONNMMIIJJKKLLDDCCBBAA{{ + +~~##""!! vvwwxxyy++**))((nnooppqqssrrqqpp66778899(())**++oonnmmllUUVVWWXX100//..-mmnnoopp44332211eeffgghh<<;;::99]]^^__``DDCCBBAAUUVVWWXXLLKKJJIIMMNNOOPP@@??>>==  zz{{||}}''&&%%$$rrssttuu oonnmmll::;;<<==,,--..//kkjjiiccYYZZ[[\\-,,++**)qqrrsstt00//..--iijjkkll88776655aabbccdd@@??>>==YYZZ[[\\HHGGFFEEQQRRSSTT<<;;::99 + + ~~##""!! vvwwxxyy + + + +kkjjiihh>>??@@AA00112233bbaa``__]]^^__``)((''&&%uuvvwwxx,,++**))mmnnoopp44332211eeffgghh<<;;::99]]^^__``DDCCBBAAUUVVWWXX33221100 zz{{||}} ggffeeddBBCCDDEE44556677^^]]\\[[aabbccii%$$##""!yyzz{{||((''&&%%qqrrsstt00//..--iijjkkll88776655aabbccdd@@??>>==YYZZ[[\\//..--,,  + + ~~ccbbaa``FFGGHHII8899::;;ZZYYXXWWjjkkllmm! }}~~$$##""!!uuvvwwxx,,++**))mmnnoopp44332211eeffgghh<<;;::99]]^^__``++**))(( + +  __^^]]\\JJKKLLMM<<==>>??VVUUTTSSnnooppqq yyzz{{||((''&&%%qqrrsstt00//..--iijjkkll88776655aabbccdd''&&%%$$  + + [[ZZYYXXNNOOPPQQ@@AABBCCRRQQKKJJrrssttuu}}~~$$##""!!uuvvwwxx,,++**))mmnnoopp44332211eeffgghh##""!! + +  !!""##WWVVUUTTRRSSTTUUDDEEFFGGIIHHGGFFvvwwxxyy yyzz{{||((''&&%%qqrrsstt00//..--iijjkkll  + + $$%%&&''SSRRQQPPVVWWXXYYHHIIJJKKEEDDCCBBzz{{ }}~~$$##""!!uuvvwwxx,,++**))mmnnoopp + + (())**++OONNMMLLZZ[[\\]]LLMMNNOOAA@@??>> + +   yyzz{{||((''&&%%qqrrsstt !! ,,--..//KKJJIIHH^^__``aaPPQQRRSS==<<;;:: + + }}~~$$##""!!uuvvwwxx ""##$$%%~~}}|| + + 00112233GGFFEEDDbbccddeeTTUUVVWW99332211  yyzz{{|| + + ~}|&&''(()){{zzyyxx !! 99::;;<>??@@??>>==<>??@@AAccbbaa``66778899kkjjiihh..//0011ssrrqqpp&&''(()){{zzyyxx !!vvuuttssVVWWXXYY++**))((~~ppqqrrss  !!""##a``__^^]BBCCDDEE__^^]]\\::;;<<==ggffeedd22334455oonnmmll**++,,--wwvvuutt""##$$%%rrqqppooZZ[[\\]]''&&%%$$ttuuvvww !!""##$$~~}} + + $$%%&&'']\\[[ZZYFFGGHHII[[ZZYYXX>>??@@AAccbbaa``66778899kkjjiihh..//0011ssrrqqpp&&''(())nnmmllkk^^__``aa##""!! xxyyzz{{ + + ~%%&&''((||{{zzyy  (())**++YXXWWVVUJJKKLLMMWWVVUUTTBBCCDDEE__^^]]\\::;;<<==ggffeedd22334455oonnmmll**++,,--jjiiccbbbbcciijj||}}~~}|{{zzyy))**++,,xxwwvvuu!!""##$$~~}} + + ,,--..//UTTSSRRQNNOOPPQQSSRRQQPPFFGGHHII[[ZZYYXX>>??@@AAccbbaa``66778899kkjjiihh..//0011aa``__^^kkllmmnnbdQZ|vpf˂pZtlJv`fXQJ`ےJltH~fr˂p|ZdQbf~HXQJ`ےJltH~fp`JXQd|Z`f~J`ےltb~f`˂pZZdQbt~HfJ`ےltb~f`˂p`J~fpvHAZp˂Z|dXnvbے`lJtAdQbnXHfpv`ےbtbdQf`vtArdnXvZp˂|drnvpے`JJtArdnXvZp˂drtAH~fHAbےtArd~HfpbHAZbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|`vXnr˂pdQbtHfpvbHAZpdQZ|vXnHAbےlJtApvnbHAZpdQZ|vXnXQr˂nXv`rXQJrtAJlpfH~JXQrd|Zv`fnrXQHAZp˂Z|dXnv|ZdQb`f~fprXQJ`tAJlfH~XQr˂|ZdQ`f~rXQJ`Jlt`vXn`JXQr|ZdQbvnXp˂rdrtAvpfے`JXQtArdnXv`p˂rdrtAvpfZHAbl|ZdQnXv˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfHpZHAbf~H`ےbtbdQf`v˂pZHAdQbt~HfpJ`ےrbdQtAJlpfH~tl|vnXےbHAtbdQZf`vXpZHAbbtlHfpvےbHAbdQZ|vpf˂p`tl|v`f~XQJ`ےJltH~fr˂p|ZdQbf~HXQJ`ےJltH~fے`JXQbtl`ffpJ`ےltb~f`˂pZZdQbt~HfJ`ےltb~f`ے`JfpvHAZp˂Z|dXnvbے`lJtArvnXHAZp˂Z|dtbnf`vZdQbtv`fZp˂|drnvpے`JJtArdnXvZp˂drtAH~fJXQrZdQbtfpv㐙bHAZbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|`vXnr˂pJtArdvnrbHAZpdQZ|vXnHAbےlJtApvnbHAZpdQZ|vXnXQr˂nXv`rXQJrtAJlpfH~JXQrd|Zv`frXQJrtAJlvpfHXnrlJtA~HfprXQJ`tAJlfH~XQr˂|ZdQ`f~rXQJ`Jlt`vXn˂pZHAlJtAnXv`p˂rdrtAvpfے`JXQtArdnXv`p˂rdrtAvpf`JXQr|ZdQXQJ`ے˂rbdtAJlvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfHp`JXQf~fp`ےbtbdQf`v˂pZHAdQbt~Hfp`ےbtbdQf`v˂p`Jrd|vnXےbHAtbdQZf`vXpZHAbbtlHfpvےbHAbdQZ|vpfbے`rd|f~HXQJ`ےJltH~fr˂p|ZdQbf~HXQJ`ےJltH~f˂pZbtlHAZpdQZ|tbn~f`˂pZZdQbt~HfJ`ےltb~f`rbtvnXHAZp˂Z|dXnvbے`lJtArvnXHAZp˂Z|dXnvXQr˂ZdQbtv`f~Zp˂|drnvpے`JJtArdnXvZp˂drtAH~fJXQrZdQbtfpv㐙bHAZbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|`vXnHAbے|ZdQb˂rXQdrtAJvpfvXnrHAے`lJtApvnbHAZpdQZ|vXnl|ZdQv`frXQJrtAJlpfH~JXQrd|Zv`frXQJrtAJlpfH~pZHAbl|ZfpvrXQJ`tAJlfH~XQr˂|ZdQ`f~rXQJ`Jlt`vXn˂p`Jl|ZnXv`fp˂rdrtAvpfے`JXQtArdnXv`p˂rdrtAvpf`JXQrnXv`J`ےltbHf`˂pZJXQrbrd|Xv`f˂rXQdrtAJvpfHbtl~Hfp`ےbtbdQf`v˂pZHAdQbt~Hfp`ےbtbdQf`vے`JdQbtnXv`ےbHAtbdQZf`vXpZHAbbtlHfpvےbHAbdQZ|vpfXQr˂dQbt璕~fpvXQJ`ےJltH~fr˂p|ZdQbf~HXQJ`ےJltH~f˂p`f~fpbHAZpdQZ|vXnHAbےtlJZdQbnHfpJ`ےltb~f`JtArdvnXHAZp˂Z|dXnvbے`lJtArvnXHAZp˂Z|dXnvXQr˂lJtArf~HZp˂|drnvpے`JJtArdnXvZp˂drtAH~fpZHAblJtArnXvbHAZbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|`vXnJXQrvnX˂rXQdrtAJvpfH`JXQrtAd|Xv`fvnrbHAZpdQZ|vXn|ZdQv`f~rXQJrtAJlpfH~JXQrd|Zv`frXQJrtAJlpfH~p`JXQd|ZfpvrXQJ`tAJlfH~XQr˂|ZdQ`f~rXQJ`Jlt`vXnے`Jd|Z`f~p˂rdrtAvpfے`JXQtArdnXv`p˂rdrtAvpf˂pZHAv`fJ`ےltb~f`˂pZZdQbt~HfXQJ`ے˂rbdtAJlvpfHbtlfpv`ےbtbdQf`v˂pZHAdQbt~Hfp`ےbtbdQf`vr˂pdQbtnXv`ےbHAtbdQZf`vXpZHAbbtlHfpvےbHAbdQZ|vpfXQr˂dQbtHfpvXQJ`ےJltH~fr˂p|ZdQbf~HXQJ`ےJltH~fbے`~HfpbHAZpdQZ|vXnHAbےlJtApvnHAZpdQZ|tbn~f`|ZdQbnXv`HAZp˂Z|dXnvbے`lJtArvnXHAZp˂Z|dXnvZHAbl|ZdQf~fpZp˂|drnvpے`JJtArdnXvZp˂|drdrtAH~fp`JXQl|ZdQnXvbHAZbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|`vXnJXQrvnX˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfvXnrtlJf~HrXQJrtAJlpfH~JXQrd|Zv`frXQJrtAJlpfH~ے`JXQbtlvnXrXQJ`tAJlfH~XQr˂|ZdQ`f~rXQJ`tAJlJlt`vXnr˂pbtl`frQp˂rdtAJvpfے`JXQtArdnXv`p˂rdrtAvpf˂p`Jv`f~fJ`ےltb~f`˂pZZdQbt~HfJ`ےltbHf`˂p`tArdfpv`ےbtbdQf`v˂pZHAdQbt~Hfp`ےbtbdQf`vr˂pJtArdv`fےbHAtbdQZf`vXpZHAbbtlHfpvےbHAtbdQZbdQZ|vpfZHAbJtArdJHAZbdQZ|ltbH~fr˂p|ZdQbf~HXQJ`ےJltH~fXQrbtpvnbHAZpdQZ|vXnHAbےlJtApvnbHAZpdQZ|vXnJXQr|ZdQbnXv`fHAZp˂Z|dXnvbے`lJtArvnXHAZp˂Z|dXnv`JXQr|ZdQ~HfpZp˂|drnvpے`JJtArdnXvZp˂|drdrtAH~fے`JXQ|ZdQp˂rdrtAnvp`vXnZHAےtlJfpvbHAZbdQZ|`vXnl|ZXv`f˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfH˂pZHAtl|~fpvrXQJrtAJlpfH~JXQrd|Zv`frXQJrtAJlpfH~˂pZbtlvnXrXQJ`tAJlfH~XQr˂|ZdQ`f~rXQJ`tAJlJlt`vXnr˂pbtlXQJ`ےJltfHfr˂p`JXQrtArdnXv`p˂rdrtAvpfdQbt璐~HfJ`ےltb~f`˂pZZdQbt~HfJ`ےltb~f`bے`ZdQbtnXv`ےbtbdQf`v˂pZHAdQbt~Hfp`ےbtbdQf`vHAbے|ZdQbv`f~fےbHAtbdQZf`vXpZHAbbtlHfpvےbHAtbdQZbdQZ|vpf`JXQr|ZdQbbHAZbdQZ|`vXnZHAbbtl|ZdQbfHfXQJ`ےJltH~flJtArpvnbHAZpdQZ|vXnHAbےlJtApvnbHAZpdQZ|vXnJXQrlJtA`f~HAZp˂Z|dXnvbے`lJtArvnXHAZp˂Z|dXnv`JXQrtlJpvnZp˂|drnvpے`JJtArdnXvZp˂|drdrtAH~f˂pZnXv`p˂rdrtAvpfے`JXQJtAdnXv`pvnbHAZbdQZ|`vXnd|ZXv`f˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfH˂p`Jrd|HfpvrXQJrtAJlpfH~JXQrd|Zv`frXQJrtAJlpfH~˂p`tArdXv`frXQJ`tAJlfH~XQr˂|ZdQ`f~rXQJ`tAJlJlt`vXnHAbےf~fpXQJ`ےJltH~fr˂p|ZdQbf~HrXQJ`p˂rdtAJvpfdQbt~fpvJ`ےltb~f`˂pZZdQbt~HfJ`ےltb~f`XQr˂ZdQbtnXv`ےbtbdQf`v˂pZHAdQbt~Hfp`ےbtbdQf`vJXQr|ZdQb~HfےbHAtbdQZf`vXpZHAbbtlHfpvےbHAtbdQZbdQZ|vpf`JXQrvnXbHAZbdQZ|`vXnZHAbtlJfpvےHAZbdQZ|ltbH~fl|ZdQnXv`bHAZpdQZ|vXnHAbےlJtApvnbHAZpdQZ|vXnpZHAbl|Z`f~fpHAZp˂Z|dXnvbے`lJtArvnXHAZp˂Z|dXnv˂pZHAtl|pvnZp˂|drnvpے`JJtArdnXvZp˂|drdrtAH~f˂p`v`fp˂rdrtAvpfے`JXQtArdnXv`p˂rdrtAnvp`vXnbtlf~H˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfHے`JdQbt璝vnXrXQJrtAJlpfH~JXQrd|Zv`frXQJrtAJlpfH~bے`ZdQbtXv`frXQJ`tAJlfH~XQr˂|ZdQ`f~rXQJ`tAJlJlt`vXnJXQr~HfpXQJ`ےJltH~fr˂p|ZdQbf~HXQJ`ےJltfHfr˂pJtArdfpvJ`ےltb~f`˂pZZdQbt~HfJ`ےltb~f`XQr˂lJtArv`f`ےbtbdQf`v˂pZHAdQbt~Hfp`ےbtbdQf`vJXQrlJtAfpvےbHAtbdQZf`vXpZHAbbtlHfpvےbHAtbdQZbdQZ|vpf˂pZHAvnXbHAZbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|`vXn`JXQr|ZdQnXv`bHAZpdQZ|vXnHAbےlJtApvnbHAZpdQZ|vXnp`JXQd|Z~HfpHAZp˂Z|dXnvbے`lJtArvnXHAZp˂Z|dXnv˂p`Jrd|nrXQJZp˂|dtAnvpے`JJtArdnXvZp˂|drdrtAH~fbے`v`f~fp˂rdrtAvpfے`JXQtArdnXv`p˂rdrtAvpf˂pZbtlf~fp˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfHr˂pdQbt璝vnXrXQJrtAJlpfH~JXQrd|Zv`frXQJrtAJlpfH~XQr˂ZdQbt`ےHArbdQZJltfH~XQr˂|ZdQ`f~rXQJ`tAJlJlt`vXnJXQrpvnXQJ`ےJltH~fr˂p|ZdQbf~HXQJ`ےJltH~fHAbے|ZdQbvnXJ`ےltb~f`˂pZZdQbt~HfJ`ےltb~f`ZHAbl|ZdQv`f~`ےbtbdQf`v˂pZHAdQbt~Hfp`ےbtbdQf`vpZHAbl|ZZp˂|drbnvf`vXpZHAbtlHfpvےbHAtbdQZbdQZ|vpf˂p|ZXv`fbHAZbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|`vXn`JXQrtlJv`fbHAZpdQZ|vXnHAbےlJtApvnbHAZpdQZ|vXnے`JXQbtlfpvHAZp˂Z|dXnvbے`lJtArvnXHAZp˂Z|dXnvے`JdQbnXrXQJ`tAJlpfHnr˂ے`JXQJtArdnXvZp˂|drdrtAH~fdQbt璐~Hfp˂rdrtAvpfے`JXQtArdnXv`p˂rdrtAvpf˂p`tArd~Hfp˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfHr˂pJtArdnXv`rXQJrtAJlpfH~JXQrd|Zv`frXQJrtAJlpfH~XQr˂v`f~ےbHAtbdQZf`vXpZHAbrbt|ZdQ`fHrXQJ`tAJlJlt`vXnlJtArpvnXQJ`ےJltH~fr˂p|ZdQbf~HXQJ`ےJltH~fJXQr|ZdQbvnXJ`ےltb~f`˂pZZdQbt~HfJ`ےltb~f``JXQr|ZdQf~H`ےbtbdQf`v˂pZHAdQbt~Hfp`ےbtbdQf`vp`JXQfpvZp˂|drnvpے`JlJtAdbnXvfpvےbHAtbdQZbdQZ|vpfd|ZXv`fbHAZbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|`vXn˂pZHAtl|v`f~bHAZpdQZ|vXnHAbےlJtApvnbHAZpdQZ|vXn˂pZbtlfpvHAZp˂Z|dXnvbے`lJtArvnXHAZp˂Z|dXnvr˂pnXv`rXQJ`tAJlfH~XQr˂|ZdQ`f~nrXQJZp˂|drdrtAH~fdQbt~fpvp˂rdrtAvpfے`JXQtArdnXv`p˂rdrtAvpfbے`ZdQbtfpv˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfHHAbے|ZdQbnXv`rXQJrtAJlpfH~JXQrd|Zv`frXQJrtAJlpfH~ZHAbf~HےbHAtbdQZf`vXpZHAbbtlHfpv`ےHArbdQZtAJlJlt`vXnl|ZdQnXv`XQJ`ےJltH~fr˂p|ZdQbf~HXQJ`ےJltH~fJXQrlJtAnXv`J`ےltb~f`˂pZZdQbt~HfJ`ےltb~f``JXQrtlJffpv`ےbtbdQf`v˂pZHAdQbt~Hfp`ےbtbdQf`vے`JXQfpvZp˂|drnvpے`JJtArdnXvZp˂|drtbdQZbdQZ|vpfbtlf~HbHAZbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|`vXn˂p`Jrd|f~HbHAZpdQZ|vXnHAbےlJtApvnbHAZpdQZ|vXn˂p`tArdnrXQHAZp˂Z|dXnvbے`lJtArvnXHAZp˂Z|dXnvr˂pnXv`frXQJ`tAJlfH~XQr˂|ZdQ`f~rXQJ`tAJl|drdrtAH~fJtArdfpvp˂rdrtAvpfے`JXQtArdnXv`p˂rdrtAvpfXQr˂ZdQbtfpv˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfHJXQr|ZdQbJ`ےrbdQtAJlpfH~JXQrd|Zv`frXQJrtAJlpfH~`JXQr~fpvےbHAtbdQZf`vXpZHAbbtlHfpvےbHAtbdQZtAJlJlt`vXn|ZdQnXv`XQJ`ےJltH~fr˂p|ZdQbf~HXQJ`ےJltH~fpZHAbl|ZnXv`fJ`ےltb~f`˂pZZdQbt~HfJ`ےltb~f`˂pZHAtl|HAZp˂Z|dtbnf`v˂pZHAdQbt~Hfp`ےbtbdQf`vbtlnXvZp˂|drnvpے`JJtArdnXvZp˂|drtbdQZbdQZ|r˂pbtlf~fpbHAZbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|`vXnے`JdQbt璕~fpvbHAZpdQZ|vXnHAbےlJtApvnbHAZpdQZ|vXnbے`ZdQbnrXQJrtAJlvpfHXnrے`JlJtArvnXHAZp˂Z|dXnv|ZdQb`f~rXQJ`tAJlfH~XQr˂|ZdQ`f~rXQJ`tAJl|dr`vXn`JXQr|ZdQbvnXp˂rdrtAvpfے`JXQtArdnXv`p˂rdrtAvpfXQr˂lJtArnXv˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfHJXQrXv`f`ےbtbdQf`v˂pZHAXQrbtd|Zv`frXQJrtAJlpfH~tlJHfpvےbHAtbdQZf`vXpZHAbbtlHfpvےbHAtbdQZtAJltbdQZf`vXtl|nXv`p˂rdrtAvpfے`JXQtArdnXv`p˂rdrtAvpf˂pZbtlf~fp˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfHpZHAbpJAHrvˍpf|drnvpZdQbtf~HXQJ`ےJltH~fr˂p|ZdQbf~HXQJ`ےJltH~fHAbے|ZdQbvnXJ`ےltb~f`˂pZZdQbt~HfJ`ےltb~f`ے`Jˁ`ZH~ㅐftAJlfH~lJtAfpvbHAZbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|`vXn`JXQrtlJv`fbHAZpdQZ|vXnHAbےlJtApvnbHAZpdQZ|vXnXQr˂QXb㉀۝`vXntbdQZf`vXrd|nXv`p˂rdrtAvpfے`JXQtArdnXv`p˂rdrtAvpf˂p`tArd~Hfp˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfHp`JXQp`ZQXvˍp||dtAnvpZdQbtf~fpXQJ`ےJltH~fr˂p|ZdQbf~HXQJ`ےJltH~fJXQr|ZdQbvnXJ`ےltb~f`˂pZZdQbt~HfJ`ےltb~f`r˂pb㉀ۑpdrQtJltfH~l|ZvnXbHAZbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|`vXn˂pZHAtl|v`f~bHAZpdQZ|vXnHAbےlJtApvnbHAZpdQZ|vXnZHAbJAHrJltbnvf`vXdQbtv`fp˂rdrtAvpfے`JXQtArdnXv`p˂rdrtAvpfbے`ZdQbtfpv˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfHے`JXQˁ`ZQXbAdZ|pfHnr˂lJtAr~HfpXQJ`ےJltH~fr˂p|ZdQbf~HXQJ`ےJltH~fJXQrlJtAnXv`J`ےltb~f`˂pZZdQbt~HfJ`ےltb~f`r˂pb㉀XndrQtf`vXp`JXQd|ZvnXbHAZbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|`vXn˂p`Jrd|f~HbHAZpdQZ|vXnHAbےlJtApvnbHAZpdQZ|vXn`JXQrvˍpfJltnvpr˂pdQbtv`f~fp˂rdrtAvpfے`JXQtArdnXv`p˂rdrtAvpfXQr˂ZdQbtfpv˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfH˂pZH~ㅐfbAdZ|fH~ZHAbl|ZdQpvnXQJ`ےJltH~fr˂p|ZdQbf~HXQJ`ےJltH~fpZHAbl|ZnXv`fJ`ےltb~f`˂pZZdQbt~HfJ`ےltb~f`HAbے`vXndrQtf`vXے`JXQbtlXv`fbHAZbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|`vXnے`JdQbt璕~fpvbHAZpdQZ|vXnHAbےlJtApvnbHAZpdQZ|vXn`JXQrvˍpfJltnvpr˂pJtArd~Hfp˂rdrtAvpfے`JXQtArdnXv`p˂rdrtAvpfXQr˂lJtArnXv˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfH˂p`H~ㅐfbAdZ|fH~`JXQr|ZdQpvnXQJ`ےJltH~fr˂p|ZdQbf~HXQJ`ےJltH~fp`JXQd|Z`f~J`ےltb~f`˂pZZdQbt~HfJ`ےltb~f`JXQr`vXndrQtf`vX˂pZbtlXv`fbHAZbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|`vXnr˂pdQbtHfpvbHAZpdQZ|vXnHAbےlJtApvnbHAZpdQZ|vXn˂pZHAvˍpfJltnvpHAbے|ZdQb~fpvp˂rdrtAvpfے`JXQtArdnXv`p˂rdrtAvpfZHAbl|ZdQnXv˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfHbے`H~ㅐfbAdZ|fH~`JXQrtlJnXv`XQJ`ےJltH~fr˂p|ZdQbf~HXQJ`ےJltH~fے`JXQbtl`ffpJ`ےltb~f`˂pZZdQbt~HfJ`ےltb~f`JXQr`vXndrQtf`vX˂p`tArdf~HbHAZbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|`vXnr˂pJtArdvnrbHAZpdQZ|vXnHAbےlJtApvnbHAZpdQZ|vXn˂p`ZvˍpfJltnvpJXQr|ZdQbfpvp˂rdrtAvpfے`JXQtArdnXv`p˂rdrtAvpf`JXQr|ZdQXQJ`ے˂rbdtAJlvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfHQXb㉀ەH~ㅐfbAdZ|fH~˂pZHAtl|nXv`XQJ`ےJltH~fr˂p|ZdQbf~HXQJ`ےJltH~f˂pZbtlHAZpdQZ|tbn~f`˂pZZdQbt~HfJ`ےltb~f`pJAHr`vXndrQtf`vXbے`ZdQbtf~fpbHAZbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|`vXnHAbے|ZdQb˂rXQdrtAJvpfvXnrHAے`lJtApvnbHAZpdQZ|vXnˁ`ZvˍpfJltnvpJXQrlJtAvnXp˂rdrtAvpfے`JXQtArdnXv`p˂rdrtAvpf`JXQrnXv`J`ےltbHf`˂pZJXQrbrd|Xv`f˂rXQdrtAJvpfHQXb㉀ەH~ㅐfbAdZ|fH~˂p`Jrd|v`fXQJ`ےJltH~fr˂p|ZdQbf~HXQJ`ےJltH~f˂p`f~fpbHAZpdQZ|vXnHAbےtlJZdQbnHfpJ`ےltb~f`p`ZQX`vXndrQtf`vXXQr˂ZdQbt~HfpbHAZbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|`vXnJXQrvnX˂rXQdrtAJvpfH`JXQrtAd|Xv`fvnrbHAZpdQZ|vXnb㉀ۑpvˍpfJltnvppZHAbl|ZvnXp˂rdrtAvpfے`JXQtArdnXv`p˂rdrtAvpf˂pZHAv`fJ`ےltb~f`˂pZZdQbt~HfXQJ`ے˂rbdtAJlvpfHJAHr󙐕H~ㅐfbAdZ|fH~ے`JdQbtv`ffXQJ`ےJltH~fr˂p|ZdQbf~HXQJ`ےJltH~fbے`~HfpbHAZpdQZ|vXnHAbےlJtApvnHAZpdQZ|tbn~f`ˁ`ZQX`vXndrQtf`vXXQr˂lJtArpvnbHAZbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|`vXnJXQrvnX˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfvXnےb㉀ۑpvˍpfJltnvpp`JXQd|ZrXQJ`p˂rdtAJvpfے`JXQtArdnXv`p˂rdrtAvpf˂p`Jv`f~fJ`ےltb~f`˂pZZdQbt~HfJ`ےltbHf``JXQr`ZQXbH~ㅐfbAdZ|fH~r˂pdQbtےHAZbdQZ|ltbH~fr˂p|ZdQbf~HXQJ`ےJltH~fXQrbtpvnbHAZpdQZ|vXnHAbےlJtApvnbHAZpdQZ|vXn˂pZۑpJ`vXndrQtf`vXZHAbl|ZdQp˂rdrtAnvp`vXnZHAےtlJfpvbHAZbdQZ|`vXnl|ZXv`f˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfHHAbےAHr󙐂˕vˍpfJltnvpے`JXQbnXvXQJ`ےJltfHfr˂p`JXQrtArdnXv`p˂rdrtAvpfdQbt璐~HfJ`ےltb~f`˂pZZdQbt~HfJ`ےltb~f``JXQr`ZQXbH~ㅐfbAdZ|fH~r˂p`f~fpbHAZbdQZ|`vXnZHAbbtl|ZdQbfHfXQJ`ےJltH~flJtArpvnbHAZpdQZ|vXnHAbےlJtApvnbHAZpdQZ|vXn˂p`ۑp``vXndrQtf`vX`JXQrvnXp˂rdrtAvpfے`JXQJtAdnXv`pvnbHAZbdQZ|`vXnd|ZXv`f˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfHJXQrZQXb㉀vˍpfJltnvp˂pZv`fXQJ`ےJltH~fr˂p|ZdQbf~HrXQJ`p˂rdtAJvpfdQbt~fpvJ`ےltb~f`˂pZZdQbt~HfJ`ےltb~f`˂pZHAۑpJAHH~ㅐfbAdZ|fH~HAbے~HfpbHAZbdQZ|`vXnZHAbtlJfpvےHAZbdQZ|ltbH~fl|ZdQnXv`bHAZpdQZ|vXnHAbےlJtApvnbHAZpdQZ|vXnbے`r󙐂ˁ``vXndrQtf`vX`JXQrvnXp˂rdrtAvpfے`JXQtArdnXv`p˂rdrtAnvp`vXnbtlf~H˂rXQdrtAJvpfH`JXQrrd|Xv`f˂rXQdrtAJvpfHJXQrZQXb㉀vˍpfJltnvp˂p`v`f~XQJ`ےJltH~fr˂p|ZdQbf~HXQJ`ےJltfHfr˂pJtArdfpvJ`ےltb~f`˂pZZdQbt~HfJ`ےltb~f`˂p`Jۑp`ZH~ㅐfbAdZ|fH~JXQrbfpvbHAZbdQZ|`vXnZHAbtlJfpvbHAZbdQZ|`vXn`JXQr|ZdQnXv`bHAZpdQZ|vXnHAbےlJtApvnbHAZpdQZ|vXnXQr˂QXb㉀۝`vXndrQtKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLL \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv35_1.dat b/vendor/endroid/qr-code/assets/data/qrv35_1.dat new file mode 100644 index 000000000..76cb19811 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv35_1.dat @@ -0,0 +1,313 @@ +~}~}~}~}~}~}~}~}|{|{|{{{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefecccdcdcddcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565433333344343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!~}~}~}~}~}~}~}~}{{{|{|{||{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefecdcdcdcddcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKKKKKKLLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565343434344343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!~}~}~}~}~}~}~}~}{|{|{|{||{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefecdcdcdcddccccccdbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMKLKLKLKLLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565343434344343433321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!~}~}~}~}~}~}~}~}{|{|{|{||{{{{{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefecdcdcdcdcdcdcdcdbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMKLKLKLKLLKLKLKKKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565343434343334343421212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!~}~}~}~}~}~}~}~}{|{|{|{||{|{|{zyzyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefecdcdcdcdcdcdcdcdbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPONMNMNMNMNMNMNMNMKLKLKLKLKKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565343434343434343421212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!~}~}~}~}~}~}~}~}{|{|{|{|zyzyzyzyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefeccccccdccdcdcdcdbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMKLKLKLKLLKJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565343433333434343421212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!~}~}~}~}~}~}~}~}{{{{{{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghgfefefefefefefedcdcdcdccdcdcdcdbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMKLKLKKKKJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787876565656565334343433434343421212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!~}~}~}~}~}~}~}~}|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvuvuvuvutststststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghgfefefefefefefefedcdcdcdccdcdccccbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMKKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787876565656565656565434343433434343421212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutststststststststststsrqrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghgfefefefefefefefedcdcdcdcccdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787876565656565656565434343433333334321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!~}~}~}~}{{{{{|{||{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqrqrqrqpopopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKKKKKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCBABABABABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!~}~}~}~}{|{|{|{||{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopopopopoponmnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghgfefefefefefefefedcdcccccdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMKLKLKLKLLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!~}~}~}~}{|{|{|{||{|{{{{{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmnmnmnmlklklklklklklklklkjijijijijijijijihghghghgfefefefefefefefecdcdcdcddcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMKLKLKLKLLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787876565656565656565333334344343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!~}~}~}~}{|{|{|{|{|{|{|{|zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklklklklkjijijijijijijijijihghghghgfefefefefefefefecdcdcdcddcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMKLKLKLKLKKKKKLKLJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787876565656565656565343434344343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!~}~}~}~}{|{|{|{|{|{|{|{|zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijijijijihghghghghgfefefefefefefefecdcdcdcdccccdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMKLKLKLKLKLKLKLKLJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9878787876565656565656565343434344343333321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!~}~}~}~}{|{{{{{{{|{|{|{|zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefecdcdcdcddcdcbabababababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMKLKLKLKKKLKLKLKLJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9878787878787876565656565656565343434344343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!~}~}~}~}~}~}|{|{|{|{{|{|{|{|zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefecdcdcdccbabababababababababa`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMKKKKLKLKKLKLKLKLJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565343434342121212121212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!~}~}~}~}~}~}~}~}|{|{|{|{{|{|{|{{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefeccccdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKKLKLKLKLJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565656565653433333321212121212121210/0/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!~}~}~}~}~}~}~}~}|{|{|{|{{{{{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefedcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKKLKKKKKKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565656565654343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!    ~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefedcdcdcccdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565654343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!                    + + + + + + + +                 + + + + + + + +                 + + + + + + + +                 + + + + + + + +                  + + + + + + + +                    + + + + + + + +                 + + + + + + + + +                 + + + + + + + + + + +                 + + + + + + + +               + + + + + + + +             + + + + + + + +             + + + + + + + +             + + + + + + + +             + + + + + + + +             + + + + + + + +             + + + + + + + +             + + + + + + + +             + + + + + + + +             + + + + + + + + PPOONNMM YYZZ[[\\//..--,,==>>??@@FFEEDDCCaabbccdd@@??>>== YYZZ[[\\HHGGFFEEQQRRSSTTPPOONNMMIIJJKKLLXXWWVVUU + + AABBCCDDQQKKJJIIssttuuvvkkjjiihg::;;<<==ggffeedd22334455~~oonnmmll##""!! **++,,--vvwwxxyywwvvuutt++**))((""##$$%%nnooppqq~~}}||33221100ffgghhii{{zz""!!BBCCDDEEAA@@??>>__``aabbBBAA@@?? WWXXYYZZJJIIHHGGOOPPQQRRRRQQPPOOGGHHIIJJZZYYXXWW ??@@AABBSSRRQQKKqqrrssttmmllkkjj8899::;;iihhggff00112233||}}~~qqppoonn%%$$##""(())**++ttuuvvwwyyxxwwvv--,,++** !!""##llmmnnoo~~55443322ddeeffgg$$##""!!@@AABBCCCCBBAA@@]]^^__``DDCCBBAA + + UUVVWWXXLLKKJJIIMMNNOOPPTTSSRRQQEEFFGGHH\\[[ZZYY ==>>??@@LLKKJJII]]^^__``++**))((AABBCCDDBBAA@@??eeffgghh<<;;::99]]^^__``DDCCBBAA + + UUVVWWXXLLKKJJIIMMNNOOPPTTSSRRQQEEFFGGHHHHGGFFEEwwxxyyzzfedccbba>>??@@AAccbbaa``66778899kkjjiihh..//0011zz{{||}}ssrrqqpp''&&%%$$&&''(())rrssttuu{{zzyyxx//..--,, !!jjkkllmmyyxxwwvvFFGGHHII==<<;;::ccddeeff>>==<<;;[[\\]]^^FFEEDDCC + +SSTTUUVVNNMMLLKKKKLLMMNNVVUUTTSS + + CCDDEEFFJJIIHHGGuuvvwwxxiihgfedc<<==>>??eeddccbb44556677mmllkkjj!! ,,--..//xxyyzz{{uuttssrr))((''&&$$%%&&''ppqqrrss}}||{{zz1100//..hhiijjkk{{zzyyxxDDEEFFGG??>>==<<aabbccdd@@??>>== YYZZ[[\\HHGGFFEEQQRRSSTTPPOONNMMIIJJKKLLXXWWVVUU + + AABBCCDDHHGGFFEEaabbccdd''&&%%$$EEFFGGHH>>==<<;; iijjkkll88776655aabbccdd@@??>>== YYZZ[[\\HHGGFFEEQQRRSSTTPPOONNMMIIJJKKLLDDCCBBAA!!""##{{a``__^^] + +BBCCDDEE__^^]]\\::;;<<==ggffeedd22334455~~oonnmmll##""!! **++,,--vvwwxxyywwvvuutt++**))((""##$$%%nnooppqquuttssrrJJKKQQRR99876543gghhiijj::998877__``aabbBBAA@@?? WWXXYYZZJJIIHHGGOOPPQQRRRRQQPPOOGGHHIIJJFFEEDDCC!!yyzz{{cbbaa``_ @@AABBCCaa``__^^8899::;;iihhggff00112233||}}~~qqppoonn%%$$##""(())**++ttuuvvwwyyxxwwvv--,,++** !!""##llmmnnoowwvvuuttHHIIJJKK;;::9987eeffgghh<<;;::99]]^^__``DDCCBBAA + + UUVVWWXXLLKKJJIIMMNNOOPPTTSSRRQQEEFFGGHHDDCCBBAAeeffgghh{{##""!!IIJJKKQQ::998765!!""##$$mmnnoopp~~}}44332211eeffgghh<<;;::99]]^^__``DDCCBBAA + + UUVVWWXXLLKKJJIIMMNNOOPP@@??>>==$$%%&&'']\\[[ZZY FFGGHHII[[ZZYYXX >>??@@AAccbbaa``66778899kkjjiihh..//0011zz{{||}}ssrrqqpp''&&%%$$&&''(())rrssttuuqqppoonnSSTTUUVV3221100/ !!""kkllmmnn66554433ccddeeff>>==<<;;[[\\]]^^FFEEDDCC + +SSTTUUVVNNMMLLKKKKLLMMNNBBAA@@??""##$$%%_^^]]\\[ + + DDEEFFGG]]\\[[ZZ<<==>>??eeddccbb44556677mmllkkjj!! ,,--..//xxyyzz{{uuttssrr))((''&&$$%%&&''ppqqrrssssrrqqppQQRRSSTT65433221 iijjkkll88776655aabbccdd@@??>>== YYZZ[[\\HHGGFFEEQQRRSSTTPPOONNMMIIJJKKLL@@??>>== iijjkkllzzyyxxwwRRSSTTUU43322110%%&&''((qqrrsstt||{{zzyy00//..-- iijjkkll88776655aabbccdd@@??>>== YYZZ[[\\HHGGFFEEQQRRSSTT<<;;::99(())**++YXXWWVVUJJKKLLMMWWVVUUTT + + BBCCDDEE__^^]]\\::;;<<==ggffeedd22334455~~oonnmmll##""!! **++,,--vvwwxxyymmllkkjj + +WWXXYYZZ/..--,,+##$$%%&&ooppqqrr~~}}||{{221100//gghhiijj::998877__``aabbBBAA@@?? WWXXYYZZJJIIHHGGOOPPQQRR>>==<<;;&&''(())[ZZYYXXWHHIIJJKKYYXXWWVV + +@@AABBCCaa``__^^8899::;;iihhggff00112233||}}~~qqppoonn%%$$##""(())**++ttuuvvwwoonnmmll UUVVWWXX100//..-!!""##$$mmnnoopp~~}}44332211eeffgghh<<;;::99]]^^__``DDCCBBAA + + UUVVWWXXLLKKJJIIMMNNOOPP<<;;::99!!""##$$mmnnooppvvuuttssVVWWXXYY0//..--,))**++,,uuvvwwxxxxwwvvuu,,++**))!!""##$$mmnnoopp~~}}44332211eeffgghh<<;;::99]]^^__``DDCCBBAA + + UUVVWWXX33221100,,--..//UTTSSRRQNNOOPPQQSSRRQQPPFFGGHHII[[ZZYYXX >>??@@AAccbbaa``66778899kkjjiihh..//0011zz{{||}}iiccbbaa [[\\]]^^~}|{{+**))(('''(())**ssttuuvvzzyyxxww..--,,++ !!""kkllmmnn66554433ccddeeff>>==<<;;[[\\]]^^FFEEDDCC + +SSTTUUVV::993322**++,,--WVVUUTTSLLMMNNOOUUTTSSRR DDEEFFGG]]\\[[ZZ<<==>>??eeddccbb44556677mmllkkjj!! ,,--..//xxyyzz{{kkjjiicc + + YYZZ[[\\~-,,++**)%%&&''((qqrrsstt||{{zzyy00//..-- iijjkkll88776655aabbccdd@@??>>== YYZZ[[\\HHGGFFEEQQRRSSTT88776655%%&&''((qqrrssttrrqqppooZZ[[\\]]~}|,++**))(--..//00yyzz{{||ttssrrqq((''&&%%%%&&''((qqrrsstt||{{zzyy00//..-- iijjkkll88776655aabbccdd@@??>>== YYZZ[[\\//..--,,00112233QPONMLKK RRSSTTUUOONNMMLLJJKKLLMMWWVVUUTT + + BBCCDDEE__^^]]\\::;;<<==ggffeedd22334455~~``__^^]]__``aabbzzyyxxww'&&%%$$#++,,--..wwxxyyzzvvuuttss**))((''##$$%%&&ooppqqrr~~}}||{{221100//gghhiijj::998877__``aabbBBAA@@?? WWXXYYZZ1100//....//0011SRRQQPONPPQQRRSSQQPPOONNHHIIJJKKYYXXWWVV + +@@AABBCCaa``__^^8899::;;iihhggff00112233||}}~~bbaa``__]]^^__``}|{{zzyy)((''&&%))**++,,uuvvwwxxxxwwvvuu,,++**))!!""##$$mmnnoopp~~}}44332211eeffgghh<<;;::99]]^^__``DDCCBBAA + + UUVVWWXX~~}}44332211))**++,,uuvvwwxxnnmmllkk ^^__``aa{{zzyyxx(''&&%%$11223344}}~~ppoonnmm$$##""!!))**++,,uuvvwwxxxxwwvvuu,,++**))!!""##$$mmnnoopp~~}}44332211eeffgghh<<;;::99]]^^__``++**))((99::;;<>??@@AAccbbaa``66778899\\[[ZZYY + + cciijjkkvvuuttss#""!! //001122{{||}}~~rrqqppoo&&%%$$##''(())**ssttuuvvzzyyxxww..--,,++ !!""kkllmmnn66554433ccddeeff>>==<<;;[[\\]]^^--,,++**223399::MLKKJJII + + TTUUVVWWMMLLKKJJLLMMNNOOUUTTSSRR DDEEFFGG]]\\[[ZZ<<==>>??eeddccbb44556677^^]]\\[[ aabbcciixxwwvvuu%$$##""!--..//00yyzz{{||ttssrrqq((''&&%%%%&&''((qqrrsstt||{{zzyy00//..-- iijjkkll88776655aabbccdd@@??>>== YYZZ[[\\||{{zzyy00//..----..//00yyzz{{||jjiiccbb + + + +bbcciijjwwvvuutt$##""!! 55667788llkkjjii --..//00yyzz{{||ttssrrqq((''&&%%%%&&''((qqrrsstt||{{zzyy00//..-- iijjkkll88776655aabbccdd''&&%%$$==>>??@@FFEEDDCCZZ[[\\]]GGFFEEDD RRSSTTUUOONNMMLLJJKKLLMMWWVVUUTT + + BBCCDDEE__^^]]\\::;;<<==XXWWVVUU llmmnnoorrqqppoo33445566nnmmllkk""!! ++,,--..wwxxyyzzvvuuttss**))((''##$$%%&&ooppqqrr~~}}||{{221100//gghhiijj::998877__``aabb))((''&&;;<<==>>HHGGFFEE XXYYZZ[[IIHHGGFFPPQQRRSSQQPPOONNHHIIJJKKYYXXWWVV + +@@AABBCCaa``__^^8899::;;ZZYYXXWW + + jjkkllmmttssrrqq! 11223344}}~~ppoonnmm$$##""!!))**++,,uuvvwwxxxxwwvvuu,,++**))!!""##$$mmnnoopp~~}}44332211eeffgghh<<;;::99]]^^__``xxwwvvuu,,++**))11223344}}~~aa``__^^ kkllmmnnssrrqqpp99::;;<>??@@AATTSSRRQQppqqrrssnnmmllkk778899::jjiihhgg//001122{{||}}~~rrqqppoo&&%%$$##''(())**ssttuuvvzzyyxxww..--,,++ !!""kkllmmnn66554433ccddeeff%%$$##""??@@AABBDDCCBBAA\\]]^^__EEDDCCBB + + TTUUVVWWMMLLKKJJLLMMNNOOUUTTSSRR DDEEFFGG]]\\[[ZZ<<==>>??VVUUTTSSnnooppqqppoonnmm55667788llkkjjii --..//00yyzz{{||ttssrrqq((''&&%%%%&&''((qqrrsstt||{{zzyy00//..-- iijjkkll88776655aabbccddttssrrqq((''&&%%55667788]]\\[[ZZooppqqrroonnmmll==>>??@@ddccbbaa55667788llkkjjii --..//00yyzz{{||ttssrrqq((''&&%%%%&&''((qqrrsstt||{{zzyy00//..-- iijjkkllzzyyxxwwEEFFGGHH>>==<<;;bbccddee??>>==<<ZZ[[\\]]GGFFEEDD RRSSTTUUOONNMMLLJJKKLLMMWWVVUUTT + + BBCCDDEEKKJJIIHHttuuvvwwjjiihgfe;;<<==>>ffeeddcc33445566nnmmllkk""!! ++,,--..wwxxyyzzvvuuttss**))((''##$$%%&&ooppqqrr~~}}||{{221100//gghhiijj{{zzyy!!CCDDEEFF@@??>>==``aabbccAA@@??>> XXYYZZ[[IIHHGGFFPPQQRRSSQQPPOONNHHIIJJKKYYXXWWVV + +@@AABBCCRRQQKKJJrrssttuullkkjjii99::;;<>??@@ddccbbaa55667788llkkjjii --..//00yyzz{{||ttssrrqq((''&&%%%%&&''((qqrrsstt||{{zzyy00//..-- iijjkkllllkkjjii ==>>??@@UUTTSSRRwwxxyyzzfedccbbaEEFFGGHH\\[[ZZYY ==>>??@@ddccbbaa55667788llkkjjii --..//00yyzz{{||ttssrrqq((''&&%%%%&&''((qqrrssttrrqqppooRRSSTTUU43322110 !!jjkkllmm77665544bbccddee??>>==<<ZZ[[\\]]GGFFEEDD RRSSTTUUOONNMMLLJJKKLLMMCCBBAA@@!!""##$$`__^^]]\ + + CCDDEEFF^^]]\\[[;;<<==>>ffeeddcc33445566nnmmllkk""!! ++,,--..wwxxyyzzvvuuttss**))((''##$$%%&&ooppqqrrttssrrqqKKQQRRSS87654332hhiijjkk99887766``aabbccAA@@??>> XXYYZZ[[IIHHGGFFPPQQRRSSQQPPOONNHHIIJJKKEEDDCCBB!!""zz{{baa``__^ AABBCCDD``__^^]]99::;;<>==<<%%&&''((\[[ZZYYXGGHHIIJJZZYYXXWW ??@@AABBbbaa``__778899::jjiihhgg//001122{{||}}~~rrqqppoo&&%%$$##''(())**ssttuuvvppoonnmm TTUUVVWW21100//. !!""##llmmnnoo~~55443322ddeeffgg==<<;;::\\]]^^__EEDDCCBB + + TTUUVVWWMMLLKKJJLLMMNNOOAA@@??>>##$$%%&&^]]\\[[Z + + EEFFGGHH\\[[ZZYY ==>>??@@ddccbbaa55667788llkkjjii --..//00yyzz{{||ttssrrqq((''&&%%%%&&''((qqrrssttddccbbaaEEFFGGHHHHGGFFEE$$%%&&'']\\[[ZZY MMNNOOPPTTSSRRQQEEFFGGHH\\[[ZZYY ==>>??@@ddccbbaa55667788llkkjjii --..//00yyzz{{||jjiiccbb + + ZZ[[\\]]~}|,++**))(&&''(())rrssttuu{{zzyyxx//..--,, !!jjkkllmm77665544bbccddee??>>==<<ZZ[[\\]]GGFFEEDD RRSSTTUU;;::9933))**++,,XWWVVUUTKKLLMMNNVVUUTTSS + + CCDDEEFF^^]]\\[[;;<<==>>ffeeddcc33445566nnmmllkk""!! ++,,--..wwxxyyzzllkkjjii + + XXYYZZ[[.--,,++*$$%%&&''ppqqrrss}}||{{zz1100//..hhiijjkk99887766``aabbccAA@@??>> XXYYZZ[[IIHHGGFFPPQQRRSS==<<;;::''(())**ZYYXXWWVIIJJKKLLXXWWVVUU + + AABBCCDD``__^^]]99::;;<>??@@ddccbbaa55667788llkkjjii --..//00yyzz{{||\\[[ZZYY MMNNOOPP@@??>>==,,--..//UTTSSRRQ + + UUVVWWXXLLKKJJIIMMNNOOPPTTSSRRQQEEFFGGHH\\[[ZZYY ==>>??@@ddccbbaa55667788]]\\[[ZZ + +bbcciijjwwvvuutt$##""!! ..//0011zz{{||}}ssrrqqpp''&&%%$$&&''(())rrssttuu{{zzyyxx//..--,, !!jjkkllmm77665544bbccddee??>>==<<ZZ[[\\]]..--,,++11223399ONMLKKJJ + +SSTTUUVVNNMMLLKKKKLLMMNNVVUUTTSS + + CCDDEEFF^^]]\\[[;;<<==>>ffeeddcc33445566__^^]]\\``aabbccyyxxwwvv&%%$$##",,--..//xxyyzz{{uuttssrr))((''&&$$%%&&''ppqqrrss}}||{{zz1100//..hhiijjkk99887766``aabbccAA@@??>> XXYYZZ[[00//..--//001122RQQPONMLQQRRSSTTPPOONNMMIIJJKKLLXXWWVVUU + + AABBCCDD``__^^]]99::;;<>??@@ddccbbaa55667788TTSSRRQQ + + UUVVWWXX3322110099::;;<>??@@UUTTSSRRooppqqrroonnmmll66778899kkjjiihh..//0011zz{{||}}ssrrqqpp''&&%%$$&&''(())rrssttuu{{zzyyxx//..--,, !!jjkkllmm77665544bbccddee&&%%$$##>>??@@AAEEDDCCBB[[\\]]^^FFEEDDCC + +SSTTUUVVNNMMLLKKKKLLMMNNVVUUTTSS + + CCDDEEFF^^]]\\[[;;<<==>>WWVVUUTT mmnnooppqqppoonn44556677mmllkkjj!! ,,--..//xxyyzz{{uuttssrr))((''&&$$%%&&''ppqqrrss}}||{{zz1100//..hhiijjkk99887766``aabbcc((''&&%%<<==>>??GGFFEEDD YYZZ[[\\HHGGFFEEQQRRSSTTPPOONNMMIIJJKKLLXXWWVVUU + + AABBCCDD``__^^]]99::;;<>??@@AAccbbaa``66778899YYXXWWVVssttuuvv__^^]]\\JJKKLLMM''&&%%$$==>>??@@FFEEDDCCZZ[[\\]]GGFFEEDD RRSSTTUUOONNMMLLJJKKLLMMWWVVUUTT + + BBCCDDEE__^^]]\\::;;<<==UUTTSSRRwwxxyyzz[[ZZYYXX NNOOPPQQ{{##""!!AABBCCDDBBAA@@??^^__``aaCCBBAA@@ + + VVWWXXYYKKJJIIHHNNOOPPQQSSRRQQPPFFGGHHII[[ZZYYXX >>??@@AAQQKKJJII!!""##{{WWVVUUTT + + RRSSTTUUzzyyxxwwEEFFGGHH>>==<<;;bbccddee??>>==<<ZZ[[\\]]GGFFEEDD RRSSTTUUOONNMMLLJJKKLLMMWWVVUUTT + + BBCCDDEEHHGGFFEE$$%%&&''SSRRQQPP + + VVWWXXYYvvuuttssIIJJKKQQ::998765ffgghhii;;::9988^^__``aaCCBBAA@@ + + VVWWXXYYKKJJIIHHNNOOPPQQSSRRQQPPFFGGHHIIDDCCBBAA(())**++OONNMMLLZZ[[\\]]rrqqppooRRSSTTUU43322110 !!jjkkllmm77665544bbccddee??>>==<<ZZ[[\\]]GGFFEEDD RRSSTTUUOONNMMLLJJKKLLMM@@??>>==,,--..//KKJJIIHH^^__``aannmmllkk VVWWXXYY0//..--,""##$$%%nnooppqq~~}}||33221100ffgghhii;;::9988^^__``aaCCBBAA@@ + + VVWWXXYYKKJJIIHHNNOOPPQQ<<;;::9900112233GGFFEEDDbbccddeejjiiccbb + + ZZ[[\\]]~}|,++**))(&&''(())rrssttuu{{zzyyxx//..--,, !!jjkkllmm77665544bbccddee??>>==<<ZZ[[\\]]GGFFEEDD RRSSTTUU3322110099::;;<>??@@??>>==<< !!jjkkllmm]]\\[[ZZ + +bbcciijjwwvvuutt$##""!! ..//0011zz{{||}}ssrrqqpp''&&%%$$&&''(())rrssttuu{{zzyyxx//..--,, !!jjkkllmm77665544bbccddee??>>==<<ZZ[[\\]]++**))((AABBCCDD;;::9988""##$$%%nnooppqqYYXXWWVV kkllmmnnssrrqqpp22334455~~oonnmmll##""!! **++,,--vvwwxxyywwvvuutt++**))((""##$$%%nnooppqq~~}}||33221100ffgghhii;;::9988^^__``aa''&&%%$$EEFFGGHH77665544&&''(())rrssttuuUUTTSSRRooppqqrroonnmmll66778899kkjjiihh..//0011zz{{||}}ssrrqqpp''&&%%$$&&''(())rrssttuu{{zzyyxx//..--,, !!jjkkllmm77665544bbccddee{{##""!!IIJJKKQQ~~}}||33221100**++,,--vvwwxxyyQQKKJJIIssttuuvvkkjjiihg::;;<<==ggffeedd22334455~~oonnmmll##""!! **++,,--vvwwxxyywwvvuutt++**))((""##$$%%nnooppqq~~}}||33221100ffgghhiizzyyxxwwRRSSTTUU{{zzyyxx//..--,,..//0011zz{{||}}HHGGFFEEwwxxyyzzfedccbba>>??@@AAccbbaa``66778899kkjjiihh..//0011zz{{||}}ssrrqqpp''&&%%$$&&''(())rrssttuu{{zzyyxx//..--,, !!jjkkllmmvvuuttssVVWWXXYYwwvvuutt++**))((22334455~~DDCCBBAA!!""##{{a``__^^] + +BBCCDDEE__^^]]\\::;;<<==ggffeedd22334455~~oonnmmll##""!! **++,,--vvwwxxyywwvvuutt++**))((""##$$%%nnooppqqrrqqppooZZ[[\\]]ssrrqqpp''&&%%$$66778899@@??>>==$$%%&&'']\\[[ZZY FFGGHHII[[ZZYYXX >>??@@AAccbbaa``66778899kkjjiihh..//0011zz{{||}}ssrrqqpp''&&%%$$&&''(())rrssttuunnmmllkk ^^__``aaoonnmmll##""!! ::;;<<==<<;;::99(())**++YXXWWVVUJJKKLLMMWWVVUUTT + + BBCCDDEE__^^]]\\::;;<<==ggffeedd22334455~~oonnmmll##""!! **++,,--vvwwxxyyjjiiccbb + + + +bbcciijjkkjjiihh>>??@@AA33221100,,--..//UTTSSRRQNNOOPPQQSSRRQQPPFFGGHHII[[ZZYYXX >>??@@AAccbbaa``66778899kkjjiihh..//0011zz{{||}}aa``__^^ kkllmmnnggffeeddBBCCDDEEbdQZ|drtAvpfH~f˂pZ˂pZtlJnXv`v`fp˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂pJtAd|ZdQbnXv`f~HpvnXQJ`ےbHAZJltbdQZ|H~f`vXnp`JXQd|Zd|ZXv`f`f~˂rXQJ`ےdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbtXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f`˂p`J˂p`Jrd|~fpvHfpvHAZp˂rXQJZ|drtAJlXnvpfH~bے`JXQrlJtAd|ZdQbnXv`fHfpvrXQJ`ےbrtAJltbdQpfH~f`v˂p`tArdtArdnXvXv`fZp˂rXQJ`|drtAJlnvpfH~ے`JXQr˂JtArd|ZdQnXv`f~Zp˂rXQJ`|drtAJlnvpfH~r˂pr˂pJtArd`f~fp~HfbHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQbtltArd|ZdQbnXv`fHfp˂rXQJ`ےdrtAJltvpfdrtAJltH~f`vXnHAbےHAbےtArdf~fp~HfpXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAb|ZdQbtlJf~HfpvrXQJ`bHAZp˂rbdQZ|dtAJ`vXnvpfr˂pdQbtdQbt~fpvHfpvJ`ےbHAZpltbdQZ|~f`vXn˂pZHAbےZdQbtlJtA~HfpvnJ`ےbHAZpltbdQZ|~f`vXnXQr˂XQr˂ZdQbtnXv`nXvrXQJ`ےbrtAJltbdQpfH~f`vJXQr˂pZHAd|ZdQbtv`f~HfpnrXQ`ےbHAZp˂tbdQZ|df`vXnvJXQr|ZdQb|ZdQb`f~fp~HfrXQJ`ےbHAtAJltbdQZfH~f`vXXQr˂pZHAb|ZdQbtl`f~HfpvrXQJ`ےbHAtAJltbdQZfH~f`vX`JXQr`JXQr|ZdQvnXpvnp˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂pJtAd|ZdQbnXv`f~HpvnXQJ`ےbHAZJltbdQZ|H~fJltbdQZ|`vXnvpf`JXQr`JXQr|ZdQbvnXvnXbHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQtlJtArdfpvnXv`ےHAZp˂rbdQZ|drtAltbvpfH~fZHAbl|ZdQl|ZdQnXv`nXvbHAZp˂rXQdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|pvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfHpZHAbpZHAbl|Zf~H`f~fp`ےbHAZp˂tbdQZ|df`vXnv˂pZHAbے`dQbtlJtAr~HfpvnXJ`ےHAZp˂rbdQZ|dtAJlXnvpfH~˂pZHAtl|tl|vnXpvnےbHAZp˂tbdQZ|drf`vXnvppZHAbے`JbtlJtArdHfpvnXvےbHAZp˂tbdQZ|drf`vXnvp˂pZ˂pZbtlv`fXv`fXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAb|ZdQbtlJf~HfpvrXQJ`bHAZp˂rbdQZ|dtAJ`vXnbdQZ|drtAvpfH~f˂p`˂p`tl|v`fv`f~p˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂ptArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAJltnvpH~f`vXnے`JXQbtlbtlf~H`ffp˂rXQJ`ےdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbtXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f`ے`Jے`JdQbt璅fpvvnXHAZp˂rXQJZ|drtAJlXnvpfH~bے`JXQrlJtArd|ZvnXv`fHAZp˂rXQJZ|drtAJltbnpfH~f`vbے`ZdQbtZdQbtv`fXv`fZp˂rXQJ`|drtAJlnvpfH~ے`JXQr˂JtArd|ZdQnXv`f~Zp˂rXQJ`|drtAJlnvpfH~HAbےHAbے|ZdQb~Hfp~fpvbHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQtlJtArdfpvnXv`ےHAZp˂rbdQZ|drtAltbvpfdrtAJltH~f`vXnJXQrJXQrZdQbt~HfpfpvXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAb|ZdQbtlJf~HfpvXQJ`ےbHAZJltbdQZ|fHf`vXnr˂pr˂pJtArdJtArdfpvvnrJ`ےbHAZpltbdQZ|~f`vXn˂pZHAbےZdQbtlJtA~HfpvnJ`ےbHAZpltbdQZ|~f`vXnXQr˂XQr˂lJtArnXv`v`frXQJ`ےbrtAJltbdQpfH~f`vJXQr˂pZHAd|ZdQbtv`f~HfprXQJ`ےbrtAJltbdQvpfHf`vXnrJXQrlJtAlJtA~HfpfpvrXQJ`ےbHAtAJltbdQZfH~f`vXXQr˂pZHAb|ZdQbtl`f~HfpvrXQJ`ےbHAtAJltbdQZfH~f`vX`JXQr`JXQrtlJvnXnXv`p˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂ptArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAJltnvpH~fJltbdQZ|`vXnvpf˂pZHA˂pZHAlJtAvnXnXv`ːbHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQtlJtArdfpvnXv`bHAZp˂rbdQZ|drtA`vXnvpf`JXQr`JXQr|ZdQ|ZdQnXv`XQJ`ےbHAZp˂rbdQZ|dtAJlvXnvpfHHAbے`JXQrlJtArd|pvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfHp`JXQp`JXQd|Zf~fp~Hfp`ےbHAZp˂tbdQZ|df`vXnv˂pZHAbے`dQbtlJtAr~HfpvnX`ےbHAZp˂tbdQZ|df`vXnv˂p`J˂p`Jrd|rd|vnXnrXQJےbHAZp˂tbdQZ|dtAf`vXnvppZHAbے`JbtlJtArdHfpvnXvےbHAZp˂tbdQZ|drf`vXnvp˂p`˂p`tArdv`f~f~HXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAb|ZdQbtlJf~HfpvXQJ`ےbHAZJltbdQZ|fHf`vXnbdQZ|drtAvpfH~fbے`bے`rd|v`f~ff~Hp˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂ptArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAJltvpfH~f˂pZ˂pZbtlbtlf~fpHAZp˂rXQdQZ|drtAJtbnvpfH~f``JXQr˂pZrd|ZdQbtXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f`r˂prbtdQbtvnXvnXHAZp˂rXQJZ|drtAJlXnvpfH~bے`JXQrlJtArd|ZvnXv`fHAZp˂rXQJZ|drtAJlXnvpfH~XQr˂XQr˂ZdQbtZdQbtv`f~`ےHAZp˂rbdQZ|drJltnvpfH~ے`JXQr˂JtArd|ZdQnXv`f~Zp˂rXQJ`|drtAJlnvpfH~JXQrJXQrb|ZdQbfpvfpvbHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQtlJtArdfpvnXv`bHAZp˂rbdQZ|drtA`vXnvpfdrtAJltH~f`vXnJXQrJXQrZdQbtpvnfpvXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAb|ZdQbtlJf~HfpvXQJ`ےbHAZJltbdQZ|H~f`vXnHAbےHAbے|ZdQb|ZdQbvnX˂rXQJ`ےdrtAJltbvpf~f`vXnr˂pZHAے`ZdQbtlJtA~HfpvnJ`ےbHAZpltbdQZ|~f`vXnZHAbl|ZdQl|ZdQv`fv`f~rXQJ`ےbrtAJltbdQpfH~f`vJXQr˂pZHAd|ZdQbtv`f~HfprXQJ`ےbrtAJltbdQpfH~f`vpZHAbpZHAbl|Zl|ZfpvZp˂rXQJ`|drtAJlbnvfH~f`vXXQr˂pZHA|ZdQbtl`f~HfpvrXQJ`ےbHAtAJltbdQZfH~f`vX˂pZHAtl|tl|nXv`nXv`p˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂ptArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAJltvpfH~fJltbdQZ|`vXnvpf˂p`J˂p|Zl|ZXv`fnXv`fbHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQtlJtArdfpvnXv`bHAZp˂rbdQZ|drtA`vXnvpf`JXQr`JXQrtlJnXv`v`fJ`ےbHAZpltbdQZ|Hf`vXn˂pZHAbےJXQrblJtArd|pvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfHے`JXQbtlbtl~Hfpfpv`ےbHAZp˂tbdQZ|df`vXnv˂pZHAbے`dQbtlJtAr~HfpvnX`ےbHAZp˂tbdQZ|df`vXnvے`Jے`JdQbtdQbnXnXv`rXQJ`ےbHAtAJltbdQZpfHf`vXnr˂pZHAbے`JXQbtlJtArdHfpvnXvےbHAZp˂tbdQZ|drf`vXnvpbے`ZdQbtZdQbtf~Hf~fpXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAb|ZdQbtlJf~HfpvXQJ`ےbHAZJltbdQZ|H~f`vXnbdQZ|drtAvpfH~fXQr˂dQbtdQbt璐~Hf~fpvp˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂ptArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAJltvpfH~f˂p`˂p`tArdf~fp~HfpbHAZp˂rXQdQZ|drtAJvXnvpfHHAbے`JXQrtlJrd|ZdQbnXv`fHfp˂rXQJ`ےdrtAJltbvpfH~f`r˂pJtArdJtArdvnXnXv`HAZp˂rXQJZ|drtAJlXnvpfH~bے`JXQrlJtArd|ZvnXv`fHAZp˂rXQJZ|drtAJlXnvpfH~XQr˂XQr˂lJtArv`f~f~HےbHAZp˂tbdQZ|drf`vXnvppZHAbے`JrbtJtArd|ZdQnXv`fHZp˂rXQJ`|drtAJlnvpfH~JXQrlJtAlJtAfpvvnXbHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQtlJtArdfpvnXv`bHAZp˂rbdQZ|drtA`vXnvpfdrtAJltH~f`vXnpZHAblJtArlJtArpvnnXvXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAb|ZdQbtlJf~HfpvXQJ`ےbHAZJltbdQZ|H~f`vXnJXQrJXQr|ZdQbvnXvnX˂rXQJ`ےdrtAJltbvpfH~f``JXQr˂pZtAd|ZdQbtXv`f~HfvnrJ`ےbHAZpltbdQZ|~f`vXn`JXQr|ZdQ|ZdQv`f~f~HrXQJ`ےbrtAJltbdQpfH~f`vJXQr˂pZHAd|ZdQbtv`f~HfprXQJ`ےbrtAJltbdQpfH~f`vp`JXQp`JXQd|ZfpvfpvZp˂rXQJ`|drtAJlnvpfH~ے`JXQr˂lJtAd|ZdQbnXv`f~fpvrXQJ`ےbHAtAJltbdQZfH~f`vX˂p`Jrd|rd|nXv`v`fp˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂ptArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAJltvpfH~fJltbdQZ|`vXnvpfے`Jd|Zd|ZXv`f`f~bHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQtlJtArdfpvnXv`bHAZp˂rbdQZ|drtA`vXnvpf˂pZHA˂pZHAtl|v`fv`f~J`ےbHAZpltbdQZ|~f`vXn˂pZHAbےZdQbtlJtA~HfpvnXQJ`ےbHAZp˂rbdQZ|dtAJlvXnvpfH˂pZbtlbtlfpvfpv`ےbHAZp˂tbdQZ|df`vXnv˂pZHAbے`dQbtlJtAr~HfpvnX`ےbHAZp˂tbdQZ|df`vXnvr˂pr˂pdQbtnXv`nXv`rXQJ`ےbHAtAJltbdQZfH~f`vXXQr˂pZHAb|ZdQbtl`f~HfpvnrXQJےbHAZp˂tbdQZ|dtAf`vXnvpXQr˂ZdQbtZdQbtf~fp~HfpXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAb|ZdQbtlJf~HfpvXQJ`ےbHAZJltbdQZ|H~f`vXnbdQZ|drtAvpfH~fXQr˂dQbtdQbt~fpvHfpvp˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂ptArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAJltvpfH~fbے`bے`ZdQbt~HfpfpvbHAZp˂rXQdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|pvnXv`fHAZp˂rXQdQZ|drtAJtbnvpfH~f`HAbے|ZdQb|ZdQbnXv`nXv`HAZp˂rXQJZ|drtAJlXnvpfH~bے`JXQrlJtArd|ZvnXv`fHAZp˂rXQJZ|drtAJlXnvpfH~ZHAbZHAbl|ZdQf~Hf~fpےbHAZp˂tbdQZ|drf`vXnvppZHAbے`JbtlJtArdHfpvnXv`ےHAZp˂rbdQZ|drJltnvpfH~pZHAbl|Zl|ZvnXvnXbHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQtlJtArdfpvnXv`bHAZp˂rbdQZ|drtA`vXnvpfH~fdrtAJltH~f`vXnp`JXQl|ZdQl|ZdQnXv`nXvXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAb|ZdQbtlJf~HfpvXQJ`ےbHAZJltbdQZ|H~f`vXnJXQrJXQrlJtAvnXnXv`˂rXQJ`ےdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbtXv`f~Hf˂rXQJ`ےdrtAJltbvpf~f`vXnr`JXQrtlJtlJf~HffpvrXQJ`ےbrtAJltbdQpfH~f`vJXQr˂pZHAd|ZdQbtv`f~HfprXQJ`ےbrtAJltbdQpfH~f`vے`JXQے`JXQbtlfpvvnXZp˂rXQJ`|drtAJlnvpfH~ے`JXQr˂JtArd|ZdQnXv`f~Zp˂rXQJ`|drtAJlbnvfH~f`vXے`JdQbtdQbtv`fv`ffp˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂ptArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAJltvpfH~f`vXnJltbdQZ|`vXnvpfr˂pbtlbtlf~H`frQbHAZp˂rbdQZ|dtAJ`vXnvpfZHAbے`JXQtlJtArdfpvnXv`bHAZp˂rbdQZ|drtA`vXnvpf˂p`J˂p`Jrd|v`f~ff~HJ`ےbHAZpltbdQZ|~f`vXn˂pZHAbےZdQbtlJtA~HfpvnJ`ےbHAZpltbdQZ|Hf`vXn˂p`˂p`tArdtArdfpv々nrXQ`ےbHAZp˂tbdQZ|df`vXnv˂pZHAbے`dQbtlJtAr~HfpvnX`ےbHAZp˂tbdQZ|df`vXnvr˂pr˂pJtArdnXv`fv`frXQJ`ےbHAtAJltbdQZfH~f`vXXQr˂pZHAb|ZdQbtl`f~HfpvrXQJ`ےbHAtAJltbdQZpfHf`vXnr˂XQr˂lJtArlJtAr~HfppvnXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAb|ZdQbtlJf~HfpvXQJ`ےbHAZJltbdQZ|H~f`vXnvpfbdQZ|drtAvpfH~fZHAbJtArdJtArdfpvJHAZp˂rbdQZ|drtAltbvpfH~fے`JXQr˂ptArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAJltvpfH~fXQr˂XQrbtZdQbtpvnfpvbHAZp˂rXQdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|pvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfHJXQrJXQr|ZdQb|ZdQbnXv`fJ`ےHAZp˂rbdQZ|dtAJlXnvpfH~bے`JXQrlJtArd|ZvnXv`fHAZp˂rXQJZ|drtAJlXnvpfH~`JXQr`JXQr|ZdQ~fpv~HfpےbHAZp˂tbdQZ|drf`vXnvppZHAbے`JbtlJtArdHfpvnXvےbHAZp˂tbdQZ|drf`vXnvpp`JXQp`JXQd|Zd|ZvnXrXQJ`bHAZp˂rbdQZ|dtAJ`vXnvpfZHAbے`JXQtlJtArdfpvnXv`bHAZp˂rbdQZ|drtA`vXnvpfH~fdrtAJltH~f`vXnے`JXQ|ZdQ|ZdQnXv`p˂rXQJ`ےdrtAJltnvpH~f`vXnr˂pZHAے|ZdQbtlJf~HfpvXQJ`ےbHAZJltbdQZ|H~f`vXnpZHAbl|Zl|ZXv`fnXv`f˂rXQJ`ےdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbtXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f`˂pZHA˂pZHAtl|tl|~fpvHAZp˂rXQJZ|drtAJltbnpfH~f`vJXQr˂pZHAd|ZdQbtv`f~HfprXQJ`ےbrtAJltbdQpfH~f`v˂pZbtlbtlnXvvnXZp˂rXQJ`|drtAJlnvpfH~ے`JXQr˂JtArd|ZdQnXv`f~Zp˂rXQJ`|drtAJlnvpfH~r˂pr˂pdQbtdQbtv`f~fےHAZp˂rbdQZ|drtAltbvpfH~fے`JXQr˂ptArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAJltvpfH~f`vXnJltbdQZ|`vXnr˂pr˂pbtlbtlf~fpXQJ`ےbHAZJltbdQZ|fHf`vXnr˂pZHAb`JXQrtlJtArdfpvnXv`bHAZp˂rbdQZ|drtA`vXnvpfے`JdQbtdQbt璐~Hf~fpvJ`ےbHAZpltbdQZ|~f`vXn˂pZHAbےZdQbtlJtA~HfpvnJ`ےbHAZpltbdQZ|~f`vXnbے`bے`ZdQbtZdQbnnXvrXQJ`ےbrtAJltbdQvpfHf`vXnr˂pZHAے`JdQbtlJtAr~HfpvnX`ےbHAZp˂tbdQZ|df`vXnvHAbے|ZdQb|ZdQb`f~v`f~frXQJ`ےbHAtAJltbdQZfH~f`vXXQr˂pZHAb|ZdQbtl`f~HfpvrXQJ`ےbHAtAJltbdQZfH~f`vXZHAbZHAbl|ZdQl|ZdQpvnp˂rXQJ`ےdrtAJltnvpH~f`vXnr˂pZHAے|ZdQbtlJf~HfpvXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pbdQZ|`vXnvpf`JXQr`JXQr|ZdQb|ZdQbvnXbHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQbtltArd|ZdQbnXv`fHfp˂rXQJ`ےdrtAJltvpfH~fXQr˂lJtArlJtArpvnnXvbHAZp˂rXQdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|pvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfHJXQrJXQrlJtAXv`f`f~`ےbHAZp˂tbdQZ|df`vXnv˂pZHAbے`XQrbtlJtArd|ZvnXv`fHAZp˂rXQJZ|drtAJlXnvpfH~`JXQrtlJtlJHfpvpvnےbHAZp˂tbdQZ|drf`vXnvppZHAbے`JbtlJtArdHfpvnXvےbHAZp˂tbdQZ|drf`vXnvpے`JXQے`JXQbtlbnXvXv`fXQJ`ےbHAZJltbdQZ|fHf`vXnr˂pZHAb`JXQrtlJtArdfpvnXv`bHAZp˂rbdQZ|drtA`vXnvpf`JXQr˂pZ˂pZbtlbtlf~fpHAZp˂rXQdQZ|drtAJtbnvpfH~f``JXQr˂pZrd|ZdQbtXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f`pZHAbpJAHrpJAHr`vXnvˍpfdrQtHAbےHAbے|ZdQb|ZdQbvnX˂rXQJ`ےdrtAJltbvpf~f`vXnr˂pZHAے`ZdQbtlJtA~HfpvnJ`ےbHAZpltbdQZ|~f`vXnے`Jˁ`Zˁ`ZvˍpfH~ㅐfJlt`JXQr`JXQrtlJnXv`v`fJ`ےbHAZpltbdQZ|Hf`vXn˂pZHAbےJXQrblJtArd|pvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfHXQr˂QXb㉀QXb㉀ەH~ㅐf۝`vXnbAdZ|˂p`˂p`tArdf~fp~HfpbHAZp˂rXQdQZ|drtAJvXnvpfHHAbے`JXQrtlJrd|ZdQbnXv`fHfp˂rXQJ`ےdrtAJltbvpfH~f`p`JXQp`ZQXp`ZQX`vXnvˍp|drQtJXQrJXQr|ZdQbvnXvnX˂rXQJ`ےdrtAJltbvpfH~f``JXQr˂pZtAd|ZdQbtXv`f~HfvnrJ`ےbHAZpltbdQZ|~f`vXnr˂pb㉀ۑpb㉀ۑpvˍpfdrQtJlt˂pZHA˂pZHAtl|v`fv`f~J`ےbHAZpltbdQZ|~f`vXn˂pZHAbےZdQbtlJtA~HfpvnXQJ`ےbHAZp˂rbdQZ|dtAJlvXnvpfHZHAbJAHrJAHr󙐕H~ㅐfJltbAdZ|bے`bے`ZdQbt~HfpfpvbHAZp˂rXQdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|pvnXv`fHAZp˂rXQdQZ|drtAJtbnvpfH~f`ے`JXQˁ`ZQXˁ`ZQX`vXnbAdZ|drQtJXQrJXQrlJtAvnXnXv`˂rXQJ`ےdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbtXv`f~Hf˂rXQJ`ےdrtAJltbvpf~f`vXnےr˂pb㉀ۑpb㉀XnvˍpfdrQtJlt˂p`J˂p`Jrd|v`f~ff~HJ`ےbHAZpltbdQZ|~f`vXn˂pZHAbےZdQbtlJtA~HfpvnJ`ےbHAZpltbdQZ|Hf`vXn`JXQr`JXQr`ZQXb㕀vˍpfH~ㅐfJltbAdZ|XQr˂XQrbtZdQbtpvnfpvbHAZp˂rXQdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|pvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfH˂pZ˂pZۑpJH~ㅐf۝`vXnbAdZ|drQtpZHAbl|Zl|ZXv`fnXv`f˂rXQJ`ےdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbtXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f`HAbےHAbےAHr󙐂˝`vXnvˍpfdrQtJltے`JdQbtdQbt璐~Hf~fpvJ`ےbHAZpltbdQZ|~f`vXn˂pZHAbےZdQbtlJtA~HfpvnJ`ےbHAZpltbdQZ|~f`vXn`JXQr`JXQr`ZQXb㕀vˍpfH~ㅐfJltbAdZ|XQr˂lJtArlJtArpvnnXvbHAZp˂rXQdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|pvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfH˂p`˂p`ۑp`H~ㅐf۝`vXnbAdZ|drQtp`JXQd|Zd|ZXv`f`f~˂rXQJ`ےdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbtXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f`JXQrJXQrZQXb㉀`vXnvˍpfdrQtJltr˂pdQbtdQbt~fpvHfpvJ`ےbHAZpltbdQZ|~f`vXn˂pZHAbےZdQbtlJtA~HfpvnJ`ےbHAZpltbdQZ|~f`vXn˂pZHA˂pZHAۑpJAHvˍpfH~ㅐfJltbAdZ|ZHAbl|ZdQl|ZdQnXv`nXvbHAZp˂rXQdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|pvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfHbے`bے`r󙐂ˁ`H~ㅐf۝`vXnbAdZ|drQtے`JXQbtlbtlf~H`ffp˂rXQJ`ےdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbtXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f`JXQrJXQrZQXb㉀`vXnvˍpfdrQtJltr˂pJtArdJtArdfpvvnrJ`ےbHAZpltbdQZ|~f`vXn˂pZHAbےZdQbtlJtA~HfpvnJ`ےbHAZpltbdQZ|~f`vXn˂p`J˂p`Zۑp`ZvˍpfH~ㅐfJltbAdZ|`JXQr|ZdQ|ZdQnXv`XQJ`ےbHAZp˂rbdQZ|dtAJlvXnvpfHHAbے`JXQrlJtArd|pvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfHXQr˂QXb㉀QXb㉀ەH~ㅐf۝`vXnbAdZ|drQt \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv35_2.dat b/vendor/endroid/qr-code/assets/data/qrv35_2.dat new file mode 100644 index 000000000..3a3ac08d3 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv35_2.dat @@ -0,0 +1,313 @@ +~}~}~}~}zyzyzyzyvuvuvuvutstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyvuvuvuvutstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyvuvuvuvutstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyvuvuvuvutstststspopopoponmnmnmlk~}~}~}~}zyzyzyzyvuvuvuvutstststspopopopolklklklk~}~}~}~}zyzyzyzyvuvuvuvutstststspopopopolklklklk~}~}~}~}zyzyzyzyvuvuvuvutstststspopopopolklklklk~}~}~}~}zyzyzyzyvuvuvuvutstststspopopopolklklklk~}~}~}~}zyzyzyzyvuvuvuvutstststspopopopolklklklk~}~}~}~}zyzyzyzyvuvuvuvutstststspopopopolklklklk~}~}~}~}zyzyzyzyvuvuvuvutstststspopopopolklklklk|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopolklklklk{{{{{|{|zyzyzyzyvuvuvuvutststsrqpopopopolklklklk{|{|{|{|zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklk{|{|{|{|zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklk{|{|{|{|zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklk{|{|{|{|zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklk{|{{{{{{zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklk|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklk|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklk|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklk|{|{|{|{zyzyzyxwvuvuvuvurqrqrqrqpopopopolklklklk|{|{|{{{xwxwxwxwvuvuvuvurqrqrqrqpopopopolklklklkjijijiji{{{|{|{|xwxwxwxwvuvuvuvurqrqrqrqpopopopolklklklkjijijiji{|{|{|{|xwxwxwxwvuvuvuvurqrqrqrqpopopopolklklklkjijijiji{|{|{|{|xwxwxwxwvuvuvuvurqrqrqrqpopopopolklklklkjijijiji{|{|{|{|xwxwxwxwvuvuvuvurqrqrqrqpopopopolklklklkjijijiji{|{|{|{|xwxwxwxwvuvuvuvurqrqrqrqpopoponmlklklklkjijijiji{{{{{{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkjijijiji|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkjijijiji|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkjijijiji|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkjijijiji|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkjijijiji|{|{{{{{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkjijijiji{|{|{|{|xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkjijijiji{|{|{|{|xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkjijijiji{|{|{|{|xwxwxwxwvuvuvutsrqrqrqrqnmnmnmnmlklklklkjijijiji{|{|{|{|xwxwxwxwtstststsrqrqrqrqnmnmnmnmlklklklkjijijiji{|{|{|{{xwxwxwxwtstststsrqrqrqrqnmnmnmnmlklklklkjijijiji{{{{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnmlklklklkjijijiji|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnmlklklklkjijijihg|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnmlklklklkhghghghg|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnmlklklkjihghghghg~}~}|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghg~}~}~}~}|{{{{{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghg~}~}~}~}|{|{|{zyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghg~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghg~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghg~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghg~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghg~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghg~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqponmnmnmnmjijijijihghghghg~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijijihghghghg~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijijihghghghg~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijijihghghghg~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijijihghghghg~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijijihghghghg~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijijihghghghg~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijijihghghghg~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijijihghghghg~}~}~}~}zyzyzyzyxwxwxwvutstststspopopoponmnmnmnmjijijijihghghghg~}~}~}~}zyzyzyzyvuvuvuvutstststspopopoponmnmnmnmjijijijihghghghg~}~}~}~}zyzyzyzyvuvuvuvutstststspopopoponmnmnmnmjijijijihghghghghghghghgcdcdcdcd`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#     + + + hghghghgcdcdcdcd`_`_`_`_^]^]\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#     hghghghgcdcdcdcd`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#     hghghghgcdcdcccc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#     hghghghgccdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOKKKKKLKLHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787343333330/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     hghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     hghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     hghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSRQRQPOPOPOPOKLKLKLKLHGHGHGHGFEDCDCDCBABABABA>=>=>=>=<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     hgfefefedcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOKLKLKLKLHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     fefefefeccccdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOKLKKKKKKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;87878787434343330/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     fefefefedcdcbaba`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;87878787333434340/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        fefefefebabababa`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;87878787343434340/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        fefefefebabababa`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;87878787343434340/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        fefefefebabababa`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;:9:9:987878787343434340/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        fefefefebabababa`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKLKLKKKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:987878787343434340/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        fefefefebabababa`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMKKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:987878787333333430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        fefefefebabababa`_`_`_`_\[\[\[\[ZYZYXWXWVUVUVUVURQRQRQRQNMNMNMNMLKJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:987878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        fefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:987878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        fefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:987878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        fefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:987878765434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        fefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:965656565434333330/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        fefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:965656565434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        fefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBA@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        fefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        fefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        + fefefefebabababa`_`_^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!      + + + + fefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!    + + + + fefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!    + + + + fefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + fefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + fefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + fefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWVUVUTSTSRQRQRQRQNMNMNMNMJIJIJIJIHGFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + fefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + fefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + fefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + fefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + fefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + fefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + fefefedcbabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + dcdcdcccbabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + cccdcdcdbabababa^]^]^]^]\[\[ZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + cdcdcdcdbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + cdcdcdcdbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + cdcdcdcdbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + cdcdcdcdbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + ccccccdcbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQLKLKKKKKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + dcdcdcdcbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSRQRQPOPOKLKLKLKLJIJIJIJIFEFEFEFEDCBABABA@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + dcdcdcdcbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOKLKLKLKLJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + dcdcdcdcbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOKLKLKLKLJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"!   + + + + dcdcdcdcbaba`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOKLKLKLKLJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"! + + + + dcdccccc`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOKLKLKLKKJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:96543434321212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"! + + + + cdcdcdcd`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOKKKKLKLKJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:94333333421212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"! + + + + cdcdcdcd`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:98787873434343421212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + cdcdcdcd`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;878787873434343421212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + cdcdcdcd`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;878787873434343421212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + cdcdcdcc`_`_`_`_^]^]^]^]ZYZYZYZYXWXWVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;878787873434343421212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + ccccdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKKKKKKLHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;878787873434333321212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + dcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;878787873343434321212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + dcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;878787874343434321212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#     + + + + dcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;878787874343434321212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#     + + + + dcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;878787874343434321212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#     + + + + dccccccd`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOKLKLKKKKHGHGHGHGFEFEFEFEBABABABA@?>=>=>=<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#     + + + + cdcdcdcd`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOKKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787333334340/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#     + + + + qqrrssttwwxxyyzz]]^^__``!!""##$$XXWWVVUUiijjkkllbbcciijjFFGGHHII + + 33221100oonnmmlluuvvwwxx{{aabbccdd%%&&''((TTSSRRQQmmnnooppkkllmmnnJJKKLLMM//..--,,kkjjiihhyyzz{{||eeffgghh))**++,,PPOONNMMqqrrssttooppqqrrNNOOPPQQ++**))((ggffeedd}}~~iijjkkll--..//00 LLKKJJIIuuvvwwxxssttuuvvRRSSTTUU''&&%%$$ccbbaa``mmnnoopp11223344 + + HHGGFFEEyyzz{{||wwxxyyzzVVWWXXYY##""!! __^^]]\\qqrrsstt55667788DDCCBBAA~~}}}}~~{{ZZ[[\\]] !![[ZZYYXXuuvvwwxx99::;;<<@@??>>==||{{zzyy^^__``aa""##$$%%WWVVUUTT~~}}yyzz{{||==>>??@@<<;;::99xxwwvvuubbccddee&&''(())SSRRQQPP||{{zzyy}}~~AABBCCDD88776655ttssrrqqffgghhii**++,,--OONNMMLLxxwwvvuuEEFFGGHH + + 44332211ppoonnmmjjkkllmm..//0011 KKJJIIHHttssrrqqIIJJKKLL 00//..--llkkjjiinnooppqq22334455 + + GGFFEEDDppoonnmmMMNNOOPP,,++**))hhggffeerrssttuu66778899CCBBAA@@~~}}||llkkjjiiQQRRSSTT((''&&%%ddccbbaavvwwxxyy::;;<<==??>>==<<{{zzyyxxhhggffee~}|UUVVWWXX$$##""!!``__^^]]zz{{||}}>>??@@AA;;::9988wwvvuuttddccbbaa{{zzyyxxYYZZ[[\\ \\[[ZZYY~~BBCCDDEE 77665544ssrrqqpp``__^^]]wwvvuutt]]^^__``!!""##$$XXWWVVUUFFGGHHII + + 33221100oonnmmll\\[[ZZYY{{ssrrqqppaabbccdd%%&&''((TTSSRRQQJJKKLLMM//..--,,kkjjiihhXXWWVVUUzzyyxxwwoonnmmlleeffgghh))**++,,PPOONNMM~}|NNOOPPQQ++**))((ggffeeddTTSSRRQQvvuuttsskkjjiihgiijjkkll--..//00 LLKKJJII{{{{zzyyxxRRSSTTUU''&&%%$$ccbbaa``PPOONNMMrrqqppoofedccbbammnnoopp11223344 + + HHGGFFEEzzyyxxwwwwvvuuttVVWWXXYY##""!! __^^]]\\LLKKJJIInnmmllkka``__^^]qqrrsstt55667788DDCCBBAAvvuuttssssrrqqppZZ[[\\]] !![[ZZYYXXHHGGFFEEjjiiccbb]\\[[ZZYuuvvwwxx99::;;<<@@??>>==rrqqppoooonnmmll^^__``aa""##$$%%WWVVUUTTDDCCBBAAaa``__^^YXXWWVVUyyzz{{||==>>??@@<<;;::99nnmmllkkkkjjiihgbbccddee&&''(())SSRRQQPPRRSSTTUU@@??>>==]]\\[[ZZUTTSSRRQ~~}}}}~~AABBCCDD88776655jjiiccbbfedccbbaffgghhii**++,,--OONNMMLLVVWWXXYY<<;;::99YYXXWWVVQPONMLKK||{{zzyyEEFFGGHH + + 44332211aa``__^^a``__^^]jjkkllmm..//0011 KKJJIIHHZZ[[\\]]88776655UUTTSSRRJJIIHHGGxxwwvvuuIIJJKKLL 00//..--]]\\[[ZZ]\\[[ZZYnnooppqq22334455 + + GGFFEEDD^^__``aa44332211QQKKJJIIFFEEDDCCttssrrqqMMNNOOPP,,++**))YYXXWWVVYXXWWVVUrrssttuu66778899CCBBAA@@bbccddee00//..--HHGGFFEEBBAA@@??ppoonnmmQQRRSSTT((''&&%%UUTTSSRRUTTSSRRQvvwwxxyy::;;<<==??>>==<>==<<;;llkkjjiiUUVVWWXX$$##""!!QQKKJJIIQPONMLKKzz{{||}}>>??@@AA;;::9988jjkkllmm((''&&%%@@??>>==::998765hhggffeeYYZZ[[\\ HHGGFFEEJJIIHHGG~~}}||~~BBCCDDEE 77665544nnooppqq$$##""!!<<;;::9943322110ddccbbaa]]^^__``!!""##$$DDCCBBAAFFEEDDCC{{zzyyxxFFGGHHII + + 33221100rrssttuu 332211000//..--,``__^^]]aabbccdd%%&&''((@@??>>==BBAA@@??wwvvuuttJJKKLLMM//..--,,vvwwxxyy//..--,,,++**))(\\[[ZZYYeeffgghh))**++,,<<;;::99>>==<<;;ssrrqqppNNOOPPQQ++**))((zz{{||}}++**))(((''&&%%$XXWWVVUUiijjkkll--..//00 33221100::998765oonnmmllRRSSTTUU''&&%%$$~~''&&%%$$$##""!! TTSSRRQQmmnnoopp11223344 + + //..--,,43322110kkjjiihhVVWWXXYY##""!!  ##""!!PPOONNMMqqrrsstt55667788++**))((0//..--,ggffeeddZZ[[\\]] !! + + LLKKJJIIuuvvwwxx99::;;<<''&&%%$$,++**))(ccbbaa``^^__``aa""##$$%% + + HHGGFFEEyyzz{{||==>>??@@##""!!(''&&%%$__^^]]\\bbccddee&&''(()) DDCCBBAA~~}}}}~~AABBCCDD$##""!! [[ZZYYXXffgghhii**++,,-- + +@@??>>==||{{zzyyEEFFGGHH + + WWVVUUTTjjkkllmm..//0011  + + + + <<;;::99xxwwvvuuIIJJKKLL SSRRQQPPnnooppqq22334455 + +  88776655ttssrrqqMMNNOOPP OONNMMLLrrssttuu66778899  + + 44332211ppoonnmmQQRRSSTT + + KKJJIIHHvvwwxxyy::;;<<==!!""##$$ 00//..--llkkjjiiUUVVWWXX + +GGFFEEDDzz{{||}}>>??@@AA%%&&''((,,++**))hhggffeeYYZZ[[\\  + + CCBBAA@@~~}}||~~BBCCDDEE ))**++,,!!""##((''&&%%ddccbbaa]]^^__``!!""##$$ ??>>==<<{{zzyyxxFFGGHHII + + --..//00$$%%&&''$$##""!!``__^^]]aabbccdd%%&&''((;;::9988wwvvuuttJJKKLLMM{{zz11223344(())**++ \\[[ZZYYeeffgghh))**++,, 77665544ssrrqqppNNOOPPQQyyxxwwvv55667788,,--..//!!""##$$XXWWVVUUiijjkkll--..//00 + + 33221100oonnmmllRRSSTTUUuuttssrr99::;;<<00112233%%&&''((TTSSRRQQmmnnoopp11223344!!""##//..--,,kkjjiihhVVWWXXYYqqppoonn==>>??@@99::;;<<))**++,,PPOONNMMqqrrsstt55667788$$%%&&''++**))((ggffeeddZZ[[\\]] !!mmllkkjjAABBCCDD==>>??@@--..//00 LLKKJJIIuuvvwwxx99::;;<<(())**++''&&%%$$ccbbaa``^^__``aa""##$$%%iiccbbaaEEFFGGHHAABBCCDD11223344 + + HHGGFFEEyyzz{{||==>>??@@,,--..//##""!! __^^]]\\bbccddee&&''(())``__^^]]IIJJKKLLEEFFGGHH55667788DDCCBBAA~~}}}}~~AABBCCDD00112233 !![[ZZYYXXffgghhii**++,,--\\[[ZZYYMMNNOOPPIIJJKKQQ99::;;<<@@??>>==||{{zzyyEEFFGGHH99::;;<<""##$$%%WWVVUUTTjjkkllmm..//0011XXWWVVUUQQRRSSTTRRSSTTUU==>>??@@<<;;::99xxwwvvuuIIJJKKLL==>>??@@&&''(())SSRRQQPPnnooppqq22334455TTSSRRQQUUVVWWXXVVWWXXYYAABBCCDD88776655ttssrrqqMMNNOOPPAABBCCDD**++,,--OONNMMLLrrssttuu66778899KKJJIIHHYYZZ[[\\ZZ[[\\]]EEFFGGHH + + 44332211ppoonnmmQQRRSSTTEEFFGGHH..//0011 KKJJIIHHvvwwxxyy::;;<<==GGFFEEDD]]^^__``^^__``aaIIJJKKLL 00//..--llkkjjiiUUVVWWXXIIJJKKQQ22334455 + + GGFFEEDDzz{{||}}>>??@@AACCBBAA@@aabbccddbbcciijjMMNNOOPP,,++**))hhggffeeYYZZ[[\\RRSSTTUU66778899CCBBAA@@~~}}||~~BBCCDDEE??>>==<>==<<{{zzyyxxFFGGHHII;;::9933iijjkkllooppqqrrUUVVWWXX$$##""!!``__^^]]aabbccddZZ[[\\]]>>??@@AA;;::9988wwvvuuttJJKKLLMM221100//mmnnooppssttuuvvYYZZ[[\\ \\[[ZZYYeeffgghh^^__``aaBBCCDDEE 77665544ssrrqqppNNOOPPQQ..--,,++**))((''/..--,,+ffeeddcc[[\\]]^^ !!""FFEEDDCCHHGGFFEE}}||{{zzDDEEFFGG + + 55443322bbaa``__baa``__^iijjkkll--..//00 LLKKJJII{{{{zzyyxxRRSSTTUU''&&%%$$ccbbaa``{{zzyyxx&&%%$$##+**))(('bbaa``____``aabb##$$%%&&BBAA@@??DDCCBBAAyyxxwwvvHHIIJJKK 1100//..^^]]\\[[^]]\\[[Zmmnnoopp11223344 + + HHGGFFEEzzyyxxwwwwvvuuttVVWWXXYY##""!! __^^]]\\wwvvuutt""!!'&&%%$$#^^]]\\[[ccddeeff''(())**>>==<<;;@@??>>==uuttssrrLLMMNNOO--,,++**ZZYYXXWWZYYXXWWVqqrrsstt55667788DDCCBBAAvvuuttssssrrqqppZZ[[\\]] !![[ZZYYXXssrrqqpp#""!! ZZYYXXWWgghhiijj++,,--..::993322<<;;::99qqppoonnPPQQRRSS))((''&&VVUUTTSSVUUTTSSRuuvvwwxx99::;;<<@@??>>==rrqqppoooonnmmll^^__``aa""##$$%%WWVVUUTToonnmmllVVUUTTSSkkllmmnn//001122 1100//..87654332mmllkkjjTTUUVVWW%%$$##""RRQQKKJJRQQPONMLyyzz{{||==>>??@@<<;;::99nnmmllkkkkjjiihgbbccddee&&''(())SSRRQQPPkkjjiihhRRQQPPOOooppqqrr33445566 + + --,,++**21100//.iihhggffXXYYZZ[[!! IIHHGGFFKKJJIIHH~~}}}}~~AABBCCDD88776655jjiiccbbfedccbbaffgghhii**++,,--OONNMMLL{{ggffeedd + +NNMMLLKKssttuuvv778899::))((''&&.--,,++*eeddccbb\\]]^^__ !!""##EEDDCCBBGGFFEEDD||{{zzyyEEFFGGHH + + 44332211aa``__^^a``__^^]jjkkllmm..//0011 KKJJIIHHzzyyxxwwccbbaa``  JJIIHHGGwwxxyyzz;;<<==>>%%$$##""*))((''&aa``__^^``aabbcc$$%%&&''AA@@??>>CCBBAA@@xxwwvvuuIIJJKKLL 00//..--]]\\[[ZZ]\\[[ZZYnnooppqq22334455 + + GGFFEEDDvvuuttss__^^]]\\ + + FFEEDDCC{{||}}~~??@@AABB!!&%%$$##"]]\\[[ZZddeeffgg(())**++==<<;;::??>>==<>==<>==<<;;zzyyxxwwGGHHIIJJ UUTTSSRRllmmnnoo00112233 + +00//..--65433221llkkjjiiUUVVWWXX$$##""!!QQKKJJIIQPONMLKKzz{{||}}>>??@@AA;;::9988jjiiccbbSSRRQQPP::998877vvuuttssKKLLMMNN QQPPOONNppqqrrss44556677 ,,++**))100//..-hhggffeeYYZZ[[\\ HHGGFFEEJJIIHHGG~~}}||~~BBCCDDEE 77665544aa``__^^OONNMMLL + +66554433rrqqppooOOPPQQRR + + MMLLKKJJttuuvvww8899::;;((''&&%%-,,++**)ddccbbaa]]^^__``!!""##$$DDCCBBAAFFEEDDCC{{zzyyxxFFGGHHII + + 33221100]]\\[[ZZKKJJIIHH 221100//nnmmllkkSSTTUUVV IIHHGGFFxxyyzz{{<<==>>??$$##""!!)((''&&%``__^^]]aabbccdd%%&&''((@@??>>==BBAA@@??wwvvuuttJJKKLLMM//..--,,YYXXWWVVGGFFEEDD!!""##$$..--,,++jjiihhggWWXXYYZZ + + EEDDCCBB~~||}}~~@@AABBCC%$$##""!\\[[ZZYYeeffgghh))**++,,<<;;::99>>==<<;;ssrrqqppNNOOPPQQ++**))((UUTTSSRRCCBBAA@@%%&&''((**))((''ffeeddcc[[\\]]^^ !!"" + + AA@@??>>}}||{{zzDDEEFFGG + + ! XXWWVVUUiijjkkll--..//00 33221100::998765oonnmmllRRSSTTUU''&&%%$$QQKKJJII??>>==<<))**++,,&&%%$$##bbaa``____``aabb##$$%%&& ==<<;;::yyxxwwvvHHIIJJKK TTSSRRQQmmnnoopp11223344 + + //..--,,43322110kkjjiihhVVWWXXYY##""!! HHGGFFEE;;::9988--..//00""!! ^^]]\\[[ccddeeff''(())**99887766uuttssrrLLMMNNOO PPOONNMMqqrrsstt55667788++**))((0//..--,ggffeeddZZ[[\\]] !!DDCCBBAA7766554411223399 !!""ZZYYXXWWgghhiijj++,,--.. + + 55443322qqppoonnPPQQRRSS + + LLKKJJIIuuvvwwxx99::;;<<''&&%%$$,++**))(ccbbaa``^^__``aa""##$$%%@@??>>==33221100::;;<<==##$$%%&&VVUUTTSSkkllmmnn//001122!! 1100//..mmllkkjjTTUUVVWW HHGGFFEEyyzz{{||==>>??@@##""!!(''&&%%$__^^]]\\bbccddee&&''(())<<;;::99//..--,,>>??@@AA''(())**RRQQPPOOooppqqrr33445566""##$$%%--,,++**iihhggffXXYYZZ[[ + + DDCCBBAA~~}}}}~~AABBCCDD$##""!! [[ZZYYXXffgghhii**++,,--33221100++**))((BBCCDDEE++,,--..NNMMLLKKssttuuvv778899::&&''(())))((''&&eeddccbb\\]]^^__ !!""## + + @@??>>==||{{zzyyEEFFGGHH + + WWVVUUTTjjkkllmm..//0011 //..--,,''&&%%$$FFGGHHII//001122 JJIIHHGGwwxxyyzz;;<<==>>**++,,--%%$$##""aa``__^^``aabbcc$$%%&&''<<;;::99xxwwvvuuIIJJKKLL SSRRQQPPnnooppqq22334455 + + ++**))((##""!! JJKKQQRR33445566 + + FFEEDDCC{{||}}~~??@@AABB..//0011!! ]]\\[[ZZddeeffgg(())**++88776655ttssrrqqMMNNOOPP OONNMMLLrrssttuu66778899''&&%%$$SSTTUUVV778899::BBAA@@??~~}}||{{CCDDEEFF223399:: !!""##YYXXWWVVhhiijjkk,,--..// + + 44332211ppoonnmmQQRRSSTT + + KKJJIIHHvvwwxxyy::;;<<==##""!!WWXXYYZZ;;<<==>>>>==<<;;zzyyxxwwGGHHIIJJ;;<<==>>$$%%&&''UUTTSSRRllmmnnoo00112233!!"" 00//..--llkkjjiiUUVVWWXX + +GGFFEEDDzz{{||}}>>??@@AA[[\\]]^^??@@AABB::998877vvuuttssKKLLMMNN??@@AABB(())**++QQPPOONNppqqrrss44556677##$$%%&&,,++**))hhggffeeYYZZ[[\\  + + CCBBAA@@~~}}||~~BBCCDDEE __``aabbCCDDEEFF + +66554433rrqqppooOOPPQQRRCCDDEEFF,,--..//MMLLKKJJttuuvvww8899::;;''(())**((''&&%%ddccbbaa]]^^__``!!""##$$ ??>>==<<{{zzyyxxFFGGHHII + +  cciijjkkGGHHIIJJ 221100//nnmmllkkSSTTUUVVGGHHIIJJ00112233 + +IIHHGGFFxxyyzz{{<<==>>??++,,--..$$##""!!``__^^]]aabbccdd%%&&''((;;::9988wwvvuuttJJKKLLMM + + llmmnnooKKLLMMNN..--,,++jjiihhggWWXXYYZZKKQQRRSS44556677 EEDDCCBB~~||}}~~@@AABBCC//001122 \\[[ZZYYeeffgghh))**++,, 77665544ssrrqqppNNOOPPQQ + + + + + + ppqqrrssOOPPQQRR**))((''ffeeddcc[[\\]]^^TTUUVVWW8899::;;AA@@??>>}}||{{zzDDEEFFGG3399::;;!!""##$$XXWWVVUUiijjkkll--..//00 + + 33221100oonnmmllRRSSTTUU ttuuvvwwSSTTUUVV&&%%$$##bbaa``____``aabbXXYYZZ[[<<==>>??==<<;;::yyxxwwvvHHIIJJKK<<==>>??%%&&''((TTSSRRQQmmnnoopp11223344!!""##//..--,,kkjjiihhVVWWXXYYxxyyzz{{WWXXYYZZ""!! ^^]]\\[[ccddeeff\\]]^^__@@AABBCC99887766uuttssrrLLMMNNOO@@AABBCC))**++,,PPOONNMMqqrrsstt55667788$$%%&&''++**))((ggffeeddZZ[[\\]] !![[\\]]^^ !!""ZZYYXXWWgghhiijj``aabbccDDEEFFGG + + 55443322qqppoonnPPQQRRSSDDEEFFGG--..//00 LLKKJJIIuuvvwwxx99::;;<<(())**++''&&%%$$ccbbaa``^^__``aa""##$$%%__``aabb##$$%%&&VVUUTTSSkkllmmnniijjkkllHHIIJJKK 1100//..mmllkkjjTTUUVVWWHHIIJJKK11223344 + + HHGGFFEEyyzz{{||==>>??@@,,--..//##""!! __^^]]\\bbccddee&&''(())!!""## !!ccddeeff''(())**RRQQPPOOooppqqrrmmnnooppLLMMNNOO--,,++**iihhggffXXYYZZ[[QQRRSSTT55667788DDCCBBAA~~}}}}~~AABBCCDD00112233 !![[ZZYYXXffgghhii**++,,--$$%%&&''""##$$%%gghhiijj++,,--..NNMMLLKKssttuuvvqqrrssttPPQQRRSS))((''&&eeddccbb\\]]^^__UUVVWWXX99::;;<<@@??>>==||{{zzyyEEFFGGHH99::;;<<""##$$%%WWVVUUTTjjkkllmm..//0011(())**++&&''(())kkllmmnn//001122 JJIIHHGGwwxxyyzzuuvvwwxxTTUUVVWW%%$$##""aa``__^^``aabbccYYZZ[[\\==>>??@@<<;;::99xxwwvvuuIIJJKKLL==>>??@@&&''(())SSRRQQPPnnooppqq22334455,,--..//**++,,--ooppqqrr33445566 + + FFEEDDCC{{||}}~~yyzz{{XXYYZZ[[!! ]]\\[[ZZddeeffgg]]^^__``AABBCCDD88776655ttssrrqqMMNNOOPPAABBCCDD**++,,--OONNMMLLrrssttuu6677889900112233..//0011ssttuuvv778899::BBAA@@??~~}}||{{\\]]^^__ !!""##YYXXWWVVhhiijjkkaabbcciiEEFFGGHH + + 44332211ppoonnmmQQRRSSTTEEFFGGHH..//0011 KKJJIIHHvvwwxxyy::;;<<==99::;;<<22334455wwxxyyzz;;<<==>>>>==<<;;zzyyxxww``aabbcc$$%%&&''UUTTSSRRllmmnnoojjkkllmmIIJJKKLL 00//..--llkkjjiiUUVVWWXXIIJJKKQQ22334455 + + GGFFEEDDzz{{||}}>>??@@AA==>>??@@66778899{{||}}~~??@@AABB::998877vvuuttssddeeffgg(())**++QQPPOONNppqqrrssnnooppqqMMNNOOPP,,++**))hhggffeeYYZZ[[\\RRSSTTUU66778899CCBBAA@@~~}}||~~BBCCDDEEAABBCCDD::;;<<==CCDDEEFF + +66554433rrqqppoohhiijjkk,,--..//MMLLKKJJttuuvvwwrrssttuuQQRRSSTT((''&&%%ddccbbaa]]^^__``VVWWXXYY::;;<<==??>>==<<{{zzyyxxFFGGHHIIEEFFGGHH>>??@@AAGGHHIIJJ 221100//nnmmllkkllmmnnoo00112233 + +IIHHGGFFxxyyzz{{vvwwxxyyUUVVWWXX$$##""!!``__^^]]aabbccddZZ[[\\]]>>??@@AA;;::9988wwvvuuttJJKKLLMMIIJJKKQQBBCCDDEEKKLLMMNN..--,,++jjiihhggppqqrrss44556677 EEDDCCBB~~||}}~~zz{{YYZZ[[\\ \\[[ZZYYeeffgghh^^__``aaBBCCDDEE 77665544ssrrqqppNNOOPPQQRRSSTTUUFFGGHHII~}|{{OOPPQQRR**))((''ffeeddccttuuvvww8899::;;AA@@??>>}}||{{zz]]^^__``!!""##$$XXWWVVUUiijjkkllbbcciijjFFGGHHII + + 33221100oonnmmllRRSSTTUUVVWWXXYYJJKKLLMMzzyyxxwwSSTTUUVV&&%%$$##bbaa``__xxyyzz{{<<==>>??==<<;;::yyxxwwvvaabbccdd%%&&''((TTSSRRQQmmnnooppkkllmmnnJJKKLLMM//..--,,kkjjiihhVVWWXXYYZZ[[\\]]NNOOPPQQvvuuttssWWXXYYZZ""!! ^^]]\\[[||}}~~@@AABBCC99887766uuttssrreeffgghh))**++,,PPOONNMMqqrrssttooppqqrrNNOOPPQQ++**))((ggffeeddZZ[[\\]]^^__``aaRRSSTTUUrrqqppoo[[\\]]^^ !!""ZZYYXXWWDDEEFFGG + + 55443322qqppoonniijjkkll--..//00 LLKKJJIIuuvvwwxxssttuuvvRRSSTTUU''&&%%$$ccbbaa``^^__``aabbcciijjVVWWXXYYnnmmllkk__``aabb##$$%%&&VVUUTTSSHHIIJJKK 1100//..mmllkkjjmmnnoopp11223344 + + HHGGFFEEyyzz{{||wwxxyyzzVVWWXXYY##""!! __^^]]\\bbccddeekkllmmnnZZ[[\\]]jjiihgfeccddeeff''(())**RRQQPPOOLLMMNNOO--,,++**iihhggffqqrrsstt55667788DDCCBBAA~~}}}}~~{{ZZ[[\\]] !![[ZZYYXXffgghhiiooppqqrr^^__``aadccbbaa`gghhiijj++,,--..NNMMLLKK~}|{{zzPPQQRRSS))((''&&eeddccbbuuvvwwxx99::;;<<@@??>>==||{{zzyy^^__``aa""##$$%%WWVVUUTTjjkkllmmssttuuvvbbccddee`__^^]]\kkllmmnn//001122 JJIIHHGG{{zzyyyyxxwwvvTTUUVVWW%%$$##""aa``__^^yyzz{{||==>>??@@<<;;::99xxwwvvuubbccddee&&''(())SSRRQQPPnnooppqqwwxxyyzzffgghhii\[[ZZYYXooppqqrr33445566 + + FFEEDDCCxxwwvvuuuuttssrrXXYYZZ[[!! ]]\\[[ZZ}}~~AABBCCDD88776655ttssrrqqffgghhii**++,,--OONNMMLLrrssttuu{{jjkkllmmXWWVVUUTssttuuvv778899::BBAA@@??ttssrrqqqqppoonn\\]]^^__ !!""##YYXXWWVVEEFFGGHH + + 44332211ppoonnmmjjkkllmm..//0011 KKJJIIHHvvwwxxyynnooppqqTSSRRQQPwwxxyyzz;;<<==>>>>==<<;;ppoonnmmmmllkkjj``aabbcc$$%%&&''UUTTSSRRIIJJKKLL 00//..--llkkjjiinnooppqq22334455 + + GGFFEEDDzz{{||}}rrssttuuONMLKKJJ{{||}}~~??@@AABB::998877llkkjjiiiihgfedcddeeffgg(())**++QQPPOONN~MMNNOOPP,,++**))hhggffeerrssttuu66778899CCBBAA@@~~}}||~~vvwwxxyyIIHHGGFF~~}}||{{CCDDEEFF + +66554433ccbbaa``cbbaa``_hhiijjkk,,--..//MMLLKKJJ}|{{zzyyQQRRSSTT((''&&%%ddccbbaavvwwxxyy::;;<<==??>>==<<{{zzyyxxzz{{||}}EEDDCCBBzzyyxxwwGGHHIIJJ 221100//__^^]]\\_^^]]\\[llmmnnoo00112233 + +IIHHGGFF{{zzyyxxxxwwvvuuUUVVWWXX$$##""!!``__^^]]zz{{||}}>>??@@AA;;::9988wwvvuutt~~AA@@??>>vvuuttssKKLLMMNN..--,,++[[ZZYYXX[ZZYYXXWppqqrrss44556677 EEDDCCBBwwvvuuttttssrrqqYYZZ[[\\ \\[[ZZYY~~BBCCDDEE 77665544ssrrqqpp==<<;;::rrqqppooOOPPQQRR**))((''WWVVUUTTWVVUUTTSttuuvvww8899::;;AA@@??>>ssrrqqppppoonnmm]]^^__``!!""##$$XXWWVVUUFFGGHHII + + 33221100oonnmmll99876543nnmmllkkSSTTUUVV&&%%$$##SSRRQQKKSRRQQPONxxyyzz{{<<==>>??==<<;;::oonnmmllllkkjjiiaabbccdd%%&&''((TTSSRRQQJJKKLLMM//..--,,kkjjiihh3221100/jjiihhggWWXXYYZZ""!! JJIIHHGGMLKKJJII~~||}}~~@@AABBCC99887766kkjjiicchgfedccbeeffgghh))**++,,PPOONNMM~}|NNOOPPQQ++**))((ggffeedd~~}}||bdQZ|H~fdQbtp˂r`vXnے`JXQfpvJlt`vXnl|Z˂rXQvXn`JXQrpvn˂rXQdrtA`vXnl|ZdQXQJ`ےvpfr˂pnXv`bdQZ|vpfdQbtJ`ےvpfH˂pZXv`fJ`ےJltvpfbtlbHAZH~fZHAbf~HdrtAH~flJtArbHAZp~f`HAbے~HfbHAZpbdQZ|H~fJtArdp˂r`vXnے`JXQfpvJlt`vXnd|Z˂rXQvXn`JXQrpvn˂rbdrtA`vXn|ZdQXQJ`ےvpfr˂pnXv`bdQZ|vpfdQbtJ`ےvpfH˂pZXv`fdQZ|JltvpfbtlbHAZH~fZHAےf~HdrtAH~fl|ZdQbHAZp~f`HAbے~HfdrtAJbdQZ|H~f|ZdQbp˂r`vXn`JXQrfpvJlt`vXnbtl˂rXQvXn`JXQrpvnltbdrtA`vXnnXv`XQJ`ےvpfbtlnXv`bdQZ|vpfJtArdJ`ےvpfH˂pZXv`fdQZ|Jltvpff~fpېbHAZH~fJtAdf~HdrtAH~f|ZdQbHAZp~f`HAbے~HfdrtAJbdQZ|H~fvnXp˂r`vXn|ZdQbfpvJlt`vXnbtl˂rXQvXn`JXQrpvnltbdrtA`vXnv`fXQJ`ےvpftlJnXv`bdQZ|vpf|ZdQbJ`ےvpfH˂pZXv`fdQZ|Jltr˂p~HfpېbHAZH~ftArdf~HdrtAH~fnXv`bHAZp~f`HAے`~HfdrtAJbdQZ|`JXQrvnXp˂r`vXn|ZdQbfpvJlt`vXnf~fp˂rXQvXnJXQrbpvnltbdrtA˂pZv`f~fXQJ`ےvpftlJnXv`bdQZ|r˂pvnXJ`ےvpfHtlJXv`fdQZ|JltHAbےpvnbHAZH~ftArdf~HdrtA`JXQrv`fbHAZp~f`tAd|~HfdrtAJbdQZ|`JXQrXv`fp˂r`vXn|ZdQbfpvJlt˂pZ~Hfp˂rXQvXnZdQbtpvnltbdrtA˂p`~HfbdQZ|vpftlJnXv`bdQZ|HAbےvnXJ`ےvpfHlJtAXv`fdQZ|JltJXQrpvndrtAH~ftArdf~HdrtA`JXQrv`f~fbHAZp~f`rd|~HfdrtAJbdQZ|˂pZHAXv`fJlt`vXn|ZdQbfpvJlt˂p`pvn˂rXQvXnZdQbtpvnltbdrtAbے`~fpvbdQZ|vpftlJnXv`bdQZ|JXQrXv`fJ`ےvpfHlJtAXv`fdQZ|JltJXQrnXv`drtAH~ftArdfHfdrtA˂pZHA~HfbHAZp~f`rd|~HfdrtAJbdQZ|˂p`Jf~HJlt`vXn|ZdQbpvnJltbے`pvn˂rbvXnZdQbtpvnltbdrtAXQr˂fpvbdQZ|vpftlJrXQJ`bdQZ|JXQrXv`fdQZ|vpfHlJtAXv`fdQZ|vXnJltpZHAbnXv`drtAH~ftArdےHAZdrtA˂p`J~fpvdrtAJ~f`rd|~HfdrtAJvpfHbdQZ|ے`Jf~fpJlt`vXn|ZdQbp˂rJltXQr˂nXv`ltbvXnZdQbtpvnltb~f`drtAXQr˂vnXbdQZ|vpftlJXQJ`ےbdQZ|pZHAbf~HdQZ|vpfHlJtAXv`fdQZ|vXnJltp`JXQv`fdrtAH~ftArdbHAZdrtAے`JfpvdrtAJ~f`rd|HfpdrtAJvpfHbdQZ|r˂p~HfpJlt`vXn|ZdQbp˂rJltXQr˂nXv`ltbvXnZdQbtvnrltb~f`drtAZHAbvnXbdQZ|vpftlJXQJ`ےbdQZ|p`JXQf~fpdQZ|vpfHlJtAXQJ`ےdQZ|vXnJltے`JXQv`f~drtAH~ftArdbHAZdrtAr˂pvnXdrtAJ~f`rd|HAZpdrtAJvpfHbdQZ|r˂pfpvJlt`vXn|ZdQbp˂rJltZHAbv`fltbvXnZdQbt˂rXQltb~f`drtA`JXQrnXv`bdQZ|r˂ptlJXQJ`ےbdQZ|ے`JXQ~HfpdQZ|vpfHlJtAJ`ےdQZ|vXnJlt˂pZf~HdrtAZHAbtArdbHAZdrtAr˂pvnXdrtAJ~f`rd|bHAZpdrtAJvpfHbdQZ|HAbےfpvJltے`JXQ|ZdQbp˂rJlt`JXQrv`f~ltbvXnZdQbt˂rXQltb~f`drtA`JXQrnXv`fbdQZ|r˂ptlJXQJ`ےbdQZ|˂pZfpvdQZ|vpfHlJtAJ`ےdQZ|vXnJlt˂p`~fpvdrtAZHAbtArdbHAZdtAJHAbےnXv`drtAJ~f`rd|bHAZpdrtAJvpfHbdQZ|JXQrnXvJltے`JXQ|ZdQbp˂rltb`JXQrf~HltbvXnrZdQbt˂rXQltb~f``vXn˂pZHA`f~bdQZ|r˂ptlJXQJ`ےnvp˂p`fpvdQZ|˂pZlJtAJ`ےdQZ|vXnvpfbے`HfpvdrtAZHAbtArdbHAZfHfJXQrnXv`fdrtAJHAbےrd|bHAZpdrtAJvpfHH~fJXQrnXvJltے`JXQ|ZdQbp˂r`vXn˂pZHA~fpvltb`JXQrZdQbt˂rXQltb~f``vXn˂p|Z`frQbdQZ|r˂ptlJXQJ`ےvpfbے`nXvdQZ|˂pZlJtAJ`ےdQZ|vXnrvpfdQbtJHAZdrtAZHAbtArdbHAZH~fJXQr`f~drtAJHAbےrd|bHAZpdtAJl˂p`H~flJtArp˂rJltے`JXQ|ZdQbp˂r`vXn˂p`JHfpvltb`JXQrZdQbt˂rXQtbnJXQr`vXnd|ZXQJ`ےbdQZ|r˂ptlJXQJ`ےvpfXQrbtnXvdQZ|˂pZlJtAJ`ےvpf˂pZHAvpfdQbt璐bHAZdrtAZHAbtArdbHAZH~fl|Z`ffpdrtAJHAbےrd|bHAZpHf`bے`H~fl|ZdQp˂rJltے`JXQ|ZdQbp˂r`vXndQbtvnrltb`JXQrZdQbt˂rXQvXnJXQr`vXnbtlXQJ`ےbdQZ|r˂pnXv`XQJ`ےvpflJtArXQJ`ےdQZ|˂pZlJtAJ`ےvpfH˂p`JvpfJtArdbHAZdrtAZHAbf~HbHAZH~fd|ZHAZpdrtAJHAbےrd|bHAZp~f`XQr˂H~f|ZdQp˂rJltے`JXQfpvp˂r`vXndQbt˂rXQltb`JXQrZdQbt˂rXQvXnpZHAb`vXnbtlXQJ`ےbdQZ|r˂pnXv`XQJ`ےvpfl|ZdQJ`ےdQZ|˂pZlJtAJ`ےvpfHے`Jvpf|ZdQbbHAZdrtAZHAbf~HbHAZH~fbtlbHAZpdrtAJHAbےrd|bHAZp~f`XQr˂H~ftlJp˂rJltے`JXQfpvp˂r`vXnJtArd˂rXQltb`JXQrZdQbn˂rXQvXnp`JXQ`vXntArdXQJ`ےbdQZ|r˂pnXv`XQJ`ےvpf|ZdQJ`ےdQZ|˂pZXv`fJ`ےvpfHr˂pvpf|ZdQbbHAZdtAJZHAbf~HbHAZH~fbtlbHAZpdrtAJHAbے~HfbHAZp~f`ZHAbH~ftl|p˂rltbے`JXQfpvp˂r`vXn|ZdQb˂rXQltb`JXQrpvn˂rXQvXnے`JXQ`vXnZdQbtXQJ`ےnvpr˂pnXv`XQJ`ےvpftlJJ`ےdQZ|˂pZXv`fJ`ےvpfHr˂pvpflJtAbHAZfHfZHAbf~HbHAZH~ftArdbHAZpdrtAJHAbے~HfbHAZp~f``JXQrH~frd|p˂r`vXnے`JXQfpvp˂r`vXn|ZdQb˂rXQltb`JXQrpvn˂rXQvXn˂pZ`vXnZdQbtXQJ`ےvpfr˂pnXv`XQJ`ےvpftl|J`ےdQZ|˂pZXv`fJ`ےvpfHHAbےvpfl|ZbHAZH~fZHAbf~HbHAZH~fZdQbtbHAZpdtAJlHAbے~HfbHAZp~f``JXQrH~fdQbtp˂r`vXnے`JXQfpvp˂r`vXnlJtA˂rXQtbn`JXQrpvn˂rXQvXn˂p``vXnlJtArXQJ`ےvpfr˂pnXv`bdQZ|vpfrd|J`ےvpf˂pZXv`fJ`ےvpfHJXQrvpfd|ZbHAZH~fZHAbf~HdrtAH~fZdQbtbHAZpHf`HAbے~HfbHAZp~f`˂pZHAbے`v`frtAJlf`vd|ZHAZp˂rtAJl˂pZHAnXv`tAJlf`vX|ZdQZp˂tAJlJXQrvnXJlt`vXn|ZdQbfpvJlt˂p`pvn˂rXQvXnZdQbtpvnltbvXnے`vXnJXQr~HfptbdQXnrdQbt璀rXQJtbdQbے`f~HtbdQZnvpbtlrXQJ`tbdQZ˂pZHAv`fbdQZ|vpftlJnXv`bdQZ|JXQrXv`fJ`ےvpfHlJtAXv`fdQZ|`JXQrvˍpf˂p`JvnXZ|d˂pZHAlJtAr`ےbZ|dJXQrfpv|drfH~JtArdےbHA|drbے`~HfpdrtAH~ftArdfHfdrtA˂pZHA~HfbHAZp~f`rd|~HfdrtAJ˂pZH~ㅐfXQr˂v`f~rtAJlbے`d|ZHAZp˂rtAJl˂p`JnXv`tAJlf`vX|ZdQZp˂tAJlJXQrvnXJlt`vXn|ZdQbpvnJltbے`pvn˂rbvXnZdQbtpvnltbHAbے`vXnpZHAbfpvtbdQJXQrdQbt璀rXQJtbdQXQr˂f~fptbdQZnvpbtlrXQJ`tbdQZ˂p`Jv`f~fbdQZ|vpftlJrXQJ`bdQZ|JXQrXv`fdQZ|vpfHlJtAXv`fdQZ|`JXQrvˍpfے`JnXv`Z|d˂pZHAlJtAr`ےbZ|dpZHAbvnX|drfH~JtArdےbHA|drXQr˂pvndrtAH~ftArdےHAZdrtA˂p`J~fpvdrtAJ~f`rd|~HfdrtAJ˂p`H~ㅐfXQr˂f~HrtAJlbے`d|ZHAZp˂tAJl璐ے`Jv`ftAJlf`vX|ZdQZp˂tAJlpZHAbXv`fJlt`vXn|ZdQbp˂rJltXQr˂nXv`ltbvXnZdQbtpvnltbJXQr`vXnp`JXQfpvtbdQJXQrdQbt璀rXQJtbnXQr˂~HfptbdQZnr˂btlrXQJ`tbdQZے`J~HfbdQZ|vpftlJXQJ`ےbdQZ|pZHAbf~HdQZ|vpfHlJtAXv`fdQZ|˂pZHAvˍpfrbtnXv`Z|d˂pZHAlJtAr`ےbvpfHp`JXQvnX|drpZHAbJtArdےbHA|drXQr˂pvndrtAH~ftArdbHAZdrtAے`JfpvdrtAJ~f`rd|HfpdrtAJbے`H~ㅐfl|ZdQffpvrtAJlbے`d|ZHAZp˂f`vr˂pv`f~ftAJl璐ے`J|ZdQZp˂tAJlp`JXQXv`fJlt`vXn|ZdQbp˂rJltXQr˂nXv`ltbvXnZdQbtvnrltbJXQr`vXnbtlnrXQtbdQJXQrdQbt璀rXQJXnvZHAbpvntbdQZXQr˂btlrXQJ`tbdQZr˂p~fpvbdQZ|vpftlJXQJ`ےbdQZ|p`JXQf~fpdQZ|vpfHlJtAXQJ`ےdQZ|˂p`JvˍpfJtArdJ`ےZ|d˂pZHAlJtAr`ےbpfH~ے`JXQXv`f|drpZHAbJtArdےbHA|dtAZHAbnXv`drtAH~ftArdbHAZdrtAr˂pvnXdrtAJ~f`rd|HAZpdrtAJXQr˂H~ㅐf|ZdQHAZp˂rtAJlbے`d|ZHAZp˂f`vr˂p~HftAJl璐ے`J|ZdQZp˂Jltے`JXQf~HJlt`vXn|ZdQbp˂rJltZHAbv`fltbvXnZdQbt˂rXQltbpZHAb`vXnbtlrXQJtbdQJXQrdQbt璀rXQJXnv`JXQrpvntbdQZXQr˂btlrXQJ`bnvr˂pfpvbdQZ|r˂ptlJXQJ`ےbdQZ|ے`JXQ~HfpdQZ|vpfHlJtAJ`ےdQZ|ے`Jvˍpf|ZdQb`ےbZ|d˂pZHAlJtAr`ےbpfH~btlXv`f|drpZHAbJtArdےbHApfH`JXQrnXv`drtAZHAbtArdbHAZdrtAr˂pvnXdrtAJ~f`rd|bHAZpdrtAJXQr˂H~ㅐftlJHAZp˂rtAJlbے`d|ZHAZp˂f`v|ZdQbfpvtAJl璐ے`J|ZdQZp˂f`vX˂pZf~fpJltے`JXQ|ZdQbp˂rJlt`JXQrv`f~ltbvXnZdQbt˂rXQltbp`JXQ`vXntArdrXQJtbdQJXQrdQbnXrXQJXnvtlJnrXQJtbdQZXQr˂btlrXQJ`nvpHAbےvnXbdQZ|r˂ptlJXQJ`ےbdQZ|˂pZfpvdQZ|vpfHlJtAJ`ےdQZ|r˂pvˍpf|ZdQb`ےbZ|d˂pZHAv`f`ےbpfH~tArd`ےHA|drpZHAbJtArdےbHAfH~`JXQrv`fdrtAZHAbtArdbHAZdtAJHAbےnXv`drtAJ~f`rd|bHAZpdrtAJZHAbH~ㅐftl|HAZp˂rtAJlbے`~HfpHAZp˂f`v|ZdQbZp˂tAJl璐ے`J|ZdQZp˂f`vX˂p`~HfpJltے`JXQ|ZdQbp˂rltb`JXQrf~HltbvXnrZdQbt˂rXQltbے`JXQ`vXnZdQbtrXQJtbdQJXQrvnXrXQJXnvtl|rXQJ`tbdQZXQr˂btlrXQJ`nvpJXQrbvnXbdQZ|r˂ptlJXQJ`ےnvp˂p`fpvdQZ|˂pZlJtAJ`ےdQZ|r˂pvˍpflJtA`ےbZ|d˂pZHAv`f`ےbpfH~ZdQbtےbHA|drpZHAbJtArdےbHAfH~tl|v`ffdrtAZHAbtArdbHAZfHfJXQrnXv`fdrtAJHAbےrd|bHAZpdrtAJ`JXQrH~ㅐfrd|HAZp˂rtAJlbے`~HfpHAZp˂f`vlJtAZp˂tAJl璐ے`J|ZdQZp˂f`vXZdQbtpvnJltے`JXQ|ZdQbp˂r`vXn˂pZHA~fpvltb`JXQrZdQbt˂rXQltb˂pZ`vXnZdQbtrXQJtbdQJXQrvnXrXQJXnvrd|rXQJ`tbdQZXQr˂bnXvrXQJ`nvplJtArXQJ`bdQZ|r˂ptlJXQJ`ےvpfbے`nXvdQZ|˂pZlJtAJ`ےdQZ|HAbےvˍpfl|Z`ےbZ|d˂pZHAv`f`ےbpfH~ZdQbtےbHA|drpZHAb`f~ےbHAfH~rd|ےHAZdrtAZHAbtArdbHAZH~fJXQr`f~drtAJHAbےrd|bHAZpdtAJl`JXQrH~ㅐfdQbtHAZp˂tAJlbے`~HfpHAZp˂f`vl|ZZp˂tAJl璐ے`JHfpvZp˂f`vXZdQbtp˂rJltے`JXQ|ZdQbp˂r`vXn˂p`JHfpvltb`JXQrZdQbt˂rXQtbn˂p``vXnlJtArrXQJtbnJXQrvnXrXQJXnvdQbtrXQJ`tbdQZXQr˂nXvrXQJ`nvpl|ZXQJ`ےbdQZ|r˂ptlJXQJ`ےvpfXQrbtnXvdQZ|˂pZlJtAJ`ےvpfJXQrvˍpfd|Z`ےbvpfH˂pZHAv`f`ےbpfH~lJtArےbHA|drpZHAb`f~ےbHAfH~dQbt璐bHAZdrtAZHAbtArdbHAZH~fl|Z`ffpdrtAJHAbےrd|bHAZpHf`˂pZHAH~ㅐfdQbtHAZp˂f`vbے`~HfpHAZp˂f`vd|ZZp˂tAJl璐ے`JHfpvZp˂f`vXlJtArp˂rJltے`JXQ|ZdQbp˂r`vXndQbtvnrltb`JXQrZdQbt˂rXQvXnbے``vXnl|ZdQrXQJXnvJXQrvnXrXQJXnvdQbtrXQJ`tbdQZXQr˂nXvrXQJ`nvpd|ZXQJ`ےbdQZ|r˂pnXv`XQJ`ےvpflJtArXQJ`ےdQZ|˂pZlJtAJ`ےvpfHJXQrvˍp|btl`ےbpfH~˂pZHAv`f`ےbpfH~l|ZdQےbHA|dtApZHAb`f~ےbHAfH~dQbt璐bHAZdrtAZHAbf~HbHAZH~fd|ZHAZpdrtAJHAbےrd|bHAZp~f`˂p`ZdrQtJtArdHAZp˂f`vbے`~HfpHAZp˂f`vbtlZp˂Jltے`JHfpvZp˂f`vXl|ZdQp˂rJltے`JXQfpvp˂r`vXndQbt˂rXQltb`JXQrZdQbt˂rXQvXnQXb㉀Jlt|ZdQrXQJXnvJXQrvnXrbdQXnvJtArdrXQJ`bnvXQr˂nXvrXQJ`nvpbtlXQJ`ےbdQZ|r˂pnXv`XQJ`ےvpfl|ZdQJ`ےdQZ|˂pZlJtAJ`ےvpfHpJAHrbAdZ|btl`ےbpfH~˂pZHAv`fZ|dpfH~|ZdQےbHApfHpZHAb`f~ےbHAfH~JtArdbHAZdrtAZHAbf~HbHAZH~fbtlbHAZpdrtAJHAbےrd|bHAZp~f`ˁ`ZdrQt|ZdQbHAZp˂f`vbے`~HfprtAJlf`vbtlZp˂f`vXے`JHfpvZp˂f`vX|ZdQp˂rJltے`JXQfpvp˂r`vXnJtArd˂rXQltb`JXQrZdQbn˂rXQvXnQXb㉀JlttlJrXQJXnvJXQrvnXtbdQXnv|ZdQbrXQJ`nvpXQr˂nXvrXQJ`nvpbtlXQJ`ےbdQZ|r˂pnXv`XQJ`ےvpf|ZdQJ`ےdQZ|˂pZXv`fJ`ےvpfHp`ZQXbAdZ|tArd`ےbpfH~˂pZHAv`fZ|dpfH~tlJےbHAfH~pZHAb`f~ےbHAfH~|ZdQbbHAZdtAJZHAbf~HbHAZH~fbtlbHAZpdrtAJHAbے~HfbHAZp~f`b㉀ۑpdrQt|ZdQbHAZp˂f`vbے`~HfprtAJlf`vtArdZp˂f`vXے`JHfpvZp˂f`vXtlJp˂rltbے`JXQfpvp˂r`vXn|ZdQb˂rXQltb`JXQrpvn˂rXQvXnJAHrJlttl|rXQJXnvJXQrvnXtbdQXnv|ZdQbrXQJ`nvpXQr˂nXvrbdQZnvptArdXQJ`ےnvpr˂pnXv`XQJ`ےvpftlJJ`ےdQZ|˂pZXv`fJ`ےvpfHˁ`ZQXbAdZ|ZdQbn`ےbpfH~˂pZHAv`fZ|dpfH~tl|ےbHAfH~pZHAb`f~|drfH~|ZdQbbHAZfHfZHAbf~HbHAZH~ftArdbHAZpdrtAJHAbے~HfbHAZp~f`b㉀ۑpdrQtXv`fHAZp˂f`vے`J~HfprtAJlf`vZdQbtZp˂f`vXے`JHfpvtAJlf`vXtl|p˂r`vXnے`JXQfpvp˂r`vXn|ZdQb˂rXQltb`JXQrpvn˂rXQvXn`ZQXbJlt~fpvrXQJXnvXQrbtvnXtbdQXnvlJtArXQJ`nvpXQr˂nXvtbdQZnvpZdQbtXQJ`ےvpfr˂pnXv`XQJ`ےvpftl|J`ےdQZ|˂pZXv`fJ`ےvpfHۑpJbAdZ|nXv``ےbpfH~lJtAv`fZ|dpfH~rd|ےbHAfH~pZHAb`f~|drfH~lJtAbHAZH~fZHAbf~HbHAZH~fZdQbtbHAZpdtAJlHAbے~HfbHAZp~f`AHr󙐂˂drQtf~HHAZp˂f`vd|Z~HfprtAJlf`vZdQbtZp˂f`vXے`JHfpvtAJlf`vXrd|p˂r`vXnے`JXQfpvp˂r`vXnlJtA˂rXQtbn`JXQrpvn˂rXQvXn`ZQXbJltfpvrXQJXnvdQbtvnXtbdQXnvl|ZrXQJ`nvpXQr˂nXvtbdQZnvpZdQbtXQJ`ےvpfr˂pnXv`bdQZ|vpfrd|J`ےvpf˂pZXv`fJ`ےvpfHۑp`bAdZ|nXv``ےbpfH~lJtArv`fZ|dpfH~dQbnXےbHAfH~pZHA`f~|drfH~l|ZbHAZH~fZHAbf~HdrtAH~fZdQbtbHAZpHf`HAbے~HfbHAZp~f`ZQXb㉀drQtf~fpHAZp˂f`vd|Z~HfprtAJlf`vv`f~Zp˂f`vXے`JXQHfpvtAJlf`vXdQbtp˂r`vXnے`JXQfpvJlt`vXnl|Z˂rXQvXn`JXQrpvn˂rXQvXnۑpJAHJltvnXrXQJXnvdQbtvnXtbdQXnrfpvrXQJ`nvprbt璀nXvtbdQZnvplJtArXQJ`ےvpfr˂pnXv`bdQZ|vpfdQbtJ`ےvpfH˂pZXv`fJ`ےvpfHr󙐂ˁ`bAdZ|v`f`ےbpfH~lJtArv`fZ|d˂p`JnXv`ےbHAfH~lJtAd`f~|drfH~d|ZbHAZH~fZHAbf~HdrtAH~flJtArbHAZp~f`HAbے~HfbHAZp~f`ZQXb㉀drQt~HfpHAZp˂f`vd|Z~HfprtAJlXQr˂f~HZp˂f`vX|ZdQHfpvtAJlf`vXdQbtp˂r`vXnے`JXQfpvJlt`vXnd|Z˂rXQvXn`JXQrpvn˂rbvXnۑp`ZJltvnXrbdQXnvdQbtvnXtbdQpZHAbfpvrXQJ`nvpbtlnXvtbdQZnvpl|ZdQXQJ`ےvpfr˂pnXv`bdQZ|vpfdQbtJ`ےvpfH˂pZXv`fdQZ|vpfHQXb㉀bAdZ|v`f~Z|dpfH~lJtArv`fZ|dے`JnXv`fےbHAfH~JtArd`f~|drfH~bnXvbHAZH~fZHAےf~HdrtAH~fl|ZdQbHAZp~f`HAbے~HfdrtAJ~f`pJAHrdrQtfpvrtAJlf`vd|Z~HfprtAJlXQr˂~fpvZp˂f`vX|ZdQHfpvtAJlf`vX`f~fpp˂r`vXn`JXQrfpvJlt`vXnbtl˂rXQvXn`JXQrpvnltbvXnˁ`ZJltnXv`tbdQXnvdQbtvnXtbdQp`JXQnXvrXQJ`nvpbtlnXvtbdQZnr˂vnXXQJ`ےvpfbtlnXv`bdQZ|vpfJtArdJ`ےvpfH˂pZXv`fdQZ|vpfHQXb㉀bAdZ|f~HZ|dpfH~lJtArv`fZ|dr˂p`f~ےbHAfH~JtArd`f~|drp`JXQv`fbHAZH~fJtAdf~HdrtAH~f|ZdQbHAZp~f`HAbے~HfdrtAJ~f`p`ZQXdrQtfpvrtAJlf`vd|ZHfpvrtAJlZHAbHfpvZp˂f`vX|ZdQHfpvtAJlr˂p~Hfpp˂r`vXn|ZdQbfpvJlt`vXnbtl˂rXQvXn`JXQrpvnltbvXnb㉀ۑpJltnXv`ftbdQXnvdQbt璀nrXQtbdQے`JXQnXvrbdQZnvpbtlnXvtbdQZZHAbvnXXQJ`ےvpftlJnXv`bdQZ|vpf|ZdQbJ`ےvpfH˂pZXv`fdQZ|vpfHJAHrbAdZ|~fpvZ|dpfH~lJtArJ`ےZ|dr˂p`f~fp|drfH~JtArd`f~|drے`JXQv`f~bHAZH~ftArdf~HdrtAH~fnXv`bHAZp~f`HAے`~HfdrtAJ~f`ˁ`ZQXdrQtnXvrtAJlf`vd|ZHAZp˂rtAJl`JXQrvnXtAJlf`vX|ZdQHfpvtAJlr˂pfpvp˂r`vXn|ZdQbfpvJlt`vXnf~fp˂rXQvXnJXQrbpvnltbvXnb㉀XnJlt`f~tbdQXnvdQbt璀rXQJtbdQ˂pZv`ftbdQZnvpbtlnXvtbdQZ`JXQrnXv`XQJ`ےvpftlJnXv`bdQZ|r˂pvnXJ`ےvpfHtlJXv`fdQZ|vpfHvˍpfbAdZ|HfpvZ|dpfH~lJtAr`ےbZ|dHAbے~Hfp|drfH~JtArd`fH|dr˂pZf~HbHAZH~ftArdf~HdrtA`JXQrv`fbHAZp~f`tAd|~HfdrtAJ~f`H~ㅐfۂdrQtnXvrtAJlf`vd|ZHAZp˂rtAJl`JXQrvnXtAJlf`vX|ZdQfpvtAJlHAbےfpvp˂r`vXn|ZdQbfpvJlt˂pZ~Hfp˂rXQvXnZdQbtpvnltbvXn`vXnJlt`f~fptbdQXnvdQbt璀rXQJtbdQ˂p`v`f~tbdQZnvpbtlnrXQJtbdQZ`JXQrnXv`bdQZ|vpftlJnXv`bdQZ|HAbےvnXJ`ےvpfHlJtAXv`fdQZ|vpfHvˍpfbAdZ|vnXZ|dpfH~lJtAr`ےbZ|dJXQrfpv|drfH~JtArd`ےHA|dr˂p`f~fpdrtAH~ftArdf~HdrtA`JXQrv`f~fbHAZp~f`rd|~HfdrtAJ~f`H~ㅐfۂdrQt----------------------......................................... \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv35_3.dat b/vendor/endroid/qr-code/assets/data/qrv35_3.dat new file mode 100644 index 000000000..a827705dd --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv35_3.dat @@ -0,0 +1,313 @@ +{|{|{|{|zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmlklklklkjijijijifefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZY{|{{{{{{zyzyzyzyxwxwxwvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijifefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZY|{|{|{|{zyzyzyzyvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijifefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZY|{|{|{|{zyzyzyzyvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijifefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZY|{|{|{|{zyzyzyzyvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijifefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZY|{|{|{|{zyzyzyzyvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijifefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZY|{|{|{{{zyzyzyzyvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijifefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZY{{{|{|{|zyzyzyzyvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijifefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZY{|{|{|{|zyzyzyzyvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijifefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZY{|{|{|{|zyzyzyzyvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijihgfefefefebabababa`_`_`_`_^]^]^]^]ZYZYZYZY{|{|{|{|zyzyzyzyvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkhghghghgfefefefebabababa`_`_`_`_^]^]\[\[ZYZYZYZY{|{|{|{|zyzyzyzyvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkhghghghgfefefefebabababa`_`_`_`_\[\[\[\[ZYZYZYZY{{{{{{|{zyzyzyzyvuvuvuvutstststsrqrqrqponmnmnmnmlklklklkhghghghgfefefefebabababa`_`_`_`_\[\[\[\[ZYZYZYZY|{|{|{|{zyzyzyzyvuvuvuvutstststspopopoponmnmnmnmlklklklkhghghghgfefefefebabababa`_`_`_`_\[\[\[\[ZYZYZYZY|{|{|{|{zyzyzyzyvuvuvuvutstststspopopoponmnmnmnmlklklklkhghghghgfefefefebabababa`_`_`_`_\[\[\[\[ZYZYZYZY|{|{|{|{zyzyzyxwvuvuvuvutstststspopopoponmnmnmnmlklklklkhghghghgfefefefebabababa`_`_`_`_\[\[\[\[ZYZYZYZY|{|{|{|{xwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkhghghghgfefefefebabababa`_`_`_`_\[\[\[\[ZYZYZYZY~}~}|{|{{{{{xwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkhghghghgfefefedcbabababa`_`_`_`_\[\[\[\[ZYZYZYZY~}~}~}~}{|{|{|{|xwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkhghghghgdcdcdcccbabababa`_`_`_`_\[\[\[\[ZYZYZYZY~}~}~}~}{|{|{|{|xwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkhghghghgcccdcdcdbabababa`_`_`_`_\[\[\[\[ZYZYZYZY~}~}~}~}{|{|{|{|xwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkhghghghgcdcdcdcdbabababa`_`_`_`_\[\[\[\[ZYZYZYZY~}~}~}~}{|{|{|{|xwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkhghghghgcdcdcdcdbabababa`_`_`_`_\[\[\[\[ZYZYZYZY~}~}~}~}{|{|{|{{xwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkhghghghgcdcdcdcdbabababa`_`_`_`_\[\[\[\[ZYZYZYZY~}~}~}~}{{{{|{|{xwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklkjihghghghgcdcdcdcdbabababa`_`_`_`_\[\[\[\[ZYZYZYZY~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvutstststspopopoponmnmnmnmjijijijihghghghgccccccdcbabababa`_`_^]^]\[\[\[\[ZYZYZYZY~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvutstststspopopoponmnmnmnmjijijijihghghghgdcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZY~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvutststsrqpopopoponmnmnmnmjijijijihghghghgdcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZY~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmjijijijihghghghgdcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZY~}~}~}~}|{{{{{|{xwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmjijijijihghghghgdcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZY~}~}~}~}|{|{|{zyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmjijijijihghghghgdcdcccccbabababa^]^]^]^]\[\[\[\[ZYZYZYZY~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmjijijijihghghghgcdcdcdcdbabababa^]^]^]^]\[\[\[\[ZYZYZYZY~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmjijijijihghghghgcdcdcdcdbabababa^]^]^]^]\[\[\[\[ZYZYZYZY~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmjijijijihghghghgcdcdcdcdbabababa^]^]^]^]\[\[\[\[ZYZYZYZY~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmjijijijihghghghgcdcdcdcdbabababa^]^]^]^]\[\[\[\[ZYZYZYZY~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmjijijijihghghghgcdcdcdccbabababa^]^]^]^]\[\[\[\[ZYZYZYZY~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmjijijijihghghghgccccdcdcbabababa^]^]^]^]\[\[\[\[ZYZYXWXW~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmjijijijihghghghgdcdcdcdcbabababa^]^]^]^]\[\[\[\[XWXWXWXW~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmlkjijijijihghghghgdcdcdcdcbabababa^]^]^]^]\[\[\[\[XWXWXWXW~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopopolklklklkjijijijihghghghgdcdcdcdcbaba`_`_^]^]^]^]\[\[\[\[XWXWXWXW~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopopolklklklkjijijijihghghghgdcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWXWXWXWXW~}~}~}~}zyzyzyzyxwxwxwxwvuvuvutsrqrqrqrqpopopopolklklklkjijijijihgfefefedccccccd`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWXWXWXWXW~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqpopopopolklklklkjijijijifefefefecdcdcdcd`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWXWXWXWXW~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqpopopopolklklklkjijijijifefefefecdcdcdcd`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWXWXWXWXW~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqpopopopolklklklkjijijijifefefefecdcdcdcd`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWXWXWXWXW~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqpopopopolklklklkjijijijifefefefecdcdcdcd`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWXWXWXWXW~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqpopopopolklklklkjijijijifefefefecdcdcccc`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWXWXWXWXW~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqpopopopolklklklkjijijijifefefefeccdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWXWXWXWXW~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqpopopopolklklklkjijijijifefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWXWXWXWXW|{|{|{|{zyzyzyzyxwxwxwxwtstststsrqrqrqrqpopopopolklklklkjijijijifefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWXWXWXWXW{{{{{|{|zyzyzyzyxwxwxwxwtstststsrqrqrqrqpopopopolklklklkjijijijifefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[ZYZYXWXWXWXWXWXWXWXW{|{|{|{|zyzyzyzyxwxwxwxwtstststsrqrqrqrqpopopopolklklklkjijijijifefefefedcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWXWXWXWXW{|{|{|{|zyzyzyzyxwxwxwxwtstststsrqrqrqrqpopoponmlklklklkjijijijifefefefeccccdcdc`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWXWXWXWXW{|{|{|{|zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmlklklklkjijijijifefefefedcdcbaba`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKLHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;8787878734343434212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!    + + + + XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMKLKKKKKKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;8787878734343434212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!    + + + + XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;:9:9:98787878734343333212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!    + + + + XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:9878787873343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!    + + + + XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!    + + + + XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCBABABA@?@?@?@?>=>=>=>=:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!    + + + + XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKKKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!    + + + + XWXWVUVUTSTSTSTSRQRQRQRQNMNMNMNMKKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!    + + + + VUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787873333343421212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!   + + + + VUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787873434343421212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"! + + + + VUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787873434343421212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"! + + + + VUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787873434343421212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + VUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787873434343421212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + VUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787873433333321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + VUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#     + + + + VUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#     + + + + VUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=<;<;<;:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#     + + + + VUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:987878787434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#     + + + + VUVUVUVUTSTSTSTSRQRQPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:987878765434343330/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#     + + + + VUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565333434340/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#     + + + + VUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565343434340/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#     + + + + VUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565343434340/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#     + + + + VUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565343434340/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#     + + + + VUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565343434340/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        + + + + VUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565333333430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        + + + + VUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + VUVUVUVUTSTSTSTSPOPOPOPONMNMLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + VUVUVUVUTSTSTSTSPOPOPOPOLKLKKKKKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + VUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + VUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565434333330/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + VUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?>=>=>=<;<;<;<;:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + VUVUVUVUTSTSTSTSPOPOPOPOKLKLKLKLJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:965656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + VUVUVUVUTSTSRQRQPOPOPOPOKLKLKLKKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:965656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + VUVUVUVURQRQRQRQPOPOPOPOKKKKLKLKJIJIJIJIHGFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:965656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + VUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:965656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        VUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:965656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        VUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:965656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        VUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:965656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        VUVUVUVURQRQRQRQPOPOPOPOLKKKKKKLJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:965656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        VUVUVUVURQRQRQRQPOPOPOPOKLKLKLKLJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:965656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!        VUVUVUVURQRQRQRQPOPOPOPOKLKLKLKLJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:965656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!        VUVUVUVURQRQRQRQPOPOPOPOKLKLKLKLJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:987878765656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!      VUVUVUVURQRQRQRQPOPOPOPOKLKLKLKLJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!    VUVUVUVURQRQRQRQPOPOPOPOKLKLKKKKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!    VUVUVUVURQRQRQRQPOPOPOPOKKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBA@?@?@?>=>=>=>=<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!    VUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!    VUVUTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!    TSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + TSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + TSTSTSTSRQRQRQRQNMNMNMNMKKKKKLKLHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;8787878765434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + TSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKLHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;8787878743333334212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + TSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKLHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;8787878734343434212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + TSTSTSTSRQRQRQRQNMNMNMNMKLKLKLKLHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;8787878734343434212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + IIJJKKLL(''&&%%$~~}}UUVVWWXX ttssrrqqaabbccddYYXXWWVV^^__``aakkjjiihhjjkkllmm __^^]]\\vvwwxxyyBBCCDDEEbbaa``__ssttuuvvMMNNOOPP$##""!! ||{{zzyyYYZZ[[\\ + + ppoonnmmeeffgghhUUTTSSRR~}|bbccddeeggffeeddnnooppqq + + [[ZZYYXXzz{{||}}FFGGHHII + +^^]]\\[[wwxxyyzzQQRRSSTT!!""##xxwwvvuu]]^^__``llkkjjiiiijjkkllQQKKJJII{{zzyyxxffgghhiiccbbaa``rrssttuuWWVVUUTT~~JJKKQQRR ZZYYXXWW{{||}}~~UUVVWWXX$$%%&&''ttssrrqqaabbccddhhggffeemmnnoopp + + HHGGFFEEwwvvuuttjjkkllmm __^^]]\\vvwwxxyySSRRQQPPSSTTUUVVVVUUTTSSYYZZ[[\\(())**++ppoonnmmeeffgghhddccbbaaqqrrsstt DDCCBBAAssrrqqppnnooppqq + + [[ZZYYXXzz{{||}}OONNMMLLWWXXYYZZRRQQPPOO !!""]]^^__``,,--..//llkkjjiiiijjkkll``__^^]]uuvvwwxx@@??>>==oonnmmllrrssttuuWWVVUUTT~~KKJJIIHH[[\\]]^^NNMMLLKK##$$%%&&aabbccdd00112233 + +hhggffeemmnnoopp + + \\[[ZZYYyyzz{{||<<;;::99kkjjiihgvvwwxxyySSRRQQPP !!GGFFEEDD__``aabbJJIIHHGG''(())**~~}}eeffgghh99::;;<< ddccbbaaqqrrsstt XXWWVVUU}}~~33221100fedccbbazz{{||}}OONNMMLL""##$$%%CCBBAA@@cciijjkk !!""FFEEDDCC++,,--..||{{zzyyiijjkkll==>>??@@``__^^]]uuvvwwxxTTSSRRQQ //..--,,a``__^^]~~KKJJIIHH&&''(())??>>==<>==<<;;33445566ttssrrqqqqrrssttEEFFGGHH XXWWVVUU}}~~LLKKJJII%%&&''((''&&%%$$YXXWWVVU""##$$%%CCBBAA@@..//001177665544ttuuvvww++,,--..::998877778899::ppoonnmmuuvvwwxxIIJJKKQQTTSSRRQQ HHGGFFEE))**++,,##""!!UTTSSRRQ&&''(())??>>==<<2233445533221100xxyyzz{{//00112266554433;;<<==>>llkkjjiiyyzz{{||RRSSTTUUPPOONNMM!!""##$$DDCCBBAA--..//00QPONMLKK**++,,--;;::998866778899//..--,,33445566221100//??@@AABBhhggffee}}~~VVWWXXYYLLKKJJII%%&&''((@@??>>==11223344JJIIHHGG..//001177665544::;;<<==++**))((778899::..--,,++CCDDEEFFddccbbaaZZ[[\\]] HHGGFFEE))**++,,<<;;::9955667788FFEEDDCC2233445533221100>>??@@AA''&&%%$$;;<<==>>**))((''GGHHIIJJ``__^^]]^^__``aa!!""##$$DDCCBBAA--..//008877665599::;;<< BBAA@@??66778899//..--,,BBCCDDEE##""!! {{zz??@@AABB&&%%$$##KKLLMMNN\\[[ZZYYbbcciijj%%&&''((@@??>>==1122334444332211==>>??@@ + + >>==<<;;::;;<<==++**))((FFGGHHIIyyxxwwvvCCDDEEFF""!! OOPPQQRRXXWWVVUUkkllmmnn))**++,,<<;;::995566778800//..--AABBCCDD::998765>>??@@AA''&&%%$$JJKKLLMMuuttssrrGGHHIIJJSSTTUUVVTTSSRRQQooppqqrr--..//008877665599::;;<<,,++**))EEFFGGHH + +43322110BBCCDDEE##""!! NNOOPPQQqqppoonnKKLLMMNN~~}}||{{WWXXYYZZPPOONNMMssttuuvv1122334444332211==>>??@@((''&&%%IIJJKKLL 0//..--,FFGGHHIIRRSSTTUUmmllkkjjOOPPQQRRzzyyxxww[[\\]]^^LLKKJJIIwwxxyyzz5566778800//..--AABBCCDD$$##""!!MMNNOOPP,++**))(JJKKLLMM~~}}||VVWWXXYY iiccbbaaSSTTUUVVvvuuttss__``aabbHHGGFFEE{{99::;;<<,,++**))EEFFGGHH QQRRSSTT(''&&%%$NNOOPPQQ{{zzyyxxZZ[[\\]] + + ``__^^]]WWXXYYZZ rrqqppooccddeeffDDCCBBAA==>>??@@((''&&%%IIJJKKLL~~}}UUVVWWXX$##""!! RRSSTTUUwwvvuutt^^__``aa\\[[ZZYY[[\\]]^^ + + nnmmllkkgghhiijj@@??>>==AABBCCDD$$##""!!MMNNOOPP||{{zzyyYYZZ[[\\!!""##~~}}||VVWWXXYY ssrrqqppbbccddeeXXWWVVUU__``aabbjjiihhggkkllmmnn<<;;::99EEFFGGHH QQRRSSTTxxwwvvuu]]^^__``$$%%&&''{{zzyyxxZZ[[\\]] + + oonnmmllffgghhiiTTSSRRQQ~}|{{ccddeeffffeeddccooppqqrr88776655IIJJKKLL~~}}UUVVWWXX ttssrrqqaabbccdd(())**++wwvvuutt^^__``aakkjjiihhjjkkllmm KKJJIIHHzzyyxxwwgghhiijjbbaa``__ssttuuvv44332211{{MMNNOOPP||{{zzyyYYZZ[[\\ + + ppoonnmmeeffgghh,,--..//ssrrqqppbbccddeeggffeeddnnooppqq + + GGFFEEDDvvuuttsskkllmmnn + +^^]]\\[[wwxxyyzz00//..--zzyyxxwwQQRRSSTTxxwwvvuu]]^^__``llkkjjiiiijjkkll00112233 + +oonnmmllffgghhiiccbbaa``rrssttuuCCBBAA@@rrqqppooooppqqrr ZZYYXXWW{{||}}~~,,++**))vvuuttssUUVVWWXX ttssrrqqaabbccddhhggffeemmnnoopp99::;;<< kkjjiihhjjkkllmm __^^]]\\vvwwxxyy??>>==<>??@@ggffeeddnnooppqq + + [[ZZYYXXzz{{||}};;::9933jjiihgfewwxxyyzzRRQQPPOO$$##""!!nnmmllkk]]^^__``llkkjjiiiijjkkll``__^^]]uuvvwwxxAABBCCDDccbbaa``rrssttuuWWVVUUTT~~221100//dccbbaa`{{||}}~~NNMMLLKK jjiiccbbaabbccddhhggffeemmnnoopp + + \\[[ZZYYyyzz{{||EEFFGGHH __^^]]\\vvwwxxyySSRRQQPP !!..--,,++`__^^]]\JJIIHHGGaa``__^^eeffgghhddccbbaaqqrrsstt XXWWVVUU}}~~IIJJKKQQ + + [[ZZYYXXzz{{||}}OONNMMLL""##$$%%**))((''\[[ZZYYX !!""FFEEDDCC]]\\[[ZZ~}|iijjkkll``__^^]]uuvvwwxxTTSSRRQQRRSSTTUUWWVVUUTT~~KKJJIIHH&&''(())&&%%$$##XWWVVUUT##$$%%&&BBAA@@??YYXXWWVV{{zzyyxxmmnnoopp + + \\[[ZZYYyyzz{{||PPOONNMMVVWWXXYYSSRRQQPP !!GGFFEEDD**++,,--""!!TSSRRQQP''(())**>>==<<;; UUTTSSRRwwvvuuttqqrrsstt XXWWVVUU}}~~LLKKJJIIZZ[[\\]]OONNMMLL""##$$%%CCBBAA@@..//0011ONMLKKJJ++,,--..::998877 + + QQKKJJIIssrrqqppuuvvwwxxTTSSRRQQ HHGGFFEE^^__``aaKKJJIIHH&&''(())??>>==<<22334455IIHHGGFF//00112266554433 + + HHGGFFEEoonnmmllyyzz{{||PPOONNMM!!""##$$DDCCBBAAbbcciijj !!GGFFEEDD**++,,--;;::998866778899EEDDCCBB33445566221100// DDCCBBAAkkjjiihg}}~~LLKKJJII%%&&''((@@??>>==kkllmmnn""##$$%%CCBBAA@@..//001177665544::;;<<== + +AA@@??>>778899::..--,,++@@??>>==fedccbba HHGGFFEE))**++,,<<;;::99ooppqqrr&&''(())??>>==<<2233445533221100>>??@@AA ==<<;;::;;<<==>>**))((''VVUUTTSS<<;;::99a``__^^]!!""##$$DDCCBBAA--..//0088776655ssttuuvv**++,,--;;::998866778899//..--,,BBCCDDEE99876543??@@AABB&&%%$$##RRQQPPOO33221100]\\[[ZZY%%&&''((@@??>>==1122334444332211wwxxyyzz..//001177665544::;;<<==++**))((FFGGHHII + + 3221100/CCDDEEFF""!! NNMMLLKK //..--,,YXXWWVVU))**++,,<<;;::995566778800//..--{{2233445533221100>>??@@AA''&&%%$$JJKKLLMM /..--,,+GGHHIIJJJJIIHHGG!!""##$$++**))((UTTSSRRQ--..//008877665599::;;<<,,++**))66778899//..--,,BBCCDDEE##""!! NNOOPPQQ+**))(('KKLLMMNN~~}}||{{FFEEDDCC%%&&''((''&&%%$$QPONMLKK1122334444332211==>>??@@((''&&%%::;;<<==++**))((FFGGHHIIRRSSTTUU'&&%%$$#OOPPQQRRzzyyxxwwBBAA@@??))**++,,##""!!JJIIHHGG5566778800//..--AABBCCDD$$##""!!{{>>??@@AA''&&%%$$JJKKLLMM~~}}||VVWWXXYY#""!! SSTTUUVVvvuuttss>>==<<;;--..//00FFEEDDCC99::;;<<,,++**))EEFFGGHH zzyyxxwwBBCCDDEE##""!! NNOOPPQQ{{zzyyxxZZ[[\\]]!!""##$$~~}}||{{WWXXYYZZ rrqqppoo::99887711223344BBAA@@??==>>??@@((''&&%%IIJJKKLLvvuuttssFFGGHHIIRRSSTTUUwwvvuutt^^__``aa%%&&''((zzyyxxww[[\\]]^^ + + nnmmllkk6655443355667788>>==<<;;AABBCCDD$$##""!!MMNNOOPPrrqqppooJJKKLLMM~~}}||VVWWXXYY ssrrqqppbbccddee))**++,,vvuuttss__``aabbjjiihhgg221100//99::;;<< ::998765EEFFGGHH QQRRSSTTnnmmllkkNNOOPPQQ{{zzyyxxZZ[[\\]] + + oonnmmllffgghhii--..//00 rrqqppooccddeeffffeeddcc..--,,++==>>??@@ + + + +43322110IIJJKKLL~~}}UUVVWWXX jjiiccbbRRSSTTUUwwvvuutt^^__``aakkjjiihhjjkkllmm11223399 + + nnmmllkkgghhiijjbbaa``__**))((''AABBCCDD 0//..--,MMNNOOPP||{{zzyyYYZZ[[\\ + + aa``__^^VVWWXXYY ssrrqqppbbccddeeggffeeddnnooppqq::;;<<==jjiihhggkkllmmnn + +^^]]\\[[&&%%$$##EEFFGGHH,++**))(QQRRSSTTxxwwvvuu]]^^__``]]\\[[ZZZZ[[\\]] + + oonnmmllffgghhiiccbbaa``rrssttuu>>??@@AAffeeddccooppqqrr ZZYYXXWW""!! SSTTUUVV&%%$$##"PPQQRRSSyyxxwwvv\\]]^^__ ^^]]\\[[YYZZ[[\\ + + ppoonnmmeeffgghhddccbbaaqqrrsstt==>>??@@ggffeeddnnooppqq + + [[ZZYYXXzz{{||}}33221100SSRRQQPP~~}}||{{WWXXYYZZ!!"!! ~~TTUUVVWWuuttssrr``aabbccZZYYXXWW]]^^__``llkkjjiiiijjkkll``__^^]]uuvvwwxxAABBCCDDccbbaa``rrssttuuWWVVUUTT~~//..--,,OONNMMLLzzyyxxww[[\\]]^^""##$$%%}}||{{zzXXYYZZ[[ + +qqppoonnddeeffggVVUUTTSS~aabbccddhhggffeemmnnoopp + + \\[[ZZYYyyzz{{||EEFFGGHH __^^]]\\vvwwxxyySSRRQQPP !!++**))((KKJJIIHHvvuuttss__``aabb&&''(())yyxxwwvv\\]]^^__ mmllkkjjhhiijjkkRRQQKKJJ}|{{zzyyeeffgghhddccbbaaqqrrsstt XXWWVVUU}}~~IIJJKKQQ + + [[ZZYYXXzz{{||}}OONNMMLL""##$$%%''&&%%$$GGFFEEDD rrqqppooccddeeff**++,,--uuttssrr``aabbcciihhggffllmmnnoo + + IIHHGGFFxxwwvvuuiijjkkll``__^^]]uuvvwwxxTTSSRRQQRRSSTTUUWWVVUUTT~~KKJJIIHH&&''(())##""!!CCBBAA@@ + + nnmmllkkgghhiijj..//0011 qqppoonnddeeffggeeddccbbppqqrrss EEDDCCBBttssrrqqmmnnoopp + + \\[[ZZYYyyzz{{||PPOONNMMVVWWXXYYSSRRQQPP !!GGFFEEDD**++,,--??>>==<<jjiihhggkkllmmnn223399:: + + mmllkkjjhhiijjkkaa``__^^ttuuvvwwAA@@??>>ppoonnmmqqrrsstt XXWWVVUU}}~~LLKKJJIIZZ[[\\]]OONNMMLL""##$$%%CCBBAA@@..//0011;;::9988ffeeddccooppqqrr;;<<==>>iihhggffllmmnnoo + + ]]\\[[ZZxxyyzz{{==<<;;::llkkjjiiuuvvwwxxTTSSRRQQ HHGGFFEE^^__``aaKKJJIIHH&&''(())??>>==<<2233445577665544bbaa``__ssttuuvv??@@AABBeeddccbbppqqrrss YYXXWWVV||}}~~99332211hgfedccbyyzz{{||PPOONNMM!!""##$$DDCCBBAAbbcciijj !!GGFFEEDD**++,,--;;::998866778899 33221100 + +^^]]\\[[wwxxyyzzCCDDEEFFaa``__^^ttuuvvwwUUTTSSRR00//..--baa``__^}}~~LLKKJJII%%&&''((@@??>>==kkllmmnn""##$$%%CCBBAA@@..//001177665544::;;<<== + + + +//..--,, ZZYYXXWW{{||}}~~GGHHIIJJ + + ]]\\[[ZZxxyyzz{{QQPPOONN !!""##,,++**))^]]\\[[Z HHGGFFEE))**++,,<<;;::99ooppqqrr&&''(())??>>==<<2233445533221100>>??@@AA ++**))((VVUUTTSSKKQQRRSS YYXXWWVV||}}~~MMLLKKJJ$$%%&&''((''&&%%ZYYXXWWV!!""##$$DDCCBBAA--..//0088776655ssttuuvv**++,,--;;::998866778899//..--,,BBCCDDEE''&&%%$$RRQQPPOOTTUUVVWWUUTTSSRRIIHHGGFF(())**++$$##""!!VUUTTSSR%%&&''((@@??>>==1122334444332211wwxxyyzz..//001177665544::;;<<==++**))((FFGGHHII##""!! NNMMLLKKXXYYZZ[[QQPPOONN !!""##EEDDCCBB,,--..//RQQPONML))**++,,<<;;::995566778800//..--{{2233445533221100>>??@@AA''&&%%$$JJKKLLMMJJIIHHGG\\]]^^__MMLLKKJJ$$%%&&''AA@@??>>00112233KKJJIIHH--..//008877665599::;;<<,,++**))66778899//..--,,BBCCDDEE##""!! NNOOPPQQ!!""## !!""FFEEDDCC``aabbccIIHHGGFF(())**++==<<;;::44556677GGFFEEDD1122334444332211==>>??@@((''&&%%::;;<<==++**))((FFGGHHIIRRSSTTUU$$%%&&''##$$%%&&BBAA@@??iijjkkll !!""##EEDDCCBB,,--..//998877668899::;; CCBBAA@@5566778800//..--AABBCCDD$$##""!!{{>>??@@AA''&&%%$$JJKKLLMM~~}}||VVWWXXYY(())**++''(())**>>==<<;;mmnnoopp$$%%&&''AA@@??>>0011223355443322<<==>>?? + + ??>>==<<99::;;<<,,++**))EEFFGGHH zzyyxxwwBBCCDDEE##""!! NNOOPPQQ{{zzyyxxZZ[[\\]],,--..// ++,,--..::998877qqrrsstt(())**++==<<;;::445566771100//..@@AABBCC;;::9987==>>??@@((''&&%%IIJJKKLLvvuuttssFFGGHHIIRRSSTTUUwwvvuutt^^__``aa00112233 + + //00112266554433uuvvwwxx,,--..//998877668899::;;--,,++**DDEEFFGG 65433221AABBCCDD$$##""!!MMNNOOPPrrqqppooJJKKLLMM~~}}||VVWWXXYY ssrrqqppbbccddee99::;;<< + + 33445566221100//yyzz{{0011223355443322<<==>>??))((''&&HHIIJJKK + + 100//..-EEFFGGHH QQRRSSTTnnmmllkkNNOOPPQQ{{zzyyxxZZ[[\\]] + + oonnmmllffgghhii==>>??@@778899::..--,,++445566771100//..@@AABBCC%%$$##""LLMMNNOO-,,++**)IIJJKKLL~~}}UUVVWWXX jjiiccbbRRSSTTUUwwvvuutt^^__``aakkjjiihhjjkkllmmAABBCCDD;;<<==>>**))((''8899::;;--,,++**DDEEFFGG!! PPQQRRSS)((''&&%MMNNOOPP||{{zzyyYYZZ[[\\ + + aa``__^^VVWWXXYY ssrrqqppbbccddeeggffeeddnnooppqqEEFFGGHH??@@AABB&&%%$$##<<==>>??))((''&&HHIIJJKK~~TTUUVVWW%$$##""!QQRRSSTTxxwwvvuu]]^^__``]]\\[[ZZZZ[[\\]] + + oonnmmllffgghhiiccbbaa``rrssttuuIIJJKKQQCCDDEEFF""!! {{zzyy@@AABBCC%%$$##""LLMMNNOO}}||{{zzXXYYZZ[[!!""! ~~}}UUVVWWXX ttssrrqqaabbccddYYXXWWVV^^__``aakkjjiihhjjkkllmm __^^]]\\vvwwxxyyRRSSTTUU !!GGHHIIJJxxwwvvuuDDEEFFGG!! PPQQRRSSyyxxwwvv\\]]^^__##$$%%&&||{{zzyyYYZZ[[\\ + + ppoonnmmeeffgghhUUTTSSRR~}|bbccddeeggffeeddnnooppqq + + [[ZZYYXXzz{{||}}VVWWXXYY""##$$%%KKLLMMNNttssrrqqHHIIJJKK~~TTUUVVWWuuttssrr``aabbcc''(())**xxwwvvuu]]^^__``llkkjjiiiijjkkllQQKKJJII{{zzyyxxffgghhiiccbbaa``rrssttuuWWVVUUTT~~ZZ[[\\]]&&''(())OOPPQQRRppoonnmmLLMMNNOO}}||{{zzXXYYZZ[[ + +qqppoonnddeeffgg++,,--..ttssrrqqaabbccddhhggffeemmnnoopp + + HHGGFFEEwwvvuuttjjkkllmm __^^]]\\vvwwxxyySSRRQQPP^^__``aa**++,,--SSTTUUVVllkkjjiiPPQQRRSSyyxxwwvv\\]]^^__ mmllkkjjhhiijjkk//001122 ppoonnmmeeffgghhddccbbaaqqrrsstt DDCCBBAAssrrqqppnnooppqq + + [[ZZYYXXzz{{||}}OONNMMLLbbcciijj..//0011WWXXYYZZ ccbbaa``TTUUVVWWuuttssrr``aabbcciihhggffllmmnnoo3399::;; + + llkkjjiiiijjkkll``__^^]]uuvvwwxx@@??>>==oonnmmllrrssttuuWWVVUUTT~~KKJJIIHHkkllmmnn22334455[[\\]]^^ + + __^^]]\\XXYYZZ[[ + +qqppoonnddeeffggeeddccbbppqqrrss<<==>>??hhggffeemmnnoopp + + \\[[ZZYYyyzz{{||<<;;::99kkjjiihgvvwwxxyySSRRQQPP !!GGFFEEDDooppqqrr66778899__``aabb[[ZZYYXX\\]]^^__ mmllkkjjhhiijjkkaa``__^^ttuuvvww@@AABBCCddccbbaaqqrrsstt XXWWVVUU}}~~33221100fedccbbazz{{||}}OONNMMLL""##$$%%CCBBAA@@ssttuuvv::;;<<==ccddeeffWWVVUUTT``aabbcciihhggffllmmnnoo + + ]]\\[[ZZxxyyzz{{DDEEFFGG``__^^]]uuvvwwxxTTSSRRQQ //..--,,a``__^^]~~KKJJIIHH&&''(())??>>==<>??@@AAgghhiijjSSRRQQKK~}|{{zzddeeffggeeddccbbppqqrrss YYXXWWVV||}}~~HHIIJJKK + + \\[[ZZYYyyzz{{||PPOONNMM!!""##$$++**))((]\\[[ZZY !!GGFFEEDD**++,,--;;::9988{{BBCCDDEEkkllmmnn + +JJIIHHGGyyxxwwvvhhiijjkkaa``__^^ttuuvvwwUUTTSSRRQQRRSSTT XXWWVVUU}}~~LLKKJJII%%&&''((''&&%%$$YXXWWVVU""##$$%%CCBBAA@@..//001177665544FFGGHHIIooppqqrr FFEEDDCCuuttssrrllmmnnoo + + ]]\\[[ZZxxyyzz{{QQPPOONNUUVVWWXXTTSSRRQQ HHGGFFEE))**++,,##""!!UTTSSRRQ&&''(())??>>==<<2233445533221100JJKKLLMMssttuuvvBBAA@@??qqppoonnppqqrrss YYXXWWVV||}}~~MMLLKKJJYYZZ[[\\PPOONNMM!!""##$$DDCCBBAA--..//00QPONMLKK**++,,--;;::998866778899//..--,,NNOOPPQQwwxxyyzz>>==<<;;mmllkkjjttuuvvwwUUTTSSRRIIHHGGFF]]^^__``LLKKJJII%%&&''((@@??>>==11223344JJIIHHGG..//001177665544::;;<<==++**))((RRSSTTUU{{||}}~~::993322iihgfedcxxyyzz{{QQPPOONN !!""##EEDDCCBBaabbccii HHGGFFEE))**++,,<<;;::9955667788FFEEDDCC2233445533221100>>??@@AA''&&%%$${{VVWWXXYY1100//..cbbaa``_||}}~~MMLLKKJJ$$%%&&''AA@@??>>jjkkllmm!!""##$$DDCCBBAA--..//008877665599::;;<< BBAA@@??66778899//..--,,BBCCDDEE##""!! zzyyxxwwZZ[[\\]] !!""--,,++**_^^]]\\[IIHHGGFF(())**++==<<;;::nnooppqq%%&&''((@@??>>==1122334444332211==>>??@@ + + >>==<<;;::;;<<==++**))((FFGGHHIIvvuuttss^^__``aa##$$%%&&))((''&&[ZZYYXXW !!""##EEDDCCBB,,--..//99887766rrssttuu))**++,,<<;;::995566778800//..--AABBCCDD::998765>>??@@AA''&&%%$$JJKKLLMMrrqqppoobbccddee''(())**%%$$##""WVVUUTTS$$%%&&''AA@@??>>0011223355443322vvwwxxyy--..//008877665599::;;<<,,++**))EEFFGGHH + +43322110BBCCDDEE##""!! NNOOPPQQnnmmllkk~~}}||ffgghhii++,,--..!!SRRQQPON(())**++==<<;;::445566771100//..zz{{1122334444332211==>>??@@((''&&%%IIJJKKLL 0//..--,FFGGHHIIRRSSTTUUjjiiccbb{{zzyyxxjjkkllmm//001122MLKKJJII,,--..//998877668899::;;--,,++**5566778800//..--AABBCCDD$$##""!!MMNNOOPP,++**))(JJKKLLMM~~}}||VVWWXXYY aa``__^^wwvvuuttnnooppqq33445566HHGGFFEE0011223355443322<<==>>??))((''&&99::;;<<,,++**))EEFFGGHH QQRRSSTT(''&&%%$NNOOPPQQ{{zzyyxxZZ[[\\]] + + ]]\\[[ZZssrrqqpprrssttuu778899:: DDCCBBAA445566771100//..@@AABBCC%%$$##""==>>??@@((''&&%%IIJJKKLL~~}}UUVVWWXX$##""!! RRSSTTUUwwvvuutt^^__``aaYYXXWWVVoonnmmllvvwwxxyy;;<<==>> + + @@??>>==8899::;;--,,++**DDEEFFGG!! {{zzyyxxAABBCCDD$$##""!!MMNNOOPP||{{zzyyYYZZ[[\\!!""##~~}}||VVWWXXYY ssrrqqppbbccddeeUUTTSSRRkkjjiihhzz{{||}}??@@AABB<<;;::99<<==>>??))((''&&HHIIJJKKwwvvuuttEEFFGGHH QQRRSSTTxxwwvvuu]]^^__``$$%%&&''{{zzyyxxZZ[[\\]] + + oonnmmllffgghhiiQQKKJJIIggffeedd~~CCDDEEFF87654332@@AABBCC%%$$##""LLMMNNOOssrrqqppIIJJKKLL~~}}UUVVWWXX ttssrrqqaabbccdd(())**++wwvvuutt^^__``aakkjjiihhjjkkllmm HHGGFFEEccbbaa``GGHHIIJJ + + 21100//.DDEEFFGG!! PPQQRRSSoonnmmllMMNNOOPP||{{zzyyYYZZ[[\\ + + ppoonnmmeeffgghh,,--..//ssrrqqppbbccddeeggffeeddnnooppqq + + DDCCBBAA__^^]]\\KKLLMMNN .--,,++*HHIIJJKK~~TTUUVVWWkkjjiiccQQRRSSTTxxwwvvuu]]^^__``llkkjjiiiijjkkll00112233 + +oonnmmllffgghhiiccbbaa``rrssttuu@@??>>==[[ZZYYXXOOPPQQRR*))((''&LLMMNNOO}}||{{zzXXYYZZ[[ + +bbaa``__UUVVWWXX ttssrrqqaabbccddhhggffeemmnnoopp99::;;<< kkjjiihhjjkkllmm __^^]]\\vvwwxxyy<<;;::99WWVVUUTTbdQZ|vpfd|ZfpvdrtAvpfے`JXQf~HXQJ`ےltbے`JvnX˂rXQdtAJl˂pZZdQbtHAZpdQZ|vXnrd|J`ےtbdQf`vlJtArdrtAH~fdQbtnXv`fJltH~fr˂pfpvbHAZnvpXQr˂v`f~fJ`ےtbnHAbےlJtA˂rXQdrtAJvpfHZdQbtHAZp˂Z|dXnvd|ZJlt`vXnl|ZdQ~fpvbdQZ|`vXnZHAےnXv`p˂rfHfp`JXQpvnbHAZpvpf`JXQrrd|J`ےltb~f`l|ZrXQJrtAJlpfH~dQbtbdQZ|vpfbtlnXvdrtAvpf`JXQrf~HXQJ`ے`vXnr˂pXv`f˂rXQHf`˂pZZdQbtbHAZpdQZ|vXndQbt`ےbtbdQf`vlJtArdrtAH~fJtArd`f~JltH~fbtlfpvbHAZvpfZHAb~HfJ`ےvXnHAbےlJtA˂rXQdrtAJvpfHlJtArHAZp˂Z|dXnvd|ZJlt`vXn|ZdQHfpvbdQZ|`vXnJtAdnXv`p˂rH~fے`JXQpvnbHAZpvpfH`JXQrrd|J`ےltb~f`d|ZrXQJrtAJlpfH~dQbtbdQZ|vpfbtlnXvdrtAvpf|ZdQbf~HXQJ`ے`vXnr˂pXv`f˂rXQ~f`˂pZZdQbtbHAZpdQZ|vXndQbt`ےbtbdQf`vlJtArdrtAH~f|ZdQb`frQJltH~ftlJfpvbHAZvpf`JXQr~fpvJ`ےvXnHAbےlJtA˂rXQdrtAJvpfHl|ZdQHAZp˂Z|dXnvd|ZJlt`vXntlJJHAZbdQZ|`vXntArdnXv`p˂rH~f˂pZnXv`bHAZpvpfH`JXQrrd|J`ےltb~f`btlrXQJrtAJlpfH~dQbtbdQZ|vpftArdp˂rdrtAvpf|ZdQbf~HXQJ`ے`vXnHAbےf~H˂rXQ~f`˂pZZdQbtbHAZpdQZ|vXnrJtArd`ےbtbdQf`vlJtArdrtAH~f|ZdQbXQJ`ےJltH~ftlJfpvbHAZvpf`JXQrfpvJ`ےvXnHAbےlJtA˂rXQdrtAJ˂p`|ZdQHAZp˂Z|dXnrd|ZJlt`vXntl|bHAZbdQZ|`vXntArdnXv`p˂rH~f˂p`nXv`bHAZpvpfH`JXQrrd|J`ےltbJXQrbtlrXQJrtAJl˂pZHAdQbtbdQZ|vpfZdQbtp˂rdrtAvpf|ZdQbf~HXQJ`ے`vXnJXQrf~fp˂rXQ~f`˂pZZdQbnbHAZpdQZ|˂pZHA|ZdQb`ےbtbdQbے`lJtArdrtAH~flJtAXQJ`ےJltH~ftlJfpvbHAZvpf˂pZHAvnXJ`ےvXnHAbےXv`f˂rXQdrtAJbے`tlJHAZp˂Z|dJXQrd|ZJlt`vXnrd|bHAZbdQZ|`vXntArdnXv`p˂rH~fbے`v`fbHAZpvpfH`JXQr~HfJ`ےltbJXQrtArdrXQJrtAJl˂pZHAdQbtbdQZ|vpfZdQbtp˂rdrtAvpf|ZdQbf~HbdQZ|`vXnJXQr~Hfp˂rb~f`˂pZpvnbHAZpdQZ|˂p`J|ZdQb`ےbtbdQbے`lJtArdrtAH~fl|ZXQJ`ےJltH~ftlJfpvdrtAvpf˂p`JvnXdQZ|vXnHAbےXv`f˂rXQdrtAJXQr˂tl|HAZp˂Z|dJXQrd|ZJlt`vXndQbt璐bHAZbdQZ|`vXntArdnXv`JltH~fXQrbtv`f~drtAJvpfH`JXQr~HfJ`ےltbpZHAbZdQbnrXQJrtAJl˂pZHAdQbtbdQZ|vpflJtArp˂rdrtAr˂p|ZdQbf~HbdQZ|`vXnl|Zfpvltb~f`˂pZpvnbHAZpdQZ|ے`JXv`f`ےbtbdQbے`lJtArdrtAH~fd|ZXQJ`ےJltZHAbtlJfpvdrtAvpfdQbtnXv`dQZ|vXnHAbےXv`f˂rXQdrtAJXQr˂~fpvHAZp˂Z|dJXQrd|ZJlt`vXndQbt璐bHAZbdQZ|ے`JXQtArdnXv`JltH~flJtArf~HdrtAJvpfH`JXQr~HfJ`ےltbp`JXQnXv`rXQJrtAJl˂pZHAdQbtbdQZ|r˂pl|ZdQp˂rdrtAr˂p|ZdQbf~HbdQZ|`vXnd|Zfpvltb~f`˂pZpvnbHAZpdQZ|r˂pf~H`ےbtbdQbے`lJtArdrtA`JXQrbtlXQJ`ےJltZHAbtlJfpvdrtAvpfdQbtnXv`fdQZ|vXnHAbےXv`f˂rXQdtAJlZHAbfpvHAZp˂Z|dJXQrd|ZJlt˂pZJtArdbHAZbdQZ|ے`JXQtArdnXv`JltH~fl|ZdQ~fpvdrtAJvpfH`JXQr~HfJ`ےtbnے`JXQnXv`rXQJtAJl˂pZHAdQbtbdQZ|HAbے|ZdQp˂rdrtAr˂p|ZdQbf~HbdQZ|`vXnbtlnXvltb~f`˂pZpvnbHAZpvpfr˂pf~fp`ےbtbnbے`lJtArdrtA`JXQrbtlXQJ`ےJltZHAbtlJfpvdrtAvpfJtArd`f~dQZ|vXnHAے`Xv`f˂rXQHf``JXQrvnXHAZp˂vpfHJXQrd|ZJlt˂p`|ZdQbbHAZbdQZ|ے`JXQtArdnXv`JltH~f|ZdQHfpvdrtAJvpfHJXQrb~HfJ`ےvXn˂pZv`frXQJf`v˂pZHAdQbtbdQZ|JXQrnXv`p˂rdrtAr˂p|ZdQbfHfbdQZ|`vXnbtlnXvltb~f`tlJpvnbHAZpvpfHHAbے~Hfp`ےbXnvbے`lJtArdrtA˂pZHAf~fpXQJ`ےJltZHAbtlJpvndrtAvpf|ZdQb`ffpdQZ|vXntAd|Xv`f˂rXQ~f``JXQrvnXHAZp˂pfH~JXQrd|ZJltbے`vnXbHAZbdQZ|ے`JXQtArdrXQJ`JltH~ftlJvnrdrtAJvpfHZdQbt~HfJ`ےvXn˂p`v`f~rXQJf`v˂pZHAdQbtbdQZ|JXQrv`fp˂rdtAJr˂p|ZdQbےHAZbdQZ|`vXntArdXQJ`ےltb~f`lJtApvnbHAZpvpfHJXQrfpv`ےbXnvbے`lJtArdrtA˂p`J~HfpXQJ`ےltbZHAbtlJp˂rdrtAvpf|ZdQbHAZpdQZ|vXnrd|Xv`f˂rXQ~f`˂pZHAnXv`HAZp˂pfH~JXQrd|ZJltXQr˂vnXbHAZnvpے`JXQtArdXQJ`ےJltH~ftl|˂rXQdrtAJvpfHZdQbt~HfJ`ےvXnbے`f~HrXQJf`v˂pZHAdQbtbdQZ|pZHAbv`f~fp˂rfHfr˂p|ZdQbbHAZbdQZ|`vXnZdQbtJ`ےltb~f`lJtApvnbHAZpvpfHJXQrfpv`ےbXnvbے`lJtArdrtAے`JpvnXQJ`ے`vXnZHAbtlJp˂rdrtAvpflJtAbHAZpdQZ|vXnrd|Xv`f˂rXQ~f`˂p`JnXv`fHAZp˂pfH~JXQrd|ZJltXQr˂Xv`fbHAZvpfے`JXQtArdXQJ`ےJltH~frd|˂rXQdrtAJvpfHZdQbt~HfJ`ےvXnXQr˂~fpvrXQJf`v˂pZHAdQbnXbdQZ|p`JXQ~Hfp˂rH~fr˂p|ZdQbbHAZbdQZ|`vXnZdQbtJ`ےltb~f`lJtApvnbHAZpvpfHpZHAbnXv`ےbXnvbے`v`f`vXnr˂ppvnXQJ`ے`vXnZHAbtlJp˂rdrtAvpfl|ZbHAZpdQZ|vXnrd|Xv`f˂rb~f`ے`J`f~HAZp˂pfH~JXQr~HfpvpfZHAbXv`fbHAZvpfے`JXQtArdXQJ`ےJltH~fdQbt˂rXQdrtAJvpfHZdQbt~HfdQZ|vXnXQr˂HfpvrbdQf`v˂pZHAvnXH~fے`JXQ~fpvp˂rH~fr˂p|ZdQbbHAZbdQZ|`vXnlJtArJ`ےltb~f`lJtApvndrtAJvpfHp`JXQnXvZ|dXnvbے`v`fvnX`vXnr˂pnXv`XQJ`ے`vXnZHAbtlJp˂rdrtAr˂pd|ZbHAZpdQZ|vXnrrd|Xv`fltb~f`rbt`f~fprtAJlpfH~JXQr~Hfpv`fvpf`JXQrf~HbHAZvpfے`JXQtArdXQJ`ےJlt`JXQrdQbt˂rXQdrtAJ˂pZZdQbt~HfdQZ|vXnl|ZdQvnXtbdQf`v˂pZHAvnX~HfpH~f˂pZfpvp˂rH~fr˂p|ZdQbbHAZbdQZ|˂pZl|ZdQJ`ےltbHAbےlJtApvndrtAJvpfHbtlv`fZ|dXnvbے`v`fvnX`vXnHAbےnXv`XQJ`ے`vXnZHAbnXv`p˂rdrtAHAbےbtlbHAZpdQZ|`JXQrrd|Xv`fltb~f`JtArd~HfprtAJlpfH~JXQr~Hfpv`fvpf`JXQrf~fpbHAZvpfے`JXQf~HXQJ`ےJlt`JXQrJtArd˂rXQdrtAJ˂pZZdQbt~HfdQZ|vXn|ZdQvnXtbdQf`v˂pZHAvnX~HfpH~f˂p`vnXp˂rH~fr˂pfpvbHAZbdQZ|˂p`|ZdQJ`ےltbHAbےlJtApvndrtAJvpfHbtlv`f~Z|dXnvbے`v`fvnX`vXnJXQrv`fbdQZ|`vXnZHAbnXv`p˂rdrtAJXQrbtlbHAZpdQZ|`JXQrrd|Xv`fltb~f`|ZdQbfpvrtAJlpfH~JXQr~Hfpv`fvpf˂pZHA~HfpdrtAvpfے`JXQf~HXQJ`ےJlt˂pZHA|ZdQb˂rXQdrtAJ˂pZZdQbt~HfdQZ|vXntlJnXv`tbdQf`v˂pZHAvnX~HfpH~fbے`vnXJltH~fr˂pfpvbHAZbdQZ|bے`nXv`J`ےltbHAbےlJtApvndrtAJvpfHtArdf~HZ|dXnvے`Jv`fvnX`vXnJXQrv`f~bdQZ|`vXnZHAbnXv`p˂rdrtAJXQrf~fpbHAZpdQZ|`JXQrrd|Xv`fltb~f`|ZdQbfpvrtAJlpfH~XQrbt~Hfpv`fvpf˂p|ZfpvdrtAvpfے`JXQf~HXQJ`ےJlt˂p`JvnX˂rXQdrtAJ˂pZZdQbtHfpdQZ|vXntl|nXv`tbdQf`vlJtAvnX~HfpH~fdQbtnXv`JltH~fr˂pfpvbHAZbdQZ|XQr˂v`fJ`ےltbHAbےlJtAvnrdrtAJvpfHZdQbtffpvZ|dXnvd|Zv`fvnX`vXnlJtArf~HbdQZ|`vXnZHAbnXv`p˂rdtAJpZHAb~HfpbHAZpdQZ|`JXQrrd|XQJ`ےltb~f`lJtAnrXQrtAJlpfH~dQbt~Hfpv`f~HfpZ|dXnv|ZdQbvnXtbdQZf`vXpZHAbnXvZp˂|dtA˂pZHA~HfpbHAZbdQZ|ے`JXQtArdrXQJ`JltH~ftlJvnrdrtAJvpfHZdQbt~HfJ`ےvXn`JXQrvˍpfvnXrtAJlpfH~tl|v`f~f|drnvpے`J`f~rXQJ`Jltbے`vnXp˂rdtAJr˂p|ZdQbےHAZbdQZ|`vXntArdXQJ`ےltb~f`lJtApvnbHAZpvpfH˂pZH~ㅐfv`ftbdQf`vZdQbtpvntAJlfH~XQr˂HfpvےbHAbnvJXQrv`f~XQJ`ےltbZHAbtlJp˂rdrtAvpf|ZdQbHAZpdQZ|vXnrd|Xv`f˂rXQ~f`HAbے`vXn~HfpZ|dXnvlJtAXv`ftbdQZf`vXpZHAnXvZp˂pfH˂p`JfpvbHAZnvpے`JXQtArdXQJ`ےJltH~ftl|˂rXQdrtAJvpfHZdQbt~HfJ`ےvXn`JXQrvˍpfvnXrtAJlpfH~rd|~Hf|drnvpے`JXQ`f~rXQJ`f`vXXQr˂nXv`p˂rfHfr˂p|ZdQbbHAZbdQZ|`vXnZdQbtJ`ےltb~f`lJtApvnbHAZpvpfH˂p`H~ㅐfv`ftbdQf`vZdQbtpvntAJlfH~rbtHfpvےbHAnvppZHAbf~HXQJ`ے`vXnZHAbtlJp˂rdrtAvpflJtAbHAZpdQZ|vXnrd|Xv`f˂rXQ~f`JXQr`vXnHfpvZ|dXnvl|ZXv`ftbdQZf`vXlJtAdnXvZp˂fH~ے`JfpvbHAZvpfے`JXQtArdXQJ`ےJltH~frd|˂rXQdrtAJvpfHZdQbt~HfJ`ےvXn˂pZHAvˍpfnrXQrtAJlpfH~dQbt璅fpv|drnvp|ZdQ`f~rXQJ`f`vXXQr˂nXv`p˂rH~fr˂p|ZdQbbHAZbdQZ|`vXnZdQbtJ`ےltb~f`lJtApvnbHAZpvpfHbے`H~ㅐfJ`ےtbdQf`vlJtArnrXQJtAJlfH~btlHfpvےbHAnvpp`JXQf~fpXQJ`ے`vXnZHAbtlJp˂rdrtAvpfl|ZbHAZpdQZ|vXnrd|Xv`f˂rb~f`JXQr`vXnHAZp˂Z|dXnvd|Z`ےHAtbdQZf`vXJtArdnXvZp˂fH~r˂pvnXbHAZvpfے`JXQtArdXQJ`ےJltH~fdQbt˂rXQdrtAJvpfHZdQbt~HfdQZ|vXn˂p`ZvˍpfrXQJrtAJlpfH~dQbtZp˂|drnvp|ZdQ`f~rXQJ`f`vXZHAbv`fp˂rH~fr˂p|ZdQbbHAZbdQZ|`vXnlJtArJ`ےltb~f`lJtApvndrtAJvpfHQXb㉀ەH~ㅐf`ےbtbdQf`vl|ZdQrXQJ`tAJlfH~btlHfpvےbHAnvpے`JXQ~HfpXQJ`ے`vXnZHAbtlJp˂rdrtAr˂pd|ZbHAZpdQZ|vXnrrd|Xv`fltb~f`pJAHr`vXnHAZp˂Z|dXnvbtlےbHAtbdQZf`vXJtArdnXvZp˂fH~r˂pvnXbHAZvpfے`JXQtArdXQJ`ےJlt`JXQrdQbt˂rXQdrtAJ˂pZZdQbt~HfdQZ|vXnˁ`ZvˍpfrXQJrtAJlpfH~JtArdZp˂|drnvp|ZdQ`f~rXQJ`f`vX`JXQrv`f~fp˂rH~fr˂p|ZdQbbHAZbdQZ|˂pZl|ZdQJ`ےltbHAbےlJtApvndrtAJvpfHQXb㉀ەH~ㅐf`ےbtbdQf`v|ZdQrXQJ`tAJlfH~btlHfpvےbHAnvp˂pZpvnXQJ`ے`vXnZHAbnXv`p˂rdrtAHAbےbtlbHAZpdQZ|`JXQrrd|Xv`fltb~f`p`ZQX`vXnHAZp˂Z|dXnvbtlےbHAtbdQZf`vXJtArdnXvZp˂fH~HAbےXv`fbHAZvpfے`JXQf~HXQJ`ےJlt`JXQrJtArd˂rXQdrtAJ˂pZZdQbt~HfdQZ|vXnb㉀ۑpvˍpfrXQJrtAJlpfH~|ZdQbZp˂|drnvp|ZdQ`f~rbdQZf`vX`JXQr~Hfp˂rH~fr˂pfpvbHAZbdQZ|˂p`|ZdQJ`ےltbHAbےlJtApvndrtAJvpfHJAHr󙐕H~ㅐf`ےbtbdQf`vtlJrXQJ`tAJlfH~btlHfpv|drnvp˂p`pvnbdQZ|`vXnZHAbnXv`p˂rdrtAJXQrbtlbHAZpdQZ|`JXQrrd|Xv`fltb~f`ˁ`ZQX`vXnHAZp˂Z|dXnrtArdےbHAtbdQZf`vXJtArdnXvtAJlfH~JXQrbXv`fdrtAvpfے`JXQf~HXQJ`ےJlt˂pZHA|ZdQb˂rXQdrtAJ˂pZZdQbt~HfdQZ|vXnb㉀ۑpvˍp|rXQJrtAJl˂p`J|ZdQbZp˂|drnr˂|ZdQ`f~tbdQZf`vXtl|~fpvJltH~fr˂pfpvbHAZbdQZ|bے`nXv`J`ےltbHAbےlJtApvndrtAJvpfH`ZQXbdrQt`ےbtbdQXQr˂tl|rXQJ`tAJlpZHAbbtlHfpv|drnvpZdQbtnXv`bdQZ|`vXnZHAbnXv`p˂rdrtAJXQrf~fpbHAZpdQZ|`JXQrrd|Xv`fltb~f`ۑpJJltHAZp˂Z|dpZHAbZdQbtےbHAtbdQZے`JJtArdnXvtAJlfH~lJtAf~HdrtAvpfے`JXQf~HXQJ`ےJlt˂p`JvnX˂rXQdrtAJ˂pZZdQbtHfpdQZ|vXnAHr󙐂bAdZ|rXQJrtAJlے`JlJtAZp˂|drXQr˂|ZdQ`f~tbdQZf`vXrd|fpvJltH~fr˂pfpvbHAZbdQZ|XQr˂v`fJ`ےltbHAbےlJtAvnrdrtAJvpfH`ZQXbdrQt`ےbtbdQXQr˂rd|rXQJ`tAJlpZHAbbtlHfpv|drnvpZdQbtnXv`bdQZ|`vXnZHAbnXv`p˂rdtAJpZHAb~HfpbHAZpdQZ|`JXQrrd|XQJ`ےltb~f`ۑp`JltHAZp˂Z|dp`JXQZdQbtےbHAtbdQZے`JJtArdnXvtAJlfH~l|Zf~fpdrtAvpfے`JXQf~HXQJ`ےltbے`JvnX˂rXQdtAJl˂pZZdQbtHAZpdQZ|vXnZQXb㉀bAdZ|rXQJrtAJlr˂pl|ZZp˂|drXQr˂|ZdQ`f~tbdQZf`vXdQbtvnXJltH~fr˂pfpvbHAZnvpXQr˂v`f~fJ`ےtbnHAbےlJtA˂rXQdrtAJvpfHۑpJAHdrQt`ےbtbdQZHAbdQbnXrXQJ`tAJlpZHAbbtlHfpv|drnvplJtArv`fbdQZ|`vXnZHAےnXv`p˂rfHfp`JXQpvnbHAZpvpf`JXQrrd|J`ےltb~f`r󙐂ˁ`JltHAZp˂Z|dے`JXQv`f~ےbHAtbdQZے`JJtArdnXvtAJlfH~d|Z~HfpdrtAvpf`JXQrf~HXQJ`ے`vXnr˂pXv`f˂rXQHf`˂pZZdQbtbHAZpdQZ|vXnZQXb㉀bAdZ|rXQJrtAJlr˂pfpvZp˂|drXQr˂|ZdQ`fHtbdQZf`vXdQbtvnXJltH~fbtlfpvbHAZvpfZHAb~HfJ`ےvXnHAbےlJtA˂rXQdrtAJvpfHۑp`ZdrQt`ےbtbdQ`JXQrnXv`rXQJ`tAJlpZHAbbtlfpv|drnvpl|ZdQv`ffbdQZ|`vXnJtAdnXv`p˂rH~fے`JXQpvnbHAZpvpfH`JXQrrd|J`ےltb~f`QXb㉀JltHAZp˂Z|d˂pZf~HےbHAtbdQZے`JJtArdnrXQJtAJlfH~btlpvndrtAvpf|ZdQbf~HXQJ`ے`vXnr˂pXv`f˂rXQ~f`˂pZZdQbtbHAZpdQZ|vXnpJAHrbAdZ|rXQJtAJlHAbےfpvZp˂|dtAXQr˂|ZdQ`ےHAtbdQZf`vXJtArdrXQJ`JltH~ftlJfpvbHAZvpf`JXQr~fpvJ`ےvXnHAbےlJtA˂rXQdrtAJvpfHˁ`ZdrQt`ےbtbn`JXQrnXv`frXQJ`JltpZHAbbtlZp˂|drnvp|ZdQےHAZbdQZ|`vXntArdnXv`p˂rH~f˂pZnXv`bHAZpvpfH`JXQrrd|J`ےltb~f`QXb㉀JltHAZp˂vpfH˂p`~fpvےbHAbnvے`JJtArdrXQJ`tAJlfH~btlp˂rdrtAvpf|ZdQbf~HXQJ`ے`vXnHAbےf~H˂rXQ~f`˂pZZdQbtbHAZpdQZ|vXnےp`ZQXbAdZ|rXQJf`vJXQrnXvZp˂pfHXQr˂|ZdQےbHAtbdQZf`vX|ZdQbXQJ`ےJltH~ftlJfpvbHAZvpf`JXQrfpvJ`ےvXnHAbےlJtA˂rXQdrtAJ`JXQrb㉀ۑpdrQt`ےbXnv˂pZHA`f~rXQJ`f`vXpZHAbbtlZp˂|drnvptlJbHAZbdQZ|`vXntArdnXv`p˂rH~f˂p`nXv`bHAZpvpfH`JXQrrd|J`ےltb˂pZJAHrJltHAZp˂pfH~bے`HfpvےbHAnvpے`JJtArdrXQJ`tAJlfH~tArdp˂rdrtAvpf|ZdQbf~HXQJ`ے`vXnJXQrf~fp˂rXQ~f`˂pZZdQbnbHAZpdQZ|HAbےˁ`ZQXbAdZ|rXQJf`vJXQrnXvZp˂fH~XQr˂|ZdQےbHAtbdQZf`vX|ZdQbXQJ`ےJltH~ftlJfpvbHAZvpf˂pZHAvnXJ`ےvXnHAbےXv`f˂rXQdrtAJ`JXQrb㉀XndrQt`ےbXnv˂p`J`f~fprXQJ`f`vXpZHAbbtlZp˂|drnvptl|bHAZbdQZ|`vXntArdnXv`p˂rH~fbے`v`fbHAZpvpfH`JXQr~HfJ`ےltb˂p`vˍpfJltHAZp˂pfH~XQr˂vnXےbHAnvpے`JJtArdrXQJ`tAJlfH~ZdQbtp˂rdrtAvpf|ZdQbf~HbdQZ|`vXnJXQr~Hfp˂rb~f`˂pZpvnbHAZpdQZ|JXQrH~ㅐfbAdZ|rXQJf`vpZHAbv`fZp˂fH~XQr˂|ZdQےbHAtbdQZf`vXlJtAXQJ`ےJltH~ftlJfpvdrtAvpf˂p`JvnXdQZ|vXnHAbےXv`f˂rXQdrtAJ˂pZHA`vXndrQt`ےbXnvے`J~HfprXQJ`f`vXpZHAbbtlZp˂|drnr˂rd|bHAZbdQZ|`vXntArdnXv`JltH~fXQrbtv`f~drtAJvpfH`JXQr~HfJ`ےltbbے`vˍpfJltHAZp˂pfH~XQr˂vnXےbHAnvpے`JJtArdrXQJ`tAJlp`JXQZdQbtp˂rdrtAr˂p|ZdQbf~HbdQZ|`vXnl|Zfpvltb~f`˂pZpvnbHAZpdQZ|JXQrH~ㅐfbAdZ|rXQJf`vp`JXQv`f~Zp˂fH~XQr˂|ZdQےbHAtbdQZr˂pl|ZXQJ`ےJltZHAbtlJfpvdrtAvpfdQbtnXv`dQZ|vXnHAbےXv`f˂rXQdrtAJ˂p`J`vXndrQt`ےbXnvr˂pfpvrXQJ`f`vXpZHAbbnXvZp˂|drZHAbdQbt璐bHAZbdQZ|ے`JXQtArdnXv`JltH~flJtArf~HdrtAJvpfH`JXQr~HfJ`ےltbXQr˂vˍpfJltHAZp˂pfH~ZHAbnXv`ےbHAnvpے`J`f~rXQJ`tAJlے`JXQlJtArp˂rdrtAr˂p|ZdQbf~HbdQZ|`vXnd|Zfpvltb~f`˂pZpvnbHAZpdQZ|pZHAbH~ㅐfbAdZ|rbdQf`vے`JXQf~HZp˂fH~XQr˂HfpvےbHAtbdQZr˂pd|ZXQJ`ےJltZHAbtlJfpvdrtAvpfdQbtnXv`fdQZ|vXnHAbےXv`f˂rXQdtAJlے`J`vXndrQtZ|dXnvr˂pfpvrbdQZf`vXpZHAbnXvZp˂|dr`JXQrdQbt璐bHAZbdQZ|ے`JXQtArdnXv`JltH~fl|ZdQ~fpvdrtAJvpfH`JXQr~HfJ`ےtbnXQr˂vˍpfJltrtAJlpfH~`JXQrnXv`|drnvpے`J`f~rXQJ`tAJl璀˂pZl|ZdQp˂rdrtAr˂p|ZdQbf~HbdQZ|`vXnbtlnXvltb~f`˂pZpvnbHAZpvpfp`JXQH~ㅐfbAdZ|tbdQf`vbtlf~fptAJlfH~XQr˂HfpvےbHAtbdQZHAbےbnXvXQJ`ےJltZHAbtlJfpvdrtAvpfJtArd`f~dQZ|vXnHAے`Xv`f˂rXQHf`r˂p`vXndrQtZ|dXnv|ZdQbvnXtbdQZf`vXpZHAbnXvZp˂|dr`JXQr`f~fpbHAZbdQZ|ے`JXQtArdnXv`JltH~f|ZdQHfpvdrtAJvpfHJXQrb~HfJ`ےvXnZHAbvˍpfJltrtAJlpfH~tlJv`f|drnvpے`J`f~rXQJ`tAJl璀˂p`vnXp˂rdrtAr˂p|ZdQbfHfbdQZ|`vXnbtlnXvltb~f`tlJpvnbHAZpvpfHے`JXQH~ㅐfbAdZ|tbdQf`vtArd~HfptAJlfH~XQr˂HfpvےbHAtbdQZJXQrv`fXQJ`ےJltZHAbtlJpvndrtAvpf|ZdQb`ffpdQZ|vXntAd|Xv`f˂rXQ~f`r˂p`vXndrQt66666666666666666666666666666666666666677777777777777 \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv36_0.dat b/vendor/endroid/qr-code/assets/data/qrv36_0.dat new file mode 100644 index 000000000..dfa74a81b --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv36_0.dat @@ -0,0 +1,321 @@ +}~}~}~}~|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefecdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKIJIJIJIJHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?}~}~}~}~|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefecdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKIJIJIJIJHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?}~}~}~}~|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefecdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKIIIIIIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?}~}~}~}~|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefeccccccdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?}~}~}}}}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?}}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefeccccdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMLKLKLKLKIIIIIJIJHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=~}~}}}}}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=}~}~}~}~|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=}~}~}~}~|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefedcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=}~}~}~}~|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgdcdcdcccbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=}~}~}~}~|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgcccdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIIIIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=}~}~}~}~|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgcdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=}~}}}}}}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgcdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgcdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgcdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgcdcdccccbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIIIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgccdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIIIJIJIJHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihgfefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=~}}}}}}~|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=}~}~}~}~|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=}~}~}~}~|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIJIJHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=}~}~}~}~|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefedcdcccccbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIJIJIIIIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=}~}~}~}~|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefecdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKIIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=}~}~}~}~|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefecdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=>=>=>=}}}}}}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefecdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=>=>=>=>=~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihgfefefefecdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=>=>=>=>=|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefecdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=>=>=>=>=|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefecdccccccbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=>=>=>=>=|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIIIIIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=>=>=>=>=|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=>=<;<;<;~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;}}}}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIIIIIIJHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedccccccdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMIJIJIJIJHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;~}~}~}}}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefecdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMIJIJIJIJHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;}}}~}~}~|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefecdcdcdcdbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMIJIJIJIJHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9878787876565656543434343212121210/0/0///.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:987878787656565654343434321212121///0/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:987878787656565654343434321212121/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:987878787656565654343434321212121/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:987878787656565654343434321212121/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:987878787656565654343434321212121/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:987878787656565654343434321212121/0/0////.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:987878787656565654343434321212121//0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:9878787876565656543434343212121210/0/////.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:987878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:987878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:987878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:987878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:9878787876565656543434343210/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:98787878765656565434343430//////0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:9878787876565656543434343/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:9878787876565656543434343/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:9878787876565656543434343/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:9878787876565656543434343/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:9878787876565656543434343/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:9878787876565656543434343//////0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:98787878765656565434343210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:9878787876565656521212121/////0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:9878787876565656521212121/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:9878787876565656521212121/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;<;<;<;:9:9:9:9878787876565656521212121/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + <;:9:9:9:9878787876565656543434321212121/0/0/0/0.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:987878787656565654343434321212121/0/0/0//.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:987878787656565654343434321212121////0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + :9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + IIOOPPQQ::998877uuvvwwxx,,++**))uuvvwwxx,,++**))uuvvwwxx,,++**))uuvvwwxx,,++**))uuvvwwxx,,++**)) !wwvvuutt**++,,--wwvvuutt**++,,--wwvvuutt**++,,--wwvvuutt**++,,--wwvvuutt**++,,--mmllkkjj__``aabb'&&%%$$#""!! ""!! ""!! ""!! ""!! '(())**+mmllkkjj44556677mmllkkjj44556677mmllkkjjRRSSTTUU66554321yyzz{{||((''&&%%yyzz{{||((''&&%%yyzz{{||((''&&%%yyzz{{||((''&&%%yyzz{{||((''&&%%!""##$$%ssrrqqpp..//0011ssrrqqpp..//0011ssrrqqpp..//0011ssrrqqpp..//0011ssrrqqpp..//0011iiccbbaacciijjkk#""!! +,,--../iihhggff8899::;;iihhggff8899::;;iihhggff}}||{{VVWWXXYY0//..--,}}~~$$##""!!}}~~$$##""!!}}~~$$##""!!}}~~$$##""!!}}~~$$##""!!%&&''(()oonnmmll22334455oonnmmll22334455oonnmmll22334455oonnmmll22334455oonnmmll22334455``__^^]]llmmnnoo/0123455eeddccbb<<==>>??eeddccbb<<==>>??eeddccbb zzyyxxwwZZ[[\\]],++**))(     )**++,,-kkjjiihh66778899kkjjiihh66778899kkjjiihh66778899kkjjiihh66778899kkjjiihh66778899\\[[ZZYYppqqrrss66778899aa``__^^@@AABBCCaa``__^^@@AABBCCaa``__^^!!""##$$vvuuttss^^__``aa(''&&%%$-..//012ggffeedd::;;<<==ggffeedd::;;<<==ggffeedd::;;<<==ggffeedd::;;<<==ggffeedd::;;<<==XXWWVVUUttuuvvww::;;<<==]]\\[[ZZDDEEFFGG]]\\[[ZZDDEEFFGG]]\\[[ZZ%%&&''((rrqqppoobbcciijj$##""!! 34556677ccbbaa``>>??@@AAccbbaa``>>??@@AAccbbaa``>>??@@AAccbbaa``>>??@@AAccbbaa``>>??@@AATTSSRRQQxxyyzz{{      >>??@@AAYYXXWWVVHHIIJJKKYYXXWWVVHHIIJJKKYYXXWWVV))**++,,nnmmllkkkkllmmnn 8899::;;__^^]]\\BBCCDDEE__^^]]\\BBCCDDEE__^^]]\\BBCCDDEE__^^]]\\BBCCDDEE__^^]]\\BBCCDDEEPPOOIIHH||}} + + + +  + +  + +  + +  + + }}||{{BBCCDDEEUUTTSSRRLLMMNNOOUUTTSSRRLLMMNNOOUUTTSSRR44556677--..//00jjiiccbbooppqqrr     <<==>>??[[ZZYYXXFFGGHHII[[ZZYYXXFFGGHHII[[ZZYYXXFFGGHHII[[ZZYYXXFFGGHHII[[ZZYYXXFFGGHHIIGGFFEEDDzzyyxxwwFFGGHHIIQQPPOONNPPQQRRSSQQPPOONNPPQQRRSSQQPPOONN8899::;;~~}}11223344aa``__^^ssttuuvv + + + + + + + + + + }}@@AABBCCWWVVUUTTJJKKLLMMWWVVUUTTJJKKLLMMWWVVUUTTJJKKLLMMWWVVUUTTJJKKLLMMWWVVUUTTJJKKLLMMCCBBAA@@vvuuttssJKLMNOOPMMLLKKJJTTUUVVWWMMLLKKJJTTUUVVWWMMLLKKJJ<<==>>??||{{zzyy55667788]]\\[[ZZwwxxyyzz||{{zzyyDDEEFFGGSSRRQQPPNNOOPPQQSSRRQQPPNNOOPPQQSSRRQQPPNNOOPPQQSSRRQQPPNNOOPPQQSSRRQQPPNNOOPPQQ??>>==<< + +rrqqppooPQQRRSSTIIHHGGFFXXYYZZ[[IIHHGGFFXXYYZZ[[IIHHGGFF@@AABBCCxxwwvvuu99::;;<>??@@UUTTSSRR ttssrrqqNOOPPQQRKKJJIIHHVVWWXXYYKKJJIIHHVVWWXXYYKKJJIIHHVVWWXXYYKKJJIIHHVVWWXXYYKKJJIIHHVVWWXXYY776655//     jjiiccbbXYYZZ[[\AA@@??>>``aabbccAA@@??>>``aabbccAA@@??>>HHIIJJKKppoonnmmAABBCCDDQQPPOOII + + ppoonnmmRSSTTUUVGGFFEEDDZZ[[\\]]GGFFEEDDZZ[[\\]]GGFFEEDDZZ[[\\]]GGFFEEDDZZ[[\\]]GGFFEEDDZZ[[\\]]..--,,++aa``__^^\]]^^__`==<<;;::ddeeffgg==<<;;::ddeeffgg==<<;;::LLMMNNOOllkkjjiiEEFFGGHHHHGGFFEE + + + + + + + + + + llkkjjiiVWWXXYYZCCBBAA@@^^__``aaCCBBAA@@^^__``aaCCBBAA@@^^__``aaCCBBAA@@^^__``aaCCBBAA@@^^__``aa**))(('']]\\[[ZZ`aabbccd99887766hhiijjkk99887766hhiijjkk99887766PPQQRRSShhggffeeIIJJKKLLDDCCBBAA     ccbbaa``Z[[\\]]^??>>==<>==<>==<>==<>==<>==__^^]]\\^__``aab;;::9988ffgghhii;;::9988ffgghhii;;::9988ffgghhii;;::9988ffgghhii;;::9988ffgghhii""!! $$%%&&''UUTTSSRRkkllmmnn1100//..ppqqrrss1100//..ppqqrrss1100//..XXYYZZ[[``__^^]]QQRRSSTT<<;;::99 !![[ZZYYXXbccdefgh77665544jjkkllmm77665544jjkkllmm77665544jjkkllmm77665544jjkkllmm77665544jjkkllmm !!"" !!"" !!"" !!"" !!""(())**++QQPPOOIIooppqqrr--,,++**ttuuvvww--,,++**ttuuvvww--,,++**\\]]^^__\\[[ZZYYUUVVWWXX88776655""##$$%%WWVVUUTTiijjkkll33221100nnooppqq33221100nnooppqq33221100nnooppqq33221100nnooppqq33221100nnooppqq##$$%%&&~~}}||{{##$$%%&&~~}}||{{##$$%%&&~~}}||{{##$$%%&&~~}}||{{##$$%%&&~~}}||{{,,--..//HHGGFFEEssttuuvv))((''&&xxyyzz{{))((''&&xxyyzz{{))((''&&``aabbccXXWWVVUUYYZZ[[\\//..--,,     &&''(())SSRRQQPPmmnnoopp//..--,,rrssttuu//..--,,rrssttuu//..--,,rrssttuu//..--,,rrssttuu//..--,,rrssttuu''(())**zzyyxxww''(())**zzyyxxww''(())**zzyyxxww''(())**zzyyxxww''(())**zzyyxxww55667788DDCCBBAAwwxxyyzz%%$$##""||}}~~%%$$##""||}}~~%%$$##""ddeeffggTTSSRRQQ]]^^__``++**))((!!""##$$~~}}!!""##$$~~}}!!""##$$~~}}!!""##$$~~}}!!""##$$~~}}**++,,--OOIIHHGGqqrrsstt++**))((vvwwxxyy++**))((vvwwxxyy++**))((vvwwxxyy++**))((vvwwxxyy++**))((vvwwxxyy + +++,,--..vvuuttss++,,--..vvuuttss++,,--..vvuuttss++,,--..vvuuttss++,,--..vvuuttss99::;;<<@@??>>=={{||}}~!! !! !! hhiijjkkPPOONNMMaabbccdd''&&%%$$%%&&''((||{{zzyy%%&&''((||{{zzyy%%&&''((||{{zzyy%%&&''((||{{zzyy%%&&''((||{{zzyy..//5566FFEEDDCCuuvvwwxx''&&%%$$zz{{||}}''&&%%$$zz{{||}}''&&%%$$zz{{||}}''&&%%$$zz{{||}}''&&%%$$zz{{||}} ~}}||{{//001122rrqqppoo//001122rrqqppoo//001122rrqqppoo//001122rrqqppoo//001122rrqqppoo==>>??@@<<;;::99llmmnnooLLKKJJIIeeffgghh##""!! ))**++,,xxwwvvuu))**++,,xxwwvvuu))**++,,xxwwvvuu))**++,,xxwwvvuu))**++,,xxwwvvuu778899::BBAA@@??yyzz{{||##""!! ~~##""!! ~~##""!! ~~##""!! ~~##""!! ~~zzyyxxww33445566nnmmllkk33445566nnmmllkk33445566nnmmllkk33445566nnmmllkk33445566nnmmllkkAABBCCDD88776655ppqqrrssHHGGFFEEiijjkkll--..//00ttssrrqq--..//00ttssrrqq--..//00ttssrrqq--..//00ttssrrqq--..//00ttssrrqq;;<<==>>>>==<<;;}}~ + + vvuuttss778899::jjiihhgg778899::jjiihhgg778899::jjiihhgg778899::jjiihhgg778899::jjiihhggEEFFGGHH//..--,,ttuuvvwwDDCCBBAAmmnnoopp11223344ppoonnmm11223344ppoonnmm11223344ppoonnmm11223344ppoonnmm11223344ppoonnmm??@@AABB::998877 rrqqppoo;;<<==>>ffeeddcc;;<<==>>ffeeddcc;;<<==>>ffeeddcc;;<<==>>ffeeddcc;;<<==>>ffeeddccIIOOPPQQ++**))((xxyyzz{{@@??>>==qqrrsstt~}}||55667788llkkjjii55667788llkkjjii55667788llkkjjii55667788llkkjjii55667788llkkjjiiCCDDEEFF6655//..nnmmllkk??@@AABBbbaa``__??@@AABBbbaa``__??@@AABBbbaa``__??@@AABBbbaa``__??@@AABBbbaa``__RRSSTTUU''&&%%$$ + + + + + +||}}~~<<;;::99uuvvwwxx {{zzyyxx99::;;<>??@@ddccbbaa==>>??@@ddccbbaa==>>??@@ddccbbaa==>>??@@ddccbbaa==>>??@@ddccbbaaPPQQRRSS))((''&&      dccbbaa`GGHHIIJJZZYYXXWWGGHHIIJJZZYYXXWWGGHHIIJJZZYYXXWWGGHHIIJJZZYYXXWWGGHHIIJJZZYYXXWWZZ[[\\]]44332211}}~~ ssrrqqppAABBCCDD``__^^]]AABBCCDD``__^^]]AABBCCDD``__^^]]AABBCCDD``__^^]]AABBCCDD``__^^]]TTUUVVWW%%$$##"" + +  + +  + +  + +  + + !!""##$$`__^^]]\KKLLMMNNVVUUTTSSKKLLMMNNVVUUTTSSKKLLMMNNVVUUTTSSKKLLMMNNVVUUTTSSKKLLMMNNVVUUTTSS^^__``aa00//..--oonnmmllEEFFGGHH\\[[ZZYYEEFFGGHH\\[[ZZYYEEFFGGHH\\[[ZZYYEEFFGGHH\\[[ZZYYEEFFGGHH\\[[ZZYYXXYYZZ[[!! %%&&''((\[[ZZYYXOOPPQQRRRRQQPPOOOOPPQQRRRRQQPPOOOOPPQQRRRRQQPPOOOOPPQQRRRRQQPPOOOOPPQQRRRRQQPPOObbcciijj,,++**))kkjjiihgIIJJKKLLXXWWVVUUIIJJKKLLXXWWVVUUIIJJKKLLXXWWVVUUIIJJKKLLXXWWVVUUIIJJKKLLXXWWVVUU\\]]^^__))**++,,XWWVVUUTSSTTUUVVNNMMLLKKSSTTUUVVNNMMLLKKSSTTUUVVNNMMLLKKSSTTUUVVNNMMLLKKSSTTUUVVNNMMLLKKkkllmmnn  + +  + +  + + ((''&&%%fedccbbaMMNNOOPPTTSSRRQQMMNNOOPPTTSSRRQQMMNNOOPPTTSSRRQQMMNNOOPPTTSSRRQQMMNNOOPPTTSSRRQQ``aabbcc--..//55TSSRRQQPWWXXYYZZJJIIHHGGWWXXYYZZJJIIHHGGWWXXYYZZJJIIHHGGWWXXYYZZJJIIHHGGWWXXYYZZJJIIHHGGooppqqrr + +    $$##""!! !!""##a``__^^]QQRRSSTTPPOONNMMQQRRSSTTPPOONNMMQQRRSSTTPPOONNMMQQRRSSTTPPOONNMMQQRRSSTTPPOONNMMiijjkkll      66778899POONMLKJ[[\\]]^^FFEEDDCC[[\\]]^^FFEEDDCC[[\\]]^^FFEEDDCC[[\\]]^^FFEEDDCC[[\\]]^^FFEEDDCCssttuuvv $$%%&&'']\\[[ZZYUUVVWWXXLLKKJJIIUUVVWWXXLLKKJJIIUUVVWWXXLLKKJJIIUUVVWWXXLLKKJJIIUUVVWWXXLLKKJJIImmnnoopp + + + + + + + + + + + + ::;;<<==IIHHGGFF__``aabbBBAA@@??__``aabbBBAA@@??__``aabbBBAA@@??__``aabbBBAA@@??__``aabbBBAA@@??wwxxyyzz(())**++YXXWWVVUYYZZ[[\\HHGGFFEEYYZZ[[\\HHGGFFEEYYZZ[[\\HHGGFFEEYYZZ[[\\HHGGFFEEYYZZ[[\\HHGGFFEEqqrrsstt>>??@@AAEEDDCCBBccddeeff>>==<<;;ccddeeff>>==<<;;ccddeeff>>==<<;;ccddeeff>>==<<;;ccddeeff>>==<<;;{{||}} + + ,,--..//UTTSSRRQ]]^^__``DDCCBBAA]]^^__``DDCCBBAA]]^^__``DDCCBBAA]]^^__``DDCCBBAA]]^^__``DDCCBBAAuuvvwwxxBBCCDDEEAA@@??>>gghhiijj::998877gghhiijj::998877gghhiijj::998877gghhiijj::998877gghhiijj::998877 55667788QPPOONMLaabbccdd@@??>>==aabbccdd@@??>>==aabbccdd@@??>>==aabbccdd@@??>>==aabbccdd@@??>>==yyzz{{|| + +FFGGHHII==<<;;::kkllmmnn66554433kkllmmnn66554433kkllmmnn66554433kkllmmnn66554433kkllmmnn66554433~~ !!""##~~ !!""##~~ !!""## 99::;;<>??@@FFEEDDCCiijjkkll88776655iijjkkll88776655iijjkkll88776655iijjkkll88776655iijjkkll88776655 !! !! !! !! !!yyxxwwvvSSTTUUVV5543210/ssttuuvv..--,,++ssttuuvv..--,,++ssttuuvv..--,,++ssttuuvv..--,,++ssttuuvv..--,,++yyxxwwvv(())**++yyxxwwvv(())**++yyxxwwvv(())**++ + + AABBCCDDBBAA@@??mmnnoopp44332211mmnnoopp44332211mmnnoopp44332211mmnnoopp44332211mmnnoopp44332211~~}}||""##$$%%~~}}||""##$$%%~~}}||""##$$%%~~}}||""##$$%%~~}}||""##$$%%uuttssrrWWXXYYZZ/..--,,+wwxxyyzz**))((''wwxxyyzz**))((''wwxxyyzz**))((''wwxxyyzz**))((''wwxxyyzz**))(('' !!""#uuttssrr,,--..//uuttssrr,,--..//uuttssrr,,--..// EEFFGGHH>>==<<;;qqrrsstt00//..--qqrrsstt00//..--qqrrsstt00//..--qqrrsstt00//..--qqrrsstt00//..--{{zzyyxx&&''(()){{zzyyxx&&''(()){{zzyyxx&&''(()){{zzyyxx&&''(()){{zzyyxx&&''(())qqppoonn[[\\]]^^+**))(('{{||}}~~&&%%$$##{{||}}~~&&%%$$##{{||}}~~&&%%$$##{{||}}~~&&%%$$##{{||}}~~&&%%$$###$$%%&&'qqppoonn00112233qqppoonn00112233qqppoonn00112233{{zzyyxxQQRRSSTT77665543qqrrsstt00//..--qqrrsstt00//..--qqrrsstt00//..--qqrrsstt00//..--qqrrsstt00//..--{{zzyyxx&&''(()){{zzyyxx&&''(()){{zzyyxx&&''(())nnmmllkkkkllmmnn~~ !!""##~~ !!""##wwvvuuttUUVVWWXX210//..-uuvvwwxx,,++**))uuvvwwxx,,++**))uuvvwwxx,,++**))uuvvwwxx,,++**))uuvvwwxx,,++**)) !wwvvuutt**++,,--wwvvuutt**++,,--wwvvuutt**++,,--jjiiccbbooppqqrr}}||{{zz$$%%&&''}}||{{zz$$%%&&''ssrrqqppYYZZ[[\\-,,++**)yyzz{{||((''&&%%yyzz{{||((''&&%%yyzz{{||((''&&%%yyzz{{||((''&&%%yyzz{{||((''&&%%!""##$$%ssrrqqpp..//0011ssrrqqpp..//0011ssrrqqpp..//0011aa``__^^ssttuuvvyyxxwwvv(())**++yyxxwwvv(())**++oonnmmll]]^^__``)((''&&%}}~~$$##""!!}}~~$$##""!!}}~~$$##""!!}}~~$$##""!!}}~~$$##""!!%&&''(()oonnmmll22334455oonnmmll22334455oonnmmll22334455]]\\[[ZZwwxxyyzz uuttssrr,,--..//uuttssrr,,--..//kkjjiiccaabbccii%$$##""!     )**++,,-kkjjiihh66778899kkjjiihh66778899kkjjiihh66778899YYXXWWVV{{||}} + + qqppoonn00112233qqppoonn00112233bbaa``__jjkkllmm! -..//012ggffeedd::;;<<==ggffeedd::;;<<==ggffeedd::;;<<==UUTTSSRR + + mmllkkjj44556677mmllkkjj44556677^^]]\\[[nnooppqq34556677ccbbaa``>>??@@AAccbbaa``>>??@@AAccbbaa``>>??@@AAQQPPOOIIiihhggff8899::;;iihhggff8899::;;ZZYYXXWWrrssttuu8899::;;__^^]]\\BBCCDDEE__^^]]\\BBCCDDEE__^^]]\\BBCCDDEEHHGGFFEEeeddccbb<<==>>??eeddccbb<<==>>??VVUUTTSSvvwwxxyy     <<==>>??[[ZZYYXXFFGGHHII[[ZZYYXXFFGGHHII[[ZZYYXXFFGGHHIIDDCCBBAAaa``__^^@@AABBCCaa``__^^@@AABBCCRRQQPPOOzz{{||}} + + + + + + + + + + }}@@AABBCCWWVVUUTTJJKKLLMMWWVVUUTTJJKKLLMMWWVVUUTTJJKKLLMM@@??>>==]]\\[[ZZDDEEFFGG]]\\[[ZZDDEEFFGGIIHHGGFF + + ||{{zzyyDDEEFFGGSSRRQQPPNNOOPPQQSSRRQQPPNNOOPPQQSSRRQQPPNNOOPPQQ<<;;::99 !!YYXXWWVVHHIIJJKKYYXXWWVVHHIIJJKKEEDDCCBBxxwwvvuuHHIIJKLMOONNMMLLRRSSTTUUOONNMMLLRRSSTTUUOONNMMLLRRSSTTUU88776655""##$$%%UUTTSSRRLLMMNNOOUUTTSSRRLLMMNNOOAA@@??>>ttssrrqqNOOPPQQRKKJJIIHHVVWWXXYYKKJJIIHHVVWWXXYYKKJJIIHHVVWWXXYY//..--,,&&''(())QQPPOONNPPQQRRSSQQPPOONNPPQQRRSS==<<;;:: + + ppoonnmmRSSTTUUVGGFFEEDDZZ[[\\]]GGFFEEDDZZ[[\\]]GGFFEEDDZZ[[\\]]++**))((**++,,--MMLLKKJJTTUUVVWWMMLLKKJJTTUUVVWW99887766 + + + + + + + + + + llkkjjiiVWWXXYYZCCBBAA@@^^__``aaCCBBAA@@^^__``aaCCBBAA@@^^__``aa''&&%%$$..//0011IIHHGGFFXXYYZZ[[IIHHGGFFXXYYZZ[[55//..--     ccbbaa``Z[[\\]]^??>>==<>==<>==<>``aabbccAA@@??>>``aabbcc((''&&%% !![[ZZYYXXbccdefgh77665544jjkkllmm77665544jjkkllmm77665544jjkkllmmwwvvuutt::;;<<====<<;;::ddeeffgg==<<;;::ddeeffgg$$##""!!""##$$%%WWVVUUTTiijjkkll33221100nnooppqq33221100nnooppqq33221100nnooppqqssrrqqpp>>??@@AA99887766hhiijjkk99887766hhiijjkk      &&''(())SSRRQQPPmmnnoopp//..--,,rrssttuu//..--,,rrssttuu//..--,,rrssttuu oonnmmllBBCCDDEE55443322llmmnnoo55443322llmmnnoo!!""##$$~~}}!!""##$$~~}}!!""##$$~~}}!!""##$$~~}}!!""##$$~~}}**++,,--OOIIHHGGqqrrsstt++**))((vvwwxxyy++**))((vvwwxxyy++**))((vvwwxxyy + + + +kkjjiihhFFGGHHII1100//..ppqqrrss1100//..ppqqrrss%%&&''((||{{zzyy%%&&''((||{{zzyy%%&&''((||{{zzyy%%&&''((||{{zzyy%%&&''((||{{zzyy..//5566FFEEDDCCuuvvwwxx''&&%%$$zz{{||}}''&&%%$$zz{{||}}''&&%%$$zz{{||}} ggffeeddJJKKLLMM--,,++**ttuuvvww--,,++**ttuuvvww ))**++,,xxwwvvuu))**++,,xxwwvvuu))**++,,xxwwvvuu))**++,,xxwwvvuu))**++,,xxwwvvuu778899::BBAA@@??yyzz{{||##""!! ~~##""!! ~~##""!! ~~ccbbaa``NNOOPPQQ))((''&&xxyyzz{{))((''&&xxyyzz{{ + + ~}}--..//00ttssrrqq--..//00ttssrrqq--..//00ttssrrqq--..//00ttssrrqq--..//00ttssrrqq;;<<==>>>>==<<;;}}~__^^]]\\RRSSTTUU%%$$##""||}}~~%%$$##""||}}~~||{{zzyy11223344ppoonnmm11223344ppoonnmm11223344ppoonnmm11223344ppoonnmm11223344ppoonnmm??@@AABB::998877[[ZZYYXXVVWWXXYY!! !!  xxwwvvuu55667788llkkjjii55667788llkkjjii55667788llkkjjii55667788llkkjjii55667788llkkjjiiCCDDEEFF6655//.. !!""##WWVVUUTTZZ[[\\]] + + ttssrrqq99::;;<>??@@ddccbbaa==>>??@@ddccbbaa==>>??@@ddccbbaa==>>??@@ddccbbaa==>>??@@ddccbbaaPPQQRRSS))((''&&   (())**++OONNMMLLbbccddeellkkjjiiAABBCCDD``__^^]]AABBCCDD``__^^]]AABBCCDD``__^^]]AABBCCDD``__^^]]AABBCCDD``__^^]]TTUUVVWW%%$$##"" + +  + +  + + ,,--..//KKJJIIHHffgghhiihgfedccbEEFFGGHH\\[[ZZYYEEFFGGHH\\[[ZZYYEEFFGGHH\\[[ZZYYEEFFGGHH\\[[ZZYYEEFFGGHH\\[[ZZYYXXYYZZ[[!! 55667788GGFFEEDDjjkkllmm + + + + !!""baa``__^IIJJKKLLXXWWVVUUIIJJKKLLXXWWVVUUIIJJKKLLXXWWVVUUIIJJKKLLXXWWVVUUIIJJKKLLXXWWVVUU\\]]^^__99::;;<>??@@??>>==<>??GGFFEEDDaabbccdd@@??>>==aabbccdd@@??>>==aabbccdd@@??>>==aabbccdd@@??>>==aabbccdd@@??>>==yyzz{{|| + +}}||{{VVWWXXYY++**))((@@AABBCCCCBBAA@@eeffgghh<<;;::99eeffgghh<<;;::99eeffgghh<<;;::99eeffgghh<<;;::99eeffgghh<<;;::99}} zzyyxxwwZZ[[\\]]''&&%%$$DDEEFFGG??>>==<=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565656565654343434321212121212121210/0/0/0//0/0////.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#}~}~}~}~~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghgfefefefefefefedcdcdcdccdcdcdcdbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKIJIJIJIJIJIJIJIJHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565656565654343434321212121212121210/0/0/0///0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#}~}~}~}~~}}}}}}~|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghgfefefefefefefefedcdcdcdccdcdcdcdbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKIIIIIIJIIJIJIJIJHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565656565654343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#}~}~}~}~}~}~}~}~|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghgfefefefefefefefedcdcdcdcccccccdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIIJIJIJIJHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343432121212121212121/////0/00/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#}~}~}}}}}~}~}~}~|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIIJIJIJIJHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343432121212121212121/0/0/0/00/0/////.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#}}~}~}~}}~}~}~}~|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghgfefefefefefefefedcdcccccdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIIJIJIIIIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343432121212121212121/0/0/0/00/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}}~}~}~}~|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghgfefefefefefefefecdcdcdcddcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIIIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343432121212121212121/0/0/0/0.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!~}~}~}~}}~}~}~}~|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghgfefefefefefefefecdcdcdcdccccdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343432121212121212121/0/0/0/0.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!~}~}~}~}}}}}}}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghgfefefefefefefefecdcdcdcddcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMLKLKLKLKLKLKLKLKIIIIIJIJHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878787878787656565656565656543434343434343432121212121212121/0/0/0//.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghgfefefefefefefefecdcdcdcdbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKIJIJIJIJHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878787878787656565656565656543434343434343432121212121212121////0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!~}~}}}}}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefecdcdcdcdbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKIJIJIJIJHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121210/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!}~}~}~}~|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefecdccccccbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKJIJIIJIJIJIJHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565656565654343434343434343212121210//////00/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!}~}~}~}~|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefedcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIIIIIIJIJIJIJHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121/0/0/0/00/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!}~}~}~}~|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefedcdcdcccdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIIJIJIJIIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121/0/0/0/00/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!~}~}~}~}}~}~}~}~|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefecccdcdcddcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIIIIIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121/0/0/0/00/0/0///.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!}}}}~}~}}~}~}~}~|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefecdcdcdcddcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121/0/0/0/0///0/0/0.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!~}~}~}~}}~}}}}}}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefecdcdcdcddcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIIIIIIJJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121/0/0/0/0/0/0/0/0.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefecdcdcdcddccccccdbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKIJIJIJIJJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:987878787878787876565656565656565434343434343434321212121//////0//0/0/0/0.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!~}~}~}}}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefecdcdcdcdcdcdcdcdbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKIJIJIJIJJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565656565654343434343434321212121210/0/0/0//0/0/0/0.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!}}}~}~}~~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefecdcdcccccdcdcdcdbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKIJIJIJIJJIJIJIIIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565656565654343434321212121212121210/0/0/0//0/0/0/0.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + +                 + + + + + + + +                 + + + + + + + +                 + + + + + + + +                 + + + + + + + +                 + + + + + + + +                 + + + + + + + +                 + + + + + + + +                 + + + + + + + + PPOONNMMaabbccdd''&&%%$$IIOOPPQQ::998877%%&&''((uuvvwwxx||{{zzyy,,++**))%%&&''((uuvvwwxx||{{zzyy,,++**))%%&&''((uuvvwwxx||{{zzyy,,++**))%%&&''((uuvvwwxx||{{zzyy,,++**))%%&&''((uuvvwwxx||{{zzyy,,++**))..//5566FFEEDDCC !uuvvwwxxwwvvuutt''&&%%$$**++,,--zz{{||}}wwvvuutt''&&%%$$**++,,--zz{{||}}wwvvuutt''&&%%$$**++,,--zz{{||}}wwvvuutt''&&%%$$**++,,--zz{{||}}wwvvuutt''&&%%$$**++,,--zz{{||}}mmllkkjj __``aabb~}}||{{'&&%%$$#//001122rrqqppoo""!! //001122rrqqppoo""!! //001122rrqqppoo""!! //001122rrqqppoo""!! //001122rrqqppoo""!! ==>>??@@<<;;::99'(())**+mmllkkjj44556677mmllkkjj44556677mmllkkjj44556677mmllkkjj44556677mmllkkjj44556677^^]]\\[[ + + nnooppqqttssrrqq99::;;<>??@@ddccbbaa==>>??@@ddccbbaa==>>??@@ddccbbaaHHGGFFEEiijjkkll}}||{{VVWWXXYY0//..--,--..//00}}~~ttssrrqq$$##""!!--..//00}}~~ttssrrqq$$##""!!--..//00}}~~ttssrrqq$$##""!!--..//00}}~~ttssrrqq$$##""!!--..//00}}~~ttssrrqq$$##""!!;;<<==>>>>==<<;;%&&''(()}}~oonnmmll22334455oonnmmll22334455oonnmmll22334455oonnmmll22334455oonnmmll22334455``__^^]] + + llmmnnoovvuuttss778899::jjiihhgg778899::jjiihhgg778899::jjiihhgg778899::jjiihhgg778899::jjiihhggEEFFGGHH//..--,,/0123455eeddccbb<<==>>??eeddccbb<<==>>??eeddccbb<<==>>??eeddccbb<<==>>??eeddccbb<<==>>??VVUUTTSSvvwwxxyyllkkjjiiAABBCCDD``__^^]] AABBCCDD``__^^]] AABBCCDD``__^^]] DDCCBBAA mmnnooppzzyyxxwwZZ[[\\]],++**))(11223344ppoonnmm 11223344ppoonnmm 11223344ppoonnmm 11223344ppoonnmm 11223344ppoonnmm ??@@AABB::998877)**++,,-kkjjiihh66778899kkjjiihh66778899kkjjiihh66778899kkjjiihh66778899kkjjiihh66778899\\[[ZZYY ppqqrrssrrqqppoo;;<<==>>ffeeddcc;;<<==>>ffeeddcc;;<<==>>ffeeddcc;;<<==>>ffeeddcc;;<<==>>ffeeddccIIOOPPQQ++**))((66778899aa``__^^@@AABBCCaa``__^^@@AABBCCaa``__^^@@AABBCCaa``__^^@@AABBCCaa``__^^@@AABBCCRRQQPPOOzz{{||}}hgfedccb EEFFGGHH\\[[ZZYY + + EEFFGGHH\\[[ZZYY + + EEFFGGHH\\[[ZZYY + + @@??>>==!!""##$$qqrrssttvvuuttss^^__``aa~}}||(''&&%%$55667788llkkjjii55667788llkkjjii55667788llkkjjii55667788llkkjjii55667788llkkjjiiCCDDEEFF6655//..-..//012ggffeedd::;;<<==ggffeedd::;;<<==ggffeedd::;;<<==ggffeedd::;;<<==ggffeedd::;;<<==XXWWVVUUttuuvvwwnnmmllkk??@@AABBbbaa``__??@@AABBbbaa``__??@@AABBbbaa``__??@@AABBbbaa``__??@@AABBbbaa``__RRSSTTUU''&&%%$$::;;<<==]]\\[[ZZ + +DDEEFFGG]]\\[[ZZ + +DDEEFFGG]]\\[[ZZ + +DDEEFFGG]]\\[[ZZ + +DDEEFFGG]]\\[[ZZ + +DDEEFFGGIIHHGGFF !!""baa``__^ + + IIJJKKLLXXWWVVUUIIJJKKLLXXWWVVUUIIJJKKLLXXWWVVUU<<;;::99%%&&''((uuvvwwxxrrqqppoo bbcciijj{{zzyyxx$##""!! 99::;;<>??@@AAccbbaa``>>??@@AAccbbaa``>>??@@AAccbbaa``>>??@@AAccbbaa``>>??@@AATTSSRRQQxxyyzz{{jjiihgfe CCDDEEFF^^]]\\[[ CCDDEEFF^^]]\\[[ CCDDEEFF^^]]\\[[ CCDDEEFF^^]]\\[[ CCDDEEFF^^]]\\[[ VVWWXXYY##""!! >>??@@AAYYXXWWVV HHIIJJKKYYXXWWVV HHIIJJKKYYXXWWVV HHIIJJKKYYXXWWVV HHIIJJKKYYXXWWVV HHIIJJKKEEDDCCBB##$$%%&&^]]\\[[ZMMNNOOPPTTSSRRQQMMNNOOPPTTSSRRQQMMNNOOPPTTSSRRQQ88776655))**++,,yyzz{{||nnmmllkk + + + +kkllmmnnwwvvuutt ==>>??@@ddccbbaa==>>??@@ddccbbaa==>>??@@ddccbbaa==>>??@@ddccbbaa==>>??@@ddccbbaaPPQQRRSS))((''&&8899::;;__^^]]\\ BBCCDDEE__^^]]\\ BBCCDDEE__^^]]\\ BBCCDDEE__^^]]\\ BBCCDDEE__^^]]\\ BBCCDDEEPPOOIIHH ||}}dccbbaa` + + GGHHIIJJZZYYXXWW + + GGHHIIJJZZYYXXWW + + GGHHIIJJZZYYXXWW + + GGHHIIJJZZYYXXWW + + GGHHIIJJZZYYXXWW + + ZZ[[\\]]}}||{{BBCCDDEEUUTTSSRRLLMMNNOOUUTTSSRRLLMMNNOOUUTTSSRRLLMMNNOOUUTTSSRRLLMMNNOOUUTTSSRRLLMMNNOOAA@@??>>''(())**ZYYXXWWVQQRRSSTTPPOONNMMQQRRSSTTPPOONNMMQQRRSSTTPPOONNMM99::;;<<44332211--..//00}}~~jjiiccbb ooppqqrrssrrqqppAABBCCDD``__^^]] AABBCCDD``__^^]] AABBCCDD``__^^]] AABBCCDD``__^^]] AABBCCDD``__^^]] TTUUVVWW%%$$##""<<==>>??[[ZZYYXX + + FFGGHHII[[ZZYYXX + + FFGGHHII[[ZZYYXX + + FFGGHHII[[ZZYYXX + + FFGGHHII[[ZZYYXX + + FFGGHHIIGGFFEEDD!!""##$$`__^^]]\KKLLMMNNVVUUTTSSKKLLMMNNVVUUTTSSKKLLMMNNVVUUTTSSKKLLMMNNVVUUTTSSKKLLMMNNVVUUTTSS^^__``aazzyyxxwwFFGGHHIIQQPPOONNPPQQRRSSQQPPOONNPPQQRRSSQQPPOONNPPQQRRSSQQPPOONNPPQQRRSSQQPPOONNPPQQRRSS==<<;;::++,,--..VUUTTSSRUUVVWWXXLLKKJJIIUUVVWWXXLLKKJJIIUUVVWWXXLLKKJJII==>>??@@~~}}00//..--11223344aa``__^^ssttuuvvoonnmmllEEFFGGHH\\[[ZZYY + + EEFFGGHH\\[[ZZYY + + EEFFGGHH\\[[ZZYY + + EEFFGGHH\\[[ZZYY + + EEFFGGHH\\[[ZZYY + + XXYYZZ[[}}!! @@AABBCCWWVVUUTTJJKKLLMMWWVVUUTTJJKKLLMMWWVVUUTTJJKKLLMMWWVVUUTTJJKKLLMMWWVVUUTTJJKKLLMMCCBBAA@@%%&&''((\[[ZZYYXOOPPQQRRRRQQPPOOOOPPQQRRRRQQPPOOOOPPQQRRRRQQPPOOOOPPQQRRRRQQPPOOOOPPQQRRRRQQPPOObbcciijjvvuuttssJKLMNOOPMMLLKKJJTTUUVVWWMMLLKKJJTTUUVVWWMMLLKKJJTTUUVVWWMMLLKKJJTTUUVVWWMMLLKKJJTTUUVVWW99887766//556677RQQPPOON + + YYZZ[[\\HHGGFFEE + + YYZZ[[\\HHGGFFEE + + YYZZ[[\\HHGGFFEE + + AABBCCDD||{{zzyy,,++**))55667788]]\\[[ZZwwxxyyzzkkjjiihgIIJJKKLLXXWWVVUUIIJJKKLLXXWWVVUUIIJJKKLLXXWWVVUUIIJJKKLLXXWWVVUUIIJJKKLLXXWWVVUU\\]]^^__||{{zzyyDDEEFFGGSSRRQQPPNNOOPPQQSSRRQQPPNNOOPPQQSSRRQQPPNNOOPPQQSSRRQQPPNNOOPPQQSSRRQQPPNNOOPPQQ??>>==<<))**++,,XWWVVUUTSSTTUUVVNNMMLLKKSSTTUUVVNNMMLLKKSSTTUUVVNNMMLLKKSSTTUUVVNNMMLLKKSSTTUUVVNNMMLLKK + +kkllmmnnrrqqppoo PQQRRSSTIIHHGGFF + + XXYYZZ[[IIHHGGFF + + XXYYZZ[[IIHHGGFF + + XXYYZZ[[IIHHGGFF + + XXYYZZ[[IIHHGGFF + + XXYYZZ[[55//..--8899::;;MLKJIIHH ]]^^__``DDCCBBAA ]]^^__``DDCCBBAA ]]^^__``DDCCBBAA EEFFGGHHxxwwvvuu((''&&%%99::;;<>??GGFFEEDDaabbccdd@@??>>==aabbccdd@@??>>==aabbccdd@@??>>==IIJJKKLLttssrrqq$$##""!!==>>??@@UUTTSSRR !!""##a``__^^] QQRRSSTTPPOONNMMQQRRSSTTPPOONNMMQQRRSSTTPPOONNMMQQRRSSTTPPOONNMMQQRRSSTTPPOONNMMiijjkkllttssrrqq NOOPPQQRKKJJIIHH VVWWXXYYKKJJIIHH VVWWXXYYKKJJIIHH VVWWXXYYKKJJIIHH VVWWXXYYKKJJIIHH VVWWXXYY776655//66778899POONMLKJ [[\\]]^^FFEEDDCC [[\\]]^^FFEEDDCC [[\\]]^^FFEEDDCC [[\\]]^^FFEEDDCC [[\\]]^^FFEEDDCCssttuuvvjjiiccbbXYYZZ[[\AA@@??>>``aabbccAA@@??>>``aabbccAA@@??>>``aabbccAA@@??>>``aabbccAA@@??>>``aabbcc((''&&%%@@AABBCCCCBBAA@@eeffgghh<<;;::99eeffgghh<<;;::99eeffgghh<<;;::99MMNNOOPPppoonnmm AABBCCDDQQPPOOII$$%%&&'']\\[[ZZYUUVVWWXXLLKKJJIIUUVVWWXXLLKKJJIIUUVVWWXXLLKKJJIIUUVVWWXXLLKKJJIIUUVVWWXXLLKKJJII + + mmnnooppppoonnmm + + RSSTTUUVGGFFEEDD + + ZZ[[\\]]GGFFEEDD + + ZZ[[\\]]GGFFEEDD + + ZZ[[\\]]GGFFEEDD + + ZZ[[\\]]GGFFEEDD + + ZZ[[\\]]..--,,++::;;<<==IIHHGGFF__``aabbBBAA@@??__``aabbBBAA@@??__``aabbBBAA@@??__``aabbBBAA@@??__``aabbBBAA@@??wwxxyyzzaa``__^^\]]^^__`==<<;;::ddeeffgg==<<;;::ddeeffgg==<<;;::ddeeffgg==<<;;::ddeeffgg==<<;;::ddeeffgg$$##""!!DDEEFFGG??>>==<<iijjkkll88776655iijjkkll88776655iijjkkll88776655QQRRSSTTllkkjjiiEEFFGGHHHHGGFFEE(())**++YXXWWVVU + + YYZZ[[\\HHGGFFEE + + YYZZ[[\\HHGGFFEE + + YYZZ[[\\HHGGFFEE + + YYZZ[[\\HHGGFFEE + + YYZZ[[\\HHGGFFEE qqrrssttllkkjjiiVWWXXYYZCCBBAA@@^^__``aaCCBBAA@@^^__``aaCCBBAA@@^^__``aaCCBBAA@@^^__``aaCCBBAA@@^^__``aa**))((''>>??@@AAEEDDCCBBccddeeff>>==<<;;ccddeeff>>==<<;;ccddeeff>>==<<;;ccddeeff>>==<<;;ccddeeff>>==<<;;{{||}}]]\\[[ZZ + + `aabbccd99887766hhiijjkk99887766hhiijjkk99887766hhiijjkk99887766hhiijjkk99887766hhiijjkk}}|| HHIIOOPP;;::9988 mmnnoopp44332211 mmnnoopp44332211 mmnnoopp44332211 UUVVWWXXhhggffeeIIJJKKLLDDCCBBAA,,--..//UTTSSRRQ ]]^^__``DDCCBBAA ]]^^__``DDCCBBAA ]]^^__``DDCCBBAA ]]^^__``DDCCBBAA ]]^^__``DDCCBBAAuuvvwwxxccbbaa``Z[[\\]]^??>>==<<bbccddee??>>==<<bbccddee??>>==<<bbccddee??>>==<<bbccddee??>>==<<bbccddee&&%%$$##BBCCDDEEAA@@??>>gghhiijj::998877gghhiijj::998877gghhiijj::998877gghhiijj::998877gghhiijj::998877 !!""##YYXXWWVV efghiijj55443322llmmnnoo55443322llmmnnoo55443322llmmnnoo55443322llmmnnoo55443322llmmnnoo{{zzyyxxQQRRSSTT77665543!!""##$$qqrrsstt~~}}00//..--!!""##$$qqrrsstt~~}}00//..--!!""##$$qqrrsstt~~}}00//..--!!""##$$YYZZ[[\\ddccbbaaMMNNOOPP@@??>>==55667788QPPOONMLaabbccdd@@??>>==aabbccdd@@??>>==aabbccdd@@??>>==aabbccdd@@??>>==aabbccdd@@??>>==yyzz{{||__^^]]\\ + +^__``aab;;::9988ffgghhii;;::9988ffgghhii;;::9988ffgghhii;;::9988ffgghhii;;::9988ffgghhii""!! FFGGHHII==<<;;::kkllmmnn66554433kkllmmnn66554433kkllmmnn66554433kkllmmnn66554433kkllmmnn66554433$$%%&&''UUTTSSRRkkllmmnn~~1100//.. !!""##ppqqrrss~~1100//.. !!""##ppqqrrss~~1100//.. !!""##ppqqrrss~~1100//.. !!""##ppqqrrss~~1100//.. !!""##ppqqrrsswwvvuuttUUVVWWXX210//..-%%&&''((uuvvwwxx||{{zzyy,,++**))%%&&''((uuvvwwxx||{{zzyy,,++**))%%&&''((uuvvwwxx||{{zzyy,,++**))%%&&''((]]^^__````__^^]] QQRRSSTT<<;;::9999::;;<>??@@FFEEDDCCiijjkkll88776655iijjkkll88776655iijjkkll88776655iijjkkll88776655iijjkkll88776655""##$$%%WWVVUUTTiijjkkll33221100 !!nnooppqq33221100 !!nnooppqq33221100 !!nnooppqq33221100 !!nnooppqq33221100 !!nnooppqqyyxxwwvvSSTTUUVV5543210/##$$%%&&ssttuuvv~~}}||{{..--,,++##$$%%&&ssttuuvv~~}}||{{..--,,++##$$%%&&ssttuuvv~~}}||{{..--,,++##$$%%&&ssttuuvv~~}}||{{..--,,++##$$%%&&ssttuuvv~~}}||{{..--,,++,,--..//HHGGFFEEssttuuvvyyxxwwvv))((''&&(())**++xxyyzz{{yyxxwwvv))((''&&(())**++xxyyzz{{yyxxwwvv))((''&&(())**++xxyyzz{{yyxxwwvv))((''&&(())**++xxyyzz{{yyxxwwvv))((''&&(())**++xxyyzz{{oonnmmll + + ]]^^__``~}})((''&&%--..//00}}~~ttssrrqq$$##""!!--..//00}}~~ttssrrqq$$##""!!--..//00}}~~ttssrrqq$$##""!!--..//00eeffgghhXXWWVVUU + + YYZZ[[\\//..--,,AABBCCDDBBAA@@?? mmnnoopp44332211 mmnnoopp44332211 mmnnoopp44332211 mmnnoopp44332211 mmnnoopp44332211&&''(())SSRRQQPPmmnnoopp~~}}||//..--,,""##$$%%rrssttuu~~}}||//..--,,""##$$%%rrssttuu~~}}||//..--,,""##$$%%rrssttuu~~}}||//..--,,""##$$%%rrssttuu~~}}||//..--,,""##$$%%rrssttuuuuttssrrWWXXYYZZ/..--,,+''(())**wwxxyyzzzzyyxxww**))((''''(())**wwxxyyzzzzyyxxww**))((''''(())**wwxxyyzzzzyyxxww**))((''''(())**wwxxyyzzzzyyxxww**))((''''(())**wwxxyyzzzzyyxxww**))((''55667788DDCCBBAA !!""#wwxxyyzzuuttssrr%%$$##"",,--..//||}}~~uuttssrr%%$$##"",,--..//||}}~~uuttssrr%%$$##"",,--..//||}}~~uuttssrr%%$$##"",,--..//||}}~~uuttssrr%%$$##"",,--..//||}}~~kkjjiiccaabbccii||{{zzyy%$$##""!11223344ppoonnmm 11223344ppoonnmm 11223344ppoonnmm 11223344iijjkkllTTSSRRQQ ]]^^__``++**))((EEFFGGHH>>==<<;;!!""##$$qqrrsstt~~}}00//..--!!""##$$qqrrsstt~~}}00//..--!!""##$$qqrrsstt~~}}00//..--!!""##$$qqrrsstt~~}}00//..--!!""##$$qqrrsstt~~}}00//..--**++,,--OOIIHHGGqqrrsstt{{zzyyxx++**))((&&''(())vvwwxxyy{{zzyyxx++**))((&&''(())vvwwxxyy{{zzyyxx++**))((&&''(())vvwwxxyy{{zzyyxx++**))((&&''(())vvwwxxyy{{zzyyxx++**))((&&''(())vvwwxxyyqqppoonn + +[[\\]]^^+**))(('++,,--..{{||}}~~vvuuttss&&%%$$##++,,--..{{||}}~~vvuuttss&&%%$$##++,,--..{{||}}~~vvuuttss&&%%$$##++,,--..{{||}}~~vvuuttss&&%%$$##++,,--..{{||}}~~vvuuttss&&%%$$##99::;;<<@@??>>==#$$%%&&'{{||}}~qqppoonn!! 00112233qqppoonn!! 00112233qqppoonn!! 00112233qqppoonn!! 00112233qqppoonn!! 00112233bbaa``__ jjkkllmmxxwwvvuu! 55667788llkkjjii55667788llkkjjii55667788llkkjjii55667788mmnnooppqqrrsstt~~}}00//..--!!""##$$qqrrsstt~~}}00//..--**++,,--OOIIHHGGqqrrsstt{{zzyyxx++**))((&&''(())vvwwxxyy{{zzyyxx++**))((&&''(())vvwwxxyy{{zzyyxx++**))((&&''(())vvwwxxyynnmmllkk + + + +kkllmmnnkkjjiihhFFGGHHIIuuvvwwxx||{{zzyy,,++**))%%&&''((uuvvwwxx||{{zzyy,,++**))..//5566FFEEDDCC !uuvvwwxxwwvvuutt''&&%%$$**++,,--zz{{||}}wwvvuutt''&&%%$$**++,,--zz{{||}}wwvvuutt''&&%%$$**++,,--zz{{||}}jjiiccbb ooppqqrrggffeeddJJKKLLMMyyzz{{||xxwwvvuu((''&&%%))**++,,yyzz{{||xxwwvvuu((''&&%%778899::BBAA@@??!""##$$%yyzz{{||ssrrqqpp##""!! ..//0011~~ssrrqqpp##""!! ..//0011~~ssrrqqpp##""!! ..//0011~~aa``__^^ssttuuvvccbbaa``NNOOPPQQ}}~~ttssrrqq$$##""!!--..//00}}~~ttssrrqq$$##""!!;;<<==>>>>==<<;;%&&''(()}}~oonnmmll22334455oonnmmll22334455oonnmmll22334455]]\\[[ZZwwxxyyzz__^^]]\\ RRSSTTUUppoonnmm 11223344ppoonnmm ??@@AABB::998877)**++,,-kkjjiihh66778899kkjjiihh66778899kkjjiihh66778899YYXXWWVV{{||}}[[ZZYYXX + + VVWWXXYYllkkjjii55667788llkkjjiiCCDDEEFF6655//..-..//012ggffeedd::;;<<==ggffeedd::;;<<==ggffeedd::;;<<==UUTTSSRR !!""##WWVVUUTT + + ZZ[[\\]]hhggffee99::;;<>??@@AAccbbaa``>>??@@AAccbbaa``>>??@@AAQQPPOOII$$%%&&''SSRRQQPP^^__``aaddccbbaa==>>??@@ddccbbaaPPQQRRSS))((''&&8899::;;__^^]]\\ BBCCDDEE__^^]]\\ BBCCDDEE__^^]]\\ BBCCDDEEHHGGFFEE(())**++OONNMMLLbbccddee``__^^]] AABBCCDD``__^^]] TTUUVVWW%%$$##""<<==>>??[[ZZYYXX + + FFGGHHII[[ZZYYXX + + FFGGHHII[[ZZYYXX + + FFGGHHIIDDCCBBAA,,--..//KKJJIIHHffgghhii\\[[ZZYY + + EEFFGGHH\\[[ZZYY + + XXYYZZ[[}}!! @@AABBCCWWVVUUTTJJKKLLMMWWVVUUTTJJKKLLMMWWVVUUTTJJKKLLMM@@??>>==55667788GGFFEEDDjjkkllmmXXWWVVUUIIJJKKLLXXWWVVUU\\]]^^__||{{zzyyDDEEFFGGSSRRQQPPNNOOPPQQSSRRQQPPNNOOPPQQSSRRQQPPNNOOPPQQ<<;;::9999::;;<>??@@??>>==<<""##$$%%rrssttuuPPOONNMMQQRRSSTTPPOONNMMiijjkkllttssrrqq NOOPPQQRKKJJIIHH VVWWXXYYKKJJIIHH VVWWXXYYKKJJIIHH VVWWXXYY//..--,,AABBCCDD;;::9988&&''(())vvwwxxyyLLKKJJIIUUVVWWXXLLKKJJII + + mmnnooppppoonnmm + + RSSTTUUVGGFFEEDD + + ZZ[[\\]]GGFFEEDD + + ZZ[[\\]]GGFFEEDD + + ZZ[[\\]]++**))((EEFFGGHH77665544**++,,--zz{{||}}HHGGFFEE + + YYZZ[[\\HHGGFFEE qqrrssttllkkjjiiVWWXXYYZCCBBAA@@^^__``aaCCBBAA@@^^__``aaCCBBAA@@^^__``aa''&&%%$$IIOOPPQQ33221100..//0011~~DDCCBBAA ]]^^__``DDCCBBAAuuvvwwxxccbbaa``Z[[\\]]^??>>==<<bbccddee??>>==<<bbccddee??>>==<<bbccddee##""!! RRSSTTUU~~}}||//..--,,22334455@@??>>==aabbccdd@@??>>==yyzz{{||__^^]]\\ + +^__``aab;;::9988ffgghhii;;::9988ffgghhii;;::9988ffgghhii}}||{{VVWWXXYY{{zzyyxx++**))((66778899<<;;::99eeffgghh<<;;::99 !!}}[[ZZYYXX bccdefgh77665544jjkkllmm77665544jjkkllmm77665544jjkkllmmzzyyxxwwZZ[[\\]]wwvvuutt''&&%%$$::;;<<==88776655iijjkkll88776655""##$$%%WWVVUUTTiijjkkll33221100 !!nnooppqq33221100 !!nnooppqq33221100 !!nnooppqqvvuuttss^^__``aassrrqqpp##""!! >>??@@AA44332211 mmnnoopp44332211&&''(())SSRRQQPPmmnnoopp~~}}||//..--,,""##$$%%rrssttuu~~}}||//..--,,""##$$%%rrssttuu~~}}||//..--,,""##$$%%rrssttuurrqqppoo bbcciijjoonnmmllBBCCDDEEfpvf~HbHAZXQJ`ےdrtAJltbf`JXQr˂pZHAtlJ|ZdQbfpvf~HXQJ`ےp˂rJltdrtAvpf`vXnے`JXQZHAbtlJ|ZdQbfpvf~HXQJ`ےp˂rJltdrtAvXH~vpfH˂pZHAArd||ZdQbXv`fpvnbHAZpJ`ےdQZ|ltb~f`vpfH˂pZ`JXQrrd|lJtAXv`fpvnbHAZpJ`ےdQZ|ltb~f`vpfHXQr˂p`JXQdQbt璕~HfpvnXrXQJHAZp˂rtAJlZ|dXnvf`vbے`˂pZHAdQbtd|Z~Hfpv`frXQJHAZp˂rtAJlZ|dXnvf`vbے`˂pZHAtlJfpvnXv`ےbHZrXtbdQZtAJlfH~nvpXQr˂ے`JJtArdbtlnXvHfpvےbHArXQJ`tbdQZtAJlfH~nvpXQr˂ے`JJtArdbtlv`f˂rXQJ`ےdrtAAJlb`vXnH~fZHAbr˂p|ZdQbtArdf~HnXv`p˂rbHAZdrtAbdQZ|nXv`fpvp˂rbHAZltbdQZ|vXnpZHAbJQtArdtlJnXv`fpvbHAZXQJ`ےbdQZ|JltH~fvpfr˂pے`JXQtArdtlJnXv`fpvbHAZXQJ`ےbdQZ|Jltf`v~vbے`ZdQbttlJ~HfXv`f˂rXQbHAZpdrtAJdQZ|vXn~f`HAbے˂pZZdQbtrd|~HfXv`f˂rXQbHAZpdrtAJdQZ|vXn~f`p`JXQrbtl|ZdQvnXv`f`ےbrXQJtbdQrtAJlpfH~XnvJXQrbے`lJtArdQbtvnX~Hfp`ےbrXQJtbdQrtAJlpfH~XnvJXQrbے`tArd~Hff~HAZp˂QJ`ے|drtbdQZf`vXfH~pZHAbXQr˂|ZdQJtArd`f~nXvZp˂ےbHA|drtbdQZf`vXfH~pZHAbXQr˂|ZdQJtArd~HfpJ`ےbHAZpJltQZ|dvpf`vXnے`JXQZHAbtlJ|ZdQbfpvf~HXQJ`ےp˂rJltdrtAf~HnXv`XQJ`ےp˂rdQtAJldrtAJvpfHbے`r˂p|ZdQbtArdf~HnXv`p˂rbHAZdrtAbdQZ|`vXnH~fZHAbr˂p|ZdQbtArdf~HnXv`p˂rbHAZdrtAbdQZ|Xnvpfے`JXQrlJttArZdpvn~HfJ`ے˂rXQltbdrtAJvpfHvXn`JXQrHAbےlJtAZdQbtpvn~HfJ`ے˂rXQltbdrtAJvpfHvXnr˂pl|ZdQbtlv`f~HfpHAZp˂`ےbZ|dtbdQf`vpfH~˂pZHAJXQrd|ZlJtArv`fvnXHAZp˂`ےbZ|dtbdQf`vpfH~˂pZHAJXQr|ZdQbpvnXv`frQJbHAZptAJl|drnvpf`vXے`JpZHAbbtl|ZdQHfpv`f~rXQJ`Zp˂tAJl|drnvpf`vXے`JpZHAbbtl|ZdQvnXbHAZp˂rXQbdQZ|rtAJlH~fvpfr˂pے`JXQtArdtlJnXv`fpvbHAZXQJ`ےbdQZ|Jltfpvf~HbHAZXQJ`ےtbdQl|d~f`JXQrZHAbtlJ|ZdQbfpvf~HXQJ`ےp˂rJltdrtAvpf`vXnے`JXQZHAbtlJ|ZdQbfpvf~HXQJ`ےp˂rJltdrtApfH~JXQHAb˂pZHAArd|QbtlXv`fpvnbHAZpJ`ےdQZ|ltb~f`vpfH˂pZ`JXQrrd|lJtAXv`fpvnbHAZpJ`ےdQZ|ltb~f`vpfHZHAbbtlJtArd~Hfpvnv`rXQJHAZp˂rtAJlZ|dXnvf`vbے`˂pZHAdQbtd|Z~Hfpv`frXQJHAZp˂rtAJlZ|dXnvf`vbے`˂pZHAtd|Xv`f~HfbHAZp˂rXtbdQZtAJlfH~nvpXQr˂ے`JJtArdbtlnXvHfpvےbHArXQJ`tbdQZtAJlfH~nvpXQr˂ے`JJtArdbtlv`f`ےbJ`ےrAJltbdQ`vXnH~fZHAbr˂p|ZdQbtArdf~HnXv`p˂rbHAZdrtAbdQZ|nXv`fpvp˂rbHAZZ|drtAJlvXnZAbے`JXQtArdtlJnXv`fpvbHAZXQJ`ےbdQZ|JltH~fvpfr˂pے`JXQtArdtlJnXv`fpvbHAZXQJ`ےbdQZ|Jltf`vے`Jb˂ZdQbJtArd~HfXv`f˂rXQbHAZpdrtAJdQZ|vXn~f`HAbے˂pZZdQbtrd|~HfXv`f˂rXQbHAZpdrtAJdQZ|vXn~f`ے`JXQJtArd|ZdQvnXf~H`ےbrXQJtbdQrtAJlpfH~XnvJXQrbے`lJtArdQbtvnX~Hfp`ےbrXQJtbdQrtAJlpfH~XnvJXQrbے`ZdQbt~Hfpvn˂rXQQJ`ے|drtbdQZf`vXfH~pZHAbXQr˂|ZdQJtArd`f~nXvZp˂ےbHA|drtbdQZf`vXfH~pZHAbXQr˂|ZdQJtArdnXvHAZp˂rXQJtbdQZ|AJvpf`vXnے`JXQZHAےtlJ|ZdQbfpvfHfXQJ`ےp˂rJltdtAJf~HnXv`XQJ`ےp˂rrtAJltbdQvp`v`JXQrr˂p|ZdQbtArdf~HnXv`p˂rbHAZdrtAbdQZ|`vXnH~fZHAbr˂p|ZdQbtArdf~HnXv`p˂rbHAZdrtAbdQZ|XnXQr˂pZHAbJtArd|Zdpvn~HfJ`ے˂rXQltbdrtAJvpfHvXn`JXQrHAbےlJtAZdQbtpvn~HfJ`ے˂rXQltbdrtAJvpfHvXnr˂p|lJbtlv`f~fpvHAZp˂`ےbZ|dtbdQf`vpfH~˂pZHAJXQrd|ZlJtArv`fvnXHAZp˂`ےbZ|dtbdQf`vpfH~˂pZHAJXQrlJtApvnXv`fJ`ےbHAZtAJl|dtAnvpf`vXے`JpZHAbtl|ZdQHfpv`fHrXQJ`Zp˂tAJl|dtAnvpf`vXے`JpZHAbtl|ZdQ`f~rXQJ`ےbZ|dltbH~fvpfr˂p`JXQrtArdtlJnXv`pvnbHAZXQJ`ےbdQZ|ltbfpvf~HbHAZXQJ`ےtbdQZ|`vXnv˂pZZHAbtlJ|ZdQbfpvf~HXQJ`ےp˂rJltdrtAvpf`vXnے`JXQZHAbtlJ|ZdQbfpvf~HXQJ`ےp˂rJltdrtAf`vXpZHAbے`J|ZdQQbtlXv`fpvnbHAZpJ`ےdQZ|ltb~f`vpfH˂pZ`JXQrrd|lJtAXv`fpvnbHAZpJ`ےdQZ|ltb~f`vpfHZHAXQrtArdJtAdQbfpvnXv`rXQJHAZp˂rtAJlZ|dXnvf`vbے`˂pZHAdQbtd|Z~Hfpv`frXQJHAZp˂rtAJlZ|dXnvf`vbے`˂pZHArd|XHfp~HfbHAZprXQJ`tbdQZJltfH~nvpXQr˂ے`JXQJtArdbtlnXvfpvےbHArXQJ`tbdQZJltfH~nvpXQr˂ے`JXQJtArdbtlHfpv`ےbHAZp˂rtAJlnvp`vXnے`JXQZHAbbtl|ZdQbfpvf~HrXQJ`p˂rJltdrtAnvp`vXnnXv`fpvp˂rbHAZZ|lXnvpfH~HAbے`JQrtArdtlJnXv`fpvbHAZXQJ`ےbdQZ|JltH~fvpfr˂pے`JXQtArdtlJnXv`fpvbHAZXQJ`ےbdQZ|Jltnvpے`JXQr˂btlJtArd~HfXv`f˂rXQbHAZpdrtAJdQZ|vXn~f`HAbے˂pZZdQbtrd|~HfXv`f˂rXQbHAZpdrtAJdQZ|vXn~f`˂pZ|ZdQbtlJnXv`ffpv`ےbrXQJtbdQtAJlpfH~XnvJXQrے`JlJtArdQbtvnXHfpv`ےbrXQJtbdQtAJlpfH~XnvJXQrے`JZdQbtvnXp`f˂rXQےJl|drbnvf`vXfے`JpZHAbrbt|ZdQJfpv`f~nrXQJZp˂ےJl|drbnvf`vXfے`JpZHAbrbt|ZdQJfpvnXvHAZp˂rXQJtbdQfHfvpfr˂pے`JXQJtAdtlJnXv`fpvےHAZXQJ`ےbdQZ|JltfHfvpff~HnXv`XQJ`ےp˂rtbdQZpfH~f`v`JXQrpZHAb|ZdQbtArdf~HnXv`p˂rbHAZdrtAbdQZ|`vXnH~fZHAbr˂p|ZdQbtArdf~HnXv`p˂rbHAZdrtAbdQZ|fH~XQrpZHAbJtArdZQbtpvnHfpJ`ے˂rXQltbdtAJlvpfHvXn`JXQrHAے`lJtAZdQbtpvnHfpJ`ے˂rXQltbdtAJlvpfHvXnHAbےtlJtArdf~HnrXQHAZp˂`ےJlZ|dtbnf`vpfے`˂pZHAXQrbtd|ZlJfpv`fnrXQHAZp˂`ےJlZ|dtbnf`vpfے`˂pZHAXQrbtl|Zv`f~HfpJbHAtbdQZtAJlpfHnvpXQr˂ے`JlJtAdbtlnXvHfpv`ےHArXQJ`tbdQZtAJlpfHnvpXQr˂ے`JlJtAdbtl~H`f~bHA`ےbZ|dr`vXnH~fZHAbr˂p|ZdQbtArdf~HnXv`p˂rbHAZdrtAbdQZ|`vXnH~ffpvf~HbHAZXQJ`ے|drf`pXnv˂pZAے`JtlJ|ZdQbfpvfHfXQJ`ےp˂rJltdtAJvpf`vXnے`JXQZHAےtlJ|ZdQbfpvfHfXQJ`ےp˂rJltdtAJf`vXے`JXQے`p|ZdQlJfXv`fvnrbHAZpJ`ےJdQZ|tbn~f`vpfے˂pZJXQrbrd|lJfXv`fvnrbHAZpJ`ےJdQZ|tbn~f`vpfے`JXQrtArd|ZdQbfpvJ`ےrXQJtbdQrtAJlvpfHXnvJXQrbے`lJtAdQbtvnX~HfpJ`ےrXQJtbdQrtAJlvpfHXnvJXQrbے`l|ZdQbt~HfpvnXZp˂|drtbdQZf`vXfH~pZHAbXQr˂|ZdQJtArd`f~nXvZp˂ےbHA|drtbdQZf`vXfH~pZHAbXQr˂|ZdQJtArdfpvHXv`Zp˂HAXQJ`AJtbvpf`vXnے`JXQZHAbtlJ|ZdQbfpvf~HXQJ`ےp˂rJltdrtAvpf`vXnnXv`fpvp˂rbHAZtAJlfH~pfHXb`JXXQr˂tArdtlJnXv`pvnbHAZXQJ`ےbdQZ|ltbH~fvpfr˂p`JXQrtArdtlJnXv`pvnbHAZXQJ`ےbdQZ|ltbnvpr˂pZHAbbtJApvn~HfXQJ`ے˂rXQltbdrtAJvpfvXn`JXQrHAbےtlJZdQbtpvn~HfXQJ`ے˂rXQltbdrtAJvpfvXn`JXQHA˂pZ|ZdQtAtlJnXv`HAZp˂`ےbZ|dtbdQf`vpfH~˂pZHAJXQrd|ZlJtArv`fvnXHAZp˂`ےbZ|dtbdQf`vpfH~˂pZHAJXQrdQbtlJtArvnXv`pvrXQJ`tAJl|drnvpf`vXے`JpZHAbbtl|ZdQHfpv`f~rXQJ`Zp˂tAJl|drnvpf`vXے`JpZHAbbtl|ZdQnXv`f~HrXQJ`ےJldQZ|H~fvpfr˂pے`JXQtArdtlJnXv`fpvbHAZXQJ`ےbdQZ|JltH~fvpff~HnXv`XQJ`ےp˂rtbdQZf`vXnvpQr˂ppZHAb|ZdQbfpvf~HrXQJ`p˂rJltdrtAnvp`vXnے`JXQZHAbbtl|ZdQbfpvf~HrXQJ`p˂rJltdrtAnvp`vXnZHAbے`JXQrd|Xv`fpvnHAZpJ`ےdQZ|ltbHf`vpfH˂pZ`JXQrtAd|lJtAXv`fpvnHAZpJ`ےdQZ|ltbHf`vpfHbے`HAbrd|tArdtf~fvrXQJHAZp˂rtAJlZ|dXnvf`vbے`˂pZHAdQbtd|Z~Hfpv`frXQJHAZp˂rtAJlZ|dXnvf`vbے`˂pZHAlJtArd|Zv`pvnrXQbHAtbdQZtAJlfH~nvpXQr˂ے`JJtArdbtlnXvHfpvےbHArXQJ`tbdQZtAJlfH~nvpXQr˂ے`JJtArdbtlf~HfpvےbHAtbQZddrtAJ`vXnH~fZHAbr˂p|ZdQbtArdf~HnXv`p˂rbHAZdrtAbdQZ|`vXnH~ffpvf~HbHAZXQJ`ے|dtnvpfH~ZHAbJAdtlJnXv`fpvےHAZXQJ`ےbdQZ|JltfHfvpfr˂pے`JXQJtAdtlJnXv`fpvےHAZXQJ`ےbdQZ|Jlt`vXnvpfے`JXQr˂pZdQbt琕~HfXv`f˂rXQbHAZpdrtAJdQZ|vXn~f`HAbے˂pZZdQbtrd|~HfXv`f˂rXQbHAZpdrtAJdQZ|vXn~f`JXQr˂pZHAZdQbtlJfnXv`ےbrXQJtbdQrtAJlpfH~XnvJXQrbے`lJtArdQbtvnX~Hfp`ےbrXQJtbdQrtAJlpfH~XnvJXQrbے`d|ldQbt璀nXvJ`AZZp˂|drtbdQZf`vXfH~pZHAbXQr˂|ZdQJtArd`f~nXvZp˂ےbHA|drtbdQZf`vXfH~pZHAbXQr˂|ZdQJtArdfpvnXv`Zp˂rtAJlltbvpf`vXnے`JXQZHAbtlJ|ZdQbfpvf~HXQJ`ےp˂rJltdrtAvpf`vXnnXv`fpvp˂rbHAZbdQZ|fH~f`vXے`JX|ZdQbtArdf~HnXv`p˂rbHAZdrtAbdQZ|`vXnH~fZHAbr˂p|ZdQbtArdf~HnXv`p˂rbHAZdrtAbdQZ|vpfH~fr˂p`JXQrlJtApvn~HfJ`ے˂rXQltbdrtAJvpfHvXn`JXQrHAbےlJtAZdQbtpvn~HfJ`ے˂rXQltbdrtAJvpfHvXn˂pZHAbے`lJtApvn`f~HAZp˂`ےbZ|dtbdQf`vpfH~˂pZHAJXQrd|ZlJtArv`fvnXHAZp˂`ےbZ|dtbdQf`vpfH~˂pZHAJXQrJtArdlJtAdQ`f~p˂rrXQJ`tAJl|drnvpf`vXے`JpZHAbbtl|ZdQHfpv`f~rXQJ`Zp˂tAJl|drnvpf`vXے`JpZHAbbtl|ZdQnXHff~HrXQHAZtbddQZ|H~fvpfr˂pے`JXQtArdtlJnXv`fpvbHAZXQJ`ےbdQZ|JltH~fvpff~HnXv`XQJ`ےp˂rdrtAf`vXnvpQr˂ptlJ|ZdQbfpvf~HXQJ`ےp˂rJltdrtAvpf`vXnے`JXQZHAbtlJ|ZdQbfpvf~HXQJ`ےp˂rJltdrtAH~f`vXn`JXQrbtlrd|Xv`fpvnbHAZpJ`ےdQZ|ltb~f`vpfH˂pZ`JXQrrd|lJtAXv`fpvnbHAZpJ`ےdQZ|ltb~f`vpfHbے`JXQrrd|vf~HHfpvrXQJHAZp˂rtAJlZ|dXnvf`vbے`˂pZHAdQbtd|Z~Hfpv`frXQJHAZp˂rtAJlZ|dXnvf`vbے`˂pZHA|ZdQbtlHfpvXQJ`ےbAZp˂tbdQZtAJlfH~nvpXQr˂ے`JJtArdbtlnXvHfpvےbHArXQJ`tbdQZtAJlfH~nvpXQr˂ے`JJtArdbtlpvnfp`fp˂rQZ|ddrtAJ`vXnH~fZHAbr˂p|ZdQbtArdf~HnXv`p˂rbHAZdrtAbdQZ|`vXnH~ffpvf~HbHAZXQJ`ےJltH~ffH~ZHAbtArdtlJnXv`fpvbHAZXQJ`ےbdQZ|JltH~fvpfr˂pے`JXQtArdtlJnXv`fpvbHAZXQJ`ےbdQZ|Jlt`pfHvpf˂pZJA|ZZdQbt琕~HfXv`f˂rXQbHAZpdrtAJdQZ|vXn~f`HAbے˂pZZdQbtrd|~HfXv`f˂rXQbHAZpdrtAJdQZ|vXn~f`JXQr˂pZHAZdQbtfpvnXv`ےbrXQJtbdQrtAJlpfH~XnvJXQrbے`lJtArdQbtvnX~Hfp`ےbrXQJtbdQrtAJlpfH~XnvJXQrbے`btlJtArdnXvbHAZrXQJ|drtbdQZf`vXfH~pZHAbXQr˂|ZdQJtArd`f~nXvZp˂ےbHA|drtbdQZf`vXfH~pZHAbXQr˂|ZdQJtArdXv`f~HfXQJ`ےrtAJlbdQZ|vpf`vXnے`JXQZHAbtlJ|ZdQbfpvf~HXQJ`ےp˂rJltdrtAvpf`vXnnXv`fpvp˂rJltbdQZ|`vXnvpfJXQr|ZdQbtArdf~HnXv`p˂rbHAZdrtAbdQZ|`vXnH~fZHAbr˂p|ZdQbtArdf~HnXv`p˂rbHAZdrtAbdQZ|~f`HXnHAbےdQbt璒lJArpvn~HfJ`ے˂rXQltbdrtAJvpfHvXn`JXQrHAbےlJtAZdQbtpvn~HfJ`ے˂rXQltbdrtAJvpfHvXnے`Jbے`d|ZnXv``f~HAZp˂`ےbZ|dtbdQf`vpfH~˂pZHAJXQrd|ZlJtArv`fvnXHAZp˂`ےbZ|dtbdQf`vpfH~˂pZHAJXQrJtArd|ZdQ`fprQJ``ےbtAJl|drnvpf`vXے`JpZHAbbtl|ZdQHfpv`f~rXQJ`Zp˂tAJl|drnvpf`vXے`JpZHAbbtl|ZdQ~HfpvnbHAZtbddrtH~fvpfr˂pے`JXQtArdtlJnXv`fpvbHAZXQJ`ےbdQZ|JltH~fvpff~HnXv`XQJ`ےdrtAJdrtAvpfے`JXQ˂pZHAtlJ|ZdQbfpvf~HXQJ`ےp˂rJltdrtAvpf`vXnے`JXQZHAbtlJ|ZdQbfpvf~HXQJ`ےp˂rJltdrtAvXnvpfH`JXQrlJtAr|ZdQbXv`fpvnbHAZpJ`ےdQZ|ltb~f`vpfH˂pZ`JXQrrd|lJtAXv`fpvnbHAZpJ`ےdQZ|ltb~f`vpfHXQr˂pZHAbdQbt璍f~HHfvnXrXQJHAZp˂rtAJlZ|dXnvf`vbے`˂pZHAdQbtd|Z~Hfpv`frXQJHAZp˂rtAJlZ|dXnvf`vbے`˂pZHA|ZdQbtlnXv`ےbHHAZp˂tbdQZtAJlfH~nvpXQr˂ے`JJtArdbtlnXvHfpvےbHArXQJ`tbdQZtAJlfH~nvpXQr˂ے`JJtArdbtlpvnXv`pp˂rQZrtAAJlt`vXnH~fZHAbr˂p|ZdQbtArdf~HnXv`p˂rbHAZdrtAbdQZ|`vXnH~ffpvp˂rbHAZltbdQZ|H~frZHAbے`tArdtlJnXv`fpvbHAZXQJ`ےbdQZ|JltH~fvpfr˂pے`JXQtArdtlJnXv`fpvbHAZXQJ`ےbdQZ|JltvpfH~f`˂pZd|ZQtlJ~HfXv`f˂rXQbHAZpdrtAJdQZ|vXn~f`HAbے˂pZZdQbtrd|~HfXv`f˂rXQbHAZpdrtAJdQZ|vXn~f`pZHAbے`JlJtArfpvv`f`ےbrXQJtbdQrtAJlpfH~XnvJXQrbے`lJtArdQbtvnX~Hfp`ےbrXQJtbdQrtAJlpfH~XnvJXQrbے`tArdJtArdf~HAZp˂rXQJ|drtbdQZf`vXfH~pZHAbXQr˂|ZdQJtArd`f~nXvZp˂ےbHA|drtbdQZf`vXfH~pZHAbXQr˂|ZdQJtArdXv`pvnrXQJ`pJltbdQZ|vpf`vXnے`JXQZHAbtlJ|ZdQbfpvf~HXQJ`ےp˂rJltdrtAvpf`vXnnXv`XQJ`ےp˂rdQZ|drtAJ`vXnbے`JXQr|ZdQbtArdf~HnXv`p˂rbHAZdrtAbdQZ|`vXnH~fZHAbr˂p|ZdQbtArdf~HnXv`p˂rbHAZdrtAbdQZ|~f`vXnHAXQrblJttArdpvn~HfJ`ے˂rXQltbdrtAJvpfHvXn`JXQrHAbےlJtAZdQbtpvn~HfJ`ے˂rXQltbdrtAJvpfHvXnے`JXQr˂d|ZnXvf~HfpHAZp˂`ےbZ|dtbdQf`vpfH~˂pZHAJXQrd|ZlJtArv`fvnXHAZp˂`ےbZ|dtbdQf`vpfH~˂pZHAJXQr|ZdQbtlJfpvrXQJ``ےbAtAJl|drnvpf`vXے`JpZHAbbtl|ZdQHfpv`f~rXQJ`Zp˂tAJl|drnvpf`vXے`JpZHAbbtl|ZdQvnXXQJ`p˂rXQbdQZ|drtH~fvpfr˂pے`JXQtArdtlJnXv`fpvbHAZXQJ`ےbdQZ|JltH~fvpfH~fZHAbr˂p|ZdQbtArdf~HnXv`bHAZp˂rXQdtbdQnvpfHH~f`JXQrHAbےlJtAZdQbtpvn~HfJ`ے˂rXQltbdrtAJvpfHvXnJXQr˂p`ZQXb㉀ەvˍpf`vXndrQt`vXnے`JXQZHAbtlJ|ZdQbfpvf~H˂bJ`ےZ|d~f``vXn˂pZ`JXQrrd|lJtAXv`fpvnbHAZpJ`ےdQZ|ltb~f`vpfH˂p`JQXb㉀ۑpJAHrH~ㅐfەvˍpfJltvpfr˂pے`JXQtArdtlJnXv`fpvHAZp˂bHAXQJrtAJlvXnvpfHAbے˂pZZdQbtrd|~HfXv`f˂rXQbHAZpdrtAJdQZ|vXn~f`XQr˂pJAHr󙐂ˁ`Z`vXnH~ㅐfbAdZ|H~fZHAbr˂p|ZdQbtArdf~HnXv`rXQJ`ےJltbdQvpfHH~fvX`JXQrHAbےlJtAZdQbtpvn~HfJ`ے˂rXQltbdrtAJvpfHvXnpZHAbˁ`pQXb㉀ەvˍpf`vXndrQt`vXnے`JXQZHAbtlJ|ZdQbfpvf~H`ےbtdrZ|d~f`nvp˂pZ`JXQrrd|lJtAXv`fpvnbHAZpJ`ےdQZ|ltb~f`vpfHے`JJAHr󙐑pJAHQXH~ㅐfەvˍp|Jltvpfr˂pے`JXQtArdtlJnXv`fpvHAZp˂tAJlrtAdQZvXnvfH~HAbے˂pZZdQbtrd|~HfXv`f˂rXQbHAZpdrtAJdQZ|vXn~f`XQr˂ˁ`ZQXb㉀ۑp`vXndrQtbAdZ|H~fZHAbr˂p|ZdQbtArdf~HnXv`rXQHAtbdQZ|drfH~f`vX`JXQrHAbےlJtAZdQbtpvn~HfJ`ے˂rXQltbdrtAJvpfHvXnpZHAXQb㉀ۑpJAHr󙐕vˍpfJltdrQt`vXnے`JXQZHAbtlJ|ZdQbfpvf~HZp˂|drtAJlf`vXnvp˂pZ`JXQrrd|lJtAXv`fpvnbHAZpJ`ےdQZ|ltb~f`vpfHr˂pJAHr󙐂ˁ`ZQXH~ㅐfbAdZ|Jltvpfr˂pے`JXQtArdtlJnXv`fpvrXQJ`tAJltbdQZnvpfH~HAbے˂pZZdQbtrd|~HfXv`f˂rXQbHAZpdrtAJdQZ|vXn~f`ZHAbˁ`ZQXb㉀ۑp`vXndrQtbAdZ|H~fZHAbr˂p|ZdQbtArdf~HnXv`ےbHAtbdQtA|drfH~fvn`JXQrHAے`lJtAZdQbtpvnHfpJ`ے˂rXQltbdtAJlvpfHvXnے`JXQAHr󙐂JAHfەvˍpfJltdrQt`vXnے`JXQZHAےtlJ|ZdQbfpvfHfZp˂JlttAJl|f`vXvpfے˂pZJXQrbrd|lJfXv`fvnrbHAZpJ`ےJdQZ|tbn~f`vpfZr˂p`ZQXb`vXnH~ㅐfbAdZ|Jltvpfr˂p`JXQrtArdtlJnXv`pvnrXQJ`bdQZ|drtAnvf`JXQrHAbےtlJZdQbtpvn~HfXQJ`ے˂rXQltbdrtAJvpfvXnHAbےZHAbۑpJvˍpf`vXndrQtbAdZ|ے`JXQZHAbbtl|ZdQbfpvf~HrXQJ`p˂rdrtAJlt~f`˂pZ`JXQrtAd|lJtAXv`fpvnHAZpJ`ےdQZ|ltbHf`vpfH`JXQr˂pZAHr󙐂˕H~ㅐfەvˍpfJltdrQtr˂pے`JXQJtAdtlJnXv`fpvp˂rXQJ`ےJltbdQZ|vXnHAbے˂pZZdQbtrd|~HfXv`f˂rXQbHAZpdrtAJdQZ|vXn~f`˂pZHAbے`ZQXb`vXnH~ㅐfbAdZ|JltZHAbr˂p|ZdQbtArdf~HnXv`XQJ`ےbHAZbdQZ|ltbvpfH`JXQrHAbےlJtAZdQbtpvn~HfJ`ے˂rXQltbdrtAJvpfHvXnHAbے`JXQrˁ`vˍpf`vXndrQtbAdZ|ے`JXQZHAbtlJ|ZdQbfpvf~HbHAZp˂rltbnvp~f`˂pZ`JXQrrd|lJtAXv`fpvnbHAZpJ`ےdQZ|ltb~f`vpfH`JXQr˂pZZQXb㉀H~ㅐfەvˍpfJltdrQtr˂pے`JXQtArdtlJnXv`fpvp`ےXQJ`ےdQZ|ff`vvXnHAbے˂pZZdQbtrd|~HfXv`f˂rXQbHAZpdrtAJdQZ|vXn~f`ے`HAbےۑpJAH`vXnH~ㅐfbAdZ|JltZHAbr˂p|ZdQbtArdf~HnXv`bHAZprXQdrtAJXnvvpf~f`JXQrHAbےlJtAZdQbtpvn~HfJ`ے˂rXQltbdrtAJvpfHvXnJXQr`pZHAr󙐂ˁ`vˍpf`vXndrQtbAdZ|ے`JXQZHAbtlJ|ZdQbfpvf~H˂rXQJ`ےltbpfH~`vXn˂pZ`JXQrrd|lJtAXv`fpvnbHAZpJ`ےdQZ|ltb~f`vpfH˂pZHAbے`ZQXb㉀H~ㅐfەvˍpfJltdrQtr˂pے`JXQtArdtlJnXv`fpvJ`ےbHAZpdQZ|f`vvpfHAbے˂pZZdQbtrd|~HfXv`f˂rXQbHAZpdrtAJdQZ|vXn~f`bے`JXQrۑp`Z`vXnH~ㅐfbAdZ|Jlt \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv36_2.dat b/vendor/endroid/qr-code/assets/data/qrv36_2.dat new file mode 100644 index 000000000..0687c2b63 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv36_2.dat @@ -0,0 +1,321 @@ +~}~}~}~}zyzyzyzyvuvuvuvutstststspopopopo~}~}~}~}zyzyzyzyvuvuvuvutstststspopopopo~}}}}}}~zyzyzyzyvuvuvuvutstststspopopopolklklklk}~}~}~}~zyzyzyzyvuvuvuvutstststspopopopolklklklk}~}~}~}~zyzyzyzyvuvuvuvutstststspopopopolklklklk}~}~}~}~zyzyzyzyvuvuvuvutstststspopopopolklklklk}~}~}~}~zyzyzyzyvuvuvuvutstststspopopopolklklklk}~}~}~}~zyzyzyzyvuvuvuvutstststspopopopolklklklk}}}}}}~}zyzyzyzyvuvuvuvutstststspopopopolklklklk~}~}~}|{zyzyzyzyvuvuvuvutstststspopopopolklklklk|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopolklklklk|{|{|{|{zyzyzyzyvuvuvuvutststsrqpopopopolklklklk|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklk|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklk|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklk|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklk|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklk|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklk|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklk|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklk|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklk|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklk|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklk|{|{|{|{zyzyzyxwvuvuvuvurqrqrqrqpopopopolklklklk|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopolklklklk|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopoponmlklklklk|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklk|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklk|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklk|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklk|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklk|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklk|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklk|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklk|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklk|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklk|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklk|{|{|{|{xwxwxwxwvuvuvutsrqrqrqrqnmnmnmnmlklklklk|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnmlklklklk|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnmlklklklk~}~}~}~}|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnmlklklklk}}}}~}~}|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnmlklklkji~}~}~}~}|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijiji~}~}~}~}|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijiji~}~}~}}}|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijiji}}}~}~}~|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijiji}~}~}~}~|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijiji}~}~}~}~|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijiji}~}~}~}~|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijiji}~}~}~}~|{|{|{zyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijiji}~}~}}}}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijiji}}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqponmnmnmnmjijijiji~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijiji~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijiji~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijiji~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijiji~}~}}}}}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijiji}~}~}~}~zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijiji}~}~}~}~zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijiji}~}~}~}~zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijiji}~}~}~}~zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijiji}~}~}~}~zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijiji}~}}}}}}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijiji~}~}~}~}zyzyzyzyxwxwxwvutstststspopopoponmnmnmnmjijijiji~}~}~}~}zyzyzyzyvuvuvuvutstststspopopoponmnmnmnmjijijiji~}~}~}~}zyzyzyzyvuvuvuvutstststspopopoponmnmnmlkjijijijijijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMIIIIIJIJFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"! + + + + jijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"! + + + + jijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"! + + + jijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"! jijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIJFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! jijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMIJIJIJIIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! jijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMIIIIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#     jijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCBABABA@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#     jijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#     jijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:98787876565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#     jijijijifefefefebabababa^]^]^]^]\[\[ZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;878787876565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#     jijijijifefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIIIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;878787876565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#     jijijijifefefedcbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSRQRQPOPONMNMNMNMIIIJIJIJFEFEFEFEBABABABA@?@?@?@?<;<;<;<;878787876565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#     jijijijidcdcdcccbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMIJIJIJIJFEFEFEFEBABABABA@?@?@?@?<;<;<;<;878787876565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#     jijijijicccdcdcdbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMIJIJIJIJFEFEFEFEBABABABA@?@?@?@?<;<;<;<;878787876565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#     jijijihgcdcdcdcdbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMIJIJIJIJFEFEFEFEBABABABA@?@?@?@?<;<;<;<;878787876565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        hghghghgcdcdcdcdbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMIJIJIJIJFEFEFEFEBABABABA@?@?@?@?<;<;<;<;878787876565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        hghghghgcdcdcdcdbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMIJIJIIIIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;878787876565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        hghghghgcdcdcdcdbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKIIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;878787876565656521212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        hghghghgcdcdccccbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;878787876565656521212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        hghghghgccdcdcdcbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;8787878765656565210/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        hghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?>=>=>=<;<;<;<;87878787656565650//////0.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        hghghghgdcdcdcdcbaba`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;8787878765656565/0/0/0/0.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        hghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;8787878765434343/0/0/0/0.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        hghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYXWXWVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;8787878743434343/0/0/0/0.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        hghghghgdcdccccc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;8787878743434343/0/0/0/0.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        hghghghgcdcdcdcd`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;8787878743434343/0/0/0/0.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        hghghghgcdcdcdcd`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;8787878743434343//////0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        hghghghgcdcdcdcd`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + hghghghgcdcdcdcd`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + hghghghgcdcdcdcd`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + hghghghgcdcccccc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + hghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        + + + + hghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEDCDCDCBABABABA>=>=>=>=<;<;<;<;8787878743434343/////0/0,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        + + + + hghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;8787878743434343/0/0/0/0,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        + + + + hghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;:9:9:98787878743434343/0/0/0/0,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        + + + + hghghghgdcdcdcdc`_`_`_`_^]^]\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:98787878743434343/0/0/0/0,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        + + + + hghghghgdccccccd`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:98787878743434343/0/0/0/0,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        + + + + hghghghgcdcdcdcd`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:98787878743434343/0/0/0//,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        + + + + hghghghgcdcdcdcd`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:98787878743434343////0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        + + + + hghghghgcdcdcdcd`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:987878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        + + + + hghghghgcdcdcdcd`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:987878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        + + + + hghghghgcdcdcdcd`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:987878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        + + + + hghghghgccccccdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:987878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        + + + + hghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:987878787434343430/0/0///,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + hghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:98787878743434343///0/0/0,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + hghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:98787878743434343/0/0/0/0,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + hgfefefeccccdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBA@?@?@?>=>=>=>=:9:9:9:98787878743434343/0/0/0/0,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + fefefefedcdcbaba`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:98787878743434343/0/0/0/0,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + fefefefebabababa`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:98765656543434343/0/0/0/0,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + fefefefebabababa`_`_`_`_\[\[\[\[ZYZYXWXWVUVUVUVURQRQRQRQPOPOPOPOJIJIIIIIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656543434343/0/0////,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + fefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656543434343//0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + fefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQPOPONMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + fefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + fefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIIIIIIJHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343210/0/////,+,+,+,+('('('('&%&%&%&%"!"!"!"!   + + + + fefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMIJIJIJIJHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + + fefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMIJIJIJIJHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + + fefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMIJIJIJIJHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + + fefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMIJIJIJIJHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"! + + + + fefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMIJIJIJIJHGFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"! + + + + fefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMIIIIIIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"! + + + + fefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"! + + + + fefefefebabababa`_`_^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"! + + + + fefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"! + + + + fefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWVUVUTSTSRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"! + + + + fefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"! + + + + yyzz{{||mmnnoopp55667788<<;;::99ttssrrqquuvvwwxxuuvvwwxxBBCCDDEE + + //..--,,ggffeedd}}~~qqrrsstt99::;;<<88776655ppoonnmmyyzz{{||yyzz{{||FFGGHHII++**))((ccbbaa``uuvvwwxx==>>??@@44332211llkkjjii}}}}~JJKKLLMM''&&%%$$__^^]]\\yyzz{{||AABBCCDD + + 00//..--hhggffeeNNOOPPQQ##""!! [[ZZYYXX}}~~EEFFGGHH ,,++**))ddccbbaaRRSSTTUUWWVVUUTTIIJJKKLL((''&&%%``__^^]]VVWWXXYY !!SSRRQQPPMMNNOOPP$$##""!!\\[[ZZYYZZ[[\\]]""##$$%%OONNMMLLQQRRSSTT XXWWVVUU^^__``aa&&''(())KKJJIIHH~~}}UUVVWWXX TTSSRRQQbbccddee**++,,-- GGFFEEDD||{{zzyyYYZZ[[\\!!""##$$PPOONNMMffgghhii..//0011 + + CCBBAA@@xxwwvvuu]]^^__``%%&&''((LLKKJJIIjjkkllmm22334455??>>==<<~~}}||ttssrrqqaabbccdd))**++,, HHGGFFEE~~}}nnooppqq66778899;;::9988{{zzyyxxppoonnmm~}}||eeffgghh--..//00 + + DDCCBBAA||{{zzyyrrssttuu::;;<<==77665544wwvvuuttllkkjjii{{zzyyxxiijjkkll11223344@@??>>==xxwwvvuuvvwwxxyy>>??@@AA 33221100ssrrqqpphhggffeewwvvuuttmmnnoopp55667788<<;;::99ttssrrqq}}zz{{||}}BBCCDDEE + + //..--,,oonnmmllddccbbaassrrqqppqqrrsstt99::;;<<88776655ppoonnmm||{{zzyy~~FFGGHHII++**))((kkjjiihh``__^^]]}}||{{oonnmmlluuvvwwxx==>>??@@44332211llkkjjiixxwwvvuuJJKKLLMM''&&%%$$ggffeedd\\[[ZZYYzzyyxxwwkkjjiihgyyzz{{||AABBCCDD + + 00//..--hhggffeettssrrqqNNOOPPQQ##""!! ccbbaa``XXWWVVUUvvuuttssfedccbba}}~~EEFFGGHH ,,++**))ddccbbaappoonnmm~~}}||RRSSTTUU__^^]]\\TTSSRRQQrrqqppooa``__^^]IIJJKKLL((''&&%%``__^^]]llkkjjii{{zzyyxxVVWWXXYY !![[ZZYYXXPPOONNMMnnmmllkk]\\[[ZZYMMNNOOPP$$##""!!\\[[ZZYYccbbaa``wwvvuuttZZ[[\\]]""##$$%%WWVVUUTTLLKKJJIIjjiiccbbYXXWWVVU~~}}QQRRSSTT XXWWVVUU__^^]]\\ssrrqqpp^^__``aa&&''(())SSRRQQPPHHGGFFEEaa``__^^UTTSSRRQ||{{zzyyUUVVWWXX TTSSRRQQ[[ZZYYXXoonnmmllbbccddee**++,,-- OONNMMLLDDCCBBAA]]\\[[ZZQPPOONMLxxwwvvuuYYZZ[[\\!!""##$$PPOONNMMWWVVUUTTkkjjiihhffgghhii..//0011 + + KKJJIIHH@@??>>==YYXXWWVVKJIIHHGGttssrrqq]]^^__``%%&&''((LLKKJJIISSRRQQPPggffeeddjjkkllmm22334455GGFFEEDD<<;;::99UUTTSSRRFFEEDDCCppoonnmmaabbccdd))**++,, HHGGFFEEOOIIHHGGccbbaa``nnooppqq66778899CCBBAA@@88776655QQPPOOIIBBAA@@??llkkjjiieeffgghh--..//00 + + DDCCBBAAFFEEDDCC__^^]]\\rrssttuu::;;<<==??>>==<<44332211HHGGFFEE>>==<<;;hhggffeeiijjkkll11223344@@??>>==BBAA@@??[[ZZYYXXvvwwxxyy>>??@@AA ;;::998800//..--DDCCBBAA::998877ddccbbaammnnoopp55667788<<;;::99>>==<<;;WWVVUUTTzz{{||}}BBCCDDEE + + 77665544,,++**))@@??>>==66554321``__^^]]qqrrsstt99::;;<<88776655::998877SSRRQQPP~~FFGGHHII33221100((''&&%%<<;;::990//..--,\\[[ZZYYuuvvwwxx==>>??@@443322116655//..OONNMMLLJJKKLLMM//..--,,$$##""!!88776655,++**))(XXWWVVUUyyzz{{||AABBCCDD + + 00//..----,,++**KKJJIIHHNNOOPPQQ++**))(( //..--,,(''&&%%$TTSSRRQQ}}~~EEFFGGHH ,,++**))))((''&&GGFFEEDD~~}}||RRSSTTUU''&&%%$$++**))(($##""!! PPOONNMMIIJJKKLL((''&&%%%%$$##""CCBBAA@@{{zzyyxxVVWWXXYY !!##""!! ''&&%%$$ LLKKJJIIMMNNOOPP$$##""!!!! ??>>==<>==xxwwvvuuYYZZ[[\\!!""##$$ 33221100kkjjiihhffgghhii..//0011 + +  + +<<;;::99ttssrrqq]]^^__``%%&&''(( + + //..--,,ggffeeddjjkkllmm22334455  88776655ppoonnmmaabbccdd))**++,, ++**))((ccbbaa``nnooppqq66778899 + +  + + + +44332211llkkjjiieeffgghh--..//00 + + ''&&%%$$__^^]]\\rrssttuu::;;<<==  + + 00//..--hhggffeeiijjkkll11223344 + +##""!! [[ZZYYXXvvwwxxyy>>??@@AA ,,++**))ddccbbaammnnoopp55667788 WWVVUUTTzz{{||}}BBCCDDEE ((''&&%%``__^^]]qqrrsstt99::;;<<SSRRQQPP~~FFGGHHII !!""##$$$$##""!!\\[[ZZYYuuvvwwxx==>>??@@ + + OONNMMLLJJKKLLMM + + %%&&''(( !!""## XXWWVVUUyyzz{{||AABBCCDD KKJJIIHHNNOOPPQQ))**++,,$$%%&&'' TTSSRRQQ}}~~EEFFGGHH ! GGFFEEDD~~}}||RRSSTTUU--..//00(())**++!!""##$$PPOONNMMIIJJKKLL!""##$$% + + CCBBAA@@{{zzyyxxVVWWXXYY11223344,,--..//%%&&''((LLKKJJIIMMNNOOPP !!%&&''(()??>>==<>??@@==>>??@@11223344@@??>>==xxwwvvuuYYZZ[[\\**++,,--34556677 33221100kkjjiihhffgghhii&&''(())AABBCCDDAABBCCDD55667788<<;;::99ttssrrqq]]^^__``..//55668899::;; + + //..--,,ggffeeddjjkkllmm**++,,--EEFFGGHHEEFFGGHH99::;;<<88776655ppoonnmmaabbccdd778899::<<==>>??++**))((ccbbaa``nnooppqq..//0011IIJJKKLLIIOOPPQQ==>>??@@44332211llkkjjiieeffgghh;;<<==>>@@AABBCC''&&%%$$__^^]]\\rrssttuu22334455MMNNOOPPRRSSTTUUAABBCCDD + + 00//..--hhggffeeiijjkkll??@@AABBDDEEFFGG##""!! [[ZZYYXXvvwwxxyy66778899QQRRSSTTVVWWXXYYEEFFGGHH ,,++**))ddccbbaammnnooppCCDDEEFFHHIIJKLMWWVVUUTTzz{{||}}::;;<<==UUVVWWXXZZ[[\\]]IIJJKKLL((''&&%%``__^^]]qqrrssttGGHHIIOONOOPPQQR !!SSRRQQPP~~>>??@@AAYYZZ[[\\^^__``aaMMNNOOPP$$##""!!\\[[ZZYYuuvvwwxxPPQQRRSSRSSTTUUV""##$$%%OONNMMLLBBCCDDEE]]^^__``bbcciijjQQRRSSTT XXWWVVUUyyzz{{||TTUUVVWWVWWXXYYZ&&''(())KKJJIIHHFFGGHHIIaabbccddkkllmmnnUUVVWWXX TTSSRRQQ}}~~XXYYZZ[[Z[[\\]]^**++,,-- GGFFEEDD~~}}||JJKKLLMMeeffgghhooppqqrrYYZZ[[\\!!""##$$PPOONNMM\\]]^^__^__``aab..//0011 + + CCBBAA@@{{zzyyxxNNOOPPQQiijjkkllssttuuvv]]^^__``%%&&''((LLKKJJII``aabbccbccdefgh22334455??>>==<>==xxwwvvuuqqrrssttqqrrsstt>>??@@AA 33221100kkjjiihh^^__``aabbccddee__``aabbGGHHIIJJ**))((''bbaa``__ooppqqrrEEFFGGHHJKLMNOOPUUTTSSRR||}}~~DDEEFFGG<<==>>??))**++,, HHGGFFEE~~}}QQRRSSTT""##$$%%)**++,,-;;::9988ssrrqqppffgghhiicciijjkkKKLLMMNN&&%%$$##^^]]\\[[ssttuuvvIIOOPPQQPQQRRSST !!""##QQPPOONNHHIIJJKK@@AABBCC--..//00 + + DDCCBBAA||{{zzyyUUVVWWXX&&''(())-..//01277665544oonnmmll~~}}||jjkkllmmllmmnnooOOPPQQRR""!! ZZYYXXWWwwxxyyzzRRSSTTUUTUUVVWWX$$%%&&''MMLLKKJJLLMMNNOODDEEFFGG11223344@@??>>==xxwwvvuuYYZZ[[\\**++,,--34556677 33221100kkjjiihh{{zzyyxxnnooppqqppqqrrssSSTTUUVVVVUUTTSS{{||}}~~VVWWXXYYXYYZZ[[\(())**++IIHHGGFF~~PPQQRRSSHHIIOOPP55667788<<;;::99ttssrrqq]]^^__``..//55668899::;; + + //..--,,ggffeeddwwvvuuttrrssttuuttuuvvwwWWXXYYZZ !!""RRQQPPOOZZ[[\\]]\]]^^__`,,--..// + +EEDDCCBB}}||{{zzTTUUVVWWQQRRSSTT99::;;<<88776655ppoonnmmaabbccdd778899::<<==>>??++**))((ccbbaa``ssrrqqppvvwwxxyyxxyyzz{{[[\\]]^^##$$%%&&NNMMLLKK^^__``aa`aabbccd00112233 AA@@??>>yyxxwwvvXXYYZZ[[UUVVWWXX==>>??@@44332211llkkjjiieeffgghh;;<<==>>@@AABBCC''&&%%$$__^^]]\\oonnmmllzz{{||}}||}}__``aabb''(())**JJIIHHGGbbcciijjefghiijj44556677==<<;;::uuttssrr\\]]^^__YYZZ[[\\AABBCCDD + + 00//..--hhggffeeiijjkkll??@@AABBDDEEFFGG##""!! [[ZZYYXXkkjjiihh~~ccddeeff++,,--.. FFEEDDCC~~}}||{{kkllmmnnkkllmmnn8899::;;99887766qqppoonn``aabbcc]]^^__``EEFFGGHH ,,++**))ddccbbaammnnooppCCDDEEFFHHIIJKLMWWVVUUTTggffeeddgghhiijj//001122 + + BBAA@@??zzyyxxwwooppqqrrooppqqrr<<==>>??55443322mmllkkjjddeeffggaabbcciiIIJJKKLL((''&&%%``__^^]]qqrrssttGGHHIIOONOOPPQQR !!SSRRQQPP}}||{{ccbbaa``kkllmmnn33445566>>==<<;;vvuuttssssttuuvvssttuuvv@@AABBCC + + 1100//..iihhggffhhiijjkkjjkkllmmMMNNOOPP$$##""!!\\[[ZZYYuuvvwwxxPPQQRRSSRSSTTUUV""##$$%%OONNMMLLzzyyxxww__^^]]\\ooppqqrr778899::::998877rrqqppoowwxxyyzzwwxxyyzzDDEEFFGG --,,++**eeddccbbllmmnnoonnooppqqQQRRSSTT XXWWVVUUyyzz{{||TTUUVVWWVWWXXYYZ&&''(())KKJJIIHHvvuuttss[[ZZYYXXssttuuvv;;<<==>>66554433nnmmllkk{{||}}{{||}}~HHIIJJKK))((''&&aa``__^^ppqqrrssrrssttuuUUVVWWXX TTSSRRQQ}}~~XXYYZZ[[Z[[\\]]^**++,,-- GGFFEEDDrrqqppooWWVVUUTTwwxxyyzz??@@AABB + +221100//jjiihhggLLMMNNOO%%$$##""]]\\[[ZZttuuvvwwvvwwxxyyYYZZ[[\\!!""##$$PPOONNMM\\]]^^__^__``aab..//0011 + + CCBBAA@@nnmmllkkSSRRQQPP{{||}}~~CCDDEEFF ..--,,++ffeeddccPPQQRRSS!! YYXXWWVVxxyyzz{{zz{{||}}]]^^__``%%&&''((LLKKJJII``aabbccbccdefgh22334455??>>==<>==xxwwvvuuqqrrssttqqrrsstt>>??@@AA 33221100YYXXWWVVCCBBAA@@SSTTUUVVVVUUTTSS``aabbcc(())**++IIHHGGFF~~mmnnoopp55667788<<;;::99ttssrrqquuvvwwxxuuvvwwxxBBCCDDEE + + //..--,,UUTTSSRR??>>==<>yyxxwwvvuuvvwwxx==>>??@@44332211llkkjjii}}}}~JJKKLLMM''&&%%$$HHGGFFEE77665544~}}||{{__``aabb''(())**JJIIHHGGllmmnnoo44556677==<<;;::uuttssrryyzz{{||AABBCCDD + + 00//..--hhggffeeNNOOPPQQ##""!! DDCCBBAA33221100zzyyxxwwccddeeff++,,--.. FFEEDDCC~~}}||{{ppqqrrss8899::;;99887766qqppoonn}}~~EEFFGGHH ,,++**))ddccbbaaRRSSTTUU@@??>>==//..--,,}}||{{zzvvuuttssgghhiijj//001122 + + BBAA@@??zzyyxxwwttuuvvww<<==>>??55443322mmllkkjjIIJJKKLL((''&&%%``__^^]]VVWWXXYY !!<<;;::99++**))((yyxxwwvvrrqqppookkllmmnn33445566>>==<<;;vvuuttssxxyyzz{{@@AABBCC + + 1100//..iihhggffMMNNOOPP$$##""!!\\[[ZZYYZZ[[\\]]""##$$%%88776655''&&%%$$uuttssrrnnmmllkkooppqqrr778899::::998877rrqqppoo}}||{{||}}~~DDEEFFGG --,,++**eeddccbbQQRRSSTT XXWWVVUU^^__``aa&&''(())//..--,,##""!! qqppoonnjjiihgfessttuuvv;;<<==>>66554433nnmmllkkzzyyxxwwHHIIJJKK))((''&&aa``__^^UUVVWWXX TTSSRRQQbbccddee**++,,-- ++**))((mmllkkjjdccbbaa`wwxxyyzz??@@AABB + +221100//jjiihhggvvuuttssLLMMNNOO%%$$##""]]\\[[ZZYYZZ[[\\!!""##$$PPOONNMMffgghhii..//0011 + + ''&&%%$$iiccbbaa`__^^]]\{{||}}~~CCDDEEFF ..--,,++ffeeddccrrqqppoo~~PPQQRRSS!! YYXXWWVV~}}]]^^__``%%&&''((LLKKJJIIjjkkllmm22334455##""!! ``__^^]]\[[ZZYYXGGHHIIJJ**))((''bbaa``__nnmmllkk}}||{{zzTTUUVVWWUUTTSSRR||{{zzyyaabbccdd))**++,, HHGGFFEE~~}}nnooppqq66778899\\[[ZZYYXWWVVUUTKKLLMMNN&&%%$$##^^]]\\[[jjiiccbbyyxxwwvvXXYYZZ[[ !!""##QQPPOONN}}||xxwwvvuueeffgghh--..//00 + + DDCCBBAA||{{zzyyrrssttuu::;;<<== XXWWVVUUTSSRRQQPOOPPQQRR""!! ZZYYXXWWaa``__^^uuttssrr\\]]^^__$$%%&&''MMLLKKJJ{{zzyyxxttssrrqqiijjkkll11223344@@??>>==xxwwvvuuvvwwxxyy>>??@@AA  + + TTSSRRQQPOONMLKJ~~}}||{{SSTTUUVVVVUUTTSS]]\\[[ZZqqppoonn``aabbcc(())**++IIHHGGFFwwvvuuttppoonnmmmmnnoopp55667788<<;;::99ttssrrqq}}zz{{||}}BBCCDDEE + +  + + PPOOIIHHIIHHGGFFzzyyxxwwWWXXYYZZ !!""RRQQPPOOYYXXWWVVmmllkkjjddeeffgg,,--..// + +EEDDCCBBssrrqqppllkkjjiiqqrrsstt99::;;<<88776655ppoonnmm||{{zzyy~~FFGGHHII + + + +GGFFEEDDEEDDCCBBvvuuttss[[\\]]^^##$$%%&&NNMMLLKKUUTTSSRRiihhggffhhiijjkk00112233 AA@@??>>oonnmmllhgfedccbuuvvwwxx==>>??@@44332211llkkjjiixxwwvvuuJJKKLLMM CCBBAA@@AA@@??>>rrqqppoo__``aabb''(())**JJIIHHGGQQPPOOIIeeddccbbllmmnnoo44556677==<<;;::kkjjiiccbaa``__^yyzz{{||AABBCCDD + + 00//..--hhggffeettssrrqqNNOOPPQQ??>>==<<==<<;;::nnmmllkkccddeeff++,,--.. FFEEDDCCHHGGFFEEaa``__^^ppqqrrss8899::;;99887766bbaa``__^]]\\[[Z}}~~EEFFGGHH ,,++**))ddccbbaappoonnmm~~}}||RRSSTTUU;;::998899887766jjiihhgggghhiijj//001122 + + BBAA@@??DDCCBBAA]]\\[[ZZttuuvvww<<==>>??55443322^^]]\\[[ZYYXXWWVIIJJKKLL((''&&%%``__^^]]llkkjjii{{zzyyxxVVWWXXYY !! !!776655//5543210/ffeeddcckkllmmnn33445566>>==<<;;@@??>>==YYXXWWVVxxyyzz{{@@AABBCC + + 1100//..ZZYYXXWWVUUTTSSRMMNNOOPP$$##""!!\\[[ZZYYccbbaa``wwvvuuttZZ[[\\]]""##$$%% !!""##""##$$%%..--,,++/..--,,+bbaa``__ooppqqrr778899::::998877<<;;::99UUTTSSRR||}}~~DDEEFFGG --,,++**VVUUTTSSRQQPPOON~~}}QQRRSSTT XXWWVVUU__^^]]\\ssrrqqpp^^__``aa&&''(())$$%%&&''&&''(())**))((''+**))(('^^]]\\[[ssttuuvv;;<<==>>6655443388776655QQPPOONNHHIIJJKK))((''&&RRQQPPOOMLKJIIHH||{{zzyyUUVVWWXX TTSSRRQQ[[ZZYYXXoonnmmllbbccddee**++,,--(())**++**++,,--&&%%$$##'&&%%$$#ZZYYXXWWwwxxyyzz??@@AABB + +221100////..--,,MMLLKKJJLLMMNNOO%%$$##""IIHHGGFFGGFFEEDDxxwwvvuuYYZZ[[\\!!""##$$PPOONNMMWWVVUUTTkkjjiihhffgghhii..//0011,,--..//..//0011""!! #""!! VVUUTTSS{{||}}~~CCDDEEFF ..--,,++++**))((IIHHGGFF~~PPQQRRSS!! EEDDCCBBCCBBAA@@ttssrrqq]]^^__``%%&&''((LLKKJJIISSRRQQPPggffeeddjjkkllmm223344555566778822334455RRQQPPOOGGHHIIJJ**))((''''&&%%$$EEDDCCBB}}||{{zzTTUUVVWWAA@@??>>??>>==<>yyxxwwvvXXYYZZ[[ !!""##==<<;;::;;::9988llkkjjiieeffgghh--..//00 + + DDCCBBAAFFEEDDCC__^^]]\\rrssttuu::;;<<====>>??@@::;;<<==JJIIHHGGOOPPQQRR""!! ==<<;;::uuttssrr\\]]^^__$$%%&&''9988776677665543hhggffeeiijjkkll11223344@@??>>==BBAA@@??[[ZZYYXXvvwwxxyy>>??@@AAAABBCCDD>>??@@AA + + FFEEDDCC~~}}||{{SSTTUUVV99887766qqppoonn``aabbcc(())**++55//..--210//..-ddccbbaammnnoopp55667788<<;;::99>>==<<;;WWVVUUTTzz{{||}}BBCCDDEEEEFFGGHHBBCCDDEE  + + BBAA@@??zzyyxxwwWWXXYYZZ !!""55443322mmllkkjjddeeffgg,,--..// + +,,++**))-,,++**)``__^^]]qqrrsstt99::;;<<88776655::998877SSRRQQPP~~FFGGHHIIIIOOPPQQFFGGHHII>>==<<;;vvuuttss[[\\]]^^##$$%%&& 1100//..iihhggffhhiijjkk00112233 ((''&&%%)((''&&%\\[[ZZYYuuvvwwxx==>>??@@443322116655//..OONNMMLLJJKKLLMMRRSSTTUUJJKKLLMM + + ::998877rrqqppoo__``aabb''(())** + + --,,++**eeddccbbllmmnnoo44556677$$##""!!%$$##""!XXWWVVUUyyzz{{||AABBCCDD + + 00//..----,,++**KKJJIIHHNNOOPPQQVVWWXXYYNNOOPPQQ 66554433nnmmllkkccddeeff++,,--.. ))((''&&aa``__^^ppqqrrss8899::;; ! TTSSRRQQ}}~~EEFFGGHH ,,++**))))((''&&GGFFEEDD~~}}||RRSSTTUUZZ[[\\]]RRSSTTUU + +221100//jjiihhgggghhiijj//001122 + + %%$$##""]]\\[[ZZttuuvvww<<==>>??PPOONNMMIIJJKKLL((''&&%%%%$$##""CCBBAA@@{{zzyyxxVVWWXXYY^^__``aaVVWWXXYY ..--,,++ffeeddcckkllmmnn33445566 + + !! YYXXWWVVxxyyzz{{@@AABBCC + + LLKKJJIIMMNNOOPP$$##""!!!! ??>>==<> + +QQPPOONNHHIIJJKK + +  DDCCBBAA||{{zzyyUUVVWWXX 77665544oonnmmllbbccddeeooppqqrrbbccddee%%&&''((""!! ZZYYXXWWwwxxyyzz??@@AABB MMLLKKJJLLMMNNOO + + @@??>>==xxwwvvuuYYZZ[[\\!!""##$$ 33221100kkjjiihhffgghhiissttuuvvffgghhii))**++,,VVUUTTSS{{||}}~~CCDDEEFFIIHHGGFF~~PPQQRRSS <<;;::99ttssrrqq]]^^__``%%&&''(( + + //..--,,ggffeeddjjkkllmmwwxxyyzzjjkkllmm--..//55 !!""RRQQPPOOGGHHIIJJ !!""# + +EEDDCCBB}}||{{zzTTUUVVWW + + 88776655ppoonnmmaabbccdd))**++,, ++**))((ccbbaa``nnooppqq{{||}}nnooppqq66778899##$$%%&&NNMMLLKKKKLLMMNN#$$%%&&' AA@@??>>yyxxwwvvXXYYZZ[[ !!""##44332211llkkjjiieeffgghh--..//00 + + ''&&%%$$__^^]]\\rrssttuurrssttuu::;;<<==''(())**JJIIHHGGOOPPQQRR !!""##'(())**+==<<;;::uuttssrr\\]]^^__$$%%&&'' + + 00//..--hhggffeeiijjkkll11223344 + +##""!! [[ZZYYXXvvwwxxyyvvwwxxyy>>??@@AA++,,--.. FFEEDDCC~~}}||{{SSTTUUVV$$%%&&''+,,--../99887766qqppoonn``aabbcc(())**++ ,,++**))ddccbbaammnnoopp55667788 WWVVUUTTzz{{||}}zz{{||}}BBCCDDEE//001122 + + BBAA@@??zzyyxxwwWWXXYYZZ(())**++/012345555443322mmllkkjjddeeffgg,,--..// !!""((''&&%%``__^^]]qqrrsstt99::;;<<SSRRQQPP~~~~FFGGHHII33445566>>==<<;;vvuuttss[[\\]]^^,,--..//66778899 + + 1100//..iihhggffhhiijjkk00112233##$$%%&&$$##""!!\\[[ZZYYuuvvwwxx==>>??@@ + + OONNMMLLOOPPQQRR778899::::998877rrqqppoo__``aabb55667788::;;<<== --,,++**eeddccbbllmmnnoo44556677''(())** XXWWVVUUyyzz{{||AABBCCDD KKJJIIHHSSTTUUVV;;<<==>>66554433nnmmllkkccddeeff99::;;<<>>??@@AA))((''&&aa``__^^ppqqrrss8899::;;++,,--.. TTSSRRQQ}}~~EEFFGGHH ! GGFFEEDD~~}}||WWXXYYZZ??@@AABB + +221100//jjiihhgggghhiijj==>>??@@BBCCDDEE%%$$##""]]\\[[ZZttuuvvww<<==>>??//556677!!""##$$PPOONNMMIIJJKKLL!""##$$% + + CCBBAA@@{{zzyyxx[[\\]]^^CCDDEEFF ..--,,++ffeeddcckkllmmnnAABBCCDDFFGGHHII!! YYXXWWVVxxyyzz{{@@AABBCC8899::;;%%&&''((LLKKJJIIMMNNOOPP !!%&&''(()??>>==<=>=>=<;<;<;<;:9:9:9:96565656543434343/0/0/0/0.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + + ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:96565656543434343/0/0/0//.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + + ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:96565656543434343////0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + + ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:965656565434343430/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:965656565434343430/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + ZYZYXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMIIIIIJIJHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:965656565434343430/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!   + + + + XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMIJIJIJIJHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:965656565434343430/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMIJIJIJIJHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:965656565434343210/0/0///,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMIJIJIJIJHGFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:98787876565656521212121///0/0/0,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMIJIJIJIJFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787876565656521212121/0/0/0/0,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMIJIJIJIIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787876565656521212121/0/0/0/0,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMIIIIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787876565656521212121/0/0/0/0,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"! + + + + XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787876565656521212121/0/0/0/0,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"! + + + + XWXWXWXWVUVUVUVUTSTSRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787876565656521212121/0/0////,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"! + + + + XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787876565656521212121//0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"! + + + + XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"! + + + + XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIIIFEFEFEFEDCDCDCDCBA@?@?@?>=>=>=>=<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"! + + + + XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKIIIJIJIJFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;8787878765656565212121210/0/////,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"! + + + + XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKIJIJIJIJFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"! + + + + XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKIJIJIJIJFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;878787876565656521212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKIJIJIJIJFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;878787876565656521212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKIJIJIJIJFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;878787876565656521212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKIJIJIIIIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;878787876565656521212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKIIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;878787876565656521212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;:9:9:9878787876565656521212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:9878787876565656521212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:9878787876565656521212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:9878787876565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        + + + + XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:9878787876565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        + + + + XWXWXWXWVUVUTSTSRQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:9878787876565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        + + + XWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:9878787876565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        XWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:9878787876565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        XWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEDCBABABA@?@?@?@?>=>=>=>=:9:9:9:9878787876543434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        XWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        XWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        XWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        XWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        XWXWXWXWTSTSTSTSRQRQRQRQPOPONMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:98787878743434343210/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=<;<;<;:9:9:9:987878787434343430//////0.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:98787878743434343/0/0/0/0.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:98787878743434343/0/0/0/0.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:98787878743434343/0/0/0/0.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:98787878743434343/0/0/0/0.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        XWXWVUVUTSTSTSTSRQRQRQRQNMNMNMNMJIJIIIIIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:98787878743434343/0/0/0/0.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + VUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:98787878743434343//////0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + QQRRSSTT$$%%&&''llkkjjiiuuvvwwxxLLKKJJII55667788,,++**))[[ZZYYXXJJKKLLMMwwvvuuttjjkkllmm + + WWVVUUTT__``aabb !!""BBAA@@??UUVVWWXX(())**++hhggffeeyyzz{{||HHGGFFEE99::;;<<((''&&%%WWVVUUTTNNOOPPQQssrrqqppnnooppqqSSRRQQPPcciijjkk##$$%%&&>>==<<;;YYZZ[[\\,,--..// + +ddccbbaa}}~~ DDCCBBAA==>>??@@$$##""!!SSRRQQPPRRSSTTUU oonnmmllrrssttuuOONNMMLLllmmnnoo''(())**::998877]]^^__``55667788 ``__^^]]!!""##$$@@??>>==AABBCCDD OOIIHHGGVVWWXXYY + + kkjjiihhvvwwxxyyKKJJIIHHppqqrrss++,,--..66554433aabbccdd99::;;<<\\[[ZZYY%%&&''((<<;;::99EEFFGGHHFFEEDDCCZZ[[\\]]ggffeeddzz{{||}}GGFFEEDDttuuvvww//001122221100//eeffgghh==>>??@@ + + XXWWVVUU))**++,,88776655IIJJKKLLBBAA@@??^^__``aaccbbaa``~~ !!CCBBAA@@xxyyzz{{33445566..--,,++iijjkkllAABBCCDD TTSSRRQQ--..//0044332211MMNNOOPP>>==<<;;~~}}||bbccddee__^^]]\\""##$$%%??>>==<<||}}778899::**))((''mmnnooppEEFFGGHHPPOONNMM1122334400//..--QQRRSSTT ::998877{{zzyyxxffgghhii [[ZZYYXX&&''(());;::9988;;<<==>>&&%%$$##~~}}qqrrssttIIOOPPQQLLKKJJII55667788,,++**))UUVVWWXX + + 6655//..wwvvuuttjjkkllmm + + WWVVUUTT**++,,--77665544??@@AABB""!! ||{{zzyyuuvvwwxxRRSSTTUUHHGGFFEE99::;;<<((''&&%%YYZZ[[\\--,,++**ssrrqqppnnooppqqSSRRQQPP..//001133221100CCDDEEFF~~}}||{{xxwwvvuuyyzz{{||VVWWXXYY DDCCBBAA==>>??@@$$##""!!]]^^__``))((''&&oonnmmllrrssttuuOONNMMLL22334455//..--,,GGHHIIJJzzyyxxwwttssrrqq}}~~ZZ[[\\]]!!""##$$@@??>>==AABBCCDD ~~}}aabbccdd%%$$##""kkjjiihhvvwwxxyyKKJJIIHH66778899++**))((KKLLMMNNvvuuttssppoonnmm^^__``aa%%&&''((<<;;::99EEFFGGHH||{{zzyyeeffgghh + + !! ggffeeddzz{{||}}GGFFEEDD::;;<<==''&&%%$$}}||{{zzOOPPQQRRrrqqppoollkkjjiibbcciijj))**++,,88776655IIJJKKLLxxwwvvuuiijjkkll ccbbaa``~~ !!CCBBAA@@>>??@@AA##""!! yyxxwwvvSSTTUUVV nnmmllkkhhggffeekkllmmnn--..//0044332211MMNNOOPPttssrrqqmmnnoopp__^^]]\\""##$$%%??>>==<>??@@$$##""!!]]^^__``ddccbbaa}}~~&&''(())OONNMMLL22334455//..--,,RRSSTTUU ``__^^]]gghhiijj + +ZZYYXXWWTTSSRRQQAABBCCDD ~~}}aabbccdd``__^^]]**++,,-- + +KKJJIIHH66778899++**))((VVWWXXYY + + \\[[ZZYYkkllmmnn VVUUTTSSPPOONNMMEEFFGGHH||{{zzyyeeffgghh\\[[ZZYY..//5566 GGFFEEDD::;;<<==''&&%%$$ZZ[[\\]]XXWWVVUU~}}||{{ooppqqrrRRQQPPOOLLKKJJIIIIJJKKLLxxwwvvuuiijjkkll + + XXWWVVUU778899::CCBBAA@@>>??@@AA##""!! ^^__``aaTTSSRRQQzzyyxxwwssttuuvvNNMMLLKKHHGGFFEEMMNNOOPPttssrrqqmmnnoopp TTSSRRQQ;;<<==>>??>>==<>==UUVVWWXX + + llkkjjiiuuvvwwxxLLKKJJIICCDDEEFF !77665544JJKKLLMMwwvvuuttjjkkllmm + + CCBBAA@@nnmmllkk !!""BBAA@@??<<;;::99YYZZ[[\\hhggffeeyyzz{{||HHGGFFEEGGHHIIOO!""##$$%33221100NNOOPPQQssrrqqppnnooppqq??>>==<>==<<;;88776655}}||{{]]^^__``ddccbbaa}}~~ DDCCBBAAPPQQRRSS%&&''(()//..--,,RRSSTTUU oonnmmllrrssttuu;;::9988dccbbaa`''(())**::99887744332211zzyyxxwwaabbccdd``__^^]]!!""##$$@@??>>==TTUUVVWW)**++,,-++**))((VVWWXXYY + + kkjjiihhvvwwxxyy776655//`__^^]]\++,,--..6655443300//..--vvuuttsseeffgghh\\[[ZZYY%%&&''((<<;;::99XXYYZZ[[-..//012''&&%%$$ZZ[[\\]]ggffeeddzz{{||}}..--,,++\[[ZZYYX//001122221100//,,++**))rrqqppooiijjkkll + + XXWWVVUU))**++,,88776655\\]]^^__34556677##""!! ^^__``aaccbbaa``~~ !!**))((''XWWVVUUT33445566..--,,++((''&&%%nnmmllkkmmnnoopp TTSSRRQQ--..//0044332211``aabbcc8899::;;~~}}||bbccddee__^^]]\\""##$$%%&&%%$$##TSSRRQQP778899::**))((''$$##""!!jjiiccbbqqrrssttPPOONNMM1122334400//..--iijjkkll<<==>>??{{zzyyxxffgghhii [[ZZYYXX&&''(())""!! POONMLKJ;;<<==>>&&%%$$## aa``__^^~}}||uuvvwwxxLLKKJJII55667788,,++**))mmnnoopp@@AABBCCwwvvuuttjjkkllmm + + WWVVUUTT**++,,--IIHHGGFF??@@AABB""!! ]]\\[[ZZ{{zzyyxxyyzz{{||HHGGFFEE99::;;<<((''&&%%qqrrssttDDEEFFGGssrrqqppnnooppqqSSRRQQPP..//0011EEDDCCBBCCDDEEFFYYXXWWVVwwvvuutt}}~~ DDCCBBAA==>>??@@$$##""!!uuvvwwxxHHIIJKLM oonnmmllrrssttuuOONNMMLL22334455AA@@??>>GGHHIIJJUUTTSSRRssrrqqpp!!""##$$@@??>>==AABBCCDD ~~}}yyzz{{||NOOPPQQR + + kkjjiihhvvwwxxyyKKJJIIHH66778899 + +==<<;;::KKLLMMNN QQPPOOIIoonnmmll%%&&''((<<;;::99EEFFGGHH||{{zzyy}}RSSTTUUVggffeeddzz{{||}}GGFFEEDD::;;<<== 99887766OOPPQQRR + + HHGGFFEEkkjjiihg))**++,,88776655IIJJKKLLxxwwvvuuVWWXXYYZccbbaa``~~ !!CCBBAA@@>>??@@AA5543210/SSTTUUVV + + DDCCBBAAfedccbba--..//0044332211MMNNOOPPttssrrqqZ[[\\]]^__^^]]\\""##$$%%??>>==<>==a``__^^]1122334400//..--QQRRSSTT ppoonnmm^__``aab [[ZZYYXX&&''(());;::9988FFGGHHII +**))(('[[\\]]^^<<;;::99]\\[[ZZY55667788,,++**))UUVVWWXX + + llkkjjiibccdefgh + + WWVVUUTT**++,,--77665544JJKKLLMM'&&%%$$#__``aabb88776655YXXWWVVU99::;;<<((''&&%%YYZZ[[\\hhggffeeiijjkkllSSRRQQPP..//001133221100NNOOPPQQ#""!! ~~}}||{{ccddeeff//..--,,UTTSSRRQ==>>??@@$$##""!!]]^^__``ddccbbaammnnooppOONNMMLL22334455//..--,,RRSSTTUU zzyyxxwwgghhiijj + + ++**))((QPPOONMLAABBCCDD ~~}}aabbccdd``__^^]]qqrrssttKKJJIIHH66778899++**))((VVWWXXYY!!""##$$vvuuttsskkllmmnn !!""##$$''&&%%$$KJIIHHGGEEFFGGHH||{{zzyyeeffgghh\\[[ZZYYuuvvwwxxGGFFEEDD::;;<<==''&&%%$$ZZ[[\\]]%%&&''((rrqqppooooppqqrr%%&&''((##""!! FFEEDDCCIIJJKKLLxxwwvvuuiijjkkll + + XXWWVVUUyyzz{{|| !!CCBBAA@@>>??@@AA##""!! ^^__``aa))**++,, nnmmllkkssttuuvv))**++,,BBAA@@??MMNNOOPPttssrrqqmmnnoopp TTSSRRQQ}}~""##$$%%??>>==<>==<<;;QQRRSSTT ppoonnmmqqrrssttPPOONNMM&&''(());;::9988FFGGHHII{{zzyyxxffgghhii66778899ffeeddcc{{||}}~~CCDDEEFF11223344::998877UUVVWWXX + + llkkjjiiuuvvwwxxLLKKJJII}}**++,,--77665544JJKKLLMMwwvvuuttjjkkllmm::;;<<==bbaa``__ !!""GGHHIIJJ55667788 66554321YYZZ[[\\hhggffeeyyzz{{||HHGGFFEE||{{zzyy..//001133221100NNOOPPQQssrrqqppnnooppqq>>??@@AA^^]]\\[[##$$%%&&KKLLMMNN99::;;<< + + + +0//..--,]]^^__``ddccbbaa}}~~ DDCCBBAAxxwwvvuu22334455//..--,,RRSSTTUU oonnmmllrrssttuuBBCCDDEE + +ZZYYXXWW''(())**OOPPQQRR==>>??@@ ,++**))(~~}}aabbccdd``__^^]]!!""##$$@@??>>==ttssrrqq66778899++**))((VVWWXXYY + + kkjjiihhvvwwxxyyFFGGHHII VVUUTTSS++,,--..SSTTUUVVAABBCCDD(''&&%%$||{{zzyyeeffgghh\\[[ZZYY%%&&''((<<;;::99ppoonnmm::;;<<==''&&%%$$ZZ[[\\]]ggffeeddzz{{||}}OOPPQQRRRRQQPPOO//001122WWXXYYZZEEFFGGHH$##""!! xxwwvvuuiijjkkll + + XXWWVVUU))**++,,88776655llkkjjii>>??@@AA##""!! ^^__``aaccbbaa``~~SSTTUUVVNNMMLLKK33445566[[\\]]^^IIJJKKLL ttssrrqqmmnnoopp TTSSRRQQ--..//0044332211ccbbaa``BBCCDDEE~~}}||bbccddee__^^]]\\WWXXYYZZJJIIHHGG778899::__``aabbMMNNOOPP !!""##ppoonnmmqqrrssttPPOONNMM1122334400//..--__^^]]\\FFGGHHII{{zzyyxxffgghhii [[ZZYYXX[[\\]]^^FFEEDDCC;;<<==>>ccddeeffgghhiijj + +ZZYYXXWW55667788 EEDDCCBB<<==>>??%%$$##""\\]]^^__VVUUTTSS||{{zzyyqqrrssttPPOONNMM1122334400//..--iijjkkll<<==>>??{{zzyyxxffgghhii DDCCBBAA[[ZZYYXXkkllmmnn VVUUTTSS99::;;<<AA@@??>>@@AABBCC!! ~~``aabbccRRQQPPOOxxwwvvuuuuvvwwxxLLKKJJII55667788,,++**))mmnnoopp@@AABBCCwwvvuuttjjkkllmm + + @@??>>==WWVVUUTTooppqqrrRRQQPPOO==>>??@@==<<;;::DDEEFFGG}}||{{zzddeeffggIIHHGGFFttssrrqqyyzz{{||HHGGFFEE99::;;<<((''&&%%qqrrssttDDEEFFGGssrrqqppnnooppqq<<;;::99SSRRQQPPssttuuvvNNMMLLKKAABBCCDD99887766HHIIJJKKyyxxwwvvhhiijjkk + + EEDDCCBBppoonnmm}}~~ DDCCBBAA==>>??@@$$##""!!uuvvwwxxHHIIJKLM oonnmmllrrssttuu88776655OONNMMLLwwxxyyzzJJIIHHGGEEFFGGHH !!""#55443322LLMMNNOOuuttssrrllmmnnoo AA@@??>>llkkjjii!!""##$$@@??>>==AABBCCDD ~~}}yyzz{{||NOOPPQQR + + kkjjiihhvvwwxxyy//..--,,KKJJIIHH{{||}}~~FFEEDDCCIIOOPPQQ#$$%%&&'1100//..PPQQRRSSqqppoonnppqqrrss==<<;;::hgfedccb%%&&''((<<;;::99EEFFGGHH||{{zzyy}}RSSTTUUVggffeeddzz{{||}}++**))((GGFFEEDD !!""BBAA@@??RRSSTTUU'(())**+--,,++**TTUUVVWW + +mmllkkjjttuuvvww99887766baa``__^))**++,,88776655IIJJKKLLxxwwvvuuVWWXXYYZccbbaa``~~ !!''&&%%$$CCBBAA@@##$$%%&&>>==<<;;VVWWXXYY+,,--../))((''&&XXYYZZ[[ iihhggffxxyyzz{{55//..--^]]\\[[Z--..//0044332211MMNNOOPPttssrrqqZ[[\\]]^__^^]]\\""##$$%%##""!! ??>>==<<''(())**::998877ZZ[[\\]]/0123455%%$$##""\\]]^^__eeddccbb||}}~~,,++**))ZYYXXWWV1122334400//..--QQRRSSTT ppoonnmm^__``aab [[ZZYYXX&&''(());;::9988++,,--..66554433^^__``aa66778899!! ~~``aabbccaa``__^^ !!""##((''&&%%VUUTTSSR55667788,,++**))UUVVWWXX + + llkkjjiibccdefgh + + WWVVUUTT**++,,--77665544//001122221100//bbcciijj::;;<<==}}||{{zzddeeffgg]]\\[[ZZ$$%%&&''$$##""!!RQQPPOON99::;;<<((''&&%%YYZZ[[\\hhggffeeiijjkkllSSRRQQPP..//00113322110033445566..--,,++kkllmmnn>>??@@AAyyxxwwvvhhiijjkk + + YYXXWWVV(())**++ MLKJIIHH==>>??@@$$##""!!]]^^__``ddccbbaammnnooppOONNMMLL22334455 //..--,,778899::**))((''ooppqqrrBBCCDDEEuuttssrrllmmnnoo UUTTSSRR,,--..//GGFFEEDDAABBCCDD ~~}}aabbccdd``__^^]]qqrrssttKKJJIIHH66778899 + + + +++**))((;;<<==>>&&%%$$##ssttuuvvFFGGHHIIqqppoonnppqqrrssQQPPOONN00112233CCBBAA@@EEFFGGHH||{{zzyyeeffgghh\\[[ZZYYuuvvwwxxGGFFEEDD::;;<<== ''&&%%$$??@@AABB""!! wwxxyyzzJKLMNOOP + +mmllkkjjttuuvvwwMMLLKKJJ44556677 ??>>==<>??@@AA##""!! CCDDEEFF~~}}||{{{{||}}PQQRRSST iihhggffxxyyzz{{IIHHGGFF8899::;; + + ;;::9988MMNNOOPPttssrrqqmmnnoopp TTSSRRQQ}}~""##$$%%??>>==<>??77665543QQRRSSTT ppoonnmmqqrrssttPPOONNMM&&''(());;::9988FFGGHHIIKKLLMMNNvvuuttssXYYZZ[[\aa``__^^ !!""##AA@@??>>@@AABBCC 210//..-UUVVWWXX + + llkkjjiiuuvvwwxxLLKKJJII}}**++,,--77665544JJKKLLMM !!""##OOPPQQRRrrqqppoo\]]^^__`]]\\[[ZZ$$%%&&''==<<;;::DDEEFFGG + + -,,++**)YYZZ[[\\hhggffeeyyzz{{||HHGGFFEE||{{zzyy..//001133221100NNOOPPQQ$$%%&&''SSTTUUVV nnmmllkk`aabbccd + + YYXXWWVV(())**++99887766HHIIJJKK)((''&&%]]^^__``ddccbbaa}}~~ DDCCBBAAxxwwvvuu22334455//..--,,RRSSTTUU(())**++ WWXXYYZZ + + jjiihhggefghiijj UUTTSSRR,,--..//55443322LLMMNNOO%$$##""!~~}}aabbccdd``__^^]]!!""##$$@@??>>==ttssrrqq66778899++**))((VVWWXXYY,,--..// + + [[\\]]^^ffeeddcckkllmmnnQQPPOONN001122331100//..PPQQRRSS! ||{{zzyyeeffgghh\\[[ZZYY%%&&''((<<;;::99ppoonnmm::;;<<==''&&%%$$ZZ[[\\]]55667788 + + __``aabbbbaa``__ooppqqrrMMLLKKJJ44556677--,,++**TTUUVVWW !!""xxwwvvuuiijjkkll + + XXWWVVUU))**++,,88776655llkkjjii>>??@@AA##""!! ^^__``aa99::;;<<~~}}||{{ccddeeff^^]]\\[[ssttuuvvIIHHGGFF8899::;;))((''&&XXYYZZ[[##$$%%&&ttssrrqqmmnnoopp TTSSRRQQ--..//0044332211ccbbaa``BBCCDDEE~~}}||bbccddee==>>??@@zzyyxxwwgghhiijj + +ZZYYXXWWwwxxyyzzEEDDCCBB<<==>>??%%$$##""\\]]^^__''(())**ppoonnmmqqrrssttPPOONNMM1122334400//..--__^^]]\\FFGGHHII{{zzyyxxffgghhiiAABBCCDDvvuuttsskkllmmnn VVUUTTSS{{||}}~ !!""##AA@@??>>@@AABBCC!! ~~``aabbcc++,,--.. llkkjjiiuuvvwwxxLLKKJJII55667788,,++**))[[ZZYYXXJJKKLLMMwwvvuuttjjkkllmmEEFFGGHHrrqqppooooppqqrrRRQQPPOO$$%%&&''==<<;;::DDEEFFGG}}||{{zzddeeffgg//556677 + + hhggffeeyyzz{{||HHGGFFEE99::;;<<((''&&%%WWVVUUTTNNOOPPQQssrrqqppnnooppqqIIOOPPQQ !!nnmmllkkssttuuvvNNMMLLKK(())**++99887766HHIIJJKKyyxxwwvvhhiijjkk8899::;;ddccbbaa}}~~ DDCCBBAA==>>??@@$$##""!!SSRRQQPPRRSSTTUU oonnmmllrrssttuuRRSSTTUU""##$$%%jjiihhggwwxxyyzzJJIIHHGG}}||{{,,--..//55443322LLMMNNOOuuttssrrllmmnnoo<<==>>??``__^^]]!!""##$$@@??>>==AABBCCDD OOIIHHGGVVWWXXYY + + kkjjiihhvvwwxxyyVVWWXXYY&&''(())ffeeddcc{{||}}~~FFEEDDCCzzyyxxww001122331100//..PPQQRRSSqqppoonnppqqrrss@@AABBCC\\[[ZZYY%%&&''((<<;;::99EEFFGGHHFFEEDDCCZZ[[\\]]ggffeeddzz{{||}}ZZ[[\\]]**++,,--bbaa``__ !!""BBAA@@??vvuuttss44556677--,,++**TTUUVVWW + +mmllkkjjttuuvvwwDDEEFFGG + + XXWWVVUU))**++,,88776655IIJJKKLLBBAA@@??^^__``aaccbbaa``~~^^__``aa..//0011^^]]\\[[##$$%%&&>>==<<;;rrqqppoo8899::;;))((''&&XXYYZZ[[ iihhggffxxyyzz{{HHIIOOPP TTSSRRQQ--..//0044332211MMNNOOPP>>==<<;;~~}}||bbccddee__^^]]\\bbcciijj22334455ZZYYXXWW''(())**::998877nnmmllkk<<==>>??%%$$##""\\]]^^__eeddccbb||}}~~QQRRSSTTPPOONNMM1122334400//..--QQRRSSTT ::998877{{zzyyxxffgghhii [[ZZYYXXkkllmmnn66778899VVUUTTSS++,,--..66554433jjiiccbb@@AABBCC!! ~~``aabbccaa``__^^UUVVWWXXLLKKJJII55667788,,++**))UUVVWWXX + + 6655//..wwvvuuttjjkkllmm + + WWVVUUTTooppqqrr::;;<<==RRQQPPOO//001122221100//aa``__^^DDEEFFGG}}||{{zzddeeffgg]]\\[[ZZYYZZ[[\\HHGGFFEE99::;;<<((''&&%%YYZZ[[\\--,,++**ssrrqqppnnooppqqSSRRQQPPssttuuvv>>??@@AANNMMLLKK33445566..--,,++]]\\[[ZZHHIIJJKKyyxxwwvvhhiijjkk + + YYXXWWVV]]^^__`` DDCCBBAA==>>??@@$$##""!!]]^^__``))((''&&oonnmmllrrssttuuOONNMMLLwwxxyyzzBBCCDDEEJJIIHHGG778899::**))((''YYXXWWVVLLMMNNOOuuttssrrllmmnnoo UUTTSSRRaabbccii!!""##$$@@??>>==AABBCCDD ~~}}aabbccdd%%$$##""kkjjiihhvvwwxxyyKKJJIIHH{{||}}FFGGHHIIFFEEDDCC;;<<==>>&&%%$$##UUTTSSRRPPQQRRSSqqppoonnppqqrrssQQPPOONNjjkkllmm%%&&''((<<;;::99EEFFGGHH||{{zzyyeeffgghh + + !! ggffeeddzz{{||}}GGFFEEDDJJKKLLMMBBAA@@????@@AABB""!! QQPPOOIITTUUVVWW + +mmllkkjjttuuvvwwMMLLKKJJnnooppqq))**++,,88776655IIJJKKLLxxwwvvuuiijjkkll ccbbaa``~~ !!CCBBAA@@NNOOPPQQ>>==<<;;CCDDEEFFHHGGFFEEXXYYZZ[[ iihhggffxxyyzz{{IIHHGGFFrrssttuu--..//0044332211MMNNOOPPttssrrqqmmnnoopp__^^]]\\""##$$%%??>>==<>==~~``aabbccaa``__^^ !!""##AA@@??>>zz{{||}}55667788,,++**))UUVVWWXX + + llkkjjiiuuvvwwxx !! + + WWVVUUTT**++,,--77665544ZZ[[\\]]221100//OOPPQQRR<<;;::99}}||{{zzddeeffgg]]\\[[ZZ$$%%&&''==<<;;::99::;;<<((''&&%%YYZZ[[\\hhggffeeyyzz{{||""##$$%%SSRRQQPP..//001133221100^^__``aa..--,,++SSTTUUVV 88776655yyxxwwvvhhiijjkk + + YYXXWWVV(())**++99887766==>>??@@$$##""!!]]^^__``ddccbbaa}}~~&&''(())OONNMMLL22334455//..--,,bbccddee**))((''WWXXYYZZ + + //..--,,uuttssrrllmmnnoo UUTTSSRR,,--..//55443322AABBCCDD ~~}}aabbccdd``__^^]]**++,,-- + +KKJJIIHH66778899++**))((}}||{{ffgghhii&&%%$$##[[\\]]^^++**))((qqppoonnppqqrrssQQPPOONN001122331100//..EEFFGGHH||{{zzyyeeffgghh\\[[ZZYY..//5566 GGFFEEDD::;;<<==''&&%%$$zzyyxxwwjjkkllmm""!! __``aabb''&&%%$$mmllkkjjttuuvvwwMMLLKKJJ44556677--,,++**IIJJKKLLxxwwvvuuiijjkkll + + XXWWVVUU778899::CCBBAA@@>>??@@AA##""!! vvuuttssnnooppqq~~}}||{{ccddeeff + +##""!! iihhggffxxyyzz{{IIHHGGFF8899::;;))((''&&}}||MMNNOOPPttssrrqqmmnnoopp TTSSRRQQ;;<<==>>??>>==<>??%%$$##""{{zzyyxxQQRRSSTT ppoonnmmqqrrssttPPOONNMM??@@AABB;;::9988FFGGHHIInnmmllkk{{zzyyxxvvwwxxyyvvuuttsskkllmmnnaa``__^^ !!""##AA@@??>>@@AABBCC!! wwvvuuttUUVVWWXX + + llkkjjiiuuvvwwxxLLKKJJIICCDDEEFF !77665544JJKKLLMMjjiiccbbwwvvuuttzz{{||}}rrqqppooooppqqrr]]\\[[ZZ$$%%&&''==<<;;::DDEEFFGGssrrqqppYYZZ[[\\hhggffeeyyzz{{||HHGGFFEEGGHHIIOO!""##$$%33221100NNOOPPQQaa``__^^ssrrqqpp~~ nnmmllkkssttuuvv YYXXWWVV(())**++99887766HHIIJJKKoonnmmll]]^^__``ddccbbaa}}~~ DDCCBBAAPPQQRRSS%&&''(()//..--,,RRSSTTUU ]]\\[[ZZoonnmmll + + jjiihhggwwxxyyzz !!""## + + UUTTSSRR,,--..//55443322LLMMNNOOkkjjiiccaabbccdd``__^^]]!!""##$$@@??>>==TTUUVVWW)**++,,-++**))((VVWWXXYY + + YYXXWWVVkkjjiihhffeeddcc{{||}}~~$$%%&&''QQPPOONN001122331100//..PPQQRRSSbbaa``__eeffgghh\\[[ZZYY%%&&''((<<;;::99XXYYZZ[[-..//012''&&%%$$ZZ[[\\]]UUTTSSRRggffeeddbbaa``__(())**++MMLLKKJJ44556677--,,++**TTUUVVWW + +^^]]\\[[iijjkkll + + XXWWVVUU))**++,,88776655\\]]^^__34556677##""!! ^^__``aaQQPPOOIIccbbaa``^^]]\\[[,,--..// + + IIHHGGFF8899::;;))((''&&XXYYZZ[[ ZZYYXXWW~}}mmnnoopp TTSSRRQQ--..//0044332211``aabbcc8899::;;~~}}||bbccddeeHHGGFFEE__^^]]\\fpvp˂rnvppZHAbnXv`p˂r`vXnے`JXQtArdbHAZdrtAHAbے~HfJ`ےdQZ|˂pZZdQbt˂rXQltb~f`dQbtHAZp˂rtAJlpfے`nXv`XQJ`ےfH~ے`Jf~HXQJ`ےvpfr˂p|ZdQbp˂rJlt`JXQrpvnbHAZpdrtAJHAbےlJtAJ`ےdQZ|vXnl|ZdQrXQJtbdQJXQrf~HbHAZf`vXXQr˂fpvbHAZH~fZHAbtlJXQJ`ےbdQZ|˂pZXv`f˂rXQltb`JXQrrd|bHAZpdrtAJvpfHbtl`ےbZ|d˂pZHAfpvp˂rH~fpZHAbnXv`p˂r`vXnے`JXQfpvbHAZdrtAHAXQr~HfJ`ےdQZ|˂pZZdQbt˂rXQltb~f`JtArdHAZp˂rtAJlbے`nXv`XQJ`ے`vXnJAdf~HXQJ`ےvpfr˂pnXv`p˂rJlt˂pZHApvnbHAZpdtAJlHAbےlJtAJ`ےdQZ|vXn|ZdQrXQJtbdQJXQrf~HbHAZvpf|ZdQbfpvbHAZH~fZHAbf~HXQJ`ےbdQZ|bے`Xv`f˂rXQtbn`JXQrrd|bHAZpdrtAJvpfےbtl`ےbZ|d˂pZHAfpvp˂rH~ftlJnXv`p˂r`vXnے`JXQfpvbHAZdrtAJXQr~HfJ`ےvpf˂pZZdQbt˂rXQltb`JXQHAJtAdQbHAZp˂rtAJlbے`nXv`XQJ`ے`vXntArdf~HXQJ`ےvpfr˂pnXv`p˂rJlt˂pZHApvnbHAZpHf`HAbےlJtAJ`ےdQZ|bے`tlJrXQJtbdQJXQrf~HbHAZf`|ZdQbfpvbHAZH~fZHAbf~HXQJ`ےbdQZ|b˂Xv`f˂rXQvXn`JXQrrd|bHAZpdrtAJJXQrtArd`ےbZ|d˂pZHAfpvp˂rvXntlJnXv`p˂r`vXnے`JXQfpvbHAZdtAJpZHAb~HfJ`ےvpfH˂pZZdQbt˂rXQltb˂pZHA|ZdQbHAZp˂rtAJlbے`nXv`XQJ`ےvpfHtArdf~HXQJ`ےvpfr˂pnXv`p˂rltbے`JpvnbHAZp~f`HAbےlJtAJ`ےdQZ|bے`tlJrXQJtbdQJXQrf~HbHAZ~f`|ZdQbfpvJltH~fZHAbf~HXQJ`ےnvpXQr˂Xv`f˂rXQvXn`JXQrrd|bHAZpdrtAJJXQrtArdt`ےbZ|d˂pZHAfpvp˂rvXntlJnXv`bdQZ|`vXnے`JXQfpvbHAZ`vXnpZHAb~HfJ`ےvpfH˂pZZdQbt˂rXQltbے`JlJfHAZp˂rtAJlbے`nXv`XQJ`ےvp`vtArdf~HdrtAvpfr˂pnXv`p˂rvpfے`ppvnbHAZp~f`HAbےlJfJ`ےdQZ|XQr˂pvnrXQJtbdQJXQrf~HbHAZXnv|ZdQbfpvJltH~fZHAbf~HXQJ`ےH~fZHAbXv`f˂rXQvXn`JXQrpvnbHAZpdrtAJpZHAbvf~H`ےbZ|d˂pZHAfpvp˂rpfH~tlJnXv`bdQZ|`vXnے`JXQfpvbHAZ`pfHے`JXQ~HfJ`ےvpfH˂pZXv`f˂rXQltbے`JfpvHAZp˂tAJlbے`nXv`XQJ`ےf`vtArdf~HdrtAvpfr˂pnXv`p˂r~f`r˂ppvnbHAZp~f`HAbے~HfJ`ےdQZ|XQr˂nXv`rXQJtbnJXQrf~HbHAZXnv|ZdQbfpvJltH~fZHAےf~HXQJ`ےvXn`JXQrXv`f˂rXQvXn`JXQrpvnbHAZpdrtAJp`JXQf~H`ےbvpfH˂pZHAfpvp˂rpfHXtlJnXv`bdQZ|`vXn`JXQrfpvbHAZvpfHbtl~HfJ`ےvpfH˂pZXv`f˂rXQltbr˂pfpvHAZp˂f`vbے`nXv`XQJ`ےnvptArdf~HdrtAvpfbtlnXv`p˂r~f`JA|ZpvnbHAZp~f`HAbے~HfJ`ےdQZ|ZHAbnXvfrXQJXnvJXQrf~HJltfH~|ZdQbfpvJltH~fJtAdf~HXQJ`ےvXH~dQbtXv`f˂rXQvXn`JXQrpvnbHAZpdtAJlے`JXQ~Hfp`ےbpfH~˂pZHAfpvdrtAJf`vXtlJnXv`bdQZ|`vXn|ZdQbfpvbHAZf`vlJtAr~HfJ`ےJvpfH˂pZXv`f˂rXQtbnr˂pvnXHAZp˂f`vbے`nXv`ltbnvptArdf~HdrtAvpftlJnXv`p˂rXnvd|ZQpvnltb~f`HAbے~HfJ`ےvpfZHAXQrv`frXQJXnvJXQrf~HdQZ|fH~|ZdQbfpvJltH~ftArdf~HXQJ`ےpfH~blJtXv`fdQZ|vXn`JXQrpvnbHAZpHf`˂pZ~Hfp`ےbpfH~˂pZHAfpvdrtAJvpftlJnXv`bdQZ|`vXn|ZdQbfpvbHAZf`vArd|~HfdrtAJvpfH˂pZXv`f˂rXQvXnHAbےvnXHAZp˂f`vbے`nXv`ltbے`JXQtArdfHfdrtAvpftlJnXv`p˂rXnZdQbtpvnltb~f`HAbے~HfJ`ےvpfH`JXQrv`f~rXQJXnvJXQrf~HdQtAJlrZHA|ZdQbpvnJltH~ftArdf~HXQJ`ےf`vXlJtXv`fdQZ|vXn`JXQrpvnbHAZp~f`˂pZfpv`ےbpfH~˂pZHAfpvtbdQbے`tlJrXQJ`bdQZ|`vXn|ZdQbfpvJltnvpArd|~HfdrtAJvpfH˂pZXv`f˂rXQvXnHAbnXv`HAZp˂f`vbے`nXv`Z|dJXQrtArdےHAZdrtAvpftlJnXv`bdQZ|fH~ZdQbpvnltb~f`HAے`~HfJ`ےvpfH˂pZHAf~HrXQJXnvJXQrf~HrtAJlpZHA|ZdQbp˂rJltH~ftArdf~HdrtAf`vXJtArdXv`fdQZ|vXnJXQrbpvnbHAZp~f`bے`fpv`ےbpfH~˂pZHAfpvtbdQbے`tlJXQJ`ےbdQZ|`vXn|ZdQbfpvJltnvp|ZdQ~HfdrtAJvpfHtlJXv`f˂rXQvXnJXQrnXv`HAZp˂f`vbے`nXv`Z|lJXQrtArdbHAZdrtAvpftlJnXv`bdQZ|`vXnbtlpvnltb~f`tAd|~HfJ`ےvpfH˂pZHAf~fvrXQJXnvJXQrf~HtbdQZZAbے|ZdQbp˂rJltH~ftArdf~HdrtAvpfJtArdXv`fdQZ|vXnZdQbtpvnbHAZp~f`bے`nXv`ےJlpfH~˂pZHAfpv|dr`JXQrtlJXQJ`ےbdQZ|`vXn|ZdQbfpvJltH~f|ZdQ~HfdrtAJvpfHlJtAXv`f˂rXQvXnpZHAb`f~tbdQf`vbے`nXv`tAJl璀˂pZtArdbHAZdrtAvpftlJnXv`bdQZ|`vXnbtJApvnltb~f`rd|~HfJ`ےvpfHے`JHfpvZ|dXnvJXQrf~HtbdQZHAbے|ZdQbp˂rJltے`JXQtArdf~HdrtAvpfrd|Xv`fdQZ|vXnZdQbtpvnbHAZp~f`XQr˂nXvrtAJlpfH~˂pZHAfpv|dt`JXQrtlJXQJ`ےbdQZ|r˂p|ZdQbfpvJltHXnZdQbt琕HfpdrtAJvpfHlJtAXv`f˂rXQvXnp`JXQ`f~tbdQf`vbے`nXv`bdQZ|˂pZAtArdbHAZdrtAZHAbtlJnXv`bdQZ|vpfHlJtAvnrltb~f`rd|~HfJ`ےJvpfHrbtHfvnXZ|dXnvJXQrp˂rdrtAb`JX|ZdQbp˂rJltے`JXQtArdf~HdrtA~f`rd|XQJ`ےdQZ|vXnZdQbtpvnltb~f`l|ZdQv`frtAJlpfH~˂pZHAXQJ`ےJltQr˂ptlJXQJ`ےbdQZ|r˂p|ZdQbfpvJltvXnZdQbt琙HAZpdrtAJvpfHlJtAXv`fdQZ|vXnbtl~HfptbdQf`vے`JbHAZbdQZ|ZHAbtArdbHAZdrtAZHAbtlJnXv`bdQZ|vpfHlJAr˂rXQltb~f`rd|~HfdrtAJvpfHJtArdvnXZ|dXnvXQrbtp˂rdrtAے`JX|ZdQbp˂rJltے`JXQtArdfHfdrtA~v|ZdQbJ`ےdQZ|vXnZdQbtpvnltb~f`|lJv`frtAJlpfH~lJtAXQJ`ےdQZ|Qr˂ptlJXQJ`ےbdQZ|r˂p|ZdQbpvnJltpfے`tlJbHAZpdrtAJvpfHlJtAXv`fdQZ|vXntArd~HfptbdQf`vd|ZbHAZdrtAJZHAbfpvbHAZdrtAZHAbtlJrXQJ`bdQZ|JXQHAbtArd˂rXQltb~f`rd|~HfdrtAJvpfH|ZdQbvnv`Z|dXnvdQbtp˂rltbJXQrnXv`p˂rJltے`JXQtArdےHAZdrtAے`J|ZdQbJ`ےdQZ|vXnZdQbtpvnltb~f`tlJf~HrtAJlpfH~lJtArXQJ`ےdQZ|˂pZHAf~HXQJ`ےbdQZ|r˂p|ZdQbp˂rJltXQr˂tlJbHAZpdrtAJvpfےlJtAXv`fdQZ|vXntArdfpvtbdQf`vd|ZbHAZdrtAJbے`fpvbHAZdrtAZHAbtlJXQJ`ےbdQZ|pZHAbtArZd˂rXQltb`JXQrrd|~HfdrtAJvpfH|ZdQtAnXv`Z|dXnvdQbtlJtArp˂rl|dJXQrnXv`p˂rJltے`JXQtArdbHAZdrtAے`JQbtlJ`ےdQZ|˂pZZdQbtpvnltb~f`rd|ffpvrtAJlpfH~lJtArd|ZXQJ`ےrtAJl˂pZHAf~HXQJ`ےbdQZ|r˂p|ZdQbp˂rJltXQrJtArdbHAZpdrtAJHAbےlJtAXv`fdQZ|vXnZdQbtnrXQtbdQf`vd|ZdQbt璐bHAZtbdQbJQfpvbHAZdtAJZHAbtlJXQJ`ےbdQZ|ے`JXQ|Zd˂rXQltb`JXQrrd|~HfdrtAJvpfHlJtAJ`ےZ|dXnvdQbtlJtArp˂rZ|`vr˂pnXv`p˂rltbے`JXQtArdbHAZdrtAr˂pQbtlJ`ےdQZ|˂pZZdQbtpvnltb~f`rd|HAZp˂rtAJlpfH~lJtArd|ZXQJ`ےXnvZHAbf~HXQJ`ےnvpr˂p|ZdQbp˂rJltZHAbJtArdbHAZpdrtAJHAbےlJtAXv`fdQZ|vXnZdQbtrXQJtbdQf`vd|ZdQbt璐bHAZpfH~`JXQfpvbHAZfHfZHAbtlJXQJ`ےbdQZ|ے`JXQZQbt˂rXQltb`JXQrrd|HfpdrtAJvpfHd|Z`ےbZ|dXnvdQbtlJtArp˂rf`pr˂pnXv`p˂r`vXnے`JXQtArdbHAZdrtAr˂plJfJ`ےdQZ|˂pZZdQbtvnrltb~f`dQbtHAZp˂rtAJlpfH~lJtArd|ZXQJ`ےfH~ZHAbf~HXQJ`ےvpfr˂p|ZdQbp˂rJlt`JXQrpvnbHAZpdrtAJHAbےlJtAXQJ`ےdQZ|vXnlJtArrXQJtbdQf`vd|ZdQbt璐bHAZf`vX`JQrfpvbHAZH~fZHAbtlJXQJ`ےbdQZ|˂pZXv`f˂rXQltb`JXQrrd|HAZpdrtAJvpfHd|Z`ےbZ|dXnvdQbtlJtArd|ZHAZp˂rtAJlpfH~tArdXQJ`ے|drnvpbtlnXvtbdQZf`vXے`JXQvnXJltH~ftArdf~HXQJ`ےvpfr˂pnXv`p˂rnvp`JXQrpvnbHAZpHf`ZHAbH~ㅐfdQbt璀rXQJtbdQf`v|ZdQbbHAZtAJlfے`JJtArd`f~|drnvprbtv`fbdQZ|`vXn|ZdQbfpvbHAZH~fZHAbf~HXQJ`ےfH~˂pZXv`f˂rXQvXnے`JXQ`vXnlJtAr`ےbZ|dXnvtlJprQJ`tbdQZXQr˂|ZdQHfpvtAJlfH~lJtAdnXvdrtAvpftlJnXv`p˂r`vXnے`JXQfpvbHAZf`vXHAbے~HfJ`ےvpfHr˂pvˍpfd|ZHAZp˂rtAJlpfH~tArdےbH|drpZHAbbtlnXvtbdQZf`vX|ZdQ`f~JltH~ftArdf~HXQJ`ےvpfr˂pnXv`p˂rnvf`JXQrpvnbHAZp~f`ZHAbH~ㅐfdQbt璀rXQJtbdQf`v|ZdQbAZp˂tAJl璐ے`JJtArd`f~|drnvpbtlHfpvbdQZ|`vXn|ZdQbfpvJltH~fZHAbf~HXQJ`ے~f`˂pZXv`f˂rXQvXn˂pZ`vXnlJtAr`ےbZ|dXnvtd|rXQJ`tbdQZXQr˂|ZdQHfpvtAJlfH~JtArdnXvrAJl瀅vpftlJnXv`bdQZ|`vXnے`JXQfpvrXQvXnHAے`~HfJ`ےvpfHHAbےvˍpfd|ZHAZp˂rtAJlpfے`ZdQbtےbH|drpZHAbbtlnXvtbdQZf`vX|ZdQ`f~tbdQH~ftArdf~HdrtAvpfr˂pnXv`J`ےvpfHJXQrbpvnbHAZp~f``JXQrH~ㅐfdQbt璀rXQJtbdQJXQrlJtAAZp˂tAJl璐ے`JJtArd`fH|drnvpbtlHXv`Z|d`vXn|ZdQbfpvJltH~fZHAbf~HbHAZp~f`tlJXv`f˂rXQvXn˂pZ`vXnlJtAr`ےbZ|d˂pZHArd|rQJtbdQZXQr˂|ZdQfpvtAJlfH~JtArdf~HrtAJl瀅vpftlJnXv`bdQZ|`vXnے`JXQfpv˂rXQvXntAd|~HfJ`ےvpfHHAbےvˍpfd|ZHAZp˂rtAJlbے`ZdQbtbHAZp|drpZHAbbtlnrXQJtbdQZf`vX|ZdQfpvtbdQH~ftArdf~HdrtAvpfr˂pnXv`J`ےvpf~fZdQbtpvnbHAZp~f``pZHAH~ㅐfdQbt璀rXQJtbdQJXQrl|Z˂rXQtAJl璐ے`JJtArd`ےHA|drnvpbtlnXv`Z|dr`vXn|ZdQbfpvJltH~fZHAےf~HbHAXQJ`vXnlJtAXv`f˂rXQvXnbے``vXnlJtAr`ےbZ|d˂pZHAdQbtJ`ےtbdQZXQr˂|ZdQZp˂tAJlfH~JtArdf~HAJtbvpftlJnXv`bdQZ|`vXn`JXQrfpv`ےJlvpfrd|~HfJ`ےvpfHJXQrvˍpfd|ZHAZp˂rtAJlbے`lJtArbHAZp|drpZHAbbtlrXQJ`tbdQZf`vX|ZdQfp`fdQZ|ے`JXQtArdf~HdrtAvpfbtlnXv`tdrH~fZdQbtpvnbHAZp~f`˂p`ZH~ㅐfdQbt璀rXQJtbdQJXQrd|Z˂rXQtAJl璐ے`JJtArdےbHA|drnvpbtl~HfdrtAJr˂p|ZdQbfpvJltH~fJtAdf~HtAJl`vXnlJtAXv`f˂rXQvXnQXb㉀۝`vXnlJfp`ےbZ|d˂pZHAdQbtJbHAtbdQZXQr˂|ZdQZp˂tAJlfH~JtArdpvnltbZHAbtlJnXv`bdQZ|`vXn|ZdQbfpvtbdQZvpfrd|~HfJ`ےJvpfHpJAHrvˍpfvnXHAZp˂rtAJlbے`lJtAdQZp˂|dtApZHAbbtlrXQJ`tbdQZf`vX|ZdQXv`pdQZ|ے`JXQtArdf~HdrtAvpftlJnXv`|drH~fvXZdQbtpvnltb~f`ˁ`pH~ㅐfv`frXQJtbdQJXQrbtlrXQJ`Jltے`JJtArdےbHA|drnvpbtlvnrdrtAJr˂p|ZdQbfpvJltH~ftArdf~HtAJl璕nvplJtAXv`fdQZ|vXnJAHr󙐝`vXn~Hfp`ےbZ|d˂pZHAJtArdbHAbnvXQr˂|ZdQZp˂tAJlfے`JJtArdXQJ`pbdQZ|ZHAbtlJnXv`bdQZ|`vXn|ZdQbfpvtbdQtAfH~rd|~HfdrtAJvpfHˁ`ZQXvˍpfvnXHAZp˂rtAJlbے`|ZdQZp˂pfHpZHAbbtlrXQJ`tbdQZXQr˂|ZdQ˂rXQdrtے`JXQtArdfHfdrtAvpftlJnXv`Jltf`vXZdQbtpvnltb~f`b㉀ۑpH~ㅐfv`frXQJtbdQJXQrbtlrXQJ`f`vXے`JJtArdےbHA|drpZHAbbtlJ`ےAJltr˂p|ZdQbpvnJltH~ftArdf~HbdQZ|nvplJtAXv`fdQZ|vXnJAHr󙐝`vXn~Hfp`ےbZ|d˂pZHAJtArdbAZp˂nvpXQr˂|ZdQZp˂tAJl璐ے`JJtArdbHAZpbdQZ|ZHAbtlJrXQJ`bdQZ|`vXn|ZdQbfpvdrtAfH~rd|~HfdrtAJvpfHˁ`ZQXvˍp|vnXHAZp˂tAJlbے`tlJrXQJfH~pZHAbbtlrXQJ`tbdQZXQr˂|ZdQ`ےbdrtے`JXQtArdےHAZdrtAvpftlJnXv`JltfvnZdQbtpvnltb~f`AHr󙐂˂drQtv`frXQJtbnJXQrfpv`ےbf`vXے`JJtArdےbHA|drpZHAbbtlHAZp˂AJlbr˂p|ZdQbp˂rJltH~ftArdf~HbdQZ|vpfےlJtAXv`fdQZ|vXn`ZQXbJlt~Hfp`ےbvpfH˂pZHA~HfHAZp˂nvpXQr˂|ZdQZp˂tAJl璐ے`JJtArdrXQJQZ|dZHAbtlJXQJ`ےbdQZ|`vXn|ZdQbfpvltb`JXQrrd|~HfdrtAJvpfHۑpJbAdZ|vnXHAZp˂f`vbے`pvnrXQJfH~pZHAbbtlrXQJ`tbdQZXQr˂|ZdQ`ےbrtAJlے`JXQtArdbHAZdrtAvpftlJnXv`dQZ|˂pZZdQbtpvnltb~f`AHr󙐂˂drQtv`frXQJXnvJXQrXv`f`ےbAf`vXے`JJfpvےbHA|drpZHAbbtlHAZp˂tbdQr˂p|ZdQbp˂rJltH~ftArdf~HdrtAJHAbےlJtAXv`fdQZ|vXn`ZQXbJlt~Hfp`ےbpfH~˂pZHA~HfZrXnvpXQr˂nXvZp˂tAJl璐ے`JJtArdbHAZ|AJZHAbtlJXQJ`ےbdQZ|`vXn|ZdQbfpvltb`JXQrrd|~HfdrtAJvpfHˁ`bAdZ|vnXHAZp˂f`vbے`pvnQJ`ےfH~pZHAb`f~rXQJ`tbdQZXQr˂|ZdQZp˂ltbے`JXQtArdbHAZdrtAvpftlJnXv`dQZ|˂pZZdQbtpvnltb~f`ZQXb㉀drQtv`frXQJXnvJXQrXHfpbHAZpf`vXے`JHfpvےbHA|drpZHAbbtlrXQJ`nvpr˂p|ZdQbp˂rJltے`JXQtArdf~HdtbdQHAbےlJtAXv`fdQZ|vXnۑpJAHJlt~Hfp`ےbpfH~˂pZHAvnX˂rXnvpXQr˂nXvZp˂tAJl璐ے`JJtArdےbHAfHfZHAbtlJXQJ`ےbdQZ|r˂p|ZdQbfpvZ|d`JXQrrd|HfpdrtAJvpfHr󙐂ˁ`bAdZ|vnXHAZp˂f`vbے`v`fQJ`ےfH~pZHAb`f~rXQJ`tbdQZXQr˂|ZdQZp˂`vXnے`JXQtArdbHAZdrtAZHAbtlJnXv`rtAJl˂pZZdQbtvnrltb~f`ZQXb㉀drQtv`frXQJXnvJXQr~HfpbHAZf`vXے`JHfpvےbHA|dtApZHAbbtlrXQHAZvpfr˂p|ZdQbp˂rJltے`JXQtArdf~HtbdQHAbےlJtAXQJ`ےdQZ|vXnۑp`ZJlt~Hfp`ےbpfH~˂pZHAvnXrXQJ`nvpXQr˂nXvZp˂Jltے`JJtArdp˂rH~fZHAbtlJXQJ`ےbdQZ|r˂p|ZdQbfpvZ|d`JXQrrd|HAZpdrtAJvpfHQXb㉀bAdZ|vnXHAZp˂f`vbے`v`pvےJlfH~pZHAb`f~rXQJ`bnvXQr˂|ZdQXQJ`ے`vXnے`JXQtArdbHAZdrtAZHAbtlJnXv`rtAdQZ˂pZZdQbt˂rXQltb~f`pJAHrdrQtv`frXQJXnvJXQrnXvtbdQZf`vXے`JHfpvےbHApfHpZHAbbtlbHAZvpfr˂p|ZdQbp˂rJltے`JXQtArdfHf|drHAbےlJtAJ`ےdQZ|vXnˁ`ZJlt~Hfp`ےbpfH~˂pZHA`f~|drnvpXQr˂nXvZp˂f`vXے`JJtArdp˂rH~fZHAbtlJXQJ`ےbdQZ|r˂p|ZdQbpvntAJl`JXQrrd|bHAZpdrtAJvpfHQXb㉀bAdZ|vnXHAZp˂f`vbے`HfpvtAJlfH~pZHAb`f~rXQJ`nvpXQr˂|ZdQXQJ`p`vXnے`JXQfpvbHAZdrtAZHAbtlJrXQJ`tbdQZ˂pZZdQbt˂rXQltb~f`pJAHQXdrQtv`frXQJXnvJXQrnXvtbdQZf`vXے`JHfpvےbHAfH~pZHAbbtl˂rXQvpfr˂pnXv`p˂rJltے`JXQtArdp˂r|drHAbےlJtAJ`ےdQZ|vXnb㉀ۑpJlt~Hfp`ےJlpfH~˂pZHA`f|drnvpXQr˂nXvZp˂f`vXے`JJtArdJ`ےH~fZHAbf~HXQJ`ےbdQZ|r˂p|ZdQbXQJ`ےtAJl|`JXQrrd|bHAZpdrtAJvpfZJAHrbAdZ|vnXtbdQf`vbے`nXv`tAJlfH~pZHA`f~rXQJ`nvpXQr˂|ZdQbHAZp`vXnے`JXQfpvbHAZdrtAZHAbtlJbHAZdrtA˂pZZdQbt˂rXQltbHAbےˁ`ZQXdrQtv`fZ|dXnvJXQrf~HtbdQZf`vXے`JXQHfpvےbHAfH~pZHAbbtl˂rXQvpfr˂pnXv`p˂rJltے`JXQtArdp`ےJltHAbےlJtAJ`ےdQZ|`JXQrb㉀ۑpJlt~HfprtAJlpfH~˂pZHAfpv|drnvprbt璀nXvZp˂f`vXے`JJfpvJ`ےH~fZHAbf~HXQJ`ےbdQZ|r˂p|ZdQbbHAZpbdQZ|`JXQrrd|bHAZpdrtAJ˂pZJAHfbAdZ|vnXtbdQf`vbے`nXv`tAJlfH~lJtAd`f~rXQJ`nvpXQr˂~HrXQJ`vXnے`JXQfpvbHAZdtAJZHAbtlJ˂rXQltb˂pZZdQbt˂rXQltbHAbے`vXndrQtv`fZ|dXnvJXQrf~HtbdQZf`vX|ZdQHfpvےbHAfH~pZHAbfpv`ےbvpfr˂pnXv`p˂rltbے`JXQtArdJ`ےnvpHAbےlJtAJ`ےdQZ|`JXQrvˍpfJlt~HfprtAJlpfH~˂pZHAXv`f|drnvpbtlnXvZp˂f`vXے`JnXv`HAZp˂H~fZHAbf~HXQJ`ےnvpr˂p|ZdQbbHAZpff`v`JXQrrd|bHAZpdrtAJے`H~ㅐfbAdZ|vnXtbdQf`vے`J~HftAJlfH~JtArd`f~rXQJ`nvpXQr˂f~HrXQJ`vXnے`JXQfpvbHAZfHfZHAbtlJ˂bXnv˂pZZdQbt˂rXQltbJXQr`vXndrQtv`fZ|dXnvXQrbtpvntbdQZf`vX|ZdQHfpvےbHAfH~pZHAbfpv`ےbvpfr˂pnXv`p˂r`vXnے`JXQtArdHAZp˂pfH~HAbےlJfJ`ےdQZ|˂pZHAvˍpfJlt~HfprtAJlpfH~l|ZXv`f|drnvpbtlnXvZp˂f`vXے`JnXHfHAXQJ`H~fZHAbf~HXQJ`ےvpfr˂p|ZdQbrXQJf`v`JXQrpvnbHAZpdrtAJbے`H~ㅐfbAdZ|vnXtbdQf`vdQbt璐~HftAJlfH~JtArd`f~rXQJ`nvpXQr˂pvnےJl`vXnے`JXQfpvbHAZH~fZHAbtlJ`ےbnvpfH˂pZXv`f˂rXQltbJXQr`vXndrQtv`fZ|dXnvlJtArp`ftbdQZf`vX|ZdQHfpvےJlfH~pZHAbXv`ftbQZdvpfr˂pnXv`p˂r`vXnے`JXQtArdHAZp˂~f`HAbے~HfJ`ےdQZ|˂p`JvˍpfJlt~HfprtAJlpfH~d|l~Hfp|drnvpbtlnXvtbdQZf`vXے`J~HfrtAJlH~fZHAےf~HXQJ`ےvpfr˂p|ZdQbrXQHAvXn`JXQrpvnbHAZpdrtAJXQr˂H~ㅐfbAdZ|vnXtbdQf`vJtArdvnXtAJlfH~JtArd`f~|drnvpXQr˂pvntbd`vXn`JXQrfpvbHAZH~fZHAbtlJZp˂vpfH˂pZXv`f˂rXQltbpZHAb`vXndrQtv`fZ|dXnv|ZdQv`pvtbdQZf`vX|ZdQHfpvtAJlfH~pZHAbXv`pQZ|dvpfbtlnXv`p˂r`vXnے`JXQfpvrXQJ`~f`HAbے~HfJ`ےdQZ|ے`JvˍpfJltHfpvrtAJlpfH~btlnrXQ|drnvpbtlnXvtbdQZf`vXے`JvnXrtAJlH~fJtAdf~HXQJ`ےvpfr˂pnXv`ےbHAvXnv`JXQrpvnbHAZpdtAJlXQr˂H~ㅐfbAdZ|nrXQtbdQf`vJtArdJ`AZtAJlfH~JtArd`f~|drnvpXQr˂v`ftbd`vXn|ZdQbfpvbHAZH~fZHAbf~HZp˂fH~˂pZXv`f˂rXQtbnpZHAXQ`vXndrQtJ`ےZ|dXnv|ZdQp˂rtbdQZf`vX|ZdQHfpvtAJlfH~pZHA~HfpQZrtAvpftlJnXv`p˂r`vXnے`JXQfpvrXQJ`f`vXHAbے~HfJ`ےvpfr˂pvˍpfJlt66666666666666666666666666666666666666666666667777777777 \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv37_0.dat b/vendor/endroid/qr-code/assets/data/qrv37_0.dat new file mode 100644 index 000000000..d670ed061 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv37_0.dat @@ -0,0 +1,329 @@ +~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijihgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkhghghgggfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkggghghghfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMMMMMMNLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkghghghghfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQMNMNMNMNLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkghghghghfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQMNMNMNMNLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkghghghghfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQMNMNMNMNLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkghghghghfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQMNMNMNMNLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkghghggggfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPOMNMNMNMNLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkgghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPOMMMMMMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlkjijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijihghgggggfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijighghghghfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPOMMMMMNMNLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijighghghghfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPOMNMNMNMNLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijighghghghfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPOMNMNMNMNLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijighghghghfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSRQRQPOPOPOPOMNMNMNMNLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijighghghghfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOMNMNMNMNLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijighggggggfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUTSTSRQRQRQRQPOPOPOPOMNMNMNMMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPOMMMMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmlkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBA@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopolklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopoponmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCBABABA@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqponmnmnmnmlklklklkjijijijihgggggghfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[ZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMMMLKLKLKLKJIJIJIJIHGHGHGHGFEDCDCDCBABABABA@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkjijijijighghghghfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOMMMNMNMNLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutststsrqpopopoponmnmnmnmlklklklkjijijijighghghghfefefefedcdcdcdcbabababa`_`_`_`_^]^]\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOMNMNMNMNLKLKLKLKJIJIJIJIHGFEFEFEDCDCDCDCBABABABA@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmlklklklkjijijijighghghghfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOMNMNMNMNLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvutsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijighghghghfefefefedcdcdcdcbabababa`_`_^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOMNMNMNMNLKLKLKLKJIHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijighghghghfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOMNMNMNMNLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijigggggghgfefefefedcdcdcdcbaba`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOMNMNMMMMLKJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOMMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcbaba`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?~}~}~}~}|{|{|{zyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghghghgfefedcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijigggghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?~}~}~}|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghgfefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPONMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMMMMMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;:98787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + + @?@?@?@?>=>=>=>=<;<;<;<;878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + + @?@?@?@?>=>=>=>=<;:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=:9:9:9:9878787876565656543434333212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=<;<;<;:9:9:9:9878787876565656533343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?<;<;<;<;:9:9:9:9878787876565656534343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?>=>=>=<;<;<;<;:9:9:9:9878787876565656534343434212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:9878787876565656534343434212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:9878787876565656534343434212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:9878787876565656534343333212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:9878787876565656533434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:9878787876565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:987878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:987878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878765656565434333330/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878765434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878743333334212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878734343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878734343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878734343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878734343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878734343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878733333343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878743434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878743434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:98787876543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:96565656533333434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:96565656534343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:96565656534343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:96565656534343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + >=>=>=>=<;<;<;<;:9:9:9:96565656534343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    >=>=>=>=<;<;<;<;:9:9:9:96565656534343433212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + >=>=>=>=<;<;<;<;:9:9:9:96565656533334343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + >=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#       + + + + zzyyxxwwffggmmnn!!""##$$||{{zzyy11223344llkkjjiiTTUUVVWW!!  + + **++,,--ssrrqqpp::;;<<==ccbbaa``JJKKLLMM??>>==<<##$$%%&&zzyyxxww33445566jjiihhggCCDDEEFFZZYYXXWWSSTTUUVVJJIIHHGG{{||}}~~ ~~,,--..//qqppoonn<<==>>??aa``__^^LLMMNNOO vvuuttssooppqqrr%%&&''((xxwwvvuu55667788hhggffeeXXYYZZ[[ !!~~}}||..//0011oonnmmll>>??@@AA__^^]]\\NNOOPPQQ;;::9933''(())**vvuuttss778899::ffeeddccGGHHIIJJVVUUTTSSWWXXYYZZFFEEDDCC}}||{{zz00112233mmllkkjj@@AABBCC]]\\[[ZZPPQQRRSS!!""##$$rrqqppoossttuuvv + + ))**++,,ttssrrqq99::;;<>bbaa``__KKLLMMNNRRQQPPOO[[\\]]^^BBAA@@??yyxxwwvv44556677iihhggffDDEEFFGGYYXXWWVVTTUUVVWW%%&&''((nnmmggffwwxxyyzz + +  ~~}}--..//00ppoonnmm==>>??@@``__^^]]``aabbcc &&''(())wwvvuutt66778899ggffeeddFFGGHHIIWWVVUUTTVVWWXXYY..--,,++ !!""~~}}||{{//001122nnmmllkk??@@AABB^^]]\\[[OOPPQQRRNNMMLLKK__``aabb>>==<<;;uuttssrr8899::;;eeddccbbHHIIJJKKUUTTSSRRXXYYZZ[[))**++,,eeddccbb{{||}}~~ !!""##$$||{{zzyy11223344llkkjjiiAABBCCDD\\[[ZZYYddeeffgg + + **++,,--ssrrqqpp::;;<<==ccbbaa``JJKKLLMMSSRRQQPPZZ[[\\]]**))((''##$$%%&&zzyyxxww33445566jjiihhggCCDDEEFFZZYYXXWWSSTTUUVVJJIIHHGGccddeeff::998877 !!""#qqppoonn<<==>>??aa``__^^LLMMNNOOQQPPOONN\\]]^^__--..//00aa``__^^%%&&''((xxwwvvuu55667788hhggffeeEEFFGGHHXXWWVVUUmmnnoopp !!~~}}||..//0011oonnmmll>>??@@AA__^^]]\\NNOOPPQQOONNMMLL^^__``aa&&%%$$##''(())**vvuuttss778899::ffeeddccGGHHIIJJVVUUTTSSWWXXYYZZFFEEDDCCgghhiijj66554433#$$%%&&'mmllkkjj@@AABBCC]]\\[[ZZPPQQRRSSMMLLKKJJ``aabbcc11223344]]\\[[ZZ + + ))**++,,ttssrrqq99::;;<>bbaa``__KKLLMMNNRRQQPPOO[[\\]]^^BBAA@@??kkllmmnn221100//'(())**+iihhggffDDEEFFGGYYXXWWVVTTUUVVWWIIHHGGFFddeeffgg55667788YYXXWWVV  ~~}}--..//00ppoonnmm==>>??@@``__^^]]MMNNOOPPPPOONNMMuuvvwwxx + +&&''(())wwvvuutt66778899ggffeeddFFGGHHIIWWVVUUTTVVWWXXYYGGFFEEDDffgghhii//001122nnmmllkk??@@AABB^^]]\\[[OOPPQQRRNNMMLLKK__``aabb>>==<<;;ooppqqrr..--,,+++,,--../eeddccbbHHIIJJKKUUTTSSRRXXYYZZ[[EEDDCCBBhhiijjkk99::;;<>llmmnnoo~~}}==>>??@@LLKKJJII%%&&''((xxwwvvuu55667788hhggffeeEEFFGGHHXXWWVVUUUUVVWWXXHHGGFFEE}}~~~~}}||..//0011oonnmmll>>??@@AA__^^]]\\NNOOPPQQOONNMMLL^^__``aa??>>==<>bbaa``__KKLLMMNNRRQQPPOO[[\\]]^^BBAA@@??kkllmmnn221100//{{||}}~~""!! ::;;<<==YYXXWWVVTTUUVVWWIIHHGGFFddeeffgg99887766ttuuvvwwxxwwvvuuEEFFGGHHDDCCBBAA ~~}}--..//00ppoonnmm==>>??@@``__^^]]MMNNOOPPPPOONNMM]]^^__``@@??>>==wwvvuutt66778899ggffeeddFFGGHHIIWWVVUUTTVVWWXXYYGGFFEEDDffgghhii77665544vvwwxxyy zzyyxxww??@@AABB^^]]\\[[OOPPQQRRNNMMLLKK__``aabb>>==<<;;ooppqqrr..--,,++>>??@@AAUUTTSSRRXXYYZZ[[EEDDCCBBhhiijjkk55443322xxyyzz{{ttssrrqqIIJJKKLL@@??>>==!!""##$$||{{zzyy11223344llkkjjiiAABBCCDD\\[[ZZYYQQRRSSTTLLKKJJIIaabbccdd<<;;::99 !ssrrqqpp::;;<<==ccbbaa``JJKKLLMMSSRRQQPPZZ[[\\]]CCBBAA@@jjkkllmm33221100zz{{||}}vvuuttssCCDDEEFFZZYYXXWWSSTTUUVVJJIIHHGGccddeeff::998877ssttuuvv**))((''BBCCDDEEQQPPOONN\\]]^^__AA@@??>>llmmnnoo1100//..||}}~~ppoonnmmMMNNOOPP<<;;::99%%&&''((xxwwvvuu55667788hhggffeeEEFFGGHHXXWWVVUUUUVVWWXXHHGGFFEEeeffgghh88776655!""##$$%oonnmmll>>??@@AA__^^]]\\NNOOPPQQOONNMMLL^^__``aa??>>==<>??@@``__^^]]MMNNOOPPPPOONNMM]]^^__``@@??>>==mmnnoopp00//..--)**++,,-ggffeeddFFGGHHIIWWVVUUTTVVWWXXYYGGFFEEDDffgghhii77665544vvwwxxyy''&&%%$$hggffeedOOPPQQRRNNMMLLKK__``aabb>>==<<;;ooppqqrr..--,,++ ~~}}||{{NOPQRSSTEEDDCCBBhhiijjkk55443322xxyyzz{{%%$$##""ddccbbaaYYZZ[[\\++**))((11223344llkkjjiiAABBCCDD\\[[ZZYYQQRRSSTTLLKKJJIIaabbccdd<<;;::99qqrrsstt,,++**))-..//001ccbbaa``JJKKLLMMSSRRQQPPZZ[[\\]]CCBBAA@@jjkkllmm33221100zz{{||}}##""!! dccbbaa`SSTTUUVVJJIIHHGGccddeeff::998877ssttuuvv**))(('' + + zzyyxxwwTUUVVWWXAA@@??>>llmmnnoo1100//..||}}~~!! ``__^^]]]]^^__``''&&%%$$55667788hhggffeeEEFFGGHHXXWWVVUUUUVVWWXXHHGGFFEEeeffgghh88776655uuvvwwxx((''&&%%12233456__^^]]\\NNOOPPQQOONNMMLL^^__``aa??>>==<>??@@``__^^]]MMNNOOPPPPOONNMM]]^^__``@@??>>==mmnnoopp00//..--}}~~ <<==>>??WWVVUUTTVVWWXXYYGGFFEEDDffgghhii77665544vvwwxxyy''&&%%$$%%&&''((XWWVVUUT__``aabb>>==<<;;ooppqqrr..--,,++  + +nnmmggff`aabbccd55443322xxyyzz{{%%$$##""TTSSRRQQiijjkkll~~}}||AABBCCDD\\[[ZZYYQQRRSSTTLLKKJJIIaabbccdd<<;;::99qqrrsstt,,++**))@@AABBCCSSRRQQPPZZ[[\\]]CCBBAA@@jjkkllmm33221100zz{{||}}##""!! ))**++,,TSSRQPONccddeeff::998877ssttuuvv**))(('' + +  eeddccbbdeeffggh1100//..||}}~~!! PPOONNMMmmnnoopp{{zzyyxxEEFFGGHHXXWWVVUUUUVVWWXXHHGGFFEEeeffgghh88776655uuvvwwxx((''&&%%DDEEFFGGOONNMMLL^^__``aa??>>==<>==mmnnoopp00//..--}}~~  ~~}}LLMMNOPQGGFFEEDDffgghhii77665544vvwwxxyy''&&%%$$::;;<<==EEDDCCBBooppqqrr..--,,++ YYXXWWVVssttuuvv%%$$##""DDCCBBAAyyzz{{|| oonnmmlkQQRRSSTTLLKKJJIIaabbccdd<<;;::99qqrrsstt,,++**)) + + ||{{zzyyRSSTTUUVCCBBAA@@jjkkllmm33221100zz{{||}}##""!! >>??@@AAAA@@??>>ssttuuvv**))(('' + +  + + !!""##UUTTSSMMwwxxyyzz!! @@??>>==}}~~jihggffeUUVVWWXXHHGGFFEEeeffgghh88776655uuvvwwxx((''&&%%xxwwvvuuVWWXXYYZ??>>==<>==mmnnoopp00//..--}}~~  ppoonnmm^__``aab77665544vvwwxxyy''&&%%$$ + + JJKKLLMM3221100/ ,,--..//DDCCBBAA 44332211 !!""##]\\[[ZZYaabbccdd<<;;::99qqrrsstt,,++**)) + + + + ggffeeddbccddeef33221100zz{{||}}##""!! SSTTUUVV/..--,,+ + +  + +00112233@@??>>==00//..--$$%%&&''YXXWWVVUeeffgghh88776655uuvvwwxx((''&&%% ccbbaa``fgghijkl//..--,,~~ ~~WWXXYYZZ+**))((' 99::;;<<<<;;::99 + +QQPPOONN,,++**))(())**++UTTSSRQPiijjkkll44332211yyzz{{||$$##""!!__^^]]\\mmnnoopp++**))(( + +  }}||{{zz[[\\]]^^'&&%%$$# !!""~~}}||{{==>>??@@33221100  + + MMLLKKJJ((''&&%%,,--..//ONMMLLKKmmnnoopp00//..--}}~~  [[ZZYYXXqqrrsstt''&&%%$$ + + yyxxwwvv__``aabb#""!!  ##$$%%&&zzyyxxwwAABBCCDD//..--,, ~~IIHHGGFF$$##""!!00112233JJIIHHGGqqrrsstt,,++**)) + +  !!WWVVUUTTuuvvwwxx##""!!  !!uuttssrrccddeeff + +  + +''(())**vvuuttssEEFFGGHH++**))(( !!""##}}||{{zzEEDDCCBB 99::;;<>==>>??@@BBAA@@??yyzz{{||$$##""!! &&''(())JJIIHHGG}}~~ + +  &&''(())mmggffeeppqqrrss !!""~~}}||{{//001122nnmmllkkMMSSTTUU##""!!  + + (())**++uuttssrr==<<;;::AABBCCDD>>==<<;;}}~~  **++,,--FFEEDDCC + + **++,,--ddccbbaattuuvvww ##$$%%&&zzyyxxww33445566jjiihhggVVWWXXYY ~~,,--..//qqppoonn99887766EEFFGGHH::998765 + + ..//0011BBAA@@?? !!~~}}||..//0011``__^^]]xxyyzz{{ + +  + +''(())**vvuuttss778899::ffeeddccZZ[[\\]] !!""##}}||{{zz00112233mmllkkjj55443322 IIJJKKLL43322110 + + 223399::>>==<<;; ""##$$%%{{zzyyxx22334455\\[[ZZYY||}}~~ ++,,--..rrqqppoo;;<<==>>bbaa``__^^__``aa$$%%&&''yyxxwwvv44556677iihhggff1100//.. + + MMSSTTUU0//..--,  ~~}};;<<==>>::993322 + +  &&''(())wwvvuutt66778899XXWWVVUU !!""~~}}||{{//001122nnmmllkk??@@AABB^^]]\\[[bbccddee (())**++uuttssrr8899::;;eeddccbb--,,++** + + VVWWXXYY,++**))( !!""##$$||{{zzyy??@@AABB1100//.. + + **++,,--ssrrqqpp::;;<<==TTSSMMLL##$$%%&&zzyyxxww33445566jjiihhggCCDDEEFFZZYYXXWWffggmmnn + + ~~,,--..//qqppoonn<<==>>??aa``__^^))((''&& ZZ[[\\]](''&&%%$ + + %%&&''((xxwwvvuuCCDDEEFF--,,++** !!~~}}||..//0011oonnmmll>>??@@AAKKJJIIHH + +''(())**vvuuttss778899::ffeeddccGGHHIIJJVVUUTTSSooppqqrr !!""##}}||{{zz00112233mmllkkjj@@AABBCC]]\\[[ZZ%%$$##""^^__``aa$##""!!  + + ))**++,,ttssrrqqGGHHIIJJ))((''&&""##$$%%{{zzyyxx22334455kkjjiihhBBCCDDEEGGFFEEDD ++,,--..rrqqppoo;;<<==>>bbaa``__KKLLMMNNRRQQPPOOssttuuvv$$%%&&''yyxxwwvv44556677iihhggffDDEEFFGGYYXXWWVV!! ~~}}||{{bbccddee   ~~}}--..//00ppoonnmmKKLLMMSS%%$$##"" &&''(())wwvvuutt66778899ggffeeddFFGGHHIICCBBAA@@ !!""~~}}||{{//001122nnmmllkk??@@AABB^^]]\\[[OOPPQQRRNNMMLLKKwwxxyyzz + + (())**++uuttssrr8899::;;eeddccbbHHIIJJKKUUTTSSRR 3399::;;GGFFEEDDmmnnoopp00//..--}}~~  [[ZZYYXXqqrrsstt''&&%%$$ + + ZZ[[\\]]##""!! <<==>>??CCBBAA@@qqrrsstt,,++**)) + +  !!WWVVUUTTuuvvwwxx##""!! ^^__``aa@@AABBCC??>>==<>==<<;; ""##$$%%nnmmggffwwxxyyzz + + ~~}}||YYZZ[[\\)((''&&%  ~~}};;<<==>>::993322 + +  &&''(())eeddccbb{{||}}~~ + +  + + {{zzyyxx]]^^__``%$$##""! !!""##$$||{{zzyy??@@AABB1100//.. + + **++,,--aa``__^^ wwvvuuttaabbccdd!  + + %%&&''((xxwwvvuuCCDDEEFF--,,++** !!~~}}||..//0011]]\\[[ZZ !!""##ssrrqqppeeffggmm + + ))**++,,ttssrrqqGGHHIIJJ))((''&&""##$$%%{{zzyyxx22334455YYXXWWVV$$%%&&''oonnmmggnnooppqq  ~~}}--..//00ppoonnmmKKLLMMSS%%$$##"" &&''(())wwvvuutt66778899UUTTSSMM(())**++ffeeddccrrssttuu!!""##$$||{{zzyy11223344llkkjjiiTTUUVVWW!!  + + **++,,--ssrrqqpp::;;<<==LLKKJJII !!~~,,--..//bbaa``__vvwwxxyy %%&&''((xxwwvvuu55667788hhggffeeXXYYZZ[[ !!~~}}||..//0011oonnmmll>>??@@AAHHGGFFEE""##$$%% !!""##}}||{{zz00112233^^]]\\[[zz{{||}} + +  + + ))**++,,ttssrrqq99::;;<>??@@``__^^]]``aabbcc &&''(())wwvvuutt66778899ggffeeddFFGGHHII@@??>>==**++,,--(())**++uuttssrr8899::;;VVUUTTSS!!""##$$||{{zzyy11223344llkkjjiiAABBCCDD\\[[ZZYYddeeffgg + + **++,,--ssrrqqpp::;;<<==ccbbaa``JJKKLLMM<<;;::99..//0011,,--..//qqppoonn<<==>>??MMLLKKJJ%%&&''((xxwwvvuu55667788hhggffeeEEFFGGHHXXWWVVUUmmnnoopp !!~~}}||..//0011oonnmmll>>??@@AA__^^]]\\NNOOPPQQ332211002233445500112233mmllkkjj@@AABBCCIIHHGGFF + + ))**++,,ttssrrqq99::;;<>??@@``__^^]]MMNNOOPPPPOONNMMuuvvwwxx + +&&''(())wwvvuutt66778899ggffeeddFFGGHHIIWWVVUUTTVVWWXXYY++**))((::;;<<==8899::;;eeddccbbHHIIJJKKAA@@??>>!!""##$$||{{zzyy11223344llkkjjiiAABBCCDD\\[[ZZYYQQRRSSTTLLKKJJIIyyzz{{|| **++,,--ssrrqqpp::;;<<==ccbbaa``JJKKLLMMSSRRQQPPZZ[[\\]]''&&%%$$~~}}||>>??@@AA<<==>>??aa``__^^LLMMNNOO==<<;;::%%&&''((xxwwvvuu55667788hhggffeeEEFFGGHHXXWWVVUUUUVVWWXXHHGGFFEE}}~~~~}}||..//0011oonnmmll>>??@@AA__^^]]\\NNOOPPQQOONNMMLL^^__``aa##""!! {{zzyyxxBBCCDDEE@@AABBCC]]\\[[ZZPPQQRRSS99332211))**++,,ttssrrqq99::;;<>??@@``__^^]]MMNNOOPPPPOONNMM]]^^__``@@??>>==wwvvuutt66778899ggffeeddFFGGHHIIWWVVUUTTVVWWXXYYGGFFEEDDffgghhiissrrqqppJJKKLLMMHHIIJJKKUUTTSSRRXXYYZZ[[,,++**))!!""##$$||{{zzyy11223344llkkjjiiAABBCCDD\\[[ZZYYQQRRSSTTLLKKJJIIaabbccdd<<;;::99 !ssrrqqpp::;;<<==ccbbaa``JJKKLLMMSSRRQQPPZZ[[\\]]CCBBAA@@jjkkllmmoonnmmllNNOOPPQQLLMMNNOOQQPPOONN\\]]^^__((''&&%%%%&&''((xxwwvvuu55667788hhggffeeEEFFGGHHXXWWVVUUUUVVWWXXHHGGFFEEeeffgghh88776655!""##$$%oonnmmll>>??@@AA__^^]]\\NNOOPPQQOONNMMLL^^__``aa??>>==<>??@@``__^^]]MMNNOOPPPPOONNMM]]^^__``@@??>>==mmnnoopp00//..--)**++,,-ggffeeddFFGGHHIIWWVVUUTTVVWWXXYYGGFFEEDDffgghhii77665544vvwwxxyy ccbbaa``ZZ[[\\]]XXYYZZ[[EEDDCCBBhhiijjkk11223344llkkjjiiAABBCCDD\\[[ZZYYQQRRSSTTLLKKJJIIaabbccdd<<;;::99qqrrsstt,,++**))-..//001ccbbaa``JJKKLLMMSSRRQQPPZZ[[\\]]CCBBAA@@jjkkllmm33221100zz{{||}}__^^]]\\^^__``aa\\]]^^__AA@@??>>llmmnnoo55667788hhggffeeEEFFGGHHXXWWVVUUUUVVWWXXHHGGFFEEeeffgghh88776655uuvvwwxx((''&&%%12233456__^^]]\\NNOOPPQQOONNMMLL^^__``aa??>>==<>??@@``__^^]]MMNNOOPPPPOONNMM]]^^__``@@??>>==mmnnoopp00//..--}}~~ <<==>>??WWVVUUTTVVWWXXYYGGFFEEDDffgghhii77665544vvwwxxyy''&&%%$$ !!""##SSRRQQPPjjkkllmmhhiijjkk55443322xxyyzz{{xxwwvvuuAABBCCDD\\[[ZZYYQQRRSSTTLLKKJJIIaabbccdd<<;;::99qqrrsstt,,++**))@@AABBCCSSRRQQPPZZ[[\\]]CCBBAA@@jjkkllmm33221100zz{{||}}##""!! $$%%&&''OONNMMLLnnooppqqllmmnnoo1100//..||}}~~ ttssrrqqEEFFGGHHXXWWVVUUUUVVWWXXHHGGFFEEeeffgghh88776655uuvvwwxx((''&&%%DDEEFFGGOONNMMLL^^__``aa??>>==<>==mmnnoopp00//..--}}~~  ~~}}LLMMNOPQGGFFEEDDffgghhii77665544vvwwxxyy''&&%%$$00112233CCBBAA@@zz{{||}}xxyyzz{{%%$$##""feeddccbQQRRSSTTLLKKJJIIaabbccdd<<;;::99qqrrsstt,,++**)) + + ||{{zzyyRSSTTUUVCCBBAA@@jjkkllmm33221100zz{{||}}##""!! 99::;;<>==<<~~||}}~~!! baa``__^UUVVWWXXHHGGFFEEeeffgghh88776655uuvvwwxx((''&&%%xxwwvvuuVWWXXYYZ??>>==<>??@@;;::9988 !!""^]]\\[[ZYYZZ[[\\DDCCBBAAiijjkkll44332211yyzz{{||$$##""!!ttssrrqqZ[[\\]]^;;::9988rrssttuu++**))(( + + AABBCCDD77665544##$$%%&&ZYYXXWWV]]^^__``@@??>>==mmnnoopp00//..--}}~~  ppoonnmm^__``aab77665544vvwwxxyy''&&%%$$EEFFGGHH33221100''(())**VUUTTSSRaabbccdd<<;;::99qqrrsstt,,++**)) + + + + ggffeeddbccddeef33221100zz{{||}}##""!! IIJJKKLL//..--,,++,,--..QPONMMLLeeffgghh88776655uuvvwwxx((''&&%% ccbbaa``fgghijkl//..--,,~~ MMSSTTUU++**))(( + +//001122KKJJIIHHiijjkkll44332211yyzz{{||$$##""!!__^^]]\\mmnnoopp++**))(( + +  VVWWXXYY''&&%%$$ZHAbtlJvnXbHAXQJtbdQZvpfbtlnXv`bHAZdrtA`vXnے`JXQtlJnXv`rXQJ`|dtHAbےZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےltb`vXHd|Z~HfprXQJtbdQpfH~˂pZHAd|Z~HfprXQJtbdQpfH~tlJ`f~Zp˂tAJlnvpXQr˂JtArdے`JXQtArdv`f`ےb|drH~fJtAdf~Hp˂rJltvpfr˂ptArdf~HےbHAbdQZ|`JXQrlJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZpdQZ|l~fZdQbtvnX`ےbZ|df`vbے`dQbtvnX`ےbZ|df`ptArdHfpvrXQJ`tbdQZfH~pZHAb|ZdQr˂p|ZdQb~HfpHAZp˂tAJlZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvZp˂drtA˂pZrd|~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQtbdQHAblJtArv`fHAZp˂rtAJlXnvJXQrlJtArv`fHAZp˂rtAJlfH~|ZdQbnXvےbHA|drf`vXے`JbtlZHAbtlJv~rXQJtbdQZے`JXQtlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`rXQJ`JltHAbےZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےZ|dJQr˂pd|Z~HfprXQJtbdQpfH~˂pZHAd|Z~HfprXQJtbdQf`vXtJArd`f~Zp˂tAJlnvpXQr˂JtArdے`JXQtArdHfpv`ےb|dnr˂ptArdf~Hp˂rJltvpfr˂ptArdf~HےbHAbdQZ|`JXQrlJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZprtAJlZHAbdQbtvnX`ےbZ|df`vbے`dQbtvnX`ےbZ|dnvp|ZdHfpvrXQJ`tbdQZfH~pZHAb|ZdQr˂p|ZdQbnXvHAZp`vffZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےltb˂pZrd|~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQtbdQے`JXlJtArv`fHAZp˂rtAJlXnvJXQrlJtArv`fHAZp˂rtAJlfH~QbtlnXvےbHA|drf`vXے`JbtlZHAbtlJ`f~ےbHA`vXnے`JXQtlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`bHAZnvpHAbےZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےZ|dQr˂pd|Z~HfprXQJtbdQpfH~˂pZHAd|Z~HfprXQJtbdQf`vXJtArd`f~Zp˂tAJlnvpXQr˂JtArdے`JXQtArdHfpvZp˂vpfr˂ptArdf~Hp˂rJltvpfr˂ptArdf~Hp˂rff`v`JXQrlJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZptbdQZZHAbdQbtvnX`ےbZ|df`vbے`dQbtvnX`ےbZ|dH~f|ZdHfpvrXQJ`tbdQZfH~pZHAb|ZdQr˂p|ZdQbnXHrXQJ`H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےXnv˂pZrd|~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQ|drے`JQrlJtArv`fHAZp˂rtAJlXnvJXQrlJtArv`fHAZp˂rtAJlZHAbQbtlnXvےbHA|drf`vXے`JbtlZHAbtlJfpvےbHA`vXnے`JXQtlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`bHAZpfH~HAbےZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےtAJl璉pZHAd|Z~HfprXQJtbdQpfH~˂pZHAd|Z~HfprXQJtbdQ˂pZJAr|`f~Zp˂tAJlnvpXQr˂JtArdے`JXQtArdnXv`Zp˂vpfr˂ptArdf~Hp˂rJltvpfr˂ptArdf~Hp`ےf`v`JXQrlJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZptbdQZbے`dQbtvnX`ےbZ|df`vbے`dQbtvnX`ےbZ|dHAbےZdQbtHfpvrXQJ`tbdQZfH~pZHAb|ZdQr˂p|ZdQbf~HbHAZH~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvbHAZpXnv˂pZrd|~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQ|ltJXQrlJtArv`fHAZp˂rtAJlXnvJXQrlJtArv`fHAZp˂rtAJl`JXQrlJtAnXvےbHA|drf`vXے`JbtlZHAbtlJfpvdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`˂rXQf~f`HAbےZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےbnv˂pZHAd|Z~HfprXQJtbdQpfH~˂pZHAd|Z~HfprXQJtbdQ˂pZrd|`f~Zp˂tAJlnvpXQr˂JtArdے`JXQtArdnXv`JbdQ瀅vpfr˂ptArdf~Hp˂rJltvpfr˂ptArdf~HJ`ےvXn`JXQrlJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZpp`vXbے`dQbtvnX`ےbZ|df`vbے`dQbtvnX`ےbZ|dHAbےZdQbtHfpvrXQJ`tbdQZfH~pZHAb|ZdQr˂p|ZdQbpvnZ|dH~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvbHAZpvpfH˂pZrd|~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQnvpJXQrlJtArv`fHAZp˂rtAJlXnvJXQrlJtArv`fHAZp˂rtAJl`pZHAlJtAnXvےbHA|drf`vXے`JbtlZHAbtlJXv`frtAJl`vXnے`JXQtlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`˂b~f`HAbےZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےfH~ZHAbd|Z~HfprXQJtbdQpfH~˂pZHAd|Z~HfprXQJtbdQbے`rZdQ`f~Zp˂tAJlnvpXQr˂JtArdے`JXQtArd~HftbdQ瀅vpfr˂ptArdf~Hp˂rJltvpfr˂ptArdf~HHAZdvXn`JXQrlJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZpf`vX`JXQdQbtvnX`ےbZ|df`vbے`dQbtvnX`ےbZ|dJXQrbtlHfpvrXQJ`tbdQZfH~pZHAb|ZdQr˂p|ZdQbpvnZ|dH~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvrtAdQZvpf~˂pZrd|~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQnfr˂plJtArv`fHAZp˂rtAJlXnvJXQrlJtArv`fHAZp˂tAJl˂pZHAJtArdnXvےbHA|drf`vXے`JbtlZHAbtlJXv`frtAJl`vXnے`JXQtlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`|drf`vXHAbےZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ے`vXnZHAbd|Z~HfprXQJtbdQpfH~˂pZHAd|Z~HfprXQJtbnbے`|ZdQ`f~Zp˂tAJlnvpXQr˂JtArdے`JXQtArdnXbQZ|vpfr˂ptArdf~Hp˂rJltvpfr˂ptArdf~HtAJlnvp`JXQrlJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZpvpf`JXQdQbtvnX`ےbZ|df`vbے`dQbtvnX`ےbvp`vJXQHAbbtlHfpvrXQJ`tbdQZfH~pZHAb|ZdQr˂p|ZdQbv`fdrtAJH~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvtbdQZfH~˂pZrd|~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQH~frZAblJtArv`fHAZp˂rtAJlXnvJXQrlJtArv`fHAZdXnvے`JJtArdnXvےbHA|drf`vXے`JbtlZHAbtlJ~Hfpltb`vXnے`JXQtlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`|drf`vXHAbےZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ے`vXnے`Jd|Z~HfprXQJtbdQpfH~˂pZHAd|ZHfpvrtAJlpfH~XQr˂ZQbt`f~Zp˂tAJlnvpXQr˂JtArdے`JXQtArdvnXdQZ|vpfr˂ptArdf~Hp˂rJltvpfr˂ptArdf~HtAJl|nvp`JXQrlJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZvp`XQr˂dQbtvnX`ےbZ|df`vbے`dQbt璀nrXQtbdQf`vpZHAblJtArHfpvrXQJ`tbdQZfH~pZHAf~r˂p|ZdQbv`p˂drtAJH~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvdrtAfH~f˂pZrd|~Hf˂rXQltbvpfH˂pZrd|HfpdrtAdQvXnpZHAblJtArv`fHAZp˂rtAJlXnvJXQrlJtArJ`ےZ|dXnے`Jd|ZnXvےbHA|drf`vXے`JXQHfpvZHAbtlJrXQJltbQ`vXnے`JXQtlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`JltvXnHAbےZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtvnrZ|dvpfHے`Jd|Z~HfprXQJtbdQpfH~˂pZHAdfHAZp˂rtAJlf`vXXQrdQbt`f~Zp˂tAJlnvprbt璀nXvے`JXQtArd`ےbZdrtvpfr˂ptArdf~Hp˂rJltvpfr˂ptArdfHfbdQZ|vpfH`JXQrlJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXQJ`ےrtAJl~f`XQr˂dQbtvnX`ےbZ|df`vے`J~HfprXQJtbdQnvpے`JXQlJtArHfpvrXQJ`tbdQZfH~lJtAd`f~r˂p|ZdQbHAZp˂AJltH~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbpvndrtA~f`˂pZrd|~Hf˂rXQltbvpfH˂pZrdfHAZptbdQvXnpZAb`lJtArv`fHAZp˂rtAJlXnvXQrbtvnX`ےbZ|dfH~r˂pd|ZQnXvےbHA|dtAfZHAb|ZdQHfpvZHAbtlJrXQHAbdQZ|`vXnے`JXQtlJnXv`bHAZdrtA`vXnے`JXQtlJrXQJ`JltvXnHAbےZdQbtpvnJ`ےdQZ|~f`HAے`~Hf˂rXQZ|dvpfHJXQrd|Z~HfprXQJtbdQpfH~lJtAv`fHAZp˂rtAJlf`vXZHAbblJt`f~Zp˂Jltے`JbtlnXvے`JXQtArdZp˂drtvpfr˂ptArdf~Hp˂rJltvpfr˂ptArdp˂rdrtAJvpfH`JXQrlJtAXv`fbHAZpdrtAJvXnJXQrbpvnJ`ےrtAJlXnv˂pZHdQbtvnX`ےbZ|dfZHAd|Z~HfprXQJtbdQnvpے`JXQArd|HfpvrXQJ`bnvXQr˂JtArd`f~r˂p|ZdQbrXQJ`AJltH~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAےf~HXQJ`ےltb~fvn˂pZrd|~Hf˂rXQltbvpfHtlJXv`fbHAZp|drpfH~Abے`lJtArv`fHAZp˂tAJlbے`dQbtvnX`ےbZ|d`vXnr˂pZdQbtnXvےbHApfHpZHAb|ZdQHfpv`f~ZHAbtlJےbHAbdQZ`vXnے`JXQtlJnXv`bHAZdrtA`vXn`JXQrfpvbHAZdQZ|vpfHAbےZdQbtpvnJ`ےdQZ|~fZtAd|~Hf˂rXQtAJl璐f`vJXQrd|Z~HfprXQJtbnJXQrlJtArv`fHAZp˂rtAJlvpf`JXQrlJt`fHZdrf`vXے`JbtlnXvHfpvے`JXQtArdZp˂rtAJlvpfr˂ptArdf~Hp˂rJltvpfbtlnXv`p˂rdrtAJH~f`JXQrlJtAXv`fbHAZpdtAJlHAbےZdQbtpvnJ`ےtbdQZXnv˂pZHdQbtvnX`ےbvpfH˂pZHAd|Z~HfprXQJtbdQH~f˂pZArd|fpvtAJlnvpXQr˂JtArd`f~nXvr˂p|ZdQbrXQJ`tbdQH~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fJtAdf~HXQHAZpltb`vXn˂pZrd|~Hf˂rXQtbn`JXQrlJtAXv`fbHAZp|drpfH~AbJXQlJtArv`fHAZdf`vbے`dQbtvnX`ےbZ|d`vXnHAbےZdQbnrXQJtbdQZfH~pZHAb|ZdQHfpv`f~ZHAbtlJp˂rZ|d`vXnے`JXQtlJnXv`bHAZdtAJZHAb|ZdQbfpv˂rXQdQtAJlvpfHAbےZdQbtpvnJ`ےvpf˂pZrd|~Hf˂rXQtAJl璐vpr˂pd|ZHfpvrtAJlXnvJXQrlJtArv`fHAZp˂rtAJlvpf`JXQrJtArd`ےHA|drf`vXے`JbtlnXvHfpvے`JXQtArdXQJ`ےrtAJlvpfr˂ptArdf~Hp˂rltbے`JXQtlJnXv`J`ےtbdQH~f`JXQrlJtAXv`fbHAZHf`HAbےZdQbtpvnJ`ےtdrtAfH~ZHAbdQbt璀nrXQtbdQpfH~˂pZHAd|Z~HfprXQJtbdQHXn˂pZf~Zp˂tAJlnvpXQr˂JtArd`f~nXvr˂pf~HbHAZtbdQH~fZHAb|ZdQbfpvXQJ`ےnvpr˂ptArdf~HbHAZpZ|d`vnvp˂pZrd|HfpdrtAJvXn`JXQrlJtAXv`fbHAZpJltf`vXے`JXQlJtArJ`ےZ|df`vbے`dQbtvnX`ےbZ|dvpfHHAXQrHfpvrXQJ`tbdQZfH~pZHAb|ZdQHfpv`f~ZHAbXv`fp˂rZ|rA`vXnے`JXQtlJnXv`bHAZfHfZHAb|ZdQbfpv˂rXQrtAJlfH~HAbےZdQbtvnrltbvpfH˂pZrd|~Hf˂rXQbdQZ|nvpr˂pdfHAZp˂rtAJlXnvJXQrlJtArv`fHAZp˂rtAJl~f`˂pZHAnXvےbHA|drf`vXے`JbtlnXvHfpvے`JXQ~HfXQJ`ےJltvpfr˂ptArdfHfdrtA`vXnے`JXQtlJnXv`J`p˂tbdQf`vX`JXQrlJtAXQJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےdrtAfH~ZA`J~HfprXQJtbdQpfH~˂pZHAd|Z~HfprXQJtbdQvXnbے``f~Zp˂tAJlnvpXQr˂JtArd`f~nXvr˂ppvnrXQbdQZ|H~fZHAb|ZdQbpvnJltvpfr˂ptArdf~HrXQJZ|l璕nvp˂pZrdfHAZpdrtAJvXn`JXQrlJtAXv`fbHAZpJltf`pfXQrbtvnX`ےbZ|df`vbے`dQbtvnX`ےbZ|dvpfHJXQrHfpvrXQJ`tbdQZfH~pZHAb|ZdQHfpv`f~|ZdQbXv`fJ`ےdrtA`vXnے`JXQtlJrXQJ`bdQZ|H~fZHAb|ZdQbfpv`ےbtbdQZfH~HAے`~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQbdQtAJH~flJtAv`fHAZp˂rtAJlXnvJXQrlJtArv`fHAZp˂rtAJl~v˂p`JnXvےbHA|drf`vXے`JbtlnXvHfpvtlJ~HfbHAZpJltvpfr˂ptArdےHAZdrtA`vXnے`JXQtlJnXv`HAZp˂|drf`vXJXQrbpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےltb`vXnd|Z~HfprXQJtbdQpfH~˂pZHAd|Z~HfprXQJtbdQpfH~XQrbt`f~Zp˂tAJlnvpXQr˂JtArd`f~nXvtArdp`f˂rXQbdQZ|H~fZHAےf~Hp˂rJltvpfr˂ptArdf~HrXQJtAJl璕nvfHtlJXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZpdQZ|vpfdQbtvnX`ےbZ|df`vbے`dQbtvnX`ےbZ|df`vlJAHfpvrXQJ`tbdQZfH~pZHAb|ZdQHfpv`f~|ZdQb~HfpJ`ےdrAJ`vXn`JXQrfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpv`ےtbdQZ~fZtAd|~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQdrtAJH~flJtArv`fHAZp˂rtAJlXnvJXQrlJtArv`fHAZp˂rtAJlXnv|ZdQbnXvےbHA|drf`vXے`JbtlnXvHfpvnXvےbHA|dtAfZHAbl|ZdQXv`fXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےnvpr˂p|ZdQb~HfbHAZltbvpfH˂pZrd|HfpdrtAJvXnHAbےr󙐂ˁ`vˍpf`f~Zp˂Jlt˂pbtl~HfbHAZdrtA`vXnے`JXQtlJnXv`bHAZfHfZHAbtd|pvnp˂rdQZ|~f`HAbےZdQbtvnrltbvpfH`pZHAZQXb㉀H~ㅐfHfpvrXQJ`bnvZHAbJtArdpvnp˂rJltvpfr˂ptArdfHfdrtA`vXnے`JXQZdQbtXHfpXQJ`ےdrtAJvXn`JXQrlJtAXQJ`ےdQZ|~f`bے`ۑpJAH`vXnnXvےbHApfHے`JXQ|ZdQXv`fXQJ`ےbdQZ|H~fZHAb|ZdQbpvnJltvpfr˂plJtAvnXbHAZltbvpfH˂pZrdfHAZpdrtAJvXnJXQrr󙐉ەvˍpf`fHZdrf`vXr˂pbtl~fpvbHAZdrtA`vXnے`JXQtlJrXQJ`bdQZ|H~fZHAbrd|v`fprQJ`dQZ|~f`HAے`~Hf˂rXQltbvpfH˂pZHApJAHrH~ㅐffpvtAJlnvpZHAbJtAdQbnXv`p˂rJltvpfr˂ptArdےHAZdrtA`vXnے`JXQZdQbt~HfpےbHdrtAJvXnJXQrbpvnJ`ےdQZ|~f`bے`ˁ`Z`vXnnrXQJtbdQZfH~ے`pZtlJf~HXQJ`ےbdQZ|H~fZHAےf~Hp˂rJltvpfr˂pl|ZvnXAZp˂ltbvpfHtlJXv`fbHAZpdrtAJvXnJXQHAbQXb㉀ەvˍp|`ےHA|drf`vXHAbےtArdfpvbHAZdrtA`vXn`JXQrfpvXQJ`ےbdQZ|H~fZHAbdQbtv`pvrXQJ`dQZ|~fZtAd|~Hf˂rXQltbvpfHے`JpJAHrdrQtZp˂tAJlnvp`JXQr|ZdQbnXv`p˂rJltvpfbtlnXv`bHAZdrtA`vXnے`JXQlJtArnXvےbHdtAJlHAbےZdQbtpvnJ`ےdQZ|~f`XQr˂ˁ`pJltrXQJ`tbdQZfH~˂pZtlJf~fXQJ`ےbdQZ|H~fJtAdf~Hp˂rJltvpfr˂pd|Z`f~AZp˂tbn`JXQrlJtAXv`fbHAZpdrtAJvXnpZHAbJAHrbAdZ|ےbHA|drf`vXHAbےtArdtvnXbHAZdtAJZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAbdQbtHfpvrQJvpf˂pZrd|~Hf˂rXQltbvpfHے`Jˁ`ZQXdrQtZp˂tAJlnvp`JXQHAlJtAv`fp˂rltbے`JXQtlJnXv`bHAZdrtA`vXnے`JXQlJtAdQnXvbHAZHf`HAbےZdQbtpvnJ`ےdQZ|~f`XQrb㉀ۑpJltrXQJ`tbdQZfH~bے`rd|~HfpXQJ`ےnvpr˂ptArdf~Hp˂rJltvpfr˂pbtl`fdrtAJvXn`JXQrlJtAXv`fbHAZpdrtAJvXnے`JXQJAHrbAdZ|ےbHA|drf`vXJXQrZdQbtvnXbHAZfHfZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAbJtArdnXv`ltbvpfH˂pZrd|~Hf˂rXQltbvpfHr˂pˁ`pfdrQtZp˂tAJlnvp˂pZHAlJtAv`ffdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXnے`JXQ|ZdQf~HdQZ|~f`HAbےZdQbtpvnJ`ےdQZ|~f`ZHAbH~ㅐfJltrXQJ`tbdQZfH~bے`rd|pvnJltvpfr˂ptArdf~Hp˂rJltvpfr˂pbtlfpvdrtAJvXn`JXQrlJtAXv`fbHAZpdrtAJvXnے`JXQ`vXnbAdZ|ےbHA|drf`vXJXQrlJtArrXQJ`bdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAbJtArdnXv`ltbvpfH˂pZrd|~Hf˂rXQltbvpfHr˂pvˍpfdrQtZp˂tAJlnvpے`Jd|ZےHAZdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXnے`JXQtlJpvndQZ|~f`HAbےZdQbtpvnJ`ےdQZ|~f``JXQrH~ㅐfJltrXQJ`tbdQZfH~XQr˂dQbtp˂rJltvpfr˂ptArdf~Hp˂rJltvpfr˂ptArdrXQJ`drtAJvXn`JXQrlJtAXv`fbHAZpdrtAJvXn˂pZ`vXnbAdZ|ےbHA|drf`vXpZHAblJtArXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbAZp˂ltbvpfH˂pZrd|~Hf˂rXQltbvpfHHAbےvˍpfdrQtZp˂tAJlnvpے`Jd|ZbHAZdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXnے`JXQtlJrXQJdQZ|~f`HAbےZdQbtpvnJ`ےdQZ|~f``JXQrH~ㅐfJltrXQJ`tbdQZfH~XQr˂dQtArdp˂rJltvpfr˂ptArdf~Hp˂rJltvpfr˂ptArd`ےbdrtAJvXn`JXQrlJtAXv`fbHAZpdrtAJvXn˂pZ`vXnbAdZ|ےbHA|drf`vXp`JXQf~XQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|lJtAHAZp˂ltbvpfH˂pZrd|~Hf˂rXQltbvpfHHAXQrvˍpfdrQtZp˂tAJlnvpr˂pHfvnXbHAZdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXnے`JXQrd|rXQJdQZ|~f`HAbےZdQbtpvnJ`ےdQZ|~f`˂pZHAH~ㅐfJltrXQJ`tbdQZfH~ZHAbv`fp˂rJltvpfr˂ptArdf~Hp˂rJltvpfr˂pZdQbtbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZpdrtAJvXnbے``vXnbAdZ|ےbHA|drf`vXے`JXQ~HfpXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAblJtA˂rXltbvpfH˂pZrd|~Hf˂rXQltbvpfHJXQrvˍpfdrQtZp˂tAJlnvpr˂pvnXbHAZdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXnے`JXQrd|QJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےdQZ|~f`˂p`ZH~ㅐfJltrXQJ`tbdQZfH~ZHAXQrv`fp˂rJltvpfr˂ptArdf~Hp˂rJltvpfr˂pZdQtArbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZpdrtAJvXnQXb㉀۝`vXnbAdZ|ےbHA|drf`vX˂pZ~HfpXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAbdf˂rXltbvpfH˂pZrd|~Hf˂rXQltbvpfHpJAHrvˍpfdrQtZp˂tAJlnvpHAbےvnv`bHAZdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXnے`JXQ~HXvQJ`bdQZ|~f`HAbےZdQbtpvnJ`ےdQZ|~f`ˁ`ZH~ㅐfJltrXQJ`tbdQZfH~`JXQrf~Hp˂rJltvpfr˂ptArdf~Hp˂rJltvpfr˂p`f~AZp˂drtAJvXn`JXQrlJtAXv`fbHAZpdrtAJvXnQXb㉀`vXnbAdZ|ےbHA|drf`vX˂p`fpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAbHfpvrXQJ`ltbvpfH˂pZrd|~Hf˂rXQltbvpfHˁ`ZQXvˍpfdrQtZp˂tAJlnvpJXQrbnXv`bHAZdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXnے`JXQnXvےbHAdQZ|~f`HAbےZdQbtpvnJ`ےdQZ|~f`b㉀ۑpH~ㅐfJltrXQJ`tbdQZfH~tl|f~Hp˂rJltvpfr˂ptArdf~Hp˂rJltvpfr˂p`f~Zp˂drtAJvXn`JXQrlJtAXv`fbHAZpdrtAJvXnJAHr󙐝`vXnbAdZ|ےbHA|drf`vXZdQbtfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAbHfp`rXQJ`ltbvpfH˂pZrd|~Hf˂rXQltbvpfHˁ`ZQXvˍpfdrQtZp˂tAJlnvplJtAnvfbHAZdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXnے`JXQf~HےbAZdQZ|~f`HAbےZdQbtpvnJ`ےdQZ|~f`b㉀ۑpH~ㅐfJltrXQJ`tbdQZfH~rd|~Hfpp˂rJltvpfr˂ptArdf~Hp˂rJltvpfr˂pfpvrXQdrtAJvXn`JXQrlJtAXv`fbHAZpdrtAJvXn`ZQXb`vXnbAdZ|ےbHA|drf`vXZdQbtvnXXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAےnXv`J`ےltbvpfH˂pZrd|~Hf˂rXQltbvpfHۑpJvˍpfdrQtZp˂tAJlnvpd|Zv`fbHAZdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXn`JXQrf~HbHAZpdQZ|~f`HAbےZdQbtpvnJ`ےdQZ|~frAHr󙐂˕H~ㅐfJltrXQJ`tbdQZfH~dQbt~Hfpp˂rJltvpfr˂ptArdf~Hp˂rJltvpfbtlfpvrXQdrtAJvXn`JXQrlJtAXv`fbHAZpdtAJl˂pZ`ZQXb`vXnbAdZ|ےbHA|drf`vXlJtArvnXvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~f|ZdQb~HfJ`ےltbvpfH˂pZrd|~Hf˂rXQtbnHAbےۑpJvˍpfdrQtZp˂tAJlnvpd|Zf~HfbHAZdrtA`vXnے`JXQtlJnXv`bHAZdtAJZHAbtlJpvnbHAZrdQZ|~f`HAbےZdQbtpvnJ`ےvpf`JXQrAHQXb㉀H~ㅐfJltrXQJ`tbdQZfH~dQbtpvnp˂rJltvpfr˂ptArdf~Hp˂rltbے`JXQtArdXv`fXQJ`ےdrtAJvXn`JXQrlJtAXv`fbHAZHf`˂pZۑpJAH`vXnbAdZ|JJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKK \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv37_1.dat b/vendor/endroid/qr-code/assets/data/qrv37_1.dat new file mode 100644 index 000000000..233b589ca --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv37_1.dat @@ -0,0 +1,329 @@ +~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklkjijijijijijijijighghghghhghghghgfefefefefefefefedcdcdcdcdcdcbabababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMMMMMMNNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:98787878787878765656565656565653333434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklkjijijijijijijijighghghghgggghghgfefefefefefedcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOMNMNMNMNNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;:9:9:9:9:9:9:9878787878787878765656565656565654343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklkjijijijijijijijighghghghhghgfefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOMNMNMNMNNMNMNMMMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565654343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklkjijijijijijijijighghghghfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOMNMNMNMNMMMNMNMNLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565433333344343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklkjijijijijijijijighghghghfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPOMNMNMNMNMNMNMNMNLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABA@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565343434344343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmlklklklklkjijijijijijijijighggggggfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPOMNMNMNMNMNMNMNMNLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCBABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565343434344343433321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopoponmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPOMMMMMMNMMNMNMNMNLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565343434343334343421212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqpopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijihghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMMNMNMNMNLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565343434343434343421212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutststststststsrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijihghghggghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMMNMNMMMMLKLKLKLKLKLKLKLKJIJIJIJIJIHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565343434343434343421212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvutststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijiggghghghhghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMMMNMNMNMLKLKLKLKLKJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565333333433434343421212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijighghghghhghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565434343433434343421212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#"!"!"!"!~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijighghghghhgggggghfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787878787876565656565434343433434333321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{zyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijighghghghghghghghfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPOMMMMMNMNLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787876565656565656565434343433343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!~}~}~}~}~}~}~}|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijighghghghghghghghfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSRQRQRQRQRQRQPOPOPOPOPOPOPOPOMNMNMNMNLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijighghggggghghghghfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOMNMNMNMNLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijigghghghgghghghghfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPONMNMMNMNMNMNLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787876565656565656565333334344343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijihghghghgghghghghfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMMMMMMNMNMNMNLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787876565656565656565343434344343333321212121212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklklkjijijijijijijihghghghggggggghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[ZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMMNMNMNMMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878765656565656565653434343443434343212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMMMMMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878765656565656565653434343421212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878765656565656565653434343421212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmnmlklklklkjijijijijijijijihghggggghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababa`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878765656565656565653434343321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!"!                + + + + + + + + "!"!"!"!"!"!"!"!                + + + + + + + + "!"!"!"!"!"!"!"!                + + + + + + + + "!"!"!"!"!"!"!"!                + + + + + + + + "!"!"!"!"!"!"!"!            + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + "!"!"!"!                + + + + + "!"!"!"!               + + + + + + + + "!"!"!"!             + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + PPOONNMMiijjkkllZZ[[\\]],++**))(55667788llkkjjii==>>??@@ddccbbaa EEFFGGHH\\[[ZZYYMMNNOOPPTTSSRRQQUUVVWWXXLLKKJJII uuvvwwxxggffeedd^__``aab;;::9988nnooppqq33221100""##$$%%vvwwxxyy~~}}||++**))((**++,,--~~wwvvuutt##""!! 22334455oonnmmll::;;<<==XXWWVVUU||}}~~hggffeed + + KKLLMMNNVVUUTTSSSSTTUUVVNNMMLLKK + +[[\\]]^^FFEEDDCCccddeeff>>==<<;;kkllmmnn66554433(())**++LLKKJJIIwwxxyyzzyyxxwwvv%%$$##""00112233qqppoonn8899::;;iihhggff@@AABBCCaa``__^^ + +HHIIJJKKYYXXWWVVPPQQRRSS==<<;;:://001122QPONMMLL aabbccdd@@??>>==iijjkkll88776655 qqrrsstt00//..--%%&&''((yyzz{{||||{{zzyy((''&&%%LLKKJJIImmnnoopp~~}}||{{^^__``aa(''&&%%$99::;;<>??@@AATTSSMMLL dccbbaa`OOPPQQRRRRQQPPOOWWXXYYZZJJIIHHGG __``aabbBBAA@@??gghhiijj::998877ooppqqrr221100//,,--..//HHGGFFEE !!""#{{||}}~~uuttssrr!! 44556677mmllkkjj<<==>>??eeddccbbDDEEFFGG]]\\[[ZZ LLMMNNOOUUTTSSRRTTUUVVWW993322113399::;;KKJJIIHHeeffgghh<<;;::99mmnnoopp44332211!!""##$$uuvvwwxx~~}},,++**))))**++,,}}~~xxwwvvuu$$##""!!HHGGFFEE qqrrssttzzyyxxwwbbccddee~~}}||$##""!! ==>>??@@ddccbbaa EEFFGGHH\\[[ZZYYMMNNOOPPTTSSRRQQUUVVWWXXLLKKJJII + + ]]^^__``DDCCBBAA}}~~__^^]]\\ fgghijkl33221100""##$$%%vvwwxxyy~~}}||++**))((**++,,--~~wwvvuutt##""!! 22334455oonnmmll::;;<<==ggffeeddBBCCDDEEKKJJIIHH!!""##$$`__^^]]\SSTTUUVVNNMMLLKK + +[[\\]]^^FFEEDDCCccddeeff>>==<<;;kkllmmnn66554433 !!""ssttuuvv..--,,++00112233DDCCBBAA#$$%%&&'qqppoonn8899::;;iihhggff@@AABBCCaa``__^^ + +HHIIJJKKYYXXWWVVPPQQRRSSQQPPOONNXXYYZZ[[00//..--<<==>>??GGFFEEDDiijjkkll88776655 qqrrsstt00//..--%%&&''((yyzz{{||||{{zzyy((''&&%%--..//00ttssrrqq DDCCBBAA!!""##$$uuvvwwxxvvuuttss ffggmmnn{{zzyyxx AABBCCDD``__^^]] + + IIJJKKLLXXWWVVUUQQRRSSTTPPOONNMMYYZZ[[\\HHGGFFEE aabbccdd@@??>>== !![[ZZYYXXmmnnoopp//..--,,&&''(())zz{{||}}{{zzyyxx''&&%%$$..//0011ssrrqqpp66778899kkjjiihh>>??@@AAccbbaa`` FFGGHHIIGGFFEEDD%%&&''((\[[ZZYYXWWXXYYZZJJIIHHGG __``aabbBBAA@@??gghhiijj::998877ooppqqrr221100//##$$%%&&wwxxyyzz~~}}||{{**))((''99::;;<<@@??>>=='(())**+mmllkkjj<<==>>??eeddccbbDDEEFFGG]]\\[[ZZ LLMMNNOOUUTTSSRRTTUUVVWWMMLLKKJJ + + \\]]^^__,,++**))@@AABBCCCCBBAA@@mmnnoopp44332211!!""##$$uuvvwwxx~~}},,++**))))**++,,}}~~xxwwvvuu$$##""!!11223344ppoonnmm@@??>>==%%&&''((yyzz{{||rrqqppoo + + + +ooppqqrrwwvvuuttEEFFGGHH\\[[ZZYYMMNNOOPPTTSSRRQQUUVVWWXXLLKKJJII + + ]]^^__``DDCCBBAAeeffgghh<<;;::99""##$$%%WWVVUUTTqqrrsstt~~}}||++**))((**++,,--~~wwvvuutt##""!! 22334455oonnmmll::;;<<==ggffeeddBBCCDDEE__^^]]\\ + + JJKKLLMMCCBBAA@@))**++,,XWWVVUUT + +[[\\]]^^FFEEDDCCccddeeff>>==<<;;kkllmmnn66554433 !!""ssttuuvv..--,,++''(())**{{||}}~~zzyyxxww&&%%$$##==>>??@@<<;;::99+,,--../iihhggff@@AABBCCaa``__^^ + +HHIIJJKKYYXXWWVVPPQQRRSSQQPPOONNXXYYZZ[[IIHHGGFF ``aabbcc((''&&%%DDEEFFGG??>>==<< qqrrsstt00//..--%%&&''((yyzz{{||||{{zzyy((''&&%%--..//00ttssrrqq 55667788llkkjjii<<;;::99))**++,,}}~~nnmmggff ssttuuvvssrrqqppIIJJKKLLXXWWVVUUQQRRSSTTPPOONNMMYYZZ[[\\HHGGFFEE aabbccdd@@??>>==iijjkkll88776655&&''(())SSMMLLKKuuvvwwxx{{zzyyxx''&&%%$$..//0011ssrrqqpp66778899kkjjiihh>>??@@AAccbbaa`` FFGGHHII[[ZZYYXXNNOOPPQQ??>>==<<--..//00TSSRQPON __``aabbBBAA@@??gghhiijj::998877ooppqqrr221100//##$$%%&&wwxxyyzz~~}}||{{**))((''++,,--..vvuuttss""!! AABBCCDD33221100/0011223eeddccbbDDEEFFGG]]\\[[ZZ LLMMNNOOUUTTSSRRTTUUVVWWMMLLKKJJ + + \\]]^^__EEDDCCBBddeeffgg$$##""!!HHIIJJKK;;::9987!!""##$$uuvvwwxx~~}},,++**))))**++,,}}~~xxwwvvuu$$##""!!11223344ppoonnmm99::;;<>==<<;;kkllmmnn66554433 !!""ssttuuvv..--,,++''(())**{{||}}~~zzyyxxww&&%%$$##//001122rrqqppooEEFFGGHH//..--,,34567899aa``__^^ + +HHIIJJKKYYXXWWVVPPQQRRSSQQPPOONNXXYYZZ[[IIHHGGFF ``aabbccAA@@??>>hhiijjkk LLMMSSTT65433221%%&&''((yyzz{{||||{{zzyy((''&&%%--..//00ttssrrqq 55667788llkkjjii==>>??@@ddccbbaa 4433221111223344aa``__^^{{||}}~~jihggffe + +QQRRSSTTPPOONNMMYYZZ[[\\HHGGFFEE aabbccdd@@??>>==iijjkkll88776655 qqrrsstt00//..--..//0011FFEEDDCC!""##$$%}}~~ssrrqqpp66778899kkjjiihh>>??@@AAccbbaa`` FFGGHHII[[ZZYYXXNNOOPPQQSSRRQQPPVVWWXXYY221100//::;;<<==IIHHGGFFgghhiijj::998877ooppqqrr221100//##$$%%&&wwxxyyzz~~}}||{{**))((''++,,--..vvuuttss""!! 33445566nnmmllkkIIJJKKLL++**))((::;;<<==]]\\[[ZZ LLMMNNOOUUTTSSRRTTUUVVWWMMLLKKJJ + + \\]]^^__EEDDCCBBddeeffgg==<<;;::llmmnnoo~~}}||UUVVWWXX100//..-))**++,,}}~~xxwwvvuu$$##""!!11223344ppoonnmm99::;;<>??@@AAEEDDCCBBkkllmmnn66554433 !!""ssttuuvv..--,,++''(())**{{||}}~~zzyyxxww&&%%$$##//001122rrqqppoo778899::jjiihhggMMSSTTUU''&&%%$$>>??@@AAYYXXWWVVPPQQRRSSQQPPOONNXXYYZZ[[IIHHGGFF ``aabbccAA@@??>>hhiijjkk99887766ppqqrrss{{zzyyxxYYZZ[[\\-,,++**)--..//00ttssrrqq 55667788llkkjjii==>>??@@ddccbbaa EEFFGGHH\\[[ZZYY~~}},,++**))99::;;<>==iijjkkll88776655 qqrrsstt00//..--%%&&''((yyzz{{||||{{zzyy((''&&%%;;<<==>>>>==<<;;)**++,,-kkjjiihh>>??@@AAccbbaa`` FFGGHHII[[ZZYYXXNNOOPPQQSSRRQQPPVVWWXXYYKKJJIIHH + + ^^__``aa**))((''BBCCDDEEAA@@??>>ooppqqrr221100//##$$%%&&wwxxyyzz~~}}||{{**))((''++,,--..vvuuttss""!! 33445566nnmmllkk;;<<==>>ffeeddccVVWWXXYY##""!! BBCCDDEEUUTTSSRRTTUUVVWWMMLLKKJJ + + \\]]^^__EEDDCCBBddeeffgg==<<;;::llmmnnoo55443322 !!""##ttuuvvwwwwvvuutt ]]^^__``)((''&&%11223344ppoonnmm99::;;<>??@@UUTTSSMM$$%%&&'']\\[[ZZY + + ]]^^__``DDCCBBAAeeffgghh<<;;::99mmnnoopp44332211!!""##$$uuvvwwxx~~}},,++**))))**++,,}}~~xxwwvvuu$$##""!!??@@AABB::993322-..//001ggffeeddBBCCDDEE__^^]]\\ + + JJKKLLMMWWVVUUTTRRSSTTUUOONNMMLL ZZ[[\\]]GGFFEEDDbbccddee&&%%$$##FFGGHHII==<<;;:: !!""ssttuuvv..--,,++''(())**{{||}}~~zzyyxxww&&%%$$##//001122rrqqppoo778899::jjiihhgg??@@AABBbbaa``__ ZZ[[\\]]FFGGHHIIQQPPOONNXXYYZZ[[IIHHGGFF ``aabbccAA@@??>>hhiijjkk99887766ppqqrrss1100//..$$%%&&''xxyyzz{{ssrrqqpp + + aabbccdd~~}}%$$##""!55667788llkkjjii==>>??@@ddccbbaa EEFFGGHH\\[[ZZYYMMNNOOPPTTSSRRQQxxwwvvuu$$##""!!AABBCCDDLLKKJJII(())**++YXXWWVVU aabbccdd@@??>>==iijjkkll88776655 qqrrsstt00//..--%%&&''((yyzz{{||||{{zzyy((''&&%%--..//00ttssrrqq CCDDEEFF1100//..12233456ccbbaa`` FFGGHHII[[ZZYYXXNNOOPPQQSSRRQQPPVVWWXXYYKKJJIIHH + + ^^__``aaCCBBAA@@ffgghhii""!! JJKKLLMM99876543##$$%%&&wwxxyyzz~~}}||{{**))((''++,,--..vvuuttss""!! 33445566nnmmllkk;;<<==>>ffeeddccCCDDEEFF^^]]\\[[ + + ^^__``aa~~}}||{{JJKKLLMMMMLLKKJJ + + \\]]^^__EEDDCCBBddeeffgg==<<;;::llmmnnoo55443322 !!""##ttuuvvww~~--,,++**(())**++||}}~~oonnmmggeeffggmm||{{zzyy! 99::;;<>==<<jjkkllmm~~SSTTUUVV3221100/''(())**{{||}}~~zzyyxxww&&%%$$##//001122rrqqppoo778899::jjiihhgg??@@AABBbbaa``__ GGHHIIJJZZYYXXWWbbccddeezzyyxxwwNOPQRSSTIIHHGGFF ``aabbccAA@@??>>hhiijjkk99887766ppqqrrss1100//..$$%%&&''xxyyzz{{}}||{{zz))((''&&,,--..//ffeeddcc nnooppqqxxwwvvuu==>>??@@ddccbbaa EEFFGGHH\\[[ZZYYMMNNOOPPTTSSRRQQUUVVWWXXLLKKJJII + + ppoonnmmIIJJKKLLDDCCBBAA00112233ONMMLLKKiijjkkll88776655 qqrrsstt00//..--%%&&''((yyzz{{||||{{zzyy((''&&%%--..//00ttssrrqq 55667788llkkjjiiKKLLMMSS))((''&&<<==>>??[[ZZYYXXNNOOPPQQSSRRQQPPVVWWXXYYKKJJIIHH + + ^^__``aaCCBBAA@@ffgghhii;;::9988nnooppqq}}||{{zzWWXXYYZZ/..--,,+++,,--..vvuuttss""!! 33445566nnmmllkk;;<<==>>ffeeddccCCDDEEFF^^]]\\[[ + + KKLLMMNNVVUUTTSSffggmmnnvvuuttss TUUVVWWXEEDDCCBBddeeffgg==<<;;::llmmnnoo55443322 !!""##ttuuvvww~~--,,++**(())**++||}}~~yyxxwwvv%%$$##""00112233bbaa``__ + + rrssttuuttssrrqqAABBCCDD``__^^]] + + IIJJKKLLXXWWVVUUQQRRSSTTPPOONNMMYYZZ[[\\HHGGFFEE llkkjjiiMMNNOOPP@@??>>==99::;;<>==<<jjkkllmm77665544 !!rrssttuuyyxxwwvv[[\\]]^^+**))(('//001122rrqqppoo778899::jjiihhgg??@@AABBbbaa``__ GGHHIIJJZZYYXXWWOOPPQQRRRRQQPPOO + +ooppqqrrrrqqppoo + + XYYZZ[[\AA@@??>>hhiijjkk99887766ppqqrrss1100//..$$%%&&''xxyyzz{{}}||{{zz))((''&&,,--..//uuttssrr!! 44556677^^]]\\[[vvwwxxyyppoonnmmEEFFGGHH\\[[ZZYYMMNNOOPPTTSSRRQQUUVVWWXXLLKKJJII + + ]]^^__``DDCCBBAAhhggffeeQQRRSSTT<<;;::99==>>??@@FFEEDDCC qqrrsstt00//..--%%&&''((yyzz{{||||{{zzyy((''&&%%--..//00ttssrrqq 55667788llkkjjii==>>??@@ddccbbaa XXYYZZ[[!! DDEEFFGGSSRRQQPPVVWWXXYYKKJJIIHH + + ^^__``aaCCBBAA@@ffgghhii;;::9988nnooppqq33221100""##$$%%vvwwxxyyuuttssrr + +__``aabb'&&%%$$#33445566nnmmllkk;;<<==>>ffeeddccCCDDEEFF^^]]\\[[ + + KKLLMMNNVVUUTTSSSSTTUUVVNNMMLLKK ssttuuvvnnmmggff\]]^^__`==<<;;::llmmnnoo55443322 !!""##ttuuvvww~~--,,++**(())**++||}}~~yyxxwwvv%%$$##""00112233qqppoonn8899::;;ZZYYXXWWzz{{||}}lkjihggf IIJJKKLLXXWWVVUUQQRRSSTTPPOONNMMYYZZ[[\\HHGGFFEE aabbccdd@@??>>==ddccbbaa UUVVWWXX33221100AABBCCDDBBAA@@??!!""##$$uuvvwwxx~~}},,++**))))**++,,}}~~xxwwvvuu$$##""!!11223344ppoonnmm99::;;<>==<<jjkkllmm77665544 !!rrssttuu//..--,,&&''(())zz{{||}}qqppoonn ccddeeff~~}}||{{#""!! 778899::jjiihhgg??@@AABBbbaa``__ GGHHIIJJZZYYXXWWOOPPQQRRRRQQPPOOWWXXYYZZJJIIHHGGwwxxyyzzeeddccbb`aabbccd99887766ppqqrrss1100//..$$%%&&''xxyyzz{{}}||{{zz))((''&&,,--..//uuttssrr!! 44556677mmllkkjj<<==>>??VVUUTTSS~~feeddccb + + MMNNOOPPTTSSRRQQUUVVWWXXLLKKJJII + + ]]^^__``DDCCBBAAeeffgghh<<;;::99``__^^]] + + YYZZ[[\\//..--,,EEFFGGHH>>==<<;;%%&&''((yyzz{{||||{{zzyy((''&&%%--..//00ttssrrqq 55667788llkkjjii==>>??@@ddccbbaa EEFFGGHH\\[[ZZYY``aabbcc||{{zzyyLLMMNOPQKKJJIIHH + + ^^__``aaCCBBAA@@ffgghhii;;::9988nnooppqq33221100""##$$%%vvwwxxyy~~}}||++**))((**++,,--~~mmggffeeggmmnnoozzyyxxww;;<<==>>ffeeddccCCDDEEFF^^]]\\[[ + + KKLLMMNNVVUUTTSSSSTTUUVVNNMMLLKK + +[[\\]]^^FFEEDDCC{{||}}~~aa``__^^ + + deeffggh55443322 !!""##ttuuvvww~~--,,++**(())**++||}}~~yyxxwwvv%%$$##""00112233qqppoonn8899::;;iihhggff@@AABBCCMMLLKKJJ !!""baa``__^QQRRSSTTPPOONNMMYYZZ[[\\HHGGFFEE aabbccdd@@??>>==iijjkkll88776655 --..//00\\[[ZZYY + + ]]^^__``++**))((IIJJKKLL::998765))**++,,}}~~xxwwvvuu$$##""!!11223344ppoonnmm99::;;<>==<<jjkkllmm77665544 !!rrssttuu//..--,,&&''(())zz{{||}}{{zzyyxx''&&%%$$..//0011ddccbbaa + + ppqqrrssvvuuttss??@@AABBbbaa``__ GGHHIIJJZZYYXXWWOOPPQQRRRRQQPPOOWWXXYYZZJJIIHHGG __``aabbBBAA@@??]]\\[[ZZ ijklmmnn1100//..$$%%&&''xxyyzz{{}}||{{zz))((''&&,,--..//uuttssrr!! 44556677mmllkkjj<<==>>??eeddccbbDDEEFFGGIIHHGGFF##$$%%&&^]]\\[[ZUUVVWWXXLLKKJJII + + ]]^^__``DDCCBBAAeeffgghh<<;;::99mmnnoopp44332211!!""##$$11223344XXWWVVUU aabbccdd''&&%%$$MMSSTTUU43322110--..//00ttssrrqq 55667788llkkjjii==>>??@@ddccbbaa EEFFGGHH\\[[ZZYYMMNNOOPPTTSSRRQQmmnnooppttssrrqq + + VWWXXYYZCCBBAA@@ffgghhii;;::9988nnooppqq33221100""##$$%%vvwwxxyy~~}}||++**))((**++,,--~~wwvvuutt##""!! 22334455``__^^]] ttuuvvwwrrqqppooCCDDEEFF^^]]\\[[ + + KKLLMMNNVVUUTTSSSSTTUUVVNNMMLLKK + +[[\\]]^^FFEEDDCCccddeeff>>==<<;; !!""##YYXXWWVVooppqqrr~~--,,++**(())**++||}}~~yyxxwwvv%%$$##""00112233qqppoonn8899::;;iihhggff@@AABBCCaa``__^^ + +HHIIJJKKEEDDCCBB''(())**ZYYXXWWVYYZZ[[\\HHGGFFEE aabbccdd@@??>>==iijjkkll88776655 qqrrsstt00//..--%%&&''((55667788TTSSRRQQeeffgghh##""!! VVWWXXYY0//..--,11223344ppoonnmm99::;;<>==<<jjkkllmm77665544 !!rrssttuu//..--,,&&''(())zz{{||}}{{zzyyxx''&&%%$$..//0011ssrrqqpp66778899\\[[ZZYYxxyyzz{{nnmmlkji GGHHIIJJZZYYXXWWOOPPQQRRRRQQPPOOWWXXYYZZJJIIHHGG __``aabbBBAA@@??gghhiijj::998877$$%%&&''UUTTSSMMssttuuvv}}||{{zz))((''&&,,--..//uuttssrr!! 44556677mmllkkjj<<==>>??eeddccbbDDEEFFGG]]\\[[ZZ LLMMNNOOAA@@??>>++,,--..VUUTTSSR + + ]]^^__``DDCCBBAAeeffgghh<<;;::99mmnnoopp44332211!!""##$$uuvvwwxx~~}},,++**))))**++,,99::;;<<==>>??@@ddccbbaa XXYYZZ[[!! DDEEFFGGSSRRQQPPVVWWXXYYKKJJIIHH + + ^^__``aaCCBBAA@@ffgghhii;;::9988nnooppqqzzyyxxwwbbccddeessrrqqppFFGGHHIIAABBCCDD``__^^]] + + \\]]^^__~~}}HHIIJJKKOONNMMLL ZZ[[\\]]GGFFEEDDbbccddee??>>==<<jjkkllmm77665544 !!rrssttuuvvuuttss ffggmmnnoonnmmllJJKKLLMMEEFFGGHH\\[[ZZYY``aabbcc||{{zzyyLLMMNOPQKKJJIIHH + + ^^__``aaCCBBAA@@ffgghhii;;::9988nnooppqq33221100""##$$%%vvwwxxyyrrqqppoo + + + +ooppqqrrkkjjiihhNNOOPPQQIIJJKKLLXXWWVVUUddeeffggxxwwvvuu RSSTTUUVGGFFEEDDbbccddee??>>==<<jjkkllmm77665544 !!rrssttuu//..--,,&&''(())zz{{||}}nnmmggff ssttuuvvggffeeddRRSSTTUUMMNNOOPPTTSSRRQQmmnnooppttssrrqq + + VWWXXYYZCCBBAA@@ffgghhii;;::9988nnooppqq33221100""##$$%%vvwwxxyy~~}}||++**))((**++,,--~~eeddccbbwwxxyyzzccbbaa`` VVWWXXYYQQRRSSTTPPOONNMM + + qqrrssttppoonnmmZ[[\\]]^??>>==<<jjkkllmm77665544 !!rrssttuu//..--,,&&''(())zz{{||}}{{zzyyxx''&&%%$$..//0011aa``__^^{{||}}~~__^^]]\\ + + ZZ[[\\]]UUVVWWXXLLKKJJII uuvvwwxxggffeedd^__``aab;;::9988nnooppqq33221100""##$$%%vvwwxxyy~~}}||++**))((**++,,--~~wwvvuutt##""!! 22334455]]\\[[ZZ[[ZZYYXX + + ^^__``aaYYZZ[[\\HHGGFFEEyyzz{{||ccbbaa`` + +bccddeef77665544 !!rrssttuu//..--,,&&''(())zz{{||}}{{zzyyxx''&&%%$$..//0011ssrrqqpp66778899YYXXWWVV !!""##WWVVUUTTbbccddee]]^^__``DDCCBBAA}}~~__^^]]\\ fgghijkl33221100""##$$%%vvwwxxyy~~}}||++**))((**++,,--~~wwvvuutt##""!! 22334455oonnmmll::;;<<==UUTTSSMM$$%%&&''SSRRQQPPffgghhiiaabbccdd@@??>>== !![[ZZYYXXmmnnoopp//..--,,&&''(())zz{{||}}{{zzyyxx''&&%%$$..//0011ssrrqqpp66778899kkjjiihh>>??@@AALLKKJJII(())**++OONNMMLLjjkkllmmeeffgghh<<;;::99""##$$%%WWVVUUTTqqrrsstt~~}}||++**))((**++,,--~~wwvvuutt##""!! 22334455oonnmmll::;;<<==ggffeeddBBCCDDEEHHGGFFEE,,--..//KKJJIIHHnnooppqqiijjkkll88776655&&''(())SSMMLLKKuuvvwwxx{{zzyyxx''&&%%$$..//0011ssrrqqpp66778899kkjjiihh>>??@@AAccbbaa`` FFGGHHIIDDCCBBAA00112233GGFFEEDD !!rrssttuummnnoopp44332211**++,,--JJIIHHGG !yyzz{{||wwvvuutt##""!! 22334455oonnmmll::;;<<==ggffeeddBBCCDDEE__^^]]\\ + + JJKKLLMM@@??>>==99::;;<>??@@AAccbbaa`` FFGGHHII[[ZZYYXXNNOOPPQQ<<;;::99==>>??@@??>>==<<&&''(())zz{{||}}uuvvwwxx~~}},,++**))223399::BBAA@@??%&&''(()oonnmmll::;;<<==ggffeeddBBCCDDEE__^^]]\\ + + JJKKLLMMWWVVUUTTRRSSTTUU33221100AABBCCDD;;::9988**++,,--~~yyzz{{||||{{zzyy((''&&%%;;<<==>>>>==<<;;)**++,,-kkjjiihh>>??@@AAccbbaa`` FFGGHHII[[ZZYYXXNNOOPPQQSSRRQQPPVVWWXXYY//..--,,EEFFGGHH77665544..//0011}}~~xxwwvvuu$$##""!!??@@AABB::993322-..//001ggffeeddBBCCDDEE__^^]]\\ + + JJKKLLMMWWVVUUTTRRSSTTUUOONNMMLL ZZ[[\\]]++**))((IIJJKKLL3322110022334455ttssrrqq CCDDEEFF1100//..12233456ccbbaa`` FFGGHHII[[ZZYYXXNNOOPPQQSSRRQQPPVVWWXXYYKKJJIIHH + + ^^__``aa''&&%%$$MMSSTTUU//..--,,66778899ppoonnmmGGHHIIJJ--,,++**7899::;;__^^]]\\ + + JJKKLLMMWWVVUUTTRRSSTTUUOONNMMLL ZZ[[\\]]GGFFEEDDbbccddee##""!! VVWWXXYY~~}}||++**))((::;;<<==llkkjjiiKKLLMMSS))((''&&<<==>>??[[ZZYYXXNNOOPPQQSSRRQQPPVVWWXXYYKKJJIIHH + + ^^__``aaCCBBAA@@ffgghhiiZZ[[\\]]{{zzyyxx''&&%%$$>>??@@AAhhggffeeTTUUVVWW%%$$##""@@AABBCCWWVVUUTTRRSSTTUUOONNMMLL ZZ[[\\]]GGFFEEDDbbccddee??>>==<<jjkkllmm~~}}||{{^^__``aawwvvuutt##""!! BBCCDDEEZHAbZHAb|ZdQb|ZdQbp`fnXbHAZprtAJldrtAH~fH~fr˂pr˂ptlJtlJfpvfpvp˂rp˂rdrtAdtAJH~fH~fr˂pbtltlJfpvfpvXQJ`ےp˂rdrtAJnvpvXnۀ˂pZ˂pZlJtAlJtApvnpvn˂rXQ˂rXQdrtAJdrtAJ~f`~f`˂pZ˂pZlJtAlJtApvnpvn˂rXQ˂rXQJltf`vXfH~ZHAbr˂plJtArlJtArvnXnrXQrXQJrtAJlrtAJlf`vf`v˂pZHA˂pZHAlJtArlJtArvnXvnXrXQJrXQJrtAJlrtAJlfH~nvpے`JXQtJArddQbt璀nXvnXvrXQJ`rXQJ`tAJltAJlf`vXf`vXpZHAbpZHAbJtArdJtArdnXvnXvrXQJ`rXQJ`tAJlJltf`vXfZHAbXQr˂dQbtd|Zf~HfXQJ`ےXQJ`ےJltJlt`vXn`vXnZHAbZHAbtArdtArdnXv`nXv`XQJ`ےXQJ`ےJltJltے`JXQے`JXQtlJtlJ~Hfpv`f˂rXQbQZ|Jlt`vXn`vXnZHAbZHAbtArdtArdnXv`nXv`XQJ`ےXQJ`ےJltltb`vXnZHAbZHAbJtAdtArdnXv`nXv`bHAZXQJ`ےltbff`vvpfHHAbےHAbےrd|rd|Xv`fXv`fJ`ےJ`ےltbltbvXnvXnHAbےHAbےrd|rd|Xv`fXv`fJ`ےJ`ےbdQtAJnff`pf`JXQZA`Jd|Zdfv`fJ`ے`ےbtbdQtbdQXnvXnvbے`bے`d|Zd|Zv`fv`f`ےb`ےbtbdQtbdQf`vXfH~r˂p|ZdlJtAr`f~`f~ےbHAےbHAtbdQZtbdQZnvpnvpے`Jے`J|ZdQ|ZdQ`f~`fHےbHAےbHAtbdQZbnvnvp˂pp`JXQl|ZdQdQtArdpvnbHAZbHAZbdQZ|bdQZ|vpfvpfے`JXQے`JXQ|ZdQb|ZdQbf~Hf~HbHAZbHAZbdQZ|bdQZ|r˂pr˂ptArdtArdvnX~HfpJ`ےdrtAJbdQZ|vpfvpfے`JXQے`JXQ|ZdQb|ZdQbf~HfHfbHAZbHAZbdQZ|nvpvpfے`JXQے`JXQ|ZdQb|ZdQbf~Hf~Hp˂rbHAZdQZ|Xnv~fvn`JXQr`JXQrZdQbtZdQbt~Hf~HfbHAZpbHAZpdQZ|dQZ|vpfHvpfH`JXQr`JXQrZdQbtZdQbt~Hf~HfbHAZpbHAZpltb`vXnH~fr˂pXQrbtdQbt~Hfp~HfpHAZp˂HAZp˂Z|dZ|dpfH~pfH~JXQrJXQrdQbtdQbt~Hfp~HfpHAZp˂HAZp˂Z|dZ|dnvpf`vXZHAbQbtld|ZQHfpvHfpvZp˂Zp˂|dr|drfH~fH~XQr˂XQr˂btlbtlHfpvfpvZp˂Zdr|drpfHfH~ZHAbr˂pbtlf~Xv`fp˂rp˂rdrtAdrtAH~fH~fr˂pr˂ptlJtlJfpvfpvp˂rp˂rdrtAdrtAZHAbZHAb|ZdQb|ZdQbv`fvnXbHAXQJltbdrAJH~fH~fr˂pr˂ptlJtlJfpvpvnp˂rdrtAdrtAfHfH~fr˂pr˂ptlJtlJfpvfpvXQHAZpp`ےdrtAJpfH~vpf˂pZ˂pZlJtAlJtApvnpvn˂rXQ˂rXQdrtAJdrtAJ~f`~f`˂pZ˂pZlJtAlJtApvnpvn˂rXQ˂rXQdQZ|vpf`vXnZHAblJtAlJtArvnXvnXrXQJrXQJrtAJlrtAJlf`vf`v˂pZHA˂pZHAlJtArlJtArvnXvnXrXQJrXQJrtAJlrtAJl`vXnH~fے`JXQJtArdblJtnXvnXvrXQJ`rXQJ`tAJltAJlf`vXf`vXpZHAbpZHAJtArdJtArdnXvnrXQJrXQJ`tAJltAJlf`vXf`vXے`JXQZHAbJtArdHfvnX~HfXQJ`ےXQJ`ےJltJlt`vXn`vXnZHAbZHAbtArdtArdnXv`nXv`XQJ`ےXQJ`ےJltJltے`JXQے`JXQtlJtlJ~Hfpv`p˂`ےbdQZ|tbdQZ`vXn`vXnZHAbZHAےtArdtArdnXv`rXQJ`XQJ`ےJltJlt`vXn`vXnZHAbZHAbtArdtArdnXv`nXv`˂rXQbHAZpltbf`vH~fHAbےHAbےrd|rd|Xv`fXv`fJ`ےJ`ےltbltbvXnvXnHAbےHAbےrd|rd|Xv`fXv`fJ`ےJ`ےdrtAJH~fvpf`JXQd|Zd|Zv`fv`f`ےb`ےbtbdQtbdQXnvXnvbے`bے`d|Zd|Zv`fv`f`ےb`ےbtbdQtbdQvpfZHAbr˂p|ZdArd|`f~`f~ےbHAےbHAtbdQZtbdQZnvpnvpے`Jے`JXQ|ZdQf~`f~`ےHAےbHAtbdQZtbdQZnvpnvpr˂pے`JXQ|ZdQv`fpvnbHAZbHAZbdQZ|bdQZ|vpfvpfے`JXQے`JXQ|ZdQb|ZdQbf~Hf~HbHAZbHAZbdQZ|bdQZ|r˂pr˂ptArdtArdv~rXQJHAZp˂drtAJ|drvpfvpfے`JXQ`JXQr|ZdQbf~Hf~HےHAZbHAZbdQZ|bdQZ|vpfvpfے`JXQے`JXQ|ZdQb|ZdQbf~Hf~HJ`ے˂rXQdQtAJlXnv`vXn`JXQr`JXQrZdQbtZdQbt~Hf~HfbHAZpbHAZpdQZ|dQZ|vpfHvpfH`JXQr`JXQrZdQbtZdQbt~HfHfpbHAZpbHAZltb`vXnH~frZAbdQbtdQbt~Hfp~HfpHAZp˂HAZp˂Z|dZ|dpfH~pfH~JXQrJXQrdQbtdQbt~Hfp~HfpHAZp˂HAZp˂Z|dZ|dH~f˂pZ`JXQrQbtlZdQbtHfpvHfpvZp˂Zp˂|dr|dtAfH~fH~XQr˂rbtbtlHfpvHfpvZp˂Zp˂|dr|drfH~fH~ZHAbr˂pbtl~HfpXv`fp˂rp˂rdrtAdrtAH~fH~fr˂pr˂ptlJtlJfpvfpvp˂rp˂rdrtAdrtAZHAbZHAb|ZdQb|ZdQbHfpv`ےbrXQJltbQtAJlH~fH~fr˂pbtltlJfpvfpvp˂rp˂rdrtAdrtAH~fH~fr˂pr˂ptlJtlJfpvfpvbHAZpJ`ےtbdQf~f`vpf˂pZ˂pZlJtAlJtApvnpvn˂rXQ˂rXQdrtAJdrtAJ~f`~f`˂pZ˂pZlJtAlJtApvnvnr˂rXQdrtAdQdQZ|lvp``vXHے`JlJtArlJtArvnXvnXrXQJrXQJrtAJlrtAJlf`vf`v˂pZHA˂pZHAlJtArlJtArvnXvnXrXQJrXQJrtAJlrtAJl`vXnHAbے˂pZJAr|lJtnXvnXvrXQJ`rXQJ`tAJlJltf`vXfZHAbpZHAblJtAdJtArdnXvnXvrXQJ`rXQJ`tAJltAJlf`vXf`vXے`pZZHAXQrJtAdQbvnX~fpvXQJ`ےXQJ`ےJltJlt`vXn`vXnZHAbZHAbtArdtArdnXv`nXv`XQJ`ےXQJ`ےJltJltے`JXQے`JXQtlJtlJnXvHAZp˂`ےbZdrttbdQZ`vXnZHAbZHAbJtAdtArdnXv`nXv`XQJ`ےXQJ`ےJltJlt`vXn`vXnZHAbZHAbtArdtArdnXv`nXv`˂rXQbHAZpZ|dvXnH~fHAbےHAbےrd|rd|Xv`fXv`fJ`ےJ`ےltbltbvXnvXnHAbےHAے`rd|rdfXv`fXQJ`ےJ`ےZ|dtbdQvXn~fZXQr˂d|Zd|Zv`fv`f`ےb`ےbtbdQtbdQXnvXnvbے`bے`d|Zd|Zv`fv`f`ےb`ےbtbdQtbdQvpf`JXQrHAbےZdQbtArd|`f~`fHےbHAےbHAtbdQZbnvnvpے`Jے`J|ZdQ|ZdQ`f~`f~ےbHAےbHAtbdQZtbdQZnvpnvpHAbے˂pZtlJv`fnXv`bHAZbHAZbdQZ|bdQZ|vpfvpfے`JXQے`JXQ|ZdQb|ZdQbf~Hf~HbHAZbHAZbdQZ|bdQZ|r˂pr˂ptArdtArd`f~rXQHAHAZp`AJlt|dnvpfے`JXQے`JXQ|ZdQb|ZdQbf~Hf~HbHAZbHAZbdQZ|bdQZ|vpfvpfے`JXQے`JXQ|ZdQb|ZdQbf~Hf~HJ`p˂˂brtAJlvpfH`vnvp`JXQr`JXQrZdQbtZdQbt~Hf~HfbHAZpbHAZpdQZ|dQZ|vpfHvpfH`JXQrJXQrbZdQbt~Hf~HfHAZpbHAZprtAJlZ|dvpfHHAbpZHAbdQbtdQbt~Hfp~HfpHAZp˂HAZp˂Z|dZ|dpfH~pfH~JXQrJXQrdQbtdQbt~Hfp~HfpHAZp˂HAZp˂Z|dZ|dHXn˂pZ`JXQrlJtAZdQbHfpvfpvZp˂Zdr|drpfHfH~XQr˂XQr˂btlbtlHfpvHfpvZp˂Zp˂|dr|drfH~fH~`JXQrHAbےtArd~Hfpf~Hp˂rp˂rdrtAdrtAH~fH~fr˂pr˂ptlJtlJfpvfpvp˂rp˂rdrtAdtAJZHAbZHAb|ZdQb|ZdQbHfpvZp˂ےbHAbdQZ|vffH~fr˂pr˂ptlJtlJfpvfpvp˂rp˂rdrtAdrtAH~fH~fr˂pr˂ptlJtlJfpvfpvrXQJHAZdtbdQ~f`fH~˂pZ˂pZlJtAlJtApvnpvn˂rXQ˂rXQdrtAJdtAJl~f`~fZ˂pZtlJlJtApvnpvn˂rXQ˂rXQtbdQrtAJl~f`JQr˂pے`JlJtArlJtArvnXvnXrXQJrXQJrtAJlrtAJlf`vf`v˂pZHA˂pZHAlJtArlJtArvnXvnXrXQJrXQJrtAJlrtAJlvpfHHAbے˂pZrd|JtArdnXvnrXQJrXQJ`tAJltAJlf`vXf`vXpZHAbpZHAbJtArdJtArdnXvnXvrXQJ`rXQJ`tAJltAJlf`vXf`vX˂pZ`JXQr|ZdQbvnv`fpvXQJ`ےXQJ`ےJltJlt`vXn`vXnZHAbZHAbtArdtArdnXv`nXv`XQJ`ےXQJ`ےJltltbے`JXQے`JXQtlJtlJnXHrXQJ`Zp˂drt`vXn`vXnZHAbZHAbtArdtArdnXv`nXv`XQJ`ےXQJ`ےJltJlt`vXn`vXnZHAbZHAbtArdtArdnXv`nXv``ےbrtAdQZZ|l璍vXnf`vXHAbےHAbےrd|rd|Xv`fXv`fJ`ےJ`ےltbtbnvXnHAbےHAbےtAd|rd|Xv`fXv`fJ`ےJ`ےZ|dtbdQvXnZHAbXQr˂d|Zd|Zv`fv`f`ےb`ےbtbdQtbdQXnvXnvbے`bے`d|Zd|Zv`fv`f`ےb`ےbtbdQtbdQ~f``pZHAHAXQrZdQbtf~`f~`ےHAےbHAtbdQZtbdQZnvpnvpے`Jے`J|ZdQ|ZdQ`f~`f~ےbHAےbHAtbdQZtbdQZnvpnvpHAbے˂p`tlJf~HnXv`bHAZbHAZbdQZ|bdQZ|vpfvpfے`JXQے`JXQ|ZdQb|ZdQbf~HfHfbHAZbHAZbdQZ|nvpr˂pr˂ptArdtArdfpvےbHArXQJ`AJltvpfvpfے`JXQے`JXQ|ZdQb|ZdQbf~Hf~HbHAZbHAZbdQZ|bdQZ|vpfvpfے`JXQے`JXQ|ZdQb|ZdQbf~Hf~HHAZp˂|drtbdQZvpf~nvp`JXQr`JXQrZdQbtZdQbt~HfHfpbHAZpbHAZdQZ|vpfvpfH`JXQr`JXQrZdQbtZdQbt~Hf~HfbHAZpbHAZprtAJlZ|dvpfHے`JXpZAb`dQbtdQbt~Hfp~HfpHAZp˂HAZp˂Z|dZ|dpfH~pfH~JXQrJXQrdQbtdQbt~Hfp~HfpHAZp˂HAZp˂Z|dZ|dvXnbے`˂pZHAlJtAHfpvHfpvZp˂Zp˂|dr|drfH~fH~XQr˂XQr˂btlbtlHfpvHfpvZp˂Zp˂|dr|drfH~fH~`JXQHAJXQrbtArdtfpvf~fp˂rp˂rdrtAdrtAH~fH~fr˂pr˂ptlJtlJfpvpvnp˂rdrtAdrtAfHfZHAbZHAb|ZdQb|ZdQbnXv`Zp˂ےbHAbdQZH~fH~fr˂pr˂ptlJtlJfpvfpvp˂rp˂rdrtAdrtAH~fH~fr˂pr˂ptlJtlJfpvfpvrXQJtAJl|drf`vXfH~˂pZ˂pZlJtAlJtApvnvnr˂rXQdrtAJdrtAJHf`~f`˂pZ˂pZlJtAlJtApvnpvn˂rXQ˂rXQ|drtbdQZXnvQr˂pJXQrlJtArlJtArvnXvnXrXQJrXQJrtAJlrtAJlf`vf`v˂pZHA˂pZHAlJtArlJtArvnXvnXrXQJrXQJrtAJltAJlvpfHJXQrbے`rZdQnXvnXvrXQJ`rXQJ`tAJltAJlf`vXf`vXpZHAbpZHAbJtArdJtArdnXvnXvrXQJ`rXQJ`tAJltAJlf`vXf`vXbے`tl|lJtAnXv`vnXXQJ`ےXQJ`ےJltJlt`vXn`vXnZHAbZHAےtArdtArdnXv`rXQJ`XQJ`ےJltJlt`vXnے`JXQے`JXQtlJtlJf~HrXQJ`Zp˂rtAJl`vXn`vXnZHAbZHAbtArdtArdnXv`nXv`XQJ`ےXQJ`ےJltJlt`vXn`vXnZHAbZHAbtArdtArdnXv`nXv``ےtbdQZtAJlnvpf`vXHAbےHAے`rd|rdfXv`fXQJ`ےJ`ےltbltbvXnvXnHAbےHAbےrd|rd|Xv`fXv`fJ`ےJ`ےtAJl|drpfH~ZHAb˂pZHd|Zd|Zv`fv`f`ےb`ےbtbdQtbdQXnvXnvbے`bے`d|Zd|Zv`fv`f`ےb`ےbtbdQtbn~v˂pZHAJXQrbtl`f~`f~ےbHAےbHAtbdQZtbdQZnvpnvpے`Jے`J|ZdQ|ZdQ`f~`f~ےbHAےbHAtbdQZtbdQZnvpnvpJXQrZdQbtrd|f~Hv`fbHAZbHAZbdQZ|bdQZ|vpfvpfے`JXQ`JXQr|ZdQbf~Hf~HےHAZbHAZbdQZ|bdQZ|vpfr˂pr˂ptArdtArdfpvp˂rbHAZtbdQvpfvpfے`JXQے`JXQ|ZdQb|ZdQbf~Hf~HbHAZbHAZbdQZ|bdQZ|vpfvpfے`JXQے`JXQ|ZdQb|ZdQbf~Hf~HrXQJ`|drtbdQZfH~nvfH`JXQrJXQrbZdQbt~Hf~HfHAZpbHAZpdQZ|dQZ|vpfHvpfH`JXQr`JXQrZdQbtZdQbt~Hf~HfbHAZpbHAZptbdQZtAJl璐f`vے`JQrAbے`dQbtdQbt~Hfp~HfpHAZp˂HAZp˂Z|dZ|dpfH~pfH~JXQrJXQrdQbtdQbt~HfpHfpvHAZp˂HAZdZ|dvp`vpfH~bے`˂p`JJtArdHfpvHfpvZp˂Zp˂|dr|drfH~fH~XQr˂XQr˂btlbtlHfpvHfpvZp˂Zp˂|dr|drfH~fH~˂pZHAlJtAZdQbtfpv~Hfpp˂rp˂rdrtAdtAJH~fH~fr˂pbtltlJfpvfpvp˂rp˂rdrtAdrtAH~fZHAbZHAb|ZdQbf~HnXv`XQJ`ےdrtAZ|dH~fH~fr˂pr˂ptlJtlJfpvfpvp˂rp˂rdrtAdrtAH~fH~fr˂pr˂ptlJtlJfpvfpvےbHAtAJl||dtf`vX~fZ˂pZtlJlJtApvnpvn˂rXQ˂rXQdrtAJdrtAJ~f`~f`˂pZ˂pZlJtAlJtApvnpvn˂rXQ˂rXQ|drtbdQZXnvpZHAJXQrlJtArlJtArvnXvnXrXQJrXQJrtAJlrtAJlf`vf`v˂pZHA˂pZHAlJtArlJtArvnXnrXQrXQJrtAJlrtAJlXnvf`vJXQHAbXQrbt|ZdQnXvnXvrXQJ`rXQJ`tAJltAJlf`vXf`vXpZHAbpZHAbJtArdJtArdnXvnXvrXQJ`rXQJ`tAJltAJlf`vXf`vXbے`rd|lJtAnvfvnXXQJ`ےXQJ`ےJltltb`vXnZHAbZHAbJtAdtArdnXv`nXv`XQJ`ےXQJ`ےJltJlt`vXnے`JXQے`JXQtlJXv`fpvnbHAZJbdQrtAJl`vXn`vXnZHAbZHAbtArdtArdnXv`nXv`XQJ`ےXQJ`ےJltJlt`vXn`vXnZHAbZHAbtArdtArdnXv`nXv`Zp˂drtAbdQZ|nvpHAbےHAbےtAd|rd|Xv`fXv`fJ`ےJ`ےltbltbvXnvXnHAbےHAbےrd|rd|Xv`fXv`fJ`ےJ`ےtAJl|ltpfH~bے`˂pZHd|Zd|Zv`fv`f`ےb`ےbtbdQtbdQXnvXnvbے`ے`Jd|Zdfv`fJ`ے`ےbtbdQtbdQpfH~Xnvے`JlJAbtl`f~`f~ےbHAےbHAtbdQZtbdQZnvpnvpے`Jے`J|ZdQ|ZdQ`f~`f~ےbHAےbHAtbdQZtbdQZnvpnvpJXQrZdQbtrd|~Hfpv`ffbHAZbHAZbdQZ|nvpvpfے`JXQے`JXQ|ZdQb|ZdQbf~Hf~HbHAZbHAZbdQZ|bdQZ|vpfr˂pr˂ptArd~HfXv`fp˂rZ|dtbdQvpfvpfے`JXQے`JXQ|ZdQb|ZdQbf~Hf~HbHAZbHAZbdQZ|bdQZ|vpfvpfے`JXQے`JXQ|ZdQb|ZdQbf~HfHfrXQJ`JltdrtAfH~f`JXQr`JXQrZdQbtZdQbt~Hf~HfbHAZpbHAZpdQZ|dQZ|vpfHvpfH`JXQr`JXQrZdQbtZdQbt~Hf~HfbHAZpbHAZptdrtAbnvvpJXQrAbJXQdQbtdQbt~Hfp~HfpHAZp˂HAZp˂Z|dZ|dpfH~pfH~JXQrXQrbtdQbt~Hfp~HfpHAZp˂HAZp˂Z|dZ|df`vpfH~XQr˂|ZdQbJtArdHfpvHfpvZp˂Zp˂|dr|drfH~fH~XQr˂XQr˂btlbtlHfpvHfpvZp˂Zp˂|dr|drfH~fH~ے`Jd|ZlJtArvnXpvnp˂rdrtAdrtAfHfH~fr˂pr˂ptlJtlJfpvfpvp˂rp˂rdrtAdrtAH~f`vXnZHAb|ZdQb|ZdQbpvn~HfXQJ`ےrtAJlZ|rAH~fH~fr˂pr˂ptlJtlJfpvfpvp˂rp˂rdrtAdrtAH~fH~fr˂pr˂ptlJtlJfpvpvnےbHAbdQZ|JltvXnۀ˂pZ˂pZlJtAlJtApvnpvn˂rXQ˂rXQdrtAJdrtAJ~f`~f`˂pZ˂pZlJtAlJtApvnpvn˂rXQ˂rXQJltp`vXfH~˂pZHAr˂plJtArlJtArvnXvnXrXQJrXQJrtAJltAJl璐f`vfZHA˂pZHAlJtAlJtArvnXvnXrXQJrXQJrtAJlrtAJlXnf`ppZHAbtlJZQbt璀nXvnXvrXQJ`rXQJ`tAJltAJlf`vXf`vXpZHAbpZHAbJtArdJtArdnXvnXvrXQJ`rXQJ`tAJltAJlf`vXf`vXXQr˂dQbtd|Zv`frXQJ`XQJ`ےJltJlt`vXn`vXnZHAbZHAbtArdtArdnXv`nXv`XQJ`ےXQJ`ےJltJlt`vXnvpfے`JXQtlJtlJXv`fpvnrXQtbdQJlt`vXn`vXnZHAbZHAbtArdtArdnXv`nXv`XQJ`ےXQJ`ےJltJlt`vXn`vXnZHAbZHAےtArdtArdnXv`rXQJ`XQJ`ےdrtAbdQZ|vpfHHAbےHAbےrd|rd|Xv`fXv`fJ`ےJ`ےltbltbvXnvXnHAbےHAbےrd|rd|Xv`fXv`fJ`ےJ`ےbdQZ|nvpf`vXbے`ZHAbd|Zd|Zv`fv`f`ےb`ےbtbdQtbnXnvbے`bے`d|Zd|Zv`fv`f`ےb`ےbtbdQtbdQf`vXfH~ے`JtArdlJtAr`f~`f~ےbHAےbHAtbdQZtbdQZnvpnvpے`Jے`J|ZdQ|ZdQ`f~`f~ےbHAےbHAtbdQZtbdQZnvpnvppZHAblJtArdQbt~HfpےHAZbHAZbdQZ|bdQZ|vpfvpfے`JXQے`JXQ|ZdQb|ZdQbf~Hf~HbHAZbHAZbdQZ|bdQZ|vpfH~fr˂ptArdtArd~HfXv`fJ`ےZ|dbdQZ|vpfvpfے`JXQے`JXQ|ZdQb|ZdQbf~Hf~HbHAZbHAZbdQZ|bdQZ|vpfvpfے`JXQ`JXQr|ZdQbf~Hf~Hp˂rbHAZJltltb~f``JXQr`JXQrZdQbtZdQbt~Hf~HfbHAZpbHAZpdQZ|dQZ|vpfHvpfH`JXQr`JXQrZdQbtZdQbt~Hf~HfbHAZpbHAZpdrtAfH~nvpJXQrے`JXQdQbtdQbt~HfpHfpvHAZp˂HAZdZ|dvpfHpfH~JXQrJXQrdQbtdQbt~Hfp~HfpHAZp˂HAZp˂Z|dZ|dnvpf`vXXQr|ZdQbd|ZHfpvHfpvZp˂Zp˂|dr|drfH~fH~XQr˂XQr˂btlbtlHfpvHfpvZp˂Zp˂|dr|dtAfH~fH~ے`Jd|ZlJtArvnXvp˂rp˂rdrtAdrtAH~fH~fr˂pr˂ptlJtlJfpvfpvp˂rp˂rdrtAdrtAH~f`vXnvpfvpfے`JXQے`JXQJtArdHfp``fZp˂bHAZdQZ|vpfvpfH`JXQr`JXQrZdQbtZdQbt~Hf~HfbHAZpbHAZpdQZ|dQZ|vpfHvpfHJXQrbے`ۑpJAHH~ㅐfەH~ㅐfۂdrQtH~fH~fr˂pr˂p|ZdQf~HnXv`rXQJ`drtAJdrtAJHf`~f`˂pZ˂pZlJtAlJtApvnpvn˂rXQ˂rXQdrtAJdrtAJ~f`~f`˂pZHAJXQrr󙐉۝`vXn`vXnJlt`vXn`vXnZHAbZHAےbtlfpvf~HےbAZltbltbvXnvXnHAbےHAbےrd|rd|Xv`fXv`fJ`ےJ`ےltbltbvXnvXnbے`˂p`ZpJAHrvˍpfvˍpfbAdZ|vpfvpfے`JXQ`JXQrJtArdnXv`fpvrXQdQZ|dQZ|vpfHvpfH`JXQr`JXQrZdQbtZdQbt~Hf~HfbHAZpbHAZpdQZ|dQZ|vpfHvpfHJXQHAbQXb㉀ۙˁ`ZH~ㅐfەH~ㅐfۂdrQtH~fH~fr˂pbtltlJf~HnXv`J`ےdrtAJdrtAJ~f`~f`˂pZ˂pZlJtAlJtApvnpvn˂rXQ˂rXQdrtAJdrtAJ~f`~f`ے`JpJAHrQXb㉀۝`vXn`vXnJlt`vXnZHAbZHAb|ZdQbtArdfpvpvnbHAZpltbltbvXnvXnHAbےHAbےrd|rd|Xv`fXv`fJ`ےJ`ےltbltbvXnvXnXQr˂ˁ`ZpJAHrvˍpfvˍp|bAdZ|vpfے`JXQے`JXQtlJ|ZdQb~HfrXQJ`rXQdQZ|dQZ|vpfHvpfH`JXQr`JXQrZdQbtZdQbt~Hf~HfbHAZpbHAZpdQZ|dQZ|vpfHvpfHpZHAbQXb㉀ˁ`pH~ㅐfۂdrQtdrQtH~fr˂pr˂ptArdtlJpvnAZp˂J`ےdrtAJdrtAJ~f`~f`˂pZ˂pZlJtAlJtApvnpvn˂rXQ˂rXQdrtAJdrtAJ~f`~f`ے`Jˁ`ZQXJAHr󙐝`vXnJltJlt`vXnZHAbZHAb|ZdQbtArdXv`frXQJbHAZrltbltbvXnvXnHAbےHAbےrd|rd|Xv`fXv`fJ`ےJ`ےltbltbvXnvXnXQrb㉀ۑpˁ`ZQXvˍpfbAdZ|bAdZ|vpfے`JXQے`JXQtd||lJtA~Hf`ےbXQJ`ےdQZ|dQZ|vpfHvpfH`JXQr`JXQrZdQbtZdQbt~Hf~HfbHAZpbHAZpdQZ|dQZ|vpfHvpfHے`JXQJAHrb㉀ۑpH~ㅐfۂdrQtdrQtH~fr˂pr˂pZdQbtrd|pvnHAZp˂bHAZdrtAJdrtAJ~f`~f`˂pZ˂pZlJtAlJtApvnpvn˂rXQ˂rXQdrtAJdrtAJ~f`~f`r˂pˁ`ZQXJAHr󙐝`vXnJltJlt`vXnZHAbZHAblJtAZdQbtXHfprXQJp˂rltbltbvXnvXnHAbےHAbےrd|rd|Xv`fXv`fJ`ےJ`ےltbltbvXnvXnZHAbb㉀ۑpˁ`pfvˍpfbAdZ|bAdZ|vpfے`JXQے`JXQrd|lJtAvnXbHAZpXQJ`ےdQZ|dQZ|vpfHvpfH`JXQr`JXQrZdQbtZdQbt~Hf~HfbHAZpbHAZpdQZ|dQZ|vpfHvpfHے`JXQ`ZQXbH~ㅐfەH~ㅐfۂdrQtdrQtH~fr˂pr˂pZdQbtrd|v`f˂rXbHAZdrtAJdrtAJ~f`~f`˂pZ˂pZlJtAlJtApvnpvn˂rXQ˂rXQdrtAJdtAJl~f`~frr˂pۑpJ`vXn`vXnJltJlt`vXnZHAbZHAbl|ZZdQtAr~HfpQJ`ےprQJ`ltbltbvXnvXnHAbےHAbےrd|rd|Xv`fXv`fJ`ےJ`ےltbtbnvXn˂pZ`JXQrAHr󙐂˕vˍpfvˍpfbAdZ|bAdZ|vpfے`JXQے`JXQdQbtdfvnXbHAZpےbHdQZ|dQZ|vpfHvpfH`JXQr`JXQrZdQbtZdQbt~HfHfpbHAZpbHAZdQZ|vpfvpfHHAbے˂pZ`ZQXbH~ㅐfەH~ㅐfۂdrQtdrQtH~fr˂pr˂plJtAr~HXvv`pv˂rXAZp˂drtAJdrtAJ~f`~f`˂pZ˂pZlJtAlJtApvnvnr˂rXQdrtAJdrtAJHf`~f``JXQrHAbےۑpJ`vXn`vXnJltJlt`vXnZHAbZHAbd|Z`f~nXvQJ`brXQJ`ltbltbvXnvXnHAbےHAے`rd|rdfXv`fXQJ`ےJ`ےltbltbvXnvXn˂pZ`JXQrAHQXb㉀vˍpfvˍpfbAdZ|bAdZ|vpfے`JXQے`JXQdQbtHfpv`f~AZp˂ےbHdQZ|dQZ|vpfHvpfH`JXQrJXQrbZdQbt~Hf~HfHAZpbHAZpdQZ|dQZ|vpfHvpfHHAbے˂pZۑpJAHH~ㅐfەH~ㅐfۂdrQtdrQtH~fr˂pr˂plJtAdQnXvHfpvrXQJ`AZp˂drtAJdtAJl~f`~fZ˂pZtlJlJtApvnpvn˂rXQ˂rXQdrtAJdrtAJ~f`~f``pZHAHAXQrr󙐂ˁ``vXn`vXnJltJlt`vXnZHAbZHAbbtl`f~nXvےbHArQJltbtbnvXnHAbےHAbےtAd|rd|Xv`fXv`fJ`ےJ`ےltbltbvXnvXnbے`˂pZHAZQXb㉀vˍpfvˍpfbAdZ|bAdZ| \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv37_2.dat b/vendor/endroid/qr-code/assets/data/qrv37_2.dat new file mode 100644 index 000000000..6b2cc4ec5 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv37_2.dat @@ -0,0 +1,329 @@ +|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrq|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrq|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrq|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrq|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrq|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrq|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrq|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrq|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrq|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrq|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrq|{|{|{|{zyzyzyxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvutsrqrqrqrq|{|{|{|{xwxwxwxwtstststsrqrqrqrqpopopopo|{|{|{|{xwxwxwxwtstststsrqrqrqrqpopopopo|{|{|{|{xwxwxwxwtstststsrqrqrqrqpopopopo|{|{|{|{xwxwxwxwtstststsrqrqrqrqpopopopo~}|{|{|{|{xwxwxwxwtstststsrqrqrqrqpopopopo~}~}~}~}|{|{|{|{xwxwxwxwtstststsrqrqrqrqpopopopo~}~}~}~}|{|{|{|{xwxwxwxwtstststsrqrqrqrqpopoponm~}~}~}~}|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnm~}~}~}~}|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnm~}~}~}~}|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnm~}~}~}~}|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnm~}~}~}~}|{|{|{|{xwxwxwxwtstststsrqrqrqponmnmnmnm~}~}~}~}|{|{|{|{xwxwxwxwtstststspopopoponmnmnmnm~}~}~}~}|{|{|{|{xwxwxwxwtstststspopopoponmnmnmnm~}~}~}~}|{|{|{|{xwxwxwxwtstststspopopoponmnmnmnm~}~}~}~}|{|{|{|{xwxwxwxwtstststspopopoponmnmnmnm~}~}~}~}|{|{|{zyxwxwxwxwtstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyxwxwxwvutstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyvuvuvuvutstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyvuvuvuvutstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyvuvuvuvutstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyvuvuvuvutstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyvuvuvuvutstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyvuvuvuvutstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyvuvuvuvutstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyvuvuvuvutstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyvuvuvuvutstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyvuvuvuvutstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyvuvuvuvutstststspopopoponmnmnmnm~}~}~}~}zyzyzyzyvuvuvuvutststsrqpopopoponmnmnmnm~}~}~}~}zyzyzyzyvuvuvuvurqrqrqrqpopopoponmnmnmnm~}~}~}~}zyzyzyzyvuvuvuvurqrqrqrqpopopoponmnmnmnm~}~}~}~}zyzyzyzyvuvuvuvurqrqrqrqpopopoponmnmnmnm~}~}~}~}zyzyzyzyvuvuvuvurqrqrqrqpopopoponmnmnmnm~}~}~}|{zyzyzyzyvuvuvuvurqrqrqrqpopopoponmnmnmnmnmnmnmnmghghghghfefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787343433330/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! + + + + nmnmnmlkghghghghfefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787334343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! + + + + lklklklkghghghghfefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + + lklklklkghghggggfefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + + lklklklkgghghghgfefedcdcbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;:9:9:987878787434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + + lklklklkhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:987878787434333330/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + + lklklklkhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:987878787434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + lklklklkhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:987878765212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"! lklklklkhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"! lklklklkhghgggggdcdcdcdcbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEDCDCDCBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"! lklklklkghghghghdcdcdcdcbabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"! lklklklkghghghghdcdcdcdcbabababa^]^]^]^]ZYZYZYZYXWXWVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"! lklklklkghghghghdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"! lklklklkghghghghdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"! lklklklkghghghghdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"! lklklklkghggggggdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"! lklklklkhghghghgdcdcdcdcbaba`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"! lklklklkhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"! lklklklkhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPONMNMLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"! lklklklkhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSNMNMMMMMLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"! lklklklkhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"! lklklklkhgggggghdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDCBA@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"! lklklklkghghghghdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"! lklklklkghghghghdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSRQRQNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"! lklklklkghghghghdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMMMMMMNLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"!    lklklklkghghghghdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQMNMNMNMNLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"!    lklklklkghghghghdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQMNMNMNMNLKJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        lklklklkgggggghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQMNMNMNMNJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        lklklklkhghghghgdcdcdcdc`_`_`_`_^]^]\[\[ZYZYZYZYVUVUVUVURQRQRQRQMNMNMNMNJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        lklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQMNMNMNMNJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        lklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQMMMMMMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        lklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        lklklklkgggghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        lklklklkhghgfefedcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=<;<;<;:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        lkjijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        jijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + jijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQMMMMMNMNJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + jijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQMNMNMNMNJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + jijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQMNMNMNMNJIJIJIJIHGFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + jijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQMNMNMNMNJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + jijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[ZYZYXWXWVUVUVUVURQRQRQRQMNMNMNMNJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96543434321212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + jijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQMNMNMNMMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:94333333421212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + jijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQMMMMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:93434343421212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + jijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:93434343421212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + jijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:93434343421212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + jijijijifefefefedcdcbaba`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:98787873434343421212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + jijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;878787873434343421212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + jijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMMMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;878787873333334321212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + jijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQMMMNMNMNJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + jijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + jijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNJIJIJIJIFEFEFEFEDCBABABA@?@?@?@?<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + jijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + jijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWVUVUTSTSRQRQRQRQMNMNMNMNJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + jijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQMNMNMMMMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787333334340/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + jijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQMMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787343434340/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + jijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMLKLKLKJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787343434340/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!        + + + + jijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787343434340/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!        + + + + jijijijifefefefebabababa`_`_^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787343434340/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!        + + + + jijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787343434330/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!        + + + + jijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787333343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!        + + + + jijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        + + + + jijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        + + + + jijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA@?>=>=>=<;<;<;<;87878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        + + + + jijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!        + + + + jijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787434343330/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!       + + + + jijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787333434340/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!     + + + + jijijihgfefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787343434340/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!     + + + + hghghgggfefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787343434340/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! + + + + ggghghghfefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787343434340/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! + + + + ghghghghfefefefebabababa^]^]^]^]\[\[ZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787343434340/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! + + + + YYZZ[[\\))**++,,88776655hhggffeeggffeeddssrrqqppvvwwxxyyFFGGHHII]]^^__``--..//0044332211ddccbbaaccbbaa``oonnmmllzz{{||}}JJKKLLMMaabbccdd1122334400//..--``__^^]]__^^]]\\kkjjiihh~~NNOOPPQQ !!eeffgghh55667788,,++**))\\[[ZZYY[[ZZYYXXggffeeddRRSSTTUU""##$$%%iijjkkll99::;;<< + + ((''&&%%XXWWVVUUWWVVUUTTccbbaa``VVWWXXYY&&''(())mmnnoopp==>>??@@ $$##""!!TTSSRRQQSSMMLLKK__^^]]\\ZZ[[\\]]**++,,--qqrrssttAABBCCDD PPOONNMMJJIIHHGG[[ZZYYXX^^__``aa..//0011uuvvwwxxEEFFGGHHLLKKJJIIFFEEDDCCWWVVUUTTbbccddee22334455yyzz{{||IIJJKKLLHHGGFFEEBBAA@@??SSRRQQPPffgghhii66778899~~}}~~}}||}}~~MMNNOOPP DDCCBBAA>>==<<;;OONNMMLL~~}}||jjkkllmm::;;<<==||{{zzyy{{zzyyxxQQRRSSTT!!""##$$ @@??>>==::993322KKJJIIHH{{zzyyxxnnooppqq>>??@@AAxxwwvvuuwwvvuuttUUVVWWXX%%&&''(( + + <<;;::991100//..GGFFEEDDwwvvuuttrrssttuuBBCCDDEEttssrrqqssrrqqppYYZZ[[\\))**++,,88776655--,,++**CCBBAA@@ssrrqqppvvwwxxyyFFGGHHIIppoonnmmoonnmmlk]]^^__``--..//0044332211))((''&&??>>==<>??@@ $$##""!!//..--,,__^^]]\\ZZ[[\\]]\\[[ZZYYrrqqppooYXXWWVVUxxwwvvuuqqrrssttAABBCCDD  ++**))(([[ZZYYXX^^__``aaXXWWVVUUnnmmggffUTTSSRQPttssrrqquuvvwwxxEEFFGGHH + + ''&&%%$$WWVVUUTTbbccddeeTTSSRRQQeeddccbbONMMLLKKppoonnmmyyzz{{||IIJJKKLL##""!! SSRRQQPPffgghhiiPPOONNMMaa``__^^JJIIHHGGllkkjjii}}~~MMNNOOPP OONNMMLL~~}}||jjkkllmmLLKKJJII]]\\[[ZZFFEEDDCChhggffeeQQRRSSTT!!""##$$  + +KKJJIIHH{{zzyyxxnnooppqqHHGGFFEEYYXXWWVVBBAA@@??ddccbbaaUUVVWWXX%%&&''(( + + GGFFEEDDwwvvuuttrrssttuuDDCCBBAAUUTTSSMM>>==<<;;``__^^]]YYZZ[[\\))**++,,CCBBAA@@ssrrqqppvvwwxxyy@@??>>==LLKKJJII::998765\\[[ZZYY]]^^__``--..//00 ??>>==<>==,++**))(PPOONNMM~~}}iijjkkll99::;;<< !""##$$%33221100ccbbaa`` + + 00//..--<<;;::99(''&&%%$LLKKJJII||{{zzyymmnnoopp==>>??@@%&&''(()//..--,,__^^]]\\,,++**))33221100$##""!! HHGGFFEExxwwvvuuqqrrssttAABBCCDD)**++,,- ++**))(([[ZZYYXX((''&&%%//..--,, DDCCBBAAttssrrqquuvvwwxxEEFFGGHH !!-..//001 + + ''&&%%$$WWVVUUTT$$##""!!++**))((@@??>>==ppoonnmmyyzz{{||IIJJKKLL""##$$%%12233456##""!! SSRRQQPP ''&&%%$$<<;;::99llkkjjii}}~~MMNNOOPP&&''(())7899::;;OONNMMLL~~}}|| + + ##""!! 88776655hhggffeeQQRRSSTT**++,,--<<==>>??KKJJIIHH{{zzyyxx + +44332211ddccbbaaUUVVWWXX..//0011@@AABBCCGGFFEEDDwwvvuutt 00//..--``__^^]]YYZZ[[\\223399::DDEEFFGG !!CCBBAA@@ssrrqqpp ,,++**))\\[[ZZYY]]^^__``;;<<==>>HHIIJJKK""##$$%% ??>>==<>==ppoonnmmyyzz{{||\\]]^^__fgghijkl>>??@@AA##""!! SSRRQQPP66778899!!""##$$$$%%&&''%%&&''(( + + <<;;::99llkkjjii}}~~``aabbccmmnnooppBBCCDDEEOONNMMLL~~}}||::;;<<==%%&&''(((())**++))**++,,88776655hhggffeeddeeffggqqrrssttFFGGHHIIKKJJIIHH{{zzyyxx>>??@@AA))**++,,,,--..//--..//0044332211ddccbbaammnnooppuuvvwwxxJJKKLLMMGGFFEEDDwwvvuuttBBCCDDEE--..//00001122331122334400//..--``__^^]]qqrrssttyyzz{{||NNOOPPQQ !!CCBBAA@@ssrrqqppFFGGHHII1122334499::;;<<55667788,,++**))\\[[ZZYYuuvvwwxx}}~~RRSSTTUU""##$$%% ??>>==<>??@@99::;;<< + + ((''&&%%XXWWVVUUyyzz{{||VVWWXXYY&&''(()) + + ;;::9988kkjjiihhNNOOPPQQ99::;;<>??@@ $$##""!!TTSSRRQQ}}~~ZZ[[\\]]**++,,--77665544ggffeeddRRSSTTUU==>>??@@EEFFGGHHAABBCCDD PPOONNMM~~}}^^__``aa..//001133221100ccbbaa``VVWWXXYYAABBCCDDIIJJKKLLEEFFGGHHLLKKJJII||{{zzyybbccddee22334455//..--,,__^^]]\\ZZ[[\\]]EEFFGGHHMMSSTTUUIIJJKKLLHHGGFFEExxwwvvuuffgghhii66778899 ++**))(([[ZZYYXX^^__``aaIIJJKKLLVVWWXXYYMMNNOOPP DDCCBBAAttssrrqqjjkkllmm::;;<<== + + ''&&%%$$WWVVUUTTbbccddeeMMNNOOPPZZ[[\\]]QQRRSSTT!!""##$$ @@??>>==ppoonnmmnnooppqq>>??@@AA##""!! SSRRQQPPffgghhiiQQRRSSTT^^__``aaUUVVWWXX%%&&''(( + + <<;;::99llkkjjiirrssttuuBBCCDDEEOONNMMLLjjkkllmmUUVVWWXXbbccddeeYYZZ[[\\))**++,,88776655hhggffeevvwwxxyyFFGGHHIIKKJJIIHHnnooppqqYYZZ[[\\ffggmmnn]]^^__``--..//0044332211ddccbbaazz{{||}}JJKKLLMMGGFFEEDDrrssttuu]]^^__``ooppqqrraabbccdd1122334400//..--``__^^]]~~NNOOPPQQ !!CCBBAA@@vvwwxxyyaabbccddssttuuvveeffgghh55667788,,++**))\\[[ZZYYRRSSTTUU""##$$%% ??>>==<>??@@ $$##""!!TTSSRRQQZZ[[\\]]**++,,--77665544mmnnooppqqrrssttAABBCCDD PPOONNMM~~}}^^__``aa..//001133221100qqrrssttuuvvwwxxEEFFGGHHLLKKJJII||{{zzyy~~}}bbccddee22334455//..--,,uuvvwwxxyyzz{{||IIJJKKLLHHGGFFEExxwwvvuu||{{zzyyffgghhii66778899 ++**))((yyzz{{||}}~~MMNNOOPP DDCCBBAAttssrrqqxxwwvvuu~~}}||jjkkllmm::;;<<== + + ''&&%%$$}}~~QQRRSSTT!!""##$$ @@??>>==ppoonnmmttssrrqq{{zzyyxxnnooppqq>>??@@AA##""!! UUVVWWXX%%&&''(( + + <<;;::99llkkjjiippoonnmmwwvvuuttrrssttuuBBCCDDEEccddeeff33445566..--,,++^^]]\\[[]]\\[[ZZiihhggffPPQQRRSS !!""##((''&&%%! LLKKJJII||{{zzyymmnnoopp==>>??@@%&&''(()//..--,,__^^]]\\gghhiijj778899:: + +**))((''ZZYYXXWWYYXXWWVVeeddccbbTTUUVVWW$$%%&&'' + +$$##""!!HHGGFFEExxwwvvuuqqrrssttAABBCCDD)**++,,- ++**))(([[ZZYYXXkkllmmnn;;<<==>> &&%%$$##VVUUTTSSUUTTSSMMaa``__^^XXYYZZ[[(())**++  DDCCBBAAttssrrqquuvvwwxxEEFFGGHH !!-..//001 + + ''&&%%$$WWVVUUTTooppqqrr??@@AABB""!! RRQQPPOOLLKKJJII]]\\[[ZZ\\]]^^__,,--..//@@??>>==ppoonnmmyyzz{{||IIJJKKLL""##$$%%12233456##""!! SSRRQQPPssttuuvvCCDDEEFFNNMMLLKKHHGGFFEEYYXXWWVV``aabbcc00112233 <<;;::99llkkjjii}}~~MMNNOOPP&&''(())7899::;;OONNMMLL~~}}||~~}}||~~}}||{{wwxxyyzzGGHHIIJJJJIIHHGGDDCCBBAAUUTTSSRRddeeffgg44556677 + + 88776655hhggffeeQQRRSSTT**++,,--<<==>>??KKJJIIHH{{zzyyxx{{zzyyxxzzyyxxww{{||}}~~KKLLMMNNFFEEDDCC@@??>>==QQPPOONN~~hhiijjkk8899::;; + + + + 44332211ddccbbaaUUVVWWXX..//0011@@AABBCCGGFFEEDDwwvvuuttwwvvuuttvvuuttssOOPPQQRR !!""BBAA@@??<<;;::99MMLLKKJJ}}||{{zzllmmnnoo<<==>>?? 00//..--``__^^]]YYZZ[[\\223399::DDEEFFGG !!CCBBAA@@ssrrqqppssrrqqpp~~rrqqppooSSTTUUVV##$$%%&& >>==<<;;33221100IIHHGGFFyyxxwwvvppqqrrss@@AABBCC ,,++**))\\[[ZZYY]]^^__``;;<<==>>HHIIJJKK""##$$%% ??>>==<>qqppoonnxxyyzz{{HHIIJJKK $$##""!!TTSSRRQQeeffgghhCCDDEEFFRSSTTUUV**++,,--77665544ggffeeddggffeedduuttssrrdccbbaa`__``aabb//001122221100//''&&%%$$==<<;;::mmllkkjj||}}~~LLMMNNOO PPOONNMM~~}}iijjkkllGGHHIIJJVWWXXYYZ..//001133221100ccbbaa``ccbbaa``qqppoonn`__^^]]\ccddeeff33445566..--,,++##""!! 99887766iihhggffPPQQRRSS !!""##LLKKJJII||{{zzyymmnnooppKKLLMMSSZ[[\\]]^22334455//..--,,__^^]]\\__^^]]\\mmggffee\[[ZZYYXgghhiijj778899:: + +**))((''55443322eeddccbbTTUUVVWW$$%%&&'' !!""HHGGFFEExxwwvvuuqqrrssttTTUUVVWW^__``aab66778899 ++**))(([[ZZYYXX~~}}||{{[[ZZYYXXddccbbaaXWWVVUUT~~}}||{{kkllmmnn;;<<==>> &&%%$$##1100//..aa``__^^XXYYZZ[[(())**++##$$%%&& DDCCBBAAttssrrqquuvvwwxxXXYYZZ[[bccddeef::;;<<== + + ''&&%%$$WWVVUUTTzzyyxxwwWWVVUUTT``__^^]]TSSRQPONzzyyxxwwooppqqrr??@@AABB""!! --,,++**]]\\[[ZZ\\]]^^__,,--..//''(())**!!""##$$ @@??>>==ppoonnmmyyzz{{||\\]]^^__fgghijkl>>??@@AA##""!! SSRRQQPPvvuuttssSSRRQQPP\\[[ZZYYMMLLKKJJvvuuttssssttuuvvCCDDEEFF ))((''&&YYXXWWVV``aabbcc00112233++,,--..%%&&''(( + + <<;;::99llkkjjii}}~~``aabbccmmnnooppBBCCDDEEOONNMMLLrrqqppooOONNMMLLXXWWVVUUIIHHGGFFrrqqppoowwxxyyzzGGHHIIJJ + + %%$$##""UUTTSSRRddeeffgg44556677//001122))**++,,88776655hhggffeeddeeffggqqrrssttFFGGHHIIKKJJIIHHnnmmggffKKJJIIHHTTSSMMLLEEDDCCBBnnmmllkk{{||}}~~KKLLMMNN!! QQPPOONN~~hhiijjkk8899::;;3399::;;--..//0044332211ddccbbaammnnooppuuvvwwxxJJKKLLMMGGFFEEDDeeddccbbGGFFEEDDKKJJIIHHAA@@??>>jjiihhggOOPPQQRR !!""MMLLKKJJ}}||{{zzllmmnnoo<<==>>??<<==>>??1122334400//..--``__^^]]qqrrssttyyzz{{||NNOOPPQQ !!CCBBAA@@aa``__^^CCBBAA@@GGFFEEDD==<<;;::ffeeddccSSTTUUVV##$$%%&& + + IIHHGGFFyyxxwwvvppqqrrss@@AABBCC@@AABBCC55667788,,++**))\\[[ZZYYuuvvwwxx}}~~RRSSTTUU""##$$%% ??>>==<<]]\\[[ZZ??>>==<>==<<3221100/^^]]\\[[[[\\]]^^++,,--..AA@@??>>qqppoonnxxyyzz{{HHIIJJKKHHIIJJKK==>>??@@ $$##""!!TTSSRRQQ}}~~ZZ[[\\]]**++,,--77665544UUTTSSMM77665544;;::9933/..--,,+ZZYYXXWW__``aabb//001122 + +==<<;;::mmllkkjj||}}~~LLMMNNOOLLMMSSTTAABBCCDD PPOONNMM~~}}^^__``aa..//001133221100LLKKJJII33221100221100//+**))(('VVUUTTSSccddeeff33445566 + + 99887766iihhggffPPQQRRSSUUVVWWXXEEFFGGHHLLKKJJII||{{zzyybbccddee22334455//..--,,HHGGFFEE//..--,,..--,,++'&&%%$$#RRQQPPOOgghhiijj778899::  !!""#55443322eeddccbbTTUUVVWWYYZZ[[\\IIJJKKLLHHGGFFEExxwwvvuuffgghhii66778899 ++**))((DDCCBBAA++**))((**))((''#""!! NNMMLLKK~~}}||{{kkllmmnn;;<<==>>#$$%%&&'1100//..aa``__^^XXYYZZ[[]]^^__``MMNNOOPP DDCCBBAAttssrrqqjjkkllmm::;;<<== + + ''&&%%$$@@??>>==''&&%%$$&&%%$$##JJIIHHGGzzyyxxwwooppqqrr??@@AABB'(())**+--,,++**]]\\[[ZZ\\]]^^__aabbccddQQRRSSTT!!""##$$ @@??>>==ppoonnmmnnooppqq>>??@@AA##""!! <<;;::99##""!! ""!! FFEEDDCCvvuuttssssttuuvvCCDDEEFF+,,--../ + + ))((''&&YYXXWWVV``aabbcceeffggmmUUVVWWXX%%&&''(( + + <<;;::99llkkjjiirrssttuuBBCCDDEE33221100BBAA@@??rrqqppoowwxxyyzzGGHHIIJJ !!""##/0011223 %%$$##""UUTTSSRRddeeffggnnooppqqYYZZ[[\\))**++,,88776655hhggffeevvwwxxyyFFGGHHII//..--,, >>==<<;;nnmmllkk{{||}}~~KKLLMMNN$$%%&&''34567899!! QQPPOONN~~hhiijjkkrrssttuu]]^^__``--..//0044332211ddccbbaazz{{||}}JJKKLLMM++**))(( + + ::998877jjiihhggOOPPQQRR(())**++::;;<<==MMLLKKJJ}}||{{zzllmmnnoovvwwxxyyaabbccdd1122334400//..--``__^^]]~~NNOOPPQQ !!''&&%%$$ + +66554433ffeeddccSSTTUUVV,,--..//>>??@@AAIIHHGGFFyyxxwwvvppqqrrsszz{{||}}eeffgghh55667788,,++**))\\[[ZZYYRRSSTTUU""##$$%% ##""!!  221100//bbaa``__WWXXYYZZ00112233BBCCDDEEEEDDCCBBuuttssrrttuuvvww~~iijjkkll99::;;<< + + ((''&&%%XXWWVVUUVVWWXXYY&&''(()) + +  + + ..--,,++^^]]\\[[[[\\]]^^99::;;<>qqppoonnxxyyzz{{mmnnoopp==>>??@@ $$##""!!TTSSRRQQZZ[[\\]]**++,,-- + +  + +  + +**))((''ZZYYXXWW__``aabb==>>??@@JJKKLLMM$$%%&&'' + +==<<;;::mmllkkjj||}}~~qqrrssttAABBCCDD PPOONNMM~~}}^^__``aa..//0011  &&%%$$##VVUUTTSSccddeeffAABBCCDDNOPQRSST(())**++ 99887766iihhggffuuvvwwxxEEFFGGHHLLKKJJII||{{zzyy~~}}bbccddee22334455 ""!! RRQQPPOOgghhiijjEEFFGGHHTUUVVWWX,,--..//55443322eeddccbbyyzz{{||IIJJKKLLHHGGFFEExxwwvvuu||{{zzyyffgghhii66778899 + + + +NNMMLLKK~~}}||{{kkllmmnnIIJJKKLLXYYZZ[[\001122331100//..aa``__^^}}~~MMNNOOPP DDCCBBAAttssrrqqxxwwvvuu~~}}||jjkkllmm::;;<<== + +  JJIIHHGGzzyyxxwwooppqqrrMMSSTTUU\]]^^__`44556677--,,++**]]\\[[ZZQQRRSSTT!!""##$$ @@??>>==ppoonnmmttssrrqq{{zzyyxxnnooppqq>>??@@AA !!!!""##$$FFEEDDCCvvuuttssssttuuvvVVWWXXYY`aabbccd8899::;; + + ))((''&&YYXXWWVVUUVVWWXX%%&&''(( + + <<;;::99llkkjjiippoonnmmwwvvuuttrrssttuuBBCCDDEE""##$$%%%%&&''(( !!""BBAA@@??rrqqppoowwxxyyzzZZ[[\\]]deeffggh<<==>>?? %%$$##""UUTTSSRRYYZZ[[\\))**++,,88776655hhggffeeggffeeddssrrqqppvvwwxxyyFFGGHHII&&''(())))**++,,##$$%%&& >>==<<;;nnmmllkk{{||}}~~^^__``aaijklmmnn@@AABBCC!! QQPPOONN~~]]^^__``--..//0044332211ddccbbaaccbbaa``oonnmmllzz{{||}}JJKKLLMM !!""##**++,,----..//00''(())** + + ::998877jjiihhggbbccddeeooppqqrrDDEEFFGGMMLLKKJJ}}||{{zzaabbccdd1122334400//..--``__^^]]__^^]]\\kkjjiihh~~NNOOPPQQ !!$$%%&&''..//001111223399++,,--..66554433ffeeddccffggmmnnssttuuvvHHIIJJKKIIHHGGFFyyxxwwvveeffgghh55667788,,++**))\\[[ZZYY[[ZZYYXXggffeeddRRSSTTUU""##$$%%(())**++22334455::;;<<==//001122221100//bbaa``__ooppqqrrwwxxyyzzLLMMNNOOEEDDCCBBuuttssrriijjkkll99::;;<< + + ((''&&%%XXWWVVUUWWVVUUTTccbbaa``VVWWXXYY&&''(()),,--..//66778899>>??@@AA33445566..--,,++^^]]\\[[ssttuuvv{{||}}~~PPQQRRSS !!""##AA@@??>>qqppoonnmmnnoopp==>>??@@ $$##""!!TTSSRRQQSSMMLLKK__^^]]\\ZZ[[\\]]**++,,--00112233::;;<<==BBCCDDEE778899:: + +**))((''ZZYYXXWWwwxxyyzzTTUUVVWW$$%%&&'' + +==<<;;::mmllkkjjqqrrssttAABBCCDD PPOONNMMJJIIHHGG[[ZZYYXX^^__``aa..//001199::;;<<>>??@@AAFFGGHHII;;<<==>> &&%%$$##VVUUTTSS{{||}}~~XXYYZZ[[(())**++ 99887766iihhggff~~}}uuvvwwxxEEFFGGHHLLKKJJIIFFEEDDCCWWVVUUTTbbccddee22334455==>>??@@BBCCDDEEJJKKLLMM??@@AABB""!! RRQQPPOO\\]]^^__,,--..//55443322eeddccbb||{{zzyyyyzz{{||IIJJKKLLHHGGFFEEBBAA@@??SSRRQQPPffgghhii66778899AABBCCDDFFGGHHIISSTTUUVVCCDDEEFFNNMMLLKK~~}}||{{``aabbcc001122331100//..aa``__^^xxwwvvuu}}~~MMNNOOPP DDCCBBAA>>==<<;;OONNMMLL~~}}||jjkkllmm::;;<<==EEFFGGHHJJKKLLMMWWXXYYZZGGHHIIJJJJIIHHGGzzyyxxwwddeeffgg44556677--,,++**]]\\[[ZZttssrrqqQQRRSSTT!!""##$$ @@??>>==::993322KKJJIIHH{{zzyyxxnnooppqq>>??@@AAIIJJKKLLNNOOPPQQ[[\\]]^^KKLLMMNNFFEEDDCCvvuuttsshhiijjkk8899::;; + + ))((''&&YYXXWWVV~~}}||ppoonnmmUUVVWWXX%%&&''(( + + <<;;::991100//..GGFFEEDDwwvvuuttrrssttuuBBCCDDEEMMSSTTUURRSSTTUU__``aabbOOPPQQRR !!""BBAA@@??rrqqppoollmmnnoo<<==>>?? %%$$##""UUTTSSRR{{zzyyxxlkjihggfYYZZ[[\\))**++,,88776655--,,++**CCBBAA@@ssrrqqppvvwwxxyyFFGGHHIIVVWWXXYYVVWWXXYYccddeeffSSTTUUVV##$$%%&& >>==<<;;nnmmllkkppqqrrss@@AABBCC!! QQPPOONNwwvvuuttfeeddccb]]^^__``--..//0044332211))((''&&??>>==<>bbaa``__VUUTTSSR||{{zzyymmnnoopp==>>??@@ $$##""!!//..--,,__^^]]\\ZZ[[\\]]ooppqqrrjjkkllmm||}}~~gghhiijj778899:: + +**))((''ZZYYXXWWTTUUVVWW$$%%&&'' + +==<<;;::^^]]\\[[QPONMMLLxxwwvvuuqqrrssttAABBCCDD  ++**))(([[ZZYYXX^^__``aassttuuvvnnooppqqkkllmmnn;;<<==>> &&%%$$##VVUUTTSSXXYYZZ[[(())**++ 99887766ZZYYXXWWKKJJIIHHttssrrqquuvvwwxxEEFFGGHH + + ''&&%%$$WWVVUUTTbbccddeewwxxyyzzrrssttuuooppqqrr??@@AABB""!! RRQQPPOO\\]]^^__,,--..//55443322VVUUTTSSGGFFEEDDppoonnmmyyzz{{||IIJJKKLL##""!! SSRRQQPPffgghhii{{||}}~~vvwwxxyyssttuuvvCCDDEEFFNNMMLLKK~~}}||{{``aabbcc001122331100//..MMLLKKJJCCBBAA@@llkkjjii}}~~MMNNOOPP OONNMMLL~~}}||jjkkllmmzz{{||}}wwxxyyzzGGHHIIJJJJIIHHGGzzyyxxww~~}}||{{ddeeffgg44556677--,,++**IIHHGGFF??>>==<>?? %%$$##""AA@@??>>65433221``__^^]]YYZZ[[\\))**++,,CCBBAA@@ssrrqqppvvwwxxyySSTTUUVV##$$%%&& >>==<<;;nnmmllkkrrqqppooyyxxwwvvppqqrrss@@AABBCC!! ==<<;;::100//..-\\[[ZZYY]]^^__``--..//00 ??>>==<=>=>=>=<;<;<;<;878787873333334321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        \[\[\[\[ZYZYXWXWVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        \[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        + \[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        + + + + \[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + \[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=<;:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + \[\[\[\[XWXWXWXWVUVUVUVUTSTSRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:9878787873333343421212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + \[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:9878787873434343421212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + \[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:9878787873434343421212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + \[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:9878787873434343421212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + \[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:9878787873434343421212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + \[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:9878787873434343321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + \[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQPOPONMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:987878787333343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + \[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMMMMMLKLKLKLKJIHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:987878787434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + \[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:987878787434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + \[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:987878787434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + \[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:987878787434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + \[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:987878787434343330/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + \[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMMMMMMNLKLKLKLKHGHGHGHGFEFEFEFEDCBABABA@?@?@?@?>=>=>=>=:9:9:9:987878787333434340/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + \[\[ZYZYXWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:987878765343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:965656565343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!       + + + + ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:965656565343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"!     + + + + ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:965656565343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + + ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQMNMNMNMNLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=<;<;<;:9:9:9:965656565343433330/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + + ZYZYZYZYXWXWXWXWVUVUTSTSRQRQRQRQMMMMMMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565334343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + + ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + + ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!     + + + + ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565434333330/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQMMMMMNMNLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQMNMNMNMNLKJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQMNMNMNMNJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQMNMNMNMNJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQMNMNMNMNJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQMNMNMNMMJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQMMMMNMNMJIJIJIJIHGHGHGHGFEDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!    + + + + ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMMMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?>=>=>=<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!    + + + + ZYZYZYZYXWXWVUVUTSTSTSTSPOPOPOPOMMMNMNMNJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!    + + + + ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOMNMNMNMNJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!    + + + ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOMNMNMNMNJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!    ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOMNMNMNMNJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOMNMNMNMNJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;:987878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOMNMNMMMMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOMMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPONMLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;8787878765434343212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787874333333421212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIHGFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787873434343421212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787873434343421212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787873434343421212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787873434343421212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787873434343421212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        YYZZ[[\\00112233XXWWVVUU99::;;<<$$##""!!~~}}mmnnoopp + + SSRRQQPP>>??@@AA{{zzyyxxrrssttuu..--,,++XWWVVUUTCCDDEEFF]]^^__``99::;;<< + + TTSSRRQQ==>>??@@ ||{{zzyyqqrrsstt !!OONNMMLLBBCCDDEEwwvvuuttvvwwxxyy**))((''TSSRQPONGGHHIIJJaabbccdd==>>??@@ PPOONNMMAABBCCDDxxwwvvuuuuvvwwxx""##$$%%KKJJIIHHFFGGHHIIssrrqqppzz{{||}} !!&&%%$$##MMLLKKJJKKLLMMNNeeffgghhAABBCCDDLLKKJJIIEEFFGGHHttssrrqqyyzz{{||&&''(()) + +GGFFEEDDJJKKLLMMoonnmmll~~""##$$%%""!! IIHHGGFFOOPPQQRR iijjkkllEEFFGGHHHHGGFFEEIIJJKKLLppoonnmm}}~~**++,,-- CCBBAA@@NNOOPPQQ kkjjiihh&&''(())EEDDCCBBSSTTUUVV + + mmnnooppIIJJKKLLDDCCBBAAMMNNOOPP llkkjjii..//0011??>>==<>WWXXYYZZqqrrssttMMSSTTUU @@??>>==QQRRSSTT + + hhggffee223399::;;::9988VVWWXXYYccbbaa``..//0011==<<;;::[[\\]]^^uuvvwwxxVVWWXXYY!!""##$$<<;;::99UUVVWWXXddccbbaa;;<<==>>77665544ZZ[[\\]]__^^]]\\22334455 + +99876543__``aabbyyzz{{||ZZ[[\\]]%%&&''((88776655YYZZ[[\\``__^^]]??@@AABB !33221100^^__``aa[[ZZYYXX66778899 3221100/ccddeeff + +~~}}}}~~^^__``aa))**++,,44332211]]^^__``\\[[ZZYYCCDDEEFF!""##$$%//..--,,bbccddee WWVVUUTT::;;<<==/..--,,+gghhiijj ||{{zzyybbccddee--..//0000//..--aabbccddXXWWVVUUGGHHIIJJ%&&''(()++**))((ffgghhii + + SSRRQQPP>>??@@AA + + +**))(('kkllmmnnxxwwvvuuffggmmnn11223344,,++**))eeffgghh + + TTSSRRQQKKLLMMSS)**++,,-''&&%%$$jjkkllmmOONNMMLLBBCCDDEE '&&%%$$#~~}}||{{ooppqqrrttssrrqqooppqqrr55667788((''&&%%iijjkkll PPOONNMMTTUUVVWW-..//001##""!! ~~}}||nnooppqqKKJJIIHHFFGGHHII#""!! zzyyxxwwssttuuvvppoonnmmssttuuvv99::;;<<$$##""!!~~}}mmnnooppLLKKJJIIXXYYZZ[[12233456{{zzyyxxrrssttuuGGFFEEDDJJKKLLMMvvuuttsswwxxyyzzllkkjjiiwwxxyyzz==>>??@@ ||{{zzyyqqrrssttHHGGFFEE\\]]^^__7899::;;wwvvuuttvvwwxxyyCCBBAA@@NNOOPPQQ rrqqppoo{{||}}~~ !!""hhggffee{{||}}~~AABBCCDDxxwwvvuuuuvvwwxxDDCCBBAA``aabbcc<<==>>??ssrrqqppzz{{||}} !!??>>==<>==ddeeffgg@@AABBCCoonnmmll~~""##$$%%;;::9988VVWWXXYY%%&&''(( jjiihhgg''(())**``__^^]]IIJJKKLLppoonnmm}}~~!!""##$$<<;;::99mmnnooppDDEEFFGG kkjjiihh&&''(())77665544ZZ[[\\]]))**++,, + + ffeeddcc++,,--..\\[[ZZYYMMNNOOPP llkkjjii%%&&''((88776655qqrrssttHHIIJJKK + + ggffeedd**++,,--33221100^^__``aa--..//00bbaa``__//001122XXWWVVUUQQRRSSTT + + hhggffee))**++,,44332211uuvvwwxxLLMMNOPQccbbaa``..//0011//..--,,bbccddee11223399^^]]\\[[33445566TTSSRRQQUUVVWWXXddccbbaa--..//0000//..--yyzz{{||RSSTTUUV__^^]]\\22334455++**))((ffgghhii::;;<<==ZZYYXXWW778899::PPOONNMMYYZZ[[\\``__^^]]11223344,,++**))}}~~VWWXXYYZ[[ZZYYXX66778899''&&%%$$jjkkllmm>>??@@AA + +VVUUTTSS;;<<==>>LLKKJJII]]^^__``\\[[ZZYY55667788((''&&%%Z[[\\]]^ WWVVUUTT::;;<<==##""!! ~~}}||nnooppqqBBCCDDEE RRQQPPOO??@@AABBHHGGFFEEaabbccddXXWWVVUU99::;;<<$$##""!!~~}}^__``aab + + SSRRQQPP>>??@@AA{{zzyyxxrrssttuuFFGGHHIINNMMLLKKCCDDEEFFDDCCBBAAeeffgghh + + TTSSRRQQ==>>??@@ ||{{zzyybccddeefOONNMMLLBBCCDDEEwwvvuuttvvwwxxyyJJKKLLMMJJIIHHGGGGHHIIJJ@@??>>==iijjkkll PPOONNMMAABBCCDDxxwwvvuufgghijklKKJJIIHHFFGGHHIIssrrqqppzz{{||}}SSTTUUVVFFEEDDCCKKLLMMNN<<;;::99~~}}||{{mmnnooppLLKKJJIIEEFFGGHHttssrrqqmmnnooppGGFFEEDDJJKKLLMMoonnmmll~~WWXXYYZZBBAA@@??OOPPQQRR88776655zzyyxxwwqqrrssttHHGGFFEEIIJJKKLLppoonnmmqqrrssttCCBBAA@@NNOOPPQQ kkjjiihh[[\\]]^^ !!"">>==<<;;SSTTUUVV44332211vvuuttssuuvvwwxxDDCCBBAAMMNNOOPP llkkjjiiuuvvwwxx !!??>>==<>==QQRRSSTT + + hhggffeeyyzz{{||""##$$%%;;::9988VVWWXXYYccbbaa``ccddeeff''(())**66554433[[\\]]^^,,++**))nnmmggff}}~~!!""##$$<<;;::99UUVVWWXXddccbbaa}}~~&&''(())77665544ZZ[[\\]]__^^]]\\ggmmnnoo++,,--..221100//__``aabb((''&&%%eeddccbb~~}}||%%&&''((88776655YYZZ[[\\``__^^]]**++,,--33221100^^__``aa[[ZZYYXXppqqrrss//001122..--,,++ccddeeff$$##""!!aa``__^^{{zzyyxx))**++,,44332211]]^^__``\\[[ZZYY..//0011//..--,,bbccddee WWVVUUTTttuuvvww33445566**))((''gghhiijj ]]\\[[ZZwwvvuutt--..//0000//..--aabbccddXXWWVVUU22334455++**))((ffgghhii + + SSRRQQPPxxyyzz{{778899::&&%%$$##kkllmmnnYYXXWWVVssrrqqpp11223344,,++**))eeffgghh + + TTSSRRQQ66778899''&&%%$$jjkkllmmOONNMMLL||}}~~;;<<==>>""!! ~~}}||{{ooppqqrrUUTTSSMMoonnmmlk55667788((''&&%%iijjkkll PPOONNMM~~}}::;;<<==##""!! ~~}}||nnooppqqKKJJIIHH??@@AABBzzyyxxwwssttuuvvLLKKJJIIjihggffe99::;;<<$$##""!!~~}}mmnnooppLLKKJJII||{{zzyy>>??@@AA{{zzyyxxrrssttuuGGFFEEDDCCDDEEFFvvuuttsswwxxyyzz HHGGFFEEeddccbba==>>??@@ ||{{zzyyqqrrssttHHGGFFEExxwwvvuuBBCCDDEEwwvvuuttvvwwxxyyCCBBAA@@GGHHIIJJrrqqppoo{{||}}~~ + + DDCCBBAAa``__^^]AABBCCDDxxwwvvuuuuvvwwxxDDCCBBAAttssrrqqFFGGHHIIssrrqqppzz{{||}} !!??>>==<>==]\\[[ZZYEEFFGGHHttssrrqqyyzz{{|| @@??>>==ppoonnmmJJKKLLMMoonnmmll~~""##$$%%;;::9988OOPPQQRR jjiihhgg <<;;::99YXXWWVVUIIJJKKLLppoonnmm}}~~!!""##$$<<;;::99ggffeeddNNOOPPQQ kkjjiihh&&''(())77665544SSTTUUVV + + ffeeddcc33221100UTTSSRQPMMNNOOPP llkkjjii%%&&''((88776655ccbbaa``RRSSTTUU + + ggffeedd**++,,--33221100WWXXYYZZbbaa``__//..--,,ONMMLLKKQQRRSSTT + + hhggffee))**++,,44332211__^^]]\\VVWWXXYYccbbaa``..//0011//..--,,~~[[\\]]^^^^]]\\[[++**))((JJIIHHGGUUVVWWXXddccbbaa--..//0000//..--[[ZZYYXXZZ[[\\]]__^^]]\\22334455++**))((}}||{{zz__``aabbZZYYXXWW ''&&%%$$FFEEDDCCYYZZ[[\\``__^^]]11223344,,++**))WWVVUUTT^^__``aa[[ZZYYXX66778899''&&%%$$yyxxwwvvccddeeff + +VVUUTTSS!!""##$$##""!! BBAA@@??]]^^__``\\[[ZZYY55667788((''&&%%SSMMLLKKbbccddee WWVVUUTT::;;<<==##""!! uuttssrrgghhiijj RRQQPPOO%%&&''((>>==<<;;aabbccddXXWWVVUU99::;;<<$$##""!!JJIIHHGGffgghhii + + SSRRQQPP>>??@@AAqqppoonnkkllmmnnNNMMLLKK))**++,,::998765eeffgghh + + TTSSRRQQ==>>??@@ FFEEDDCCjjkkllmmOONNMMLLBBCCDDEEmmggffeeooppqqrrJJIIHHGG--..//0043322110iijjkkll PPOONNMMAABBCCDDBBAA@@??~~}}||nnooppqqKKJJIIHHFFGGHHIIddccbbaassttuuvvFFEEDDCC11223344 0//..--,~~}}mmnnooppLLKKJJIIEEFFGGHH>>==<<;;{{zzyyxxrrssttuuGGFFEEDDJJKKLLMM``__^^]]wwxxyyzzBBAA@@??vvuuttss55667788 + + + +,++**))(||{{zzyyqqrrssttHHGGFFEEIIJJKKLL::993322wwvvuuttvvwwxxyyCCBBAA@@NNOOPPQQ \\[[ZZYY~~}}||{{{{||}}~~ !!"">>==<<;;rrqqppoo99::;;<< (''&&%%$xxwwvvuuuuvvwwxxDDCCBBAAMMNNOOPP 1100//..ssrrqqppzz{{||}} !!??>>==<>??@@$##""!! ttssrrqqyyzz{{|| @@??>>==QQRRSSTT + + --,,++**oonnmmll~~""##$$%%;;::9988VVWWXXYYTTSSMMLLvvuuttss''(())**66554433jjiihhggAABBCCDD ppoonnmm}}~~!!""##$$<<;;::99UUVVWWXX))((''&&kkjjiihh&&''(())77665544ZZ[[\\]]KKJJIIHHrrqqppoo++,,--..221100//ffeeddccEEFFGGHHllkkjjii%%&&''((88776655YYZZ[[\\%%$$##""ggffeedd**++,,--33221100^^__``aaGGFFEEDDnnmmlkji//001122..--,,++bbaa``__IIJJKKLL !!""##hhggffee))**++,,44332211]]^^__``!! ccbbaa``..//0011//..--,,bbccddee CCBBAA@@hggffeed33445566**))((''^^]]\\[[MMNNOOPP$$%%&&''ddccbbaa--..//0000//..--aabbccdd + + __^^]]\\22334455++**))((ffgghhii + + ??>>==<>""!! ~~}}||{{VVUUTTSSUUVVWWXX,,--..// \\[[ZZYY55667788((''&&%%iijjkkll WWVVUUTT::;;<<==##""!! ~~}}||nnooppqq221100//\[[ZZYYX??@@AABBzzyyxxwwRRQQPPOONNMMLLKKCCDDEEFF@@??>>==}}||{{zzppqqrrssIIHHGGFFHHIIJJKKbbaa``__uuvvwwxxDDCCBBAAMMNNOOPP llkkjjiiuuvvwwxx !!??>>==<>==QQRRSSTT + + hhggffeeyyzz{{||""##$$%%;;::9988VVWWXXYYLLKKJJII__^^]]\\FFEEDDCCKKLLMMNN33221100uuttssrrxxyyzz{{AA@@??>>PPQQRRSS + +ZZYYXXWW||{{zzyy}}~~!!""##$$<<;;::99UUVVWWXXddccbbaa}}~~&&''(())77665544ZZ[[\\]]HHGGFFEE[[ZZYYXXBBAA@@??OOPPQQRR //..--,,qqppoonn||}}~~ !!""##==<<;;::TTUUVVWW VVUUTTSSxxwwvvuu%%&&''((88776655YYZZ[[\\``__^^]]**++,,--33221100^^__``aaDDCCBBAAWWVVUUTT>>==<<;;SSTTUUVV + + ++**))((mmllkkjj$$%%&&''99887766XXYYZZ[[MMLLKKJJttssrrqq))**++,,44332211]]^^__``\\[[ZZYY..//0011//..--,,bbccddee @@??>>==SSRRQQPP::998877WWXXYYZZ''&&%%$$iihhggff(())**++55443322\\]]^^__IIHHGGFFppoonnmm--..//0000//..--aabbccddXXWWVVUU22334455++**))((ffgghhii + + <<;;::99OONNMMLL66554433[[\\]]^^##""!! eeddccbb,,--..//1100//..``aabbccEEDDCCBBlkjihggf11223344,,++**))eeffgghh + + TTSSRRQQ66778899''&&%%$$jjkkllmm33221100KKJJIIHH221100//__``aabb + +aa``__^^00112233--,,++**ddeeffgg + + AA@@??>>feeddccb55667788((''&&%%iijjkkll PPOONNMM~~}}::;;<<==##""!! ~~}}||nnooppqq//..--,,GGFFEEDD..--,,++ccddeeff ]]\\[[ZZ44556677))((''&&hhiijjkk ==<<;;::baa``__^99::;;<<$$##""!!~~}}mmnnooppLLKKJJII||{{zzyy>>??@@AA{{zzyyxxrrssttuu++**))((CCBBAA@@**))((''gghhiijjYYXXWWVV8899::;;%%$$##""~~llmmnnoo99332211^]]\\[[Z==>>??@@ ||{{zzyyqqrrssttHHGGFFEExxwwvvuuBBCCDDEEwwvvuuttvvwwxxyy''&&%%$$??>>==<<&&%%$$##kkllmmnn UUTTSSRR<<==>>??!! }}||{{zzppqqrrss00//..--ZYYXXWWVAABBCCDDxxwwvvuuuuvvwwxxDDCCBBAAttssrrqqFFGGHHIIssrrqqppzz{{||}} !!##""!! ;;::9988""!! ~~}}||{{ooppqqrr + + QQPPOONN@@AABBCCyyxxwwvvttuuvvww,,++**))VUUTTSSREEFFGGHHttssrrqqyyzz{{|| @@??>>==ppoonnmmJJKKLLMMoonnmmll~~""##$$%%77665544zzyyxxwwssttuuvv !!""##MMLLKKJJDDEEFFGGuuttssrrxxyyzz{{((''&&%%QPONMMLLIIJJKKLLppoonnmm}}~~!!""##$$<<;;::99ggffeeddNNOOPPQQ kkjjiihh&&''(())33221100vvuuttsswwxxyyzz$$%%&&''IIHHGGFFHHIIJJKKqqppoonn||}}~~ !!""##$$##""!!KKJJIIHHMMNNOOPP llkkjjii%%&&''((88776655ccbbaa``RRSSTTUU + + ggffeedd**++,,--//..--,,rrqqppoo{{||}}~~(())**++ + + EEDDCCBBLLMMNNOOmmllkkjj$$%%&&'' GGFFEEDDQQRRSSTT + + hhggffee))**++,,44332211__^^]]\\VVWWXXYYccbbaa``..//0011 ++**))((nnmmllkk,,--..// AA@@??>>PPQQRRSS + +iihhggff(())**++CCBBAA@@UUVVWWXXddccbbaa--..//0000//..--[[ZZYYXXZZ[[\\]]__^^]]\\22334455 + + + +''&&%%$$ jjiihhgg00112233==<<;;::TTUUVVWW eeddccbb,,--..//??>>==<>??@@55443322\\]]^^__]]\\[[ZZ44556677 + + 65433221aabbccddXXWWVVUU99::;;<<$$##""!!JJIIHHGGffgghhii + + SSRRQQPP>>??@@AA^^]]\\[[AABBCCDD !!""#1100//..``aabbccYYXXWWVV8899::;;100//..-eeffgghh + + TTSSRRQQ==>>??@@ FFEEDDCCjjkkllmmOONNMMLLBBCCDDEEZZYYXXWWEEFFGGHH#$$%%&&'--,,++**ddeeffgg + + UUTTSSRR<<==>>?? -,,++**)iijjkkll PPOONNMMAABBCCDDBBAA@@??~~}}||nnooppqqKKJJIIHHFFGGHHII !!""## + +VVUUTTSSIIJJKKLL'(())**+))((''&&hhiijjkk QQPPOONN@@AABBCC + + )((''&&%~~}}mmnnooppLLKKJJIIEEFFGGHH>>==<<;;{{zzyyxxrrssttuuGGFFEEDDJJKKLLMM$$%%&&'' RRQQPPOOMMSSTTUU+,,--../%%$$##""~~llmmnnooMMLLKKJJDDEEFFGG%$$##""!||{{zzyyqqrrssttHHGGFFEEIIJJKKLL::993322wwvvuuttvvwwxxyyCCBBAA@@NNOOPPQQ(())**++ + + NNMMLLKKVVWWXXYY/0011223!! }}||{{zzppqqrrssIIHHGGFFHHIIJJKK! xxwwvvuuuuvvwwxxDDCCBBAAMMNNOOPP 1100//..ssrrqqppzz{{||}} !!??>>==<>==QQRRSSTT + + --,,++**oonnmmll~~""##$$%%;;::9988VVWWXXYY00112233FFEEDDCC^^__``aa::;;<<==uuttssrrxxyyzz{{AA@@??>>PPQQRRSS !!""ppoonnmm}}~~!!""##$$<<;;::99UUVVWWXX))((''&&kkjjiihh&&''(())77665544ZZ[[\\]]99::;;<<BBAA@@??bbccddee>>??@@AAqqppoonn||}}~~ !!""##==<<;;::TTUUVVWW##$$%%&&llkkjjii%%&&''((88776655YYZZ[[\\%%$$##""ggffeedd**++,,--33221100^^__``aa==>>??@@ !!"">>==<<;;ffggmmnnBBCCDDEEmmllkkjj$$%%&&''99887766XXYYZZ[[''(())** hhggffee))**++,,44332211]]^^__``!! ccbbaa``..//0011//..--,,bbccddeeAABBCCDD##$$%%&&::998877ooppqqrrFFGGHHII + +iihhggff(())**++55443322\\]]^^__++,,--.. + + ddccbbaa--..//0000//..--aabbccdd + + __^^]]\\22334455++**))((ffgghhiiEEFFGGHH !!''(())**66554433ssttuuvvJJKKLLMM eeddccbb,,--..//1100//..``aabbcc//001122``__^^]]11223344,,++**))eeffgghh [[ZZYYXX66778899''&&%%$$jjkkllmmIIJJKKLL""##$$%%++,,--..221100//wwxxyyzzNOPQRSSTaa``__^^00112233--,,++**ddeeffgg3399::;;\\[[ZZYY55667788((''&&%%iijjkkll WWVVUUTT::;;<<==##""!! ~~}}||nnooppqqMMSSTTUU&&''(())//001122..--,,++{{||}}~~TUUVVWWX]]\\[[ZZ44556677))((''&&hhiijjkk<<==>>??XXWWVVUU99::;;<<$$##""!!~~}}mmnnoopp + + SSRRQQPP>>??@@AA{{zzyyxxrrssttuuVVWWXXYY**++,,--33445566**))((''XYYZZ[[\YYXXWWVV8899::;;%%$$##""~~llmmnnoo@@AABBCC + + TTSSRRQQ==>>??@@ ||{{zzyyqqrrsstt !!OONNMMLLBBCCDDEEwwvvuuttvvwwxxyyZZ[[\\]]..//0011778899::&&%%$$##\]]^^__` + + UUTTSSRR<<==>>??!! }}||{{zzppqqrrssDDEEFFGG PPOONNMMAABBCCDDxxwwvvuuuuvvwwxx""##$$%%KKJJIIHHFFGGHHIIssrrqqppzz{{||}}^^__``aa22334455;;<<==>>""!! ~~}}||{{`aabbccd QQPPOONN@@AABBCCyyxxwwvvttuuvvwwHHIIJJKKLLKKJJIIEEFFGGHHttssrrqqyyzz{{||&&''(()) + +GGFFEEDDJJKKLLMMoonnmmll~~bbccddee66778899??@@AABBzzyyxxwwdeeffgghMMLLKKJJDDEEFFGGuuttssrrxxyyzz{{LLMMSSTTHHGGFFEEIIJJKKLLppoonnmm}}~~**++,,-- CCBBAA@@NNOOPPQQ kkjjiihhffggmmnn::;;<<==CCDDEEFFvvuuttssijklmmnnIIHHGGFFHHIIJJKKqqppoonn||}}~~UUVVWWXXDDCCBBAAMMNNOOPP llkkjjii..//0011??>>==<>??@@AAGGHHIIJJrrqqppooooppqqrrEEDDCCBBLLMMNNOOmmllkkjjYYZZ[[\\ @@??>>==QQRRSSTT + + hhggffee223399::;;::9988VVWWXXYYccbbaa``ssttuuvvBBCCDDEEKKLLMMNNnnmmllkkssttuuvvAA@@??>>PPQQRRSS + +iihhggff]]^^__``!!""##$$<<;;::99UUVVWWXXddccbbaa;;<<==>>77665544ZZ[[\\]]__^^]]\\wwxxyyzzFFGGHHIIOOPPQQRR jjiihhggwwxxyyzz !!""##==<<;;::TTUUVVWW eeddccbbaabbccdd%%&&''((88776655YYZZ[[\\``__^^]]??@@AABB !33221100^^__``aa[[ZZYYXX{{||}}~~JJKKLLMMSSTTUUVV + + ffeeddcc{{||}}~~$$%%&&''99887766XXYYZZ[[aa``__^^eeffggmm))**++,,44332211]]^^__``\\[[ZZYYCCDDEEFF!""##$$%//..--,,bbccddee WWVVUUTTNNOOPPQQWWXXYYZZbbaa``__(())**++55443322\\]]^^__]]\\[[ZZnnooppqq--..//0000//..--aabbccddXXWWVVUUGGHHIIJJ%&&''(()++**))((ffgghhii + + SSRRQQPPRRSSTTUU[[\\]]^^^^]]\\[[,,--..//1100//..``aabbccYYXXWWVVrrssttuu11223344,,++**))eeffgghh + + TTSSRRQQKKLLMMSS)**++,,-''&&%%$$jjkkllmmOONNMMLLVVWWXXYY__``aabbZZYYXXWW00112233--,,++**ddeeffgg + + UUTTSSRRvvwwxxyy55667788((''&&%%iijjkkll PPOONNMMTTUUVVWW-..//001##""!! ~~}}||nnooppqqKKJJIIHHZZ[[\\]]ccddeeff + +VVUUTTSS44556677))((''&&hhiijjkk QQPPOONNzz{{||}}99::;;<<$$##""!!~~}}mmnnooppLLKKJJIIXXYYZZ[[12233456{{zzyyxxrrssttuuGGFFEEDD^^__``aagghhiijj RRQQPPOO8899::;;%%$$##""~~llmmnnooMMLLKKJJ~~==>>??@@ ||{{zzyyqqrrssttHHGGFFEE\\]]^^__7899::;;wwvvuuttvvwwxxyyCCBBAA@@bbccddeekkllmmnnNNMMLLKK~~}}||{{<<==>>??!! }}||{{zzppqqrrssIIHHGGFFAABBCCDDxxwwvvuuuuvvwwxxDDCCBBAA``aabbcc<<==>>??ssrrqqppzz{{||}} !!??>>==<>==ddeeffgg@@AABBCCoonnmmll~~""##$$%%;;::9988jjkkllmmssttuuvvFFEEDDCCvvuuttssDDEEFFGGuuttssrrxxyyzz{{AA@@??>>IIJJKKLLppoonnmm}}~~!!""##$$<<;;::99mmnnooppDDEEFFGG kkjjiihh&&''(())77665544nnooppqqwwxxyyzzBBAA@@??rrqqppooHHIIJJKKqqppoonn||}}~~ !!""##==<<;;::MMNNOOPP llkkjjii%%&&''((88776655qqrrssttHHIIJJKK + + ggffeedd**++,,--33221100rrssttuu{{||}}~~ !!"">>==<<;;nnmmggffLLMMNNOOmmllkkjj$$%%&&''99887766QQRRSSTT + + hhggffee))**++,,44332211uuvvwwxxLLMMNOPQccbbaa``..//0011//..--,,~~}}||{{vvwwxxyy##$$%%&&::998877eeddccbbPPQQRRSS + +iihhggff(())**++55443322UUVVWWXXddccbbaa--..//0000//..--yyzz{{||RSSTTUUV__^^]]\\22334455++**))((zzyyxxwwzz{{||}}''(())**66554433aa``__^^TTUUVVWW eeddccbb,,--..//1100//..YYZZ[[\\``__^^]]11223344,,++**))}}~~VWWXXYYZ[[ZZYYXX66778899''&&%%$$vvuuttss~~}}||~~++,,--..221100//]]\\[[ZZXXYYZZ[[aa``__^^00112233--,,++**~~}}||]]^^__``\\[[ZZYY55667788((''&&%%Z[[\\]]^ WWVVUUTT::;;<<==##""!! rrqqppoo{{zzyyxx//001122..--,,++YYXXWWVV\\]]^^__]]\\[[ZZ44556677))((''&&{{zzyyxxaabbccddXXWWVVUU99::;;<<$$##""!!~~}}^__``aab + + SSRRQQPP>>??@@AAnnmmggffwwvvuutt33445566**))((''UUTTSSMM``aabbccYYXXWWVV8899::;;%%$$##""wwvvuutteeffgghh + + TTSSRRQQ==>>??@@ ||{{zzyybccddeefOONNMMLLBBCCDDEEeeddccbbssrrqqpp778899::&&%%$$##LLKKJJIIddeeffgg + + UUTTSSRR<<==>>??!! ssrrqqppiijjkkll PPOONNMMAABBCCDDxxwwvvuufgghijklKKJJIIHHFFGGHHIIaa``__^^oonnmmll;;<<==>>""!! HHGGFFEEhhiijjkk QQPPOONN@@AABBCCoonnmmggmmnnooppLLKKJJIIEEFFGGHHttssrrqqmmnnooppGGFFEEDDJJKKLLMM]]\\[[ZZkkjjiihh??@@AABBDDCCBBAA~~llmmnnooMMLLKKJJDDEEFFGGffeeddccqqrrssttHHGGFFEEIIJJKKLLppoonnmmqqrrssttCCBBAA@@NNOOPPQQ YYXXWWVVggffeeddZHAbtArdrXQJ`vffے`JXQtArdp˂rbdQZ|ZHAbtlJp˂rbdQZ|˂pZZdQbtJ`ےdrtAJ`JXQrrd|˂rXQZ|d`JXQlJtArHAZp˂tbdQے`JXQ|ZdQbp˂r`vXnr˂p|ZdQbXQJ`ےdrtAے`JXQtArdXQHAZpltbHAbےlJtAbHAZpltb˂pZZdQbtJ`ےrtAJlrZAbdfrXQJZ|dr˂ptlJXQJ`ےvpfZHAbtlJbHAZJltr˂p|ZdQb˂rXQnvp`JXQrrdf˂rXQdQZ|HAbےlJtAbHAZptbdQے`J~Hfp`ےbrtAJlZHAbtArdbHAZH~fے`JXQtArdp˂rbdQZ|ZHAbtlJJ`ےff`v˂pZ~HfJ`ےdrtAJ`JXQrrd|˂rXQZ|dXQr˂vnXHAZp˂tbdQے`JXQ|ZdQbp˂r`vXnr˂pf~HXQJ`ےdrtAے`JXQtArdbHAZpXnvHAbےpvnbHAZpltb˂pZZdQbtJ`ےtbdQZpZHAbv`frXQJZ|dr˂ptlJXQJ`ےvpfZHAbfpvbHAZJltr˂p|ZdQb˂rXQpfH~`JXQrXv`f˂rXQdQZ|HAbےlJtAbHAZp|drے`J~Hfp`ےbtAJlZHAbtArdrXQH~fے`JXQnXv`p˂rbdQZ|ZHAbtlJJ`p˂f`v˂pZ~HfJ`ےdtAJl`JXQrrd|˂rXQtAJlXQr˂vnXHAZp˂tbnے`JXQ|ZdQbJ`ے`vXnr˂pf~HXQJ`ےdtAJے`JXQtArdrXQJXnvHAbےpvnbHAZptbn˂pZZdQbtJ`ےtbdQZpZAb`v`frXQJvpfHr˂ptlJbHAZpvpfZHAbfpvbHAZltbr˂p|ZdQb`ےbf~f``JXQrXv`f˂rXQvpfHAbےlJtAbHAZp|ltJXQr~Hfp`ےbf`vZHAbtArd˂rXQH~fے`JXQnXv`p˂rnvpZHAbtlJHAZp˂vXn˂pZ~HfJ`ےHf``JXQrrd|˂rXQbnv˂pZHvnXHAZp˂Xnvے`JXQ|ZdQbJ`ے`vXnr˂pf~HXQJ`ےfHfے`JXQtArdrXQJvpfHHAbےpvnbHAZpvXn˂pZZdQbtJ`ےp`vXAbے`v`frXQJpfH~r˂ptlJbHAXQJvpfZHAbfpvbHAZ`vXnr˂p|ZdQb`ے~f``JXQrXv`f˂rXQvpfHHAbےlJtAbHAZpnvpJXQr~Hfp`ےbf`vZHAbtArd`ےbH~fے`JXQnXv`p˂rvpfZHAbtlJrXQJ`vXn˂pZ~HfJ`ے~f``JXQrrdf˂rXQfH~˂pZHvnXHAZp˂Xnvے`JXQ|ZdQbHAZp˂`vXnr˂pf~HXQJ`ےH~fے`JXQtArdےbHAvpf~HAbےpvnbHAZpvXn˂pZ~HfJ`ےf`vXAbJXQv`frXQJpfH~r˂ptlJrXQJvpfZHAbfpvbHAZ`vXnr˂pf~HZp˂f`vX`JXQrXv`f˂rXQvpfHHAbےpvnbHAZpnfr˂p~Hfp`ےbf`vZHAbtArd`ےbH~fے`JXQnXv`p˂rvpfZHAbfpvrXQJ`nvp˂pZ~HfJ`ے~f``JXQrXv`f˂rXQ`vXnZHAbvnXHAZp˂Xnvے`JXQ|ZdQbHAZp``vXnr˂pf~HXQJ`ےH~fے`JXQnXv`ےbHAfH~HAbےpvnbHAZpvXn˂pZ~HfJ`ےvpfے`JXQv`frXQJpfH~r˂ptlJےbHAvpfZHAbfpvbHAZ`vXnr˂pf~HXQJ`ےf`vX`JXQrXv`f˂rXQvpfHHAbےpvnbHAZpH~fr˂p~Hfp`ےbf`vZHAbtArdZp˂H~fے`JXQnXv`p˂rvpfZHAbfpvbHAZnvp˂pZ~HfJ`ے~f``JXQrXv`f˂rXQ`vXnZA`JvnXHAZp˂Xnvے`JXQf~HrXQJ``vXnr˂pf~HXQJ`ےH~fے`JXQnXv`p˂rfH~fHAے`pvnbHAZpvXn˂pZ~HfJ`ےvp`XQrbtv`frXQJpfH~r˂pXv`fےbHAvpfZHAےfpvbHAZ`vXnr˂pf~HXQJ`ےvXnJXQrbXv`f˂rXQvpfHHAbےpvnbHAZpvXnlJtA~Hfp`ےbf`vZHAb~HfZp˂H~f`JXQrnXv`p˂rvpfZHAbfpvbHAZvpfHtlJ~HfJ`ے~f``JXQrXv`f˂rXQvpfHd|ZvnXHAZp˂Xnvے`JXQpvnbHAZ`vXnbtlf~HXQJ`ےH~fے`JXQnXv`p`ے~f`tAd|pvnbHAZpvXn˂pZ~HfJ`ے~f`dQbtv`frXQJpfH~r˂pXv`fdrtAvpfJtAdfpvbHAZ`vXnr˂pf~HbHAZpvXnZdQbtXv`f˂rXQvpfHHAbےpvnbHAZpvXnlJtAr~Hfp`ےbf`vZHAb~HfJbdQH~f|ZdQbnXv`p˂rvpfZHAbfpv˂rXQvpfHlJtA~HfJ`ے~f``JXQrXv`f˂rXQvpfHd|ZvnXHAZdXnvے`JXQp`fZ|d`vXntlJf~HXQJ`ےH~fے`JXQnXv`J`ے~fvnrd|pvnbHAZvXn˂pZ~HfJ`ےXnvdQbtv`frtAJlpfH~r˂p~HfprtAJl瀅vpftArdfpvbHAZ`vXnr˂pf~HbHAZpvpfZdQbtXv`fdrtAJvpfHHAbےpvnbHAZppfH~lJtAr~HfptbdQf`vZHAbvnXtbdQH~f|ZdQbnXv`drtAvpfZHAbfpv˂bH~flJtA~Hfltb~f``JXQrXv`f˂rXQf`vd|ZvnXZ|dXnvے`JXQv`fZ|d`vXntlJf~HJltH~fے`JXQnXv`HAZd`vXnrd|pvndQZ|vXn˂pZ~HfJ`ےXnvdQbtv`frtAJlpfH~r˂p~HfprtAJlvpftArdfpvbdQZ|`vXnr˂pf~HrtAdQZvpfZdQbtXv`fdrtAJvpfHHAے`pvnbHAZppfH~lJtAr~HfptbdQf`vZHAbv~bQZ|H~f|ZdQbnXv`drtAvpfZHAےfpv|drH~flJtA~Hfltb~f`JXQrbXv`f˂rXQvpd|ZvnXZ|dXnvے`JXQHfpvdrtAJ`vXntlJf~HJltH~f`JXQrnXv`tAJl`vnvprd|pvndQZ|vXntlJ~HfJ`ےfH~dQbtv`frtAJlpfH~r˂pnXvltbvpftArdfpvbdQZ|`vXnbtlf~HtbdQZfH~ZdQbtXv`fdrtAJvpfHtAd|pvnbHAZpf`vXlJtAr~HfptbdQf`vZHAb`f~dQZ|H~f|ZdQbnXv`drtAvpfJtAdfpv|drf`vXlJtA~Hfltb~f`ZdQbtXv`f˂rXQnvpd|ZvnXZ|dXnvے`JXQHfpvdrtAJ`vXntlJf~HJltH~f|ZdQbnXv`tAJl|nvprd|pvndQZ|vXnlJtA~HfJ`ےfH~dQbtv`frtAJlpfH~r˂pnXHltbQvpftArdfpvbdQZ|`vXntlJf~HdrtAfH~ZdQbtXv`fdrtAJvpfHrd|pvnbHAZf`pflJtAr~HfptbdQf`vZHAbfpvZdrtH~f|ZdQbnXv`drtAvpftArdfpvJltf`vXlJtA~Hfltb~f`ZdQbtXv`fdrtAdQH~fd|ZvnXZ|dXnvے`JXQnXv`AJlt`vXntlJf~HJltH~f|ZdQbnXv`bdQZ|nvfHrd|pvndQZ|vXnlJtA~HfZ|d`vXndQbtv`frtAJlpfH~r˂pf~HbdQZ|vpftArdfpvbdQZ|`vXntlJf~HdrtA~fZZdQbtXv`fdrtAJvpfHrd|pvnrtAJlvpflJtAr~HfptbdQf`v|ZdQbfpvdrtH~f|ZdQbnXv`drtAvpftArdfpvJltHAbےlJtA~Hfltb~f`ZdQbtXv`ftbdQH~fd|ZvnXZ|dXnvtlJnXv`AJltZHAbtlJf~HJltH~f|ZdQbnXv`drtAJ`JXQrrd|pvndQZ|vXnlJtA~HfZ|d`vXHdQbtv`frtAJlpfH~tArdpvnbdQZے`JXQtArdfpvbdQZ|`vXntlJf~Hltb˂pZZdQbtXv`fdrtAJvpfHrd|pvnrtAJl~fZlJtArHfpvtbdQf`v|ZdQbXv`frtAJlr˂p|ZdQbnXv`drtAvpftArdfpvdQZ|HAbےlJtAHfpltb~f`ZdQbtXv`f|drHAbd|ZnrXQZ|dXnvtlJ~HftbdQZHAbtlJfHfJltH~f|ZdQbnXv`drtAJ`JXQrrd|vnrdQZ|vXnlJtA~HftAJlJQr˂pdQbtJ`ےrtAJlpfH~tArdpvnZ|dے`JXQtArdpvnbdQZ|`vXntlJf~Hltb˂pZZdQbtXQJ`ےdrtAJvpfHrd|pvntbdQZZHAblJtArHAZp˂tbdQf`v|ZdQbXv`frtAJlr˂p|ZdQbrXQJ`drtAvpftArdfpvdQtAJlHAbےlJtAHAZpltb~f`ZdQbtXv`f|drے`JXd|ZrXQJZ|dXnvtlJnXtbdQZHAbtlJےHAZJltH~f|ZdQbnXv`tbdQ`JXQrrd|˂rXQdQZ|vXnlJtA~HftAJlQr˂pdQbt`ےbrtAJlpfH~tArdv`fZ|rAے`JXQtArdp˂rbdQZ|`vXntlJf~HZ|d˂pZZdQbtJ`ےdrtAJvpfHrd|pvntdrtAZHAblJtArHAZp˂tbdQfZHA|ZdQb~HfpJltr˂p|ZdQbXQJ`ےdrtAvpftArdfpvrtAJlHAbےlJtAbHAZpltb~fZZdQbtXv`fJltے`JQrd|ZrXQJZ|dbے`tlJvnXbdQZ|ZHAbtlJbHAZJltH~f|ZdQbnXv`tbdQ`JXQrrd|˂rXQdQZ|HAbےlJtA~HfbdQZ|pZHAdQbt`ےbrtAJlJXQr˂pZHAtArdv`p˂drtAے`JXQtArdp˂rbdQZ|ZHAbtlJf~HZ|l璀˂pZZdQbtJ`ےdrtAJ`JXQrrd|pvndrtAbے`lJtArHAZp˂tbdQ˂pZHAbے`|ZdQbrXQJJltr˂p|ZdQbXQJ`ےdrtAے`JXQtArdfpvtbdQZHAbےlJtAbHAZpltb˂pZZdQbtXv`fJltJXQrd|ZrXQJZ|dbے`JXQrtlJ`ےbbdQZ|ZHAbtlJbHAZJltr˂p|ZdQbnXv`|dr`JXQrrd|˂rXQdQZ|HAbےlJtAHfpbdQtAJ˂pZHAdQbt`ےbrtAJlJXQr˂pZHAtArdHAZp˂drAJے`JXQtArdp˂rbdQZ|ZHAbtlJfHftAJl璀˂pZZdQbtJ`ےdrtAJ`JXQrrd|vnrltbbے`lJtArHAZp˂tbdQ˂pZHAbے`|ZdQbrXQHAtbdQZr˂p|ZdQbXQJ`ےdrtAے`JXQtArdpvntbdQZHAbےlJtAbHAZpltb˂pZZdQbtXQJ`ےdQZ|JXQrd|ZrXQJZ|dbے`JXQrtlJZp˂|drZHAbtlJbHAZJltr˂p|ZdQbrXQJ`|dt`JXQrrd|˂rXQdQZ|HAbےlJtAHAZpdrtAJZHAbdQbt`ےbrtAJlJXQr˂pZHAtArdrXQJ`tAJlے`JXQtArdp˂rbdQZ|ZHAbtlJp˂rbdQZ|˂pZZdQbtJ`ےdrtAJ`JXQrrd|˂rXQltb`JXQlJtArHAZp˂tbdQ˂pZHAbے`|ZdQbےbHAtbdQZr˂p|ZdQbXQJ`ےdrtAے`JXQtArdXQJ`ےdrtAHAbےlJtAbHAZpltb˂pZZdQbtJ`ےdQZ|lr˂pd|ZrXQJZ|dbے`JXQrtlJZp˂|dnZHAbtlJbHAZJltr˂p|ZdQbbHAZJlt`JXQrrd|˂rXQdQZ|HAbےlJtAbHAZptbdQZHAbdQbt`ےbrtAJlJXQr˂pZHAbے`lJtArHAZp˂tbdQے`JXQHfpvےbHAf`vXXQr˂f~rXQJ`|drJXQrvnv`p˂rvpfZHAbfpvbHAZJltr˂pdfp˂r~f``JXQrXv`f˂rXQdQZ|XQr`vXnJXQrdfrXQJZ|dr˂pnXvZp˂nvppZHAbHfpvےbHAtAJl˂pZHAf~HXQJ`ےH~fے`JXQnXv`p˂rbdQZ|ZHAb~HXvXQJ`ےvXn˂pZ~HfJ`ےdtAJlے`JXQvˍpf˂pZHA~Hfp`ےbrtAJl`JXQr`f~rXQJ`fH~ے`JnXvZp˂tbdQZbے`fpvbHAZ`vXnr˂pf~HXQJ`ےdtAJے`JXQ`f~bHAZvpfHHAbےpvnbHAZptbnr˂pH~ㅐfbے`vnXHAZp˂tbdQ˂pZHfpvےbHAf`vXXQr˂`f~rXQJ`|dtAJXQrnXv`p˂rvpfZHAbfpvbHAZltbr˂pHfpvprQJ`~f``JXQrXv`f˂rXQvpfZHAb`vXnJXQrv`frXQJZ|dHAbےnXvZp˂nvppZHAbHfpvےbHAJltے`Jf~HXQJ`ےH~fے`JXQnXv`p˂rnvpZHAbnXvےbHvXn˂pZ~HfJ`ےHf`ے`JXQvˍpf˂pZHA~Hfp`ےbtAJl`JXQr`f~rXQJ`fH~ے`JnXvZp˂bnvXQr˂fpvbHAZ`vXnr˂pf~HXQJ`ےfHfے`JXQ`f~AZp˂vpfHHAbےpvnbHAZpvXnr˂pH~ㅐfbے`vnXHAZp˂tbn˂pZHfpvےbHAf`vXXQr˂`f~rXQJ`pfHpZHAbnvfp˂rvpfZHAbfpvbHAZ`vXnr˂pHfp`rXQJ`~f``JXQrXv`f˂rXQvpfH`JXQr`vXnJXQrv`frXQJvp`vHAXQrnXvZp˂nvppZHAbHfpvےbHAf`vXے`J~HfpXQJ`ےH~fے`JXQnXv`p˂rvpfZHAbf~HےbHvXn˂pZ~HfJ`ے~f`˂pZvˍpf˂pZHA~Hfp`ےbXnv˂pZHA`f~rXQJ`fH~ے`JnXvZp˂nvpXQr˂vnXbHAZ`vXnr˂pf~HXQJ`ےH~fے`JXQfpvAZp˂vpfHHAbےpvnbHAZpvXnHAbےH~ㅐfbے`vnXHAZp˂pfH~bے`HfpvےbHAf`vXXQr˂`f~rXQJ`fH~p`JXQv`fp˂rvpfZHAbfpvbHAZ`vXnr˂pnXv`rQJ~f``JXQrXv`f˂rXQvpfH`JXQr`vXnJXQrv`frXQJf`vJXQrnXvZp˂nvppZHAbHfpvےbHAf`vXr˂p~HfpXQJ`ےH~fے`JXQnXv`p˂rvpfZHAbf~HbHAZvXn˂pZ~HfJ`ے~f`˂pZvˍpf˂pZHA~Hfp`ےbXn˂p`J`f~rXQJ`fH~ے`JnXvZp˂nvpZHAbvnXvbHAZ`vXnr˂pf~HXQJ`ےH~fے`JXQfpvdrtAJvpfHHAbےpvnbHAZpvXnHAXQrH~ㅐfbے`vnXHAZp˂f`vXXQrbtHfpvےbHAf`vXXQr˂`f~rXQJ`fH~ے`JXQf~HfdrtAvpfZHAbfpvbHAZ`vXnr˂p~Hfltb~f``JXQrXv`f˂rXQvpfH˂pZHA`vXnJXQrv`frXQJnvplJAnXvZdrnvppZHAbHfpvےbHAf`vXr˂ppvnJltH~fے`JXQnXv`p˂rvpfZHAbpvndQZ|vXn˂pZ~HfJ`ے~f`bے`vˍpf˂pZHA~Hfp`ےbfH~|ZdQb`f~tAJlfH~ے`JnXvZp˂nvpZHAXQrXv`fbdQZ|`vXnr˂pf~HXQJ`ےH~fے`JXQXv`fdrtAJvpfHHAے`pvnbHAZpvXnJXQrH~ㅐfbے`vnXHAZp˂f`vXtlJHfpvtbdQZf`vXXQr˂`f~rXQJ`fH~˂pZ~HfdrtAvpfZHAےfpvbHAZ`vXnr˂p~Hfltb~f`JXQrbXv`f˂rXQvpfH˂p`Z`vXnJXQrv`frXQJnvptArdnXv|drnvppZHAHfpvےbHAf`vXHAbےpvnJltH~f`JXQrnXv`p˂rvpfZHAbpvndQZ|vXntlJ~HfJ`ے~f`QXb㉀ەvˍpf˂pZHA~Hfp`ےb`vXn|ZdQb`f~tAJlfH~ے`JXQnXvZp˂nvp`JXQrXv`fbdQZ|`vXnbtlf~HXQJ`ےH~fے`JXQXHfpdrtAJvpfHtAd|pvnbHAZpvXnpJAHrH~ㅐfېے`JvnXHAZp˂vpftJArdHfpvtbdQZf`vXrbt`f~rXQJ`fH~˂p`~fpvdrtAvpfJtAdfpvbHAZ`vXnr˂pvnXltb~f`ZdQbtXv`f˂rXQvpfHˁ`Z`vXnXQrbtv`frXQJH~f|ZdnXv|drnvplJtAdHfpvےbHAf`vXJXQrbnXv`JltH~f|ZdQbnXv`p˂rvpfZHAbv`fdQZ|vXnlJtA~HfJ`ے~f`QXb㉀vˍpflJtA~Hfp`ےb`vXnQbtl`f~tAJlfH~|ZdQnXvZp˂nvptl|f~HbdQZ|`vXntlJf~HXQJ`ےH~fے`JXQ~HfpdrtAJvpfHrd|pvnbHAZvXnˁ`ZQXH~ㅐfd|ZvnXHAZp˂vpfJtArdHfpvtbdQZf`vXbtl`f~rXQJ`fH~ZdQbtfpvdrtAvpftArdfpvbHAZ`vXnr˂pvnXltb~f`ZdQbtXv`fdrtAJvpfHb㉀ۑp`vXndQbtv`frXQJHXn|ZdnXv|drnvpJtArdHfpvےbHAf`vXlJtAnXv`JltH~f|ZdQbnXv`drtAvpfZHAbv`pvdQZ|vXnlJtA~Hfltb~f`JAHr󙐕vˍp|lJtAr~Hfp`ےbvpfHQbtl`f~tAJlfH~|ZdQnXvZdrnvprd|f~fbdQZ|`vXntlJf~HJltH~fے`JXQnXvdrtAJvpfHrd|pvndQZ|vXnˁ`ZQXdrQtd|ZvnXHAZd~f`JAr|HfpvtbdQZf`vXbtl`f~tAJlfH~ZdQbtvnXdrtAvpftArdfpvbdQZ|`vXnr˂p`f~ltb~f`ZdQbtXv`fdrtAJvpfHb㉀ۑpJltdQbtv`frtAJlvXnZdQbtnXv|drnvpJtArdHfpvtbdQZf`vXd|Zv`fJltH~f|ZdQbnXv`drtAvpfZHAےHfpvdQZ|vXnlJtA~Hfltb~f``ZQXbbAdZ|lJtAr~HfptbdQvpfHlJtA`f~tAJlfH~|ZdQnXv|drnvpdQbt~HfpbdQZ|`vXntlJf~HJltH~f`JXQrnXvdrtAJvpfHrd|pvndQZ|vXnۑpJdrQtd|ZvnXZ|d~vrd|HfpvtbdQZf`vXbtl`f~tAJlfH~lJtArvnXdrtAvpftArdfpvbdQZ|`vXnbtl`fltb~f`ZdQbtXv`fdrtAJvpfHAHr󙐂JltdQbtv`frtAJlpfH~ZdQbtnXv|drnvpJtArdHfpvtbdQZf`vXd|Zv`ffJltH~f|ZdQbnXv`drtAvpf|ZdQbnXv`dQZ|vXnlJtA~Hfltb~f``ZQXbbAdZ|lJtAr~HfptbdQf`vlJtA`fHtAJlfH~|ZdQnXv|drnvpdQbtpvnbdQZ|`vXntlJf~HJltH~ftlJf~HdrtAJvpfHrd|pvndQZ|vXnۑpJdrQtd|ZvnXZ|dXnvrZdQfpvtbdQZf`vXbtl`f~tAJlfH~l|ZdQrXQJ`drtAvpftArdfpvbdQZ|`vXntArdfpvltb~f`ZdQbtXv`fdrtAJvpfHAHQXb㉀JltdQbtv`frtAJlpfH~btlnrXQJ|drnvpJtArdHfpvtbdQZf`vXbtlےHAZJltH~f|ZdQbnXv`drtAvpf|ZdQbnXv`dQZ|vXnlJtA~Hfltb~f`ۑpJAHbAdZ|lJtAr~HfptbdQf`pJtArd`ےHAtAJlfH~|ZdQnXv|drnvpJtArdp˂rbdQZ|`vXntlJf~HJltH~ftd|pvndrtAJvpfHrd|pvndQZ|vXnr󙐂ˁ`drQtd|ZvnXZ|dfH~|ZdQZp˂tbdQZf`vXbtl`f~tAJlfH~|ZdQXQJ`ےdrtAvpftArdfpvbdQZ|`vXnZdQbtrXQJ`ltb~fZZdQbtXv`fdrtAJvpfHZQXb㉀JltdQbtv`frtAJlf`vXbtlrXQJ`|drnvpJtArdHfpvtbdQZf`vXbtlbHAZJltH~f|ZdQbnXv`drtAvpflJtAAZp˂dQZ|HAbےlJtA~Hfltb~f`ۑpJAHbAdZ|lJtAr~HfptbdQnvpJtArdےbHAtAJlfH~|ZdQnXv|drnvpJtAdQbp˂rbdQZ|ZHAbtlJf~HJltH~frd|rXQJdrtAJ`JXQrrd|pvndQZ|vXnr󙐉ۂdrQtd|ZvnXZ|dfH~ZQbtZp˂tbdQZfZHAbbtl`f~tAJlfH~tlJXQJ`ےdrtAے`JXQtArdfpvbdQZ|`vXnZdQbt`ےbltb˂pZZdQbtXv`fdrtAJvpfHpJAHrJltdQbtv`frtAJlf`vXlJtArrXQJ`|drے`JJtArdHfpvtbdQZf`vXtArdbHAZJltr˂p|ZdQbnXv`drtAvpfl|ZHAZp˂dQZ|HAbےlJtAHfpltb~f`ˁ`ZbAdZ|lJtAr~HfptbdQH~fd|ZےbHAtAJlXQr˂|ZdQnXv|drnvp|ZdQbp˂rbdQZ|ZHAbtlJfHfJltH~fdQbt璀rXQJdrtAJ`JXQrrd|vnrdQZ|vXnQXb㉀ۂdrQtd|ZvnXZ|dZHAbdQbtZp˂tbdQZpZHAbbtl`fHtAJlfH~tlJXQJ`ےdrtAے`JXQtArdpvnbdQZ|`vXnlJtArbHAZpltb˂pZZdQbtXQJ`ےdrtAJvpfHpJAHrJltdQbtv`frtAJl˂pZlJtArrXQJ`|drے`JJtArdfpvtbdQZf`vXtArdtbHAZJltr˂p|ZdQbrXQJ`drtAvpfd|Z˂rXdQZ|HAbےlJtAHAZpltb~f`ˁ`pbAdZ|lJtArHfpvtbdQHAbےd|ZQےbHAtAJlXQr˂|ZdQnrXQJ|drnvplJtAp˂rbdQZ|ZHAbtlJےHAZJltH~fdQbtQJ`ےdrtAJ`JXQrrd|˂rXQdQZ|vXnJAHr󙐂drQtd|ZnrXQZ|d`JXQrblJtZp˂tbdQZpZHAbbtl`ےHAtAJlfH~rd|XQJ`ےdrtAے`JXQtArdp˂rbdQZ|`vXnlJtAdQbHAZpltb˂pZZdQbtJ`ےdrtAJvpfHˁ`ZQXJltdQbtJ`ےrtAJl˂pZArd|rXQJ`|drے`JJtArdZp˂tbdQZf`vXZdQbtbHAZJltr˂p|ZdQbXQJ`ےdrtAvpfbtl˂rXdQZ|HAbےlJtAbHAZpltb~frb㉀ۑpbAdZ|lJtArHAZp˂tbdQHAbےZdQbtےbHAtAJlXQr˂|ZdQrXQJ`|drnvplJtAp˂rbdQZ|ZHAbtlJbHAZJltH~fJtArdQJ`bdrtAJ`JXQrrd|˂rXQdQZ|˂pZJAHr󙐂drQtd|ZrXQJZ|d`pZHAlJtZp˂tbdQZpZHAbbtlےbHAtAJlfH~rd|XQJ`ےdrtAے`JXQtArdp˂rbdQZ|ZHAb|ZdQAZp˂ltb˂pZZdQbtJ`ےdrtAJHAbےˁ`pfJltdQbt`ےbrtAJlbے`Ard|rXQJ`|drے`JJtArdZp˂tbdQZfZHAblJtArbHAZJltr˂p|ZdQbXQJ`ےdrtAے`JXQbtlrXQJ`dQZ|HAbےlJtAbHAZpltb`JXQrH~ㅐfbAdZ|lJtArHAZp˂tbdQJXQrZdQbےbHAtAJlXQr˂|ZdQrXQJ`|dr˂pd|Zp˂rbdQZ|ZHAbtlJbHAZJltr˂pJtArdےbHAdrtAJ`JXQrrd|˂rXQdQZ|˂pZ`vXndrQtd|ZrXQJZ|d˂pZHAJtArdZp˂tbdQZpZHAbbtlےbHAtAJlZHAbdQbtXQJ`ےdrtAے`JXQtArdp˂rbdQZ|ZHAbtlJZp˂ltb˂pZZdQbtJ`ےdrtAJHAbےvˍpfJltdQbt`ےbrtAJlbے`f~rXQJ`|drے`JJtArdZp˂tbdQZے`JXQlJtArbHAZJltr˂p|ZdQbXQJ`ےdrtAے`JXQtArdrXQJ`dQZ|HAbےlJtAbHAZpltb`pZHAH~ㅐfbAdZ|lJtArHAZp˂tbdQJXQHAbHfpvےbHAtAJlXQr˂|ZdQrXQJ`|drr˂pd|Zp˂rbdQZ|ZHAbtlJbHAZJltr˂p|ZdQbےbAZdtAJl`JXQrrd|˂rXQdQZ|bے``vXndrQtd|ZrXQJZ|dے`JnXvZp˂tbdQZpZHAbbtlےbHAtAJlZHAbdQtArdXQJ`ےdtAJے`JXQtArdp˂rbdQZ|ZHAbtlJrXQtbn˂pZZdQbtJ`ےdrtAJJXQrvˍpfJltdQbt`ےbrtAJlXQr˂`f~rXQJ`|dtAے`JJtArdZp˂tbdQZے`pZf~bHAZltbr˂p|ZdQbXQJ`ےdrtAے`JXQtArdJ`ے々vpfHAbےlJtAbHAZpltb˂pZHAH~ㅐfbAdZ|lJtArHAZp˂tbdQpZHAbHfpvےbHAJltXQr˂|ZdQrXQJ`|drHAbےHfvnXp˂rnvpZHAbtlJbHAZJltr˂p|lJtAbHAZpHf``JXQrrd|˂rXQdQZ|bے``vXndrQtd|ZrXQJZ|dے`JnXvZp˂bnvpZHAbbtlےbHAtAJl`JXQrv`fXQJ`ےfHfے`JXQtArdp˂rbdQZ|ZHAbrd|rXQvXn˂pZZdQbtJ`ےdrtAJJXQHAbvˍpfJltdQbt`ےbrtAJlXQr`f~rXQJ`pfHے`JJtArdZp˂tbdQZ˂pZ~HfpbHAZ`vXnr˂p|ZdQbXQJ`ےdrtAے`JXQZdQbtJ`ےvpfHHAbےlJtAbHAZpltbے`JH~ㅐfbAdZ|lJtArHAZp˂tbdQے`JXQHfpvےbHAf`vXXQr˂|ZdQrXQJ`|drHAbےvnXp˂rvpfZHAbtlJbHAZJltr˂plJtAbHAZr~f``JXQrrdf˂rXQdQZ|XQr˂`vXndrQtd|ZrXQJZ|dr˂pnXvZp˂nvppZHAbbtlےbHAtAJl`JXQHAv`fXQJ`ےH~fے`JXQtArdp˂rbdQZ|ZHAbrd|XQJ`ےvXn˂pZ~HfJ`ےdrtAJpZHAbvˍpfJltdQbt`ےbrtAJlZHAb`f~rXQJ`fH~ے`JJtArdZp˂tbdQZbے`~HfpbHAZ`vXnr˂pf~HXQJ`ےdrtAے`JXQZdQtArbHAZvpfHHAbےpvnbHAZpltbے`JH~ㅐfbAdZ|66666666666666666666666666666666666666666666666667777777777 \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv38_0.dat b/vendor/endroid/qr-code/assets/data/qrv38_0.dat new file mode 100644 index 000000000..02972f21e --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv38_0.dat @@ -0,0 +1,337 @@ +~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbaba`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlkkkkkkljijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutststsrqpopopoponmnmnmnmklklklkljijijijihghghghgfefefefedcdcbaba`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmklklklkljijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmklklklkljijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvutsrqrqrqrqpopopoponmnmnmnmklklklkljijijijihghghghgfefedcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwtstststsrqrqrqrqpopopoponmnmnmnmklklklkljijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwtstststsrqrqrqrqpopopoponmnmnmnmkkkkkklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQQQQQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijihghgfefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijihghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmkkkklklkhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQQQQQQRPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{zyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklkjijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUQRQRQRQRPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUQRQRQRQRPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUQRQRQRQRPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUQRQRQRQRPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSQRQRQRQRPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSQQQQQQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmlkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopolklklkkkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopokkklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCBABABABABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopoklklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEBABABABABABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopoklklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSQQQQQRQRPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEBABABABABABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopoklklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSQRQRQRQRPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEDCDCDCBABABABABABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopoklklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSQRQRQRQRPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABABABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopoklklkkkkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSQRQRQRQRPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABABABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopokklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWVUVUTSTSTSTSQRQRQRQRPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGFEFEFEDCDCDCDCBABABABABABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopolklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSQRQRQRQQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABABABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopolklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSQQQQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABABABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopolklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqponmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDCBABABABABA@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmlklkkkkkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmklklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[ZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmklklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQQQPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmklklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQQQRQRQRPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmklklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQRPOPOPOPONMLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmklklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQRPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmklkkkkkkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQRPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQRQRPONMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQRQRQQQQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSQQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!      + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#       + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#     + + + + @?@?@?@?>=>=>=>=<;<;<;<;:98787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#     + + + + @?@?@?@?>=>=>=>=<;<;<;<;877777786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#     + + + + @?@?@?@?>=>=>=>=<;<;<;<;787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + @?@?@?@?>=>=>=>=<;<;<;<;787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + @?@?@?@?>=>=>=>=<;<;<;<;787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + @?@?@?@?>=>=>=>=<;<;<;<;787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + @?@?@?@?>=>=>=>=<;<;<;<;787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + @?@?@?@?>=>=>=>=<;<;<;<;777777876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + @?@?@?@?>=>=>=>=<;<;<;<;878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=:9:9:9:9777778786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=:9:9:9:9787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=:9:9:9:9787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=:9:9:9:9787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=:9:9:9:9787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=:9:9:9:9787878776565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=:9:9:9:9777787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=:9:9:9:9878787876565656543434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=<;<;<;:9:9:9:9878787876565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?<;<;<;<;:9:9:9:9878787776565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?<;<;<;<;:9:9:9:9777878786565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?>=>=>=<;<;<;<;:9:9:9:978787878656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:978787878656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:978787878656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:97878787865656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + >=>=>=>=<;<;<;<;:9:9:9:97878777765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + >=>=>=>=<;<;<;<;:9:9:9:97787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878743434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + >=>=>=>=<;<;<;<;:9:9:9:98787777743434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + >=>=>=>=<;<;<;<;:9:9:9:98787878743434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + >=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    >=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     vvuuttsswwxxyyzz + +--..//00ppoonnmmEEFFGGHHXXWWVVUU]]^^__``@@??>>== !"##$$%oonnmmllFFGGHHIIWWVVUUTT^^__``aa??>>==<>??aa``__^^!!""##$$rrqqkkjj{{||}}~~ 11223344llkkjjiiIIJJKKLLTTSSRRQQaabbccdd<<;;::99%&&''(()kkjjiihhJJKKLLMMSSRRQQPPbbccddee;;::9988zz{{||}}##""!! + + >>??@@AAAA@@??>>{{||}}~~""!!  + + ''(())**vvuuttssMMNNOOPP##(())**++uuttssrr@@AABBCC]]\\[[ZZ%%&&''((iihhggff ~~}}55667788hhggffeeMMNNOOPPPPOONNMMeeffgghh88776655)**++,,-ggffeeddNNOOPPQQOONNMMLLffgghhii77665544~~BBCCDDEE==<;:987++,,--..rrqqppooQQWWXXYY,,--..//qqppoonnDDEEFFGGYYXXWWVV))**++,,eeddccbb + + !!""##$$||{{zzyy99::;;<>??@@``__^^]]UUVVWWXXHHGGFFEEmmnnoopp00//..--12233445__^^]]\\VVWWXXYYGGFFEEDDnnooppqq//..--,,JJKKLLMM3221100/33445566jjiihhgg^^__``aa~~44556677iihhggffLLMMNNOOQQPPOONN11223344]]\\[[ZZ))**++,,ttssrrqqAABBCCDD\\[[ZZYYYYZZ[[\\DDCCBBAAqqrrsstt,,++**))5667789:[[ZZYYXXZZ[[\\]]CCBBAA@@rrssttuu++**))(( NNOOPPQQ/..--,,+ + + !!""~~}}||{{778899::ffeeddccbbccddee !!""##}}||{{zz8899::;;eeddccbbPPQQRRSSMMLLKKJJ55667788YYXXWWQQ--..//00ppoonnmmEEFFGGHHXXWWVVUU]]^^__``@@??>>==uuvvwwxx((''&&%%;<==>>??WWVVUUTT^^__``aa??>>==<>bbaa``__ffgghhii + + $$%%&&''yyxxwwvv<<==>>??aa``__^^TTUUVVWWIIHHGGFF99::;;<>??@@LLKKJJII ~~}}55667788hhggffeeMMNNOOPPPPOONNMMeeffgghh88776655}}~~ DDEEFFGGOONNMMLLffgghhii77665544~~~~__``aabb#"! ++,,--..rrqqppooCCDDEEFFZZYYXXWWssttuuvv,,--..//qqppoonnDDEEFFGGYYXXWWVV\\]]^^__AA@@??>>AABBCCDDHHGGFFEE!!""##$$||{{zzyy99::;;<>??@@``__^^]]UUVVWWXXHHGGFFEEmmnnoopp00//..--LLMMNNOOGGFFEEDDnnooppqq//..--,,yyxxwwvvgghhiijj33445566jjiihhggKKLLMMNNRRQQPPOO{{||}}~~ ~~44556677iihhggffLLMMNNOOQQPPOONNddeeffgg99887766||{{zzyyIIJJKKLL@@??>>==))**++,,ttssrrqqAABBCCDD\\[[ZZYYYYZZ[[\\DDCCBBAAqqrrsstt,,++**))PPQQRSTUCCBBAA@@rrssttuu++**))((  !!uuttssrrkkqqrrss + + !!""~~}}||{{778899::ffeeddccOOPPQQRRNNMMLLKK}}||{{zz8899::;;eeddccbbPPQQRRSSMMLLKKJJhhiijjkk55443322xxwwvvuuMMNNOOPP77665544--..//00ppoonnmmEEFFGGHHXXWWVVUU]]^^__``@@??>>==uuvvwwxx((''&&%% ~~}}VWWXXYYZ??>>==<>bbaa``__SSTTUUVVJJIIHHGGyyxxwwvv<<==>>??aa``__^^TTUUVVWWIIHHGGFFllmmnnoo1100//..ttssrrqqQQRRSSTT3322110011223344llkkjjiiIIJJKKLLTTSSRRQQaabbccdd<<;;::99yyzz{{||$$##""!! + + ||{{zzyyZ[[\\]]^;;::9988zz{{||}}##""!! + + &&''(())hhggffeexxyyzz{{ + + ''(())**vvuuttss??@@AABB^^]]\\[[WWXXYYZZFFEEDDCCuuttssrr@@AABBCC]]\\[[ZZXXYYZZ[[EEDDCCBBppqqrrss--,,++**TTUUVVWWppoonnmmUUVVWWXX//..--,,55667788hhggffeeMMNNOOPPPPOONNMMeeffgghh88776655}}~~ xxwwvvuu^__``aab77665544~~**++,,--ddccbbaa||}}~~++,,--..rrqqppooCCDDEEFFZZYYXXWW[[\\]]^^BBAA@@?? !"#qqppoonnDDEEFFGGYYXXWWVV\\]]^^__AA@@??>>ttuuvvww))((''&&XXYYZZ[[llkkjjiiYYZZ[[\\++**))((99::;;<>==<<;;#$$%%&&'mmllkkjjHHIIJJKKUUTTSSRR``aabbcc==<<;;::xxyyzz{{%%$$##""\\]]^^__hhggffee]]^^__``''&&%%$$==>>??@@``__^^]]UUVVWWXXHHGGFFEEmmnnoopp00//..--kkjjiihhfgghhiij//..--,,22334455\\[[ZZYY33445566jjiihhggKKLLMMNNRRQQPPOOccddeeff::998877'(())**+iihhggffLLMMNNOOQQPPOONNddeeffgg99887766||}}~~!! ``aabbccddccbbaaaabbccdd##AABBCCDD\\[[ZZYYYYZZ[[\\DDCCBBAAqqrrsstt,,++**)) + + ggffeeddjkklmnop++**))((  !!~~}}||66778899XXWWQQPP + + !!""~~}}||{{778899::ffeeddccOOPPQQRRNNMMLLKKgghhiijj66554433+,,--../eeddccbbPPQQRRSSMMLLKKJJhhiijjkk55443322ddeeffgg``__^^]]eeffgghhEEFFGGHHXXWWVVUU]]^^__``@@??>>==uuvvwwxx((''&&%% ccbbaa``qqrrsstt''&&%%$$ + + ""##$$%%{{zzyyxx::;;<<==OONNMMLL ##$$%%&&zzyyxxww;;<<==>>bbaa``__SSTTUUVVJJIIHHGGkkllmmnn221100///0011223aa``__^^TTUUVVWWIIHHGGFFllmmnnoo1100//..hhiijjkk\\[[ZZYYiijjkkll~~}}||IIJJKKLLTTSSRRQQaabbccdd<<;;::99yyzz{{||$$##""!! + + __^^]]\\uuvvwwxx##""!! + + &&''(())wwvvuutt>>??@@AAKKJJIIHH''(())**vvuuttss??@@AABB^^]]\\[[WWXXYYZZFFEEDDCCooppqqrr..--,,++34455667]]\\[[ZZXXYYZZ[[EEDDCCBBppqqrrss--,,++**llmmnnooXXWWVVUUmmnnoopp{{zzyyxxMMNNOOPPPPOONNMMeeffgghh88776655}}~~ [[ZZYYXXyyzz{{||**++,,--ssrrqqppBBCCDDEEGGFFEEDD++,,--..rrqqppooCCDDEEFFZZYYXXWW[[\\]]^^BBAA@@??ssttuuvv**))((''789:;<==YYXXWWVV\\]]^^__AA@@??>>ttuuvvww))((''&&ppqqrrssTTSSRRQQqqrrsstt wwvvuuttQQRRSSTTLLKKJJIIiijjkkll44332211WWQQPPOO}}~~..//0011oonnmmllFFGGHHIICCBBAA@@//001122nnmmllkkGGHHIIJJVVUUTTSS__``aabb>>==<<;;wwxxyyzz&&%%$$##>>??@@AAUUTTSSRR``aabbcc==<<;;::xxyyzz{{%%$$##"" + +ttuuvvwwPPOONNMMuuvvwwxx + + + +ssrrqqpoUUVVWWXXHHGGFFEEmmnnoopp00//..--##$$%%NNMMLLKK22334455kkjjiihhJJKKLLMM??>>==7733445566jjiihhggKKLLMMNNRRQQPPOOccddeeff::998877{{||}}~~""!! BBCCDDEEQQPPOONNddeeffgg99887766||}}~~!!  xxyyzz{{LLKKJJIIyyzz{{|| nmlkkjjiYYZZ[[\\DDCCBBAAqqrrsstt,,++**))&&''(())JJIIHHGG  !!~~}}||66778899ggffeeddNNOOPPQQ66554433 !!""~~}}||{{778899::ffeeddccOOPPQQRRNNMMLLKKgghhiijj66554433FFGGHHIIMMLLKKJJhhiijjkk55443322||}}~~HHGGFFEE}}~~ihhggffe]]^^__``@@??>>==uuvvwwxx((''&&%% + + **++,,--FFEEDDCC + + ""##$$%%{{zzyyxx::;;<<==ccbbaa``RRSSTTUU221100//##$$%%&&zzyyxxww;;<<==>>bbaa``__SSTTUUVVJJIIHHGGkkllmmnn221100//JJKKLLMMIIHHGGFFllmmnnoo1100//..DDCCBBAAeddccbbaaabbccdd<<;;::99yyzz{{||$$##""!! + + ..//0011BBAA@@?? + + &&''(())wwvvuutt>>??@@AA__^^]]\\VVWWXXYY..--,,++''(())**vvuuttss??@@AABB^^]]\\[[WWXXYYZZFFEEDDCCooppqqrr..--,,++NNOOPPQQEEDDCCBBppqqrrss--,,++**@@??>>==a``__^^]eeffgghh88776655}}~~ 22334455>>==7766**++,,--ssrrqqppBBCCDDEE[[ZZYYXXZZ[[\\]]**))((''++,,--..rrqqppooCCDDEEFFZZYYXXWW[[\\]]^^BBAA@@??ssttuuvv**))((''RSTUVWWXAA@@??>>ttuuvvww))((''&& + + <<;;::99##]\\[[ZZYiijjkkll443322116677==>>55443322..//0011oonnmmllFFGGHHIIWWVVUUTT^^__``aa&&%%$$##//001122nnmmllkkGGHHIIJJVVUUTTSS__``aabb>>==<<;;wwxxyyzz&&%%$$## ~~}}||{{XYYZZ[[\==<<;;::xxyyzz{{%%$$##"" + + 88776655$$%%&&''YXXWWVUTmmnnoopp00//..--??@@AABB1100//..22334455kkjjiihhJJKKLLMMSSRRQQPPbbccddee33445566jjiihhggKKLLMMNNRRQQPPOOccddeeff::998877{{||}}~~""!!  + + zzyyxxww\]]^^__`99887766||}}~~!!  44332211(())**++SRQQPPOOqqrrsstt,,++**)) ~~}}CCDDEEFF--,,++**  !!~~}}||66778899ggffeeddNNOOPPQQOONNMMLLffgghhii778899::ffeeddccOOPPQQRRNNMMLLKKgghhiijj66554433vvuuttss`aabbccd5544332200//..--,,--..//NNMMLLKKuuvvwwxx((''&&%% + + !!""##$$||{{zzyyGGHHIIJJ))((''&& + + ""##$$%%{{zzyyxx::;;<<==ccbbaa``RRSSTTUUKKJJIIHHjjkkllmm;;<<==>>bbaa``__SSTTUUVVJJIIHHGGkkllmmnn221100//rrqqkkjjdeeffggh1100//..,,++**))00112233JJIIHHGGyyzz{{||$$##""!! + + %%&&''((xxwwvvuuKKLLMMNN%%$$##&&''(())wwvvuutt>>??@@AA__^^]]\\VVWWXXYYGGFFEEDDnnooppqq??@@AABB^^]]\\[[WWXXYYZZFFEEDDCCooppqqrr..--,,++ + +iihhggffhiijjkkl--,,++**((''&&%%44556677FFEEDDCC}}~~ ))**++,,ttssrrqqOOPPQQWW**++,,--ssrrqqppBBCCDDEE[[ZZYYXXZZ[[\\]]CCBBAA@@rrssttuu + +~~}}||{{CCDDEEFFZZYYXXWW[[\\]]^^BBAA@@??ssttuuvv**))(('' eeddccbbmnopqqrr))((''&& + + !!""##$$##""!!==>>??@@BBAA@@??--..//00ppoonnmmXXYYZZ[[..//0011oonnmmllFFGGHHIIWWVVUUTT^^__``aa??>>==<>==<<;;wwxxyyzz&&%%$$## aa``__^^ssttuuvv%%$$##"" + + $$%%&&'' AABBCCDD>>==<;:911223344llkkjjii\\]]^^__22334455kkjjiihhJJKKLLMMSSRRQQPPbbccddee;;::9988zz{{||}}vvuuttssKKLLMMNNRRQQPPOOccddeeff::998877{{||}}~~""!!  + + ]]\\[[ZZwwxxyyzz!!  (())**++EEFFGGHH87766554 ~~}}55667788hhggffee``aabbcc  !!~~}}||66778899ggffeeddNNOOPPQQOONNMMLLffgghhii77665544~~ + + rrqqponmOOPPQQRRNNMMLLKKgghhiijj66554433YYXXWWQQ{{||}}~~,,--..//IIJJKKLL43322110 + + !!""##$$||{{zzyy99::;;<>??@@``__^^]]hhiijjkk&&''(())wwvvuutt>>??@@AA__^^]]\\VVWWXXYYGGFFEEDDnnooppqq//..--,,hggffeedWWXXYYZZFFEEDDCCooppqqrr..--,,++$$%%&&''LLKKJJII~~44556677 QQWWXXYY,++**))())**++,,ttssrrqqAABBCCDD\\[[ZZYYqqrrsstt**++,,--ssrrqqppBBCCDDEE[[ZZYYXXZZ[[\\]]CCBBAA@@rrssttuu++**))((dccbbaa`[[\\]]^^BBAA@@??ssttuuvv**))(('' + +(())**++HHGGFFEE + + !!""##}}||{{zz8899::;; + + ZZ[[\\]](''&&%%$--..//00ppoonnmmEEFFGGHHXXWWVVUUuuvvwwxx + +..//0011oonnmmllFFGGHHIIWWVVUUTT^^__``aa??>>==<>==<<;;wwxxyyzz&&%%$$## ,,--..//DDCCBBAA + + $$%%&&''yyxxwwvv<<==>>?? + + ^^__``aa$##"! 11223344llkkjjiiIIJJKKLLTTSSRRQQyyzz{{|| 22334455kkjjiihhJJKKLLMMSSRRQQPPbbccddee;;::9988zz{{||}}##""!! ##$$\[[ZZYYXccddeeff::998877{{||}}~~""!!  + + 00112233@@??>>== (())**++uuttssrr@@AABBCC bbccddee ~~}}55667788hhggffeeMMNNOOPPPPOONNMM}}~~~~}}||66778899ggffeeddNNOOPPQQOONNMMLLffgghhii77665544~~%%&&''((XWWVUTSRgghhiijj665544334455667777665544,,--..//qqppoonnDDEEFFGGffgghhii + + !!""##$$||{{zzyy99::;;<>??@@3322110000112233mmllkkjjHHIIJJKK~~}}||{{jjkkqqrr %%&&''((xxwwvvuu==>>??@@``__^^]]UUVVWWXXHHGGFFEEwwvvuutt>>??@@AA__^^]]\\VVWWXXYYGGFFEEDDnnooppqq//..--,,--..//00MMLLKKJJooppqqrr..--,,++AABBCCDD//..--,,~~44556677iihhggffLLMMNNOOzzyyxxwwssttuuvv))**++,,ttssrrqqAABBCCDD\\[[ZZYYYYZZ[[\\DDCCBBAAssrrqqppBBCCDDEE[[ZZYYXXZZ[[\\]]CCBBAA@@rrssttuu++**))((11223344IIHHGGFFssttuuvv**))(('' + + !!""~~}}||{{EEFFGGHH++**))(( + + !!""##}}||{{zz8899::;;eeddccbbPPQQRRSS~~}}||{{zz8899::;;QQPPOONN + + !!""##$$||{{zzyy99::;;<>??MMLLKKJJ %%&&''((xxwwvvuu==>>??@@``__^^]]UUVVWWXXHHGGFFEEmmnnoopp00//..--12233445__^^]]\\VVWWXXYYGGFFEEDDnnooppqq//..--,,ZZ[[\\]]##""!! uuttssrr@@AABBCCIIHHGGFF))**++,,ttssrrqqAABBCCDD\\[[ZZYYYYZZ[[\\DDCCBBAAqqrrsstt,,++**))5667789:[[ZZYYXXZZ[[\\]]CCBBAA@@rrssttuu++**))(( ^^__``aaqqppoonnDDEEFFGGEEDDCCBB--..//00ppoonnmmEEFFGGHHXXWWVVUU]]^^__``@@??>>==uuvvwwxx((''&&%%;<==>>??WWVVUUTT^^__``aa??>>==<>11223344llkkjjiiIIJJKKLLTTSSRRQQaabbccdd<<;;::99yyzz{{||$$##""!!@@AABBCCSSRRQQPPbbccddee;;::9988zz{{||}}##""!! + + ffgghhiiiihhggffLLMMNNOO==776655 ~~}}55667788hhggffeeMMNNOOPPPPOONNMMeeffgghh88776655}}~~ DDEEFFGGOONNMMLLffgghhii77665544~~~~}}||{{jjkkqqrreeddccbbPPQQRRSS44332211!!""##$$||{{zzyy99::;;<>??@@``__^^]]UUVVWWXXHHGGFFEEmmnnoopp00//..--LLMMNNOOGGFFEEDDnnooppqq//..--,,vvuuttsswwxxyyzz + + ]]\\[[ZZXXYYZZ[[,,++**))))**++,,ttssrrqqAABBCCDD\\[[ZZYYYYZZ[[\\DDCCBBAAqqrrsstt,,++**))PPQQRSTUCCBBAA@@rrssttuu++**))((  !!rrqqkkjj{{||}}~~ + + YYXXWWVV\\]]^^__((''&&%%--..//00ppoonnmmEEFFGGHHXXWWVVUU]]^^__``@@??>>==uuvvwwxx((''&&%% ~~}}VWWXXYYZ??>>==<>??@@``__^^]]UUVVWWXXHHGGFFEEmmnnoopp00//..--kkjjiihhfgghhiij//..--,,22334455YYXXWWQQ !!EEDDCCBBppqqrrss ~~}}AABBCCDD\\[[ZZYYYYZZ[[\\DDCCBBAAqqrrsstt,,++**)) + + ggffeeddjkklmnop++**))((  !!~~}}||66778899PPOONNMM""##$$%%AA@@??>>ttuuvvww + + ||{{zzyyEEFFGGHHXXWWVVUU]]^^__``@@??>>==uuvvwwxx((''&&%% ccbbaa``qqrrsstt''&&%%$$ + + ""##$$%%{{zzyyxx::;;<<==LLKKJJII&&''(())==<<;;::xxyyzz{{xxwwvvuuIIJJKKLLTTSSRRQQaabbccdd<<;;::99yyzz{{||$$##""!! + + __^^]]\\uuvvwwxx##""!! + + &&''(())wwvvuutt>>??@@AAHHGGFFEE**++,,--99887766||}}~~ ttssrrqqMMNNOOPPPPOONNMMeeffgghh88776655}}~~ [[ZZYYXXyyzz{{||**++,,--ssrrqqppBBCCDDEEDDCCBBAA..//001155443322 + + ponmlkkjQQRRSSTTLLKKJJIIiijjkkll44332211WWQQPPOO}}~~..//0011oonnmmllFFGGHHII@@??>>==223344551100//..jiihhggfUUVVWWXXHHGGFFEEmmnnoopp00//..--##$$%%NNMMLLKK22334455kkjjiihhJJKKLLMM7766554466778899--,,++**feeddccbYYZZ[[\\DDCCBBAAqqrrsstt,,++**))&&''(())JJIIHHGG  !!~~}}||66778899ggffeeddNNOOPPQQ33221100::;;<<==))((''&&baa``__^]]^^__``@@??>>==uuvvwwxx((''&&%% + + **++,,--FFEEDDCC + + ""##$$%%{{zzyyxx::;;<<==ccbbaa``RRSSTTUU//..--,,>>??@@AA%%$$##""^]]\\[[Zaabbccdd<<;;::99yyzz{{||$$##""!! + + ..//0011BBAA@@?? + + &&''(())wwvvuutt>>??@@AA__^^]]\\VVWWXXYY++**))((BBCCDDEE!! ##$$%%&&ZYYXXWWVeeffgghh88776655}}~~ 22334455>>==7766**++,,--ssrrqqppBBCCDDEE[[ZZYYXXZZ[[\\]]''&&%%$$~~}}||FFGGHHII''(())**UTSRQQPPiijjkkll443322116677==>>55443322..//0011oonnmmllFFGGHHIIWWVVUUTT^^__``aa##{{zzyyxxJJKKLLMM++,,--..OONNMMLLmmnnoopp00//..--??@@AABB1100//..22334455kkjjiihhJJKKLLMMSSRRQQPPbbccddeewwvvuuttNNOOPPQQ//001122KKJJIIHHqqrrsstt,,++**)) ~~}}CCDDEEFF--,,++**  !!~~}}||66778899ggffeeddNNOOPPQQOONNMMLLffgghhiissrrqqppRRSSTTUU33445566GGFFEEDDuuvvwwxx((''&&%% + + !!""##$$||{{zzyyGGHHIIJJ))((''&& + + ""##$$%%{{zzyyxx::;;<<==ccbbaa``RRSSTTUUKKJJIIHHjjkkllmmoonnmmllVVWWXXYY + +77==>>??CCBBAA@@yyzz{{||$$##""!! + + %%&&''((xxwwvvuuKKLLMMNN%%$$##&&''(())wwvvuutt>>??@@AA__^^]]\\VVWWXXYYGGFFEEDDnnooppqq kkjjiihhZZ[[\\]] @@AABBCC??>>==<;}}~~ ))**++,,ttssrrqqOOPPQQWW**++,,--ssrrqqppBBCCDDEE[[ZZYYXXZZ[[\\]]CCBBAA@@rrssttuu + + + +ggffeedd^^__``aaDDEEFFGG:9877665--..//00ppoonnmmXXYYZZ[[..//0011oonnmmllFFGGHHIIWWVVUUTT^^__``aa??>>==<>??@@``__^^]]hhiijjkk&&''(())wwvvuutt>>??@@AA__^^]]\\VVWWXXYYGGFFEEDDnnooppqq//..--,,##SSRRQQPPrrssttuu]]^^__``%$$##"! ))**++,,ttssrrqqAABBCCDD\\[[ZZYYqqrrsstt**++,,--ssrrqqppBBCCDDEE[[ZZYYXXZZ[[\\]]CCBBAA@@rrssttuu++**))(($$%%&&''OONNMMLLvvwwxxyy~~}}||aabbccdd--..//00ppoonnmmEEFFGGHHXXWWVVUUuuvvwwxx + +..//0011oonnmmllFFGGHHIIWWVVUUTT^^__``aa??>>==<>==<<$$%%&&''jjiihhggvvwwxxyy %%&&''((xxwwvvuu==>>??@@``__^^]]UUVVWWXXHHGGFFEEwwvvuutt>>??@@AA__^^]]\\VVWWXXYYGGFFEEDDnnooppqq//..--,,==>>??@@;;::9988(())**++ffeeddcczz{{||}} + + ))**++,,ttssrrqqAABBCCDD\\[[ZZYYYYZZ[[\\DDCCBBAAssrrqqppBBCCDDEE[[ZZYYXXZZ[[\\]]CCBBAA@@rrssttuu++**))((AABBCCDD77665544,,--..//bbaa``__~~--..//00ppoonnmmEEFFGGHHXXWWVVUU]]^^__``@@??>>== !"##$$%oonnmmllFFGGHHIIWWVVUUTT^^__``aa??>>==<=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:978787878878787776565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmklkkkkkkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSRQRQQRQRQRQRPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABA@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:978787878777878786565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmlklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQQQQQQRQRQRQRPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:978787878787878786565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqpopopopoponmnmnmnmnmnmnmnmlklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQQRQRQRQQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCBABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:978787878787878786565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqpopopopopopopoponmnmnmnmnmnmnmlklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[ZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQQQQQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:978787878787878786565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutststststststsrqrqrqrqrqpopopopopopopoponmnmnmnmlklklkkklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:977777787787878786565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmkkklklkllklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:987878787787877776565656565656565434343434343434321212121212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvutststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmklklklkllkkkkkkljijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:987878787778787876565656565656565434343434343434321212121212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmklklklklklklklkljijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQQQQQQRRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;:9:9:9:9:9878787878787878765656565656565654343434343434343212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmklklklklklklklkljijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSQRQRQRQRRQRQRQQQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565656565654343434343434343212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmklklklklklklklkljijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababa`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSQRQRQRQRQQQRQRQRPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565656565654343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmklklkkkkklklklkljijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSQRQRQRQRQRQRQRQRPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:9777778788787878765656565656565654343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmkklklklkklklklkljijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcbabababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSQRQRQRQRQRQRQRQRPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:9787878788787777765656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{zyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmlklklklkkkkkkklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSQRQRQRQRQRQRQRQRPOPOPOPOPOPOPOPONMNMNMNMNMLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:9787878788787878765656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefedcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSQQQQQQRQQRQRQRQRPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:9787878786565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopoponmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQQRQRQQQQPOPOPOPOPONMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:9787878786565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghgfefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQQQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:9787878776565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmlklkkkkklklklklkjijijijijijijijihghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:9777787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmklklklkllklklklkjijijijijijihghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:9878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmklklklklkkkklklkjijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmklklklkllklkjijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSQQQQQRQRPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9878787878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmklklklkljijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSQRQRQRQRPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:987777778878787876565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!         + + + + + + + + "!"!"!"!"!"!"!"!            + + + + + + + + "!"!"!"!"!"!"!"!            + + + + + + + + "!"!"!"!"!"!"!"!            + + + + + + + + "!"!"!"!"!"!"!"!            + + + + + + + + "!"!"!"!"!"!"!"!            + + + + + + + + "!"!"!"!"!"!"!"!            + + + + + + + + "!"!"!"!"!"!"!"!            + + + + + + + + "!"!"!"!"!"!"!"!            + + + + + + + + "!"!"!"!"!"!              + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!                + + + + + + + "!"!"!"!                + + + + "!"!"!"!                + + + + + "!"!"!"!                + + + + + + + + "!"!"!"!               + + + + + + + + "!"!"!"!        + + + + + + + + PPOONNMMqqrrsstt~~}}||{{ffgghhii~~}}||EEFFGGHH\\[[ZZYYUUVVWWXXLLKKJJII eeffgghh<<;;::99 uuvvwwxx,,++**))--..//00ttssrrqqKKLLMMNN))((''&&@@AABBCCWWVVUUTTZZ[[\\]]GGFFEEDDjjkkllmm77665544""##$$%%zz{{||}}~~}}||''&&%%$$22334455oonnmmllBBCCDDEEKKJJIIHH%%&&''((\[[ZZYYX + +__``aabbBBAA@@??ooppqqrr221100//''(())**zzyyxxww""!! 778899::jjiihhggGGHHIIJJZZYYXXWWjjkkqqrrvvuuttss + + \]]^^__`==<<;;::ttuuvvww--,,++**,,--..//uuttssrr<<==>>??eeddccbb + +LLMMNNOOUUTTSSRR\\]]^^__,,++**))DDEEFFGG??>>==<;!!""##$$yyzz{{||~~}}((''&&%%11223344ppoonnmmAABBCCDD``__^^]]QQRRSSTTPPOONNMM + + aabbccddLLKKJJII uuvvwwxxzzyyxxww jjkkqqrr{{zzyyxxIIJJKKLLXXWWVVUUYYZZ[[\\HHGGFFEEiijjkkll88776655!!""##$$yyzz{{||~~}}((''&&%%11223344ppoonnmmOOPPQQWW%%$$##DDEEFFGGSSRRQQPP ^^__``aaCCBBAA@@nnooppqq33221100&&''(())~~{{zzyyxx##""!! 66778899kkjjiihhFFGGHHIIGGFFEEDD))**++,,XWWVUTSR ccddeeff>>==<<;;ssttuuvv..--,,++++,,--..vvuuttss;;<<==>>ffeeddcc KKLLMMNNVVUUTTSS + +ssttuuvvrrqqkkjj`aabbccd99887766 !!""##xxyyzz{{~~))((''&&00112233qqppoonn@@AABBCCaa``__^^ PPQQRRSSQQPPOONN + + ``aabbcc((''&&%%HHIIJJKK:9877665%%&&''((}}~~||{{zzyy$$##""!!55667788llkkjjiiEEFFGGHH\\[[ZZYYUUVVWWXXLLKKJJII eeffgghhHHGGFFEE!!""##$$yyzz{{||vvuuttss + + + +ssttuuvvwwvvuuttMMNNOOPPTTSSRRQQ]]^^__``DDCCBBAAmmnnoopp44332211%%&&''((}}~~||{{zzyy$$##""!!55667788llkkjjiiXXYYZZ[[HHIIJJKKOONNMMLL + + bbccddee??>>==<<rrssttuu//..--,,**++,,--wwvvuutt::;;<<==ggffeedd JJKKLLMMCCBBAA@@--..//00QQPPOONNgghhiijj::998877 !!""wwxxyyzz**))((''//001122rrqqppoo??@@AABBbbaa``__ + + OOPPQQRRRRQQPPOO wwxxyyzziihhggffdeeffggh55443322$$%%&&''||}}~~}}||{{zz%%$$##""44556677mmllkkjjDDEEFFGG]]\\[[ZZTTUUVVWWMMLLKKJJ ddeeffgg$$##LLMMNNOO54433221))**++,,xxwwvvuu 99::;;<>==qqrrsstt00//..--))**++,,xxwwvvuu 99::;;<>??@@AAccbbaa`` + + NNOOPPQQ??>>==7711223344MMLLKKJJkkllmmnn66554433##$$%%&&{{||}}~~~~}}||{{&&%%$$##33445566nnmmllkkCCDDEEFF^^]]\\[[SSTTUUVVNNMMLLKK{{||}}~~eeddccbb + + hiijjkkl1100//..(())**++yyxxwwvv!! 8899::;;iihhggffHHIIJJKKYYXXWWVVXXYYZZ[[IIHHGGFFhhiijjkkPPQQWWXX100//..---..//00ttssrrqq==>>??@@ddccbbaa + + MMNNOOPPTTSSRRQQ]]^^__``DDCCBBAAmmnnoopp@@??>>==))**++,,iihhggff{{||}}~~nmlkkjji + +UUVVWWXXLLKKJJII eeffgghh<<;;::99 uuvvwwxx,,++**))--..//00ttssrrqq==>>??@@ddccbbaa + + ``aabbcc~~}}PPQQRSTUGGFFEEDDjjkkllmm77665544""##$$%%zz{{||}}~~}}||''&&%%$$22334455oonnmmllBBCCDDEE__^^]]\\RRSSTTUU66554433556677==IIHHGGFFooppqqrr221100//''(())**zzyyxxww""!! 778899::jjiihhggGGHHIIJJZZYYXXWWWWXXYYZZJJIIHHGGaa``__^^ mnopqqrr--,,++**,,--..//uuttssrr<<==>>??eeddccbb + +LLMMNNOOUUTTSSRR\\]]^^__EEDDCCBBllmmnnooYYZZ[[\\-,,++**)11223344ppoonnmmAABBCCDD``__^^]]QQRRSSTTPPOONNMM + + aabbccdd@@??>>==qqrrsstt@@??>>==<<;;::99--..//00eeddccbbihhggffe YYZZ[[\\HHGGFFEEiijjkkll88776655!!""##$$yyzz{{||~~}}((''&&%%11223344ppoonnmmAABBCCDD``__^^]]ddeeffgg||{{zzyy VWWXXYYZCCBBAA@@nnooppqq33221100&&''(())~~{{zzyyxx##""!! 66778899kkjjiihhFFGGHHII[[ZZYYXXVVWWXXYY221100//>>??@@AAEEDDCCBBssttuuvv..--,,++++,,--..vvuuttss;;<<==>>ffeeddcc KKLLMMNNVVUUTTSS[[\\]]^^FFEEDDCC]]\\[[ZZssttuuvv~~))((''&&00112233qqppoonn@@AABBCCaa``__^^ PPQQRRSSQQPPOONN + + ``aabbccAA@@??>>ppqqrrss~~}}||]]^^__``)((''&&%55667788llkkjjiiEEFFGGHH\\[[ZZYYUUVVWWXXLLKKJJII eeffgghh<<;;::99 uuvvwwxx<<;;::998877665511223344aa``__^^eddccbba]]^^__``DDCCBBAAmmnnoopp44332211%%&&''((}}~~||{{zzyy$$##""!!55667788llkkjjiiEEFFGGHH\\[[ZZYYhhiijjkkxxwwvvuu + + Z[[\\]]^??>>==<<rrssttuu//..--,,**++,,--wwvvuutt::;;<<==ggffeedd JJKKLLMMWWVVUUTTZZ[[\\]]..--,,++BBCCDDEEAA@@??>> !!""wwxxyyzz**))((''//001122rrqqppoo??@@AABBbbaa``__ + + OOPPQQRRRRQQPPOO + +__``aabbBBAA@@??##YYXXWWQQwwxxyyzz}}||{{zz%%$$##""44556677mmllkkjjDDEEFFGG]]\\[[ZZTTUUVVWWMMLLKKJJ ddeeffgg==<<;;::ttuuvvww{{zzyyxx aabbccdd%$$##"! 99::;;<>==qqrrsstt00//..--))**++,,xxwwvvuu 99::;;<>??@@AAccbbaa`` + + NNOOPPQQSSRRQQPP ^^__``aa**))((''FFGGHHII==<;:987##$$%%&&{{||}}~~~~}}||{{&&%%$$##33445566nnmmllkkCCDDEEFF^^]]\\[[SSTTUUVVNNMMLLKK ccddeeff>>==<<;;$$%%&&''PPOONNMM{{||}}~~yyxxwwvv!! 8899::;;iihhggffHHIIJJKKYYXXWWVVXXYYZZ[[IIHHGGFFhhiijjkk99887766 !!""##xxyyzz{{wwvvuutt + + eeffgghh~~}}==>>??@@ddccbbaa + + MMNNOOPPTTSSRRQQ]]^^__``DDCCBBAAmmnnoopp44332211%%&&''((}}~~||{{zzyy4433221100//..--99::;;<>??@@ddccbbaa + + MMNNOOPPTTSSRRQQ + + uuvvwwxxkkjjiihhbccddeef77665544""##$$%%zz{{||}}~~}}||''&&%%$$22334455oonnmmllBBCCDDEE__^^]]\\RRSSTTUUOONNMMLL + + bbccddee&&%%$$##JJKKLLMM76655443''(())**zzyyxxww""!! 778899::jjiihhggGGHHIIJJZZYYXXWWWWXXYYZZJJIIHHGGgghhiijj::998877(())**++LLKKJJII !"#uuttssrr<<==>>??eeddccbb + +LLMMNNOOUUTTSSRR\\]]^^__EEDDCCBBllmmnnoo55443322$$%%&&''||}}~~ssrrqqkkiijjkkqq||{{zzyyAABBCCDD``__^^]]QQRRSSTTPPOONNMM + + aabbccdd@@??>>==qqrrsstt00//..--))**++,,xxwwvvuu00//..--,,++**))==>>??@@PPOONNMM(())**++YXXWWVUTiijjkkll88776655!!""##$$yyzz{{||~~}}((''&&%%11223344ppoonnmmAABBCCDD``__^^]]QQRRSSTTPPOONNMM yyzz{{||ggffeedd + +fgghhiij33221100&&''(())~~{{zzyyxx##""!! 66778899kkjjiihhFFGGHHII[[ZZYYXXVVWWXXYYKKJJIIHHffgghhiiNNOOPPQQ3221100/++,,--..vvuuttss;;<<==>>ffeeddcc KKLLMMNNVVUUTTSS[[\\]]^^FFEEDDCCkkllmmnn66554433,,--..//HHGGFFEE#$$%%&&'qqppoonn@@AABBCCaa``__^^ PPQQRRSSQQPPOONN + + ``aabbccAA@@??>>ppqqrrss1100//..(())**++jjiihhgg rrssttuuxxwwvvuuEEFFGGHH\\[[ZZYYUUVVWWXXLLKKJJII eeffgghh<<;;::99 uuvvwwxx,,++**))--..//00ttssrrqq,,++**))~~}}((''&&%%AABBCCDDLLKKJJII,,--..//SRQQPPOOmmnnoopp44332211%%&&''((}}~~||{{zzyy$$##""!!55667788llkkjjiiEEFFGGHH\\[[ZZYYUUVVWWXXLLKKJJII}}~~ccbbaa`` jkklmnop//..--,,**++,,--wwvvuutt::;;<<==ggffeedd JJKKLLMMWWVVUUTTZZ[[\\]]GGFFEEDDjjkkllmmWWXXYYZZ/..--,,+//001122rrqqppoo??@@AABBbbaa``__ + + OOPPQQRRRRQQPPOO + +__``aabbBBAA@@??ooppqqrr221100//00112233DDCCBBAA'(())**+mmllkkjjDDEEFFGG]]\\[[ZZTTUUVVWWMMLLKKJJ ddeeffgg==<<;;::ttuuvvww--,,++**,,--..//ffeeddcc + + vvwwxxyyttssrrqqIIJJKKLLXXWWVVUUYYZZ[[\\HHGGFFEEiijjkkll88776655!!""##$$yyzz{{||~~}}((''&&%%11223344ppoonnmm((''&&%%||{{zzyy$$##""!!EEFFGGHHHHGGFFEE00112233NNMMLLKKqqrrsstt00//..--))**++,,xxwwvvuu 99::;;<>??@@AAccbbaa`` + + NNOOPPQQSSRRQQPP ^^__``aaCCBBAA@@nnooppqq~~[[\\]]^^+**))(('33445566nnmmllkkCCDDEEFF^^]]\\[[SSTTUUVVNNMMLLKK ccddeeff>>==<<;;ssttuuvv..--,,++44556677@@??>>==+,,--../iihhggffHHIIJJKKYYXXWWVVXXYYZZ[[IIHHGGFFhhiijjkk99887766 !!""##xxyyzz{{~~))((''&&00112233bbaa``__zz{{||}}ponmlkkj MMNNOOPPTTSSRRQQ]]^^__``DDCCBBAAmmnnoopp44332211%%&&''((}}~~||{{zzyy$$##""!!55667788llkkjjii$$##""!!xxwwvvuu IIJJKKLLDDCCBBAA44556677JJIIHHGG uuvvwwxx,,++**))--..//00ttssrrqq==>>??@@ddccbbaa + + MMNNOOPPTTSSRRQQ]]^^__``DDCCBBAA[[ZZYYXXuuvvwwxx~~}}||''&&%%$$22334455oonnmmllBBCCDDEE__^^]]\\RRSSTTUUOONNMMLL + + bbccddee??>>==<<rrssttuu}}||{{zz__``aabb'&&%%$$#778899::jjiihhggGGHHIIJJZZYYXXWWWWXXYYZZJJIIHHGGgghhiijj::998877 !!""wwxxyyzz**))((''==>>??@@77665544/0011223eeddccbb + +LLMMNNOOUUTTSSRR\\]]^^__EEDDCCBBllmmnnoo55443322$$%%&&''||}}~~}}||{{zz%%$$##""44556677^^]]\\[[~~jiihhggf + + QQRRSSTTPPOONNMM + + aabbccdd@@??>>==qqrrsstt00//..--))**++,,xxwwvvuu 99::;;<>====>>??@@FFEEDDCC!!""##$$yyzz{{||~~}}((''&&%%11223344ppoonnmmAABBCCDD``__^^]]QQRRSSTTPPOONNMM + + aabbccdd@@??>>==##$$%%WWQQPPOOyyzz{{||{{zzyyxx##""!! 66778899kkjjiihhFFGGHHII[[ZZYYXXVVWWXXYYKKJJIIHHffgghhii;;::9988 !!vvwwxxyyyyxxwwvv + +ccddeeff#"! ;;<<==>>ffeeddcc KKLLMMNNVVUUTTSS[[\\]]^^FFEEDDCCkkllmmnn66554433##$$%%&&{{||}}~~~~}}||{{&&%%$$##AABBCCDD3322110034455667aa``__^^ PPQQRRSSQQPPOONN + + ``aabbccAA@@??>>ppqqrrss1100//..(())**++yyxxwwvv!! 8899::;;ZZYYXXWWfeeddccbUUVVWWXXLLKKJJII eeffgghh<<;;::99 uuvvwwxx,,++**))--..//00ttssrrqq==>>??@@ddccbbaappoonnmmQQRRSSTT77665544AABBCCDDBBAA@@??%%&&''((}}~~||{{zzyy$$##""!!55667788llkkjjiiEEFFGGHH\\[[ZZYYUUVVWWXXLLKKJJII eeffgghh<<;;::99&&''(())NNMMLLKK}}~~wwvvuutt::;;<<==ggffeedd JJKKLLMMWWVVUUTTZZ[[\\]]GGFFEEDDjjkkllmm77665544""##$$%%zz{{||}}uuttssrr gghhiijj~~}}||{{??@@AABBbbaa``__ + + OOPPQQRRRRQQPPOO + +__``aabbBBAA@@??ooppqqrr221100//''(())**zzyyxxww""!! EEFFGGHH//..--,,789:;<==]]\\[[ZZTTUUVVWWMMLLKKJJ ddeeffgg==<<;;::ttuuvvww--,,++**,,--..//uuttssrr<<==>>??QQPPOONNbaa``__^YYZZ[[\\HHGGFFEEiijjkkll88776655!!""##$$yyzz{{||~~}}((''&&%%11223344ppoonnmmAABBCCDD``__^^]]llkkjjiiUUVVWWXX33221100EEFFGGHH>>==<;:9))**++,,xxwwvvuu 99::;;<>??@@AAccbbaa`` + + NNOOPPQQSSRRQQPP ^^__``aaCCBBAA@@nnooppqq33221100&&''(())~~qqkkjjiikkqqrrsszzyyxxwwCCDDEEFF^^]]\\[[SSTTUUVVNNMMLLKK ccddeeff>>==<<;;ssttuuvv..--,,++++,,--..vvuuttssIIJJKKLL++**))((>>??@@AAYYXXWWVVXXYYZZ[[IIHHGGFFhhiijjkk99887766 !!""##xxyyzz{{~~))((''&&00112233qqppoonn@@AABBCCMMLLKKJJ##$$%%&&^]]\\[[Z]]^^__``DDCCBBAAmmnnoopp44332211%%&&''((}}~~||{{zzyy$$##""!!55667788llkkjjiiEEFFGGHH\\[[ZZYYhhggffee YYZZ[[\\//..--,,IIJJKKLL87766554--..//00ttssrrqq==>>??@@ddccbbaa + + MMNNOOPPTTSSRRQQ]]^^__``DDCCBBAAmmnnoopp44332211..//0011FFEEDDCC%&&''(()oonnmmllBBCCDDEE__^^]]\\RRSSTTUUOONNMMLL + + bbccddee??>>==<<rrssttuu//..--,,**++,,--hhggffee + + ttuuvvwwvvuuttssGGHHIIJJZZYYXXWWWWXXYYZZJJIIHHGGgghhiijj::998877 !!""wwxxyyzz**))((''//001122rrqqppooMMNNOOPP''&&%%$$BBCCDDEEUUTTSSRR\\]]^^__EEDDCCBBllmmnnoo55443322$$%%&&''||}}~~}}||{{zz%%$$##""44556677mmllkkjjDDEEFFGGIIHHGGFF''(())**ZYYXXWWV + + aabbccdd@@??>>==qqrrsstt00//..--))**++,,xxwwvvuu 99::;;<>==qqrrsstt00//..--22334455BBAA@@??)**++,,-kkjjiihhFFGGHHII[[ZZYYXXVVWWXXYYKKJJIIHHffgghhii;;::9988 !!vvwwxxyy++**))((..//0011ddccbbaa xxyyzz{{rrqqponm KKLLMMNNVVUUTTSS[[\\]]^^FFEEDDCCkkllmmnn66554433##$$%%&&{{||}}~~~~}}||{{&&%%$$##33445566nnmmllkkQQWWXXYY##FFGGHHIIQQPPOONN + + ``aabbccAA@@??>>ppqqrrss1100//..(())**++yyxxwwvv!! 8899::;;iihhggffHHIIJJKKEEDDCCBB++,,--..UTSRQQPP eeffgghh<<;;::99 uuvvwwxx,,++**))--..//00ttssrrqq==>>??@@ddccbbaa + + MMNNOOPPTTSSRRQQ + + ``__^^]] + + aabbccdd''&&%%$$QQWWXXYY0//..--,55667788llkkjjiiEEFFGGHH\\[[ZZYYUUVVWWXXLLKKJJII eeffgghh<<;;::99 uuvvwwxx,,++**))6677==>>>>==7766-..//001ggffeedd JJKKLLMMWWVVUUTTZZ[[\\]]GGFFEEDDjjkkllmm77665544""##$$%%zz{{||}}~~}}||''&&%%$$22334455``__^^]]||}}~~lkkjjiih + + OOPPQQRRRRQQPPOO + +__``aabbBBAA@@??ooppqqrr221100//''(())**zzyyxxww""!! 778899::jjiihhggZZ[[\\]]JJKKLLMMMMLLKKJJ ddeeffgg==<<;;::ttuuvvww--,,++**,,--..//uuttssrr<<==>>??eeddccbb + +LLMMNNOOAA@@??>>//001122OONNMMLLiijjkkll88776655!!""##$$yyzz{{||~~}}((''&&%%11223344ppoonnmmAABBCCDD``__^^]]QQRRSSTTPPOONNMM\\[[ZZYY eeffgghh##ZZ[[\\]],++**))(99::;;<>==<<;;ssttuuvv..--,,++++,,--..vvuuttss;;<<==>>ffeeddcc ^^__``aaNNOOPPQQIIHHGGFFhhiijjkk99887766 !!""##xxyyzz{{~~))((''&&00112233qqppoonn@@AABBCCaa``__^^ PPQQRRSS==77665533445566KKJJIIHHmmnnoopp44332211%%&&''((}}~~||{{zzyy$$##""!!55667788llkkjjiiEEFFGGHH\\[[ZZYYUUVVWWXXLLKKJJIIXXWWVVUUiijjkkll^^__``aa(''&&%%$==>>??@@ddccbbaa + + MMNNOOPPTTSSRRQQ]]^^__``DDCCBBAAmmnnoopp44332211%%&&''((}}~~||{{zzyy$$##""!!CCDDEEFF1100//..5667789:__^^]]\\RRSSTTUUOONNMMLL + + bbccddee??>>==<<rrssttuu//..--,,**++,,--wwvvuutt::;;<<==XXWWQQPPdccbbaa`WWXXYYZZJJIIHHGGgghhiijj::998877 !!""wwxxyyzz**))((''//001122rrqqppoo??@@AABBbbaa``__ + + bbccddee~~}}||{{RSTUVWWXEEDDCCBBllmmnnoo55443322$$%%&&''||}}~~}}||{{zz%%$$##""44556677mmllkkjjDDEEFFGG]]\\[[ZZTTUUVVWW4433221177==>>??GGFFEEDDqqrrsstt00//..--))**++,,xxwwvvuu 99::;;<>==qqrrsstt00//..--))**++,,xxwwvvuu GGHHIIJJ--,,++**;<==>>??[[ZZYYXXVVWWXXYYKKJJIIHHffgghhii;;::9988 !!vvwwxxyy++**))((..//0011ssrrqqpp>>??@@AAOONNMMLL##$$`__^^]]\[[\\]]^^FFEEDDCCkkllmmnn66554433##$$%%&&{{||}}~~~~}}||{{&&%%$$##33445566nnmmllkkCCDDEEFF^^]]\\[[ffgghhiizzyyxxww XYYZZ[[\AA@@??>>ppqqrrss1100//..(())**++yyxxwwvv!! 8899::;;iihhggffHHIIJJKKYYXXWWVVXXYYZZ[[00//..--@@AABBCCCCBBAA@@ uuvvwwxx,,++**))--..//00ttssrrqq==>>??@@ddccbbaa + + MMNNOOPPTTSSRRQQ]]^^__``DDCCBBAA + + yyzz{{||ggffeedd + +fgghhiij33221100&&''(())~~{{zzyyxx##""!! 66778899kkjjiihhFFGGHHII[[ZZYYXXVVWWXXYYKKJJIIHHffgghhii^^__``aa{{zzyyxx##""!! FFGGHHII}}~~ccbbaa`` jkklmnop//..--,,**++,,--wwvvuutt::;;<<==ggffeedd JJKKLLMMWWVVUUTTZZ[[\\]]GGFFEEDDjjkkllmmbbccddeewwvvuuttJJKKLLMM__^^]]\\qqrrsstt++**))((..//0011ssrrqqpp>>??@@AAccbbaa`` + + NNOOPPQQSSRRQQPP ^^__``aaCCBBAA@@nnooppqq~~}}||{{ffgghhiissrrqqppNNOOPPQQ[[ZZYYXXuuvvwwxx~~}}||''&&%%$$22334455oonnmmllBBCCDDEE__^^]]\\RRSSTTUUOONNMMLL + + bbccddee??>>==<<rrssttuuzzyyxxww jjkkqqrroonnmmllRRSSTTUU##$$%%WWQQPPOOyyzz{{||{{zzyyxx##""!! 66778899kkjjiihhFFGGHHII[[ZZYYXXVVWWXXYYKKJJIIHHffgghhii;;::9988 !!vvwwxxyyvvuuttss + + + +ssttuuvvkkjjiihhVVWWXXYY&&''(())NNMMLLKK}}~~wwvvuutt::;;<<==ggffeedd JJKKLLMMWWVVUUTTZZ[[\\]]GGFFEEDDjjkkllmm77665544""##$$%%zz{{||}}rrqqkkjj wwxxyyzzggffeedd ZZ[[\\]]**++,,--JJIIHHGG !"##$$%ssrrqqpp>>??@@AAccbbaa`` + + NNOOPPQQSSRRQQPP ^^__``aaCCBBAA@@nnooppqq33221100&&''(())~~iihhggff{{||}}~~ccbbaa`` + + ^^__``aa..//0011FFEEDDCC%&&''(()oonnmmllBBCCDDEE__^^]]\\RRSSTTUUOONNMMLL + + bbccddee??>>==<<rrssttuu//..--,,**++,,--eeddccbb__^^]]\\ + + bbccddee22334455BBAA@@??)**++,,-kkjjiihhFFGGHHII[[ZZYYXXVVWWXXYYKKJJIIHHffgghhii;;::9988 !!vvwwxxyy++**))((..//0011aa``__^^[[ZZYYXXffgghhii6677==>>>>==7766-..//001ggffeedd JJKKLLMMWWVVUUTTZZ[[\\]]GGFFEEDDjjkkllmm77665544""##$$%%zz{{||}}~~}}||''&&%%$$22334455]]\\[[ZZ##WWVVUUTTjjkkllmm??@@AABB5544332212233445ccbbaa`` + + NNOOPPQQSSRRQQPP ^^__``aaCCBBAA@@nnooppqq33221100&&''(())~~{{zzyyxx##""!! 66778899YYXXWWQQ$$%%&&''SSRRQQPPnnooppqqCCDDEEFF1100//..5667789:__^^]]\\RRSSTTUUOONNMMLL + + bbccddee??>>==<<rrssttuu//..--,,**++,,--wwvvuutt::;;<<==PPOONNMM(())**++OONNMMLLrrssttuuGGHHIIJJ--,,++**;<==>>??[[ZZYYXXVVWWXXYYKKJJIIHHffgghhii;;::9988 !!vvwwxxyy++**))((..//0011ssrrqqpp>>??@@AALLKKJJII,,--..//KKJJIIHH !!vvwwxxyyKKLLMMNN))((''&&@@AABBCCWWVVUUTTZZ[[\\]]GGFFEEDDjjkkllmm77665544""##$$%%zz{{||}}~~}}||''&&%%$$22334455oonnmmllBBCCDDEEHHGGFFEE00112233GGFFEEDD""##$$%%zz{{||}}OOPPQQWW%%$$##DDEEFFGGSSRRQQPP ^^__``aaCCBBAA@@nnooppqq33221100&&''(())~~{{zzyyxx##""!! 66778899kkjjiihhFFGGHHIIDDCCBBAA44556677CCBBAA@@&&''(())~~XXYYZZ[[HHIIJJKKOONNMMLL + + bbccddee??>>==<<rrssttuu//..--,,**++,,--wwvvuutt::;;<<==ggffeedd JJKKLLMM@@??>>====>>??@@??>>==<<**++,,--\\]]^^__LLMMNNOOKKJJIIHHffgghhii;;::9988 !!vvwwxxyy++**))((..//0011ssrrqqpp>>??@@AAccbbaa`` + + NNOOPPQQ77665544AABBCCDD;;::9988..//0011``aabbcc~~}}PPQQRSTUGGFFEEDDjjkkllmm77665544""##$$%%zz{{||}}~~}}||''&&%%$$22334455oonnmmllBBCCDDEE__^^]]\\RRSSTTUU33221100EEFFGGHH7766554422334455ddeeffgg||{{zzyy VWWXXYYZCCBBAA@@nnooppqq33221100&&''(())~~{{zzyyxx##""!! 66778899kkjjiihhFFGGHHII[[ZZYYXXVVWWXXYY//..--,,IIJJKKLL3322110066778899hhiijjkkxxwwvvuu + + Z[[\\]]^??>>==<<rrssttuu//..--,,**++,,--wwvvuutt::;;<<==ggffeedd JJKKLLMMWWVVUUTTZZ[[\\]]++**))((MMNNOOPP//..--,,::;;<<==qqrrssttttssrrqq^__``aab;;::9988 !!vvwwxxyy++**))((..//0011ssrrqqpp>>??@@AAccbbaa`` + + NNOOPPQQSSRRQQPP ^^__``aa''&&%%$$QQWWXXYY++**))((>>??@@AAuuvvwwxxkkjjiihhbccddeef77665544""##$$%%zz{{||}}~~}}||''&&%%$$22334455oonnmmllBBCCDDEE__^^]]\\RRSSTTUUOONNMMLL + + bbccddee##ZZ[[\\]]~~}}||''&&%%$$BBCCDDEEbdQZ|drtAvpfH~fbے`bے`rd|~HfHfpvp˂rXQJ`ےdrtAltbvpfZHAbے`JXQtlJtArdfpvnXv`bHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQlJtArHfpvHfpvےbHAbAZpltbvpf~f``JXQr˂pZrd|ZdQbtXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbtpvnXQJ`ےXQJ`ےdrtAf`vXnv˂pZHAbے`dQbtlJtAr~HfpvnX`ےbHAZp˂tbdQZ|df`vXnv˂pZHAbے`dQbtlJtAr~HfpnrXQ˂bZ|dZ|lf`vX㐙ے`JXQr˂JtArd|ZdQnXv`f~Zp˂rXQJ`|drtAJlnvpfH~ے`JXQr˂JtArd|ZdQnXv`ےHAZp˂drtAdrtAf`vXJXQr`JXQr|ZdQbtlJf~HfpvXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAے|ZdQbnXv`f~Hp˂rXQJ`ےdrtAdrtAJltH~f`vXnJXQrJXQrZdQtArpvnnXvXQJ`ےbHAZJltnvpH~fے`JXQr˂ptArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂pd|lnXvnXHZp˂˂rbdQZ|Hf`vXn˂pZHAbےZdQbtlJtA~HfpvnJ`ےbHAZpltbdQZ|~f`vXn˂pZHAbےZdQbtlJtAXv`fbHAZbHAZJlbQZXnvpfH~bے`JXQrlJtArd|ZvnXv`fHAZp˂rXQJZ|drtAJlXnvpfH~bے`JXQrlJtArd|ZvnXJ`p˂HAZp˂rtAdQZtbnnvpXQr˂pZHAb|ZdQbtl`f~HfpvrXQJ`ےbHAtAJltbdQZfH~f`vXXQr˂pZHA|ZdQbnXv`f~Zp˂rXQJ`JltJltnvp˂pZHZHAbtlJtArdfpvnXv`bHAZp˂rbdQZ|drtA`vXnvpfZHAb`JXQrtlJf~HfpvXQJ`ےbHAZJltJltbdQZ|`vXnvpf˂pZHA˂p|Zd|ZXv`f`f~bHAZp˂rbdQZ|fHf`vXnr˂pZHAb|ZdQbtlJf~HfpvXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAbJtArd`ffpvrXQJ`dQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|pvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|~Hfp˂rp˂r|drpfH~f`vJXQr˂pZHAd|ZdQbtv`f~HfprXQJ`ےbrtAJltbdQpfH~f`vJXQr˂pZHAd|ZdQbnXv`frXQJrXQJ|drvpfffH~pZHAbے`JbtlJtArdHfpvnXvےbHAZp˂tbdQZ|drf`vXnvppZHAbے`JXQbtl`f~HfpvrXQJ`ےbHAbdQZ|bdQtAJfH~Abے`ے`JXtArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAJltvpfH~fے`JXQbtltArdfpvnXv`bHAZp˂rbdQZ|bdQZ|drtAvpfH~fb˂dQbtdQbt璐~HfHfpvp˂rbdQZ|drtA`vXnvpfZHAbے`JXQtlJtArdfpvnXv`bHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQ|ZdQnXv`nXv`ےbHAdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbtXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbnpvXQJ`ےXQJ`ptAJl璐f`vXnv˂pZHAbے`dQbtlJtAr~HfpvnX`ےbHAZp˂tbdQZ|df`vXnv˂pZHAے`JdQbtv`f~Hfp`ےb`ےbtAJl`vXnf`vXnے`JXQr˂JtArd|ZdQnXv`f~Zp˂rXQJ`|drtAJlnvpfH~ے`JrbtJtArdHfpvnXvےbHAZp˂dtbltbf`pfJXQrQr˂p|ZdQbtlJf~HfpvXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pJtAd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAdrtAJltH~f`vXnpZHAblJtArlJtArvnXv`nXvXQJ`ےdrtAJltvpfH~fے`JXQr˂ptArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂pbtlf~Hf~HZprQltbdQZ|~f`vXn˂pZHAbےZdQbtlJtA~HfpvnJ`ےbHAZpltbdQZ|~f`vXn˂pZHAے`ZdQbtXv`p~HfpbHAXQ˂rbtbdQZXnvpfH~bے`JXQrlJtArd|ZvnXv`fHAZp˂rXQJZ|drtAJlXnvpfH~bے`XQrbtlJtAr~HfpvnXHAZp˂HAZp˂tbdQZvpfvfH~XQr˂pZHAb|ZdQbtl`f~HfpvrXQJ`ےbHAtAJltbdQZfH~f`vXXQr˂lJtAd|ZdQnXv`f~Zp˂rXQJ`dQZ|dQZ|H~f˂pZHZHAbtlJtArdfpvnXv`bHAZp˂rbdQZ|dtAJ`vXnr˂pZHAb|ZdQbtlJf~HfpvXQJ`ےbHAZJltJltJltbdQZ|`vXnvpfے`Jd|Zd|Zf~H`frQbHAZJltbdQZ|H~f`vXnr˂pZHAb|ZdQbtlJf~HfpvXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAےJtArdfpvfpvJ`ےdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|pvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfHHAbےJXQrblJtAvnXvnXJ`ےdQZ||drpfH~f`vJXQr˂pZHAd|ZdQbtv`f~HfprXQJ`ےbrtAJltbdQpfH~f`vJXQrlJtAd|ZvnXv`frXQJrXQHA|drH~ff`vpZHAbے`JbtlJtArdHfpvnXvےbHAZp˂tbdQZ|dtAf`vXnr˂pZHAb|ZdQbtl`f~HfpvrXQJ`ےbHAdrtAJdrtAJ`vXnAbJXQے`JXtArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAltbvpfZHAbے`JXQtlJtArdfpvnXv`bHAZp˂rbdQZ|bdQZ|bdQZ|drtAvpfH~fXQr˂dQbtdQbtdfpvJHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQtlJtArdfpvnXv`bHAZp˂rbdQZ|drtA`vXnvpfZHAb`JXQr|ZdQnXv`nXv`bHAZpdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbtXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f``JXQrtlJrd|v`fv`fbHAZprAJlttAJl璐f`vXnv˂pZHAbے`dQbtlJtAr~HfpvnX`ےbHAZp˂tbdQZ|df`vXnr˂pZHAd|ZdQbtv`f~Hfp`ےZp˂tAJl|`vXnXnvے`JXQr˂JtArd|ZdQnXv`f~Zp˂rXQJ`|drJltnvppZHAbے`JbtlJtArdHfpvnXvےbHAZp˂ltbltbvpfr˂pQrZ|ZdQbtlJf~HfpvXQJ`ےbHAZJltnvpH~fے`JXQr˂ptArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAdrtAdrtAJltH~f`vXnpZHAblJtAdQ|ZdQnXv`p˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂ptArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAJltvpfH~fے`JXQbtltArdf~HpvnrXQltbdQZ|~f`vXn˂pZHAbےZdQbtlJtA~HfpvnJ`ےbHAZpltbdQZ|~f`vXnr˂pZtAd|ZdQbt~Hfp~Hfp˂rXQbdQZ|tbQZdXnvpfH~bے`JXQrlJtArd|ZvnXv`fHAZp˂rXQJZ|dtAJlXnv˂pZHAbے`dQbtlJtAr~HfpvnXrXQJ`rXQJ`drtAvpfpfH~XQr˂pZHAb|ZdQbtl`f~HfpvrXQJ`ےbHAtAJlbnvfH~ے`JXQr˂JtArd|ZdQnXv`f~Zp˂rXQJ`dQZ|dQZ|lH~fZHAbAbے`tlJtArdfpvnXv`bHAZp˂rbdQZ|fHf`vXnr˂pZHAb|ZdQbtlJf~HfpvXQJ`ےbHAZJltJltJltbdQZ|`vXnvpfے`pbtlbtlf~HXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAb|ZdQbtlJf~HfpvXQJ`ےbHAZJltbdQZ|H~f`vXnr˂p|ZdQb|ZdQbXv`frXQJ`J`ےdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|pvnXv`fbHAZp˂rXQdQZ|dtAJlvXn˂pZHAbےZdQbtlJtAvnXvnXJ`ےdrtrtAJlpfH~f`vJXQr˂pZHAd|ZdQbtv`f~HfprXQJ`ےbrtAJltbnpfH~bے`JXQrlJtArd|ZvnXv`fےbHAےbHAJltH~fvXf`vpZHAbے`JbtlJtArdHfpvnXvےbHAZp˂tbdQZpfHf`vXXQr˂pZHAb|ZdQbtl`f~HfpvrXQJ`ےbHAdrtAdQtbn`vXHے`JXQJXQrtArd|ZdQbnXv`fHfp˂rbdQZ|drtA`vXnvpfZHAbے`JXQtlJtArdfpvnXv`bHAZp˂rbdQZ|bdQZ|bdQZ|drtAvpfH~fZHAbJtArdJtArdfpvnbHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQtlJtArdfpvnXv`bHAZp˂rbdQZ|dtAJ`vXnr˂pZHAbtlJtlJ~HfAZp˂bHAZpdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbtXv`f~Hf˂rXQJ`ےdrtAJtbnvpfHHAbے`JXQrlJtArd|v`fHfpvbHAZpAJlttbdf`vXnv˂pZHAbے`dQbtlJtAr~HfpvnX`ےbHAZp˂tbdQvpfHf`vJXQr˂pZHAd|ZdQbtv`f~HfpZp˂Zp˂bdQZ|nvpXnvے`JXQr˂JtArd|ZdQnXv`fHZp˂rbdQZ|drf`vXnvppZHAbے`JbtlJtArdHfpvnXvےbHAZp˂Z|dvp`~f`r˂p˂pZHA|ZdQbtlJf~HpvnXQJ`ےdrtAJltvpfH~fے`JXQr˂ptArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAdrtAdrtAJltH~f`vXnے`JXQ|ZdQ|ZdQv`fp˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂ptArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAltbvpfZHAbے`JXQtArdtArdpvnrXQJrQJltbdQZ|~f`vXn˂pZHAbےZdQbtlJtA~HfpvnJ`ےbHAZpltbvpf~f``JXQr˂pZrd|ZdQbtnXvnXv`ےbbdQZ|QZ|dXnvpfH~bے`JXQrlJtArd|ZvnXv`fHAZp˂rbdQZ|df`vXnv˂pZHAbے`dQbtlJtAr~HfpvnXrXQJ`rXQJ`drtAfH~f~f`XQr˂pZHAb|ZdQbtl`f~fpvrXQJ`|drtAJlnvpfH~ے`JXQr˂JtArd|ZdQnXv`f~Zp˂rXQJ`rtAJlvXnvXnZHAbbے`tlJtArdfpvrXQJ`bHAZJltbdQZ|H~f`vXnr˂pZHAb|ZdQbtlJf~HfpvXQJ`ےbHAZJltJltJltbdQZ|`vXnvpfr˂pbtlbtl~HfpXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAb|ZdQbtlJf~HfpvXQJ`ےbHAZJltnvpH~fے`JXQr˂p|ZdQb|ZdQbXv`f`ےbbHAZdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|pvnXv`fbHAZp˂rbdQZ|Hf`vXn˂pZHAbےZdQbtlJtA`f~`f~HAZp˂drAJrtAJlpfH~f`vJXQr˂pZHAd|ZdQbtv`fHfpvrXQJZ|drtAJlXnvpfH~bے`JXQrlJtArd|ZvnXv`fےbHAp˂rJltf`vXvXnpZHAbے`JbtlJtArdHfpvnrXQJےbHAtAJltbdQZfH~f`vXXQr˂pZHAb|ZdQbtl`f~HfpvrXQJ`ےbHAtbdQvpfHvpfHJQrJXQrtArd|ZdQbnXv`ےHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQtlJtArdfpvnXv`bHAZp˂rbdQZ|bdQZ|bdQZ|drtAvpfH~fZHAbJtArd|ZdQbvnXbHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQtlJtArdfpvnXv`bHAZp˂rbdQZ|fHf`vXnr˂pZHAbtlJtd|~HfHAZp˂p˂rdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbtXv`fHfp˂rXQdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|HfpvHfpvrXQJtbdQtbdf`vXnv˂pZHAbے`dQbtlJtAr~HfpnrXQ`ےbrtAJltbdQpfH~f`vJXQr˂pZHAd|ZdQbtv`f~HfpXQJ`ےbdQZ|drtAJnvpvpfHے`JXQr˂JtArd|ZdQnXv`ےHAZp˂tbdQZ|drf`vXnvppZHAbے`JbtlJtArdHfpvnXvےbHAZp˂Z|d~f`~f`pZHA˂pZA|ZdQbnXv`f~Hp˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂ptArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAdrtAdrtAJltH~f`vXnے`JXQtlJnXv`v`fp˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂ptArd|ZdQbnXv`fHfp˂rbdQZ|drtA`vXnvpfZHAbے`JXQtAdQbtZdQbtp`frXQJXQJ`ےltbdQZ|~f`vXn˂pZHAbےZdQbtlJtA~HfvnrJ`ےdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbtnXvnXv`ےbZ|dQZrtAXnvpfH~bے`JXQrlJtArd|ZvnXJ`ےHAZp˂tbdQZ|df`vXnv˂pZHAbے`dQbtlJtAr~HfpvnXbHAZltbltbfH~~f`XQr˂pZHA|ZdQbnXv`f~Zp˂rXQJ`|drtAJlnvpfH~ے`JXQr˂JtArd|ZdQnXv`f~Zp˂rXQJ`rtAJlvXnvXnbے``JXQrtlJf~HfpvXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAb|ZdQbtlJf~HfpvXQJ`ےbHAZJltJltJltbdQZ|`vXnr˂pHAbےtArdf~fp~HfpXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAb|ZdQbtlJf~HpvnXQJ`ےdrtAJltvpfH~fے`JXQr˂plJtAlJtA~Hfp`ےbAbHAZdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|pvnXQJ`ےbHAZpltbdQZ|~f`vXn˂pZHAbےZdQbtlJtA`f~`pvHAZp˂rtAJlJltpfH~f`vJXQr˂pZHAd|ZdQbnXv`fHAZp˂rXQJZ|drtAJlXnvpfH~bے`JXQrlJtArd|ZvnXv`fp˂rdQZ|dQZ|fvnvXnpZHAbے`JXQbtl`f~HfpvrXQJ`ےbHAtAJltbdQZfH~f`vXXQr˂pZHAb|ZdQbtl`f~HfpvrXQJ`ےbHA|drvpfHf`vJXQrbtltArdfpvnXv`bHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQtlJtArdfpvnXv`bHAZp˂rbdQZ|bdQZ|bdQZ|drtAvpf`JXQr`JXQr|ZdQbvnXvnvbHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQtlJtArdfpvrXQJ`bHAZJltbdQZ|H~f`vXnr˂pZHAbrd|rd|vnXZrXp˂rdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbnXv`fHAZp˂rXQdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|HXv`nrXQJbHAtbdQbdQZ|f`vXnv˂pZHAے`JdQbtv`f~HfprXQJ`ےbrtAJltbdQpfH~f`vJXQr˂pZHAd|ZdQbtv`f~HfpXQJ`ےdrtAJdrtAJvpfHvpf~ے`JrbtJtArdHfpvnXvےbHAZp˂tbdQZ|drf`vXnvppZHAbے`JbtlJtArdHfpvnXvےbHAZp˂tAJlXnvXnvpZHAJtAd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂ptArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAdrtAdrtAJltH~f˂pZ˂pZtlJv`ff~Hp˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂ptArd|ZdQbnXv`ےHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQZdQbtZdQbtv`fQJ`ےXQJbHltbdQZ|~f`vXn˂pZHAے`ZdQbtXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbtf~H`p˂Zp˂Z|ddrtAXnvpfH~bے`XQrbtlJtAr~HfpvnX`ےbHAZp˂tbdQZ|df`vXnv˂pZHAbے`dQbtlJtAr~HfpvnXbHAZltbltb~f`f`vXXQr˂lJtAd|ZdQnXv`f~Zp˂rXQJ`|drtAJlnvpfH~ے`JXQr˂JtArd|ZdQnXv`f~Zp˂rXQJ`tbdQZpfH~pfH~bے`J|ZdQbtlJf~HfpvXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAb|ZdQbtlJf~HfpvXQJ`ےbHAZJltJltJltbdQZ|`vXnHAbےHAbےtArd~HfpfpvXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAے|ZdQbnXv`f~Hp˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂plJtAl|Z~HfpbHAZpAZp˂dQZ|drtAJvXnvpfHHAbےJXQrblJtA~HfpvnJ`ےbHAZpltbdQZ|~f`vXn˂pZHAbےZdQbtlJtAfpvrXQJ`rXQJ`rtAJJltpfH~f`vJXQrlJtAd|ZvnXv`fHAZp˂rXQJZ|drtAJlXnvpfH~bے`JXQrlJtArd|ZvnXv`fp`ےdQZ|dQtAJlvXnnr˂pZHAb|ZdQbtl`f~HfpvrXQJ`ےbHAtAJltbdQZfH~f`vXXQr˂pZHAb|ZdQbtl`f~HfpvrXQJ`ےbHA|drf`vf`vQrpZtlJtArdfpvnXv`bHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQtlJtArdfpvnXv`bHAZp˂rbdQZ|bdQZ|bdQZ|`vXnvpf`JXQr`JXQr|lJtAvnXnXv`ːbHAZp˂rbdQZ|drtA`vXnvpfZHAb`JXQrtlJf~HfpvXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAbrdtdQbnXv~˂rXrXQJ`drtAJltbvpfH~f``JXQrtlJrd|pvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|nXv`ےbHAےbHAbdQZ|bdQZ|f`vXnr˂pZHAd|ZdQbtv`f~HfprXQJ`ےbrtAJltbdQpfH~f`vJXQr˂pZHAd|ZdQbtv`f~HfpbHAZpdtbdQtbdQvpfHpZHAbے`JbtlJtArdHfpvnXvےbHAZp˂tbdQZ|drf`vXnvppZHAbے`JbtlJtArdHfpvnXvےbHAZp˂tAJlXnvXnvHAbےtArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂ptArd|ZdQbnXv`fHfp˂rbdQZ|drtAdtAJdrtAvpfH~f˂pZے`rd|v`f~f~Hp˂rXQJ`ےdrtAJltvpfH~fے`JXQbtltArdfpvnXv`bHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQlJtArv`pvHfpvQJ`ےےbHltbdQZ|~f`vXnr˂pZtAd|ZdQbtXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbtf~HZp˂Zp˂drtAAJlXnv˂pZHAbے`dQbtlJtAr~HfpvnX`ےbHAZp˂tbdQZ|df`vXnv˂pZHAbے`dQbtlJtAr~HfpvnX˂rXQZ|dZ|d~f`ے`JXQr˂JtArd|ZdQnXv`f~Zp˂rXQJ`|drtAJlnvpfH~ے`JXQr˂JtArd|ZdQnXv`fHZp˂rbdQZtdrtApfH~p`vX`JXQr|ZdQbtlJf~HfpvXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAb|ZdQbtlJf~HpvnXQJ`ےdrtAJltltbJltH~f`vXnHAXQrJXQrZdQbtfvnfpvXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pJtAd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂pd|ZnXvnXvbHAZAZp˂dQZ|dtAJlvXn˂pZHAbےZdQbtlJtA~HfpvnJ`ےbHAZpltbdQZ|~f`vXn˂pZHAbےZdQbtlJtAfp`frXQJ`rXQHAZJlttbnpfH~bے`JXQrlJtArd|ZvnXv`fHAZp˂rXQJZ|drtAJlXnvpfH~bے`JXQrlJtArd|ZvnXv`fJ`ےrtAJlrtAJlvnvpXQr˂pZHAb|ZdQbtl`f~HfpvrXQJ`ےbHAtAJltbdQZfH~f`vXXQr˂pZHAb|ZdQbtl`f~fpvrXQJ`|ltJltvpnr˂˂pZtlJtArdfpvnXv`bHAZp˂rbdQZ|drtA`vXnvpfZHAbے`JXQtlJtArdfpvrXQJ`bHAZJltbdQZ|nvpbdQZ|`vXnvpf˂pZHA˂pZHAlJtAXv`fnXvf~bHAZp˂rbdQZ|dtAJ`vXnr˂pZHAb|ZdQbtlJf~HfpvXQJ`ےbHAZJltbdQZ|H~f`vXnr˂pZHAbdQbt`f~`f~rXQJ`rXQJ`drtAJtbnvpfHHAbے`JXQrlJtArd|pvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|~Hfےrp˂rbdQZ|vpfHf`vJXQr˂pZHAd|ZdQbtv`f~HfprXQJ`ےbrtAJltbdQpfH~f`vJXQr˂pZHAd|ZdQbtv`fHfpvbHAZptbdQtbdQfH~pZHAbے`JbtlJtArdHfpvnXvےbHAZp˂tbdQZ|drf`vXnvppZHAbے`JbtlJtArdHfpvnrXQJےbHAbdQZ|bdQZ|fH~pZAb`HAbےtArd|ZdQbnXv`f~Hp˂rXQJ`ےdrtAJltvpfH~fے`JXQr˂ptArd|ZdQbnXv`ےHAZp˂rbdQZ|drtA`vXnvpfvpfHAbےJA|Zrd|琕~HfpvnJ`ےbHAZpltbdQZ|~f`vXn˂pZHAbےZdQbtlJtA~HfvnrJ`ےdrtAJltbvpfH~f`HAXQrJXQrZQXb㉀`vXnvˍpfdrQtH~fH~f`JXQrdQbtZdQbJpvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|pvnXQJ`ےbHAZpltbdQZ|~f`vXn˂pZHA˂pZHAۑpJAHvˍpfH~ㅐfJlt`vXn`vXn˂pZlJtArtArdXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbnXv`fHAZp˂rXQdQZ|drtAJvXnvpfHbے`bے`r󙐂ˁ`H~ㅐf۝`vXnbAdZ|vpff`HAbےd|Z|ZdQb~HfpvnJ`ےbHAZpltbdQZ|~f`vXn˂pZHAے`ZdQbtXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f`JXQrJXQrZQXAHr`vXnvˍpfdrQtHXnvXn`pZHAdQbttlJpvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfHHAbےJXQrblJtA~HfpvnJ`ےbHAZpltbdQZ|~f`vXn˂pZHA˂p`Zˁ`ZvˍpfH~ㅐfJltvpfHvpfHbے`lJtArtArdXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f``JXQrtlJrd|pvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfHb˂QXb㉀QXb㉀ەH~ㅐf۝`vXnbAdZ|~f`~f`JXQrZdQbt|ZdQb~HfpvnJ`ےbHAZpltbdQZ|~f`vXnr˂pZtAd|ZdQbtXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f`pZHAbpJAHrpJAHr`vXnvˍp|drQtvXnvXn˂pZHAlJttJArdpvnXv`fbHAZp˂rXQdQZ|dtAJlvXn˂pZHAbےZdQbtlJtA~HfpvnJ`ےbHAZpltbdQZ|~f`vXnے`Jˁ`Zˁ`ZvˍpfdrQtJltvpfHvp`vbے`Ard||ZdXv`f~Hf˂rXQJ`ےdrtAJtbnvpfHHAbے`JXQrlJtArd|pvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfHXQr˂QXb㉀QXb㉀H~ㅐfJltbAdZ|~vXnrJXQHAbZdQbtQbtl~HfpvnJ`ےbHAZpltbvpf~f``JXQr˂pZrd|ZdQbtXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f`pZHAbpJAHQXˁ`ZQX`vXnbAdZ|drQtpfH~˂p`Jے`JlJtJtArdpvnXv`fbHAZp˂rbdQZ|Hf`vXn˂pZHAbےZdQbtlJtA~HfpvnJ`ےbHAZpltbdQZ|~f`vXnے`pb㉀ۑpb㉀ۑpvˍpfdrQtJltf`vXQr˂XQr˂ArdZ|ZdXv`fHfp˂rXQdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|pvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfHZHAbJAHrJAHr󙐕H~ㅐfJltbAdZ|XnvpZHAbpZHAbQbtlQbtl~HfvnrJ`ےdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbtXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f`ے`JXQˁ`ZQXˁ`ZQX`vXnbAdZ|drQtpfH~ے`Jے`JJtArdJAr|pvnXQJ`ےbHAZpltbdQZ|~f`vXn˂pZHAbےZdQbtlJtA~HfpvnJ`ےbHAZpltbdQZ|~f`vXnr˂pb㉀ۑpb㉀XnvˍpfdrQtJltf`pXQr˂XQr|ZdQZdQbnXv`fHAZp˂rXQdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|pvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfHZHAbJAHr󙐕vˍpfH~ㅐfJltbAdZ|fH~pZHAXQے`JXQbtlXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbtXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f`ے`JXQۑpJH~ㅐf۝`vXnbAdZ|drQtf`vXr˂pr˂pJtArd~HfpvnJ`ےbHAZpltbdQZ|~f`vXn˂pZHAbےZdQbtlJtA~HfpvnJ`ےbHAZpltbdQZ|~f`vXnےHAbےAHr󙐂˝`vXnvˍpfdrQtJltnvpZHAbZHAb|ZQbpvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|pvnXv`fbHAZp˂rXQdQZ|dtAJlvXn`JXQr`JXQr`ZQXb㕀vˍpfH~ㅐfJltbAdZ|fH~ے`JXQے`JXQlJtAXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbtXv`f~Hf˂rXQJ`ےdrtAJtbnvpfH˂pZ˂pZۑpJH~ㅐf۝`vXnbAdZ|drQtf`vXr˂pr˂prd|琕~HfpvnJ`ےbHAZpltbdQZ|~f`vXn˂pZHAbےZdQbtlJtA~HfpvnJ`ےbHAZpltbvpf~f`HAbےHAbےAHr󙐂˝`vXnvˍpfdrQtJltH~fZHAb`JXQrZdQbtpvnXv`fbHAZp˂rXQdQZ|drtAJvXnvpfHHAbے`JXQrlJtArd|pvnXv`fbHAZp˂rbdQZ|Hf`vXn`JXQr`JXQr`pJAHvˍpfH~ㅐfJltbAdZ|`vXn˂pZbtllJtAXv`f~Hf˂rXQJ`ےdrtAJltbvpfH~f``JXQr˂pZrd|ZdQbtXv`fHfp˂rXQdQZ|drtAJvXnvpfH˂pZے`r󙐂ˁ`H~ㅐf۝`vXnbAdZ|drQt \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv38_2.dat b/vendor/endroid/qr-code/assets/data/qrv38_2.dat new file mode 100644 index 000000000..8839d79ca --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv38_2.dat @@ -0,0 +1,337 @@ +|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuts|{|{|{|{xwxwxwxwtstststs|{|{|{|{xwxwxwxwtstststs|{|{|{|{xwxwxwxwtstststs|{|{|{|{xwxwxwxwtstststs|{|{|{|{xwxwxwxwtstststs|{|{|{|{xwxwxwxwtstststs|{|{|{|{xwxwxwxwtstststs|{|{|{|{xwxwxwxwtstststs|{|{|{|{xwxwxwxwtstststs|{|{|{|{xwxwxwxwtstststs|{|{|{|{xwxwxwxwtstststs~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{zyxwxwxwxwtstststs~}~}~}~}zyzyzyzyxwxwxwxwtstststs~}~}~}~}zyzyzyzyxwxwxwxwtstststs~}~}~}~}zyzyzyzyxwxwxwxwtstststs~}~}~}~}zyzyzyzyxwxwxwxwtstststs~}~}~}~}zyzyzyzyxwxwxwxwtstststs~}~}~}~}zyzyzyzyxwxwxwxwtstststs~}~}~}~}zyzyzyzyxwxwxwxwtstststs~}~}~}~}zyzyzyzyxwxwxwxwtstststs~}~}~}~}zyzyzyzyxwxwxwxwtstststs~}~}~}~}zyzyzyzyxwxwxwvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststsrqrqrqrq~}~}~}~}zyzyzyzyvuvuvuvutstststsrqrqrqrq~}~}~}~}zyzyzyzyvuvuvuvutstststsrqrqrqrq~}~}~}~}zyzyzyzyvuvuvuvutstststsrqrqrqrq~}~}~}~}zyzyzyzyvuvuvuvutstststsrqrqrqrq~}~}~}~}zyzyzyzyvuvuvuvutststsrqrqrqrqrq~}~}~}~}zyzyzyzyvuvuvuvurqrqrqrqrqrqrqrq~}~}~}~}zyzyzyzyvuvuvuvurqrqrqrqrqrqrqrq~}~}~}~}zyzyzyzyvuvuvuvurqrqrqrqrqrqrqrq~}~}~}~}zyzyzyzyvuvuvuvurqrqrqrqrqrqrqrq~}~}~}~}zyzyzyzyvuvuvuvurqrqrqrqrqrqrqrq~}~}~}~}zyzyzyzyvuvuvuvurqrqrqrqrqrqrqrq~}~}~}~}zyzyzyzyvuvuvuvurqrqrqrqrqrqrqrq~}~}~}~}zyzyzyzyvuvuvuvurqrqrqrqrqrqrqrq~}~}~}~}zyzyzyzyvuvuvuvurqrqrqrqrqrqrqrq~}~}~}~}zyzyzyzyvuvuvuvurqrqrqrqrqrqrqpo~}~}~}~}zyzyzyzyvuvuvuvurqrqrqrqpopopopo~}~}~}|{zyzyzyzyvuvuvuvurqrqrqrqpopopopo|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopo|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopo|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopo|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopo|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopo|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopo|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopo|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopo|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopo|{|{|{|{zyzyzyxwvuvuvuvurqrqrqrqpopopopo|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopo|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopo|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopo|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopopopopopolklklklkhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;878787874343434321212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#   + + + + popopopolkkkkkklhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;878787874343434321212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$# + + + + popopopoklklklklhghghghgdcdcdcdcbaba`_`_^]^]^]^]ZYZYZYZYVUVUVUVUQQQQQRQRNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;878787874343434321212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$# + + + + popopopoklklklklhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUQRQRQRQRNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;777778784343434321212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$# + + + + popopopoklklklklhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUQRQRQRQRNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;787878784343434321212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! + + + + popopopoklklklklhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUQRQRQRQRNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;787878784343434321212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! + + + + popopopoklklklklhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUQRQRQRQRNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;78787878434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! + + + + popopopokkkkkklkhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUQRQRQRQQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;78787878434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! + + + + popopopolklklklkhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUQQQQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;78787877434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! + + + + popopopolklklklkhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;77778787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! + + + + popopopolklklklkhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! + + + popopopolklklklkhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! popopopolklklklkhghghghgdcdcdcdc`_`_`_`_^]^]\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! popopopokkkklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQQQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! popopopolklkjijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQQQRQRQRNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878777434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! popopopojijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQRNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;77787878434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! popopopojijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQRNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;78787878434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! ponmnmnmjijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQRNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;78787878434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! nmnmnmnmjijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQRNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;78787878434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! nmnmnmnmjijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQRQRQQQQNMNMNMNMJIJIJIJIFEFEFEFEDCBABABA@?@?@?@?<;<;<;<;78787878434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! nmnmnmnmjijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUQQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;78787777434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! nmnmnmnmjijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQPOPOPONMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;77878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! nmnmnmnmjijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYXWXWVUVUVUVUPOPOPOPONMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! nmnmnmnmjijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVUPOPOPOPONMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! nmnmnmnmjijijijihghgfefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! nmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! nmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87877777434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"! nmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"! nmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;65656565434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"! nmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?>=>=>=<;<;<;<;65656565434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"! nmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=<;<;<;:965656565434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"! nmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPONMLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"! nmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"! nmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    nmnmnmnmjijijijifefefefedcdcbaba`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    nmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    nmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"!    nmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!      nmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        nmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        nmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        nmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        nmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        + nmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefebabababa`_`_^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmlkjijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        + + + + lklklkkkjijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        + + + + kkklklkljijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        + + + + klklklkljijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        + + + + klklklkljijijijifefefefebabababa^]^]^]^]\[\[ZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        + + + + klklklkljijijijifefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        + + + + klklklkljijihghgfefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        + + + + klklkkkkhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        + + + + kklklklkhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWRQRQQQQQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + lklklklkhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWRQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + lklklklkhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWRQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + lklklklkhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWRQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBA@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + lklklklkhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWRQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + lklkkkkkhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWRQRQRQRQPONMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + klklklklhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYXWXWVUVURQQQQQQRNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:98787876565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + klklklklhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVUQRQRQRQRNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=877777786565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + klklklklhghghghgfefedcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVUQRQRQRQRNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=787878786565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + klklklklhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVUQRQRQRQRNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=787878786565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + klklklklhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVUQRQRQRQRNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=787878786565656521212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + klkkkkkkhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVUQRQRQRQRNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=787878786565656521212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + lklklklkhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVUQQQQQQRQNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=787878784343434321212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + lklklklkhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=<;<;<;777777874343434321212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#    + + + + lklklklkhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;878787874343434321212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#    + + + + lklklklkhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;878787874343434321212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#    + + + + }}~~UUVVWWXX--..//00$$##""!! + + GGFFEEDDoonnmmllYYZZ[[\\11223344 + + CCBBAA@@kkjjiihh]]^^__``55667788 ??>>==<>??@@  77665544__^^]]\\iijjkkllAABBCCDD  + + 33221100[[ZZYYXX~~}}||mmnnooppEEFFGGHH + + //..--,,WWVVUUTT~~}}||{{zzyyxxqqrrssttIIJJKKLL!!""##$$++**))((SSRRQQPP{{zzyyxxwwvvuuttuuvvwwxxMMNNOOPP%%&&''((''&&%%$$OONNMMLLwwvvuuttssrrqqpoyyzz{{||QQRRSSTT))**++,, !"##$$% ##""!! KKJJIIHHssrrqqpp~~}}nmlkkjji}}~~UUVVWWXX--..//00 + + %&&''(() + + GGFFEEDDoonnmmll||{{zzyyihhggffe~~}}YYZZ[[\\11223344 )**++,,-CCBBAA@@kkjjiihhxxwwvvuueddccbba||{{zzyy]]^^__``55667788-..//001??>>==<>??@@5667789: 77665544__^^]]\\llkkjjiizzyyxxwwYXXWWVUTppoonnmmiijjkkllAABBCCDD##$$%%;<==>>?? !! + + 33221100[[ZZYYXXhhggffeevvuuttssSRQQPPOOllkkjjiimmnnooppEEFFGGHH&&''(())@@AABBCC""##$$%%//..--,,WWVVUUTT~~}}||ddccbbaarrqqkkjjNNMMLLKKhhggffeeqqrrssttIIJJKKLL**++,,--DDEEFFGG&&''(())++**))((SSRRQQPP{{zzyyxx``__^^]]iihhggffJJIIHHGGddccbbaauuvvwwxxMMNNOOPP..//0011HHIIJJKK**++,,--''&&%%$$OONNMMLLwwvvuutt\\[[ZZYYeeddccbbFFEEDDCC``__^^]]yyzz{{||QQRRSSTT22334455LLMMNNOO..//0011 ##""!! KKJJIIHHssrrqqppXXWWVVUUaa``__^^BBAA@@??\\[[ZZYY}}~~UUVVWWXX6677==>>PPQQRSTU22334455 + + GGFFEEDDoonnmmllTTSSRRQQ]]\\[[ZZ>>==<;:9XXWWVVUU~~}}YYZZ[[\\??@@AABBVWWXXYYZ66778899CCBBAA@@kkjjiihhPPOONNMMYYXXWWQQ87766554TTSSRRQQ||{{zzyy]]^^__``CCDDEEFFZ[[\\]]^::;;<<==??>>==<>??@@AA;;::9988ccbbaa``HHGGFFEELLKKJJII0//..--,LLKKJJIIttssrrqqeeffgghhKKLLMMNNbccddeefBBCCDDEE 77665544__^^]]\\DDCCBBAAHHGGFFEE,++**))(HHGGFFEEppoonnmmiijjkkllOOPPQQWWfgghhiijFFGGHHII !! + + 33221100[[ZZYYXX@@??>>==DDCCBBAA(''&&%%$DDCCBBAAllkkjjiimmnnooppXXYYZZ[[jkklmnopJJKKLLMM""##$$%%//..--,,WWVVUUTT<<;;::99@@??>>==$##"! @@??>>==hhggffeeqqrrsstt\\]]^^__qqrrssttNNOOPPQQ&&''(())++**))((SSRRQQPP8877665577665544<<;;::99ddccbbaauuvvwwxx``aabbccuuvvwwxxRRSSTTUU**++,,--''&&%%$$OONNMMLL443322113322110088776655``__^^]]yyzz{{||ddeeffggyyzz{{||VVWWXXYY..//0011 ##""!! KKJJIIHH00//..--//..--,,44332211\\[[ZZYY}}~~hhiijjkk}}~~ZZ[[\\]]22334455 + + GGFFEEDD,,++**))++**))((00//..--XXWWVVUU~~}}qqrrsstt^^__``aa66778899CCBBAA@@((''&&%%''&&%%$$ + +,,++**))TTSSRRQQ||{{zzyyuuvvwwxxbbccddee::;;<<==??>>==<<$$##""!!## ((''&&%%PPOONNMMxxwwvvuuyyzz{{||ffgghhii>>??@@AA;;::9988 $$##""!!LLKKJJIIttssrrqq}}~~jjkkllmmBBCCDDEE 77665544 + + HHGGFFEEppoonnmmnnooppqqFFGGHHII !! + + 33221100 DDCCBBAAllkkjjiirrssttuuJJKKLLMM""##$$%%//..--,, @@??>>==hhggffeevvwwxxyyNNOOPPQQ&&''(())++**))(( + + + +<<;;::99ddccbbaazz{{||}}RRSSTTUU**++,,--''&&%%$$ + +  88776655``__^^]]~~VVWWXXYY..//0011 ##""!! + +  + + 44332211\\[[ZZYYZZ[[\\]]22334455 + +  !!""##$$00//..--XXWWVVUU~~}}^^__``aa66778899%%&&''((,,++**))TTSSRRQQ||{{zzyybbccddee::;;<<==jjkkllmm##))**++,,((''&&%%PPOONNMMxxwwvvuuffgghhii>>??@@AAnnooppqq$$%%&&''--..//00$$##""!!LLKKJJIIttssrrqqjjkkllmmBBCCDDEE rrssttuu (())**++11223344 + + HHGGFFEEppoonnmmnnooppqqFFGGHHII !! + + vvwwxxyy!!""##$$,,--..//55667788 DDCCBBAAllkkjjiirrssttuuJJKKLLMM""##$$%%zz{{||}}%%&&''((0011223399::;;<<@@??>>==hhggffeevvwwxxyyNNOOPPQQ&&''(())~~))**++,,44556677==>>??@@<<;;::99ddccbbaazz{{||}}RRSSTTUU**++,,----..//00==>>??@@AABBCCDD 88776655``__^^]]~~VVWWXXYY..//0011 11223344AABBCCDDEEFFGGHH + + 44332211\\[[ZZYY~~}}~~}}||ZZ[[\\]]22334455 + + 55667788EEFFGGHHIIJJKKLL!!""##$$00//..--XXWWVVUU~~}}||{{zzyy{{zzyyxx^^__``aa6677889999::;;<>??@@MMNNOOPPQQRRSSTT))**++,,((''&&%%PPOONNMMxxwwvvuuttssrrqqssrrqqppffgghhii>>??@@AAAABBCCDDQQWWXXYYUUVVWWXX--..//00$$##""!!LLKKJJIIttssrrqqkkjjiihhoonnmmlljjkkllmmBBCCDDEEEEFFGGHHZZ[[\\]]YYZZ[[\\11223344 + + HHGGFFEEppoonnmmggffeeddkkjjiihhnnooppqqFFGGHHII !!IIJJKKLL^^__``aa]]^^__``55667788 DDCCBBAAllkkjjiiccbbaa``ggffeeddrrssttuuJJKKLLMM""##$$%%MMNNOOPPbbccddeeaabbccdd99::;;<<@@??>>==hhggffee__^^]]\\ccbbaa``vvwwxxyyNNOOPPQQ&&''(())QQRRSSTTffgghhiieeffgghh==>>??@@<<;;::99ddccbbaa[[ZZYYXX__^^]]\\zz{{||}}RRSSTTUU**++,,--UUVVWWXXjjkkqqrriijjkkllAABBCCDD 88776655``__^^]]WWQQPPOO[[ZZYYXX~~VVWWXXYY..//0011YYZZ[[\\ssttuuvvmmnnooppEEFFGGHH + + 44332211\\[[ZZYYNNMMLLKKWWVVUUTT~~}}||ZZ[[\\]]22334455]]^^__``wwxxyyzzqqrrssttIIJJKKLL!!""##$$00//..--XXWWVVUUJJIIHHGGSSRRQQPP{{zzyyxx^^__``aa66778899aabbccdd{{||}}~~uuvvwwxxMMNNOOPP%%&&''((,,++**))TTSSRRQQFFEEDDCCOONNMMLLwwvvuuttbbccddee::;;<<==eeffgghhyyzz{{||QQRRSSTT))**++,,((''&&%%PPOONNMMBBAA@@??KKJJIIHHssrrqqppffgghhii>>??@@AAiijjkkll}}~~UUVVWWXX--..//00$$##""!!LLKKJJII>>==7766GGFFEEDDoonnmmlljjkkllmmBBCCDDEEmmnnooppYYZZ[[\\11223344 + + HHGGFFEE55443322CCBBAA@@kkjjiihhnnooppqqFFGGHHII~~qqrrsstt]]^^__``55667788 DDCCBBAA1100//..??>>==<>==--,,++**;;::9988ccbbaa``vvwwxxyyNNOOPPQQyyxxwwvvyyzz{{||eeffgghh==>>??@@<<;;::99))((''&&77665544__^^]]\\zz{{||}}RRSSTTUUuuttssrr}}~~iijjkkllAABBCCDD 88776655%%$$##33221100[[ZZYYXX~~VVWWXXYYqqkkjjiimmnnooppEEFFGGHH + + 44332211//..--,,WWVVUUTT~~}}||ZZ[[\\]]hhggffeeqqrrssttIIJJKKLL!!""##$$00//..--++**))((SSRRQQPP{{zzyyxx^^__``aaddccbbaauuvvwwxxMMNNOOPP%%&&''((,,++**))''&&%%$$OONNMMLLwwvvuuttbbccddee``__^^]]yyzz{{||QQRRSSTT))**++,,((''&&%% ##""!! KKJJIIHHssrrqqppffgghhii\\[[ZZYYXXWWQQPPAA@@??>>bbaa``__wwxxyyzzOOPPQQRR00112233JJKKLLMM,,--..//%%$$##""MMLLKKJJuuttssrr||{{zzyyiijjkkllAABBCCDD  + + 33221100[[ZZYYXX~~OONNMMLL==<;:987^^]]\\[[{{||}}~~SSTTUUVV44556677NNOOPPQQ00112233 + + !! IIHHGGFFqqppoonnxxwwvvuummnnooppEEFFGGHH + + //..--,,WWVVUUTT~~}}||KKJJIIHH76655443ZZYYXXWWWWXXYYZZ==>>??@@RSTUVWWX44556677 EEDDCCBBmmllkkjjttssrrqqqqrrssttIIJJKKLL!!""##$$++**))((SSRRQQPP{{zzyyxxGGFFEEDD3221100/VVUUTTSS~~}}||{{[[\\]]^^AABBCCDDXYYZZ[[\8899::;;AA@@??>>iihhggffponmlkkjuuvvwwxxMMNNOOPP%%&&''((''&&%%$$OONNMMLLwwvvuuttCCBBAA@@/..--,,+RRQQPPOOzzyyxxww__``aabbEEFFGGHH\]]^^__`<<==>>??==<<;;::eeddccbbjiihhggfyyzz{{||QQRRSSTT))**++,, !"##$$% ##""!! KKJJIIHHssrrqqpp??>>==77+**))(('NNMMLLKKvvuuttssccddeeffIIJJKKLL`aabbccd@@AABBCC99887766aa``__^^~~}}||feeddccb}}~~UUVVWWXX--..//00 + + %&&''(() + + GGFFEEDDoonnmmll66554433'&&%%$$#JJIIHHGGrrqqppoogghhiijjMMNNOOPPdeeffgghDDEEFFGG + +55443322]]\\[[ZZ{{zzyyxxbaa``__^~~}}YYZZ[[\\11223344 )**++,,-CCBBAA@@kkjjiihh221100//#"! FFEEDDCCnnmmllkkkkllmmnnQQWWXXYYhiijjkklHHIIJJKK !!""## 1100//..YYXXWWVVwwvvuutt^]]\\[[Z||{{zzyy]]^^__``55667788-..//001??>>==<>==<<;;ffeeddccssttuuvv^^__``aassttuuvvPPQQRRSS(())**++))((''&&QQPPOONNjjiihhggUTSRQQPPttssrrqqeeffgghh==>>??@@5667789: 77665544__^^]]\\wwvvuutt&&%%$$##::998877bbaa``__wwxxyyzzbbccddeewwxxyyzzTTUUVVWW,,--..//%%$$##""MMLLKKJJffeeddccOONNMMLLppoonnmmiijjkkllAABBCCDD##$$%%;<==>>?? !! + + 33221100[[ZZYYXXssrrqqpp 66554433^^]]\\[[{{||}}~~ffgghhii{{||}}~~XXYYZZ[[00112233 + + !! IIHHGGFFbbaa``__KKJJIIHHllkkjjiimmnnooppEEFFGGHH&&''(())@@AABBCC""##$$%%//..--,,WWVVUUTT~~}}||oonnmmll + + 221100//ZZYYXXWWjjkkqqrr\\]]^^__44556677 EEDDCCBB^^]]\\[[GGFFEEDDhhggffeeqqrrssttIIJJKKLL**++,,--DDEEFFGG&&''(())++**))((SSRRQQPP{{zzyyxxkkjjiihh..--,,++VVUUTTSS~~}}||{{ssttuuvv``aabbcc8899::;;AA@@??>>ZZYYXXWWCCBBAA@@ddccbbaauuvvwwxxMMNNOOPP..//0011HHIIJJKK**++,,--''&&%%$$OONNMMLLwwvvuuttggffeedd**))((''RRQQPPOOzzyyxxwwwwxxyyzzddeeffgg<<==>>??==<<;;::QQPPOONN??>>==<;``__^^]]yyzz{{||QQRRSSTT22334455LLMMNNOO..//0011 ##""!! KKJJIIHHssrrqqppccbbaa`` + +&&%%$$##NNMMLLKKvvuuttss{{||}}~~hhiijjkk@@AABBCC99887766MMLLKKJJ:9877665\\[[ZZYY}}~~UUVVWWXX6677==>>PPQQRSTU22334455 + + GGFFEEDDoonnmmll__^^]]\\  + +""!! JJIIHHGGrrqqppoollmmnnooDDEEFFGG + +55443322IIHHGGFF54433221XXWWVVUU~~}}YYZZ[[\\??@@AABBVWWXXYYZ66778899CCBBAA@@kkjjiihh[[ZZYYXX FFEEDDCCnnmmllkkppqqrrssHHIIJJKK !!""## 1100//..EEDDCCBB100//..-TTSSRRQQ||{{zzyy]]^^__``CCDDEEFFZ[[\\]]^::;;<<==??>>==<>-,,++**)PPOONNMMxxwwvvuuaabbccddGGHHIIJJ^__``aab>>??@@AA;;::9988ccbbaa``~~}}||{{SSRRQQPP >>==<<;;ffeeddccxxyyzz{{PPQQRRSS(())**++))((''&&==776655)((''&&%LLKKJJIIttssrrqqeeffgghhKKLLMMNNbccddeefBBCCDDEE 77665544__^^]]\\zzyyxxwwOONNMMLL::998877bbaa``__||}}~~TTUUVVWW,,--..//%%$$##""44332211%$$##"! HHGGFFEEppoonnmmiijjkkllOOPPQQWWfgghhiijFFGGHHII !! + + 33221100[[ZZYYXXvvuuttssKKJJIIHH 66554433^^]]\\[[XXYYZZ[[00112233 + + !! 00//..--DDCCBBAAllkkjjiimmnnooppXXYYZZ[[jkklmnopJJKKLLMM""##$$%%//..--,,WWVVUUTTrrqqkkjjGGFFEEDD !!"" + + 221100//ZZYYXXWW\\]]^^__44556677 ,,++**))@@??>>==hhggffeeqqrrsstt\\]]^^__qqrrssttNNOOPPQQ&&''(())++**))((SSRRQQPPiihhggffCCBBAA@@##$$##$$%%&&..--,,++VVUUTTSS~~}}||{{``aabbcc8899::;;((''&&%%<<;;::99ddccbbaauuvvwwxx``aabbccuuvvwwxxRRSSTTUU**++,,--''&&%%$$OONNMMLLeeddccbb??>>==<<%%&&''((''(())****))((''RRQQPPOOzzyyxxwwddeeffgg<<==>>??$$##88776655``__^^]]yyzz{{||ddeeffggyyzz{{||VVWWXXYY..//0011 ##""!! KKJJIIHHaa``__^^;;::9988))**++,,++,,--..&&%%$$##NNMMLLKKvvuuttsshhiijjkk@@AABBCC 44332211\\[[ZZYY}}~~hhiijjkk}}~~ZZ[[\\]]22334455 + + GGFFEEDD]]\\[[ZZ77665544--..//00//001122 + +""!! JJIIHHGGrrqqppoollmmnnooDDEEFFGG + + + + 00//..--XXWWVVUU~~}}qqrrsstt^^__``aa66778899CCBBAA@@YYXXWWQQ332211001122334433445566 FFEEDDCCnnmmllkkppqqrrssHHIIJJKK !!""## ,,++**))TTSSRRQQ||{{zzyyuuvvwwxxbbccddee::;;<<==??>>==<>??@@AA;;::9988LLKKJJII++**))((>>??@@AA;;<<==>>>>==<<;;ffeeddccxxyyzz{{PPQQRRSS(())**++ + + $$##""!!LLKKJJIIttssrrqq}}~~jjkkllmmBBCCDDEE 77665544HHGGFFEE''&&%%$$BBCCDDEE??@@AABB::998877bbaa``__||}}~~TTUUVVWW,,--..// + + HHGGFFEEppoonnmmnnooppqqFFGGHHII !! + + 33221100DDCCBBAA##""!! FFGGHHIICCDDEEFF 66554433^^]]\\[[~~XXYYZZ[[00112233 + +  DDCCBBAAllkkjjiirrssttuuJJKKLLMM""##$$%%//..--,,@@??>>==JJKKLLMMGGHHIIJJ !!"" + + 221100//ZZYYXXWW~~}}||{{}}||{{zz\\]]^^__44556677  + + @@??>>==hhggffeevvwwxxyyNNOOPPQQ&&''(())++**))((77665544NNOOPPQQKKLLMMNN##$$%%&&..--,,++VVUUTTSS~~}}||{{zzyyxxwwyyxxwwvv``aabbcc8899::;;<<;;::99ddccbbaazz{{||}}RRSSTTUU**++,,--''&&%%$$33221100WWXXYYZZOOPPQQRR''(())****))((''RRQQPPOOzzyyxxwwvvuuttssuuttssrrddeeffgg<<==>>?? 88776655``__^^]]~~VVWWXXYY..//0011 ##""!! //..--,,[[\\]]^^SSTTUUVV++,,--..&&%%$$##NNMMLLKKvvuuttssrrqqkkjjqqppoonnhhiijjkk@@AABBCC + + 44332211\\[[ZZYYZZ[[\\]]22334455 + + ++**))(( __``aabbWWXXYYZZ//001122 + +""!! JJIIHHGGrrqqppooiihhggffmmllkkjjllmmnnooDDEEFFGG!!""##$$00//..--XXWWVVUU~~}}^^__``aa66778899''&&%%$$ + + ccddeeff[[\\]]^^33445566 FFEEDDCCnnmmllkkeeddccbbiihhggffppqqrrssHHIIJJKK !!""####$$%%&&%%&&''((,,++**))TTSSRRQQ||{{zzyybbccddee::;;<<==## + + gghhiijj__``aabb778899::BBAA@@??jjiihhggaa``__^^eeddccbbttuuvvwwLLMMNNOO$$%%&&''''(())**))**++,,((''&&%%PPOONNMMxxwwvvuuffgghhii>>??@@AAkkqqrrssccddeeff;;<<==>>>>==<<;;ffeeddcc]]\\[[ZZaa``__^^xxyyzz{{PPQQRRSS(())**++++,,--..--..//00$$##""!!LLKKJJIIttssrrqqjjkkllmmBBCCDDEE ttuuvvwwgghhiijj??@@AABB::998877bbaa``__YYXXWWQQ]]\\[[ZZ||}}~~TTUUVVWW,,--..////00112211223344 + + HHGGFFEEppoonnmmnnooppqqFFGGHHII !! + + xxyyzz{{kkllmmnnCCDDEEFF 66554433^^]]\\[[PPOONNMMYYXXWWVV~~XXYYZZ[[001122333344556655667788 DDCCBBAAllkkjjiirrssttuuJJKKLLMM""##$$%% ||}}~~ooppqqrrGGHHIIJJ !!"" + + 221100//ZZYYXXWWLLKKJJIIUUTTSSRR}}||{{zz\\]]^^__4455667777==>>??99::;;<<@@??>>==hhggffeevvwwxxyyNNOOPPQQ&&''(()) + + + + !!ssttuuvvKKLLMMNN##$$%%&&..--,,++VVUUTTSSHHGGFFEEQQPPOONNyyxxwwvv``aabbcc8899::;;@@AABBCC==>>??@@<<;;::99ddccbbaazz{{||}}RRSSTTUU**++,,-- ""##$$%%wwxxyyzzOOPPQQRR''(())****))((''RRQQPPOODDCCBBAAMMLLKKJJuuttssrrddeeffgg<<==>>??DDEEFFGGAABBCCDD 88776655``__^^]]~~VVWWXXYY..//0011 &&''(()){{||}}~~SSTTUUVV++,,--..&&%%$$##NNMMLLKK@@??>>==IIHHGGFFqqppoonnhhiijjkk@@AABBCCHHIIJJKKEEFFGGHH + + 44332211\\[[ZZYY~~}}~~}}||ZZ[[\\]]22334455 + + **++,,--WWXXYYZZ//001122 + +""!! JJIIHHGG77665544EEDDCCBBmmllkkjjllmmnnooDDEEFFGGLLMMNNOOIIJJKKLL!!""##$$00//..--XXWWVVUU~~}}||{{zzyy{{zzyyxx^^__``aa66778899..//0011[[\\]]^^33445566 FFEEDDCC33221100AA@@??>>iihhggffppqqrrssHHIIJJKKPPQQWWXXMMNNOOPP%%&&''((,,++**))TTSSRRQQ||{{zzyyxxwwvvuuwwvvuuttbbccddee::;;<<==##22334455__``aabb778899::BBAA@@??//..--,,==<<;;::eeddccbbttuuvvwwLLMMNNOOYYZZ[[\\QQRRSSTT))**++,,((''&&%%PPOONNMMxxwwvvuuttssrrqqssrrqqppffgghhii>>??@@AA$$%%&&''66778899ccddeeff;;<<==>>>>==<<;;++**))((99887766aa``__^^xxyyzz{{PPQQRRSS]]^^__``UUVVWWXX--..//00$$##""!!LLKKJJIIttssrrqqkkjjiihhoonnmmlljjkkllmmBBCCDDEE(())**++::;;<<==gghhiijj??@@AABB::998877''&&%%$$55443322]]\\[[ZZ||}}~~TTUUVVWWaabbccddYYZZ[[\\11223344 + + HHGGFFEEppoonnmmggffeeddkkjjiihhnnooppqqFFGGHHII !!,,--..//>>??@@AAkkllmmnnCCDDEEFF 66554433##1100//..YYXXWWVV~~XXYYZZ[[eeffgghh]]^^__``55667788 DDCCBBAAllkkjjiiccbbaa``ggffeeddrrssttuuJJKKLLMM""##$$%%00112233BBCCDDEEooppqqrrGGHHIIJJ !!"" + + 221100//--,,++**UUTTSSRR}}||{{zz\\]]^^__iijjkkqqaabbccdd99::;;<<@@??>>==hhggffee__^^]]\\ccbbaa``vvwwxxyyNNOOPPQQ&&''(())44556677FFGGHHIIssttuuvvKKLLMMNN##$$%%&&..--,,++))((''&&QQPPOONNyyxxwwvv``aabbccrrssttuueeffgghh==>>??@@<<;;::99ddccbbaa[[ZZYYXX__^^]]\\zz{{||}}RRSSTTUU**++,,--==>>??@@JJKKLLMMwwxxyyzzOOPPQQRR''(())****))((''%%$$##""MMLLKKJJuuttssrrddeeffggvvwwxxyyiijjkkllAABBCCDD 88776655``__^^]]WWQQPPOO[[ZZYYXX~~VVWWXXYY..//0011AABBCCDDNNOOPPQQ{{||}}~~SSTTUUVV++,,--..&&%%$$## !! IIHHGGFFqqppoonnhhiijjkkzz{{||}}mmnnooppEEFFGGHH + + 44332211\\[[ZZYYNNMMLLKKWWVVUUTT~~}}||ZZ[[\\]]22334455EEFFGGHHRRSSTTUUWWXXYYZZ//001122 + +""!!  + + EEDDCCBBmmllkkjjllmmnnoo~~qqrrssttIIJJKKLL!!""##$$00//..--XXWWVVUUJJIIHHGGSSRRQQPP{{zzyyxx^^__``aa66778899IIJJKKLLVVWWXXYY[[\\]]^^33445566 AA@@??>>iihhggffppqqrrssuuvvwwxxMMNNOOPP%%&&''((,,++**))TTSSRRQQFFEEDDCCOONNMMLLwwvvuuttbbccddee::;;<<==MMNNOOPPZZ[[\\]]__``aabb778899::==<<;;::eeddccbbttuuvvwwyyzz{{||QQRRSSTT))**++,,((''&&%%PPOONNMMBBAA@@??KKJJIIHHssrrqqppffgghhii>>??@@AAQQWWXXYY^^__``aaccddeeff;;<<==>> + + 99887766aa``__^^xxyyzz{{}}~~UUVVWWXX--..//00$$##""!!LLKKJJII>>==7766GGFFEEDDoonnmmlljjkkllmmBBCCDDEEZZ[[\\]]bbccddee~~}}||{{gghhiijj??@@AABB  + +55443322]]\\[[ZZ||}}~~YYZZ[[\\11223344 + + HHGGFFEE55443322CCBBAA@@kkjjiihhnnooppqqFFGGHHII^^__``aaffgghhiizzyyxxwwkkllmmnnCCDDEEFF  1100//..YYXXWWVV~~]]^^__``55667788 DDCCBBAA1100//..??>>==<>==--,,++**;;::9988ccbbaa``vvwwxxyyNNOOPPQQffgghhiinnooppqqrrqqponmssttuuvvKKLLMMNN##$$%%&&))((''&&QQPPOONNyyxxwwvveeffgghh==>>??@@<<;;::99))((''&&77665544__^^]]\\zz{{||}}RRSSTTUUjjkkqqrrrrssttuulkkjjiihwwxxyyzzOOPPQQRR''(())** !"#%%$$##""MMLLKKJJuuttssrriijjkkllAABBCCDD 88776655%%$$##33221100[[ZZYYXX~~VVWWXXYYssttuuvvvvwwxxyyhggffeed{{||}}~~SSTTUUVV++,,--.. + +#$$%%&&' + + !! IIHHGGFFqqppoonnmmnnooppEEFFGGHH + + 44332211//..--,,WWVVUUTT~~}}||ZZ[[\\]]wwxxyyzzzz{{||}}dccbbaa`WWXXYYZZ//001122 '(())**+ EEDDCCBBmmllkkjjqqrrssttIIJJKKLL!!""##$$00//..--++**))((SSRRQQPP{{zzyyxx^^__``aa{{||}}~~~~`__^^]]\~~}}||{{[[\\]]^^33445566+,,--../AA@@??>>iihhggffuuvvwwxxMMNNOOPP%%&&''((,,++**))''&&%%$$OONNMMLLwwvvuuttbbccddee\[[ZZYYXzzyyxxww__``aabb778899::/0011223==<<;;::eeddccbbyyzz{{||QQRRSSTT))**++,,((''&&%% ##""!! KKJJIIHHssrrqqppffgghhiiXWWVUTSRvvuuttssccddeeff;;<<==>>3445566799887766aa``__^^}}~~UUVVWWXX--..//00$$##""!! + + GGFFEEDDoonnmmlljjkkllmmQQPPOONNrrqqppoogghhiijj??@@AABB##789:;<== + +55443322]]\\[[ZZYYZZ[[\\11223344 + + CCBBAA@@kkjjiihhnnooppqqMMLLKKJJnnmmllkkkkllmmnnCCDDEEFF$$%%&&''>>??@@AA !!""## 1100//..YYXXWWVV~~]]^^__``55667788 ??>>==<>??@@  77665544__^^]]\\zz{{||}}bdQZ|vpfv`fp˂rH~ftlJp˂rfHfr˂pnXv`drtAJ˂pZpvndrtAJvpfHdrtAH~f~HfpbdQZ|`vXntArdXQJ`ے`vXnZHAbpvnltbHAbےXv`fltb~f`Jlt`vXnvnXdrtAvpf|ZdQbbHAZvpfے`JXQrXQJ`dQZ|`JXQr~HfdQZ|vXnbdQZ|vpfv`f~JltH~ftlJp˂rH~fr˂pAZp˂drtAJ˂pZpvndrtAJvpfHdrtAH~ffvnbdQZ|`vXntArdXQJ`ے`vXnZHAbrXQJltbHAbےXv`fltb~f`Jlt`vXnXv`fdrtAvpf|ZdQbbHAZvpfے`JXQ`ےbdQZ|`JXQr~HfdQZ|vXnrbdQZ|r˂p~HfJltH~ftlJp˂rH~fr˂pHAZp˂dtAJl˂pZpvndrtAJ˂pZdrtA`JXQrpvnbdQZ|`vXntArdXQJ`ے`vXnZHAےrXQJtbnHAbےXv`fltbHAbےJlt˂pZXv`fdrtAvpf|ZdQbbHAZvpf`JXQr`ےbAvpf`JXQr~HfdQZ|`JXQrbdQZ|HAbے~HfJltH~ftlJp˂rH~fbtlZrXHf`˂pZpvndrtAJ˂pZdrtA`JXQrvnXv`bdQZ|`vXntArdXQJ`ے`vXn|ZdQbQJ`ےvXnHAbےXv`fltbHAbےJlt˂pZf~HdrtAr˂p|ZdQbbHAZvpftlJbHAZpvpfH`JXQr~HfdQZ|`JXQrbdQZ|HAXQrfpvJltZHAbtlJp˂rH~ftArd˂rX~f`˂pZpvndrtAJ˂pZdrtA˂pZHAnXv`bdQZ|ے`JXQtArdXQJ`ے`vXn|ZdQbQJ`ےvXnHAbےXv`fltbHAbےJltbے`f~HdrtAr˂p|ZdQbbHAZvpftlJbHAZvpfH`JXQr~HfdQZ|`JXQrbdQZ|JXQrfpvnJltZHAbtlJp˂rH~ftAdQbtrXQJ`~f`˂pZpvndrtAJ˂pZdrtA˂pZHAv`fbdQZ|ے`JXQtArdXQJ`ے`vXnlJtAےbHAvXnHAے`Xv`fltbHAbےJltb˂~HfpdrtAr˂p|ZdQbbHAZvpfrd|Zp˂vpfHJXQrb~HfdQZ|`JXQrbdQZ|pZHAbvnXJltZHAbtlJp˂rH~fZdQbtrXQJ`~f`tlJpvndrtAJ˂pZdrtAے`Jv`fbdQZ|ے`JXQtArdXQJ`ے`vXnlJtAےbHAvXntAd|Xv`fltbHAbےJltXQr˂~HfpdrtAr˂p|ZdQbbHAZvpfrdtZprQvpfHZdQbt~HfdQZ|`JXQrbdQZ|pZHAbvnvJltZHAbnXv`p˂rH~flJtArJ`ے~f`lJtApvndrtAJ˂pZdrtAے`pf~HbdQZ|ے`JXQf~HXQJ`ے`vXnd|ZbHAZpvXnrd|Xv`fltbHAbےJltZHAbfpvdrtAr˂pfpvbHAZvpfdQbt璂rXQvpfHZdQbt~HfdQZ|`JXQrbdQZ|ے`JXQnXv`JltZHAbnXv`p˂rH~flJtArJ`ے~f`lJtApvndrtAJ˂pZdrtAr˂pf~HbdQZ|ے`JXQf~HXQJ`ے`vXnd|lbHAZpvXnrd|Xv`fltbHAbےJltZHAbfpvdrtAr˂pfpvbHAZvpfJtArdrQJvpfHZdQbtHfpdQZ|`JXQrbdQZ|ے`JXQnXvf~JltZHAbnXv`p˂rH~f|ZdQbHAZ~f`lJtAvnrdrtAJ˂pZdrtAHAbےHfpvbdQZ|ے`JXQf~HXQJ`ے`vXnbtlp˂rvXnrd|XQJ`ےltbHAbےJlt`JXQrnXvdrtAr˂pfpvbHAZvpfJtArdXQJ`ےvpfHZdQbtHAZpdQZ|`JXQrbdQZ|˂pZ`f~JltZHAbnXv`p˂rH~f|ZdQbHAZ~f`lJtA˂rXQdrtAJ˂pZdrtAHAbےHfpvbdQZ|ے`JXQf~HbdQZ|`vXntArdp˂rvXnrd|J`ےltbHAbےJlt`JXQrnXvdrtAr˂pfpvdrtAvpf|ZdQbXQJbHvpfHZdQbtbHAZpdQZ|`JXQrbdQZ|ے``frQJltZHAbnXv`JltH~ftlJAZp˂~f`lJtA˂rXQdrtAJ˂pZdrtAJXQrJHAZbdQZ|ے`JXQf~HbdQZ|`vXntArdrXQJ`vXnrd|J`ےltbHAbےJlt˂pZHAp˂rdrtAr˂pfpvdrtAvpf|ZdQbےbHvpfHZdQbtbHAZpdQZ|`JXQrbdQZ|bے`XQJ`ےJltZHAbnXv`JltH~ftd|AZp˂~f`lJtA˂rXQdtAJl˂pZdrtAJXQrbHAZbdQZ|ے`JXQf~HbdQZ|`vXnZdQbtrXQJ`vXnrd|J`ےtbnHAbےJlt˂p|Zp˂rdrtAr˂pfpvdrtAvpflJtAbAZpvpfHZdQbtbHAZpvpf`JXQrbdQZ|dQbtXQJ`ےJltZHAbnXv`JltH~frd|˂rb~f`lJtA˂rXQHf`˂pZ`vXnlJtArbHAZbdQZ|ے`JXQf~HbdQZ|`vXnZdQbtdQZ|vXnrd|J`ےvXnHAbےvpfd|Zp˂rdtAJr˂pfpvdrtAr˂pl|ZdrtAJvpfHZdQbtbHAZpvpfH`JXQrH~fdQbtXQJ`ےltbZHAbnXv`JltZHAbdQbnXltb~f`lJtA˂rXQ~f`˂pZZdQbt`vXnlJtAdQbHAZnvpے`JXQf~HbdQZ|ے`JXQv`pvdQZ|vXnrd|J`ےvXnHAbےlJtAvpfbtlp˂rfHfr˂pfpvdrtAr˂pnXvdrtAJvpfHZdQbtbHAZpvpfH`JXQrrd|H~fJtArdXQJ`ے`vXnZHAbnXv`JltZHAb`f~ltb~f`lJtA˂rXQ~f`˂pZZdQbt`vXn|ZdQbHAZvpfے`JXQf~HbdQZ|ے`JXQHfpvdQZ|vXnrd|J`ےvXnHAے`lJtAvpfbtlp˂rH~fr˂pfpvdrtAr˂pnXvdrtAJvpfHZdQbtbHAZpvpfHJXQrbrd|H~fJtArdXQJ`ے`vXnZHAbnXv`JltZHAb`fltb~f`lJtA˂rXQ~f`tlJZdQbt`vXntlJbHAZvpfے`JXQf~HbdQZ|ے`JXQnXv`dQZ|vXnrrd|J`ےvXntAd|lJtAvpftArdp˂rH~fr˂pfpvdrtAr˂pf~HdrtAJ˂pZZdQbtbHAZpvpfHZdQbtrd|H~f|ZdQbXQJ`ے`vXnZHAےnXv`JltZHAbfpvltbHAbےlJtA˂rXQ~f`lJtAZdQbt`vXntlJbHAZvpf`JXQrf~HbdQZ|ے`JXQnXv`dQZ|`JXQrrd|J`ےvXnrd|lJtAvpftArdp˂rH~fbtlfpvdrtAr˂pf~HdrtAJ˂pZZdQbtbHAZpvpfHZdQbtrd|H~f|lJtAXQJ`ے`vXnJtAdnXv`JltZHAbXv`fltbHAbےlJtA˂rXQ~f`lJtAZdQbt`vXnrd|bHAZvpf|ZdQbf~HbdQZ|ے`JXQ~HfdQZ|`JXQrrd|J`ےvXnrd|lJtAvpfZdQbtp˂rH~ftlJfpvdrtAr˂ppvndrtAJ˂pZZdQbtbHAZpvpfHZdQbtrd|H~flJtAXQJ`ے`vXntArdnXv`JltZHAbXv`fltbHAbےlJtA˂rXQ~f`lJtAZdQbn`vXnrd|bHAZvpf|ZdQbf~HbdQZ|ے`JXQ~HfdQZ|`JXQrrd|J`ےvXnrd|Xv`pvpfZdQtArp˂rH~ftlJfpvdrtAr˂pp`fdrtAJ˂pZZdQbnbHAZpvpfHZdQbtvnXH~fd|ZXQJ`ے`vXntArdnXv`JltZHAb~HfpltbHAbےXv`f˂rXQ~f`lJtAv`f`vXndQbt璐bHAZvpf|ZdQbfHfbdQZ|ے`JXQvnXdQZ|`JXQr~HfJ`ےvXnrd|~HfpvpflJtArp˂rH~ftlJpvndrtAr˂pv`fdrtAJ˂pZpvnbHAZpvpfHZdQbtvnXH~fd|ZXQJ`ے`vXntArdrXQJ`JltZHAb~HfpltbHAbےXv`f˂rXQ~f`lJtAv`f`vXndQbtdbHAZvpf|ZdQbےHAZbdQZ|ے`JXQv~dQZ|`JXQr~HfJ`ےvXnrd|nXvvpf|ZdQp˂rH~ftlJp˂rdrtAr˂pHfpvdrtAJ˂pZpvnbHAZpvpfHZdQbt`f~H~fbtlXQJ`ے`vXntArdXQJ`ےJltZHAbnXvltbHAbےXv`f˂rXQ~f`lJtAHfpv`vXnJtArdbHAZvpf|ZdQbbHAZbdQZ|ے`JXQ`f~dQZ|`JXQr~HfJ`ےvXnrd|nXvvpf|ZdQp˂rH~ftlJp˂rdrtAr˂pHfpvdrtAJ˂pZpvnbHAZpvpfHZdQbt`f~H~fbtlXQJ`ے`vXntArdXQJ`ےJltZHAbnXHltbHAbےXv`f˂rb~f`lJtAHXv``vXn|ZdQbbHAZvpf|ZdQbbHAZbdQZ|ے`JXQfpvdQZ|`JXQr~HfdQZ|vXnrd|f~HvpfnXv`p˂rH~ftlJp˂rdtAJr˂pnXv`drtAJ˂pZpvndrtAJvpfHZdQbtfpvH~ff~fpXQJ`ے`vXntArdXQJ`ےltbZHAbf~HltbHAbےXv`fltb~f`lJtAnXv``vXnvnXbHAZvpf|ZdQbbHAZnvpے`JXQfpvdQZ|`JXQr~HfdQZ|vXnrd|f~Hfp`ftAJlJXQr~Hfp`ےbXnvd|ZrXQJ`vpfH|ZdQ`ےHAtbdQZے`J`f~drtAے`JXQf~HXQJ`ے`vXntArdXQJ`ےJltlJtArXv`fltbHAbےXv`f˂rb~f`vˍpf~HftbQZd˂pZHAvnXHAZp˂pfH~dQbtےbHA~f`btlZp˂|drXQr˂HfpvJltr˂pfpvbHAZvpf|ZdQbbHAZbdQZ|d|ZHfpdQZ|`JXQr~HfdQZ|vXnH~ㅐfpvnrtAJlbے`v`frbdQf`vlJtArXQJ`ےvnvpJtArdrXQJ`tAJlpZHAbnXvbdQZ|ZHAbnXv`p˂rH~ftlJp˂rdtAJdQbtvnrdrtAJ˂pZpvndrtAJvpfH`vXnXv`ftbdJXQr~HfpZ|dXnvd|ZbHAZfH~|ZdQےbHAtbdQZے`J`f~dtbJQrf~HXQJ`ے`vXntArdXQJ`ےltblJtArXQJ`ےltbHAbےXv`fltb~f`vˍpf~HfQZ|d˂pZHAvnXrtAJlpfH~dQbtp˂rf`vXbtlZp˂|drXQr˂HfpvdQZ|pZHAfpvbHAZvpf|ZdQbbHAZnvpZdQbtHAZpdQZ|`JXQr~HfdQZ|vXnH~ㅐfpvrtAJlbے`v`ftbdQf`vlJtArXQJ`ےnvpJtArdrXQJ`tAJlpZHAbnXvdrtAJbے`nXv`p˂rH~ftlJp˂r`vXnlJt˂rXQdrtAJ˂pZpvndrtAJvpfH`vXn~HfptbdJXQr~HfpZ|dXnvd|ZbHAZfH~|ZdQےbHAtbdQZے`J`f~ltbJXQrf~HbdQZ|`vXntArdXQJ`ےvpfArd|J`ےltbHAbےXv`fltb~f`vˍpfvnXQZrtA˂pZHAvnXrtAJlpfH~dQbtp`ےf`vXnbtlZp˂|dtAXQr˂HfpvdQZ|pZHAfpvdrtAvpf|ZdQbbHAZH~fZdQbtbHAZpdQZ|`JXQr~HfdQZ|vXnH~ㅐfv`fJltbے`v`ftbdQf`vlJtArbHAZpvfH~JtArdrXQJ`JltpZHAbnXvdrtAdQbے`JnXv`JltH~ftlJp˂r`vXnlJt˂rXQdrtAJ˂pZpvndrtAJvpfH`vXn~HfpbdQZ|JXQr~HfpZ|dXnvd|Z˂rXQf`v|ZdQےbHAbnvے`J`f~Z|dQrpZf~HbdQZ|`vXntArdXQJ`ےvpfArdZJ`ےltbHAbےXv`fltb~f`vˍpfvnXdrtA˂pZHAvnXrtAJlpfH~dQbtJ`ےXnvbtlZp˂pfHXQr˂HfpvrtAJlHAbےfpvdrtAvpf|ZdQbbHAZHXnQbtlbHAZpdQZ|`JXQr~HfdQZ|vXnےH~ㅐfHfpvJltbے`v`ftbdQf`vlJtArbHAZppfH~JtArdrXQJ`f`vXpZHAbnXvtbdQ`JXQrnXv`JltH~ftlJp˂rvpfHJtArd˂rXQdtAJl˂pZpvndrtAJ`JXQr`vXnnXvbdQZ|JXQr~HfpZ|dXnrd|Z˂bf`v|ZdQےbHAnvpے`J`f~Z|d˂pZf~HbdQZ|`vXntArdXQJ`ے~f`|ZdQJ`ےtbnHAbےXv`fltb˂pZvˍpf`f~AJl˂pZHAvnXrtAJl˂pZHAdQbtHAZp˂XnvbtlZp˂fH~XQr˂HfpvrtAJlHAbےfpvdrtAvpf|ZdQbbHAZvXnbtlbHAZpvpf`JXQr~HfdQZ|HAbےH~ㅐfHfpvtbnbے`v`ftbdQbے`lJtArrXQJf~f`JtArdrXQJ`f`vXpZHAbnXv|dr`JXQrnXv`JltH~ftlJp˂rvpfHJtArd˂rXQHf`˂pZpvndrtAJ`JXQr`vXnnXvvpfHJXQr~HfpZ|dJXQrd|Z`ےbvXn|ZdQےbHAnvpے`J`f~tAJl璂ZHAbf~HbdQZ|`vXntArdXQJ`ے~v|ZQbJ`ےvXnHAbےXv`fltb˂pZvˍpf`pvf`v˂pZHAvnXrtAJl˂pZHAdQbtHAZp˂vpfHbtlZp˂fH~XQr˂HfpvtbdQZے`JXfpvdrtAr˂p|ZdQbbHAZpfH~lJtAbHAZpvpfH`JXQr~HfdQZ|HAXQrH~ㅐfnrXQJXnvbے`v`ftbdQbے`lJtArrXQHA~f`JtArdrXQJ`f`vXpZHAnXv|drQr˂pnXv`JltZHAbtlJp˂rf`vrd|˂rXQ~f`˂pZpvndrtAJ˂pZHA`vXn`p˂pfH~JXQr~HfpZ|dJXQrd|ZZp˂vXn|ZdQےbHAnvpے`JXQ`f~tAJl璑ZHAbf~HbdQZ|ے`JXQtArdXQJ`ےXnvZdQbtJ`ےvXnHAbےXv`fltbbے`vˍpfrXQJ`f`v˂pZHAvnXrtAJl˂pZHAdQbtrXQJ`vpf~btlZp˂fH~rbtHfpvtdrtAے`JXfpvdrtAr˂p|ZdQbbHAZpfH~lJtAbHAZpvpfH`JXQr~HfdQZ|JXQrH~ㅐfےbHAXnvbے`v`ftbdQbے`lJtArےbHAf`vXJtArdrXQJ`f`vXlJtAdnXvJltQrZnXv`JltZHAbtlJp˂rf`prd|˂rXQ~f`˂pZpvndrtAJ˂pZHA`vXnZp˂pfH~JXQr~HfpZ|dJXQrd|ZZp˂nr˂|ZdQےbHAnvp|ZdQ`f~bdQZ|Abے`f~HbdQZ|ے`JXQtArdXQJ`ےfH~ZdQbJJ`ےvXnHAے`Xv`fltbb˂vˍpfrXQJ`f`v˂pZHAvnXrtAJl˂pZHAdQbnXrXQJ`pZHAbbtlZp˂fH~btlHfpvdrtAJXQrfpvdrtAr˂p|ZdQbbHAZf`vXtArdbHAZpvpfHJXQrb~HfdQZ|pZHAbH~ㅐfےrXnvے`Jv`ftbdQbے`v`fp˂rے`JJtArdrXQJ`f`vXJtArdnXvJlt˂pZHAnXv`JltZHAbtlJp˂rnvp|ZdQb˂rXQ~f`tlJpvndrtAJے`J`vXnXQJ`ےpfH~XQrbt~HfpZ|dJXQr~HfpbdQZ|XQr˂|ZdQےbHAnvp|ZdQ`f~bdQtAJbے`f~HbdQZ|ے`JXQtArdXQJ`ےfH~tlJJ`ےvXntAd|Xv`fltbXQr˂vˍpfbHAZf`vlJtAvnXrtAJl˂pZHAvnXltbpZHAbbtlZp˂fH~btlHfpvltbJXQrfpvdrtAr˂p|ZdQbbHAZf`vXtArdbHAZpvpfHZdQbt~HfdQZ|pZHAbH~ㅐfp˂rXnvd|Zv`ftbdQbے`v`fdQZ|ے`JJtArdrXQJ`f`vXJtArdnXvdQZ|˂pZAnXv`JltZHAbnXv`p˂rH~f|ZdQb˂rXQ~f`lJtApvndrtAJے`p`vXnXQJ`ےpfH~dQbt~HfpZ|dJXQr~HfpdrtAJXQr˂|ZdQےbHAnvp|ZdQ`fHdrtAJ`JXQrf~HbdQZ|ے`JXQf~HXQJ`ے`vXntJArdJ`ےvXnrd|Xv`fltbZHAbvˍpfbHAXQf`vlJtArvnXrtAJl˂pZHAvnXltbpZHAbbtlZp˂fH~btlfpvltbbtlfpvdrtAr˂pfpvbHAZvpf|ZdbHAZpvpfHZdQbt~HfdQZ|ے`JXQH~ㅐfJ`ےXnvd|Zv`ftbdQbے`v`fdQZ|ے`JJtArdrXQJ`f`vXJtArdnrXQJdQZ|lJtAdnXv`JltZHAbnXv`p˂rH~fQbtl˂rXQ~f`lJtApvndrtAJr˂p`vXnbHAZppfH~dQbt~HfpZ|dJXQr~HfpdtbdQXQr˂|ZdQےbHAnvp|ZdQ`ےHAtbn|ZdQbf~HbdQZ|ے`JXQf~HXQJ`ے`vXnJtArdJ`ےvXnrd|Xv`fltbZHAbvˍpf˂rXQf`vlJtArvnXrtAJl˂pZHAvnXZ|dpZHAbbnXvZp˂fH~btlZp˂vp`tlJfpvdrtAr˂pfpvbHAZf`|ZdbHAZpvpfHZdQbtHfpdQZ|ے`JXQH~ㅐfJ`ےXnvd|Zv`ftbdQbے`v`frtAJlے`J`f~rXQJ`f`vXJtArdrXQJ`vXntArdnXv`JltZHAbnXv`p˂rvXnQbtl˂rXQ~f`lJtAvnrdrtAJHAbے`vXnbHAZppfH~dQbtHfpvZ|dJXQr~HfptbdQXQr˂HfpvےbHAnvp|ZdQےbHAvpfH|ZdQbf~HbdQZ|ے`JXQf~HXQJ`ےvpfHJAr|J`ےvXnrd|XQJ`ےltb`JXQrvˍpf`ےbf`vlJtArnrXQrtAJl˂pZHAvnXZ|dpZHAbnXvZp˂fH~btlZp˂~f`tlJfpvdrtAr˂pfpvbHAZ~f`ZdQbnbHAZpvpfHZdQbtHAZpdQZ|˂pZH~ㅐfHAZp˂Xnvd|ZJ`ےtbdQbے`v`frtAdQZے`J`f~rXQJ`f`vXJtArdrXQJ`vXntArdnXv`JltZHAbnXv`p˂rvXnXv`f˂rXQ~f`lJtA˂rXQdrtAJHAbے`vXnrXQJpfH~dQbtHAZp˂Z|dJXQr~Hfp|drXQr˂HfpvےbHAnvp|ZdQےbHAvpfH|ZdQbfHfbdQZ|ے`JXQf~HbdQZ|vp`v~HfJ`ےvXnrd|J`ےltb`JXQrvˍp|`ےbf`vlJtArrXQJrtAJl˂pZHAvnXtAJlpZHAbnXvZp˂fH~btlZp˂XnvtlJpvndrtAr˂pfpvdrtAXnrpvnbHAZpvpfHZdQbtbHAZpdQZ|ے`drQtHAZp˂Xnvd|Z`ےbtbdQbے`v`ftbdQZے`J`f~rXQJ`f`vXJtArdrXQJ`pfH~tArdrXQJ`JltZHAbnXv`Jlt˂p`JXv`f˂rXQ~f`lJtA˂rXQdrtAJJXQrJltbHApfH~dQbtHAZp˂Z|dJXQr~Hfp|drXQr˂HfpvےbHAnvp|ZdQےbHAf`v|ZdQbےHAZbdQZ|ے`JXQf~HbdQZ|XQr˂~HfJ`ےvXnrd|J`ےltb˂pZHAbAdZ|Zp˂f`vlJtArrXQJrtAJl˂pZHAvnXtAJl|pZHAbnXvZp˂fH~btlZp˂XnvtlJp˂rdrtAr˂pfpvdrtApZHAbpvnbHAZpvpfHZdQbtbHAZpdQZ|bے`drQtrXQJ`Xnvd|Z`ےbtbdQbے`v`fdrtAے`J`f~rbdQZf`vXJtArdrXQJ`pfH~tArdXQJ`ےJltZHAbnXv`Jltے`JXv`f˂rXQ~f`lJtA˂rXQdtAJlJXQrJltےbHApfH~dQbtHAZp˂Z|dJXQr~HfpJltXQr˂Hfpv|drnvp|ZdQےbHAvp|ZdQbbHAZbdQZ|ے`JXQf~HbdQZ|XQr˂~HfJ`ےvXnrd|J`ےtbn˂p`ZbAdZ|Zp˂f`vlJtArrXQJtAJl˂pZHAvnXbdQZ|pZHAbnXvtAJlfH~btlZp˂fH~tlJp˂rdrtAr˂pfpvdrtApZHAXQpvnbHAZpvpfHZdQbtbHAZpvpfQXb㉀ۂdrQtrXQHAZXnvd|Z`ےbtbnbے`v`fdrtAے`J`f~tbdQZf`vXJtArdrXQJ`f`vXtArdXQJ`ےJltZHAbnXv`Jltr˂pXv`f˂rb~f`lJtA˂rXQHf`pJAHrJltp˂rpfH~dQbtHAZp˂vpfHJXQr~HfpJltXQr˂Hfpv|drnvp|ZdQےbHAnvp|ZdQbbHAZbdQZ|ے`JXQf~HbdQZ|ZHAb~HfdQZ|vXnrd|J`ےvXnˁ`ZbAdZ|XQJ`ےf`vlJtArrXQJf`v˂pZHAvnXdrtAJpZHAbnXvtAJlfH~btlZp˂fH~tlJp˂rdtAJr˂pfpvdrtAے`JXQpvndrtAJvpfHZdQbtbHAZpvpfHQXb㉀ۂdrQtbHAZXnvd|Z`ےbXnvbے`v`fltbے`J`f~tbdQZf`vXJtArdrXQJ`f`pftArdXQJ`ےltbZHAbnXv`Jltr˂pXv`fltb~f`lJtA˂rXQ~f`pJAHQXJltp˂rpfH~dQbtHAZp˂pfH~JXQr~HfpdQZ|XQr˂Hfpv|drnvp|ZdQےbHAH~f|ZdQbbHAZnvpے`JXQf~HbdQZ|ZHAb~HfdQZ|vXnrd|J`ےvXnb㉀ۑpbAdZ|XQJ`pf`vlJtArrXQJf`v˂pZHAvnXdrtAJpZHAbnXvtAJlfH~btlZp˂`vXntlJp˂rfHfr˂pfpvdrtA˂pZpvndrtAJvpfHZdQbtbHAZpvpfHJAHr󙐂drQt˂rbXnvd|Z`ےbXnvbے`v`fltbے`J`f~tbdQZf`vXJtArdrXQJ`vpftArdXQJ`ے`vXnZHAbnXv`JltHAbےXv`fltb~f`lJtA˂rXQ~f`ˁ`ZQXJltdQZ|pfH~dQbtHAZp˂pfH~JXQr~HfpdQtAJlXQr˂Hfpv|drnr˂|ZdQےbHAH~f|ZdQbbHAZvpfے`JXQf~HbdQZ|`JXQr~HfdQZ|vXnrd|J`ےvXnb㉀ۑpbAdZ|rAJltf`vlJtArrXQJf`v˂pZHAvnXtbdQpZHAbnXvtAJlpZHAbbtlZp˂`vXHtlJp˂rH~fr˂pfpvdrtA˂pZpvndrtAJvpfHZdQbtbHAZpvpfHJAHr󙐂drQtbdQZ|Xnvd|Z`ےbXnvے`Jv`fZ|dے`J`f~tbdQZے`JJtArdrXQJ`~f`tArdXQJ`ے`vXnZHAbnXv`JltHAbےXv`fltb~f`lJtA˂rXQ~f`ۑpJJltdrtpfH~dQbtHAZp˂pfH~XQrbt~HfprtAJlXQr˂Hfpv|drXQr˂|ZdQےbHAvXn|ZdQbbHAZvpfے`JXQf~HbdQZ|`pZHA~HfdQZ|vXnrrd|J`ےvXnAHr󙐂bAdZ|AJltf`vlJtArrXQJf`vlJtAvnXtbdQpZHAbnXvtAJlpZHAbbtlZp˂vpfHtlJp˂rH~fr˂pfpvdrtAbے`pvndrtAJ˂pZZdQbtbHAZpvpfH`ZQXbdrQtbdQZ|Xnrd|Z`ےbXnvd|Zv`fZ|l璐ے`J`f~tbdQZے`JJtArdrXQJ`~f`tArdXQJ`ے`vXnZHAےnXv`JltJXQrXv`fltbHAbےlJtA˂rXQ~f`ۑpJJltdrAJ˂pZHAdQbtHAZp˂pfH~dQbt~HfptbnXQr˂Hfpv|drXQr˂|ZdQےbHAvXn|ZdQbbHAZvpf`JXQrf~HbdQZ|˂pZHA~HfdQZ|`JXQrrd|J`ےvXnAHr󙐂bAdZ|tbdQbے`lJtArrXQJf`vlJtArvnXvpffpZHAbnXvtAJlpZHAbbtlZp˂f`vtlJp˂rH~fbtlfpvdrtAbے`pvndrtAJ˂pZZdQbtbHAZpvpfH`pJAHdrQtZ|dJXQrd|Z`ےbXnvd|Zv`f`vXnے`J`f~tbdQZے`JJtArdrXQJ`XnvtArdXQJ`ے`vXnJtAdnXv`JltJXQHAbXv`fltbHAbےlJtA˂rXQ~f`r󙐂ˁ`JltrtAJl˂pZHAdQbtHAZp˂pfH~dQbt~HfpvpfXQr˂Hfpv|drXQr˂|ZdQےbHApfH~|ZdQbbHAZvpf|ZdQbf~HbdQZ|ے`J~HfdQZ|`JXQrrd|J`ےvXnZQXb㉀bAdZ|tbdQbے`lJtArrXQJf`vlJtArvnXH~fpZHAnXvtAJlpZHAbbnXvZp˂f`vtlJp˂rH~ftlJfpvdrtAXQr˂pvndrtAJ˂pZZdQbtbHAZpvpfHۑpJAHdrQtZ|dJXQrd|Z`ےbXnvd|Zv`f`vXnے`JXQ`f~tbdQZے`J`f~rXQJ`XnvtArdXQJ`ے`vXntArdnXv`JltpZHAbXv`fltbHAbےlJtA˂rXQ~f`r󙐂ˁ`JltrtAJ˂pZHAdQbtHAZp˂pfH~dQbtHfpvvpfrbtHfpv|drXQr˂HfpvےbHAp`vX|ZdQbbHAZvpf|ZdQbf~HbdQZ|ے`J~HfdQZ|`JXQrrd|J`ےvXnZQXAHrbAdZ|bdQZ|bے`lJtArrXQJf`vlJtArnrXQH~fvXlJtAdnXvtAJlpZHAbnXvZp˂nr˂tlJp˂rH~ftlJfpvdrtAXQrpvndrtAJ˂pZZdQbnbHAZpvpfHˁ`ZdrQtdrtAJXQrd|Z`ےbXnvd|ZJ`p˂nvp|ZdQ`f~tbdQZے`J`f~rXQJ`pZAb`tArdXQJ`ے`vXntArdnXv`Jltے`JXQXv`fltbHAbےXv`f˂rXQ~f`QXb㉀JltJlt˂pZHAdQbnXHAZp˂pfH~dQbt璀rXQJfH~btlHfpv|drXQr˂HfpvےbHAJXQr|ZdQbbHAZvpf|ZdQbfHfbdQZ|r˂p~HfdQZ|`JXQr~HfJ`ےvXnpJAHrbAdZ|bdQZ|bے`v`frXQJf`vlJtAr`ےbf`vXJtArdnXvtAJlpZHAbnXvZp˂˂pZHtlJp˂rH~ftlJpvndrtAZHAbpvndrtAJ˂pZpvnbHAZpvpfHˁ`ZdrQtdrtAJXQr~Hfp`ےbXnvd|ZHAZp˂nvp|ZdQ`f~tbdQZے`J`f~rXQJ`Abے`tArdXQJ`ے`vXntArdrXQJ`Jltے`JXQXv`fltbHAbےXv`f˂rXQ~f`QXb㉀JltJlbQZ˂pZHAvnXHAZp˂pfH~dQbt璀rXQJfH~btlHfpv|drXQr˂HfpvےbHAJXQr|ZdQbbHAZvpf|ZdQbےHAZbdQZ|r˂p~HfdQZ|`JXQr~HfJ`ےvXnˁ`ZQXbAdZ||drbے`v`frXQJf`vlJtAr`ےfvnJtArdnXvtAJlpZHAbnXvZp˂˂pZHnXv`p˂rH~ftlJp˂rdrtA`JXQrpvndrtAJ˂pZpvnbHAZpvpfHb㉀ۑpdrQttAJlJXQr~Hfp`ےbXnvd|ZrXQJ`vpfH|ZdQ`fHtbdQZے`J`f~rbdQZAbJXQf~HXQJ`ے`vXntArdXQJ`ےJltbtlXv`fltbHAbےXv`f˂rXQ~f`JAHrJlttbdQZ˂pZHAvnXHAZp˂pfH~dQbtےbHA~f`btlfpv|drXQr˂Hfpv|ltr˂pfpvbHAZvpf|ZdQbbHAZbdQZ|JA|Z~HfdQZ|`JXQr~HfJ`ےvXnˁ`ZQXbAdZ||drbے`v`frXQJf`vlJtArZp˂vXnJtArdnrXQJtAJlpZHAbnXvbdQZ|ZHAbnXv`p˂rH~ftlJp˂rdrtAdQbtpvndrtAJ˂pZpvnbHAZpvpfHb㉀XndrQt------------------------------------------................................ \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv38_3.dat b/vendor/endroid/qr-code/assets/data/qrv38_3.dat new file mode 100644 index 000000000..48fce797b --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv38_3.dat @@ -0,0 +1,337 @@ +~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa~}~}~}|{zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa|{|{|{|{zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa|{|{|{|{zyzyzyzyxwxwxwvutstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa|{|{|{|{zyzyzyzyvuvuvuvutstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa|{|{|{|{zyzyzyzyvuvuvuvutstststsrqrqrqponmnmnmnmjijijijihghghghgdcdcdcdcbabababa|{|{|{|{zyzyzyzyvuvuvuvutstststspopopoponmnmnmnmjijijijihghghghgdcdcdcdcbabababa|{|{|{|{zyzyzyzyvuvuvuvutstststspopopoponmnmnmnmjijijijihghghghgdcdcdcdcbabababa|{|{|{|{zyzyzyzyvuvuvuvutstststspopopoponmnmnmnmjijijijihghgfefedcdcdcdcbabababa|{|{|{|{zyzyzyzyvuvuvuvutstststspopopoponmnmnmnmjijijijifefefefedcdcdcdcbabababa|{|{|{|{zyzyzyzyvuvuvuvutstststspopopoponmnmnmlkjijijijifefefefedcdcdcdcbaba`_`_|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopolklklkkkjijijijifefefefedcdcdcdc`_`_`_`_|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopokkklklkljijijijifefefefedcdcdcdc`_`_`_`_|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopoklklklkljijijijifefefefedcdcdcdc`_`_`_`_|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopoklklklkljijijijifefefefedcdcdcdc`_`_`_`_|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopoklklklkljijijijifefefefedcdcdcdc`_`_`_`_|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopoklklklkljijijijifefefefedcdcdcdc`_`_`_`_|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopoklklkkkkjijijijifefefefedcdcdcdc`_`_`_`_|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopokklklklkjijijijifefefefedcdcdcdc`_`_`_`_|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopolklklklkjijijijifefefefedcdcdcdc`_`_`_`_|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopolklklklkjijijijifefefefedcdcdcdc`_`_`_`_~}|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopolklklklkjijijijifefefefedcdcdcdc`_`_`_`_~}~}~}~}|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopolklklklkjijijijifefefefedcdcdcdc`_`_`_`_~}~}~}~}|{|{|{|{zyzyzyxwvuvuvuvutstststspopopopolklkkkkkjijijijifefefefedcdcdcdc`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvutstststspopopopoklklklkljijijijifefefefedcdcdcdc`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvutststsrqpopopopoklklklkljijijijifefefefedcdcdcdc`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopoklklklkljijijijifefefefedcdcdcdc`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopoklklklkljijijijifefefefedcdcdcdc`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopoklklklkljijihghgfefefefedcdcdcdc`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopoklkkkkkkhghghghgfefefefedcdcdcdc`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopolklklklkhghghghgfefefefedcdcbaba`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopolklklklkhghghghgfefefefebabababa`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopolklklklkhghghghgfefefefebabababa`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopolklklklkhghghghgfefefefebabababa`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopolklklklkhghghghgfefefefebabababa`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopolkkkkkklhghghghgfefefefebabababa`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopoklklklklhghghghgfefefefebabababa`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopoklklklklhghghghgfefefefebabababa`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopoklklklklhghghghgfefefefebabababa`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqponmnmnmklklklklhghghghgfefefefebabababa`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmklklklklhghghghgfefefefebabababa`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmkkkkkklkhghghghgfefefefebabababa`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefebabababa`_`_`_`_~}~}~}~}|{|{|{zyxwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefebabababa`_`_`_`_~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefebabababa`_`_`_`_^]^]^]^]~}~}~}~}zyzyzyzyxwxwxwxwvuvuvutsrqrqrqrqnmnmnmnmlklklklkhghghghgfefefefebabababa`_`_`_`_^]^]^]^]~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmlklklklkhghghghgfefefefebabababa`_`_`_`_^]^]^]^]~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmkkkklklkhghghghgfefefefebabababa`_`_`_`_^]^]^]^]~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmlklkjijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgfefedcdcbabababa`_`_`_`_^]^]^]^]~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_^]^]^]^]^]^]~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa^]^]^]^]^]^]^]^]~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa^]^]^]^]^]^]^]^]~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa^]^]^]^]^]^]^]^]~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa^]^]^]^]^]^]^]^]~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSQRQRQRQRNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;7878787865656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        ^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSQRQRQRQRNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;7878787865656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        ^]^]^]^]\[\[ZYZYXWXWXWXWTSTSTSTSQRQRQRQRNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;7878787865656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSQRQRQQQQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;7777778765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSQQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSRQPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMLKJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEDCDCDCBABABABA@?@?@?@?<;<;<;<;7777787865656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?@?@?@?<;<;<;<;7878787865656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA@?>=>=>=<;<;<;<;7878787865656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;7878787865656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;7878787865656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;7878787743434343212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;7777878743434343212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787774343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;777878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + ^]^]\[\[ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + \[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + \[\[\[\[ZYZYZYZYXWXWVUVUTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;:9787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        + + + + \[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:9787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + \[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:9787877774343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!   + + + + \[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPONMLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:9778787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + + \[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + + \[\[\[\[ZYZYZYZYVUVUVUVUTSTSRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGFEFEFEDCDCDCDCBABABABA>=>=>=>=:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + + \[\[\[\[ZYZYZYZYVUVUVUVURQRQQQQQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA>=>=>=>=:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + + \[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBA@?@?@?>=>=>=>=:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + + \[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:9878777774343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + + \[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:9878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + + \[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:9656565654343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + + \[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:9656565654343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + + \[\[\[\[ZYZYZYZYVUVUVUVURQQQQQQRPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + + \[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQRPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"! + + + + \[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQRPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"! + + + + \[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQRPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%"!"!"!"! + + + + \[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQRPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + \[\[\[\[ZYZYZYZYVUVUVUVUQRQRQRQRPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + \[\[\[\[ZYZYZYZYVUVUVUVUQQQQQQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + \[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + \[\[\[\[ZYZYXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + \[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + \[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"! + + + + \[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQPONMNMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + \[\[\[\[XWXWXWXWVUVUVUVUQQQQQRQRNMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + \[\[\[\[XWXWXWXWVUVUVUVUQRQRQRQRNMNMNMNMLKLKLKLKJIHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    \[\[\[\[XWXWXWXWVUVUVUVUQRQRQRQRNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    \[\[\[\[XWXWXWXWVUVUVUVUQRQRQRQRNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCBABABA@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    \[\[\[\[XWXWXWXWVUVUVUVUQRQRQRQRNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    \[\[\[\[XWXWXWXWVUVUVUVUQRQRQRQQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?>=<;<;<;:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!      \[\[\[\[XWXWXWXWVUVUVUVUQQQQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#        \[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#        \[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#        \[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#        \[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:987878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#        \[\[\[\[XWXWXWXWTSTSTSTSRQRQRQQQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;8777777865656565212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('$#$#$#$#        \[\[\[\[XWXWXWXWTSTSTSTSQQQRQRQRNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;7878787865656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        \[\[\[\[XWXWXWXWTSTSTSTSQRQRQRQRNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;7878787865656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        aabbccddAABBCCDDDDCCBBAA]]^^__``TTSSRRQQ``aabbcc@@AABBCC ggffeedd::;;<<==wwvvuutt__``aabb''(())**221100//ooppqqrreeffgghhEEFFGGHH@@??>>==aabbccdd + + PPOONNMMddeeffggDDEEFFGG + + ccbbaa``>>??@@AAssrrqqppccddeeff++,,--....--,,++ssttuuvviijjkkllIIJJKKLL <<;;::99eeffgghh LLKKJJIIhhiijjkkHHIIJJKK__^^]]\\BBCCDDEEoonnmmllgghhiijj//001122**))((''wwxxyyzzmmnnooppMMNNOOPP!!""##$$88776655iijjkkllHHGGFFEEqqrrssttLLMMNNOO[[ZZYYXXFFGGHHIIkkjjiihhkkqqrrss33445566&&%%$$##~~}}||{{{{||}}~~qqrrssttQQWWXXYY%%&&''((44332211mmnnooppDDCCBBAAuuvvwwxxPPQQRSTUWWVVUUTTJJKKLLMM ggffeeddttuuvvww778899::""!! zzyyxxwwuuvvwwxxZZ[[\\]]))**++,,00//..--qqrrsstt@@??>>==yyzz{{||VWWXXYYZ SSRRQQPPNNOOPPQQ + + ccbbaa``xxyyzz{{;;<<==>>vvuuttssyyzz{{||^^__``aa--..//00,,++**))uuvvwwxx <<;;::99}}~~Z[[\\]]^ + + OONNMMLLRRSSTTUU__^^]]\\||}}~~??@@AABBrrqqppoo}}~~bbccddee11223344((''&&%%~~}}yyzz{{||!!""##$$88776655^__``aabKKJJIIHHVVWWXXYY[[ZZYYXXCCDDEEFFnnmmllkkffgghhii55667788$$##""!!||{{zzyy}}~~%%&&''((44332211bccddeefGGFFEEDDZZ[[\\]]WWVVUUTTGGHHIIJJjjiihhggjjkkqqrr99::;;<< xxwwvvuu))**++,,00//..--fgghhiijCCBBAA@@^^__``aa SSRRQQPPKKLLMMNN ffeeddcc~~}}ssttuuvv==>>??@@ttssrrqq--..//00,,++**))jkklmnop??>>==<>??@@ttssrrqq}}~~**++,,--//..--,,rrssttuu??>>==<<__``aabb + +RRQQPPOOllkkjjiiQQRRSSTT``__^^]]AABBCCDDppoonnmm..//0011++**))((vvwwxxyy !!;;::9988ccddeeff NNMMLLKKhhggffeeUUVVWWXX\\[[ZZYYEEFFGGHHllkkjjii22334455''&&%%$$~~}}||zz{{||}}""##$$%%77665544gghhiijjJJIIHHGGddccbbaaYYZZ[[\\XXWWVVUUIIJJKKLL hhggffee66778899##""!! {{zzyyxx~~&&''(())33221100~~kkllmmnnFFEEDDCC``__^^]]]]^^__``TTSSRRQQMMNNOOPP + + ddccbbaa::;;<<==wwvvuutt**++,,--//..--,,}}||{{zzooppqqrrBBAA@@??\\[[ZZYYaabbccdd + + PPOONNMMQQRRSSTT``__^^]]>>??@@AAssrrqqpp..//0011++**))((yyxxwwvvssttuuvv>>==<<;;XXWWVVUUeeffgghh LLKKJJIIUUVVWWXX\\[[ZZYYBBCCDDEEoonnmmll22334455''&&%%$$uuttssrrwwxxyyzz !!""::998877TTSSRRQQiijjkkllHHGGFFEEYYZZ[[\\XXWWVVUUFFGGHHIIkkjjiihh66778899##""!! qqkkjjii{{||}}~~##$$%%&&66554433PPOONNMMmmnnooppDDCCBBAA]]^^__``TTSSRRQQ~~}}JJKKLLMM ggffeedd::;;<<==hhggffee''(())**221100//LLKKJJIIqqrrsstt@@??>>==aabbccdd + + PPOONNMM||{{zzyyNNOOPPQQ + + ccbbaa``>>??@@AAddccbbaa++,,--....--,,++HHGGFFEEuuvvwwxx <<;;::99eeffgghh LLKKJJIIxxwwvvuuRRSSTTUU__^^]]\\BBCCDDEE``__^^]]~~}}||{{//001122**))((''DDCCBBAAyyzz{{||!!""##$$88776655iijjkkllHHGGFFEEttssrrqqVVWWXXYY[[ZZYYXXFFGGHHII\\[[ZZYYzzyyxxww33445566&&%%$$##~~}}||{{@@??>>==~~}}||{{}}~~%%&&''((44332211mmnnooppDDCCBBAAkkjjiihhZZ[[\\]]WWVVUUTTJJKKLLMM XXWWQQPPvvuuttss778899::""!! zzyyxxww<<;;::99zzyyxxww))**++,,00//..--qqrrsstt@@??>>==ggffeedd^^__``aa SSRRQQPPNNOOPPQQ + + OONNMMLLrrqqponm;;<<==>>vvuuttss88776655vvuuttss--..//00,,++**))uuvvwwxx <<;;::99ccbbaa``bbccddee + + OONNMMLLRRSSTTUUKKJJIIHHlkkjjiih??@@AABBrrqqppoo44332211rrqqkkjj11223344((''&&%%~~}}yyzz{{||!!""##$$88776655__^^]]\\ffgghhiiKKJJIIHHVVWWXXYYGGFFEEDDhggffeedCCDDEEFFnnmmllkk00//..--iihhggff~~}}||55667788$$##""!!||{{zzyy}}~~%%&&''((44332211[[ZZYYXXjjkkllmmGGFFEEDDZZ[[\\]]CCBBAA@@dccbbaa`GGHHIIJJjjiihhgg,,++**))eeddccbb{{zzyyxx99::;;<< xxwwvvuu))**++,,00//..--WWQQPPOOnnooppqqCCBBAA@@^^__``aa ??>>==77`__^^]]\KKLLMMNN ffeeddcc((''&&%%aa``__^^wwvvuutt==>>??@@ttssrrqq--..//00,,++**))NNMMLLKKrrssttuu??>>==<>??@@>>==7766wwvvuutt**++,,--//..--,,rrssttuu&&%%$$##IIHHGGFF__``aabb + +RRQQPPOOHHGGFFEEa``__^^]QQRRSSTT``__^^]]AABBCCDD55443322ssrrqqpp..//0011++**))((vvwwxxyy !!EEDDCCBBccddeeff NNMMLLKK DDCCBBAA]\\[[ZZYUUVVWWXX\\[[ZZYYEEFFGGHH1100//..oonnmmll22334455''&&%%$$~~}}||zz{{||}}""##$$%%AA@@??>>gghhiijjJJIIHHGG + + @@??>>==YXXWWVUTYYZZ[[\\XXWWVVUUIIJJKKLL --,,++**kkjjiihh66778899##""!! {{zzyyxx~~&&''(())==<;:987kkllmmnnFFEEDDCC + + 77665544SRQQPPOO]]^^__``TTSSRRQQMMNNOOPP + + ))((''&&ggffeedd::;;<<==wwvvuutt**++,,--76655443ooppqqrrBBAA@@?? 33221100NNMMLLKKaabbccdd + + PPOONNMMQQRRSSTT%%$$##ccbbaa``>>??@@AAssrrqqpp..//0011 + +3221100/ssttuuvv>>==<<;;//..--,,JJIIHHGGeeffgghh LLKKJJIIUUVVWWXX__^^]]\\BBCCDDEEoonnmmll22334455 /..--,,+wwxxyyzz !!""::998877++**))((FFEEDDCCiijjkkllHHGGFFEEYYZZ[[\\[[ZZYYXXFFGGHHIIkkjjiihh66778899+**))(('~~}}||{{{{||}}~~##$$%%&&66554433''&&%%$$BBAA@@??mmnnooppDDCCBBAA]]^^__`` + + WWVVUUTTJJKKLLMM ggffeedd::;;<<== + + '&&%%$$#zzyyxxww''(())**221100// ##>>==<;:9qqrrsstt@@??>>==aabbccdd  SSRRQQPPNNOOPPQQ + + ccbbaa``>>??@@AA #"! vvuuttss++,,--....--,,++!!""##$$87766554uuvvwwxx <<;;::99eeffgghh + + OONNMMLLRRSSTTUU__^^]]\\BBCCDDEErrqqppoo//001122**))((''%%&&''((43322110~~}}yyzz{{||!!""##$$88776655iijjkkllKKJJIIHHVVWWXXYY[[ZZYYXXFFGGHHIInnmmllkk33445566&&%%$$##))**++,,0//..--,||{{zzyy}}~~%%&&''((44332211mmnnooppGGFFEEDDZZ[[\\]]WWVVUUTTJJKKLLMMjjiihhgg778899::""!! --..//00 ,++**))(xxwwvvuu))**++,,00//..--qqrrsstt##$$%% + +CCBBAA@@^^__``aa SSRRQQPPNNOOPPQQ##$$ ffeeddcc;;<<==>>11223344 + + + +(''&&%%$ttssrrqq--..//00,,++**))uuvvwwxx&&''(()) ??>>==<>??@@hhggffee99::;;<< xxwwvvuu2233445533221100nnooppqqCCBBAA@@^^__``aa11223344VVUUTTSSKKLLMMNN ++,,--..AABBCCDDddccbbaa==>>??@@ttssrrqq6677==>>//..--,,rrssttuu??>>==<>??@@AA NNMMLLKKSSTTUUVV33445566IIJJKKLL$$%%&&'' + +\\[[ZZYYEEFFGGHHllkkjjiiCCDDEEFF%&&''(()''&&%%$$~~}}||zz{{||}}""##$$%%77665544jjkkllmmBBCCDDEEJJIIHHGGWWXXYYZZ778899::MMNNOOPP(())**++ XXWWVVUUIIJJKKLL hhggffeeGGHHIIJJ)**++,,-##""!! {{zzyyxx~~&&''(())33221100nnooppqqFFGGHHIIFFEEDDCC[[\\]]^^;;<<==>>QQRRSSTT,,--..//TTSSRRQQMMNNOOPP + + ddccbbaaKKLLMMNN-..//001wwvvuutt**++,,--//..--,,rrssttuuJJKKLLMMBBAA@@??__``aabb + +??@@AABBUUVVWWXX00112233 + + PPOONNMMQQRRSSTT``__^^]]OOPPQQWW12233445ssrrqqpp..//0011++**))((vvwwxxyyNNOOPPQQ>>==<<;;ccddeeff CCDDEEFFYYZZ[[\\44556677 LLKKJJIIUUVVWWXX\\[[ZZYYXXYYZZ[[5667789:oonnmmll22334455''&&%%$$~~}}||zz{{||}}WWXXYYZZ !!""::998877gghhiijjGGHHIIJJ]]^^__``==>>??@@HHGGFFEEYYZZ[[\\XXWWVVUU\\]]^^__;<==>>??kkjjiihh66778899##""!! {{zzyyxx~~[[\\]]^^##$$%%&&66554433kkllmmnnKKLLMMNNOOPPQQRR + + bbaa``__<<==>>??uuttssrr,,--..//--,,++**{{zzyyxxqqrrsstt@@??>>==aabbccdd + + PPOONNMM||{{zzyyNNOOPPQQ + + ccbbaa``>>??@@AAaa``__^^kkjjiihhSSTTUUVV^^]]\\[[@@AABBCCqqppoonn00112233))((''&&wwvvuuttuuvvwwxx <<;;::99eeffgghh LLKKJJIIxxwwvvuuRRSSTTUU__^^]]\\BBCCDDEE]]\\[[ZZggffeeddWWXXYYZZZZYYXXWWDDEEFFGGmmllkkjj44556677%%$$##""ssrrqqkkyyzz{{||!!""##$$88776655iijjkkllHHGGFFEEttssrrqqVVWWXXYY[[ZZYYXXFFGGHHIIYYXXWWQQccbbaa``[[\\]]^^VVUUTTSSHHIIJJKKiihhggff8899::;;!! jjiihhgg}}~~%%&&''((44332211mmnnooppDDCCBBAAkkjjiihhZZ[[\\]]WWVVUUTTJJKKLLMM PPOONNMM__^^]]\\__``aabb + +RRQQPPOO~~}}||{{LLMMNNOO + +eeddccbb<<==>>??ffeeddcc))**++,,00//..--qqrrsstt@@??>>==ggffeedd^^__``aa SSRRQQPPNNOOPPQQ + + LLKKJJII[[ZZYYXXccddeeff NNMMLLKKzzyyxxwwPPQQRRSS aa``__^^@@AABBCCbbaa``__~~}}--..//00,,++**))uuvvwwxx <<;;::99ccbbaa``bbccddee + + OONNMMLLRRSSTTUUHHGGFFEEWWVVUUTTgghhiijjJJIIHHGGvvuuttssTTUUVVWW]]\\[[ZZDDEEFFGG^^]]\\[[||{{zzyy11223344((''&&%%~~}}yyzz{{||!!""##$$88776655__^^]]\\ffgghhiiKKJJIIHHVVWWXXYYDDCCBBAASSRRQQPPkkllmmnnFFEEDDCCrrqqkkjjXXYYZZ[[YYXXWWVVHHIIJJKKZZYYXXWWxxwwvvuu55667788$$##""!!||{{zzyy}}~~%%&&''((44332211[[ZZYYXXjjkkllmmGGFFEEDDZZ[[\\]]@@??>>==OONNMMLLooppqqrrBBAA@@??iihhggff\\]]^^__UUTTSSRRLLMMNNOO + +QQPPOONNttssrrqq99::;;<< xxwwvvuu))**++,,00//..--WWQQPPOOnnooppqqCCBBAA@@^^__``aa 77665544KKJJIIHHssttuuvv>>==<<;;eeddccbb``aabbcc + + QQPPOONNPPQQRRSS MMLLKKJJponmlkkj==>>??@@ttssrrqq--..//00,,++**))NNMMLLKKrrssttuu??>>==<>==<<''(())**221100//YYXXWWQQllmmnnooEEDDCCBB\\]]^^__AA@@??>>baa``__^IIJJKKLL hhggffee99::;;<< BBAA@@??{{zzyyxx~~&&''(())33221100nnooppqq''&&%%$$;;::9988++,,--....--,,++PPOONNMMppqqrrssAA@@??>>``aabbcc + + ==776655^]]\\[[ZMMNNOOPP + + ddccbbaa==>>??@@>>==7766wwvvuutt**++,,--//..--,,rrssttuu##77665544//001122**))((''LLKKJJIIttuuvvww==<<;;::ddeeffgg 44332211ZYYXXWWVQQRRSSTT``__^^]]AABBCCDD55443322ssrrqqpp..//0011++**))((vvwwxxyy !!3322110033445566&&%%$$##HHGGFFEE~~xxyyzz{{ !!""##99887766hhiijjkk00//..--UTSRQQPPUUVVWWXX\\[[ZZYYEEFFGGHH1100//..oonnmmll22334455''&&%%$$~~}}||zz{{||}}""##$$%%//..--,,778899::""!! DDCCBBAA}}||{{zz||}}~~$$%%&&''55443322llmmnnoo,,++**))OONNMMLLYYZZ[[\\XXWWVVUUIIJJKKLL --,,++**kkjjiihh66778899##""!! {{zzyyxx~~&&''(())++**))((;;<<==>>@@??>>==yyxxwwvv(())**++1100//..ppqqrrss((''&&%%KKJJIIHH]]^^__``TTSSRRQQMMNNOOPP + + ))((''&&ggffeedd::;;<<==wwvvuutt**++,,-- ''&&%%$$??@@AABB77665544uuttssrr,,--..//--,,++**ttuuvvww$$##GGFFEEDDaabbccdd + + PPOONNMMQQRRSSTT%%$$##ccbbaa``>>??@@AAssrrqqpp..//0011 + + + +##""!! CCDDEEFF33221100qqppoonn00112233))((''&&~~xxyyzz{{ !!""##CCBBAA@@eeffgghh LLKKJJIIUUVVWWXX__^^]]\\BBCCDDEEoonnmmll22334455 GGHHIIJJ//..--,,mmllkkjj44556677%%$$##""}}||{{zz||}}~~$$%%&&''??>>==<;iijjkkllHHGGFFEEYYZZ[[\\[[ZZYYXXFFGGHHIIkkjjiihh66778899KKLLMMNN ++**))((iihhggff8899::;;!! yyxxwwvv(())**++:9877665mmnnooppDDCCBBAA]]^^__`` + + WWVVUUTTJJKKLLMM ggffeedd::;;<<==OOPPQQRR + + ''&&%%$$eeddccbb<<==>>??uuttssrr,,--..// 54433221qqrrsstt@@??>>==aabbccdd  SSRRQQPPNNOOPPQQ + + ccbbaa``>>??@@AASSTTUUVV##aa``__^^@@AABBCCqqppoonn00112233 + + 100//..-uuvvwwxx <<;;::99eeffgghh + + OONNMMLLRRSSTTUU__^^]]\\BBCCDDEE## WWXXYYZZ]]\\[[ZZDDEEFFGGmmllkkjj44556677-,,++**)~~}}yyzz{{||!!""##$$88776655iijjkkllKKJJIIHHVVWWXXYY[[ZZYYXXFFGGHHII$$%%&&'' + + [[\\]]^^ + +YYXXWWVVHHIIJJKKiihhggff8899::;; )((''&&%||{{zzyy}}~~%%&&''((44332211mmnnooppGGFFEEDDZZ[[\\]]WWVVUUTTJJKKLLMM(())**++ + + __``aabb UUTTSSRRLLMMNNOO + +eeddccbb<<==>>?? + + %$$##"! xxwwvvuu))**++,,00//..--qqrrsstt##$$%% + +CCBBAA@@^^__``aa SSRRQQPPNNOOPPQQ,,--..//ccddeeff QQPPOONNPPQQRRSS aa``__^^@@AABBCCttssrrqq--..//00,,++**))uuvvwwxx&&''(()) ??>>==<>??@@ooppqqrr##EEDDCCBB\\]]^^__UUTTSSRRLLMMNNOOhhggffee99::;;<< xxwwvvuu2233445533221100nnooppqqCCBBAA@@^^__``aaAABBCCDD !!ssttuuvv$$%%&&'' + + AA@@??>>``aabbcc + + QQPPOONNPPQQRRSS##$$%%&& ddccbbaa==>>??@@ttssrrqq6677==>>//..--,,rrssttuu??>>==<>``aabbcc33445566TTSSRRQQMMNNOOPP + + ddccbbaaKKLLMMNN-..//001wwvvuutt**++,,--//..--,,rrssttuuZZ[[\\]]22334455rrqqppoo==>>??@@ !"#--,,++**ttuuvvww==<<;;::ddeeffgg77==>>?? + + PPOONNMMQQRRSSTT``__^^]]OOPPQQWW12233445ssrrqqpp..//0011++**))((vvwwxxyy^^__``aa66778899nnmmllkkAABBCCDD#$$%%&&'))((''&&~~xxyyzz{{ !!""##99887766hhiijjkk@@AABBCC LLKKJJIIUUVVWWXX\\[[ZZYYXXYYZZ[[5667789:oonnmmll22334455''&&%%$$~~}}||zz{{||}}bbccddee::;;<<==jjiihhggEEFFGGHH'(())**+%%$$##""}}||{{zz||}}~~$$%%&&''55443322llmmnnooDDEEFFGGHHGGFFEEYYZZ[[\\XXWWVVUU\\]]^^__;<==>>??kkjjiihh66778899##""!! {{zzyyxx~~ffgghhii>>??@@AAffeeddccIIJJKKLL+,,--../!! yyxxwwvv(())**++1100//..ppqqrrssHHIIJJKKDDCCBBAA]]^^__``TTSSRRQQ``aabbcc@@AABBCC ggffeedd::;;<<==wwvvuuttjjkkqqrrBBCCDDEEbbaa``__MMNNOOPP/0011223uuttssrr,,--..//--,,++**ttuuvvwwLLMMNNOO@@??>>==aabbccdd + + PPOONNMMddeeffggDDEEFFGG + + ccbbaa``>>??@@AAssrrqqppssttuuvvFFGGHHII^^]]\\[[QQWWXXYY34455667qqppoonn00112233))((''&&~~xxyyzz{{PPQQWWXX <<;;::99eeffgghh LLKKJJIIhhiijjkkHHIIJJKK__^^]]\\BBCCDDEEoonnmmllwwxxyyzzJJKKLLMMZZYYXXWWZZ[[\\]]789:;<==mmllkkjj44556677%%$$##""}}||{{zz||}}~~YYZZ[[\\!!""##$$88776655iijjkkllHHGGFFEEqqrrssttLLMMNNOO[[ZZYYXXFFGGHHIIkkjjiihh{{||}}~~NNOOPPQQVVUUTTSS^^__``aa>>??@@AAiihhggff8899::;;!! yyxxwwvv]]^^__``%%&&''((44332211mmnnooppDDCCBBAAuuvvwwxxPPQQRSTUWWVVUUTTJJKKLLMM ggffeeddRRSSTTUURRQQPPOObbccddeeBBCCDDEE + +eeddccbb<<==>>??uuttssrraabbccdd))**++,,00//..--qqrrsstt@@??>>==yyzz{{||VWWXXYYZ SSRRQQPPNNOOPPQQ + + ccbbaa``VVWWXXYYNNMMLLKKffgghhiiFFGGHHII aa``__^^@@AABBCCqqppoonneeffgghh--..//00,,++**))uuvvwwxx <<;;::99}}~~Z[[\\]]^ + + OONNMMLLRRSSTTUU__^^]]\\ZZ[[\\]]JJIIHHGGjjkkqqrrJJKKLLMM]]\\[[ZZDDEEFFGGmmllkkjjiijjkkqq11223344((''&&%%~~}}yyzz{{||!!""##$$88776655^__``aabKKJJIIHHVVWWXXYY[[ZZYYXX^^__``aaFFEEDDCCssttuuvvNNOOPPQQYYXXWWVVHHIIJJKKiihhggffrrssttuu55667788$$##""!!||{{zzyy}}~~%%&&''((44332211bccddeefGGFFEEDDZZ[[\\]]WWVVUUTTbbccddeeBBAA@@??wwxxyyzzRSTUVWWXUUTTSSRRLLMMNNOO + +eeddccbbvvwwxxyy99::;;<< xxwwvvuu))**++,,00//..--fgghhiijCCBBAA@@^^__``aa SSRRQQPPffgghhii>>==<<;;{{||}}~~XYYZZ[[\ + + QQPPOONNPPQQRRSS aa``__^^zz{{||}}==>>??@@ttssrrqq--..//00,,++**))jkklmnop??>>==<>``aabbcc + + QQPPOONNMMNNOOPP + + ddccbbaa==>>??@@ttssrrqq}}~~**++,,--//..--,,rrssttuu??>>==<>]]^^__``TTSSRRQQMMNNOOPP + + ddccbbaa::;;<<==wwvvuutt**++,,--//..--,,zzyyxxww~~}}||rrqqppoo,,--..//--,,++**ttuuvvww==<<;;::aabbccdd + + PPOONNMMQQRRSSTT``__^^]]>>??@@AAssrrqqpp..//0011++**))((vvuuttss{{zzyyxxnnmmllkk00112233))((''&&~~xxyyzz{{ !!""##99887766eeffgghh LLKKJJIIUUVVWWXX\\[[ZZYYBBCCDDEEoonnmmll22334455''&&%%$$rrqqkkjjwwvvuuttjjiihhgg44556677%%$$##""}}||{{zz||}}~~$$%%&&''55443322iijjkkllHHGGFFEEYYZZ[[\\XXWWVVUUFFGGHHIIkkjjiihh66778899##""!! iihhggffssrrqqpp ffeeddcc8899::;;!! yyxxwwvv(())**++1100//..~~}}||mmnnooppDDCCBBAA]]^^__``TTSSRRQQ~~}}JJKKLLMM ggffeedd::;;<<==eeddccbboonnmmllbdQZ|vpftArdp˂rdrtAr˂p|ZdQbےHAZbdQZ|`vXnbtlےbHAltbHAbےlJtA˂rXQdrtAJ˂pZZdQbtrXQJpfH~JXQr~Hfp`ےbdrtAH~f|ZdQbXQJ`ےJltZHAbtlJp˂rdrtAr˂pJtArdZp˂dQZ|`JXQrrd|J`ےltbHAbےlJtA`ےbf`v˂pZHAvnXHAZp˂Jlt`vXntlJbHAZbdQZ|ے`JXQtArdXQJ`ےJltZHAb|ZdQrXQJ`dtAJl˂pZZdQbtbHAZpdQZ|`JXQrrd|HAZp˂Xnvbے`v`frXQJbdQZ|vpftArdp˂rdrtAr˂p|ZdQbbHAZbdQZ|ے`JXQtArdےbHAtbnHAbےlJtA˂rXQdrtAJ˂pZZdQbtbHApfH~JXQr~Hfp`ےbdrtAH~f|lJtAXQJ`ےJltZHAbtlJp˂rdrtAr˂p|ZdQbZprQvpf`JXQrrd|J`ےltbHAbےlJtAZp˂f`v˂pZHAvnXHAZp˂Jlt`vXnrd|bHAZbdQZ|ے`JXQtArdXQJ`ےJltZHAbtlJJ`ےHf`˂pZZdQbnbHAZpdQZ|`JXQrrd|rXQJ`Xnvbے`v`frXQJbdQZ|vpfZdQbtp˂rdrtAr˂p|ZdQbbHAZbdQZ|ے`JXQtArdbHAZpvXnHAbےXv`f˂rXQdtAJl˂pZZdQbtےbHApfH~JXQr~Hfp`ےbdrtAH~flJtAXQJ`ےJltZHAbtlJp˂rdrtAr˂p|ZdQbrXQvpfH`JXQr~HfJ`ےtbnHAbےlJtAZp˂f`v˂pZHAvnXHAZp˂Jlt`vXnrd|bHAZbdQZ|ے`JXQtArdXQJ`ےJltZHAbtd|J`ے~f`˂pZpvnbHAZpvpf`JXQrrd|rXQHAZXnvbے`v`frXQJbdQZ|vpfZdQtArp˂rdrtAr˂p|ZdQbbHAZbdQZ|ے`JXQZdQbtbHAZpvXnHAbےXv`f˂rXQHf`˂pZZdQbnp˂rpfH~JXQr~Hfp`ےbdrtAH~fd|ZXQJ`ےJltZHAbtlJp˂rdrtAr˂plJtArQJvpfH`JXQr~HfJ`ےvXnHAbےXv`pXQJ`ےf`v˂pZHAvnXHAZp˂Jlt`vXndQbt璐bHAZbdQZ|ے`JXQtArdXQJ`ےJltZHAbrd|bHAZ~f`˂pZpvnbHAZpvpfH`JXQrvnXbHAZXnvے`Jv`frXQJbdQZ|vpflJtArp˂rdrtAr˂p|ZdQbbHAZbdQZ|ے`JXQZdQbtp˂rvXnHAbےXv`f˂rXQ~f`˂pZv`fp˂rpfH~XQrbt~Hfp`ےbdrtAH~fd|ZXQJ`ےJltZHAbtlJp˂rdrtAr˂pl|ZXQJ`ےvpfH`JXQr~HfJ`ےvXnHAbے~HfpXQJ`pf`vlJtAvnXHAZp˂Jlt`vXndQbtdbHAZbdQZ|ے`JXQtArdXQJ`ےJltZHAbdQbnXbHAZ~f`˂pZpvnbHAZpvpfH`JXQrvnX˂rbXnvd|Zv`frbdQbdQZ|vpf|ZdQp˂rdtAJr˂p|ZdQbbHAZbdQZ|ے`JXQv`pvp˂rvXnHAbےXv`f˂rXQ~f`˂pZv`fdQZ|pfH~dQbt~HfpZ|ddrtAH~fbtlXQJ`ےltbZHAbtlJp˂rdrtAr˂pnXvXQJbHvpfH`JXQr~HfJ`ےvXnHAbےnXvrAJltf`vlJtArvnXrtAJlJlt`vXnJtArdbHAZnvpے`JXQtArdXQJ`ےJltZHAb`f~AZp˂~f`˂pZpvnbHAZpvpfH`JXQr`f~bdQZ|Xnvd|Zv`ftbdQbdQZ|r˂p|ZdQp˂rfHfr˂p|ZdQbbHAZbdQZ|ے`JXQHfpvrXQJ`vXnHAbےXv`f˂rXQ~f`˂pZHfpvdrtpfH~dQbt~HfpZ|ddrtA`JXQrbtlXQJ`ے`vXnZHAbnXv`p˂rdtAJr˂pnXvےbHvpfH`JXQr~HfJ`ےvXnHAbےnXvAJltf`vlJtArvnXrtAJlJlt˂pZ|ZdQbbHAZvpfے`JXQf~HXQJ`ےltbZHAb`fAZp˂~f`˂pZpvnbHAZpvpfH`JXQr`f~bdQZ|Xnvd|Zv`ftbdQbdQZ|HAbےnXv`p˂rH~fr˂pfpvbHAZnvpے`JXQnXv`rXQJ`vXnHAbےXv`f˂rXQ~f`˂pZHXv`drAJpfH~dQbt~HfpZ|ddrtA`JXQrf~fpXQJ`ے`vXnZHAbnXv`p˂rfHfr˂pf~HbAZpvpfH`JXQr~HfJ`ےvXnHAbےf~HtbdQf`vlJtArvnXrtAJlJlt˂pZvnXbHAZvpfے`JXQf~HXQJ`ے`vXnZHAbfpv˂rb~f`˂pZpvnbHAZpvpfH`JXQrfpvZ|dXnvd|Zv`ftbdQbdQZ|HAXQrv`fp˂rH~fr˂pfpvbHAZvpfے`JXQnXv`dQZ|vXnHAے`Xv`f˂rXQ~f`˂pZnXv`rtAJlpfH~dQbt~HfpZ|ddrtA˂pZHA~HfpXQJ`ے`vXnZHAbnXv`p˂rH~fr˂pf~HdrtAJvpfHJXQrb~HfJ`ےvXnHAbےf~HtbdQf`vlJtArvnXrtAJlJltbے`vnXbHAZvpfے`JXQf~HXQJ`ے`vXnZHAbXv`fltb~f`tlJpvnbHAZpvpfH`JXQrfp`fZ|dXnvd|Zv`ftbdQbdQZ|JXQrv`f~p˂rH~fr˂pfpvbHAZvpfے`JXQ~HfdQZ|vXntAd|Xv`f˂rb~f`˂pZ~HfrtAJpfH~dQbt~HfpZ|ddrtA˂pZHAfvnXQJ`ے`vXnZHAbnXv`p˂rH~fr˂ppvndrtAJvpfHZdQbt~HfdQZ|vXnHAے`pvnbdQZ|f`vlJtArvnXrtAJlJltb˂Xv`fbHAZvpfے`JXQf~HXQJ`ے`vXnZHAbXv`fltb~f`lJtApvndrtAJvpfHJXQrbXv`fdrtAXnvd|Zv`ftbdQbdQZ|pZHAb~Hfp˂rH~fr˂pfpvbHAZvpfے`JXQ~HfdQZ|vXnrd|Xv`fltb~f`tlJ~HfJltpfH~dQbt~HfpZ|ddrtAے`JpvnXQJ`ے`vXnZHAbnXv`p˂rH~fr˂pp`fdrtAJvpfHZdQbt~HfdQZ|vXntAd|pvbdQZ|f`vlJtArvnXrtAJlJltXQr˂Xv`fbHAZvpfے`JXQf~HXQJ`ے`vXnZHAb~Hfpltb~f`lJtApvndrtAJvpfHZdQbt~HfpdrtAXnrd|Zv`ftbdQbdQZ|pZHAb~Hfp˂rH~fr˂pfpvbHAZvpfے`JXQvnXdQZ|vXnrd|Xv`fltb~f`lJtAvnXJlbQZ˂pZHAdQbtHfpvZ|ddrtAے`pvnXv`XQJ`ے`vXnZHAbnXv`p˂rH~fr˂pv`fdrtAJvpfHZdQbt~HfdQZ|vXnrd|v`f|drbے`lJtArnrXQrtAJlJltZHAbf~HbHAZvpfے`JXQf~HXQJ`ے`vXnZHAb~Hfpltb~f`lJtApvndrtAJvpfHZdQbt~HfptAJlJXQrd|ZJ`ےtbdQbdQZ|ے`JXQfpvp˂rH~fr˂pfpvbHAZvpfے`JXQv~dQZ|vXnrd|Xv`fltb~f`lJtAvnXtbdQZ˂pZHAdQbtHAZp˂Z|ddrtAr˂pnXv`bdQZ|`vXnZHAےnXv`p˂rH~fr˂pHfpvdrtAJvpfHZdQbt~HfdQZ|vXnrd|Hfpv|drbے`lJtArrXQJrtAJlJltZHAbf~HdrtAvpf`JXQrf~HXQJ`ے`vXnZHAbnXvltb~f`lJtApvndrtAJvpfHZdQbtnXvtAJlJXQrd|Z`ےbtbdQbdQZ|ے`JXQfpvnJltH~fbtlfpvbHAZvpfے`JXQ`f~dQZ|vXnrd|Xv`fltb~f`lJtA`f~tbQZd˂pZHAdQbtHAZp˂Z|d`vXnHAbےv`fbdQZ|`vXnJtAdnXv`p˂rH~fr˂pHfpvdrtAJvpfHZdQbt~HfdQZ|vXnrd|HfpvrtAJlbے`lJtArrXQJrtAJlvpf`JXQr~HfpdrtAvpf|ZdQbf~HbdQZ|`vXnZHAےnXHltb~f`lJtApvndrtAJvpfHZdQbtnXvtbdJXQrd|Z`ےbtbdQH~f˂pZvnXJltH~ftlJfpvdrtAvpf`JXQrfpvdQZ|vXnrd|Xv`fltb~f`lJtA`pvQZ|d˂pZHAdQbtHAZp˂Z|d`vXnHAbےv`fbdQZ|`vXntArdnXv`JltH~fbtlnXv`drtAJvpfHZdQbt~HfdQZ|vXnrd|nrXQJrtAJlbے`lJtArrXQJrtAJlvpf`JXQr~HfpdrtAvpf|ZdQbf~HbdQZ|`vXn|ZdQbf~Hltb~f`lJtApvndrtAJvpfHZdQbt`p˂tbdJXQrd|Z`ےbtbdQH~fے`vnvJltH~ftlJfpvdrtAvpftlJfpvdQZ|vXnrrd|Xv`fltb~f`lJtArXQJ`QZrtA˂pZHAdQbtHAZp˂Z|d`vXnJXQrf~HbdQZ|`vXntArdnXv`JltH~ftArdnXv`drtAJ˂pZZdQbtHfpdQZ|vXnrd|ےbHAJltbے`lJtArrXQJrtAJlvpf˂pZHAfpvdrtAvpf|ZdQbf~HbdQZ|`vXn|ZdQbpvnltbHAbےlJtAvnrdrtAJvpfHZdQbtZp˂bdQZ|JXQrd|Z`ےbtbdQH~fbے`nXv`JltH~ftlJfpvdrtAvpftlJrXQJ`dQZ|`JXQrrd|XQJ`ےltb~f`lJtArXQJ`drtA˂pZHAdQbtHAZp˂Z|dXnv`vXnJXQrf~HbdQZ|`vXntArdnXv`JltH~ftAdQbtAZp˂drtAJ˂pZZdQbtHAZpdQZ|vXnrrd|ےrJltbے`lJtArrXQJrtAJlpfH~vpf˂p|ZfpvdrtAvpf|ZdQbf~HbdQZ|`vXnlJtArXQJltbHAbےlJtA˂rXQdrtAJ˂pZZdQbtXQJ`ےbdQZ|JXQrd|Z`ےbtbdQf`vH~fdQbtnXvf~JltH~ftlJfpvdrtAvpfrd|`ےbdQZ|`JXQrrd|J`ےltbHAbےlJtAbHAZAJl˂pZHAdQbtHAZp˂Z|dXnv`vXnlJtArHfpvbdQZ|`vXntArdnXv`JltH~fZdQbtHAZp˂drtAJ˂pZZdQbtbHAZpdQZ|`JXQrrd|p˂rtbnbے`lJtArrXQJrtAJlpfH~vpfd|ZnXvdrtAvpf|ZdQbf~HbdQZ|`vXnlJtArXQJltbHAbےlJtA˂rXQdrtAJ˂pZZdQbtXQJ`ےvpfHJXQrd|Z`ےbtbdQf`vH~fdQbt`f~JltH~ftlJfpvdrtAvpfrdt`ےbAdQZ|`JXQrrd|J`ےltbHAbےlJtAbHAXQf`v˂pZHAdQbnXHAZp˂Z|dXnv`vXnlJtAdQHfpvbdQZ|`vXntArdnXv`JltH~flJtArZrXdrtAJ˂pZZdQbtbHAZpdQZ|`JXQrrd|J`ےXnvbے`v`frXQJtAJlpfH~vpfbtlnXvdrtAvpf|ZdQbf~HbdQZ|`vXnd|ZQJ`ےltbHAbےlJtA˂rXQdrtAJ˂pZZdQbtbHAZppfH~JXQr~Hfp`ےbtbnf`vH~fJtArd`frQJltH~ftlJfpvdrtAvpfdQbt璙bHAZpdQZ|`JXQrrd|J`ےltbHAbےlJtA˂rXQf`v˂pZHAvnXHAZp˂vpfHXnv`vXn|ZdQJHAZbdQZ|`vXntArdnXv`JltH~flJtAr˂rXdrtAJ˂pZZdQbtbHAZpdQZ|`JXQrrd|J`ےXnvbے`v`frXQJf`vpfH~vpfbtlp˂rdrtAr˂p|ZdQbfHfbdQZ|`vXnd|lQJ`ےltbHAbےlJtA˂rXQdrtAJ˂pZZdQbtbHAZppfH~JXQr~Hfp`ےbXnvf`vH~fJtArdXQJ`ےJltZHAbtlJpvndrtAvpfJtArdbHAZdQZ|`JXQrrd|J`ےltbHAbےlJtA`ےbf`v˂pZHAvnXHAZp˂pfH~Xnv`vXntlJbHAZbdQZ|ے`JXQtArdrXQJ`JltH~f|ZdQrXQJ`drtAJ˂pZZdQbtbHAZpdQZ|`JXQrrd|HAZp˂Xnvbے`v`frXQJf`vpfH~f`v˂pZHAvnXltbvpfHbtlHfpv|drnvp|ZdQ`f~ltbAbے`tArdXQJ`ےJltZHAbtlJp˂rdrtAے`JXQZdQbnbHAZpdQZ|`JXQrrd|J`ےltbXQr˂vˍpfXnvے`Jv`fdQZ|~f`JtArdnXvtAJlfH~btlHfpvdQZ|JXQr|ZdQbbHAZbdQZ|ے`JXQtArdXQJ`ےJltr˂pXv`f˂rXQdtAJl˂pZZdQbtbHAZpdQZ|pZHAbH~ㅐfpfH~XQrbt~HfpdtbdQvXn|ZdQ`f~tbdQZf`vXJtArdnXvdrtAdQ˂pZHtlJp˂rdrtAr˂p|ZdQbbHAZbdQZ|ZHAb~HfJ`ےtbnHAbےlJtA˂rXQdrtAJے`p`vXnf`vlJtAvnXZ|dvpf~btlHfpv|drnvp|ZdQ`f~Z|dAbJXQtArdXQJ`ےJltZHAbtlJp˂rdrtA˂pZpvnbHAZpvpf`JXQrrd|J`ےltbZHAbvˍpfXnvd|Zv`frtAJlf`vXJtArdnXvtAJlfH~btlHfpvrtAJlr˂p|ZdQbbHAZbdQZ|ے`JXQtArdXQJ`ےJltHAbےXv`f˂rXQHf`˂pZZdQbnbHAZpdQZ|ے`JXQH~ㅐfpfH~dQbt~HfptbdQnr˂|ZdQ`fHtbdQZf`vXJtArdnXvtbdQZHAbtlJp˂rdrtAr˂p|ZdQbbHAZbdQZ|`JXQr~HfJ`ےvXnHAbےXv`f˂rXQdtAJlr˂p`vXnf`vlJtArvnXZ|dpZHAbbtlfpv|drnvp|ZdQ`f~Z|dے`JXQtArdXQJ`ےJltZHAbtlJp˂rdrtA˂pZpvnbHAZpvpfH`JXQr~HfJ`ےtbnZHAbvˍpfXnvd|Zv`frtAdQZے`JJtArdnrXQJtAJlfH~btlHfpvrtAJlr˂p|ZdQbbHAZbdQZ|ے`JXQtArdXQJ`ےJltHAbےXv`f˂rXQ~f`˂pZpvnbHAZpvpfے`JXQH~ㅐfpfH~dQbt~Hfp|drXQr˂|ZdQ`ےHAtbdQZf`vXJtArdnXv|drZHAbtlJp˂rdrtAr˂p|ZdQbbHAZbdQZ|`pZHA~HfJ`ےvXnHAbےXv`f˂rXQHf`HAbے`vXnf`vlJtArvnXtAJlpZHAbbtlZp˂|drnr˂|ZdQ`fHtAJl璒JQrtArdXQJ`ےJltZHAbtlJp˂rdrtAbے`pvnbHAZpvpfH`JXQr~HfJ`ےvXn`JXQrvˍpfXnvd|Zv`ftbdQZے`JJtArdrXQJ`tAJlpZHAbbtlfpvtbdQZpZHA|ZdQbbHAZbdQZ|ے`JXQtArdXQJ`ےJltJXQrXv`f˂rXQ~f`˂pZpvnbHAZpvpfH˂pZH~ㅐfpfH~dQbt~Hfp|drXQr˂|ZdQےbHAtbdQZے`JJtArdnrXQJ|drbے`tlJp˂rdrtAr˂p|ZdQbbHAZbdQZ|˂pZHA~HfJ`ےvXnHAbےXv`f˂rXQ~f`HAbے`vXnf`vlJtArvnXtAJl|pZHAbbtlZp˂|drXQr˂|ZdQ`ےHAtAJlJXQrtArdXQJ`ےJltZHAbtlJp˂rdrtAbے`pvnbHAZpvpfH`JXQr~HfJ`ےvXn`JXQrvˍpfXnvd|Zv`fdrtAے`JJtArdrXQJ`tAJlpZHAbbtlZp˂tdrtApZHA|ZdQbbHAZbdQZ|ے`JXQtArdXQJ`ےJltJXQHAbXv`f˂rXQ~f`˂pZpvnbHAZpvpfHے`H~ㅐfpfH~dQbt~HfpJltXQr˂|ZdQےbHAtbdQZے`JJtArdrXQJ`Jltbے`JnXv`p˂rdtAJr˂p|ZdQbbHAZbdQZ|ے`J~HfJ`ےvXnHAbےXv`f˂rXQ~f`JXQr`vXnf`vlJtArvnXbdQZ|pZHAbbtlZp˂|drXQr˂|ZdQےbHAbdQZ|QrpZf~HXQJ`ےltbZHAbtlJp˂rdrtAXQr˂pvnbHAZpvpfH`JXQr~HfJ`ےvXn˂pZHAvˍpfXnvd|Zv`fdrtAے`JJtArdrXQJ`tAJlpZHAbbtlZp˂drtAHAbےfpvbHAZnvpے`JXQtArdXQJ`ےJltpZHAbXv`f˂rXQ~f`˂pZpvnbHAZpvpfHbے`H~ㅐfpfH~dQbt~HfpJltXQr˂|ZdQےbHAtbdQZے`JJtArdrXQJ`Jlt`JXQrnXv`p˂rfHfr˂p|ZdQbbHAZbdQZ|ے`J~HfJ`ےvXnHAbےXv`f˂rXQ~f`JXQr`vXnf`vlJtArvnXdrtAJpZHAbbtlZp˂|drXQr˂|ZdQےbHAbdQtAJ˂pZf~HXQJ`ے`vXnZHAbnXv`p˂rdtAJXQrpvnbHAZpvpfH`JXQr~HfJ`ےvXn˂p`ZvˍpfXnvd|Zv`fltbے`JJtArdrXQJ`tAJlpZHAbbtlZp˂ltbHAbےfpvbHAZvpfے`JXQf~HXQJ`ےltbے`JXQXv`f˂rXQ~f`˂pZpvnbHAZpvpfHQXb㉀ەH~ㅐfpfH~dQbt~HfpdQZ|XQr˂|ZdQےbHAtbdQZے`JJtArdrXQJ`dQZ|`JXQrnXv`p˂rH~fr˂pfpvbHAZnvpr˂p~HfJ`ےvXnHAbےXv`f˂rXQ~f`pJAHr`vXnf`vlJtArvnXdrtAJpZHAbbtlZp˂|drXQr˂|ZdQےbHAdrtAJZHAbf~HXQJ`ے`vXnZHAbnXv`p˂r`vXnZHAbpvnbHAZpvpfH`JXQr~HfJ`ےvXnˁ`ZvˍpfXnrd|Zv`fltbے`JJtArdrXQJ`tAJlpZHAbbtlZp˂ltbے`JXfpvbHAZvpfے`JXQf~HXQJ`ےvpfے`JXQXv`f˂rb~f`˂pZpvnbHAZpvpfHQXb㉀ەH~ㅐf˂pZHAdQbtHfpvdQtAJlXQr˂|ZdQےbHAtbdQZے`JJtArdrXQJ`dQZ|lQr˂pnXv`p˂rH~fr˂pfpvbHAZH~fr˂p~HfdQZ|vXnHAے`Xv`f˂rXQ~f`pJAHQX`vXnbے`lJtArnrXQtbdQpZHAbbtlZp˂|drXQr˂|ZdQےbHAtbnZHAbf~HXQJ`ے`vXnZHAbnXv`p˂r`vXn`JXQrpvndrtAJvpfHJXQrb~HfJ`ےvXnb㉀ۑpvˍp|JXQrd|ZJ`p˂Z|dے`JJtArdrXQJ`tAJlpZHAbbtlZp˂vp`ے`JXfpvbHAZvpfے`JXQf~HXQJ`ےvpfbtlXv`fltb~f`tlJpvnbHAZpvpfHJAHr󙐂drQt˂pZHAdQbt璀rXQJrtAJlXQr˂|ZdQےbHAtbdQZے`JJtArdrXQJ`vXnQrZnXv`p˂rH~fr˂pfpvbHAZHXnJA|Z~HfdQZ|vXntAd|Xv`f˂rb~f`ˁ`ZQXJltbے`lJtAr`ےbtbdQpZHAbbnXvZp˂|dtAXQr˂|ZdQےbHAvpfHAbے`f~HXQJ`ے`vXnZHAbnXv`p˂rvpfHdQbtpvndrtAJvpfHZdQbt~HfdQZ|vXnb㉀ۑpbAdZ|JXQrd|ZHAZp˂Z|l璐ے`J`f~rXQJ`JltpZHAbbtlZp˂~f`JXQrfpvbHAZvpfے`JXQf~HXQJ`ے~f`lJtArXv`fltb~f`lJtApvndrtAJvpfHJAHr󙐂drQt˂pZHAdQbt璀rXQJtbnXQr˂HfpvےbHAbnvے`JJtArdrXQJ`vXn˂pZHAnXv`p˂rH~fr˂pfpvbHAZvXnd|Z~HfdQZ|vXnrd|Xv`fltb~f`ۑpJJltbے`lJtAr`ےvpffpZHAbnXvZp˂pfHXQr˂|ZdQےbHAvpfHbے`f~HXQJ`ے`vXnZHAbnXv`p˂rvpfHdQbtpvndrtAJvpfHZdQbt~HfdQZ|vXnAHr󙐂bAdZ|JXQrd|ZrXQJ``vXnے`J`f~rXQJ`f`vXpZHAbbnXvZp˂XnvJXQrfpvbHAZvpfے`JXQf~HXQJ`ے~vlJtArXv`fltb~f`lJtApvndrtAJvpfH`ZQXbdrQt˂pZHAdQbtےbHAvpfXQr˂HfpvےbHAnvpے`J`f~rXQJ`pfH~˂pZAnXv`p˂rH~fr˂pfpvbHAZpfH~ZdQbt~HfdQZ|vXnrd|Xv`fltb~f`ۑpJJltbے`lJtArZp˂H~fpZHAbnXvZp˂fH~XQr˂HfpvےbHAf`v`JXQrf~HXQJ`ے`vXnZHAbnXv`p˂rf`vlJtpvndrtAJvpfHZdQbt~HfdQZ|vXnAHr󙐂bAdZ|JXQrd|ZrXQJ``vXnے`J`f~rXQJ`f`vXpZHAbnXvZp˂XnvbtlfpvbHAZvpfے`JXQf~HXQJ`ےXnvArd|Xv`fltb~f`lJtApvndrtAJvpfH`pJAHdrQt˂pZHAdQbtےbHAvpfXQr˂HfpvےbHAnvpے`J`f~rXQJ`pfH~JtAdnXv`p˂rH~fr˂pfpvbHAZpfH~ZdQbt~HfdQZ|vXnrd|Xv`fltb~f`r󙐂ˁ`Jltbے`lJtArXQJ`ےH~fvXpZHAbnXvZp˂fH~XQr˂HfpvےbHAvp|ZdQbf~HbdQZ|`vXnZHAےnXv`p˂rf`plJtpvndrtAJvpfHZdQbt~HfdQZ|vXnZQXb㉀bAdZ|JXQrd|ZbHAZnvpے`J`f~rXQJ`f`vXpZHAbnXvZp˂fH~tlJfpvdrtAvpf`JXQrf~HXQJ`ےfH~ArdZXv`fltb~f`lJtApvndrtAJvpfHۑpJAHdrQt˂pZHAdQbtp˂rfH~XQr˂HfpvےbHAnvpے`J`f~rXQJ`f`vXtArdnXv`JltH~fbtlfpvbHAZf`vXQbtl~HfdQZ|vXnrd|Xv`fltb~f`r󙐂ˁ`Jltbے`lJtArXQJ`ےf`vXpZHAbnXvZp˂fH~XQr˂HfpvےbHAnvp|ZdQbf~HbdQZ|`vXnJtAdnXv`p˂rnvpJtArdpvndrtAJvpfHZdQbt~HfdQZ|vXnZQXAHrbAdZ|JXQrd|ZbHAZnvpے`J`f~rXQJ`f`vXpZHAbnXvZp˂fH~tlJfpvdrtAvpf|ZdQbf~HbdQZ|fH~|ZdQXv`fltb~f`lJtApvndrtAJvpfHˁ`ZdrQt˂pZHAdQbtp`ےfH~XQr˂HfpvےbHAnvpے`J`f~rXQJ`f`pftArdnXv`JltH~ftlJfpvdrtAf`vXbtlHfpdQZ|vXnrd|Xv`fltb~f`QXb㉀Jltbے`lJtArbHAZpfvnpZHAbnXvZp˂fH~XQr˂HfpvےbHAH~f|ZdQbf~HbdQZ|`vXntArdnXv`JltH~fJtArdvnrdrtAJvpfHZdQbt~HfdQZ|vXnpJAHrbAdZ|JXQrd|Z˂rXQvpfHے`J`f~rXQJ`f`vXpZHAbnXvZp˂`vXntlJfpvdrtAvpf|ZdQbf~HbdQZ|`vXn|ZQbXQJ`ےltb~f`lJtApvndrtAJvpfHˁ`ZdrQt˂pZHAdQbnXJ`ے~f`XQr˂HfpvےbHAnvpے`J`f~rXQJ`vpftArdnXv`JltH~ftlJfpvdrtAvpflJtAHAZpdQZ|vXnrrd|Xv`fltb~f`QXb㉀Jltbے`v`fbHAZpvXnpZHAnXvZp˂fH~XQr˂HfpvےbHAH~f|ZdQbf~HbdQZ|`vXntArdnXv`JltH~frd|˂rXQdrtAJ˂pZZdQbtHfpdQZ|vXnˁ`ZQXbAdZ|JXQr~Hfp˂bvpfHے`JXQ`f~rXQJ`f`vXpZHAbnXvZp˂`vXHtlJfpvdrtAvpf|ZdQbf~HbdQZ|`vXnZdQbtJ`ےltbHAbےlJtAvnrdrtAJvpfHb㉀ۑpdrQt˂pZHAvnXHAZp˂~f`rbtHfpvےbHAnvpے`J`f~rXQJ`~f`tArdnXv`JltH~ftlJfpvdrtAf`lJtAbHAZpdQZ|`JXQrrd|XQJ`ےltb~f`JAHrJltbے`v`frXQJvnvplJtAdnXvZp˂fH~XQr˂HfpvےbHAvXn|ZdQbf~HbdQZ|`vXntArdnXv`JltvXnrd|˂rXQdrtAJ˂pZZdQbtHAZpdQZ|vXnےˁ`ZQXbAdZ|JXQr~Hfp`ےbfH~|ZdQ`f~rbdQZf`vXpZHAnXvZp˂vpfHtlJfpvdrtAvpf|ZdQbf~HbdQZ|vpfHZdQbJJ`ےltbHAbےlJtA˂rXQdrtAJ`JXQrb㉀XndrQt˂pZHAvnXHAZp˂f`vXbtlHfpv|drnvpے`JXQ`f~rXQJ`~f`tArdnXv`JltH~ftlJfpvdrtA~f`tArdbHAZpdQZ|`JXQrrd|J`ےltb˂pZvˍpfJltbے`v`frXQHAnvpJtArdnXvtAJlfH~rbtHfpvےbHAvXn|ZdQbf~HbdQZ|`vXntArdnXv`JltvXn|ZdQb˂rXQdrtAJ˂pZZdQbtbHAZpdQZ|HAbےH~ㅐfbAdZ|JXQr~HfpZp˂fH~|ZdQ`f~tbdQZf`vXlJtAdnXvZp˂f`vtlJfpvdrtAvpf|ZdQbf~HbdQZ|vp`vtlJJ`ےltbHAbےlJtA˂rXQdrtAJ`JXQr`vXndrQt˂pZHAvnXrXQJ`f`vXnbtlHfpv|drnvp|ZdQ`f~rbdQZXnvtArdnXv`JltH~ftlJfpvdrtAXnrtArdbHAZpdQZ|`JXQrrd|J`ےltb˂pZvˍpfJltbے`v`fےbHAvfH~JtArdnXvtAJlfH~btlHfpv|ltpfH~|ZdQbfHfbdQZ|`vXntArdnXv`Jlt˂p`J|ZdQb˂rXQdrtAJ˂pZZdQbtbHAZpdQZ|HAXQrH~ㅐfbAdZ|JXQr~HfpZp˂f`v|ZdQ`f~tbdQZf`vXJtArdnXvbdQZ|f`vtlJpvndrtAvpf|ZdQbf~HbdQZ|XQr˂tJArdJ`ےltbHAbےlJtA˂rXQdrtAJ˂pZHA`vXndrQt˂pZHAvnXrXQJ`XnvbtlHfpv|drnvp|ZdQ`f~drtAXnvtArdrXQJ`JltH~ftlJfpvdrtApZHAb|ZdbHAZpdQZ|`JXQrrd|J`ےltbbے`vˍpfJltbے`v`fp˂rpfH~JtArdnXvtAJlfH~btlHfpvJltp`vX|ZdQbےHAZbdQZ|`vXntArdnXv`Jltے`JQbtl˂rXQdrtAJ˂pZZdQbtbHAZpdQZ|JXQrH~ㅐfbAdZ|JXQr~HfpbdQZ|f`v|ZdQ`f~tbdQZf`vXJtArdnXvbdQZ|nr˂tlJp˂rdrtAr˂p|ZdQbfHfbdQZ|XQr˂JtArdJ`ےltbHAbےlJtA˂rXQdrtAJ˂pZHA`vXndrQt˂pZHAvnXltbXnvbtlHfpv|drnvp|ZdQ`f~dtbpZAb`tArdXQJ`ےJltZHAbtlJpvndrtApZHAXQ|ZdbHAZpdQZ|`JXQrrd|J`ےltbb˂vˍpfJltbے`v`fdQZ|f~f`JtArdnXvtAJlfH~btlHfpvdQZ|JXQr|ZdQbbHAZbdQZ|ے`JXQtArdrXQJ`Jltr˂pQbtl˂rXQdrtAJ˂pZZdQbtbHAZpdQZ|pZHAbH~ㅐfbAdZ|JXQr~HfpdrtAJvXn|ZdQ`f~tbdQZf`vXJtArdnXvdrtAJ˂pZHtlJp˂rdrtAr˂p|ZdQbےHAZbdQZ|ZHAbJAr|J`ےltbHAbےlJtA˂rXQdrtAJے`J`vXndrQt66666666666666666666666666666666666666666666666677777777777777 \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv39_0.dat b/vendor/endroid/qr-code/assets/data/qrv39_0.dat new file mode 100644 index 000000000..c7955f1fe --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv39_0.dat @@ -0,0 +1,345 @@ +~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopokkkkkklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQOOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopolklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPONMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopolklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopolklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopolklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqponmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmlklkkkkkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmklklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmklklklkljijijijihghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmklklklkljijijijihghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmklklklkljijijijihghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOOOOONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmklklklkljijijijihghghghgfefefefedcdcdcdcbaba`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSOPOPOPOPNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmklklklkkjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSOPOPOPOPNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmkkkklklkjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSOPOPOPOPNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSOPOPOPOPNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcbaba`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSOPOPOPOPNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSOPOPOPOONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqponmnmnmnmlklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSOOOOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlkkkkkkljijijijihghghghgfefedcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststspopopoponmnmnmnmklklklkljijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutststsrqpopopoponmnmnmnmklklklkljijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmklklklkljijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmklklklkljijijijihghgfefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOOOOOOPNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmklklklkljijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQOPOPOPOPNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCBABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvutsrqrqrqrqpopopoponmnmnmnmklklkkkkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQOPOPOPOPNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwtstststsrqrqrqrqpopopoponmnmnmnmkklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQOPOPOPOPNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwtstststsrqrqrqrqpopopoponmnmnmnmlklklklkjijihghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQOPOPOPOPNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwtstststsrqrqrqrqpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQOPOPOPOPNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwvutstststsrqrqrqrqpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQOPOPOOOONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmkkkklklkhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQOOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmlklkjijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQOOOOOPOPNMNMNMNMLKLKLKLKJIHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{zyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQOPOPOPOPNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWVUVUTSTSTSTSRQRQRQRQOPOPOPOPNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopoponmnmnmlkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQOPOPOPOPNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopolklklkkkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQOPOPOPOPNMNMNMNMLKJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA~}~}~}|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopokkklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQOPOPOPOPNMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopoklklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYXWXWVUVUVUVUTSTSTSTSRQRQRQRQOPOOOOOONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopoklklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopoklklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopoklklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopoklklklkljijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[ZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOOOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABABABABABA@?@?@?@?>=>=>=>=<;<;<;<;878787876565656534343434212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        BABABABA@?@?@?@?>=>=>=>=<;:9:9:9878787876565656534343434212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        BABABABA@?@?@?@?>=>=>=>=:9:9:9:9878787876565656534343434212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        BABABABA@?@?@?@?>=>=>=>=:9:9:9:987878787656565653434343421212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + BABABABA@?@?@?@?>=>=>=>=:9:9:9:987878787656565653434343421212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + BABABABA@?@?@?@?>=<;<;<;:9:9:9:987878787656565653333334321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + BABABABA@?@?@?@?<;<;<;<;:9:9:9:987878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + BABABABA@?@?@?@?<;<;<;<;:9:9:9:98787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!       + + + + BABABABA@?@?@?@?<;<;<;<;:9:9:9:98787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + + BABABABA@?>=>=>=<;<;<;<;:9:9:9:98787878765656565434333330/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + + BABABABA>=>=>=>=<;<;<;<;:9:9:9:98787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + + BABABABA>=>=>=>=<;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + + BABABABA>=>=>=>=<;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + BA@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878765434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878743333334212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878734343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878734343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878734343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878734343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878734343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878734343333212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878733434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878743434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878743434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878743434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787876543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656533333434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656534343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656534343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656534343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656534343434212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656534343434212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656534333333212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:98787876565656543434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;878787876565656543434333212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;878787876565656533343434212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + !!""##$$rrqqkkjj + + ))**++,,ttssrrqqIIJJKKLLTTSSRRQQiijjkkll44332211==>>??@@BBAA@@?? &&''(())wwvvuuttFFGGHHIIWWVVUUTTffgghhii??@@AABB^^]]\\[[__``aabb>>==<<;;##$$%%&&kkjjiihh}}~~~~<<==>>??aa``__^^%%&&''((iihhggff --..//00ppoonnmmMMNNOOPPPPOONNMMmmnnoopp00//..-- AABBCCDD>>==<<;; + + **++,,--ssrrqqppJJKKLLMMSSRRQQPPjjkkllmmCCDDEEFFZZYYXXWWccddeeff::998877 + +''(())**ggffeedd !!""##}}||{{zz@@AABBCC]]\\[[ZZ))**++,,eeddccbb11223344llkkjjiiQQRRSSTTLLKKJJIIqqrrsstt,,++**)) + + EEFFGGHH::998765..//0011oonnmmllNNOOPPQQOONNMMLLnnooppqqGGHHIIJJVVUUTTSSgghhiijj66554433 ++,,--..ccbbaa``$$%%&&''yyxxwwvvDDEEFFGGYYXXWWVV--..//00aa``__^^55667788hhggffeeUUVVWWXXHHGGFFEEuuvvwwxx((''&&%%IIJJKKLL43322110 22334455kkjjiihhRRSSTTUUKKJJIIHHrrssttuu + +~~}}||{{KKLLMMNNRRQQPPOOkkllmmnn221100////001122__^^]]\\ + + (())**++uuttssrrHHIIJJKKUUTTSSRR11223344]]\\[[ZZ99::;;<>??@@``__^^]]]]^^__``@@??>>==}}~~ VVWWXXYY,++**))(::;;<<==ccbbaa``ZZ[[\\]]CCBBAA@@zz{{||}}vvuuttssSSTTUUVVJJIIHHGGssttuuvv**))(('' + + 778899::WWVVUUOO00112233mmllkkjjPPQQRRSSMMLLKKJJ99::;;<>??@@AA__^^]]\\^^__``aa??>>==<<~~ + + rrqqponmWWXXYYZZFFEEDDCCwwxxyyzz&&%%$$##;;<<==>>NNMMLLKK44556677iihhggffTTUUVVWWIIHHGGFF==>>??@@LLKKJJII%%&&''((xxwwvvuuEEFFGGHHXXWWVVUUeeffgghh88776655 + + ^^__``aa$##""!! ""##$$%%{{zzyyxxBBCCDDEE[[ZZYYXXbbccddee;;::9988 lkkjjiih[[\\]]^^BBAA@@??{{||}}~~""!!  !!""~~}}||{{??@@AABBJJIIHHGG8899::;;eeddccbbXXYYZZ[[EEDDCCBBAABBCCDDHHGGFFEE))**++,,ttssrrqqIIJJKKLLTTSSRRQQiijjkkll44332211 bbccddee  &&''(())wwvvuuttFFGGHHIIWWVVUUTTffgghhii77665544hggffeed__``aabb>>==<<;;##$$%%&&zzyyxxwwCCDDEEFFFFEEDDCC~~<<==>>??aa``__^^\\]]^^__AA@@??>>EEFFGGHHDDCCBBAA--..//00ppoonnmmMMNNOOPPPPOONNMMmmnnoopp00//..-- ffgghhii + + **++,,--ssrrqqppJJKKLLMMSSRRQQPPjjkkllmm33221100dccbbaa`ccddeeff::998877 + +''(())**vvuuttssGGHHIIJJBBAA@@?? !!""##}}||{{zz@@AABBCC]]\\[[ZZ``aabbcc==<<;;::IIJJKKLL@@??>>==11223344llkkjjiiQQRRSSTTLLKKJJIIqqrrsstt,,++**)) + + ~~}}||{{jjkkqqrr..//0011oonnmmllNNOOPPQQOONNMMLLnnooppqq//..--,, `__^^]]\gghhiijj66554433 ++,,--..rrqqppooKKLLMMNN>>==<<;;$$%%&&''yyxxwwvvDDEEFFGGYYXXWWVVddeeffgg99887766~~}}MMNNOOPP<<;;::9955667788hhggffeeUUVVWWXXHHGGFFEEuuvvwwxx((''&&%%zzyyxxwwssttuuvv22334455kkjjiihhRRSSTTUUKKJJIIHHrrssttuu++**))((!!""##$$\[[ZZYYXkkllmmnn221100////001122nnmmllkkOOPPQQRR::993322(())**++uuttssrrHHIIJJKKUUTTSSRRhhiijjkk55443322||{{zzyyQQRRSSTT3322110099::;;<>??@@``__^^]]]]^^__``@@??>>==}}~~ !!""##$$rrqqkkjj{{||}}~~ ::;;<<==ccbbaa``ZZ[[\\]]CCBBAA@@zz{{||}}##""!! ))**++,,SRQPOONNssttuuvv**))(('' + + 778899::ffeeddccWWXXYYZZ--,,++**00112233mmllkkjjPPQQRRSSMMLLKKJJppqqrrss--,,++**ttssrrqqYYZZ[[\\++**))((AABBCCDD\\[[ZZYYaabbccdd<<;;::99%%&&''((iihhggff !!~~}}||>>??@@AA__^^]]\\^^__``aa??>>==<<~~--..//00MMLLKKJJwwxxyyzz&&%%$$##;;<<==>>bbaa``__[[\\]]^^))((''&&44556677iihhggffTTUUVVWWIIHHGGFFttuuvvww))((''&&ppoonnmm]]^^__``''&&%%$$EEFFGGHHXXWWVVUUeeffgghh88776655 + + ))**++,,eeddccbb""##$$%%{{zzyyxxBBCCDDEE[[ZZYYXXbbccddee;;::998811223399IIHHGGFF{{||}}~~""!!  !!""~~}}||{{??@@AABB^^]]\\[[__``aabb%%$$##""8899::;;eeddccbbXXYYZZ[[EEDDCCBBxxyyzz{{%%$$##""llkkjjiiaabbccdd##""!! IIJJKKLLTTSSRRQQiijjkkll44332211 --..//00aa``__^^ &&''(())wwvvuuttFFGGHHIIWWVVUUTTffgghhii77665544::;;<<==EEDDCCBB##$$%%&&zzyyxxwwCCDDEEFFZZYYXXWWccddeeff!! <<==>>??aa``__^^\\]]^^__AA@@??>>||}}~~!! hhggffeeeeffgghhMMNNOOPPPPOONNMMmmnnoopp00//..-- 11223344]]\\[[ZZ + + **++,,--ssrrqqppJJKKLLMMSSRRQQPPjjkkllmm33221100>>??@@AAAA@@??>> + +''(())**vvuuttssGGHHIIJJVVUUTTSSgghhiijj@@AABBCC]]\\[[ZZ``aabbcc==<<;;::ddccbbaaiijjkkll~~}}||QQRRSSTTLLKKJJIIqqrrsstt,,++**)) + + 55667788YYXXWWVV..//0011oonnmmllNNOOPPQQOONNMMLLnnooppqq//..--,, BBCCDDEE==<<;;:: ++,,--..rrqqppooKKLLMMNNRRQQPPOOkkllmmnnDDEEFFGGYYXXWWVVddeeffgg99887766``__^^]]mmnnoopp{{zzyyxxUUVVWWXXHHGGFFEEuuvvwwxx((''&&%%99::;;<>??@@LLKKJJII66778899ggffeeddVVWWXXYYGGFFEEDDvvwwxxyy''&&%%$$JJKKLLMM3221100/ 33445566jjiihhggSSTTUUVVJJIIHHGGssttuuvv + + }}||{{zzLLMMNNOOQQPPOONNllmmnnoo1100//..XXWWVVUUuuvvwwxx + + + +ssrrqqpo]]^^__``@@??>>==}}~~ !!""##$$||{{zzyyAABBCCDDHHGGFFEE::;;<<==ccbbaa``ZZ[[\\]]CCBBAA@@zz{{||}}##""!! NNOOUUVV/..--,,+ + + 778899::ffeeddccWWXXYYZZFFEEDDCCwwxxyyzzyyxxwwvvPPQQRRSSMMLLKKJJppqqrrss--,,++** + +TTSSRRQQyyzz{{|| nmlkkjjiaabbccdd<<;;::99%%&&''((xxwwvvuuEEFFGGHHDDCCBBAA !!~~}}||>>??@@AA__^^]]\\^^__``aa??>>==<<~~WWXXYYZZ+**))((';;<<==>>bbaa``__[[\\]]^^BBAA@@??{{||}}~~uuttssrrTTUUVVWWIIHHGGFFttuuvvww))((''&& PPOONNMM}}~~ihhggffeeeffgghh88776655 + + ))**++,,ttssrrqqIIJJKKLL@@??>>==""##$$%%{{zzyyxxBBCCDDEE[[ZZYYXXbbccddee;;::9988 [[\\]]^^'&&%%$$# !!""~~}}||{{??@@AABB^^]]\\[[__``aabb>>==<<;; + + qqponmlkXXYYZZ[[EEDDCCBBxxyyzz{{%%$$##""LLKKJJIIeddccbbaiijjkkll44332211 --..//00ppoonnmmMMNNOOPP<<;;::99&&''(())wwvvuuttFFGGHHIIWWVVUUTTffgghhii77665544 + + __``aabb#""!! ##$$%%&&zzyyxxwwCCDDEEFFZZYYXXWWccddeeff::998877 kjjiihhg\\]]^^__AA@@??>>||}}~~!! HHGGFFEEa``__^^]mmnnoopp00//..-- 11223344llkkjjiiQQRRSSTT33221100**++,,--ssrrqqppJJKKLLMMSSRRQQPPjjkkllmm33221100ccddeeff + +''(())**vvuuttssGGHHIIJJVVUUTTSSgghhiijj66554433gffeeddc``aabbcc==<<;;::DDCCBBAA !!""##]\\[[ZZYqqrrsstt,,++**)) + + 55667788hhggffeeUUVVWWXX//..--,,..//0011oonnmmllNNOOPPQQOONNMMLLnnooppqq//..--,, ~~gghhiijj ++,,--..rrqqppooKKLLMMNNRRQQPPOOkkllmmnn221100//cbbaa``_ddeeffgg99887766 + + @@??>>==$$%%&&''YXXWWVVUuuvvwwxx((''&&%%99::;;<>??@@``__^^]]]]^^__``''&&%%$$66778899ggffeeddVVWWXXYYGGFFEEDDvvwwxxyy''&&%%$$yyxxwwvvttuuvvww 33445566jjiihhggSSTTUUVVJJIIHHGGssttuuvv**))((''""##$$%%[ZZYYXXWllmmnnoo1100//..88776655,,--..//NNMMLLKK}}~~ !!""##$$||{{zzyyAABBCCDD\\[[ZZYYaabbccdd##""!! ::;;<<==ccbbaa``ZZ[[\\]]CCBBAA@@zz{{||}}##""!!  !!uuttssrrxxyyzz{{ + + 778899::ffeeddccWWXXYYZZFFEEDDCCwwxxyyzz&&%%$$##&&''(())WVVUUTSRppqqrrss--,,++** + +4433221100112233JJIIHHGG%%&&''((xxwwvvuuEEFFGGHHXXWWVVUUeeffgghh>>??@@AA__^^]]\\^^__``aa??>>==<<~~""##$$%%qqkkjjii||}}~~;;<<==>>bbaa``__[[\\]]^^BBAA@@??{{||}}~~""!! **++,,--QPOONNMMttuuvvww))((''&& 00//..--99::;;<>==<<;;..//0011LLKKJJIIxxyyzz{{%%$$##"",,++**))==>>??@@BBAA@@?? --..//00ppoonnmmMMNNOOPPPPOONNMMmmnnooppFFGGHHIIWWVVUUTTffgghhii77665544 + + **++,,--ddccbbaa##$$%%&&zzyyxxwwCCDDEEFFZZYYXXWWccddeeff::998877223399::HHGGFFEE||}}~~!!  !!""##((''&&%%AABBCCDD>>==<<;; 11223344llkkjjiiQQRRSSTTLLKKJJIIqqrrsstt ~~}}||JJKKLLMMSSRRQQPPjjkkllmm33221100..//0011``__^^]] + +''(())**vvuuttssGGHHIIJJVVUUTTSSgghhiijj66554433;;<<==>>DDCCBBAA$$%%&&''$$##""!!EEFFGGHH::998765 + + 55667788hhggffeeUUVVWWXXHHGGFFEEuuvvwwxx + + {{zzyyxxNNOOPPQQOONNMMLLnnooppqq//..--,, 22334455\\[[ZZYY ++,,--..rrqqppooKKLLMMNNRRQQPPOOkkllmmnn221100//??@@AABB@@??>>== + + (())**++ IIJJKKLL4332211099::;;<>??@@``__^^]]]]^^__``@@??>>==}}~~ + +ssrrqqpoVVWWXXYYGGFFEEDDvvwwxxyy''&&%%$$::;;<<==OONNMMLL33445566jjiihhggSSTTUUVVJJIIHHGGssttuuvv**))(('' + + GGHHIIJJ8765433200112233VVWWXXYY,++**))(!!""##$$||{{zzyyAABBCCDD\\[[ZZYYaabbccdd<<;;::99 nmlkkjjiZZ[[\\]]CCBBAA@@zz{{||}}##""!!  !!~~}}||>>??@@AAKKJJIIHH778899::ffeeddccWWXXYYZZFFEEDDCCwwxxyyzz&&%%$$##KKLLMMNN21100//. + +44556677ZZ[[\\]](''&&%%$%%&&''((xxwwvvuuEEFFGGHHXXWWVVUUeeffgghh88776655ihhggffe^^__``aa??>>==<<~~""##$$%%{{zzyyxxBBCCDDEEGGFFEEDD;;<<==>>bbaa``__[[\\]]^^BBAA@@??{{||}}~~""!! OOUUVVWW.--,,++* 8899::;; ^^__``aa$##""!! + + ))**++,,ttssrrqqIIJJKKLLTTSSRRQQiijjkkll44332211eddccbbabbccddee;;::9988 &&''(())wwvvuuttFFGGHHIICCBBAA@@ !!""~~}}||{{??@@AABB^^]]\\[[__``aabb>>==<<;;XXYYZZ[[*))((''&~~<<==>>?? + + bbccddee  --..//00ppoonnmmMMNNOOPPPPOONNMMmmnnoopp00//..--a``__^^]ffgghhii77665544 + + **++,,--ssrrqqppJJKKLLMM??>>==<<##$$%%&&zzyyxxwwCCDDEEFFZZYYXXWWccddeeff::998877 + +\\]]^^__&%%$$##" !!""##}}||{{zz@@AABBCC\\]]^^__ + + ffgghhii11223344llkkjjiiQQRRSSTTLLKKJJIIqqrrsstt,,++**)) !!""##]\\[[ZZYjjkkllmm33221100..//0011oonnmmllNNOOPPQQ;;::9933''(())**vvuuttssGGHHIIJJVVUUTTSSgghhiijj66554433 ``aabbcc"!! $$%%&&''yyxxwwvvDDEEFFGG``aabbcc jjkkqqrr55667788hhggffeeUUVVWWXXHHGGFFEEuuvvwwxx((''&&%%$$%%&&''YXXWWVVUnnooppqq//..--,, 22334455kkjjiihhRRSSTTUU221100//++,,--..rrqqppooKKLLMMNNRRQQPPOOkkllmmnn221100//ddeeffgg + + (())**++uuttssrrHHIIJJKKddeeffggssttuuvv99::;;<>??@@``__^^]]]]^^__``@@??>>==}}~~ ,,--..//NNMMLLKKvvwwxxyy''&&%%$$::;;<<==ccbbaa``ZZ[[\\]]**))((''33445566jjiihhggSSTTUUVVJJIIHHGGssttuuvv**))(('' + + ||{{zzyyqqrrsstt00112233mmllkkjjPPQQRRSSllmmnnoozzyyxxww{{||}}~~ !!""##$$||{{zzyyAABBCCDD\\[[ZZYYaabbccdd<<;;::9900112233JJIIHHGGzz{{||}}##""!!  !!~~}}||>>??@@AA__^^]]\\^^__``aa&&%%$$##778899::ffeeddccWWXXYYZZFFEEDDCCwwxxyyzz&&%%$$##xxwwvvuuuuvvwwxx 44556677iihhggffTTUUVVWWppqqrrss vvuuttss%%&&''((xxwwvvuuEEFFGGHHXXWWVVUUeeffgghh8877665599::;;<>bbaa``__[[\\]]^^BBAA@@??{{||}}~~""!!  !!""ttssrrqqyyzz{{|| + + 8899::;;eeddccbbXXYYZZ[[ttuuvvwwxxyyzz{{%%$$##""LLMMNNOO100//..- + + 55667788hhggffeeUUVVWWXXHHGGFFEEuuvvwwxx + + {{zzyyxxNNOOPPQQOONNMMLLnnooppqq//..--,, MMNNOOUU++**))((||}}~~!! UUVVWWXX-,,++**)99::;;<>??@@``__^^]]]]^^__``@@??>>==}}~~ + +ssrrqqpoVVWWXXYYGGFFEEDDvvwwxxyy''&&%%$$ZZ[[\\]]##""!!  + + ]]^^__``%$$##""!!!""##$$||{{zzyyAABBCCDD\\[[ZZYYaabbccdd<<;;::99 nmlkkjjiZZ[[\\]]CCBBAA@@zz{{||}}##""!! ^^__``aa aabbccdd! %%&&''((xxwwvvuuEEFFGGHHXXWWVVUUeeffgghh88776655ihhggffe^^__``aa??>>==<<~~bbccddeeeeffgghh + + ))**++,,ttssrrqqIIJJKKLLTTSSRRQQiijjkkll44332211eddccbbabbccddee;;::9988 ffgghhii + +~~}}||iijjkkqq --..//00ppoonnmmMMNNOOPPPPOONNMMmmnnoopp00//..--a``__^^]ffgghhii77665544 + + jjkkqqrr {{zzyyxxrrssttuu11223344llkkjjiiQQRRSSTTLLKKJJIIqqrrsstt,,++**)) !!""##]\\[[ZZYjjkkllmm33221100ssttuuvv wwvvuuttvvwwxxyy 55667788hhggffeeUUVVWWXXHHGGFFEEuuvvwwxx((''&&%%$$%%&&''YXXWWVVUnnooppqq//..--,, ~~}}||{{wwxxyyzz + +  !!""##ssrrqqkkzz{{||}} + + 99::;;<>??@@``__^^]]]]^^__``@@??>>==}}~~ ,,--..//NNMMLLKKvvwwxxyy''&&%%$$vvuuttss + + (())**++ffeeddcc!!""##$$||{{zzyyAABBCCDD\\[[ZZYYaabbccdd<<;;::9900112233JJIIHHGGzz{{||}}##""!!  !!rrqqkkjj ,,--..//bbaa``__%%&&''((xxwwvvuuEEFFGGHHXXWWVVUUeeffgghh8877665599::;;<>??@@BBAA@@?? &&''(())eeddccbb44556677ZZYYXXWW --..//00ppoonnmmMMNNOOPPPPOONNMMmmnnoopp00//..-- AABBCCDD>>==<<;; + + **++,,--aa``__^^ !!8899::;;VVUUOONN11223344llkkjjiiQQRRSSTTLLKKJJIIqqrrsstt,,++**)) + + EEFFGGHH::998765..//0011]]\\[[ZZ""##$$%%~~<<==>>??MMLLKKJJ55667788hhggffeeUUVVWWXXHHGGFFEEuuvvwwxx((''&&%%IIJJKKLL43322110 22334455YYXXWWVV&&''(()) !!""##}}||{{zz@@AABBCCIIHHGGFF99::;;<>??@@``__^^]]]]^^__``@@??>>==}}~~ VVWWXXYY,++**))(::;;<<==LLKKJJII..//0011(())**++uuttssrrHHIIJJKKAA@@??>>!!""##$$||{{zzyyAABBCCDD\\[[ZZYYaabbccdd<<;;::99ZZ[[\\]](''&&%%$ !!~~}}||>>??@@AAHHGGFFEE22334455,,--..//qqppoonnLLMMNNOO==<<;;::%%&&''((xxwwvvuuEEFFGGHHXXWWVVUUeeffgghh88776655 + + ^^__``aa$##""!! ""##$$%%{{zzyyxxBBCCDDEEDDCCBBAA6677889900112233mmllkkjjPPQQRRSS99332211))**++,,ttssrrqqIIJJKKLLTTSSRRQQiijjkkll44332211 bbccddee  &&''(())wwvvuuttFFGGHHII@@??>>==::;;<<==44556677iihhggffTTUUVVWW00//..----..//00ppoonnmmMMNNOOPPPPOONNMMmmnnoopp00//..-- ffgghhii + + **++,,--ssrrqqppJJKKLLMM<<;;::99>>??@@AA8899::;;eeddccbbXXYYZZ[[,,++**))11223344llkkjjiiQQRRSSTTLLKKJJIIqqrrsstt,,++**)) + + ~~}}||{{jjkkqqrr..//0011oonnmmllNNOOPPQQ33221100BBCCDDEE~~<<==>>??aa``__^^\\]]^^__((''&&%%55667788hhggffeeUUVVWWXXHHGGFFEEuuvvwwxx((''&&%%zzyyxxwwssttuuvv22334455kkjjiihhRRSSTTUU//..--,,FFGGHHII}}||{{zz@@AABBCC]]\\[[ZZ``aabbcc$$##""!!99::;;<>??@@``__^^]]]]^^__``@@??>>==}}~~ !!""##$$rrqqkkjj{{||}}~~ ::;;<<==ccbbaa``ZZ[[\\]]''&&%%$$~~}}||NNOOPPQQuuttssrrHHIIJJKKUUTTSSRRhhiijjkkAABBCCDD\\[[ZZYYaabbccdd<<;;::99%%&&''((iihhggff !!~~}}||>>??@@AA__^^]]\\^^__``aa##""!! {{zzyyxxRRSSTTUUqqppoonnLLMMNNOOQQPPOONNllmmnnooEEFFGGHHXXWWVVUUeeffgghh88776655 + + ))**++,,eeddccbb""##$$%%{{zzyyxxBBCCDDEE[[ZZYYXXbbccddeewwvvuuttVVWWXXYYmmllkkjjPPQQRRSSMMLLKKJJppqqrrss ~~}}IIJJKKLLTTSSRRQQiijjkkll44332211 --..//00aa``__^^ &&''(())wwvvuuttFFGGHHIIWWVVUUTTffgghhiissrrqqppZZ[[\\]]iihhggffTTUUVVWWIIHHGGFFttuuvvww + + ||{{zzyyMMNNOOPPPPOONNMMmmnnoopp00//..-- 11223344]]\\[[ZZ + + **++,,--ssrrqqppJJKKLLMMSSRRQQPPjjkkllmmoonnmmll^^__``aaeeddccbbXXYYZZ[[EEDDCCBBxxyyzz{{xxwwvvuuQQRRSSTTLLKKJJIIqqrrsstt,,++**)) + + 55667788YYXXWWVV..//0011oonnmmllNNOOPPQQOONNMMLLnnooppqq kkjjiihhbbccddeeaa``__^^\\]]^^__AA@@??>>||}}~~ ttssrrqqUUVVWWXXHHGGFFEEuuvvwwxx((''&&%%99::;;<>??@@LLKKJJII66778899ggffeeddVVWWXXYYGGFFEEDDvvwwxxyy ccbbaa``jjkkllmmYYXXWWVVddeeffgg99887766jiihhggf]]^^__``@@??>>==}}~~ !!""##$$||{{zzyyAABBCCDDHHGGFFEE::;;<<==ccbbaa``ZZ[[\\]]CCBBAA@@zz{{||}}__^^]]\\nnooppqqUUTTSSRRhhiijjkk55443322feeddccbaabbccdd<<;;::99%%&&''((xxwwvvuuEEFFGGHHDDCCBBAA !!~~}}||>>??@@AA__^^]]\\^^__``aa??>>==<<~~[[ZZYYXXrrssttuuQQPPOONNllmmnnoo1100//..baa``__^eeffgghh88776655 + + ))**++,,ttssrrqqIIJJKKLL@@??>>==""##$$%%{{zzyyxxBBCCDDEE[[ZZYYXXbbccddee;;::9988WWVVUUTTvvwwxxyyMMLLKKJJppqqrrss--,,++** !!""^]]\\[[Ziijjkkll44332211 --..//00ppoonnmmMMNNOOPP<<;;::99&&''(())wwvvuuttFFGGHHIIWWVVUUTTffgghhii77665544 !!""##SSRRQQPPzz{{||}}IIHHGGFFttuuvvww))((''&&##$$%%&&ZYYXXWWVmmnnoopp00//..-- 11223344llkkjjiiQQRRSSTT33221100**++,,--ssrrqqppJJKKLLMMSSRRQQPPjjkkllmm33221100$$%%&&''OONNMMLL~~EEDDCCBBxxyyzz{{%%$$##""''(())**VUUTSRQPqqrrsstt,,++**)) + + 55667788hhggffeeUUVVWWXX//..--,,..//0011oonnmmllNNOOPPQQOONNMMLLnnooppqq//..--,,(())**++KKJJIIHHAA@@??>>||}}~~!! ++,,--..OONNMMLLuuvvwwxx((''&&%%99::;;<>??@@``__^^]]]]^^__``''&&%%$$66778899ggffeeddVVWWXXYYGGFFEEDDvvwwxxyy''&&%%$$00112233CCBBAA@@998877663399::;;GGFFEEDD}}~~ !!""##$$||{{zzyyAABBCCDD\\[[ZZYYaabbccdd##""!! ::;;<<==ccbbaa``ZZ[[\\]]CCBBAA@@zz{{||}}##""!! 99::;;<>==<<55443322<<==>>??CCBBAA@@%%&&''((xxwwvvuuEEFFGGHHXXWWVVUUeeffgghh>>??@@AA__^^]]\\^^__``aa??>>==<<~~==>>??@@;;::99881100//..@@AABBCC??>>==<< + + ))**++,,ttssrrqqIIJJKKLLTTSSRRQQiijjkkllBBCCDDEE[[ZZYYXXbbccddee;;::9988AABBCCDD77665544--,,++** + +DDEEFFGG;;::9987 --..//00ppoonnmmMMNNOOPPPPOONNMMmmnnooppFFGGHHIIWWVVUUTTffgghhii77665544EEFFGGHH33221100))((''&& HHIIJJKK65433221 11223344llkkjjiiQQRRSSTTLLKKJJIIqqrrsstt ~~}}||JJKKLLMMSSRRQQPPjjkkllmm33221100IIJJKKLL//..--,,fpvp˂rrtAdQZXnv|ZdQbfpvbHAZdrtAvpfr˂p|ZdQbfpvbHAZdrtAvpftlJ~Hfp˂rXQltb~f`tAd|~HfJ`ےdQZ|vXn`JXQrrd|~HXvrAJlpfH~˂pZHAdQbtvnXHAZp˂rtAJlpfH~lJtAv`frXQJdQZ|H~f`JXQHfpvےbHA|drnvpXQr˂nXv`XQJ`ے|drp`vXtlJnXv`p˂rJltH~fZHAbtlJnXv`p˂rJltے`JXQtArdvnXJ`ےdQZ|vXnZdQbtpvnbHAZpdrtAJvpfH˂pZZdQbt`f~tbdQf`vbے`lJtArv`frXQJtbdQf`vd|Z~Hfp`ےbdrtAJ`vXnrbt璀nXvZp˂tAJlfH~pZHAbf~HbHAZtAJlnvptArdf~HXQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|HAbے|ZdQbv`f~bHAZpdrtAJvpfےlJtAXv`f˂rXQltb~f`HAbےlJtAHfpvZ|dXnvJXQrd|Z~Hfp`ےbZ|dXnvdQbtvnXHAZp˂ltbvp`lJtAd`f~rXQJ`tbdQZf`vXے`Jfpvp˂rtbdQZfH~|ZdQbfpvbHAZdrtAvpfr˂p|ZdQbfpvbHAZdtAJ`JXQrtlJfpv˂rXQltb`JXQrrd|~HfJ`ےdQZ|vXn`JXQrrd|nXvrtAJlpfH~˂pZHAdQbtvnXHAZp˂rtAJlpfے`lJtArv`frXQJdQZ|vXn|ZdQHfpvےbHA|drnvpXQr˂nXv`XQJ`ے|drf`vXtlJnXv`p˂rJltH~fZHAbtlJnXv`p˂rltb˂pZtArdtnXv`J`ےdQZ|˂pZZdQbtpvnbHAZpdrtAJvpfH˂pZZdQbt`pvtbdQf`vbے`lJtArv`frXQJtbdQJXQrd|Z~Hfp`ےbdrtAJvpfHbtlnXvZp˂tAJlfH~pZHAbf~HbHAZtAJlnvptArdf~HXQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےnvpHAbےlJtAf~HbHAZpdtAJlHAbےlJtAXv`f˂rXQltb~f`HAbےlJtAnrXQJZ|dXnvJXQrd|Z~Hfp`ےbZ|d˂pZHAdQbtvnXHAZp˂ltd~f`JtArd`f~rXQJ`tbdQZf`vXے`Jfpvp˂rtdrtAfH~|ZdQbfpvbHAZdrtAvpfr˂p|ZdQbfpvbHAZfHf`JXQrrd|fpv˂rXQtbn`JXQrrd|~HfJ`ےdQZ|vXn`JXQrrd|`p˂rtAJpfH~˂pZHAdQbtvnXHAZp˂tAJlbے`lJtArv`frXQJrtAJlvXn|ZdQHfpvےbHA|drnvpXQr˂nXv`XQJ`ےJltvpftlJnXv`p˂rJltH~fZHAbtlJnXv`p˂r`vXn˂p`ZdQbtnXv`J`ےvpf˂pZZdQbtpvnbHAZpdrtAJvpfH˂pZZdQbtrXQJ`bdQZ|f`vbے`lJtArv`frXQJtbnJXQrd|Z~Hfp`ےbtbdQvpfHbtlnXvZp˂tAJlfH~pZHAbf~HbHAZbdQZ|ے`JXQtArdf~HXQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےvpfJXQrlJtAf~HfbHAZpHf`HAbےlJtAXv`f˂rXQltb~f`HAbےlJtAےbHAdrtAXnvJXQrd|Z~Hfp`ےbvpfH˂pZHAdQbtvnXHAZp˂Z|d~vJtArd`f~rXQJ`tbdQZf`vXے`Jfpvp˂rdrtArZHA|ZdQbfpvbHAZdrtAvpfr˂p|ZdQbfpvJltH~f˂pZHArd|vnXv˂rXQvXn`JXQrrd|~HfJ`ےdQZ|vXn`JXQrrd|Zp˂JltpfH~˂pZHAdQbtvnXHAZp˂f`vbے`lJtArv`frXQJrtAJlpfے`|ZdQHfpvےbHA|drnvpXQr˂nXv`XQJ`ےJltbے`tlJnXv`p˂rJltH~fZHAbtlJnXv`bdQZ|`vXnbے`ZdQtAr`f~J`ےJvpfH˂pZZdQbtpvnbHAZpdrtAJvpfH˂pZZdQbtbHAZbdQZ|f`vbے`lJtArv`frXQJXnvJXQrd|Z~Hfp`ےbtbdQJXQrbtlnXvZp˂tAJlfH~pZHAbf~HbHAZbdQZ|JXQrtArdf~HXQJ`ےbdQZ|`vXnے`JXQtArdfHfdrtAvpfJXQrd|ZHfpvltb~f`HAbےlJtAXv`f˂rXQltb~f`HAbےlJtAp˂rdrtAXnvJXQrd|Z~Hfp`ےJlpfH~˂pZHAdQbtvnXHAZp˂Z|lZHAbJtArd`f~rXQJ`tbdQZf`vXے`Jfpvp˂rltbpZHA|ZdQbfpvbHAZdrtAvpfr˂p|ZdQbpvnJltH~f˂pZHAdQbt璀nXvdQZ|vXn`JXQrrd|~HfJ`ےdQZ|vXn`JXQrrd|XQJ`ےJltbpfH~˂pZHAdQbtvnXtbdQf`vbے`lJtArv`frXQJtbdQZ`JXQ|ZdQHfpvےbHA|drnvpXQr˂nXv`XQJ`ےdQZ|bے`tlJnXv`p˂rJltH~fZHAbtlJrXQJ`bdQZ|`vXnb˂lJtAr`ffpdrtAJvpfH˂pZZdQbtpvnbHAZpdrtAJvpfH˂pZZdQbtbHAZQZdrf`vbے`lJtArv`fZ|dXnvJXQrd|Z~Hfp`ےb|drr˂pbtlnXvZp˂tAJlfH~pZHAbf~HbHAZdrtAJJXQrtArdf~HXQJ`ےbdQZ|`vXnے`JXQtArdےHAZdrtAvpfpZHAbd|Zvnrltb~f`HAbےlJtAXv`f˂rXQltb~f`HAbےlJtAp˂rtAJlXnvJXQrd|ZHfpvrtAJlpfH~˂pZHAdQbtvnXHAZp˂tAJlZHAbJtArd`f~rXQJ`tbdQZf`vXے`Jfpvp˂rltbpZAb|ZdQbfpvbHAZdrtAvpfr˂p|ZdQbp˂rJltH~fے`JdQbtXQJ`ےdQZ|vXn`JXQrrd|~HfJ`ےdQZ|vXn`JXQrrd|XQJ`ptbdQZpfH~˂pZHAdQbt璀nrXQtbdQf`vbے`lJtArv`frXQJtbdQZ`JXQ|ZdQHfpvےbHA|drnvpXQr˂nXv`XQJ`ےdQZ|`JXQrtlJnXv`p˂rJltH~fZHAbtlJXQJ`ےbdQZ|`vXnXQr˂l|ZdQHAZpdrtAJvpfH˂pZZdQbtpvnbHAZpdrtAJvpfH˂pZZdQbt˂rXQ|drf`vbے`lJtArJ`ےZ|dXnvJXQrd|Z~Hfp`ےb|drr˂pZbtlnXvZp˂tAJlfH~pZHAbf~HbHAZdrtAdQ˂pZtArdf~HXQJ`ےbdQZ|`vXnے`JXQfpvbHAZdrtAvpfpZHAbbtl˂rXQltb~f`HAbےlJtAXv`f˂rXQltb~f`HAbےlJfJ`ےtAJlXnvJXQrd|ZHAZp˂rtAJlpfH~˂pZHAdQbtvnXHAZp˂tAdQZ|Ab`JJtArd`f~rXQJ`tbdQZf`vXے`Jfpvp˂rZ|dHAbے|ZdQbfpvbHAZdrtAvpfr˂pnXv`p˂rJltH~fے`JJtArdJ`ےdQZ|vXn`JXQrrd|~HfJ`ےdQZ|vXn`JXQrpvbHAZptbdQZpfH~˂pZHAdQbt璀rXQJtbdQf`vbے`lJtArv`frXQJdrtAXQr˂|ZdQHfpvےbHA|drnvpXQr˂nXv`XQJ`ےrtAJl`JXQrtlJnXv`p˂rJltH~fZHAےf~HXQJ`ےbdQZ|`vXnXQHAb|ZdQbHAZpdrtAJvpfH˂pZZdQbtpvnbHAZpdrtAJvpfH˂pZ~Hfp˂rXQ|rAJlf`vbے`lJfp`ےbZ|dXnvJXQrd|Z~Hfp`ےbJltpZHAbbtlnXvZp˂tAJlfH~pZHAbf~HbHAZtbdQ˂pZtArdf~HXQJ`ےbdQZ|`vXn`JXQrfpvbHAZdrtAvpfے`JXQbtl˂rXQltb~f`HAbےlJtAXv`f˂rXQltb~f`HAے`vnXJ`ےtbdXnvJXQrvnXHAZp˂rtAJlpfH~˂pZHAdQbtvnXHAZp˂bdQZ|ے`JJtArd`f~rXQJ`tbdQZf`vXے`Jfpvp˂rZ|`vHAb|ZdQbfpvbHAZdrtAvpfbtlnXv`p˂rJltH~fr˂pJtArdJ`ےdQZ|vXn`JXQrrd|~HfJ`ےdQZ|vXnJXQrbv`fbHAXQJQZ|dpfH~˂pZHAv`frXQJtbdQf`vbے`lJtArv`frXQJltbXQr˂|ZdQHfpvےbHA|drnvpXQr˂nXv`XQJ`ےXnvJQr˂ptlJnXv`p˂rJltH~fJtAdf~HXQJ`ےbdQZ|`vXnZHAbtlJbHAZpdrtAJvpfH˂pZZdQbtpvnbHAZpdrtAJvpfHtlJ~Hfp`ےbrtAJlf`vے`J~Hfp`ےbZ|dXnvJXQrd|Z~Hfp`ےbnvppZHAbbtlnXvZp˂tAJlfH~pZHAf~HbHAZpfH~ZHAbtArdf~HXQJ`ےbdQZ|`vXn|ZdQbfpvbHAZdrtAvpfے`JXQfpv˂rXQltb~f`HAbےlJtAXv`f˂rXQltb~f`tAd|vnXHAZp˂tbdXnvXQrbtvnXHAZp˂rtAJlpfH~˂pZHAdQbtvnXHAZp˂`vXnJQrJtArd`f~rXQJ`tbdQZf`vXے`JXQfpvp˂rf`vے`JX|ZdQbfpvbHAZdrtAvpftlJnXv`p˂rJltH~fr˂pnvfJ`ےdQZ|vXn`JXQrrd|~HfJ`ےdQZ|vXnZdQbtv`pvrXQJQZ|dpfH~lJtAv`frXQJtbdQf`vbے`lJtArv`frXQJvpf˂pZH|ZdQHfpvےbHA|drnvprbtnXv`XQJ`ےXH~Qr˂ptlJnXv`p˂rJltے`JXQtArdf~HXQJ`ےbdQZ|`vXn`JXQr~HfpbHAZpdrtAJvpfH˂pZZdQbtpvnbHAZpdrtAJvpfےlJtAnXv`ےbrtAJf`vd|Z~Hfp`ےbZ|dXnvJXQrd|Z~Hfp`ےbH~fAbے`btlnXvZp˂tAJlfH~lJtAdf~HbHAZf`vXZHAbtArdf~HXQJ`ےbdQZ|r˂p|ZdQbfpvbHAZdrtAvpf˂pZvnX˂rXQltb~f`HAbےlJtAXv`f˂rXQltb`JXQrrd|`f~HAZp˂bdQZ|XnvdQbtvnXHAZp˂rtAJlpfH~˂pZHAdQbtvnXHAZp˂`vXHJXQrJtArd`f~rXQJ`tbdQZf`vX|ZdQfpvp˂rnvpے`JX|ZdQbfpvbHAZdtAJZHAbtlJnXv`p˂rJltH~fHAbےv`fJ`ےdQZ|vXn`JXQrrd|~HfJ`ےdQZ|˂pZZdQbtHfpvbHAdrtApfے`lJtArv`frXQJtbdQf`vbے`lJtArv`frXQJ~f`˂pZH|ZdQHfpvےbHA|drnvpbtlnXv`XQJ`ےfH~QrZHAtlJnXv`p˂rltbے`JXQtArdf~HXQJ`ےbdQZ|`vXn`JXQr~HfpbHAZpdrtAJvpfH˂pZZdQbtpvnbHAZpdtAJlHAbےlJtAnXvZp˂JltJXQrd|Z~Hfp`ےbZ|dXnvJXQrd|Z~Hfp`ےbvXnAbے`btlnXvZp˂tAJlfے`JJtArdf~HbHAZf`vXbے`tArdf~HXQJ`ےnvpr˂p|ZdQbfpvbHAZdrtAvpf˂pZvnX˂rXQltb~f`HAbےlJtAXv`f˂rXQtbn`JXQrrd|`f~rXQJ`bdQZ|˂pZHAdQbtvnXHAZp˂rtAJlpfH~˂pZHAdQbtvnXHAZp˂vpfHJXQrJtArd`f~rXQJ`tbdQZXQr˂|ZdQfpvp˂rnvpJXQr|ZdQbfpvbHAZfHfZHAbtlJnXv`p˂rJltH~fHAbv`f~fJ`ےdQZ|vXn`JXQrrd|~HfJ`ےvpf˂pZZdQbtHXv`ےbHAAJlbے`lJtArv`frXQJtbdQf`vbے`lJtArv`frXQJ~f`ZHAb|ZdQHfpvےbHA|dtApZHAbbtlnXv`XQJ`ے`vXn˂pZHAtlJnXv`p˂r`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXn˂pZHApvnbHAZpdrtAJvpfH˂pZZdQbtpvnbHAZpHf`HAbےlJtAf~HZp˂tbnJXQrd|Z~Hfp`ےbZ|dXnvJXQrd|Z~Hfp`ےbvXnے`JXQbtlnXvZp˂Jltے`JJtArdf~HbHAZvpfbے`tArdf~HXQJ`ےvpfr˂p|ZdQbfpvbHAZdrtAvpfbے`Xv`f˂rXQltb~f`HAbےlJtAXv`f˂rXQvXn`JXQrrd|fpvrXQJ`vpfH˂pZHAdQbtvnXHAZp˂rtAJlpfH~˂pZHAdQbtvnXHAZp˂vp`vr˂pJtArd`f~rXQJ`bnvXQr˂|ZdQfpvp˂rH~fJXQr|ZdQbfpvJltH~fZHAbtlJnXv`p˂rJltH~fJXQr~HfJ`ےdQZ|vXn`JXQrrd|~HfJ`ےJvpfH˂pZZdQbtnXv`p˂rf`vbے`lJtArv`frXQJtbdQf`vbے`lJtArv`frXQJXnvZHAb|ZdQHfpvےbHApfHpZHAbbtlnXv`XQJ`ے`vXn˂pZAbtlJnXv`bdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXn˂p`JpvnbHAZpdrtAJvpfH˂pZZdQbtpvnltb~f`HAbےlJtAf~HXQJ`ےXnvJXQrd|Z~Hfp`ےbZ|dXnvJXQrd|Z~Hfp`ےJlpfH~ے`JXQbtlnXvZp˂f`vXے`JJtArdf~HJltvpf`JXQtArdfHfdrtAvpfr˂p|ZdQbfpvbHAZdrtAvpfXQrbtXv`f˂rXQltb~f`HAbےlJtAXv`fdQZ|vXn`JXQrrd|fpvbHAZpfH~˂pZHAdQbtvnXHAZp˂rtAJlpfH~˂pZHAdQbtvnXtdrf`vr˂pJtArd`f~rXQJ`nvpXQr˂|ZdQfpvdrtAJH~r˂p|ZdQbpvnJltH~fZHAbtlJnXv`p˂rJltH~fl|Z~HfJ`ےdQZ|vXn`JXQrrd|HfpdrtAJvpfH˂pZZdQbt~Hfp˂rf`vbے`lJtArv`frXQJtbdQf`vbے`lJtArv`ftAJlXnvZAb`|ZdQHfpvےJlfH~pZHAbbtlnXv`ltbvpfHZHAbtlJrXQJ`bdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXndQbtvnXv`bHAZpdrtAJvpfH˂pZZdQbtvnrltb~f`HAbےlJtApvnXQJ`ےXnvJXQrd|Z~Hfp`ےbZ|dXnvJXQrd|ZHfpvtbdQZpfH~JXQrbtlnXvtbdQZf`vXے`JJtArdf~HdQZ|~f``JXQtArdےHAZdrtAvpfr˂p|ZdQbfpvbHAZdrtAvpflJtArf~H˂rXQltb~f`HAbےlJtAXQJ`ےdQZ|vXn`JXQrrd|Xv`fbHAXQpfH~˂pZHAdQbtvnXHAZp˂rtAJlpfH~˂pZHAdQbt璀nrXQ|drvppZHAJtArd`fH|drnvpXQr˂|ZdQfpvdrtAJvXnr˂p|ZdQbp˂rJltH~fZHAbtlJnXv`p˂rJltH~fd|ZfpvJ`ےdQZ|vXn`JXQrrd|HAZpdrtAJvpfH˂pZZdQbt~HfJ`ےJf`vbے`lJtArv`frXQJtbdQf`vbے`lJtArJ`ےtAJlfH~bے`|ZdQfpvtAJlfH~pZHAbbtlnXv`ltbvpfHZHAbtlJXQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXndQtArdnXv`bHAZpdrtAJvpfH˂pZZdQbt˂rXQltb~f`HAbےlJtApvnltbQXnvJXQrd|Z~Hfp`ےbZ|dXnvJXQrd|ZHAZp˂tbdQZf`vXJXQrbtlnrXQJtbdQZf`vXے`JJtArd|ZdQp˂rdQZ|l~f`JQr˂fpvbHAZdrtAvpfr˂p|ZdQbfpvbHAZdrtAvpf|ZdQf~H˂rXQltb~f`HAbےlJfJ`ےdQZ|vXn`JXQrrd|Xv`pZdrtpfH~˂pZHAdQbtvnXHAZp˂rtAJlpfH~˂pZHAdQbt璀rXQJ|ltnvppZHAJtArd`ےHA|drnvpXQr˂|ZdQbtlXQJ`ےtbdQvXH~pZHAbnXv`p˂rJltH~fZHAbtlJnXv`p˂rJltH~fbtlfpvJ`ےdQZ|vXn`JXQrpvnbHAZpdrtAJvpfH˂pZZdQbtvnXAJltf`vbے`lJtArv`frXQJtbdQf`vbے`lJfp`ےbbdQZ|fH~bJQr|ZdQZp˂tAJlfH~pZHAbbtlJtArdbHAZZ|df`vے`Jf~HXQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXnJtArdnvfbHAZpdrtAJvpfH˂pZXv`f˂rXQltb~f`HAbےlJtAv`fbdQZ|XnvJXQrd|Z~Hfp`ےbZ|dXnvJXQrvnXHAZp˂drtAf`vX˂pZbtlrXQJ`tbdQZf`vXے`JJtArd|ZdQp˂rrtAJlXnvXQr˂fpvbHAZdrtAvpfr˂p|ZdQbfpvbHAZdrtAvpf|ZdQ~Hfp˂rXQltb~f`HAے`~HfJ`ےdQZ|vXn`JXQrrd|~HfpdrtpfH~˂pZHAdQbtvnXHAZp˂rtAJlpfH~˂pZHAv`frXQJJltH~fHAbےJfpvےbHA|drnvpXQr˂|ZdQbtlXQJ`ےtbdQpfH~pZHAbnXv`p˂rJltH~fZHAbtlJnXv`p˂rJltH~fbtlvnXJ`ےdQZ|vXnJXQrbpvnbHAZpdrtAJvpfH˂pZZdQbtvnXAJltf`vbے`lJtArv`frXQJtbdQf`vے`J~Hfp`ےbbdQZ|`vXn`JXQrnXvZp˂tAJlfH~pZHAbbtlJtArdbHAZZ|df`vJAdf~HXQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXn|ZdQbv`fbHAZpdrtAJvpfHtlJXv`f˂rXQltb~f`HAbےlJtAv`fbdQZ|XnvJXQrd|Z~Hfp`ےbZ|dXnvXQrbtvnXHAZp˂drtAvpf˂pZA`f~rXQJ`tbdQZf`vXے`JJtArd|ZdQbtlnXvZp˂Jltr˂pJtArdnXv`XQJ`ےbdQZ|r˂p|ZdQbfpvbHAZdrtAvpfr˂p|ZdQbv`pvltb~f`HAbےlJtAXv`f˂rXQltbHAbےAHr󙐉H~ㅐfJtArd`f~rXQJ`bnvZHAbtlJf~HbHAZdtAJZHAbtlJnXv`p˂rJltH~fZHAbtlJnrXQdQZ|vXn`JXQrrd|~HfJ`ےdQZ|`JXQrۑpJAH`vXn|ZdQHfpvےbHApfHے`JXQtArdfpvp˂rltbے`JXQtArdf~HXQJ`ےbdQZ|`vXnے`JXQtArdJ`p˂drtAJvpfH˂pZZdQbtpvnbHAZpdtAJl˂pZr󙐂ˁ`vˍpfbtlnXvZp˂f`vXr˂p|ZdQbnXv`XQJ`ےnvpr˂p|ZdQbfpvbHAZdrtAvpfr˂p|ZdQbrXQJbdQZ|~f`HAbےlJtAXv`f˂rXQtbnHAbےZQXb㉀H~ㅐfJtArd`f~rXQJ`nvp`JXQrtlJf~HbHAZfHfZHAbtlJnXv`p˂rJltH~fZHAbtlJ`ےbdrtvXn`JXQrrd|~HfJ`ےvpf`JXQrۑpJAH`vXn|ZdQHfpvےJlfH~˂pZtArdfvnXp˂r`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXnے`JXQtArdHAZp˂AJltvpfH˂pZZdQbtpvnbHAZpHf`˂p`r󙐂ˁ`vˍpfbtlnXvtbdQZf`vXHAbے|ZdQtAv`fXQJ`ےvpfr˂p|ZdQbfpvbHAZdrtAvpfr˂p|ZdQbbHAbdQZ|~f`HAbےlJtAXv`f˂rXQvXnJXQrZQXAHrH~ㅐfJtArd`fH|drnvp`JXQrrd|~HfpJltH~fZHAbtlJnXv`p˂rJltH~fZHAbtlJZp˂drtvXn`JXQrrd|~HfJ`ےJvpfH˂pZHAˁ`Z`vXn|ZdQfpvtAJlfH~˂pZZdQbtvnXbdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXnے`JXQtArdrXQJ`AJltvpfH˂pZZdQbtpvnltb~f`bے`QXb㉀ەvˍp|btlnrXQJtbdQZf`vXHAblJtAv`ffdrtAvpfr˂p|ZdQbfpvbHAZdrtAvpfr˂p|ZdQbےbHAbQZd~f`HAbےlJtAXv`fdQZ|vXnJXQrpJAHrdrQtJtArd`ےHA|drnvp˂pZHArd|pvnJltH~fZHAbtlJnXv`p˂rJltH~fZHAbtlJZp˂rtAJlvXn`JXQrrd|HfpdrtAJvpfH˂pZHAˁ`ZJlt|ZdQZp˂tAJlfH~bے`ZdQbtrXQJ`bdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXnے`JXQtArdrXQJ`tbdQvpfH˂pZZdQbtvnrltb~f`b˂QXb㉀bAdZ|btlrXQJ`tbdQZf`vXJXQrl|ZےHAZdrtAvpfr˂p|ZdQbfpvbHAZdrtAvpfr˂p|ZdQbp˂rZ|d~f`HAbےlJtAXQJ`ےdQZ|vXnpZHAbp`ZQXdrQtJfpvےbHA|drnvp˂pZHAdQbtp˂rJltH~fZHAbtlJnXv`p˂rJltH~fZHAbtlJXQJ`ےrtAJlvXn`JXQrrd|HAZpdrtAJvpfHے`Jb㉀ۑpJltnXvZp˂tAJlfH~bے`lJtArXQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXnے`JXQfpvbHAZtbdQvpfH˂pZZdQbt˂rXQltb~f`XQr˂JAHrbAdZ|`f~rXQJ`tbdQZf`vXJXQHAbd|ZbHAZdrtAvpfr˂p|ZdQbfpvbHAZdrtAvpfr˂p~Hfp˂rZ|rA~f`HAbےlJfJ`ےdQZ|vXnpZHAbˁ`ZQXdrQtHfpvےbHA|drnvpے`JdQbtp˂rJltH~fZHAbtlJnXv`p˂rJltH~fZHAےpvnXQJ`ےJltvXn`JXQrpvnbHAZpdrtAJvpfHے`Jb㉀ۑpJltnXvZp˂tAJlfH~XQr˂lJtArXQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXn`JXQrXv`fbHAXQbdQZ|vpfH˂pZXv`f˂rXQltb~f`XQHAbJAHfbAdZ|`f~rXQJ`tbdQZf`vXpZHAbdtlbHAZdrtAvpfr˂p|ZdQbfpvbHAZdrtAvpfbtl~HfJ`ےdrtA~f`HAے`~HfJ`ےdQZ|vXnے`JXQ`vXndrQtHfpvےbHA|drnvpے`JJfpvp˂rJltH~fZHAbtlJnXv`p˂rJltH~fJtAdpvnbHAZpJltvXnJXQrbpvnbHAZpdrtAJvpfHr˂pvˍpfJltnXvZp˂tAJlfH~XQr˂nvfXQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|`vXn|ZdQbXv`p˂rXQbdQZ|vpfHtlJXv`f˂rXQltb~f`ZHAbH~ㅐfbAdZ|`f~rXQJ`tbdQZf`vXp`JXQ~HfpbHAZdrtAvpfr˂p|ZdQbfpvbHAZdrtAvpftlJvnXJ`ےdrtAJ~f`tAd|~HfJ`ےdQZ|vXnے`JXQ`vXndrQtHfpvےbHA|drnvpr˂pvnXp˂rJltH~fZHAbtlJnXv`p˂rJltے`JXQtArdv`fbHAZpbdQZvXnZdQbtpvnbHAZpdrtAJvpfHr˂pvˍpfJltnXvZp˂tAJlfH~ZHAbv`fXQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےbdQZ|r˂p|ZdQb~Hfp˂b|drvpfےlJtAXv`f˂rXQltb~f``JXQrH~ㅐfbAdZ|`f~rXQJ`tbdQZf`vXے`JXQ~HfpbHAZdrtAvpfr˂p|ZdQbfpvbHAZdtAJZHAbtlJvnXHAZp˂tAJl`JXQrrd|~HfJ`ےdQZ|vXn˂pZ`vXndrQtHfpvےbHA|drnvpr˂pvnXp˂rJltH~fZHAbtlJnXv`p˂rltbے`JXQtArdv`frXQJtbdQZ˂pZZdQbtpvnbHAZpdrtAJvpfHHAbےvˍpfJltnXvZp˂tAJlfH~ZHAbv`f~XQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےnvpr˂p|ZdQb~HXv`ےb|AJlHAbےlJtAXv`f˂rXQltb~f``JXQrH~ㅐfbAdZ|`f~rXQJ`tbdQZf`vX˂pZfpvbHAZdrtAvpfr˂p|ZdQbfpvbHAZfHfZHAbtlJ`f~HAZp˂tbn`JXQrrd|~HfJ`ےdQZ|vXn˂pZ`vXndrQtHfpvےbHA|drnvpHAbےnXv`p˂rJltH~fZHAbtlJnXv`p˂r`vXnے`JXQtArdHfpvrXQJvpf˂pZZdQbtpvnbHAZpdrtAJvpfHHAbvˍpfJltnXvZp˂tAJlfH~`JXQrf~HXQJ`ےbdQZ|`vXnے`JXQtArdf~HXQJ`ےvpfr˂p|ZdQbnXv`p˂Hf`HAbےlJtAXv`f˂rXQltb~f`˂pZHAH~ㅐfbAdZ|`f~rXQJ`tbdQZf`vX˂p`fpvbHAZdrtAvpfr˂p|ZdQbfpvJltH~fZHAbtlJ`f~rXQJ`vXn`JXQrrd|~HfJ`ےdQZ|vXnbے``vXndrQtHfpvےbHA|drnvpJXQrbnXv`p˂rJltH~fZHAbtlJnXv`bdQZ|`vXnے`JXQtArdHfpvےbHAvpfH˂pZZdQbtpvnbHAZpdrtAJvpfHJXQrvˍpfJltnXvZp˂tAJlfH~tl|f~HXQJ`ےbdQZ|`vXnے`JXQtArdfHfdrtAvpfr˂p|ZdQb~HZp˂~f`HAbےlJtAXv`f˂rXQltb~f`˂p`ZH~ㅐfbAdZ|`f~rXQJ`tbdQZf`vXZdQbtfvnXbHAZdrtAvpfr˂p|ZdQbpvnJltH~fZHAbtlJfpvrXQJ`vXn`JXQrrd|~HfJ`ےdQZ|vXnQXb㉀۝`vXndrQtHfpvےbHA|drnvplJtAv`fp˂rJltH~fZHAbtlJrXQJ`bdQZ|`vXnے`JXQtArdnXv`ےbHAvpfH˂pZZdQbtpvnbHAZpdrtAJvpfHpJAHrvˍpfJltnXvZp˂tAJlfH~rd|~HfpXQJ`ےbdQZ|`vXnے`JXQtArdےHAZdrtAvpfr˂p|ZdQbf~HXQJ`ے~f`HAbےlJtAXv`f˂rXQltb~f`ˁ`ZH~ㅐfbAdZ|`f~rXQJ`tbdQZf`vXZdQtArvnXbHAZdrtAvpfr˂p|ZdQbp˂rJltH~fZHAbtlJfpvJltvXn`JXQrrd|~HfJ`ےdQZ|vXnQXAHr󙐝`vXndrQtHfpvےbHA|drnvpd|Zv`fp˂rJltH~fZHAbtlJXQJ`ےbdQZ|`vXnے`JXQtArdnXv`bQZdvpfH˂pZZdQbtpvnbHAZpdrtAJvpfHˁ`ZQXvˍpfJltnXvZp˂tAJlfH~dQbt~HfpXQJ`ےbdQZ|`vXnے`JXQfpvbHAZdrtAvpfr˂p|ZdQbpvnrtAJl~f`HAbےlJtAXv`f˂rXQltb~f`b㉀ۑpH~ㅐfbAdZ|`f~rXQJ`tbdQZf`vXlJtArvnvfbHAZdrtAvpfr˂pnXv`p˂rJltH~fZHAbtlJXv`ftbdQvXn`JXQrrd|~HfJ`ےdQZ|vXnJAHr󙐝`vXndrQtHfpvےbHA|drnvpd|Z~Hfp˂rJltH~fZHAےf~HXQJ`ےbdQZ|`vXnے`JXQtArd~HfZ|dvpfH˂pZZdQbtpvnbHAZpdrtAJvpfHˁ`ZQXvˍpfJltnXvZp˂tAJlfH~dQbtpvnXQJ`ےbdQZ|`vXn`JXQrfpvbHAZdrtAvpfr˂p|ZdQbpvnrtAJl~f`HAbےlJtAXv`f˂rXQltb~f`b㉀ۑpH~ㅐfbAdZ|`f~rXQJ`tbdQZf`vXl|ZdQXv`fbHAZdrtAvpfbtlnXv`p˂rJltH~fZHAbtlJXv`ftbdQvXn`JXQrrd|~HfJ`ےdQZ|vXn`ZQXb`vXndrQtHfpvےbHA|drnvpbtl~Hfp˂rJltH~fJtAdf~HXQJ`ےbdQZ|`vXnے`JXQtArd~HXZ|rAJvpfH˂pZZdQbtpvnbHAZpdrtAJvpfHۑpJvˍpfJltnXvZp˂tAJlfے`JJtArdpvnXQJ`ےbdQZ|`vXn|ZdQbfpvbHAZdrtAvpfr˂p|ZdQbv`fltb~f`HAbےlJtAXv`f˂rXQltb~f`AHr󙐂˕H~ㅐfbAdZ|`f~rXQJ`tbdQZXQHAb|ZdQXv`fbHAZdrtAvpftlJnXv`p˂rJltH~fZHAbtlJ~HfpdQZ|vXn`JXQrrd|~HfJ`ےdQZ|vXn`ZQXb`vXndrQtHfpvےbHA|dtAے`JXQbtl~fpvp˂rJltے`JXQtArdf~HXQJ`ےbdQZ|`vXnے`JXQtArdvnXdrtAJvpfH˂pZZdQbtpvnbHAZpdrtAJvpfZۑpJvˍpfJltKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLL \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv39_1.dat b/vendor/endroid/qr-code/assets/data/qrv39_1.dat new file mode 100644 index 000000000..3e9029bb8 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv39_1.dat @@ -0,0 +1,345 @@ +~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmlklklklklklklklkjijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQOPOPOPOOOPOPOPOPNMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878765656565343434344343433321212121212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvutststststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmlklklklklklklklkjijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQOOOOPOPOOPOPOPOPNMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:98787878787878765656565343434343334343421212121212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopopoponmnmnmnmnmnmnmlklkkkkkkkkklklkjijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababa`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPOOPOOOOOONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCBABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9878787878787878765656565343434343434343421212121212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmklklklkllklkjijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9878787878787878765656565343434343434343421212121212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmklklklkljijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9878787878787878765656565343434343434343421212121212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmklklklkljijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9878787878787878765656565343433333434343421212121212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmklklklkljijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOOONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;:9:9:9:9:9:9:9878787878787878765656565334343433434343421212121212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmklklklkljijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcbabababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOOOOOOPOOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:9878787878787878765656565434343433333334321212121212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmklklklkkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQOPOPOPOPPONMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:98787878787878787656565654343434343434343212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmkkkklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQOPOPOPOPNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:98787878787878787656565654343434343434343212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmlklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQOPOPOPOPNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:98787878787878787656565654343434343434343212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmlklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[ZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQOPOPOPOPNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878787878765656565654343434343433333212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmlklklklklkjijijijijijijijihghghghghghghghgfefefefefefedcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQOPOPOPOPNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878765656565656565653333343443434343212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmlklklkkklklklklkjijijijijijijijihghghghghghghghgfefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQOPOPOOOONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878765656565656565653434343421212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmkkklklkllklklklkjijijijijijijijihghghghghghghghgfefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQOOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878765656565656565653434343421212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqrqrqrqpopopopoponmnmnmnmklklklkllkkkkkkljijijijijijijijihghghghghghghghgfefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878765656565656565653434343421212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{zyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqpopopopopopopoponmnmnmnmklklklklklklklkljijijijijijijijihghghghghghghghgfefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878765656565656565653434343421212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqpopopopopopopoponmnmnmnmklklklklklklklkljijijijijijijijihghghghghghgfefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878765656565656565653434343421212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqpopopopopopopoponmnmnmnmklklklklklklklkljijijijijijijijihghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQPOPOOOOOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878765656565656565653433333321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqpopopopopopopoponmnmnmnmklklklklklklklkljijijijijijijijihghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQOPOPOPOPPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878765656565656565654343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutststststststsrqrqrqrqrqpopopopopopopoponmnmnmnmkkkkkklkklklklkljijijijijijijijihghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUVUVUTSTSTSTSTSTSRQRQRQRQOPOPOPOPOOOOOPOPNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878765656565656565654343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%~}~}~}~}~}~}~}|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmlklklklkklklkkkkjijijijijijijijihghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQOPOPOPOPOPOPOPOPNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABA@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878765656565656565654343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmlklklklkkklklklkjijijijijijihghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQOPOPOPOPOPOPOPOPNMNMNMNMNMNMNMNMLKLKLKLKLKJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878765656565654343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqrqrqrqrqpopopopopopopoponmnmnmnmlklklklklklklklkjijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQOPOPOPOPOPOPOPOPNMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:98787878765656565433333344343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!                + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!                + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!                + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!                + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!                + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!                + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!                + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!            + + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!            + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!            + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!            + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!            + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!               + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!            + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!            + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!            + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!            + + + + + + + + $#$#$#$#"!"!"!"!"!"!"!"!             + + + + + + + + $#$#$#$#"!"!"!"!"!"!"!"!                + + + + + + + + $#$#$#$#"!"!"!"!"!"!"!"!                + + + + + + + + $#$#$#$#"!"!"!"!"!"!"!"!                + + + + + + + + $#$#$#$#"!"!"!"!"!"!"!"!                + + + + + + + + $#$#$#$#"!"!"!"!"!"!"!"!                + + + + + + + + $#$#$#$#"!"!"!"!"!"!"!"!                + + + + + + + + LLKKJJII%%&&''((eeddccbb !!""##YXXWWVVUyyzz{{||~~}} AABBCCDDXXWWVVUU + + iijjkkll00//..--11223344hhggffeeYYZZ[[\\@@??>>==!!""##$$iihhggffeddccbba ffgghhii33221100..//0011kkjjiihh + + VVWWXXYYCCBBAA@@ !!~~{{zzyyxxFFGGHHIISSRRQQPPnnooppqq~~ + +kkqqrrsszzyyxxww SSTTUUVVFFEEDDCC{{||}}~~~~}}||{{CCDDEEFFVVUUTTSS kkllmmnn..--,,++33445566ffeeddcc[[\\]]^^%%$$##""XXYYZZ[[&%%$$##"@@AABBCCYYXXWWVV + + hhiijjkk1100//..00112233iihhggff XXYYZZ[[AA@@??>> !!""##yyxxwwvvHHIIJJKK==<<;;::@@AABBCC;;::9987--..//00llkkjjii + + UUVVWWXXDDCCBBAA }}~~||{{zzyyEEFFGGHHHHGGFFEE))**++,,aa``__^^$$%%&&''UTSRQPOO }}~~||{{zzyyEEFFGGHHTTSSRRQQ mmnnoopp,,++**))55667788ddccbbaa]]^^__``<<;;::99%%&&''((eeddccbba``__^^] + + jjkkllmm//..--,,22334455ggffeeddZZ[[\\]]??>>==<<""##$$%%wwvvuuttJJKKLLMMOONNMMLLrrssttuu}}||{{zz ttuuvvwwvvuuttss + + WWXXYYZZBBAA@@?? !!""zzyyxxwwGGHHIIJJRRQQPPOOooppqqrr**))((''778899::bbaa``____``aabb!! \\]]^^__"!! DDEEFFGGUUTTSSRR llmmnnoo--,,++**44556677eeddccbb\\]]^^__==<<;;::$$%%&&''uuttssrrLLMMNNOO99332211DDEEFFGG6543322111223344hhggffeeYYZZ[[\\@@??>>==!!""##$$xxwwvvuuIIJJKKLLDDCCBBAA--..//00]]\\[[ZZ(())**++NNMMLLKK!!""##$$xxwwvvuuIIJJKKLLPPOONNMMqqrrsstt((''&&%%99::;;<<``__^^]]aabbccdd88776655))**++,,aa``__^^]\\[[ZZYnnooppqq++**))((66778899ccbbaa``^^__``aa;;::9988&&''(())ssrrqqppNNOOPPQQKKJJIIHHvvwwxxyyyyxxwwvvxxyyzz{{rrqqponm[[\\]]^^>>==<<;;##$$%%&&vvuuttssKKLLMMNNNNMMLLKKssttuuvv&&%%$$##;;<<==>>^^]]\\[[ccddeeff``aabbccHHIIJJKKQQPPOONNppqqrrss))((''&&8899::;;aa``__^^``aabbcc99887766(())**++qqppoonnPPQQRRSS00//..--HHIIJJKK100//..-55667788ddccbbaa]]^^__``<<;;::99%%&&''((ttssrrqqMMNNOOPP@@??>>==11223344YYXXWWVV,,--..//JJIIHHGG%%&&''((ttssrrqqMMNNOOPPLLKKJJIIuuvvwwxx$$##""!!==>>??@@\\[[ZZYYeeffgghh44332211--..//00]]\\[[ZZ !!""##YXXWWVVUrrssttuu''&&%%$$::;;<<==__^^]]\\bbccddee77665544**++,,--oonnmmll RRSSTTUUGGFFEEDDzz{{||}}uuttssrr + + ||}}~~lkkjjiih__``aabb::998877''(())**rrqqppooOOPPQQRRJJIIHHGGwwxxyyzz""!! ??@@AABBZZYYXXWW + +gghhiijjddeeffgg~~LLMMNNOOMMLLKKJJttuuvvww%%$$##""<<==>>??]]\\[[ZZddeeffgg55443322,,--..//mmllkkjj + +TTUUVVWW,,++**))LLMMNNOO-,,++**)99::;;<<``__^^]]aabbccdd88776655))**++,,ppoonnmm QQRRSSTT<<;;::9955667788UUOONNMM00112233FFEEDDCC))**++,,ppoonnmm QQRRSSTTHHGGFFEEyyzz{{||~~}} AABBCCDDXXWWVVUU + + iijjkkll00//..--11223344YYXXWWVV$$%%&&''UTSRQPOOvvwwxxyy##""!! >>??@@AA[[ZZYYXX ffgghhii33221100..//0011kkjjiihh + + VVWWXXYYCCBBAA@@ !!~~qqkkjjii hggffeedccddeeff66554433++,,--..nnmmllkk SSTTUUVVFFEEDDCC{{||}}~~~~}}||{{CCDDEEFFVVUUTTSS kkllmmnn hhiijjkk}}||{{zzPPQQRRSSIIHHGGFFxxyyzz{{~~!! @@AABBCCYYXXWWVV + + hhiijjkk1100//..00112233iihhggff XXYYZZ[[((''&&%%UUVVWWXX)((''&&%==>>??@@\\[[ZZYYeeffgghh44332211--..//00llkkjjii + + UUVVWWXX8877665599::;;<>==<<""##$$%%hhggffeedccbbaa` + +gghhiijj221100////001122jjiihhgg + + WWXXYYZZBBAA@@?? !!""zzyyxxwwGGHHIIJJRRQQPPOOooppqqrr~~}} + + qqrrssttyyxxwwvv TTUUVVWWEEDDCCBB||}}~~}}||{{zzDDEEFFGGUUTTSSRR llmmnnoo--,,++**44556677eeddccbb\\]]^^__$$##""!!YYZZ[[\\%$$##""!AABBCCDDXXWWVVUU + + iijjkkll00//..--11223344hhggffeeYYZZ[[\\44332211==>>??@@HHGGFFEE==>>??@@>>==<<;;11223344hhggffeeYYZZ[[\\@@??>>==!!""##$$xxwwvvuuIIJJKKLLPPOONNMMqqrrsstt((''&&%%99::;;<>==<<;;##$$%%&&vvuuttssKKLLMMNNNNMMLLKKssttuuvv||{{zzyyuuvvwwxxuuttssrr + + XXYYZZ[[AA@@??>> !!""##yyxxwwvvHHIIJJKKQQPPOONNppqqrrss))((''&&8899::;;aa``__^^``aabbcc ]]^^__``! EEFFGGHHTTSSRRQQ mmnnoopp,,++**))55667788ddccbbaa]]^^__``00//..--AABBCCDDDDCCBBAAAABBCCDD::99876555667788ddccbbaa]]^^__``<<;;::99%%&&''((ttssrrqqMMNNOOPPLLKKJJIIuuvvwwxx$$##""!!==>>??@@HHGGFFEE00112233FFEEDDCC""##$$%%wwvvuuttJJKKLLMMOONNMMLLrrssttuu''&&%%$$::;;<<==__^^]]\\bbccddee77665544**++,,--``__^^]] \[[ZZYYXooppqqrr**))((''778899::bbaa``____``aabb::998877''(())**rrqqppooOOPPQQRRJJIIHHGGwwxxyyzzxxwwvvuuyyzz{{||qqponmlk\\]]^^__==<<;;::$$%%&&''uuttssrrLLMMNNOOMMLLKKJJttuuvvww%%$$##""<<==>>??]]\\[[ZZddeeffggaabbccddIIJJKKLLPPOONNMMqqrrsstt((''&&%%99::;;<<``__^^]]aabbccdd,,++**))EEFFGGHH@@??>>==EEFFGGHH4332211099::;;<<``__^^]]aabbccdd88776655))**++,,ppoonnmm QQRRSSTTHHGGFFEEyyzz{{||~~}} AABBCCDDDDCCBBAA99::;;<>??@@AA[[ZZYYXX ffgghhii33221100..//0011\\[[ZZYY!!""##$$XWWVVUUTssttuuvv&&%%$$##;;<<==>>^^]]\\[[ccddeeff66554433++,,--..nnmmllkk SSTTUUVVFFEEDDCC{{||}}~~ttssrrqq + + }}~~kjjiihhg``aabbcc99887766(())**++qqppoonnPPQQRRSSIIHHGGFFxxyyzz{{~~!! @@AABBCCYYXXWWVV + + hhiijjkkeeffgghh~~}}MMNNOOPPLLKKJJIIuuvvwwxx$$##""!!==>>??@@\\[[ZZYYeeffgghh((''&&%%IIJJKKLL<<;;::99IIJJKKLL0//..--,==>>??@@\\[[ZZYYeeffgghh44332211--..//00llkkjjii + + UUVVWWXXDDCCBBAA }}~~||{{zzyyEEFFGGHH@@??>>====>>??@@>>==<<;;**++,,--oonnmmll RRSSTTUUGGFFEEDDzz{{||}}~~}}||BBCCDDEEWWVVUUTT + + jjkkllmm//..--,,22334455XXWWVVUU%%&&''((SRQPOONNwwxxyyzz""!! ??@@AABBZZYYXXWW + +gghhiijj221100////001122jjiihhgg + + WWXXYYZZBBAA@@?? !!""kkjjiihh gffeeddcddeeffgg55443322,,--..//mmllkkjj + +TTUUVVWWEEDDCCBB||}}~~}}||{{zzDDEEFFGGUUTTSSRR llmmnnoo iijjkkqq||{{zzyyQQRRSSTTHHGGFFEEyyzz{{||~~}} AABBCCDDXXWWVVUU + + iijjkkll$$##""!!MMNNOOPP33221100MMNNOOUU,++**))(AABBCCDDXXWWVVUU + + iijjkkll00//..--11223344hhggffeeYYZZ[[\\@@??>>==!!""##$$xxwwvvuuIIJJKKLL<<;;::99AABBCCDD::998765..//0011kkjjiihh + + VVWWXXYYCCBBAA@@ !!~~{{zzyyxxFFGGHHIISSRRQQPPnnooppqq++**))((66778899OONNMMLL))**++,,MMLLKKJJ{{||}}~~~~}}||{{CCDDEEFFVVUUTTSS kkllmmnn..--,,++33445566ffeeddcc[[\\]]^^>>==<<;;##$$%%&&ggffeeddcbbaa``_ + + hhiijjkk1100//..00112233iihhggff XXYYZZ[[AA@@??>> !!""##yyxxwwvvHHIIJJKKQQPPOONNppqqrrss~~}}|| + + rrssttuuxxwwvvuu UUVVWWXXDDCCBBAA }}~~||{{zzyyEEFFGGHHTTSSRRQQ mmnnoopp~~}} QQRRSSTT//..--,,VVWWXXYY(''&&%%$EEFFGGHHTTSSRRQQ mmnnoopp,,++**))55667788ddccbbaa]]^^__``<<;;::99%%&&''((ttssrrqqMMNNOOPP33221100EEFFGGHH4332211022334455ggffeeddZZ[[\\]]??>>==<<""##$$%%wwvvuuttJJKKLLMMOONNMMLLrrssttuu''&&%%$$::;;<<==KKJJIIHH--..//00IIHHGGFF !!""zzyyxxwwGGHHIIJJRRQQPPOOooppqqrr**))((''778899::bbaa``____``aabb::998877''(())**ccbbaa``_^^]]\\[ llmmnnoo--,,++**44556677eeddccbb\\]]^^__==<<;;::$$%%&&''uuttssrrLLMMNNOOMMLLKKJJttuuvvww{{zzyyxxvvwwxxyyttssrrqq + + YYZZ[[\\@@??>>==!!""##$$xxwwvvuuIIJJKKLLPPOONNMMqqrrsstt||{{zzyyUUVVWWXX++**))((ZZ[[\\]]$##""!! IIJJKKLLPPOONNMMqqrrsstt((''&&%%99::;;<<``__^^]]aabbccdd88776655))**++,,ppoonnmm QQRRSSTT//..--,,IIJJKKLL0//..--,66778899ccbbaa``^^__``aa;;::9988&&''(())ssrrqqppNNOOPPQQKKJJIIHHvvwwxxyy##""!! >>??@@AAGGFFEEDD11223399EEDDCCBB##$$%%&&vvuuttssKKLLMMNNNNMMLLKKssttuuvv&&%%$$##;;<<==>>^^]]\\[[ccddeeff66554433++,,--..__^^]]\\ !![ZZYYXXWppqqrrss))((''&&8899::;;aa``__^^``aabbcc99887766(())**++qqppoonnPPQQRRSSIIHHGGFFxxyyzz{{wwvvuutt zz{{||}}ponmlkkj]]^^__``<<;;::99%%&&''((ttssrrqqMMNNOOPPLLKKJJIIuuvvwwxxxxwwvvuuYYZZ[[\\''&&%%$$^^__``aa MMNNOOPPLLKKJJIIuuvvwwxx$$##""!!==>>??@@\\[[ZZYYeeffgghh44332211--..//00llkkjjii + + UUVVWWXX++**))((MMNNOOUU,++**))(::;;<<==__^^]]\\bbccddee77665544**++,,--oonnmmll RRSSTTUUGGFFEEDDzz{{||}}~~}}||BBCCDDEECCBBAA@@::;;<<==AA@@??>>''(())**rrqqppooOOPPQQRRJJIIHHGGwwxxyyzz""!! ??@@AABBZZYYXXWW + +gghhiijj221100////001122[[ZZYYXX""##$$%%WVVUUTSRttuuvvww%%$$##""<<==>>??]]\\[[ZZddeeffgg55443322,,--..//mmllkkjj + +TTUUVVWWEEDDCCBB||}}~~ssrrqqkk + + ~~jiihhggfaabbccdd88776655))**++,,ppoonnmm QQRRSSTTHHGGFFEEyyzz{{||ttssrrqq]]^^__``##""!! bbccddeeQQRRSSTTHHGGFFEEyyzz{{||~~}} AABBCCDDXXWWVVUU + + iijjkkll00//..--11223344hhggffeeYYZZ[[\\''&&%%$$VVWWXXYY(''&&%%$>>??@@AA[[ZZYYXX ffgghhii33221100..//0011kkjjiihh + + VVWWXXYYCCBBAA@@ !!~~{{zzyyxxFFGGHHII??>>==<<>>??@@AA==<<;;::++,,--..nnmmllkk SSTTUUVVFFEEDDCC{{||}}~~~~}}||{{CCDDEEFFVVUUTTSS kkllmmnn..--,,++33445566WWVVUUOO&&''(())QPOONNMMxxyyzz{{~~!! @@AABBCCYYXXWWVV + + hhiijjkk1100//..00112233iihhggff XXYYZZ[[AA@@??>> !!""##jjiihhggfeeddccbeeffgghh44332211--..//00llkkjjii + + UUVVWWXXDDCCBBAA }}~~ppoonnmm aabbccddffgghhii~~}}||UUVVWWXXDDCCBBAA }}~~||{{zzyyEEFFGGHHTTSSRRQQ mmnnoopp,,++**))55667788ddccbbaa]]^^__``##""!! ZZ[[\\]]$##""!! BBCCDDEEWWVVUUTT + + jjkkllmm//..--,,22334455ggffeeddZZ[[\\]]??>>==<<""##$$%%wwvvuuttJJKKLLMM;;::9933BBCCDDEE99876543//001122jjiihhgg + + WWXXYYZZBBAA@@?? !!""zzyyxxwwGGHHIIJJRRQQPPOOooppqqrr**))((''778899::NNMMLLKK**++,,--LLKKJJII||}}~~}}||{{zzDDEEFFGGUUTTSSRR llmmnnoo--,,++**44556677eeddccbb\\]]^^__==<<;;::$$%%&&''ffeeddccbaa``__^ + + iijjkkll00//..--11223344hhggffeeYYZZ[[\\@@??>>==!!""##$$llkkjjii + + eeffgghhjjkkqqrr{{zzyyxxYYZZ[[\\@@??>>==!!""##$$xxwwvvuuIIJJKKLLPPOONNMMqqrrsstt((''&&%%99::;;<<``__^^]]aabbccdd^^__``aa FFGGHHIISSRRQQPPnnooppqq++**))((66778899ccbbaa``^^__``aa;;::9988&&''(())ssrrqqppNNOOPPQQ221100//FFGGHHII3221100/33445566ffeeddcc[[\\]]^^>>==<<;;##$$%%&&vvuuttssKKLLMMNNNNMMLLKKssttuuvv&&%%$$##;;<<==>>JJIIHHGG..//0011HHGGFFEE !!""##yyxxwwvvHHIIJJKKQQPPOONNppqqrrss))((''&&8899::;;aa``__^^``aabbcc99887766(())**++bbaa``__^]]\\[[Z mmnnoopp,,++**))55667788ddccbbaa]]^^__``<<;;::99%%&&''((hhggffee + + iijjkkllssttuuvvwwvvuutt + +]]^^__``<<;;::99%%&&''((ttssrrqqMMNNOOPPLLKKJJIIuuvvwwxx$$##""!!==>>??@@\\[[ZZYYeeffgghhbbccddeeJJKKLLMMOONNMMLLrrssttuu''&&%%$$::;;<<==__^^]]\\bbccddee77665544**++,,--oonnmmll RRSSTTUU..--,,++JJKKLLMM/..--,,+778899::bbaa``____``aabb::998877''(())**rrqqppooOOPPQQRRJJIIHHGGwwxxyyzz""!! ??@@AABBFFEEDDCC223399::DDCCBBAA$$%%&&''uuttssrrLLMMNNOOMMLLKKJJttuuvvww%%$$##""<<==>>??]]\\[[ZZddeeffgg55443322,,--..//^^]]\\[[ !!""ZYYXXWWVqqrrsstt((''&&%%99::;;<<``__^^]]aabbccdd88776655))**++,,ddccbbaa mmnnoopp wwxxyyzzssrrqqpo aabbccdd88776655))**++,,ppoonnmm QQRRSSTTHHGGFFEEyyzz{{||~~}} AABBCCDDXXWWVVUU + + iijjkkllffgghhii~~}}||NNOOPPQQKKJJIIHHvvwwxxyy##""!! >>??@@AA[[ZZYYXX ffgghhii33221100..//0011kkjjiihh + + VVWWXXYY**))((''NNOOUUVV+**))((';;<<==>>^^]]\\[[ccddeeff66554433++,,--..nnmmllkk SSTTUUVVFFEEDDCC{{||}}~~~~}}||{{CCDDEEFFBBAA@@??;;<<==>>@@??>>==(())**++qqppoonnPPQQRRSSIIHHGGFFxxyyzz{{~~!! @@AABBCCYYXXWWVV + + hhiijjkk1100//..00112233ZZYYXXWW##$$%%&&VUUTSRQPuuvvwwxx$$##""!!==>>??@@\\[[ZZYYeeffgghh44332211--..//00``__^^]]qqrrsstt~~}}||{{ + + + +{{||}}~~nmlkkjjieeffgghh44332211--..//00llkkjjii + + UUVVWWXXDDCCBBAA }}~~||{{zzyyEEFFGGHHTTSSRRQQ mmnnoopp jjkkqqrr{{zzyyxxRRSSTTUUGGFFEEDDzz{{||}}~~}}||BBCCDDEEWWVVUUTT + + jjkkllmm//..--,,22334455ggffeeddZZ[[\\]]&&%%$$##WWXXYYZZ'&&%%$$#??@@AABBZZYYXXWW + +gghhiijj221100////001122jjiihhgg + + WWXXYYZZBBAA@@?? !!""zzyyxxwwGGHHIIJJ>>==<<;;??@@AABB<<;;::99,,--..//mmllkkjj + +TTUUVVWWEEDDCCBB||}}~~}}||{{zzDDEEFFGGUUTTSSRR llmmnnoo--,,++**44556677VVUUOONN''(())**OONNMMLLyyzz{{||~~}} AABBCCDDXXWWVVUU + + iijjkkll00//..--11223344\\[[ZZYYuuvvwwxxzzyyxxww ihhggffe + + iijjkkll00//..--11223344hhggffeeYYZZ[[\\@@??>>==!!""##$$xxwwvvuuIIJJKKLLPPOONNMMqqrrsstt~~}}||{{ + + ssttuuvvwwvvuutt + +VVWWXXYYCCBBAA@@ !!~~{{zzyyxxFFGGHHIISSRRQQPPnnooppqq++**))((66778899ccbbaa``^^__``aa""!! [[\\]]^^#""!! CCDDEEFFVVUUTTSS kkllmmnn..--,,++33445566ffeeddcc[[\\]]^^>>==<<;;##$$%%&&vvuuttssKKLLMMNN::993322CCDDEEFF8765433200112233iihhggff XXYYZZ[[AA@@??>> !!""##yyxxwwvvHHIIJJKKQQPPOONNppqqrrss))((''&&8899::;;MMLLKKJJ++,,--..KKJJIIHH }}~~||{{zzyyEEFFGGHHTTSSRRQQ mmnnoopp,,++**))55667788XXWWVVUUyyzz{{||vvuuttsseddccbba mmnnoopp,,++**))55667788ddccbbaa]]^^__``<<;;::99%%&&''((ttssrrqqMMNNOOPPLLKKJJIIuuvvwwxxzzyyxxwwwwxxyyzzssrrqqpo ZZ[[\\]]??>>==<<""##$$%%wwvvuuttJJKKLLMMOONNMMLLrrssttuu''&&%%$$::;;<<==__^^]]\\bbccddee__``aabbGGHHIIJJRRQQPPOOooppqqrr**))((''778899::bbaa``____``aabb::998877''(())**rrqqppooOOPPQQRR1100//..GGHHIIJJ21100//.44556677eeddccbb\\]]^^__==<<;;::$$%%&&''uuttssrrLLMMNNOOMMLLKKJJttuuvvww%%$$##""<<==>>??IIHHGGFF//001122GGFFEEDD!!""##$$xxwwvvuuIIJJKKLLPPOONNMMqqrrsstt((''&&%%99::;;<>??@@AA[[ZZYYXX ffgghhiiccddeeffKKLLMMNNNNMMLLKKssttuuvv&&%%$$##;;<<==>>^^]]\\[[ccddeeff66554433++,,--..nnmmllkk SSTTUUVV--,,++**KKLLMMNN.--,,++*8899::;;aa``__^^``aabbcc99887766(())**++qqppoonnPPQQRRSSIIHHGGFFxxyyzz{{~~!! @@AABBCCEEDDCCBB3399::;;CCBBAA@@%%&&''((ttssrrqqMMNNOOPPLLKKJJIIuuvvwwxx$$##""!!==>>??@@PPOONNMM!!""##$$iihhggff]\\[[ZZYuuvvwwxx$$##""!!==>>??@@\\[[ZZYYeeffgghh44332211--..//00llkkjjii + + UUVVWWXXDDCCBBAA }}~~rrqqkkjj ihhggffebbccddee77665544**++,,--oonnmmll RRSSTTUUGGFFEEDDzz{{||}}~~}}||BBCCDDEEWWVVUUTT + + jjkkllmmgghhiijj~~}}||{{OOPPQQRRJJIIHHGGwwxxyyzz""!! ??@@AABBZZYYXXWW + +gghhiijj221100////001122jjiihhgg + + WWXXYYZZ))((''&&OOUUVVWW*))((''&<<==>>??]]\\[[ZZddeeffgg55443322,,--..//mmllkkjj + +TTUUVVWWEEDDCCBB||}}~~}}||{{zzDDEEFFGGAA@@??>><<==>>????>>==<<))**++,,ppoonnmm QQRRSSTTHHGGFFEEyyzz{{||~~}} AABBCCDDDDCCBBAA }}~~||{{zzyyEEFFGGHH@@??>>====>>??@@>>==<<;;**++,,--oonnmmll RRSSTTUUGGFFEEDDzz{{||}}~~}}||BBCCDDEE@@??>>==EEFFGGHH//..--,,BBCCDDEE@@??>>==!!""##$$xxwwvvuuIIJJKKLL<<;;::99AABBCCDD::998765..//0011kkjjiihh + + VVWWXXYYCCBBAA@@ !!~~{{zzyyxxFFGGHHII<<;;::99IIJJKKLL++**))((FFGGHHII<<;;::99%%&&''((ttssrrqqMMNNOOPP33221100EEFFGGHH4332211022334455ggffeeddZZ[[\\]]??>>==<<""##$$%%wwvvuuttJJKKLLMM33221100MMNNOOUU''&&%%$$JJKKLLMM88776655))**++,,ppoonnmm QQRRSSTT//..--,,IIJJKKLL0//..--,66778899ccbbaa``^^__``aa;;::9988&&''(())ssrrqqppNNOOPPQQ//..--,,VVWWXXYY##""!! NNOOPPQQ44332211--..//00llkkjjii + + UUVVWWXX++**))((MMNNOOUU,++**))(::;;<<==__^^]]\\bbccddee77665544**++,,--oonnmmll RRSSTTUU++**))((ZZ[[\\]]~~}}||RRSSTTUU00//..--11223344hhggffeeYYZZ[[\\''&&%%$$VVWWXXYY(''&&%%$>>??@@AA[[ZZYYXX ffgghhii33221100..//0011kkjjiihh + + VVWWXXYY''&&%%$$^^__``aa{{zzyyxxVVWWXXYY,,++**))55667788ddccbbaa]]^^__``##""!! ZZ[[\\]]$##""!! BBCCDDEEWWVVUUTT + + jjkkllmm//..--,,22334455ggffeeddZZ[[\\]]##""!! bbccddeewwvvuuttZZ[[\\]]((''&&%%99::;;<<``__^^]]aabbccdd^^__``aa FFGGHHIISSRRQQPPnnooppqq++**))((66778899ccbbaa``^^__``aaffgghhiissrrqqpp^^__``aa$$##""!!==>>??@@\\[[ZZYYeeffgghhbbccddeeJJKKLLMMOONNMMLLrrssttuu''&&%%$$::;;<<==__^^]]\\bbccddeejjkkqqrroonnmmll bbccddee~~}} AABBCCDDXXWWVVUU + + iijjkkllffgghhii~~}}||NNOOPPQQKKJJIIHHvvwwxxyy##""!! >>??@@AA[[ZZYYXX ffgghhiissttuuvvkkjjiihh + + ffgghhii||{{zzyyEEFFGGHHTTSSRRQQ mmnnoopp jjkkqqrr{{zzyyxxRRSSTTUUGGFFEEDDzz{{||}}~~}}||BBCCDDEEWWVVUUTT + + jjkkllmm wwxxyyzzggffeedd + + jjkkllmmxxwwvvuuIIJJKKLLPPOONNMMqqrrsstt~~}}||{{ + + ssttuuvvwwvvuutt + +VVWWXXYYCCBBAA@@ !!~~{{zzyyxxFFGGHHIISSRRQQPPnnooppqq~~}}||{{ + + + +{{||}}~~ccbbaa``nnooppqqttssrrqqMMNNOOPPLLKKJJIIuuvvwwxxzzyyxxwwwwxxyyzzssrrqqpo ZZ[[\\]]??>>==<<""##$$%%wwvvuuttJJKKLLMMOONNMMLLrrssttuuzzyyxxww __^^]]\\rrssttuuppoonnmm QQRRSSTTHHGGFFEEyyzz{{||vvuuttss + +{{||}}~~nmlkkjji^^__``aa;;::9988&&''(())ssrrqqppNNOOPPQQKKJJIIHHvvwwxxyyvvuuttss[[ZZYYXXvvwwxxyyllkkjjii + + UUVVWWXXDDCCBBAA }}~~rrqqkkjj ihhggffebbccddee77665544**++,,--oonnmmll RRSSTTUUGGFFEEDDzz{{||}}rrqqkkjjWWVVUUTTzz{{||}}hhggffeeYYZZ[[\\@@??>>==!!""##$$iihhggffeddccbba ffgghhii33221100..//0011kkjjiihh + + VVWWXXYYCCBBAA@@ !!~~iihhggffSSRRQQPP !!~~ddccbbaa]]^^__``<<;;::99%%&&''((eeddccbba``__^^] + + jjkkllmm//..--,,22334455ggffeeddZZ[[\\]]??>>==<<""##$$%%eeddccbb !!""##OONNMMLL""##$$%%``__^^]]aabbccdd88776655))**++,,aa``__^^]\\[[ZZYnnooppqq++**))((66778899ccbbaa``^^__``aa;;::9988&&''(())aa``__^^$$%%&&''KKJJIIHH&&''(())\\[[ZZYYeeffgghh44332211--..//00]]\\[[ZZ !!""##YXXWWVVUrrssttuu''&&%%$$::;;<<==__^^]]\\bbccddee77665544**++,,--]]\\[[ZZ(())**++GGFFEEDD**++,,--XXWWVVUU + + iijjkkll00//..--11223344YYXXWWVV$$%%&&''UTSRQPOOvvwwxxyy##""!! >>??@@AA[[ZZYYXX ffgghhii33221100..//0011YYXXWWVV,,--..//CCBBAA@@..//0011TTSSRRQQ mmnnoopp,,++**))55667788UUOONNMM(())**++NNMMLLKKzz{{||}}~~}}||BBCCDDEEWWVVUUTT + + jjkkllmm//..--,,22334455UUOONNMM00112233??>>==<<22334455PPOONNMMqqrrsstt((''&&%%99::;;<>??@@HHGGFFEE00112233FFEEDDCC""##$$%%wwvvuuttJJKKLLMMOONNMMLLrrssttuu''&&%%$$::;;<<==HHGGFFEE==>>??@@77665544::;;<<==HHGGFFEEyyzz{{||~~}} AABBCCDDDDCCBBAA99::;;<>??@@AADDCCBBAAAABBCCDD33221100>>??@@AAfpvfpvXQJ`ےXQJ`ےtAJlf`vXfH~ے`JXtlJtlJf~Hf~HbHAZbHAZJlt`vXn`vXnr˂pr˂ptlJtlJf~HfHfbHAZJltJlt`vXn`vXnpZHAblJtArdQbt璅fpvHAZpbHAZpltbltbvXnvXn˂pZ˂pZlJtA~Hf~HfbHAZpbHAZpltbltbvXnvXn˂pZlJtAlJtA`f~nXvbHAtbdQJltXnv˂pZHA˂pZHAlJtArlJtAr~Hfp~HfpHAZp˂HAZp˂tbdQXnvXnv˂pZHA˂pZHAlJtArlJtAr~HfpHfpvHAZp˂|drtbdQZfH~r˂pZJXQrJtArdJtArdHfpvZp˂Zp˂tbdQZtbdQZnvpnvppZHAbpZHAJtArdHfpvHfpvZp˂Zp˂tbdQZtbdQZnvpnvpXQr˂JtArd~HfpXv`fp˂rp˂rbdQZ|bdQZ|vpfZHAbZHAbtArdtArdfpvfpvp˂rnXv`nXv`bHAZbHAZtbdQZnvpf`vXQrZHAtArdtArdfpvfpvp˂rp˂rbdQZ|vpfvpfZHAbZHAbtArdtArdfpvpvnp˂rbdQZ|bdQZ|vpfvpfے`Jd|Zl|ZdQnXv`˂rXQ˂rXQdQZ|dQZ|vpfHvpfHHAbےHAے`rd|pvnpvn˂rXQ˂rXQdQZ|dQZ|vpfHvpfےHAbےrd|rd|Hfpv`pvZp˂Z|dbdQZ|pfH~bے`bے`d|Zd|ZvnXvnXrXQJrXQJZ|dpfH~pfH~bے`bے`d|Zd|ZvnXnrXQrXQJtAJl|drf`vXAb`JpZHA|ZdQ|ZdQnXvrXQJ`rXQJ`|dr|drfH~fH~ے`Jے`JXQ|ZdQnXvnXvrXQJ`rXQJ`|dr|drfH~fے`Jp`JXQ|ZdQvnX~fpvXQJ`ےXQJ`ےdrtAdtAJH~fے`JXQے`JXQ|ZdQb|ZdQbnXv`nXv`XQJ`ےf~Hf~Hp˂rp˂r|drfH~nvpbے`|ZdQb|ZdQbnXv`nXv`XQJ`ےXQJ`ےdrtAH~fH~fے`JXQے`JXQ|ZdQb|ZdQbnXv`rXQJ`XQJ`ےdrtAdrtAH~fH~fXQr˂dQtArdbtlf~HJ`ےJ`ےdrtAJdrtAJ~f`~f``JXQrJXQrbZdQbtXv`fXv`fJ`ےJ`ےdrtAJdrtAJ~f``JXQr`JXQrZdQbtZdQbtnXvnrXQJrXQJ`rtAJAJl璐f`vJXQrJXQrdQbtdQbtv`fv`f`ےb`ےJlrtAJlf`vf`vJXQrJXQrdQbtdQbtv`fJ`ے`ےbtbdQZtAdQZ|nvpXQr˂bJQrbtlbtl`f~ےbHAےbHAtAJltAJlf`vXf`vXXQr˂rbtbtl`f~`f~ےbHAےbHAtAJltAJlf`vXXQHAbr˂pbtlv`fnXv`bHAZbHAZJltltb`vXnr˂pr˂ptlJtlJf~Hf~HbHAZfpvfpvXQJ`ےXQJ`ےtAJlf`vXfH~JXQrtlJtlJf~Hf~HbHAZJltJlt`vXn`vXnr˂pr˂ptlJtlJf~HےHAZbHAZJltJlt`vXn`vXnpZHAb|ZdQJtArdfpvbHAZpbHAZpltbltbvXnvXn˂pZtlJlJtA~Hf~HfbHAZpbHAZpltbltbvXn˂pZ˂pZlJtAlJtA`f~`p˂ےbHAbdQZ|tbnXnv˂pZHA˂pZHAlJtArlJtAr~Hfp~HfpHAZp˂tbdQtbdQXnvXnv˂pZHA˂pZHAlJtArlJtAr~HfpHAZp˂HAZp˂|ltdrtAfH~pZHAb˂pZJtArdJfpvHfpvZp˂Zp˂tbdQZtbdQZnvpnvppZHAblJtAdJtArdHfpvHfpvZp˂Zp˂tbdQZtbdQZnvpے`JXQZHAbJtArd~Hfpf~Hp˂rp˂rbdQZ|nvpvpfZHAbZHAbtArdtArdfpvfpvp˂rnXv`nXv`bHAZbHAZtdrtAnvpvpf˂pZHAtArdtArdfpvfpvp˂rbdQZ|bdQZ|vpfvpfZHAbZHAbtArdtArdfpvp˂rp˂rbdQZ|bdQZ|vpfvpfے`Jbtl|ZdQnvf˂rXQ˂rXQdQZ|dQZ|vpfHvpfHHAbےtAd|rd|pvnpvn˂rXQ˂rXQdQZ|dQZ|vpfHHAbےHAbےrd|rd|HXv`rXQJ`Zp˂drtAvpfHpfH~bے`bے`d|Zd|ZvnXvnXrXQJZ|dZ|dpfH~pfH~bے`bے`d|Zd|ZvnXrXQJrXQJbdQZ|Jltf`vXے`JHAbے|ZdQnXvnXvrXQJ`rXQJ`|dr|drfH~fH~ے`J|ZdQ|ZdQnXvnXvrXQJ`rXQJ`|dr|dtAfH~r˂pے`JXQtlJvnXfpvXQJ`ےXQJ`ےdrtAfHfH~fے`JXQے`JXQ|ZdQb|ZdQbnXv`nXv`XQJ`ےf~Hf~Hp˂rp˂rJlt`vXnے`JXQbے`|ZdQb|ZdQbnXv`nXv`XQJ`ےdrtAdrtAH~fH~fے`JXQے`JXQ|ZdQb|ZdQbnXv`XQJ`ےXQJ`ےdrtAdrtAH~fH~fXQHAbJtArdbtl~HfpJ`ےJ`ےdrtAJdrtAJ~f`~f``JXQrZdQbtZdQbtXv`fXv`fJ`ےJ`ےdrtAJdtAJl~f``JXQr`JXQrZdQbtZdQbtf~HےbHArXQJ`Jltf`vf`vJXQrJXQrdQbtdQbtv`fv`f`ےbrtAJlrtAJlf`vf`vJXQrJXQrdQbtdQbtv`f`ےb`ےbdrtAbdQZ|H~fXQr˂`JXQrbtl`f~`f~ےbHAےbHAtAJltAJlf`vXf`vXXQr˂btlbtl`f~`f~ےbHAےbHAtAJlJltf`vXZHAbr˂ptArdv`f~nXv`bHAZbHAZJlt`vXn`vXnr˂pr˂ptlJtlJf~HfHfbHAZfpvfpvXQJ`ےXQJ`ےbdQZ|vpfrZHAJXQrtlJtlJf~HfHfbHAZJltJlt`vXn`vXnr˂pr˂ptlJtlJf~HbHAZbHAZJltJlt`vXn`vXnے`JXQ|ZdQJtArdvnXbHAZpbHAZpltbltbvXnvXn˂pZlJtAlJtA~Hf~HfbHAZpbHAZpltbtbnvXn˂pZ˂pZlJtAlJtAfpvZp˂p˂rbdQZ|XnvXnv˂pZHA˂pZHAlJtArlJtAr~HfpHfpvHAZp˂tbdQtbdQXnvXnv˂pZHA˂pZHAlJtArlJfp~HfpHAZp˂HAZp˂Jltltb`vXnpZHAb˂pZAJtArdHfpvHfpvZp˂Zp˂tbdQZtbdQZnvpnvppZHAbJtArdJtArdHfpvHfpvZp˂Zp˂tbdQZbnvnvpے`JXQZHAb|ZdQbfpvf~Hp˂rp˂rbdQZ|vpfvpfZHAbZHAbtArdtArdfpvpvnp˂rnXv`nXv`bHAZbHAZdrtAH~fbے`˂pZAbtArdtArdfpvpvnp˂rbdQZ|bdQZ|vpfvpfZHAbZHAbtArdfpvfpvp˂rp˂rbdQZ|bdQZ|vpfvpfr˂pbtltlJv`f˂rXQ˂rXQdQZ|dQZ|vpfHvpfےHAbےrd|rd|pvnpvn˂rXQ˂rXQdQZ|vpfvpfHHAbےHAbےrd|rd|nXv`bHAZXQJ`ےdrtApfH~pfH~bے`bے`d|Zd|ZvnXnrXQrXQJZ|dZ|dpfH~pfH~bے`bے`d|ZvnXvnXrXQJrXQJbdQZ|nvpvpfJQr`JXQ|ZdQnXvnXvrXQJ`rXQJ`|dr|drfH~fے`Jے`J|ZdQ|ZdQnXvnXvrXQJ`rXQJ`|drpfHfH~r˂p˂pZtlJnXv`fvnXXQJ`ےXQJ`ےdrtAH~fH~fے`JXQے`JXQ|ZdQb|ZdQbnXv`rXQJ`XQJ`ےf~Hf~Hp˂rp˂rJlt`vXnJXQr˒`JXQ|ZdQb|ZdQbnXv`rXQJ`XQJ`ےdrtAdrtAH~fH~fے`JXQے`JXQ|ZdQbnXv`nXv`XQJ`ےXQJ`ےdrtAdrtAH~fH~fZHAb|ZdQbfpv~HfpJ`ےJ`ےdrtAJdrtAJ~f``JXQr`JXQrZdQbtZdQbtXv`fXv`fJ`ےJ`ےdrtAJHf`~f``JXQr`JXQrZdQbtZdQbtf~Hp˂rbHAZJltbf`vf`vJXQrJXQrdQbtdQbtv`fJ`ے`ےbrtAJlrtAJlf`vf`vJXQrJXQrdQbtv`fv`f`ےb`ےbdrtA`vXnH~f˂pZHrbtbtl`f~`f~ےbHAےbHAtAJltAJlf`vXXQr˂XQr˂btlbtl`f~`f~ےbHAےbHAtAJlf`vXf`vX`JXQrHAbےtArdf~Hv`fbHAZJltJlt`vXn`vXnr˂pr˂ptlJtlJf~HےHAZbHAZfpvfpvXQJ`ےXQJ`ےbdQZ|vpfpZHAr˂ptlJtlJf~HےHAZbHAZJltJlt`vXn`vXnr˂pr˂ptlJf~Hf~HbHAZbHAZJltJlt`vXn`vXnے`JXQtlJnvfvnXbHAZpbHAZpltbltbvXn˂pZ˂pZlJtAlJtA~Hf~HfbHAZpbHAZpltbvXnvXn˂pZ˂pZlJtAlJtAfpvXQJ`ےp˂rQZdrXnvXnv˂pZHA˂pZHAlJtArlJtAr~HfpHAZp˂HAZp˂tbdQtbdQXnvXnv˂pZHA˂pZHAlJtAr~Hfp~HfpHAZp˂HAZp˂dQZ|vpf`vXnAbے`lJtAdJtArdHfpvHfpvZp˂Zp˂tbdQZtbdQZnvppZHAbpZHAbJtArdJtArdHfpvHfpvZp˂Zp˂tbdQZnvpnvp˂pZ`JXQr|ZdQtAfpv~Hfpp˂rbdQZ|bdQZ|vpfvpfZHAbZHAbtArdtArdfpvp˂rp˂rnXv`nXv`bHAZJltltbH~bے`ZHAbtArdtArdfpvp˂rp˂rbdQZ|bdQZ|vpfvpfZHAbZHAےtArdfpvfpvp˂rp˂rbdQZ|bdQZ|vpfvpfr˂ptArd~Hfpv`f~˂rXQ˂rXQdQZ|dQZ|vpfHHAbےHAbےrd|rd|pvnpvn˂rXQ˂rXQdQZ|vpfHvpfHHAbےHAbےrd|rd|~HfbHAZXQJ`ےtAJlpfH~pfH~bے`bے`d|Zd|ZvnXrXQJrXQJZ|dZ|dpfH~pfH~bے`ے`Jd|ZvnXvnXrXQJrXQJdrtAJH~fvp`JXQr|ZdQ|ZdQnXvnXvrXQJ`rXQJ`|dr|dtAfH~ے`Jے`J|ZdQ|ZdQnXvnXvrXQJ`rXQJ`|drfH~fH~HAbے˂p`rd|nXv`vnXXQJ`ےdrtAdrtAH~fH~fے`JXQے`JXQ|ZdQb|ZdQbnXv`XQJ`ےXQJ`ےf~Hf~Hp˂rdrtAJdQZ|vpfHJXQr˒`JXQ|ZdQb|ZdQbnXv`XQJ`ےXQJ`ےdrtAdrtAH~fH~fے`JXQ`JXQr|ZdQbnXv`nXv`XQJ`ےXQJ`ےdrtAdrtAH~fے`JXQ`JXQr|ZdQbvnXfpvJ`ےJ`ےdrtAJdtAJl~f``JXQr`JXQrZdQbtZdQbtXv`fXv`fJ`ےJ`ےJdrtAJ~f`~f``JXQr`JXQrZdQbtZdQbtpvnp˂rbHAXQtbdQZf`vf`vJXQrJXQrdQbtdQbtv`f`ےb`ےbrtAJlrtAJlf`vf`vJXQrXQrbtdQbtv`fv`f`ےb`ےbltb`vXHvXn˂pZHbtlbtl`f~`f~ےbHAےbHAtAJlJltf`vXXQr˂XQr˂btlbtl`f~`f~ےbHAےJltAJlf`vXf`vX`JXQrJXQrbZdQbtf~Hv`ffbHAZJltJlt`vXn`vXnr˂pr˂ptlJtlJf~HbHAZbHAZfpvfpvXQJ`ےltbdrtAJ~f`pZAbr˂ptlJtlJf~HbHAZbHAZJltJlt`vXn`vXnr˂pbtltlJf~Hf~HbHAZbHAZJltJlt`vXnHAbے˂pZtlJv`fnXv`bHAZpbHAZpltbtbnvXn˂pZ˂pZlJtAlJtA~Hf~HfbHAZpltbltbvXnvXn˂pZ˂pZlJtAlJtAXv`fXQJ`pJ`ےJ|drXnvXnv˂pZHA˂pZHAlJtArlJfp~HfpHAZp˂HAZp˂tbdQtbdQXnvXnv˂pZHAlJtAlJtAr~Hfp~HfpHAZp˂HAZp˂dQZ|~f`vpfHAbے`JtArdJtArdHfpvHfpvZp˂Zp˂tbdQZbnvnvppZHAbpZHAbJtArdJtArdHfpvHfpvZp˂tbdQZtbdQZnvpnvp˂pZtl|lJtAfvnXpvnp˂rbdQZ|bdQZ|vpfvpfZHAbZHAbtArdfpvfpvp˂rp˂rnXv`nXv`bHAZdQZ|ltbvXn`JXQrZHAbtArdfpvfpvp˂rp˂rbdQZ|bdQZ|vpfvpfZHAbJtAdtArdfpvfpvp˂rp˂rbdQZ|bdQZ|vpf`JXQrHAbےtArdt~Hfpf~H˂rXQ˂rXQdQZ|vpfvpfHHAbےHAbےrd|rd|pvnpvn˂rXQdQZ|dQZ|vpfHvpfHHAbےHAbےrd|rd|~Hf˂rXQltbQtAJlpfH~pfH~bے`bے`d|ZvnXvnXrXQJrXQJZ|dZ|dpfH~pfH~bے`d|Zd|ZvnXvnXrXQJrXQJdrtAJvXn~f`JXQr|ZdQ|ZdQnXvnXvrXQJ`rXQJ`|drpfHfH~ے`Jے`J|ZdQ|ZdQnXvnXvrXQJ`|dr|drfH~fH~HAbZdQbtrd|v`frXQJ`XQJ`ےdrtAdrtAH~fH~fے`JXQے`JXQ|ZdQbnXv`nXv`XQJ`ےXQJ`ےf~Hf~Hp˂rdrtAJdQZ|vpfH˂pZJQr˂|ZdQbnXv`nXv`XQJ`ےXQJ`ےdrtAdrtAH~fH~fے`JXQ|ZdQb|ZdQbnXv`nXv`XQJ`ےXQJ`ےdrtAdtAJH~f˂pZ`JXQrlJtAvnXfpvJ`ےJ`ےdrtAJHf`~f``JXQr`JXQrZdQbtZdQbtXv`fXv`fJ`ےdrtAJdrtAJ~f`~f``JXQr`JXQrZdQbtZdQbtpvnJ`ےZdrttbdQZf`vf`vJXQrJXQrdQbtv`fv`f`ےb`ےbrtAJlrtAJlf`vf`vJXQrdQbtdQbtv`fv`f`ےb`ےbltdvpfHvXnZHAbbtlbtl`f~`f~ےbHAےbHAtAJlf`vXf`vXXQr˂XQr˂btlbtl`f~`fHےbHAtAJltAJlf`vXf`vX˂pZHAlJtAZdQbt~HfpےHAZbHAZJltJlt`vXn`vXnr˂pr˂ptlJf~Hf~HbHAZbHAZfpvfpvXQJ`ےltbdrtAdQ~f`HAbےpZHAbtlJf~Hf~HbHAZbHAZJltJlt`vXn`vXnr˂ptlJtlJf~Hf~HbHAZbHAZJltltb`vXnHAbے˂pZrd|v`f~fnXv`bHAZpbHAZpltbvXnvXn˂pZ˂pZlJtAlJtA~HfHfpbHAZpltbltbvXnvXn˂pZ˂pZlJtAlJfXv`pbHAZpAJlt|rAJlXnvXnv˂pZHA˂pZHAlJtAr~Hfp~HfpHAZp˂HAZp˂tbdQtbdQXnvXnv˂pZHAlJtArlJtAr~Hfp~HfpHAZp˂HAZp˂rtAJl~f`vpfHے`JXQJtArdJtArdHfpvHfpvZp˂Zp˂tbdQZnvpnvppZHAbpZHAbJtArdJtArdHfpvfpvZp˂tbdQZtbdQZnvpnvpbے`rd|l|ZvnXp˂rp˂rbdQZ|bdQZ|vpfvpfZHAbZHAےtArdfpvfpvp˂rp˂rnXv`nXv`bHAZdQZ|lZ|dvXH~`JXQrے`JtArdfpvfpvp˂rp˂rbdQZ|bdQZ|vpfvpfZHAbtArdtArdfpvfpvp˂rp˂rbdQZ|nvpvpf`JXQrHAbZdQbtpvnf~Hf˂rXQ˂rXQdQZ|vpfHvpfHHAbےHAbےrd|rd|pvnvnr˂rXQdQZ|dQZ|vpfHvpfHHAbےHAbےrd|pvvnX˂rXQbdQZ|tbdpfH~pfH~bے`ے`Jd|ZvnXvnXrXQJrXQJZ|dZ|dpfH~pfے`bے`d|Zd|ZvnXvnXrXQJrXQJtbdQvXn~vr˂p|ZdQ|ZdQnXvnXvrXQJ`rXQJ`|drfH~fH~ے`Jے`J|ZdQ|ZdQnXvnrXQJrXQJ`|dr|drfH~fH~JXQrZdQtArdQbtv`fXQJ`ےXQJ`ےdrtAdrtAH~fH~fے`JXQ`JXQr|ZdQbnXv`nXv`XQJ`ےXQJ`ےf~Hp˂rp˂rtbdQrtAJlf`v˂pZXQr˂|ZdQbnXv`nXv`XQJ`ےXQJ`ےdrtAdrtAH~fے`JXQے`JXQ|ZdQb|ZdQbnXv`nXv`XQJ`ےXQJ`ےdrtAfHfH~f˂p`˂pZHAlJtAXv`fvnXvJ`ےJ`ےJdrtAJ~f`~f``JXQr`JXQrZdQbtZdQbtXv`fXQJ`ےJ`ےdrtAJdrtAJ~f`~f``JXQr`JXQrZdQbt~Hfpv`fJ`ےdrtQZ|df`vf`vJXQrXQrbtdQbtv`fv`f`ےb`ےbrtAJlrtAJlf`vJXQrJXQrdQbtdQbtv`fv`f`ےb`ےbZ|dvp`vpfے`ZHAbbtlbtl`f~`f~ےbHAےJltAJlf`vXf`vXXQr˂XQr˂btlbtl`f~`ےHAےbHAtAJltAJlf`vXf`vX˂pZHAd|ZlJtAr~HfpېbHAZbHAZJltJlt`vXn`vXnr˂pbtltlJf~Hf~HbHAZbHAZfpvXQJ`ےXQJ`ےZ|dtbdQXnvHAbpZHAbtlJf~Hf~HbHAZbHAZJltJlt`vXnr˂pr˂ptlJtlJf~Hf~HbHAZbHAZJlt`vXn`vXnJXQrbے`rd|~Hf`f~bHAZpltbltbvXnvXn˂pZ˂pZlJtAlJtA~HfHAZpbHAZpltbltbvXnvXn˂pZ˂pZlJtAvnX~HfpbHAXQJAJltrtAJlXnvXnv˂pZHAlJtAlJtAr~Hfp~HfpHAZp˂HAZp˂tbdQtbdQXnv˂pZHA˂pZHAlJtArlJtAr~Hfp~HfpHAZp˂HAZp˂rtAJlXnvJXQrے`JXQJtArdJtArdHfpvHfpvZp˂tbdQZtbdQZnvpnvppZHAbpZHAbJtArdJtArdHfpvZp˂Zp˂tbdQZtbdQZnvpnvpbے`dQbtd|Zvnvfp˂rp˂rbdQZ|bdQZ|vpfvpfZHAbJtAdtArdfpvfpvp˂rp˂rnXv`bHAZbHAZrtAJlZ|`vpfH~JQr˂pJAdtArdfpvfpvp˂rp˂rbdQZ|bdQZ|vpfZHAbZHAbtArdtArdfpvfpvp˂rp˂rbdQZ|vpfvpf˂pZHAJXQrZdQtArpvnHfpv˂rXQdQZ|dQZ|vpfHvpfHHAbےHAbےrd|rd|pvn˂rXQ˂rXQdQZ|dQZ|vpfHvpfHHAbےHAے`rd|v`fvnX`ےbbdQZ|tbdpfH~pfH~bے`d|Zd|ZvnXvnXrXQJrXQJZ|dZ|dpfH~bے`bے`d|Zd|ZvnXvnXrXQJrXQJtbdQpfH~ZHAbr˂p|ZdQ|ZdQnXvnXvrXQJ`|dr|drfH~fH~ے`Jے`J|ZdQ|ZdQnXvrXQJ`rXQJ`|dr|drfH~fH~JXQHAblJtArdQbt璐~HfXQJ`ےXQJ`ےdrtAdrtAH~fH~fے`JXQ|ZdQb|ZdQbnXv`nXv`XQJ`ےXQJ`ےf~Hp˂rp˂rtbdQXnvf`vZHAb|ZdQb|ZdQbnXv`nXv`XQJ`ےXQJ`ےdrtAdtAJH~fے`JXQے`JXQ|ZdQb|ZdQbnXv`nXv`XQJ`ےXQJ`ےdrtAH~fH~fbے`˂p`Jd|ZXv`fnXvJ`ےdrtAJdrtAJ~f`~f``JXQr`JXQrZdQbtZdQbtXv`fJ`ےJ`ےdrtAJdrtAJ~f`~f``JXQrJXQrbZdQbt~Hfpv`fHAZp˂rAJlQZ|df`vf`vJXQrdQbtdQbtv`fv`f`ےb`ےbrtAJltAJl璐f`vJXQrJXQrdQbtdQbtv`fv`f`ےb`ےJlZ|l璐f`v`JXQZAb`btlbtl`f~`fHےbHAtAJltAJlf`vXf`vXXQr˂XQr˂btlbtl`f~ےbHAےbHAtAJltAJlf`vXf`vXے`Jd|ZlJtArpvnbHAZbHAZJltJlt`vXn`vXnr˂ptlJtlJf~Hf~HbHAZbHAZp˂rfpvXQJ`ےXQJ`ےZ|dpfH~Xnvے`JXtlJtlJf~Hf~HbHAZbHAZJltltb`vXnr˂pr˂ptlJtlJf~Hf~HbHAZJltJlt`vXn`vXnJXQrXQrbtdQbt璐~Hf`ffpbHAZpltbltbvXnvXn˂pZ˂pZlJtAlJf~HfbHAZpbHAZpltbltbvXnvXn˂pZtlJlJtAvnX~HXvrXQJtbdQrtAJXnvXnv˂pZHAlJtArlJtAr~Hfp~HfpHAZp˂HAZp˂tbdQtbnXnv˂pZHA˂pZHAlJtArlJtAr~Hfp~HfpHAZp˂tdrtbdQZXnvr˂pJXQrJtArdJtArdHfpvfpvZp˂tbdQZtbdQZnvpnvppZHAbpZHAbJtArdJfpvHfpvZp˂Zp˂tbdQZtbdQZnvpnvpXQr˂dQbtdtlXv`fp˂rp˂rbdQZ|bdQZ|vpfvpfZHAbtArdtArdfpvfpvp˂rp˂rXQJ`ےnXv`bHAZbHAZrtAdQZf`vp`vXQr˂ptArdtArdfpvfpvp˂rp˂rbdQZ|nvpvpfZHAbZHAbtArdtArdfpvfpvp˂rbdQZ|bdQZ|vpfvpf˂pZHAl|ZlJtArvnXv`vnr˂rXQdQZ|dQZ|vpfHvpfHHAbےHAbےrd|pvnpvn˂rXQ˂rXQdQZ|dQZ|vpfHvpfHHAbےtAd|rd|v`pv`f~`ےbZ|dbdQZ|pfH~pfے`bے`d|Zd|ZvnXvnXrXQJrXQJZ|dvpfHpfH~bے`bے`d|Zd|ZvnXvnXrXQJtAJl|drpfH~ZHAbۂpZHA|ZdQ|ZdQnXvnrXQJrXQJ`|dr|drfH~fH~ے`Jے`J|ZdQnXvnXvrXQJ`rXQJ`|dr|drfH~fH~pZHAbl|ZdQJfpv~HfXQJ`ےXQJ`ےdrtAdrtAH~fے`JXQے`JXQ|ZdQb|ZdQbnXv`nXv`XQJ`ےXQJ`ےJltf~Hp˂rp˂r|drXH~nvpZHAb|ZdQb|ZdQbnXv`nXv`XQJ`ےXQJ`ےdrtAfHfH~fے`JXQے`JXQ|ZdQb|ZdQbnXv`nXv`XQJ`ےdrtAdrtAH~fH~fb˂dQbtd|Zf~HXQJ`ےJ`ےdrtAJdrtAJ~f`~f``JXQr`JXQrZdQbtXv`fXv`fJ`ےJ`ےdrtAJdrtAJ~f`~f``JXQrZdQbtZdQbtnXvHfpvHAZp˂rtAJldrtAf`vJXQrJXQrdQbtdQbtv`fv`f`ےb`ےbrtAJlf`vf`vJXQrJXQrdQbtdQbtv`fv`f`ےbtbdQZtAJl璐vp`JXQbے`btlbtl`f~`ےHAےbHAtAJltAJlf`vXf`vXXQr˂XQr˂btl`f~`f~ےbHAےbHAtAJltAJlf`vXf`vXے`JbtlnvfpvnbHAZbHAZJltJlt`vXnr˂pr˂ptlJtlJf~Hf~HbHAZbHAZbdQZ|drtAdrtAH~fH~fے`JXQے`JXQ|ZdQb|ZdQbfpvXQJ`ےbQZdtbdQ~f`~f``JXQr`JXQrZdQbtXv`fXv`fJ`ےJ`ےdrtAJdrtAJ~f`~f`ے`JXQ`ZQXb㕀vˍpfvˍpfbAdZ|JltJlt`vXn`vXnr˂pr˂ptlJtlJnXv`bHAZrtAJlZ|rAvXnvXn˂pZ˂pZlJtA~Hf~HfbHAZpbHAZpltbltbvXnvXnr˂pۑpJH~ㅐfەH~ㅐfۂdrQtbdQZ|bdQZ|vpfvpfZHAbZHAbtArdfpvpvnp˂rtbdQJltvpfHvpfHHAbےHAے`rd|pvnpvn˂rXQ˂rXQdQZ|dQZ|vpfHvpfZ`JXQrAHr󙐉`vXn`vXnJltdrtAdrtAH~fH~fے`JXQے`JXQ|ZdQb~HfXv`fXQJ`ےZ|dbdQZ|~f`~f``JXQrJXQrbZdQbtXv`fXv`fJ`ےJ`ےdrtAJdrtAJ~f`HAbے˂pZۑpJAHvˍpfvˍpfbAdZ|JltJlt`vXn`vXnr˂pr˂ptlJpvn~HfbHAXQrtAJldrtAvXnvXn˂pZtlJlJtA~Hf~HfbHAZpbHAZpltbltbvXn`JXQrHAbےr󙐂ˁ`H~ㅐfەH~ㅐfۂdrQtbdQZ|bdQZ|vpfvpfZHAbZHAےtArdXv`fpvnJ`ےtbdQJltvpfHvpfHHAbےtAd|rd|pvnpvn˂rXQ˂rXQdQZ|dQZ|vpfH˂pZ`JXQrZQXb㉀`vXn`vXnJltdrtAdrtAH~fH~fے`JXQ`JXQr|ZdQb~HfXv`fbHAZpZ|rAJbdQZ|~f`~f``JXQrZdQbtZdQbtXv`fXv`fJ`ےJ`ےdrtAJdtAJl~f`HAbے˂pZۑpJAHvˍpfvˍpfbAdZ|JltJlt`vXn`vXnr˂pbtltlJpvn~HX˂rXQltbdrtAJvXnvXn˂pZlJtAlJtA~Hf~HfbHAZpbHAZpltbtbnvXn`JXQrHAbr󙐂ˁ`H~ㅐfەH~ㅐfۂdrQtbdQZ|bdQZ|vpfvpfZHAbJtAdtArdXv`pv`fJ`ےdQZ|bdQZvpfHvpfےHAbےrd|rd|pvnpvn˂rXQ˂rXQdQZ|vpfvpfH˂p`˂pZHAZQXAHr`vXn`vXnJltdrtAdrtAH~fH~fے`JXQ|ZdQb|ZdQbvnX~HfpbHAZpdrtAJ|dr~f``JXQr`JXQrZdQbtZdQbtXv`fXv`fJ`ےJ`ےdrtAJHf`~f`JXQrbے`ˁ`Zvˍpfvˍp|bAdZ|JltJlt`vXn`vXnr˂ptlJtlJv`fvnX˂bltbtAJlvXn˂pZ˂pZlJtAlJtA~Hf~HfbHAZpbHAZpltbvXnvXn˂pZHAJXQrQXb㉀ەH~ㅐfۂdrQtdrQtbdQZ|bdQZ|vpfvpfZHAbtArdtArd~Hfpv`pvHAZp˂dQZ|tbdQZvpfHHAbےHAbےrd|rd|pvnpvn˂rXQ˂rXQdQZ|vpfHvpfHbے`˂p`ZpJAHr`vXnJltJltdrtAdrtAH~fے`JXQے`JXQ|ZdQb|ZdQbvnXnrXQrXQJdrtAJ|AJl~f``JXQr`JXQrZdQbtZdQbtXv`fXv`fJ`ےJ`ےJdrtAJ~f`~f`JXQrQXb㉀ۙˁ`ZvˍpfbAdZ|bAdZ|JltJlt`vXnr˂pr˂ptlJtlJv`fJ`p˂`ےbbdQZ|tbnvXn˂pZ˂pZlJtAlJtA~Hf~HfbHAZpltbltbvXnvXn˂pZHApJAHrQXb㉀ەH~ㅐfۂdrQtdrQtbdQZ|bdQZ|vpfZHAbZHAbtArdtArd~HXvrXQJHAZp˂drtvpfvpfHHAbےHAbےrd|rd|pvnpvn˂rXQdQZ|dQZ|vpfHvpfHb˂ˁ`Zp`ZQX`vXnJltJltdrtAdtAJH~fے`JXQے`JXQ|ZdQb|ZdQb`f~`ےbrXQJAJltHf`~f``JXQr`JXQrZdQbtZdQbtXv`fXv`fJ`ےdrtAJdrtAJ~f`~f`pZHAbQXAHrb㉀ۑpvˍpfbAdZ|bAdZ|Jltltb`vXnr˂pr˂ptlJtlJHfpvHAZp˂`p˂bdQZ|vXnvXn˂pZ˂pZlJtAlJtA~HfHfpbHAZpltbltbvXnvXnے`Jˁ`ZQXJAHr󙐕H~ㅐfۂdrQtdrQtbdQZ|nvpvpfZHAbZHAbtArdtArdnXvbHArXQJ`drtvpfHvpfHHAbےHAbےrd|rd|pvnvnr˂rXQdQZ|dQZ|vpfHvpfHXQr˂b㉀ۑpˁ`ZQX`vXnJltJltdrtAfHfH~fے`JXQے`JXQ|ZdQb|ZdQb`f~Zp˂ےbHAAJlt~f`~f``JXQr`JXQrZdQbtZdQbtXv`fXQJ`ےJ`ےdrtAJdrtAJ~f`~f`pZHAbJAHrb㉀ۑpvˍpfbAdZ|bAdZ|Jlt`vXn`vXnr˂pr˂ptlJtlJHfpvrXQJ`Zp˂bQZdvXnvXn˂pZ˂pZlJtAlJtA~HfHAZpbHAZpltbltbvXnvXnے`Jˁ`ZQXJAHfەH~ㅐfۂdrQtdrQtbdQZ|vpfvpfZHAbZHAbtArdtArd~HےbHArXQJ`rtAJlvpfHvpfHHAbےHAbےrd|rd|pvn˂rXQ˂rXQdQZ|dQZ|vpfHvpfHXQHAbb㉀ۑp`vXn`vXnJltJltdrtAH~fH~fے`JXQے`JXQ|ZdQb|ZdQbfpvZp˂ےbHAtbdQ~f`~f``JXQr`JXQrZdQbtZdQbtXv`fJ`ےJ`ےdrtAJdrtAJ~f`~f`ے`JXQ`ZQXb㕀vˍpfvˍpfbAdZ|bAdZ|Jlt`vXn`vXnr˂pr˂ptlJtlJnXv`rXQJ`XQJ`ےZ|dvXnvXn˂pZ˂pZlJtAlJf~HfbHAZpbHAZpltbltbvXnvXnr˂pۑpJH~ㅐfەH~ㅐfۂdrQtdrQtbdQZ|vpfvpfZHAbZHAbtArdtArdf~Hp˂rJltrtAJlvpfHvpfHHAbےHAbےrd|pvnpvn˂rXQ˂rXQdQZ|dQZ|vpfHvpfHZHAbAHr󙐂˝`vXn`vXnJltJlt \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv39_2.dat b/vendor/endroid/qr-code/assets/data/qrv39_2.dat new file mode 100644 index 000000000..8637f146e --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv39_2.dat @@ -0,0 +1,345 @@ +|{|{|{|{xwxwxwxw|{|{|{|{xwxwxwxw|{|{|{|{xwxwxwxw|{|{|{|{xwxwxwxw|{|{|{|{xwxwxwxw|{|{|{|{xwxwxwxw|{|{|{|{xwxwxwxw|{|{|{|{xwxwxwxw|{|{|{|{xwxwxwxw|{|{|{|{xwxwxwxw|{|{|{|{xwxwxwxwtstststs|{|{|{|{xwxwxwxwtstststs|{|{|{|{xwxwxwxwtstststs|{|{|{|{xwxwxwxwtstststs~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{zyxwxwxwxwtstststs~}~}~}~}zyzyzyzyxwxwxwxwtstststs~}~}~}~}zyzyzyzyxwxwxwxwtstststs~}~}~}~}zyzyzyzyxwxwxwxwtstststs~}~}~}~}zyzyzyzyxwxwxwxwtstststs~}~}~}~}zyzyzyzyxwxwxwxwtstststs~}~}~}~}zyzyzyzyxwxwxwxwtstststs~}~}~}~}zyzyzyzyxwxwxwxwtstststs~}~}~}~}zyzyzyzyxwxwxwxwtstststs~}~}~}~}zyzyzyzyxwxwxwvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutstststs~}~}~}~}zyzyzyzyvuvuvuvutststsrq~}~}~}~}zyzyzyzyvuvuvuvurqrqrqrq~}~}~}~}zyzyzyzyvuvuvuvurqrqrqrq~}~}~}~}zyzyzyzyvuvuvuvurqrqrqrq~}~}~}~}zyzyzyzyvuvuvuvurqrqrqrq~}~}~}~}zyzyzyzyvuvuvuvurqrqrqrq~}~}~}|{zyzyzyzyvuvuvuvurqrqrqrq|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrq|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrq|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrq|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrq|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrq|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrq|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrq|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrq|{|{|{|{zyzyzyxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrq|{|{|{|{xwxwxwxwvuvuvutsrqrqrqrq|{|{|{|{xwxwxwxwtstststsrqrqrqrqrqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + rqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSOOOOOPOPLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + rqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSOPOPOPOPLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + rqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSOPOPOPOPLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#       + + + + rqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSOPOPOPOPLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#     + + + + rqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSOPOPOPOPLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     + + + + rqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSOPOPOPOPLKLKLKLKHGHGHGHGDCDCDCDCBA@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     + + + + rqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[ZYZYXWXWXWXWTSTSTSTSOPOOOOOOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     + + + + rqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     + + + + rqrqrqrqnmnmnmlkjijijijifefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     + + + + rqrqrqrqlklklkkkjijijijifefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     + + + + rqrqrqrqkkklklkljijijijifefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOOOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     + + + + rqrqrqrqklklklkljijijijifefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     + + + rqrqrqrqklklklkljijijijifefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPONMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     rqrqrqrqklklklkljijihghgfefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!     rqrqrqrqklklklklhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=<;<;<;:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!     rqrqrqrqklklklklhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYXWXWVUVUTSTSTSTSNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:96543434321212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!     rqrqrqpokkkkkklkhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:94333333421212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!     popopopolklklklkhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:93434343421212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!     popopopolklklklkhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:93434343421212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!     popopopolklklklkhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:93434343421212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!     popopopolklklklkhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:9343434340/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!     popopopolklklklkhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:9343434340/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!     popopopolklkkkkkhghghghgfefedcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:9343433330/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! popopopoklklklklhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;:9878787334343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! popopopoklklklklhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! popopopoklklklklhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! popopopoklklklklhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! popopopoklklklklhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! popopopoklklklkkhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! popopopokkkklklkhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;87878787333334340/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! popopopolklklklkhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878787343434340/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! popopopolklklklkhghghghgdcdcdcdcbaba`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878787343434340/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! popopopolklklklkhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878787343434340/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! popopopolklklklkhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878787343434340/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! popopopolklklklkhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878787343434340/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! popopopolkkkkkklhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878787343333330/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! popopopoklklklklhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"! popopopoklklklklhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!    popopopoklklklklhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    popopopoklklklklhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCBABABA@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    popopopoklklklklhghghghgdcdcdcdc`_`_`_`_^]^]\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    popopopoklklkkkkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787434343330/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    popopopokklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787333434340/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    popopopolklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787343434340/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    popopopolklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787343434340/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    popopopolklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787343434340/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + popopopokkkklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787343434340/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + popopopolklkjijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;87878787343434340/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + popopopojijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?>=>=>=<;<;<;<;87878787333333430/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + popopopojijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYXWXWVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + popopopojijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQPOPONMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + ponmnmnmjijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVUPOPOOOOONMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + nmnmnmnmjijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVUOPOPOPOPNMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787434333330/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + nmnmnmnmjijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVUOPOPOPOPNMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + nmnmnmnmjijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVUOPOPOPOPNMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + nmnmnmnmjijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVUOPOPOPOPNMLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + nmnmnmnmjijijijihghgfefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVUOPOPOPOPLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=<;<;<;<;87878787212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVUOPOPOPOOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=<;:9:9:987878765212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWVUVUTSTSOOOOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOOOOOOPLKLKLKLKJIHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefedcdcbaba`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSOPOPOPOPLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSOPOPOPOPLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSOPOPOPOPLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSOPOPOPOPLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSOPOPOPOPLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSOPOPOOOOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSOOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefebabababa`_`_^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + nmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + mmnnooppIIJJKKLL%%&&''((;;::9988__^^]]\\qqrrssttMMNNOOPP))**++,, + +77665544[[ZZYYXX~~}}||uuvvwwxxQQRRSSTT--..//00 + +  33221100WWVVUUTT{{zzyyxxyyzz{{||UUVVWWXX11223344  + + //..--,,SSRRQQPPwwvvuutt}}~~YYZZ[[\\55667788 !!++**))((OONNMMLLssrrqqpp~~}}||]]^^__``99::;;<<""##$$%%''&&%%$$KKJJIIHHoonnmmll{{zzyyxxaabbccdd==>>??@@ !!""##&&''(())##""!! GGFFEEDDkkjjiihhwwvvuutteeffgghhAABBCCDD $$%%&&''**++,,-- CCBBAA@@ggffeeddssrrqqpoiijjkkllEEFFGGHH!!""##$$(())**++..//0011 + + ??>>==<>??@@>>??@@AA + + //..--,,SSRRQQPPxxwwvvuu]\\[[ZZYppoonnmm}}~~YYZZ[[\\55667788AABBCCDDBBCCDDEE !!++**))((OONNMMLLttssrrqq~~}}||{{YXXWWVVUllkkjjii]]^^__``99::;;<>??@@IIJJKKLLJJKKLLMM&&''(())##""!! GGFFEEDDllkkjjiivvuuttssNNMMLLKKddccbbaaeeffgghhAABBCCDDMMNNOOUUNNOOPPQQ**++,,-- CCBBAA@@hhggffeerrqqkkjjJJIIHHGG``__^^]]iijjkkllEEFFGGHHVVWWXXYYRRSSTTUU..//0011 + + ??>>==<>==<<;;TTSSRRQQxxwwvvuuuuvvwwxxQQRRSSTTbbccddee^^__``aa::;;<<== 33221100~~}}||XXWWVVUU]]\\[[ZZ::998765PPOONNMMttssrrqqyyzz{{||UUVVWWXXffgghhiibbccddee>>??@@AA + + //..--,,{{zzyyxxTTSSRRQQYYXXWWVV43322110LLKKJJIIppoonnmm}}~~YYZZ[[\\jjkkqqrrffgghhiiBBCCDDEE !!++**))((wwvvuuttPPOONNMMUUOONNMM0//..--,HHGGFFEEllkkjjii]]^^__``ssttuuvvjjkkllmmFFGGHHII""##$$%%''&&%%$$ssrrqqppLLKKJJIILLKKJJII,++**))(DDCCBBAAhhggffeeaabbccddwwxxyyzznnooppqqJJKKLLMM&&''(())##""!! oonnmmllHHGGFFEEHHGGFFEE(''&&%%$@@??>>==ddccbbaaeeffgghh{{||}}~~rrssttuuNNOOPPQQ**++,,-- kkjjiihhDDCCBBAADDCCBBAA$##""!! <<;;::99``__^^]]iijjkkllvvwwxxyyRRSSTTUU..//0011 + + ggffeedd@@??>>==@@??>>== 88776655\\[[ZZYY~~}}mmnnooppzz{{||}}VVWWXXYY22334455ccbbaa``<<;;::99<<;;::9944332211XXWWVVUU||{{zzyyqqrrsstt~~ZZ[[\\]]66778899__^^]]\\887766553322110000//..--TTSSRRQQxxwwvvuuuuvvwwxx^^__``aa::;;<<== [[ZZYYXX44332211//..--,,,,++**))PPOONNMMttssrrqqyyzz{{||bbccddee>>??@@AA + + WWVVUUTT00//..--++**))(( + +((''&&%%LLKKJJIIppoonnmm}}~~ffgghhiiBBCCDDEE !!SSRRQQPP,,++**))''&&%%$$ $$##""!!HHGGFFEEllkkjjiijjkkllmmFFGGHHII""##$$%%OONNMMLL((''&&%%##""!!  DDCCBBAAhhggffeennooppqqJJKKLLMM&&''(())KKJJIIHH$$##""!! + + @@??>>==ddccbbaarrssttuuNNOOPPQQ**++,,-- GGFFEEDD  <<;;::99``__^^]]vvwwxxyyRRSSTTUU..//0011 + + CCBBAA@@88776655\\[[ZZYY~~}}zz{{||}}VVWWXXYY22334455??>>==<<  44332211XXWWVVUU||{{zzyy~~ZZ[[\\]]66778899;;::9988 + + + + + + 00//..--TTSSRRQQxxwwvvuu^^__``aa::;;<<==77665544  ,,++**))PPOONNMMttssrrqqbbccddee>>??@@AA33221100 + + !!""##$$((''&&%%LLKKJJIIppoonnmmffgghhiiBBCCDDEE !!//..--,, + + %%&&''(($$##""!!HHGGFFEEllkkjjiijjkkllmmFFGGHHII""##$$%%++**))(( ))**++,, DDCCBBAAhhggffeennooppqqJJKKLLMM&&''(())''&&%%$$ !!""##--..//00 + + @@??>>==ddccbbaarrssttuuNNOOPPQQ**++,,--##""!! $$%%&&''11223344 <<;;::99``__^^]]vvwwxxyyRRSSTTUU..//0011(())**++5566778888776655\\[[ZZYY~~}}~~}}||zz{{||}}VVWWXXYY22334455 ,,--..//99::;;<< 44332211XXWWVVUU||{{zzyy{{zzyyxx~~ZZ[[\\]]66778899!!""##$$00112233==>>??@@ + + 00//..--TTSSRRQQxxwwvvuuwwvvuutt^^__``aa::;;<<==%%&&''((99::;;<>??@@AA ))**++,,==>>??@@EEFFGGHH!!""##$$((''&&%%LLKKJJIIppoonnmmnmlkkjjiffgghhiiBBCCDDEE + + --..//00AABBCCDDIIJJKKLL%%&&''(($$##""!!HHGGFFEEllkkjjiiihhggffejjkkllmmFFGGHHII11223344EEFFGGHHMMNNOOPP))**++,, DDCCBBAAhhggffeeeddccbba~~}}||nnooppqqJJKKLLMM55667788IIJJKKLLQQRRSSTT--..//00 + + @@??>>==ddccbbaa~~}}||{{a``__^^]{{zzyyxxrrssttuuNNOOPPQQ99::;;<>??@@VVWWXXYYYYZZ[[\\5566778888776655\\[[ZZYYvvuuttssYXXWWVVUssrrqqppzz{{||}}VVWWXXYY + + AABBCCDDZZ[[\\]]]]^^__``99::;;<< 44332211XXWWVVUUrrqqkkjjUTSRQPOOoonnmmll~~ZZ[[\\]]EEFFGGHH^^__``aaaabbccdd==>>??@@ + + 00//..--TTSSRRQQiihhggffNNMMLLKKkkjjiihh^^__``aaIIJJKKLLbbccddeeeeffgghhAABBCCDD ,,++**))PPOONNMMeeddccbbJJIIHHGGggffeeddbbccddeeMMNNOOPPffgghhiiiijjkkllEEFFGGHH!!""##$$((''&&%%LLKKJJIIaa``__^^FFEEDDCCccbbaa``ffgghhiiQQRRSSTTjjkkqqrrmmnnooppIIJJKKLL%%&&''(($$##""!!HHGGFFEE]]\\[[ZZBBAA@@??__^^]]\\jjkkllmm !!UUVVWWXXssttuuvvqqrrssttMMNNOOPP))**++,, DDCCBBAAYYXXWWVV>>==<<;;[[ZZYYXX~~}}||nnooppqq""##$$%%YYZZ[[\\wwxxyyzzuuvvwwxxQQRRSSTT--..//00 + + @@??>>==UUOONNMM::998765WWVVUUTT{{zzyyxxrrssttuu&&''(())]]^^__``{{||}}~~yyzz{{||UUVVWWXX11223344 <<;;::99LLKKJJII43322110SSRRQQPPwwvvuuttvvwwxxyy**++,,--aabbccdd}}~~YYZZ[[\\5566778888776655HHGGFFEE0//..--,OONNMMLLssrrqqppzz{{||}}..//0011eeffgghh]]^^__``99::;;<< 44332211DDCCBBAA,++**))(KKJJIIHHoonnmmll~~22334455iijjkkllaabbccdd==>>??@@ + + 00//..--@@??>>==(''&&%%$GGFFEEDDkkjjiihh66778899mmnnooppeeffgghhAABBCCDD ,,++**))<<;;::99$##""!! CCBBAA@@ggffeedd::;;<<==qqrrssttiijjkkllEEFFGGHH!!""##$$((''&&%%33221100 ??>>==<>??@@AAuuvvwwxxmmnnooppIIJJKKLL%%&&''(($$##""!!//..--,,;;::9988__^^]]\\BBCCDDEEyyzz{{||qqrrssttMMNNOOPP))**++,, ++**))((77665544[[ZZYYXX~~}}||FFGGHHII}}~~uuvvwwxxQQRRSSTT--..//00 + + ''&&%%$$33221100WWVVUUTT{{zzyyxxJJKKLLMMyyzz{{||UUVVWWXX11223344 ##""!! + +//..--,,SSRRQQPPwwvvuuttNNOOPPQQ}}~~YYZZ[[\\55667788 ++**))((OONNMMLLssrrqqppRRSSTTUU]]^^__``99::;;<< ''&&%%$$KKJJIIHHoonnmmllVVWWXXYYaabbccdd==>>??@@ + + ##""!! GGFFEEDDkkjjiihhZZ[[\\]]eeffgghhAABBCCDD   CCBBAA@@ggffeedd^^__``aaiijjkkllEEFFGGHH!!""##$$ + +  + + ??>>==<>==<<;;NNMMLLKK87654332UUTTSSRRyyxxwwvvttuuvvwwPPQQRRSSaabbccdd]]^^__``99::;;<< 44332211XXWWVVUUrrqqkkjjUTSRQPOOoonnmmll~~nnooppqq{{||}}~~WWXXYYZZ33445566::998877JJIIHHGG21100//.QQPPOONNuuttssrrxxyyzz{{TTUUVVWWeeffgghhaabbccdd==>>??@@ + + 00//..--TTSSRRQQiihhggffNNMMLLKKkkjjiihhrrssttuu[[\\]]^^778899::66554433FFEEDDCC.--,,++*MMLLKKJJqqppoonn||}}~~XXYYZZ[[iijjkkqqeeffgghhAABBCCDD ,,++**))PPOONNMMeeddccbbJJIIHHGGggffeeddvvwwxxyy__``aabb;;<<==>> 221100//BBAA@@??*))((''&IIHHGGFFmmllkkjj\\]]^^__rrssttuuiijjkkllEEFFGGHH!!""##$$((''&&%%LLKKJJIIaa``__^^FFEEDDCCccbbaa``zz{{||}}ccddeeff??@@AABB + + ..--,,++>>==<<;;&%%$$##"EEDDCCBBiihhggff``aabbccvvwwxxyymmnnooppIIJJKKLL%%&&''(($$##""!!HHGGFFEE]]\\[[ZZBBAA@@??__^^]]\\~~gghhiijjCCDDEEFF !!""**))((''::993322"!! AA@@??>>eeddccbbddeeffggzz{{||}}qqrrssttMMNNOOPP))**++,, DDCCBBAAYYXXWWVV>>==<<;;[[ZZYYXX~~}}||kkllmmnnGGHHIIJJ##$$%%&&&&%%$$##1100//..==<<;;::aa``__^^hhiijjkk~~uuvvwwxxQQRRSSTT--..//00 + + @@??>>==UUOONNMM::998765WWVVUUTT{{zzyyxxooppqqrrKKLLMMNN''(())**""!! --,,++**99887766]]\\[[ZZ~~llmmnnooyyzz{{||UUVVWWXX11223344 <<;;::99LLKKJJII43322110SSRRQQPPwwvvuuttssttuuvvOOPPQQRR++,,--.. + +))((''&&55443322YYXXWWVV}}||{{zzppqqrrss}}~~YYZZ[[\\5566778888776655HHGGFFEE0//..--,OONNMMLLssrrqqpp~~}}||wwxxyyzzSSTTUUVV//001122 %%$$##"" 1100//..UUTTSSRRyyxxwwvvttuuvvww]]^^__``99::;;<< 44332211DDCCBBAA,++**))(KKJJIIHHoonnmmll{{zzyyxx{{||}}~~WWXXYYZZ33445566!!  + + --,,++**QQPPOONNuuttssrrxxyyzz{{aabbccdd==>>??@@ + + 00//..--@@??>>==(''&&%%$GGFFEEDDkkjjiihhwwvvuutt[[\\]]^^778899::))((''&&MMLLKKJJqqppoonn||}}~~eeffgghhAABBCCDD ,,++**))<<;;::99$##""!! CCBBAA@@ggffeeddssrrqqpp__``aabb;;<<==>> %%$$##""IIHHGGFFmmllkkjjiijjkkllEEFFGGHH!!""##$$((''&&%%33221100 ??>>==<>eeddccbbqqrrssttMMNNOOPP))**++,, ++**))((77665544[[ZZYYXX~~}}||ggffeeddkkllmmnnGGHHIIJJ##$$%%&& ==<<;;::aa``__^^uuvvwwxxQQRRSSTT--..//00 + + ''&&%%$$33221100WWVVUUTT{{zzyyxxccbbaa``ooppqqrrKKLLMMNN''(())**99887766]]\\[[ZZ~~yyzz{{||UUVVWWXX11223344 ##""!! + +//..--,,SSRRQQPPwwvvuutt__^^]]\\ssttuuvvOOPPQQRR++,,--.. + + + + 55443322YYXXWWVV}}||{{zz}}~~YYZZ[[\\55667788 ++**))((OONNMMLLssrrqqpp[[ZZYYXXwwxxyyzzSSTTUUVV//001122   + +1100//..UUTTSSRRyyxxwwvv]]^^__``99::;;<< ''&&%%$$KKJJIIHHoonnmmllWWVVUUTT~~}}||{{{{||}}~~WWXXYYZZ33445566 --,,++**QQPPOONNuuttssrraabbccdd==>>??@@ + + ##""!! GGFFEEDDkkjjiihhSSRRQQPPzzyyxxww[[\\]]^^778899:: !!""##))((''&&MMLLKKJJqqppoonneeffgghhAABBCCDD   CCBBAA@@ggffeedd~~}}||{{OONNMMLLvvuuttss__``aabb;;<<==>> !!$$%%&&''%%$$##""IIHHGGFFmmllkkjjiijjkkllEEFFGGHH!!""##$$ + +  + + ??>>==<>eeddccbbqqrrssttMMNNOOPP))**++,, + +77665544[[ZZYYXXrrqqkkjjCCBBAA@@hggffeedkkllmmnnGGHHIIJJ##$$%%&&**++,,--00112233 ==<<;;::aa``__^^uuvvwwxxQQRRSSTT--..//00 + +  33221100WWVVUUTTiihhggff??>>==<<~~dccbbaa`~~}}||{{ooppqqrrKKLLMMNN''(())**..//00114455667799887766]]\\[[ZZ~~~~}}yyzz{{||UUVVWWXX11223344  + + //..--,,SSRRQQPPeeddccbb;;::9988}}||{{zz`__^^]]\zzyyxxwwssttuuvvOOPPQQRR++,,--..223399::8899::;;55443322YYXXWWVV}}||{{zz||{{zzyy}}~~YYZZ[[\\55667788 !!++**))((OONNMMLLaa``__^^77665544yyxxwwvv\[[ZZYYXvvuuttsswwxxyyzzSSTTUUVV//001122;;<<==>><<==>>?? + +1100//..UUTTSSRRyyxxwwvvxxwwvvuu]]^^__``99::;;<<""##$$%%''&&%%$$KKJJIIHH]]\\[[ZZ33221100uuttssrrXWWVVUUTrrqqppoo{{||}}~~WWXXYYZZ33445566??@@AABB@@AABBCC --,,++**QQPPOONNuuttssrrttssrrqqaabbccdd==>>??@@ !!""##&&''(())##""!! GGFFEEDDYYXXWWVV//..--,,qqkkjjiiSRQPOONNnnmmllkk[[\\]]^^778899::CCDDEEFFDDEEFFGG !!""##))((''&&MMLLKKJJqqppoonnponmlkkjeeffgghhAABBCCDD $$%%&&''**++,,-- CCBBAA@@UUOONNMM++**))((hhggffeeMMLLKKJJjjiihhgg__``aabb;;<<==>>GGHHIIJJHHIIJJKK$$%%&&''%%$$##""IIHHGGFFmmllkkjjjiihhggfiijjkkllEEFFGGHH!!""##$$(())**++..//0011 + + ??>>==<>eeddccbb~~}}||baa``__^||{{zzyyqqrrssttMMNNOOPP))**++,,001122336677889977665544DDCCBBAA\\[[ZZYYAA@@??>>^^]]\\[[kkllmmnnGGHHIIJJXXYYZZ[[TTUUVVWW00112233 ==<<;;::aa``__^^{{zzyyxx^]]\\[[ZxxwwvvuuuuvvwwxxQQRRSSTT--..//0099::;;<<::;;<<== 33221100@@??>>==XXWWVVUU==<<;;::ZZYYXXWW~~}}||{{ooppqqrrKKLLMMNN\\]]^^__XXYYZZ[[4455667799887766]]\\[[ZZwwvvuuttZYYXXWWVttssrrqqyyzz{{||UUVVWWXX11223344==>>??@@>>??@@AA + + //..--,,<<;;::99OONNMMLL99876543VVUUTTSSzzyyxxwwssttuuvvOOPPQQRR``aabbcc\\]]^^__8899::;;55443322YYXXWWVVssrrqqkkVUUTSRQPppoonnmm}}~~YYZZ[[\\55667788AABBCCDDBBCCDDEE !!++**))((33221100KKJJIIHH3221100/RRQQPPOOvvuuttsswwxxyyzzSSTTUUVVddeeffgg``aabbcc<<==>>?? + +1100//..UUTTSSRRjjiihhggOONNMMLLllkkjjii]]^^__``99::;;<>??@@IIJJKKLLJJKKLLMM&&''(())##""!! ++**))(( + + CCBBAA@@+**))(('JJIIHHGGnnmmllkk[[\\]]^^qqrrsstthhiijjkkDDEEFFGG !!""##))((''&&MMLLKKJJbbaa``__GGFFEEDDddccbbaaeeffgghhAABBCCDDMMNNOOUUNNOOPPQQ**++,,-- ''&&%%$$ + + ??>>==<<'&&%%$$#FFEEDDCCjjiihhgg__``aabbuuvvwwxxllmmnnooHHIIJJKK$$%%&&''%%$$##""IIHHGGFF^^]]\\[[CCBBAA@@``__^^]]iijjkkllEEFFGGHHVVWWXXYYRRSSTTUU..//0011 + + ##""!! ;;::9933#""!! BBAA@@??ffeeddccccddeeffyyzz{{||ppqqrrssLLMMNNOO(())**++!! EEDDCCBBZZYYXXWW??>>==<<\\[[ZZYY~~}}mmnnooppIIJJKKLLZZ[[\\]]VVWWXXYY22334455221100//>>==<<;;bbaa``__gghhiijj}}~~ttuuvvwwPPQQRRSS,,--..// + + AA@@??>>VVUUOONN;;::9987XXWWVVUU||{{zzyyqqrrssttMMNNOOPP^^__``aaZZ[[\\]]66778899..--,,++::998877^^]]\\[[kkllmmnnxxyyzz{{TTUUVVWW00112233 ==<<;;::MMLLKKJJ65433221TTSSRRQQxxwwvvuuuuvvwwxxQQRRSSTTbbccddee^^__``aa::;;<<== **))((''66554433ZZYYXXWW~~}}||{{ooppqqrr||}}~~XXYYZZ[[4455667799887766IIHHGGFF100//..-PPOONNMMttssrrqqyyzz{{||UUVVWWXXffgghhiibbccddee>>??@@AA + +   !!&&%%$$## 221100//VVUUTTSSzzyyxxwwssttuuvv\\]]^^__8899::;;55443322EEDDCCBB-,,++**)LLKKJJIIppoonnmm}}~~YYZZ[[\\jjkkqqrrffgghhiiBBCCDDEE !! + + + +""##$$%%""!!  + + ..--,,++RRQQPPOOvvuuttsswwxxyyzz``aabbcc<<==>>?? + +1100//..AA@@??>>)((''&&%HHGGFFEEllkkjjii]]^^__``ssttuuvvjjkkllmmFFGGHHII""##$$%% &&''(())**))((''NNMMLLKKrrqqppoo{{||}}~~ddeeffgg@@AABBCC --,,++**==<<;;::%$$##""!DDCCBBAAhhggffeeaabbccddwwxxyyzznnooppqqJJKKLLMM&&''(())**++,,--&&%%$$##JJIIHHGGnnmmllkkhhiijjkkDDEEFFGG !!""##))((''&&99332211! @@??>>==ddccbbaaeeffgghh{{||}}~~rrssttuuNNOOPPQQ**++,,-- ..//0011""!! FFEEDDCCjjiihhggllmmnnooHHIIJJKK$$%%&&''%%$$##""00//..--<<;;::99``__^^]]iijjkkllvvwwxxyyRRSSTTUU..//0011 + + 22334455 + + + +BBAA@@??ffeeddccppqqrrssLLMMNNOO(())**++!! ,,++**))88776655\\[[ZZYY~~}}mmnnooppzz{{||}}VVWWXXYY22334455 !!""##66778899  >>==<<;;bbaa``__ttuuvvwwPPQQRRSS,,--..// + + ((''&&%%44332211XXWWVVUU||{{zzyyqqrrsstt~~ZZ[[\\]]66778899$$%%&&''::;;<<==::998877^^]]\\[[xxyyzz{{TTUUVVWW00112233 $$##""!! 00//..--TTSSRRQQxxwwvvuuuuvvwwxx^^__``aa::;;<<==(())**++>>??@@AA + + 66554433ZZYYXXWW~~}}||{{||}}~~XXYYZZ[[44556677  + + ,,++**))PPOONNMMttssrrqqyyzz{{||bbccddee>>??@@AA,,--..//BBCCDDEE  221100//VVUUTTSSzzyyxxww\\]]^^__8899::;;((''&&%%LLKKJJIIppoonnmm}}~~ffgghhiiBBCCDDEE !!00112233FFGGHHII + + ..--,,++RRQQPPOOvvuuttss``aabbcc<<==>>?? + +$$##""!!HHGGFFEEllkkjjiijjkkllmmFFGGHHII""##$$%%99::;;<>??@@NNOOPPQQ ##$$%%&&&&%%$$##JJIIHHGGnnmmllkkhhiijjkkDDEEFFGG !!""## + +  + + @@??>>==ddccbbaarrssttuuNNOOPPQQ**++,,--AABBCCDDRRSSTTUU!!""##$$''(())**""!! FFEEDDCCjjiihhggllmmnnooHHIIJJKK$$%%&&'' <<;;::99``__^^]]vvwwxxyyRRSSTTUU..//0011EEFFGGHHVVWWXXYY%%&&''((++,,--.. + +BBAA@@??ffeeddccppqqrrssLLMMNNOO(())**++ 88776655\\[[ZZYY~~}}zz{{||}}VVWWXXYY22334455IIJJKKLLZZ[[\\]]))**++,,//001122 >>==<<;;bbaa``__ttuuvvwwPPQQRRSS,,--..// + + + +  44332211XXWWVVUU||{{zzyy~~ZZ[[\\]]66778899MMNNOOUU^^__``aa--..//0033445566::998877^^]]\\[[~~xxyyzz{{TTUUVVWW00112233  + + 00//..--TTSSRRQQxxwwvvuu^^__``aa::;;<<==VVWWXXYYbbccddee11223399778899::66554433ZZYYXXWW~~}}||{{}}||{{zz||}}~~XXYYZZ[[44556677 ,,++**))PPOONNMMttssrrqqbbccddee>>??@@AAZZ[[\\]]ffgghhii::;;<<==;;<<==>> 221100//VVUUTTSSzzyyxxwwyyxxwwvv\\]]^^__8899::;;!!""##$$((''&&%%LLKKJJIIppoonnmmffgghhiiBBCCDDEE^^__``aajjkkllmm>>??@@AA??@@AABB + + ..--,,++RRQQPPOOvvuuttssuuttssrr``aabbcc<<==>>?? !!""%%&&''(($$##""!!HHGGFFEEllkkjjiijjkkllmmFFGGHHIIbbccddeennooppqqBBCCDDEECCDDEEFF !!""**))((''NNMMLLKKrrqqppooqqponmlkddeeffgg@@AABBCC##$$%%&&))**++,, DDCCBBAAhhggffeennooppqqJJKKLLMMffgghhiirrssttuuFFGGHHIIGGHHIIJJ##$$%%&&&&%%$$##JJIIHHGGnnmmllkkkjjiihhghhiijjkkDDEEFFGG !!""##''(())**--..//00 + + @@??>>==ddccbbaarrssttuuNNOOPPQQjjkkqqrrvvwwxxyyJJKKLLMMKKLLMMNN''(())**""!! FFEEDDCCjjiihhgggffeeddc~~llmmnnooHHIIJJKK$$%%&&''++,,--..11223344 <<;;::99``__^^]]vvwwxxyyRRSSTTUUssttuuvvzz{{||}}NNOOUUVVOOPPQQRR++,,--.. + +BBAA@@??ffeeddcc~~}}cbbaa``_}}||{{zzppqqrrssLLMMNNOO(())**++//0011225566778888776655\\[[ZZYY~~}}~~}}||zz{{||}}VVWWXXYYwwxxyyzz~~WWXXYYZZSSTTUUVV//001122 >>==<<;;bbaa``__||{{zzyy_^^]]\\[yyxxwwvvttuuvvwwPPQQRRSS,,--..//3399::;;99::;;<< 44332211XXWWVVUU||{{zzyy{{zzyyxx~~ZZ[[\\]]{{||}}~~[[\\]]^^WWXXYYZZ33445566::998877^^]]\\[[xxwwvvuu[ZZYYXXWuuttssrrxxyyzz{{TTUUVVWW00112233<<==>>??==>>??@@ + + 00//..--TTSSRRQQxxwwvvuuwwvvuutt^^__``aa__``aabb[[\\]]^^778899::66554433ZZYYXXWWttssrrqqWVVUUTSRqqppoonn||}}~~XXYYZZ[[44556677@@AABBCCAABBCCDD ,,++**))PPOONNMMttssrrqqssrrqqpobbccddeeccddeeff__``aabb;;<<==>> 221100//VVUUTTSSkkjjiihhQPOONNMMmmllkkjj\\]]^^__8899::;;DDEEFFGGEEFFGGHH!!""##$$((''&&%%LLKKJJIIppoonnmmnmlkkjjiffgghhiigghhiijjccddeeff??@@AABB + + ..--,,++RRQQPPOOggffeeddLLKKJJIIiihhggff``aabbcc<<==>>??HHIIJJKKIIJJKKLL%%&&''(($$##""!!HHGGFFEEllkkjjiiihhggffejjkkllmmkkqqrrssgghhiijjCCDDEEFF !!""**))((''NNMMLLKKccbbaa``HHGGFFEEeeddccbbddeeffgg@@AABBCCLLMMNNOOMMNNOOPP))**++,, DDCCBBAAhhggffeeeddccbba~~}}||nnooppqqttuuvvwwkkllmmnnGGHHIIJJ##$$%%&&&&%%$$##JJIIHHGG__^^]]\\DDCCBBAAaa``__^^hhiijjkkDDEEFFGGUUVVWWXXQQRRSSTT--..//00 + + @@??>>==ddccbbaa~~}}||{{a``__^^]{{zzyyxxrrssttuuxxyyzz{{ooppqqrrKKLLMMNN''(())**""!! FFEEDDCC[[ZZYYXX@@??>>==]]\\[[ZZ~~llmmnnooHHIIJJKKYYZZ[[\\UUVVWWXX11223344 <<;;::99``__^^]]zzyyxxww]\\[[ZZYwwvvuuttvvwwxxyyfpvp˂rbے`f~HXQJ`ےvpftlJXQJ`ےnvpXQrbtJ`ےdQZ|˂pZXv`fdQZ|nXv`XQJ`ےJXQrfpvbHAZH~ftArdbHAZfHfl|ZbHAZpdrtAJHAbے~HfdrtAJf~HbHAZpZAbnXv`p˂r`vXn|ZdQbp˂r`vXndQbt˂rXQltb`JXQrpvnltbfpvp˂r`JXQrf~HXQJ`ےvpftlJXQJ`ےvpflJtArJ`ےdQZ|˂pZXv`fdQZ|nXv`XQJ`ے˂pZfpvbHAZH~ftArdbHAZH~fd|ZbHAZpdtAJlHAbے~HfdrtAJf~HJltHAbےnXv`p˂r`vXn|ZdQbp˂r`vXndQtArd˂rXQtbn`JXQrpvnltbfpvdrtAJ`JXQrf~HXQJ`ےvpftlJXQJ`ےvpf|ZdQJ`ےvpf˂pZXv`fdQZ|nXv`ltb˂pZfpvJltH~ftArdbHAZH~fbtlbHAZpHf`HAbے~HfdrtAJf~HdQZ|HAbnXv`bdQZ|`vXn|ZdQbp˂r`vXnJtArd˂rXQvXn`JXQrpvnltbfpvdrtAJJQr˂pf~HdrtAvpftlJXQJ`ےvpf|ZdQJ`ےvpfH˂pZXv`fdQZ|nXv`ltbZHAbfpvJltH~ftArdbHAZH~fbtlbHAZp~f`HAbے~HfdrtAJ˂pZf~HdQZ|lے`JXnXv`bdQZ|`vXn|ZdQbp˂r`vXn|ZdQb˂rXQvXn`JXQrpvnltbHAbےfpvtbdQQr˂pf~HdrtAvpftlJXQJ`ےvpftlJJ`ےvpfH˂pZXv`fdQZ|`JXQrnXv`Z|dZHAbfpvJltH~ftArdbHAZH~ftArdbHAZp~f`HAے`~HfdrtAJ˂pZf~HrtAJlے`JXnXv`bdQZ|`vXn|ZdQbp˂r`vXn|ZdQb˂rXQvXnJXQrbpvnltbHAbےfpvtbdQQrZHAf~HdrtAvpftlJXQJ`ےvpftlJJ`ےvpfHtlJXv`fdQZ|`JXQrnXv`Z|dbے`fpvJltے`JXQtArdbHAZH~ftArdtbHAZp~f`tAd|~HfdrtAJ˂pZf~HrtAdQZJXQrnXv`bdQZ|r˂p|ZdQbp˂r`vXnlJtA˂rXQvXnZdQbtpvnltbHAbےfpv|dr˂pZHAf~HdrtAZHAbtlJXQJ`ےvpfrd|J`ےvpfHlJtAXv`fdQZ|`JXQrnXv`tAJlbے`fpvJltے`JXQtArdbHAZH~fZdQbtbHAZp~f`rd|~HfdrtAJ˂pZf~HtbdQZJXQrnXv`bdQZ|r˂p|ZdQbp˂r`vXnlJtA˂rXQvXnZdQbtpvnltbHAbےfpv|dr˂pZAbf~HdrtAZHAbtlJXQJ`ےvpfrd|J`ےvpfHlJtAXv`fdQZ|`JXQrnXv`tAJl璒`JXQfpvJltے`JXQtArdbHAZH~fZdQtArbHAZp~f`rd|HfpdrtAJ˂pZf~HtdrtAr˂pnXv`bdQZ|r˂p|ZdQbp˂r`vXnd|Z˂rXQvXnZdQbtvnrltbHAbےfpvJltZHAbf~HdrtAZHAbtlJXQJ`ےvpfdQbtJ`ےvpfHlJtAXQJ`ےdQZ|`JXQrnXv`bdQZ|`JXQfpvJltے`JXQfpvbHAZH~flJtArbHAZp~f`rd|HAZpdrtAJ˂pZf~HdrtAr˂pnXv`bdQZ|r˂pnXv`p˂r`vXnd|Z˂rXQvXnZdQbt˂rXQltbHAbےfpvJltZHAbf~HdrtAZHAbf~HXQJ`ےvpfdQbtJ`ےvpfHlJtAJ`ےdQZ|`JXQrnXv`bdQZ|JQr˂fpvJltے`JXQfpvbHAZH~fl|ZdQbHAZp~f`rd|bHAZpdrtAJ˂pZf~HltbpZHAbnXv`bdQZ|r˂pnXv`p˂r`vXnbtl˂rXQvXnZdQbt˂rXQltbHAbےfpvdQZ|ے`Jf~HdrtAZHAbf~HXQJ`ےvpfJtArdJ`ےvpfHlJtAJ`ےdQZ|`JXQrnXv`drtAJXQr˂fpvJltے`JXQfpvbHAZH~f|ZdQbHAZp~f`rd|bHAZpdtAJl˂pZf~HltbpZHAbnXv`bdQZ|r˂pnXv`p˂r`vXnbtl˂rXQvXnZdQbt˂rXQtbnHAbےfpvdQZ|JAdf~HdrtAZHAbf~HXQJ`ےvpfJtArdJ`ےvpfHlJtAJ`ےvpf`JXQrnXv`drtAdQ|ZdQbfpvJltے`JXQfpvJltH~ftlJbHAZp~f`rd|bHAZpHf`˂pZf~HZ|dtlJnXv`bdQZ|r˂pnXv`bdQZ|`vXnfpv˂rXQvXnZdQbt˂rXQvXnHAbےfpvrtAJltArdf~HdrtAZHAbf~HdrtAvpfnvfJ`ےvpfHlJtAJ`ےvpfH`JXQrnXv`tbdQ|ZdQbfpvJltے`JXQfpvJltH~f~HfpbHAZp~f`rd|bHAZp~f`˂pZf~HZ|`vtlJnXv`bdQZ|r˂pnXv`bdQZ|`vXnvnX˂rXQvXnZdQbt˂rXQvXnHAbےfpvXnvtArdfHfdrtAZHAbf~HdrtAvpfv`fJ`ےJvpfHlJtAJ`ےvpfH`JXQrnXv`pfH~|ZdQbpvnJltے`JXQfpvJltH~f~Hfpltb~f`rd|bHAZp~f`˂pZp˂rf`vtlJrXQJ`bdQZ|r˂pnXv`bdQZ|`vXnvnXdQZ|vXnZdQbt˂rXQvXnHAbےXQJ`ےXH~tArdےHAZdrtAZHAbf~HdrtAvpfv`f~fdrtAJvpfHlJtAJ`ےvpfH`JXQrbHAZf`vX|ZdQbp˂rJltے`JXQfpvJltے`JXQpvnltb~f`rd|bHAZp~f`˂pZp˂rnvptlJXQJ`ےbdQZ|r˂pnXv`bdQZ|HAbےXv`fdQZ|vXnZdQbt˂rXQvXnHAbےXQJ`ےfH~tArdbHAZdrtAZHAbf~HdrtA`JXQr~HfdrtAJvpfHlJtAJ`ےvpfH`JXQrbHAZf`vX|ZdQbp˂rJltے`JXQfpvJlt˂pZpvnltb~f`rd|bHAZp~f`˂pZp˂rnvptlJXQJ`ےbdQZ|r˂pnXv`bdQZ|HAbےXv`fdQZ|vXnZdQbt˂rXQvXnHAbےXQJ`ے`vXntArdbHAZdtAJZHAbf~HdrtA`JXQr~HfdrtAJvpfےlJtAJ`ےvpfH`JXQrbHAZvpf|ZdQbp˂rltbے`JXQfpvJlt˂p`vnXv`ltb`JXQrrd|bHAZp~f`˂pZp˂rH~ftlJXQJ`ےnvpr˂pnXv`bdQZ|JXQrf~HdQZ|˂pZZdQbt˂rXQvXnHAے`XQJ`ے`vXntArdbHAZfHfZHAbf~HdrtA˂pZHAfpvdrtAJHAbےlJtAJ`ےvpfHJXQrbbHAZvpf|ZdQbp˂r`vXnے`JXQfpvJltbے`nXv`ltb`JXQrrd|bHAZp~f`tlJp˂rH~tlJXQJ`ےvpfr˂pnXv`bdQZ|JXQrf~HdQZ|˂pZZdQbt˂rXQvXntAd|XQJ`ےvpfHtArdbHAZH~fZHAbf~HdrtA˂pZHAfpvdrtAJHAbےlJtAJ`ےvpfHZdQbtbHAZ~f`|ZdQbp˂r`vXnے`JXQfpvJltb˂nvfltb`JXQrrd|bHAZp~f`lJtAp˂rvXntlJXQJ`ےvpfr˂pnXv`bdQZ|pZHAb~HfpdQZ|˂pZZdQbt˂rXQvXnrd|XQJ`ےvpfHtArdbHAZH~fZHAےf~HdrtAے`JvnXdrtAJHAbےlJfJ`ےvpfHZdQbtbHAZ~f`|ZdQbp˂r`vXn`JXQrfpvJltXQr˂v`fltb`JXQrpvnbHAZp~f`lJtAp˂rvXH~tlJXQJ`ےvpfbtlnXv`bdQZ|pZHAb~HfpdQZ|˂pZXv`f˂rXQvXnrd|XQJ`ےf`vtArdbHAZH~fJtAdf~HdrtAے`JvnXdrtAJHAbے~HfJ`ےvpfHZdQbtbHAZXnv|ZdQbp˂r`vXn|ZdQbfpvJltXQHAbv`f~ltb`JXQrpvnbHAZp~f`lJtAp˂rpfH~tlJXQJ`ےvpftlJnXv`bdQZ|ے`JXQfpvdQZ|˂pZXv`f˂rXQvXnrd|XQJ`ےf`vtArdbHAZH~ftArdf~HdrtAr˂pnXv`drtAJHAbے~HfJ`ےvpfHZdQbtbHAZXnv|ZdQbp˂r`vXn|ZdQbfpvJltZHAbf~Hltb`JXQrpvnbHAZp~f`lJtAp˂rp`vXtlJXQJ`ےvpftlJnXv`bdQZ|ے`JXQfpvdQZ|˂pZXv`f˂rXQvXnrd|XQJ`ےnvptArdbHAZH~ftArdfHfdrtAr˂pnXv`drtAJHAbے~HfJ`ےJvpfHZdQbtbHAZfH~|ZdQbp˂r`vXn|ZdQbpvnJlt`JXQrf~Hfltb`JXQrpvnltb~f`lJtAp˂rf`vXtlJXQJ`ےvpftlJrXQJ`bdQZ|˂pZvnXvdQZ|˂pZXv`fdQZ|vXnrd|XQJ`ےnvptArdbHAZH~ftArdےHAZdrtAHAbے`f~drtAJHAbے~HfdrtAJvpfHZdQbtbHAZfH~|ZdQbp˂r`vXn|ZdQbp˂rJlt`JXQrHfpvltb`JXQrpvnltb~f`lJtAp˂rvpftlJXQJ`ےvpftlJXQJ`ےbdQZ|˂pZnXvdQZ|˂pZXv`fdQZ|vXnrd|XQJ`ےے`JXQtArdbHAZH~ftArdbHAZdrtAHAb`ffpdrtAJHAbے~HfdrtAJvpfHZdQbtbHAZrZHA|ZdQbp˂r`vXn|ZdQbp˂rJlt˂pZHAvnrltb`JXQrpvnltb~f`lJtAp˂rbے`tlJXQJ`ےvpftlJXQJ`ےbdQZ|bے`XQJ`ےdQZ|˂pZXv`fdQZ|vXnrd|XQJ`ےJXQrfpvbHAZH~ftArdbHAZdtAJJXQrHAZpdrtAJHAbے~HfdrtAJvpfےZdQbtbHAZpZHAnXv`p˂r`vXn|ZdQbp˂rltb˂p`J˂rXQltb`JXQrpvnltb`JXQrlJtArd|ےbHAf`vd|ZHAZp˂f`vbے`~Hfpltdr˂pHfpvtAJl璐ے`JJtArdےbHAfH~|ZdQbbHAZH~ftArdf~HdrtAZHAbv`fAJltHAbے~HfJ`ےvpfHJAHfZdQbtZp˂XnvdQbt璀rXQJXnvJXQrvnXrtAJlZAb`nXvtbdQZXQr˂|ZdQZp˂f`vXtlJp˂r`vXn|ZdQbfpvJltے`JXQ~HXvbQZd`JXQrpvnbHAZp~f``vXnlJtArXQJ`pfH~lJtAr`ےbpfH~˂pZHAv`ftbdQJXQr`f~|drpZHAbbtlrXQJ`nvptArdXQJ`ےvpftlJnXv`bdQZ|r˂p`f~rtAJl˂pZXv`f˂rXQvXnvˍpfrd|p˂rf`vd|ZHAZp˂f`vbے`~HfpZ|dpZHAHfpvtAJl璐ے`JJtArdےbHAfH~|ZdQtAbHAZH~ftArdfHfdrtAZHAbHfpvtbdQHAbے~HfJ`ےJvpfHH~ㅐfZdQbtXQJ`ےXnvdQbt璀rXQJXnvJXQrvnXrtAJlbے`nXvtbdQZXQr˂|ZdQZp˂f`vXrd|p˂r`vXn|ZdQbpvnJltے`JXQnXvZ|d`JXQrpvnltb~f``vXnlJtAbHAZpfH~lJtAr`ےbpfH~˂pZHAv`ftbdQJXQr`f~|drpZHAbbtlrXQJ`nvpZdQbtXQJ`ےvpftlJrXQJ`bdQZ|r˂p`f~rtAJl˂pZXv`fdQZ|vXnvˍpfrd|p˂rf`vd|ZHAZp˂f`vے`J~HfpZ|l璂pZHAHfpvtAJl璐ے`JJfpvےbHAfH~lJtAbHAZH~ftArdےHAZdrtAZHAbHfpvtbdQHAbے~HfdrtAJvpfHH~ㅐfZdQbtXQJ`ےXnvdQbt璀rXQJXnvXQrbtvnXtbdQZbJQrnXvtbdQZXQr˂nXvZp˂f`vXrd|p˂r`vXn|ZdQbp˂rJltے`JXQ~HZ|rA`JXQrpvnltb~f``vXnlJtAbHAXQpfH~lJtAr`ےbpfH~lJtAv`f|dr˂pZ`f~|drpZHAb`f~rXQJ`nvpZdQbtXQJ`ےvpftlJXQJ`ےbdQZ|r˂pfpvJlt˂pZXv`fdQZ|vXnvˍpfrd|J`ےJf`vd|ZHAZp˂f`vd|Z~HfptAJlHAbےHfpvtAJl璐ے`JHfpvےbHAfH~l|ZbHAZH~ftArdbHAZdrtAZHAbnXv`bdQZ|HAbے~HfdrtAJvpfHH~ㅐfZdQbtltbQXnvdQbt璀rXQJXnvdQbtvnXtbdQZ`JXQrnXvtbdQZXQr˂nXvZp˂f`vXdQbtp˂r`vXn|ZdQbp˂rJltے`JXQf~HdrtA`JXQrpvnltb~f``vXnlJtAZdrtpfH~lJtAr`ےbpfH~lJtArv`f|dr˂pZA`f~|drpZHAb`f~rXQJ`nvplJtArXQJ`ےvpftlJXQJ`ےbdQZ|r˂pfpvJlt˂pZXv`fdQZ|vXnvˍpfrd|AJltf`vd|ZHAZp˂f`vd|Z~HfptAdQZ|`JXQHfpvtAJl璐ے`JHfpvےbHAfH~d|ZbHAZH~ftArdbHAZdtAJZHAbnXv`bdQZ|HAbے~HfdrtAJvpfZH~ㅐfZdQbtbdQZ|XnvdQbt璀rXQJXnvdQbtvnXdrtArbt璀nXvtbdQZXQr˂nXvZp˂f`vXdQbtp˂r`vXn|ZdQbp˂rltbے`JXQpvndrtAJ`JXQrpvnltbHAbے`vXnlJtAdrtpfے`lJtAr`ےbpfH~lJtArv`fJltlJtAd`f~|drpZHAb`f~rXQJ`nvplJtArXQJ`ےvpftlJXQJ`ےnvpr˂pXv`fbdQZ˂pZXv`fdQZ|`JXQrvˍpfrd|AJltJXQrd|ZHAZp˂f`vd|ZHfpvbdQZ||ZdQHfpvtAJl璐ے`JHfpvےJlfH~dtlbHAZH~ftArdbHAZfHfZHAb~Hf|drHAbے~HfdrtAJ˂pZH~ㅐfZdQbtbdQZ|˂pZHAdQbt璀rXQJXnvdQbt璀nrXQltbbtlnXvtbdQZXQr˂nXvtbdQZf`vXJfpvp˂r`vXn|ZdQbp˂r`vXnے`JXQpvntAJl`JXQrpvnltbHAbے`vXnlJfrAJlbے`lJtAr`ےbpfH~lJtArJ`ےnvpJtArd`f~|drpZHAb`f~|drnvpnvfXQJ`ےvpftlJXQJ`ےvpfr˂pXv`ftbdQZ˂pZXv`fdQZ|`JXQrvˍpfpvtbdQJXQrd|ZHAZp˂f`vd|ZHAZp˂`vXn|ZdQHfpvtAJl璐ے`JHfpvtAJlfH~~HfpbHAZH~ftArdbHAZH~fZHAb~HX|AJlHAbے~HfdrtAJ˂p`H~ㅐf~HfpZ|d˂pZHAdQbt璀rXQJXnvdQbt璀rXQJvpfbtlnXvtbdQZXQr˂nXvtbdQZf`vXvnXp˂r`vXn|ZdQbp˂r`vXnے`JXQv`ftbn`JXQrpvnltbJXQr`vXnvnXrtAJlbے`lJtAr`ےbpfH~lJtAr`ےbH~fJtArd`fH|drpZHAb`f~|drnvpv`fXQJ`ےvpftlJXQJ`ےvpfr˂p~Hfpvpf˂pZXv`fdQZ|˂pZHAvˍpfv`ftbdQJXQrd|ZHAZp˂f`vd|ZHAZp˂`vXH|ZdQfpvtAJl璐ے`JHfpvtAJlfH~~HfpJltH~ftArdbHAZH~fZHAےvnXHf`HAbے~HfdrtAJbے`H~ㅐf~HfpZ|d˂pZHAdQbt璀rXQJXnvdQbt璀rXQJ~f`btlnrXQJtbdQZXQr˂nXvtbdQZf`vXvnXbdQZ|`vXn|ZdQbp˂r`vXn`JXQrv`pvvXn`JXQrpvnltbJXQr`vXnvnXrtAJbے`lJfp`ےbpfH~lJtAr`ےbvXnJtArd`ےHA|drpZHAb`f~|drnvpv`f~drtAvpftlJXQJ`ےvpfbtlnrXQvpfH˂pZXv`fdQZ|˂pZHAvˍpfv`pvbdQZ|JXQrvnXHAZp˂f`vd|ZHAZp˂vpfH|ZdQZp˂tAJl璐ے`JHfpvtAJlfے`JfpvJltH~ftArdbHAZH~fJtAdJ`p˂~f`HAbے~HfdrtAJb˂H~ㅐfۀnXvdrtA˂pZHAv`frXQJXnvdQbt璀rXQJ~f`btlrXQJ`tbdQZXQr˂nXvtbdQZXQHAbnXv`bdQZ|`vXn|ZdQbp˂r`vXn|ZdQbrXQJvXn`JXQrpvnltbpZHAb`vXn`f~Jltbے`~Hfp`ےbpfH~lJtAr`ےbvXnJtArdےbHA|drpZHAb`f~|drے`JXQf~HdrtAvpftlJXQJ`ےvpftlJ`ےbvpfH˂pZXv`fdQZ|ے`JvˍpfHfpvbdQZ|JXQrvnXHAZp˂f`vd|ZHAZp˂vp`v|ZdQZp˂tAJl璐ے`JHfpvtAJlr˂pfpvJltH~ftArdbHAZH~ftArdHAZp˂~f`HAے`~HfdrtAJXQr˂H~ㅐfۀnXvdrtA˂pZHAv`frXQJXnvdQbt璀rXQJXnvbtlrXQJ`tbdQZXQr˂nXvtbdQZZHAbnXv`bdQZ|`vXn|ZdQbp˂r`vXn|ZdQbbHAvXnJXQrbpvnltbpZHAb`vXn`f~Jltbbے`~Hfp`ےbpfH~lJtAr`ےbpfH~JtArdےbHA|dtApZHAb`f~|drے`JXQf~HdrtAvpftlJXQJ`ےvpftlJZp˂vpfHtlJXv`fdQZ|ے`JvˍpfHXv`QZdrJXQrvnXHAZp˂f`vd|ZHAZp˂f`v|ZdQZp˂Jltے`JHfpvtAJlr˂pfvnXJltے`JXQtArdbHAZH~ftArdrXQJ`~f`tAd|~HfdrtAJXQHAbH~ㅐff~HtAJl˂pZHAv`frXQJXnvdQbt璀rXQJXnvbtlrXQJ`bnvXQr˂nXvtbdQZ`JXQrv`fbdQZ|r˂p|ZdQbp˂r`vXn|ZdQbےbHAvXnZdQbtpvnltbے`JXQ`vXnfpvtbdQZbے`~Hfp`ےJlpfH~lJtAr`ےbpfH~JtArdےbHApfHpZHAb`f~|dr˂pZ~HfpdrtAZHAbtlJXQJ`ےvpftlJZp˂vpfHlJtAXv`fdQZ|r˂pvˍpfnXv`|drJXQrvnXtbdQf`vd|ZHAZp˂vp|ZdQZp˂f`vXے`JHfpvtAJlHAbےvnXJltے`JXQtArdbHAZH~ftArdrXQJ`~f`rd|~HfdrtAJZHAbH~ㅐff~HtAJl˂pZHAv`fZ|dXnvdQbt璀rXQJfH~btlrXQJ`nvpXQr˂nXvtbdQZ`JXQrv`fbdQZ|r˂p|ZdQbp˂r`vXn|ZdQbp˂rvXnZdQbtpvnltbے`JXQ`vXnfpvtbdQZbے`~HfprtAJlpfH~lJtAr`ےbf`vXJtArdےbHAfH~pZHAb`f~|dr˂pZ~HfpdrtAZHAbtlJXQJ`ےvpftlJXQJ`ےvpfHlJtAXv`fdQZ|r˂pvˍpf~Hf|rAJlJXQrvnXtbdQf`vd|ZHAZp˂nvp|ZdQZp˂f`vXے`JHfpvtAJlHAbvnvfJltے`JXQtArdbHAZH~ftArdbHAZ~f`rd|HfpdrtAJ`JXQrH~ㅐfpvntbd˂pZHAv`fZ|dXnvdQbt璀rXQJfH~btlrXQJ`nvpXQr˂nXvtbdQZ˂pZHA~HfbdQZ|r˂p|ZdQbp˂r`vXn|ZdQbp˂rvXnZdQbtvnrltb˂pZ`vXnXv`fQZ|dbے`~HfprtAJlpfH~lJtAr`ےbf`vXJtArdےbHAfH~pZHA`f~|drbے`pvndrtAZHAbtlJXQJ`ےvpftlJXQJ`ےvpfHlJtAXQJ`ےdQZ|HAbےvˍp|~HfrtAJlJXQrvnXtbdQf`vd|ZHAZp˂H~f|ZdQZp˂f`vXے`JXQHfpvtAJlJXQrXv`fJltے`JXQfpvbHAZH~ftArdbHAXQ~f`rd|HAZpdrtAJ`JXQrdrQtpvntbd˂pZHAv`fZ|dXnvdQbt璀rXQJ`vXnbtlrXQJ`nvprbt璀nXvtbdQZ˂pZHA~HfbdQZ|r˂pnXv`p˂r`vXn|ZdQbJ`ےvXnZdQbt˂rXQltb˂pZJltXv`pQZ|dbے`~HfprtAJlpfے`lJtAr`ےbvpfJtArdےbHAfH~lJtAd`f~|drbے`pvndrtAZHAbf~HXQJ`ےvpftlJbHAZpvpfHlJtAJ`ےdQZ|HAbbAdZ|vnXrtAJJXQrvnXtbdQJXQrd|ZHAZp˂H~f|ZdQZp˂f`vX|ZdQHfpvtAJlJXQHAbXv`fJltے`JXQfpvbHAZH~ftArd˂rXQ~f`rd|bHAZpdrtAJ˂pZHAdrQtv`fbdQZ|˂pZHAv`fZ|d˂pZHAdQbt璀rXQJ`vXnbtlrXQJ`nvpbtlnXvtbdQZے`J~fpvbdQZ|r˂pnXv`p˂r`vXn|ZdQbJ`ےvXnZdQbt˂rXQltbbے`Jlt~HfpdrtAbے`~HfprtAJlbے`lJtAr`ےbvp`JtArdےbHAfH~JtArd`f~|drXQr˂nXv`drtAZHAbf~HXQJ`ےvpftlJbHAZpvpfHlJtAJ`ےdQZ|JXQrbAdZ|vnXJltJXQrvnXtbdQJXQrd|ZHAZp˂vXn|ZdQZp˂f`vX|ZdQHfpvtAJlpZHAbf~HJltے`JXQfpvbHAZH~ftArd˂b~f`rd|bHAZpdtAJl˂p`ZdrQtv`fbdQZ|˂pZHAv`fZ|d˂pZHAdQbt璀rXQJvpfHbtlrXQJ`nvpbtlnXvtbdQZے`JfpvbdQZ|r˂pnXv`p˂r`vXn|ZdQbHAZp˂vXnZdQbt˂rXQtbnQXb㉀Jlt~HXvAJlbے`~HfprtAJlbے`lJtAr`ےb~f`JtArdےbHAfH~JtArd`fH|drXQr˂nXv`drtAZHAbf~HXQJ`ےvpftlJrXQJvpfHlJtAJ`ےvpfpJAHrbAdZ|`f~tbnJXQrvnXtbdQJXQrd|ZHAZp˂vXn|ZdQZp˂f`vX|ZdQfpvtAJlp`JXQf~HJltے`JXQfpvJltH~ftArd`ےb~f`rd|bHAZpHf`ˁ`ZdrQtHfpvvpfH˂pZHAv`fZ|d˂pZHAdQbt璀rXQJvpfHbtlrXQJ`nvpbtlnrXQJtbdQZr˂pfvnXbdQZ|r˂pnXv`bdQZ|`vXn|ZdQbHAZp˂vXnZdQbt˂rXQvXnQXAHrJltnXvf`vbے`~HfprtAJlbے`lJfp`ےb~vJtArdےbHAfH~JtArd`ےHA|drZHAbv`fdrtAZHAbf~HdrtAvpftlJrXQJvpfHlJtAJ`ےvpfHˁ`ZQXbAdZ|`pvXnvJXQrvnXtbdQJXQrvnXHAZp˂pfے`|ZdQZp˂f`vX|ZdQZp˂tAJlے`JXQ~HfpJltے`JXQfpvJltH~ftArd`p˂~f`rd|bHAZp~f`b㉀ۑpdrQtnrXQJpfH~˂pZHAv`fZ|d˂pZHAv`frXQJJXQrbtlrXQJ`nvpbtlrXQJ`tbdQZr˂pvnXbdQZ|r˂pnXv`bdQZ|`vXn|ZdQbrXQJ`vXnZdQbt˂rXQvXnJAHrJlt`p˂f`vbے`~HfprtAJlbے`~Hfp`ےbZHAbJtArdےbHAfH~JtArdےbHA|drZHAbv`ffdrtAZHAbf~HdrtAvpftlJےbHAvpfHlJtAJ`ےvpfHˁ`ZQXbAdZ|rXQJ`XnvJXQrvnXtbdQJXQrvnXHAZp˂`JXQ|ZdQZp˂f`vX|ZdQZp˂tAJl璀˂pZpvnJltے`JXQfpvJltH~ftArdZp˂~f`rd|bHAZp~f`b㉀ۑpdrQtےbHApfH~˂pZHAv`fZ|d˂pZHAv`frXQJr˂pbtlrXQJ`nvpbtlrXQJ`tbdQZHAbےrXQJ`bdQZ|r˂pnXv`bdQZ|`vXn|ZdQbrXQJ`vXnZdQbt˂rXQvXn`ZQXbJltZp˂f`vے`J~HfprtAJlbے`~Hfp`ےbZHAbJfpvےbHAfH~JtArdےbHA|dtA`JXQrےHAZdrtAZHAbf~HdrtAvpftlJےbHAvpfHlJtAJ`ےvpfHۑpJbAdZ|bHAZXnvXQrbtvnXtbdQJXQrvnXHAZp˂`JXQnXvZp˂f`vX|ZdQZp˂Jlt˂p`p˂rJltے`JXQfpvJltے`JXQtArdXQJ`ے~f`rd|bHAZp~f`AHr󙐂˂drQtp˂rpfH~lJtAv`fZ|d˂pZHAv`frXQJr˂pZ`f~rXQJ`nvpbtlrXQJ`bnvJXQrbXQJ`ےbdQZ|r˂pnXv`bdQZ|r˂p|ZdQbJltvXnZdQbt˂rXQvXn`ZQXbJltXQJ`ےf`vd|Z~HfprtAJlbے`~Hfp`ےJlAb`JHfpvےbHAfH~JtArdےbHApfHtl|bHAZdrtAZHAbf~HdrtAZHAbtlJbQZdvpfHlJtAJ`ےvpfHۑpJbAdZ|bHAZXnvdQbtvnXtbdQJXQrvnXtdrXQr˂nXvZp˂f`vX|ZdQZp˂f`vXZdQbtp˂rJltے`JXQfpvJltے`JXQtArdrtAJl~f`rd|bHAZp~f`AHr󙐉drQtp˂rpfH~lJtArv`fZ|d˂pZHAv`ftAJlpZHAb`f~rXQJ`nvpbtlrXQJ`nvplJtAXQJ`ےbdQZ|r˂pnXv`bdQZ|r˂p|ZdQbtbdQvXnZdQbt˂rXQvXnۑpJAHJltXQJ`pf`vd|Z~HfprtAJlbے`~HfptbdQZے`JHfpvےbHAfH~JtArdےbHAfH~rd|bHAZdtAJZHAbf~HdrtAZHAbtlJZ|dvpfےlJtAJ`ےvpfHr󙐂ˁ`bAdZ|˂rXQXnvdQbtvnXtbdQJXQrvnX|drXQr˂nXvZp˂f`vX|ZdQZp˂f`vXZdQtArp˂rltbے`JXQfpvJltے`JXQtArdrtAJl`JXQrrd|bHAZp~f`ZQXb㉀drQtJ`ےpfH~lJtArv`fZ|d˂pZHAv`ftAJlpZHAb`f~rXQJ`nvpbtlrXQJ`nvpd|ZXQJ`ےnvpr˂pnXv`bdQZ|r˂p|ZdQbtbdQ瀉˂pZZdQbt˂rXQvXnۑpJAHJltbHAZpf`vd|ZHfpvrtAJlbے`~HfptbdQZJQrHfpvےJlfH~JtArdےbHAfH~dQbt璐bHAZfHfZHAbf~HdrtAZHAbtlJZ|rAJHAbےlJtAJ`ےvpfHr󙐂ˁ`bAdZ|˂rXQXnvdQbt璀nrXQtbdQJXQrvnX|lt˂pZHnXvtbdQZf`vX|ZdQZp˂f`vXlJtArp˂r`vXnے`JXQfpvJltے`JXQfpvltb`JXQrrd|bHAZp~f`ZQXAHrdrQtJ`ےpfH~lJtArJ`ےZ|d˂pZHAv`fbdQZ|Abے``f~|drnvpbtlrXQJ`nvpd|ZXQJ`ےvpfr˂pnXv`bdQZ|r˂p~HfdQZ|˂pZZdQbt˂rXQvXnˁ`ZJltbHAXQJf`vd|ZHAZp˂rtAJlbے`~HfpdrtAJXQrHfpvtAJlfH~JtArdےbHAfH~dQbt璐bHAZH~fZHAbf~HdrtAZHAbpvndrtAJHAbےlJtAJ`ےvpfHQXb㉀bAdZ|`ےbXnvdQbt璀rXQJtbdQJXQrvnXJlt˂pZHnXvtbdQZf`vX|ZdQZp˂f`vXl|ZdQp˂r`vXnے`JXQfpvJltے`JXQXv`fltb`JXQrrd|bHAZp~f`pJAHrdrQtHAZp˂pfH~lJtAr`ےbZ|d˂pZHAv`fbdQZ|Abے``f~|drnvpbtlrXQJ`nvpbtlXQJ`ےvpfr˂pnXv`bdQZ|r˂p~HfdQZ|˂pZZdQbt˂rXQvXnˁ`ZJltrXQJf`vd|ZHAZp˂rtAJlbے`~HfpdrtAJXQrHfpvtAJlfH~JtArdےbHAfH~JtArdbHAZH~fZHAےf~HdrtAZHAbpvndrtAJHAbےlJfJ`ےvpfHQXb㉀bAdZ|`ےbXnvdQbt璀rXQJtbdQJXQrvnXdQZ|ZHAbnXvtbdQZf`vX|ZdQZp˂f`vX|ZdQp˂r`vXn`JXQrfpvJltے`JXQXv`pbdQZ|`JXQrpvnbHAZp~f`p`ZQXdrQtHAZp˂pfH~lJtAr`ےbZ|d˂pZHAv`fdrtAJے`JXQ`f~|drnvpbtlrXQJ`nvpbtlXQJ`ےvpfbtlnXv`bdQZ|r˂pvnXdrt˂pZXv`f˂rXQvXnb㉀ۑpJltbHAf`vd|ZHAZp˂tAJlbے`~Hfpltbr˂pHfpvtAJlfے`JJtArdےbHAfH~JtArdbHAZH~fJtAdf~HdrtAZHAbv`fAJltHAbے~HfJ`ےvpfHJAHrbAdZ|Zp˂XnvdQbt璀rXQJtbnJXQrvnXdQZ|ZHAbnXvtbdQZXQr˂|ZdQZp˂f`vXtlJp˂r`vXn|ZdQbfpvJltے`JXQ~HfpbdQZ|`JXQrpvnbHAZp~f`ˁ`ZQXdrQtrXQJ`pfH~lJtAr`ےbvpfH˂pZHAv`fdrtAJے`JXQ`f~|drpZHAbbtlrXQJ`nvptArdXQJ`ےvpftlJnXv`bdQZ|r˂pvnXdrt˂pZXv`f˂rXQvXnb㉀ۑpJlt----------................................................................... \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv39_3.dat b/vendor/endroid/qr-code/assets/data/qrv39_3.dat new file mode 100644 index 000000000..792dee0be --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv39_3.dat @@ -0,0 +1,345 @@ +~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdc~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdc~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdc~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghgfefedcdcdcdc~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqponmnmnmnmjijijijifefefefedcdcdcdc~}~}~}~}zyzyzyzyxwxwxwvutstststspopopoponmnmnmnmjijijijifefefefedcdcdcdc~}~}~}|{zyzyzyzyvuvuvuvutstststspopopoponmnmnmnmjijijijifefefefedcdcdcdc|{|{|{|{zyzyzyzyvuvuvuvutstststspopopoponmnmnmnmjijijijifefefefedcdcdcdc|{|{|{|{zyzyzyzyvuvuvuvutstststspopopoponmnmnmlkjijijijifefefefedcdcdcdc|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopolklklkkkjijijijifefefefedcdcdcdc|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopokkklklkljijijijifefefefedcdcdcdc|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopoklklklkljijijijifefefefedcdcdcdc|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopoklklklkljijijijifefefefedcdcdcdc|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopoklklklkljijijijifefefefedcdcdcdc|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopoklklklkljijijijifefefefedcdcdcdc|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopoklklklkljijijijifefefefedcdcdcdc|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopokkkkkklkjijijijifefefefedcdcdcdc|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopolklklklkjijijijifefefefedcdcdcdc|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopolklklklkjijijijifefefefedcdcdcdc|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopolklklklkjijijijifefefefedcdcdcdc|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopolklklklkjijijijifefefefedcdcdcdc|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopolklklklkjijijijifefefefedcdcdcdc|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopolklkkkkkjijijijifefefefedcdcdcdc|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopoklklklkljijijijifefefefedcdcdcdc|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopoklklklkljijijijifefefefedcdcbaba|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopoklklklkljijihghgfefefefebabababa|{|{|{|{zyzyzyzyvuvuvuvutststsrqpopopopoklklklklhghghghgfefefefebabababa|{|{|{|{zyzyzyxwvuvuvuvurqrqrqrqpopopopoklklklklhghghghgfefefefebabababa~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopoklklklkkhghghghgfefefefebabababa~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopokkkklklkhghghghgfefefefebabababa~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopolklklklkhghghghgfefefefebabababa~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopolklklklkhghghghgfefefefebabababa~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopolklklklkhghghghgfefefefebabababa~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopolklklklkhghghghgfefefefebabababa~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopolklklklkhghghghgfefefefebabababa~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopolkkkkkklhghghghgfefefefebabababa~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopoklklklklhghghghgfefefefebabababa~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopoklklklklhghghghgfefefefebabababa~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqpopopopoklklklklhghghghgfefefefebabababa~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqponmnmnmklklklklhghghghgfefefefebabababa~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmklklklklhghghghgfefefefebabababa~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmklklkkkkhghghghgfefefefebabababa~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmkklklklkhghghghgfefefefebabababa~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefebabababababababa~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefebabababababababa~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefebabababababa`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmkkkklklkhghghghgfefedcdcbabababa`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklkjijihghghghgdcdcdcdcbabababa`_`_`_`_~}~}~}~}|{|{|{|{xwxwxwxwvuvuvutsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_~}~}~}~}|{|{|{zyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_~}~}~}~}zyzyzyzyxwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]ZYZYZYZYXWXWVUVUTSTSTSTSOPOPOPOPLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:987878787434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    `_`_`_`_^]^]\[\[ZYZYZYZYVUVUVUVUTSTSTSTSOPOPOPOPLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:987878787434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSOPOPOOOOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:987878787434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSOOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:987878787434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:987878787434343330/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:987878787333434340/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:987878787343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:987878787343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:987878765343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSOOOOOPOPLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSOPOPOPOPLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSOPOPOPOPLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565333333430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSOPOPOPOPLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQOPOPOPOPLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQOPOPOPOPLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQOPOOOOOOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434333330/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOOOLKLKLKLKJIJIJIJIFEFEFEFEDCBABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQOOPOPOPOLKLKLKLKJIHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPONMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + `_`_`_`_\[\[\[\[ZYZYXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + `_`_^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + ^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#       + + + + ^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + ^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + ^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + ^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!     + + + + ^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + + ^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + + ^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;:98787876565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + + ^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?>=>=>=<;<;<;<;878787876565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + + ^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEDCDCDCBABABABA>=>=>=>=<;<;<;<;878787876565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + + ^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787876565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + + ^]^]^]^]\[\[\[\[XWXWXWXWVUVUTSTSRQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787876543434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + + ^]^]^]^]\[\[ZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787874333333421212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787873434343421212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787873434343421212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSRQRQPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787873434343421212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOOOOONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787873434343421212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787873434343421212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787873434333321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787873343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOOOOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!        ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787873333343421212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787873434343421212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"!    ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787873434343421212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;87878787343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOOOOOOPNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;:9:9:987878787343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBA@?@?@?>=>=>=>=:9:9:9:987878787343434340/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPNMNMNMNMJIJIJIJIHGFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:987878787343333330/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    ^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSOPOPOPOPNMLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:987878787434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    iijjkkllMMNNOOUU%%&&''((00//..----..//00((''&&%%||{{zzyyjjkkqqrr66778899ssrrqqpp>>??@@AAkkjjiihhGGHHIIJJ bbaa``__mmnnooppVVWWXXYY))**++,,,,++**))~~}}11223344$$##""!!xxwwvvuussttuuvv::;;<<==oonnmmllBBCCDDEEggffeeddKKLLMMNN + + ^^]]\\[[qqrrssttZZ[[\\]]--..//00((''&&%%||{{zzyy55667788 ttssrrqqwwxxyyzz>>??@@AAkkjjiihhFFGGHHII ccbbaa``OOPPQQRRZZYYXXWWuuvvwwxx^^__``aa11223344$$##""!!xxwwvvuu99::;;<<ppoonnmm{{||}}~~BBCCDDEEggffeeddJJKKLLMM + + __^^]]\\SSTTUUVVVVUUTTSSyyzz{{||bbccddee55667788 ttssrrqq==>>??@@llkkjjiiFFGGHHII ccbbaa``NNOOPPQQ[[ZZYYXXWWXXYYZZRRQQPPOO}}~~ffgghhii99::;;<<ppoonnmmAABBCCDDhhggffeeJJKKLLMM + + __^^]]\\RRSSTTUUWWVVUUTT[[\\]]^^ + +NNMMLLKKjjkkqqrr==>>??@@llkkjjiiEEFFGGHH ddccbbaaNNOOPPQQ[[ZZYYXXVVWWXXYYSSRRQQPP__``aabb JJIIHHGGssttuuvvAABBCCDDhhggffeeIIJJKKLL + + ``__^^]]RRSSTTUUWWVVUUTTZZ[[\\]] OONNMMLLccddeeffFFEEDDCCwwxxyyzzEEFFGGHH ddccbbaaMMNNOOPP\\[[ZZYYVVWWXXYYSSRRQQPP^^__``aa + + KKJJIIHHgghhiijjBBAA@@??{{||}}~~IIJJKKLL + + ``__^^]]QQRRSSTTXXWWVVUUZZ[[\\]] OONNMMLLbbccddeeGGFFEEDDkkllmmnn>>==<<;;MMNNOOPP\\[[ZZYYUUVVWWXXTTSSRRQQ^^__``aa + + KKJJIIHHffgghhiiCCBBAA@@ooppqqrr::998877~~}}QQRRSSTTXXWWVVUUYYZZ[[\\PPOONNMMbbccddeeGGFFEEDDjjkkllmm??>>==<>==<>==rrssttuu !!77665544zz{{||}}&&''(())//..--,,yyxxwwvv//001122&&%%$$##llkkjjiieeffgghhDDCCBBAAmmnnoopp<<;;::99vvwwxxyy""##$$%%33221100~~**++,,--++**))((uuttssrr33445566""!! hhggffeeiijjkkll@@??>>==qqrrsstt 88776655zz{{||}}&&''(())//..--,,..//0011''&&%%$$qqkkjjii778899::ddccbbaammnnoopp<<;;::99uuvvwwxx!!""##$$44332211~~}}||{{~~**++,,--++**))((~~}}||22334455##""!! hhggffee;;<<==>>``__^^]]qqrrsstt 88776655yyzz{{||%%&&''((00//..--zzyyxxww..//0011''&&%%$${{zzyyxx66778899ddccbbaa~~}}||{{??@@AABB\\[[ZZYYuuvvwwxx!!""##$$44332211}}~~))**++,,,,++**))vvuuttss22334455##""!! wwvvuutt::;;<<==``__^^]]zzyyxxwwCCDDEEFFXXWWVVUUyyzz{{||%%&&''((00//..----..//00((''&&%%rrqqkkjj66778899ssrrqqpp>>??@@AA\\[[ZZYYvvuuttssGGHHIIJJ TTSSRRQQ}}~~))**++,,,,++**))~~}}11223344$$##""!!iihhggff::;;<<==oonnmmllBBCCDDEEXXWWVVUUrrqqponmKKLLMMNN + + PPOONNMM--..//00((''&&%%||{{zzyy55667788 eeddccbb~~}}||>>??@@AAkkjjiihhFFGGHHII OONNMMLLlkkjjiihOOPPQQRRLLKKJJII11223344$$##""!!xxwwvvuu99::;;<<aa``__^^{{zzyyxxBBCCDDEEggffeeddJJKKLLMM + + KKJJIIHHhggffeedSSTTUUVVHHGGFFEE55667788 ttssrrqq==>>??@@]]\\[[ZZwwvvuuttFFGGHHII ccbbaa``NNOOPPQQGGFFEEDDdccbbaa`WWXXYYZZDDCCBBAA~~}}||{{99::;;<<ppoonnmmAABBCCDDYYXXWWVVssrrqqpoJJKKLLMM + + __^^]]\\RRSSTTUUCCBBAA@@`__^^]]\[[\\]]^^ + +@@??>>==zzyyxxww==>>??@@llkkjjiiEEFFGGHH UUOONNMMnmlkkjjiNNOOPPQQ[[ZZYYXXVVWWXXYY??>>==<<\[[ZZYYX__``aabb <<;;::99vvuuttssAABBCCDDhhggffeeIIJJKKLL + + LLKKJJIIihhggffeRRSSTTUUWWVVUUTTZZ[[\\]] ;;::9933XWWVVUUTccddeeff88776655rrqqkkjj~~}}||EEFFGGHH ddccbbaaMMNNOOPPHHGGFFEEeddccbbaVVWWXXYYSSRRQQPP^^__``aa + + 221100//SRQPOONNgghhiijj44332211iihhggff{{zzyyxxIIJJKKLL + + ``__^^]]QQRRSSTTDDCCBBAAa``__^^]ZZ[[\\]] OONNMMLLbbccddee..--,,++MMLLKKJJkkllmmnn00//..--eeddccbbwwvvuuttMMNNOOPP\\[[ZZYYUUVVWWXX@@??>>==]\\[[ZZY^^__``aa + + KKJJIIHHffgghhii**))((''IIHHGGFFooppqqrr,,++**))aa``__^^ssrrqqpoQQRRSSTTXXWWVVUUYYZZ[[\\<<;;::99YXXWWVVUbbccddeeGGFFEEDDjjkkllmm&&%%$$##EEDDCCBBssttuuvv !!""((''&&%%]]\\[[ZZnmlkkjjiUUVVWWXXTTSSRRQQ]]^^__`` + + 33221100UTSRQPOOffgghhiiCCBBAA@@nnooppqq""!! AA@@??>>wwxxyyzz##$$%%&&$$##""!!YYXXWWVVihhggffeYYZZ[[\\PPOONNMMaabbccdd //..--,,NNMMLLKKjjkkllmm??>>==<>==qqrrsstt >>==<<;;zz{{||}}&&''(())//..--,,..//0011 +**))(('zzyyxxww778899:: @@??>>==UTSRQPOOmmnnoopp<<;;::99uuvvwwxx!!""##$$::998765~~**++,,--++**))((~~}}||22334455'&&%%$$#vvuuttss;;<<==>> + + <<;;::99NNMMLLKKqqrrsstt 88776655yyzz{{||%%&&''((43322110..//0011''&&%%$${{zzyyxx66778899 + + #""!! rrqqppoo??@@AABB + + 33221100JJIIHHGGuuvvwwxx!!""##$$44332211}}~~))**++,, 0//..--,~~}}||22334455##""!! wwvvuutt::;;<<== nnmmllkkCCDDEEFF //..--,,FFEEDDCCyyzz{{||%%&&''((00//..----..//00 + + ,++**))({{zzyyxx66778899ssrrqqpp>>??@@AAjjiihhggGGHHIIJJ++**))((BBAA@@??}}~~))**++,,,,++**))~~}}11223344(''&&%%$wwvvuutt::;;<<==oonnmmllBBCCDDEEffeeddccKKLLMMNN''&&%%$$>>==<<;;--..//00((''&&%%||{{zzyy55667788 + +$##""!! ssrrqqpp>>??@@AAkkjjiihhFFGGHHII  bbaa``__OOPPQQRR##""!! ::998765~~}}11223344$$##""!!xxwwvvuu99::;;<<  oonnmmllBBCCDDEEggffeeddJJKKLLMM!!""##$$ + + ^^]]\\[[SSTTUUVV 43322110||{{zzyy55667788 ttssrrqq==>>??@@kkjjiihhFFGGHHII ccbbaa``NNOOPPQQ%%&&''((ZZYYXXWWWWXXYYZZ!!""##$$0//..--,xxwwvvuu99::;;<<ppoonnmmAABBCCDDggffeeddJJKKLLMM + + __^^]]\\RRSSTTUU))**++,,VVUUTTSS[[\\]]^^%%&&''((,++**))(ttssrrqq==>>??@@llkkjjiiEEFFGGHHccbbaa``NNOOPPQQ[[ZZYYXXVVWWXXYY--..//00RRQQPPOO__``aabb))**++,, (''&&%%$ppoonnmmAABBCCDDhhggffeeIIJJKKLL !!""## + +__^^]]\\RRSSTTUUWWVVUUTTZZ[[\\]]11223399 + +NNMMLLKKccddeeff--..//00 + + + +$##""!! llkkjjiiEEFFGGHH ddccbbaaMMNNOOPP$$%%&&'' [[ZZYYXXVVWWXXYYSSRRQQPP^^__``aa::;;<<== JJIIHHGGgghhiijj11223344  hhggffeeIIJJKKLL + + ``__^^]]QQRRSSTT(())**++WWVVUUTTZZ[[\\]] OONNMMLLbbccddee>>??@@AAFFEEDDCCkkllmmnn55667788ddccbbaaMMNNOOPP\\[[ZZYYUUVVWWXX,,--..//SSRRQQPP^^__``aa + + KKJJIIHHffgghhiiBBCCDDEEBBAA@@??ooppqqrr99::;;<<``__^^]]QQRRSSTTXXWWVVUUYYZZ[[\\00112233 OONNMMLLbbccddeeGGFFEEDDjjkkllmmFFGGHHII>>==<<;;ssttuuvv==>>??@@\\[[ZZYYUUVVWWXXTTSSRRQQ]]^^__``99::;;<< + + KKJJIIHHffgghhiiCCBBAA@@nnooppqqJJKKLLMM::998877wwxxyyzzAABBCCDD !!""## + +XXWWVVUUYYZZ[[\\PPOONNMMaabbccdd==>>??@@GGFFEEDDjjkkllmm??>>==<>==<>==qqrrssttMMNNOOUU !!77665544zz{{||}}&&''(())//..--,,ccddeeff//001122&&%%$$##zzyyxxwwvvuuttssUUVVWWXX99::;;<<DDCCBBAAmmnnoopp<<;;::99uuvvwwxxVVWWXXYY""##$$%%33221100~~**++,,--++**))((~~}}||gghhiijj33445566""!! vvuuttssrrqqppooYYZZ[[\\==>>??@@@@??>>==qqrrsstt 88776655yyzz{{||ZZ[[\\]]&&''(())//..--,,..//0011''&&%%$${{zzyyxxkkqqrrss778899::rrqqppoonnmmllkk]]^^__``AABBCCDD<<;;::99uuvvwwxx!!""##$$44332211}}~~^^__``aa**++,,--++**))((~~}}||22334455##""!! wwvvuuttttuuvvww;;<<==>>nnmmllkkjjiihhggaabbccddEEFFGGHH 88776655yyzz{{||%%&&''((00//..--bbccddee..//0011''&&%%$${{zzyyxx66778899ssrrqqppxxyyzz{{??@@AABBjjiihhggffeeddcceeffgghhIIJJKKLL!!""##$$44332211}}~~))**++,,,,++**))~~}}ffgghhii22334455##""!! wwvvuutt::;;<<==oonnmmll||}}~~CCDDEEFFffeeddccbbaa``__^^]]\\[[SSTTUUVVBBAA@@??_^^]]\\[\\]]^^__ + + MMLLKKJJddeeffgg,,++**))KKJJIIHHmmnnoopp<<;;::99uuvvwwxx!!""##$$::998765~~**++,,--++**))((rrqqkkjjssrrqqppZZYYXXWWWWXXYYZZ>>==<<;;[ZZYYXXW``aabbcc IIHHGGFFhhiijjkk((''&&%%GGFFEEDDqqrrsstt 88776655yyzz{{||%%&&''((43322110..//0011''&&%%$$iihhggffoonnmmllVVUUTTSS[[\\]]^^ + +::993322WVVUUTSRddeeffggEEDDCCBBllmmnnoo$$##""!!CCBBAA@@uuvvwwxx!!""##$$44332211}}~~))**++,, 0//..--,~~}}||22334455##""!! eeddccbbkkjjiihhRRQQPPOO__``aabb 1100//..QPOONNMMhhiijjkkAA@@??>>ppqqrrss ??>>==<>??@@AAYYXXWWVV__^^]]\\FFEEDDCCkkllmmnn%%$$##""DDCCBBAAttuuvvww !!""##55443322||}}~~(())**++ 100//..-~~}}11223344$$##""!!xxwwvvuu99::;;<<  oonnmmllBBCCDDEEUUOONNMM[[ZZYYXXBBAA@@??ooppqqrr!! @@??>>==xxyyzz{{$$%%&&''1100//..,,--..// + + -,,++**)||{{zzyy55667788 ttssrrqq==>>??@@kkjjiihhFFGGHHII LLKKJJIIWWVVUUTT>>==<<;;ssttuuvv !!""<<;;::99||}}~~(())**++--,,++**~~00112233)((''&&%xxwwvvuu99::;;<<ppoonnmmAABBCCDDggffeeddJJKKLLMM + + HHGGFFEESSRRQQPP::998877wwxxyyzz##$$%%&&87654332,,--..//))((''&&}}||{{zz44556677 %$$##""!ttssrrqq==>>??@@llkkjjiiEEFFGGHHccbbaa``NNOOPPQQDDCCBBAAOONNMMLL66554433{{||}}~~''(())** 21100//.~~00112233%%$$##""yyxxwwvv8899::;; + + ! ppoonnmmAABBCCDDhhggffeeIIJJKKLL !!""## + +__^^]]\\RRSSTTUU@@??>>==KKJJIIHH221100//++,,--.. + + .--,,++*}}||{{zz44556677!! uuttssrr<<==>>??llkkjjiiEEFFGGHH ddccbbaaMMNNOOPP$$%%&&'' [[ZZYYXXVVWWXXYY<<;;::99GGFFEEDD..--,,++//001122*))((''&yyxxwwvv8899::;;qqppoonn@@AABBCChhggffeeIIJJKKLL + + ``__^^]]QQRRSSTT(())**++WWVVUUTTZZ[[\\]] 33221100CCBBAA@@**))((''~~}}||{{33445566&%%$$##"uuttssrr<<==>>??mmllkkjjDDEEFFGGddccbbaaMMNNOOPP\\[[ZZYYUUVVWWXX,,--..//SSRRQQPP^^__``aa + + //..--,,??>>==<<&&%%$$##zzyyxxww778899:: + + "!! qqppoonn@@AABBCCiihhggffHHIIJJKK !!"" ``__^^]]QQRRSSTTXXWWVVUUYYZZ[[\\00112233 OONNMMLLbbccddee++**))((;;::9988""!! vvuuttss;;<<==>> mmllkkjjDDEEFFGGeeddccbbLLMMNNOO##$$%%&& + + \\[[ZZYYUUVVWWXXTTSSRRQQ]]^^__``99::;;<< + + KKJJIIHHffgghhii''&&%%$$77665544rrqqppoo??@@AABBiihhggffHHIIJJKK + +aa``__^^PPQQRRSS''(())**XXWWVVUUYYZZ[[\\PPOONNMMaabbccdd==>>??@@GGFFEEDDjjkkllmm##""!! 33221100nnmmllkkCCDDEEFFeeddccbbLLMMNNOO ]]\\[[ZZTTUUVVWW++,,--..TTSSRRQQ]]^^__`` + + LLKKJJIIeeffgghhAABBCCDDCCBBAA@@nnooppqq//..--,,jjiihhggGGHHIIJJ !! aa``__^^PPQQRRSSYYXXWWVVXXYYZZ[[//001122PPOONNMMaabbccdd HHGGFFEEiijjkkllEEFFGGHH??>>==<>?? HHGGFFEEiijjkkll@@??>>==qqrrssttMMNNOOUU !!77665544zz{{||}}&&''(()) ##""!! + + ^^]]\\[[SSTTUUVV**++,,--UUTTSSRR\\]]^^__ + + MMLLKKJJddeeffgg@@AABBCCDDCCBBAAmmnnoopp<<;;::99uuvvwwxxVVWWXXYY""##$$%%33221100~~**++,,-- + + + +ZZYYXXWWWWXXYYZZ..//0011QQPPOONN``aabbcc IIHHGGFFhhiijjkkDDEEFFGG@@??>>==qqrrsstt 88776655yyzz{{||ZZ[[\\]]&&''(())//..--,,..//0011 VVUUTTSS[[\\]]^^223399:: + + MMLLKKJJddeeffggEEDDCCBBllmmnnooHHIIJJKK<<;;::99uuvvwwxx!!""##$$44332211}}~~^^__``aa**++,,--++**))((~~}}||22334455RRQQPPOO__``aabb;;<<==>> IIHHGGFFhhiijjkkAA@@??>>ppqqrrssLLMMNNOO 88776655yyzz{{||%%&&''((00//..--bbccddee..//0011''&&%%$${{zzyyxx66778899 + +NNMMLLKKccddeeff??@@AABBEEDDCCBBllmmnnoo==<<;;::ttuuvvwwUUVVWWXX!!""##$$44332211}}~~))**++,,,,++**))~~}}ffgghhii22334455##""!! wwvvuutt::;;<<== JJIIHHGGgghhiijjCCDDEEFFAA@@??>>ppqqrrss99887766xxyyzz{{YYZZ[[\\%%&&''((00//..----..//00((''&&%%||{{zzyyjjkkqqrr66778899ssrrqqpp>>??@@AA !!""## + + FFEEDDCCkkllmmnnGGHHIIJJ==<<;;::ttuuvvww !!""##55443322||}}~~]]^^__``))**++,,,,++**))~~}}11223344$$##""!!xxwwvvuussttuuvv::;;<<==oonnmmllBBCCDDEE$$%%&&'' + + BBAA@@??ooppqqrrKKLLMMNN99887766xxyyzz{{$$%%&&''1100//..aabbccdd--..//00((''&&%%||{{zzyy55667788 ttssrrqqwwxxyyzz>>??@@AAkkjjiihhFFGGHHII(())**++>>==<<;;ssttuuvvOOUUVVWW !!""##55443322||}}~~(())**++--,,++**~~eeffgghh11223344$$##""!!xxwwvvuu99::;;<<ppoonnmm{{||}}~~BBCCDDEEggffeeddJJKKLLMM,,--..//::998877wwxxyyzzXXYYZZ[[$$%%&&''1100//..,,--..//))((''&&}}||{{zziijjkkqq55667788 ttssrrqq==>>??@@llkkjjiiFFGGHHII ccbbaa``NNOOPPQQ00112233 !!""66554433{{||}}~~\\]]^^__(())**++--,,++**~~00112233%%$$##""yyxxwwvvrrssttuu99::;;<<ppoonnmmAABBCCDDhhggffeeJJKKLLMM + + __^^]]\\RRSSTTUU99::;;<<##$$%%&&221100//``aabbcc,,--..//))((''&&}}||{{zz44556677!! uuttssrrvvwwxxyy==>>??@@llkkjjiiEEFFGGHH ddccbbaaNNOOPPQQ[[ZZYYXXVVWWXXYY==>>??@@ !!''(())**..--,,++ddeeffgg00112233%%$$##""yyxxwwvv8899::;;qqppoonnzz{{||}}AABBCCDDhhggffeeIIJJKKLL + + ``__^^]]RRSSTTUUWWVVUUTTZZ[[\\]]AABBCCDD""##$$%%++,,--..**))((''~~}}||{{hhiijjkk44556677!! uuttssrr<<==>>??mmllkkjj~~EEFFGGHH ddccbbaaMMNNOOPP\\[[ZZYYVVWWXXYYSSRRQQPP^^__``aaEEFFGGHH&&''(())//001122&&%%$$##zzyyxxwwqqrrsstt8899::;;qqppoonn@@AABBCCiihhggffIIJJKKLL + + ``__^^]]QQRRSSTTXXWWVVUUZZ[[\\]] OONNMMLLbbccddeeIIJJKKLL**++,,--33445566""!! vvuuttssuuvvwwxx<<==>>??mmllkkjjDDEEFFGGeeddccbbMMNNOOPP\\[[ZZYYUUVVWWXXTTSSRRQQ^^__``aa + + KKJJIIHHffgghhiiMMNNOOUU..//0011778899::rrqqppooyyzz{{||@@AABBCCiihhggffHHIIJJKK + +aa``__^^QQRRSSTTXXWWVVUUYYZZ[[\\PPOONNMMbbccddeeGGFFEEDDjjkkllmmVVWWXXYY22334455;;<<==>>nnmmllkk}}~~DDEEFFGGeeddccbbLLMMNNOO ]]\\[[ZZUUVVWWXXTTSSRRQQ]]^^__`` + + LLKKJJIIffgghhiiCCBBAA@@nnooppqqZZ[[\\]]66778899??@@AABBjjiihhggHHIIJJKK + +aa``__^^PPQQRRSSYYXXWWVVYYZZ[[\\PPOONNMMaabbccdd HHGGFFEEjjkkllmm??>>==<>??@@AAGGHHIIJJ bbaa``__PPQQRRSSYYXXWWVVXXYYZZ[[QQPPOONNaabbccdd HHGGFFEEiijjkkll@@??>>==rrssttuu !!77665544zz{{||}}ffgghhiiBBCCDDEEKKLLMMNN + + ^^]]\\[[TTUUVVWWUUTTSSRR\\]]^^__ + + MMLLKKJJeeffgghhDDCCBBAAmmnnoopp<<;;::99vvwwxxyy""##$$%%33221100~~jjkkqqrrFFGGHHIIOOPPQQRRZZYYXXWWXXYYZZ[[QQPPOONN``aabbcc IIHHGGFFiijjkkll@@??>>==qqrrsstt 88776655zz{{||}}&&''(())//..--,,ssttuuvvJJKKLLMMSSTTUUVVVVUUTTSS\\]]^^__ + + MMLLKKJJddeeffggEEDDCCBBmmnnoopp<<;;::99uuvvwwxx!!""##$$44332211~~}}||{{~~**++,,--++**))((~~}}||wwxxyyzzNNOOPPQQWWXXYYZZRRQQPPOO``aabbcc IIHHGGFFhhiijjkkAA@@??>>qqrrsstt 88776655yyzz{{||%%&&''((00//..--zzyyxxww..//0011''&&%%$${{zzyyxx{{||}}~~RRSSTTUU[[\\]]^^ + +NNMMLLKKddeeffggEEDDCCBBllmmnnoo==<<;;::uuvvwwxx!!""##$$44332211}}~~))**++,,,,++**))vvuuttss22334455##""!! wwvvuuttVVWWXXYY__``aabb JJIIHHGGhhiijjkkAA@@??>>ppqqrrss99887766yyzz{{||%%&&''((00//..----..//00((''&&%%rrqqkkjj66778899ssrrqqppZZ[[\\]]ccddeeffFFEEDDCCllmmnnoo==<<;;::ttuuvvww !!""##55443322~~}}||}}~~))**++,,,,++**))~~}}11223344$$##""!!iihhggff::;;<<==oonnmmll^^__``aagghhiijjBBAA@@??ppqqrrss99887766xxyyzz{{$$%%&&''1100//..{{zzyyxx--..//00((''&&%%||{{zzyy55667788 eeddccbb~~}}||>>??@@AAkkjjiihhbbccddeekkllmmnn>>==<<;;ttuuvvww !!""##55443322||}}~~(())**++--,,++**wwvvuutt11223344$$##""!!xxwwvvuu99::;;<<aa``__^^{{zzyyxxBBCCDDEEggffeeddffgghhiiooppqqrr::998877xxyyzz{{$$%%&&''1100//..,,--..//))((''&&ssrrqqkk55667788 ttssrrqq==>>??@@]]\\[[ZZwwvvuuttFFGGHHII ccbbaa``jjkkllmmssttuuvv !!""66554433~~}}||}}~~(())**++--,,++**~~00112233%%$$##""jjiihhgg99::;;<<ppoonnmmAABBCCDDYYXXWWVVssrrqqpoJJKKLLMM + + __^^]]\\nnooppqqwwxxyyzz##$$%%&&221100//||{{zzyy,,--..//))((''&&}}||{{zz44556677!! ffeeddcc~~}}==>>??@@llkkjjiiEEFFGGHH UUOONNMMnmlkkjjiNNOOPPQQ[[ZZYYXXrrssttuu{{||}}~~''(())**..--,,++xxwwvvuu00112233%%$$##""yyxxwwvv8899::;;bbaa``__||{{zzyyAABBCCDDhhggffeeIIJJKKLL + + LLKKJJIIihhggffeRRSSTTUUWWVVUUTTvvwwxxyy++,,--..**))((''ttssrrqq44556677!! uuttssrr<<==>>??^^]]\\[[xxwwvvuuEEFFGGHH ddccbbaaMMNNOOPPHHGGFFEEeddccbbaVVWWXXYYSSRRQQPPzz{{||}}//001122&&%%$$##kkjjiihh8899::;;qqppoonn@@AABBCCZZYYXXWWttssrrqqIIJJKKLL + + ``__^^]]QQRRSSTTDDCCBBAAa``__^^]ZZ[[\\]] OONNMMLL~~33445566""!! ggffeedd~~<<==>>??mmllkkjjDDEEFFGGVVUUOONNponmlkkjMMNNOOPP\\[[ZZYYUUVVWWXX@@??>>==]\\[[ZZY^^__``aa + + KKJJIIHH778899::ccbbaa``}}||{{zz@@AABBCCiihhggffHHIIJJKK + +MMLLKKJJjiihhggfQQRRSSTTXXWWVVUUYYZZ[[\\<<;;::99YXXWWVVUbbccddeeGGFFEEDD;;<<==>>__^^]]\\yyxxwwvvDDEEFFGGeeddccbbLLMMNNOO IIHHGGFFfeeddccbUUVVWWXXTTSSRRQQ]]^^__`` + + 33221100UTSRQPOOffgghhiiCCBBAA@@??@@AABB[[ZZYYXXuuttssrrHHIIJJKK + +aa``__^^PPQQRRSSEEDDCCBBbaa``__^YYZZ[[\\PPOONNMMaabbccdd //..--,,NNMMLLKKjjkkllmm??>>==<>^]]\\[[Z]]^^__`` + + LLKKJJIIeeffgghh++**))((JJIIHHGGnnooppqq;;::9988GGHHIIJJ NNMMLLKKkjjiihhgPPQQRRSSYYXXWWVVXXYYZZ[[==<<;;::ZYYXXWWVaabbccdd HHGGFFEEiijjkkll''&&%%$$FFEEDDCCrrssttuu !!77665544~~}}||{{~~}}||KKLLMMNN + + JJIIHHGGgffeeddcTTUUVVWWUUTTSSRR\\]]^^__ + + 99332211VUUTSRQPeeffgghhDDCCBBAAmmnnoopp##""!! BBAA@@??vvwwxxyy""##$$%%33221100zzyyxxww{{zzyyxxOOPPQQRRFFEEDDCCcbbaa``_XXYYZZ[[QQPPOONN``aabbcc 00//..--OONNMMLLiijjkkll@@??>>==qqrrsstt >>==<<;;zz{{||}}&&''(())//..--,,vvuuttsswwvvuuttfpvp˂rH~tlJnXv`bdQZ|`vXn|ZdQbfpvJltH~fZdQtArbHAZpdrtAJHAbےlJtAJ`ےdQZ|˂pZZdQbtZp˂XnvJXQrvnXnXv`XQJ`ےvpfHtArdf~HdrtAvpftlJnXv`bdQZ|`vXnd|Z˂rXQltb`JXQrrd|bHAZpdrtAJHAbےlJtArXQJ`pfH~˂pZHAv`ff~HbHAZ~f`|ZdQbfpvJltH~ftArdf~HdrtAvpfdQbtJ`ےdQZ|˂pZZdQbt˂rXQltb`JXQrrd|p˂rf`vے`J~Hfpfpvp˂rvXntlJnXv`bdQZ|`vXn|ZdQbfpvJltH~flJtArbHAZpdrtAJHAbےlJtAJ`ےdQZ|˂pZZdQbtXQJ`ےXnvXQrbtvnXnXv`XQJ`ےvpfHtArdf~HdrtAvpftlJnXv`bdQZ|`vXnd|Z˂rXQltb`JXQrrd|bHAZpdtAJlHAbےlJfbHAZpfH~lJtAv`ff~HbHAZ~f`|ZdQbfpvJltH~ftArdf~HdrtAvpfdQbtJ`ےdQZ|˂pZZdQbt˂rXQtbn`JXQrpvp˂rf`vd|Z~Hfpfpvp˂rvXH~tlJnXv`bdQZ|`vXn|ZdQbfpvJltH~fl|ZdQbHAZpdtAJlHAbےlJfJ`ےvpf˂pZ~HfpXQJ`ےXnvdQbtvnXnXv`XQJ`ےf`vtArdf~HdrtAvpftlJnXv`bdQZ|`vXnbtl˂rXQtbn`JXQrpvnbHAZpHf`HAbےvnXbHAXQpfH~lJtArv`ff~HbHAZXnv|ZdQbfpvJltH~ftArdfHfdrtAvpfJtArdJ`ےvpf˂pZXv`f˂rXQvXn`JXQrv`fJ`ےJf`vd|Z~Hfpfpvp˂rpfH~tlJnXv`bdQZ|`vXn|ZdQbpvnJltے`JXQ|ZdQbHAZpHf`HAbے~HfJ`ےvpfH˂pZ~HfpltbQXnvdQbtvnXnXv`XQJ`ےf`vtArdfHfdrtAvpftlJrXQJ`bdQZ|HAbےbtl˂rXQvXn`JXQrpvnbHAZp~f`HAbےvnXZdrtpfH~lJtArv`ff~HbHAZXnv|ZdQbpvnJltے`JXQtArdےHAZdrtA`JXQrJtArdJ`ےvpfH˂pZXv`f˂rXQvXn`JXQrv`pvAJltf`vd|Z~Hfpfpvp˂rp`vXtlJrXQJ`bdQZ|r˂p|ZdQbp˂rJlt˂pZtlJbHAZp~f`HAbے~HfJ`ےvpfH˂pZnXvbdQZ|XnvdQbtvnXnXv`XQJ`ےnvptArdےHAZdrtAZHAbtlJXQJ`ےbdQZ|HAbےfpv˂rXQvXn`JXQrpvnbHAZp~f`HAbے`f~drtpfH~lJtArv`ff~HbHAZfH~|ZdQbp˂rJltے`JXQtArdbHAZdrtA`JXQrnvfJ`ےvpfH˂pZXv`f˂rXQvXn`JXQrHfpvAJltf`vd|Z~Hfpfpvp˂rf`vXtlJXQJ`ےbdQZ|r˂p|ZdQbp˂rJlt˂p`~HfpbHAZp~f`HAbے~HfJ`ےvpfH˂pZnXvbdQZ|XnvdQbtvnXnXv`XQJ`ےnvptArdbHAZdrtAZHAbtlJXQJ`ےbdQZ|JXQrvnX˂rXQvXn`JXQrpvnbHAZp~f`HAbے`f~rAJlpfH~lJtArv`ff~HJltfH~|ZdQbp˂rJltے`JXQtArdbHAZdrtA˂pZHAv`fJ`ےvpfH˂pZXv`f˂rXQvXn`JXQrHXv`tbdQf`vd|Z~HfpfpvdrtAJvpftlJXQJ`ےbdQZ|r˂p|ZdQbp˂rJltbے`~HfpbHAZp~f`HAbے~HfJ`ےvpfH˂pZf~HZ|dXnvdQbtvnXnXv`ltbے`JXQtArdbHAZdrtAZHAbtlJXQJ`ےbdQZ|JXQrvnX˂rXQvXn`JXQrpvnbHAZp~f`HAbےfpvrtAJlpfH~lJtArv`ff~HdQZ|rZHA|ZdQbp˂rJltے`JXQtArdbHAZdrtA˂pZHAv`f~fJ`ےvpfH˂pZXv`f˂rXQvXn`JXQrnXv`tbdQf`vd|Z~HfpfpvdrtAJbے`tlJXQJ`ےbdQZ|r˂p|ZdQbp˂rJltb˂pvnbHAZp~f`HAbے~HfJ`ےvpfH˂pZf~HZ|dXnvdQbtvnXnXv`ltbJXQrtArdbHAZdrtAZHAbtlJXQJ`ےbdQZ|pZHAbXv`f˂rXQvXn`JXQrpvnbHAZp~f`HAbےfpvrtAJpfH~lJtArv`ff~HdQZ|lpZHA|ZdQbp˂rJltے`JXQtArdbHAZdrtAے`J~HfJ`ےvpfH˂pZXv`f˂rXQvXn`JXQr~HfbdQZ|f`vd|ZHfpvfpvtbdQbے`tlJXQJ`ےbdQZ|r˂p|ZdQbp˂rJltXQr˂pvnbHAZp~f`HAbے~HfJ`ےvpfH˂pZpvndrtAXnvdQbt璀nrXQnXv`Z|dJXQrtArdbHAZdrtAZHAbtlJXQJ`ےbdQZ|pZHAbXv`f˂rXQvXn`JXQrpvnbHAZp~f`HAے`Xv`fJltpfے`lJtArJ`ےf~HrtAJlpZAb|ZdQbp˂rJltے`JXQtArdbHAZdrtAے`J~HfJ`ےvpfH˂pZXv`f˂rXQvXnJXQrb~HfbdQZ|JXQrd|ZHAZp˂fpvtbdQ`JXQrtlJXQJ`ےbdQZ|r˂p|ZdQbp˂rJltXQHAbvnXv`bHAZp~f`HAے`~HfJ`ےJvpfHtlJpvndrtA˂pZHAdQbt璀rXQJnXv`Z|d˂pZtArdbHAZdrtAZHAbtlJXQJ`ےbdQZ|ے`JXQf~H˂rXQvXnJXQrbpvnltb~f`tAd|Xv`pJltbbے`lJtAr`ےbf~HrtAdQZHAbے|ZdQbp˂rJltے`JXQtArdbHAZdtAJr˂pfpvJ`ےJvpfHtlJXv`fdQZ|vXnZdQbtvnXQZdrJXQrd|ZHAZp˂fpv|dr`JXQrtlJXQJ`ےbdQZ|r˂p|ZdQbp˂rltbZHAbnXv`ltb~f`tAd|~HfdrtAJvpfHlJtAv`ftAJl˂pZHAdQbt璀rXQJnXv`tAJl璀˂pZtArdbHAZdtAJZHAbtlJXQJ`ےnvpے`JXQf~HdQZ|vXnZdQbtpvnltb~f`rd|~HfptbdQZbے`lJtAr`ےbf~HtbdQZHAb|ZdQbp˂rltbے`JXQfpvbHAZfHfr˂pfpvdrtAJvpfHlJtAXv`fdQZ|vXnZdQbtvnX|drJXQrd|ZHAZp˂fpv|drJQr˂ptlJXQJ`ےnvpr˂pnXv`p˂r`vXn`JXQrnvfltb~f`rd|~HfdrtAJvpfHlJtAv`ftAJl˂pZHAdQbt璀rXQJnXv`tAJl璑ZHAbfpvbHAZfHfZHAbf~HXQJ`ےvpf˂pZ~HfpdQZ|vXnZdQbtpvnltb~f`rd|~HXvtbdQZbے`lJtAr`ےbf~HtdrtAے`JXnXv`p˂r`vXnے`JXQfpvbHAZH~fHAbےvnXdrtAJvpfHlJtAXv`fdQZ|vXnZdQbt`f~|rAJlJXQrd|ZHAZp˂fpvJltQr˂pf~HXQJ`ےvpfr˂pnXv`p˂r`vXn`JXQrv`fltb~f`rd|~HfdrtAJvpfHlJtAHfpvtbd˂pZHAdQbt璀rXQJnXv`bdQZ|ZHAbfpvbHAZH~fZHAbf~HXQJ`ےvpf˂pZ~HfpdQZ|vXnZdQbtpvnltb~f`rd|nXvQZ|dbے`lJtAr`ےbf~HdrtAے`JXnXv`p˂r`vXnے`JXQfpvbHAZH~fHAbvnXdrtAJvpfHlJtAXv`fdQZ|vXnZdQbt`pvrtAJlJXQrd|ZHAZp˂fpvJltQrZHAf~HXQJ`ےvpfr˂pnXv`p˂r`vXn˂pZHAv`f~ltb~f`rd|~HfdrtAJvpfHlJtAnrXQJtbd˂pZHAdQbt璀rXQJnXv`bdQZ|bے`fpvbHAZH~fZHAbf~HXQJ`ےvpfbے`fpvdQZ|vXnZdQbtpvnltb~f`rd|`p˂QZ|dbے`lJtAr`ےbp˂rltbJXQrnXv`p˂r`vXnے`JXQfpvbHAZH~fJXQrnXv`drtAJvpfHlJtAXv`fdQZ|vXnZdQbtrXQJ`rtAJJXQrd|ZHAZp˂XQJ`ےdQZ|˂pZHAf~HXQJ`ےvpfr˂pnXv`p˂r`vXn˂p`Jf~Hltb~f`rd|~HfdrtAJvpfHlJtAےbHAbdQZ|˂pZHAdQbt璀rXQJbHAZdrtAJbے`fpvbHAZH~fZHAbf~HXQJ`ےvpfXQrbtfpvdQZ|vXnZdQbtpvnltb~f`rd|Zp˂drtAbے`lJtAr`ےbHAZp˂p˂rltbJXQrnXv`p˂r`vXnے`JXQfpvbHAZH~fl|ZnXv`drtAJvpfHlJtAXv`fdQZ|vXnZdQbtbHAZJltJXQrd|ZHAZp˂rXQJXQJ`ےdQZ|˂pZAbf~HXQJ`ےvpfr˂pnXv`p˂r`vXndQbtf~Hfltb~f`rd|~HfdrtAJvpfHlJtAp˂rbdQZ|˂pZHAdQbt璀rXQJ`ےJlbHAZdrtAdQ`JXQfpvbHAZH~fZHAbf~HXQJ`ےvpflJtArvnXvdQZ|vXnZdQbtpvnltb~f`rd|XQJ`ےAJlbے`lJfp`ےbtbdQp˂rZ|dr˂pnXv`p˂r`vXnے`JXQfpvbHAZH~fd|Z`f~drtAJvpfHlJtAXv`fdQZ|vXnZdQbtbHAZtbnJXQrvnXHAZp˂Z|dXQJ`ےrtAJlZHAbf~HXQJ`ےvpfr˂pnXv`p˂r`vXndQtArdHfpvltb~f`rd|HfpdrtAJvpfےlJtAp˂rvpfH˂pZHAv`frXQJrtAJlbHAZtbdQ`JXQfpvbHAZH~fZHAbf~HXQJ`ےvpf|ZdQnXvdQZ|vXnZdQbtvnrltb`JXQrrd|XQJ`pf`vbے`~Hfp`ےbtbdQp˂rZ|`vr˂pnXv`p˂r`vXnے`JXQfpvbHAZH~fbtl`ffpdrtAJvpfےlJtAXQJ`ےdQZ|˂pZZdQbt˂rXQXnvJXQrvnXHAZp˂Z|dXQJ`ےXnvZHAbf~HXQJ`ےvpfr˂pnXv`p˂r`vXnJtArdvnrltb`JXQrrd|HAZpdrtAJHAbےlJtAJ`ےpfH~˂pZHAv`frXQJrtAJlbHAZpfH~JQr˂fpvbHAZH~fZHAےf~HXQJ`ےvpf|ZdQXQJ`ےdQZ|˂pZZdQbt˂rXQltb`JXQrrd|bHAZpf`vbے`~Hfp`ےbtbdQp˂rf`vpZHAbnXv`p˂r`vXn`JXQrfpvJltH~fbtlHAZpdrtAJHAbےlJtAJ`ےdQZ|˂pZZdQbt˂rXQXnvJXQrvnXHAZp˂Z|dXQJ`ےXH~ے`Jf~HXQJ`ےvpfbtlnXv`bdQZ|`vXn|ZdQb˂rXQltb`JXQrrd|bHAZpdrtAJHAbےlJtAJ`ےpfH~˂pZHAv`frXQJrtAJlbHAZf`vXXQr˂fpvJltH~fJtAdf~HdrtAvpftlJJ`ےdQZ|˂pZZdQbt˂rXQltb`JXQrrd|bHAXQJf`vbے`~Hfp`ےbtbdQp˂rnvppZHAbnXv`bdQZ|`vXn|ZdQbfpvJltH~ftArdbHAZpdrtAJHAbےlJtAJ`ےdQZ|˂pZZdQbt`ےbXnvJXQrvnXHAZp˂Z|dXQJ`ےfH~JAdf~HdrtAvpftlJnXv`bdQZ|`vXn|ZdQb˂rXQltb`JXQrrd|bHAZpdrtAJHAbےlJtAHAZp˂pfH~˂pZHAv`frXQJrtAJlbHAZf`vX|ZdQbfpvJltH~ftArdf~HdrtAvpftlJJ`ےdQZ|˂pZZdQbt˂rXQltb`JXQrrd|rXQJf`vbے`~Hfp`ےbtbdQp˂rnvptlJnXv`bdQZ|`vXn|ZdQbfpvJltH~ftArdtbHAZpdrtAJHAbےlJtAJ`ےdQZ|˂pZZdQbt`ےbXnvJXQrvnXHAZp˂Z|dXQJ`ے`vXntArdf~HdrtAvpftlJnXv`bdQZ|`vXnlJtA˂rXQltb`JXQrrd|bHAZpdrtAJHAbےlJtAHAZp˂pfH~˂pZHAv`frXQJrtAJlbHAZvpf|ZdQbfpvJltH~ftArdf~HdrtAvpfrd|J`ےdQZ|˂pZZdQbt˂rXQltb`JXQrrd|bHAf`vbے`~Hfp`ےbtbdQp˂rH~ftlJnXv`bdQZ|`vXn|ZdQbfpvJltH~fZdQbtbHAZpdrtAJHAbےlJtAJ`ےdQZ|˂pZZdQbtZp˂XnvJXQrvnXHAZp˂Z|dXQJ`ے`vXntArdf~HdrtAvpftlJnXv`bdQZ|`vXnlJtA˂rXQltb`JXQrrd|bHAZpdrtAJHAbےlJtArXQJ`pfH~˂pZHAv`frXQJrtAJlbHAZvpf|ZdQbfpvJltH~ftArdf~HdrtAvpfrd|J`ےdQZ|˂pZZdQbt˂rXQltb`JXQrrd|ےbHAf`vbے`~Hfp`ےbtbdQZ|dXnvdQbt璀nrXQrtAJl˂pZHnXvZp˂f`vXے`JHfpvےbHAfH~ZHAbpvndrtAvpftlJnXv`bdQZ|`vXn|ZdQbv`fZ|rA`JXQrrd|bHAZpdrtAJb˂H~ㅐfrtAJlpfے`lJtArJ`ےtbdQAbے``f~rXQJ`nvpXQr˂nXvZp˂f`vXے`JXQXv`fJltH~ftArdf~HdrtAvpftlJ~HfpJlt˂pZZdQbt˂rXQltbpZHAb`vXntbdQJXQrd|ZHAZp˂Z|l璁JXQrHfpvےbHAfH~pZHAb`f~rXQJ`nvpr˂p~HfbdQZ|`vXn|ZdQbfpvJltH~ftArdvnXbdQZ|HAbےlJtAJ`ےdQZ|ے`JvˍpfZ|d˂pZHAdQbt璀rXQJtbdQZZHAbnXvZp˂f`vXے`JHfpvےbHAfH~ZHAbpvndrtAvpftlJnXv`bdQZ|`vXn|ZdQbv`pvdrtA`JXQrrd|bHAZpdrtAJXQr˂H~ㅐfrtAJlbے`lJtAr`ےb|drے`JXQ`f~rXQJ`nvpXQr˂nXvZp˂f`vX˂pZXv`fJltH~ftArdf~HdrtAvpftlJnrXQJlt˂pZZdQbt˂rXQltbpZHAb`vXntbdQJXQrd|ZHAZp˂tAJlr˂pHfpvےbHAfH~pZHAb`f~rXQJ`nvpHAbے~fpvbdQZ|`vXn|ZdQbfpvJltH~ftArdJ`p˂bdQZ|HAbےlJtAJ`ےdQZ|ے`JvˍpfZ|d˂pZHAdQbt璀rXQJtbdQZZHAbnXvZp˂f`vXے`JHfpvےbHAfH~`JXQrnXv`drtAvpftlJnXv`bdQZ|`vXn|ZdQbrXQJdrtAJ`JXQrrd|bHAZpdrtAJXQHAbH~ㅐfrtAJlbے`lJtAr`ےb|drے`JXQ`f~rXQJ`nvpXQr˂nXvZp˂f`vX˂p`f~HJltH~ftArdf~HdrtAvpftlJ`ےbbdQZ˂pZZdQbt˂rXQltbے`JXQ`vXntbdQJXQrd|ZHAZp˂tAdQZ|r˂pHfpvےbHAfH~pZHAb`f~rXQJ`nvpJXQrbfpvbdQZ|`vXn|ZdQbfpvJltH~ftArdHAZp˂|drHAbےlJtAJ`ےdQZ|r˂pvˍpfZ|d˂pZHAdQbt璀rXQJdrtAZAb`nXvZp˂f`vXے`JHfpvےbHAfH~tl|nXv`drtAvpftlJnXv`bdQZ|`vXn|ZdQbbHAtAJl`JXQrrd|bHAZpdtAJlZHAbH~ㅐfrtAJlbے`lJtAr`ےbJltJXQr`f~rXQJ`nvpXQr˂nXvZp˂f`vXZdQbtf~HJltH~ftArdf~HdrtAvpftlJZp˂tbdQZ˂pZZdQbt˂rXQtbnے`JXQ`vXntbdQJXQrd|ZHAZp˂bdQZ|pZHAHfpvےbHAfH~pZHAb`f~rXQJ`nvplJtAfvnXbdQZ|`vXn|ZdQbfpvJltH~ftArdrXQJ`|AJlHAbےlJfJ`ےvpfr˂pvˍpfZ|d˂pZHAdQbt璀rXQJltbbے`nXvZp˂f`vXے`JHfpvےbHAfH~rd|v`fdrtAvpftlJnXv`bdQZ|`vXn|ZdQbےbHAtbn`JXQrpvnbHAZpHf``JXQrH~ㅐfrtAJlbے`lJtAr`ےbnvpJXQr`f~rXQJ`nvpXQr˂nXvZp˂f`vXZdQtAr~HfpJltH~ftArdfHfdrtAvpftlJZp˂vpf˂pZXv`f˂rXQvXn˂pZ`vXntbdQJXQrd|ZHAZp˂`vXnpZHAHfpvےbHAfH~pZHAb`f~rXQJ`nvpd|ZvnXbdQZ|`vXn|ZdQbpvnJltے`JXQtArdrXQJ`Hf`HAbے~HfJ`ےvpfHHAbےvˍpfZ|d˂pZHAdQbt璀rXQJvpfbJQrnXvZp˂f`vXے`JHfpvےbHAfH~dQbtv`ffdrtAvpftlJrXQJ`bdQZ|r˂p|ZdQbp˂rvXn`JXQrpvnbHAZp~f``JXQrH~ㅐfrtAJlbے`lJtAr`ےbH~f˂pZ`f~rXQJ`nvpXQr˂nXvZp˂f`vXlJtArpvnJltے`JXQtArdےHAZdrtAZHAbtlJXQJ`ےvpfH˂pZXv`f˂rXQvXn˂pZ`vXntbdQJXQrd|ZHAZp˂`vXHHAbےHfpvےbHAfH~pZHA`f~rXQJ`nvpd|ZrXQJ`bdQZ|r˂p|ZdQbp˂rJltے`JXQtArdbHAZ~f`HAbے~HfJ`ےvpfHHAbvˍpfZ|d˂pZHAdQbt璀rXQJ~f``JXQrnXvZp˂f`vXے`JXQHfpvےJlfH~dQbtےHAZdrtAZHAbtlJXQJ`ےbdQZ|r˂p|ZdQbp˂rvXn`JXQrpvnbHAZp~f`˂pZHAH~ㅐfrtAJlbے`lJtAr`ےbvXn˂pZA`f~rXQJ`nvprbt璀nXvtbdQZf`vXl|ZdQp˂rJltے`JXQtArdbHAZdrtAZHAbtlJXQJ`ےvpfH˂pZXv`f˂rXQvXnbے``vXntbdQJXQrd|ZHAZp˂vpfH`JXQHfpvےJlfH~lJtAd`f~|drnvpbtlXQJ`ےbdQZ|r˂p|ZdQbp˂rJltے`JXQtArdbHAXQ~f`HAbے~HfJ`ےvpfHJXQrvˍpfZ|d˂pZHAdQbt璀rXQJ~f`rbt璀nXvtbdQZf`vX|ZdQHfpvtAJlfH~JtArdbHAZdrtAZHAbtlJXQJ`ےbdQZ|r˂p|ZdQbJ`ےvXn`JXQrpvnbHAZp~f`˂p`ZH~ㅐftAJlbے`lJfp`ےbvXnlJtAd`f~|drnvpbtlnXvtbdQZf`vX|ZdQp˂rJltے`JXQtArdbHAZdrtAZHAbtlJbHAZpvpfH˂pZXv`f˂rXQvXnQXb㉀۝`vXntbnJXQrvnXHAZp˂vp`v|ZdQHfpvtAJlfH~JtArd`f~|drnvpbtlXQJ`ےbdQZ|r˂p|ZdQbp˂rJltے`JXQtArd˂rXQ~f`HAbے~HfJ`ےvpfHpJAHrvˍpfvpfH˂pZHAv`frXQJXnvbtlnXvtbdQZf`vX|ZdQHfpvtAJlfH~JtArdbHAZdrtAZHAbtlJXQJ`ےbdQZ|r˂p|ZdQbJ`ےvXn`JXQrpvnbHAZp~f`ˁ`ZH~ㅐfېf`vbے`~Hfp`ےbpfH~JtArd`f~|drnvpbtlnXvtbdQZf`vXtlJp˂rJltے`JXQtArdbHAZdrtAZHAbtlJbHAZpvpfH˂pZXv`f˂rXQvXnQXAHr󙐝`vXnXnvJXQrvnXHAZp˂f`v|ZdQHfpvtAJlfH~JtArd`f~|drnvptArdXQJ`ےbdQZ|r˂p|ZdQbp˂rJltے`JXQtArd˂b~f`HAbے~HfJ`ےvpfHˁ`ZQXvˍp|pfH~˂pZHAv`frXQJXnvbtlnXvtbdQZf`vX|ZdQHfpvtAJlfH~|ZdQbbHAZdrtAZHAbtlJXQJ`ےbdQZ|r˂p|ZdQbHAZp˂vXn`JXQrpvnbHAZp~f`b㉀ۑpdrQtf`vbے`~Hfp`ےbpfH~JtArd`f~|drnvpbtlnXvtbdQZf`vXtlJp˂rJltے`JXQtArdbHAZdrtAZHAbtlJrXQJvpfH˂pZXv`f˂rXQvXnJAHrJltXnvJXQrvnXHAZp˂vp|ZdQHfpvtAJlfH~JtArd`f~|drnvptArdXQJ`ےbdQZ|r˂p|ZdQbp˂rJltے`JXQtArd`ےb~f`HAbے~HfJ`ےvpfHˁ`ZQXbAdZ|pfH~˂pZHAv`frXQJfH~btlnXvtbdQZf`vX|ZdQHfpvtAJlfH~|ZdQtAbHAZdrtAZHAbtlJXQJ`ےbdQZ|r˂p|ZdQbHAZp˂vXn`JXQrpvnbHAZp~f`b㉀ۑpdrQtf`vbے`~Hfp`ےbf`vXJtArd`f~|drnvpbtlnXvtbdQZf`vXrd|p˂rJltے`JXQtArdbHAZdrtAZHAbtlJrXQJvpfH˂pZXv`f˂rXQvXn`ZQXbJltXnvJXQrvnXHAZp˂nvp|ZdQHfpvtAJlfH~JtArd`f~|drnvpZdQbtXQJ`ےbdQZ|r˂p|ZdQbp˂rJltے`JXQtArd`p˂~f`HAے`~HfJ`ےJvpfHۑpJbAdZ|pfH~˂pZHAv`frXQJfH~btlnXvtbdQZf`vX|ZdQHfpvtAJlfH~lJtAbHAZdrtAZHAbtlJXQJ`ےbdQZ|r˂p|ZdQbrXQJ`vXnJXQrbpvnltb~f`AHr󙐂˂drQtf`vbے`~Hfp`ےbf`vXJtArd`f~|drnvpbtlnXvtbdQZf`vXrd|p˂rJltے`JXQtArdbHAZdtAJZHAbtlJےbHAvpfHtlJXv`fdQZ|vXn`ZQXbJltXnvJXQrvnXHAZp˂H~f|ZdQHfpvtAJlfH~JtArd`f~|drnvpZdQbtXQJ`ےbdQZ|r˂p|ZdQbp˂rltbے`JXQfpvZp˂~f`tAd|~HfdrtAJvpfHۑpJbAdZ|pfH~˂pZHAv`frXQJ`vXnbtlnXvtbdQZf`vX|ZdQHfpvtAJlfH~l|ZbHAZdtAJZHAbtlJXQJ`ےnvpr˂p~HfrXQJ`vXnZdQbtpvnltb~f`AHr󙐉drQtf`vbے`~Hfp`ےbvpfJtArd`f~|drnvpbtlnXvtbdQZf`vXdQbtp˂rltbے`JXQfpvbHAZfHfZHAbpvnےbHAvpfHlJtAXv`fdQZ|vXnۑpJAHJltXnvJXQrvnXHAZp˂H~f|ZdQHfpvtAJlfH~JtArd`fH|drnvplJtArXQJ`ےnvpr˂pnXv`p˂r`vXnے`JXQXv`fXQJ`ے~f`rd|~HfdrtAJvpfHr󙐂ˁ`bAdZ|pfH~˂pZHAv`frXQJ`vXnbtlnXvtbdQZf`vX|ZdQfpvtAJlfے`Jd|ZbHAZfHfZHAbf~HXQJ`ےvpfr˂p~HfJltvXnZdQbtpvnltb~f`ZQXb㉀drQtf`vbے`~Hfp`ےbvp`JtArd`fH|drnvpbtlnrXQJtbdQZXQHAbdQbtp˂r`vXnے`JXQfpvbHAZH~fZHAbpvnbQZdvpfHlJtAXv`fdQZ|vXnۑpJAHJltXnvJXQrvnXHAZp˂vXn|ZdQfpvtAJlfے`JJtArd`ےHA|drے`JXQlJtArXQJ`ےvpfr˂pnXv`p˂r`vXnے`JXQXv`prtAJl~f`rd|~HfdrtAJvpfHr󙐂ˁ`bAdZ|pfH~˂pZHAv`frXQJvpfHbtlnrXQJtbdQZXQr˂|ZdQZp˂tAJlr˂pdtlbHAZH~fZHAbf~HXQJ`ےvpfr˂pvnXtbdQvXnZdQbtpvnltb~f`ZQXAHrdrQtf`vے`J~Hfp`ےJl~f`JtArd`ےHA|drpZHAbbtlrXQJ`tbdQZZHAbJfpvp˂r`vXnے`JXQfpvbHAZH~fZHAbv`fZ|dvpfHlJtAXv`fdQZ|vXnˁ`ZJltXnvXQrbtvnXtdrvXn|ZdQZp˂tAJl璐ے`JJtArdےbHA|drے`JXQnvfXQJ`ےvpfr˂pnXv`p˂r`vXnے`JXQ~HfprtAJl~f`rd|~HfdrtAJvpfHQXb㉀bAdZ|pfH~lJtAv`ftAJlvpfHbtlrXQJ`tbdQZXQr˂|ZdQZp˂tAJlr˂p~HfpbHAZH~fZHAbf~HXQJ`ےvpfr˂pvnXtbdQvXnZdQbtpvnltb~f`pJAHrdrQtf`vd|Z~HfptbdQZ~vJtArdےbHA|drpZHAbbtlrXQJ`tbdQZ`JXQrvnXp˂r`vXnے`JXQfpvbHAZH~fZHAbv`fZ|rAJvpfHlJtAXv`fdQZ|vXnˁ`ZJltXnvdQbtvnX|drpfے`|ZdQZp˂tAJl璐ے`JJtArdےbHA|dr˂pZv`fXQJ`ےvpfr˂pnXv`p˂r`vXnے`JXQ~HXvltb~f`rd|~HfdrtAJvpfHQXb㉀bAdZ|pfH~lJtArv`ftAJlJXQrbtlrXQJ`tbdQZXQr˂|ZdQZp˂tAJlHAbے~HfpbHAZH~fZHAbf~HXQJ`ےvpfr˂p`f~dQZ|vXnZdQbtpvnltb~f`p`ZQXdrQtf`vd|Z~HfptbdQZZHAbJtArdےbHA|drpZHAbbtlrXQJ`tbdQZ`JXQrvnXp˂r`vXnے`JXQfpvbHAZH~fZHAbHfpvdrtAJvpfHlJtAXv`fdQZ|vXnb㉀ۑpJltXnvdQbtvnX|lt`JXQ|ZdQZp˂tAJl璐ے`JJtArdےbHA|dr˂pZv`f~XQJ`ےvpfr˂pnXv`p˂r`vXnے`JXQnXvltb~f`rd|~HfdrtAJvpfHJAHrbAdZ|pfH~lJtArv`fbdQZ|r˂pbtlrXQJ`tbdQZXQr˂|ZdQZp˂tAJlHAbfpvbHAZH~fZHAbf~HXQJ`ےvpfr˂p`f~dQZ|vXnZdQbtpvnltb~f`ˁ`ZQXdrQtf`vd|Z~HfpdrtAZHAbJtArdےbHA|drpZHAbbtlrXQJ`tbdQZ˂pZHAnXv`p˂r`vXnے`JXQfpvbHAZH~fZHAbHfpvdrtAJvpfHlJtAXv`fdQZ|vXnb㉀ۑpJltXnvdQbtvnXJlt`JXQ|ZdQZp˂tAJl璐ے`JJtArdےbHA|drbے`f~HXQJ`ےvpfr˂pnXv`p˂r`vXnے`JXQ~HbdQZ|~f`rd|HfpdrtAJvpfZJAHfbAdZ|pfH~lJtArv`fbdQZ|r˂pZbtlrXQJ`tbdQZXQr˂|ZdQZp˂tAJlJXQrfpvbHAZH~fZHAbf~HXQJ`ےvpfr˂pfpvdrtvXnZdQbtvnrltbHAbے`vXndrQtf`vd|Z~HfpdrtAAb`JJtArdےbHA|drpZHAbbtlrXQJ`tbdQZ˂pZHAnXv`p˂r`vXnے`JXQfpvbHAZH~fZHAےnXv`AJltvpfےlJtAXQJ`ےdQZ|`JXQrvˍpfJltXnvdQbtvnXdQZ|XQr˂|ZdQZp˂tAJl璐ے`JJtArdےbHA|drbے`f~HXQJ`ےvpfr˂pnXv`p˂r`vXn`JXQrf~HbdQZ|`JXQrrd|HAZpdrtAJ˂pZH~ㅐfbAdZ|pfH~lJtArv`fdrtAJpZHAbbtlrXQJ`tbdQZXQr˂|ZdQZp˂tAJlJXQHAbfvnXbHAZH~fZHAےf~HXQJ`ےvpfbtlfpvdrt˂pZZdQbt˂rXQltbHAbے`vXndrQtf`vd|Z~Hfpltbے`JJtArdےbHA|drpZHAbbtlrXQJ`tbdQZے`Jv`fp˂r`vXn`JXQrfpvJltH~fJtAdnXv`AJltHAbےlJtAJ`ےdQZ|`JXQrvˍpfJltXnvdQbtvnXdQZ|XQr˂|ZdQZp˂tAJl璐ے`JJtArdےbHA|dtAXQr˂~HfpXQJ`ےvpfbtlnXv`bdQZ|`vXn|ZdQbpvnbQZd`JXQrrd|bHAZpdrtAJ˂p`H~ㅐfbAdZ|pfH~lJtArv`fdrtAJpZHAbbtlrXQJ`tbdQZXQr˂|ZdQZp˂JltpZHAbvnXJltH~fJtAdf~HdrtAvpftlJXv`frtAJl˂pZZdQbt˂rXQltbJXQr`vXndrQtf`vd|Z~HfpltdJQrJtArdےbHA|dtApZHAbbtlrXQJ`bnvے`Jv`fbdQZ|`vXn|ZdQbfpvJltH~ftArd~HftbdQHAbےlJtAJ`ےdQZ|˂pZHAvˍpfJltXnvdQbtvnXrtAJl˂pZH|ZdQZp˂Jltے`JJfpvےbHApfHXQr˂~HfpdrtAvpftlJnXv`bdQZ|`vXn|ZdQbpvnZ|d`JXQrrd|bHAZpdrtAJbے`H~ㅐfbAdZ|pfH~lJtArv`ftbdQAbے`btlrXQJ`bnvXQr˂nXvZp˂f`vXp`JXQvnvfJltH~ftArdf~HdrtAvpftlJXv`frtAJl˂pZZdQbt˂rXQltbJXQr`vXndrQtf`vd|ZHfpvZ|dJXQrJfpvےbHApfHpZHAb`f~rXQJ`nvpr˂p~HfbdQZ|`vXn|ZdQbfpvJltH~ftArd~HXtbdQHAbےlJtAJ`ےdQZ|˂pZHAvˍpfJlt66666666666666666666666666666666666666666667777777777777777777777 \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv3_0.dat b/vendor/endroid/qr-code/assets/data/qrv3_0.dat new file mode 100644 index 000000000..07a0af58d Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv3_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv3_1.dat b/vendor/endroid/qr-code/assets/data/qrv3_1.dat new file mode 100644 index 000000000..4a1fa32dc Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv3_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv3_2.dat b/vendor/endroid/qr-code/assets/data/qrv3_2.dat new file mode 100644 index 000000000..6e60276aa Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv3_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv3_3.dat b/vendor/endroid/qr-code/assets/data/qrv3_3.dat new file mode 100644 index 000000000..cb5289eda Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv3_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv40_0.dat b/vendor/endroid/qr-code/assets/data/qrv40_0.dat new file mode 100644 index 000000000..7bbfe5a03 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv40_0.dat @@ -0,0 +1,353 @@ +~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwvutstststsrqrqrqrqopopopopnmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMLKLKLKJIJIJIJIHGHGHGHGFEFEFEFE~}~}~}~}|{|{|{|{zyzyzyzyvuvuvuvutstststsrqrqrqrqopopoooonmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFE~}~}~}~}|{|{|{|{zyzyzyzyvuvuvuvutstststsrqrqrqrqoopopoponmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYXWXWVUVUVUVUSSSSSTSTRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFE~}~}~}~}|{|{|{|{zyzyzyzyvuvuvuvutstststsrqrqrqrqpopopoponmnmlklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUSTSTSTSTRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFE~}~}~}~}|{|{|{|{zyzyzyzyvuvuvuvutstststsrqrqrqrqpopopopolklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUSTSTSTSTRQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFE~}~}~}~}|{|{|{|{zyzyzyxwvuvuvuvutstststsrqrqrqrqpopopopolklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUSTSTSTSTRQRQRQRQPONMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFE~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvutstststsrqrqrqrqpopopopolklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[XWXWXWXWVUVUVUVUSTSTSTSTRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFE~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvutstststsrqrqrqrqoooopopolklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[ZYZYXWXWXWXWVUVUVUVUSTSTSTSTRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFE~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvutstststsrqrqrqrqpoponmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUSTSSSSSSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFE~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFE~}~}~}~}|{|{|{zyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSRQPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFE~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFE~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFE~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSTSTSSSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFE~}~}~}~}zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUSSTSTSTSPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFE~}~}~}|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVUTSRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFE|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqrqnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFE|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsrqrqrqponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa`_`_^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFE|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststspopopooonmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsooopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsopopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsopopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbabababa^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsopopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdcbaba`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsopopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUVUVURQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsopopopopnmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWVUVUTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststsooooooponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSSSSSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcdcdc`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTSTRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkjijijijihghghghgfefefefedcdcbaba`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTSTRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTSTRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTSTRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGFEDCDCDCDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutstststspopopoponmnmnmnmlklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTSTRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvutsrqrqrqpopooooonmnmnmnmlklklklkjijijijihghghghgfefefefebabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWSTSTSTSSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqopopopopnmnmnmnmlklklklkjijijijihghghghgfefedcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWSSSSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqopopopopnmnmnmnmlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGHGHGHGDCDCDCDCDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqopopopopnmnmnmnmlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIHGFEFEFEDCDCDCDCDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqopopopopnmnmnmnmlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqopopopopnmnmnmnmlklklklkjijijijihghghghgdcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqopopopoonmnmnmnmlklklklkjijijijihghgfefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYXWXWXWXWTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqoooopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSSSSSSTRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDCDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTSTRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKJIHGHGHGFEFEFEFEDCDCDCDCDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTSTRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmlklklklkjijijijifefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTSTRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDC~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmlklklklkjijihghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTSTRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDCDCBABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvuvurqrqrqrqpopopoponmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSTSTRQRQRQRQPOPOPOPONMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwvuvuvutsrqrqrqrqpoooooopnmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSTSTSSSSRQRQRQRQPOPOPOPONMNMNMNMLKJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwtstststsrqrqrqrqopopopopnmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUSSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwtstststsrqrqrqrqopopopopnmnmnmnmlklklklkhghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwtstststsrqrqrqrqopopopopnmnmnmnmlklkjijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABA~}~}~}~}|{|{|{|{zyzyzyzyxwxwxwxwtstststsrqrqrqrqopopopopnmnmnmnmjijijijihghghghgfefefefedcdcdcdcbabababa`_`_`_`_^]^]^]^]\[\[\[\[ZYZYZYZYVUVUVUVUTSTSTSTSRQRQRQRQPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=<;<;<;<;:98787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!        + + + + BABABABA@?@?@?@?>=>=>=>=<;<;<;<;877777786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!        + + + BABABABA@?@?@?@?>=>=>=>=<;<;<;<;787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!        BABABABA@?@?@?@?>=>=>=>=<;<;<;<;787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!        BABABABA@?@?@?@?>=>=>=>=<;<;<;<;787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#"!"!"!"!        BABABABA@?@?@?@?>=>=>=>=<;<;<;<;787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!        BABABABA@?@?@?@?>=>=>=>=<;<;<;<;787878786565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + BABABABA@?@?@?@?>=>=>=>=<;<;<;<;787877776565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + BABABABA@?@?@?@?>=>=>=>=<;<;<;<;778787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + BABABABA@?@?@?@?>=>=>=>=<;<;<;<;878787876565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + BABABABA@?@?@?@?>=>=>=>=<;<;<;<;878787876565656543434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + BABABABA@?@?@?@?>=>=>=>=<;<;<;<;878787876565656543434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!       + + + + BABABABA@?@?@?@?>=>=>=>=<;<;<;<;878787876565656543434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + + BABABABA@?@?@?@?>=>=>=>=<;<;<;:9878787876565656543434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + + BABABABA@?@?@?@?>=>=>=>=:9:9:9:9777778786565656543434343212121210/0/0/0/.-.-.-.-*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + + BABABABA@?@?@?@?>=>=>=>=:9:9:9:9787878786565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + + BABABABA@?@?@?@?>=>=>=>=:9:9:9:9787878786565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!     + + + + BABABABA@?@?@?@?>=>=>=>=:9:9:9:9787878786565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + BABABABA@?@?@?@?>=>=>=>=:9:9:9:9787878786565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + BABABABA@?@?@?@?>=>=>=>=:9:9:9:9787878786565656543434343212121210/0/0/0/,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!        + + + + BABABABA@?@?@?@?>=>=>=>=:9:9:9:978777777656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!      + + + + BABABABA@?@?@?@?>=>=>=>=:9:9:9:987878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + BABABABA@?@?@?@?>=>=>=>=:9:9:9:987878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + BABABABA@?@?@?@?>=>=>=>=:9:9:9:987878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + BABABABA@?@?@?@?>=>=>=>=:9:9:9:987878787656565654343434321212121.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + BABABABA@?@?@?@?>=>=>=>=:9:9:9:98787878765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + BABABABA@?@?@?@?>=>=>=>=:9:9:9:98787877765656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + BABABABA@?@?@?@?>=<;<;<;:9:9:9:97778787865656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + BABABABA@?@?@?@?<;<;<;<;:9:9:9:97878787865656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + BABABABA@?@?@?@?<;<;<;<;:9:9:9:97878787865656565434343430/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + BABABABA@?@?@?@?<;<;<;<;:9:9:9:97878787865656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + BABABABA@?@?@?@?<;<;<;<;:9:9:9:97878787865656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + BABABABA@?>=>=>=<;<;<;<;:9:9:9:97878787865656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + BABABABA>=>=>=>=<;<;<;<;:9:9:9:97777778765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#"!"!"!"!    + + + + BABABABA>=>=>=>=<;<;<;<;:9:9:9:98787878765656565212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + BABABABA>=>=>=>=<;<;<;<;:9:9:9:98787878743434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + BABABABA>=>=>=>=<;<;<;<;:9:9:9:98787878743434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + BA@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878743434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787777743434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%$#$#$#$#        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:98787878743434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('&%&%&%&%"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + + @?@?@?@?>=>=>=>=<;<;<;<;:9:9:9:96565656543434343212121210/0/0/0/.-.-.-.-,+,+,+,+*)*)*)*)('('('('$#$#$#$#"!"!"!"!        + + + + %%&&''((iihhggff==>>??@@``__^^]]eeffgghh88776655 zzyyxxww{{||}}~~ ""##$$%%{{zzyyxxJJKKLLMMSSRRQQPPrrssttuu++**))(([[\\]]^^'&&%%$$# + +//001122nnmmllkkWWXXYYZZFFEEDDCC6677==>>DDCCBBAA<<==>>??))**++,,eeddccbbAABBCCDD\\[[ZZYYiijjkkll44332211 + +  vvuuoonn&&''(())wwvvuuttNNOOPPQQOONNMMLLvvwwxxyy''&&%%$$__``aabb#""!!  33445566jjiihhgg[[\\]]^^BBAA@@????@@AABB@@??>>==@@AABBCC--..//00aa``__^^ ~~}}EEFFGGHHXXWWVVUUmmnnoopp00//..--!!""##$$mmllkkjj**++,,--ssrrqqppRRSSTTUUKKJJIIHHzz{{||}}##""!!  ccddeeff778899::ffeeddcc__``aabb>>==<<;;CCDDEEFF<;:98776 + +~~DDEEFFGG11223344]]\\[[ZZ!!""##$$||{{zzyyIIJJKKLLTTSSRRQQqqrrsstt,,++**))%%&&''((iihhggff ..//0011oonnmmllVVWWXXYYGGFFEEDD~~ + + gghhiijj;;<<==>>bbaa``__ccddeeff::998877GGHHIIJJ65544332  !!""##}}||{{zzHHIIJJKK55667788YYSSRRQQ%%&&''((xxwwvvuuMMNNOOPPPPOONNMMuuvvwwxx((''&&%%))**++,,eeddccbb + + 22334455kkjjiihhZZ[[\\]]CCBBAA@@kkllmmnn??@@AABB^^]]\\[[gghhiijj66554433 KKLLMMNN21100//.$$%%&&''yyxxwwvvLLMMNNOO99::;;<>==<<~~oouuvvww CCDDEEFFZZYYXXWWkkllmmnn221100// + + OOPPQQRR.--,,++*(())**++uuttssrrPPQQRRSS==>>??@@LLKKJJII--..//00ppoonnmmUUVVWWXXHHGGFFEE}}~~  + + 11223344]]\\[[ZZ::;;<<==ccbbaa``bbccddee;;::9988}}||{{zzxxyyzz{{ + +  !!""~~}}||{{GGHHIIJJVVUUTTSSooppqqrr..--,,++SSYYZZ[[*))((''&,,--..//qqppoonnTTUUVVWWAABBCCDDHHGGFFEE11223344llkkjjiiYYZZ[[\\DDCCBBAA 55667788YYSSRRQQ>>??@@AA__^^]]\\ffgghhii77665544 yyxxwwvv||}}~~##$$%%&&zzyyxxwwKKLLMMNNRRQQPPOOssttuuvv**))((''\\]]^^__&%%$$##" + + 00112233mmllkkjjXXYYZZ[[EEFFGGHHDDCCBBAA55667788hhggffee]]^^__``@@??>>==99::;;<>==99::;;<>??@@LLKKJJII !!~~}}||FFGGHHIIWWVVUUTTnnooppqq//..--,,""##$$%%llkkjjii++,,--..rrqqppooSSTTUUVVJJIIHHGG{{||}}~~""!!  + +ddeeffgg8899::;;eeddccbb``aabbccMMNNOOPP77665544==>>??@@``__^^]]eeffgghh88776655 AABBCCDDHHGGFFEE""##$$%%{{zzyyxxJJKKLLMMSSRRQQPPrrssttuu++**))((&&''(())hhggffee + +//001122nnmmllkkWWXXYYZZFFEEDDCC hhiijjkk<<==>>??aa``__^^ddeeffggQQRRSSTT33221100AABBCCDD\\[[ZZYYiijjkkll44332211 + +  ~~}}EEFFGGHHDDCCBBAA&&''(())wwvvuuttNNOOPPQQOONNMMLLvvwwxxyy''&&%%$$**++,,--ddccbbaa 33445566jjiihhgg[[\\]]^^BBAA@@??llmmnnoo@@AABBCC]]\\[[ZZhhiijjkk~~}}UUVVWWXX//..--,,EEFFGGHHXXWWVVUUmmnnoopp00//..--!!""##$$||{{zzyyIIJJKKLL@@??>>==**++,,--ssrrqqppRRSSTTUUKKJJIIHHzz{{||}}##""!!  ..//0011``__^^]]778899::ffeeddcc__``aabb>>==<<;;~~}}uuvvwwxx ~~DDEEFFGGYYXXWWVVllmmnnoo||{{zzyyYYZZ[[\\++**))((IIJJKKLLTTSSRRQQqqrrsstt,,++**))%%&&''((xxwwvvuuMMNNOOPP77665544..//0011oonnmmllVVWWXXYYGGFFEEDD~~ + + 22334455\\[[ZZYY;;<<==>>bbaa``__ccddeeff::998877||{{zzyyyyzz{{|| + +  !!""##}}||{{zzHHIIJJKKUUTTSSRRppqqrrssxxwwvvuu]]^^__``''&&%%$$MMNNOOPPPPOONNMMuuvvwwxx((''&&%%))**++,,ttssrrqqQQRRSSTT3322110022334455kkjjiihhZZ[[\\]]CCBBAA@@66778899SSRRQQPP??@@AABB^^]]\\[[gghhiijj66554433 xxwwvvuu}}~~$$%%&&''yyxxwwvvLLMMNNOOQQPPOONNttuuvvwwttssrrqqaabbccdd##""!!QQRRSSTTLLKKJJIIyyzz{{||$$##""!!--..//00ppoonnmmUUVVWWXX//..--,,66778899ggffeedd^^__``aa??>>==<<::;;<<==OONNMMLLCCDDEEFFZZYYXXWWkkllmmnn221100// + +  !!""oonnmmll(())**++uuttssrrPPQQRRSSMMLLKKJJxxyyzz{{ppoonnmmeeffgghhUUVVWWXXHHGGFFEE}}~~  + + 11223344llkkjjiiYYZZ[[\\++**))((::;;<<==ccbbaa``bbccddee;;::9988>>??@@AAKKJJIIHH !!""~~}}||{{GGHHIIJJVVUUTTSSooppqqrr..--,,++##$$%%&&kkjjiihh,,--..//qqppoonnTTUUVVWWIIHHGGFF||}}~~llkkjjiiiijjkkll~~}}||YYZZ[[\\DDCCBBAA 55667788hhggffee]]^^__``''&&%%$$>>??@@AA__^^]]\\ffgghhii77665544 BBCCDDEEGGFFEEDD##$$%%&&zzyyxxwwKKLLMMNNRRQQPPOOssttuuvv**))((''''(())**ggffeedd + + 00112233mmllkkjjXXYYZZ[[EEDDCCBBhhggffeemmnnoopp{{zzyyxx]]^^__``@@??>>==99::;;<>aa``__^^ddccbbaaqqrrsstt wwvvuutsaabbccdd<<;;::99==>>??@@``__^^]]eeffgghhFFGGHHIIWWVVUUTTnnooppqq//..--,,""##$$%%{{zzyyxxJJKKLLMM??>>==77++,,--..rrqqppooSSTTUUVVJJIIHHGG{{||}}~~""!!  + +//001122__^^]]\\8899::;;eeddccbb``aabbcc==<<;;::]]\\[[ZZ``__^^]]uuvvwwxx + + + +rqpoonnmeeffgghh88776655 AABBCCDD\\[[ZZYYiijjkkllJJKKLLMMSSRRQQPPrrssttuu++**))((&&''(())wwvvuuttNNOOPPQQ66554433//001122nnmmllkkWWXXYYZZFFEEDDCC 33445566[[ZZYYSS<<==>>??aa``__^^ddeeffgg99887766YYXXWWVV\\[[ZZYYyyzz{{|| mllkkjjiiijjkkll44332211 + +  ~~}}EEFFGGHHXXWWVVUUmmnnooppNNOOPPQQOONNMMLLvvwwxxyy''&&%%$$**++,,--ssrrqqppRRSSTTUU221100//33445566jjiihhgg[[\\]]^^BBAA@@??778899::RRQQPPOO@@AABBCC]]\\[[ZZhhiijjkk55443322UUTTSSRRXXWWVVUU}}~~ihhggffemmnnoopp00//..--!!""##$$||{{zzyyIIJJKKLLTTSSRRQQqqrrsstt ~~}}||RRSSTTUUKKJJIIHHzz{{||}}##""!!  ..//0011oonnmmllVVWWXXYY..--,,++778899::ffeeddcc__``aabb>>==<<;;;;<<==>>NNMMLLKK~~DDEEFFGGYYXXWWVVllmmnnoo1100//..QQPPOONNTTSSRRQQeddccbbaqqrrsstt,,++**))%%&&''((xxwwvvuuMMNNOOPPPPOONNMMuuvvwwxx + + {{zzyyxxVVWWXXYYGGFFEEDD~~ + + 22334455kkjjiihhZZ[[\\]]**))(('';;<<==>>bbaa``__ccddeeff::998877??@@AABBJJIIHHGG !!""##}}||{{zzHHIIJJKKUUTTSSRRppqqrrss--,,++**MMLLKKJJPPOONNMMa``__^^]uuvvwwxx((''&&%%))**++,,ttssrrqqQQRRSSTTLLKKJJIIyyzz{{||wwvvuutsZZ[[\\]]CCBBAA@@66778899ggffeedd^^__``aa&&%%$$##??@@AABB^^]]\\[[gghhiijj66554433 CCDDEEFFFFEEDDCC$$%%&&''yyxxwwvvLLMMNNOOQQPPOONNttuuvvww))((''&&IIHHGGFFLLKKJJII!!""##]\\[[ZZYyyzz{{||$$##""!!--..//00ppoonnmmUUVVWWXXHHGGFFEE}}~~ + +rqpoonnm^^__``aa??>>==<<::;;<<==ccbbaa``bbccddee""!!CCDDEEFFZZYYXXWWkkllmmnn221100// + +  !!""~~}}||{{GGHHIIJJBBAA@@??(())**++uuttssrrPPQQRRSSMMLLKKJJxxyyzz{{%%$$##""EEDDCCBBHHGGFFEE$$%%&&''YXWVUTSS}}~~  + + 11223344llkkjjiiYYZZ[[\\DDCCBBAA mllkkjjibbccddee;;::9988>>??@@AA__^^]]\\ffgghhiiGGHHIIJJVVUUTTSSooppqqrr..--,,++##$$%%&&zzyyxxwwKKLLMMNN>>==7766,,--..//qqppoonnTTUUVVWWIIHHGGFF||}}~~!! AA@@??>>DDCCBBAA(())**++RRQQPPOO 55667788hhggffee]]^^__``@@??>>==ihhggffeffgghhii77665544 BBCCDDEE[[ZZYYXXjjkkllmmKKLLMMNNRRQQPPOOssttuuvv**))((''''(())**vvuuttssOOPPQQRR5544332200112233mmllkkjjXXYYZZ[[EEDDCCBB==<<;;::@@??>>==,,--..//NNMMLLKK99::;;<>99887766<<;;::9900112233JJIIHHGG==>>??@@``__^^]]eeffgghh88776655a``__^^]nnooppqq//..--,,""##$$%%{{zzyyxxJJKKLLMMSSRRQQPPrrssttuu + +~~}}||{{SSTTUUVVJJIIHHGG{{||}}~~""!!  + +//001122nnmmllkkWWXXYYZZ--,,++**8899::;;eeddccbb``aabbcc==<<;;::554433228877665544556677FFEEDDCC AABBCCDD\\[[ZZYYiijjkkll44332211!!""##]\\[[ZZYrrssttuu++**))((&&''(())wwvvuuttNNOOPPQQOONNMMLLvvwwxxyy zzyyxxwwWWXXYYZZFFEEDDCC 33445566jjiihhgg[[\\]]^^))((''&&<<==>>??aa``__^^ddeeffgg998877661100//..44332211==>>??@@BBAA@@?? + +  ~~}}EEFFGGHHXXWWVVUUmmnnoopp00//..--$$%%&&''YXWVUTSSvvwwxxyy''&&%%$$**++,,--ssrrqqppRRSSTTUUKKJJIIHHzz{{||}}vvuutsrq[[\\]]^^BBAA@@??778899::ffeeddcc__``aabb%%$$##""@@AABBCC]]\\[[ZZhhiijjkk55443322 + +--,,++**00//..--AABBCCDD>>==<;:9!!""##$$||{{zzyyIIJJKKLLTTSSRRQQqqrrsstt,,++**))(())**++RRQQPPOOzz{{||}}##""!!  ..//0011oonnmmllVVWWXXYYGGFFEEDD~~ + + poonnmml__``aabb>>==<<;;;;<<==>>bbaa``__ccddeeff!!DDEEFFGGYYXXWWVVllmmnnoo1100//.. ))((''&&,,++**))EEFFGGHH87766554%%&&''((xxwwvvuuMMNNOOPPPPOONNMMuuvvwwxx((''&&%%,,--..//NNMMLLKK~~ + + 22334455kkjjiihhZZ[[\\]]CCBBAA@@ lkkjjiihccddeeff::998877??@@AABB^^]]\\[[gghhiijjHHIIJJKKUUTTSSRRppqqrrss--,,++**%%$$##""((''&&%%IIJJKKLL43322110))**++,,ttssrrqqQQRRSSTTLLKKJJIIyyzz{{||$$##""!!00112233JJIIHHGG66778899ggffeedd^^__``aa??>>==<<hggffeedgghhiijj66554433 CCDDEEFFZZYYXXWWkkllmmnnLLMMNNOOQQPPOONNttuuvvww))((''&&!! $$##""!!MMNNOOPP0//..--,--..//00ppoonnmmUUVVWWXXHHGGFFEE}}~~ 44556677FFEEDDCC::;;<<==ccbbaa``bbccddee;;::9988dccbbaa`kkllmmnn221100// + +  !!""~~}}||{{GGHHIIJJVVUUTTSSooppqqrr ~~PPQQRRSSMMLLKKJJxxyyzz{{%%$$##"" QQRRSSYY,++**))( + + 11223344llkkjjiiYYZZ[[\\DDCCBBAA==>>??@@BBAA@@??>>??@@AA__^^]]\\ffgghhii77665544`__^^]]\ooppqqrr..--,,++##$$%%&&zzyyxxwwKKLLMMNNRRQQPPOOssttuuvv + + }}||{{zzTTUUVVWWIIHHGGFF||}}~~!!  + + ZZ[[\\]](''&&%%$ 55667788hhggffee]]^^__``@@??>>==AABBCCDD>>==<;:9 BBCCDDEE[[ZZYYXXjjkkllmm33221100!!""##$$\[[ZZYYXssttuuvv**))((''''(())**vvuuttssOOPPQQRRNNMMLLKKwwxxyyzzyyxxwwvvXXYYZZ[[EEDDCCBB ^^__``aa$##""!! 99::;;<>bbccddee==>>??@@``__^^]]eeffgghh88776655 IIJJKKLL43322110""##$$%%{{zzyyxxJJKKLLMMSSRRQQPPrrssttuu++**))(())**++,,QQPPOONN{{||}}~~""!!  + +//001122nnmmllkkWWXXYYZZFFEEDDCC + + onnmmllk``aabbcc==<<;;:: + + ffgghhiiAABBCCDD\\[[ZZYYiijjkkll44332211 + + MMNNOOPP0//..--,&&''(())wwvvuuttNNOOPPQQOONNMMLLvvwwxxyy''&&%%$$--..//00MMLLKKJJ 33445566jjiihhgg[[\\]]^^BBAA@@?? kjjiihhgddeeffgg99887766  + + jjkkllmm ~~}}EEFFGGHHXXWWVVUUmmnnoopp00//..--QQRRSSYY,++**))(**++,,--ssrrqqppRRSSTTUUKKJJIIHHzz{{||}}##""!! 11223344IIHHGGFF778899::ffeeddcc__``aabb>>==<<;;gffeeddchhiijjkk55443322 + +~~ + + nnoouuvv!!""##$$||{{zzyyIIJJKKLLTTSSRRQQqqrrsstt,,++**))ZZ[[\\]](''&&%%$ ..//0011oonnmmllVVWWXXYYGGFFEEDD~~556677==EEDDCCBB;;<<==>>bbaa``__ccddeeff::998877cbbaa``_llmmnnoo1100//..  !!""##}}||{{zz wwxxyyzz + +%%&&''((xxwwvvuuMMNNOOPPPPOONNMMuuvvwwxx((''&&%%^^__``aa$##""!! + + 22334455kkjjiihhZZ[[\\]]CCBBAA@@>>??@@AAAA@@??>>??@@AABB^^]]\\[[gghhiijj66554433!!_^^]]\\[ppqqrrss--,,++**$$%%&&''yyxxwwvv{{||}}~~ ))**++,,ttssrrqqQQRRSSTTLLKKJJIIyyzz{{||$$##""!!bbccddee66778899ggffeedd^^__``aa??>>==<<BBCCDDEE==<;:987 CCDDEEFFZZYYXXWWkkllmmnn221100//""##$$%%[ZZYYXWVttuuvvww))((''&&(())**++uuttssrr + + ~~}}||{{--..//00ppoonnmmUUVVWWXXHHGGFFEE}}~~  + + ffgghhii::;;<<==ccbbaa``bbccddee;;::9988FFGGHHII76655443 + +  !!""~~}}||{{GGHHIIJJVVUUTTSSooppqqrr..--,,++&&''(())UTSSRRQQxxyyzz{{%%$$##"",,--..//qqppoonn zzyyxxww + + 11223344llkkjjiiYYZZ[[\\DDCCBBAA jjkkllmm>>??@@AA__^^]]\\ffgghhii77665544 JJKKLLMM3221100/##$$%%&&zzyyxxwwKKLLMMNNRRQQPPOOssttuuvv**))((''**++,,--PPOONNMM||}}~~!!  + + 00112233mmllkkjj vvuuoonn 55667788hhggffee]]^^__``@@??>>==nnoouuvvBBCCDDEE[[ZZYYXXjjkkllmm33221100 + + NNOOPPQQ/..--,,+''(())**vvuuttssOOPPQQRRNNMMLLKKwwxxyyzz&&%%$$##..//0011LLKKJJII 44556677iihhggff!!""##$$mmllkkjj99::;;<>))**++,,ttssrrqqQQRRSSTTLLKKJJIIyyzz{{||$$##""!!--..//00aa``__^^66778899ggffeedd^^__``aa??>>==<<MMNNOOPP++**))(($$%%&&''yyxxwwvvLLMMNNOO==776655--..//00ppoonnmmUUVVWWXXHHGGFFEE}}~~  + + 11223344]]\\[[ZZ::;;<<==ccbbaa``bbccddee;;::9988QQRRSSYY''&&%%$$(())**++uuttssrrPPQQRRSS4433221111223344llkkjjiiYYZZ[[\\DDCCBBAA 55667788YYSSRRQQ>>??@@AA__^^]]\\ffgghhii77665544 ZZ[[\\]]##""!! ,,--..//qqppoonnTTUUVVWW00//..--55667788hhggffee]]^^__``@@??>>==99::;;<>??@@LLKKJJII !!~~}}||FFGGHHIIWWVVUUTTnnooppqq//..--,,bbccddee44556677iihhggff\\]]^^__((''&&%%==>>??@@``__^^]]eeffgghh88776655 AABBCCDDHHGGFFEE""##$$%%{{zzyyxxJJKKLLMMSSRRQQPPrrssttuu++**))((ffgghhii8899::;;eeddccbb``aabbcc$$##""!!AABBCCDD\\[[ZZYYiijjkkll44332211 + +  ~~}}EEFFGGHHDDCCBBAA&&''(())wwvvuuttNNOOPPQQOONNMMLLvvwwxxyy''&&%%$$jjkkllmm<<==>>??aa``__^^ddeeffggEEFFGGHHXXWWVVUUmmnnoopp00//..--!!""##$$||{{zzyyIIJJKKLL@@??>>==**++,,--ssrrqqppRRSSTTUUKKJJIIHHzz{{||}}##""!!  nnoouuvv @@AABBCC]]\\[[ZZhhiijjkkIIJJKKLLTTSSRRQQqqrrsstt,,++**))%%&&''((xxwwvvuuMMNNOOPP77665544..//0011oonnmmllVVWWXXYYGGFFEEDD~~ + + wwxxyyzz + + DDEEFFGGYYXXWWVVllmmnnooMMNNOOPPPPOONNMMuuvvwwxx((''&&%%))**++,,ttssrrqqQQRRSSTT3322110022334455kkjjiihhZZ[[\\]]CCBBAA@@{{||}}~~ + + HHIIJJKKUUTTSSRRppqqrrss ~~}}QQRRSSTTLLKKJJIIyyzz{{||$$##""!!--..//00ppoonnmmUUVVWWXX//..--,,66778899ggffeedd^^__``aa??>>==<<~~}}||{{LLMMNNOOQQPPOONNttuuvvww + + ||{{zzyyUUVVWWXXHHGGFFEE}}~~  + + 11223344llkkjjiiYYZZ[[\\++**))((::;;<<==ccbbaa``bbccddee;;::9988zzyyxxwwPPQQRRSSMMLLKKJJxxyyzz{{xxwwvvuuYYZZ[[\\DDCCBBAA 55667788hhggffee]]^^__``''&&%%$$>>??@@AA__^^]]\\ffgghhii77665544 vvuuoonnTTUUVVWWIIHHGGFF||}}~~ tsrqpoon]]^^__``@@??>>==99::;;<>??@@``__^^]]eeffgghhFFGGHHIIWWVVUUTTnnooppqq//..--,,""##$$%%iihhggff !!\\]]^^__AA@@??>>jiihhggfeeffgghh88776655 AABBCCDD\\[[ZZYYiijjkkllJJKKLLMMSSRRQQPPrrssttuu++**))((&&''(())eeddccbb""##$$%%``aabbcc==<<;;::feeddccbiijjkkll44332211 + +  ~~}}EEFFGGHHXXWWVVUUmmnnooppNNOOPPQQOONNMMLLvvwwxxyy''&&%%$$**++,,--aa``__^^&&''(())ddeeffgg99887766baa``__^mmnnoopp00//..--!!""##$$||{{zzyyIIJJKKLLTTSSRRQQqqrrsstt ~~}}||RRSSTTUUKKJJIIHHzz{{||}}##""!!  ..//0011]]\\[[ZZ**++,,--hhiijjkk55443322!!""^]]\\[[Zqqrrsstt,,++**))%%&&''((xxwwvvuuMMNNOOPPPPOONNMMuuvvwwxx + + {{zzyyxxVVWWXXYYGGFFEEDD~~ + + 22334455YYSSRRQQ..//0011llmmnnoo1100//..##$$%%&&ZYYXWVUTuuvvwwxx((''&&%%))**++,,ttssrrqqQQRRSSTTLLKKJJIIyyzz{{||wwvvuutsZZ[[\\]]CCBBAA@@66778899PPOONNMM22334455ppqqrrss--,,++**''(())**SSRRQQPPyyzz{{||$$##""!!--..//00ppoonnmmUUVVWWXXHHGGFFEE}}~~ + +rqpoonnm^^__``aa??>>==<<::;;<<==LLKKJJII66778899ttuuvvww))((''&&++,,--..OONNMMLL}}~~  + + 11223344llkkjjiiYYZZ[[\\DDCCBBAA mllkkjjibbccddee;;::9988>>??@@AAHHGGFFEE::;;<<==xxyyzz{{%%$$##""//001122KKJJIIHH 55667788hhggffee]]^^__``@@??>>==ihhggffeffgghhii77665544 BBCCDDEEDDCCBBAA>>??@@AA||}}~~!! 33445566GGFFEEDD99::;;<>==BBCCDDEE77==>>??CCBBAA@@==>>??@@``__^^]]eeffgghh88776655a``__^^]nnooppqq//..--,,""##$$%%{{zzyyxxJJKKLLMM77665544FFGGHHII@@AABBCC??>>==<; AABBCCDD\\[[ZZYYiijjkkll44332211!!""##]\\[[ZZYrrssttuu++**))((&&''(())wwvvuuttNNOOPPQQ33221100JJKKLLMMDDEEFFGG:9877665 + +  ~~}}EEFFGGHHXXWWVVUUmmnnoopp00//..--$$%%&&''YXWVUTSSvvwwxxyy''&&%%$$**++,,--ssrrqqppRRSSTTUU//..--,,NNOOPPQQHHIIJJKK54433221!!""##$$||{{zzyyIIJJKKLLTTSSRRQQqqrrsstt,,++**))(())**++RRQQPPOOzz{{||}}##""!!  ..//0011oonnmmllVVWWXXYY++**))((RRSSTTUU + +LLMMNNOO100//..-%%&&''((xxwwvvuuMMNNOOPPPPOONNMMuuvvwwxx((''&&%%,,--..//NNMMLLKK~~ + + 22334455kkjjiihhZZ[[\\]]''&&%%$$~~}}||VVWWXXYY PPQQRRSS-,,++**)))**++,,ttssrrqqQQRRSSTTLLKKJJIIyyzz{{||$$##""!!00112233JJIIHHGG66778899ggffeedd^^__``aa##""!!{{zzyyxxZZ[[\\]]YYZZ[[\\)((''&&%--..//00ppoonnmmUUVVWWXXHHGGFFEE}}~~ 44556677FFEEDDCC::;;<<==ccbbaa``bbccddeewwvvuutt^^__``aa]]^^__``%$$##""! + + 11223344llkkjjiiYYZZ[[\\DDCCBBAA==>>??@@BBAA@@??>>??@@AA__^^]]\\ffgghhiissrrqqppbbccddeeaabbccdd!  55667788hhggffee]]^^__``@@??>>==AABBCCDD>>==<;:9 BBCCDDEE[[ZZYYXXjjkkllmmoonnmmllffgghhii + + eeffgghh99::;;<>??@@``__^^]]eeffgghh88776655 IIJJKKLL43322110""##$$%%{{zzyyxxJJKKLLMMSSRRQQPPrrssttuu + + + +ggffeeddnnooppqqmmnnoouuAABBCCDD\\[[ZZYYiijjkkll44332211 + + MMNNOOPP0//..--,&&''(())wwvvuuttNNOOPPQQOONNMMLLvvwwxxyy ccbbaa``rrssttuu~~}}||vvwwxxyy  ~~}}EEFFGGHHXXWWVVUUmmnnoopp00//..--QQRRSSYY,++**))(**++,,--ssrrqqppRRSSTTUUKKJJIIHHzz{{||}}__^^]]\\vvwwxxyy{{zzyyxxzz{{||}} + + !!""##$$||{{zzyyIIJJKKLLTTSSRRQQqqrrsstt,,++**))ZZ[[\\]](''&&%%$ ..//0011oonnmmllVVWWXXYYGGFFEEDD~~[[ZZYYXXzz{{||}}wwvvuuoo~~%%&&''((xxwwvvuuMMNNOOPPPPOONNMMuuvvwwxx((''&&%%^^__``aa$##""!! + + 22334455kkjjiihhZZ[[\\]]CCBBAA@@WWVVUUTT~~ !!""##nnmmllkk))**++,,ttssrrqqQQRRSSTTLLKKJJIIyyzz{{||$$##""!!bbccddee66778899ggffeedd^^__``aa??>>==<<!!""##SSRRQQPP$$%%&&''jjiihhgg--..//00ppoonnmmUUVVWWXXHHGGFFEE}}~~  + + ffgghhii::;;<<==ccbbaa``bbccddee;;::9988$$%%&&''OONNMMLL(())**++ffeeddcc + + 11223344llkkjjiiYYZZ[[\\DDCCBBAA jjkkllmm>>??@@AA__^^]]\\ffgghhii77665544(())**++KKJJIIHH,,--..//bbaa``__ 55667788hhggffee]]^^__``@@??>>==nnoouuvvBBCCDDEE[[ZZYYXXjjkkllmm33221100,,--..//GGFFEEDD00112233^^]]\\[[99::;;<>??@@``__^^]]eeffgghh88776655 zzyyxxww{{||}}~~ ""##$$%%{{zzyyxxJJKKLLMMSSRRQQPPrrssttuu++**))((44556677??>>==<<8899::;;QQPPOONNAABBCCDD\\[[ZZYYiijjkkll44332211 + +  vvuuoonn&&''(())wwvvuuttNNOOPPQQOONNMMLLvvwwxxyy''&&%%$$==>>??@@;;::9988<<==>>??MMLLKKJJ ~~}}EEFFGGHHXXWWVVUUmmnnoopp00//..--!!""##$$mmllkkjj**++,,--ssrrqqppRRSSTTUUKKJJIIHHzz{{||}}##""!! AABBCCDD77665544@@AABBCCIIHHGGFF!!""##$$||{{zzyyIIJJKKLLTTSSRRQQqqrrsstt,,++**))%%&&''((iihhggff ..//0011oonnmmllVVWWXXYYGGFFEEDD~~EEFFGGHH33221100ZHAbtlJ`f~ےbHA`vXnے`JXQtlJnXv`bHAZdrtA`vXnے`JXQfpvXQJ`ےtbdQpfH~pZA`~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQtbn˂pZHAd|ZvnXHAZp˂f`vbے`dQbtvnX`ےbZ|df`vbے`dQbtbHAXQJdrtAfH~pZHAbf~Zp˂tAJlnvpے`JXQtArdHfpvZp˂vpfr˂ptArdf~Hp˂rJltvpfr˂pnXv`bHAZZ|l璐f`vJXQrbpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےvpfbے`dQbt璕v`f~rXQJXnvJXQrlJtArv`fHAZp˂rtAJlXnvJXQrlJtAr`ےbJltf`vXے`JHfpvrXQJ`tbdQZfH~r˂p|ZdQbnXvrXQJ`H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAےf~Hp˂rtbdQZXnvtlJXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZpHf`JXQHAblJtArfpv`ےbpfH~˂pZHAd|Z~HfprXQJtbdQpfH~˂pZHAdfHAZp˂bQZdnvpXQr˂nXvےbHA|drf`vXZHAbtlJ`f~ےbHA`vXnے`JXQtlJnXv`bHAZdrtA`vXn`JXQrfpvXQJ`ے|drpfH~tAd|~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQvXnے`Jd|ZnXv`HAZdf`vbے`dQbtvnX`ےbZ|df`vbے`~HXvrXQJrtAJlfH~pZHA`f~Zp˂tAJlnvpے`JXQtArdHXv`Zp˂vpfr˂ptArdf~Hp˂rJltvpfbtlnXv`bHAZtAJl璐vpZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےvpfHXQr˂dQbtf~HrtAJlXnvJXQrlJtArv`fHAZp˂rtAJlXnvJXQr`f~`ےbtbdQf`vXے`JXQHfpvrXQJ`tbdQZfH~r˂p|ZdQbf~HbHAZH~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fJtAdf~Hp˂rtbdQZfH~lJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZ~f`pZHAbl|ZdQfpvtbdQpfH~˂pZHAd|Z~HfprXQJtbdQpfH~˂pZHAHfpvHAZp˂Z|dnvprbt璀nXvےbHA|drf`vXZHAbtlJfpvdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXn|ZdQbfpvXQJ`ے|drf`vXrd|~Hf˂rXQltbvpfH˂pZrd|~HfdrtAJvXnے`JbtlnXv`Z|df`vbے`dQbtvnX`ےbZ|df`vے`JnXvbHArtAJlfH~lJtAd`f~Zp˂tAJlnvpے`JXQtArdnXv`JbdQ瀅vpfr˂ptArdf~Hp˂rJltvpftlJnXv`bHAZtAdQZ|nvpZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtpvnltbvpfHXQr˂JtArdffpvrtAJlXnvJXQrlJtArv`fHAZp˂rtAJlXnvXQrbt`f~Zp˂tbdQf`vX|ZdQHfpvrXQJ`tbdQZfH~r˂p|ZdQbf~HZ|dH~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~ftArdf~Hp˂rdrtAfH~lJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXv`fdQZ|~f`p`JXQ|ZdQnrXQtbdQpfH~˂pZHAd|Z~HfprXQJtbdQpfH~lJtAHfpvrXQJ`Z|rAJnvpbtlnXvےbHA|drf`vXZHAbtlJfpvrtAJl`vXnے`JXQtlJnXv`bHAZdrtAZHAb|ZdQbfpvXQJ`ےJltf`vXrd|~Hf˂rXQltbvpfH˂pZrd|HfpdrtAJvXnr˂pbtlJ`ےZ|df`vbے`dQbtvnX`ےbZ|df`vd|Z~HےbHAltbfH~JtArd`f~Zp˂tAJlnvpے`JXQtArd~HftbdQ瀅vpfr˂ptArdf~Hp˂rJltے`JXQtlJnXv`bHAZbdQZ|H~fZdQbtpvnJ`ےdQZ|~f`HAbےZdQbtvnrltbvpfHZHAbJtArdHAZp˂rtAJlXnvJXQrlJtArv`fHAZp˂rtAJlXnvdQbtfpvZp˂dQZ|fZHAb|ZdQHfpvrXQJ`tbdQZfH~r˂p|ZdQbpvnZ|dH~fZHAb|ZdQbfpvXQJ`ےbdQZ|r˂ptArdf~Hp˂rdrtAZHAblJtAXv`fbHAZpdrtAJvXn`JXQrlJtAXQJ`ےdQZ|~f`ے`JXQtlJrXQJtbdQpfH~˂pZHAd|Z~HfprXQJtbdQpfH~lJtArnXv`rXQJ`drtAJے`JbtlnXvےbHA|drf`vXZHAbtlJXv`frtAJl`vXnے`JXQtlJnXv`bHAZdtAJZHAb|ZdQbfpvXQJ`ےJltJQrrd|~Hf˂rXQltbvpfH˂pZrd|HAZpdrtAJvXnr˂ptArd`ےbZ|df`vbے`dQbtvnX`ےbZ|dfZHAd|Zf~Hp˂rltbXQr˂JtArd`f~Zp˂tAJlnvpے`JXQtArd~HftbQZvpfr˂ptArdf~Hp˂rltbے`JXQtlJnXv`bHAZdrtAJpZHAZdQbtpvnJ`ےdQZ|~f`HAbےZdQbt˂rXQltbvpfHZHAb|ZdQbHAZp˂rtAJlXnvJXQrlJtArv`fHAZp˂rtAJlbے`dQbtfpvXQJ`ےdQZ|pZHAb|ZdQHfpvrXQJ`tbdQZfH~r˂p|ZdQbpvndrtAJH~fZHAb|ZdQbfpvXQJ`ےnvpr˂ptArdf~Hp˂rltbbے`lJtAXv`fbHAZpdrtAJvXn`JXQrlJtAJ`ےdQZ|~f`˂pZtlJrXQJtbdQpfH~˂pZHAd|Z~HfprXQJtbdQJXQrlJtArnXv`bHAZAJltے`JbtlnXvےbHA|drf`vXZHAbtlJXv`pltb`vXnے`JXQtlJnXv`bHAZfHfZHAb|ZdQbfpvXQJ`ےdQZ|JXQrrd|~Hf˂rXQltbvpfH˂pZrdfbHAZpdrtAJvXnHAbےtArd`ےbZ|df`vbے`dQbtvnX`ےbZ|d˂pZHAd|Zpvnp˂rbnvXQr˂JtArd`f~Zp˂tAJlnvpے`JXQtArdvnXdQZ|vpfr˂ptArdf~Hp˂r`vXnے`JXQtlJnXv`bHAZdrtAJpZHAZdQbtpvnJ`ےdQZ|~f`HAbے~Hf˂rXQltbvpfH`JXQr|ZdQtAHAZp˂rtAJlXnvJXQrlJtArv`fHAZp˂tAJlbے`dQbtXv`fXQJ`ےpfHpZHAb|ZdQHfpvrXQJ`tbdQZfH~r˂p|ZdQbv`fdrtAJH~fZHAb|ZdQbfpvXQJ`ےvpfr˂ptArdf~Hp˂rltbbے`lJtAXv`fbHAZpdrtAJvXn`JXQrpvnJ`ےdQZ|~f`˂pZrdfrXQJtbdQpfH~˂pZHAd|Z~HfprXQJtbnJXQrlJtAr~HfbHAXQf`vXے`JbtlnXvےbHA|drf`vXZHAbtlJ~Hfpltb`vXnے`JXQtlJnXv`bHAZH~fZHAb|ZdQbfpvXQJ`ےdQZ|lJXQrZrd|~Hf˂rXQltbvpfH˂pZXv`fbHAZpdrtAJvXnHAbے~Hf`ےbZ|df`vbے`dQbtvnX`ےbvpfH˂pZHAd|ZpvnJ`ےnvpXQr˂JtArd`f~Zp˂tAJlnvpXQr˂ے`JXQtArdvnXdQZ|vpfr˂ptArdf~HdrtA`vXnے`JXQtlJnXv`bHAZtbdQHAbےZdQbtpvnJ`ےdQZ|~f`HAے`~Hf˂rXQltbvpfH`JXQHAvnXv`HAZp˂rtAJlXnvJXQrlJtArv`fHAZp˂f`vbے`dQbtXv`fbHAZpfH~pZHAb|ZdQHfpvrXQJ`tbdQZfH~pZHAbr˂p|ZdQbv`p˂rAJltH~fZHAb|ZdQbfpvJltvpfr˂ptArdf~Hp˂rZ|d`JXQrlJtAXv`fbHAZpdrtAJvXnJXQrbpvnJ`ےdQZ|~f`bے`f~HrXQJtbdQpfH~˂pZHAd|Z~HfprXQJXnvJXQrlJtAr~HX˂rXQf`vXے`JbtlnXvےbHA|drf`vXے`JZHAbtlJrXQJbdQZ|`vXnے`JXQtlJnXv`bdQZ|H~fZHAb|ZdQbfpvXQJ`ےrtAJl˂pZrd|~Hf˂rXQltbvpfHtlJXv`fbHAZpdrtAJvXnJXQrfpv`ےbZ|df`vbے`dQbtvnX`ےbpfH~˂pZHAd|Zv`fJ`ےnvpXQr˂JtArd`f~Zp˂tAJlnvpXQr˂ے`JXQtArd`ےbdrtvpfr˂ptArdfHfdrtA`vXnے`JXQtlJnXv`bHAZtbdQHAbےZdQbtpvnJ`ےdQZ|~f`tAd|~Hf˂rXQltbvpfH˂pZHAnXv`HAZp˂rtAJlXnvJXQrlJtArv`fHAZdf`vbے`dQbt~HfpbHAZpfH~pZHAb|ZdQHfpvrXQJ`tbdQZfH~pZHAbr˂p|ZdQbHAZp˂AJltH~fZHAb|ZdQbpvnJltvpfr˂ptArdf~Hp˂rZ|l`JXQrlJtAXv`fbHAZpdrtAJvXnZdQbtpvnJ`ےdQZ|~f`bے`f~HrXQJtbdQpfH~˂pZHAd|Z~HfprtAJlXnvJXQrlJtArvnX˂bf`vXے`JbtlnXvےbHA|drf`vXے`JZHAbtlJrXQJbdQZ|`vXnے`JXQtlJrXQJ`bdQZ|H~fZHAb|ZdQbfpvXQJ`ےtbn˂pZArd|~Hf˂rXQltbvpfHlJtAXv`fbHAZpdrtAJvXnJXQrfpv`ےbZ|df`vbے`dQbtvnXtbdQpfH~˂pZHAd|Zv`fHAZdnvpXQr˂JtArd`f~Zp˂tAJlnvpXQr˂ے`JXQtArd`p˂drtvpfr˂ptArdےHAZdrtA`vXnے`JXQtlJnXv`bHAZvp`vb`JXZdQbtpvnJ`ےdQZ|~fZrd|~Hf˂rXQltbvpfH˂p`JnvfHAZp˂rtAJlXnvJXQrlJtArv`fZ|df`vbے`dQbt~HfprtAJfH~pZHAb|ZdQHfpvrXQJ`tbdQZfH~pZHAbr˂p|ZdQbrXQJ`AJbdQH~fZHAb|ZdQbp˂rJltvpfr˂ptArdf~Hp˂rXnvQr˂plJtAXv`fbHAZpdrtAJHAbےZdQbtpvnJ`ےdQZ|~f`XQr˂~HfprXQJtbdQpfH~˂pZHAd|ZHfpvrtAJlXnvJXQrlJtArv~bdQZ|f`vXے`JbtlnXvےbHA|drf`vXے`JZHAbtlJےbHAZ|d`vXnے`JXQtlJXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےpfH~ZHAbrd|~Hf˂rXQltb`JXQrlJtAXv`fbHAZpdrtAJvXnpZHAbvnX`ےbZ|df`vbے`dQbt璀nrXQtbdQpfH~˂pZHAd|ZHfpvdrtAnvpXQr˂JtArd`f~Zp˂tAJlnvpXQr˂ے`JXQtArdZp˂rtAJlvpfr˂ptArdbHAZdrtA`vXnے`JXQtlJnXv`bHAZf`vے`JXZdQbtpvnJ`ےdQZ|˂pZrd|~Hf˂rXQltbvpfHے`Jv`fHAZp˂rtAJlXnvJXQrlJtArJ`ےZ|df`vbے`dQbt璀nXvJltfH~pZHAb|ZdQHfpvrXQJ`tbdQZfH~pZHAbr˂p|ZdQbrXQJ`tbdQH~fZHAbf~Hp˂rJltvpfr˂ptArdf~Hp˂rXnvQr˂plJtAXv`fbHAZpdtAJlHAbےZdQbtpvnJ`ےdQZ|~f`XQr˂~HfprXQJtbdQpfH~˂pZHAd|ZHAZp˂rtAJlXnvJXQrlJtAr`f~bdQZ|f`vXے`JbtlnXvےbHA|drfZHAbے`JZHAbtlJےbHAZ|d`vXnے`JXQfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےp`vXZHAbrd|~Hf˂rXQtbn`JXQrlJtAXv`fbHAZpdrtAJvXnp`JXQvnX`ےbZ|df`vbے`dQbt璀rXQJtbdQpfH~˂pZHAd|ZHfpvdrtAnvpXQr˂JtArd`f~Zp˂tAJl璐ے`JXQr˂ے`JXQtArdXQJ`ےrtAJlvpfr˂pnXv`bHAZdrtA`vXnے`JXQtlJnXv`bHAZnvpJQrZdQbtpvnJ`ےvpf˂pZrd|~Hf˂rXQltbvpfHrbtv`f~HAZp˂rtAJlXnvJXQrlJtAr`ےbZ|df`vbے`dQbt璀nXvJltbfH~pZHAb|ZdQHfpvrXQJ`tbdQZXQr˂pZHAbr˂p|ZdQbbHAZtbQZH~fZHAےf~Hp˂rJltvpfr˂ptArdf~Hp˂rfH~˂pZHAlJtAXv`fbHAZpHf`HAbےZdQbtpvnJ`ےdQZ|~f`l|ZdQfpv〉rXQJtbdQpfH~˂pZHAdfHAZp˂rtAJlXnvJXQrlJtAr`pvQZdrf`vXے`JbtlnXvےbHA|dtApZHAbے`JZHAbtlJp˂rdrtA`vXn`JXQrfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےf`vXbے`rd|~Hf˂rXQvXn`JXQrlJtAXv`fbHAZpdrtAJvXnbtlnXv``ےbZ|df`vbے`~HfprXQJtbdQpfH~˂pZHAd|ZnXv`tAJlnvpXQr˂JtArd`f~Zp˂Jltے`JXQr˂ے`JXQtArdXQJ`ےJltvpfbtlnXv`bHAZdrtA`vXnے`JXQtlJnXv`bHAZnvpJXQrZdQbtpvnJ`ےvpfH˂pZrd|~Hf˂rXQltbvpfHJtArdf~HHAZp˂rtAJlXnvJXQrvnX`ےbZ|df`vbے`dQbtf~HtbdQZfH~pZHAb|ZdQHfpvrXQJ`bnvXQr˂pZHAbr˂pf~HbHAZbdQZ|H~fJtAdf~Hp˂rJltvpfr˂ptArdf~Hp˂rfH~˂pZHAlJtAXv`fbHAZ~f`HAbےZdQbtpvnJ`ےdQZ|~f`|ZdQfpv〉rXQJtbdQpfH~˂pZHAv`fHAZp˂rtAJlXnvJXQrlJtArfpv|drf`vXے`JbtlnXvےbHApfHpZHAbے`JZHAbXv`fp˂drtA`vXn|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےvpfbے`rd|~HfdrtAJvXn`JXQrlJtAXv`fbHAZpdrtAJvXnbtlnXv``ےbZ|df`vے`J~HfprXQJtbdQpfH~˂pZHAd|ZnXv`tAJlnvpXQr˂JtArd`f~Zp˂f`vXے`JXQr˂ے`JXQ~HfbHAZpJltvpftlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`bHAZH~fJXQrZdQbtpvnltbvpfH˂pZrd|~Hf˂rXQltbvpfH|ZdQbf~HfHAZp˂rtAJlXnvXQrbtvnX`ےbZ|df`vbے`dQbtpvntbdQZfH~pZHAb|ZdQHfpvrXQJ`nvpXQr˂pZHAbr˂ppvn˂rXQbdQZ|H~ftArdf~Hp˂rJltvpfr˂ptArdf~HdrtA`vXnZHAblJtAXv`fdQZ|~f`HAbےZdQbtpvnJ`ےdQZ|~f`tlJvnXvrXQJtbdQpfH~lJtAv`fHAZp˂rtAJlXnvJXQrlJtArrXQJ`|rAJlf`vXے`JbtlnXvےbHAfH~pZHAbے`JZHAbXv`fJ`ےrAJlZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvdQZ|vpf`JXQrd|HfpdrtAJvXn`JXQrlJtAXv`fbHAZpdrtAJvXntArd`f~`ےbZ|df`vd|Z~HfprXQJtbdQpfH~˂pZHAd|Zp˂rtbdnvpXQr˂JtArd`f~Zdrf`vXے`JXQr˂ے`JXQ~HfbHAZptbdQZے`JXQtlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`drtAJH~fr˂pZdQbtvnrltbvpfH˂pZrd|~Hf˂rXQltbvpfH|ZdQbHfpvHAZp˂rtAJlXnvdQbtvnX`ےbZ|df`vbے`dQbtXQJ`ےQZ|dfH~pZHAb|ZdQHfpvtAJlnvpXQr˂pZHAr˂ppv˂rXQ|drr˂ptArdf~Hp˂rJltvpfr˂ptArdfHfltb`vXHZHAblJtAXQJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےdQZ|~f`tlJnXvrXQJtbdQpfH~lJtArv`fHAZp˂rtAJlXnvJXQrlJtArbHAZrtAJlf`vXے`JbtlnXvtbdQZfH~pZHAbے`JXQ|ZdQb~HfpJ`p˂tAJlZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbpvndQZ|~f``JXQrd|HAZpdrtAJvXn`JXQrlJtAXv`fbHAZpdrtAJvXntArdt`f~`ےbZ|dfZHAd|Z~HfprXQJtbdQpfH~˂pZHAd|Zp˂rtbdnvpXQr˂JtArd`fH|drf`vXے`JrbttlJvnXrXQJtbdQZے`JXQtlJnXv`bHAZdrtA`vXnے`JXQtlJrXQJ`drtAJvXnr˂pZZdQbt˂rXQltbvpfH˂pZrd|~Hf˂rXQltbvpfHlJtAHfpvHAZp˂rtAJlbے`dQbtvnX`ےbZ|df`vbے`dQbtXQJ`pQZ|dfH~pZHAb|ZdQfpvtAJlnvpXQr˂lJtAdtArdv`f`ےb|dnr˂ptArdf~Hp˂rJltvpfr˂ptArdےHAZltdvpfHAb`JlJtAJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےdQZ|~fZrd|nvfrXQJtbdQJXQrlJtArv`fHAZp˂rtAJlXnvJXQrlJtAr˂rXQrtAJf`vXے`JbtlnrXQJtbdQZfH~pZHAb|ZdQ|ZdQb~HfpHAZp˂vffZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbp˂rrtAJl~f`XQr˂rdfbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZpdrtAJHAbZdQbt~Hfp`ےbZ|d˂pZHAd|Z~HfprXQJtbdQpfH~˂pZHAd|ZJ`ےbdQZ|nvpXQr˂JtArd`ےHA|drf`vXے`JbtltlJvnXrXQJ`vXnے`JXQtlJnXv`bHAZdrtA`vXnے`JXQtlJXQJ`ےtbdQvXnpZHAb~Hf˂rXQltbvpfH˂pZrd|~Hf˂rXQltb˂pZHAlJtAvnXHAZp˂tAJlbے`dQbtvnX`ےbZ|df`vbے`dQbtbHAZpdrtAfH~pZHAb|ZdQZp˂tAJlnvpXQr˂JtArdtArdv`pv`ےbvpfr˂ptArdf~Hp˂rJltvpfr˂ptArdbHAZZ|dvp`vے`JpvnJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےdQZ|bے`rd|v`frXQJtbnJXQrlJtArv`fHAZp˂rtAJlXnvJXQrlJtAr˂rXQJltf`vXے`JbtlrXQJ`tbdQZfH~pZHAb|ZdQ|ZdQbnXvHAXQJ`H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAbf~Hp˂rrtAJlXnvXQr˂Xv`fbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZpdtAJlJXQrZdQtAr~Hfp`ےbvpfH˂pZHAd|Z~HfprXQJtbdQpfH~˂pZHAd|ZJ`ےbdQZ|nvpXQr˂JtArdےbHA|drf`vXے`JbtlJtArd`f~Zp˂|drfZHAbtlJnXv`bHAZdrtA`vXnے`JXQtlJrXQJ`bdQZ|H~fے`Jdtl˂rXQltbvpfH˂pZrd|~Hf˂rXQltbvpfHۑpJvˍpf|ZdQHfpvrXQJ`tAJl璐JQrtArdf~Hp˂rJltvpfr˂ptArdےHAZdrtA`vXnXQr˂JtArdJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےdQZ|~frAHr󙐂˕H~ㅐfbtlnXvےbHAtdrtA˂pZH|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbp˂rJltvpfpZHAb|ZdQbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZpdrtAJ˂pZ`ZQXAH`vXnJtArd`f~Zp˂JltAbے`tlJnXv`bHAZdrtA`vXnے`JXQtlJXQJ`ےbdQZ|H~f˂pbtl˂rXQltbvpfH˂pZrd|~Hf˂rXQltbHAbےr󙐂ˁ`vˍpf|ZdQHfpvrXQJ`bdQZ|JXQrtArdf~Hp˂rJltvpfr˂ptArdbHAZdrtA`vXnZHAbJtArdJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےdQZ|`JXQrZQXb㉀H~ㅐfbtlnXvےbHAdrtA˂pZH|ZdQbfpvXQJ`ےbdQZ|H~fZHAbf~Hp˂rJltvpfے`JXQ|ZdQbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZpdtAJl˂pZۑpJAH`vXnJtArd`f~Zp˂JltAbے`tlJnXv`bHAZdrtA`vXnے`JXQfpvXQJ`ےbdQZ|H~fr˂ptArd˂rXQltbvpfH˂pZrd|~Hf˂rXQtbnHAbےr󙐂ˁ`vˍpf|ZdQHfpvrXQJ`bdQZ|JXQrtArdf~Hp˂rJltvpfr˂pnXv`bHAZdrtA`vXnZHAbf~HJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےvpf`JXQHAZQXb㉀H~ㅐfbtlnXvےbHAltbZHAb|ZdQbfpvXQJ`ےbdQZ|H~fZHAےf~Hp˂rJltvpfے`JXQfvnXbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZpHf`bے`ۑp`Z`vXnJtArd`f~Zp˂dQZ|ے`JXQtlJnXv`bHAZdrtA`vXn`JXQrfpvXQJ`ےbdQZ|H~fHAbےv`f˂rXQltbvpfH˂pZrd|~Hf˂rXQvXnJXQrQXb㉀ەvˍp||ZdQHfpvrXQJ`drtAJr˂ptArdf~Hp˂rJltvpfbtlnXv`bHAZdrtA`vXn`JXQr~HfpJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےvpfH˂pZHApJAHrdrQtbtlnXvےbHAltbZHAb|ZdQbfpvXQJ`ےbdQZ|H~fJtAdf~Hp˂rJltvpf˂pZvnXbHAZpdrtAJvXn`JXQrlJtAXv`fbHAZ~f`bے`ˁ`ZJltJtArd`f~Zp˂dQZ|lے`JXQtlJnXv`bHAZdrtA`vXn|ZdQbfpvXQJ`ےbdQZ|H~fHAbےv`f˂rXQltbvpfH˂pZrd|~HfdrtAJvXnJXQrQXb㉀bAdZ||ZdQHfpvrXQJ`tbnr˂ptArdf~Hp˂rJltvpftlJnXv`bHAZdrtA`vXn`JXQr~HfpJ`ےdQZ|~f`HAbےZdQbtpvnltbvpfH˂p`JpJAHrdrQtbtlnXvےbHAvp`ZAb`|ZdQbfpvXQJ`ےbdQZ|H~ftArdf~Hp˂rJltvpf˂p`vnvfbHAZpdrtAJvXn`JXQrlJtAXv`fdQZ|~f`XQr˂ۑpJltJtArd`f~Zp˂vXnJXQrtlJnXv`bHAZdrtAZHAb|ZdQbfpvXQJ`ےbdQZ|H~fJXQr~Hf˂rXQltbvpfH˂pZrd|HfpdrtAJvXnpZHAbJAHrbAdZ||ZdQHfpvrXQJ`vpfHpZHAtArdf~Hp˂rJltے`JXQtlJnXv`bHAZdrtA`vXn˂pZHApvnJ`ےdQZ|~f`HAbےZdQbtvnrltbvpfHے`Jˁ`ZQXdrQtbtlnXvےbHA~f`bے`|ZdQbfpvXQJ`ےbdQZ|r˂ptArdf~Hp˂rJltvpfbے`Xv`fbHAZpdrtAJvXn`JXQrlJtAXQJ`ےdQZ|~f`XQr˂b㉀ۑpJltJtArd`f~Zp˂vXnJXQrtlJnXv`bHAZdtAJZHAb|ZdQbfpvXQJ`ےbdQZ|H~fJXQr~Hf˂rXQltbvpfH˂pZrd|HAZpdrtAJvXnpZHAbJAHrbAdZ||ZdQHfpvrXQJ`vp`vpZHAtArdf~Hp˂rltbے`JXQtlJnXv`bHAZdrtA`vXn˂p`JpvnJ`ےdQZ|~f`HAbےZdQbt˂rXQltbvpfH˂pˁ`pfdrQtbtlnXvےbHAXnvbJQr|ZdQbfpvXQJ`ےnvpr˂ptArdf~Hp˂rJltvpfXQrbtXv`fbHAZpdrtAJvXn`JXQrlJtAJ`ےdQZ|~f`ZHAbH~ㅐfJltJtArd`f~Zp˂pfH~˂pZtlJnXv`bHAZfHfZHAb|ZdQbfpvXQJ`ےbdQZ|H~fl|Z~fpv˂rXQltbvpfH˂pZrdfbHAZpdrtAJvXnے`JXQ`vXnbAdZ||ZdQHfpvrXQJ`f`vHAbےtArdf~Hp˂r`vXnے`JXQtlJnXv`bHAZdrtA`vXndQbt璅nXv`J`ےdQZ|~f`HAbے~Hf˂rXQltbvpfHr˂pvˍpfdrQtbtlnXvےbHAXnv`JXQr|ZdQbfpvXQJ`ےvpfr˂ptArdf~Hp˂rJltvpflJtArf~HbHAZpdrtAJvXn`JXQrpvnJ`ےdQZ|~f`ZHAbH~ㅐfJltJtArd`f~Zp˂pfH~˂pZtlJnXv`bHAZH~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fd|Zfpv˂rXQltbvpfH˂pZXv`fbHAZpdrtAJvXnے`JXQ`vXnbAdZ||ZdQHfpvrXQJ`vpHAbےtArdf~HdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXndQbt璅nXv`J`ےdQZ|~f`HAے`~Hf˂rXQltbvpfHHAbےvˍpfdrQtbtlnXvےbHAfH~`JXQr|ZdQbfpvJltvpfr˂ptArdf~Hp˂rJltvpfl|ZdQf~HbHAZpdrtAJvXnJXQrbpvnJ`ےdQZ|~f``JXQrH~ㅐfJltJtArd`f~Zdrf`vXZHAbtlJnXv`bdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fbtlfvnX˂rXQltbvpfHtlJXv`fbHAZpdrtAJvXn˂pZ`vXnbAdZ||ZdQHfpvtAdQZ|nvpے`JXtArdfHfdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXnJtArdv`fJ`ےdQZ|~f`tAd|~Hf˂rXQltbvpfHHAbےvˍpfdrQtbtlnXvdrtAfH~Qr˂p|ZdQbpvnJltvpfr˂ptArdf~Hp˂rJltvpf|ZdQ~HfpbHAZpdrtAJvXnZdQbtpvnJ`ےdQZ|~f``JXQrH~ㅐfJltJtArd`fHJltf`vXZHAbtlJrXQJ`bdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~fbtlvnX˂rXQltbvpfHlJtAXv`fbHAZpdrtAJvXn˂p``vXnbAdZ||ZdQfpvbdQZ|H~fے`JXtArdےHAZdrtA`vXnے`JXQtlJnXv`bHAZdrtA`vXnJtArdv`fJ`ےdQZ|~fZrd|~Hf˂rXQltbvpfHJXQrvˍpfdrQtbtlnrXQJdrtA`vXnQr˂p|ZdQbp˂rJltvpfr˂ptArdf~Hp˂rJltvpftlJ~HfpbHAZpdrtAJHAbےZdQbtpvnJ`ےdQZ|~f`˂pZHAH~ㅐfJltJtArd`ےHAJltvpfZAb`tlJXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|H~ftArdvnv˂rXQltb`JXQrlJtAXv`fbHAZpdrtAJvXnbے``vXnbAdZ||ZdQZp˂drtAJH~fJXQrtArdbHAZdrtA`vXnے`JXQtlJnXv`bHAZdrtAZHAb|ZdQbf~HJ`ےdQZ|˂pZrd|~Hf˂rXQltbvpfHJXQrvˍpfdrQtbtlrXQJ`ltb`vXn˂pZHAf~Hp˂rJltvpfr˂ptArdf~Hp˂rJlt˂pZtlJfpvbHAZpdtAJlHAbےZdQbtpvnJ`ےdQZ|~f`˂p`ZH~ㅐfJltJtArdےbHAdQZ|vp`bے`fpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےbdQZ|HAbےtArdnXv`˂rXQtbn`JXQrlJtAXv`fbHAZpdrtAJvXnQXb㉀۝`vXnbAdZ|f~Zp˂drtAJvXnJXQrnXv`bHAZdrtA`vXnے`JXQtlJnXv`bHAZdtAJ`JXQr|ZdQtAf~HJ`ےvpf˂pZrd|~Hf˂rXQltbvpfHpJAHrvˍpfdrQtHfpvrXQJ`ltbvpfH˂pZAf~Hp˂rJltvpfr˂ptArdf~Hp˂rltb˂pZrd|fpvbHAZpHf`HAbےZdQbtpvnJ`ےdQZ|~f`ˁ`ZH~ㅐfJltnXvےbHAdQZ|l~f``JXQrfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےnvpHAbےZdQbtnXv`f˂rXQvXn`JXQrlJtAXv`fbHAZpdrtAJvXnQXb㉀۝`vXnbAdZ|`f~Zp˂tbdQvXnbtlnXv`bHAZdrtA`vXnے`JXQtlJnXv`bHAZfHf`JXQHAlJtA~fpvJ`ےvpfH˂pZrd|~Hf˂rXQltbvpfHp`ZQXvˍpfdrQtHfpvrXQJ`Z|dvpfHJtAdf~Hp˂rJltvpfr˂ptArdf~Hp˂r`vXnbے`rd|nXvbHAZ~f`HAbےZdQbtpvnJ`ےdQZ|~f`b㉀ۑpH~ㅐfJltnXvےbHArtAJl~v|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvXQJ`ےvpfJXQrZdQbt`f~drtAJvXn`JXQrlJtAXv`fbHAZpdrtAJvXnJAHr󙐝`vXnbAdZ|`f~Zp˂tbdQpfH~tlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`bHAZH~f˂pZHAl|ZHfpvltbvpfH˂pZrd|~Hf˂rXQltbvpfHˁ`ZQXvˍpfdrQtHfpvrXQJ`Z|df`vtArdf~Hp˂rJltvpfr˂ptArdf~HdrtA`vXnbے`dQbt璀nXvdQZ|~f`HAbےZdQbtpvnJ`ےdQZ|~f`b㉀ۑpH~ㅐfJltnXvےbHArtAdQZXnv|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbfpvJltvpfJXQrlJtAr`ffpdrtAJvXn`JXQrlJtAXv`fbHAZpdrtAJvXnJAHr󙐝`vXnbAdZ|`f~Zp˂|drpfH~tlJnXv`bHAZdrtA`vXnے`JXQtlJnXv`bdQZ|H~f˂p`Jd|ZvnrltbvpfH˂pZrd|~Hf˂rXQltbvpfHۑpJvˍpfdrQtHfpvrXQJ`tAJl璐f`vtArdf~Hp˂rJltvpfr˂ptArdfHfdrtA`vXnXQr˂dQbtXQJ`ےdQZ|~f`HAbےZdQbtpvnJ`ےdQZ|~f`AHr󙐂˕H~ㅐfJltnXvےbHAtbdQZXH~|ZdQbfpvXQJ`ےbdQZ|H~fZHAb|ZdQbpvnJltvpfpZHAblJtArHAZpdrtAJvXn`JXQrlJtAXv`fbHAZpdrtAJvXn`ZQXb`vXnbAdZ|KKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv40_1.dat b/vendor/endroid/qr-code/assets/data/qrv40_1.dat new file mode 100644 index 000000000..4edce7de0 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv40_1.dat @@ -0,0 +1,353 @@ +~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwvuvuvuvuvutstststststststsrqrqrqrqpopopopopopopoponmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefefefedcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUSTSTSTSTTSRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:9787777776565656565656565434343434343434321212121212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqpopopopopopopoponmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUSTSTSTSTRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:9878787876565656565656565434343434343434321212121212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqpopopopopopopoponmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUSTSTSTSTRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCBABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:98787878765656565656565654343434343434343212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqpopopopopopopoponmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUSTSTSTSTRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:98787878765656565656565654343434343434343212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwvuvuvuvuvuvuvuvutstststststststsrqrqrqrqpopooooooooopoponmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUSTSTSTSTRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:98787878765656565656565654343434343434343212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwvuvuvuvuvuvuvuvutststststsrqrqrqrqrqrqrqopopopoppoponmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghghghgfefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUSTSTSSSSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:98787878787878765656565656565654343434343434343212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyxwxwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqrqrqrqrqopopopopnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghghghgfefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUSSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9877777788787877765656565656565654343434343434343212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqrqrqrqrqopopopopnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9787878787778787865656565656565654343434343434343212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqrqrqrqrqopopopopnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9787878787878787865656565656565654343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqrqrqrqrqopopopopnmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUVUVUTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=<;<;<;<;<;<;<;:9:9:9:9787878787878787865656565656565654343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqrqrqrqrqopopopoonmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUVUVUTSTSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9787878787878787865656565656565654343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqrqrqrqrqoooopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijijijihghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUTSTSSSSSTSTSTSTSRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9787878787878787865656565656565654343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{|{|{|{zyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijijijihghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTSSSSSTSTRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9787877777878787865656565656565654343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababa`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWVUVUVUVUSTSTSTSTSTSTSTSTRQRQRQRQRQRQRQRQPOPOPOPOPONMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9778787877777778765656565656565654343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqrqrqrqrqpopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYZYZYXWXWXWXWXWXWVUVUVUVUSTSTSTSTSTSTSTSTRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGHGFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?@?@?@?>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9878787878787878765656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqrqrqrqpopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUSTSTSTSTSTSTSTSTRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?@?>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9878787878787878765656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqpopopooopopopoponmnmnmnmnmnmnmnmlklklklklklklklkjijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUSTSTSTSTSTSTSTSTRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9878787878787878765656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}~}~}~}|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqooopopoppoooooopnmnmnmnmnmnmnmnmlklklklklklklklkjijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUSTSTSTSSSTSTSTSTRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9878787878787878765656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}~}~}~}|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvuvutstststsrqrqrqrqopopopopopopopopnmnmnmnmnmnmnmnmlklklklklklkjijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUSSSSTSTSSTSSSSSSRQRQRQRQRQRQRQRQPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;:9:9:9:9878787878787777765656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvuvuvuvutststststsrqrqrqrqopopopopopopopopnmnmnmnmnmnmnmnmlklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcdcdcbabababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[ZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQRQPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;:9:9:9:9:9777778788787878765656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvutstststststststsrqrqrqrqopopopopopopopopnmnmnmnmnmnmnmnmlklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[ZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABABABABA@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:9787878786565656565656565434343434343434321212121212121210/0/0/0/0/0/0/0/.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvutstststststststsrqrqrqrqopopopopopopopopnmnmnmnmnmnmnmnmlklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABABA@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:9787878786565656565656565434343434343434321212121212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('('('('('&%&%&%&%&%&%&%&%~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvutstststststststsrqrqrqrqopopopopopopopopnmnmnmnmnmnmnmnmlklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:9787878786565656565656565434343434343434321212121212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%&%&%&%&%&%&%&%&%~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvutstststststststsrqrqrqrqoooooopoopopoooonmnmnmnmnmnmnmnmlklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSTSTSTSTSTSTSSSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:9787878786565656565656565434343434343434321212121212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%&%&%&%&%&%&%&%&%~}~}~}~}~}|{|{|{|{|{|{|{|{zyzyzyzyzyzyzyzyxwxwxwxwxwxwxwxwvuvuvuvutstststststststsrqrqrqrqpopopopooopopoponmnmnmnmnmnmlklklklklklkjijijijijijijijihghghghghghghghgfefefefefefefefedcdcdcdcbabababababababa`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[ZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWVUVUVUVUTSSSSSSTSSTSTSTSRQRQRQRQPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCBABABABA@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=<;<;<;<;:9:9:9:9:9:9:9:9787878786565656565656565434343434343434321212121212121210/0/0/0/.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)('('('('&%&%&%&%&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!                + + + + + + + + &%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!                + + + + + + + + &%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!                + + + + + + + + &%&%&%&%$#$#$#$#$#$#$#$#"!"!"!"!                + + + + + + + + &%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!                + + + + + + + &%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!                + + + + &%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!                + + + + &%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!                + + + + &%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!              + + + + &%&%&%&%$#$#$#$#"!"!"!"!"!"!"!"!            + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!            + + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!            + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!            + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!            + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!            + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!            + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!           + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!        + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!         + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!                + + + + + + + + $#$#$#$#$#$#$#$#"!"!"!"!                + + + + + + + + LLKKJJII))**++,,aa``__^^(())**++NNMMLLKK%%&&''((ttssrrqq UUVVWWXXDDCCBBAA!!""##$$xxwwvvuuQQRRSSTTHHGGFFEE ||{{zzyyMMNNOOPP33221100IIJJKKLL0//..--,::;;<<==__^^]]\\ jjkkllmm//..--,,66778899ccbbaa``ffgghhii3322110022334455ggffeeddbbccddeeccddeeffOOPPQQRRJJIIHHGG~~}}||{{KKLLMMNNNNMMLLKK{{||}}~~GGHHIIJJRRQQPPOOwwxxyyzz||{{zzyy}}~~onnmmllkddeeffgg5544332200112233iihhggff``aabbcc99887766,,--..//mmllkkjj \\]]^^__==<<;;::(())**++bbaa``__!!""ZYYXWVUTyyzz{{|| EEFFGGHHTTSSRRQQuuvvwwxx$$##""!!AABBCCDDXXWWVVUU HHGGFFEE--..//00]]\\[[ZZ,,--..//JJIIHHGG))**++,,ppoonnmm + + YYZZ[[\\@@??>>==%%&&''((ttssrrqq UUVVWWXXDDCCBBAA!!""##$$xxwwvvuuQQRRSSTT//..--,,MMNNOOPP,++**))(>>??@@AA[[ZZYYXX + + nnooppqq++**))((::;;<<==__^^]]\\ jjkkllmm//..--,,66778899ccbbaa``ffgghhiigghhiijjSSTTUUVVFFEEDDCC !!""zzyyxxwwOOPPQQRRJJIIHHGG~~}}||{{KKLLMMNNNNMMLLKK{{||}}~~xxwwvvuu + + kjjiihhghhiijjkk1100//..44556677eeddccbbddeeffgg5544332200112233iihhggff``aabbcc99887766,,--..//^^]]\\[[##$$%%&&SSRRQQPP}}~~~~}}IIJJKKLLPPOONNMMyyzz{{|| EEFFGGHHTTSSRRQQDDCCBBAA11223344YYSSRRQQ00112233FFEEDDCC--..//00llkkjjii]]^^__``<<;;::99))**++,,ppoonnmm + + YYZZ[[\\@@??>>==%%&&''((ttssrrqq UUVVWWXX++**))((QQRRSSYY(''&&%%$BBCCDDEEWWVVUUTTrrssttuu''&&%%$$>>??@@AA[[ZZYYXX + + nnooppqq++**))((::;;<<==__^^]]\\ jjkkllmmkkllmmnn~~}}||{{ WWXXYYZZBBAA@@??##$$%%&&vvuuttssSSTTUUVVFFEEDDCC !!""zzyyxxwwOOPPQQRRJJIIHHGGoonnmmll gffeeddc + + llmmnnoo--,,++**8899::;;aa``__^^hhiijjkk1100//..44556677eeddccbbddeeffgg5544332200112233ZZYYSSRR''(())**OONNMMLL ||{{zzyyMMNNOOPPLLKKJJII}}~~~~}}IIJJKKLLPPOONNMM@@??>>==55667788PPOONNMM44556677BBAA@@??11223344hhggffeeaabbccdd88776655--..//00llkkjjii]]^^__``<<;;::99))**++,,ppoonnmm + + YYZZ[[\\''&&%%$$ZZ[[\\]]$##""!! FFGGHHIISSRRQQPPvvwwxxyy##""!! BBCCDDEEWWVVUUTTrrssttuu''&&%%$$>>??@@AA[[ZZYYXX + + nnooppqq + +oouuvvwwzzyyxxww + + [[\\]]^^>>==<<;;''(())**rrqqppoo WWXXYYZZBBAA@@??##$$%%&&vvuuttssSSTTUUVVFFEEDDCC !!""kkjjiihhcbbaa``_ ppqqrrss))((''&&<<==>>??]]\\[[ZZ + + llmmnnoo--,,++**8899::;;aa``__^^hhiijjkk1100//..44556677QQPPOONN++,,--..KKJJIIHH!!""##$$xxwwvvuuQQRRSSTTHHGGFFEE ||{{zzyyMMNNOOPPLLKKJJII<<;;::9999::;;<>??@@>>==<;:955667788ddccbbaaeeffgghh4433221111223344hhggffeeaabbccdd88776655--..//00llkkjjii]]^^__``##""!!^^__``aaJJKKLLMMOONNMMLLzz{{||}}FFGGHHIISSRRQQPPvvwwxxyy##""!! BBCCDDEEWWVVUUTTrrssttuu~~ xxyyzz{{vvuutsrq__``aabb::998877++,,--..nnmmllkk + + [[\\]]^^>>==<<;;''(())**rrqqppoo WWXXYYZZBBAA@@??##$$%%&&ggffeedd_^^]]\\[ttuuvvww%%$$##""@@AABBCCYYXXWWVV ppqqrrss))((''&&<<==>>??]]\\[[ZZ + + llmmnnoo--,,++**8899::;;MMLLKKJJ//001122GGFFEEDD%%&&''((ttssrrqq UUVVWWXXDDCCBBAA!!""##$$xxwwvvuuQQRRSSTTHHGGFFEE 88776655==>>??@@HHGGFFEEAABBCCDD8776655499::;;<<``__^^]]iijjkkll00//..--55667788ddccbbaaeeffgghh4433221111223344hhggffeeaabbccddbbccddeeNNOOPPQQKKJJIIHH~~~~}}||JJKKLLMMOONNMMLLzz{{||}}FFGGHHIISSRRQQPPvvwwxxyy}}||{{zz||}}~~poonnmmlccddeeff66554433//001122jjiihhgg__``aabb::998877++,,--..nnmmllkk + + [[\\]]^^>>==<<;;''(())**ccbbaa``!![ZZYYXWVxxyyzz{{!! DDEEFFGGUUTTSSRRttuuvvww%%$$##""@@AABBCCYYXXWWVV ppqqrrss))((''&&<<==>>??IIHHGGFF33445566CCBBAA@@))**++,,ppoonnmm + + YYZZ[[\\@@??>>==%%&&''((ttssrrqq UUVVWWXXDDCCBBAA!!""##$$44332211AABBCCDDDDCCBBAAEEFFGGHH43322110==>>??@@\\[[ZZYY + + mmnnoopp,,++**))99::;;<<``__^^]]iijjkkll00//..--55667788ddccbbaaeeffgghhffgghhiiRRSSTTUUGGFFEEDD !!{{zzyyxxNNOOPPQQKKJJIIHH~~~~}}||JJKKLLMMOONNMMLLzz{{||}}yyxxwwvv + + lkkjjiihgghhiijj221100//33445566ffeeddccccddeeff66554433//001122jjiihhgg__``aabb::998877++,,--..__^^]]\\""##$$%%UTSSRRQQ||}}~~~~HHIIJJKKQQPPOONNxxyyzz{{!! DDEEFFGGUUTTSSRRttuuvvww%%$$##""@@AABBCCEEDDCCBB77==>>????>>==<;--..//00llkkjjii]]^^__``<<;;::99))**++,,ppoonnmm + + YYZZ[[\\@@??>>==%%&&''((00//..--EEFFGGHH@@??>>==IIJJKKLL0//..--,AABBCCDDXXWWVVUU qqrrsstt((''&&%%==>>??@@\\[[ZZYY + + mmnnoopp,,++**))99::;;<<``__^^]]iijjkklljjkkllmm~~}}||VVWWXXYYCCBBAA@@""##$$%%wwvvuuttRRSSTTUUGGFFEEDD !!{{zzyyxxNNOOPPQQKKJJIIHH~~uuoonnmm hggffeed + +kkllmmnn..--,,++778899::bbaa``__gghhiijj221100//33445566ffeeddccccddeeff66554433//001122[[ZZYYSS&&''(())PPOONNMM}}||{{zzLLMMNNOOMMLLKKJJ||}}~~~~HHIIJJKKQQPPOONNxxyyzz{{!! DDEEFFGGAA@@??>>@@AABBCC:987766511223344hhggffeeaabbccdd88776655--..//00llkkjjii]]^^__``<<;;::99))**++,,,,++**))IIJJKKLL77665544MMNNOOPP,++**))(EEFFGGHHTTSSRRQQuuvvwwxx$$##""!!AABBCCDDXXWWVVUU qqrrsstt((''&&%%==>>??@@\\[[ZZYY + + mmnnoopp nnoouuvv{{zzyyxx + +ZZ[[\\]]??>>==<<&&''(())ssrrqqpp VVWWXXYYCCBBAA@@""##$$%%wwvvuuttRRSSTTUUGGFFEEDD !!llkkjjiidccbbaa` ooppqqrr**))(('';;<<==>>^^]]\\[[ + +kkllmmnn..--,,++778899::bbaa``__gghhiijj221100//33445566RRQQPPOO**++,,--LLKKJJII !!""##yyxxwwvvPPQQRRSSIIHHGGFF}}||{{zzLLMMNNOOMMLLKKJJ||}}~~~~HHIIJJKK==776655DDEEFFGG5443322155667788ddccbbaaeeffgghh4433221111223344hhggffeeaabbccdd88776655--..//00((''&&%%MMNNOOPP33221100QQRRSSYY(''&&%%$IIJJKKLLPPOONNMMyyzz{{|| EEFFGGHHTTSSRRQQuuvvwwxx$$##""!!AABBCCDDXXWWVVUU qqrrsstt + + wwxxyyzzwwvvuuts ^^__``aa;;::9988**++,,--oonnmmll + + ZZ[[\\]]??>>==<<&&''(())ssrrqqpp VVWWXXYYCCBBAA@@""##$$%%hhggffee`__^^]]\ssttuuvv&&%%$$##??@@AABBZZYYXXWW ooppqqrr**))(('';;<<==>>^^]]\\[[ + +kkllmmnn..--,,++778899::NNMMLLKK..//0011HHGGFFEE$$%%&&''uuttssrrTTUUVVWWEEDDCCBB !!""##yyxxwwvvPPQQRRSSIIHHGGFF}}||{{zzLLMMNNOO44332211HHIIJJKK100//..-99::;;<<``__^^]]iijjkkll00//..--55667788ddccbbaaeeffgghh4433221111223344$$##""!!QQRRSSTT//..--,,ZZ[[\\]]$##""!! MMNNOOPPLLKKJJII}}~~~~}}IIJJKKLLPPOONNMMyyzz{{|| EEFFGGHHTTSSRRQQuuvvwwxx~~}}||{{{{||}}~~rqpoonnmbbccddee77665544..//0011kkjjiihh^^__``aa;;::9988**++,,--oonnmmll + + ZZ[[\\]]??>>==<<&&''(())ddccbbaa\[[ZZYYXwwxxyyzz""!! CCDDEEFFVVUUTTSSssttuuvv&&%%$$##??@@AABBZZYYXXWW ooppqqrr**))(('';;<<==>>JJIIHHGG22334455DDCCBBAA(())**++qqppoonn + +XXYYZZ[[AA@@??>>$$%%&&''uuttssrrTTUUVVWWEEDDCCBB !!""##yyxxwwvvPPQQRRSS00//..--LLMMNNOO-,,++**)==>>??@@\\[[ZZYY + + mmnnoopp,,++**))99::;;<<``__^^]]iijjkkll00//..--55667788 UUVVWWXX++**))((^^__``aaQQRRSSTTHHGGFFEE ||{{zzyyMMNNOOPPLLKKJJII}}~~~~}}IIJJKKLLPPOONNMMyyzz{{||zzyyxxww + +mllkkjjiffgghhii3322110022334455ggffeeddbbccddee77665544..//0011kkjjiihh^^__``aa;;::9988**++,,--``__^^]]!!""##$$WVUTSSRR{{||}}~~GGHHIIJJRRQQPPOOwwxxyyzz""!! CCDDEEFFVVUUTTSSssttuuvv&&%%$$##??@@AABBFFEEDDCC6677==>>@@??>>==,,--..//mmllkkjj \\]]^^__==<<;;::(())**++qqppoonn + +XXYYZZ[[AA@@??>>$$%%&&''uuttssrrTTUUVVWW,,++**))PPQQRRSS)((''&&%AABBCCDDXXWWVVUU qqrrsstt((''&&%%==>>??@@\\[[ZZYY + + mmnnoopp,,++**))99::;;<<~~}}YYZZ[[\\''&&%%$$bbccddeeUUVVWWXXDDCCBBAA!!""##$$xxwwvvuuQQRRSSTTHHGGFFEE ||{{zzyyMMNNOOPPLLKKJJII}}~~vvuuoonn ihhggffe jjkkllmm//..--,,66778899ccbbaa``ffgghhii3322110022334455ggffeeddbbccddee77665544..//0011\\[[ZZYY%%&&''((QQPPOONN~~}}||{{KKLLMMNNNNMMLLKK{{||}}~~GGHHIIJJRRQQPPOOwwxxyyzz""!! CCDDEEFFBBAA@@????@@AABB<;:9877600112233iihhggff``aabbcc99887766,,--..//mmllkkjj \\]]^^__==<<;;::(())**++qqppoonn + +XXYYZZ[[((''&&%%YYZZ[[\\%$$##""!EEFFGGHHTTSSRRQQuuvvwwxx$$##""!!AABBCCDDXXWWVVUU qqrrsstt((''&&%%==>>??@@||{{zzyy]]^^__``##""!!ffgghhiiYYZZ[[\\@@??>>==%%&&''((ttssrrqq UUVVWWXXDDCCBBAA!!""##$$xxwwvvuuQQRRSSTTHHGGFFEE mmllkkjjeddccbba + + nnooppqq++**))((::;;<<==__^^]]\\ jjkkllmm//..--,,66778899ccbbaa``ffgghhii3322110022334455SSRRQQPP))**++,,MMLLKKJJ !!""zzyyxxwwOOPPQQRRJJIIHHGG~~}}||{{KKLLMMNNNNMMLLKK{{||}}~~GGHHIIJJ>>==7766CCDDEEFF6554433244556677eeddccbbddeeffgg5544332200112233iihhggff``aabbcc99887766,,--..//mmllkkjj \\]]^^__$$##""!!]]^^__``! IIJJKKLLPPOONNMMyyzz{{|| EEFFGGHHTTSSRRQQuuvvwwxx$$##""!!AABBCCDDxxwwvvuuaabbccddjjkkllmm~~}}||]]^^__``<<;;::99))**++,,ppoonnmm + + YYZZ[[\\@@??>>==%%&&''((ttssrrqq UUVVWWXXDDCCBBAA!!""##$$iihhggffa``__^^]rrssttuu''&&%%$$>>??@@AA[[ZZYYXX + + nnooppqq++**))((::;;<<==__^^]]\\ jjkkllmm//..--,,66778899OONNMMLL--..//00IIHHGGFF##$$%%&&vvuuttssSSTTUUVVFFEEDDCC !!""zzyyxxwwOOPPQQRRJJIIHHGG~~}}||{{KKLLMMNN55443322GGHHIIJJ21100//.8899::;;aa``__^^hhiijjkk1100//..44556677eeddccbbddeeffgg5544332200112233iihhggff``aabbccaabbccddMMNNOOPPLLKKJJII}}~~~~}}IIJJKKLLPPOONNMMyyzz{{|| EEFFGGHHttssrrqq eeffgghhnnoouuvv{{zzyyxx + +aabbccdd88776655--..//00llkkjjii]]^^__``<<;;::99))**++,,ppoonnmm + + YYZZ[[\\@@??>>==%%&&''((eeddccbb]\\[[ZZYvvwwxxyy##""!! BBCCDDEEWWVVUUTTrrssttuu''&&%%$$>>??@@AA[[ZZYYXX + + nnooppqq++**))((::;;<<==KKJJIIHH11223344EEDDCCBB''(())**rrqqppoo WWXXYYZZBBAA@@??##$$%%&&vvuuttssSSTTUUVVFFEEDDCC !!""zzyyxxwwOOPPQQRR1100//..KKLLMMNN.--,,++*<<==>>??]]\\[[ZZ + + llmmnnoo--,,++**8899::;;aa``__^^hhiijjkk1100//..44556677eeddccbbddeeffggeeffgghhQQRRSSTTHHGGFFEE ||{{zzyyMMNNOOPPLLKKJJII}}~~~~}}IIJJKKLLppoonnmm + + iijjkkllwwxxyyzzwwvvuuts eeffgghh4433221111223344hhggffeeaabbccdd88776655--..//00llkkjjii]]^^__``<<;;::99))**++,,aa``__^^!!""##YXWVUTSSzz{{||}}FFGGHHIISSRRQQPPvvwwxxyy##""!! BBCCDDEEWWVVUUTTrrssttuu''&&%%$$>>??@@AAGGFFEEDD556677==AA@@??>>++,,--..nnmmllkk + + [[\\]]^^>>==<<;;''(())**rrqqppoo WWXXYYZZBBAA@@??##$$%%&&vvuuttssSSTTUUVV--,,++**OOPPQQRR*))((''&@@AABBCCYYXXWWVV ppqqrrss))((''&&<<==>>??]]\\[[ZZ + + llmmnnoo--,,++**8899::;;aa``__^^hhiijjkkiijjkkll~~}}UUVVWWXXDDCCBBAA!!""##$$xxwwvvuuQQRRSSTTHHGGFFEE ||{{zzyyMMNNOOPPllkkjjii + + mmnnoopp {{||}}~~rqpoonnmiijjkkll00//..--55667788ddccbbaaeeffgghh4433221111223344hhggffeeaabbccdd88776655--..//00]]\\[[ZZ$$%%&&''RRQQPPOO~~~~}}||JJKKLLMMOONNMMLLzz{{||}}FFGGHHIISSRRQQPPvvwwxxyy##""!! BBCCDDEECCBBAA@@>>??@@AA==<;:987//001122jjiihhgg__``aabb::998877++,,--..nnmmllkk + + [[\\]]^^>>==<<;;''(())**rrqqppoo WWXXYYZZ))((''&&SSYYZZ[[&%%$$##"DDEEFFGGUUTTSSRRttuuvvww%%$$##""@@AABBCCYYXXWWVV ppqqrrss))((''&&<<==>>??]]\\[[ZZ + + llmmnnoo mmnnoouu||{{zzyy YYZZ[[\\@@??>>==%%&&''((ttssrrqq UUVVWWXXDDCCBBAA!!""##$$xxwwvvuuQQRRSSTThhggffee qqrrsstt + + + +mllkkjji + + mmnnoopp,,++**))99::;;<<``__^^]]iijjkkll00//..--55667788ddccbbaaeeffgghh4433221111223344YYSSRRQQ(())**++NNMMLLKK !!{{zzyyxxNNOOPPQQKKJJIIHH~~~~}}||JJKKLLMMOONNMMLLzz{{||}}FFGGHHII??>>==77BBCCDDEE7665544333445566ffeeddccccddeeff66554433//001122jjiihhgg__``aabb::998877++,,--..nnmmllkk + + [[\\]]^^%%$$##""\\]]^^__"!! HHIIJJKKQQPPOONNxxyyzz{{!! DDEEFFGGUUTTSSRRttuuvvww%%$$##""@@AABBCCYYXXWWVV ppqqrrss + + vvwwxxyyxxwwvvuu + + ]]^^__``<<;;::99))**++,,ppoonnmm + + YYZZ[[\\@@??>>==%%&&''((ttssrrqq UUVVWWXXddccbbaauuvvwwxx~~}}||{{ ihhggffe qqrrsstt((''&&%%==>>??@@\\[[ZZYY + + mmnnoopp,,++**))99::;;<<``__^^]]iijjkkll00//..--55667788PPOONNMM,,--..//JJIIHHGG""##$$%%wwvvuuttRRSSTTUUGGFFEEDD !!{{zzyyxxNNOOPPQQKKJJIIHH~~~~}}||JJKKLLMM66554433FFGGHHII3221100/778899::bbaa``__gghhiijj221100//33445566ffeeddccccddeeff66554433//001122jjiihhgg__``aabb!!``aabbccLLMMNNOOMMLLKKJJ||}}~~~~HHIIJJKKQQPPOONNxxyyzz{{!! DDEEFFGGUUTTSSRRttuuvvww~~}}||zz{{||}}tsrqpoonaabbccdd88776655--..//00llkkjjii]]^^__``<<;;::99))**++,,ppoonnmm + + YYZZ[[\\qqrrsstt``__^^]]yyzz{{||zzyyxxwweddccbbauuvvwwxx$$##""!!AABBCCDDXXWWVVUU qqrrsstt((''&&%%==>>??@@\\[[ZZYY + + mmnnoopp,,++**))99::;;<>^^]]\\[[ + +kkllmmnn..--,,++778899::bbaa``__gghhiijj221100//33445566ffeeddccccddeeffddeeffggPPQQRRSSIIHHGGFF}}||{{zzLLMMNNOOMMLLKKJJ||}}~~~~HHIIJJKKQQPPOONNxxyyzz{{{{zzyyxx ~~nmmllkkjeeffgghh4433221111223344hhggffeeaabbccdd88776655--..//00llkkjjii]]^^__``uuvvwwxx\\[[ZZYY}}~~vvuuoonna``__^^]yyzz{{|| EEFFGGHHTTSSRRQQuuvvwwxx$$##""!!AABBCCDDXXWWVVUU qqrrsstt((''&&%%==>>??@@HHGGFFEE44556677BBAA@@??**++,,--oonnmmll + + ZZ[[\\]]??>>==<<&&''(())ssrrqqpp VVWWXXYYCCBBAA@@""##$$%%wwvvuuttRRSSTTUU..--,,++NNOOPPQQ+**))(('??@@AABBZZYYXXWW ooppqqrr**))(('';;<<==>>^^]]\\[[ + +kkllmmnn..--,,++778899::bbaa``__gghhiijjhhiijjkk~~TTUUVVWWEEDDCCBB !!""##yyxxwwvvPPQQRRSSIIHHGGFF}}||{{zzLLMMNNOOMMLLKKJJ||}}~~wwvvuuoo + + jiihhggfiijjkkll00//..--55667788ddccbbaaeeffgghh4433221111223344hhggffeeaabbccddyyzz{{||XXWWVVUU mmllkkjj]\\[[ZZY}}~~~~}}IIJJKKLLPPOONNMMyyzz{{|| EEFFGGHHTTSSRRQQuuvvwwxx$$##""!!AABBCCDDDDCCBBAA==>>??@@>>==<;:9..//0011kkjjiihh^^__``aa;;::9988**++,,--oonnmmll + + ZZ[[\\]]??>>==<<&&''(())ssrrqqpp VVWWXXYY**))((''RRSSYYZZ'&&%%$$#CCDDEEFFVVUUTTSSssttuuvv&&%%$$##??@@AABBZZYYXXWW ooppqqrr**))(('';;<<==>>^^]]\\[[ + +kkllmmnn llmmnnoo}}||{{zz XXYYZZ[[AA@@??>>$$%%&&''uuttssrrTTUUVVWWEEDDCCBB !!""##yyxxwwvvPPQQRRSSIIHHGGFFnnmmllkkfeeddccb + + mmnnoopp,,++**))99::;;<<``__^^]]iijjkkll00//..--55667788ddccbbaaeeffgghh}}~~TTSSRRQQ!!""##$$iihhggff!!""##YXWVUTSS ||{{zzyyMMNNOOPPLLKKJJII}}~~~~}}IIJJKKLLPPOONNMMyyzz{{|| EEFFGGHH@@??>>==AABBCCDD8776655422334455ggffeeddbbccddee77665544..//0011kkjjiihh^^__``aa;;::9988**++,,--oonnmmll + + ZZ[[\\]]&&%%$$##[[\\]]^^#""!! GGHHIIJJRRQQPPOOwwxxyyzz""!! CCDDEEFFVVUUTTSSssttuuvv&&%%$$##??@@AABBZZYYXXWW ooppqqrr + + uuvvwwxxyyxxwwvv + + \\]]^^__==<<;;::(())**++qqppoonn + +XXYYZZ[[AA@@??>>$$%%&&''uuttssrrTTUUVVWWEEDDCCBB !!""##jjiihhggbaa``__^ qqrrsstt((''&&%%==>>??@@\\[[ZZYY + + mmnnoopp,,++**))99::;;<<``__^^]]iijjkkllPPOONNMM%%&&''((eeddccbb$$%%&&''RRQQPPOO!!""##$$xxwwvvuuQQRRSSTTHHGGFFEE ||{{zzyyMMNNOOPPLLKKJJII}}~~~~}}IIJJKKLL77665544EEFFGGHH4332211066778899ccbbaa``ffgghhii3322110022334455ggffeeddbbccddee77665544..//0011kkjjiihh^^__``aa""!!__``aabbKKLLMMNNNNMMLLKK{{||}}~~GGHHIIJJRRQQPPOOwwxxyyzz""!! CCDDEEFFVVUUTTSSssttuuvv~~}}yyzz{{||uutsrqpo``aabbcc99887766,,--..//mmllkkjj \\]]^^__==<<;;::(())**++qqppoonn + +XXYYZZ[[AA@@??>>$$%%&&''ffeeddcc^]]\\[[Zuuvvwwxx$$##""!!AABBCCDDXXWWVVUU qqrrsstt((''&&%%==>>??@@\\[[ZZYY + + mmnnooppttssrrqq UUVVWWXX++**))((QQRRSSYY(''&&%%$BBCCDDEEWWVVUUTTrrssttuu''&&%%$$>>??@@AA[[ZZYYXX + + nnooppqq++**))((::;;<<==HHGGFFEEAABBCCDD33221100BBCCDDEEppoonnmm + + YYZZ[[\\''&&%%$$ZZ[[\\]]$##""!! FFGGHHIISSRRQQPPvvwwxxyy##""!! BBCCDDEEWWVVUUTTrrssttuu''&&%%$$>>??@@AADDCCBBAAEEFFGGHH//..--,,FFGGHHIIllkkjjii]]^^__``##""!!^^__``aaJJKKLLMMOONNMMLLzz{{||}}FFGGHHIISSRRQQPPvvwwxxyy##""!! BBCCDDEE@@??>>==IIJJKKLL++**))((JJKKLLMMhhggffeeaabbccddbbccddeeNNOOPPQQKKJJIIHH~~~~}}||JJKKLLMMOONNMMLLzz{{||}}FFGGHHII77665544MMNNOOPP''&&%%$$NNOOPPQQddccbbaaeeffgghhffgghhiiRRSSTTUUGGFFEEDD !!{{zzyyxxNNOOPPQQKKJJIIHH~~~~}}||JJKKLLMM33221100QQRRSSYY##""!! RRSSTTUU``__^^]]iijjkklljjkkllmm~~}}||VVWWXXYYCCBBAA@@""##$$%%wwvvuuttRRSSTTUUGGFFEEDD !!{{zzyyxxNNOOPPQQ//..--,,ZZ[[\\]]VVWWXXYY\\[[ZZYY + + mmnnoopp nnoouuvv{{zzyyxx + +ZZ[[\\]]??>>==<<&&''(())ssrrqqpp VVWWXXYYCCBBAA@@""##$$%%wwvvuuttRRSSTTUU++**))((^^__``aa~~}}||ZZ[[\\]]XXWWVVUU qqrrsstt + + wwxxyyzzwwvvuuts ^^__``aa;;::9988**++,,--oonnmmll + + ZZ[[\\]]??>>==<<&&''(())ssrrqqpp VVWWXXYY''&&%%$$bbccddee{{zzyyxx^^__``aaTTSSRRQQuuvvwwxx~~}}||{{{{||}}~~rqpoonnmbbccddee77665544..//0011kkjjiihh^^__``aa;;::9988**++,,--oonnmmll + + ZZ[[\\]]##""!!ffgghhiiwwvvuuttbbccddeePPOONNMMyyzz{{||zzyyxxww + +mllkkjjiffgghhii3322110022334455ggffeeddbbccddee77665544..//0011kkjjiihh^^__``aajjkkllmmssrrqqpp ffgghhiiLLKKJJII}}~~vvuuoonn ihhggffe jjkkllmm//..--,,66778899ccbbaa``ffgghhii3322110022334455ggffeeddbbccddeennoouuvvoonnmmll + + jjkkllmmHHGGFFEE mmllkkjjeddccbba + + nnooppqq++**))((::;;<<==__^^]]\\ jjkkllmm//..--,,66778899ccbbaa``ffgghhiiwwxxyyzzkkjjiihh + + nnooppqqDDCCBBAA!!""##$$iihhggffa``__^^]rrssttuu''&&%%$$>>??@@AA[[ZZYYXX + + nnooppqq++**))((::;;<<==__^^]]\\ jjkkllmm {{||}}~~ggffeeddrrssttuu@@??>>==%%&&''((eeddccbb]\\[[ZZYvvwwxxyy##""!! BBCCDDEEWWVVUUTTrrssttuu''&&%%$$>>??@@AA[[ZZYYXX + + nnooppqq + + + +ccbbaa``vvwwxxyy<<;;::99))**++,,aa``__^^!!""##YXWVUTSSzz{{||}}FFGGHHIISSRRQQPPvvwwxxyy##""!! BBCCDDEEWWVVUUTTrrssttuu~~}}||{{ __^^]]\\zz{{||}}88776655--..//00]]\\[[ZZ$$%%&&''RRQQPPOO~~~~}}||JJKKLLMMOONNMMLLzz{{||}}FFGGHHIISSRRQQPPvvwwxxyyzzyyxxww[[ZZYYXX~~4433221111223344YYSSRRQQ(())**++NNMMLLKK !!{{zzyyxxNNOOPPQQKKJJIIHH~~~~}}||JJKKLLMMOONNMMLLzz{{||}}vvuuoonnWWVVUUTT !!00//..--55667788PPOONNMM,,--..//JJIIHHGG""##$$%%wwvvuuttRRSSTTUUGGFFEEDD !!{{zzyyxxNNOOPPQQKKJJIIHH~~mmllkkjjSSRRQQPP""##$$%%,,++**))99::;;<>??@@HHGGFFEE44556677BBAA@@??**++,,--oonnmmll + + ZZ[[\\]]??>>==<<&&''(())ssrrqqpp VVWWXXYYCCBBAA@@""##$$%%eeddccbb$$%%&&''KKJJIIHH**++,,--$$##""!!AABBCCDDDDCCBBAA==>>??@@>>==<;:9..//0011kkjjiihh^^__``aa;;::9988**++,,--oonnmmll + + ZZ[[\\]]??>>==<<&&''(())aa``__^^(())**++GGFFEEDD..//0011 EEFFGGHH@@??>>==AABBCCDD8776655422334455ggffeeddbbccddee77665544..//0011kkjjiihh^^__``aa;;::9988**++,,--]]\\[[ZZ,,--..//CCBBAA@@22334455~~}}IIJJKKLL77665544EEFFGGHH4332211066778899ccbbaa``ffgghhii3322110022334455ggffeeddbbccddee77665544..//0011YYSSRRQQ00112233??>>==<<66778899||{{zzyyMMNNOOPP33221100IIJJKKLL0//..--,::;;<<==__^^]]\\ jjkkllmm//..--,,66778899ccbbaa``ffgghhii3322110022334455PPOONNMM44556677;;::9988::;;<<==xxwwvvuuQQRRSSTT//..--,,MMNNOOPP,++**))(>>??@@AA[[ZZYYXX + + nnooppqq++**))((::;;<<==__^^]]\\ jjkkllmm//..--,,66778899LLKKJJII==>>??@@77665544>>??@@AAZHAbے`JXQtArd|ZdQbnXvےbHAےbHArtAJlvpfH~fZHAbے`JXQtlJnXv`f~Hp˂rXQJ`ےbdQZ|drtA`vXnے`JXQr˂ptArd|ZdQbfpvnXv`bHAZdrtAltbvpfJXQrr˂pZdQbtlJtAXv`fHAZp˂rXQltbdQZ|~f`vXn`JXQrtlJrd|~HfpvnJ`ےbHAZpdrtAJtbnvpfHbے`XQr˂lJtArvnXnXv`HAZp˂rtAJltbdQpfH~f`vbے`JXQrlJtArdf~HfprXQJ`ےbZ|drtAJlXnvpfH~˂pZHAd|ZdQbtfpvrXQJ`bHAZtbdbnvfH~pZHAbے`JbtlJtArd`f~fpvrXQJ`tbdQZ|drf`vXnvpXQr˂pZHA|ZdQHfpvnXvےbHAZp˂tbdQvp`vf`vbJQr|ZdQbtlJnXv`f~Hp˂rXQJ`ےbdQZ|H~f`vXnے`JXQr˂ptArd|ZdQbfpvXQJ`ےے`JXQr˂p|ZdQbtlJ`f~Zp˂Zp˂tbdQH~f`vXnے`JXQr˂ptArdf~HfpvXQJ`ےbHAZdrtAJltvpfr˂pZHAb|ZdQbtlJnXv`f~Hp˂rdQZ|dQZ|H~fpZHAZHAblJtArd|~Hf˂rXQJ`ےdQZ|drtAJvXnvpfH˂pZtAd|ZdQbtpvnXv`fbHAZp˂rXQltbvpf~f`JXQHAbpZHAbd|Zv`ff~HrXQJtbdQZ|df`vXnvJXQr˂pZHAd|Z~HfpvnX`ےbHAZp˂rtAJltbdQpfH~fZHAbے`dQbtlJtArnXv`p˂rp˂rQZ|dpfHf`vXے`JXQr˂JtArd|ZdQHfpvnrXQJےbHA|drtAJlnvpfH~pZHAbے`JXQbtlnXv`f~Zp˂rXQJ`Z|dXnvXnv˂pZtlJtArdf~HfpvXQJ`ےbHAZdrtA`vXnvpfr˂pZHAb|ZdQbtlJnXv`bHAZr˂pZHAbtlJtArdHXv`rXQJ`bHAZZ|d`vXnvpfr˂pZHAے|ZdQbfpvnXv`bHAZp˂rJltbdQZ|H~fZHAbے`JXQtlJtArdf~HfpvXQJ`ےdrtAJdrtAJ`vXHbے``JXQrd|ZdQbtpvnJ`ےbHAZpdrtAJltbvpfH~f`HAbےZdQbtlJtAXv`f~Hf˂rXQJ`ےdQZ|Hf`vXnے`Jے`JdQbt~Hfpfpv`ےbZ|drtAJlXnvpfH~˂pZHAbے`dQbtvnXv`fHAZp˂rXQJtbdQZ|df`vbے`JXQrlJtArd|ZpvnXQJ`ےXQJ`ےrtAJlf`vXnvpXQr˂pZHAb|ZdQbtlnXv`ےHAZp˂tAJltbdQZfH~f`vXے`JrbtJtArd`f~HfpvrXQJ`ےbHArtAdQZpfH~pfH~HAbےtArd|ZdQbfpvnXv`bHAZdrtAJltvpfH~fZHAbے`JXQtlJtArdf~Hp˂rZHAbے`JXQtArd|ZdQbf~HےbHAdrtArtAJlvpfH~fZHAb`JXQrtlJnXv`f~Hp˂rXQJ`ےbdQZ|dtAJ`vXnے`JXQr˂ptArd|ZdQbfpvnXv`bHAZltbltb~f`JXQrZr˂pZZdQbtlJtAXv`fbHAZp˂rXQltbdQZ|~f`vXn`JXQrlJtArd|~HfpvnJ`ےbHAZpdrtAJvXnvpfHXQr˂XQr˂l|ZdQvnXnXv`HAZp˂rtAJltbdQpfH~f`vbے`JXQrlJtArv`f~HfprXQJ`ےbZ|drtAJlXnvJXQr˂pZHAd|ZdQbtXv`fbHAZbHAXQtbdnvpfH~pZHAbے`JbtlJtArd`f~Zp˂rXQJ`tbdQZ|drf`vXnvpXQr˂lJtAd|ZdQHfpvnXvےbHAZp˂|drf`vf`v`JXQr|ZdQbtlJnXv`f~Hp˂rJltbdQZ|H~f`vXnے`JXQr˂ptArdf~HfpvXQJ`ےے`JXQr˂p|ZdQbtlJfpvXQJ`ےJbdQtbQZH~f`vXnے`JXQbtltArdf~HfpvXQJ`ےbHAZdrtAltbvpfr˂pZHAb|ZdQbtlJnXv`fHfp˂rdQZ|dQZ|lvXnHAbےAb`JlJtArdf~Hf˂rXQJ`ےdQZ|drtAJvXnvpfH˂pZrd|ZdQbtpvnXv`fbHAZp˂rXQltbvpfH~f`pZHAbp`JXQbtlv`f~ffpvrXQJtbdQZ|df`vXnvJXQr˂pZHAd|Z~HfpvnX`ےbHAZp˂rtAJltbdQpfH~˂pZHAbے`dQbtlJtAr~Hfp˂rJ`ےQZ|dfH~f`vXے`JXQr˂JtArd|ZdQHfpvrXQJ`ےbHA|drtAJlnvpfH~pZHAb|ZdQbtlnXv`f~Zp˂rXQJ`tAJlXnvXH~˂pZtlJtArdf~HfpvXQJ`ےbdQZ|drtA`vXnvpfr˂pZHAb|ZdQbfpvnXv`bHAZr˂pZHAbtlJtArdnXv`bHAZZ|ddrtA`vXnvpfr˂pJtAd|ZdQbfpvnXv`bHAZp˂rJltnvpH~fZHAbے`JXQtlJtArdf~HpvnXQJ`ےdrtAJtbdQvpfH`JXQrXQr˂rd|~HfpvnJ`ےbHAZpdrtAJltbvpfH~fZHAbےZdQbtlJtAXv`f~Hf˂rXQJ`ےdQZ|~f`vXnے`JrbtJtArdfpv々nrXQ`ےbZ|drtAJlXnvpfH~˂pZHAے`JdQbtvnXv`fHAZp˂rXQJtbdQZ|df`vbے`JXQrlJtArd|ZpvnXQJ`pbHAZprtAJf`vXnvpXQr˂pZHAb|ZdQbtlnXvےbHAZp˂tAJltbdQZfH~f`vXے`JbtlJtArd`f~HfpvrXQJ`ےbHAtbdQZpfH~fZHAbHAbےtArd|ZdQbfpvnXv`bHAZdrtAJltvpfH~fZHAbے`JXQtlJnXv`f~Hp˂rZHAbے`JXQtArd|ZdQbf~Hp˂rrtAJlJltvpfH~fZHAb|ZdQbtlJnXv`f~Hp˂rXQJ`ےbdQZ|fHf`vXnے`JXQr˂ptArd|ZdQbfpvrXQJ`bHAZltdZ|d~f`˂pZpZHAbZdQbtpvnXv`fbHAZp˂rXQltbdQZ|~f`HAbے`JXQrlJtArd|~HfpvnJ`ےbHAZdrtAJvXnvpfHXQr˂l|ZdQ|ZdQnXv`J`ےHAZp˂rtAJltbdQpfH~f`vbے`XQrbtlJtArv`f~HfprXQJ`ےbZ|dtAJlXnvJXQr˂pZHAd|ZdQbtXv`f˂rXQ˂rXQbdQZ|nvpfH~pZHAbے`JbtlJtArd`f~Zp˂rXQJ`tbdQZ|drf`vXnvpXQr˂JtArd|ZdQHfpvnXvےbHAZp˂|drvpJQr`JXQr|ZdQbtlJnXv`fHfp˂rJltbdQZ|H~f`vXnے`JXQr˂ptArdf~HfpvXQJ`ےے`JXQr˂p|ZdQbtlJfpvXQJ`ےtbdQbdQZ|H~f`vXnے`JXQtlJtArdf~HfpvXQJ`ےbHAZdrtA`vXnvpfr˂pZHAb|ZdQbtlJnXv`ےHAZp˂rrtAJlrtAJlvXnHAbےے`JlJtAXv`f~Hf˂rXQJ`ےdQZ|drtAJvXn`JXQr˂pZrd|ZdQbtpvnXv`fbHAZpdrtAJltbvpfH~f`p`JXQbtlbtlf~HHAZp˂rXQJtbdQZ|df`vXnvJXQrlJtAd|Z~HfpvnX`ےbHAZp˂rtAJltbnpfH~˂pZHAbے`dQbtlJtAr~HXJ`ےJ`ےdrtAfH~f`vXے`JXQr˂JtArdf~HfpvrXQJ`ےbHA|drtAJlnvpfH~pZHAb|ZdQbtlnXv`f~Zp˂rXQJ`tAJlfH~˂pZHZHAbtlJtArdf~HpvnXQJ`ےbdQZ|drtA`vXnvpfr˂pZHAے|ZdQbfpvnXv`bHAZr˂pZHAbtlJtArd~HfbHAZZ|ddrtA`vXnvpfr˂ptArd|ZdQbfpvnXv`bHAZp˂rJltvpfH~fZHAbے`JXQtlJtArdf~Hp˂rXQJ`ےtbdQtbdQvp`v`JXQrXQr˂rd|~HfpvnJ`ےbHAZpdrtAJltbvpfH˂pZHAbےZdQbtlJtAXv`f~Hf˂rXQltbdQZ|~f`vXnr˂pJtArdJtArdfpv〉rXQJ`ےbZ|drtAJlXnvpfH~˂pZHAd|ZdQbtvnXv`fHAZp˂rXQJtbdQvpfHf`vbے`JXQrlJtArd|Zv`fbHAZpbHAZpJltf`vXnvpXQr˂pZHAb|ZdQHfpvnXvےbHAZp˂tAJltbdQZfH~fZHAbے`JbtlJtArd`f~HfpvrXQJ`ےbHAtdrtAf`vXAbے`ے`JXtArd|ZdQbfpvrXQJ`bHAZdrtAJltvpfH~fZHAb`JXQrtlJnXv`f~Hp˂rZHAbے`JXQtArdf~Hpvnp˂rtAJlJltvpfH~fZHAb|ZdQbtlJnXv`f~Hp˂rXQJ`ےbdQZ|H~f`vXnے`JXQr˂ptArd|ZdQbfpvXQJ`ےbHAZZ|dZ|lXnv˂pZApZA`ZdQbtpvnXv`fbHAZp˂rXQltbdQZ|~f`HAbے`JXQrlJtArd|~HfpvnJ`ےdQZ|drtAJvXnvpfHZHAb|ZdQtlJnXv``ےbHAZp˂rtAJltbdQpfH~f`vbے`dQbtlJtArv`f~HfprXQJ`ےbZ|df`vXnvJXQr˂pZHAd|ZdQbt~Hfp˂rXQ˂bbdQZ|nvpfH~pZHAbے`JbtlnXv`f~Zp˂rXQJ`tbdQZ|drf`vXے`JXQr˂JtArd|ZdQHfpvnXvےbHAZdrJltnvpJXQrQr˂p|ZdQbtlJnXv`ےHAZp˂rJltbdQZ|H~f`vXnے`JXQbtltArdf~HfpvXQJ`ےے`JXQr˂p|ZdQbXv`fXv`fbHAZptbQZbdQZ|H~fZHAbے`JXQtlJtArdf~HfpvXQJ`ےbHAZdrtA`vXnvpfr˂pZHAb|ZdQbtlJnXv`bHAZp˂rrtAJltbnpfH~b`JXJXQrblJtAXv`f~Hf˂rXQJ`ےdQZ|dtAJlvXn`JXQr˂pZrd|ZdQbtpvnXv`fbHAZpdrtAJltbvpfH~f`ے`JXQbtltArdf~HfHAZp˂rXQJtbdQZ|df`vXnvJXQrlJtArd|Z~HfpvnX`ےbHAZp˂rtAJlXnvpfH~˂pZHAbے`dQbtlJtArvnXJ`ےHAZddrtAfH~f`vXے`JXQr˂JtArd`f~HfpvrXQJ`ےbHA|drtAJlnvpXQr˂pZHAb|ZdQbtlnXv`f~Zp˂tAdQZ|bdQZ|fH~˂pZHZHAbtlJtArdf~Hp˂rXQJ`ےbdQZ|drtA`vXnvpfr˂pJtAd|ZdQbfpvnXv`bHAZr˂pZHAbtlJ~Hf~Hf˂rXQdrtAJrAJl`vXnے`JXQr˂ptArd|ZdQbfpvnXv`bHAZdrtAJltvpfH~fZHAbے`JXQtlJtArdf~Hp˂rXQJ`ےtbdQvp`vf`vQr˂ptlJrd|~HfpvnJ`ےbHAZpdrtAJtbnvpfH˂pZHAbےZdQbtlJtAXv`fHfp˂rXQltbdQZ|~f`vXnr˂p|ZdQb|ZdQbvnXvrXQJ`ےbZ|drtAJlXnvpfH~˂pZHAd|ZdQbtvnXv`fHAZp˂rXQJtbdQpfH~f`vbے`JXQrlJtArd|Zv`fbHAXQJrtAJJltf`vXnvpXQr˂pZHA|ZdQHfpvnXvےbHAZp˂tAJltbdQZfH~pZHAbے`JbtlJtArd`f~HfpvrXQJ`drtAdrtAf`vXAbے`ے`JXtArd|ZdQbfpvXQJ`ےbHAZdrtAJltvpfH~fZHAb|ZdQbtlJnXv`f~Hp˂rZHAbے`JXQtArdpvnpvnJ`ےltbtbdQZvpfr˂pZHAb|ZdQbtlJnXv`f~Hp˂rJltbdQZ|H~f`vXnے`JXQr˂ptArdf~HfpvXQJ`ےbHAZZ|lXnvXnvZHAbtAd|ZdQbtpvnXv`fbHAZp˂rXQltbvpf~f`HAbے`JXQrlJtArd|~HfvnrJ`ےdQZ|drtAJvXnvpfHZHAbtlJtlJ`f~`ےbHAZp˂rtAJltbdQpfH~fZHAbے`dQbtlJtArv`f~HfprXQJ`ےbZ|df`vXnvJXQr˂pZHAd|ZdQbt~Hfp`ےbbdQZ|bQZdnvpfH~pZHAbے`JXQbtlnXv`f~Zp˂rXQJ`tbdQZ|dtAf`vXے`JXQr˂JtArd|ZdQHfpvnXvےbHAJltJltH~fJXQrQr˂p|ZdQbtlJnXv`bHAZp˂rJltbdQZ|H~f`vXnے`JXQtlJtArdf~HfpvXQJ`ےے`JXQr˂p|ZdQbXv`fXv`pbHAZpdQZ||drH~fZHAbے`JXQtlJtArdf~HfpvXQJ`ےbdQZ|drtA`vXnvpfr˂pZHAb|ZdQbfpvnXv`bHAZp˂rtbdQZpfH~pfH~ے`JXZdQbtlJtAXv`f~Hf˂rXQJ`ےdQZ|Hf`vXn`JXQr˂pZrd|ZdQbtpvnXQJ`ےbHAZpdrtAJltbvpfH~f`˂pZtArdtArdHfpvHAZp˂rXQJtbdQZ|df`vbے`JXQrlJtArd|Z~HfpvnX`ےbHAZdrtAJlXnvpfH~˂pZHAbے`dQbtlJtArv~HAZp˂drtArtAJlfH~f`vXے`JrbtJtArd`f~HfpvrXQJ`ےbHA|drJltnvpXQr˂pZHAb|ZdQbtlnXv`fHZp˂bdQZ|bdQZ|`vXnZHAbZAb`tlJtArdf~Hp˂rXQJ`ےbdQZ|drtA`vXnvpfr˂ptArd|ZdQbfpvnXv`bHAZr˂pZHAbtlJ~HfvnX˂rXQdrtAJtAJl`vXnے`JXQr˂ptArd|ZdQbfpvnXv`bHAZdrtAJltvpfH~fZHAbے`JXQtlJnXv`f~Hp˂rXQJ`ے|drf`vvpQr˂plJtArd|~HfpvnJ`ےbHAZpdrtAJvXnvpfH˂pZHAbےZdQbtlJtAXv`fHAZp˂rXQltbdQZ|~f`vXnHAbے|ZdQb|ZdQtAnXvrXQJ`ےbZ|drtAJlXnvJXQr˂pZHAd|ZdQbtvnXv`fHAZp˂rtAJltbdQpfH~f`vbے`JXQrlJtArdfHfpvrXQJJlttbdQf`vXnvpXQr˂lJtAd|ZdQHfpvnXvےbHAZp˂tAJlbnvfH~pZHAbے`JbtlJtArd`f~fpvrXQJ`drtAltbvpfے`JXQJXQrtArdf~HfpvXQJ`ےbHAZdrtAJltvpfH~fZHAb|ZdQbtlJnXv`f~Hp˂rZHAbے`JXQtArdpvv`fJ`p˂ltbtbdQZvpfr˂pZHAb|ZdQbtlJnXv`fHfp˂rJltbdQZ|H~f`vXnے`JXQr˂ptArdf~HfpvXQJ`ےbHAZtAJlXnvfH~ZHAbrd|ZdQbtpvnXv`fbHAZp˂rXQltbvpfH~f`HAbے`JXQrlJtArd|~Hf˂rXQJ`ےdQZ|drtAJvXnvpfH`JXQrtlJrdf`f~`ےbHAZp˂rtAJltbdQpfH~˂pZHAbے`dQbtlJtArv`f~HfprXQJtbdQZ|df`vXnvJXQr˂pZHAd|Z~HXvnXv`ےbbdQZ|Z|dnvpfH~pZHAb|ZdQbtlnXv`f~Zp˂rXQJ`tbdQZpfHf`vXے`JXQr˂JtArd|ZdQHfpvnrXQJےbHAJltdQZ|H~fr˂p˂pZHA|ZdQbfpvnXv`bHAZp˂rJltbdQZ|H~fZHAbے`JXQtlJtArdf~HfpvXQJ`ےے`JXQr˂p|ZdQb~Hfp~HfprXQJdQZ||dnH~fZHAbے`JXQtlJtArdf~HpvnXQJ`ےbdQZ|drtA`vXnvpfr˂pZHAے|ZdQbfpvnXv`bHAZp˂rtbdQZp`vXf`vXJQrZdQbtlJtAXv`f~Hf˂rXQJ`ےdQZ|~f`vXn`JXQr˂pZrd|ZdQbtpvnJ`ےbHAZpdrtAJltbvpfH~f`˂pZtArdt~HfHfpvHAZp˂rXQJtbdQZ|df`vbے`JXQrlJtArd|Z~HfpvnX`ےbZ|drtAJlXnvpfH~˂pZHAbے`dQbt`f~`f~HAZp˂drtArtAJlfH~f`vXے`JbtlJtArd`f~HfpvrXQJ`ےbHA|drf`vXnvpXQr˂pZHAb|ZdQbtlnXv`ےHAZp˂drtAJdrtAJ`vXnZHAbbے`tlJnXv`f~Hp˂rXQJ`ےbdQZ|drtA`vXnے`JXQr˂ptArd|ZdQbfpvnXv`bHAZr˂p|ZdQbtlJvnXvnX`ےbrAJltvff`vXnے`JXQr˂ptArd|ZdQbfpvrXQJ`bHAZdrtAJltvpfH~fZHAb`JXQrtlJnXv`f~Hp˂rXQJ`ے|drnvpnvp˂pZHAlJtArd|~HfpvnJ`ےbHAZdrtAJvXnvpfH˂pZHAbےZdQbtlJtAXv`fbHAZp˂rXQltbdQZ|~f`vXnHAbےlJtAvnXv`nvfrXQJ`ےbZ|dtAJlXnvJXQr˂pZHAd|ZdQbtvnXv`fHAZp˂rtAJltbdQpfH~f`vbے`JXQrlJtArHfpvHfpvbHAJltbtbdQf`vXnvpXQr˂JtArd|ZdQHfpvnXvےbHAZp˂tAJlnvpfH~pZHAbے`JbtlJtArd`f~Zp˂rXQJ`ltbltbvp`ے`JXQJXQrtArdf~HfpvXQJ`ےbHAZdrtAJltvpfr˂pZHAb|ZdQbtlJnXv`f~Hp˂rZHAbtlJtArdv`fv`p˂HAZp˂bdQZ|`vXnvpfr˂pZHAb|ZdQbtlJnXv`ےHAZp˂rJltbdQZ|H~f`vXnے`JXQbtltArdf~HfpvXQJ`ےbHAZtAdQZ|fH~fH~bے`rd|ZdQbtpvnXv`fbHAZpdrtAJltbvpfH~f`HAbے`JXQrlJtArdf~Hf˂rXQJ`ےdQZ|drtAJvXnvpfH`JXQHArd|f~H~Hfp`ےbHAZp˂rtAJltbnpfH~˂pZHAbے`dQbtlJtArv`fHfpvrXQJtbdQZ|df`vXnvJXQr˂pZHAd|ZnXvnXvZp˂QZdrZ|rAJnvpfH~pZHAb|ZdQbtlnXv`f~Zp˂rXQJ`tbdQZfH~f`vXے`JXQr˂JtArd|ZdQHfpvrXQJ`ےbHAdQZ|dQZ|lvXnr˂p˂pZA|ZdQbfpvnXv`bHAZp˂rJltbdQZ|H~fZHAbے`JXQtlJtArdf~HfpvXQJ`ےے`JXQtArd|ZdQb~HfprXQJrXQJdrtvpfH~fZHAbے`JXQtlJtArdf~Hp˂rXQJ`ےbdQZ|drtA`vXnvpfr˂pJtAd|ZdQbfpvnXv`bHAZp˂rdrtAf`vXf`vXJXQrZdQbtlJtAXv`f~Hf˂rXQltbdQZ|~f`vXn`JXQr˂pZrd|~HfpvnJ`ےbHAZpdrtAJltbvpfH~fZbے`ZdQbtfpvvnXHAZp˂rXQJtbdQvpfHf`vbے`JXQrlJtArd|Z~HfpnrXQ`ےbZ|drtAJlXnvpfH~˂pZHAے`JdQbt`f~`pvrXQJ`tAJlltbfH~fZHAbے`JbtlJtArd`f~HfpvrXQJ`ےbHA|drf`vXnvpXQr˂pZHAb|ZdQbtlnXvےbHAZp˂drtAJtbnvpfHZAb``JXQrtlJnXv`f~Hp˂rXQJ`ےbdQZ|dtAJ`vXnے`JXQr˂ptArd|ZdQbfpvnXv`bHAZbHAZr˂p|ZdQbtlJvnX`ےb`ےbAJltH~f`vXnے`JXQr˂ptArd|ZdQbfpvXQJ`ےbHAZdrtAJltvpfH~fZHAb|ZdQbtlJnXv`f~Hp˂rXQJ`ےJltnvpH~f˂pZHAlJtArd|~HfpvnJ`ےdQZ|drtAJvXnvpfH˂pZHAbےZdQbtpvnXv`fbHAZp˂rXQltbdQZ|~f`HAbJXQrlJtAnXv`v`frXQJ`ےbZ|df`vXnvJXQr˂pZHAd|ZdQbtvnXJ`ےHAZp˂rtAJltbdQpfH~f`vbے`XQrbtlJtArHfpvnXv`ےbHAtbdQZdQZ|f`vXے`JXQr˂JtArd|ZdQHfpvnXvےbHAZdrtAJlnvpfH~pZHAbے`JbtlJtArd`f~Zp˂rXQJ`ltbvp`~f`JXQrbtltArdf~HfpvXQJ`ےbHAZdrtAltbvpfr˂pZHAb|ZdQbtlJnXv`fHfp˂rp˂rZHAbtlJtArdv`pvHAZp˂HAXQJ`bdQZ|`vXnvpfr˂pZHAb|ZdQbtlJnXv`bHAZp˂rJltbdQZ|H~f`vXnے`JXQtlJtArdf~HfpvXQJ`ےbHAZbdQZ|fH~ZHAbbے`rd|ZdQbtpvnXv`fbHAZpdrtAJltbvpfH~f`HAbے`JXQrlJtAXv`f~Hf˂rXQJ`ےdQZ|drtAJvXn˂pZHA˂pZHArd|f~H~Hfp`ےbHAZp˂rtAJlXnvpfH~˂pZHAbے`dQbtlJtArv`fHAZp˂rXQJtbdQZ|df`vXnvJXQrlJtAd|Z~Hf~HZp˂|drdrtAJnvpXQr˂pZHAb|ZdQbtlnXv`f~Zp˂tAJltbdQZfH~f`vXے`JXQr˂JtArdf~HfpvrXQJ`ےbHAdQZ|lvXnvXnpZHAJtAd|ZdQbfpvnXv`bHAZp˂rJltnvpH~fZHAbے`JXQtlJtArdf~HpvnXQJ`ےXQJ`ےے`JXQtArd|ZdQbnXvrXQJےbHAdrtvpfH~fZHAbے`JXQtlJtArdf~Hp˂rXQJ`ےbdQZ|drtA`vXnvpfr˂ptArd|ZdQbfpvnXv`bHAZp˂rdrtAvpfJQrJXQrZdQbtlJtAXv`fHfp˂rXQltbdQZ|~f`vXn`JXQr˂pZrd|~HfpvnJ`ےbHAZpdrtAJltbvpfHbے`bے`ZdQtArfpvvnXHAZp˂rXQJtbdQpfH~f`vbے`JXQrlJtArd|Z~HfprXQJ`ےbZ|drtAJlXnvpfH~˂pZHAd|ZdQbtfpvfpvrXQJ`tAJlltbfH~pZHAbے`JbtlJtArd`f~HfpvrXQJ`tbdQZ|drf`vXnvpXQr˂pZHAb|ZdQHfpvnXvےbHAZp˂tbdQvpfHvpfHbے`|ZdQbtlJnXv`f~Hp˂rXQJ`ےbdQZ|fHf`vXnے`JXQr˂ptArd|ZdQbfpvrXQJ`bHAZbHAZr˂p|ZdQbtlJ`f~`p˂Zp˂AJbdQH~f`vXnے`JXQr˂ptArdf~HfpvXQJ`ےbHAZdrtAJltvpfH~fZHAb|ZdQbtlJnXv`f~Hp˂rXQJ`ےJltH~fpZHAZHAblJtArd|~HfvnrJ`ےdQZ|drtAJvXnvpfH˂pZHAے`ZdQbtpvnXv`fbHAZp˂rXQltbdQZ|~f`JXQrJXQrd|Znvfv`f~rXQJ`ےbZ|df`vXnvJXQr˂pZHAd|ZdQbtvnX`ےbHAZp˂rtAJltbdQpfH~f`vbے`dQbtlJtArnXv`nXv`p˂rtbdQZdQZ|f`vXے`JXQr˂JtArd|ZdQHfpvnXvےbHA|drtAJlnvpfH~pZHAbے`JbtlnXv`f~Zp˂rXQJ`Z|d~f`~vJXQrtlJtArdf~HfpvXQJ`ےbHAZdrtA`vXnvpfr˂pZHAb|ZdQbtlJnXv`ےHAZp˂rp˂rZHAbtlJtArdHfpvrXQJ`rXQJ`Z|d`vXnvpfr˂pZHAb|ZdQbfpvnXv`bHAZp˂rJltbdQZ|H~fZHAbے`JXQtlJtArdf~HfpvXQJ`ےbHAZdrtAJ`vXnbے``JXQrd|ZdQbtpvnXQJ`ےbHAZpdrtAJltbvpfH~f`HAbےJXQrblJtAXv`f~Hf˂rXQJ`ےdQZ|dtAJlvXn˂pZHA˂p`JdQbt~Hfpfpv`ےbHAZdrtAJlXnvpfH~˂pZHAbے`dQbtlJtArv`fHAZp˂rXQJtbdQZ|df`vXnvJXQrlJtArd|Zf~HpvnXQJ`ے|rAJlAJltnvpXQr˂pZHAb|ZdQbtlnXv`fHZp˂tAJltbdQZfH~f`vXے`JXQr˂JtArd`f~HfpvrXQJ`ےbHArtAJlvXnpfH~pZHAtArd|ZdQbfpvnXv`bHAZp˂rJltvpfH~fZHAbے`JXQtlJtArdf~Hp˂rXQJ`ےXQJ`ےbHAZdrtAJltvpfHAbےHAbے|ZdQtA~HfpfpvbHAZp˂rXQltbvpfH~f`HAbے`JXQrlJtArd|~Hf˂rXQJ`ےdQZ|drtAJvXnvpfHr˂pAHr󙐂˕H~ㅐf۝`vXnbAdZ|p˂rJltbdQZ|H~f`JXQr`JXQrrd|vnvfnXv`f˂rXQJ`ےdQZ|~f`vXn`JXQr˂pZrd|ZdQbtpvnJ`ےbHAZpdrtAJltbvpfH~f`ZHAb`ZQXb`vXnvˍpfdrQtXQJ`ےbdQZ|dtAJ`vXn˂pZ˂p`ZdQbt~Hf~fpvJ`ےbHAZdrtAJvXnvpfH˂pZHAbےZdQbtlJtAXv`fbHAZp˂rXQltbdQZ|~f`vXnے`JXQۑpJvˍpfH~ㅐfJltbHAZdrtAltbvpfHAbےJXQrlJtApvnnXvbHAZpdrtAJltbvpfH~f`HAbے`JXQrlJtArdf~Hf˂rXQJ`ےdQZ|drtAJvXnvpfHHAbےAHr󙐂˕H~ㅐf۝`vXnbAdZ|p˂rJltnvpH~f`JXQHA˂pZHArd|Xv`f`f~˂rXQltbdQZ|~f`vXn`JXQr˂pZrd|~HfpvnJ`ےbHAZpdrtAJltbvpfH~fr`JXQr`ZQXAH`vXnvˍpfdrQtXQJ`ےbdQZ|fHf`vXnbے`bے`ZdQbt~HfHfpvJ`ےdQZ|drtAJvXnvpfH˂pZHAbےZdQbtpvnXv`fbHAZp˂rXQltbdQZ|~f`˂pZ˂pZr󙐂ˁ`vˍpfH~ㅐfJltbHAZdrtA`vXnvpfJXQrJXQrl|ZpvnnXvbHAZpdrtAJltbvpfH~f`HAbے`JXQrlJtAXv`f~Hf˂rXQJ`ےdQZ|drtAJvXnHAbےHAbےZQXb㉀H~ㅐf۝`vXnbAdZ|p˂rJltvpfH~f˂pZHA˂p`JdQbtXv`f`ffp˂rXQltbdQZ|~f`vXn`JXQr˂pZrd|~HfpvnJ`ےbHAZpdrtAJltbvpfH`JXQr`JXQrۑpJAH`vXnvˍpfdrQtXQJ`ےbdQZ|H~f`vXnbے`XQrbtlJtAr~fpvvnrJ`ےdQZ|drtAJvXnvpfH˂pZHAے`ZdQbtpvnXv`fbHAZp˂rXQltbdQZ|~f`˂pZ˂p`r󙐂ˁ`vˍpfH~ㅐfJltbHAZdrtA`vXnvpfJXQrl|Zd|ZnXv`XQJ`ےbHAZpdrtAJltbvpfH~f`HAbےJXQrblJtAXv`f~Hf˂rXQJ`ےdQZ|dtAJlvXnHAbےJXQrZQXb㉀H~ㅐf۝`vXnbAdZ|drtAJltvpfH~f˂p`JdQbtdQbt璍f~HHAZp˂rXQltbdQZ|~f`vXn`JXQrtlJrd|~HfpvnJ`ےbHAZpdrtAJtbnvpfH`JXQHA˂pZHAۑp`Z`vXnvˍp|drQtJltbdQZ|H~f`vXnXQr˂lJtArlJtArfpv˂rXQJ`ےdQZ|drtAJvXnvpfH˂pZtAd|ZdQbtpvnXv`fbHAZp˂rXQltbvpf~f`bے`bے`QXb㉀ەvˍpfdrQtJltbdQZ|drtA`vXnvpfpZHAbd|ZdtlnXv`J`ےbHAZpdrtAJltbvpfH~f`HAbےZdQbtlJtAXv`f~Hf˂rXQJ`ےdQZ|Hf`vXnJXQrJXQrpJAHrH~ㅐfJltbAdZ|drtAJltvpfH~fے`JdQbtJtArdf~HbHAZp˂rXQltbdQZ|~f`vXn`JXQrlJtArd|~HfpvnJ`ےbHAZpdrtAJvXnvpfH˂pZHA˂p`Zˁ`Z`vXnbAdZ|drQtJltbdQZ|H~f`vXnXQr˂l|ZdQ|ZdQfvnX˂rXQJ`ےdQZ|drtAJvXnvpfH˂pZrd|ZdQbtpvnXv`fbHAZp˂rXQltbvpfH~f`bے`QXb㉀QXb㉀ەvˍpfdrQtJltbdQZ|drtA`vXnvpfpZHAbbtlbtlv`fJ`ےbHAZpdrtAJltbvpfH~fZHAbےZdQbtlJtAXv`f~Hf˂rXQJ`ےdQZ|~f`vXnJXQrpJAHrpJAHrH~ㅐfJltbAdZ|drtAJltvpfH~f˂pJtArdJtArd~HfpbHAZp˂rXQltbdQZ|~f`HAbے`JXQrlJtArd|~HfpvnJ`ےbHAZdrtAJvXnvpfH˂p`Jˁ`Zۑp`vXnbAdZ|drQtJltbdQZ|H~f`vXnZHAb|ZdQ|ZdQvnX˂rXQJ`ےdQZ|drtAJvXn`JXQr˂pZrd|ZdQbtpvnXv`fbHAZpdrtAJltbvpfH~f`XQr˂QXb㉀JAHr󙐕vˍpfdrQtJltbdQZ|drtA`vXnvpfے`JXQbtltArdv`fJ`ےbHAZpdrtAJltbvpfH˂pZHAbےZdQbtlJtAXv`f~Hf˂rXQltbdQZ|~f`vXnpZHAbp`ZQXˁ`ZQXH~ㅐfJltbAdZ|drtAJltvpfH~fr˂pJtArdf~H~HfpbHAZp˂rXQltbdQZ|~f`HAbے`JXQrlJtArd|~HfpvnJ`ےdQZ|drtAJvXnvpfHے`Jb㉀ۑpb㉀ۑp`vXnbAdZ|drQtJltbdQZ|H~f`vXnZHAbtlJfvnXvnv˂rXQJ`ےdQZ|dtAJlvXn`JXQr˂pZrd|ZdQbtpvnXv`fbHAZpdrtAJltbvpfH~f`XQr˂JAHrJAHr󙐕vˍpfdrQtJltbdQZ|drtA`vXnvpfے`JXQtArdv`ff~HJ`ےbHAZpdrtAJtbnvpfH˂pZHAbےZdQbtlJtAXv`fHfp˂rXQltbdQZ|~f`vXnpZHAbˁ`ZQXˁ`pfH~ㅐfJltbAdZ|drtAJltvpfH~fHAbے|ZdQb~HfpfpvbHAZp˂rXQltbvpf~f`HAbے`JXQrlJtArd|~HfvnrJ`ےdQZ|drtAJvXnvpfH˂pb㉀ۑpH~ㅐf۝`vXnbAdZ|drQtJltbdQZ|H~fZHAb`JXQrtlJvnXnXv`˂rXQJ`ےdQZ|Hf`vXn`JXQr˂pZrd|ZdQbtpvnXQJ`ےbHAZpdrtAJltbvpfH~f`ZHAbJAHr󙐝`vXnvˍpfdrQtJltbdQZ|drtA`vXn˂pZ˂pZtArdv`ff~HJ`ےbHAZpdrtAJvXnvpfH˂pZHAbےZdQbtlJtAXv`fHAZp˂rXQltbdQZ|~f`vXnے`JXQۑpJvˍpfH~ㅐfJltbAdZ| \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv40_2.dat b/vendor/endroid/qr-code/assets/data/qrv40_2.dat new file mode 100644 index 000000000..5a0e72381 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv40_2.dat @@ -0,0 +1,353 @@ +~}~}~}~}|{|{|{|{~}~}~}~}|{|{|{|{~}~}~}~}|{|{|{|{~}~}~}~}|{|{|{zy~}~}~}~}zyzyzyzy~}~}~}~}zyzyzyzy~}~}~}~}zyzyzyzy~}~}~}~}zyzyzyzy~}~}~}~}zyzyzyzy~}~}~}~}zyzyzyzy~}~}~}~}zyzyzyzy~}~}~}~}zyzyzyzy~}~}~}~}zyzyzyzy~}~}~}~}zyzyzyzy~}~}~}~}zyzyzyzy~}~}~}~}zyzyzyzy~}~}~}~}zyzyzyzy~}~}~}~}zyzyzyzy~}~}~}~}zyzyzyzy~}~}~}~}zyzyzyzy~}~}~}~}zyzyzyzyxwxwxwxw~}~}~}~}zyzyzyzyxwxwxwxw~}~}~}~}zyzyzyzyxwxwxwxw~}~}~}~}zyzyzyzyxwxwxwxw~}~}~}~}zyzyzyzyxwxwxwxw~}~}~}~}zyzyzyzyxwxwxwxw~}~}~}~}zyzyzyzyxwxwxwxw~}~}~}~}zyzyzyzyxwxwxwxw~}~}~}~}zyzyzyzyxwxwxwxw~}~}~}~}zyzyzyzyxwxwxwxw~}~}~}~}zyzyzyzyxwxwxwvu~}~}~}~}zyzyzyzyvuvuvuvu~}~}~}~}zyzyzyzyvuvuvuvu~}~}~}~}zyzyzyzyvuvuvuvu~}~}~}~}zyzyzyzyvuvuvuvu~}~}~}~}zyzyzyzyvuvuvuvu~}~}~}~}zyzyzyzyvuvuvuvu~}~}~}~}zyzyzyzyvuvuvuvu~}~}~}~}zyzyzyzyvuvuvuvu~}~}~}~}zyzyzyzyvuvuvuvu~}~}~}|{zyzyzyzyvuvuvuvu|{|{|{|{zyzyzyzyvuvuvuvu|{|{|{|{zyzyzyzyvuvuvuvu|{|{|{|{zyzyzyzyvuvuvuvu|{|{|{|{zyzyzyzyvuvuvuvu|{|{|{|{zyzyzyzyvuvuvuvu|{|{|{|{zyzyzyzyvuvuvuvu|{|{|{|{zyzyzyxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuvu|{|{|{|{xwxwxwxwvuvuvuts|{|{|{|{xwxwxwxwtstststs|{|{|{|{xwxwxwxwtstststs~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{|{xwxwxwxwtstststs~}~}~}~}|{|{|{|{xwxwxwxwtstststststststsopopopoplklklklkhghghghgfefedcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;65656565434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + tstststsopopopoplklklklkhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;65656565434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + tstststsopopopoplklklklkhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;65656565434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + tstststsopopopoolklklklkhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;:965656565434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + tstststsoooopopolklklklkhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?:9:9:9:965656565434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + tstststspopopopolklklklkhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + tstststspopopopolklklklkhghghghgdcdcdcdcbabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + tstststspopopopolklklklkhghghghgdcdcdcdcbaba`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + tstststspopopopolklklklkhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + tstststspopopopolklklklkhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#       + + + + tstststspooooooplklklklkhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#     + + + + tstststsopopopoplklklklkhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYVUVUTSTSRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+('('('('$#$#$#$#     + + + + tstststsopopopoplklklklkhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYTSTSSSSSRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#     + + + + tstststsopopopoplklklklkhghghghgdcdcdcdc`_`_`_`_^]^]^]^]ZYZYZYZYSTSTSTSTRQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#     + + + + tstststsopopopoplklklklkhghghghgdcdcdcdc`_`_`_`_^]^]\[\[ZYZYZYZYSTSTSTSTRQPOPOPONMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#     + + + + tstststsopopopoplklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYSTSTSTSTPOPOPOPONMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#     + + + + tstststsopopoooolklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYSTSTSTSTPOPOPOPONMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#     + + + tstststsoopopopolklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYSTSTSTSTPOPOPOPONMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#     tstststspopopopolklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYSTSTSTSSPOPOPOPONMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#     tstststspopopopolklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYSSSSTSTSPOPOPOPONMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#     tstststspopopopolklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYZYZYTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#     tstststspopopopolklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[ZYZYXWXWTSTSTSTSPOPOPOPONMLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#     tstststsoooopopolklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#     tstststspoponmnmlklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#     tstststsnmnmnmnmlklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#     tstststsnmnmnmnmlklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSSSSSSTPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#     tstststsnmnmnmnmlklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWSTSTSTSTPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     tstststsnmnmnmnmlklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWSTSTSTSTPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     tstststsnmnmnmnmlklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWSTSTSTSTPOPOPOPOLKLKLKLKJIHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     tsrqrqrqnmnmnmnmlklklklkhghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWSTSTSTSTPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     rqrqrqrqnmnmnmnmlklkjijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWSTSTSTSTPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#     rqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWSTSTSSSSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#   rqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWSSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$# rqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! rqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! rqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGFEDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! rqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! rqrqrqrqnmnmnmnmjijijijihghgfefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! rqrqrqrqnmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWSSSSSTSTPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:96565656521212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! rqrqrqrqnmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWSTSTSTSTPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:98787876565656521212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! rqrqrqrqnmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWSTSTSTSTPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=877777786565656521212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! rqrqrqrqnmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWSTSTSTSTPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=787878786565656521212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! rqrqrqrqnmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWSTSTSTSTPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDCBA@?@?@?>=>=>=>=787878784343434321212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! rqrqrqrqnmnmnmnmjijijijifefefefedcdcdcdc`_`_`_`_\[\[\[\[XWXWXWXWSTSTSTSTPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=787878784343434321212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! rqrqrqrqnmnmnmnmjijijijifefefefedcdcbaba`_`_`_`_\[\[\[\[XWXWXWXWSTSSSSSSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=787878784343434321212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! rqrqrqrqnmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=787878784343434321212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! rqrqrqrqnmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=787877774343434321212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"! rqrqrqrqnmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=778787874343434321212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!    rqrqrqrqnmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=878787874343434321212121.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!    rqrqrqrqnmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWTSTSTSSSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?>=<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!    rqrqrqrqnmnmnmnmjijijijifefefefebabababa`_`_`_`_\[\[\[\[XWXWXWXWSSTSTSTSPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!    rqrqrqrqnmnmnmnmjijijijifefefefebabababa`_`_^]^]\[\[\[\[XWXWXWXWTSRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!    rqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWRQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!    rqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWRQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;77777878434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!    + rqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWRQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;78787878434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!    + + + + rqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWRQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;78787878434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%"!"!"!"!    + + + + rqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[\[\[XWXWXWXWRQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;78787878434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!    + + + + rqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[\[\[VUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;78787878434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!    + + + + rqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]\[\[ZYZYVUVUVUVURQRQRQRQPONMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;78787878434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!    + + + + rqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;78777777434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!    + + + + rqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!    + + + + rqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!    + + + + rqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!    + + + + rqrqrqrqnmnmnmnmjijijijifefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + rqrqrqponmnmnmnmjijijijifefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + popopooonmnmnmnmjijijijifefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;87878777434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + ooopopopnmnmnmnmjijijijifefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;77787878434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + opopopopnmnmlklkjijijijifefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;78787878434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + opopopoplklklklkjijijijifefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;78787878434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + opopopoplklklklkjijijijifefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;78787878434343430/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!    + + + + opopopoplklklklkjijijijifefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;78787878434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + opopopoplklklklkjijijijifefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?<;<;<;<;78787878434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + oooooopolklklklkjijijijifefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIHGFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;77777787434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + popopopolklklklkjijijijifefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + popopopolklklklkjijihghgfefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + popopopolklklklkhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + popopopolklklklkhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#"!"!"!"!    + + + + popopopolklklklkhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87877777434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + popooooolklklklkhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;87878787434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + opopopoplklklklkhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEDCBABABA@?@?@?@?<;<;<;<;65656565434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + opopopoplklklklkhghghghgfefefefebabababa^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;65656565434343430/0/0/0/,+,+,+,+('('('('$#$#$#$#        + + + + }}~~aabbccddEEFFGGHH^^__``aabbccddeeFFGGHHII**++,,-- eeffgghhIIJJKKLLbbccddeeffgghhiiJJKKLLMM..//0011 + + ~~}}||iijjkkllMMNNOOPPffgghhiijjkkllmmNNOOPPQQ22334455{{zzyyxxmmnnooppQQRRSSTTjjkkllmmnnooppqqRRSSTTUU66778899wwvvuuts~~}}qqrrssttUUVVWWXXnnoouuvvrrssttuuVVWWXXYY::;;<<== !!rqpoonnm||{{zzyyuuvvwwxxYYZZ[[\\wwxxyyzzvvwwxxyyZZ[[\\]]>>??@@AA""##$$%% mllkkjjixxwwvvuuyyzz{{||]]^^__``{{||}}~~zz{{||}}^^__``aaBBCCDDEE&&''(()) + + ihhggffettssrrqq}}~~aabbccdd~~bbccddeeFFGGHHII**++,,--eddccbbappoonnmmeeffgghhffgghhiiJJKKLLMM..//0011a``__^^]llkkjjiiiijjkklljjkkllmmNNOOPPQQ22334455]\\[[ZZYhhggffeemmnnooppnnooppqqRRSSTTUU66778899YXWVUTSSddccbbaa~~}}qqrrssttrrssttuuVVWWXXYY::;;<<== !!~~}}RRQQPPOO``__^^]]||{{zzyyuuvvwwxxvvwwxxyyZZ[[\\]]>>??@@AA""##$$%%||{{zzyy~~}}||{{NNMMLLKK\\[[ZZYYxxwwvvuuyyzz{{||zz{{||}}^^__``aaBBCCDDEE&&''(())xxwwvvuuzzyyxxwwJJIIHHGGXXWWVVUUttssrrqq}}~~~~bbccddeeFFGGHHII**++,,--ttssrrqqvvuuoonnFFEEDDCCTTSSRRQQppoonnmmffgghhiiJJKKLLMM..//0011ppoonnmmmmllkkjjBBAA@@??PPOONNMMllkkjjiijjkkllmmNNOOPPQQ22334455llkkjjiiiihhggff>>==<;:9LLKKJJIIhhggffeennooppqqRRSSTTUU66778899hhggffeeeeddccbb87766554HHGGFFEEddccbbaa~~}}rrssttuuVVWWXXYY::;;<<==ddccbbaaaa``__^^43322110DDCCBBAA``__^^]]||{{zzyyvvwwxxyyZZ[[\\]]>>??@@AA``__^^]]]]\\[[ZZ0//..--,@@??>>==\\[[ZZYYxxwwvvuuzz{{||}}^^__``aaBBCCDDEE++**))((\\[[ZZYYYYSSRRQQ,++**))(<<;;::99XXWWVVUUttssrrqq~~bbccddeeFFGGHHII''&&%%$$XXWWVVUUPPOONNMM(''&&%%$88776655TTSSRRQQppoonnmmffgghhiiJJKKLLMM##""!! TTSSRRQQLLKKJJII$##""!! 44332211PPOONNMMllkkjjiijjkkllmmNNOOPPQQPPOONNMMHHGGFFEE00//..--LLKKJJIIhhggffeennooppqqRRSSTTUULLKKJJIIDDCCBBAA,,++**))HHGGFFEEddccbbaa~~}}rrssttuuVVWWXXYYHHGGFFEE@@??>>==((''&&%%DDCCBBAA``__^^]]||{{zzyyvvwwxxyyZZ[[\\]]DDCCBBAA77665544$$##""!!@@??>>==\\[[ZZYYxxwwvvuuzz{{||}}^^__``aa @@??>>==33221100 + + <<;;::99XXWWVVUUttssrrqq~~}}||~~bbccddee + + <<;;::99//..--,, 88776655TTSSRRQQppoonnmm{{zzyyxxffgghhii88776655++**))((44332211PPOONNMMllkkjjiiwwvvuutsjjkkllmm44332211''&&%%$$ + + 00//..--LLKKJJIIhhggffeerqpoonnmnnooppqq00//..--##""!!  ,,++**))HHGGFFEEddccbbaa~~}}mllkkjji~~}}||rrssttuu ,,++**)) + + ((''&&%%DDCCBBAA``__^^]]||{{zzyyihhggffe{{zzyyxxvvwwxxyy + + ((''&&%%$$##""!!@@??>>==\\[[ZZYYxxwwvvuueddccbbawwvvuuttzz{{||}}$$##""!! <<;;::99XXWWVVUUttssrrqqa``__^^]ssrrqqpp~~   88776655TTSSRRQQppoonnmm]\\[[ZZYoonnmmll + + + +!!""##$$44332211PPOONNMMllkkjjii~~}}||{{YXWVUTSSkkjjiihh %%&&''(( + + 00//..--LLKKJJIIhhggffeezzyyxxwwRRQQPPOOggffeedd !!))**++,,  ,,++**))HHGGFFEEddccbbaavvuuoonnNNMMLLKKccbbaa``~~}}||""##$$%% --..//00 + + ((''&&%%DDCCBBAA``__^^]]mmllkkjjJJIIHHGG__^^]]\\{{zzyyxx&&''(()) + + 11223344$$##""!!@@??>>==\\[[ZZYYiihhggffFFEEDDCC[[ZZYYXXwwvvuutt**++,,-- + + !!""##55667788 <<;;::99XXWWVVUUeeddccbbBBAA@@??WWVVUUTTssrrqqpp..//0011 $$%%&&''99::;;<< 88776655TTSSRRQQaa``__^^>>==<;:9SSRRQQPPoonnmmll22334455(())**++==>>??@@!!""##$$44332211PPOONNMM]]\\[[ZZ87766554OONNMMLLkkjjiihh66778899,,--..//AABBCCDD%%&&''(( + + 00//..--LLKKJJIIYYSSRRQQ43322110KKJJIIHHggffeedd::;;<<==00112233EEFFGGHH))**++,,  ,,++**))HHGGFFEEPPOONNMM0//..--,GGFFEEDDccbbaa``~~}}||>>??@@AA 44556677IIJJKKLL--..//00 + + ((''&&%%DDCCBBAALLKKJJII,++**))(CCBBAA@@__^^]]\\{{zzyyxxBBCCDDEE!!""##$$==>>??@@MMNNOOPP11223344$$##""!!@@??>>==HHGGFFEE(''&&%%$??>>==<<[[ZZYYXXwwvvuuttFFGGHHII%%&&''((AABBCCDDQQRRSSTT55667788 <<;;::99DDCCBBAA$##""!! ;;::9988WWVVUUTTssrrqqppJJKKLLMM))**++,,EEFFGGHHUUVVWWXX99::;;<< 88776655@@??>>==77665544SSRRQQPPoonnmmllNNOOPPQQ--..//00IIJJKKLLYYZZ[[\\==>>??@@!!""##$$443322117766554433221100OONNMMLLkkjjiihhRRSSTTUU11223344MMNNOOPP]]^^__``AABBCCDD%%&&''(( + + 00//..--33221100//..--,,KKJJIIHHggffeeddVVWWXXYY55667788QQRRSSYYaabbccddEEFFGGHH))**++,,  ,,++**))//..--,,++**))((GGFFEEDDccbbaa``~~}}||ZZ[[\\]]99::;;<>??@@^^__``aaiijjkkllMMNNOOPP11223344$$##""!!''&&%%$$ ##""!! ??>>==<<[[ZZYYXXwwvvuuttbbccddeeAABBCCDDbbccddeemmnnooppQQRRSSTT55667788 ##""!!;;::9988WWVVUUTTssrrqqppffgghhiiEEFFGGHHffgghhiiqqrrssttUUVVWWXX99::;;<< 77665544SSRRQQPPoonnmmlljjkkllmmIIJJKKLLjjkkllmmuuvvwwxxYYZZ[[\\==>>??@@!!""##$$ 33221100OONNMMLLkkjjiihhnnooppqqMMNNOOPPnnoouuvvyyzz{{||]]^^__``AABBCCDD%%&&''(( + +  + + //..--,,KKJJIIHHggffeeddrrssttuuQQRRSSTTwwxxyyzz}}~~aabbccddEEFFGGHH))**++,,    ++**))((GGFFEEDDccbbaa``~~}}||vvwwxxyyUUVVWWXX{{||}}~~eeffgghhIIJJKKLL--..//00 + + + +  + + ''&&%%$$CCBBAA@@__^^]]\\{{zzyyxxzz{{||}}YYZZ[[\\iijjkkllMMNNOOPP11223344##""!! ??>>==<<[[ZZYYXXwwvvuutt~~]]^^__``mmnnooppQQRRSSTT55667788 + +;;::9988WWVVUUTTssrrqqppaabbccddqqrrssttUUVVWWXX99::;;<<   !!77665544SSRRQQPPoonnmmlleeffgghhuuvvwwxxYYZZ[[\\==>>??@@!!""##$$""##$$%% 33221100OONNMMLLkkjjiihhiijjkkllyyzz{{||]]^^__``AABBCCDD%%&&''(( + + &&''(()) + + //..--,,KKJJIIHHggffeeddmmnnoopp}}~~aabbccddEEFFGGHH))**++,, **++,,-- ++**))((GGFFEEDDccbbaa``qqrrsstteeffgghhIIJJKKLL--..//00!!""##..//0011 + + ''&&%%$$CCBBAA@@__^^]]\\uuvvwwxxiijjkkllMMNNOOPP11223344$$%%&&''22334455##""!! ??>>==<<[[ZZYYXXyyzz{{||mmnnooppQQRRSSTT55667788(())**++66778899;;::9988WWVVUUTT}}~~qqrrssttUUVVWWXX99::;;<< ,,--..//::;;<<== !!77665544SSRRQQPPuuvvwwxxYYZZ[[\\==>>??@@!!""##$$00112233>>??@@AA""##$$%% 33221100OONNMMLLyyzz{{||]]^^__``AABBCCDD%%&&''((44556677BBCCDDEE&&''(()) + + //..--,,KKJJIIHH}}~~aabbccddEEFFGGHH))**++,,==>>??@@FFGGHHII**++,,-- ++**))((GGFFEEDDeeffgghhIIJJKKLL--..//00AABBCCDDJJKKLLMM..//0011 + + ''&&%%$$CCBBAA@@iijjkkllMMNNOOPP11223344EEFFGGHHNNOOPPQQ22334455##""!! ??>>==<>??@@QQRRSSYYZZ[[\\]]>>??@@AA""##$$%% 33221100yyzz{{||]]^^__``AABBCCDDZZ[[\\]]^^__``aaBBCCDDEE&&''(()) + + //..--,,hggffeedzzyyxxwwwwxxyyzz[[\\]]^^yyzz{{||xxyyzz{{\\]]^^__@@AABBCC$$%%&&'' + +  + + 00//..--LLKKJJIIhhggffeerqpoonnmnnooppqqdccbbaa`vvuuttss{{||}}~~__``aabb}}~~||}}~~``aabbccDDEEFFGG(())**++   ,,++**))HHGGFFEEddccbbaa~~}}mllkkjji~~}}||rrssttuu`__^^]]\rrqqppooccddeeffddeeffggHHIIJJKK,,--..// + + + +  + + ((''&&%%DDCCBBAA``__^^]]||{{zzyyihhggffe{{zzyyxxvvwwxxyy~~\[[ZZYYXnnmmllkkgghhiijjhhiijjkkLLMMNNOO00112233 $$##""!!@@??>>==\\[[ZZYYxxwwvvuueddccbbawwvvuuttzz{{||}}}}||{{zzWVUTSSRRjjiihhggkkllmmnnllmmnnooPPQQRRSS44556677  <<;;::99XXWWVVUUttssrrqqa``__^^]ssrrqqpp~~yyxxwwvvQQPPOONNffeeddccooppqqrrppqqrrssTTUUVVWW8899::;; + +  88776655TTSSRRQQppoonnmm]\\[[ZZYoonnmmlluuoonnmmMMLLKKJJbbaa``__~~}}||{{ssttuuvvttuuvvwwXXYYZZ[[<<==>>?? !!""##!!""##$$44332211PPOONNMMllkkjjii~~}}||{{YXWVUTSSkkjjiihhllkkjjiiIIHHGGFF^^]]\\[[zzyyxxwwwwxxyyzzxxyyzz{{\\]]^^__@@AABBCC$$%%&&'' + + %%&&''(( + + 00//..--LLKKJJIIhhggffeezzyyxxwwRRQQPPOOggffeeddhhggffeeEEDDCCBBZZYYXXWWvvuuttss{{||}}~~||}}~~``aabbccDDEEFFGG(())**++ ))**++,,  ,,++**))HHGGFFEEddccbbaavvuuoonnNNMMLLKKccbbaa``~~}}||ddccbbaaAA@@??>>VVUUTTSSrrqqppooddeeffggHHIIJJKK,,--..//!!""--..//00 + + ((''&&%%DDCCBBAA``__^^]]mmllkkjjJJIIHHGG__^^]]\\{{zzyyxx``__^^]]==<;:987RRQQPPOOnnmmllkkhhiijjkkLLMMNNOO00112233##$$%%&&11223344$$##""!!@@??>>==\\[[ZZYYiihhggffFFEEDDCC[[ZZYYXXwwvvuutt\\[[ZZYY76655443NNMMLLKKjjiihhggllmmnnooPPQQRRSS44556677''(())**55667788 <<;;::99XXWWVVUUeeddccbbBBAA@@??WWVVUUTTssrrqqppSSRRQQPP3221100/JJIIHHGGffeeddccppqqrrssTTUUVVWW8899::;;++,,--..99::;;<< 88776655TTSSRRQQaa``__^^>>==<;:9SSRRQQPPoonnmmll~~}}||OONNMMLL/..--,,+FFEEDDCCbbaa``__~~}}||{{ttuuvvwwXXYYZZ[[<<==>>?? !!""##//001122==>>??@@!!""##$$44332211PPOONNMM]]\\[[ZZ87766554OONNMMLLkkjjiihh{{zzyyxxKKJJIIHH+**))(('BBAA@@??^^]]\\[[zzyyxxwwxxyyzz{{\\]]^^__@@AABBCC$$%%&&''33445566AABBCCDD%%&&''(( + + 00//..--LLKKJJIIYYSSRRQQ43322110KKJJIIHHggffeeddwwvvuuttGGFFEEDD'&&%%$$#>>==<<;;ZZYYXXWWvvuuttss||}}~~``aabbccDDEEFFGG(())**++77==>>??EEFFGGHH))**++,,  ,,++**))HHGGFFEEPPOONNMM0//..--,GGFFEEDDccbbaa``~~}}||ssrrqqppCCBBAA@@#""!! ::998877VVUUTTSSrrqqppooddeeffggHHIIJJKK,,--..//@@AABBCCIIJJKKLL--..//00 + + ((''&&%%DDCCBBAALLKKJJII,++**))(CCBBAA@@__^^]]\\{{zzyyxxoonnmmll??>>==7766554433RRQQPPOOnnmmllkkhhiijjkkLLMMNNOO00112233DDEEFFGGMMNNOOPP11223344$$##""!!@@??>>==HHGGFFEE(''&&%%$??>>==<<[[ZZYYXXwwvvuuttkkjjiihh66554433221100//NNMMLLKKjjiihhggllmmnnooPPQQRRSS44556677HHIIJJKKQQRRSSTT55667788 <<;;::99DDCCBBAA$##""!! ;;::9988WWVVUUTTssrrqqppggffeedd221100//..--,,++JJIIHHGGffeeddccppqqrrssTTUUVVWW8899::;;LLMMNNOOUUVVWWXX99::;;<< 88776655@@??>>==77665544SSRRQQPPoonnmmllccbbaa``..--,,++ **))((''FFEEDDCCbbaa``__~~}}||{{ttuuvvwwXXYYZZ[[<<==>>??PPQQRRSSYYZZ[[\\==>>??@@!!""##$$443322117766554433221100OONNMMLLkkjjiihh__^^]]\\**))(('' + + &&%%$$##BBAA@@??^^]]\\[[zzyyxxwwxxyyzz{{\\]]^^__@@AABBCCYYZZ[[\\]]^^__``AABBCCDD%%&&''(( + + 00//..--33221100//..--,,KKJJIIHHggffeedd[[ZZYYXX&&%%$$##""!! >>==<<;;ZZYYXXWWvvuuttss~~||}}~~``aabbccDDEEFFGG]]^^__``aabbccddEEFFGGHH))**++,,  ,,++**))//..--,,++**))((GGFFEEDDccbbaa``~~}}||WWVVUUTT""!!::998877VVUUTTSSrrqqppoo}}||{{zzddeeffggHHIIJJKKaabbccddeeffgghhIIJJKKLL--..//00 + + ((''&&%%++**))(( + +''&&%%$$CCBBAA@@__^^]]\\{{zzyyxxSSRRQQPP66554433RRQQPPOOnnmmllkkyyxxwwvvhhiijjkkLLMMNNOOeeffgghhiijjkkllMMNNOOPP11223344$$##""!!''&&%%$$ ##""!! ??>>==<<[[ZZYYXXwwvvuuttOONNMMLL + +221100//NNMMLLKKjjiihhgguutsrqpollmmnnooPPQQRRSSiijjkkllmmnnooppQQRRSSTT55667788 ##""!!;;::9988WWVVUUTTssrrqqppKKJJIIHH ..--,,++JJIIHHGGffeeddcconnmmllk~~ppqqrrssTTUUVVWWmmnnoouuqqrrssttUUVVWWXX99::;;<< 77665544SSRRQQPPoonnmmll~~}}||{{GGFFEEDD + + **))((''FFEEDDCCbbaa``__~~}}||{{kjjiihhg}}||{{zzttuuvvwwXXYYZZ[[vvwwxxyyuuvvwwxxYYZZ[[\\==>>??@@!!""##$$ 33221100OONNMMLLkkjjiihhzzyyxxwwCCBBAA@@  + + &&%%$$##BBAA@@??^^]]\\[[zzyyxxwwgffeeddcyyxxwwvvxxyyzz{{\\]]^^__zz{{||}}yyzz{{||]]^^__``AABBCCDD%%&&''(( + +  + + //..--,,KKJJIIHHggffeeddvvuuoonn??>>==<<""!! >>==<<;;ZZYYXXWWvvuuttsscbbaa``_uuttssrr||}}~~``aabbcc~~}}~~aabbccddEEFFGGHH))**++,,    ++**))((GGFFEEDDccbbaa``mmllkkjj;;::9988 + + ::998877VVUUTTSSrrqqppoo_^^]]\\[qqppoonnddeeffggeeffgghhIIJJKKLL--..//00 + + + +  + + ''&&%%$$CCBBAA@@__^^]]\\iihhggff77665544  !!""66554433RRQQPPOOnnmmllkk~~}}[ZZYYXWVmmllkkjjhhiijjkkiijjkkllMMNNOOPP11223344##""!! ??>>==<<[[ZZYYXXeeddccbb33221100##$$%%&& + +221100//NNMMLLKKjjiihhgg||{{zzyyUTSSRRQQiihhggffllmmnnoommnnooppQQRRSSTT55667788 + +;;::9988WWVVUUTTaa``__^^//..--,,''(())** ..--,,++JJIIHHGGffeeddccxxwwvvuuPPOONNMMeeddccbb~~ppqqrrssqqrrssttUUVVWWXX99::;;<<   !!77665544SSRRQQPP]]\\[[ZZ++**))((++,,--.. **))((''FFEEDDCCbbaa``__oonnmmllLLKKJJIIaa``__^^}}||{{zzttuuvvwwuuvvwwxxYYZZ[[\\==>>??@@!!""##$$""##$$%% 33221100OONNMMLLYYSSRRQQ''&&%%$$!!""##$$//001122 + + &&%%$$##BBAA@@??^^]]\\[[kkjjiihhHHGGFFEE]]\\[[ZZyyxxwwvvxxyyzz{{yyzz{{||]]^^__``AABBCCDD%%&&''(( + + &&''(()) + + //..--,,KKJJIIHHPPOONNMM##""!! %%&&''((33445566""!! >>==<<;;ZZYYXXWWggffeeddDDCCBBAAYYXXWWVVuuttssrr||}}~~}}~~aabbccddEEFFGGHH))**++,, **++,,-- ++**))((GGFFEEDDLLKKJJII))**++,,778899::::998877VVUUTTSSccbbaa``@@??>>==UUTTSSRRqqppoonneeffgghhIIJJKKLL--..//00!!""##..//0011 + + ''&&%%$$CCBBAA@@HHGGFFEE--..//00;;<<==>> !!""66554433RRQQPPOO__^^]]\\<;:98776QQPPOONNmmllkkjjiijjkkllMMNNOOPP11223344$$%%&&''22334455##""!! ??>>==<>==556677==CCDDEEFF''(())** ..--,,++JJIIHHGGRRQQPPOO21100//.IIHHGGFFeeddccbb~~qqrrssttUUVVWWXX99::;;<< ,,--..//::;;<<== !!7766554477665544 >>??@@AAGGHHIIJJ++,,--.. **))((''FFEEDDCCNNMMLLKK.--,,++*EEDDCCBBaa``__^^}}||{{zzuuvvwwxxYYZZ[[\\==>>??@@!!""##$$00112233>>??@@AA""##$$%% 3322110033221100 + + BBCCDDEEKKLLMMNN//001122 + + &&%%$$##BBAA@@??JJIIHHGG*))((''&AA@@??>>]]\\[[ZZyyxxwwvvyyzz{{||]]^^__``AABBCCDD%%&&''((44556677BBCCDDEE&&''(()) + + //..--,,//..--,, + + FFGGHHIIOOPPQQRR33445566""!! >>==<<;;FFEEDDCC&%%$$##"==<<;;::YYXXWWVVuuttssrr}}~~aabbccddEEFFGGHH))**++,,==>>??@@FFGGHHII**++,,-- ++**))((++**))((JJKKLLMMSSTTUUVV778899::::998877BBAA@@??"!! 99887766UUTTSSRRqqppoonneeffgghhIIJJKKLL--..//00AABBCCDDJJKKLLMM..//0011 + + ''&&%%$$''&&%%$$NNOOPPQQWWXXYYZZ;;<<==>> !!""66554433>>==776655443322QQPPOONNmmllkkjjiijjkkllMMNNOOPP11223344EEFFGGHHNNOOPPQQ22334455##""!! ##""!!RRSSYYZZ[[\\]]^^??@@AABB##$$%%&& + +221100//554433221100//..MMLLKKJJiihhggffmmnnooppQQRRSSTT55667788IIJJKKLLRRSSTTUU66778899[[\\]]^^__``aabbCCDDEEFF''(())** ..--,,++1100//..--,,++**IIHHGGFFeeddccbb~~qqrrssttUUVVWWXX99::;;<>??@@QQRRSSYYZZ[[\\]]>>??@@AA""##$$%% ""##$$%%ccddeeffgghhiijjKKLLMMNN//001122 + + &&%%$$##))((''&& + + %%$$##""AA@@??>>]]\\[[ZZyyxxwwvvyyzz{{||]]^^__``AABBCCDDZZ[[\\]]^^__``aaBBCCDDEE&&''(()) + +  &&''(())gghhiijjkkllmmnnOOPPQQRR33445566""!! %%$$##""!! ==<<;;::YYXXWWVVuuttssrr~~}}}}~~aabbccddEEFFGGHH^^__``aabbccddeeFFGGHHII**++,,-- + + + +**++,,--kkllmmnnooppqqrrSSTTUUVV778899::!!99887766UUTTSSRRqqppoonn||{{zzyyeeffgghhIIJJKKLLbbccddeeffgghhiiJJKKLLMM..//0011 + +  ..//0011oouuvvwwssttuuvvWWXXYYZZ;;<<==>> !!""55443322QQPPOONNmmllkkjjxxwwvvuuiijjkkllMMNNOOPPffgghhiijjkkllmmNNOOPPQQ2233445522334455xxyyzz{{wwxxyyzz[[\\]]^^??@@AABB##$$%%&& + + + + 1100//..MMLLKKJJiihhggfftsrqpoonmmnnooppQQRRSSTTjjkkllmmnnooppqqRRSSTTUU6677889966778899||}}~~{{||}}~~__``aabbCCDDEEFF''(())**  --,,++**IIHHGGFFeeddccbb~~nmmllkkj~~}}qqrrssttUUVVWWXXnnoouuvvrrssttuuVVWWXXYY::;;<<== !!::;;<<==ccddeeffGGHHIIJJ++,,--.. + +  + +))((''&&EEDDCCBBaa``__^^}}||{{zzjiihhggf||{{zzyyuuvvwwxxYYZZ[[\\wwxxyyzzvvwwxxyyZZ[[\\]]>>??@@AA""##$$%% !!""##>>??@@AAgghhiijjKKLLMMNN//001122 + +  %%$$##""AA@@??>>]]\\[[ZZyyxxwwvvfeeddccbxxwwvvuuyyzz{{||]]^^__``{{||}}~~zz{{||}}^^__``aaBBCCDDEE&&''(()) + + $$%%&&''BBCCDDEEkkllmmnnOOPPQQRR33445566!! ==<<;;::YYXXWWVVuuttssrrbaa``__^ttssrrqq}}~~aabbccdd~~bbccddeeFFGGHHII**++,,--(())**++FFGGHHIIooppqqrrSSTTUUVV778899:: + + 99887766UUTTSSRRqqppoonn^]]\\[[ZppoonnmmeeffgghhffgghhiiJJKKLLMM..//0011,,--..//JJKKLLMMssttuuvvWWXXYYZZ;;<<==>> !!""  !!""##55443322QQPPOONNmmllkkjj~~}}||ZYYXWVUTllkkjjiiiijjkklljjkkllmmNNOOPPQQ2233445500112233NNOOPPQQwwxxyyzz[[\\]]^^??@@AABB##$$%%&& + +$$%%&&'' + + 1100//..MMLLKKJJiihhggff{{zzyyxxSSRRQQPPhhggffeemmnnooppnnooppqqRRSSTTUU6677889944556677RRSSTTUU{{||}}~~__``aabbCCDDEEFF''(())** (())**++ --,,++**IIHHGGFFeeddccbbwwvvuuooOONNMMLLddccbbaa~~}}qqrrssttrrssttuuVVWWXXYY::;;<<== !!==>>??@@VVWWXXYYccddeeffGGHHIIJJ++,,--..!!,,--..// + +))((''&&EEDDCCBBaa``__^^nnmmllkkKKJJIIHH``__^^]]||{{zzyyuuvvwwxxvvwwxxyyZZ[[\\]]>>??@@AA""##$$%%AABBCCDDZZ[[\\]]gghhiijjKKLLMMNN//001122""##$$%%00112233 %%$$##""AA@@??>>]]\\[[ZZjjiihhggGGFFEEDD\\[[ZZYYxxwwvvuuyyzz{{||zz{{||}}^^__``aaBBCCDDEE&&''(())EEFFGGHH^^__``aakkllmmnnOOPPQQRR33445566&&''(())44556677!! ==<<;;::YYXXWWVVffeeddccCCBBAA@@XXWWVVUUttssrrqq}}~~~~bbccddeeFFGGHHII**++,,--IIJJKKLLbbccddeeooppqqrrSSTTUUVV778899::**++,,--8899::;;99887766UUTTSSRRbbaa``__??>>==<;TTSSRRQQppoonnmmffgghhiiJJKKLLMM..//0011MMNNOOPPffgghhiissttuuvvWWXXYYZZ;;<<==>> !!""..//0011<<==>>?? !!""##55443322QQPPOONN^^]]\\[[:9877665PPOONNMMllkkjjiijjkkllmmNNOOPPQQ22334455QQRRSSYYjjkkllmmwwxxyyzz[[\\]]^^??@@AABB##$$%%&&22334455@@AABBCC$$%%&&'' + + 1100//..MMLLKKJJZZYYSSRR54433221LLKKJJIIhhggffeennooppqqRRSSTTUU66778899ZZ[[\\]]nnooppqq{{||}}~~__``aabbCCDDEEFF''(())**6677==>>DDEEFFGG(())**++ --,,++**IIHHGGFFQQPPOONN100//..-HHGGFFEEddccbbaa~~}}rrssttuuVVWWXXYY::;;<<==^^__``aarrssttuuccddeeffGGHHIIJJ++,,--..??@@AABBHHIIJJKK,,--..// + +))((''&&EEDDCCBBMMLLKKJJ-,,++**)DDCCBBAA``__^^]]||{{zzyyvvwwxxyyZZ[[\\]]>>??@@AAbbccddeevvwwxxyygghhiijjKKLLMMNN//001122CCDDEEFFLLMMNNOO00112233 %%$$##""AA@@??>>IIHHGGFF)((''&&%@@??>>==\\[[ZZYYxxwwvvuuzz{{||}}^^__``aaBBCCDDEEffgghhiizz{{||}}kkllmmnnOOPPQQRR33445566GGHHIIJJPPQQRRSS44556677!! ==<<;;::EEDDCCBB%$$##""!<<;;::99XXWWVVUUttssrrqq~~bbccddeeFFGGHHIIjjkkllmm~~ooppqqrrSSTTUUVV778899::KKLLMMNNTTUUVVWW8899::;;99887766AA@@??>>! 88776655TTSSRRQQppoonnmmffgghhiiJJKKLLMMnnoouuvvssttuuvvWWXXYYZZ;;<<==>>OOPPQQRRXXYYZZ[[<<==>>?? !!""##55443322==77665544332211PPOONNMMllkkjjiijjkkllmmNNOOPPQQwwxxyyzzwwxxyyzz[[\\]]^^??@@AABBSSYYZZ[[\\]]^^__@@AABBCC$$%%&&'' + + 1100//..4433221100//..--LLKKJJIIhhggffeennooppqqRRSSTTUU{{||}}~~{{||}}~~__``aabbCCDDEEFF\\]]^^__``aabbccDDEEFFGG(())**++ --,,++**00//..--,,++**))HHGGFFEEddccbbaa~~}}rrssttuuVVWWXXYY~~}}||{{ccddeeffGGHHIIJJ``aabbccddeeffggHHIIJJKK,,--..// + +))((''&&,,++**)) ((''&&%%DDCCBBAA``__^^]]||{{zzyyvvwwxxyyZZ[[\\]]zzyyxxwwgghhiijjKKLLMMNNddeeffgghhiijjkkLLMMNNOO00112233 %%$$##""((''&&%% + + $$##""!!@@??>>==\\[[ZZYYxxwwvvuuzz{{||}}^^__``aavvuutsrqkkllmmnnOOPPQQRRhhiijjkkllmmnnooPPQQRRSS44556677!! $$##""!! <<;;::99XXWWVVUUttssrrqq~~}}||~~bbccddeepoonnmmlooppqqrrSSTTUUVVllmmnnooppqqrrssTTUUVVWW8899::;;88776655TTSSRRQQppoonnmm{{zzyyxxffgghhiilkkjjiih~~}}||{{ssttuuvvWWXXYYZZuuvvwwxxttuuvvwwXXYYZZ[[<<==>>?? !!""##44332211PPOONNMMllkkjjiiwwvvuutsjjkkllmmZHAb|ZdQbltbr˂pfpvp˂rH~ftlJp˂rvXnlJtA˂rXQ~f`lJtApvnے`JXQtlJdQZ|ZHAbnXv`XQJ`ے`vXntArdXQJ`ےvpfHrd|J`ےvXnrd|Xv`fr˂ptArddrtAJے`JXQf~HbHAZvpf|ZdQbbHAZ~f`ZdQbtbHAZpvpfHZdQbtHfpZHAbf~Hltbr˂pfpvp˂rH~ftlJp˂rvXnlJtA˂rXQ~f`lJtAvnrے`JXQXv`fdQZ|ZHAbnXv`XQJ`ے`vXntArdXQJ`ےvp`vrd|J`ےvXnrd|XQJ`ےr˂p~HfrAJltے`JXQf~HbHAZvpf|ZdQbbHAZXnvZdQbtbHAZpvpfHZdQbtHAZpZHAbpvnbdQZ|r˂pfpvdrtAH~ftlJp˂rpfH~lJtA˂rXQ~f`lJtA˂rXQے`JXQXv`fdrtZHAbnXv`Jlt`vXntArdXQJ`ےf`vrd|J`ےvXnrd|J`ےr˂p~HfAJltے`JXQf~HbdQZ|vpf|ZdQbbHAZXnvZdQbtbHAZpvpfHZdQbtbHAZpZHAbpvbdQZ|r˂pfpvdrtAH~ftlJp˂rpfH~lJtA˂rXQ~f`lJtA˂rXQے`JXQ~HfpdrtZHAbnXv`Jlt`vXntArdXQJ`ےvprd|J`ےvXnrd|J`ےr˂pvnXAJbdQے`JXQf~HbdQZ|vpf|ZdQbbHAZfH~ZdQbtbHAZpvpfHZdQbtbHAZpZHAbv`fZ|dr˂pfpvdrtAH~ftlJp˂rf`vXlJtA˂rXQ~f`lJtA˂rXQے`JXQ~HfprtAJlZHAbnXv`JltZHAbtArdXQJ`ےnvprd|J`ےvXnrd|J`ےr˂pvnXtbdQے`JXQf~HbdQZ|ے`JXQ|ZdQbbHAZfH~ZdQbtbHAZpvpfHZdQbtbHAZpZHAbv`pvZ|dr˂pfpvdrtAr˂ptlJp˂rf`vXlJtA˂rXQ~f`lJtA˂rXQے`JXQnXvrtAJlZHAbnXv`JltZHAbtArdXQJ`ےH~frd|J`ےvXnrd|J`ےr˂p`f~tbQZے`JXQf~HbdQZ|ے`JXQ|ZdQbbHAZZHAbZdQbtbHAZpvpfHZdQbtbHAZpZHAbHfpvdrtAr˂pfpvdrtAr˂ptlJp˂rJQrlJtA˂rXQ~f`lJtA˂rXQے`JXQnXvJltZHAbnXv`JltZHAbtArdXQJ`ےpZHArdfJ`ےvXnrd|J`ےr˂p`f~bdQZ|ے`JXQf~HbdQZ|ے`JXQf~HbHAZbے`~HfbHAZpvpfHZdQbtbHAZpdrtAJZHAbHXv`drtAr˂pfpvdrtAr˂pfpvp˂rJXQrpvn˂rXQ~f`lJtA˂rXQltbے`JXQf~HJltZHAbnXv`JltZHAbnXv`XQJ`ےpZHAXv`fJ`ےvXnrd|J`ےdQZ|r˂pfpvbdQZ|ے`JXQf~HbdQZ|ے`JXQf~HbHAZbے`~HfbHAZpvpfHZdQbtbHAZpdrtAJZHAbnXv`rAJlr˂pfpvdrtAr˂pfpvp˂rJXQrZpvn˂rXQ~f`lJtA˂rXQltbے`JXQf~HtbdQZZHAbnXv`JltZHAbnXv`XQJ`ےHAbےXv`fJ`ےvXnrd|J`ےdQZ|r˂pfpv|drے`JXQf~HbdQZ|ے`JXQf~HbHAZ`JXQr~HfbHAZvpfHZdQbtbHAZpdrtAJZHAb~HftAJlr˂pfpvdrtAr˂pfpvdrtA˂pZpvndrtAJ~f`lJtA˂rXQltbے`JXQpvntbdQZZHAbnXv`JltZHAbnXv`dQZ|HAbےXv`fltbvXnrd|J`ےdQZ|r˂pXv`f|dnے`JXQf~HbdQZ|ے`JXQf~HdrtAJ`JXQr~HfdQZ|vpfHZdQbtbHAZpdtAJlZHAb~Hfvffr˂pfpvdrtAr˂pfpvltb˂pZApvndrtAJ~f`lJtA˂rXQtbnے`JXQpvn`vXnZHAbnXv`JltZHAbnXv`dQZ|b`JXXv`fltbvXnrd|J`ےvpfr˂pXv`pvpfے`JXQf~HbdQZ|ے`JXQf~HdrtAJQr˂p~HfdQZ|vpfHZdQbtbHAZpHf`ZHAbvnXH~fr˂pfpvdrtAr˂pfpvltdZHAbpvndrtAJ~fZlJtA˂rXQvXnے`JXQv`f`vXnZHAےnXv`JltZHAbnXv`rtAJlے`JXXv`fltbHAbےrd|J`ےvpfHr˂p~Hfpvpf`JXQrf~HbdQZ|ے`JXQf~HtbdQQr˂p~HfdQZ|`JXQrZdQbtbHAZp~f`ZHAbvnXH~fbtlfpvdrtAr˂pfpvZ|dZHAbpvndrtAJ˂pZlJtA˂rXQvXnے`JXQv`p˂`vXnJtAdnXv`JltZHAbnXv`rtAJlJQrXv`fltbHAbےrd|J`ےvpfHr˂prXQJvpf|ZdQbf~HbdQZ|ے`JXQf~HtbdQ˂pZHA~HfdQZ|`JXQrZdQbtbHAZp~f`ZHAb`ےbH~ftlJfpvdrtAr˂pfpvZ|lbے`pvndrtAJ˂pZlJtA˂rXQvXnے`JXQHAZp˂`vXntArdnXv`JltZHAbnXv`tbdQZJXQrXv`fltbHAbےrdfJ`ےvpfHr˂prXQJvpf|ZdQbfHfbdQZ|ے`JXQf~H|dr˂pZHA~HfdQZ|`JXQr~HfbHAZp~f`|ZdQb`p˂H~ftlJpvndrtAr˂pfpvtAJlbے`pvndrtAJ˂pZpvn˂rXQvXntlJrXQJ``vXntArdrXQJ`JltZHAbnXv`tbdQZJXQrXv`fltbHAbےXv`fJ`ےvpfHtArdےbHAvpf|ZdQbےHAZbdQZ|ے`JXQf~H|drZHAbې~HfdQZ|`JXQr~HfbHAZp~f`|ZdQbZp˂H~ftlJp˂rdrtAr˂pfpvtAdQZ|`JXQpvndrtAJ˂pZpvn˂rXQvXntlJrXQJ``vXntArdXQJ`ےJltZHAbnXv`drtAr˂pXv`fltbHAbےXv`fJ`ےvpfHtArdےbHAvpf|ZdQbbHAZbdQZ|ے`JXQf~HJltZHAbې~HfdQZ|`JXQr~HfbHAZ~f`|ZdQbXQJ`ےH~ftlJp˂rdtAJr˂pfpvbdQZ|`JXQpvndrtAJ˂pZpvndrtAJvXntlJbHAZ`vXntArdXQJ`ےltbZHAbnXv`drtAr˂pZXv`fltbHAbےXv`fltbvpfHtArdp˂rvpf|ZdQbbHAZnvpے`JXQf~HJltAb`J~HfdQZ|`JXQr~HfdQZ|~f`|ZdQbXQJ`ےH~ftlJp˂rfHfr˂pfpvdrtAJXQr˂pvndrtAJ˂pZpvndrtAJvXntlJbHAZ`vXntArdXQJ`ے`vXnZHAbnXv`ltbpZHAbXv`fltbHAbےXv`fltbvpfHtArdp˂vpf|ZdQbbHAZvpfے`JXQf~HdQZ|ے`J~HfdQZ|`JXQr~HfdQZ|~f`|ZdQbbHAZpH~ftlJp˂rH~fr˂pfpvdrtAJXQr˂pvndrtAJ˂pZpvndrtAJvXntlJ˂rXQ`vXntArdXQJ`ے`vXnZHAےnXv`ltbpZA`Xv`fltbHAbےXv`fltbvpfHtArdJ`ےvpf|ZdQbbHAZvpf`JXQrf~HdQZ|lJXQrb~HfdQZ|`JXQr~HfdQZ|~f`|ZdQbbHAZpH~ftlJp˂rH~fbtlfpvtbdQtlJpvndrtAJ˂pZpvndrtAJvXntlJ˂rXQ`vXntArdXQJ`ے`vXnJtAdnXv`Z|dtAd|Xv`fltbHAbےXv`fltbvpfHtArdJ`p˂vpf|ZdQbbHAZvpf|ZdQbf~HrtAJlZdQbt~HfdQZ|`JXQr~HfdQZ|~f`|ZdQbrXQJH~ftlJp˂rH~ftlJfpvtbdQlJtApvndrtAJ˂pZpvndrtAJvXntlJ`ےb`vXntArdXQJ`ے`vXntArdnXv`Z|lrd|Xv`fltbHAbےXv`fltbvpfHtArdHAZp˂vpf|ZdQbbHAZvpf|ZdQbfHftbnZdQbtHfpdQZ|`JXQr~HfdQZ|~f`|ZdQbrXQJH~ftlJp˂rH~ftlJpvnvp`vlJtAvnrdrtAJ˂pZpvndrtAJvXntlJ`ےb`vXntArdXQJ`ے`vXntArdrXQJ`Xnvrd|XQJ`ےltbHAbےXv`fltbvpfHtArdHAXQJ`vpf|ZdQbbHAZvpf|ZdQbےHAZpfH~ZdQbtHAZpdQZ|`JXQr~HfdQZ|~f`|ZdQbےbHAH~ftlJp˂rH~ftlJp˂rf`vlJtA˂rXQdrtAJ˂pZpvndrtAJvXntlJZp˂`vXntArdXQJ`ے`vXntArdXQJ`ےXnvrd|J`ےltbHAbےXv`fltbvpfHtArdrXQJ`vpf|ZdQbbHAZvpf|ZdQbbHAZp`vXZdQbtbHAZpdQZ|`JXQr~HfdQZ|~f`|ZdQbےbHAH~ftlJp˂rH~ftlJp˂rnvplJtA˂rXQdtAJl˂pZpvndrtAJvXntlJZp˂`vXntArdXQJ`ے`vXntArdXQJ`ےfH~rd|J`ےtbnHAbےXv`fltbvpfHtArdbHAZvpf|ZdQbbHAZvpf|ZdQbbHAZf`vXZdQbtbHAZpvpf`JXQr~HfdQZ|~f`|ZdQbdrtAH~ftlJp˂rH~ftlJp˂rnvplJtA˂rXQHf`˂pZpvndrtAJvXntlJJbdQZHAbtArdXQJ`ے`vXntArdXQJ`ےfH~rd|J`ےvXnHAbےXv`fltbvpfHtArdZ|dے`JXQ|ZdQbbHAZvpf|ZdQbbHAZvpfZdQbtbHAZpvpfH`JXQr~HfdQZ|~fZ|ZdQbrtAJlr˂ptlJp˂rH~ftlJp˂rH~flJtA˂rXQ~f`˂pZpvndrtAJHAbtlJtbdQZHAbtArdXQJ`ے`vXntArdXQJ`ے`vXnrd|J`ےvXnHAے`Xv`fltb˂pZHAtArdZ|dے`JXQ|ZdQbbHAZvpf|ZdQbbHAZvpfZdQbtbHAZpvpfHJXQrb~HfdQZ|bے`|ZdQbrtAJlr˂ptlJp˂rH~ftlJp˂rH~flJtA˂rXQ~f`tlJpvndrtAJJXQrtlJtbQZZHAbtArdXQJ`ے`vXntArdXQJ`ے`vXHrd|J`ےvXntAd|Xv`fltb˂pZHAtArddrtAJے`JXQf~HbHAZvpf|ZdQbbHAZ~f`ZdQbtbHAZpvpfHZdQbt~HfdQZ|bے`JXQHAbf~HtbdQbے`df`ےbXnvd|ZXQJ`ےnvp|ZdQےbHAnvp|ZdQ`f~drtAJ|ZdQbf~HbdQZ|ے`JXQf~HbdQZ|˂pZ~fpvdQZ|`JXQrZdQbtbHAZpvpfHb㉀ۑpے`JfpvZ|dJXQr~HfpHAZp˂pfH~dQbt璐bHAZfH~btlZp˂fH~btlHfpvltbtlJfpvdrtAr˂pfpvdrtAHAbےnXv`drtAJ˂pZlJtA˂rXQ~f`JAHrXQr˂nXv`rtAJl˂pZHAvnXrXQJf`vlJtArp˂rf`vXJtArdrXQJ`f`vXJtArdnXvdQZ|ltArdnXv`JltZHAbnXv`Jlt`JXQHAf~HltbHAbےrdfJ`ےvXnˁ`pfpZHAbf~HftbdQbے`v`f`ےbXnvd|ZXQJ`ےnvp|ZdQےbHAnvp|ZdQ`fHtbn|ZdQbfHfbdQZ|ے`JXQf~HbdQZ|bے`fpvdQZ|`JXQr~HfbHAZpvpfHH~ㅐfېے`JvnXvZ|dJXQr~HfpHAZp˂pfH~dQbt璐bHAXQfH~btlZp˂fH~btlfpvvp`tlJpvndrtAr˂pfpvdrtAJXQrnXv`drtAJ˂pZpvn˂rXQ~f``vXnXQr˂`f~rtAJl˂pZHAvnXrXQJf`vlJtArJ`ےf`vXJtArdrXQJ`f`vXJtArdnrXQJvXntArdrXQJ`JltZHAbnXv`Jlt˂pZHAf~HltbHAbےXv`fJ`ےvXnvˍpfp`JXQHfpvtbdQbے`v`f`ےbXnvd|ZbHAZpnvp|ZdQےbHAnvp|ZdQ`ےHAvpfH|ZdQbےHAZbdQZ|ے`JXQf~HbdQZ|bے`fvnXdQZ|`JXQr~HfbHAZpvpfHH~ㅐfr˂pnXvZ|dJXQr~HfpHAZdpfH~dQbt˂rXQfH~btlZp˂fH~btlZp˂~f`tlJp˂rdrtAr˂pfpvdrtAJXQrv`fdrtAJ˂pZpvn˂rXQ~f``vXnZHAb`f~rtAJl˂pZHAvnXrtAJlf`vlJtArJ`ےf`vXJtArdrXQJ`f`vXJtArdrXQJ`vXntArdXQJ`ےJltZHAbnXv`Jlt˂p`J~HfpltbHAbےXv`fJ`ےvXnvˍpfے`JXQHfpvtbdQbے`v`ftbdQXnvd|ZbHAZpnvp|ZdQےbHAnvp|ZdQےbHAvp`v|ZdQbbHAZbdQZ|ے`JXQf~HbdQZ|XQr˂vnXdQZ|`JXQr~HfbHAZvpfHH~ㅐfr˂pnvfZ|dJXQr~HfpZ|dpfH~dQbt˂bfH~btlZp˂fH~btlZp˂XnvtlJp˂rdtAJr˂pfpvdrtApZHAbv`fdrtAJ˂pZpvndrtAJ~f``vXnZHAb~HfprtAJl˂pZHAvnXrtAJlf`vlJtArHAZdf`vXJtArdrXQJ`f`vXJtArdrXQJ`pfH~tArdXQJ`ےltbZHAbnXv`Jltے`J~HfpltbHAbےXv`fltbvXnvˍpf˂pZvnXtbdQbے`v`ftbdQXnvd|ZrtAJnvp|ZdQےbHAnvp|ZdQےbHAf`v|ZdQbbHAZnvpے`JXQf~HbdQZ|XQr˂vnvdQZ|`JXQr~HfdQZ|vpfHH~ㅐfHAbےv`fZ|dJXQr~HfpZ|dpfH~dQbtbdQZ|fH~btlZp˂fH~btlZp˂XnvtlJp˂rfHfr˂pfpvdrtApZHAbf~HdrtAJ˂pZpvndrtAJ~f``vXn`JXQr~HfprtAJl˂pZHAvnXrtAJlfZHAlJtArdrtAfZHAbJtArdrXQJ`f`vXJtArdrXQJ`pfH~tArdXQJ`ے`vXnZHAbnXv`Jlt˂pfpvltbHAbےXv`fltbvXnvˍpf˂pZvnXtbdQbے`v`ftbdQbے`d|ZJltے`J|ZdQےbHAnvp|ZdQےbHAvp|ZdQbbHAZvpfے`JXQf~HbdQZ|ZHAbnXv`dQZ|`JXQr~HfdQZ|vpfHH~ㅐfHAbےv`f~Z|dJXQr~HfpZ|dJXQrdQbtbdQZ|XQr˂btlZp˂fH~btlZp˂fH~tlJp˂rH~fr˂pfpvdrtAے`JXQf~HdrtAJ˂pZpvndrtAJ~fr`vXn`JXQHAfpvrtAJl˂pZHAvnXrtAJl˂pZHAlJtArdrtApZHAbJtArdrXQJ`f`vXJtArdrXQJ`f`vXtArdXQJ`ے`vXnZHAےnXv`Jltr˂pfpvltbHAbےXv`fltb˂pZvˍpfbے`nXv`tbdQbے`v`ftbdQbے`d|ZJltbے`J|ZdQےbHAnvp|ZdQےbHAnvp|ZdQbbHAZvpf`JXQrf~HbdQZ|ZHAbnXv`fdQZ|`JXQr~HfdQZ|HAbےH~ㅐfJXQrf~HZ|dJXQr~HfpZ|dJXQrdQbtQZdrXQr˂btlZp˂fH~btlZp˂fH~tlJp˂rH~fbtlfpvdrtAے`JXQ~fpvdrtAJ˂pZpvndrtAJ`JXQr`vXn˂pZHAfpvrtAJl˂pZHAvnXrtAJl˂pZHAlJtArtAJlpZHAbJtArdrXQJ`f`vXJtArdrXQJ`f`vXtArdXQJ`ے`vXnJtAdnXv`JltHAbےnXvltbHAbےXv`fltb˂pZvˍpfbے`nXv`tbdQbے`v`ftbdQbے`dftbdQZے`Jf~ےbHAnvp|ZdQےbHAH~f|ZdQbbHAZvpf|ZdQbf~HbdQZ|`JXQr`f~dQZ|`JXQr~HfdQZ|HAbےH~ㅐfJXQrffpvZ|dJXQr~HfpZ|dJXQr~HXv|drXQr˂HfpvZp˂fH~btlZp˂`vXntlJp˂rH~ftlJfpvdrtA˂pZHfpvdrtAJ˂pZpvndrtAJ`JXQHA`vXn˂p`JnrXQrtAJl˂pZHAvnXrtAJl˂pZHA`f~tAJlpZHAbnXvrXQJ`f`vXJtArdrXQJ`vpftArdXQJ`ے`vXntArdnXv`JltHAbےnXvltbHAbےXv`fltbbے`vˍpfXQr˂J`ےtbdQbے`v`ftbdQbے`HfpvtbdQZے`J`f~ےbHAnvp|ZdQےbHAH~f|ZdQbbHAZvpf|ZdQbfHfbdQZ|`JXQr`ffpdQZ|`JXQr~HfdQZ|JXQrH~ㅐfpZHAbHAZp˂Z|dJXQr~HfpZ|dJXQrnXv|rAJlXQr˂HfpvZp˂fH~btlZp˂`vXntlJp˂rH~ftlJpvndrtA˂p`vnrdrtAJ˂pZpvndrtAJ˂pZHA`vXnے`JrXQJrtAJl˂pZHAvnXrtAJl˂pZHA`f~tbdpZHAbnXvrXQJ`f`vXJtArdrXQJ`vp`tArdXQJ`ے`vXntArdrXQJ`JltJXQrXQJ`ےltbHAbےXv`fltbbے`vˍpfXQr˂`ےbtbdQbے`v`ftbdQbے`HfpvQZ|dے`J`f~ےbHAnvp|ZdQےbHAvXn|ZdQbbHAZvpf|ZdQbےHAZbdQZ|˂pZHAHAZpdQZ|`JXQr~HfdQZ|JXQrH~ㅐfp`JXQHAZp˂Z|dJXQr~HfpZ|dJXQr~HrtAJlXQr˂HfpvZdrfH~btlZp˂vpfHtlJp˂rH~ftlJp˂rdrtAbے`˂rXQdrtAJ˂pZpvndrtAJ˂p`J`vXnrbt璀rXQJtAJl˂pZHAvnXrtAJl˂pZHAfpvtbdpZHAbnXvtAJlf`vXJtArdrXQJ`~f`tArdXQJ`ے`vXntArdXQJ`ےJltJXQrJ`ےltbHAbےXv`fltbXQr˂vˍpfl|ZdQ`ےbtbnbے`v`ftbdQbے`nXv`QZ|dے`J`f~tbdQZnvp|ZdQےbHAvXn|ZdQbbHAZvpf|ZdQbbHAZbdQZ|˂p`JbHAZpdQZ|`JXQr~HfdQZ|pZHAbH~ㅐfbtlHAZp˂vpfHJXQr~HfpZ|dJXQrf~HrtAJXQr˂Hfpv|drfH~btlZp˂vpfHtlJp˂rH~ftlJp˂rdtAJXQrbt˂rXQdtAJl˂pZpvndrtAJے`J`vXnJtArdrXQJf`v˂pZHAvnXrtAJl˂pZHAfpvbdQZ|pZHAbnXvtAJlf`vXJtArdrXQJ`~vtArdXQJ`ے`vXntArdXQJ`ےltbl|ZJ`ےtbnHAbےXv`fltbXQr˂vˍpf|ZdQ`ےbXnvbے`v`ftbdQbے`nXv`drtAے`J`f~tbdQZnvp|ZdQےbHApfH~|ZdQbbHAZvpf|ZdQbbHAZnvpdQbtbHAZpvpf`JXQr~HfdQZ|pZHAbH~ㅐfbtlHAZp˂pfH~JXQr~HfpZ|dJXQrpvnJltXQr˂Hfpv|drfH~btlZp˂f`vtlJp˂rH~ftlJp˂rfHflJtAr˂rXQHf`˂pZpvndrtAJ˂p`vXn|ZdQbrXQJf`v˂pZHAvnXrtAJl˂pZHAXv`fbdQZ|pZHAbnXvtAJlfZHAbJtArdrXQJ`XnvtArdXQJ`ے`vXntArdXQJ`ے`vXnd|ZJ`ےvXnHAbےXv`fltbZHAbvˍpftlJ`ےbXnvے`Jv`ftbdQbے`~HfdrtAے`J`f~tbdQZے`J|ZdQےbHApfH~|ZdQbbHAZvpf|ZdQbbHAZvpfdQbtbHAZpvpfH`JXQr~HfdQZ|ے`JXQH~ㅐftArdHAZp˂pfH~XQrbt~HfpZ|dJXQrpvnJltXQr˂Hfpv|drXQr˂btlZp˂f`vtlJp˂rH~ftlJp˂rH~fl|ZdQ˂rXQ~f`˂pZpvndrtAJr˂p`vXn|ZdQbrXQJf`vlJtAvnXrtAJl˂pZHAXv`fbQZdpZHAbnXvtAJlpZHAbJtArdrXQJ`XH~tArdXQJ`ے`vXntArdXQJ`ے`vXnbtlJ`ےvXnHAے`Xv`fltbZHAbvˍpftlJ`ےbXnvd|Zv`ftbdQbے`~HXrtAJl琙ے`J`f~tbdQZے`J|ZdQےbHAfZHAb|ZdQbbHAZvpf|ZdQbbHAZvpfJtArdbHAZpvpfHJXQrb~HfdQZ|ے`JXQH~ㅐftArdtHAZp˂pfH~dQbt~HfpZ|dJXQrv`ftbdQXQr˂Hfpv|drXQr˂btlZp˂JQrtlJp˂rH~ftlJp˂rH~f|ZdQ˂rXQ~f`tlJpvndrtAJHAbے`vXnlJtArXQJf`vlJtArvnXrtAJl˂pZHA~HfpZ|dpZHAbnXvtAJlpZHAbJtArdrXQJ`˂pZHtArdXQJ`ے`vXntArdXQJ`ے`vXnbtlJ`ےvXntAd|Xv`fltb`JXQrvˍp|rd|`ےbXnvd|Zv`ftbdQbے`vnXrtAJl琙ے`J`f~tbdQZے`Jf~ےbHAAbے`f~HbHAZvpf|ZdQbbHAZvpfJtArdbHAZpvpfHZdQbt~HfdQZ|˂pZdrQtZdQbtHAZp˂pfH~dQbtHfpvZ|dJXQrv`ftbdQXQr˂Hfpv|drXQr˂HfpvZp˂JXQrfpvp˂rH~ftlJp˂rH~ftlJ˂rXQ~f`lJtApvndrtAJHAbےJltlJtArXQJf`vlJtArnrXQrtAJl˂pZHA~HfpZ|rAJpZHAbnXvtAJlpZHAbnXvrXQJ`˂pZHnXv`XQJ`ے`vXntArdXQJ`ے`vXntArdJ`ےvXnrd|Xv`fltb`JXQrbAdZ|rd|`ےbXnvd|ZJ`ےtbdQbے`v~ltbے`J`f~tbdQZے`J`f~ےbHAAbے`f~HbHAZvpf|ZdQbbHAZvpf|ZdQbbHAZpvpfHZdQbtHfpdQZ|˂p`drQtZdQtArHAZp˂pfH~dQbtHAZp˂Z|dJXQrHfpvdQZ|XQr˂Hfpv|drXQr˂HfpvZp˂JXQrfpvp˂rH~ftlJp˂rH~ftlJ˂rXQ~f`lJtAvnrdrtAJJXQrJltd|ZrXQJf`vlJtArrXQJrtAJl˂pZHAnXvdrtAJpZHAbnXvtAJlpZHAbnXvrXQJ`ZHAbnXv`XQJ`ے`vXntArdXQJ`ے`vXntArdJ`ےvXnrd|XQJ`ےltb˂pZHAbAdZ|dQbt`ےbXnvd|Z`ےbtbdQbے``f~ltbے`J`f~tbdQZے`J`f~ےbHAے`JXQf~HbHAZvpf|ZdQbbHAZvpf|ZdQtAbHAZpvpfHZdQbtHAZpdQZ|bے`drQtlJtArHAZp˂pfH~dQbtHAZp˂Z|dJXQrHfpvdQZ|XQr˂Hfpv|drXQr˂HfpvZdrr˂pfpvdrtAH~ftlJp˂rH~frd|˂rXQ~f`lJtA˂rXQdrtAJJXQrJltd|ZrXQJf`vlJtArrXQJtAJl˂pZHAnXvAJltpZHAbnXvtAJlpZHAbnXvtAdQZ|ZHAbnXv`Jlt`vXntArdXQJ`ے`vXnZdQbtJ`ےvXnrd|J`ےltb˂p`ZbAdZ|dQbt`ےbXnvd|Z`ےbtbnbے``pvbnvے`J`f~tbdQZے`J`f~drtAے`JXQf~HbdQZ|vpf|ZdQbbHAZvpflJtAbHAZpvpfHZdQbtbHAZpdQZ|QXb㉀ۂdrQtl|ZdQHAZp˂pfH~dQbtHAZp˂vpfHJXQrnXv`pfHXQr˂Hfpv|drXQr˂HfpvJltr˂pfpvdrtAH~ftlJp˂rH~frd|˂rXQ~f`lJtA˂rXQdtAJlpJAHrJltbtlrXQJf`vlJtArrXQJf`v˂pZHAf~Hf`vXpZHAbnXvtAJlpZHAbnXvbdQZ|ZAb`nXv`Jlt`vXntArdXQJ`ے`vXnZdQbtJ`ےvXnrd|J`ےtbnˁ`ZbAdZ|JtArd`ےbXnvd|Z`ےbXnvbے`fpvnvpے`J`f~tbdQZے`J`f~drtAJXQrf~HbdQZ|vpf|ZdQbbHAZvpfl|ZbHAZpvpfHZdQbtbHAZpvpfQXb㉀ۂdrQt|ZdQHAZp˂pfH~dQbtHAZp˂pfH~JXQrnXv`fH~XQr˂Hfpv|drXQr˂HfpvJltpZHAfpvdrtAH~ftlJp˂rH~fdQbt˂rXQ~f`lJtA˂rXQHf`p`ZQXJltbtlrXQJf`vlJtArrXQJf`v˂pZHApvnf`vXpZHAnXvtAJlpZHAbnXvdrtAJbے`nXv`JltZHAbtArdXQJ`ے`vXnlJtArJ`ےvXnrd|J`ےvXnb㉀ۑpbAdZ|JtArd`ےbXnvd|Z`ےbXnvے`JrXQJ`nvpے`JXQ`f~tbdQZے`J`f~ltbJXQrf~HbdQZ|ے`JXQ|ZdQbbHAZvpfd|ZbHAZpvpfHZdQbtbHAZpvpfHJAHr󙐂drQttlJHAZp˂pfH~dQbtHAZp˂pfH~XQrbtp˂rfH~rbtHfpv|drXQr˂HfpvdQZ|pZHAfpvdrtAr˂ptlJp˂rH~fdQbt˂rXQ~f`lJtA˂rXQ~f`ˁ`ZQXJlttArdrXQJf`vlJtArrXQJf`vlJtAXQJ`ےf`vXlJtAdnXvtAJlpZHAbnXvdrtAJbJQrnXv`JltZHAbtArdXQJ`ے`vXnlJtArJ`ےvXnrd|J`ےvXnb㉀ۑpbAdZ||ZdQb`ےbXnvd|Z`ےbXnvd|ZbHAZnvp|ZdQ`f~tbdQZے`J`f~ltb˂pZf~HbdQZ|ے`JXQ|ZdQbbHAZvpfdtlbHAZpvpfHZdQbtbHAZpvpfHJAHr󙐂drQttlJHAZp˂pfH~dQbtHAZp˂pfH~dQbtp˂rfH~btlHfpv|drXQr˂HfpvdQZ|lHAbےfpvdrtAr˂ptlJp˂rH~fJtArd˂rXQ~f`lJtA˂rXQ~f`ۑpJJlttArdrXQJf`vlJtArrXQJf`vlJtArXQJ`pf`vXJtArdnXvtAJlpZHAbnXvtbdQ`JXQrnXv`JltZHAbtArdXQJ`ے`vXn|ZdQJ`ےvXnrd|J`ےvXnAHr󙐂bAdZ||ZdQtA`ےbXnvd|Z`ےbXnvd|Z˂rXQnvp|ZdQ`fHtbdQZے`J`f~Z|d˂pZf~HbdQZ|ے`JXQf~HbHAZvpfbtlbHAZpvpfHZdQbtbHAZpvpfH`ZQXbdrQtrdfHAZp˂pfH~dQbtHAZp˂pfH~dQbtJ`ےfH~btlfpv|drXQr˂HfpvrtAJlHAbےfpvdrtAr˂pfpvp˂rH~fJtArd˂rXQ~f`lJtA˂rXQ~f`ۑpJJlt~HfrXQJf`vlJtArrXQJf`vlJtArbHAZpf`vXJtArdnrXQJtAJlpZHAbnXvtbdQ`JXQrnXv`JltZHAbnXv`XQJ`ے`vXn|ZdQJ`ےvXnrd|J`ےvXnAHr󙐂bAdZ|vnXv``ےbXnvd|Z`ےbXnvd|Z˂rXQnvp|ZdQ`ےHAtbdQZے`J`f~Z|dZHAbf~HbdQZ|ے`JXQf~HbHAZvpftArdbHAZpvpfHZdQbtbHAZpvpfH`ZQXAHdrQtf~HHAZdpfH~dQbtHAZp˂pfH~dQbtJ`ےfH~btlZp˂|drXQr˂HfpvrtAdQZے`JXfpvdrtAr˂pfpvp˂rH~ff~H˂rXQ~f`lJtA˂rXQ~f`r󙐂ˁ`JltfpvrtAJlf`vlJtArrXQJf`vlJtArbHAXQJf`vXJtArdrXQJ`tAJlpZHAbnXv|drQr˂pnXv`JltZHAbnXv`XQJ`ے`vXnfvnXJ`ےvXnrd|J`ےvXnZQXb㉀bAdZ|nXv`tbdQXnvd|Z`ےbXnvd|Z`ےbnvp|ZdQےbHAtbdQZے`J`f~tAJl璑ZHAbf~HbdQZ|ے`JXQf~HbHAZvpfv`fbHAZvpfHZdQbtbHAZpvpfHۑpJAHdrQtf~HZ|dpfH~dQbtHAZp˂pfH~dQbtHAZp˂fH~btlZp˂|dtAXQr˂HfpvtbdQZے`JXfpvdrtAr˂pfpvdrtAH~f~HfpdrtAJ~f`lJtA˂rXQ~f`r󙐂ˁ`JltfpvrtAJlf`vlJtArrXQJf`vlJtArrXQJf`vXJtArdrXQJ`JltpZHAbnXv|drQr˂pnXv`JltZHAbnXv`Jlt`vXnvnXltbvXnrd|J`ےvXnZQXb㉀bAdZ|nvftbdQXnvd|Z`ےbXnvd|Z`ےbnvp|ZdQےbHAbnvے`J`f~tAJl璑ZAb`f~HbdQZ|ے`JXQf~HbdQZ|vpfv`fdQZ|vpfHZdQbtbHAZpvpfHۑp`ZdrQt~HfpZ|dpfH~dQbtHAZp˂pfH~dQbtHAZp˂fH~btlZp˂pfHXQr˂HfpvtdrtAJXQrfpvdrtAr˂pfpvdrtAH~f~HfpdrtAJ~f`lJtA˂rXQ~f`QXb㉀JltvnXrtAJlfZHAlJtArrXQJf`vlJtArbHAf`vXJtArdrXQJ`f`vXpZHAbnXvJlt˂pZHAnXv`JltZHAbnXv`Jlt`vXnvnvfltbvXnrd|J`ےvXnpJAHrbAdZ|v`ftbdQbے`d|Z`ےbXnvd|ZZp˂nvp|ZdQےbHAnvpے`J`f~bdQZ|bے`f~HbdQZ|ے`JXQf~HbdQZ|vpf~HfdQZ|vpfHZdQbtbHAZpvpfHˁ`ZdrQt~HfpZ|dJXQrdQbtHAZp˂pfH~dQbtrXQJ`fH~btlZp˂fH~XQr˂HfpvdrtAJXQrfpvdrtAr˂pfpvdrtAH~fpvndrtAJ~fZlJtA˂rXQ~f`QXb㉀JltvnXrtAJl˂pZHAlJtArrXQJf`vlJtArےbHAf`vXJtArdrXQJ`f`vXpZHAnXvJlt˂pZAnXv`JltZHAbnXv`JltZHAbXv`fltbHAbےrd|J`ےvXnpJAHrbAdZ|v`f~tbdQbے`d|Z`ےbXnvd|ZZp˂nvp|ZdQےbHAnvpے`JXQ`f~bdQZ|`JXQrf~HbdQZ|ے`JXQf~HbdQZ|˂pZ~HfdQZ|`JXQrZdQbtbHAZpvpfHۑpdrQtfpvZ|dJXQrdQbtHAZp˂pfH~dQbtrXQJ`fH~btlZp˂fH~rbtHfpvltbbtlfpvdrtAr˂pfpvdrtAHAbےpvndrtAJ˂pZlJtA˂rXQ~f`JAHrJltnXv`rtAJl˂pZHAlJtArrXQJf`vlJtArp˂rf`vXJtArdrXQJ`f`vXlJtAdnXvdQZ|JtAdnXv`JltZHAbnXv`Jlt`JXQrXv`fltbHAbےrd|J`ےvXnˁ`ZQXbAdZ|--------------------............................................................. \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv40_3.dat b/vendor/endroid/qr-code/assets/data/qrv40_3.dat new file mode 100644 index 000000000..03defc8cd --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrv40_3.dat @@ -0,0 +1,353 @@ +~}~}~}~}zyzyzyzyxwxwxwxwtstststsopopopoolklklklkjijijijifefefefe~}~}~}~}zyzyzyzyxwxwxwvutstststsoooopopolklklklkjijijijifefefefe~}~}~}~}zyzyzyzyvuvuvuvutstststspopopopolklklklkjijijijifefefefe~}~}~}~}zyzyzyzyvuvuvuvutstststspopopopolklklklkjijijijifefefefe~}~}~}~}zyzyzyzyvuvuvuvutstststspopopopolklklklkjijijijifefefefe~}~}~}|{zyzyzyzyvuvuvuvutstststspopopopolklklklkjijijijifefefefe|{|{|{|{zyzyzyzyvuvuvuvutstststspopopopolklklklkjijijijifefefefe|{|{|{|{zyzyzyzyvuvuvuvutstststspooooooplklklklkjijijijifefefefe|{|{|{|{zyzyzyzyvuvuvuvutstststsopopopoplklklklkjijijijifefefefe|{|{|{|{zyzyzyzyvuvuvuvutstststsopopopoplklklklkjijijijifefefefe|{|{|{|{zyzyzyzyvuvuvuvutstststsopopopoplklklklkjijijijifefefefe|{|{|{|{zyzyzyzyvuvuvuvutstststsopopopoplklklklkjijijijifefefefe|{|{|{|{zyzyzyzyvuvuvuvutstststsopopopoplklklklkjijijijifefefefe|{|{|{|{zyzyzyzyvuvuvuvutsrqrqrqopopoooolklklklkjijijijifefefefe|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqoopopopolklklklkjijijijifefefefe|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklkjijijijifefefefe|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklkjijihghgfefefefe|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklkhghghghgfefefefe|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpopopopolklklklkhghghghgfefefefe|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqoooopopolklklklkhghghghgfefefefe|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqpoponmnmlklklklkhghghghgfefefefe|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe|{|{|{|{zyzyzyzyvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe|{|{|{|{zyzyzyxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefe~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefedcdcdcdc~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefefefedcdcdcdc~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgfefedcdcdcdcdcdc~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgdcdcdcdcdcdcdcdc~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgdcdcdcdcdcdcdcdc~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklklklkhghghghgdcdcdcdcdcdcdcdc~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmlklkjijihghghghgdcdcdcdcdcdcdcdc~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcdcdcdcdc~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcdcdcdcdc~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcdcdcdcdc~}~}~}~}|{|{|{|{xwxwxwxwvuvuvuvurqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcdcdcdcdc~}~}~}~}|{|{|{|{xwxwxwxwvuvuvutsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcdcdcdcdc~}~}~}~}|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcdcdcbaba~}~}~}~}|{|{|{|{xwxwxwxwtstststsrqrqrqrqnmnmnmnmjijijijihghghghgdcdcdcdcbabababa~}~}~}~}|{|{|{|{xwxwxwxwtstststsrqrqrqponmnmnmnmjijijijihghghghgdcdcdcdcbabababa~}~}~}~}|{|{|{zyxwxwxwxwtstststspopopooonmnmnmnmjijijijihghghghgdcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststsooopopopnmnmnmnmjijijijihghghghgdcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststsopopopopnmnmnmnmjijijijihghghghgdcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststsopopopopnmnmnmnmjijijijihghghghgdcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststsopopopopnmnmnmnmjijijijihghghghgdcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststsopopopopnmnmnmnmjijijijihghghghgdcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststsopopopopnmnmnmnmjijijijihghghghgdcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststsooooooponmnmnmnmjijijijihghghghgdcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijijihghghghgdcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijijihghghghgdcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijijihghghghgdcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijijihghgfefedcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststspopopoponmnmnmnmjijijijifefefefedcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststspopooooonmnmnmnmjijijijifefefefedcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststsopopopopnmnmnmnmjijijijifefefefedcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststsopopopopnmnmlklkjijijijifefefefedcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststsopopopoplklklklkjijijijifefefefedcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststsopopopoplklklklkjijijijifefefefedcdcdcdcbabababa~}~}~}~}zyzyzyzyxwxwxwxwtstststsopopopoplklklklkjijijijifefefefedcdcdcdcbabababababababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;787777774343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?>=>=>=<;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA>=>=>=>=<;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    babababa^]^]^]^]\[\[\[\[XWXWXWXWSSSSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEDCDCDCBABABABA>=>=>=>=<;<;<;<;878787874343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    babababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;878787774343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    babababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;777878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    babababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;787878784343434321212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"!    babababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMLKJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;787878784343434321212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"!    babababa^]^]^]^]\[\[\[\[XWXWXWXWTSTSTSTSRQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;787878784343434321212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"!    babababa^]^]^]^]\[\[\[\[XWXWXWXWTSSSSSSTRQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;<;787878784343434321212121.-.-.-.-,+,+,+,+('('('('$#$#$#$#"!"!"!"!    babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTRQRQRQRQNMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=<;<;<;:9787878784343434321212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTRQPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:9777777874343434321212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:9878787874343434321212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:9878787874343434321212121.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:987878787434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + babababa^]^]^]^]\[\[\[\[XWXWXWXWSTSTSSSSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:987878787434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + babababa^]^]^]^]\[\[ZYZYXWXWXWXWSSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:987877777434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + babababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:987878787434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + babababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + babababa^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + baba`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + `_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + `_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWSSSSSTSTPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBABABABA>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + `_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTSTPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDCBA@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + `_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTSTPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + `_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTSTPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#"!"!"!"!    + + + + `_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTSTPOPOPOPONMNMNMNMJIJIJIJIHGHGHGHGDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + `_`_`_`_^]^]^]^]ZYZYZYZYXWXWXWXWSTSTSTSTPOPOPOPONMNMNMNMJIJIJIJIHGFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + `_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUSTSSSSSSPOPOPOPONMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + `_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)('('('('$#$#$#$#        + + + + `_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPONMNMNMNMJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + `_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPONMLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + `_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + `_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSTSTSSSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/.-.-.-.-*)*)*)*)&%&%&%&%$#$#$#$#        + + + + `_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUSSTSTSTSPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + `_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVUTSRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#        + + + + `_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#       + + + + `_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565434343430/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + `_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + `_`_`_`_^]^]^]^]ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + `_`_`_`_^]^]\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=>=>=>=:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?>=<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:9:9:9:965656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCDCDCDC@?@?@?@?<;<;<;<;:987878765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEDCBABABA@?@?@?@?<;<;<;<;8777777865656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;7878787865656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;7878787865656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%$#$#$#$#     + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIJIJIJIFEFEFEFEBABABABA@?@?@?@?<;<;<;<;7878787865656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!     + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKJIHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;7878787865656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!     + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;7878787865656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!     + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;7878777765656565212121210/0/0/0/,+,+,+,+*)*)*)*)&%&%&%&%"!"!"!"!     + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPOPOPOPOLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;7787878765656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQPONMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!     + + + `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;8787878765656565212121210/0/0/0/,+,+,+,+('('('('&%&%&%&%"!"!"!"!     `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;878787876565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     `_`_`_`_\[\[\[\[ZYZYZYZYVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;878787876565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     `_`_`_`_\[\[\[\[ZYZYXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;777778786565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!     `_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;787878786565656521212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!      `_`_`_`_\[\[\[\[XWXWXWXWVUVUVUVURQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    `_`_`_`_\[\[\[\[XWXWXWXWVUVUTSTSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    `_`_^]^]\[\[\[\[XWXWXWXWTSTSSSSSRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    ^]^]^]^]\[\[\[\[XWXWXWXWSTSTSTSTRQRQRQRQNMNMNMNMLKLKLKLKHGHGHGHGFEFEFEFEBABABABA@?@?@?@?<;<;<;<;787878784343434321212121.-.-.-.-,+,+,+,+('('('('&%&%&%&%"!"!"!"!    qqrrsstt^^__``aa55667788llkkjjiiUUVVWWXXLLKKJJIIzz{{||}}**++,,--''&&%%$$wwvvuuttJJKKLLMMCCBBAA@@\[[ZZYYXooppqqrr !!""uuvvwwxxbbccddee99::;;<<hhggffeeYYZZ[[\\ + + HHGGFFEE~~..//0011##""!! ssrrqqppNNOOPPQQ??>>==77WVUTSSRRssttuuvv##$$%%&&yyzz{{||ffgghhii==>>??@@ddccbbaa]]^^__`` DDCCBBAA22334455oonnmmllRRSSTTUU66554433QQPPOONNwwxxyyzz''(())**}}~~jjkkllmmAABBCCDD ``__^^]]aabbccdd@@??>>==66778899kkjjiihhVVWWXXYY 221100//MMLLKKJJ{{||}}~~++,,--..nnoouuvvEEFFGGHH + + \\[[ZZYYeeffgghh<<;;::99::;;<<==ggffeeddZZ[[\\]] + + ..--,,++IIHHGGFF//001122wwxxyyzzIIJJKKLLXXWWVVUUiijjkkll88776655~~}}||{{>>??@@AAccbbaa``^^__``aa**))((''EEDDCCBB33445566{{||}}~~MMNNOOPPTTSSRRQQmmnnoopp 44332211zzyyxxwwBBCCDDEE __^^]]\\bbccddee&&%%$$##AA@@??>>778899::QQRRSSTTPPOONNMMqqrrsstt!!""##$$00//..--vvuuoonnFFGGHHII + + [[ZZYYXXffgghhii""!!==<;:987;;<<==>>UUVVWWXXLLKKJJIIuuvvwwxx%%&&''((,,++**))mmllkkjjJJKKLLMMWWVVUUTTjjkkllmm76655443??@@AABBYYZZ[[\\ + + HHGGFFEEyyzz{{||))**++,,((''&&%%iihhggff~~}}||NNOOPPQQSSRRQQPPnnooppqq !!3221100/~~}}||{{CCDDEEFF]]^^__`` DDCCBBAA}}~~--..//00$$##""!!eeddccbb{{zzyyxxRRSSTTUUOONNMMLLrrssttuu""##$$%%/..--,,+zzyyxxwwGGHHIIJJaabbccdd@@??>>==11223344 aa``__^^wwvvuutsVVWWXXYY KKJJIIHHvvwwxxyy&&''(()) + ++**))(('vvuuttssKKLLMMNN~~}}eeffgghh<<;;::9955667788]]\\[[ZZrqpoonnmZZ[[\\]] + + GGFFEEDDzz{{||}}**++,,-- '&&%%$$#rrqqppooOOPPQQRR||{{zzyyiijjkkll8877665599::;;<<YYSSRRQQmllkkjji^^__``aaCCBBAA@@~~..//0011#""!! nnmmllkkSSTTUUVVxxwwvvuummnnoopp 44332211==>>??@@PPOONNMMihhggffebbccddee??>>==<<22334455 + + jjiihhggWWXXYYZZttssrrqqqqrrsstt!!""##$$00//..--~~}}AABBCCDD LLKKJJIIeddccbbaffgghhii;;::998866778899 ffeeddcc[[\\]]^^ppoonnmmuuvvwwxx%%&&''((,,++**))||{{zzyyEEFFGGHH + + HHGGFFEEa``__^^]jjkkllmm77665544::;;<<==bbaa``____``aabbllkkjjiiyyzz{{||))**++,,((''&&%%xxwwvvuuIIJJKKLLDDCCBBAA]\\[[ZZYnnooppqq !!33221100>>??@@AA ^^]]\\[[ccddeeffhhggffee}}~~--..//00$$##""!!ttssrrqqMMNNOOPP@@??>>==YXWVUTSSrrssttuu""##$$%%//..--,,~~}}||BBCCDDEE + + ZZYYXXWWgghhiijjddccbbaa11223344 ppoonnmmQQRRSSTT77665544RRQQPPOOvvwwxxyy&&''(())++**))(({{zzyyxxFFGGHHII!!""##$$VVUUTTSSkkllmmnn``__^^]]55667788llkkjjiiUUVVWWXX33221100NNMMLLKKzz{{||}}**++,,--''&&%%$$wwvvuuttJJKKLLMM%%&&''((RRQQPPOOooppqqrr\\[[ZZYY99::;;<<hhggffeeYYZZ[[\\ + + //..--,,JJIIHHGG~~..//0011##""!! ssrrqqppNNOOPPQQ))**++,,NNMMLLKKssttuuvvXXWWVVUU==>>??@@ddccbbaa]]^^__`` ++**))((FFEEDDCC22334455oonnmmllRRSSTTUU--..//00 + +JJIIHHGGwwxxyyzzTTSSRRQQAABBCCDD ``__^^]]aabbccdd''&&%%$$BBAA@@??66778899kkjjiihhVVWWXXYY11223344 FFEEDDCC{{||}}~~PPOONNMMEEFFGGHH + + \\[[ZZYYeeffgghh##""!!>>==<;:9::;;<<==ggffeeddZZ[[\\]]556677==BBAA@@??LLKKJJIIIIJJKKLLXXWWVVUUiijjkkll87766554>>??@@AAccbbaa``^^__``aa>>??@@AA>>==<<;;HHGGFFEE~~}}||{{MMNNOOPPTTSSRRQQmmnnoopp 43322110~~}}||BBCCDDEE __^^]]\\bbccddeeBBCCDDEE::998877DDCCBBAAzzyyxxwwQQRRSSTTPPOONNMMqqrrsstt!!""##$$0//..--,{{zzyyxxFFGGHHII + + [[ZZYYXXffgghhiiFFGGHHII66554433@@??>>==vvuuoonn~~}}||UUVVWWXXLLKKJJIIuuvvwwxx%%&&''(( ,++**))(wwvvuuttJJKKLLMMWWVVUUTTjjkkllmmJJKKLLMM !!""221100//<<;;::99mmllkkjj{{zzyyxxYYZZ[[\\ + + HHGGFFEEyyzz{{||))**++,, + + (''&&%%$ssrrqqppNNOOPPQQSSRRQQPPnnooppqqNNOOPPQQ##$$%%&&..--,,++~~}}||{{88776655iihhggffwwvvuuts]]^^__`` DDCCBBAA}}~~--..//00$##""!! oonnmmllRRSSTTUUOONNMMLLrrssttuuRRSSYYZZ''(())****))((''zzyyxxww44332211eeddccbbrqpoonnmaabbccdd@@??>>==11223344 + +kkjjiihhVVWWXXYY KKJJIIHHvvwwxxyy[[\\]]^^++,,--..&&%%$$##vvuuttss00//..--aa``__^^mllkkjjieeffgghh<<;;::9955667788 ggffeeddZZ[[\\]] + + GGFFEEDDzz{{||}}__``aabb//001122""!! rrqqppoo,,++**))]]\\[[ZZihhggffeiijjkkll8877665599::;;<<ccbbaa``^^__``aaCCBBAA@@~~ccddeeff33445566nnmmllkk((''&&%%YYSSRRQQeddccbbammnnoopp 44332211==>>??@@__^^]]\\bbccddee??>>==<>ffeeddcc..--,,++ LLKKJJII]\\[[ZZYuuvvwwxx%%&&''((,,++**))||{{zzyyEEFFGGHH!!""## WWVVUUTTjjkkllmm77665544oouuvvww??@@AABBbbaa``__**))((''HHGGFFEEYXWVUTSSyyzz{{||))**++,,((''&&%%xxwwvvuuIIJJKKLL$$%%&&''SSRRQQPPnnooppqq !!33221100xxyyzz{{CCDDEEFF ^^]]\\[[&&%%$$##DDCCBBAARRQQPPOO}}~~--..//00$$##""!!ttssrrqqMMNNOOPP(())**++OONNMMLLrrssttuu""##$$%%//..--,,~~}}||||}}~~GGHHIIJJ + + ZZYYXXWW""!! @@??>>==NNMMLLKK11223344 ppoonnmmQQRRSSTT,,--..// KKJJIIHHvvwwxxyy&&''(())++**))(({{zzyyxxKKLLMMNNVVUUTTSS 77665544JJIIHHGG55667788llkkjjiiUUVVWWXX00112233 + + GGFFEEDDzz{{||}}**++,,--''&&%%$$wwvvuuttOOPPQQRRRRQQPPOO + + 33221100FFEEDDCC99::;;<<hhggffeeYYZZ[[\\44556677CCBBAA@@~~..//0011##""!! ssrrqqppSSTTUUVVNNMMLLKK + + //..--,,BBAA@@??==>>??@@ddccbbaa]]^^__``==>>??@@??>>==<<22334455oonnmmllWWXXYYZZ + +JJIIHHGG ++**))((>>==<;:9~~}}AABBCCDD ``__^^]]aabbccddAABBCCDD;;::998866778899kkjjiihh[[\\]]^^ FFEEDDCC ''&&%%$$87766554||{{zzyyEEFFGGHH + + \\[[ZZYYeeffgghhEEFFGGHH77665544::;;<<==ggffeedd__``aabbBBAA@@?? + + ##""!!43322110xxwwvvuuIIJJKKLLXXWWVVUUiijjkkllIIJJKKLL !!33221100>>??@@AAccbbaa``ccddeeff>>==<<;;0//..--,ttssrrqqMMNNOOPPTTSSRRQQmmnnooppMMNNOOPP""##$$%%//..--,,~~}}||BBCCDDEE __^^]]\\gghhiijj::998877 ,++**))(ppoonnmmQQRRSSTTPPOONNMMqqrrssttQQRRSSYY&&''(())++**))(({{zzyyxxFFGGHHII + + [[ZZYYXXkkllmmnn66554433!!""##$$(''&&%%$llkkjjiiUUVVWWXXLLKKJJIIuuvvwwxxZZ[[\\]]**++,,--''&&%%$$wwvvuuttJJKKLLMMWWVVUUTTooppqqrr !!""221100// + +%%&&''(( $##""!! hhggffeeYYZZ[[\\ + + HHGGFFEEyyzz{{||^^__``aa..//0011##""!! ssrrqqppNNOOPPQQSSRRQQPPssttuuvv##$$%%&&..--,,++~~}}||{{ ))**++,, + + + +ddccbbaa]]^^__`` DDCCBBAA}}~~bbccddee22334455oonnmmllRRSSTTUUOONNMMLLwwxxyyzz''(())****))((''zzyyxxww--..//00 ``__^^]]aabbccdd@@??>>==ffgghhii66778899kkjjiihhVVWWXXYY KKJJIIHH{{||}}~~++,,--..&&%%$$##vvuuttss11223344\\[[ZZYYeeffgghh<<;;::99jjkkllmm::;;<<==ggffeeddZZ[[\\]] + + GGFFEEDD//001122""!! rrqqppoo55667788XXWWVVUUiijjkkll88776655nnoouuvv>>??@@AAccbbaa``^^__``aaCCBBAA@@33445566nnmmllkk99::;;<< + +TTSSRRQQmmnnoopp 44332211wwxxyyzzBBCCDDEE __^^]]\\bbccddee??>>==<<778899::jjiihhgg !!""==>>??@@!!""## PPOONNMMqqrrsstt!!""##$$00//..--~~}}{{||}}~~FFGGHHII + + [[ZZYYXXffgghhii;;::9988~~;;<<==>>ffeeddcc##$$%%&&AABBCCDD$$%%&&''LLKKJJIIuuvvwwxx%%&&''((,,++**))||{{zzyyJJKKLLMMWWVVUUTTjjkkllmm77665544}}||{{zz??@@AABBbbaa``__''(())**EEFFGGHH(())**++ + + HHGGFFEEyyzz{{||))**++,,((''&&%%xxwwvvuuNNOOPPQQSSRRQQPPnnooppqq !!33221100yyxxwwvvCCDDEEFF ^^]]\\[[++,,--..IIJJKKLL,,--..// DDCCBBAA}}~~--..//00$$##""!!ttssrrqqRRSSTTUUOONNMMLLrrssttuu""##$$%%//..--,,uuoonnmmGGHHIIJJ + + ZZYYXXWW//001122MMNNOOPP00112233@@??>>==11223344 ppoonnmmVVWWXXYY KKJJIIHHvvwwxxyy&&''(())++**))((llkkjjiiKKLLMMNNVVUUTTSS33445566QQRRSSTT44556677<<;;::9955667788llkkjjiiZZ[[\\]] + + GGFFEEDDzz{{||}}**++,,--''&&%%$$hhggffee~~}}||{{OOPPQQRRRRQQPPOO778899::UUVVWWXX==>>??@@8877665599::;;<<hhggffee^^__``aaCCBBAA@@~~..//0011##""!! ddccbbaazzyyxxwwSSTTUUVVNNMMLLKK;;<<==>>YYZZ[[\\AABBCCDD 44332211==>>??@@ddccbbaabbccddee??>>==<<22334455``__^^]]vvuutsrqWWXXYYZZ + +JJIIHHGG??@@AABB]]^^__``EEFFGGHH!!""##$$00//..--~~}}AABBCCDD ``__^^]]ffgghhii;;::998866778899\\[[ZZYYpoonnmml[[\\]]^^ FFEEDDCCCCDDEEFFaabbccddIIJJKKLL%%&&''((,,++**))||{{zzyyEEFFGGHH + + \\[[ZZYYjjkkllmm77665544::;;<<==SSRRQQPPlkkjjiih__``aabbBBAA@@??GGHHIIJJeeffgghhMMNNOOPP))**++,,((''&&%%xxwwvvuuIIJJKKLLXXWWVVUUnnooppqq !!33221100>>??@@AAOONNMMLLhggffeedccddeeff>>==<<;;KKLLMMNNiijjkkllQQRRSSYY--..//00$$##""!!ttssrrqqMMNNOOPPTTSSRRQQrrssttuu""##$$%%//..--,,~~}}||BBCCDDEE KKJJIIHHdccbbaa`gghhiijj::998877OOPPQQRRmmnnooppZZ[[\\]]11223344 ppoonnmmQQRRSSTTPPOONNMMvvwwxxyy&&''(())++**))(({{zzyyxxFFGGHHII + + GGFFEEDD`__^^]]\kkllmmnn66554433SSTTUUVVWWXXYYZZ + +JJIIHHGG||}}~~,,--..//%%$$##""uuttssrrLLMMNNOOAA@@??>>ZYYXWVUTqqrrsstt!!""##$$00//..--~~}}AABBCCDD + +[[ZZYYXXffgghhii;;::9988~~}}||{{{{zzyyxx[[\\]]^^ FFEEDDCC00112233!! qqppoonnPPQQRRSS==776655SSRRQQPPuuvvwwxx%%&&''((,,++**))||{{zzyyEEFFGGHH!!""## WWVVUUTTjjkkllmm77665544zzyyxxwwwwvvuutt__``aabbBBAA@@??44556677mmllkkjjTTUUVVWW44332211OONNMMLLyyzz{{||))**++,,((''&&%%xxwwvvuuIIJJKKLL$$%%&&''SSRRQQPPnnooppqq !!33221100vvuuoonnssrrqqppccddeeff>>==<<;;8899::;;iihhggffXXYYZZ[[ + + 00//..--KKJJIIHH}}~~--..//00$$##""!!ttssrrqqMMNNOOPP(())**++OONNMMLLrrssttuu""##$$%%//..--,,mmllkkjjoonnmmllgghhiijj::998877~~}}<<==>>??eeddccbb\\]]^^__ ,,++**))GGFFEEDD11223344 ppoonnmmQQRRSSTT,,--..// KKJJIIHHvvwwxxyy&&''(())++**))((iihhggffkkjjiihhkkllmmnn66554433||{{zzyy@@AABBCCaa``__^^``aabbcc((''&&%%CCBBAA@@55667788llkkjjiiUUVVWWXX00112233 + + GGFFEEDDzz{{||}}**++,,--''&&%%$$eeddccbbggffeeddooppqqrr !!""221100//xxwwvvuuDDEEFFGG + +]]\\[[ZZddeeffgg$$##""!!??>>==<;99::;;<<hhggffeeYYZZ[[\\44556677CCBBAA@@~~..//0011##""!! aa``__^^ccbbaa``ssttuuvv##$$%%&&..--,,++oonnmmllHHIIJJKK YYXXWWVVhhiijjkk:9877665==>>??@@ddccbbaa]]^^__``==>>??@@??>>==<<22334455]]\\[[ZZ__^^]]\\wwxxyyzz''(())****))((''kkjjiihh~~LLMMNNOOUUTTSSRRllmmnnoo54433221~~}}AABBCCDD ``__^^]]aabbccddAABBCCDD;;::998866778899YYSSRRQQ[[ZZYYXX{{||}}~~++,,--..&&%%$$##ggffeedd}}||{{zzPPQQRRSSQQPPOONNppqqrrss !!""##100//..-||{{zzyyEEFFGGHH + + \\[[ZZYYeeffgghhEEFFGGHH77665544::;;<<==PPOONNMMWWVVUUTT//001122""!! ccbbaa``yyxxwwvvTTUUVVWWMMLLKKJJttuuvvww$$%%&&'' -,,++**)xxwwvvuuIIJJKKLLXXWWVVUUiijjkkllIIJJKKLL !!33221100>>??@@AALLKKJJIISSRRQQPP33445566__^^]]\\uutsrqpoXXYYZZ[[ + + IIHHGGFFxxyyzz{{(())**++ + + )((''&&%ttssrrqqMMNNOOPPTTSSRRQQmmnnooppMMNNOOPP""##$$%%//..--,,~~}}||BBCCDDEE HHGGFFEEOONNMMLL778899::[[ZZYYSSonnmmllk\\]]^^__ EEDDCCBB||}}~~,,--..//%$$##""!ppoonnmmQQRRSSTTPPOONNMMqqrrssttQQRRSSYY&&''(())++**))(({{zzyyxxFFGGHHII + + DDCCBBAAKKJJIIHH;;<<==>>RRQQPPOOkjjiihhg``aabbccAA@@??>>00112233 ! llkkjjiiUUVVWWXXLLKKJJIIuuvvwwxxZZ[[\\]]**++,,--''&&%%$$wwvvuuttJJKKLLMM@@??>>==GGFFEEDD??@@AABBNNMMLLKKgffeeddcddeeffgg==<<;;::44556677 + + hhggffeeYYZZ[[\\ + + HHGGFFEEyyzz{{||^^__``aa..//0011##""!! ssrrqqppNNOOPPQQ77665544CCBBAA@@CCDDEEFF JJIIHHGGcbbaa``_hhiijjkk998877668899::;;ddccbbaa]]^^__`` DDCCBBAA}}~~bbccddee22334455oonnmmllRRSSTTUU33221100??>>==<>??``__^^]]aabbccdd@@??>>==ffgghhii66778899kkjjiihhVVWWXXYY //..--,,;;::9988KKLLMMNNBBAA@@??[ZZYYXWVppqqrrss !!""##1100//..~~@@AABBCC \\[[ZZYYeeffgghh<<;;::99jjkkllmm::;;<<==ggffeeddZZ[[\\]] + + ++**))((77665544OOPPQQRR>>==7766UTSSRRQQttuuvvww$$%%&&''--,,++**}}||{{zzDDEEFFGG!!"" + + XXWWVVUUiijjkkll88776655nnoouuvv>>??@@AAccbbaa``^^__``aa''&&%%$$33221100SSTTUUVV55443322PPOONNMMxxyyzz{{(())**++))((''&&yyxxwwvvHHIIJJKK##$$%%&&TTSSRRQQmmnnoopp 44332211wwxxyyzzBBCCDDEE __^^]]\\bbccddee##""!!//..--,,WWXXYYZZ + +1100//..LLKKJJII||}}~~,,--..//%%$$##""uuttssrrLLMMNNOO''(())**PPOONNMMqqrrsstt!!""##$$00//..--~~}}{{||}}~~FFGGHHII + + [[ZZYYXXffgghhii++**))(([[\\]]^^ --,,++**HHGGFFEE00112233!! qqppoonnPPQQRRSS++,,--..LLKKJJIIuuvvwwxx%%&&''((,,++**))||{{zzyyJJKKLLMMWWVVUUTTjjkkllmm''&&%%$$__``aabb))((''&&DDCCBBAA44556677mmllkkjjTTUUVVWW//001122 + + HHGGFFEEyyzz{{||))**++,,((''&&%%xxwwvvuuNNOOPPQQSSRRQQPPnnooppqq !!##""!! ccddeeff%%$$##""@@??>>==8899::;;iihhggffXXYYZZ[[33445566 DDCCBBAA}}~~--..//00$$##""!!ttssrrqqRRSSTTUUOONNMMLLrrssttuu""##$$%% gghhiijj!!<;:98776<<==>>??eeddccbb\\]]^^__77==>>??@@??>>==11223344 ppoonnmmVVWWXXYY KKJJIIHHvvwwxxyy&&''(()) + + + +kkllmmnn65544332~~@@AABBCCaa``__^^``aabbcc@@AABBCC<<;;::9955667788llkkjjiiZZ[[\\]] + + GGFFEEDDzz{{||}}**++,,-- ooppqqrr !!""21100//.}}||{{zzDDEEFFGG + +]]\\[[ZZddeeffggDDEEFFGG8877665599::;;<<hhggffee^^__``aaCCBBAA@@~~..//0011ssttuuvv##$$%%&& .--,,++*yyxxwwvvHHIIJJKK YYXXWWVVhhiijjkkHHIIJJKK 44332211==>>??@@ddccbbaabbccddee??>>==<<22334455 wwxxyyzz''(())** + + *))((''&uuttssrrLLMMNNOOUUTTSSRRllmmnnooLLMMNNOO!!""##$$00//..--~~}}AABBCCDD ``__^^]]ffgghhii;;::998866778899 + + {{||}}~~++,,--..&%%$$##"qqppoonnPPQQRRSSQQPPOONNppqqrrssPPQQRRSS%%&&''((,,++**))||{{zzyyEEFFGGHH + + \\[[ZZYYjjkkllmm77665544::;;<<==!!""## + + //001122"!! mmllkkjjTTUUVVWWMMLLKKJJttuuvvwwYYZZ[[\\))**++,,((''&&%%xxwwvvuuIIJJKKLLXXWWVVUUnnooppqq !!33221100>>??@@AA$$%%&&''33445566 + + iihhggffXXYYZZ[[ + + IIHHGGFFxxyyzz{{]]^^__``--..//00$$##""!!ttssrrqqMMNNOOPPTTSSRRQQrrssttuu""##$$%%//..--,,~~}}||BBCCDDEE(())**++778899:: eeddccbb\\]]^^__ EEDDCCBB||}}~~aabbccdd11223344 ppoonnmmQQRRSSTTPPOONNMMvvwwxxyy&&''(())++**))(({{zzyyxxFFGGHHII,,--..//;;<<==>>aa``__^^``aabbccAA@@??>>eeffgghh55667788llkkjjiiUUVVWWXXLLKKJJIIzz{{||}}**++,,--''&&%%$$wwvvuuttJJKKLLMM00112233??@@AABB ]]\\[[ZZddeeffgg==<<;;::iijjkkll99::;;<<hhggffeeYYZZ[[\\ + + HHGGFFEE~~..//0011##""!! ssrrqqppNNOOPPQQ44556677 !!~~}}||{{CCDDEEFF!! + + YYXXWWVVhhiijjkk99887766mmnnoouu==>>??@@ddccbbaa]]^^__`` DDCCBBAA22334455oonnmmllRRSSTTUU==>>??@@""##$$%%zzyyxxwwGGHHIIJJ""##$$%%UUTTSSRRllmmnnoo55443322vvwwxxyyAABBCCDD ``__^^]]aabbccdd@@??>>==66778899kkjjiihhVVWWXXYYAABBCCDD&&''(())vvuuttssKKLLMMNN&&''(())QQPPOONNppqqrrss !!""##1100//..~~zz{{||}}EEFFGGHH + + \\[[ZZYYeeffgghh<<;;::99::;;<<==ggffeeddZZ[[\\]]EEFFGGHH**++,,--rrqqppooOOPPQQRR**++,,--MMLLKKJJttuuvvww$$%%&&''--,,++**}}||{{zz~~IIJJKKLLXXWWVVUUiijjkkll88776655~~}}||{{>>??@@AAccbbaa``^^__``aaIIJJKKLL..//0011nnmmllkkSSTTUUVV..//0011 + + IIHHGGFFxxyyzz{{(())**++))((''&&yyxxwwvvMMNNOOPPTTSSRRQQmmnnoopp 44332211zzyyxxwwBBCCDDEE __^^]]\\bbccddeeMMNNOOPP22334455jjiihhggWWXXYYZZ22334455 EEDDCCBB||}}~~,,--..//%%$$##""uuttssrrQQRRSSTTPPOONNMMqqrrsstt!!""##$$00//..--vvuuoonnFFGGHHII + + [[ZZYYXXffgghhiiQQRRSSYY66778899ffeeddcc[[\\]]^^6677==>>AA@@??>>00112233!! qqppoonnUUVVWWXXLLKKJJIIuuvvwwxx%%&&''((,,++**))mmllkkjjJJKKLLMMWWVVUUTTjjkkllmmZZ[[\\]]::;;<<==bbaa``____``aabb??@@AABB==<<;;::44556677mmllkkjjYYZZ[[\\ + + HHGGFFEEyyzz{{||))**++,,((''&&%%iihhggff~~}}||NNOOPPQQSSRRQQPPnnooppqq^^__``aa>>??@@AA^^]]\\[[ccddeeffCCDDEEFF998877668899::;;iihhggff]]^^__`` DDCCBBAA}}~~--..//00$$##""!!eeddccbb{{zzyyxxRRSSTTUUOONNMMLLrrssttuubbccddeeBBCCDDEEZZYYXXWWgghhiijjGGHHIIJJ55443322<<==>>??eeddccbbaabbccdd@@??>>==11223344 aa``__^^wwvvuutsVVWWXXYY KKJJIIHHvvwwxxyyffgghhiiFFGGHHIIVVUUTTSSkkllmmnnKKLLMMNN !!""##1100//..~~@@AABBCCaa``__^^eeffgghh<<;;::9955667788]]\\[[ZZrqpoonnmZZ[[\\]] + + GGFFEEDDzz{{||}}jjkkllmmJJKKLLMMRRQQPPOOooppqqrrOOPPQQRR$$%%&&''--,,++**}}||{{zzDDEEFFGG + +]]\\[[ZZiijjkkll8877665599::;;<<YYSSRRQQmllkkjji^^__``aaCCBBAA@@~~nnoouuvvNNOOPPQQNNMMLLKKssttuuvvSSYYZZ[[(())**++))((''&&yyxxwwvvHHIIJJKK YYXXWWVVmmnnoopp 44332211==>>??@@PPOONNMMihhggffebbccddee??>>==<>==<<;;hhiijjkk8899::;;iihhggffXXYYZZ[[ + + IIHHGGFF}}~~--..//00$$##""!!ttssrrqqMMNNOOPP@@??>>==YXWVUTSSrrssttuu""##$$%%//..--,,~~}}||bbccddee::998877llmmnnoo<<==>>??eeddccbb\\]]^^__ EEDDCCBB11223344 ppoonnmmQQRRSSTT77665544RRQQPPOOvvwwxxyy&&''(())++**))(({{zzyyxxffgghhii66554433uuvvwwxx@@AABBCCaa``__^^``aabbccAA@@??>>55667788llkkjjiiUUVVWWXX33221100NNMMLLKKzz{{||}}**++,,--''&&%%$$wwvvuuttjjkkllmm221100//yyzz{{||DDEEFFGG + +]]\\[[ZZddeeffgg==<<;;::99::;;<<hhggffeeYYZZ[[\\ + + //..--,,JJIIHHGG~~..//0011##""!! ssrrqqppnnooppqq..--,,++~~}}||{{}}~~HHIIJJKK YYXXWWVVhhiijjkk99887766~~}}||==>>??@@ddccbbaa]]^^__`` ++**))((FFEEDDCC22334455oonnmmllrrssttuu**))((''zzyyxxwwLLMMNNOOUUTTSSRRllmmnnoo55443322{{zzyyxxAABBCCDD ``__^^]]aabbccdd''&&%%$$BBAA@@??66778899kkjjiihhvvwwxxyy&&%%$$##vvuuttssPPQQRRSSQQPPOONNppqqrrss !!""##1100//..wwvvuuooEEFFGGHH + + \\[[ZZYYeeffgghh##""!!>>==<;:9::;;<<==ggffeeddzz{{||}}""!! rrqqppooTTUUVVWWMMLLKKJJttuuvvww$$%%&&''--,,++**nnmmllkkIIJJKKLLXXWWVVUUiijjkkll87766554>>??@@AAccbbaa``~~nnmmllkkXXYYZZ[[ + + IIHHGGFFxxyyzz{{(())**++))((''&&jjiihhgg~~}}MMNNOOPPTTSSRRQQmmnnoopp 43322110~~}}||BBCCDDEE __^^]]\\jjiihhgg\\]]^^__ EEDDCCBB||}}~~,,--..//%%$$##""ffeeddcc||{{zzyyQQRRSSTTPPOONNMMqqrrsstt!!""##$$0//..--,{{zzyyxxFFGGHHII + + [[ZZYYXXffeeddcc``aabbccAA@@??>>00112233!! bbaa``__xxwwvvuuUUVVWWXXLLKKJJIIuuvvwwxx%%&&''(( ,++**))(wwvvuuttJJKKLLMMWWVVUUTTbbaa``__ddeeffgg==<<;;::44556677^^]]\\[[tsrqpoonYYZZ[[\\ + + HHGGFFEEyyzz{{||))**++,, + + (''&&%%$ssrrqqppNNOOPPQQSSRRQQPP ^^]]\\[[hhiijjkk998877668899::;;ZZYYSSRRnmmllkkj]]^^__`` DDCCBBAA}}~~--..//00$##""!! oonnmmllRRSSTTUUOONNMMLL + + ZZYYXXWWllmmnnoo55443322<<==>>??QQPPOONNjiihhggfaabbccdd@@??>>==11223344 + +kkjjiihhVVWWXXYY KKJJIIHHVVUUTTSSppqqrrss !!""##1100//..~~@@AABBCCMMLLKKJJfeeddccbeeffgghh<<;;::9955667788 ggffeeddZZ[[\\]] + + GGFFEEDDRRQQPPOOttuuvvww$$%%&&''--,,++**}}||{{zzDDEEFFGG + +IIHHGGFFbaa``__^iijjkkll8877665599::;;<<ccbbaa``^^__``aaCCBBAA@@NNMMLLKKxxyyzz{{(())**++))((''&&yyxxwwvvHHIIJJKK EEDDCCBB^]]\\[[Zmmnnoopp 44332211==>>??@@__^^]]\\bbccddee??>>==<<~~}}||ZHAbtArd˂rXQH~fے`JXQnXv`p˂rvpfJtAdfpvdrtAJpZHAlJtAbHAZpltb˂pZZdQbtJ`ےdtAJlHAbےf~HfrtAJlpfH~d|Zے`JXQ|ZdQbJ`ے`vXnr˂pf~HXQJ`ےH~f|ZdQbnXv`ltdbے`rd|˂rXQdQZ|HAbےlJtAbHAZptbn`JXQHAvnXvtbdQf`vdQbtr˂ptlJbHAZpvpfZHAbfpvbHAZ`vXntlJf~HrtAJlJXQrZdQbtJ`ےdrtAJ`JXQrrd|˂rXQvpfbے``f~Z|dXnvlJtArZHAbtArd˂rXQH~fے`JXQnXv`drtAvpftArdfpvtbdQpZHAlJtAbHAZpltb˂pZZdQbtJ`ےHf`JXQrHfpvrtAJlpfH~d|Zے`JXQ|ZdQbJ`p˂`vXnr˂pf~HJltH~f|ZdQbnXv`Z|dbے`rd|˂rXQdQZ|HAbےlJtAbHAZpvXn˂pZHAnXvtbdQf`vdQbtr˂ptlJrXQJvpfZHAےfpvbdQZ|`vXntlJf~HrtAJlJXQrZZdQbtJ`ےdrtAJ`JXQrrdf˂rXQvpfHbے``f~Z|dXnvlJtArZHAbtArd`ےbH~f`JXQrnXv`drtAvpftArdfpvtbdQHAbےlJtAbHAZpltb˂pZ~HfJ`ے~f`JXQrHfpvrtAJlpfH~d|Zے`JXQ|ZdQbHAZp˂`vXnbtlf~HJltH~f|ZdQbnXv`Z|l`JXQrrd|˂rXQdQZ|HAbےpvnbHAZpvXn˂p`JnvftbdQf`vdQbtr˂ptlJrXQJvpfJtAdfpvbdQZ|`vXntlJf~HtbdQZ˂pZZdQbtJ`ےdtAJl`JXQrXv`f˂rXQvpfHXQr˂~HfpZ|dXnvlJtArZHAbtArd`ےbH~f|ZdQbnXv`drtAvpftArdfpv|drHAbےlJtAbHAZptbn˂pZ~HfJ`ے~f`pZHAbvnXrtAJlpfH~d|Zے`JXQ|ZdQbHAXQJ``vXntlJf~HJltH~f|ZdQbnXv`tAJl`JXQrrd|˂rXQvpfHAbےpvnbHAZpvXnے`Jv`ftbdQf`vdQbtr˂ptlJےbHAvpftArdfpvbdQZ|`vXntlJf~HtbdQZ˂pZAZdQbtJ`ےHf``JXQrXv`f˂rXQvpfHXQr˂~HfpZ|dXnvlJtArZHAbtArdZp˂H~f|ZdQbnXv`drtAvpftArdfpv|drb`JXlJtAbHAZpvXn˂pZ~HfJ`ے~f`p`JXQvnXrtAJlpfH~d|Zے`JXQ|ZdQbrXQJ``vXntlJf~HJltH~f|ZdQbnXv`tAdQZ|Qr˂prdf˂rXQvpfHHAbےpvnbHAZpvXnrbt璕v`f~tbdQf`vdQbtr˂ptlJےbHAvpftArdfpvbdQZ|`vXntlJf~HdrtAZHAb~HfJ`ے~f``JXQrXv`f˂rXQvpfHl|ZdQfpvZ|dXnvlJtArZHAbtArdZp˂H~f|ZdQbnXv`drtAvpftArdfpvJltے`JXpvnbHAZpvXn˂pZ~HfJ`ے~f`btlnXv`rtAJlpfH~d|Zے`JXQf~HbHAZ`vXntlJf~HJltH~f|ZdQbnXv`bdQZ|Qr˂pXv`f˂rXQvpfHHAbےpvnbHAZpvXnJtArdf~HtbdQfZHAdQbtr˂pXv`fdrtAvpftArdfpvbdQZ|`vXntlJfHfdrtAZHAb~HfJ`ے~f``JXQrXv`f˂rXQvpfH|ZdQfpvZ|dbے`lJtArZHAb~HfJbdQH~f|ZdQbnXv`drtAvpftArdpvnJltJQrpvnbHAZpvXn˂pZ~HfJ`ے~f`btlnXv`rtAJlJXQrd|Zے`JXQpvnZ|d`vXntlJf~HJltH~f|ZdQbrXQJ`drtAJ˂pZHAXv`f˂rXQvpfHHAbےpvnbHAZpvXn|ZdQbffpvtbdQ˂pZHAdQbtr˂pXv`frtAJl瀅vpftArdfpvbdQZ|`vXntlJےHAZltbbے`~HfJ`ے~f``JXQrXv`f˂rXQvpfHtlJnrXQZ|dbے`lJtArZHAb~HftbdQH~f|ZdQbnXv`drtAvpftArdp˂rdQZ|JXQrpvnbHAZpvXn˂pZ~HfJ`ے~f`tArdJ`ےrtAJlJXQrd|Zے`JXQpvZ|d`vXntlJf~HJltH~f|ZdQbXQJ`ےdrtAJ˂pZHAXv`f˂rXQvpfHHAbےpvnbHAZpvXn|ZdQbHAZp˂tbdQ˂pZHAdQbtr˂p~HfprtAJl瀅vpftArdfpvbdQZ|ZHAbtlJbHAZltbbے`~HfJ`ے~f``JXQrXv`f˂rXQvpfHtlJrXQJZ|dbے`lJtArZHAbvnXtbQZH~f|ZdQbnXv`drtAے`JXQtArdp˂rdQZ|lJXQrpvnbHAZpvXn˂pZ~HfJ`ے~f`tArdt`ےbrtAJlJXQrd|Zے`JXQv`fdrtAJ`vXntlJfHfJltr˂p|ZdQbXQJ`ےtbdQZHAbXv`f˂rXQvpfHHAbےpvnbHAZvXnlJtAHAZp˂tbdQ˂pZHAdQbtr˂p~HfpltbvpftArdpvnbdQZ|ZHAbtlJbHAZZ|d`JXQ~HfJ`ے~f``JXQrXv`fdrtAJvpfHrd|rXQJZ|dbے`lJtArZHAbvnXdQZ|H~f|ZdQbrXQJ`drtAے`JXQtArdp˂rrtAJlr˂ppvnbHAZpvXn˂pZ~Hfltb~f`ZdQbt`ےbrtAJlJXQrd|Zے`JXQv`pvdrtAJ`vXntlJےHAZJltr˂p|ZdQbXQJ`ےtbdQZHAbXv`f˂rXQvpfHHAے`pvndQZ|vXnlJtAHAZp˂tbdQ˂pZHAdQbtr˂pnXvltbvpftArdp˂rbdQZ|ZHAbtlJbHAZZ|l璒`JXQ~HfJ`ے~f`JXQrbXv`fdrtAJvpfHrd|rXQJZ|dbے`lJtArZHAb`f~dQZ|H~f|ZdQbXQJ`ےdrtAے`JXQtArdp˂rtbnr˂pZpvnbHAZpvXntlJ~Hfltb~f`ZdQtAr`ےbrtAJlJXQrd|Zے`JXQHfpvrAJltZHAbtlJbHAZJltr˂p|ZdQbXQJ`ےvp`vAb`JXv`f˂rXQvpfHtAd|pvndQZ|vXnd|ZHAZp˂tbdQ˂pZHAdQbtr˂pnXvbdQZ|ے`JXQtArdp˂rbdQZ|ZHAbtlJbHAZXnvXQr˂~HfJ`ے~f`ZdQbtXv`fdrtAJvpfHdQbt璀rXQJZ|dbے`lJtArZHAb`f~drtr˂p|ZdQbXQJ`ےdrtAے`JXQtArdp˂rpfH~pZHAbpvnbHAZvXnlJtA~Hfltb~f`lJtAr`ےbrtAJlJXQrd|Zے`JXQHXv`AJltZHAbtlJbHAZJltr˂p|ZdQbXQJ`ےf`vے`JXv`fdrtAJvpfHrd|pvndQZ|vXnd|ZHAZp˂tbdQ˂pZHAdQbtvnXr˂pf~HbdQZ|ے`JXQtArdp˂rbdQZ|ZHAbtlJbHAZXnvXQr˂~Hfltb~f`ZdQbtXv`fdrtAJvpfHdQbt璀rXQJZ|dbے`lJtArv`fZHAbfpvdrtr˂p|ZdQbXQJ`ےdrtAے`JXQtArdp˂rp`vXpZA`pvndQZ|vXnlJtA~Hfltb~f`l|ZdQ`ےbrtAJlJXQrdf~Hfpے`JXQnXv`AJbdQZHAbtlJbHAZJltr˂p|ZdQbXQJ`ےnvpJXQrbXv`fdrtAJvpfHrd|pvndQZ|vXnbtlHAZp˂tbdQ˂pZHA~HfpvnXr˂pf~HZ|dے`JXQtArdp˂rbdQZ|ZHAbtlJbHAZfH~tlJ~Hfltb~f`ZdQbtXv`fdrtAJvpfHJtArdrXQJZ|dbے`vnXv`fZHAbfpvrtAJlr˂p|ZdQbXQJ`ےdrtAے`JXQtArdp˂rf`vXtAd|pvndQZ|vXnlJtA~Hfltb~f`|ZdQ`ےbtAJlJXQrv`f~Hfpے`JXQ~HftbdQZHAbtlJbHAZJltr˂p|ZdQbXQJ`ےnvpZdQbtXv`fdrtAJvpfHrd|pvndQZ|vXnbtlHAZp˂tbn˂pZHA~HfpvnXr˂ppvnZ|dے`JXQtArdp˂rbdQZ|ZHAbtlJbHAZfH~lJtA~Hfltb~f`ZdQbtXv`fdrtAJvpfHJtArdrXQJvpfHbے`vnXv`f|ZdQbXv`frtAJlr˂p|ZdQbXQJ`ےdrtAے`JXQtArdp˂rvpfrd|pvndQZ|vXnlJtA~Hfltb~f`tlJ`ےbf`vJXQrv`f~HfptlJ~HftbQZZHAbtlJbHAZJltr˂pf~HXQJ`ےH~fZdQbtXv`fdrtAJvpfHrd|pvndQZ|vXntArdHAZp˂Xnv˂pZHA~HfpvnXtArdpvndrtAے`JXQtArdp˂rbdQZ|ZHAbfpvbHAZ`vXnlJtA~Hfltb~f`ZdQbtXv`fdrtAJvpfH|ZdQbrXQJpfH~bے`vnXv`f|ZdQbXv`pJltr˂p|ZdQbXQJ`ےdtAJے`JXQnXv`p˂rvpfrd|pvndQZ|vXnlJtA~Hfltb~fZtlJ`ےbf`vJXQrv`fHfpvtlJvnXbdQZ|ZHAbtlJbHAZltbr˂pf~HXQJ`ےH~fZdQbtXv`fdrtAJvpfHrd|pvndQZ|HAbtArdHAZp˂Xnv˂pZHA~HfpnrXQtArdv`fdrtAے`JXQtArdp˂rnvpZHAbfpvbHAZ`vXHlJtA~Hfltb~f`ZdQbtXv`fdrtAJ˂pZHA|ZdQtArXQJpfH~bے`vnXJ`ے|ZdQb~HfpJltr˂p|ZdQbXQJ`ےfHfے`JXQnXv`p˂r~f`rd|pvndQZ|vXnlJtAHfpltbbے`rdf`ےbf`vJXQrv`fHAZp˂tlJvnXbdQZ|ZHAbtlJbHAZ`vXnr˂pf~HXQJ`ےvXnZdQbtXv`fdrtAJvpfHrd|vnrdQZ|JXQr~HfHAZp˂Xnv˂pZHA~HfprXQJtArdv`p˂rAJlے`JXQtArdp˂rvpfZHAbfpvbHAZvpfHlJtA~Hfltb~f`ZdQbtXQJ`ےdrtAJ˂pZHAvnXv`rXQJpfH~bے`vnX`ےb|ZdQbrXQJtbdQZr˂pf~HXQJ`ےH~fے`JXQnXv`p˂r~f`rd|pvndQZ|vXnlJtAHAZpltbbے`f~H`ےbf`vJXQrv`fHAZp˂tlJ`ےb|drZHAbfpvbHAZ`vXnr˂pf~HXQJ`ےvXnZdQbtXv`fdrtAJvpfHrd|˂rXQdQZ|JXQHAbfpvHAZp˂Xnv˂pZHA~HfprXQJtArdHAZp˂tAJlے`JXQnXv`p˂rvpfZHAbfpvbHAZvp`vlJtA~Hfltb~fZZdQbtJ`ےdrtAJے`JnXv`rXQJpfH~bے`vnX`ےb|ZdQbrXQJtbdQZr˂pf~HXQJ`ےH~fے`JXQnXv`p˂rXnvrd|pvndQZ|HAbےlJtAbHAZpltbXQr˂f~H`ےbf`vJXQrv`fHAZp˂tlJ`p˂|dnZHAbfpvbHAZ`vXnr˂pf~HXQJ`ےpfH~ZdQbtXv`fdrtAJ`JXQrrd|˂rXQdQZ|pZHAbfpvHAZp˂Xnv˂pZHA~HfprXQJtArdrXQJ`vffے`JXQnXv`p˂rvpfZHAbfpvbHAZf`vlJtAHfpltb˂pZZdQbtJ`ےdrtAJے`JnvfrXQJpfH~bے`vnX`ےb|ZdQbےbHA`vXnr˂pf~HXQJ`ےH~fے`JXQnXv`p˂rXnvrd|vnrdQZ|HAbےlJtAbHAZpltbXQr˂~Hfp`ےbf`vJXQrv`fHAZp˂tlJZp˂vpfZHAbfpvbHAZ`vXnr˂pf~HXQJ`ےpfH~ZdQbtXQJ`ےdrtAJ`JXQrrd|˂rXQdQZ|p`JXQvnXHAZp˂Xnv˂pZHA~HfprXQJtArdrXQJ`H~fے`JXQnXv`p˂rvpfZHAbfpvbHAZvplJtAHAZpltb˂pZZdQbtJ`ےdrtAJr˂pv`frXQJpfH~ے`JvnX`ےb|ZdQbےbHA`vXnr˂pf~HXQJ`ےH~fے`JXQnXv`p˂rfH~rd|˂rXQdQZ|HAbےlJtAbHAZpltbZHAb~Hfp`ےbf`vXQrbtv`fHAZp˂tlJXQJ`ےvpfZHAbfpvbHAZ`vXnr˂pf~HXQJ`ےf`vXZdQbtJ`ےdrtAJ`JXQrrd|˂rXQdQZ|ے`JXQvnXHAZp˂XnvlJtA~HfprXQJtArdbHAZH~fے`JXQnXv`p˂rvpfZHAbfpvbHAZnvplJtAbHAZpltb˂pZZdQbtJ`ےdrtAJr˂pv`f~rXQJpfH~d|ZvnX`ےb|ZdQbp˂r`vXnr˂pf~HXQJ`ےH~fے`JXQnXv`drtAfH~rd|˂rXQdQZ|HAbےlJtAbHAZpltbZHAbfpv`ےbf`vdQbtv`fHAZp˂tlJXQJ`ےvpfZHAbfpvbHAZ`vXnr˂pf~HdQZ|f`vXZdQbtJ`ےdrtAJ`JXQrrd|˂rXQdQZ|˂pZnXv`HAZdXnvlJtAr~HfprXQJtArdbHAZH~fے`JXQnXv`p˂rvpfZHAےfpvdrtAJH~flJtAbHAZpltb˂pZZdQbtJ`ےdrtAJHAbےf~HrtAJlpfH~d|ZvnX`ےb|ZdQbp˂`vXnr˂pf~HXQJ`ےH~f`JXQrnXv`ltbZHAbrd|˂rXQdQZ|HAbےlJtAbHAZpltb`JXQrfpvtbdQf`vdQbtv`fHAZp˂tlJbHAZpvpfZHAbfpvbHAZ`vXnbtlf~HdQZ|JQrZdQbtJ`ےdrtAJ`JXQrrd|˂rXQdQZ|˂pZnXv`Z|dXnvlJtAr~HfprXQJ`ےbf`vJXQrHfpvdrtAfH~|ZdQnXv|drnvpJtArdfpvtAJlbJQrfpvbHAZ`vXnr˂pf~HXQJ`ےH~fdQbt璀nXvdrtAJ`JXQrrd|˂rXQdQZ|bے``vXnHAZp˂Xnv˂pZHA~HJltf`vXbtl`f~tAJlfH~|ZdQnrXQJtdrtA˂pZnXv`p˂rvpfZHAbfpvbHAZ`vXnl|ZdQ`ffpltb˂pZZdQbtJ`ےdrtAJJXQrvˍpfrXQJpfH~bے`fpvbdQZ|nvpJtArdHfpvtbdQZf`vXbtl`ےHAJltHAbےf~HXQJ`ےH~fے`JXQnXv`p˂rvpfbtlvnrdQZ|HAbےlJtAbHAZpltb˂p`JH~ㅐf`ےbf`vJXQrnXv`drtAfH~|ZdQnXv|drnvpJtArdZp˂bdQZ|`JXQrfpvbHAZ`vXnr˂pf~HXQJ`ےH~fJtArdXQJ`ےdrtAJ`JXQrrd|˂rXQdQZ|XQr˂`vXnHAZp˂Xnv˂pZHAf~HJltbf`vXbtl`f~tAJlfH~|ZdQrXQJ`drtA˂pZnXv`p˂rvpfZHAbfpvbHAZ`vXn|ZdQHAZpltb˂pZZdQbtJ`ےdrtAJpZHAbvˍpfrXQJpfH~bے`fpvQZdrnvpJtArdHfpvtbdQZfZHAbbtlےbHAJltHAbےf~HXQJ`ےH~fے`JXQnXv`p˂rvpfbtl˂rXQdQZ|HAbےlJtAbHAZpltbے`JH~ㅐf`ےbf`vJXQrnXv`tAJlfH~|ZdQnXv|drے`JJtArdZp˂bdQZ|`JXQrfpvbHAZ`vXnr˂pf~HXQJ`ےH~fJtArdJ`ےdrtAJ`JXQrrd|˂rXQdQZ|XQr˂`vXnHAZp˂Xnv˂pZHApvntbdQZf`vXbtl`fHtAJlXQr˂|ZdQrXQJ`ltbZHAbnXv`p˂rvpfZHAbfpvbHAZ`vXntlJbHAZpltb˂pZZdQbtJ`ےdrtAJpZHAbvˍpfrXQJpfH~bے`Xv`f|drnvpJtArdfpvtbdQZpZHAbbtlےbHAdQZ|ے`JXf~HXQJ`ےH~fے`JXQnXv`drtAvpftArd˂rXQdQZ|HAbےlJtAbHAZpltb˂pH~ㅐf`ےbf`vJXQr~HftAJlfH~|ZdQnrXQJ|drے`JJtArdZp˂drtAJQr˂pfpvbHAZ`vXnr˂pf~HJltH~f|ZdQbJ`ےdrtAJ`JXQrrd|˂rXQdQZ|ZHAb`vXnHAZp˂Xnv˂pZHApvntbdQZf`vXbtl`ےHAtAJlXQr˂|ZdQrXQJ`ltbZHAbnXv`p˂rvpfZHAےfpvbdQZ|`vXntlJbHAZpltb˂pZZdQbtJ`ےdrtAJے`JXQvˍpfrXQJpfH~bے`Xv`f|rAJlnvpJtArdZp˂tbdQZpZHAbbtlےbHAdQZ|lے`JXf~HXQJ`ےH~f`JXQrnXv`drtAvpftArd˂rXQdQZ|HAbےlJtAbHAZpltbr˂pH~ㅐf`ےbf`vJXQr~HXtbdfH~|ZdQrXQJ`|drے`JJtArdZp˂tbnQr˂pfpvbHAZ`vXnbtlf~HJltH~f|ZdQtAJ`ےdrtAJ`JXQrrd|˂rXQdQZ|ZHAb`vXnHAZp˂Xnv˂pZHAv`fQZ|dfZHAbbtlےbHAtAJlXQr˂|ZdQrXQJ`vp`ZAb`nXv`p˂rvpfJtAdfpvbdQZ|`vXnrd|bHAZpltb˂pZZdQbtJ`ےdtAJlے`JXQvˍpfrXQJpfH~bے`~HfprtAJlے`JJtArdZp˂tbdQZpZHAbbtlےbHAvXnJXQrf~HXQJ`ےH~f|ZdQbnXv`drtAvpfZdQbt˂rXQdQZ|HAbےlJtAbHAZptbnHAbےH~ㅐf`ےbf`vJXQrvnXtbdXQr˂|ZdQrXQJ`|drے`JJtArdZp˂vpfH˂pZHAfpvbHAZ`vXntlJf~HJltH~flJtAJ`ےdrtAJ`JXQrrd|˂rXQvpf`JXQr`vXnHAZp˂Xnv˂pZHAv`fQZ|dpZHAbbtlےbHAtAJlXQr˂|ZdQrXQJ`~f`bے`nXv`drtAvpftArdfpvbdQZ|`vXnrd|bHAZpltb˂pZZdQbtJ`ےHf`˂pZvˍpfrXQJpfH~ے`J~HfprtAJے`JJtArdZp˂tbdQZpZHAbbtlےbHAvXnJXQrf~HJltH~f|ZdQbnXv`drtAvpfZdQbt˂rXQdQZ|HAbےlJtAbHAZpvXnHAbےH~ㅐf`ےbf`vXQrbtv~bdQZ|XQr˂|ZdQrXQJ`|drے`JJtArdZp˂vp`v˂pZAfpvbdQZ|`vXntlJf~HJltH~fl|ZJ`ےdrtAJ`JXQrrdf˂rXQvpfH`JXQr`vXnHAZp˂XnvlJtAHfpvdrtApZHAbbtlےbHAtAJlXQr˂|ZdQrXQJ`Xnv`JXQrnXv`drtAvpftArdfpvbdQZ|`vXndQbtbHAZpltb˂pZ~HfJ`ے~f`˂p`vˍpfrXQJpfH~d|ZnXvJltے`JJtArdZp˂tbdQZpZHAbbtlےbHApfH~btlf~HJltH~f|ZdQbnXv`drtAvpflJtAr˂rXQdQZ|HAbےpvnbHAZpvXnJXQrH~ㅐf`ےbf`vdQbt`f~bdQZ|XQr˂|ZdQrXQJ`|drے`JJtArdZp˂f`vJtAdfpvbdQZ|`vXntlJf~HJltH~fd|ZJ`ےdtAJl`JXQrXv`f˂rXQvpfH˂pZHA`vXnHAZdXnvlJtArHfpvdrtApZHAbbtlےbHAtAJlXQr˂|ZdQrXQJ`Xnv|ZdQbnXv`drtAvpftArdfpvbdQZ|`vXndQbtbHAZptbn˂pZ~HfJ`ے~f`bے`vˍpfrtAJlpfH~d|ZnXvJltے`JJtArdZp˂tbdQZpZHAbbtlےbHApfH~tlJf~HJltH~f|ZdQbnXv`drtAvpflJtAr˂rXQvpfHAbےpvnbHAZpvXnJXQrH~ㅐftbdQf`vdQbt`pvbQZdXQr˂|ZdQrXQJ`|drے`JJtArdZp˂vptArdfpvbdQZ|`vXntlJf~HJltH~fdtlJ`ےHf``JXQrXv`f˂rXQvpfH˂p`Z`vXnZ|dXnvlJtArnXv`rtAJlpZHAbbtlےbHAtAJlXQr˂f~rXQJ`fH~|ZdQbnXv`drtAvpftArdfpvbdQZ|`vXnJtArdbHAZpvXn˂pZ~HfJ`ے~f`QXb㉀ەvˍpfrtAJlpfH~d|Zf~HtbdQ琙ے`JJtArdZp˂tbdQZpZHAbHfpvےbHAf`vXtlJf~HJltH~f|ZdQbnXv`drtAvpf|ZdQ˂rXQvpfHHAbےpvnbHAZpvXnpJAHrH~ㅐftbdQf`vdQbtfpvZ|dXQr˂|ZdQrXQJ`|dtAے`JnXvZp˂nvptArdfpvbdQZ|`vXntlJf~HJltH~fbtlJ`ے~f``JXQrXv`f˂rXQvpfHˁ`Z`vXnZ|dXnvlJtArnXv`rtAJlpZHAbbtlےbHAJltXQr˂`f~rXQJ`fH~|ZdQbnXv`drtAvpftArdfpvbdQZ|ZHAbJtArdbHAZpvXn˂pZ~HfJ`ے~f`QXb㉀ەvˍp|rtAJlpfH~d|ZpvntbdQ琙ے`JJtArdZp˂bnvpZHAbHfpvےbHAf`vXtlJf~HJltH~f|ZdQbnXv`drtA˂pZ|ZdQ˂rXQvpfHHAbےpvnbHAZpvXnp`ZQXdrQttbdQf`vdQbtrXQJ`Z|rAJXQr˂|ZdQrXQJ`pfHے`JnXvZp˂H~ftArdfpvbdQZ|`vXntlJfHfJltHAbےtArdJ`ے~f``JXQrXv`f˂rXQvpfHb㉀ۑpJltZ|dXnvlJtArp˂rltbpZHAbbtlےbHAf`vXXQr˂`f~rXQJ``vXn|ZdQbnXv`drtAvpftArdpvnbdQZ|`JXQrf~HbHAZpvXn˂pZ~HfJ`ے~f`JAHrbAdZ|rtAJlpfH~d|ZXQJ`ےdQZ|ے`JJtArdZp˂nvppZHAbHfpvےbHAvpftlJf~HJltH~f|ZdQbrXQJ`drtA˂pZfvnX˂rXQvpfHHAbےpvnbHAZpvXnˁ`ZQXdrQttbdQf`vdQbt璐bHAZdrtAJXQr˂f~rXQJ`fH~ے`JnXvZp˂H~ftArdfpvbdQZ|`vXntlJےHAZJltHAbےv`fJ`ے~f``JXQrXv`f˂rXQvpfHb㉀ۑpJltZ|dXnvlJtArp˂rltbpZHAbHfpvےbHAf`vXXQr˂`f~rXQJ``vXn|ZdQbnXv`drtAvpftArdp˂rbdQZ|`JXQHA~HfpbHAZpvXn˂pZ~HfJ`ے~f`JAHrbAdZ|rtAJlpfH~d|ZXQJ`pdQZ|ے`JnXvZp˂nvppZHAbHfpvےbHAvp`tlJf~HJltH~f|ZdQbXQJ`ےdrtAbے`vnX˂rXQvpfHHAbےpvnbHAZpvXnۑpJdrQttbdQf`vdQbt˂rXQAJltXQr˂`f~rXQJ`fH~ے`JnXvZp˂vXntArdfpvbdQZ|ZHAbtlJbHAZJltJXQrv`fJ`ے~f``JXQrXv`f˂rXQvpfHAHr󙐂JltZ|dXnvlJtArJ`ےbnvpZHAbHfpvےbHAf`vXXQr˂`f~rXQJ`vpfH|ZdQbnXv`drtAے`JXQtArdp˂rbdQZ|˂pZHA~HfpbHAZpvXn˂pZ~HfJ`ے~f``ZQXbbAdZ|rtAJlpfH~d|ZbHAZppfHے`JnXvZp˂nvppZHAbHfpvےbHA~f`tlJfHfJltr˂p|ZdQbXQJ`ےdrtAbے`vnvf˂rXQvpfHHAbےpvnbHAZvXnۑpJdrQttbdQf`vdQbt˂rXQf`vXXQr˂`f~rXQJ`fH~ے`JnXvZp˂vXntArdpvnbdQZ|ZHAbtlJbHAZJltJXQr~HfJ`ے~f``JXQrXv`fdrtAJvpfHAHr󙐂JltZ|dXnvlJtArJ`ےnvppZHAbHfpvےbHAf`vXXQr˂`f~rXQJ`vpfH|ZdQbrXQJ`drtAے`JXQtArdp˂rbdQZ|˂p`JpvnbHAZpvXn˂pZ~Hfltb~f``ZQXAHbAdZ|rtAJlpfH~d|ZbHAXQJfH~ے`JnXvZp˂nvppZHAbHfpvےbHA~vtlJےHAZJltr˂p|ZdQbXQJ`ےdrtAXQr˂Xv`f˂rXQvpfHHAے`pvndQZ|vXnr󙐂ˁ`drQttbdQfZHAdQbt`ےbf`vXXQr˂`f~rXQJ`fH~ے`JnXvZp˂pfH~tArdp˂rbdQZ|ZHAbtlJbHAZJltpZHAb~HfJ`ے~f`JXQrbXv`fdrtAJvpfHZQXb㉀JltZ|dbے`lJtArHAZp˂nvppZHAbHfpvےbHAf`vXXQr˂`f~rXQJ`f`v|ZdQbXQJ`ےdrtAے`JXQtArdp˂rbdQZ|ے`JpvnbHAZpvXntlJ~Hfltb~f`ۑpJAHbAdZ|rtAJlJXQrd|ZrXQJfH~ے`JnXvZp˂nvppZHAbHfpvےbHAXnvtlJbHAZJltr˂p|ZdQbXQJ`ےdrtAXQr˂Xv`f˂rXQvpfHtAd|pvndQZ|vXnr󙐂ˁ`drQttbdQ˂pZHAdQbt`ےbf`vXXQr˂`f~rXQJ`fH~ے`JnXvZdrpfH~tArdp˂rbdQZ|ZHAbtlJbHAZJltpZHAb~fpvJ`ے~f`ZdQbtXv`fdrtAJvpfHZQXb㉀JltZ|dbے`lJtArHAZp˂nvppZHAbHfpvےbHAf`vXXQr˂`f~tAdQZ|f`v|ZdQbXQJ`ےdrtAے`JXQtArdp˂rbdQZ|˂pnXv`bHAZvXnlJtA~Hfltb~f`ۑp`ZbAdZ|rtAJlJXQrd|ZbHAfH~ے`JnXvZp˂nvppZHAHfpvdrtAXH~tlJbHAZJltr˂p|ZdQbXQJ`ےdrtAZHAbf~HdrtAJvpfHrd|pvndQZ|vXnQXb㉀ۂdrQttbdQ˂pZHAdQbtZp˂f`vXXQr˂`f~rXQJ`fH~ے`JXQnXvJltfZHAbtArdp˂rbdQZ|ZHAbtlJbHAZJltے`JXQfpvltb~f`ZdQbtXv`fdrtAJvpfHpJAHrJltZ|dbے`lJtArrXQJ`nvppZHAbHfpvےbHAf`vXrbt`f~bdQZ|JQr|ZdQbXQJ`ےdrtAے`JXQtArdp˂rbdQZ|r˂pnXv`dQZ|vXnlJtA~Hfltb~f`ˁ`ZbAdZ|rtAJlJXQrd|ZےbHAfH~ے`JnXvZp˂nvplJtAdHfpvdrtA˂pZHtlJbHAZJltr˂p|ZdQbXQJ`ےdtAJZHAbf~HdrtAJvpfHrd|pvndQZ|vXnQXb㉀ۂdrQttbdQ˂pZHAdQbtZp˂f`vXXQr˂`f~rXQJ`fH~|ZdQnXvJltAbے`tArdp˂rbdQZ|ZHAbtlJbHAZltbے`JXQfvnXltb~f`ZdQbtXv`fdrtAJvpfHpJAHrJltZ|dbے`lJtArrXQJ`nvppZHAbHfpvےbHAf`vXbtl`f~drtAJJXQr|ZdQbXQJ`ےdrtAے`JXQtArdp˂rnvpHAbےv`fdQZ|vXnlJtA~Hfltb~f`ۑpbAdZ|rtAJlJXQrd|Zp˂rfH~ے`JnXvZdrnvpJtArdHfpvltb˂pZHtlJbHAZJltr˂p|ZdQbXQJ`ےfHf`JXQr~HfpdrtAJvpfHrd|pvndQZ|vXnJAHr󙐂drQttbdQ˂pZHAdQbtXQJ`ےf`vXXQr˂`f~tAJlfH~|ZdQnXvdQZ|Abے`tArdp˂rbdQZ|ZHAbtlJbHAZ`vXn˂pZvnXltb~f`ZdQbtXv`fdrtAJvpfHˁ`ZQXJltZ|dbے`lJtArbHAZnvppZHAHfpvtbdQZf`vXbtl`f~drtAJJXQr|ZdQbXQJ`ےdrtAے`JXQtArdp˂rvpfHAbےv`fdQZ|vXnlJtA~Hfltb~f`b㉀ۑpbAdZ|rtAJlJXQrd|Zp˂rfH~ے`JXQnXv|drnvpJtArdHfpvltbZHAbtlJbHAZJltr˂pf~HXQJ`ےH~f`JXQr~HfpdrtAJvpfHrd|pvndQZ|vXnJAHr󙐂drQttbdQ˂pZHAdQbtXQJ`ےf`vXrbt`f~tAJlfH~|ZdQnXvdQZ|lے`JXQtArdp˂rbdQZ|ZHAbfpvbHAZ`vXn˂p`vnvltb~f`ZdQbtXv`fdrtAJvpfHˁ`pfJltZ|dbے`lJtArbHAXQnvplJtAdHfpvtbdQZf`vXbtl`f~tbdQr˂p|ZdQbXQJ`ےdtAJے`JXQnXv`p˂rvpfJXQrf~HdQZ|vXnlJtA~Hfltb~frH~ㅐfbAdZ|rtAJlJXQrd|ZJ`ےfH~|ZdQnXv|drnvpJtArdHfpvZ|dZHAbtlJbHAZltbr˂pf~HXQJ`ےH~f˂pZHAfpvdrtAJvpfHrd|pvndQZ|˂pZ`vXndrQttbdQ˂pZHAdQbtbHAZpf`vXbtl`f~tAJlfH~|ZdQnXvrtAJlے`JXQtArdp˂rnvpZHAbfpvbHAZ`vXnbے`nXv`ltb~f`ZdQbtXv`fdrtAJHAbےvˍpfJltZ|dbے`lJtAr˂rXQnvpJtArdHfpvtbdQZf`vXbtl`f~tbdQr˂p|ZdQbXQJ`ےfHfے`JXQnXv`p˂rvpfJXQrf~HdQZ|vXnlJtAHfpltb`JXQrH~ㅐfbAdZ|rtAJlJXQrdfJ`ےfH~|ZdQnXv|drnvpJtArdHfpvZ|dZAb`tlJbHAZ`vXnr˂pf~HXQJ`ےH~f˂p`JfpvdrtAJvpfHrd|vnrdQZ|˂pZ`vXndrQttbdQ˂pZHA~HXvbHAZpf`vXbtl`f~tAJlfH~|ZdQnXvrtAdQZJXQrtArdp˂rvpfZHAbfpvbHAZ`vXnXQrbtnXv`fltb~f`ZdQbtXQJ`ےdrtAJHAbےvˍpfJltZ|dbے``f~˂bnvpJtArdHfpvtbdQZf`vXbtl`f~|drpZHAf~HXQJ`ےH~fے`JXQnXv`p˂rvpfl|Z~fpvdQZ|vXnlJtAHAZpltb`JXQHAH~ㅐfbAdZ|tAJlJXQrHfpvHAZdfH~|ZdQnXv|drnvpJtArdHfpvtAJlbے`fpvbHAZ`vXnr˂pf~HXQJ`ےH~fdQbt璀nXvdrtAJvpfHrd|˂rXQdQZ|bے``vXndrQttbn˂pZHAnXvrtAJf`vXbtl`f~tAJlfH~|ZdQnXvtbdQZJXQrnXv`p˂rvpfZHAbfpvbHAZ`vXnlJtAr`f~ltb~fZZdQbtJ`ےdrtAJJXQrvˍpfJltvpfHbے``f~bdQZ|nvpJtArdHfpvtbdQZf`vXbtl`fH|drpZHAf~HXQJ`ےH~fے`JXQnXv`p˂rvpfd|ZHfpvdQZ|HAbےlJtAbHAZpltb˂pZHAH~ㅐfbAdZ|66666666666666666666666666666666667777777777777777777777777777777777 \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/qrv4_0.dat b/vendor/endroid/qr-code/assets/data/qrv4_0.dat new file mode 100644 index 000000000..041616cbe Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv4_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv4_1.dat b/vendor/endroid/qr-code/assets/data/qrv4_1.dat new file mode 100644 index 000000000..59889fb4e Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv4_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv4_2.dat b/vendor/endroid/qr-code/assets/data/qrv4_2.dat new file mode 100644 index 000000000..29c2756a9 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv4_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv4_3.dat b/vendor/endroid/qr-code/assets/data/qrv4_3.dat new file mode 100644 index 000000000..84713c505 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv4_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv5_0.dat b/vendor/endroid/qr-code/assets/data/qrv5_0.dat new file mode 100644 index 000000000..b8db1f046 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv5_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv5_1.dat b/vendor/endroid/qr-code/assets/data/qrv5_1.dat new file mode 100644 index 000000000..0a7ccf76d Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv5_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv5_2.dat b/vendor/endroid/qr-code/assets/data/qrv5_2.dat new file mode 100644 index 000000000..3b3cbd9f6 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv5_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv5_3.dat b/vendor/endroid/qr-code/assets/data/qrv5_3.dat new file mode 100644 index 000000000..1d403f703 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv5_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv6_0.dat b/vendor/endroid/qr-code/assets/data/qrv6_0.dat new file mode 100644 index 000000000..f184ac928 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv6_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv6_1.dat b/vendor/endroid/qr-code/assets/data/qrv6_1.dat new file mode 100644 index 000000000..930399dd1 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv6_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv6_2.dat b/vendor/endroid/qr-code/assets/data/qrv6_2.dat new file mode 100644 index 000000000..2162d807e Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv6_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv6_3.dat b/vendor/endroid/qr-code/assets/data/qrv6_3.dat new file mode 100644 index 000000000..fecc622c7 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv6_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv7_0.dat b/vendor/endroid/qr-code/assets/data/qrv7_0.dat new file mode 100644 index 000000000..b14f7b9b2 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv7_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv7_1.dat b/vendor/endroid/qr-code/assets/data/qrv7_1.dat new file mode 100644 index 000000000..f4cae7afd Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv7_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv7_2.dat b/vendor/endroid/qr-code/assets/data/qrv7_2.dat new file mode 100644 index 000000000..57d216c43 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv7_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv7_3.dat b/vendor/endroid/qr-code/assets/data/qrv7_3.dat new file mode 100644 index 000000000..aca8da059 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv7_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv8_0.dat b/vendor/endroid/qr-code/assets/data/qrv8_0.dat new file mode 100644 index 000000000..2f1fb26f7 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv8_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv8_1.dat b/vendor/endroid/qr-code/assets/data/qrv8_1.dat new file mode 100644 index 000000000..abeb98fc9 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv8_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv8_2.dat b/vendor/endroid/qr-code/assets/data/qrv8_2.dat new file mode 100644 index 000000000..57f789b69 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv8_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv8_3.dat b/vendor/endroid/qr-code/assets/data/qrv8_3.dat new file mode 100644 index 000000000..545a500d6 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv8_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv9_0.dat b/vendor/endroid/qr-code/assets/data/qrv9_0.dat new file mode 100644 index 000000000..e88c008d1 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv9_0.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv9_1.dat b/vendor/endroid/qr-code/assets/data/qrv9_1.dat new file mode 100644 index 000000000..9c3724df1 Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv9_1.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv9_2.dat b/vendor/endroid/qr-code/assets/data/qrv9_2.dat new file mode 100644 index 000000000..f07f6a38e Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv9_2.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrv9_3.dat b/vendor/endroid/qr-code/assets/data/qrv9_3.dat new file mode 100644 index 000000000..539445e5a Binary files /dev/null and b/vendor/endroid/qr-code/assets/data/qrv9_3.dat differ diff --git a/vendor/endroid/qr-code/assets/data/qrvfr1.dat b/vendor/endroid/qr-code/assets/data/qrvfr1.dat new file mode 100644 index 000000000..3d889a7c0 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr1.dat @@ -0,0 +1,21 @@ +111111100000001111111 +100000100000001000001 +101110100000001011101 +101110100000001011101 +101110100000001011101 +100000100000001000001 +111111101010101111111 +000000000000000000000 +000000100000000000000 +000000000000000000000 +000000100000000000000 +000000000000000000000 +000000100000000000000 +000000001000000000000 +111111100000000000000 +100000100000000000000 +101110100000000000000 +101110100000000000000 +101110100000000000000 +100000100000000000000 +111111100000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr10.dat b/vendor/endroid/qr-code/assets/data/qrvfr10.dat new file mode 100644 index 000000000..e2f028f1a --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr10.dat @@ -0,0 +1,57 @@ +111111100000000000000000000000000000000000000011001111111 +100000100000000000000000000000000000000000000001001000001 +101110100000000000000000000000000000000000000011001011101 +101110100000000000000000000000000000000000000001001011101 +101110100000000000000000001111100000000000000001001011101 +100000100000000000000000001000100000000000000010001000001 +111111101010101010101010101010101010101010101010101111111 +000000000000000000000000001000100000000000000000000000000 +000000100000000000000000001111100000000000000000000000000 +000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000 +000011111000000000000000001111100000000000000000111110000 +000010001000000000000000001000100000000000000000100010000 +000010101000000000000000001010100000000000000000101010000 +000010001000000000000000001000100000000000000000100010000 +000011111000000000000000001111100000000000000000111110000 +000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000 +101001100000000000000000000000000000000000000000000000000 +111110000000000000000000000000000000000000000000000000000 +000000100000000000000000001111100000000000000000111110000 +000000001000000000000000001000100000000000000000100010000 +111111100000000000000000001010100000000000000000101010000 +100000100000000000000000001000100000000000000000100010000 +101110100000000000000000001111100000000000000000111110000 +101110100000000000000000000000000000000000000000000000000 +101110100000000000000000000000000000000000000000000000000 +100000100000000000000000000000000000000000000000000000000 +111111100000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr11.dat b/vendor/endroid/qr-code/assets/data/qrvfr11.dat new file mode 100644 index 000000000..0a7ecb094 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr11.dat @@ -0,0 +1,61 @@ +1111111000000000000000000000000000000000000000000001101111111 +1000001000000000000000000000000000000000000000000001101000001 +1011101000000000000000000000000000000000000000000011101011101 +1011101000000000000000000000000000000000000000000010101011101 +1011101000000000000000000000111110000000000000000011001011101 +1000001000000000000000000000100010000000000000000010001000001 +1111111010101010101010101010101010101010101010101010101111111 +0000000000000000000000000000100010000000000000000000000000000 +0000001000000000000000000000111110000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000111110000000000000000000111110000 +0000100010000000000000000000100010000000000000000000100010000 +0000101010000000000000000000101010000000000000000000101010000 +0000100010000000000000000000100010000000000000000000100010000 +0000111110000000000000000000111110000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000 +0011111000000000000000000000000000000000000000000000000000000 +1110100000000000000000000000000000000000000000000000000000000 +1111001000000000000000000000111110000000000000000000111110000 +0000000010000000000000000000100010000000000000000000100010000 +1111111000000000000000000000101010000000000000000000101010000 +1000001000000000000000000000100010000000000000000000100010000 +1011101000000000000000000000111110000000000000000000111110000 +1011101000000000000000000000000000000000000000000000000000000 +1011101000000000000000000000000000000000000000000000000000000 +1000001000000000000000000000000000000000000000000000000000000 +1111111000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr12.dat b/vendor/endroid/qr-code/assets/data/qrvfr12.dat new file mode 100644 index 000000000..c184f27cc --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr12.dat @@ -0,0 +1,65 @@ +11111110000000000000000000000000000000000000000000000001001111111 +10000010000000000000000000000000000000000000000000000000101000001 +10111010000000000000000000000000000000000000000000000010101011101 +10111010000000000000000000000000000000000000000000000011001011101 +10111010000000000000000000000011111000000000000000000000101011101 +10000010000000000000000000000010001000000000000000000010001000001 +11111110101010101010101010101010101010101010101010101010101111111 +00000000000000000000000000000010001000000000000000000000000000000 +00000010000000000000000000000011111000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000000000011111000000000000000000000111110000 +00001000100000000000000000000010001000000000000000000000100010000 +00001010100000000000000000000010101000000000000000000000101010000 +00001000100000000000000000000010001000000000000000000000100010000 +00001111100000000000000000000011111000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000 +00110110000000000000000000000000000000000000000000000000000000000 +10010000000000000000000000000000000000000000000000000000000000000 +01101010000000000000000000000011111000000000000000000000111110000 +00000000100000000000000000000010001000000000000000000000100010000 +11111110000000000000000000000010101000000000000000000000101010000 +10000010000000000000000000000010001000000000000000000000100010000 +10111010000000000000000000000011111000000000000000000000111110000 +10111010000000000000000000000000000000000000000000000000000000000 +10111010000000000000000000000000000000000000000000000000000000000 +10000010000000000000000000000000000000000000000000000000000000000 +11111110000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr13.dat b/vendor/endroid/qr-code/assets/data/qrvfr13.dat new file mode 100644 index 000000000..16a111f17 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr13.dat @@ -0,0 +1,69 @@ +111111100000000000000000000000000000000000000000000000000011101111111 +100000100000000000000000000000000000000000000000000000000000001000001 +101110100000000000000000000000000000000000000000000000000010001011101 +101110100000000000000000000000000000000000000000000000000000101011101 +101110100000000000000000000000001111100000000000000000000010101011101 +100000100000000000000000000000001000100000000000000000000010001000001 +111111101010101010101010101010101010101010101010101010101010101111111 +000000000000000000000000000000001000100000000000000000000000000000000 +000000100000000000000000000000001111100000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000000000001111100000000000000000000000111110000 +000010001000000000000000000000001000100000000000000000000000100010000 +000010101000000000000000000000001010100000000000000000000000101010000 +000010001000000000000000000000001000100000000000000000000000100010000 +000011111000000000000000000000001111100000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000 +101011100000000000000000000000000000000000000000000000000000000000000 +100000000000000000000000000000000000000000000000000000000000000000000 +100110100000000000000000000000001111100000000000000000000000111110000 +000000001000000000000000000000001000100000000000000000000000100010000 +111111100000000000000000000000001010100000000000000000000000101010000 +100000100000000000000000000000001000100000000000000000000000100010000 +101110100000000000000000000000001111100000000000000000000000111110000 +101110100000000000000000000000000000000000000000000000000000000000000 +101110100000000000000000000000000000000000000000000000000000000000000 +100000100000000000000000000000000000000000000000000000000000000000000 +111111100000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr14.dat b/vendor/endroid/qr-code/assets/data/qrvfr14.dat new file mode 100644 index 000000000..8b15012c0 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr14.dat @@ -0,0 +1,73 @@ +1111111000000000000000000000000000000000000000000000000000000010101111111 +1000001000000000000000000000000000000000000000000000000000000010001000001 +1011101000000000000000000000000000000000000000000000000000000000001011101 +1011101000000000000000000000000000000000000000000000000000000011001011101 +1011101000000000000000001111100000000000000011111000000000000001101011101 +1000001000000000000000001000100000000000000010001000000000000010001000001 +1111111010101010101010101010101010101010101010101010101010101010101111111 +0000000000000000000000001000100000000000000010001000000000000000000000000 +0000001000000000000000001111100000000000000011111000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000001111100000000000000011111000000000000000111110000 +0000100010000000000000001000100000000000000010001000000000000000100010000 +0000101010000000000000001010100000000000000010101000000000000000101010000 +0000100010000000000000001000100000000000000010001000000000000000100010000 +0000111110000000000000001111100000000000000011111000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000001111100000000000000011111000000000000000111110000 +0000100010000000000000001000100000000000000010001000000000000000100010000 +0000101010000000000000001010100000000000000010101000000000000000101010000 +0000100010000000000000001000100000000000000010001000000000000000100010000 +0000111110000000000000001111100000000000000011111000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000 +1101011000000000000000000000000000000000000000000000000000000000000000000 +0001100000000000000000000000000000000000000000000000000000000000000000000 +1000101000000000000000001111100000000000000011111000000000000000111110000 +0000000010000000000000001000100000000000000010001000000000000000100010000 +1111111000000000000000001010100000000000000010101000000000000000101010000 +1000001000000000000000001000100000000000000010001000000000000000100010000 +1011101000000000000000001111100000000000000011111000000000000000111110000 +1011101000000000000000000000000000000000000000000000000000000000000000000 +1011101000000000000000000000000000000000000000000000000000000000000000000 +1000001000000000000000000000000000000000000000000000000000000000000000000 +1111111000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr15.dat b/vendor/endroid/qr-code/assets/data/qrvfr15.dat new file mode 100644 index 000000000..ab8232dd8 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr15.dat @@ -0,0 +1,77 @@ +11111110000000000000000000000000000000000000000000000000000000000000001111111 +10000010000000000000000000000000000000000000000000000000000000000010101000001 +10111010000000000000000000000000000000000000000000000000000000000000101011101 +10111010000000000000000000000000000000000000000000000000000000000000101011101 +10111010000000000000000011111000000000000000001111100000000000000011101011101 +10000010000000000000000010001000000000000000001000100000000000000010001000001 +11111110101010101010101010101010101010101010101010101010101010101010101111111 +00000000000000000000000010001000000000000000001000100000000000000000000000000 +00000010000000000000000011111000000000000000001111100000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000011111000000000000000001111100000000000000000111110000 +00001000100000000000000010001000000000000000001000100000000000000000100010000 +00001010100000000000000010101000000000000000001010100000000000000000101010000 +00001000100000000000000010001000000000000000001000100000000000000000100010000 +00001111100000000000000011111000000000000000001111100000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000011111000000000000000001111100000000000000000111110000 +00001000100000000000000010001000000000000000001000100000000000000000100010000 +00001010100000000000000010101000000000000000001010100000000000000000101010000 +00001000100000000000000010001000000000000000001000100000000000000000100010000 +00001111100000000000000011111000000000000000001111100000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000 +01001110000000000000000000000000000000000000000000000000000000000000000000000 +00001000000000000000000000000000000000000000000000000000000000000000000000000 +01111010000000000000000011111000000000000000001111100000000000000000111110000 +00000000100000000000000010001000000000000000001000100000000000000000100010000 +11111110000000000000000010101000000000000000001010100000000000000000101010000 +10000010000000000000000010001000000000000000001000100000000000000000100010000 +10111010000000000000000011111000000000000000001111100000000000000000111110000 +10111010000000000000000000000000000000000000000000000000000000000000000000000 +10111010000000000000000000000000000000000000000000000000000000000000000000000 +10000010000000000000000000000000000000000000000000000000000000000000000000000 +11111110000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr16.dat b/vendor/endroid/qr-code/assets/data/qrvfr16.dat new file mode 100644 index 000000000..04edd07b4 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr16.dat @@ -0,0 +1,81 @@ +111111100000000000000000000000000000000000000000000000000000000000000000001111111 +100000100000000000000000000000000000000000000000000000000000000000000011101000001 +101110100000000000000000000000000000000000000000000000000000000000000010101011101 +101110100000000000000000000000000000000000000000000000000000000000000010101011101 +101110100000000000000000111110000000000000000000111110000000000000000000001011101 +100000100000000000000000100010000000000000000000100010000000000000000001001000001 +111111101010101010101010101010101010101010101010101010101010101010101010101111111 +000000000000000000000000100010000000000000000000100010000000000000000000000000000 +000000100000000000000000111110000000000000000000111110000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000111110000000000000000000111110000000000000000000111110000 +000010001000000000000000100010000000000000000000100010000000000000000000100010000 +000010101000000000000000101010000000000000000000101010000000000000000000101010000 +000010001000000000000000100010000000000000000000100010000000000000000000100010000 +000011111000000000000000111110000000000000000000111110000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000111110000000000000000000111110000000000000000000111110000 +000010001000000000000000100010000000000000000000100010000000000000000000100010000 +000010101000000000000000101010000000000000000000101010000000000000000000101010000 +000010001000000000000000100010000000000000000000100010000000000000000000100010000 +000011111000000000000000111110000000000000000000111110000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000 +011100100000000000000000000000000000000000000000000000000000000000000000000000000 +010001000000000000000000000000000000000000000000000000000000000000000000000000000 +011100100000000000000000111110000000000000000000111110000000000000000000111110000 +000000001000000000000000100010000000000000000000100010000000000000000000100010000 +111111100000000000000000101010000000000000000000101010000000000000000000101010000 +100000100000000000000000100010000000000000000000100010000000000000000000100010000 +101110100000000000000000111110000000000000000000111110000000000000000000111110000 +101110100000000000000000000000000000000000000000000000000000000000000000000000000 +101110100000000000000000000000000000000000000000000000000000000000000000000000000 +100000100000000000000000000000000000000000000000000000000000000000000000000000000 +111111100000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr17.dat b/vendor/endroid/qr-code/assets/data/qrvfr17.dat new file mode 100644 index 000000000..41d0011a2 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr17.dat @@ -0,0 +1,85 @@ +1111111000000000000000000000000000000000000000000000000000000000000000000010101111111 +1000001000000000000000000000000000000000000000000000000000000000000000000011001000001 +1011101000000000000000000000000000000000000000000000000000000000000000000010001011101 +1011101000000000000000000000000000000000000000000000000000000000000000000001001011101 +1011101000000000000000000000111110000000000000000000111110000000000000000010001011101 +1000001000000000000000000000100010000000000000000000100010000000000000000001001000001 +1111111010101010101010101010101010101010101010101010101010101010101010101010101111111 +0000000000000000000000000000100010000000000000000000100010000000000000000000000000000 +0000001000000000000000000000111110000000000000000000111110000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1110101000000000000000000000000000000000000000000000000000000000000000000000000000000 +0101010000000000000000000000000000000000000000000000000000000000000000000000000000000 +1000001000000000000000000000111110000000000000000000111110000000000000000000111110000 +0000000010000000000000000000100010000000000000000000100010000000000000000000100010000 +1111111000000000000000000000101010000000000000000000101010000000000000000000101010000 +1000001000000000000000000000100010000000000000000000100010000000000000000000100010000 +1011101000000000000000000000111110000000000000000000111110000000000000000000111110000 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000 +1000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +1111111000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr18.dat b/vendor/endroid/qr-code/assets/data/qrvfr18.dat new file mode 100644 index 000000000..d5e513ec3 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr18.dat @@ -0,0 +1,89 @@ +11111110000000000000000000000000000000000000000000000000000000000000000000000011101111111 +10000010000000000000000000000000000000000000000000000000000000000000000000000001001000001 +10111010000000000000000000000000000000000000000000000000000000000000000000000000001011101 +10111010000000000000000000000000000000000000000000000000000000000000000000000010101011101 +10111010000000000000000000001111100000000000000000000011111000000000000000000001001011101 +10000010000000000000000000001000100000000000000000000010001000000000000000000001001000001 +11111110101010101010101010101010101010101010101010101010101010101010101010101010101111111 +00000000000000000000000000001000100000000000000000000010001000000000000000000000000000000 +00000010000000000000000000001111100000000000000000000011111000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000000001111100000000000000000000011111000000000000000000000111110000 +00001000100000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001010100000000000000000001010100000000000000000000010101000000000000000000000101010000 +00001000100000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001111100000000000000000001111100000000000000000000011111000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000000001111100000000000000000000011111000000000000000000000111110000 +00001000100000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001010100000000000000000001010100000000000000000000010101000000000000000000000101010000 +00001000100000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001111100000000000000000001111100000000000000000000011111000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10010010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +11001100000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10010010000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00000000100000000000000000001000100000000000000000000010001000000000000000000000100010000 +11111110000000000000000000001010100000000000000000000010101000000000000000000000101010000 +10000010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +10111010000000000000000000001111100000000000000000000011111000000000000000000000111110000 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000 +11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr19.dat b/vendor/endroid/qr-code/assets/data/qrvfr19.dat new file mode 100644 index 000000000..bd4205108 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr19.dat @@ -0,0 +1,93 @@ +111111100000000000000000000000000000000000000000000000000000000000000000000000000001001111111 +100000100000000000000000000000000000000000000000000000000000000000000000000000000001101000001 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000101011101 +101110100000000000000000000000000000000000000000000000000000000000000000000000000001001011101 +101110100000000000000000000011111000000000000000000000001111100000000000000000000011001011101 +100000100000000000000000000010001000000000000000000000001000100000000000000000000001001000001 +111111101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +000000000000000000000000000010001000000000000000000000001000100000000000000000000000000000000 +000000100000000000000000000011111000000000000000000000001111100000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000010101000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000010101000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +110111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +011000100000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000000001000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +111111100000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +100000100000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +101110100000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr2.dat b/vendor/endroid/qr-code/assets/data/qrvfr2.dat new file mode 100644 index 000000000..bdb0a6036 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr2.dat @@ -0,0 +1,25 @@ +1111111000000000001111111 +1000001000000000001000001 +1011101000000000001011101 +1011101000000000001011101 +1011101000000000001011101 +1000001000000000001000001 +1111111010101010101111111 +0000000000000000000000000 +0000001000000000000000000 +0000000000000000000000000 +0000001000000000000000000 +0000000000000000000000000 +0000001000000000000000000 +0000000000000000000000000 +0000001000000000000000000 +0000000000000000000000000 +0000001000000000111110000 +0000000010000000100010000 +1111111000000000101010000 +1000001000000000100010000 +1011101000000000111110000 +1011101000000000000000000 +1011101000000000000000000 +1000001000000000000000000 +1111111000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr20.dat b/vendor/endroid/qr-code/assets/data/qrvfr20.dat new file mode 100644 index 000000000..de93b4ef2 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr20.dat @@ -0,0 +1,97 @@ +1111111000000000000000000000000000000000000000000000000000000000000000000000000000000001101111111 +1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000101000001 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000001101011101 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000101011101 +1011101000000000000000000000000011111000000000000000000000001111100000000000000000000000101011101 +1000001000000000000000000000000010001000000000000000000000001000100000000000000000000001001000001 +1111111010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +0000000000000000000000000000000010001000000000000000000000001000100000000000000000000000000000000 +0000001000000000000000000000000011111000000000000000000000001111100000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +0000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +0000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +0000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +0000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +0000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +0000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +0000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +0000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1010010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1111101000000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +0000000010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +1111111000000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +1000001000000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +1011101000000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr21.dat b/vendor/endroid/qr-code/assets/data/qrvfr21.dat new file mode 100644 index 000000000..830f6e056 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr21.dat @@ -0,0 +1,101 @@ +11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000011001111111 +10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000001001011101 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000011001011101 +10111010000000000000000000111110000000000000000011111000000000000000001111100000000000000010101011101 +10000010000000000000000000100010000000000000000010001000000000000000001000100000000000000001001000001 +11111110101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +00000000000000000000000000100010000000000000000010001000000000000000001000100000000000000000000000000 +00000010000000000000000000111110000000000000000011111000000000000000001111100000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000000111110000000000000000011111000000000000000001111100000000000000000111110000 +00001000100000000000000000100010000000000000000010001000000000000000001000100000000000000000100010000 +00001010100000000000000000101010000000000000000010101000000000000000001010100000000000000000101010000 +00001000100000000000000000100010000000000000000010001000000000000000001000100000000000000000100010000 +00001111100000000000000000111110000000000000000011111000000000000000001111100000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000000111110000000000000000011111000000000000000001111100000000000000000111110000 +00001000100000000000000000100010000000000000000010001000000000000000001000100000000000000000100010000 +00001010100000000000000000101010000000000000000010101000000000000000001010100000000000000000101010000 +00001000100000000000000000100010000000000000000010001000000000000000001000100000000000000000100010000 +00001111100000000000000000111110000000000000000011111000000000000000001111100000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000000111110000000000000000011111000000000000000001111100000000000000000111110000 +00001000100000000000000000100010000000000000000010001000000000000000001000100000000000000000100010000 +00001010100000000000000000101010000000000000000010101000000000000000001010100000000000000000101010000 +00001000100000000000000000100010000000000000000010001000000000000000001000100000000000000000100010000 +00001111100000000000000000111110000000000000000011111000000000000000001111100000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10011010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001010000000000000000000111110000000000000000011111000000000000000001111100000000000000000111110000 +00000000100000000000000000100010000000000000000010001000000000000000001000100000000000000000100010000 +11111110000000000000000000101010000000000000000010101000000000000000001010100000000000000000101010000 +10000010000000000000000000100010000000000000000010001000000000000000001000100000000000000000100010000 +10111010000000000000000000111110000000000000000011111000000000000000001111100000000000000000111110000 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr22.dat b/vendor/endroid/qr-code/assets/data/qrvfr22.dat new file mode 100644 index 000000000..d2f286113 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr22.dat @@ -0,0 +1,105 @@ +111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001111111 +100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000001 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001011101 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101011101 +101110100000000000000000111110000000000000000000111110000000000000000000111110000000000000000001101011101 +100000100000000000000000100010000000000000000000100010000000000000000000100010000000000000000001001000001 +111111101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +000000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000000000000 +000000100000000000000000111110000000000000000000111110000000000000000000111110000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +000010101000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +000010101000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +000010101000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +111000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000110100000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +000000001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +111111100000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +100000100000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +101110100000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr23.dat b/vendor/endroid/qr-code/assets/data/qrvfr23.dat new file mode 100644 index 000000000..7d08b5b1f --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr23.dat @@ -0,0 +1,109 @@ +1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101111111 +1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101000001 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011101011101 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001011101 +1011101000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000011101011101 +1000001000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000001001000001 +1111111010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +0000000000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000000000000 +0000001000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0111101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0011110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1110101000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000000010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +1111111000000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +1000001000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +1011101000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr24.dat b/vendor/endroid/qr-code/assets/data/qrvfr24.dat new file mode 100644 index 000000000..b4182218d --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr24.dat @@ -0,0 +1,113 @@ +11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101111111 +10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001011101 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011101011101 +10111010000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000001011101 +10000010000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000011001000001 +11111110101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +00000000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000000000000 +00000010000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00001000100000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001010100000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +00001000100000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001111100000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00001000100000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001010100000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +00001000100000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001111100000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00001000100000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001010100000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +00001000100000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001111100000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00110110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10010010000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00000000100000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +11111110000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +10000010000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +10111010000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr25.dat b/vendor/endroid/qr-code/assets/data/qrvfr25.dat new file mode 100644 index 000000000..0386cf148 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr25.dat @@ -0,0 +1,117 @@ +111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001111111 +100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000001 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011101011101 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001011101 +101110100000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000010001011101 +100000100000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000011001000001 +111111101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +000000000000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000000000000 +000000100000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +101011100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +011000100000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000000001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +111111100000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +100000100000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +101110100000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr26.dat b/vendor/endroid/qr-code/assets/data/qrvfr26.dat new file mode 100644 index 000000000..09a680c31 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr26.dat @@ -0,0 +1,121 @@ +1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001111111 +1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101000001 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101011101 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011101011101 +1011101000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000001001011101 +1000001000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000011001000001 +1111111010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +0000000000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000000000000 +0000001000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +0000100010000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +0000101010000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +0000100010000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +0000111110000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +0000100010000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +0000101010000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +0000100010000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +0000111110000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +0000100010000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +0000101010000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +0000100010000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +0000111110000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1101011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1011110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0111001000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +0000000010000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +1111111000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +1000001000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +1011101000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr27.dat b/vendor/endroid/qr-code/assets/data/qrvfr27.dat new file mode 100644 index 000000000..36fd3dc4a --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr27.dat @@ -0,0 +1,125 @@ +11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101111111 +10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000001 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001011101 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001011101 +10111010000000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000011001011101 +10000010000000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000011001000001 +11111110101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +00000000000000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000000000000 +00000010000000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +00001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +00001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +00001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +01001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10101100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10000010000000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00000000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +11111110000000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +10000010000000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +10111010000000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr28.dat b/vendor/endroid/qr-code/assets/data/qrvfr28.dat new file mode 100644 index 000000000..711dfb7a5 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr28.dat @@ -0,0 +1,129 @@ +111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001111111 +100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001000001 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001011101 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101011101 +101110100000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000101011101 +100000100000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000011001000001 +111111101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +000000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000000000000 +000000100000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +000010101000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +000010101000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +000010101000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +000010101000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +000010001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +000011111000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +010001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +110101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000110100000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +000000001000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +111111100000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +100000100000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +101110100000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr29.dat b/vendor/endroid/qr-code/assets/data/qrvfr29.dat new file mode 100644 index 000000000..f42a10a1a --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr29.dat @@ -0,0 +1,133 @@ +1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011101111111 +1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011101000001 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101011101 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001011101 +1011101000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000010101011101 +1000001000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000011001000001 +1111111010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +0000000000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000000000000 +0000001000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1101111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1110101000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000000010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +1111111000000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +1000001000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +1011101000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr3.dat b/vendor/endroid/qr-code/assets/data/qrvfr3.dat new file mode 100644 index 000000000..6052b4aff --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr3.dat @@ -0,0 +1,29 @@ +11111110000000000000001111111 +10000010000000000000001000001 +10111010000000000000001011101 +10111010000000000000001011101 +10111010000000000000001011101 +10000010000000000000001000001 +11111110101010101010101111111 +00000000000000000000000000000 +00000010000000000000000000000 +00000000000000000000000000000 +00000010000000000000000000000 +00000000000000000000000000000 +00000010000000000000000000000 +00000000000000000000000000000 +00000010000000000000000000000 +00000000000000000000000000000 +00000010000000000000000000000 +00000000000000000000000000000 +00000010000000000000000000000 +00000000000000000000000000000 +00000010000000000000111110000 +00000000100000000000100010000 +11111110000000000000101010000 +10000010000000000000100010000 +10111010000000000000111110000 +10111010000000000000000000000 +10111010000000000000000000000 +10000010000000000000000000000 +11111110000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr30.dat b/vendor/endroid/qr-code/assets/data/qrvfr30.dat new file mode 100644 index 000000000..5d76142c5 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr30.dat @@ -0,0 +1,137 @@ +11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101111111 +10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101000001 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101011101 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101011101 +10111010000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000001101011101 +10000010000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000011001000001 +11111110101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +00000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000000000000 +00000010000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00001000100000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001010100000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +00001000100000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001111100000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00001000100000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001010100000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +00001000100000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001111100000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00001000100000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001010100000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +00001000100000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001111100000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00001000100000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001010100000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +00001000100000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001111100000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10100110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +01011100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +11111010000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00000000100000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +11111110000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +10000010000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +10111010000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr31.dat b/vendor/endroid/qr-code/assets/data/qrvfr31.dat new file mode 100644 index 000000000..0028f5462 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr31.dat @@ -0,0 +1,141 @@ +111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111 +100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001000001 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001011101 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001011101 +101110100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000011101011101 +100000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000011001000001 +111111101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +000000000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000000000000 +000000100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000010001000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000010101000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +000010001000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000011111000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000010001000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000010101000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +000010001000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000011111000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000010001000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000010101000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +000010001000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000011111000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000010001000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000010101000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +000010001000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000011111000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +010011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000010100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000000001000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +111111100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +100000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +101110100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr32.dat b/vendor/endroid/qr-code/assets/data/qrvfr32.dat new file mode 100644 index 000000000..2d26d15eb --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr32.dat @@ -0,0 +1,145 @@ +1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101111111 +1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001000001 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011101011101 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101011101 +1011101000000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000001011101 +1000001000000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000101000001 +1111111010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +0000000000000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000000000000 +0000001000000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +0000100010000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +0000101010000000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +0000100010000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +0000111110000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +0000100010000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +0000101010000000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +0000100010000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +0000111110000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +0000100010000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +0000101010000000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +0000100010000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +0000111110000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +0000100010000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +0000101010000000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +0000100010000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +0000111110000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1010001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1011011000000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +0000000010000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +1111111000000000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +1000001000000000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +1011101000000000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr33.dat b/vendor/endroid/qr-code/assets/data/qrvfr33.dat new file mode 100644 index 000000000..eac0964a2 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr33.dat @@ -0,0 +1,149 @@ +11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111 +10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101000001 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001011101 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001011101 +10111010000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000010001011101 +10000010000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000101000001 +11111110101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +00000000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000000000000 +00000010000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00001000100000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001010100000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +00001000100000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001111100000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00001000100000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001010100000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +00001000100000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001111100000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00001000100000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001010100000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +00001000100000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001111100000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00001000100000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001010100000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +00001000100000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001111100000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +01110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +01000110000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00000000100000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +11111110000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +10000010000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +10111010000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr34.dat b/vendor/endroid/qr-code/assets/data/qrvfr34.dat new file mode 100644 index 000000000..8b09e2c16 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr34.dat @@ -0,0 +1,153 @@ +111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001111111 +100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011101000001 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001011101 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101011101 +101110100000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000001001011101 +100000100000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000101000001 +111111101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +000000000000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000000000000 +000000100000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +010000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +010101100000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000000001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +111111100000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +100000100000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +101110100000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr35.dat b/vendor/endroid/qr-code/assets/data/qrvfr35.dat new file mode 100644 index 000000000..82ba5bc15 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr35.dat @@ -0,0 +1,157 @@ +1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011101111111 +1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001000001 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101011101 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001011101 +1011101000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000011001011101 +1000001000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000101000001 +1111111010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +0000000000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000000000000 +0000001000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +0000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +0000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1101101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1010011000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +0000000010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +1111111000000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000000000000000000101010000 +1000001000000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000000000000000000100010000 +1011101000000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000000000000000000111110000 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr36.dat b/vendor/endroid/qr-code/assets/data/qrvfr36.dat new file mode 100644 index 000000000..17f90b853 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr36.dat @@ -0,0 +1,161 @@ +11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001111111 +10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000001 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101011101 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101011101 +10111010000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000101011101 +10000010000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000101000001 +11111110101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +00000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000000000000 +00000010000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00001000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001010100000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +00001000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001111100000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00001000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001010100000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +00001000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001111100000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00001000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001010100000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +00001000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001111100000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00001000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001010100000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +00001000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001111100000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00001000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001010100000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +00001000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +00001111100000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +11010010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00111110000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +00000000100000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +11111110000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +10000010000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +10111010000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr37.dat b/vendor/endroid/qr-code/assets/data/qrvfr37.dat new file mode 100644 index 000000000..8bdf9a688 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr37.dat @@ -0,0 +1,165 @@ +111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101111111 +100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101000001 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001011101 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001011101 +101110100000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000010101011101 +100000100000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000101000001 +111111101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +000000000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000000000000 +000000100000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000010001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000010101000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +000010001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000011111000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000010001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000010101000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +000010001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000011111000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000010001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000010101000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +000010001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000011111000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000010001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000010101000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +000010001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000011111000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000010001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000010101000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +000010001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +000011111000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +010010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +100100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +110011100000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +000000001000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +111111100000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +100000100000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +101110100000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr38.dat b/vendor/endroid/qr-code/assets/data/qrvfr38.dat new file mode 100644 index 000000000..b156abe97 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr38.dat @@ -0,0 +1,169 @@ +1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101111111 +1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000001 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001011101 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101011101 +1011101000000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000001101011101 +1000001000000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000101000001 +1111111010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +0000000000000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000000000000 +0000001000000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +0000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +0000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +0000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +0000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +0000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +0000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +0000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +0000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +0000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +0000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +0000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +0000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +0000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +0000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +0000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +0000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +0000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +0000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +0000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +0000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0011001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1101111000000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +0000000010000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +1111111000000000000000000000001010100000000000000000000010101000000000000000000000101010000000000000000000001010100000000000000000000010101000000000000000000000101010000 +1000001000000000000000000000001000100000000000000000000010001000000000000000000000100010000000000000000000001000100000000000000000000010001000000000000000000000100010000 +1011101000000000000000000000001111100000000000000000000011111000000000000000000000111110000000000000000000001111100000000000000000000011111000000000000000000000111110000 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1011101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +1111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr39.dat b/vendor/endroid/qr-code/assets/data/qrvfr39.dat new file mode 100644 index 000000000..39157fca0 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr39.dat @@ -0,0 +1,173 @@ +11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001111111 +10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101011101 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001011101 +10111010000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000011101011101 +10000010000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000101000001 +11111110101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +00000000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000000000000 +00000010000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00001000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001010100000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +00001000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001111100000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00001000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001010100000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +00001000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001111100000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00001000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001010100000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +00001000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001111100000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00001000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001010100000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +00001000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001111100000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001111100000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00001000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001010100000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +00001000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +00001111100000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00101110000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +00000000100000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +11111110000000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +10000010000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +10111010000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10111010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +10000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +11111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr4.dat b/vendor/endroid/qr-code/assets/data/qrvfr4.dat new file mode 100644 index 000000000..defeebd9e --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr4.dat @@ -0,0 +1,33 @@ +111111100000000000000000001111111 +100000100000000000000000001000001 +101110100000000000000000001011101 +101110100000000000000000001011101 +101110100000000000000000001011101 +100000100000000000000000001000001 +111111101010101010101010101111111 +000000000000000000000000000000000 +000000100000000000000000000000000 +000000000000000000000000000000000 +000000100000000000000000000000000 +000000000000000000000000000000000 +000000100000000000000000000000000 +000000000000000000000000000000000 +000000100000000000000000000000000 +000000000000000000000000000000000 +000000100000000000000000000000000 +000000000000000000000000000000000 +000000100000000000000000000000000 +000000000000000000000000000000000 +000000100000000000000000000000000 +000000000000000000000000000000000 +000000100000000000000000000000000 +000000000000000000000000000000000 +000000100000000000000000111110000 +000000001000000000000000100010000 +111111100000000000000000101010000 +100000100000000000000000100010000 +101110100000000000000000111110000 +101110100000000000000000000000000 +101110100000000000000000000000000 +100000100000000000000000000000000 +111111100000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr40.dat b/vendor/endroid/qr-code/assets/data/qrvfr40.dat new file mode 100644 index 000000000..b4e5bbe76 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr40.dat @@ -0,0 +1,177 @@ +111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001111111 +100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101000001 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001011101 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101011101 +101110100000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000001011101 +100000100000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000010101000001 +111111101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101111111 +000000000000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000000000000 +000000100000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000010101000000000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000010101000000000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000010101000000000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000010101000000000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000010101000000000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +000010001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +000011111000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +111001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +010101100000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +000000001000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +111111100000000000000000000010101000000000000000000000001010100000000000000000000000101010000000000000000000000010101000000000000000000000001010100000000000000000000000101010000 +100000100000000000000000000010001000000000000000000000001000100000000000000000000000100010000000000000000000000010001000000000000000000000001000100000000000000000000000100010000 +101110100000000000000000000011111000000000000000000000001111100000000000000000000000111110000000000000000000000011111000000000000000000000001111100000000000000000000000111110000 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr5.dat b/vendor/endroid/qr-code/assets/data/qrvfr5.dat new file mode 100644 index 000000000..8f2898d8f --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr5.dat @@ -0,0 +1,37 @@ +1111111000000000000000000000001111111 +1000001000000000000000000000001000001 +1011101000000000000000000000001011101 +1011101000000000000000000000001011101 +1011101000000000000000000000001011101 +1000001000000000000000000000001000001 +1111111010101010101010101010101111111 +0000000000000000000000000000000000000 +0000001000000000000000000000000000000 +0000000000000000000000000000000000000 +0000001000000000000000000000000000000 +0000000000000000000000000000000000000 +0000001000000000000000000000000000000 +0000000000000000000000000000000000000 +0000001000000000000000000000000000000 +0000000000000000000000000000000000000 +0000001000000000000000000000000000000 +0000000000000000000000000000000000000 +0000001000000000000000000000000000000 +0000000000000000000000000000000000000 +0000001000000000000000000000000000000 +0000000000000000000000000000000000000 +0000001000000000000000000000000000000 +0000000000000000000000000000000000000 +0000001000000000000000000000000000000 +0000000000000000000000000000000000000 +0000001000000000000000000000000000000 +0000000000000000000000000000000000000 +0000001000000000000000000000111110000 +0000000010000000000000000000100010000 +1111111000000000000000000000101010000 +1000001000000000000000000000100010000 +1011101000000000000000000000111110000 +1011101000000000000000000000000000000 +1011101000000000000000000000000000000 +1000001000000000000000000000000000000 +1111111000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr6.dat b/vendor/endroid/qr-code/assets/data/qrvfr6.dat new file mode 100644 index 000000000..ab4aeb760 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr6.dat @@ -0,0 +1,41 @@ +11111110000000000000000000000000001111111 +10000010000000000000000000000000001000001 +10111010000000000000000000000000001011101 +10111010000000000000000000000000001011101 +10111010000000000000000000000000001011101 +10000010000000000000000000000000001000001 +11111110101010101010101010101010101111111 +00000000000000000000000000000000000000000 +00000010000000000000000000000000000000000 +00000000000000000000000000000000000000000 +00000010000000000000000000000000000000000 +00000000000000000000000000000000000000000 +00000010000000000000000000000000000000000 +00000000000000000000000000000000000000000 +00000010000000000000000000000000000000000 +00000000000000000000000000000000000000000 +00000010000000000000000000000000000000000 +00000000000000000000000000000000000000000 +00000010000000000000000000000000000000000 +00000000000000000000000000000000000000000 +00000010000000000000000000000000000000000 +00000000000000000000000000000000000000000 +00000010000000000000000000000000000000000 +00000000000000000000000000000000000000000 +00000010000000000000000000000000000000000 +00000000000000000000000000000000000000000 +00000010000000000000000000000000000000000 +00000000000000000000000000000000000000000 +00000010000000000000000000000000000000000 +00000000000000000000000000000000000000000 +00000010000000000000000000000000000000000 +00000000000000000000000000000000000000000 +00000010000000000000000000000000111110000 +00000000100000000000000000000000100010000 +11111110000000000000000000000000101010000 +10000010000000000000000000000000100010000 +10111010000000000000000000000000111110000 +10111010000000000000000000000000000000000 +10111010000000000000000000000000000000000 +10000010000000000000000000000000000000000 +11111110000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr7.dat b/vendor/endroid/qr-code/assets/data/qrvfr7.dat new file mode 100644 index 000000000..4d6bebf8c --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr7.dat @@ -0,0 +1,45 @@ +111111100000000000000000000000000000101111111 +100000100000000000000000000000000001001000001 +101110100000000000000000000000000001001011101 +101110100000000000000000000000000001101011101 +101110100000000000001111100000000011101011101 +100000100000000000001000100000000000001000001 +111111101010101010101010101010101010101111111 +000000000000000000001000100000000000000000000 +000000100000000000001111100000000000000000000 +000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000 +000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000 +000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000 +000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000 +000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000 +000000000000000000000000000000000000000000000 +000011111000000000001111100000000000111110000 +000010001000000000001000100000000000100010000 +000010101000000000001010100000000000101010000 +000010001000000000001000100000000000100010000 +000011111000000000001111100000000000111110000 +000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000 +000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000 +000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000 +000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000 +000000000000000000000000000000000000000000000 +000010100000000000000000000000000000000000000 +011110000000000000000000000000000000000000000 +100110100000000000001111100000000000111110000 +000000001000000000001000100000000000100010000 +111111100000000000001010100000000000101010000 +100000100000000000001000100000000000100010000 +101110100000000000001111100000000000111110000 +101110100000000000000000000000000000000000000 +101110100000000000000000000000000000000000000 +100000100000000000000000000000000000000000000 +111111100000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr8.dat b/vendor/endroid/qr-code/assets/data/qrvfr8.dat new file mode 100644 index 000000000..ffe6d352b --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr8.dat @@ -0,0 +1,49 @@ +1111111000000000000000000000000000000000101111111 +1000001000000000000000000000000000000011101000001 +1011101000000000000000000000000000000001101011101 +1011101000000000000000000000000000000001001011101 +1011101000000000000000111110000000000000001011101 +1000001000000000000000100010000000000010001000001 +1111111010101010101010101010101010101010101111111 +0000000000000000000000100010000000000000000000000 +0000001000000000000000111110000000000000000000000 +0000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000 +0000111110000000000000111110000000000000111110000 +0000100010000000000000100010000000000000100010000 +0000101010000000000000101010000000000000101010000 +0000100010000000000000100010000000000000100010000 +0000111110000000000000111110000000000000111110000 +0000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000 +0100011000000000000000000000000000000000000000000 +0111000000000000000000000000000000000000000000000 +1110001000000000000000111110000000000000111110000 +0000000010000000000000100010000000000000100010000 +1111111000000000000000101010000000000000101010000 +1000001000000000000000100010000000000000100010000 +1011101000000000000000111110000000000000111110000 +1011101000000000000000000000000000000000000000000 +1011101000000000000000000000000000000000000000000 +1000001000000000000000000000000000000000000000000 +1111111000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/qrvfr9.dat b/vendor/endroid/qr-code/assets/data/qrvfr9.dat new file mode 100644 index 000000000..5be74951f --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/qrvfr9.dat @@ -0,0 +1,53 @@ +11111110000000000000000000000000000000000010001111111 +10000010000000000000000000000000000000000011001000001 +10111010000000000000000000000000000000000001001011101 +10111010000000000000000000000000000000000010101011101 +10111010000000000000000011111000000000000010001011101 +10000010000000000000000010001000000000000010001000001 +11111110101010101010101010101010101010101010101111111 +00000000000000000000000010001000000000000000000000000 +00000010000000000000000011111000000000000000000000000 +00000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000 +00001111100000000000000011111000000000000000111110000 +00001000100000000000000010001000000000000000100010000 +00001010100000000000000010101000000000000000101010000 +00001000100000000000000010001000000000000000100010000 +00001111100000000000000011111000000000000000111110000 +00000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000 +11011110000000000000000000000000000000000000000000000 +01100000000000000000000000000000000000000000000000000 +00010010000000000000000011111000000000000000111110000 +00000000100000000000000010001000000000000000100010000 +11111110000000000000000010101000000000000000101010000 +10000010000000000000000010001000000000000000100010000 +10111010000000000000000011111000000000000000111110000 +10111010000000000000000000000000000000000000000000000 +10111010000000000000000000000000000000000000000000000 +10000010000000000000000000000000000000000000000000000 +11111110000000000000000000000000000000000000000000000 diff --git a/vendor/endroid/qr-code/assets/data/rsc10.dat b/vendor/endroid/qr-code/assets/data/rsc10.dat new file mode 100644 index 000000000..0cd0d17d6 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc10.dat @@ -0,0 +1,11 @@ +Ÿo^_qŸo^_q#ޓ'u[Tᓺ^G/F;eaN#;>e;i2toJ}^_v¯FV0#ǯv|M0"(#<&qMveUOd *vOMBh;쉙C%~+2M%&`5'tkxПFCkQpn +`DPFxL03 C[W ]$ "{? U5PΡ@&:5P/fxeDj(eT2vsۦMe +a/JڧQpį)Vdmw>Б[EJLjN_&ӯ94.om#0q̾x;>)CTQtXK! yS`:' l`_OӁfA2O|.Bmc">)oH@,:'Hvn}dWVDI~!4սmkoj_i51F6􍇃_LtjUE+n ^ʈP?1 Iʨ!d)jZNwJ -g1Qsy0 —^ +P@` ˩S7qs.TCRc{?)' k%`G|q?ǁ*6[`wԜLRV&ϕ' Crh"\/$,6}-ͻ<ڱgFoyASۮ`"I CabS1v|{Rݴɘ#,G2+yp-/u& BYW@ȲbdtNi:7lGE(# ]-SLZ& +_s!Ynۂ68d$cDf;U"a\D|\g3bڅٽRqm̕O.CΫ6=}usdQAXitN,Bm*O? {Ȯ4=*r$۳8BIP3 I߈%h"g e.Mp9R] jK2bGl+hK\3r4фryƷfB8-$V6rHz GA@<] B|(a~bA7?5g hMBR*{gQ- u +$Դ[@Z+ݛb7K)N4iӴ'c=`@y9mRժ1(3<"5KbSե G}Ҕ(g]JOn8Y{7dW?Mc\:҉\n!*:Y,A0]6DْxUDf_4OB9c3!9$Vu=lpH]4v.9[(vDU8)|!WrאK9ofĩsgzQ H2 C<["3ԁ4c|B<ߡ7\цy@KlzG=XܛrY$ =Ȣ>7K˥byUc =XZ/k/AT~F +2AEs{i.4h{z1TiJo% 9H{p=$Sf;Œ xTI>JDsʱ+EWpI\rK.?',:p>a[c*?殅.8d=?K jXLĎVLltZw6iŖfqhOQ9&6:a-͵UsvڣsW̄{}5,&QEI pZHl88SE! @ux`P 3TΗXJ SVZz5FetHu%5/wJqj^u,V%}ͧ+=ɔ#Լ:ĿnYRY <0(,]h(uNjwz )fU3krڤSIb;mE˔ \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc13.dat b/vendor/endroid/qr-code/assets/data/rsc13.dat new file mode 100644 index 000000000..138135033 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc13.dat @@ -0,0 +1,14 @@ +I4 .+SxI4 .+Sx""h\V833\r}9DD4Q*pHUOU9pff.? w0w#Ѥu>;Ǩ9[f=I!Ib&.XXL [ViOk^k>pzz[D݅>ڸ4>xLKA]M𶆯ŲmZv +cq>!HRU=bS5 9tNV}_GA1ν My  "G88_XKv )m)tG3^]^gFgyOO*?>~A|"|vMErh7mmBçzBsL\EGgC$5=Ϙ J|B/¶1Ҟּ֣|A3[2 ǗR + &QTEr)1|mshxD`]a|55w/M$$zt SSyY/ϕAB3BMTK홚qqCye4`L`%NRO^C쟝I= +, 057|B2ԬSHl zGc1jr#3FX[jj^-{{pyU#HyH<ݕYY,ol1^i7Yƿu:O>ÄfϖǷ ו#/)"38ʦ`PVk- hJo:)~A8Bu#'#( +<&22{zX@`4j]tNgkngg>=Uvhv3цd-EE$ke@dVTT)@6vIƫbQ0+mwocFfUx >/u#źlW%8EVxaބq[S2aX_G-L.AshhΞ$)n:'yy+ðJJwrT<&a[x[CY^Jo,H,&+p==Sش7zWTVWࢦaP}1RHlJIԓT(ʼ7h]ڷә8$rKWLqǵFeRӴʪֆB!Fޙa[DjܲvBGX4QǸ!Ol {gNi }X;IU:nrrs7-@dmcc~4.PjPik{q}AAdEP ^66GNֽ'Z'5JB i]׷[`Df%]P+ԾlZh0]EXtC$Fe؋>D%z:0 (5 +/ijw":Μu56-č8FoBc̾ n{nÌJH`и]]޹N[LL괟]6q{;4;fU HC2+**R{ b;~K ]:'vwS0(+ ˀ⻘Yy?Ʈ!\TcܴWN M ճ8N겤@`de6BXdLTһJ3#,Ħ\\6EM\M7V}~~`-Mo#o¾K~"5 Niڙ@ zG8 o:l:&5|&5++/& #s)ZŽ̒Xzc")$6sK%mv8FxͧƥC*+I7XWT~;q^k&Ք!o> ΜiIrQ qLIϭU^K )XHPuu ޙ%ww3k8𽬠/*!iAE<~1&z<.L4; +Jy;aNW+canp`魭m(neht6.>N~(TΧ#.X߯uKc!۠ǎu}}~^P0JR ı^S +"AyyO5sG^Ϥm>F1ճD 3V$ !>қ8bN_tYexo{{َ VqR +tLW¯Qw__}. !=66Ȝ)㮍v 4sW g`cBkHh8z 4H]Blֆ44`{()@1]]!900Q^}WYYJuCZѵO*h,&f_F0>ȖorxG\јhvY2e3r"|ݥ/cv96Շ헗FSg}-V,, +gEEMF*GG_5mcZ..Pym A`%/ICw87a?Y.G Dr7\MII+cDSj ~l4Y:-"y#oU&|0Ӂ ieM;fby{KK@fH +H q""~F*R@B|OO+pĬ-Fs6&&2]ދ՜>C 9LwSI?;س5$=>+$$%{&RN!MM/[n&Ci)\4;jҤcq;GBz}llvvܙ& Aqx(҆ZIb*ٮ}vǵs,Rq||51俣`; b-(dJ]~~6>QfD#W^ G򬬨#~@5[ᇳr%.O(=4Oو 7Ul 33Ae?{cGZZ"EaAZ.XX '\ +^11={[$8'fKrś ݗT󃎎8jSk>$ c)ƴg\\x{Ƶe-55+vX+ƫ77ظHdʈ^^6IO5{piRYÎ=\|%Ms??ክyVVT`? °;U@g_tT0m_S1܌D}x[1+ 2QBOTT$ߕC@E==I5K'#PPO;" wm)99xˬ"d8*d$7ZB7 =sޟbu d| e]JytjXnʢFP^Œ:;;pn~C-1JRReWd\:5U,@@7eQ#(U%f))zq2nl` v}cԼb; ,./s E3Q_9XÊDDT Tu +--kҾ.oVkbDtv$wK-EZl:LLdC+X5/&0%%D < %a''y|sJ« NN1":;Yri,攙K"ӗۦ~C,vE*tȆVi_{Aj##H6qj^1L`JJÓxkz|VHHU(J- \!!ެK7LK3B^=yĈyHչZ \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc16.dat b/vendor/endroid/qr-code/assets/data/rsc16.dat new file mode 100644 index 000000000..e44c7a933 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc16.dat @@ -0,0 +1,17 @@ +; hDA)b2$;; hDA)b2$;vg<[RdHvMn"{2VlM4 cx Ȑ9sIf(XVך.mD0dQؚ# Z8N߁3hg@q2U{7=e<^Hs|UryP*u[֨X.IQ)\O`+ȢE)QSthdj-w_F +(pf!_dKb˪x?d4dnzݦp@A% 5^x.!c2vߘQ{s9T}E{@l}#<'@ M\? 6 uw]6R.W VYGRi#j0h;ci$y1ԭZ$D9/k+P#4u%O[>B׾|gkrۮpȖ7I~ &󛬊ZW݌ j3>h?I3,z`<EQY J&jE~9Q! 2zX~߉C"r^7cV>NJ5@uv0)ʇlPkjLJi( *C;mMlV^&]HX_<;&ka3jrmWkPw%t3sP4߶)퓁"8K.3.byX$= yFXc)UIMݓy$cb7ܖ9$ FtC9W8VE-|F5 +5Cdk4\ن"qlBn 6TPg N\V_CVSQ8 Dχ/Vm;|L bd m Yy:K425l` 21UOтDkTi,D䷪Y3,+}Zޟ +-'mΗO~ޓ4"߮1\mf7 |S+6[mFc9?[`ZͼX"[ `- z[- H=EdY'i*M)>z7'% ܴ;C90N LeqhU=H`L +qvfQn{zsllGӔa/_Ŕ(\rB*ΔfHbݛz rIOBМ K8HIXw=0 +_h?UrR쌞=,L?s\ip6~{Ba9Y'ĉio]|`yM"ORKd~qb -`oGؠ$I,ԡ(Jjq:AD|̷(e]oPYwTvښe^PQ^:G)%i>:Բ!H މL G9wxvLw `k1>^[Rw/ef ])s" 4?KA5Jf 栛8S'%›hqRx1yhSd]Si#)3!U1%-ׂTۖb:w"߻*e{UcS"z'.+ZPav>&s12S+>p#CI6b!7=yY#x=t&‹ƭ(\Kc?ѬUlS=XG0KpnWA}-z:upMRUTpY @:kW2u͏Zꏘ@4kCeTE{ܝ}tɜaÎ X}jY$^Fo 0G/ )%5N">f/(]i +gj\T/b? !GbY2?10YS5B.*Al[LҢpݍCn:N`ӭḰ߈|u ts[F^fuN-uL{ oBN:ac.87İk{=l +8\|;{Dp\gq[a1s{g*f\CAÃ*k] ̤Hz3i%o[EHV;Q(:]R;#AH _/v%+ +h*97n1,r&H@-5ultga"5x޾¹NÌ̄IxCBP/3){CkMj \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc17.dat b/vendor/endroid/qr-code/assets/data/rsc17.dat new file mode 100644 index 000000000..f44d14e22 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc17.dat @@ -0,0 +1,18 @@ +wBSxwS)U5}cOwBSxwS)U5}cO,Rjƞ:R{_QX3Qä"I!WN:n/ /t,3WXӤuXbaߊn4*矰fU D?Bh覣b|ǀ\ qqtU85Wo4W.mH^?^UX +fa&c)}b)؅T[,UU wq hN$> #TY#}Y+9w~T +Tk +҃lB#Q[y[G=є(UA.%pj凌[V3:[',% Ů h\ɐ);{{u=Jt~4̫ͪLAslĹn{i9Ei!Ez5>P{euق\JG9zǔQ)(öVкeheI}(KʧދxMM+bD:k'@麕zG.MqӫɿGn!Wx pJmeJQ-'.=/O=(O<0aI7/I$,WӍ!G*ޜR 'sF{Mcc }ͨV&s;r;o%",LK +LyK;eOGC@!:DlUN3ito9#Myky`6***UKebߛbŀCc N#E@MX(M$(o6f8t :{:{ D܎fde)%ԞԋvyMRJXgیYq7l^vthd%dO#A'}|u}ؕoO.c#.!ɉ+~rqBcj|?KI0  Jjm(<,<-,1imKK; 8xݶ[s؂s~AHALhj{wO]0606ՑC"2>n qEnqD~b\ +N"=-"6W!i׵׫}>ʄR'k=ۯ^03_0$mtOzGq'G2xDP6ǣ޷$*$?wibrwשw +A\=&Ӣ|rד5͆dچjK&rSVuRPu0q嬽iSh&*hF&ɲcP/-?WߑPzp$am $?mSXS)>܀ip - K9V5Ĉ|U|]dVٳιQtN6oqo/ڢ C-Ui7Uia\S&}":O"1:QE2Kǻcώ_B ̙we8ʔ8*ZqMN \kk[{vz^:zPMxY`$q B ʹQ鱒n^qHXg{x(Xm54B4>#K2T%pwgpT g +P)j((6mNG_搆_ ;: eeML0b6v ?6*SKv0v80J$D=aXcc ]h;򯖥vGʗg]lj\_L²(a aBt92a2p! Y +YfASrF.H.Ynfl .E94՟lTrءr롼OT&Tk%ʜ\^|SBL*rď+ėKFuSI~%:* *i6!]IV]OVJc㤚P1HPlpG*Ii'ECދYt4tS1>a@Y.vE@u$M[['{RJy7,R,1RE[7x!< CcD) F&Ϋ&nؼQ}Q'W:ݒʟJ Ȟu ۭFoN^^xT+h 7ޞ<8񐙩TQ {[ _\ F\BeݏVo~p~ЃLR Zc  ~] ΦZAZ [~+h]W`W.7P "j 8Xo3CxXxZX6b7 gLr K]\bduv 0˝3-7` ^MNbC2@mC5@p9qw+A4p4#nYD +H杭<"(  |X.'m`eB{]B)y/l`lA? +Dd|WƯz܅%}5ĸZq s`wL2Dz2ZDgwlBҝEE^pʛ? wK_|Q"jOj;ನu)%,miNzCFF]vȃO `f`Hg8豞U$J^Jg736Nd׈4l[6r5.d&aYssHCTH~1;Wa`OO<,}z88*b(a5LY ;j!ZksYF ԖLfNfSNhbV>Y>2`+EgIImQRLTЌLy (=8,`vPn@8U^w׋&9髠.1^Z2~0/dk'Q1gS-Mg +-?4~5k~,ݗH@H~ +* x_?8?hω&)-F|R|]Ie/DX/!&`9̪n[)LM0;(7 ]/DtDwbt-SC#d3E'3a'z41v^+kkƃA01M%c/Q%EPv9v2x +5p5pYT⚜sB#BV#};dϩk-yֶ0&oO/8ueÑi!t!H♃r erc=F}87uy"$mzmԌ>W,xGH9ܼ9#CAk=j~yjF<$!!+P2ڻV̎V̩kjhh|F +d_Jy(;yJ;o_Q< ΓRԗsݝj=;/PUPlڛ$g)'ș'zݞ0f=@M=v{ot7ɓniVn2.Z T@4Eg`d",:Gl~lAT2??hg+`p`Hz°i33ma-/Ӡ%{Э8vqu]u"3->1(-C1W쎉3+!Z|bPZbf&VBúԗyPĠALs2sr CJӑ4 iGp❅d=dOBI37+D7fx-*|ϲI%̹͡V_5 K}\5?\e5# +fG+swfZ^c] \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc18.dat b/vendor/endroid/qr-code/assets/data/rsc18.dat new file mode 100644 index 000000000..1da90b223 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc18.dat @@ -0,0 +1,19 @@ +qIRK CْqIRK Cْs7CG@9,ēTd y`vn;{W9U1Crt0Q)p#zRX ;YŨɧK"Jjo.d5+ѯvӮrb"pfI!#r;)=a_v`MRE. F])<~"ש\}O@7vM4KS3Ŗ_'8Z%"psD>\[ݵjP{9 e=V C"AI:Dչ20+&KG̡aBFvERz¾z{θ8?Zg~Yˤ׊\UR";^ ]ʔN!5+*xD9OcН iHQof(ڐ$ }ny3h'f1{ٝ]И3߱%NkNp JGD0g8QceM{GK5|wC ?Dfd ܇4 % 2r={z[LYt@gJDzcWDkՒt"C(^T%od`VL'G6C4fdHMT7݅_9NJa&2.m9S| 'ڸW6m7qp~c2A̛.71`y\n)U ,8iShfXtHjI}Dv˼ E5Ba), jv)mU|* oVTӈr_{m!p|O?&>߽'Ґ P=H0FcG?REa~f)1QN3bkg xn9'%-fAJ[ VP}jݺ-. Ea:u7`p-m OբHA%+=I1*[)M> F:xbі j.w_mCq3S>mؘ/ +#xsl}~4K@h 3+-J]@d:z$\^T3v$I/fQw0ΔyYfM/ 0Cc߳:_E,97 Dsq`;'P4&k|NǵP+%OJi< dÇ`l2 1Nlh1UkO>+MH_ޓ S*M?+(8[b<7Ulqnrœ U/—\6&klLd\ErW7NõmB-uqe㈕F<*/U}Xw6+\IEnb5.|5 +'0mN'yR {mXSp +IU#ŝ" +4 +<衐Me?7F/v`!.# 쟋e,@ij%RXg(z#w)rFKiRowT޹[ vn2`8׻ ! kBWB3N*h( +GWCS~L|{lnuWY,LgN$=6YOz0LU,H}Q(o9I`=Ǝ~,+6? wbTyo}/:Rb flcMG+ƿV*uΏ@>K4*a[ x]@orCNJigZ[% +?宰/<$0 ԧiZ\^5=WhN|QS±t8%$n5 -JIr=YS9ZYJV!O1pcLbYzK[b)TR%Fy`.!z|"tǻgA0 kujVrKi,as1\چfwPʭAy:ϰ-|i6k-^FIG(!G ]$ 2h፿W&4cK|BAQ-+%(-fVZ8dAjFBȔ{tH{A| +P%O(gWQ[(fHe^̸" /&^q-y`2#5;{4O,~k̚^@:`φ_ƣ{t#a1L?Zk[7,X"A 3۱2srne&SԢ A: %YQtIvNhLW'ߦHUgKMw/VeJ'_M ˔h$wu3mHxț؃ d=hg\[t-ν?@E-b 8N(@HG{אb83o_֞9|V;Ä?Io.Ѱx:T~V8=P)Mp%f5uq2vpjնxn)ثIbQv*2{u0;S.a/* +s;^33qi@]lLU<6 +CFËN +LwGȸQ$nwOAc#<1W ӄsZw< 7uxk +(E5]uvF8>|#Hn )þ?E43,}:o$xw5T^;]Ԥ>gi|lV>ĝjm\fUpV0J.7ja/N`o*@݄T32w$ +*&NI$ڰQɵEՃ1*lﲹs奁F! +e'4DSmh +^67@}&W}x_=矵9#R~ ` +;70~ngO^B \yF#;0DCpYF # X J,>z_G҄'.PaFR6!hԶgDuZҤ޻I$oyr1q|~M6UU0(>d'A206quDdlpEMkaB?ֻ&- tb>(fT QP\UtNl_/뎫>!{uOHByvz25E#!d(eꮲ{XߘCAWǞouʋߠ +rc][ΜHozl#_0]=`5+9իByQ%X9OPrYwX͖8G&1KzWXU Vl~/S@4'> s6먭^c+TC|hDXpL;#EVuT@ }o xuy#'&|L3δ;85Jq 1;DYpv'~A}I $E^xHBxmX<4`E]Sҏ +$ 4Ƚ.b:AgБjQzwМ:S$^TB}pJHj S@v_,iP?Z}z!ϲ] _ryo,K@$!s;=WB2OرeP9G_}KbƘ:1 .:'6D¡~q虲9ߖ>?Rq[]"26qJ=a \iBL4Zj[^"b-)?0Dk΂`hwm“O"8#DԬs6YX/ZQ n}cb4a Q"-nuXq7GWt }[ZAOr&-5/1ZlGZ(юPReCk"a?t;B[(kiԹtzx KHd1csLhƧRk/*!lTS"Z8 ;d!&p!=Ȃ *2Px.5)yBi]5i6kڒ,ZOJttX}ƦHQqe\F] spEЁ$fw +<ɵfUTp_R{ܑSYx1}"bSQ)A<>5R.L65I($߂l7XXVX 4):!!>-Df∪*7n'eQNi?7~(eW߀&5]pHXV :dؐzPմ1V'am |XY+$rm%푑TQ]> `>!\{Nh|ccB +ߙHx~Yziӯ; +hhˏw?7W#;I9S6lvO>rsC%#?/$*U&N L*թ㖔2Γ~~TM%C/bSE,DI*Ǐ5i RAY15աx]"|j_a4V}Bjy.;\l%jPH  T>3`N)F=uu#߽]Yn2+fMz[Gϝ%Ɏ@}Q>hRIt?BB| Wgm)_e;;CyZE*;ёK II.ḪmCZr]=00 TnNIi +[٢g oW-OqZw~n&m5P<L__jǞГEk &&"a@tŏݭ="cMgL:P~,ԘZ͠]ubìxs7Uy2siNat˃qymITTvxvX $--6Vg=ڤ{`nss9r;Z_xl + + 0{á1Dv3 B]_V 74k3T[q ^Ṽ%y6?ӕ#Q 8 7!1b0)(`xxP] S/ :f !ՅBX tFz%-; sbjvM)N(9d.!nnW؊ !*h2#jLeeF F”򼐨I㫕ϛ=>[mlD )?RlZN(׼}±'2=cVVd{A!Jxdهu//#LG+B"3:(r-K2{RݖbV8F?e4g ԌMW%9(qC0Jos3/b]]N`[5 ٭$$8;cb/n͹%ڒ@uji : .9)S\KKrՎowM啿াE!22{agyz&Z'@@u c~1C499.Lxn8K rcWkH6hy +'GsIOb$HA\aCoKx˞PggOK M +apPC8_$,+v2pllH=8[Y\U9ֶ퓍,XSUឞ|7U]q'No ZA $[ӶdiVyG|L9c/kވhvqq^e43heHL`pYe|+u!5V}*Hlt}0'#VGH'&KJg??*ЪIɔLoFF?=Yى|mi44k 6;9L{MMv|B9ۜAƄ*t0I.'W4>! 2/g>("") 0–G@PP`#aJFUW~Qy^HTۈO)6-']^lwwZu=L@TO15d;lEٞre 4J^ğXQYDv[z3Sg{T9j-ҡ<6+QVaX*||bj_CD'<;Bgv ,`TlOhǬ ETmϽ&`(?jjL-\Uv-J9@fsט]Nt-aa3|f=REzGKXy ^q隡Fg[2+>&d}}VE4Q$&08k̚'JU + ujꗰRcbn3}|.Ф~k[DŽp^FSh]i1}$e.ڃRvvKwk8DZ  +( Tv?\jDknY$4KmIˆ G5wz``@GԹpS_M峨Sۥ҉Y%kk0ep{Zwi%<2ʹ +^9yÉ)rK13ܷLj'xA[:wE,/ܶб\M^q!;@0*w LL6*ѸT0Fa 55&i";D=}EGGz˦+ ,ia>>[DMƩΘt +/X6-6xDOG9̈]sEIQQnwuaK ((02da ǜw/2 བྷDT) xg݃ځ&٨;E:tOўB$6:M+HZZlhU優GJ&]ώ## G:zU O!4BU|u%{GꏁrMv o`Hkp"*ךRl5o*?P%!ri\Bc%JBc8︄? ;CBTՉ..46J] KpmWW~md?ۏ*Fӱʌ +Z:,B|ų)@5I&AYe=M88K5i0j* ?1s+TAA~7=+z2|!I/<33"s.}4 c_JJ&R~!>Pieuɂ$˻8hMskg \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc22.dat b/vendor/endroid/qr-code/assets/data/rsc22.dat new file mode 100644 index 000000000..5cf0985e9 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc22.dat @@ -0,0 +1,23 @@ +YE({CVYE({CV{}q&gP8:笩4?Ș5x$'s7.y6L ptEOh~ EJT_sLliR.Yrˍ-jHN4n\A>7%yTS|ɿaИ_ tKò xwŒ7@hnqRK 5M a-fULny՛ٺmrlh2iE +2rHHiۈBg˶P.3I Ay+Dw}F>]2|Y9-1@S<+5NovVM1IyɖyA*W .8ϦMgQ8$n0˙;}f#*hԧ\~!:j¿Z4Go$m+0DB,[Er_ůidU,4u#Y]eLcJHowbř2dxqS7ջݓMU=Wt +[CI6֟ !#=Yq:j4,o]Tn^,L6Y(R [#&ݑX#2?[9s$"{5 .Dt_ߜ5~4 +۽^;='_.VDޢ1h=T>,%hz2J+k$`ٝ/_nw.6Բb(Ĩa2#M(hmx!/`4" ~ҥy2xZVvӷV,:.L*G˴|S $?γhī0?OtNLr^"~q\f>k)]V-|(Aʁ_w{4&ȫ-qdUv1o ;sV}$lvu:FTеS>G2BtzUDWY(&X:$)0chHI-sV`cdĊ@ 3 +'{iǕ_Xſ>8= (Gi1{Ō]bCҩ.խX hF(a*}3>0fS27ƔOC/d1 wr4q5=5n6ka;fpF7_r0+(|;nz@6',eV A Kl#k748iMJ?:{]H#4M,BFzt%hFw^._=9OEX޺ckK%&xUNZ] +5x`:!e˿zj,8 Bػ pg6Ʈd@ui(s脉 ƚ`HC%Ro[rU!ۘЋ@}̵BUb'עs }_ґ#13I%SۋFV"[KwS %DD֗Vc Q&ﴱɆqv1|ܼXyz'e~a!+c Nl m&P@,>Fy!;ML5C0[bF+W6?$: Fd/~rH3;H)nx͔ wDjI\ 20U%ٿL(F9% >@/sdE?HJ2Wj])uY ?ht/)5Di=^g)*.:vQzceGN \>3y ~Ŕ_:/1,Yk-bz|X>؜.E0",r1fnJ٩adV8HG`O-I:} +ŀRQZ'6^([\Il㷵y }P~HatJ쥕ME}d FePBst)n!$ϖ&O +jD#hX[zЬʀ+ms dL펔m<C }WbTVpX{^A4<;IKZ\+g^&/Mυ~SC^i4yqm={_%G0`\) YO{TBsU" :RNq{~-r2N3 `jΛ!/Ԋ0zN:gf ^W|˪bwNv*,?Rp="!mv9Hg +]{mݠ&%$ڹ1S twm|dZ3G4j.?[(ψӲMP"L#'Bur͆;P+ftStH#R`/uZW-<{0T =538# 9fN>ғ7xa%W$ Oc|pq azP3T cp9XmI¶Cƿ2bEo IvwVҳUF`kg|1O\Gg+IoɌ6P; +=g"Tj,4T!f $s6|`]omqבLŭnu*9Oyidn-5=3^.Ȧߐ4+ <\D=M4b}:h'&9/j?keSUdopʍzQjolsSv)[I+xKodBq?A?n$:`VP%ovfc:7Kةu)ÀlNXʬq937حN0]@p)-F:nhpҚ~"tAG/UMm{͗? JF$hXC7PrJ|O^*Ȋ~@<ľ ]TCPldadԫR;~(K b_*Nc@( 62ӥ^oRjz \[c`*zvlZIeRT6\t"ʎ;o@a䀨ɩ>}۱6mFZM|I)Gf<,5t^O%ʙ]#rGKXnϺEbG X;_ZĽMыw_G^UrE:|%\}`2;DXbGY68'P}Ix>M<>O.5p Ce' Y[\HA3N %Zit*ݤ\p(z/1N ijKq;3ANla{Psw?ͤb!(kU +K距E.][ǡW$QXUi!T7k )ʠ2Sn) +/S֍0R]dgOR BHǃ1LGxɻRV^ϱ` +,Ξ*QЈ.$o'luE[.S8W=s'\5_VCYW/QŤq9WUHEeK(<BkYkr@TbE#-xeqWm9,7]w1DP' nG_.~UW0=;6[-BP֪ \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc24.dat b/vendor/endroid/qr-code/assets/data/rsc24.dat new file mode 100644 index 000000000..e480c8369 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc24.dat @@ -0,0 +1,25 @@ +zvFfsIH=+ِuzvFfsIH=+ِuOyǭ1גzV=ꎚ*u2ۛG}O*vŞGb92=Czɏ7C@~Vpuɇ~ )щTI7Sd+TG#{_x92/DŁP`5V! +;{rdzE>;߆LKVqR;2n _d{n#Y} +!)ey 2*cI8q ^YR ɒnKVG! >ŎFx$IE0-< EA3rod^O{ojY8͟Fn#3Bv.c|vˣER]HJʡ =d"gTƒOYyp"ü l:3'PwaD[,4$"UcM9QBM |~XW_h.?NH,o":`Zxӂ8gIM7VE g$aȼ 3>c]۝{ET]V3~H3, 0ep=#5(c{F/ tkf(\7Ս ["-nq:"6!|$gsˤ+ &Ge_y"+xubwS-t#ƏTZ-1EUB$patճkdç=:)%ŸOUHd~X}f&Dΰ%9U0sp7$@ب'Ut; P ":׌KyL(`v d:T- +eok;g):}C!]5|G*z >ckCT|rWA1+dҮ4;'DΨ9۲,Dey@BazY-l>5 tfN "X.hHDwnd=6 E@j/nU<,r1E0@3r#ozw4xI9J1wpU]CУ\~2]? v05C3DyEX9 Dtw8YJ^B?TG!Pn@ D )(9#A(ɝcy Ztw_(%gDlBHeVPql/oC72^ UiVC=@ L5DVWd"ۻ[3Ƿ24T ;|ƗL`4͚uP_#v@ŰֆŨm䮂bV +A,c/M +7>fIW +?u`YhvNM?r!yݯX+?eS>h)1aYeܵ +b9O&M郋.ZO4|jaF+ؘ@0[/K_K]D q\+I`A b$Q 0Z~]'TIނ$+J50awF!(hrMbs90wsN<OfZclo}Aa;[? +d{ %~ß;WX:weWs@}` +jɡf}C)ka4#EgS\=rux^+hk2K4P Yl0uiM9`%?j՘OoiVj8Y}:Gu#dk8o].wSv9)E 4lӣLh1lJi#`^ 4mlgz9a*FbsnFc- bȽܬXGN{oR'l_4Bip_KNw z*߬GZºq1a|uΘ/[frm5|ur`k].&suO\\MiE@OKp =vt̰4l*/!)86u!G< -i[qkv CQ*ƫ5p ydL@9w.B&_fNd݋& +Wxdnx[ Qf7yW(7$m9Tf?pzSo^8lNw/TM{NlcXZj0xH|[pO%>)ՄS}k:'#0c[_ !.~0BoQwݻi_˅*+m?s$ǀqz LJ: zQkm?ie,RP4crFP'Ej}Ǫ{Ѩ+YV>@OPJ<؄ˁD6k闎("ʬ)$%^eYnd;Ro.:B{bX.,N< ҬzjaFd`A^}H#J7A +ןD&k+f)Osd7xkP2}`QY/xו ?Qz+8X?OMu^<"q(0+=;#Yl3KA$gHGMseUl;8h C\IҙBv %/DO!u *@nZ'8&xߗf:&.,63,~|'L][Ss6rNƍ+:r&3tҷ_Cvr)jL9=O +kq9ʛ2iW :׻I2ܐ@GI\]@~}Ay8 lT:(7m +Ng>󽷴~1qc{H Z:՟cm*-0㮈{ +1-?{* JZW}N%jUsk4b{n1yHB#QlL }_PpQܡ&0M(; fv׿P˨[D3sѪ01c/xθv ס/5FK=KG8.D*obJHt@&F/i|h@v,&ģ\@5e4Cϩh3h)F> {IiHjӈ[|NjrtZU2ãMAӍoXHǸQ>?W $Э>zk-]^ noq| c~+M( 6N^Q/ ~BKC VEڵy ɺҌbih7<~ʦ|O3Rb²ʥwMJ +V'~֙* 'RT6rLKW{y \hLcGs82& sZ!=YV-`_a]ݶY^W>S>90޻e\v.K4G͖6%0/}6V= N1dL]nV,zy'ɳJ)(ËH6`N0x+\5P]2K S , NbF~w[վHN@eHȧ.5nuboA%bIJOYǏ'a҆m3-B6 I?R ծ 6*RZ?Գ$L-aԥp|ɕHVj`•9c5:{xy;.WKexFՌBKPЯ;95&rݯ,6 FJqٱ,YV!`y;朙xo"̴ O7[G?>w&zBIivgm~siJZb6XɄgl#2Qv0/G$t%ʮqYD0ChUm[CRU'59:-(Ti"kUw܌ZsQ^ka"~a1%$%čg-KiE'K5N_$!6& o(8ߦn/sh?ྖYSXSa7og/T +yE:aiSyebAU]{#")B㔒R.%݁-I ^(-m}T3jqa4*tjQ_։\mLꞃ1pJ<,@l-Pi(D,ҊAcz}Ch V38hXs*b+Q"h !sR\ٲaS*NF×`5eӾB\`M:WP8%S 6 +(wA~"ޢ Ok,o +Ԡ \JeR!JIL) \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc26.dat b/vendor/endroid/qr-code/assets/data/rsc26.dat new file mode 100644 index 000000000..efafc0fef --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc26.dat @@ -0,0 +1,27 @@ +3bǘM8(u*DFM+^3bǘM8(u*DFM+^fs ē-p0?PT=9VU THO(xn&~ʭ};Z)`~cɃ& zr)e QdxjICd;QwPA#L5GK"3oPH Vֲч 47vR>]ƏML +REf$U,mug^Ldvn(9ȭ ye_v,"qR%=3YO8(I70.M{=!Fj{z4v6t3qSI6/D8#fMWy<[un,پ#=M@hnu|庑64դ-$D +韲t@v߰pReG*qHeX>.΋>5B{Lȸs3K X~sk$YPr/Gcʵ29&T +2#\9}W5 ս*X?D7ͤJM zfpP#\]Z,5bUL*" Z[8n`\YzB]W-.1CΡd;]YBEφSjXhQ l +m&fǦ<l?Ǫlt!2 u9 @Ԭ!^pF̡ߚ]=gG4E#{Cc&1m?tήf%o0GUug]ђHx68xK2E Xa+᫗FzE5 L|j.?Zڈfī.cUS'i?l)-h(U ]ԄXrk6?FAs,ng%"QZHV#y9}>ʎ_{Uz_yQJWZtT⅐I|G\ e-|j2B+9(1)_8፺!kW14Ǎmfw% SAOo2P n؈H^+4wdar"SLžltJ(N6dJg/ sGdFc0r>jyOvaMƉυLQ1'gT~.nهU@G'y!.ATvOcVļK5;acF')Xj%;TD2{ܱ&ҲӳԊBp9)2ӮZ\<b񃆆 +k0Jp2z؁_ȵvk ԰?[k:wl=}*&˒|!&d:Т'LsQ9x/yƍ*E],U[01肕~IدBds#r&OٵE)By_'Fp\ SeջR _+)zΎhAF6Le瘳tb_~pfb~A9Y;J`κ˿9 # taR`gm[-tlpdqɥ. CVK3j)C\rk!6+|XufAw\$*~ ÿzE4Ca- +U葔qi8P!l;+QPm/ IȶV( uoM^@'Ꮃ(Ȍm`A|'4(IG<~j@]JcFjEš˽3,4aAbNh[AJSYKp%IsΨ} \ܯ5)NB\]yiʐa ; bu8%Ƭ.#ej:ѝv{ƋtlqdZY;MG2_鋠Nmi6RuV0O֕`eY[{/d09eM'a(ZA/to(fCwiy + "7Q}~ַt-3;$*0z(TLe9%K)B=CL뇁J=]E!cL\yʖtYN$(+懅6;r ^ù, VF4`uT7X8o`b(*7gp"z`d6Hn]z#9;C̈́4FL,wR +%˹Uwn59Ŵ1 ]N['knV}KxS{H> +c'S\;eV[Ri l[Vٍuyj)|kh*ai-{"ľQoM($<0р&/y{@\zĩ rvIɁicr=2KɗB?nbcN/?5ϏF! * ZkA8$ѹ9Q_'7]M&ȥ@1 W4}\f R.|BzD,tp$ gD )<[ϓB lV8̓ߵ񴆜W$x7Z^ީ',-+ oHTuOc x74 mWLԤ:.%mSiJ^&q`d<ʥPB. y '|5i -mD3ktbg2j!FDCb5,rU6g: qjVMYitw*}`. `YG.M-1N&-"pY:I ;X8)n!&d\`ԫaNr|o,?u=@S`E;\:aV7D_쟐VJ[3^xl}y/&2;7JrhĶt)Tlk` +I~a2l,3~[bu+nr򞡠]rLw:1STj?83 +w JvO:)0{@E~:Wcja +tADPn#8.jyqߧӉ)Cbhw^f%Q8 =Ix^Tl6 f +^IN`M>H{2*Z;N+b^s`׿XH^lnKvziYjE!_LR6:c%[]~O's2%é;Vhc& _tW|hQJ!˚]FGծNUT(7lDjB,_9 #w̏U7 VF=ơAՉ%Rq-A:=򺷋e?Ո Q-3˥E?1Q:=k(ΜQmOeHr|ي]1h{:62-Jp BPZ?5 pB%؍v#5V4i%| +xCXq8x3EFdNSkAHU!Ŋ)g?.-fXYh‡gĜrK|*-BtU*й(O+}ٲwQ3UgM/l~MC&IjRW݈>Bh=i>!="v:8CiĽ"ԉZCNo 4d ]co@uF n_KR S.]Fv=lx}7ZM `p7+c<@$EpʿН.bp֊g+x#^s0YpQXnt8=02O $7\=zGWØb˗[okwN y%fZ&.瀎eK YHx~J+YtK-eI:Yڹ3W'F*kum6"+#RcޮYCSai)|,$/67ky;=|5y`ڱ+_T4efSz:>4K"(7g5^`rʚG3HX/'0tO$uN?ͣ 1Pg^79 +yOP%}u;E˩_zB \?L>a*46DnwqsR1fj +%3lXA+Z" fqvH+%T94B kcGfb[:N*H60Qf +`P騘 rJ'Rzߍ7|2.0j۾'9>0zBuƘ"Gs:1qODZIm5+OogH3GPVO-ClvY@G_c: +hWbFm +oX 8ehy,k7:g}e.PI?w sinI/SqpPT2n s k#7Y)#;Y}Dl!4Cm Frj{-'ܹ AĘ+*m,v9G>hь՘X!:C aECX@ 6X?JOojru)b4#K j2'~_$„W>g$2 +Dq~Zܬ_ߐ| gN[Qh%8T!}(v4 +.a"?-L4*lgDAosG,S R֋ЍT,iq𫏈5aݱzӍ?WRaBωҷZD͕aۚw݅PH5eٝn|s]bLҸx`4L^a1U#QiSCH ڰD q(HO>y5_{ zc|R{ЀA"-rw[TQd)3݄5~ mwƜ^6~,[!C31M'$m3j$,B͙UT:qւڀ=M !h.V&ܛp)HoWreNn[LW>mǛ*xѼ}3v˧D=`݋b@h,/E[1 +[<"JA_;`pkdoue_\os/XH@7ΈOlK@TB ;\FRmxն;Oج})[h@ڮ9Ut\J*ڦI ѯؗ߀v SL7i>xEW1&Äai\ G Ā$AmX"^b$wU@A&SNG6x"OX +xDv=ȑޥ )ʾ! \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc28.dat b/vendor/endroid/qr-code/assets/data/rsc28.dat new file mode 100644 index 000000000..c0e7d4ea9 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc28.dat @@ -0,0 +1,29 @@ +  Жgd) 8uwdyJ:  Жgd) 8uwdyJ:8$1ARSpw;}t$6m{H&¬NR$p4Hgb0v53+-l9Z0,< ؼj[J26H.l SOE(#/LE M?T#~ +(m!R$VX`,!r7aHhUQ`ݏjfOAepRxc|ltcY VZr`sXxeq!הSc.t=^dD$4dl\@P=F^>/_%UeQʻy05P\3)qAo ~FPBHMWXBnQ}wKP7t&DuǾ&2ށk{= >2˧#6ԇ̇/QYj="ĥ$2% `MK(3[UۚE}_܋Qr,0 +Gl\unL (ꯓacL'di[E F( r(^U=z7|dIYSFl[# +4hϡx`|ks1$x3)@/^% +x#쨣Ti!g&LrՋ2J?Nk]!׉2xUpχ͑by˄ &ÚHXxrs 6d3Y%i DY!8T = tP;=I^EuGc}`wt{j|[fe5W ڕ&gvl­זPf]O=)A'} Y/m:q 1\Xq-Ac}W%XY` +E؟-'=^)acg<h}1]7͘ PC;ƓN_><璻c;6L+&7[t +5P@_ 8P"ŋ&MZu"4iTܢGQ4`NzSg,>n8' ضF8+3w& sOjf\+y1\R=hk}ǃ_6?bH1fRawpS3EOw?å#;,lfScEwJ@i=(Bi6>G^J{?D:b9p!*z1oB?YKu(H9nYq?1mA+܀01=lūrKWMUDGU~VxܰV}G?جj:4o!@]* Jop /Kڝ"g]Xa0Aҽd5q +oa-e)ac6x+]\Iz)#k(U2#_HqH J? G֜"FMG&1Q,:ZRU˜Xo`s ǟ"xDXi}g9Ŭ߭;*9\r5vfxOcz-=fT dPz0@`jXQ +R-FC^|) +1̺*qIzKR N*saW^5pZ0NXvj|k1ON +\t#b"MZ*e !kq +nOp8ɚ Y>Ǯ;J(#ZmWE38\HFG_Сi`Na$z]oRC*Qcox,з.}) ^_'. `?ϟb#n-$v;-|83o1A)I WpI6E*xQ9kvKSlVoLn քu h_%s1jVkq j$*[oOpՠeDI 䲥[yCĩ&W:`hLO[Dh2YՎh9A]ad͍ J>_'.< SYX|p9yNQqpVf6L.磬J#BimrD9/vѳ#̸k*V!b]Kz8H{DbBZN0|(l~.bۤh( xrיփ|xN5όf;*n5]+OЊ1틃vQ+jN]Q$OLFeӲwl(.Mw߄HZw(b:E" +_oλ~A8)<տ>{6}tyP:KUbS߿[{:/2"Z6-zsȎl^[5O@%i{g*?)T+,09oS~ hKW22X%삃Vz +$aVTo')d{SIӿ~ێ&~:xmgڨ-ߴ|*nQr0Ip'avC@x.T,dgu_ CzP/پS 4䅰S@ *+R=7}&3l#ѯI'cJ5ڲ.LHFER30s'|;e.f8 ͊;~WFJ[/=_L"^M~>?_}m7,vX3̦yƊ6+ yzOP%{J#-irgܠl|3籔[~WO󥱈tmr.7an^*eIս~2c ݎHBTM$b,]x<9eOy*K:(꓉Z/rX4ރe<0>K}^ ֿ3[{_;.@w"{2 &!Z )'^rEtǩܟm/WMr׃?XYkz"Eh܂pz-jk5N@;5sw|3.ӄ~O.)Pېit8aꦝJ#wDŽBJPk4rYܣE~bڂV`0b4zgP2u%hw⢗K乖_Oa 8wGkBU4ΡvR΅Q5}.Y~$#EԡthB0TYtuUIW/Z}֝k0 +@oe8-',w;^5>O'y.Düf̞軇C7 K8RC|Md~<",esxVeؓ= 05,ltJ@)DK#/$%~݀kNx#qa +A-'g0 f3jp^;[S5LjK1@+uCF[>oi2Ag79S v8Hw=(itM_BЧirXv +\O *n O_A ̃\m+=ag+*tX-۵1GZq|`gȤ1֧ѣnbH - je4Z<9 Rk>Oly;ps5'P\u]V%E +o!9" +CR;sA$"1n!- Nx'ng>u(y<'+wFiPCdUFM4t.L"(Υ!hbݪ"R0 c~6S:% D"Lٙbl n +oz3e58/:XMtE˥ϙ-kGx^3D@fOt[hڈ)>u2?G(`WP_td4{eqQ!|ZBg;)AygNզKV 4nAT8=5XAQ| ' :_uS%}ʵB!%(mV#D /krۗE㉣GvTM`D/9~:Vnr%?jmQZz̨ +Ƞ{(ĺB91U$2%ϨљAXe`?װ{5 Z17i2/&`j%m۸`#<̆R{b]i!TT®,yNi05ag\0QfCyj_ധ`e!bӸ +vMr0"fV?+mjc7/" 3:F4mD}TӞ>-!Rq oȚ|ysf'SJʅ:B&gܞ41Up)67W@ALu=i DuK|Av8SÔ}yPC(S .GFڷqC7dA'<7p f.py同 wͽ_:MRk7y1$H"#eTXs\`E$:¨q!hs 9f,yRI9A6uN\c(~_2^Urh#r{p#FiWZH04]/?vZ%ap*T 0>a8;d@>\Ѳĵf1ba!Rc,s<l8py3 YKu &"Tr֑-ޘqCYk?1QۭZE-+,*ICU2c .JYbM8~{bG_Z{WVX0koH +]aTޞs4]눒3bsB/94XAݟ9x8 yW KO2LEt8G)pKsf@auACEL}DO)uɈйdM>WY3r%Fҥ &`h"^~J]'ȇ|N\x.3T;9`g|3pIv+|5yw \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc30.dat b/vendor/endroid/qr-code/assets/data/rsc30.dat new file mode 100644 index 000000000..26235e76d --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc30.dat @@ -0,0 +1,31 @@ +MIKbFgي3H.J jMIKbFgي3H.J j񚒛 +, fw2$\Ք1aX]ݦʩ:vU+6r1uXw)9+'1XC=dH5G+,2b dpzCON[ u}ZS'߰QOtVlb:a+Ssz3(0b5,O~ʆ2s1 RrVNb7( +ᰆ$zȐmsjVXwd:;)U-LxP_t2тC VSR["ў)-1#N}䅩'/BEc{K}iS<6I/G_}tVM69Iz 0,f6P`j?/XמdbO%437ҳ%i|ۤ䬜nP>}H=ȕ-o\ URYnk$*-/oJt*>v7RZQAq*d3@7:Ѥs?_ޗGgB], +tPS2$݇D!%RZq$ubQF[bD{AWؐ3ҁgLD1xaO&c?Nq^ SYQ>u#Z(]K$َ#C`?3߁aP/8ҦYx!>͗l^8E虬Qλ9;}XFN\qW9.ǚlaO0rA8e)w@*"aM`N?!M{wԈǜ?VnŤ`'7X߯l~^dz!",315ܮi]q m18!F6E=Jhfn{w86#SeJ9tJjc  rk +}UْUE%ܠ(|".#zѵE}7K]޾n]h5چv*ZG޸֍HTZe5^!kxHzmT{-,Lkw`T|nI-]aTc2fEnQtU<1+k촸xz ?ʝZ=]~23"΋XQMGdS76_yTSHcW^06L$qHk"cBJHĢߌ%JЫd\}>WFT.keĹ5a/=f ͕ΘwK!3bO|K6*Mʌp7 OWܶK8rT.8L~'g |8 ۑAca >,TARiYF P,>H{F" ~f gE`ؓKr(%2ΰj$4`@6^p1Qʔ3WIruy/dC&?tWrMƿCY&g9 +5k]̍߶uUm%Qk ̤S#KJ7]P[D=\FKOwnI|Xoa[=I0%סaW6$4:1g<jK_BL}lRQ2 L/%=q!Tm0IUy/jBC*5 BbMRLޥBsb@E:Cٷڝ&EZX:,=5TU0ۖFkqjA96˔ͨUuZYهd"ܢc^p O2^v (WRb47^KnlkӨ;-.s Ʈ`lHP'~nϊ;@PhJoS& DƄUuKِɕY&Jq6fC5xlfKۻAMmWaKe|-aɌ7\ʃو~.moJ#ۨh}p~WT\o'j ^AGzg7o>-B fAj#1< v +ܚm lT͉n@եq;phU`h̷_H7U{zf> s\!p%Ne$QsyKY*ɋp?؅hXڞ 2 +1RK΃Sl)Ƴ8/|Xoy}]&Ҳmt(LZ*pқt`o(0{u[i1KX|CD/@[>]z8Q 4 ?*jI1Cz 6ny5}"6;ǖP?Jd}5Hha(gl}>UFW4'2"# boyxfre nχ^Yh+ >I'AJȊ 4 eT4J?ɤ;VTh(2-6).'"_s[H}K%?m^A;'؎;b]5>wtp=':~L(yg_ c? +NJ淬qSG&<(SW[:A+ħs)rƝ`[ExhrQS!Zߊ28t=s'ML񣊴-KtXz |q=v1|?eCj{`1# E{$ r%l5AK,Seg;Ϥal9o,_݇M헥9i2MD: YISf[ؤ@OjapfRD2w><86;dP>OxJ:LUw~zJߺ6|Ds]Į/R c:2Nux+$DM5&PHDrEM~vEC^< h=u)CǤcurF +{YЬ6?޶;hoiF¾̈*Ү}YX)PX0l9ƜgX5@J_0 + _%wh^2.L_k|u#*hnh>teF8irn[ǎ9*QaֻMvZ\, uչхsn|!&6iu)M_B&aGڶiNB-?JH0T $ K~ #tO{^b(ð#/f"{!@adGb{2ROyopCEVr!*eQ~9o{ +p^.4MULy2E[I!:~k{ PTKtm\KQ3Pu;aŴ DlGv1ՠ~:j8PU @^'%sVd #xt^[N4 Y|ѝh %NdEDoFyYm\JMpeăY&Gܙ  +@r\0+L 8@֋$,yVC6|ے +cN, % h4ۃT:#ı97Gy"hg~U($"9vIikK? ;ԇk9#hVqo[Gk4cFPo3dyZlR \NSөDm583)"s%&?=D}%]Zr>"w>Ր; + Jca >~ڑKmv_PpʼmR6ÃKZ@>+$N vsj|zg/N]tG9fmc0¬<49Ξ-Vu +P qCg~_(7=wA2޹CP7 *=l݂I0e*sEx˒0ӌXRheqF%OT5"<'ƛv)zijG /B+2[U< :M /R'p +iLM.%8Cݲ XhMwr"`W٠w@:.a( +y xwZne ?txJE#Pǥk}G fi2DŽqf:ͩmd/1Y]PX矙3t\8q+9jyB?\YhJRy 4[+vWfI'y%X̴ɚSbE!NHm[O'uiob"e:.+‰!Q" $-#VR|x!>D=-9z3Rאq"\Ҝ*XɶXg{R0 '+iD\ +v!noҬ̱ +. &v.GiNv{x ,n}.X;LB7]\ iVfeO,]fZMT1Aެa'_$ظ]xqaʞHT+q)>M +<{s"(S谄q3IBȶYa.VtO5h!^S.I4q8xvAkYQ&Ϩ`px\CovTH \A~FSŎZ<_v-@covlhO(~F6 +Ac*Su{jzy|c; XS=`bסd~ (8e^@)_dI- pu3s`aVpSgO+{cjZ{Q4+jsǻ#xR~"ks-9xP֛W  Hq[9.屛&j kmB*t^]bmnI;jg@WvFjޓL[_C"0 &[MTשΆ\g@P\b>lGU!Z.2:_ݳp&z2-׷LR;A@9oR8\HA&~rvre"-p4L^ݯ Ew*FYgC-Us DZU8hm=N@<)jw?HpyXNPϘ<( !:/1k7I|YB`5J=ֲ>bM,01I\dt0 +8 uI{ཀྵLdZsi[+ɎI:YB4w/QvG$.?_#G +-Yԡ; @,&!Oe.@+3köeOSD$ `@sL*yO \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc32.dat b/vendor/endroid/qr-code/assets/data/rsc32.dat new file mode 100644 index 000000000..d18d77832 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc32.dat @@ -0,0 +1,33 @@ +t@46~¢!! ;7䔹7Xt@46~¢!! ;7䔹7XhAl YBB'}vn5o{o0 (nE\Z0[ccR>MY1(Hlc:׀^yf[`ťsԡ$ z44YlF@BخFoX+ WWx\Ί-\LJUvv&$4etBuw9w觡J'mu2qˑUP)yhľ6hy>gY5CLгiO\N *ƴƸN/ߢn'H_|?71t/*0hDd rϩr̉ jotg2G**%̶Wk__Hk]Wg4Sq ~P  W̬`!L–I`s+O=%hh[i9300Au 9WY;1- IIq7qaiV]@k5{Q߁ Z +)(MQ⏏:@EK88E46} +LHh _rS_% $B_mȻ+6Ң`~WW٢1q|N+d??&RЕa]l  )$o i-qGGE-ŷK|βj{}}[=2$7@Tume7 ^İ歹p\\Ӵʤ((uYS +29ܙN." =~.n->jl\ƟK%=6b^}T`С@>OO w@œVFhMpw0wx&d{:eTTJq3w'ֺ$Rʸ*[uu3@+5P?+h%mE1Bј1a( +>77NO~h+h̆'VzJKyҭrf``Gr*H`js3E٦_Euv:bZ#! (nww5B J칒+Wݶo֝+GZs}#;AAj* mm -5ՒGҪ"``K&KUPPÉKdA%;KWB{(Zy|t "It|UOdrkk/=a\D@@zG\? RaEJJn}1Zk^bvSkZ&|+))ظC%2#//Jo2zl.fH>܉Ih}),u%R{4ͼ_? | cjb (''d(;1"2&I`*2?{"x;NHH2m+\IĹt﨨'fAaaN=i AH8f7dM +]vL[zhVL}vۤMm +TSf=?/Vj~4VA!/ 3 '[tD.E3+OfUkQJ4],,$Ab-./b9"em$' GQ6-niP9 |nnݱV&#N OO`,vx9%iix+<Ѭ!qG +:* +$Ay_V4BXK(yyݪ!#wT /f_ՊQ%W7`>m޲?#SStĴ$99FBwO8{P ٙ&8rBy۸{t$ħo$g\j8"}{{auo9V>eqq>'V*.FZZ$caJƈåa"_FEivTY[>$>u4(Zj+Tp;y,d!'χ' !29*IDLx=nQ_Q|=)xyY- jOhO6x)Y. 1g d*֨9 ''b-& +YaYp|Oz$^9\ DDS(k;nL+dj"TeeEPߐ66X9؃[(d-=4a*՟Qa,SoMƶx&f& ۜ03nɱ= +@*ПB݆#X- DC s1y{.II;{xa3wcǎoA#AsC.oa޿ t22wKMXOyqkOРXu _QQDsUH.X.CJU/]^׎i\-pp +ܒ6D[60j%ONޘUgn8ig0lLe{^mC(Wrnؚ ffq'Ǿ'qn6OL#CY1)C~ퟟdU}_8 A.}￶8.Whxxb03 231xaBYY dцI=g}5IJiOo;.::6]S nn9S3]; >_*jR!SW^%z¸ ,ǀ 8~ 0@CFfvl9t9o񚶏@ߤs*b]9;tqcHA nVVfML"G6qrff<&FsFLYjQz-Dv92dڃV?玣9$$Y>~}3))|P~BʘMM56.N̂c«œz@+#4Kall8BU{{εN?(\fV0Ks&saKC0_ZODjm +ʕ붾&h׺XXH. 'cZc\^rD'k:Xxyy4oc"29D9f5=HN]6I# ! lW#ZEIQ}{XA;;:D~!tN~p Ҡrw(%{!:֊y:>׮n|[ڡy~Fg +,,Q) KgM?.%Ax΃PjIPg ŦukHrr4p<</LpxeSSAGR4ٜR;G'PIiU00mH#SSHMθ IE06 +)m镵)b$0p5D귗r|AS|Nu!%X_ZrvI^[[k-)T}e\ݣ H›( WOD]Ijx'?fpk44fC蝾o錊:,|H|hP,/G.88nITV"ţ`T|V﹨vuc[[X25b*](LJH r,ǒi*8Z2eS{]s5^`4}tvt{`ݩA9Ul!]RC \:bݹ{T.MX^#Bp--~%d +dcDھvMr+NN!Z,LW²KU0{booYͧw q SMTHr񈈭PUvOVU7S_S0;b<V(?!L +eEޚɑqq} %6LL%Y14 3PP5 %"e! "O`fY܏zT#iAFeZ,@FR%ؖ0\/DD^:qԐ #3b;6\:vM[i:I^$ԮM7 ++n3 YŨ*! fO&&ƓEsy'ׂFy\ޯ^a?lP_[#ĤC;; ¡c +oddk۰=֏]wW-l9wrqKf[-p@KLEUU"5[eej[_Gv훟|66TC!Aͤ BxAcg1,li>-)0 + +Zw>wDτ=:Ohq~rʑ=|R0lXE/pͿ ;*G*g# +#)QlKK.Hv"y"/vjH@ ~c[/jjWϕidʛ7TAI5 eQ&XMMk&u((pՔlQl@Dnc 1IN]~]+Fl1Ë4DpcV7䗡RoӨ,/!8?v ю_{22"nm_;1\ݵhxzh*c1A^^Vu$9nIYBQLAe/0:;:0e]zaLq7b*+0*>o Fkq==ww)6,o,ys3LRVV8ыFmu8 &xwG\ȣ~b5tٖ6g^-y^YyLWP:MΌ*DDuXz)#W͊/O-jjpE=NfW 9鲤pbbUpv 0v ,S#-r'Mk#ӈPUFGbb~mz ewz:`$EaUV CCpMjG\}bjM87ϻ'ap4:sBlBhs\x:XSѵ85 ypH B V_R3~#,xT>--XtyT}kMt" CciL@i`cV,*C_\ zdX?$Tw7>>+]%)%]țK~,]]ԀG8G${!s ~Hn||:Vam&JRJ 0+f +g;^RT˟Ș9㨻|DQf+8FX5|Z.Z15KlK ]uxL/M 挘/},= ED@ҩ5U58Z{ + +r%d'C/S=k=ȩ~Cm9߱n&k)N++htDŽ؄#taCq2[rHH;|Q-fRR-(71gKiiw:pj* \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc34.dat b/vendor/endroid/qr-code/assets/data/rsc34.dat new file mode 100644 index 000000000..7864d34d7 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc34.dat @@ -0,0 +1,36 @@ +o~C +o~C +x) 꽴4>2fs,V |ޕ..OD +m.!+ΑUĎ:}BQ99Rguh|d*̹Xie7\&_\(Ȩ/rc}OQN4;KRK"{;#\;BV?Wktلr5r0ЯT?oE4_nL"P>6P\fn0a`ZM1+~6|3 p/&(9&o.xt [x^)* pjPC~ӟ,S rUR Jܝ[7}*ABPO#mE>An\kC*df&kVyw +\x"~6vS%b\fY+wAcQV?'~ ^BZ"C4nm +ٌhP@]5HE(V5i!^cF&@wؓ9DN0 Dv8qRma?H_x/Au4^ܒD1W85K}!BE+H +Gu LĐ԰fӪgM.c oa{-]60s}ɟԁ"X2QaWyd;Sd5X:Hs_ճ0>cIʙraI,mY{utUMC#_x_c]gmjk u)b.޺.zq2tB[4UVCf[ѽ%N;Q"rǼbba|b X?X 󝠘v\gl@QuuGV'clу= fy^LPr,Lj䌈fuvp1aZ'<[.o[\@C3RgwTԠ>IG#>%Ɓ5fJŁ\ 1Tv8)7)/Xu }&' >nAiT=1ccbr2̐w({3B.~\;4ŠF*|9ֆTyȵ̣JepN5a +kr0j2}L'#'D_յl:(4JpLVV t'l=1dn(J! ܎ĭ3V:/~N-U7m)imI3KpƯ*⽒S"&DhՓI y_Рр[]ԀSݜwL^}sR'Xү˺[jP +jB 7ƌLt[,5ޏy!Ya~;r`>p{~ ^!h!=B$iS q 1F6m+b69 C7b&c,p +ojm)A! SBSkŽ6x±?OC\pyA0wNDXD$A QmVQ{C<ו=}y}} Z7L +%/UqjxK:=jI >[\_;WZ #`yY`o6q95@NGl`惷<$#:DdG‡ +I8S% @ eo89yst搤KȅYvjt {c`|\iM]*\UduhC??^-0-Jt_Ӓc* 6,h(X(̶gJvgDKe.<M0>xM%?Gl`(&F8SZ}ZMΖ*(B);s[- Rc8#cփ rX6u@25g;Sl_tFtܑ\RsR~2Kyg|EI_`#zoi#a5xb]:O;E +&$5~G@']-S ++Y$]_J>:PuVNؿz +84ݼX2@˜iQ(GS:xcy8gi,e /i< b´Nx)\&YQ5#̴҃[cIJFl"pء,̀q Kef$]#|kF|Ja"zR2i/L!k (k@.ّj̔ysb<mpRnR^ n΍n`UladRSE9ETQ$IU$/L5WN|q8 wz b~mpU<U6*V1>`jZsf7 /97h1)٣Yd=P'f\GvY{UݐW슔F ~;ګ3{X$;ܽnaoRMڒfCTg9" (!DdgW*i#܄9Mدb4euLХ穷;(C +]Ys9XI ϼV-A%hW2od<y5%q]פN>C0{!r?r)8nV\=sŮi= EԹ'ge no.>:G,;|pVIxUQr @h M61 6XjiB$û0G0S&G7ͫ:G0mTz-'{E'Yv %0| U6=aBeBoC~|#jf|hѕKl <`Ոe%6A`g䩴=k7& H@O ڬ=(8,-x+7zw ?:ـ"1SiDr5i@n@GJ$^.& =tz+1d41lyMoT8R&Î7!k"'|";)׸$g}Y8 pAZ9)Xa%GnDW]jHKY3;yJ7ʻpr =聍=Ush5NvhfS!/̉**_6QW}=@<aSs&897bKFiJ.X{O3xo}Xeo(h.[3S7^JU0-҅MhjE֔wΤl'fdT^ՙ9TWyh'Icg)Ϋ(Z% +#%1G]3YjgMh- B= D/b?ͯo"wǞgܤbGq!֦AJ챒aGF=F)jq́{t&vL p7g70ä6P2)ѧIZ W* Hj}}NZmVYEty6pN/%:FIJ4Au,zX^x +2ęuRq qLЉT-LDgrH(iftfF0òwj0FuC _D'_XQ}AǧpAYċ r~H:gdsHRC_m@[UMHw"F9֌ch2A{H6^W*)GR'D_o/ٓ>7d^BP-ր tut0]zMrZX`\?>ԅ53>m4Mx6 'ӤOUo)Orb~L MC$ ܓ>8SK+<]Ȥc9u 4Ar댭KLwao*v@=V^}H,H^+j4p@M2@ijS99G 7+Nc.v}WʷW઻xlTb|Դ̳,n^rn2z۽ ADu QXŸnByl1MybR[K㑕:ղzN7 kmn.#d6~ͻeyK J u즳 *sks= 5vKf2xc2-(&1#^O3t+u % %*3BO32W &6"M[ABa_UB \7Q׈Z0R"|s4=yiTh٫Ѷ{і 3$ +`Ş1leh/a9#"ZK_߅z5 %p'v(X~Gκ*=o1hHK +OE7X7DleN!Rͬ$[ۀHzd:yBH y]}u[DEK`\Ö-P aזs^Т5^\OýcnR1XfkSI%vIUV~q1[~ns\#%Tp,p[iqv45BYkJ +gR6wg -ERE,͜7`"čX5$W4';43CI^X|fdKgV.çZ~1${5,ɗ,D֘͆t <\9q#o;(;V7ppE2L?[ƫ%vS׋s bZ/V_M: yO~xƒ{M'w|;Hevgs=Ј"d馄,]a7!ITt6▨mIܩޤ91?&rDQPB[Fīt&} \; L+/VQȿK4 Kɳ$YT}/FrC)Oo:AW:xj=ʨ9m-H,0CćEh* &"߽WOsvP9$agK3c:qi3#|8NbE9^I?YՏ$2$)=r=eZJǯd)7'L` L|#ф%  +᮴ +=w:xQjSJ3-eѳU}|o`6o w$ Pw*၉h~ Ztx#xBQ~Rp$;%ǸAzA8~˕dGR_(ݪ-VIVqz](oN@4? +-:\<|ßt<?|g2p z)MsU+Dܪ+S{XWv>WQ'1G/iG&p0d&N>okUBϜ WZ #lb:@lq_.yH&k`+`ϹdZ hP<5eT$wbwL +n1Kt-C`+ڨZENeNhDWn2Z~ESBd*:YqKTYJ`ݯO/,lz>3e2ʄ"OkLC:k.|FRVzQ +mFw.п7)@,3x[OW;kʣf@։a;T!V%qc)xRTQ`4$N=2T!$O"0.Krv!^I!Ջ.Dp-)>*4J4PX˙Pʒ-WL`uT=i$CVݞ(bQ[Q.`ؾd  #)+=[҈{ +j]3 Gk[{* JQ+ӜjК<`Ҁ2Wu-4(H*I\L zٵ1VAH4"7-?}! P_wOU2*\b>hb8=e +ApL"nUBa82'@xs!Nˈ-H \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc36.dat b/vendor/endroid/qr-code/assets/data/rsc36.dat new file mode 100644 index 000000000..cf64fb26f --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc36.dat @@ -0,0 +1,73 @@ +CL{I|~I h-+JY;v`;CL{I|~I h-+JY;v`;8o>6Z_V4vǭ>v$Qԍ]Lۄ!-w}ށ.pME*u!Mp7-'99|l,5yhKG|lRa0gppcw'ՙ rח~cH BZ:m\)TB]Tf|zWig]A1@`F;_B2]=n"ZN6rrXguaEjЖ<;'ap; ;SXn MV8G ӵ`? ++N/>!@=3{#0?rzwC UE8^戺 +KÇY3wi-@K* 2Kt_>)"R Ʉ )p;uV +L~AҢ$E̵ٺb +9v_-odz_4aPib!`dL(dDl _Šԣ1x3vN\ͭ򶻦cܠEԛx.I,0vkOvӛ@]Kwߑp`n ?1?̀v< +"AY\t̃ڭUw~Vݑs^|&Bz{fF`{/i{;8(ڗs +=ϡ@@~&+OO#pu2 +i"믛 +M;W)[?k +6l^3hs6=fZTdu詟Ͼ| mRDM@iR!v%g{G( +nRw|iڠW + i'vOk+Cy*Y $KH"+$:(MM4X]`C>Wg4HMwAK i+crZaiQA45v|H+73vXu[h O=A}=W/qB5c1GUeWP4iԲ` +[t=tH4٬\U+PHT󧥈u%; {G}ə [gb3f8 3a9G!\v8"$}y0-[G"GqkQ_!]SE+\EMVxh#j`9gtkI~v}w<~גX*`$+Q<}')?EVQ &٥%।0ZTPgaܟ@6~.&b~G'xD$;O\_Ͷ7R'7L +^;}!Yh9zU0衒G˪/$k(?%L߄6׌?[c_!f) .YgD/E:T 3^,mvp5*P536Kz_!;{co6|x+.|8^1Jks7LV,IC [Fed߿41DC+&+8N:xm-7\3%ˠ=d![B\F!i=#v . }R~lؼf}l~XFE/Eb4WTtnb#Wzy8101*O#[aSU$*ҤfCy{Xx1x5'+O#w5sBJY$7P24۟y҇]{^(  +7,3J Ty#av r +Nɞ?E4-V/ToH# DVkOH^`-A95SAIꚺDf6sI/s2[t?,=P6њh"ͺy݆>|h>.8D7wJRh +f#1wc@Co8C2(V: ' +a*Kaӭ׼7Mm +9a +)@{AXZ=LU͸Zh1j}/ї: eV>n.f 5F+OJΆ;!Ļզ$,2XoCU, 6Й]zƝb-2ʮhMV'3=3E%AtxU#qSҵy.Mz>hE<8/V%g[q:bMH?xs-zGvL,hSW +J,av@/wfp%fONЊb +Aw9=ɚ]t(܌E]k‹r].%B +%pDHqo w>&#l\L:N(HvOߞym6O}O M!cQbltV豀tSqnN8n) vB9r`)_9_I(~|'OF'6}9 XiY?I^H'>SPES~#Je혣:sl~kO +3܇Q;a8AHLjci. ^an ʶƾKBQR@\?7G^t@fڌŋ7aSLj_Wi}]e)p_˼XsjTjOflS4C:k Bvx?1Y#tU#Tm܋e&L͚&)OlYV\ 2q+(اe9e=#Q] Q5cZT.ۭN&G"o.7^ġ(m'hAaF:wK_ۺ# "ZX!7 1۵qpou:bM`bTɇF,U +H)TU6 f+1a+KҌk0u}n܀KngѰbqjNMV +#Fjy#У@K29* cu&1HflLJ0 +suŔHn[dh[(# UoOA($ +e7Kߩs 6W7DP*wnXfWcF} +ϠQf "׀$g ) +4 ŏ!C~hZ3^2y01=F֞XJYi$Y +ԑvuMc뫸KP%, !]yZrj')i%-^0b|kˍd~Xz)gl)}Diӧ{|/A=|xoƗ`m`f,׬ GlcG\>0pۑϻnCK6 -% + Fb +@s<[jvo=PCRL? 1b51).+1p>d7PtNuT_5g39Ϣq@Ϧ<8պ\1LߦeGen&rR!+ǂg :urWYb^3tۿ=#|.k\S@}j.EݓJOu5kif*!ڎ +aVI1-v'-> +=BkQHwXd X}HNdwYd%Uo4@.GRc5uc@ql/!xAo7|'IZdA]Մ=}Aey^d_6~^$q;,J̺jY0T{::$V.›Nn(z$*;Q ij +7Yrz)>imP׊ Hhs,tY0pa}$֙ 亳\JJGmŃې @OG ]Hsh}jXvAp6/X4 |L.xsy[SOnPuVjy<V07ʑf@; Ǯmڢ.:fwmF8qc+&ٱYv?aiQ m Z{(HWXHº1[J0K2Rd&A^ +2~U BG8 ӊړ柳,`7Peck+bG9=õگZ/sD]D6)Ej8ƌ8ͱO9H? *3j>=qq 0I#L!b&`Ҫ>?4ޛ% +;dl0jȠ&kBA㞘\o8CMP{r^}+SB֬Y霮:b<[ ֧[g1$<ɷR=p;&`4 Td`C^O ,-Zq&\-_#%UgCKLLDHbS,| EOPY/0CuM]"3TﷁsrNL "c~%p)ELBN433ȯs,<>Y/{B%d+m +aUpR-*(CGeyrIRr.Fݡ[)M&Bl/I4=MtIӾPNNl.;r[xml|~z+dl#ǰC{,\6~b*.F誡F:> 4L$[):1L4u2 %`Xtmwj%QwR˞زxe ^*5xl֍}Ƥg +&NkD>g 'ShE1lDFQGMj:]\nFd6y:6Y|ڕpZ+Y̛s-E#BD9B$q [ho + hD< 8G / +AS _SBPpLм/2zZw?om`Tla";ה ݏoL}D\ n _PNзAMͥ•"APJ3@u@D[{e_zHBztc]3iF{DIװ7Bn@bow7h 꿉ҴrM$36k  #tĚĨ!q6XOQIR :o=To%yIӸU?XԷlCiVbV.` +9{ѨmduÅKGFa!xy2}w?8Ϛ&!'FKF +EBj9>DĴ Ŝ4nYx=}_,"}[drToo)Lb8ؓ0 `*20ڜ&`&"$O1r j >R 5y]жPWKFso&ޞiPHo Sv5dP!ɮOL@.ԱXgTVZO(T- +_m$,$na]O%gl)2/n +1͐mRmqzV-A"DCq"e$T4܏5,;gM8,ՃydgweK3 l`􌆊WmQ3鵸]5*D߳H +q+Ra'7=hAc$ +T4ϷT +zC:Px8ξа +u(%SB д E"fMd`=bz$ +E!=4xIEiuiZ9K DZBAH{?<ٚKm{JK tCo*6dWMJpxdpXBe"Q9NR +xؚ+|J9ZDROP/P&U:;2CZ&`"_M֭xRF{jsSp||Cn8Ѥ`cm3[%Ν?RKq ]RcR'S"^zԏ2>sm +8-כJ[fU +326ڟXIE]Q.ƎqQ䋉Jቜ0d,: w5r|` ++?k#܆k5lUZ*J@(#vd:"_"ލ]~X%sPf/^Mab/x(z3~bOKij[b-4v/UʍВ(dYƲ;YR\V;2b|onE?,(3/o1N@;XXpehIf2cY`Sp“jfrY Qxpib%yQ3v +Z~r%Ns2B\Cl{N9S"k{)(L(BV}@xu-Inu>7Rza0a IuSZN}g )N J[$kljd_9 +Cq=Yo')hz KEˮzqs*\ZΉfea؟_O'rYeW{ Ѵ  +Dـq?g74,DZK#c3e(&ѭCуc]4(H ׀1>#c3e(&GSiƺhP %b|FfuP%Lk nŒnӥ \x +ydSBaeUsxjoc..c6ґiРW=4{:JwOJ?#Rh4`u9$!^ ־*ɗ99-W@.'8o>WCo dԼR 4.#4<&+ޓ"\Q\l? ]0zht?]- k#a\u6r*2e!T]:&\Dj}u g~.yFKKywh < $rEiHB[C7ż aިΥΨj5+%:բ-Ư`%-GT43rrZkm(8G\NpQ|Iц#޵ct"pPtkY.%QZΏB`+Mz BȵeeAhK$\F>S3i,h/xLVA9e¸ \1"6KlgWc )gߡ;Do~g`AK57[ +~!˺5ZsK@==@[SfZ&h)${;<|F.E¯.lTdBUtLq8.*V*@^6;j8,ǕuWdDoBRNŒ0\UНxHҐ?ne0#!#mv2~ʹ]Rozb2wMӁWM)jVJtY9sZCe)]JZQfvnJ7broFOƠ}J84bƨhWfWAkPpࡢ*/AF wP%aTa7l"6V3Ƶ=,"et=QED诿ֲ\JVI3ӷ;e9vv9,=Z~VchNj̾$o4wU4 +GH|;f'X^G— 4OO_}>oNdb&wWٌm*,owɩr݋m]bDl#ϻ8YR(Σ{zZgXXZuV?Bk;'R589u 7m?R_vk?mYm?o,iK͖jn.B<ij.d2A^(Mi_HK7Y|A曖Cz +z:9'eLuO W*R:Hvx9O4cfQMQ5 Y E-P=ѩqY{10\CC\ mըȉM kim p ,I|'Xƍ[L* YSwU<] +\qTTelvpWX7]ޫ`[2`\ 2BҬjQ)vȷ~(tF11gý's4, =~që3`4SH(鴯(BݠGa9b@2V~b8EFB,&[&FdoϺۙWudoYfZ/LUWm$!G< +tf dLG"_RԬ{sr?Rg <گK& Kt1G(4Ҿ1TIߔl('WϢ%=%ܔngތ"]+۔:pUhđM7Ra~Zof3}j lg2 kMЮծu:Ӡm%_YT^9c"@_, P\P ѝI`٥"hj= +G8G-AJ¨nDlfw8>z;( XD_zX GGb'1zj +?{'lMD愑7͈]CcysEKe/ர;nA +. KU%/ +@ +*}-- +p(83<_6In(&UddEQ !Ԣ/Rs4P/dm::Wh, +T]l@&QWm +IbbΛgNhX=oz*"Kfh//> +>t:@K}6x=7@} :PMuCuP]݅8“rĉWd]- 38ct`>n!3۠vfX5G>HXEpXLL +6>iU/ +c;ȫz])]*iS./v^7: Ai07w3[[3u̴^!HBMx C%ȘnB1ϯjv Ƚ|F˯ҙ@?D) k>A>)wE[5yu~ ';i@+5uN(po*13.O/w $xCL))b3eSW2Pmhab5ePNQGᮬGkReMǏȀ-SmBHƁ/MhYJzJť5΋աD! +?V{5tЕ?|{(9@FV%} HרV1'nf,<ؕd*#ŖT$o$]v; IΐWOkᚽA AtO]JǼ<rD3bM2L2iz{[G,JX"9hzA!w"Xw@K 'Q>"WD& zops뛍/@%%/rVTWx׻Y'Ą]Z"M"ܭE>?gp|vP˰{Y\/_3CwhGnS[3h7Nb4KIim,~N KHWLhQ LD~-?cO0`M%-b.cM3? n 뇆&cm5x> *'EdR9&XKk*VnnV|E>k0={EĂ.xζʆ8J!8ٴaY#E9񁹘TcbyNy_gLt{3\+ oPΉ䃶 +"FubE`㽻%;&F`t6y5.@@53Wns F(҃EͧgnR#t[0O[}q?Jy՜"4EZq]ScE8;ۄisWW(~>띑ٰDndm>@I2gb(=v +싅o}6geZKYU);:"QbV=?>)LoIGo)y@Q1f^}pNQ+ Bty7x.?2-S0KOy2/f᳀!!a%>7AC +`b-Hbx<̉#Qd3A]pޙrG]% V66 0")(j[$%#뢿0CODsjݜSɤ/)+x\kS|xi2SS^Xi\ tbG?3XyUC\L%Ǣֿ;t \oV!G;ӣ0Wt'(HeDKDE` Rxˤ:r&uП6S :'x&xz=I$ TuK[C V +$2u}}uh{ɳE#NV`Uz,6ܩ[U.# ¤, q[lcD0Htjjs )-!LpQJܨpb?k7JlTZ@iAq8lyEsh_Daűy_ס'21bvFP׸ =A-Y,,- [+! )Hsϕ)(LCW*C6{w+ch +޼:y鐦 +м;;rFC-K?+ٿ~ 4'5rf_ V ߇F;?e)a=1FtZyrN3HxN;7%19#wFcP%GR1cT ٍ rI3-^4Z܄I>e[t+ ^/a5ĴF2"P!)'aFVb:8(:sꉦ-g!0AU=!m{ppa\.P@6|vQq +̽V{.pʴ9z*R.["5CoTggTz5MQI՘c^0MhPБY)ێY4y0rD V]kcyv/Dk_iu2j^)^WGFl ]` lyi|xد]n$@NjmZN7uIzI7L.<l2ҧ!ܤ<5 +m^mV0xGs*)Z4|ՊEML+AkO{GSyʜ7*+yUMYomSKeʥX2oɝ$.S/ ${M + Nf59? GAB{9گ9O?}?`8q-_$y:*QVIf8c{gi&(}1 ںX[,ƜYr'A Vgw$[PыV(.({S045Eҭd,`v`1 U]w=5\s y6Ȩ"sBm٫|MM:ʭ^wA}v܏\i_*J6^̕)z?-z3Fvq5{ }6b|pv$TZZ!Ppf{xloa1e PL+?1ux~ŢZ3-&}OaT:3N2&q>ȝmc,c [&o@BY^äh^R0.d!iVSOp5;d? :#Gwttw2}c/]X{$L>{I3w񦔈DIeU(EaɆo> #+Μzs$TD+W^K*AA;HwlN~^ C۪ gHjCx^'|Ss|8tWilznU׭WVVR)td@CfK!$cΙf4Qt=Sp;G_/ȺZEfpƃq7o!oq5X;hsJd >#uzi QX :|i Bf]̰maj|< :a0pFxrx΍@7]P;y3,\_ϭk$b, qO8l|Ҫ_K^7AvKs2Ը̂wA|XP4*o6 bw rUYR6"TQҦ\ۻ^anZJcgѐ_[ MC bA8B;DӴJ^Ee&ٻkɭeNw˕K|ϙϏgCJ'3Ss}!ⳒmD5//DG #6|~0} a6BDv=&nY6`iݞ_^nRwiWI^88.(Kf }Ў>;Mfj*n*=JNr֪}L/4|(NLn}S'$<'hҟC#(X@) *:g/Ǿn bZ#f(k# אТoZ~ƞw`J$IZ\ƚfh^I}ȓI F9#HG?{93 @~SiLj y|TNȤrL󰖅TŬ,·NN’+/ܶt6pQ/j1!!]:ܬ +|5`czaq,)4\%q}YY}B!ޥ(n9Dҩ;pBp'Cݯu)q=MFr?o-q]-ˡ9`h`Y@e,a( P1S9˔R[y%t+#]69yF趕`K}~,4%D2h=a,pg8#<9y'&l1 8lel>K`D=RPԶHJFYc`2*՞>ɽ T%EJIwWqIŧ*{6{%"U^+&R +V$֣_uZ5vyivLdaX)n_.lFq낇l!d,ۦ0,O7G6> ~;f]>qG##?94M1q'E(2WJY]c&v_MޅmBe v[`=JqB44B$NkIR,s[aZGYNPOʈO!Y8MUtL!#lt[= 1 'B0cUp _B"gFQ0NLşzH[Q@wUHQ%]!zb!N'y`ƪ)Iͷ-DΌ`̓da{ي*F%cXlO\-;;SL&2,m7E6#@kA6zFUX2U˟I&csƏ׈<`%I>o:Ei҂pоň%{-F3F~r=8hqbY"NÊPdI=Y \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc42.dat b/vendor/endroid/qr-code/assets/data/rsc42.dat new file mode 100644 index 000000000..d00402663 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc42.dat @@ -0,0 +1,43 @@ +lE-iEAgk4)&\BN" 5"8ų2lE-iEAgk4)&\BN" 5"8ų2 Z!}:WhRLDjD p{cd +wé'\v{jf_f HRV*v B tCm%$Ԉ83ȓCL(JLXi 䚍1Wk-6Ey~u +c0kOgNՑ6$T 87( S\5?*a>5G4u@o2AU-*J H p,f;(+WX HYWsx_| h/A/1~B.-_9/ +Pѩ)abIZI:l'"); X$ϳ.G>kSkb49M'. `+m?ola,H:=UWE<ņ^X h^jJYؓ}!eTFwE92#pnPj~ T1M|4!o6j^y +xm7s1Sw>'Zuϋ3h$0$d>͂gZTwX?vPa3Nja%Y'Sȃ|8B8iӆ L5UVe64 (^^bS [\cZ:5e맗Cp;g0MF|(|؇7Q\_g#r- <^Wg5-}O ,RAtN +G DROh?sh<$'ń:FA:vHq{\|-֦֍E 7hr"N 9) $u c΅%K$\6(&6V!%ڗws~Xt zMxs+ؖsF8fNQ/<55Bo}NQ.Űc[W8;BSʨS +=ur8} -. +< 1 qÝqS2rgwdF?$+?O0Qm +[kbhBlz 'Malz[ L> rB)#E逢\Kp3i K +"qڡn +k:b{ g|Ni &f{!\l vV )I0cH`* H|"IO54=4+ݰS~"mX c>!3 `{4;k@P<f <" sJ7N,p/p#j+Ue#N \T2ޫnR&R 0+XƯTAl}h8$=yAPa,":aBoP%5q;* +~^6-stj'I&-S3vο`9 P=!nۢOi +:'%TEBF{e&dUFZx0(]jZcoXs9u[9譜׈*l{0)UrG}51|n&P:}~*MxHU N-}g1}ti a}2+Eu9#H/gqD_n_Ʊ3St,}wS/ZQn)KDvw%r6-u DS>'XVWy>3rR4.ma,!HM@CGJ/H_{qS/e] K<kQJ +&,nlP#? 0LlBJ3..=IA 30)S1)%tW>Ⱥ B3č;wWVy21.p^x=jjI!g"m];=UT"3āomiE:sHH/hԝ_E"e\}4ƶeî>5ypGv鄦M_z pN* _&5 #MnP׫ʄx u,Y8Z\$67 xb:3m'dߖ'Y7}{vj%<o/VT~\("[#Ȍ~HV8~]`<#,#sM)/Єص;K{%.9y;:  l`CO^oLlN ,:|䏄RwgFgQYf| M!;ūh](Hͩ9EsEx_Da}% ҋewD(<_wt[QΫuL2 2Gg=2ƻ/;} ͉n{Y٨~/B>{"#Y@GRӒei`u(YAF*?Dul񆘀i1ڧ͗gRNÀT@:_2DuMjhzhV} ]Dn5?â~A26̟?S$JsJhC.(Xڰ>u|B*f6 >)e9&,h,v!րxW8_C"_NQb42za]E JR2<;xDᙔyn?`RS>kjcb664[.)qL_t8P{1bS:{*o1B#CE,UIM#!ϽT8.GǪ6Z b"3* MG3fUQ 3ϵNWq-a72"dVS7rF2I^Gc8+fJrWr3-ƍj`ݾ =)mم +`śX=^6[m37 ,ܽR%ӧi7=[nY㚾57+To +D$q]6]9xfe +,6JlZ<@,Y6 3|?NU(;i;+-*1O/|digz[Uiph f\%*f4䤇h\WǯX4B_ɚ&.<#^1 +s]>w?_IdՏK+l4I%^ʅ%@9x?8 /LX:;?~`58j_ +`R5edCtH1>m F~@`'E> +Of_\G/\}z08)foԣka/(Uԉ{獧~N~tFW= `Rզ_b7,RJծ|'ɉiaUEf1Cvɷ!1Bc?EU-!5#:\p:vhM^Dw׬o P +@3V}ϟKCe+qk 8$WsUbk&m*7T~$9m*-bw +8S3Τ?40Ӯ(ށM(ɍD+Hvf/'Y6ݞg= t6=&d9!ЬS@Q.8hx.6|׆xF;+Q}ؚ^]qiZ +zQj~YdlK#u~3w'kHUOA!І\P't lDCB\Az|c9n}4|T4l|R˝rLXKXCkB]#qt \n|q_ yOoTͿz~zeg̉qpDձĉhd> m!wC&@äd}ULů}u8I#>>HylO.CS/xv,4/5x%lݼ*o#DHZt/j[C4@?E!ky,j[ayxvLud1V㆝xI&nh%&,smrM_UUFl{}?Mc{cm{.FywwrKT O҃6DzOXz.!'yGZ鎌 Ўy.;5rci33 @$)dn+;p`c]px@d7HT?\# I\"6CL@ԌmŽ)'e @R䲄ѱ60J܎vίIu/[&6>q4֠zq$l<"Ǿi']zR쇟H7(eB@7 ߅M[(ȰyĂĒe$Ui"ء7cmi`!t({蜔HMtw \b?/OON˷SzI\ GZG *j!K#cammr2HӅ,rZdʃEM^}0Iu  O (Ԥu_Ꟍ '͋.uPI*o7))Q,c*u`ʂiuϑB`}Ѫp^n2q䇎JPH6{i?05av0)sYx2pDu:n$sݺ7yM_*"ֶ}~AQr<3R2a=£qx 8a 43.JG`Qܨ|~3IO|'llh\R☾]%9cS^ƥA9wcv50_eNN]  0pb$ĦYt2T%biFX((WS>/F( 1QN!] + +cݪvBg;)p\g=I'n0Z^PyOۗqj=Znd DȬ ɦnd=o aapV?Os&o+&=+h 7ͅOC%CY;sA>#7Qe?fZӧa%z%R{WOi4,[e|ʯrk'1e`=\Ow%)Q +zQlfuYnXg1 JWo ޱoqZb"$;P3`֝ObSnzܲ)ajnVHKlrYU@?ZW()zhK ͡n#BY|5xg'E&XlشxX. lQf~sPv}vVZETAb^JM¹K-0IfR!W1TtTX}s[!ҙ/٪0ۙ"W,2o2 +J[5:YTW@mjڷMqm?:NfD QChUиCh =)L?>\xF56b=cx%#ר?Aq-@gɝ2'|~ceȣٷ&5]=Vhxni"һ^Z~iLWKC + 0SmKaJQ#iJ1r~+pY{5g{0&(^2tv~ ykֽ~Vk,TYD Z*=?=ּflwNa |J`}&^ٰs T +$6S4C<#EdflMyUy/g -=ѦXqyEL:6yb"EK!@.[`[ݮ=>7mfk?+*)ahP&#$:OnKwVR̯LOq(JdTh0<ɲPNk<ȜlTNƒrS Ci bEGr<7FhViք/F-?&zEvj_Gu%Laҫ3Lz)]{*:*,jy뷣I Ÿb5mŶXG{'A3|"B_ZG +goTe +ud并-A1n(nw0kQp1-OMd=O4Mu7PL!L>I<φHum؎P 4HD[T̩`Vdl~[޼v>eن9ޝS 0p}ΐ._PjxVsILgڞv^+*,t-D[xmؕ{TIpdҒۖT@I7g-/(oMɩvsk5-by/cܮŵLd;pE'rH'M\nmqfKzݦAׄ'KyV {}RnUe;TaJ޾;G{J^l<8c`"c@o7K]|Аa߶R<]CnEzAiAFNe%@0n +=EKS@BiOP+)7pg*Gk_>hH[)_d7 =Ů#'y SB7o^;CoK^8AgHȡ(5!rDe-SƘ2 +M{GDto(&Q&|JVtrf7Oc+)f&%2@@ *s4†Y#]4+kB#A]=y|b;b5 ݭ}\@>X%0R/GpvXZh*UYtyboh,&EF1Gٱ v0WAIhj3}#jsG:}4`YJ]oEu MBe8Y G 8_Y}lΓZK1*`$)C3iS.=+G@ a v0o{+[*; (8[3 :++o,']~5)tZ/1#Dt9ZUAxMͻM}w~S qY1,A+-p1^ Ra]h6oĎosѻ\9:yzC[HS6N+~Seh|t<&QVo,ʗxLxRBq VӣG[Hy\UkrC|ɠ?yޖWٮ8U/wW)4zCbG{.v:[YVf#YVO;ypH}45zYJEᡢ~f6gLJp-DU0cLTnHr ɭT"Z:pOfU~>%kh`+:ğC]!ŸLƠnV>1F1ذZ.AP4$_P{u2VW]W^Nl !U`UL® +ҢuTumvw>J$L \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc44.dat b/vendor/endroid/qr-code/assets/data/rsc44.dat new file mode 100644 index 000000000..ac3b30de9 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc44.dat @@ -0,0 +1,45 @@ +ov/}Ae:M xTf>c2)J.D1ov/}Ae:M xTf>c2)J.D1Ae^]Wʗt&$̓|/(d+Rה\>bLq>RN5/6TB["}/H+I5ރps`jiy6[> $#Jucn!@ӼUu /bp5s@&i[ aQ+ +dwvh,j}u?; Eb93RpyYP_Ol;+98!ZTv.AC}J1uxw?p+ᤆZLV(J0e4߭9*A.":4f 1+top72L_]@"r*h +jj?H-2.=>l4~ V­PZ*+P>_F1˕-!,6JOhoY`4a@aLAmNO$8弡҇ЭB[>i#-f&/<ȯ'\:^fp$ry!vgW軞)M\:_"REߙ<;9V!p2& SWF; bp"!7>A1u U}Hn5daf؉q`<UZ@}Rz\œIhxnM +fcY@)I.Bvbh:S<`,_%п{[NJfg|DkMKc^V:j&! PǔDO e]o5F`3L|YX:2k;=5!l|HQF2kmBewHwh 3os1JZ>KC 9U G,?!O@k^ Sj!0LGҶ<m¢VM jq9 D8Eui䵫#NL<s)"֐lp^c4}>EX*x3P%\|K~v&?rf9Q+!p˩{V&JBR.A$-t@5o 6<m.x~tT3n`· Y2 N]K$kN-\S9}YV84&SGdb$/}Uj6;T.+]5h8t76hb.VkQnd c(DmT/;n2ioU&Bfq}'_5  +~ۯZ5dq\z|;ChU6GTVQKzg`q _οF(jb"Ւhpn}QI|,b7ZaBXle]+;՟ch; +,CZvY(2nzʃ9]FG)<چwOQ˜&>ڜWH-/Ype_GcU| FZ$M }*KHcrSA0L^.x_ۍCN-9t(I<{oHBӮ1XAW'(]M}tځvb {/Nlk!Rt?D/xvrBdAM,L5>KUcNqVGًǰz +O~;*t9v7 #DBn4|,=b?(@j"E9DA N]~YP=J0+i|ԏ[ȇ<o26x&Gk;i YwOfb KĂGP}.=a:퉚 Y.Q2e=ƲR0\ě 8tG#Ax"(Xy'sV~ܱNEh}߆*Xy?@UJ#ͩ=Jc &Aߔ$΃q֚Ƽ=t9_6 +LB= Jyu9ϔt[kN-ש5) 5˞%;j[fAg?td֫Uvz ғ/(?nXW^vT˵aMp~K[jBswq,+&>'d5ɑ"kIs- TEXѵ?jv&謹ݣ>"aW t$xC4[$f=޽b +0|@crXS~UBg+>n,l[~|#/ XRPJS<ּB`qsx,*.kKYc7(ISOixmכ9sW '>L(khJqb+rp$4wKFxIRD=1 )OhŢA/$eQMUlC6 o|3ŽTfۡJCɖ{4L8 ~TvȨCA&u )aڻrVBoOkLՔ\H%YZ]gj7@lEeꍴ@Bj2*ɉ٬Wl0qMCr;}_(xU:y]\I'թfE@ +d[-/ղLEV!-sj*m2=yu:+ipၵ_ 9H֜Y'ZI(r%=phxL1mqZ65^@ݺϡ#3MK8^F5bחVl- $n <\AoB3 si@*k޼(>R5ȥ!:Zh{T؎37mOʢx]#*f'b"2?J"u+-ED5[RCTܞvrP!WiŒgz &KBW}FG؋|LǦAeđH ^(lv\Vj0C09+٭{(rƚX +$ND3<ut.pon:lЅ0\֢͡ȫ-aiP^(vmT, ѹd盱_ʠUnNVuXp7MGom܃d15>ު6L̽,2N-jc=1"KwCbDζ9G{=-eҏ), y%>=C㿴jwKvߪ7l$E&s/]u'KH)6.1eDO8; {fEg⥳\#"Q=c7PkD:?9[<ג*EZMrBe䦶zC…(YpIOɟ'Gvnt7]aX_ck n:5!Vv#Wy*Ɲ3Я㙄2ݗpav/*)3۲udD؃87e#SvXPd:rq 3Rx o'ؙb.z6Um^S(B`KQtCAcڰ-L|%!Z^[27:ʾo&gq<0"rc `?бNC|?vnS yMB/)m~aU8 [^oE#ȂX.j$ |QA)V-x3MR0EDHdZ1;: f6^`!˜w0* }Ey-%[AvT #rhK}cX@Ѝj1nrlw,_v#`ZCn4F݈ + hCskXz~P<_0I=ԫlw4D]jb"oD=' ˊr1sUzO`V4ݵ,qRQx*ɁsY"^\]8rlB%W懍xGdl.LIu +U/m3v89;#Ĉ1~8Fvf  H +o$7Gi@3:8S&ѡ + \9k4z5tb( o#Ę_|@%^Pg4rnB0q)8@\d(zy`9ŕ+pQFDP&GaW6o_؞-*;{SLϰ%ߴ<X8PN49͝T۰љ$~oFOzy8{ഉkә18DݔO غB\㾦bTf|2gq{L%5H )1ϑezErlç0:dMTctVaIOw*f%E})z%r]Y5 g0A.Zѕ>O/jR{w(= +JU׼$Pz 3SMNnZkc]g;j !J,v{i2̂-~cy"}G+Kg.7mSWX?]t6Ose&W@;^P~w<*o 3¿ +Ú%"eM&y)'LD~U*![+X=o9f'w+ ocXV=YL|NC߱j?W:D։{HxC"'K?R}(%ʛ ̺>pj ZQa$uw~M9OLEo[|D®HPf,gQhA:m;Dc1 i'6E=s0hSHzg#`5u1I487VAG-{;7~=eϒ#w[ŚmCEҵg|Xس6FW^2{1c +w5*eq G4\7d|KJ򁹤ȃm!3hpnl 㡱LʔюHx!e74 Q:-oXT\֖/EnP).WBҞ]A<ӹ/ +.J2nbO;`16璦͛8ӳ+r%!)NQ|: PДuVeIɻ'Q.U +NHh+@jn`3K?\[_T$4 Hh %-ђzbeRÊ5"v r۟'&gqUdkH6K8/MeQS^H3ʿ !;14اW0 +lY(h~J|"NA#0ߗW&{>C,lsRfg }w̫_/#]m1+h6p[7ՅG^PI +neQ<_hS3W1\H|YO&:*wM<+ 8YGLe@R"k] CIy c[sT`( j EƘkY&+ E5cUJǴ8Cn؊d6PK}"v ]xpWl +#,UD$@>*u;dTïEQ`x^a|vӾPmyuZ !5VS6_-~9\t<͒NOM̥S&yȻ4%i1Zϛ^^*SfݮFżOKɍ @G6w܉ k{tQoy*S_k,B ZԑTIdz5;tVw:G<76?>lܙKъa,)Jϱ^[(% r%NmPQJzgyE:w W'sbx”iǙ}a7,/;@*GE|ξA8?Ng^3]@1ŏfibAxso(CIB FJ +?It`n'4C,sa ﲑ %ڐY6Fi]rgظ}$."U51Au) +]Nw;7 gqWϲ{r| 9kR@b0ǑD hqrVM,. Sd?ZVz򼣃q~F{Usp˟0uHaY;hed'L kBG8E;ꚗm|Y2"ljqilv1\ +|=Fָ/ow !0n :zmX_ǫFf$apij"3Z@Hqs. -ߨ9I!L{ZrS[=kaHM8ϩ;7:@x*ބfҀT2֡eP|mjW7Bt'+,81ǎ"g[ܭx ۘFiɚbefnO];G9(ߞYaFTQNAKm= yDd~!ϯ UC`9cMS,\'u^"PJ:E[IDV;Z]9jɝդM2$Ѩm y4?%>'^PJťhcsQ6)H!iO[ByҙMY%71@0L  ӝ`LIX'k$4Q 5 70rБ.GN*Ǯ Q +ʍ?@IPأMi`i.2>%]yRdϸ|4~87[6XA&eJG$Ȍ$`rV{bD?#O;3qrWz$KZcRXJ1GދsKbL>O z/(9w7Q!dv _{w|zKcuԍmGInR#lk\b +pv7̊GuS=W{Ѹ,Tʪl&^-h9ىf$ +QUuzؓydrFDg٢z.0an'֓t~srݶYx9T>[+=RHy^Mbz?#8VfL$ٓ42&[S9G-ugQq<c=)P#Nܷ%X$4dKiB'0 xޓk}n° +ƕu t}jBi>g_sFT'fC/՛~:07kvVXgYRi}tmH/d3W# ^sSTRfyȈ pnF:˦ wgp6nAEFj%zB/fl2(;uy<8Kt6ifO"N Bt^d-힔zueq+ȧ [¡T?ْX +./m(\lG7P4.$>Ʃ}sMKx| ӣIQݷG*05̬cL!Y:/Z2OJAB=ydnt{aL*I,xouUY<>yCem~iխ +˔fVpA&`D?U;~+ ,xB _Ec)N:$Quċ~tƁ87as_ M#5k=|!3 +N6Dc)$/[1=RB+3 Z&_QF^z , D2XJI!j?t,ˮ`ok%sdF n{`S(*W,f\d K}7]:a9Vw +|ym/~(Wi% 4׿ @A՚$UuS0&R,zꕱx9h'U^Rڃ& pՊF)\-H1I 1j}zhgϵ_?+TJ'HOauRZ0 f#8 `犈%"bkevtIlB,5#'?E"Ń$]vjp [`{d3b)&У +s%ٟE`Tc_+?#C;Z(J"w! K—y'" \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc46.dat b/vendor/endroid/qr-code/assets/data/rsc46.dat new file mode 100644 index 000000000..f4764fd1c --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc46.dat @@ -0,0 +1,47 @@ +qGp|܆ PiL%ٹX 6wp Z&qGp|܆ PiL%ٹX 6wp Z&$@>.ҘOyJ o:l;($L6y>`!9/X2o0vC'Z&<b6hj>>HW"]|\-+@C}4t؃vP sH$uk!FZB cKqa7V@ +Pg%90ijDZ-/!;>!l=3|Br^kѰd `͆. NLMx +l/=6ԠJ~Mi.]exs9p5L#Sl ~XM?||ǮD[#oZ!V{5h۠搟H-]E׻rº=K_ep*3A cMBcG? U]Ɩnͬ)Jr`$QqGZ^ma<˦7Ce}Jف ԎI2Zw]=D՜7SGBv|Bz*fw} \@u8^zlD +V%R;-QCq @) +en]]\w'G}rj7FW"~+cꮀݓmY%oRKP/26wqC[=SA:imF޴Bj _< G6ū]0=#SɱZy2yC/#W9zo]O" qVZI3/T#b|硺kizC , 7! $=0Y+Tu6fͳ} +fDf 8ZTie`$&-gma5 Ë'0ƚu~41g܇E(]R3H 8 n-KQ2_$D})V ;D;@YdhvaTV: 6灰LGb' +Y ɥƥA.W;[J靁<{Oޤk^adl"ⷣ$8$ӹ=yp~Hճ />n[vh!&d톶z; qtڌuE@:"xlK`zF=lHlOhG^Tb9-qB*횸cjh14լdW^F'4rMs&D⣬f^F/;ssL6O"bF +Th';J?EeL6&a_i 2{/􏻆XnB1@Hza`wVl2{,R.RN 3ߤqeJj꽄&`rYo  +̽̇.p> /UH +LZ6: Wj{i N`MvMR<6p/NJZ4 Ii|F) +,I*ih?b/:P5f՝o#w{xYueXMqI8 uAc oR}mfra{q|?zX)Ln]CT pvUO@o2~7g +ܑxU [uCKV%HyQӞ&};@nʯ {k5C>0w;89uXHiV sJt*Q.4.Lmhe\)NzPZ>x^woXJ'+$\(3vm̪JX9H!IQljwT-#'0_XivP44+Ƚ1FhŔtYc`lGPC=}Z+Jț:-90Zwz}8EnWNK Y9=ijNiRomS|Ջp@ZdA;GHRI"G}sQyN|grlmR-SK]ō"vvC!($t/l}oN?QV36ƫONvÖ4>g5{McBpWW:?\Svy'xU1]ּD;s[oHe DW*:z/'<ˊ+[)G.Lȃ}HQpHoz}{.6^U|Y+ '?BLom ƩCtjYbp~׀HI&M`+A71qQv蹓_tDag,3icQzuF`FW! +Ŝ錾6I)d:j71g}ö!sY-S؞б =črZ(T3y})miAbhE9YnY`܈I*>PچD2kp<4[UaȮN8AhNjLi!4Sg[Eu9M^vxPxV璾Ht"b$5^zք-Ů:W,F*O柘lc)(D[4_:kNvI ]~ʧlL.g[g؊7̵]m~NqiD@}{rEһd^k&04܄byM؅d2(X:,:UvkXStYaХy!$\*LPvd;~\3@IOfU?({GSʔmgL 2@ ]%-%Rf5ɇJ( d҄ĴwCRf)@2g ,+\|u^M7;lt@,+CT>[ [Ɛ暅욝ˤEm5)cx[l^.qh!QA<(ؙ$6t2IL[{,|.fєK r+?R*?XT~C^W& tߠiU>j̷'F=4ɯO/#ԾSraӭy2pe gr㐜 p@S IQE*!A~c5a!j _l:~;Y#肏7^36$'ER8s K)Ã쪞mdnο$ Rt6r2Q?`_4n9YO /pi?(-<놖m J!Lv? ܷOv'2}#/UM$`6K(XOQLCCY"j|`vprӟ߬6TY0 ŒwQK^*P:kH߳?ϲ +&W+KGիzJ$\h\}ESЏʸR<9| [G :!}E"Nno5A1EOUА(@F٥IxȼӲ6o5h}$V}xϡO7 W)[~AgB3vl'xUUP}rMog7>eA$[I_!bƷb57s>4?.]Tx_W5II'Kc/weiP E'h蝻**MkTsXaNfL:Ӡ܎G9_1Gr;Kdg8 D^fB]7,ǣ NR5u&5>Lj]H,T!+nɰѮ{"k$U8:شѸg‭uJEKw<~ *Ւ 量Sg\bN*506(/G佪%1W7> *cY?^ZS z0x3V8dVP5SȁѬ˪ŰuT~|"Hs:UPfWI] )DZq9\JaFg " #IV+-ޜ~(y0[m|mZ OQ;gUJ䋮q30&dʟ_ j%ߙ(YflKӜ<31h2$|,jƙOr\r*F{"ҫy#B0) +J'ͱ3i{?#t~AOq5N>!_be.#v/ +/Y1se]^&=[f(`oASp\:>1s5ޱʡ-齮T7t^N#xQ VR\]0 0 L@H`mQu?%Aܐk#;=s\l0"VqŽN~k޻ڍ.Xy<"흟kFzo[؋hjMy^@O> {EԲ$#,LV/OY>n6b1]NpZn[\MFw)Aa8hOǃ#`)YTܲ y=T|ds{xh+-*1>3h"3D-f*0Rzbʎuܾ׋]˝A"e+p)ѓ _B hcίr e7nnewuW@cǸߢ}`gxڹ)(ә_fwuoA9a]u DO H Qj8yZAtXq^qS缰%jG- Xx "NBS_T#-R!Pht+ (Mw5 "S-[ؘ\_P%`Pd?pؠX<Β8&Ao6?,Ïyζέ 8>nC(w&Y,e + 8-OǁOHB0xjs,;kt-T1Hw45kak$so"L`}h=SE&dPGcځ:V5 1fv8?@$ sr0kQmtXt֭ '>½W96BH)Tev{a ++Qc۩'r;K C ua!8UfU%,$w[~P65C*yߡd,@;(ɘb\-W i=_MC7'cFˢ\IJZJj7P ȹqO1u,?G0sӤ Rd+y춼] Gb֔3g=>}w~[TSB&XV4.o'In=(-u<vOA/XV,%aJ&~1fk0 /eƅP{#iܰ;$J&%U,|@xݿhDb)USVl39OtF|W>=щ]n#6$64k/H*Al1dC +!YXM\]W54kVIڷ&M +s 1#*4UPj%C&o~T~(װ9L]Ҫ|ԅsNzhyCɉ^ժotlIhvZ_sŌO~(b|4tMxaFa/(w»G$őYd iʅ@Ϋ=%7KṔSɮMݬhH #[ܪT3PJ ӈ9U;Cl,:d~hIr.sM&^(;2C?)3g%2iB[KbZ n{)E3 <(<+W~I_P$Zxq:1EoS/=YkBW~#뽣ֽlEٱ +gfԠ?Q'G ^" ϰ9EjL#0#sNdF_S^ HA2l5P[s󞷢A7ay0nDYHri(mC"ջ8LaK,WD}ϻ#=El45ͨ`WY@/k'8-7.DE#besq !}'P"Tt/{3~yL0V8.KHt& $0z +̦{UKќ ʄBGn>и-m_x%rW]u@tB2e}5D9O.9jz\#riGxw!D|u%qto1jQbC)S=PqW?e"yMlOjo&&-cyLpe>2s+?IRW duzLo_;m5PK֛0*M{n"|ʂ-Hiow.% +#Bed۳d`&b{y+5kKT/ޣ-5ߒEEhx]Q>c ~3^ɾMgb툆=xI]Matk}:]rf Ͽ&8JǼGT@O)ubf 3{KPBT"v1MW_gP( ~ : B`D=n\kfS}ZNdeB!W7k63jP\y[]/X|Fu5V&xQQqwd7"U$9t ߱&RvGBw_|=ϸ6a BUFש!2; *G(ns%DäNLtNJub +E!m1-cl7~zp𚬗M7#uXoR"T A %?d1 +4yrSpowJop_OFxk,Q:(y2z4{ VU:6ѪA4;x-CaF?^]1>V:`i%г WĦ_Y 2QB]: +\نAr);_!>g'&:'M%дt1N]߸yۖ˿6r?j=8xMVŨdAl93LY`{%^*z UQ1i3 ~!0" w7.3tzr-Rcs'E2!yؕh[6-N+jv:B9Uy7hKȇױ2Y3BõlJ97m4 c:fgL/ #&hk|Z .7%P`DkxD}lNF@3Ss86qGƵ&)':e gڴv a Aif`Lȉ#KϾ J[[b~/,N|ȤALjE(k}z$9 blY;/PE?!%xf+bdH".X)/ݞzz|_SmxʒvۈE3h%*Z_O!䵇sTmCDK F `RNc+/8͡fePFe)Ҍ-V]8'_2 ,A~A֡Fvz<`eI;yDWg4-sk\(#yщiFVeql+ZQxmbz"<"A x6wD'# ֌޶ cAy£1q?x'[Jl>dR& 5=CO1pGo6?|yHFӗ{:=9X)㿷^|OlĂx dK!6%ka^ Fb۶*8 [Rтx\]h׈hZ:z'VAO\KL95q<+T2 \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc48.dat b/vendor/endroid/qr-code/assets/data/rsc48.dat new file mode 100644 index 000000000..f26e34002 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc48.dat @@ -0,0 +1,49 @@ +=.5D,o|-EΩbhSU;u Aqkc5N=.5D,o|-EΩbhSU;u Aqkc5Nz\y)ojXK_#ZOSЦ٪v7[= +jGEr˳֌u|_tRwO7;M1%_m RG[ F3 QIn6*,z%gϖ@gI=L7YMS'Xok +{enQmvY#-b?:J;GgWڳ B92'v@aiPx3RNV1ڢJ 4 +m }_1afu>!c7QgCqlsTX2(?JCK>Vi^Q0XWUISsd-\1#ߒ%z>?/n8*ewANMɩ"sK2w џ04CqTWxm~BE6۹OG!vnYb$d?i#s3 >0U_qw4b̓$|BnY9樰d&CP~w3]ٮBpc a  +dl0Av[,%2eUBQ6|0`)&[k _ᒹ3(Z<5Y$扔t (<3Vv@9XC_(F<bF*9J|C~^-cys)p{TQ}OD>?L8}fp_:shu[%@^md.ɱ#`hⓨ?W  lxN)-[D9^ִW3V>),:N]6iUv` "KJc(.ST6BcYūRyV5xAO?+ڙkGWjo(sC;T'i07qxݝ}"x.oؑ"d?=ż,ty]$Nf@ZƥR%_)[;{ꈔTn6Q^Y& C BF.Xn1|~C'p?!1ྦྷtG#/[6Jcw 3x>H1lA}sɰ(:x˕CM^i)PY89z#ft1|\:$cFS;M~[A@3 y/RZwRzxк;_m% 3!p5t0D1fr u9f|A(GRXt$lE&aD qtsгP.|zZVWGo$ cԒЈP$s,(\ߦ[I#lWOK;u7ͬj9S]eXL? )Jo\'ugpa킴tN~V/U֎+0K,PyvMN`n.'?D=#CUaL7vƐgnF,T `PÚtoOV's\#ޭ?.DMQ~0IzEeX']8HCxM_l7xDֿ9 UEWs .dKmpx)ZP-k'{j9">&XU7 Ex'DYf1(Ծ߁JO>uS۱^vȏVH*[@$%,Fn:/oV~4(Ia.JDyj`ؽ,PK0gUB<{;tN @6Z5ߑf NBr/' F6^e ;A s`˶{FwMol薨Ys1w?}!#^&,u ]\[s9=D-' "~K!wy {@C/󛹇,78G刕'N%Z2kmrKŶ_6ÒB^ !gݒÆJz$6Z_E:w4&3QRBAhHzyNꟼ-@oܷ +D !lÉZpOIa`•/v?y"f G]j>øa)> +#w*]; y[p`cX$`czXp7lZaN\jU W#5=PqsuѨE_F+ Wߎ N^bR@SwifCcR$;0(q֔ȉnItOY2Ͽہ] S 0<"fR{oU4L u2e!U'HqcasQGrTB/jݥ*CH2i6J ovLVmݶRbZ9!W:[$FJ4~"blotʲNq4\xavrރ+΢ut 3۶ wyRAD#}(JcϗpAn t~įo'BCIR{V}Ei0۴=F\:vMI;P^+,D$#5Mk4.Z&_|-z+yj4<2B\N̪EŊ?OhJ{䎦 g}aKױ"%땃.SQA ce,jt?`zd(KGqi`OZyդM2,9+3$@kʙ*<[ H vb9DLԡ}ՅJue)Ьn lt>x5|eW MY2JR! 1Ɔw\LH_sFʞzAV#Jov 5Q{ lm2L?>(C}w<儌'\ks;]bK)翯p(Aa{ޱmi՟"hW*>,k-N~BbaSWѽF^lq eƩf9| +b4Y,W-t@`<"&X* +miWqg}Pa* t7>kR,; priAFGe._M67=%l뺌r/qBԄ0kPY1߉{3-= btH#ƌ"vAO4<*fۭ^%q?"&S6dLm-x^=a|BpEb5 6w&ivӾ*J,.9K8f$>BgjsY`ψ/bi(̾'F Ib\2<&r!giZwܰyukn_*\f e@ArEP2ێϤ%i HعIŝL>*$15ב0npDK~A @cS,)C{HXP;/&QMFy3Uv +nׇEԗ>/_!5yf +W1k8HLnliSi[r_FpLO^VA`X +M#߹\SN~zFp+ٙmldߔĦK~c_=y?4ӘnUÑ=܌W{6X[@(y,8iM#Z+j!DACc)-"ן|֞({Op.x 5Vm FSkȿmRå 5G| YFe*Tvܒ*#&`C^ҩ;W[j712atbdc +@/M`,xD̤{i}ho2 +.@Y@eukw*gs14qߴrBtH'h9kF>f:p^)BsSz\Q|LƀЉܡiDǝ y'U-h9[VYc a]@!4jv]$WUH='\u^[| `qnaR"6-fqۤ}!u:'i F-MPOƃ3o@[6tKT|E b􎏟/H^FYδD. 6CN<Ɇ"kђ]}Mm`2uzt8AıNK=l-Zc+sQ +jIhD㓳uDJS*7\/@Ɓ +GX~!#,P7[X_pɄ<ʯ~/Ӛ( D=]W3^13CU(d,*X.7rVf] A-H/T =}[]ژYxr)GT~B bI({& wfdagxͶm r_a=;REZ4^ORh[_1S=ؒ?”pn0-.٢978| +Mqj"u? @U#da B+qc%ZҒDFXfn0 ă9kV՜)HDbUk]2&Oso !8gqMF1}_E#|1.I9SpH-nXb D7.3ߏjMYeyd:~| 0Px,N}vyɐ6]FS9|!jB(폢ʳ ِԖRcCP.&G$ҷ#DeOw=[T+K%|Xtz8j腇ʾ ogr^H4ߥNiZ¦gq5:O0r =2ītds\$;i1l"&jְ`_H%ǼzhV7w}[h)XGOyZ]x"DϟL{T%8Ү7(/ pc"XȨNi`-wh>WU=yà§T n3)e|֤]Xyv҂&$QTu%iw;&+иKp [)1-#%c\lnzJGiQ^턵`֠bf80Z,Czw^씐(}vOӷTy|Q#FG'A/1) O\m# <F'gD QC)qӞhxT$GJUu õg3):8 Eχ%J1S&hxH/ꯖiO63;2I~DL릟liȘZz£!ѡ +4#2)j@l_ȁd~@Y-q5W +Cva%ce]9hbtTEYU?Lg aTX\rp$H|ׄ> ^P& {GDa չpHmNb(Of[UaN ĸdx9LBQ=Gw}>60 ܾT8\Ć'>+b9 TVE-tG(6KUwq.Qaʀɂ䅊dUC}J o '|TH bj?,'LS;k]Uv 4xdt~rYwؼ9g q`G܇()s;{IXRxj0h٣]Џ5zTh7@S"2+}t'N  aZq۠~mA8 \g]62nJbSGu?EA[PӑwrvgKmRqם{r%ùz."t6[;sRT@du3or ~f}Υ$&{L76䱺EFsJ|= ܈J(n8:) $Q`ꖅ- G9#MCy^8&]Ѱۣ v^mL[q<9*?A!f1ܳ3|2^B-^XA/ԩk)`4 У䖧lI؄dzOaJ87]BQkj[̣4.b'p6-ط x54"WXգ{hu,y +8BkbevT?~]MQ"Il/QiB}K-`4z +w85gmxFZk?2r󣊛%R_G)$Еn +-}|4ڛW5;$Yb./>L|07侌)OeT:*>QլK1XOkzG$/ #BgZ"PypIHEIw1_]"ŚF)%o3K FV#Z3k8/!ڷħ=.zT>&Kc@Nlhn޺\C0Vm/ciOȥ5Qɖ qz]:k~ˁh1@΂ Es َp[cn\"e=vV{Q&I-ܪś?zlM Pʮi`){2+hȈ'Il4 +;kOXh8U{NH4:yDfC )\zb+9`m _ )Y9 fV}i=J:pL)*nD%E7k0uK̘a·]߭bޟ{m/dkW&C;b<2VX:?t9K}U +l^TC~hy=*4x{vT MF:W'p -P?va"J\TDV ҀI8 ROA$'13.bCF1*+ŇJkh:ЭiXAtigM^R\Q +Ȭ͜%4ަɟ#Ah.hs:2.˓d6I5okXz0$rfZ^M=4+Upm8Ï , JdT' 0e4xL@ò`yTxHN{gl#w[>5! QKesLHEjzM:=5} +Wtle_׹k\9]r/mj$܄w'} -QiI"#,37ybϒP+pGN$"ס|U>O]8$lj7,YZ1"G=xsq:f6Eһ.9wC5d nBGΰ]>`VKAUIyh6L5j-gzeoBō;%$ +Xr7ڍ-+YoSpnx4WKM8 +{ы%2*]fL͍ɀimqS{`*iVDjc,=y͋Q!-(8~$/, jڻ0h~strKH6lB2=% !LqxI,߳4u!@1;*?g +˦HPtŎ6 $B1_*3p2@0n`zV& +c)|.:us믋N`P"3/5td?g7Q n 9 -FZOuK/DŽc(x*>CȤ7vaSWz+5ԏ"!֕ʅC/$eͱnvH<%uCȱgՖ1^3sa؊\|?X/p!:{4%a&xJ95ꆣ6O1bf­ ~^B&tk>F_yV'AB0(xD:2i何M yhJ=Lrj[lsbke̯љGm}o Le㄁Sr+"5KӐuwa ²ИY?rUrZ YGo Ӊ^qaPTS|U$(nw:G›7,z~ Y2dkBtM5Iɯ35/-VjյDq>Bѕ7c^HS0*-w=&z%nڏFǴ'W/( K+pu(uY%H דbTfdCA,`:"eˬL.}>o0+Rk̮ʤڲ4P &d5 QK=b{!R\atC EwD3 f&^j ~n)$ \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc50.dat b/vendor/endroid/qr-code/assets/data/rsc50.dat new file mode 100644 index 000000000..c3a84e51e --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc50.dat @@ -0,0 +1,51 @@ +3:ǟd$f.m3:ǟd$f.mft#Y2%Y}H#'Y\}}xw'>a3^z|3SUbnWNT=+O=l7r7,D!ߤqGB d,sc?;F"dJ F&NS=Lcymc+xe +OQ3³HcYqCYYwt'[JT[!"Qy UP ϔu_ 1f,;HEЄ)"0n-Xq$nQ0&TT$$i{&Fh+hIA%Mf`!jܒD /҄[pz@tUiBhiUO:i:_K1O=<+k=Z_P/"Qw)pBn)y ^ nsnZuXm:{iK>s<kv0ɇgx0n&vh80ޜUI:hFWlQё򈦍5|Ϧz%.V%/KV˞<$@:+PFPjF^ HP *N&<8qf.m&{Ʋ{2&⫆NݨB8DBɸ  3 z]!6W!z)V0ۢoC@@c5Cky@by55qXkv?07w#U,9L"+StY>vot]"ZýMRD`ZKHܢ`Lg>HHoL(yCVs9W4!=<Ƹ,/<*NNSѰ2GD}G4 7WJEB &GԹ9&}&^I*I} סDp])J\=)mcS$C_)C&$ +ހ?В׼T> (w[(Ǟtt[[b)5+zxVz $U95p[np +5@pŒQ^b4iEh=cQ$f^D49R!9]R9ܴit/Җ;/|xU,m{fPh8w蛓lPujڛ!l ljvʸ<}ĸ ,(8,2``Lp`Sˡ%tWM]%( &Zsyo +R(osfM-}-r#MHb'ϡ.? + QjQ +-J\#2J^,!Y|j#)[[6x3Еw:[w3C3eέi(C|LxHtgV)5O y)>m@@oTm?$׉u$Lox +{Q]l,NlۦNN恳 p\LK/c =KydL .K.y7y#sq5kMq7p9z5)@ӌȿ?x$":ULS؇X{Kmo>+Q-fY+,o#M[#Bk}lB7Rt2H%=scgCD@)Qt? `Y޳I]jɆaKjj.?~'= `n(]t"bU"K-"hڊWK yL;@LhF + XMG߁r#٘#DV|D[d;̐:{?GE{?:l{ŧj IlA<!mdg*62k}2ٖYGM2|M CPrǮlTKb O_E(u E}_R ⹦\*ϸG*l h%5BkzxmkX^xTk {_}dgh2Hx| eɖ:]5|"zdz]0]"b!Č0pZ@9n) _ LoWr sWLL 4+o*qCT:ݒ@ +߮ÕJv2] |5l9j"\_,R*zR1*,HR/191L˅H~(>9eDl N}ʡ˾!``ցp~ 62C6jD&|IPPI!a1Rj!Vua]LF!U:>=I c͒ZcL{Hrjඍ0WˍVj9;9ˢ/%hǡzƢHq2FB0mŬB3{mr]B{M{ wlPPMhgY_rBr4er4ѥu}^&1v^ѫ\]cGD[WtqD~n0>znV ̇ډ/>\ X?-̠+yp+;y+Bk +mxmKX*0 ?Virʼnh?mIωlhhdPI7WjG^Pp Xd&_#߽_J_I9轮*8A8JPY C.ڞZbe?bkZX mbmF& 8QRT4L$P"k̚Z,Z""WAFK =qN 0_T%e0y;t> 8;4>OyKJ;ԼfX}QBfT \c~&:8Z?O?EFd.;X1.E BoPMBH2M#\Bы Ma٫3  ι4/:FR7 <*lf7Itff1ʳQGP hè%m"֟.=i.c~yx-iFάR]8j]eR|ڀ=]K%~HH.ksH/UD4tyѦװ$mbm?̤$kmPk?B?EJFIsFqBۖ$|V +Z$̲VX0F*$iF.AnE&# +P9ARָ|ALY3sAdwI}m/J}Mzu#a2}2u6u a)R6~@MbkB߃k4bԀŲ^68 l] +K+{6±\}~ Nz7xg>훼}_Rd䫎E,dd`l*,a-<1¥<73-P2DٱĪD2і(ZD(Щ $Ӗ@v3CЁ|/9Xޚ9V <? _LKnfv?k;I@W竚.WF-F..+7<Qyši;u̴]s 6C7 @ߞC;cbu g$kbZV:.^Zgv3=t~ՎsS~WtؗqSKS5@<0'xBKȯ?ңCT'TspEqT_q:E#iFi ?B+T)Ul dWKud1=W-d=8=o- +gEg8+AVPRaU ||׍`/.3ب=NJyP=.@ +KM=K@@qoQ +kTm2TWI/6G"Y!Aj`j!+~ѾSeÀ/$'Jj6/?ְ"ۨc%@%ǣSQc +:'1򛬾Dtr6t~wD/btnwLw\mCv30%HL'W@#d-ʏ1t-jDȏ`M)Dĩ2Bw2,`#WE$=bg-c- +Ng<-2 + +B4GmJԍrA25R '$wޮ殘heVT9t9cwA "/@(%CHH((TCK\5XwLskA=O.;7O.I=d(O*j +rԿD +*s'/e{"?ZUmdN픙UU ,du=OTxń{" iX5Tm +bTXQa^brb&( _:P|_gr{MzthҴ pҝ)>@ 7nȰ{$_a{B8Ald,4lԱLZ=_iFM_Ei*&_,&^7I* K`^}k:L$oS*go+#q<;BoqqbB{E k,V @ضoG@ +ͥ+-m߳b{b=-A8݌6B}w6 }t(e?6  |zeƽ9YoXp.ĝdP.Ysf-Q_QoN;Isq`G4 rv3rY^eJ й_ דYg5*KO;K;;QY‘p4(Fgc][d`ڗEWf+o@=;+ؠs?4"c_On+$^Kh&:_&{F:hE&AEFuFO!lf7.N7u2Ke βUi*WU{hvE?]U?Ib$?{N^7{W߿S\! [~:@ WÌ +Lc@5CwpCWShKx1+fL;gfs;*+7R`۴"(D cvJ/`v|pvh9|eve99"%˄)%̨_y٧mn mԛ#uI8€#_JL3(4Ytp6Y(5~mÞ~66k5;e\vb\ۊy-uva)|a ӷ3 aeW9$1H[ eqC"8 %.dFK ¯KIKfo@ +{ohI^*g8d7 l8d I8I/N1o4~3tnqxTqgn{q&b{G:;:-G`NJӐac\|C''||X"Fw@x ЛM(#JD(Y5#/M\$(zұ'\y eZ !\ҊSFLQ BT=ߠpfxX=+= :́Ep +!4w +ʤzߡ߫MJ{ɐ-( + ;ͽ<7o;4oNo4BT#P6N +[\ևa$x̶ׂ̢b:%dp*b{hBTA7,A7l*A*ҏ#4 +Yٛ4I|SYi~Rk%ZK%:%f >c0V:b†4S}M(M~}YzDeDՕZ\za]a)cQCpNQg2Xps3QsXXԥ_ř17'*^Ő V6^J]U9"a]R!R2zݯmO-11~-,C1D#J)**¼:uI^%j^I3I,N!MN3*w|.ɠ޿Lh"h:"?7ihi=d7+fm.u+º94ᑸ6442(}[5}N٭/&cdp#kXԃXk +^ƃG|^hI-QG&}P߶#!V!j9!᳨@Hõ6(Gw (ӱWwHڏ%;~UHy +ڠ~~>y65i."6`'mx esx_eqמ0lx0k8?iW 5k"6*1HYHy`TH)[qS.\6U$z~L@KL>=2=TMg1mbF} 8-LFr:qk1mqs +u +m4mE & fa&o4ŏ2fHorݑ6[J56 2~ =^ Fddlg<Rs &Ysl,:WUxX\$œXTZx_XZZhE_M" ͦp:>5wģ{&ɳY[M6X'6L[xS{S'@'vxs|ZE@K؝yV_":9i:?l"1:7&.;KK$& je1Ca' W !ܸ%w jȇn|+ec()ycKX>ck>0TXZxbWxns50fqpx5o ؛Ex +x?m_@ +fZ +idI Od1PPOOHA1-+/-_f iq +*Of A*O8*Rt쬟G#кRa!<^G +rMYѡ)2rGxӁ2~2 06ua~bh>sT,QsoM+gsg B&Z_73;brv(C}[K)Ck\[>&CZ\ \VEnx_ vq JG1!1R~j@tjYy/~6|⁇օu(ln9!v]]!!H=:ôt\a΅0"rFkf1NǑfRAY(!GY%}#JC#!r]fz_ 33j9x`NᩖCz9@|wSSЂwt0Sye5n0gva${v~yz.p~[ن(˨N!$.!oUtFcgU~@4T + +QJkTg +kk{BYE?^-s l=7u?& D^uP&JuP P*AOj1#A 3$׹9Venzvףv%U`WO\q?([z \v+n5\zPiT $cCTom0X} ea]vezia\UexdUİܣC'xؙaCDҰUjUOĨ?="U"L- .=P@tRܝ/Hi+tH/%Ĥt tCyO)[؞) =A {u uw 'RU|n!*(}'S4!*M L[ S 6h ]iׇq>n 0'%OH. >sG>>pos,Xh#ص +C՗TLXLCCnTk$o RIrJ26Dn2JɪvSa' ]|VH?|S tH9ަ]TVF]x9v 7UEəXi!^׏| |"R\a|%aRvR ZH`ڴ`v!5%ì qއ׎0eV7WVZO"{ą5zZ%:Ҧ}ϣ%1`%/`>Q%y//sL>d)SS-?psllIP8~l8ǻ94gruÑ- ҡa?·WΝިW&H.L<eڜhY6q\5';5e'\C5eeZU9i +)jeK'×ЧgDŽpԗ.y p5T0U5.)F;=v >WhA E:f ʔ7o;g;?=8EG *dN\%a*H]!`Ѭ/YL]z%jwTev )?5 :5vqv?h>Pqk9#nj \u3|y\'3) F\ƞƭV΢U%կ[9ƺ3wV[i[):zvV]~h]D)ƾ14glFI*AIl˽AA!-ۡʓ195V HLtLtqLꌞB qn\㵋n5d؎QOW38`K.cWQ#. +cOcG+gQNX餜OPfmi޾Zpg qAsgT fpo goTTߥE$&OmN45xŇh{Bb8jϲ8 *k#`a/S>Cdc>L).S>);)pq-$0zmZ0;giS ̜0Zku0 +qXXԙ&2UPdoi}O{gݟSG˺wGHG(w3n1H}Ê|)9%"7%U;UKꈠ>+ $>槊d)Knv$m:$PbRIb::_PlOryCW& Wħ̈́4WgdͶ Qqr Udy7\,E^3޽^[9  ӽ]9ADJӆeqZfcþI;= c.} < 2s +bXnJX'Za 3['a5a9v΂RҎ65]y0J-쁢ۅ`>쨬S6Sw})'9qwڪ|~Ѫ~/Hk~') nemӅcYB*ُ<11t! !(~twD#S[DRYĦOButכu}"ƀjYUMЖQ"m,q7K7+K8OD74O+A+ +(-߲AQ1Uwb%V̘vQ0vTVnxFxmlh mU +ŢD!Xnn{Vp:nhVVPZ?:ߵ"yI")gbX-3^_P^]_Ru^uARz1,7%,6aAk; < iI6^98 ϓ88N%Re2ڻA[E>UGhbu|_auDPisE2 OT}xb{EbBBE2EP]u[F92M^<4r!15wrr}YDJ RJMǺXfNK-|NAf,SNY,jrMݤ(2lj`6Sڵ%ţ%i";+Fc.;8yopyFEI"<Cj}8EDN,βu>I,#5k=s>kߤ!3 #"_$fi:G2Ffun뒛Lo)5Oof|DŏxpX(?O&BO/8te_dJGB,|cU`efO)Jl&N?"*y|+eUYXFjֳz|;֣UBf@)FDžHt*<0c20^›qy7޴j҉Af;P߮P\ɥrV-Ϧ!2C/ +3"wJ};UnUWJn0xع>sFW2sxEnB8mkêZrZWi&ٶ}p; >@{ isN/paW^Q ִ.__tS!'z%s +R!>6%(|#G.D! DFC!K`͉a΍5n +I`!5% +AeA4xܐt^J"crᴄStXvc 43N^N`^@GwuH xwЯkV@^H֘ KKq3+aGRihTZ?<+_ 2GzhlHq閨x>x>rI#y@K}& +I@ +>3&=o P}}W .y玲e  +!5HۂPErA%r^"2AzN̓l*[( +2jz+H1Ap[^S! +EwKw75;HQ&!`̃i4H=>&/ߝqol\lNe/VߋRN5t/iauMoؗiq2i=Pq Xs `’l*DʸvX}`kq#lQ=ԃ҂ffe P%CߩEYשWP]CI|u۽zccxps,:ʩ{UopF{HWYIixzvA$q +W Z_UQBqd_^ ,f D$4v]/ڐtNCI3 3잎Wܝa)=$;`o|!%d?$8apIcmwOma/o4kNl1O4) /mNRcC]䴮EҿL]q9v70|y +_0q^ৣ]:y׮uI슱3=c栬i1ל3H."OLim/I\"8 +o"*BN?J0+ +B|lOJ"PF\aVG0$#[^~ [C՚m9.eGakB-*Be݇j*})?'BU[jG-9J +xTkZL?3whSJXSyL 3̇ n[\=ʂh!=Ѽ;D8Ku<8;+=1h}fr:)>,?k,5c_p"ˉ+O.ꐥC+4oӏ7-"%ڙ +ݙ hY_ +M*Jpj17rN@|rG#04]cb#Mr?]ND(7;M|6E|F +waLcVq*:U +|fLz6.އḾ&ǐ(gs<d,+&,5s#ɬf 3s\,a{9QGk1*'G5{&%1BsjX]v޳6Pu)B&V6 $)8Ɓ^HXJDdwI3ka;TP,dVSkbM +Br3$3?ci o(CzmC +cIBZo|3OxeɔrgnjvLJML(Bˍ(hqz|L^'2 gLU1ZLP>cM{m_Z;lPw`c +@L {.U+啟؝?!^.K Oj ^ҟK1 w,?#7ޭ&,ݓU},>AD'}V͎ڴ,!&3dz C8Omə9yTCm콰.4Fآzg3S +?SBCL*KthK7CX*SshE +˳c̵?c8@=JO>_?ͳO*8۠c_굫gosޑZSlthcSQql^@yg +X mw[tO"QK [qO")C í\y7f$]>" $訚\U ][]H[m.Ew .4X[SHh5 XX꡹Y;l=B^f`l%峺'OJW$^W +=7$휆ђ0f-!= $˫fk +,{!R0Rqܜ$ 6i;}֟'cxV;dw\ӯ+I'ICA5RzHvGޗуB"AJ~Hp #ੱ"+LILn,U1}Qa8} Q?nŽӘCC,q{^h֜b# *h{R^M#Ɔ>FkF+6k3bͺT,8[C󓴉kJ,+>uuAcCrn,`$Ѿ`%kS[#tAeY$p pRX u.F?WBXϲut.-= 6ABG7O 'fz]E& +b,%f\DU&!^u%jztgz$t +FB8 /?i>- FJs8tu+?ycjaDpaQDT6~`(VU&Sg6؞[D&@ddgAƉ~sݜbY3~Egϫ@Uk;k`H;ѷ(+76]FKu')r]g;\u-'U֭nn"$b r>ٷUdk&$d8 6>y"; +, +ZT1 (TR~9N.ԎZr(/5BݵM54jH1 nç^e>W\J3QT11̬ۛU Mut.a$έ=|.b{4*4uMD*Ė,NLx^|8wMU|vN%x*wuj{hn;;as2FE`[kh-/s 2FA[~&P/nv>Ul>0gUAxŢ" +Ƶ7Uш +:0F|l91˜09T.t4/l\0bIrIl3(r3\K?*Ic(~bw)L=P +8x*XeV.o1LuX +j FE)?1w6qs6b[7ۊ(UεC=uT076 pUЅ:)]fA0X_rbT20.N _(joLJb=K2]ϥJ:Ƿȣ q\ҴSр?\7{qRҘJ]Űy{yGlM +R7Lc 3o7AlH +4Rpy sg3H4#ȋ5@^)i YnȦTqH ef%v?qX4ȵ8?{=ݚqeQ4 ШP)l +7b<%-e@)Ib%KڨrsfH %f~-AP7< }5چƒ-f , ʏ5&ڌu.ײQ4CTzv+ZTQ_41ż07홻1kK=Y:P6k7P=[Nd6Ο6V_C^KV I0r);͸rV{;xC?6#˘˪bi|ӚQ ھ7vؠ?Q$\V7#)UGh)75yu;SCF:dUr;f75b)F@qہ'm~%B'E\C@[WU8%@ͼ#b'XW)~Fn8GYE+ePВ\=0s+2eזAm5dxYMLX;[8X km +|*N96muX2*;B9LSߢr٧1+ȚhqG+B1 + TYfȹ@p]ٞ02}$/r#: +/g}\hYw6:fohXghRMj{w?irg|Mv*whǹEXP eYi~T/;Y]nE"T+a9;{sz5~ސu2D`۵D~Tuƾ`} sq2:w~&Ƨp]z[ |y<~{TpA]i9wK<2ʀwTQwk{HLD6棲) +L^x'wPiȲߏ2$?"C3W}'=ƙ'5C2='@+A"U2nޢs; +@h`UI2s-' 88 ID6>=˞A8y9DR>? +Q_VWNjW玡3 +D3KW*FODV9 5^c;8$NmVoQc:mBPdUoZ5hiʮ3(+]s(qXb"E]opw(_@~ܙSE-Cp4?mZ7˼{#4iubp&EC'!X :2%F!T> 0׼3%6U'Fi}/afVM%aۡV-5˕*w1i|7VlAf-Uui%XpmGWi_Ł;uٔXV G|gY^gRwQo萷ǻRMgv3Ʉi o-i6X:4HoaJe6Fi/{ H.юDJNqTo3KpIƎNtTMX؀Ig.kǤ{\~yw"Iy+G\mZzlCǎnIk|Q]}!F&m:4GQP}V,d÷4_kI9NkLWGX{J=!L-s>< BJ9&|-v&](S}E-}6(0S & `MHp2^~K|Z錔pV~3MK,Y;oYT(Dk!e+WD +YEc/$,mˆ‹4%8l5PL4.l!5>]Lm9'_ >9dVLpm1FWߨ9h'"•<*뻂-&4%mqM,&ϗf}7m΃K.MxFRb +9F˚duhݑ +I]u dFݿbl8xvEvsPVnlqe N$qsR&vOZNR+ӭvxs +tăP/Z?vfMt͒PZmLRG DmH :@a|'s LOHep@l|s D vOGٸ赩 [׾@A'6˄s~T')`X +"bK'S&[WP>;Kr'<\Iq5P4K6IӃ^jwjx=! QwFZxPW`j +9Q^ ]+g/ +U˅x5$ߖ7UA/y~ۥ.x%]ߦ*t>M du-xcQ5nOR k}Q-6&$ϥOq>lbmRt Z 3Z?kRYpx$O G'?PY:Z`mNE{܌!{ԨGHO7~zE2rS*7z2I{(,ASa%O85*%<"V:Ⰲk5:&7%#U + Wa 22Lcj +?N1\[T ࢇt?X\ۅT d7Ea7\e1E9_դ2{^z2|ղEn88),ɴ#Yԥ!`U,Yô:\!Up5=:=T|:#h!f}#%:T5z& +&7P +[gVPrҏ`x +7aGVL##WwvL1RyZ]*N\رܣ]vgZʻq%C`F +,uv,rnuҢUy6!/W306F]yuz۩r% W +X))޶nNTEknAEY<+2Ok.RJJ K'>@!p:zvX:kzܦHXpO{O +ɸ{Y&_MNuMYn_aп{3 +ܓ^pe@*@RWh$&"sY&u/]WA<(ldYeEDEO~ Лwj\7oQ 4tj0LJYOrםO^4S^,Lya4)5GN𑺀 9ZY>֨m;G4Ҁ,v(ZO[=[\?oH_]"0\O"h?r*c_DžB0TԷTKTib`BK(|hI .Ԑ[bIS|Ki2f<[ZQQ9` OPǖ{FdM4JՃ LO!MA*Zb+bE/+og[9A\EHAgG9Q+z<\gg]4ܕӉ#2Ҥl93j1OՆ# ѶhT}h(6T1XQpq A]1՜JmT9]mmF{YDow*=;^{-*Ros^Fvv%d.iZ^@.Od +)giL%{ +^$sdjsrd /\ٺ}\7dSRPY*$1||`o9ΪWk6wYD_9s.Wwn +t`?C_1yy̷؆QN1iEgدE* 8hd) ; RK;zpTʬ\bcׅR0~bPyl*"ZMbgyib "MghlG"Yl%'Ķ*n P8wcG z':*`n,l@ઽtRc݌>鰞#xra(yİ+C2VD т`m 3[+YĨd`\@P+ ѵzdBʽ}Z/U) JtH)O;t }]BWsŔ/ts[ +'+gue~!n +(2sׁ-4eW~8^ ljf- |^jqDx 18믝}i[_ؚ]n>@fEn,h?>e[=f}C"iCBOcNՌ"p4Yv~ml7А*> 4rʞA3]L˰rwGZ*Y=F-NjIu-]S)8<anuϭ]~(-0HI'nF l mbH+qXAIBwތb^H}AR iRWnjkvtovnjk!Rs" coSuK OZX +<Krங^?Ϡ9,wzq`W9VQd1jȅqJHhH{tFd9eOact&XNu9-cvJSSvIpT +rlEOGdT"vWr`VVڑ4ԔC)A=SF += )AQ>&p`uYϣY36Sϝ0K!];bV)5s6V$0- !b)3@su\~\<-~QtԈHǙ0L21op~;b>ooຯ!`dH'^FGMt8^ϸ'Glt4jjYXb%>:  k> $a0Yz4!eQe-ФS%~:$uyTCГo:Š@u!`a?`/{ah +\d653>/׉5 +"]a#a +7lHYVg? 7(%vp:9DWlj}k`F3mS,_4%%ak sĥv¸,["Fvi@c 1C+kǚ%50#7])?k`s_Y`Oku-f Eo1z#罎p۸\晶[`Ԙty*Jӟ`Vfe~r 4RxxسPAL&Q9VdeKؾ9 QM*l[x7C0fVދ;"Z`@!qM8\=ZQ|soƋLW‚Æ$˅%oG:,g Gq!jiTl򣟳}PCxL *҅$əLQirn[__WZ?C%#r΀L+Rw%=$xчm1'oS9kkD y.6"gkb._H&{hrS F^Hc܂3O23Et~:7lD&Uj8}+w#:8)yu{1ei)r&QG8!}@wH_656n/dSC@` Yw2qUJ _thn!LoL8VD=\5_p};pY^(wo!fCVGG5ɝG@v XRqAW0&<M$yl*qɎ\ !2EZ_8IPe:Jb.7tO)5pHgugÖ"C SFN@PW, yy쬄ɤ,ťԭRF N\ϕz>-Vo#9Z„p[Gj$&$( PP|U֧GmɕH8NoeVIQƹ/L8w7z\=Han>b,6 I k ':Rݾ 0ǿ_s)~,Z#C^|^d۴dxh&j5}Vysn0?ZJ>Ddz)(^U\wSl>Kr}BR5>D:(Y=Mti\Å@ñ)`~Ҋؕ.dFrƠΐ.!GAv/HaP)1 #DӖ ;VݞRy_6SWKuZ> ڿ77YV`P҃+ 8o1N\YgjjFa?7׈>ߊz`{grjJ}Mc,=a-KEȪu ѝwC*̹@#Kjn{@6D;7JէɺOд26Z-ɲՊbA!Ց+RMGL("Qf/KsƯwk{< w +? NB2qMM&qlvyäO;@+8NA'Zf5_$͍WÐ  +]_|"i 1f>EڦXshJJՌyX;7є6M9";}1H&i]L_lJ͊[‘ q7ݕWmXDA!]+@bV֓)J,jb(_cTR [o Um-&EŬ+SiHx4`FnR~)Ie]ͅ59["Z1$MYbFgmm~LUA\oU-!:1q~8z­Ƶ6/qC-U4T,# ̳ף6]8hϗ1QVZwFb ]hcb}'ܶg_ӬD6b81n.4 2߆響ʥf](K:Nd~y~J!:~ J FcV 4(JzHmbNަr֭.YO9Jcaz-GAp迳FM }A3o'94P0q>@2\<*lSDi}<!)\L&A=uq䟦6KKI{_LW(:TXWf`6?In t hCWQfe84( edm*ftn؈ LŪpVxdm;Q p7m^z-&g.F1H1 +)F7<,t0:pRWabRL+pBOwkeK[ɾljl;-r#Y{s%TIw0fXK{4]Pީt^Ȧ +%d׫u,ѷ04q8a>E6Bޘ*!5 Bݖ_;B).Nx಼:P-2AC*B) {x;ǔ#i!՞*u2U8u0̣:y{eŜ<ﱯI1>3"Wq,Hv?.> +FYGtZEӪ,П5=K竆LO%_|yGL9%ģ|;(_j{'Kّ/(鰤`ULx ""HtRZ`g>#iN?- zsP#Tnh{teő ]>,T +Bd]3Ӵ0pIU!gt\o=4on6[UuK\l%0[l]"X MWn2͟V3~:*gQRj=I0,OM%[QΓ{1D@$#*X3Wu=Q[mtEfW[`SL}%To:242_EU(X ,髗WGE72|Z FrඎH!LHC- 7Ǟa.1C~:hd2|I-$\&R=PIeY[){A㽠;=%IE3w6Se4ڏ7/p O]2 \r5 y_VO5#M` W+^ ](nm(Aʬ{I%"y&I|'jy| E74tP(z +5Ҹ?2k靛ML hf4c&HG +ٹ󄕱 1uW/;[[.=R ̓7\{ ]=\B87^/  RbY@FM;j|sB<_IF;Wk<ÞpPjDd3J3l1"gv8!k3:1lk[M9!eɖ|"c(nCn]7}>3ݢ*@/7ٲ2* p͓B~+ D뮹%q]2끙V=%2p:7bm(.$!-c/Q?#ڵ±a&.n#]T_"0Vی)§*~n? | Kk)i; Ԕ}Xz86"ZI_IH/G:_JM"@IQ/!'x+?cų +DX@ 'ATŅoeFO} &.C2 d}oŇÚiALWe":N('H{ߟS{jɰHc·gW #Zn_ZmyUў$v.u< Vp?UkϜNỸj)Hg}&'(mI^LWMȭbLB<^?Y.d#~',`c}'Q=;(eA${'DAҭ@bK.|Q&aДcj!ix$mտ4aE!ԌD)0Are,i[;tTT;+!u) vn5lrD+vbALI!{ؔ -pJXq8Y"- ~Ƽ|>e;M +ɮR?4Gn7/gq6?/<.BŹV ;RXó]9yqXκCnӣ9 cFؒlQOzss0 3Py;Mƨ/8(Q:32%CZLE*VKh..5 fNxi؍ |5ЍFإ7[O]mv=u?e>i/×RʧѺayjr!DɴbH$ ڟK0j;BJf_ʺ6ϒ2bN9pPӐmUU +ۥ}͘Â/7ުsZyE*B߃tb#p;GwGőa# ?kjA)qwZhͷX"5kFE{[:l0pU33 TIc+}fA~ +h Jf6Ȗ>u_,^Tۧw=-=Cb_"QqA +NGxvhIi``r$^/Q-6fmWQɀȈ)¨ I$ۻ3rG]b-JYE`1GƏHY) +q&[3FA6;\nYRqs ZA qDrR'Q`-3MXaKГ+O)hKߧTIO^u-@m +yzP#MDFE=0MF]9D5%X̘UdUE_kuك)_mJuYѡ線G?-AB/>/2Y.BU6z~9!)qYvV~ " +J:.Ƃ}` Sf:8H$cU TNSKcF# ' (fxU^QߋMWh(qHbxNUV(o>sh~kݭ^ $rrw+" .8谓Hfbw8/LWلB3M+FFqIN1>m +ޔfqc ;i +},)AΥRFE訆{["~A]{XO1Ma$W4HZ[f9#M}c{  _}9ְk ^۵c$|u+o˓R]-V0 Go.V^N-Y>xrTl|c&wqOaaAiGM(x<&Xlik&r9Ij7mСcE[lpb;a\hd#caW{O;P 鯛tM ze.s[Σ0jLR :re C%0E+3?9@fP)<G\:)-0k'v{=᷃|(Cޟ *n74ijTA:wq@BqVrZ!K]c{!@Qf'<NrWh,I`,gZJ݁OoPnTf߉ڲ +VJUN~< |d2xTئx8BR/a=Lz#Ql[$ژT9G b*C3, ܳ](RoȱNV\:V%=GO8Pto#OS̗le~( U mN泡H&ls|*d,ݥ30e^i`x7: +R4e=gW2!>pChGPKT_o : ߗIV"17_C_e3Ǡ}|T'2?x?%ۯ4:{8MvG> onUڼZ-2L\sYbqb4ݗm%} =h{R˸-h|CEw! +nvR?nxX`t&ĉ.Ϲ՘YVʖ?=Ǐacv+g-w޵#1ϊS4[1W{;jy<3 U]CdOZMF,J`̰$WghiwU&O6%EmEw1YT*)r +SłNV$w<ljGׇQ'J$yȧIӳK5X$sagͽ`hp|l-7-Th\O/&]jd؁1&!v/@QS2?aqM0Bj?/u@21iv +R8Y2\x_%kAV&9f0E9-z3 S9l5Ȕ%\K/p>peE Xma־^xz 7|yetZdT*REv ++ +$}frh[H%ͨ Hq<vֿU}d"T,u5FS>B!Td#]p`M[t{O8(E5"I2%6 LK QI Áv͙GYRx8 !?]W"WҹxC钫b|ofDXo/~\|Վ,[y x`AcQc'}@&43gwP`$rwBb@jѣO,xDhjX + s|?IX6#[]jzOKۑ7JYm0~ Rma<(7JʹaSЧfAwc0*>s>rJ[OvPN˯?o4^P}U2>AK +.{D)DJ_.r9s[~e+Zݔц[0Iz/WY7t褴.g|F6Ҝ~Z6_F,7M+?Eߥ텴QyM:3LeIMX`0 &찜*׹E |X<m,6Ⱥf ua`Sg9]Bs5߸zh=agz5&)9Yz^~ 3( }v8l'oJ3u`Da[Wg )d#fCtTC b@MYnZK^f]MSOmjkX/>ރsJ΢!z=?ے`XJɁ;+b? +QHF%T]cA0fk +/x˨4$1<'+4wjpR?}/\ub9a9[g.7Yz)-"9c)k}W0Jg{ tdh,d_pkBc"#e#В"XT, Hx_CfLVo2Z*P@XK3?wUs4%3mndK_Eou/*qBShO/@3XǦi@dDFMaT\ ӗPEPKZ5nq!]w\ %b t3e]ICd1'8Z(H L zƀbApq VS5ߚ'HLV䒹 @"objK͞ʲӶ,R{g]vz7J]_Kfg#SlI6׃hn=^dي3'i^Ev۔h_#lܕJڠ;[򃴑wYw5da<qj徉uSjFc"gqO9VA:y*P*8y J]%z,ö䘱wz?c^>LNΆSH[W)%PE9JDxY?޼-JCThm=ÙP@~B +B:hZbHSr\V|&Cx,0nvXNhҬ ް T{ }(09}Όqi!bk1DK~ZB 5yt?JFd)̸%AZeѧh3pY °3؀94$TlUSO$j;ackѤvu2*eeĈX&p;ĭq)<bt`ij +4\U.T5F2lΖ;k Qg nXC3OA﬒Ƅ=mth6dJ.lwUzL88KSoԟECP꣖FXlu5  2e I쵖 +ޢ*a9ҧ@A'R\LVv+B] 6r5{̭+rK ˂}znmP +sێq>*z~yqp`7Q;GQx|mL*Q1NUԯ ۊnh yPj)͹m~d'+.+U's$l6m +~i>m2ܗvez/0o7b*^vc !+-%]OrZkR(7Z *3t|ymY+%^C}Av'?v\zo6Gn@?zw pn; =^ϙ]cIJ" |pg9Be-A)w|-e:@y>囜/R;;vKoQMxᾍi v).qx&+;! 9ff p \*NXEHsך.B`pL=?sٶ8wV0O䕉ꦓ^nyUdsT<7 ;,'4iV@AAo:h %#2D̚f\_t +Bht-m_G48WѢ obՁ2JyE]o6d /z;J4dt6n%mP\HByZ^~LA%j=[FQrLb=/&'gC^A$GTuauF 4}we SL,\FSͺu 2"M#*.DU `(C(c@1_8`+zӔWM@{$&+rI҈ Dd1}m5]ORSxގطp 85s!grgD;dVՈukHƢqGԛ5 ڎ#;9belsK*ĹL~(*Utym.J xasEΘN>Kޥwÿ%Tʿ` ÒU"uCi4KX\J:P:ڷ7ujs<'k^s~ tzU)PC-⻮Y N@ +@\s۹nu$8xN72ERCZkA] ۲<"B2V + D~TO Dg$cQ{߭jÔmG1Z6݉oGɵ Hpnd*e0I]ւy,.%x(m*z1?g+^$*(4|%'d sٗ)҂)*,we :TQoۙ,PT6\52-՜|{&YDtPN5 #C9&k1}љΝ/*FߴܾM W[0c=J c9iD"2ht۠t2>W+!&H\x2~փ%'u>Ra/4Ɯ"fM3.:b!NwW4:^|spjQB1L>N{wP8ڒm!i +G>Ęx ~Y\QFNX)WƓ8v.'E,$ M!08& Y[w+jFvruSS \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc56.dat b/vendor/endroid/qr-code/assets/data/rsc56.dat new file mode 100644 index 000000000..a3015fa07 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc56.dat @@ -0,0 +1,57 @@ +4;hÁc%8pz@rQעB*b6t"ISco ȃ9pot4;hÁc%8pz@rQעB*b6t"ISco ȃ9pothvз[6JpMOYTlA0,7D3IrQu\MbWX -oH取dJI~Zp(g:fvFEKs?+>l՞Y{K`Xnf9QC06ݢզ?wح]27Wۂ,xNp<ϵ8ݭ^ιmĮ!*ZWސ=1딑QP%tYUW(-ۖ=%hsNA4M{CxIY^3;mHQb5E4$BqMU+Qg~V| q?5ݧ:)!y&*.M7 r?_`l9էY_3k$\׍zň!hgUM*(I/[;_\0l}0ճQc~(*GdSnE =$XoOI)xwpGo߄),Z7y̋!Alg3~khW@tKڞ7m)ڕA}BT0Ǵ=z'b5?9u8J貅KP Z1z#JY@ì4d̈́ +xgZi}C5>W'=͑\ +]>_ +"]8hMI>fvڐ0ąUjh HACV 1db%A|{;tYIcTë)U7b%- /sY/-b,Jx~/Ӭ0`+^Gl ѹ = {ٞV&$z|4uҹa3,jhFt_OuP:͹m3EvGS)܎bKd'&W4ղ"a8sya&j#lz\kց -([Ut?R џ.NJ߷REQt򛈂q:#FhPL,=}ɴ%n`p$G:F(vΒ~9ݲsc!jY6u(ApbnWzERGT^YЉ}586к3KIV)G렢9qam?v{*TRI0e tASFc+`YH_v楰ܮ }]v{K\4 +ÛusU 7 9*Ս:WwB~EΔ?囊B6M/5۝X{ Y owǘ7]qz,(qwsY堨 ҍQ@ d#}!J9ۧ>6ݦ >G͎] Ķqv%# "sZN/a\LC}נQBwq~Q6 +R90/O_o =[*8"Run;r2~sl^屽AR1OB܂ l!3b.ڴ1PVH`MdQp*>1t{$l5ϸEŔ?< OZ`tk*> HAռ0.13]$uˌ5'*Ę̅r^o٩(Ag xQ"Y4gְ`d !p@mvO}ǚߘՠuXMR8%JquE\sA־!B/eKh ;d&>POQyfkda(giJ2)R"9rd;Oz7.#^CI=*RE Z@]|&)ޮ"wPNh/?Rb! +l1("4|?$v3{Y &ƨK+uROAnJZqgm{^%c0^ZH,0aqf:ʜ#>5R. ET1)oLZe1.čXW^,ɏ +Ey`Vo@8z,! -/=0!.W_EO:p퐅1Tb,|rU)c iyՉ3K/ON嬗N ELHhUo;60fGX%'*Cw Y4toa- sp{a;("2U͜Wh޾nfc׊嵦QU -MmRĖNLh.yD0'pGQL]wIF !4Mx7gfV8u;J*+!T8F#ֱM!5Z[Pamoi~ř,%#?\s+YW@e G +g$,['f l2v@s356sQ+ t!F"]>Xz0ُuJ.ܱH(3tcwqGPce.bx ~dgv"ORT6 +U{ ;X 9ry:BԲk6lP#+$ im{jpli rg>N*mSt3{bUqu2I-W:cF.p,S;xf\,WO-h:K+&n$rTtS"5KIy4sv+xm3%#z>)DH6l MO +K*wir &`^x=ejq? +k5cݒ&΀IXTinٯ5` NJn rg|# ]*8k2RgW>. K_[%+Oܣq*)Kz'c-Zxüka6π]m_ HZ[m Ne&3@!tG(;Fo9Oglr @_LRA"D9^~5 Ӥ<đ,Bk4ثb) +PDhÑto;LlId4mF5wxqT ]gb¬ni4K.~Hf"yL9:M+VꤞIܕ62ڿ4'JSy`7mɁ l zA'Rc&d4 MF{ =X=`y>0™t;u%m F|wj]\S-e0bRb\cUrs%S阌ܵb7$J( ~d6BaS ^2l (752X>k<ߛ e4cހKp0"XBZ^z`CB<_>v/F;sn+"[?kBS\),ic(;-s-q\!t=bX" RCf^E316Jm0'QǓoe3f]҆?qhb"-/ŇdƙbE늘Sɪov>&l`/̎JNT3a!*]h©3qMI ˪W6Tȷ|.׋LGʐ{၄2k誌&B*dG-Z/>]?#;vK +5PqDdۭه%_=2sa>=2Fl'NojԆHz:@|{LglR> XN5hR>Ƴ :CwQˇ@*ZڤW1[A\s`יNѢ +Vu=>Riұ̓ a54N#:QB( _wq"(27=!B?A[eMh_n>̬pvoT'GVmByGpCQ 6,r2EGO)8\X?b<&r(ZT2( "*mF>0BjqI U$/X:JcF8~%5[8U`J,.Vv%ƉDژwӄ&#!z%Wr/; RW!VS"[}C( HXu-N̽ dfjlG +潓m;z3& @ZREĊIrdC>V%j ~'ɢ Y _V2B9Eٗl'VfK'L`‰f~8΁BPƾیJ[sklqN@H4o_7H- >troWsI('4hJj)e1c ӎ 6oqMc$HuvY ra3ZeN\@ԔP)݈F}L^* &-aBMdpU9j8,bJQۑy=aFBo8`W,iF%Mn[.\k_!ș]Ϋ4y2`([3\O2JbLf9n/Kmڂ_hD|Qtƽ<\uXv{̸X',f^C.ŏ<5xO +ǟwIڢ($u)7ɼ7Ş1mZt(+VL{I$H0s2A D8 jx:VJx $0^so &y u dYlx催Zƣ:V&xGFhRBPb[;IMo`-'ʄ.&wP!C?/fxV(Y3GcA 4׸z" BOI#8>i,3ɐr*)Jfˋ:KN}#ۛ0y$;ZVOsX\i nW!IBWRNd@~,pXsSLm d=n}5C6GB=.kTOJu:_\]e)va @Nx'%k)I?YF5Ӄ81i7=j ˉ]\`)*/hʰGah]yVL~F+0oPY$:2bz黾5K@x+#S׬K9]H:tJ/+Lp,GR#sHt&ʹoa^prCQῗcEO\V5!x4&U8z&VশbkJH@+-ևt"}>IǝwI" +ig@t,*7rR0D_'u%Tksmxl-{YF"Ys5(j߯1ک2<*e|bgh-{NB06kQ6ieҽ_w|}91ShVq8f*JAO( F|R49s]^h>?aXIKqַ;s<[̗W +D=" I$l:؟( ߣU'TCL!a{9z,~OjwƧ9XJك؞Hwӽڜ&)ZP^cM_wȿNrML(͒ܯC3jU + acɔxM^K˩FDy[T#Cy0w`B53Ixi\{Sh#Z8׉<3.e1<]?~2HV; [h)*Brݤao}y~{, 9'HI~S:OBK1CvපiRݘiԠ[# +CHOW^Tp<핁3+%C؛\b*Yݎ@i mwX٭ +ZL3hbE6F; hhqxUɥW\X*dȎf>&eHBtUF!W2FS}l#p6'[XE5jC$= u>ٳ^&Y Jb6) x,'4);{e#ݓշ7YΣf C!m.Edп IhgcE%M۹׼ +3ĠwiC41rj2c^A1fە˸O·]E6Zr=zs)p2YF`v{Hw#ͳj`RS9mx}LFnԍlyP1%V^HT?2!/ N6ވlP╱5j†[=#&v<2W9;Nj9:t“&Z6a2 #iʁ׵`Ih}o;lD` wO[J \L婌^-c9/hЩ~o>|'FrWM߀`i/D1K? oU @'i2zn8X(6/w}IJtrӊ; +Y@;/pWw2k0]H狛%qE:g[~aS'Tɉ0NDT[)RwN<}j6l( +/ +f$*_D'd}oD +:a-sU \cJge0k[7~PG+C(] +~A68xvңzk,5y/n%1<Jue\ {@cxS^֗bP[9L5vxοa/DyЁGs$l\?!n@떯;Rp[Zsɂ})UL@pG QyCw^D, -&41#JlwF4,X%wlO$̵ЄmN-@uo](/Vǡյdf`'9d0!NKŗa<.[\Wo_ ف܀4ɟ-  ܔ5RFWɖ mn„D҉>14']k!YKB/]4oSj,UY kՓ\fBNm"rtMtbVH_$C:%So&L8W]˭e)cn$P:eY +pS[1Gf%J_$w Dzk:ZAnGXJgPƹ_5Uۢ[p.3!'ܸe9H:dDUr :dG8ӭ3%w"=L-Xj7U`,}%ԽU8p]n\Ե/"qlFth`VA%6#| x֞'JkyUb].FCn@̘keŅȋnui퇘_D.r]%gjwUx?X(hK_įR?Nux.` <|Ti/k1(]c KC&a;t{#9@0ęE"I]hE8 { $N؜Q L?tb *'"*\̇D#y,rt?V1U! 785uldchNe+eug)9SD4 AVM3{~Ɩ-z>*ȱ +nt +*Kn !&7i ?uNѤLyh@SŚ=7+z[ً=TL1bX|UWhz9V nTԀ\b=z |`/مvJ@6:ԺU4 + Z+M`Ĥ>-u/*ĸ ZxzQg_@^5%Mp"+XiL_/Uƪ8Q 柩J-wKG]ijnHE+eP=Ml¦,%d_Pae +QѿWE |.吆D*U}$ok?] u>~u$7n}jAde|( x6'+SE@Ghơ`D45t~Y;vRPnio"ٶpw3&8|?^vf2_x|^Sv6sVDy?~$RX w*gPvZ,9Z kC֩*2q/HKmnR;rI@}D.5 $7G5}ӸBAa !˓z.gM>DI,s1G!%fbl%,ٻm[B۫;\Ε7}|Ƿ$U?Xo<beBJ{ .JX`N:?碓;)K{(f7~[8DZ^>/e;3Ļk$KS v7)n sH9~ x"\K -<=ǦIޡ |L/^}wg +f8,yBT&Ofalѥ>q~HC"QOmTΑXrSg?ٚ"IA+lm}s\ ?cK=dIL7˄TA:ֆOTd^*&1Q,>ܤ4v=_+c\7*j@H.m1njZ'^<0>|*~FvjȫGIJ:Azd_|;zn܋Ԃӳ} P'lN[V&ߑ_:1}hue 2Qd魌KؗNq} &tCeWy,5ؤ|0jФCj Y0:t+$̞sW3FR@ 8ͅgW=͏*3\4T(ZPڏy1:VKu[I +X']{9]n IUn.\?"NksԯCWDz̅Hgm6 qEmM~z$AtH@ +fKdn9C1;OU0:/ zaʿ=xUWo=,/[A"Dbe .`Vz͙/ʛ,CNݔ p !( ;`^anWRXMȭGY/ Nf+tm'\!Y6v'cIbf[?̿ `ruXJq +7Ct$ŗ.4z +ߛcx$ +lÜE9ݏKSMgћv+PNqCG>وGtpq[.j@v6/tخrS?KBJO=TwsR\wshF5SN=ݟ2Ji1&Kn|2` ~m!vȞ`j xڔ[HBS +Ƒf)& [\bN:at蟣?V5H2!E3O/f4pǮz"#TfhrvdAf]ҽ3k-&aL25Is>[ZϷׂ'LhgPqߩY=& {btu׶ +iUNϺr-M/@㪴PV7;!WR[>.nܨAÛ I䊻eĠoE\~yD"[6ϵC]&_l]ښ:G=Z,Ҵ=F)7XMxϩiL|!; gN]IH oH萀M.rbv2`tg^ 7sSczezX ^ߗN^| Q}l+I镤@Um.HJ*G3J~UXm\D*!u@]\ei/=^ щ+X84oӧ5EY aB+P8dzBKgjiwN4th_ OTCe*,_*9 @vܧ,s1GՎ)^.0V NUBlN) ..ݑ驾3 J;ҏ\ OFѿ ů"~t~K8@ě̶~cQC]갔qGn}?H3\ h_.=+.* }H6c59z DwNA80 jGWy{^<@(t1GJgSW{d؛%ο+V 6[Y| 'ǶIDCT'+ELϖ-y=0`vN"8ҹaul1cװ.ADF+gmtk3&+G ={2sYLTԵF)#cMI#T?yՂ̺g7fZ0 +L dj9|Os:;sNG7o\a] +Y@E9²2[APCnCg=#2Mu]Oz:kLE1> q29(Ҫ}icZi^[9IQ}'fO^cDxKϣ +ݧF?ܠY(wY֙s +un EAvB61|\ܣM _+oK kaM] C{_ަXAI^vhYͮlRrgk\9&|9?0͈l-C{m' +%Dol wA L.O=/, )tkzvra"%EZq6uA'J1 ޡ/яG?0D1ܿgXu]"2Kz!Rשn}Os-QyBvɜO*͟yJb.|,1{k~4KO&elQרAR_O#Hecx(ސ=(\1!2CdIμ$nIA:Kq/&1@kڢUw(Oj) +RIV_۫uB'LdiԸ#3%@A2_ Vc7U8qڝ'5\6 &!9OTfeոp˚n)b#h:ZD@>ǀ7`TUf6tgďC}s/T Bꀺ_EG+^zV*p"h%Sj4ݲ24DŽVp$Ꭼ5$rQY>E3KiH|!CحDAhK+%|SCv4Eqg"/ٜ +hоK!ˆ;}.Ɖj>grp`W,mex'P<b<Φȳ>_l(6,Q*IBUݻ؄cu; y T3}| 5oՄŚv(+JG'x S1|3Q)cVŬ]%O6l7WCN.ٓq+KӸRBh +ʔMU5bZη|1*1]5.0_NV['1AZz`W}KDposw?abƳ} 9axK&7@jSX4s?ڙx{.:ap࢟!7(*Q/ +i.QaՌe#CwxŇ8ؼHGQ:t"15j!MTU@m6B@{*e3Na!BTY&. Z񜘏٩nQ&UoV`uLYH n,si_ZjcK,sb+pc}maAţǺ'.E8@s?v*t&fGj>@0O; +ˎN:Q%d#SF BȓVKx"֟fL8Vݎ&@zcdͳ$ kwRFƚ$:OFӫѭ~*Qk9ZJe)#ω0w|< +CEvVHwӢvmr^,ō ionDZ`3-9rGߞ qutv{2-!{Fc( X%wYQPvE1&7Z8Į֯N1KInO­&3aϲ_urydq0'u܆mzyFd+].fo:6 +ZQ+,i&SzWqn^ A&P1 SWy܁]ٺ[ yt,Sb|{dr(PI&%s˴)ҼW{rRb[i؟v(uYF+_Q\A٥ +ed0]h$QAW:wQNḰ垼ƈm͖/[Sy~]MePom{ /Wrz$&жT+sUMk>='n`RJf(>H']]E@#3lAbUkq縥[W +V$ޖ98/‰79C_!K/̙ HP:a^D2x8"SW"dQIǂ(]41&#͡;S/w#z+83)}Hޢ0Ǖ N4M+ҵmFX7$nE Br>FiI]g՟/0bWǑ'쥌gu0 [f%Je퀂Yd@9ƃnpI'NjlLB=5r5 +I}m#F-ES&4Zcn +T@ U?Rr!kc)R=Fa +"ti>-|eSnϨM}4lkUe U3s/^Uj$}=C5`G܍V%dJ67Qaʑ{@e6'ek4p7uA?2 ^7 im'V&e0cT}"DJkh y0dh]H85 Z_B*Q~"2mCScY˰+XDkcpXG]Ej%Hs0$ÕDžU|?f Ґ5BG눂"ЖV&Jm쯎' DIso9i/?ҋӵdp5\8 +ſN8Ujh1*ۊD^%ͽa,!BMvx 6aZ, ^ P&,ץ w*$˄2X.(-g=p6Sm|20 +).EO6s2zZq)c9]a( _ǭP2k*X/={zIygeEW6Rs[ e{`JEO$%I%F^?,r.2=! BV5[~Іq'G:4gꋩO*XϡDzLߋ Z(+VW{K)x7nTDÊ۪arE_TbPEֹ-iZPې#}pOzm,X<ں&L>SGvYufu'$|?S~p^;dO05oeNx25?x߁QA {i W2*ۭIKǻڮqAR dkh¬E_bH/RH "k߾|Ͼo41PlXTAk_Ɨ0v fmj޷)4L +\uS@Ø-?W#FP: `(媷(?{)PGVN9{զ bfRƬE$>Jlqyn"4\>;A[gMI;P_) +DslcWdU52Jr 2S=/Ti'KMV UCmQе5ߚ) j+Ĵ!s bw T&b2új\ɟu8M71H_|4-"j ]L^@0*TX x3R:G^Rb@Ͱ;9_` M -NbK%coޙɭ~đ{r"LcnYl%1>Bʻ?^v竩b6qPQ +Ti)]$P<S{Ϧh3g~/"a<\tY#BnPT^\׵E}k·FS,Unv +/P K;4touWN6)R9Ͻ.G>XD6mw:peѳt D&sb*j#Bɚ럿 ڟisl*Uq.lGF_y oZaYm[C( dpZi7\YA={!yQGTʣf8*m"Bw']L\I%-Oܢ'L5x}/){4!9Y># ,Xkp hv dgo "ޯ*&KW0X;'iҾմ6G_XI_C2ۇķ>RiCqB0ZnQ `ՠ]9ϔlos? oAtՖrVGc_m[%iɉ.N\p#~T? :L̎?ԏ|` eВw="' 5j\β/^ :A%c2垳#v,g +tJȃF@(;xjo-kbW@{k'MK3׹w-]Ro=7F/[Q([ fԥn%^8LoSO9BW:CA.p45Z2{  lD<ǒ-%uxk}ֵ>|vP;+$Q;9l/tqMO F\^*T)%Z{KLrɁ5uB諮y(%Z&lj7|m}T<׽31bB-nGCiy+)2ުxBz[?i]N-I܀24W 8Jq`DuZ 5,`зm<_|{}F8pQcjVXӾF#y e)Uæp4+h`.}lKHq6g[Y6@h 6Kb!WlB޿u f*\>BM; +b;nM{<_V/VGqv LgpxIRLa, Jk=زgQ[|J|̤=_e -Q!A?gRЧԢCuvXxכ,"߿8,Z|CW GcC"H~f^[ƙi2d8.ow'yi_5DOͱ#̘pLy{H-7Mw*  )9HtoKGMTN/ 5ꯔ0nȏ+2%jh~ae F s8~s;rߴRF`+x] Y+X,ZU7trֈ!9M#⪠I} 1bTƝvF`JREO +s2<ށ܅u>(-/30f.Zr俎!@6d%Zg*f~ j|]#&8(yPMip3$7kbZaW2"Vp7QBkPJ(856 +*bKLnpA#C;bgMt!^ʀ5&/ }*R,<)/)s1 }Xɺ Ff؂ĪmW)2@4aVH1rp^s$)ni$a_B&. QxZt~ LzuR#(M0IXUz_bRrWB^-(/6ta$! ٯdip%D+D>O +Eȡ=#wc1?% A3+zmaş4 Edgtf|HCt4 }9WPehb>LF_;vxy3JU6m䘎@xlqx5:2y?6 @+t9<۞%ڭH-B+(9!+Д]ԣ?hCatF ȽGuک^, "=I&Gh -(C}AH8M=~T,m]&u;O3дPUmB>(c ⡭06" D4l-\!>GC$l}ܒ 4RT#C9irsFH7A;~ +'jɮpFBP0 +3v?]X5>(t8ӻ1-nt+8JbЉRW: ޞx/JH_ Z'~)4ΐ'eMX'hR XHuJ7dɛbNf54S?_c#^n^ Z?W-Ĥ V:9kDy]BxwqUPаr 1܏*c;n#0%)Zno ~8<)`&ejz@Hx%׻UlYн|^F>yV%p>fRYQȿˍ~|U$?3/I]hcvj2JrmvRjx}i1 + SU{Rp6!ovZY3.pXJr!zvyŷ[ +,lx'#1q @E;f+D$3X #3s EVlfX\o_>W.v'Vuշc@֗cu }0 hƸasC>׉_#8O +SŒ]~5S+,_r#^FKG65>~*ʗk1!7YP{oU=WcYx~qr2aУbePiS ])ֱ̐[#uAWȇK3EjY7{SI^M;yV(\6 `_zdt.Rm[D79'8߇H^iߠ4ac;~]5%9wF;sY])5JunIH܊߄)|*矯9#$^`ĕ M?NW5UW8 _#!`(ch)TxoO<%$-? S ajYgHQg, SzݶJ<aGErIc :ONm$zj!MjגOse4L]{$Xڨ?\b *}r|ؓQZhZ( |! !FkZ݊<-:?c&L=h), +~=B +1)M@ڛv{=znMtD2X:3h>n$:uwB R>zDǽ#{ e@LPgΙp|b )Dؙhut,f^%g4Hzj7JȔln™?0WlNhn~Xy*Md&p >O"IQ?D3 Eq?<ɓDлdM4n@:aN oLe`1XB "M@}l4MKqX:,SXuas2Y8ȩQy"k } }"khӼ&ˠL +XW,mTH.1 d\P9>͇ZzlǦ-d4-`R\>o H@ԱKNEWmr;\=7_v :"V,Ѝ47!vy Dl02dCR rźUPѾG?xA\ij#`eo%4eh*<tœExM駈 gp5w$^vTi=>9|Ud&'-Tkw^:z,5G΁Y#q +5xa˲%8~Xp {D;r._oef ,1!ݾ#PfJ ޒw \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc60.dat b/vendor/endroid/qr-code/assets/data/rsc60.dat new file mode 100644 index 000000000..a6af3e93a --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc60.dat @@ -0,0 +1,61 @@ +h:}HV"V;1@|V"J v`1k2D^ L',h:}HV"V;1@|V"J v`1k2D^ L', t*yDv0b"SiDgѻ5Y3bdaAEYNX +JN?؊^fM(SI3 ӄf7hޡ7%SV>it*T=E#E`D6Eοk5j, +fı e0-:ծAu@x]UhsY'YOo|I,&;<aBm?~ 鼋Pf-̩nС_:n)JU]g +(|'Ykn儿}9H^wRi1I_0= `mc$IgT0&ͨzF .:l Q8NJ cjXcy'ߙ `yZ[t%}62܇K/ؤz$?/< @SP[G'^lQA<5&ـI&w(6?&ImN {!XLvx „ik%:lHp2kpg,1jCpk[TuET /6h^F(teL ~(5%&Ge )Q9'Z0$k*υOܽ_tRQE>[PwNͲ.[`g4P#V:n*:i$|=`wAS5/\i;Ξ +k$Qcrc_3A8*c( ˋb `Yz3!:H'Sb"ká5;5dp<-5Ձi0ѱstjMD0йΨ`LM88  7\t @po ƱԵ(3&N70/42J,fX_M]8_4[Dw_8 b! PEn.35ܑpPWhmlgy?d?^U/H~k^x +@-ߠ붎U(6c]NsW5ث,iv9jr,$|ڵd>@LVy| + !dC5Q"k `u#sx_oj66LL{KiIPl~Lyߜ"y@!OPjJL$$R]rN`HTga<>5Ii(|.+CoxVp1Ʃ 5iE7dTOl(5#CC)ҏ +j) Hy\>϶##/UoS/$mΧhF/St*T9tHAzW.צj^v2!mZ ˮVyqyu;,lAyqD`p><-ip:Hy**ƾ=feSpUTƟP 69a/f0$Bt#&9N7|RNا(V%WtSŐϺqZW['pg=x&D֛_-#-jvj xZmAj7˷>3`4"&cԚ`[oGB3"kw}PfLn`[^hd$uq͔U)fDqD?_t .dGDwvw[_c<$,ʈQ[9MQXgwewpE =h8 +þpY@!BkU@܁$\ 7fj?%aڱ9]-[R~=()5 Rk`٦mi<=\eXځOP'WloZf'׫z4hzɮrlqڳNBַDPOԔטHH,.Yu.!WaxW U|jYP q\V6] %'aIMH Mh(\ M +V#͂htS;Q&?SbOOUjҊ;a5nȨPjFu}R;Vms:ERY8KtH +\$b,H`c`ϲO6r +U_ydIgϸ|qFvqX +9w9| ǏxZٕ_ut J^2̤κA`ܩ5͊ B +LPYl;UyB8Z+(YWT{T#azʦનo#4 l4ry^`H'FO?L=rQn@5?cj*3gZb掚 Aд,ɕ KXV1}Bu-USS=Pg=JO&a=g壟#i+.m5Nىz%+CL6 @ޣkEk,Rf^kEzpշXS\UMҦ7֮)O̒+ZFZ'ԍݻ/ ڂԫns>|fc8hDL*K͵) ?kg,>ׂ-9ʬ`mtmbq9G~cwb@EfD]]xs^x*jX;4_zx ZȪIcZ3 jB(8KÌ.v)- +9О..2[{ .ʹݤ;ۜ[lAG"\;b-&)6$ +h$fNm4Gݡv$h|?w?[.%H'5w\>}a)ia.zpq saಀB֪] HnW~J{]A4hcc776)a 7fF&f)(n%=SrW%ZͶzPRjGcͤQ.ֱQ{xzʰU _'!tBXddwK3CȠh%#k:Kɂ֡+ xέ LbeIC+=e\(:\[Iؑi%AGJєqqGx9DG@W84- cubxۣK4Xs7ۡ!վ+w05qI!ϷF+vDBh_(f^_A~vUvTT +715T'k@Û=kmtF>6SmdnyoOT-E\3C(P$D YS˱w$Ɍ`9m"Ͻt)p ώbą2zkYg{I.w GG9j%GT2e2}r;_=vO o}Z}uRMxhx1[*˅!+7) ?ެ 8 "ScI$Tv2ad-tr-19]-rcO[Jk!Z^To5qUKU{GP{(Yt{PA5V< J)j-TX'NOߓ߁ 6㉴9UC6(7n\(Dsl+DƋr1mi+[2RRؿ׼xy +Qa'}WeJ˸ML(ujAlrI0\>hh/&}MhF$1fF:z9/QxׯsUs%![v[>d4>&l*It>ܥm LZ| ?ĩ =Ѯ:kM$_Euľʗp6MF +0a9N(Hԉ8\\MP|odN1ABόwqLH{ qTiV|-u%9TȊfGlzyħ4~}Aw"⚙ɏdhegL~^ +S]dZHˊVI1I?] Oàpy^]_|J|E,O5뤵MH}dfs _; B#u ;K"]K=`T4kv= "NN]F]y;-VCkq]8.-K2 13< LTDsm牥,%>%֭*Ѻ^+a8)!cәG G"մkFi@Ց!q5t*–lTvufteMYiN|NC؍e7NKIh(A29:թ{ s<ʧ@@[A^]avK"D#-7UqR?0ڣ-]5-6X\6Ui%.=M6\B™9>⸬lJ&S[xPJ`~`nqe?iL:1`~HR |HI<كU \Orʆ +NQ2Aח!#YP 3%:VOF +yv0)OLW~&FW{Q:Ar4:8y06ქDl=tCKR#EĞ?s,s v8j܍M!sԌoS_$v .t0p=KyCkw%%Gx{_&%19gvDGsJ*I!>߳Ӑ9GHDž/XߐQcƽylYA=oȒ*msΛlOCra!%YD(~$V&)Rs&_v%2y_fTmxIQ'ƊQWMo='A2{eo>[k^0s꫱7_|s~+h+K/b*MɅ͉)w)a1E~ rtɳnZ9Δ/DuO EjS|Ⱝg r<'r@Wӹ7k,-sM*Zv G B3׳bVcқeC?ǔydeՅU*U +iO}Uj 룄Á&3-'vpV8^p41ᰥ(ETCgE&b)e7MRfc\&X |Z7qr"EK{]y,Crio52ˀ1i>T>O-OJC|zO-Ԉq;e>)'ZLRlH+H̜ڇh:y_H~]~Å-\J8qeޠE2Uјa*Ȟ +#m2Z &+^> +چw2x|j0DGY}|R \0(+y7IW>m0܅.gO1LL`2D8a\W΁d B:5"ch҉hYnͫnlRq={ň L(R +P/J6 ]z6$KQK8 8Dtc}zܖ58*_Z*A4ca/#k{p:AG&WoiJϴχq U<㠤 +4ƇU\Cשm}O>!]N S7BBѰw$/W)w +DDQaO0b4B$+Y+ f ݍ]>+s%JFsQ;t0_"WV/Q&@\%'ElE}/3}`LzB}3m4oހʕMgRPЌ+fq +j:GAA[eVz0AP:tYu1i ]?J1}o yA +hOhYv`Jt~|ЊZ^pR^Nd6 .낓1{U K5-1sGMrY펀iAOpihZ[,+ hn!HM\ hoo)3Vv/=8D,.}iSEPkWʩQfI M_#K:6BaV!`j}B);usV3=оP%/Y^{frfRz`Ryg]0nXR`E~!&d(gL6!-A坾SWa$OQ4n{b.ŋjNր+czڟAY4: |Ml:UOmtaa$I.f1$0Sѿh0xY9QWH2x\սw0 }=˞:ZfۆPaH!#" ӓH'4Qq<]t5t坥6d^-3ĝ=U4 +=W9C6Irm'!k"(G{rgADge-I!R@g +=ĕd +&eK\/D}zHss11T ޢV~Z<1쳻F=T _Ib +lp*o#@Orÿԩ J,[UOde-kdvsÓz$ +B{izz<}mIsN)m>/^&XwHڊDXFv5c3"b ":TB2" ϵV;n R@~EpeDƣHneiN}}t)t?Ft)rSk0S~.,mRީ(d_wZZbor# GZ[ :aKB6*;3:je + N Z ģ/c@; { M" ܶ)UGmߘI^FoqE+⍪P8sI/>%σ>cjxRZ]c$wð2''O#+ANRSyDv`]hCNѷ;2lur6[S:lPnܸP&-Kk>V㈑ bj.s.INI(>2'!\FIN&$H*PZ+>̴GŒ*dE[Vödc(emU:³(oNʔ+m%5P*{ ,))l +^\<rR +g}gs%É\NJ&״sE5y 0`|W:{^LUOq8GH1bCtr^=C)u<4<ˆco̞xlj{ǕjEoV扊^*;%cJB|h|LK7DS)/$%)GΘ1ۦ6HC␉\S>[nx%0T8dŗ/j{Yu +jDً b~]962 =GQ93Jbj8g-4OX3 柝0ϛvF8);$+<vDi/z48 hY,#z% ( bP +`@GT@^ F*N,@Tppc(?e fh/i\ D_!2vZw%UQ2pG.\*G#K Zǝdic;#bfxtw~>nk`U"-͡,d kį =7AT-;٭i!WXJ|1JG+TiռV¯psREB~e/8FLяXat*Cw1X֎)3l.¶ƍ/auDu ՌҀ>{u?Bqj4T1 بskʚ_ߵ [P#5#:Y'#};va}Jq:~R7-FgJ{y҇ {A$ZnWϤI.~`[Z9eC#FU m ff N9ƁVfLM"6:Wd)!wj{Z==llyJ\'zlA/A,Iroy|]$mE"i,#;_LI7Pn'L::H{ +MJ#l}D:9ӻq?\]H^g)t|eox`Q::2~/tb㐤 uxA[@9qu"=$Dݷܷ@{ޖ*oQ+?s-^vwGtv#*XrF1} 68d/393)=B0)FW7mf,w)0JtE?2Q&`RGY:ξq}l |3a 4{<ڃRY$iUhEt-/8p)/`l'2WzAǖG$.4cV +g;oVr"~eRpTĬ(Meڦ3FQӕ!~!XIopԥBG]"K"U HE@w\ Uy`z1.c6T +U0&=E!o@eN)(hFg3}5`]o&&J0J"L.Jbrg] 2skC!T 4iv":а= nK-ZV`Dƒ迾@8 +^}E͒BO|/C/{=r(m<^=˝Ƒg!(Iaz[9T恓Iu jB-Y/v{qlo{EmCOJS<>p5E"Z+؞;((yBJ oPHyLRqLJdO1!ǨC\Y%p[YZ{ǭ WF4Y[0zj<|u{L7x]1o-G;6e_e=ON>Qgi + eMՇz2!Nm#dYwʫޗ|#3S3W'~@c +u3&a}Ya| {`AnHf|l2?ּ#` &K,ns +o:VٯVM^,TkG6Ra[Wq ^(̔ğpgbkBAƓ;\%S?hu)#I%C|R1(b0 * /#'wC *U8x8l3a4T@Ιl.F:?wMvpv70cshv2dS}ܻXb[쐕Ʈ*$ίqH ] .ny7<*n2~ř5S٢|g{Uܴr5"[^bK]fLڜٵ&{;`LQV%15َd,nrO Ԧ}G82(x'NӀ;uoCnaɧ0k”× DC5mMbhfvo?7XZTCKC@fOk9APswpvh ˻JaJ҄ +u"dIY۸mx14V3uK;Nb`ΕDop7)DŽEDFbuf%`s$.SD 8|X.tĢbCC;8;uR4L;to 2Bog~n,1}EvHg{cWuPd1΄m3&mNѳH0m&ɉSI+ŜG2L 7p9n{RD\D@? Ig@T>ϳ07$3>6~MEhߊ/fJb8Q1ʻ!bXcǓ_.Xp~[΀4LМ>aǪJɴIQQ]\5!âf;F6Ԃ%C8甬 -د.L\ܢ8g-ߋd#Ue =5U>&<[Y@FNctVVXX*X\b ҹ bT'4#ýy[0;@v SAhX7Jޘ-+0W"a t_ W/zR\g__~x UF6>eK s }QmIFS)o!rhTf+Mwś¹+H9r? X)w8*]bVܨmSUD^](7X&XMe$%6"sMf G.$/ \:>Gm +<0X"nK oK}EKo/;G:;Hk,9#U`nVuuwwh SK0O2wޅ' c -?14'_nĹM!V.!5pZ?N!y j 7w@uB81sC$8rrxXBVic&jlȀ~}B IɹR,~z#鰓EWC@sx$㜶!&L !܆_Ds{wF 6,+|+{8{2n2D2k͇򏩕oX jz``mWQqߔMW3fy{ (| v 8ܕocB\uBj"#1~3Bu0y@n">,gpA:bQ \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc62.dat b/vendor/endroid/qr-code/assets/data/rsc62.dat new file mode 100644 index 000000000..eb8c3399f --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc62.dat @@ -0,0 +1,63 @@ +pC qJ=ivx}^ e^2yf1Ez)j|@b+%ng4pC qJ=ivx}^ e^2yf1Ez)j|@b+%ng4a>e6Ŕz4O< +d-b%UR8" VJhߐ!-T)F G.戇T">OVS* %{R $3 +L}I,o\|$l;5:h;ex$eZJ 3pD|cRv-w:{гr7;f-B;€L~`oߑ]lUt=B6Z,;Rk)'\ D6|Cٞw IoT@JaHfQXyOM]?AoJE_FxunoZ?&Pr/ƹ{[a iTwW3^("Hv3j ot!vH[(>; IUfw:067E.+5W'a5Añb $ʈAj-,qW|1z6Un9xGƤZtM +({in5vZ"v:?ت<F7PS"< @, oH"(Se'(qd-+6y.4CĻ:z8gZ[z3ClMXv _0RN&Mlg#+2DʷEh+W{Uײ5HaΉ6 i4f OYSNjġ@H #y5iZ5cX1U[b:k/lٕ ŕ֋=O +JLeu[kߋ_k3QHd\6}cўP>j z;펑UŴPg.j셴Dc/:-坡8t[~iIxw&K SyT>RuVAChvI|':1)X~ "e؃nӠDx4uXyސDP]NPgZ"Vlm\hkt?pq2 ?I\DlO:+8K,Ͻuzr;][ᑹfuU +`mc4LC xCB,96M5XTN=PZYr}_! +%:n]Id?wL1] t}YU_=s~o(!V;侒zF+C _*hxcHY,Ķ 12r=M\ٝ%id4_XΦ|`LlE +>CΡ/Ӿw tg=*S'ЎZ;Q0Kt)iwLs5‹ paɥ&uNl&]Bռf?ޖq[,SMHAce\ +Yv4fD.ta&TfxkixpWwz3}Zr\EFQNH 2>W)/2xڍ19_2IRf&'pε]$ NAuD5%nbH4eUO|;+A"Wp7c.^5R ˼=iB j,ʤ V^Lj=GV ̵fg=q<\njH,L9I+; A|ˢ4\! фM}-fQ4YQ6943б4)(L#t7s6O +ce* mz&}O;Um֣ f˸lƿ!=.u|@* +83vC\ 'r^]@9j!usUbR5mҏ/VTB?u)(񹷥\Գu*3ƃ^tKZ'_ pGLcsyq +|t4X)פ;9 $t |V -b:̷v5&܀[!gZhxG,g "*:K|. y+gyGs%NtbRm/DʭoNnۺ+XAuk$CS'5n'GzgxcM1߫/C]Q,hw4;=oQK?SDڸ7~u⣻\XO-ԴBŒ@OqXhߙy(G0~im+:MP݅d<}=8C.~؞tQSCVpX/)]كg GOv?o,Lb~Jc/A4[̮)BMJBdl nw+ ؝0Kq*)}0aU%h)" XrY_l:jI/zBυ51F+9#o&GJ;!h)wтrʌBEf{Ш(%Jtܺ'2o~8b:&:m;z]IPB57va93e ȶ}kV3RCϸ }d8d_* +棰OZ,\^$](Vۉ4=TƐXqbdše Gz_E +S'/a*Jy XIgGm5ͯ柨 ս|U]ؑ Zn9B`E?$Mh[Q6؊|e_^a_S;0z TN2q,yv` lwF7Qܷ} +F@Zԗp*]ά#s<(T$A.`RMEj%R2_j8 Q +W_L-L+e~1y/sXoы]V"ͭ$)9uAyN*}HtW;LڑF2憎M>: h :\.L>C;Ef 上&AOd|7+A ;T춫X$ ׮Ҟ<ϟr\q}xf# +H*R^d%<>kbyrd)?)LqNw2 +H킻ۈjJĔE=t8qx +ãwwk~792Qp;nʎVrA:sKoy7hQ>˪{vV6Dnƕ$(\,jq3@e9z;ۡAfM4f~lʇb%`Kٳ# ZL[?0^hewAu`1 K^:ߠ AlT"GR`I(J-R4GD#䲾)tKے}^M%.]uyaÄO\KƞNҕa5ʳ8PO*Nr!O ɂ"ğpqȋT[}4-6k?XHI(G Q1x=/g)mC=nxbE%MvkU$YO"Jʋ^Ԭ{P$a8hz.=>y7$K+_'*)mCN^T  +IiKcO).Ѕ&/1LC_k,u7-q!'j6rꂫՅu T-$$q{v?#d&1 |At@4IGsbѸ?:5)zz&C`23uBm( + Z 7Udty t#' \|MGӹv OAusm 3LYg%=$; ړ[B|uTi6*f:Bg)p]!loO Ev#R˺\nV>v}qKHAYA!x# "&aE)Fk>%waL"Rv|9x:P?}T/N$@zTA㤟J{x|" +OaR9~URWdi$8%kɫ / ԧ>:s^ +y67&xV[ '0 z! n4 ׭e+պ Bk{T¡5e[zp[nr:d,v"Wtk`&}\{5dMKl朰@WwC!NIĚa_j.ycQ ɖ=n|I!l7Aܑ7HPeXUf: rv4x$E("Ҳ4p}gßla4i_ɢ 86S|Cq>t `f@~Nݮ$'#r`}4pm0)oҜ3 q.5C-IN71gMQqcs (CoYpx#-e;x3E"`:뾅*l3<<8Vm=-9.#쇦h'GW$ڊw$YS>󓛃b8b +/ )xz[ű@^IǺy!5eRw+B7z2lie&:F\ǐP{?kUJ+ēr_I=#w2ߡ,gS>0&6^gޙ_ވn: EB|hG[- YDCG mc*@)+YzyYկa4;>NC,?\ˆlXHvl."n6SٛM֎PcqBDر}=9 Ɵy[iEO"eլ4¥Y]$ھgϊB3Hҩ`xfk@\h%&XڴR\D֡`$B2F.OH(Z5d=œ8Eލ$fgQ 1EK;z0!/>WZJ8Ng 1odzeDYJw]5JxKRkp>ߖ=~7qb<#( Z Yj$iP2c\d}b=-[>ؿ);~Te +h]9J~3!v}a@k&?0{Ơ6j:srj%_#<7-(O9cQr* /F_8^v%;@ 1f7H⃘* Ǐo#MsD*qىq+UG)_B`&SY.J^wdnaq:lz`@gФlVr-7x !_0GR6\ I#Tɕ +EnհAN_{# I-j8gVUdx*0Y)]|5̔RwBZ#b `wlRl% +4A9eF!jn3ShTΜWd[+)fb\zp2[2lsX C-L./U| +kV.|,tΘBPjZ!I ,4NzT ڭ?Ƅɛw(m&1?B%on ^fW]n!%Մ!K26N7FAĉqld >B:,R͒:Ê>+ce1f;j n@I{ʽ-4b< '7Y]k,V¯j7 +N͝T=Aν< }QGReRm46eiJ䵄ɒhz^I&:bUoGlEMM.Uf9/N ߒ5~gUDv DTHGw@1Kre)ils+*!pklQ.Bgd3Hܦ9q{R0 ۭTӋc_:}s5 /FZ ~(1N,{cdϚeJ=:@I;fF[xmw3\ɨ3?6e1u{a0por矋-b&Xхt]1ա7%v^ +1mBImWC0wJyYnu/cPɆ6ZpeFbᝍe`wRH?WĈ"<~6/9PO{_Wk7>_yCH~Җcp`FfQD, \S%A-P+ +8ـ*}Ln{&0V$ EV ?4|wԘhW:rq6u7G1 +) $Pd +: ̧M> 9]=F2m'K|Rw59^?t`d^ԏꡚxm/+1"I~}!i&IFue=y5o\,7Kc龲Uȸ@}3%u6Ԟ87i?l=Nd jWIe^O+!'0`~x%KҬ}ɱ^wQԥPJ&sۣn2> Hϲ)[g♬|N$D,|ʬ/#Aū+>H;YJ}Ky'hF'@(0c]j^( 跏, )o$8kiRȩ1UHvԿYd]AV;^r+ p~n)~Q%>P ɸ<мymWiY8簽t6[YJC1Q GOg D>p'PQŽҨAEƉPOwyvaf8[n<Ȃu/P K݉x<+oNK@U=ӞA7ؼ]p!񻳃*a0BN.tQ2zJu +6sNXB }EX gS'bM5LCw\D֊mǣ}!>*wx 3rC!}[^\J8X6~T;p )]S.fhrtO&c);`t\>[Ҏ <s(LAWF*' x=IRjSAoܶ.a=cobTcݝgVZY °, +mQk]( Lzfud1\Ï˚u=fQ=|0k!-ƈv`2:3lHrGBY;lpQEbp}i~C6T4{!<[ 3\(Z9b'1‘d!F.Og.N^E2Xӛ31.=8Xydބ6,گ&c  >lsPzz 8?`I ,G1v.!i]ݏ׽:r%Z&ľW4AS "ESK"HpM\g?z|}nHV#3NT$aR >(Qچ뙨5+HZ9;cV lǝ{(08u~4@I'v[L͗@{. -1oa2# R\GL7,q5^'QSbsXnZ)0dݓkܛ^I9Iu5QF޶]zj b:LJ4}9B:Nscx_wF0s:.IiG~u&Ǝ#X <) &=3UՏ2s.ƀJM3z>Z\ +|cDRk;0U(xK֦iTS[cr(թrȏD; +pQw3`7FyvLdAX!c':J{T=%۴',!,٧OU1_ޔY`|&ѯm.S"uoqV>Y'ZGP"\>aeV֙ahQ$MT%갫Ųb4Dw2~_+mC/98k?{_7?(\h^}VPOD ] SpḒ=OhyYD Sʪ >M[63o@q׾,MjOLKUw jGM6'2FyT5ե/J Н`rPYW(2Jtruwfݨi~M#>U) ǵ#{cwݼXSۀ^Pk Z{uZTE.aCe_Yd\~,Ҡ:m`uޕ_;/~!`ځZ}K%7Dۙ(WC{rJiQy[Rd$xQ?iK80h#L3]^"_F.ٜ(fuȇUoZa^,H@/Y(Aa-JG-* ۯ}RFz2.?ciP9%pӦFf)Y2~L"b) ,%S*Z՝XVnfjݩToJ̢0>dٸ$h-ɓ Ŀm+~tj R˅6YLdfꄳP? nŝ;ȣ&2KIj PBpns/Ռג\C#o[=5v1heQA$mFN/-o , +fJz!H#vo k +Fέ3йaj"ph$VB`خL{Q;&lT0t[Cqe[m5R}B'سMޞF,iQbx +=C2DQ"|i C]/`4&8Ϣ̈X@HhdL?߱/|,sM}g,߲2{oBFDmLŠR6ӷ(=b_g9 dSW~=]ډ}wI:,ޛT;mq>r o$tя-A~ks^H9UiQxPӭ -犾x`%Čt`9{l1(=HpJ2֏K^@S5|tW7v*~JmԲ)j1PJl*`A\%97RaNZ"Y0]01S{lnL𬡶%8N1#`/IkBKhGVi݄6_w8Hقe&S%,]EFP8F{l s3"A-xkjʟ W/G'ًg(+ +_#"t[YXݗC&EDԫ#q^CN PVqFD荶3ņWL2AͿ ;L?%jY5(%}6 }0.QB)¾\'K-Om KF$ACӁ#(a #6Wqy}Sf[ < sd c1zkY BE2 nk?nmʰto*hw}I#He`b<(؋ܘE_qJp<0bF:0^ք62$4{s,۱lM/PADyhϛ#gqhҾyxo5@8|׏Y4+!Op0 lW&볦1[<p"L˦JXk>p +0AQfDZq,K $э42&|ÒAHN-F O,+ h735q`RK*޹%fQ2s\j݆ZM F5p(!87﷙UFI.UAZJS@|Pz;d4wjn8ns]S#bY3o ?S]! Pދ벟q'>& +FZ2,'-TyRbGcT:$>"YJrn/wm1;8?D!#4` \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc64.dat b/vendor/endroid/qr-code/assets/data/rsc64.dat new file mode 100644 index 000000000..ff93d8593 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc64.dat @@ -0,0 +1,66 @@ + +:s[܎x(y0MQU+ã##dd3 Є} +:s[܎x(y0MQU+ã##dd3 Є}ts/;8*U; Pq`բVY [F7)Ff}_}K+^NĕRpzy$? +Ix7P1}0XeeUm]z%1 #(: +^vq3KSWpTv8)YI@+nR*,"g*'SV"$ҺQ*lAۈYT6dSPȯJ'Jo=S<8'7qMǤH ~Mn$ b`Y{?EE:3?J}b}6Ǧ"Dޜa;).Tuk[^؈%*rIpsN!!71@ +7z)vnFPtѿfI0.]cp RsEyVqܤTXaDTN1ϬsZTf̘%M{r6uo~nې&I>&ccYSY{71DHiYT= < lȦ8 *CCAN>UsAz5: N* +D4׋oD:g%Tbd̀BAm8`~`ū$Eӣ$6HBexp%N7n⚓U(9;H] +{}lj~Itf~i&,r΀{ Ȑ(%bG .:Fom6 iоd'lz~y(| [a lQSD͡%vR\ֶ$ JT= IqυkBB/nbwknRY;flkT2~2"pZ $0%?E&&i!4GJ' +Kc(e1QAM`\Ư'y9 +U +ϰˆϜQ&bEMhV ꌝX6Vf (lP oA)0),jj$cQ,\i̅-Jo[ #gl1G>3ۓܫ=7L|Lq<)yn3bҾWu{m4A+8[rcmjhHws׊ -oo9B<9+א鯈oY";z +.8xKyM:Q p&@]T5| 5jQtnoUR :ʄV ~2Cבq% MD^腗,6{I_0s*T'hѥ 3mtJ<ȇp}.KKH#[H&l8!O'E +xo&rbNʱZ`ӏ[m߬i//= x`Jn<); =4)Prv,˫ϋy &O&5SLX pٯ@`o|*3!LVCUq)90,k,xmmJx*1rqU>:9= PJ ώ\tl@iҽaINI[[OP@Io׍*Z;!8TpkjBjm]["m 돍YS; 6_J줸Mɱq_HeGz"c9%ք^(ť"(Ę&?~\7ydQNo"J÷H9RmlϼhR l5yZn$Evֻ3dGu9$dD'E0H5`J~ LL8B +h_N';L1˜iAB,?-S^*aG(( yEGޗ%"]cPʗb9iCݛN0Ur :EWM.} M%L+Wi)MԵS@^ÏtAw~5'"[*z707xx3v83of5>Iug U'Kl=9@2i.3P_ނR`RXHkX<[C]PS|?B3?t +!qqܰ{N`grNxi$: &uMZ޶)FΓد.b6|f;Kzno9gyQ'/xgyRf8w2d rs, >7rc1nj̻bZ,#G6͹a_h!Vp*5 Z4rYYGx>rV=xkQjA"I3YbIf޺WXذJ6K==Lٸ_ulW:C =޹yDv{M,G\2p{4t<@Lj%Ijk_&09 +&/[$'Z, JFg" 22.Yګٷ^FުAY@t_%@d#뱆?wJٚW'W 3Xl . w!$vӠ~Uc L]Г1{KPt)t8޼6~zS2`%6TN( <пW{7f 联Mx:.28\3g Fk3LWc=pá/ ±gd+s~MΛ#cHːpƾT f 0@61B'NK6GQL6Ĝ s9kڣEu&^^z &([4>;x=Ǟт-)Y+zC$V`G::2]ۢ]-$ ݔ%ܥxRvISzh׫RW=Xi(7K ';9L[Lj7 H"k6-.f(Z3!Y7*=ge=avv +Nay. TB>8C}iTfBia! +k)Rr`XX_1#1$TbIڸ0#^Z`+/9&x{PL{tlХtOF"|:tr$z +$s.؀/gϟ綞0q_kFh\}H향?[ ؙdWw. 7KD!)K^} d&5Iw12eTv#9S-BUpyGYԫWWD {U$2G(h. *!RBWu>^33{0^{)TϭvYQ l/Um⾐ʎ45M$D9rJ.[:PUyWcDscѺi-jF-҃Cīhз|885qqG57<*.P-L~i<"nUODQE'9s+$]r]؃ejܭH,jɏy}/@_[ma{71AbW_ՓC%eînsNv-cbS%҂X~ZiT!&:<w юPP""M3JD&e߲/^`N|C`Vgd]“o; +44%ztZ +|9—* +1&Ƒ3CY Sk)r3m?+`t(I(88\/>JY6 V˰q,ŮO<֠0R[9MdI ; \\o?p>K[~Rwo!k'c0j[NDTn`n:fp >fU"j|T-h)?E#`w$A} +oDWM M эS #u])ν @E2$ +N"#}Ezrd\f]4֑8Y(gydȱX%|nߍ.6aobGkEkOM͏XFlnӻ=wL#"Ϋw +kOQ/*mĄ&H^H_?ɝ_9?YD~roAkB&qՑT/=j{?$h䲲|# 2{zȾ9IF2:q< 5: D土CjІ4˂%`&QG`;qmhv֢wԂDfղ E'Ē2ϡiK}l3+zzsum*:u yخt1]MT5j7=i֙`WzJ߄ľ u@œu~)җCJqzoyX(d1h)GxYݘi&M" "266KJ풿20LY`G΁ue.ՄqDe@ICшyRRxdALodV\׽?r +,L^)HN8(X[{"wDId<5d'-\'ũKsOg4fgZ^wr!0[^xUchs"Y~GGWң1r2hb2IU#[*E0J&F{~'ٔ4) eN.fS.[9a\"d8^s(P+-eӤ=%}qhKj + 9Xԍߴm631! +f:&B=HŇ]+Ƶ飘c};{>b Rg ssSp e 2Sl*1;d,[ (!v(oq m+*kITUˉ{'!۪)JlMPxc,n_̩57&t\*2Odp<'׸'f11=qf=z*@.V>ɉ#xs*r' |F9~cB"UU-P7XsEm{n_^2۫!* S-V!eK+Fw=gaas@s6@ `lT"l沕ԏJXVM7%v(Bu BrAԈ&Pb +!Nl (.l%rukq֩[L>2L4ǿ*Ph"hRK }ڍĽä8y:SZt),p1w5rw -y|v<=z!WZ/&RVWٍc qHɬ'Yttd(mY"ZiH|ʼ Xء:*Au -rYW +#c{5 +j5JWC쒦0гK]ջzPn Nv<<$$r! oQ-n}@X$|7W}&G訦7[Hst߲Z0^ lyS@@A(S(&1 QPfBSe kDr`szpҵzOc&PB _>85l믶+l֯v'Ce虱I >tH0]547Hm +_O\^oΙ9%G9##qSq!]`/¾ÛhfU1Ok7+&QuZGGv?'/˟LN֣#sc5,1Wsa~m/_76\n ɈBR& ++GL}mI@'L0$gz,J#\\)ĂҼ|'e,j9>{b6dO>uFr2ZMݎK;iq$@ yQH(*%Jb8$ӾxZ s nH<߿Nqޏ-;X-;Ө]vN4dPЩ7\:eyi.TYB礄)|E9 -S&I8nF8%F[teɛZJG첢4&a5^8)a=hjsH[rSc6\6**eW7tW3ƈBM"GTnLw5{};E)ܔ +l#FC7,NNV<p/3w]l^Sƿi Z< 9ԌZ1 QK]ǽspkpj*!+j.*n ?xT]\Y?ޡQ У (7y_ČPc;lSS0*ښ)vo7ZxDm:Ys%׈5Nr?+=VH"2UʽU,uG? Xae`K^$QEׄ#R1>?z~Úk;$: ?{.W,w^(;a&,)xUMLk3y@oo z@I^q+8p[ο?}v/Oe¥@#ߐW `4*-`PE ZGˋ̚8 tyJ> ,IA.ܧ [1KE,%:jqv lia%$:QeB Ltx/S@,DC D_fA&x]+_`OEӶMrȒvo36*?@ZI 8~-CV Jxvvobo֭%-*z3fLߨ9E~q̹?Kρ7Hih[`ahGMYŖ '"snb\"*12@!AX0?0hyn$!dqi]QC{HGF6̮D*@x2(tdW%RW%GJ觀S"toN*o /lD9HECU[8'fӞ• {=Q;7sCr@շFǣnGg} +0AJ+^2Waǹfyq]yIR=:-I>aʿ]pEuDIC5#KSiϯgbwP4Fh>ɄOí@D|P5f ԙ +_ M{yRT:eY?Ft?4Db+q4U.h<#ȍ4.$J K_\l2ϥ֊֫cu"/2z AFu4m^xFY]Q֞)!M/P~J/smdh{*$WܻkzFDK3aS-^mTڕL;;~c}'r~A*!m\ }Ã]/pt-}U0R! lϗdeSB^Ap:nXX'0M9nu' e^E\brn,lyb 䀴[QVL9ggfq͉X +Vu5 +Áʟ<\Q9>#? g {c!qȂ(q,g~7O*C6lsYj%,Y+ؕF;|˃XPb!!x9axjD(2/(XCRqwupP45Dg,xjNZOyNOCeh3Ѝd[]g;mXMyx*ʅi؝cVUƭgBSI`" DѲwOC[))<2& +[b2 +.dБl3yн-/9U/<gwz4s?ԭ٭MMiߖ9Å~4c1Wd_#FyaT`L"N5hCRAʜA0kk\̦}0\r¸4D;n*5ku0рj=[s%`CBHb_b }g?kiů%pPV&}ZUzJ&]Ж >r%u!l%f!bB zC7Ӑϵ&g_eL쩦p\bB$h/$FXW"?O9tLzŗ'k*IVw4>k[-3i6gv|1]ͤߦ_dTQbvȵF{@r䟾;8؍!ɗȢu*)S1T8,Y=XgqP iBWkP})VT֒2..GNwEB8IR?*R4 WZ0ٵ UPfvG +"i}JJkȧekдGʝ6M%4gAXܾO4>j)nLTdxNmNbbz$̛z-AGT+\@9-Ɛ링BK`w|g5ˌj#m&mH/72Ho휯:F\+>| FmTYN:r,"4{#D٪2Z_nÊ5;6w:|doea3++]Է9&]p;bqsme)d0 K/BTZCB)ʖV= z?Ml + +8gڑVz԰;AљpXal ؟mHb~0Ub0(`-!Dح*y7&[yGnJ 6}]#P''+8 L6 +/x~oަHlhՈ`D|bF(v6wCCMEwmMWh;B%1P_\q@xz;Bc2^Ly&ÐENDziPKiD6'0#90͇=8iPl=˿p(a!mte^6[{Q6kلi;tg,e >mե_tTS$:qYE-Z/6 Fj}( EԦӳa`kqh,F]N4An|3?G(#DDM$@&#U;!SjWU9Q+`{UkA}16,xxHH-q.B@-뵢Z٬Pqƞ6n2Ƽ{C!/8Gd@O[zA[7,,םШ76] '8uǰ$HnsLaMQn2;٣y `u>>P.?PCLx0 w@O$ ;t0(k!R5DgvP,4K׬Mh"/"ABݫ=# +|b@/<#ūykOxܨZ(? %24Mksw. {Ae8:lI)-^^c++Rt@\cGtPN8,KˎǗl e-f?`D+z % gHD>!|ֈuZ׳o\ Wyߒ\B{%EL=ȷIl;Iwɮz$};&K'wg]W Lݠ_@|epj + +CqYVرC*N/%?GUjg>dA/gk&O)lӔ\nnzP߆\EdQ)݊s|`jh(n6ч8G:oށ/rJrFF⣳B^:akSy_YzG0g4#'aǮ7 +>]|QQ""R ORg{kޓ ga+̫biQnVIL͢ꇡU4}4~N^#um,X\U8 8Т54 %w=/M1/ ^ ji[F߽m+=jXbq8,G^n6Al$1? 1LeV0pQn1#ig;ݱFݵ t4Mi|m.O q[}ڒQNk`cHy!0>XF5$YeR$eN#XwoEKʉV N[D|]_Nȵ >2žm\@oggjՒɠM81# 9r_|lȉM|ŌdQIݚyw*wOAAv OH I)LMV- Wj(3;XTT%%Esd˼hZkiPeK7PTJpGH]amyG@5xc0!$11ZvZvMٜ[g=nHf&vS8x.e\1!4#,u`IQfBx h2ߣ +Ont +,[\òw,(q +1Z˞``<ʒWe+'@J">'dԊf^_. CP5IPǖ[\^M~_=ӽ[s PnG Wo>vئ +`)T )ARoOf,.`shQXgHNֵ{tEuuS_WE]`[/w5]n-׹.ڥtI.J!_ Y j~Vz&DidiSSOG6gXGW=~ԑR5i~2\BLwUWpZQ6SJOJ.77|=(C.u2Eʍ01>MHucFb|E +~{, /S/): v.:(H'tGr!B0FeՕ~iv@h'K:3O.Wȼ f ;+w;YϷ O~\XPvLXR6 af +ރ7E􀯽mgkCJfu?7ˢ,5adTYo-^vxQƟ $[ Raj-V( +pඁcO~Ew7c^ݞ}ʙW2GF = hTIZ@ Ǔ:)"X;(s{gV +4rrpҙpH!A. )pxլ=S{%Јz'jf$fVZZa*VPagJV$q1>Ջ- Ҥѧ7OU:m<穿My%h< +װ>?~ * CuaCO8>W0,O ^"rb]̯!ۮn܋2/V~SMp`9}X!#CD?K;C 4BeA d^c3 ExEtՊȩYVe˝ %~Pޝ2jE@3i/v\{(Дru(TrK./f3\ R{0Ez4m,J $'wNkԳ:H̬¡TK0˔]mBσ䦖tJ'?z>1 +[K==J_Hbx}5wh;Go/58#=^!KO a|| ZUSnCcm \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc66.dat b/vendor/endroid/qr-code/assets/data/rsc66.dat new file mode 100644 index 000000000..85106ac52 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc66.dat @@ -0,0 +1,68 @@ + NJOO +B"e9vP&ՁPK _@`/Zt> %}Fv$BBP;L+k*lC㙄1>C {Ct#>wa߻}J(^F=R .ZČ,hB'%/:jbFEQq7-O>Bo]-D_踙wzI[ti⧅{2>!\%ۇ"Vm̍ՊĨ}"cMN0_9xF; +qxkIx qV f^ '9|M6ccWxʨj?Z[Ƨ!셙XN1 !R>h͒ omSc4K9@'lQƮM}~$8SB/$ŜebB:|9 xg (vm]ljSZY<7'@'5tIh'[&-A_r&}4k +^ wg e`XX䪊Ǿn#uװS_Z#bñMH7bBӲr-1{u.UYGr5g@Qt,?i.o qNJ)^ z'>O]Y^ $w/B-3C~3hk*jtŇ]jXs>*j]1,a7 +l u +$<fP3u )K1Mnۧ&֓F@$ֵ,>ik9>K'"(2wyy %ն-6ܳR-;ܺVBcopg(bfITb"Qv166sf2.0Ql%1Q97e Q;ͮqC)VcdWV0!S+tŐ7~] +-ꨭp^*4ob,wZ? yp*&wMyƥ1xۃf2SĢCƹ_n5+*$|*R@*P8g:珒>+eK[IU44uL 7 +~ThR羼赕B~#St' Y#p!JlD&9{{Ӓ(\" )\{݅SCײ"ډpjeP:h=Bᡰy0^V4o9A܇YM-1Gz G{,) ɌrD skiYG}"]knVGb`ż V+'i~Z܃ 7T3:DYiOi_۸i$jk4wjd/\5`/}]鈦vv)%DGabc(9b0BE4Fe $pZo\tx`O,99/_tWArȱ{iBCLlnq֗WwUΡũJ1T߲)e$Fd(X$pe$0X-Y|[h˖wySu˟r %6;|n0UQo,ưSg  yPdMO,q8>N)آAguHpq?.^"}H%4t/U{[ r4@٩PnR4w2ůuϡ 6Ju Gu$JE#/@K?T﷝qeSiZHѓ",]9xnOgNNjON8 LZKL=hu&@gV.}[@@㳰!S*:ԬwFˬH?k5¬p4χygpsD8LU+I aCF8}08)F8U ě6n ĄyZby\ @V8;]Yy hUڄGQڟUbDfJLMv|74MY_k..j΀mXA~\{aQcARN|牃;H^oZf5FIgaa[#Mp/"lGHzk?$ +t])V%C@%"YS_fЭ +Tԓ軗#-|TQɺbX:'nec>[Hx5 +svoL~>볔^6eV%3  ?m8%7wEтNZ"XĦӍ9H'pH%M$d2Jq/Z{l*M{Ǥ%Z{kv9i59Ps DbdZXP遬רgk*יkq%(HjGa-x5llủd\G4]`KJb$rn]vA$982,AR Ȯ 1`BϦsV0m##ʛyKf@kF@ͦ 3@Y})SPzGƪJ}TAwL=n**ZEMG"KT"h#x"̤/ϸ j ]Iʁ! +PeeC(ݪQmh>#JUm߇#{LWޒ$X -hÙ0Ԩ4_7I\uަl,C(Ĕl;K pHVt"WE`SLþ iK|jLcu?B׺j*!VX7ٻRATh/ :RV|ēXq-~ToLK* Wb=_KOQI&Q-d)HkDDͻ1# coBNNi +F znp=wV0r9P0QYDR!xSA>R-<c>T TQ.* $ԂB ȡvZoDZ!vZn xV°`z[@^`]0u IIm0'rW2k7ɹ׶̭]s*aC[RovU^AH0o,Y ,n ,IWf7'Q$T.LhKdiE%yo l5I#6| +yDM4xM&rۯv>ZΙkpg"?BowbGٛxP8-݃QxT vCn+y чz1X{u$A쑤rf ؤoCQ\q5L\ O.v$n)sm|^EN$[UFf-\u_FP6~UFh`_WLj'S`7v0җ֟Gi|002tz_}a`}6Wh}r#$%=mZg$b3o5_XG/\V? R쟗LZޟɑ;RleqA<,ĺ' -]R@g2W  oQa D Uܵ:S ;6]$VNY6˥r8cg~N*[a+@A_[2@\LRuHԛa }dnf&tKˈѩҞ0"*Ҿ %mHh +1G^jg^ٺ:/2>^^, +p&S1\0h0@R\0zk.>;>.҄4M(3/"⑱3_YҘ==T!kNtz&m +@N܆OʸrK{<+Pf/* s7O6C]͔byR&#HȇPH{H!`QZ2+QЋ1#o˂+hD/LdFGzv~կ&$GYm~JTOPb-m'4!pſ祤"JlSSvܻ`X}!1*0͑<>)1 +gAmUȝ) #; IÞXpc|/bH|g1Y\սRY??)w#83~QC3\D3Jh^g&h_O4O8'pp=)i\~h!gT#4ܢ_ +Tw{R*ym{sγh=d*aC_l ٗWHcF^~(s':6'CҴ.^#r=Z:<צ,Z0 +Hl}RN3,PjQi;DXQruyܞΜ < +9pq +o a՘z{Lάe',<5QQW֝_}~鞢l~X~H(sI^N4,9R+B}ݑ\ +'{}BTtǙEA2E~jEmh?WSέ5QpV|=<Ϙ^A6D'Eb/9:EUGeܨɂnr$}};¥φp{`+pQRKaup>@+)=l2[/kմWGɸIy 22 -Bzdfs.Dy5CK8vM!]w[H3zcp(vK+Ъ灎#k2uĈ;?퉘Qnh{mMp +:ϩ.8" KEIdK73wGK d)/Yoڭ?W\\՟ԁYڰ?4%¢Ƃ5e4!ivye0"c<"?j!ijKlU3= +&]8=[#=۝Y>uȬ\Y~gğtH A¶F^D ؙM~H6-蕳RcJˆ/lPOduw+뒄W@@ fkjjaYu{,w"<Ӑ& "?i&#ը`vOteXHt%:&{o]$ 1)xv +KPv\ʯlO[<1*|B}8e!ND+2޶+Co*k"Z@) CG̼W~̂>aff{~ p! J5nWÊÅDѰ:Q84rCNͥJG?HFt KKq]b,!ЖE9!k|y,!;9n4. ;<3WgOR,ds^6TWKUJrWEjr9M6YěK${z9.qiG0f9VNxJYNW35'[9ggOWEM/)5I/&T/- +YJoPA +S*];M4ZۜB(( +N7GW]>ߋP,-\>Kü6yw6SɊ֎t;j?ȸhY'HY܉0YsHrpdX<[EA@bEQ4YU5N/ 7s(3?]0p7l*\ +X=>q^_ڠqs;'{`[FF+0 +sɀQf罀aR'􎃑I8-6}i- y[P 6!m# H0b Itrbs0bq\XQU~ev_c9V3zTTi(ݫDe7DFED +k}#U^q mkỒBJZcz3e P`6 򒕼PW Ig W+2K+՛sʆ} PI-Нg| F:4ڝˣFiۡ9HwZwЛ/`g{9w :\Wc׹'_SW%/=eǢ/C扙!CcJMhuu#AnEՏ]iQX1yP)5v@!3DϮ(]7m(::KM;^ t + z^ { 6LAQfߧYZd E a@UMÁҖ &2~Y2i24TGYBnKk$om1?&-\_.=q`I YnxUA>P֐bYд~ߗ6(GB#铡1sM4iE^t9;Zu,ݨޘg)kT?"zL7K6עZRQԎYY3;ANraLB*7|'}L=7>d9e% +US~KW)-kbF4!ބ Mxޙ51Ozvxg`P#ʘwN!eݿǨ'lvzK P~Lz77?:.aϬ>nUv+Ϩ]f`ׂO#Nfr\3dr1*q9pxx }YWBJ|;t(Jw BJXZ( 0dbsZFg-:F#EKL!q{_Ogqjq@wg5;*ޱ3'~Ma׏\[ 0*n^JcLEdp[3 E" _M~ :UX"i.4ף.d/2I-,(VTMJUjʇnLfQͶ|$yCW@xPF5xT <ߟeò 3bh #u Sh {_u(=cU%̰*LxX]L箵Y&L;xNN&?JM/+E:2$:Z,!|.az/`ב˸OoJAx'ofc-s,bS Ȓ$8dtn$yw +kr +G`m4mBgmӂ|Zxs1"3%|e&S;>\TW#t8fD6ahj`$TCfA=@jeL:b堚@+ќ ؜ozN7w)ooH@_{ٴCވ%EBq%Ѭ} +*٧-$` XkajVW@#V$ȻaV\8ܲl8"JS&AjzK`CN:9dօinoqG! &Tq +67ckťgn>7֦tcXmOKc彄 tcMKW\rRa(2`MDU: (s4c`!X_/X+X nNH\ ŭ=J޳A؊*CCw"sm `ʺN\s@5pK52.0mqjﳳIFl S.Q{.Oh6.WLC|'ѭ/1DS~JUy2xz̧YTm 8z5nTeⓁ`6a:!>Ы!3<* --ĎU+9u(pZ +1%>}V}(b +ƇHbbQ[c@̡7}V>) }( ~Wmf{IIBAA4"{&Oe2#HU=;?UUކ?%*(j1 \8HR1`}$>ɨp ˅X\ ^hSfUToFWjMB.de H83Z꾌lŪG6N2}n%`u3#٢iLG*Q +{'n:=spnc 'nCpe\y9(3~ O9``]d追?'e lEСFH .W&Jyz)ڴHf$j2 +r//8Re. 4G^Nz )D.dt=PشnUt5 "&:5 y^>G/~'#3.#(?v#40&5x0Xi;NCZikY{.+)v&-o +Ɠ)y6 on鼶J`~ b]ǝ٘]vwl/ +d@ $Oޢy7ÈiwE3t*&4Evl2HluW6GDLLn1RIZ< +(iq<*KNym;@yX7FpX +=,ipT/'Vϭ gϷd=A5 O=78_+MzjA!d;q-}"N-Vl[;-7<Ns+aXtcyr0= /0qL $M""L󖟋 yO!`DT'a@JKڿ:8 +b&m#ΝOit^|VmmsFw>tyxO2[[C/?2[ԪJDŽk5&Q!]5 Qx+, \)tK}z*p~Ť' pfC86_C .,_uVJr/mP͓[(芊~$x1 :91̷1.,cfz?kyFc;O+K\AÉO[[ǀJ= +uڏ +3 ++g'‚ȓc7j ZR[YǥR)C-zzBY4(g֜:Lݥ2ڑ݉mxV^T@:$n!cu355ݴUG jHGeGpBE T0;납:Q,$:Ĝl5ī6M[LF}ݣB}{GdVy.q? bQ F:$ۋ ,Ȋ4ʴ<r3 r"Zzr 1)inqJ?g=*OS?ւVЈ^!Ȍ=I23ICLHI_";ZڣNch$Bmc=WUD8VVwR@2r̋2_Hc癢WmؑszUWㅥWئkIY?OQ6Bb?{T`,?x|$Rb΂ڷ/]'RFv)!۰>NLrH/f" + ϝ۬YU1 +nߤ{WhqnTsA7Xp9^ĝ88bxݺ .p}m?4eV*nQIMA *|)ߍg~ww/Q}K9 x-v So-Tp$6)'By (zx5%G~~M&UP2O撼iUhKXrVKC?ǫXT C6G;=I9s[(dU}i[uDoEhi&FI@qNQ/w:d =/ڳ ~&3G j-2wI{.RRi0h7+㸸#:<}~om_hJYjUh%Bһ6`=Dxe*D~u""u)*]AZƦAtAlEb2޴yРJ讇-cSO~P:JDB6{S bE{e8M۳X8;15T"WO[LqXiLLĬGõ_#!GY H} [8(EZJJp-jRCe؉E=|^Cc͞V}9 mS/ # e1'68@Oqbln(: +[:&YX:U6~9j\V˴2Z²S;XIDx$=L@8D~ҋLF ,M2Yʰ +7JGtF@}qԿCɭ㎚+bjl3뷂vpaw|i\6cՐRܭ4fnLA))޺H[UQb4RW4$Q4- +9C:؞=}oKxb%T ]lyffI%hci"֣s֭N"H`m(<^}jeaO&컜 pʙB5VdsmšqAV0amTֽDR]e C#9|,Cp*do۪Fu2ںô"w¹4y`R]f# ,#0B@>_j c2%_?u}t7p;hk={W=)~kGGc.<'ybj7=y+WyL2=C ݍ|D}2q ~` '*6YSѺ3o%XB1rBMXB +vrkh\0@vxuUqyf;U/᤬xb@<=\m!oՠ>J#jJ6at%4 a\,[( kX.3[5+ul);u䮹*?s<_]7r$7l {KJ$%Ai?[]`m1+`rjދ@{sOQlX +V+!qq;:H5r(\O/(Ҏ`{r(/2G"uk_fjN _ + >>0l$ʪw|Z),긠-vԾi+ dYkPkgɻ붍rΞu[}]>{^Rjw^L#W{^Z&ǔޠ=":T +vhq䁁! A| )9rex-Aeu\PC;j_2P袻 M(R^vԭ~miN1G5ե`i&K>"xU?0ĊEV<1Bvt jCS.Pٞ ^PPE%^dD5y%A:Ԝ._6h33j4^@nkPf~k`onk'Ta$0g/z|SaE5ռ]vNq8s||`ك2HUI#߉ +RXm]ZaV]0)o3UekV`167gkˏ,gy鏤QN]?5.pMZ+lZk@-# ð\fjѯVeGMRA1vI56Ao;8 T~xS>n.H)ny37SlBڧ"F`@$W#`⸰/2!r21m*]]HEJ~&,C}&uÃ&bVԡ 柞I$a \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc68.dat b/vendor/endroid/qr-code/assets/data/rsc68.dat new file mode 100644 index 000000000..fe53a4491 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc68.dat @@ -0,0 +1,69 @@ +s '<^李wUk"mpશk&kG3X?$Pw " c s '<^李wUk"mpશk&kG3X?$Pw " c N$qx'DAS(o?EIqL֎=(C(f!~H'D7@:i6D|7f<֐=ǽj7><;K׬Ci1vǑtTv /^2A@m7p% +Fa277Z@ʒ<*H ͼVrmoukp`= 4:k5S&L힦ߍ\Rh6yl\\OZϨ*Ɇ{'򘑌"` RY`2#j.;P`{vP,P T.ҍ¾8)hOd7MQ9=mQd/ 4fșn;HX 8; +;N3m\22_͏( D73}M)U3Yn]j'(l@#_&ɑ?>]##O&i2&笘l!@8_)E Hf8Q-xޠM/JUOx// MyJJgHY5 ͱ}R tX +ЫoDQ ^x ED'DLAh^|6^dTr}OeoGpMu1NCc bEjapD0q+pd`՗H7eu+w`/"#?l%}KզIHP.m'CtB!]?(LPv dx8ӷ)}[!am>eWńz{XPJy O&:ԶvZa ?#pX +_k9Jx̟PsMx:x~9E$\VFJzuv+9ɀߛ=;UmĈZՋ ыhH³rFM=y>5L%4`#OG@R?5``4GMwGŰ܁_v1=#.SiŃn  S"_D Ie}fSC6.Sd%Qn>1sޞDsg*o/zyDbCoQ4 ,onښlԣ%gO{YIc&E^G{`֙Lݩǔ[{_{4 Ipjc)E3/g9)~;ѫ Y=[l?u{(p}#d\sJ; @,@awm Lźc4'!a}Hm{^UCgB RLQO4-)AZ:_?otZ?i?%rkȉNկqwX꯷^}ol"+H\>l1lk!+g@*+%FIh̍/%v!p,.vvYf:ڸxr5/y_!Ej)yR6k>f2ۯkuZr"oߤ1@B슿sS +b,4F&?SE+1V~W}΃bX-^FCAҎwTZuK> ۨjzɍ[g zzT,vn& \]|)ې3{ωRU( 2a'<ǩ~q7njǝ2@\tsI%a6<o+J5j zSHKȻ"kzP$Хi@-#4!+]KcB)\(!r4>VZ)!/!T4G`4KAj{]бOzJNr 1ޛJX۟`w,؈JPT r J JSf IF .6x2Y,APA1X$+ ()Aw6CQiXca(;[}^W-`UpЙA\6<]\gu 6"k9DEݗjUFb/Q '?f6Wnx>W#ˬF*nxud(У5ːoF|d, dP@M$nfe&R +f*Pē},bpY|C}RpqfpeAOo;Ibg^m.rimܭNP+>F9L?~|FF(ALcodL ".WE-؟KBpϾRp1Պ qEk-BX6O9 --hqXm0XҼsA}EL{Üo2{MZY]-,0O^ASW^^s7盔c ŐI }j-8ѕ0E6p>}KF|G5]M&;4F5$5Q|b9n[vy:J.G]B+諰}K +-;IEׁNKϼ+>lȹ 7u +"2; bkع3o7b $I5j}7ht1_%WܙmzxYq͜euVŜQ8E%c.a:Ax %=Hh({"6m7c +>ηOB5>FmfS@WEuPzM1ig!L5%,o_V5z5c)D/9 .-Ec99}s~d]jeDI`(x(] '9١hRz0RRދ%sjXW8Nbaٚh#A/e#WGh;0ʖ>\cdl1>>ஓz3@Ӧr~LRkށ=ʇt\'i$NsTOHCU~LfsUU_Hrtcѵ}hA%;CRX:~l/zU華1$<[).xL9f _I:*D3$P7ܮߑr\ȸ,GdSi:C gʅ癭h B'mdŻ4ST:[?܆c='t`2 ߏ.Mʃ*T'Y0~BJ˾<14i6r|! ԗ_jԑ* |꧗ZJ ^L~F6i f 9&|<`qsV3uYon%VYYC^ EDF~JQ/4G\NDxTܖ&* 2}׺i@232&ӿPu=*^`(ߞ5|-ۍB4UAQ,s~PeAAs +ps0R-<$BW UQ%g|& R+ߺ"Q*sAg @**]+)`grNgd㹁߄-"Ԕs7oaEԝ:mg.e5[ }Am[L[Stqe ɴ~wF}(97ZNO6]O1KO@3E^lPp!? _7[°9+Ver 6M7#trk#2[H#{%;Ѭ C1(_H9 nX{>%Z21gʬޚB(V_FR09A;L]1/O5Y+ïwh_ "Rf0 pO;m̨Q2Oi&Ⰴ!Zk03+X^ןF +S^#rR gt~Q.'~yY~J,")iC*;C)uyixR!evjFQABeeXR<| bؑeBV:TVQJx`E6gYU)25{UϠ;]ۃ.JB)N D BbB:yG#`.^>L[l^?jk<~5@գЍy¢{Y ~S D ҕF3:o5bNAt& LMWbpr#{<g`8k]N6C>?2er[B|;$` Au*^BDՄ`uugON>މ2ZI{Vv_d/IϜ*b32ydTIVA 'g6~ZlrY{BĜX-%r!izk1tf +g*2{;~X/TMRF;ѯE+'̳yzx@EyTyf'e$ Gt>5C.bYFrz\mO%Σ¸W\C*6Ns:_#l>įw2ut/"\1Z*fHD h {˟4߻]c>+4nD,ygP!UK \&=]j>L-u‼OeȖDGݔ(rc +"ur#r=,Eթ7ɟ.ݝ4ahw~4:fu5$~ecf-f|,4N6P"8<ӋfAJ̎Et +{Z ǹ + +]2Z?_Z[ Qmub*tp6q$.z&Se*a{|N)p7maar*N1]3zkHW5ꍕ v8t6*x]4€ +3Q 0܀V\d Ⱦ޸H&]ʿž]]$Mo/!zP)&YY/m^Q6|w$.o66c^ S#~V3QRMqJRMvn }i7IF"ϋi3l2ɜB_Lr7OmoOIyWǿP/Ka0k&yJQ`v85޿DF D`@\|Ѕ^JB=}C,XW\(%tߋmcj[^;Gu-Bw8uI@ZĐ`\qbD-˅4$Pa9#n ̐~Ʋ`]W[~{kR-l&yK :|.i,M-:d:CIDE?Uwby c7c[ն820~ZQ$҉㕼NeQBQ0EV㟑6@gqfSk~h $(h:,XgqhیL~"ǦU//2i*9İZ8%"JM!=+I-8;&'LVIIaX=j;͑c;Pn^U} +Fd +!>K| +MWُS]q_ +}XL:R=4aWf-9Pv7ln56 I~b +WҺBVL6۞ ᬊ$3 23dNx7O$, n'Qd.y{u8 JlYx-&OVjw-A3D_bmk[3#`vkk-UN_>&msJjd&4OE e&Wk#D'EIEHWWҫZFhBAV; a:*M;&BOSx.)KC46B.o.VS-CTC ĝyLFx@E0) +P0#R3MPCB h|SRB^B(= hIUhٖE&GCbi+ٝm 4)G|t=)x)o I|5|, z'1M @4wƃaH8۰#>XQ s@#>w1@ +7@\ld;KeX%IWˠ!y킻lҗ1XT]54:ؖTnT=<oM +Nډǂ+qن(bǰHVP1Rlk 8>)P v838Zͪ1/[lxuI9պ[EtɶN!a,COkn4,`,gzi^ +&R\NAٳ,0굁SlD%(*9{r%%3K#<^@N~Ul(OYy| w jgN +rtI|ג"wNNg5#1A3R7 +H _̗L)I5 =y$j~ګ`V^ևd=VUVm(jhܺ vGW~x|_!TwT;=EX]U2뭱"0Co#?/],ʂu'vμq2\9sӚ)LYEʀ] 3TfLٻU-9VFRԖY !CvEѷh1nyGWi3V|arC~.7i+!3P޹Ș*@DS\Z#ca[ $=`E߉0j)Cp.Rlձq[= c| +0y{djC1 bq s WZ%3lr!ZZ⏿ڝ`?e"(Ugmכ%dC.a~ل1#11&n/2ʤZ!Kj<D Y_<)ZX`ۂ;5#WI!,)5nk+5=yZ/p7`$>lU$xPKcu%V!' +NK"ki!`1!̲ e]@0/a&q6/|K'}Y4jLvshjHjr( +m綍1t}\92A V2cB݄:X@a4v O:n T |) y(N$G\>9wK9K}(gZ vY$e7,  -eV|eoM@n!Dd+#v)N8t詓pւfTqDffjp\qXB-qV~KQى,/TH#֭ofncG3[O}2wHMjinۣGbMJ/M&+)3(%O;2C"UfA=8(%Y+4Pذ.YDGYj/uy,x"8!7`c?a%"$pJ\ t$).JE zЕPwDln[|soj|V0.U[҈Ylt;$i󬤝r%"7H`>[*wjܡ wU)] QUe09I'Cb2w BjJkX޾j +}|f~-'éT`F~C~}{ ҩ Q/6(8֞|wfagYa5 jR^>Er{@u\-%Zrr/w&?#QW3>P +C{P"<*xpnKIYҰ]Z ph (SUcA/0I[OYˁ>['CN*r$_?&3`÷ $9J:4p +“),F[?6^=F9a.d\2ѧjegi4!kRʸ2M*WN~^Mɮ_"vA`1|Eƻb||0A;fQe'֡SziN%52J݇x!|ΉK/GO@ñNU ?+ϗkh)At%~{e)g걪dQUчpV(׫apmp%ɦqjs} 0;{Uxo"CMV#vf"zN-"=d\T4Ѩ[N2>"`%{Njaxbh?l=BK 38 K&b]Ġah=$}Hhhuāl;ǎ_R:W< Ea@Un@4?UTce S3m u?ռ33l>YwAr'L](x]=i +\ӳn>'Ě8ؾ9^Q'xy'4NJ)S KVӑXV٬ݍsf=< K܉J[ɬ*3ÆKK:1s#^gh9=].gD{蠿pM_ec t7{"_h}_W(G.aqYl5B&l&ݥ18LTg9@dyociuҀdfd0LcQSc'IzTP9q!yj >Zq UkoN[1ȗw +2*k@ƪ+wwýS?WNzH-[6؎9z<87hwiX-]8ł4k`qZxHg +JL2. a]5Eмfsalmpw)e\c}v ݨ'?/ ++ [IOViDT6:Γ@YITTVR9$0oZD5}n_ŠX| +sI{>3?Ę*0#`??PKiŦVkO>Ƶ3޽':t\8jkA3*"}S@3]358.,!O+? swku*$ݏo3flWX[h (lX{Xr"m 5T̴sW<0濑<(Prkn+Ml'˫0bofYؠB~ ny߶!B, pL;Fa7*>t[j'{p.ULx}rV0al5n8F])6 FdFJvmE>Gx25ɯŎs_W?nBϖzRw@oWΖq7RjAeR-EӀaCU]L5Bō " fD~5?m0+/kn2`++5 4nxzgn]L; O?qP<>@B*MY&Ӣe@Ɂ̠z*3&@@zvZz+#c)jK;4b7Kr:[VnL'잾گILpL7[us\0 c=/CWXV)h.~'Үd{Z5'B9:>I'V'p코Rf鉱|SƗ)ܕmyPE`rBIqoycd>: tr<늪N>@sՔ>F=_q cW^$6i~lm,Aj *UJXlK*N7a*\Q[{t'm^AZCGdh{-pC!Uԝ+8vJ)wK3W>a`cŚnSQnib?sK6v5%PJ,b 6o'n.HҦTv:e/-[qe_{7q!K`=)r wϥKgK)5)O@۠&!xȏCxMGQV fP=űe A qtR=;-LI=Ci5QOٓVsFK1ksRW36Hor +,4NQÈav 6,,9oQGظQx*fZY BOs_Bʞp!8y_G& #EzGG~E:MEY5 +rB 8yI&C{񷪳XbLmϟ0ّX(mmS+ƒ +c_obtQk_ "wtP8è : Y4ORwHnP6ϔd!LZ6¹U'dŵrY }cUWE~|Ѓe'=$lG=1|[bPu{4yrܰ$|4J4db6EG)sP S `7 Bʺ^._7jbM\_l_/K<uECNdr+h ,}T+>ry 9vS eb/^-SS;j qaVCc'[,9ӵD +63.`uUY2ܦ8+l_ ӾY88|Soy5듳w2M6 Ϣ:d҅mL}BE1`YCfV M=# (J`;goUʹ3c(m;sA֯͞8f7xdo+  #F{xzc0y\B {cqc< +\\;þ錍m54Sk?x*T:S/HvkB^W{[HLUH]֨J=Sq98Kbէ1b +FyеRct-ūѽ +=\#7tՠ(Wtjm,*+Ev$8pF!tu`T1!§`ʢ`rZ|Vtu  XÊz-3 ۄdf=R_p e^S IL0U-YsD ! :/(aOZf+Tp:҂Iyx ,дk֢nSuR|s +a6_͢\>Nu[XGD R%sT}vSb%0w[ZїKgwzwyFn]POk3<Ç2XTVRyau}BK2ԌA9ʰxԥk?`>frhwuܝL6IH!pe]/B啁51b.e6IBSY Mݯ'o29@c4*eO8@ ~ǟ=|xm_@ĭ?tߢ9!׊lβRdjeFU,1&` xG,]vaځjšh1:}]v1;\ {WɔERG(%1{{@۹7_t$iS*;F\|Wؼ~TQt+^ug3(քż:)&ѱMz+rpu #Ļ \ No newline at end of file diff --git a/vendor/endroid/qr-code/assets/data/rsc7.dat b/vendor/endroid/qr-code/assets/data/rsc7.dat new file mode 100644 index 000000000..5d50131e2 --- /dev/null +++ b/vendor/endroid/qr-code/assets/data/rsc7.dat @@ -0,0 +1,8 @@ +z Duz Du)Uꁎ̟R, ɞ'I{:#`{[1VIX>S^!Ne^yE>tFAxlGS3߶bEi٣U4܉6pv]|Ǧ"}cB89=|}.m ÈɁU|.~kj؎fB*q#E9g0c$ҫ[9}h$0v,slku`Qetb7Z!DG%;KbLP p%rv.6z'%3c8e\ @~;5 uw+\repyLZАQf7 T&sS'[FXF r`q + HKCp68 éGܶIr ɑyH`'X7eW(d|ݙ2U/֐)Zi;ʃfwnBi^ʿ鿑J%5?vĘO g ` JjbDAz5\l唖W(NJfƋm +gpa,uc{%Y︩" 4vjKa X2+>IT`p5NŰDZn8;s|N<6F P/}/\kOd^0+=MR"Gf8vYB]Rn,#OStDE3͕uLx~9c 8C&-hHM c?r +;Jj~A_ :1-]@1&(;md0R*08ݔUJyk],jw״ӳ51C"P=JKنHǜϑ0Nj 3G{tI/e2>XkHT-kJ}ljmO$/hw7D2iM޾9-h6?LAd>鸌 KV4|)NSwSjsx׺za7 P[Ȼ[.I5F~6O(]M: ۖmZA2)a9Fhg&Չ' qxzdӎYb'Q]=&ܮT\F +{4o_A$*MC^Er:ZxNQ%C +$%Qƻ_ʂΜqn eAgb/XxU^sɍ}.#BTIL +PT1_DC,6=5.4", + "ext-gd": "*", + "symfony/options-resolver": "^2.3|^3.0" + }, + "require-dev": { + "symfony/browser-kit": "^2.3|^3.0", + "symfony/framework-bundle": "^2.3|^3.0", + "symfony/http-kernel": "^2.3|^3.0", + "sensio/framework-extra-bundle": "^3.0", + "phpunit/phpunit": "^4.0|^5.0" + }, + "autoload": { + "psr-4": { + "Endroid\\QrCode\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Endroid\\QrCode\\Tests\\": "tests/" + } + }, + "config": { + "bin-dir": "bin" + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + } +} diff --git a/vendor/endroid/qr-code/phpunit.xml.dist b/vendor/endroid/qr-code/phpunit.xml.dist new file mode 100644 index 000000000..0b5f706bc --- /dev/null +++ b/vendor/endroid/qr-code/phpunit.xml.dist @@ -0,0 +1,11 @@ + + + + + tests + + + + + + diff --git a/vendor/endroid/qr-code/src/Bundle/Controller/QrCodeController.php b/vendor/endroid/qr-code/src/Bundle/Controller/QrCodeController.php new file mode 100644 index 000000000..93d0425bc --- /dev/null +++ b/vendor/endroid/qr-code/src/Bundle/Controller/QrCodeController.php @@ -0,0 +1,50 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Endroid\QrCode\Bundle\Controller; + +use Endroid\QrCode\Factory\QrCodeFactory; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; +use Symfony\Bundle\FrameworkBundle\Controller\Controller; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpFoundation\Request; + +/** + * QR code controller. + */ +class QrCodeController extends Controller +{ + /** + * @Route("/{text}.{extension}", name="endroid_qrcode", requirements={"text"="[\w\W]+", "extension"="jpg|png|gif"}) + */ + public function generateAction(Request $request, $text, $extension) + { + $options = $request->query->all(); + + $qrCode = $this->getQrCodeFactory()->createQrCode($options); + $qrCode->setText($text); + + $mime_type = 'image/'.$extension; + if ($extension == 'jpg') { + $mime_type = 'image/jpeg'; + } + + return new Response($qrCode->get($extension), 200, ['Content-Type' => $mime_type]); + } + + /** + * Returns the QR code factory. + * + * @return QrCodeFactory + */ + protected function getQrCodeFactory() + { + return $this->get('endroid.qrcode.factory'); + } +} diff --git a/vendor/endroid/qr-code/src/Bundle/DependencyInjection/Configuration.php b/vendor/endroid/qr-code/src/Bundle/DependencyInjection/Configuration.php new file mode 100644 index 000000000..ca1c724fa --- /dev/null +++ b/vendor/endroid/qr-code/src/Bundle/DependencyInjection/Configuration.php @@ -0,0 +1,60 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Endroid\QrCode\Bundle\DependencyInjection; + +use Symfony\Component\Config\Definition\Builder\TreeBuilder; +use Symfony\Component\Config\Definition\ConfigurationInterface; + +class Configuration implements ConfigurationInterface +{ + public function getConfigTreeBuilder() + { + $treeBuilder = new TreeBuilder(); + + $treeBuilder + ->root('endroid_qr_code') + ->children() + ->integerNode('size')->min(0)->defaultValue(200)->end() + ->integerNode('padding')->min(0)->end() + ->scalarNode('label')->end() + ->integerNode('label_font_size')->end() + ->scalarNode('label_font_path')->end() + ->scalarNode('extension')->end() + ->scalarNode('error_correction_level') + ->validate() + ->ifTrue(function ($value) { + return !defined('Endroid\QrCode\QrCode::LEVEL_'.strtoupper($value)); + }) + ->thenInvalid('Invalid error correction level "%s"') + ->end() + ->end() + ->arrayNode('foreground_color') + ->children() + ->scalarNode('r')->isRequired()->end() + ->scalarNode('g')->isRequired()->end() + ->scalarNode('b')->isRequired()->end() + ->scalarNode('a')->isRequired()->end() + ->end() + ->end() + ->arrayNode('background_color') + ->children() + ->scalarNode('r')->isRequired()->end() + ->scalarNode('g')->isRequired()->end() + ->scalarNode('b')->isRequired()->end() + ->scalarNode('a')->isRequired()->end() + ->end() + ->end() + ->end() + ->end() + ; + + return $treeBuilder; + } +} diff --git a/vendor/endroid/qr-code/src/Bundle/DependencyInjection/EndroidQrCodeExtension.php b/vendor/endroid/qr-code/src/Bundle/DependencyInjection/EndroidQrCodeExtension.php new file mode 100644 index 000000000..31b3d98d1 --- /dev/null +++ b/vendor/endroid/qr-code/src/Bundle/DependencyInjection/EndroidQrCodeExtension.php @@ -0,0 +1,34 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Endroid\QrCode\Bundle\DependencyInjection; + +use Symfony\Component\Config\Definition\Processor; +use Symfony\Component\HttpKernel\DependencyInjection\Extension; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; +use Symfony\Component\Config\FileLocator; + +class EndroidQrCodeExtension extends Extension +{ + /** + * {@inheritdoc} + */ + public function load(array $configs, ContainerBuilder $container) + { + $processor = new Processor(); + $config = $processor->processConfiguration(new Configuration(), $configs); + + $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); + $loader->load('services.yml'); + + $factoryDefinition = $container->getDefinition('endroid.qrcode.factory'); + $factoryDefinition->setArguments([$config]); + } +} diff --git a/vendor/endroid/qr-code/src/Bundle/EndroidQrCodeBundle.php b/vendor/endroid/qr-code/src/Bundle/EndroidQrCodeBundle.php new file mode 100644 index 000000000..01a0e94d7 --- /dev/null +++ b/vendor/endroid/qr-code/src/Bundle/EndroidQrCodeBundle.php @@ -0,0 +1,16 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Endroid\QrCode\Bundle; + +use Symfony\Component\HttpKernel\Bundle\Bundle; + +class EndroidQrCodeBundle extends Bundle +{ +} diff --git a/vendor/endroid/qr-code/src/Bundle/Resources/config/services.yml b/vendor/endroid/qr-code/src/Bundle/Resources/config/services.yml new file mode 100644 index 000000000..ee6436b9e --- /dev/null +++ b/vendor/endroid/qr-code/src/Bundle/Resources/config/services.yml @@ -0,0 +1,10 @@ +services: + endroid.qrcode.factory: + class: Endroid\QrCode\Factory\QrCodeFactory + + endroid.qrcode.twig.extension: + class: Endroid\QrCode\Bundle\Twig\Extension\QrCodeExtension + tags: + - { name: twig.extension } + calls: + - [ setContainer, [ '@service_container' ] ] diff --git a/vendor/endroid/qr-code/src/Bundle/Twig/Extension/QrCodeExtension.php b/vendor/endroid/qr-code/src/Bundle/Twig/Extension/QrCodeExtension.php new file mode 100644 index 000000000..f4321f453 --- /dev/null +++ b/vendor/endroid/qr-code/src/Bundle/Twig/Extension/QrCodeExtension.php @@ -0,0 +1,99 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Endroid\QrCode\Bundle\Twig\Extension; + +use Endroid\QrCode\Factory\QrCodeFactory; +use Symfony\Component\DependencyInjection\ContainerAwareTrait; +use Symfony\Component\Routing\RouterInterface; +use Twig_Extension; +use Symfony\Component\DependencyInjection\ContainerAwareInterface; +use Twig_SimpleFunction; + +class QrCodeExtension extends Twig_Extension implements ContainerAwareInterface +{ + use ContainerAwareTrait; + + /** + * {@inheritdoc} + */ + public function getFunctions() + { + return [ + new Twig_SimpleFunction('qrcode_url', [$this, 'qrcodeUrlFunction']), + new Twig_SimpleFunction('qrcode_data_uri', [$this, 'qrcodeDataUriFunction']), + ]; + } + + /** + * Creates the QR code URL corresponding to the given message. + * + * @param string $text + * @param array $options + * + * @return string + */ + public function qrcodeUrlFunction($text, array $options = []) + { + $params = $options; + $params['text'] = $text; + + // Extension is a mandatory route parameter: if not set retrieve from defaults + if (!isset($params['extension'])) { + $defaultOptions = $this->getQrCodeFactory()->getDefaultOptions(); + $params['extension'] = $defaultOptions['extension']; + } + + return $this->getRouter()->generate('endroid_qrcode', $params); + } + + /** + * Creates the QR code data corresponding to the given message. + * + * @param string $text + * @param array $options + * + * @return string + */ + public function qrcodeDataUriFunction($text, array $options = []) + { + $qrCode = $this->getQrCodeFactory()->createQrCode($options); + $qrCode->setText($text); + + return $qrCode->getDataUri(); + } + + /** + * Returns the router. + * + * @return RouterInterface + */ + protected function getRouter() + { + return $this->container->get('router'); + } + + /** + * Returns the QR code factory. + * + * @return QrCodeFactory + */ + protected function getQrCodeFactory() + { + return $this->container->get('endroid.qrcode.factory'); + } + + /** + * {@inheritdoc} + */ + public function getName() + { + return 'endroid_qrcode'; + } +} diff --git a/vendor/endroid/qr-code/src/Exceptions/DataDoesntExistsException.php b/vendor/endroid/qr-code/src/Exceptions/DataDoesntExistsException.php new file mode 100644 index 000000000..8f1b5608a --- /dev/null +++ b/vendor/endroid/qr-code/src/Exceptions/DataDoesntExistsException.php @@ -0,0 +1,14 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Endroid\QrCode\Exceptions; + +class DataDoesntExistsException extends \Exception +{ +} diff --git a/vendor/endroid/qr-code/src/Exceptions/FreeTypeLibraryMissingException.php b/vendor/endroid/qr-code/src/Exceptions/FreeTypeLibraryMissingException.php new file mode 100644 index 000000000..34e6da7fa --- /dev/null +++ b/vendor/endroid/qr-code/src/Exceptions/FreeTypeLibraryMissingException.php @@ -0,0 +1,14 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Endroid\QrCode\Exceptions; + +class FreeTypeLibraryMissingException extends \Exception +{ +} diff --git a/vendor/endroid/qr-code/src/Exceptions/ImageFunctionFailedException.php b/vendor/endroid/qr-code/src/Exceptions/ImageFunctionFailedException.php new file mode 100644 index 000000000..98bc3c054 --- /dev/null +++ b/vendor/endroid/qr-code/src/Exceptions/ImageFunctionFailedException.php @@ -0,0 +1,14 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Endroid\QrCode\Exceptions; + +class ImageFunctionFailedException extends \Exception +{ +} diff --git a/vendor/endroid/qr-code/src/Exceptions/ImageFunctionUnknownException.php b/vendor/endroid/qr-code/src/Exceptions/ImageFunctionUnknownException.php new file mode 100644 index 000000000..6d75064ff --- /dev/null +++ b/vendor/endroid/qr-code/src/Exceptions/ImageFunctionUnknownException.php @@ -0,0 +1,14 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Endroid\QrCode\Exceptions; + +class ImageFunctionUnknownException extends \Exception +{ +} diff --git a/vendor/endroid/qr-code/src/Exceptions/ImageSizeTooLargeException.php b/vendor/endroid/qr-code/src/Exceptions/ImageSizeTooLargeException.php new file mode 100644 index 000000000..ec9f7ce4f --- /dev/null +++ b/vendor/endroid/qr-code/src/Exceptions/ImageSizeTooLargeException.php @@ -0,0 +1,14 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Endroid\QrCode\Exceptions; + +class ImageSizeTooLargeException extends \Exception +{ +} diff --git a/vendor/endroid/qr-code/src/Exceptions/ImageTypeInvalidException.php b/vendor/endroid/qr-code/src/Exceptions/ImageTypeInvalidException.php new file mode 100644 index 000000000..5388140bb --- /dev/null +++ b/vendor/endroid/qr-code/src/Exceptions/ImageTypeInvalidException.php @@ -0,0 +1,14 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Endroid\QrCode\Exceptions; + +class ImageTypeInvalidException extends \Exception +{ +} diff --git a/vendor/endroid/qr-code/src/Exceptions/VersionTooLargeException.php b/vendor/endroid/qr-code/src/Exceptions/VersionTooLargeException.php new file mode 100644 index 000000000..baa768657 --- /dev/null +++ b/vendor/endroid/qr-code/src/Exceptions/VersionTooLargeException.php @@ -0,0 +1,14 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Endroid\QrCode\Exceptions; + +class VersionTooLargeException extends \Exception +{ +} diff --git a/vendor/endroid/qr-code/src/Factory/QrCodeFactory.php b/vendor/endroid/qr-code/src/Factory/QrCodeFactory.php new file mode 100644 index 000000000..2d9795e8d --- /dev/null +++ b/vendor/endroid/qr-code/src/Factory/QrCodeFactory.php @@ -0,0 +1,122 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Endroid\QrCode\Factory; + +use Endroid\QrCode\QrCode; +use Symfony\Component\OptionsResolver\OptionsResolver; + +class QrCodeFactory +{ + /** + * @var OptionsResolver + */ + protected $optionsResolver; + + /** + * Creates a new instance. + * + * @param array $defaults + */ + public function __construct(array $defaults = []) + { + $defaults = array_merge($this->getAvailableOptions(), $defaults); + $this->optionsResolver = new OptionsResolver(); + $this->optionsResolver->setDefaults($defaults); + } + + /** + * Creates a QR code. + * + * @param array $options + * + * @return QrCode + */ + public function createQrCode(array $options = []) + { + $options = $this->optionsResolver->resolve($options); + + $qrCode = new QrCode(); + + if (isset($options['text']) && !is_null($options['text'])) { + $qrCode->setText($options['text']); + } + + if (isset($options['size']) && !is_null($options['size'])) { + $qrCode->setSize($options['size']); + } + + if (isset($options['padding']) && !is_null($options['padding'])) { + $qrCode->setPadding($options['padding']); + } + + if (isset($options['extension']) && !is_null($options['extension'])) { + $qrCode->setExtension($options['extension']); + } + + if (isset($options['error_correction_level']) && !is_null($options['error_correction_level'])) { + $qrCode->setErrorCorrection($options['error_correction_level']); + } + + if (isset($options['foreground_color']) && !is_null($options['foreground_color'])) { + $qrCode->setForegroundColor($options['foreground_color']); + } + + if (isset($options['background_color']) && !is_null($options['background_color'])) { + $qrCode->setBackgroundColor($options['background_color']); + } + + if (isset($options['label']) && !is_null($options['label'])) { + $qrCode->setLabel($options['label']); + } + + if (isset($options['label_font_size']) && !is_null($options['label_font_size'])) { + $qrCode->setLabelFontSize($options['label_font_size']); + } + + if (isset($options['label_font_path']) && !is_null($options['label_font_path'])) { + $qrCode->setLabelFontPath($options['label_font_path']); + } + + return $qrCode; + } + + /** + * Returns all available options. + * + * @return array + */ + public function getAvailableOptions() + { + $options = [ + 'text' => null, + 'size' => null, + 'extension' => null, + 'error_correction_level' => null, + 'foreground_color' => null, + 'background_color' => null, + 'padding' => null, + 'label' => null, + 'label_font_size' => null, + 'label_font_path' => null, + ]; + + return $options; + } + + /** + * Returns the current defaults. + * + * @return array + */ + public function getDefaultOptions() + { + return $this->optionsResolver->resolve(); + } +} diff --git a/vendor/endroid/qr-code/src/QrCode.php b/vendor/endroid/qr-code/src/QrCode.php new file mode 100644 index 000000000..b128cfc42 --- /dev/null +++ b/vendor/endroid/qr-code/src/QrCode.php @@ -0,0 +1,1591 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Endroid\QrCode; + +use Endroid\QrCode\Exceptions\DataDoesntExistsException; +use Endroid\QrCode\Exceptions\FreeTypeLibraryMissingException; +use Endroid\QrCode\Exceptions\ImageFunctionFailedException; +use Endroid\QrCode\Exceptions\ImageTypeInvalidException; +use Endroid\QrCode\Exceptions\VersionTooLargeException; +use Endroid\QrCode\Exceptions\ImageSizeTooLargeException; +use Endroid\QrCode\Exceptions\ImageFunctionUnknownException; +use ReflectionFunction; + +/** + * Generate QR Code. + */ +class QrCode +{ + /** @const int Error Correction Level Low (7%) */ + const LEVEL_LOW = 1; + + /** @const int Error Correction Level Medium (15%) */ + const LEVEL_MEDIUM = 0; + + /** @const int Error Correction Level Quartile (25%) */ + const LEVEL_QUARTILE = 3; + + /** @const int Error Correction Level High (30%) */ + const LEVEL_HIGH = 2; + + /** @const string Image type png */ + const IMAGE_TYPE_PNG = 'png'; + + /** @const string Image type gif */ + const IMAGE_TYPE_GIF = 'gif'; + + /** @const string Image type jpeg */ + const IMAGE_TYPE_JPEG = 'jpeg'; + + /** @const string Image type wbmp */ + const IMAGE_TYPE_WBMP = 'wbmp'; + + /** @const int Horizontal label alignment to the center of image */ + const LABEL_HALIGN_CENTER = 0; + + /** @const int Horizontal label alignment to the left side of image */ + const LABEL_HALIGN_LEFT = 1; + + /** @const int Horizontal label alignment to the left border of QR Code */ + const LABEL_HALIGN_LEFT_BORDER = 2; + + /** @const int Horizontal label alignment to the left side of QR Code */ + const LABEL_HALIGN_LEFT_CODE = 3; + + /** @const int Horizontal label alignment to the right side of image */ + const LABEL_HALIGN_RIGHT = 4; + + /** @const int Horizontal label alignment to the right border of QR Code */ + const LABEL_HALIGN_RIGHT_BORDER = 5; + + /** @const int Horizontal label alignment to the right side of QR Code */ + const LABEL_HALIGN_RIGHT_CODE = 6; + + /** @const int Vertical label alignment to the top */ + const LABEL_VALIGN_TOP = 1; + + /** @const int Vertical label alignment to the top and hide border */ + const LABEL_VALIGN_TOP_NO_BORDER = 2; + + /** @const int Vertical label alignment to the middle*/ + const LABEL_VALIGN_MIDDLE = 3; + + /** @const int Vertical label alignment to the bottom */ + const LABEL_VALIGN_BOTTOM = 4; + + /** @var string */ + protected $logo = null; + + protected $logo_size = 48; + + /** @var string */ + protected $text = ''; + + /** @var int */ + protected $size = 0; + + /** @var int */ + protected $padding = 16; + + /** @var bool */ + protected $draw_quiet_zone = false; + + /** @var bool */ + protected $draw_border = false; + + /** @var array */ + protected $color_foreground = ['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0]; + + /** @var array */ + protected $color_background = ['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0]; + + /** @var string */ + protected $label = ''; + + /** @var int */ + protected $label_font_size = 16; + + /** @var string */ + protected $label_font_path = ''; + + /** @var int */ + protected $label_halign = self::LABEL_HALIGN_CENTER; + + /** @var int */ + protected $label_valign = self::LABEL_VALIGN_MIDDLE; + + /** @var resource */ + protected $image = null; + + /** @var int */ + protected $version; + + /** @var int */ + protected $error_correction = self::LEVEL_MEDIUM; + + /** @var array */ + protected $error_corrections_available = [ + self::LEVEL_LOW, + self::LEVEL_MEDIUM, + self::LEVEL_QUARTILE, + self::LEVEL_HIGH, + ]; + + /** @var int */ + protected $module_size; + + /** @var string */ + protected $image_type = self::IMAGE_TYPE_PNG; + + /** @var array */ + protected $image_types_available = [ + self::IMAGE_TYPE_GIF, + self::IMAGE_TYPE_PNG, + self::IMAGE_TYPE_JPEG, + self::IMAGE_TYPE_WBMP, + ]; + + /** @var string */ + protected $image_path; + + /** @var string */ + protected $path; + + /** @var int */ + protected $structure_append_n; + + /** @var int */ + protected $structure_append_m; + + /** @var int */ + protected $structure_append_parity; + + /** @var string */ + protected $structure_append_original_data; + + /** + * Class constructor. + * + * @param string $text + */ + public function __construct($text = '') + { + $this->setPath(__DIR__.'/../assets/data'); + $this->setImagePath(__DIR__.'/../assets/image'); + $this->setLabelFontPath(__DIR__.'/../assets/font/opensans.ttf'); + $this->setText($text); + } + + /** + * Set structure append. + * + * @param int $n + * @param int $m + * @param int $parity Parity + * @param string $original_data Original data + * + * @return QrCode + */ + public function setStructureAppend($n, $m, $parity, $original_data) + { + $this->structure_append_n = $n; + $this->structure_append_m = $m; + $this->structure_append_parity = $parity; + $this->structure_append_original_data = $original_data; + + return $this; + } + + /** + * Set QR Code version. + * + * @param int $version QR Code version + * + * @return QrCode + */ + public function setVersion($version) + { + if ($version <= 40 && $version >= 0) { + $this->version = $version; + } + + return $this; + } + + /** + * Return QR Code version. + * + * @return int + */ + public function getVersion() + { + return $this->version; + } + + /** + * Set QR Code error correction level. + * + * @param mixed $error_correction Error Correction Level + * + * @return QrCode + */ + public function setErrorCorrection($error_correction) + { + if (!is_numeric($error_correction)) { + $level_constant = 'Endroid\QrCode\QrCode::LEVEL_'.strtoupper($error_correction); + $error_correction = constant($level_constant); + } + + if (in_array($error_correction, $this->error_corrections_available)) { + $this->error_correction = $error_correction; + } + + return $this; + } + + /** + * Return QR Code error correction level. + * + * @return int + */ + public function getErrorCorrection() + { + return $this->error_correction; + } + + /** + * Set QR Code module size. + * + * @param int $module_size Module size + * + * @return QrCode + */ + public function setModuleSize($module_size) + { + $this->module_size = $module_size; + + return $this; + } + + /** + * Return QR Code module size. + * + * @return int + */ + public function getModuleSize() + { + return $this->module_size; + } + + /** + * Set image type for rendering. + * + * @param string $image_type Image type + * + * @return QrCode + * + * @throws ImageTypeInvalidException + */ + public function setImageType($image_type) + { + if (!in_array($image_type, $this->image_types_available)) { + throw new ImageTypeInvalidException('QRCode: image type '.$image_type.' is invalid.'); + } + + $this->image_type = $image_type; + + return $this; + } + + /** + * Return image type for rendering. + * + * @return string + */ + public function getImageType() + { + return $this->image_type; + } + + /** + * Set image type for rendering via extension. + * + * @param string $extension Image extension + * + * @return QrCode + */ + public function setExtension($extension) + { + if ($extension == 'jpg') { + $this->setImageType('jpeg'); + } else { + $this->setImageType($extension); + } + + return $this; + } + + /** + * Set path to the images directory. + * + * @param string $image_path Image directory + * + * @return QrCode + */ + public function setImagePath($image_path) + { + $this->image_path = $image_path; + + return $this; + } + + /** + * Return path to the images directory. + * + * @return string + */ + public function getImagePath() + { + return $this->image_path; + } + + /** + * Set path to the data directory. + * + * @param string $path Data directory + * + * @return QrCode + */ + public function setPath($path) + { + $this->path = $path; + + return $this; + } + + /** + * Return path to the data directory. + * + * @return string + */ + public function getPath() + { + return $this->path; + } + + /** + * Set logo in QR Code. + * + * @param string $logo Logo Path + * + * @throws Exceptions\DataDoesntExistsException + * + * @return QrCode + */ + public function setLogo($logo) + { + if (!file_exists($logo)) { + throw new DataDoesntExistsException("$logo file does not exist"); + } + + $this->logo = $logo; + + return $this; + } + + /** + * Set logo size in QR Code(default 48). + * + * @param int $logo_size Logo Size + * + * @return QrCode + */ + public function setLogoSize($logo_size) + { + $this->logo_size = $logo_size; + + return $this; + } + + /** + * Set text to hide in QR Code. + * + * @param string $text Text to hide + * + * @return QrCode + */ + public function setText($text) + { + $this->text = $text; + + return $this; + } + + /** + * Return text that will be hid in QR Code. + * + * @return string + */ + public function getText() + { + return $this->text; + } + + /** + * Set QR Code size (width). + * + * @param int $size Width of the QR Code + * + * @return QrCode + */ + public function setSize($size) + { + $this->size = $size; + + return $this; + } + + /** + * Return QR Code size (width). + * + * @return int + */ + public function getSize() + { + return $this->size; + } + + /** + * Set padding around the QR Code. + * + * @param int $padding Padding around QR Code + * + * @return QrCode + */ + public function setPadding($padding) + { + $this->padding = $padding; + + return $this; + } + + /** + * Return padding around the QR Code. + * + * @return int + */ + public function getPadding() + { + return $this->padding; + } + + /** + * Set draw required four-module wide margin. + * + * @param bool $draw_quiet_zone State of required four-module wide margin drawing + * + * @return QrCode + */ + public function setDrawQuietZone($draw_quiet_zone) + { + $this->draw_quiet_zone = $draw_quiet_zone; + + return $this; + } + + /** + * Return draw required four-module wide margin. + * + * @return bool + */ + public function getDrawQuietZone() + { + return $this->draw_quiet_zone; + } + + /** + * Set draw border around QR Code. + * + * @param bool $draw_border State of border drawing + * + * @return QrCode + */ + public function setDrawBorder($draw_border) + { + $this->draw_border = $draw_border; + + return $this; + } + + /** + * Return draw border around QR Code. + * + * @return bool + */ + public function getDrawBorder() + { + return $this->draw_border; + } + + /** + * Set QR Code label (text). + * + * @param int|string $label Label to print under QR code + * + * @return QrCode + */ + public function setLabel($label) + { + $this->label = $label; + + return $this; + } + + /** + * Return QR Code label (text). + * + * @return string + */ + public function getLabel() + { + return $this->label; + } + + /** + * Set QR Code label font size. + * + * @param int $label_font_size Font size of the QR code label + * + * @return QrCode + */ + public function setLabelFontSize($label_font_size) + { + $this->label_font_size = $label_font_size; + + return $this; + } + + /** + * Return QR Code label font size. + * + * @return int + */ + public function getLabelFontSize() + { + return $this->label_font_size; + } + + /** + * Set QR Code label font path. + * + * @param int $label_font_path Path to the QR Code label's TTF font file + * + * @return QrCode + */ + public function setLabelFontPath($label_font_path) + { + $this->label_font_path = $label_font_path; + + return $this; + } + + /** + * Return path to the QR Code label's TTF font file. + * + * @return string + */ + public function getLabelFontPath() + { + return $this->label_font_path; + } + + /** + * Set label horizontal alignment. + * + * @param int $label_halign Label horizontal alignment + * + * @return QrCode + */ + public function setLabelHalign($label_halign) + { + $this->label_halign = $label_halign; + + return $this; + } + + /** + * Return label horizontal alignment. + * + * @return int + */ + public function getLabelHalign() + { + return $this->label_halign; + } + + /** + * Set label vertical alignment. + * + * @param int $label_valign Label vertical alignment + * + * @return QrCode + */ + public function setLabelValign($label_valign) + { + $this->label_valign = $label_valign; + + return $this; + } + + /** + * Return label vertical alignment. + * + * @return int + */ + public function getLabelValign() + { + return $this->label_valign; + } + + /** + * Set foreground color of the QR Code. + * + * @param array $color_foreground RGB color + * + * @return QrCode + */ + public function setForegroundColor($color_foreground) + { + if (!isset($color_foreground['a'])) { + $color_foreground['a'] = 0; + } + + $this->color_foreground = $color_foreground; + + return $this; + } + + /** + * Return foreground color of the QR Code. + * + * @return array + */ + public function getForegroundColor() + { + return $this->color_foreground; + } + + /** + * Set background color of the QR Code. + * + * @param array $color_background RGB color + * + * @return QrCode + */ + public function setBackgroundColor($color_background) + { + if (!isset($color_background['a'])) { + $color_background['a'] = 0; + } + + $this->color_background = $color_background; + + return $this; + } + + /** + * Return background color of the QR Code. + * + * @return array + */ + public function getBackgroundColor() + { + return $this->color_background; + } + + /** + * Return the image resource. + * + * @return resource + */ + public function getImage() + { + if (empty($this->image)) { + $this->create(); + } + + return $this->image; + } + + /** + * Return the data URI. + * + * @return string + */ + public function getDataUri() + { + if (empty($this->image)) { + $this->create(); + } + + ob_start(); + call_user_func('image'.$this->image_type, $this->image); + $contents = ob_get_clean(); + + return 'data:image/'.$this->image_type.';base64,'.base64_encode($contents); + } + + /** + * Render the QR Code then save it to given file name. + * + * @param string $filename File name of the QR Code + * + * @return QrCode + */ + public function save($filename) + { + $this->render($filename); + + return $this; + } + + /** + * Render the QR Code then save it to given file name or + * output it to the browser when file name omitted. + * + * @param null|string $filename File name of the QR Code + * @param null|string $format Format of the file (png, jpeg, jpg, gif, wbmp) + * + * @throws ImageFunctionUnknownException + * @throws ImageFunctionFailedException + * + * @return QrCode + */ + public function render($filename = null, $format = 'png') + { + $this->create(); + + if ($format == 'jpg') { + $format = 'jpeg'; + } + + if (!in_array($format, $this->image_types_available)) { + $format = $this->image_type; + } + + if (!function_exists('image'.$format)) { + throw new ImageFunctionUnknownException('QRCode: function image'.$format.' does not exists.'); + } + + if ($filename === null) { + $success = call_user_func('image'.$format, $this->image); + } else { + $success = call_user_func_array('image'.$format, [$this->image, $filename]); + } + + if ($success === false) { + throw new ImageFunctionFailedException('QRCode: function image'.$format.' failed.'); + } + + return $this; + } + + /** + * Returns the content type corresponding to the image type. + * + * @return string + */ + public function getContentType() + { + $contentType = 'image/'.$this->image_type; + + return $contentType; + } + + /** + * Create QR Code and return its content. + * + * @param string|null $format Image type (gif, png, wbmp, jpeg) + * + * @throws ImageFunctionUnknownException + * @throws ImageFunctionFailedException + * + * @return string + */ + public function get($format = null) + { + $this->create(); + + if ($format == 'jpg') { + $format = 'jpeg'; + } + + if (!in_array($format, $this->image_types_available)) { + $format = $this->image_type; + } + + if (!function_exists('image'.$format)) { + throw new ImageFunctionUnknownException('QRCode: function image'.$format.' does not exists.'); + } + + ob_start(); + $success = call_user_func('image'.$format, $this->image); + + if ($success === false) { + throw new ImageFunctionFailedException('QRCode: function image'.$format.' failed.'); + } + + $content = ob_get_clean(); + + return $content; + } + + /** + * Create the image. + * + * @throws Exceptions\DataDoesntExistsException + * @throws Exceptions\VersionTooLargeException + * @throws Exceptions\ImageSizeTooLargeException + * @throws \OverflowException + */ + public function create() + { + $image_path = $this->image_path; + $path = $this->path; + + $version_ul = 40; + + $qrcode_data_string = $this->text;//Previously from $_GET["d"]; + + $qrcode_error_correct = $this->error_correction;//Previously from $_GET["e"]; + $qrcode_module_size = $this->module_size;//Previously from $_GET["s"]; + $qrcode_version = $this->version;//Previously from $_GET["v"]; + $qrcode_image_type = $this->image_type;//Previously from $_GET["t"]; + + $qrcode_structureappend_n = $this->structure_append_n;//Previously from $_GET["n"]; + $qrcode_structureappend_m = $this->structure_append_m;//Previously from $_GET["m"]; + $qrcode_structureappend_parity = $this->structure_append_parity;//Previously from $_GET["p"]; + $qrcode_structureappend_originaldata = $this->structure_append_original_data;//Previously from $_GET["o"]; + + if ($qrcode_module_size > 0) { + } else { + if ($qrcode_image_type == 'jpeg') { + $qrcode_module_size = 8; + } else { + $qrcode_module_size = 4; + } + } + $data_length = strlen($qrcode_data_string); + if ($data_length <= 0) { + throw new DataDoesntExistsException('QRCode: data does not exist.'); + } + $data_counter = 0; + if ($qrcode_structureappend_n > 1 + && $qrcode_structureappend_n <= 16 + && $qrcode_structureappend_m > 0 + && $qrcode_structureappend_m <= 16) { + $data_value[0] = 3; + $data_bits[0] = 4; + + $data_value[1] = $qrcode_structureappend_m - 1; + $data_bits[1] = 4; + + $data_value[2] = $qrcode_structureappend_n - 1; + $data_bits[2] = 4; + + $originaldata_length = strlen($qrcode_structureappend_originaldata); + if ($originaldata_length > 1) { + $qrcode_structureappend_parity = 0; + $i = 0; + while ($i < $originaldata_length) { + $qrcode_structureappend_parity = ($qrcode_structureappend_parity ^ ord(substr($qrcode_structureappend_originaldata, $i, 1))); + ++$i; + } + } + + $data_value[3] = $qrcode_structureappend_parity; + $data_bits[3] = 8; + + $data_counter = 4; + } + + $data_bits[$data_counter] = 4; + + /* --- determine encode mode */ + + if (preg_match('/[^0-9]/', $qrcode_data_string) != 0) { + if (preg_match("/[^0-9A-Z \$\*\%\+\.\/\:\-]/", $qrcode_data_string) != 0) { + /* --- 8bit byte mode */ + + $codeword_num_plus = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8]; + + $data_value[$data_counter] = 4; + ++$data_counter; + $data_value[$data_counter] = $data_length; + $data_bits[$data_counter] = 8; /* #version 1-9 */ + $codeword_num_counter_value = $data_counter; + + ++$data_counter; + $i = 0; + while ($i < $data_length) { + $data_value[$data_counter] = ord(substr($qrcode_data_string, $i, 1)); + $data_bits[$data_counter] = 8; + ++$data_counter; + ++$i; + } + } else { + /* ---- alphanumeric mode */ + + $codeword_num_plus = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]; + + $data_value[$data_counter] = 2; + ++$data_counter; + $data_value[$data_counter] = $data_length; + $data_bits[$data_counter] = 9; /* #version 1-9 */ + $codeword_num_counter_value = $data_counter; + + $alphanumeric_character_hash = ['0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, + '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9, 'A' => 10, 'B' => 11, 'C' => 12, 'D' => 13, 'E' => 14, + 'F' => 15, 'G' => 16, 'H' => 17, 'I' => 18, 'J' => 19, 'K' => 20, 'L' => 21, 'M' => 22, 'N' => 23, + 'O' => 24, 'P' => 25, 'Q' => 26, 'R' => 27, 'S' => 28, 'T' => 29, 'U' => 30, 'V' => 31, + 'W' => 32, 'X' => 33, 'Y' => 34, 'Z' => 35, ' ' => 36, '$' => 37, '%' => 38, '*' => 39, + '+' => 40, '-' => 41, '.' => 42, '/' => 43, ':' => 44]; + + $i = 0; + ++$data_counter; + while ($i < $data_length) { + if (($i % 2) == 0) { + $data_value[$data_counter] = $alphanumeric_character_hash[substr($qrcode_data_string, $i, 1)]; + $data_bits[$data_counter] = 6; + } else { + $data_value[$data_counter] = $data_value[$data_counter] * 45 + $alphanumeric_character_hash[substr($qrcode_data_string, $i, 1)]; + $data_bits[$data_counter] = 11; + ++$data_counter; + } + ++$i; + } + } + } else { + /* ---- numeric mode */ + + $codeword_num_plus = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]; + + $data_value[$data_counter] = 1; + ++$data_counter; + $data_value[$data_counter] = $data_length; + $data_bits[$data_counter] = 10; /* #version 1-9 */ + $codeword_num_counter_value = $data_counter; + + $i = 0; + ++$data_counter; + while ($i < $data_length) { + if (($i % 3) == 0) { + $data_value[$data_counter] = substr($qrcode_data_string, $i, 1); + $data_bits[$data_counter] = 4; + } else { + $data_value[$data_counter] = $data_value[$data_counter] * 10 + substr($qrcode_data_string, $i, 1); + if (($i % 3) == 1) { + $data_bits[$data_counter] = 7; + } else { + $data_bits[$data_counter] = 10; + ++$data_counter; + } + } + ++$i; + } + } + if (array_key_exists($data_counter, $data_bits) && $data_bits[$data_counter] > 0) { + ++$data_counter; + } + $i = 0; + $total_data_bits = 0; + while ($i < $data_counter) { + $total_data_bits += $data_bits[$i]; + ++$i; + } + + $ecc_character_hash = [ + 'L' => '1', + 'l' => '1', + 'M' => '0', + 'm' => '0', + 'Q' => '3', + 'q' => '3', + 'H' => '2', + 'h' => '2', + ]; + + if (!is_numeric($qrcode_error_correct)) { + $ec = @$ecc_character_hash[$qrcode_error_correct]; + } else { + $ec = $qrcode_error_correct; + } + + if (!$ec) { + $ec = 0; + } + + $max_data_bits = 0; + + $max_data_bits_array = [ + 0, 128, 224, 352, 512, 688, 864, 992, 1232, 1456, 1728, + 2032, 2320, 2672, 2920, 3320, 3624, 4056, 4504, 5016, 5352, + 5712, 6256, 6880, 7312, 8000, 8496, 9024, 9544, 10136, 10984, + 11640, 12328, 13048, 13800, 14496, 15312, 15936, 16816, 17728, 18672, + + 152, 272, 440, 640, 864, 1088, 1248, 1552, 1856, 2192, + 2592, 2960, 3424, 3688, 4184, 4712, 5176, 5768, 6360, 6888, + 7456, 8048, 8752, 9392, 10208, 10960, 11744, 12248, 13048, 13880, + 14744, 15640, 16568, 17528, 18448, 19472, 20528, 21616, 22496, 23648, + + 72, 128, 208, 288, 368, 480, 528, 688, 800, 976, + 1120, 1264, 1440, 1576, 1784, 2024, 2264, 2504, 2728, 3080, + 3248, 3536, 3712, 4112, 4304, 4768, 5024, 5288, 5608, 5960, + 6344, 6760, 7208, 7688, 7888, 8432, 8768, 9136, 9776, 10208, + + 104, 176, 272, 384, 496, 608, 704, 880, 1056, 1232, + 1440, 1648, 1952, 2088, 2360, 2600, 2936, 3176, 3560, 3880, + 4096, 4544, 4912, 5312, 5744, 6032, 6464, 6968, 7288, 7880, + 8264, 8920, 9368, 9848, 10288, 10832, 11408, 12016, 12656, 13328 + ]; + if (!is_numeric($qrcode_version)) { + $qrcode_version = 0; + } + if (!$qrcode_version) { + /* #--- auto version select */ + $i = 1 + 40 * $ec; + $j = $i + 39; + $qrcode_version = 1; + while ($i <= $j) { + if (($max_data_bits_array[$i]) >= $total_data_bits + $codeword_num_plus[$qrcode_version]) { + $max_data_bits = $max_data_bits_array[$i]; + break; + } + ++$i; + ++$qrcode_version; + } + } else { + $max_data_bits = $max_data_bits_array[$qrcode_version + 40 * $ec]; + } + if ($qrcode_version > $version_ul) { + throw new VersionTooLargeException('QRCode : version too large'); + } + + $total_data_bits += $codeword_num_plus[$qrcode_version]; + $data_bits[$codeword_num_counter_value] += $codeword_num_plus[$qrcode_version]; + + $max_codewords_array = [0, 26, 44, 70, 100, 134, 172, 196, 242, + 292, 346, 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085, 1156, + 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185, 2323, 2465, + 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706]; + + $max_codewords = $max_codewords_array[$qrcode_version]; + $max_modules_1side = 17 + ($qrcode_version << 2); + + $matrix_remain_bit = [0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0]; + + /* ---- read version ECC data file */ + + $byte_num = $matrix_remain_bit[$qrcode_version] + ($max_codewords << 3); + $filename = $path.'/qrv'.$qrcode_version.'_'.$ec.'.dat'; + $fp1 = fopen($filename, 'rb'); + $matx = fread($fp1, $byte_num); + $maty = fread($fp1, $byte_num); + $masks = fread($fp1, $byte_num); + $fi_x = fread($fp1, 15); + $fi_y = fread($fp1, 15); + $rs_ecc_codewords = ord(fread($fp1, 1)); + $rso = fread($fp1, 128); + fclose($fp1); + + $matrix_x_array = unpack('C*', $matx); + $matrix_y_array = unpack('C*', $maty); + $mask_array = unpack('C*', $masks); + + $rs_block_order = unpack('C*', $rso); + + $format_information_x2 = unpack('C*', $fi_x); + $format_information_y2 = unpack('C*', $fi_y); + + $format_information_x1 = [0, 1, 2, 3, 4, 5, 7, 8, 8, 8, 8, 8, 8, 8, 8]; + $format_information_y1 = [8, 8, 8, 8, 8, 8, 8, 8, 7, 5, 4, 3, 2, 1, 0]; + + $max_data_codewords = ($max_data_bits >> 3); + + $filename = $path.'/rsc'.$rs_ecc_codewords.'.dat'; + $fp0 = fopen($filename, 'rb'); + $i = 0; + $rs_cal_table_array = []; + while ($i < 256) { + $rs_cal_table_array[$i] = fread($fp0, $rs_ecc_codewords); + ++$i; + } + fclose($fp0); + + /* --- set terminator */ + + if ($total_data_bits <= $max_data_bits - 4) { + $data_value[$data_counter] = 0; + $data_bits[$data_counter] = 4; + } else { + if ($total_data_bits < $max_data_bits) { + $data_value[$data_counter] = 0; + $data_bits[$data_counter] = $max_data_bits - $total_data_bits; + } else { + if ($total_data_bits > $max_data_bits) { + throw new \OverflowException('QRCode: overflow error'); + } + } + } + + /* ----divide data by 8bit */ + + $i = 0; + $codewords_counter = 0; + $codewords[0] = 0; + $remaining_bits = 8; + + while ($i <= $data_counter) { + $buffer = @$data_value[$i]; + $buffer_bits = @$data_bits[$i]; + + $flag = 1; + while ($flag) { + if ($remaining_bits > $buffer_bits) { + $codewords[$codewords_counter] = ((@$codewords[$codewords_counter] << $buffer_bits) | $buffer); + $remaining_bits -= $buffer_bits; + $flag = 0; + } else { + $buffer_bits -= $remaining_bits; + $codewords[$codewords_counter] = (($codewords[$codewords_counter] << $remaining_bits) | ($buffer >> $buffer_bits)); + + if ($buffer_bits == 0) { + $flag = 0; + } else { + $buffer = ($buffer & ((1 << $buffer_bits) - 1)); + $flag = 1; + } + + ++$codewords_counter; + if ($codewords_counter < $max_data_codewords - 1) { + $codewords[$codewords_counter] = 0; + } + $remaining_bits = 8; + } + } + ++$i; + } + if ($remaining_bits != 8) { + $codewords[$codewords_counter] = $codewords[$codewords_counter] << $remaining_bits; + } else { + --$codewords_counter; + } + + /* ---- set padding character */ + + if ($codewords_counter < $max_data_codewords - 1) { + $flag = 1; + while ($codewords_counter < $max_data_codewords - 1) { + ++$codewords_counter; + if ($flag == 1) { + $codewords[$codewords_counter] = 236; + } else { + $codewords[$codewords_counter] = 17; + } + $flag = $flag * (-1); + } + } + + /* ---- RS-ECC prepare */ + + $i = 0; + $j = 0; + $rs_block_number = 0; + $rs_temp[0] = ''; + + while ($i < $max_data_codewords) { + $rs_temp[$rs_block_number] .= chr($codewords[$i]); + ++$j; + + if ($j >= $rs_block_order[$rs_block_number + 1] - $rs_ecc_codewords) { + $j = 0; + ++$rs_block_number; + $rs_temp[$rs_block_number] = ''; + } + ++$i; + } + + /* + # + # RS-ECC main + # + */ + + $rs_block_number = 0; + $rs_block_order_num = count($rs_block_order); + + while ($rs_block_number < $rs_block_order_num) { + $rs_codewords = $rs_block_order[$rs_block_number + 1]; + $rs_data_codewords = $rs_codewords - $rs_ecc_codewords; + + $rstemp = $rs_temp[$rs_block_number].str_repeat(chr(0), $rs_ecc_codewords); + $padding_data = str_repeat(chr(0), $rs_data_codewords); + + $j = $rs_data_codewords; + while ($j > 0) { + $first = ord(substr($rstemp, 0, 1)); + + if ($first) { + $left_chr = substr($rstemp, 1); + $cal = $rs_cal_table_array[$first].$padding_data; + $rstemp = $left_chr ^ $cal; + } else { + $rstemp = substr($rstemp, 1); + } + + --$j; + } + + $codewords = array_merge($codewords, unpack('C*', $rstemp)); + + ++$rs_block_number; + } + + /* ---- flash matrix */ + $matrix_content = []; + $i = 0; + while ($i < $max_modules_1side) { + $j = 0; + while ($j < $max_modules_1side) { + $matrix_content[$j][$i] = 0; + ++$j; + } + ++$i; + } + + /* --- attach data */ + + $i = 0; + while ($i < $max_codewords) { + $codeword_i = $codewords[$i]; + $j = 8; + while ($j >= 1) { + $codeword_bits_number = ($i << 3) + $j; + $matrix_content[ $matrix_x_array[$codeword_bits_number] ][ $matrix_y_array[$codeword_bits_number] ] = ((255 * ($codeword_i & 1)) ^ $mask_array[$codeword_bits_number]); + $codeword_i = $codeword_i >> 1; + --$j; + } + ++$i; + } + + $matrix_remain = $matrix_remain_bit[$qrcode_version]; + while ($matrix_remain) { + $remain_bit_temp = $matrix_remain + ($max_codewords << 3); + $matrix_content[ $matrix_x_array[$remain_bit_temp] ][ $matrix_y_array[$remain_bit_temp] ] = (255 ^ $mask_array[$remain_bit_temp]); + --$matrix_remain; + } + + #--- mask select + + $min_demerit_score = 0; + $hor_master = ''; + $ver_master = ''; + $k = 0; + while ($k < $max_modules_1side) { + $l = 0; + while ($l < $max_modules_1side) { + $hor_master = $hor_master.chr($matrix_content[$l][$k]); + $ver_master = $ver_master.chr($matrix_content[$k][$l]); + ++$l; + } + ++$k; + } + $i = 0; + $all_matrix = $max_modules_1side * $max_modules_1side; + $mask_number = 0; + while ($i < 8) { + $demerit_n1 = 0; + $ptn_temp = []; + $bit = 1 << $i; + $bit_r = (~$bit) & 255; + $bit_mask = str_repeat(chr($bit), $all_matrix); + $hor = $hor_master & $bit_mask; + $ver = $ver_master & $bit_mask; + + $ver_shift1 = $ver.str_repeat(chr(170), $max_modules_1side); + $ver_shift2 = str_repeat(chr(170), $max_modules_1side).$ver; + $ver_shift1_0 = $ver.str_repeat(chr(0), $max_modules_1side); + $ver_shift2_0 = str_repeat(chr(0), $max_modules_1side).$ver; + $ver_or = chunk_split(~($ver_shift1 | $ver_shift2), $max_modules_1side, chr(170)); + $ver_and = chunk_split(~($ver_shift1_0 & $ver_shift2_0), $max_modules_1side, chr(170)); + + $hor = chunk_split(~$hor, $max_modules_1side, chr(170)); + $ver = chunk_split(~$ver, $max_modules_1side, chr(170)); + $hor = $hor.chr(170).$ver; + + $n1_search = '/'.str_repeat(chr(255), 5).'+|'.str_repeat(chr($bit_r), 5).'+/'; + $n3_search = chr($bit_r).chr(255).chr($bit_r).chr($bit_r).chr($bit_r).chr(255).chr($bit_r); + + $demerit_n3 = substr_count($hor, $n3_search) * 40; + $demerit_n4 = floor(abs(((100 * (substr_count($ver, chr($bit_r)) / ($byte_num))) - 50) / 5)) * 10; + + $n2_search1 = '/'.chr($bit_r).chr($bit_r).'+/'; + $n2_search2 = '/'.chr(255).chr(255).'+/'; + $demerit_n2 = 0; + preg_match_all($n2_search1, $ver_and, $ptn_temp); + foreach ($ptn_temp[0] as $str_temp) { + $demerit_n2 += (strlen($str_temp) - 1); + } + $ptn_temp = []; + preg_match_all($n2_search2, $ver_or, $ptn_temp); + foreach ($ptn_temp[0] as $str_temp) { + $demerit_n2 += (strlen($str_temp) - 1); + } + $demerit_n2 *= 3; + + $ptn_temp = []; + + preg_match_all($n1_search, $hor, $ptn_temp); + foreach ($ptn_temp[0] as $str_temp) { + $demerit_n1 += (strlen($str_temp) - 2); + } + + $demerit_score = $demerit_n1 + $demerit_n2 + $demerit_n3 + $demerit_n4; + + if ($demerit_score <= $min_demerit_score || $i == 0) { + $mask_number = $i; + $min_demerit_score = $demerit_score; + } + + ++$i; + } + + $mask_content = 1 << $mask_number; + + # --- format information + + $format_information_value = (($ec << 3) | $mask_number); + $format_information_array = ['101010000010010', '101000100100101', + '101111001111100', '101101101001011', '100010111111001', '100000011001110', + '100111110010111', '100101010100000', '111011111000100', '111001011110011', + '111110110101010', '111100010011101', '110011000101111', '110001100011000', + '110110001000001', '110100101110110', '001011010001001', '001001110111110', + '001110011100111', '001100111010000', '000011101100010', '000001001010101', + '000110100001100', '000100000111011', '011010101011111', '011000001101000', + '011111100110001', '011101000000110', '010010010110100', '010000110000011', + '010111011011010', '010101111101101']; + $i = 0; + while ($i < 15) { + $content = substr($format_information_array[$format_information_value], $i, 1); + + $matrix_content[$format_information_x1[$i]][$format_information_y1[$i]] = $content * 255; + $matrix_content[$format_information_x2[$i + 1]][$format_information_y2[$i + 1]] = $content * 255; + ++$i; + } + + $mib = $max_modules_1side; + if ($this->draw_quiet_zone) { + $mib += 8; + } + + if ($this->size == 0) { + $this->size = $mib * $qrcode_module_size; + if ($this->size > 1480) { + throw new ImageSizeTooLargeException('QRCode: image size too large'); + } + } + + $image_width = $this->size + $this->padding * 2; + $image_height = $this->size + $this->padding * 2; + + if (!empty($this->label)) { + if (!function_exists('imagettfbbox')) { + throw new FreeTypeLibraryMissingException('QRCode: missing function "imagettfbbox". Did you install the FreeType library?'); + } + $font_box = imagettfbbox($this->label_font_size, 0, $this->label_font_path, $this->label); + $label_width = (int) $font_box[2] - (int) $font_box[0]; + $label_height = (int) $font_box[0] - (int) $font_box[7]; + + if ($this->label_valign == self::LABEL_VALIGN_MIDDLE) { + $image_height += $label_height + $this->padding; + } else { + $image_height += $label_height; + } + } + + $output_image = imagecreate($image_width, $image_height); + imagecolorallocate($output_image, 255, 255, 255); + + $image_path = $image_path.'/qrv'.$qrcode_version.'.png'; + + $base_image = imagecreatefrompng($image_path); + $code_size = $this->size; + $module_size = function ($size = 1) use ($code_size, $base_image) { + return round($code_size / imagesx($base_image) * $size); + }; + + $col[1] = imagecolorallocate($base_image, 0, 0, 0); + $col[0] = imagecolorallocate($base_image, 255, 255, 255); + + $i = 4; + $mxe = 4 + $max_modules_1side; + $ii = 0; + while ($i < $mxe) { + $j = 4; + $jj = 0; + while ($j < $mxe) { + if ($matrix_content[$ii][$jj] & $mask_content) { + imagesetpixel($base_image, $i, $j, $col[1]); + } + ++$j; + ++$jj; + } + ++$i; + ++$ii; + } + + if ($this->draw_quiet_zone == true) { + imagecopyresampled($output_image, $base_image, $this->padding, $this->padding, 0, 0, $this->size, $this->size, $mib, $mib); + } else { + imagecopyresampled($output_image, $base_image, $this->padding, $this->padding, 4, 4, $this->size, $this->size, $mib, $mib); + } + + if ($this->draw_border == true) { + $border_width = $this->padding; + $border_height = $this->size + $this->padding - 1; + $border_color = imagecolorallocate($output_image, 0, 0, 0); + imagerectangle($output_image, $border_width, $border_width, $border_height, $border_height, $border_color); + } + + if (!empty($this->label)) { + // Label horizontal alignment + switch ($this->label_halign) { + case self::LABEL_HALIGN_LEFT: + $font_x = 0; + break; + + case self::LABEL_HALIGN_LEFT_BORDER: + $font_x = $this->padding; + break; + + case self::LABEL_HALIGN_LEFT_CODE: + if ($this->draw_quiet_zone == true) { + $font_x = $this->padding + $module_size(4); + } else { + $font_x = $this->padding; + } + break; + + case self::LABEL_HALIGN_RIGHT: + $font_x = $this->size + ($this->padding * 2) - $label_width; + break; + + case self::LABEL_HALIGN_RIGHT_BORDER: + $font_x = $this->size + $this->padding - $label_width; + break; + + case self::LABEL_HALIGN_RIGHT_CODE: + if ($this->draw_quiet_zone == true) { + $font_x = $this->size + $this->padding - $label_width - $module_size(4); + } else { + $font_x = $this->size + $this->padding - $label_width; + } + break; + + default: + $font_x = floor($image_width - $label_width) / 2; + } + + // Label vertical alignment + switch ($this->label_valign) { + case self::LABEL_VALIGN_TOP_NO_BORDER: + $font_y = $image_height - $this->padding - 1; + break; + + case self::LABEL_VALIGN_BOTTOM: + $font_y = $image_height; + break; + + default: + $font_y = $image_height - $this->padding; + } + + $label_bg_x1 = $font_x - $module_size(2); + $label_bg_y1 = $font_y - $label_height; + $label_bg_x2 = $font_x + $label_width + $module_size(2); + $label_bg_y2 = $font_y; + + $color = imagecolorallocate($output_image, 0, 0, 0); + $label_bg_color = imagecolorallocate($output_image, 255, 255, 255); + + imagefilledrectangle($output_image, $label_bg_x1, $label_bg_y1, $label_bg_x2, $label_bg_y2, $label_bg_color); + imagettftext($output_image, $this->label_font_size, 0, $font_x, $font_y, $color, $this->label_font_path, $this->label); + } + + $imagecolorset_function = new ReflectionFunction('imagecolorset'); + $allow_alpha = $imagecolorset_function->getNumberOfParameters() == 6; + + if ($this->color_background != null) { + $index = imagecolorclosest($output_image, 255, 255, 255); + if ($allow_alpha) { + imagecolorset($output_image, $index, $this->color_background['r'], $this->color_background['g'], $this->color_background['b'], $this->color_background['a']); + } else { + imagecolorset($output_image, $index, $this->color_background['r'], $this->color_background['g'], $this->color_background['b']); + } + } + + if ($this->color_foreground != null) { + $index = imagecolorclosest($output_image, 0, 0, 0); + if ($allow_alpha) { + imagecolorset($output_image, $index, $this->color_foreground['r'], $this->color_foreground['g'], $this->color_foreground['b'], $this->color_foreground['a']); + } else { + imagecolorset($output_image, $index, $this->color_foreground['r'], $this->color_foreground['g'], $this->color_foreground['b']); + } + } + + if (!empty($this->logo)) { + $output_image_org = $output_image; + $output_image = imagecreatetruecolor($image_width, $image_height); + imagecopy($output_image, $output_image_org, 0, 0, 0, 0, $image_width, $image_height); + + $image_info = getimagesize($this->logo); + + if ($image_info !== false) { + $image_type = strtolower(substr(image_type_to_extension($image_info [2]), 1)); + $logo_image = call_user_func('imagecreatefrom'.$image_type, $this->logo); + } else { + $logo_image = call_user_func('imagecreatefrom'.$this->image_type, $this->logo); + } + + if (!$logo_image) { + throw new ImageFunctionFailedException('imagecreatefrom'.$this->image_type.' '.$this->logo.' failed'); + } + $src_w = imagesx($logo_image); + $src_h = imagesy($logo_image); + + $dst_x = ($image_width - $this->logo_size) / 2; + $dst_y = ($this->size + $this->padding * 2 - $this->logo_size) / 2; + + $successful = imagecopyresampled($output_image, $logo_image, $dst_x, $dst_y, 0, 0, $this->logo_size, $this->logo_size, $src_w, $src_h); + if (!$successful) { + throw new ImageFunctionFailedException('add logo [image'.$this->format.'] failed.'); + } + imagedestroy($logo_image); + } + $this->image = $output_image; + } +} diff --git a/vendor/endroid/qr-code/tests/Bundle/Controller/QrCodeControllerTest.php b/vendor/endroid/qr-code/tests/Bundle/Controller/QrCodeControllerTest.php new file mode 100644 index 000000000..92d0ed81f --- /dev/null +++ b/vendor/endroid/qr-code/tests/Bundle/Controller/QrCodeControllerTest.php @@ -0,0 +1,33 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Endroid\QrCode\Tests\Bundle\Controller; + +use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; + +class QrCodeControllerTest extends WebTestCase +{ + /** + * Tests if the QR code generation route returns a success response. + */ + public function testCreateQrCode() + { + $client = static::createClient(); + + $client->request('GET', $client->getContainer()->get('router')->generate('endroid_qrcode', [ + 'text' => 'Life is too short to be generating QR codes', + 'extension' => 'png', + 'size' => 150, + 'label' => 'Dit is een label', + 'label_font_size' => 16, + ])); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + } +} diff --git a/vendor/endroid/qr-code/tests/Bundle/EndroidQrCodeBundleTest.php b/vendor/endroid/qr-code/tests/Bundle/EndroidQrCodeBundleTest.php new file mode 100644 index 000000000..384204708 --- /dev/null +++ b/vendor/endroid/qr-code/tests/Bundle/EndroidQrCodeBundleTest.php @@ -0,0 +1,20 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Endroid\QrCode\Tests\Bundle; + +use PHPUnit_Framework_TestCase; + +class EndroidQrCodeBundleTest extends PHPUnit_Framework_TestCase +{ + public function testNoTestsYet() + { + $this->assertTrue(true); + } +} diff --git a/vendor/endroid/qr-code/tests/Bundle/app/.gitignore b/vendor/endroid/qr-code/tests/Bundle/app/.gitignore new file mode 100644 index 000000000..6dd26c5b0 --- /dev/null +++ b/vendor/endroid/qr-code/tests/Bundle/app/.gitignore @@ -0,0 +1,2 @@ +/cache +/logs diff --git a/vendor/endroid/qr-code/tests/Bundle/app/AppKernel.php b/vendor/endroid/qr-code/tests/Bundle/app/AppKernel.php new file mode 100644 index 000000000..f3ff79ce0 --- /dev/null +++ b/vendor/endroid/qr-code/tests/Bundle/app/AppKernel.php @@ -0,0 +1,36 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +use Symfony\Component\Config\Loader\LoaderInterface; +use Symfony\Component\HttpKernel\Kernel; + +class AppKernel extends Kernel +{ + /** + * {@inheritdoc} + */ + public function registerBundles() + { + $bundles = [ + new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), + new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), + new Endroid\QrCode\Bundle\EndroidQrCodeBundle(), + ]; + + return $bundles; + } + + /** + * {@inheritdoc} + */ + public function registerContainerConfiguration(LoaderInterface $loader) + { + $loader->load(__DIR__.'/config/config.yml'); + } +} diff --git a/vendor/endroid/qr-code/tests/Bundle/app/bootstrap.php b/vendor/endroid/qr-code/tests/Bundle/app/bootstrap.php new file mode 100644 index 000000000..ff87382c8 --- /dev/null +++ b/vendor/endroid/qr-code/tests/Bundle/app/bootstrap.php @@ -0,0 +1,7 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Endroid\Tests\QrCode; + +use Endroid\QrCode\Exceptions\ImageFunctionFailedException; +use Endroid\QrCode\Exceptions\ImageFunctionUnknownException; +use Endroid\QrCode\QrCode; +use PHPUnit_Framework_TestCase; + +class QrCodeTest extends PHPUnit_Framework_TestCase +{ + /** + * @var QrCode + */ + protected $qrCode; + + /** + * Tests if a valid data uri is returned. + */ + public function testGetDataUri() + { + $qrCode = $this->getQrCode(); + $dataUri = $qrCode->getDataUri(); + + $this->assertTrue(is_string($dataUri)); + } + + /** + * Tests if a valid image string is returned. + * + * @throws ImageFunctionFailedException + * @throws ImageFunctionUnknownException + */ + public function testGetImageString() + { + $qrCode = $this->getQrCode(); + $imageString = $qrCode->get('png'); + + $this->assertTrue(is_string($imageString)); + } + + /** + * Tests if a valid image string is returned. + * + * @throws ImageFunctionFailedException + * @throws ImageFunctionUnknownException + */ + public function testGetQrCodeWithLogoString() + { + $qrCode = $this->createQrCodeWithLogo(); + $imageString = $qrCode->get('png'); + + $this->assertTrue(is_string($imageString)); + } + + /** + * For https://github.com/endroid/QrCode/issues/49. + */ + public function testRenderHttpAddress() + { + $qrCode = new QrCode(); + $qrCode + ->setText('http://www.example.com/it/it/contact/qr/hit/id/1 ') + ->setExtension('png') + ->setSize(300) + ->setPadding(10) + ->setBackgroundColor(['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0]) + ->setForegroundColor(['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0]) + ->setErrorCorrection(QrCode::LEVEL_MEDIUM); + + $qrCode->get('png'); + } + + /** + * Returns a QR code. + */ + protected function getQrCode() + { + if (!$this->qrCode) { + $this->qrCode = $this->createQrCode(); + } + + return $this->qrCode; + } + + /** + * Creates a QR code. + * + * @return QrCode + */ + protected function createQrCode() + { + $qrCode = new QrCode(); + $qrCode->setText('Life is too short to be generating QR codes'); + $qrCode->setSize(300); + + return $qrCode; + } + + /** + * Creates a QR code with a logo. + * + * @return QrCode + */ + protected function createQrCodeWithLogo() + { + $qrCode = new QrCode(); + $qrCode->setText('Life is too short to be generating QR codes') + ->setSize(300) + ->setLogo(dirname(__DIR__).'/assets/image/logo.png') + ->setLogoSize(60); + + return $qrCode; + } +} diff --git a/vendor/qiniu/php-sdk/.gitignore b/vendor/qiniu/php-sdk/.gitignore new file mode 100644 index 000000000..4c842c82e --- /dev/null +++ b/vendor/qiniu/php-sdk/.gitignore @@ -0,0 +1,12 @@ +*.phar +*.zip +build/artifacts +phpunit.xml +phpunit.functional.xml +.DS_Store +.swp +.build +composer.lock +vendor +src/package.xml +.idea/ diff --git a/vendor/qiniu/php-sdk/.scrutinizer.yml b/vendor/qiniu/php-sdk/.scrutinizer.yml new file mode 100644 index 000000000..8d9304c52 --- /dev/null +++ b/vendor/qiniu/php-sdk/.scrutinizer.yml @@ -0,0 +1,35 @@ +filter: + excluded_paths: [tests/*] +checks: + php: + code_rating: true + remove_extra_empty_lines: true + remove_php_closing_tag: true + remove_trailing_whitespace: true + fix_use_statements: + remove_unused: true + preserve_multiple: false + preserve_blanklines: true + order_alphabetically: true + fix_php_opening_tag: true + fix_linefeed: true + fix_line_ending: true + fix_identation_4spaces: true + fix_doc_comments: true +tools: + external_code_coverage: + timeout: 1200 + runs: 3 + php_analyzer: true + php_code_coverage: false + php_code_sniffer: + config: + standard: PSR2 + filter: + paths: ['src'] + php_loc: + enabled: true + excluded_dirs: [vendor, tests] + php_cpd: + enabled: true + excluded_dirs: [vendor, tests] diff --git a/vendor/qiniu/php-sdk/.travis.yml b/vendor/qiniu/php-sdk/.travis.yml new file mode 100644 index 000000000..60951b15c --- /dev/null +++ b/vendor/qiniu/php-sdk/.travis.yml @@ -0,0 +1,23 @@ +sudo: false +language: php + +php: + - 5.4 + - 5.5 + - 5.6 + - 7.0 + +before_script: + - export QINIU_TEST_ENV="travis" + - travis_retry composer self-update + - travis_retry composer install --no-interaction --prefer-source --dev + +script: + - ./vendor/bin/phpcs --standard=PSR2 src + - ./vendor/bin/phpcs --standard=PSR2 examples + - ./vendor/bin/phpcs --standard=PSR2 tests + - ./vendor/bin/phpunit --coverage-text --coverage-clover=coverage.clover tests/Qiniu/Tests/ + +after_script: + - wget https://scrutinizer-ci.com/ocular.phar + - php ocular.phar code-coverage:upload --format=php-clover coverage.clover diff --git a/vendor/qiniu/php-sdk/CHANGELOG.md b/vendor/qiniu/php-sdk/CHANGELOG.md new file mode 100644 index 000000000..8547bd882 --- /dev/null +++ b/vendor/qiniu/php-sdk/CHANGELOG.md @@ -0,0 +1,92 @@ +# Changelog + +## 7.2.3 (2018-01-20) +### 增加 +* 新加坡机房 +### 修正 +* 获取域名的入口域名 +* http回复头部兼容大小写 + +## 7.2.2 (2017-11-06) +### 增加 +* Qiniu算法的鉴权方法 + +## 7.1.4 (2017-06-21) +### 增加 +* cdn 文件/目录 刷新 +* cdn 获取 流量/带宽 +* cdn 获取域名的访问日志列表 +* cdn 对资源链接进行时间戳防盗链签名 + +## 7.1.3 (2016-11-18) +### 增加 +* move, copy操作增加force参数 + +## 7.1.2 (2016-11-12) +### 修正 +* 明确抛出获取各区域域名失败时的报错 + +## 7.1.1 (2016-11-02) +### 修正 +* 多区域配置文件存储目录从home修改到tmp目录 + + +## 7.1.0 (2016-10-22) +### 增加 +* 多存储区域的支持 + +## 7.0.8 (2016-07-19) +### 增加 +* demo +* https url 支持 +* deleteAfterDays 策略 +* 添加图片处理链接统一拼接方法 by @SherlockRen + +## 7.0.7 (2016-01-12) +### 修正 +* PersistentFop参数pipeline和notify_url失效 +* resume 模式 close file inputstream + +## 7.0.6 (2015-12-05) +### 修正 +* php7.0 Json 对空字符串解析单元测试报错 +* 开启安全模式或者设置可操作目录树时,设置CURLOPT_FOLLOWLOCATION报错, by @twocabbages +* fetch 支持不指定key, by @sinkcup + +## 7.0.5 (2015-10-29) +### 增加 +* 增加上传策略最小文件大小限制 fsizeMin +* 增加常见examples + +## 7.0.4 (2015-07-23) +### 修正 +* 一些地方的严格比较检查 +* resumeupload 备用地址失效 + +## 7.0.3 (2015-07-10) +### 修改 +* 多zone 支持 + +## 7.0.2 (2015-04-18) +### 修改 +* fetch 接口返回内容调整 +* pfop 接口调整 + +###修正 +* exception 类调用 + +## 7.0.1 (2015-03-27) +### 增加 +* 增加代码注释 + +## 7.0.0 (2015-02-03) + +### 增加 +* 简化上传接口 +* 自动选择断点续上传还是直传 +* 重构代码,接口和内部结构更清晰 +* 改变mime +* 代码覆盖度报告 +* policy改为array, 便于灵活增加,并加入过期字段检查 +* 文件列表支持目录形式 +* 利用元编程方式支持 fop 和 pfop diff --git a/vendor/qiniu/php-sdk/CONTRIBUTING.md b/vendor/qiniu/php-sdk/CONTRIBUTING.md new file mode 100644 index 000000000..0466bf970 --- /dev/null +++ b/vendor/qiniu/php-sdk/CONTRIBUTING.md @@ -0,0 +1,30 @@ +# 贡献代码指南 + +我们非常欢迎大家来贡献代码,我们会向贡献者致以最诚挚的敬意。 + +一般可以通过在Github上提交[Pull Request](https://github.com/qiniu/php-sdk)来贡献代码。 + +## Pull Request要求 + +- **[PSR-2 编码风格标准](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)** 。要通过项目中的code sniffer检查。 + +- **代码格式** 提交前 请按 ./vendor/bin/phpcbf --standard=PSR2 进行格式化。 + +- **必须添加测试!** - 如果没有测试(单元测试、集成测试都可以),那么提交的补丁是不会通过的。 + +- **记得更新文档** - 保证`README.md`以及其他相关文档及时更新,和代码的变更保持一致性。 + +- **考虑我们的发布周期** - 我们的版本号会服从[SemVer v2.0.0](http://semver.org/),我们绝对不会随意变更对外的API。 + +- **创建feature分支** - 最好不要从你的master分支提交 pull request。 + +- **一个feature提交一个pull请求** - 如果你的代码变更了多个操作,那就提交多个pull请求吧。 + +- **清晰的commit历史** - 保证你的pull请求的每次commit操作都是有意义的。如果你开发中需要执行多次的即时commit操作,那么请把它们放到一起再提交pull请求。 + +## 运行测试 + +``` bash +./vendor/bin/phpunit tests/Qiniu/Tests/ + +``` diff --git a/vendor/qiniu/php-sdk/LICENSE b/vendor/qiniu/php-sdk/LICENSE new file mode 100644 index 000000000..ba646be91 --- /dev/null +++ b/vendor/qiniu/php-sdk/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2014 Qiniu, Ltd. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/vendor/qiniu/php-sdk/README.md b/vendor/qiniu/php-sdk/README.md new file mode 100644 index 000000000..453eef4d1 --- /dev/null +++ b/vendor/qiniu/php-sdk/README.md @@ -0,0 +1,75 @@ +# Qiniu Resource Storage SDK for PHP +[![doxygen.io](http://doxygen.io/github.com/qiniu/php-sdk/?status.svg)](http://doxygen.io/github.com/qiniu/php-sdk/) +[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg)](LICENSE) +[![Build Status](https://travis-ci.org/qiniu/php-sdk.svg)](https://travis-ci.org/qiniu/php-sdk) +[![Latest Stable Version](https://img.shields.io/packagist/v/qiniu/php-sdk.svg)](https://packagist.org/packages/qiniu/php-sdk) +[![Total Downloads](https://img.shields.io/packagist/dt/qiniu/php-sdk.svg)](https://packagist.org/packages/qiniu/php-sdk) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/qiniu/php-sdk/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/qiniu/php-sdk/?branch=master) +[![Code Coverage](https://scrutinizer-ci.com/g/qiniu/php-sdk/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/qiniu/php-sdk/?branch=master) +[![Join Chat](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/qiniu/php-sdk?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![@qiniu on weibo](http://img.shields.io/badge/weibo-%40qiniutek-blue.svg)](http://weibo.com/qiniutek) + +## 安装 + +* 通过composer,这是推荐的方式,可以使用composer.json 声明依赖,或者运行下面的命令。SDK 包已经放到这里 [`qiniu/php-sdk`][install-packagist] 。 +```bash +$ composer require qiniu/php-sdk +``` +* 直接下载安装,SDK 没有依赖其他第三方库,但需要参照 composer的autoloader,增加一个自己的autoloader程序。 + +## 运行环境 + +| Qiniu SDK版本 | PHP 版本 | +|:--------------------:|:---------------------------:| +| 7.x | cURL extension, 5.3 - 5.6,7.0 | +| 6.x | cURL extension, 5.2 - 5.6 | + +## 使用方法 + +### 上传 +```php +use Qiniu\Storage\UploadManager; +use Qiniu\Auth; +... + $upManager = new UploadManager(); + $auth = new Auth($accessKey, $secretKey); + $token = $auth->uploadToken($bucketName); + list($ret, $error) = $upManager->put($token, 'formput', 'hello world'); +... +``` + +## 测试 + +``` bash +$ ./vendor/bin/phpunit tests/Qiniu/Tests/ +``` + +## 常见问题 + +- $error保留了请求响应的信息,失败情况下ret 为none, 将$error可以打印出来,提交给我们。 +- API 的使用 demo 可以参考 [单元测试](https://github.com/qiniu/php-sdk/blob/master/tests)。 + +## 代码贡献 + +详情参考[代码提交指南](https://github.com/qiniu/php-sdk/blob/master/CONTRIBUTING.md)。 + +## 贡献记录 + +- [所有贡献者](https://github.com/qiniu/php-sdk/contributors) + +## 联系我们 + +- 如果需要帮助,请提交工单(在portal右侧点击咨询和建议提交工单,或者直接向 support@qiniu.com 发送邮件) +- 如果有什么问题,可以到问答社区提问,[问答社区](http://qiniu.segmentfault.com/) +- 更详细的文档,见[官方文档站](http://developer.qiniu.com/) +- 如果发现了bug, 欢迎提交 [issue](https://github.com/qiniu/php-sdk/issues) +- 如果有功能需求,欢迎提交 [issue](https://github.com/qiniu/php-sdk/issues) +- 如果要提交代码,欢迎提交 pull request +- 欢迎关注我们的[微信](http://www.qiniu.com/#weixin) [微博](http://weibo.com/qiniutek),及时获取动态信息。 + +## 代码许可 + +The MIT License (MIT).详情见 [License文件](https://github.com/qiniu/php-sdk/blob/master/LICENSE). + +[packagist]: http://packagist.org +[install-packagist]: https://packagist.org/packages/qiniu/php-sdk diff --git a/vendor/qiniu/php-sdk/autoload.php b/vendor/qiniu/php-sdk/autoload.php new file mode 100644 index 000000000..4379b91da --- /dev/null +++ b/vendor/qiniu/php-sdk/autoload.php @@ -0,0 +1,14 @@ +=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.3" + }, + "autoload": { + "psr-4": {"Qiniu\\": "src/Qiniu"}, + "files": ["src/Qiniu/functions.php"] + } +} diff --git a/vendor/qiniu/php-sdk/examples/README.md b/vendor/qiniu/php-sdk/examples/README.md new file mode 100644 index 000000000..6cf8e30af --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/README.md @@ -0,0 +1,10 @@ +# examples + +这些 examples 旨在帮助你快速了解使用七牛的sdk。这些demo都是可以直接运行的, 但是在运行之前需要填上您自己的参数。 + +比如: + +* `$bucket` 需要填上您想操作的 [bucket名字](http://developer.qiniu.com/docs/v6/api/overview/concepts.html#bucket)。 +* `$accessKey` 和 `$secretKey` 可以在我们的[管理后台](https://portal.qiniu.com/setting/key)找到。 +* 在进行`视频转码`, `压缩文件`等异步操作时 需要使用到的队列名称也可以在我们[管理后台](https://portal.qiniu.com/mps/pipeline)新建。 + diff --git a/vendor/qiniu/php-sdk/examples/cdn_get_bandwidth.php b/vendor/qiniu/php-sdk/examples/cdn_get_bandwidth.php new file mode 100644 index 000000000..4d2ccf6f6 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/cdn_get_bandwidth.php @@ -0,0 +1,40 @@ +getBandwidthData( + $domains, + $startDate, + $endDate, + $granularity +); + +if ($getBandwidthErr != null) { + var_dump($getBandwidthErr); +} else { + echo "get bandwidth data success\n"; + print_r($bandwidthData); +} diff --git a/vendor/qiniu/php-sdk/examples/cdn_get_flux.php b/vendor/qiniu/php-sdk/examples/cdn_get_flux.php new file mode 100644 index 000000000..56da550a1 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/cdn_get_flux.php @@ -0,0 +1,34 @@ +getFluxData($domains, $startDate, $endDate, $granularity); +if ($getFluxErr != null) { + var_dump($getFluxErr); +} else { + echo "get flux data success\n"; + print_r($fluxData); +} diff --git a/vendor/qiniu/php-sdk/examples/cdn_get_log_list.php b/vendor/qiniu/php-sdk/examples/cdn_get_log_list.php new file mode 100644 index 000000000..4e5c9424f --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/cdn_get_log_list.php @@ -0,0 +1,29 @@ +getCdnLogList($domains, $logDate); +if ($getLogErr != null) { + var_dump($getLogErr); +} else { + echo "get cdn log list success\n"; + print_r($logListData); +} diff --git a/vendor/qiniu/php-sdk/examples/cdn_refresh_urls_dirs.php b/vendor/qiniu/php-sdk/examples/cdn_refresh_urls_dirs.php new file mode 100644 index 000000000..c05e75f2f --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/cdn_refresh_urls_dirs.php @@ -0,0 +1,52 @@ +refreshUrlsAndDirs($urls, $dirs); +if ($refreshErr != null) { + var_dump($refreshErr); +} else { + echo "refresh request sent\n"; + print_r($refreshResult); +} + +//如果只有刷新链接或者目录的需求,可以分布使用 + +list($refreshResult, $refreshErr) = $cdnManager->refreshUrls($urls); +if ($refreshErr != null) { + var_dump($refreshErr); +} else { + echo "refresh request sent\n"; + print_r($refreshResult); +} + +list($refreshResult, $refreshErr) = $cdnManager->refreshDirs($dirs); +if ($refreshErr != null) { + var_dump($refreshErr); +} else { + echo "refresh request sent\n"; + print_r($refreshResult); +} diff --git a/vendor/qiniu/php-sdk/examples/cdn_timestamp_antileech.php b/vendor/qiniu/php-sdk/examples/cdn_timestamp_antileech.php new file mode 100644 index 000000000..d9fd02346 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/cdn_timestamp_antileech.php @@ -0,0 +1,19 @@ + + */ +$thumbLink = $imageUrlBuilder->thumbnail($url, 1, 100, 100); + +// 函数方式调用 也可拼接多个操作参数 图片+水印 +$thumbLink2 = \Qiniu\thumbnail($url2, 1, 100, 100); +var_dump($thumbLink, $thumbLink2); + +/** + * 图片水印 + * + * @param string $url 图片链接 + * @param string $image 水印图片链接 + * @param numeric $dissolve 透明度 [可选] + * @param string $gravity 水印位置 [可选] + * @param numeric $dx 横轴边距 [可选] + * @param numeric $dy 纵轴边距 [可选] + * @param numeric $watermarkScale 自适应原图的短边比例 [可选] + * @link http://developer.qiniu.com/code/v6/api/kodo-api/image/watermark.html + * @return string + * @author Sherlock Ren + */ +$waterLink = $imageUrlBuilder->waterImg($url, $waterImage); +// 函数调用方法 +//$waterLink = \Qiniu\waterImg($url, $waterImage); +var_dump($waterLink); + +/** + * 文字水印 + * + * @param string $url 图片链接 + * @param string $text 文字 + * @param string $font 文字字体 + * @param string $fontSize 文字字号 + * @param string $fontColor 文字颜色 [可选] + * @param numeric $dissolve 透明度 [可选] + * @param string $gravity 水印位置 [可选] + * @param numeric $dx 横轴边距 [可选] + * @param numeric $dy 纵轴边距 [可选] + * @link http://developer.qiniu.com/code/v6/api/kodo-api/image/watermark.html#text-watermark + * @return string + * @author Sherlock Ren + */ +$textLink = $imageUrlBuilder->waterText($url, '你瞅啥', '微软雅黑', 300); +// 函数调用方法 +// $textLink = \Qiniu\waterText($url, '你瞅啥', '微软雅黑', 300); +var_dump($textLink); diff --git a/vendor/qiniu/php-sdk/examples/persistent_fop_init.php b/vendor/qiniu/php-sdk/examples/persistent_fop_init.php new file mode 100644 index 000000000..2df01e9fe --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/persistent_fop_init.php @@ -0,0 +1,19 @@ +execute($bucket, $key, $fops, $pipeline, $notify_url, $force); + +echo "\n====> pfop mkzip result: \n"; +if ($err != null) { + var_dump($err); +} else { + echo "PersistentFop Id: $id\n"; + + $res = "http://api.qiniu.com/status/get/prefop?id=$id"; + echo "Processing result: $res"; +} diff --git a/vendor/qiniu/php-sdk/examples/pfop_vframe.php b/vendor/qiniu/php-sdk/examples/pfop_vframe.php new file mode 100644 index 000000000..e1df2d54d --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/pfop_vframe.php @@ -0,0 +1,46 @@ +useHTTPS = true; +$pfop = new PersistentFop($auth, $config); + +//要进行视频截图操作 +$fops = "vframe/jpg/offset/1/w/480/h/360/rotate/90|saveas/" . + \Qiniu\base64_urlSafeEncode($bucket . ":qiniu_480x360.jpg"); + +list($id, $err) = $pfop->execute($bucket, $key, $fops, $pipeline, $notifyUrl, $force); +echo "\n====> pfop avthumb result: \n"; +if ($err != null) { + var_dump($err); +} else { + echo "PersistentFop Id: $id\n"; +} + +//查询转码的进度和状态 +list($ret, $err) = $pfop->status($id); +echo "\n====> pfop avthumb status: \n"; +if ($err != null) { + var_dump($err); +} else { + var_dump($ret); +} diff --git a/vendor/qiniu/php-sdk/examples/pfop_video_avthumb.php b/vendor/qiniu/php-sdk/examples/pfop_video_avthumb.php new file mode 100644 index 000000000..aebe81545 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/pfop_video_avthumb.php @@ -0,0 +1,47 @@ +useHTTPS=true; + +$pfop = new PersistentFop($auth, $config); + +//要进行转码的转码操作。 http://developer.qiniu.com/docs/v6/api/reference/fop/av/avthumb.html +$fops = "avthumb/mp4/s/640x360/vb/1.4m|saveas/" . \Qiniu\base64_urlSafeEncode($bucket . ":qiniu_640x360.mp4"); + +list($id, $err) = $pfop->execute($bucket, $key, $fops, $pipeline, $notifyUrl, $force); +echo "\n====> pfop avthumb result: \n"; +if ($err != null) { + var_dump($err); +} else { + echo "PersistentFop Id: $id\n"; +} + +//查询转码的进度和状态 +list($ret, $err) = $pfop->status($id); +echo "\n====> pfop avthumb status: \n"; +if ($err != null) { + var_dump($err); +} else { + var_dump($ret); +} diff --git a/vendor/qiniu/php-sdk/examples/pfop_watermark.php b/vendor/qiniu/php-sdk/examples/pfop_watermark.php new file mode 100644 index 000000000..72aa6c443 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/pfop_watermark.php @@ -0,0 +1,52 @@ +useHTTPS=true; +$pfop = new PersistentFop($auth, $config); + +//需要添加水印的图片UrlSafeBase64 +//可以参考http://developer.qiniu.com/code/v6/api/dora-api/av/video-watermark.html +$base64URL = Qiniu\base64_urlSafeEncode('http://devtools.qiniu.com/qiniu.png'); + +//水印参数 +$fops = "avthumb/mp4/s/640x360/vb/1.4m/image/" . $base64URL . "|saveas/" + . \Qiniu\base64_urlSafeEncode($bucket . ":qiniu_wm.mp4"); + +list($id, $err) = $pfop->execute($bucket, $key, $fops, $pipeline, $notifyUrl, $force); +echo "\n====> pfop avthumb result: \n"; +if ($err != null) { + var_dump($err); +} else { + echo "PersistentFop Id: $id\n"; +} + +//查询转码的进度和状态 +list($ret, $err) = $pfop->status($id); +echo "\n====> pfop avthumb status: \n"; +if ($err != null) { + var_dump($err); +} else { + var_dump($ret); +} diff --git a/vendor/qiniu/php-sdk/examples/php-logo.png b/vendor/qiniu/php-sdk/examples/php-logo.png new file mode 100644 index 000000000..77e051fe4 Binary files /dev/null and b/vendor/qiniu/php-sdk/examples/php-logo.png differ diff --git a/vendor/qiniu/php-sdk/examples/prefop.php b/vendor/qiniu/php-sdk/examples/prefop.php new file mode 100644 index 000000000..ae61a5f7d --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/prefop.php @@ -0,0 +1,29 @@ +status($id); +echo "\n====> pfop avthumb status: \n"; +if ($err != null) { + var_dump($err); +} else { + var_dump($ret); +} diff --git a/vendor/qiniu/php-sdk/examples/qetag.php b/vendor/qiniu/php-sdk/examples/qetag.php new file mode 100644 index 000000000..f6aff8a72 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/qetag.php @@ -0,0 +1,11 @@ + 'video/x-mp4', + 'qiniu.png' => 'image/x-png', + 'qiniu.jpg' => 'image/x-jpg' +); + +$ops = $bucketManager->buildBatchChangeMime($bucket, $keyMimePairs); +list($ret, $err) = $bucketManager->batch($ops); +if ($err) { + print_r($err); +} else { + print_r($ret); +} diff --git a/vendor/qiniu/php-sdk/examples/rs_batch_change_type.php b/vendor/qiniu/php-sdk/examples/rs_batch_change_type.php new file mode 100644 index 000000000..5f3f1cdb0 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/rs_batch_change_type.php @@ -0,0 +1,34 @@ +buildBatchChangeType($bucket, $keyTypePairs); +list($ret, $err) = $bucketManager->batch($ops); +if ($err) { + print_r($err); +} else { + print_r($ret); +} diff --git a/vendor/qiniu/php-sdk/examples/rs_batch_copy.php b/vendor/qiniu/php-sdk/examples/rs_batch_copy.php new file mode 100644 index 000000000..988c642fd --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/rs_batch_copy.php @@ -0,0 +1,36 @@ +buildBatchCopy($srcBucket, $keyPairs, $destBucket, true); +list($ret, $err) = $bucketManager->batch($ops); +if ($err) { + print_r($err); +} else { + print_r($ret); +} diff --git a/vendor/qiniu/php-sdk/examples/rs_batch_delete.php b/vendor/qiniu/php-sdk/examples/rs_batch_delete.php new file mode 100644 index 000000000..4f15586a2 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/rs_batch_delete.php @@ -0,0 +1,28 @@ +buildBatchDelete($bucket, $keys); +list($ret, $err) = $bucketManager->batch($ops); +if ($err) { + print_r($err); +} else { + print_r($ret); +} diff --git a/vendor/qiniu/php-sdk/examples/rs_batch_delete_after_days.php b/vendor/qiniu/php-sdk/examples/rs_batch_delete_after_days.php new file mode 100644 index 000000000..dabfe84e4 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/rs_batch_delete_after_days.php @@ -0,0 +1,34 @@ +buildBatchDeleteAfterDays($bucket, $keyDayPairs); +list($ret, $err) = $bucketManager->batch($ops); +if ($err) { + print_r($err); +} else { + print_r($ret); +} diff --git a/vendor/qiniu/php-sdk/examples/rs_batch_move.php b/vendor/qiniu/php-sdk/examples/rs_batch_move.php new file mode 100644 index 000000000..89225221e --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/rs_batch_move.php @@ -0,0 +1,36 @@ +buildBatchMove($srcBucket, $keyPairs, $destBucket, true); +list($ret, $err) = $bucketManager->batch($ops); +if ($err) { + print_r($err); +} else { + print_r($ret); +} diff --git a/vendor/qiniu/php-sdk/examples/rs_batch_stat.php b/vendor/qiniu/php-sdk/examples/rs_batch_stat.php new file mode 100644 index 000000000..a95fee7b2 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/rs_batch_stat.php @@ -0,0 +1,28 @@ +buildBatchStat($bucket, $keys); +list($ret, $err) = $bucketManager->batch($ops); +if ($err) { + print_r($err); +} else { + print_r($ret); +} diff --git a/vendor/qiniu/php-sdk/examples/rs_bucket_domains.php b/vendor/qiniu/php-sdk/examples/rs_bucket_domains.php new file mode 100644 index 000000000..ea27cdc03 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/rs_bucket_domains.php @@ -0,0 +1,19 @@ +domains($bucket); +if ($err) { + print_r($err); +} else { + print_r($domains); +} diff --git a/vendor/qiniu/php-sdk/examples/rs_buckets.php b/vendor/qiniu/php-sdk/examples/rs_buckets.php new file mode 100644 index 000000000..5fe1304d6 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/rs_buckets.php @@ -0,0 +1,19 @@ +buckets(true); +if ($err) { + print_r($err); +} else { + print_r($buckets); +} diff --git a/vendor/qiniu/php-sdk/examples/rs_change_mime.php b/vendor/qiniu/php-sdk/examples/rs_change_mime.php new file mode 100644 index 000000000..0d3f3ad09 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/rs_change_mime.php @@ -0,0 +1,20 @@ +changeMime($bucket, $key, $newMime); +if ($err) { + print_r($err); +} diff --git a/vendor/qiniu/php-sdk/examples/rs_change_type.php b/vendor/qiniu/php-sdk/examples/rs_change_type.php new file mode 100644 index 000000000..acb896351 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/rs_change_type.php @@ -0,0 +1,20 @@ +changeType($bucket, $key, $fileType); +if ($err) { + print_r($err); +} diff --git a/vendor/qiniu/php-sdk/examples/rs_copy.php b/vendor/qiniu/php-sdk/examples/rs_copy.php new file mode 100644 index 000000000..10e7de8e4 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/rs_copy.php @@ -0,0 +1,22 @@ +copy($srcBucket, $srcKey, $destBucket, $destKey, true); +if ($err) { + print_r($err); +} diff --git a/vendor/qiniu/php-sdk/examples/rs_delete.php b/vendor/qiniu/php-sdk/examples/rs_delete.php new file mode 100644 index 000000000..365d3bec1 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/rs_delete.php @@ -0,0 +1,17 @@ +delete($bucket, $key); +if ($err) { + print_r($err); +} diff --git a/vendor/qiniu/php-sdk/examples/rs_delete_after_days.php b/vendor/qiniu/php-sdk/examples/rs_delete_after_days.php new file mode 100644 index 000000000..ba0b58697 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/rs_delete_after_days.php @@ -0,0 +1,20 @@ +deleteAfterDays($bucket, $key, $days); +if ($err) { + print_r($err); +} diff --git a/vendor/qiniu/php-sdk/examples/rs_download_urls.php b/vendor/qiniu/php-sdk/examples/rs_download_urls.php new file mode 100644 index 000000000..522b9f2ff --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/rs_download_urls.php @@ -0,0 +1,17 @@ +/ +$baseUrl = 'http://if-pri.qiniudn.com/qiniu.png?imageView2/1/h/500'; +// 对链接进行签名 +$signedUrl = $auth->privateDownloadUrl($baseUrl); + +echo $signedUrl; diff --git a/vendor/qiniu/php-sdk/examples/rs_fetch.php b/vendor/qiniu/php-sdk/examples/rs_fetch.php new file mode 100644 index 000000000..6792410b1 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/rs_fetch.php @@ -0,0 +1,34 @@ +fetch($url, $bucket, $key); +echo "=====> fetch $url to bucket: $bucket key: $key\n"; +if ($err !== null) { + var_dump($err); +} else { + print_r($ret); +} + +// 不指定key时,以文件内容的hash作为文件名 +$key = null; +list($ret, $err) = $bucketManager->fetch($url, $bucket, $key); +echo "=====> fetch $url to bucket: $bucket key: $(etag)\n"; +if ($err !== null) { + var_dump($err); +} else { + print_r($ret); +} diff --git a/vendor/qiniu/php-sdk/examples/rs_move.php b/vendor/qiniu/php-sdk/examples/rs_move.php new file mode 100644 index 000000000..56105857b --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/rs_move.php @@ -0,0 +1,22 @@ +move($srcBucket, $srcKey, $destBucket, $destKey, true); +if ($err) { + print_r($err); +} diff --git a/vendor/qiniu/php-sdk/examples/rs_prefetch.php b/vendor/qiniu/php-sdk/examples/rs_prefetch.php new file mode 100644 index 000000000..de947a7e9 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/rs_prefetch.php @@ -0,0 +1,17 @@ +prefetch($bucket, $key); +if ($err) { + print_r($err); +} diff --git a/vendor/qiniu/php-sdk/examples/rs_stat.php b/vendor/qiniu/php-sdk/examples/rs_stat.php new file mode 100644 index 000000000..891e4e027 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/rs_stat.php @@ -0,0 +1,19 @@ +stat($bucket, $key); +if ($err) { + print_r($err); +} else { + print_r($fileInfo); +} diff --git a/vendor/qiniu/php-sdk/examples/rsf_list_bucket.php b/vendor/qiniu/php-sdk/examples/rsf_list_bucket.php new file mode 100644 index 000000000..5ce9a629c --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/rsf_list_bucket.php @@ -0,0 +1,46 @@ +listFiles($bucket, $prefix, $marker, $limit, $delimiter); + if ($err !== null) { + echo "\n====> list file err: \n"; + var_dump($err); + } else { + $marker = null; + if (array_key_exists('marker', $ret)) { + $marker = $ret['marker']; + } + echo "Marker: $marker\n"; + echo "\nList Items====>\n"; + //var_dump($ret['items']); + print('items count:' . count($ret['items']) . "\n"); + if (array_key_exists('commonPrefixes', $ret)) { + print_r($ret['commonPrefixes']); + } + } +} while (!empty($marker)); diff --git a/vendor/qiniu/php-sdk/examples/rsf_list_files.php b/vendor/qiniu/php-sdk/examples/rsf_list_files.php new file mode 100644 index 000000000..a3981c548 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/rsf_list_files.php @@ -0,0 +1,38 @@ +listFiles($bucket, $prefix, $marker, $limit, $delimiter); +if ($err !== null) { + echo "\n====> list file err: \n"; + var_dump($err); +} else { + if (array_key_exists('marker', $ret)) { + echo "Marker:" . $ret["marker"] . "\n"; + } + echo "\nList Iterms====>\n"; + //var_dump($ret['items']); +} diff --git a/vendor/qiniu/php-sdk/examples/saveas.php b/vendor/qiniu/php-sdk/examples/saveas.php new file mode 100644 index 000000000..d896f3bcd --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/saveas.php @@ -0,0 +1,28 @@ +:';//为生成缩略图的文件名 +//生成的值 +$encodedEntryURI = \Qiniu\base64_urlSafeEncode($entry); + +//使用SecretKey对新的下载URL进行HMAC1-SHA1签名 +$newurl = "78re52.com1.z0.glb.clouddn.com/resource/Ship.jpg?imageView2/2/w/200/h/200|saveas/" . $encodedEntryURI; + +$sign = hash_hmac("sha1", $newurl, $secretKey, true); + +//对签名进行URL安全的Base64编码 +$encodedSign = \Qiniu\base64_urlSafeEncode($sign); +//最终得到的完整下载URL +$finalURL = "http://" . $newurl . "/sign/" . $accessKey . ":" . $encodedSign; + +$callbackBody = file_get_contents("$finalURL"); + +echo $callbackBody; diff --git a/vendor/qiniu/php-sdk/examples/upload_and_callback.php b/vendor/qiniu/php-sdk/examples/upload_and_callback.php new file mode 100644 index 000000000..8782e87d1 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/upload_and_callback.php @@ -0,0 +1,31 @@ + 'http://your.domain.com/upload_verify_callback.php', + 'callbackBody' => 'filename=$(fname)&filesize=$(fsize)' +); +$uptoken = $auth->uploadToken($bucket, null, 3600, $policy); + +//上传文件的本地路径 +$filePath = './php-logo.png'; + +$uploadMgr = new UploadManager(); + +list($ret, $err) = $uploadMgr->putFile($uptoken, null, $filePath); +echo "\n====> putFile result: \n"; +if ($err !== null) { + var_dump($err); +} else { + var_dump($ret); +} diff --git a/vendor/qiniu/php-sdk/examples/upload_and_pfop.php b/vendor/qiniu/php-sdk/examples/upload_and_pfop.php new file mode 100644 index 000000000..898c09c63 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/upload_and_pfop.php @@ -0,0 +1,38 @@ + $pfop, + 'persistentNotifyUrl' => $notifyUrl, + 'persistentPipeline' => $pipeline +); +$token = $auth->uploadToken($bucket, null, 3600, $policy); + +list($ret, $err) = $uploadMgr->putFile($token, null, $key); +echo "\n====> putFile result: \n"; +if ($err !== null) { + var_dump($err); +} else { + var_dump($ret); +} diff --git a/vendor/qiniu/php-sdk/examples/upload_mgr_init.php b/vendor/qiniu/php-sdk/examples/upload_mgr_init.php new file mode 100644 index 000000000..3459ef1d7 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/upload_mgr_init.php @@ -0,0 +1,18 @@ +uploadToken($bucket); + +// 构建 UploadManager 对象 +$uploadMgr = new UploadManager(); diff --git a/vendor/qiniu/php-sdk/examples/upload_multi_demos.php b/vendor/qiniu/php-sdk/examples/upload_multi_demos.php new file mode 100644 index 000000000..3bbcd6030 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/upload_multi_demos.php @@ -0,0 +1,85 @@ +uploadToken($bucket); +$uploadMgr = new UploadManager(); + +//----------------------------------------upload demo1 ---------------------------------------- +// 上传字符串到七牛 +list($ret, $err) = $uploadMgr->put($token, null, 'content string'); +echo "\n====> put result: \n"; +if ($err !== null) { + var_dump($err); +} else { + var_dump($ret); +} + + +//----------------------------------------upload demo2 ---------------------------------------- +// 上传文件到七牛 +$filePath = './php-logo.png'; +$key = 'php-logo.png'; +list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath); +echo "\n====> putFile result: \n"; +if ($err !== null) { + var_dump($err); +} else { + var_dump($ret); +} + + +//----------------------------------------upload demo3 ---------------------------------------- +// 上传文件到七牛后, 七牛将文件名和文件大小回调给业务服务器. +// 可参考文档: http://developer.qiniu.com/docs/v6/api/reference/security/put-policy.html +$policy = array( + 'callbackUrl' => 'http://172.30.251.210/upload_verify_callback.php', + 'callbackBody' => 'filename=$(fname)&filesize=$(fsize)' +// 'callbackBodyType' => 'application/json', +// 'callbackBody' => '{"filename":$(fname), "filesize": $(fsize)}' //设置application/json格式回调 +); +$token = $auth->uploadToken($bucket, null, 3600, $policy); + + +list($ret, $err) = $uploadMgr->putFile($token, null, $key); +echo "\n====> putFile result: \n"; +if ($err !== null) { + var_dump($err); +} else { + var_dump($ret); +} + + +//----------------------------------------upload demo4 ---------------------------------------- +//上传视频,上传完成后进行m3u8的转码, 并给视频打水印 +$wmImg = Qiniu\base64_urlSafeEncode('http://devtools.qiniudn.com/qiniu.png'); +$pfop = "avthumb/m3u8/wmImage/$wmImg"; + +//转码完成后回调到业务服务器。(公网可以访问,并相应200 OK) +$notifyUrl = 'http://notify.fake.com'; + +//独立的转码队列:https://portal.qiniu.com/mps/pipeline + + +$policy = array( + 'persistentOps' => $pfop, + 'persistentNotifyUrl' => $notifyUrl, + 'persistentPipeline' => $pipeline +); +$token = $auth->uploadToken($bucket, null, 3600, $policy); +print($token); +list($ret, $err) = $uploadMgr->putFile($token, null, $key); +echo "\n====> putFile result: \n"; +if ($err !== null) { + var_dump($err); +} else { + var_dump($ret); +} diff --git a/vendor/qiniu/php-sdk/examples/upload_simple_file.php b/vendor/qiniu/php-sdk/examples/upload_simple_file.php new file mode 100644 index 000000000..9d003f0fb --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/upload_simple_file.php @@ -0,0 +1,37 @@ +uploadToken($bucket); + +// 要上传文件的本地路径 +$filePath = './php-logo.png'; + +// 上传到七牛后保存的文件名 +$key = 'my-php-logo.png'; + +// 初始化 UploadManager 对象并进行文件的上传。 +$uploadMgr = new UploadManager(); + +// 调用 UploadManager 的 putFile 方法进行文件的上传。 +list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath); +echo "\n====> putFile result: \n"; +if ($err !== null) { + var_dump($err); +} else { + var_dump($ret); +} diff --git a/vendor/qiniu/php-sdk/examples/upload_tokens.php b/vendor/qiniu/php-sdk/examples/upload_tokens.php new file mode 100644 index 000000000..90f24238b --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/upload_tokens.php @@ -0,0 +1,68 @@ +uploadToken($bucket, null, $expires, $policy, true); +print($upToken . "\n"); + +// 自定义凭证有效期(示例2小时) +$expires = 7200; +$upToken = $auth->uploadToken($bucket, null, $expires, $policy, true); +print($upToken . "\n"); + +// 覆盖上传凭证 +$expires = 3600; +$keyToOverwrite = 'qiniu.mp4'; +$upToken = $auth->uploadToken($bucket, $keyToOverwrite, $expires, $policy, true); +print($upToken . "\n"); + +//自定义上传回复(非callback模式)凭证 +$returnBody = '{"key":"$(key)","hash":"$(etag)","fsize":$(fsize),"bucket":"$(bucket)","name":"$(x:name)"}'; +$policy = array( + 'returnBody' => $returnBody +); +$upToken = $auth->uploadToken($bucket, null, $expires, $policy, true); +print($upToken . "\n"); + +//带回调业务服务器的凭证(application/json) +$policy = array( + 'callbackUrl' => 'http://api.example.com/qiniu/upload/callback', + 'callbackBody' => '{"key":"$(key)","hash":"$(etag)","fsize":$(fsize),"bucket":"$(bucket)","name":"$(x:name)"}', + 'callbackBodyType' => 'application/json' +); +$upToken = $auth->uploadToken($bucket, null, $expires, $policy, true); +print($upToken . "\n"); + + +//带回调业务服务器的凭证(application/x-www-form-urlencoded) +$policy = array( + 'callbackUrl' => 'http://api.example.com/qiniu/upload/callback', + 'callbackBody' => 'key=$(key)&hash=$(etag)&bucket=$(bucket)&fsize=$(fsize)&name=$(x:name)' +); +$upToken = $auth->uploadToken($bucket, null, $expires, $policy, true); +print($upToken . "\n"); + +//带数据处理的凭证 +$saveMp4Entry = \Qiniu\base64_urlSafeEncode($bucket . ":avthumb_test_target.mp4"); +$saveJpgEntry = \Qiniu\base64_urlSafeEncode($bucket . ":vframe_test_target.jpg"); +$avthumbMp4Fop = "avthumb/mp4|saveas/" . $saveMp4Entry; +$vframeJpgFop = "vframe/jpg/offset/1|saveas/" . $saveJpgEntry; +$policy = array( + 'persistentOps' => $avthumbMp4Fop . ";" . $vframeJpgFop, + 'persistentPipeline' => "video-pipe", + 'persistentNotifyUrl' => "http://api.example.com/qiniu/pfop/notify", +); +$upToken = $auth->uploadToken($bucket, null, $expires, $policy, true); +print($upToken . "\n"); diff --git a/vendor/qiniu/php-sdk/examples/upload_verify_callback.php b/vendor/qiniu/php-sdk/examples/upload_verify_callback.php new file mode 100644 index 000000000..ffbbc8063 --- /dev/null +++ b/vendor/qiniu/php-sdk/examples/upload_verify_callback.php @@ -0,0 +1,32 @@ +verifyCallback($contentType, $authorization, $url, $callbackBody); + +if ($isQiniuCallback) { + $resp = array('ret' => 'success'); +} else { + $resp = array('ret' => 'failed'); +} + +echo json_encode($resp); diff --git a/vendor/qiniu/php-sdk/phpunit.xml.dist b/vendor/qiniu/php-sdk/phpunit.xml.dist new file mode 100644 index 000000000..72ff67f97 --- /dev/null +++ b/vendor/qiniu/php-sdk/phpunit.xml.dist @@ -0,0 +1,19 @@ + + + + + tests + + + + diff --git a/vendor/qiniu/php-sdk/src/Qiniu/Auth.php b/vendor/qiniu/php-sdk/src/Qiniu/Auth.php new file mode 100644 index 000000000..b5e4a6bcf --- /dev/null +++ b/vendor/qiniu/php-sdk/src/Qiniu/Auth.php @@ -0,0 +1,187 @@ +accessKey = $accessKey; + $this->secretKey = $secretKey; + } + + public function getAccessKey() + { + return $this->accessKey; + } + + public function sign($data) + { + $hmac = hash_hmac('sha1', $data, $this->secretKey, true); + return $this->accessKey . ':' . \Qiniu\base64_urlSafeEncode($hmac); + } + + public function signWithData($data) + { + $encodedData = \Qiniu\base64_urlSafeEncode($data); + return $this->sign($encodedData) . ':' . $encodedData; + } + + public function signRequest($urlString, $body, $contentType = null) + { + $url = parse_url($urlString); + $data = ''; + if (array_key_exists('path', $url)) { + $data = $url['path']; + } + if (array_key_exists('query', $url)) { + $data .= '?' . $url['query']; + } + $data .= "\n"; + + if ($body !== null && $contentType === 'application/x-www-form-urlencoded') { + $data .= $body; + } + return $this->sign($data); + } + + public function verifyCallback($contentType, $originAuthorization, $url, $body) + { + $authorization = 'QBox ' . $this->signRequest($url, $body, $contentType); + return $originAuthorization === $authorization; + } + + public function privateDownloadUrl($baseUrl, $expires = 3600) + { + $deadline = time() + $expires; + + $pos = strpos($baseUrl, '?'); + if ($pos !== false) { + $baseUrl .= '&e='; + } else { + $baseUrl .= '?e='; + } + $baseUrl .= $deadline; + + $token = $this->sign($baseUrl); + return "$baseUrl&token=$token"; + } + + public function uploadToken($bucket, $key = null, $expires = 3600, $policy = null, $strictPolicy = true) + { + $deadline = time() + $expires; + $scope = $bucket; + if ($key !== null) { + $scope .= ':' . $key; + } + + $args = self::copyPolicy($args, $policy, $strictPolicy); + $args['scope'] = $scope; + $args['deadline'] = $deadline; + + $b = json_encode($args); + return $this->signWithData($b); + } + + /** + *上传策略,参数规格详见 + *http://developer.qiniu.com/docs/v6/api/reference/security/put-policy.html + */ + private static $policyFields = array( + 'callbackUrl', + 'callbackBody', + 'callbackHost', + 'callbackBodyType', + 'callbackFetchKey', + + 'returnUrl', + 'returnBody', + + 'endUser', + 'saveKey', + 'insertOnly', + + 'detectMime', + 'mimeLimit', + 'fsizeMin', + 'fsizeLimit', + + 'persistentOps', + 'persistentNotifyUrl', + 'persistentPipeline', + + 'deleteAfterDays', + 'fileType', + 'isPrefixalScope', + ); + + private static function copyPolicy(&$policy, $originPolicy, $strictPolicy) + { + if ($originPolicy === null) { + return array(); + } + foreach ($originPolicy as $key => $value) { + if (!$strictPolicy || in_array((string)$key, self::$policyFields, true)) { + $policy[$key] = $value; + } + } + return $policy; + } + + public function authorization($url, $body = null, $contentType = null) + { + $authorization = 'QBox ' . $this->signRequest($url, $body, $contentType); + return array('Authorization' => $authorization); + } + + public function authorizationV2($url, $method, $body = null, $contentType = null) + { + $urlItems = parse_url($url); + $host = $urlItems['host']; + + if (isset($urlItems['port'])) { + $port = $urlItems['port']; + } else { + $port = ''; + } + + $path = $urlItems['path']; + if (isset($urlItems['query'])) { + $query = $urlItems['query']; + } else { + $query = ''; + } + + //write request uri + $toSignStr = $method . ' ' . $path; + if (!empty($query)) { + $toSignStr .= '?' . $query; + } + + //write host and port + $toSignStr .= "\nHost: " . $host; + if (!empty($port)) { + $toSignStr .= ":" . $port; + } + + //write content type + if (!empty($contentType)) { + $toSignStr .= "\nContent-Type: " . $contentType; + } + + $toSignStr .= "\n\n"; + + //write body + if (!empty($body)) { + $toSignStr .= $body; + } + + $sign = $this->sign($toSignStr); + $auth = 'Qiniu ' . $sign; + return array('Authorization' => $auth); + } +} diff --git a/vendor/qiniu/php-sdk/src/Qiniu/Cdn/CdnManager.php b/vendor/qiniu/php-sdk/src/Qiniu/Cdn/CdnManager.php new file mode 100644 index 000000000..a460ec2df --- /dev/null +++ b/vendor/qiniu/php-sdk/src/Qiniu/Cdn/CdnManager.php @@ -0,0 +1,190 @@ +auth = $auth; + $this->server = 'http://fusion.qiniuapi.com'; + } + + /** + * @param array $urls 待刷新的文件链接数组 + * @return array + */ + public function refreshUrls(array $urls) + { + return $this->refreshUrlsAndDirs($urls, array()); + } + + /** + * @param array $dirs 待刷新的文件链接数组 + * @return array + * 目前客户默认没有目录刷新权限,刷新会有400038报错,参考:https://developer.qiniu.com/fusion/api/1229/cache-refresh + * 需要刷新目录请工单联系技术支持 https://support.qiniu.com/tickets/category + */ + public function refreshDirs(array $dirs) + { + return $this->refreshUrlsAndDirs(array(), $dirs); + } + + /** + * @param array $urls 待刷新的文件链接数组 + * @param array $dirs 待刷新的目录链接数组 + * + * @return array 刷新的请求回复和错误,参考 examples/cdn_manager.php 代码 + * @link http://developer.qiniu.com/article/fusion/api/refresh.html + * + * 目前客户默认没有目录刷新权限,刷新会有400038报错,参考:https://developer.qiniu.com/fusion/api/1229/cache-refresh + * 需要刷新目录请工单联系技术支持 https://support.qiniu.com/tickets/category + */ + public function refreshUrlsAndDirs(array $urls, array $dirs) + { + $req = array(); + if (!empty($urls)) { + $req['urls'] = $urls; + } + if (!empty($dirs)) { + $req['dirs'] = $dirs; + } + + $url = $this->server . '/v2/tune/refresh'; + $body = json_encode($req); + return $this->post($url, $body); + } + + /** + * @param array $urls 待预取的文件链接数组 + * + * @return array 预取的请求回复和错误,参考 examples/cdn_manager.php 代码 + * + * @link http://developer.qiniu.com/article/fusion/api/refresh.html + */ + public function prefetchUrls(array $urls) + { + $req = array( + 'urls' => $urls, + ); + + $url = $this->server . '/v2/tune/prefetch'; + $body = json_encode($req); + return $this->post($url, $body); + } + + /** + * @param array $domains 待获取带宽数据的域名数组 + * @param string $startDate 开始的日期,格式类似 2017-01-01 + * @param string $endDate 结束的日期,格式类似 2017-01-01 + * @param string $granularity 获取数据的时间间隔,可以是 5min, hour 或者 day + * + * @return array 带宽数据和错误信息,参考 examples/cdn_manager.php 代码 + * + * @link http://developer.qiniu.com/article/fusion/api/traffic-bandwidth.html + */ + public function getBandwidthData(array $domains, $startDate, $endDate, $granularity) + { + $req = array(); + $req['domains'] = implode(';', $domains); + $req['startDate'] = $startDate; + $req['endDate'] = $endDate; + $req['granularity'] = $granularity; + + $url = $this->server . '/v2/tune/bandwidth'; + $body = json_encode($req); + return $this->post($url, $body); + } + + /** + * @param array $domains 待获取流量数据的域名数组 + * @param string $startDate 开始的日期,格式类似 2017-01-01 + * @param string $endDate 结束的日期,格式类似 2017-01-01 + * @param string $granularity 获取数据的时间间隔,可以是 5min, hour 或者 day + * + * @return array 流量数据和错误信息,参考 examples/cdn_manager.php 代码 + * + * @link http://developer.qiniu.com/article/fusion/api/traffic-bandwidth.html + */ + public function getFluxData(array $domains, $startDate, $endDate, $granularity) + { + $req = array(); + $req['domains'] = implode(';', $domains); + $req['startDate'] = $startDate; + $req['endDate'] = $endDate; + $req['granularity'] = $granularity; + + $url = $this->server . '/v2/tune/flux'; + $body = json_encode($req); + return $this->post($url, $body); + } + + /** + * @param array $domains 待获取日志下载链接的域名数组 + * @param string $logDate 获取指定日期的日志下载链接,格式类似 2017-01-01 + * + * @return array 日志下载链接数据和错误信息,参考 examples/cdn_manager.php 代码 + * + * @link http://developer.qiniu.com/article/fusion/api/log.html + */ + public function getCdnLogList(array $domains, $logDate) + { + $req = array(); + $req['domains'] = implode(';', $domains); + $req['day'] = $logDate; + + $url = $this->server . '/v2/tune/log/list'; + $body = json_encode($req); + return $this->post($url, $body); + } + + private function post($url, $body) + { + $headers = $this->auth->authorization($url, $body, 'application/json'); + $headers['Content-Type'] = 'application/json'; + $ret = Client::post($url, $body, $headers); + if (!$ret->ok()) { + return array(null, new Error($url, $ret)); + } + $r = ($ret->body === null) ? array() : $ret->json(); + return array($r, null); + } + + /** + * 构建时间戳防盗链鉴权的访问外链 + * + * @param string $rawUrl 需要签名的资源url + * @param string $encryptKey 时间戳防盗链密钥 + * @param string $durationInSeconds 链接的有效期(以秒为单位) + * + * @return string 带鉴权信息的资源外链,参考 examples/cdn_timestamp_antileech.php 代码 + */ + public static function createTimestampAntiLeechUrl($rawUrl, $encryptKey, $durationInSeconds) + { + + $parsedUrl = parse_url($rawUrl); + + $deadline = time() + $durationInSeconds; + $expireHex = dechex($deadline); + $path = isset($parsedUrl['path']) ? $parsedUrl['path'] : ''; + + $strToSign = $encryptKey . $path . $expireHex; + $signStr = md5($strToSign); + + if (isset($parsedUrl['query'])) { + $signedUrl = $rawUrl . '&sign=' . $signStr . '&t=' . $expireHex; + } else { + $signedUrl = $rawUrl . '?sign=' . $signStr . '&t=' . $expireHex; + } + + return $signedUrl; + } +} diff --git a/vendor/qiniu/php-sdk/src/Qiniu/Config.php b/vendor/qiniu/php-sdk/src/Qiniu/Config.php new file mode 100644 index 000000000..296caa9cd --- /dev/null +++ b/vendor/qiniu/php-sdk/src/Qiniu/Config.php @@ -0,0 +1,134 @@ +zone = $z; + $this->useHTTPS = false; + $this->useCdnDomains = false; + $this->zoneCache = array(); + } + + public function getUpHost($accessKey, $bucket) + { + $zone = $this->getZone($accessKey, $bucket); + if ($this->useHTTPS === true) { + $scheme = "https://"; + } else { + $scheme = "http://"; + } + + $host = $zone->srcUpHosts[0]; + if ($this->useCdnDomains === true) { + $host = $zone->cdnUpHosts[0]; + } + + return $scheme . $host; + } + + public function getUpBackupHost($accessKey, $bucket) + { + $zone = $this->getZone($accessKey, $bucket); + if ($this->useHTTPS === true) { + $scheme = "https://"; + } else { + $scheme = "http://"; + } + + $host = $zone->cdnUpHosts[0]; + if ($this->useCdnDomains === true) { + $host = $zone->srcUpHosts[0]; + } + + return $scheme . $host; + } + + public function getRsHost($accessKey, $bucket) + { + $zone = $this->getZone($accessKey, $bucket); + + if ($this->useHTTPS === true) { + $scheme = "https://"; + } else { + $scheme = "http://"; + } + + return $scheme . $zone->rsHost; + } + + public function getRsfHost($accessKey, $bucket) + { + $zone = $this->getZone($accessKey, $bucket); + + if ($this->useHTTPS === true) { + $scheme = "https://"; + } else { + $scheme = "http://"; + } + + return $scheme . $zone->rsfHost; + } + + public function getIovipHost($accessKey, $bucket) + { + $zone = $this->getZone($accessKey, $bucket); + + if ($this->useHTTPS === true) { + $scheme = "https://"; + } else { + $scheme = "http://"; + } + + return $scheme . $zone->iovipHost; + } + + public function getApiHost($accessKey, $bucket) + { + $zone = $this->getZone($accessKey, $bucket); + + if ($this->useHTTPS === true) { + $scheme = "https://"; + } else { + $scheme = "http://"; + } + + return $scheme . $zone->apiHost; + } + + private function getZone($accessKey, $bucket) + { + $cacheId = "$accessKey:$bucket"; + + if (isset($this->zoneCache[$cacheId])) { + $zone = $this->zoneCache[$cacheId]; + } elseif (isset($this->zone)) { + $zone = $this->zone; + $this->zoneCache[$cacheId] = $zone; + } else { + $zone = Zone::queryZone($accessKey, $bucket); + $this->zoneCache[$cacheId] = $zone; + } + return $zone; + } +} diff --git a/vendor/qiniu/php-sdk/src/Qiniu/Etag.php b/vendor/qiniu/php-sdk/src/Qiniu/Etag.php new file mode 100644 index 000000000..d7be0644a --- /dev/null +++ b/vendor/qiniu/php-sdk/src/Qiniu/Etag.php @@ -0,0 +1,76 @@ + $val) { + array_push($data, '--' . $mimeBoundary); + array_push($data, "Content-Disposition: form-data; name=\"$key\""); + array_push($data, ''); + array_push($data, $val); + } + + array_push($data, '--' . $mimeBoundary); + $finalMimeType = empty($mimeType) ? 'application/octet-stream' : $mimeType; + $finalFileName = self::escapeQuotes($fileName); + array_push($data, "Content-Disposition: form-data; name=\"$name\"; filename=\"$finalFileName\""); + array_push($data, "Content-Type: $finalMimeType"); + array_push($data, ''); + array_push($data, $fileBody); + + array_push($data, '--' . $mimeBoundary . '--'); + array_push($data, ''); + + $body = implode("\r\n", $data); + $contentType = 'multipart/form-data; boundary=' . $mimeBoundary; + $headers['Content-Type'] = $contentType; + $request = new Request('POST', $url, $headers, $body); + return self::sendRequest($request); + } + + private static function userAgent() + { + $sdkInfo = "QiniuPHP/" . Config::SDK_VER; + + $systemInfo = php_uname("s"); + $machineInfo = php_uname("m"); + + $envInfo = "($systemInfo/$machineInfo)"; + + $phpVer = phpversion(); + + $ua = "$sdkInfo $envInfo PHP/$phpVer"; + return $ua; + } + + public static function sendRequest($request) + { + $t1 = microtime(true); + $ch = curl_init(); + $options = array( + CURLOPT_USERAGENT => self::userAgent(), + CURLOPT_RETURNTRANSFER => true, + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_SSL_VERIFYHOST => false, + CURLOPT_HEADER => true, + CURLOPT_NOBODY => false, + CURLOPT_CUSTOMREQUEST => $request->method, + CURLOPT_URL => $request->url, + ); + + // Handle open_basedir & safe mode + if (!ini_get('safe_mode') && !ini_get('open_basedir')) { + $options[CURLOPT_FOLLOWLOCATION] = true; + } + + if (!empty($request->headers)) { + $headers = array(); + foreach ($request->headers as $key => $val) { + array_push($headers, "$key: $val"); + } + $options[CURLOPT_HTTPHEADER] = $headers; + } + curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); + + if (!empty($request->body)) { + $options[CURLOPT_POSTFIELDS] = $request->body; + } + curl_setopt_array($ch, $options); + $result = curl_exec($ch); + $t2 = microtime(true); + $duration = round($t2 - $t1, 3); + $ret = curl_errno($ch); + if ($ret !== 0) { + $r = new Response(-1, $duration, array(), null, curl_error($ch)); + curl_close($ch); + return $r; + } + $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); + $headers = self::parseHeaders(substr($result, 0, $header_size)); + $body = substr($result, $header_size); + curl_close($ch); + return new Response($code, $duration, $headers, $body, null); + } + + private static function parseHeaders($raw) + { + $headers = array(); + $headerLines = explode("\r\n", $raw); + foreach ($headerLines as $line) { + $headerLine = trim($line); + $kv = explode(':', $headerLine); + if (count($kv) > 1) { + $kv[0] = ucwords($kv[0], '-'); + $headers[$kv[0]] = trim($kv[1]); + } + } + return $headers; + } + + private static function escapeQuotes($str) + { + $find = array("\\", "\""); + $replace = array("\\\\", "\\\""); + return str_replace($find, $replace, $str); + } +} diff --git a/vendor/qiniu/php-sdk/src/Qiniu/Http/Error.php b/vendor/qiniu/php-sdk/src/Qiniu/Http/Error.php new file mode 100644 index 000000000..73477cf40 --- /dev/null +++ b/vendor/qiniu/php-sdk/src/Qiniu/Http/Error.php @@ -0,0 +1,35 @@ + + * {"error" : "detailed error message"} + * + */ +final class Error +{ + private $url; + private $response; + + public function __construct($url, $response) + { + $this->url = $url; + $this->response = $response; + } + + public function code() + { + return $this->response->statusCode; + } + + public function getResponse() + { + return $this->response; + } + + public function message() + { + return $this->response->error; + } +} diff --git a/vendor/qiniu/php-sdk/src/Qiniu/Http/Request.php b/vendor/qiniu/php-sdk/src/Qiniu/Http/Request.php new file mode 100644 index 000000000..43b0bfdb2 --- /dev/null +++ b/vendor/qiniu/php-sdk/src/Qiniu/Http/Request.php @@ -0,0 +1,18 @@ +method = strtoupper($method); + $this->url = $url; + $this->headers = $headers; + $this->body = $body; + } +} diff --git a/vendor/qiniu/php-sdk/src/Qiniu/Http/Response.php b/vendor/qiniu/php-sdk/src/Qiniu/Http/Response.php new file mode 100644 index 000000000..f22ab371e --- /dev/null +++ b/vendor/qiniu/php-sdk/src/Qiniu/Http/Response.php @@ -0,0 +1,176 @@ + 'Continue', + 101 => 'Switching Protocols', + 102 => 'Processing', + 200 => 'OK', + 201 => 'Created', + 202 => 'Accepted', + 203 => 'Non-Authoritative Information', + 204 => 'No Content', + 205 => 'Reset Content', + 206 => 'Partial Content', + 207 => 'Multi-Status', + 208 => 'Already Reported', + 226 => 'IM Used', + 300 => 'Multiple Choices', + 301 => 'Moved Permanently', + 302 => 'Found', + 303 => 'See Other', + 304 => 'Not Modified', + 305 => 'Use Proxy', + 307 => 'Temporary Redirect', + 308 => 'Permanent Redirect', + 400 => 'Bad Request', + 401 => 'Unauthorized', + 402 => 'Payment Required', + 403 => 'Forbidden', + 404 => 'Not Found', + 405 => 'Method Not Allowed', + 406 => 'Not Acceptable', + 407 => 'Proxy Authentication Required', + 408 => 'Request Timeout', + 409 => 'Conflict', + 410 => 'Gone', + 411 => 'Length Required', + 412 => 'Precondition Failed', + 413 => 'Request Entity Too Large', + 414 => 'Request-URI Too Long', + 415 => 'Unsupported Media Type', + 416 => 'Requested Range Not Satisfiable', + 417 => 'Expectation Failed', + 422 => 'Unprocessable Entity', + 423 => 'Locked', + 424 => 'Failed Dependency', + 425 => 'Reserved for WebDAV advanced collections expired proposal', + 426 => 'Upgrade required', + 428 => 'Precondition Required', + 429 => 'Too Many Requests', + 431 => 'Request Header Fields Too Large', + 500 => 'Internal Server Error', + 501 => 'Not Implemented', + 502 => 'Bad Gateway', + 503 => 'Service Unavailable', + 504 => 'Gateway Timeout', + 505 => 'HTTP Version Not Supported', + 506 => 'Variant Also Negotiates (Experimental)', + 507 => 'Insufficient Storage', + 508 => 'Loop Detected', + 510 => 'Not Extended', + 511 => 'Network Authentication Required', + ); + + /** + * @param int $code 状态码 + * @param double $duration 请求时长 + * @param array $headers 响应头部 + * @param string $body 响应内容 + * @param string $error 错误描述 + */ + public function __construct($code, $duration, array $headers = array(), $body = null, $error = null) + { + $this->statusCode = $code; + $this->duration = $duration; + $this->headers = $headers; + $this->body = $body; + $this->error = $error; + $this->jsonData = null; + if ($error !== null) { + return; + } + + if ($body === null) { + if ($code >= 400) { + $this->error = self::$statusTexts[$code]; + } + return; + } + if (self::isJson($headers)) { + try { + $jsonData = self::bodyJson($body); + if ($code >= 400) { + $this->error = $body; + if ($jsonData['error'] !== null) { + $this->error = $jsonData['error']; + } + } + $this->jsonData = $jsonData; + } catch (\InvalidArgumentException $e) { + $this->error = $body; + if ($code >= 200 && $code < 300) { + $this->error = $e->getMessage(); + } + } + } elseif ($code >= 400) { + $this->error = $body; + } + return; + } + + public function json() + { + return $this->jsonData; + } + + private static function bodyJson($body) + { + return \Qiniu\json_decode((string) $body, true, 512); + } + + public function xVia() + { + $via = $this->headers['X-Via']; + if ($via === null) { + $via = $this->headers['X-Px']; + } + if ($via === null) { + $via = $this->headers['Fw-Via']; + } + return $via; + } + + public function xLog() + { + return $this->headers['X-Log']; + } + + public function xReqId() + { + return $this->headers['X-Reqid']; + } + + public function ok() + { + return $this->statusCode >= 200 && $this->statusCode < 300 && $this->error === null; + } + + public function needRetry() + { + $code = $this->statusCode; + if ($code < 0 || ($code / 100 === 5 and $code !== 579) || $code === 996) { + return true; + } + } + + private static function isJson($headers) + { + return array_key_exists('Content-Type', $headers) && + strpos($headers['Content-Type'], 'application/json') === 0; + } +} diff --git a/vendor/qiniu/php-sdk/src/Qiniu/Processing/ImageUrlBuilder.php b/vendor/qiniu/php-sdk/src/Qiniu/Processing/ImageUrlBuilder.php new file mode 100644 index 000000000..1ac5bf717 --- /dev/null +++ b/vendor/qiniu/php-sdk/src/Qiniu/Processing/ImageUrlBuilder.php @@ -0,0 +1,282 @@ + + */ + public function thumbnail( + $url, + $mode, + $width, + $height, + $format = null, + $interlace = null, + $quality = null, + $ignoreError = 1 + ) { + + // url合法效验 + if (!$this->isUrl($url)) { + return $url; + } + + // 参数合法性效验 + if (!in_array(intval($mode), $this->modeArr, true)) { + return $url; + } + + if (!$width || !$height) { + return $url; + } + + $thumbStr = 'imageView2/' . $mode . '/w/' . $width . '/h/' . $height . '/'; + + // 拼接输出格式 + if (!is_null($format) + && in_array($format, $this->formatArr) + ) { + $thumbStr .= 'format/' . $format . '/'; + } + + // 拼接渐进显示 + if (!is_null($interlace) + && in_array(intval($interlace), array(0, 1), true) + ) { + $thumbStr .= 'interlace/' . $interlace . '/'; + } + + // 拼接图片质量 + if (!is_null($quality) + && intval($quality) >= 0 + && intval($quality) <= 100 + ) { + $thumbStr .= 'q/' . $quality . '/'; + } + + $thumbStr .= 'ignore-error/' . $ignoreError . '/'; + + // 如果有query_string用|线分割实现多参数 + return $url . ($this->hasQuery($url) ? '|' : '?') . $thumbStr; + } + + /** + * 图片水印 + * + * @param string $url 图片链接 + * @param string $image 水印图片链接 + * @param numeric $dissolve 透明度 + * @param string $gravity 水印位置 + * @param numeric $dx 横轴边距 + * @param numeric $dy 纵轴边距 + * @param numeric $watermarkScale 自适应原图的短边比例 + * @link http://developer.qiniu.com/code/v6/api/kodo-api/image/watermark.html + * @return string + * @author Sherlock Ren + */ + public function waterImg( + $url, + $image, + $dissolve = 100, + $gravity = 'SouthEast', + $dx = null, + $dy = null, + $watermarkScale = null + ) { + // url合法效验 + if (!$this->isUrl($url)) { + return $url; + } + + $waterStr = 'watermark/1/image/' . \Qiniu\base64_urlSafeEncode($image) . '/'; + + // 拼接水印透明度 + if (is_numeric($dissolve) + && $dissolve <= 100 + ) { + $waterStr .= 'dissolve/' . $dissolve . '/'; + } + + // 拼接水印位置 + if (in_array($gravity, $this->gravityArr, true)) { + $waterStr .= 'gravity/' . $gravity . '/'; + } + + // 拼接横轴边距 + if (!is_null($dx) + && is_numeric($dx) + ) { + $waterStr .= 'dx/' . $dx . '/'; + } + + // 拼接纵轴边距 + if (!is_null($dy) + && is_numeric($dy) + ) { + $waterStr .= 'dy/' . $dy . '/'; + } + + // 拼接自适应原图的短边比例 + if (!is_null($watermarkScale) + && is_numeric($watermarkScale) + && $watermarkScale > 0 + && $watermarkScale < 1 + ) { + $waterStr .= 'ws/' . $watermarkScale . '/'; + } + + // 如果有query_string用|线分割实现多参数 + return $url . ($this->hasQuery($url) ? '|' : '?') . $waterStr; + } + + /** + * 文字水印 + * + * @param string $url 图片链接 + * @param string $text 文字 + * @param string $font 文字字体 + * @param string $fontSize 文字字号 + * @param string $fontColor 文字颜色 + * @param numeric $dissolve 透明度 + * @param string $gravity 水印位置 + * @param numeric $dx 横轴边距 + * @param numeric $dy 纵轴边距 + * @link http://developer.qiniu.com/code/v6/api/kodo-api/image/watermark.html#text-watermark + * @return string + * @author Sherlock Ren + */ + public function waterText( + $url, + $text, + $font = '黑体', + $fontSize = 0, + $fontColor = null, + $dissolve = 100, + $gravity = 'SouthEast', + $dx = null, + $dy = null + ) { + // url合法效验 + if (!$this->isUrl($url)) { + return $url; + } + + $waterStr = 'watermark/2/text/' + . \Qiniu\base64_urlSafeEncode($text) . '/font/' + . \Qiniu\base64_urlSafeEncode($font) . '/'; + + // 拼接文字大小 + if (is_int($fontSize)) { + $waterStr .= 'fontsize/' . $fontSize . '/'; + } + + // 拼接文字颜色 + if (!is_null($fontColor) + && $fontColor + ) { + $waterStr .= 'fill/' . \Qiniu\base64_urlSafeEncode($fontColor) . '/'; + } + + // 拼接水印透明度 + if (is_numeric($dissolve) + && $dissolve <= 100 + ) { + $waterStr .= 'dissolve/' . $dissolve . '/'; + } + + // 拼接水印位置 + if (in_array($gravity, $this->gravityArr, true)) { + $waterStr .= 'gravity/' . $gravity . '/'; + } + + // 拼接横轴边距 + if (!is_null($dx) + && is_numeric($dx) + ) { + $waterStr .= 'dx/' . $dx . '/'; + } + + // 拼接纵轴边距 + if (!is_null($dy) + && is_numeric($dy) + ) { + $waterStr .= 'dy/' . $dy . '/'; + } + + // 如果有query_string用|线分割实现多参数 + return $url . ($this->hasQuery($url) ? '|' : '?') . $waterStr; + } + + /** + * 效验url合法性 + * + * @param string $url url链接 + * @return string + * @author Sherlock Ren + */ + protected function isUrl($url) + { + $urlArr = parse_url($url); + + return $urlArr['scheme'] + && in_array($urlArr['scheme'], array('http', 'https')) + && $urlArr['host'] + && $urlArr['path']; + } + + /** + * 检测是否有query + * + * @param string $url url链接 + * @return string + * @author Sherlock Ren + */ + protected function hasQuery($url) + { + $urlArr = parse_url($url); + + return !empty($urlArr['query']); + } +} diff --git a/vendor/qiniu/php-sdk/src/Qiniu/Processing/Operation.php b/vendor/qiniu/php-sdk/src/Qiniu/Processing/Operation.php new file mode 100644 index 000000000..919136fc5 --- /dev/null +++ b/vendor/qiniu/php-sdk/src/Qiniu/Processing/Operation.php @@ -0,0 +1,60 @@ +auth = $auth; + $this->domain = $domain; + $this->token_expire = $token_expire; + } + + + /** + * 对资源文件进行处理 + * + * @param $key 待处理的资源文件名 + * @param $fops string|array fop操作,多次fop操作以array的形式传入。 + * eg. imageView2/1/w/200/h/200, imageMogr2/thumbnail/!75px + * + * @return array 文件处理后的结果及错误。 + * + * @link http://developer.qiniu.com/docs/v6/api/reference/fop/ + */ + public function execute($key, $fops) + { + $url = $this->buildUrl($key, $fops); + $resp = Client::get($url); + if (!$resp->ok()) { + return array(null, new Error($url, $resp)); + } + if ($resp->json() !== null) { + return array($resp->json(), null); + } + return array($resp->body, null); + } + + public function buildUrl($key, $fops, $protocol = 'http') + { + if (is_array($fops)) { + $fops = implode('|', $fops); + } + + $url = $protocol . "://$this->domain/$key?$fops"; + if ($this->auth !== null) { + $url = $this->auth->privateDownloadUrl($url, $this->token_expire); + } + + return $url; + } +} diff --git a/vendor/qiniu/php-sdk/src/Qiniu/Processing/PersistentFop.php b/vendor/qiniu/php-sdk/src/Qiniu/Processing/PersistentFop.php new file mode 100644 index 000000000..24e7b734a --- /dev/null +++ b/vendor/qiniu/php-sdk/src/Qiniu/Processing/PersistentFop.php @@ -0,0 +1,94 @@ +auth = $auth; + if ($config == null) { + $this->config = new Config(); + } else { + $this->config = $config; + } + } + + /** + * 对资源文件进行异步持久化处理 + * @param $bucket 资源所在空间 + * @param $key 待处理的源文件 + * @param $fops string|array 待处理的pfop操作,多个pfop操作以array的形式传入。 + * eg. avthumb/mp3/ab/192k, vframe/jpg/offset/7/w/480/h/360 + * @param $pipeline 资源处理队列 + * @param $notify_url 处理结果通知地址 + * @param $force 是否强制执行一次新的指令 + * + * + * @return array 返回持久化处理的persistentId, 和返回的错误。 + * + * @link http://developer.qiniu.com/docs/v6/api/reference/fop/ + */ + public function execute($bucket, $key, $fops, $pipeline = null, $notify_url = null, $force = false) + { + if (is_array($fops)) { + $fops = implode(';', $fops); + } + $params = array('bucket' => $bucket, 'key' => $key, 'fops' => $fops); + \Qiniu\setWithoutEmpty($params, 'pipeline', $pipeline); + \Qiniu\setWithoutEmpty($params, 'notifyURL', $notify_url); + if ($force) { + $params['force'] = 1; + } + $data = http_build_query($params); + $scheme = "http://"; + if ($this->config->useHTTPS === true) { + $scheme = "https://"; + } + $url = $scheme . Config::API_HOST . '/pfop/'; + $headers = $this->auth->authorization($url, $data, 'application/x-www-form-urlencoded'); + $headers['Content-Type'] = 'application/x-www-form-urlencoded'; + $response = Client::post($url, $data, $headers); + if (!$response->ok()) { + return array(null, new Error($url, $response)); + } + $r = $response->json(); + $id = $r['persistentId']; + return array($id, null); + } + + public function status($id) + { + $scheme = "http://"; + + if ($this->config->useHTTPS === true) { + $scheme = "https://"; + } + $url = $scheme . Config::API_HOST . "/status/get/prefop?id=$id"; + $response = Client::get($url); + if (!$response->ok()) { + return array(null, new Error($url, $response)); + } + return array($response->json(), null); + } +} diff --git a/vendor/qiniu/php-sdk/src/Qiniu/Storage/BucketManager.php b/vendor/qiniu/php-sdk/src/Qiniu/Storage/BucketManager.php new file mode 100644 index 000000000..d5269f381 --- /dev/null +++ b/vendor/qiniu/php-sdk/src/Qiniu/Storage/BucketManager.php @@ -0,0 +1,475 @@ +auth = $auth; + if ($config == null) { + $this->config = new Config(); + } else { + $this->config = $config; + } + } + + /** + * 获取指定账号下所有的空间名。 + * + * @return string[] 包含所有空间名 + */ + public function buckets($shared = true) + { + $includeShared = "false"; + if ($shared === true) { + $includeShared = "true"; + } + return $this->rsGet('/buckets?shared=' . $includeShared); + } + + /** + * 获取指定空间绑定的所有的域名 + * + * @return string[] 包含所有空间域名 + */ + public function domains($bucket) + { + return $this->apiGet('/v6/domain/list?tbl=' . $bucket); + } + + /** + * 获取空间绑定的域名列表 + * @return string[] 包含空间绑定的所有域名 + */ + + /** + * 列取空间的文件列表 + * + * @param $bucket 空间名 + * @param $prefix 列举前缀 + * @param $marker 列举标识符 + * @param $limit 单次列举个数限制 + * @param $delimiter 指定目录分隔符 + * + * @return array 包含文件信息的数组,类似:[ + * { + * "hash" => "", + * "key" => "", + * "fsize" => "", + * "putTime" => "" + * }, + * ... + * ] + * @link http://developer.qiniu.com/docs/v6/api/reference/rs/list.html + */ + public function listFiles($bucket, $prefix = null, $marker = null, $limit = 1000, $delimiter = null) + { + $query = array('bucket' => $bucket); + \Qiniu\setWithoutEmpty($query, 'prefix', $prefix); + \Qiniu\setWithoutEmpty($query, 'marker', $marker); + \Qiniu\setWithoutEmpty($query, 'limit', $limit); + \Qiniu\setWithoutEmpty($query, 'delimiter', $delimiter); + $url = $this->getRsfHost() . '/list?' . http_build_query($query); + return $this->get($url); + } + + /** + * 获取资源的元信息,但不返回文件内容 + * + * @param $bucket 待获取信息资源所在的空间 + * @param $key 待获取资源的文件名 + * + * @return array 包含文件信息的数组,类似: + * [ + * "hash" => "", + * "key" => "", + * "fsize" => , + * "putTime" => "" + * "fileType" => + * ] + * + * @link http://developer.qiniu.com/docs/v6/api/reference/rs/stat.html + */ + public function stat($bucket, $key) + { + $path = '/stat/' . \Qiniu\entry($bucket, $key); + return $this->rsGet($path); + } + + /** + * 删除指定资源 + * + * @param $bucket 待删除资源所在的空间 + * @param $key 待删除资源的文件名 + * + * @return mixed 成功返回NULL,失败返回对象Qiniu\Http\Error + * @link http://developer.qiniu.com/docs/v6/api/reference/rs/delete.html + */ + public function delete($bucket, $key) + { + $path = '/delete/' . \Qiniu\entry($bucket, $key); + list(, $error) = $this->rsPost($path); + return $error; + } + + + /** + * 给资源进行重命名,本质为move操作。 + * + * @param $bucket 待操作资源所在空间 + * @param $oldname 待操作资源文件名 + * @param $newname 目标资源文件名 + * + * @return mixed 成功返回NULL,失败返回对象Qiniu\Http\Error + */ + public function rename($bucket, $oldname, $newname) + { + return $this->move($bucket, $oldname, $bucket, $newname); + } + + /** + * 给资源进行重命名,本质为move操作。 + * + * @param $from_bucket 待操作资源所在空间 + * @param $from_key 待操作资源文件名 + * @param $to_bucket 目标资源空间名 + * @param $to_key 目标资源文件名 + * + * @return mixed 成功返回NULL,失败返回对象Qiniu\Http\Error + * @link http://developer.qiniu.com/docs/v6/api/reference/rs/copy.html + */ + public function copy($from_bucket, $from_key, $to_bucket, $to_key, $force = false) + { + $from = \Qiniu\entry($from_bucket, $from_key); + $to = \Qiniu\entry($to_bucket, $to_key); + $path = '/copy/' . $from . '/' . $to; + if ($force === true) { + $path .= '/force/true'; + } + list(, $error) = $this->rsPost($path); + return $error; + } + + /** + * 将资源从一个空间到另一个空间 + * + * @param $from_bucket 待操作资源所在空间 + * @param $from_key 待操作资源文件名 + * @param $to_bucket 目标资源空间名 + * @param $to_key 目标资源文件名 + * + * @return mixed 成功返回NULL,失败返回对象Qiniu\Http\Error + * @link http://developer.qiniu.com/docs/v6/api/reference/rs/move.html + */ + public function move($from_bucket, $from_key, $to_bucket, $to_key, $force = false) + { + $from = \Qiniu\entry($from_bucket, $from_key); + $to = \Qiniu\entry($to_bucket, $to_key); + $path = '/move/' . $from . '/' . $to; + if ($force) { + $path .= '/force/true'; + } + list(, $error) = $this->rsPost($path); + return $error; + } + + /** + * 主动修改指定资源的文件类型 + * + * @param $bucket 待操作资源所在空间 + * @param $key 待操作资源文件名 + * @param $mime 待操作文件目标mimeType + * + * @return mixed 成功返回NULL,失败返回对象Qiniu\Http\Error + * @link http://developer.qiniu.com/docs/v6/api/reference/rs/chgm.html + */ + public function changeMime($bucket, $key, $mime) + { + $resource = \Qiniu\entry($bucket, $key); + $encode_mime = \Qiniu\base64_urlSafeEncode($mime); + $path = '/chgm/' . $resource . '/mime/' . $encode_mime; + list(, $error) = $this->rsPost($path); + return $error; + } + + + /** + * 修改指定资源的存储类型 + * + * @param $bucket 待操作资源所在空间 + * @param $key 待操作资源文件名 + * @param $fileType 待操作文件目标文件类型 + * + * @return mixed 成功返回NULL,失败返回对象Qiniu\Http\Error + * @link https://developer.qiniu.com/kodo/api/3710/modify-the-file-type + */ + public function changeType($bucket, $key, $fileType) + { + $resource = \Qiniu\entry($bucket, $key); + $path = '/chtype/' . $resource . '/type/' . $fileType; + list(, $error) = $this->rsPost($path); + return $error; + } + + + /** + * 从指定URL抓取资源,并将该资源存储到指定空间中 + * + * @param $url 指定的URL + * @param $bucket 目标资源空间 + * @param $key 目标资源文件名 + * + * @return array 包含已拉取的文件信息。 + * 成功时: [ + * [ + * "hash" => "", + * "key" => "" + * ], + * null + * ] + * + * 失败时: [ + * null, + * Qiniu/Http/Error + * ] + * @link http://developer.qiniu.com/docs/v6/api/reference/rs/fetch.html + */ + public function fetch($url, $bucket, $key = null) + { + + $resource = \Qiniu\base64_urlSafeEncode($url); + $to = \Qiniu\entry($bucket, $key); + $path = '/fetch/' . $resource . '/to/' . $to; + + $ak = $this->auth->getAccessKey(); + $ioHost = $this->config->getIovipHost($ak, $bucket); + + $url = $ioHost . $path; + return $this->post($url, null); + } + + /** + * 从镜像源站抓取资源到空间中,如果空间中已经存在,则覆盖该资源 + * + * @param $bucket 待获取资源所在的空间 + * @param $key 代获取资源文件名 + * + * @return mixed 成功返回NULL,失败返回对象Qiniu\Http\Error + * @link http://developer.qiniu.com/docs/v6/api/reference/rs/prefetch.html + */ + public function prefetch($bucket, $key) + { + $resource = \Qiniu\entry($bucket, $key); + $path = '/prefetch/' . $resource; + + $ak = $this->auth->getAccessKey(); + $ioHost = $this->config->getIovipHost($ak, $bucket); + + $url = $ioHost . $path; + list(, $error) = $this->post($url, null); + return $error; + } + + /** + * 在单次请求中进行多个资源管理操作 + * + * @param $operations 资源管理操作数组 + * + * @return array 每个资源的处理情况,结果类似: + * [ + * { "code" => , "data" => }, + * { "code" => }, + * { "code" => }, + * { "code" => }, + * { "code" => , "data" => { "error": "" } }, + * ... + * ] + * @link http://developer.qiniu.com/docs/v6/api/reference/rs/batch.html + */ + public function batch($operations) + { + $params = 'op=' . implode('&op=', $operations); + return $this->rsPost('/batch', $params); + } + + /** + * 设置文件的生命周期 + * + * @param $bucket 设置文件生命周期文件所在的空间 + * @param $key 设置文件生命周期文件的文件名 + * @param $days 设置该文件多少天后删除,当$days设置为0时表示取消该文件的生命周期 + * + * @return Mixed + * @link https://developer.qiniu.com/kodo/api/update-file-lifecycle + */ + public function deleteAfterDays($bucket, $key, $days) + { + $entry = \Qiniu\entry($bucket, $key); + $path = "/deleteAfterDays/$entry/$days"; + list(, $error) = $this->rsPost($path); + return $error; + } + + private function getRsfHost() + { + $scheme = "http://"; + if ($this->config->useHTTPS == true) { + $scheme = "https://"; + } + return $scheme . Config::RSF_HOST; + } + + private function getRsHost() + { + $scheme = "http://"; + if ($this->config->useHTTPS == true) { + $scheme = "https://"; + } + return $scheme . Config::RS_HOST; + } + + private function getApiHost() + { + $scheme = "http://"; + if ($this->config->useHTTPS == true) { + $scheme = "https://"; + } + return $scheme . Config::API_HOST; + } + + private function rsPost($path, $body = null) + { + $url = $this->getRsHost() . $path; + return $this->post($url, $body); + } + + private function apiGet($path) + { + $url = $this->getApiHost() . $path; + return $this->get($url); + } + + private function rsGet($path) + { + $url = $this->getRsHost() . $path; + return $this->get($url); + } + + private function get($url) + { + $headers = $this->auth->authorization($url); + $ret = Client::get($url, $headers); + if (!$ret->ok()) { + return array(null, new Error($url, $ret)); + } + return array($ret->json(), null); + } + + private function post($url, $body) + { + $headers = $this->auth->authorization($url, $body, 'application/x-www-form-urlencoded'); + $ret = Client::post($url, $body, $headers); + if (!$ret->ok()) { + return array(null, new Error($url, $ret)); + } + $r = ($ret->body === null) ? array() : $ret->json(); + return array($r, null); + } + + public static function buildBatchCopy($source_bucket, $key_pairs, $target_bucket, $force) + { + return self::twoKeyBatch('/copy', $source_bucket, $key_pairs, $target_bucket, $force); + } + + + public static function buildBatchRename($bucket, $key_pairs, $force) + { + return self::buildBatchMove($bucket, $key_pairs, $bucket, $force); + } + + + public static function buildBatchMove($source_bucket, $key_pairs, $target_bucket, $force) + { + return self::twoKeyBatch('/move', $source_bucket, $key_pairs, $target_bucket, $force); + } + + + public static function buildBatchDelete($bucket, $keys) + { + return self::oneKeyBatch('/delete', $bucket, $keys); + } + + + public static function buildBatchStat($bucket, $keys) + { + return self::oneKeyBatch('/stat', $bucket, $keys); + } + + public static function buildBatchDeleteAfterDays($bucket, $key_day_pairs) + { + $data = array(); + foreach ($key_day_pairs as $key => $day) { + array_push($data, '/deleteAfterDays/' . \Qiniu\entry($bucket, $key) . '/' . $day); + } + return $data; + } + + public static function buildBatchChangeMime($bucket, $key_mime_pairs) + { + $data = array(); + foreach ($key_mime_pairs as $key => $mime) { + array_push($data, '/chgm/' . \Qiniu\entry($bucket, $key) . '/mime/' . base64_encode($mime)); + } + return $data; + } + + public static function buildBatchChangeType($bucket, $key_type_pairs) + { + $data = array(); + foreach ($key_type_pairs as $key => $type) { + array_push($data, '/chtype/' . \Qiniu\entry($bucket, $key) . '/type/' . $type); + } + return $data; + } + + private static function oneKeyBatch($operation, $bucket, $keys) + { + $data = array(); + foreach ($keys as $key) { + array_push($data, $operation . '/' . \Qiniu\entry($bucket, $key)); + } + return $data; + } + + private static function twoKeyBatch($operation, $source_bucket, $key_pairs, $target_bucket, $force) + { + if ($target_bucket === null) { + $target_bucket = $source_bucket; + } + $data = array(); + $forceOp = "false"; + if ($force) { + $forceOp = "true"; + } + foreach ($key_pairs as $from_key => $to_key) { + $from = \Qiniu\entry($source_bucket, $from_key); + $to = \Qiniu\entry($target_bucket, $to_key); + array_push($data, $operation . '/' . $from . '/' . $to . "/force/" . $forceOp); + } + return $data; + } +} diff --git a/vendor/qiniu/php-sdk/src/Qiniu/Storage/FormUploader.php b/vendor/qiniu/php-sdk/src/Qiniu/Storage/FormUploader.php new file mode 100644 index 000000000..5c3361f96 --- /dev/null +++ b/vendor/qiniu/php-sdk/src/Qiniu/Storage/FormUploader.php @@ -0,0 +1,139 @@ + "", + * "key" => "" + * ] + */ + public static function put( + $upToken, + $key, + $data, + $config, + $params, + $mime, + $fname + ) { + + $fields = array('token' => $upToken); + if ($key === null) { + $fname='nullkey'; + } else { + $fields['key'] = $key; + } + + //enable crc32 check by default + $fields['crc32'] = \Qiniu\crc32_data($data); + + if ($params) { + foreach ($params as $k => $v) { + $fields[$k] = $v; + } + } + + list($accessKey, $bucket, $err) = \Qiniu\explodeUpToken($upToken); + if ($err != null) { + return array(null, $err); + } + + $upHost = $config->getUpHost($accessKey, $bucket); + + $response = Client::multipartPost($upHost, $fields, 'file', $fname, $data, $mime); + if (!$response->ok()) { + return array(null, new Error($upHost, $response)); + } + return array($response->json(), null); + } + + /** + * 上传文件到七牛,内部使用 + * + * @param $upToken 上传凭证 + * @param $key 上传文件名 + * @param $filePath 上传文件的路径 + * @param $config 上传配置 + * @param $params 自定义变量,规格参考 + * http://developer.qiniu.com/docs/v6/api/overview/up/response/vars.html#xvar + * @param $mime 上传数据的mimeType + * + * @return array 包含已上传文件的信息,类似: + * [ + * "hash" => "", + * "key" => "" + * ] + */ + public static function putFile( + $upToken, + $key, + $filePath, + $config, + $params, + $mime + ) { + + + $fields = array('token' => $upToken, 'file' => self::createFile($filePath, $mime)); + if ($key !== null) { + $fields['key'] = $key; + } + + $fields['crc32'] = \Qiniu\crc32_file($filePath); + + if ($params) { + foreach ($params as $k => $v) { + $fields[$k] = $v; + } + } + $fields['key'] = $key; + $headers = array('Content-Type' => 'multipart/form-data'); + + list($accessKey, $bucket, $err) = \Qiniu\explodeUpToken($upToken); + if ($err != null) { + return array(null, $err); + } + + $upHost = $config->getUpHost($accessKey, $bucket); + + $response = Client::post($upHost, $fields, $headers); + if (!$response->ok()) { + return array(null, new Error($upHost, $response)); + } + return array($response->json(), null); + } + + private static function createFile($filename, $mime) + { + // PHP 5.5 introduced a CurlFile object that deprecates the old @filename syntax + // See: https://wiki.php.net/rfc/curl-file-upload + if (function_exists('curl_file_create')) { + return curl_file_create($filename, $mime); + } + + // Use the old style if using an older version of PHP + $value = "@{$filename}"; + if (!empty($mime)) { + $value .= ';type=' . $mime; + } + + return $value; + } +} diff --git a/vendor/qiniu/php-sdk/src/Qiniu/Storage/ResumeUploader.php b/vendor/qiniu/php-sdk/src/Qiniu/Storage/ResumeUploader.php new file mode 100644 index 000000000..5d8bf8730 --- /dev/null +++ b/vendor/qiniu/php-sdk/src/Qiniu/Storage/ResumeUploader.php @@ -0,0 +1,169 @@ +upToken = $upToken; + $this->key = $key; + $this->inputStream = $inputStream; + $this->size = $size; + $this->params = $params; + $this->mime = $mime; + $this->contexts = array(); + $this->config = $config; + + list($accessKey, $bucket, $err) = \Qiniu\explodeUpToken($upToken); + if ($err != null) { + return array(null, $err); + } + + $upHost = $config->getUpHost($accessKey, $bucket); + if ($err != null) { + throw new \Exception($err->message(), 1); + } + $this->host = $upHost; + } + + /** + * 上传操作 + */ + public function upload($fname) + { + $uploaded = 0; + while ($uploaded < $this->size) { + $blockSize = $this->blockSize($uploaded); + $data = fread($this->inputStream, $blockSize); + if ($data === false) { + throw new \Exception("file read failed", 1); + } + $crc = \Qiniu\crc32_data($data); + $response = $this->makeBlock($data, $blockSize); + $ret = null; + if ($response->ok() && $response->json() != null) { + $ret = $response->json(); + } + if ($response->statusCode < 0) { + list($accessKey, $bucket, $err) = \Qiniu\explodeUpToken($this->upToken); + if ($err != null) { + return array(null, $err); + } + + $upHostBackup = $this->config->getUpBackupHost($accessKey, $bucket); + $this->host = $upHostBackup; + } + if ($response->needRetry() || !isset($ret['crc32']) || $crc != $ret['crc32']) { + $response = $this->makeBlock($data, $blockSize); + $ret = $response->json(); + } + + if (!$response->ok() || !isset($ret['crc32']) || $crc != $ret['crc32']) { + return array(null, new Error($this->currentUrl, $response)); + } + array_push($this->contexts, $ret['ctx']); + $uploaded += $blockSize; + } + return $this->makeFile($fname); + } + + /** + * 创建块 + */ + private function makeBlock($block, $blockSize) + { + $url = $this->host . '/mkblk/' . $blockSize; + return $this->post($url, $block); + } + + private function fileUrl($fname) + { + $url = $this->host . '/mkfile/' . $this->size; + $url .= '/mimeType/' . \Qiniu\base64_urlSafeEncode($this->mime); + if ($this->key != null) { + $url .= '/key/' . \Qiniu\base64_urlSafeEncode($this->key); + } + $url .= '/fname/' . \Qiniu\base64_urlSafeEncode($fname); + if (!empty($this->params)) { + foreach ($this->params as $key => $value) { + $val = \Qiniu\base64_urlSafeEncode($value); + $url .= "/$key/$val"; + } + } + return $url; + } + + /** + * 创建文件 + */ + private function makeFile($fname) + { + $url = $this->fileUrl($fname); + $body = implode(',', $this->contexts); + $response = $this->post($url, $body); + if ($response->needRetry()) { + $response = $this->post($url, $body); + } + if (!$response->ok()) { + return array(null, new Error($this->currentUrl, $response)); + } + return array($response->json(), null); + } + + private function post($url, $data) + { + $this->currentUrl = $url; + $headers = array('Authorization' => 'UpToken ' . $this->upToken); + return Client::post($url, $data, $headers); + } + + private function blockSize($uploaded) + { + if ($this->size < $uploaded + Config::BLOCK_SIZE) { + return $this->size - $uploaded; + } + return Config::BLOCK_SIZE; + } +} diff --git a/vendor/qiniu/php-sdk/src/Qiniu/Storage/UploadManager.php b/vendor/qiniu/php-sdk/src/Qiniu/Storage/UploadManager.php new file mode 100644 index 000000000..ce58b2fe9 --- /dev/null +++ b/vendor/qiniu/php-sdk/src/Qiniu/Storage/UploadManager.php @@ -0,0 +1,144 @@ +config = $config; + } + + /** + * 上传二进制流到七牛 + * + * @param $upToken 上传凭证 + * @param $key 上传文件名 + * @param $data 上传二进制流 + * @param $params 自定义变量,规格参考 + * http://developer.qiniu.com/docs/v6/api/overview/up/response/vars.html#xvar + * @param $mime 上传数据的mimeType + * @param $checkCrc 是否校验crc32 + * + * @return array 包含已上传文件的信息,类似: + * [ + * "hash" => "", + * "key" => "" + * ] + */ + public function put( + $upToken, + $key, + $data, + $params = null, + $mime = 'application/octet-stream', + $fname = null + ) { + + $params = self::trimParams($params); + return FormUploader::put( + $upToken, + $key, + $data, + $this->config, + $params, + $mime, + $fname + ); + } + + + /** + * 上传文件到七牛 + * + * @param $upToken 上传凭证 + * @param $key 上传文件名 + * @param $filePath 上传文件的路径 + * @param $params 自定义变量,规格参考 + * http://developer.qiniu.com/docs/v6/api/overview/up/response/vars.html#xvar + * @param $mime 上传数据的mimeType + * @param $checkCrc 是否校验crc32 + * + * @return array 包含已上传文件的信息,类似: + * [ + * "hash" => "", + * "key" => "" + * ] + */ + public function putFile( + $upToken, + $key, + $filePath, + $params = null, + $mime = 'application/octet-stream', + $checkCrc = false + ) { + + $file = fopen($filePath, 'rb'); + if ($file === false) { + throw new \Exception("file can not open", 1); + } + $params = self::trimParams($params); + $stat = fstat($file); + $size = $stat['size']; + if ($size <= Config::BLOCK_SIZE) { + $data = fread($file, $size); + fclose($file); + if ($data === false) { + throw new \Exception("file can not read", 1); + } + return FormUploader::put( + $upToken, + $key, + $data, + $this->config, + $params, + $mime, + $checkCrc, + basename($filePath) + ); + } + + $up = new ResumeUploader( + $upToken, + $key, + $file, + $size, + $params, + $mime, + $this->config + ); + $ret = $up->upload(basename($filePath)); + fclose($file); + return $ret; + } + + public static function trimParams($params) + { + if ($params === null) { + return null; + } + $ret = array(); + foreach ($params as $k => $v) { + $pos = strpos($k, 'x:'); + if ($pos === 0 && !empty($v)) { + $ret[$k] = $v; + } + } + return $ret; + } +} diff --git a/vendor/qiniu/php-sdk/src/Qiniu/Zone.php b/vendor/qiniu/php-sdk/src/Qiniu/Zone.php new file mode 100644 index 000000000..1a66d39bf --- /dev/null +++ b/vendor/qiniu/php-sdk/src/Qiniu/Zone.php @@ -0,0 +1,171 @@ +srcUpHosts = $srcUpHosts; + $this->cdnUpHosts = $cdnUpHosts; + $this->rsHost = $rsHost; + $this->rsfHost = $rsfHost; + $this->apiHost = $apiHost; + $this->iovipHost = $iovipHost; + } + + //华东机房 + public static function zone0() + { + $Zone_z0 = new Zone( + array("up.qiniup.com", 'up-jjh.qiniup.com', 'up-xs.qiniup.com'), + array('upload.qiniup.com', 'upload-jjh.qiniup.com', 'upload-xs.qiniup.com'), + 'rs.qiniu.com', + 'rsf.qiniu.com', + 'api.qiniu.com', + 'iovip.qbox.me' + ); + return $Zone_z0; + } + + //华北机房 + public static function zone1() + { + $Zone_z1 = new Zone( + array('up-z1.qiniup.com'), + array('upload-z1.qiniup.com'), + "rs-z1.qiniu.com", + "rsf-z1.qiniu.com", + "api-z1.qiniu.com", + "iovip-z1.qbox.me" + ); + + return $Zone_z1; + } + + //华南机房 + public static function zone2() + { + $Zone_z2 = new Zone( + array('up-z2.qiniup.com', 'up-dg.qiniup.com', 'up-fs.qiniup.com'), + array('upload-z2.qiniup.com', 'upload-dg.qiniup.com', 'upload-fs.qiniup.com'), + "rs-z2.qiniu.com", + "rsf-z2.qiniu.com", + "api-z2.qiniu.com", + "iovip-z2.qbox.me" + ); + return $Zone_z2; + } + + //北美机房 + public static function zoneNa0() + { + //北美机房 + $Zone_na0 = new Zone( + array('up-na0.qiniup.com'), + array('upload-na0.qiniup.com'), + "rs-na0.qiniu.com", + "rsf-na0.qiniu.com", + "api-na0.qiniu.com", + "iovip-na0.qbox.me" + ); + return $Zone_na0; + } + + //新加坡机房 + public static function zoneAs0() + { + //新加坡机房 + $Zone_as0 = new Zone( + array('up-as0.qiniup.com'), + array('upload-as0.qiniup.com'), + "rs-as0.qiniu.com", + "rsf-as0.qiniu.com", + "api-as0.qiniu.com", + "iovip-as0.qbox.me" + ); + return $Zone_as0; + } + + /* + * GET /v2/query?ak=&&bucket= + **/ + public static function queryZone($ak, $bucket) + { + $zone = new Zone(); + $url = Config::UC_HOST . '/v2/query' . "?ak=$ak&bucket=$bucket"; + $ret = Client::Get($url); + if (!$ret->ok()) { + return array(null, new Error($url, $ret)); + } + $r = ($ret->body === null) ? array() : $ret->json(); + //print_r($ret); + //parse zone; + + $iovipHost = $r['io']['src']['main'][0]; + $zone->iovipHost = $iovipHost; + $accMain = $r['up']['acc']['main'][0]; + array_push($zone->cdnUpHosts, $accMain); + if (isset($r['up']['acc']['backup'])) { + foreach ($r['up']['acc']['backup'] as $key => $value) { + array_push($zone->cdnUpHosts, $value); + } + } + $srcMain = $r['up']['src']['main'][0]; + array_push($zone->srcUpHosts, $srcMain); + if (isset($r['up']['src']['backup'])) { + foreach ($r['up']['src']['backup'] as $key => $value) { + array_push($zone->srcUpHosts, $value); + } + } + + //set specific hosts + if (strstr($zone->iovipHost, "z1") !== false) { + $zone->rsHost = "rs-z1.qiniu.com"; + $zone->rsfHost = "rsf-z1.qiniu.com"; + $zone->apiHost = "api-z1.qiniu.com"; + } elseif (strstr($zone->iovipHost, "z2") !== false) { + $zone->rsHost = "rs-z2.qiniu.com"; + $zone->rsfHost = "rsf-z2.qiniu.com"; + $zone->apiHost = "api-z2.qiniu.com"; + } elseif (strstr($zone->iovipHost, "na0") !== false) { + $zone->rsHost = "rs-na0.qiniu.com"; + $zone->rsfHost = "rsf-na0.qiniu.com"; + $zone->apiHost = "api-na0.qiniu.com"; + } elseif (strstr($zone->iovipHost, "as0") !== false) { + $zone->rsHost = "rs-as0.qiniu.com"; + $zone->rsfHost = "rsf-as0.qiniu.com"; + $zone->apiHost = "api-as0.qiniu.com"; + } else { + $zone->rsHost = "rs.qiniu.com"; + $zone->rsfHost = "rsf.qiniu.com"; + $zone->apiHost = "api.qiniu.com"; + } + + return $zone; + } +} diff --git a/vendor/qiniu/php-sdk/src/Qiniu/functions.php b/vendor/qiniu/php-sdk/src/Qiniu/functions.php new file mode 100644 index 000000000..2ccdf3234 --- /dev/null +++ b/vendor/qiniu/php-sdk/src/Qiniu/functions.php @@ -0,0 +1,264 @@ + 'JSON_ERROR_DEPTH - Maximum stack depth exceeded', + JSON_ERROR_STATE_MISMATCH => 'JSON_ERROR_STATE_MISMATCH - Underflow or the modes mismatch', + JSON_ERROR_CTRL_CHAR => 'JSON_ERROR_CTRL_CHAR - Unexpected control character found', + JSON_ERROR_SYNTAX => 'JSON_ERROR_SYNTAX - Syntax error, malformed JSON', + JSON_ERROR_UTF8 => 'JSON_ERROR_UTF8 - Malformed UTF-8 characters, possibly incorrectly encoded' + ); + + if (empty($json)) { + return null; + } + $data = \json_decode($json, $assoc, $depth); + + if (JSON_ERROR_NONE !== json_last_error()) { + $last = json_last_error(); + throw new \InvalidArgumentException( + 'Unable to parse JSON data: ' + . (isset($jsonErrors[$last]) + ? $jsonErrors[$last] + : 'Unknown error') + ); + } + + return $data; + } + + /** + * 计算七牛API中的数据格式 + * + * @param $bucket 待操作的空间名 + * @param $key 待操作的文件名 + * + * @return string 符合七牛API规格的数据格式 + * @link http://developer.qiniu.com/docs/v6/api/reference/data-formats.html + */ + function entry($bucket, $key) + { + $en = $bucket; + if (!empty($key)) { + $en = $bucket . ':' . $key; + } + return base64_urlSafeEncode($en); + } + + /** + * array 辅助方法,无值时不set + * + * @param $array 待操作array + * @param $key key + * @param $value value 为null时 不设置 + * + * @return array 原来的array,便于连续操作 + */ + function setWithoutEmpty(&$array, $key, $value) + { + if (!empty($value)) { + $array[$key] = $value; + } + return $array; + } + + /** + * 缩略图链接拼接 + * + * @param string $url 图片链接 + * @param int $mode 缩略模式 + * @param int $width 宽度 + * @param int $height 长度 + * @param string $format 输出类型 + * @param int $quality 图片质量 + * @param int $interlace 是否支持渐进显示 + * @param int $ignoreError 忽略结果 + * @return string + * @link http://developer.qiniu.com/code/v6/api/kodo-api/image/imageview2.html + * @author Sherlock Ren + */ + function thumbnail( + $url, + $mode, + $width, + $height, + $format = null, + $quality = null, + $interlace = null, + $ignoreError = 1 + ) { + + static $imageUrlBuilder = null; + if (is_null($imageUrlBuilder)) { + $imageUrlBuilder = new \Qiniu\Processing\ImageUrlBuilder; + } + + return call_user_func_array(array($imageUrlBuilder, 'thumbnail'), func_get_args()); + } + + /** + * 图片水印 + * + * @param string $url 图片链接 + * @param string $image 水印图片链接 + * @param numeric $dissolve 透明度 + * @param string $gravity 水印位置 + * @param numeric $dx 横轴边距 + * @param numeric $dy 纵轴边距 + * @param numeric $watermarkScale 自适应原图的短边比例 + * @link http://developer.qiniu.com/code/v6/api/kodo-api/image/watermark.html + * @return string + * @author Sherlock Ren + */ + function waterImg( + $url, + $image, + $dissolve = 100, + $gravity = 'SouthEast', + $dx = null, + $dy = null, + $watermarkScale = null + ) { + + static $imageUrlBuilder = null; + if (is_null($imageUrlBuilder)) { + $imageUrlBuilder = new \Qiniu\Processing\ImageUrlBuilder; + } + + return call_user_func_array(array($imageUrlBuilder, 'waterImg'), func_get_args()); + } + + /** + * 文字水印 + * + * @param string $url 图片链接 + * @param string $text 文字 + * @param string $font 文字字体 + * @param string $fontSize 文字字号 + * @param string $fontColor 文字颜色 + * @param numeric $dissolve 透明度 + * @param string $gravity 水印位置 + * @param numeric $dx 横轴边距 + * @param numeric $dy 纵轴边距 + * @link http://developer.qiniu.com/code/v6/api/kodo-api/image/watermark.html#text-watermark + * @return string + * @author Sherlock Ren + */ + function waterText( + $url, + $text, + $font = '黑体', + $fontSize = 0, + $fontColor = null, + $dissolve = 100, + $gravity = 'SouthEast', + $dx = null, + $dy = null + ) { + + static $imageUrlBuilder = null; + if (is_null($imageUrlBuilder)) { + $imageUrlBuilder = new \Qiniu\Processing\ImageUrlBuilder; + } + + return call_user_func_array(array($imageUrlBuilder, 'waterText'), func_get_args()); + } + + /** + * 从uptoken解析accessKey和bucket + * + * @param $upToken + * @return array(ak,bucket,err=null) + */ + function explodeUpToken($upToken) + { + $items = explode(':', $upToken); + if (count($items) != 3) { + return array(null, null, "invalid uptoken"); + } + $accessKey = $items[0]; + $putPolicy = json_decode(base64_decode($items[2])); + $scope = $putPolicy->scope; + $scopeItems = explode(':', $scope); + $bucket = $scopeItems[0]; + return array($accessKey, $bucket, null); + } +} diff --git a/vendor/qiniu/php-sdk/test-env.sh b/vendor/qiniu/php-sdk/test-env.sh new file mode 100644 index 000000000..eedf6b50a --- /dev/null +++ b/vendor/qiniu/php-sdk/test-env.sh @@ -0,0 +1,4 @@ +export QINIU_ACCESS_KEY=xxx +export QINIU_SECRET_KEY=xxx +export QINIU_TEST_BUCKET=phpsdk +export QINIU_TEST_DOMAIN=phpsdk.qiniudn.com \ No newline at end of file diff --git a/vendor/qiniu/php-sdk/tests/Qiniu/Tests/AuthTest.php b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/AuthTest.php new file mode 100644 index 000000000..712cbd57a --- /dev/null +++ b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/AuthTest.php @@ -0,0 +1,71 @@ +sign('test'); + $this->assertEquals('abcdefghklmnopq:mSNBTR7uS2crJsyFr2Amwv1LaYg=', $token); + } + + public function testSignWithData() + { + global $dummyAuth; + $token = $dummyAuth->signWithData('test'); + $this->assertEquals('abcdefghklmnopq:-jP8eEV9v48MkYiBGs81aDxl60E=:dGVzdA==', $token); + } + + public function testSignRequest() + { + global $dummyAuth; + $token = $dummyAuth->signRequest('http://www.qiniu.com?go=1', 'test', ''); + $this->assertEquals('abcdefghklmnopq:cFyRVoWrE3IugPIMP5YJFTO-O-Y=', $token); + $ctype = 'application/x-www-form-urlencoded'; + $token = $dummyAuth->signRequest('http://www.qiniu.com?go=1', 'test', $ctype); + $this->assertEquals($token, 'abcdefghklmnopq:svWRNcacOE-YMsc70nuIYdaa1e4='); + } + + public function testPrivateDownloadUrl() + { + global $dummyAuth; + $_SERVER['override_qiniu_auth_time'] = true; + $url = $dummyAuth->privateDownloadUrl('http://www.qiniu.com?go=1'); + $expect = 'http://www.qiniu.com?go=1&e=1234571490&token=abcdefghklmnopq:8vzBeLZ9W3E4kbBLFLW0Xe0u7v4='; + $this->assertEquals($expect, $url); + unset($_SERVER['override_qiniu_auth_time']); + } + + public function testUploadToken() + { + global $dummyAuth; + $_SERVER['override_qiniu_auth_time'] = true; + $token = $dummyAuth->uploadToken('1', '2', 3600, array('endUser' => 'y')); + // @codingStandardsIgnoreStart + $exp = 'abcdefghklmnopq:yyeexeUkPOROoTGvwBjJ0F0VLEo=:eyJlbmRVc2VyIjoieSIsInNjb3BlIjoiMToyIiwiZGVhZGxpbmUiOjEyMzQ1NzE0OTB9'; + // @codingStandardsIgnoreEnd + $this->assertEquals($exp, $token); + unset($_SERVER['override_qiniu_auth_time']); + } + + public function testVerifyCallback() + { + } + } +} diff --git a/vendor/qiniu/php-sdk/tests/Qiniu/Tests/Base64Test.php b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/Base64Test.php new file mode 100644 index 000000000..6d6335307 --- /dev/null +++ b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/Base64Test.php @@ -0,0 +1,14 @@ +assertEquals($a, \Qiniu\base64_urlSafeDecode($b)); + } +} diff --git a/vendor/qiniu/php-sdk/tests/Qiniu/Tests/BucketTest.php b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/BucketTest.php new file mode 100644 index 000000000..534d8c2f7 --- /dev/null +++ b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/BucketTest.php @@ -0,0 +1,227 @@ +bucketName = $bucketName; + $this->key = $key; + $this->key2 = $key2; + + global $testAuth; + $this->bucketManager = new BucketManager($testAuth); + + global $dummyAuth; + $this->dummyBucketManager = new BucketManager($dummyAuth); + } + + public function testBuckets() + { + + list($list, $error) = $this->bucketManager->buckets(); + $this->assertTrue(in_array($this->bucketName, $list)); + $this->assertNull($error); + + list($list2, $error) = $this->dummyBucketManager->buckets(); + $this->assertEquals(401, $error->code()); + $this->assertNull($list2); + $this->assertNotNull($error->message()); + } + + public function testList() + { + list($ret, $error) = $this->bucketManager->listFiles($this->bucketName, null, null, 10); + $this->assertNotNull($ret['items'][0]); + $this->assertNotNull($ret['marker']); + } + + public function testStat() + { + list($stat, $error) = $this->bucketManager->stat($this->bucketName, $this->key); + $this->assertNotNull($stat); + $this->assertNull($error); + $this->assertNotNull($stat['hash']); + + list($stat, $error) = $this->bucketManager->stat($this->bucketName, 'nofile'); + $this->assertNull($stat); + $this->assertEquals(612, $error->code()); + $this->assertNotNull($error->message()); + + list($stat, $error) = $this->bucketManager->stat('nobucket', 'nofile'); + $this->assertNull($stat); + $this->assertEquals(631, $error->code()); + $this->assertNotNull($error->message()); + } + + public function testDelete() + { + $error = $this->bucketManager->delete($this->bucketName, 'del'); + $this->assertEquals(612, $error->code()); + } + + + public function testRename() + { + $key = 'renamefrom' . rand(); + $this->bucketManager->copy($this->bucketName, $this->key, $this->bucketName, $key); + $key2 = 'renameto' . $key; + $error = $this->bucketManager->rename($this->bucketName, $key, $key2); + $this->assertNull($error); + $error = $this->bucketManager->delete($this->bucketName, $key2); + $this->assertNull($error); + } + + + public function testCopy() + { + $key = 'copyto' . rand(); + $this->bucketManager->delete($this->bucketName, $key); + + $error = $this->bucketManager->copy( + $this->bucketName, + $this->key, + $this->bucketName, + $key + ); + $this->assertNull($error); + + //test force copy + $error = $this->bucketManager->copy( + $this->bucketName, + $this->key2, + $this->bucketName, + $key, + true + ); + $this->assertNull($error); + + list($key2Stat,) = $this->bucketManager->stat($this->bucketName, $this->key2); + list($key2CopiedStat,) = $this->bucketManager->stat($this->bucketName, $key); + + $this->assertEquals($key2Stat['hash'], $key2CopiedStat['hash']); + + $error = $this->bucketManager->delete($this->bucketName, $key); + $this->assertNull($error); + } + + + public function testChangeMime() + { + $error = $this->bucketManager->changeMime( + $this->bucketName, + 'php-sdk.html', + 'text/html' + ); + $this->assertNull($error); + } + + public function testPrefetch() + { + $error = $this->bucketManager->prefetch( + $this->bucketName, + 'php-sdk.html' + ); + $this->assertNull($error); + } + + public function testFetch() + { + list($ret, $error) = $this->bucketManager->fetch( + 'http://developer.qiniu.com/docs/v6/sdk/php-sdk.html', + $this->bucketName, + 'fetch.html' + ); + $this->assertArrayHasKey('hash', $ret); + $this->assertNull($error); + + list($ret, $error) = $this->bucketManager->fetch( + 'http://developer.qiniu.com/docs/v6/sdk/php-sdk.html', + $this->bucketName, + '' + ); + $this->assertArrayHasKey('key', $ret); + $this->assertNull($error); + + list($ret, $error) = $this->bucketManager->fetch( + 'http://developer.qiniu.com/docs/v6/sdk/php-sdk.html', + $this->bucketName + ); + $this->assertArrayHasKey('key', $ret); + $this->assertNull($error); + } + + public function testBatchCopy() + { + $key = 'copyto' . rand(); + $ops = BucketManager::buildBatchCopy( + $this->bucketName, + array($this->key => $key), + $this->bucketName, + true + ); + list($ret, $error) = $this->bucketManager->batch($ops); + $this->assertEquals(200, $ret[0]['code']); + $ops = BucketManager::buildBatchDelete($this->bucketName, array($key)); + list($ret, $error) = $this->bucketManager->batch($ops); + $this->assertEquals(200, $ret[0]['code']); + } + + public function testBatchMove() + { + $key = 'movefrom' . rand(); + $this->bucketManager->copy($this->bucketName, $this->key, $this->bucketName, $key); + $key2 = $key . 'to'; + $ops = BucketManager::buildBatchMove( + $this->bucketName, + array($key => $key2), + $this->bucketName, + true + ); + list($ret, $error) = $this->bucketManager->batch($ops); + $this->assertEquals(200, $ret[0]['code']); + $error = $this->bucketManager->delete($this->bucketName, $key2); + $this->assertNull($error); + } + + public function testBatchRename() + { + $key = 'rename' . rand(); + $this->bucketManager->copy($this->bucketName, $this->key, $this->bucketName, $key); + $key2 = $key . 'to'; + $ops = BucketManager::buildBatchRename($this->bucketName, array($key => $key2), true); + list($ret, $error) = $this->bucketManager->batch($ops); + $this->assertEquals(200, $ret[0]['code']); + $error = $this->bucketManager->delete($this->bucketName, $key2); + $this->assertNull($error); + } + + public function testBatchStat() + { + $ops = BucketManager::buildBatchStat($this->bucketName, array('php-sdk.html')); + list($ret, $error) = $this->bucketManager->batch($ops); + $this->assertEquals(200, $ret[0]['code']); + } + + public function testDeleteAfterDays() + { + $key = rand(); + $err = $this->bucketManager->deleteAfterDays($this->bucketName, $key, 1); + $this->assertEquals(612, $err->code()); + + $this->bucketManager->copy($this->bucketName, $this->key, $this->bucketName, $key); + $err = $this->bucketManager->deleteAfterDays($this->bucketName, $key, 1); + $this->assertEquals(null, $err); + } +} diff --git a/vendor/qiniu/php-sdk/tests/Qiniu/Tests/CdnManagerTest.php b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/CdnManagerTest.php new file mode 100644 index 000000000..5a858dfa2 --- /dev/null +++ b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/CdnManagerTest.php @@ -0,0 +1,50 @@ +cdnManager = new CdnManager($testAuth); + $this->encryptKey = $timestampAntiLeechEncryptKey; + $this->imgUrl = $customDomain . '/24.jpg'; + } + + public function testCreateTimestampAntiLeechUrl() + { + + $signUrl = $this->cdnManager->createTimestampAntiLeechUrl($this->imgUrl, $this->encryptKey, 3600); + + $response = Client::get($signUrl); + $this->assertEquals($response->statusCode, 200); + $this->assertNull($response->error); + + $url2 = $this->imgUrl . '?imageInfo'; + $signUrl2 = $this->cdnManager->createTimestampAntiLeechUrl($url2, $this->encryptKey, 3600); + + $response = Client::get($signUrl2); + $imgInfo = $response->json(); + + $this->assertEquals($response->statusCode, 200); + $this->assertEquals($imgInfo['size'], 2196145); + $this->assertNull($response->error); + } +} diff --git a/vendor/qiniu/php-sdk/tests/Qiniu/Tests/Crc32Test.php b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/Crc32Test.php new file mode 100644 index 000000000..bfb36da87 --- /dev/null +++ b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/Crc32Test.php @@ -0,0 +1,21 @@ +assertEquals('1352841281', $b); + } + + public function testFile() + { + $b = \Qiniu\crc32_file(__file__); + $c = \Qiniu\crc32_file(__file__); + $this->assertEquals($c, $b); + } +} diff --git a/vendor/qiniu/php-sdk/tests/Qiniu/Tests/DownloadTest.php b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/DownloadTest.php new file mode 100644 index 000000000..82990f2a1 --- /dev/null +++ b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/DownloadTest.php @@ -0,0 +1,25 @@ +privateDownloadUrl($base_url); + $response = Client::get($private_url); + $this->assertEquals(200, $response->statusCode); + } + + public function testFop() + { + global $testAuth; + $base_url = 'http://private-res.qiniudn.com/gogopher.jpg?exif'; + $private_url = $testAuth->privateDownloadUrl($base_url); + $response = Client::get($private_url); + $this->assertEquals(200, $response->statusCode); + } +} diff --git a/vendor/qiniu/php-sdk/tests/Qiniu/Tests/EtagTest.php b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/EtagTest.php new file mode 100644 index 000000000..42a14993e --- /dev/null +++ b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/EtagTest.php @@ -0,0 +1,52 @@ +assertEquals('Fto5o-5ea0sNMlW_75VgGJCv2AcJ', $r); + $this->assertNull($error); + } + + public function testLess4M() + { + $file = qiniuTempFile(3 * 1024 * 1024); + list($r, $error) = Etag::sum($file); + unlink($file); + $this->assertEquals('Fs5BpnAjRykYTg6o5E09cjuXrDkG', $r); + $this->assertNull($error); + } + + public function test4M() + { + $file = qiniuTempFile(4 * 1024 * 1024); + list($r, $error) = Etag::sum($file); + unlink($file); + $this->assertEquals('FiuKULnybewpEnrfTmxjsxc-3dWp', $r); + $this->assertNull($error); + } + + public function testMore4M() + { + $file = qiniuTempFile(5 * 1024 * 1024); + list($r, $error) = Etag::sum($file); + unlink($file); + $this->assertEquals('lhvyfIWMYFTq4s4alzlhXoAkqfVL', $r); + $this->assertNull($error); + } + + public function test8M() + { + $file = qiniuTempFile(8 * 1024 * 1024); + list($r, $error) = Etag::sum($file); + unlink($file); + $this->assertEquals('lmRm9ZfGZ86bnMys4wRTWtJj9ClG', $r); + $this->assertNull($error); + } +} diff --git a/vendor/qiniu/php-sdk/tests/Qiniu/Tests/FopTest.php b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/FopTest.php new file mode 100644 index 000000000..e1ea730e8 --- /dev/null +++ b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/FopTest.php @@ -0,0 +1,37 @@ +execute('gogopher.jpg', 'exif'); + $this->assertNull($error); + $this->assertNotNull($exif); + } + + public function testExifPrivate() + { + global $testAuth; + $fop = new Operation('private-res.qiniudn.com', $testAuth); + list($exif, $error) = $fop->execute('noexif.jpg', 'exif'); + $this->assertNotNull($error); + $this->assertNull($exif); + } + + public function testbuildUrl() + { + $fops = 'imageView2/2/h/200'; + $fop = new Operation('testres.qiniudn.com'); + $url = $fop->buildUrl('gogopher.jpg', $fops); + $this->assertEquals($url, 'http://testres.qiniudn.com/gogopher.jpg?imageView2/2/h/200'); + + $fops = array('imageView2/2/h/200', 'imageInfo'); + $url = $fop->buildUrl('gogopher.jpg', $fops); + $this->assertEquals($url, 'http://testres.qiniudn.com/gogopher.jpg?imageView2/2/h/200|imageInfo'); + } +} diff --git a/vendor/qiniu/php-sdk/tests/Qiniu/Tests/FormUpTest.php b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/FormUpTest.php new file mode 100644 index 000000000..4813eed97 --- /dev/null +++ b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/FormUpTest.php @@ -0,0 +1,59 @@ +bucketName = $bucketName; + + global $testAuth; + $this->auth = $testAuth; + $this->cfg = new Config(); + } + + public function testData() + { + $token = $this->auth->uploadToken($this->bucketName); + list($ret, $error) = FormUploader::put($token, 'formput', 'hello world', $this->cfg, null, 'text/plain', null); + $this->assertNull($error); + $this->assertNotNull($ret['hash']); + } + + public function testData2() + { + $upManager = new UploadManager(); + $token = $this->auth->uploadToken($this->bucketName); + list($ret, $error) = $upManager->put($token, 'formput', 'hello world', null, 'text/plain', null); + $this->assertNull($error); + $this->assertNotNull($ret['hash']); + } + + public function testFile() + { + $key = 'formPutFile'; + $token = $this->auth->uploadToken($this->bucketName, $key); + list($ret, $error) = FormUploader::putFile($token, $key, __file__, $this->cfg, null, 'text/plain', null); + $this->assertNull($error); + $this->assertNotNull($ret['hash']); + } + + public function testFile2() + { + $key = 'formPutFile'; + $token = $this->auth->uploadToken($this->bucketName, $key); + $upManager = new UploadManager(); + list($ret, $error) = $upManager->putFile($token, $key, __file__, null, 'text/plain', null); + $this->assertNull($error); + $this->assertNotNull($ret['hash']); + } +} diff --git a/vendor/qiniu/php-sdk/tests/Qiniu/Tests/HttpTest.php b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/HttpTest.php new file mode 100644 index 000000000..e2ab5fc6d --- /dev/null +++ b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/HttpTest.php @@ -0,0 +1,43 @@ +assertEquals($response->statusCode, 200); + $this->assertNotNull($response->body); + $this->assertNull($response->error); + } + + public function testGetQiniu() + { + $response = Client::get('up.qiniu.com'); + $this->assertEquals(405, $response->statusCode); + $this->assertNotNull($response->body); + $this->assertNotNull($response->xReqId()); + $this->assertNotNull($response->xLog()); + $this->assertNotNull($response->error); + } + + public function testPost() + { + $response = Client::post('baidu.com', null); + $this->assertEquals($response->statusCode, 200); + $this->assertNotNull($response->body); + $this->assertNull($response->error); + } + + public function testPostQiniu() + { + $response = Client::post('up.qiniu.com', null); + $this->assertEquals($response->statusCode, 400); + $this->assertNotNull($response->body); + $this->assertNotNull($response->xReqId()); + $this->assertNotNull($response->xLog()); + $this->assertNotNull($response->error); + } +} diff --git a/vendor/qiniu/php-sdk/tests/Qiniu/Tests/ImageUrlBuilderTest.php b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/ImageUrlBuilderTest.php new file mode 100644 index 000000000..fca87b6fe --- /dev/null +++ b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/ImageUrlBuilderTest.php @@ -0,0 +1,261 @@ + + */ +class ImageUrlBuilderTest extends \PHPUnit_Framework_TestCase +{ + /** + * 缩略图测试 + * + * @test + * @return void + * @author Sherlock Ren + */ + public function testThumbutl() + { + $imageUrlBuilder = new \Qiniu\Processing\ImageUrlBuilder(); + $url = 'http://78re52.com1.z0.glb.clouddn.com/resource/gogopher.jpg'; + $url2 = $url . '?watermark/1/gravity/SouthEast/dx/0/dy/0/image/' + . 'aHR0cDovL2Fkcy1jZG4uY2h1Y2h1amllLmNvbS9Ga1R6bnpIY2RLdmRBUFc5cHZZZ3pTc21UY0tB'; + // 异常测试 + $this->assertEquals($url, $imageUrlBuilder->thumbnail($url, 1, 0, 0)); + $this->assertEquals($url, \Qiniu\thumbnail($url, 1, 0, 0)); + + // 简单缩略测试 + $this->assertEquals( + $url . '?imageView2/1/w/200/h/200/ignore-error/1/', + $imageUrlBuilder->thumbnail($url, 1, 200, 200) + ); + $this->assertEquals( + $url . '?imageView2/1/w/200/h/200/ignore-error/1/', + \Qiniu\thumbnail($url, 1, 200, 200) + ); + + // 输出格式测试 + $this->assertEquals( + $url . '?imageView2/1/w/200/h/200/format/png/ignore-error/1/', + $imageUrlBuilder->thumbnail($url, 1, 200, 200, 'png') + ); + $this->assertEquals( + $url . '?imageView2/1/w/200/h/200/format/png/ignore-error/1/', + \Qiniu\thumbnail($url, 1, 200, 200, 'png') + ); + + // 渐进显示测试 + $this->assertEquals( + $url . '?imageView2/1/w/200/h/200/format/png/interlace/1/ignore-error/1/', + $imageUrlBuilder->thumbnail($url, 1, 200, 200, 'png', 1) + ); + $this->assertEquals( + $url . '?imageView2/1/w/200/h/200/format/png/ignore-error/1/', + \Qiniu\thumbnail($url, 1, 200, 200, 'png', 2) + ); + + // 图片质量测试 + $this->assertEquals( + $url . '?imageView2/1/w/200/h/200/format/png/interlace/1/q/80/ignore-error/1/', + $imageUrlBuilder->thumbnail($url, 1, 200, 200, 'png', 1, 80) + ); + $this->assertEquals( + $url . '?imageView2/1/w/200/h/200/format/png/interlace/1/ignore-error/1/', + \Qiniu\thumbnail($url, 1, 200, 200, 'png', 1, 101) + ); + + // 多参数测试 + $this->assertEquals( + $url2 . '|imageView2/1/w/200/h/200/ignore-error/1/', + $imageUrlBuilder->thumbnail($url2, 1, 200, 200) + ); + $this->assertEquals( + $url2 . '|imageView2/1/w/200/h/200/ignore-error/1/', + \Qiniu\thumbnail($url2, 1, 200, 200) + ); + } + + /** + * 图片水印测试 + * + * @test + * @param void + * @return void + * @author Sherlock Ren + */ + public function waterImgTest() + { + $imageUrlBuilder = new \Qiniu\Processing\ImageUrlBuilder(); + $url = 'http://78re52.com1.z0.glb.clouddn.com/resource/gogopher.jpg'; + $url2 = $url . '?imageView2/1/w/200/h/200/format/png/ignore-error/1/'; + $image = 'http://developer.qiniu.com/resource/logo-2.jpg'; + + // 水印简单测试 + $this->assertEquals( + $url . '?watermark/1/image/aHR0cDovL2RldmVsb3Blci5xaW5pdS5jb20vcmVzb3VyY2UvbG9nby0yLmpwZw==' + . '/dissolve/100/gravity/SouthEast/', + $imageUrlBuilder->waterImg($url, $image) + ); + $this->assertEquals( + $url . '?watermark/1/image/aHR0cDovL2RldmVsb3Blci5xaW5pdS5jb20vcmVzb3VyY2UvbG9nby0yLmpwZw==' + . '/gravity/SouthEast/', + $imageUrlBuilder->waterImg($url, $image, 101) + ); + $this->assertEquals( + $url . '?watermark/1/image/aHR0cDovL2RldmVsb3Blci5xaW5pdS5jb20vcmVzb3VyY2UvbG9nby0yLmpwZw==/', + $imageUrlBuilder->waterImg($url, $image, 101, 'sdfsd') + ); + $this->assertEquals( + $url . '?watermark/1/image/aHR0cDovL2RldmVsb3Blci5xaW5pdS5jb20vcmVzb3VyY2UvbG9nby0yLmpwZw==' + . '/dissolve/100/gravity/SouthEast/', + \Qiniu\waterImg($url, $image) + ); + + // 横轴边距测试 + $this->assertEquals( + $url . '?watermark/1/image/aHR0cDovL2RldmVsb3Blci5xaW5pdS5jb20vcmVzb3VyY2UvbG9nby0yLmpwZw==' + . '/dissolve/100/gravity/SouthEast/dx/10/', + $imageUrlBuilder->waterImg($url, $image, 100, 'SouthEast', 10) + ); + $this->assertEquals( + $url . '?watermark/1/image/aHR0cDovL2RldmVsb3Blci5xaW5pdS5jb20vcmVzb3VyY2UvbG9nby0yLmpwZw==' + . '/dissolve/100/gravity/SouthEast/', + \Qiniu\waterImg($url, $image, 100, 'SouthEast', 'sad') + ); + + // 纵轴边距测试 + $this->assertEquals( + $url . '?watermark/1/image/aHR0cDovL2RldmVsb3Blci5xaW5pdS5jb20vcmVzb3VyY2UvbG9nby0yLmpwZw==' + . '/dissolve/100/gravity/SouthEast/dx/10/dy/10/', + $imageUrlBuilder->waterImg($url, $image, 100, 'SouthEast', 10, 10) + ); + $this->assertEquals( + $url . '?watermark/1/image/aHR0cDovL2RldmVsb3Blci5xaW5pdS5jb20vcmVzb3VyY2UvbG9nby0yLmpwZw==' + . '/dissolve/100/gravity/SouthEast/', + \Qiniu\waterImg($url, $image, 100, 'SouthEast', 'sad', 'asdf') + ); + + // 自适应原图的短边比例测试 + $this->assertEquals( + $url . '?watermark/1/image/aHR0cDovL2RldmVsb3Blci5xaW5pdS5jb20vcmVzb3VyY2UvbG9nby0yLmpwZw==' + . '/dissolve/100/gravity/SouthEast/dx/10/dy/10/ws/0.5/', + $imageUrlBuilder->waterImg($url, $image, 100, 'SouthEast', 10, 10, 0.5) + ); + $this->assertEquals( + $url . '?watermark/1/image/aHR0cDovL2RldmVsb3Blci5xaW5pdS5jb20vcmVzb3VyY2UvbG9nby0yLmpwZw==' + . '/dissolve/100/gravity/SouthEast/', + \Qiniu\waterImg($url, $image, 100, 'SouthEast', 'sad', 'asdf', 2) + ); + + // 多参数测试 + $this->assertEquals( + $url2 . '|watermark/1/image/aHR0cDovL2RldmVsb3Blci5xaW5pdS5jb20vcmVzb3VyY2UvbG9nby0yLmpwZw==' + . '/dissolve/100/gravity/SouthEast/', + $imageUrlBuilder->waterImg($url2, $image) + ); + $this->assertEquals( + $url2 . '|watermark/1/image/aHR0cDovL2RldmVsb3Blci5xaW5pdS5jb20vcmVzb3VyY2UvbG9nby0yLmpwZw==' + . '/dissolve/100/gravity/SouthEast/', + \Qiniu\waterImg($url2, $image) + ); + } + + /** + * 文字水印测试 + * + * @test + * @param void + * @return void + * @author Sherlock Ren + */ + public function waterTextTest() + { + $imageUrlBuilder = new \Qiniu\Processing\ImageUrlBuilder(); + $url = 'http://78re52.com1.z0.glb.clouddn.com/resource/gogopher.jpg'; + $url2 = $url . '?imageView2/1/w/200/h/200/format/png/ignore-error/1/'; + $text = '测试一下'; + $font = '微软雅黑'; + $fontColor = '#FF0000'; + + // 水印简单测试 + $this->assertEquals($url . '?watermark/2/text/5rWL6K-V5LiA5LiL/font/5b6u6L2v6ZuF6buR/' + . 'fontsize/500/dissolve/100/gravity/SouthEast/', $imageUrlBuilder->waterText($url, $text, $font, 500)); + $this->assertEquals( + $url . '?watermark/2/text/5rWL6K-V5LiA5LiL/font/5b6u6L2v6ZuF6buR/' + . 'dissolve/100/gravity/SouthEast/', + \Qiniu\waterText($url, $text, $font, 'sdf') + ); + + // 字体颜色测试 + $this->assertEquals( + $url . '?watermark/2/text/5rWL6K-V5LiA5LiL/font/5b6u6L2v6ZuF6buR/fontsize/500/fill/' + . 'I0ZGMDAwMA==/dissolve/100/gravity/SouthEast/', + $imageUrlBuilder->waterText($url, $text, $font, 500, $fontColor) + ); + $this->assertEquals( + $url . '?watermark/2/text/5rWL6K-V5LiA5LiL/font/5b6u6L2v6ZuF6buR/fill/I0ZGMDAwMA==' + . '/dissolve/100/gravity/SouthEast/', + \Qiniu\waterText($url, $text, $font, 'sdf', $fontColor) + ); + + // 透明度测试 + $this->assertEquals( + $url . '?watermark/2/text/5rWL6K-V5LiA5LiL/font/5b6u6L2v6ZuF6buR/fontsize/500/fill/I0ZGMDAwMA==' + . '/dissolve/80/gravity/SouthEast/', + $imageUrlBuilder->waterText($url, $text, $font, 500, $fontColor, 80) + ); + $this->assertEquals( + $url . '?watermark/2/text/5rWL6K-V5LiA5LiL/font/5b6u6L2v6ZuF6buR/fill/I0ZGMDAwMA==' + . '/gravity/SouthEast/', + \Qiniu\waterText($url, $text, $font, 'sdf', $fontColor, 101) + ); + + // 水印位置测试 + $this->assertEquals( + $url . '?watermark/2/text/5rWL6K-V5LiA5LiL/font/5b6u6L2v6ZuF6buR/fontsize/500/fill/I0ZGMDAwMA==' + . '/dissolve/80/gravity/East/', + $imageUrlBuilder->waterText($url, $text, $font, 500, $fontColor, 80, 'East') + ); + $this->assertEquals( + $url . '?watermark/2/text/5rWL6K-V5LiA5LiL/font/5b6u6L2v6ZuF6buR/fill/I0ZGMDAwMA==/', + \Qiniu\waterText($url, $text, $font, 'sdf', $fontColor, 101, 'sdfsdf') + ); + + // 横轴距离测试 + $this->assertEquals( + $url . '?watermark/2/text/5rWL6K-V5LiA5LiL/font/5b6u6L2v6ZuF6buR/fontsize/500/fill/I0ZGMDAwMA==' + . '/dissolve/80/gravity/East/dx/10/', + $imageUrlBuilder->waterText($url, $text, $font, 500, $fontColor, 80, 'East', 10) + ); + $this->assertEquals( + $url . '?watermark/2/text/5rWL6K-V5LiA5LiL/font/5b6u6L2v6ZuF6buR/fill/I0ZGMDAwMA==/', + \Qiniu\waterText($url, $text, $font, 'sdf', $fontColor, 101, 'sdfsdf', 'sdfs') + ); + + // 纵轴距离测试 + $this->assertEquals( + $url . '?watermark/2/text/5rWL6K-V5LiA5LiL/font/5b6u6L2v6ZuF6buR/fontsize/500/fill/I0ZGMDAwMA==' + . '/dissolve/80/gravity/East/dx/10/dy/10/', + $imageUrlBuilder->waterText($url, $text, $font, 500, $fontColor, 80, 'East', 10, 10) + ); + $this->assertEquals( + $url . '?watermark/2/text/5rWL6K-V5LiA5LiL/font/5b6u6L2v6ZuF6buR/fill/I0ZGMDAwMA==/', + \Qiniu\waterText($url, $text, $font, 'sdf', $fontColor, 101, 'sdfsdf', 'sdfs', 'ssdf') + ); + // 多参数测试 + $this->assertEquals( + $url2 . '|watermark/2/text/5rWL6K-V5LiA5LiL/font/5b6u6L2v6ZuF6buR/' + . 'fontsize/500/dissolve/100/gravity/SouthEast/', + $imageUrlBuilder->waterText($url2, $text, $font, 500) + ); + $this->assertEquals( + $url2 . '|watermark/2/text/5rWL6K-V5LiA5LiL/font/5b6u6L2v6ZuF6buR/' + . 'fontsize/500/dissolve/100/gravity/SouthEast/', + \Qiniu\waterText($url2, $text, $font, 500) + ); + } +} diff --git a/vendor/qiniu/php-sdk/tests/Qiniu/Tests/PfopTest.php b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/PfopTest.php new file mode 100644 index 000000000..d03b3f6e9 --- /dev/null +++ b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/PfopTest.php @@ -0,0 +1,66 @@ +execute($bucket, $key, $fops); + $this->assertNull($error); + list($status, $error) = $pfop->status($id); + $this->assertNotNull($status); + $this->assertNull($error); + } + + + public function testPfops() + { + global $testAuth; + $bucket = 'testres'; + $key = 'sintel_trailer.mp4'; + $fops = array( + 'avthumb/m3u8/segtime/10/vcodec/libx264/s/320x240', + 'vframe/jpg/offset/7/w/480/h/360', + ); + $pfop = new PersistentFop($testAuth, null); + + list($id, $error) = $pfop->execute($bucket, $key, $fops); + $this->assertNull($error); + + list($status, $error) = $pfop->status($id); + $this->assertNotNull($status); + $this->assertNull($error); + } + + public function testMkzip() + { + global $testAuth; + $bucket = 'phpsdk'; + $key = 'php-logo.png'; + $pfop = new PersistentFop($testAuth, null); + + $url1 = 'http://phpsdk.qiniudn.com/php-logo.png'; + $url2 = 'http://phpsdk.qiniudn.com/php-sdk.html'; + $zipKey = 'test.zip'; + + $fops = 'mkzip/2/url/' . \Qiniu\base64_urlSafeEncode($url1); + $fops .= '/url/' . \Qiniu\base64_urlSafeEncode($url2); + $fops .= '|saveas/' . \Qiniu\base64_urlSafeEncode("$bucket:$zipKey"); + + list($id, $error) = $pfop->execute($bucket, $key, $fops); + $this->assertNull($error); + + list($status, $error) = $pfop->status($id); + $this->assertNotNull($status); + $this->assertNull($error); + } +} diff --git a/vendor/qiniu/php-sdk/tests/Qiniu/Tests/ResumeUpTest.php b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/ResumeUpTest.php new file mode 100644 index 000000000..41e6ea8ab --- /dev/null +++ b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/ResumeUpTest.php @@ -0,0 +1,60 @@ +bucketName = $bucketName; + + global $testAuth; + $this->auth = $testAuth; + } + + public function test4ML() + { + $key = 'resumePutFile4ML'; + $upManager = new UploadManager(); + $token = $this->auth->uploadToken($this->bucketName, $key); + $tempFile = qiniuTempFile(4 * 1024 * 1024 + 10); + list($ret, $error) = $upManager->putFile($token, $key, $tempFile); + $this->assertNull($error); + $this->assertNotNull($ret['hash']); + unlink($tempFile); + } + + public function test4ML2() + { + $key = 'resumePutFile4ML'; + $zone = new Zone(array('up.fake.qiniu.com'), array('up.qiniup.com')); + $cfg = new Config($zone); + $upManager = new UploadManager($cfg); + $token = $this->auth->uploadToken($this->bucketName, $key); + $tempFile = qiniuTempFile(4 * 1024 * 1024 + 10); + list($ret, $error) = $upManager->putFile($token, $key, $tempFile); + $this->assertNull($error); + $this->assertNotNull($ret['hash']); + unlink($tempFile); + } + + // public function test8M() + // { + // $key = 'resumePutFile8M'; + // $upManager = new UploadManager(); + // $token = $this->auth->uploadToken($this->bucketName, $key); + // $tempFile = qiniuTempFile(8*1024*1024+10); + // list($ret, $error) = $upManager->putFile($token, $key, $tempFile); + // $this->assertNull($error); + // $this->assertNotNull($ret['hash']); + // unlink($tempFile); + // } +} diff --git a/vendor/qiniu/php-sdk/tests/Qiniu/Tests/ZoneTest.php b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/ZoneTest.php new file mode 100644 index 000000000..d32875bd2 --- /dev/null +++ b/vendor/qiniu/php-sdk/tests/Qiniu/Tests/ZoneTest.php @@ -0,0 +1,59 @@ +bucketName = $bucketName; + + global $bucketNameBC; + $this->bucketNameBC = $bucketNameBC; + + global $bucketNameNA; + $this->bucketNameNA = $bucketNameNA; + + global $accessKey; + $this->ak = $accessKey; + + $this->zone = new Zone(); + $this->zoneHttps = new Zone('https'); + } + + public function testUpHosts() + { + $zone = Zone::queryZone($this->ak, $this->bucketName); + $this->assertContains('upload.qiniup.com', $zone->cdnUpHosts); + + $zone = Zone::queryZone($this->ak, $this->bucketNameBC); + $this->assertContains('upload-z1.qiniup.com', $zone->cdnUpHosts); + + $zone = Zone::queryZone($this->ak, $this->bucketNameNA); + $this->assertContains('upload-na0.qiniup.com', $zone->cdnUpHosts); + } + + public function testIoHosts() + { + $zone = Zone::queryZone($this->ak, $this->bucketName); + $this->assertEquals($zone->iovipHost, 'iovip.qbox.me'); + + $zone = Zone::queryZone($this->ak, $this->bucketNameBC); + $this->assertEquals($zone->iovipHost, 'iovip-z1.qbox.me'); + + $zone = Zone::queryZone($this->ak, $this->bucketNameNA); + $this->assertEquals($zone->iovipHost, 'iovip-na0.qbox.me'); + } +} diff --git a/vendor/qiniu/php-sdk/tests/bootstrap.php b/vendor/qiniu/php-sdk/tests/bootstrap.php new file mode 100644 index 000000000..5bd8b0569 --- /dev/null +++ b/vendor/qiniu/php-sdk/tests/bootstrap.php @@ -0,0 +1,43 @@ + 0) { + fseek($file, $size - 1); + fwrite($file, ' '); + } + fclose($file); + return $fileName; +} diff --git a/vendor/symfony/options-resolver/.gitignore b/vendor/symfony/options-resolver/.gitignore new file mode 100644 index 000000000..c49a5d8df --- /dev/null +++ b/vendor/symfony/options-resolver/.gitignore @@ -0,0 +1,3 @@ +vendor/ +composer.lock +phpunit.xml diff --git a/vendor/symfony/options-resolver/CHANGELOG.md b/vendor/symfony/options-resolver/CHANGELOG.md new file mode 100644 index 000000000..5f6d15b2c --- /dev/null +++ b/vendor/symfony/options-resolver/CHANGELOG.md @@ -0,0 +1,46 @@ +CHANGELOG +========= + +2.6.0 +----- + + * deprecated OptionsResolverInterface + * [BC BREAK] removed "array" type hint from OptionsResolverInterface methods + setRequired(), setAllowedValues(), addAllowedValues(), setAllowedTypes() and + addAllowedTypes() + * added OptionsResolver::setDefault() + * added OptionsResolver::hasDefault() + * added OptionsResolver::setNormalizer() + * added OptionsResolver::isRequired() + * added OptionsResolver::getRequiredOptions() + * added OptionsResolver::isMissing() + * added OptionsResolver::getMissingOptions() + * added OptionsResolver::setDefined() + * added OptionsResolver::isDefined() + * added OptionsResolver::getDefinedOptions() + * added OptionsResolver::remove() + * added OptionsResolver::clear() + * deprecated OptionsResolver::replaceDefaults() + * deprecated OptionsResolver::setOptional() in favor of setDefined() + * deprecated OptionsResolver::isKnown() in favor of isDefined() + * [BC BREAK] OptionsResolver::isRequired() returns true now if a required + option has a default value set + * [BC BREAK] merged Options into OptionsResolver and turned Options into an + interface + * deprecated Options::overload() (now in OptionsResolver) + * deprecated Options::set() (now in OptionsResolver) + * deprecated Options::get() (now in OptionsResolver) + * deprecated Options::has() (now in OptionsResolver) + * deprecated Options::replace() (now in OptionsResolver) + * [BC BREAK] Options::get() (now in OptionsResolver) can only be used within + lazy option/normalizer closures now + * [BC BREAK] removed Traversable interface from Options since using within + lazy option/normalizer closures resulted in exceptions + * [BC BREAK] removed Options::all() since using within lazy option/normalizer + closures resulted in exceptions + * [BC BREAK] OptionDefinitionException now extends LogicException instead of + RuntimeException + * [BC BREAK] normalizers are not executed anymore for unset options + * normalizers are executed after validating the options now + * [BC BREAK] an UndefinedOptionsException is now thrown instead of an + InvalidOptionsException when non-existing options are passed diff --git a/vendor/symfony/options-resolver/Exception/AccessException.php b/vendor/symfony/options-resolver/Exception/AccessException.php new file mode 100644 index 000000000..c12b68064 --- /dev/null +++ b/vendor/symfony/options-resolver/Exception/AccessException.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\OptionsResolver\Exception; + +/** + * Thrown when trying to read an option outside of or write it inside of + * {@link \Symfony\Component\OptionsResolver\Options::resolve()}. + * + * @author Bernhard Schussek + */ +class AccessException extends \LogicException implements ExceptionInterface +{ +} diff --git a/vendor/symfony/options-resolver/Exception/ExceptionInterface.php b/vendor/symfony/options-resolver/Exception/ExceptionInterface.php new file mode 100644 index 000000000..b62bb51d4 --- /dev/null +++ b/vendor/symfony/options-resolver/Exception/ExceptionInterface.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\OptionsResolver\Exception; + +/** + * Marker interface for all exceptions thrown by the OptionsResolver component. + * + * @author Bernhard Schussek + */ +interface ExceptionInterface +{ +} diff --git a/vendor/symfony/options-resolver/Exception/InvalidArgumentException.php b/vendor/symfony/options-resolver/Exception/InvalidArgumentException.php new file mode 100644 index 000000000..6d421d68b --- /dev/null +++ b/vendor/symfony/options-resolver/Exception/InvalidArgumentException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\OptionsResolver\Exception; + +/** + * Thrown when an argument is invalid. + * + * @author Bernhard Schussek + */ +class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface +{ +} diff --git a/vendor/symfony/options-resolver/Exception/InvalidOptionsException.php b/vendor/symfony/options-resolver/Exception/InvalidOptionsException.php new file mode 100644 index 000000000..6fd4f125f --- /dev/null +++ b/vendor/symfony/options-resolver/Exception/InvalidOptionsException.php @@ -0,0 +1,23 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\OptionsResolver\Exception; + +/** + * Thrown when the value of an option does not match its validation rules. + * + * You should make sure a valid value is passed to the option. + * + * @author Bernhard Schussek + */ +class InvalidOptionsException extends InvalidArgumentException +{ +} diff --git a/vendor/symfony/options-resolver/Exception/MissingOptionsException.php b/vendor/symfony/options-resolver/Exception/MissingOptionsException.php new file mode 100644 index 000000000..faa487f16 --- /dev/null +++ b/vendor/symfony/options-resolver/Exception/MissingOptionsException.php @@ -0,0 +1,23 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\OptionsResolver\Exception; + +/** + * Exception thrown when a required option is missing. + * + * Add the option to the passed options array. + * + * @author Bernhard Schussek + */ +class MissingOptionsException extends InvalidArgumentException +{ +} diff --git a/vendor/symfony/options-resolver/Exception/NoSuchOptionException.php b/vendor/symfony/options-resolver/Exception/NoSuchOptionException.php new file mode 100644 index 000000000..4c3280f4c --- /dev/null +++ b/vendor/symfony/options-resolver/Exception/NoSuchOptionException.php @@ -0,0 +1,26 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\OptionsResolver\Exception; + +/** + * Thrown when trying to read an option that has no value set. + * + * When accessing optional options from within a lazy option or normalizer you should first + * check whether the optional option is set. You can do this with `isset($options['optional'])`. + * In contrast to the {@link UndefinedOptionsException}, this is a runtime exception that can + * occur when evaluating lazy options. + * + * @author Tobias Schultze + */ +class NoSuchOptionException extends \OutOfBoundsException implements ExceptionInterface +{ +} diff --git a/vendor/symfony/options-resolver/Exception/OptionDefinitionException.php b/vendor/symfony/options-resolver/Exception/OptionDefinitionException.php new file mode 100644 index 000000000..e8e339d44 --- /dev/null +++ b/vendor/symfony/options-resolver/Exception/OptionDefinitionException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\OptionsResolver\Exception; + +/** + * Thrown when two lazy options have a cyclic dependency. + * + * @author Bernhard Schussek + */ +class OptionDefinitionException extends \LogicException implements ExceptionInterface +{ +} diff --git a/vendor/symfony/options-resolver/Exception/UndefinedOptionsException.php b/vendor/symfony/options-resolver/Exception/UndefinedOptionsException.php new file mode 100644 index 000000000..6ca3fce47 --- /dev/null +++ b/vendor/symfony/options-resolver/Exception/UndefinedOptionsException.php @@ -0,0 +1,24 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\OptionsResolver\Exception; + +/** + * Exception thrown when an undefined option is passed. + * + * You should remove the options in question from your code or define them + * beforehand. + * + * @author Bernhard Schussek + */ +class UndefinedOptionsException extends InvalidArgumentException +{ +} diff --git a/vendor/symfony/options-resolver/LICENSE b/vendor/symfony/options-resolver/LICENSE new file mode 100644 index 000000000..17d16a133 --- /dev/null +++ b/vendor/symfony/options-resolver/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2004-2017 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/symfony/options-resolver/Options.php b/vendor/symfony/options-resolver/Options.php new file mode 100644 index 000000000..d444ec423 --- /dev/null +++ b/vendor/symfony/options-resolver/Options.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\OptionsResolver; + +/** + * Contains resolved option values. + * + * @author Bernhard Schussek + * @author Tobias Schultze + */ +interface Options extends \ArrayAccess, \Countable +{ +} diff --git a/vendor/symfony/options-resolver/OptionsResolver.php b/vendor/symfony/options-resolver/OptionsResolver.php new file mode 100644 index 000000000..32ac5663f --- /dev/null +++ b/vendor/symfony/options-resolver/OptionsResolver.php @@ -0,0 +1,1039 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\OptionsResolver; + +use Symfony\Component\OptionsResolver\Exception\AccessException; +use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException; +use Symfony\Component\OptionsResolver\Exception\MissingOptionsException; +use Symfony\Component\OptionsResolver\Exception\NoSuchOptionException; +use Symfony\Component\OptionsResolver\Exception\OptionDefinitionException; +use Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException; + +/** + * Validates options and merges them with default values. + * + * @author Bernhard Schussek + * @author Tobias Schultze + */ +class OptionsResolver implements Options +{ + /** + * The names of all defined options. + * + * @var array + */ + private $defined = array(); + + /** + * The default option values. + * + * @var array + */ + private $defaults = array(); + + /** + * The names of required options. + * + * @var array + */ + private $required = array(); + + /** + * The resolved option values. + * + * @var array + */ + private $resolved = array(); + + /** + * A list of normalizer closures. + * + * @var \Closure[] + */ + private $normalizers = array(); + + /** + * A list of accepted values for each option. + * + * @var array + */ + private $allowedValues = array(); + + /** + * A list of accepted types for each option. + * + * @var array + */ + private $allowedTypes = array(); + + /** + * A list of closures for evaluating lazy options. + * + * @var array + */ + private $lazy = array(); + + /** + * A list of lazy options whose closure is currently being called. + * + * This list helps detecting circular dependencies between lazy options. + * + * @var array + */ + private $calling = array(); + + /** + * Whether the instance is locked for reading. + * + * Once locked, the options cannot be changed anymore. This is + * necessary in order to avoid inconsistencies during the resolving + * process. If any option is changed after being read, all evaluated + * lazy options that depend on this option would become invalid. + * + * @var bool + */ + private $locked = false; + + private static $typeAliases = array( + 'boolean' => 'bool', + 'integer' => 'int', + 'double' => 'float', + ); + + /** + * Sets the default value of a given option. + * + * If the default value should be set based on other options, you can pass + * a closure with the following signature: + * + * function (Options $options) { + * // ... + * } + * + * The closure will be evaluated when {@link resolve()} is called. The + * closure has access to the resolved values of other options through the + * passed {@link Options} instance: + * + * function (Options $options) { + * if (isset($options['port'])) { + * // ... + * } + * } + * + * If you want to access the previously set default value, add a second + * argument to the closure's signature: + * + * $options->setDefault('name', 'Default Name'); + * + * $options->setDefault('name', function (Options $options, $previousValue) { + * // 'Default Name' === $previousValue + * }); + * + * This is mostly useful if the configuration of the {@link Options} object + * is spread across different locations of your code, such as base and + * sub-classes. + * + * @param string $option The name of the option + * @param mixed $value The default value of the option + * + * @return $this + * + * @throws AccessException If called from a lazy option or normalizer + */ + public function setDefault($option, $value) + { + // Setting is not possible once resolving starts, because then lazy + // options could manipulate the state of the object, leading to + // inconsistent results. + if ($this->locked) { + throw new AccessException('Default values cannot be set from a lazy option or normalizer.'); + } + + // If an option is a closure that should be evaluated lazily, store it + // in the "lazy" property. + if ($value instanceof \Closure) { + $reflClosure = new \ReflectionFunction($value); + $params = $reflClosure->getParameters(); + + if (isset($params[0]) && null !== ($class = $params[0]->getClass()) && Options::class === $class->name) { + // Initialize the option if no previous value exists + if (!isset($this->defaults[$option])) { + $this->defaults[$option] = null; + } + + // Ignore previous lazy options if the closure has no second parameter + if (!isset($this->lazy[$option]) || !isset($params[1])) { + $this->lazy[$option] = array(); + } + + // Store closure for later evaluation + $this->lazy[$option][] = $value; + $this->defined[$option] = true; + + // Make sure the option is processed + unset($this->resolved[$option]); + + return $this; + } + } + + // This option is not lazy anymore + unset($this->lazy[$option]); + + // Yet undefined options can be marked as resolved, because we only need + // to resolve options with lazy closures, normalizers or validation + // rules, none of which can exist for undefined options + // If the option was resolved before, update the resolved value + if (!isset($this->defined[$option]) || array_key_exists($option, $this->resolved)) { + $this->resolved[$option] = $value; + } + + $this->defaults[$option] = $value; + $this->defined[$option] = true; + + return $this; + } + + /** + * Sets a list of default values. + * + * @param array $defaults The default values to set + * + * @return $this + * + * @throws AccessException If called from a lazy option or normalizer + */ + public function setDefaults(array $defaults) + { + foreach ($defaults as $option => $value) { + $this->setDefault($option, $value); + } + + return $this; + } + + /** + * Returns whether a default value is set for an option. + * + * Returns true if {@link setDefault()} was called for this option. + * An option is also considered set if it was set to null. + * + * @param string $option The option name + * + * @return bool Whether a default value is set + */ + public function hasDefault($option) + { + return array_key_exists($option, $this->defaults); + } + + /** + * Marks one or more options as required. + * + * @param string|string[] $optionNames One or more option names + * + * @return $this + * + * @throws AccessException If called from a lazy option or normalizer + */ + public function setRequired($optionNames) + { + if ($this->locked) { + throw new AccessException('Options cannot be made required from a lazy option or normalizer.'); + } + + foreach ((array) $optionNames as $option) { + $this->defined[$option] = true; + $this->required[$option] = true; + } + + return $this; + } + + /** + * Returns whether an option is required. + * + * An option is required if it was passed to {@link setRequired()}. + * + * @param string $option The name of the option + * + * @return bool Whether the option is required + */ + public function isRequired($option) + { + return isset($this->required[$option]); + } + + /** + * Returns the names of all required options. + * + * @return string[] The names of the required options + * + * @see isRequired() + */ + public function getRequiredOptions() + { + return array_keys($this->required); + } + + /** + * Returns whether an option is missing a default value. + * + * An option is missing if it was passed to {@link setRequired()}, but not + * to {@link setDefault()}. This option must be passed explicitly to + * {@link resolve()}, otherwise an exception will be thrown. + * + * @param string $option The name of the option + * + * @return bool Whether the option is missing + */ + public function isMissing($option) + { + return isset($this->required[$option]) && !array_key_exists($option, $this->defaults); + } + + /** + * Returns the names of all options missing a default value. + * + * @return string[] The names of the missing options + * + * @see isMissing() + */ + public function getMissingOptions() + { + return array_keys(array_diff_key($this->required, $this->defaults)); + } + + /** + * Defines a valid option name. + * + * Defines an option name without setting a default value. The option will + * be accepted when passed to {@link resolve()}. When not passed, the + * option will not be included in the resolved options. + * + * @param string|string[] $optionNames One or more option names + * + * @return $this + * + * @throws AccessException If called from a lazy option or normalizer + */ + public function setDefined($optionNames) + { + if ($this->locked) { + throw new AccessException('Options cannot be defined from a lazy option or normalizer.'); + } + + foreach ((array) $optionNames as $option) { + $this->defined[$option] = true; + } + + return $this; + } + + /** + * Returns whether an option is defined. + * + * Returns true for any option passed to {@link setDefault()}, + * {@link setRequired()} or {@link setDefined()}. + * + * @param string $option The option name + * + * @return bool Whether the option is defined + */ + public function isDefined($option) + { + return isset($this->defined[$option]); + } + + /** + * Returns the names of all defined options. + * + * @return string[] The names of the defined options + * + * @see isDefined() + */ + public function getDefinedOptions() + { + return array_keys($this->defined); + } + + /** + * Sets the normalizer for an option. + * + * The normalizer should be a closure with the following signature: + * + * ```php + * function (Options $options, $value) { + * // ... + * } + * ``` + * + * The closure is invoked when {@link resolve()} is called. The closure + * has access to the resolved values of other options through the passed + * {@link Options} instance. + * + * The second parameter passed to the closure is the value of + * the option. + * + * The resolved option value is set to the return value of the closure. + * + * @param string $option The option name + * @param \Closure $normalizer The normalizer + * + * @return $this + * + * @throws UndefinedOptionsException If the option is undefined + * @throws AccessException If called from a lazy option or normalizer + */ + public function setNormalizer($option, \Closure $normalizer) + { + if ($this->locked) { + throw new AccessException('Normalizers cannot be set from a lazy option or normalizer.'); + } + + if (!isset($this->defined[$option])) { + throw new UndefinedOptionsException(sprintf( + 'The option "%s" does not exist. Defined options are: "%s".', + $option, + implode('", "', array_keys($this->defined)) + )); + } + + $this->normalizers[$option] = $normalizer; + + // Make sure the option is processed + unset($this->resolved[$option]); + + return $this; + } + + /** + * Sets allowed values for an option. + * + * Instead of passing values, you may also pass a closures with the + * following signature: + * + * function ($value) { + * // return true or false + * } + * + * The closure receives the value as argument and should return true to + * accept the value and false to reject the value. + * + * @param string $option The option name + * @param mixed $allowedValues One or more acceptable values/closures + * + * @return $this + * + * @throws UndefinedOptionsException If the option is undefined + * @throws AccessException If called from a lazy option or normalizer + */ + public function setAllowedValues($option, $allowedValues) + { + if ($this->locked) { + throw new AccessException('Allowed values cannot be set from a lazy option or normalizer.'); + } + + if (!isset($this->defined[$option])) { + throw new UndefinedOptionsException(sprintf( + 'The option "%s" does not exist. Defined options are: "%s".', + $option, + implode('", "', array_keys($this->defined)) + )); + } + + $this->allowedValues[$option] = is_array($allowedValues) ? $allowedValues : array($allowedValues); + + // Make sure the option is processed + unset($this->resolved[$option]); + + return $this; + } + + /** + * Adds allowed values for an option. + * + * The values are merged with the allowed values defined previously. + * + * Instead of passing values, you may also pass a closures with the + * following signature: + * + * function ($value) { + * // return true or false + * } + * + * The closure receives the value as argument and should return true to + * accept the value and false to reject the value. + * + * @param string $option The option name + * @param mixed $allowedValues One or more acceptable values/closures + * + * @return $this + * + * @throws UndefinedOptionsException If the option is undefined + * @throws AccessException If called from a lazy option or normalizer + */ + public function addAllowedValues($option, $allowedValues) + { + if ($this->locked) { + throw new AccessException('Allowed values cannot be added from a lazy option or normalizer.'); + } + + if (!isset($this->defined[$option])) { + throw new UndefinedOptionsException(sprintf( + 'The option "%s" does not exist. Defined options are: "%s".', + $option, + implode('", "', array_keys($this->defined)) + )); + } + + if (!is_array($allowedValues)) { + $allowedValues = array($allowedValues); + } + + if (!isset($this->allowedValues[$option])) { + $this->allowedValues[$option] = $allowedValues; + } else { + $this->allowedValues[$option] = array_merge($this->allowedValues[$option], $allowedValues); + } + + // Make sure the option is processed + unset($this->resolved[$option]); + + return $this; + } + + /** + * Sets allowed types for an option. + * + * Any type for which a corresponding is_() function exists is + * acceptable. Additionally, fully-qualified class or interface names may + * be passed. + * + * @param string $option The option name + * @param string|string[] $allowedTypes One or more accepted types + * + * @return $this + * + * @throws UndefinedOptionsException If the option is undefined + * @throws AccessException If called from a lazy option or normalizer + */ + public function setAllowedTypes($option, $allowedTypes) + { + if ($this->locked) { + throw new AccessException('Allowed types cannot be set from a lazy option or normalizer.'); + } + + if (!isset($this->defined[$option])) { + throw new UndefinedOptionsException(sprintf( + 'The option "%s" does not exist. Defined options are: "%s".', + $option, + implode('", "', array_keys($this->defined)) + )); + } + + $this->allowedTypes[$option] = (array) $allowedTypes; + + // Make sure the option is processed + unset($this->resolved[$option]); + + return $this; + } + + /** + * Adds allowed types for an option. + * + * The types are merged with the allowed types defined previously. + * + * Any type for which a corresponding is_() function exists is + * acceptable. Additionally, fully-qualified class or interface names may + * be passed. + * + * @param string $option The option name + * @param string|string[] $allowedTypes One or more accepted types + * + * @return $this + * + * @throws UndefinedOptionsException If the option is undefined + * @throws AccessException If called from a lazy option or normalizer + */ + public function addAllowedTypes($option, $allowedTypes) + { + if ($this->locked) { + throw new AccessException('Allowed types cannot be added from a lazy option or normalizer.'); + } + + if (!isset($this->defined[$option])) { + throw new UndefinedOptionsException(sprintf( + 'The option "%s" does not exist. Defined options are: "%s".', + $option, + implode('", "', array_keys($this->defined)) + )); + } + + if (!isset($this->allowedTypes[$option])) { + $this->allowedTypes[$option] = (array) $allowedTypes; + } else { + $this->allowedTypes[$option] = array_merge($this->allowedTypes[$option], (array) $allowedTypes); + } + + // Make sure the option is processed + unset($this->resolved[$option]); + + return $this; + } + + /** + * Removes the option with the given name. + * + * Undefined options are ignored. + * + * @param string|string[] $optionNames One or more option names + * + * @return $this + * + * @throws AccessException If called from a lazy option or normalizer + */ + public function remove($optionNames) + { + if ($this->locked) { + throw new AccessException('Options cannot be removed from a lazy option or normalizer.'); + } + + foreach ((array) $optionNames as $option) { + unset($this->defined[$option], $this->defaults[$option], $this->required[$option], $this->resolved[$option]); + unset($this->lazy[$option], $this->normalizers[$option], $this->allowedTypes[$option], $this->allowedValues[$option]); + } + + return $this; + } + + /** + * Removes all options. + * + * @return $this + * + * @throws AccessException If called from a lazy option or normalizer + */ + public function clear() + { + if ($this->locked) { + throw new AccessException('Options cannot be cleared from a lazy option or normalizer.'); + } + + $this->defined = array(); + $this->defaults = array(); + $this->required = array(); + $this->resolved = array(); + $this->lazy = array(); + $this->normalizers = array(); + $this->allowedTypes = array(); + $this->allowedValues = array(); + + return $this; + } + + /** + * Merges options with the default values stored in the container and + * validates them. + * + * Exceptions are thrown if: + * + * - Undefined options are passed; + * - Required options are missing; + * - Options have invalid types; + * - Options have invalid values. + * + * @param array $options A map of option names to values + * + * @return array The merged and validated options + * + * @throws UndefinedOptionsException If an option name is undefined + * @throws InvalidOptionsException If an option doesn't fulfill the + * specified validation rules + * @throws MissingOptionsException If a required option is missing + * @throws OptionDefinitionException If there is a cyclic dependency between + * lazy options and/or normalizers + * @throws NoSuchOptionException If a lazy option reads an unavailable option + * @throws AccessException If called from a lazy option or normalizer + */ + public function resolve(array $options = array()) + { + if ($this->locked) { + throw new AccessException('Options cannot be resolved from a lazy option or normalizer.'); + } + + // Allow this method to be called multiple times + $clone = clone $this; + + // Make sure that no unknown options are passed + $diff = array_diff_key($options, $clone->defined); + + if (count($diff) > 0) { + ksort($clone->defined); + ksort($diff); + + throw new UndefinedOptionsException(sprintf( + (count($diff) > 1 ? 'The options "%s" do not exist.' : 'The option "%s" does not exist.').' Defined options are: "%s".', + implode('", "', array_keys($diff)), + implode('", "', array_keys($clone->defined)) + )); + } + + // Override options set by the user + foreach ($options as $option => $value) { + $clone->defaults[$option] = $value; + unset($clone->resolved[$option], $clone->lazy[$option]); + } + + // Check whether any required option is missing + $diff = array_diff_key($clone->required, $clone->defaults); + + if (count($diff) > 0) { + ksort($diff); + + throw new MissingOptionsException(sprintf( + count($diff) > 1 ? 'The required options "%s" are missing.' : 'The required option "%s" is missing.', + implode('", "', array_keys($diff)) + )); + } + + // Lock the container + $clone->locked = true; + + // Now process the individual options. Use offsetGet(), which resolves + // the option itself and any options that the option depends on + foreach ($clone->defaults as $option => $_) { + $clone->offsetGet($option); + } + + return $clone->resolved; + } + + /** + * Returns the resolved value of an option. + * + * @param string $option The option name + * + * @return mixed The option value + * + * @throws AccessException If accessing this method outside of + * {@link resolve()} + * @throws NoSuchOptionException If the option is not set + * @throws InvalidOptionsException If the option doesn't fulfill the + * specified validation rules + * @throws OptionDefinitionException If there is a cyclic dependency between + * lazy options and/or normalizers + */ + public function offsetGet($option) + { + if (!$this->locked) { + throw new AccessException('Array access is only supported within closures of lazy options and normalizers.'); + } + + // Shortcut for resolved options + if (array_key_exists($option, $this->resolved)) { + return $this->resolved[$option]; + } + + // Check whether the option is set at all + if (!array_key_exists($option, $this->defaults)) { + if (!isset($this->defined[$option])) { + throw new NoSuchOptionException(sprintf( + 'The option "%s" does not exist. Defined options are: "%s".', + $option, + implode('", "', array_keys($this->defined)) + )); + } + + throw new NoSuchOptionException(sprintf( + 'The optional option "%s" has no value set. You should make sure it is set with "isset" before reading it.', + $option + )); + } + + $value = $this->defaults[$option]; + + // Resolve the option if the default value is lazily evaluated + if (isset($this->lazy[$option])) { + // If the closure is already being called, we have a cyclic + // dependency + if (isset($this->calling[$option])) { + throw new OptionDefinitionException(sprintf( + 'The options "%s" have a cyclic dependency.', + implode('", "', array_keys($this->calling)) + )); + } + + // The following section must be protected from cyclic + // calls. Set $calling for the current $option to detect a cyclic + // dependency + // BEGIN + $this->calling[$option] = true; + try { + foreach ($this->lazy[$option] as $closure) { + $value = $closure($this, $value); + } + } finally { + unset($this->calling[$option]); + } + // END + } + + // Validate the type of the resolved option + if (isset($this->allowedTypes[$option])) { + $valid = false; + + foreach ($this->allowedTypes[$option] as $type) { + $type = isset(self::$typeAliases[$type]) ? self::$typeAliases[$type] : $type; + + if (function_exists($isFunction = 'is_'.$type)) { + if ($isFunction($value)) { + $valid = true; + break; + } + + continue; + } + + if ($value instanceof $type) { + $valid = true; + break; + } + } + + if (!$valid) { + throw new InvalidOptionsException(sprintf( + 'The option "%s" with value %s is expected to be of type '. + '"%s", but is of type "%s".', + $option, + $this->formatValue($value), + implode('" or "', $this->allowedTypes[$option]), + $this->formatTypeOf($value) + )); + } + } + + // Validate the value of the resolved option + if (isset($this->allowedValues[$option])) { + $success = false; + $printableAllowedValues = array(); + + foreach ($this->allowedValues[$option] as $allowedValue) { + if ($allowedValue instanceof \Closure) { + if ($allowedValue($value)) { + $success = true; + break; + } + + // Don't include closures in the exception message + continue; + } elseif ($value === $allowedValue) { + $success = true; + break; + } + + $printableAllowedValues[] = $allowedValue; + } + + if (!$success) { + $message = sprintf( + 'The option "%s" with value %s is invalid.', + $option, + $this->formatValue($value) + ); + + if (count($printableAllowedValues) > 0) { + $message .= sprintf( + ' Accepted values are: %s.', + $this->formatValues($printableAllowedValues) + ); + } + + throw new InvalidOptionsException($message); + } + } + + // Normalize the validated option + if (isset($this->normalizers[$option])) { + // If the closure is already being called, we have a cyclic + // dependency + if (isset($this->calling[$option])) { + throw new OptionDefinitionException(sprintf( + 'The options "%s" have a cyclic dependency.', + implode('", "', array_keys($this->calling)) + )); + } + + $normalizer = $this->normalizers[$option]; + + // The following section must be protected from cyclic + // calls. Set $calling for the current $option to detect a cyclic + // dependency + // BEGIN + $this->calling[$option] = true; + try { + $value = $normalizer($this, $value); + } finally { + unset($this->calling[$option]); + } + // END + } + + // Mark as resolved + $this->resolved[$option] = $value; + + return $value; + } + + /** + * Returns whether a resolved option with the given name exists. + * + * @param string $option The option name + * + * @return bool Whether the option is set + * + * @throws AccessException If accessing this method outside of {@link resolve()} + * + * @see \ArrayAccess::offsetExists() + */ + public function offsetExists($option) + { + if (!$this->locked) { + throw new AccessException('Array access is only supported within closures of lazy options and normalizers.'); + } + + return array_key_exists($option, $this->defaults); + } + + /** + * Not supported. + * + * @throws AccessException + */ + public function offsetSet($option, $value) + { + throw new AccessException('Setting options via array access is not supported. Use setDefault() instead.'); + } + + /** + * Not supported. + * + * @throws AccessException + */ + public function offsetUnset($option) + { + throw new AccessException('Removing options via array access is not supported. Use remove() instead.'); + } + + /** + * Returns the number of set options. + * + * This may be only a subset of the defined options. + * + * @return int Number of options + * + * @throws AccessException If accessing this method outside of {@link resolve()} + * + * @see \Countable::count() + */ + public function count() + { + if (!$this->locked) { + throw new AccessException('Counting is only supported within closures of lazy options and normalizers.'); + } + + return count($this->defaults); + } + + /** + * Returns a string representation of the type of the value. + * + * This method should be used if you pass the type of a value as + * message parameter to a constraint violation. Note that such + * parameters should usually not be included in messages aimed at + * non-technical people. + * + * @param mixed $value The value to return the type of + * + * @return string The type of the value + */ + private function formatTypeOf($value) + { + return is_object($value) ? get_class($value) : gettype($value); + } + + /** + * Returns a string representation of the value. + * + * This method returns the equivalent PHP tokens for most scalar types + * (i.e. "false" for false, "1" for 1 etc.). Strings are always wrapped + * in double quotes ("). + * + * @param mixed $value The value to format as string + * + * @return string The string representation of the passed value + */ + private function formatValue($value) + { + if (is_object($value)) { + return get_class($value); + } + + if (is_array($value)) { + return 'array'; + } + + if (is_string($value)) { + return '"'.$value.'"'; + } + + if (is_resource($value)) { + return 'resource'; + } + + if (null === $value) { + return 'null'; + } + + if (false === $value) { + return 'false'; + } + + if (true === $value) { + return 'true'; + } + + return (string) $value; + } + + /** + * Returns a string representation of a list of values. + * + * Each of the values is converted to a string using + * {@link formatValue()}. The values are then concatenated with commas. + * + * @param array $values A list of values + * + * @return string The string representation of the value list + * + * @see formatValue() + */ + private function formatValues(array $values) + { + foreach ($values as $key => $value) { + $values[$key] = $this->formatValue($value); + } + + return implode(', ', $values); + } +} diff --git a/vendor/symfony/options-resolver/README.md b/vendor/symfony/options-resolver/README.md new file mode 100644 index 000000000..245e69b54 --- /dev/null +++ b/vendor/symfony/options-resolver/README.md @@ -0,0 +1,15 @@ +OptionsResolver Component +========================= + +The OptionsResolver component is `array_replace` on steroids. It allows you to +create an options system with required options, defaults, validation (type, +value), normalization and more. + +Resources +--------- + + * [Documentation](https://symfony.com/doc/current/components/options_resolver.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/vendor/symfony/options-resolver/Tests/OptionsResolverTest.php b/vendor/symfony/options-resolver/Tests/OptionsResolverTest.php new file mode 100644 index 000000000..d09dece33 --- /dev/null +++ b/vendor/symfony/options-resolver/Tests/OptionsResolverTest.php @@ -0,0 +1,1559 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\OptionsResolver\Tests; + +use PHPUnit\Framework\Assert; +use PHPUnit\Framework\TestCase; +use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException; +use Symfony\Component\OptionsResolver\Options; +use Symfony\Component\OptionsResolver\OptionsResolver; + +class OptionsResolverTest extends TestCase +{ + /** + * @var OptionsResolver + */ + private $resolver; + + protected function setUp() + { + $this->resolver = new OptionsResolver(); + } + + //////////////////////////////////////////////////////////////////////////// + // resolve() + //////////////////////////////////////////////////////////////////////////// + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException + * @expectedExceptionMessage The option "foo" does not exist. Defined options are: "a", "z". + */ + public function testResolveFailsIfNonExistingOption() + { + $this->resolver->setDefault('z', '1'); + $this->resolver->setDefault('a', '2'); + + $this->resolver->resolve(array('foo' => 'bar')); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException + * @expectedExceptionMessage The options "baz", "foo", "ping" do not exist. Defined options are: "a", "z". + */ + public function testResolveFailsIfMultipleNonExistingOptions() + { + $this->resolver->setDefault('z', '1'); + $this->resolver->setDefault('a', '2'); + + $this->resolver->resolve(array('ping' => 'pong', 'foo' => 'bar', 'baz' => 'bam')); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException + */ + public function testResolveFailsFromLazyOption() + { + $this->resolver->setDefault('foo', function (Options $options) { + $options->resolve(array()); + }); + + $this->resolver->resolve(); + } + + //////////////////////////////////////////////////////////////////////////// + // setDefault()/hasDefault() + //////////////////////////////////////////////////////////////////////////// + + public function testSetDefaultReturnsThis() + { + $this->assertSame($this->resolver, $this->resolver->setDefault('foo', 'bar')); + } + + public function testSetDefault() + { + $this->resolver->setDefault('one', '1'); + $this->resolver->setDefault('two', '20'); + + $this->assertEquals(array( + 'one' => '1', + 'two' => '20', + ), $this->resolver->resolve()); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException + */ + public function testFailIfSetDefaultFromLazyOption() + { + $this->resolver->setDefault('lazy', function (Options $options) { + $options->setDefault('default', 42); + }); + + $this->resolver->resolve(); + } + + public function testHasDefault() + { + $this->assertFalse($this->resolver->hasDefault('foo')); + $this->resolver->setDefault('foo', 42); + $this->assertTrue($this->resolver->hasDefault('foo')); + } + + public function testHasDefaultWithNullValue() + { + $this->assertFalse($this->resolver->hasDefault('foo')); + $this->resolver->setDefault('foo', null); + $this->assertTrue($this->resolver->hasDefault('foo')); + } + + //////////////////////////////////////////////////////////////////////////// + // lazy setDefault() + //////////////////////////////////////////////////////////////////////////// + + public function testSetLazyReturnsThis() + { + $this->assertSame($this->resolver, $this->resolver->setDefault('foo', function (Options $options) {})); + } + + public function testSetLazyClosure() + { + $this->resolver->setDefault('foo', function (Options $options) { + return 'lazy'; + }); + + $this->assertEquals(array('foo' => 'lazy'), $this->resolver->resolve()); + } + + public function testClosureWithoutTypeHintNotInvoked() + { + $closure = function ($options) { + Assert::fail('Should not be called'); + }; + + $this->resolver->setDefault('foo', $closure); + + $this->assertSame(array('foo' => $closure), $this->resolver->resolve()); + } + + public function testClosureWithoutParametersNotInvoked() + { + $closure = function () { + Assert::fail('Should not be called'); + }; + + $this->resolver->setDefault('foo', $closure); + + $this->assertSame(array('foo' => $closure), $this->resolver->resolve()); + } + + public function testAccessPreviousDefaultValue() + { + // defined by superclass + $this->resolver->setDefault('foo', 'bar'); + + // defined by subclass + $this->resolver->setDefault('foo', function (Options $options, $previousValue) { + Assert::assertEquals('bar', $previousValue); + + return 'lazy'; + }); + + $this->assertEquals(array('foo' => 'lazy'), $this->resolver->resolve()); + } + + public function testAccessPreviousLazyDefaultValue() + { + // defined by superclass + $this->resolver->setDefault('foo', function (Options $options) { + return 'bar'; + }); + + // defined by subclass + $this->resolver->setDefault('foo', function (Options $options, $previousValue) { + Assert::assertEquals('bar', $previousValue); + + return 'lazy'; + }); + + $this->assertEquals(array('foo' => 'lazy'), $this->resolver->resolve()); + } + + public function testPreviousValueIsNotEvaluatedIfNoSecondArgument() + { + // defined by superclass + $this->resolver->setDefault('foo', function () { + Assert::fail('Should not be called'); + }); + + // defined by subclass, no $previousValue argument defined! + $this->resolver->setDefault('foo', function (Options $options) { + return 'lazy'; + }); + + $this->assertEquals(array('foo' => 'lazy'), $this->resolver->resolve()); + } + + public function testOverwrittenLazyOptionNotEvaluated() + { + $this->resolver->setDefault('foo', function (Options $options) { + Assert::fail('Should not be called'); + }); + + $this->resolver->setDefault('foo', 'bar'); + + $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve()); + } + + public function testInvokeEachLazyOptionOnlyOnce() + { + $calls = 0; + + $this->resolver->setDefault('lazy1', function (Options $options) use (&$calls) { + Assert::assertSame(1, ++$calls); + + $options['lazy2']; + }); + + $this->resolver->setDefault('lazy2', function (Options $options) use (&$calls) { + Assert::assertSame(2, ++$calls); + }); + + $this->resolver->resolve(); + + $this->assertSame(2, $calls); + } + + //////////////////////////////////////////////////////////////////////////// + // setRequired()/isRequired()/getRequiredOptions() + //////////////////////////////////////////////////////////////////////////// + + public function testSetRequiredReturnsThis() + { + $this->assertSame($this->resolver, $this->resolver->setRequired('foo')); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException + */ + public function testFailIfSetRequiredFromLazyOption() + { + $this->resolver->setDefault('foo', function (Options $options) { + $options->setRequired('bar'); + }); + + $this->resolver->resolve(); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\MissingOptionsException + */ + public function testResolveFailsIfRequiredOptionMissing() + { + $this->resolver->setRequired('foo'); + + $this->resolver->resolve(); + } + + public function testResolveSucceedsIfRequiredOptionSet() + { + $this->resolver->setRequired('foo'); + $this->resolver->setDefault('foo', 'bar'); + + $this->assertNotEmpty($this->resolver->resolve()); + } + + public function testResolveSucceedsIfRequiredOptionPassed() + { + $this->resolver->setRequired('foo'); + + $this->assertNotEmpty($this->resolver->resolve(array('foo' => 'bar'))); + } + + public function testIsRequired() + { + $this->assertFalse($this->resolver->isRequired('foo')); + $this->resolver->setRequired('foo'); + $this->assertTrue($this->resolver->isRequired('foo')); + } + + public function testRequiredIfSetBefore() + { + $this->assertFalse($this->resolver->isRequired('foo')); + + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setRequired('foo'); + + $this->assertTrue($this->resolver->isRequired('foo')); + } + + public function testStillRequiredAfterSet() + { + $this->assertFalse($this->resolver->isRequired('foo')); + + $this->resolver->setRequired('foo'); + $this->resolver->setDefault('foo', 'bar'); + + $this->assertTrue($this->resolver->isRequired('foo')); + } + + public function testIsNotRequiredAfterRemove() + { + $this->assertFalse($this->resolver->isRequired('foo')); + $this->resolver->setRequired('foo'); + $this->resolver->remove('foo'); + $this->assertFalse($this->resolver->isRequired('foo')); + } + + public function testIsNotRequiredAfterClear() + { + $this->assertFalse($this->resolver->isRequired('foo')); + $this->resolver->setRequired('foo'); + $this->resolver->clear(); + $this->assertFalse($this->resolver->isRequired('foo')); + } + + public function testGetRequiredOptions() + { + $this->resolver->setRequired(array('foo', 'bar')); + $this->resolver->setDefault('bam', 'baz'); + $this->resolver->setDefault('foo', 'boo'); + + $this->assertSame(array('foo', 'bar'), $this->resolver->getRequiredOptions()); + } + + //////////////////////////////////////////////////////////////////////////// + // isMissing()/getMissingOptions() + //////////////////////////////////////////////////////////////////////////// + + public function testIsMissingIfNotSet() + { + $this->assertFalse($this->resolver->isMissing('foo')); + $this->resolver->setRequired('foo'); + $this->assertTrue($this->resolver->isMissing('foo')); + } + + public function testIsNotMissingIfSet() + { + $this->resolver->setDefault('foo', 'bar'); + + $this->assertFalse($this->resolver->isMissing('foo')); + $this->resolver->setRequired('foo'); + $this->assertFalse($this->resolver->isMissing('foo')); + } + + public function testIsNotMissingAfterRemove() + { + $this->resolver->setRequired('foo'); + $this->resolver->remove('foo'); + $this->assertFalse($this->resolver->isMissing('foo')); + } + + public function testIsNotMissingAfterClear() + { + $this->resolver->setRequired('foo'); + $this->resolver->clear(); + $this->assertFalse($this->resolver->isRequired('foo')); + } + + public function testGetMissingOptions() + { + $this->resolver->setRequired(array('foo', 'bar')); + $this->resolver->setDefault('bam', 'baz'); + $this->resolver->setDefault('foo', 'boo'); + + $this->assertSame(array('bar'), $this->resolver->getMissingOptions()); + } + + //////////////////////////////////////////////////////////////////////////// + // setDefined()/isDefined()/getDefinedOptions() + //////////////////////////////////////////////////////////////////////////// + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException + */ + public function testFailIfSetDefinedFromLazyOption() + { + $this->resolver->setDefault('foo', function (Options $options) { + $options->setDefined('bar'); + }); + + $this->resolver->resolve(); + } + + public function testDefinedOptionsNotIncludedInResolvedOptions() + { + $this->resolver->setDefined('foo'); + + $this->assertSame(array(), $this->resolver->resolve()); + } + + public function testDefinedOptionsIncludedIfDefaultSetBefore() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setDefined('foo'); + + $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve()); + } + + public function testDefinedOptionsIncludedIfDefaultSetAfter() + { + $this->resolver->setDefined('foo'); + $this->resolver->setDefault('foo', 'bar'); + + $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve()); + } + + public function testDefinedOptionsIncludedIfPassedToResolve() + { + $this->resolver->setDefined('foo'); + + $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve(array('foo' => 'bar'))); + } + + public function testIsDefined() + { + $this->assertFalse($this->resolver->isDefined('foo')); + $this->resolver->setDefined('foo'); + $this->assertTrue($this->resolver->isDefined('foo')); + } + + public function testLazyOptionsAreDefined() + { + $this->assertFalse($this->resolver->isDefined('foo')); + $this->resolver->setDefault('foo', function (Options $options) {}); + $this->assertTrue($this->resolver->isDefined('foo')); + } + + public function testRequiredOptionsAreDefined() + { + $this->assertFalse($this->resolver->isDefined('foo')); + $this->resolver->setRequired('foo'); + $this->assertTrue($this->resolver->isDefined('foo')); + } + + public function testSetOptionsAreDefined() + { + $this->assertFalse($this->resolver->isDefined('foo')); + $this->resolver->setDefault('foo', 'bar'); + $this->assertTrue($this->resolver->isDefined('foo')); + } + + public function testGetDefinedOptions() + { + $this->resolver->setDefined(array('foo', 'bar')); + $this->resolver->setDefault('baz', 'bam'); + $this->resolver->setRequired('boo'); + + $this->assertSame(array('foo', 'bar', 'baz', 'boo'), $this->resolver->getDefinedOptions()); + } + + public function testRemovedOptionsAreNotDefined() + { + $this->assertFalse($this->resolver->isDefined('foo')); + $this->resolver->setDefined('foo'); + $this->assertTrue($this->resolver->isDefined('foo')); + $this->resolver->remove('foo'); + $this->assertFalse($this->resolver->isDefined('foo')); + } + + public function testClearedOptionsAreNotDefined() + { + $this->assertFalse($this->resolver->isDefined('foo')); + $this->resolver->setDefined('foo'); + $this->assertTrue($this->resolver->isDefined('foo')); + $this->resolver->clear(); + $this->assertFalse($this->resolver->isDefined('foo')); + } + + //////////////////////////////////////////////////////////////////////////// + // setAllowedTypes() + //////////////////////////////////////////////////////////////////////////// + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException + */ + public function testSetAllowedTypesFailsIfUnknownOption() + { + $this->resolver->setAllowedTypes('foo', 'string'); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException + */ + public function testFailIfSetAllowedTypesFromLazyOption() + { + $this->resolver->setDefault('foo', function (Options $options) { + $options->setAllowedTypes('bar', 'string'); + }); + + $this->resolver->setDefault('bar', 'baz'); + + $this->resolver->resolve(); + } + + /** + * @dataProvider provideInvalidTypes + */ + public function testResolveFailsIfInvalidType($actualType, $allowedType, $exceptionMessage) + { + $this->resolver->setDefined('option'); + $this->resolver->setAllowedTypes('option', $allowedType); + + if (method_exists($this, 'expectException')) { + $this->expectException('Symfony\Component\OptionsResolver\Exception\InvalidOptionsException'); + $this->expectExceptionMessage($exceptionMessage); + } else { + $this->setExpectedException('Symfony\Component\OptionsResolver\Exception\InvalidOptionsException', $exceptionMessage); + } + + $this->resolver->resolve(array('option' => $actualType)); + } + + public function provideInvalidTypes() + { + return array( + array(true, 'string', 'The option "option" with value true is expected to be of type "string", but is of type "boolean".'), + array(false, 'string', 'The option "option" with value false is expected to be of type "string", but is of type "boolean".'), + array(fopen(__FILE__, 'r'), 'string', 'The option "option" with value resource is expected to be of type "string", but is of type "resource".'), + array(array(), 'string', 'The option "option" with value array is expected to be of type "string", but is of type "array".'), + array(new OptionsResolver(), 'string', 'The option "option" with value Symfony\Component\OptionsResolver\OptionsResolver is expected to be of type "string", but is of type "Symfony\Component\OptionsResolver\OptionsResolver".'), + array(42, 'string', 'The option "option" with value 42 is expected to be of type "string", but is of type "integer".'), + array(null, 'string', 'The option "option" with value null is expected to be of type "string", but is of type "NULL".'), + array('bar', '\stdClass', 'The option "option" with value "bar" is expected to be of type "\stdClass", but is of type "string".'), + ); + } + + public function testResolveSucceedsIfValidType() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setAllowedTypes('foo', 'string'); + + $this->assertNotEmpty($this->resolver->resolve()); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + * @expectedExceptionMessage The option "foo" with value 42 is expected to be of type "string" or "bool", but is of type "integer". + */ + public function testResolveFailsIfInvalidTypeMultiple() + { + $this->resolver->setDefault('foo', 42); + $this->resolver->setAllowedTypes('foo', array('string', 'bool')); + + $this->resolver->resolve(); + } + + public function testResolveSucceedsIfValidTypeMultiple() + { + $this->resolver->setDefault('foo', true); + $this->resolver->setAllowedTypes('foo', array('string', 'bool')); + + $this->assertNotEmpty($this->resolver->resolve()); + } + + public function testResolveSucceedsIfInstanceOfClass() + { + $this->resolver->setDefault('foo', new \stdClass()); + $this->resolver->setAllowedTypes('foo', '\stdClass'); + + $this->assertNotEmpty($this->resolver->resolve()); + } + + //////////////////////////////////////////////////////////////////////////// + // addAllowedTypes() + //////////////////////////////////////////////////////////////////////////// + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException + */ + public function testAddAllowedTypesFailsIfUnknownOption() + { + $this->resolver->addAllowedTypes('foo', 'string'); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException + */ + public function testFailIfAddAllowedTypesFromLazyOption() + { + $this->resolver->setDefault('foo', function (Options $options) { + $options->addAllowedTypes('bar', 'string'); + }); + + $this->resolver->setDefault('bar', 'baz'); + + $this->resolver->resolve(); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testResolveFailsIfInvalidAddedType() + { + $this->resolver->setDefault('foo', 42); + $this->resolver->addAllowedTypes('foo', 'string'); + + $this->resolver->resolve(); + } + + public function testResolveSucceedsIfValidAddedType() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->addAllowedTypes('foo', 'string'); + + $this->assertNotEmpty($this->resolver->resolve()); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testResolveFailsIfInvalidAddedTypeMultiple() + { + $this->resolver->setDefault('foo', 42); + $this->resolver->addAllowedTypes('foo', array('string', 'bool')); + + $this->resolver->resolve(); + } + + public function testResolveSucceedsIfValidAddedTypeMultiple() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->addAllowedTypes('foo', array('string', 'bool')); + + $this->assertNotEmpty($this->resolver->resolve()); + } + + public function testAddAllowedTypesDoesNotOverwrite() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setAllowedTypes('foo', 'string'); + $this->resolver->addAllowedTypes('foo', 'bool'); + + $this->resolver->setDefault('foo', 'bar'); + + $this->assertNotEmpty($this->resolver->resolve()); + } + + public function testAddAllowedTypesDoesNotOverwrite2() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setAllowedTypes('foo', 'string'); + $this->resolver->addAllowedTypes('foo', 'bool'); + + $this->resolver->setDefault('foo', false); + + $this->assertNotEmpty($this->resolver->resolve()); + } + + //////////////////////////////////////////////////////////////////////////// + // setAllowedValues() + //////////////////////////////////////////////////////////////////////////// + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException + */ + public function testSetAllowedValuesFailsIfUnknownOption() + { + $this->resolver->setAllowedValues('foo', 'bar'); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException + */ + public function testFailIfSetAllowedValuesFromLazyOption() + { + $this->resolver->setDefault('foo', function (Options $options) { + $options->setAllowedValues('bar', 'baz'); + }); + + $this->resolver->setDefault('bar', 'baz'); + + $this->resolver->resolve(); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + * @expectedExceptionMessage The option "foo" with value 42 is invalid. Accepted values are: "bar". + */ + public function testResolveFailsIfInvalidValue() + { + $this->resolver->setDefined('foo'); + $this->resolver->setAllowedValues('foo', 'bar'); + + $this->resolver->resolve(array('foo' => 42)); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + * @expectedExceptionMessage The option "foo" with value null is invalid. Accepted values are: "bar". + */ + public function testResolveFailsIfInvalidValueIsNull() + { + $this->resolver->setDefault('foo', null); + $this->resolver->setAllowedValues('foo', 'bar'); + + $this->resolver->resolve(); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testResolveFailsIfInvalidValueStrict() + { + $this->resolver->setDefault('foo', 42); + $this->resolver->setAllowedValues('foo', '42'); + + $this->resolver->resolve(); + } + + public function testResolveSucceedsIfValidValue() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setAllowedValues('foo', 'bar'); + + $this->assertEquals(array('foo' => 'bar'), $this->resolver->resolve()); + } + + public function testResolveSucceedsIfValidValueIsNull() + { + $this->resolver->setDefault('foo', null); + $this->resolver->setAllowedValues('foo', null); + + $this->assertEquals(array('foo' => null), $this->resolver->resolve()); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + * @expectedExceptionMessage The option "foo" with value 42 is invalid. Accepted values are: "bar", false, null. + */ + public function testResolveFailsIfInvalidValueMultiple() + { + $this->resolver->setDefault('foo', 42); + $this->resolver->setAllowedValues('foo', array('bar', false, null)); + + $this->resolver->resolve(); + } + + public function testResolveSucceedsIfValidValueMultiple() + { + $this->resolver->setDefault('foo', 'baz'); + $this->resolver->setAllowedValues('foo', array('bar', 'baz')); + + $this->assertEquals(array('foo' => 'baz'), $this->resolver->resolve()); + } + + public function testResolveFailsIfClosureReturnsFalse() + { + $this->resolver->setDefault('foo', 42); + $this->resolver->setAllowedValues('foo', function ($value) use (&$passedValue) { + $passedValue = $value; + + return false; + }); + + try { + $this->resolver->resolve(); + $this->fail('Should fail'); + } catch (InvalidOptionsException $e) { + } + + $this->assertSame(42, $passedValue); + } + + public function testResolveSucceedsIfClosureReturnsTrue() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setAllowedValues('foo', function ($value) use (&$passedValue) { + $passedValue = $value; + + return true; + }); + + $this->assertEquals(array('foo' => 'bar'), $this->resolver->resolve()); + $this->assertSame('bar', $passedValue); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testResolveFailsIfAllClosuresReturnFalse() + { + $this->resolver->setDefault('foo', 42); + $this->resolver->setAllowedValues('foo', array( + function () { return false; }, + function () { return false; }, + function () { return false; }, + )); + + $this->resolver->resolve(); + } + + public function testResolveSucceedsIfAnyClosureReturnsTrue() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setAllowedValues('foo', array( + function () { return false; }, + function () { return true; }, + function () { return false; }, + )); + + $this->assertEquals(array('foo' => 'bar'), $this->resolver->resolve()); + } + + //////////////////////////////////////////////////////////////////////////// + // addAllowedValues() + //////////////////////////////////////////////////////////////////////////// + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException + */ + public function testAddAllowedValuesFailsIfUnknownOption() + { + $this->resolver->addAllowedValues('foo', 'bar'); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException + */ + public function testFailIfAddAllowedValuesFromLazyOption() + { + $this->resolver->setDefault('foo', function (Options $options) { + $options->addAllowedValues('bar', 'baz'); + }); + + $this->resolver->setDefault('bar', 'baz'); + + $this->resolver->resolve(); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testResolveFailsIfInvalidAddedValue() + { + $this->resolver->setDefault('foo', 42); + $this->resolver->addAllowedValues('foo', 'bar'); + + $this->resolver->resolve(); + } + + public function testResolveSucceedsIfValidAddedValue() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->addAllowedValues('foo', 'bar'); + + $this->assertEquals(array('foo' => 'bar'), $this->resolver->resolve()); + } + + public function testResolveSucceedsIfValidAddedValueIsNull() + { + $this->resolver->setDefault('foo', null); + $this->resolver->addAllowedValues('foo', null); + + $this->assertEquals(array('foo' => null), $this->resolver->resolve()); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testResolveFailsIfInvalidAddedValueMultiple() + { + $this->resolver->setDefault('foo', 42); + $this->resolver->addAllowedValues('foo', array('bar', 'baz')); + + $this->resolver->resolve(); + } + + public function testResolveSucceedsIfValidAddedValueMultiple() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->addAllowedValues('foo', array('bar', 'baz')); + + $this->assertEquals(array('foo' => 'bar'), $this->resolver->resolve()); + } + + public function testAddAllowedValuesDoesNotOverwrite() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setAllowedValues('foo', 'bar'); + $this->resolver->addAllowedValues('foo', 'baz'); + + $this->assertEquals(array('foo' => 'bar'), $this->resolver->resolve()); + } + + public function testAddAllowedValuesDoesNotOverwrite2() + { + $this->resolver->setDefault('foo', 'baz'); + $this->resolver->setAllowedValues('foo', 'bar'); + $this->resolver->addAllowedValues('foo', 'baz'); + + $this->assertEquals(array('foo' => 'baz'), $this->resolver->resolve()); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testResolveFailsIfAllAddedClosuresReturnFalse() + { + $this->resolver->setDefault('foo', 42); + $this->resolver->setAllowedValues('foo', function () { return false; }); + $this->resolver->addAllowedValues('foo', function () { return false; }); + + $this->resolver->resolve(); + } + + public function testResolveSucceedsIfAnyAddedClosureReturnsTrue() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setAllowedValues('foo', function () { return false; }); + $this->resolver->addAllowedValues('foo', function () { return true; }); + + $this->assertEquals(array('foo' => 'bar'), $this->resolver->resolve()); + } + + public function testResolveSucceedsIfAnyAddedClosureReturnsTrue2() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setAllowedValues('foo', function () { return true; }); + $this->resolver->addAllowedValues('foo', function () { return false; }); + + $this->assertEquals(array('foo' => 'bar'), $this->resolver->resolve()); + } + + //////////////////////////////////////////////////////////////////////////// + // setNormalizer() + //////////////////////////////////////////////////////////////////////////// + + public function testSetNormalizerReturnsThis() + { + $this->resolver->setDefault('foo', 'bar'); + $this->assertSame($this->resolver, $this->resolver->setNormalizer('foo', function () {})); + } + + public function testSetNormalizerClosure() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setNormalizer('foo', function () { + return 'normalized'; + }); + + $this->assertEquals(array('foo' => 'normalized'), $this->resolver->resolve()); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException + */ + public function testSetNormalizerFailsIfUnknownOption() + { + $this->resolver->setNormalizer('foo', function () {}); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException + */ + public function testFailIfSetNormalizerFromLazyOption() + { + $this->resolver->setDefault('foo', function (Options $options) { + $options->setNormalizer('foo', function () {}); + }); + + $this->resolver->setDefault('bar', 'baz'); + + $this->resolver->resolve(); + } + + public function testNormalizerReceivesSetOption() + { + $this->resolver->setDefault('foo', 'bar'); + + $this->resolver->setNormalizer('foo', function (Options $options, $value) { + return 'normalized['.$value.']'; + }); + + $this->assertEquals(array('foo' => 'normalized[bar]'), $this->resolver->resolve()); + } + + public function testNormalizerReceivesPassedOption() + { + $this->resolver->setDefault('foo', 'bar'); + + $this->resolver->setNormalizer('foo', function (Options $options, $value) { + return 'normalized['.$value.']'; + }); + + $resolved = $this->resolver->resolve(array('foo' => 'baz')); + + $this->assertEquals(array('foo' => 'normalized[baz]'), $resolved); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testValidateTypeBeforeNormalization() + { + $this->resolver->setDefault('foo', 'bar'); + + $this->resolver->setAllowedTypes('foo', 'int'); + + $this->resolver->setNormalizer('foo', function () { + Assert::fail('Should not be called.'); + }); + + $this->resolver->resolve(); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\InvalidOptionsException + */ + public function testValidateValueBeforeNormalization() + { + $this->resolver->setDefault('foo', 'bar'); + + $this->resolver->setAllowedValues('foo', 'baz'); + + $this->resolver->setNormalizer('foo', function () { + Assert::fail('Should not be called.'); + }); + + $this->resolver->resolve(); + } + + public function testNormalizerCanAccessOtherOptions() + { + $this->resolver->setDefault('default', 'bar'); + $this->resolver->setDefault('norm', 'baz'); + + $this->resolver->setNormalizer('norm', function (Options $options) { + /* @var TestCase $test */ + Assert::assertSame('bar', $options['default']); + + return 'normalized'; + }); + + $this->assertEquals(array( + 'default' => 'bar', + 'norm' => 'normalized', + ), $this->resolver->resolve()); + } + + public function testNormalizerCanAccessLazyOptions() + { + $this->resolver->setDefault('lazy', function (Options $options) { + return 'bar'; + }); + $this->resolver->setDefault('norm', 'baz'); + + $this->resolver->setNormalizer('norm', function (Options $options) { + /* @var TestCase $test */ + Assert::assertEquals('bar', $options['lazy']); + + return 'normalized'; + }); + + $this->assertEquals(array( + 'lazy' => 'bar', + 'norm' => 'normalized', + ), $this->resolver->resolve()); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\OptionDefinitionException + */ + public function testFailIfCyclicDependencyBetweenNormalizers() + { + $this->resolver->setDefault('norm1', 'bar'); + $this->resolver->setDefault('norm2', 'baz'); + + $this->resolver->setNormalizer('norm1', function (Options $options) { + $options['norm2']; + }); + + $this->resolver->setNormalizer('norm2', function (Options $options) { + $options['norm1']; + }); + + $this->resolver->resolve(); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\OptionDefinitionException + */ + public function testFailIfCyclicDependencyBetweenNormalizerAndLazyOption() + { + $this->resolver->setDefault('lazy', function (Options $options) { + $options['norm']; + }); + + $this->resolver->setDefault('norm', 'baz'); + + $this->resolver->setNormalizer('norm', function (Options $options) { + $options['lazy']; + }); + + $this->resolver->resolve(); + } + + public function testCaughtExceptionFromNormalizerDoesNotCrashOptionResolver() + { + $throw = true; + + $this->resolver->setDefaults(array('catcher' => null, 'thrower' => null)); + + $this->resolver->setNormalizer('catcher', function (Options $options) { + try { + return $options['thrower']; + } catch (\Exception $e) { + return false; + } + }); + + $this->resolver->setNormalizer('thrower', function () use (&$throw) { + if ($throw) { + $throw = false; + throw new \UnexpectedValueException('throwing'); + } + + return true; + }); + + $this->assertSame(array('catcher' => false, 'thrower' => true), $this->resolver->resolve()); + } + + public function testCaughtExceptionFromLazyDoesNotCrashOptionResolver() + { + $throw = true; + + $this->resolver->setDefault('catcher', function (Options $options) { + try { + return $options['thrower']; + } catch (\Exception $e) { + return false; + } + }); + + $this->resolver->setDefault('thrower', function (Options $options) use (&$throw) { + if ($throw) { + $throw = false; + throw new \UnexpectedValueException('throwing'); + } + + return true; + }); + + $this->assertSame(array('catcher' => false, 'thrower' => true), $this->resolver->resolve()); + } + + public function testInvokeEachNormalizerOnlyOnce() + { + $calls = 0; + + $this->resolver->setDefault('norm1', 'bar'); + $this->resolver->setDefault('norm2', 'baz'); + + $this->resolver->setNormalizer('norm1', function ($options) use (&$calls) { + Assert::assertSame(1, ++$calls); + + $options['norm2']; + }); + $this->resolver->setNormalizer('norm2', function () use (&$calls) { + Assert::assertSame(2, ++$calls); + }); + + $this->resolver->resolve(); + + $this->assertSame(2, $calls); + } + + public function testNormalizerNotCalledForUnsetOptions() + { + $this->resolver->setDefined('norm'); + + $this->resolver->setNormalizer('norm', function () { + Assert::fail('Should not be called.'); + }); + + $this->assertEmpty($this->resolver->resolve()); + } + + //////////////////////////////////////////////////////////////////////////// + // setDefaults() + //////////////////////////////////////////////////////////////////////////// + + public function testSetDefaultsReturnsThis() + { + $this->assertSame($this->resolver, $this->resolver->setDefaults(array('foo', 'bar'))); + } + + public function testSetDefaults() + { + $this->resolver->setDefault('one', '1'); + $this->resolver->setDefault('two', 'bar'); + + $this->resolver->setDefaults(array( + 'two' => '2', + 'three' => '3', + )); + + $this->assertEquals(array( + 'one' => '1', + 'two' => '2', + 'three' => '3', + ), $this->resolver->resolve()); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException + */ + public function testFailIfSetDefaultsFromLazyOption() + { + $this->resolver->setDefault('foo', function (Options $options) { + $options->setDefaults(array('two' => '2')); + }); + + $this->resolver->resolve(); + } + + //////////////////////////////////////////////////////////////////////////// + // remove() + //////////////////////////////////////////////////////////////////////////// + + public function testRemoveReturnsThis() + { + $this->resolver->setDefault('foo', 'bar'); + + $this->assertSame($this->resolver, $this->resolver->remove('foo')); + } + + public function testRemoveSingleOption() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setDefault('baz', 'boo'); + $this->resolver->remove('foo'); + + $this->assertSame(array('baz' => 'boo'), $this->resolver->resolve()); + } + + public function testRemoveMultipleOptions() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setDefault('baz', 'boo'); + $this->resolver->setDefault('doo', 'dam'); + + $this->resolver->remove(array('foo', 'doo')); + + $this->assertSame(array('baz' => 'boo'), $this->resolver->resolve()); + } + + public function testRemoveLazyOption() + { + $this->resolver->setDefault('foo', function (Options $options) { + return 'lazy'; + }); + $this->resolver->remove('foo'); + + $this->assertSame(array(), $this->resolver->resolve()); + } + + public function testRemoveNormalizer() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setNormalizer('foo', function (Options $options, $value) { + return 'normalized'; + }); + $this->resolver->remove('foo'); + $this->resolver->setDefault('foo', 'bar'); + + $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve()); + } + + public function testRemoveAllowedTypes() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setAllowedTypes('foo', 'int'); + $this->resolver->remove('foo'); + $this->resolver->setDefault('foo', 'bar'); + + $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve()); + } + + public function testRemoveAllowedValues() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setAllowedValues('foo', array('baz', 'boo')); + $this->resolver->remove('foo'); + $this->resolver->setDefault('foo', 'bar'); + + $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve()); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException + */ + public function testFailIfRemoveFromLazyOption() + { + $this->resolver->setDefault('foo', function (Options $options) { + $options->remove('bar'); + }); + + $this->resolver->setDefault('bar', 'baz'); + + $this->resolver->resolve(); + } + + public function testRemoveUnknownOptionIgnored() + { + $this->assertNotNull($this->resolver->remove('foo')); + } + + //////////////////////////////////////////////////////////////////////////// + // clear() + //////////////////////////////////////////////////////////////////////////// + + public function testClearReturnsThis() + { + $this->assertSame($this->resolver, $this->resolver->clear()); + } + + public function testClearRemovesAllOptions() + { + $this->resolver->setDefault('one', 1); + $this->resolver->setDefault('two', 2); + + $this->resolver->clear(); + + $this->assertEmpty($this->resolver->resolve()); + } + + public function testClearLazyOption() + { + $this->resolver->setDefault('foo', function (Options $options) { + return 'lazy'; + }); + $this->resolver->clear(); + + $this->assertSame(array(), $this->resolver->resolve()); + } + + public function testClearNormalizer() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setNormalizer('foo', function (Options $options, $value) { + return 'normalized'; + }); + $this->resolver->clear(); + $this->resolver->setDefault('foo', 'bar'); + + $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve()); + } + + public function testClearAllowedTypes() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setAllowedTypes('foo', 'int'); + $this->resolver->clear(); + $this->resolver->setDefault('foo', 'bar'); + + $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve()); + } + + public function testClearAllowedValues() + { + $this->resolver->setDefault('foo', 'bar'); + $this->resolver->setAllowedValues('foo', 'baz'); + $this->resolver->clear(); + $this->resolver->setDefault('foo', 'bar'); + + $this->assertSame(array('foo' => 'bar'), $this->resolver->resolve()); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException + */ + public function testFailIfClearFromLazyption() + { + $this->resolver->setDefault('foo', function (Options $options) { + $options->clear(); + }); + + $this->resolver->setDefault('bar', 'baz'); + + $this->resolver->resolve(); + } + + public function testClearOptionAndNormalizer() + { + $this->resolver->setDefault('foo1', 'bar'); + $this->resolver->setNormalizer('foo1', function (Options $options) { + return ''; + }); + $this->resolver->setDefault('foo2', 'bar'); + $this->resolver->setNormalizer('foo2', function (Options $options) { + return ''; + }); + + $this->resolver->clear(); + $this->assertEmpty($this->resolver->resolve()); + } + + //////////////////////////////////////////////////////////////////////////// + // ArrayAccess + //////////////////////////////////////////////////////////////////////////// + + public function testArrayAccess() + { + $this->resolver->setDefault('default1', 0); + $this->resolver->setDefault('default2', 1); + $this->resolver->setRequired('required'); + $this->resolver->setDefined('defined'); + $this->resolver->setDefault('lazy1', function (Options $options) { + return 'lazy'; + }); + + $this->resolver->setDefault('lazy2', function (Options $options) { + Assert::assertTrue(isset($options['default1'])); + Assert::assertTrue(isset($options['default2'])); + Assert::assertTrue(isset($options['required'])); + Assert::assertTrue(isset($options['lazy1'])); + Assert::assertTrue(isset($options['lazy2'])); + Assert::assertFalse(isset($options['defined'])); + + Assert::assertSame(0, $options['default1']); + Assert::assertSame(42, $options['default2']); + Assert::assertSame('value', $options['required']); + Assert::assertSame('lazy', $options['lazy1']); + + // Obviously $options['lazy'] and $options['defined'] cannot be + // accessed + }); + + $this->resolver->resolve(array('default2' => 42, 'required' => 'value')); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException + */ + public function testArrayAccessGetFailsOutsideResolve() + { + $this->resolver->setDefault('default', 0); + + $this->resolver['default']; + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException + */ + public function testArrayAccessExistsFailsOutsideResolve() + { + $this->resolver->setDefault('default', 0); + + isset($this->resolver['default']); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException + */ + public function testArrayAccessSetNotSupported() + { + $this->resolver['default'] = 0; + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException + */ + public function testArrayAccessUnsetNotSupported() + { + $this->resolver->setDefault('default', 0); + + unset($this->resolver['default']); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\NoSuchOptionException + * @expectedExceptionMessage The option "undefined" does not exist. Defined options are: "foo", "lazy". + */ + public function testFailIfGetNonExisting() + { + $this->resolver->setDefault('foo', 'bar'); + + $this->resolver->setDefault('lazy', function (Options $options) { + $options['undefined']; + }); + + $this->resolver->resolve(); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\NoSuchOptionException + * @expectedExceptionMessage The optional option "defined" has no value set. You should make sure it is set with "isset" before reading it. + */ + public function testFailIfGetDefinedButUnset() + { + $this->resolver->setDefined('defined'); + + $this->resolver->setDefault('lazy', function (Options $options) { + $options['defined']; + }); + + $this->resolver->resolve(); + } + + /** + * @expectedException \Symfony\Component\OptionsResolver\Exception\OptionDefinitionException + */ + public function testFailIfCyclicDependency() + { + $this->resolver->setDefault('lazy1', function (Options $options) { + $options['lazy2']; + }); + + $this->resolver->setDefault('lazy2', function (Options $options) { + $options['lazy1']; + }); + + $this->resolver->resolve(); + } + + //////////////////////////////////////////////////////////////////////////// + // Countable + //////////////////////////////////////////////////////////////////////////// + + public function testCount() + { + $this->resolver->setDefault('default', 0); + $this->resolver->setRequired('required'); + $this->resolver->setDefined('defined'); + $this->resolver->setDefault('lazy1', function () {}); + + $this->resolver->setDefault('lazy2', function (Options $options) { + Assert::assertCount(4, $options); + }); + + $this->assertCount(4, $this->resolver->resolve(array('required' => 'value'))); + } + + /** + * In resolve() we count the options that are actually set (which may be + * only a subset of the defined options). Outside of resolve(), it's not + * clear what is counted. + * + * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException + */ + public function testCountFailsOutsideResolve() + { + $this->resolver->setDefault('foo', 0); + $this->resolver->setRequired('bar'); + $this->resolver->setDefined('bar'); + $this->resolver->setDefault('lazy1', function () {}); + + count($this->resolver); + } +} diff --git a/vendor/symfony/options-resolver/composer.json b/vendor/symfony/options-resolver/composer.json new file mode 100644 index 000000000..a751730af --- /dev/null +++ b/vendor/symfony/options-resolver/composer.json @@ -0,0 +1,33 @@ +{ + "name": "symfony/options-resolver", + "type": "library", + "description": "Symfony OptionsResolver Component", + "keywords": ["options", "config", "configuration"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=5.5.9" + }, + "autoload": { + "psr-4": { "Symfony\\Component\\OptionsResolver\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + } +} diff --git a/vendor/symfony/options-resolver/phpunit.xml.dist b/vendor/symfony/options-resolver/phpunit.xml.dist new file mode 100644 index 000000000..7e04e6049 --- /dev/null +++ b/vendor/symfony/options-resolver/phpunit.xml.dist @@ -0,0 +1,31 @@ + + + + + + + + + + ./Tests/ + + + + + + ./ + + ./Resources + ./Tests + ./vendor + + + + diff --git a/vendor/topthink/think-captcha/.gitignore b/vendor/topthink/think-captcha/.gitignore new file mode 100644 index 000000000..85d49cb86 --- /dev/null +++ b/vendor/topthink/think-captcha/.gitignore @@ -0,0 +1,3 @@ +/vendor/ +/composer.lock +.idea \ No newline at end of file diff --git a/vendor/topthink/think-captcha/LICENSE b/vendor/topthink/think-captcha/LICENSE new file mode 100644 index 000000000..835ce60c8 --- /dev/null +++ b/vendor/topthink/think-captcha/LICENSE @@ -0,0 +1,32 @@ + +ThinkPHP遵循Apache2开源协议发布,并提供免费使用。 +版权所有Copyright © 2006-2016 by ThinkPHP (http://thinkphp.cn) +All rights reserved。 +ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。 + +Apache Licence是著名的非盈利开源组织Apache采用的协议。 +该协议和BSD类似,鼓励代码共享和尊重原作者的著作权, +允许代码修改,再作为开源或商业软件发布。需要满足 +的条件: +1. 需要给代码的用户一份Apache Licence ; +2. 如果你修改了代码,需要在被修改的文件中说明; +3. 在延伸的代码中(修改和有源代码衍生的代码中)需要 +带有原来代码中的协议,商标,专利声明和其他原来作者规 +定需要包含的说明; +4. 如果再发布的产品中包含一个Notice文件,则在Notice文 +件中需要带有本协议内容。你可以在Notice中增加自己的 +许可,但不可以表现为对Apache Licence构成更改。 +具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0 + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/topthink/think-captcha/README.md b/vendor/topthink/think-captcha/README.md new file mode 100644 index 000000000..4a6c25c91 --- /dev/null +++ b/vendor/topthink/think-captcha/README.md @@ -0,0 +1,33 @@ +# think-captcha +thinkphp5.1 验证码类库 + +## 安装 +> composer require topthink/think-captcha + + +##使用 + +###模板里输出验证码 + +~~~ +
    {:captcha_img()}
    +~~~ +或者 +~~~ +
    captcha
    +~~~ +> 上面两种的最终效果是一样的 + +### 控制器里验证 +使用TP5的内置验证功能即可 +~~~ +$this->validate($data,[ + 'captcha|验证码'=>'require|captcha' +]); +~~~ +或者手动验证 +~~~ +if(!captcha_check($captcha)){ + //验证失败 +}; +~~~ \ No newline at end of file diff --git a/vendor/topthink/think-captcha/assets/bgs/1.jpg b/vendor/topthink/think-captcha/assets/bgs/1.jpg new file mode 100644 index 000000000..d417136bb Binary files /dev/null and b/vendor/topthink/think-captcha/assets/bgs/1.jpg differ diff --git a/vendor/topthink/think-captcha/assets/bgs/2.jpg b/vendor/topthink/think-captcha/assets/bgs/2.jpg new file mode 100644 index 000000000..56640bde4 Binary files /dev/null and b/vendor/topthink/think-captcha/assets/bgs/2.jpg differ diff --git a/vendor/topthink/think-captcha/assets/bgs/3.jpg b/vendor/topthink/think-captcha/assets/bgs/3.jpg new file mode 100644 index 000000000..83e5bd902 Binary files /dev/null and b/vendor/topthink/think-captcha/assets/bgs/3.jpg differ diff --git a/vendor/topthink/think-captcha/assets/bgs/4.jpg b/vendor/topthink/think-captcha/assets/bgs/4.jpg new file mode 100644 index 000000000..97a3721bc Binary files /dev/null and b/vendor/topthink/think-captcha/assets/bgs/4.jpg differ diff --git a/vendor/topthink/think-captcha/assets/bgs/5.jpg b/vendor/topthink/think-captcha/assets/bgs/5.jpg new file mode 100644 index 000000000..220a17a22 Binary files /dev/null and b/vendor/topthink/think-captcha/assets/bgs/5.jpg differ diff --git a/vendor/topthink/think-captcha/assets/bgs/6.jpg b/vendor/topthink/think-captcha/assets/bgs/6.jpg new file mode 100644 index 000000000..be53ea0a2 Binary files /dev/null and b/vendor/topthink/think-captcha/assets/bgs/6.jpg differ diff --git a/vendor/topthink/think-captcha/assets/bgs/7.jpg b/vendor/topthink/think-captcha/assets/bgs/7.jpg new file mode 100644 index 000000000..fbf537fab Binary files /dev/null and b/vendor/topthink/think-captcha/assets/bgs/7.jpg differ diff --git a/vendor/topthink/think-captcha/assets/bgs/8.jpg b/vendor/topthink/think-captcha/assets/bgs/8.jpg new file mode 100644 index 000000000..e10cf2811 Binary files /dev/null and b/vendor/topthink/think-captcha/assets/bgs/8.jpg differ diff --git a/vendor/topthink/think-captcha/assets/ttfs/1.ttf b/vendor/topthink/think-captcha/assets/ttfs/1.ttf new file mode 100644 index 000000000..d4ee15587 Binary files /dev/null and b/vendor/topthink/think-captcha/assets/ttfs/1.ttf differ diff --git a/vendor/topthink/think-captcha/assets/ttfs/2.ttf b/vendor/topthink/think-captcha/assets/ttfs/2.ttf new file mode 100644 index 000000000..3a452b68f Binary files /dev/null and b/vendor/topthink/think-captcha/assets/ttfs/2.ttf differ diff --git a/vendor/topthink/think-captcha/assets/ttfs/3.ttf b/vendor/topthink/think-captcha/assets/ttfs/3.ttf new file mode 100644 index 000000000..d07a4d930 Binary files /dev/null and b/vendor/topthink/think-captcha/assets/ttfs/3.ttf differ diff --git a/vendor/topthink/think-captcha/assets/ttfs/4.ttf b/vendor/topthink/think-captcha/assets/ttfs/4.ttf new file mode 100644 index 000000000..54a14ed1c Binary files /dev/null and b/vendor/topthink/think-captcha/assets/ttfs/4.ttf differ diff --git a/vendor/topthink/think-captcha/assets/ttfs/5.ttf b/vendor/topthink/think-captcha/assets/ttfs/5.ttf new file mode 100644 index 000000000..d672876df Binary files /dev/null and b/vendor/topthink/think-captcha/assets/ttfs/5.ttf differ diff --git a/vendor/topthink/think-captcha/assets/ttfs/6.ttf b/vendor/topthink/think-captcha/assets/ttfs/6.ttf new file mode 100644 index 000000000..7f183e208 Binary files /dev/null and b/vendor/topthink/think-captcha/assets/ttfs/6.ttf differ diff --git a/vendor/topthink/think-captcha/assets/zhttfs/1.ttf b/vendor/topthink/think-captcha/assets/zhttfs/1.ttf new file mode 100644 index 000000000..1c14f7fab Binary files /dev/null and b/vendor/topthink/think-captcha/assets/zhttfs/1.ttf differ diff --git a/vendor/topthink/think-captcha/composer.json b/vendor/topthink/think-captcha/composer.json new file mode 100644 index 000000000..d5350d4ee --- /dev/null +++ b/vendor/topthink/think-captcha/composer.json @@ -0,0 +1,22 @@ +{ + "name": "topthink/think-captcha", + "description": "captcha package for thinkphp5", + "authors": [ + { + "name": "yunwuxin", + "email": "448901948@qq.com" + } + ], + "license": "Apache-2.0", + "require": { + "topthink/framework": "5.1.*" + }, + "autoload": { + "psr-4": { + "think\\captcha\\": "src/" + }, + "files": [ + "src/helper.php" + ] + } +} diff --git a/vendor/topthink/think-captcha/src/Captcha.php b/vendor/topthink/think-captcha/src/Captcha.php new file mode 100644 index 000000000..29f9dad5a --- /dev/null +++ b/vendor/topthink/think-captcha/src/Captcha.php @@ -0,0 +1,320 @@ + +// +---------------------------------------------------------------------- + +namespace think\captcha; + +use think\facade\Session; + +class Captcha +{ + protected $config = [ + 'seKey' => 'ThinkPHP.CN', + // 验证码加密密钥 + 'codeSet' => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY', + // 验证码字符集合 + 'expire' => 1800, + // 验证码过期时间(s) + 'useZh' => false, + // 使用中文验证码 + 'zhSet' => '们以我到他会作时要动国产的一是工就年阶义发成部民可出能方进在了不和有大这主中人上为来分生对于学下级地个用同行面说种过命度革而多子后自社加小机也经力线本电高量长党得实家定深法表着水理化争现所二起政三好十战无农使性前等反体合斗路图把结第里正新开论之物从当两些还天资事队批点育重其思与间内去因件日利相由压员气业代全组数果期导平各基或月毛然如应形想制心样干都向变关问比展那它最及外没看治提五解系林者米群头意只明四道马认次文通但条较克又公孔领军流入接席位情运器并飞原油放立题质指建区验活众很教决特此常石强极土少已根共直团统式转别造切九你取西持总料连任志观调七么山程百报更见必真保热委手改管处己将修支识病象几先老光专什六型具示复安带每东增则完风回南广劳轮科北打积车计给节做务被整联步类集号列温装即毫知轴研单色坚据速防史拉世设达尔场织历花受求传口断况采精金界品判参层止边清至万确究书术状厂须离再目海交权且儿青才证低越际八试规斯近注办布门铁需走议县兵固除般引齿千胜细影济白格效置推空配刀叶率述今选养德话查差半敌始片施响收华觉备名红续均药标记难存测士身紧液派准斤角降维板许破述技消底床田势端感往神便贺村构照容非搞亚磨族火段算适讲按值美态黄易彪服早班麦削信排台声该击素张密害侯草何树肥继右属市严径螺检左页抗苏显苦英快称坏移约巴材省黑武培著河帝仅针怎植京助升王眼她抓含苗副杂普谈围食射源例致酸旧却充足短划剂宣环落首尺波承粉践府鱼随考刻靠够满夫失包住促枝局菌杆周护岩师举曲春元超负砂封换太模贫减阳扬江析亩木言球朝医校古呢稻宋听唯输滑站另卫字鼓刚写刘微略范供阿块某功套友限项余倒卷创律雨让骨远帮初皮播优占死毒圈伟季训控激找叫云互跟裂粮粒母练塞钢顶策双留误础吸阻故寸盾晚丝女散焊功株亲院冷彻弹错散商视艺灭版烈零室轻血倍缺厘泵察绝富城冲喷壤简否柱李望盘磁雄似困巩益洲脱投送奴侧润盖挥距触星松送获兴独官混纪依未突架宽冬章湿偏纹吃执阀矿寨责熟稳夺硬价努翻奇甲预职评读背协损棉侵灰虽矛厚罗泥辟告卵箱掌氧恩爱停曾溶营终纲孟钱待尽俄缩沙退陈讨奋械载胞幼哪剥迫旋征槽倒握担仍呀鲜吧卡粗介钻逐弱脚怕盐末阴丰雾冠丙街莱贝辐肠付吉渗瑞惊顿挤秒悬姆烂森糖圣凹陶词迟蚕亿矩康遵牧遭幅园腔订香肉弟屋敏恢忘编印蜂急拿扩伤飞露核缘游振操央伍域甚迅辉异序免纸夜乡久隶缸夹念兰映沟乙吗儒杀汽磷艰晶插埃燃欢铁补咱芽永瓦倾阵碳演威附牙芽永瓦斜灌欧献顺猪洋腐请透司危括脉宜笑若尾束壮暴企菜穗楚汉愈绿拖牛份染既秋遍锻玉夏疗尖殖井费州访吹荣铜沿替滚客召旱悟刺脑措贯藏敢令隙炉壳硫煤迎铸粘探临薄旬善福纵择礼愿伏残雷延烟句纯渐耕跑泽慢栽鲁赤繁境潮横掉锥希池败船假亮谓托伙哲怀割摆贡呈劲财仪沉炼麻罪祖息车穿货销齐鼠抽画饲龙库守筑房歌寒喜哥洗蚀废纳腹乎录镜妇恶脂庄擦险赞钟摇典柄辩竹谷卖乱虚桥奥伯赶垂途额壁网截野遗静谋弄挂课镇妄盛耐援扎虑键归符庆聚绕摩忙舞遇索顾胶羊湖钉仁音迹碎伸灯避泛亡答勇频皇柳哈揭甘诺概宪浓岛袭谁洪谢炮浇斑讯懂灵蛋闭孩释乳巨徒私银伊景坦累匀霉杜乐勒隔弯绩招绍胡呼痛峰零柴簧午跳居尚丁秦稍追梁折耗碱殊岗挖氏刃剧堆赫荷胸衡勤膜篇登驻案刊秧缓凸役剪川雪链渔啦脸户洛孢勃盟买杨宗焦赛旗滤硅炭股坐蒸凝竟陷枪黎救冒暗洞犯筒您宋弧爆谬涂味津臂障褐陆啊健尊豆拔莫抵桑坡缝警挑污冰柬嘴啥饭塑寄赵喊垫丹渡耳刨虎笔稀昆浪萨茶滴浅拥穴覆伦娘吨浸袖珠雌妈紫戏塔锤震岁貌洁剖牢锋疑霸闪埔猛诉刷狠忽灾闹乔唐漏闻沈熔氯荒茎男凡抢像浆旁玻亦忠唱蒙予纷捕锁尤乘乌智淡允叛畜俘摸锈扫毕璃宝芯爷鉴秘净蒋钙肩腾枯抛轨堂拌爸循诱祝励肯酒绳穷塘燥泡袋朗喂铝软渠颗惯贸粪综墙趋彼届墨碍启逆卸航衣孙龄岭骗休借', + // 中文验证码字符串 + 'useImgBg' => false, + // 使用背景图片 + 'fontSize' => 25, + // 验证码字体大小(px) + 'useCurve' => true, + // 是否画混淆曲线 + 'useNoise' => true, + // 是否添加杂点 + 'imageH' => 0, + // 验证码图片高度 + 'imageW' => 0, + // 验证码图片宽度 + 'length' => 5, + // 验证码位数 + 'fontttf' => '', + // 验证码字体,不设置随机获取 + 'bg' => [243, 251, 254], + // 背景颜色 + 'reset' => true, + // 验证成功后是否重置 + ]; + + private $im = null; // 验证码图片实例 + private $color = null; // 验证码字体颜色 + + /** + * 架构方法 设置参数 + * @access public + * @param array $config 配置参数 + */ + public function __construct($config = []) + { + $this->config = array_merge($this->config, $config); + } + + /** + * 使用 $this->name 获取配置 + * @access public + * @param string $name 配置名称 + * @return mixed 配置值 + */ + public function __get($name) + { + return $this->config[$name]; + } + + /** + * 设置验证码配置 + * @access public + * @param string $name 配置名称 + * @param string $value 配置值 + * @return void + */ + public function __set($name, $value) + { + if (isset($this->config[$name])) { + $this->config[$name] = $value; + } + } + + /** + * 检查配置 + * @access public + * @param string $name 配置名称 + * @return bool + */ + public function __isset($name) + { + return isset($this->config[$name]); + } + + /** + * 验证验证码是否正确 + * @access public + * @param string $code 用户验证码 + * @param string $id 验证码标识 + * @return bool 用户验证码是否正确 + */ + public function check($code, $id = '') + { + $key = $this->authcode($this->seKey) . $id; + // 验证码不能为空 + $secode = Session::get($key, ''); + if (empty($code) || empty($secode)) { + return false; + } + // session 过期 + if (time() - $secode['verify_time'] > $this->expire) { + Session::delete($key, ''); + return false; + } + + if ($this->authcode(strtoupper($code)) == $secode['verify_code']) { + $this->reset && Session::delete($key, ''); + return true; + } + + return false; + } + + /** + * 输出验证码并把验证码的值保存的session中 + * 验证码保存到session的格式为: array('verify_code' => '验证码值', 'verify_time' => '验证码创建时间'); + * @access public + * @param string $id 要生成验证码的标识 + * @return \think\Response + */ + public function entry($id = '') + { + // 图片宽(px) + $this->imageW || $this->imageW = $this->length * $this->fontSize * 1.5 + $this->length * $this->fontSize / 2; + // 图片高(px) + $this->imageH || $this->imageH = $this->fontSize * 2.5; + // 建立一幅 $this->imageW x $this->imageH 的图像 + $this->im = imagecreate($this->imageW, $this->imageH); + // 设置背景 + imagecolorallocate($this->im, $this->bg[0], $this->bg[1], $this->bg[2]); + + // 验证码字体随机颜色 + $this->color = imagecolorallocate($this->im, mt_rand(1, 150), mt_rand(1, 150), mt_rand(1, 150)); + // 验证码使用随机字体 + $ttfPath = __DIR__ . '/../assets/' . ($this->useZh ? 'zhttfs' : 'ttfs') . '/'; + + if (empty($this->fontttf)) { + $dir = dir($ttfPath); + $ttfs = []; + while (false !== ($file = $dir->read())) { + if ('.' != $file[0] && substr($file, -4) == '.ttf') { + $ttfs[] = $file; + } + } + $dir->close(); + $this->fontttf = $ttfs[array_rand($ttfs)]; + } + $this->fontttf = $ttfPath . $this->fontttf; + + if ($this->useImgBg) { + $this->background(); + } + + if ($this->useNoise) { + // 绘杂点 + $this->writeNoise(); + } + if ($this->useCurve) { + // 绘干扰线 + $this->writeCurve(); + } + + // 绘验证码 + $code = []; // 验证码 + $codeNX = 0; // 验证码第N个字符的左边距 + if ($this->useZh) { + // 中文验证码 + for ($i = 0; $i < $this->length; $i++) { + $code[$i] = iconv_substr($this->zhSet, floor(mt_rand(0, mb_strlen($this->zhSet, 'utf-8') - 1)), 1, 'utf-8'); + imagettftext($this->im, $this->fontSize, mt_rand(-40, 40), $this->fontSize * ($i + 1) * 1.5, $this->fontSize + mt_rand(10, 20), $this->color, $this->fontttf, $code[$i]); + } + } else { + for ($i = 0; $i < $this->length; $i++) { + $code[$i] = $this->codeSet[mt_rand(0, strlen($this->codeSet) - 1)]; + $codeNX += mt_rand($this->fontSize * 1.2, $this->fontSize * 1.6); + imagettftext($this->im, $this->fontSize, mt_rand(-40, 40), $codeNX, $this->fontSize * 1.6, $this->color, $this->fontttf, $code[$i]); + } + } + + // 保存验证码 + $key = $this->authcode($this->seKey); + $code = $this->authcode(strtoupper(implode('', $code))); + $secode = []; + $secode['verify_code'] = $code; // 把校验码保存到session + $secode['verify_time'] = time(); // 验证码创建时间 + Session::set($key . $id, $secode, ''); + + ob_start(); + // 输出图像 + imagepng($this->im); + $content = ob_get_clean(); + imagedestroy($this->im); + + return response($content, 200, ['Content-Length' => strlen($content)])->contentType('image/png'); + } + + /** + * 画一条由两条连在一起构成的随机正弦函数曲线作干扰线(你可以改成更帅的曲线函数) + * + * 高中的数学公式咋都忘了涅,写出来 + * 正弦型函数解析式:y=Asin(ωx+φ)+b + * 各常数值对函数图像的影响: + * A:决定峰值(即纵向拉伸压缩的倍数) + * b:表示波形在Y轴的位置关系或纵向移动距离(上加下减) + * φ:决定波形与X轴位置关系或横向移动距离(左加右减) + * ω:决定周期(最小正周期T=2π/∣ω∣) + * + */ + private function writeCurve() + { + $px = $py = 0; + + // 曲线前部分 + $A = mt_rand(1, $this->imageH / 2); // 振幅 + $b = mt_rand(-$this->imageH / 4, $this->imageH / 4); // Y轴方向偏移量 + $f = mt_rand(-$this->imageH / 4, $this->imageH / 4); // X轴方向偏移量 + $T = mt_rand($this->imageH, $this->imageW * 2); // 周期 + $w = (2 * M_PI) / $T; + + $px1 = 0; // 曲线横坐标起始位置 + $px2 = mt_rand($this->imageW / 2, $this->imageW * 0.8); // 曲线横坐标结束位置 + + for ($px = $px1; $px <= $px2; $px = $px + 1) { + if (0 != $w) { + $py = $A * sin($w * $px + $f) + $b + $this->imageH / 2; // y = Asin(ωx+φ) + b + $i = (int) ($this->fontSize / 5); + while ($i > 0) { + imagesetpixel($this->im, $px + $i, $py + $i, $this->color); // 这里(while)循环画像素点比imagettftext和imagestring用字体大小一次画出(不用这while循环)性能要好很多 + $i--; + } + } + } + + // 曲线后部分 + $A = mt_rand(1, $this->imageH / 2); // 振幅 + $f = mt_rand(-$this->imageH / 4, $this->imageH / 4); // X轴方向偏移量 + $T = mt_rand($this->imageH, $this->imageW * 2); // 周期 + $w = (2 * M_PI) / $T; + $b = $py - $A * sin($w * $px + $f) - $this->imageH / 2; + $px1 = $px2; + $px2 = $this->imageW; + + for ($px = $px1; $px <= $px2; $px = $px + 1) { + if (0 != $w) { + $py = $A * sin($w * $px + $f) + $b + $this->imageH / 2; // y = Asin(ωx+φ) + b + $i = (int) ($this->fontSize / 5); + while ($i > 0) { + imagesetpixel($this->im, $px + $i, $py + $i, $this->color); + $i--; + } + } + } + } + + /** + * 画杂点 + * 往图片上写不同颜色的字母或数字 + */ + private function writeNoise() + { + $codeSet = '2345678abcdefhijkmnpqrstuvwxyz'; + for ($i = 0; $i < 10; $i++) { + //杂点颜色 + $noiseColor = imagecolorallocate($this->im, mt_rand(150, 225), mt_rand(150, 225), mt_rand(150, 225)); + for ($j = 0; $j < 5; $j++) { + // 绘杂点 + imagestring($this->im, 5, mt_rand(-10, $this->imageW), mt_rand(-10, $this->imageH), $codeSet[mt_rand(0, 29)], $noiseColor); + } + } + } + + /** + * 绘制背景图片 + * 注:如果验证码输出图片比较大,将占用比较多的系统资源 + */ + private function background() + { + $path = __DIR__ . '/../assets/bgs/'; + $dir = dir($path); + + $bgs = []; + while (false !== ($file = $dir->read())) { + if ('.' != $file[0] && substr($file, -4) == '.jpg') { + $bgs[] = $path . $file; + } + } + $dir->close(); + + $gb = $bgs[array_rand($bgs)]; + + list($width, $height) = @getimagesize($gb); + // Resample + $bgImage = @imagecreatefromjpeg($gb); + @imagecopyresampled($this->im, $bgImage, 0, 0, 0, 0, $this->imageW, $this->imageH, $width, $height); + @imagedestroy($bgImage); + } + + /* 加密验证码 */ + private function authcode($str) + { + $key = substr(md5($this->seKey), 5, 8); + $str = substr(md5($str), 8, 10); + return md5($key . $str); + } +} diff --git a/vendor/topthink/think-captcha/src/CaptchaController.php b/vendor/topthink/think-captcha/src/CaptchaController.php new file mode 100644 index 000000000..572039240 --- /dev/null +++ b/vendor/topthink/think-captcha/src/CaptchaController.php @@ -0,0 +1,23 @@ + +// +---------------------------------------------------------------------- + +namespace think\captcha; + +use think\facade\Config; + +class CaptchaController +{ + public function index($id = "") + { + $captcha = new Captcha((array) Config::pull('captcha')); + return $captcha->entry($id); + } +} diff --git a/vendor/topthink/think-captcha/src/helper.php b/vendor/topthink/think-captcha/src/helper.php new file mode 100644 index 000000000..7dd3cfb9a --- /dev/null +++ b/vendor/topthink/think-captcha/src/helper.php @@ -0,0 +1,59 @@ + +// +---------------------------------------------------------------------- + +Route::get('captcha/[:id]', "\\think\\captcha\\CaptchaController@index"); + +Validate::extend('captcha', function ($value, $id = '') { + return captcha_check($value, $id); +}); + +Validate::setTypeMsg('captcha', ':attribute错误!'); + +/** + * @param string $id + * @param array $config + * @return \think\Response + */ +function captcha($id = '', $config = []) +{ + $captcha = new \think\captcha\Captcha($config); + return $captcha->entry($id); +} + +/** + * @param $id + * @return string + */ +function captcha_src($id = '') +{ + return Url::build('/captcha' . ($id ? "/{$id}" : '')); +} + +/** + * @param $id + * @return mixed + */ +function captcha_img($id = '') +{ + return 'captcha'; +} + +/** + * @param $value + * @param string $id + * @param array $config + * @return bool + */ +function captcha_check($value, $id = '') +{ + $captcha = new \think\captcha\Captcha((array) Config::pull('captcha')); + return $captcha->check($value, $id); +} diff --git a/vendor/topthink/think-installer/.gitignore b/vendor/topthink/think-installer/.gitignore new file mode 100644 index 000000000..8f4c02d44 --- /dev/null +++ b/vendor/topthink/think-installer/.gitignore @@ -0,0 +1,3 @@ +/.idea +composer.lock +/vendor \ No newline at end of file diff --git a/vendor/topthink/think-installer/composer.json b/vendor/topthink/think-installer/composer.json new file mode 100644 index 000000000..4005de224 --- /dev/null +++ b/vendor/topthink/think-installer/composer.json @@ -0,0 +1,25 @@ +{ + "name": "topthink/think-installer", + "type": "composer-plugin", + "require": { + "composer-plugin-api": "^1.0" + }, + "require-dev": { + "composer/composer": "1.0.*@dev" + }, + "license": "Apache-2.0", + "authors": [ + { + "name": "yunwuxin", + "email": "448901948@qq.com" + } + ], + "autoload": { + "psr-4": { + "think\\composer\\": "src" + } + }, + "extra": { + "class": "think\\composer\\Plugin" + } +} diff --git a/vendor/topthink/think-installer/src/Plugin.php b/vendor/topthink/think-installer/src/Plugin.php new file mode 100644 index 000000000..757c30fff --- /dev/null +++ b/vendor/topthink/think-installer/src/Plugin.php @@ -0,0 +1,26 @@ +getInstallationManager(); + + //框架核心 + $manager->addInstaller(new ThinkFramework($io, $composer)); + + //单元测试 + $manager->addInstaller(new ThinkTesting($io, $composer)); + + //扩展 + $manager->addInstaller(new ThinkExtend($io, $composer)); + + } +} \ No newline at end of file diff --git a/vendor/topthink/think-installer/src/ThinkExtend.php b/vendor/topthink/think-installer/src/ThinkExtend.php new file mode 100644 index 000000000..d78f11845 --- /dev/null +++ b/vendor/topthink/think-installer/src/ThinkExtend.php @@ -0,0 +1,77 @@ + +// +---------------------------------------------------------------------- + +namespace think\composer; + +use Composer\Installer\LibraryInstaller; +use Composer\Package\PackageInterface; +use Composer\Repository\InstalledRepositoryInterface; + +class ThinkExtend extends LibraryInstaller +{ + + public function install(InstalledRepositoryInterface $repo, PackageInterface $package) + { + parent::install($repo, $package); + $this->copyExtraFiles($package); + } + + public function update(InstalledRepositoryInterface $repo, PackageInterface $initial, PackageInterface $target) + { + parent::update($repo, $initial, $target); + $this->copyExtraFiles($target); + + } + + protected function copyExtraFiles(PackageInterface $package) + { + if ($this->composer->getPackage()->getType() == 'project') { + + $extra = $package->getExtra(); + + if (!empty($extra['think-config'])) { + + $composerExtra = $this->composer->getPackage()->getExtra(); + + $appDir = !empty($composerExtra['app-path']) ? $composerExtra['app-path'] : 'application'; + + if (is_dir($appDir)) { + + $extraDir = $appDir . DIRECTORY_SEPARATOR . 'extra'; + $this->filesystem->ensureDirectoryExists($extraDir); + + //配置文件 + foreach ((array) $extra['think-config'] as $name => $config) { + $target = $extraDir . DIRECTORY_SEPARATOR . $name . '.php'; + $source = $this->getInstallPath($package) . DIRECTORY_SEPARATOR . $config; + + if (is_file($target)) { + $this->io->write("File {$target} exist!"); + continue; + } + + if (!is_file($source)) { + $this->io->write("File {$target} not exist!"); + continue; + } + + copy($source, $target); + } + } + } + } + } + + public function supports($packageType) + { + return 'think-extend' === $packageType; + } +} \ No newline at end of file diff --git a/vendor/topthink/think-installer/src/ThinkFramework.php b/vendor/topthink/think-installer/src/ThinkFramework.php new file mode 100644 index 000000000..cdb7d8434 --- /dev/null +++ b/vendor/topthink/think-installer/src/ThinkFramework.php @@ -0,0 +1,59 @@ +composer->getPackage()->getType() == 'project' && $package->getInstallationSource() != 'source') { + //remove tests dir + $this->filesystem->removeDirectory($this->getInstallPath($package) . DIRECTORY_SEPARATOR . 'tests'); + } + } + + /** + * {@inheritDoc} + */ + public function getInstallPath(PackageInterface $package) + { + if ('topthink/framework' !== $package->getPrettyName()) { + throw new \InvalidArgumentException('Unable to install this library!'); + } + + if ($this->composer->getPackage()->getType() !== 'project') { + return parent::getInstallPath($package); + } + + if ($this->composer->getPackage()) { + $extra = $this->composer->getPackage()->getExtra(); + if (!empty($extra['think-path'])) { + return $extra['think-path']; + } + } + + return 'thinkphp'; + } + + public function update(InstalledRepositoryInterface $repo, PackageInterface $initial, PackageInterface $target) + { + parent::update($repo, $initial, $target); + if ($this->composer->getPackage()->getType() == 'project' && $target->getInstallationSource() != 'source') { + //remove tests dir + $this->filesystem->removeDirectory($this->getInstallPath($target) . DIRECTORY_SEPARATOR . 'tests'); + } + } + + /** + * {@inheritDoc} + */ + public function supports($packageType) + { + return 'think-framework' === $packageType; + } +} \ No newline at end of file diff --git a/vendor/topthink/think-installer/src/ThinkTesting.php b/vendor/topthink/think-installer/src/ThinkTesting.php new file mode 100644 index 000000000..bf27f7276 --- /dev/null +++ b/vendor/topthink/think-installer/src/ThinkTesting.php @@ -0,0 +1,68 @@ + +// +---------------------------------------------------------------------- + +namespace think\composer; + + +use Composer\Installer\LibraryInstaller; +use Composer\Package\PackageInterface; +use Composer\Repository\InstalledRepositoryInterface; + +class ThinkTesting extends LibraryInstaller +{ + /** + * {@inheritDoc} + */ + public function getInstallPath(PackageInterface $package) + { + if ('topthink/think-testing' !== $package->getPrettyName()) { + throw new \InvalidArgumentException('Unable to install this library!'); + } + + return parent::getInstallPath($package); + } + + public function install(InstalledRepositoryInterface $repo, PackageInterface $package) + { + parent::install($repo, $package); + + $this->copyTestDir($package); + + + } + + public function update(InstalledRepositoryInterface $repo, PackageInterface $initial, PackageInterface $target) + { + parent::update($repo, $initial, $target); + + $this->copyTestDir($target); + + } + + private function copyTestDir(PackageInterface $package) + { + $appDir = dirname($this->vendorDir); + $source = $this->getInstallPath($package) . DIRECTORY_SEPARATOR . 'example'; + if (!is_file($appDir . DIRECTORY_SEPARATOR . 'phpunit.xml')) { + $this->filesystem->copyThenRemove($source, $appDir); + } else { + $this->filesystem->removeDirectoryPhp($source); + } + } + + /** + * {@inheritDoc} + */ + public function supports($packageType) + { + return 'think-testing' === $packageType; + } +} \ No newline at end of file diff --git a/vendor/zoujingli/ip2region/Ip2Region.php b/vendor/zoujingli/ip2region/Ip2Region.php new file mode 100644 index 000000000..2167040cc --- /dev/null +++ b/vendor/zoujingli/ip2region/Ip2Region.php @@ -0,0 +1,361 @@ + + * @date 2015-10-29 +*/ + +defined('INDEX_BLOCK_LENGTH') or define('INDEX_BLOCK_LENGTH', 12); +defined('TOTAL_HEADER_LENGTH') or define('TOTAL_HEADER_LENGTH', 8192); + +class Ip2Region +{ + /** + * db file handler + */ + private $dbFileHandler = NULL; + + /** + * header block info + */ + private $HeaderSip = NULL; + private $HeaderPtr = NULL; + private $headerLen = 0; + + /** + * super block index info + */ + private $firstIndexPtr = 0; + private $lastIndexPtr = 0; + private $totalBlocks = 0; + + /** + * for memory mode only + * the original db binary string + */ + private $dbBinStr = NULL; + private $dbFile = NULL; + + /** + * construct method + * + * @param ip2regionFile + */ + public function __construct($ip2regionFile = null) + { + $this->dbFile = is_null($ip2regionFile) ? __DIR__ . '/ip2region.db' : $ip2regionFile; + } + + /** + * all the db binary string will be loaded into memory + * then search the memory only and this will a lot faster than disk base search + * @Note: + * invoke it once before put it to public invoke could make it thread safe + * + * @param $ip + */ + public function memorySearch($ip) + { + //check and load the binary string for the first time + if ( $this->dbBinStr == NULL ) { + $this->dbBinStr = file_get_contents($this->dbFile); + if ( $this->dbBinStr == false ) { + throw new Exception("Fail to open the db file {$this->dbFile}"); + } + + $this->firstIndexPtr = self::getLong($this->dbBinStr, 0); + $this->lastIndexPtr = self::getLong($this->dbBinStr, 4); + $this->totalBlocks = ($this->lastIndexPtr-$this->firstIndexPtr)/INDEX_BLOCK_LENGTH + 1; + } + + if ( is_string($ip) ) $ip = self::safeIp2long($ip); + + //binary search to define the data + $l = 0; + $h = $this->totalBlocks; + $dataPtr = 0; + while ( $l <= $h ) { + $m = (($l + $h) >> 1); + $p = $this->firstIndexPtr + $m * INDEX_BLOCK_LENGTH; + $sip = self::getLong($this->dbBinStr, $p); + if ( $ip < $sip ) { + $h = $m - 1; + } else { + $eip = self::getLong($this->dbBinStr, $p + 4); + if ( $ip > $eip ) { + $l = $m + 1; + } else { + $dataPtr = self::getLong($this->dbBinStr, $p + 8); + break; + } + } + } + + //not matched just stop it here + if ( $dataPtr == 0 ) return NULL; + + //get the data + $dataLen = (($dataPtr >> 24) & 0xFF); + $dataPtr = ($dataPtr & 0x00FFFFFF); + + return array( + 'city_id' => self::getLong($this->dbBinStr, $dataPtr), + 'region' => substr($this->dbBinStr, $dataPtr + 4, $dataLen - 4) + ); + } + + /** + * get the data block throught the specifield ip address or long ip numeric with binary search algorithm + * + * @param ip + * @return mixed Array or NULL for any error + */ + public function binarySearch( $ip ) + { + //check and conver the ip address + if ( is_string($ip) ) $ip = self::safeIp2long($ip); + if ( $this->totalBlocks == 0 ) { + //check and open the original db file + if ( $this->dbFileHandler == NULL ) { + $this->dbFileHandler = fopen($this->dbFile, 'r'); + if ( $this->dbFileHandler == false ) { + throw new Exception("Fail to open the db file {$this->dbFile}"); + } + } + + fseek($this->dbFileHandler, 0); + $superBlock = fread($this->dbFileHandler, 8); + + $this->firstIndexPtr = self::getLong($superBlock, 0); + $this->lastIndexPtr = self::getLong($superBlock, 4); + $this->totalBlocks = ($this->lastIndexPtr-$this->firstIndexPtr)/INDEX_BLOCK_LENGTH + 1; + } + + //binary search to define the data + $l = 0; + $h = $this->totalBlocks; + $dataPtr = 0; + while ( $l <= $h ) { + $m = (($l + $h) >> 1); + $p = $m * INDEX_BLOCK_LENGTH; + + fseek($this->dbFileHandler, $this->firstIndexPtr + $p); + $buffer = fread($this->dbFileHandler, INDEX_BLOCK_LENGTH); + $sip = self::getLong($buffer, 0); + if ( $ip < $sip ) { + $h = $m - 1; + } else { + $eip = self::getLong($buffer, 4); + if ( $ip > $eip ) { + $l = $m + 1; + } else { + $dataPtr = self::getLong($buffer, 8); + break; + } + } + } + + //not matched just stop it here + if ( $dataPtr == 0 ) return NULL; + + + //get the data + $dataLen = (($dataPtr >> 24) & 0xFF); + $dataPtr = ($dataPtr & 0x00FFFFFF); + + fseek($this->dbFileHandler, $dataPtr); + $data = fread($this->dbFileHandler, $dataLen); + + return array( + 'city_id' => self::getLong($data, 0), + 'region' => substr($data, 4) + ); + } + + /** + * get the data block associated with the specifield ip with b-tree search algorithm + * @Note: not thread safe + * + * @param ip + * @return Mixed Array for NULL for any error + */ + public function btreeSearch( $ip ) + { + if ( is_string($ip) ) $ip = self::safeIp2long($ip); + + //check and load the header + if ( $this->HeaderSip == NULL ) { + //check and open the original db file + if ( $this->dbFileHandler == NULL ) { + $this->dbFileHandler = fopen($this->dbFile, 'r'); + if ( $this->dbFileHandler == false ) { + throw new Exception("Fail to open the db file {$this->dbFile}"); + } + } + + fseek($this->dbFileHandler, 8); + $buffer = fread($this->dbFileHandler, TOTAL_HEADER_LENGTH); + + //fill the header + $idx = 0; + $this->HeaderSip = array(); + $this->HeaderPtr = array(); + for ( $i = 0; $i < TOTAL_HEADER_LENGTH; $i += 8 ) { + $startIp = self::getLong($buffer, $i); + $dataPtr = self::getLong($buffer, $i + 4); + if ( $dataPtr == 0 ) break; + + $this->HeaderSip[] = $startIp; + $this->HeaderPtr[] = $dataPtr; + $idx++; + } + + $this->headerLen = $idx; + } + + //1. define the index block with the binary search + $l = 0; $h = $this->headerLen; $sptr = 0; $eptr = 0; + while ( $l <= $h ) { + $m = (($l + $h) >> 1); + + //perfetc matched, just return it + if ( $ip == $this->HeaderSip[$m] ) { + if ( $m > 0 ) { + $sptr = $this->HeaderPtr[$m-1]; + $eptr = $this->HeaderPtr[$m ]; + } else { + $sptr = $this->HeaderPtr[$m ]; + $eptr = $this->HeaderPtr[$m+1]; + } + + break; + } + + //less then the middle value + if ( $ip < $this->HeaderSip[$m] ) { + if ( $m == 0 ) { + $sptr = $this->HeaderPtr[$m ]; + $eptr = $this->HeaderPtr[$m+1]; + break; + } else if ( $ip > $this->HeaderSip[$m-1] ) { + $sptr = $this->HeaderPtr[$m-1]; + $eptr = $this->HeaderPtr[$m ]; + break; + } + $h = $m - 1; + } else { + if ( $m == $this->headerLen - 1 ) { + $sptr = $this->HeaderPtr[$m-1]; + $eptr = $this->HeaderPtr[$m ]; + break; + } else if ( $ip <= $this->HeaderSip[$m+1] ) { + $sptr = $this->HeaderPtr[$m ]; + $eptr = $this->HeaderPtr[$m+1]; + break; + } + $l = $m + 1; + } + } + + //match nothing just stop it + if ( $sptr == 0 ) return NULL; + + //2. search the index blocks to define the data + $blockLen = $eptr - $sptr; + fseek($this->dbFileHandler, $sptr); + $index = fread($this->dbFileHandler, $blockLen + INDEX_BLOCK_LENGTH); + + $dataptr = 0; + $l = 0; $h = $blockLen / INDEX_BLOCK_LENGTH; + while ( $l <= $h ) { + $m = (($l + $h) >> 1); + $p = (int)($m * INDEX_BLOCK_LENGTH); + $sip = self::getLong($index, $p); + if ( $ip < $sip ) { + $h = $m - 1; + } else { + $eip = self::getLong($index, $p + 4); + if ( $ip > $eip ) { + $l = $m + 1; + } else { + $dataptr = self::getLong($index, $p + 8); + break; + } + } + } + + //not matched + if ( $dataptr == 0 ) return NULL; + + //3. get the data + $dataLen = (($dataptr >> 24) & 0xFF); + $dataPtr = ($dataptr & 0x00FFFFFF); + + fseek($this->dbFileHandler, $dataPtr); + $data = fread($this->dbFileHandler, $dataLen); + + return array( + 'city_id' => self::getLong($data, 0), + 'region' => substr($data, 4) + ); + } + + + /** + * safe self::safeIp2long function + * + * @param ip + * */ + public static function safeIp2long($ip) + { + $ip = ip2long($ip); + + // convert signed int to unsigned int if on 32 bit operating system + if ($ip < 0 && PHP_INT_SIZE == 4) { + $ip = sprintf("%u", $ip); + } + + return $ip; + } + + + + /** + * read a long from a byte buffer + * + * @param b + * @param offset + */ + public static function getLong( $b, $offset ) + { + $val = ( + (ord($b[$offset++])) | + (ord($b[$offset++]) << 8) | + (ord($b[$offset++]) << 16) | + (ord($b[$offset ]) << 24) + ); + + // convert signed int to unsigned int if on 32 bit operating system + if ($val < 0 && PHP_INT_SIZE == 4) { + $val = sprintf("%u", $val); + } + + return $val; + } + + /** + * destruct method, resource destroy + */ + public function __destruct() + { + if ( $this->dbFileHandler != NULL ) { + fclose($this->dbFileHandler); + } + + $this->dbBinStr = NULL; + $this->HeaderSip = NULL; + $this->HeaderPtr = NULL; + } +} +?> diff --git a/vendor/zoujingli/ip2region/LICENSE.md b/vendor/zoujingli/ip2region/LICENSE.md new file mode 100644 index 000000000..739ef00d8 --- /dev/null +++ b/vendor/zoujingli/ip2region/LICENSE.md @@ -0,0 +1,225 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +========================================================================== +The following license applies to the ip2region library +-------------------------------------------------------------------------- +Copyright (c) 2015 Lionsoul + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/zoujingli/ip2region/README.md b/vendor/zoujingli/ip2region/README.md new file mode 100644 index 000000000..dba1aab3b --- /dev/null +++ b/vendor/zoujingli/ip2region/README.md @@ -0,0 +1,50 @@ +[![Latest Stable Version](https://poser.pugx.org/zoujingli/ip2region/v/stable)](https://packagist.org/packages/zoujingli/ip2region) +[![Total Downloads](https://poser.pugx.org/zoujingli/ip2region/downloads)](https://packagist.org/packages/zoujingli/ip2region) +[![Latest Unstable Version](https://poser.pugx.org/zoujingli/ip2region/v/unstable)](https://packagist.org/packages/zoujingli/ip2region) +[![License](https://poser.pugx.org/zoujingli/ip2region/license)](https://packagist.org/packages/zoujingli/ip2region) + + +本库基于 [ip2region](https://github.com/lionsoul2014/ip2region) ,简单整合方便使用`composer`来管理。 +-- + +[ip2region](https://github.com/lionsoul2014/ip2region) - 最自由的ip地址查询库,ip到地区的映射库,提供Binary,B树和纯内存三种查询算法,妈妈再也不用担心我的ip地址定位。 + +### 1. 99.9%准确率,定时更新: + +数据聚合了一些知名ip到地名查询提供商的数据,这些是他们官方的的准确率,经测试着实比纯真啥的准确多了。
    +每次聚合一下数据需要1-2天,会不定时更新。 + +### 2. 标准化的数据格式: + +每条ip数据段都固定了格式:_城市Id|国家|区域|省份|城市|ISP_ + +只有中国的数据精确到了城市,其他国家只能定位到国家,后前的选项全部是0,已经包含了全部你能查到的大大小小的国家。 +(请忽略前面的城市Id,个人项目需求) + +### 3. 体积小: + +数据库文件ip2region.db只有1.5M + +### Composer 安装 + +``` +composer require zoujingli/ip2region +``` + +### ip2region 使用 +```php + +$ip2region = new Ip2Region(); + +$ip = '101.105.35.57'; + +$info = $ip2region->btreeSearch($ip); + +var_export($info, true); + +// array ( +// 'city_id' => 2163, +// 'region' => '中国|华南|广东省|深圳市|鹏博士', +// ) + +``` diff --git a/vendor/zoujingli/ip2region/composer.json b/vendor/zoujingli/ip2region/composer.json new file mode 100644 index 000000000..936363e55 --- /dev/null +++ b/vendor/zoujingli/ip2region/composer.json @@ -0,0 +1,18 @@ +{ + "type": "library", + "name": "zoujingli/ip2region", + "homepage": "https://github.com/zoujingli/Ip2Region", + "description": "Ip2Region", + "license": "Apache 2.0", + "keywords": [ + "Ip2Region" + ], + "require": { + "php": ">=5.3.3" + }, + "autoload": { + "classmap": [ + "Ip2Region.php" + ] + } +} diff --git a/vendor/zoujingli/ip2region/ip2region.db b/vendor/zoujingli/ip2region/ip2region.db new file mode 100644 index 000000000..cfdc900ba Binary files /dev/null and b/vendor/zoujingli/ip2region/ip2region.db differ diff --git a/vendor/zoujingli/ip2region/test.php b/vendor/zoujingli/ip2region/test.php new file mode 100644 index 000000000..45981c3db --- /dev/null +++ b/vendor/zoujingli/ip2region/test.php @@ -0,0 +1,15 @@ +btreeSearch($ip); + +var_export($info, true); + +// array ( +// 'city_id' => 2163, +// 'region' => '中国|华南|广东省|深圳市|鹏博士', +// ) \ No newline at end of file diff --git a/vendor/zoujingli/wechat-developer/.gitignore b/vendor/zoujingli/wechat-developer/.gitignore new file mode 100644 index 000000000..394867fdb --- /dev/null +++ b/vendor/zoujingli/wechat-developer/.gitignore @@ -0,0 +1,5 @@ +/.idea +/.git +/.DS_Store +/vendor +/WeChat/Cache diff --git a/vendor/zoujingli/wechat-developer/MIT-LICENSE.txt b/vendor/zoujingli/wechat-developer/MIT-LICENSE.txt new file mode 100644 index 000000000..bceed5380 --- /dev/null +++ b/vendor/zoujingli/wechat-developer/MIT-LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2014-2018 Anyon + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/zoujingli/wechat-developer/README.md b/vendor/zoujingli/wechat-developer/README.md new file mode 100644 index 000000000..b0036c33d --- /dev/null +++ b/vendor/zoujingli/wechat-developer/README.md @@ -0,0 +1,136 @@ +[![Latest Stable Version](https://poser.pugx.org/zoujingli/wechat-developer/v/stable)](https://packagist.org/packages/wechat-developer) [![Latest Unstable Version](https://poser.pugx.org/zoujingli/wechat-developer/v/unstable)](https://packagist.org/packages/zoujingli/wechat-developer) [![Total Downloads](https://poser.pugx.org/zoujingli/wechat-developer/downloads)](https://packagist.org/packages/wechat-developer) [![License](https://poser.pugx.org/zoujingli/wechat-developer/license)](https://packagist.org/packages/wechat-developer) + +WeChatDeveloper for PHP +-- +* WeChatDeveloper 是基于 [wechat-php-sdk](https://github.com/zoujingli/wechat-php-sdk) 重构,优化并完善; +* 运行最底要求 PHP 版本 5.4 , 建议在 PHP7 上运行以获取最佳性能; +* WeChatDeveloper 针对 access_token 失效增加了自动刷新机制; +* 微信的部分接口需要缓存数据在本地,因此对目录需要有写权限; +* 我们鼓励大家使用 composer 来管理您的第三方库,方便后期更新操作; +* WeChatDeveloper 已历经数个线上项目考验,欢迎 fork 或 star 此项目。 + + +Documentation +-- +PHP开发技术交流(QQ群 513350915) + +[![PHP微信开发群 (SDK)](http://pub.idqqimg.com/wpa/images/group.png)](http://shang.qq.com/wpa/qunwpa?idkey=ae25cf789dafbef62e50a980ffc31242f150bc61a61164458216dd98c411832a) + +> WeChatDeveloper 是基于官方接口封装,在做微信开发前,必需先阅读微信官方文档。 +>* 微信官方文档:http://mp.weixin.qq.com/wiki +>* 商户支付文档:https://pay.weixin.qq.com/wiki/doc/api/index.html + +> 针对 WeChatDeveloper 也有一准备了帮助资料可供参考。 +>* 开发文档地址:http://www.kancloud.cn/zoujingli/wechat-developer +>* Think.Admin:https://github.com/zoujingli/Think.Admin + + +Repositorie +-- + WeChatDeveloper 为开源项目,允许把它用于任何地方,不受任何约束,欢迎 fork 项目。 +>* GitHub 托管地址:https://github.com/zoujingli/WeChatDeveloper +>* OSChina 托管地址:http://git.oschina.net/zoujingli/WeChatDeveloper + + +Install +-- +1.1 通过 Composer 来管理安装 +```shell +# 首次安装 线上版本(稳定) +composer require zoujingli/wechat-developer + +# 首次安装 开发版本 +composer require zoujingli/wechat-developer dev-master + +# 更新 WeChatDeveloper +composer update zoujingli/wechat-developer +``` + +1.2 如果不使用 Composer, 可以下载 WeChatDeveloper 并解压到项目中 +```php +# 在项目中加载初始化文件 +include "您的目录/WeChatDeveloper/include.php"; +``` + +2.1 接口实例所需参数 +```php +$config = [ + 'token' => 'test', + 'appid' => 'wx60a43dd8161666d4', + 'appsecret' => '71308e96a204296c57d7cd4b21b883e8', + 'encodingaeskey' => 'BJIUzE0gqlWy0GxfPp4J1oPTBmOrNDIGPNav1YFH5Z5', + // 配置商户支付参数(可选,在使用支付功能时需要) + 'mch_id' => "1235704602", + 'mch_key' => 'IKI4kpHjU94ji3oqre5zYaQMwLHuZPmj', + // 配置商户支付双向证书目录(可选,在使用退款|打款|红包时需要) + 'ssl_key' => '', + 'ssl_cer' => '', + // 缓存目录配置(可选,需拥有读写权限) + 'cache_path' => '', +]; +``` + +3.1 实例指定接口 +```php +try { + + // 实例对应的接口对象 + $user = new \WeChat\User($config); + + // 调用接口对象方法 + $list = $user->getUserList(); + + // 处理返回的结果 + echo '
    ';
    +    var_export($list);
    +    
    +} catch (Exception $e) {
    +
    +    // 出错啦,处理下吧
    +    echo $e->getMessage() . PHP_EOL;
    +    
    +}
    +```
    +
    +Encapsulation
    +--
    +* 接入验证 (初级权限)
    +* 自动回复(文本、图片、语音、视频、音乐、图文) (初级权限)
    +* 菜单操作(查询、创建、删除) (菜单权限)
    +* 客服消息(文本、图片、语音、视频、音乐、图文) (认证权限)
    +* 二维码(创建临时、永久二维码,获取二维码URL) (服务号、认证权限)
    +* 长链接转短链接接口 (服务号、认证权限)
    +* 标签操作(查询、创建、修改、移动用户到标签) (认证权限)
    +* 网页授权(基本授权,用户信息授权) (服务号、认证权限)
    +* 用户信息(查询用户基本信息、获取关注者列表) (认证权限)
    +* 多客服功能(客服管理、获取客服记录、客服会话管理) (认证权限)
    +* 媒体文件(上传、获取) (认证权限)
    +* 高级群发 (认证权限)
    +* 模板消息(设置所属行业、添加模板、发送模板消息) (服务号、认证权限)
    +* 卡券管理(创建、修改、删除、发放、门店管理等) (认证权限)
    +* 语义理解 (服务号、认证权限)
    +* 获取微信服务器IP列表 (初级权限)
    +* 微信JSAPI授权(获取ticket、获取签名) (初级权限)
    +* 数据统计(用户、图文、消息、接口分析数据) (认证权限)
    +* 微信支付(网页支付、扫码支付、交易退款、给粉丝打款)(认证服务号并开通支付功能)
    +
    +
    +Permission
    +--
    +* 初级权限:基本权限,任何正常的公众号都有此权限
    +* 菜单权限:正常的服务号、认证后的订阅号拥有此权限
    +* 认证权限:分为订阅号、服务号认证,如前缀服务号则仅认证的服务号有此权限
    +* 支付权限:仅认证后的服务号可以申请此权限
    +
    +
    +Copyright
    +--
    +* WeChatDeveloper 基于`MIT`协议发布,任何人可以用在任何地方,不受约束
    +* WeChatDeveloper 部分代码来自互联网,若有异议,可以联系作者进行删除
    +
    +
    +Sponsor
    +--
    +![赞助](http://zoujingli.oschina.io/static/pay.png)
    +
    +
    diff --git a/vendor/zoujingli/wechat-developer/Test/config.php b/vendor/zoujingli/wechat-developer/Test/config.php
    new file mode 100644
    index 000000000..9825b59cc
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/Test/config.php
    @@ -0,0 +1,28 @@
    + 'test',
    +    'appid'          => 'wx60a43dd8161666d4',
    +    'appsecret'      => '71308e96a204296c57d7cd4b21b883e8',
    +    'encodingaeskey' => 'BJIUzE0gqlWy0GxfPp4J1oPTBmOrNDIGPNav1YFH5Z5',
    +    // 配置商户支付参数
    +    'mch_id'         => "1332187001",
    +    'mch_key'        => '11bd3d66d85f322a1e803cb587d18c3f',
    +    // 配置商户支付双向证书目录
    +    'ssl_key'        => '',
    +    'ssl_cer'        => '',
    +    // 配置缓存目录,需要拥有写权限
    +    'cache_path'     => '',
    +];
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/Test/pay-download-bill.php b/vendor/zoujingli/wechat-developer/Test/pay-download-bill.php
    new file mode 100644
    index 000000000..c0181fb01
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/Test/pay-download-bill.php
    @@ -0,0 +1,40 @@
    + '20171001',
    +        'bill_type' => 'ALL',
    +    ];
    +    $result = $wechat->billDownload($options);
    +
    +    var_export($result);
    +
    +} catch (Exception $e) {
    +
    +    // 出错啦,处理下吧
    +    echo $e->getMessage() . PHP_EOL;
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/Test/pay-order-close.php b/vendor/zoujingli/wechat-developer/Test/pay-order-close.php
    new file mode 100644
    index 000000000..3a31ddc7b
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/Test/pay-order-close.php
    @@ -0,0 +1,37 @@
    +closeOrder($options);
    +
    +    var_export($result);
    +
    +} catch (Exception $e) {
    +
    +    // 出错啦,处理下吧
    +    echo $e->getMessage() . PHP_EOL;
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/Test/pay-order-create.php b/vendor/zoujingli/wechat-developer/Test/pay-order-create.php
    new file mode 100644
    index 000000000..9d4b5e7ba
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/Test/pay-order-create.php
    @@ -0,0 +1,45 @@
    + '测试商品',
    +        'out_trade_no'     => time(),
    +        'total_fee'        => '1',
    +        'openid'           => 'o38gpszoJoC9oJYz3UHHf6bEp0Lo',
    +        'trade_type'       => 'JSAPI',
    +        'notify_url'       => 'http://a.com/text.html',
    +        'spbill_create_ip' => '127.0.0.1',
    +    ];
    +    $result = $wechat->createOrder($options);
    +
    +    var_export($result);
    +
    +} catch (Exception $e) {
    +
    +    // 出错啦,处理下吧
    +    echo $e->getMessage() . PHP_EOL;
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/Test/pay-order-query.php b/vendor/zoujingli/wechat-developer/Test/pay-order-query.php
    new file mode 100644
    index 000000000..d9934888f
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/Test/pay-order-query.php
    @@ -0,0 +1,40 @@
    + '1008450740201411110005820873',
    +//        'out_trade_no'   => '商户订单号',
    +    ];
    +    $result = $wechat->queryOrder($options);
    +
    +    var_export($result);
    +
    +} catch (Exception $e) {
    +
    +    // 出错啦,处理下吧
    +    echo $e->getMessage() . PHP_EOL;
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/Test/pay-refund-create.php b/vendor/zoujingli/wechat-developer/Test/pay-refund-create.php
    new file mode 100644
    index 000000000..02b554b06
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/Test/pay-refund-create.php
    @@ -0,0 +1,42 @@
    + '1008450740201411110005820873',
    +        'out_refund_no'  => '商户退款单号',
    +        'total_fee'      => '1',
    +        'refund_fee'     => '1',
    +    ];
    +    $result = $wechat->createRefund($options);
    +
    +    var_export($result);
    +
    +} catch (Exception $e) {
    +
    +    // 出错啦,处理下吧
    +    echo $e->getMessage() . PHP_EOL;
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/Test/pay-refund-query.php b/vendor/zoujingli/wechat-developer/Test/pay-refund-query.php
    new file mode 100644
    index 000000000..a812ac43c
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/Test/pay-refund-query.php
    @@ -0,0 +1,42 @@
    + '1008450740201411110005820873',
    +        // 'out_trade_no'   => '商户订单号',
    +        // 'out_refund_no' => '商户退款单号'
    +        // 'refund_id' => '微信退款单号',
    +    ];
    +    $result = $wechat->queryRefund($options);
    +
    +    var_export($result);
    +
    +} catch (Exception $e) {
    +
    +    // 出错啦,处理下吧
    +    echo $e->getMessage() . PHP_EOL;
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/Test/wechat-jssdk-sign.php b/vendor/zoujingli/wechat-developer/Test/wechat-jssdk-sign.php
    new file mode 100644
    index 000000000..8986cf223
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/Test/wechat-jssdk-sign.php
    @@ -0,0 +1,36 @@
    +getJsSign('http://a.com/test.php');
    +
    +    var_export($result);
    +
    +} catch (Exception $e) {
    +
    +    // 出错啦,处理下吧
    +    echo $e->getMessage() . PHP_EOL;
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/Test/wechat-menu-get.php b/vendor/zoujingli/wechat-developer/Test/wechat-menu-get.php
    new file mode 100644
    index 000000000..31f18b023
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/Test/wechat-menu-get.php
    @@ -0,0 +1,36 @@
    +get();
    +    
    +    var_export($result);
    +
    +} catch (Exception $e) {
    +
    +    // 出错啦,处理下吧
    +    echo $e->getMessage() . PHP_EOL;
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/Test/wechat-qrcode-create.php b/vendor/zoujingli/wechat-developer/Test/wechat-qrcode-create.php
    new file mode 100644
    index 000000000..e7daa7907
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/Test/wechat-qrcode-create.php
    @@ -0,0 +1,40 @@
    +create('场景内容');
    +    echo var_export($result, true) . PHP_EOL;
    +
    +    // 5. 创建二维码链接
    +    $url = $wechat->url($result['ticket']);
    +    echo var_export($url, true);
    +
    +
    +} catch (Exception $e) {
    +
    +    // 出错啦,处理下吧
    +    echo $e->getMessage() . PHP_EOL;
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/Test/wechat-user-get.php b/vendor/zoujingli/wechat-developer/Test/wechat-user-get.php
    new file mode 100644
    index 000000000..5517afa61
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/Test/wechat-user-get.php
    @@ -0,0 +1,42 @@
    +getUserList();
    +
    +    var_export($result);
    +
    +    // 5. 批量获取用户资料
    +    foreach (array_chunk($result['data']['openid'], 100) as $item) {
    +        $userList = $wechat->getBatchUserInfo($item);
    +        var_export($userList);
    +    }
    +
    +} catch (Exception $e) {
    +
    +    // 出错啦,处理下吧
    +    echo $e->getMessage() . PHP_EOL;
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Card.php b/vendor/zoujingli/wechat-developer/WeChat/Card.php
    new file mode 100644
    index 000000000..4b328794d
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Card.php
    @@ -0,0 +1,616 @@
    +registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 设置买单接口
    +     * @param string $card_id
    +     * @param bool $is_open
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function setPaycell($card_id, $is_open = true)
    +    {
    +        $url = "https://api.weixin.qq.com/card/paycell/set?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['card_id' => $card_id, 'is_open' => $is_open]);
    +    }
    +
    +    /**
    +     * 设置自助核销接口
    +     * @param string $card_id
    +     * @param bool $is_open
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function setConsumeCell($card_id, $is_open = true)
    +    {
    +        $url = "https://api.weixin.qq.com/card/selfconsumecell/set?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['card_id' => $card_id, 'is_open' => $is_open]);
    +    }
    +
    +    /**
    +     * 创建二维码接口
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function createQrc(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/card/qrcode/create?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 创建货架接口
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function createLandingPage(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/card/landingpage/create?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 导入自定义code
    +     * @param string $card_id
    +     * @param array $code
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function deposit($card_id, array $code)
    +    {
    +        $url = "https://api.weixin.qq.com/card/code/deposit?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['card_id' => $card_id, 'code' => $code]);
    +    }
    +
    +    /**
    +     * 查询导入code数目
    +     * @param string $card_id
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getDepositCount($card_id)
    +    {
    +        $url = "https://api.weixin.qq.com/card/code/getdepositcount?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['card_id' => $card_id]);
    +    }
    +
    +    /**
    +     * 核查code接口
    +     * @param string $card_id 进行导入code的卡券ID
    +     * @param array $code 已经微信卡券后台的自定义code,上限为100个
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function checkCode($card_id, array $code)
    +    {
    +        $url = "https://api.weixin.qq.com/card/code/checkcode?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['card_id' => $card_id, 'code' => $code]);
    +    }
    +
    +    /**
    +     * 图文消息群发卡券
    +     * @param string $card_id
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getNewsHtml($card_id)
    +    {
    +        $url = "https://api.weixin.qq.com/card/mpnews/gethtml?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['card_id' => $card_id]);
    +    }
    +
    +    /**
    +     * 设置测试白名单
    +     * @param array $openids
    +     * @param array $usernames
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function setTestWhiteList($openids = [], $usernames = [])
    +    {
    +        $url = "https://api.weixin.qq.com/card/testwhitelist/set?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['openid' => $openids, 'username' => $usernames]);
    +    }
    +
    +    /**
    +     * 线下核销查询Code
    +     * @param string $code 单张卡券的唯一标准
    +     * @param string $card_id 卡券ID代表一类卡券。自定义code卡券必填
    +     * @param bool $check_consume 是否校验code核销状态,填入true和false时的code异常状态返回数据不同
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getCode($code, $card_id = null, $check_consume = null)
    +    {
    +        $data = ['code' => $code];
    +        is_null($card_id) || $data['card_id'] = $card_id;
    +        is_null($check_consume) || $data['check_consume'] = $check_consume;
    +        $url = "https://api.weixin.qq.com/card/code/get?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 线下核销核销Code
    +     * @param string $code 需核销的Code码
    +     * @param null $card_id 券ID。创建卡券时use_custom_code填写true时必填。非自定义Code不必填写
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function consume($code, $card_id = null)
    +    {
    +        $data = ['code' => $code];
    +        is_null($card_id) || $data['card_id'] = $card_id;
    +        $url = "https://api.weixin.qq.com/card/code/consume?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * Code解码接口
    +     * @param string $encrypt_code
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function decrypt($encrypt_code)
    +    {
    +        $url = "https://api.weixin.qq.com/card/code/decrypt?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['encrypt_code' => $encrypt_code]);
    +    }
    +
    +    /**
    +     * 获取用户已领取卡券接口
    +     * @param string $openid
    +     * @param null|string $card_id
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getCardList($openid, $card_id = null)
    +    {
    +        $data = ['openid' => $openid];
    +        is_null($card_id) || $data['card_id'] = $card_id;
    +        $url = "https://api.weixin.qq.com/card/user/getcardlist?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 查看卡券详情
    +     * @param string $card_id
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getCard($card_id)
    +    {
    +        $url = "https://api.weixin.qq.com/card/get?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['card_id' => $card_id]);
    +    }
    +
    +    /**
    +     * 批量查询卡券列表
    +     * @param int $offset 查询卡列表的起始偏移量,从0开始,即offset: 5是指从从列表里的第六个开始读取
    +     * @param int $count 需要查询的卡片的数量(数量最大50)
    +     * @param array $status_list 支持开发者拉出指定状态的卡券列表
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function batchGet($offset, $count = 50, array $status_list = [])
    +    {
    +        $data = ['offset' => $offset, 'count' => $count];
    +        empty($status_list) || $data['status_list'] = $status_list;
    +        $url = "https://api.weixin.qq.com/card/batchget?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 更改卡券信息接口
    +     * @param string $card_id
    +     * @param array $member_card
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function updateCard($card_id, array $member_card)
    +    {
    +        $url = "https://api.weixin.qq.com/card/update?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['card_id' => $card_id, 'member_card' => $member_card]);
    +    }
    +
    +    /**
    +     * 修改库存接口
    +     * @param string $card_id 卡券ID
    +     * @param null|integer $increase_stock_value 增加多少库存,支持不填或填0
    +     * @param null|integer $reduce_stock_value 减少多少库存,可以不填或填0
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function modifyStock($card_id, $increase_stock_value = null, $reduce_stock_value = null)
    +    {
    +        $data = ['card_id' => $card_id];
    +        is_null($increase_stock_value) || $data['increase_stock_value'] = $increase_stock_value;
    +        is_null($reduce_stock_value) || $data['reduce_stock_value'] = $reduce_stock_value;
    +        $url = "https://api.weixin.qq.com/card/modifystock?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 更改Code接口
    +     * @param string $code 需变更的Code码
    +     * @param string $new_code 变更后的有效Code码
    +     * @param null|string $card_id 卡券ID
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function updateCode($code, $new_code, $card_id = null)
    +    {
    +        $data = ['code' => $code, 'new_code' => $new_code];
    +        is_null($card_id) || $data['card_id'] = $card_id;
    +        $url = "https://api.weixin.qq.com/card/code/update?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 删除卡券接口
    +     * @param string $card_id
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function deleteCard($card_id)
    +    {
    +        $url = "https://api.weixin.qq.com/card/delete?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['card_id' => $card_id]);
    +    }
    +
    +    /**
    +     * 设置卡券失效接口
    +     * @param string $code
    +     * @param string $card_id
    +     * @param null|string $reason
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function unAvailable($code, $card_id, $reason = null)
    +    {
    +        $data = ['code' => $code, 'card_id' => $card_id];
    +        is_null($reason) || $data['reason'] = $reason;
    +        $url = "https://api.weixin.qq.com/card/code/unavailable?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 拉取卡券概况数据接口
    +     * @param string $begin_date 查询数据的起始时间
    +     * @param string $end_date 查询数据的截至时间
    +     * @param string $cond_source 卡券来源(0为公众平台创建的卡券数据 1是API创建的卡券数据)
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getCardBizuininfo($begin_date, $end_date, $cond_source)
    +    {
    +        $data = ['begin_date' => $begin_date, 'end_date' => $end_date, 'cond_source' => $cond_source];
    +        $url = "https://api.weixin.qq.com/datacube/getcardbizuininfo?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 获取免费券数据接口
    +     * @param string $begin_date 查询数据的起始时间
    +     * @param string $end_date 查询数据的截至时间
    +     * @param integer $cond_source 卡券来源,0为公众平台创建的卡券数据、1是API创建的卡券数据
    +     * @param null $card_id 卡券ID
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getCardCardinfo($begin_date, $end_date, $cond_source, $card_id = null)
    +    {
    +        $data = ['begin_date' => $begin_date, 'end_date' => $end_date, 'cond_source' => $cond_source];
    +        is_null($card_id) || $data['card_id'] = $card_id;
    +        $url = "https://api.weixin.qq.com/datacube/getcardcardinfo?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 拉取会员卡概况数据接口
    +     * @param string $begin_date 查询数据的起始时间
    +     * @param string $end_date 查询数据的截至时间
    +     * @param string $cond_source 卡券来源(0为公众平台创建的卡券数据 1是API创建的卡券数据)
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getCardMemberCardinfo($begin_date, $end_date, $cond_source)
    +    {
    +        $data = ['begin_date' => $begin_date, 'end_date' => $end_date, 'cond_source' => $cond_source];
    +        $url = "https://api.weixin.qq.com/datacube/getcardmembercardinfo?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 拉取单张会员卡数据接口
    +     * @param string $begin_date 查询数据的起始时间
    +     * @param string $end_date 查询数据的截至时间
    +     * @param string $card_id 卡券id
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getCardMemberCardDetail($begin_date, $end_date, $card_id)
    +    {
    +        $data = ['begin_date' => $begin_date, 'end_date' => $end_date, 'card_id' => $card_id];
    +        $url = "https://api.weixin.qq.com/datacube/getcardmembercarddetail?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 拉取会员信息(积分查询)接口
    +     * @param string $card_id 查询会员卡的cardid
    +     * @param string $code 所查询用户领取到的code值
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getCardMemberCard($card_id, $code)
    +    {
    +        $data = ['card_id' => $card_id, 'code' => $code];
    +        $url = "https://api.weixin.qq.com/card/membercard/userinfo/get?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 设置支付后投放卡券接口
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function payGiftCard(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/card/paygiftcard/add?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 删除支付后投放卡券规则
    +     * @param integer $rule_id 支付即会员的规则名称
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function delPayGiftCard($rule_id)
    +    {
    +        $url = "https://api.weixin.qq.com/card/paygiftcard/add?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['rule_id' => $rule_id]);
    +    }
    +
    +    /**
    +     * 查询支付后投放卡券规则详情
    +     * @param integer $rule_id 要查询规则id
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getPayGiftCard($rule_id)
    +    {
    +        $url = "https://api.weixin.qq.com/card/paygiftcard/getbyid?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['rule_id' => $rule_id]);
    +    }
    +
    +    /**
    +     * 批量查询支付后投放卡券规则
    +     * @param integer $offset 起始偏移量
    +     * @param integer $count 查询的数量
    +     * @param bool $effective 是否仅查询生效的规则
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function batchGetPayGiftCard($offset = 0, $count = 10, $effective = true)
    +    {
    +        $data = ['type' => 'RULE_TYPE_PAY_MEMBER_CARD', 'offset' => $offset, 'count' => $count, 'effective' => $effective];
    +        $url = "https://api.weixin.qq.com/card/paygiftcard/batchget?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 创建支付后领取立减金活动
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function addActivity(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/card/mkt/activity/create?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 开通券点账户接口
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function payActivate()
    +    {
    +        $url = "https://api.weixin.qq.com/card/pay/activate?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpGetForJson($url);
    +    }
    +
    +    /**
    +     * 对优惠券批价
    +     * @param string $card_id 需要来配置库存的card_id
    +     * @param integer $quantity 本次需要兑换的库存数目
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getPayprice($card_id, $quantity)
    +    {
    +        $url = "POST https://api.weixin.qq.com/card/pay/getpayprice?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['card_id' => $card_id, 'quantity' => $quantity]);
    +    }
    +
    +    /**
    +     * 查询券点余额接口
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getCoinsInfo()
    +    {
    +        $url = "https://api.weixin.qq.com/card/pay/getcoinsinfo?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpGetForJson($url);
    +    }
    +
    +    /**
    +     * 确认兑换库存接口
    +     * @param string $card_id 需要来兑换库存的card_id
    +     * @param integer $quantity 本次需要兑换的库存数目
    +     * @param string $order_id 仅可以使用上面得到的订单号,保证批价有效性
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function payConfirm($card_id, $quantity, $order_id)
    +    {
    +        $data = ['card_id' => $card_id, 'quantity' => $quantity, 'order_id' => $order_id];
    +        $url = "https://api.weixin.qq.com/card/pay/confirm?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 充值券点接口
    +     * @param integer $coin_count
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function payRecharge($coin_count)
    +    {
    +        $url = "https://api.weixin.qq.com/card/pay/recharge?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['coin_count' => $coin_count]);
    +    }
    +
    +    /**
    +     * 查询订单详情接口
    +     * @param string $order_id
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function payGetOrder($order_id)
    +    {
    +        $url = "https://api.weixin.qq.com/card/pay/getorder?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['order_id' => $order_id]);
    +    }
    +
    +    /**
    +     * 查询券点流水详情接口
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function payGetList(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/card/pay/getorderlist?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Contracts/BasicPushEvent.php b/vendor/zoujingli/wechat-developer/WeChat/Contracts/BasicPushEvent.php
    new file mode 100644
    index 000000000..205075e98
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Contracts/BasicPushEvent.php
    @@ -0,0 +1,228 @@
    +config = new DataArray($options);
    +        $this->params = new DataArray($_REQUEST);
    +        $this->appid = $this->config->get('appid');
    +        // 推送消息处理
    +        if ($_SERVER['REQUEST_METHOD'] == "POST") {
    +            $this->postxml = file_get_contents("php://input");
    +            $this->encryptType = $this->params->get('encrypt_type');
    +            if ($this->encryptType == 'aes') {
    +                if (empty($options['encodingaeskey'])) {
    +                    throw new InvalidArgumentException("Missing Config -- [encodingaeskey]");
    +                }
    +                if (!class_exists('Prpcrypt', false)) {
    +                    require __DIR__ . '/Prpcrypt.php';
    +                }
    +                $prpcrypt = new \Prpcrypt($this->config->get('encodingaeskey'));
    +                $result = Tools::xml2arr($this->postxml);
    +                $array = $prpcrypt->decrypt($result['Encrypt']);
    +                if (intval($array[0]) > 0) {
    +                    throw new InvalidResponseException($array[1], $array[0]);
    +                }
    +                list($this->postxml, $this->appid) = [$array[1], $array[2]];
    +            }
    +            $this->receive = new DataArray(Tools::xml2arr($this->postxml));
    +        } elseif ($_SERVER['REQUEST_METHOD'] == "GET" && $this->checkSignature()) {
    +            @ob_clean();
    +            exit($this->params->get('echostr'));
    +        } else {
    +            throw new InvalidResponseException('Invalid interface request.', '0');
    +        }
    +    }
    +
    +    /**
    +     * 回复消息
    +     * @param array $data 消息内容
    +     * @param bool $return 是否返回XML内容
    +     * @return string
    +     * @throws InvalidDecryptException
    +     */
    +    public function reply(array $data = [], $return = false)
    +    {
    +        $xml = Tools::arr2xml(empty($data) ? $this->message : $data);
    +        if ($this->encryptType == 'aes') {
    +            if (!class_exists('Prpcrypt', false)) {
    +                require __DIR__ . '/Prpcrypt.php';
    +            }
    +            $prpcrypt = new \Prpcrypt($this->config->get('encodingaeskey'));
    +            // 如果是第三方平台,加密得使用 component_appid
    +            $component_appid = $this->config->get('component_appid');
    +            $appid = empty($component_appid) ? $this->appid : $component_appid;
    +            $array = $prpcrypt->encrypt($xml, $appid);
    +            if ($array[0] > 0) {
    +                throw new InvalidDecryptException('Encrypt Error.', '0');
    +            }
    +            list($timestamp, $encrypt) = [time(), $array[1]];
    +            $nonce = rand(77, 999) * rand(605, 888) * rand(11, 99);
    +            $tmpArr = [$this->config->get('token'), $timestamp, $nonce, $encrypt];
    +            sort($tmpArr, SORT_STRING);
    +            $signature = sha1(implode($tmpArr));
    +            $format = "%s";
    +            $xml = sprintf($format, $encrypt, $signature, $timestamp, $nonce);
    +        }
    +        if ($return) {
    +            return $xml;
    +        }
    +        @ob_clean();
    +        echo $xml;
    +    }
    +
    +    /**
    +     * 验证来自微信服务器
    +     * @param string $str
    +     * @return bool
    +     */
    +    private function checkSignature($str = '')
    +    {
    +        $nonce = $this->params->get('nonce');
    +        $timestamp = $this->params->get('timestamp');
    +        $msg_signature = $this->params->get('msg_signature');
    +        $signature = empty($msg_signature) ? $this->params->get('signature') : $msg_signature;
    +        $tmpArr = [$this->config->get('token'), $timestamp, $nonce, $str];
    +        sort($tmpArr, SORT_STRING);
    +        if (sha1(implode($tmpArr)) == $signature) {
    +            return true;
    +        }
    +        return false;
    +    }
    +
    +    /**
    +     * 获取公众号推送对象
    +     * @param null|string $field 指定获取字段
    +     * @return array
    +     */
    +    public function getReceive($field = null)
    +    {
    +        return $this->receive->get($field);
    +    }
    +
    +    /**
    +     * 获取当前微信OPENID
    +     * @return string
    +     */
    +    public function getOpenid()
    +    {
    +        return $this->receive->get('FromUserName');
    +    }
    +
    +    /**
    +     * 获取当前推送消息类型
    +     * @return string
    +     */
    +    public function getMsgType()
    +    {
    +        return $this->receive->get('MsgType');
    +    }
    +
    +    /**
    +     * 获取当前推送消息ID
    +     * @return string
    +     */
    +    public function getMsgId()
    +    {
    +        return $this->receive->get('MsgId');
    +    }
    +
    +    /**
    +     * 获取当前推送时间
    +     * @return integer
    +     */
    +    public function getMsgTime()
    +    {
    +        return $this->receive->get('CreateTime');
    +    }
    +
    +    /**
    +     * 获取当前推送公众号
    +     * @return string
    +     */
    +    public function getToOpenid()
    +    {
    +        return $this->receive->get('ToUserName');
    +    }
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Contracts/BasicWeChat.php b/vendor/zoujingli/wechat-developer/WeChat/Contracts/BasicWeChat.php
    new file mode 100644
    index 000000000..2ec029f68
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Contracts/BasicWeChat.php
    @@ -0,0 +1,205 @@
    +GetAccessTokenCallback = $options['GetAccessTokenCallback'];
    +        }
    +        if (!empty($options['cache_path'])) {
    +            Tools::$cache_path = $options['cache_path'];
    +        }
    +        $this->config = new DataArray($options);
    +    }
    +
    +    /**
    +     * 获取访问accessToken
    +     * @return string
    +     * @throws \WeChat\Exceptions\InvalidResponseException
    +     * @throws \WeChat\Exceptions\LocalCacheException
    +     */
    +    public function getAccessToken()
    +    {
    +        if (!empty($this->access_token)) {
    +            return $this->access_token;
    +        }
    +        $cache = $this->config->get('appid') . '_access_token';
    +        $this->access_token = Tools::getCache($cache);
    +        if (!empty($this->access_token)) {
    +            return $this->access_token;
    +        }
    +        // 处理开放平台授权公众号获取AccessToken
    +        if (!empty($this->GetAccessTokenCallback) && is_callable($this->GetAccessTokenCallback)) {
    +            $this->access_token = call_user_func_array($this->GetAccessTokenCallback, [$this->config->get('appid'), $this]);
    +            if (!empty($this->access_token)) {
    +                Tools::setCache($cache, $this->access_token, 7000);
    +            }
    +            return $this->access_token;
    +        }
    +        list($appid, $secret) = [$this->config->get('appid'), $this->config->get('appsecret')];
    +        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}";
    +        $result = Tools::json2arr(Tools::get($url));
    +        if (!empty($result['access_token'])) {
    +            Tools::setCache($cache, $result['access_token'], 7000);
    +        }
    +        return $result['access_token'];
    +    }
    +
    +    /**
    +     * 清理删除accessToken
    +     * @return bool
    +     */
    +    public function delAccessToken()
    +    {
    +        $this->access_token = '';
    +        return Tools::delCache($this->config->get('appid') . '_access_token');
    +    }
    +
    +    /**
    +     * 以GET获取接口数据并转为数组
    +     * @param string $url 接口地址
    +     * @return array
    +     */
    +    protected function httpGetForJson($url)
    +    {
    +        try {
    +            return Tools::json2arr(Tools::get($url));
    +        } catch (InvalidResponseException $e) {
    +            if (!$this->isTry && in_array($e->getCode(), ['40014', '40001', '41001', '42001'])) {
    +                $this->delAccessToken();
    +                $this->isTry = true;
    +                return call_user_func_array([$this, $this->currentMethod['method']], $this->currentMethod['arguments']);
    +            }
    +        }
    +    }
    +
    +    /**
    +     * 以POST获取接口数据并转为数组
    +     * @param string $url 接口地址
    +     * @param array $data 请求数据
    +     * @param bool $buildToJson
    +     * @return array
    +     */
    +    protected function httpPostForJson($url, array $data, $buildToJson = true)
    +    {
    +        try {
    +            return Tools::json2arr(Tools::post($url, $buildToJson ? Tools::arr2json($data) : $data));
    +        } catch (InvalidResponseException $e) {
    +            if (!$this->isTry && in_array($e->getCode(), ['40014', '40001', '41001', '42001'])) {
    +                $this->delAccessToken();
    +                $this->isTry = true;
    +                return call_user_func_array([$this, $this->currentMethod['method']], $this->currentMethod['arguments']);
    +            }
    +        }
    +    }
    +
    +    /**
    +     * 注册当前请求接口
    +     * @param string $url 接口地址
    +     * @param string $method 当前接口方法
    +     * @param array $arguments 请求参数
    +     * @return mixed
    +     * @throws \WeChat\Exceptions\InvalidResponseException
    +     * @throws \WeChat\Exceptions\LocalCacheException
    +     */
    +    protected function registerApi(&$url, $method, $arguments = [])
    +    {
    +        $this->currentMethod = ['method' => $method, 'arguments' => $arguments];
    +        if (empty($this->access_token)) {
    +            $this->access_token = $this->getAccessToken();
    +        }
    +        return $url = str_replace('ACCESS_TOKEN', $this->access_token, $url);
    +    }
    +
    +    /**
    +     * 接口通用POST请求方法
    +     * @param string $url 接口URL
    +     * @param array $data POST提交接口参数
    +     * @param bool $isBuildJson
    +     * @return array
    +     * @throws InvalidResponseException
    +     * @throws \WeChat\Exceptions\LocalCacheException
    +     */
    +    public function callPostApi($url, array $data, $isBuildJson = true)
    +    {
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data, $isBuildJson);
    +    }
    +
    +    /**
    +     * 接口通用GET请求方法
    +     * @param string $url 接口URL
    +     * @return array
    +     * @throws InvalidResponseException
    +     * @throws \WeChat\Exceptions\LocalCacheException
    +     */
    +    public function callGetApi($url)
    +    {
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpGetForJson($url);
    +    }
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Contracts/DataArray.php b/vendor/zoujingli/wechat-developer/WeChat/Contracts/DataArray.php
    new file mode 100644
    index 000000000..c932c7daf
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Contracts/DataArray.php
    @@ -0,0 +1,124 @@
    +config = $options;
    +    }
    +
    +    /**
    +     * 设置配置项值
    +     * @param string $offset
    +     * @param string|array|null|integer $value
    +     */
    +    public function set($offset, $value)
    +    {
    +        $this->offsetSet($offset, $value);
    +    }
    +
    +    /**
    +     * 获取配置项参数
    +     * @param string|null $offset
    +     * @return array|string|null
    +     */
    +    public function get($offset = null)
    +    {
    +        return $this->offsetGet($offset);
    +    }
    +
    +    /**
    +     * 合并数据到对象
    +     * @param array $data 需要合并的数据
    +     * @param bool $append 是否追加数据
    +     * @return array
    +     */
    +    public function merge(array $data, $append = false)
    +    {
    +        if ($append) {
    +            return $this->config = array_merge($this->config, $data);
    +        }
    +        return array_merge($this->config, $data);
    +    }
    +
    +    /**
    +     * 设置配置项值
    +     * @param string $offset
    +     * @param string|array|null|integer $value
    +     */
    +    public function offsetSet($offset, $value)
    +    {
    +        if (is_null($offset)) {
    +            $this->config[] = $value;
    +        } else {
    +            $this->config[$offset] = $value;
    +        }
    +    }
    +
    +    /**
    +     * 判断配置Key是否存在
    +     * @param string $offset
    +     * @return bool
    +     */
    +    public function offsetExists($offset)
    +    {
    +        return isset($this->config[$offset]);
    +    }
    +
    +    /**
    +     * 清理配置项
    +     * @param string|null $offset
    +     */
    +    public function offsetUnset($offset = null)
    +    {
    +        if (is_null($offset)) {
    +            $this->config = [];
    +        } else {
    +            unset($this->config[$offset]);
    +        }
    +    }
    +
    +    /**
    +     * 获取配置项参数
    +     * @param string|null $offset
    +     * @return array|string|null
    +     */
    +    public function offsetGet($offset = null)
    +    {
    +        if (is_null($offset)) {
    +            return $this->config;
    +        }
    +        return isset($this->config[$offset]) ? $this->config[$offset] : null;
    +    }
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Contracts/DataError.php b/vendor/zoujingli/wechat-developer/WeChat/Contracts/DataError.php
    new file mode 100644
    index 000000000..51cd9a2ee
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Contracts/DataError.php
    @@ -0,0 +1,194 @@
    + '系统繁忙,此时请开发者稍候再试',
    +        0       => '请求成功',
    +        40001   => '获取 access_token 时 AppSecret 错误,或者 access_token 无效。请开发者认真比对 AppSecret 的正确性,或查看是否正在为恰当的公众号调用接口',
    +        40002   => '不合法的凭证类型',
    +        40003   => '不合法的 OpenID ,请开发者确认 OpenID (该用户)是否已关注公众号,或是否是其他公众号的 OpenID',
    +        40004   => '不合法的媒体文件类型',
    +        40005   => '不合法的文件类型',
    +        40006   => '不合法的文件大小',
    +        40007   => '不合法的媒体文件 id',
    +        40008   => '不合法的消息类型',
    +        40009   => '不合法的图片文件大小',
    +        40010   => '不合法的语音文件大小',
    +        40011   => '不合法的视频文件大小',
    +        40012   => '不合法的缩略图文件大小',
    +        40013   => '不合法的 AppID ,请开发者检查 AppID 的正确性,避免异常字符,注意大小写',
    +        40014   => '不合法的 access_token ,请开发者认真比对 access_token 的有效性(如是否过期),或查看是否正在为恰当的公众号调用接口',
    +        40015   => '不合法的菜单类型',
    +        40016   => '不合法的按钮个数',
    +        40017   => '不合法的按钮个数',
    +        40018   => '不合法的按钮名字长度',
    +        40019   => '不合法的按钮 KEY 长度',
    +        40020   => '不合法的按钮 URL 长度',
    +        40021   => '不合法的菜单版本号',
    +        40022   => '不合法的子菜单级数',
    +        40023   => '不合法的子菜单按钮个数',
    +        40024   => '不合法的子菜单按钮类型',
    +        40025   => '不合法的子菜单按钮名字长度',
    +        40026   => '不合法的子菜单按钮 KEY 长度',
    +        40027   => '不合法的子菜单按钮 URL 长度',
    +        40028   => '不合法的自定义菜单使用用户',
    +        40029   => '不合法的 oauth_code',
    +        40030   => '不合法的 refresh_token',
    +        40031   => '不合法的 openid 列表',
    +        40032   => '不合法的 openid 列表长度',
    +        40033   => '不合法的请求字符,不能包含 \\uxxxx 格式的字符',
    +        40035   => '不合法的参数',
    +        40038   => '不合法的请求格式',
    +        40039   => '不合法的 URL 长度',
    +        40050   => '不合法的分组 id',
    +        40051   => '分组名字不合法',
    +        40060   => '删除单篇图文时,指定的 article_idx 不合法',
    +        40117   => '分组名字不合法',
    +        40118   => 'media_id 大小不合法',
    +        40119   => 'button 类型错误',
    +        40120   => 'button 类型错误',
    +        40121   => '不合法的 media_id 类型',
    +        40132   => '微信号不合法',
    +        40137   => '不支持的图片格式',
    +        40155   => '请勿添加其他公众号的主页链接',
    +        41001   => '缺少 access_token 参数',
    +        41002   => '缺少 appid 参数',
    +        41003   => '缺少 refresh_token 参数',
    +        41004   => '缺少 secret 参数',
    +        41005   => '缺少多媒体文件数据',
    +        41006   => '缺少 media_id 参数',
    +        41007   => '缺少子菜单数据',
    +        41008   => '缺少 oauth code',
    +        41009   => '缺少 openid',
    +        42001   => 'access_token 超时,请检查 access_token 的有效期,请参考基础支持 - 获取 access_token 中,对 access_token 的详细机制说明',
    +        42002   => 'refresh_token 超时',
    +        42003   => 'oauth_code 超时',
    +        42007   => '用户修改微信密码, accesstoken 和 refreshtoken 失效,需要重新授权',
    +        43001   => '需要 GET 请求',
    +        43002   => '需要 POST 请求',
    +        43003   => '需要 HTTPS 请求',
    +        43004   => '需要接收者关注',
    +        43005   => '需要好友关系',
    +        43019   => '需要将接收者从黑名单中移除',
    +        44001   => '多媒体文件为空',
    +        44002   => 'POST 的数据包为空',
    +        44003   => '图文消息内容为空',
    +        44004   => '文本消息内容为空',
    +        45001   => '多媒体文件大小超过限制',
    +        45002   => '消息内容超过限制',
    +        45003   => '标题字段超过限制',
    +        45004   => '描述字段超过限制',
    +        45005   => '链接字段超过限制',
    +        45006   => '图片链接字段超过限制',
    +        45007   => '语音播放时间超过限制',
    +        45008   => '图文消息超过限制',
    +        45009   => '接口调用超过限制',
    +        45010   => '创建菜单个数超过限制',
    +        45011   => 'API 调用太频繁,请稍候再试',
    +        45015   => '回复时间超过限制',
    +        45016   => '系统分组,不允许修改',
    +        45017   => '分组名字过长',
    +        45018   => '分组数量超过上限',
    +        45047   => '客服接口下行条数超过上限',
    +        46001   => '不存在媒体数据',
    +        46002   => '不存在的菜单版本',
    +        46003   => '不存在的菜单数据',
    +        46004   => '不存在的用户',
    +        47001   => '解析 JSON/XML 内容错误',
    +        48001   => 'api 功能未授权,请确认公众号已获得该接口,可以在公众平台官网 - 开发者中心页中查看接口权限',
    +        48002   => '粉丝拒收消息(粉丝在公众号选项中,关闭了 “ 接收消息 ” )',
    +        48004   => 'api 接口被封禁,请登录 mp.weixin.qq.com 查看详情',
    +        48005   => 'api 禁止删除被自动回复和自定义菜单引用的素材',
    +        48006   => 'api 禁止清零调用次数,因为清零次数达到上限',
    +        48008   => '没有该类型消息的发送权限',
    +        50001   => '用户未授权该 api',
    +        50002   => '用户受限,可能是违规后接口被封禁',
    +        61451   => '参数错误 (invalid parameter)',
    +        61452   => '无效客服账号 (invalid kf_account)',
    +        61453   => '客服帐号已存在 (kf_account exsited)',
    +        61454   => '客服帐号名长度超过限制 ( 仅允许 10 个英文字符,不包括 @ 及 @ 后的公众号的微信号 )(invalid kf_acount length)',
    +        61455   => '客服帐号名包含非法字符 ( 仅允许英文 + 数字 )(illegal character in kf_account)',
    +        61456   => '客服帐号个数超过限制 (10 个客服账号 )(kf_account count exceeded)',
    +        61457   => '无效头像文件类型 (invalid file type)',
    +        61450   => '系统错误 (system error)',
    +        61500   => '日期格式错误',
    +        65301   => '不存在此 menuid 对应的个性化菜单',
    +        65302   => '没有相应的用户',
    +        65303   => '没有默认菜单,不能创建个性化菜单',
    +        65304   => 'MatchRule 信息为空',
    +        65305   => '个性化菜单数量受限',
    +        65306   => '不支持个性化菜单的帐号',
    +        65307   => '个性化菜单信息为空',
    +        65308   => '包含没有响应类型的 button',
    +        65309   => '个性化菜单开关处于关闭状态',
    +        65310   => '填写了省份或城市信息,国家信息不能为空',
    +        65311   => '填写了城市信息,省份信息不能为空',
    +        65312   => '不合法的国家信息',
    +        65313   => '不合法的省份信息',
    +        65314   => '不合法的城市信息',
    +        65316   => '该公众号的菜单设置了过多的域名外跳(最多跳转到 3 个域名的链接)',
    +        65317   => '不合法的 URL',
    +        9001001 => 'POST 数据参数不合法',
    +        9001002 => '远端服务不可用',
    +        9001003 => 'Ticket 不合法',
    +        9001004 => '获取摇周边用户信息失败',
    +        9001005 => '获取商户信息失败',
    +        9001006 => '获取 OpenID 失败',
    +        9001007 => '上传文件缺失',
    +        9001008 => '上传素材的文件类型不合法',
    +        9001009 => '上传素材的文件尺寸不合法',
    +        9001010 => '上传失败',
    +        9001020 => '帐号不合法',
    +        9001021 => '已有设备激活率低于 50% ,不能新增设备',
    +        9001022 => '设备申请数不合法,必须为大于 0 的数字',
    +        9001023 => '已存在审核中的设备 ID 申请',
    +        9001024 => '一次查询设备 ID 数量不能超过 50',
    +        9001025 => '设备 ID 不合法',
    +        9001026 => '页面 ID 不合法',
    +        9001027 => '页面参数不合法',
    +        9001028 => '一次删除页面 ID 数量不能超过 10',
    +        9001029 => '页面已应用在设备中,请先解除应用关系再删除',
    +        9001030 => '一次查询页面 ID 数量不能超过 50',
    +        9001031 => '时间区间不合法',
    +        9001032 => '保存设备与页面的绑定关系参数错误',
    +        9001033 => '门店 ID 不合法',
    +        9001034 => '设备备注信息过长',
    +        9001035 => '设备申请参数不合法',
    +        9001036 => '查询起始值 begin 不合法',
    +    ];
    +
    +    /**
    +     * 异常代码解析描述
    +     * @param string $code
    +     * @return string
    +     */
    +    public static function toMessage($code)
    +    {
    +        return isset(self::$message[$code]) ? self::$message[$code] : $code;
    +    }
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Contracts/Prpcrypt.php b/vendor/zoujingli/wechat-developer/WeChat/Contracts/Prpcrypt.php
    new file mode 100644
    index 000000000..2b93c5038
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Contracts/Prpcrypt.php
    @@ -0,0 +1,189 @@
    + PKCS7Encoder::$blockSize) {
    +            $pad = 0;
    +        }
    +        return substr($text, 0, strlen($text) - $pad);
    +    }
    +
    +}
    +
    +/**
    + * 公众号消息 - 加解密
    + * Class Prpcrypt
    + */
    +class Prpcrypt
    +{
    +
    +    public $key;
    +
    +    /**
    +     * Prpcrypt constructor.
    +     * @param $key
    +     */
    +    function __construct($key)
    +    {
    +        $this->key = base64_decode("{$key}=");
    +    }
    +
    +    /**
    +     * 对明文进行加密
    +     * @param string $text 需要加密的明文
    +     * @param string $appid 公众号APPID
    +     * @return array
    +     */
    +    public function encrypt($text, $appid)
    +    {
    +        try {
    +            $random = $this->getRandomStr();
    +            $iv = substr($this->key, 0, 16);
    +            $pkcEncoder = new PKCS7Encoder();
    +            $text = $pkcEncoder->encode($random . pack("N", strlen($text)) . $text . $appid);
    +            $encrypted = openssl_encrypt($text, 'AES-256-CBC', substr($this->key, 0, 32), OPENSSL_ZERO_PADDING, $iv);
    +            return [ErrorCode::$OK, $encrypted];
    +        } catch (Exception $e) {
    +            return [ErrorCode::$EncryptAESError, null];
    +        }
    +    }
    +
    +    /**
    +     * 对密文进行解密
    +     * @param string $encrypted 需要解密的密文
    +     * @return array
    +     */
    +    public function decrypt($encrypted)
    +    {
    +        try {
    +            $iv = substr($this->key, 0, 16);
    +            $decrypted = openssl_decrypt($encrypted, 'AES-256-CBC', substr($this->key, 0, 32), OPENSSL_ZERO_PADDING, $iv);
    +        } catch (Exception $e) {
    +            return [ErrorCode::$DecryptAESError, null];
    +        }
    +        try {
    +            $pkcEncoder = new PKCS7Encoder();
    +            $result = $pkcEncoder->decode($decrypted);
    +            if (strlen($result) < 16) {
    +                return [ErrorCode::$DecryptAESError, null];
    +            }
    +            $content = substr($result, 16, strlen($result));
    +            $len_list = unpack("N", substr($content, 0, 4));
    +            $xml_len = $len_list[1];
    +            return [0, substr($content, 4, $xml_len), substr($content, $xml_len + 4)];
    +        } catch (Exception $e) {
    +            return [ErrorCode::$IllegalBuffer, null];
    +        }
    +    }
    +
    +    /**
    +     * 随机生成16位字符串
    +     * @param string $str
    +     * @return string 生成的字符串
    +     */
    +    function getRandomStr($str = "")
    +    {
    +        $str_pol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
    +        $max = strlen($str_pol) - 1;
    +        for ($i = 0; $i < 16; $i++) {
    +            $str .= $str_pol[mt_rand(0, $max)];
    +        }
    +        return $str;
    +    }
    +
    +}
    +
    +/**
    + * 仅用作类内部使用
    + * 不用于官方API接口的errCode码
    + * Class ErrorCode
    + */
    +class ErrorCode
    +{
    +
    +    public static $OK = 0;
    +    public static $ParseXmlError = 40002;
    +    public static $IllegalAesKey = 40004;
    +    public static $IllegalBuffer = 40008;
    +    public static $EncryptAESError = 40006;
    +    public static $DecryptAESError = 40007;
    +    public static $EncodeBase64Error = 40009;
    +    public static $DecodeBase64Error = 40010;
    +    public static $GenReturnXmlError = 40011;
    +    public static $ValidateAppidError = 40005;
    +    public static $ComputeSignatureError = 40003;
    +    public static $ValidateSignatureError = 40001;
    +    public static $errCode = [
    +        '0'     => '处理成功',
    +        '40001' => '校验签名失败',
    +        '40002' => '解析xml失败',
    +        '40003' => '计算签名失败',
    +        '40004' => '不合法的AESKey',
    +        '40005' => '校验AppID失败',
    +        '40006' => 'AES加密失败',
    +        '40007' => 'AES解密失败',
    +        '40008' => '公众平台发送的xml不合法',
    +        '40009' => 'Base64编码失败',
    +        '40010' => 'Base64解码失败',
    +        '40011' => '公众帐号生成回包xml失败',
    +    ];
    +
    +    /**
    +     * 获取错误消息内容
    +     * @param string $code 错误代码
    +     * @return bool
    +     */
    +    public static function getErrText($code)
    +    {
    +        if (isset(self::$errCode[$code])) {
    +            return self::$errCode[$code];
    +        }
    +        return false;
    +    }
    +
    +}
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Contracts/Tools.php b/vendor/zoujingli/wechat-developer/WeChat/Contracts/Tools.php
    new file mode 100644
    index 000000000..0bc59498b
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Contracts/Tools.php
    @@ -0,0 +1,315 @@
    +" . self::_arr2xml($data) . "";
    +    }
    +
    +    /**
    +     * XML内容生成
    +     * @param array $data 数据
    +     * @param string $content
    +     * @return string
    +     */
    +    private static function _arr2xml($data, $content = '')
    +    {
    +        foreach ($data as $key => $val) {
    +            is_numeric($key) && $key = 'item';
    +            $content .= "<{$key}>";
    +            if (is_array($val) || is_object($val)) {
    +                $content .= self::_arr2xml($val);
    +            } elseif (is_string($val)) {
    +                $content .= '';
    +            } else {
    +                $content .= $val;
    +            }
    +            $content .= "";
    +        }
    +        return $content;
    +    }
    +
    +    /**
    +     * 解析XML内容到数组
    +     * @param string $xml
    +     * @return array
    +     */
    +    public static function xml2arr($xml)
    +    {
    +        return json_decode(self::arr2json(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
    +    }
    +
    +    /**
    +     * 数组转xml内容
    +     * @param array $data
    +     * @return null|string|string
    +     */
    +    public static function arr2json($data)
    +    {
    +        return preg_replace_callback('/\\\\u([0-9a-f]{4})/i', function ($matches) {
    +            return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");
    +        }, json_encode($data));
    +    }
    +
    +    /**
    +     * 解析JSON内容到数组
    +     * @param string $json
    +     * @return array
    +     * @throws InvalidResponseException
    +     */
    +    public static function json2arr($json)
    +    {
    +        $result = json_decode($json, true);
    +        if (empty($result)) {
    +            throw new InvalidResponseException('invalid response.', '0');
    +        }
    +        if (!empty($result['errcode'])) {
    +            throw new InvalidResponseException($result['errmsg'], $result['errcode'], $result);
    +        }
    +        return $result;
    +    }
    +
    +    /**
    +     * 以get访问模拟访问
    +     * @param string $url 访问URL
    +     * @param array $query GET数
    +     * @param array $options
    +     * @return bool|string
    +     */
    +    public static function get($url, $query = [], $options = [])
    +    {
    +        $options['query'] = $query;
    +        return self::doRequest('get', $url, $options);
    +    }
    +
    +    /**
    +     * 以post访问模拟访问
    +     * @param string $url 访问URL
    +     * @param array $data POST数据
    +     * @param array $options
    +     * @return bool|string
    +     */
    +    public static function post($url, $data = [], $options = [])
    +    {
    +        $options['data'] = $data;
    +        return self::doRequest('post', $url, $options);
    +    }
    +
    +    /**
    +     * CURL模拟网络请求
    +     * @param string $method 请求方法
    +     * @param string $url 请求方法
    +     * @param array $options 请求参数[headers,data,ssl_cer,ssl_key]
    +     * @return bool|string
    +     */
    +    protected static function doRequest($method, $url, $options = [])
    +    {
    +        $curl = curl_init();
    +        // GET参数设置
    +        if (!empty($options['query'])) {
    +            $url .= (stripos($url, '?') !== false ? '&' : '?') . http_build_query($options['query']);
    +        }
    +        // CURL头信息设置
    +        if (!empty($options['headers'])) {
    +            curl_setopt($curl, CURLOPT_HTTPHEADER, $options['headers']);
    +        }
    +        // POST数据设置
    +        if (strtolower($method) === 'post') {
    +            curl_setopt($curl, CURLOPT_POST, true);
    +            curl_setopt($curl, CURLOPT_POSTFIELDS, $options['data']);
    +        }
    +        // 证书文件设置
    +        if (!empty($options['ssl_cer'])) {
    +            if (file_exists($options['ssl_cer'])) {
    +                curl_setopt($curl, CURLOPT_SSLCERTTYPE, 'PEM');
    +                curl_setopt($curl, CURLOPT_SSLCERT, $options['ssl_cer']);
    +            } else {
    +                throw new InvalidArgumentException("Certificate files that do not exist. --- [ssl_cer]");
    +            }
    +        }
    +        // 证书文件设置
    +        if (!empty($options['ssl_key'])) {
    +            if (file_exists($options['ssl_key'])) {
    +                curl_setopt($curl, CURLOPT_SSLKEYTYPE, 'PEM');
    +                curl_setopt($curl, CURLOPT_SSLKEY, $options['ssl_key']);
    +            } else {
    +                throw new InvalidArgumentException("Certificate files that do not exist. --- [ssl_key]");
    +            }
    +        }
    +        curl_setopt($curl, CURLOPT_URL, $url);
    +        curl_setopt($curl, CURLOPT_TIMEOUT, 60);
    +        curl_setopt($curl, CURLOPT_HEADER, false);
    +        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    +        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    +        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    +        list($content, $status) = [curl_exec($curl), curl_getinfo($curl), curl_close($curl)];
    +        return (intval($status["http_code"]) === 200) ? $content : false;
    +    }
    +
    +    /**
    +     * 缓存配置与存储
    +     * @param string $name 缓存名称
    +     * @param string $value 缓存内容
    +     * @param int $expired 缓存时间(0表示永久缓存)
    +     * @throws LocalCacheException
    +     */
    +    public static function setCache($name, $value = '', $expired = 3600)
    +    {
    +        $cache_file = self::getCacheName($name);
    +        $content = serialize(['name' => $name, 'value' => $value, 'expired' => time() + intval($expired)]);
    +        if (!file_put_contents($cache_file, $content)) {
    +            throw new LocalCacheException('local cache error.', '0');
    +        }
    +    }
    +
    +    /**
    +     * 获取缓存内容
    +     * @param string $name 缓存名称
    +     * @return null|mixed
    +     */
    +    public static function getCache($name)
    +    {
    +        $cache_file = self::getCacheName($name);
    +        if (file_exists($cache_file) && ($content = file_get_contents($cache_file))) {
    +            $data = unserialize($content);
    +            if (isset($data['expired']) && (intval($data['expired']) === 0 || intval($data['expired']) >= time())) {
    +                return $data['value'];
    +            }
    +            self::delCache($name);
    +        }
    +        return null;
    +    }
    +
    +    /**
    +     * 移除缓存文件
    +     * @param string $name 缓存名称
    +     * @return bool
    +     */
    +    public static function delCache($name)
    +    {
    +        $cache_file = self::getCacheName($name);
    +        return file_exists($cache_file) ? unlink($cache_file) : true;
    +    }
    +
    +    /**
    +     * 应用缓存目录
    +     * @param string $name
    +     * @return string
    +     */
    +    private static function getCacheName($name)
    +    {
    +        if (empty(self::$cache_path)) {
    +            self::$cache_path = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'Cache' . DIRECTORY_SEPARATOR;
    +        }
    +        self::$cache_path = rtrim(self::$cache_path, '/\\') . DIRECTORY_SEPARATOR;
    +        file_exists(self::$cache_path) || mkdir(self::$cache_path, 0755, true);
    +        return self::$cache_path . $name;
    +    }
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Custom.php b/vendor/zoujingli/wechat-developer/WeChat/Custom.php
    new file mode 100644
    index 000000000..bdd288781
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Custom.php
    @@ -0,0 +1,251 @@
    + $kf_account, 'nickname' => $nickname, 'password' => $password];
    +        $url = "https://api.weixin.qq.com/customservice/kfaccount/add?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 修改客服帐号
    +     * @param string $kf_account 客服账号
    +     * @param string $nickname 客服昵称
    +     * @param string $password 账号密码
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function updateAccount($kf_account, $nickname, $password)
    +    {
    +        $data = ['kf_account' => $kf_account, 'nickname' => $nickname, 'password' => $password];
    +        $url = "https://api.weixin.qq.com/customservice/kfaccount/update?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 删除客服帐号
    +     * @param string $kf_account 客服账号
    +     * @param string $nickname 客服昵称
    +     * @param string $password 账号密码
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function deleteAccount($kf_account, $nickname, $password)
    +    {
    +        $data = ['kf_account' => $kf_account, 'nickname' => $nickname, 'password' => $password];
    +        $url = "https://api.weixin.qq.com/customservice/kfaccount/del?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 邀请绑定客服帐号
    +     * @param string $kf_account 完整客服帐号,格式为:帐号前缀@公众号微信号
    +     * @param string $invite_wx 接收绑定邀请的客服微信号
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function inviteworker($kf_account, $invite_wx)
    +    {
    +        $url = 'https://api.weixin.qq.com/customservice/kfaccount/inviteworker?access_token=ACCESS_TOKEN';
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->callPostApi($url, ['kf_account' => $kf_account, 'invite_wx' => $invite_wx]);
    +    }
    +
    +    /**
    +     * 获取所有客服账号
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getAccountList()
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/customservice/getkflist?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpGetForJson($url);
    +    }
    +
    +    /**
    +     * 设置客服帐号的头像
    +     * @param string $kf_account 客户账号
    +     * @param string $image 头像文件位置
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function uploadHeadimg($kf_account, $image)
    +    {
    +        $url = "http://api.weixin.qq.com/customservice/kfaccount/uploadheadimg?access_token=ACCESS_TOKEN&kf_account={$kf_account}";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['media' => Tools::createCurlFile($image)]);
    +    }
    +
    +    /**
    +     * 客服接口-发消息
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function send(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 客服输入状态
    +     * @param string $openid 普通用户(openid)
    +     * @param string $command Typing:正在输入,CancelTyping:取消正在输入
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function typing($openid, $command = 'Typing')
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/message/custom/typing?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['touser' => $openid, 'command' => $command]);
    +    }
    +
    +    /**
    +     * 根据标签进行群发【订阅号与服务号认证后均可用】
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function massSendAll(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 根据OpenID列表群发【订阅号不可用,服务号认证后可用】
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function massSend(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 删除群发【订阅号与服务号认证后均可用】
    +     * @param integer $msg_id 发送出去的消息ID
    +     * @param null|integer $article_idx 要删除的文章在图文消息中的位置,第一篇编号为1,该字段不填或填0会删除全部文章
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function massDelete($msg_id, $article_idx = null)
    +    {
    +        $data = ['msg_id' => $msg_id];
    +        is_null($article_idx) || $data['article_idx'] = $article_idx;
    +        $url = "https://api.weixin.qq.com/cgi-bin/message/mass/delete?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 预览接口【订阅号与服务号认证后均可用】
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function massPreview(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 查询群发消息发送状态【订阅号与服务号认证后均可用】
    +     * @param integer $msg_id 群发消息后返回的消息id
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function massGet($msg_id)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/message/mass/get?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['msg_id' => $msg_id]);
    +    }
    +
    +    /**
    +     * 获取群发速度
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function massGetSeed()
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/message/mass/speed/get?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, []);
    +    }
    +
    +    /**
    +     * 设置群发速度
    +     * @param integer $speed 群发速度的级别
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function massSetSeed($speed)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/message/mass/speed/set?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['speed' => $speed]);
    +    }
    +
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Exceptions/InvalidArgumentException.php b/vendor/zoujingli/wechat-developer/WeChat/Exceptions/InvalidArgumentException.php
    new file mode 100644
    index 000000000..993c4e008
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Exceptions/InvalidArgumentException.php
    @@ -0,0 +1,40 @@
    +raw = $raw;
    +    }
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Exceptions/InvalidDecryptException.php b/vendor/zoujingli/wechat-developer/WeChat/Exceptions/InvalidDecryptException.php
    new file mode 100644
    index 000000000..f45c0581e
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Exceptions/InvalidDecryptException.php
    @@ -0,0 +1,40 @@
    +raw = $raw;
    +    }
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Exceptions/InvalidResponseException.php b/vendor/zoujingli/wechat-developer/WeChat/Exceptions/InvalidResponseException.php
    new file mode 100644
    index 000000000..c3cb89267
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Exceptions/InvalidResponseException.php
    @@ -0,0 +1,41 @@
    +raw = $raw;
    +    }
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Exceptions/LocalCacheException.php b/vendor/zoujingli/wechat-developer/WeChat/Exceptions/LocalCacheException.php
    new file mode 100644
    index 000000000..35be83a8d
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Exceptions/LocalCacheException.php
    @@ -0,0 +1,42 @@
    +raw = $raw;
    +    }
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Limit.php b/vendor/zoujingli/wechat-developer/WeChat/Limit.php
    new file mode 100644
    index 000000000..ebd56d3b9
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Limit.php
    @@ -0,0 +1,42 @@
    +registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->callPostApi($url, ['appid' => $this->config->get('appid')]);
    +    }
    +
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Media.php b/vendor/zoujingli/wechat-developer/WeChat/Media.php
    new file mode 100644
    index 000000000..7dd85119f
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Media.php
    @@ -0,0 +1,183 @@
    +registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['media' => Tools::createCurlFile($filename)], false);
    +    }
    +
    +    /**
    +     * 获取临时素材
    +     * @param string $media_id
    +     * @return bool|string
    +     * @throws Exceptions\LocalCacheException
    +     * @throws InvalidResponseException
    +     */
    +    public function get($media_id)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id={$media_id}";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return Tools::get($url);
    +    }
    +
    +    /**
    +     * 新增图文素材
    +     * @param array $data 文件名称
    +     * @return array
    +     * @throws Exceptions\LocalCacheException
    +     * @throws InvalidResponseException
    +     */
    +    public function addNews($data)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 更新图文素材
    +     * @param string $media_id 要修改的图文消息的id
    +     * @param int $index 要更新的文章在图文消息中的位置(多图文消息时,此字段才有意义),第一篇为0
    +     * @param array $news 文章内容
    +     * @return array
    +     * @throws Exceptions\LocalCacheException
    +     * @throws InvalidResponseException
    +     */
    +    public function updateNews($media_id, $index, $news)
    +    {
    +        $data = ['media_id' => $media_id, 'index' => $index, 'articles' => $news];
    +        $url = "https://api.weixin.qq.com/cgi-bin/material/update_news?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 上传图文消息内的图片获取URL
    +     * @param string $filename
    +     * @return array
    +     * @throws Exceptions\LocalCacheException
    +     * @throws InvalidResponseException
    +     */
    +    public function uploadImg($filename)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['media' => Tools::createCurlFile($filename)], false);
    +    }
    +
    +    /**
    +     * 新增其他类型永久素材
    +     * @param string $filename 文件名称
    +     * @param string $type 媒体文件类型(image|voice|video|thumb)
    +     * @param array $description 包含素材的描述信息
    +     * @return array
    +     * @throws Exceptions\LocalCacheException
    +     * @throws InvalidResponseException
    +     */
    +    public function addMaterial($filename, $type = 'image', $description = [])
    +    {
    +        if (!in_array($type, ['image', 'voice', 'video', 'thumb'])) {
    +            throw new InvalidResponseException('Invalid Media Type.', '0');
    +        }
    +        $url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type={$type}";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['media' => Tools::createCurlFile($filename), 'description' => Tools::arr2json($description)], false);
    +    }
    +
    +    /**
    +     * 获取永久素材
    +     * @param string $media_id
    +     * @return array
    +     * @throws Exceptions\LocalCacheException
    +     * @throws InvalidResponseException
    +     */
    +    public function getMaterial($media_id)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/material/get_material?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['media_id' => $media_id]);
    +    }
    +
    +    /**
    +     * 删除永久素材
    +     * @param string $media_id
    +     * @return array
    +     * @throws Exceptions\LocalCacheException
    +     * @throws InvalidResponseException
    +     */
    +    public function delMaterial($media_id)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/material/del_material?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['media_id' => $media_id]);
    +    }
    +
    +    /**
    +     * 获取素材总数
    +     * @return array
    +     * @throws Exceptions\LocalCacheException
    +     * @throws InvalidResponseException
    +     */
    +    public function getMaterialCount()
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/material/get_materialcount?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpGetForJson($url);
    +    }
    +
    +    /**
    +     * 获取素材列表
    +     * @param string $type
    +     * @param int $offset
    +     * @param int $count
    +     * @return array
    +     * @throws Exceptions\LocalCacheException
    +     * @throws InvalidResponseException
    +     */
    +    public function batchGetMaterial($type = 'image', $offset = 0, $count = 20)
    +    {
    +        if (!in_array($type, ['image', 'voice', 'video', 'news'])) {
    +            throw new InvalidResponseException('Invalid Media Type.', '0');
    +        }
    +        $url = "https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['type' => $type, 'offset' => $offset, 'count' => $count]);
    +    }
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Menu.php b/vendor/zoujingli/wechat-developer/WeChat/Menu.php
    new file mode 100644
    index 000000000..8e8fe4e5f
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Menu.php
    @@ -0,0 +1,112 @@
    +registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpGetForJson($url);
    +    }
    +
    +    /**
    +     * 自定义菜单删除接口
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function delete()
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpGetForJson($url);
    +    }
    +
    +    /**
    +     * 自定义菜单创建
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function create(array $data)
    +    {
    +        try {
    +        } catch (\Exception $e) {
    +        }
    +        $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 创建个性化菜单
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function addConditional(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/menu/addconditional?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 删除个性化菜单
    +     * @param string $menuid
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function delConditional($menuid)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/menu/delconditional?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['menuid' => $menuid]);
    +    }
    +
    +    /**
    +     * 测试个性化菜单匹配结果
    +     * @param string $openid
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function tryConditional($openid)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/menu/trymatch?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['user_id' => $openid]);
    +    }
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Oauth.php b/vendor/zoujingli/wechat-developer/WeChat/Oauth.php
    new file mode 100644
    index 000000000..6ee8fc892
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Oauth.php
    @@ -0,0 +1,91 @@
    +config->get('appid');
    +        $redirect_uri = urlencode($redirect_url);
    +        return "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$appid}&redirect_uri={$redirect_uri}&response_type=code&scope={$scope}&state={$state}#wechat_redirect";
    +    }
    +
    +    /**
    +     * 通过 code 获取 AccessToken 和 openid
    +     * @return bool|array
    +     */
    +    public function getOauthAccessToken()
    +    {
    +        $appid = $this->config->get('appid');
    +        $appsecret = $this->config->get('appsecret');
    +        $code = isset($_GET['code']) ? $_GET['code'] : '';
    +        $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appid}&secret={$appsecret}&code={$code}&grant_type=authorization_code";
    +        return $this->httpGetForJson($url);
    +    }
    +
    +    /**
    +     * 刷新AccessToken并续期
    +     * @param string $refresh_token
    +     * @return bool|array
    +     */
    +    public function getOauthRefreshToken($refresh_token)
    +    {
    +        $appid = $this->config->get('appid');
    +        $url = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid={$appid}&grant_type=refresh_token&refresh_token={$refresh_token}";
    +        return $this->httpGetForJson($url);
    +    }
    +
    +    /**
    +     * 检验授权凭证(access_token)是否有效
    +     * @param string $access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
    +     * @param string $openid 用户的唯一标识
    +     * @return array
    +     */
    +    public function checkOauthAccessToken($access_token, $openid)
    +    {
    +        $url = "https://api.weixin.qq.com/sns/auth?access_token={$access_token}&openid={$openid}";
    +        return $this->httpGetForJson($url);
    +    }
    +
    +    /**
    +     * 拉取用户信息(需scope为 snsapi_userinfo)
    +     * @param string $access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
    +     * @param string $openid 用户的唯一标识
    +     * @param string $lang 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语
    +     * @return array
    +     */
    +    public function getUserInfo($access_token, $openid, $lang = 'zh_CN')
    +    {
    +        $url = "https://api.weixin.qq.com/sns/userinfo?access_token={$access_token}&openid={$openid}&lang={$lang}";
    +        return $this->httpGetForJson($url);
    +    }
    +
    +}
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Pay.php b/vendor/zoujingli/wechat-developer/WeChat/Pay.php
    new file mode 100644
    index 000000000..f5c4ab974
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Pay.php
    @@ -0,0 +1,283 @@
    +config = new DataArray($options);
    +        $this->params = new DataArray([
    +            'appid'     => $this->config->get('appid'),
    +            'mch_id'    => $this->config->get('mch_id'),
    +            'nonce_str' => Tools::createNoncestr(),
    +        ]);
    +    }
    +
    +    /**
    +     * 统一下单
    +     * @param array $options
    +     * @return array
    +     * @throws InvalidResponseException
    +     */
    +    public function createOrder(array $options)
    +    {
    +        $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
    +        return $this->callPostApi($url, $options);
    +    }
    +
    +    /**
    +     * 查询订单
    +     * @param array $options
    +     * @return array
    +     * @throws InvalidResponseException
    +     */
    +    public function queryOrder(array $options)
    +    {
    +        $url = 'https://api.mch.weixin.qq.com/pay/orderquery';
    +        return $this->callPostApi($url, $options);
    +    }
    +
    +    /**
    +     * 关闭订单
    +     * @param string $out_trade_no 商户订单号
    +     * @return array
    +     * @throws InvalidResponseException
    +     */
    +    public function closeOrder($out_trade_no)
    +    {
    +        $url = 'https://api.mch.weixin.qq.com/pay/closeorder';
    +        return $this->callPostApi($url, ['out_trade_no' => $out_trade_no]);
    +    }
    +
    +    /**
    +     * 申请退款
    +     * @param array $options
    +     * @return array
    +     * @throws InvalidResponseException
    +     */
    +    public function createRefund(array $options)
    +    {
    +        $url = 'https://api.mch.weixin.qq.com/secapi/pay/refund';
    +        return $this->callPostApi($url, $options, true);
    +    }
    +
    +    /**
    +     * 查询退款
    +     * @param array $options
    +     * @return array
    +     * @throws InvalidResponseException
    +     */
    +    public function queryRefund(array $options)
    +    {
    +        $url = 'https://api.mch.weixin.qq.com/pay/refundquery';
    +        return $this->callPostApi($url, $options);
    +    }
    +
    +    /**
    +     * 交易保障
    +     * @param array $options
    +     * @return array
    +     * @throws InvalidResponseException
    +     */
    +    public function report(array $options)
    +    {
    +        $url = 'https://api.mch.weixin.qq.com/payitil/report';
    +        return $this->callPostApi($url, $options);
    +    }
    +
    +    /**
    +     * 授权码查询openid
    +     * @param string $authCode 扫码支付授权码,设备读取用户微信中的条码或者二维码信息
    +     * @return array
    +     * @throws InvalidResponseException
    +     */
    +    public function queryAuthCode($authCode)
    +    {
    +        $url = 'https://api.mch.weixin.qq.com/tools/authcodetoopenid';
    +        return $this->callPostApi($url, ['auth_code' => $authCode]);
    +    }
    +
    +    /**
    +     * 转换短链接
    +     * @param string $longUrl 需要转换的URL,签名用原串,传输需URLencode
    +     * @return array
    +     * @throws InvalidResponseException
    +     */
    +    public function shortUrl($longUrl)
    +    {
    +        $url = 'https://api.mch.weixin.qq.com/tools/shorturl';
    +        return $this->callPostApi($url, ['long_url' => $longUrl]);
    +    }
    +
    +    /**
    +     * 下载对账单
    +     * @param array $options
    +     * @return array
    +     * @throws InvalidResponseException
    +     */
    +    public function billDownload(array $options)
    +    {
    +        $url = 'https://api.mch.weixin.qq.com/pay/downloadbill';
    +        return $this->callPostApi($url, $options);
    +    }
    +
    +
    +    /**
    +     * 拉取订单评价数据
    +     * @param array $options
    +     * @return array
    +     * @throws InvalidResponseException
    +     */
    +    public function billCommtent(array $options)
    +    {
    +        $url = 'https://api.mch.weixin.qq.com/billcommentsp/batchquerycomment';
    +        return $this->callPostApi($url, $options, true);
    +    }
    +
    +    /**
    +     * 企业付款到零钱
    +     * @param array $options
    +     * @return array
    +     * @throws InvalidResponseException
    +     */
    +    public function createTransfers(array $options)
    +    {
    +        $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
    +        return $this->callPostApi($url, $options, true, 'MD5', false);
    +    }
    +
    +    /**
    +     * 查询企业付款到零钱
    +     * @param string $partner_trade_no 商户调用企业付款API时使用的商户订单号
    +     * @return array
    +     * @throws InvalidResponseException
    +     */
    +    public function queryTransfers($partner_trade_no)
    +    {
    +        $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo';
    +        return $this->callPostApi($url, ['partner_trade_no' => $partner_trade_no], true, 'MD5', false);
    +    }
    +
    +    /**
    +     * 获取微信支付通知
    +     * @return array
    +     * @throws InvalidResponseException
    +     */
    +    public function getNotify()
    +    {
    +        $data = Tools::xml2arr(file_get_contents('php://input'));
    +        if (!empty($data['sign'])) {
    +            if ($this->getPaySign($data) === $data['sign']) {
    +                return $data;
    +            }
    +        }
    +        throw new InvalidResponseException('Invalid Notify.', '0');
    +    }
    +
    +    /**
    +     * 生成支付签名
    +     * @param array $data
    +     * @param string $signType
    +     * @return string
    +     */
    +    public function getPaySign(array $data, $signType = 'MD5')
    +    {
    +        unset($data['sign']);
    +        ksort($data);
    +        list($key, $str) = [$this->config->get('mch_key'), ''];
    +        foreach ($data as $k => $v) {
    +            $str .= "{$k}={$v}&";
    +        }
    +        if ($signType === 'MD5') {
    +            return strtoupper(md5("{$str}key={$key}"));
    +        }
    +        return strtoupper(hash_hmac('SHA256', "{$str}key={$key}", $key));
    +    }
    +
    +    /**
    +     * 以Post请求接口
    +     * @param string $url 请求
    +     * @param array $data 接口参数
    +     * @param bool $isCert 是否需要使用双向证书
    +     * @param string $signType 数据签名类型 MD5|SHA256
    +     * @param bool $needSignType 是否需要传签名类型参数
    +     * @return array
    +     * @throws InvalidResponseException
    +     */
    +    public function callPostApi($url, array $data, $isCert = false, $signType = 'HMAC-SHA256', $needSignType = true)
    +    {
    +        $option = [];
    +        if ($isCert) {
    +            foreach (['ssl_cer', 'ssl_key'] as $key) {
    +                if (empty($options[$key])) {
    +                    throw new InvalidArgumentException("Missing Config -- [{$key}]", '0');
    +                }
    +            }
    +            $option['ssl_cer'] = $this->config->get('ssl_cer');
    +            $option['ssl_key'] = $this->config->get('ssl_key');
    +        }
    +        $params = $this->params->merge($data);
    +        if ($needSignType) {
    +            $params['sign_type'] = strtoupper($signType);
    +        }
    +        $params['sign'] = $this->getPaySign($params, $signType);
    +        $result = Tools::xml2arr(Tools::post($url, Tools::arr2xml($params), $option));
    +        if ($result['return_code'] !== 'SUCCESS') {
    +            throw new InvalidResponseException($result['return_msg'], '0');
    +        }
    +        return $result;
    +    }
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Product.php b/vendor/zoujingli/wechat-developer/WeChat/Product.php
    new file mode 100644
    index 000000000..b1add210a
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Product.php
    @@ -0,0 +1,178 @@
    + $keystandard, 'keystr' => $keystr, 'status' => $status];
    +        $url = "https://api.weixin.qq.com/scan/product/modstatus?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 设置测试人员白名单
    +     * @param array $openids 测试人员的openid列表
    +     * @param array $usernames 测试人员的微信号列表
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function setTestWhiteList(array $openids = [], array $usernames = [])
    +    {
    +        $data = ['openid' => $openids, 'username' => $usernames];
    +        $url = "https://api.weixin.qq.com/scan/testwhitelist/set?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 获取商品二维码
    +     * @param string $keystandard 商品编码标准
    +     * @param string $keystr 商品编码内容
    +     * @param integer $qrcode_size 二维码的尺寸(整型),数值代表边长像素数,不填写默认值为100
    +     * @param array $extinfo 由商户自定义传入,建议仅使用大小写字母、数字及-_().*这6个常用字符
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getQrcode($keystandard, $keystr, $qrcode_size, $extinfo = [])
    +    {
    +        $data = ['keystandard' => $keystandard, 'keystr' => $keystr, 'qrcode_size' => $qrcode_size];
    +        empty($extinfo) || $data['extinfo'] = $extinfo;
    +        $url = "https://api.weixin.qq.com/scan/product/getqrcode?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 查询商品信息
    +     * @param string $keystandard 商品编码标准
    +     * @param string $keystr 商品编码内容
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getProduct($keystandard, $keystr)
    +    {
    +        $data = ['keystandard' => $keystandard, 'keystr' => $keystr];
    +        empty($extinfo) || $data['extinfo'] = $extinfo;
    +        $url = "https://api.weixin.qq.com/scan/product/get?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 批量查询商品信息
    +     * @param integer $offset 批量查询的起始位置,从0开始,包含该起始位置
    +     * @param integer $limit 批量查询的数量
    +     * @param null|string $status 支持按状态拉取。on为发布状态,off为未发布状态,check为审核中状态,reject为审核未通过状态,all为所有状态
    +     * @param string $keystr 支持按部分编码内容拉取。填写该参数后,可将编码内容中包含所传参数的商品信息拉出。类似关键词搜索
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getProductList($offset, $limit = 10, $status = null, $keystr = '')
    +    {
    +        $data = ['offset' => $offset, 'limit' => $limit];
    +        is_null($status) || $data['status'] = $status;
    +        empty($keystr) || $data['keystr'] = $keystr;
    +        $url = "https://api.weixin.qq.com/scan/product/get?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +
    +    /**
    +     * 更新商品信息
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function updateProduct(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/scan/product/update?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 清除商品信息
    +     * @param string $keystandard 商品编码标准
    +     * @param string $keystr 商品编码内容
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function clearProduct($keystandard, $keystr)
    +    {
    +        $url = "https://api.weixin.qq.com/scan/product/clear?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['keystandard' => $keystandard, 'keystr' => $keystr]);
    +    }
    +
    +
    +    /**
    +     * 检查wxticket参数
    +     * @param string $ticket
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function scanTicketCheck($ticket)
    +    {
    +        $url = "https://api.weixin.qq.com/scan/scanticket/check?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['ticket' => $ticket]);
    +    }
    +
    +    /**
    +     * 清除扫码记录
    +     * @param string $keystandard 商品编码标准
    +     * @param string $keystr 商品编码内容
    +     * @param string $extinfo 调用“获取商品二维码接口”时传入的extinfo,为标识参数
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function clearScanticket($keystandard, $keystr, $extinfo)
    +    {
    +        $data = ['keystandard' => $keystandard, 'keystr' => $keystr, 'extinfo' => $extinfo];
    +        $url = "https://api.weixin.qq.com/scan/scanticket/check?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Qrcode.php b/vendor/zoujingli/wechat-developer/WeChat/Qrcode.php
    new file mode 100644
    index 000000000..3b6251101
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Qrcode.php
    @@ -0,0 +1,77 @@
    + ['scene' => ['scene_id' => $scene]]];
    +        } else {
    +            $data = ['action_info' => ['scene' => ['scene_str' => $scene]]];
    +        }
    +        if ($expire_seconds > 0) { // 临时二维码
    +            $data['expire_seconds'] = $expire_seconds;
    +            $data['action_name'] = is_integer($scene) ? 'QR_SCENE' : 'QR_STR_SCENE';
    +        } else { // 永久二维码
    +            $data['action_name'] = is_integer($scene) ? 'QR_LIMIT_SCENE' : 'QR_LIMIT_STR_SCENE';
    +        }
    +        $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 通过ticket换取二维码
    +     * @param string $ticket 获取的二维码ticket,凭借此ticket可以在有效时间内换取二维码。
    +     * @return string
    +     */
    +    public function url($ticket)
    +    {
    +        return "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={$ticket}";
    +    }
    +
    +    /**
    +     * 长链接转短链接接口
    +     * @param string $longUrl 需要转换的长链接
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function shortUrl($longUrl)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/shorturl?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['action' => 'long2short', 'long_url' => $longUrl]);
    +    }
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Receive.php b/vendor/zoujingli/wechat-developer/WeChat/Receive.php
    new file mode 100644
    index 000000000..7f4d07006
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Receive.php
    @@ -0,0 +1,164 @@
    +message = [
    +            'CreateTime'   => time(),
    +            'ToUserName'   => $this->getOpenid(),
    +            'FromUserName' => $this->getToOpenid(),
    +            'MsgType'      => 'transfer_customer_service',
    +        ];
    +        empty($account) || $this->message['TransInfo'] = ['KfAccount' => $account];
    +        return $this;
    +    }
    +
    +    /**
    +     * 设置文本消息
    +     * @param string $content 文本内容
    +     * @return $this
    +     */
    +    public function text($content = '')
    +    {
    +        $this->message = [
    +            'MsgType'      => 'text',
    +            'CreateTime'   => time(),
    +            'Content'      => $content,
    +            'ToUserName'   => $this->getOpenid(),
    +            'FromUserName' => $this->getToOpenid(),
    +        ];
    +        return $this;
    +    }
    +
    +    /**
    +     * 设置回复图文
    +     * @param array $newsData
    +     * @return $this
    +     */
    +    public function news($newsData = [])
    +    {
    +        $this->message = [
    +            'CreateTime'   => time(),
    +            'MsgType'      => 'news',
    +            'Articles'     => $newsData,
    +            'ToUserName'   => $this->getOpenid(),
    +            'FromUserName' => $this->getToOpenid(),
    +            'ArticleCount' => count($newsData),
    +        ];
    +        return $this;
    +    }
    +
    +    /**
    +     * 设置图片消息
    +     * @param string $mediaId 图片媒体ID
    +     * @return $this
    +     */
    +    public function image($mediaId = '')
    +    {
    +        $this->message = [
    +            'MsgType'      => 'image',
    +            'CreateTime'   => time(),
    +            'ToUserName'   => $this->getOpenid(),
    +            'FromUserName' => $this->getToOpenid(),
    +            'Image'        => ['MediaId' => $mediaId],
    +        ];
    +        return $this;
    +    }
    +
    +    /**
    +     * 设置语音回复消息
    +     * @param string $mediaid 语音媒体ID
    +     * @return $this
    +     */
    +    public function voice($mediaid = '')
    +    {
    +        $this->message = [
    +            'CreateTime'   => time(),
    +            'MsgType'      => 'voice',
    +            'ToUserName'   => $this->getOpenid(),
    +            'FromUserName' => $this->getToOpenid(),
    +            'Voice'        => ['MediaId' => $mediaid],
    +        ];
    +        return $this;
    +    }
    +
    +    /**
    +     * 设置视频回复消息
    +     * @param string $mediaid 视频媒体ID
    +     * @param string $title 视频标题
    +     * @param string $description 视频描述
    +     * @return $this
    +     */
    +    public function video($mediaid = '', $title = '', $description = '')
    +    {
    +        $this->message = [
    +            'CreateTime'   => time(),
    +            'MsgType'      => 'video',
    +            'ToUserName'   => $this->getOpenid(),
    +            'FromUserName' => $this->getToOpenid(),
    +            'Video'        => [
    +                'Title'       => $title,
    +                'MediaId'     => $mediaid,
    +                'Description' => $description,
    +            ],
    +        ];
    +        return $this;
    +    }
    +
    +    /**
    +     * 设置音乐回复消息
    +     * @param string $title 音乐标题
    +     * @param string $desc 音乐描述
    +     * @param string $musicurl 音乐地址
    +     * @param string $hgmusicurl 高清音乐地址
    +     * @param string $thumbmediaid 音乐图片缩略图的媒体id(可选)
    +     * @return $this
    +     */
    +    public function music($title, $desc, $musicurl, $hgmusicurl = '', $thumbmediaid = '')
    +    {
    +        $this->message = [
    +            'CreateTime'   => time(),
    +            'MsgType'      => 'music',
    +            'ToUserName'   => $this->getOpenid(),
    +            'FromUserName' => $this->getToOpenid(),
    +            'Music'        => [
    +                'Title'       => $title,
    +                'Description' => $desc,
    +                'MusicUrl'    => $musicurl,
    +                'HQMusicUrl'  => $hgmusicurl,
    +            ],
    +        ];
    +        if ($thumbmediaid) {
    +            $this->message['Music']['ThumbMediaId'] = $thumbmediaid;
    +        }
    +        return $this;
    +    }
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Scan.php b/vendor/zoujingli/wechat-developer/WeChat/Scan.php
    new file mode 100644
    index 000000000..ad272eb43
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Scan.php
    @@ -0,0 +1,199 @@
    +registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpGetForJson($url);
    +    }
    +
    +    /**
    +     * 创建商品
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function addProduct(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/scan/product/create?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 商品发布
    +     * @param string $keystandard 商品编码标准
    +     * @param string $keystr 商品编码内容
    +     * @param string $status 设置发布状态。on为提交审核,off为取消发布
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function modProduct($keystandard, $keystr, $status = 'on')
    +    {
    +        $data = ['keystandard' => $keystandard, 'keystr' => $keystr, 'status' => $status];
    +        $url = "https://api.weixin.qq.com/scan/product/modstatus?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 设置测试人员白名单
    +     * @param array $openids 测试人员的openid列表
    +     * @param array $usernames 测试人员的微信号列表
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function setTestWhiteList($openids = [], $usernames = [])
    +    {
    +        $data = ['openid' => $openids, 'username' => $usernames];
    +        $url = "https://api.weixin.qq.com/scan/product/modstatus?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 获取商品二维码
    +     * @param string $keystandard
    +     * @param string $keystr
    +     * @param null|string $extinfo
    +     * @param integer $qrcode_size
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getQrc($keystandard, $keystr, $extinfo = null, $qrcode_size = 64)
    +    {
    +        $data = ['keystandard' => $keystandard, 'keystr' => $keystr, 'qrcode_size' => $qrcode_size];
    +        is_null($extinfo) || $data['extinfo'] = $extinfo;
    +        $url = "https://api.weixin.qq.com/scan/product/getqrcode?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 查询商品信息
    +     * @param string $keystandard 商品编码标准
    +     * @param string $keystr 商品编码内容
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getProductInfo($keystandard, $keystr)
    +    {
    +        $url = "https://api.weixin.qq.com/scan/product/get?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['keystandard' => $keystandard, 'keystr' => $keystr]);
    +    }
    +
    +    /**
    +     * 批量查询商品信息
    +     * @param integer $offset 批量查询的起始位置,从0开始,包含该起始位置。
    +     * @param integer $limit 批量查询的数量。
    +     * @param string $status 支持按状态拉取。on为发布状态,off为未发布状态,check为审核中状态,reject为审核未通过状态,all为所有状态。
    +     * @param string $keystr 支持按部分编码内容拉取。填写该参数后,可将编码内容中包含所传参数的商品信息拉出。类似关键词搜索。
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getProductList($offset = 1, $limit = 10, $status = null, $keystr = null)
    +    {
    +        $data = ['offset' => $offset, 'limit' => $limit];
    +        is_null($status) || $data['status'] = $status;
    +        is_null($keystr) || $data['keystr'] = $keystr;
    +        $url = "https://api.weixin.qq.com/scan/product/getlist?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 更新商品信息
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function updateProduct(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/scan/product/update?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 清除商品信息
    +     * @param string $keystandard 商品编码标准
    +     * @param string $keystr 商品编码内容
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function clearProduct($keystandard, $keystr)
    +    {
    +        $url = "https://api.weixin.qq.com/scan/product/clear?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['keystandard' => $keystandard, 'keystr' => $keystr]);
    +    }
    +
    +    /**
    +     * 检查wxticket参数
    +     * @param string $ticket
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function checkTicket($ticket)
    +    {
    +        $url = "https://api.weixin.qq.com/scan/scanticket/check?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['ticket' => $ticket]);
    +    }
    +
    +    /**
    +     * 清除扫码记录
    +     * @param string $keystandard 商品编码标准
    +     * @param string $keystr 商品编码内容
    +     * @param string $extinfo 调用“获取商品二维码接口”时传入的extinfo,为标识参数
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function clearScanTicket($keystandard, $keystr, $extinfo)
    +    {
    +        $url = "https://api.weixin.qq.com/scan/scanticket/check?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['keystandard' => $keystandard, 'keystr' => $keystr, 'extinfo' => $extinfo]);
    +    }
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Script.php b/vendor/zoujingli/wechat-developer/WeChat/Script.php
    new file mode 100644
    index 000000000..a8a664d0f
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Script.php
    @@ -0,0 +1,121 @@
    +config->get('appid');
    +        $cache_name = "{$appid}_ticket_{$type}";
    +        Tools::delCache($cache_name);
    +    }
    +
    +    /**
    +     * 获取JSAPI_TICKET接口
    +     * @param string $type TICKET类型(wx_card|jsapi)
    +     * @param string $appid 强制指定有效APPID
    +     * @return string
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getTicket($type = 'jsapi', $appid = null)
    +    {
    +        is_null($appid) && $appid = $this->config->get('appid');
    +        $cache_name = "{$appid}_ticket_{$type}";
    +        $ticket = Tools::getCache($cache_name);
    +        if (empty($ticket)) {
    +            $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type={$type}";
    +            $this->registerApi($url, __FUNCTION__, func_get_args());
    +            $result = $this->httpGetForJson($url);
    +            if (empty($result['ticket'])) {
    +                throw new InvalidResponseException('Invalid Resoponse Ticket.', '0');
    +            }
    +            $ticket = $result['ticket'];
    +            Tools::setCache($cache_name, $ticket, 5000);
    +        }
    +        return $ticket;
    +    }
    +
    +    /**
    +     * 获取JsApi使用签名
    +     * @param string $url 网页的URL
    +     * @param string $appid 用于多个appid时使用(可空)
    +     * @param string $ticket 强制指定ticket
    +     * @return array
    +     * @throws Exceptions\LocalCacheException
    +     * @throws InvalidResponseException
    +     */
    +    public function getJsSign($url, $appid = null, $ticket = null)
    +    {
    +        list($url,) = explode('#', $url);
    +        is_null($ticket) && $ticket = $this->getTicket('jsapi');
    +        is_null($appid) && $appid = $this->config->get('appid');
    +        $data = ["url" => $url, "timestamp" => '' . time(), "jsapi_ticket" => $ticket, "noncestr" => Tools::createNoncestr(16)];
    +        return [
    +            'debug'     => false,
    +            "appId"     => $appid,
    +            "nonceStr"  => $data['noncestr'],
    +            "timestamp" => $data['timestamp'],
    +            "signature" => $this->getSignature($data, 'sha1'),
    +            'jsApiList' => [
    +                'onWXDeviceBluetoothStateChange', 'onWXDeviceStateChange',
    +                'openProductSpecificView', 'addCard', 'chooseCard', 'openCard',
    +                'translateVoice', 'getNetworkType', 'openLocation', 'getLocation',
    +                'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'onMenuShareQZone',
    +                'chooseImage', 'previewImage', 'uploadImage', 'downloadImage', 'closeWindow', 'scanQRCode', 'chooseWXPay',
    +                'hideOptionMenu', 'showOptionMenu', 'hideMenuItems', 'showMenuItems', 'hideAllNonBaseMenuItem', 'showAllNonBaseMenuItem',
    +                'startScanWXDevice', 'stopScanWXDevice', 'onWXDeviceBindStateChange', 'onScanWXDeviceResult', 'onReceiveDataFromWXDevice',
    +                'startRecord', 'stopRecord', 'onVoiceRecordEnd', 'playVoice', 'pauseVoice', 'stopVoice', 'onVoicePlayEnd', 'uploadVoice', 'downloadVoice',
    +                'openWXDeviceLib', 'closeWXDeviceLib', 'getWXDeviceInfos', 'sendDataToWXDevice', 'disconnectWXDevice', 'getWXDeviceTicket', 'connectWXDevice',
    +            ],
    +        ];
    +    }
    +
    +    /**
    +     * 数据生成签名
    +     * @param array $data 签名数组
    +     * @param string $method 签名方法
    +     * @return bool|string 签名值
    +     */
    +    protected function getSignature($data, $method = "sha1")
    +    {
    +        if (!function_exists($method)) {
    +            return false;
    +        }
    +        ksort($data);
    +        $params = [];
    +        foreach ($data as $key => $value) {
    +            $params[] = "{$key}={$value}";
    +        }
    +        return $method(join('&', $params));
    +    }
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Shake.php b/vendor/zoujingli/wechat-developer/WeChat/Shake.php
    new file mode 100644
    index 000000000..2d259581c
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Shake.php
    @@ -0,0 +1,364 @@
    +registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 查询审核状态
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function auditStatus()
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/account/auditstatus?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpGetForJson($url);
    +    }
    +
    +    /**
    +     * 申请设备ID
    +     * @param string $quantity 申请的设备ID的数量,单次新增设备超过500个,需走人工审核流程
    +     * @param string $apply_reason 申请理由,不超过100个汉字或200个英文字母
    +     * @param null|string $comment 备注,不超过15个汉字或30个英文字母
    +     * @param null|string $poi_id 设备关联的门店ID,关联门店后,在门店1KM的范围内有优先摇出信息的机会。
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function createApply($quantity, $apply_reason, $comment = null, $poi_id = null)
    +    {
    +        $data = ['quantity' => $quantity, 'apply_reason' => $apply_reason];
    +        is_null($poi_id) || $data['poi_id'] = $poi_id;
    +        is_null($comment) || $data['comment'] = $comment;
    +        $url = "https://api.weixin.qq.com/shakearound/device/applyid?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 查询设备ID申请审核状态
    +     * @param integer $applyId 批次ID,申请设备ID时所返回的批次ID
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getApplyStatus($applyId)
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/device/applyid?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['apply_id' => $applyId]);
    +    }
    +
    +    /**
    +     * 编辑设备信息
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function updateApply(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/device/update?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 配置设备与门店的关联关系
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function bindLocation(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/device/bindlocation?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 查询设备列表
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function search(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/device/search?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 页面管理
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function createPage(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/page/add?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 编辑页面信息
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function updatePage(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/page/update?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 查询页面列表
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function searchPage(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/page/search?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 删除页面
    +     * @param integer page_id   指定页面的id
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function deletePage($page_id)
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/page/delete?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['page_id' => $page_id]);
    +    }
    +
    +    /**
    +     * 上传图片素材
    +     * @param string $filename 图片名字
    +     * @param string $type Icon:摇一摇页面展示的icon图;License:申请开通摇一摇周边功能时需上传的资质文件;若不传type,则默认type=icon
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function upload($filename, $type = 'icon')
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/material/add?access_token=ACCESS_TOKEN&type={$type}";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['media' => Tools::createCurlFile($filename)]);
    +    }
    +
    +    /**
    +     * 配置设备与页面的关联关系
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function bindPage(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/device/bindpage?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 查询设备与页面的关联关系
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function queryPage(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/relation/search?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 以设备为维度的数据统计接口
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function totalDevice(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/statistics/device?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 批量查询设备统计数据接口
    +     * @param integer $date 指定查询日期时间戳,单位为秒
    +     * @param integer $page_index 指定查询的结果页序号;返回结果按摇周边人数降序排序,每50条记录为一页
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function totalDeviceList($date, $page_index = 1)
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/statistics/devicelist?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['date' => $date, 'page_index' => $page_index]);
    +    }
    +
    +    /**
    +     * 以页面为维度的数据统计接口
    +     * @param integer $page_id 指定页面的设备ID
    +     * @param integer $begin_date 起始日期时间戳,最长时间跨度为30天,单位为秒
    +     * @param integer $end_date 结束日期时间戳,最长时间跨度为30天,单位为秒
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function totalPage($page_id, $begin_date, $end_date)
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/statistics/page?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['page_id' => $page_id, 'begin_date' => $begin_date, 'end_date' => $end_date]);
    +    }
    +
    +    /**
    +     * 编辑分组信息
    +     * @param integer $group_id 分组唯一标识,全局唯一
    +     * @param string $group_name 分组名称,不超过100汉字或200个英文字母
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function updateGroup($group_id, $group_name)
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/device/group/update?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['group_id' => $group_id, 'group_name' => $group_name]);
    +    }
    +
    +    /**
    +     * 删除分组
    +     * @param integer $group_id 分组唯一标识,全局唯一
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function deleteGroup($group_id)
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/device/group/delete?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['group_id' => $group_id]);
    +    }
    +
    +    /**
    +     * 查询分组列表
    +     * @param integer $begin 分组列表的起始索引值
    +     * @param integer $count 待查询的分组数量,不能超过1000个
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getGroupList($begin = 0, $count = 10)
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/device/group/getlist?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['begin' => $begin, 'count' => $count]);
    +    }
    +
    +
    +    /**
    +     * 查询分组详情
    +     * @param integer $group_id 分组唯一标识,全局唯一
    +     * @param integer $begin 分组里设备的起始索引值
    +     * @param integer $count 待查询的分组里设备的数量,不能超过1000个
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getGroupDetail($group_id, $begin = 0, $count = 100)
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/device/group/getdetail?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['group_id' => $group_id, 'begin' => $begin, 'count' => $count]);
    +    }
    +
    +    /**
    +     * 添加设备到分组
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function addDeviceGroup(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/device/group/adddevice?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 从分组中移除设备
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function deleteDeviceGroup(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/shakearound/device/group/deletedevice?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Tags.php b/vendor/zoujingli/wechat-developer/WeChat/Tags.php
    new file mode 100644
    index 000000000..a13c79f79
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Tags.php
    @@ -0,0 +1,124 @@
    +registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpGetForJson($url);
    +    }
    +
    +    /**
    +     * 创建粉丝标签
    +     * @param string $name
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function createTags($name)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/tags/create?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['tag' => ['name' => $name]]);
    +    }
    +
    +    /**
    +     * 更新粉丝标签
    +     * @param integer $id 标签ID
    +     * @param string $name 标签名称
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function updateTags($id, $name)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/tags/update?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['tag' => ['name' => $name, 'id' => $id]]);
    +    }
    +
    +    /**
    +     * 删除粉丝标签
    +     * @param int $tagId
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function deleteTags($tagId)
    +    {
    +        $url = 'https://api.weixin.qq.com/cgi-bin/tags/delete?access_token=ACCESS_TOKEN';
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['tag' => ['id' => $tagId]]);
    +    }
    +
    +    /**
    +     * 批量为用户打标签
    +     * @param array $openids
    +     * @param integer $tagId
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function batchTagging(array $openids, $tagId)
    +    {
    +        $url = 'https://api.weixin.qq.com/cgi-bin/tags/members/batchtagging?access_token=ACCESS_TOKEN';
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['openid_list' => $openids, 'tagid' => $tagId]);
    +    }
    +
    +    /**
    +     * 批量为用户取消标签
    +     * @param array $openids
    +     * @param integer $tagId
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function batchUntagging(array $openids, $tagId)
    +    {
    +        $url = 'https://api.weixin.qq.com/cgi-bin/tags/members/batchuntagging?access_token=ACCESS_TOKEN';
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['openid_list' => $openids, 'tagid' => $tagId]);
    +    }
    +
    +    /**
    +     * 获取用户身上的标签列表
    +     * @param string $openid
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getUserTagId($openid)
    +    {
    +        $url = 'https://api.weixin.qq.com/cgi-bin/tags/getidlist?access_token=ACCESS_TOKEN';
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['openid' => $openid]);
    +    }
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Template.php b/vendor/zoujingli/wechat-developer/WeChat/Template.php
    new file mode 100644
    index 000000000..eb50ab4a2
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Template.php
    @@ -0,0 +1,110 @@
    +registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['industry_id1' => $industry_id1, 'industry_id2' => $industry_id2]);
    +    }
    +
    +    /**
    +     * 获取设置的行业信息
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getIndustry()
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/template/get_industry?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpGetForJson($url);
    +    }
    +
    +    /**
    +     * 获得模板ID
    +     * @param string $tpl_id 板库中模板的编号,有“TM**”和“OPENTMTM**”等形式
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function addTemplate($tpl_id)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/template/api_add_template?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['template_id_short' => $tpl_id]);
    +    }
    +
    +    /**
    +     * 获取模板列表
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getAllPrivateTemplate()
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpGetForJson($url);
    +    }
    +
    +    /**
    +     * 删除模板ID
    +     * @param string $tpl_id 公众帐号下模板消息ID
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function delPrivateTemplate($tpl_id)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/template/del_private_template?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['template_id' => $tpl_id]);
    +    }
    +
    +    /**
    +     * 发送模板消息
    +     * @param array $data
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function send(array $data)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/User.php b/vendor/zoujingli/wechat-developer/WeChat/User.php
    new file mode 100644
    index 000000000..742cd6ffe
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/User.php
    @@ -0,0 +1,132 @@
    +registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['openid' => $openid, 'remark' => $remark]);
    +    }
    +
    +    /**
    +     * 获取用户基本信息(包括UnionID机制)
    +     * @param string $openid
    +     * @param string $lang
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getUserInfo($openid, $lang = 'zh_CN')
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid={$openid}&lang=zh_CN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpGetForJson($url);
    +    }
    +
    +    /**
    +     * 批量获取用户基本信息
    +     * @param array $openids
    +     * @param string $lang
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getBatchUserInfo(array $openids, $lang = 'zh_CN')
    +    {
    +        $url = 'https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=ACCESS_TOKEN';
    +        $data = ['user_list' => []];
    +        foreach ($openids as $openid) {
    +            $data['user_list'][] = ['openid' => $openid, 'lang' => $lang];
    +        }
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 获取用户列表
    +     * @param string $next_openid
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getUserList($next_openid = '')
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid={$next_openid}";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpGetForJson($url);
    +    }
    +
    +    /**
    +     * 获取公众号的黑名单列表
    +     * @param string $begin_openid
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getBlackList($begin_openid = '')
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/tags/members/getblacklist?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['begin_openid' => $begin_openid]);
    +    }
    +
    +    /**
    +     * 批量拉黑用户
    +     * @param array $openids
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function batchBlackList(array $openids)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/tags/members/batchblacklist?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['openid_list' => $openids]);
    +    }
    +
    +    /**
    +     * 批量取消拉黑用户
    +     * @param array $openids
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function batchUnblackList(array $openids)
    +    {
    +        $url = "https://api.weixin.qq.com/cgi-bin/tags/members/batchunblacklist?access_token=ACCESS_TOKEN";
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['openid_list' => $openids]);
    +    }
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/WeChat/Wifi.php b/vendor/zoujingli/wechat-developer/WeChat/Wifi.php
    new file mode 100644
    index 000000000..ecc45a45e
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/WeChat/Wifi.php
    @@ -0,0 +1,285 @@
    +registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['pageindex' => $pageindex, 'pagesize' => $pagesize]);
    +    }
    +
    +    /**
    +     * 查询门店Wi-Fi信息
    +     * @param integer $shop_id 门店ID
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getShopWifi($shop_id)
    +    {
    +        $url = 'https://api.weixin.qq.com/bizwifi/shop/list?access_token=ACCESS_TOKEN';
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['shop_id' => $shop_id]);
    +    }
    +
    +    /**
    +     * 修改门店网络信息
    +     * @param integer $shop_id 门店ID
    +     * @param string $old_ssid 旧的无线网络设备的ssid
    +     * @param string $ssid 新的无线网络设备的ssid
    +     * @param string $password 无线网络设备的密码(可选)
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function upShopWifi($shop_id, $old_ssid, $ssid, $password = null)
    +    {
    +        $data = ['shop_id' => $shop_id, 'old_ssid' => $old_ssid, 'ssid' => $ssid];
    +        is_null($password) || $data['password'] = $password;
    +        $url = 'https://api.weixin.qq.com/bizwifi/shop/update?access_token=ACCESS_TOKEN';
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 清空门店网络及设备
    +     * @param integer $shop_id
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function clearShopWifi($shop_id)
    +    {
    +        $url = 'https://api.weixin.qq.com/bizwifi/shop/clean?access_token=ACCESS_TOKEN';
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['shop_id' => $shop_id]);
    +    }
    +
    +    /**
    +     * 添加密码型设备
    +     * @param integer $shop_id 门店ID
    +     * @param string $ssid 无线网络设备的ssid
    +     * @param null|string $password 无线网络设备的密码
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function addShopWifi($shop_id, $ssid, $password = null)
    +    {
    +        $data = ['shop_id' => $shop_id, 'ssid' => $ssid, 'password' => $password];
    +        $url = 'https://api.weixin.qq.com/bizwifi/device/add?access_token=ACCESS_TOKEN';
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 添加portal型设备
    +     * @param integer $shop_id 门店ID
    +     * @param string $ssid 无线网络设备的ssid
    +     * @param bool $reset 重置secretkey,false-不重置,true-重置,默认为false
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function addShopPortal($shop_id, $ssid, $reset = false)
    +    {
    +        $data = ['shop_id' => $shop_id, 'ssid' => $ssid, 'reset' => $reset];
    +        $url = 'https://api.weixin.qq.com/bizwifi/apportal/register?access_token=ACCESS_TOKEN';
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 查询设备
    +     * @param null|integer $shop_id 根据门店id查询
    +     * @param null|integer $pageindex 分页下标,默认从1开始
    +     * @param null|integer $pagesize 每页的个数,默认10个,最大20个
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function queryShopWifi($shop_id = null, $pageindex = null, $pagesize = null)
    +    {
    +        $data = [];
    +        is_null($pagesize) || $data['pagesize'] = $pagesize;
    +        is_null($pageindex) || $data['pageindex'] = $pageindex;
    +        is_null($shop_id) || $data['shop_id'] = $shop_id;
    +        $url = 'https://api.weixin.qq.com/bizwifi/device/list?access_token=ACCESS_TOKEN';
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 删除设备
    +     * @param string $bssid 需要删除的无线网络设备无线mac地址,格式冒号分隔,字符长度17个,并且字母小写,例如:00:1f:7a:ad:5c:a8
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function delShopWifi($bssid)
    +    {
    +        $url = 'https://api.weixin.qq.com/bizwifi/device/delete?access_token=ACCESS_TOKEN';
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['bssid' => $bssid]);
    +    }
    +
    +    /**
    +     * 获取物料二维码
    +     * @param integer $shop_id 门店ID
    +     * @param string $ssid 已添加到门店下的无线网络名称
    +     * @param integer $img_id 物料样式编号:0-纯二维码,可用于自由设计宣传材料;1-二维码物料,155mm×215mm(宽×高),可直接张贴
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getQrc($shop_id, $ssid, $img_id = 1)
    +    {
    +        $url = 'https://api.weixin.qq.com/bizwifi/qrcode/get?access_token=ACCESS_TOKEN';
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['shop_id' => $shop_id, 'ssid' => $ssid, 'img_id' => $img_id]);
    +    }
    +
    +    /**
    +     * 设置商家主页
    +     * @param integer $shop_id 门店ID
    +     * @param integer $template_id 模板ID,0-默认模板,1-自定义url
    +     * @param null|string $url 自定义链接,当template_id为1时必填
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function setHomePage($shop_id, $template_id, $url = null)
    +    {
    +        $data = ['shop_id' => $shop_id, 'template_id' => $template_id];
    +        is_null($url) && $data['struct'] = ['url' => $url];
    +        $url = 'https://api.weixin.qq.com/bizwifi/homepage/set?access_token=ACCESS_TOKEN';
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 查询商家主页
    +     * @param integer $shop_id 查询的门店id
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getHomePage($shop_id)
    +    {
    +        $url = 'https://api.weixin.qq.com/bizwifi/homepage/get?access_token=ACCESS_TOKEN';
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['shop_id' => $shop_id]);
    +    }
    +
    +    /**
    +     * 设置微信首页欢迎语
    +     * @param integer $shop_id 门店ID
    +     * @param integer $bar_type 微信首页欢迎语的文本内容:0--欢迎光临+公众号名称;1--欢迎光临+门店名称;2--已连接+公众号名称+WiFi;3--已连接+门店名称+Wi-Fi。
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function setBar($shop_id, $bar_type = 1)
    +    {
    +        $url = 'https://api.weixin.qq.com/bizwifi/bar/set?access_token=ACCESS_TOKEN';
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['shop_id' => $shop_id, 'bar_type' => $bar_type]);
    +    }
    +
    +    /**
    +     * 设置连网完成页
    +     * @param integer $shop_id 门店ID
    +     * @param string $finishpage_url 连网完成页URL
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function setFinishPage($shop_id, $finishpage_url)
    +    {
    +        $url = 'https://api.weixin.qq.com/bizwifi/finishpage/set?access_token=ACCESS_TOKEN';
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['shop_id' => $shop_id, 'finishpage_url' => $finishpage_url]);
    +    }
    +
    +    /**
    +     * Wi-Fi 数据统计
    +     * @param string $begin_date 起始日期时间,格式yyyy-mm-dd,最长时间跨度为30天
    +     * @param string $end_date 结束日期时间戳,格式yyyy-mm-dd,最长时间跨度为30天
    +     * @param integer $shop_id 按门店ID搜索,-1为总统计
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function staticList($begin_date, $end_date, $shop_id = -1)
    +    {
    +        $url = 'https://api.weixin.qq.com/bizwifi/statistics/list?access_token=ACCESS_TOKEN';
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['shop_id' => $shop_id, 'begin_date' => $begin_date, 'end_date' => $end_date]);
    +    }
    +
    +    /**
    +     * 设置门店卡券投放信息
    +     * @param integer $shop_id 门店ID,可设置为0,表示所有门店
    +     * @param integer $card_id 卡券ID
    +     * @param string $card_describe 卡券描述,不能超过18个字符
    +     * @param string $start_time 卡券投放开始时间(单位是秒)
    +     * @param string $end_time 卡券投放结束时间(单位是秒) 注:不能超过卡券的有效期时间
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function setCouponput($shop_id, $card_id, $card_describe, $start_time, $end_time)
    +    {
    +        $data = ['shop_id' => $shop_id, 'card_id' => $card_id, 'card_describe' => $card_describe, 'start_time' => $start_time, 'end_time' => $end_time];
    +        $url = 'https://api.weixin.qq.com/bizwifi/couponput/set?access_token=ACCESS_TOKEN';
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, $data);
    +    }
    +
    +    /**
    +     * 查询门店卡券投放信息
    +     * @param integer $shop_id 门店ID,可设置为0,表示所有门店
    +     * @return array
    +     * @throws Exceptions\InvalidResponseException
    +     * @throws Exceptions\LocalCacheException
    +     */
    +    public function getCouponput($shop_id)
    +    {
    +        $url = 'https://api.weixin.qq.com/bizwifi/couponput/get?access_token=ACCESS_TOKEN';
    +        $this->registerApi($url, __FUNCTION__, func_get_args());
    +        return $this->httpPostForJson($url, ['shop_id' => $shop_id]);
    +    }
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/composer.json b/vendor/zoujingli/wechat-developer/composer.json
    new file mode 100644
    index 000000000..c06a697b0
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/composer.json
    @@ -0,0 +1,29 @@
    +{
    +  "type": "library",
    +  "name": "zoujingli/wechat-developer",
    +  "homepage": "https://github.com/zoujingli/WeChatDeveloper",
    +  "description": "WeChat platform and WeChat payment development tools",
    +  "license": "MIT",
    +  "authors": [
    +    {
    +      "name": "Anyon",
    +      "email": "zoujingli@qq.com",
    +      "homepage": "http://ctolog.com"
    +    }
    +  ],
    +  "keywords": [
    +    "WeChat",
    +    "WeChatPay",
    +    "WeChatDeveloper"
    +  ],
    +  "require": {
    +    "php": ">=5.4",
    +    "ext-curl": "*",
    +    "ext-openssl": "*"
    +  },
    +  "autoload": {
    +    "psr-4": {
    +      "WeChat\\": "WeChat"
    +    }
    +  }
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/wechat-developer/include.php b/vendor/zoujingli/wechat-developer/include.php
    new file mode 100644
    index 000000000..b8f402c97
    --- /dev/null
    +++ b/vendor/zoujingli/wechat-developer/include.php
    @@ -0,0 +1,21 @@
    + WeChatDeveloper 是基于官方接口封装,在做微信开发前,必需先阅读微信官方文档。
    +>* 微信官方文档:http://mp.weixin.qq.com/wiki
    +>* 开放平台文档:https://open.weixin.qq.com
    +>* 商户支付文档:https://pay.weixin.qq.com/wiki/doc/api/index.html
    +
    +> 针对 WeChatDeveloper 也有一准备了帮助资料可供参考。
    +>* WeChatDeveloper 文档:http://www.kancloud.cn/zoujingli/wechat-developer
    +
    +Repositorie
    +--
    + WeOpenDeveloper 为开源项目,允许把它用于任何地方,不受任何约束,欢迎 fork 项目。
    +>* GitHub 托管地址:https://github.com/zoujingli/WeOpenDeveloper
    +>* OSChina 托管地址:http://git.oschina.net/zoujingli/WeOpenDeveloper
    +
    +更多开发可以参考项目 [ThinkService](https://github.com/zoujingli/ThinkService) 。
    +此项目已经实现对接,[ThinkAdmin](https://github.com/zoujingli/ThinkAdmin) + [ThinkService](https://github.com/zoujingli/ThinkService) 组合。
    +
    +Install
    +--
    +* 通过 Composer 来管理安装
    +```shell
    +# 首次安装 线上版本(稳定)
    +composer require zoujingli/weopen-developer
    +
    +# 首次安装 开发版本 
    +composer require zoujingli/weopen-developer dev-master
    +
    +# 更新 WeChatDeveloper
    +composer update zoujingli/weopen-developer
    +```
    +
    +* 接口实例所需参数
    +```php
    +
    +// 配置参数(可以公众号服务平台获取)
    +$config = [
    +    'component_appid'          => 'wx4e63e993e222df8d',
    +    'component_token'          => 'P8QHTIxpBEq88IrxatqhgpBm2OAQROkI',
    +    'component_appsecret'      => '7cfa1afa87a41e2ea3445cea015c0974',
    +    'component_encodingaeskey' => 'L5uFIa0U6KLalPyXckyqoVIJYLhsfrg8k9YzybZIHsx',
    +];
    +
    +// 注册授权公众号 AccessToken 处理
    +$config['GetAccessTokenCallback'] = function ($authorizer_appid) use ($config) {
    +    $open = new \WeOpen\Service($config);
    +    $authorizer_refresh_token = ''; // 通过$authorizer_appid从数据库去找吧,在授权绑定的时候获取
    +    $result = $open->refreshAccessToken($authorizer_appid, $authorizer_refresh_token);
    +    if (empty($result['authorizer_access_token'])) {
    +        throw new \WeChat\Exceptions\InvalidResponseException($result['errmsg'], '0');
    +    }
    +    $data = [
    +        'authorizer_access_token'  => $result['authorizer_access_token'],
    +        'authorizer_refresh_token' => $result['authorizer_refresh_token'],
    +    ];
    +    // 需要把$data记录到数据库
    +    return $result['authorizer_access_token'];
    +};
    +```
    +
    +* Ticket 接收处理
    +```php
    +
    +try{
    +
    +    // 实例公众号服务接口
    +    $server = new \WeOpen\Service($config);
    +    
    +    // 获取并更新Ticket推送
    +    if (!($data = $server->getComonentTicket())) {
    +        return "Ticket event handling failed.";
    +    }
    +    
    +} catch (Exception $e) {
    +
    +    // 出错啦,处理下吧
    +    echo $e->getMessage() . PHP_EOL;
    +
    +}
    +```
    +
    +* 实例指定接口
    +```php
    +try{
    +
    +    // 实例公众号服务接口
    +    $open = new \WeOpen\Service($config);
    +    
    +    // 获取公众号接口操作实例
    +    $wechat = $open->instance('User', 'wx60a43dd8161666d4');
    +    
    +    // 获取公众号粉丝列表
    +    $list = $wechat->getUserList();
    +    var_export($list);
    +    
    +} catch (Exception $e) {
    +
    +    // 出错啦,处理下吧
    +    echo $e->getMessage() . PHP_EOL;
    +
    +}
    +
    +```
    +
    +Copyright
    +--
    +* WeOpenDeveloper 基于`MIT`协议发布,任何人可以用在任何地方,不受约束
    +* WeOpenDeveloper 部分代码来自互联网,若有异议,可以联系作者进行删除
    +
    +
    +Sponsor
    +--
    +![赞助](http://zoujingli.oschina.io/static/pay.png)
    \ No newline at end of file
    diff --git a/vendor/zoujingli/weopen-developer/Test/open.php b/vendor/zoujingli/weopen-developer/Test/open.php
    new file mode 100644
    index 000000000..669992722
    --- /dev/null
    +++ b/vendor/zoujingli/weopen-developer/Test/open.php
    @@ -0,0 +1,57 @@
    + 'wx4e63e993e222df8d',
    +        'component_token'          => 'P8QHTIxpBEq88IrxatqhgpBm2OAQROkI',
    +        'component_appsecret'      => '7cfa1afa87a41e2ea3445cea015c0974',
    +        'component_encodingaeskey' => 'L5uFIa0U6KLalPyXckyqoVIJYLhsfrg8k9YzybZIHsx',
    +    ];
    +
    +    // 注册授权公众号 AccessToken 处理
    +    $config['GetAccessTokenCallback'] = function ($authorizer_appid) use ($config) {
    +        $open = new \WeOpen\Service($config);
    +        $authorizer_refresh_token = ''; // 从数据库去找吧,在授权绑定的时候获取到了
    +        $authorizer_refresh_token = 'L5uFIa0U6KLalPyXckyqoVIJYLhsfrg8k9YzybZIHsx'; // 从数据库去找吧,在授权绑定的时候获取到了
    +        $result = $open->refreshAccessToken($authorizer_appid, $authorizer_refresh_token);
    +        if (empty($result['authorizer_access_token'])) {
    +            throw new \WeChat\Exceptions\InvalidResponseException($result['errmsg'], '0');
    +        }
    +        $data = [
    +            'authorizer_access_token'  => $result['authorizer_access_token'],
    +            'authorizer_refresh_token' => $result['authorizer_refresh_token'],
    +        ];
    +        // 需要把$data记录到数据库
    +        return $result['authorizer_access_token'];
    +    };
    +
    +    // 3 使用第三方服务创建接口实例
    +    $open = new \WeOpen\Service($config);
    +    $wechat = $open->instance('User', 'wx60a43dd8161666d4');
    +    $list = $wechat->getUserList();
    +    var_export($list);
    +
    +} catch (Exception $e) {
    +
    +    // 出错啦,处理下吧
    +    echo $e->getMessage() . PHP_EOL;
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/weopen-developer/Test/wechat.sql b/vendor/zoujingli/weopen-developer/Test/wechat.sql
    new file mode 100644
    index 000000000..99a42e050
    --- /dev/null
    +++ b/vendor/zoujingli/weopen-developer/Test/wechat.sql
    @@ -0,0 +1,27 @@
    + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    +  `authorizer_appid` varchar(100) DEFAULT NULL COMMENT '公众号APPID',
    +  `authorizer_access_token` varchar(200) DEFAULT NULL COMMENT '公众号Token',
    +  `authorizer_refresh_token` varchar(200) DEFAULT NULL COMMENT '公众号刷新Token',
    +  `func_info` varchar(100) DEFAULT NULL COMMENT '公众号集权',
    +  `nick_name` varchar(50) DEFAULT NULL COMMENT '公众号昵称',
    +  `head_img` varchar(200) DEFAULT NULL COMMENT '公众号头像',
    +  `expires_in` bigint(20) DEFAULT NULL COMMENT 'Token有效时间',
    +  `service_type` tinyint(2) DEFAULT NULL COMMENT '公众号实际类型',
    +  `service_type_info` tinyint(2) DEFAULT NULL COMMENT '服务类型信息',
    +  `verify_type` tinyint(2) DEFAULT NULL COMMENT '公众号实际认证类型',
    +  `verify_type_info` tinyint(2) DEFAULT NULL COMMENT '公众号认证类型',
    +  `user_name` varchar(100) DEFAULT NULL COMMENT '众众号原始账号',
    +  `alias` varchar(100) DEFAULT NULL COMMENT '公众号别名',
    +  `qrcode_url` varchar(200) DEFAULT NULL COMMENT '公众号二维码地址',
    +  `business_info` varchar(255) DEFAULT NULL,
    +  `principal_name` varchar(255) DEFAULT NULL COMMENT '公司名称',
    +  `idc` tinyint(1) unsigned DEFAULT NULL,
    +  `status` tinyint(1) unsigned DEFAULT '1' COMMENT '状态(1正常授权,0取消授权)',
    +  `total` bigint(20) unsigned DEFAULT '0' COMMENT '统计调用次数',
    +  `appkey` char(32) DEFAULT NULL COMMENT '接口KEY',
    +  `appuri` varchar(255) DEFAULT NULL COMMENT '响应接口APP',
    +  `create_by` bigint(20) DEFAULT NULL COMMENT '创建人ID',
    +  `create_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    +  PRIMARY KEY (`id`),
    +  UNIQUE KEY `index_wechat_config_authorizer_appid` (`authorizer_appid`) USING BTREE
    +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='公众号授权参数';
    \ No newline at end of file
    diff --git a/vendor/zoujingli/weopen-developer/WeOpen/Service.php b/vendor/zoujingli/weopen-developer/WeOpen/Service.php
    new file mode 100644
    index 000000000..b42192657
    --- /dev/null
    +++ b/vendor/zoujingli/weopen-developer/WeOpen/Service.php
    @@ -0,0 +1,325 @@
    +config = new DataArray($options);
    +    }
    +
    +    /**
    +     * 接收公众平台推送的 Ticket
    +     * @return bool|array
    +     * @throws InvalidResponseException
    +     * @throws \WeChat\Exceptions\LocalCacheException
    +     */
    +    public function getComonentTicket()
    +    {
    +        $receive = new Receive([
    +            'token'          => $this->config->get('component_token'),
    +            'appid'          => $this->config->get('component_appid'),
    +            'appsecret'      => $this->config->get('component_appsecret'),
    +            'encodingaeskey' => $this->config->get('component_encodingaeskey'),
    +            'cache_path'     => $this->config->get('cache_path'),
    +        ]);
    +        $data = $receive->getReceive();
    +        if (!empty($data['ComponentVerifyTicket'])) {
    +            Tools::setCache('component_verify_ticket', $data['ComponentVerifyTicket']);
    +        }
    +        return $data;
    +    }
    +
    +    /**
    +     * 获取或刷新服务 AccessToken
    +     * @return bool|string
    +     * @throws InvalidResponseException
    +     * @throws \WeChat\Exceptions\LocalCacheException
    +     */
    +    public function getComponentAccessToken()
    +    {
    +        $cache = 'wechat_component_access_token';
    +        if (($component_access_token = Tools::getCache($cache))) {
    +            return $component_access_token;
    +        }
    +        $data = [
    +            'component_appid'         => $this->config->get('component_appid'),
    +            'component_appsecret'     => $this->config->get('component_appsecret'),
    +            'component_verify_ticket' => Tools::getCache('component_verify_ticket'),
    +        ];
    +        $url = 'https://api.weixin.qq.com/cgi-bin/component/api_component_token';
    +        $result = $this->httpPostForJson($url, $data);
    +        if (empty($result['component_access_token'])) {
    +            throw new InvalidResponseException($result['errmsg'], $result['errcode'], $data);
    +        }
    +        Tools::setCache($cache, $result['component_access_token'], 7000);
    +        return $result['component_access_token'];
    +    }
    +
    +    /**
    +     * 获取授权方的帐号基本信息
    +     * @param string $authorizer_appid 授权公众号或小程序的appid
    +     * @return array
    +     * @throws InvalidResponseException
    +     * @throws \WeChat\Exceptions\LocalCacheException
    +     */
    +    public function getAuthorizerInfo($authorizer_appid)
    +    {
    +        $component_access_token = $this->getComponentAccessToken();
    +        $url = "https://api.weixin.qq.com/cgi-bin/component/api_get_authorizer_info?component_access_token={$component_access_token}";
    +        $data = [
    +            'authorizer_appid' => $authorizer_appid,
    +            'component_appid'  => $this->config->get('component_appid'),
    +        ];
    +        $result = $this->httpPostForJson($url, $data);
    +        if (empty($result['authorizer_info'])) {
    +            throw new InvalidResponseException($result['errmsg'], $result['errcode'], $data);
    +        }
    +        return $result['authorizer_info'];
    +    }
    +
    +    /**
    +     * 设置授权方的选项信息
    +     * @param string $authorizer_appid 授权公众号或小程序的appid
    +     * @param string $option_name 选项名称
    +     * @param string $option_value 设置的选项值
    +     * @return array
    +     * @throws InvalidResponseException
    +     * @throws \WeChat\Exceptions\LocalCacheException
    +     */
    +    public function setAuthorizerOption($authorizer_appid, $option_name, $option_value)
    +    {
    +        $component_access_token = $this->getComponentAccessToken();
    +        $url = "https://api.weixin.qq.com/cgi-bin/component/ api_set_authorizer_option?component_access_token={$component_access_token}";
    +        $result = $this->httpPostForJson($url, [
    +            'option_name'      => $option_name,
    +            'option_value'     => $option_value,
    +            'authorizer_appid' => $authorizer_appid,
    +            'component_appid'  => $this->config->get('component_appid'),
    +        ]);
    +        return $result;
    +    }
    +
    +    /**
    +     * 获取预授权码 pre_auth_code
    +     * @return string
    +     * @throws InvalidResponseException
    +     * @throws \WeChat\Exceptions\LocalCacheException
    +     */
    +    public function getPreauthCode()
    +    {
    +        $component_access_token = $this->getComponentAccessToken();
    +        $url = "https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token={$component_access_token}";
    +        $result = $this->httpPostForJson($url, ['component_appid' => $this->config->get('component_appid')]);
    +        if (empty($result['pre_auth_code'])) {
    +            throw new InvalidResponseException('GetPreauthCode Faild.', '0', $result);
    +        }
    +        return $result['pre_auth_code'];
    +    }
    +
    +    /**
    +     * 获取授权回跳地址
    +     * @param string $redirect_uri 回调URI
    +     * @param integer $auth_type 要授权的帐号类型
    +     * @return bool
    +     * @throws InvalidResponseException
    +     * @throws \WeChat\Exceptions\LocalCacheException
    +     */
    +    public function getAuthRedirect($redirect_uri, $auth_type = 3)
    +    {
    +        $redirect_uri = urlencode($redirect_uri);
    +        $pre_auth_code = $this->getPreauthCode();
    +        $component_appid = $this->config->get('component_appid');
    +        return "https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid={$component_appid}&pre_auth_code={$pre_auth_code}&redirect_uri={$redirect_uri}&auth_type={$auth_type}";
    +    }
    +
    +    /**
    +     * 使用授权码换取公众号或小程序的接口调用凭据和授权信息
    +     * @param null $auth_code 授权码
    +     * @return bool|array
    +     * @throws InvalidResponseException
    +     * @throws \WeChat\Exceptions\LocalCacheException
    +     */
    +    public function getQueryAuthorizerInfo($auth_code = null)
    +    {
    +        if (is_null($auth_code) && isset($_GET['auth_code'])) {
    +            $auth_code = $_GET['auth_code'];
    +        }
    +        if (empty($auth_code)) {
    +            return false;
    +        }
    +        $component_access_token = $this->getComponentAccessToken();
    +        $url = "https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token={$component_access_token}";
    +        $data = [
    +            'component_appid'    => $this->config->get('component_appid'),
    +            'authorization_code' => $auth_code,
    +        ];
    +        $result = $this->httpPostForJson($url, $data);
    +        if (empty($result['authorization_info'])) {
    +            throw new InvalidResponseException($result['errmsg'], $result['errcode'], $data);
    +        }
    +        $authorizer_appid = $result['authorization_info']['authorizer_appid'];
    +        $authorizer_access_token = $result['authorization_info']['authorizer_access_token'];
    +        // 缓存授权公众号访问 ACCESS_TOKEN
    +        Tools::setCache("{$authorizer_appid}_access_token", $authorizer_access_token, 7000);
    +        return $result['authorization_info'];
    +    }
    +
    +    /**
    +     * 获取(刷新)授权公众号的令牌
    +     * @param string $authorizer_appid 授权公众号或小程序的appid
    +     * @param string $authorizer_refresh_token 授权方的刷新令牌
    +     * @return array
    +     * @throws InvalidResponseException
    +     * @throws \WeChat\Exceptions\LocalCacheException
    +     */
    +    public function refreshAccessToken($authorizer_appid, $authorizer_refresh_token)
    +    {
    +        $component_access_token = $this->getComponentAccessToken();
    +        $url = "https://api.weixin.qq.com/cgi-bin/component/api_authorizer_token?component_access_token={$component_access_token}";
    +        $data = [
    +            'authorizer_appid'         => $authorizer_appid,
    +            'authorizer_refresh_token' => $authorizer_refresh_token,
    +            'component_appid'          => $this->config->get('component_appid'),
    +        ];
    +        $result = $this->httpPostForJson($url, $data);
    +        if (empty($result['authorizer_access_token'])) {
    +            throw new InvalidResponseException($result['errmsg'], $result['errcode'], $data);
    +        }
    +        // 缓存授权公众号访问 ACCESS_TOKEN
    +        Tools::setCache("{$authorizer_appid}_access_token", $result['authorizer_access_token'], 7000);
    +        return $result;
    +    }
    +
    +    /**
    +     * oauth 授权跳转接口
    +     * @param string $authorizer_appid 授权公众号或小程序的appid
    +     * @param string $redirect_uri 回调地址
    +     * @param string $scope snsapi_userinfo|snsapi_base
    +     * @return string
    +     */
    +    public function getOauthRedirect($authorizer_appid, $redirect_uri, $scope = 'snsapi_userinfo')
    +    {
    +        $redirect_url = urlencode($redirect_uri);
    +        $component_appid = $this->config->get('component_appid');
    +        return "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$authorizer_appid}&redirect_uri={$redirect_url}&response_type=code&scope={$scope}&state={$authorizer_appid}&component_appid={$component_appid}#wechat_redirect";
    +    }
    +
    +    /**
    +     * 通过code获取AccessToken
    +     * @param string $authorizer_appid 授权公众号或小程序的appid
    +     * @return bool|array
    +     * @throws InvalidResponseException
    +     * @throws \WeChat\Exceptions\LocalCacheException
    +     */
    +    public function getOauthAccessToken($authorizer_appid)
    +    {
    +        if (empty($_GET['code'])) {
    +            return false;
    +        }
    +        $component_appid = $this->config->get('component_appid');
    +        $component_access_token = $this->getComponentAccessToken();
    +        $url = "https://api.weixin.qq.com/sns/oauth2/component/access_token?appid={$authorizer_appid}&code={$_GET['code']}&grant_type=authorization_code&component_appid={$component_appid}&component_access_token={$component_access_token}";
    +        $result = $this->httpGetForJson($url);
    +        return $result !== false ? $result : false;
    +    }
    +
    +    /**
    +     * 创建指定授权公众号接口实例
    +     * @param string $type 需要加载的接口实例名称
    +     * @param string $authorizer_appid 授权公众号的appid
    +     * @return \WeChat\Card|\WeChat\Custom|\WeChat\Media|\WeChat\Menu|\WeChat\Oauth|\WeChat\Pay|\WeChat\Product|\WeChat\Qrcode|\WeChat\Receive|\WeChat\Scan|\WeChat\Script|\WeChat\Shake|\WeChat\Tags|\WeChat\Template|\WeChat\User|\WeChat\Wifi
    +     */
    +    public function instance($type, $authorizer_appid)
    +    {
    +        $className = 'WeChat\\' . ucfirst(strtolower($type));
    +        return new $className($this->getConfig($authorizer_appid));
    +    }
    +
    +    /**
    +     * 获取授权公众号配置参数
    +     * @param string $authorizer_appid 授权公众号的appid
    +     * @return array
    +     */
    +    public function getConfig($authorizer_appid)
    +    {
    +        $config = $this->config->get();
    +        $config['appid'] = $authorizer_appid;
    +        $config['token'] = $this->config->get('component_token');
    +        $config['appsecret'] = $this->config->get('component_appsecret');
    +        $config['encodingaeskey'] = $this->config->get('component_encodingaeskey');
    +        return $config;
    +    }
    +
    +    /**
    +     * 以POST获取接口数据并转为数组
    +     * @param string $url 接口地址
    +     * @param array $data 请求数据
    +     * @param bool $buildToJson
    +     * @return array
    +     */
    +    protected function httpPostForJson($url, array $data, $buildToJson = true)
    +    {
    +        return json_decode(Tools::post($url, $buildToJson ? Tools::arr2json($data) : $data), true);
    +    }
    +
    +    /**
    +     * 以GET获取接口数据并转为数组
    +     * @param string $url 接口地址
    +     * @return array
    +     */
    +    protected function httpGetForJson($url)
    +    {
    +        return json_decode(Tools::get($url), true);
    +    }
    +
    +}
    \ No newline at end of file
    diff --git a/vendor/zoujingli/weopen-developer/composer.json b/vendor/zoujingli/weopen-developer/composer.json
    new file mode 100644
    index 000000000..d730e526c
    --- /dev/null
    +++ b/vendor/zoujingli/weopen-developer/composer.json
    @@ -0,0 +1,30 @@
    +{
    +  "type": "library",
    +  "name": "zoujingli/weopen-developer",
    +  "homepage": "https://github.com/zoujingli/WeOpenDeveloper",
    +  "description": "WeChat Open development of SDK",
    +  "license": "MIT",
    +  "authors": [
    +    {
    +      "name": "Anyon",
    +      "email": "zoujingli@qq.com",
    +      "homepage": "http://ctolog.com"
    +    }
    +  ],
    +  "keywords": [
    +    "WeChat",
    +    "WeChatOpen",
    +    "WeChatOpenDeveloper"
    +  ],
    +  "require": {
    +    "php": ">=5.4",
    +    "ext-curl": "*",
    +    "ext-openssl": "*",
    +    "zoujingli/wechat-developer": "^1.0.0"
    +  },
    +  "autoload": {
    +    "psr-4": {
    +      "WeOpen\\": "WeOpen"
    +    }
    +  }
    +}
    \ No newline at end of file