From fde3db2abaaca21bcde6fa08f5d9d6234ed24e41 Mon Sep 17 00:00:00 2001 From: Diego Date: Sat, 22 Jul 2017 14:21:13 +0200 Subject: [PATCH] Font Awesome updated --- bl-kernel/admin/themes/default/index.php | 2 +- bl-kernel/admin/themes/default/login.php | 4 +- .../css/font-awesome/css/font-awesome.min.css | 2337 ++ .../css/font-awesome/font-awesome.min.css | 4 - .../css/font-awesome/fonts/FontAwesome.otf | Bin 109688 -> 134808 bytes .../fonts/fontawesome-webfont.eot | Bin 68875 -> 165742 bytes .../fonts/fontawesome-webfont.svg | 2671 ++ .../fonts/fontawesome-webfont.ttf | Bin 142072 -> 165548 bytes .../fonts/fontawesome-webfont.woff | Bin 83588 -> 98024 bytes .../fonts/fontawesome-webfont.woff2 | Bin 66624 -> 77160 bytes install.php | 2 +- phpcs.phar | Bin 1026122 -> 0 bytes phpdcd.phar | 20310 ---------------- 13 files changed, 5012 insertions(+), 20318 deletions(-) create mode 100644 bl-kernel/css/font-awesome/css/font-awesome.min.css delete mode 100644 bl-kernel/css/font-awesome/font-awesome.min.css create mode 100644 bl-kernel/css/font-awesome/fonts/fontawesome-webfont.svg delete mode 100644 phpcs.phar delete mode 100644 phpdcd.phar diff --git a/bl-kernel/admin/themes/default/index.php b/bl-kernel/admin/themes/default/index.php index 00b57c89..4a7ff7e5 100644 --- a/bl-kernel/admin/themes/default/index.php +++ b/bl-kernel/admin/themes/default/index.php @@ -18,7 +18,7 @@ - + diff --git a/bl-kernel/admin/themes/default/login.php b/bl-kernel/admin/themes/default/login.php index fa73c40e..8ca05b37 100644 --- a/bl-kernel/admin/themes/default/login.php +++ b/bl-kernel/admin/themes/default/login.php @@ -8,12 +8,12 @@ Bludit - + - + diff --git a/bl-kernel/css/font-awesome/css/font-awesome.min.css b/bl-kernel/css/font-awesome/css/font-awesome.min.css new file mode 100644 index 00000000..ee906a81 --- /dev/null +++ b/bl-kernel/css/font-awesome/css/font-awesome.min.css @@ -0,0 +1,2337 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('../fonts/fontawesome-webfont.eot?v=4.7.0'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; +} +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.33333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.28571429em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: 0.14285714em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.85714286em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.fa-pull-left { + float: left; +} +.fa-pull-right { + float: right; +} +.fa.fa-pull-left { + margin-right: .3em; +} +.fa.fa-pull-right { + margin-left: .3em; +} +/* Deprecated as of 4.4.0 */ +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); +} +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none; +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook-f:before, +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-feed:before, +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before, +.fa-gratipay:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} +.fa-space-shuttle:before { + content: "\f197"; +} +.fa-slack:before { + content: "\f198"; +} +.fa-envelope-square:before { + content: "\f199"; +} +.fa-wordpress:before { + content: "\f19a"; +} +.fa-openid:before { + content: "\f19b"; +} +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c"; +} +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d"; +} +.fa-yahoo:before { + content: "\f19e"; +} +.fa-google:before { + content: "\f1a0"; +} +.fa-reddit:before { + content: "\f1a1"; +} +.fa-reddit-square:before { + content: "\f1a2"; +} +.fa-stumbleupon-circle:before { + content: "\f1a3"; +} +.fa-stumbleupon:before { + content: "\f1a4"; +} +.fa-delicious:before { + content: "\f1a5"; +} +.fa-digg:before { + content: "\f1a6"; +} +.fa-pied-piper-pp:before { + content: "\f1a7"; +} +.fa-pied-piper-alt:before { + content: "\f1a8"; +} +.fa-drupal:before { + content: "\f1a9"; +} +.fa-joomla:before { + content: "\f1aa"; +} +.fa-language:before { + content: "\f1ab"; +} +.fa-fax:before { + content: "\f1ac"; +} +.fa-building:before { + content: "\f1ad"; +} +.fa-child:before { + content: "\f1ae"; +} +.fa-paw:before { + content: "\f1b0"; +} +.fa-spoon:before { + content: "\f1b1"; +} +.fa-cube:before { + content: "\f1b2"; +} +.fa-cubes:before { + content: "\f1b3"; +} +.fa-behance:before { + content: "\f1b4"; +} +.fa-behance-square:before { + content: "\f1b5"; +} +.fa-steam:before { + content: "\f1b6"; +} +.fa-steam-square:before { + content: "\f1b7"; +} +.fa-recycle:before { + content: "\f1b8"; +} +.fa-automobile:before, +.fa-car:before { + content: "\f1b9"; +} +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba"; +} +.fa-tree:before { + content: "\f1bb"; +} +.fa-spotify:before { + content: "\f1bc"; +} +.fa-deviantart:before { + content: "\f1bd"; +} +.fa-soundcloud:before { + content: "\f1be"; +} +.fa-database:before { + content: "\f1c0"; +} +.fa-file-pdf-o:before { + content: "\f1c1"; +} +.fa-file-word-o:before { + content: "\f1c2"; +} +.fa-file-excel-o:before { + content: "\f1c3"; +} +.fa-file-powerpoint-o:before { + content: "\f1c4"; +} +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5"; +} +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6"; +} +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7"; +} +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8"; +} +.fa-file-code-o:before { + content: "\f1c9"; +} +.fa-vine:before { + content: "\f1ca"; +} +.fa-codepen:before { + content: "\f1cb"; +} +.fa-jsfiddle:before { + content: "\f1cc"; +} +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd"; +} +.fa-circle-o-notch:before { + content: "\f1ce"; +} +.fa-ra:before, +.fa-resistance:before, +.fa-rebel:before { + content: "\f1d0"; +} +.fa-ge:before, +.fa-empire:before { + content: "\f1d1"; +} +.fa-git-square:before { + content: "\f1d2"; +} +.fa-git:before { + content: "\f1d3"; +} +.fa-y-combinator-square:before, +.fa-yc-square:before, +.fa-hacker-news:before { + content: "\f1d4"; +} +.fa-tencent-weibo:before { + content: "\f1d5"; +} +.fa-qq:before { + content: "\f1d6"; +} +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7"; +} +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8"; +} +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9"; +} +.fa-history:before { + content: "\f1da"; +} +.fa-circle-thin:before { + content: "\f1db"; +} +.fa-header:before { + content: "\f1dc"; +} +.fa-paragraph:before { + content: "\f1dd"; +} +.fa-sliders:before { + content: "\f1de"; +} +.fa-share-alt:before { + content: "\f1e0"; +} +.fa-share-alt-square:before { + content: "\f1e1"; +} +.fa-bomb:before { + content: "\f1e2"; +} +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3"; +} +.fa-tty:before { + content: "\f1e4"; +} +.fa-binoculars:before { + content: "\f1e5"; +} +.fa-plug:before { + content: "\f1e6"; +} +.fa-slideshare:before { + content: "\f1e7"; +} +.fa-twitch:before { + content: "\f1e8"; +} +.fa-yelp:before { + content: "\f1e9"; +} +.fa-newspaper-o:before { + content: "\f1ea"; +} +.fa-wifi:before { + content: "\f1eb"; +} +.fa-calculator:before { + content: "\f1ec"; +} +.fa-paypal:before { + content: "\f1ed"; +} +.fa-google-wallet:before { + content: "\f1ee"; +} +.fa-cc-visa:before { + content: "\f1f0"; +} +.fa-cc-mastercard:before { + content: "\f1f1"; +} +.fa-cc-discover:before { + content: "\f1f2"; +} +.fa-cc-amex:before { + content: "\f1f3"; +} +.fa-cc-paypal:before { + content: "\f1f4"; +} +.fa-cc-stripe:before { + content: "\f1f5"; +} +.fa-bell-slash:before { + content: "\f1f6"; +} +.fa-bell-slash-o:before { + content: "\f1f7"; +} +.fa-trash:before { + content: "\f1f8"; +} +.fa-copyright:before { + content: "\f1f9"; +} +.fa-at:before { + content: "\f1fa"; +} +.fa-eyedropper:before { + content: "\f1fb"; +} +.fa-paint-brush:before { + content: "\f1fc"; +} +.fa-birthday-cake:before { + content: "\f1fd"; +} +.fa-area-chart:before { + content: "\f1fe"; +} +.fa-pie-chart:before { + content: "\f200"; +} +.fa-line-chart:before { + content: "\f201"; +} +.fa-lastfm:before { + content: "\f202"; +} +.fa-lastfm-square:before { + content: "\f203"; +} +.fa-toggle-off:before { + content: "\f204"; +} +.fa-toggle-on:before { + content: "\f205"; +} +.fa-bicycle:before { + content: "\f206"; +} +.fa-bus:before { + content: "\f207"; +} +.fa-ioxhost:before { + content: "\f208"; +} +.fa-angellist:before { + content: "\f209"; +} +.fa-cc:before { + content: "\f20a"; +} +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b"; +} +.fa-meanpath:before { + content: "\f20c"; +} +.fa-buysellads:before { + content: "\f20d"; +} +.fa-connectdevelop:before { + content: "\f20e"; +} +.fa-dashcube:before { + content: "\f210"; +} +.fa-forumbee:before { + content: "\f211"; +} +.fa-leanpub:before { + content: "\f212"; +} +.fa-sellsy:before { + content: "\f213"; +} +.fa-shirtsinbulk:before { + content: "\f214"; +} +.fa-simplybuilt:before { + content: "\f215"; +} +.fa-skyatlas:before { + content: "\f216"; +} +.fa-cart-plus:before { + content: "\f217"; +} +.fa-cart-arrow-down:before { + content: "\f218"; +} +.fa-diamond:before { + content: "\f219"; +} +.fa-ship:before { + content: "\f21a"; +} +.fa-user-secret:before { + content: "\f21b"; +} +.fa-motorcycle:before { + content: "\f21c"; +} +.fa-street-view:before { + content: "\f21d"; +} +.fa-heartbeat:before { + content: "\f21e"; +} +.fa-venus:before { + content: "\f221"; +} +.fa-mars:before { + content: "\f222"; +} +.fa-mercury:before { + content: "\f223"; +} +.fa-intersex:before, +.fa-transgender:before { + content: "\f224"; +} +.fa-transgender-alt:before { + content: "\f225"; +} +.fa-venus-double:before { + content: "\f226"; +} +.fa-mars-double:before { + content: "\f227"; +} +.fa-venus-mars:before { + content: "\f228"; +} +.fa-mars-stroke:before { + content: "\f229"; +} +.fa-mars-stroke-v:before { + content: "\f22a"; +} +.fa-mars-stroke-h:before { + content: "\f22b"; +} +.fa-neuter:before { + content: "\f22c"; +} +.fa-genderless:before { + content: "\f22d"; +} +.fa-facebook-official:before { + content: "\f230"; +} +.fa-pinterest-p:before { + content: "\f231"; +} +.fa-whatsapp:before { + content: "\f232"; +} +.fa-server:before { + content: "\f233"; +} +.fa-user-plus:before { + content: "\f234"; +} +.fa-user-times:before { + content: "\f235"; +} +.fa-hotel:before, +.fa-bed:before { + content: "\f236"; +} +.fa-viacoin:before { + content: "\f237"; +} +.fa-train:before { + content: "\f238"; +} +.fa-subway:before { + content: "\f239"; +} +.fa-medium:before { + content: "\f23a"; +} +.fa-yc:before, +.fa-y-combinator:before { + content: "\f23b"; +} +.fa-optin-monster:before { + content: "\f23c"; +} +.fa-opencart:before { + content: "\f23d"; +} +.fa-expeditedssl:before { + content: "\f23e"; +} +.fa-battery-4:before, +.fa-battery:before, +.fa-battery-full:before { + content: "\f240"; +} +.fa-battery-3:before, +.fa-battery-three-quarters:before { + content: "\f241"; +} +.fa-battery-2:before, +.fa-battery-half:before { + content: "\f242"; +} +.fa-battery-1:before, +.fa-battery-quarter:before { + content: "\f243"; +} +.fa-battery-0:before, +.fa-battery-empty:before { + content: "\f244"; +} +.fa-mouse-pointer:before { + content: "\f245"; +} +.fa-i-cursor:before { + content: "\f246"; +} +.fa-object-group:before { + content: "\f247"; +} +.fa-object-ungroup:before { + content: "\f248"; +} +.fa-sticky-note:before { + content: "\f249"; +} +.fa-sticky-note-o:before { + content: "\f24a"; +} +.fa-cc-jcb:before { + content: "\f24b"; +} +.fa-cc-diners-club:before { + content: "\f24c"; +} +.fa-clone:before { + content: "\f24d"; +} +.fa-balance-scale:before { + content: "\f24e"; +} +.fa-hourglass-o:before { + content: "\f250"; +} +.fa-hourglass-1:before, +.fa-hourglass-start:before { + content: "\f251"; +} +.fa-hourglass-2:before, +.fa-hourglass-half:before { + content: "\f252"; +} +.fa-hourglass-3:before, +.fa-hourglass-end:before { + content: "\f253"; +} +.fa-hourglass:before { + content: "\f254"; +} +.fa-hand-grab-o:before, +.fa-hand-rock-o:before { + content: "\f255"; +} +.fa-hand-stop-o:before, +.fa-hand-paper-o:before { + content: "\f256"; +} +.fa-hand-scissors-o:before { + content: "\f257"; +} +.fa-hand-lizard-o:before { + content: "\f258"; +} +.fa-hand-spock-o:before { + content: "\f259"; +} +.fa-hand-pointer-o:before { + content: "\f25a"; +} +.fa-hand-peace-o:before { + content: "\f25b"; +} +.fa-trademark:before { + content: "\f25c"; +} +.fa-registered:before { + content: "\f25d"; +} +.fa-creative-commons:before { + content: "\f25e"; +} +.fa-gg:before { + content: "\f260"; +} +.fa-gg-circle:before { + content: "\f261"; +} +.fa-tripadvisor:before { + content: "\f262"; +} +.fa-odnoklassniki:before { + content: "\f263"; +} +.fa-odnoklassniki-square:before { + content: "\f264"; +} +.fa-get-pocket:before { + content: "\f265"; +} +.fa-wikipedia-w:before { + content: "\f266"; +} +.fa-safari:before { + content: "\f267"; +} +.fa-chrome:before { + content: "\f268"; +} +.fa-firefox:before { + content: "\f269"; +} +.fa-opera:before { + content: "\f26a"; +} +.fa-internet-explorer:before { + content: "\f26b"; +} +.fa-tv:before, +.fa-television:before { + content: "\f26c"; +} +.fa-contao:before { + content: "\f26d"; +} +.fa-500px:before { + content: "\f26e"; +} +.fa-amazon:before { + content: "\f270"; +} +.fa-calendar-plus-o:before { + content: "\f271"; +} +.fa-calendar-minus-o:before { + content: "\f272"; +} +.fa-calendar-times-o:before { + content: "\f273"; +} +.fa-calendar-check-o:before { + content: "\f274"; +} +.fa-industry:before { + content: "\f275"; +} +.fa-map-pin:before { + content: "\f276"; +} +.fa-map-signs:before { + content: "\f277"; +} +.fa-map-o:before { + content: "\f278"; +} +.fa-map:before { + content: "\f279"; +} +.fa-commenting:before { + content: "\f27a"; +} +.fa-commenting-o:before { + content: "\f27b"; +} +.fa-houzz:before { + content: "\f27c"; +} +.fa-vimeo:before { + content: "\f27d"; +} +.fa-black-tie:before { + content: "\f27e"; +} +.fa-fonticons:before { + content: "\f280"; +} +.fa-reddit-alien:before { + content: "\f281"; +} +.fa-edge:before { + content: "\f282"; +} +.fa-credit-card-alt:before { + content: "\f283"; +} +.fa-codiepie:before { + content: "\f284"; +} +.fa-modx:before { + content: "\f285"; +} +.fa-fort-awesome:before { + content: "\f286"; +} +.fa-usb:before { + content: "\f287"; +} +.fa-product-hunt:before { + content: "\f288"; +} +.fa-mixcloud:before { + content: "\f289"; +} +.fa-scribd:before { + content: "\f28a"; +} +.fa-pause-circle:before { + content: "\f28b"; +} +.fa-pause-circle-o:before { + content: "\f28c"; +} +.fa-stop-circle:before { + content: "\f28d"; +} +.fa-stop-circle-o:before { + content: "\f28e"; +} +.fa-shopping-bag:before { + content: "\f290"; +} +.fa-shopping-basket:before { + content: "\f291"; +} +.fa-hashtag:before { + content: "\f292"; +} +.fa-bluetooth:before { + content: "\f293"; +} +.fa-bluetooth-b:before { + content: "\f294"; +} +.fa-percent:before { + content: "\f295"; +} +.fa-gitlab:before { + content: "\f296"; +} +.fa-wpbeginner:before { + content: "\f297"; +} +.fa-wpforms:before { + content: "\f298"; +} +.fa-envira:before { + content: "\f299"; +} +.fa-universal-access:before { + content: "\f29a"; +} +.fa-wheelchair-alt:before { + content: "\f29b"; +} +.fa-question-circle-o:before { + content: "\f29c"; +} +.fa-blind:before { + content: "\f29d"; +} +.fa-audio-description:before { + content: "\f29e"; +} +.fa-volume-control-phone:before { + content: "\f2a0"; +} +.fa-braille:before { + content: "\f2a1"; +} +.fa-assistive-listening-systems:before { + content: "\f2a2"; +} +.fa-asl-interpreting:before, +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; +} +.fa-deafness:before, +.fa-hard-of-hearing:before, +.fa-deaf:before { + content: "\f2a4"; +} +.fa-glide:before { + content: "\f2a5"; +} +.fa-glide-g:before { + content: "\f2a6"; +} +.fa-signing:before, +.fa-sign-language:before { + content: "\f2a7"; +} +.fa-low-vision:before { + content: "\f2a8"; +} +.fa-viadeo:before { + content: "\f2a9"; +} +.fa-viadeo-square:before { + content: "\f2aa"; +} +.fa-snapchat:before { + content: "\f2ab"; +} +.fa-snapchat-ghost:before { + content: "\f2ac"; +} +.fa-snapchat-square:before { + content: "\f2ad"; +} +.fa-pied-piper:before { + content: "\f2ae"; +} +.fa-first-order:before { + content: "\f2b0"; +} +.fa-yoast:before { + content: "\f2b1"; +} +.fa-themeisle:before { + content: "\f2b2"; +} +.fa-google-plus-circle:before, +.fa-google-plus-official:before { + content: "\f2b3"; +} +.fa-fa:before, +.fa-font-awesome:before { + content: "\f2b4"; +} +.fa-handshake-o:before { + content: "\f2b5"; +} +.fa-envelope-open:before { + content: "\f2b6"; +} +.fa-envelope-open-o:before { + content: "\f2b7"; +} +.fa-linode:before { + content: "\f2b8"; +} +.fa-address-book:before { + content: "\f2b9"; +} +.fa-address-book-o:before { + content: "\f2ba"; +} +.fa-vcard:before, +.fa-address-card:before { + content: "\f2bb"; +} +.fa-vcard-o:before, +.fa-address-card-o:before { + content: "\f2bc"; +} +.fa-user-circle:before { + content: "\f2bd"; +} +.fa-user-circle-o:before { + content: "\f2be"; +} +.fa-user-o:before { + content: "\f2c0"; +} +.fa-id-badge:before { + content: "\f2c1"; +} +.fa-drivers-license:before, +.fa-id-card:before { + content: "\f2c2"; +} +.fa-drivers-license-o:before, +.fa-id-card-o:before { + content: "\f2c3"; +} +.fa-quora:before { + content: "\f2c4"; +} +.fa-free-code-camp:before { + content: "\f2c5"; +} +.fa-telegram:before { + content: "\f2c6"; +} +.fa-thermometer-4:before, +.fa-thermometer:before, +.fa-thermometer-full:before { + content: "\f2c7"; +} +.fa-thermometer-3:before, +.fa-thermometer-three-quarters:before { + content: "\f2c8"; +} +.fa-thermometer-2:before, +.fa-thermometer-half:before { + content: "\f2c9"; +} +.fa-thermometer-1:before, +.fa-thermometer-quarter:before { + content: "\f2ca"; +} +.fa-thermometer-0:before, +.fa-thermometer-empty:before { + content: "\f2cb"; +} +.fa-shower:before { + content: "\f2cc"; +} +.fa-bathtub:before, +.fa-s15:before, +.fa-bath:before { + content: "\f2cd"; +} +.fa-podcast:before { + content: "\f2ce"; +} +.fa-window-maximize:before { + content: "\f2d0"; +} +.fa-window-minimize:before { + content: "\f2d1"; +} +.fa-window-restore:before { + content: "\f2d2"; +} +.fa-times-rectangle:before, +.fa-window-close:before { + content: "\f2d3"; +} +.fa-times-rectangle-o:before, +.fa-window-close-o:before { + content: "\f2d4"; +} +.fa-bandcamp:before { + content: "\f2d5"; +} +.fa-grav:before { + content: "\f2d6"; +} +.fa-etsy:before { + content: "\f2d7"; +} +.fa-imdb:before { + content: "\f2d8"; +} +.fa-ravelry:before { + content: "\f2d9"; +} +.fa-eercast:before { + content: "\f2da"; +} +.fa-microchip:before { + content: "\f2db"; +} +.fa-snowflake-o:before { + content: "\f2dc"; +} +.fa-superpowers:before { + content: "\f2dd"; +} +.fa-wpexplorer:before { + content: "\f2de"; +} +.fa-meetup:before { + content: "\f2e0"; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} diff --git a/bl-kernel/css/font-awesome/font-awesome.min.css b/bl-kernel/css/font-awesome/font-awesome.min.css deleted file mode 100644 index 921ba006..00000000 --- a/bl-kernel/css/font-awesome/font-awesome.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('./fonts/fontawesome-webfont.eot?v=4.5.0');src:url('./fonts/fontawesome-webfont.eot?#iefix&v=4.5.0') format('embedded-opentype'),url('./fonts/fontawesome-webfont.woff2?v=4.5.0') format('woff2'),url('./fonts/fontawesome-webfont.woff?v=4.5.0') format('woff'),url('./fonts/fontawesome-webfont.ttf?v=4.5.0') format('truetype'),url('./fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"} diff --git a/bl-kernel/css/font-awesome/fonts/FontAwesome.otf b/bl-kernel/css/font-awesome/fonts/FontAwesome.otf index 3ed7f8b48ad9bfab52eb03822fefcd6b77d2e680..401ec0f36e4f73b8efa40bd6f604fe80d286db70 100644 GIT binary patch delta 72698 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 bMM{<8r5o_QP+BrH=a2Fd8Qd4nMDO|^^30|p delta 47438 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 ZgkrFCs-@$D%;rjbx%R0L9`($_ZvpHJ=LG-& diff --git a/bl-kernel/css/font-awesome/fonts/fontawesome-webfont.eot b/bl-kernel/css/font-awesome/fonts/fontawesome-webfont.eot index a30335d748c65c0bab5880b4e6dba53f5c79206c..e9f60ca953f93e35eab4108bd414bc02ddcf3928 100644 GIT binary patch literal 165742 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 G*yFsbY~cLNXLP73aA74Mq6M9f^&YV`isWW zU@CY~qxP|&bnWBDi{LM9r0!uDR`&3$@xh)p^>voF;SAaZi_ozepkmLV+&hGKrp0jy9{6cAs)nGCitl6Cw2c%Z0GVz1C zH-$3>en`tRh)Z(8))4y=esC5oyjkopd;K_uLM(K16Uoowyo4@9gTv5u=A_uBd0McB zG~8g=+O1_GWtp;w*7oD;g7xT0>D9KH`rx%cs^JH~P_@+@N5^&vZtAIXZ@TH+Rb$iX zv8(8dKV^46(Z&yFGFn4hNolFPVozn;+&27G?m@2LsJe7YgGEHj?!M`nn`S-w=q$Y4 zB>(63Fnnw_J_&IJT0ztZtSecc!QccI&<3XK0KsV4VV(j@25^A-xlh_$hgq6}Ke~GZ zhiQV3X|Mlv6UKb8uXL$*D>r^GD8;;u+Pi;zrDxZzjvWE#@cNGO`q~o7B+DH$I?5#T zf_t7@)B41BzjIgI68Bcci{s-$P8pU>=kLG8SB$x;c&X=_mE3UN@*eF+YgP|eXQVn) z)pd&9U^7r1QaaX{+Wb-9S8_jQZC19~W) z*_+RuH*MPD=B_m7we#2A@YwQv$kH2gA%qk7H)?k!jWbzcHWK497Ke<$ggzW+IYI2A zFQ_A$Ae4bxFvl4XPu2-7cn1vW-EWQ6?|>Qm*6uI!JNaRLXZFc5@3r48t0~)bwpU*5 z-KNE}N45AiuXh{&18l_quuV$6w|?c-PtzqcPhY)q{d+Hc_@OkartG`dddteZXK&Je zGpYJ-+PmEUR`sOnx42*X$6KT~@9ze#J>YvvaN24jI}4QG3M;w<>~!2i@r)9lI!6N1 z0GN((xJjHUB^|#9vJgy=07qv}Kw>zE+6qQns-L}JIqLFtY3pDu_$~YrZOO$WEpF>3 zXTu#w7J9w+@)x-6oW(5`w;GI8gk@*+!5ew8iD$g=DR*n@|2*R`zxe7azdr7~Z;$%< zSH@*lQ9U(Hx^%Fb|1?Smv({(NaZW+DGsnNWwX(DFUG8)(b6Rn>MzUxlZhNbVe>`mS zl&aJjk3F~9{lT-}y>e~pI}kOf@0^%Vdj&m(iK4LTf6kmF!_0HQ$`f-eBnmdTsf$_3 zR`hz2EjKIKWL6z@jj1}us>ZmY)iQInPifzSiOFN92j9$pX*CuV8SPrD#b%Qa97~TI zS6)?BPUgFnkqG8{{HUwd)%ZsvurI~=Jr8YSkhUA!RANJ;o|D->9S9QB5DxTybH&PGFtc0Z>dLwr|Ah}aX`XwTtE&UssYSEILtNijh)8)WWjMm$uT;+p1|=L z><4lEg%APBLn+FRr&2tGd)7icqrVXFE;+3j`3p~mvsiDMU>yK$19$B@8$Dy4GClfzo4)s_o2NuM3t-WhCrXE>LQ z_CQtR*!a0mhnw#I2S=WxT_H@^Saif`)uhLNJC zq4{bSCwYBd!4>6KGH5y~WZc@7_X~RqtaSN(`jfT!KhgGR)3iN50ecR$!|?Vq8|xa+ zY#*+B=>j4;wypclu7?wd+y06`GlVf2vBXzuPA;JgpfkIa1gXG88sZ*aS`(w z_9`LL4@aT0p!4H7sWP`mwUZRKCu@UWdNi-yebkfmNN+*QU+N*lf6BAJ$FNs^SLmDz z^algGcLq`f>-uKOd_Ws4y^1_2ucQaL>xyaQjy!eVD6OQi>km;_zvHS=ZpZZrw4)}Z zPz(rC?a`hZiQV9o^s>b?f-~ljm1*4IE<3plqCV}_shIiuQl=uKB4vUx2T$RCFr0{u z1v660Y3?>kX@{19i6;*CA}pJsFpo{nculW61+66XAOBZD< z{H|h`mJS5C2;ymL##}U*MC%fL0R97OSQ@lUXQ-j?i{z{=l-!$64H{LlTLo{Ln<|OV zBWq*5LP`KJl74fC{GzzP_Z;;;6i--QpZUrtHC@+RBlt+=_3TyV4gk=4b{TBJAx!GehYbTby(&-R337 zQ%g2)Uc&K|x|eL0yR*VCXDBqZ89C(obOFYYht(k`^q0OaQ*Y{)@7xE~KQ7XN)hGlZ zl5$1<#s!tyf%>mbIG(9WR`R*{Qc_h(ZGT^8>7lXOw^g1iIE2EdRaR^3nx_UUDy#W6 zy!q(v^QLL*42nxBK!$WVOv)I9Z4InlKtv#qJOzoZTxx86<5tQ*v528nxJ^sm+_tRp zT7oVNE7-NgcoqA#NPr*AT|8xEa)x&K#QaWEb{M34!cH-0Ro63!ec@APIJoOuP&|13 z9CFAVMAe@*(L6g{3h&p2m!K zEG?(A$c(3trJ5LHQ@(h3@`CB*ep}GDYSOwpgT=cZU;F&F6(b=V*TLLD z*fq(p>yRHTG1ttB*(Q8xLAl4cZdp^?6=QjcG;_V(q>MY0FOru|-SE}@^WElQTpCQZ zAMJy_$l;GISf1ZmbTzkD(^S!#q?(lDIA?SIrj2H$hs*|^{b|Kp!zXPTcjcCcfA+KN zdlV!rFo2RY@10$^a_d*-?j7HJC;KhfoB%@;*{;(hx_iP`#qI(?qa{b zH|YEvx~cE^RQ4J}dS>z%gK-XYm&uvZcgoyLClEhS(`FJ^zV!Vl&2c{U4N9z_|1($J znob`V2~>KDKA&dTi9YwyS#e-5dYkH?3rN(#;$}@K&5Yu}2s&MGF*w{xhbAzS@z(qi z&k99O!34}xTQ`?X!RRgjc)80Qud0{3UN4(nS5uZ1#K=^l&$CdhVr%4<67S=#uNP z$hnqV471K$Gy&){4ElZt?A?0NLoW2o_3R)!o~sw#>7&;Vq954STsM(+32Z#w^MksO zsrqpE@Js9$)|uQzKbXiMwttapenf8iB|j(wIa2-@GqE@(2P#M09Rvvhdu!sE0Mx&cK&$EtK}}WywYEC~MF5r3cUj%d$|lLwY4>`) z_D++uNojUl@4Cz8YF3nvwp>JWtwGtSG`nnfeNp(_RYv`S2?qhgb_(1$KD6ymTRgnD zx^~3GBD2+4vB9{=V_iMG*kQTX;ycG^`f{n+VxR4Ah!t~JQ6Z?Q;ws}Jw|#YE0jR0S z+36oq6_8xno^4J?Y02d!iad3xPm+8~r^*Vvr4A<|$^#UEbKvJ9YHF=Ch2jF`4!QS# zl8We8%)x>ejzT^IH%ymE#EBe2~-$}ZXtz&vZ_NgVk4kc zOv-dk(6ie2e{lAqYwn9Q$weL#^Nh?MpPUK z#Cb)4d96*6`>t7Zwsz#_qbv6CnswLS9Jt|b`8Mqz?`?H1tT99K#4#d+VwAy}#eC74 z;%UFxaNB!Zw`R9){Pncrny4>k;D}TV2BU0ua-+Fsp>wmcX#SGkn`h0O`pN*`jUj8q zIlnc7x6NRbR)=wP1g`-}2unC>O6ow=s{=NV6pfEo3=tY8 z=*$TKFk8Wv0K8B_**m*Q>+VW*1&gD#{#GSc(h#YQL?*<(ZUx~>L^RyAG3}j0&Q|mJtT7ec|Y7cr~ z+A`Wz!Sqz9bk0u-kftk^q{FPl4N+T(>4(fl@jEEVfNE$b*XSE)(t-A>4>`O^cXfrj zd_nrA-@@u?czM(o3OVDok%p3(((12`76;LwysK$;diTl$BdV)!p5Gj=swpb=j2N>b zqJ1D5E#zO9e(vJ6+rGuy<(PS-B6=gHvFat&)qr%j7T`vT1ju zIvHwGCk5)id{uDi@-e?0J*(-W-RGZs)uhSeqv7TA&h|CUx(R0ysoiQC8XnxL&RXI3 zO`H`8Pe&^ePw*`{rIJhzUg@MuhUL`IONG^*V?R0h5@BRDFgEF45b0jSrg0r{<4X)nw^c)uQ_Ai_p>ic!=K$pmnyqYb=`6fUo40ru#Gh= zMRJxOD(1n?Mjz_|IWyJK5^fh3*n>eI0MmEKq%=-oIdGd4F-LT>RL)Bp5FWxb4aNLNXB^o?YBSXQ`SwN zI*N~(CQW~P$HpzwrMG4IZKI>TVI4nQ$a-#)zV}LE(xgQ5MG@L#e!e@ ziNtg{Ph&qpX9FLaMlqMh>3)Nu%sAO#1NEsbe=#4Vqx0Y;<~+mV!xwj%}Z=xZn= zSqjxSH4T~v>Xd*=2wmHPN?@+9!}aQz-9(UIITZ==EB9}pgY1H4xu^-WdOFSK!ocZc zd-qhN$eZcN#Q^0>8J%)XI$4W(IW6R810*ucIM7Q#`twI|?$LYR1kr>3#{B{Z4X(xm&Cb21d^F9MKiD=wk_r+a=nyK!s^$zdXglCdshbfKBqa5aMwN#LmSNj6+DPhH4K-GxRl;#@=IJc zm{h}JsmQFrHCioWCBGzjr5p9L4$t4`c5#Cz(NJ#+R7q-)Tx2)6>#WZDhLGJD964iJ zJXu`snOYJYy=`<+b*HDiI9XPo8XK$TF86)Ub5=NC@VN#f$~GDsjk01g$;wDY!KqOh zC$x={(PT7CH7c?ZPH{RNz}Tel$>M0p;je4|O2|%Yq8@sCb7gRhgR4a*qf+WGD>E8~ z`wb<@^QX)i-7&*Z>U6qXMt_B2M#tzmqZTA1PNgzcvs|(|-E z4t*ZT-`kgepLl0g1>H!{(h8b`Ko=fR+|!L_Iji>5-Qf34-}z%X8+*Qwe^XrIS4Re$ zWUblH=yEfj!IgeIQ>m}+`V(4u?6c;s&Ym_6+pt|V`IQ1!oAC@R1XC3tL4BQ7`!TnU zWaoqG=nhI@e7dV7)8VzO8ivuC!q{hcxO7fo#2I=<`rktP0OfAO-CQE!ZT@}e7lw;{c) z@2l7RV$@&S5H@{=Bj~^Kp5At=Jq=Y92rXP@{-D4j>U=-a^gM2s-nIZA;u=fbm2BP=Zca5W81_cA>Tr z)x+r@{pu_la2Q(wm`Zqyd@GhNDNT&4oNHb_>w4{jIU}m&iXykMxvi;WL8;y7t}cp& z9CEpR)WlI1qmOq!zg4QTmzv#eP3>NLd7V-+YKmuyLFP533rd>WnvL$F3b}g39PYk; z)^hXQ%5jO(B}-TMio7@t<(V?7M5!ycd)u4Z+~!hym9+KwPVO^Wkhi^Dc7$R@)o$oh z^mRbgQ@5EvalJa}V4Bi3cs^w5pYtbXXz5W|e%+z-K;8M%Lf~BlZRvNI7=)cG6lbjg z?)l8iOw!mU`uaKN@UL4>d#edM9^-ePb(VICy6Cg-H^Ew$n_s801w`A83W!_Z{D+1G z(<9A>WB@>)D%cxw7c?Xv7N}6gg?&TkLX|0@k&VL)YMI~SsE^dzj2^3BKL7SM$!0Lt zj;ytKWw|(58n6_NNH$JVRh!W*wewMr7)H2jOCruuJAIIfPMFpf6j=hL!D3nVT9Dpo zut}|VoG<%v&w;HrQtz<%%T&X##*z5{D!!egoRN}R_Xxuy+E3dhx6!7mlNyuqsKR-P zlP#8EKGt{Ij~8kXY?&*%q)PkPG;rziWPd>HefyPwV49!>f&Q_@Fn{8Cyz{HCXuo+( zJMu<#{Tl}^-dh%nM0IrDa@V zMHgAog4`tk;DNK-c{HwRhx%Fn%ir3mex!XeZQ4QY)vQ_iZ(j4-GcO?@6Z-Y*f?u7_ zmf!}WRoGkI#BO9;5CFvMobtV@Qm?#eNKbbX!O@xEVhnm z6LFnWu=E}6kB82ZEf!g}n5&IuivccTHk-_5cazDAe+O!_j+dQ~aUBy~PM34Eq0X-LOl zjunFnO<4Nq|BL`!xwvyj&g9Q0(A_*xLT~l{^nM&kGzB7+^hP^L&bD7iVdXe3wobJXVX~o*tX$ zI5xthE?gAl!4+v~+ASbN2nYIqNn_#3>!fi2k=g*Hg_%caA#plNQR+RtHTiW>(*OFG*-nzu~6DMCrX>xzP`3sj}D!||8 zf3dk-w(NCUMu^C%k|t?sa>9gU_Ms-R2Hhm~4jNfPPyH!3Zy zV0QFf=MWK%>|(eV$pB5qOkC)uou{oIJwb_i4epV{W95%N)`+uOrLx7fNtD^czsq4B znAWb+Zsk|YX}a?b+sS-!*t2w1JUqU6Ol`&Jrqa5=4eeLWzr1DX1fWW`6MYf+8SOW< z+EMJ|fp${RJ7q9G7J+`pLof$#kBJP^i@%wNnG3fnK?&k>3IUVo3dbs9Nt)x_q|wIB zlBAi#1Xv-<+nr<13SBfkdzI?dJ|3~?-e>MzG(yRsA}I_oEd{HEGZ&7H|Km9mEbL6r z{Ubhh;h6_QXN_?>r(eWJ@CM1-yn6Y#am!aXXW!EfCpu}=btdYT?EJ>j+jeuc%;P2g z5*J%*$9La$^cy>u0DqjO#J%*IdaaPnAX#A6rRQ+sAHhY@o32==Ct3IF&sM14!2`FD zA))>ZKsccTyp$U0)vjABEY_N5lh(@e+Gj>sYOTgf?=82K)zw-?JX2d$x}n2Y0v%SjDtBXDxV2TyyxQmN?2%8zkKkKF*!AA$P$1#qrF%fUu~URt`tp3C_(>^tkcbHhO0Hh0A zpTVQR{DjsD=y-Bsl#nuTVKRxYbjpSJg|K+SEP+^Y*z3S9p(_-s9^YP5Zc?Vz*o(Qx z?f03co`dGfW}0T>UdEZaW>s0XVEzlw@s&bc+B-9;^^AGsx$AE~!1-7?tn9z|p4}_? zRsM&sjg1>#Rb#6jFBRKMeZ>I_4<%=&rF3yqUD&Lik@7<@2*(0rC)UqPj`Gfe8L&{S zhGtB67KhF{GnLZCF}gN0IrIPU_9lQ)mFNEOyl0tx-!qeCCX<;7*??>lNC*Q7`xe43 z2$7wD3MhiII4W*v6;Y775v{FSYqhp+|6)6BZR@Rdz4}#KZR4%=+E%T%_gX8-9KPT4 zo|$Aa1ohtUet#uro3p&@^FHhEX`OcGjq==$UeAQ~<6AZzZ|l75nn<#}+mo0rqWv5$ z1N<|1yMgX+Qmz?53v|%P=^&74bwqfH?xIC`L()W{|G`j^>kbs7q<$hb6fL@S za#nHyi$$TJ7*i!6estChR}QriMs#yy!@Po#AYdeWL~* zUR%)FT#4Q~O-N!O&it}b8zFOmbe=egH*Ka<9jT?dFCMAcagAo<>tKrW%w?P_A_gd& zXwHTn>a>WEWRzimu7EJ*$3~Jfv|@bLg}6iH4mgJB!o60eP#_N!xYrQoMf4&rGLau~D9ila zYGD*3*MNN?v*n6op+dQM!Kkr@qH1|^ zh7skG&aC;+$C$OSR2!ke>7|B6JDpjV%$Jo5hI14PGyx1I=Diw7>h@vzL?PLTzC;`; z?}nkmP%J6$BG!9mxz?+Np zIHbVy&<#H&Ekz1(ksSJ_NDQ+XHyg-!YcW8YvE5v*jFQ->F;|Q-IB@Mw6YP~v=jY$~9n@~8MVO{1g z@g=-I$aXs1BH&>hK(~|d>Y9n*;xRm&07=pLuqVYV-bwyCUIKgMdLSrovEs2f3{b z<++d|UX&}*7)y8){Ntc{RL*udOS8r%JV4EZ64fUF85n7%NAWejYbLV}NB|lS>SnYN z?PFpysSR*OodDcNK;OVKsSbKS^g;|bSdogA=};1?3rYq|Nc_tR!b2ln>=bNTL59uS zZjF^Y1RoS7qF^>LEqt<#Mu0ZjpiUNLtsc5%t*8}5lW4OWwFXfqGn-q~H)5}2mSRZ^ zKpfQxOe+KC(M5V`tz1zQ)@pTTQ2?NgStmwpvPCi&U9wd)m<^I-w&{(`Vb?Q*4ApV5 z(G}DMfgox!S_C+OTa5UkEbB#G$SC<8vLrDPPT_Uq5N~7`%Js5Ut3!o!f@HJm?b;(N zbbv90V6J7=E&)E`b|}N4n`VOOuvo$IEMx`%EkX8mpug0yY80enF3?M57gI zQ((b(;dv_v7PDKFgL|6)q^sb%Gp_aU)wp^uX96>jGEsOmBhyuDZ8}+y{bG?UqGqyDfYMtJ{6@xXI>fVC9g+uG zbQzl4fY>P6VAkv8GEpapl2>quqSIoui)Mr95Nuw@voGBux%Mq zYqG!&A9RXvoI%gZRwI->g2SYPB1tbg0U9UkC70cRFPTKU0L{E!2e?|as;p-wNwA;> zm}yKfYURNzE545Jz^T+srPZUGX{3qx0H&3ol`)Eow3xXj!2lx+DkB=}EoF`(n^)2W z_26hljpwvSdw}akJQN9;WAQnnHTN=3Ko19hR`Qqt#60*^1acxN84Oi8W-4nXd^@w0 zVpMzKqWw_(cHwQ`*uQ>F4F;Ncc?}XU{q867ZF>zihsu1j_i%f38%41S53RkO-5Bq< z<^ffy6fQNDn;z=lDz2OXjU+MMr0ziZ)HseHI3+}-N8v$8UWEK_n5pL6VPUS@YH^ z-F?^bJ%5Vt}@l0B2B$XfpF!7J0KUW$rc!~hPD3+Ms%)ia=pl{0nuS0_) zMk9rt16uqE&;%{gtVGqhUs{u$%()O~zzC_11`vYVVXfdfEU}YwTDn~JYTSiTDRNih z4#ap?$m%48h4*c`rhEH7?VLTW9aCi~b>z~)W0xM$c|y(8H%u~4?Yic=Yr3WyCvBMC z9P;P}Ra`!CY1TVd3~%qgX48EO<*6O5d**2Osm_lAM&ZKw?7XUKU$o?gjCIcqH|%NJ zuxtIAj>_t$YW%D0ShIfD2DzU5%qnHsRN0vm^B3-wcim7D^;K7~Uj8EuKZ;X3tlbVD z(=eh%wxAVAWPvDL3Mmg=TPKpMGzTdG=aT&qTw(TFBIg<;`kFOrB)&>#;&>KE1kb>+ z2B2dhdAN+pj}^ZH_t#P}WOC_RDs4ppbD0<}eknMnviR2G%#`AniYwzKw-y(_5*$-_ zmw5S-TNmxQbkR$TmM>p=*`CF(EG{@lszbazB$k;2MYhTooy&w{`02hJ3>+yIKEOe7 z@JMkSHwDW^-jsRwlSM}sEqQs-p1n(#FUOllp3=O)Tup&?1<^)a@`nk7JGz35N>n$} zBOy~(>fI9qX^_jCE*5|=cn@Q((|dZ4jk)4MmOAk+0xA#wuDRF-%lTtBwIA!9Gr9Ct z$c`7mj%LBTedqC%Rm_T=dk5?Lu6Ta&XaF9q!a$AUtk$ z*e$72Su7q{Rad`o)%w|Sbyv5rzAip{{VH|GtUY1tf`Dk1!6*HuN9YH|>@$Gpvq}N6 zCzbi<_XLxmE|LLdr@JCzPlDyUYO2J>kDK?krp5CY@11*7)8aCVVb&~zrEGE2O>>tojkD`+_dDb1*Ao``HQpP(giSRL)4OKuTMcNVOb@(m7M?noGc?geUJ;8t6u0>WYa5RLDJ>(^Zu~>-DTzEbb z=Pw6=C#Q(ao#It|Sa^jEBWtV8YNL5Ce+KO1 zHqBg6?QNQUAP0QbaOG=Lqb?5ZLlZP3JdqXFBbSG?_!QPegco`UzEDBCfy7n?l|5O(2uWh*{9fh*}OFkZGv)4J9g^Su_Z-y zktO~$6KAdO?4HIhm;a)+gVRbF%BNDw_qH-YUp3>pUiriPU-DaPao4J;%WF%Dllm58 z#~3FQnvO5O$UIv}o~Up(EN-l>@f8Ipwl+*yG^2h|U81N>`H9+~R;Nq6WZk+k_l_|; zqH`}-wki9Eekf?yVOxp~wx$i7mS&wyRfA;|YZ$pD0iFQM7=^Of;Mb5{*g%Q+MV}ZZ z4uCY|_@8q>JQ{}h=B5NG!svf6mRKr5#bVli@?ZR%doi+~75m0rb2XFdcTK&}XtK)Y z#n$?!<(KX3?3gc;rSMQ3)+>e{<=;f)h)dXgJA+DdJ5q_(=fbyjlD zyxOq~%LPEFsh*KmXEIW|_M9hDm%Gdrv97&s&LCvUqb)02CoZ4W(b4X%EB2q(#G5YM z&@wJkH_qwtRocyZt7Y4`(pa=cD4!kEPl#4{yum=*q|U{&O2DV&=)yXRws%3})r>`7 zty6tM=kuW2FpR*(!{^GYty*Jp1woSmG%(Qs4H^#!;!Q>OdkH@{*K(vzM1v#qO$_R{ z7+Jto9d&*4xTs#V1lt-9mM`tTxU{8|32n(X!6M-UNsS#R?m__F|Gn3X9 z&{djT%C$c`e{S8Bi4#KMy0LTS?(Vvq%{y6Caq7xk-@t{Re0DV4heM^6gkrEpL-{{% z)|>$4EU3Gq;JmPH{E@zsRX+#@>gc;qk2i2FwVHuCI??#%xdiMweM zWaT78*EG!|+OV634wd0UaR@TenRhksaP%AUUdHC0VcZ2nT> z|Lq#TX5O&2h!GYviFiX{IRHYEViDCLf^Wf)se&K4oOU>MQK$_!7!L(|E5Bx`dn|^Z z8D!P9pUu^~tYLFpB<~24WRqgt9Jadj5ce6JRV}}8O%6hRA!!0JH5LHs91WhgWWLJ- z!KL(|#^$p^amdJ5g8rZ$Ggy6?%`B;J_Kppf<0XMKcmmW9@>-TJn~gIShXI5aI(xEx zlSd-_6cOeEGR2J$MBqWpK*2%7D7_wEFG0(EP;?Sr1EpZsk|pld3%9nq47KjwNtga; z^X`AUY0HzBudMExSE>hYgVxdT>O;3bbp6&zv#t6lVjtU=7OitgFDbdK>r_jozEYb*t7qdj?MRk%pu)4==CR^bNgHOU-j*emraW7T2WR%b?1^<K?p<`lIUQwM$W=cui|bx}?bTOb6E1v3`QcM^BdcQe z=PpkFc*njs2H)6MH*NX+$l&D3bkD1=@_CF6^b#6m7%YZwDoKJobt%*>6l7EZ=V>@G zzzY{zEr!q?#B%Vk9VD%4E~MxbJ)hcn+q^0Z=@qNy9XNJiUX{8Ns(OzNq-fqrsbhbE ziWT!T7SLhKQavnveOJ`2^uK@O;eGSx?>nsSlq%#_#sdo9iphZ#Jwo|{FhMbfSrS>R zQiwFss8KQy?9j`|&<*8j64q^OVgV#e63^ksE_l^9($wb9f`EyHv4&?kqn<@TAOMm< ze1YGL4dcENbcWZd&n7h~Atmwe(#RoslRpeyDguGF}j}$MRo9?SM8!=4Q2wU($EzceOopeaHDv$UhoQfY3;W=e^g5xM87H z;I{8*GeL)G;HH8ITBt8$#)NOPnG>ql&Qh*h zWt>ty34rm;*F33uigBg#?eg{u7R{5>Q`U$R2j3@_Lkx_M{bOC#*zx1XR_*c*B-IGq(GV|B@o{8hJ3p1*lD@AJn%&$i*n1|9(=hKoMs|KsjeFu0HwhG-gj z6NR02xQ2KllvU2l&Q+ddYuKj6LihSj-&!x-tUR@F>EtCIlkybUel`o1t{IyqKm3Y# z^I%x~1FN64cI~X$=bbnBPUd;Rxn=jXhSG-2Z`jT3lX2q?hsL#({W072*)OlJJQjT){R0dcw$MIV@Im_3E)riYBiU=q`Y_6ca&e9uVeb_jW)Y(*6X`BKYM85 z!b8t)Ui*XT*XL>UuiVO9x8B8yUlNM}WBcAqm)&yESfoE>5R7X!w(jnYSbl8TpaivJ~v3;LD^f$vOykiS%0kDp1GRq zVCg_iC;5ATIf&(~gt_DK_8Vo2`%JbUh z9jfe_*S6Eje-d8cyItyiX=UK|B_;1L?UVG9n?6x~K;xR|0vZ5x!At8OJYq-&B}jT5 z#x}{P70vb-p^szS5EvI&o&q#3;_jrm%4X&6S8u*@Sv#ZVm@V<@Hf3s4l;7vm>@w-r|)yZS%w?(I1*QeIrsG=I+5nepzsGxrc~ z!pSc|SCA)uB~*o*q}1leH+COyX<6)cl^Ly@AOH2^A6)<8mq0BH{PW9E7WVFW74(6f z)`kEd2^SPxr15s^#3*QkxXWqEyk{wqj1GtNbEQ|(J1tK6 zUnIYs&2$CihuMv=&x^lu`v>+G339PrtlYp%HorK*>MU~Tjmr477+hGhviLYl@>d-K zU!uTPY~kv}%w^h&xW}uU?TFq&;?(Rl#6glkWN>Gw4B#URl`pWSWHsaPj-^{T?+Rl%;){@`StD{A2dwJ|V96v& z$16bph~Zles|b2KXKVo$Gy2J6qqP8xDY~bRh4}rn$()b-mt@e#Fwd)MdNQq8Y*-I^ zKqOSY68uyOQhX&e!epDI){mhNNM=IwXQLY2+&brLfPWf!2x1u(hS5ey?BxMlyyvL* z=no!g*pcWU2>q^rYg;4Lqki3-zG)X;d+6E=r*#^~7*m$_EGg_eQ=4jA+oZ8YMYWd6 zb?&a!UGBQcmfE7Cu~J)W?WPsCJoTfeZdoCs5nPtKdb}+(w{hma1+}#c_RZX|z*J-U z`YpG79lHe^?%Xkc?nU**&Cy^m+F0WA*VWfFHrCYF`F$mgbgj9#{-U|#cig$|;T=<^ z?0A^d|2~dA8{jc0T&>LodGPkA2Ce<%xn1wIlX?a%!@Eq4Md6Y$Pjh8C)#tL9&B{-Z zDl*AaMfM==qY6ZMs*j2-_o&#DtOvEgKO^o#a!G8V!FLJa99SgR=R+3-1WD>6kPt4T zQEnn&KOhDe*4&&kDJBfJWl@4anq%Se(e27Iv}pbO#r>3wvWJpUt}zNZYx9klkhS?P zCbrI418eh@4+uTT5z<4YR!}Wu!0bb{)|g-CHs~wgPLx_;gZ}Pe*r4aOmyr#+pp0lb zHFY6iYKHu9A$fn1?OWE+XV41w8uJSK1!e3*OLwh>v1U`ou!Z{BA27G z@n6d|J;N3qwe4uQiV3KTDcpf57p!m?0p3so1Ax@X#2IiaA}2>9&SUXL^1&>Xh8#Oo zQ?C?L-8M|oiJLpU6Q{%GGh;&0K{owhQSY%3!h1qcSn>U|R_L;f`cCNUO-efJ#sSbh zkg5Hb9y)Ys=YeAvt+X|EzTjRz37BGClh(UmXfNBmxvV{Ttan9870vRhk`;uSF?`m! zyWBXXtg*^vTY1s31F*aP^xb!Xf`+yrz9*G!3+V51{2PK^bPhMbp(nxq$mtS*2*~V% z(N&JbY2FYBI?V#24?IeNyZFFOpZ~&zB|@M?sbh`bnlV9zkG}tHdLK zx+5aQXm)byO7#8XHFtDn$5~LO*5aqH%?m z$2wT6nTmGDI)?$JimeWHNO7Kra|S#r4ugug1UgoGf)+&L03keV@p1OHE$p^lBA zt*GJGLDNniq=XZ4I+Mb*82pqbfoQ@+p_JGdB0aQaeTB!Lr#Z$97FjWL@MMe@Z^D+s z&IK)jih;Wbb%1MocDc@#$)|IKVWN*g2&aNVGFMmdoaL`cE`T^;1?Tcf@^i>q-czu= zA7p!sX62V=__ATa&S(g9I0rd{)J6Sdr^qB}JA4(U(1Y-`7)a4D)MA`g7I!Mwm6+KC z^C_nUK7sX}(ukntS*u>(uyyY=UeDi#4Mlus`)o8@(xaLmYhKp;LGw3oP&Rni)G|cQ z7Ur#P!U!VO1g(pNoJAP;`R9fA(}??`-wW?AJpaG_{Fi;Nu)eT^;QuU%IRlFc*+_>_ zx`&U5+e^|ih7FuRhmOU(m+aK71UlNUGH`jW!KA(Xf;sb)=69M;|L@O||H&xL zl74Wt!{fDxvzf&5M8E`Lo>IUfK@P&dqXA1j9Ysfw#32a=jPn2f=>Dps?=)zh0y=nF zlN*J67GXr@2Az6He%|WXWJyrTG^F6<|JoS+k`Xm{tCR{6!43_i__z|&s!LT*4`;a3 zwB^UO!_$ZGtWdT77?_S^7Dqv~y|xiDP)-YnK8%pxr7p+Lxp?4~wPvULd zUmZLLn47GQg>WUt!yAzB$G%F{zYS~B=am%aex&q3x^I|U4B;Xp?}AZk z^YIrlk>Jo6{xrIjl;V~Ot%d0#DhpmMHo+{Xi^Rz)*c5L{kRh`PE-|>;1QQ0h^lDfo zd@>|=U5Y91Dt-M)<#*Gl`Fr}3$-Z}Nfx!+IeZ!v7G% ztcDQl>kp+vdVk8V$G)HSg>V(Daj1A4`JRB+&HA5cq3-~n7Y2oBATKb2YG`uA6X8S{ zY?6>Vt(nsVyAxRF6YnNNtUn~CLrIFaIITfuxMVt=e)j}2Or%oj&|p93A5+|pOZ*pd z#pmb`Sv&G65piAWD5e2SoNSIcgY-cWl#06J$28$_X(YT)8umd{pHg7Zo=kQW0->a_ z7yr))>upwE8ZMWr(itk!ke5-mNGO~-u?owjq}8&~H}EaBRQUYJk_kzaMJ-j~1H#0S z1rxw$&lCSsY5*5Eh9p`{{~@y^&(mjM(r6cji;VSvEmZ0dZ}u7v>WxNaH@lu48ujuc z{04p_HtH?AmEG!dXI$pv!-8`CYpz_XJ(2siAQuczyy!!@pi$wT{)yp>!Xhe@`nl`z z1^zAe8p<`=WnrFL1*!@PPZ=huBJ={PS>a{s$9bBsNe$AX5$!cHKZH|luaOs}hA*pi zw$Rj=>@_5!LqS+x4X9Y`l2I@7_L`@81m(I&E!VL96$Z9khIpPCg?Db=MU?BT)g7f3 z1oR}eOn#rEov2`=TqatC@g-cu`;n}|1~nUG-Vnn;qJfhg6hp5T(E`dSLj-kY;GX6Q zi-z9$l?TDudYiv<9p*t?+4_WO=CNA5llp|}o}F1=q4CAqvoxnl z-+26xjr)Osgn&kH{tC8-tSujYAX&ByDk<0rhH0A)eE8>_MbIX>Z9mf=3Xu{d5DSGe z{bXd;!bUBGMEs02AatuZk6h5A3ny8K=vdpjVylr_0=J@48tARLevxvQQ6xQRF2uMT zDdlo6=qryT!$n?JVgWh91v4nu1G=%?-N5?j)BLSd2l{{#%0EAV&&xf1Dr{4qxZQ5= zL(D1c=mH9)qTh-=!wPQK;G!Plb9%5!QL&)AKmk+G}epRD9NQD(&9O0C6ZElh(DA_jLN=MkxobFd(kGnzu)+M~#d1*vxjpI7N&Q;y&0Q(nt9Ov@ z0UAx~93%#q(<@Bk9CzjhzLPRMRY32Y!M4>0SFb)OeWL#Q0u->@`-CeGuA;1us}BAQ zc@mIQK>2shoeQcVJ#!PiaLyd@Kj_ibnQy2+9_9fE%1-skgH%88v00xH6V6~l&y7;< z3z*+Y;rwAP`&tJ>jA`DJcZ`7&@iupQ%b%(G56`bmS<#9BG;0CU_T(luy zt=;C3Nlc<}xz{ z@bcSeLnyAw`PUGAL>*F~12pf(YnG!XZdkkO7$`Hc?ByN%$Z$rECfLDLP%2`Mw2Lkn z%iuczcuO)T(Vwa}C$&16nxS+qnzVRQ5p9I84;?;p=#nva%=pfXYl&x;$;i_ zP|dt~6wqbsm-{)G2ROAL$rK4<&wrWS4F}$7>VLjZ~K@NB#Cl zO&Qzj{Xrj9Q?1IwthH&{H`*sEN1LX>TEL$T9bDBnzAi-V%H>rqOSs{8i9DPnOQEm? zKnSNAa;HMY+M##OP3;`0pT=G%gsg(SQ~>24N?A+(Cl^G2rTi+Y_Xmo`>Wi*@@Y*8% zxO%^0U>2&c=s7QU*VIcq8^q`sm^J3$P#9i9SGJWj|-YQ|Bbro{q^IrwHjL#@aw6r zO5(p)w}zsz_FT2}`msf*s$lq^*3AS90U;2;%8zQ$AmjS~uU@58ERcbWhv?f>K#BeL zYN8qi*%SY*!e{wB?9^3;*7vWVA<6l3`r<8_4JXqkECB$U^#wWOuf$1XFNlXZ{n58dU(CAELUC!&Oi-&kb(YyL&bkw zFG94K{HSTIT!grnt(x7Mt9azgH#FZz%{*?b|DaQ#z(AfKI!4Z}p<~>Ge#1Se1*{80 z*9-3X((C!(%0GrhVCY#e9J%8rDwB&WM#Ib#hh$(WdygIeQucm3{$#|=Kl+eJTk1Z-(L@12&%MZxw-kLv=48+WES(PWIT1Ks z0C<=YX2Yy?Fc%$1$a>sE6N@S(ydbyNTznjed+MRp# zqQd(Tx2JkitUck{ZkFv%h>+T$y361us*p`!x@ITML#@u!?BZJ-!@DqEXFzk1cNoI{ zJl=+S{D?*ZKK1{XW)YK5yzt`pzw`QU#6SP_sM{sCSn6GMftpB-*B5YYd}6E1T{V8s zBM)6)8@_GeJO87$68vfVhG%-%V?Wnl^6Z65%hMOv_5&oUSnJohv?fUse?PIwpgrjj zbkDBTKUc**{+~4@My+3;_M*cli^%=z;`psm^74d} zCj*Zab%E6QT+owC_c5m2HMR6aD{F5vvrm4M^bRUw2oc1;q9jPZaA_vxsFaP~U?%O27@cleW3dOF$d>Vq0Zl}ZBVHjH ztf_?4md<5`q8EHId=*llqXPIzIAX%~1B?b5_S~HV>kar}&i$g+Smv7ZlTat1QzXxJ z$_Fac3X5RMSd@80O63eVgMA|`7viFSV3ZmRpY_8pOoLm0i@%=q@I7J=7Vq5YX9ffA z{>R`WG+DU(#C;6O|HMaLg9l zl)V7Zh_060KjCS9biA=f=azMILnJ&h}h zly@(WRadr83lyzrB*7h*#Kz%c#TEcwRZLH44Gb)Vv~oEAv$QE>6AfHr(F(C#@+ zLJlGHE;Y1|WL2(ysP_V;dWc_?Nl(dVTAaYOpjag5{{*~1y#T?AsgabJdOGqoA-oeB zE0oxN_!V3X&c0eE1?A93*;A)ACcg=udm8GzJ~h))e_kxCET|AT%Htl--e2VXnV<@TsN3YA17M0e6&-Kk=YQOE2LMDBtsJQIke# z@?QDP5g#LZ(1S@bh&gBDacz8F` zRpD-jIg8-ap`Ym@6rNlM3=JFCvr)2b9N_9ODp{J#8`v;h=Es?IOxlxNiKM<#Q9_2M;_jSYUH}t zqe$Y&x^->4;JRt+*3Xu{ylQW~6s%=u)@ z9}!qmL7OlT#T4rTQru(OPi>~6!BlKwMiZNC$FYcG5yvTlmyw#v=M)cWYQ~gfFJVt> zq~`S7oR)6J2?icV&xW6Z&I8CNu=}8Y!-3V5*oU(pJV!{pyvacr8HA5P0nDoEQ%(JY zi_HlS4K2djpeQwr8f|LDf-$pdJEIqbnAcQ(`R2Mwiz8zq+ZHaqq%>Mu7wuYe%n&tL zfGjDLMa5%lx}tTse#w%qZMbXkq~r%<8NgEgk(yfXgz;U~-7DFX3+bnQ@#AqBY=^OF zLbS7X)|dq=R(4l+ji2DHt%>*r30Rp-(iA+JEy;u?keU%+qc(@`QA$BS9Orf!N}fVd zAL_Iua?ljh5MAJ^c}*yLOiMzDF9{(p(30MIi+m$<`Ua+XOL>c2D0t=$9GupiRQ`FA z{BOl%>K)}7|3O^Dzk_}@em{Rc@>6mR)GzU+fJP3!_lP56}Ebt+|2<0=uUVxPy z3)N6@44izF$8~7*yh5H)fjBg#!VE4emB7mt}4}d2r)5g#{ZnU8q)|NhnorPaQnz>S+LontCn2s+La0 zh$jQ|3fkihRKrX7xJMtz8qh?orW`edrfqDgrtxfxOwvIr^UxInxzk2wXb_tKnHl(z^v|lS3R^;C5-qU z@k^Q^e256y0(|hy8uo+8d0&n6hRC-))pyDz3Z=lgVFfaOs{79aG081CD(x1Z!z{a6rfg{`f{nt;>Z~S~76JTgmet|iqonNy9qSRCrj5SG zE*k8okuHXMA1b|YZ0qc>KB6<%`;DPFQ>HnqYN&4EGLuv20mv@Zt>Scu^WHjG$A{{M zn0_!1B4y#@2tE)shK{KGiRKDSUb&Ams?2};;|q5pJXA^P3}#c(A}>+?UHMSdS`A5u zx!-7KdwaT0vc*icx+RrkWvS1Vqu=l9QLeTd`z1pXyttbcEn$YF%gs^<``o$khc~%U z9?(+A$FHjL21BG2Kpc=@FYF5APed6YZ)jh=UwQm-OL4H}p<%olMV739mlk7y|VeJq6h({N-N`F)AkKU*9A zZncuEumPCb0)>TTg$*!DALN=JPBdym6qG@%J)>S~Clne0KH`mlb{f%P!tPP}AjxA# z93;`Q1V$D?)kIu!LsQfhjw9EQ9F=y_B1`piC?(juo)nIC0- zDn9&Z<}dFxHQlKEWj$Lbgq~n;oLYO|eW)MPm|++FFVI|Qe8Ff4uCPwVdtGoTV=nn! z9Mg!5}_H(v@l9y2_n5lmXZ?=E&S(lJU6Imo&ZWZIn@mAKqMS=Au89C=0ru@=+;YS z)498q9ZI9JWB0j$+}686F?+mvy={HRr$^I7WzrL;!!dIDMD^t8ryc8UdcBwRSe?@Q zeCZwRQ~JDm!Eo-)4?J-5xd4^sKe}D^^(*(gg=;zY{*Cfo)5#lh`mXYC@C%ts-TPOr zx4Ya5jAH>O zc|Naas2cQjC5qX ztN*_ zp0iX-C5(oALou489mBshd<ac}LWi(CgsaDL(eO*GXYH2uLp{vr@SV&-2TX_wJ$c zu;DVWH;0OocbL`LWcxFSsKaT)I-4jmq{X-c2t|aJQkL}QXiTVMz=F`J*S(Tc{UO0! zi%CAn@koN|GR(ehQJ(p;)$Op{@wSOMEh&o|_Qx>8!DwP- z`FJ}oaQjgCpV#o@Nx!OH&py^S(Mo<6#&dsVsr*A}PIAih}WFPR&w zCRp$^BQjucQVv0ZvdTb~5Y%*mLkorYIJsDrg^}#t?y#MKoS(VfIorvSE~hJ+Nkv_H z1NyT0bd&Z4`Byk{k++vY9$qbIp;T4E&6tF`tlp*!>j)C5KxYI&p)K>A@*LYD^nxH$ z?vczftYFCQBHl2#E4np$pk;es%l>Foya6Zs>Eu9EYEz!e5Y{R^h4l>CRPYp*(qm5H z=D~}jc&KkX?%Ns_4@L11PWDH)q8*0URaN#UIU9C%a`k~+cScW=kFDx3OHQ<-c(1A| zhLPT?d~EY|Lya>!Q^W8jeqE%Xq@>T#)`R;Q;n0=BC`ofPQDBM+{rFksZ55a(iGAa) zU*eU+_dJAYMzc*kC0`CJJP^FOO9?7Xpo<{uSO7rZNrA__;wfikngXyqdcC>NU}wp6 zrPBc|2Xff6WKjHOlr*OB8%+b_HySNtDX$lf;WU+r55_k%G}>I?y}14c>;mc66GV=~ zB>p6tL*)LIuB-?uX}lCp$PRoG3NBNh#Q-2Qmv!*o*&zk*WvQ}QR7jc9RyUZv;eI1q z1myA@D>js9##>)#Y7`z3u*P$CtoC0yo8w|Q6F271w2yF)%8KD0_2xTV;x+lRX_)S7 zLESy7mmECL$tj(~EAaM1nhN5QP)RT+`Em;B3)pSP8(VtVYgUKyj>BSg0P|KE5JF0S zre930DlR@=+*Q0v=*uq{`_A#ko)-3hEcA%gLXTvULWp5*D*ZywDm-z#xOi1heo6D& zsfhffDTW$dtI)HAE!7yiAVDOsdl1 z^kJ2l>S9UXuCtekeIpWyAb)r;s3gmj-+uKnaX)3%EDkWLFD+A&-j7eww|&#xTfkW^^2cYa9_rm4Q zin3x4(yLf3=0BYT{IwK{%rJaGAcrfB}x_x6~ z?NgR#`|L{eSv%T*Hvmwtyp-4g+;<#Yu-bvpE@#a&$atCK%V}j(r9`g}0;71P)B2$A z^>07GDy&Am=Vx|<@=_YGAKMS!>s6Le->|zU{Oc`LG~#QV)<2JRJPc{DYNOS8_y_LC zl{@TCrW62$lakMd)^-st?P%lI2t z)Hp`>W4-6c4x>S@{PH(^%>AB~t9w+1&30NhSzJq;*3A}|Fx76iJC$XzW&Y(3cE8JR zb!47(SvFgpOI(&s!0&j{;v!y#gh|u^kVZJ9B^rTLKq!cWhf6jz7>B3{VIyUy6St8` zt}7v#!kob_%sj7rhkZ`%r086h2XZFre!9|+So+}e;-=^KDM@y(a^Sx%DRgARg`+6@ zF2u-VGLQ-ZWzz#K(++!YiRJ=~3|GVj`!3)x5$zUkh)3uGfML}Os*EV|5hF(UJ{A{; zN;^ys#azEYS4VvUT}QTW$g@cuN;(_~!om}CfZ=y>M0q>J?!6&0ot>C}-$GouFs%Hh zTmXOk#{D|~3BT@JuRegi$szQ;LUnyKd=u@?UxB<`_Ui-kIc(E;I{yK`ZY?|iTsd&P z-Ds3oUP!mxQvQ9=j3s~$dYyr~$?Q9b+{-|eMivJd_6zn%Diy*g%^dgph0WMnjlyQm zYvbd%&X(IOX1{WrZT72MGXRGk%-(<@szG$F^a0wjK{JzM4tXi@39NXYNK<*-69LR< zHA_JJax@?fIF6fq^$B30HaB2{+{uk~5)kSg_1^k+EuCO#z)8DSy4iVj*ToiH!~Bac z@4lm}>JH~j*Yjl;)*~sL(K7eK*OTEpx-0KkaM|Wbua?%#Xj@*tK(C(|>l{C&ZhWb0 zMo~pu{jBOKI=QucYE5gb!YQVnoLhYCh8f$YkM&BY2iPFc51wjZM;I&Xyq~eb&xB70 zb!DyRW$vzMsVFjQ1?9U8snP5KICcCp+z|F5YaW9djR7^>S60XQbPOU4qinn+8ToxO zNmqH=nTD{Wfv@awt2Of=f=NR|5D_7WgKt``%4VxKRM|4nPih20e86-edqM8Km6$g( zF)F>V8F&FIKjPI0*Fu5JJohBIjc8gc^_8vam+bbN) z^b&a)S?@-wcXYVkV5Z!+PTi!3PaWYx6x{?3=UUM zy8MhLFoOTujq!`V*3tMSxoiS#=D?7Pp0%n(Q89qC3)`8F5QUBrh37*5=v^&^@-+(> z0htu_oq#P)lq8+7G(S15;V0Pkj8^Mm@ObujJiy12bM!;%^Wpm2hU;Hg%d@u!H?ron zhpV7{3eP3fX1D@MX!O<)`U>hiqBVv!FrlFe?i{Tt*v_Hf&)NWd%*!uj=XwWu1V=%m zC=E2Y%d?O9C>(f5K@*3!6y2GKU?CtUfo5X3XhJ~Qjcg?3QbPGiIU@?a)bx-J>E7bj!{QCXu3mQVoR({~yqt$+}u$pqisO>>~0Lk}B@ByTU1@@rY z>u~r$XBHw_V;CUK2l9wfE-|f+u$d`;80<3WWT;92N!SjR2{H~6qAwgjz)%Q~BE5t{ z5sXHIfmk23I8e_Z=spyPNqq^MSm$uq;)aRIt1IR@rrxz|-rh(cR#D{NJiasR3>XYL zQ?c6>sGBu5Y=Z}>%ZU`B67$U8nWmTEokDOZfCCqnPOb^fozyaELUjAIxk6bm033#B zK)9kPDhNB1%fimKXjQzX&F%7()mOHa`eSoz%C&yCm5&2z3k}+W{3v)^aQ~O=ST2;{ zqh1e}hLNfmPB0wKxK4n)$lD{=B-9?QB4!5iAyd1#&(;uI5^TqO<*$<7Dnfn947Tvt zS#<%IyV#^N7y{04=lIS3qKa4`vUlFHyQVtkR$QH&Xo%Y!jyh4ywM6DmD$Evdk4Gmh zpTE=U_G_b+^J4zew#xc4kIUUw6R(Q4Im646I|U(HBwPXSFjgH1mI-sGZI4bs!_5s5 z3VlxJW8l7`)tX5d8S9bLfPC=@;-9uH}`2fVh;~5}+A$u3Um=pMOMiBA#5(f+jB~MSC zn)!Lx?D_0_9r0+`pq+|DG;S}OtTT^^ggZJy6=Tf00YNken;J_z?vjl`&(-CAEmN*Y zCIyenIJNpZr0o0Xx|%6Qw;Ryo*9)=h0Xy!_Sk9T#&@^8c(nn0QS=duDz9H!G1RKVe zc%JC!;BeL*S`*&RKFe1V{`u~DM2I|G-q7&DbY%s5VEO^&mde^;UG{pRiU8kB^nWzuB+3UUR4BQ7)%rO`tFm8O&c}Ju*E2W7p9T9;I7yo!5lX z(M02^IocHA0|sI3XLKxj9>WcSSUt~xtJ8+~5J5C2jfxN-A*?|}r&Io+23KzE5u-v> z$p^6hGe@ZSLfq%|`r@qnoO1>zZdIP&vYv%jtSCiNV75YUt{d0P9x(tvw|d2j+HuYB z@9tg+vR3!~V7#LD=YyVw>~Aj&yNQK8!ugN z9UCp~oxz?gj&*j#ii=|%ov~uJU}aN%okhQriOygttN7OrFRS%-*41?$TfI8-OZKsH zO_fIsv2DtwH7}(~ORJa!MK2%;=)9#Q0e- z_BW5)m|^T*v&rE5TV+7}mC2O(gmsyWM(^LM{K_LvffdF7!z*rZDzod#Dcu7mwar$` z*4sUU=djGz-40u=a6w4CiClcL>lMlWR2F#kgGfL)E^!$C{h|!XpPfWluYi?|c7qNc3!frpzTKbdDdEx|9tNx80$qoyY*K46?85f0sW& z!7aa2ZZbRGWXiX!R!fDr&>YFc1tlDTfX&`!!oS+D8#!ILKE()Z+kfC_7D`;pT=h~J zBhY)eOM-}%pyjLp^|L}=3dbtO3hGJ%;x`FW2IZS?*ETc@zhv(z#m_v*Cd`@z?SI%G zDz$1|ag-7Xu5}ewtF<)b4}(GsDA&ELygY7vMMZRq|I9nAAvVB{pUSXJ24sg9wMM(o zrY%~PNZvB0^154YNvyzv?6VoQqUfS5)sk!s6`k=rvd$y_Iq}U&@DFME5PHT1kJKP} zEE^;b^Tc&c&>7%g!ecN)VEqyZlqJhD3)xb|seD(iW8I2Rd5A4z ze^$P$IK@fI%gP_wWaYhW%I|O^7V&L8tQdZqg7Tj9rt(MS6=qfbuKb7c6ILP~P=2EP zosEO=Vggafln`{`kuTQ?GZ?HQo+QOOT z9l{$Ong7}-Y~1)3dncttGLMU)9@dYzj8x6t-@Ho*98n&*MR;;==JZ~1Z|3qI;fhoD zo;ZPVIc$SdeJ>VhHsNXxx8JS}#q7!uNUUwQid_t{L=-8{Fsd9E_Udc(|1mz31cb(?I^6JaRZ zOzye$B}*=ydBfR%5-yO9@4d2IXr z(+>fwmj~Z*h2;hVYeof&)GC0`+b19}sRuI!+(055HHC{*^C?{$8X}1Po$Hc}qp<{*!Dk8*^uyoeAHZJU8U%?shoMt&Xib zYl<(OwlbyH9~UkQMhyC~<8{XJKyk#ND=F6NBZJPshK^b8abrb?-d)}l>3Pm>xa~G= zd5ie;1B$=2vDk4S7Tj(w853+Y)IY!XJ2L~drKL7goinzKq9^I6`gfQW4iB zl2x2%Fos>-71gXdzIe8N`N3XMNYqZh`AK(2yynh_YGNH8OI>;CFJ22*)VG*q+r7%> z`^<8{Humn%zh7QzyVl^S-u|WnM2=W>gQWLXXqjH?v~2l46QA&xl}Y1RW&YR{?x?Qw zy0NsUFij`?*r{2|!NL28 zsjd^jAOi;(BavJnJkV5@q6Njrx_pnV*!;-$`QZm=?(7`rmYGiaFE&qk+!E>-H~;02 zBJE6QS+!@+L?QH>z_N2MTvjXVl;wk&Q>BefNa&bv=T|ex#<8>^A^`R?a_9izLs%{U zRyz#ZBUff=dwWf5MPreXAx*?dJ(G)?HgsNDz3k3))2?Or<+tCQr@YKpImX9s`YD@k ztXaBwY0)>8)e|o6og%Pt(%Ag!lmACj$e`|sn$To(P86!}giq}j+a3JN9kL(9`Y z{Ef9%UIYG44HLEL>^n)PM^>{TZ54Di;NP@qDndc2gsadLfSJs%0vZVKL>I%adq*nDoUyd%E&iq!a(OQ%d)xUk{) z(OY-yczEWP&E>UgH_q6-y0LLVWXd7s-ICJD&CSscan9_=7?KCFDf{<77Yc>TaU%cy zy(5Q9OUuirR3tkZR`1yN3+b{+bLLELcAB(Dw{0CG+Tm`l`qF8*ueg}y4qyR}!j*y$ z0Mxzk?aWg8)20S@k!zRW%qtMWj59&|43(l zRJX}G;SP2*@$+4~exA6>qSKlWR#hD|Yju{)(cDwjt*ux`iSPOxO`=Czlrud(#EbK_y0L1SShwjawriLP+%D;20XRBpcdlLLkoHhta{ z^Z{xF;tp98FCrCAgdqm6q(YM3jowOiLFwCZj(R6>PGxJRo2b$0UM!pZ&2S<>8&R`n zUrgV^M@nVkc9Q|AcjZ-*&4_qD$p(`w8qDrlhMGW8GnNH=QI#WB9u9gff}qu! zbQZCAL9^FW=p|LAIrKz`K!ZhG)m9I;zuz}q$8H2&*a%a$KunOLo)9!W|Th6I$ zoiwXyoGBg(hea#1+5+~Vw1K&p){Ik|XtHRPZl(uZm)?Z-H6oK4I$TihaQbaUL3@d@ zTvsiRyTI+9eBZ^Df>e81UA(Ofz7Xx*r4?S!lybd@%#`(wOq^QeLacmJF0J$!MEwC9 z1W4TksMIEu*=ouJ(PUsHE^jHTs*r3}vyWK=vfgKd1B`>24GzQqOWS*Z$5EYa!+WM| z@4c_KuXm)KB}*=Hmz!{J;EH=$7dkdzzy@rv=rM+bVv4~K1p*-uz`UjeUW!S8 z03o3UjIAAi_nDP!;gG<4{nzg@J9DO=Iprz$b3a-so`jY9I1>j66mTJ=@l)$fIt8a- zfa8&};F79ws#SG91uJvZ7d3mNzp6COmD?@8dbisIw|K)Gbrxs4M4>B)vAXKw0(-Mu zFK2j#tW2*P9+68698FNSO)Il33nn{_;Vc!KV{kIS-w>VoX*u#mvr4!&8GV8y#^Wl3 zoNyfBTrAIg#z^Iij%YMePQ$|jqGkzq@_DtxX0-zLY~)PsF1^gC@L183@s-?J4nk@) zXxVCm$~IA@FA9egYEEek1ls&&p4I4bq;|DcrEAt26jFy=nx$o>d1Vbz!&7DL0fk*} z_0V+QbIY5}SCuV&u6up1g?L;!`r&}3Di6xhT1ghHCIw(Tse_keCZxa!8>CMEC@gPmB+B{eEN#oA z1IAc_fg+2Kz<3QQEg&oBsg)HQoGB8eXNjW;IHZ6pDjz~C$4PQ#GK{|bx=oh`b&q|v zz1ET?{889VCXFt+_VV?SFlU^%X2a!uS)_n{=YRe%F?-2%{a;~HXGR@9(J^Ypfr8_`djf#7FG;gj{on>7Lh|!^&$cLg14JiQ18@Y;(tRcsrUG z3+;eso*#O7N`aS=bwnIyon$&@w6X#g2swm6!^;6&2#s}x&kI=yAv+`PiDpH|v|Rwd z7_Chj>zYZtg~AX`Lo5c=K`Me|#9587gAgM8 zsU=O3_6aq+x~*BG8%oC%=ahI#O20kOcJY!%vgm{TTjzJST_v1)a*2NQzy{&z26?Mw zYz=Djv%|PD17Ve!3((nH1d+{kg36>_HLwOjNdpL5V*u z=6|HfKUmY*pv6QRmWYl&qh+8mnc_e+Q7Mrs2td3+mLH7y0U=4O)brQ;?-hu4YAon2 zXoRmw@qPYZJ*BY<5Wu$0BdK|9;HDCKwmrUW+v5bdkX$l;yD&#*1abG51&xgbAU1Ux zb!6{$;b3k>%ws31MT>-#o$a9~Y|A_=ctwsQ&Yq%!2ZUWXT|}Yx++VnbQD=kChukQm zE0T><5$KBlSO>8v$U24N;?uB6nt}y+0ebqEicfM>D5AgY)k3dW-V1sV^3vJoNQr&a zBJpEfLz9H)gYk>jT>&+=S#6;qV-(Ai>2UrO#wOI-Lp9YQd+mhm0yu=YN#_hOpOLq$ z?L9sxnRNOI zjpoF3Dd1?Nq=(lT)F)18^w>*EGJDnP%wFMT?A2>doKTD3JjFkScnu?3s3c6sH9D+G z#SsvhI>TaCS~25#c}SF$Da8i`4r2pcKmRPRctm*N(ELB1MmX8lt1(|jrVAGx-$zr- zu6ULhZ_G0o{S&6_I(gly3$lG$*{67$@<;matPy_w=2j3Nu7BpmZ`Qp`-1}}Mwm)r@ zGTGU_k*}<{?&PjgqfZ+{pU&8%Gd}HH`ZdI%3S+VV-*Eir`nb8|5H<~F?$92LJtrl! zJ4>--?h<1JiKIVCi$pIhx$7(s2YNCi$vWLD?SXxuk)pxS>T{t0Bc@1f1{fD%mj=B; z;XosWnIF(9N?{074C0VzbMT{43=jkn=!aQWX%Cn@nvTK|UT%DjHzyls7Ntt(v{h?$ zkDA?f&?g&Ss5(v`==gmmFs|OmcH9TPRnvXPokB}G^#oBq!5}5`!PT!K7QtkCme*%z zAwPG2$`y@jw66f98#n)Tc`w2!NhEV(<}$+DjO3yxop;e=xQ%bQsx2+kN)znAayW6$Ci4qlA^oC@uqVxC@94?~JFB#t zbTC$N#^8$9-OHxg9m?S1`8#T)ET_vMMzxja^>TBWPVXttjkz_9)TmJM3<5VCH5#Md z8h^YiZgy#93B@mf%WUiBbrG+F z4;Z|sM-ba&`ZK+bYeOii|R4-PiVHNXH+FB6*2!InG{fP0yA<503J#ROk-<} z*re(pQVIiHP7%pk8i5N!42ldDFHjEc5*Nj#@f}fyYvLvaXu%m3ow*%!j)9RDtFd{^ zN;wiMdSnK#*86b&UzRKyQ&{-w!X-1HBlZfXcfBwCuU64Z$gcNcD~PmT{W~Eod@OwX z`qnE_2gv01hI~${)k&pSyit&!&+uBMx^ims%5e^pJlBQ?Gf%3w=Wx8!UPH!DER8Bk z%AIm|sIKnbiS8n`&%OTZ{y>XP>+}bPWx4ihTs+9vd|F;LeQr-EaCpYFsV>jMH9gn0 zXl?)4mHFA(eATx3bxo@uUA%&DsRI|cC$G_}(F&OA+WHk5ElBf>RSTFI)7Mwv?s$g! z9u4kp&*n9wdeSRgPGgCy>rnHsxKZk>D3m%u!f{r%SPlz`iRO!^Gz3wo@Q~UKASs|p znM26XjDgaCXie_?gU|l{;N{N*g3kzh(|>vxFm*2e@SoBTkC-2kxccf7e68T> z7tWjYCb2(3hP{!_5k7fy7TMoVKJvaHpnJl8NM(n0kkb%NNVF^!RizS`MlkbYEY>ox zo`BJov6a(xp04vSIK>Ni=>41)8V-i1I?O*>+L5Jnm0y=NY5M$G(?`|l4ai} zb05i_8yY@+(##2C{mY-fWO=68P?#bXkXFdHkh)j>+6ek`gLtm^RV`%%XTz7+D3Oz z8rxE?({WRsGFyGT%E#D7Ztkk}8qs~&YcG}AstY1av4oRYfPwxyTz3>nZWiOKLHqq)>>1s5FqT!cnZjT$io>v){#=BbB;qt1GGS*1GmWAB z&%t19AH`Ow2g1hGk^bj?K|B~zMNog{pv-Ih4;cdn{JA;*EpNa;bUhgw+xPG312QtX zbQ)xGi=-T*fK3#~AfXu(mi224wJiu1$y#_nBhY* z?N1NAx0fjPJxp@yww1qs5r~VnzUy3`LjI(8{dQJmaFo_hZya`>On5()3JPHE%*d3Y z{4VAjBJkF+(2p_2V93OblQHR1l^OFE#d9IPn|^6L{ve`*S1S+xZA@Ndyo$Rrm>bn( zdAC+Ca4mL~b*L&!bTzu>o}2&j&dH(vBX;YbrE=jLQ%~hP2g?8Wq*^x3-eYendnob0 ziHBgAc9G5fXZ*ve+;EJJ~ zrU!<`Y~@l<3P*n1t2Mp}7=}V)`*iTvs6`=Jt#jIt(Fbxm8m|M=kARQ|rmvt0%^yj> zxl-OAVHRI-ODd@`$*MX#s}Qb~Ox*V~NX`Y*J_Dt(3m;`Vur!6dL3z6sh6)Q<^GFj-iI~arAz&Pyw!emlrWp$-_ zp}bNZYnAnfmWI4V*A)qGL~@D{tON0#93{ueQ3{piG=7I=baJ47K*L2e0PUk^v(nN_Hq_^KsVXqabL;TRA*y^fdwtP8U||3%%{Y4=vh##I+~ z>Jq{W3Hi91!VX>HMvtX-Od@aJf_+YFO;;lC=6GfYfL`VD@$}&MZ5C_I_?o<%7u;d* z?jGlQl| zhSFC)I0?YGN!x?8q>fL7>&Q?L2@6Vzz_an0jg2!4pDI-6C@W%YGFFku?(d6L)P@Tm zj>Nq(RG+Q@?h7HSFnTd&t>j9uqcNq`_YX%#E1Fe(MvxfwdXto>Yv)%Qey0j zk+MS&10M;|?h;B^q@2af*$l)Kh9@n~*|<94%MXPs-}ob$_SRd%rzHLvdtW&H&9$p< zC6+(Y6s0Ni9qCCj|PMBy5(bAJooxH476d1n0HDI&v_AL9~=?{dP|bgwBak5^Q=lfjY7T})HDR;6N|8AhHZu`6`CCI7&a z)qZ;IOB1!)=&Y)X4JU9L+Ftk%#5q(#{Ir)LzB<#hLZw+Y8Jtv@0N+XrnmT|LI?BDrrNiJgMIV>QbpV^ul?g6 zS8sh^IPw10qTy4!!kD(tj1x5OH6R%&dL!^bvZ(b0`Z~3*m53liw3!k(9jMw@VogwD zn@H3IxCMnJpo$<*fgcZRqPqtR4puvWt?OVfJUdEYbg*)*dVQVn&pJKgw53IB*Az>Q z!m+aUc)XqbHr`%_wNov#Lt7uNf1VbG%bo9c9%e)~n_b2)z zS*F+3)#>z7X>qaiHCzmBsXI)sS=LqD66%%`SAMuG-X1S0<}JeWvhHw8aj;6~^6Y%! zg`HUrUF8#JMwUzm#~4G$Q(8|MTd)rG6coo((N;y9Ev+Y7O<~bMO{+(&Ct6{&qEI=J zXabW2{5n5fRj6f34-Jpl(5VMf5_?diiGLo~Xm~xJ^KuTa7leYkg8XDY>B{`R2?&O7 z*-hmKNxqNzU5YGE8n~L9mU#1WYqFgDmj~|oQtI%L(xD3xn0z=?h&`(>c`^FbpfQ6l zKqMbK14|KK5aJ(X0}tWj13;BpA_Lbv8qkkmk~6zk_O5hCTzgh@jalI`n_T3w-Snrs zX60=w$e43%>C9nQ-KeEYMhPF8T`u#QbzRGsjV72(-KO&Q*KIPp+@|$T_xjNYUb^pG z13Mj~ZTR31CYuv-sfG-`;y^)vdyJ51#tr zexk0e628upRT7j{d<|gw%BhSYB(<#F5K+H9`;|;8(G;YFn9Dfnt zV8AqTc76Dt(w~#z>&cBTz4THSV@dy=3>O}w1vfEf>}eIiD!HEfxIddYjD5?5t8h#! zbC`Jl1UAb4uG_or$P}Jg9n!z3T`P$1kwmYf6)whn3|Z6D{v^d;Ln4l5#faO%%*MIh zhqHFXb6xJ7xbUxm6=u`@8_gzLV&aBlrHvc!eqdvJ)8oeywHsO6&>Cc#Q{9LyHjpu? zDfBm8Ow>=YBdcae)7!IOHZcpZ8R~xwtK`Iw>sKksKCO_wgt=p@dd{M$C~Rst#Wl%mQ`*2euFzN+Y!(PRk?B*lRc{ckhUVvz~+7*JzTDEd29}5?fTlJ z@I%r0ZRA!qSXo*DLV{5ZZeduDRGF_f9rG!(*|h`+B*M&K3tLv7H@sqDqSl+J*N6Ar zcjWr>82G~Yu*{?OI>J`Jvp%~6Z9=K{wOcinwHC%1pSI~nGv{1t)$45RLakM!1VV^t zvJ7FXL1$%Sdgr6P#i0Oew(E_iyf$Z+o<)#{FX?u~VvI`n25*t;q!8d4Fr4Rl{muf{ zScM|rO-KisF~bsy+VTyRrVgDVKH<*ia#@8^VJerY`o}qQedPree7=eesUIj3j>1Ku zQ^6LR%V=cGN;A+e=?!Dm(qiE1>6J4&t`XzQKY;@+mrO%eB?*8S8EXjIi3lG@8-ag> zT1PUyOoY^do`PyPu*(Cd0QMT30+cUpM-e#YgN0dcPkh5s;qSsx;p5j+(dw=dU4TaTxMo8oD!HI zMyJ&oq@0=*TJ!VWW5ph9nGFq{NkVGd>IfSs$X@gE9m3y!yLiPPh`V?4 z-5ZvTNP3j=usLRTPad;3;u-1E*oO^Ywdo*6GqAV}$Pix4lHHOu7!P!Ca7F1Spvpla z0tMS91Kq8)q@HDMkg0(C^szET?+_Rva0t4-t(@ix!WmI&PEX)iFtD)+AN8mJybq8! zWo3#2)(BQMHd@cr5t}%0a0R`4ybbq_*Dq}wzh?3!A478$3;qO;D{EIera!rS}GJvcS^Py>|TYrTPiKZcyK#3eS&(>4A)q-m!fF zy(9j5n+{LZ;lb982@3=WJ6tv}rlQ`prcllYx1v z{)$s4m`Bp>+*@-Wp8e;!`NxC;rdBw4OL=VTt}6eyQD4=|m2%GQ=i2UTopJSeoiD5; z*Y}^)rVC^mklrKS2kLJD14XwQR2VO?hz~P+_&76f+O z1UD9EkQx{%tJepaAP{f>-C3BDO1@-_TUy4DVsc!kvFX&TP3J^69sAWIy7Fe=B)K z@;)T7(+G|90VGg=rX8Fy`$I0GF`k2|g{5HO{XcE9Khr*buKk?5pSCAFoY?+EyW{`I z>;GTd=ef^w?lzyK2BA|Dx+HxW`k%AxKmTbh^-B*tdmMuXJ0va8f4cJ76T~&zjFYqh z{vQ@nIPiWD?OakUh2v*V6~6wt)d$ZUFogH$XID>ATA~b}40HBDfA+Ng|HH9EE(TeI z0iH?E_3=IMBO?Agve@K>o2wGOR z(3=6+y(7HS|GWsTO9?3vT310r^Z@sVAJP*(%3$j<_LLOtT{`HWrHE%7gPw?~mg+r_ z9jRUd_&&s(0kH>Z)Jix2Tg7}aFfs)LG-*tD$kEtG!c;RF5T_uYsUwqWJ2uo{*}1+( zxMy5v$F>%6K`viKjE@EC8*`h#sBcWSKf3hpqhxsPq)5&BPP*JcW_ONj+15c9T&!l% z$QAqA=yGrR*yvSD_O*{*z2xS?XM|5z6x4cD-II4sIQHvR$3`xyY2Uj7%eH+h=C2;z zzHiB@(d{=cfo(5|n65sINi;ST@)?Ywbk<3jGOvm^W%`!S$Y(-G))Zp$XDlDT`<~t7 z*)OkoHr)Rr?N)3&{OmQUZ*IQ%8+DNhOg!rz&$iI-kjfA8{@#bcMJTGBUj z_iYgVXF>Nf=|__Z(9+4@JW5QLzIU0yyJT(2-G`oP>%96+chjaR4|iqVwRXh%aaGQN zZ-_4__CGJ|KY4hQRx!`dIsPwd0}_psc=!Sa*}EXAng@P(j2M2DLs!h8(kW9DTVg{b zCyPoM>Ipk0>>!&i?7eDHw0&IX{kN|^@9>iw7-jQtvX@-HC3VLw7r#_@xvH&rnM&YV z79vRhcR%)m3D@-hW5u#ta>|xgj><6zPe0Z@U3lQFW%IK-hAGY4AGmkxC3pNb5F;0? zt7s(3PQ0I}Yl)nWGWcJjkOR)3B`9(;K;?O=1Hi~aHCV*|4!%Qq!Ym2W2(tjx1p^O_ z%O(=pN~8r>y>Qi4FQj+un(uPW?`-h-Zs@RdnX^{4&S#H4v}yB04{hG`&~D*hM}!gT zr?;R)*DA-ba+@6&|HK#D*WtGz@tjzwsk8`KFrG#+`- z5LQc-7OHrJ={KbBC}Zi{(|$)$)6f=07#CmzZ!hm%wyamsuk5Or?kFp$S>v#m)^=IV zU2K2GGjgf|bYX8Tqj_c!X9oMHg(OF^ZJinzx&v$*9lLN@M`iJsNIF$**kVT zzjKEKY~!aVNWTE)Sp%zVKJ?@fltBt^XFv?`wV*&*UC@|W(7P7Utcr;!uwM}7prNrQ zS_7aG2}e!PdA&T%4k|+cTm&TvHk_cqHNG5Dy_Id&F~U^zeU(h72rwh_4qaP+UXhRG zo~eppC$ejr2eTG{K)#HpqEE z@fK$SNBuA-QrH+ZL!f0;6VxAV9ySVLAjgqrY5Ml9?1{;YU6Gb3>+eS9g^QHrKFh_1O$xC6bxt*_Sv@CAs7DRfH_Dn#k5n z1@u25ZbBZ&f{t=rd_M^!E6RV3_YxHlOox8-$OQcqXO@^B0ind_8d&nj0plnk%8*0o zbA*&cC~-ziWY#k}QCj$vDdK#V?85RRvI_`p!;Xj}7<5E-7=Yp?*PdCVz&Vc- zBEtFNV#ruyk>moGM6oafY*=FK5rueA$6$E^r8Ev_ury07HK8;l+7k!M0VKfTb!14a z1UJw7JK>_6a$HtEYx|PF90WGN-4pzW@W&f>7X=+M@479-_Nra$2riCo5+1z&PrWu@ zwom1`=-2y6{ydAxll#&+ejw74Wm*wX0Ymg2Yg0Ya3B0 z3wwPz@^EvlI(y1F&LBceBMs4aEuh% z;i*4`b&}7$ntt3ToaYt3@RCBN)l2q!iNTA$XTbj}6%uZxM2i`gX0)#XW`7)Fd z(F7vK2uy{5NYnCC0Q}GH$gCqE92{t+NJ(NsY%e{|ge`00+^x(m(Z+~SCYJ7|b0Byx z=twZQh1fi+NmeZGV@z>OIkYt(hcp_nDAmydiH+U?#veV=C>5X)A{vF2fa)r&NkQ3(-heM@gEEYzonr^c(YK_IBQTJe5D^-}y z3aOTC5#G00lrlYIG%|Xba=OW+l4A|qa@9dd-XTCLuy zCu%j(TXnB%jZPzxO4Wc6z-|u6`rNxN?Ek06=pNtm4DlM`l^5Q1$5)I>snsge|N2U) zDLclr>*WY%)l1V)lD`wBOr?-%$l}x{g|1v9?Fz%iV9^;;I{r3#nAUQ)exEvgl${dFuG0rse z4kn2ce!=PJJ1fz5F2R_DQ4^DxIBX7xGd7vQPxC1g3bv*$TsYXo=848Dv!H!b{R0k+ zOmGOb^8(^VZLl=vpqfEDhItpSjRhnNEuuhe804@&635@D88L=96vkhecM-U11vsLN zKjMa^>m&eO0C%NedfQIcDAmFr)MOToHA_pt<5gN+b*&dc+(gK7AjFs;wbyawo z)%KMgMOu#AE}Gcr-6?5w%-t+p>QR$Q^+_W_;bNrsq=Xsc^va5@P_94{AM@L*g_ANh z;grtUynKa@Va6}LbW_*fl9~K+`NeyXdnQt`imwg+Pg;F)6_T!}(@*rxML`pvv&Wj+TU*o7~HYmz= zLDV=~8vogvUeI#K{*;Ub@iXDs)c!kKgx9)f@eBig0U~9tUVb&hBlenM_*vb*pxW5f zqVyv2k=d!2+t~o3J(=qfrr2(FT4)|&K1;#))9)*MAj5N-$s<4$p6zd$dKml5>Vbv= z1mPK|rrux#`v&PYo2d+_D5wp%5eh+E2);uT`?Hk*Dmcf8dAyRxOLIt4!7l0`!REea znuJf==W%L;pAb%}TG%1H*Zkzuzn~gETe$F6nMuw`IXGZ%UAT}Kh;z}R{W25B;yUX6 zsFN>+k7zp(u|(o{lX?FNDuMozUMkiA6ifKGp`^g|NSPghL!c82rS<&zcg`ZM(=O}C zX&TjDU(_XBJ(cjQ*Od7x>U_WK1@G3`Qe9)#xJ--EuM;~Eg8r__KHX2fQx4+Xf6+T( z2#UiS#8LGM;dVd!3S6pR(npOSqkES^oc;yRO^`yWkDijk@k@IlwwxL72kkOJFoh+M zhr0{U4A2dLH=coC%g=w8ASGD`Op#&@Fq&c*G=Zic(>gOCMl-1taDwzdTk~JXz!Z`P zF*_E?uX*npxn)*rlr?Zf%=N}0{lJ+&1ctHSLr$Jq1FAM0?{lTKg_1t$Uv zBW3hkVWJzD?=tPL64_~||H7|DLBCXPLZ(Zq2vHpf-fn=p^iVp{3vE`t$hs0m5v7o& zB{%^(_s@P=0wIUyj=T%$S&)q7E2qvD{9vt#Y?xrD`Pr#Z%t9=POLj4>7Og_~o+yw^^Ow9b@)&2% zCAb1oXQun;`x9k1QKIet+xJhvb};1^zF8fO9mQB{qrP*5BO-jo4@vvOI%1#Lya7{&d48vLyz?3}H+{eE)=e&kL-c~re%iXYG_KKc~F5+@dTDxx4 zfmJ(iJ9_BBr>bO*rs@Wxuc{=T{GZ$Em}j4}T`GKit24jI5MO@P2jI=T;FY(9J;E2y z^&I%ea1uM*_pf7p`!^F#9nG3IW@7iODUZK7;L{g!&L@zi zI6P=@hVEwI!;n$XpEH^GVA04J!mWR1rU(xT5C86WY$?{h5gzO$dQ4tlUO`5t@8n+k zo$xTxr0--)1N|>q@+|!?1p;g-R!{&-&IM%N`=Kpc`rjeD4!wWzBab{X?R_#2^pjs~ zAx!8H*(KbVn|?3bmVQs8VFI>n2KkAY03`YMC^;O(gVPt`*Fc7ym}!$#6~k1Q%Rttl z*blLyZ6fX-ehw+k&R9aFO?sHP&&!K2(FnC(X1)n_WwL6?mt6Mw-JFg+)rwHwdp^Hl zs``!#XLODr(TDCL_S?zHKmBUMW%Km)>ZZ;_XJLt7cAX>?j-E zUYR?pp|P!NN&UKenErx4th?h=qWs&P7d&1b&0TR@)lElk6+XXRY8Sp-w{w=cP212^ z9&gTR?&@mJxoY*=o#!o1HkMWn%M|ROuPTnk1O9i)y-A~L5-2|>Xdsk@S1GY20KzCs zM5V|hi)A1xGiH^Gxn+5fz#z@MnR(&gq5n*uu>IiEUH5c7ed?>H-R`HmnMSf9Q}6=G zq>5!{Ki%E^G*Ih5ffUwahnt>CuW(Ss6~VgVm|vPs&W=udbu%CQjA{6 ziC_{jfE}X|4TFc?Ps2B;>6ZrM>A+I~7!h5e3>AoY7lYjkIA}ek)?%;RW*oqlo8*6f z7Qy1NWQCt^8(uQM6OinvTjv6uV0M0vRx>|3(rhAt=-%4vkFuO~l-oToughfe1t8UHkOQTpF4kRD`LB6e|+5u(v^{W#I~k}o*RR`YMNxRWGzrXH)680 zL_$$O(C`mR9q5H*5q-i2YcZ@=G>TCM3kHxtwsIED45bvhV?z@}Y=#UVAKEPGUMx#+ z0bB+H<-lRl@(`GGv0KDm;)Db}MLdf(1%R5*1j9h#rol01f@LTSo?UoUxMg9LC$HhU zcMJ{bzl^oIDre5D^qRVYyu50maLdt(2E#koHRP@PRIB~O*L1kDyQpkxSy6Z8;U?cF zTJ5L)#>3T+$iKURM5jC!ODfChttojbXmuSf?XzWrL{5`p*N{$coiWI znoB+ueveq0-+y??B_EO+#IDqQ_|Q*ukhzW0SMCiImsI{LZ-SaJxNFM%hsaHb{1p}M z*-OtCJ_+3W3W)916Y_plS;9;ioiib4^wiGVnv7p5m0uZ~ZtI*X7ESB8t=agcQu(E^ z`L+%w(#WVLre)fq znR7$!ot>e`T_Yrdo%hfB1z%-qT$6QEyc|2p%~>48|#zg`tjqsOT!yIp5+rt=IdBPbKK5`=jJyB z^+%eLTHa^Rlj|-RWkDrEHt255c-whUEDS7^_m$^s+>R19y? z`@uwlI)&{73vrf%Mpr_D<*3|fDWyLOL+SvlRUAD1mB`<6=uLiGtMn> z{$s}8dCR?fs%xq@Y*x2od`NH+X)?Lu>NK^gr8Bbl=(>0Sk@*c;% z$1&4d=hbzWc;ukYlUgD@(!WX%>MFJ4C)TFF99da4dQ^3lb@u!@?9|$>Yc3%#y`Wa+ zW^aDTCXYmY$S&y3A6qFLbyO~Dzq5wR9)G@@vmY39#o@yKr}8H==S>gzr=<5ze&F}f zSWVBQYBB?C9#3_Y2eUUk#R=DL?XyKz=DJY_3EOv;R3MzL6eK4un;VCI7+OfxSnX`R^TYKhc{kv_@ax7yJ|`TKC_x6 zj4anVF&a`>3>K9h)-b-h%{(?C2Q)nS&-jWlNu6AqlxN@96>MHLuEFe6Rhu~^t1Mch z;W@dnEgNPhkU_p}@|&yl);jeSB)6t9VJWW~*)nT%6+gB~Tc##FPnQ32aqe=RIm_aM zk>;jh=5Rp{XP2I5w3>Jru}D7n2c6~NSk%K?ruP)(t~$t> zPm4U^e#ppeB8M#PqjcC4N2|fra^|Ot2@d8!yhP&y3fQPD5u&Ujlv$3VS8P-w4S{=J zEMb~UvU3|7bF*1TY0Qb>% zWIM|$IRmr#?H7?vp15z{{%N}Y!q+E0e13Sx*Tnnvjve2i{ZPBWY4i z_f3B#ykYcc6(*|?3$tuc3O<7u-#s~(jAmyDfwOmiQ#fo9@BaJWX|tndw$E}>%jfn# zdl|F2|E~kjkeL_D#4&-&ANX<^UAB};h69}+?Ew^0s1(s^4nq%wN%7-Sc41nWF^Gts zVNl^pK$!U9zI%li&IgMBGNn#0YkO_={3kCTGv@Lq=g&OUav4oWEdUi5i+Z;%BBpEi zA@VSNauB?CT!iAWZsB>#&2`Oor9*zXf>F+xkJFFhDy@x|BLOzW64K1vTjnfT_wo&y zENw~f7xci0@}qatLFSW4vb2m|l*2(D@}p?7twMiBvKB?~xd+KL=Qs{|3B>N92MLe< zn{TiVJ1}O0U1!^&eVy0B{Pg*)$B zvno3r67>k$Uns6^Fz*OO5H|rCC80KIiY^@LaUv))!AeSh*>m@uvrV%W(KMB$N9bkx zD5!6M*R8j|_xN$CB%O8qY#|HO>EHoO^7!%oUTP*CEFluGIbfTSq+m2orMMsM5rADi zOBpwCm^cPz#)2^Fx5P@bhoBBA&mKl{%%fpCuV$efV?r(EUkyv*5(%b$Hp>mUmWfXNs11uDEuozE5 zR|)R=%UMtGbm+g-bC-kp+AUH8=NYe{FOd@o&!* zdZ-eIIguCrrV_I<@2wrT2i16TGjJlO|I$$s0Hk zS9X1&pi6~V@`QNp-ho>gjl%}-k0;9DRK>dGfXm01hn0@?Gv}Cq2!Qr71d>OhHa?t? z$^c7171WpRQ!j3h z32zLGMu(A{7+M0T{;BGNu_?m`Rgc+}W(}bhhTD+4?g$+nGG90|Q3CmJ&Ndy<=;-yI z_J`>%KMo51+>t-O-ybjIIg#U`j)R@S%OQZ_M>nV2nOU8}_4{Zu!D7fNll;lz^waJL z!$e%n>7U&FAI>7Fv>F6B~0i|3=)Q5JAE;XFJO2j3kToIaVB2zXbyQnZE z(dgOLT@lxoEv`uV|8NSqT%(-NkU2_?p{!#>XH_^{)j0wVg^6eHIu4h_h3V%OeI#Pr zr7Ug~y#w@wsI8ru005!^HVDDenc9payEPyOfNEis&uDY}nKb~coxp5i;Qm2oXFh?d zhEbYsVkG~SUDp2=r8+_aE|C2Wu5o>7>`(X6nE;661-5jO>Fb9lO)N+P6fUum#PQ>_ z&cvlS#-p8zIw0g+*uOEpa8ZH@Dq@615NL3*5Wmv@4Tps#yL)dJst*ghA0`Vo6yDyu z8<^*X?O|c*XXKj5LasWp0LW(?Q@BAqX-BeEcff)W*J&hkBZdB{HiUf^%J4OnQziArTgI@?1AXGOO^WKk$=5m16h z$|*KrKs&Y=66IEQ!R7}y;~)8MQ}^V}n49`Rv!v6aIQ=Sum@x zbQx)ZrIQH1US3j|6^C5*)H#l)X!!;?=F{vJM!j8VCeV@68m(2)vKr%Z~PMQw{(FsuMxco}qr z6XO~q*v4c;U0kpq(+|PoDc%-gxSk_bi#8@K;ac=yl3AHC zbIpcH%!HsTcbZNaG^T&|eAKM$(8)p1YAuYBIR_i1CWGx=il3r+YN#J4C4RfJ8R3GE zTPyG#@%2P0j}8n}+8g?x%CHF5rMwOZ3>Zr3;Ew}dNIm&9DO@_mOW-db@*hGToZM3Q zzg0ZqK~hUc{{ZAHK|>N!ry&5c67f8&4fx~5-~J@q*Po=L1(!V4=l4apw@-;!RW6yr zsW}pj>v z0P9qg`B6D%j_ummwQ)Yvv3cv}5v*~Ka^&Y9e?C&VM{-)FzVwqD#vj}~yNWUFRst|Z zQe@3`*5l$4TiD%~%0*$``2fDD3jo`oj339Rs}& zqnj86MGcdHK2dc}96-?60JOsp1xRZYN+7H>us~3+yNF1KQ2K?@I#CGZIU+olVECxx zl*P^}g2s@7k8HbW-fx!9joVcOF~y^9EExUXvMai~XB(NZL?yfhEdD2azK59**j%(| z8M|)W8ll#$I&9A(4;Rg& zWJgx1I#GI+zzPovY&Z;g1cdlyTv$vCWGV%9p(#j{a^MSKz^9@jG#Qz-6rmLq_(DY+ z*oVSU;n>mytVpHjwqn_%mut(AAd6L>+*+kd3g0rwj;XuN;9NEQlHU+MeAoQDm>Y(T zUcV1S%|(%#=!6!lt$oSXo0%(%^NI_=u}k_=4c6~|9ej<~-2{8`39&iJu|#r`oeGfD zC)NOmpcyq)XrJ7&+9NQ`mh>iOtKPM0`rP5Rkj0zjS6v+-Yi2KOb_6U|KXJ(SmZuN( zSlijBPl*@f#kOfbQ#UkPA{WsHNoe|$FcQoIK6{;HpX4#gA0!`1en8$k2kI25u*f82 zExZEX8WogD&H?2x!Wh9*kBoapaD*8d)D>*%G+HVc0BSD?XGS#>56Yrgi`z;QtOdN1 z)x=U7Ehz<<2=-^hVU)&8L!#+Ntnd(Gs5q)1id*FaYXMsziXoN`vKW4gOX5^-w-(zh zR*TF{VDJt~k*pVxGflx7H{UzVDI>k00ROHuummRZcA9Ua;~ zeg1M=R4RJC;z3-7z5-k^i2)08g6@mbJC&Zj3$9|N*TqgeBz+a}y64{XM<)#I9DE>I zAc#gM`sHX|Zd{A9yTdXD6I+zl6L7tQvUWzm=4PaBocH9VW5!&1Wd4n*ZPRDmzG>=| z&6}r8owjwx^lhmd=O3Z_o}70hGe>5Su^x_>N_iw&;^ho75rGs%`~z?(OHNs>CZpAA zG?6=N_!e@B74nVAc+wWK*+Q34%p?qIqRkzkN_rNGP9A{|J4>ha*>zs8-|O*v@A7yI zPMT=Mt$VOgYjfDlY7oYF3pIA1!>n=mJ^rn7jmA_|wzX%kH&n%=z z%%6uN`rl$%q#@FnbsCLOiOf|<{fb)9@Ocrt!)UTk%<^Sc93cnY_Fyl43f!LFoq}$$ zjxBCH_Sx-b{Uswpp%L_dbCcd2tBaZK0V%^Nbt=2oZuZkvgVtt1)Q8Mk>&nh{)t2mx z`Ld!WtIn^^isJl^Am`?AqTa3{_K00=*IzMssda<9uV`M^YR<07Hlscmu}0`ah|feh zzVY?218?%t(4j!&i^zC6Oo$TH+0zg%(?`aEVO^jzBK!e()Wr$i7y zsX{nL7IJJ2jE`r!6y`EfL>lZ>qAwYpj`of??RBC<2AoK0hKE2nC@+M?O!TG%29Nl_ ze^M$UujuXK|K>F$l_3wJ&T8Eu>6b~9x&DW-vq#OC(Vk!9ZD=6L?1abSvUu!)?8>~F zP(fI3a$AdRIeD$6Nn#CW7uVMpA6va*#p=h%C8HN~)K#3q|Y|^eR zR~AK>-_x5el#>a^j|=xGD!MD$D}{%y)Q>DI6CS#V37t|`j2v0PeTyX($KekcnBy4a zXx2gxbpvG;fi^k{zOR=hf58aOgZMK99L!80X-dI$MF(SyYhhd5Rz`>4l5pmSWPbQk z#4ZQpvS8E_j0R<(@--Ps0aG$-Iav2mhR`6tErHW4fGLXuWDxnO2S+DNj5cwshxnhs z0PK%@nexFxL(qb|M>8WdoqNSC*%=*I+<|e@Z$ay#|7Btf5-y0AMkfl9!IQ31!a-2} z0FZ#O7{^k?wCJJ}%iwij#X_Vn6!#52CiD=JX}~xQqCVOqrX%XZx0ZVeFim3P#y+Ik zIJ*yF zd2w=HzqN6C<@D{2OB^jLdoEZwzLU8@WpLZ0_H4zb(PNPXgd5%U%K5^(Z@qQHb=UE) zW!lyfN5b*8X_=YvAg!IvmdqZna8x+{8hGT8_ zR)wlYT{m^zcIU;85nC>*m*wbuptyB~JX6m*f7Wt#!s7JBqec}c%12)CR*ipH%u`Fg z_S8fc7Ybj!hCekmL!_C)(|& zY%zr*;3?1dTV@fR7nUb%`@L~RP-j)jW&$wgNw36RD{xolfbbR3rB_ahCl0_=c zav)S9Zttv)n}qpNrRf4WY*^?0h450PKeo87y2Wl*EA(K&Qz-ZC)+=~s`F3upT%#mQ zD+W%{to-*=h#u*r?j>54(1Y}eCSnR&aXTA%|3_0XwXqD0=St`-CBPd^#5lefabH(R z_Gac`OsG`)<%4uFFz*gXoRA!W1u)5q~4m((-dPA8D<{IR3#ij*}=vm()!ss_8(ruR9F%d*4&kGb~_jH*ie$LHKKHPc(_WG2bX zg!DF<1V}Oo5K1V45Qx;!JA__D7&;0lMG!$SE24;s;@U-w?%I`AS6p>1aaUd4RoB;D zT}U#Q@8`LbgrK29ZNvq?a;IcW*mv@~9S511Xthz~oXu+4 zFp$p6jrK_U*x$o~PTU5sSQT_gXMIY>}9Qzx0p<#K&)cJ){SPDfezTqimnj+mM zoIrj5vx-x_$>tH3^EgE9TtV_2qTGct357-r#1Pucf4|Q>5Y{|Ec>yy-9(-saeD)}0 z8Bs~-6G@Mg%&;Iprx4jMu;>ZX)N?!1%3AVNTIn}h6~74f%t=)pEme~m=`I$iHV#i` zq4eR#Y8Eh9nzSf8E zj^v9#kVD9>L69yyLSoSxFyj&NKv#yS+-1|_e$EF)ST}g->eAPxubJu9l)71?N=z$E zn+EMX{n(BDcWRU?mD-M;?kDg9|A~(ZJGY=dgGd_TKV* zUPiS_qv11u$&00@AEE)04PyFH2U23766Kg{;f_L%E%x4as~g|yh#;nrk2f{(%4+j6%Dy|XN}UTnw*;`7TrGS zSEo1sY0KE{J}9a*;tFI4;8uxo?!?{=Re3;q|Dekg{?pTlY3T(#LG8@;Epi?|IX@p% zFekW+^VgKkziUdLo=e?B&MKi5{E%@x+ejxll`_ zMX5L={cGaKvvJ{DTKQVQ9VuQ7$k)opW`8oNEhJyt5-pEX0!=l^7|k+;RCMXup#~(+ ze}@8odR%~fk&*mPIih+_w)F6pDXZ5#GJ#vyr{hWgwmK$A-~Zv-vrBuc`j?a&dl}*? z;Y6=gOsuYGi0rs_{1fZLqq%;??LQ2i?-+Pq`sc(uURxm+_*1-96Z@o5ASBU-XuD*0 zqv^>A)#y4jq`|Erc$GR5B3Y^1$XP1oGqi2BlMiMTI~I}lG&5gyha?&Beq;pe{EJF7 z^3;KzciE=+(;b!Kq9VK2m*~n&jZJqrlG18(vTM^^cBel!HPe;os~s0TnIi9GcV3g7 zQ=69LaHP{UKfOghiw6ScgYqIo|6oLER}3l%)L0W!60N>*+|TZW$*7Z<5S!pIn5=Q} ziAiyBQ0O>tAW=RlZ?RBI^lV~$^z4r=jE_rjw7}fcB89qsO}uGXT}>bTzwzKT&}8-|qV_y-mZug_yK4wtYYKG8WOznTvzQ06iXEq-ZAZAM>rvNOBSoNAMK z;hpe4&d?=fi_`LG7!Tv|MsD$s5!}%%dUe-;eI-tCjt$oDv($L1l=b*`f z!p#u-YLC+XVAoV3&lE1;ME`^*77zY4H7#8uaQSJ)P&-&B`n8?`g|%xr)0F8+=>-X_ zuFsTeXQ_X{h;ZGEN9Xdw#8V5NoM_Ya%~*2H(t~%-Zd#V3PIdH33ziJcn0Ih?PcJX_ z>HSq&y*H85>$tRBqcLq@u{O!Jv{q$mY)DcY6MMyry{mWU?w`4GP=3?n)7kt-7cWeR zT~Isd)bcqe=B>0(?mfP=zdvCI_gPPmFuC8$HeSMxO@>uKaYg3cG*aw)DD@3&xaG_O zSO>5;Ih+Z-1ki3w2zUCiMpwM-6)UY;kZ&H+3MA0?N@wCOolH=NOn$fU&=qfF zQm1=tmnZC=D+(jie{%7_G(gdpv9NX%Di?+a7(3R9J?r<+1$76lu_$2+EXp3CZ1tx)>pbH-6&lgQC%tBZt*^OlOamX;Y zWXAQaWCe$f`PcOy$y*AKjp@eEc!Gti-R;R|qzh;E{Jp;7W)|K&YyWSV`b@0U;Vd%f zpwXVZaq}4_KNnA$a(~5CDKq}g4-mMz1ew1cgH;}GnMJ-tsR?eY@*FASACOl^GAv3p z)OTPGhS|T%o@^zU9|GcnCIeqgcEQIkh>iz7kCYgr%N2~)sfa>?<&(n2oK{DteOQQE zgp&q|sm_kM&Qx)b=yM4^m+vo$wn*5Pm}uj|Hg+EwgChzo!f~@Sr;&MX3`;nznd4-- z9`;`@hJ~F;Nlq#3%E{ptrY9z*Cq~9cj)wy^HGyz+$&GJX#9kP_qHo_7!=>Ic<#}N{ z=9CMV7jg(&fMRse73eEM8ut^!Puqk7C5I7!c+09$2U5b6Bl{G-KMu&==nDGixVjJ7 zqAcWfu5e1f56GVLkBvRH8B7Eo4-3X zn=LI!+hpGKf%Ln(e~{))dz#K}#y-nG@jcr=?Mzw$_vh-u!s@~?V@4OGrWM?D;sNRH z(_P!M9{3-&Iklj^{%+}aA8umW_X^VFJ(mCBCh3Rw3Mj5Z2dAy?F&EOeO+f!&E@O)G zP76RCQ{-6b98?WXVFgZDR8y3^oSd4BS2V9+H)_&C+AxYnLDP_;!X*R?a08@WnT5vO zW5;3O%OLcOW+gOA5GDk9;-QDCE(Z#eY8Gk>hqD}E!MK_yCvlF(mEXtlPb^t}+*c~? zbn)Jln2c2E_1n#EW8c*^c~;wqS({S~PPg7yT9srgJQ~;M;*mceJ_tFWM0$CtHzp>t z|Ja66NhVdS$tWcDFLQ^k@$$m;8nuTTSv=|L(?xDNE{gY}D{g z&mnd^r&qu75#E8LZZ8|*GfXu7O||NbI8LSFw@j6;fiY?F z2dN$3r`@$P-Vi(7T{|^YEFI}pvFFZ{_b@IqZ>S|dpc7pwMTu4*wpguciSdruob3aW zm%3sA*mRCl83KcE8=2w>#mqLxqCYtpEHH$f} zmJ15bbo7xgUV83trX)|T#|MT!`n#9P)G-#WqCzn0)qP)l^NknF)CPm- zaaRI~K-2dH{?#`0aQX+n0EDa&d_fZM%4Cm6$h#2WAuM{pnsx5bNQZxz*@h;g;ocb< zf?PFVkvezyRynt1bCdL~ya9pzjcuQ9Vc{*GZjbWB8&(yNE(EHunOyNqplaRr#`ZTFw{LG0@*1~uk1nC7&_ZepR2CIg z2HG5s&*|9b-Rl*H0+p2kX{O!&a7HC}dl7mPn1}vkIOnbpgHPq) z_et;X`;rBvGtwaG4E!@^At~n zEV=|`@*uL>(@EDb5rVqO%i--v*E5Nz$i2JTf^$q9v)s8}k)8Jas(RwQBa zL)qqWdhtwn3HVj1K^~gJpw+{Q#X?9pP6zLS;|aVUR1PSwaFf#RShtxrSr8iY{ z+BKZlZx&UBfS=0c&}(>~U&94>YpRv0Dvbj7G8fw$*(j;_MMmhfbW?expq7IJfog@zuC+)hx%PnE!D8%j+SHi zCzR!FO#dCn-@9R$$ZfDE3({>GjSZ^@)M{sn#b&d4V%0Hhgph30XxMZy*@kPNXAxMM zkN&PLUPCJY^rqB#3u?!J}DhkzR1Qur{-A8OD~z)M=Qnt zBjzCG)$1W?cOom6?h%Z*`m|DHtEyP#T^~MuTFnPwo;T@FGrdlF`3UR%)kkXS!jPA_ znAT4+fp_{WD>UwsKK(F@ZExq$5O%Z|`~(FlAIYVD_*nY9<9g{cmhk64SF<_Dh+#wv z+%^i5DD_nt|DQ1L6tYpZTMLPA-95e?g^z9G0JiYhrjCDZdQ5oZ!BCErm=mhZ<{LIW z!)CTsZ9aQ;bK1k~9>Oq}Y&rd+^kx(2&2_L)P-gF5=;4BbM<=1+NaQ!C9SE7sqVPs{ zL_&%yR=~g6!6P}Pl(N$HI%|Am6q`PApmc5I`9%}Uo48`>*iz)on3iskK9E8yXYs## z_SCk+3)qm??6sBR+|^Q&^z1cb-(XW-zoBy6;>feowS&g7ja={czHB;YTQOnQDybZa z?`;K@qn)p_nuP~9KhQ}Vkmu`PvhOcZa&prI(?LH_aceO=)r$+=3{xGkEAnxk1YKuw z5aG#mNX`!BEOx499Nx6Xdf-6o z^Y^Zuv--htuiSUvcfsG^eDI?Oo0qJ8bNQRc?|Vg9)vhibfAh`bON9&T=gw`vtF)4j z4BxeDcn6=El{$ZZ3co|R<#1I;U17n@d0?W6k3NpMdA!U;Qv?=djbG9`|Kj;5j|%$I z6KO@JEig2G;Id7$x#WfPsmnHlwy}_K{A%0c_OI@0PrK`@b#t`8T0C=jHp_T=f5$$< zw)>8AAKG0mdnA<}03atUBVW^!-A_xYPTrm?Zy&(&uDiba>aJzaBYbZ0ulhaq*L@xP zt4ch71kLrM4a#L%LI7>2JZ*${lLQ13%GH*QZ0`Yh?Un(xdjS0ThQWWg9x*8sL7iv8 zk983um{!7@bv>-C*8^vCk77TtFpewEV?>bZhg^^~P?_2(dd>OcAD~5@J${susOJx^ z0=V<%e{{ak9{iaroB=wEK>wfo5CbDqf0{5D!p)1Zfhi-k+n)|5qiALTI2{Ial%%{? zDmpGi)Z%SzFLC?1V{I>uL^`ABzY60VV={g&c|F@WVvcdnD*RS=t~)B1FxygQU&?IQ zxV+u|xOXYi3|@Ks+u=*Qp6m5Swr_a+@eLavdrW%I-?x8Xf76tBKDpoIq+m&Euy#bS zSGqlAuo2vNn#N^_cf=$G10JZQc1x$&s7n55$5iQkG5zJ2rFWJty}8H#n^JN;hLoHX z`sqD6DJeOg+(|hpIrN*Di;(s=(|+_%x^KkND-SIlk#@y1@%+@sHbzU!u1o8s0V1|N zzpx@h>&QyZ$yG5O@(u&TtT!|AI$p^k&lb)1Jo?^JjK5uwbxiORzfy(;hx?P@JUQB^ zSY|XP-`;xkXe%!rZN2^WR@PdPec|2gii&LZKvszRE|kR{$gW`9>D*Deuxas8p``6h zRz*dY*q@fa`W2RVBk`f>pkMD{Jr2|hxoTyBC`To83q)1Oqd_b{yfC)Fh_5RWNLu;1Ip0#Av!Ma1gdE@r!@79a%M76=*cZT%+ z`YoSqV+rS0ojT%QLgJtGOF{1dM|zxT+S z!3nE2Z&@`V_}HySo~$VolB{+^Y@lKOvUj$=&P-!>+g+-XuAkmG;=TH&U%;jH|SFgI`+P`8dF_u3_ zmvq3r+u`L-zZO-SnBt5&0YNaQ<9+;H)y0*Tc&Uy*Fwymos|=p&j!Syv;3=-ezC2iIM8-Uz6ITRz89wPj@`WoqSFDhFiqO zNv%>FyM~2fsp|+?dRsa|Ca4F(7LO42@QTPR?$(YDUI+tnGTiYO?pAq&g=b0%ORl*? zVY3MebFPI0egUGPVf*iMJ}6_?z`$wF4R@e)UBp_M*)Lt zRET+5@AxupZ;)ZJXV-q ztVTvqFvKiI`9`p?vLQeN6&?@an2e3(YA871UDHi(_#kw^keTR5XFzTV>ws<~y6aFC zs$4u5YHXy22sbhX$7#n@Pf;bRrc{psUJCx{@Sl$n^*Xpe>(g?qTD>ktr`K9@()3OX zKsm%1o-Tny?;U$rcN|!~SCf=8GBEBP2lw1t<^gH$EZ6+L^Ici)v;pR~o>L{fGpgd6 z3=<*>LKGqu3UdVlr?zsO70@jf4UaT+9(BChrb5Q>xYQINB%~stUX03ygB}68Dow|+ z)i>O*x@^hy3#Y_?5DLY>U!*jne0PSoyxg0yyF8<`Bz@$FPdw|JZ=!h=S}?dc2vdH6a#b?oX$O#h8f&HB~XrkD{U1~xAACR|bs=vIRd9U6P>BO#gY z58pa1D~VGqt^de{7#d$}#AB;oVojJqCx5+k)9#yIx$ySV2c6OjsWyvwUv3r@@M0Kh z@hf%i?4Prq**;XI`?Pt{iv#D?e!4Ni-=!H($X*C~n^2JC2xq&TuEaS@kc0qp&V3aL z@$W_2_bf_wCqtqm#XB_jSE}2i{D%U5D6QaeN6<{@fp3DFd{LoMgJ%%T3I;*tf{B9< z%D@_EHCU)f%)8R#gfvmalyIH1q!_;T_3x#&?_a;RYT2rR@mYeH9N)XKG#$}Mc~dt& z^Y$|vr{?j@m|oi0J3d(yvf>A>T2>{6k=i~Asesn22{0(d8|7SA6*J0`lgnmQLW||r33e72nPH0u+Vy8msqDTzhd(siII)*BiaTYC zPq0gQhxdGNA#-pjEiE)S^8)d39CYSku|tlnfi_5?A_rwcm4{z)RF?=7N0+wFoWr0n z#TOPVX=E$HPY6rzz1K>5Kj;#n4vcOd_{WAA-HuPToMaiNpsGw zuP%>XO*gG$>*U9@g)i5INQtb=5W<*u%c8M!fCW{k;P(BqO&IXO!Uk75P#n+?kPY+} znUbiKU4`b$_nbzf$|Y%(UmM+gPkQh4p5qk=bRA$2G&aD{t;`tGu~6mJR&yZe}0Uc-oX;o4ax2Tw8+abbF_%jM^aDALO~F3YgTeIm?5y ztG$5&f%g7|`cW5wJ_SSo0cgHJSEU36MbCGAjdfS6-~NAWj4?6yt1CWeP+Zz-utc_9 zu9k>?g|CC9#jy3#(U-4YL3ASX;n!HE(@<57%s1_gJ-?Rxt>oC!d4wMF-_(u19n_fJ zki(rLq>G3}hm8}ot`n)a*nMRqh`-zj_{i&uW@zHId0M8K19!R*Rh)1KEQT#}$8??; zS9+A~J^Ej^5_N-@j|LWLnL10Ipk3O8w(jw9=1uB6F|B0Xx}UTn>3%>nloDdrOQ6%Q zfpw8AGY$^v-hbNfJwHQ4sE1(IbRgZj381okfy|I#x&%#Ozz@R1;2~~;*A#U*q)V1! zHvHp&{Q0AF20ZYU{ps5~OngYql?4Y6o0%Cn7l2S#qp&EFnli(eFl|BddSqWdUG*}>I!WtblG7ZD5 z*mK~)0x1tD_<<0k;w)!g7_u;>D1bnWc0+SP67|ai)Wwun^t7QBj%4Y($KH~T^;`bN zzFM{BhCgjv@yBcA{?p^jOMOxv-76nNfa@La<9|o^qvJd?yc+m$8yb>tK?C9dLJ0yN z3XMHS+Goj0cdo~T4&@KJzk&mBTz5^A9munB|didgX&N!xjvh~Tmr(W(Hl?rr0 z#ABp&84c;7g;OPu{(fnxX9;mO2tr)($uRlxCZsU@3Pz#f(WQYp2Mg@h_d- z5O~*^BunpREq9l8bay=|bT?rj$b5=yck2U*;mSEP3Xw!o9SyA>vuE(K$K=n>qvv;O zG&vwbJBMF6pANq-di=ig|9)P5XQwtE576uyapn9v{J!Y%`_9Yl`qO!qyClf-Y^j{j z(E&_n4uEYi>spF~fo=vRAj`U4j-Oplp_jV_7xi&5apCuv|CIF3$t|Dk&=F;6rf=Fj zAzFx6ATYiXttSX&Wr}{b;}fFyyll0;9DUG) z<8p1!2O3B+4nHpc52T1?xdBm7slTo!l0*sbC$W@`k7LD>=Jn zR@DNa$-fV{r);hE3F&?Ljhlb2jLi3hR-28B+e4SD#38E~9uYn9L@PB#E9Rk7ETg-9 zq6eRdzNO>qpUkWBw;}ydl!xr%&uGF#9FU9aDy+;d%0EQ33|ICfEi?&G3jgOz) zFf3H!-6tWkNHn#6Iu zan!s8s1C{3m)4-|wnCmLC&Us3j8`Z&SSBhYsuPT+BXfXN0P`zX2s0c0fKuG;5Qpha z6?9m-V90Q*NQPcZG5=cpJtAi|EzB+5GIjURL5v?5o2ZOcS&eFS!2mI(f63$+t+8qS zmnWuAKk=o6)v6KS9R*ou&R15gdPVy3*590zCU2j=>J_e_K_hBCnf^d|_THv>W7XsP zIe5L@wq0c(tW~K8hXQ#jX+-Bkuv-7>@h^wX7H85!q;t}judJH1mF<7%_qXE79fJ}Bf5jy^ZiQZ)3N zf*V!`W-OmRxnH`u4FAlHLn+A&^}(>}Uvm8l6@+fsRX^&92osReGUO%dP$3U71PV}E zK2nFt7z-+qT)&cW?d6I(+;kdn#ps=v>-oqZ_r%4s4?iVNgF>p60twx_14*) zS5){A8*<2IO-xFR_jcDe^6}3<}_O5Q|AsXT#4L(ySAtzr_v_aV|D}gwKbR9VGwm9aK+asZPABUsxY{yvv z*J0a1XAgvK{{-7%G%)5goRn>$4%y2EfqWhnG{kUY4|x2ZKq2YKk=!s87HDhxu{Erpq?rG%QXz#}!Yv&wJgpc&)_4V`D|!!o+vs~}u1Q7x z3It-3!PCf}ssgGOkmR&NOJ@Qk8czc8{p}B*H<=vmtqzmv{KM_w%f6M9IN`~l^-pc- z2yc8`e8rfaZhS?2d?O#;@>E-koU@6&K`>AB4~=@oyXCR{bMNm;z(nuw&T{&*W%*My zXK5$`tDL;aLXnoADONPqD|?QL73sM{Wdvt&=?2iD75M%XV^5ejXdVzyP=2Sxr zmm~<|+vg#1=a<@Cr?AYHXuPE0XLTH9TCTeNPjSim5BSgcj%NmPYdB+~Qu+>BCX@^9 zj4?@gT!>QWiLVatyB}eyBa76PNb17LsP|i}V)P}Y`cC8?j>akHD*D5+-ocd20`FNb z=zL!`kd0)MfJ3>G{hB?;-h%-~;^0sy5>gteU7(sk7V~H(X1`Avl($KA@+qU&V6MeA z49F>+;5z>3tP31eh+3+04!T|kcxOlSiGtTaX^#<)0C+XHW<-~Oe^XeP{jLG0a&Ev<36z*n$Lg|I&(VWrEFU=#2jo9Du>`K zPD67Pl>^7bF27lcdgCSPR3-95qs&S`(a;eR_#J#PAq)CY8md-tkP0H-1+ItU*OaPM zl*uUol^Z+qJ*oBrFI7ubjNFg-Lw)2&i2z%tRw0jG6rX*h_F3Wr92=E@N)@Sm);PE} z)g?F_rTVcc*+aJFrRTOS(T|C4=5Q~wUa1Kw#lE6Mv1tS{2)9oA$J&HN*R2@IeW$jn z*!Xa9UV|etGV)vJ*nD8>a-vnOj58#tG`hqjm)@C}8gH@bRDlNMPc;tbQhbS`KF7dw z+Fn|t(b=DsFHUsZ)utiN-hjA4TIq!Ryn^&Kxn(o=TyM)L@|4E_3o9_SZ+#jQRltg2 zd~fGq3uem1MSTax0`@#Z1NB6fUQG0*a3c&FbxcD*t70}wd}^Z8;E7MrY1N5(r}VvM zluJlRw7G|;#_9XH^detUXdL1)Wa#V;lk4JH*C>t0nwXHD)L$Q$>NOSy1}7Av)Wao1g6+*LehE>mffHY95VQTk2|n3lIWL8;WGY?Th0dX*Y2 zfO!`OJjZ)CGv{6RG5cW;fM(29#`uy#XzEp3PN`AFAh)blm|H5uxJ*E4{BoSPM+ zHfwq(v60A);qSG&K}_9PTsTJW6n^vk)ZPA*v!lclu+oy%I!*|-_fsiC!Mb!F&{ zHvkdSEW{d+%*JTUFldrFQ_O3>et~Ng8&+lb2AFy6n8MpNJPzM$;`U9!_$vbdV#askxc zE05z3*EuZ7I<3Z$l%&xbY=$ItOd>v+aWJPH5b$M|d(2*KoJB-t0-&4dlN{rDYnk;&aHqm8Q^A7;_Xu9{>B&)C@V@q$n z+h7RIFd4OM=~}-3*8J)2xFm~UO}chRvZ42u45iUDz0zE{c9DR#yk;Kn_wBM;RBGF% zz8tsd__F24k1t;)`Opy)R$x%+_(A=i6dD@P?6%RPL?ic7pOtZHrNwk}61UN*-}OQ; z|G8WBcEC3g#*m7Q%fOIS>+?l5fSvFVrm>l=I>4=&ODi<$9KAj%4b2kSY%mR6p^FL3 zD-P6hT;C5WN*0$DZJ&a~2>|Z0I(2$oUB8sq?e=~7sScjEC-x1q+~O*qhYcHw{u67n z2*~4bc2b|6#q$C&x|P)?Lq3X+#Ms0$^wR(+8T_u1Jf@M)`wGtt=0dx|E+Y_0Qk9E2 zSf%Bt#D6w!pE6~8Wa*Ucjg8wQ<4WgkyZ$%OF0#^hcl`dADcO9+!1-&3JuxF`^2Ek! zU(AR@(&-b@2Om7WacTelp4?2j3AfWy%~kQ;w?-pW2>WmrWpjbCMTx*ZM`xxYLUg1Ur*5EYYXMjx z*hMhU7YgJ>1BFdU5+?v!RS;S9D9Vy2YcEkCZ~N_4aG@i^O%lDU)fB1;r1my1A$`FTbMMpuU(@|ICPy?%-!#(6 z#)+FYO^j~sJ$J6-MtDsSCreATEc!@i>=Yn-Wh)bSH3qzip5CZ1@C9UUibU=%**EsQ&7?sWlHESQ&cHTK}bD|V2`6XBwv)BmjjjHN(+u4VlkgFk?L^BcmCtpha?@Ph| zN8bkm(j`&27P_QFyd4Zvst2wI(Nviv^g@+{P&H!qg#~i@kBu*DZLz20@^sHgFInSb zV$#!NViGLuYozv&(r~y2r`d0DPBdqTtr=#~s-Sl$cyRLYaaAz4oq)B>HV>9=ztRJ@ zQ8#cT0)^%xdD~fxGki#DfsP^+3Q6BKA8`-Dt!SZ zlERb=IC__W^PT_Na0hZdU`aV2Xe)vi!w3s=G|K1(R7y*2s8OH|NrH{)hzj9NKshYn zNzt=bSJn-ohn+QKJ!=U~q!$u)S5+x{FtSqo8;WiXm#IGH7MHTSl6!L+tTlg^5C3-L2$kF}sK336IXvY@)pY|Z7h)zmTIz7~DRZw~%IeSUEh@9z^rajEAGZs8vFbeUdjnShe=^c$F zgGS*XWJ#C*c%VT}X;~B1Za-x!cjPOV~^4 ziH{>)dxxUy)l6|giz|-s=n%}EUcxuyTq7<*CU+`Y30_Sfvl9 zt8Pzrs~BLRUkOnJuoaQp$%zjXqzG&S6Ixl3^jh!1eVU9& zuH{)=q*70Pa;jQY*c5~O^vd+w#$}DQ=}O_o;sGMB?w1p+;vshr=8LbuA0iz}SjM^~ ztb=&Orj}C=FhH${=v%+Jm=XiYNEry&a0^ThBfXyf z>(lt(D>9@PdsBK&`VLQcZ{_XGaO8+IbjSC1HQph;^W?qKA5YG>=PO=$MRnvpr|9O@ zz*~wxnuUKHnMR)Xm*;62(=Td603V?YTlMWwmRj{fNN){Ks%n?H0RgN7#$4CAW|>i- zgN<}q=V4*k<%=h=@@84zN)N+h=vpM%rar1rhp{4G)&M+K>JcRdT?}dI&}1rfuTK4M zO4N(S1AiY16^@#t%Q2&ogR-n57P|CnQHu+7!N7=yGFTvx8bUhhKA>y??NnR@ncx-d z5ko~f*GNoHTZ_#4G^SS=Bs*=gzuBj*ooZ))qn$`aRc>xouCROJjr%t5yK!RmlIgPr z%TS9jd-{^3L(nA5DD>NJhJV3nZuM9q7E;Ww@L>NER{D*cy?}8$CSa#syv>m zWrKA)-+c5*mB*uc^3gYU>aKdUr;allIwu7Kx`4yd9o?G z(6uLqk#lCz+_};ssr_=5Atmm?h}gr#%f}*plh!}<-R8~TJ+wYalh>dA`$nR_MEft7onoo}H(#f-?1*zj(cxMDOJ4*+@NU;S2t! z-{9Os4|N!Jy_}Kp@~$iU)4=~_iBqraPfC@Cut5Hc&UF1e?##UF(XIaTO8lfF74F$n zNImL`?_h*=dobwXk4Q=o4#_!czsI0fAd?iX zC@_o9#dnddy+pL-V29`iXdqPPkfAXtkqjNQ(vmKLWf+%`TXy%RpThV+J86L%RRp#X zoy1s_v=%@m47R+Ohj8Q$<>ge#i&R$ZM_w6-#oGB=`DlUPpux$?0#QA>vb3tt?34ue z^qu+z%BI>#c=UYfwV}JF=|ts@$wfJXgfPG%Cg$}+WMrM|K3cctrb_SnD@g2(>y^eH zPV4mp9d=)rUa97)a>8p0hlwm)kW!qlx@r0kg{9Ka*xcHt<)c~p;F+z{cCpDD?E`46 zQTr&Aji3|xKw?*rVpx`wv5tfKmYRtghgt^B0+~aO5+U)l>&ou7K>Qf;Z17Q*%uo0d zB%Y8upW`Ps9>@to48Lba+qh(Q0B`SI1KdIXk1j!&HcNvu^WAxIYa>je34d`$pGf@^`4QTY`tL|f8FiIz;0siMG!tc|X;FCr^q9f6u`FK39z5-I2W zGH22JQG;1sW-(L*uWe7Gb}ua&kmHkH3Gd1eh_2-Wd|KE7&54_8=N>Ts{lMJF^oAYw zdMEedz#)d9C#On#NLyQQNr8>cdUd?r>nI3mnhinTd_i3kNUt)y6hfHK+!rb`XLcy8 z^|}FB+--rHb)J0b-JJ63oHyR6&QgyIWDGKcVs`dDSsqN2@$t};Fbq3+!ZPOVW>)AU z&<8;!Bt^NC!dKgaF-b;YxeH>%$|KqdyGQ3{v9P{uVH($WMN_SW zgf7ybA|KT@-LsP2nGqQ^eV@9rsaDxCG4dOKsG|}AS0=NzFqsc^v|w93D4Pq9PcIQe zTHtjKsG5YaoNv;zvREXjU>Ma(MM-|gKW=|XIsywr?dhAEYTYaE32&P=VwStM>0%3; zc4R%TFY?8^Q*&&|J~vV`8nSwqq#KPbN#03S?s%W-s6Hp*d0Bxak4f3rumBjWpjkdY z1wG3Pvd0klNdQw!YdN5n?}Q{le7-W3C-3xBOn=d_YwfX#218sw#xg>hWYVVsUPC;L zT~RuS+c3n7eC*X>tF1Hi;xg6RiRMjX>o(fzX4y8@U9-h7VU_AyZP1aIk{>tcKxu&_ z_OH+Pm1*u=zeiK%%M0_L7<+4As{|gLom7>o3zR zi$B0uTvAM~VS7povmNZi1lPpv+WPskMoM?G`$o=MI#zqb#Mo3xp~^J5bh?}8lsEaL z&4tQvo-Z4-1J|>d>|>L@GHebsbv*~h!tpRocdm`z9s2pG!KNv1xM5b z8oA!V5#hu0KHvt}$EvnXdT-eRX?JL3lnl9*@3`Xn+9jA>v4Ji5SG9x^M0-XT5z#LuC5g1AjLkm|MFk(F{VBU>~sj zNl(x)WMHtM7PP7A0f*NfuhwtYR^{MuvnJGDslG5Xv*HC%rJB%7hN^VvZ4G(oz5%=`mjy18Z9Idcz;ACk402(i>I z4i2WdjvcPZXQOQKIaS+Crc6ts^bu{Rxmcsc2CVE^j@ZbG0gH0Jf^olQMKv5~pdTHCG*8;MB7-JsBf`?)9kAvn&##OnR=MDl*tWXA0yo6sz zxLzq($%%cS5Cm`)MIjJG5yNCn9)|oi@Y;FDqTdFuoj>TUKy``JTLr@~rqSxR##mU+ z(`x%Fo90Y5v&3xEYc<2MzR{-nK&$2T!iO5$F1>|sU9Puuye;3HWzjD;SghKP3cXHi zj^Tz%V-bvbZ{(pEvsP>1pN%nFBNt*5RH+&SeVM6Bs8A=4r3R7By`ymm1QHHes~AO< z>*D80ff5Y@0gVSzLUbN5mp?Ck`=jScHSi*T_}d$A{FV*vGNbgYcQ$B^oau_eN)K(2--ihb z97gvLas)}S<?ck0Bl{6I@z&V}9WabcIzcen5?o&E(5a0>yaP-o zozbKY=#9K7D=;ei=HEWY$KXMuRq-4eO8EtXMw zfzu-|kQD_dY{c!Ib_BR|)x7X?AA6;)T(sC!Qj7 zsa4e?x@Dgdg+_3y{2CV2@cy7v1Lsi{<64Q>MH;#06ODr;H*0-X`j~6xnj?+aXRVU^ zS>|b!!dxpUR_TO%868fhi#ji(+dgSzVd~?uyejLB$dAPj(up@Y;fv!8`ZZ$E9|U48 zBKxoGy4>r?L-1uoOQZB9bEc17FZJfL*b7o`WC3vED050*rjO-^UZs+cB1+BK@C+`Y z8^gGzioJka{|AqI29Lvy4S>-5X{RJz^#{<`rJ-%Cuq#BfYz_dD(|83cLe7F+y|T-y z3aoeHTMLSz&_nmc7Uc_&4XzGcBX1!(oSixC(c9@>)F*#KD=7 zHjq3zAes}YPlIBKd_p{O@^fwn9BG1ZTMr5wgTsTt;T`_P&5QA0*s!>E#FE9$9RrRn zU3Tow&yNWkk1bnz3_BekOaJrCb#Jd-`}TFu@b^j*;tZtaZ{Iq8?EZ7yNa;IdK}AXh zwoYK{v&uCK4@nmeZ~3A&ca*N)UHj#h!_tLA3pM3gY{7nZ+n-w54O~L>^+Ar_UOb83 zxp*;?%g`df_!#^A*s;%#N$G4IGp;?~c7Cm(TeNWep|_VWee>WXcs}DWJ_BAW2!-nl zZ+Y@I>B6l|(@L&&toBY@d@EDm_T()%K7DZ$`pir?;2pv|tHHN`zp%m$?`kX%k|mP? za?XKA5aldafi0F1k>M001GOU0F?k*3AmthPA-Mqa2NFUKM0{UqyYvIo0=Y*k9e8}x zrpGt2EWMyl&-O2UX)x2dTrtUGlKZ_ReV;rAo5@T!=+!0u>~vhBP0I^;L|fIMrqc0u zd3~NxUK+O?8K%$RNk5!=Yp{8H>LsxT)FJ6+G)LqtOZ3HoNIFBE%H1< zE>)G1l4M~<#V(e}-Nh0A%b9#`gygz^qCUQT;^v7HH?u-*TAyUCZ|%kv2?@!4(zK5B zeswn$-k9%jXdGpZXO;}ZQsZzuQ?zSzzx07;rGK71i-bUHdP1GTa}Q6N82P~#E5@l~ z)6*=LI5F0i-6tzxD7rDP^8rhTMjv^$$Pmct1FyB1v-C9fMMr4mJ@>5STd>5JC4N4v zd|V8}kB@x#WC2n}V+4RVq(DeDmpO8cjPEH6-O8lOaoazWo_*j!>DkY>PY7|(=BBcn zy#w+g`#&u`otl$BAdT(!h~e>-k&6#XEuU}O_BjhZ$f-gT+TZmMz+(OYkMs&F_6*1` zOp(@-PKTi^2SEd7QJ)hLSp-uBq8Jf;kqSgGkKF()Jq0qWLG6j&77*=G2QIi}`H(?8 z007oP90IAg7V`$`rVB^@7QAHOV%aRdD$i%jwCy6oil9oBb} ze8)J}x1ZfJ-@ULRw*O=nI=|0azQl80|Cx$CVHnsap1sD{j`GNNo>|;u`H@Ro;BfLR zZ+oR+=@`+cF5nV-r}pXCJ-v(_&hWEO0|U4MmdoYjRR6vIJNtwAoGMMpSUy)?AXR&i z`k24y%QwKElgkozwTEh=e638QwXo?d0av@X2gM`F6Cuv5T=3ddXbL1vfNQWy)_;)S zaEhN2%n^+v+9k_NMpAGD36>WUQ!WNyki6b8bAuJ8)F;pYK-_|KZ*x>&V467c@aW0R zT*1ijk9gwZeJKUt4JK)pZ{0DOmyW4cZQePFyJ0q;7$@la4Eb=A34DW+nFbAc@qQL- z)nkxwi;pG`(CWngh6S7_LD0w9Y{ObN8#z6$GY+hH?E!y`&b#Q=a{6N zN8J7J$o|GToYy7jlhXN`Pc|C?BY@Wq>UZvb<}k%5tuZl8hg`T$tkN$i(da`pA8m}` zs0#W)f018~Vq7i|x8W*NmP|8P=iKU0q!2m|Bg>lChtE}2b2oi1{gdr) z(9Mua+D@NtJFQf3Yqoyl*WA6Aow)seX?|qRO*bb=WuA*{{Rd1JJRm(IeHf|RV&E2S zVihZtxZ`vijVr`aLXY&aY)x=0fC&o08i-!Ri_;i_M<`J^mD8_;F|eF$2Z*Z2Jm`0^ za##n^uh3smc0plva0Vvu+oaE=0rPuXst?Z6>6Yj-zFt003L;_x`E0@@3UE#g1_BKN z3@gEV19lb(NCgH!a~fL3Ky>B&G;EOG`26wb4ohFnthq)IuBn;HY=@sazFK3F>&GE^%L86W$bF3xPI@#`Ky@v z=5JX4(~lBw%2sw7qdEnX#WQ9wEY`kV~?+5Xugcq6Z@qbhxwP>8nsJQe{Xm)*G&5Y`~qv!8k{px_ii!V$W zv-FlVkL65d7r1xDcW>JL2X1Uh-rnaYj=ue$Tk4iE)zap^_psSNj6iw|3!BWA#|NiY zEj#%rd$4Y5b?!ZjwzaPvGqG;aM_XU#hTM4eEUFlte^g=2KSn~={;@|`)T(LkG6r^Q z-2&K>XD6IdDXjX7FhGLpz)T4!HNj&O+cm!dqG2$kVCnb!N%+1RecHlxQ|9S@w z!AmJbmtlch`4-uNN#$~2Ui>S{PuE^nRjIJHCD|x;D#;HY0mTb$(2I zRYL!>$Bw-;+}A6lkI^}E^WD=QpthBB*NCfSeMzyd0#g)Kb%*h^E`_6ao)Q-wDGEGr|*4vly)8^c~?~OP2_AX8|njjPUbhCF48aR92 zz|g|YjSp=dyldx+FYOG(a%$xNwI|!n`~sJ&<2*}Wo3mie>UU~KX6Gbpbh>!GMm2Xv z_~tDe5-cEn`i=M8dGLCja&dVmRMFJ5ch;ChwK|dU;|8pqIkmW?B#06Vyw%H%l1r>D zs}fC|(V)^+R+*A4VpXNtl`v$*!Z{;rCrqdvHQS>~Fq;ym^=Eb5_QqM~_U?Pbq$?;? z^Stt=Su?5!)(&crru7@V^})$6?Ap0AkisGTxmt7@xf4d`LMbU@v^8f!?Z`Pz>opP&nU^)=EmtwLTRWs^_e8tTs}dcNkG3}MjAG6F#<;oAT~La7Py=kUbw~=dogF= zk6>!R?E_ZLz-MrnDde~Z!t4Vql z(daPh%QxKm@rsq-JbZk5ids-=^wuK!!%a9$=mQrZ8XzaOWm@MM6teH${P-|f8 zfd8*@Zb8mkX>)?tXVCvSeYn-CGx%0+-@R#ec}c@{t9DK+u&0bw+WQvuwMg%0jazqm z=JY$JRK`UbtE&c&b{YE2UQpRrsZ6q(f+PFomycgQv6sdOggjw+{)1!E-!je1uj^&d zTC;C;s5Cr)iK5A3InI=)RK>7+lB)_bbh=jWFq=*1=rcB5nOAqy_|ZEj4(^qx;nr8W z1DwM(YB>C537(sJ|+!H_AXVCJJHXb@sXt6LfNtIPb%1p9ZbU)Irl#?Mx z6N7^g60wY~F2QKoMIj?SwuNvT94%UjcDBk_^w<;?LyIo^uQU?*ZR}h|ku{=TsXeya zEEIakg?{`b`Jq>|j}bB{wGnx+b(%M2>kDQA2FIme#QyBz*VA45C}v@_Y0*|f7>*$= zR5LDw+)xS;RRvgDcQf#c%i9djOjl{OaM4iKjGLnuM&1$>EkCKVL9YMst2Y#hK$!m( zoqfU&&PDDM-pe3s6vurzlAe&!NEAngqW`mY7)ufOXU;@p%%6Tb8g<^af98y)!~Nei z%`FJbzslp}fPZ?t)cXIey=;)9(t#QRtXO#U6KE2eiW*2>{NFW@=#&)5IwQ44Tjm26 zZL0Rh|E^iMzLEl<%kF4<<7x6^BfbBN#voZb%JU|5(h(B=z^!zyFhzHF|wFm&D|vAM^8g7eqt!jo!d*7tt6EN z-tEP>_@g{Wc`42!s)FjSkf)nCf*;0M=v3cdrlwF~Q-3HVmtN(YTJ5gH^tKlHy`gAS zsvkvRi7q0ERk?*Y~*0% zpw?hDW0%7&H=CR7Zja?c?Tt{jw?xRvssDZBeh77ebca8FZsFLHv6-T-Z;WVtM*qlOdHA`-l z8Y|YS627=%xBY}#$tf&Wy;=z*9jg+|dRxe*hJw+Gx!tBlWB&9Ae@UUWwt-3K88$@l z?DXA99&$q-qR15^_;PZH?bHExWmM@}L!&KAM(an#~5!gihJ+=mfgm_V7GDdeYo}Vf0lzJb?@D4xxYjU z@EV=bA$knn_`JM+{&A6;PBH(z_folKI^Lt)IW%|u7{OHN)Hags1bP`TPe2O?)G}D+ zG{E~oAnmFU>8S(0Vjm>)auK>PctA4L%f+r*voEFD(vdfB+Bh~LHs|2AnWY2DUSreV ze3Ol&3Rl;>AhqRJipE%h7ZFq&!>RJ@y<%OuBad7*8F7#FsByIREWG2Z>ziI3QqVYl zWW{`+QoZ9VX8B6maSDy0exRR04LT#31S8l&b--DYGbsHUraZ9m>-%QRxbJKEJ8A@l z_%HN8CA`%2M5Td2ZDw&uBY`ys@e3woc}d$qF7-!FOYib4Bd1xqaFn*W5z>2f6fMaV zqb{{5?-xUI9J-Q0;m`YcXv$Q65-5Vj4yT3Mkv4JAB07}!Yo)W&uRptSYF5Lbddq@g zu_tnFtDn5gndJyp7S5WX)~_iItzvcUeA`#j6lo+=HM1(F96Hs0OZp9J&4wM)Cu1)D z>R0tU;@R~&HGSi#9#sK(kte@m~gm za=r8h-AnyCs(S`w0bj8C&ii4faRyjLFq+#4(I0o)6VD>%5N2!S9TzNsgO0FD|(zW^%wCkPf)x*s0X2LHS!YHx9LF z^@CZk5O{!84i_Ay3wHFG=NN? zx=)vNGr92N8wqO<*?OV|8N`ptMi`KD@@4SChU^rfpX;9%s z71kh+VDS{59tlUCd@6#4pa+BZfimy?A>Z%XcVTz^o);Hx`f}(W7D~6j@+;~6x7V$E zoB4iqo-LL_+#}0iDF5csE=&2NNOp1jy4(GY+uhkQ+Uy?|t-4|Ng}n=3+*7}L{&n}X ztb1E}AJhYnc!#T&nj;b{_Fd+6>H9CGWz7shBqizS+ivhFt@wt7)zXPa5cDv=8KD?v zAUZQ~U*ymPer($#j|;ck_C>y86Qr1qd)Rb<>TbNH%?lmlQg=RALW16?A z>@=F7uPMaEvi%gq(q2&P;&AWfd+;noWBots-UB?2>gpTcduL{QlXkVMu2oz0w%T14 z+p?PFZp*z}bycit6*r0n#x`K8u^pO?3B83-LJh<~0)&JTLJK6s7*a?=38`Rf{Qb_% z$d(Psn|$x{J^$x#YiI7OB27?qt;@uqGejpF5p{d=MAqr#Fzo z?`}uB*XQ%5JEEZL?tI;0b69aK116lB$mtxvY7i#=08co^1YX{Nz5*jdCAX%rRGdvp z$_5ZJ9SV*l=%tNup#*+LI{2$tXbJOxvjwhIS(SbYm>+mlx+V*J3=vB-(VAW(+9w|| z8chc0iQ6*^olz;?6kk*`c#p~sP(EUhZuV8?7ba#!yS$0{1+ntAo=aDf(9X(BJzcQ{ z`H5avbXH!P-Crlb$6gpEfKsaKCXEZ|9-~wio z|G~t^U@y+by1(J@gz)|^FfLh;NvOoRL<>d-!fV7;1n-cHT)?{~f>;W$p;hfptB&!) zW!m0_jAsBV>Tp`&1wT^D=FIXdEUFCWsVHJQDO7;IuRdgO8ggQ-)|5oEciZdd>^c_i zZS>?+=`)SFx(+{>avNN3Q#-#hVig#l`5EGo!7+>Cr7r zx67O3b;aAFdwZj8@$psB?2#!=F$G1jiGsNzdFHHheztAz*2D$g>U_`K{cr3aSa8LQ zpWSucN1n$%lArrs+>=}Hzbe%hH9fwI@viu)3|ssa^>XYBX}0L9_*~A0}Nt$Vj3PmAMLZh(kbpaUoX5thz%5kMGrcDrx!qhctbY6 z(sNm%sAzoQoDjym1aGoY`sMi#Z{Pm#`5zD8kh=HdzQ@jKh3R5bV!@IPi}MqV-o)Ol z?BN5^1>yDUW+ysEuIS9kS+nbfZChTvV6{IvFPtC6^{)6}Mq#4cu`)BWzAe}6uRnjq zyz|!0E>3fqxoy?xl#t9>$Kv>c ze1D)I&1NWDJ#@+X1y}88sR%CK&|O+MJ1@y>j`oLFgq<$NsupC%`oqOjlHw}D)nyIg z**Gj9_*Lm9RexP~_UQrff-tKUDQ3)aMdwRVN~dkWk!W~!r@6y$WoJH(ou%5%nu!rK znJJ`&*-3f5>giV1Kc7U)sq!{BZ-O@cDQ$S2uZlSf!3knc5BWI3_KCPoM4}P;IpdiZ zovG8#4zcX7_U`>keg{|fDYZwL`zohO2})--{P=hFeswC>0+pZj_0K>XPt&jD(eP_M z2|S>x^P}g)>d7UrBmb_izScjd$4rw)`d7VEruN1uV2DjsWa2fC zo2fUS1e1YS4TPa4!Z&^Jfewg4(^-ze{=Ep4(rnVR13VEPpHOxn3x6cW0XDr*2#QD% zv!#+^9@iDl zG7dXPu9QXM)47l51nHU?#}4CL@dw=s_1^4*Oh*phrN>Kgna9sxcTvQ3+3Gt~dG$M1 zU*?Kjw9Yc401;##{f>ee0`=hdhQg^+3;6*APaNeCsXiQ^F6O|Lc3fID!ssNqS?Q|N z;TXi{i0Skqho_0}%I)m&l>?M$V5K~h-I!la;c~!#DsaiKK_>{XGY=10=>i>o!Q}={ zoXC`0sz97`f{OH0A%YTxkK{TXqWO%|Goe%wa-|TJApE*ot`_8S1I%SsvoeR-ES5|0 z^5csPu}7U|ldwQW=mQ*9A@pOqAtjqxO<^S^o4LpkcT|0UDn#X&h#iHa^M4+VJ*l(W z?MGwf$FRIPS^2~r4@YB}`i{+_ck+u9cdM1=fT-)iIM z!+raO%l7X((ZXJ10sMb${GjgSI*2O#02$aI5avIvOfCMLT<4ft#7SVdK5`vi^JT9sjd@DX z1^Jy`Hp)hO!8Lec{3Cqh#JZvKk#eA4q&vkq(l|;wr(Ut<=OXSGota=O$`oWRYHx7J z(KT;g*EoLo6X$)PS|q%{cKoQz2MDx@KIJ~%tiAaurJE-x$>+%_69x>AxTC)si}%O7 zqb1y))S}S=l1?}|Q$H>}j+t(TyrLIAzu*rBQfOta90(K^Y%gGpN+|5@5@Ju> z2%{ho_6px8KQjLL^K#&MV?Zj77;unrqY$e+8ilG8Ccep*7sG-lO!_tBH}ZDx_)ht! zF?qJ}OND>n$*aJH%5OW0IYFl`=p}3f(wU+|o&~b2EI?NGa2Sl;1GrNl-_n$wS_b+G z{YBiiXf}5EurQ-*&+adq*~)+JyFkuXY#WTVt&+zd+xAMOYo4p}m2Hp7}X9wAD z*}>2Gk)z{ptj*x8X>N043uEUUJ@Vvj9orAS-@THtmEG?j+}?59ljKkyD-Xem>C|{m z?6X|p{^w~r-_VmF&t|kQJ@o_j%Y#dK0}+^5dp$%Pu(DJMf0I^XLV8>{0na#J$oH^i zB$hkgEM!@YK6%&cugkl9Myu5*zGK9e?QwYn-}5V6jxDb`o?W$kd6oE1)pEXZY)p4@ z`*xYEAL!KZiCZbhN!>m7U``s3XQK>p{ec4q+^4gVB}rP3v1tVCr_icIqS^Fck0W(R z>p-lM&P^$XvqFhy`K*WsCqN$qznC!e#D%f0@;$GmWvnu1WmQF1hVo5fe&fjSHFK|n z`;buL{GZB;=WSdvrLu5t7N*fNEcEfEi<2e0&Bp4wV>q7m`cq2^QT^T@Y-KK&jJ_E8hqf+-`xG-=A}!$aLSm( zW8tO)AENO-@f~DMgX~Up;_C{TLGFaS`WRyYGzDav02P<@7c0tk2^;+7stiST=o7TYoY!Yg|)iz zteU9K-fgeQADva9T>K3?DWYNOfxn4YM14F9{fkv+VjtzA$!W+^IbgV#0qpgVQBjQj zQU5zwCS+TQ1>lCLr?RU6PXPf?J<_@LQocAXM=#`82KLjuC9IEC*Iw#de7dc_8s3lvS;ec{O=7#* zyU)0B`#U#Y64`b2D{C(uN?`dbZcdhJS0=sbHAKt5i7BcJ{NBy(>Y`%4dV1QPk-cB- z`~JQ?EBmf~8DB+v#tC|#By?9}UYt76RtaeaqX3X(QxCh9BW{=rQ0!We3<>QBNr+bw zGT}Zr!%F79DyU`B`gV%G6$UjI#fQnVQu4Gszc0zFM8zbOrX+>(R|Lzml1fcZi?P=% z8n%6S!F!*|CqB8SqvM`Wn5f*@)n^mMjVMelmK_T;Rwly*OH0f`2Q>_W(x z182D4#S{OPeRTp!_b77?n?ynJQO@YNfow2h>XGCRq&U+3S#TW-$e{;6^N?szh<#^l z?b@+5?6RqKcKK?^ga`)9Hgxbl@2#{Z~h(BIaQ@v(Qb0~}L2nm_eWFh50i1D(2-ou2Ik>+r4 zP4D=#%w>Pa?vj61W{#Hs7UQz?d>oL8{9drd-uF=@@(9aD<7bgqhz|1aZ}c?%Al^aV7m)?$YO znIZ|y9TJxFV*w_{4J-k|OBgJBV2?q_pQKR1v#0lvy94afhMB~|=)bZ$xPY^WNra4` zd%)P!dq9mN3Jf46296b!2yD1fjuM4!xPf=agR(HfUS@`OeQcUdZuXT-1Yxv{UPSU5c?MK6^2{UzlI(?P>t4ri5w{D*da|pTIgmV@wv|=fNseH+=qH22wy9jj(oy zGjj&*C}o7y)eK~X^M%nSo580U-lTB&S10Df|I({Ot)Ko&`oJuS(KCRud2;~jd5^gHdM4ME6yqmwv?$}RH#jwV~F>Z zEY%c4CLZYy1CLh{Y3Ff0IEsqUfJ=5Nq~51D;1RWJa=4IZFpgt4Hj37@l~L zRbg{0f|YdO- z{><*kjyi0ydw#YrYX8=hg#klKL(w@`WltBS;_Rh!3q!-58S%mcr&7eH7bL~0X+&d2 z+2mBw|E4NtPh{y-7q8~9i9I(|o@z|VN()`6-MJFWqSND}QleP0uw zr(p6IGH_?e#SZD+VHtG5>pV!cfas$M0=uWUUG&&RUF35FK}>%5Bgx3hPRl6u9@s!I zeA5RGe^N?%M$o(FhVf^QjXz~gv)*a7>Z@`2IDTgB1#4clrST&gxbM}#pM6N~?dUFr|q~~c%f~`fdMZP#pPJ<_@esS8$-VJ*jJ*zxc{nTh?;*Jw% zsOf=9h0L4uF6`0AflkF)83}?I^ymjt^YQ>12ni5h7GxE@QF@Vhzvvt~we*5YRXPn+ z7Jw~R73m@{3YYreyV2mKWI!4G_fVShW@UBvMrF(>5)-X%Gj~=yUHl7&QSWK2PPyYT zhu)lI^se9WVDs*qvQ~usx3bj2LLUxz8$)>>$pCo<_Tg7E&UvaIrVuyHlZ41E%RMQs zZQ`r3NhuC*rTmXe@|P?qf;@rMJfDT;uNl9?U}J*Qw9e?t*pss6fos>_adBv@yDpJ= zvjVgHsoB%lZEDUnae@8qSnsiCFL#;bYg^@SX9yKlHp349Lk#Ea+aX^!4L;&_qjyLY z7Jsx0M#&l=kg-1iX@0Irvuhh6ZmD2d7*;GfV*%25AW<8#Yo7 zM%wQRo;CpUl3)?^mz29pdv>7*DN(o#1`ekC65gLyvNzi@OJC#zGxD%0t0L@YqFkL* z0n5`_?1}Mz%jT7mz^kI^0jB+v5^qo_JTv_>>7O*5XT< zlW+ysGheiDn?rOITgx`^oV}sy_tSDqGyfQ8PfML23ys*XVq!AW=eqxVu_Goeb3xQI z5o2;Jlt{~SvdV>~=zZB0cNb2T+kAOqxvxAM@`k>tIaxtgEmh~F7ffAmo}QUez?(B! zq3t~HqE!D&=Vfv~{2oXwWkHiHU1ZQArIGz(OQT7z#vXtXu*Lh zNw7+fr4VU$;|RXmO@;9TSW{6lni!#G=Gd)`=dsz(dKj4wnI7j)oa}DH7CD? zD2vN{Zna!*sLT=m`Kie^r2_o>th`uuuEl!kk#&M)sYzZ@T&B zo8G?WAA3`(suTZy=iQ%ta`&qFwv5)fN90%9ndH0t&e!i>Gb8QrxA|Mgrks=?pSxvy zrfdDxap5VMOXKsCoy#h__w`Mi5ABFaeEfJ_4!FJbpn8EBvj7qk#3|-BTuoTzUAuS7LTxpIY;^$AI-Wkr(@P~uWLq4c4kz2O>nb6I46|* z`PbHj34Yi@MQ%>{CK_tmI^&x`+|e-8vPinV#M+~1)t47m2#TZC15=G|ifk2bV2@2^ zhlwXWbsb5DtfH(;w>8@$8l|X=UCUmW7X?`qYqmKi9d8WPyF8b0qr+(}wWn9-&&k7;+(w6wJ?3birdl`x|+Bn)*X{%^*Hpd zOOqr|p-0MfnUd3!@n>{rOCEOoY(5y%Ilvd(h&}Eaj6aYvfh!HAGWCg808%E#0YNbq zM|8r3J`?o^NtO}nQ9&I&M%qf07bG!7!&X}3t~V<2F|u%An8;%CvaJdn>|Fl* z{Ah4cKuftncqnjiDL2}kwo+SqjS2@f>9(NF;V`mGneL3q03fihtRbms4G5+O7i0hk z{PX?uxHC=#0*jr1pooCLtO9|_l_z)v%UN@Q5pP(rbxl~$E~(@XfII^t;8hIVZZMZ5 zW&b4TiI#-$Rv}~xf}tRWIa-G)AbHEGL=e>`-HgH7kjEpKOTCVUnnq($mwb=>>$N{G zTHtidd~C_ic~5}mHd*xgXC1z=V|!)Y#fx_}=31Hl(vOd@z8_1jicmv&(B8rQr88TC zwdZcG)$0n^Hq6c~(no(%m^9s=uTOc=esAb}XR^VNFxQu9OY!5x-6G$SWQbkGSz=*Y z6!?4kGS&|-LncRB!R*2Z#QDwVTvfAp^PE)mOhvJu+5nn)J?uY|Y#W&T!0(fOX<20k zSS>mIBd$Jh`=lSxBi!Ge@e6XuR??gyl#mhaQslCsi$I62%0znvQ3_Q4C%yiY4_w)AJynX_(SpIo&5*5 zuJg_7z=a^?c*2NfST3Ty zz>Dfnxxv(EbQW#MfJD_4gfzpdeL5n#uusA2qbxPb8wDd{K1!rtFG6~qwzPC?tlX$q zDS#zAi;`p0M_W5(5y!HGy^2DuQyXY0=OFh8(<=?~2ust-)6&W>%$b^haXOXYX&Kj+P>7RPj5xFva7d9tqzzkXkGd18re@WLx*MI|?dk0md8 zaPL5yO>U@et)AXKosZ7_R_pw$%8J)?gjQuh_*I;{jCt#(R?45Q5vSy71(czXqVm zr~>{W*Xs7^bnq95Nhd+b*g%>|I9Ds=XpaNl7$9mbK)DJnAfIGt22BE}FF>f}bV>9+R zYUiLRxWa%uP0bQ>ah)|(A*NZf>WdiUZ1~}Lzr8*&=uNbgms_JU;zKDlP7IeqOX(CG znyKuaPHzJs{0+hYRI(Qx=wTTc8{!p!ys!&Ej^K0q!5knV1}Rw#R0#&CH+%(^2aB;P zrlDcmZT(VHabsm;V6DFYwrvd!F;zy(_)nQ(u|oc06b)U*PRr^q**)(hghsoz=xf9KeN1C;PJI6N2f z$gI9<$wKo8m@G_z9t|(c0LQ}>g^$fFq*Rm|XxyL)&`jd7VF!W!LMG}lSZ$J?%`yt+ zygSYpvvL>C$z&{Z&VqcuwB?R0G&a+iU|Ii$G(UevEMu`V@?jjBms#SUUp-@u{Fcy| z+d$C`xsAfxKdubf4Wu@xnE9X%&N+uY4;NbV=Tez-=ND$=9Xqx%hYytEi_

7r8$?kb-D3z%-c} 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 F002TuuHFCu diff --git a/bl-kernel/css/font-awesome/fonts/fontawesome-webfont.svg b/bl-kernel/css/font-awesome/fonts/fontawesome-webfont.svg new file mode 100644 index 00000000..855c845e --- /dev/null +++ b/bl-kernel/css/font-awesome/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bl-kernel/css/font-awesome/fonts/fontawesome-webfont.ttf b/bl-kernel/css/font-awesome/fonts/fontawesome-webfont.ttf index 26dea7951a73079223b50653c455c5adf46a4648..35acda2fa1196aad98c2adf4378a7611dd713aa3 100644 GIT binary patch delta 30646 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 F{t4uIb!h+q delta 7574 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 b=>>xXvun#12DZ<~3snq)iK91=53m0PtWqDQ diff --git a/bl-kernel/css/font-awesome/fonts/fontawesome-webfont.woff b/bl-kernel/css/font-awesome/fonts/fontawesome-webfont.woff index dc35ce3c2cf688c89b0bd0d4a82bc4be82b14c40..400014a4b06eee3d0c0d54402a47ab2601b2862b 100644 GIT binary patch literal 98024 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 SdSQM28?+M|D(2r_;{O0|uQ74} literal 83588 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�>=olG4!T4BYNCc4f{&*Kgc`m= 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 literal 66624 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'Bludit Installer') ?> - + diff --git a/phpcs.phar b/phpcs.phar deleted file mode 100644 index 323bada4fbf95bc77f9a96f365585a738fc279d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1026122 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

=Cd<< zbxU{fvS-%BZ95NN19>4{gKmbbBt41Am!tU(FCnJ2*!9ul5x5*KM4KXlHg6n^&ZNTXUFQ=YO0I(Ra;hKz6OIbAPB;FS_HXvH2mK89K`*-KEEK5a*ctZ~a{E#2fO)6tRp5M2>8 z&YE2S69Z(NLqMR=gUc=hn{Zv5u3zaswc#w;RZ?WgX%!Ea2cCv5N@H)?_F`g+o>j~{x1b>>io6Wa$QD9n<>} z+z8$xPFe;(D1GX&5#XoP6fEoXF*-Xv8z5wKAecNCNu-PbYk{mH|JM2H0ujbzYXKz- zHE0yCXxBKN8=DBa%XE@@5ggK4ABqZ1J}R?}o{3oLQ$mNV*kwUOWHpPF?#V$6R;f^q zD{(|uqLivna}=B?S#XK9@vFEnza~0}93WRd)4@&!+EC6;*pY6?fB|61Z0am(`UXB1 zf+AM(O;t@ROEs?MCoFgQM4KYEn%R&9RH&`K%WS&Fbt#LrQ3A ztipFd%8A$>Y>DKlaX4;$RZ&$@J@(ats@la}F%^Z|hG3Caz$C|1aoc3L{LXM!R(E&Q zm2RHs8kv;$V5l256bx-K<~ociu&t6#w+Ls0fbf{FQd!d`r#PO`E*3&yUnivUDfH(B zf)Obx4Y?NRFq1#tkE1>5M>HK55JP0813RzkDkI$dh@x#sLMT}&Qb(?b9Yqn65N~0R zRiZ2AY(#f=6byPTC%qU086Xw1gSG_3Uy!NJN{h-nsO!YVXCdXL=9(f7nU>(X zt3?(}0x^nMZt~#ZVE-wSLWJKHv*Pz*LKX>5YtE9~Qo}rWxhZAvge3#9p}M4H6XQJV z&%SgY@*85U`1W`k5A`-@yUE0XcqANKXauJhwNUy58!Hs%z*?a)&J%a~>cD3cVV>!BT?W6_=jCSnhP1n}AH47v$yk z%Y#lfN+umAp&EDuv~>BJrv!>^kd^qpf?mnt$(f4OuE<+H2`OHtrOACjG5|HSjL~$m z7kml6jnVGR9H1zP;P?uwT*Mp%Rs!KAg-qHu@Cm8(u(VR-_AIrfSdmFMn+j8jQF(b6 z$i*XSLK<$4&#sakZpwgipA_f0M`_2XSbvU-79?Mu>3CTR{3dsm^abfz&}M5$Frpz= zd^mNA?=qW{({7=u24HwdnxL;zOapi(jMl{ScKF$Wg9ZS50>S&kautGWLb8y7o&_3S ztI8AcyFx3gpjp8RTCoh@-4~MW%w8>G01I%eM(zP15gd^_dRleF4pI%y5UG<8i8=Lc zb+Up(B#YFyGTMZI1!Oz$4`1Fl`mG1!4Er3cJUJ`+Lq7i{-HBV?nGYa%hsx6U>p~KN(`EfQF(DJJDAIyJX2?7s)+{fG7a`5P z3hGFaio?h-pELUeA- z##2=F&{b3z8(zPlF3fo;a7->hQEf|u=&;Xen6IdnXZtHL4=~xsBXK}3M#SX5stYyO zdteIAYbUH_eP$4xi`+gDBFx}bKW;esboOTYCVIGF5I4=Brj*HegPeLJnmM`C0sXq9 zbJGL?1+zlZjT?F@-eUt-7CN2~pqZZ_ZY6sd^Hmn_<7y1WEy?80@+?Ig=LEAZXYnf+ z{k-TXn8pvA*0jTW&4(8(3Bwvca#q~Vkyo;q^ej1?lE}ZB_iBw{SR#$!26sB*EN0{Y zNDK%g%(sZ|n)PA_6>&F=reO7k=NDU#9zFWtbL@KaDIX5Qgj3(X4R#b@dsvVK7}XBr zv$%v6P%ARQZc&BlVt6y!u{^K^*DptqblnAGiCMDjmTZnKPRixt0n02wNjQ%ZbzxiP zi5#90I+w0>18WVQcsq$06JNlzG8A9jQa+b-W4*QM8=O&QU9~JVL(_G~m~f`~35Ujz zax1eRm(N^wuJJIvZqL~nmc}7K`5}z#t@G@HKGj&$F)nKW=!$1EPQ7s4M>cLBgiM1s zZ$`rzDn%ko5B1B2lim~s16Twj;(-&Q4X+<+Un-<1Kb^4#&N#?xgN#8!&3YiFC+AaF zb;i0D$|7~WSM>Ge)%1LLwHNruqEZ(Tn7=+zQFRDO4q zIF$I)W^9 z(t9PFl2BKYX@JW^-qOMIK*AfFSnS7aVsfZehq~EBX~)K@DE+=6YP|J!FW~B*MsI&a ziK2zKwi!?$Ghd;S<7ie9pm~b!Q=DPn-(|Ay)8qYbc21Gm$Ul!xaoTMDr zo)R$8@eF04IM~k?ZSU)O@|8kFUt11mTTfaP3z}rtaMUREs7z8P& z8vUeri8bWy}^lTChAjq^_M3sanjym3Uv`c52vt_E|U@ zuud;9NgO_NFN}PQb_*Qm*Lv!7wQ~)TO+(5nzWmJ4#7RkqGPCFdImLyWQu4G1 zHiK%jFm4z(7(%1R;h$~tbl!TyO~TO%=KzT+KPpP_)=v3y$b*pblfyf&Hx>RB^T~iC zGD}5+N2nS*3;y}wppKX?9fL|Opppw3ODH=W{m40H;#kBD@mT!nyCLD50JpLW>pHoL z!eMk=1=T4!=L)wJM~ZCOe{bBYc`UjzNX-klXdvIFeXwk9Ip1c9JEE1T4?=-N&Wh9z zj4`DYFiB>-BC7igt4+cx=^n{E6+zj7!QoOEoZ=voPx1eW1Ym~>M&AS89!*A1Nm@@w zvjZNM1I`J9SrKc;5m$k)>w4GWj{;HdPA5M=G37-ebvqKeYsG49G=A|73ksTHNnclH zyVl>)mJOY|AIr@JP_EPH8(F-QLifc5(qOw#avHS`L?A zpgTPH&dTKnscKZjf}kX6b1<={FHkZ1$?%4UQ9_-2KWgX-rvqM{Ny+%F{$Kyk+1c~| zbN1a|>E_7373)t^k)jN+9qdiG2K5y3#`Pb#y`O_JuHJG#de_5Oa2!HLyq>~eFn>M0 zy<)9TUKj^tMy$!M{++^CFzTU%G^(ee1~^5s=gCc%xan=s8lOnxXQ{2p0RjL^O&S=f zNKxjq&&Kmz%>8P2_-2kPQ5;M^RNYMtpYTKZVbtjo$EX8>R~y4~dcgtk?;92x=S3~6 ztO_@=#R+mx1omM?ck(|0ZoLf?`Y z$3MVUMvUmygs~Sxa##djN@yun6ipSkUnRg9DA>ARM7XL%HAz-D079g|*&l{8rOV!x zUb0|{m*FcUPw++daYIdilgyo%evB*gWU!9&lJv-j{_KX9aJ=rEL%@Az3VqD+i_)tI2hV zM2wr$^Zz;urN#@GMjw@3HIQ}{Cq@%XT&M%MAq4QwZ&wuO5*-)2x8h9P01GFB-pfg7 zr7;;h=z1%T&lxZBcZHtQ*lIhMhNjE{>j4G^6ps3v%{&-)z*t`9IGzlz+{dY@sw;N+ zQF{Ji5BDG8xDa)*{+Y(3(p#*&)e(=q^#xs*M-N@E13%?%mP5?~%R}+TUGJ~hH zDbyz5zw?qoJJ#v(PaBYY~H*d@!ok2$AY+P$a(wppNx$eCG*XRG|#ful;z1aNu-|W8g zvll=8>&xvIKfQeUUAO@q_o2Iozx_ZA?QZM9u5;6DZZW}AST$Ys7A`p#HG%S$*txP^ zPD-*%<(5Woit|OdZJ4vRrWI%kBTWh<-j?VuJiLz~uFg2Sy%;ctD z>dAO6^^3J*o%}xB89%ALJHCE%C2`?-FB-s0q*n0yBmk|9x3niDRqLRmht`=)TzA?A`hz)_HKP?Vf6CPIpY&lP+z_avmn1#=AYYvYBU-4kUa+({eS<1Gqu<|!O$ zxolv`QEHdXZ=qU=ZI-^Wi!(d{a+jht(YjNM%m}d3MnMy26h~D+NdrzbpbIjKMHzx0 z@kdlE2axD&yM)gTMx2!GTm6E z2>C!cJfdGFqn=PVy5gip9J4o7p%p1d?>T@6{$`5MEo7{?LlzQ_)0rV&^|Aw82k^H_ zLaG)^6n7B;b*3?{A#1h7yLurXnCKSKN{t8?QH%%o@ zo9tc`#w7&=FdC6*UKMDgKjT&Ncf#@JrJ}(+2T$Pf0C*}9{5uk_je18Aj@dss+kb)x z%>M4q0dv^#`|t?=@y`&MIKeevn(RdLvQixb%lLx3`yqg<6rzU${KMN;{&50@sQ9dY961(Zs8@%ZTIV6bz@Wm$vX z9wID^yTHF9mzb{GJKA#i%RnGSFXh|g?RpQ)cZ5CgB85Uw z$LFWW5efuqti%LN(%#jn?A9SZWhQTSi2u`;JYnlT9NlbBl+p~&iq7tewQwT-U>oN| z0_Y3?%KHXc(xu>4vf;MSy}^_RO_dZMIwwoO>Y` zlk{cNUeF~lp8K>?TiaN)jZkv#Oy>oN)_ipJ61HIy z+u^PzpTSugB+O9BbDkF+6hD&*!0%i0nGU=w0cY1!ja< zFB3T#Lm8mWq#7=?11pal;jCprBL^q}6Xs!RR3u5p<(r64dJ^hKZmfd>x)S zaCQ2vZIn~^)oFPYn86T@Uql3e>%V7FakgOqv6n0AzkX#5w?}M8TUMjY-#WcC_pYe0B~?{-`XpP&l$m z93D0; zsv5W|4YeF2JqJ)%un5fJ5=b~Y!j+|`GElmdF^jyod-V$5ZiFhumvCT3sWsexIz>L_ z#c&cFRPeuCGTMMzA8FWhQ|hYz)1V6g%1MP>=-Sp*=05Y_uEP#)_kItzLDR5RCty2J zqYTb~78C}>v9sMHgw9Sg8m_tivaeT#wS{&<)*^GnUn9a}fJco1DCs;m!n!<@<-$G2 zCqx4a*3H~pd+kXN3z^4q^uKAoc7(zUK9Pki)()b%{u4vdprT70`&yX7dPl_p)PK75`4D z!Td#W$p4BU>A{9H0@GLj?F6WW$%T^TBph zi^4uA$uxYFlO{BLc64~lG)w@m30|8<$0xYx7OmUh9~+k8{6h@9RgfEGiSAlxRoM&6 z04kCUBD~UgX=Nn+G)cE3?x{epwjZg(92S)g(ND8Ip@G)_L^2!}kgobH6J<=_2&Y=a zs4^ZD;YX~m0MDp6_FZQ(^n2k-(y0g#L#WWkug)c$(~1S`@eOce0HhIQ?ztV96LrpYvnB z5hHqJ7a)PGZJjOT`6%|D{sQ)jo1nmisP*s6Lzbi${Xy_V{tZpdzZT>$0HkTVRVD-6 z6xM91@pZH}<#q6jJ^EvB!)dhXD4r-*P_b}~>dkaMALASzU3>7T^j>V}GGA=S4S5l0 zcy52c*w_Ftod2QIzp=+|P48Mi|1OZiy%_Ua@bMdlE)S+StT?auuS zb=!iGtm}@#(b)Q#WkI>Q7X7M!;j>2x+l^jkMUf5|MZ6Hw3KUg{X%IITmnb7u+IY3ih|vMB;^>? z7$IC@Xjk9wwxz*(-6b%f42Yqjs5PHPpy^@-5UJ;SyHwGt{@xwp`G*y{O$QoVyZyaQ z_qV@Yq2u2R9W;=s3WrttT?B`1gYIuXT4A<;9vYgq*$N6fF1pHu6~ZyC8LCf)N{_t0 zGMZlPzNU=`!|S3zweUM2mv6NUAz|2l@87;qB`kFfljRjoUB9`)Rli&PkDhP;@weao z?juU#ZTw?%z?k+Y_+ruK#iceVzMo!c-Czp)@nn1kb#$vQvX$daab9lnipm$?F{`xk z4y1zDH?z0VuSH&AXE)K^nP^MSlfL~$gal_Ce_#d^B%P)Q(n-uT$2uMN0Bl~4U**rj zwy;z6_??Pt7yYI_x4(!AH_zVx0ypgqD-O!1nOH+enw+I$;hPb7=qaft%eL5*V~25$ zF_kPir>Jr1aTykJJ>Eb3viZdPtM1cyRsrgxb9MQ)hewAlZ#W9Y^a+6&IW!=6LB9+o z6FsRqXM7UGTzZD{fOeC(SmME#7P5^TjG{+A>+(4aJrfI(73CE`aUuH&G`}v!Rv#k< zmoRWXx<{rP(`lGnCf;jJ@Po`Q!Uk^3=oWJe&u8ueDA^Kn8P3H9tqCAz_5>b04F*+u zLS;&SCCSQ1S#igyQeiJ2GN z$dsqBL{}+lQtK+;2RE4zhxqd7^yuth=kee`vjH58-THnO;1ksPFt|V?c%j5W!s=H# zi{3VrPm@KumDnew@Ikbt-uTt0A}L@ZQfm#nc`+JaZQ()|0XEuwmJ$7Df9#=P%N9Bzi%bKPtfS?0ihJ!PUmCLlq9gU?H@~rSqksbj zpQFfH`UYW@>Fo_#T#o*&VL+9mI9?6&e&veZ@4JLc}TWb zDCoOnpK>e}miUB{NQ>qYwJVe3N02pcMrTtFUd}6VeRbloqC6(p4_g-926Mz_M{;;N zoSPx8vpg5;6jBqLO|R(NxV^Z!#fNxeW&1%=IkFG(ix|udgtq2=S$|s?4lxz7mv-Rq zdo`h@eSmbY*(yg!9I01Yh+xIx)vsnBUlNQ1x^E zJWixUT=}s79WY6=D>+f480)-flhQCnM1--BrDfRvd258!2{Zv zITHGAow6i?eiB$pxpN}+ux09Ym~ z&k1qIyzZ6(AdH%liXI3Kl$sd?BsTUdi?Uo7+n=yX>;B6{(rG#OGt!d1_t}^+SZLc7 zEjUh!OZDQaSG94xMm5`z~9f zT)5!lnPVx6`r@NZ=P(^8X&#yv_3U^cDFC*KB4sUCl{op<;T0D;*wDhsC!nXB^_93IO zt(v!e*)n?Bx;b)f&NT2*$}Fferjq0ugQ$3w^=54?<&I6G%nXi|ICC8Skt#(=IrM#R zMPOEytw!0v*ey{g{@8|3hMahXo*N0zkiN0MwK})_E(xKbhAZW{^|-yw=`GIU&2-~z zfz`^3h4)gm=OhB)4glc&a#gJa$tjNu2sW}S`)pHEJr4Sfkn$( zuvn|Eg9Wg^@E!c0UTHNr3X~2g+^)QXRfS()COS-kaO!e4p=IL8!Zv1o5VUPyr@ENyEwm^UVN_}Bzlr~F`@vL z$eb>veh2wa_mn-7tJ+8BgURLI)$RQCB4v9iy;&{ihtA)AKW!yk{@D zHs#c{?dm_n6#`O}Bz=uL8{skM$&cVi)RY`_D6vqD7V~Okq*S4ri8Q>R^Oy}$oQcUv z?fUz#o<5W#zzHIzd!Y>ee1CE6j-TKIU}x!qZ#MqM@nton--VyXAgDK++ zyWAEE&5ON;L{L2hw}pnUTfVTARm5*01ZGGijrR)$`Gt4@*vO)OfPI#h+9XXUodgfg zuBNX=1iwbpF}K}1#&on6Q34$wg_1 z^X2EcTQWn+$N)t9it3_GIKIwdegvHuJ0F2=TZ)O5`9 zDs$Q@PINBpAKMan(&MY)^!LF8LPTb*{~v&kQ0Qcl zF}=FIo*;0i0aJi0pzp4{AnUZ2+Ay%BW>Z0(yfM|0Foj&$2B%iABoiTB1o4RH*4kmp_sfWkUKmHV<$WVOL; zm6b|=nf?%kO@l@2G7Oor$%%~CJ5QUKj~>G`lqH0{i&KldpBjNVpPJod1eEs?JSp!uP1^fcet^AUTypsT12I`4?{eF=F^)9s>-LnT%a}1px zf;T;+;^Z(jQcUDA3%OGhyPHH}QijS=ikF3hUXL2o=@clUexM^2paHmGg4StZl!1%l zkS}h)qrwK8anNcJoky-`4O2KCp}rGy@Gwt2$n44h!Nb$qx%QR0j52I? z({EulX{Pam9ItlO>+=A%e;OJXk?Ar6tqM9~)=11MT|_y%SKlzPYqAsTdgh_Gk( z?;jG9X?LAASx1xWdH0ZmedZxbi^eM35)f)$9@k+4*D~&*G-7H;-bAbJ;T%LAF{))l zUBsy+0#sbzXyrIhmcwsWpZQKrElL0rr;EL|5#wuu)9F4UXjjxtY{(GIQdTF+Qavb0 z-yqq2uq^YRMY{Q$jrMTOi8LxAJ5yoTkM(SZ>$mA1X1enyxkXm!o!IIuD<~m5e33`KOwxyVPJDbOqN+GEoG~ zK@J*UKFVQQ3-%Uu2UiMiSkvGpvi2dS@hd04X&(FliB$KJ)He8L=RlydWAE&d+dqMv%4~`z+jR2M~+2|hmMsL%ILfq?z;edf1%8rLup=6qb`hX=`kfa;3 z%Y*+=t1@nKL-GIO$H6$%-IK6L%5Wg1aFYW=usFa@W9G{+jH8>tT zIg$&m^ugiLxAOZwnJ??2W8RXOKbii>Kj&|uNBz{>+W5mC{;*L$AqE_qTn>Q*z$)lB z^Bxiu$5P9p$CMMl?Q86=tnd9`ANv#7H+yz!>>hUa^vnt<++`P+;2_473&Rkp%kaBs zIk04Ovv!f2m#SA`)oor{M51u!W9ja9P{tD%>Fk`GVBs==wx<%Rh9mv2`V5gsn||Rq zqRCMV$vE>lFHc3@+}2NXjwY^2#`jOC*sCFwRlIRntcJldLpTBB^~e767F-tmQ6QB%JxP zH!MaA#z#fDI|tLN<`T=#UGTO+5|VAqSb05|(yy)ZEO|)oa5@?MG`hIGVGipq>hIix zT0|CcJlOdYc?B+EJjFGy1O9zHIDK|}$iGg%IzIZAe+>Tj{;6zjlZ)RUJ6@<~w7Ar5 zr`OUq($zT~M~l^aYsL0TPFD5VYK}FIENI%`xRNs1@Ym{rL3avn z&;qA1pRlO!<6;rzS#Y|I-9d1U?0bv}gBcrbtN>-_%HVGnpkh^<#b2P84$g1eon)wP zkD{%B>|O=Cfj*bpHHZEx!^*d9xzE$J zBnH)`%W0c%4JwDjg<5b-!qZjYG#Ucg)j(SgK)X8yB3HrqWU#mM?BG;zk|8YU56(2F zt~tOR^Dj>oTt1d%Ql;T1HD=AcZJDIEtz zu`RR%xoHB(5$H^QL6nL`79 z(f{s4DFo+Hp29Z7vw1Sbw#r@KJQBeSoGo>wP4>y1beoRoR)rLJBJ9}&p52Sr6!1>@ ziOb-cxinf*{69|}Ye%DP{cWPNAh)35X9B2JQ@zQI+FKG&UQL+49ErefeaSS zk2Q5x#}S^9O>=YX$~u$&q&NQwd}>^aG!4w&CLK?j2m|IJ0oPD9MRpmEqh#~!+=qOx zW9N?D#B=;Y;p82vt)g2gTa+Y@Wf|xjR57jfg3XinX%F)3R((lpjuRXOVCNP4Ao`CruJm;h{$BqJ)aFPzL!g?l+somFU!G*kU^e; zi6<}1Y*3SDg=K*qqwprjWSLojn}4RgSX;b)N=B%UDR#_#Gn^cF?*Fsfl1o za(Z_g0^+vr{$&5~ba1@4vpdi{qK2WAGlP8R{;o%W7s&su8!|q*KqgxKK2dQ_%wO!B z!&x-EU{FP{R3 ze?!#NY1Tykc6>0LU4RbDbg_?npBS-S*wxy;$mK~f(aJs2;mzymW$G9Q6LTVTuVOj0 zNPcBNN@e_KpZVt&-Vl*M12-~${y06}**}GKYhOj*1q5Z+_K0Zv7D=V!iOjHLd+6W3 zohhRc(oj;Q=yqCCUZLuGM6g&1#r!i|rhYY?;d=Y&gdZd&ELbv|zOkdOLa%q7z8=nZ z&8|q@5j+tbB7IF4PCfmdTVWgf-;8ldJ@Q6Ti^>X8T*@YaS)nYF?uXnQ-n8=5W>GbB zn{uxVNzfHHXYqa{dQSqKu+0%XnNc5iMb^U+L%eWbPQQ1)^nV*?@XqhkELYsbcT}8O-A{(a7Vrz z;R@jq94rQboCQjAWD?BJ@E(X0uAMM8Mn$CXQCUA}DT{n0lG-5H$az}(&wJs>AbdZD zt;ITGvVe&mmlEh(shdAS+eT>2@Iy_?fiF;o?0=w@P2xdzwQkd7EQ^O!;7}okf^|)( zy0anuF*8scn4l)zoH-6vTwTGH$tdIuxvAspQBRsn#ehy$7J-84?y-PCNCI9gbKemY z(=53FRL1bE+tYie$4~TXQ#J^HAd*Oqmu#%PL9Y3s$LT;+9%u;HJwj()zBh(Oy=T7^a;s(W@{h zHG;fjaBEanPM`tF2Lk8?@WRk1n!_{$jnK%_=Y>MFus5A*qceFN1jAO`GueBOrt}tN zuOm3rwJqOjcpwoUdJ$=&=i)X4uv+>~Z&&L&=g^UlJG#SwdT8bv&Il+*pfncI05szb zw5pl%=7@8gvw}TBt_%GX#X3p8qh^&C;R~5pIRlrS^I9}yW4KtN4a#t$rIou$hsHR4 z=_^k*%DIrNW|@Ofevqb>MEb z55C@m!)ISV9%OgyENJmWTZEzx%{8`9|5GUX{Vi1Tj~c3JT7YJlTJRh_>VKf>N(DY} zAQq)~qf0HvN2d0O{Ax}T=mX-VmkKwyyIJrOE(hT#P?WFSBl_g>=v|;sP;%EtpJ+n3 z6Rh3nQ){s<`mnE7^oaw#d-RFe(?A>|&-y0*eQU>0rcgge|9K1lx-;zCHRC0eTxPNy z9pV_yAyNPicXyti44#C8#3q zoN}0}0-HG2^*zLrdWbo6U|xCe0q>xPGi<0IpK`WrVf+Pe83J<*hcsEuBp4UIeyffn zaYe_@Qux>x>PaC3jr&%oEL1G)F<&CCKZ$G9jye}N=BoT*bqM4)Q}_$AUO~AVxQ2`H zkAgK>#G-Fy-#`CYZ^D*V-gx%veFSX2!F9}&m11t#OW7EjbpjW;)(e@@n9%*ovME>PK{TDCgUpaaE;s^Qr zC;9hW{$&nU|HZBR%Tt@#Hf7V1Z5p9`E+%I?)qG zE+koIJB2#Qbl-&f3$l4Q4%Kpz4<<%+R!*cUE^WM+ZG705eD$^~B?W?7>`I1VI;SV#Zd+PQryicGeF40{w zwf#lJ1yzc0|1cvy!<*@Bo^3zTD1<){^~m(Nq`W8-pi2f?7ILv)Pj9bS{#YDhAz@9^ zu-B7NUk&Gh0BkKP>VlTl!lo;d$!%4Ym;22RjNBtfrEY&o;R{_snFqp;C!Qq?8mjI1 z{jbiIRAa)Xxvr{MS>G)E_VxH?MAve6V%d^$nT(khVWJbxK=TnYLeG`c&m`qBncl=qiFed$D( zNY-lskdrWPc)N+W^4pUgd|OM7cWqU84QKy9dvD(##gU|o{y(3hm!la88}Q4VbI-Zh zW>yGcv?C-|683t*quWRg^jfHOx+NRN>+gP_Ctflmv#PqQg=FL1ncr`Wx+*g(Gu|UI zGIDg(Oki7O-t2Q&#E})0R)%4GX&R z3ct=TitGqhkr!Y6)V2Yu>Z@iL%_|?MgD&CMH<1C=U^;Z&Z~UVz6_2tBio`OTZ%`G& zv-L|f&nP^77yo)-{i%E<8fK9M!7R2vPyS5Y95^Mn2*FcZkMR;+mTcN-;4YhXdaOZd z%sfxtw z2;p#{Tyus$_u|?T&RX%(5eg|ZcPfJK`*$s& z21F^+jVob_pwyPeZLx-BEP#x|#RL#^e*}QKxH40fO#%pp<~N`(%oh*D$ne(_uagHK zBg+LT$VH@>jH`o}+;EcMJ}dw5j_h6^5K9|DwovG$*N2W?kB)wjkOeL7u%1F>c#whb zt7(CF1S%{q=XEr)_aRU!zp><4wD;x+uRJy;qN%2xqARQ}ll+$r$)$M7Eto>2l1qd_ z0#+af*Fk~h0(OBw?&45BPxgGG9EBDTPHaeO;tPa?3FqK3lLXu~Awfw1;MP=)gn zBz!SY8_GFQGFw_?al54dutRzS%Pp(||s*~T>y=juA!cX85aNW8$ zI>u@^|7AQJ1p_-ZM{o0REY{OcIBE1j1b&D)cFWA%9&&$)9|7;Kj-C^oIdQahLlVXmMw9d1`DpuL-rXvG<|ug6rwUhgMmhb42u4Vz9FL@f+^l zxh$96Hi&*fVr-UL!!;W@YGdUd3%2+`cfSK0O4UnaL3Hfs&a4Q*Q58gn&H#tCs_M*Gxo#QQ zD>l_S>ePREe8gJVT1K$AitIkybxHhw0Bz2nt7C`8Wx`a^Po-s{yGq?7cFG&)aZ3_w z=2F%WgeV~lld#Yge`!1L$*$Z`ts{Gm;P{u|T9Q^~Q7^iJS}Q}m{7Llw`>?DD+e-#{ zvTD}>?4myr`2cX*dlmtyYxcu{Y0aB?Up|{MGe0m*+VWl4Hi*pImX!|@&r6u#nUF@ziD74Fxu*J?`|MEXEbeLwFO#o06vS> zv`UAhYm=H38TISYT`!6YYxUFWg>>vV_S}QqB1@-;tZwtRAZdwsXQOExZZtWOb3)W3 zIS66SWs?$$v-_S#m04Nl-4X#i*xY}DvX~tP!aU(-kZ4UXuvyOQZnDw*pAXXm+Esf~ zWcfclpwlvGxU|?cewE~2Fb!#-3IwCQYsXdNsl`lA{ts%fT!Qeq8!)H0AiI+Ug6Rk4;?|Yn5j+^unjq>MJChCM+&89W+ak z)1&2Zy>dGNA)5;lv%5qxbkjtL;yHb&umu8WK|GR6M(y@SbIjMZqFLuXqvWC7>L`Dho#en>rpJSO&Rkm^nT{H7{h&<#{iC z3P*VX3gePkHlYkS*H7+&7Vx%gE1BcrANK@i?sZP|G?gEvkJlWW@ zR-EDMIki+Fw+qtME&Nc$_z+7i%hGRZ#~h8JLlvPdDfB-`Z5>^9#yonw-4I*cuw1npne^_n1$;Gz81 zxN7(sm0dqbR>gT_f4dEy_BUmX1hsbc48373TZK zaiJoAIZ2@kZj;8hh)W3c6H02TH`(+S{eO6R6~udGDHF zl1Wx&)(F)XgrkfbXsx|#0fE3L?CuOA<3>nH)|tbRkV*nAP65JEkdsD|y^p|_VV|09 z=^W;^NU#i_baWJ;EV7MqMs6i4yyg%yG&SNYlg#SPETz|>e5wp_jcVBBYPK2{j^;W>ndFV92* z9k&|QOv7y;+DhGFA&XQw1XS#e4+XhH&0a3JvKcgvAh4k(g)ss5Ura?;T3nAA7?@2t zSn^gfr86ZwgPx>gyN;`V<1N5jI~&_iAIPC;`}1&jXTz=v{@15l zd-2coYG)HS2Md*6TL?h7)QpzE#-8tbCDl%|t6TZEU;}WZEmbQHImX1>a)4Y`oa!$m{iIz!YMc}fwZn)(8Gd(3d$YmA& z*eo3E)6(fuKrOM==<*cmV(S#;qnW6&50O>eYpD`;{8m(hZy~qHonkkoLJ>Y-RZPgN z4O^yaooyn5wWCN=d}- zWX%UHx$Vxq;1;9o2_BCp7qiB$m(NhF(aPs-WInpgVup#{?R1y%Z1RB}T#R)K52~h5C2e9J)mL zEgne(>LSYLH+xckLdxYRztMdz<#!?RS0Vh%hSdApU$DWhdAqaqR?qh8SMPP7XsiVX zT7q}@Ti+;}szxNm?zd}=n3aPPz;>z7Gn9XZZHwa1^`k6n@CK|V*FPs#!m~w+%Dy1y z$vyd$nxjQW>4s~X>(N9ay81g`%x)S={j^Z$O8hIn+{ivwXGqx%o$AE9ET&_2$yyHI z$nrvhy{6;@Ch3*TOLP(Az})i8foGRpsWD?bt)qy>u=rFMtZ(|L3XyzwD*QkJ?wmck z7;6Ham+<5WAV_tQ9UJkV%50TZ1Wzg1*W4NQ1gy zhi>x?cHIbI3*S=Ltw6^iIj3d6JcqW$XHD4kZVC0IlN8xrIDJ1u#x0FTMj%YhR3C#A zrV-R^)fT?WEY5x*fNiYLEoGm%5;lwCw5aNbe7<{1l3z<4U2vOzs;p8hMKc6WVN2b= zAXCsOHJo-Gtfq(7J*#rs&TKNc^e?xO_&v8uY<3kaG;81QjgC&og~O@SpJP9(dmw4$dWSp+$h)@t(SYy{7H&ywp}B$ksj zq*jVOU5UtwDQlJJphyMsmlPWuB*CAg%z%yWfENO?OYoE^6mDqBh9E(FV-1vcMdGPV z@ZheMjw{yv?uiB0u*|!&*@w9PE48mSe54t8yD$C&p-_*-^bHQx7uNYHtU8R-T_zQ= z&intexgjCXz4e3LJ&`qa|7*DHypRW|@)^d7&8Y9~VLX@Z@}2$PmB2 zFyBHK)t=gpdAB}5(>z%Oh_F4u>=s7Uqp2~shN&E6(m>rrXgtN~D0>yFmFco@Je_RI zaPoqq>7J^TellLtc$_m>NUOpuvStVqY7QZ`?!pm#4z03k&Wz}m2C%kH3#vd!-k5=m zVpr~kC#mGD)TGd5)Pe#X&G-`CkV0}22(vTwHe?NEKz9i@A%oWQ1Arb`Lyu@`Vax}L zR9nW5O{tmTlJ6JW!IK~@Nwr1iL?o0ror?oStfN4FNuGycAV0V&1n7uY2LE-|NLc28 zau@h15MV@cs041IrtsSj%UyTeM^e?VEY9Q1-B6+ndMh;}uj-9zB7K z<2ifT?KY))xhtNr>-q*YV8%0?f<+W3I1TnxAAvb1zMm7@rH5#M``RH6m`4{|6a!s(y~V@7FycyT)ZzZau5?R@xVG<`MV zrnavG5-v>(f9DC{hkqJLgu=vC+4pO)N0J)ImI!?rB^^(ubHCH_|p$7JDqBy81F`9C&@t{ad^r1aJv50To-#Ykq z3kAg1cOEn*$xpTtKruq#(IvhcSotQQp1u=SMa5ggqvLCxJW_n8!~&PsM&8Bh0(=|` z(HI@i_C_y9;GH7~8wYeoME3`C>pt#CvY5JdrEmP{MzVCTdPjQw&Dk<~yw9d|1mRr! zd*sm?m)%fqT3pd0Xc378OqcY@BmfS{m8>Z$f)u5bE6B3UDL$k*zrkI3uf=JI+$5#` z(33LcEkxI3CbY!UL@!}?_oJd~+YKyyBvKbt@b7RF{Cap!?B+|eT&7Hzf-M(oEnqhD z0nDcB$!m5eHLW)*!PF*I^)&^e5pf{lp1jr)8d!qY8f*J)SWTx<(#~~rTB50|V>I*1 zLe^t8Z=y_2O0ibtYP?1p%GGDx^2zqoeW4qPc0&pmvE{f|(p8zLWjCUjqeZ|A#lN?C z@N{pdslclpW!Fn6Uf`x&FYD?2L(W>&uUkagDG70fbwPM4b{ysaOHCu4PD zlefVV$lPmP&$mQ06Js0i_Tek-Z64m=Ti^KW=0WrIqusrO!}Yzr_3z?4yRRM3cfXC# zH+HvocjAL+Y!+8wh*v7bEyLrD_5IDh0_vl63FLrwVI0Nx@D$mR{PO&o)c12u&FV2O>#}FuFHAOd41Pp#+Na;{5iykAc=AS zgI;GV(EH1)GI=|>t^W;e{@*}cDGgqy*?;}XwmmmpG_&E!l%~@8yY1nN(aBY8tZ+jG zqPNab=+1F~A^T(xcb@GX$YrkE>-RUeulxKV_Bl>utELph>BOyAwne@yWvxewicbT~E)Wd9XiQ6#<1G_Khq?J%C4@X+H zn_mHx^L5i=c<5Hua^^;aQ&wvpV{O_hIgo5Ub0^(E`F-v7?)$w<$WhUfj|=Xq_B|zR z9K9N&Nb!`_!+pnOBJ`CPypDU@wE7sVhTJRHOUdqusU#$fkxIXT8Xa3?Zzef`* zhnyxgaUvSq(%-U_1dPbVaUxik#cGRVdOl)$UCOPEqD*vAC7Yx1r1$uIHadB^tbDhH zfVu6I#qwf4rNa;c8^|h);IWQqp zY!NL<(3dhjnA8Yh;?>cmkppG$J3+;>~q~M3D6W%Tw~#W*gW;1P48#1Y-^p9Z+oxDtAaeRih&x^ zNRE+E`vB=uKTW2`11Y!R`mwtZ3e{wJxZIXeig%yslETuCMM9~*&*75=?o-(O`<ym*?P*Rt1pY;24AiQ^eYG_xr?cdT_}7KcPraeTOQ$<-7}SR7_8phi2OM@C2ZU7 z8O^d#*tX@4=zOO4bJ)7gt6!W^PVFOU>cX!FhZ(5JUm|o@Mt%=UmKiI>7{+XOR=*G< z*0X+s0C+W0SvXst?c<#1=_}MPvso136`Z;C=QnTKcv)TuWYmIsq0y6>Q)IBV`ql06 zMZsiv?>&z9krmDT4OB!dB1)vPw1<)P%iK*2(L{1tbp|KHDFG#I+Z2tRjg}5Eyx@aF zUVg!#P)qYd7A6^u4jt`V_dh-iBTgfw`xgk%y*#-<=@&U-CYJr;TI{`Z&{sG1TT{{R z^ESn8xQyKUw?zJ>qO0x)(o!sV&cxbousV$fHy5qA8Ts^g?d|h5Hk6Z1Ip z*!ZGU>CAJC$6ixA6)6xj_vEBr=NHM31B3I$|Xme;@(?n&bIME9L6LYggDqzqlwzJl&}w(L4* zm{eUHLSY8!LV*meVp*i0>!U<5(M+uxJ$9}tFkYe~rT`Svb=+t3N<&gvg0@JJrXVVe zOL4fO6HH&z9k?_V`J(aJTpuiRuFO2(Vx9=2o7p11vSC^TUIX5_l*%AYa~4}iMyB(r zftxE}doWA~(sML7sE?=?_@;ORru*`Uk{%qUrwT&gcn@;1Q_5|F8Y zJW87*tj$QL%NlQ+^qqFtNK|!ht=1&DToe(F@e8wOO^hd;-0VdeJ?Qaj0A9@$eEGg$ zZ;aRq6C|xJXNIq^5ya5=z=G%CEsRn zK0ZGgeRbpCDS$U7xC?h3KE^wo9=~z#4+H$~OVGpV@o;)F z8TiNV*i5B$nqJy5dO4Y3gK;>8R(Ub}`^`W6EE7@NaPZ~m%{{(EdJf-y`3Zi1@rPfe z3CHvK%GjT9DjhT1(qjvE2b#fygVMv(!NnFFAwoqA`ej!Hql>aMO#pLul(5gAhZG1n%c` zMLc*R?2J@Zu-#}lJ$W|}qu?QR7C7aHy2G8p4oc{O^+n=A1g4Sj_vAvtk=Vl?-NCHG zhyQ?y{L}5*18gTzU=C)JH~0^;9Z^_)I(ah~o}9pblkGK%m9rD>6yCng1#n%6Ouzi< z#@9@`8z0?C)@S-_1O3;huf)W$9o!qAEb7b@NdUt~lMKxJv*Y!XlQ+ZDuI^BYcOHyq z_}=8F{nx0y!%?6kyV{H2D;uAw+rjXK<}1~Go@}n~-Pt&SJvEx?zYlVfbbDjuElejT z*m%U9I~P-SvnPm74EdzBn=g4*0C2x&A7S(dqnATi`uO{z{TpH7k_}-tg+RHU)c*gy z82>%ZWp?N5lgW$WiO-U)jef+`hZsBsTMquur-P%{LsUFMs`V>mUA>v)>x+?*`INX4#EZc>n>GOT_AZE`gP@c=< z+4BdZ7Zm8(Kp{7jYI~{p6^|tmg$>Odh!Jt3E z`#L-tddMtYJ{m{Jk z@d|R@peC5L8xMzo3eB<~CqGb~lEfqV+`^K^=SN)KPs7>ZS(-Dho7HvMbNzv*`eA#D zd3}EaEBC{Z^A>^KsL}A~HG(`g1ilA&ixiMWLMdR8*oJs@_-1&1^m^^aCx5&1@$)qb zl)>7wPjCOf-+z4b`OUj)cRs$k^2rSV!Fmf0Ud;>x7Bj{$vkXN!^CBNW7&L8_G2ZFL zf@7EhfsAj5Q>t7m*{yr29P-)c-(wqvX_>QUp8*`Jo4DFwiYNl^M>!!$Gmc^Idl4Q? zI}mc#M%rCcG?CDeIog)ax}0b-X`+rVEQ1e5mT2e_#1N5^(wE5Ky0r;u$k1a4oEZWK z`${9dYMFoDzD;5y&y^eGd>8lb^!grT$e?v9^jsddlA)zfxaqan=gmi_vRBRs08CI? z>_}pPerC>k>6Q;AdPG^YWWbS&08PU3g>48Q_t=FjSY^q52^&gDI^vh1ha1q4h zw4IBE!OeV79u-5@!yQzA%Bl#GL!QsORz>|=E2IflQ6}{g3Of8JS#ydyF!eU3iseSPJbL70~n$H$|~|E_rBTOBe5NRy?G%2 zKH1&ZKlV_FaMS+Y-`wBd+TD=`n>*jgzZ<)|f8E-YKOb&wZ!+_1_3Q23`|I2C=j-$H zvqR{PGtj{3@bzejkO!MQIyiW8xVQf8AwP7;urr@xj)!8~LpS0#rY-vY)K#Oc96F?0 zO;%PEIZE496Dufd3)f9!(mtOTA9(n6h4C@q2nXS@gqHgf*9ri@5x+Y^-P*+D7S z{Vgr$g!O!rNH~GfXKr*0ik(cy2qg_qLgU<3Nkfm*z$!{ZqDa1I$N$Mzd5yXrxm#o9C$;1Nw$*YqlrPu^gesO$=}azjWf5?y=i@QL zx))R26nuP%MVa-u<{!u8T(Dtv&?)j^4SRA!FfUNI!P@8skfF#diN+pwP|O^$krIX$ ziH?@Mp}wLc9aHzypEK&y?(Z{67Pl>L?mb-B>y!`n z*0&Dy5Sz?2jcr*kG8F?{V5S60&w%RWrPT66W~4xGm*XZ|IN-V!8)wFb)O~M40 zrOsEL4$bGTNfJpnHIGPUO3x?yS^Xq5K-3I!W{fV42~||lz>T>Q!OvSnO+o53rnX(T zRtUtbvv@R|JxyCrL4annDan>O%cO#L1q*S1#t_fNk=zK>4q8G#!Q+p}DG@SigT+#C zu(SEl0|^fc6=ej8Ze#6C7J{U=NLx{QS!5n4omT6=gq3g!I?zvl1EqK=Tfx65%+fFv zTGw@Xd%-`}AoKZlLR#W{gP~i>0Xky6^}Oh*kFcwp7BGytlpnkcmMz9Z?1`G_jmWV4!*-ihDgxS(d)_J#`E*%=O2Ca(E#W1 z_YMXYSsEPd{&jO_>)+wU5AgEF9S*j+yDb5Z6z)|~Le&SC4C(a};=#=1#&w+`Uve)M zf(OS}z13~(?n^6+Ci!YsKly0&CS3s*f92*ky1B{YZCJ2^BeIn~L!-8F@V>$OLH@ZA zU>RNi9GpGwt*r7{d6dr&%%O!Gt6>Wq?~14Wya~)3jH35&BCa}<(F{~t6_ks^C1#jR zax-Ny8cJinW-t7q7MRE}j1yv%cke=S@_Lhplj*MPc_Esh&;-ab&Nr~VgMxJND<|VB?7iao}t~cw;iR1_HO8>ApIQhr#2D(TsWeC3CDnXit(-Z z+(VTHF)wmlrM1Oi6^1e5e2MtlRs($M#yU44&rU#8h?z`I$Rxt5uPllbLF1ulvKfF(l=0=(YBGW3b7C=o_-Su`dL{?9}%!+Smcxme^|UueNL2`@AnMiu?2 z^i}GLgLMt~J5!sIlkj{{hTlu!q(mDgNwemoQPoPQNn8g)Zhk`~HmU*=7EXUxj)WGq zu(SwC>Z((M^s)gm%g~0~#LZegEI8YUH82weo&uZf%|-kI*iM;DgZ<3F27r3D371eA zakPc%LUBuJsxk&g)#r;@&vxO_&m<=0lkHVyoc;(HRb8Um;jNVr{|_5?HH>2ou7v4*b3$0E8B+kF`j*jYio6k z2nE=kY)C0={79&^S!gTPwA=UsW6zQIchnmc-u&zF-r^}wFbqH!;cNRTXQCv&7nCH&5eArJ;V?yXLZ_{k%)*3mp3%ep}c8w zlC=_h;EbiA;Z?mNgNqs-kkN{l;PCKS;zzj3nu`iRK9HRJSX-5N9VF1| z-vEY<{Xf5RL54s~by5P!MX=%1{)Y5+ljq{+(Fw0G|&oajUbt9R@pcUCbh zzlqcsW~U-(m=mU|=TQ2Ev`BuMhoCA^;Ey?N;|>Xltl|NOMlSNc7s8WMi*!ZP6f7>G zOJQ?4UA7HRikT~jqi0+vu`4-Yc#ad0Sf5(=0|?+WZg_6Beq?-fah;m_!N5^QB~0k{ zgzU}xdz?@0Ot*Fq*wE@SZ-jBFGFR4j-prYYEN3TVUK zktgbIYg93lz+KE+9MyTwW*Ro)*{%-$H$c6;90Ie&#MiXR=&pJjkFP3p^D<2)1gpWx zS4;@~@$ul#r2T%xoauE=g(<)8_kGrs&8tMFqKvdA8XOm@IYj9gEBN3WvxV!CiBT^ zsi+JbKY#j*O4$DaOImQ@f+TImHOF23AD@VcW2r{}KAKLl?I26CLDJ}-YLq39z4{p} zCi@9|lp{HG&_E261Gl2wnwBZiBF@&AjpgQ-_{WE{*W;JsNrYj5etmg1Iiqt>zLMD& zvjME#RVZ7-dLz;dkN|*FMKNaCiuuKqmq}FSJ~EEJH~+r|e1ax%^)oF@lvdbCL(Q9= znqJj%ZE8V1Z|^*X2vviqZ55&E18u5hk;=B8dmmBGNCTQ18kw745~1n8U`?z3uP(%Iv%9##e|4YLYs1 zAuvSIMhu4moMw>F1lb4@z+HfVyp%eYqmGcbc*W4t9NdQHfDSi$swp5jM957D8w6_PmZ78U{oJ}W8CLA!s@{OJ*SR2v$tUx z$)Px|3a2CXPI~5hOuFTLn6i))T4i~X$HteIBaC7a;UhH(ExUwdzRhEd^pU_A=3qEa zEtE?c!55--A|8!%Mer9;5Ff;AhBQ&jiksF|3Z*%HNBt4} zu?3;hh}1doe1Fok6*zg`_9GJyj!uYL zSg7h^iW(}=bFGLW9}8lteV?~^>;0M#)VXeMEShOroe(GAxZ|a(c_(D{*2=%EysJ(9 zcb8qpyS{W*E+cm{GefPmIqT?UJ?dh|B~KaZa4iRP6mI2A7jo$CO+{Gwt_ies5xP(z z7qrPCtS7vPte~rXr17E+q^8`5r#3~It>FN!NM-y7?MuE%X(I{@V*Yayuv|_OH!kgV zl7{%ilMb+V8(InKk>ezx0J4#xOKz{0m`HePv&>XuNQ8+D zVHu1a1E`TI@{11cyl-{8M;gt_xB+E!O*jqW{!!7e6%@Z0_eo4(Y@|wMq0zMM)K3Qz z5*9P5kx2l?9%E*(2PqvW^uM?pb*1!E3^vCrAc1GNw>pBEltr}GR`&Y-lg+*Lod=K> zRj|t{d-O6DqH=AChP8&8OxYo5#-grwJ@7>N6qk=BYGhqXpCVm1&@NWAI7%BkAn1|Q zwcK(YMIF9GO)ttjXN`p*;+&D>!i}sV($-C}lO%Ir6yEQr{nB5f}&~3|X zO_{2*=i*;7JvKdSKkd6=$*@`{?q70ZYZ?HvwzaKDjf-75!kBXb;lOM?6fsK^nk938n21?=H5==TgtMew5_y`+v(wb` zc%#Yl(n$WKKHl3rc)GWvJ@s!s-PqkZz+R|mg#1hN_oKbtZ?*XW{}i`7%1 z;47YyFEg?q@^xD-zKp;4B%{;+mhXy15k~2@kbal&akTe=1I&E4B4OX{vsjvLfw;lH zMzl5!I-{B93xd5#F#JraKdgB|sC|4P^(-9vV(N4Wc{NYUT(={xTP>yhn`SbpB0i5bSH>NxmgC1yUCgIoSsh?Y;qQT3;?P(IZ( z7k{i|$LDkcxn1CIoI&_*{L-IpNi}WetN9a}Rcv!S@h1;<`TM8WEFMna14g1m_!O~u ze+CnVPf&u&pL`>A7O?g_ItfHZS8v-}8b|OAdCwmo>^+s%qUHSILljY#r#zhK4|kq! zZ%c3ZtN!fZ(Uw$OCYmN`#l(@;5MT3#;&g;v3J!GBUp4~deEYM%ZTc&G{fobDAz!|K z=I^EZ{=Ys&Env?<;`{IYz4mW5_=`8#+S%UP**ruYVJSe3J0=uCRgGm1`mw)zvi(%x zf=H@1mLw83L0Y#xdAfbD^<-N}_mAn}?t`b+6$yLV@WIwMTMq;qfAdG%yI*f@tZyIU z&2Oi!W3A zeIbQ=spY;*LJl z?d_bBwNK6Mu{Hmvv{XzP-^{DU4u$uzS0DiBUZ9-cNiP#Pi}vAZYKdWrA#SHPLYVo} zAEy^2;r#rg^!)MDfX7eLV^C>s{m1n9@$Q5C_~XPMTRR(E$?e1+IPS&=NVzqtxAazd zn0Tgmn4X66TWro$SLK}Cywp&-Z&ho;)#t0)5&vSC8~Wo0{w{kLdA(VY`rIipxe}Wm zW+T7i&#abR{|(wt_-dR;_SA}lzW+G8jN7346t&A|ml0$ON0;%u*q}rqjkiJ%+oRK0 zaupKtd!cyk?i)R5e9r6NmG{>u)|G>O%-|Lsg z{B4Jm*&2QIBhRqWf8`s(`~qjH_yYU0LMcAEAhArFqoZtSFoQ}cB=21gF$Jo!Qv&zr0BsolYvei$1{#e{Dbyj9LgYnKhUzZ|GkHZSC%4x~qDWIKc1v79$J zenjBd8@AP_wst*-rrY}S>9Mm`Mt(t&P2-;BVYy&Zlh+O~k}GNtfCOzCqAWP&g~^GY zD6s@~9VM8NmRC>-B)-DI=Kd3u(nn65O}s=xDFG4<7@;gcN(6syT7qAxNO$Gu!(Vd+ zDruk(e{XQNw1=KBPf&Nx%doVB2_-5}8zlOHsA8kYIb>&!3k0bl>Q9s+{bezFZDdT-UY7s zD$>fF3Hvg)&IJP8Khj|FuJ!k0_>~TopHxM+F+p+SIgyrD-X_t-s0qUfa6xSfoDI{Q zV?1e2#e`E&ZR#K*9!@5DLn8IJp+Rf^71*FDm6&f|xGSg;nW>N~MSJ2e62}bN_{ujW zUr-IkrD0X3xA3@HU+ap+C=1Y%-vy}5lH)A+EuBq&lOqC2i4{g03pk?K5bavO$6mjA z3l}wy@%B{<*nDMj+7`3vHZmfm2#GjMTtJC}*A-FW!%w3bkO3_@Ns1XOT8bMRM-*RX z_u-O_Jw6fHxCRR%*?v54Nrd5F)js?qCRU`33LTQ_iXaxUov*L-Qn#_0B*038j#x>e(Fz>*-IXxE zArgb~UZLXzg;DJ~U|y9BBcmHCAxZE&k`poJNag$O~L?kG_ft@EO}X z!zHr|4avyrh8Wa3oQ+@Lwsm4bZp#vQ-%9dw$a$i0LN#RpStSF6uM&2Xs8)}OyvgcL zZzV^(8jjEF^!S3?SKd0J1%~9sY;kZd_E{G_juH0jsVw@lPySwD9LZ_iHYH;~lM@gTcR(=7jA>jM}ysOitsF-v#P-x4ELS&p5RfcZ~UBf78(^ys*pqCF8Stoo{73LeN zNt_oyLcP8tI|PPAI)ySe8Pj1$SObk{61Jj7NkY(WPiJh@7%_9C6eR#~VuXeB7uZ)E z=a*B@T^A}2zHS0eV^~?$E)vj2I1>3%Y#$t^-8-3^$s%zKJC5yWLNK zAVY>5E8|ON?qsK6l0K?jb`w3(6z z4+bKwDg?A^@7M)y)j%C6LoFzM!vat_M6|$}Yjxe)efu!kYe15h#86y$g{y9y@wgms zEA29alwX&UVidDHCEcoenIYdW4nE@r_Utwre6(8BGRq>H9Lir1_@(f0JETo9mtXpa zUY@U0Gq7t0TPT#(o#>^x<5#lZ?@q0$zj>O7^6&lB5SLR?QB*;FRRUK+gKVyBSYCj0 z*#44XX_dE}W!Nn_E+y@~dXeeK#M2>8(F_vm*@z!T?+!=xtV+m@GGN;$SyXW%E1K=JB{6^)EAJ;Vw*cq z@TU}b-YLs$1u?!zO^`--hU4F8vkc6xhiiRC{W-TkBl_5vWyWM>{akE5c|4;hVb+p{ zwluMa;K*R|60V8V1guQ^CjBXY}1%R4#>l_OKN@z_^op4O|dt z1e1d%M??vtsexP-!r4y;dm5FMe-m$TROk#V_+MCeO@m z-n^nIi*s@(!YMgmPE&9}GIY82y$-u<5QZa?DJLQ+b5%*{+_!c}KdX8k{@hX}WDtDY zZ9?n=Y5jK#-05>#1+h?qhMme%v*CRRJqb+(57qXsy4kl%&v!P`G_1KnjIixy6I zC4l3o!CaC#6vMUIVb64__DwARmx1K@f-2&;vh5Kj$H7I+#SfVDr=)YqAIGToJTzHC zG(oX3pOFzj17w-gY)G>i{guYfmq zzG;JAI#nE2b5KF(WY_qB*QA+_?4&n`AOVC?MMPiJSApiS6o?QUV~iRT)#OWngeR(DVF%UNL~b4_C$DiV zh!r^@t`latj3j-^F6s=HsUbzFxyDzybyF;xuqEKFr37(l6gV*Sfnqg{raBD*>H&>a4Kt zj1TG^;5mi(gx#RAa|Nx++KPfbvtZFfH2c9}Ix8kb*&NuKdCB@{1mv$ER<1Z(#Vbi6cW@Oq8a#uvDchSBPvbv zh7_+ry`Af`Q!CsICm-^BU_8xIJx^y)s^>d6{nGlbJ~kHnwH)kLM<=|L65)Qz8z8uNELg+R?=cg10aV zr?`rGJUOi*g$qw9NKIPGUNWf{rj&>3l5dcA0cbwT!dF?Ew)9)SycXB6xRWXTE-DZ8 zZbjFL>|3q#fJK*x?jWE!9FNZ0i?;C9l7~0Or9F6t3p2jnMVS9`s#^)ry!b0ss=IlhFP>r?fHM zN$_epXq>d$ZbYqUeT*=AyNQ{I+4L3{of1k*ET{;$wyb051&}p~k)JBFU6kQvqT)xe zWHM)LBxn^=`%tA|1?Pez{yq%qF)0#cuqNh1h6qE|uKSWWP{B5k;Rh`^I7TIEP@JSF z9Zjaw(b0K@go?gGJedxKqDT^H$p*lTChR%!@PP&HXkziqQO>!OouyyQvdNl1RGc#N zA=Qvdlv3y9*x<4^+mh+ln@mUl^06!>sF|r2$N}HVL1N9S0Es z@4DdCN^?J%ZhPJ7s!!!xFx>xi4^_Hbnnf4G+F4!0#YBdLe;}=GRK8)Nw_toZ;&96c zNPuZ0pIDLqLh$746LPK~YYFR42bNd~wTROu6_?adpuDTGo(+){_GV^s*-7zss&xcs ztKX9XmEux-mTcrFV=C0N^#-WZLVIfI4mrTlT@G9VMa(ghBt+ymKoMXcf|*1W?CG1v z1!l{ygj1wduw!f4!Noj{FDay*ty65iQy9FMLjI1<4;`mj9H^t7h6LQPhk{iW{H*iN z_=S9fJ-_a-Hl8Kv?fUX`_=ZAgtr(9U2p}Wx6iEE@ z($Hb&OM<27YVgod4uR0i7*X-pkh3=ORft*+HDB6VSXyLlQnjTS4`pxET2Tf$rDirD zr(}}~PLKosnXaZ$b9q}eRdtt01582#2uSgymrn4eY#50lA#_;IL!M*8svHuNuF4hz zC)t=z*~5(slJs~%TbDd+tABTPXyX8Oljq7rz52#a1|I9xck&bNXo`UNrAA_y4M14T zx$aw`Kg?xOT(LoLD3eUTEiO`R%42QWrr`(ZYjHiUTH_10j2ckkd3mymAmZEZl* z^kZa_EV0&{*L!MXy;UJEgPPa03s`oJjz+s=f>2`zi(N9EgoYKa&58G7?5N+V-S7X) z=EgyT-qYK@AG9tUE}i#fuaa=Hl#NVOT{dHnd2epSAeX(j5nq@&BXA#<~hSyUyifA zKCuByIS@HTEa6C|qN-H60CXXBI=I*jg7h}CrG%T?Ae}~XLk(stnSG=9DCM$QV6C+x z%4Mr;4Ov=YW1~euM<{`WtTDGc8p5I$DxvLf#PwP*R2V(1vf?ub>KgA2>c%MHrp6y5 zq$Nzba(zb#hFG>D>16m~bOJI8ZiPOwZ58=(X=_<}ClOscyPam&(e#eNh{TfJ1m5fqTqK_KDL*f1AxA zqqe-@u$wy%^ok1mQ=Zv{0(gYK{7GttXIl^T^V}0$`aTJMweJ_O#(!Kq(M1+b0&qLM zv^l%*&;9{}mR_*LT@72PI}h;pdq{jN z+}FOjKL6sK4{QBCTZaLEUjZDpc2KYTAqzpyVWwpW0nn{XfnQk@Jl)yg#{GYl_57E* zx#wVSee2-A3TB=zx=y9P^t@uG>8~qX9HN{$O4fa-LSXsz?5sbw`nDgYSX+KYI3Bt^ z7e616x=M2uWhK9^Kvn&Bx>xE0LT0=*3FepnY@l;#kIkr29$K zpiMt@LX8+i^X{RmxU33f{cozr^sgS!F!=n2*H-~}|1ALOgoWkyxc5u4Jr5sk?rq|z z>wL?k(UheV*0C*Yz1x&H7{*^K!G;HHfBBdP_6n~4sxHhfx!n9y{BUu(((J|kicUy; zqfSYd`stnN0D03PP}(jEllGke1lwgG{BVkV1+ApYGqfpAvVI>C@bwL`I{y#XgL6B2 z!we_)xjfn1TbIz$|B_$(>4hHvvZFrI*q`Y+AAN*dkN(O|(jS-ZAl|IHT0ZCm`9C>& zy6#omZm;jl=kl*Zp~C-H+Ct`u%GbBMsCN#4@JggKL)rYupAHx9>8GFWZGR_TeCh#9 zFaGUT-~Z+Z!zFn7duxwv?QgrUC-;_n9t8pqcClt$uvCVTH!~#T9ZF$V5pyhF}^h2rh|KVgeA3r(BSOet-8}>8Q1rXY?z=3uULUunoHPImj#26$Kr=S2& zk})F?-TX$OuQU3$19nL;dT1t^w0y{rBwxwU@=F7h0#2LQpE*zb?X%K%!G+bK@IdL} zGl9|9+q?I5Y+2aXxaN)@k~uwE-=?5{`~-6m?0qKR*HudIt;bKcH(9P#Ca!S6{YnWf z_Js&Wtk%}`ZD475-rB|=0`l#xeVL`e)UQu7IUwKlXF(45Biypa zairPf&4Wj{(n_GKKnfRVrB6TE{WdeU_VatNQk!&-R(eu6IRf0BefyG(fnWQZNW)w| z&7&gdk@o35@z}#OqYM@ zt%>P3*pGh;vgB5r{YP6*_(agVvAd4j4psI^6MvA=EbaURut^D-q(2J`=#NZFD2TI0 z-xs>lso2GNX(oQdVS0c&3D>_nd=%Nu?=s}wjBF?4r`sCS6E|aUk~%%x-`o~qF5p+X z;5*@D{lR?>aM3`&`B`k>Km;|G;Rt zIqGSj56@9e8z;nOlan7uvg^GuM6v8-<4NPmIgYq7+wS7@=$vO{B}*6E6Nr8*>^b9ly8FLu6ySJ`jzqQ+wmzTBM}`<48<4ECl_aDqv@KRSmoK8-F>Ml{Abik zkxF*oZtZBP3m<_lA`^g^W-EulFzP?cUxzq-e>gljNsB=SMyMPSL4o6i%arWWLX(s8 zO_pL4;9@X2j&?d5ACI<9nN_s)viQPSUOkxpI>kbn+%}S$|*R&pW|URI(d2bu2KH}_|4gg(tr6mCf(p$M7(tL#M_qF~ znh^569%DRIuT^2ZsCic_5EKZ}W^#HXR3X6|9@Ayb&t(|F1rQ7=Hfg zpa1;q&!2wr*_-FjPvys_Zv@qbPJvc)WtqF<=gwKmYXRwVUP-t)#QQPld;TXJrQ zB3I|P@C>A^oUJx@kp>qR)kY(_497-sC56yptYS7J561_Tpv`J(ncOS~FINW(tO79v zQTrQIPivQ)q991(S#qfk#GSdh@|6+o>WdqzRXs6>pu8IVJc!D#QSHqlKYC(-rUn8_ zaK-n&V?6KxF*nIl@ut2_HF@6s} zDHm>5p4LQ)HX1(5~#0)NBF%p z1~7pio+#3A(K=Ie({tcWC2hKpk0CZVMSjJk(0T?>I%qx*iVA* zLn$kszX8ZQPp64S03?b`ZxfAyCb2wA6b>WG;zd?-Jt3_*;}!5513N+<+r5hU*@}hC z<`?oy`n^eA|A9v|r2fN7XUM1d+e$QK%iu_9Ru6UMX+B%|4+k>F0)0Rs`fQlk&jn}B zmf_h&$)PO2kulo#RVf@NDcvTvh^Dl%;*^g?4FB~h!UKNABi58hjmgGsjmeYIQefA8 zFDeU&rJ;0Gf7PrAnO7bu$hCGY< ze_@}5p8vC{%~dftx|dr(R%f`g`z>}n=E2AfNqk&tTXU;Jdx^O7iMiXNvvL+zMXmP! z7$aOl`Xy*XxK)-B&(>GsDYZ87CNfG$T+6+g&?t8l3QoR+v<%}@US{H#7Y+-ddhzI3 z6d*_@00y(oHI<#u7MdaMg3QCX@<*=1!BhM%aciSoRG`I(aKzdR67kR1qv_}qY@>kS zLOl*O-JhSczbq?Q@kNaWos=AQ(U4IX1YF+9ixqLQg!(dMDJ9pNJWNrSiY+9~3use9 z2T?$NSJM55#7-V$))TD~TR24tC22*{ZW5^lN|U5%m)%LEWbVlg!_gDlWmW7Qh(})> zA+`6AP4kFtk>KwpQ}moGts!Qd%#v_wgHb;|z`l|RTP%1^m#77EpLPLVQGMi)b{&_k zBw_qyBB2H#Or+&}TP>BLQm{}4%^PLpV@-ce%?~g4m%$$jh$9# ze&!YWFy4~TL_EC{ka#x-h97-&6(FQczdUs>55Io-HA!x3CFTi^eB~Y7@rmk zUL}Q4_hiHFedl~b8`76<`}vNb2JxH~!-_6%d^a?i4Dv~m%S z!~E;(kJrE3dW@`?zdn7id%(YMW)&R?zbVu;=xOKclUnEC`UWW?Tax+E@=g=xvLcvQ zR#IG@Prr|a6_%CuI>}B<>uVx8dS01TRSZZ-__F401G&Pc^8rjUE;&!d1?$pQ78a&H zzjkNAU2xUj7T|;)S8rw!9;7EwT=XWJC5|@vQO-sY-8F~As^<7$azdh5ydy3JvwMRL zd2x+QHxS}7PTNAe9Z1(xj;~m=WRSz;6L{=@hfX4H0L*q z>k@rgG!H96sNJ*5vA3wgk&sBj@y_a9-9toFLH8Y*n0qM2N2+bd{6hB_X>u$K`t}aQ zy4cVPU-?@h9vjD+{V+Z|kud|_IG!{x(-n#f#sgp^g6b`6o{HvFA8BtV z`++yfqB@!Ugej}%*t z@bUXk0f}_CKd^9H%MtQD@0kbWsT~H8xt^} zV%~*pUsY^mFI7?_t8Mn*%O!gAq*OBe)h^q&eR2)4q>Y*E8TS$8Y9I*%iN3@&A4!A4 zkCnop#n}TlHN3j7pw29oR0hEtZRWE#{-`|I;!o|sga1q?ru;#DO2VI8w!i-@4qN!c zRy!d~o4X~eE_L+g@iH0k8XN3<-r zYfZsN%14QiN}DW*@P$TJ^|b@;{^D6;b;(qaEn!LCny(=At(eOo&3w17t}W8I#1I_~ zicsAQY$m4LZBf}tbPOgQ!?${L);s~vk2+$``(H;)YOd!gzM{Cwk>hgvRzoVq!ZJ^D z9Ca_WW*7Yd<=#A25|k-WmL|rooSOQ&H1WF^>76PAzaNBB=fa0{lbjTkXj5S*O9YV_ zqHUhCwET4b<}NghTC$cGRtCc~;+EsgK5C8+3VOu4=4V67S~XC$q_jV28k+`D(Ik4# zp$)uaGrT*dBIhtTm8{y5v5yaQWhQ1~k)#^6me$G)uoTi%EJ(vlq8=10pr7FcA0(e? z>0D`Uf`x|2%ltKGhdpvc1dv6%6rHOgY){@*F^*!ccB->;qV_(aLlVt}4D&Eb8gdYr zxv+6Qp-8UlM2${HJEPb$RpfMv(2bJq=cg-_>N^!4JU_)I0Uw_`P;gqurgo<^yc zLZy6FE9e4sOB|#TMp&$S@MMjkTY65Cm^ld5WjR5dk3~H6 zvR98~@h&O7B6?;Xn`_@->$uaVyge!JF=cgM6$NHZ>W*^aswsuMnsuxjeMF%bb)dUC z`DGk!UrxNy?CeQqB8gpmIR-trTTCFY%|Dp|!j3U0THaZ4otKLVdzZ^=L`D7dDG#Y~ zra^nEaxc~yx@*u|1W`CL+<`-fC_{?B?PX*<$?0jUm$_lAh>t|HmT+zo#DDAi#Q=4} zz1O8-Y9_Apw&FdJxCht`dNjtBk~HKCa%@7GT%8QgPF9UK)9Bq5er;It&CVGjYM+Gq zTk~<>_Jx81I{3a?V1wV%MvXFB_as-|7M5@})LYjCNyk-j&=@dH{&{>@EWB$1ma>8C zA2h+bvE4IoW3|9>20`3oxViN!)Cr?p)5qdl62fGL+W2UTREon71!KtHuXBSdP9MC7I*k@sO6 z4(x2>Tb79@7N~P2EZIlO^C_4j5>H9=O+`}(^RC9OTL7Tn=(^Cn(!PKv-kO@WO&Imo z=$DcMLhNM;nU8YC#!YYQRvE&)&J|SEz!o!aL)Q}mR14w> zms8PQ;kGxTNSeNL>`*w>xqUFBW9#skZ9QP7P5c+%wCtcX9fT*-vLIZ7LmaC8!?xX6()+RX=yf8k)b7Dx|D=61_$gwQn$O#0U_2xGIZ6iOc8! z!TS#BT3aLS^Zccu7fQMd=0x?Ss2GV{meSkLm2noz+`0o}Ep{7Rs~uhQPU8dGIjC#Q z${1kIv{J9A4;tNmL$%N%XLM7%24GMX9Y$SRYp04b1kAnIx=pC)j2d7IQ({73lyAN5 zEd-fRoQdLbIX1omc3aY9$`u9|8z(7tU9xX&n4}o?Z)KDy^cB52nXAC*CTnIgM%`RJ zX=HSI&g@Fap4BgLOk*)Lg%yhWe+}tSL$=xFH{@}Fhgg2iX;tv<%{K>os7=?jsiW8y ze?}|X^=QcB01|>L`H-1*fOcaCu3=DKEkkP6s@^FYT}cy{N{A?_mIi`)h}G`!Rq95?K~Ncv1l_0P*3}xgK5jyK&kUi4Isp(?X1GHoLpQg z;F7m&qSdh?mb~6a-gF|#QKhL5!6pwj=3E`GJ=Ahq#hI-r9^>bXipzr*_`o#_%K22R zyCjl&-c$jR7=%9)Hhz|U|1PMoUk#NO)-Rh79oXvCG5ZDsCMU-St?>XETgM8FBb&0V z?bDZIYqDfJl{mAu#CX;ir`_MYSqDIsg31CUVU`e%wwRl=wlXO2f;-@t_07T*h-5t< z$I3}!SrncqqlA5AD?F;%abIw#^9+^L(4F!x$l6oEjA(Mwso$qi1U}h#c4~3N6@LlC4CKW z(oJ?i@QeQ4e3Hxb@yX8ZlX$|oujlltZoQ^g^;tB%NGXfPk8Kx?n`kOf;-c}}`h@RP zG!xhu-$)prt$v?M$GwkrK(*uoM>ikaWnMH0U6?e*S4pI9Qn-w1wkN2)RhziWGpa?N z0(sCP@^;Tgr=w{t^4_+Kx&=!~ROXZHUP{EOw_a{ZN&{_6(rMI7N?&YW+AqOa$g+<% z0aNw^S@Dq;$4ip4qCui5Ql7|9Y~nIJN(gR%(cMh--{N9dp0lQ0_>@< zI)1m-Dm0hP4Im~8;2co3BSW#RExL2Vg=(7F^OlX*qo2A>64(LaJzE?k^pC`OJwpJe zN`$)Lh*HiYgfQL=Z(pSBN6`KOA7*ECK8g!GEvQ`{4~OOy@f-t~;kvY=*O2v&M2eWB z;cPTm6@PRUrNe!Gu2m^2P&8njr!~{Qk@n$MQg;^y`05^{nC>2o;MF}ypWQv=C`>gg zO&#j)qx*sRJIAA!!;6#i&ZVc|K@u1NMxJ^>K}1eIj~VHz!y$LOnamL(rz{-wMG}^g zP%5`soh9);K$C5_s(RFI$EH(No$YBhs81Hn`#_po95rewmp#b;nF|JQ*8oES>fU_S zA!<9hM>K6?p`5WZj7%_d%g^29)dJCqK!54(tUFYN7n})IneJJ4Z~1h&&tCWbzPoqZ zzFFOUt-HH?JnXgCU2k@G)i2NKdv{J>p0KaKg~|b4f=s#DF5jv9eKDus=Ho3n@KN{q zs=JTeuT!`GsJp%2z*Bemq`QmW(NlN$xVr;y@u{2N?rtvk{M7CLIH$ed1XTC0{{;9iLxJ0P#b*sCVTqRVu z|L5-Z>-)T)tO>Z4?k-whss6_Q*WJPIEXrLLsaa&h1#{t-$iMxR>|9kbPX~)^uQZRJ zRdJ;t*4meUIeUHfhXG3*%+7{Kqk;GfljG6;>Gd}4;q;>+=?WQ&J4Rwy9Z1<+>U zt*p7YSivtpZN2xCoz;C=8NWJ3aP)ZF%JHkwk>4l3=I~HVqUpsEY$CIX5kb`n;}4tP zSG@K_^sl<0dD`9r#$H znMq9H@$hU7y^D8(inbR|hEt>lydKTQvmIPsff6unt@e))cxrpGJ^FEUQod+82*s&p zL?&>LXOG9A!tsca6#5?#=nYsSys`0GZ`J^nos3RXYc3XV9ldtp7H|pDO^q`8Zh9W) z@W;_~_=?*Raxh9q|0Iv)DDZZ?;__4C-8fCt($XO@OD9ZTb6O{E?h^RV{4i}8@!#NE=6;#QgXh50~^_W2O&yh9T6B*KnTyKe$aQoiKc;AJwkLeRBKU4}N z=?jH=Nx)o4 zFD_jDXVru_`z{gq8T1@;5d=RzlG?kXFZ~r^ak&p{iS3Nlx;N)u|{2r z@H5vfVq3PEbpu9K?5YBRhLD<<=nY)}+Nkzxs6gQFZ>awSTINnIifBw{=jgc)mjTbv z%?*d!gEe?WdFec}JNP4}VGV8;8fmQ@>Ek%kNBH6M<0#TIj2tbRa*BrdI|dQBu4|6| zTNu>zp^TXX%Fi-I8rq|`XD0|>7!2D1lEAj+mM5Ti(@!a3tvlSr7qhboyrhp|mF7Kf zbej2=GBK58EvSOOMG8CGGD3KDlC>~$sR-Ldqtd(%we1FFWi{D2BpNZ)@EdWIriEnf zd>B^&t)FnZvObkWubb{hk^Uf9P>}+I`q~2A2&-2j%!vyU?hC(sH+kj88 zx{9AkJ}M@=xFvrYrV#AW+*ZvR%ZYA0--F; zg31m#;Rz6(ylZ=*Y?QoBtkT6raD+Glf?vq3Do5qB-Jh6puhJBT^Tnt$wEup0KF2r(#vzpenoJ^(WOn=*IUKh zge35R77&l7?IQq4B@kqcs%;?6C2>KtkQS?t(ADcgwyw7^ue!_pIkf_<>OxY;d-p*C zdHjM$IEZoCQ}@%s|N0cgN)D}98+MQjF_^f8RM1b{2BS=^RHLY3T-tgfoV!{_k((Od zKn(LCV)DlW9Skadc=W^Qe4x-749^knD}=h)0CB-Zp21xq?^ZG;ek9rR(7_ynSHd@O zjvp$ZWR8pBlun!*q}tLV6joNcw8UnP>IG3-3Wl;nD>wLw1jVL`-Z{+U%^f|I6I2`( z`-@})F1>k=(X~nFQ+?vYUU~R&3wNSSyJWo%uq6Mna!;jCyrZ>kpoWOQS<3 z)WV6mKYBGj4Y<|$AbEsX7C#w&m`!PbZ0y&_b-}D`as|pw*8;2-lmSqu2d&4ceMAtg zastdNJe!_#YboQ!{q)dW_iE6b!N2k8@I<$y*he?XRJ0YOS2Cl|3g4Db;uNODI62cg z45eb8gZmUH#j|9nZWP0`q|S-5RSL%Ov7XM;XkDM6ne5XkzBIb6$bvz`tGc9MjuVh=rSlGpw&$oOuQviX5m}&4Ga{@=n4dBcvQp zW(dY#1;CNjVS9zfCE(tqOpIJN*x=4H-0TIGJYIE0) zdpV@@8%Veh294b*3Y68jS2Lf4mNPmQu+Hj710;ivXRlF(Q|OsFB@w$Htrj;=D$U=% z{RPjkC4aU~n{!pDxJatPWRPq#G`J#Dy5ED;QrENh+OJ-~YE!gbLP#+0^xq;} z3Yn6ej(8MaECFcT^U3i9e_JkVl2I_L6ohgj?tS!Zplz3|R-jUe&5cXPoGfiaIQ#O# zn7Qi?9vC0|sYBik-@d7lHlLu1A{VOWtz7~iqb4|0g$uYnXvnRH zq6{tTBd}vqpGhoNy?PU9FTKVh{vupYMJ>twL!2$Ol*IQs^LD;ZtMb-r zf+j*Naqwn5do#o#aVQVN1-nt6(Omr}z$|}j4uY19IF?qAw9_;a%C938Unidcss1k&$DP7xKxNEp`e-WH(sQGGl_gE)Dfyp~j&i1@nSDtmABnivVy_G7$Yc{e zAwGu7#Qu(Bil1Dg-6ye;5-Wk$)h!GrpPPvV_vP4FXxTDwYde~ry}47Bv*EWRh|wbJ zdJ%z+{Q~h_o-F>MWAvcRTs~eEFA4u*k9;sZZK0alFU18D^whyrP90sMxlN_bv4jIt zI>~x)!3~4{@LcST_m?32s@#L1>xNp) zXwI|NiAz%cVrY)f2ebx<@EcwuMkRB4zB)5&H3k0$B{jJ%;GCa~n4g!}?O8mz*=RUD zdQD--*n!$h)l7)v!awUKYK=DeEfGa{rLsm?`%R)55^PsX4z_4A>5zVJ;Wynqxi|P< zSG$!1MJbjv*!9iu?f4DO1aOm_kT~J7cAl}uZ87{^BIf+{bn+A0{xqnIBdo1HZX3zJ zgPa29lq03?nyUfgyWx{6Kb#pqFLgDilfd#XV-jr{4;s~Q`~n#$TG?p`v<-0e!pkF$F&?Xz3p4tvE@j0b#>K_)3QCtX zRNkW?b z=yxEBLTemfNhkdM{-u2Cy>aDId?lrB;)6QBJ-;hMVfpjD*L;;GfbbcGU&MPU2n#f) z13Q@)lQ4%>Ajj1M^DvfWNz8?oaOPQPzg?GmAVSLZ;G%GP5)+V{Dur^GK{!5m)HU9H zrLAIu_FiOf$%C&gzLky)`;N|0BA3Kp3Fg9&@CjXEB)*=G__93IJ^zkPT<0*`!@o-YzvPBo473?^ zJ=V0qVoB<`q7(5jngpSkAKarp$&~c*;LqX>D`A#Y-mOJkBY~g_GFMl|slqf*$t-Es zG%BX!Bfn;8DX*-*ER$jjRb@4o>NA{I>gl-ern#KIV z$%vkQ?A6nT9=lk(IK^S|(Gk+3ZyJHvK4%Mo6m)_2#Z?<_)2EGcy=p@UK{Q<{z2rIA zwShdab%3EF_hfp**k4bJn}E--LFSY^gvj+7b2C20B)7ztSx5 z3Cm3EwcrlwrMUJz3z4DtVukQ5(Pf1!xYpLfO5@1N34@k4p{xbHB9<$-mdr&KZy+Lg zEt4yr8;kN6F*zh+OisSQ3G%xv7x2Z&k9eXX7zEo1Wy_AwsMV@Bu44t~`%)PX3xf(r z-TW_52qW=nBnobrrh$Yz`OA7Qycs~~*RBM}{q$0RJFEOC)Wgy1$>7Gqe90C>$)c61 zb^YzwG-;2^P>Aoe7*y~iu$EO84n_8DnUhMXEN|eqA=lgNcS*Z$C%T4o)7dRFtveXT zWo+P^c2l602y<%Y0z;sX^GO&lwL+=FV4}ty3pET1zbXr)tO_K}hFB$#qma`xzy?xl zl{Aa`n01HF?%7ztht=GL@K6Ld7uq(>JOYJbim8_;31zYh1`FD7p7^9kBg+Zu_tT7c zlL=~{kJ5pQ&fz5Dytwu4d!j%wmHJDTB1t_mLz&!7n2Rv4Y1czgI!7${ykKl$m&J3y zB!mq!P(cYP8knYM4}}6=437^O86)a+Y468qJ|0lv3Tg>P`)Ht<8kRD43;&LWr*tST z&IT(!wjG2i6Ju2MGC9Ts z?Mhi=;|k9sTAUrlYSg=UavxKI~cO&YlxsN_lY#lT|LtdG4+fcfaFOP9`MC_vA zvSLQ0c|)R1M{g!S0yQtElQ(&H0$Z=s>F`~Zn`vCDG81|sXgcZwK@GW^0(qg;(jO_< zc2uk%k9Z^#XYZ=b6MA9#b?%>B$=9h8LHRy+_<)x&;G&51snP4Qb&C}^j3zrndVRQR>t02Eg zBVEQ~6tg@zJ$in53hjn-np*w{e`#n!S3>(iR#Iv=eVJD6(RQ^;)%1tj+;wMKzjHP@ z%imA{nb)Sn;ls3QQ)DVY1F&fwqbDFG8uxPqF9uW(UlRxxGH(Y>rbS*(MpZsXj4h>+ z+s+x_B?Yq_^DRM>so3nqg)3VmmI}e3B6anS{A+ji#mU^fvkIGhu7E9*3)6f_{Uwc+ zzcP!ZF4)h_-iZ)tdL=wk*m_RLh3i|I>~SF&*`1IysO=tS`g8@=oO{AvW)a7i%Z7!B zagytVbywWJ)xCw)Eq<-h7?X`K{mU8Oas{I?cfMa62>geky&?9}Kd!^XHJxsyYvc>& z(mxDsmjTOP>#1?~-_GK!WU~aG=@h?DBvRMJ|MoHqMNx&yKHa+l7;@pIM%?#pzo=;a z;v5IFhsW)2!Qd#V+x~9v;)L<2_Ls8JtTjWBEDv*THrT)+oe>Ny-#US5%1cyH>R4`z zV4>#vmE5f8DxW2YIxYp|0@iFkgO#aH?AAbMF9Bh!!gb<8RV1KitIgf*J3ztLEOv^y zB4)!6(VJq{;t4KUkzHY$`-9iR+3Vnw!eim%M|g_)OA%^;0=9& zJa!PUfs^{N6~>Ti`8rH^c?Sb+ZXE3HeRsIOiOc-f@#me@{Zw4P>|1^!42o|gtJ`NU zkqrXQ@i4pK?N}_SeS#}tKE+;P7y(1;mPUNo-7_ywI!d@WKVv`GHR)XRQVb|{=|*p{ zw~s<0f_c<^;G7F=hduCq^aZ+-k;mA6l96Y;f2?ijOh^a-y*d70hy1vL4R8jb8NEw< z&;GuBk6eZQ4<#UPQQ*ZNULj(ZTY3Vj&7^Jd?+@2GgD-^aG50;8$Oq5&q`J@e$I%wh zH9Vh8{ol3fJy;4m=#%NY)F7}Iu22P?cMo>=?#BAT#-qcpH<2*@XlwfcZ(K#%Wn&ie zzk)uX5oV**v)_R1;MtLf@;XhC-?)`4V>wT*Kt%CavMrfxB$Q8~gQ4Z`+xH;2Fx*Ha z5vEJ#imc7&vTT&FCSR`Jky`$?sV?q?P%)|ciK+sxHHB!<3F%npBVS?*{gQo3CZYYJ zH(d|US&e6hkeE6cd+2<8GeMv0(m2g5^yG{Xr(EpPWmXOP>iuS}Orro5)H?ZmW^M7RtKo&Y>@tb-xvdmSu6kU#4k65;a-P^cyAtMD{2nhy_ zX1bBfGX^zP$=5#)r?|t6FkJJux9@4v4)BHrp3ZLR@!vb`O;3+bE{;h}u`Ry^EdWd4 z!SH+tU`mW-ZLsQhJ*+bE*qUHx%5H#wLGM>Cl@0tU8i3^|)8ozQlz1&hiEq#_T%A_7 z3op>j!Q*Yzkl=^Zv>~kYU3ehHC~W#^?|=M8Z--dD#mhDF@&y<)$PDbpvDmBnjMyQR zbPN?)pM8!FOR3FZG^rH_Su!{V;Dg$98&?#e!~5>w#+@)xY`PgDR=>~bbVW}`M5Cv_ z=!`^Gq#y2CFo|UNWnnA!`$1tHq=WHD7jdl2o&Ypn^8lA(t&i;ZSQUaJe{T&cx z=Z=&vZr_t84 zCMxbkGP12~snrMYIkBr=Uc$eUT7yVv*F2zoyZk}~sI0ohP=_O0Fuap02cs7YegGHk&uL4 zlF$O=+FskqKgcb=B{}Dws@(Du@+Wf0^K|#j^t^ZhNw&B4vXV-8r>CcCc9rspfX zmVv!mB5&(-VacTUX$qj0UE8R|p%W9IG82-u>^#EnbzmrY(H6)@u!(q=$9&{59=p9r zhk~^&XPGcb;^ykL&LI_A(}S>YvQw=?xwoeJ+b>xOL68AY9JQy`JTtpV3L?0KwTgr~4i|M##YQz+3QvWefA-06 zKye3^>mOMq9y7FITE2HuD%>R_c9p*J>9td1Y7xkNavX1%FrTNX843P$MD^ zI$>54M?Ka#M|vFEw$z7is4PNALr9-uJKx?ncHdkuyS-% z%2mf`SGg=V?W81k?WF+*#`N4ufzfsC`E16$UHp6jN8t@W=-zpWcYyGDHT@b_7UE;} z{C98>@C*JgSRa02Yv1g4em>#%IWjuKKnLH@zMP48LCbV;gp>PwXg_=`j+5DMb?R+z z*AfO=uYvUF{(Vd~sgiPDyfnjnO9e`E@hms<;c0I0Z9LSBYX8hE(OJBjT}^aUfW|Vp z{$ss%&_8VRXt!uzh^A3XD~+T^t+Lqd;7-t7_>wlQ4hg94EX#t0jr6R9r4ocTD2Bma z%r;3fb=U-Ki6w?fHYrgscS`X;dNjYi=4QUSW`=PNoLX~EE>X4ddBa!>+mag9f~wWL zkitsq*aPJtAdRdjO>&%AdY=j8x2>G0oZqpGZ>bX0-q*VrV~_*YLKKUG4g!Kg+NOsD zUMt;z1~;w>5nh*iqN&Bn^?{yamrNBfLPQHqM0vW1g1khfLQPzvTv*X#qPs=aINy|4 zsiJP|nM2D34lXK6S#egh;|ny4bGfn_`)r{}3z>e)&>%<ei} zz#B8*W%9N7UmmN21yA~Z8%)#9?DqBR$vij+IbP@w#XI;u(5M-;lTJ@e2b=fwdaN`y zPUkGI5mwCDzJnM_txnU_PHB7tiqvz7^7Rj(%rv!An)-E=`Kal;@+=Rbp0anyD95@h zG5@U7U>j@o9s6Ff^3%ALa`_!`Z!gvE*U%!;$4~R(T zXFOx109BAmJ2``{ye5Obp2g{JXZ7Gv!kIl>m7>%bvd06?7U$C`Qo>)&W8&1ZZ#Spk zhw+9+;|%!+pA@|HMZ-8&@ZrbOlTu41=O{6&LzV~Rf`Rv>MLROUx8Nrb3M(B!7h*)r z!Mu+l0-XfY2zyHsu}Jb-mUxx;lqOqcY^s5u75(0HaeRG&ZKGTd>2dMh3g$XFI4T1a zy#(Ly&W5*3e92s!v`{UY`zBYKcBeP2;_$w6ZOlF)Dnm&dYu|k-ZQ(nIBytxm*Bfvx zizruL0`OSsNB537T)JP#7YAHt4ZBTX}>niNMB0T~TlqsYjsi3fz zv#%!eC&~uuOC%t$#2nV)vAZr#%O`UUESUyr>5Spu74{i!h9P&-H0f>Klub3Vp^9w{I)P<*2shf)(^IjR zl7Is(N>|bVNeZdY082XSB4Z!VM0bmOAF83KNv`Vj2oy@Fn5Y8Vl`Ljef%u6a!m|zk z5q6VQ^P>dRzf!?2dJEm>wIVe=(uj&^+nBm?MMJaHkd!6f(2VK9h3rfCFizZ)4#Y44FGQxYP*<4YCx{!$El?1zDQzq#uvZ5w|$9!0$n$J%scPRylQit?! z=whQL#hO~vW~PfJ<>a(STZV}4HMoDHGP^Xv55Z)?L{flZU`cuyP|}SylvB+67{_c?E~96{DizS=nA$=`zHw+6XN~V*L8-l7j_9kShB59f zE!|qPl@VkCXlRpZDMho@rwZrbA&8Ouu!(00yp>&xSSkBRn`C4;p`?G*=OiC;P)R4N zLo+y0OG%@$1|`E-07@mOzF#i$rOL^?9mB!?k&Q|>M`VMR#*~^vpEZUBr$DZkJ3bri z#rheBJ{Uq>-CZIT25#6id`37+GrPuXeq986}i+M);lIAQt^zIZ8ARTU%_=c;%vdAb|{I>S0sc z0OlA04_(e@H^`+fuA?`pIrbosCG6auVf9}Jn8AuEEFVi)j*(&LX6~Y5hE$$q)_@x3 z9NG?vx=B{ScD-I=91lL0N#Lod;=#_&PEb!t`dRT2KyuI6xTVbnyzSiaWX<5$FHsVlDQ^~tNEv-CoL_?zR#pgrCl zG@8F|k9_*7=q$Zvu$n++d`3aCz>&CiZ*yWPfaH?O|{%P@zdL8rGrZuWaPXXL5o5m}l}uiNRh$0&5hhX+^T^GQaZgW(G} z!zcG1QNkI+PQP_rB6Mh=3~#qHI_V7C<3_LL3*f<(`29f@ zI-r%F@p%PB?o37$n0|v%HL(!SfU_%*R>lps5BV!#ZdT z4}9Jd&M=M#SqT`-;)kQBxv5t`hSL~AV5O!VVHswtkG>=0+8`Mg6``MLxj`~4%I0{G zX-oiRcnu6T#?5YHnAtlA&9HaT*^fHSUwf%VScWOrC!^h-loULJXDOC(4U%ECd#wtp z4w_->P~@OL7>&h%dA^t8vXrV@!|J5Vky+Y(G}rNx`a5Wbz1!(EaKyja7-kK@gERd0 z;cmOtf?2}w(3dBJXDJ5l(ea=+E?W=}&hSMtcw%$BKjiO%CRdJYI~!PGII0O)Ro-U5fw4jpyVh5+8ZjKr2wO)ol;ur?4X=WHpim(VQHt^2 zpntfUbBE)IJE(AK^5PeLTiE}DyK{nT>#NE1 z0-IlgMN*>0APIG9_*osc;INz=!`s|*ErO=@xb^*v63S-mJ!{( zVG)8#>q_`T$!@PdU}Oxm8_k0R=~}f6f}dH0K=0GZqsmK z4AmKW_#wH~L3j$gxetM#5GTO2BpC>kn1~kUeFO+?o#4eF=W;P1v$hn{*;x$3>c#J9 zmLen=l_h|hfe0RU)2CJfOEc`2(X2;{$kOS>5Jr%t1nM~`0a4fzM2c93^~=N{wGvLh z%nt=u!hzgNkT5j^yOH$(GZkd%J7r1$V3JoN1|TNuJ&ZUTNrr}588JLW&yU&Y5?e?V zW~8M!wCYj=#?~X;Z;>9`^UXNciLuJEWHsZ0jPseL5M#=hHu3&|68k^?UMB#VIyE+e4(@Hey60vse?Y zg-9=Wv@yliNCyz^)ZNA@u*RFgAb|1ed`!_P%vg3WF5?(voH~tMtOGFqxHshWUNPeo z7RqUAu6(&kd6it;o0xh>Z8iiHu9c2_G6z4DOCiR%5nT)r9>;a|DO9v)1%dv+!eM+T zFa`)uW3cc|s1EP=%Mgcu0ixf8#?hU964q*CP^)9k7^sqpzv|fQOB@ojd~iUKW^z24 zprU(5n{8n&5FwUh|oYoNKBzH5N^ zRrMQ&#tw?%LJJ0r^yp~y$h4qXj*lL5IM!f9phW&U%v?z5i3wWtN6y%^>X`RCZ?)x zp`!Envvd?FOz`HNNuc>Mz4BfW5%Jy9xZgA7e@Gs66M})FJ=3sOv{-O-PlG^gR7R~~M>q?`7^}DK+ z&*!+UcTzF)k=FRuW>s~e0=*)F%vD%h<+LJ#_)4bAZdb*`9Gr=EPB zSN#%BKG&5AK=4I~NwXx{2zS+4u9Q{P>8m}fYoR514l!T19QjF@%-IztpTh0o(MT32 zz%D;4syv9Lz!9PYEZN```-v>wO!Udhx~$z`_op}txg5IrO3^SaxyMT#EXcF(0NJ68 zOXTth=hlyby3@} zaScY`y;LkiSSp(efn?&jfk1(!mxwoQbJcZvSvw22T5^Z$xQSD&a$a{bKMgN1U@6ho z?RiKfF5&CKTR`H{TWMQ4U754RWFAoT)^$1IP)60)Bbq#D>?VDj5|n5vA`h9RiB<*L z0v9r#zv8)(94%WMj5zY>0&wAi_K$NJT?`? zY=}6uw!O`NXZFm<5-EG8gksUzJ`q)8|P;Ms6PBG zXL6#EkXp2ZyrKkpfcGQa)UebnaG)$G$x@<+;g-L0TN=TjEqE3UNpZtVCme|Zi+^vo z?}v(%gTK51H=U5q68JV4jv`g0^~T4_Tl*Es^5WrN+4%}7I1;P=dBfC^FDX)i%wTClCc}ll)okA2OoLLW=pk%K{RqSQZFv4Xgh3{(TW8L zuGGPMpJAWD1uaf65iAgO#*%t!@j#xD^LB{GZc|tk!Rp0<<=8hS6>DT0#Y!I5oOX-1 z$b=$VpU9?^*pI@X%+^rT0?|^cD9AdRdg(Bx1!GS6Vs2(|9huOa-e5_+$lRTf%1A0v z)=8Ba(xPX#%d$+93+sEHiLgpNyb-ZFt-_~DsOn3Km?^PLgsGi*4h5s)Vr;Ujg+QYUN3uK*;do%UhFuQ}E*C2Z z%9ZLbQY>p}uIxXuU|voB@`YQ|BA|y!DdUhp+m5M8l#09=OoI~b$r{3JYAehN-tZm9 zfuEXZDytDowpVXiu%@$;8rn%WnFgw5BB`bqZ@h)mgjGhNv?=oD)qM7qzKImCTCQ(2 z<^2mzdu%5g8xI?xo{Q!#H(WKrtHyZ`xLh}GZU15eDjjD4KTKk=jI0tZqSVTp+qj^W z8~GcHD1}KS6e76Rg6;lY%jlIzE{Iy86tRd+HHLCLb&W+|qhFDfu=`V##q$Pw~B{54<6nvhJU!7 z{;4>+`KIXJTom=jZm;p7tvij&%R-VZ&`V<)hO2M3@7x(oc$LC@ z`uz50iuVtAJoy$Er%mw`f?TsLkmuN0iJO(6g;yBU@c~@iiYULc+nYOAvLdJtCft={ z%2=Vfn&N`83(VJMf1Juo+ON)TiW{78elfem^;JB0j4M6#sbW3bjFrAecMAM@ugIBN z6qt?}H#oyRDXwmD0vlC!1};hR>^WX;2RRdq5GmL`rsovfD;)2ZCkR2t=ZT``3_%i5 zJ)9?=*{Z(xe3IPzrr zWz$o;uc!6l-fC^g7Ufg`eBkp7wT7{-EImbftIg(DP zY}kK;8=MPKE$jiDT|;?!eySMu_eLiTY<0jl*0_0suvP3nEpQIAX!ehu4m$e>qvD|7 zZM6r(f=hgGx8r!{?lGQh92OgmAyRHI;!dOYw6K#`1=jjHhezEGh=DrJ2#q>z?1E5l z8Fn1sEkK~aUZ|qmIm9OIRx#p&Ju1>fw}E z!L0#}0v=i{HuLybadbR5>SHw?#k$k#46y^FbJ%WeBX{Ijw4Y$xWidR!cFIyI`zO8j zfUIXl+--wLo_p1ddQU-8mL_y&71E#hIvPhac_F;hzIP@X#sEA)LY7@(KTA zt8v)aZx8R(-yjiG3B2iT?t`ZohR0ZJ?~IPISzy24Zw*O!*d9FT;5fpkcd$_!ki9}S zAha5zhGYy9kks%~;_e;~amW@}vfX5Gd^Extxh+)h38aE@H;}X?mD%s%N7Mk1bdo4# zAhN$(oE)@KQ>fvdN(zhrC^nP=n*bad@`H|yTp5dAd%xS+$0|;n-1JF>$3wSJRUL4) zPm;{`q=7u4Ajp?G!L1eY*%{sm3Jdw7A`9$XX|$ezMk^qr>W3Xu6C@fQV{5jGd;8A+ p{O`~I``>;w{Kvn${or5z^>5FA{vZGK`2YUqXFvPd{_f%K{{uk<`)L3G diff --git a/phpdcd.phar b/phpdcd.phar deleted file mode 100644 index bfd16fb3..00000000 --- a/phpdcd.phar +++ /dev/null @@ -1,20310 +0,0 @@ -#!/usr/bin/env php - '/php-timer/Timer.php', - 'php_token' => '/php-token-stream/Token.php', - 'php_token_abstract' => '/php-token-stream/Token.php', - 'php_token_ampersand' => '/php-token-stream/Token.php', - 'php_token_and_equal' => '/php-token-stream/Token.php', - 'php_token_array' => '/php-token-stream/Token.php', - 'php_token_array_cast' => '/php-token-stream/Token.php', - 'php_token_as' => '/php-token-stream/Token.php', - 'php_token_at' => '/php-token-stream/Token.php', - 'php_token_backtick' => '/php-token-stream/Token.php', - 'php_token_bad_character' => '/php-token-stream/Token.php', - 'php_token_bool_cast' => '/php-token-stream/Token.php', - 'php_token_boolean_and' => '/php-token-stream/Token.php', - 'php_token_boolean_or' => '/php-token-stream/Token.php', - 'php_token_break' => '/php-token-stream/Token.php', - 'php_token_callable' => '/php-token-stream/Token.php', - 'php_token_caret' => '/php-token-stream/Token.php', - 'php_token_case' => '/php-token-stream/Token.php', - 'php_token_catch' => '/php-token-stream/Token.php', - 'php_token_character' => '/php-token-stream/Token.php', - 'php_token_class' => '/php-token-stream/Token.php', - 'php_token_class_c' => '/php-token-stream/Token.php', - 'php_token_class_name_constant' => '/php-token-stream/Token.php', - 'php_token_clone' => '/php-token-stream/Token.php', - 'php_token_close_bracket' => '/php-token-stream/Token.php', - 'php_token_close_curly' => '/php-token-stream/Token.php', - 'php_token_close_square' => '/php-token-stream/Token.php', - 'php_token_close_tag' => '/php-token-stream/Token.php', - 'php_token_colon' => '/php-token-stream/Token.php', - 'php_token_comma' => '/php-token-stream/Token.php', - 'php_token_comment' => '/php-token-stream/Token.php', - 'php_token_concat_equal' => '/php-token-stream/Token.php', - 'php_token_const' => '/php-token-stream/Token.php', - 'php_token_constant_encapsed_string' => '/php-token-stream/Token.php', - 'php_token_continue' => '/php-token-stream/Token.php', - 'php_token_curly_open' => '/php-token-stream/Token.php', - 'php_token_dec' => '/php-token-stream/Token.php', - 'php_token_declare' => '/php-token-stream/Token.php', - 'php_token_default' => '/php-token-stream/Token.php', - 'php_token_dir' => '/php-token-stream/Token.php', - 'php_token_div' => '/php-token-stream/Token.php', - 'php_token_div_equal' => '/php-token-stream/Token.php', - 'php_token_dnumber' => '/php-token-stream/Token.php', - 'php_token_do' => '/php-token-stream/Token.php', - 'php_token_doc_comment' => '/php-token-stream/Token.php', - 'php_token_dollar' => '/php-token-stream/Token.php', - 'php_token_dollar_open_curly_braces' => '/php-token-stream/Token.php', - 'php_token_dot' => '/php-token-stream/Token.php', - 'php_token_double_arrow' => '/php-token-stream/Token.php', - 'php_token_double_cast' => '/php-token-stream/Token.php', - 'php_token_double_colon' => '/php-token-stream/Token.php', - 'php_token_double_quotes' => '/php-token-stream/Token.php', - 'php_token_echo' => '/php-token-stream/Token.php', - 'php_token_else' => '/php-token-stream/Token.php', - 'php_token_elseif' => '/php-token-stream/Token.php', - 'php_token_empty' => '/php-token-stream/Token.php', - 'php_token_encapsed_and_whitespace' => '/php-token-stream/Token.php', - 'php_token_end_heredoc' => '/php-token-stream/Token.php', - 'php_token_enddeclare' => '/php-token-stream/Token.php', - 'php_token_endfor' => '/php-token-stream/Token.php', - 'php_token_endforeach' => '/php-token-stream/Token.php', - 'php_token_endif' => '/php-token-stream/Token.php', - 'php_token_endswitch' => '/php-token-stream/Token.php', - 'php_token_endwhile' => '/php-token-stream/Token.php', - 'php_token_equal' => '/php-token-stream/Token.php', - 'php_token_eval' => '/php-token-stream/Token.php', - 'php_token_exclamation_mark' => '/php-token-stream/Token.php', - 'php_token_exit' => '/php-token-stream/Token.php', - 'php_token_extends' => '/php-token-stream/Token.php', - 'php_token_file' => '/php-token-stream/Token.php', - 'php_token_final' => '/php-token-stream/Token.php', - 'php_token_finally' => '/php-token-stream/Token.php', - 'php_token_for' => '/php-token-stream/Token.php', - 'php_token_foreach' => '/php-token-stream/Token.php', - 'php_token_func_c' => '/php-token-stream/Token.php', - 'php_token_function' => '/php-token-stream/Token.php', - 'php_token_global' => '/php-token-stream/Token.php', - 'php_token_goto' => '/php-token-stream/Token.php', - 'php_token_gt' => '/php-token-stream/Token.php', - 'php_token_halt_compiler' => '/php-token-stream/Token.php', - 'php_token_if' => '/php-token-stream/Token.php', - 'php_token_implements' => '/php-token-stream/Token.php', - 'php_token_inc' => '/php-token-stream/Token.php', - 'php_token_include' => '/php-token-stream/Token.php', - 'php_token_include_once' => '/php-token-stream/Token.php', - 'php_token_includes' => '/php-token-stream/Token.php', - 'php_token_inline_html' => '/php-token-stream/Token.php', - 'php_token_instanceof' => '/php-token-stream/Token.php', - 'php_token_insteadof' => '/php-token-stream/Token.php', - 'php_token_int_cast' => '/php-token-stream/Token.php', - 'php_token_interface' => '/php-token-stream/Token.php', - 'php_token_is_equal' => '/php-token-stream/Token.php', - 'php_token_is_greater_or_equal' => '/php-token-stream/Token.php', - 'php_token_is_identical' => '/php-token-stream/Token.php', - 'php_token_is_not_equal' => '/php-token-stream/Token.php', - 'php_token_is_not_identical' => '/php-token-stream/Token.php', - 'php_token_is_smaller_or_equal' => '/php-token-stream/Token.php', - 'php_token_isset' => '/php-token-stream/Token.php', - 'php_token_line' => '/php-token-stream/Token.php', - 'php_token_list' => '/php-token-stream/Token.php', - 'php_token_lnumber' => '/php-token-stream/Token.php', - 'php_token_logical_and' => '/php-token-stream/Token.php', - 'php_token_logical_or' => '/php-token-stream/Token.php', - 'php_token_logical_xor' => '/php-token-stream/Token.php', - 'php_token_lt' => '/php-token-stream/Token.php', - 'php_token_method_c' => '/php-token-stream/Token.php', - 'php_token_minus' => '/php-token-stream/Token.php', - 'php_token_minus_equal' => '/php-token-stream/Token.php', - 'php_token_mod_equal' => '/php-token-stream/Token.php', - 'php_token_mul_equal' => '/php-token-stream/Token.php', - 'php_token_mult' => '/php-token-stream/Token.php', - 'php_token_namespace' => '/php-token-stream/Token.php', - 'php_token_new' => '/php-token-stream/Token.php', - 'php_token_ns_c' => '/php-token-stream/Token.php', - 'php_token_ns_separator' => '/php-token-stream/Token.php', - 'php_token_num_string' => '/php-token-stream/Token.php', - 'php_token_object_cast' => '/php-token-stream/Token.php', - 'php_token_object_operator' => '/php-token-stream/Token.php', - 'php_token_open_bracket' => '/php-token-stream/Token.php', - 'php_token_open_curly' => '/php-token-stream/Token.php', - 'php_token_open_square' => '/php-token-stream/Token.php', - 'php_token_open_tag' => '/php-token-stream/Token.php', - 'php_token_open_tag_with_echo' => '/php-token-stream/Token.php', - 'php_token_or_equal' => '/php-token-stream/Token.php', - 'php_token_paamayim_nekudotayim' => '/php-token-stream/Token.php', - 'php_token_percent' => '/php-token-stream/Token.php', - 'php_token_pipe' => '/php-token-stream/Token.php', - 'php_token_plus' => '/php-token-stream/Token.php', - 'php_token_plus_equal' => '/php-token-stream/Token.php', - 'php_token_print' => '/php-token-stream/Token.php', - 'php_token_private' => '/php-token-stream/Token.php', - 'php_token_protected' => '/php-token-stream/Token.php', - 'php_token_public' => '/php-token-stream/Token.php', - 'php_token_question_mark' => '/php-token-stream/Token.php', - 'php_token_require' => '/php-token-stream/Token.php', - 'php_token_require_once' => '/php-token-stream/Token.php', - 'php_token_return' => '/php-token-stream/Token.php', - 'php_token_semicolon' => '/php-token-stream/Token.php', - 'php_token_sl' => '/php-token-stream/Token.php', - 'php_token_sl_equal' => '/php-token-stream/Token.php', - 'php_token_sr' => '/php-token-stream/Token.php', - 'php_token_sr_equal' => '/php-token-stream/Token.php', - 'php_token_start_heredoc' => '/php-token-stream/Token.php', - 'php_token_static' => '/php-token-stream/Token.php', - 'php_token_stream' => '/php-token-stream/Token/Stream.php', - 'php_token_stream_cachingfactory' => '/php-token-stream/Token/Stream/CachingFactory.php', - 'php_token_string' => '/php-token-stream/Token.php', - 'php_token_string_cast' => '/php-token-stream/Token.php', - 'php_token_string_varname' => '/php-token-stream/Token.php', - 'php_token_switch' => '/php-token-stream/Token.php', - 'php_token_throw' => '/php-token-stream/Token.php', - 'php_token_tilde' => '/php-token-stream/Token.php', - 'php_token_trait' => '/php-token-stream/Token.php', - 'php_token_trait_c' => '/php-token-stream/Token.php', - 'php_token_try' => '/php-token-stream/Token.php', - 'php_token_unset' => '/php-token-stream/Token.php', - 'php_token_unset_cast' => '/php-token-stream/Token.php', - 'php_token_use' => '/php-token-stream/Token.php', - 'php_token_var' => '/php-token-stream/Token.php', - 'php_token_variable' => '/php-token-stream/Token.php', - 'php_token_while' => '/php-token-stream/Token.php', - 'php_token_whitespace' => '/php-token-stream/Token.php', - 'php_token_xor_equal' => '/php-token-stream/Token.php', - 'php_token_yield' => '/php-token-stream/Token.php', - 'php_tokenwithscope' => '/php-token-stream/Token.php', - 'php_tokenwithscopeandvisibility' => '/php-token-stream/Token.php', - 'sebastianbergmann\\finderfacade\\configuration' => '/finder-facade/Configuration.php', - 'sebastianbergmann\\finderfacade\\finderfacade' => '/finder-facade/FinderFacade.php', - 'sebastianbergmann\\phpdcd\\analyser' => '/src/Analyser.php', - 'sebastianbergmann\\phpdcd\\cli\\application' => '/src/CLI/Application.php', - 'sebastianbergmann\\phpdcd\\cli\\command' => '/src/CLI/Command.php', - 'sebastianbergmann\\phpdcd\\detector' => '/src/Detector.php', - 'sebastianbergmann\\phpdcd\\log\\text' => '/src/Log/Text.php', - 'sebastianbergmann\\version' => '/version/Version.php', - 'symfony\\component\\console\\application' => '/symfony/console/Symfony/Component/Console/Application.php', - 'symfony\\component\\console\\command\\command' => '/symfony/console/Symfony/Component/Console/Command/Command.php', - 'symfony\\component\\console\\command\\helpcommand' => '/symfony/console/Symfony/Component/Console/Command/HelpCommand.php', - 'symfony\\component\\console\\command\\listcommand' => '/symfony/console/Symfony/Component/Console/Command/ListCommand.php', - 'symfony\\component\\console\\consoleevents' => '/symfony/console/Symfony/Component/Console/ConsoleEvents.php', - 'symfony\\component\\console\\descriptor\\applicationdescription' => '/symfony/console/Symfony/Component/Console/Descriptor/ApplicationDescription.php', - 'symfony\\component\\console\\descriptor\\descriptor' => '/symfony/console/Symfony/Component/Console/Descriptor/Descriptor.php', - 'symfony\\component\\console\\descriptor\\descriptorinterface' => '/symfony/console/Symfony/Component/Console/Descriptor/DescriptorInterface.php', - 'symfony\\component\\console\\descriptor\\jsondescriptor' => '/symfony/console/Symfony/Component/Console/Descriptor/JsonDescriptor.php', - 'symfony\\component\\console\\descriptor\\markdowndescriptor' => '/symfony/console/Symfony/Component/Console/Descriptor/MarkdownDescriptor.php', - 'symfony\\component\\console\\descriptor\\textdescriptor' => '/symfony/console/Symfony/Component/Console/Descriptor/TextDescriptor.php', - 'symfony\\component\\console\\descriptor\\xmldescriptor' => '/symfony/console/Symfony/Component/Console/Descriptor/XmlDescriptor.php', - 'symfony\\component\\console\\event\\consolecommandevent' => '/symfony/console/Symfony/Component/Console/Event/ConsoleCommandEvent.php', - 'symfony\\component\\console\\event\\consoleevent' => '/symfony/console/Symfony/Component/Console/Event/ConsoleEvent.php', - 'symfony\\component\\console\\event\\consoleexceptionevent' => '/symfony/console/Symfony/Component/Console/Event/ConsoleExceptionEvent.php', - 'symfony\\component\\console\\event\\consoleterminateevent' => '/symfony/console/Symfony/Component/Console/Event/ConsoleTerminateEvent.php', - 'symfony\\component\\console\\formatter\\outputformatter' => '/symfony/console/Symfony/Component/Console/Formatter/OutputFormatter.php', - 'symfony\\component\\console\\formatter\\outputformatterinterface' => '/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterInterface.php', - 'symfony\\component\\console\\formatter\\outputformatterstyle' => '/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterStyle.php', - 'symfony\\component\\console\\formatter\\outputformatterstyleinterface' => '/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterStyleInterface.php', - 'symfony\\component\\console\\formatter\\outputformatterstylestack' => '/symfony/console/Symfony/Component/Console/Formatter/OutputFormatterStyleStack.php', - 'symfony\\component\\console\\helper\\descriptorhelper' => '/symfony/console/Symfony/Component/Console/Helper/DescriptorHelper.php', - 'symfony\\component\\console\\helper\\dialoghelper' => '/symfony/console/Symfony/Component/Console/Helper/DialogHelper.php', - 'symfony\\component\\console\\helper\\formatterhelper' => '/symfony/console/Symfony/Component/Console/Helper/FormatterHelper.php', - 'symfony\\component\\console\\helper\\helper' => '/symfony/console/Symfony/Component/Console/Helper/Helper.php', - 'symfony\\component\\console\\helper\\helperinterface' => '/symfony/console/Symfony/Component/Console/Helper/HelperInterface.php', - 'symfony\\component\\console\\helper\\helperset' => '/symfony/console/Symfony/Component/Console/Helper/HelperSet.php', - 'symfony\\component\\console\\helper\\inputawarehelper' => '/symfony/console/Symfony/Component/Console/Helper/InputAwareHelper.php', - 'symfony\\component\\console\\helper\\progresshelper' => '/symfony/console/Symfony/Component/Console/Helper/ProgressHelper.php', - 'symfony\\component\\console\\helper\\tablehelper' => '/symfony/console/Symfony/Component/Console/Helper/TableHelper.php', - 'symfony\\component\\console\\input\\argvinput' => '/symfony/console/Symfony/Component/Console/Input/ArgvInput.php', - 'symfony\\component\\console\\input\\arrayinput' => '/symfony/console/Symfony/Component/Console/Input/ArrayInput.php', - 'symfony\\component\\console\\input\\input' => '/symfony/console/Symfony/Component/Console/Input/Input.php', - 'symfony\\component\\console\\input\\inputargument' => '/symfony/console/Symfony/Component/Console/Input/InputArgument.php', - 'symfony\\component\\console\\input\\inputawareinterface' => '/symfony/console/Symfony/Component/Console/Input/InputAwareInterface.php', - 'symfony\\component\\console\\input\\inputdefinition' => '/symfony/console/Symfony/Component/Console/Input/InputDefinition.php', - 'symfony\\component\\console\\input\\inputinterface' => '/symfony/console/Symfony/Component/Console/Input/InputInterface.php', - 'symfony\\component\\console\\input\\inputoption' => '/symfony/console/Symfony/Component/Console/Input/InputOption.php', - 'symfony\\component\\console\\input\\stringinput' => '/symfony/console/Symfony/Component/Console/Input/StringInput.php', - 'symfony\\component\\console\\output\\bufferedoutput' => '/symfony/console/Symfony/Component/Console/Output/BufferedOutput.php', - 'symfony\\component\\console\\output\\consoleoutput' => '/symfony/console/Symfony/Component/Console/Output/ConsoleOutput.php', - 'symfony\\component\\console\\output\\consoleoutputinterface' => '/symfony/console/Symfony/Component/Console/Output/ConsoleOutputInterface.php', - 'symfony\\component\\console\\output\\nulloutput' => '/symfony/console/Symfony/Component/Console/Output/NullOutput.php', - 'symfony\\component\\console\\output\\output' => '/symfony/console/Symfony/Component/Console/Output/Output.php', - 'symfony\\component\\console\\output\\outputinterface' => '/symfony/console/Symfony/Component/Console/Output/OutputInterface.php', - 'symfony\\component\\console\\output\\streamoutput' => '/symfony/console/Symfony/Component/Console/Output/StreamOutput.php', - 'symfony\\component\\console\\shell' => '/symfony/console/Symfony/Component/Console/Shell.php', - 'symfony\\component\\console\\tester\\applicationtester' => '/symfony/console/Symfony/Component/Console/Tester/ApplicationTester.php', - 'symfony\\component\\console\\tester\\commandtester' => '/symfony/console/Symfony/Component/Console/Tester/CommandTester.php', - 'symfony\\component\\finder\\adapter\\abstractadapter' => '/symfony/finder/Symfony/Component/Finder/Adapter/AbstractAdapter.php', - 'symfony\\component\\finder\\adapter\\abstractfindadapter' => '/symfony/finder/Symfony/Component/Finder/Adapter/AbstractFindAdapter.php', - 'symfony\\component\\finder\\adapter\\adapterinterface' => '/symfony/finder/Symfony/Component/Finder/Adapter/AdapterInterface.php', - 'symfony\\component\\finder\\adapter\\bsdfindadapter' => '/symfony/finder/Symfony/Component/Finder/Adapter/BsdFindAdapter.php', - 'symfony\\component\\finder\\adapter\\gnufindadapter' => '/symfony/finder/Symfony/Component/Finder/Adapter/GnuFindAdapter.php', - 'symfony\\component\\finder\\adapter\\phpadapter' => '/symfony/finder/Symfony/Component/Finder/Adapter/PhpAdapter.php', - 'symfony\\component\\finder\\comparator\\comparator' => '/symfony/finder/Symfony/Component/Finder/Comparator/Comparator.php', - 'symfony\\component\\finder\\comparator\\datecomparator' => '/symfony/finder/Symfony/Component/Finder/Comparator/DateComparator.php', - 'symfony\\component\\finder\\comparator\\numbercomparator' => '/symfony/finder/Symfony/Component/Finder/Comparator/NumberComparator.php', - 'symfony\\component\\finder\\exception\\accessdeniedexception' => '/symfony/finder/Symfony/Component/Finder/Exception/AccessDeniedException.php', - 'symfony\\component\\finder\\exception\\adapterfailureexception' => '/symfony/finder/Symfony/Component/Finder/Exception/AdapterFailureException.php', - 'symfony\\component\\finder\\exception\\exceptioninterface' => '/symfony/finder/Symfony/Component/Finder/Exception/ExceptionInterface.php', - 'symfony\\component\\finder\\exception\\operationnotpermitedexception' => '/symfony/finder/Symfony/Component/Finder/Exception/OperationNotPermitedException.php', - 'symfony\\component\\finder\\exception\\shellcommandfailureexception' => '/symfony/finder/Symfony/Component/Finder/Exception/ShellCommandFailureException.php', - 'symfony\\component\\finder\\expression\\expression' => '/symfony/finder/Symfony/Component/Finder/Expression/Expression.php', - 'symfony\\component\\finder\\expression\\glob' => '/symfony/finder/Symfony/Component/Finder/Expression/Glob.php', - 'symfony\\component\\finder\\expression\\regex' => '/symfony/finder/Symfony/Component/Finder/Expression/Regex.php', - 'symfony\\component\\finder\\expression\\valueinterface' => '/symfony/finder/Symfony/Component/Finder/Expression/ValueInterface.php', - 'symfony\\component\\finder\\finder' => '/symfony/finder/Symfony/Component/Finder/Finder.php', - 'symfony\\component\\finder\\glob' => '/symfony/finder/Symfony/Component/Finder/Glob.php', - 'symfony\\component\\finder\\iterator\\customfilteriterator' => '/symfony/finder/Symfony/Component/Finder/Iterator/CustomFilterIterator.php', - 'symfony\\component\\finder\\iterator\\daterangefilteriterator' => '/symfony/finder/Symfony/Component/Finder/Iterator/DateRangeFilterIterator.php', - 'symfony\\component\\finder\\iterator\\depthrangefilteriterator' => '/symfony/finder/Symfony/Component/Finder/Iterator/DepthRangeFilterIterator.php', - 'symfony\\component\\finder\\iterator\\excludedirectoryfilteriterator' => '/symfony/finder/Symfony/Component/Finder/Iterator/ExcludeDirectoryFilterIterator.php', - 'symfony\\component\\finder\\iterator\\filecontentfilteriterator' => '/symfony/finder/Symfony/Component/Finder/Iterator/FilecontentFilterIterator.php', - 'symfony\\component\\finder\\iterator\\filenamefilteriterator' => '/symfony/finder/Symfony/Component/Finder/Iterator/FilenameFilterIterator.php', - 'symfony\\component\\finder\\iterator\\filepathsiterator' => '/symfony/finder/Symfony/Component/Finder/Iterator/FilePathsIterator.php', - 'symfony\\component\\finder\\iterator\\filetypefilteriterator' => '/symfony/finder/Symfony/Component/Finder/Iterator/FileTypeFilterIterator.php', - 'symfony\\component\\finder\\iterator\\filteriterator' => '/symfony/finder/Symfony/Component/Finder/Iterator/FilterIterator.php', - 'symfony\\component\\finder\\iterator\\multiplepcrefilteriterator' => '/symfony/finder/Symfony/Component/Finder/Iterator/MultiplePcreFilterIterator.php', - 'symfony\\component\\finder\\iterator\\pathfilteriterator' => '/symfony/finder/Symfony/Component/Finder/Iterator/PathFilterIterator.php', - 'symfony\\component\\finder\\iterator\\recursivedirectoryiterator' => '/symfony/finder/Symfony/Component/Finder/Iterator/RecursiveDirectoryIterator.php', - 'symfony\\component\\finder\\iterator\\sizerangefilteriterator' => '/symfony/finder/Symfony/Component/Finder/Iterator/SizeRangeFilterIterator.php', - 'symfony\\component\\finder\\iterator\\sortableiterator' => '/symfony/finder/Symfony/Component/Finder/Iterator/SortableIterator.php', - 'symfony\\component\\finder\\shell\\command' => '/symfony/finder/Symfony/Component/Finder/Shell/Command.php', - 'symfony\\component\\finder\\shell\\shell' => '/symfony/finder/Symfony/Component/Finder/Shell/Shell.php', - 'symfony\\component\\finder\\splfileinfo' => '/symfony/finder/Symfony/Component/Finder/SplFileInfo.php', - 'symfony\\component\\yaml\\dumper' => '/symfony/yaml/Symfony/Component/Yaml/Dumper.php', - 'symfony\\component\\yaml\\escaper' => '/symfony/yaml/Symfony/Component/Yaml/Escaper.php', - 'symfony\\component\\yaml\\exception\\dumpexception' => '/symfony/yaml/Symfony/Component/Yaml/Exception/DumpException.php', - 'symfony\\component\\yaml\\exception\\exceptioninterface' => '/symfony/yaml/Symfony/Component/Yaml/Exception/ExceptionInterface.php', - 'symfony\\component\\yaml\\exception\\parseexception' => '/symfony/yaml/Symfony/Component/Yaml/Exception/ParseException.php', - 'symfony\\component\\yaml\\exception\\runtimeexception' => '/symfony/yaml/Symfony/Component/Yaml/Exception/RuntimeException.php', - 'symfony\\component\\yaml\\inline' => '/symfony/yaml/Symfony/Component/Yaml/Inline.php', - 'symfony\\component\\yaml\\parser' => '/symfony/yaml/Symfony/Component/Yaml/Parser.php', - 'symfony\\component\\yaml\\unescaper' => '/symfony/yaml/Symfony/Component/Yaml/Unescaper.php', - 'symfony\\component\\yaml\\yaml' => '/symfony/yaml/Symfony/Component/Yaml/Yaml.php', - 'theseer\\fdom\\css\\dollarequalrule' => '/fdomdocument/css/DollarEqualRule.php', - 'theseer\\fdom\\css\\notrule' => '/fdomdocument/css/NotRule.php', - 'theseer\\fdom\\css\\nthchildrule' => '/fdomdocument/css/NthChildRule.php', - 'theseer\\fdom\\css\\regexrule' => '/fdomdocument/css/RegexRule.php', - 'theseer\\fdom\\css\\ruleinterface' => '/fdomdocument/css/RuleInterface.php', - 'theseer\\fdom\\css\\translator' => '/fdomdocument/css/Translator.php', - 'theseer\\fdom\\fdomdocument' => '/fdomdocument/fDOMDocument.php', - 'theseer\\fdom\\fdomdocumentfragment' => '/fdomdocument/fDOMDocumentFragment.php', - 'theseer\\fdom\\fdomelement' => '/fdomdocument/fDOMElement.php', - 'theseer\\fdom\\fdomexception' => '/fdomdocument/fDOMException.php', - 'theseer\\fdom\\fdomnode' => '/fdomdocument/fDOMNode.php', - 'theseer\\fdom\\fdomxpath' => '/fdomdocument/fDOMXPath.php', - 'theseer\\fdom\\xpathquery' => '/fdomdocument/XPathQuery.php', - 'theseer\\fdom\\xpathqueryexception' => '/fdomdocument/XPathQueryException.php' - ); - } - - $class = strtolower($class); - - if (isset($classes[$class])) { - require 'phar://phpdcd-1.0.2.phar' . $classes[$class]; - } - } -); - -Phar::mapPhar('phpdcd-1.0.2.phar'); - -if (isset($_SERVER['argv'][1]) && $_SERVER['argv'][1] == '--manifest') { - print file_get_contents(__PHPDCD_PHAR_ROOT__ . '/manifest.txt'); - exit; -} - -$application = new SebastianBergmann\PHPDCD\CLI\Application; -$application->run(); - -__HALT_COMPILER(); ?> -³)|phpdcd-1.0.2.pharCsymfony/finder/Symfony/Component/Finder/Adapter/AbstractAdapter.php§\S… ¶Bsymfony/finder/Symfony/Component/Finder/Adapter/GnuFindAdapter.phpæ -§\Sæ -â}]¶Bsymfony/finder/Symfony/Component/Finder/Adapter/BsdFindAdapter.phpñ -§\Sñ -èÝkA¶Gsymfony/finder/Symfony/Component/Finder/Adapter/AbstractFindAdapter.php˜)§\S˜)QJ>symfony/finder/Symfony/Component/Finder/Adapter/PhpAdapter.php{ -§\S{ -9!2¶Dsymfony/finder/Symfony/Component/Finder/Adapter/AdapterInterface.php± §\S± Г¶0symfony/finder/Symfony/Component/Finder/Glob.phpb §\Sb œg@M¶Fsymfony/finder/Symfony/Component/Finder/Iterator/FilePathsIterator.php’ -§\S’ -¸›É”¶Ksymfony/finder/Symfony/Component/Finder/Iterator/FileTypeFilterIterator.phpb§\Sbýn ¶Esymfony/finder/Symfony/Component/Finder/Iterator/SortableIterator.phpñ §\Sñ þíjû¶Csymfony/finder/Symfony/Component/Finder/Iterator/FilterIterator.phpŸ§\SŸã½,G¶Nsymfony/finder/Symfony/Component/Finder/Iterator/FilecontentFilterIterator.phpž§\SžÂʽ¶Lsymfony/finder/Symfony/Component/Finder/Iterator/SizeRangeFilterIterator.php¥§\S¥x¹P»¶Ssymfony/finder/Symfony/Component/Finder/Iterator/ExcludeDirectoryFilterIterator.phpœ§\Sœ±d”¶Msymfony/finder/Symfony/Component/Finder/Iterator/DepthRangeFilterIterator.phpñ§\Sñils_¶Osymfony/finder/Symfony/Component/Finder/Iterator/MultiplePcreFilterIterator.phpî§\Sî - -²¶Osymfony/finder/Symfony/Component/Finder/Iterator/RecursiveDirectoryIterator.phpç §\Sç éŸ6s¶Ksymfony/finder/Symfony/Component/Finder/Iterator/FilenameFilterIterator.php½§\S½{à^ǶIsymfony/finder/Symfony/Component/Finder/Iterator/CustomFilterIterator.php§\S¼z"¶Gsymfony/finder/Symfony/Component/Finder/Iterator/PathFilterIterator.php¨§\S¨…±Æ)¶Lsymfony/finder/Symfony/Component/Finder/Iterator/DateRangeFilterIterator.phpµ§\Sµ ÎàU¶Gsymfony/finder/Symfony/Component/Finder/Comparator/NumberComparator.php -§\S -¾PÁ¶Asymfony/finder/Symfony/Component/Finder/Comparator/Comparator.php -§\S -|F z¶Esymfony/finder/Symfony/Component/Finder/Comparator/DateComparator.phpº§\Sº§ÓÑ ¶9symfony/finder/Symfony/Component/Finder/Shell/Command.php˜§\S˜5‹´K¶7symfony/finder/Symfony/Component/Finder/Shell/Shell.php…§\S…á4˵¶Ssymfony/finder/Symfony/Component/Finder/Exception/OperationNotPermitedException.php¢§\S¢P¶£™¶Msymfony/finder/Symfony/Component/Finder/Exception/AdapterFailureException.php§\S>Ã@¶Ksymfony/finder/Symfony/Component/Finder/Exception/AccessDeniedException.php«§\S«ÊcWÞ¶Hsymfony/finder/Symfony/Component/Finder/Exception/ExceptionInterface.phpï§\Sï€7¶Rsymfony/finder/Symfony/Component/Finder/Exception/ShellCommandFailureException.php9§\S9²¼¶2symfony/finder/Symfony/Component/Finder/Finder.phpÞV§\SÞV»d¶7symfony/finder/Symfony/Component/Finder/SplFileInfo.php§\Sþ59¶Esymfony/finder/Symfony/Component/Finder/Expression/ValueInterface.phpH§\SHÐø"¶;symfony/finder/Symfony/Component/Finder/Expression/Glob.php§\SŠE±¶Asymfony/finder/Symfony/Component/Finder/Expression/Expression.php& -§\S& - 뇶<symfony/finder/Symfony/Component/Finder/Expression/Regex.php§\S¶É(Ú¶,symfony/yaml/Symfony/Component/Yaml/Yaml.php §\S 7MÓº¶/symfony/yaml/Symfony/Component/Yaml/Escaper.phpm §\Sm )%È,¶.symfony/yaml/Symfony/Component/Yaml/Parser.php–[§\S–[û¿X½¶.symfony/yaml/Symfony/Component/Yaml/Dumper.php” §\S” 8¹n¶1symfony/yaml/Symfony/Component/Yaml/Unescaper.phpŸ§\SŸ6£H ¶?symfony/yaml/Symfony/Component/Yaml/Exception/DumpException.phpÒ§\SÒؙ՚¶Dsymfony/yaml/Symfony/Component/Yaml/Exception/ExceptionInterface.phpƧ\SÆî+­l¶@symfony/yaml/Symfony/Component/Yaml/Exception/ParseException.phpî §\Sî ®¿œ›¶Bsymfony/yaml/Symfony/Component/Yaml/Exception/RuntimeException.phpð§\SðÏ|-¶.symfony/yaml/Symfony/Component/Yaml/Inline.php£?§\S£?q+Î3¶;symfony/console/Symfony/Component/Console/ConsoleEvents.phpø§\Sø\0ÂE¶Gsymfony/console/Symfony/Component/Console/Formatter/OutputFormatter.phpŧ\SůŒlì¶Psymfony/console/Symfony/Component/Console/Formatter/OutputFormatterInterface.phpã§\SãJpù˶Lsymfony/console/Symfony/Component/Console/Formatter/OutputFormatterStyle.php&§\S&oÇŒŒ¶Usymfony/console/Symfony/Component/Console/Formatter/OutputFormatterStyleInterface.phpŸ§\SŸ5¦¶Qsymfony/console/Symfony/Component/Console/Formatter/OutputFormatterStyleStack.phpä -§\Sä -ùv ª¶Dsymfony/console/Symfony/Component/Console/Helper/HelperInterface.phpó§\Só z…׶Dsymfony/console/Symfony/Component/Console/Helper/FormatterHelper.php¼§\S¼g¶se¶@symfony/console/Symfony/Component/Console/Helper/TableHelper.php2§\S2ë¡¿¶Esymfony/console/Symfony/Component/Console/Helper/DescriptorHelper.php -§\S -"U¥1¶Esymfony/console/Symfony/Component/Console/Helper/InputAwareHelper.phpë§\Sësß H¶Csymfony/console/Symfony/Component/Console/Helper/ProgressHelper.phpo.§\So.|p¶Asymfony/console/Symfony/Component/Console/Helper/DialogHelper.php>@§\S>@&â¶;symfony/console/Symfony/Component/Console/Helper/Helper.php«§\S«Z\§¶>symfony/console/Symfony/Component/Console/Helper/HelperSet.phpÞ §\SÞ •¹¶Bsymfony/console/Symfony/Component/Console/Tester/CommandTester.php§\S~H(R¶Fsymfony/console/Symfony/Component/Console/Tester/ApplicationTester.phpf §\Sf ƒhr¥¶Ksymfony/console/Symfony/Component/Console/Output/ConsoleOutputInterface.phpK§\SKìÅ0ž¶;symfony/console/Symfony/Component/Console/Output/Output.php;§\S;séÁQ¶Asymfony/console/Symfony/Component/Console/Output/StreamOutput.phpM §\SM Œ,Q«¶Bsymfony/console/Symfony/Component/Console/Output/ConsoleOutput.php} §\S} Ãϱ¶?symfony/console/Symfony/Component/Console/Output/NullOutput.phpÔ§\SÔF£$_¶Csymfony/console/Symfony/Component/Console/Output/BufferedOutput.phph§\Sht|X4¶Dsymfony/console/Symfony/Component/Console/Output/OutputInterface.phpM §\SM ŽÕzˆ¶Csymfony/console/Symfony/Component/Console/Descriptor/Descriptor.php¼ §\S¼ ‰mª¶Fsymfony/console/Symfony/Component/Console/Descriptor/XmlDescriptor.phpð%§\Sð%ﶲͶGsymfony/console/Symfony/Component/Console/Descriptor/TextDescriptor.phpø§\Sø¹ø¶Ksymfony/console/Symfony/Component/Console/Descriptor/MarkdownDescriptor.php.§\S.ªlP¾¶Osymfony/console/Symfony/Component/Console/Descriptor/ApplicationDescription.php¹ §\S¹ ¿s¤X¶Gsymfony/console/Symfony/Component/Console/Descriptor/JsonDescriptor.phpu§\SuD„®¶Lsymfony/console/Symfony/Component/Console/Descriptor/DescriptorInterface.phpá§\SáJZ0<¶Isymfony/console/Symfony/Component/Console/Event/ConsoleTerminateEvent.php&§\S&´Z–¤¶@symfony/console/Symfony/Component/Console/Event/ConsoleEvent.php¸§\S¸¾õ -ž¶Gsymfony/console/Symfony/Component/Console/Event/ConsoleCommandEvent.phpÀ§\SÀ||-&¶Isymfony/console/Symfony/Component/Console/Event/ConsoleExceptionEvent.phpA§\SAs¤K¶>symfony/console/Symfony/Component/Console/Input/ArrayInput.php%§\S%p¶²—¶?symfony/console/Symfony/Component/Console/Input/StringInput.phpû -§\Sû -«Î‚=¶Csymfony/console/Symfony/Component/Console/Input/InputDefinition.php(0§\S(01áE¶Bsymfony/console/Symfony/Component/Console/Input/InputInterface.php6§\S6ÅAM¶Asymfony/console/Symfony/Component/Console/Input/InputArgument.php× §\S× ‚š'¶Gsymfony/console/Symfony/Component/Console/Input/InputAwareInterface.php^§\S^9Kèh¶?symfony/console/Symfony/Component/Console/Input/InputOption.phpV§\SV¬ÓOö9symfony/console/Symfony/Component/Console/Input/Input.php§\Sgm(¶=symfony/console/Symfony/Component/Console/Input/ArgvInput.php¸)§\S¸)ÑQ¶Asymfony/console/Symfony/Component/Console/Command/HelpCommand.php_ -§\S_ -’m¶=symfony/console/Symfony/Component/Console/Command/Command.php7@§\S7@ðƘª¶Asymfony/console/Symfony/Component/Console/Command/ListCommand.phpÀ -§\SÀ - x­¶9symfony/console/Symfony/Component/Console/Application.phpÒŠ§\SÒŠ­LûU¶3symfony/console/Symfony/Component/Console/Shell.phpû§\Sû2V¶src/Log/Text.php §\S nÙ¶Ú¶src/Analyser.phpE7§\SE7Ë0Qð¶src/Detector.phpá§\SáwHx?¶src/CLI/Command.php&§\S&âUIñ¶src/CLI/Application.php,§\S,<»U¶ manifest.txtÔ§\SԜʵͶversion/Version.php §\S YÓ ¶finder-facade/FinderFacade.phpѧ\SÑÕ­±¶finder-facade/Configuration.php{§\S{r˜¡¾¶fdomdocument/fDOMElement.php@0§\S@0œÛ,G¶fdomdocument/fDOMNode.phpí§\Sí¢ו¶fdomdocument/XPathQuery.phpj§\Sj€÷–¶fdomdocument/css/NotRule.php˜§\S˜ª!8_¶fdomdocument/css/Translator.php‚§\S‚0²L3¶!fdomdocument/css/NthChildRule.phpk§\Skf²]œ¶fdomdocument/css/RegexRule.phpǧ\SÇù®s¶$fdomdocument/css/DollarEqualRule.phpw§\Sw} ض"fdomdocument/css/RuleInterface.phpЧ\SÐÎ,—á¶fdomdocument/fDOMXPath.phpç§\S窮<[¶$fdomdocument/XPathQueryException.phpø§\SøÙÖ¶fdomdocument/fDOMException.php¨§\S¨BÕ%¶fdomdocument/autoload.php¾§\S¾!åH¶fdomdocument/fDOMDocument.php¯R§\S¯Re?¶%fdomdocument/fDOMDocumentFragment.php: §\S: §<še¶php-timer/Timer.php6§\S6#X6ñ¶0php-token-stream/Token/Stream/CachingFactory.phpø §\Sø Ó’Õ¶!php-token-stream/Token/Stream.phpuD§\SuDršSͶphp-token-stream/Token.php\§\S\C2ÿ}¶ - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Adapter; - -/** - * Interface for finder engine implementations. - * - * @author Jean-François Simon - */ -abstract class AbstractAdapter implements AdapterInterface -{ - protected $followLinks = false; - protected $mode = 0; - protected $minDepth = 0; - protected $maxDepth = PHP_INT_MAX; - protected $exclude = array(); - protected $names = array(); - protected $notNames = array(); - protected $contains = array(); - protected $notContains = array(); - protected $sizes = array(); - protected $dates = array(); - protected $filters = array(); - protected $sort = false; - protected $paths = array(); - protected $notPaths = array(); - protected $ignoreUnreadableDirs = false; - - private static $areSupported = array(); - - /** - * {@inheritDoc} - */ - public function isSupported() - { - $name = $this->getName(); - - if (!array_key_exists($name, self::$areSupported)) { - self::$areSupported[$name] = $this->canBeUsed(); - } - - return self::$areSupported[$name]; - } - - /** - * {@inheritdoc} - */ - public function setFollowLinks($followLinks) - { - $this->followLinks = $followLinks; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setMode($mode) - { - $this->mode = $mode; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setDepths(array $depths) - { - $this->minDepth = 0; - $this->maxDepth = PHP_INT_MAX; - - foreach ($depths as $comparator) { - switch ($comparator->getOperator()) { - case '>': - $this->minDepth = $comparator->getTarget() + 1; - break; - case '>=': - $this->minDepth = $comparator->getTarget(); - break; - case '<': - $this->maxDepth = $comparator->getTarget() - 1; - break; - case '<=': - $this->maxDepth = $comparator->getTarget(); - break; - default: - $this->minDepth = $this->maxDepth = $comparator->getTarget(); - } - } - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setExclude(array $exclude) - { - $this->exclude = $exclude; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setNames(array $names) - { - $this->names = $names; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setNotNames(array $notNames) - { - $this->notNames = $notNames; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setContains(array $contains) - { - $this->contains = $contains; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setNotContains(array $notContains) - { - $this->notContains = $notContains; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setSizes(array $sizes) - { - $this->sizes = $sizes; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setDates(array $dates) - { - $this->dates = $dates; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setFilters(array $filters) - { - $this->filters = $filters; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setSort($sort) - { - $this->sort = $sort; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setPath(array $paths) - { - $this->paths = $paths; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setNotPath(array $notPaths) - { - $this->notPaths = $notPaths; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function ignoreUnreadableDirs($ignore = true) - { - $this->ignoreUnreadableDirs = (Boolean) $ignore; - - return $this; - } - - /** - * Returns whether the adapter is supported in the current environment. - * - * This method should be implemented in all adapters. Do not implement - * isSupported in the adapters as the generic implementation provides a cache - * layer. - * - * @see isSupported - * - * @return Boolean Whether the adapter is supported - */ - abstract protected function canBeUsed(); -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Adapter; - -use Symfony\Component\Finder\Shell\Shell; -use Symfony\Component\Finder\Shell\Command; -use Symfony\Component\Finder\Iterator\SortableIterator; -use Symfony\Component\Finder\Expression\Expression; - -/** - * Shell engine implementation using GNU find command. - * - * @author Jean-François Simon - */ -class GnuFindAdapter extends AbstractFindAdapter -{ - /** - * {@inheritdoc} - */ - public function getName() - { - return 'gnu_find'; - } - - /** - * {@inheritdoc} - */ - protected function buildFormatSorting(Command $command, $sort) - { - switch ($sort) { - case SortableIterator::SORT_BY_NAME: - $command->ins('sort')->add('| sort'); - - return; - case SortableIterator::SORT_BY_TYPE: - $format = '%y'; - break; - case SortableIterator::SORT_BY_ACCESSED_TIME: - $format = '%A@'; - break; - case SortableIterator::SORT_BY_CHANGED_TIME: - $format = '%C@'; - break; - case SortableIterator::SORT_BY_MODIFIED_TIME: - $format = '%T@'; - break; - default: - throw new \InvalidArgumentException(sprintf('Unknown sort options: %s.', $sort)); - } - - $command - ->get('find') - ->add('-printf') - ->arg($format.' %h/%f\\n') - ->add('| sort | cut') - ->arg('-d ') - ->arg('-f2-') - ; - } - - /** - * {@inheritdoc} - */ - protected function canBeUsed() - { - return $this->shell->getType() === Shell::TYPE_UNIX && parent::canBeUsed(); - } - - /** - * {@inheritdoc} - */ - protected function buildFindCommand(Command $command, $dir) - { - return parent::buildFindCommand($command, $dir)->add('-regextype posix-extended'); - } - - /** - * {@inheritdoc} - */ - protected function buildContentFiltering(Command $command, array $contains, $not = false) - { - foreach ($contains as $contain) { - $expr = Expression::create($contain); - - // todo: avoid forking process for each $pattern by using multiple -e options - $command - ->add('| xargs -I{} -r grep -I') - ->add($expr->isCaseSensitive() ? null : '-i') - ->add($not ? '-L' : '-l') - ->add('-Ee')->arg($expr->renderPattern()) - ->add('{}') - ; - } - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Adapter; - -use Symfony\Component\Finder\Shell\Shell; -use Symfony\Component\Finder\Shell\Command; -use Symfony\Component\Finder\Iterator\SortableIterator; -use Symfony\Component\Finder\Expression\Expression; - -/** - * Shell engine implementation using BSD find command. - * - * @author Jean-François Simon - */ -class BsdFindAdapter extends AbstractFindAdapter -{ - /** - * {@inheritdoc} - */ - public function getName() - { - return 'bsd_find'; - } - - /** - * {@inheritdoc} - */ - protected function canBeUsed() - { - return in_array($this->shell->getType(), array(Shell::TYPE_BSD, Shell::TYPE_DARWIN)) && parent::canBeUsed(); - } - - /** - * {@inheritdoc} - */ - protected function buildFormatSorting(Command $command, $sort) - { - switch ($sort) { - case SortableIterator::SORT_BY_NAME: - $command->ins('sort')->add('| sort'); - - return; - case SortableIterator::SORT_BY_TYPE: - $format = '%HT'; - break; - case SortableIterator::SORT_BY_ACCESSED_TIME: - $format = '%a'; - break; - case SortableIterator::SORT_BY_CHANGED_TIME: - $format = '%c'; - break; - case SortableIterator::SORT_BY_MODIFIED_TIME: - $format = '%m'; - break; - default: - throw new \InvalidArgumentException(sprintf('Unknown sort options: %s.', $sort)); - } - - $command - ->add('-print0 | xargs -0 stat -f') - ->arg($format.'%t%N') - ->add('| sort | cut -f 2'); - } - - /** - * {@inheritdoc} - */ - protected function buildFindCommand(Command $command, $dir) - { - parent::buildFindCommand($command, $dir)->addAtIndex('-E', 1); - - return $command; - } - - /** - * {@inheritdoc} - */ - protected function buildContentFiltering(Command $command, array $contains, $not = false) - { - foreach ($contains as $contain) { - $expr = Expression::create($contain); - - // todo: avoid forking process for each $pattern by using multiple -e options - $command - ->add('| grep -v \'^$\'') - ->add('| xargs -I{} grep -I') - ->add($expr->isCaseSensitive() ? null : '-i') - ->add($not ? '-L' : '-l') - ->add('-Ee')->arg($expr->renderPattern()) - ->add('{}') - ; - } - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Adapter; - -use Symfony\Component\Finder\Exception\AccessDeniedException; -use Symfony\Component\Finder\Iterator; -use Symfony\Component\Finder\Shell\Shell; -use Symfony\Component\Finder\Expression\Expression; -use Symfony\Component\Finder\Shell\Command; -use Symfony\Component\Finder\Iterator\SortableIterator; -use Symfony\Component\Finder\Comparator\NumberComparator; -use Symfony\Component\Finder\Comparator\DateComparator; - -/** - * Shell engine implementation using GNU find command. - * - * @author Jean-François Simon - */ -abstract class AbstractFindAdapter extends AbstractAdapter -{ - /** - * @var Shell - */ - protected $shell; - - /** - * Constructor. - */ - public function __construct() - { - $this->shell = new Shell(); - } - - /** - * {@inheritdoc} - */ - public function searchInDirectory($dir) - { - // having "/../" in path make find fail - $dir = realpath($dir); - - // searching directories containing or not containing strings leads to no result - if (Iterator\FileTypeFilterIterator::ONLY_DIRECTORIES === $this->mode && ($this->contains || $this->notContains)) { - return new Iterator\FilePathsIterator(array(), $dir); - } - - $command = Command::create(); - $find = $this->buildFindCommand($command, $dir); - - if ($this->followLinks) { - $find->add('-follow'); - } - - $find->add('-mindepth')->add($this->minDepth + 1); - - if (PHP_INT_MAX !== $this->maxDepth) { - $find->add('-maxdepth')->add($this->maxDepth + 1); - } - - if (Iterator\FileTypeFilterIterator::ONLY_DIRECTORIES === $this->mode) { - $find->add('-type d'); - } elseif (Iterator\FileTypeFilterIterator::ONLY_FILES === $this->mode) { - $find->add('-type f'); - } - - $this->buildNamesFiltering($find, $this->names); - $this->buildNamesFiltering($find, $this->notNames, true); - $this->buildPathsFiltering($find, $dir, $this->paths); - $this->buildPathsFiltering($find, $dir, $this->notPaths, true); - $this->buildSizesFiltering($find, $this->sizes); - $this->buildDatesFiltering($find, $this->dates); - - $useGrep = $this->shell->testCommand('grep') && $this->shell->testCommand('xargs'); - $useSort = is_int($this->sort) && $this->shell->testCommand('sort') && $this->shell->testCommand('cut'); - - if ($useGrep && ($this->contains || $this->notContains)) { - $grep = $command->ins('grep'); - $this->buildContentFiltering($grep, $this->contains); - $this->buildContentFiltering($grep, $this->notContains, true); - } - - if ($useSort) { - $this->buildSorting($command, $this->sort); - } - - $command->setErrorHandler( - $this->ignoreUnreadableDirs - // If directory is unreadable and finder is set to ignore it, `stderr` is ignored. - ? function ($stderr) { return; } - : function ($stderr) { throw new AccessDeniedException($stderr); } - ); - - $paths = $this->shell->testCommand('uniq') ? $command->add('| uniq')->execute() : array_unique($command->execute()); - $iterator = new Iterator\FilePathsIterator($paths, $dir); - - if ($this->exclude) { - $iterator = new Iterator\ExcludeDirectoryFilterIterator($iterator, $this->exclude); - } - - if (!$useGrep && ($this->contains || $this->notContains)) { - $iterator = new Iterator\FilecontentFilterIterator($iterator, $this->contains, $this->notContains); - } - - if ($this->filters) { - $iterator = new Iterator\CustomFilterIterator($iterator, $this->filters); - } - - if (!$useSort && $this->sort) { - $iteratorAggregate = new Iterator\SortableIterator($iterator, $this->sort); - $iterator = $iteratorAggregate->getIterator(); - } - - return $iterator; - } - - /** - * {@inheritdoc} - */ - protected function canBeUsed() - { - return $this->shell->testCommand('find'); - } - - /** - * @param Command $command - * @param string $dir - * - * @return Command - */ - protected function buildFindCommand(Command $command, $dir) - { - return $command - ->ins('find') - ->add('find ') - ->arg($dir) - ->add('-noleaf'); // the -noleaf option is required for filesystems that don't follow the '.' and '..' conventions - } - - /** - * @param Command $command - * @param string[] $names - * @param Boolean $not - */ - private function buildNamesFiltering(Command $command, array $names, $not = false) - { - if (0 === count($names)) { - return; - } - - $command->add($not ? '-not' : null)->cmd('('); - - foreach ($names as $i => $name) { - $expr = Expression::create($name); - - // Find does not support expandable globs ("*.{a,b}" syntax). - if ($expr->isGlob() && $expr->getGlob()->isExpandable()) { - $expr = Expression::create($expr->getGlob()->toRegex(false)); - } - - // Fixes 'not search' and 'full path matching' regex problems. - // - Jokers '.' are replaced by [^/]. - // - We add '[^/]*' before and after regex (if no ^|$ flags are present). - if ($expr->isRegex()) { - $regex = $expr->getRegex(); - $regex->prepend($regex->hasStartFlag() ? '/' : '/[^/]*') - ->setStartFlag(false) - ->setStartJoker(true) - ->replaceJokers('[^/]'); - if (!$regex->hasEndFlag() || $regex->hasEndJoker()) { - $regex->setEndJoker(false)->append('[^/]*'); - } - } - - $command - ->add($i > 0 ? '-or' : null) - ->add($expr->isRegex() - ? ($expr->isCaseSensitive() ? '-regex' : '-iregex') - : ($expr->isCaseSensitive() ? '-name' : '-iname') - ) - ->arg($expr->renderPattern()); - } - - $command->cmd(')'); - } - - /** - * @param Command $command - * @param string $dir - * @param string[] $paths - * @param Boolean $not - */ - private function buildPathsFiltering(Command $command, $dir, array $paths, $not = false) - { - if (0 === count($paths)) { - return; - } - - $command->add($not ? '-not' : null)->cmd('('); - - foreach ($paths as $i => $path) { - $expr = Expression::create($path); - - // Find does not support expandable globs ("*.{a,b}" syntax). - if ($expr->isGlob() && $expr->getGlob()->isExpandable()) { - $expr = Expression::create($expr->getGlob()->toRegex(false)); - } - - // Fixes 'not search' regex problems. - if ($expr->isRegex()) { - $regex = $expr->getRegex(); - $regex->prepend($regex->hasStartFlag() ? $dir.DIRECTORY_SEPARATOR : '.*')->setEndJoker(!$regex->hasEndFlag()); - } else { - $expr->prepend('*')->append('*'); - } - - $command - ->add($i > 0 ? '-or' : null) - ->add($expr->isRegex() - ? ($expr->isCaseSensitive() ? '-regex' : '-iregex') - : ($expr->isCaseSensitive() ? '-path' : '-ipath') - ) - ->arg($expr->renderPattern()); - } - - $command->cmd(')'); - } - - /** - * @param Command $command - * @param NumberComparator[] $sizes - */ - private function buildSizesFiltering(Command $command, array $sizes) - { - foreach ($sizes as $i => $size) { - $command->add($i > 0 ? '-and' : null); - - switch ($size->getOperator()) { - case '<=': - $command->add('-size -'.($size->getTarget() + 1).'c'); - break; - case '>=': - $command->add('-size +'. ($size->getTarget() - 1).'c'); - break; - case '>': - $command->add('-size +'.$size->getTarget().'c'); - break; - case '!=': - $command->add('-size -'.$size->getTarget().'c'); - $command->add('-size +'.$size->getTarget().'c'); - case '<': - default: - $command->add('-size -'.$size->getTarget().'c'); - } - } - } - - /** - * @param Command $command - * @param DateComparator[] $dates - */ - private function buildDatesFiltering(Command $command, array $dates) - { - foreach ($dates as $i => $date) { - $command->add($i > 0 ? '-and' : null); - - $mins = (int) round((time()-$date->getTarget()) / 60); - - if (0 > $mins) { - // mtime is in the future - $command->add(' -mmin -0'); - // we will have no result so we don't need to continue - return; - } - - switch ($date->getOperator()) { - case '<=': - $command->add('-mmin +'.($mins - 1)); - break; - case '>=': - $command->add('-mmin -'.($mins + 1)); - break; - case '>': - $command->add('-mmin -'.$mins); - break; - case '!=': - $command->add('-mmin +'.$mins.' -or -mmin -'.$mins); - break; - case '<': - default: - $command->add('-mmin +'.$mins); - } - } - } - - /** - * @param Command $command - * @param string $sort - * - * @throws \InvalidArgumentException - */ - private function buildSorting(Command $command, $sort) - { - $this->buildFormatSorting($command, $sort); - } - - /** - * @param Command $command - * @param string $sort - */ - abstract protected function buildFormatSorting(Command $command, $sort); - - /** - * @param Command $command - * @param array $contains - * @param Boolean $not - */ - abstract protected function buildContentFiltering(Command $command, array $contains, $not = false); -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Adapter; - -use Symfony\Component\Finder\Iterator; - -/** - * PHP finder engine implementation. - * - * @author Jean-François Simon - */ -class PhpAdapter extends AbstractAdapter -{ - /** - * {@inheritdoc} - */ - public function searchInDirectory($dir) - { - $flags = \RecursiveDirectoryIterator::SKIP_DOTS; - - if ($this->followLinks) { - $flags |= \RecursiveDirectoryIterator::FOLLOW_SYMLINKS; - } - - $iterator = new \RecursiveIteratorIterator( - new Iterator\RecursiveDirectoryIterator($dir, $flags, $this->ignoreUnreadableDirs), - \RecursiveIteratorIterator::SELF_FIRST - ); - - if ($this->minDepth > 0 || $this->maxDepth < PHP_INT_MAX) { - $iterator = new Iterator\DepthRangeFilterIterator($iterator, $this->minDepth, $this->maxDepth); - } - - if ($this->mode) { - $iterator = new Iterator\FileTypeFilterIterator($iterator, $this->mode); - } - - if ($this->exclude) { - $iterator = new Iterator\ExcludeDirectoryFilterIterator($iterator, $this->exclude); - } - - if ($this->names || $this->notNames) { - $iterator = new Iterator\FilenameFilterIterator($iterator, $this->names, $this->notNames); - } - - if ($this->contains || $this->notContains) { - $iterator = new Iterator\FilecontentFilterIterator($iterator, $this->contains, $this->notContains); - } - - if ($this->sizes) { - $iterator = new Iterator\SizeRangeFilterIterator($iterator, $this->sizes); - } - - if ($this->dates) { - $iterator = new Iterator\DateRangeFilterIterator($iterator, $this->dates); - } - - if ($this->filters) { - $iterator = new Iterator\CustomFilterIterator($iterator, $this->filters); - } - - if ($this->sort) { - $iteratorAggregate = new Iterator\SortableIterator($iterator, $this->sort); - $iterator = $iteratorAggregate->getIterator(); - } - - if ($this->paths || $this->notPaths) { - $iterator = new Iterator\PathFilterIterator($iterator, $this->paths, $this->notPaths); - } - - return $iterator; - } - - /** - * {@inheritdoc} - */ - public function getName() - { - return 'php'; - } - - /** - * {@inheritdoc} - */ - protected function canBeUsed() - { - return true; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Adapter; - -/** - * @author Jean-François Simon - */ -interface AdapterInterface -{ - /** - * @param Boolean $followLinks - * - * @return AdapterInterface Current instance - */ - public function setFollowLinks($followLinks); - - /** - * @param integer $mode - * - * @return AdapterInterface Current instance - */ - public function setMode($mode); - - /** - * @param array $exclude - * - * @return AdapterInterface Current instance - */ - public function setExclude(array $exclude); - - /** - * @param array $depths - * - * @return AdapterInterface Current instance - */ - public function setDepths(array $depths); - - /** - * @param array $names - * - * @return AdapterInterface Current instance - */ - public function setNames(array $names); - - /** - * @param array $notNames - * - * @return AdapterInterface Current instance - */ - public function setNotNames(array $notNames); - - /** - * @param array $contains - * - * @return AdapterInterface Current instance - */ - public function setContains(array $contains); - - /** - * @param array $notContains - * - * @return AdapterInterface Current instance - */ - public function setNotContains(array $notContains); - - /** - * @param array $sizes - * - * @return AdapterInterface Current instance - */ - public function setSizes(array $sizes); - - /** - * @param array $dates - * - * @return AdapterInterface Current instance - */ - public function setDates(array $dates); - - /** - * @param array $filters - * - * @return AdapterInterface Current instance - */ - public function setFilters(array $filters); - - /** - * @param \Closure|integer $sort - * - * @return AdapterInterface Current instance - */ - public function setSort($sort); - - /** - * @param array $paths - * - * @return AdapterInterface Current instance - */ - public function setPath(array $paths); - - /** - * @param array $notPaths - * - * @return AdapterInterface Current instance - */ - public function setNotPath(array $notPaths); - - /** - * @param boolean $ignore - * - * @return AdapterInterface Current instance - */ - public function ignoreUnreadableDirs($ignore = true); - - /** - * @param string $dir - * - * @return \Iterator Result iterator - */ - public function searchInDirectory($dir); - - /** - * Tests adapter support for current platform. - * - * @return Boolean - */ - public function isSupported(); - - /** - * Returns adapter name. - * - * @return string - */ - public function getName(); -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder; - -/** - * Glob matches globbing patterns against text. - * - * if match_glob("foo.*", "foo.bar") echo "matched\n"; - * - * // prints foo.bar and foo.baz - * $regex = glob_to_regex("foo.*"); - * for (array('foo.bar', 'foo.baz', 'foo', 'bar') as $t) - * { - * if (/$regex/) echo "matched: $car\n"; - * } - * - * Glob implements glob(3) style matching that can be used to match - * against text, rather than fetching names from a filesystem. - * - * Based on the Perl Text::Glob module. - * - * @author Fabien Potencier PHP port - * @author Richard Clamp Perl version - * @copyright 2004-2005 Fabien Potencier - * @copyright 2002 Richard Clamp - */ -class Glob -{ - /** - * Returns a regexp which is the equivalent of the glob pattern. - * - * @param string $glob The glob pattern - * @param Boolean $strictLeadingDot - * @param Boolean $strictWildcardSlash - * - * @return string regex The regexp - */ - public static function toRegex($glob, $strictLeadingDot = true, $strictWildcardSlash = true) - { - $firstByte = true; - $escaping = false; - $inCurlies = 0; - $regex = ''; - $sizeGlob = strlen($glob); - for ($i = 0; $i < $sizeGlob; $i++) { - $car = $glob[$i]; - if ($firstByte) { - if ($strictLeadingDot && '.' !== $car) { - $regex .= '(?=[^\.])'; - } - - $firstByte = false; - } - - if ('/' === $car) { - $firstByte = true; - } - - if ('.' === $car || '(' === $car || ')' === $car || '|' === $car || '+' === $car || '^' === $car || '$' === $car) { - $regex .= "\\$car"; - } elseif ('*' === $car) { - $regex .= $escaping ? '\\*' : ($strictWildcardSlash ? '[^/]*' : '.*'); - } elseif ('?' === $car) { - $regex .= $escaping ? '\\?' : ($strictWildcardSlash ? '[^/]' : '.'); - } elseif ('{' === $car) { - $regex .= $escaping ? '\\{' : '('; - if (!$escaping) { - ++$inCurlies; - } - } elseif ('}' === $car && $inCurlies) { - $regex .= $escaping ? '}' : ')'; - if (!$escaping) { - --$inCurlies; - } - } elseif (',' === $car && $inCurlies) { - $regex .= $escaping ? ',' : '|'; - } elseif ('\\' === $car) { - if ($escaping) { - $regex .= '\\\\'; - $escaping = false; - } else { - $escaping = true; - } - - continue; - } else { - $regex .= $car; - } - $escaping = false; - } - - return '#^'.$regex.'$#'; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\SplFileInfo; - -/** - * Iterate over shell command result. - * - * @author Jean-François Simon - */ -class FilePathsIterator extends \ArrayIterator -{ - /** - * @var string - */ - private $baseDir; - - /** - * @var int - */ - private $baseDirLength; - - /** - * @var string - */ - private $subPath; - - /** - * @var string - */ - private $subPathname; - - /** - * @var SplFileInfo - */ - private $current; - - /** - * @param array $paths List of paths returned by shell command - * @param string $baseDir Base dir for relative path building - */ - public function __construct(array $paths, $baseDir) - { - $this->baseDir = $baseDir; - $this->baseDirLength = strlen($baseDir); - - parent::__construct($paths); - } - - /** - * @param string $name - * @param array $arguments - * - * @return mixed - */ - public function __call($name, array $arguments) - { - return call_user_func_array(array($this->current(), $name), $arguments); - } - - /** - * Return an instance of SplFileInfo with support for relative paths. - * - * @return SplFileInfo File information - */ - public function current() - { - return $this->current; - } - - /** - * @return string - */ - public function key() - { - return $this->current->getPathname(); - } - - public function next() - { - parent::next(); - $this->buildProperties(); - } - - public function rewind() - { - parent::rewind(); - $this->buildProperties(); - } - - /** - * @return string - */ - public function getSubPath() - { - return $this->subPath; - } - - /** - * @return string - */ - public function getSubPathname() - { - return $this->subPathname; - } - - private function buildProperties() - { - $absolutePath = parent::current(); - - if ($this->baseDir === substr($absolutePath, 0, $this->baseDirLength)) { - $this->subPathname = ltrim(substr($absolutePath, $this->baseDirLength), '/\\'); - $dir = dirname($this->subPathname); - $this->subPath = '.' === $dir ? '' : $dir; - } else { - $this->subPath = $this->subPathname = ''; - } - - $this->current = new SplFileInfo(parent::current(), $this->subPath, $this->subPathname); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * FileTypeFilterIterator only keeps files, directories, or both. - * - * @author Fabien Potencier - */ -class FileTypeFilterIterator extends FilterIterator -{ - const ONLY_FILES = 1; - const ONLY_DIRECTORIES = 2; - - private $mode; - - /** - * Constructor. - * - * @param \Iterator $iterator The Iterator to filter - * @param integer $mode The mode (self::ONLY_FILES or self::ONLY_DIRECTORIES) - */ - public function __construct(\Iterator $iterator, $mode) - { - $this->mode = $mode; - - parent::__construct($iterator); - } - - /** - * Filters the iterator values. - * - * @return Boolean true if the value should be kept, false otherwise - */ - public function accept() - { - $fileinfo = $this->current(); - if (self::ONLY_DIRECTORIES === (self::ONLY_DIRECTORIES & $this->mode) && $fileinfo->isFile()) { - return false; - } elseif (self::ONLY_FILES === (self::ONLY_FILES & $this->mode) && $fileinfo->isDir()) { - return false; - } - - return true; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * SortableIterator applies a sort on a given Iterator. - * - * @author Fabien Potencier - */ -class SortableIterator implements \IteratorAggregate -{ - const SORT_BY_NAME = 1; - const SORT_BY_TYPE = 2; - const SORT_BY_ACCESSED_TIME = 3; - const SORT_BY_CHANGED_TIME = 4; - const SORT_BY_MODIFIED_TIME = 5; - - private $iterator; - private $sort; - - /** - * Constructor. - * - * @param \Traversable $iterator The Iterator to filter - * @param integer|callback $sort The sort type (SORT_BY_NAME, SORT_BY_TYPE, or a PHP callback) - * - * @throws \InvalidArgumentException - */ - public function __construct(\Traversable $iterator, $sort) - { - $this->iterator = $iterator; - - if (self::SORT_BY_NAME === $sort) { - $this->sort = function ($a, $b) { - return strcmp($a->getRealpath(), $b->getRealpath()); - }; - } elseif (self::SORT_BY_TYPE === $sort) { - $this->sort = function ($a, $b) { - if ($a->isDir() && $b->isFile()) { - return -1; - } elseif ($a->isFile() && $b->isDir()) { - return 1; - } - - return strcmp($a->getRealpath(), $b->getRealpath()); - }; - } elseif (self::SORT_BY_ACCESSED_TIME === $sort) { - $this->sort = function ($a, $b) { - return ($a->getATime() > $b->getATime()); - }; - } elseif (self::SORT_BY_CHANGED_TIME === $sort) { - $this->sort = function ($a, $b) { - return ($a->getCTime() > $b->getCTime()); - }; - } elseif (self::SORT_BY_MODIFIED_TIME === $sort) { - $this->sort = function ($a, $b) { - return ($a->getMTime() > $b->getMTime()); - }; - } elseif (is_callable($sort)) { - $this->sort = $sort; - } else { - throw new \InvalidArgumentException('The SortableIterator takes a PHP callback or a valid built-in sort algorithm as an argument.'); - } - } - - public function getIterator() - { - $array = iterator_to_array($this->iterator, true); - uasort($array, $this->sort); - - return new \ArrayIterator($array); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * This iterator just overrides the rewind method in order to correct a PHP bug. - * - * @see https://bugs.php.net/bug.php?id=49104 - * - * @author Alex Bogomazov - */ -abstract class FilterIterator extends \FilterIterator -{ - /** - * This is a workaround for the problem with \FilterIterator leaving inner \FilesystemIterator in wrong state after - * rewind in some cases. - * - * @see FilterIterator::rewind() - */ - public function rewind() - { - $iterator = $this; - while ($iterator instanceof \OuterIterator) { - $innerIterator = $iterator->getInnerIterator(); - - if ($innerIterator instanceof RecursiveDirectoryIterator) { - if ($innerIterator->isRewindable()) { - $innerIterator->next(); - $innerIterator->rewind(); - } - } elseif ($iterator->getInnerIterator() instanceof \FilesystemIterator) { - $iterator->getInnerIterator()->next(); - $iterator->getInnerIterator()->rewind(); - } - $iterator = $iterator->getInnerIterator(); - } - - parent::rewind(); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * FilecontentFilterIterator filters files by their contents using patterns (regexps or strings). - * - * @author Fabien Potencier - * @author WÅ‚odzimierz Gajda - */ -class FilecontentFilterIterator extends MultiplePcreFilterIterator -{ - /** - * Filters the iterator values. - * - * @return Boolean true if the value should be kept, false otherwise - */ - public function accept() - { - if (!$this->matchRegexps && !$this->noMatchRegexps) { - return true; - } - - $fileinfo = $this->current(); - - if ($fileinfo->isDir() || !$fileinfo->isReadable()) { - return false; - } - - $content = $fileinfo->getContents(); - if (!$content) { - return false; - } - - // should at least not match one rule to exclude - foreach ($this->noMatchRegexps as $regex) { - if (preg_match($regex, $content)) { - return false; - } - } - - // should at least match one rule - $match = true; - if ($this->matchRegexps) { - $match = false; - foreach ($this->matchRegexps as $regex) { - if (preg_match($regex, $content)) { - return true; - } - } - } - - return $match; - } - - /** - * Converts string to regexp if necessary. - * - * @param string $str Pattern: string or regexp - * - * @return string regexp corresponding to a given string or regexp - */ - protected function toRegex($str) - { - return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/'; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\Comparator\NumberComparator; - -/** - * SizeRangeFilterIterator filters out files that are not in the given size range. - * - * @author Fabien Potencier - */ -class SizeRangeFilterIterator extends FilterIterator -{ - private $comparators = array(); - - /** - * Constructor. - * - * @param \Iterator $iterator The Iterator to filter - * @param NumberComparator[] $comparators An array of NumberComparator instances - */ - public function __construct(\Iterator $iterator, array $comparators) - { - $this->comparators = $comparators; - - parent::__construct($iterator); - } - - /** - * Filters the iterator values. - * - * @return Boolean true if the value should be kept, false otherwise - */ - public function accept() - { - $fileinfo = $this->current(); - if (!$fileinfo->isFile()) { - return true; - } - - $filesize = $fileinfo->getSize(); - foreach ($this->comparators as $compare) { - if (!$compare->test($filesize)) { - return false; - } - } - - return true; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * ExcludeDirectoryFilterIterator filters out directories. - * - * @author Fabien Potencier - */ -class ExcludeDirectoryFilterIterator extends FilterIterator -{ - private $patterns = array(); - - /** - * Constructor. - * - * @param \Iterator $iterator The Iterator to filter - * @param array $directories An array of directories to exclude - */ - public function __construct(\Iterator $iterator, array $directories) - { - foreach ($directories as $directory) { - $this->patterns[] = '#(^|/)'.preg_quote($directory, '#').'(/|$)#'; - } - - parent::__construct($iterator); - } - - /** - * Filters the iterator values. - * - * @return Boolean true if the value should be kept, false otherwise - */ - public function accept() - { - $path = $this->isDir() ? $this->current()->getRelativePathname() : $this->current()->getRelativePath(); - $path = strtr($path, '\\', '/'); - foreach ($this->patterns as $pattern) { - if (preg_match($pattern, $path)) { - return false; - } - } - - return true; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * DepthRangeFilterIterator limits the directory depth. - * - * @author Fabien Potencier - */ -class DepthRangeFilterIterator extends FilterIterator -{ - private $minDepth = 0; - - /** - * Constructor. - * - * @param \RecursiveIteratorIterator $iterator The Iterator to filter - * @param int $minDepth The min depth - * @param int $maxDepth The max depth - */ - public function __construct(\RecursiveIteratorIterator $iterator, $minDepth = 0, $maxDepth = PHP_INT_MAX) - { - $this->minDepth = $minDepth; - $iterator->setMaxDepth(PHP_INT_MAX === $maxDepth ? -1 : $maxDepth); - - parent::__construct($iterator); - } - - /** - * Filters the iterator values. - * - * @return Boolean true if the value should be kept, false otherwise - */ - public function accept() - { - return $this->getInnerIterator()->getDepth() >= $this->minDepth; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\Expression\Expression; - -/** - * MultiplePcreFilterIterator filters files using patterns (regexps, globs or strings). - * - * @author Fabien Potencier - */ -abstract class MultiplePcreFilterIterator extends FilterIterator -{ - protected $matchRegexps = array(); - protected $noMatchRegexps = array(); - - /** - * Constructor. - * - * @param \Iterator $iterator The Iterator to filter - * @param array $matchPatterns An array of patterns that need to match - * @param array $noMatchPatterns An array of patterns that need to not match - */ - public function __construct(\Iterator $iterator, array $matchPatterns, array $noMatchPatterns) - { - foreach ($matchPatterns as $pattern) { - $this->matchRegexps[] = $this->toRegex($pattern); - } - - foreach ($noMatchPatterns as $pattern) { - $this->noMatchRegexps[] = $this->toRegex($pattern); - } - - parent::__construct($iterator); - } - - /** - * Checks whether the string is a regex. - * - * @param string $str - * - * @return Boolean Whether the given string is a regex - */ - protected function isRegex($str) - { - return Expression::create($str)->isRegex(); - } - - /** - * Converts string into regexp. - * - * @param string $str Pattern - * - * @return string regexp corresponding to a given string - */ - abstract protected function toRegex($str); -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\Exception\AccessDeniedException; -use Symfony\Component\Finder\SplFileInfo; - -/** - * Extends the \RecursiveDirectoryIterator to support relative paths - * - * @author Victor Berchet - */ -class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator -{ - /** - * @var boolean - */ - private $ignoreUnreadableDirs; - - /** - * @var Boolean - */ - private $rewindable; - - /** - * Constructor. - * - * @param string $path - * @param int $flags - * @param boolean $ignoreUnreadableDirs - * - * @throws \RuntimeException - */ - public function __construct($path, $flags, $ignoreUnreadableDirs = false) - { - if ($flags & (self::CURRENT_AS_PATHNAME | self::CURRENT_AS_SELF)) { - throw new \RuntimeException('This iterator only support returning current as fileinfo.'); - } - - parent::__construct($path, $flags); - $this->ignoreUnreadableDirs = $ignoreUnreadableDirs; - } - - /** - * Return an instance of SplFileInfo with support for relative paths - * - * @return SplFileInfo File information - */ - public function current() - { - return new SplFileInfo(parent::current()->getPathname(), $this->getSubPath(), $this->getSubPathname()); - } - - /** - * @return \RecursiveIterator - * - * @throws AccessDeniedException - */ - public function getChildren() - { - try { - return parent::getChildren(); - } catch (\UnexpectedValueException $e) { - if ($this->ignoreUnreadableDirs) { - // If directory is unreadable and finder is set to ignore it, a fake empty content is returned. - return new \RecursiveArrayIterator(array()); - } else { - throw new AccessDeniedException($e->getMessage(), $e->getCode(), $e); - } - } - } - - /** - * Do nothing for non rewindable stream - */ - public function rewind() - { - if (false === $this->isRewindable()) { - return; - } - - // @see https://bugs.php.net/bug.php?id=49104 - parent::next(); - - parent::rewind(); - } - - /** - * Checks if the stream is rewindable. - * - * @return Boolean true when the stream is rewindable, false otherwise - */ - public function isRewindable() - { - if (null !== $this->rewindable) { - return $this->rewindable; - } - - if (false !== $stream = @opendir($this->getPath())) { - $infos = stream_get_meta_data($stream); - closedir($stream); - - if ($infos['seekable']) { - return $this->rewindable = true; - } - } - - return $this->rewindable = false; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\Expression\Expression; - -/** - * FilenameFilterIterator filters files by patterns (a regexp, a glob, or a string). - * - * @author Fabien Potencier - */ -class FilenameFilterIterator extends MultiplePcreFilterIterator -{ - - /** - * Filters the iterator values. - * - * @return Boolean true if the value should be kept, false otherwise - */ - public function accept() - { - $filename = $this->current()->getFilename(); - - // should at least not match one rule to exclude - foreach ($this->noMatchRegexps as $regex) { - if (preg_match($regex, $filename)) { - return false; - } - } - - // should at least match one rule - $match = true; - if ($this->matchRegexps) { - $match = false; - foreach ($this->matchRegexps as $regex) { - if (preg_match($regex, $filename)) { - return true; - } - } - } - - return $match; - } - - /** - * Converts glob to regexp. - * - * PCRE patterns are left unchanged. - * Glob strings are transformed with Glob::toRegex(). - * - * @param string $str Pattern: glob or regexp - * - * @return string regexp corresponding to a given glob or regexp - */ - protected function toRegex($str) - { - return Expression::create($str)->getRegex()->render(); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * CustomFilterIterator filters files by applying anonymous functions. - * - * The anonymous function receives a \SplFileInfo and must return false - * to remove files. - * - * @author Fabien Potencier - */ -class CustomFilterIterator extends FilterIterator -{ - private $filters = array(); - - /** - * Constructor. - * - * @param \Iterator $iterator The Iterator to filter - * @param array $filters An array of PHP callbacks - * - * @throws \InvalidArgumentException - */ - public function __construct(\Iterator $iterator, array $filters) - { - foreach ($filters as $filter) { - if (!is_callable($filter)) { - throw new \InvalidArgumentException('Invalid PHP callback.'); - } - } - $this->filters = $filters; - - parent::__construct($iterator); - } - - /** - * Filters the iterator values. - * - * @return Boolean true if the value should be kept, false otherwise - */ - public function accept() - { - $fileinfo = $this->current(); - - foreach ($this->filters as $filter) { - if (false === call_user_func($filter, $fileinfo)) { - return false; - } - } - - return true; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * PathFilterIterator filters files by path patterns (e.g. some/special/dir). - * - * @author Fabien Potencier - * @author WÅ‚odzimierz Gajda - */ -class PathFilterIterator extends MultiplePcreFilterIterator -{ - - /** - * Filters the iterator values. - * - * @return Boolean true if the value should be kept, false otherwise - */ - public function accept() - { - $filename = $this->current()->getRelativePathname(); - - if (defined('PHP_WINDOWS_VERSION_MAJOR')) { - $filename = strtr($filename, '\\', '/'); - } - - // should at least not match one rule to exclude - foreach ($this->noMatchRegexps as $regex) { - if (preg_match($regex, $filename)) { - return false; - } - } - - // should at least match one rule - $match = true; - if ($this->matchRegexps) { - $match = false; - foreach ($this->matchRegexps as $regex) { - if (preg_match($regex, $filename)) { - return true; - } - } - } - - return $match; - } - - /** - * Converts strings to regexp. - * - * PCRE patterns are left unchanged. - * - * Default conversion: - * 'lorem/ipsum/dolor' ==> 'lorem\/ipsum\/dolor/' - * - * Use only / as directory separator (on Windows also). - * - * @param string $str Pattern: regexp or dirname. - * - * @return string regexp corresponding to a given string or regexp - */ - protected function toRegex($str) - { - return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/'; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\Comparator\DateComparator; - -/** - * DateRangeFilterIterator filters out files that are not in the given date range (last modified dates). - * - * @author Fabien Potencier - */ -class DateRangeFilterIterator extends FilterIterator -{ - private $comparators = array(); - - /** - * Constructor. - * - * @param \Iterator $iterator The Iterator to filter - * @param DateComparator[] $comparators An array of DateComparator instances - */ - public function __construct(\Iterator $iterator, array $comparators) - { - $this->comparators = $comparators; - - parent::__construct($iterator); - } - - /** - * Filters the iterator values. - * - * @return Boolean true if the value should be kept, false otherwise - */ - public function accept() - { - $fileinfo = $this->current(); - - if (!$fileinfo->isFile()) { - return true; - } - - $filedate = $fileinfo->getMTime(); - foreach ($this->comparators as $compare) { - if (!$compare->test($filedate)) { - return false; - } - } - - return true; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Comparator; - -/** - * NumberComparator compiles a simple comparison to an anonymous - * subroutine, which you can call with a value to be tested again. - * - * Now this would be very pointless, if NumberCompare didn't understand - * magnitudes. - * - * The target value may use magnitudes of kilobytes (k, ki), - * megabytes (m, mi), or gigabytes (g, gi). Those suffixed - * with an i use the appropriate 2**n version in accordance with the - * IEC standard: http://physics.nist.gov/cuu/Units/binary.html - * - * Based on the Perl Number::Compare module. - * - * @author Fabien Potencier PHP port - * @author Richard Clamp Perl version - * - * @copyright 2004-2005 Fabien Potencier - * @copyright 2002 Richard Clamp - * - * @see http://physics.nist.gov/cuu/Units/binary.html - */ -class NumberComparator extends Comparator -{ - /** - * Constructor. - * - * @param string $test A comparison string - * - * @throws \InvalidArgumentException If the test is not understood - */ - public function __construct($test) - { - if (!preg_match('#^\s*(==|!=|[<>]=?)?\s*([0-9\.]+)\s*([kmg]i?)?\s*$#i', $test, $matches)) { - throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a number test.', $test)); - } - - $target = $matches[2]; - if (!is_numeric($target)) { - throw new \InvalidArgumentException(sprintf('Invalid number "%s".', $target)); - } - if (isset($matches[3])) { - // magnitude - switch (strtolower($matches[3])) { - case 'k': - $target *= 1000; - break; - case 'ki': - $target *= 1024; - break; - case 'm': - $target *= 1000000; - break; - case 'mi': - $target *= 1024*1024; - break; - case 'g': - $target *= 1000000000; - break; - case 'gi': - $target *= 1024*1024*1024; - break; - } - } - - $this->setTarget($target); - $this->setOperator(isset($matches[1]) ? $matches[1] : '=='); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Comparator; - -/** - * Comparator. - * - * @author Fabien Potencier - */ -class Comparator -{ - private $target; - private $operator = '=='; - - /** - * Gets the target value. - * - * @return string The target value - */ - public function getTarget() - { - return $this->target; - } - - /** - * Sets the target value. - * - * @param string $target The target value - */ - public function setTarget($target) - { - $this->target = $target; - } - - /** - * Gets the comparison operator. - * - * @return string The operator - */ - public function getOperator() - { - return $this->operator; - } - - /** - * Sets the comparison operator. - * - * @param string $operator A valid operator - * - * @throws \InvalidArgumentException - */ - public function setOperator($operator) - { - if (!$operator) { - $operator = '=='; - } - - if (!in_array($operator, array('>', '<', '>=', '<=', '==', '!='))) { - throw new \InvalidArgumentException(sprintf('Invalid operator "%s".', $operator)); - } - - $this->operator = $operator; - } - - /** - * Tests against the target. - * - * @param mixed $test A test value - * - * @return Boolean - */ - public function test($test) - { - switch ($this->operator) { - case '>': - return $test > $this->target; - case '>=': - return $test >= $this->target; - case '<': - return $test < $this->target; - case '<=': - return $test <= $this->target; - case '!=': - return $test != $this->target; - } - - return $test == $this->target; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Comparator; - -/** - * DateCompare compiles date comparisons. - * - * @author Fabien Potencier - */ -class DateComparator extends Comparator -{ - - /** - * Constructor. - * - * @param string $test A comparison string - * - * @throws \InvalidArgumentException If the test is not understood - */ - public function __construct($test) - { - if (!preg_match('#^\s*(==|!=|[<>]=?|after|since|before|until)?\s*(.+?)\s*$#i', $test, $matches)) { - throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a date test.', $test)); - } - - try { - $date = new \DateTime($matches[2]); - $target = $date->format('U'); - } catch (\Exception $e) { - throw new \InvalidArgumentException(sprintf('"%s" is not a valid date.', $matches[2])); - } - - $operator = isset($matches[1]) ? $matches[1] : '=='; - if ('since' === $operator || 'after' === $operator) { - $operator = '>'; - } - - if ('until' === $operator || 'before' === $operator) { - $operator = '<'; - } - - $this->setOperator($operator); - $this->setTarget($target); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Shell; - -/** - * @author Jean-François Simon - */ -class Command -{ - /** - * @var Command|null - */ - private $parent; - - /** - * @var array - */ - private $bits = array(); - - /** - * @var array - */ - private $labels = array(); - - /** - * @var \Closure|null - */ - private $errorHandler; - - /** - * Constructor. - * - * @param Command|null $parent Parent command - */ - public function __construct(Command $parent = null) - { - $this->parent = $parent; - } - - /** - * Returns command as string. - * - * @return string - */ - public function __toString() - { - return $this->join(); - } - - /** - * Creates a new Command instance. - * - * @param Command|null $parent Parent command - * - * @return Command New Command instance - */ - public static function create(Command $parent = null) - { - return new self($parent); - } - - /** - * Escapes special chars from input. - * - * @param string $input A string to escape - * - * @return string The escaped string - */ - public static function escape($input) - { - return escapeshellcmd($input); - } - - /** - * Quotes input. - * - * @param string $input An argument string - * - * @return string The quoted string - */ - public static function quote($input) - { - return escapeshellarg($input); - } - - /** - * Appends a string or a Command instance. - * - * @param string|Command $bit - * - * @return Command The current Command instance - */ - public function add($bit) - { - $this->bits[] = $bit; - - return $this; - } - - /** - * Prepends a string or a command instance. - * - * @param string|Command $bit - * - * @return Command The current Command instance - */ - public function top($bit) - { - array_unshift($this->bits, $bit); - - foreach ($this->labels as $label => $index) { - $this->labels[$label] += 1; - } - - return $this; - } - - /** - * Appends an argument, will be quoted. - * - * @param string $arg - * - * @return Command The current Command instance - */ - public function arg($arg) - { - $this->bits[] = self::quote($arg); - - return $this; - } - - /** - * Appends escaped special command chars. - * - * @param string $esc - * - * @return Command The current Command instance - */ - public function cmd($esc) - { - $this->bits[] = self::escape($esc); - - return $this; - } - - /** - * Inserts a labeled command to feed later. - * - * @param string $label The unique label - * - * @return Command The current Command instance - * - * @throws \RuntimeException If label already exists - */ - public function ins($label) - { - if (isset($this->labels[$label])) { - throw new \RuntimeException(sprintf('Label "%s" already exists.', $label)); - } - - $this->bits[] = self::create($this); - $this->labels[$label] = count($this->bits)-1; - - return $this->bits[$this->labels[$label]]; - } - - /** - * Retrieves a previously labeled command. - * - * @param string $label - * - * @return Command The labeled command - * - * @throws \RuntimeException - */ - public function get($label) - { - if (!isset($this->labels[$label])) { - throw new \RuntimeException(sprintf('Label "%s" does not exist.', $label)); - } - - return $this->bits[$this->labels[$label]]; - } - - /** - * Returns parent command (if any). - * - * @return Command Parent command - * - * @throws \RuntimeException If command has no parent - */ - public function end() - { - if (null === $this->parent) { - throw new \RuntimeException('Calling end on root command doesn\'t make sense.'); - } - - return $this->parent; - } - - /** - * Counts bits stored in command. - * - * @return int The bits count - */ - public function length() - { - return count($this->bits); - } - - /** - * @param \Closure $errorHandler - * - * @return Command - */ - public function setErrorHandler(\Closure $errorHandler) - { - $this->errorHandler = $errorHandler; - - return $this; - } - - /** - * @return \Closure|null - */ - public function getErrorHandler() - { - return $this->errorHandler; - } - - /** - * Executes current command. - * - * @return array The command result - * - * @throws \RuntimeException - */ - public function execute() - { - if (null === $this->errorHandler) { - exec($this->join(), $output); - } else { - $process = proc_open($this->join(), array(0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'w')), $pipes); - $output = preg_split('~(\r\n|\r|\n)~', stream_get_contents($pipes[1]), -1, PREG_SPLIT_NO_EMPTY); - - if ($error = stream_get_contents($pipes[2])) { - call_user_func($this->errorHandler, $error); - } - - proc_close($process); - } - - return $output ?: array(); - } - - /** - * Joins bits. - * - * @return string - */ - public function join() - { - return implode(' ', array_filter( - array_map(function ($bit) { - return $bit instanceof Command ? $bit->join() : ($bit ?: null); - }, $this->bits), - function ($bit) { return null !== $bit; } - )); - } - - /** - * Insert a string or a Command instance before the bit at given position $index (index starts from 0). - * - * @param string|Command $bit - * @param integer $index - * - * @return Command The current Command instance - */ - public function addAtIndex($bit, $index) - { - array_splice($this->bits, $index, 0, $bit); - - return $this; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Shell; - -/** - * @author Jean-François Simon - */ -class Shell -{ - const TYPE_UNIX = 1; - const TYPE_DARWIN = 2; - const TYPE_CYGWIN = 3; - const TYPE_WINDOWS = 4; - const TYPE_BSD = 5; - - /** - * @var string|null - */ - private $type; - - /** - * Returns guessed OS type. - * - * @return int - */ - public function getType() - { - if (null === $this->type) { - $this->type = $this->guessType(); - } - - return $this->type; - } - - /** - * Tests if a command is available. - * - * @param string $command - * - * @return bool - */ - public function testCommand($command) - { - if (self::TYPE_WINDOWS === $this->type) { - // todo: find a way to test if Windows command exists - return false; - } - - if (!function_exists('exec')) { - return false; - } - - // todo: find a better way (command could not be available) - exec('command -v '.$command, $output, $code); - - return 0 === $code && count($output) > 0; - } - - /** - * Guesses OS type. - * - * @return int - */ - private function guessType() - { - $os = strtolower(PHP_OS); - - if (false !== strpos($os, 'cygwin')) { - return self::TYPE_CYGWIN; - } - - if (false !== strpos($os, 'darwin')) { - return self::TYPE_DARWIN; - } - - if (false !== strpos($os, 'bsd')) { - return self::TYPE_BSD; - } - - if (0 === strpos($os, 'win')) { - return self::TYPE_WINDOWS; - } - - return self::TYPE_UNIX; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Exception; - -/** - * @author Jean-François Simon - */ -class OperationNotPermitedException extends AdapterFailureException -{ -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Exception; - -use Symfony\Component\Finder\Adapter\AdapterInterface; - -/** - * Base exception for all adapter failures. - * - * @author Jean-François Simon - */ -class AdapterFailureException extends \RuntimeException implements ExceptionInterface -{ - /** - * @var \Symfony\Component\Finder\Adapter\AdapterInterface - */ - private $adapter; - - /** - * @param AdapterInterface $adapter - * @param string|null $message - * @param \Exception|null $previous - */ - public function __construct(AdapterInterface $adapter, $message = null, \Exception $previous = null) - { - $this->adapter = $adapter; - parent::__construct($message ?: 'Search failed with "'.$adapter->getName().'" adapter.', $previous); - } - - /** - * {@inheritdoc} - */ - public function getAdapter() - { - return $this->adapter; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Exception; - -/** - * @author Jean-François Simon - */ -class AccessDeniedException extends \UnexpectedValueException -{ -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Exception; - -/** - * @author Jean-François Simon - */ -interface ExceptionInterface -{ - /** - * @return \Symfony\Component\Finder\Adapter\AdapterInterface - */ - public function getAdapter(); -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Exception; - -use Symfony\Component\Finder\Adapter\AdapterInterface; -use Symfony\Component\Finder\Shell\Command; - -/** - * @author Jean-François Simon - */ -class ShellCommandFailureException extends AdapterFailureException -{ - /** - * @var Command - */ - private $command; - - /** - * @param AdapterInterface $adapter - * @param Command $command - * @param \Exception|null $previous - */ - public function __construct(AdapterInterface $adapter, Command $command, \Exception $previous = null) - { - $this->command = $command; - parent::__construct($adapter, 'Shell command failed: "'.$command->join().'".', $previous); - } - - /** - * @return Command - */ - public function getCommand() - { - return $this->command; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder; - -use Symfony\Component\Finder\Adapter\AdapterInterface; -use Symfony\Component\Finder\Adapter\GnuFindAdapter; -use Symfony\Component\Finder\Adapter\BsdFindAdapter; -use Symfony\Component\Finder\Adapter\PhpAdapter; -use Symfony\Component\Finder\Exception\ExceptionInterface; - -/** - * Finder allows to build rules to find files and directories. - * - * It is a thin wrapper around several specialized iterator classes. - * - * All rules may be invoked several times. - * - * All methods return the current Finder object to allow easy chaining: - * - * $finder = Finder::create()->files()->name('*.php')->in(__DIR__); - * - * @author Fabien Potencier - * - * @api - */ -class Finder implements \IteratorAggregate, \Countable -{ - const IGNORE_VCS_FILES = 1; - const IGNORE_DOT_FILES = 2; - - private $mode = 0; - private $names = array(); - private $notNames = array(); - private $exclude = array(); - private $filters = array(); - private $depths = array(); - private $sizes = array(); - private $followLinks = false; - private $sort = false; - private $ignore = 0; - private $dirs = array(); - private $dates = array(); - private $iterators = array(); - private $contains = array(); - private $notContains = array(); - private $adapters = array(); - private $paths = array(); - private $notPaths = array(); - private $ignoreUnreadableDirs = false; - - private static $vcsPatterns = array('.svn', '_svn', 'CVS', '_darcs', '.arch-params', '.monotone', '.bzr', '.git', '.hg'); - - /** - * Constructor. - */ - public function __construct() - { - $this->ignore = static::IGNORE_VCS_FILES | static::IGNORE_DOT_FILES; - - $this - ->addAdapter(new GnuFindAdapter()) - ->addAdapter(new BsdFindAdapter()) - ->addAdapter(new PhpAdapter(), -50) - ->setAdapter('php') - ; - } - - /** - * Creates a new Finder. - * - * @return Finder A new Finder instance - * - * @api - */ - public static function create() - { - return new static(); - } - - /** - * Registers a finder engine implementation. - * - * @param AdapterInterface $adapter An adapter instance - * @param integer $priority Highest is selected first - * - * @return Finder The current Finder instance - */ - public function addAdapter(Adapter\AdapterInterface $adapter, $priority = 0) - { - $this->adapters[$adapter->getName()] = array( - 'adapter' => $adapter, - 'priority' => $priority, - 'selected' => false, - ); - - return $this->sortAdapters(); - } - - /** - * Sets the selected adapter to the best one according to the current platform the code is run on. - * - * @return Finder The current Finder instance - */ - public function useBestAdapter() - { - $this->resetAdapterSelection(); - - return $this->sortAdapters(); - } - - /** - * Selects the adapter to use. - * - * @param string $name - * - * @throws \InvalidArgumentException - * - * @return Finder The current Finder instance - */ - public function setAdapter($name) - { - if (!isset($this->adapters[$name])) { - throw new \InvalidArgumentException(sprintf('Adapter "%s" does not exist.', $name)); - } - - $this->resetAdapterSelection(); - $this->adapters[$name]['selected'] = true; - - return $this->sortAdapters(); - } - - /** - * Removes all adapters registered in the finder. - * - * @return Finder The current Finder instance - */ - public function removeAdapters() - { - $this->adapters = array(); - - return $this; - } - - /** - * Returns registered adapters ordered by priority without extra information. - * - * @return AdapterInterface[] - */ - public function getAdapters() - { - return array_values(array_map(function (array $adapter) { - return $adapter['adapter']; - }, $this->adapters)); - } - - /** - * Restricts the matching to directories only. - * - * @return Finder The current Finder instance - * - * @api - */ - public function directories() - { - $this->mode = Iterator\FileTypeFilterIterator::ONLY_DIRECTORIES; - - return $this; - } - - /** - * Restricts the matching to files only. - * - * @return Finder The current Finder instance - * - * @api - */ - public function files() - { - $this->mode = Iterator\FileTypeFilterIterator::ONLY_FILES; - - return $this; - } - - /** - * Adds tests for the directory depth. - * - * Usage: - * - * $finder->depth('> 1') // the Finder will start matching at level 1. - * $finder->depth('< 3') // the Finder will descend at most 3 levels of directories below the starting point. - * - * @param int $level The depth level expression - * - * @return Finder The current Finder instance - * - * @see Symfony\Component\Finder\Iterator\DepthRangeFilterIterator - * @see Symfony\Component\Finder\Comparator\NumberComparator - * - * @api - */ - public function depth($level) - { - $this->depths[] = new Comparator\NumberComparator($level); - - return $this; - } - - /** - * Adds tests for file dates (last modified). - * - * The date must be something that strtotime() is able to parse: - * - * $finder->date('since yesterday'); - * $finder->date('until 2 days ago'); - * $finder->date('> now - 2 hours'); - * $finder->date('>= 2005-10-15'); - * - * @param string $date A date rage string - * - * @return Finder The current Finder instance - * - * @see strtotime - * @see Symfony\Component\Finder\Iterator\DateRangeFilterIterator - * @see Symfony\Component\Finder\Comparator\DateComparator - * - * @api - */ - public function date($date) - { - $this->dates[] = new Comparator\DateComparator($date); - - return $this; - } - - /** - * Adds rules that files must match. - * - * You can use patterns (delimited with / sign), globs or simple strings. - * - * $finder->name('*.php') - * $finder->name('/\.php$/') // same as above - * $finder->name('test.php') - * - * @param string $pattern A pattern (a regexp, a glob, or a string) - * - * @return Finder The current Finder instance - * - * @see Symfony\Component\Finder\Iterator\FilenameFilterIterator - * - * @api - */ - public function name($pattern) - { - $this->names[] = $pattern; - - return $this; - } - - /** - * Adds rules that files must not match. - * - * @param string $pattern A pattern (a regexp, a glob, or a string) - * - * @return Finder The current Finder instance - * - * @see Symfony\Component\Finder\Iterator\FilenameFilterIterator - * - * @api - */ - public function notName($pattern) - { - $this->notNames[] = $pattern; - - return $this; - } - - /** - * Adds tests that file contents must match. - * - * Strings or PCRE patterns can be used: - * - * $finder->contains('Lorem ipsum') - * $finder->contains('/Lorem ipsum/i') - * - * @param string $pattern A pattern (string or regexp) - * - * @return Finder The current Finder instance - * - * @see Symfony\Component\Finder\Iterator\FilecontentFilterIterator - */ - public function contains($pattern) - { - $this->contains[] = $pattern; - - return $this; - } - - /** - * Adds tests that file contents must not match. - * - * Strings or PCRE patterns can be used: - * - * $finder->notContains('Lorem ipsum') - * $finder->notContains('/Lorem ipsum/i') - * - * @param string $pattern A pattern (string or regexp) - * - * @return Finder The current Finder instance - * - * @see Symfony\Component\Finder\Iterator\FilecontentFilterIterator - */ - public function notContains($pattern) - { - $this->notContains[] = $pattern; - - return $this; - } - - /** - * Adds rules that filenames must match. - * - * You can use patterns (delimited with / sign) or simple strings. - * - * $finder->path('some/special/dir') - * $finder->path('/some\/special\/dir/') // same as above - * - * Use only / as dirname separator. - * - * @param string $pattern A pattern (a regexp or a string) - * - * @return Finder The current Finder instance - * - * @see Symfony\Component\Finder\Iterator\FilenameFilterIterator - */ - public function path($pattern) - { - $this->paths[] = $pattern; - - return $this; - } - - /** - * Adds rules that filenames must not match. - * - * You can use patterns (delimited with / sign) or simple strings. - * - * $finder->notPath('some/special/dir') - * $finder->notPath('/some\/special\/dir/') // same as above - * - * Use only / as dirname separator. - * - * @param string $pattern A pattern (a regexp or a string) - * - * @return Finder The current Finder instance - * - * @see Symfony\Component\Finder\Iterator\FilenameFilterIterator - */ - public function notPath($pattern) - { - $this->notPaths[] = $pattern; - - return $this; - } - - /** - * Adds tests for file sizes. - * - * $finder->size('> 10K'); - * $finder->size('<= 1Ki'); - * $finder->size(4); - * - * @param string $size A size range string - * - * @return Finder The current Finder instance - * - * @see Symfony\Component\Finder\Iterator\SizeRangeFilterIterator - * @see Symfony\Component\Finder\Comparator\NumberComparator - * - * @api - */ - public function size($size) - { - $this->sizes[] = new Comparator\NumberComparator($size); - - return $this; - } - - /** - * Excludes directories. - * - * @param string|array $dirs A directory path or an array of directories - * - * @return Finder The current Finder instance - * - * @see Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator - * - * @api - */ - public function exclude($dirs) - { - $this->exclude = array_merge($this->exclude, (array) $dirs); - - return $this; - } - - /** - * Excludes "hidden" directories and files (starting with a dot). - * - * @param Boolean $ignoreDotFiles Whether to exclude "hidden" files or not - * - * @return Finder The current Finder instance - * - * @see Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator - * - * @api - */ - public function ignoreDotFiles($ignoreDotFiles) - { - if ($ignoreDotFiles) { - $this->ignore = $this->ignore | static::IGNORE_DOT_FILES; - } else { - $this->ignore = $this->ignore & ~static::IGNORE_DOT_FILES; - } - - return $this; - } - - /** - * Forces the finder to ignore version control directories. - * - * @param Boolean $ignoreVCS Whether to exclude VCS files or not - * - * @return Finder The current Finder instance - * - * @see Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator - * - * @api - */ - public function ignoreVCS($ignoreVCS) - { - if ($ignoreVCS) { - $this->ignore = $this->ignore | static::IGNORE_VCS_FILES; - } else { - $this->ignore = $this->ignore & ~static::IGNORE_VCS_FILES; - } - - return $this; - } - - /** - * Adds VCS patterns. - * - * @see ignoreVCS - * - * @param string|string[] $pattern VCS patterns to ignore - */ - public static function addVCSPattern($pattern) - { - foreach ((array) $pattern as $p) { - self::$vcsPatterns[] = $p; - } - - self::$vcsPatterns = array_unique(self::$vcsPatterns); - } - - /** - * Sorts files and directories by an anonymous function. - * - * The anonymous function receives two \SplFileInfo instances to compare. - * - * This can be slow as all the matching files and directories must be retrieved for comparison. - * - * @param \Closure $closure An anonymous function - * - * @return Finder The current Finder instance - * - * @see Symfony\Component\Finder\Iterator\SortableIterator - * - * @api - */ - public function sort(\Closure $closure) - { - $this->sort = $closure; - - return $this; - } - - /** - * Sorts files and directories by name. - * - * This can be slow as all the matching files and directories must be retrieved for comparison. - * - * @return Finder The current Finder instance - * - * @see Symfony\Component\Finder\Iterator\SortableIterator - * - * @api - */ - public function sortByName() - { - $this->sort = Iterator\SortableIterator::SORT_BY_NAME; - - return $this; - } - - /** - * Sorts files and directories by type (directories before files), then by name. - * - * This can be slow as all the matching files and directories must be retrieved for comparison. - * - * @return Finder The current Finder instance - * - * @see Symfony\Component\Finder\Iterator\SortableIterator - * - * @api - */ - public function sortByType() - { - $this->sort = Iterator\SortableIterator::SORT_BY_TYPE; - - return $this; - } - - /** - * Sorts files and directories by the last accessed time. - * - * This is the time that the file was last accessed, read or written to. - * - * This can be slow as all the matching files and directories must be retrieved for comparison. - * - * @return Finder The current Finder instance - * - * @see Symfony\Component\Finder\Iterator\SortableIterator - * - * @api - */ - public function sortByAccessedTime() - { - $this->sort = Iterator\SortableIterator::SORT_BY_ACCESSED_TIME; - - return $this; - } - - /** - * Sorts files and directories by the last inode changed time. - * - * This is the time that the inode information was last modified (permissions, owner, group or other metadata). - * - * On Windows, since inode is not available, changed time is actually the file creation time. - * - * This can be slow as all the matching files and directories must be retrieved for comparison. - * - * @return Finder The current Finder instance - * - * @see Symfony\Component\Finder\Iterator\SortableIterator - * - * @api - */ - public function sortByChangedTime() - { - $this->sort = Iterator\SortableIterator::SORT_BY_CHANGED_TIME; - - return $this; - } - - /** - * Sorts files and directories by the last modified time. - * - * This is the last time the actual contents of the file were last modified. - * - * This can be slow as all the matching files and directories must be retrieved for comparison. - * - * @return Finder The current Finder instance - * - * @see Symfony\Component\Finder\Iterator\SortableIterator - * - * @api - */ - public function sortByModifiedTime() - { - $this->sort = Iterator\SortableIterator::SORT_BY_MODIFIED_TIME; - - return $this; - } - - /** - * Filters the iterator with an anonymous function. - * - * The anonymous function receives a \SplFileInfo and must return false - * to remove files. - * - * @param \Closure $closure An anonymous function - * - * @return Finder The current Finder instance - * - * @see Symfony\Component\Finder\Iterator\CustomFilterIterator - * - * @api - */ - public function filter(\Closure $closure) - { - $this->filters[] = $closure; - - return $this; - } - - /** - * Forces the following of symlinks. - * - * @return Finder The current Finder instance - * - * @api - */ - public function followLinks() - { - $this->followLinks = true; - - return $this; - } - - /** - * Tells finder to ignore unreadable directories. - * - * By default, scanning unreadable directories content throws an AccessDeniedException. - * - * @param boolean $ignore - * - * @return Finder The current Finder instance - */ - public function ignoreUnreadableDirs($ignore = true) - { - $this->ignoreUnreadableDirs = (Boolean) $ignore; - - return $this; - } - - /** - * Searches files and directories which match defined rules. - * - * @param string|array $dirs A directory path or an array of directories - * - * @return Finder The current Finder instance - * - * @throws \InvalidArgumentException if one of the directories does not exist - * - * @api - */ - public function in($dirs) - { - $resolvedDirs = array(); - - foreach ((array) $dirs as $dir) { - if (is_dir($dir)) { - $resolvedDirs[] = $dir; - } elseif ($glob = glob($dir, GLOB_ONLYDIR)) { - $resolvedDirs = array_merge($resolvedDirs, $glob); - } else { - throw new \InvalidArgumentException(sprintf('The "%s" directory does not exist.', $dir)); - } - } - - $this->dirs = array_merge($this->dirs, $resolvedDirs); - - return $this; - } - - /** - * Returns an Iterator for the current Finder configuration. - * - * This method implements the IteratorAggregate interface. - * - * @return \Iterator An iterator - * - * @throws \LogicException if the in() method has not been called - */ - public function getIterator() - { - if (0 === count($this->dirs) && 0 === count($this->iterators)) { - throw new \LogicException('You must call one of in() or append() methods before iterating over a Finder.'); - } - - if (1 === count($this->dirs) && 0 === count($this->iterators)) { - return $this->searchInDirectory($this->dirs[0]); - } - - $iterator = new \AppendIterator(); - foreach ($this->dirs as $dir) { - $iterator->append($this->searchInDirectory($dir)); - } - - foreach ($this->iterators as $it) { - $iterator->append($it); - } - - return $iterator; - } - - /** - * Appends an existing set of files/directories to the finder. - * - * The set can be another Finder, an Iterator, an IteratorAggregate, or even a plain array. - * - * @param mixed $iterator - * - * @return Finder The finder - * - * @throws \InvalidArgumentException When the given argument is not iterable. - */ - public function append($iterator) - { - if ($iterator instanceof \IteratorAggregate) { - $this->iterators[] = $iterator->getIterator(); - } elseif ($iterator instanceof \Iterator) { - $this->iterators[] = $iterator; - } elseif ($iterator instanceof \Traversable || is_array($iterator)) { - $it = new \ArrayIterator(); - foreach ($iterator as $file) { - $it->append($file instanceof \SplFileInfo ? $file : new \SplFileInfo($file)); - } - $this->iterators[] = $it; - } else { - throw new \InvalidArgumentException('Finder::append() method wrong argument type.'); - } - - return $this; - } - - /** - * Counts all the results collected by the iterators. - * - * @return int - */ - public function count() - { - return iterator_count($this->getIterator()); - } - - /** - * @return Finder The current Finder instance - */ - private function sortAdapters() - { - uasort($this->adapters, function (array $a, array $b) { - if ($a['selected'] || $b['selected']) { - return $a['selected'] ? -1 : 1; - } - - return $a['priority'] > $b['priority'] ? -1 : 1; - }); - - return $this; - } - - /** - * @param $dir - * - * @return \Iterator - * - * @throws \RuntimeException When none of the adapters are supported - */ - private function searchInDirectory($dir) - { - if (static::IGNORE_VCS_FILES === (static::IGNORE_VCS_FILES & $this->ignore)) { - $this->exclude = array_merge($this->exclude, self::$vcsPatterns); - } - - if (static::IGNORE_DOT_FILES === (static::IGNORE_DOT_FILES & $this->ignore)) { - $this->notPaths[] = '#(^|/)\..+(/|$)#'; - } - - foreach ($this->adapters as $adapter) { - if ($adapter['adapter']->isSupported()) { - try { - return $this - ->buildAdapter($adapter['adapter']) - ->searchInDirectory($dir); - } catch (ExceptionInterface $e) {} - } - } - - throw new \RuntimeException('No supported adapter found.'); - } - - /** - * @param AdapterInterface $adapter - * - * @return AdapterInterface - */ - private function buildAdapter(AdapterInterface $adapter) - { - return $adapter - ->setFollowLinks($this->followLinks) - ->setDepths($this->depths) - ->setMode($this->mode) - ->setExclude($this->exclude) - ->setNames($this->names) - ->setNotNames($this->notNames) - ->setContains($this->contains) - ->setNotContains($this->notContains) - ->setSizes($this->sizes) - ->setDates($this->dates) - ->setFilters($this->filters) - ->setSort($this->sort) - ->setPath($this->paths) - ->setNotPath($this->notPaths) - ->ignoreUnreadableDirs($this->ignoreUnreadableDirs); - } - - /** - * Unselects all adapters. - */ - private function resetAdapterSelection() - { - $this->adapters = array_map(function (array $properties) { - $properties['selected'] = false; - - return $properties; - }, $this->adapters); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder; - -/** - * Extends \SplFileInfo to support relative paths - * - * @author Fabien Potencier - */ -class SplFileInfo extends \SplFileInfo -{ - private $relativePath; - private $relativePathname; - - /** - * Constructor - * - * @param string $file The file name - * @param string $relativePath The relative path - * @param string $relativePathname The relative path name - */ - public function __construct($file, $relativePath, $relativePathname) - { - parent::__construct($file); - $this->relativePath = $relativePath; - $this->relativePathname = $relativePathname; - } - - /** - * Returns the relative path - * - * @return string the relative path - */ - public function getRelativePath() - { - return $this->relativePath; - } - - /** - * Returns the relative path name - * - * @return string the relative path name - */ - public function getRelativePathname() - { - return $this->relativePathname; - } - - /** - * Returns the contents of the file - * - * @return string the contents of the file - * - * @throws \RuntimeException - */ - public function getContents() - { - $level = error_reporting(0); - $content = file_get_contents($this->getPathname()); - error_reporting($level); - if (false === $content) { - $error = error_get_last(); - throw new \RuntimeException($error['message']); - } - - return $content; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Expression; - -/** - * @author Jean-François Simon - */ -interface ValueInterface -{ - /** - * Renders string representation of expression. - * - * @return string - */ - public function render(); - - /** - * Renders string representation of pattern. - * - * @return string - */ - public function renderPattern(); - - /** - * Returns value case sensitivity. - * - * @return bool - */ - public function isCaseSensitive(); - - /** - * Returns expression type. - * - * @return int - */ - public function getType(); - - /** - * @param string $expr - * - * @return ValueInterface - */ - public function prepend($expr); - - /** - * @param string $expr - * - * @return ValueInterface - */ - public function append($expr); -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Expression; - -/** - * @author Jean-François Simon - */ -class Glob implements ValueInterface -{ - /** - * @var string - */ - private $pattern; - - /** - * @param string $pattern - */ - public function __construct($pattern) - { - $this->pattern = $pattern; - } - - /** - * {@inheritdoc} - */ - public function render() - { - return $this->pattern; - } - - /** - * {@inheritdoc} - */ - public function renderPattern() - { - return $this->pattern; - } - - /** - * {@inheritdoc} - */ - public function getType() - { - return Expression::TYPE_GLOB; - } - - /** - * {@inheritdoc} - */ - public function isCaseSensitive() - { - return true; - } - - /** - * {@inheritdoc} - */ - public function prepend($expr) - { - $this->pattern = $expr.$this->pattern; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function append($expr) - { - $this->pattern .= $expr; - - return $this; - } - - /** - * Tests if glob is expandable ("*.{a,b}" syntax). - * - * @return bool - */ - public function isExpandable() - { - return false !== strpos($this->pattern, '{') - && false !== strpos($this->pattern, '}'); - } - - /** - * @param bool $strictLeadingDot - * @param bool $strictWildcardSlash - * - * @return Regex - */ - public function toRegex($strictLeadingDot = true, $strictWildcardSlash = true) - { - $firstByte = true; - $escaping = false; - $inCurlies = 0; - $regex = ''; - $sizeGlob = strlen($this->pattern); - for ($i = 0; $i < $sizeGlob; $i++) { - $car = $this->pattern[$i]; - if ($firstByte) { - if ($strictLeadingDot && '.' !== $car) { - $regex .= '(?=[^\.])'; - } - - $firstByte = false; - } - - if ('/' === $car) { - $firstByte = true; - } - - if ('.' === $car || '(' === $car || ')' === $car || '|' === $car || '+' === $car || '^' === $car || '$' === $car) { - $regex .= "\\$car"; - } elseif ('*' === $car) { - $regex .= $escaping ? '\\*' : ($strictWildcardSlash ? '[^/]*' : '.*'); - } elseif ('?' === $car) { - $regex .= $escaping ? '\\?' : ($strictWildcardSlash ? '[^/]' : '.'); - } elseif ('{' === $car) { - $regex .= $escaping ? '\\{' : '('; - if (!$escaping) { - ++$inCurlies; - } - } elseif ('}' === $car && $inCurlies) { - $regex .= $escaping ? '}' : ')'; - if (!$escaping) { - --$inCurlies; - } - } elseif (',' === $car && $inCurlies) { - $regex .= $escaping ? ',' : '|'; - } elseif ('\\' === $car) { - if ($escaping) { - $regex .= '\\\\'; - $escaping = false; - } else { - $escaping = true; - } - - continue; - } else { - $regex .= $car; - } - $escaping = false; - } - - return new Regex('^'.$regex.'$'); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Expression; - -/** - * @author Jean-François Simon - */ -class Expression implements ValueInterface -{ - const TYPE_REGEX = 1; - const TYPE_GLOB = 2; - - /** - * @var ValueInterface - */ - private $value; - - /** - * @param string $expr - * - * @return Expression - */ - public static function create($expr) - { - return new self($expr); - } - - /** - * @param string $expr - */ - public function __construct($expr) - { - try { - $this->value = Regex::create($expr); - } catch (\InvalidArgumentException $e) { - $this->value = new Glob($expr); - } - } - - /** - * @return string - */ - public function __toString() - { - return $this->render(); - } - - /** - * {@inheritdoc} - */ - public function render() - { - return $this->value->render(); - } - - /** - * {@inheritdoc} - */ - public function renderPattern() - { - return $this->value->renderPattern(); - } - - /** - * @return bool - */ - public function isCaseSensitive() - { - return $this->value->isCaseSensitive(); - } - - /** - * @return int - */ - public function getType() - { - return $this->value->getType(); - } - - /** - * {@inheritdoc} - */ - public function prepend($expr) - { - $this->value->prepend($expr); - - return $this; - } - - /** - * {@inheritdoc} - */ - public function append($expr) - { - $this->value->append($expr); - - return $this; - } - - /** - * @return bool - */ - public function isRegex() - { - return self::TYPE_REGEX === $this->value->getType(); - } - - /** - * @return bool - */ - public function isGlob() - { - return self::TYPE_GLOB === $this->value->getType(); - } - - /** - * @throws \LogicException - * - * @return Glob - */ - public function getGlob() - { - if (self::TYPE_GLOB !== $this->value->getType()) { - throw new \LogicException('Regex can\'t be transformed to glob.'); - } - - return $this->value; - } - - /** - * @return Regex - */ - public function getRegex() - { - return self::TYPE_REGEX === $this->value->getType() ? $this->value : $this->value->toRegex(); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Expression; - -/** - * @author Jean-François Simon - */ -class Regex implements ValueInterface -{ - const START_FLAG = '^'; - const END_FLAG = '$'; - const BOUNDARY = '~'; - const JOKER = '.*'; - const ESCAPING = '\\'; - - /** - * @var string - */ - private $pattern; - - /** - * @var array - */ - private $options; - - /** - * @var bool - */ - private $startFlag; - - /** - * @var bool - */ - private $endFlag; - - /** - * @var bool - */ - private $startJoker; - - /** - * @var bool - */ - private $endJoker; - - /** - * @param string $expr - * - * @return Regex - * - * @throws \InvalidArgumentException - */ - public static function create($expr) - { - if (preg_match('/^(.{3,}?)([imsxuADU]*)$/', $expr, $m)) { - $start = substr($m[1], 0, 1); - $end = substr($m[1], -1); - - if ( - ($start === $end && !preg_match('/[*?[:alnum:] \\\\]/', $start)) - || ($start === '{' && $end === '}') - || ($start === '(' && $end === ')') - ) { - return new self(substr($m[1], 1, -1), $m[2], $end); - } - } - - throw new \InvalidArgumentException('Given expression is not a regex.'); - } - - /** - * @param string $pattern - * @param string $options - * @param string $delimiter - */ - public function __construct($pattern, $options = '', $delimiter = null) - { - if (null !== $delimiter) { - // removes delimiter escaping - $pattern = str_replace('\\'.$delimiter, $delimiter, $pattern); - } - - $this->parsePattern($pattern); - $this->options = $options; - } - - /** - * @return string - */ - public function __toString() - { - return $this->render(); - } - - /** - * {@inheritdoc} - */ - public function render() - { - return self::BOUNDARY - .$this->renderPattern() - .self::BOUNDARY - .$this->options; - } - - /** - * {@inheritdoc} - */ - public function renderPattern() - { - return ($this->startFlag ? self::START_FLAG : '') - .($this->startJoker ? self::JOKER : '') - .str_replace(self::BOUNDARY, '\\'.self::BOUNDARY, $this->pattern) - .($this->endJoker ? self::JOKER : '') - .($this->endFlag ? self::END_FLAG : ''); - } - - /** - * {@inheritdoc} - */ - public function isCaseSensitive() - { - return !$this->hasOption('i'); - } - - /** - * {@inheritdoc} - */ - public function getType() - { - return Expression::TYPE_REGEX; - } - - /** - * {@inheritdoc} - */ - public function prepend($expr) - { - $this->pattern = $expr.$this->pattern; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function append($expr) - { - $this->pattern .= $expr; - - return $this; - } - - /** - * @param string $option - * - * @return bool - */ - public function hasOption($option) - { - return false !== strpos($this->options, $option); - } - - /** - * @param string $option - * - * @return Regex - */ - public function addOption($option) - { - if (!$this->hasOption($option)) { - $this->options.= $option; - } - - return $this; - } - - /** - * @param string $option - * - * @return Regex - */ - public function removeOption($option) - { - $this->options = str_replace($option, '', $this->options); - - return $this; - } - - /** - * @param bool $startFlag - * - * @return Regex - */ - public function setStartFlag($startFlag) - { - $this->startFlag = $startFlag; - - return $this; - } - - /** - * @return bool - */ - public function hasStartFlag() - { - return $this->startFlag; - } - - /** - * @param bool $endFlag - * - * @return Regex - */ - public function setEndFlag($endFlag) - { - $this->endFlag = (bool) $endFlag; - - return $this; - } - - /** - * @return bool - */ - public function hasEndFlag() - { - return $this->endFlag; - } - - /** - * @param bool $startJoker - * - * @return Regex - */ - public function setStartJoker($startJoker) - { - $this->startJoker = $startJoker; - - return $this; - } - - /** - * @return bool - */ - public function hasStartJoker() - { - return $this->startJoker; - } - - /** - * @param bool $endJoker - * - * @return Regex - */ - public function setEndJoker($endJoker) - { - $this->endJoker = (bool) $endJoker; - - return $this; - } - - /** - * @return bool - */ - public function hasEndJoker() - { - return $this->endJoker; - } - - /** - * @param array $replacement - * - * @return Regex - */ - public function replaceJokers($replacement) - { - $replace = function ($subject) use ($replacement) { - $subject = $subject[0]; - $replace = 0 === substr_count($subject, '\\') % 2; - - return $replace ? str_replace('.', $replacement, $subject) : $subject; - }; - - $this->pattern = preg_replace_callback('~[\\\\]*\\.~', $replace, $this->pattern); - - return $this; - } - - /** - * @param string $pattern - */ - private function parsePattern($pattern) - { - if ($this->startFlag = self::START_FLAG === substr($pattern, 0, 1)) { - $pattern = substr($pattern, 1); - } - - if ($this->startJoker = self::JOKER === substr($pattern, 0, 2)) { - $pattern = substr($pattern, 2); - } - - if ($this->endFlag = (self::END_FLAG === substr($pattern, -1) && self::ESCAPING !== substr($pattern, -2, -1))) { - $pattern = substr($pattern, 0, -1); - } - - if ($this->endJoker = (self::JOKER === substr($pattern, -2) && self::ESCAPING !== substr($pattern, -3, -2))) { - $pattern = substr($pattern, 0, -2); - } - - $this->pattern = $pattern; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml; - -use Symfony\Component\Yaml\Exception\ParseException; - -/** - * Yaml offers convenience methods to load and dump YAML. - * - * @author Fabien Potencier - * - * @api - */ -class Yaml -{ - /** - * Parses YAML into a PHP array. - * - * The parse method, when supplied with a YAML stream (string or file), - * will do its best to convert YAML in a file into a PHP array. - * - * Usage: - * - * $array = Yaml::parse('config.yml'); - * print_r($array); - * - * - * As this method accepts both plain strings and file names as an input, - * you must validate the input before calling this method. Passing a file - * as an input is a deprecated feature and will be removed in 3.0. - * - * @param string $input Path to a YAML file or a string containing YAML - * @param Boolean $exceptionOnInvalidType True if an exception must be thrown on invalid types false otherwise - * @param Boolean $objectSupport True if object support is enabled, false otherwise - * - * @return array The YAML converted to a PHP array - * - * @throws ParseException If the YAML is not valid - * - * @api - */ - public static function parse($input, $exceptionOnInvalidType = false, $objectSupport = false) - { - // if input is a file, process it - $file = ''; - if (strpos($input, "\n") === false && is_file($input)) { - if (false === is_readable($input)) { - throw new ParseException(sprintf('Unable to parse "%s" as the file is not readable.', $input)); - } - - $file = $input; - $input = file_get_contents($file); - } - - $yaml = new Parser(); - - try { - return $yaml->parse($input, $exceptionOnInvalidType, $objectSupport); - } catch (ParseException $e) { - if ($file) { - $e->setParsedFile($file); - } - - throw $e; - } - } - - /** - * Dumps a PHP array to a YAML string. - * - * The dump method, when supplied with an array, will do its best - * to convert the array into friendly YAML. - * - * @param array $array PHP array - * @param integer $inline The level where you switch to inline YAML - * @param integer $indent The amount of spaces to use for indentation of nested nodes. - * @param Boolean $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise - * @param Boolean $objectSupport true if object support is enabled, false otherwise - * - * @return string A YAML string representing the original PHP array - * - * @api - */ - public static function dump($array, $inline = 2, $indent = 4, $exceptionOnInvalidType = false, $objectSupport = false) - { - $yaml = new Dumper(); - $yaml->setIndentation($indent); - - return $yaml->dump($array, $inline, 0, $exceptionOnInvalidType, $objectSupport); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml; - -/** - * Escaper encapsulates escaping rules for single and double-quoted - * YAML strings. - * - * @author Matthew Lewinski - */ -class Escaper -{ - // Characters that would cause a dumped string to require double quoting. - const REGEX_CHARACTER_TO_ESCAPE = "[\\x00-\\x1f]|\xc2\x85|\xc2\xa0|\xe2\x80\xa8|\xe2\x80\xa9"; - - // Mapping arrays for escaping a double quoted string. The backslash is - // first to ensure proper escaping because str_replace operates iteratively - // on the input arrays. This ordering of the characters avoids the use of strtr, - // which performs more slowly. - private static $escapees = array('\\\\', '\\"', '"', - "\x00", "\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", - "\x08", "\x09", "\x0a", "\x0b", "\x0c", "\x0d", "\x0e", "\x0f", - "\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17", - "\x18", "\x19", "\x1a", "\x1b", "\x1c", "\x1d", "\x1e", "\x1f", - "\xc2\x85", "\xc2\xa0", "\xe2\x80\xa8", "\xe2\x80\xa9"); - private static $escaped = array('\\"', '\\\\', '\\"', - "\\0", "\\x01", "\\x02", "\\x03", "\\x04", "\\x05", "\\x06", "\\a", - "\\b", "\\t", "\\n", "\\v", "\\f", "\\r", "\\x0e", "\\x0f", - "\\x10", "\\x11", "\\x12", "\\x13", "\\x14", "\\x15", "\\x16", "\\x17", - "\\x18", "\\x19", "\\x1a", "\\e", "\\x1c", "\\x1d", "\\x1e", "\\x1f", - "\\N", "\\_", "\\L", "\\P"); - - /** - * Determines if a PHP value would require double quoting in YAML. - * - * @param string $value A PHP value - * - * @return Boolean True if the value would require double quotes. - */ - public static function requiresDoubleQuoting($value) - { - return preg_match('/'.self::REGEX_CHARACTER_TO_ESCAPE.'/u', $value); - } - - /** - * Escapes and surrounds a PHP value with double quotes. - * - * @param string $value A PHP value - * - * @return string The quoted, escaped string - */ - public static function escapeWithDoubleQuotes($value) - { - return sprintf('"%s"', str_replace(self::$escapees, self::$escaped, $value)); - } - - /** - * Determines if a PHP value would require single quoting in YAML. - * - * @param string $value A PHP value - * - * @return Boolean True if the value would require single quotes. - */ - public static function requiresSingleQuoting($value) - { - return preg_match('/[ \s \' " \: \{ \} \[ \] , & \* \# \?] | \A[ \- ? | < > = ! % @ ` ]/x', $value); - } - - /** - * Escapes and surrounds a PHP value with single quotes. - * - * @param string $value A PHP value - * - * @return string The quoted, escaped string - */ - public static function escapeWithSingleQuotes($value) - { - return sprintf("'%s'", str_replace('\'', '\'\'', $value)); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml; - -use Symfony\Component\Yaml\Exception\ParseException; - -/** - * Parser parses YAML strings to convert them to PHP arrays. - * - * @author Fabien Potencier - */ -class Parser -{ - const FOLDED_SCALAR_PATTERN = '(?P\||>)(?P\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P +#.*)?'; - - private $offset = 0; - private $lines = array(); - private $currentLineNb = -1; - private $currentLine = ''; - private $refs = array(); - - /** - * Constructor - * - * @param integer $offset The offset of YAML document (used for line numbers in error messages) - */ - public function __construct($offset = 0) - { - $this->offset = $offset; - } - - /** - * Parses a YAML string to a PHP value. - * - * @param string $value A YAML string - * @param Boolean $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise - * @param Boolean $objectSupport true if object support is enabled, false otherwise - * - * @return mixed A PHP value - * - * @throws ParseException If the YAML is not valid - */ - public function parse($value, $exceptionOnInvalidType = false, $objectSupport = false) - { - $this->currentLineNb = -1; - $this->currentLine = ''; - $this->lines = explode("\n", $this->cleanup($value)); - - if (function_exists('mb_detect_encoding') && false === mb_detect_encoding($value, 'UTF-8', true)) { - throw new ParseException('The YAML value does not appear to be valid UTF-8.'); - } - - if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) { - $mbEncoding = mb_internal_encoding(); - mb_internal_encoding('UTF-8'); - } - - $data = array(); - $context = null; - while ($this->moveToNextLine()) { - if ($this->isCurrentLineEmpty()) { - continue; - } - - // tab? - if ("\t" === $this->currentLine[0]) { - throw new ParseException('A YAML file cannot contain tabs as indentation.', $this->getRealCurrentLineNb() + 1, $this->currentLine); - } - - $isRef = $isInPlace = $isProcessed = false; - if (preg_match('#^\-((?P\s+)(?P.+?))?\s*$#u', $this->currentLine, $values)) { - if ($context && 'mapping' == $context) { - throw new ParseException('You cannot define a sequence item when in a mapping'); - } - $context = 'sequence'; - - if (isset($values['value']) && preg_match('#^&(?P[^ ]+) *(?P.*)#u', $values['value'], $matches)) { - $isRef = $matches['ref']; - $values['value'] = $matches['value']; - } - - // array - if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#')) { - $c = $this->getRealCurrentLineNb() + 1; - $parser = new Parser($c); - $parser->refs =& $this->refs; - $data[] = $parser->parse($this->getNextEmbedBlock(), $exceptionOnInvalidType, $objectSupport); - } else { - if (isset($values['leadspaces']) - && ' ' == $values['leadspaces'] - && preg_match('#^(?P'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\{\[].*?) *\:(\s+(?P.+?))?\s*$#u', $values['value'], $matches) - ) { - // this is a compact notation element, add to next block and parse - $c = $this->getRealCurrentLineNb(); - $parser = new Parser($c); - $parser->refs =& $this->refs; - - $block = $values['value']; - if ($this->isNextLineIndented()) { - $block .= "\n".$this->getNextEmbedBlock($this->getCurrentLineIndentation() + 2); - } - - $data[] = $parser->parse($block, $exceptionOnInvalidType, $objectSupport); - } else { - $data[] = $this->parseValue($values['value'], $exceptionOnInvalidType, $objectSupport); - } - } - } elseif (preg_match('#^(?P'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\[\{].*?) *\:(\s+(?P.+?))?\s*$#u', $this->currentLine, $values) && false === strpos($values['key'],' #')) { - if ($context && 'sequence' == $context) { - throw new ParseException('You cannot define a mapping item when in a sequence'); - } - $context = 'mapping'; - - // force correct settings - Inline::parse(null, $exceptionOnInvalidType, $objectSupport); - try { - $key = Inline::parseScalar($values['key']); - } catch (ParseException $e) { - $e->setParsedLine($this->getRealCurrentLineNb() + 1); - $e->setSnippet($this->currentLine); - - throw $e; - } - - if ('<<' === $key) { - if (isset($values['value']) && 0 === strpos($values['value'], '*')) { - $isInPlace = substr($values['value'], 1); - if (!array_key_exists($isInPlace, $this->refs)) { - throw new ParseException(sprintf('Reference "%s" does not exist.', $isInPlace), $this->getRealCurrentLineNb() + 1, $this->currentLine); - } - } else { - if (isset($values['value']) && $values['value'] !== '') { - $value = $values['value']; - } else { - $value = $this->getNextEmbedBlock(); - } - $c = $this->getRealCurrentLineNb() + 1; - $parser = new Parser($c); - $parser->refs =& $this->refs; - $parsed = $parser->parse($value, $exceptionOnInvalidType, $objectSupport); - - $merged = array(); - if (!is_array($parsed)) { - throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine); - } elseif (isset($parsed[0])) { - // Numeric array, merge individual elements - foreach (array_reverse($parsed) as $parsedItem) { - if (!is_array($parsedItem)) { - throw new ParseException('Merge items must be arrays.', $this->getRealCurrentLineNb() + 1, $parsedItem); - } - $merged = array_merge($parsedItem, $merged); - } - } else { - // Associative array, merge - $merged = array_merge($merged, $parsed); - } - - $isProcessed = $merged; - } - } elseif (isset($values['value']) && preg_match('#^&(?P[^ ]+) *(?P.*)#u', $values['value'], $matches)) { - $isRef = $matches['ref']; - $values['value'] = $matches['value']; - } - - if ($isProcessed) { - // Merge keys - $data = $isProcessed; - // hash - } elseif (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#')) { - // if next line is less indented or equal, then it means that the current value is null - if (!$this->isNextLineIndented() && !$this->isNextLineUnIndentedCollection()) { - $data[$key] = null; - } else { - $c = $this->getRealCurrentLineNb() + 1; - $parser = new Parser($c); - $parser->refs =& $this->refs; - $data[$key] = $parser->parse($this->getNextEmbedBlock(), $exceptionOnInvalidType, $objectSupport); - } - } else { - if ($isInPlace) { - $data = $this->refs[$isInPlace]; - } else { - $data[$key] = $this->parseValue($values['value'], $exceptionOnInvalidType, $objectSupport); - } - } - } else { - // 1-liner optionally followed by newline - $lineCount = count($this->lines); - if (1 === $lineCount || (2 === $lineCount && empty($this->lines[1]))) { - try { - $value = Inline::parse($this->lines[0], $exceptionOnInvalidType, $objectSupport); - } catch (ParseException $e) { - $e->setParsedLine($this->getRealCurrentLineNb() + 1); - $e->setSnippet($this->currentLine); - - throw $e; - } - - if (is_array($value)) { - $first = reset($value); - if (is_string($first) && 0 === strpos($first, '*')) { - $data = array(); - foreach ($value as $alias) { - $data[] = $this->refs[substr($alias, 1)]; - } - $value = $data; - } - } - - if (isset($mbEncoding)) { - mb_internal_encoding($mbEncoding); - } - - return $value; - } - - switch (preg_last_error()) { - case PREG_INTERNAL_ERROR: - $error = 'Internal PCRE error.'; - break; - case PREG_BACKTRACK_LIMIT_ERROR: - $error = 'pcre.backtrack_limit reached.'; - break; - case PREG_RECURSION_LIMIT_ERROR: - $error = 'pcre.recursion_limit reached.'; - break; - case PREG_BAD_UTF8_ERROR: - $error = 'Malformed UTF-8 data.'; - break; - case PREG_BAD_UTF8_OFFSET_ERROR: - $error = 'Offset doesn\'t correspond to the begin of a valid UTF-8 code point.'; - break; - default: - $error = 'Unable to parse.'; - } - - throw new ParseException($error, $this->getRealCurrentLineNb() + 1, $this->currentLine); - } - - if ($isRef) { - $this->refs[$isRef] = end($data); - } - } - - if (isset($mbEncoding)) { - mb_internal_encoding($mbEncoding); - } - - return empty($data) ? null : $data; - } - - /** - * Returns the current line number (takes the offset into account). - * - * @return integer The current line number - */ - private function getRealCurrentLineNb() - { - return $this->currentLineNb + $this->offset; - } - - /** - * Returns the current line indentation. - * - * @return integer The current line indentation - */ - private function getCurrentLineIndentation() - { - return strlen($this->currentLine) - strlen(ltrim($this->currentLine, ' ')); - } - - /** - * Returns the next embed block of YAML. - * - * @param integer $indentation The indent level at which the block is to be read, or null for default - * - * @return string A YAML string - * - * @throws ParseException When indentation problem are detected - */ - private function getNextEmbedBlock($indentation = null) - { - $this->moveToNextLine(); - - if (null === $indentation) { - $newIndent = $this->getCurrentLineIndentation(); - - $unindentedEmbedBlock = $this->isStringUnIndentedCollectionItem($this->currentLine); - - if (!$this->isCurrentLineEmpty() && 0 === $newIndent && !$unindentedEmbedBlock) { - throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine); - } - } else { - $newIndent = $indentation; - } - - $data = array(substr($this->currentLine, $newIndent)); - - $isItUnindentedCollection = $this->isStringUnIndentedCollectionItem($this->currentLine); - - // Comments must not be removed inside a string block (ie. after a line ending with "|") - $removeCommentsPattern = '~'.self::FOLDED_SCALAR_PATTERN.'$~'; - $removeComments = !preg_match($removeCommentsPattern, $this->currentLine); - - while ($this->moveToNextLine()) { - $indent = $this->getCurrentLineIndentation(); - - if ($indent === $newIndent) { - $removeComments = !preg_match($removeCommentsPattern, $this->currentLine); - } - - if ($isItUnindentedCollection && !$this->isStringUnIndentedCollectionItem($this->currentLine)) { - $this->moveToPreviousLine(); - break; - } - - if ($this->isCurrentLineBlank()) { - $data[] = substr($this->currentLine, $newIndent); - continue; - } - - if ($removeComments && $this->isCurrentLineComment()) { - continue; - } - - if ($indent >= $newIndent) { - $data[] = substr($this->currentLine, $newIndent); - } elseif (0 == $indent) { - $this->moveToPreviousLine(); - - break; - } else { - throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine); - } - } - - return implode("\n", $data); - } - - /** - * Moves the parser to the next line. - * - * @return Boolean - */ - private function moveToNextLine() - { - if ($this->currentLineNb >= count($this->lines) - 1) { - return false; - } - - $this->currentLine = $this->lines[++$this->currentLineNb]; - - return true; - } - - /** - * Moves the parser to the previous line. - */ - private function moveToPreviousLine() - { - $this->currentLine = $this->lines[--$this->currentLineNb]; - } - - /** - * Parses a YAML value. - * - * @param string $value A YAML value - * @param Boolean $exceptionOnInvalidType True if an exception must be thrown on invalid types false otherwise - * @param Boolean $objectSupport True if object support is enabled, false otherwise - * - * @return mixed A PHP value - * - * @throws ParseException When reference does not exist - */ - private function parseValue($value, $exceptionOnInvalidType, $objectSupport) - { - if (0 === strpos($value, '*')) { - if (false !== $pos = strpos($value, '#')) { - $value = substr($value, 1, $pos - 2); - } else { - $value = substr($value, 1); - } - - if (!array_key_exists($value, $this->refs)) { - throw new ParseException(sprintf('Reference "%s" does not exist.', $value), $this->currentLine); - } - - return $this->refs[$value]; - } - - if (preg_match('/^'.self::FOLDED_SCALAR_PATTERN.'$/', $value, $matches)) { - $modifiers = isset($matches['modifiers']) ? $matches['modifiers'] : ''; - - return $this->parseFoldedScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), intval(abs($modifiers))); - } - - try { - return Inline::parse($value, $exceptionOnInvalidType, $objectSupport); - } catch (ParseException $e) { - $e->setParsedLine($this->getRealCurrentLineNb() + 1); - $e->setSnippet($this->currentLine); - - throw $e; - } - } - - /** - * Parses a folded scalar. - * - * @param string $separator The separator that was used to begin this folded scalar (| or >) - * @param string $indicator The indicator that was used to begin this folded scalar (+ or -) - * @param integer $indentation The indentation that was used to begin this folded scalar - * - * @return string The text value - */ - private function parseFoldedScalar($separator, $indicator = '', $indentation = 0) - { - $notEOF = $this->moveToNextLine(); - if (!$notEOF) { - return ''; - } - - $isCurrentLineBlank = $this->isCurrentLineBlank(); - $text = ''; - - // leading blank lines are consumed before determining indentation - while ($notEOF && $isCurrentLineBlank) { - // newline only if not EOF - if ($notEOF = $this->moveToNextLine()) { - $text .= "\n"; - $isCurrentLineBlank = $this->isCurrentLineBlank(); - } - } - - // determine indentation if not specified - if (0 === $indentation) { - if (preg_match('/^ +/', $this->currentLine, $matches)) { - $indentation = strlen($matches[0]); - } - } - - if ($indentation > 0) { - $pattern = sprintf('/^ {%d}(.*)$/', $indentation); - - while ( - $notEOF && ( - $isCurrentLineBlank || - preg_match($pattern, $this->currentLine, $matches) - ) - ) { - if ($isCurrentLineBlank) { - $text .= substr($this->currentLine, $indentation); - } else { - $text .= $matches[1]; - } - - // newline only if not EOF - if ($notEOF = $this->moveToNextLine()) { - $text .= "\n"; - $isCurrentLineBlank = $this->isCurrentLineBlank(); - } - } - } elseif ($notEOF) { - $text .= "\n"; - } - - if ($notEOF) { - $this->moveToPreviousLine(); - } - - // replace all non-trailing single newlines with spaces in folded blocks - if ('>' === $separator) { - preg_match('/(\n*)$/', $text, $matches); - $text = preg_replace('/(?getCurrentLineIndentation(); - $EOF = !$this->moveToNextLine(); - - while (!$EOF && $this->isCurrentLineEmpty()) { - $EOF = !$this->moveToNextLine(); - } - - if ($EOF) { - return false; - } - - $ret = false; - if ($this->getCurrentLineIndentation() > $currentIndentation) { - $ret = true; - } - - $this->moveToPreviousLine(); - - return $ret; - } - - /** - * Returns true if the current line is blank or if it is a comment line. - * - * @return Boolean Returns true if the current line is empty or if it is a comment line, false otherwise - */ - private function isCurrentLineEmpty() - { - return $this->isCurrentLineBlank() || $this->isCurrentLineComment(); - } - - /** - * Returns true if the current line is blank. - * - * @return Boolean Returns true if the current line is blank, false otherwise - */ - private function isCurrentLineBlank() - { - return '' == trim($this->currentLine, ' '); - } - - /** - * Returns true if the current line is a comment line. - * - * @return Boolean Returns true if the current line is a comment line, false otherwise - */ - private function isCurrentLineComment() - { - //checking explicitly the first char of the trim is faster than loops or strpos - $ltrimmedLine = ltrim($this->currentLine, ' '); - - return $ltrimmedLine[0] === '#'; - } - - /** - * Cleanups a YAML string to be parsed. - * - * @param string $value The input YAML string - * - * @return string A cleaned up YAML string - */ - private function cleanup($value) - { - $value = str_replace(array("\r\n", "\r"), "\n", $value); - - // strip YAML header - $count = 0; - $value = preg_replace('#^\%YAML[: ][\d\.]+.*\n#su', '', $value, -1, $count); - $this->offset += $count; - - // remove leading comments - $trimmedValue = preg_replace('#^(\#.*?\n)+#s', '', $value, -1, $count); - if ($count == 1) { - // items have been removed, update the offset - $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n"); - $value = $trimmedValue; - } - - // remove start of the document marker (---) - $trimmedValue = preg_replace('#^\-\-\-.*?\n#s', '', $value, -1, $count); - if ($count == 1) { - // items have been removed, update the offset - $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n"); - $value = $trimmedValue; - - // remove end of the document marker (...) - $value = preg_replace('#\.\.\.\s*$#s', '', $value); - } - - return $value; - } - - /** - * Returns true if the next line starts unindented collection - * - * @return Boolean Returns true if the next line starts unindented collection, false otherwise - */ - private function isNextLineUnIndentedCollection() - { - $currentIndentation = $this->getCurrentLineIndentation(); - $notEOF = $this->moveToNextLine(); - - while ($notEOF && $this->isCurrentLineEmpty()) { - $notEOF = $this->moveToNextLine(); - } - - if (false === $notEOF) { - return false; - } - - $ret = false; - if ( - $this->getCurrentLineIndentation() == $currentIndentation - && - $this->isStringUnIndentedCollectionItem($this->currentLine) - ) { - $ret = true; - } - - $this->moveToPreviousLine(); - - return $ret; - } - - /** - * Returns true if the string is un-indented collection item - * - * @return Boolean Returns true if the string is un-indented collection item, false otherwise - */ - private function isStringUnIndentedCollectionItem() - { - return (0 === strpos($this->currentLine, '- ')); - } - -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml; - -/** - * Dumper dumps PHP variables to YAML strings. - * - * @author Fabien Potencier - */ -class Dumper -{ - /** - * The amount of spaces to use for indentation of nested nodes. - * - * @var integer - */ - protected $indentation = 4; - - /** - * Sets the indentation. - * - * @param integer $num The amount of spaces to use for indentation of nested nodes. - */ - public function setIndentation($num) - { - $this->indentation = (int) $num; - } - - /** - * Dumps a PHP value to YAML. - * - * @param mixed $input The PHP value - * @param integer $inline The level where you switch to inline YAML - * @param integer $indent The level of indentation (used internally) - * @param Boolean $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise - * @param Boolean $objectSupport true if object support is enabled, false otherwise - * - * @return string The YAML representation of the PHP value - */ - public function dump($input, $inline = 0, $indent = 0, $exceptionOnInvalidType = false, $objectSupport = false) - { - $output = ''; - $prefix = $indent ? str_repeat(' ', $indent) : ''; - - if ($inline <= 0 || !is_array($input) || empty($input)) { - $output .= $prefix.Inline::dump($input, $exceptionOnInvalidType, $objectSupport); - } else { - $isAHash = array_keys($input) !== range(0, count($input) - 1); - - foreach ($input as $key => $value) { - $willBeInlined = $inline - 1 <= 0 || !is_array($value) || empty($value); - - $output .= sprintf('%s%s%s%s', - $prefix, - $isAHash ? Inline::dump($key, $exceptionOnInvalidType, $objectSupport).':' : '-', - $willBeInlined ? ' ' : "\n", - $this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + $this->indentation, $exceptionOnInvalidType, $objectSupport) - ).($willBeInlined ? "\n" : ''); - } - } - - return $output; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml; - -/** - * Unescaper encapsulates unescaping rules for single and double-quoted - * YAML strings. - * - * @author Matthew Lewinski - */ -class Unescaper -{ - // Parser and Inline assume UTF-8 encoding, so escaped Unicode characters - // must be converted to that encoding. - const ENCODING = 'UTF-8'; - - // Regex fragment that matches an escaped character in a double quoted - // string. - const REGEX_ESCAPED_CHARACTER = "\\\\([0abt\tnvfre \\\"\\/\\\\N_LP]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})"; - - /** - * Unescapes a single quoted string. - * - * @param string $value A single quoted string. - * - * @return string The unescaped string. - */ - public function unescapeSingleQuotedString($value) - { - return str_replace('\'\'', '\'', $value); - } - - /** - * Unescapes a double quoted string. - * - * @param string $value A double quoted string. - * - * @return string The unescaped string. - */ - public function unescapeDoubleQuotedString($value) - { - $self = $this; - $callback = function ($match) use ($self) { - return $self->unescapeCharacter($match[0]); - }; - - // evaluate the string - return preg_replace_callback('/'.self::REGEX_ESCAPED_CHARACTER.'/u', $callback, $value); - } - - /** - * Unescapes a character that was found in a double-quoted string - * - * @param string $value An escaped character - * - * @return string The unescaped character - */ - public function unescapeCharacter($value) - { - switch ($value{1}) { - case '0': - return "\x0"; - case 'a': - return "\x7"; - case 'b': - return "\x8"; - case 't': - return "\t"; - case "\t": - return "\t"; - case 'n': - return "\n"; - case 'v': - return "\xb"; - case 'f': - return "\xc"; - case 'r': - return "\xd"; - case 'e': - return "\x1b"; - case ' ': - return ' '; - case '"': - return '"'; - case '/': - return '/'; - case '\\': - return '\\'; - case 'N': - // U+0085 NEXT LINE - return $this->convertEncoding("\x00\x85", self::ENCODING, 'UCS-2BE'); - case '_': - // U+00A0 NO-BREAK SPACE - return $this->convertEncoding("\x00\xA0", self::ENCODING, 'UCS-2BE'); - case 'L': - // U+2028 LINE SEPARATOR - return $this->convertEncoding("\x20\x28", self::ENCODING, 'UCS-2BE'); - case 'P': - // U+2029 PARAGRAPH SEPARATOR - return $this->convertEncoding("\x20\x29", self::ENCODING, 'UCS-2BE'); - case 'x': - $char = pack('n', hexdec(substr($value, 2, 2))); - - return $this->convertEncoding($char, self::ENCODING, 'UCS-2BE'); - case 'u': - $char = pack('n', hexdec(substr($value, 2, 4))); - - return $this->convertEncoding($char, self::ENCODING, 'UCS-2BE'); - case 'U': - $char = pack('N', hexdec(substr($value, 2, 8))); - - return $this->convertEncoding($char, self::ENCODING, 'UCS-4BE'); - } - } - - /** - * Convert a string from one encoding to another. - * - * @param string $value The string to convert - * @param string $to The input encoding - * @param string $from The output encoding - * - * @return string The string with the new encoding - * - * @throws \RuntimeException if no suitable encoding function is found (iconv or mbstring) - */ - private function convertEncoding($value, $to, $from) - { - if (function_exists('mb_convert_encoding')) { - return mb_convert_encoding($value, $to, $from); - } elseif (function_exists('iconv')) { - return iconv($from, $to, $value); - } - - throw new \RuntimeException('No suitable convert encoding function (install the iconv or mbstring extension).'); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml\Exception; - -/** - * Exception class thrown when an error occurs during dumping. - * - * @author Fabien Potencier - * - * @api - */ -class DumpException extends RuntimeException -{ -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml\Exception; - -/** - * Exception interface for all exceptions thrown by the component. - * - * @author Fabien Potencier - * - * @api - */ -interface ExceptionInterface -{ -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml\Exception; - -if (!defined('JSON_UNESCAPED_UNICODE')) { - define('JSON_UNESCAPED_SLASHES', 64); - define('JSON_UNESCAPED_UNICODE', 256); -} - -/** - * Exception class thrown when an error occurs during parsing. - * - * @author Fabien Potencier - * - * @api - */ -class ParseException extends RuntimeException -{ - private $parsedFile; - private $parsedLine; - private $snippet; - private $rawMessage; - - /** - * Constructor. - * - * @param string $message The error message - * @param integer $parsedLine The line where the error occurred - * @param integer $snippet The snippet of code near the problem - * @param string $parsedFile The file name where the error occurred - * @param \Exception $previous The previous exception - */ - public function __construct($message, $parsedLine = -1, $snippet = null, $parsedFile = null, \Exception $previous = null) - { - $this->parsedFile = $parsedFile; - $this->parsedLine = $parsedLine; - $this->snippet = $snippet; - $this->rawMessage = $message; - - $this->updateRepr(); - - parent::__construct($this->message, 0, $previous); - } - - /** - * Gets the snippet of code near the error. - * - * @return string The snippet of code - */ - public function getSnippet() - { - return $this->snippet; - } - - /** - * Sets the snippet of code near the error. - * - * @param string $snippet The code snippet - */ - public function setSnippet($snippet) - { - $this->snippet = $snippet; - - $this->updateRepr(); - } - - /** - * Gets the filename where the error occurred. - * - * This method returns null if a string is parsed. - * - * @return string The filename - */ - public function getParsedFile() - { - return $this->parsedFile; - } - - /** - * Sets the filename where the error occurred. - * - * @param string $parsedFile The filename - */ - public function setParsedFile($parsedFile) - { - $this->parsedFile = $parsedFile; - - $this->updateRepr(); - } - - /** - * Gets the line where the error occurred. - * - * @return integer The file line - */ - public function getParsedLine() - { - return $this->parsedLine; - } - - /** - * Sets the line where the error occurred. - * - * @param integer $parsedLine The file line - */ - public function setParsedLine($parsedLine) - { - $this->parsedLine = $parsedLine; - - $this->updateRepr(); - } - - private function updateRepr() - { - $this->message = $this->rawMessage; - - $dot = false; - if ('.' === substr($this->message, -1)) { - $this->message = substr($this->message, 0, -1); - $dot = true; - } - - if (null !== $this->parsedFile) { - $this->message .= sprintf(' in %s', json_encode($this->parsedFile, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); - } - - if ($this->parsedLine >= 0) { - $this->message .= sprintf(' at line %d', $this->parsedLine); - } - - if ($this->snippet) { - $this->message .= sprintf(' (near "%s")', $this->snippet); - } - - if ($dot) { - $this->message .= '.'; - } - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml\Exception; - -/** - * Exception class thrown when an error occurs during parsing. - * - * @author Romain Neutron - * - * @api - */ -class RuntimeException extends \RuntimeException implements ExceptionInterface -{ -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml; - -use Symfony\Component\Yaml\Exception\ParseException; -use Symfony\Component\Yaml\Exception\DumpException; - -/** - * Inline implements a YAML parser/dumper for the YAML inline syntax. - * - * @author Fabien Potencier - */ -class Inline -{ - const REGEX_QUOTED_STRING = '(?:"([^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'([^\']*(?:\'\'[^\']*)*)\')'; - - private static $exceptionOnInvalidType = false; - private static $objectSupport = false; - - /** - * Converts a YAML string to a PHP array. - * - * @param string $value A YAML string - * @param Boolean $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise - * @param Boolean $objectSupport true if object support is enabled, false otherwise - * - * @return array A PHP array representing the YAML string - * - * @throws ParseException - */ - public static function parse($value, $exceptionOnInvalidType = false, $objectSupport = false) - { - self::$exceptionOnInvalidType = $exceptionOnInvalidType; - self::$objectSupport = $objectSupport; - - $value = trim($value); - - if (0 == strlen($value)) { - return ''; - } - - if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) { - $mbEncoding = mb_internal_encoding(); - mb_internal_encoding('ASCII'); - } - - $i = 0; - switch ($value[0]) { - case '[': - $result = self::parseSequence($value, $i); - ++$i; - break; - case '{': - $result = self::parseMapping($value, $i); - ++$i; - break; - default: - $result = self::parseScalar($value, null, array('"', "'"), $i); - } - - // some comments are allowed at the end - if (preg_replace('/\s+#.*$/A', '', substr($value, $i))) { - throw new ParseException(sprintf('Unexpected characters near "%s".', substr($value, $i))); - } - - if (isset($mbEncoding)) { - mb_internal_encoding($mbEncoding); - } - - return $result; - } - - /** - * Dumps a given PHP variable to a YAML string. - * - * @param mixed $value The PHP variable to convert - * @param Boolean $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise - * @param Boolean $objectSupport true if object support is enabled, false otherwise - * - * @return string The YAML string representing the PHP array - * - * @throws DumpException When trying to dump PHP resource - */ - public static function dump($value, $exceptionOnInvalidType = false, $objectSupport = false) - { - switch (true) { - case is_resource($value): - if ($exceptionOnInvalidType) { - throw new DumpException(sprintf('Unable to dump PHP resources in a YAML file ("%s").', get_resource_type($value))); - } - - return 'null'; - case is_object($value): - if ($objectSupport) { - return '!!php/object:'.serialize($value); - } - - if ($exceptionOnInvalidType) { - throw new DumpException('Object support when dumping a YAML file has been disabled.'); - } - - return 'null'; - case is_array($value): - return self::dumpArray($value, $exceptionOnInvalidType, $objectSupport); - case null === $value: - return 'null'; - case true === $value: - return 'true'; - case false === $value: - return 'false'; - case ctype_digit($value): - return is_string($value) ? "'$value'" : (int) $value; - case is_numeric($value): - $locale = setlocale(LC_NUMERIC, 0); - if (false !== $locale) { - setlocale(LC_NUMERIC, 'C'); - } - $repr = is_string($value) ? "'$value'" : (is_infinite($value) ? str_ireplace('INF', '.Inf', strval($value)) : strval($value)); - - if (false !== $locale) { - setlocale(LC_NUMERIC, $locale); - } - - return $repr; - case Escaper::requiresDoubleQuoting($value): - return Escaper::escapeWithDoubleQuotes($value); - case Escaper::requiresSingleQuoting($value): - return Escaper::escapeWithSingleQuotes($value); - case '' == $value: - return "''"; - case preg_match(self::getTimestampRegex(), $value): - case in_array(strtolower($value), array('null', '~', 'true', 'false')): - return "'$value'"; - default: - return $value; - } - } - - /** - * Dumps a PHP array to a YAML string. - * - * @param array $value The PHP array to dump - * @param Boolean $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise - * @param Boolean $objectSupport true if object support is enabled, false otherwise - * - * @return string The YAML string representing the PHP array - */ - private static function dumpArray($value, $exceptionOnInvalidType, $objectSupport) - { - // array - $keys = array_keys($value); - if ((1 == count($keys) && '0' == $keys[0]) - || (count($keys) > 1 && array_reduce($keys, function ($v, $w) { return (integer) $v + $w; }, 0) == count($keys) * (count($keys) - 1) / 2) - ) { - $output = array(); - foreach ($value as $val) { - $output[] = self::dump($val, $exceptionOnInvalidType, $objectSupport); - } - - return sprintf('[%s]', implode(', ', $output)); - } - - // mapping - $output = array(); - foreach ($value as $key => $val) { - $output[] = sprintf('%s: %s', self::dump($key, $exceptionOnInvalidType, $objectSupport), self::dump($val, $exceptionOnInvalidType, $objectSupport)); - } - - return sprintf('{ %s }', implode(', ', $output)); - } - - /** - * Parses a scalar to a YAML string. - * - * @param scalar $scalar - * @param string $delimiters - * @param array $stringDelimiters - * @param integer &$i - * @param Boolean $evaluate - * - * @return string A YAML string - * - * @throws ParseException When malformed inline YAML string is parsed - */ - public static function parseScalar($scalar, $delimiters = null, $stringDelimiters = array('"', "'"), &$i = 0, $evaluate = true) - { - if (in_array($scalar[$i], $stringDelimiters)) { - // quoted scalar - $output = self::parseQuotedScalar($scalar, $i); - - if (null !== $delimiters) { - $tmp = ltrim(substr($scalar, $i), ' '); - if (!in_array($tmp[0], $delimiters)) { - throw new ParseException(sprintf('Unexpected characters (%s).', substr($scalar, $i))); - } - } - } else { - // "normal" string - if (!$delimiters) { - $output = substr($scalar, $i); - $i += strlen($output); - - // remove comments - if (false !== $strpos = strpos($output, ' #')) { - $output = rtrim(substr($output, 0, $strpos)); - } - } elseif (preg_match('/^(.+?)('.implode('|', $delimiters).')/', substr($scalar, $i), $match)) { - $output = $match[1]; - $i += strlen($output); - } else { - throw new ParseException(sprintf('Malformed inline YAML string (%s).', $scalar)); - } - - if ($evaluate) { - $output = self::evaluateScalar($output); - } - } - - return $output; - } - - /** - * Parses a quoted scalar to YAML. - * - * @param string $scalar - * @param integer &$i - * - * @return string A YAML string - * - * @throws ParseException When malformed inline YAML string is parsed - */ - private static function parseQuotedScalar($scalar, &$i) - { - if (!preg_match('/'.self::REGEX_QUOTED_STRING.'/Au', substr($scalar, $i), $match)) { - throw new ParseException(sprintf('Malformed inline YAML string (%s).', substr($scalar, $i))); - } - - $output = substr($match[0], 1, strlen($match[0]) - 2); - - $unescaper = new Unescaper(); - if ('"' == $scalar[$i]) { - $output = $unescaper->unescapeDoubleQuotedString($output); - } else { - $output = $unescaper->unescapeSingleQuotedString($output); - } - - $i += strlen($match[0]); - - return $output; - } - - /** - * Parses a sequence to a YAML string. - * - * @param string $sequence - * @param integer &$i - * - * @return string A YAML string - * - * @throws ParseException When malformed inline YAML string is parsed - */ - private static function parseSequence($sequence, &$i = 0) - { - $output = array(); - $len = strlen($sequence); - $i += 1; - - // [foo, bar, ...] - while ($i < $len) { - switch ($sequence[$i]) { - case '[': - // nested sequence - $output[] = self::parseSequence($sequence, $i); - break; - case '{': - // nested mapping - $output[] = self::parseMapping($sequence, $i); - break; - case ']': - return $output; - case ',': - case ' ': - break; - default: - $isQuoted = in_array($sequence[$i], array('"', "'")); - $value = self::parseScalar($sequence, array(',', ']'), array('"', "'"), $i); - - if (!$isQuoted && false !== strpos($value, ': ')) { - // embedded mapping? - try { - $value = self::parseMapping('{'.$value.'}'); - } catch (\InvalidArgumentException $e) { - // no, it's not - } - } - - $output[] = $value; - - --$i; - } - - ++$i; - } - - throw new ParseException(sprintf('Malformed inline YAML string %s', $sequence)); - } - - /** - * Parses a mapping to a YAML string. - * - * @param string $mapping - * @param integer &$i - * - * @return string A YAML string - * - * @throws ParseException When malformed inline YAML string is parsed - */ - private static function parseMapping($mapping, &$i = 0) - { - $output = array(); - $len = strlen($mapping); - $i += 1; - - // {foo: bar, bar:foo, ...} - while ($i < $len) { - switch ($mapping[$i]) { - case ' ': - case ',': - ++$i; - continue 2; - case '}': - return $output; - } - - // key - $key = self::parseScalar($mapping, array(':', ' '), array('"', "'"), $i, false); - - // value - $done = false; - while ($i < $len) { - switch ($mapping[$i]) { - case '[': - // nested sequence - $output[$key] = self::parseSequence($mapping, $i); - $done = true; - break; - case '{': - // nested mapping - $output[$key] = self::parseMapping($mapping, $i); - $done = true; - break; - case ':': - case ' ': - break; - default: - $output[$key] = self::parseScalar($mapping, array(',', '}'), array('"', "'"), $i); - $done = true; - --$i; - } - - ++$i; - - if ($done) { - continue 2; - } - } - } - - throw new ParseException(sprintf('Malformed inline YAML string %s', $mapping)); - } - - /** - * Evaluates scalars and replaces magic values. - * - * @param string $scalar - * - * @return string A YAML string - */ - private static function evaluateScalar($scalar) - { - $scalar = trim($scalar); - $scalarLower = strtolower($scalar); - switch (true) { - case 'null' === $scalarLower: - case '' === $scalar: - case '~' === $scalar: - return null; - case 'true' === $scalarLower: - return true; - case 'false' === $scalarLower: - return false; - // Optimise for returning strings. - case $scalar[0] === '+' || $scalar[0] === '-' || $scalar[0] === '.' || $scalar[0] === '!' || is_numeric($scalar[0]): - switch (true) { - case 0 === strpos($scalar, '!str'): - return (string) substr($scalar, 5); - case 0 === strpos($scalar, '! '): - return intval(self::parseScalar(substr($scalar, 2))); - case 0 === strpos($scalar, '!!php/object:'): - if (self::$objectSupport) { - return unserialize(substr($scalar, 13)); - } - - if (self::$exceptionOnInvalidType) { - throw new ParseException('Object support when parsing a YAML file has been disabled.'); - } - - return null; - case ctype_digit($scalar): - $raw = $scalar; - $cast = intval($scalar); - - return '0' == $scalar[0] ? octdec($scalar) : (((string) $raw == (string) $cast) ? $cast : $raw); - case '-' === $scalar[0] && ctype_digit(substr($scalar, 1)): - $raw = $scalar; - $cast = intval($scalar); - - return '0' == $scalar[1] ? octdec($scalar) : (((string) $raw == (string) $cast) ? $cast : $raw); - case is_numeric($scalar): - return '0x' == $scalar[0].$scalar[1] ? hexdec($scalar) : floatval($scalar); - case '.inf' === $scalarLower: - case '.nan' === $scalarLower: - return -log(0); - case '-.inf' === $scalarLower: - return log(0); - case preg_match('/^(-|\+)?[0-9,]+(\.[0-9]+)?$/', $scalar): - return floatval(str_replace(',', '', $scalar)); - case preg_match(self::getTimestampRegex(), $scalar): - return strtotime($scalar); - } - default: - return (string) $scalar; - } - } - - /** - * Gets a regex that matches a YAML date. - * - * @return string The regular expression - * - * @see http://www.yaml.org/spec/1.2/spec.html#id2761573 - */ - private static function getTimestampRegex() - { - return <<[0-9][0-9][0-9][0-9]) - -(?P[0-9][0-9]?) - -(?P[0-9][0-9]?) - (?:(?:[Tt]|[ \t]+) - (?P[0-9][0-9]?) - :(?P[0-9][0-9]) - :(?P[0-9][0-9]) - (?:\.(?P[0-9]*))? - (?:[ \t]*(?PZ|(?P[-+])(?P[0-9][0-9]?) - (?::(?P[0-9][0-9]))?))?)? - $~x -EOF; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console; - -/** - * Contains all events dispatched by an Application. - * - * @author Francesco Levorato - */ -final class ConsoleEvents -{ - /** - * The COMMAND event allows you to attach listeners before any command is - * executed by the console. It also allows you to modify the command, input and output - * before they are handled to the command. - * - * The event listener method receives a Symfony\Component\Console\Event\ConsoleCommandEvent - * instance. - * - * @var string - */ - const COMMAND = 'console.command'; - - /** - * The TERMINATE event allows you to attach listeners after a command is - * executed by the console. - * - * The event listener method receives a Symfony\Component\Console\Event\ConsoleTerminateEvent - * instance. - * - * @var string - */ - const TERMINATE = 'console.terminate'; - - /** - * The EXCEPTION event occurs when an uncaught exception appears. - * - * This event allows you to deal with the exception or - * to modify the thrown exception. The event listener method receives - * a Symfony\Component\Console\Event\ConsoleExceptionEvent - * instance. - * - * @var string - */ - const EXCEPTION = 'console.exception'; -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Formatter; - -/** - * Formatter class for console output. - * - * @author Konstantin Kudryashov - * - * @api - */ -class OutputFormatter implements OutputFormatterInterface -{ - private $decorated; - private $styles = array(); - private $styleStack; - - /** - * Escapes "<" special char in given text. - * - * @param string $text Text to escape - * - * @return string Escaped text - */ - public static function escape($text) - { - return preg_replace('/([^\\\\]?) FormatterStyle" instances - * - * @api - */ - public function __construct($decorated = false, array $styles = array()) - { - $this->decorated = (Boolean) $decorated; - - $this->setStyle('error', new OutputFormatterStyle('white', 'red')); - $this->setStyle('info', new OutputFormatterStyle('green')); - $this->setStyle('comment', new OutputFormatterStyle('yellow')); - $this->setStyle('question', new OutputFormatterStyle('black', 'cyan')); - - foreach ($styles as $name => $style) { - $this->setStyle($name, $style); - } - - $this->styleStack = new OutputFormatterStyleStack(); - } - - /** - * Sets the decorated flag. - * - * @param Boolean $decorated Whether to decorate the messages or not - * - * @api - */ - public function setDecorated($decorated) - { - $this->decorated = (Boolean) $decorated; - } - - /** - * Gets the decorated flag. - * - * @return Boolean true if the output will decorate messages, false otherwise - * - * @api - */ - public function isDecorated() - { - return $this->decorated; - } - - /** - * Sets a new style. - * - * @param string $name The style name - * @param OutputFormatterStyleInterface $style The style instance - * - * @api - */ - public function setStyle($name, OutputFormatterStyleInterface $style) - { - $this->styles[strtolower($name)] = $style; - } - - /** - * Checks if output formatter has style with specified name. - * - * @param string $name - * - * @return Boolean - * - * @api - */ - public function hasStyle($name) - { - return isset($this->styles[strtolower($name)]); - } - - /** - * Gets style options from style with specified name. - * - * @param string $name - * - * @return OutputFormatterStyleInterface - * - * @throws \InvalidArgumentException When style isn't defined - * - * @api - */ - public function getStyle($name) - { - if (!$this->hasStyle($name)) { - throw new \InvalidArgumentException(sprintf('Undefined style: %s', $name)); - } - - return $this->styles[strtolower($name)]; - } - - /** - * Formats a message according to the given styles. - * - * @param string $message The message to style - * - * @return string The styled message - * - * @api - */ - 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]; - - // add the text up to the next tag - $output .= $this->applyCurrentStyle(substr($message, $offset, $pos - $offset)); - $offset = $pos + strlen($text); - - // opening tag? - 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 ($pos && '\\' == $message[$pos - 1]) { - // escaped tag - $output .= $this->applyCurrentStyle($text); - } 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 OutputFormatterStyleStack - */ - public function getStyleStack() - { - return $this->styleStack; - } - - /** - * Tries to create new style instance from string. - * - * @param string $string - * - * @return OutputFormatterStyle|Boolean false if string is not format string - */ - 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 OutputFormatterStyle(); - foreach ($matches as $match) { - array_shift($match); - - if ('fg' == $match[0]) { - $style->setForeground($match[1]); - } elseif ('bg' == $match[0]) { - $style->setBackground($match[1]); - } else { - $style->setOption($match[1]); - } - } - - return $style; - } - - /** - * Applies current style from stack to text, if must be applied. - * - * @param string $text Input text - * - * @return string Styled text - */ - private function applyCurrentStyle($text) - { - return $this->isDecorated() && strlen($text) > 0 ? $this->styleStack->getCurrent()->apply($text) : $text; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Formatter; - -/** - * Formatter interface for console output. - * - * @author Konstantin Kudryashov - * - * @api - */ -interface OutputFormatterInterface -{ - /** - * Sets the decorated flag. - * - * @param Boolean $decorated Whether to decorate the messages or not - * - * @api - */ - public function setDecorated($decorated); - - /** - * Gets the decorated flag. - * - * @return Boolean true if the output will decorate messages, false otherwise - * - * @api - */ - public function isDecorated(); - - /** - * Sets a new style. - * - * @param string $name The style name - * @param OutputFormatterStyleInterface $style The style instance - * - * @api - */ - public function setStyle($name, OutputFormatterStyleInterface $style); - - /** - * Checks if output formatter has style with specified name. - * - * @param string $name - * - * @return Boolean - * - * @api - */ - public function hasStyle($name); - - /** - * Gets style options from style with specified name. - * - * @param string $name - * - * @return OutputFormatterStyleInterface - * - * @api - */ - public function getStyle($name); - - /** - * Formats a message according to the given styles. - * - * @param string $message The message to style - * - * @return string The styled message - * - * @api - */ - public function format($message); -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Formatter; - -/** - * Formatter style class for defining styles. - * - * @author Konstantin Kudryashov - * - * @api - */ -class OutputFormatterStyle implements OutputFormatterStyleInterface -{ - private static $availableForegroundColors = array( - 'black' => 30, - 'red' => 31, - 'green' => 32, - 'yellow' => 33, - 'blue' => 34, - 'magenta' => 35, - 'cyan' => 36, - 'white' => 37 - ); - private static $availableBackgroundColors = array( - 'black' => 40, - 'red' => 41, - 'green' => 42, - 'yellow' => 43, - 'blue' => 44, - 'magenta' => 45, - 'cyan' => 46, - 'white' => 47 - ); - private static $availableOptions = array( - 'bold' => 1, - 'underscore' => 4, - 'blink' => 5, - 'reverse' => 7, - 'conceal' => 8 - ); - - private $foreground; - private $background; - private $options = array(); - - /** - * Initializes output formatter style. - * - * @param string|null $foreground The style foreground color name - * @param string|null $background The style background color name - * @param array $options The style options - * - * @api - */ - public function __construct($foreground = null, $background = null, array $options = array()) - { - if (null !== $foreground) { - $this->setForeground($foreground); - } - if (null !== $background) { - $this->setBackground($background); - } - if (count($options)) { - $this->setOptions($options); - } - } - - /** - * Sets style foreground color. - * - * @param string|null $color The color name - * - * @throws \InvalidArgumentException When the color name isn't defined - * - * @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]; - } - - /** - * Sets style background color. - * - * @param string|null $color The color name - * - * @throws \InvalidArgumentException When the color name isn't defined - * - * @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]; - } - - /** - * Sets some specific style option. - * - * @param string $option The option name - * - * @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 (false === array_search(static::$availableOptions[$option], $this->options)) { - $this->options[] = static::$availableOptions[$option]; - } - } - - /** - * Unsets some specific style option. - * - * @param string $option The option name - * - * @throws \InvalidArgumentException When the option name isn't defined - * - */ - 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]); - } - } - - /** - * Sets multiple style options at once. - * - * @param array $options - */ - public function setOptions(array $options) - { - $this->options = array(); - - foreach ($options as $option) { - $this->setOption($option); - } - } - - /** - * Applies the style to a given text. - * - * @param string $text The text to style - * - * @return string - */ - public function apply($text) - { - $codes = array(); - - if (null !== $this->foreground) { - $codes[] = $this->foreground; - } - if (null !== $this->background) { - $codes[] = $this->background; - } - if (count($this->options)) { - $codes = array_merge($codes, $this->options); - } - - if (0 === count($codes)) { - return $text; - } - - return sprintf("\033[%sm%s\033[0m", implode(';', $codes), $text); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Formatter; - -/** - * Formatter style interface for defining styles. - * - * @author Konstantin Kudryashov - * - * @api - */ -interface OutputFormatterStyleInterface -{ - /** - * Sets style foreground color. - * - * @param string $color The color name - * - * @api - */ - public function setForeground($color = null); - - /** - * Sets style background color. - * - * @param string $color The color name - * - * @api - */ - public function setBackground($color = null); - - /** - * Sets some specific style option. - * - * @param string $option The option name - * - * @api - */ - public function setOption($option); - - /** - * Unsets some specific style option. - * - * @param string $option The option name - */ - public function unsetOption($option); - - /** - * Sets multiple style options at once. - * - * @param array $options - */ - public function setOptions(array $options); - - /** - * Applies the style to a given text. - * - * @param string $text The text to style - * - * @return string - */ - public function apply($text); -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Formatter; - -/** - * @author Jean-François Simon - */ -class OutputFormatterStyleStack -{ - /** - * @var OutputFormatterStyleInterface[] - */ - private $styles; - - /** - * @var OutputFormatterStyleInterface - */ - private $emptyStyle; - - /** - * Constructor. - * - * @param OutputFormatterStyleInterface|null $emptyStyle - */ - public function __construct(OutputFormatterStyleInterface $emptyStyle = null) - { - $this->emptyStyle = $emptyStyle ?: new OutputFormatterStyle(); - $this->reset(); - } - - /** - * Resets stack (ie. empty internal arrays). - */ - public function reset() - { - $this->styles = array(); - } - - /** - * Pushes a style in the stack. - * - * @param OutputFormatterStyleInterface $style - */ - public function push(OutputFormatterStyleInterface $style) - { - $this->styles[] = $style; - } - - /** - * Pops a style from the stack. - * - * @param OutputFormatterStyleInterface|null $style - * - * @return OutputFormatterStyleInterface - * - * @throws \InvalidArgumentException When style tags incorrectly nested - */ - public function pop(OutputFormatterStyleInterface $style = null) - { - if (empty($this->styles)) { - return $this->emptyStyle; - } - - if (null === $style) { - return array_pop($this->styles); - } - - 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.'); - } - - /** - * Computes current style with stacks top codes. - * - * @return OutputFormatterStyle - */ - public function getCurrent() - { - if (empty($this->styles)) { - return $this->emptyStyle; - } - - return $this->styles[count($this->styles)-1]; - } - - /** - * @param OutputFormatterStyleInterface $emptyStyle - * - * @return OutputFormatterStyleStack - */ - public function setEmptyStyle(OutputFormatterStyleInterface $emptyStyle) - { - $this->emptyStyle = $emptyStyle; - - return $this; - } - - /** - * @return OutputFormatterStyleInterface - */ - public function getEmptyStyle() - { - return $this->emptyStyle; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Helper; - -/** - * HelperInterface is the interface all helpers must implement. - * - * @author Fabien Potencier - * - * @api - */ -interface HelperInterface -{ - /** - * Sets the helper set associated with this helper. - * - * @param HelperSet $helperSet A HelperSet instance - * - * @api - */ - public function setHelperSet(HelperSet $helperSet = null); - - /** - * Gets the helper set associated with this helper. - * - * @return HelperSet A HelperSet instance - * - * @api - */ - public function getHelperSet(); - - /** - * Returns the canonical name of this helper. - * - * @return string The canonical name - * - * @api - */ - public function getName(); -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Helper; - -use Symfony\Component\Console\Formatter\OutputFormatter; - -/** - * The Formatter class provides helpers to format messages. - * - * @author Fabien Potencier - */ -class FormatterHelper extends Helper -{ - /** - * Formats a message within a section. - * - * @param string $section The section name - * @param string $message The message - * @param string $style The style to apply to the section - * - * @return string The format section - */ - public function formatSection($section, $message, $style = 'info') - { - return sprintf('<%s>[%s] %s', $style, $section, $style, $message); - } - - /** - * Formats a message as a block of text. - * - * @param string|array $messages The message to write in the block - * @param string $style The style to apply to the whole block - * @param Boolean $large Whether to return a large block - * - * @return string The formatter message - */ - public function formatBlock($messages, $style, $large = false) - { - $messages = (array) $messages; - - $len = 0; - $lines = array(); - foreach ($messages as $message) { - $message = OutputFormatter::escape($message); - $lines[] = sprintf($large ? ' %s ' : ' %s ', $message); - $len = max($this->strlen($message) + ($large ? 4 : 2), $len); - } - - $messages = $large ? array(str_repeat(' ', $len)) : array(); - foreach ($lines as $line) { - $messages[] = $line.str_repeat(' ', $len - $this->strlen($line)); - } - if ($large) { - $messages[] = str_repeat(' ', $len); - } - - foreach ($messages as &$message) { - $message = sprintf('<%s>%s', $style, $message, $style); - } - - return implode("\n", $messages); - } - - /** - * {@inheritDoc} - */ - public function getName() - { - return 'formatter'; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Helper; - -use Symfony\Component\Console\Output\OutputInterface; -use InvalidArgumentException; - -/** - * Provides helpers to display table output. - * - * @author Саша Стаменковић - */ -class TableHelper extends Helper -{ - const LAYOUT_DEFAULT = 0; - const LAYOUT_BORDERLESS = 1; - const LAYOUT_COMPACT = 2; - - /** - * Table headers. - * - * @var array - */ - private $headers = array(); - - /** - * Table rows. - * - * @var array - */ - private $rows = array(); - - // Rendering options - private $paddingChar; - private $horizontalBorderChar; - private $verticalBorderChar; - private $crossingChar; - private $cellHeaderFormat; - private $cellRowFormat; - private $cellRowContentFormat; - private $borderFormat; - private $padType; - - /** - * Column widths cache. - * - * @var array - */ - private $columnWidths = array(); - - /** - * Number of columns cache. - * - * @var array - */ - private $numberOfColumns; - - /** - * @var OutputInterface - */ - private $output; - - public function __construct() - { - $this->setLayout(self::LAYOUT_DEFAULT); - } - - /** - * Sets table layout type. - * - * @param int $layout self::LAYOUT_* - * - * @return TableHelper - */ - public function setLayout($layout) - { - switch ($layout) { - case self::LAYOUT_BORDERLESS: - $this - ->setPaddingChar(' ') - ->setHorizontalBorderChar('=') - ->setVerticalBorderChar(' ') - ->setCrossingChar(' ') - ->setCellHeaderFormat('%s') - ->setCellRowFormat('%s') - ->setCellRowContentFormat(' %s ') - ->setBorderFormat('%s') - ->setPadType(STR_PAD_RIGHT) - ; - break; - - case self::LAYOUT_COMPACT: - $this - ->setPaddingChar(' ') - ->setHorizontalBorderChar('') - ->setVerticalBorderChar(' ') - ->setCrossingChar('') - ->setCellHeaderFormat('%s') - ->setCellRowFormat('%s') - ->setCellRowContentFormat('%s') - ->setBorderFormat('%s') - ->setPadType(STR_PAD_RIGHT) - ; - break; - - case self::LAYOUT_DEFAULT: - $this - ->setPaddingChar(' ') - ->setHorizontalBorderChar('-') - ->setVerticalBorderChar('|') - ->setCrossingChar('+') - ->setCellHeaderFormat('%s') - ->setCellRowFormat('%s') - ->setCellRowContentFormat(' %s ') - ->setBorderFormat('%s') - ->setPadType(STR_PAD_RIGHT) - ; - break; - - default: - throw new InvalidArgumentException(sprintf('Invalid table layout "%s".', $layout)); - break; - }; - - return $this; - } - - public function setHeaders(array $headers) - { - $this->headers = array_values($headers); - - return $this; - } - - public function setRows(array $rows) - { - $this->rows = array(); - - return $this->addRows($rows); - } - - public function addRows(array $rows) - { - foreach ($rows as $row) { - $this->addRow($row); - } - - return $this; - } - - public function addRow(array $row) - { - $this->rows[] = array_values($row); - - $keys = array_keys($this->rows); - $rowKey = array_pop($keys); - - foreach ($row as $key => $cellValue) { - if (!strstr($cellValue, "\n")) { - continue; - } - - $lines = explode("\n", $cellValue); - $this->rows[$rowKey][$key] = $lines[0]; - unset($lines[0]); - - foreach ($lines as $lineKey => $line) { - $nextRowKey = $rowKey + $lineKey + 1; - - if (isset($this->rows[$nextRowKey])) { - $this->rows[$nextRowKey][$key] = $line; - } else { - $this->rows[$nextRowKey] = array($key => $line); - } - } - } - - return $this; - } - - public function setRow($column, array $row) - { - $this->rows[$column] = $row; - - return $this; - } - - /** - * Sets padding character, used for cell padding. - * - * @param string $paddingChar - * - * @return TableHelper - */ - public function setPaddingChar($paddingChar) - { - if (!$paddingChar) { - throw new \LogicException('The padding char must not be empty'); - } - - $this->paddingChar = $paddingChar; - - return $this; - } - - /** - * Sets horizontal border character. - * - * @param string $horizontalBorderChar - * - * @return TableHelper - */ - public function setHorizontalBorderChar($horizontalBorderChar) - { - $this->horizontalBorderChar = $horizontalBorderChar; - - return $this; - } - - /** - * Sets vertical border character. - * - * @param string $verticalBorderChar - * - * @return TableHelper - */ - public function setVerticalBorderChar($verticalBorderChar) - { - $this->verticalBorderChar = $verticalBorderChar; - - return $this; - } - - /** - * Sets crossing character. - * - * @param string $crossingChar - * - * @return TableHelper - */ - public function setCrossingChar($crossingChar) - { - $this->crossingChar = $crossingChar; - - return $this; - } - - /** - * Sets header cell format. - * - * @param string $cellHeaderFormat - * - * @return TableHelper - */ - public function setCellHeaderFormat($cellHeaderFormat) - { - $this->cellHeaderFormat = $cellHeaderFormat; - - return $this; - } - - /** - * Sets row cell format. - * - * @param string $cellRowFormat - * - * @return TableHelper - */ - public function setCellRowFormat($cellRowFormat) - { - $this->cellRowFormat = $cellRowFormat; - - return $this; - } - - /** - * Sets row cell content format. - * - * @param string $cellRowContentFormat - * - * @return TableHelper - */ - public function setCellRowContentFormat($cellRowContentFormat) - { - $this->cellRowContentFormat = $cellRowContentFormat; - - return $this; - } - - /** - * Sets table border format. - * - * @param string $borderFormat - * - * @return TableHelper - */ - public function setBorderFormat($borderFormat) - { - $this->borderFormat = $borderFormat; - - return $this; - } - - /** - * Sets cell padding type. - * - * @param integer $padType STR_PAD_* - * - * @return TableHelper - */ - public function setPadType($padType) - { - $this->padType = $padType; - - return $this; - } - - /** - * Renders table to output. - * - * Example: - * +---------------+-----------------------+------------------+ - * | ISBN | Title | Author | - * +---------------+-----------------------+------------------+ - * | 99921-58-10-7 | Divine Comedy | Dante Alighieri | - * | 9971-5-0210-0 | A Tale of Two Cities | Charles Dickens | - * | 960-425-059-0 | The Lord of the Rings | J. R. R. Tolkien | - * +---------------+-----------------------+------------------+ - * - * @param OutputInterface $output - */ - public function render(OutputInterface $output) - { - $this->output = $output; - - $this->renderRowSeparator(); - $this->renderRow($this->headers, $this->cellHeaderFormat); - if (!empty($this->headers)) { - $this->renderRowSeparator(); - } - foreach ($this->rows as $row) { - $this->renderRow($row, $this->cellRowFormat); - } - if (!empty($this->rows)) { - $this->renderRowSeparator(); - } - - $this->cleanup(); - } - - /** - * Renders horizontal header separator. - * - * Example: +-----+-----------+-------+ - */ - private function renderRowSeparator() - { - if (0 === $count = $this->getNumberOfColumns()) { - return; - } - - if (!$this->horizontalBorderChar && !$this->crossingChar) { - return; - } - - $markup = $this->crossingChar; - for ($column = 0; $column < $count; $column++) { - $markup .= str_repeat($this->horizontalBorderChar, $this->getColumnWidth($column)).$this->crossingChar; - } - - $this->output->writeln(sprintf($this->borderFormat, $markup)); - } - - /** - * Renders vertical column separator. - */ - private function renderColumnSeparator() - { - $this->output->write(sprintf($this->borderFormat, $this->verticalBorderChar)); - } - - /** - * Renders table row. - * - * Example: | 9971-5-0210-0 | A Tale of Two Cities | Charles Dickens | - * - * @param array $row - * @param string $cellFormat - */ - private function renderRow(array $row, $cellFormat) - { - if (empty($row)) { - return; - } - - $this->renderColumnSeparator(); - for ($column = 0, $count = $this->getNumberOfColumns(); $column < $count; $column++) { - $this->renderCell($row, $column, $cellFormat); - $this->renderColumnSeparator(); - } - $this->output->writeln(''); - } - - /** - * Renders table cell with padding. - * - * @param array $row - * @param integer $column - * @param string $cellFormat - */ - private function renderCell(array $row, $column, $cellFormat) - { - $cell = isset($row[$column]) ? $row[$column] : ''; - $width = $this->getColumnWidth($column); - - // str_pad won't work properly with multi-byte strings, we need to fix the padding - if (function_exists('mb_strlen') && false !== $encoding = mb_detect_encoding($cell)) { - $width += strlen($cell) - mb_strlen($cell, $encoding); - } - - $width += $this->strlen($cell) - $this->computeLengthWithoutDecoration($cell); - - $content = sprintf($this->cellRowContentFormat, $cell); - - $this->output->write(sprintf($cellFormat, str_pad($content, $width, $this->paddingChar, $this->padType))); - } - - /** - * Gets number of columns for this table. - * - * @return int - */ - private function getNumberOfColumns() - { - if (null !== $this->numberOfColumns) { - return $this->numberOfColumns; - } - - $columns = array(0); - $columns[] = count($this->headers); - foreach ($this->rows as $row) { - $columns[] = count($row); - } - - return $this->numberOfColumns = max($columns); - } - - /** - * Gets column width. - * - * @param integer $column - * - * @return int - */ - private function getColumnWidth($column) - { - if (isset($this->columnWidths[$column])) { - return $this->columnWidths[$column]; - } - - $lengths = array(0); - $lengths[] = $this->getCellWidth($this->headers, $column); - foreach ($this->rows as $row) { - $lengths[] = $this->getCellWidth($row, $column); - } - - return $this->columnWidths[$column] = max($lengths) + strlen($this->cellRowContentFormat) - 2; - } - - /** - * Gets cell width. - * - * @param array $row - * @param integer $column - * - * @return int - */ - private function getCellWidth(array $row, $column) - { - return isset($row[$column]) ? $this->computeLengthWithoutDecoration($row[$column]) : 0; - } - - /** - * Called after rendering to cleanup cache data. - */ - private function cleanup() - { - $this->columnWidths = array(); - $this->numberOfColumns = null; - } - - private function computeLengthWithoutDecoration($string) - { - $formatter = $this->output->getFormatter(); - $isDecorated = $formatter->isDecorated(); - $formatter->setDecorated(false); - - $string = $formatter->format($string); - $formatter->setDecorated($isDecorated); - - return $this->strlen($string); - } - - /** - * {@inheritDoc} - */ - public function getName() - { - return 'table'; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Helper; - -use Symfony\Component\Console\Descriptor\DescriptorInterface; -use Symfony\Component\Console\Descriptor\JsonDescriptor; -use Symfony\Component\Console\Descriptor\MarkdownDescriptor; -use Symfony\Component\Console\Descriptor\TextDescriptor; -use Symfony\Component\Console\Descriptor\XmlDescriptor; -use Symfony\Component\Console\Output\OutputInterface; - -/** - * This class adds helper method to describe objects in various formats. - * - * @author Jean-François Simon - */ -class DescriptorHelper extends Helper -{ - /** - * @var DescriptorInterface[] - */ - private $descriptors = array(); - - /** - * Constructor. - */ - public function __construct() - { - $this - ->register('txt', new TextDescriptor()) - ->register('xml', new XmlDescriptor()) - ->register('json', new JsonDescriptor()) - ->register('md', new MarkdownDescriptor()) - ; - } - - /** - * Describes an object if supported. - * - * Available options are: - * * format: string, the output format name - * * raw_text: boolean, sets output type as raw - * - * @param OutputInterface $output - * @param object $object - * @param array $options - * - * @throws \InvalidArgumentException - */ - public function describe(OutputInterface $output, $object, array $options = array()) - { - $options = array_merge(array( - 'raw_text' => false, - 'format' => 'txt', - ), $options); - - if (!isset($this->descriptors[$options['format']])) { - throw new \InvalidArgumentException(sprintf('Unsupported format "%s".', $options['format'])); - } - - $descriptor = $this->descriptors[$options['format']]; - $descriptor->describe($output, $object, $options); - } - - /** - * Registers a descriptor. - * - * @param string $format - * @param DescriptorInterface $descriptor - * - * @return DescriptorHelper - */ - public function register($format, DescriptorInterface $descriptor) - { - $this->descriptors[$format] = $descriptor; - - return $this; - } - - /** - * {@inheritdoc} - */ - public function getName() - { - return 'descriptor'; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Helper; - -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\InputAwareInterface; - -/** - * An implementation of InputAwareInterface for Helpers. - * - * @author Wouter J - */ -abstract class InputAwareHelper extends Helper implements InputAwareInterface -{ - protected $input; - - /** - * {@inheritDoc} - */ - public function setInput(InputInterface $input) - { - $this->input = $input; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Helper; - -use Symfony\Component\Console\Output\OutputInterface; - -/** - * The Progress class provides helpers to display progress output. - * - * @author Chris Jones - * @author Fabien Potencier - */ -class ProgressHelper extends Helper -{ - const FORMAT_QUIET = ' %percent%%'; - const FORMAT_NORMAL = ' %current%/%max% [%bar%] %percent%%'; - const FORMAT_VERBOSE = ' %current%/%max% [%bar%] %percent%% Elapsed: %elapsed%'; - const FORMAT_QUIET_NOMAX = ' %current%'; - const FORMAT_NORMAL_NOMAX = ' %current% [%bar%]'; - const FORMAT_VERBOSE_NOMAX = ' %current% [%bar%] Elapsed: %elapsed%'; - - // options - private $barWidth = 28; - private $barChar = '='; - private $emptyBarChar = '-'; - private $progressChar = '>'; - private $format = null; - private $redrawFreq = 1; - - private $lastMessagesLength; - private $barCharOriginal; - - /** - * @var OutputInterface - */ - private $output; - - /** - * Current step - * - * @var integer - */ - private $current; - - /** - * Maximum number of steps - * - * @var integer - */ - private $max; - - /** - * Start time of the progress bar - * - * @var integer - */ - private $startTime; - - /** - * List of formatting variables - * - * @var array - */ - private $defaultFormatVars = array( - 'current', - 'max', - 'bar', - 'percent', - 'elapsed', - ); - - /** - * Available formatting variables - * - * @var array - */ - private $formatVars; - - /** - * Stored format part widths (used for padding) - * - * @var array - */ - private $widths = array( - 'current' => 4, - 'max' => 4, - 'percent' => 3, - 'elapsed' => 6, - ); - - /** - * Various time formats - * - * @var array - */ - private $timeFormats = array( - array(0, '???'), - array(2, '1 sec'), - array(59, 'secs', 1), - array(60, '1 min'), - array(3600, 'mins', 60), - array(5400, '1 hr'), - array(86400, 'hrs', 3600), - array(129600, '1 day'), - array(604800, 'days', 86400), - ); - - /** - * Sets the progress bar width. - * - * @param int $size The progress bar size - */ - public function setBarWidth($size) - { - $this->barWidth = (int) $size; - } - - /** - * Sets the bar character. - * - * @param string $char A character - */ - public function setBarCharacter($char) - { - $this->barChar = $char; - } - - /** - * Sets the empty bar character. - * - * @param string $char A character - */ - public function setEmptyBarCharacter($char) - { - $this->emptyBarChar = $char; - } - - /** - * Sets the progress bar character. - * - * @param string $char A character - */ - public function setProgressCharacter($char) - { - $this->progressChar = $char; - } - - /** - * Sets the progress bar format. - * - * @param string $format The format - */ - public function setFormat($format) - { - $this->format = $format; - } - - /** - * Sets the redraw frequency. - * - * @param int $freq The frequency in steps - */ - public function setRedrawFrequency($freq) - { - $this->redrawFreq = (int) $freq; - } - - /** - * Starts the progress output. - * - * @param OutputInterface $output An Output instance - * @param integer|null $max Maximum steps - */ - public function start(OutputInterface $output, $max = null) - { - $this->startTime = time(); - $this->current = 0; - $this->max = (int) $max; - $this->output = $output; - $this->lastMessagesLength = 0; - $this->barCharOriginal = ''; - - if (null === $this->format) { - switch ($output->getVerbosity()) { - case OutputInterface::VERBOSITY_QUIET: - $this->format = self::FORMAT_QUIET_NOMAX; - if ($this->max > 0) { - $this->format = self::FORMAT_QUIET; - } - break; - case OutputInterface::VERBOSITY_VERBOSE: - case OutputInterface::VERBOSITY_VERY_VERBOSE: - case OutputInterface::VERBOSITY_DEBUG: - $this->format = self::FORMAT_VERBOSE_NOMAX; - if ($this->max > 0) { - $this->format = self::FORMAT_VERBOSE; - } - break; - default: - $this->format = self::FORMAT_NORMAL_NOMAX; - if ($this->max > 0) { - $this->format = self::FORMAT_NORMAL; - } - break; - } - } - - $this->initialize(); - } - - /** - * Advances the progress output X steps. - * - * @param integer $step Number of steps to advance - * @param Boolean $redraw Whether to redraw or not - * - * @throws \LogicException - */ - public function advance($step = 1, $redraw = false) - { - $this->setCurrent($this->current + $step, $redraw); - } - - /** - * Sets the current progress. - * - * @param integer $current The current progress - * @param Boolean $redraw Whether to redraw or not - * - * @throws \LogicException - */ - public function setCurrent($current, $redraw = false) - { - if (null === $this->startTime) { - throw new \LogicException('You must start the progress bar before calling setCurrent().'); - } - - $current = (int) $current; - - if ($current < $this->current) { - throw new \LogicException('You can\'t regress the progress bar'); - } - - if (0 === $this->current) { - $redraw = true; - } - - $prevPeriod = intval($this->current / $this->redrawFreq); - - $this->current = $current; - - $currPeriod = intval($this->current / $this->redrawFreq); - if ($redraw || $prevPeriod !== $currPeriod || $this->max === $this->current) { - $this->display(); - } - } - - /** - * Outputs the current progress string. - * - * @param Boolean $finish Forces the end result - * - * @throws \LogicException - */ - public function display($finish = false) - { - if (null === $this->startTime) { - throw new \LogicException('You must start the progress bar before calling display().'); - } - - $message = $this->format; - foreach ($this->generate($finish) as $name => $value) { - $message = str_replace("%{$name}%", $value, $message); - } - $this->overwrite($this->output, $message); - } - - /** - * Removes the progress bar from the current line. - * - * This is useful if you wish to write some output - * while a progress bar is running. - * Call display() to show the progress bar again. - */ - public function clear() - { - $this->overwrite($this->output, ''); - } - - /** - * Finishes the progress output. - */ - public function finish() - { - if (null === $this->startTime) { - throw new \LogicException('You must start the progress bar before calling finish().'); - } - - if (null !== $this->startTime) { - if (!$this->max) { - $this->barChar = $this->barCharOriginal; - $this->display(true); - } - $this->startTime = null; - $this->output->writeln(''); - $this->output = null; - } - } - - /** - * Initializes the progress helper. - */ - private function initialize() - { - $this->formatVars = array(); - foreach ($this->defaultFormatVars as $var) { - if (false !== strpos($this->format, "%{$var}%")) { - $this->formatVars[$var] = true; - } - } - - if ($this->max > 0) { - $this->widths['max'] = $this->strlen($this->max); - $this->widths['current'] = $this->widths['max']; - } else { - $this->barCharOriginal = $this->barChar; - $this->barChar = $this->emptyBarChar; - } - } - - /** - * Generates the array map of format variables to values. - * - * @param Boolean $finish Forces the end result - * - * @return array Array of format vars and values - */ - private function generate($finish = false) - { - $vars = array(); - $percent = 0; - if ($this->max > 0) { - $percent = (float) $this->current / $this->max; - } - - if (isset($this->formatVars['bar'])) { - $completeBars = 0; - - if ($this->max > 0) { - $completeBars = floor($percent * $this->barWidth); - } else { - if (!$finish) { - $completeBars = floor($this->current % $this->barWidth); - } else { - $completeBars = $this->barWidth; - } - } - - $emptyBars = $this->barWidth - $completeBars - $this->strlen($this->progressChar); - $bar = str_repeat($this->barChar, $completeBars); - if ($completeBars < $this->barWidth) { - $bar .= $this->progressChar; - $bar .= str_repeat($this->emptyBarChar, $emptyBars); - } - - $vars['bar'] = $bar; - } - - if (isset($this->formatVars['elapsed'])) { - $elapsed = time() - $this->startTime; - $vars['elapsed'] = str_pad($this->humaneTime($elapsed), $this->widths['elapsed'], ' ', STR_PAD_LEFT); - } - - if (isset($this->formatVars['current'])) { - $vars['current'] = str_pad($this->current, $this->widths['current'], ' ', STR_PAD_LEFT); - } - - if (isset($this->formatVars['max'])) { - $vars['max'] = $this->max; - } - - if (isset($this->formatVars['percent'])) { - $vars['percent'] = str_pad(floor($percent * 100), $this->widths['percent'], ' ', STR_PAD_LEFT); - } - - return $vars; - } - - /** - * Converts seconds into human-readable format. - * - * @param integer $secs Number of seconds - * - * @return string Time in readable format - */ - private function humaneTime($secs) - { - $text = ''; - foreach ($this->timeFormats as $format) { - if ($secs < $format[0]) { - if (count($format) == 2) { - $text = $format[1]; - break; - } else { - $text = ceil($secs / $format[2]).' '.$format[1]; - break; - } - } - } - - return $text; - } - - /** - * Overwrites a previous message to the output. - * - * @param OutputInterface $output An Output instance - * @param string $message The message - */ - private function overwrite(OutputInterface $output, $message) - { - $length = $this->strlen($message); - - // append whitespace to match the last line's length - if (null !== $this->lastMessagesLength && $this->lastMessagesLength > $length) { - $message = str_pad($message, $this->lastMessagesLength, "\x20", STR_PAD_RIGHT); - } - - // carriage return - $output->write("\x0D"); - $output->write($message); - - $this->lastMessagesLength = $this->strlen($message); - } - - /** - * {@inheritDoc} - */ - public function getName() - { - return 'progress'; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Helper; - -use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\Console\Formatter\OutputFormatterStyle; - -/** - * The Dialog class provides helpers to interact with the user. - * - * @author Fabien Potencier - */ -class DialogHelper extends InputAwareHelper -{ - private $inputStream; - private static $shell; - private static $stty; - - /** - * Asks the user to select a value. - * - * @param OutputInterface $output An Output instance - * @param string|array $question The question to ask - * @param array $choices List of choices to pick from - * @param Boolean|string $default The default answer if the user enters nothing - * @param Boolean|integer $attempts Max number of times to ask before giving up (false by default, which means infinite) - * @param string $errorMessage Message which will be shown if invalid value from choice list would be picked - * @param Boolean $multiselect Select more than one value separated by comma - * - * @return integer|string|array The selected value or values (the key of the choices array) - * - * @throws \InvalidArgumentException - */ - public function select(OutputInterface $output, $question, $choices, $default = null, $attempts = false, $errorMessage = 'Value "%s" is invalid', $multiselect = false) - { - $width = max(array_map('strlen', array_keys($choices))); - - $messages = (array) $question; - foreach ($choices as $key => $value) { - $messages[] = sprintf(" [%-${width}s] %s", $key, $value); - } - - $output->writeln($messages); - - $result = $this->askAndValidate($output, '> ', function ($picked) use ($choices, $errorMessage, $multiselect) { - // Collapse all spaces. - $selectedChoices = str_replace(" ", "", $picked); - - 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, $picked)); - } - $selectedChoices = explode(",", $selectedChoices); - } else { - $selectedChoices = array($picked); - } - - $multiselectChoices = array(); - - foreach ($selectedChoices as $value) { - if (empty($choices[$value])) { - throw new \InvalidArgumentException(sprintf($errorMessage, $value)); - } - array_push($multiselectChoices, $value); - } - - if ($multiselect) { - return $multiselectChoices; - } - - return $picked; - }, $attempts, $default); - - return $result; - } - - /** - * Asks a question to the user. - * - * @param OutputInterface $output An Output instance - * @param string|array $question The question to ask - * @param string $default The default answer if none is given by the user - * @param array $autocomplete List of values to autocomplete - * - * @return string The user answer - * - * @throws \RuntimeException If there is no data to read in the input stream - */ - public function ask(OutputInterface $output, $question, $default = null, array $autocomplete = null) - { - if ($this->input && !$this->input->isInteractive()) { - return $default; - } - - $output->write($question); - - $inputStream = $this->inputStream ?: STDIN; - - if (null === $autocomplete || !$this->hasSttyAvailable()) { - $ret = fgets($inputStream, 4096); - if (false === $ret) { - throw new \RuntimeException('Aborted'); - } - $ret = trim($ret); - } else { - $ret = ''; - - $i = 0; - $ofs = -1; - $matches = $autocomplete; - $numMatches = count($matches); - - $sttyMode = shell_exec('stty -g'); - - // Disable icanon (so we can fread each keypress) and echo (we'll do echoing here instead) - shell_exec('stty -icanon -echo'); - - // Add highlighted text style - $output->getFormatter()->setStyle('hl', new OutputFormatterStyle('black', 'white')); - - // Read a keypress - while (!feof($inputStream)) { - $c = fread($inputStream, 1); - - // Backspace Character - if ("\177" === $c) { - if (0 === $numMatches && 0 !== $i) { - $i--; - // Move cursor backwards - $output->write("\033[1D"); - } - - if ($i === 0) { - $ofs = -1; - $matches = $autocomplete; - $numMatches = count($matches); - } else { - $numMatches = 0; - } - - // Pop the last character off the end of our string - $ret = substr($ret, 0, $i); - } elseif ("\033" === $c) { // Did we read an escape sequence? - $c .= fread($inputStream, 2); - - // A = Up Arrow. B = Down Arrow - if ('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]; - // Echo out remaining chars for current match - $output->write(substr($ret, $i)); - $i = strlen($ret); - } - - if ("\n" === $c) { - $output->write($c); - break; - } - - $numMatches = 0; - } - - continue; - } else { - $output->write($c); - $ret .= $c; - $i++; - - $numMatches = 0; - $ofs = 0; - - foreach ($autocomplete as $value) { - // If typed characters match the beginning chunk of value (e.g. [AcmeDe]moBundle) - if (0 === strpos($value, $ret) && $i !== strlen($value)) { - $matches[$numMatches++] = $value; - } - } - } - - // Erase characters from cursor to end of line - $output->write("\033[K"); - - if ($numMatches > 0 && -1 !== $ofs) { - // Save cursor position - $output->write("\0337"); - // Write highlighted text - $output->write(''.substr($matches[$ofs], $i).''); - // Restore cursor position - $output->write("\0338"); - } - } - - // Reset stty so it behaves normally again - shell_exec(sprintf('stty %s', $sttyMode)); - } - - return strlen($ret) > 0 ? $ret : $default; - } - - /** - * Asks a confirmation to the user. - * - * The question will be asked until the user answers by nothing, yes, or no. - * - * @param OutputInterface $output An Output instance - * @param string|array $question The question to ask - * @param Boolean $default The default answer if the user enters nothing - * - * @return Boolean true if the user has confirmed, false otherwise - */ - public function askConfirmation(OutputInterface $output, $question, $default = true) - { - $answer = 'z'; - while ($answer && !in_array(strtolower($answer[0]), array('y', 'n'))) { - $answer = $this->ask($output, $question); - } - - if (false === $default) { - return $answer && 'y' == strtolower($answer[0]); - } - - return !$answer || 'y' == strtolower($answer[0]); - } - - /** - * Asks a question to the user, the response is hidden - * - * @param OutputInterface $output An Output instance - * @param string|array $question The question - * @param Boolean $fallback In case the response can not be hidden, whether to fallback on non-hidden question or not - * - * @return string The answer - * - * @throws \RuntimeException In case the fallback is deactivated and the response can not be hidden - */ - public function askHiddenResponse(OutputInterface $output, $question, $fallback = true) - { - if (defined('PHP_WINDOWS_VERSION_BUILD')) { - $exe = __DIR__.'/../Resources/bin/hiddeninput.exe'; - - // handle code running from a phar - if ('phar:' === substr(__FILE__, 0, 5)) { - $tmpExe = sys_get_temp_dir().'/hiddeninput.exe'; - copy($exe, $tmpExe); - $exe = $tmpExe; - } - - $output->write($question); - $value = rtrim(shell_exec($exe)); - $output->writeln(''); - - if (isset($tmpExe)) { - unlink($tmpExe); - } - - return $value; - } - - if ($this->hasSttyAvailable()) { - $output->write($question); - - $sttyMode = shell_exec('stty -g'); - - shell_exec('stty -echo'); - $value = fgets($this->inputStream ?: STDIN, 4096); - shell_exec(sprintf('stty %s', $sttyMode)); - - if (false === $value) { - throw new \RuntimeException('Aborted'); - } - - $value = trim($value); - $output->writeln(''); - - return $value; - } - - if (false !== $shell = $this->getShell()) { - $output->write($question); - $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)); - $output->writeln(''); - - return $value; - } - - if ($fallback) { - return $this->ask($output, $question); - } - - throw new \RuntimeException('Unable to hide the response'); - } - - /** - * Asks for a value and validates the response. - * - * The validator receives the data to validate. It must return the - * validated data when the data is valid and throw an exception - * otherwise. - * - * @param OutputInterface $output An Output instance - * @param string|array $question The question to ask - * @param callable $validator A PHP callback - * @param integer $attempts Max number of times to ask before giving up (false by default, which means infinite) - * @param string $default The default answer if none is given by the user - * @param array $autocomplete List of values to autocomplete - * - * @return mixed - * - * @throws \Exception When any of the validators return an error - */ - public function askAndValidate(OutputInterface $output, $question, $validator, $attempts = false, $default = null, array $autocomplete = null) - { - $that = $this; - - $interviewer = function () use ($output, $question, $default, $autocomplete, $that) { - return $that->ask($output, $question, $default, $autocomplete); - }; - - return $this->validateAttempts($interviewer, $output, $validator, $attempts); - } - - /** - * Asks for a value, hide and validates the response. - * - * The validator receives the data to validate. It must return the - * validated data when the data is valid and throw an exception - * otherwise. - * - * @param OutputInterface $output An Output instance - * @param string|array $question The question to ask - * @param callable $validator A PHP callback - * @param integer $attempts Max number of times to ask before giving up (false by default, which means infinite) - * @param Boolean $fallback In case the response can not be hidden, whether to fallback on non-hidden question or not - * - * @return string The response - * - * @throws \Exception When any of the validators return an error - * @throws \RuntimeException In case the fallback is deactivated and the response can not be hidden - * - */ - public function askHiddenResponseAndValidate(OutputInterface $output, $question, $validator, $attempts = false, $fallback = true) - { - $that = $this; - - $interviewer = function () use ($output, $question, $fallback, $that) { - return $that->askHiddenResponse($output, $question, $fallback); - }; - - return $this->validateAttempts($interviewer, $output, $validator, $attempts); - } - - /** - * Sets the input stream to read from when interacting with the user. - * - * This is mainly useful for testing purpose. - * - * @param resource $stream The input stream - */ - public function setInputStream($stream) - { - $this->inputStream = $stream; - } - - /** - * Returns the helper's input stream - * - * @return string - */ - public function getInputStream() - { - return $this->inputStream; - } - - /** - * {@inheritDoc} - */ - public function getName() - { - return 'dialog'; - } - - /** - * Return a valid Unix shell - * - * @return string|Boolean The valid shell name, false in case no valid shell is found - */ - private function getShell() - { - if (null !== self::$shell) { - return self::$shell; - } - - self::$shell = false; - - if (file_exists('/usr/bin/env')) { - // handle other OSs with bash/zsh/ksh/csh if available to hide the answer - $test = "/usr/bin/env %s -c 'echo OK' 2> /dev/null"; - foreach (array('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; - } - - /** - * Validate an attempt - * - * @param callable $interviewer A callable that will ask for a question and return the result - * @param OutputInterface $output An Output instance - * @param callable $validator A PHP callback - * @param integer $attempts Max number of times to ask before giving up ; false will ask infinitely - * - * @return string The validated response - * - * @throws \Exception In case the max number of attempts has been reached and no valid response has been given - */ - private function validateAttempts($interviewer, OutputInterface $output, $validator, $attempts) - { - $error = null; - while (false === $attempts || $attempts--) { - if (null !== $error) { - $output->writeln($this->getHelperSet()->get('formatter')->formatBlock($error->getMessage(), 'error')); - } - - try { - return call_user_func($validator, $interviewer()); - } catch (\Exception $error) { - } - } - - throw $error; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Helper; - -/** - * Helper is the base class for all helper classes. - * - * @author Fabien Potencier - */ -abstract class Helper implements HelperInterface -{ - protected $helperSet = null; - - /** - * Sets the helper set associated with this helper. - * - * @param HelperSet $helperSet A HelperSet instance - */ - public function setHelperSet(HelperSet $helperSet = null) - { - $this->helperSet = $helperSet; - } - - /** - * Gets the helper set associated with this helper. - * - * @return HelperSet A HelperSet instance - */ - public function getHelperSet() - { - return $this->helperSet; - } - - /** - * Returns the length of a string, using mb_strlen if it is available. - * - * @param string $string The string to check its length - * - * @return integer The length of the string - */ - protected function strlen($string) - { - if (!function_exists('mb_strlen')) { - return strlen($string); - } - - if (false === $encoding = mb_detect_encoding($string)) { - return strlen($string); - } - - return mb_strlen($string, $encoding); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Helper; - -use Symfony\Component\Console\Command\Command; - -/** - * HelperSet represents a set of helpers to be used with a command. - * - * @author Fabien Potencier - */ -class HelperSet implements \IteratorAggregate -{ - private $helpers = array(); - private $command; - - /** - * Constructor. - * - * @param Helper[] $helpers An array of helper. - */ - public function __construct(array $helpers = array()) - { - foreach ($helpers as $alias => $helper) { - $this->set($helper, is_int($alias) ? null : $alias); - } - } - - /** - * Sets a helper. - * - * @param HelperInterface $helper The helper instance - * @param string $alias An alias - */ - public function set(HelperInterface $helper, $alias = null) - { - $this->helpers[$helper->getName()] = $helper; - if (null !== $alias) { - $this->helpers[$alias] = $helper; - } - - $helper->setHelperSet($this); - } - - /** - * Returns true if the helper if defined. - * - * @param string $name The helper name - * - * @return Boolean true if the helper is defined, false otherwise - */ - public function has($name) - { - return isset($this->helpers[$name]); - } - - /** - * Gets a helper value. - * - * @param string $name The helper name - * - * @return HelperInterface The helper instance - * - * @throws \InvalidArgumentException if the helper is not defined - */ - public function get($name) - { - if (!$this->has($name)) { - throw new \InvalidArgumentException(sprintf('The helper "%s" is not defined.', $name)); - } - - return $this->helpers[$name]; - } - - /** - * Sets the command associated with this helper set. - * - * @param Command $command A Command instance - */ - public function setCommand(Command $command = null) - { - $this->command = $command; - } - - /** - * Gets the command associated with this helper set. - * - * @return Command A Command instance - */ - public function getCommand() - { - return $this->command; - } - - public function getIterator() - { - return new \ArrayIterator($this->helpers); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Tester; - -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\ArrayInput; -use Symfony\Component\Console\Output\StreamOutput; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Output\OutputInterface; - -/** - * Eases the testing of console commands. - * - * @author Fabien Potencier - */ -class CommandTester -{ - private $command; - private $input; - private $output; - private $statusCode; - - /** - * Constructor. - * - * @param Command $command A Command instance to test. - */ - public function __construct(Command $command) - { - $this->command = $command; - } - - /** - * Executes the command. - * - * Available options: - * - * * interactive: Sets the input interactive flag - * * decorated: Sets the output decorated flag - * * verbosity: Sets the output verbosity flag - * - * @param array $input An array of arguments and options - * @param array $options An array of options - * - * @return integer The command exit code - */ - public function execute(array $input, array $options = array()) - { - // set the command name automatically if the application requires - // this argument and no command name was passed - if (!isset($input['command']) - && (null !== $application = $this->command->getApplication()) - && $application->getDefinition()->hasArgument('command') - ) { - $input['command'] = $this->command->getName(); - } - - $this->input = new ArrayInput($input); - if (isset($options['interactive'])) { - $this->input->setInteractive($options['interactive']); - } - - $this->output = new StreamOutput(fopen('php://memory', 'w', false)); - if (isset($options['decorated'])) { - $this->output->setDecorated($options['decorated']); - } - if (isset($options['verbosity'])) { - $this->output->setVerbosity($options['verbosity']); - } - - return $this->statusCode = $this->command->run($this->input, $this->output); - } - - /** - * Gets the display returned by the last execution of the command. - * - * @param Boolean $normalize Whether to normalize end of lines to \n or not - * - * @return string The display - */ - public function getDisplay($normalize = false) - { - rewind($this->output->getStream()); - - $display = stream_get_contents($this->output->getStream()); - - if ($normalize) { - $display = str_replace(PHP_EOL, "\n", $display); - } - - return $display; - } - - /** - * Gets the input instance used by the last execution of the command. - * - * @return InputInterface The current input instance - */ - public function getInput() - { - return $this->input; - } - - /** - * Gets the output instance used by the last execution of the command. - * - * @return OutputInterface The current output instance - */ - public function getOutput() - { - return $this->output; - } - - /** - * Gets the status code returned by the last execution of the application. - * - * @return integer The status code - */ - public function getStatusCode() - { - return $this->statusCode; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Tester; - -use Symfony\Component\Console\Application; -use Symfony\Component\Console\Input\ArrayInput; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\Console\Output\StreamOutput; - -/** - * Eases the testing of console applications. - * - * When testing an application, don't forget to disable the auto exit flag: - * - * $application = new Application(); - * $application->setAutoExit(false); - * - * @author Fabien Potencier - */ -class ApplicationTester -{ - private $application; - private $input; - private $output; - private $statusCode; - - /** - * Constructor. - * - * @param Application $application An Application instance to test. - */ - public function __construct(Application $application) - { - $this->application = $application; - } - - /** - * Executes the application. - * - * Available options: - * - * * interactive: Sets the input interactive flag - * * decorated: Sets the output decorated flag - * * verbosity: Sets the output verbosity flag - * - * @param array $input An array of arguments and options - * @param array $options An array of options - * - * @return integer The command exit code - */ - public function run(array $input, $options = array()) - { - $this->input = new ArrayInput($input); - if (isset($options['interactive'])) { - $this->input->setInteractive($options['interactive']); - } - - $this->output = new StreamOutput(fopen('php://memory', 'w', false)); - if (isset($options['decorated'])) { - $this->output->setDecorated($options['decorated']); - } - if (isset($options['verbosity'])) { - $this->output->setVerbosity($options['verbosity']); - } - - return $this->statusCode = $this->application->run($this->input, $this->output); - } - - /** - * Gets the display returned by the last execution of the application. - * - * @param Boolean $normalize Whether to normalize end of lines to \n or not - * - * @return string The display - */ - public function getDisplay($normalize = false) - { - rewind($this->output->getStream()); - - $display = stream_get_contents($this->output->getStream()); - - if ($normalize) { - $display = str_replace(PHP_EOL, "\n", $display); - } - - return $display; - } - - /** - * Gets the input instance used by the last execution of the application. - * - * @return InputInterface The current input instance - */ - public function getInput() - { - return $this->input; - } - - /** - * Gets the output instance used by the last execution of the application. - * - * @return OutputInterface The current output instance - */ - public function getOutput() - { - return $this->output; - } - - /** - * Gets the status code returned by the last execution of the application. - * - * @return integer The status code - */ - public function getStatusCode() - { - return $this->statusCode; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Output; - -/** - * ConsoleOutputInterface is the interface implemented by ConsoleOutput class. - * This adds information about stderr output stream. - * - * @author Dariusz Górecki - */ -interface ConsoleOutputInterface extends OutputInterface -{ - /** - * Gets the OutputInterface for errors. - * - * @return OutputInterface - */ - public function getErrorOutput(); - - /** - * Sets the OutputInterface used for errors. - * - * @param OutputInterface $error - */ - public function setErrorOutput(OutputInterface $error); -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Output; - -use Symfony\Component\Console\Formatter\OutputFormatterInterface; -use Symfony\Component\Console\Formatter\OutputFormatter; - -/** - * Base class for output classes. - * - * There are five levels of verbosity: - * - * * normal: no option passed (normal output) - * * verbose: -v (more output) - * * very verbose: -vv (highly extended output) - * * debug: -vvv (all debug output) - * * quiet: -q (no output) - * - * @author Fabien Potencier - * - * @api - */ -abstract class Output implements OutputInterface -{ - private $verbosity; - private $formatter; - - /** - * Constructor. - * - * @param integer $verbosity The verbosity level (one of the VERBOSITY constants in OutputInterface) - * @param Boolean $decorated Whether to decorate messages - * @param OutputFormatterInterface|null $formatter Output formatter instance (null to use default OutputFormatter) - * - * @api - */ - public function __construct($verbosity = self::VERBOSITY_NORMAL, $decorated = false, OutputFormatterInterface $formatter = null) - { - $this->verbosity = null === $verbosity ? self::VERBOSITY_NORMAL : $verbosity; - $this->formatter = $formatter ?: new OutputFormatter(); - $this->formatter->setDecorated($decorated); - } - - /** - * {@inheritdoc} - */ - public function setFormatter(OutputFormatterInterface $formatter) - { - $this->formatter = $formatter; - } - - /** - * {@inheritdoc} - */ - public function getFormatter() - { - return $this->formatter; - } - - /** - * {@inheritdoc} - */ - public function setDecorated($decorated) - { - $this->formatter->setDecorated($decorated); - } - - /** - * {@inheritdoc} - */ - public function isDecorated() - { - return $this->formatter->isDecorated(); - } - - /** - * {@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; - } - - /** - * {@inheritdoc} - */ - public function writeln($messages, $type = self::OUTPUT_NORMAL) - { - $this->write($messages, true, $type); - } - - /** - * {@inheritdoc} - */ - public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL) - { - if (self::VERBOSITY_QUIET === $this->verbosity) { - return; - } - - $messages = (array) $messages; - - foreach ($messages as $message) { - switch ($type) { - case OutputInterface::OUTPUT_NORMAL: - $message = $this->formatter->format($message); - break; - case OutputInterface::OUTPUT_RAW: - break; - case OutputInterface::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); - } - } - - /** - * Writes a message to the output. - * - * @param string $message A message to write to the output - * @param Boolean $newline Whether to add a newline or not - */ - abstract protected function doWrite($message, $newline); -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Output; - -use Symfony\Component\Console\Formatter\OutputFormatterInterface; - -/** - * StreamOutput writes the output to a given stream. - * - * Usage: - * - * $output = new StreamOutput(fopen('php://stdout', 'w')); - * - * As `StreamOutput` can use any stream, you can also use a file: - * - * $output = new StreamOutput(fopen('/path/to/output.log', 'a', false)); - * - * @author Fabien Potencier - * - * @api - */ -class StreamOutput extends Output -{ - private $stream; - - /** - * Constructor. - * - * @param mixed $stream A stream resource - * @param integer $verbosity The verbosity level (one of the VERBOSITY constants in OutputInterface) - * @param Boolean|null $decorated Whether to decorate messages (null for auto-guessing) - * @param OutputFormatterInterface|null $formatter Output formatter instance (null to use default OutputFormatter) - * - * @throws \InvalidArgumentException When first argument is not a real stream - * - * @api - */ - public function __construct($stream, $verbosity = self::VERBOSITY_NORMAL, $decorated = null, OutputFormatterInterface $formatter = null) - { - if (!is_resource($stream) || 'stream' !== get_resource_type($stream)) { - throw new \InvalidArgumentException('The StreamOutput class needs a stream as its first argument.'); - } - - $this->stream = $stream; - - if (null === $decorated) { - $decorated = $this->hasColorSupport(); - } - - parent::__construct($verbosity, $decorated, $formatter); - } - - /** - * Gets the stream attached to this StreamOutput instance. - * - * @return resource A stream resource - */ - public function getStream() - { - return $this->stream; - } - - /** - * {@inheritdoc} - */ - protected function doWrite($message, $newline) - { - if (false === @fwrite($this->stream, $message.($newline ? PHP_EOL : ''))) { - // @codeCoverageIgnoreStart - // should never happen - throw new \RuntimeException('Unable to write output.'); - // @codeCoverageIgnoreEnd - } - - fflush($this->stream); - } - - /** - * Returns true if the stream supports colorization. - * - * Colorization is disabled if not supported by the stream: - * - * - Windows without Ansicon and ConEmu - * - non tty consoles - * - * @return Boolean true if the stream supports colorization, false otherwise - */ - protected function hasColorSupport() - { - // @codeCoverageIgnoreStart - if (DIRECTORY_SEPARATOR == '\\') { - return false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI'); - } - - return function_exists('posix_isatty') && @posix_isatty($this->stream); - // @codeCoverageIgnoreEnd - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Output; - -use Symfony\Component\Console\Formatter\OutputFormatterInterface; - -/** - * ConsoleOutput is the default class for all CLI output. It uses STDOUT. - * - * This class is a convenient wrapper around `StreamOutput`. - * - * $output = new ConsoleOutput(); - * - * This is equivalent to: - * - * $output = new StreamOutput(fopen('php://stdout', 'w')); - * - * @author Fabien Potencier - * - * @api - */ -class ConsoleOutput extends StreamOutput implements ConsoleOutputInterface -{ - private $stderr; - - /** - * Constructor. - * - * @param integer $verbosity The verbosity level (one of the VERBOSITY constants in OutputInterface) - * @param Boolean|null $decorated Whether to decorate messages (null for auto-guessing) - * @param OutputFormatterInterface|null $formatter Output formatter instance (null to use default OutputFormatter) - * - * @api - */ - public function __construct($verbosity = self::VERBOSITY_NORMAL, $decorated = null, OutputFormatterInterface $formatter = null) - { - $outputStream = 'php://stdout'; - if (!$this->hasStdoutSupport()) { - $outputStream = 'php://output'; - } - - parent::__construct(fopen($outputStream, 'w'), $verbosity, $decorated, $formatter); - - $this->stderr = new StreamOutput(fopen('php://stderr', 'w'), $verbosity, $decorated, $formatter); - } - - /** - * {@inheritdoc} - */ - public function setDecorated($decorated) - { - parent::setDecorated($decorated); - $this->stderr->setDecorated($decorated); - } - - /** - * {@inheritdoc} - */ - public function setFormatter(OutputFormatterInterface $formatter) - { - parent::setFormatter($formatter); - $this->stderr->setFormatter($formatter); - } - - /** - * {@inheritdoc} - */ - public function setVerbosity($level) - { - parent::setVerbosity($level); - $this->stderr->setVerbosity($level); - } - - /** - * {@inheritdoc} - */ - public function getErrorOutput() - { - return $this->stderr; - } - - /** - * {@inheritdoc} - */ - public function setErrorOutput(OutputInterface $error) - { - $this->stderr = $error; - } - - /** - * Returns true if current environment supports writing console output to - * STDOUT. - * - * IBM iSeries (OS400) exhibits character-encoding issues when writing to - * STDOUT and doesn't properly convert ASCII to EBCDIC, resulting in garbage - * output. - * - * @return boolean - */ - protected function hasStdoutSupport() - { - return ('OS400' != php_uname('s')); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Output; - -use Symfony\Component\Console\Formatter\OutputFormatter; -use Symfony\Component\Console\Formatter\OutputFormatterInterface; - -/** - * NullOutput suppresses all output. - * - * $output = new NullOutput(); - * - * @author Fabien Potencier - * @author Tobias Schultze - * - * @api - */ -class NullOutput implements OutputInterface -{ - /** - * {@inheritdoc} - */ - public function setFormatter(OutputFormatterInterface $formatter) - { - // do nothing - } - - /** - * {@inheritdoc} - */ - public function getFormatter() - { - // to comply with the interface we must return a OutputFormatterInterface - return new OutputFormatter(); - } - - /** - * {@inheritdoc} - */ - public function setDecorated($decorated) - { - // do nothing - } - - /** - * {@inheritdoc} - */ - public function isDecorated() - { - return false; - } - - /** - * {@inheritdoc} - */ - public function setVerbosity($level) - { - // do nothing - } - - /** - * {@inheritdoc} - */ - public function getVerbosity() - { - return self::VERBOSITY_QUIET; - } - - /** - * {@inheritdoc} - */ - public function writeln($messages, $type = self::OUTPUT_NORMAL) - { - // do nothing - } - - /** - * {@inheritdoc} - */ - public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL) - { - // do nothing - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Output; - -/** - * @author Jean-François Simon - */ -class BufferedOutput extends Output -{ - /** - * @var string - */ - private $buffer = ''; - - /** - * Empties buffer and returns its content. - * - * @return string - */ - public function fetch() - { - $content = $this->buffer; - $this->buffer = ''; - - return $content; - } - - /** - * {@inheritdoc} - */ - protected function doWrite($message, $newline) - { - $this->buffer .= $message; - - if ($newline) { - $this->buffer .= "\n"; - } - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Output; - -use Symfony\Component\Console\Formatter\OutputFormatterInterface; - -/** - * OutputInterface is the interface implemented by all Output classes. - * - * @author Fabien Potencier - * - * @api - */ -interface OutputInterface -{ - 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; - - /** - * Writes a message to the output. - * - * @param string|array $messages The message as an array of lines or a single string - * @param Boolean $newline Whether to add a newline - * @param integer $type The type of output (one of the OUTPUT constants) - * - * @throws \InvalidArgumentException When unknown output type is given - * - * @api - */ - public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL); - - /** - * Writes a message to the output and adds a newline at the end. - * - * @param string|array $messages The message as an array of lines of a single string - * @param integer $type The type of output (one of the OUTPUT constants) - * - * @throws \InvalidArgumentException When unknown output type is given - * - * @api - */ - public function writeln($messages, $type = self::OUTPUT_NORMAL); - - /** - * Sets the verbosity of the output. - * - * @param integer $level The level of verbosity (one of the VERBOSITY constants) - * - * @api - */ - public function setVerbosity($level); - - /** - * Gets the current verbosity of the output. - * - * @return integer The current level of verbosity (one of the VERBOSITY constants) - * - * @api - */ - public function getVerbosity(); - - /** - * Sets the decorated flag. - * - * @param Boolean $decorated Whether to decorate the messages - * - * @api - */ - public function setDecorated($decorated); - - /** - * Gets the decorated flag. - * - * @return Boolean true if the output will decorate messages, false otherwise - * - * @api - */ - public function isDecorated(); - - /** - * Sets output formatter. - * - * @param OutputFormatterInterface $formatter - * - * @api - */ - public function setFormatter(OutputFormatterInterface $formatter); - - /** - * Returns current output formatter instance. - * - * @return OutputFormatterInterface - * - * @api - */ - public function getFormatter(); -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Descriptor; - -use Symfony\Component\Console\Application; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputDefinition; -use Symfony\Component\Console\Input\InputOption; -use Symfony\Component\Console\Output\OutputInterface; - -/** - * @author Jean-François Simon - */ -abstract class Descriptor implements DescriptorInterface -{ - /** - * @var OutputInterface - */ - private $output; - - /** - * {@inheritdoc} - */ - public function describe(OutputInterface $output, $object, array $options = array()) - { - $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 Application: - $this->describeApplication($object, $options); - break; - default: - throw new \InvalidArgumentException(sprintf('Object of type "%s" is not describable.', get_class($object))); - } - } - - /** - * Writes content to output. - * - * @param string $content - * @param boolean $decorated - */ - protected function write($content, $decorated = false) - { - $this->output->write($content, false, $decorated ? OutputInterface::OUTPUT_NORMAL : OutputInterface::OUTPUT_RAW); - } - - /** - * Describes an InputArgument instance. - * - * @param InputArgument $argument - * @param array $options - * - * @return string|mixed - */ - abstract protected function describeInputArgument(InputArgument $argument, array $options = array()); - - /** - * Describes an InputOption instance. - * - * @param InputOption $option - * @param array $options - * - * @return string|mixed - */ - abstract protected function describeInputOption(InputOption $option, array $options = array()); - - /** - * Describes an InputDefinition instance. - * - * @param InputDefinition $definition - * @param array $options - * - * @return string|mixed - */ - abstract protected function describeInputDefinition(InputDefinition $definition, array $options = array()); - - /** - * Describes a Command instance. - * - * @param Command $command - * @param array $options - * - * @return string|mixed - */ - abstract protected function describeCommand(Command $command, array $options = array()); - - /** - * Describes an Application instance. - * - * @param Application $application - * @param array $options - * - * @return string|mixed - */ - abstract protected function describeApplication(Application $application, array $options = array()); -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Descriptor; - -use Symfony\Component\Console\Application; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputDefinition; -use Symfony\Component\Console\Input\InputOption; - -/** - * XML descriptor. - * - * @author Jean-François Simon - */ -class XmlDescriptor extends Descriptor -{ - /** - * @param InputDefinition $definition - * - * @return \DOMDocument - */ - public function getInputDefinitionDocument(InputDefinition $definition) - { - $dom = new \DOMDocument('1.0', 'UTF-8'); - $dom->appendChild($definitionXML = $dom->createElement('definition')); - - $definitionXML->appendChild($argumentsXML = $dom->createElement('arguments')); - foreach ($definition->getArguments() as $argument) { - $this->appendDocument($argumentsXML, $this->getInputArgumentDocument($argument)); - } - - $definitionXML->appendChild($optionsXML = $dom->createElement('options')); - foreach ($definition->getOptions() as $option) { - $this->appendDocument($optionsXML, $this->getInputOptionDocument($option)); - } - - return $dom; - } - - /** - * @param Command $command - * - * @return \DOMDocument - */ - public function getCommandDocument(Command $command) - { - $dom = new \DOMDocument('1.0', 'UTF-8'); - $dom->appendChild($commandXML = $dom->createElement('command')); - - $command->getSynopsis(); - $command->mergeApplicationDefinition(false); - - $commandXML->setAttribute('id', $command->getName()); - $commandXML->setAttribute('name', $command->getName()); - - $commandXML->appendChild($usageXML = $dom->createElement('usage')); - $usageXML->appendChild($dom->createTextNode(sprintf($command->getSynopsis(), ''))); - - $commandXML->appendChild($descriptionXML = $dom->createElement('description')); - $descriptionXML->appendChild($dom->createTextNode(str_replace("\n", "\n ", $command->getDescription()))); - - $commandXML->appendChild($helpXML = $dom->createElement('help')); - $helpXML->appendChild($dom->createTextNode(str_replace("\n", "\n ", $command->getProcessedHelp()))); - - $commandXML->appendChild($aliasesXML = $dom->createElement('aliases')); - foreach ($command->getAliases() as $alias) { - $aliasesXML->appendChild($aliasXML = $dom->createElement('alias')); - $aliasXML->appendChild($dom->createTextNode($alias)); - } - - $definitionXML = $this->getInputDefinitionDocument($command->getNativeDefinition()); - $this->appendDocument($commandXML, $definitionXML->getElementsByTagName('definition')->item(0)); - - return $dom; - } - - /** - * @param Application $application - * @param string|null $namespace - * - * @return \DOMDocument - */ - public function getApplicationDocument(Application $application, $namespace = null) - { - $dom = new \DOMDocument('1.0', 'UTF-8'); - $dom->appendChild($rootXml = $dom->createElement('symfony')); - - if ($application->getName() !== 'UNKNOWN') { - $rootXml->setAttribute('name', $application->getName()); - if ($application->getVersion() !== 'UNKNOWN') { - $rootXml->setAttribute('version', $application->getVersion()); - } - } - - $rootXml->appendChild($commandsXML = $dom->createElement('commands')); - - $description = new ApplicationDescription($application, $namespace); - - if ($namespace) { - $commandsXML->setAttribute('namespace', $namespace); - } - - foreach ($description->getCommands() as $command) { - $this->appendDocument($commandsXML, $this->getCommandDocument($command)); - } - - if (!$namespace) { - $rootXml->appendChild($namespacesXML = $dom->createElement('namespaces')); - - foreach ($description->getNamespaces() as $namespaceDescription) { - $namespacesXML->appendChild($namespaceArrayXML = $dom->createElement('namespace')); - $namespaceArrayXML->setAttribute('id', $namespaceDescription['id']); - - foreach ($namespaceDescription['commands'] as $name) { - $namespaceArrayXML->appendChild($commandXML = $dom->createElement('command')); - $commandXML->appendChild($dom->createTextNode($name)); - } - } - } - - return $dom; - } - - /** - * {@inheritdoc} - */ - protected function describeInputArgument(InputArgument $argument, array $options = array()) - { - $this->writeDocument($this->getInputArgumentDocument($argument)); - } - - /** - * {@inheritdoc} - */ - protected function describeInputOption(InputOption $option, array $options = array()) - { - $this->writeDocument($this->getInputOptionDocument($option)); - } - - /** - * {@inheritdoc} - */ - protected function describeInputDefinition(InputDefinition $definition, array $options = array()) - { - $this->writeDocument($this->getInputDefinitionDocument($definition)); - } - - /** - * {@inheritdoc} - */ - protected function describeCommand(Command $command, array $options = array()) - { - $this->writeDocument($this->getCommandDocument($command)); - } - - /** - * {@inheritdoc} - */ - protected function describeApplication(Application $application, array $options = array()) - { - $this->writeDocument($this->getApplicationDocument($application, isset($options['namespace']) ? $options['namespace'] : null)); - } - - /** - * Appends document children to parent node. - * - * @param \DOMNode $parentNode - * @param \DOMNode $importedParent - */ - private function appendDocument(\DOMNode $parentNode, \DOMNode $importedParent) - { - foreach ($importedParent->childNodes as $childNode) { - $parentNode->appendChild($parentNode->ownerDocument->importNode($childNode, true)); - } - } - - /** - * Writes DOM document. - * - * @param \DOMDocument $dom - * - * @return \DOMDocument|string - */ - private function writeDocument(\DOMDocument $dom) - { - $dom->formatOutput = true; - $this->write($dom->saveXML()); - } - - /** - * @param InputArgument $argument - * - * @return \DOMDocument - */ - private function getInputArgumentDocument(InputArgument $argument) - { - $dom = new \DOMDocument('1.0', 'UTF-8'); - - $dom->appendChild($objectXML = $dom->createElement('argument')); - $objectXML->setAttribute('name', $argument->getName()); - $objectXML->setAttribute('is_required', $argument->isRequired() ? 1 : 0); - $objectXML->setAttribute('is_array', $argument->isArray() ? 1 : 0); - $objectXML->appendChild($descriptionXML = $dom->createElement('description')); - $descriptionXML->appendChild($dom->createTextNode($argument->getDescription())); - - $objectXML->appendChild($defaultsXML = $dom->createElement('defaults')); - $defaults = is_array($argument->getDefault()) ? $argument->getDefault() : (is_bool($argument->getDefault()) ? array(var_export($argument->getDefault(), true)) : ($argument->getDefault() ? array($argument->getDefault()) : array())); - foreach ($defaults as $default) { - $defaultsXML->appendChild($defaultXML = $dom->createElement('default')); - $defaultXML->appendChild($dom->createTextNode($default)); - } - - return $dom; - } - - /** - * @param InputOption $option - * - * @return \DOMDocument - */ - private function getInputOptionDocument(InputOption $option) - { - $dom = new \DOMDocument('1.0', 'UTF-8'); - - $dom->appendChild($objectXML = $dom->createElement('option')); - $objectXML->setAttribute('name', '--'.$option->getName()); - $pos = strpos($option->getShortcut(), '|'); - if (false !== $pos) { - $objectXML->setAttribute('shortcut', '-'.substr($option->getShortcut(), 0, $pos)); - $objectXML->setAttribute('shortcuts', '-'.implode('|-', explode('|', $option->getShortcut()))); - } else { - $objectXML->setAttribute('shortcut', $option->getShortcut() ? '-'.$option->getShortcut() : ''); - } - $objectXML->setAttribute('accept_value', $option->acceptValue() ? 1 : 0); - $objectXML->setAttribute('is_value_required', $option->isValueRequired() ? 1 : 0); - $objectXML->setAttribute('is_multiple', $option->isArray() ? 1 : 0); - $objectXML->appendChild($descriptionXML = $dom->createElement('description')); - $descriptionXML->appendChild($dom->createTextNode($option->getDescription())); - - if ($option->acceptValue()) { - $defaults = is_array($option->getDefault()) ? $option->getDefault() : (is_bool($option->getDefault()) ? array(var_export($option->getDefault(), true)) : ($option->getDefault() ? array($option->getDefault()) : array())); - $objectXML->appendChild($defaultsXML = $dom->createElement('defaults')); - - if (!empty($defaults)) { - foreach ($defaults as $default) { - $defaultsXML->appendChild($defaultXML = $dom->createElement('default')); - $defaultXML->appendChild($dom->createTextNode($default)); - } - } - } - - return $dom; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Descriptor; - -use Symfony\Component\Console\Application; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputDefinition; -use Symfony\Component\Console\Input\InputOption; - -/** - * Text descriptor. - * - * @author Jean-François Simon - */ -class TextDescriptor extends Descriptor -{ - /** - * {@inheritdoc} - */ - protected function describeInputArgument(InputArgument $argument, array $options = array()) - { - if (null !== $argument->getDefault() && (!is_array($argument->getDefault()) || count($argument->getDefault()))) { - $default = sprintf(' (default: %s)', $this->formatDefaultValue($argument->getDefault())); - } else { - $default = ''; - } - - $nameWidth = isset($options['name_width']) ? $options['name_width'] : strlen($argument->getName()); - - $this->writeText(sprintf(" %-${nameWidth}s %s%s", - $argument->getName(), - str_replace("\n", "\n".str_repeat(' ', $nameWidth + 2), $argument->getDescription()), - $default - ), $options); - } - - /** - * {@inheritdoc} - */ - protected function describeInputOption(InputOption $option, array $options = array()) - { - if ($option->acceptValue() && null !== $option->getDefault() && (!is_array($option->getDefault()) || count($option->getDefault()))) { - $default = sprintf(' (default: %s)', $this->formatDefaultValue($option->getDefault())); - } else { - $default = ''; - } - - $nameWidth = isset($options['name_width']) ? $options['name_width'] : strlen($option->getName()); - $nameWithShortcutWidth = $nameWidth - strlen($option->getName()) - 2; - - $this->writeText(sprintf(" %s %-${nameWithShortcutWidth}s%s%s%s", - '--'.$option->getName(), - $option->getShortcut() ? sprintf('(-%s) ', $option->getShortcut()) : '', - str_replace("\n", "\n".str_repeat(' ', $nameWidth + 2), $option->getDescription()), - $default, - $option->isArray() ? ' (multiple values allowed)' : '' - ), $options); - } - - /** - * {@inheritdoc} - */ - protected function describeInputDefinition(InputDefinition $definition, array $options = array()) - { - $nameWidth = 0; - foreach ($definition->getOptions() as $option) { - $nameLength = strlen($option->getName()) + 2; - if ($option->getShortcut()) { - $nameLength += strlen($option->getShortcut()) + 3; - } - $nameWidth = max($nameWidth, $nameLength); - } - foreach ($definition->getArguments() as $argument) { - $nameWidth = max($nameWidth, strlen($argument->getName())); - } - ++$nameWidth; - - if ($definition->getArguments()) { - $this->writeText('Arguments:', $options); - $this->writeText("\n"); - foreach ($definition->getArguments() as $argument) { - $this->describeInputArgument($argument, array_merge($options, array('name_width' => $nameWidth))); - $this->writeText("\n"); - } - } - - if ($definition->getArguments() && $definition->getOptions()) { - $this->writeText("\n"); - } - - if ($definition->getOptions()) { - $this->writeText('Options:', $options); - $this->writeText("\n"); - foreach ($definition->getOptions() as $option) { - $this->describeInputOption($option, array_merge($options, array('name_width' => $nameWidth))); - $this->writeText("\n"); - } - } - } - - /** - * {@inheritdoc} - */ - protected function describeCommand(Command $command, array $options = array()) - { - $command->getSynopsis(); - $command->mergeApplicationDefinition(false); - - $this->writeText('Usage:', $options); - $this->writeText("\n"); - $this->writeText(' '.$command->getSynopsis(), $options); - $this->writeText("\n"); - - if (count($command->getAliases()) > 0) { - $this->writeText("\n"); - $this->writeText('Aliases: '.implode(', ', $command->getAliases()).'', $options); - } - - if ($definition = $command->getNativeDefinition()) { - $this->writeText("\n"); - $this->describeInputDefinition($definition, $options); - } - - $this->writeText("\n"); - - if ($help = $command->getProcessedHelp()) { - $this->writeText('Help:', $options); - $this->writeText("\n"); - $this->writeText(' '.str_replace("\n", "\n ", $help), $options); - $this->writeText("\n"); - } - } - - /** - * {@inheritdoc} - */ - protected function describeApplication(Application $application, array $options = array()) - { - $describedNamespace = isset($options['namespace']) ? $options['namespace'] : null; - $description = new ApplicationDescription($application, $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 { - $width = $this->getColumnWidth($description->getCommands()); - - $this->writeText($application->getHelp(), $options); - $this->writeText("\n\n"); - - 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 && ApplicationDescription::GLOBAL_NAMESPACE !== $namespace['id']) { - $this->writeText("\n"); - $this->writeText(''.$namespace['id'].'', $options); - } - - foreach ($namespace['commands'] as $name) { - $this->writeText("\n"); - $this->writeText(sprintf(" %-${width}s %s", $name, $description->getCommand($name)->getDescription()), $options); - } - } - - $this->writeText("\n"); - } - } - - /** - * {@inheritdoc} - */ - private function writeText($content, array $options = array()) - { - $this->write( - isset($options['raw_text']) && $options['raw_text'] ? strip_tags($content) : $content, - isset($options['raw_output']) ? !$options['raw_output'] : true - ); - } - - /** - * Formats input option/argument default value. - * - * @param mixed $default - * - * @return string - */ - private function formatDefaultValue($default) - { - if (version_compare(PHP_VERSION, '5.4', '<')) { - return str_replace('\/', '/', json_encode($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; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Descriptor; - -use Symfony\Component\Console\Application; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputDefinition; -use Symfony\Component\Console\Input\InputOption; - -/** - * Markdown descriptor. - * - * @author Jean-François Simon - */ -class MarkdownDescriptor extends Descriptor -{ - /** - * {@inheritdoc} - */ - protected function describeInputArgument(InputArgument $argument, array $options = array()) - { - $this->write( - '**'.$argument->getName().':**'."\n\n" - .'* Name: '.($argument->getName() ?: '')."\n" - .'* Is required: '.($argument->isRequired() ? 'yes' : 'no')."\n" - .'* Is array: '.($argument->isArray() ? 'yes' : 'no')."\n" - .'* Description: '.($argument->getDescription() ?: '')."\n" - .'* Default: `'.str_replace("\n", '', var_export($argument->getDefault(), true)).'`' - ); - } - - /** - * {@inheritdoc} - */ - protected function describeInputOption(InputOption $option, array $options = array()) - { - $this->write( - '**'.$option->getName().':**'."\n\n" - .'* Name: `--'.$option->getName().'`'."\n" - .'* Shortcut: '.($option->getShortcut() ? '`-'.implode('|-', explode('|', $option->getShortcut())).'`' : '')."\n" - .'* Accept value: '.($option->acceptValue() ? 'yes' : 'no')."\n" - .'* Is value required: '.($option->isValueRequired() ? 'yes' : 'no')."\n" - .'* Is multiple: '.($option->isArray() ? 'yes' : 'no')."\n" - .'* Description: '.($option->getDescription() ?: '')."\n" - .'* Default: `'.str_replace("\n", '', var_export($option->getDefault(), true)).'`' - ); - } - - /** - * {@inheritdoc} - */ - protected function describeInputDefinition(InputDefinition $definition, array $options = array()) - { - if ($showArguments = count($definition->getArguments()) > 0) { - $this->write('### Arguments:'); - foreach ($definition->getArguments() as $argument) { - $this->write("\n\n"); - $this->write($this->describeInputArgument($argument)); - } - } - - if (count($definition->getOptions()) > 0) { - if ($showArguments) { - $this->write("\n\n"); - } - - $this->write('### Options:'); - foreach ($definition->getOptions() as $option) { - $this->write("\n\n"); - $this->write($this->describeInputOption($option)); - } - } - } - - /** - * {@inheritdoc} - */ - protected function describeCommand(Command $command, array $options = array()) - { - $command->getSynopsis(); - $command->mergeApplicationDefinition(false); - - $this->write( - $command->getName()."\n" - .str_repeat('-', strlen($command->getName()))."\n\n" - .'* Description: '.($command->getDescription() ?: '')."\n" - .'* Usage: `'.$command->getSynopsis().'`'."\n" - .'* Aliases: '.(count($command->getAliases()) ? '`'.implode('`, `', $command->getAliases()).'`' : '') - ); - - if ($help = $command->getProcessedHelp()) { - $this->write("\n\n"); - $this->write($help); - } - - if ($definition = $command->getNativeDefinition()) { - $this->write("\n\n"); - $this->describeInputDefinition($command->getNativeDefinition()); - } - } - - /** - * {@inheritdoc} - */ - protected function describeApplication(Application $application, array $options = array()) - { - $describedNamespace = isset($options['namespace']) ? $options['namespace'] : null; - $description = new ApplicationDescription($application, $describedNamespace); - - $this->write($application->getName()."\n".str_repeat('=', strlen($application->getName()))); - - foreach ($description->getNamespaces() as $namespace) { - if (ApplicationDescription::GLOBAL_NAMESPACE !== $namespace['id']) { - $this->write("\n\n"); - $this->write('**'.$namespace['id'].':**'); - } - - $this->write("\n\n"); - $this->write(implode("\n", array_map(function ($commandName) { - return '* '.$commandName; - } , $namespace['commands']))); - } - - foreach ($description->getCommands() as $command) { - $this->write("\n\n"); - $this->write($this->describeCommand($command)); - } - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Descriptor; - -use Symfony\Component\Console\Application; -use Symfony\Component\Console\Command\Command; - -/** - * @author Jean-François Simon - */ -class ApplicationDescription -{ - const GLOBAL_NAMESPACE = '_global'; - - /** - * @var Application - */ - private $application; - - /** - * @var null|string - */ - private $namespace; - - /** - * @var array - */ - private $namespaces; - - /** - * @var Command[] - */ - private $commands; - - /** - * @var Command[] - */ - private $aliases; - - /** - * Constructor. - * - * @param Application $application - * @param string|null $namespace - */ - public function __construct(Application $application, $namespace = null) - { - $this->application = $application; - $this->namespace = $namespace; - } - - /** - * @return array - */ - public function getNamespaces() - { - if (null === $this->namespaces) { - $this->inspectApplication(); - } - - return $this->namespaces; - } - - /** - * @return Command[] - */ - public function getCommands() - { - if (null === $this->commands) { - $this->inspectApplication(); - } - - 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 inspectApplication() - { - $this->commands = array(); - $this->namespaces = array(); - - $all = $this->application->all($this->namespace ? $this->application->findNamespace($this->namespace) : null); - foreach ($this->sortCommands($all) as $namespace => $commands) { - $names = array(); - - /** @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] = array('id' => $namespace, 'commands' => $names); - } - } - - /** - * @param array $commands - * - * @return array - */ - private function sortCommands(array $commands) - { - $namespacedCommands = array(); - foreach ($commands as $name => $command) { - $key = $this->application->extractNamespace($name, 1); - if (!$key) { - $key = '_global'; - } - - $namespacedCommands[$key][$name] = $command; - } - ksort($namespacedCommands); - - foreach ($namespacedCommands as &$commands) { - ksort($commands); - } - - return $namespacedCommands; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Descriptor; - -use Symfony\Component\Console\Application; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputDefinition; -use Symfony\Component\Console\Input\InputOption; - -/** - * JSON descriptor. - * - * @author Jean-François Simon - */ -class JsonDescriptor extends Descriptor -{ - /** - * {@inheritdoc} - */ - protected function describeInputArgument(InputArgument $argument, array $options = array()) - { - $this->writeData($this->getInputArgumentData($argument), $options); - } - - /** - * {@inheritdoc} - */ - protected function describeInputOption(InputOption $option, array $options = array()) - { - $this->writeData($this->getInputOptionData($option), $options); - } - - /** - * {@inheritdoc} - */ - protected function describeInputDefinition(InputDefinition $definition, array $options = array()) - { - $this->writeData($this->getInputDefinitionData($definition), $options); - } - - /** - * {@inheritdoc} - */ - protected function describeCommand(Command $command, array $options = array()) - { - $this->writeData($this->getCommandData($command), $options); - } - - /** - * {@inheritdoc} - */ - protected function describeApplication(Application $application, array $options = array()) - { - $describedNamespace = isset($options['namespace']) ? $options['namespace'] : null; - $description = new ApplicationDescription($application, $describedNamespace); - $commands = array(); - - foreach ($description->getCommands() as $command) { - $commands[] = $this->getCommandData($command); - } - - $data = $describedNamespace - ? array('commands' => $commands, 'namespace' => $describedNamespace) - : array('commands' => $commands, 'namespaces' => array_values($description->getNamespaces())); - - $this->writeData($data, $options); - } - - /** - * Writes data as json. - * - * @param array $data - * @param array $options - * - * @return array|string - */ - private function writeData(array $data, array $options) - { - $this->write(json_encode($data, isset($options['json_encoding']) ? $options['json_encoding'] : 0)); - } - - /** - * @param InputArgument $argument - * - * @return array - */ - private function getInputArgumentData(InputArgument $argument) - { - return array( - 'name' => $argument->getName(), - 'is_required' => $argument->isRequired(), - 'is_array' => $argument->isArray(), - 'description' => $argument->getDescription(), - 'default' => $argument->getDefault(), - ); - } - - /** - * @param InputOption $option - * - * @return array - */ - private function getInputOptionData(InputOption $option) - { - return array( - 'name' => '--'.$option->getName(), - 'shortcut' => $option->getShortcut() ? '-'.implode('|-', explode('|', $option->getShortcut())) : '', - 'accept_value' => $option->acceptValue(), - 'is_value_required' => $option->isValueRequired(), - 'is_multiple' => $option->isArray(), - 'description' => $option->getDescription(), - 'default' => $option->getDefault(), - ); - } - - /** - * @param InputDefinition $definition - * - * @return array - */ - private function getInputDefinitionData(InputDefinition $definition) - { - $inputArguments = array(); - foreach ($definition->getArguments() as $name => $argument) { - $inputArguments[$name] = $this->getInputArgumentData($argument); - } - - $inputOptions = array(); - foreach ($definition->getOptions() as $name => $option) { - $inputOptions[$name] = $this->getInputOptionData($option); - } - - return array('arguments' => $inputArguments, 'options' => $inputOptions); - } - - /** - * @param Command $command - * - * @return array - */ - private function getCommandData(Command $command) - { - $command->getSynopsis(); - $command->mergeApplicationDefinition(false); - - return array( - 'name' => $command->getName(), - 'usage' => $command->getSynopsis(), - 'description' => $command->getDescription(), - 'help' => $command->getProcessedHelp(), - 'aliases' => $command->getAliases(), - 'definition' => $this->getInputDefinitionData($command->getNativeDefinition()), - ); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Descriptor; - -use Symfony\Component\Console\Output\OutputInterface; - -/** - * Descriptor interface. - * - * @author Jean-François Simon - */ -interface DescriptorInterface -{ - /** - * Describes an InputArgument instance. - * - * @param OutputInterface $output - * @param object $object - * @param array $options - */ - public function describe(OutputInterface $output, $object, array $options = array()); -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Event; - -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Output\OutputInterface; - -/** - * Allows to manipulate the exit code of a command after its execution. - * - * @author Francesco Levorato - */ -class ConsoleTerminateEvent extends ConsoleEvent -{ - /** - * The exit code of the command. - * - * @var integer - */ - private $exitCode; - - public function __construct(Command $command, InputInterface $input, OutputInterface $output, $exitCode) - { - parent::__construct($command, $input, $output); - - $this->setExitCode($exitCode); - } - - /** - * Sets the exit code. - * - * @param integer $exitCode The command exit code - */ - public function setExitCode($exitCode) - { - $this->exitCode = (int) $exitCode; - } - - /** - * Gets the exit code. - * - * @return integer The command exit code - */ - public function getExitCode() - { - return $this->exitCode; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Event; - -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\EventDispatcher\Event; - -/** - * Allows to inspect input and output of a command. - * - * @author Francesco Levorato - */ -class ConsoleEvent extends Event -{ - protected $command; - - private $input; - private $output; - - public function __construct(Command $command, InputInterface $input, OutputInterface $output) - { - $this->command = $command; - $this->input = $input; - $this->output = $output; - } - - /** - * Gets the command that is executed. - * - * @return Command A Command instance - */ - public function getCommand() - { - return $this->command; - } - - /** - * Gets the input instance. - * - * @return InputInterface An InputInterface instance - */ - public function getInput() - { - return $this->input; - } - - /** - * Gets the output instance. - * - * @return OutputInterface An OutputInterface instance - */ - public function getOutput() - { - return $this->output; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Event; - -/** - * Allows to do things before the command is executed. - * - * @author Fabien Potencier - */ -class ConsoleCommandEvent extends ConsoleEvent -{ -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Event; - -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Output\OutputInterface; - -/** - * Allows to handle exception thrown in a command. - * - * @author Fabien Potencier - */ -class ConsoleExceptionEvent extends ConsoleEvent -{ - private $exception; - private $exitCode; - - public function __construct(Command $command, InputInterface $input, OutputInterface $output, \Exception $exception, $exitCode) - { - parent::__construct($command, $input, $output); - - $this->setException($exception); - $this->exitCode = (int) $exitCode; - } - - /** - * Returns the thrown exception. - * - * @return \Exception The thrown exception - */ - public function getException() - { - return $this->exception; - } - - /** - * Replaces the thrown exception. - * - * This exception will be thrown if no response is set in the event. - * - * @param \Exception $exception The thrown exception - */ - public function setException(\Exception $exception) - { - $this->exception = $exception; - } - - /** - * Gets the exit code. - * - * @return integer The command exit code - */ - public function getExitCode() - { - return $this->exitCode; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Input; - -/** - * ArrayInput represents an input provided as an array. - * - * Usage: - * - * $input = new ArrayInput(array('name' => 'foo', '--bar' => 'foobar')); - * - * @author Fabien Potencier - * - * @api - */ -class ArrayInput extends Input -{ - private $parameters; - - /** - * Constructor. - * - * @param array $parameters An array of parameters - * @param InputDefinition $definition A InputDefinition instance - * - * @api - */ - public function __construct(array $parameters, InputDefinition $definition = null) - { - $this->parameters = $parameters; - - parent::__construct($definition); - } - - /** - * Returns the first argument from the raw parameters (not parsed). - * - * @return string The value of the first argument or null otherwise - */ - public function getFirstArgument() - { - foreach ($this->parameters as $key => $value) { - if ($key && '-' === $key[0]) { - continue; - } - - return $value; - } - } - - /** - * Returns true if the raw parameters (not parsed) contain a value. - * - * This method is to be used to introspect the input parameters - * before they have been validated. It must be used carefully. - * - * @param string|array $values The values to look for in the raw parameters (can be an array) - * - * @return Boolean true if the value is contained in the raw parameters - */ - public function hasParameterOption($values) - { - $values = (array) $values; - - foreach ($this->parameters as $k => $v) { - if (!is_int($k)) { - $v = $k; - } - - if (in_array($v, $values)) { - return true; - } - } - - return false; - } - - /** - * Returns the value of a raw option (not parsed). - * - * This method is to be used to introspect the input parameters - * before they have been validated. It must be used carefully. - * - * @param string|array $values The value(s) to look for in the raw parameters (can be an array) - * @param mixed $default The default value to return if no result is found - * - * @return mixed The option value - */ - public function getParameterOption($values, $default = false) - { - $values = (array) $values; - - foreach ($this->parameters as $k => $v) { - if (is_int($k) && in_array($v, $values)) { - return true; - } elseif (in_array($k, $values)) { - return $v; - } - } - - return $default; - } - - /** - * Returns a stringified representation of the args passed to the command - * - * @return string - */ - public function __toString() - { - $params = array(); - foreach ($this->parameters as $param => $val) { - if ($param && '-' === $param[0]) { - $params[] = $param . ('' != $val ? '='.$this->escapeToken($val) : ''); - } else { - $params[] = $this->escapeToken($val); - } - } - - return implode(' ', $params); - } - - /** - * Processes command line arguments. - */ - protected function parse() - { - foreach ($this->parameters as $key => $value) { - if (0 === strpos($key, '--')) { - $this->addLongOption(substr($key, 2), $value); - } elseif ('-' === $key[0]) { - $this->addShortOption(substr($key, 1), $value); - } else { - $this->addArgument($key, $value); - } - } - } - - /** - * Adds a short option value. - * - * @param string $shortcut The short option key - * @param mixed $value The value for the option - * - * @throws \InvalidArgumentException When option given doesn't exist - */ - private function addShortOption($shortcut, $value) - { - if (!$this->definition->hasShortcut($shortcut)) { - throw new \InvalidArgumentException(sprintf('The "-%s" option does not exist.', $shortcut)); - } - - $this->addLongOption($this->definition->getOptionForShortcut($shortcut)->getName(), $value); - } - - /** - * Adds a long option value. - * - * @param string $name The long option key - * @param mixed $value The value for the option - * - * @throws \InvalidArgumentException When option given doesn't exist - * @throws \InvalidArgumentException When a required value is missing - */ - private function addLongOption($name, $value) - { - if (!$this->definition->hasOption($name)) { - throw new \InvalidArgumentException(sprintf('The "--%s" option does not exist.', $name)); - } - - $option = $this->definition->getOption($name); - - if (null === $value) { - if ($option->isValueRequired()) { - throw new \InvalidArgumentException(sprintf('The "--%s" option requires a value.', $name)); - } - - $value = $option->isValueOptional() ? $option->getDefault() : true; - } - - $this->options[$name] = $value; - } - - /** - * Adds an argument value. - * - * @param string $name The argument name - * @param mixed $value The value for the argument - * - * @throws \InvalidArgumentException When argument given doesn't exist - */ - private function addArgument($name, $value) - { - if (!$this->definition->hasArgument($name)) { - throw new \InvalidArgumentException(sprintf('The "%s" argument does not exist.', $name)); - } - - $this->arguments[$name] = $value; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Input; - -/** - * StringInput represents an input provided as a string. - * - * Usage: - * - * $input = new StringInput('foo --bar="foobar"'); - * - * @author Fabien Potencier - * - * @api - */ -class StringInput extends ArgvInput -{ - const REGEX_STRING = '([^\s]+?)(?:\s|(?setTokens($this->tokenize($input)); - - if (null !== $definition) { - $this->bind($definition); - } - } - - /** - * Tokenizes a string. - * - * @param string $input The input to tokenize - * - * @return array An array of tokens - * - * @throws \InvalidArgumentException When unable to parse input (should never happen) - */ - private function tokenize($input) - { - $tokens = array(); - $length = strlen($input); - $cursor = 0; - while ($cursor < $length) { - if (preg_match('/\s+/A', $input, $match, null, $cursor)) { - } elseif (preg_match('/([^="\'\s]+?)(=?)('.self::REGEX_QUOTED_STRING.'+)/A', $input, $match, null, $cursor)) { - $tokens[] = $match[1].$match[2].stripcslashes(str_replace(array('"\'', '\'"', '\'\'', '""'), '', substr($match[3], 1, strlen($match[3]) - 2))); - } elseif (preg_match('/'.self::REGEX_QUOTED_STRING.'/A', $input, $match, null, $cursor)) { - $tokens[] = stripcslashes(substr($match[0], 1, strlen($match[0]) - 2)); - } elseif (preg_match('/'.self::REGEX_STRING.'/A', $input, $match, null, $cursor)) { - $tokens[] = stripcslashes($match[1]); - } else { - // should never happen - // @codeCoverageIgnoreStart - throw new \InvalidArgumentException(sprintf('Unable to parse input near "... %s ..."', substr($input, $cursor, 10))); - // @codeCoverageIgnoreEnd - } - - $cursor += strlen($match[0]); - } - - return $tokens; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Input; - -if (!defined('JSON_UNESCAPED_UNICODE')) { - define('JSON_UNESCAPED_SLASHES', 64); - define('JSON_UNESCAPED_UNICODE', 256); -} - -use Symfony\Component\Console\Descriptor\TextDescriptor; -use Symfony\Component\Console\Descriptor\XmlDescriptor; -use Symfony\Component\Console\Output\BufferedOutput; - -/** - * A InputDefinition represents a set of valid command line arguments and options. - * - * Usage: - * - * $definition = new InputDefinition(array( - * new InputArgument('name', InputArgument::REQUIRED), - * new InputOption('foo', 'f', InputOption::VALUE_REQUIRED), - * )); - * - * @author Fabien Potencier - * - * @api - */ -class InputDefinition -{ - private $arguments; - private $requiredCount; - private $hasAnArrayArgument = false; - private $hasOptional; - private $options; - private $shortcuts; - - /** - * Constructor. - * - * @param array $definition An array of InputArgument and InputOption instance - * - * @api - */ - public function __construct(array $definition = array()) - { - $this->setDefinition($definition); - } - - /** - * Sets the definition of the input. - * - * @param array $definition The definition array - * - * @api - */ - public function setDefinition(array $definition) - { - $arguments = array(); - $options = array(); - foreach ($definition as $item) { - if ($item instanceof InputOption) { - $options[] = $item; - } else { - $arguments[] = $item; - } - } - - $this->setArguments($arguments); - $this->setOptions($options); - } - - /** - * Sets the InputArgument objects. - * - * @param InputArgument[] $arguments An array of InputArgument objects - * - * @api - */ - public function setArguments($arguments = array()) - { - $this->arguments = array(); - $this->requiredCount = 0; - $this->hasOptional = false; - $this->hasAnArrayArgument = false; - $this->addArguments($arguments); - } - - /** - * Adds an array of InputArgument objects. - * - * @param InputArgument[] $arguments An array of InputArgument objects - * - * @api - */ - public function addArguments($arguments = array()) - { - if (null !== $arguments) { - foreach ($arguments as $argument) { - $this->addArgument($argument); - } - } - } - - /** - * Adds an InputArgument object. - * - * @param InputArgument $argument An InputArgument object - * - * @throws \LogicException When incorrect argument is given - * - * @api - */ - public function addArgument(InputArgument $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; - } - - /** - * Returns an InputArgument by name or by position. - * - * @param string|integer $name The InputArgument name or position - * - * @return InputArgument An InputArgument object - * - * @throws \InvalidArgumentException When argument given doesn't exist - * - * @api - */ - 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]; - } - - /** - * Returns true if an InputArgument object exists by name or position. - * - * @param string|integer $name The InputArgument name or position - * - * @return Boolean true if the InputArgument object exists, false otherwise - * - * @api - */ - public function hasArgument($name) - { - $arguments = is_int($name) ? array_values($this->arguments) : $this->arguments; - - return isset($arguments[$name]); - } - - /** - * Gets the array of InputArgument objects. - * - * @return InputArgument[] An array of InputArgument objects - * - * @api - */ - public function getArguments() - { - return $this->arguments; - } - - /** - * Returns the number of InputArguments. - * - * @return integer The number of InputArguments - */ - public function getArgumentCount() - { - return $this->hasAnArrayArgument ? PHP_INT_MAX : count($this->arguments); - } - - /** - * Returns the number of required InputArguments. - * - * @return integer The number of required InputArguments - */ - public function getArgumentRequiredCount() - { - return $this->requiredCount; - } - - /** - * Gets the default values. - * - * @return array An array of default values - */ - public function getArgumentDefaults() - { - $values = array(); - foreach ($this->arguments as $argument) { - $values[$argument->getName()] = $argument->getDefault(); - } - - return $values; - } - - /** - * Sets the InputOption objects. - * - * @param InputOption[] $options An array of InputOption objects - * - * @api - */ - public function setOptions($options = array()) - { - $this->options = array(); - $this->shortcuts = array(); - $this->addOptions($options); - } - - /** - * Adds an array of InputOption objects. - * - * @param InputOption[] $options An array of InputOption objects - * - * @api - */ - public function addOptions($options = array()) - { - foreach ($options as $option) { - $this->addOption($option); - } - } - - /** - * Adds an InputOption object. - * - * @param InputOption $option An InputOption object - * - * @throws \LogicException When option given already exist - * - * @api - */ - public function addOption(InputOption $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(); - } - } - } - - /** - * Returns an InputOption by name. - * - * @param string $name The InputOption name - * - * @return InputOption A InputOption object - * - * @throws \InvalidArgumentException When option given doesn't exist - * - * @api - */ - public function getOption($name) - { - if (!$this->hasOption($name)) { - throw new \InvalidArgumentException(sprintf('The "--%s" option does not exist.', $name)); - } - - return $this->options[$name]; - } - - /** - * Returns true if an InputOption object exists by name. - * - * @param string $name The InputOption name - * - * @return Boolean true if the InputOption object exists, false otherwise - * - * @api - */ - public function hasOption($name) - { - return isset($this->options[$name]); - } - - /** - * Gets the array of InputOption objects. - * - * @return InputOption[] An array of InputOption objects - * - * @api - */ - public function getOptions() - { - return $this->options; - } - - /** - * Returns true if an InputOption object exists by shortcut. - * - * @param string $name The InputOption shortcut - * - * @return Boolean true if the InputOption object exists, false otherwise - */ - public function hasShortcut($name) - { - return isset($this->shortcuts[$name]); - } - - /** - * Gets an InputOption by shortcut. - * - * @param string $shortcut the Shortcut name - * - * @return InputOption An InputOption object - */ - public function getOptionForShortcut($shortcut) - { - return $this->getOption($this->shortcutToName($shortcut)); - } - - /** - * Gets an array of default values. - * - * @return array An array of all default values - */ - public function getOptionDefaults() - { - $values = array(); - foreach ($this->options as $option) { - $values[$option->getName()] = $option->getDefault(); - } - - return $values; - } - - /** - * Returns the InputOption name given a shortcut. - * - * @param string $shortcut The shortcut - * - * @return string The InputOption name - * - * @throws \InvalidArgumentException When option given does not exist - */ - private function shortcutToName($shortcut) - { - if (!isset($this->shortcuts[$shortcut])) { - throw new \InvalidArgumentException(sprintf('The "-%s" option does not exist.', $shortcut)); - } - - return $this->shortcuts[$shortcut]; - } - - /** - * Gets the synopsis. - * - * @return string The synopsis - */ - public function getSynopsis() - { - $elements = array(); - foreach ($this->getOptions() as $option) { - $shortcut = $option->getShortcut() ? sprintf('-%s|', $option->getShortcut()) : ''; - $elements[] = sprintf('['.($option->isValueRequired() ? '%s--%s="..."' : ($option->isValueOptional() ? '%s--%s[="..."]' : '%s--%s')).']', $shortcut, $option->getName()); - } - - foreach ($this->getArguments() as $argument) { - $elements[] = sprintf($argument->isRequired() ? '%s' : '[%s]', $argument->getName().($argument->isArray() ? '1' : '')); - - if ($argument->isArray()) { - $elements[] = sprintf('... [%sN]', $argument->getName()); - } - } - - return implode(' ', $elements); - } - - /** - * Returns a textual representation of the InputDefinition. - * - * @return string A string representing the InputDefinition - * - * @deprecated Deprecated since version 2.3, to be removed in 3.0. - */ - public function asText() - { - $descriptor = new TextDescriptor(); - $output = new BufferedOutput(BufferedOutput::VERBOSITY_NORMAL, true); - $descriptor->describe($output, $this, array('raw_output' => true)); - - return $output->fetch(); - } - - /** - * Returns an XML representation of the InputDefinition. - * - * @param Boolean $asDom Whether to return a DOM or an XML string - * - * @return string|\DOMDocument An XML string representing the InputDefinition - * - * @deprecated Deprecated since version 2.3, to be removed in 3.0. - */ - public function asXml($asDom = false) - { - $descriptor = new XmlDescriptor(); - - if ($asDom) { - return $descriptor->getInputDefinitionDocument($this); - } - - $output = new BufferedOutput(); - $descriptor->describe($output, $this); - - return $output->fetch(); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Input; - -/** - * InputInterface is the interface implemented by all input classes. - * - * @author Fabien Potencier - */ -interface InputInterface -{ - /** - * Returns the first argument from the raw parameters (not parsed). - * - * @return string The value of the first argument or null otherwise - */ - public function getFirstArgument(); - - /** - * Returns true if the raw parameters (not parsed) contain a value. - * - * This method is to be used to introspect the input parameters - * before they have been validated. It must be used carefully. - * - * @param string|array $values The values to look for in the raw parameters (can be an array) - * - * @return Boolean true if the value is contained in the raw parameters - */ - public function hasParameterOption($values); - - /** - * Returns the value of a raw option (not parsed). - * - * This method is to be used to introspect the input parameters - * before they have been validated. It must be used carefully. - * - * @param string|array $values The value(s) to look for in the raw parameters (can be an array) - * @param mixed $default The default value to return if no result is found - * - * @return mixed The option value - */ - public function getParameterOption($values, $default = false); - - /** - * Binds the current Input instance with the given arguments and options. - * - * @param InputDefinition $definition A InputDefinition instance - */ - public function bind(InputDefinition $definition); - - /** - * Validates if arguments given are correct. - * - * Throws an exception when not enough arguments are given. - * - * @throws \RuntimeException - */ - public function validate(); - - /** - * Returns all the given arguments merged with the default values. - * - * @return array - */ - public function getArguments(); - - /** - * Gets argument by name. - * - * @param string $name The name of the argument - * - * @return mixed - */ - public function getArgument($name); - - /** - * Sets an argument value by name. - * - * @param string $name The argument name - * @param string $value The argument value - * - * @throws \InvalidArgumentException When argument given doesn't exist - */ - public function setArgument($name, $value); - - /** - * Returns true if an InputArgument object exists by name or position. - * - * @param string|integer $name The InputArgument name or position - * - * @return Boolean true if the InputArgument object exists, false otherwise - */ - public function hasArgument($name); - - /** - * Returns all the given options merged with the default values. - * - * @return array - */ - public function getOptions(); - - /** - * Gets an option by name. - * - * @param string $name The name of the option - * - * @return mixed - */ - public function getOption($name); - - /** - * Sets an option value by name. - * - * @param string $name The option name - * @param string|boolean $value The option value - * - * @throws \InvalidArgumentException When option given doesn't exist - */ - public function setOption($name, $value); - - /** - * Returns true if an InputOption object exists by name. - * - * @param string $name The InputOption name - * - * @return Boolean true if the InputOption object exists, false otherwise - */ - public function hasOption($name); - - /** - * Is this input means interactive? - * - * @return Boolean - */ - public function isInteractive(); - - /** - * Sets the input interactivity. - * - * @param Boolean $interactive If the input should be interactive - */ - public function setInteractive($interactive); -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Input; - -/** - * Represents a command line argument. - * - * @author Fabien Potencier - * - * @api - */ -class InputArgument -{ - const REQUIRED = 1; - const OPTIONAL = 2; - const IS_ARRAY = 4; - - private $name; - private $mode; - private $default; - private $description; - - /** - * Constructor. - * - * @param string $name The argument name - * @param integer $mode The argument mode: self::REQUIRED or self::OPTIONAL - * @param string $description A description text - * @param mixed $default The default value (for self::OPTIONAL mode only) - * - * @throws \InvalidArgumentException When argument mode is not valid - * - * @api - */ - 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); - } - - /** - * Returns the argument name. - * - * @return string The argument name - */ - public function getName() - { - return $this->name; - } - - /** - * Returns true if the argument is required. - * - * @return Boolean true if parameter mode is self::REQUIRED, false otherwise - */ - public function isRequired() - { - return self::REQUIRED === (self::REQUIRED & $this->mode); - } - - /** - * Returns true if the argument can take multiple values. - * - * @return Boolean true if mode is self::IS_ARRAY, false otherwise - */ - public function isArray() - { - return self::IS_ARRAY === (self::IS_ARRAY & $this->mode); - } - - /** - * Sets the default value. - * - * @param mixed $default The default value - * - * @throws \LogicException When incorrect default value is given - */ - 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 = array(); - } elseif (!is_array($default)) { - throw new \LogicException('A default value for an array argument must be an array.'); - } - } - - $this->default = $default; - } - - /** - * Returns the default value. - * - * @return mixed The default value - */ - public function getDefault() - { - return $this->default; - } - - /** - * Returns the description text. - * - * @return string The description text - */ - public function getDescription() - { - return $this->description; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Input; - -/** - * InputAwareInterface should be implemented by classes that depends on the - * Console Input. - * - * @author Wouter J - */ -interface InputAwareInterface -{ - /** - * Sets the Console Input. - * - * @param InputInterface - */ - public function setInput(InputInterface $input); -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Input; - -/** - * Represents a command line option. - * - * @author Fabien Potencier - * - * @api - */ -class InputOption -{ - 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; - - /** - * Constructor. - * - * @param string $name The option name - * @param string|array $shortcut The shortcuts, can be null, a string of shortcuts delimited by | or an array of shortcuts - * @param integer $mode The option mode: One of the VALUE_* constants - * @param string $description A description text - * @param mixed $default The default value (must be null for self::VALUE_REQUIRED or self::VALUE_NONE) - * - * @throws \InvalidArgumentException If option mode is invalid or incompatible - * - * @api - */ - 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); - } - - /** - * Returns the option shortcut. - * - * @return string The shortcut - */ - public function getShortcut() - { - return $this->shortcut; - } - - /** - * Returns the option name. - * - * @return string The name - */ - public function getName() - { - return $this->name; - } - - /** - * Returns true if the option accepts a value. - * - * @return Boolean true if value mode is not self::VALUE_NONE, false otherwise - */ - public function acceptValue() - { - return $this->isValueRequired() || $this->isValueOptional(); - } - - /** - * Returns true if the option requires a value. - * - * @return Boolean true if value mode is self::VALUE_REQUIRED, false otherwise - */ - public function isValueRequired() - { - return self::VALUE_REQUIRED === (self::VALUE_REQUIRED & $this->mode); - } - - /** - * Returns true if the option takes an optional value. - * - * @return Boolean true if value mode is self::VALUE_OPTIONAL, false otherwise - */ - public function isValueOptional() - { - return self::VALUE_OPTIONAL === (self::VALUE_OPTIONAL & $this->mode); - } - - /** - * Returns true if the option can take multiple values. - * - * @return Boolean true if mode is self::VALUE_IS_ARRAY, false otherwise - */ - public function isArray() - { - return self::VALUE_IS_ARRAY === (self::VALUE_IS_ARRAY & $this->mode); - } - - /** - * Sets the default value. - * - * @param mixed $default The default value - * - * @throws \LogicException When incorrect default value is given - */ - 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 = array(); - } elseif (!is_array($default)) { - throw new \LogicException('A default value for an array option must be an array.'); - } - } - - $this->default = $this->acceptValue() ? $default : false; - } - - /** - * Returns the default value. - * - * @return mixed The default value - */ - public function getDefault() - { - return $this->default; - } - - /** - * Returns the description text. - * - * @return string The description text - */ - public function getDescription() - { - return $this->description; - } - - /** - * Checks whether the given option equals this one - * - * @param InputOption $option option to compare - * @return Boolean - */ - public function equals(InputOption $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() - ; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Input; - -/** - * Input is the base class for all concrete Input classes. - * - * Three concrete classes are provided by default: - * - * * `ArgvInput`: The input comes from the CLI arguments (argv) - * * `StringInput`: The input is provided as a string - * * `ArrayInput`: The input is provided as an array - * - * @author Fabien Potencier - */ -abstract class Input implements InputInterface -{ - /** - * @var InputDefinition - */ - protected $definition; - protected $options = array(); - protected $arguments = array(); - protected $interactive = true; - - /** - * Constructor. - * - * @param InputDefinition $definition A InputDefinition instance - */ - public function __construct(InputDefinition $definition = null) - { - if (null === $definition) { - $this->definition = new InputDefinition(); - } else { - $this->bind($definition); - $this->validate(); - } - } - - /** - * Binds the current Input instance with the given arguments and options. - * - * @param InputDefinition $definition A InputDefinition instance - */ - public function bind(InputDefinition $definition) - { - $this->arguments = array(); - $this->options = array(); - $this->definition = $definition; - - $this->parse(); - } - - /** - * Processes command line arguments. - */ - abstract protected function parse(); - - /** - * Validates the input. - * - * @throws \RuntimeException When not enough arguments are given - */ - public function validate() - { - if (count($this->arguments) < $this->definition->getArgumentRequiredCount()) { - throw new \RuntimeException('Not enough arguments.'); - } - } - - /** - * Checks if the input is interactive. - * - * @return Boolean Returns true if the input is interactive - */ - public function isInteractive() - { - return $this->interactive; - } - - /** - * Sets the input interactivity. - * - * @param Boolean $interactive If the input should be interactive - */ - public function setInteractive($interactive) - { - $this->interactive = (Boolean) $interactive; - } - - /** - * Returns the argument values. - * - * @return array An array of argument values - */ - public function getArguments() - { - return array_merge($this->definition->getArgumentDefaults(), $this->arguments); - } - - /** - * Returns the argument value for a given argument name. - * - * @param string $name The argument name - * - * @return mixed The argument value - * - * @throws \InvalidArgumentException When argument given doesn't exist - */ - 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(); - } - - /** - * Sets an argument value by name. - * - * @param string $name The argument name - * @param string $value The argument value - * - * @throws \InvalidArgumentException When argument given doesn't exist - */ - 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; - } - - /** - * Returns true if an InputArgument object exists by name or position. - * - * @param string|integer $name The InputArgument name or position - * - * @return Boolean true if the InputArgument object exists, false otherwise - */ - public function hasArgument($name) - { - return $this->definition->hasArgument($name); - } - - /** - * Returns the options values. - * - * @return array An array of option values - */ - public function getOptions() - { - return array_merge($this->definition->getOptionDefaults(), $this->options); - } - - /** - * Returns the option value for a given option name. - * - * @param string $name The option name - * - * @return mixed The option value - * - * @throws \InvalidArgumentException When option given doesn't exist - */ - 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(); - } - - /** - * Sets an option value by name. - * - * @param string $name The option name - * @param string|boolean $value The option value - * - * @throws \InvalidArgumentException When option given doesn't exist - */ - 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; - } - - /** - * Returns true if an InputOption object exists by name. - * - * @param string $name The InputOption name - * - * @return Boolean true if the InputOption object exists, false otherwise - */ - public function hasOption($name) - { - return $this->definition->hasOption($name); - } - - /** - * Escapes a token through escapeshellarg if it contains unsafe chars - * - * @param string $token - * - * @return string - */ - public function escapeToken($token) - { - return preg_match('{^[\w-]+$}', $token) ? $token : escapeshellarg($token); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Input; - -/** - * ArgvInput represents an input coming from the CLI arguments. - * - * Usage: - * - * $input = new ArgvInput(); - * - * By default, the `$_SERVER['argv']` array is used for the input values. - * - * This can be overridden by explicitly passing the input values in the constructor: - * - * $input = new ArgvInput($_SERVER['argv']); - * - * If you pass it yourself, don't forget that the first element of the array - * is the name of the running application. - * - * When passing an argument to the constructor, be sure that it respects - * the same rules as the argv one. It's almost always better to use the - * `StringInput` when you want to provide your own input. - * - * @author Fabien Potencier - * - * @see http://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html - * @see http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html#tag_12_02 - * - * @api - */ -class ArgvInput extends Input -{ - private $tokens; - private $parsed; - - /** - * Constructor. - * - * @param array $argv An array of parameters from the CLI (in the argv format) - * @param InputDefinition $definition A InputDefinition instance - * - * @api - */ - public function __construct(array $argv = null, InputDefinition $definition = null) - { - if (null === $argv) { - $argv = $_SERVER['argv']; - } - - // strip the application name - array_shift($argv); - - $this->tokens = $argv; - - parent::__construct($definition); - } - - protected function setTokens(array $tokens) - { - $this->tokens = $tokens; - } - - /** - * Processes command line arguments. - */ - 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); - } - } - } - - /** - * Parses a short option. - * - * @param string $token The current 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()) { - // an option with a value (with no space) - $this->addShortOption($name[0], substr($name, 1)); - } else { - $this->parseShortOptionSet($name); - } - } else { - $this->addShortOption($name, null); - } - } - - /** - * Parses a short option set. - * - * @param string $name The current token - * - * @throws \RuntimeException When option given doesn't exist - */ - 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); - } - } - } - - /** - * Parses a long option. - * - * @param string $token The current 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); - } - } - - /** - * Parses an argument. - * - * @param string $token The current token - * - * @throws \RuntimeException When too many arguments are given - */ - private function parseArgument($token) - { - $c = count($this->arguments); - - // if input is expecting another argument, add it - if ($this->definition->hasArgument($c)) { - $arg = $this->definition->getArgument($c); - $this->arguments[$arg->getName()] = $arg->isArray()? array($token) : $token; - - // if last argument isArray(), append token to last argument - } elseif ($this->definition->hasArgument($c - 1) && $this->definition->getArgument($c - 1)->isArray()) { - $arg = $this->definition->getArgument($c - 1); - $this->arguments[$arg->getName()][] = $token; - - // unexpected argument - } else { - throw new \RuntimeException('Too many arguments.'); - } - } - - /** - * Adds a short option value. - * - * @param string $shortcut The short option key - * @param mixed $value The value for the option - * - * @throws \RuntimeException When option given doesn't exist - */ - 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); - } - - /** - * Adds a long option value. - * - * @param string $name The long option key - * @param mixed $value The value for the option - * - * @throws \RuntimeException When option given doesn't exist - */ - 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); - - // Convert false values (from a previous call to substr()) to null - 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)) { - // if option accepts an optional or mandatory argument - // let's see if there is one provided - $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; - } - } - - /** - * Returns the first argument from the raw parameters (not parsed). - * - * @return string The value of the first argument or null otherwise - */ - public function getFirstArgument() - { - foreach ($this->tokens as $token) { - if ($token && '-' === $token[0]) { - continue; - } - - return $token; - } - } - - /** - * Returns true if the raw parameters (not parsed) contain a value. - * - * This method is to be used to introspect the input parameters - * before they have been validated. It must be used carefully. - * - * @param string|array $values The value(s) to look for in the raw parameters (can be an array) - * - * @return Boolean true if the value is contained in the raw parameters - */ - 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; - } - - /** - * Returns the value of a raw option (not parsed). - * - * This method is to be used to introspect the input parameters - * before they have been validated. It must be used carefully. - * - * @param string|array $values The value(s) to look for in the raw parameters (can be an array) - * @param mixed $default The default value to return if no result is found - * - * @return mixed The option value - */ - public function getParameterOption($values, $default = false) - { - $values = (array) $values; - - $tokens = $this->tokens; - while ($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; - } - - /** - * Returns a stringified representation of the args passed to the command - * - * @return string - */ - public function __toString() - { - $self = $this; - $tokens = array_map(function ($token) use ($self) { - if (preg_match('{^(-[^=]+=)(.+)}', $token, $match)) { - return $match[1] . $self->escapeToken($match[2]); - } - - if ($token && $token[0] !== '-') { - return $self->escapeToken($token); - } - - return $token; - }, $this->tokens); - - return implode(' ', $tokens); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Command; - -use Symfony\Component\Console\Helper\DescriptorHelper; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputOption; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Output\OutputInterface; - -/** - * HelpCommand displays the help for a given command. - * - * @author Fabien Potencier - */ -class HelpCommand extends Command -{ - private $command; - - /** - * {@inheritdoc} - */ - protected function configure() - { - $this->ignoreValidationErrors(); - - $this - ->setName('help') - ->setDefinition(array( - new InputArgument('command_name', InputArgument::OPTIONAL, 'The command name', 'help'), - new InputOption('xml', null, InputOption::VALUE_NONE, 'To output help as XML'), - new InputOption('format', null, InputOption::VALUE_REQUIRED, 'To output help in other formats', 'txt'), - 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 - -You can also output the help in other formats by using the --format option: - - php %command.full_name% --format=xml 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(InputInterface $input, OutputInterface $output) - { - if (null === $this->command) { - $this->command = $this->getApplication()->find($input->getArgument('command_name')); - } - - if ($input->getOption('xml')) { - $input->setOption('format', 'xml'); - } - - $helper = new DescriptorHelper(); - $helper->describe($output, $this->command, array( - 'format' => $input->getOption('format'), - 'raw' => $input->getOption('raw'), - )); - - $this->command = null; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Command; - -use Symfony\Component\Console\Descriptor\TextDescriptor; -use Symfony\Component\Console\Descriptor\XmlDescriptor; -use Symfony\Component\Console\Input\InputDefinition; -use Symfony\Component\Console\Input\InputOption; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Output\BufferedOutput; -use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\Console\Application; -use Symfony\Component\Console\Helper\HelperSet; - -/** - * Base class for all commands. - * - * @author Fabien Potencier - * - * @api - */ -class Command -{ - private $application; - private $name; - private $aliases = array(); - private $definition; - private $help; - private $description; - private $ignoreValidationErrors = false; - private $applicationDefinitionMerged = false; - private $applicationDefinitionMergedWithArgs = false; - private $code; - private $synopsis; - private $helperSet; - - /** - * Constructor. - * - * @param string|null $name The name of the command; passing null means it must be set in configure() - * - * @throws \LogicException When the command name is empty - * - * @api - */ - public function __construct($name = null) - { - $this->definition = new InputDefinition(); - - if (null !== $name) { - $this->setName($name); - } - - $this->configure(); - - if (!$this->name) { - throw new \LogicException('The command name cannot be empty.'); - } - } - - /** - * Ignores validation errors. - * - * This is mainly useful for the help command. - */ - public function ignoreValidationErrors() - { - $this->ignoreValidationErrors = true; - } - - /** - * Sets the application instance for this command. - * - * @param Application $application An Application instance - * - * @api - */ - public function setApplication(Application $application = null) - { - $this->application = $application; - if ($application) { - $this->setHelperSet($application->getHelperSet()); - } else { - $this->helperSet = null; - } - } - - /** - * Sets the helper set. - * - * @param HelperSet $helperSet A HelperSet instance - */ - public function setHelperSet(HelperSet $helperSet) - { - $this->helperSet = $helperSet; - } - - /** - * Gets the helper set. - * - * @return HelperSet A HelperSet instance - */ - public function getHelperSet() - { - return $this->helperSet; - } - - /** - * Gets the application instance for this command. - * - * @return Application An Application instance - * - * @api - */ - public function getApplication() - { - return $this->application; - } - - /** - * Checks whether the command is enabled or not in the current environment - * - * Override this to check for x or y and return false if the command can not - * run properly under the current conditions. - * - * @return Boolean - */ - public function isEnabled() - { - return true; - } - - /** - * Configures the current command. - */ - protected function configure() - { - } - - /** - * Executes the current command. - * - * This method is not abstract because you can use this class - * as a concrete class. In this case, instead of defining the - * execute() method, you set the code to execute by passing - * a Closure to the setCode() method. - * - * @param InputInterface $input An InputInterface instance - * @param OutputInterface $output An OutputInterface instance - * - * @return null|integer null or 0 if everything went fine, or an error code - * - * @throws \LogicException When this abstract method is not implemented - * @see setCode() - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - throw new \LogicException('You must override the execute() method in the concrete command class.'); - } - - /** - * Interacts with the user. - * - * @param InputInterface $input An InputInterface instance - * @param OutputInterface $output An OutputInterface instance - */ - protected function interact(InputInterface $input, OutputInterface $output) - { - } - - /** - * Initializes the command just after the input has been validated. - * - * This is mainly useful when a lot of commands extends one main command - * where some things need to be initialized based on the input arguments and options. - * - * @param InputInterface $input An InputInterface instance - * @param OutputInterface $output An OutputInterface instance - */ - protected function initialize(InputInterface $input, OutputInterface $output) - { - } - - /** - * Runs the command. - * - * The code to execute is either defined directly with the - * setCode() method or by overriding the execute() method - * in a sub-class. - * - * @param InputInterface $input An InputInterface instance - * @param OutputInterface $output An OutputInterface instance - * - * @return integer The command exit code - * - * @throws \Exception - * - * @see setCode() - * @see execute() - * - * @api - */ - public function run(InputInterface $input, OutputInterface $output) - { - // force the creation of the synopsis before the merge with the app definition - $this->getSynopsis(); - - // add the application arguments and options - $this->mergeApplicationDefinition(); - - // bind the input against the command specific arguments/options - 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; - } - - /** - * Sets the code to execute when running this command. - * - * If this method is used, it overrides the code defined - * in the execute() method. - * - * @param callable $code A callable(InputInterface $input, OutputInterface $output) - * - * @return Command The current instance - * - * @throws \InvalidArgumentException - * - * @see execute() - * - * @api - */ - public function setCode($code) - { - if (!is_callable($code)) { - throw new \InvalidArgumentException('Invalid callable provided to Command::setCode.'); - } - - $this->code = $code; - - return $this; - } - - /** - * Merges the application definition with the command definition. - * - * This method is not part of public API and should not be used directly. - * - * @param Boolean $mergeArgs Whether to merge or not the Application definition arguments to Command definition arguments - */ - public function mergeApplicationDefinition($mergeArgs = true) - { - if (null === $this->application || (true === $this->applicationDefinitionMerged && ($this->applicationDefinitionMergedWithArgs || !$mergeArgs))) { - return; - } - - if ($mergeArgs) { - $currentArguments = $this->definition->getArguments(); - $this->definition->setArguments($this->application->getDefinition()->getArguments()); - $this->definition->addArguments($currentArguments); - } - - $this->definition->addOptions($this->application->getDefinition()->getOptions()); - - $this->applicationDefinitionMerged = true; - if ($mergeArgs) { - $this->applicationDefinitionMergedWithArgs = true; - } - } - - /** - * Sets an array of argument and option instances. - * - * @param array|InputDefinition $definition An array of argument and option instances or a definition instance - * - * @return Command The current instance - * - * @api - */ - public function setDefinition($definition) - { - if ($definition instanceof InputDefinition) { - $this->definition = $definition; - } else { - $this->definition->setDefinition($definition); - } - - $this->applicationDefinitionMerged = false; - - return $this; - } - - /** - * Gets the InputDefinition attached to this Command. - * - * @return InputDefinition An InputDefinition instance - * - * @api - */ - public function getDefinition() - { - return $this->definition; - } - - /** - * Gets the InputDefinition to be used to create XML and Text representations of this Command. - * - * Can be overridden to provide the original command representation when it would otherwise - * be changed by merging with the application InputDefinition. - * - * This method is not part of public API and should not be used directly. - * - * @return InputDefinition An InputDefinition instance - */ - public function getNativeDefinition() - { - return $this->getDefinition(); - } - - /** - * Adds an argument. - * - * @param string $name The argument name - * @param integer $mode The argument mode: InputArgument::REQUIRED or InputArgument::OPTIONAL - * @param string $description A description text - * @param mixed $default The default value (for InputArgument::OPTIONAL mode only) - * - * @return Command The current instance - * - * @api - */ - public function addArgument($name, $mode = null, $description = '', $default = null) - { - $this->definition->addArgument(new InputArgument($name, $mode, $description, $default)); - - return $this; - } - - /** - * Adds an option. - * - * @param string $name The option name - * @param string $shortcut The shortcut (can be null) - * @param integer $mode The option mode: One of the InputOption::VALUE_* constants - * @param string $description A description text - * @param mixed $default The default value (must be null for InputOption::VALUE_REQUIRED or InputOption::VALUE_NONE) - * - * @return Command The current instance - * - * @api - */ - public function addOption($name, $shortcut = null, $mode = null, $description = '', $default = null) - { - $this->definition->addOption(new InputOption($name, $shortcut, $mode, $description, $default)); - - return $this; - } - - /** - * Sets the name of the command. - * - * This method can set both the namespace and the name if - * you separate them by a colon (:) - * - * $command->setName('foo:bar'); - * - * @param string $name The command name - * - * @return Command The current instance - * - * @throws \InvalidArgumentException When the name is invalid - * - * @api - */ - public function setName($name) - { - $this->validateName($name); - - $this->name = $name; - - return $this; - } - - /** - * Returns the command name. - * - * @return string The command name - * - * @api - */ - public function getName() - { - return $this->name; - } - - /** - * Sets the description for the command. - * - * @param string $description The description for the command - * - * @return Command The current instance - * - * @api - */ - public function setDescription($description) - { - $this->description = $description; - - return $this; - } - - /** - * Returns the description for the command. - * - * @return string The description for the command - * - * @api - */ - public function getDescription() - { - return $this->description; - } - - /** - * Sets the help for the command. - * - * @param string $help The help for the command - * - * @return Command The current instance - * - * @api - */ - public function setHelp($help) - { - $this->help = $help; - - return $this; - } - - /** - * Returns the help for the command. - * - * @return string The help for the command - * - * @api - */ - public function getHelp() - { - return $this->help; - } - - /** - * Returns the processed help for the command replacing the %command.name% and - * %command.full_name% patterns with the real values dynamically. - * - * @return string The processed help for the command - */ - public function getProcessedHelp() - { - $name = $this->name; - - $placeholders = array( - '%command.name%', - '%command.full_name%' - ); - $replacements = array( - $name, - $_SERVER['PHP_SELF'].' '.$name - ); - - return str_replace($placeholders, $replacements, $this->getHelp()); - } - - /** - * Sets the aliases for the command. - * - * @param array $aliases An array of aliases for the command - * - * @return Command The current instance - * - * @throws \InvalidArgumentException When an alias is invalid - * - * @api - */ - public function setAliases($aliases) - { - foreach ($aliases as $alias) { - $this->validateName($alias); - } - - $this->aliases = $aliases; - - return $this; - } - - /** - * Returns the aliases for the command. - * - * @return array An array of aliases for the command - * - * @api - */ - public function getAliases() - { - return $this->aliases; - } - - /** - * Returns the synopsis for the command. - * - * @return string The synopsis - */ - public function getSynopsis() - { - if (null === $this->synopsis) { - $this->synopsis = trim(sprintf('%s %s', $this->name, $this->definition->getSynopsis())); - } - - return $this->synopsis; - } - - /** - * Gets a helper instance by name. - * - * @param string $name The helper name - * - * @return mixed The helper value - * - * @throws \InvalidArgumentException if the helper is not defined - * - * @api - */ - public function getHelper($name) - { - return $this->helperSet->get($name); - } - - /** - * Returns a text representation of the command. - * - * @return string A string representing the command - * - * @deprecated Deprecated since version 2.3, to be removed in 3.0. - */ - public function asText() - { - $descriptor = new TextDescriptor(); - $output = new BufferedOutput(BufferedOutput::VERBOSITY_NORMAL, true); - $descriptor->describe($output, $this, array('raw_output' => true)); - - return $output->fetch(); - } - - /** - * Returns an XML representation of the command. - * - * @param Boolean $asDom Whether to return a DOM or an XML string - * - * @return string|\DOMDocument An XML string representing the command - * - * @deprecated Deprecated since version 2.3, to be removed in 3.0. - */ - public function asXml($asDom = false) - { - $descriptor = new XmlDescriptor(); - - if ($asDom) { - return $descriptor->getCommandDocument($this); - } - - $output = new BufferedOutput(); - $descriptor->describe($output, $this); - - return $output->fetch(); - } - - /** - * Validates a command name. - * - * It must be non-empty and parts can optionally be separated by ":". - * - * @param string $name - * - * @throws \InvalidArgumentException When the name is invalid - */ - private function validateName($name) - { - if (!preg_match('/^[^\:]++(\:[^\:]++)*$/', $name)) { - throw new \InvalidArgumentException(sprintf('Command name "%s" is invalid.', $name)); - } - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console\Command; - -use Symfony\Component\Console\Helper\DescriptorHelper; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputOption; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\Console\Input\InputDefinition; - -/** - * ListCommand displays the list of all available commands for the application. - * - * @author Fabien Potencier - */ -class ListCommand 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 - -You can also output the information in other formats by using the --format option: - - php %command.full_name% --format=xml - -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(InputInterface $input, OutputInterface $output) - { - if ($input->getOption('xml')) { - $input->setOption('format', 'xml'); - } - - $helper = new DescriptorHelper(); - $helper->describe($output, $this->getApplication(), array( - 'format' => $input->getOption('format'), - 'raw_text' => $input->getOption('raw'), - 'namespace' => $input->getArgument('namespace'), - )); - } - - /** - * {@inheritdoc} - */ - private function createDefinition() - { - return new InputDefinition(array( - new InputArgument('namespace', InputArgument::OPTIONAL, 'The namespace name'), - new InputOption('xml', null, InputOption::VALUE_NONE, 'To output list as XML'), - new InputOption('raw', null, InputOption::VALUE_NONE, 'To output raw command list'), - new InputOption('format', null, InputOption::VALUE_REQUIRED, 'To output list in other formats', 'txt'), - )); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console; - -use Symfony\Component\Console\Descriptor\TextDescriptor; -use Symfony\Component\Console\Descriptor\XmlDescriptor; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\ArgvInput; -use Symfony\Component\Console\Input\ArrayInput; -use Symfony\Component\Console\Input\InputDefinition; -use Symfony\Component\Console\Input\InputOption; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputAwareInterface; -use Symfony\Component\Console\Output\BufferedOutput; -use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\Console\Output\ConsoleOutput; -use Symfony\Component\Console\Output\ConsoleOutputInterface; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Command\HelpCommand; -use Symfony\Component\Console\Command\ListCommand; -use Symfony\Component\Console\Helper\HelperSet; -use Symfony\Component\Console\Helper\FormatterHelper; -use Symfony\Component\Console\Helper\DialogHelper; -use Symfony\Component\Console\Helper\ProgressHelper; -use Symfony\Component\Console\Helper\TableHelper; -use Symfony\Component\Console\Event\ConsoleCommandEvent; -use Symfony\Component\Console\Event\ConsoleExceptionEvent; -use Symfony\Component\Console\Event\ConsoleTerminateEvent; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; - -/** - * An Application is the container for a collection of commands. - * - * It is the main entry point of a Console application. - * - * This class is optimized for a standard CLI environment. - * - * Usage: - * - * $app = new Application('myapp', '1.0 (stable)'); - * $app->add(new SimpleCommand()); - * $app->run(); - * - * @author Fabien Potencier - * - * @api - */ -class Application -{ - private $commands = array(); - private $wantHelps = false; - private $runningCommand; - private $name; - private $version; - private $catchExceptions = true; - private $autoExit = true; - private $definition; - private $helperSet; - private $dispatcher; - private $terminalDimensions; - - /** - * Constructor. - * - * @param string $name The name of the application - * @param string $version The version of the application - * - * @api - */ - public function __construct($name = 'UNKNOWN', $version = 'UNKNOWN') - { - $this->name = $name; - $this->version = $version; - $this->helperSet = $this->getDefaultHelperSet(); - $this->definition = $this->getDefaultInputDefinition(); - - foreach ($this->getDefaultCommands() as $command) { - $this->add($command); - } - } - - public function setDispatcher(EventDispatcherInterface $dispatcher) - { - $this->dispatcher = $dispatcher; - } - - /** - * Runs the current application. - * - * @param InputInterface $input An Input instance - * @param OutputInterface $output An Output instance - * - * @return integer 0 if everything went fine, or an error code - * - * @throws \Exception When doRun returns Exception - * - * @api - */ - public function run(InputInterface $input = null, OutputInterface $output = null) - { - if (null === $input) { - $input = new ArgvInput(); - } - - if (null === $output) { - $output = new ConsoleOutput(); - } - - $this->configureIO($input, $output); - - try { - $exitCode = $this->doRun($input, $output); - } catch (\Exception $e) { - if (!$this->catchExceptions) { - throw $e; - } - - if ($output instanceof ConsoleOutputInterface) { - $this->renderException($e, $output->getErrorOutput()); - } else { - $this->renderException($e, $output); - } - - $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; - } - // @codeCoverageIgnoreStart - exit($exitCode); - // @codeCoverageIgnoreEnd - } - - return $exitCode; - } - - /** - * Runs the current application. - * - * @param InputInterface $input An Input instance - * @param OutputInterface $output An Output instance - * - * @return integer 0 if everything went fine, or an error code - */ - public function doRun(InputInterface $input, OutputInterface $output) - { - if (true === $input->hasParameterOption(array('--version', '-V'))) { - $output->writeln($this->getLongVersion()); - - return 0; - } - - $name = $this->getCommandName($input); - if (true === $input->hasParameterOption(array('--help', '-h'))) { - if (!$name) { - $name = 'help'; - $input = new ArrayInput(array('command' => 'help')); - } else { - $this->wantHelps = true; - } - } - - if (!$name) { - $name = 'list'; - $input = new ArrayInput(array('command' => 'list')); - } - - // the command name MUST be the first element of the input - $command = $this->find($name); - - $this->runningCommand = $command; - $exitCode = $this->doRunCommand($command, $input, $output); - $this->runningCommand = null; - - return $exitCode; - } - - /** - * Set a helper set to be used with the command. - * - * @param HelperSet $helperSet The helper set - * - * @api - */ - public function setHelperSet(HelperSet $helperSet) - { - $this->helperSet = $helperSet; - } - - /** - * Get the helper set associated with the command. - * - * @return HelperSet The HelperSet instance associated with this command - * - * @api - */ - public function getHelperSet() - { - return $this->helperSet; - } - - /** - * Set an input definition set to be used with this application - * - * @param InputDefinition $definition The input definition - * - * @api - */ - public function setDefinition(InputDefinition $definition) - { - $this->definition = $definition; - } - - /** - * Gets the InputDefinition related to this Application. - * - * @return InputDefinition The InputDefinition instance - */ - public function getDefinition() - { - return $this->definition; - } - - /** - * Gets the help message. - * - * @return string A help message. - */ - public function getHelp() - { - $messages = array( - $this->getLongVersion(), - '', - 'Usage:', - ' [options] command [arguments]', - '', - 'Options:', - ); - - foreach ($this->getDefinition()->getOptions() as $option) { - $messages[] = sprintf(' %-29s %s %s', - '--'.$option->getName().'', - $option->getShortcut() ? '-'.$option->getShortcut().'' : ' ', - $option->getDescription() - ); - } - - return implode(PHP_EOL, $messages); - } - - /** - * Sets whether to catch exceptions or not during commands execution. - * - * @param Boolean $boolean Whether to catch exceptions or not during commands execution - * - * @api - */ - public function setCatchExceptions($boolean) - { - $this->catchExceptions = (Boolean) $boolean; - } - - /** - * Sets whether to automatically exit after a command execution or not. - * - * @param Boolean $boolean Whether to automatically exit after a command execution or not - * - * @api - */ - public function setAutoExit($boolean) - { - $this->autoExit = (Boolean) $boolean; - } - - /** - * Gets the name of the application. - * - * @return string The application name - * - * @api - */ - public function getName() - { - return $this->name; - } - - /** - * Sets the application name. - * - * @param string $name The application name - * - * @api - */ - public function setName($name) - { - $this->name = $name; - } - - /** - * Gets the application version. - * - * @return string The application version - * - * @api - */ - public function getVersion() - { - return $this->version; - } - - /** - * Sets the application version. - * - * @param string $version The application version - * - * @api - */ - public function setVersion($version) - { - $this->version = $version; - } - - /** - * Returns the long version of the application. - * - * @return string The long application version - * - * @api - */ - public function getLongVersion() - { - if ('UNKNOWN' !== $this->getName() && 'UNKNOWN' !== $this->getVersion()) { - return sprintf('%s version %s', $this->getName(), $this->getVersion()); - } - - return 'Console Tool'; - } - - /** - * Registers a new command. - * - * @param string $name The command name - * - * @return Command The newly created command - * - * @api - */ - public function register($name) - { - return $this->add(new Command($name)); - } - - /** - * Adds an array of command objects. - * - * @param Command[] $commands An array of commands - * - * @api - */ - public function addCommands(array $commands) - { - foreach ($commands as $command) { - $this->add($command); - } - } - - /** - * Adds a command object. - * - * If a command with the same name already exists, it will be overridden. - * - * @param Command $command A Command object - * - * @return Command The registered command - * - * @api - */ - public function add(Command $command) - { - $command->setApplication($this); - - if (!$command->isEnabled()) { - $command->setApplication(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; - } - - /** - * Returns a registered command by name or alias. - * - * @param string $name The command name or alias - * - * @return Command A Command object - * - * @throws \InvalidArgumentException When command name given does not exist - * - * @api - */ - 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; - - $helpCommand = $this->get('help'); - $helpCommand->setCommand($command); - - return $helpCommand; - } - - return $command; - } - - /** - * Returns true if the command exists, false otherwise. - * - * @param string $name The command name or alias - * - * @return Boolean true if the command exists, false otherwise - * - * @api - */ - public function has($name) - { - return isset($this->commands[$name]); - } - - /** - * Returns an array of all unique namespaces used by currently registered commands. - * - * It does not returns the global namespace which always exists. - * - * @return array An array of namespaces - */ - public function getNamespaces() - { - $namespaces = array(); - foreach ($this->commands as $command) { - $namespaces[] = $this->extractNamespace($command->getName()); - - foreach ($command->getAliases() as $alias) { - $namespaces[] = $this->extractNamespace($alias); - } - } - - return array_values(array_unique(array_filter($namespaces))); - } - - /** - * Finds a registered namespace by a name or an abbreviation. - * - * @param string $namespace A namespace or abbreviation to search for - * - * @return string A registered namespace - * - * @throws \InvalidArgumentException When namespace is incorrect or ambiguous - */ - 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, array())) { - 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); - } - - /** - * Finds a command by name or alias. - * - * Contrary to get, this command tries to find the best - * match if you give it an abbreviation of a name or alias. - * - * @param string $name A command name or a command alias - * - * @return Command A Command instance - * - * @throws \InvalidArgumentException When command name is incorrect or ambiguous - * - * @api - */ - 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, ':')) { - // check if a namespace exists and contains commands - $this->findNamespace(substr($name, 0, $pos)); - } - - $message = sprintf('Command "%s" is not defined.', $name); - - if ($alternatives = $this->findAlternatives($name, $allCommands, array())) { - 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); - } - - // filter out aliases for commands which are already on the list - 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)); - } - - /** - * Gets the commands (registered in the given namespace if provided). - * - * The array keys are the full names and the values the command instances. - * - * @param string $namespace A namespace name - * - * @return Command[] An array of Command instances - * - * @api - */ - public function all($namespace = null) - { - if (null === $namespace) { - return $this->commands; - } - - $commands = array(); - foreach ($this->commands as $name => $command) { - if ($namespace === $this->extractNamespace($name, substr_count($namespace, ':') + 1)) { - $commands[$name] = $command; - } - } - - return $commands; - } - - /** - * Returns an array of possible abbreviations given a set of names. - * - * @param array $names An array of names - * - * @return array An array of abbreviations - */ - public static function getAbbreviations($names) - { - $abbrevs = array(); - foreach ($names as $name) { - for ($len = strlen($name); $len > 0; --$len) { - $abbrev = substr($name, 0, $len); - $abbrevs[$abbrev][] = $name; - } - } - - return $abbrevs; - } - - /** - * Returns a text representation of the Application. - * - * @param string $namespace An optional namespace name - * @param boolean $raw Whether to return raw command list - * - * @return string A string representing the Application - * - * @deprecated Deprecated since version 2.3, to be removed in 3.0. - */ - public function asText($namespace = null, $raw = false) - { - $descriptor = new TextDescriptor(); - $output = new BufferedOutput(BufferedOutput::VERBOSITY_NORMAL, !$raw); - $descriptor->describe($output, $this, array('namespace' => $namespace, 'raw_output' => true)); - - return $output->fetch(); - } - - /** - * Returns an XML representation of the Application. - * - * @param string $namespace An optional namespace name - * @param Boolean $asDom Whether to return a DOM or an XML string - * - * @return string|\DOMDocument An XML string representing the Application - * - * @deprecated Deprecated since version 2.3, to be removed in 3.0. - */ - public function asXml($namespace = null, $asDom = false) - { - $descriptor = new XmlDescriptor(); - - if ($asDom) { - return $descriptor->getApplicationDocument($this, $namespace); - } - - $output = new BufferedOutput(); - $descriptor->describe($output, $this, array('namespace' => $namespace)); - - return $output->fetch(); - } - - /** - * Renders a caught exception. - * - * @param \Exception $e An exception instance - * @param OutputInterface $output An OutputInterface instance - */ - public function renderException($e, $output) - { - $strlen = function ($string) { - if (!function_exists('mb_strlen')) { - return strlen($string); - } - - if (false === $encoding = mb_detect_encoding($string)) { - return strlen($string); - } - - return mb_strlen($string, $encoding); - }; - - do { - $title = sprintf(' [%s] ', get_class($e)); - $len = $strlen($title); - // HHVM only accepts 32 bits integer in str_split, even when PHP_INT_MAX is a 64 bit integer: https://github.com/facebook/hhvm/issues/1327 - $width = $this->getTerminalWidth() ? $this->getTerminalWidth() - 1 : (defined('HHVM_VERSION') ? 1 << 31 : PHP_INT_MAX); - $formatter = $output->getFormatter(); - $lines = array(); - foreach (preg_split('/\r?\n/', $e->getMessage()) as $line) { - foreach (str_split($line, $width - 4) as $line) { - // pre-format lines to get the right string length - $lineLength = $strlen(preg_replace('/\[[^m]*m/', '', $formatter->format($line))) + 4; - $lines[] = array($line, $lineLength); - - $len = max($lineLength, $len); - } - } - - $messages = array('', ''); - $messages[] = $emptyLine = $formatter->format(sprintf('%s', str_repeat(' ', $len))); - $messages[] = $formatter->format(sprintf('%s%s', $title, str_repeat(' ', max(0, $len - $strlen($title))))); - foreach ($lines as $line) { - $messages[] = $formatter->format(sprintf(' %s %s', $line[0], str_repeat(' ', $len - $line[1]))); - } - $messages[] = $emptyLine; - $messages[] = ''; - $messages[] = ''; - - $output->writeln($messages, OutputInterface::OUTPUT_RAW); - - if (OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) { - $output->writeln('Exception trace:'); - - // exception related properties - $trace = $e->getTrace(); - array_unshift($trace, array( - 'function' => '', - 'file' => $e->getFile() != null ? $e->getFile() : 'n/a', - 'line' => $e->getLine() != null ? $e->getLine() : 'n/a', - 'args' => array(), - )); - - 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'; - - $output->writeln(sprintf(' %s%s%s() at %s:%s', $class, $type, $function, $file, $line)); - } - - $output->writeln(""); - $output->writeln(""); - } - } while ($e = $e->getPrevious()); - - if (null !== $this->runningCommand) { - $output->writeln(sprintf('%s', sprintf($this->runningCommand->getSynopsis(), $this->getName()))); - $output->writeln(""); - $output->writeln(""); - } - } - - /** - * Tries to figure out the terminal width in which this application runs - * - * @return int|null - */ - protected function getTerminalWidth() - { - $dimensions = $this->getTerminalDimensions(); - - return $dimensions[0]; - } - - /** - * Tries to figure out the terminal height in which this application runs - * - * @return int|null - */ - protected function getTerminalHeight() - { - $dimensions = $this->getTerminalDimensions(); - - return $dimensions[1]; - } - - /** - * Tries to figure out the terminal dimensions based on the current environment - * - * @return array Array containing width and height - */ - public function getTerminalDimensions() - { - if ($this->terminalDimensions) { - return $this->terminalDimensions; - } - - if (defined('PHP_WINDOWS_VERSION_BUILD')) { - // extract [w, H] from "wxh (WxH)" - if (preg_match('/^(\d+)x\d+ \(\d+x(\d+)\)$/', trim(getenv('ANSICON')), $matches)) { - return array((int) $matches[1], (int) $matches[2]); - } - // extract [w, h] from "wxh" - if (preg_match('/^(\d+)x(\d+)$/', $this->getConsoleMode(), $matches)) { - return array((int) $matches[1], (int) $matches[2]); - } - } - - if ($sttyString = $this->getSttyColumns()) { - // extract [w, h] from "rows h; columns w;" - if (preg_match('/rows.(\d+);.columns.(\d+);/i', $sttyString, $matches)) { - return array((int) $matches[2], (int) $matches[1]); - } - // extract [w, h] from "; h rows; w columns" - if (preg_match('/;.(\d+).rows;.(\d+).columns/i', $sttyString, $matches)) { - return array((int) $matches[2], (int) $matches[1]); - } - } - - return array(null, null); - } - - /** - * Sets terminal dimensions. - * - * Can be useful to force terminal dimensions for functional tests. - * - * @param integer $width The width - * @param integer $height The height - * - * @return Application The current application - */ - public function setTerminalDimensions($width, $height) - { - $this->terminalDimensions = array($width, $height); - - return $this; - } - - /** - * Configures the input and output instances based on the user arguments and options. - * - * @param InputInterface $input An InputInterface instance - * @param OutputInterface $output An OutputInterface instance - */ - protected function configureIO(InputInterface $input, OutputInterface $output) - { - if (true === $input->hasParameterOption(array('--ansi'))) { - $output->setDecorated(true); - } elseif (true === $input->hasParameterOption(array('--no-ansi'))) { - $output->setDecorated(false); - } - - if (true === $input->hasParameterOption(array('--no-interaction', '-n'))) { - $input->setInteractive(false); - } elseif (function_exists('posix_isatty') && $this->getHelperSet()->has('dialog')) { - $inputStream = $this->getHelperSet()->get('dialog')->getInputStream(); - if (!@posix_isatty($inputStream)) { - $input->setInteractive(false); - } - } - - if (true === $input->hasParameterOption(array('--quiet', '-q'))) { - $output->setVerbosity(OutputInterface::VERBOSITY_QUIET); - } else { - if ($input->hasParameterOption('-vvv') || $input->hasParameterOption('--verbose=3') || $input->getParameterOption('--verbose') === 3) { - $output->setVerbosity(OutputInterface::VERBOSITY_DEBUG); - } elseif ($input->hasParameterOption('-vv') || $input->hasParameterOption('--verbose=2') || $input->getParameterOption('--verbose') === 2) { - $output->setVerbosity(OutputInterface::VERBOSITY_VERY_VERBOSE); - } elseif ($input->hasParameterOption('-v') || $input->hasParameterOption('--verbose=1') || $input->hasParameterOption('--verbose') || $input->getParameterOption('--verbose')) { - $output->setVerbosity(OutputInterface::VERBOSITY_VERBOSE); - } - } - } - - /** - * Runs the current command. - * - * If an event dispatcher has been attached to the application, - * events are also dispatched during the life-cycle of the command. - * - * @param Command $command A Command instance - * @param InputInterface $input An Input instance - * @param OutputInterface $output An Output instance - * - * @return integer 0 if everything went fine, or an error code - */ - protected function doRunCommand(Command $command, InputInterface $input, OutputInterface $output) - { - foreach ($command->getHelperSet() as $helper) { - if ($helper instanceof InputAwareInterface) { - $helper->setInput($input); - } - } - - if (null === $this->dispatcher) { - return $command->run($input, $output); - } - - $event = new ConsoleCommandEvent($command, $input, $output); - $this->dispatcher->dispatch(ConsoleEvents::COMMAND, $event); - - try { - $exitCode = $command->run($input, $output); - } catch (\Exception $e) { - $event = new ConsoleTerminateEvent($command, $input, $output, $e->getCode()); - $this->dispatcher->dispatch(ConsoleEvents::TERMINATE, $event); - - $event = new ConsoleExceptionEvent($command, $input, $output, $e, $event->getExitCode()); - $this->dispatcher->dispatch(ConsoleEvents::EXCEPTION, $event); - - throw $event->getException(); - } - - $event = new ConsoleTerminateEvent($command, $input, $output, $exitCode); - $this->dispatcher->dispatch(ConsoleEvents::TERMINATE, $event); - - return $event->getExitCode(); - } - - /** - * Gets the name of the command based on input. - * - * @param InputInterface $input The input interface - * - * @return string The command name - */ - protected function getCommandName(InputInterface $input) - { - return $input->getFirstArgument(); - } - - /** - * Gets the default input definition. - * - * @return InputDefinition An InputDefinition instance - */ - protected function getDefaultInputDefinition() - { - return new InputDefinition(array( - new InputArgument('command', InputArgument::REQUIRED, 'The command to execute'), - - new InputOption('--help', '-h', InputOption::VALUE_NONE, 'Display this help message.'), - 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('--version', '-V', InputOption::VALUE_NONE, 'Display this application version.'), - 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.'), - )); - } - - /** - * Gets the default commands that should always be available. - * - * @return Command[] An array of default Command instances - */ - protected function getDefaultCommands() - { - return array(new HelpCommand(), new ListCommand()); - } - - /** - * Gets the default helper set with the helpers that should always be available. - * - * @return HelperSet A HelperSet instance - */ - protected function getDefaultHelperSet() - { - return new HelperSet(array( - new FormatterHelper(), - new DialogHelper(), - new ProgressHelper(), - new TableHelper(), - )); - } - - /** - * Runs and parses stty -a if it's available, suppressing any error output - * - * @return string - */ - private function getSttyColumns() - { - if (!function_exists('proc_open')) { - return; - } - - $descriptorspec = array(1 => array('pipe', 'w'), 2 => array('pipe', 'w')); - $process = proc_open('stty -a | grep columns', $descriptorspec, $pipes, null, null, array('suppress_errors' => true)); - if (is_resource($process)) { - $info = stream_get_contents($pipes[1]); - fclose($pipes[1]); - fclose($pipes[2]); - proc_close($process); - - return $info; - } - } - - /** - * Runs and parses mode CON if it's available, suppressing any error output - * - * @return string x or null if it could not be parsed - */ - private function getConsoleMode() - { - if (!function_exists('proc_open')) { - return; - } - - $descriptorspec = array(1 => array('pipe', 'w'), 2 => array('pipe', 'w')); - $process = proc_open('mode CON', $descriptorspec, $pipes, null, null, array('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]; - } - } - } - - /** - * Returns abbreviated suggestions in string format. - * - * @param array $abbrevs Abbreviated suggestions to convert - * - * @return string A formatted string of abbreviated suggestions - */ - private function getAbbreviationSuggestions($abbrevs) - { - return sprintf('%s, %s%s', $abbrevs[0], $abbrevs[1], count($abbrevs) > 2 ? sprintf(' and %d more', count($abbrevs) - 2) : ''); - } - - /** - * Returns the namespace part of the command name. - * - * This method is not part of public API and should not be used directly. - * - * @param string $name The full name of the command - * @param string $limit The maximum number of parts of the namespace - * - * @return string The namespace of the command - */ - public function extractNamespace($name, $limit = null) - { - $parts = explode(':', $name); - array_pop($parts); - - return implode(':', null === $limit ? $parts : array_slice($parts, 0, $limit)); - } - - /** - * Finds alternative of $name among $collection, - * if nothing is found in $collection, try in $abbrevs - * - * @param string $name The string - * @param array|\Traversable $collection The collection - * - * @return array A sorted array of similar string - */ - private function findAlternatives($name, $collection) - { - $threshold = 1e3; - $alternatives = array(); - - $collectionParts = array(); - 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 || 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); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Console; - -use Symfony\Component\Console\Input\StringInput; -use Symfony\Component\Console\Output\ConsoleOutput; -use Symfony\Component\Process\ProcessBuilder; -use Symfony\Component\Process\PhpExecutableFinder; - -/** - * A Shell wraps an Application to add shell capabilities to it. - * - * Support for history and completion only works with a PHP compiled - * with readline support (either --with-readline or --with-libedit) - * - * @author Fabien Potencier - * @author Martin Hasoň - */ -class Shell -{ - private $application; - private $history; - private $output; - private $hasReadline; - private $processIsolation = false; - - /** - * Constructor. - * - * If there is no readline support for the current PHP executable - * a \RuntimeException exception is thrown. - * - * @param Application $application An application instance - */ - public function __construct(Application $application) - { - $this->hasReadline = function_exists('readline'); - $this->application = $application; - $this->history = getenv('HOME').'/.history_'.$application->getName(); - $this->output = new ConsoleOutput(); - } - - /** - * Runs the shell. - */ - public function run() - { - $this->application->setAutoExit(false); - $this->application->setCatchExceptions(true); - - if ($this->hasReadline) { - readline_read_history($this->history); - readline_completion_function(array($this, 'autocompleter')); - } - - $this->output->writeln($this->getHeader()); - $php = null; - if ($this->processIsolation) { - $finder = new PhpExecutableFinder(); - $php = $finder->find(); - $this->output->writeln(<<Running with process isolation, you should consider this: - * each command is executed as separate process, - * commands don't support interactivity, all params must be passed explicitly, - * commands output is not colorized. - -EOF - ); - } - - while (true) { - $command = $this->readline(); - - if (false === $command) { - $this->output->writeln("\n"); - - break; - } - - if ($this->hasReadline) { - readline_add_history($command); - readline_write_history($this->history); - } - - if ($this->processIsolation) { - $pb = new ProcessBuilder(); - - $process = $pb - ->add($php) - ->add($_SERVER['argv'][0]) - ->add($command) - ->inheritEnvironmentVariables(true) - ->getProcess() - ; - - $output = $this->output; - $process->run(function ($type, $data) use ($output) { - $output->writeln($data); - }); - - $ret = $process->getExitCode(); - } else { - $ret = $this->application->run(new StringInput($command), $this->output); - } - - if (0 !== $ret) { - $this->output->writeln(sprintf('The command terminated with an error status (%s)', $ret)); - } - } - } - - /** - * Returns the shell header. - * - * @return string The header string - */ - protected function getHeader() - { - return <<{$this->application->getName()} shell ({$this->application->getVersion()}). - -At the prompt, type help for some help, -or list to get a list of available commands. - -To exit the shell, type ^D. - -EOF; - } - - /** - * Renders a prompt. - * - * @return string The prompt - */ - protected function getPrompt() - { - // using the formatter here is required when using readline - return $this->output->getFormatter()->format($this->application->getName().' > '); - } - - protected function getOutput() - { - return $this->output; - } - - protected function getApplication() - { - return $this->application; - } - - /** - * Tries to return autocompletion for the current entered text. - * - * @param string $text The last segment of the entered text - * - * @return Boolean|array A list of guessed strings or true - */ - private function autocompleter($text) - { - $info = readline_info(); - $text = substr($info['line_buffer'], 0, $info['end']); - - if ($info['point'] !== $info['end']) { - return true; - } - - // task name? - if (false === strpos($text, ' ') || !$text) { - return array_keys($this->application->all()); - } - - // options and arguments? - try { - $command = $this->application->find(substr($text, 0, strpos($text, ' '))); - } catch (\Exception $e) { - return true; - } - - $list = array('--help'); - foreach ($command->getDefinition()->getOptions() as $option) { - $list[] = '--'.$option->getName(); - } - - return $list; - } - - /** - * Reads a single line from standard input. - * - * @return string The single line from standard input - */ - private function readline() - { - if ($this->hasReadline) { - $line = readline($this->getPrompt()); - } else { - $this->output->write($this->getPrompt()); - $line = fgets(STDIN, 1024); - $line = (!$line && strlen($line) == 0) ? false : rtrim($line); - } - - return $line; - } - - public function getProcessIsolation() - { - return $this->processIsolation; - } - - public function setProcessIsolation($processIsolation) - { - $this->processIsolation = (Boolean) $processIsolation; - - if ($this->processIsolation && !class_exists('Symfony\\Component\\Process\\Process')) { - throw new \RuntimeException('Unable to isolate processes as the Symfony Process Component is not installed.'); - } - } -} -. - * 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 Sebastian Bergmann nor the names of his - * 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 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. - * - * @package phpdcd - * @author Sebastian Bergmann - * @copyright 2009-2014 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @since File available since Release 1.0.0 - */ - -namespace SebastianBergmann\PHPDCD\Log; - -use Symfony\Component\Console\Output\OutputInterface; - -/** - * @author Sebastian Bergmann - * @copyright 2009-2014 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @version Release: @package_version@ - * @link http://github.com/sebastianbergmann/phpdcd/tree - * @since Class available since Release 1.0.0 - */ -class Text -{ - /** - * Prints a result set from PHPDCD_Detector::detectDeadCode(). - * - * @param Symfony\Component\Console\Output\OutputInterface $output - * @param array $result - */ - public function printResult(OutputInterface $output, array $result) - { - foreach ($result as $name => $source) { - $output->writeln( - sprintf( - " - %s()\n LOC: %d, declared in %s:%d\n", - $name, - $source['loc'], - $source['file'], - $source['line'] - ) - ); - } - } -} -. - * 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 Sebastian Bergmann nor the names of his - * 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 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. - * - * @package phpdcd - * @author Sebastian Bergmann - * @copyright 2009-2014 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @since File available since Release 1.0.0 - */ - -namespace SebastianBergmann\PHPDCD; - -/** - * PHPDCD code analyser to be used on a body of source code. - * - * Analyses given source code (files) for declared and called functions - * and aggregates this information. - * - * @author Sebastian Bergmann - * @copyright 2009-2014 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @version Release: @package_version@ - * @link http://github.com/sebastianbergmann/phpdcd/tree - * @since Class available since Release 1.0.0 - */ -class Analyser -{ - /** - * Function declaration mapping: maps declared function name to file and line number - * TODO: make mapping to file and line number optional for memory usage reduction? - * @var array - */ - private $functionDeclarations = array(); - - /** - * Function call mapping: maps "callees" to array of "callers" - * TODO: make callers array optional for memory usage reduction? - * @var array - */ - private $functionCalls = array(); - - /** - * Class hierarchy data: maps classes to their direct parent. - * @var array - */ - private $classParents = array(); - - - public function getFunctionDeclarations() - { - return $this->functionDeclarations; - } - - /** - * Get function calls we detected - * @return array maps "callees" to array of "callers" - */ - public function getFunctionCalls() - { - // Resolve parent(class) calls if possible - foreach ($this->functionCalls as $call => $callers) { - if (strpos($call, 'parent(') === 0) { - preg_match('/parent\\((.*?)\\)::(.*)/', $call, $matches); - $class = $matches[1]; - $method = $matches[2]; - foreach ($this->getAncestors($class) as $ancestor) { - $resolvedCall = $ancestor . '::' . $method; - if (isset($this->functionDeclarations[$resolvedCall])) { - $this->functionCalls[$resolvedCall] = $callers; - // TODO: also remove unresolved parent(class) entries? - break; - } - } - } - } - - return $this->functionCalls; - } - - /** - * Get array of a class's ancestors. - * @param $child - * @return array of ancestors - */ - public function getAncestors($child) - { - $ancestors = array(); - while (isset($this->classParents[$child])) { - $child = $this->classParents[$child]; - if (in_array($child, $ancestors)) { - $cycle = implode(' -> ', $ancestors) . ' -> ' . $child; - throw new \RuntimeException('Class hierarchy cycle detected: ' . $cycle); - } - $ancestors[] = $child; - } - return $ancestors; - } - - /** - * Build a mapping between parent classes and all their descendants - * @return array maps each parent classes to array of its subclasses, subsubclasses, ... - */ - public function getClassDescendants() - { - $descendants = array(); - foreach ($this->classParents as $child => $parent) { - // Direct child - $descendants[$parent][] = $child; - // Store child for further ancestors - $ancestor = $parent; - while (isset($this->classParents[$ancestor])) { - $ancestor = $this->classParents[$ancestor]; - $descendants[$ancestor][] = $child; - } - } - return $descendants; - } - - /** - * Analyse a PHP source code file for defined and called functions. - * @param $filename - */ - public function analyseFile($filename) - { - $sourceCode = file_get_contents($filename); - return $this->analyseSourceCode($sourceCode, $filename); - } - - /** - * Analyse PHP source code for defined and called functions - * - * @param string $sourceCode source code. - * @param string $filename optional file name to use in declaration definition - */ - public function analyseSourceCode($sourceCode, $filename = 'undefined') - { - - $blocks = array(); - $currentBlock = null; - $currentClass = ''; - $currentFunction = ''; - $currentInterface = ''; - $namespace = ''; - $variables = array(); - - $tokens = new \PHP_Token_Stream($sourceCode); - $count = count($tokens); - - for ($i = 0; $i < $count; $i++) { - if ($tokens[$i] instanceof \PHP_Token_NAMESPACE) { - $namespace = $tokens[$i]->getName(); - } elseif ($tokens[$i] instanceof \PHP_Token_CLASS) { - $currentClass = $tokens[$i]->getName(); - - if ($namespace != '') { - $currentClass = $namespace . '\\' . $currentClass; - } - - $currentBlock = $currentClass; - } elseif ($tokens[$i] instanceof \PHP_Token_EXTENDS - && $tokens[$i+2] instanceof \PHP_Token_STRING) { - // Store parent-child class relationship. - $this->classParents[$currentClass] = (string)$tokens[$i+2]; - } elseif ($tokens[$i] instanceof \PHP_Token_INTERFACE) { - $currentInterface = $tokens[$i]->getName(); - - if ($namespace != '') { - $currentInterface = $namespace . '\\' . $currentClass; - } - - $currentBlock = $currentInterface; - } elseif ($tokens[$i] instanceof \PHP_Token_NEW && - !$tokens[$i+2] instanceof \PHP_Token_VARIABLE) { - if ($tokens[$i-1] instanceof \PHP_Token_EQUAL) { - $j = -1; - } elseif ($tokens[$i-1] instanceof \PHP_Token_WHITESPACE && - $tokens[$i-2] instanceof \PHP_Token_EQUAL) { - $j = -2; - } else { - continue; - } - - if ($tokens[$i+$j-1] instanceof \PHP_Token_WHITESPACE) { - $j--; - } - - if ($tokens[$i+$j-1] instanceof \PHP_Token_VARIABLE) { - $name = (string)$tokens[$i+$j-1]; - $variables[$name] = (string)$tokens[$i+2]; - } elseif ($tokens[$i+$j-1] instanceof \PHP_Token_STRING && - $tokens[$i+$j-2] instanceof \PHP_Token_OBJECT_OPERATOR && - $tokens[$i+$j-3] instanceof \PHP_Token_VARIABLE) { - $name = (string)$tokens[$i+$j-3] . '->' . - (string)$tokens[$i+$j-1]; - $variables[$name] = (string)$tokens[$i+2]; - } - } elseif ($tokens[$i] instanceof \PHP_Token_FUNCTION) { - if ($currentInterface != '') { - continue; - } - - // Ignore abstract methods. - for ($j=1; $j<=4; $j++) { - if (isset($tokens[$i-$j]) && - $tokens[$i-$j] instanceof \PHP_Token_ABSTRACT) { - continue 2; - } - } - - $function = $tokens[$i]->getName(); - - if ($function == 'anonymous function') { - continue; - } - - $variables = $tokens[$i]->getArguments(); - - if ($currentClass != '') { - $function = $currentClass . '::' . $function; - $variables['$this'] = $currentClass; - } - - $currentFunction = $function; - $currentBlock = $currentFunction; - - $this->functionDeclarations[$function] = array( - 'file' => $filename, 'line' => $tokens[$i]->getLine() - ); - } elseif ($tokens[$i] instanceof \PHP_Token_OPEN_CURLY - || $tokens[$i] instanceof \PHP_Token_CURLY_OPEN - || $tokens[$i] instanceof \PHP_Token_DOLLAR_OPEN_CURLY_BRACES ) { - array_push($blocks, $currentBlock); - $currentBlock = null; - } elseif ($tokens[$i] instanceof \PHP_Token_CLOSE_CURLY) { - $block = array_pop($blocks); - - if ($block == $currentClass) { - $currentClass = ''; - } elseif ($block == $currentFunction) { - $this->functionDeclarations[$currentFunction]['loc'] = - $tokens[$i]->getLine() - $this->functionDeclarations[$currentFunction]['line'] + 1; - $currentFunction = ''; - $variables = array(); - } - } elseif ($tokens[$i] instanceof \PHP_Token_OPEN_BRACKET) { - for ($j = 1; $j <= 4; $j++) { - if (isset($tokens[$i-$j]) && - $tokens[$i-$j] instanceof \PHP_Token_FUNCTION) { - continue 2; - } - } - - if ($tokens[$i-1] instanceof \PHP_Token_STRING) { - $j = -1; - } elseif ($tokens[$i-1] instanceof \PHP_Token_WHITESPACE && - $tokens[$i-2] instanceof \PHP_Token_STRING) { - $j = -2; - } else { - continue; - } - - $function = (string)$tokens[$i+$j]; - $lookForNamespace = true; - - if (isset($tokens[$i+$j-2]) && - $tokens[$i+$j-2] instanceof \PHP_Token_NEW) { - $function .= '::__construct'; - } elseif ((isset($tokens[$i+$j-1]) && - $tokens[$i+$j-1] instanceof \PHP_Token_OBJECT_OPERATOR) || - (isset($tokens[$i+$j-2]) && - $tokens[$i+$j-2] instanceof \PHP_Token_OBJECT_OPERATOR)) { - $_function = $tokens[$i+$j]; - $lookForNamespace = false; - - if ($tokens[$i+$j-1] instanceof \PHP_Token_OBJECT_OPERATOR) { - $j -= 2; - } else { - $j -= 3; - } - - if ($tokens[$i+$j] instanceof \PHP_Token_VARIABLE) { - if (isset($variables[(string)$tokens[$i+$j]])) { - $function = $variables[(string)$tokens[$i+$j]] . - '::' . $_function; - } else { - $function = '::' . $_function; - } - } elseif ($tokens[$i+$j] instanceof \PHP_Token_STRING && - $tokens[$i+$j-1] instanceof \PHP_Token_OBJECT_OPERATOR && - $tokens[$i+$j-2] instanceof \PHP_Token_VARIABLE) { - $variable = (string)$tokens[$i+$j-2] . '->' . - (string)$tokens[$i+$j]; - - if (isset($variables[$variable])) { - $function = $variables[$variable] . '::' . - $_function; - } - } - } elseif ($tokens[$i+$j-1] instanceof \PHP_Token_DOUBLE_COLON) { - $class = (string)$tokens[$i+$j-2]; - - if ($class == 'self' || $class == 'static') { - $class = $currentClass; - } elseif ($class == 'parent') { - $class = "parent($currentClass)"; - } - - $function = $class . '::' . $function; - $j -= 2; - } - - if ($lookForNamespace) { - while ($tokens[$i+$j-1] instanceof \PHP_Token_NS_SEPARATOR) { - $function = $tokens[$i+$j-2] . '\\' . $function; - $j -= 2; - } - } - - if (!isset($this->functionCalls[$function])) { - $this->functionCalls[$function] = array(); - } - $this->functionCalls[$function][] = $currentFunction; - } - } - } -} -. - * 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 Sebastian Bergmann nor the names of his - * 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 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. - * - * @package phpdcd - * @author Sebastian Bergmann - * @copyright 2009-2014 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @since File available since Release 1.0.0 - */ - -namespace SebastianBergmann\PHPDCD; - -/** - * PHPDCD detector for unused functions. - * - * @author Sebastian Bergmann - * @copyright 2009-2014 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @version Release: @package_version@ - * @link http://github.com/sebastianbergmann/phpdcd/tree - * @since Class available since Release 1.0.0 - */ -class Detector -{ - /** - * @param array $files - * @param boolean $recursive - * @return array - */ - public function detectDeadCode(array $files, $recursive = false) - { - - // Analyse files and collect declared and called functions - $analyser = new Analyser(); - foreach ($files as $file) { - $analyser->analyseFile($file); - } - - // Get info on declared and called functions. - $declared = $analyser->getFunctionDeclarations(); - $called = $analyser->getFunctionCalls(); - $classDescendants = $analyser->getClassDescendants(); - - // Search for declared, unused functions. - $result = array(); - foreach ($declared as $name => $source) { - if (!isset($called[$name])) { - // Unused function/method at first sight. - $used = false; - // For methods: check calls from subclass instances as well - $parts = explode('::', $name); - if (count($parts) == 2) { - $class = $parts[0]; - $subclasses = isset($classDescendants[$class]) ? $classDescendants[$class] : array(); - foreach ($subclasses as $subclass) { - if (isset($called[$subclass . '::' . $parts[1]])) { - $used = true; - break; - } - } - } - - if (!$used) { - $result[$name] = $source; - } - } - } - - if ($recursive) { - $done = false; - - while (!$done) { - $done = true; - - foreach ($called as $callee => $callers) { - $_called = false; - - foreach ($callers as $caller) { - if (!isset($result[$caller])) { - $_called = true; - break; - } - } - - if (!$_called) { - if (isset($declared[$callee])) { - $result[$callee] = $declared[$callee]; - } - - $done = false; - - unset($called[$callee]); - } - } - } - } - - ksort($result); - - return $result; - } -} -. - * 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 Sebastian Bergmann nor the names of his - * 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 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. - * - * @package phpdcd - * @author Sebastian Bergmann - * @copyright 2009-2014 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @since File available since Release 1.0.0 - */ - -namespace SebastianBergmann\PHPDCD\CLI; - -use SebastianBergmann\PHPDCD\Detector; -use SebastianBergmann\PHPDCD\Log\Text; -use SebastianBergmann\FinderFacade\FinderFacade; -use Symfony\Component\Console\Command\Command as AbstractCommand; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\InputOption; -use Symfony\Component\Console\Output\OutputInterface; - -/** - * @author Sebastian Bergmann - * @copyright 2009-2014 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @link http://github.com/sebastianbergmann/phpdcd/tree - * @since Class available since Release 1.0.0 - */ -class Command extends AbstractCommand -{ - /** - * Configures the current command. - */ - protected function configure() - { - $this->setName('phpdcd') - ->setDefinition( - array( - new InputArgument( - 'values', - InputArgument::IS_ARRAY - ) - ) - ) - ->addOption( - 'names', - null, - InputOption::VALUE_REQUIRED, - 'A comma-separated list of file names to check', - array('*.php') - ) - ->addOption( - 'names-exclude', - null, - InputOption::VALUE_REQUIRED, - 'A comma-separated list of file names to exclude', - array() - ) - ->addOption( - 'exclude', - null, - InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, - 'Exclude a directory from code analysis' - ) - ->addOption( - 'recursive', - null, - InputOption::VALUE_NONE, - 'Report code as dead if it is only called by dead code' - ); - } - - /** - * Executes the current command. - * - * @param InputInterface $input An InputInterface instance - * @param OutputInterface $output An OutputInterface instance - * - * @return null|integer null or 0 if everything went fine, or an error code - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $finder = new FinderFacade( - $input->getArgument('values'), - $input->getOption('exclude'), - $this->handleCSVOption($input, 'names'), - $this->handleCSVOption($input, 'names-exclude') - ); - - $files = $finder->findFiles(); - - if (empty($files)) { - $output->writeln('No files found to scan'); - exit(1); - } - - $quiet = $output->getVerbosity() == OutputInterface::VERBOSITY_QUIET; - - $detector = new Detector; - - $result = $detector->detectDeadCode( - $files, - $input->getOption('recursive') - ); - - if (!$quiet) { - $printer = new Text; - $printer->printResult($output, $result); - - $output->writeln(\PHP_Timer::resourceUsage()); - } - } - - /** - * @param Symfony\Component\Console\Input\InputOption $input - * @param string $option - * @return array - */ - private function handleCSVOption(InputInterface $input, $option) - { - $result = $input->getOption($option); - - if (!is_array($result)) { - $result = explode(',', $result); - array_map('trim', $result); - } - - return $result; - } -} -. - * 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 Sebastian Bergmann nor the names of his - * 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 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. - * - * @package phpdcd - * @author Sebastian Bergmann - * @copyright 2009-2014 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @since File available since Release 1.0.0 - */ - -namespace SebastianBergmann\PHPDCD\CLI; - -use SebastianBergmann\Version; -use Symfony\Component\Console\Application as AbstractApplication; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\ArgvInput; -use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\Console\Input\ArrayInput; - -/** - * TextUI frontend for PHPDCD. - * - * @author Sebastian Bergmann - * @copyright 2009-2014 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @link http://github.com/sebastianbergmann/phpdcd/tree - * @since Class available since Release 1.0.0 - */ -class Application extends AbstractApplication -{ - public function __construct() - { - $version = new Version('1.0.2', dirname(dirname(__DIR__))); - parent::__construct('phpdcd', $version->getVersion()); - } - - /** - * Gets the name of the command based on input. - * - * @param InputInterface $input The input interface - * - * @return string The command name - */ - protected function getCommandName(InputInterface $input) - { - return 'phpdcd'; - } - - /** - * Gets the default commands that should always be available. - * - * @return array An array of default Command instances - */ - protected function getDefaultCommands() - { - $defaultCommands = parent::getDefaultCommands(); - - $defaultCommands[] = new Command; - - return $defaultCommands; - } - - /** - * Overridden so that the application doesn't expect the command - * name to be the first argument. - */ - public function getDefinition() - { - $inputDefinition = parent::getDefinition(); - $inputDefinition->setArguments(); - - return $inputDefinition; - } - - /** - * Runs the current application. - * - * @param InputInterface $input An Input instance - * @param OutputInterface $output An Output instance - * - * @return integer 0 if everything went fine, or an error code - */ - public function doRun(InputInterface $input, OutputInterface $output) - { - if (!$input->hasParameterOption('--quiet')) { - $output->write( - sprintf( - "phpdcd %s by Sebastian Bergmann.\n\n", - $this->getVersion() - ) - ); - } - - if ($input->hasParameterOption('--version') || - $input->hasParameterOption('-V')) { - exit; - } - - if (!$input->getFirstArgument()) { - $input = new ArrayInput(array('--help')); - } - - parent::doRun($input, $output); - } -} -sebastian/phpdcd: 1.0.2 -phpunit/php-timer: 1.0.5 -phpunit/php-token-stream: 1.2.2 -sebastian/finder-facade: 1.1.0 -sebastian/version: 1.0.3 -symfony/console: v2.4.3 -symfony/finder: v2.4.3 -theseer/fdomdocument: 1.5.0 -. - * 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 Sebastian Bergmann nor the names of his - * 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 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. - * - * @package Version - * @author Sebastian Bergmann - * @copyright 2013-2014 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @link http://github.com/sebastianbergmann/version - * @since File available since Release 1.0.0 - */ - -namespace SebastianBergmann; - -/** - * @package Version - * @author Sebastian Bergmann - * @copyright 2013-2014 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @link http://github.com/sebastianbergmann/version - * @since Class available since Release 1.0.0 - */ -class Version -{ - private $path; - private $release; - private $version; - - /** - * @param string $release - * @param string $path - */ - public function __construct($release, $path) - { - $this->release = $release; - $this->path = $path; - } - - /** - * @return string - */ - public function getVersion() - { - if ($this->version === null) { - if (count(explode('.', $this->release)) == 3) { - $this->version = $this->release; - } else { - $this->version = $this->release . '-dev'; - } - - $git = $this->getGitInformation($this->path); - - if ($git) { - if (count(explode('.', $this->release)) == 3) { - $this->version = $git; - } else { - $git = explode('-', $git); - - $this->version = $this->release . '-' . $git[2]; - } - } - } - - return $this->version; - } - - /** - * @param string $path - * @return boolean|string - */ - private function getGitInformation($path) - { - if (!is_dir($path . DIRECTORY_SEPARATOR . '.git')) { - return false; - } - - $dir = getcwd(); - chdir($path); - $result = @exec('git describe --tags 2>&1', $output, $returnCode); - chdir($dir); - - if ($returnCode !== 0) { - return false; - } - - return $result; - } -} -. - * 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 Sebastian Bergmann nor the names of his - * 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 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. - * - * @package FinderFacade - * @author Sebastian Bergmann - * @copyright 2012-2013 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @since File available since Release 1.0.0 - */ - -namespace SebastianBergmann\FinderFacade -{ - use Symfony\Component\Finder\Finder; - - /** - * Convenience wrapper for Symfony's Finder component. - * - * @author Sebastian Bergmann - * @copyright 2012-2013 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @version Release: @package_version@ - * @link http://github.com/sebastianbergmann/finder-facade/tree - * @since Class available since Release 1.0.0 - */ - class FinderFacade - { - /** - * @var array - */ - protected $items = array(); - - /** - * @var array - */ - protected $excludes = array(); - - /** - * @var array - */ - protected $names = array(); - - - /** - * @var array - */ - protected $notNames = array(); - - /** - * @param array $items - * @param array $excludes - * @param array $names - * @param array $notNames - */ - public function __construct(array $items = array(), array $excludes = array(), array $names = array(), array $notNames = array()) - { - $this->items = $items; - $this->excludes = $excludes; - $this->names = $names; - $this->notNames = $notNames; - } - - /** - * @return array - */ - public function findFiles() - { - $files = array(); - $finder = new Finder; - $iterate = FALSE; - - foreach ($this->items as $item) { - if (!is_file($item)) { - $finder->in($item); - $iterate = TRUE; - } - - else { - $files[] = realpath($item); - } - } - - foreach ($this->excludes as $exclude) { - $finder->exclude($exclude); - } - - foreach ($this->names as $name) { - $finder->name($name); - } - - foreach ($this->notNames as $notName) { - $finder->notName($notName); - } - - if ($iterate) { - foreach ($finder as $file) { - $files[] = $file->getRealpath(); - } - } - - return $files; - } - - /** - * @param string $file - */ - public function loadConfiguration($file) - { - $configuration = new Configuration($file); - $configuration = $configuration->parse(); - - $this->items = $configuration['items']; - $this->excludes = $configuration['excludes']; - $this->names = $configuration['names']; - $this->notNames = $configuration['notNames']; - } - } -} -. - * 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 Sebastian Bergmann nor the names of his - * 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 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. - * - * @package FinderFacade - * @author Sebastian Bergmann - * @copyright 2012-2013 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @since File available since Release 1.0.0 - */ - -namespace SebastianBergmann\FinderFacade -{ - use TheSeer\fDOM\fDOMDocument; - - /** - * - * - * - * /path/to/directory - * /path/to/file - * - * /path/to/directory - * *.php - * - * - * - * @author Sebastian Bergmann - * @copyright 2012-2013 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @version Release: @package_version@ - * @link http://github.com/sebastianbergmann/finder-facade/tree - * @since Class available since Release 1.0.0 - */ - class Configuration - { - /** - * @var string - */ - protected $basePath; - - /** - * @var fDOMDocument - */ - protected $xml; - - /** - * @param string $file - */ - public function __construct($file) - { - $this->basePath = dirname($file); - - $this->xml = new fDOMDocument; - $this->xml->load($file); - } - - /** - * @param string $xpath - * @return array - */ - public function parse($xpath = '') - { - $result = array( - 'items' => array(), 'excludes' => array(), 'names' => array(), 'notNames' => array() - ); - - foreach ($this->xml->getDOMXPath()->query($xpath . 'include/directory') as $item) { - $result['items'][] = $this->toAbsolutePath($item->nodeValue); - } - - foreach ($this->xml->getDOMXPath()->query($xpath . 'include/file') as $item) { - $result['items'][] = $this->toAbsolutePath($item->nodeValue); - } - - foreach ($this->xml->getDOMXPath()->query($xpath . 'exclude') as $exclude) { - $result['excludes'][] = $exclude->nodeValue; - } - - foreach ($this->xml->getDOMXPath()->query($xpath . 'name') as $name) { - $result['names'][] = $name->nodeValue; - } - - foreach ($this->xml->getDOMXPath()->query($xpath . 'notName') as $name) { - $result['notNames'][] = $name->nodeValue; - } - - return $result; - } - - /** - * @param string $path - * @return string - */ - protected function toAbsolutePath($path) - { - // Check whether the path is already absolute. - if ($path[0] === '/' || $path[0] === '\\' || - (strlen($path) > 3 && ctype_alpha($path[0]) && - $path[1] === ':' && ($path[2] === '\\' || $path[2] === '/'))) { - return $path; - } - - // Check whether a stream is used. - if (strpos($path, '://') !== FALSE) { - return $path; - } - - return $this->basePath . DIRECTORY_SEPARATOR . $path; - } - } -} - - * 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 Arne Blankerts nor the names of 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 HOLDER ORCONTRIBUTORS - * 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. - * - * - * @category PHP - * @package TheSeer\fDOM - * @author Arne Blankerts - * @copyright Arne Blankerts , All rights reserved. - * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @link http://github.com/theseer/fdomdocument - * - */ - -namespace TheSeer\fDOM { - - /** - * fDomElement - * - * @category PHP - * @package TheSeer\fDOM - * @author Arne Blankerts - * @access public - * - */ - class fDOMElement extends \DOMElement { - - public function __toString() { - return $this->C14N(); - } - - /** - * Forward to fDomDocument->query() - * - * @param string $q XPath to use - * @param \DOMNode $ctx \DOMNode to overwrite context - * @param boolean $registerNodeNS Register flag pass thru - * - * @return \DomNodeList - */ - public function query($q, \DOMNode $ctx = null, $registerNodeNS = true) { - return $this->ownerDocument->query($q, $ctx ? $ctx : $this, $registerNodeNS); - } - - /** - * Forward to fDomDocument->queryOne() - * - * @param string $q XPath to use - * @param \DOMNode $ctx (optional) \DOMNode to overwrite context - * @param boolean $registerNodeNS Register flag pass thru - * - * @return mixed - */ - public function queryOne($q, \DOMNode $ctx = null, $registerNodeNS = true) { - return $this->ownerDocument->queryOne($q, $ctx ? $ctx : $this, $registerNodeNS); - } - - /** - * Forward to fDomDocument->select() - * - * @param string $selector A CSS Level 3 Selector string - * @param \DOMNode $ctx - * @param bool $registerNodeNS - * - * @return \DOMNodeList - */ - - public function select($selector, \DOMNode $ctx = null, $registerNodeNS = true) { - return $this->ownerDocument->select($selector, $ctx, $registerNodeNS); - } - - /** - * Parse and append XML String to node - * - * @param String $str string to process - * - * @return fDomDocumentFragment Reference to the created Fragment - */ - public function appendXML($str) { - $frag = $this->ownerDocument->createDocumentFragment(); - $frag->appendXML($str); - $this->appendChild($frag); - return $frag; - } - - /** - * Create a new element and append it - * - * @param string $name Name of not element to create - * @param string $content Optional content to be set - * - * @return fDOMElement Reference to created fDOMElement - */ - public function appendElement($name, $content = null) { - $node = $this->ownerDocument->createElement($name, $content); - $this->appendChild($node); - return $node; - } - - /** - * Create a new element in given namespace and append it - * - * @param string $ns Namespace of node to create - * @param string $name Name of not element to create - * @param string $content Optional content to be set - * - * @return fDOMElement Reference to created fDOMElement - */ - public function appendElementNS($ns, $name, $content = null) { - $node = $this->ownerDocument->createElementNS($ns, $name, $content); - $this->appendChild($node); - return $node; - } - - /** - * Create a new element in given namespace and append it - * - * @param string $prefix Namespace prefix for node to create - * @param string $name Name of not element to create - * @param string $content Optional content to be set - * - * @return fDOMElement Reference to created fDOMElement - */ - public function appendElementPrefix($prefix, $name, $content = null) { - $node = $this->ownerDocument->createElementPrefix($prefix, $name, $content); - $this->appendChild($node); - return $node; - } - - /** - * Create a new text node and append it - * - * @param string $content Text content to be added - * - * @return \DOMText - */ - public function appendTextNode($content) { - $text = $this->ownerDocument->createTextNode($content); - $this->appendChild($text); - return $text; - } - - /** - * Wrapper to DomElement->getAttribute with default value option - * - * Note: A set but emptry attribute does NOT trigger use of the default - * - * @param string $attr Attribute to access - * @param string $default Default value to use if the attribute is not set - * - * @return string - */ - public function getAttribute($attr, $default='') { - return $this->hasAttribute($attr) ? parent::getAttribute($attr) : $default; - } - - /** - * Wrapper to DomElement->getAttributeNS with default value option - * - * Note: A set but empty attribute does NOT trigger use of the default - * - * @param string $ns Namespace of attribute - * @param string $attr Attribute to access - * @param string $default Default value to use if the attribute is not set - * - * @return string - */ - public function getAttributeNS($ns, $attr, $default='') { - return $this->hasAttributeNS($ns, $attr) ? parent::getAttributeNS($ns, $attr) : $default; - } - - /** - * Wrapper to DOMElement::setAttribute with additional entities support - * - * @param string $attr Attribute name to set - * @param string $value Value to set attribute to - * @param bool $keepEntitites Flag to signale if entities should be kept - * - * @throws fDOMException - * - * @return DOMAttr - * - * @see DOMElement::setAttribute() - */ - public function setAttribute($attr, $value, $keepEntities=false) { - if ($keepEntities === true) { - $attrNode = $this->ownerDocument->createAttribute($attr); - if (!$attrNode) { - throw new fDOMException("Setting attribute '$attr' failed.", fDOMException::SetFailedError); - } - $attrNode->value = $value; - $this->appendChild($attrNode); - return $attrNode; - } - return parent::setAttribute($attr, $value); - } - - /** - * Wrapper to namespace aware DOMElement::setAttributeNS with additional entities support - * - * @param string $ns namespace attribute should be in - * @param string $attr Attribute name to set - * @param string $value Value to set attribute to - * @param boolean $keepEntitites Flag to signale if entities should be kept - * - * @return \DOMAttr - * - * @see DOMElement::setAttribute() - */ - public function setAttributeNS($ns, $attr, $value, $keepEntities=false) { - if ($keepEntities === true) { - $attrNode = $this->ownerDocument->createAttributeNS($ns, $attr); - if (!$attrNode) { - throw new fDOMException("Setting attribute '$attr' failed.", fDOMException::SetFailedError); - } - $attrNode->value = $value; - $this->appendChild($attrNode); - return $attrNode; - } - return parent::setAttributeNS($ns, $attr, $value); - } - - /** - * Helper to add multiple attributes to an element - * - * @param array $attr Attributes to add as key-value pair - * @param bool $keepEntities Flag wether to keep entities - * - * @return array List with references to created DOMAttr - */ - public function setAttributes(array $attr, $keepEntities=false) { - $attList = array(); - foreach($attr as $name => $value) { - $attList[] = $this->setAttribute($name, $value, $keepEntities); - } - return $attList; - } - - /** - * Helper to add multiple attributes with the given namespace and prefix - * - * @param string $ns Namespace of attribute - * @param string $prefix Namespace prefix for attribute to create - * @param array $attr Attributes to add - * @param bool $keepEntities Flag wether to keep entities - * - * @return void - */ - public function setAttributesNS($ns, $prefix, array $attr, $keepEntities=false) { - foreach($attr as $name => $value) { - $this->setAttributeNS($ns, $prefix.':'.$name, $value, $keepEntities); - } - } - - /** - * Helper method to get children by name - * - * @param string $tagName tagname to search for - * - * @return DomNodeList - */ - public function getChildrenByTagName($tagName) { - return $this->query("*[local-name()='$tagName']"); - } - - /** - * Helper method to get children by name and namespace - * - * @param string $ns namespace nodes have to be in - * @param string $tagName tagname to search for - * - * @return DomNodeList - */ - public function getChildrenByTagNameNS($ns, $tagName) { - return $this->query("*[local-name()='$tagName' and namespace-uri()='$ns']"); - } - - /** - * Check if the given node is in the same document - * - * @param \DomNode $node Node to compare with - * - * @return boolean true on match, false if they differ - * - */ - public function inSameDocument(\DomNode $node) { - return $this->ownerDocument->inSameDocument($node); - } - - /** - * Wrapper to DomDocument::saveXML() with current node as context - * - * @return string - */ - public function saveXML() { - return $this->ownerDocument->saveXML($this); - } - - /** - * Wrapper to DomDocument::saveHTML() with current node as context - * - * @return string - */ - public function saveHTML() { - return $this->ownerDocument->saveHTML($this); - } - - } // fDOMElement - -} - - * 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 Arne Blankerts nor the names of 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 HOLDER ORCONTRIBUTORS - * 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. - * - * - * @category PHP - * @package TheSeer\fDOM - * @author Arne Blankerts - * @copyright Arne Blankerts , All rights reserved. - * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @link http://github.com/theseer/fdomdocument - * - */ - -namespace TheSeer\fDOM { - - /** - * fDomNode - * - * @category PHP - * @package TheSeer\fDOM - * @author Arne Blankerts - * @access public - * - */ - class fDOMNode extends \DOMNode { - - public function __toString() { - return $this->C14N(); - } - - /** - * Forward to fDomDocument->query() - * - * @param string $q XPath to use - * @param \DOMNode $ctx \DOMNode to overwrite context - * @param boolean $registerNodeNS Register flag pass thru - * - * @return \DomNodeList - */ - public function query($q, \DOMNode $ctx = null, $registerNodeNS = true) { - return $this->ownerDocument->query($q, $ctx ? $ctx : $this, $registerNodeNS); - } - - /** - * Forward to fDomDocument->queryOne() - * - * @param string $q XPath to use - * @param \DOMNode $ctx (optional) \DOMNode to overwrite context - * @param boolean $registerNodeNS Register flag pass thru - * - * @return mixed - */ - public function queryOne($q, \DOMNode $ctx = null, $registerNodeNS = true) { - return $this->ownerDocument->queryOne($q, $ctx ? $ctx : $this, $registerNodeNS); - } - - /** - * Forward to fDomDocument->select() - * - * @param string $selector A CSS Level 3 Selector string - * @param \DOMNode $ctx - * @param bool $registerNodeNS - * - * @return \DOMNodeList - */ - - public function select($selector, \DOMNode $ctx = null, $registerNodeNS = true) { - return $this->ownerDocument->select($selector, $ctx, $registerNodeNS); - } - - /** - * Check if the given node is in the same document - * - * @param \DomNode $node Node to compare with - * - * @return boolean true on match, false if they differ - * - */ - public function inSameDocument(\DOMNode $node) { - return $this->ownerDocument->inSameDocument($node); - } - - /** - * Wrapper to DomDocument::saveXML() with current node as context - * - * @return string - */ - public function saveXML() { - return $this->ownerDocument->saveXML($this); - } - - /** - * Wrapper to DomDocument::saveHTML() with current node as context - * - * @return string - */ - public function saveHTML() { - return $this->ownerDocument->saveHTML($this); - } - - - - } // fDOMNode - -} - - * 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 Arne Blankerts nor the names of 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 HOLDER ORCONTRIBUTORS - * 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. - * - * - * @category PHP - * @package TheSeer\fDOM - * @author Arne Blankerts - * @copyright Arne Blankerts , All rights reserved. - * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @link http://github.com/theseer/fdomdocument - * - */ - -namespace TheSeer\fDOM { - - /** - * Class XPathQuery - * - * @package TheSeer\fDOM - */ - class XPathQuery { - - /** - * @var string - */ - private $query; - - /** - * Key-value Map for bound values - * - * @var array - */ - private $values = array(); - - /** - * @param string $query - */ - public function __construct($query) { - $this->setQuery($query); - } - - /** - * @param string $query - */ - private function setQuery($query) { - $this->query = $query; - $res = preg_match_all('/(:(\w*))/', $query, $matches); - if ($res > 0) { - $this->values = array_fill_keys($matches[2], ''); - } - } - - public function getKeys() { - return array_keys($this->values); - } - - public function bind($key, $value) { - if (!array_key_exists($key, $this->values)) { - throw new XPathQueryException("'$key' not found in query'", XPathQueryException::KeyNotFound ); - } - $this->values[$key] = $value; - } - - public function generate(\DOMNode $ctx, array $values = NULL) { - return $this->buildQuery($this->getXPathObjectFor($ctx), $values); - } - - public function evaluate(\DOMNode $ctx, array $values = NULL, $registerNodeNS = TRUE) { - $xp = $this->getXPathObjectFor($ctx); - return $xp->evaluate($this->buildQuery($xp, $values), $ctx, $registerNodeNS); - } - - public function query(\DOMNode $ctx, array $values = NULL, $registerNodeNS = TRUE) { - $xp = $this->getXPathObjectFor($ctx); - return $xp->evaluate($this->buildQuery($xp, $values), $ctx, $registerNodeNS); - } - - public function queryOne(\DOMNode $ctx, array $values = NULL, $registerNodeNS = TRUE) { - $xp = $this->getXPathObjectFor($ctx); - return $xp->queryOne($this->buildQuery($xp, $values), $ctx, $registerNodeNS); - } - - private function getXPathObjectFor(\DOMNode $ctx) { - $dom = $ctx instanceof \DOMDocument ? $ctx : $ctx->ownerDocument; - if ($dom instanceOf fDOMDocument) { - return $dom->getDOMXPath(); - } - return new fDOMXPath($dom); - } - - private function buildQuery(fDOMXPath $xp, array $values = NULL) { - $backup = $this->values; - if (count($values) > 0) { - foreach($values as $k => $v) { - $this->bind($k, $v); - } - } - $query = $xp->prepare($this->query, $this->values); - $this->values = $backup; - return $query; - } - } - -} -translator = $translator; - } - - /** - * @param $selector - * - * @return string - */ - public function apply($selector) { - return preg_replace_callback( - '/([a-zA-Z0-9\_\-\*]+):not\(([^\)]*)\)/', - array($this, 'callback'), - $selector - ); - } - - private function callback(array $matches) { - $subresult = preg_replace( - '/^[^\[]+\[([^\]]*)\].*$/', - '$1', - $this->translator->translate($matches[2]) - ); - return $matches[1] . '[not(' . $subresult . ')]'; - } - - } - -} - - * 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 Arne Blankerts nor the names of 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 HOLDER ORCONTRIBUTORS - * 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. - * - * - * @category PHP - * @package TheSeer\fDOM - * @author Arne Blankerts - * @copyright Arne Blankerts , All rights reserved. - * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @link http://github.com/theseer/fdomdocument - * - */ - -namespace TheSeer\fDOM\CSS { - - /** - * Class Translator - * - * The regular expressions used in this class are heavily inspired by and mostly adopted from - * the css2xpath.js code by Andrea Giammarchi (http://code.google.com/p/css2xpath/). - * The JavaScript version (css2xpath.js) is licensed under the MIT License - * - */ - class Translator { - - /** - * @var array - */ - private $rules; - - /** - * @param string $selector A CSS Selector string - * - * @return string - */ - public function translate($selector) { - foreach($this->getRules() as $rule) { - /** @var RuleInterface $rule */ - $selector = $rule->apply($selector); - } - return '//' . $selector; - } - - /** - * @return array - */ - private function getRules() { - if ($this->rules != NULL) { - return $this->rules; - } - - $this->rules = array( - - // prefix|name - new RegexRule('/([a-zA-Z0-9\_\-\*]+)\|([a-zA-Z0-9\_\-\*]+)/', '$1:$2'), - - // add @ for attribs - new RegexRule("/\[([^\]~\$\*\^\|\!]+)(=[^\]]+)?\]/", '[@$1$2]'), - - // multiple queries - new RegexRule("/\s*,\s*/", '|'), - - // , + ~ > - new RegexRule("/\s*(\+|~|>)\s*/", '$1'), - - //* ~ + > - new RegexRule("/([a-zA-Z0-9\_\-\*])~([a-zA-Z0-9\_\-\*])/", '$1/following-sibling::$2'), - new RegexRule("/([a-zA-Z0-9\_\-\*])\+([a-zA-Z0-9\_\-\*])/", '$1/following-sibling::*[1]/self::$2'), - new RegexRule("/([a-zA-Z0-9\_\-\*])>([a-zA-Z0-9\_\-\*])/", '$1/$2'), - - // all unescaped stuff escaped - new RegexRule("/\[([^=]+)=([^'|'][^\]]*)\]/", '[$1="$2"]'), - - // all descendant or self to // - new RegexRule("/(^|[^a-zA-Z0-9\_\-\*])(#|\.)([a-zA-Z0-9\_\-]+)/", '$1*$2$3'), - new RegexRule("/([\>\+\|\~\,\s])([a-zA-Z\*]+)/", '$1//$2'), - new RegexRule("/\s+\/\//", '//'), - - // :first-child - new RegexRule("/([a-zA-Z0-9\_\-\*]+):first-child/", '*[1]/self::$1'), - - // :last-child - new RegexRule("/([a-zA-Z0-9\_\-\*]+):last-child/", '$1[not(following-sibling::*)]'), - - // :only-child - new RegexRule("/([a-zA-Z0-9\_\-\*]+):only-child/", '*[last()=1]/self::$1'), - - // :empty - new RegexRule("/([a-zA-Z0-9\_\-\*]+):empty/", '$1[not(*) and not(normalize-space())]'), - - // :not - new NotRule($this), - - // :nth-child - new NthChildRule(), - - // :contains(selectors) - new RegexRule('/:contains\(([^\)]*)\)/', '[contains(string(.),"$1")]'), - - // |= attrib - new RegexRule("/\[([a-zA-Z0-9\_\-]+)\|=([^\]]+)\]/", '[@$1=$2 or starts-with(@$1,concat($2,"-"))]'), - - // *= attrib - new RegexRule("/\[([a-zA-Z0-9\_\-]+)\*=([^\]]+)\]/", '[contains(@$1,$2)]'), - - // ~= attrib - new RegexRule("/\[([a-zA-Z0-9\_\-]+)~=([^\]]+)\]/", '[contains(concat(" ",normalize-space(@$1)," "),concat(" ",$2," "))]'), - - // ^= attrib - new RegexRule("/\[([a-zA-Z0-9\_\-]+)\^=([^\]]+)\]/", '[starts-with(@$1,$2)]'), - - // $= attrib - new DollarEqualRule(), - - // != attrib - new RegexRule("/\[([a-zA-Z0-9\_\-]+)\!=([^\]]+)\]/", '[not(@$1) or @$1!=$2]'), - - // ids and classes - new RegexRule("/#([a-zA-Z0-9\_\-]+)/", '[@id="$1"]'), - new RegexRule("/\.([a-zA-Z0-9\_\-]+)/", '[contains(concat(" ",normalize-space(@class)," ")," $1 ")]'), - - // normalize multiple filters - new RegexRule("/\]\[([^\]]+)/", ' and ($1)') - - - ); - return $this->rules; - } - } - -} -=0]/self::' . $matches[1]; - } - case 'odd': { - return $matches[1] . '[(count(preceding-sibling::*) + 1) mod 2=1]'; - } - default: { - $b = !isset($matches[2]) || empty($matches[2]) ? '0' : $matches[2]; - $b = preg_replace('/^([0-9]*)n.*?([0-9]*)$/', '$1+$2', $b); - $b = explode('+', $b); - if (!isset($b[1])) { - $b[1] = '0'; - } - return '*[(position()-' . $b[1] . ') mod ' . $b[0] . '=0 and position()>=' . $b[1] . ']/self::' . $matches[1]; - } - } - } - - } - -} -regex = $regex; - $this->replacement = $replacement; - } - - /** - * @param $selector - * - * @return string - */ - public function apply($selector) { - return preg_replace($this->regex, $this->replacement, $selector); - } - - } - -} - - * 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 Arne Blankerts nor the names of 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 HOLDER ORCONTRIBUTORS - * 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. - * - * - * @category PHP - * @package TheSeer\fDOM - * @author Arne Blankerts - * @copyright Arne Blankerts , All rights reserved. - * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @link http://github.com/theseer/fdomdocument - * - */ - -namespace TheSeer\fDOM { - - /** - * fDOMXPath extension to PHP's DOMXPath. - * - * @category PHP - * @package TheSeer\fDOM - * @author Arne Blankerts - * @access public - * - */ - class fDOMXPath extends \DOMXPath { - - protected $doc; - - public function __construct(\DOMDocument $doc) { - parent::__construct($doc); - $this->doc = $doc; - } - - public function prepare($xpath, array $valueMap) { - if (count($valueMap)==0) { - return $xpath; - } - foreach($valueMap as $key => $value) { - $xpath = str_replace(':'.$key, $this->quote($value), $xpath); - } - return $xpath; - } - - public function query($q, \DOMNode $ctx = null, $registerNodeNS = true) { - libxml_clear_errors(); - if (version_compare(PHP_VERSION, '5.3.3', '<') || strpos(PHP_VERSION, 'hiphop')) { - $rc = parent::query($q, ($ctx instanceof \DOMNode) ? $ctx : $this->doc->documentElement); - } else { - $rc = parent::query($q, ($ctx instanceof \DOMNode) ? $ctx : $this->doc->documentElement, $registerNodeNS); - } - - if (libxml_get_last_error()) { - throw new fDOMException('evaluating xpath expression failed.', fDOMException::QueryError); - } - return $rc; - } - - public function evaluate($q, \DOMNode $ctx = null, $registerNodeNS = true) { - libxml_clear_errors(); - if (version_compare(PHP_VERSION, '5.3.3', '<') || strpos(PHP_VERSION, 'hiphop')) { - $rc = parent::evaluate($q, ($ctx instanceof \DOMNode) ? $ctx : $this->doc->documentElement); - } else { - $rc = parent::evaluate($q, ($ctx instanceof \DOMNode) ? $ctx : $this->doc->documentElement, $registerNodeNS); - } - if (libxml_get_last_error()) { - throw new fDOMException('evaluating xpath expression failed.', fDOMException::QueryError); - } - return $rc; - } - - public function queryOne($q, \DOMNode $ctx = null, $registerNodeNS = true) { - $rc = $this->evaluate($q, $ctx, $registerNodeNS); - if ($rc instanceof \DOMNodelist) { - return $rc->item(0); - } - return $rc; - } - - public function quote($str) { - if (strpos($str, '"') === false) { - return '"'.$str.'"'; - } - $parts = explode('"', $str); - return 'concat("' . join('",\'"\',"', $parts).'")'; - } - } -} - - * 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 Arne Blankerts nor the names of 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 HOLDER ORCONTRIBUTORS - * 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. - * - * - * @category PHP - * @package TheSeer\fDOM - * @author Arne Blankerts - * @copyright Arne Blankerts , All rights reserved. - * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @link http://github.com/theseer/fdomdocument - * - */ - -namespace TheSeer\fDOM { - - class XPathQueryException extends \Exception { - const KeyNotFound = 1; - } - -} - - * 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 Arne Blankerts nor the names of 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 HOLDER ORCONTRIBUTORS - * 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. - * - * @package fDOM - * @author Arne Blankerts - * @copyright Arne Blankerts , All rights reserved. - * @license BSD License - */ - -namespace TheSeer\fDOM { - - /** - * fDOMException - * - * @category PHP - * @package TheSeer\fDOM - * @author Arne Blankerts - * @access public - * - */ - class fDOMException extends \Exception { - - const LoadError = 1; - const ParseError = 2; - const SaveError = 3; - const QueryError = 4; - const RegistrationFailed = 5; - const NoDOMXPath = 6; - const UnboundPrefix = 7; - const SetFailedError = 8; - const NameInvalid = 9; - - /** - * List of libxml error objects - * - * @var array - */ - private $errorList; - - - /** - * Full Error message - * - * @var string - */ - private $fullMessage = null; - - - /** - * Short Error Message - * - * @var string - */ - private $shortMessage = null; - - - private static $fullMesageMode = true; - - /** - * Constructor - * - * @param string $message Exception message - * @param integer $code Exception code - * @param Exception $chain optional chained exception - * - */ - public function __construct($message, $code = 0, \Exception $chain = NULL) { - $this->shortMessage = $message; - $this->errorList = libxml_get_errors(); - libxml_clear_errors(); - parent :: __construct($message, $code, $chain); - - $this->fullMessage = $message."\n\n"; - - foreach ($this->errorList as $error) { - // hack, skip "attempt to load external pseudo error" - if ($error->code=='1543') { - continue; - } - - if (empty($error->file)) { - $this->fullMessage .= '[XML-STRING] '; - } else { - $this->fullMessage .= '['.$error->file.'] '; - } - - $this->fullMessage .= '[Line: '.$error->line.' - Column: '.$error->column.'] '; - - switch ($error->level) { - case LIBXML_ERR_WARNING: - $this->fullMessage .= "Warning $error->code: "; - break; - case LIBXML_ERR_ERROR: - $this->fullMessage .= "Error $error->code: "; - break; - case LIBXML_ERR_FATAL: - $this->fullMessage .= "Fatal Error $error->code: "; - break; - } - - $this->fullMessage .= str_replace("\n", '', $error->message)."\n"; - - if (self::$fullMesageMode) { - $this->message = $this->fullMessage; - } - - } - } - - /** - * Accessor to fullMessage - * - * @return string - */ - public function getFullMessage() { - return $this->fullMessage; - } - - /** - * Access to shortMessage - * - * @return string - */ - public function getShortMessage() { - return $this->shortMessage; - } - - /** - * Accessor to errorList objets - * - * @return array - */ - public function getErrorList() { - return $this->errorList; - } - - /** - * Toggle wehter getMessage() should return full or only exception message - * - * @param boolean $full Flag to enable or disable full message output - * - * @return void - */ - public function toggleFullMessage($full = true) { - $this->message = $full ? $this->fullMessage : $this->shortMessage; - } - - /** - * Magic method for string context - * - * @return string - */ - public function __toString() { - return $this->fullMessage; - } - - } // fDOMException - -} - '/css/DollarEqualRule.php', - 'theseer\\fdom\\css\\notrule' => '/css/NotRule.php', - 'theseer\\fdom\\css\\nthchildrule' => '/css/NthChildRule.php', - 'theseer\\fdom\\css\\regexrule' => '/css/RegexRule.php', - 'theseer\\fdom\\css\\ruleinterface' => '/css/RuleInterface.php', - 'theseer\\fdom\\css\\translator' => '/css/Translator.php', - 'theseer\\fdom\\fdomdocument' => '/fDOMDocument.php', - 'theseer\\fdom\\fdomdocumentfragment' => '/fDOMDocumentFragment.php', - 'theseer\\fdom\\fdomelement' => '/fDOMElement.php', - 'theseer\\fdom\\fdomexception' => '/fDOMException.php', - 'theseer\\fdom\\fdomnode' => '/fDOMNode.php', - 'theseer\\fdom\\fdomxpath' => '/fDOMXPath.php', - 'theseer\\fdom\\xpathquery' => '/XPathQuery.php', - 'theseer\\fdom\\xpathqueryexception' => '/XPathQueryException.php' - ); - } - $cn = strtolower($class); - if (isset($classes[$cn])) { - require __DIR__ . $classes[$cn]; - } - } -); -// @codeCoverageIgnoreEnd - - * 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 Arne Blankerts nor the names of 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 HOLDER ORCONTRIBUTORS - * 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. - * - * - * @category PHP - * @package TheSeer\fDOM - * @author Arne Blankerts - * @copyright Arne Blankerts , All rights reserved. - * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @link http://github.com/theseer/fdomdocument - * - */ - -namespace TheSeer\fDOM { - use TheSeer\fDOM\CSS\Translator; - - /** - * fDOMDocument extension to PHP's DOMDocument. - * This class adds various convenience methods to simplify APIs - * It is set to final since further extending it would even more - * break the Object structure after use of registerNodeClass. - * - * @category PHP - * @package TheSeer\fDOM - * @author Arne Blankerts - * @access public - * - */ - class fDOMDocument extends \DOMDocument { - - /** - * XPath Object instance - * - * @var fDOMXPath - */ - private $xp = NULL; - - /** - * List of registered prefixes and their namespace uri - * @var Array - */ - private $prefixes = array(); - - /** - * Extended DOMDocument constructor - * - * @param string $version XML Version, should be 1.0 - * @param string $encoding Encoding, defaults to utf-8 - * @param array $streamOptions optional stream options array - * - * @return fDOMDocument - */ - public function __construct($version = '1.0', $encoding = 'utf-8', $streamOptions = NULL) { - if (!is_null($streamOptions)) { - $this->setStreamContext($streamOptions); - } - - libxml_use_internal_errors(TRUE); - $rc = parent::__construct($version, $encoding); - - $this->registerNodeClass('DOMDocument', get_called_class()); - $this->registerNodeClass('DOMNode', 'TheSeer\fDOM\fDOMNode'); - $this->registerNodeClass('DOMElement', 'TheSeer\fDOM\fDOMElement'); - $this->registerNodeClass('DOMDocumentFragment', 'TheSeer\fDOM\fDOMDocumentFragment'); - - return $rc; - } - - /** - * Reset XPath object so the clone gets a new instance when needed - */ - public function __clone() { - $this->xp = new fDOMXPath($this); - foreach($this->prefixes as $prefix => $uri) { - $this->xp->registerNamespace($prefix, $uri); - } - } - - public function __toString() { - return $this->C14N(); - } - - /** - * Set Stream context options - * - * @param Array $options Stream context options - * - * @return boolean true on success, false on failure - */ - public function setStreamContext(Array $options) { - if (!count($options)) { - return FALSE; - } - $context = stream_context_create($options); - libxml_set_streams_context($context); - return TRUE; - } - - /** - * Wrapper to DOMDocument load with exception handling - * Returns true on success to satisfy the compatibilty of the original DOM Api - * - * @param string $fname File to load - * @param int|null $options LibXML Flags to pass - * - * @throws fDOMException - * - * @return bool|mixed - */ - public function load($fname, $options = LIBXML_NONET) { - $this->xp = NULL; - $tmp = parent :: load($fname, $options); - if (!$tmp || libxml_get_last_error()) { - throw new fDOMException("loading file '$fname' failed.", fDOMException::LoadError); - } - return TRUE; - } - - /** - * Wrapper to DOMDocument loadXML with exception handling - * Returns true on success to satisfy the compatibilty of the original DOM Api - * - * @param string $source XML source code - * @param integer $options LibXML option flags - * - * @throws fDOMException - * - * @return boolean - */ - public function loadXML($source, $options = LIBXML_NONET) { - $this->xp = NULL; - $tmp = parent :: loadXML($source, $options); - if (!$tmp || libxml_get_last_error()) { - throw new fDOMException('parsing string failed', fDOMException::ParseError); - } - return TRUE; - } - - /** - * Wrapper to DOMDocument loadHTMLFile with exception handling. - * Returns true on success to satisfy the compatibilty of the original DOM Api - * - * @param string $fname html file to load - * @param integer $options Options bitmask (@see DOMDocument::loadHTMLFile) - * - * @throws fDOMException - * - * @return boolean - */ - public function loadHTMLFile($fname, $options = NULL) { - $this->xp = NULL; - if (version_compare(PHP_VERSION, '5.4.0', '<')) { - if ($options != NULL) { - throw new fDOMException('Passing options requires PHP 5.4.0+', fDOMException::LoadError); - } - $tmp = parent :: loadHTMLFile($fname); - } else { - $tmp = parent :: loadHTMLFile($fname, $options); - } - if (!$tmp || libxml_get_last_error()) { - throw new fDOMException("loading html file '$fname' failed", fDOMException::LoadError); - } - return TRUE; - } - - /** - * Wrapper to DOMDocument loadHTML with exception handling - * Returns true on success to satisfy the compatibilty of the original DOM Api - * - * @param string $source html source code - * @param integer $options Options bitmask (@see DOMDocument::loadHTML) - * - * @throws fDOMException - * - * @return boolean - */ - public function loadHTML($source, $options = NULL) { - $this->xp = NULL; - if (version_compare(PHP_VERSION, '5.4.0', '<')) { - if ($options != NULL) { - throw new fDOMException('Passing options requires PHP 5.4.0+', fDOMException::LoadError); - } - $tmp = parent :: loadHTML($source); - } else { - $tmp = parent :: loadHTML($source, $options); - } - if (!$tmp || libxml_get_last_error()) { - throw new fDOMException('parsing html string failed', fDOMException::ParseError); - } - return TRUE; - } - - /** - * Wrapper to DOMDocument::save with exception handling - * - * @param string $filename filename to save to - * @param integer $options Options bitmask (@see DOMDocument::save) - * - * @throws fDOMException - * - * @return integer bytes saved - */ - public function save($filename, $options = NULL) { - $tmp = parent::save($filename, $options); - if (!$tmp) { - throw new fDOMException('saving xml file failed', fDOMException::SaveError); - } - return $tmp; - } - - /** - * Wrapper to DOMDocument::saveHTML with exception handling - * - * @param DOMNode|null $node Context DOMNode (optional) - * - * @throws fDOMException - * @return string html content - */ - public function saveHTML(\DOMNode $node = NULL) { - if (version_compare(PHP_VERSION, '5.3.6', '<') && $node != NULL) { - throw new fDOMException('Passing a context node requires PHP 5.3.6+', fDOMException::SaveError); - } - $tmp = parent::saveHTML($node); - if (!$tmp) { - throw new fDOMException('serializing to HTML failed', fDOMException::SaveError); - } - return $tmp; - } - - /** - * Wrapper to DOMDocument::saveHTMLfile with exception handling - * - * @param string $filename filename to save to - * @param integer $options Options bitmask (@see DOMDocument::saveHTMLFile) - * - * @throws fDOMException - * - * @return integer bytes saved - */ - public function saveHTMLFile($filename, $options = NULL) { - $tmp = parent::saveHTMLFile($filename, $options); - if (!$tmp) { - throw new fDOMException('saving to HTML file failed', fDOMException::SaveError); - } - return $tmp; - } - - /** - * Wrapper to DOMDocument::saveXML with exception handling - * - * @param \DOMNode $node node to start serializing at - * @param integer $options options flags as bitmask - * - * @throws fDOMException - * - * @return string serialized XML - */ - public function saveXML(\DOMNode $node = NULL, $options = NULL) { - try { - $tmp = parent::saveXML($node, $options); - if (!$tmp) { - throw new fDOMException('serializing to XML failed', fDOMException::SaveError); - } - return $tmp; - } catch (\Exception $e) { - if (!$e instanceof fDOMException) { - throw new fDOMException($e->getMessage(), fDOMException::SaveError, $e); - } - throw $e; - } - } - - /** - * get Instance of DOMXPath Object for current DOM - * - * @throws fDOMException - * - * @return fDOMXPath - */ - public function getDOMXPath() { - if (is_null($this->xp)) { - $this->xp = new fDOMXPath($this); - } - if (!$this->xp) { - throw new fDOMException('creating DOMXPath object failed.', fDOMException::NoDOMXPath); - } - return $this->xp; - } - - /** - * Convert a given DOMNodeList into a DOMFragment - * - * @param \DOMNodeList $list The Nodelist to process - * @param boolean $move Signale if nodes are to be moved into fragment or not - * - * @return fDOMDocumentFragment - */ - public function nodeList2Fragment(\DOMNodeList $list, $move=FALSE) { - $frag = $this->createDocumentFragment(); - /** @var fDOMNode $node */ - foreach($list as $node) { - $frag->appendChild($move ? $node : $node->cloneNode(TRUE)); - } - return $frag; - } - - /** - * Perform an xpath query - * - * @param String $q query string containing xpath - * @param \DOMNode|null $ctx (optional) Context DOMNode - * @param boolean $registerNodeNS Register flag pass through - * - * @return \DOMNodeList - */ - public function query($q, \DOMNode $ctx = NULL, $registerNodeNS = TRUE) { - if (is_null($this->xp)) { - $this->getDOMXPath(); - } - return $this->xp->evaluate($q, $ctx, $registerNodeNS); - } - - /** - * Perform an xpath query and return only the 1st match - * - * @param String $q query string containing xpath - * @param \DOMNode $ctx (optional) Context DOMNode - * @param boolean $registerNodeNS Register flag pass thru - * - * @return fDOMNode - */ - public function queryOne($q, \DOMNode $ctx = NULL, $registerNodeNS = TRUE) { - if (is_null($this->xp)) { - $this->getDOMXPath(); - } - return $this->xp->queryOne($q, $ctx, $registerNodeNS); - } - - /** - * Forwarder to fDOMXPath's prepare method allowing for easy and secure - * placeholder replacement comparable to sql's prepared statements - * . - * @param string $xpath String containing xpath with :placeholder markup - * @param array $valueMap Array containing keys (:placeholder) and value pairs to be quoted - * - * @return string - */ - public function prepareQuery($xpath, array $valueMap) { - if (is_null($this->xp)) { - $this->getDOMXPath(); - } - return $this->xp->prepare($xpath, $valueMap); - } - - /** - * Use a CSS Level 3 Selector string to query select nodes - * - * @param string $selector A CSS Level 3 Selector string - * @param \DOMNode $ctx - * @param bool $registerNodeNS - * - * @return \DOMNodeList - */ - public function select($selector, \DOMNode $ctx = NULL, $registerNodeNS = TRUE) { - $translator = new Translator(); - $xpath = $translator->translate($selector); - if ($ctx != NULL) { - $xpath = '.' . $xpath; - } - return $this->query($xpath, $ctx, $registerNodeNS); - } - - /** - * Forward to DOMXPath->registerNamespace() - * - * @param string $prefix The prefix to use - * @param string $uri The uri to assign to this prefix - * - * @throws fDOMException - * - * @return void - */ - public function registerNamespace($prefix, $uri) { - if (is_null($this->xp)) { - $this->getDOMXPath(); - } - if (!$this->xp->registerNamespace($prefix, $uri)) { - throw new fDOMException("Registering namespace '$uri' with prefix '$prefix' failed.", fDOMException::RegistrationFailed); - } - $this->prefixes[$prefix] = $uri; - } - - /** - * Forward to DOMXPath->registerPHPFunctions() - * - * @param mixed $restrict Array of function names or string with functionname to restrict callabilty to - * - * @throws fDOMException - * - * @return void - */ - public function registerPHPFunctions($restrict = NULL) { - if (is_null($this->xp)) { - $this->getDOMXPath(); - } - $this->xp->registerPHPFunctions($restrict); - if (libxml_get_last_error()) { - throw new fDOMException("Registering php functions failed.", fDOMException::RegistrationFailed); - } - } - - /** - * Create a new element in namespace defined by given prefix - * - * @param string $prefix Namespace prefix for node to create - * @param string $name Name of not element to create - * @param string $content Optional content to be set - * @param bool $asTextNode Create content as textNode rather then setting nodeValue - * - * @throws fDOMException - * - * @return fDOMElement Reference to created fDOMElement - */ - public function createElementPrefix($prefix, $name, $content = NULL, $asTextNode = FALSE) { - if (!isset($this->prefixes[$prefix])) { - throw new fDOMException("'$prefix' not bound", fDOMException::UnboundPrefix); - } - return $this->createElementNS($this->prefixes[$prefix], $prefix.':'.$name, $content, $asTextNode); - } - - /** - * Create a new fDOMElement and return it, optionally set content - * - * @param string $name Name of node to create - * @param null $content Content to set (optional) - * @param bool $asTextNode Create content as textNode rather then setting nodeValue - * - * @throws fDOMException - * - * @return fDOMElement Reference to created fDOMElement - */ - public function createElement($name, $content = NULL, $asTextnode = FALSE) { - try { - $node = parent::createElement($name); - if (!$node) { - throw new fDOMException("Creating element with name '$name' failed", fDOMException::NameInvalid); - } - if ($content !== NULL) { - if ($asTextnode) { - $node->appendChild($this->createTextnode($content)); - } else { - $node->nodeValue = $content; - } - if (libxml_get_errors()) { - throw new fDOMException("Setting content value failed", fDOMException::SetFailedError); - } - } - } catch (\DOMException $e) { - throw new fDOMException("Creating elemnt with name '$name' failed", 0, $e); - } - return $node; - } - - /** - * Create a new fDOMElement within given namespace and return it - * - * @param string $namespace Namespace URI for node to create - * @param string $name Name of node to create - * @param null $content Content to set (optional) - * @param bool $asTextNode Create content as textNode rather then setting nodeValue - * - * @throws fDOMException - * - * @return fDOMElement - */ - public function createElementNS($namespace, $name, $content = NULL, $asTextNode = FALSE) { - $node = parent::createElementNS($namespace, $name); - if (!$node) { - throw new fDOMException("Creating element with name '$name' failed", fDOMException::NameInvalid); - } - if ($content !== NULL) { - if ($asTextNode) { - $node->appendChild($this->createTextnode($content)); - } else { - $node->nodeValue = $content; - } - if (libxml_get_errors()) { - throw new fDOMException("Setting content value failed", fDOMException::SetFailedError); - } - } - return $node; - } - - /** - * Check if the given node is in the same document - * - * @param \DOMNode $node Node to compare with - * - * @return boolean true on match, false if they differ - * - */ - public function inSameDocument(\DOMNode $node) { - if ($node instanceof \DOMDocument) { - return $this->isSameNode($node); - } - return $this->isSameNode($node->ownerDocument); - } - - /** - * Create a new element and append it as documentElement - * - * @param $name Name of not element to create - * @param $content Optional content to be set - * - * @return fDOMElement Reference to created fDOMElement - */ - public function appendElement($name, $content = NULL, $asTextNode = FALSE) { - return $this->appendChild( - $this->createElement($name, $content, $asTextNode) - ); - } - - /** - * Create a new element in given namespace and append it as documentElement - * - * @param $ns Namespace of node to create - * @param $name Name of not element to create - * @param $content Optional content to be set - * - * @return fDOMElement Reference to created fDOMElement - */ - public function appendElementNS($ns, $name, $content = NULL, $asTextNode = FALSE) { - return $this->appendChild( - $this->createElementNS($ns, $name, $content, $asTextNode) - ); - } - - } // fDOMDocument - -} - - * 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 Arne Blankerts nor the names of 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 HOLDER ORCONTRIBUTORS - * 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. - * - * - * @category PHP - * @package TheSeer\fDOM - * @author Arne Blankerts - * @copyright Arne Blankerts , All rights reserved. - * @license http://www.opensource.org/licenses/bsd-license.php BSD License - * @link http://github.com/theseer/fdomdocument - * - */ - -namespace TheSeer\fDOM { - - /** - * fDOMDocumentFragment - * - * @category PHP - * @package TheSeer\fDOM - * @author Arne Blankerts - * @access public - * - */ - class fDOMDocumentFragment extends \DOMDocumentFragment { - - public function __toString() { - return $this->C14N(); - } - - /** - * Wrapper to standard method with exception support - * - * @param string $str Data string to parse and append - * - * @return boolean true on success - */ - public function appendXML($str) { - if (!parent::appendXML($str)) { - throw new fDOMException('Appending xml string failed', fDOMException::ParseError); - } - return true; - } - - /** - * Check if the given node is in the same document - * - * @param \DOMNode $node Node to compare with - * - * @return boolean true on match, false if they differ - * - */ - public function inSameDocument(\DOMNode $node) { - return $this->ownerDocument->inSameDocument($node); - } - - } // fDOMDocumentFragment - -} -. - * 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 Sebastian Bergmann nor the names of his - * 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 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. - * - * @package PHP - * @subpackage Timer - * @author Sebastian Bergmann - * @copyright 2010-2013 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @link http://github.com/sebastianbergmann/php-timer - * @since File available since Release 1.0.0 - */ - -/** - * Utility class for timing. - * - * @package PHP - * @subpackage Timer - * @author Sebastian Bergmann - * @copyright 2010-2013 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @version Release: @package_version@ - * @link http://github.com/sebastianbergmann/php-timer - * @since Class available since Release 1.0.0 - */ -class PHP_Timer -{ - /** - * @var array - */ - private static $times = array( - 'hour' => 3600000, - 'minute' => 60000, - 'second' => 1000 - ); - - /** - * @var array - */ - private static $startTimes = array(); - - /** - * @var float - */ - public static $requestTime; - - /** - * Starts the timer. - */ - public static function start() - { - array_push(self::$startTimes, microtime(TRUE)); - } - - /** - * Stops the timer and returns the elapsed time. - * - * @return float - */ - public static function stop() - { - return microtime(TRUE) - array_pop(self::$startTimes); - } - - /** - * Formats the elapsed time as a string. - * - * @param float $time - * @return string - */ - public static function secondsToTimeString($time) - { - $ms = round($time * 1000); - - foreach (self::$times as $unit => $value) { - if ($ms >= $value) { - $time = floor($ms / $value * 100.0) / 100.0; - return $time . ' ' . ($time == 1 ? $unit : $unit . 's'); - } - } - - return $ms . ' ms'; - } - - /** - * Formats the elapsed time since the start of the request as a string. - * - * @return string - */ - public static function timeSinceStartOfRequest() - { - return self::secondsToTimeString(microtime(TRUE) - self::$requestTime); - } - - /** - * Returns the resources (time, memory) of the request as a string. - * - * @return string - */ - public static function resourceUsage() - { - return sprintf( - 'Time: %s, Memory: %4.2fMb', - self::timeSinceStartOfRequest(), - memory_get_peak_usage(TRUE) / 1048576 - ); - } -} - -if (isset($_SERVER['REQUEST_TIME_FLOAT'])) { - PHP_Timer::$requestTime = $_SERVER['REQUEST_TIME_FLOAT']; -} - -else { - PHP_Timer::$requestTime = microtime(TRUE); -} -. - * 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 Sebastian Bergmann nor the names of his - * 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 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. - * - * @package PHP_TokenStream - * @author Sebastian Bergmann - * @copyright 2009-2013 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @since File available since Release 1.0.0 - */ - -/** - * A caching factory for token stream objects. - * - * @author Sebastian Bergmann - * @copyright 2009-2013 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @version Release: @package_version@ - * @link http://github.com/sebastianbergmann/php-token-stream/tree - * @since Class available since Release 1.0.0 - */ -class PHP_Token_Stream_CachingFactory -{ - /** - * @var array - */ - protected static $cache = array(); - - /** - * @param string $filename - * @return PHP_Token_Stream - */ - public static function get($filename) - { - if (!isset(self::$cache[$filename])) { - self::$cache[$filename] = new PHP_Token_Stream($filename); - } - - return self::$cache[$filename]; - } - - /** - * @param string $filename - */ - public static function clear($filename = NULL) - { - if (is_string($filename)) { - unset(self::$cache[$filename]); - } else { - self::$cache = array(); - } - } -} -. - * 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 Sebastian Bergmann nor the names of his - * 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 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. - * - * @package PHP_TokenStream - * @author Sebastian Bergmann - * @copyright 2009-2013 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @since File available since Release 1.0.0 - */ - -/** - * A stream of PHP tokens. - * - * @author Sebastian Bergmann - * @copyright 2009-2013 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @version Release: @package_version@ - * @link http://github.com/sebastianbergmann/php-token-stream/tree - * @since Class available since Release 1.0.0 - */ -class PHP_Token_Stream implements ArrayAccess, Countable, SeekableIterator -{ - /** - * @var array - */ - protected static $customTokens = array( - '(' => 'PHP_Token_OPEN_BRACKET', - ')' => 'PHP_Token_CLOSE_BRACKET', - '[' => 'PHP_Token_OPEN_SQUARE', - ']' => 'PHP_Token_CLOSE_SQUARE', - '{' => 'PHP_Token_OPEN_CURLY', - '}' => 'PHP_Token_CLOSE_CURLY', - ';' => 'PHP_Token_SEMICOLON', - '.' => 'PHP_Token_DOT', - ',' => 'PHP_Token_COMMA', - '=' => 'PHP_Token_EQUAL', - '<' => 'PHP_Token_LT', - '>' => 'PHP_Token_GT', - '+' => 'PHP_Token_PLUS', - '-' => 'PHP_Token_MINUS', - '*' => 'PHP_Token_MULT', - '/' => 'PHP_Token_DIV', - '?' => 'PHP_Token_QUESTION_MARK', - '!' => 'PHP_Token_EXCLAMATION_MARK', - ':' => 'PHP_Token_COLON', - '"' => 'PHP_Token_DOUBLE_QUOTES', - '@' => 'PHP_Token_AT', - '&' => 'PHP_Token_AMPERSAND', - '%' => 'PHP_Token_PERCENT', - '|' => 'PHP_Token_PIPE', - '$' => 'PHP_Token_DOLLAR', - '^' => 'PHP_Token_CARET', - '~' => 'PHP_Token_TILDE', - '`' => 'PHP_Token_BACKTICK' - ); - - /** - * @var string - */ - protected $filename; - - /** - * @var array - */ - protected $tokens = array(); - - /** - * @var integer - */ - protected $position = 0; - - /** - * @var array - */ - protected $linesOfCode = array('loc' => 0, 'cloc' => 0, 'ncloc' => 0); - - /** - * @var array - */ - protected $classes; - - /** - * @var array - */ - protected $functions; - - /** - * @var array - */ - protected $includes; - - /** - * @var array - */ - protected $interfaces; - - /** - * @var array - */ - protected $traits; - - /** - * @var array - */ - protected $lineToFunctionMap = array(); - - /** - * Constructor. - * - * @param string $sourceCode - */ - public function __construct($sourceCode) - { - if (is_file($sourceCode)) { - $this->filename = $sourceCode; - $sourceCode = file_get_contents($sourceCode); - } - - $this->scan($sourceCode); - } - - /** - * Destructor. - */ - public function __destruct() - { - $this->tokens = array(); - } - - /** - * @return string - */ - public function __toString() - { - $buffer = ''; - - foreach ($this as $token) { - $buffer .= $token; - } - - return $buffer; - } - - /** - * @return string - * @since Method available since Release 1.1.0 - */ - public function getFilename() - { - return $this->filename; - } - - /** - * Scans the source for sequences of characters and converts them into a - * stream of tokens. - * - * @param string $sourceCode - */ - protected function scan($sourceCode) - { - $line = 1; - $tokens = token_get_all($sourceCode); - $numTokens = count($tokens); - - $lastNonWhitespaceTokenWasDoubleColon = FALSE; - - for ($i = 0; $i < $numTokens; ++$i) { - $token = $tokens[$i]; - unset($tokens[$i]); - - if (is_array($token)) { - $name = substr(token_name($token[0]), 2); - $text = $token[1]; - - if ($lastNonWhitespaceTokenWasDoubleColon && $name == 'CLASS') { - $name = 'CLASS_NAME_CONSTANT'; - } - - $tokenClass = 'PHP_Token_' . $name; - } else { - $text = $token; - $tokenClass = self::$customTokens[$token]; - } - - $this->tokens[] = new $tokenClass($text, $line, $this, $i); - $lines = substr_count($text, "\n"); - $line += $lines; - - if ($tokenClass == 'PHP_Token_HALT_COMPILER') { - break; - } - - else if ($tokenClass == 'PHP_Token_COMMENT' || - $tokenClass == 'PHP_Token_DOC_COMMENT') { - $this->linesOfCode['cloc'] += $lines + 1; - } - - if ($name == 'DOUBLE_COLON') { - $lastNonWhitespaceTokenWasDoubleColon = TRUE; - } - - else if ($name != 'WHITESPACE') { - $lastNonWhitespaceTokenWasDoubleColon = FALSE; - } - } - - $this->linesOfCode['loc'] = substr_count($sourceCode, "\n"); - $this->linesOfCode['ncloc'] = $this->linesOfCode['loc'] - - $this->linesOfCode['cloc']; - } - - /** - * @return integer - */ - public function count() - { - return count($this->tokens); - } - - /** - * @return PHP_Token[] - */ - public function tokens() - { - return $this->tokens; - } - - /** - * @return array - */ - public function getClasses() - { - if ($this->classes !== NULL) { - return $this->classes; - } - - $this->parse(); - - return $this->classes; - } - - /** - * @return array - */ - public function getFunctions() - { - if ($this->functions !== NULL) { - return $this->functions; - } - - $this->parse(); - - return $this->functions; - } - - /** - * @return array - */ - public function getInterfaces() - { - if ($this->interfaces !== NULL) { - return $this->interfaces; - } - - $this->parse(); - - return $this->interfaces; - } - - /** - * @return array - * @since Method available since Release 1.1.0 - */ - public function getTraits() - { - if ($this->traits !== NULL) { - return $this->traits; - } - - $this->parse(); - - return $this->traits; - } - - /** - * Gets the names of all files that have been included - * using include(), include_once(), require() or require_once(). - * - * Parameter $categorize set to TRUE causing this function to return a - * multi-dimensional array with categories in the keys of the first dimension - * and constants and their values in the second dimension. - * - * Parameter $category allow to filter following specific inclusion type - * - * @param bool $categorize OPTIONAL - * @param string $category OPTIONAL Either 'require_once', 'require', - * 'include_once', 'include'. - * @return array - * @since Method available since Release 1.1.0 - */ - public function getIncludes($categorize = FALSE, $category = NULL) - { - if ($this->includes === NULL) { - $this->includes = array( - 'require_once' => array(), - 'require' => array(), - 'include_once' => array(), - 'include' => array() - ); - - foreach ($this->tokens as $token) { - switch (get_class($token)) { - case 'PHP_Token_REQUIRE_ONCE': - case 'PHP_Token_REQUIRE': - case 'PHP_Token_INCLUDE_ONCE': - case 'PHP_Token_INCLUDE': { - $this->includes[$token->getType()][] = $token->getName(); - } - break; - } - } - } - - if (isset($this->includes[$category])) { - $includes = $this->includes[$category]; - } - - else if ($categorize === FALSE) { - $includes = array_merge( - $this->includes['require_once'], - $this->includes['require'], - $this->includes['include_once'], - $this->includes['include'] - ); - } else { - $includes = $this->includes; - } - - return $includes; - } - - /** - * Returns the name of the function or method a line belongs to. - * - * @return string or null if the line is not in a function or method - * @since Method available since Release 1.2.0 - */ - public function getFunctionForLine($line) - { - $this->parse(); - - if (isset($this->lineToFunctionMap[$line])) { - return $this->lineToFunctionMap[$line]; - } - } - - protected function parse() - { - $this->interfaces = array(); - $this->classes = array(); - $this->traits = array(); - $this->functions = array(); - $class = FALSE; - $classEndLine = FALSE; - $trait = FALSE; - $traitEndLine = FALSE; - $interface = FALSE; - $interfaceEndLine = FALSE; - - foreach ($this->tokens as $token) { - switch (get_class($token)) { - case 'PHP_Token_HALT_COMPILER': { - return; - } - break; - - case 'PHP_Token_INTERFACE': { - $interface = $token->getName(); - $interfaceEndLine = $token->getEndLine(); - - $this->interfaces[$interface] = array( - 'methods' => array(), - 'parent' => $token->getParent(), - 'keywords' => $token->getKeywords(), - 'docblock' => $token->getDocblock(), - 'startLine' => $token->getLine(), - 'endLine' => $interfaceEndLine, - 'package' => $token->getPackage(), - 'file' => $this->filename - ); - } - break; - - case 'PHP_Token_CLASS': - case 'PHP_Token_TRAIT': { - $tmp = array( - 'methods' => array(), - 'parent' => $token->getParent(), - 'interfaces'=> $token->getInterfaces(), - 'keywords' => $token->getKeywords(), - 'docblock' => $token->getDocblock(), - 'startLine' => $token->getLine(), - 'endLine' => $token->getEndLine(), - 'package' => $token->getPackage(), - 'file' => $this->filename - ); - - if ($token instanceof PHP_Token_CLASS) { - $class = $token->getName(); - $classEndLine = $token->getEndLine(); - $this->classes[$class] = $tmp; - } else { - $trait = $token->getName(); - $traitEndLine = $token->getEndLine(); - $this->traits[$trait] = $tmp; - } - } - break; - - case 'PHP_Token_FUNCTION': { - $name = $token->getName(); - $tmp = array( - 'docblock' => $token->getDocblock(), - 'keywords' => $token->getKeywords(), - 'visibility'=> $token->getVisibility(), - 'signature' => $token->getSignature(), - 'startLine' => $token->getLine(), - 'endLine' => $token->getEndLine(), - 'ccn' => $token->getCCN(), - 'file' => $this->filename - ); - - if ($class === FALSE && - $trait === FALSE && - $interface === FALSE) { - $this->functions[$name] = $tmp; - - $this->addFunctionToMap( - $name, $tmp['startLine'], $tmp['endLine'] - ); - } - - else if ($class !== FALSE) { - $this->classes[$class]['methods'][$name] = $tmp; - - $this->addFunctionToMap( - $class . '::' . $name, - $tmp['startLine'], - $tmp['endLine'] - ); - } - - else if ($trait !== FALSE) { - $this->traits[$trait]['methods'][$name] = $tmp; - - $this->addFunctionToMap( - $trait . '::' . $name, - $tmp['startLine'], - $tmp['endLine'] - ); - } - - else { - $this->interfaces[$interface]['methods'][$name] = $tmp; - } - } - break; - - case 'PHP_Token_CLOSE_CURLY': { - if ($classEndLine !== FALSE && - $classEndLine == $token->getLine()) { - $class = FALSE; - $classEndLine = FALSE; - } - - else if ($traitEndLine !== FALSE && - $traitEndLine == $token->getLine()) { - $trait = FALSE; - $traitEndLine = FALSE; - } - - else if ($interfaceEndLine !== FALSE && - $interfaceEndLine == $token->getLine()) { - $interface = FALSE; - $interfaceEndLine = FALSE; - } - } - break; - } - } - } - - /** - * @return array - */ - public function getLinesOfCode() - { - return $this->linesOfCode; - } - - /** - */ - public function rewind() - { - $this->position = 0; - } - - /** - * @return boolean - */ - public function valid() - { - return isset($this->tokens[$this->position]); - } - - /** - * @return integer - */ - public function key() - { - return $this->position; - } - - /** - * @return PHP_Token - */ - public function current() - { - return $this->tokens[$this->position]; - } - - /** - */ - public function next() - { - $this->position++; - } - - /** - * @param mixed $offset - */ - public function offsetExists($offset) - { - return isset($this->tokens[$offset]); - } - - /** - * @param mixed $offset - * @return mixed - */ - public function offsetGet($offset) - { - return $this->tokens[$offset]; - } - - /** - * @param mixed $offset - * @param mixed $value - */ - public function offsetSet($offset, $value) - { - $this->tokens[$offset] = $value; - } - - /** - * @param mixed $offset - */ - public function offsetUnset($offset) - { - unset($this->tokens[$offset]); - } - - /** - * Seek to an absolute position. - * - * @param integer $position - * @throws OutOfBoundsException - */ - public function seek($position) - { - $this->position = $position; - - if (!$this->valid()) { - throw new OutOfBoundsException('Invalid seek position'); - } - } - - private function addFunctionToMap($name, $startLine, $endLine) - { - for ($line = $startLine; $line <= $endLine; $line++) { - $this->lineToFunctionMap[$line] = $name; - } - } -} -. - * 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 Sebastian Bergmann nor the names of his - * 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 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. - * - * @package PHP_TokenStream - * @author Sebastian Bergmann - * @copyright 2009-2013 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @since File available since Release 1.0.0 - */ - -/** - * A PHP token. - * - * @author Sebastian Bergmann - * @copyright 2009-2013 Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @version Release: @package_version@ - * @link http://github.com/sebastianbergmann/php-token-stream/tree - * @since Class available since Release 1.0.0 - */ -abstract class PHP_Token -{ - /** - * @var string - */ - protected $text; - - /** - * @var integer - */ - protected $line; - - /** - * @var PHP_Token_Stream - */ - protected $tokenStream; - - /** - * @var integer - */ - protected $id; - - /** - * Constructor. - * - * @param string $text - * @param integer $line - * @param PHP_Token_Stream $tokenStream - * @param integer $id - */ - public function __construct($text, $line, PHP_Token_Stream $tokenStream, $id) - { - $this->text = $text; - $this->line = $line; - $this->tokenStream = $tokenStream; - $this->id = $id; - } - - /** - * @return string - */ - public function __toString() - { - return $this->text; - } - - /** - * @return integer - */ - public function getLine() - { - return $this->line; - } -} - -abstract class PHP_TokenWithScope extends PHP_Token -{ - protected $endTokenId; - - /** - * Get the docblock for this token - * - * This method will fetch the docblock belonging to the current token. The - * docblock must be placed on the line directly above the token to be - * recognized. - * - * @return string|null Returns the docblock as a string if found - */ - public function getDocblock() - { - $tokens = $this->tokenStream->tokens(); - $currentLineNumber = $tokens[$this->id]->getLine(); - $prevLineNumber = $currentLineNumber - 1; - - for ($i = $this->id - 1; $i; $i--) { - if (!isset($tokens[$i])) { - return; - } - - if ($tokens[$i] instanceof PHP_Token_FUNCTION || - $tokens[$i] instanceof PHP_Token_CLASS || - $tokens[$i] instanceof PHP_Token_TRAIT) { - // Some other trait, class or function, no docblock can be - // used for the current token - break; - } - - $line = $tokens[$i]->getLine(); - - if ($line == $currentLineNumber || - ($line == $prevLineNumber && - $tokens[$i] instanceof PHP_Token_WHITESPACE)) { - continue; - } - - if ($line < $currentLineNumber && - !$tokens[$i] instanceof PHP_Token_DOC_COMMENT) { - break; - } - - return (string)$tokens[$i]; - } - } - - public function getEndTokenId() - { - $block = 0; - $i = $this->id; - $tokens = $this->tokenStream->tokens(); - - while ($this->endTokenId === NULL && isset($tokens[$i])) { - if ($tokens[$i] instanceof PHP_Token_OPEN_CURLY || - $tokens[$i] instanceof PHP_Token_CURLY_OPEN) { - $block++; - } - - else if ($tokens[$i] instanceof PHP_Token_CLOSE_CURLY) { - $block--; - - if ($block === 0) { - $this->endTokenId = $i; - } - } - - else if (($this instanceof PHP_Token_FUNCTION || - $this instanceof PHP_Token_NAMESPACE) && - $tokens[$i] instanceof PHP_Token_SEMICOLON) { - if ($block === 0) { - $this->endTokenId = $i; - } - } - - $i++; - } - - if ($this->endTokenId === NULL) { - $this->endTokenId = $this->id; - } - - return $this->endTokenId; - } - - public function getEndLine() - { - return $this->tokenStream[$this->getEndTokenId()]->getLine(); - } - -} - -abstract class PHP_TokenWithScopeAndVisibility extends PHP_TokenWithScope { - - public function getVisibility() - { - $tokens = $this->tokenStream->tokens(); - - for ($i = $this->id - 2; $i > $this->id - 7; $i -= 2) { - if (isset($tokens[$i]) && - ($tokens[$i] instanceof PHP_Token_PRIVATE || - $tokens[$i] instanceof PHP_Token_PROTECTED || - $tokens[$i] instanceof PHP_Token_PUBLIC)) { - return strtolower( - str_replace('PHP_Token_', '', get_class($tokens[$i])) - ); - } - if (isset($tokens[$i]) && - !($tokens[$i] instanceof PHP_Token_STATIC || - $tokens[$i] instanceof PHP_Token_FINAL || - $tokens[$i] instanceof PHP_Token_ABSTRACT)) { - // no keywords; stop visibility search - break; - } - } - } - - public function getKeywords() - { - $keywords = array(); - $tokens = $this->tokenStream->tokens(); - - for ($i = $this->id - 2; $i > $this->id - 7; $i -= 2) { - if (isset($tokens[$i]) && - ($tokens[$i] instanceof PHP_Token_PRIVATE || - $tokens[$i] instanceof PHP_Token_PROTECTED || - $tokens[$i] instanceof PHP_Token_PUBLIC)) { - continue; - } - - if (isset($tokens[$i]) && - ($tokens[$i] instanceof PHP_Token_STATIC || - $tokens[$i] instanceof PHP_Token_FINAL || - $tokens[$i] instanceof PHP_Token_ABSTRACT)) { - $keywords[] = strtolower( - str_replace('PHP_Token_', '', get_class($tokens[$i])) - ); - } - } - - return implode(',', $keywords); - } - -} - -abstract class PHP_Token_Includes extends PHP_Token -{ - protected $name; - protected $type; - - public function getName() - { - if ($this->name !== NULL) { - return $this->name; - } - - $tokens = $this->tokenStream->tokens(); - - if ($tokens[$this->id+2] instanceof PHP_Token_CONSTANT_ENCAPSED_STRING) { - $this->name = trim($tokens[$this->id+2], "'\""); - $this->type = strtolower( - str_replace('PHP_Token_', '', get_class($tokens[$this->id])) - ); - } - - return $this->name; - } - - public function getType() - { - $this->getName(); - return $this->type; - } -} - -class PHP_Token_REQUIRE_ONCE extends PHP_Token_Includes {} -class PHP_Token_REQUIRE extends PHP_Token_Includes {} -class PHP_Token_EVAL extends PHP_Token {} -class PHP_Token_INCLUDE_ONCE extends PHP_Token_Includes {} -class PHP_Token_INCLUDE extends PHP_Token_Includes {} -class PHP_Token_LOGICAL_OR extends PHP_Token {} -class PHP_Token_LOGICAL_XOR extends PHP_Token {} -class PHP_Token_LOGICAL_AND extends PHP_Token {} -class PHP_Token_PRINT extends PHP_Token {} -class PHP_Token_SR_EQUAL extends PHP_Token {} -class PHP_Token_SL_EQUAL extends PHP_Token {} -class PHP_Token_XOR_EQUAL extends PHP_Token {} -class PHP_Token_OR_EQUAL extends PHP_Token {} -class PHP_Token_AND_EQUAL extends PHP_Token {} -class PHP_Token_MOD_EQUAL extends PHP_Token {} -class PHP_Token_CONCAT_EQUAL extends PHP_Token {} -class PHP_Token_DIV_EQUAL extends PHP_Token {} -class PHP_Token_MUL_EQUAL extends PHP_Token {} -class PHP_Token_MINUS_EQUAL extends PHP_Token {} -class PHP_Token_PLUS_EQUAL extends PHP_Token {} -class PHP_Token_BOOLEAN_OR extends PHP_Token {} -class PHP_Token_BOOLEAN_AND extends PHP_Token {} -class PHP_Token_IS_NOT_IDENTICAL extends PHP_Token {} -class PHP_Token_IS_IDENTICAL extends PHP_Token {} -class PHP_Token_IS_NOT_EQUAL extends PHP_Token {} -class PHP_Token_IS_EQUAL extends PHP_Token {} -class PHP_Token_IS_GREATER_OR_EQUAL extends PHP_Token {} -class PHP_Token_IS_SMALLER_OR_EQUAL extends PHP_Token {} -class PHP_Token_SR extends PHP_Token {} -class PHP_Token_SL extends PHP_Token {} -class PHP_Token_INSTANCEOF extends PHP_Token {} -class PHP_Token_UNSET_CAST extends PHP_Token {} -class PHP_Token_BOOL_CAST extends PHP_Token {} -class PHP_Token_OBJECT_CAST extends PHP_Token {} -class PHP_Token_ARRAY_CAST extends PHP_Token {} -class PHP_Token_STRING_CAST extends PHP_Token {} -class PHP_Token_DOUBLE_CAST extends PHP_Token {} -class PHP_Token_INT_CAST extends PHP_Token {} -class PHP_Token_DEC extends PHP_Token {} -class PHP_Token_INC extends PHP_Token {} -class PHP_Token_CLONE extends PHP_Token {} -class PHP_Token_NEW extends PHP_Token {} -class PHP_Token_EXIT extends PHP_Token {} -class PHP_Token_IF extends PHP_Token {} -class PHP_Token_ELSEIF extends PHP_Token {} -class PHP_Token_ELSE extends PHP_Token {} -class PHP_Token_ENDIF extends PHP_Token {} -class PHP_Token_LNUMBER extends PHP_Token {} -class PHP_Token_DNUMBER extends PHP_Token {} -class PHP_Token_STRING extends PHP_Token {} -class PHP_Token_STRING_VARNAME extends PHP_Token {} -class PHP_Token_VARIABLE extends PHP_Token {} -class PHP_Token_NUM_STRING extends PHP_Token {} -class PHP_Token_INLINE_HTML extends PHP_Token {} -class PHP_Token_CHARACTER extends PHP_Token {} -class PHP_Token_BAD_CHARACTER extends PHP_Token {} -class PHP_Token_ENCAPSED_AND_WHITESPACE extends PHP_Token {} -class PHP_Token_CONSTANT_ENCAPSED_STRING extends PHP_Token {} -class PHP_Token_ECHO extends PHP_Token {} -class PHP_Token_DO extends PHP_Token {} -class PHP_Token_WHILE extends PHP_Token {} -class PHP_Token_ENDWHILE extends PHP_Token {} -class PHP_Token_FOR extends PHP_Token {} -class PHP_Token_ENDFOR extends PHP_Token {} -class PHP_Token_FOREACH extends PHP_Token {} -class PHP_Token_ENDFOREACH extends PHP_Token {} -class PHP_Token_DECLARE extends PHP_Token {} -class PHP_Token_ENDDECLARE extends PHP_Token {} -class PHP_Token_AS extends PHP_Token {} -class PHP_Token_SWITCH extends PHP_Token {} -class PHP_Token_ENDSWITCH extends PHP_Token {} -class PHP_Token_CASE extends PHP_Token {} -class PHP_Token_DEFAULT extends PHP_Token {} -class PHP_Token_BREAK extends PHP_Token {} -class PHP_Token_CONTINUE extends PHP_Token {} -class PHP_Token_GOTO extends PHP_Token {} -class PHP_Token_CALLABLE extends PHP_Token {} -class PHP_Token_INSTEADOF extends PHP_Token {} - -class PHP_Token_FUNCTION extends PHP_TokenWithScopeAndVisibility -{ - protected $arguments; - protected $ccn; - protected $name; - protected $signature; - - public function getArguments() - { - if ($this->arguments !== NULL) { - return $this->arguments; - } - - $this->arguments = array(); - $tokens = $this->tokenStream->tokens(); - $typeHint = NULL; - - // Search for first token inside brackets - $i = $this->id + 2; - while (!$tokens[$i-1] instanceof PHP_Token_OPEN_BRACKET) { - $i++; - } - - while (!$tokens[$i] instanceof PHP_Token_CLOSE_BRACKET) { - if ($tokens[$i] instanceof PHP_Token_STRING) { - $typeHint = (string)$tokens[$i]; - } - - else if ($tokens[$i] instanceof PHP_Token_VARIABLE) { - $this->arguments[(string)$tokens[$i]] = $typeHint; - $typeHint = NULL; - } - - $i++; - } - - return $this->arguments; - } - - public function getName() - { - if ($this->name !== NULL) { - return $this->name; - } - - $tokens = $this->tokenStream->tokens(); - - for ($i = $this->id + 1; $i < count($tokens); $i++) { - if ($tokens[$i] instanceof PHP_Token_STRING) { - $this->name = (string)$tokens[$i]; - break; - } - - else if ($tokens[$i] instanceof PHP_Token_AMPERSAND && - $tokens[$i+1] instanceof PHP_Token_STRING) { - $this->name = (string)$tokens[$i+1]; - break; - } - - else if ($tokens[$i] instanceof PHP_Token_OPEN_BRACKET) { - $this->name = 'anonymous function'; - break; - } - } - - if ($this->name != 'anonymous function') { - for ($i = $this->id; $i; --$i) { - if ($tokens[$i] instanceof PHP_Token_NAMESPACE) { - $this->name = $tokens[$i]->getName() . '\\' . $this->name; - break; - } - - if ($tokens[$i] instanceof PHP_Token_INTERFACE) { - break; - } - } - } - - return $this->name; - } - - public function getCCN() - { - if ($this->ccn !== NULL) { - return $this->ccn; - } - - $this->ccn = 1; - $end = $this->getEndTokenId(); - $tokens = $this->tokenStream->tokens(); - - for ($i = $this->id; $i <= $end; $i++) { - switch (get_class($tokens[$i])) { - case 'PHP_Token_IF': - case 'PHP_Token_ELSEIF': - case 'PHP_Token_FOR': - case 'PHP_Token_FOREACH': - case 'PHP_Token_WHILE': - case 'PHP_Token_CASE': - case 'PHP_Token_CATCH': - case 'PHP_Token_BOOLEAN_AND': - case 'PHP_Token_LOGICAL_AND': - case 'PHP_Token_BOOLEAN_OR': - case 'PHP_Token_LOGICAL_OR': - case 'PHP_Token_QUESTION_MARK': { - $this->ccn++; - } - break; - } - } - - return $this->ccn; - } - - public function getSignature() - { - if ($this->signature !== NULL) { - return $this->signature; - } - - if ($this->getName() == 'anonymous function') { - $this->signature = 'anonymous function'; - $i = $this->id + 1; - } else { - $this->signature = ''; - $i = $this->id + 2; - } - - $tokens = $this->tokenStream->tokens(); - - while (isset($tokens[$i]) && - !$tokens[$i] instanceof PHP_Token_OPEN_CURLY && - !$tokens[$i] instanceof PHP_Token_SEMICOLON) { - $this->signature .= $tokens[$i++]; - } - - $this->signature = trim($this->signature); - - return $this->signature; - } -} - -class PHP_Token_CONST extends PHP_Token {} -class PHP_Token_RETURN extends PHP_Token {} -class PHP_Token_YIELD extends PHP_Token {} -class PHP_Token_TRY extends PHP_Token {} -class PHP_Token_CATCH extends PHP_Token {} -class PHP_Token_FINALLY extends PHP_Token {} -class PHP_Token_THROW extends PHP_Token {} -class PHP_Token_USE extends PHP_Token {} -class PHP_Token_GLOBAL extends PHP_Token {} -class PHP_Token_PUBLIC extends PHP_Token {} -class PHP_Token_PROTECTED extends PHP_Token {} -class PHP_Token_PRIVATE extends PHP_Token {} -class PHP_Token_FINAL extends PHP_Token {} -class PHP_Token_ABSTRACT extends PHP_Token {} -class PHP_Token_STATIC extends PHP_Token {} -class PHP_Token_VAR extends PHP_Token {} -class PHP_Token_UNSET extends PHP_Token {} -class PHP_Token_ISSET extends PHP_Token {} -class PHP_Token_EMPTY extends PHP_Token {} -class PHP_Token_HALT_COMPILER extends PHP_Token {} - -class PHP_Token_INTERFACE extends PHP_TokenWithScopeAndVisibility -{ - protected $interfaces; - - public function getName() - { - return (string)$this->tokenStream[$this->id + 2]; - } - - public function hasParent() - { - return $this->tokenStream[$this->id + 4] instanceof PHP_Token_EXTENDS; - } - - public function getPackage() - { - $className = $this->getName(); - $docComment = $this->getDocblock(); - - $result = array( - 'namespace' => '', - 'fullPackage' => '', - 'category' => '', - 'package' => '', - 'subpackage' => '' - ); - - for ($i = $this->id; $i; --$i) { - if ($this->tokenStream[$i] instanceof PHP_Token_NAMESPACE) { - $result['namespace'] = $this->tokenStream[$i]->getName(); - break; - } - } - - if (preg_match('/@category[\s]+([\.\w]+)/', $docComment, $matches)) { - $result['category'] = $matches[1]; - } - - if (preg_match('/@package[\s]+([\.\w]+)/', $docComment, $matches)) { - $result['package'] = $matches[1]; - $result['fullPackage'] = $matches[1]; - } - - if (preg_match('/@subpackage[\s]+([\.\w]+)/', $docComment, $matches)) { - $result['subpackage'] = $matches[1]; - $result['fullPackage'] .= '.' . $matches[1]; - } - - if (empty($result['fullPackage'])) { - $result['fullPackage'] = $this->arrayToName( - explode('_', str_replace('\\', '_', $className)), '.' - ); - } - - return $result; - } - - protected function arrayToName(array $parts, $join = '\\') - { - $result = ''; - - if (count($parts) > 1) { - array_pop($parts); - - $result = join($join, $parts); - } - - return $result; - } - - public function getParent() - { - if (!$this->hasParent()) { - return FALSE; - } - - $i = $this->id + 6; - $tokens = $this->tokenStream->tokens(); - $className = (string)$tokens[$i]; - - while (isset($tokens[$i+1]) && - !$tokens[$i+1] instanceof PHP_Token_WHITESPACE) { - $className .= (string)$tokens[++$i]; - } - - return $className; - } - - public function hasInterfaces() - { - return (isset($this->tokenStream[$this->id + 4]) && - $this->tokenStream[$this->id + 4] instanceof PHP_Token_IMPLEMENTS) || - (isset($this->tokenStream[$this->id + 8]) && - $this->tokenStream[$this->id + 8] instanceof PHP_Token_IMPLEMENTS); - } - - public function getInterfaces() - { - if ($this->interfaces !== NULL) { - return $this->interfaces; - } - - if (!$this->hasInterfaces()) { - return ($this->interfaces = FALSE); - } - - if ($this->tokenStream[$this->id + 4] instanceof PHP_Token_IMPLEMENTS) { - $i = $this->id + 3; - } else { - $i = $this->id + 7; - } - - $tokens = $this->tokenStream->tokens(); - - while (!$tokens[$i+1] instanceof PHP_Token_OPEN_CURLY) { - $i++; - - if ($tokens[$i] instanceof PHP_Token_STRING) { - $this->interfaces[] = (string)$tokens[$i]; - } - } - - return $this->interfaces; - } -} - -class PHP_Token_CLASS extends PHP_Token_INTERFACE {} -class PHP_Token_CLASS_NAME_CONSTANT extends PHP_Token {} -class PHP_Token_TRAIT extends PHP_Token_INTERFACE {} -class PHP_Token_EXTENDS extends PHP_Token {} -class PHP_Token_IMPLEMENTS extends PHP_Token {} -class PHP_Token_OBJECT_OPERATOR extends PHP_Token {} -class PHP_Token_DOUBLE_ARROW extends PHP_Token {} -class PHP_Token_LIST extends PHP_Token {} -class PHP_Token_ARRAY extends PHP_Token {} -class PHP_Token_CLASS_C extends PHP_Token {} -class PHP_Token_TRAIT_C extends PHP_Token {} -class PHP_Token_METHOD_C extends PHP_Token {} -class PHP_Token_FUNC_C extends PHP_Token {} -class PHP_Token_LINE extends PHP_Token {} -class PHP_Token_FILE extends PHP_Token {} -class PHP_Token_COMMENT extends PHP_Token {} -class PHP_Token_DOC_COMMENT extends PHP_Token {} -class PHP_Token_OPEN_TAG extends PHP_Token {} -class PHP_Token_OPEN_TAG_WITH_ECHO extends PHP_Token {} -class PHP_Token_CLOSE_TAG extends PHP_Token {} -class PHP_Token_WHITESPACE extends PHP_Token {} -class PHP_Token_START_HEREDOC extends PHP_Token {} -class PHP_Token_END_HEREDOC extends PHP_Token {} -class PHP_Token_DOLLAR_OPEN_CURLY_BRACES extends PHP_Token {} -class PHP_Token_CURLY_OPEN extends PHP_Token {} -class PHP_Token_PAAMAYIM_NEKUDOTAYIM extends PHP_Token {} - -class PHP_Token_NAMESPACE extends PHP_TokenWithScope -{ - public function getName() - { - $tokens = $this->tokenStream->tokens(); - $namespace = (string)$tokens[$this->id+2]; - - for ($i = $this->id + 3; ; $i += 2) { - if (isset($tokens[$i]) && - $tokens[$i] instanceof PHP_Token_NS_SEPARATOR) { - $namespace .= '\\' . $tokens[$i+1]; - } else { - break; - } - } - - return $namespace; - } -} - -class PHP_Token_NS_C extends PHP_Token {} -class PHP_Token_DIR extends PHP_Token {} -class PHP_Token_NS_SEPARATOR extends PHP_Token {} -class PHP_Token_DOUBLE_COLON extends PHP_Token {} -class PHP_Token_OPEN_BRACKET extends PHP_Token {} -class PHP_Token_CLOSE_BRACKET extends PHP_Token {} -class PHP_Token_OPEN_SQUARE extends PHP_Token {} -class PHP_Token_CLOSE_SQUARE extends PHP_Token {} -class PHP_Token_OPEN_CURLY extends PHP_Token {} -class PHP_Token_CLOSE_CURLY extends PHP_Token {} -class PHP_Token_SEMICOLON extends PHP_Token {} -class PHP_Token_DOT extends PHP_Token {} -class PHP_Token_COMMA extends PHP_Token {} -class PHP_Token_EQUAL extends PHP_Token {} -class PHP_Token_LT extends PHP_Token {} -class PHP_Token_GT extends PHP_Token {} -class PHP_Token_PLUS extends PHP_Token {} -class PHP_Token_MINUS extends PHP_Token {} -class PHP_Token_MULT extends PHP_Token {} -class PHP_Token_DIV extends PHP_Token {} -class PHP_Token_QUESTION_MARK extends PHP_Token {} -class PHP_Token_EXCLAMATION_MARK extends PHP_Token {} -class PHP_Token_COLON extends PHP_Token {} -class PHP_Token_DOUBLE_QUOTES extends PHP_Token {} -class PHP_Token_AT extends PHP_Token {} -class PHP_Token_AMPERSAND extends PHP_Token {} -class PHP_Token_PERCENT extends PHP_Token {} -class PHP_Token_PIPE extends PHP_Token {} -class PHP_Token_DOLLAR extends PHP_Token {} -class PHP_Token_CARET extends PHP_Token {} -class PHP_Token_TILDE extends PHP_Token {} -class PHP_Token_BACKTICK extends PHP_Token {} -á3rMEŠ»Ž‚2Xjªx.Ô)ßGBMB \ No newline at end of file

5q!RY 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