]> _ Git - physioassist-wordpress.git/commitdiff
WIP #3678 @7.5
authorstephen@cubedesigners.com <stephen@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Thu, 11 Jun 2020 15:06:10 +0000 (15:06 +0000)
committerstephen@cubedesigners.com <stephen@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Thu, 11 Jun 2020 15:06:10 +0000 (15:06 +0000)
293 files changed:
wp-content/languages/wpml/admin_texts_woocommerce_price_decimal_sep-de_DE.mo [new file with mode: 0755]
wp-content/languages/wpml/admin_texts_woocommerce_price_decimal_sep-fr_FR.mo [new file with mode: 0755]
wp-content/languages/wpml/admin_texts_woocommerce_price_thousand_sep-de_DE.mo [new file with mode: 0755]
wp-content/languages/wpml/admin_texts_woocommerce_price_thousand_sep-fr_FR.mo [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/.gitignore [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/LICENSE.txt [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/README.txt [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/class-chronopost-admin-settings.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/class-chronopost-admin.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/css/chronopost-admin.css [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/img/icon.png [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/img/logo.png [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/index.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/js/chronopost-admin.js [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/partials/chronopost-admin-daily-docket.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/partials/chronopost-admin-display.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/partials/chronopost-admin-exports.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/partials/chronopost-admin-import-tracking.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/partials/chronopost-admin-shipping.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/.gitignore [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/LICENSE.md [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/README.md [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/bower.json [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/dist/wickedpicker.min.css [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/dist/wickedpicker.min.js [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/fonts/fontello.eot [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/fonts/fontello.svg [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/fonts/fontello.ttf [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/fonts/fontello.woff [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/src/wickedpicker.js [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/stylesheets/wickedpicker.css [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/changelog.txt [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/chronopost.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/composer.json [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/composer.lock [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/csv/chrono10.csv [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/csv/chrono13.csv [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/csv/chrono18.csv [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/csv/chronoclassic.csv [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/csv/chronoexpress.csv [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/csv/chronorelais.csv [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/csv/chronorelaiseurope.csv [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/csv/chronoretour.csv [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/csv/chronosameday.csv [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/csv/index.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/csv/relaisdom.csv [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/data/default_settings.json [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/deploy/after_push [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/deploy/before_restart [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/deploy/restart [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/emails/customer-return-label.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/emails/plain/customer-return-label.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/gulpconfig.js [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/gulpfile.js [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-activator.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-ajax.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-core.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-daily-docket.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-deactivator.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-i18n.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-loader.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-order.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-package.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-product.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-return-email.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-shipment.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-webservice.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/deprecated.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/functions-chronopost-helpers.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/index.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/products/chrono10.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/products/chrono13.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/products/chrono18.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/products/chronoclassic.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/products/chronoexpress.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/products/chronoprecise.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/products/chronorelais.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/products/chronorelaiseurope.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/includes/products/chronosameday.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/index.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/languages/chronopost-fr_FR.mo [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/languages/chronopost-fr_FR.po [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/languages/chronopost.pot [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/package-lock.json [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/package.json [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/class-chronopost-public.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/css/chronopost-public.css [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/img/Logo-Chronopost.jpg [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/img/Picto_Chrono_Relais.png [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/img/ac.png [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/img/arrows.png [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/img/chronopost-horizontal.png [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/img/chronopost.png [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/img/chronorelais.png [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/img/close.gif [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/img/eco.png [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/img/home.png [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/img/ico_ac_shaded.gif [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/img/loader.svg [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/index.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/js/chronomap.plugin.js [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/js/chronopost-public.js [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/js/chronoprecise.plugin.js [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/partials/chronopost-public-display.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/scss/chronopost-public.scss [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/vendor/fancybox/jquery.fancybox.css [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/vendor/fancybox/jquery.fancybox.js [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/vendor/fancybox/jquery.fancybox.min.css [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/public/vendor/fancybox/jquery.fancybox.min.js [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/templates/chronoprecise.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/templates/chronorelais.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/uninstall.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/autoload.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/composer/ClassLoader.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/composer/LICENSE [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/composer/autoload_classmap.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/composer/autoload_namespaces.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/composer/autoload_psr4.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/composer/autoload_real.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/composer/autoload_static.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/composer/installed.json [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/FAQ.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/README.md [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/changelog.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/composer.json [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/__construct.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/acceptpagebreak.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/addfont.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/addlink.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/addpage.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/aliasnbpages.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/cell.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/close.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/error.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/footer.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/getpageheight.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/getpagewidth.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/getstringwidth.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/getx.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/gety.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/header.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/image.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/index.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/line.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/link.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/ln.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/multicell.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/output.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/pageno.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/rect.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setauthor.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setautopagebreak.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setcompression.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setcreator.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setdisplaymode.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setdrawcolor.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setfillcolor.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setfont.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setfontsize.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setkeywords.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setleftmargin.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setlinewidth.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setlink.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setmargins.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setrightmargin.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setsubject.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/settextcolor.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/settitle.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/settopmargin.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setx.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setxy.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/sety.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/text.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/write.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/courier.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/courierb.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/courierbi.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/courieri.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/helvetica.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/helveticab.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/helveticabi.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/helveticai.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/symbol.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/times.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/timesb.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/timesbi.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/timesi.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/zapfdingbats.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/fpdf.css [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/fpdf.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/install.txt [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/license.txt [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1250.map [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1251.map [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1252.map [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1253.map [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1254.map [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1255.map [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1257.map [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1258.map [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp874.map [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-1.map [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-11.map [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-15.map [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-16.map [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-2.map [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-4.map [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-5.map [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-7.map [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-9.map [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/koi8-r.map [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/koi8-u.map [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/makefont.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/ttfparser.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/20k_c1.txt [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/20k_c2.txt [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/calligra.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/calligra.ttf [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/calligra.z [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/countries.txt [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/index.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/logo.png [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/makefont.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto1.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto1.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto2.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto2.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto3.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto3.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto4.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto4.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto5.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto5.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto6.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto6.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto7.htm [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto7.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi-fpdf/LICENSE.txt [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi-fpdf/README.md [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi-fpdf/composer.json [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/LICENSE.txt [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/README.md [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/composer.json [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/FpdfTpl.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/FpdfTplTrait.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/Fpdi.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/FpdiException.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/FpdiTrait.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/CrossReference/AbstractReader.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/CrossReference/CrossReference.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/CrossReference/CrossReferenceException.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/CrossReference/FixedReader.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/CrossReference/LineReader.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/CrossReference/ReaderInterface.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/Ascii85.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/Ascii85Exception.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/AsciiHex.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/FilterException.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/FilterInterface.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/Flate.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/FlateException.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/Lzw.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/LzwException.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/PdfParser.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/PdfParserException.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/StreamReader.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Tokenizer.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfArray.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfBoolean.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfDictionary.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfHexString.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfIndirectObject.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfIndirectObjectReference.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfName.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfNull.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfNumeric.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfStream.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfString.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfToken.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfType.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfTypeException.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfReader/DataStructure/Rectangle.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfReader/Page.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfReader/PageBoundaries.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfReader/PdfReader.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfReader/PdfReaderException.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/Tcpdf/Fpdi.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/TcpdfFpdi.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/Tfpdf/FpdfTpl.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/Tfpdf/Fpdi.php [new file with mode: 0755]
wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/autoload.php [new file with mode: 0755]
wp-content/themes/physioassist/resources/assets/styles/components/forms.styl
wp-content/themes/physioassist/resources/assets/styles/components/woocommerce.styl

diff --git a/wp-content/languages/wpml/admin_texts_woocommerce_price_decimal_sep-de_DE.mo b/wp-content/languages/wpml/admin_texts_woocommerce_price_decimal_sep-de_DE.mo
new file mode 100755 (executable)
index 0000000..6829f7e
Binary files /dev/null and b/wp-content/languages/wpml/admin_texts_woocommerce_price_decimal_sep-de_DE.mo differ
diff --git a/wp-content/languages/wpml/admin_texts_woocommerce_price_decimal_sep-fr_FR.mo b/wp-content/languages/wpml/admin_texts_woocommerce_price_decimal_sep-fr_FR.mo
new file mode 100755 (executable)
index 0000000..6829f7e
Binary files /dev/null and b/wp-content/languages/wpml/admin_texts_woocommerce_price_decimal_sep-fr_FR.mo differ
diff --git a/wp-content/languages/wpml/admin_texts_woocommerce_price_thousand_sep-de_DE.mo b/wp-content/languages/wpml/admin_texts_woocommerce_price_thousand_sep-de_DE.mo
new file mode 100755 (executable)
index 0000000..3169c3b
Binary files /dev/null and b/wp-content/languages/wpml/admin_texts_woocommerce_price_thousand_sep-de_DE.mo differ
diff --git a/wp-content/languages/wpml/admin_texts_woocommerce_price_thousand_sep-fr_FR.mo b/wp-content/languages/wpml/admin_texts_woocommerce_price_thousand_sep-fr_FR.mo
new file mode 100755 (executable)
index 0000000..3169c3b
Binary files /dev/null and b/wp-content/languages/wpml/admin_texts_woocommerce_price_thousand_sep-fr_FR.mo differ
diff --git a/wp-content/plugins/woocommerce-chronopost/.gitignore b/wp-content/plugins/woocommerce-chronopost/.gitignore
new file mode 100755 (executable)
index 0000000..15043fb
--- /dev/null
@@ -0,0 +1,135 @@
+
+# Created by https://www.gitignore.io/api/osx,sass,node,linux,windows
+
+### Linux ###
+*~
+
+# temporary files which can be created if a process still has a handle open of a deleted file
+.fuse_hidden*
+
+# KDE directory preferences
+.directory
+
+# Linux trash folder which might appear on any partition or disk
+.Trash-*
+
+# .nfs files are created when an open file is removed but is still being accessed
+.nfs*
+
+### Node ###
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (http://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# Typescript v1 declaration files
+typings/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+
+
+### OSX ###
+*.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+### Sass ###
+.sass-cache/
+*.css.map
+
+### Windows ###
+# Windows thumbnail cache files
+Thumbs.db
+ehthumbs.db
+ehthumbs_vista.db
+
+# Folder config file
+Desktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+# End of https://www.gitignore.io/api/osx,sass,node,linux,windows
+
+#PhpStorm
+.idea
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/LICENSE.txt b/wp-content/plugins/woocommerce-chronopost/LICENSE.txt
new file mode 100755 (executable)
index 0000000..ecbc059
--- /dev/null
@@ -0,0 +1,339 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/README.txt b/wp-content/plugins/woocommerce-chronopost/README.txt
new file mode 100755 (executable)
index 0000000..4983b25
--- /dev/null
@@ -0,0 +1,114 @@
+=== Plugin Name ===
+Contributors: (this should be a list of wordpress.org userid's)
+Donate link: https://www.adexos.fr
+Tags: comments, spam
+Requires at least: 3.0.1
+Tested up to: 3.4
+Stable tag: 4.3
+License: GPLv2 or later
+License URI: http://www.gnu.org/licenses/gpl-2.0.html
+
+Here is a short description of the plugin.  This should be no more than 150 characters.  No markup here.
+
+== Description ==
+
+This is the long description.  No limit, and you can use Markdown (as well as in the following sections).
+
+For backwards compatibility, if this section is missing, the full length of the short description will be used, and
+Markdown parsed.
+
+A few notes about the sections above:
+
+*   "Contributors" is a comma separated list of wp.org/wp-plugins.org usernames
+*   "Tags" is a comma separated list of tags that apply to the plugin
+*   "Requires at least" is the lowest version that the plugin will work on
+*   "Tested up to" is the highest version that you've *successfully used to test the plugin*. Note that it might work on
+higher versions... this is just the highest one you've verified.
+*   Stable tag should indicate the Subversion "tag" of the latest stable version, or "trunk," if you use `/trunk/` for
+stable.
+
+    Note that the `readme.txt` of the stable tag is the one that is considered the defining one for the plugin, so
+if the `/trunk/readme.txt` file says that the stable tag is `4.3`, then it is `/tags/4.3/readme.txt` that'll be used
+for displaying information about the plugin.  In this situation, the only thing considered from the trunk `readme.txt`
+is the stable tag pointer.  Thus, if you develop in trunk, you can update the trunk `readme.txt` to reflect changes in
+your in-development version, without having that information incorrectly disclosed about the current stable version
+that lacks those changes -- as long as the trunk's `readme.txt` points to the correct stable tag.
+
+    If no stable tag is provided, it is assumed that trunk is stable, but you should specify "trunk" if that's where
+you put the stable version, in order to eliminate any doubt.
+
+== Installation ==
+
+This section describes how to install the plugin and get it working.
+
+e.g.
+
+1. Upload `chronopost.php` to the `/wp-content/plugins/` directory
+1. Activate the plugin through the 'Plugins' menu in WordPress
+1. Place `<?php do_action('plugin_name_hook'); ?>` in your templates
+
+== Frequently Asked Questions ==
+
+= A question that someone might have =
+
+An answer to that question.
+
+= What about foo bar? =
+
+Answer to foo bar dilemma.
+
+== Screenshots ==
+
+1. This screen shot description corresponds to screenshot-1.(png|jpg|jpeg|gif). Note that the screenshot is taken from
+the /assets directory or the directory that contains the stable readme.txt (tags or trunk). Screenshots in the /assets
+directory take precedence. For example, `/assets/screenshot-1.png` would win over `/tags/4.3/screenshot-1.png`
+(or jpg, jpeg, gif).
+2. This is the second screen shot
+
+== Changelog ==
+
+= 1.0 =
+* A change since the previous version.
+* Another change.
+
+= 0.5 =
+* List versions from most recent at top to oldest at bottom.
+
+== Upgrade Notice ==
+
+= 1.0 =
+Upgrade notices describe the reason a user should upgrade.  No more than 300 characters.
+
+= 0.5 =
+This version fixes a security related bug.  Upgrade immediately.
+
+== Arbitrary section ==
+
+You may provide arbitrary sections, in the same format as the ones above.  This may be of use for extremely complicated
+plugins where more information needs to be conveyed that doesn't fit into the categories of "description" or
+"installation."  Arbitrary sections will be shown below the built-in sections outlined above.
+
+== A brief Markdown Example ==
+
+Ordered list:
+
+1. Some feature
+1. Another feature
+1. Something else about the plugin
+
+Unordered list:
+
+* something
+* something else
+* third thing
+
+Here's a link to [WordPress](http://wordpress.org/ "Your favorite software") and one to [Markdown's Syntax Documentation][markdown syntax].
+Titles are optional, naturally.
+
+[markdown syntax]: http://daringfireball.net/projects/markdown/syntax
+            "Markdown is what the parser uses to process much of the readme file"
+
+Markdown uses email style notation for blockquotes and I've been told:
+> Asterisks for *emphasis*. Double it up  for **strong**.
+
+`<?php code(); // goes in backticks ?>`
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/class-chronopost-admin-settings.php b/wp-content/plugins/woocommerce-chronopost/admin/class-chronopost-admin-settings.php
new file mode 100755 (executable)
index 0000000..7a5b3a5
--- /dev/null
@@ -0,0 +1,25 @@
+<?php
+
+/**
+ * The admin-specific functionality of the plugin.
+ *
+ * @link       https://www.adexos.fr
+ * @since      1.0.0
+ *
+ * @package    Chronopost
+ * @subpackage Chronopost/admin
+ */
+
+/**
+ * The admin-specific functionality of the plugin.
+ *
+ * Defines the plugin name, version, and two examples hooks for how to
+ * enqueue the admin-specific stylesheet and JavaScript.
+ *
+ * @package    Chronopost
+ * @subpackage Chronopost/admin
+ * @author     Adexos <contact@adexos.fr>
+ */
+class Chronopost_Admin_Settings
+{
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/class-chronopost-admin.php b/wp-content/plugins/woocommerce-chronopost/admin/class-chronopost-admin.php
new file mode 100755 (executable)
index 0000000..127531c
--- /dev/null
@@ -0,0 +1,616 @@
+<?php
+
+/**
+ * The admin-specific functionality of the plugin.
+ *
+ * @link       https://www.adexos.fr
+ * @since      1.0.0
+ *
+ * @package    Chronopost
+ * @subpackage Chronopost/admin
+ */
+
+/**
+ * The admin-specific functionality of the plugin.
+ *
+ * Defines the plugin name, version, and two examples hooks for how to
+ * enqueue the admin-specific stylesheet and JavaScript.
+ *
+ * @package    Chronopost
+ * @subpackage Chronopost/admin
+ * @author     Adexos <contact@adexos.fr>
+ */
+class Chronopost_Admin
+{
+
+    /**
+     * The ID of this plugin.
+     *
+     * @since    1.0.0
+     * @access   private
+     * @var      string    $plugin_name    The ID of this plugin.
+     */
+    private $plugin_name;
+
+    /**
+     * The version of this plugin.
+     *
+     * @since    1.0.0
+     * @access   private
+     * @var      string    $version    The current version of this plugin.
+     */
+    private $version;
+
+    /**
+     * Initialize the class and set its properties.
+     *
+     * @since    1.0.0
+     * @param      string    $plugin_name       The name of this plugin.
+     * @param      string    $version    The version of this plugin.
+     */
+    public function __construct($plugin_name, $version)
+    {
+        $this->plugin_name = $plugin_name;
+        $this->version = $version;
+
+        require_once plugin_dir_path(dirname(__FILE__)) . 'admin/partials/chronopost-admin-display.php';
+    }
+
+    /**
+     * Register the stylesheets for the admin area.
+     *
+     * @since    1.0.0
+     */
+    public function enqueue_styles()
+    {
+
+        /**
+         * This function is provided for demonstration purposes only.
+         *
+         * An instance of this class should be passed to the run() function
+         * defined in Chronopost_Loader as all of the hooks are defined
+         * in that particular class.
+         *
+         * The Chronopost_Loader will then create the relationship
+         * between the defined hooks and the functions defined in this
+         * class.
+         */
+
+
+        wp_enqueue_style('wickedpicker_css', plugin_dir_url(__FILE__) . 'vendor/wickedpicker/dist/wickedpicker.min.css', array(), $this->version, 'all');
+        wp_enqueue_style('woocommerce_admin', plugins_url().'/woocommerce/assets/css/admin.css', $this->version, 'all');
+        wp_enqueue_style($this->plugin_name, plugin_dir_url(__FILE__) . 'css/chronopost-admin.css', array(), $this->version, 'all');
+    }
+
+    /**
+     * Register the JavaScript for the admin area.
+     *
+     * @since    1.0.0
+     */
+    public function enqueue_scripts()
+    {
+
+        /**
+         * This function is provided for demonstration purposes only.
+         *
+         * An instance of this class should be passed to the run() function
+         * defined in Chronopost_Loader as all of the hooks are defined
+         * in that particular class.
+         *
+         * The Chronopost_Loader will then create the relationship
+         * between the defined hooks and the functions defined in this
+         * class.
+         */
+        $wp_locale = new WP_Locale;
+        wp_enqueue_style('woocommerce_admin_styles');
+        wp_enqueue_script('wickedpicker_js', plugin_dir_url(__FILE__) . 'vendor/wickedpicker/dist/wickedpicker.min.js', array( 'jquery' ), $this->version, false);
+        wp_enqueue_script($this->plugin_name, plugin_dir_url(__FILE__) . 'js/chronopost-admin.js', array( 'jquery', 'wickedpicker_js' ), $this->version, false);
+        wp_localize_script(
+            'chronopost',
+            'Chronopost',
+            array(
+                'ajaxurl' => admin_url('admin-ajax.php'),
+                'chrono_nonce' => wp_create_nonce('chronopost_ajax'),
+                'select_time' => __('Select a time', 'chronopost'),
+                'weekday' => ($wp_locale->weekday),
+                'to' => __('To', 'chronopost'),
+                'from' => __('From', 'chronopost'),
+                'min_weight' => __('Min weight', 'chronopost'),
+                'max_weight' => __('Max weight', 'chronopost'),
+                'shipping_rate' => __('Shipping Rate', 'chronopost'),
+                'delete_rate' => __('Delete selected rates', 'chronopost'),
+                'add_rate' => __('Add new rate', 'chronopost')
+            )
+        );
+    }
+
+       /**
+        * Run all upgrade scripts
+        */
+    public function update_db_check() {
+           $installed_ver = get_option( "chrono_db_version", '1.0.0' );
+
+        if (version_compare($installed_ver, '1.1.0', '<')) {
+            $this->upgrade_1_1_0();
+        }
+
+    }
+
+       /**
+        * We need to transform shipments data for new multishipping feature
+        */
+    protected function upgrade_1_1_0()
+    {
+        // Loop chronopost orders
+           $_orders = WC_Chronopost_Order::get_orders();
+           while( $_orders->have_posts() ) {
+                   $should_update = false;
+                   $_orders->the_post();
+                   $_order = new WC_Order( get_the_ID() );
+                   $shipment_datas = chrono_get_shipment_datas($_order->get_id());
+                   $new_shipment_datas = array();
+                   foreach ( $shipment_datas as $shipment_data ) {
+                           if ( isset( $shipment_data['_pdf_buffer'] ) ) {
+                                   $new_shipment_datas[] = array(
+                                           '_reservation_number' => null,
+                                           '_shipping_method_id' => $shipment_data['_shipping_method_id'],
+                                           '_parcels'            => array( $shipment_data )
+                                   );
+                                   $should_update        = true;
+                           }
+                   }
+            if ($should_update) {
+                   update_post_meta($_order->get_id(), '_shipment_datas', $new_shipment_datas);
+            }
+        }
+
+           update_option( "chrono_db_version", '1.1.0' );
+    }
+
+    /**
+    *  Add a custom email to the list of emails WooCommerce should load
+    *
+    * @since 0.1
+    * @param array $email_classes available email classes
+    * @return array filtered available email classes
+    */
+    public function add_return_label_woocommerce_email($email_classes)
+    {
+        require_once CHRONO_PLUGIN_PATH. 'includes/class-chronopost-return-email.php';
+        
+        // add the email class to the list of email classes that WooCommerce loads
+        $email_classes['WC_Return_Label_Email'] = new WC_Return_Label_Email();
+        
+        return $email_classes;
+    }
+
+    public function chrono_order_meta_box($order_id)
+    {
+        $screen = get_current_screen();
+        if ($screen->action != 'add') {
+            add_meta_box(
+                'chrono_meta_box',
+                __('Chronopost', 'chronopost'),
+                array($this, 'chrono_order_meta_box_callback'),
+                'shop_order',
+                'side'
+            );
+        }
+    }
+
+    public function chrono_order_meta_box_callback($order)
+    {
+        global $wpdb;
+        $prefixe = $wpdb->prefix;
+        $order_id = $order->ID;
+
+        $is_chronopost_method = false;
+
+        $_order = new WC_Order($order->ID);
+
+        $order_shipping_method = $_order->get_shipping_methods();
+
+        if ($order_shipping_method) {
+            $shipping_method = reset($order_shipping_method);
+            $shipping_method_id = $shipping_method->get_method_id();
+            $shippingMethodAllow = array_keys(get_option('chronopost_shipping_methods'));
+            $is_chronopost_method = in_array($shipping_method_id, $shippingMethodAllow);
+        }
+
+        if ($is_chronopost_method) {
+            // Display the right box
+            wp_nonce_field('actions_mr_meta_box', 'shipment_list_nonce');
+            $shipment_datas = chrono_get_shipment_datas($order->ID); ?>
+            <div id="order-<?php echo $order->ID; ?>">
+                <span class="spinner"></span>
+                <small class="meta"><em><?php echo $shipping_method->get_name(); ?></em></small>
+            </div>
+            <table style="margin-top: 10px" class="wp-list-table widefat fixed">
+                <tbody>
+                    <tr>
+                        <td colspan="2">
+                            <h4 style="text-align:center"><?php _e('Shipment', 'chronopost') ?></h4>
+                            <div>
+                            <?php if ($shipment_datas): $track_list = array();  ?>
+                                <?php foreach ($shipment_datas as $shipment): ?>
+                                               <?php foreach($shipment['_parcels'] as $parcel): ?>
+                                    <?php
+                                        $track_list[] = '<a target="_blank" href="' . chrono_get_tracking_url($parcel['_skybill_number'], $shipping_method_id) .'">'. $parcel['_skybill_number'] .'</a>';
+                                    ?>
+                                    <?php endforeach; ?>
+                                <?php endforeach; ?>
+                                <div class="chrono-tracklist">
+                                    <?php echo implode(', ', $track_list); ?>
+                                </div>
+                                <a class="button button-small chrono-print" target="_blank" href="<?php echo admin_url('admin.php?post='.$_order->get_id().'&action=edit&chronoaction=view-label&order='.$_order->get_id().'&shipment_nonce='.wp_create_nonce('shipment_list_nonce')); ?>"><?php echo _n('Download label', 'Download labels', count($shipment_datas), 'chronopost'); ?></a>
+                                <?php endif; ?>
+                            </div>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td class="manage-colum"><?php _e("Use contract", 'chronopost') ?></td>
+                        <td class="column-contract">
+                               <?php
+                               $shipping_method_contract = '';
+                               $shipping_method_instance = chrono_get_shipping_method_by_id($shipping_method_id);
+                               if (isset($shipping_method_instance->settings['contract'])) {
+                                       $shipping_method_contract = $shipping_method_instance->settings['contract'];
+                               }
+                               $contracts = chrono_get_all_contracts();
+                               // Pourrait être surchargé par l'utilisateur
+                               $order_contract = get_post_meta( $_order->get_id(), '_use_contract', true);
+                               if ($order_contract) {
+                                       $shipping_method_contract = $order_contract;
+                               }
+                               ?>
+                            <select name="use-contract" data-order-id="<?php echo $_order->get_id(); ?>" <?php echo $shipment_datas ? 'disabled="disabled"' : '' ?>>
+                                       <?php foreach ($contracts as $contract): ?>
+                                    <option value="<?php echo $contract['number'] ?>"
+                                                       <?php echo ($shipping_method_contract == $contract['number']) ? 'selected="selected"' : ''?>>
+                                                       <?php echo $contract['label'] ?>
+                                    </option>
+                                       <?php endforeach; ?>
+                            </select>
+                        </td>
+                    </tr>
+                    <?php if (chrono_get_option('enable', 'insurance') == 'yes'): ?>
+                    <?php
+                        $insurance_enable = get_post_meta($_order->get_id(), '_insurance_enable', true) == '' ? 'yes' : get_post_meta($_order->get_id(), '_insurance_enable', true);
+                        $insurance_amount = (float)get_post_meta($_order->get_id(), '_insurance_amount', true);
+
+                        $totalAdValorem = 0;
+                        $maxAmount = 20000;
+                        $adValoremAmount = (float)chrono_get_option('min_amount', 'insurance');
+
+                        foreach ($_order->get_items() as $item) {
+                            $totalAdValorem += $item->get_total() + (float)$item->get_total_tax() * $item->get_quantity();
+                        }
+                                                
+                        $totalAdValorem = $insurance_amount > 0  ? $insurance_amount : $totalAdValorem;
+
+                        $totalAdValorem = min($totalAdValorem, $maxAmount);
+
+                        if ($totalAdValorem < $adValoremAmount) {
+                            $totalAdValorem = 0;
+                        } ?>
+                    <tr>
+                        <td class="manage-colum column-order_date"><?php _e("Advalorem insurance", 'chronopost') ?></td>
+                        <td class="insurance-enable">
+                            <select name="insurance[enable]" data-order-id="<?php echo $_order->get_id(); ?>" data-action="update_insurance_enable">
+                                <option value="no"<?php echo $insurance_enable == 'no' ? ' selected="selected"' : ''; ?>><?php _e('No', 'chronopost'); ?></option>
+                                <option value="yes"<?php echo $insurance_enable == 'yes' ? ' selected="selected"' : ''; ?>><?php _e('Yes', 'chronopost'); ?></option>
+                            </select>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td class="manage-colum column-order_date"><?php _e('Insurance amount'); ?></td>
+                        <td class="insurance-amount">
+                            <input type="number" value="<?php echo $totalAdValorem; ?>" step="0.01"
+                                   id="insurance_amount" name="insurance[amount]"
+                                   data-order-id="<?php echo $_order->get_id(); ?>"
+                                   data-action="update_insurance_amount">
+                        </td>
+                    </tr>
+                    <?php endif; ?>
+                    <tr>
+                        <td class="manage-colum column-order_date"><?php _e("Ship On Saturday", 'chronopost') ?></td>
+                        <td class="ship-on-saturday">
+                            <?php
+                                $saturday_active = chrono_get_method_settings($shipping_method_id, 'deliver_on_saturday') == 'yes' ? true : false;
+                                $ship_saturday = get_post_meta($_order->get_id(), '_ship_on_saturday', true);
+                                if ($ship_saturday == '') {
+                                    $ship_saturday = chrono_is_sending_day() ? 'yes' : 'no';
+                                }
+                            ?>
+                            <?php if ($saturday_active && !chrono_is_shipping_methods_without_saturday($shipping_method_id)): ?>
+                            <select name="ship-saturday" data-order-id="<?php echo $_order->get_id(); ?>" data-action="update_saturday_shipping">
+                                <option value="no"<?php echo $ship_saturday == 'no' ? ' selected="selected"' : ''; ?>><?php _e('No', 'chronopost'); ?></option>
+                                <option value="yes"<?php echo $ship_saturday == 'yes' ? ' selected="selected"' : ''; ?>><?php _e('Yes', 'chronopost'); ?></option>
+                            </select>
+                            <?php else: ?>
+                                <?php _e('Not active', 'chronopost'); ?>
+                            <?php endif; ?>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td class="manage-colum column-order_date"><?php _e("Parcels number", 'chronopost') ?></td>
+                        <td class="parcels-number">
+                            <input name="parcels" type="number" value="<?php echo chrono_get_parcels_number($_order->get_id()) ?>"
+                                   min="1" data-action="update_parcels"
+                                   data-order-id="<?php echo $_order->get_id(); ?>" />
+                        </td>
+                    </tr>
+                    <tr>
+                        <td class="parcels-dimensions column-dimensions" colspan="2">
+                               <div class="title"><?php _e("Parcels dimensions", 'chronopost') ?></div>
+                               <?php
+                               $dimensions = array('weight', 'height', 'length', 'width');
+                               $defaultWeight = Chronopost_Package::getTotalWeight($_order->get_items(), false);
+                               $parcels_dimensions = chrono_get_parcels_dimensions($_order->get_id());
+                               if (!$parcels_dimensions) {
+                                   $parcels_dimensions = array( 1 => array(
+                                    'weight' => $defaultWeight,
+                                    'height' => 1,
+                                    'length' => 1,
+                                    'width' => 1
+                                ));
+                            }
+                               ?>
+                            <?php foreach ($parcels_dimensions as $i => $parcel_dimensions): ?>
+                                <div class="package-dimensions <?php echo $i == 1 ? 'default' : '' ?>">
+                                       <?php foreach ($parcel_dimensions as $dimension => $value) : ?>
+                                    <?php
+                                    $max_weight = $shipping_method->get_method_id() == 'chronorelais' || $shipping_method->get_method_id() == 'chronorelaiseurope' ? 20 : 30;
+                                    ?>
+                                    <label><span><?php echo ucfirst(__($dimension, 'chronopost')) ?></span>
+                                        <input name="parcels_dimensions[1][<?php echo $dimension ?>]" type="number" class="default"
+                                               placeholder="<?php echo ucfirst(__($dimension, 'chronopost')) ?>"
+                                               value="<?php echo $value ?>"
+                                               min="1"
+                                                <?php echo $dimension == 'weight' ? 'max="' . $max_weight . '"' : ''; ?>
+                                               data-order-id="<?php echo $_order->get_id(); ?>" />
+                                    </label>
+                                <?php endforeach; ?>
+                                </div>
+                            <?php endforeach; ?>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td style="text-align:center" colspan="2">
+                            <a class="button button-primary chrono-generate-label" data-order-id="<?php echo $_order->get_id(); ?>" href="<?php echo admin_url('admin.php?post='.$_order->get_id().'&action=edit&chronoaction=print-label&order='.$_order->get_id().'&shipment_nonce='.wp_create_nonce('shipment_list_nonce')); ?>"><?php echo __('Generate label', 'chronopost'); ?></a>
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+            <?php if ($shipment_datas): ?>
+            <table style="margin-top: 10px" class="wp-list-table widefat fixed">
+                <tbody>
+                    <tr>
+                        <td colspan="2">
+                            <h4 style="text-align:center"><?php _e('Return label', 'chronopost') ?></h4>
+                            <?php foreach ($shipment_datas as $shipment): ?>
+                                           <?php foreach($shipment['_parcels'] as $parcel): ?>
+                                <div style="text-align:center;">
+                                <?php
+                                    $pdf_path = chrono_get_media_path().'chronopost-etiquette-retour-' . $parcel['_skybill_number'] . '.pdf';
+                                ?>
+                                <?php if (file_exists($pdf_path)): ?>
+                                    <a class="button button-small" target="_blank" href="<?php echo str_replace(chrono_get_media_path(), chrono_get_media_url(), $pdf_path); ?>"><?php _e('Return label', 'chronopost'); ?> <?php echo $parcel['_skybill_number']; ?></a>
+                                <?php else: ?>
+                                    <a class="button button-small button-primary" href="<?php echo admin_url('post.php?post='.$_order->get_id().'&action=edit&chronoaction=return-label&order='.$_order->get_id().'&skybill_id=' . $parcel['_skybill_number'] . '&shipment_nonce='.wp_create_nonce('shipment_list_nonce')); ?>"><?php _e('Generate return label', 'chronopost'); ?> <?php echo $parcel['_skybill_number']; ?></a>
+                                <?php endif; ?>
+                                </div>
+                                <?php endforeach; ?>
+                            <?php endforeach; ?>
+                        </td>
+                    </tr>
+                </tbody>
+            </table>
+        <?php endif; ?>
+        <?php
+        }
+    }
+}
+
+
+function ajax_update_saturday_shipping()
+{
+    if (update_post_meta($_POST['order_id'], '_ship_on_saturday', $_POST['new_value'])) {
+        $response = array(
+            'status' => 'success'
+        );
+    } else {
+        $response = array(
+            'status' => 'error'
+        );
+    }
+    echo wp_send_json($response);
+}
+
+add_action('wp_ajax_nopriv_update_saturday_shipping', 'ajax_update_saturday_shipping');
+add_action('wp_ajax_update_saturday_shipping', 'ajax_update_saturday_shipping');
+
+function ajax_update_parcels()
+{
+       $currentValue = get_post_meta($_POST['order_id'], '_parcels_number', true);
+       if ($_POST['new_value'] == '') {
+               delete_post_meta($_POST['order_id'], '_parcels_number');
+               $response = array(
+                       'status' => 'success'
+               );
+       } elseif ($currentValue == $_POST['new_value'] || update_post_meta($_POST['order_id'], '_parcels_number', $_POST['new_value'])) {
+               $response = array(
+                       'status' => 'success'
+               );
+       } else {
+               $response = array(
+                       'status' => 'error'
+               );
+       }
+       echo wp_send_json($response);
+}
+
+add_action('wp_ajax_nopriv_update_dimensions', 'ajax_update_dimensions');
+add_action('wp_ajax_update_dimensions', 'ajax_update_dimensions');
+
+function ajax_update_dimensions()
+{
+    $params = array();
+    parse_str($_POST['new_value'], $params);
+    foreach ($params['parcels_dimensions'] AS &$dimensions) {
+           array_walk($dimensions, function(&$value, &$key) {
+                   $value = str_replace(',', '.', $value);
+           });
+    }
+       $params = $params['parcels_dimensions'];
+
+    // Vérification des données
+    // 1. Le poids maximal autorisé est 20 Kg pour le chrono relais et 30 Kg pour tous les autres produits.
+    // 2. Les dimensions maximales autorisées sont 100 cm pour chacunes d’entres elles. Et l'ensemble du colis (L+2H+2l)
+    //    ne doit pas dépasser 250 cm pour les offres Relais. Pour toutes les autres offres, les dimensions maximales
+    //    autorisées sont 150 cm pour chacunes d’entres elles. Et l'ensemble du colis (L+2H+2l) de doit pas dépasser 300 cm.
+    $_order = new WC_Order($_POST['order_id']);
+       $order_shipping_method = $_order->get_shipping_methods();
+       $shipping_method_id = '';
+       if ($order_shipping_method) {
+               $shipping_method = reset($order_shipping_method);
+               $shipping_method_id = $shipping_method->get_method_id();
+       }
+
+       $check = chrono_check_packages_dimensions($shipping_method_id, $params);
+       if ($check !== true) {
+               wp_send_json(array(
+                       'status' => 'error',
+                       'message' => $check
+               ));
+    }
+
+    $currentValue = json_encode(chrono_get_parcels_dimensions($_POST['order_id']));
+    $newValue = json_encode($params);
+       if (empty($params)) {
+               delete_post_meta($_POST['order_id'], '_parcels_dimensions');
+               $response = array(
+                       'status' => 'success'
+               );
+       } elseif ($currentValue == $newValue || update_post_meta($_POST['order_id'], '_parcels_dimensions', $newValue)) {
+               $response = array(
+                       'status' => 'success'
+               );
+       } else {
+               $response = array(
+                       'status' => 'error'
+               );
+       }
+       echo wp_send_json($response);
+}
+
+add_action('wp_ajax_nopriv_update_parcels', 'ajax_update_parcels');
+add_action('wp_ajax_update_parcels', 'ajax_update_parcels');
+
+function ajax_update_insurance_amount()
+{
+    if ($_POST['new_value'] == '') {
+        delete_post_meta($_POST['order_id'], '_insurance_amount');
+        $response = array(
+            'status' => 'success'
+        );
+    } elseif (update_post_meta($_POST['order_id'], '_insurance_amount', $_POST['new_value'])) {
+        $response = array(
+            'status' => 'success'
+        );
+    } else {
+        $response = array(
+            'status' => 'error'
+        );
+    }
+    echo wp_send_json($response);
+}
+
+add_action('wp_ajax_nopriv_update_insurance_amount', 'ajax_update_insurance_amount');
+add_action('wp_ajax_update_insurance_amount', 'ajax_update_insurance_amount');
+
+add_action('wp_ajax_nopriv_test_login', 'ajax_chrono_test_login');
+add_action('wp_ajax_test_login', 'ajax_chrono_test_login');
+
+function ajax_chrono_test_login()
+{
+    if (!isset($_POST['chrono_nonce'])) {
+        return false;
+    }
+    $nonce = $_POST['chrono_nonce'];
+    
+    // check to see if the submitted nonce matches with the
+    // generated nonce we created earlier
+    if (! wp_verify_nonce($nonce, 'chronopost_ajax')) {
+        die('Busted!');
+    }
+
+    $response = chrono_check_login($_POST['account'], $_POST['password']);
+
+    echo wp_send_json($response);
+}
+
+function chrono_check_login($account, $password) {
+    $ws = new Chronopost_Webservice();
+    $params = array(
+        'accountNumber' => $account,
+        'password' => $password,
+        'depCode' => '92500',
+        'arrCode' => '75001',
+        'weight' => '1',
+        'productCode' => '1',
+        'type' => 'D'
+    );
+    $res = $ws->getQuickcost($params);
+
+    if ($res->errorCode === 0) {
+        $response = array(
+            'status' => 'success',
+            'message' => __('Valid username or password', 'chronopost')
+        );
+    } elseif ($res->errorCode === 3) {
+        $response = array(
+            'status' => 'error',
+        );
+    } else {
+        $response = array(
+            'status' => 'error',
+            'message' => __('A system error occured. Please contact the Chronopost support if the problem persists.', 'chronopost')
+        );
+    }
+    return $response;
+}
+
+function ajax_update_insurance_enable()
+{
+    if (update_post_meta($_POST['order_id'], '_insurance_enable', $_POST['new_value'])) {
+        $response = array(
+            'status' => 'success'
+        );
+    } else {
+        $response = array(
+            'status' => 'error'
+        );
+    }
+    echo wp_send_json($response);
+}
+
+add_action('wp_ajax_nopriv_update_insurance_enable', 'ajax_update_insurance_enable');
+add_action('wp_ajax_update_insurance_enable', 'ajax_update_insurance_enable');
+
+function ajax_update_order_contract()
+{
+       if (update_post_meta($_POST['order_id'], '_use_contract', $_POST['use_contract'])) {
+               $response = array(
+                       'status' => 'success'
+               );
+       } else {
+               $response = array(
+                       'status' => 'error'
+               );
+       }
+       echo wp_send_json($response);
+}
+
+add_action('wp_ajax_nopriv_update_order_contract', 'ajax_update_order_contract');
+add_action('wp_ajax_update_order_contract', 'ajax_update_order_contract');
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/css/chronopost-admin.css b/wp-content/plugins/woocommerce-chronopost/admin/css/chronopost-admin.css
new file mode 100755 (executable)
index 0000000..9476280
--- /dev/null
@@ -0,0 +1,327 @@
+/**
+ * All of the CSS for your admin-specific functionality should be
+ * included in this file.
+ */
+
+.toplevel_page_chronopost #wpbody-content h1 {
+  margin-top: 20px;
+  width: 339px;
+  height: 77px;
+  text-indent: -9999px;
+  background: transparent url(../img/logo.png);
+}
+
+ .woocommerce table.form-table input.regular-input.small-text {
+   width: 65px;
+ }
+
+ .woocommerce .wickedpicker__title {
+   display: none;
+ }
+
+ .form-table td fieldset  #woocommerce_chronoprecise_delivery_date_day_nbr ~ * {
+   margin-left: 5px !important;
+ }
+
+ .text-addition {
+   display: inline-block;
+   margin: .25em 0 .5em!important;
+ }
+
+ .woocommerce_page_wc-settings .closingslotsrows .add.button::before {
+  font-family: WooCommerce;
+  speak: none;
+  font-weight: 400;
+  font-variant: normal;
+  text-transform: none;
+  line-height: 1;
+  -webkit-font-smoothing: antialiased;
+  margin-right: .618em;
+  content: "";
+  text-decoration: none;
+}
+
+.appointmentrows tr:nth-child(odd) td,
+.closingslotsrows tr:nth-child(odd) td {
+  background-color: #f9f9f9;
+}
+
+.wp-core-ui #shipment-list td input,
+.wp-core-ui #shipment-list td select
+{
+  max-width: 100%;
+}
+
+.wp-core-ui #shipment-list th.column-dimensions {
+  text-transform: capitalize;
+  width: 60px;
+}
+.wp-core-ui #shipment-list .column-dimension input {
+  width: 55px;
+}
+.wp-core-ui #shipment-list .button.button-small {
+  margin-bottom: 5px;
+}
+
+.wp-core-ui #shipment-list .column-parcels {
+  width: 100px;
+}
+.wp-core-ui #shipment-list .column-parcels input {
+  max-width: 100%;
+  width: 80px;
+}
+
+.wp-core-ui #shipment-list .label-printing a,
+.wp-core-ui #shipment-list .return-printing a {
+  min-height: 24px;
+  height: auto;
+  white-space: normal;
+  text-align: center;
+  width: 100%;
+}
+
+.wp-core-ui #shipment-list .column-order_date {
+  max-width: 100px;
+}
+
+.button-outer-wrapper {
+  position: relative;
+  display: inline-block;
+}
+
+.button-outer-wrapper:hover .button-sub-wrapper {
+  display: block;
+}
+
+.button-sub-wrapper{
+  display: none;
+  position: absolute;
+  min-width: 200px;
+  z-index: 77;
+  margin-top: -5px;
+  top: 100%;
+  right: 0;
+  background-color: #fff;
+  border: 1px solid #ddd;
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  padding: 8px;
+  max-height: 300px;
+  overflow: auto;
+}
+
+.wp-core-ui .button-delete {
+  background: #ba0008;
+  border-color: #ba0008 #99002d #99002d;
+  box-shadow: 0 1px 0 #99002d;
+  color: #fff;
+  text-decoration: none;
+  text-shadow: 0 -1px 1px #99002d,
+  1px 0 1px #99002d,
+  0 1px 1px #99002d,
+  -1px 0 1px #99002d;
+}
+
+.wp-core-ui .button-delete.hover,
+.wp-core-ui .button-delete:hover,
+.wp-core-ui .button-delete.focus,
+.wp-core-ui .button-delete:focus {
+  background: #c9001e;
+  border-color: #b00239;
+  color: #fff;
+}
+
+.button-sub-wrapper a {
+  display: block;
+  line-height: 22px;
+  padding: 0 8px 1px;
+  font-size: 11px;
+}
+
+.chrono-tracklist {
+  font-size: 10px;
+}
+
+.has-sub > a:after {
+  content: "\f140";
+  font: normal 20px/1 dashicons;
+  speak: none;
+  display: inline-block;
+  padding: 0;
+  top: -3px;
+  left: -2px;
+  color: #444;
+  line-height: 10px;
+  position: relative;
+  vertical-align: middle;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  text-decoration: none !important;
+  color: #444;
+}
+
+.has-sub {
+  position: relative;
+}
+
+.has-sub > ul {
+  position: absolute;
+  display: none;
+  top: 100%;
+  left: 0;
+  max-width: 200px;
+  background: #fff;
+  border: 1px solid #e1e1e1;
+  margin: 0;
+  padding: 7px 10px;
+  -webkit-box-shadow: 0 3px 5px rgba(0,0,0,0.2);
+  box-shadow: 0 3px 5px rgba(0,0,0,0.2);
+  float: none;
+  z-index: 999;
+}
+
+.has-sub > ul li {
+  display: block;
+} 
+
+.has-sub:hover > ul {
+  display: block;
+}
+
+.woocommerce_page_wc-settings .woocommerce .subsubsub > li > a[href*="&section=chrono"] {
+  display: none;
+}
+
+#insurance_amount {
+  width: 100%;
+}
+
+[class*=chronopost] .hint {
+  padding: 10px 5px;
+  background-color: #f4f9eb;
+  margin: 0 0 15px 0;
+}
+.account-title {
+  font-size: 1.1em; font-weight: bold;
+  padding: 3px 0 0 10px;
+}
+
+[class*=chronopost] .form-table:not(.show-table):first-of-type {
+  display: none;
+}
+.toplevel_page_chronopost #wpbody-content > form {
+  margin-right: 20px;
+}
+
+[class*=chronopost] .form-table {
+  background: #fff;
+  border: 1px solid #ebebeb;
+  margin-bottom: 20px;
+  margin-right: 20px;
+}
+
+[class*=chronopost] h2 {
+  margin-top: 1em;
+  float: left;
+}
+
+.chronopost-notice h2 {
+  float: none;
+}
+
+[class*=chronopost] .button.clean-section {
+  margin-top: 15px;
+  float: right;
+}
+
+.toplevel_page_chronopost .form-table th,
+.chronopost_page_chronopost-imports .form-table th {
+  padding-left: 10px;
+}
+
+.form-table td.testWSLoginResult {
+  padding: 0;
+}
+
+.testWSLogin + .spinner,
+.chrono-alert + .spinner {
+  float: none;
+}
+
+.chrono-alert {
+  display: inline-block;
+  margin-left: 10px;
+  padding: 0 0 7px  0;
+  font-size: 13px;
+}
+
+.chrono-alert-success {
+  color: #46b450;
+}
+
+.chrono-alert-error {
+  color: #dc3232;
+}
+
+.form-table .saturday-slot-table td {
+  padding: 0 10px 0 0;
+}
+
+.saturday-slot-table input {
+  height: 28px;
+  line-height: 1;
+}
+#chrono_meta_box input {
+  max-width: 100%;
+}
+#chrono_meta_box .parcels-dimensions label {
+  display: flex;
+}
+#chrono_meta_box .parcels-dimensions label span,
+#chrono_meta_box .parcels-dimensions label input
+{
+  flex-direction: row;
+  width: 50%;
+}
+
+#chrono_meta_box .package-dimensions {
+  padding: 5px 0;
+  border-bottom: 1px solid #e5e5e5;
+}
+
+.chronopost-import-trackings {
+  padding: 20px;
+  border: 1px solid #ebebeb;
+}
+.chronopost-import-trackings input {
+  margin-left: 20px;
+}
+.chronopost-import-trackings label {
+  display: block;
+  padding: 5px 0;
+  margin-bottom: 10px;
+}
+
+.chronopost-settings-account.status-error .account-title {
+  color: #ba0008;
+}
+
+.chronopost-settings-account.status-error .account-title:after {
+  content: " (contrat invalide)";
+  font-weight: normal;
+}
+
+.chronopost-settings-account .form-table td,
+.chronopost-settings-account .form-table th {
+  vertical-align: top;
+}
+
+.chronopost-settings-account .form-table th {
+  min-width: 210px;
+}
+
+.chronopost-settings-account.status-error .form-table {
+  border-color: #ba0008;
+  background: #fae1e1;
+}
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/img/icon.png b/wp-content/plugins/woocommerce-chronopost/admin/img/icon.png
new file mode 100755 (executable)
index 0000000..e4d5135
Binary files /dev/null and b/wp-content/plugins/woocommerce-chronopost/admin/img/icon.png differ
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/img/logo.png b/wp-content/plugins/woocommerce-chronopost/admin/img/logo.png
new file mode 100755 (executable)
index 0000000..b6f1a03
Binary files /dev/null and b/wp-content/plugins/woocommerce-chronopost/admin/img/logo.png differ
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/index.php b/wp-content/plugins/woocommerce-chronopost/admin/index.php
new file mode 100755 (executable)
index 0000000..e71af0e
--- /dev/null
@@ -0,0 +1 @@
+<?php // Silence is golden
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/js/chronopost-admin.js b/wp-content/plugins/woocommerce-chronopost/admin/js/chronopost-admin.js
new file mode 100755 (executable)
index 0000000..f984dfb
--- /dev/null
@@ -0,0 +1,740 @@
+(function( $ ) {
+       'use strict';
+
+       var delay = (function(){
+               var timer = 0;
+               return function(callback, ms){
+                       clearTimeout (timer);
+                       timer = setTimeout(callback, ms);
+               };
+       })();
+
+       /**
+        * All of the code for your admin-facing JavaScript source
+        * should reside in this file.
+        */
+
+       function printPdf(url) {
+               $('#chronopdf').remove();
+
+               $('<iframe id="chronopdf" src="'+url+'" style="display: none" />').appendTo('body');
+               var iframe = $('iframe#chronopdf').get(0);
+
+               $('#chronopdf').load(function() {
+                       setTimeout(function() {
+                               iframe.focus();
+                               iframe.contentWindow.print();
+                       }, 2);
+               });
+
+       }
+
+       function create_slot_row(idPlugin, row){
+               var el = idPlugin + ' .chronopost-slot-row';
+
+               var lastID = $(el).last().data('id');
+       
+               //Handle no rows
+               if(typeof lastID == 'undefined' || lastID == ""){
+                       lastID =1;
+               } else {
+                       lastID = Number(lastID) + 1;
+               }
+
+               var day_id;
+
+               var tplLine = '<tr data-id="'+lastID+'" class="chronopost-slot-row">\
+                       <td>\
+                               <input type="checkbox" name="delete-slot" value="'+lastID+'">\
+                       </td>\
+                       <td>\
+                       ' + Chronopost.from + '\
+                       </td>\
+                       <td>\
+                               <select name="slot['+lastID+'][startday]">';
+                                       for (day_id in Chronopost.weekday) {
+                                               tplLine += '<option value="'+day_id+'"' + (row.startday == day_id ? ' selected="selected"': '') + '>' + Chronopost.weekday[day_id] + '</option>';
+                                       }
+                               tplLine += '</select>\
+                               <input type="text" name="slot['+lastID+'][starthour]" value="'+row.starthour+'" class="small-text timepicker">\
+                       </td>\
+                       <td>\
+                               ' + Chronopost.to + '\
+                       </td>\
+                       <td>\
+                               <select name="slot['+lastID+'][endday]">';
+                               for (day_id in Chronopost.weekday) {
+                                       tplLine += '<option value="'+day_id+'"' + (row.endday == day_id ? ' selected="selected"': '') + '>' + Chronopost.weekday[day_id] + '</option>';
+                               }
+                               tplLine += '</select>\
+                               <input type="text" name="slot['+lastID+'][endhour]" value="'+row.endhour+'" class="small-text timepicker">\
+                       </td>\
+               </tr>';
+
+               $(idPlugin+' table tbody tr:last').last().before(tplLine);
+
+               var that;
+               $(idPlugin+' table tbody tr:last').prev().find('.timepicker').each(function() {
+                       that = $(this);
+                       that.wickedpicker({
+                               twentyFour: true,
+                               title: Chronopost.select_time,
+                               timeSeparator: ':',
+                               now: that.val()
+                       });
+               })
+       }
+       
+
+       function remove_slot_row(idPlugin) {
+               $(idPlugin+ ' .chronopost-slot-row [type="checkbox"]:checked').each(function() {
+                       $(this).closest('tr').remove();
+               });
+       }
+
+       function create_cookie(name,value,days) {
+                       if (days) {
+                                       var date = new Date();
+                                       date.setTime(date.getTime()+(days*24*60*60*1000));
+                                       var expires = "; expires="+date.toGMTString();
+                       }
+                       else var expires = "";
+                       document.cookie = name+"="+value+expires+"; path=/";
+       }
+
+       function delete_cookie(name) {
+               create_cookie(name,"",-1);
+       }
+
+       function read_cookie(name) {
+                       var nameEQ = name + "=";
+                       var ca = document.cookie.split(';');
+                       for(var i=0;i < ca.length;i++) {
+                                       var c = ca[i];
+                                       while (c.charAt(0)==' ') c = c.substring(1,c.length);
+                                       if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
+                       }
+                       return null;
+       }
+
+       $(document).ready(function() {
+               $('.toplevel_page_chronopost').on('click', '.clean-section', function (e) {
+                       var form = $(this).next();
+                       var form_elements = form.find('input, select');
+                       form_elements.each(function (i) {
+                               $(this).val('')
+            });
+
+                       e.preventDefault();
+        });
+
+               var $toRemove;
+
+               $toRemove = $('label[for="woocommerce_chronoprecise_delivery_date_day"]').closest('tr');
+               
+               $('label[for="woocommerce_chronoprecise_delivery_date_day"]').insertAfter('#woocommerce_chronoprecise_delivery_date_day_nbr');
+               $('#woocommerce_chronoprecise_delivery_date_day').insertAfter('label[for="woocommerce_chronoprecise_delivery_date_day"]');
+
+               $toRemove.remove();
+
+               $toRemove = $('label[for="woocommerce_chronoprecise_delivery_date_hour"]').closest('tr');
+
+               $('label[for="woocommerce_chronoprecise_delivery_date_hour"]').remove();
+               $('#woocommerce_chronoprecise_delivery_date_hour').insertAfter('label[for="woocommerce_chronoprecise_delivery_date_day"]');
+
+               $toRemove.remove();
+               
+               $('[data-text-before]').each(function() {
+                       $(this).before('<span class="text-addition text-before">'+$(this).data('text-before')+'</span>');
+               });
+               
+               $('[data-text-after]').each(function() {
+                       $(this).after('<span class="text-addition text-after">'+$(this).data('text-after')+'</span>');
+               });
+
+               var today = new Date();
+
+               $('.timepicker').each(function() {
+                       var $this = $(this)
+                       
+                       $this.wickedpicker({
+                               twentyFour: true,
+                               title: Chronopost.select_time,
+                               timeSeparator: ':',
+                               now: $this.val() != '' ? $this.val() : today.getHours() + ':' + today.getMinutes()
+                       });
+               });
+
+               if ($('[id$="_slot_settings"]').length) {
+                       var pluginID = '#'+$('[id$="_slot_settings"]').eq(0).attr('id'),
+                                       slot_options = $(pluginID).data('slot-lines');
+       
+                       for (var key in slot_options) {
+                               create_slot_row(pluginID, slot_options[key]);
+                       }
+
+                       $(pluginID).on('click', '.button', function() {
+                               if ($(this).is('.add')) {
+                                       create_slot_row(pluginID, {
+                                               'startday' : 1,
+            'starthour' : '09:00',
+            'endday' : 5,
+            'endhour' : '18:00'
+                                       });
+                               } else if ($(this).is('.delete')) {
+                                       remove_slot_row(pluginID);
+                               }
+                               return false;
+                       });
+               }
+
+               var create_rate_row, create_zone_row, generate_country_select_list, key,
+                               country_array = $('.shipping-rate-table').data('countries'),
+                               lastID = 0,
+                               options;
+               
+               options = $('.shipping-rate-table').data('rate-lines');
+               
+               // add new shipping zone row
+               
+               create_zone_row = function(row) {
+                       var el, html = '';
+                       el = '.shipping-rate-table .chronopost-zone-row';
+                       lastID = $(el).last().attr('id');
+                       if (typeof lastID === 'undefined' || lastID === '') {
+                               lastID = 1;
+                       } else {
+                               lastID = Number(lastID) + 1;
+                       }
+
+                       html += '\
+                                       <tr id="' + lastID + '" class="chronopost-zone-row" >\
+                                               <input type="hidden" value="' + lastID + '" name="key[' + lastID + ']"></input>\
+                                               <td><input type="checkbox" class="chronopost-zone-checkbox"></input></span></td>\
+                                               <td><input type="text" size="30" value="' + row["key"] +'"  name="zone-name[' + lastID + ']"/></td>\
+                                               <td>\
+                                                       <select multiple="multiple" class="multiselect chosen_select" name="countries[' + lastID + '][]">\
+                                                       ' + generate_country_select_list(row.countries) + '\
+                                                                       </select>\
+                                               </td>\
+                                       </tr>\
+                       ';      
+
+                       html += '\
+                               <tr class="chronopost-rate-holder">\
+                                       <td colspan="1">\
+                                       </td>\
+                                       <td colspan="2">\
+                                               <table class="chronopost-rate-table shippingrows widefat" id="' + lastID + '_rates">\
+                                                       <thead>\
+                                                               <tr>\
+                                                                       <th></th>\
+                                                                       <th style="width: 30%">' + Chronopost.min_weight + '</th>\
+                                                                       <th style="width: 30%">' + Chronopost.max_weight + '</th>\
+                                                                       <th style="width: 40%">' + Chronopost.shipping_rate + '</th>\
+                                                               </tr>\
+                                                       </thead>\
+                                                       ' + create_rate_row(lastID, row) +'\
+                                                       <tr>\
+                                                               <td colspan="3" class="add-rate-buttons">\
+                                                                       <a href="#" class="add button" name="key_' + lastID + '">' + Chronopost.add_rate + '</a>\
+                                                                       <a href="#" class="delete button">' + Chronopost.delete_rate + '</a>\
+                                                               </td>\
+                                                       </tr>\
+                                               </table>\
+                                       </td>\
+                               </tr>\
+                       ';
+                       return html;
+               };
+               
+               
+               // create new rate row
+               
+               create_rate_row = function(lastID, row) {
+                       var row;
+                       var html = '', i;
+                       if (row === null || row.rates.length === 0) {
+                               row = {};
+                               row.key = '';
+                               row.countries = [];
+                               row.rates = [];
+                               row.rates.push([]);
+                               row.rates[0].min = '';
+                               row.rates[0].max = '';
+                               row.rates[0].shipping = '';
+                       }
+                       if (typeof row.min === 'undefined' || row.min === null) {
+                               row.min = [];
+                       }
+                       i = 0;
+                       while (i < row.rates.length) {
+                               html += '\
+                                       <tr>\
+                                               <td>\
+                                                       <input type="checkbox" class="chronopost-rate-checkbox" id="' + lastID + '"></input>\
+                                               </td>\
+                                               <td>\
+                                                       <input type="text" size="20" placeholder="" name="min[' + lastID + '][]" value="' + row.rates[i].min + '"></input>\
+                                               </td>\
+                                               <td>\
+                                                       <input type="text" size="20" placeholder="" name="max[' + lastID + '][]" value="' + row.rates[i].max + '"></input>\
+                                               </td>\
+                                               <td>\
+                                                       <input type="text" size="10" placeholder="" name="shipping[' + lastID + '][]" value="' + row.rates[i].shipping + '"></input>\
+                                               </td>\
+                                       </tr>\
+                               ';
+                               i++;
+                       }
+                       return html;
+               };
+               
+               generate_country_select_list = function(keys) {
+                       var html, key;
+                       html = '';
+                       for (key in country_array) {
+                               if (keys.indexOf(key) !== -1) {
+                                       html += '<option value="' + key + '" selected="selected">' + country_array[key].replace(/\\/g, '') + '</option>';
+                               } else {
+                                       html += '<option value="' + key + '">' + country_array[key].replace(/\\/g, '') + '</option>';
+                               }
+                       }
+                       return html;
+               };
+               
+               for (key in options) {
+                       key = key;
+                       options[key].key = key.replace(/\\/g, '');
+                       $('.shipping-rate-table table tbody tr:last').before(create_zone_row(options[key]));
+               }
+               
+               
+               // new zone row button event
+               
+               $('.shipping-rate-table').on('click', '.add-zone-buttons a.add', function() {
+                       var id, row;
+                       id = '.shipping-rate-table table tbody tr:last';
+                       row = {};
+                       row.key = '';
+                       row.min = [];
+                       row.rates = [];
+                       row.countries = [];
+                       $(id).before(create_zone_row(row));
+                       if ($().chosen) {
+                               $('select.chosen_select').chosen({
+                                       width: '350px',
+                                       disable_search_threshold: 5
+                               });
+                       } else {
+                               $('select.chosen_select').select2();
+                       }
+                       return false;
+               });
+               
+               
+               // delete zone row button event
+               
+               $('.shipping-rate-table').on('click', '.add-zone-buttons a.delete', function() {
+                       var rowsToDelete;
+                       rowsToDelete = $(this).closest('table').find('.chronopost-zone-checkbox:checked');
+                       $.each(rowsToDelete, function() {
+                               var nextRow, thisRow;
+                               thisRow = $(this).closest('tr');
+                               nextRow = $(thisRow).next();
+                               if ($(nextRow).hasClass('chronopost-rate-holder')) {
+                                       $(nextRow).remove();
+                               } else {
+                                       return;
+                               }
+                               $(thisRow).remove();
+                       });
+                       return false;
+               });
+               
+               
+               // new rate row button event
+               
+               $('.shipping-rate-table').on('click', '.add-rate-buttons a.add', function() {
+                       var name, row;
+                       name = $(this).attr('name');
+                       name = name.substring(4);
+                       row = create_rate_row(name, null);
+                       $(this).closest('tr').before(row);
+                       return false;
+               });
+               
+               
+               // delete rate row button event
+               
+               $('.shipping-rate-table').on('click', '.add-rate-buttons a.delete', function() {
+                       var rowsToDelete;
+                       rowsToDelete = $(this).closest('table').find('.chronopost-rate-checkbox:checked');
+                       $.each(rowsToDelete, function() {
+                               $(this).closest('tr').remove();
+                       });
+                       return false;
+               });
+
+               $(window).load(function() {
+                       if ($('#alertModal').length) {
+                               tb_show($('#alertModal').data('title'),'#TB_inline?height='+$('#alertModal').data('height')+'&width='+$('#alertModal').data('width')+'&inlineId=alertModal');
+                       }
+               });
+
+               /*
+               $('#wpbody').on('click', '.chrono-print', function(event) {
+                       printPdf($(this).attr('href'));
+                       event.preventDefault();
+               });
+               */
+
+               var order_id,
+                               $link,
+                               $order_row,
+                               $order_generate_label
+               ;
+
+               $('.chronopost_page_chronopost-shipping, #chrono_meta_box').on('click', '.chrono-generate-label, .bulkactions .button', function(event) {
+                       $link = $(this);
+
+                       setTimeout(function() {
+                               $link.attr('disabled', 'disabled');
+                       }, 100);
+                       
+                       if ($(this).is('.chrono-generate-label')) {
+                               order_id = $link.data('order-id');
+                               $order_row = $('#order-'+order_id);
+                               $order_row.find('.spinner').addClass('is-active');
+                       } else {
+                               $link.next('.spinner').addClass('is-active');
+                       }
+                       var checkDownloadInterval = setInterval(function() {
+                               if (read_cookie('ChronopostGenerateProcess') == 'done') {
+                                       window.location.reload();
+                                       clearInterval(checkDownloadInterval);
+                               }
+                       }, 150);
+               });
+
+               var $insurance_input;
+               $(document).on('keyup mouseup', '#insurance_amount', function() {
+                               $insurance_input = $(this);
+                               order_id = $insurance_input.data('order-id');
+                               $order_row = $('#order-'+order_id);
+                               
+                               delay(function(){
+                                       $('.chrono-generate-label').attr('disabled', 'disabled');
+                                       $order_row.find('.spinner').addClass('is-active');
+                                       $.ajax({
+                                               type: 'POST',
+                                               dataType: 'json',
+                                               url: ajaxurl,
+                                               cache: false,
+                                               data: {
+                                                               'action': 'update_insurance_amount',
+                                                               'order_id':   order_id,
+                                                               'insurance_amount': $insurance_input.val(),
+                                                               'chrono_nonce' : Chronopost.chrono_nonce
+                                               }
+                                       }).done(function(output) {
+                                               if (output.status == 'success') {
+                                                       $order_row.find('.spinner').removeClass('is-active');
+                                                       $('.chrono-generate-label').removeAttr('disabled');
+                                               } else {
+                                                       alert('Une erreur s\'est produite lors de la mise à jour des données. Veuillez rafraîchir la page.');
+                                               }
+                                       });
+                               }, 1000 );
+               });
+               
+               var el;
+
+               $('#chrono_meta_box').on('change', 'input, select', function(event) {
+                       el = $(this);
+            var action = el.data('action');
+            if (!action) {
+               return false;
+                       }
+                       order_id = el.data('order-id');
+                       $order_row = $('#order-'+order_id);
+                       $order_row.find('.spinner').addClass('is-active');
+                       $('#shipment-list').find('.button, button, input[type="submit"]').attr('disabled', 'disabled');
+                       $.ajax({
+                               type: 'POST',
+                               dataType: 'json',
+                               url: ajaxurl,
+                               cache: false,
+                               data: {
+                                               'action': action,
+                                               'order_id':   order_id,
+                                               'new_value': el.val(),
+                                               'chrono_nonce' : Chronopost.chrono_nonce
+                               }
+                       }).done(function(output) {
+                               if (output.status == 'success') {
+                                       $order_row.find('.spinner').removeClass('is-active');
+                                       $('#shipment-list').find('.button, button, input[type="submit"]').removeAttr('disabled');
+                               } else {
+                                       alert('Une erreur s\'est produite lors de la mise à jour des données. Veuillez rafraîchir la page.');
+                               }
+                       });
+                       event.preventDefault();
+               });
+
+        $('select[name=use-contract]').on('change', function(event) {
+            el = $(this);
+            order_id = el.data('order-id');
+            $order_row = $('#order-'+order_id);
+            $order_row.find('.spinner').addClass('is-active');
+            $('#shipment-list').find('.button, button, input[type="submit"]').attr('disabled', 'disabled');
+            $.ajax({
+                type: 'POST',
+                dataType: 'json',
+                url: ajaxurl,
+                cache: false,
+                data: {
+                    'action': 'update_order_contract',
+                    'order_id':   order_id,
+                    'use_contract': el.val(),
+                    'chrono_nonce' : Chronopost.chrono_nonce
+                }
+            }).done(function(output) {
+                if (output.status == 'success') {
+                    $order_row.find('.spinner').removeClass('is-active');
+                    $('#shipment-list').find('.button, button, input[type="submit"]').removeAttr('disabled');
+                } else {
+                    alert('Une erreur s\'est produite lors de la mise à jour des données. Veuillez rafraîchir la page.');
+                }
+            });
+            event.preventDefault();
+        });
+
+        $('#wpbody').on('change', '.ship-on-saturday select, .column-parcels input', function(event) {
+            el = $(this);
+            console.log(el.val());
+            order_id = el.data('order-id');
+            $order_row = $('#order-'+order_id);
+            $order_row.find('.spinner').addClass('is-active');
+            $('#shipment-list').find('.button, button, input[type="submit"]').attr('disabled', 'disabled');
+            console.log(el.is('.ship-on-saturday select') ? 'update_saturday_shipping' : 'update_parcels');
+            $.ajax({
+                type: 'POST',
+                dataType: 'json',
+                url: ajaxurl,
+                cache: false,
+                data: {
+                    'action': el.is('.ship-on-saturday select') ? 'update_saturday_shipping' : 'update_parcels',
+                    'order_id':   order_id,
+                    'new_value': el.val(),
+                    'chrono_nonce' : Chronopost.chrono_nonce
+                }
+            }).done(function(output) {
+                if (output.status == 'success') {
+                    $order_row.find('.spinner').removeClass('is-active');
+                    $('#shipment-list').find('.button, button, input[type="submit"]').removeAttr('disabled');
+                } else {
+                    alert('Une erreur s\'est produite lors de la mise à jour des données. Veuillez rafraîchir la page.');
+                }
+            });
+            event.preventDefault();
+        });
+
+        var sendAjax;
+        $('#wpbody .column-dimensions').on('change', ' input', function(event) {
+            triggerChangeDimensions($(this));
+            event.preventDefault();
+        });
+
+        function triggerChangeDimensions(el) {
+            order_id = el.data('order-id');
+            $order_row = $('#order-'+order_id);
+            var dimensions = null;
+            if (el.parents('#chrono_meta_box').length) {
+                dimensions = $('#chrono_meta_box').find('input[name^=parcels_dimensions]');
+                $order_generate_label = $('#chrono_meta_box .chrono-generate-label');
+            } else {
+                dimensions = $order_row.find('input[name^=parcels_dimensions]');
+                $order_generate_label = $order_row.find('.button, button, input[type="submit"]');
+            }
+            $order_generate_label.attr('disabled', 'disabled');
+            clearTimeout(sendAjax);
+            sendAjax = setTimeout(function () {
+                ajaxUpdateDimensions(order_id, dimensions);
+            }, 800);
+        }
+
+        function ajaxUpdateDimensions(order_id, dimensions) {
+            $order_row.find('.spinner').addClass('is-active');
+            $.ajax({
+                type: 'POST',
+                dataType: 'json',
+                url: ajaxurl,
+                cache: false,
+                data: {
+                    'action': 'update_dimensions',
+                    'order_id':   order_id,
+                    'new_value': dimensions.serialize(),
+                    'chrono_nonce' : Chronopost.chrono_nonce
+                }
+            }).done(function(output) {
+                if (output.status === 'success') {
+                    $order_generate_label.removeAttr('disabled');
+                }
+                else {
+                    $($order_generate_label).on('click', function (event) {
+                       if($(this).attr('disabled')){
+                            event.preventDefault();
+                                               }
+                    });
+                       if (undefined !== output.message) {
+                               alert(output.message);
+                                       } else {
+                        alert('Une erreur s\'est produite lors de la mise à jour des données. Veuillez rafraîchir la page.');
+                                       }
+                }
+                $order_row.find('.spinner').removeClass('is-active');
+            });
+               }
+
+               $('body').on('click', 'a[disabled]', function (event) {
+            event.preventDefault();
+        });
+
+        $('td.column-parcels input, .parcels-number input').each(function () {
+                       if ($(this).val() > 1) {
+                addDimensions($(this));
+                       }
+        });
+
+        // Création des lignes de dimensions pour chaque colis
+               $('td.column-parcels, .parcels-number').on('blur change', 'input', function () {
+            addDimensions($(this));
+        });
+
+               function addDimensions(el) {
+                       if (el.parents('#chrono_meta_box').length) {
+                addDimensionsBlock(el);
+                       } else {
+                addDimensionsRows(el);
+                       }
+        }
+
+               function addDimensionsBlock(el) {
+            var total = el.val();
+            var template = $('#chrono_meta_box .parcels-dimensions .package-dimensions.default');
+            $('#chrono_meta_box .parcels-dimensions .package-dimensions').not('.default').remove();
+                       for (var i = 2; i <= total; i++) {
+                               var clone = template.clone().removeClass('default');
+                               clone.find('input').each(function () {
+                    var new_name = $(this).attr('name').replace(/\[1\]/, '['+ i +']');
+                    $(this).attr('name', new_name);
+                });
+                               clone.appendTo($('#chrono_meta_box .parcels-dimensions'));
+                       }
+        }
+
+               function addDimensionsRows(el)
+               {
+            var total = el.val();
+            var templates = el.parents('tr').find('.column-dimensions .default');
+            el.parents('tr').find('.column-dimensions input').not('.default').remove();
+            templates.each(function () {
+                for (var i = 2; i <= total; i++) {
+                    var clone = $(this).clone().removeClass('default');
+                    var new_name = clone.attr('name').replace(/\[1\]/, '['+ i +']');
+                    clone.attr('name', new_name);
+                    clone.appendTo($(this).parents('td'));
+                }
+            });
+               }
+
+               // Ajout d'un nouveau bloc de champs pour un contrat
+        $(document).on("click", '.addNewContract', function(event)
+        {
+            $('.chrono-alert').remove();
+                       var template = $('.chronopost-settings-account.default').clone();
+                       var index_el = $('input[name=chronopost_account_index]');
+                       var newIndex = parseInt(index_el.val()) + 1;
+                       var removeButtonTemplate = $('#chrono_remove_button_template').clone();
+                       removeButtonTemplate.removeAttr('style');
+            template.removeClass('default');
+                       template.find('input').each(function () {
+                               $(this).val('');
+                               var new_name = $(this).attr('name').replace(/\[1\]/, '['+ newIndex +']');
+                $(this).attr('name', new_name);
+            });
+                       template.find('.account-title .index').html(newIndex);
+                       template.find('.addNewContract').replaceWith(removeButtonTemplate);
+                       template.find('.contract-delete').append('<button class="removeContract button button-delete">Supprimer contrat</button>');
+                       $('.chronopost-accounts-settings').append(template);
+            index_el.val(newIndex);
+
+            event.preventDefault();
+        });
+
+        $(document).on("click", '.removeContract', function(event)
+        {
+               if (confirm(chrono_alert_remove_contract)) {
+                var p = $(this).parents('.chronopost-settings-account');
+                p.remove();
+                       }
+            event.preventDefault();
+        });
+
+        // Teste les identifiants du contrat
+               $(document).on("click", '.testWSLogin', function(event)
+               {
+                       var t = $(this);
+            var p = $(this).parents('.chronopost-settings-account');
+                       $(this).next('.spinner').addClass('is-active');
+                       $.ajax({
+                               type: 'POST',
+                               dataType: 'json',
+                               url: ajaxurl,
+                               cache: false,
+                               data: {
+                                               'action': 'test_login',
+                                               'account':   p.find('.account-number').val(),
+                                               'password':   p.find('.account-password').val(),
+                                               'chrono_nonce' : Chronopost.chrono_nonce
+                               }
+                       }).done(function(output) {
+                               var container = p.find('.testWSLoginResult');
+                               $('.chrono-alert').remove();
+                               if (output.status === 'success') {
+                                       $('<div class="chrono-alert chrono-alert-success">'+output.message+'</div>').appendTo(container);
+                               } else {
+                                       if (undefined === output.message) {
+                                               output.message = 'Identifiants invalides';
+                                       }
+                                       $('<div class="chrono-alert chrono-alert-error">'+output.message+'</div>').appendTo(container);
+                               }
+                               t.next('.spinner').removeClass('is-active');
+                       });
+                       event.preventDefault();
+               });
+
+               if ($('.woocommerce_page_wc-settings .woocommerce .subsubsub a[href*="&section=chrono"]').length) {
+                       var adminSettingsLinks = '<ul class="sub-menu">',
+                                       isCurrent = false;
+                       $('.woocommerce_page_wc-settings .woocommerce .subsubsub a[href*="&section=chrono"]').each(function() {
+                               adminSettingsLinks += '<li>';
+                               if ($(this).hasClass('current')) {
+                                       isCurrent = true;
+                                       adminSettingsLinks += '<a class="current" href="' + $(this).attr('href') + '">';
+                               } else {
+                                       adminSettingsLinks += '<a href="' + $(this).attr('href') + '">';
+                               }
+                               adminSettingsLinks += $(this).text();
+                               adminSettingsLinks += '</a>';
+                               adminSettingsLinks += '</li>';
+                               $(this).parent('li').remove();
+                       });
+                       adminSettingsLinks += '</ul>';
+
+                       $('.woocommerce_page_wc-settings .woocommerce .subsubsub').append('<li class="has-sub"><a href="javascript:;"' + (isCurrent ? ' class="current"': '') + '>Chronopost</a>' + adminSettingsLinks + '</li>');
+               }
+       });
+
+})( jQuery );
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/partials/chronopost-admin-daily-docket.php b/wp-content/plugins/woocommerce-chronopost/admin/partials/chronopost-admin-daily-docket.php
new file mode 100755 (executable)
index 0000000..ce474c2
--- /dev/null
@@ -0,0 +1,136 @@
+<?php
+$pagenum = isset( $_GET['pagenum'] ) ? absint( $_GET['pagenum'] ) : 1;
+$limit = 10;
+$offset = ( $pagenum - 1 ) * $limit;
+// Get the orders
+$_orders = WC_Chronopost_Order::get_orders($limit, $pagenum, true);
+$total = WC_Chronopost_Order::get_post_count(true);
+$num_of_pages = ceil( $total / $limit );
+?>
+
+<div class="wrap">
+    <form id="shipment-list" method="get">
+        <h1><?php _e("Chronopost Daily Dockets", 'chronopost') ?></h1>
+        <hr class="wp-header-end">
+        <div class="tablenav top">
+            <div class="alignleft actions bulkactions">
+                <label for="bulk-action-selector-top" class="screen-reader-text"><?php _e( 'Select bulk action' ); ?></label><select name="chronoaction" id="bulk-action-selector-top">
+                <option value="-1"><?php _e( 'Bulk Actions' ); ?></option>
+                <option value="print-daily-docket" class="hide-if-no-js"><?php echo __('Export daily dockets', 'chronopost'); ?></option>
+                </select>
+                <input type="submit" id="doaction" class="button action" value="<?php _e('Apply'); ?>">
+                <span class="spinner"></span>
+            </div>
+
+            <div class="tablenav-pages">
+                <?php 
+                    $page_links = paginate_links( array(
+                        'base' => add_query_arg( 'pagenum', '%#%' ),
+                        'format' => '',
+                        'prev_text'          => '<span aria-label="' . esc_attr__( 'Previous page' ) . '">' . __( '&laquo;' ) . '</span>',
+                        'next_text'          => '<span aria-label="' . esc_attr__( 'Next page' ) . '">' . __( '&raquo;' ) . '</span>',
+                        'before_page_number' => '<span class="screen-reader-text">' . __( 'Page' ) . '</span> ',
+                        'total'   => $num_of_pages,
+                        'current' => $pagenum
+                    ));
+
+                    if ( $page_links ) {
+                        echo '<span class="displaying-num">' . sprintf( _n( '%s item', '%s items', $total ), number_format_i18n( $total ) ) . '</span>';
+                        echo $page_links;
+                    }
+                ?>
+            </div>
+        </div>
+        <input type="hidden" name="shipment_nonce" value="<?php echo wp_create_nonce( 'shipment_list_nonce' ); ?>">
+
+        <table class="wp-list-table widefat fixed striped posts" cellpadding="0" cellspacing="0">
+            <thead>
+                <td id="cb" class="manage-column column-cb check-column">
+                    <label class="screen-reader-text" for="cb-select-all-1"><?php _e('Select all'); ?></label>
+                    <input id="cb-select-all-1" type="checkbox">
+                </td>
+                <th class="manage-column column-order_status"><?php _e("Status", 'chronopost') ?></th>
+                <th class="manage-colum column-order_date"><?php _e("Order", 'woocommerce') ?></th>
+                <th class="manage-colum column-shipping_address"><?php _e("Shipped to", 'chronopost') ?></th>
+                <th class="manage-colum column-order_date"><?php _e("Date", 'chronopost') ?></th>
+            </thead>
+            <tbody>
+            <?php while( $_orders->have_posts() ) : $_orders->the_post(); ?>
+                <?php
+                    $_order = new WC_Order( get_the_ID() );
+                    $order_shipping_method = $_order->get_shipping_methods();
+                    $shipping_method = reset($order_shipping_method);
+                    $shipping_method_id = $shipping_method->get_method_id();
+                    $shipment_datas = chrono_get_shipment_datas($_order->get_id());
+                ?>
+                <tr id="order-<?php echo $_order->get_id(); ?>">
+                    <th scope="row" class="check-column">
+                        <label class="screen-reader-text" for="cb-select-1"><?php printf(__('Select order #%s', 'chronopost'), $_order->get_id()); ?></label>
+                        <input id="cb-select-1" type="checkbox" name="order[]" value="<?php echo $_order->get_id(); ?>">
+                    </th>
+                    <td class="order_status column-order_status"><mark class="<?php echo str_replace('wc-', 'status-', get_post_status()) ?> order-status"><span><?php echo wc_get_order_status_name(get_post_status()) ?></span></mark></td>
+                    <td>
+                        <?php
+                        if ( $_order->get_customer_id() ) {
+                            $user     = get_user_by( 'id', $_order->get_customer_id() );
+                            $username = '<a href="user-edit.php?user_id=' . absint( $_order->get_customer_id() ) . '">';
+                            $username .= esc_html( ucwords( $user->display_name ) );
+                            $username .= '</a>';
+                        } elseif ( $_order->get_billing_first_name() || $_order->get_billing_last_name() ) {
+                            /* translators: 1: first name 2: last name */
+                            $username = trim( sprintf( _x( '%1$s %2$s', 'full name', 'woocommerce' ), $_order->get_billing_first_name(), $_order->get_billing_last_name() ) );
+                        } elseif ( $_order->get_billing_company() ) {
+                            $username = trim( $_order->get_billing_company() );
+                        } else {
+                            $username = __( 'Guest', 'woocommerce' );
+                        }
+
+                        printf(
+                            __( '%1$s by %2$s', 'woocommerce' ),
+                            '<a href="' . admin_url( 'post.php?post=' . absint( $_order->get_id() ) . '&action=edit' ) . '" class="row-title"><strong>#' . esc_attr( $_order->get_order_number() ) . '</strong></a>',
+                            $username
+                        );
+
+                        if ( $_order->get_billing_email() ) {
+                            echo '<small class="meta email"><a href="' . esc_url( 'mailto:' . $_order->get_billing_email() ) . '">' . esc_html( $_order->get_billing_email() ) . '</a></small>';
+                        }
+                        ?>
+                    </td>
+                    <td>
+                        <?php
+                            $address = $_order->get_shipping_address_1() . ' ' . $_order->get_shipping_address_2() . ' ' . $_order->get_shipping_postcode() . ' ' .$_order->get_shipping_city();
+                            $address_link = 'https://maps.google.com/maps?&q=' . urlencode( $address ) . '&z=16';
+                            echo "<a href=\"$address_link\">". get_post_meta( $_order->get_id(), '_shipping_address_index', true) . "</a>";
+                            echo "<small class=\"meta\">{$shipping_method->get_name()}</small>";
+                        ?>
+                    </td>
+                    <td>
+                        <?php echo get_the_date(); ?>
+                    </td>
+            </tr>
+            <?php endwhile; ?>
+            </tbody>
+        </table>
+        <div class="tablenav bottom">
+            <div class="tablenav-pages">
+                <?php 
+                    $page_links = paginate_links( array(
+                        'base' => add_query_arg( 'pagenum', '%#%' ),
+                        'format' => '',
+                        'prev_text'          => '<span aria-label="' . esc_attr__( 'Previous page' ) . '">' . __( '&laquo;' ) . '</span>',
+                        'next_text'          => '<span aria-label="' . esc_attr__( 'Next page' ) . '">' . __( '&raquo;' ) . '</span>',
+                        'before_page_number' => '<span class="screen-reader-text">' . __( 'Page' ) . '</span> ',
+                        'total'   => $num_of_pages,
+                        'current' => $pagenum
+                    ));
+
+                    if ( $page_links ) {
+                        echo '<span class="displaying-num">' . sprintf( _n( '%s item', '%s items', $total ), number_format_i18n( $total ) ) . '</span>';
+                        echo $page_links;
+                    }
+                ?>
+            </div>
+            <br class="clear">
+        </div>
+    </form>
+</div>
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/partials/chronopost-admin-display.php b/wp-content/plugins/woocommerce-chronopost/admin/partials/chronopost-admin-display.php
new file mode 100755 (executable)
index 0000000..61a664c
--- /dev/null
@@ -0,0 +1,1231 @@
+<?php
+/**
+ * Provide a admin area view for the plugin
+ *
+ * This file is used to markup the admin-facing aspects of the plugin.
+ *
+ * @link       https://www.adexos.fr
+ * @since      1.0.0
+ *
+ * @package    Chronopost
+ * @subpackage Chronopost/admin/partials
+ */
+ class Chronopost_Admin_Display {
+
+       function __construct() {
+               //add_action( 'admin_init', array( $this, 'chronopost_add_thickbox' ) );
+               add_action( 'admin_menu', array( $this, 'chronopost_add_admin_menu' ) );
+               add_action( 'admin_menu', array( $this, 'chronopost_settings_init' ) );
+               add_action( 'admin_menu', array( $this, 'chronopost_imports_init' ) );
+               add_action( 'admin_notices', array($this, 'chronopost_admin_config_notice') );
+               add_action( 'admin_notices', array($this, 'chronopost_admin_delayed_errors') );
+        add_filter( 'pre_update_option_chronopost_settings', array($this, 'check_settings'), 10, 2);
+        add_action('update_option_chronopost_settings', array($this, 'delete_contract_transients'), 10, 2);
+
+    }
+
+    public function delete_contract_transients( $old_value, $value ) {
+        foreach ($old_value['general']['accounts'] as $account) {
+            delete_transient('contract_infos_' . $account['number']);
+        }
+        foreach (value['general']['accounts'] as $account) {
+            delete_transient('contract_infos_' . $account['number']);
+        }
+    }
+
+       public function check_settings($chrono_settings) {
+           $accounts = $chrono_settings['general']['accounts'];
+           $valid_accounts = array();
+           foreach ($accounts as $key=>$account) {
+               $account_status = chrono_check_login($account['number'], $account['password']);
+            $chrono_settings['general']['accounts'][$key]['status'] = $account_status['status'];
+        }
+
+        if ($chrono_settings['insurance']['enable'] == 'yes' && $chrono_settings['insurance']['min_amount'] == '') {
+            $_SESSION['alert_msg'] = __( 'You must define a minimun amount in order to enabled the insurance.', 'chronopost' );
+            $chrono_settings['insurance']['enable'] = 'no';
+        }
+
+           return $chrono_settings;
+    }
+
+        static function get_default_values() {
+                return array(
+                        'contract' => array(
+                 1 => array( 'number'     => '19869502',
+                             'label'      => __( 'TEST Contract', 'chronopost' ),
+                             'subaccount' => null,
+                             'password'   => '255562' )
+             ),
+             'address' => array(
+
+             )
+                );
+        }
+
+       function chronopost_add_thickbox() {
+               //add_thickbox();
+       }
+       
+       function chronopost_admin_config_notice(){
+                       if (array_key_exists('alert_msg', $_SESSION)) {
+                                       add_thickbox();
+                                       $msg = $_SESSION['alert_msg'];
+                                       echo chrono_notice($msg, 'error', true, array('width' => 320, 'height'=> 200, 'title' => __('Chronopost notification about weight', 'chronopost')));
+                                       if (!array_key_exists('chronoaction', $_GET)) {
+                                                       unset( $_SESSION['alert_msg'] );
+                                       }
+                       }
+
+                        if( !(array_key_exists('page', $_GET) && $_GET['page'] == 'chronopost') && (!chronopost_is_configured() || !chronopost_methods_is_configured()) ){
+                                        ?>
+                                        <div class="updated notice is-dismissible chronopost-notice">
+                                                       <h2><?php _e('Thank you for using the Chronopost plugin for WooCommerce!', 'chronopost'); ?></h2>
+                                                       <ol>
+                                                               <li><?php echo sprintf(__('Don\'t forget to <a href="%s">configure your Chronopost Settings.</a>', 'chronopost'), admin_url('admin.php?page=chronopost')); ?></li>
+                                                               <li><?php echo sprintf(__('Start <a href="%s">configuring your Chronopost delivery methods</a>', 'chronopost'), admin_url('admin.php?page=wc-settings&tab=shipping&section=chrono10')); ?></li>
+                                                               <li><?php _e('Enjoy our plugin ;)', 'chronopost'); ?></li>
+                                                        </ol>
+                                                        <p><em><?php _e('The Chronopost Team', 'chronopost'); ?></em></p>
+                                        </div>
+                                        <?php
+                                        chronopost_methods_is_configured();
+                                        /* Delete transient, only display this notice once. */
+                                        delete_transient( 'fx-admin-notice-example' );
+                        }
+                        if(isset($_SESSION['label_error']) && !isset($_GET['chronoaction'])){
+                 echo chrono_notice($_SESSION['label_error'], 'error', false);
+                 unset($_SESSION['label_error']);
+             }
+        }
+
+        function chronopost_admin_delayed_errors() {
+           if ($error_message = get_transient('chronopost_admin_error')) {
+               echo chrono_notice($error_message, 'error');
+               delete_transient('chronopost_admin_error');
+        }
+     }
+
+       function chronopost_add_admin_menu() {
+               add_menu_page(
+                       'chronopost',
+                       'Chronopost',
+                       'manage_woocommerce',
+                       'chronopost',
+                       array($this, 'chronopost_options_page'),
+                       plugin_dir_url( dirname( __FILE__ ) ). 'img/icon.png'
+               );
+
+               add_submenu_page(
+                       'chronopost',
+                       __('Shipments', 'chronopost'),
+                       __('Shipments', 'chronopost'),
+                       'manage_woocommerce',
+                       'chronopost-shipping',
+      array($this, 'chronopost_shipping')
+               );
+
+               add_submenu_page(
+                       'chronopost',
+                       __( 'Import trackings', 'chronopost' ),
+                       __( 'Import trackings', 'chronopost' ),
+                       'manage_woocommerce',
+                       'chronopost-imports',
+                       array( $this, 'chronopost_imports' )
+               );
+               
+               add_submenu_page(
+                       'chronopost',
+                       __('Daily docket', 'chronopost'),
+                       __('Daily docket', 'chronopost'),
+                       'manage_woocommerce',
+                       'chronopost-daily-docket',
+                       array($this, 'chronopost_daily_docket')
+               );
+
+               add_submenu_page(
+                       'chronopost',
+                       __('Export CSS', 'chronopost'),
+                       __('Export CSS', 'chronopost'),
+                       'manage_woocommerce',
+                       'chronopost-exports',
+                       array($this, 'chronopost_exports')
+               );
+       }
+
+       function chronopost_settings_init() {
+
+               register_setting( 'chronopost_optionpage', 'chronopost_settings' );
+
+               add_settings_section(
+                       'chronopost_main_settings_section', 
+                       false, 
+                       array($this, 'chronopost_main_settings_intro'), 
+                       'chronopost_optionpage'
+               );
+
+               add_settings_section(
+                       'chronopost_main_account_section', 
+                       __( 'Accounts configuration', 'chronopost' ),
+                       array($this, 'chronopost_account_render'),
+                       'chronopost_optionpage'
+               );
+
+               /*add_settings_field(
+                       'chronopost_account_settings',
+                       __( 'Accounts settings', 'chronopost' ),
+                       array($this, 'chronopost_account_render'),
+                       'chronopost_optionpage',
+                       'chronopost_main_account_section'
+               );*/
+
+               add_settings_section(
+                       'chronopost_shipper_section', 
+                       __( 'Shipper address', 'chronopost' ),
+                       array($this, 'start_section'),
+                       'chronopost_optionpage'
+               );
+
+               add_settings_field( 
+                       'chronopost_shipper_civility', 
+                       __( 'Civility', 'chronopost' ), 
+                       array($this, 'chronopost_shipper_civility_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_shipper_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_shipper_name', 
+                       __( 'Name', 'chronopost' ), 
+                       array($this, 'chronopost_shipper_name_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_shipper_section' 
+               );
+
+               add_settings_field( 
+                       'chronopost_shipper_name2', 
+                       __( 'Name 2', 'chronopost' ), 
+                       array($this, 'chronopost_shipper_name2_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_shipper_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_shipper_address', 
+                       __( 'Address', 'chronopost' ), 
+                       array($this, 'chronopost_shipper_address_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_shipper_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_shipper_address2', 
+                       __( 'Address 2', 'chronopost' ), 
+                       array($this, 'chronopost_shipper_address2_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_shipper_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_shipper_zipcode', 
+                       __( 'Zipcode', 'chronopost' ), 
+                       array($this, 'chronopost_shipper_zipcode_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_shipper_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_shipper_city', 
+                       __( 'City', 'chronopost' ), 
+                       array($this, 'chronopost_shipper_city_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_shipper_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_shipper_country', 
+                       __( 'Country', 'chronopost' ), 
+                       array($this, 'chronopost_shipper_country_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_shipper_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_shipper_contactname', 
+                       __( 'Contact name', 'chronopost' ), 
+                       array($this, 'chronopost_shipper_contactname_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_shipper_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_shipper_email', 
+                       __( 'Email', 'chronopost' ), 
+                       array($this, 'chronopost_shipper_email_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_shipper_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_shipper_phone', 
+                       __( 'Phone', 'chronopost' ), 
+                       array($this, 'chronopost_shipper_phone_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_shipper_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_shipper_mobile', 
+                       __( 'Mobile', 'chronopost' ), 
+                       array($this, 'chronopost_shipper_mobile_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_shipper_section' 
+               );
+
+               add_settings_section(
+                       'chronopost_customer_section', 
+                       __( 'Billing address', 'chronopost' ),
+                       array($this, 'start_section'),
+                       'chronopost_optionpage'
+               );
+
+               add_settings_field( 
+                       'chronopost_customer_civility', 
+                       __( 'Civility', 'chronopost' ), 
+                       array($this, 'chronopost_customer_civility_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_customer_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_customer_name', 
+                       __( 'Name', 'chronopost' ), 
+                       array($this, 'chronopost_customer_name_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_customer_section' 
+               );
+
+               add_settings_field( 
+                       'chronopost_customer_name2', 
+                       __( 'Name 2', 'chronopost' ), 
+                       array($this, 'chronopost_customer_name2_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_customer_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_customer_address', 
+                       __( 'Address', 'chronopost' ), 
+                       array($this, 'chronopost_customer_address_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_customer_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_customer_address2', 
+                       __( 'Address 2', 'chronopost' ), 
+                       array($this, 'chronopost_customer_address2_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_customer_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_customer_zipcode', 
+                       __( 'Zipcode', 'chronopost' ), 
+                       array($this, 'chronopost_customer_zipcode_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_customer_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_customer_city', 
+                       __( 'City', 'chronopost' ), 
+                       array($this, 'chronopost_customer_city_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_customer_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_customer_country', 
+                       __( 'Country', 'chronopost' ), 
+                       array($this, 'chronopost_customer_country_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_customer_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_customer_contactname', 
+                       __( 'Contact name', 'chronopost' ), 
+                       array($this, 'chronopost_customer_contactname_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_customer_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_customer_email', 
+                       __( 'Email', 'chronopost' ), 
+                       array($this, 'chronopost_customer_email_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_customer_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_customer_phone', 
+                       __( 'Phone', 'chronopost' ), 
+                       array($this, 'chronopost_customer_phone_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_customer_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_customer_mobile', 
+                       __( 'Mobile', 'chronopost' ), 
+                       array($this, 'chronopost_customer_mobile_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_customer_section' 
+               );
+
+               add_settings_section(
+                       'chronopost_return_section', 
+                       __( 'Return address', 'chronopost' ),
+                       array($this, 'start_section'),
+                       'chronopost_optionpage'
+               );
+
+               add_settings_field( 
+                       'chronopost_return_civility', 
+                       __( 'Civility', 'chronopost' ), 
+                       array($this, 'chronopost_return_civility_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_return_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_return_name', 
+                       __( 'Name', 'chronopost' ), 
+                       array($this, 'chronopost_return_name_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_return_section' 
+               );
+
+               add_settings_field( 
+                       'chronopost_return_name2', 
+                       __( 'Name 2', 'chronopost' ), 
+                       array($this, 'chronopost_return_name2_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_return_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_return_address', 
+                       __( 'Address', 'chronopost' ), 
+                       array($this, 'chronopost_return_address_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_return_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_return_address2', 
+                       __( 'Address 2', 'chronopost' ), 
+                       array($this, 'chronopost_return_address2_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_return_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_return_zipcode', 
+                       __( 'Zipcode', 'chronopost' ), 
+                       array($this, 'chronopost_return_zipcode_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_return_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_return_city', 
+                       __( 'City', 'chronopost' ), 
+                       array($this, 'chronopost_return_city_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_return_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_return_country', 
+                       __( 'Country', 'chronopost' ), 
+                       array($this, 'chronopost_return_country_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_return_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_return_contactname', 
+                       __( 'Contact name', 'chronopost' ), 
+                       array($this, 'chronopost_return_contactname_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_return_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_return_email', 
+                       __( 'Email', 'chronopost' ), 
+                       array($this, 'chronopost_return_email_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_return_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_return_phone', 
+                       __( 'Phone', 'chronopost' ), 
+                       array($this, 'chronopost_return_phone_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_return_section' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_return_mobile', 
+                       __( 'Mobile', 'chronopost' ), 
+                       array($this, 'chronopost_return_mobile_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_return_section' 
+               );
+               
+               add_settings_section(
+                       'chronopost_skybill_section', 
+                       __( 'Printing options', 'chronopost' ),
+                       false, 
+                       'chronopost_optionpage'
+               );
+
+               add_settings_field( 
+                       'chronopost_skybill_mode', 
+                       __( 'Print Mode', 'chronopost' ), 
+                       array($this, 'chronopost_skybill_mode_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_skybill_section' 
+               );
+               add_settings_section(
+                       'chronopost_gmap_section', 
+                       __( 'Google Map Settings', 'chronopost' ), 
+                       false, 
+                       'chronopost_optionpage'
+               );
+
+               add_settings_field( 
+                       'chronopost_gmap_api_key', 
+                       __( 'Google Map Api Key', 'chronopost' ), 
+                       array($this, 'chronopost_gmap_api_key_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_gmap_section' 
+               );
+               
+                               
+               add_settings_section(
+                       'chronopost_bal_option', 
+                       __( 'Mailbox delivery option', 'chronopost' ),
+                       false, 
+                       'chronopost_optionpage'
+               );
+
+               add_settings_field( 
+                       'chronopost_bal_option_enable', 
+                       __( 'Enable bal option', 'chronopost' ), 
+                       array($this, 'chronopost_bal_option_enable_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_bal_option' 
+               );
+
+               
+               
+                               
+               add_settings_section(
+                       'chronopost_saturday_shipping_option', 
+                       __( 'Saturday shipping', 'chronopost' ), 
+                       false, 
+                       'chronopost_optionpage'
+               );
+
+               add_settings_field( 
+                       'chronopost_saturday_shipping_begin_slot', 
+                       __( 'Slot when saturday option is enabled', 'chronopost' ), 
+                       array($this, 'chronopost_saturday_shipping_begin_slot_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_saturday_shipping_option' 
+               );
+                               
+               add_settings_section(
+                       'chronopost_insurance_option', 
+                       __( 'Ad Valorem Insurance', 'chronopost' ), 
+                       false, 
+                       'chronopost_optionpage'
+               );
+
+               add_settings_field( 
+                       'chronopost_insurance_option_enable', 
+                       __( 'Enable Ad Volorem Insurance', 'chronopost' ), 
+                       array($this, 'chronopost_insurance_option_enable_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_insurance_option' 
+               );
+
+               add_settings_field( 
+                       'chronopost_insurance_amount', 
+                       __( 'Minimum amount to be insured', 'chronopost' ), 
+                       array($this, 'chronopost_insurance_amount_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_insurance_option' 
+               );      
+               
+               add_settings_section(
+                       'chronopost_css_export_settings', 
+                       __( 'CSS Export Settings', 'chronopost' ), 
+                       false, 
+                       'chronopost_optionpage'
+               );
+
+               add_settings_field( 
+                       'chronopost_css_file_ext', 
+                       __( 'File Extension', 'chronopost' ), 
+                       array($this, 'chronopost_css_file_ext_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_css_export_settings' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_css_file_charset', 
+                       __( 'File charset', 'chronopost' ), 
+                       array($this, 'chronopost_css_file_charset_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_css_export_settings' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_css_eol_ext', 
+                       __( 'End of line character', 'chronopost' ), 
+                       array($this, 'chronopost_css_eol_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_css_export_settings' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_css_field_delimiter', 
+                       __( 'Field delimiter', 'chronopost' ), 
+                       array($this, 'chronopost_css_field_delimiter_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_css_export_settings' 
+               );
+               
+               add_settings_field( 
+                       'chronopost_css_field_separator', 
+                       __( 'Field separator', 'chronopost' ), 
+                       array($this, 'chronopost_css_field_separator_render'), 
+                       'chronopost_optionpage', 
+                       'chronopost_css_export_settings' 
+               );
+               add_action('pre_update_option_chronopost_imports', array($this, 'process_trackings_file'), 10, 3);
+       }
+
+       function start_section() {
+           ?><button class="clean-section button button-primary"><?php echo __('Reset form data', 'chronopost') ?></button><?php
+    }
+
+       function chronopost_insurance_option_enable_render() {
+               $wp_locale = new WP_Locale;
+               ?>
+               <select name='chronopost_settings[insurance][enable]'>
+                       <option value="no"<?php echo chrono_get_option('enable', 'insurance') == 'no' ? ' selected="selected"' : ''; ?>><?php _e('No', 'chronopost'); ?></option>
+                       <option value="yes"<?php echo chrono_get_option('enable', 'insurance') == 'yes' ? ' selected="selected"' : ''; ?>><?php _e('Yes', 'chronopost'); ?></option>
+               </select>
+               <?php
+       }
+
+       function chronopost_saturday_shipping_begin_slot_render() {
+               $wp_locale = new WP_Locale;
+               $startday = chrono_get_option('startday', 'saturday_slot', 4);
+               $endday = chrono_get_option('endday', 'saturday_slot', 5);
+               $starttime = chrono_get_option('starttime', 'saturday_slot', '15:00');
+               $endtime = chrono_get_option('endtime', 'saturday_slot', '18:00');
+               ?>
+               <table class="saturday-slot-table">
+                       <colgroup>
+                               <col style="width:4%">
+                               <col style="width:45%">
+                               <col style="width:4%;">
+                               <col style="width:45%;">
+                       </colgroup>
+                       <tbody>
+                               <tr data-id="1">
+                                               <td><?php _e('From', 'chronopost'); ?></td>
+                                               <td>
+                                                       <select name="chronopost_settings[saturday_slot][startday]">
+                                                                       <?php foreach($wp_locale->weekday as $key=>$day): ?>
+                                                                               <option value="<?php echo $key; ?>"<?php echo $key == $startday ? ' selected="selected"' : ''?>><?php echo $day; ?></option>
+                                                                       <?php endforeach; ?>
+                                                       </select>
+                                                       <input type="text" name="chronopost_settings[saturday_slot][starttime]" value="<?php echo $starttime; ?>" class="small-text timepicker" tabindex="-1">                  
+                                               </td>
+                                               <td><?php _e('To', 'chronopost'); ?></td>
+                                               <td>
+                                                       <select name="chronopost_settings[saturday_slot][endday]">
+                                                                       <?php foreach($wp_locale->weekday as $key=>$day): ?>
+                                                                               <option value="<?php echo $key; ?>"<?php echo $key == $endday ? ' selected="selected"' : ''?>><?php echo $day; ?></option>
+                                                                       <?php endforeach; ?>
+                                                       </select>
+                                                       <input type="text" name="chronopost_settings[saturday_slot][endtime]" value="<?php echo $endtime; ?>" class="small-text timepicker" tabindex="0">                       
+                                               </td>
+                               </tr>
+                       </tbody>
+               </table>
+               <?php
+       }
+
+       function chronopost_saturday_shipping_end_slot_render() {
+
+       }
+
+       function chronopost_main_settings_intro() {
+               ?>
+               <div class="chronopost-intro">
+                       <p>
+                               <?php _e('Offer to your customers the first Express delivery service with the official Chronopost module for WooCommerce. With Chronopost, your customer will have the choice of the main delivery modes within 24h : at home,  at a Pickup point or at the office !', 'chronopost'); ?></strong>
+                       </p><p>
+                               <?php _e('Your customers will also have the rdv service :  They are notified by email or SMS the day before the delivery and can reschedule the delivery or ask to be delivered at a pickup point among more than 17 000 points (post offices, Pickup relay or Chronopost agencies).', 'chronopost'); ?>
+                       </p><p>
+                               <?php _e('Expand your business internationally with Chronopost international delivery service which is included in this module.', 'chronopost'); ?>
+                       </p><p><strong>
+                               <?php _e('Find all these services in the Chronopost e-commerce pack : MyChrono. To activate the module on your site, contact us at ', 'chronopost'); ?><a href="mailto:demandez.a.chronopost@chronopost.fr">demandez.a.chronopost@chronopost.fr</a>
+                               </strong>
+                       </p>
+               </div>
+               <?php 
+       }
+       
+       function chronopost_insurance_amount_render() {
+               ?>
+               <input type='number' name='chronopost_settings[insurance][min_amount]' value='<?php echo chrono_get_option('min_amount', 'insurance'); ?>'>
+               <?php
+       }
+       
+       function chronopost_bal_option_enable_render() {
+               ?>
+               <select name='chronopost_settings[bal_option][enable]'>
+                       <option value="no"<?php echo chrono_get_option('enable', 'bal_option') == 'no' ? ' selected="selected"' : ''; ?>><?php _e('No', 'chronopost'); ?></option>
+                       <option value="yes"<?php echo chrono_get_option('enable', 'bal_option') == 'yes' ? ' selected="selected"' : ''; ?>><?php _e('Yes', 'chronopost'); ?></option>
+               </select>
+               <?php
+       }
+       
+       function chronopost_css_file_charset_render() {
+               ?>
+               <select name='chronopost_settings[css][file_charset]'>
+                       <option value="ISO-8859-1"<?php echo chrono_get_option('file_charset', 'css') == 'ISO-8859-1' ? ' selected="selected"' : ''; ?>>ISO-8859-1</option>
+                       <option value="UTF-8"<?php echo chrono_get_option('file_charset', 'css') == 'UTF-8' ? ' selected="selected"' : ''; ?>>UTF-8</option>
+                       <option value="ASCII-7"<?php echo chrono_get_option('file_charset', 'css') == 'ASCII-7' ? ' selected="selected"' : ''; ?>>ASCII-7 Bits</option>
+               </select>
+               <?php
+       }
+       
+       function chronopost_css_eol_render() {
+               ?>
+               <select name='chronopost_settings[css][eol]'>
+                       <option value="lf"<?php echo chrono_get_option('eol', 'css') == 'lf' ? ' selected="selected"' : ''; ?>>LF</option>
+                       <option value="cr"<?php echo chrono_get_option('eol', 'css') == 'cr' ? ' selected="selected"' : ''; ?>>CR</option>eol
+                       <option value="crlf"<?php echo chrono_get_option('eol', 'css') == 'crlf' ? ' selected="selected"' : ''; ?>>CR+LF</option>
+               </select>
+               <?php
+       }
+       
+       function chronopost_css_field_delimiter_render() {
+               ?>
+               <select name='chronopost_settings[css][field_delimiter]'>
+                       <option value="none"<?php echo chrono_get_option('field_delimiter', 'css') == 'none' ? ' selected="selected"' : ''; ?>><?php _e('None', 'chronopost'); ?></option>
+                       <option value="simple_quote"<?php echo chrono_get_option('field_delimiter', 'css') == 'simple_quote' ? ' selected="selected"' : ''; ?>><?php _e('Simple quote', 'chronopost'); ?></option>
+                       <option value="double_quotes"<?php echo chrono_get_option('field_delimiter', 'css') == 'double_quotes' ? ' selected="selected"' : ''; ?>><?php _e('Double quotes', 'chronopost'); ?></option>
+               </select>
+               <?php
+       }
+       
+       function chronopost_css_field_separator_render() {
+               ?>
+               <select name='chronopost_settings[css][field_separator]'>
+                       <option value=";"<?php echo chrono_get_option('field_separator', 'css') == ';' ? ' selected="selected"' : ''; ?>><?php _e('Semicolon', 'chronopost'); ?></option>
+                       <option value=","<?php echo chrono_get_option('field_separator', 'css') == ',' ? ' selected="selected"' : ''; ?>><?php _e('Comma', 'chronopost'); ?></option>
+               </select>
+               <?php
+       }
+       
+       function chronopost_css_file_ext_render() {
+               ?>
+               <select name='chronopost_settings[css][file_extension]'>
+                       <option value=".txt"<?php echo chrono_get_option('file_extension', 'css') == '.txt' ? ' selected="selected"' : ''; ?>>.txt</option>
+                       <option value=".csv"<?php echo chrono_get_option('file_extension', 'css') == '.csv' ? ' selected="selected"' : ''; ?>>.csv</option>
+                       <option value=".chr"<?php echo chrono_get_option('file_extension', 'css') == '.chr' ? ' selected="selected"' : ''; ?>>.chr</option>
+               </select>
+               <?php
+       }
+
+       function chronopost_gmap_api_key_render() {
+               ?>
+               <input type='text' name='chronopost_settings[gmap][api_key]' value='<?php echo chrono_get_option('api_key', 'gmap'); ?>'>
+               <?php
+       }
+       
+       function chronopost_skybill_mode_render() {
+               ?>
+               <select name='chronopost_settings[skybill][mode]'>
+                       <option value="PDF"<?php echo chrono_get_option('mode', 'skybill') == 'PDF' ? ' selected="selected"' : ''; ?>><?php echo __('Print PDF Laser with proof.', 'chronopost'); ?></option>
+                       <option value="SPD"<?php echo chrono_get_option('mode', 'skybill') == 'SPD' ? ' selected="selected"' : ''; ?>><?php echo __('Print PDF laser without proof', 'chronopost'); ?></option>
+                       <option value="THE"<?php echo chrono_get_option('mode', 'skybill') == 'THE' ? ' selected="selected"' : ''; ?>><?php echo __('Print PDF thermal', 'chronopost'); ?></option>
+               </select>
+               <?php
+       }
+
+       function chronopost_shipper_civility_render() {
+               ?>
+               <select name='chronopost_settings[shipper][civility]'>
+                       <option value="M"<?php echo chrono_get_option('civility', 'shipper') == 'M' ? ' selected="selected"' : ''; ?>><?php echo __('Mr.', 'chronopost'); ?></option>
+                       <option value="E"<?php echo chrono_get_option('civility', 'shipper') == 'E' ? ' selected="selected"' : ''; ?>><?php echo __('Mrs', 'chronopost'); ?></option>
+                       <option value="L"<?php echo chrono_get_option('civility', 'shipper') == 'L' ? ' selected="selected"' : ''; ?>><?php echo __('Miss', 'chronopost'); ?></option>
+               </select>
+               <?php
+       }
+
+       function chronopost_shipper_name_render() {
+               ?>
+               <input type='text' name='chronopost_settings[shipper][name]' value='<?php echo chrono_get_option('name', 'shipper'); ?>'>
+               <?php
+       }
+
+       function chronopost_shipper_name2_render() {
+               ?>
+               <input type='text' name='chronopost_settings[shipper][name2]' value='<?php echo chrono_get_option('name2', 'shipper'); ?>'>
+               <?php
+       }
+
+       function chronopost_shipper_address_render() {
+               ?>
+               <input type='text' name='chronopost_settings[shipper][address]' value='<?php echo chrono_get_option('address', 'shipper'); ?>'>
+               <?php
+       }
+
+       function chronopost_shipper_address2_render() {
+               ?>
+               <input type='text' name='chronopost_settings[shipper][address2]' value='<?php echo chrono_get_option('address2', 'shipper'); ?>'>
+               <?php
+       }
+
+       function chronopost_shipper_zipcode_render() {
+               ?>
+               <input type='text' name='chronopost_settings[shipper][zipcode]' value='<?php echo chrono_get_option('zipcode', 'shipper'); ?>'>
+               <?php
+       }
+
+       function chronopost_shipper_contactname_render() {
+               ?>
+               <input type='text' name='chronopost_settings[shipper][contactname]' value='<?php echo chrono_get_option('contactname', 'shipper'); ?>'>
+               <?php
+       }
+
+       function chronopost_shipper_email_render() {
+               ?>
+               <input type='text' name='chronopost_settings[shipper][email]' value='<?php echo chrono_get_option('email', 'shipper'); ?>'>
+               <?php
+       }
+
+       function chronopost_shipper_phone_render() {
+               ?>
+               <input type='text' name='chronopost_settings[shipper][phone]' value='<?php echo chrono_get_option('phone', 'shipper'); ?>'>
+               <?php
+       }
+
+       function chronopost_shipper_mobile_render() {
+               ?>
+               <input type='text' name='chronopost_settings[shipper][mobile]' value='<?php echo chrono_get_option('mobile', 'shipper'); ?>'>
+               <?php
+       }
+
+       function chronopost_shipper_city_render() {
+               ?>
+               <input type='text' name='chronopost_settings[shipper][city]' value='<?php echo chrono_get_option('city', 'shipper'); ?>'>
+               <?php
+       }
+
+       function chronopost_shipper_country_render() {
+               ?>
+               <select name='chronopost_settings[shipper][country]'>
+                       <option value="FR"<?php echo chrono_get_option('country', 'shipper') == 'FR' ? ' selected="selected"' : ''; ?>>France Métropolitaine</option>
+                       <option value="GP"<?php echo chrono_get_option('country', 'shipper') == 'GP' ? ' selected="selected"' : ''; ?>>Guadeloupe</option>
+                       <option value="GF"<?php echo chrono_get_option('country', 'shipper') == 'GF' ? ' selected="selected"' : ''; ?>>Guyane</option>
+                       <option value="MQ"<?php echo chrono_get_option('country', 'shipper') == 'MQ' ? ' selected="selected"' : ''; ?>>Martinique</option>
+                       <option value="YT"<?php echo chrono_get_option('country', 'shipper') == 'YT' ? ' selected="selected"' : ''; ?>>Mayotte</option>
+                       <option value="RE"<?php echo chrono_get_option('country', 'shipper') == 'RE' ? ' selected="selected"' : ''; ?>>Réunion</option>
+                       <option value="MF"<?php echo chrono_get_option('country', 'shipper') == 'MF' ? ' selected="selected"' : ''; ?>>Saint-Martin</option>
+               </select>
+               <?php
+       }
+
+        function chronopost_account_render() {
+           $accounts_values = chrono_get_option('accounts');
+           if (!$accounts_values) {
+                   $default_values = self::get_default_values();
+               $accounts_values = $default_values['contract'];
+        }
+               ?>
+        <table class="form-table show-table">
+            <tr>
+                <td>
+                    <div class="chronopost-accounts-settings">
+                        <p class="hint"><?php _e('Put here all your Chronopost contracts. You can change the default contract for each shipping method in the Carrier settings page.', 'chronopost') ?></p>
+                        <script type="text/javascript">
+                            var chrono_alert_remove_contract = '<?php echo str_replace("'", "\'", __('This will permanently delete this contract. Are you sure you want to proceed ?', 'chronopost')); ?>';
+                        </script>
+                        <input type="hidden" name="chronopost_account_index" value="<?php echo max(array_keys($accounts_values)) ?>" >
+                        <button style="display: none" id="chrono_remove_button_template" class="removeContract button button-delete"><?php echo __('Remove contract', 'chronopost') ?></button>
+                        <?php foreach($accounts_values as $index => $account_settings): ?>
+                        <div class="chronopost-settings-account status-<?php echo $account_settings['status'] ?> <?php echo ($index === 1) ? 'default' : '' ?>">
+                            <p class="account-title"><?php echo __('Account #', 'chronopost') . '<span class="index">' . $index .'</span>' ?></p>
+                            <table class="form-table show-table">
+                                <tr>
+                                    <th scope="row"><?php echo __( 'Account number', 'chronopost' ) ?></th>
+                                    <td><input class="account-number" type='text' name='chronopost_settings[general][accounts][<?php echo $index ?>][number]' value='<?php echo $account_settings['number']; ?>'></td>
+                                </tr>
+                                <tr>
+                                    <th scope="row"><?php echo __( 'Account label', 'chronopost' ) ?></th>
+                                    <td><input class="account-label" type='text' name='chronopost_settings[general][accounts][<?php echo $index ?>][label]' value='<?php echo $account_settings['label']; ?>'></td>
+                                </tr>
+                                <tr>
+                                    <th scope="row"><?php echo __( 'Sub-account number', 'chronopost' ) ?></th>
+                                    <td><input class="account-subaccount" type='text' name='chronopost_settings[general][accounts][<?php echo $index ?>][subaccount]' value='<?php echo $account_settings['subaccount']; ?>'></td>
+                                </tr>
+                                <tr>
+                                    <th scope="row"><?php echo __( 'Chronopost password', 'chronopost' ) ?></th>
+                                    <td><input class="account-password" type='text' name='chronopost_settings[general][accounts][<?php echo $index ?>][password]' value='<?php echo $account_settings['password']; ?>'></td>
+                                </tr>
+                                <tr class="contract-functions">
+                                    <td class="contract-test"><button class="testWSLogin button button-secondary"><?php _e('Test my login datas', 'chronopost'); ?></button>
+                                        <span class="spinner"></span></td>
+                                    <td class="contract-delete">
+                                        <?php if ($index !== 1): ?>
+                                            <button class="removeContract button button-delete"><?php echo __('Remove contract', 'chronopost') ?></button>
+                                        <?php endif; ?>
+                                    </td>
+                                </tr>
+                                <tr><td class="testWSLoginResult" colspan="2"></td></tr>
+                            </table>
+                        </div>
+                        <?php endforeach; ?>
+                    </div>
+
+                    <button class="addNewContract button button-primary"><?php echo __('Add a new contract', 'chronopost') ?></button>
+                </td>
+            </tr>
+        </table>
+               <?php
+       }
+
+       function chronopost_customer_civility_render() {
+               ?>
+               <select name='chronopost_settings[customer][civility]'>
+                       <option value="M"<?php echo chrono_get_option('civility', 'customer') == 'M' ? ' selected="selected"' : ''; ?>><?php echo __('Mr.', 'chronopost'); ?></option>
+                       <option value="E"<?php echo chrono_get_option('civility', 'customer') == 'E' ? ' selected="selected"' : ''; ?>><?php echo __('Mrs', 'chronopost'); ?></option>
+                       <option value="L"<?php echo chrono_get_option('civility', 'customer') == 'L' ? ' selected="selected"' : ''; ?>><?php echo __('Miss', 'chronopost'); ?></option>
+               </select>
+               <?php
+       }
+
+       function chronopost_customer_name_render() {
+               ?>
+               <input type='text' name='chronopost_settings[customer][name]' value='<?php echo chrono_get_option('name', 'customer'); ?>'>
+               <?php
+       }
+
+       function chronopost_customer_name2_render() {
+               ?>
+               <input type='text' name='chronopost_settings[customer][name2]' value='<?php echo chrono_get_option('name2', 'customer'); ?>'>
+               <?php
+       }
+
+       function chronopost_customer_address_render() {
+               ?>
+               <input type='text' name='chronopost_settings[customer][address]' value='<?php echo chrono_get_option('address', 'customer'); ?>'>
+               <?php
+       }
+
+       function chronopost_customer_address2_render() {
+               ?>
+               <input type='text' name='chronopost_settings[customer][address2]' value='<?php echo chrono_get_option('address2', 'customer'); ?>'>
+               <?php
+       }
+
+       function chronopost_customer_zipcode_render() {
+               ?>
+               <input type='text' name='chronopost_settings[customer][zipcode]' value='<?php echo chrono_get_option('zipcode', 'customer'); ?>'>
+               <?php
+       }
+
+       function chronopost_customer_contactname_render() {
+               ?>
+               <input type='text' name='chronopost_settings[customer][contactname]' value='<?php echo chrono_get_option('contactname', 'customer'); ?>'>
+               <?php
+       }
+
+       function chronopost_customer_email_render() {
+               ?>
+               <input type='text' name='chronopost_settings[customer][email]' value='<?php echo chrono_get_option('email', 'customer'); ?>'>
+               <?php
+       }
+
+       function chronopost_customer_phone_render() {
+               ?>
+               <input type='text' name='chronopost_settings[customer][phone]' value='<?php echo chrono_get_option('phone', 'customer'); ?>'>
+               <?php
+       }
+
+       function chronopost_customer_mobile_render() {
+               ?>
+               <input type='text' name='chronopost_settings[customer][mobile]' value='<?php echo chrono_get_option('mobile', 'customer'); ?>'>
+               <?php
+       }
+
+       function chronopost_customer_city_render() {
+               ?>
+               <input type='text' name='chronopost_settings[customer][city]' value='<?php echo chrono_get_option('city', 'customer'); ?>'>
+               <?php
+       }
+
+       function chronopost_customer_country_render() {
+               ?>
+               <select name='chronopost_settings[customer][country]'>
+                       <option value="FR"<?php echo chrono_get_option('country', 'customer') == 'FR' ? ' selected="selected"' : ''; ?>>France Métropolitaine</option>
+                       <option value="GP"<?php echo chrono_get_option('country', 'customer') == 'GP' ? ' selected="selected"' : ''; ?>>Guadeloupe</option>
+                       <option value="GF"<?php echo chrono_get_option('country', 'customer') == 'GF' ? ' selected="selected"' : ''; ?>>Guyane</option>
+                       <option value="MQ"<?php echo chrono_get_option('country', 'customer') == 'MQ' ? ' selected="selected"' : ''; ?>>Martinique</option>
+                       <option value="YT"<?php echo chrono_get_option('country', 'customer') == 'YT' ? ' selected="selected"' : ''; ?>>Mayotte</option>
+                       <option value="RE"<?php echo chrono_get_option('country', 'customer') == 'RE' ? ' selected="selected"' : ''; ?>>Réunion</option>
+                       <option value="MF"<?php echo chrono_get_option('country', 'customer') == 'MF' ? ' selected="selected"' : ''; ?>>Saint-Martin</option>
+               </select>
+               <?php
+       }
+
+       function chronopost_return_civility_render() {
+               ?>
+               <select name='chronopost_settings[return][civility]'>
+                       <option value="M"<?php echo chrono_get_option('civility', 'return') == 'M' ? ' selected="selected"' : ''; ?>><?php echo __('Mr.', 'chronopost'); ?></option>
+                       <option value="E"<?php echo chrono_get_option('civility', 'return') == 'E' ? ' selected="selected"' : ''; ?>><?php echo __('Mrs', 'chronopost'); ?></option>
+                       <option value="L"<?php echo chrono_get_option('civility', 'return') == 'L' ? ' selected="selected"' : ''; ?>><?php echo __('Miss', 'chronopost'); ?></option>
+               </select>
+               <?php
+       }
+
+       function chronopost_return_name_render() {
+               ?>
+               <input type='text' name='chronopost_settings[return][name]' value='<?php echo chrono_get_option('name', 'return'); ?>'>
+               <?php
+       }
+
+       function chronopost_return_name2_render() {
+               ?>
+               <input type='text' name='chronopost_settings[return][name2]' value='<?php echo chrono_get_option('name2', 'return'); ?>'>
+               <?php
+       }
+
+       function chronopost_return_address_render() {
+               ?>
+               <input type='text' name='chronopost_settings[return][address]' value='<?php echo chrono_get_option('address', 'return'); ?>'>
+               <?php
+       }
+
+       function chronopost_return_address2_render() {
+               ?>
+               <input type='text' name='chronopost_settings[return][address2]' value='<?php echo chrono_get_option('address2', 'return'); ?>'>
+               <?php
+       }
+
+       function chronopost_return_zipcode_render() {
+               ?>
+               <input type='text' name='chronopost_settings[return][zipcode]' value='<?php echo chrono_get_option('zipcode', 'return'); ?>'>
+               <?php
+       }
+
+       function chronopost_return_contactname_render() {
+               ?>
+               <input type='text' name='chronopost_settings[return][contactname]' value='<?php echo chrono_get_option('contactname', 'return'); ?>'>
+               <?php
+       }
+
+       function chronopost_return_email_render() {
+               ?>
+               <input type='text' name='chronopost_settings[return][email]' value='<?php echo chrono_get_option('email', 'return'); ?>'>
+               <?php
+       }
+
+       function chronopost_return_phone_render() {
+               ?>
+               <input type='text' name='chronopost_settings[return][phone]' value='<?php echo chrono_get_option('phone', 'return'); ?>'>
+               <?php
+       }
+
+       function chronopost_return_mobile_render() {
+               ?>
+               <input type='text' name='chronopost_settings[return][mobile]' value='<?php echo chrono_get_option('mobile', 'return'); ?>'>
+               <?php
+       }
+
+       function chronopost_return_city_render() {
+               ?>
+               <input type='text' name='chronopost_settings[return][city]' value='<?php echo chrono_get_option('city', 'return'); ?>'>
+               <?php
+       }
+
+       function chronopost_return_country_render() {
+               ?>
+               <select name='chronopost_settings[return][country]'>
+                       <option value="FR"<?php echo chrono_get_option('country', 'return') == 'FR' ? ' selected="selected"' : ''; ?>>France Métropolitaine</option>
+                       <option value="GP"<?php echo chrono_get_option('country', 'return') == 'GP' ? ' selected="selected"' : ''; ?>>Guadeloupe</option>
+                       <option value="GF"<?php echo chrono_get_option('country', 'return') == 'GF' ? ' selected="selected"' : ''; ?>>Guyane</option>
+                       <option value="MQ"<?php echo chrono_get_option('country', 'return') == 'MQ' ? ' selected="selected"' : ''; ?>>Martinique</option>
+                       <option value="YT"<?php echo chrono_get_option('country', 'return') == 'YT' ? ' selected="selected"' : ''; ?>>Mayotte</option>
+                       <option value="RE"<?php echo chrono_get_option('country', 'return') == 'RE' ? ' selected="selected"' : ''; ?>>Réunion</option>
+                       <option value="MF"<?php echo chrono_get_option('country', 'return') == 'MF' ? ' selected="selected"' : ''; ?>>Saint-Martin</option>
+               </select>
+               <?php
+       }
+
+       function chronopost_options_page() { 
+               ?>
+               <form action='options.php' method='post'>
+                       <h1>Chronopost</h1>
+                       <table class="form-table">
+                               <tbody>
+                    <tr><td><?php settings_fields( 'chronopost_optionpage' ); ?></td></tr>
+                                       <?php
+                                       do_settings_sections( 'chronopost_optionpage' );
+                                       submit_button();
+                                       ?>
+                               </tbody>
+                       </table>
+
+               </form>
+               <?php
+       }
+
+       function chronopost_shipping() {
+               global $wpdb;
+               $prefixe = $wpdb->prefix;
+
+               require_once plugin_dir_path( dirname( __FILE__ ) ) . 'partials/chronopost-admin-shipping.php';
+       }
+
+        function chronopost_imports() {
+                ?>
+         <div class="wrap">
+             <form action='options.php' method='post' enctype='multipart/form-data'>
+                 <h1><?php echo __('Import trackings', 'chronopost') ?></h1>
+                 <table class="form-table">
+                     <tbody>
+                     <tr><td><?php settings_fields( 'chronopost_imports_page' ); ?></td></tr>
+                     <?php
+                     do_settings_sections( 'chronopost_imports_page' );
+                     submit_button(__("Import tracking informations", 'chronopost'));
+                     ?>
+                     </tbody>
+                 </table>
+             </form>
+         </div>
+                <?php
+        }
+
+        function chronopost_imports_init()
+        {
+                register_setting( 'chronopost_imports_page', 'chronopost_imports' );
+
+                add_settings_section(
+                        'chronopost_imports_section',
+                        false,
+                        array($this, 'chronopost_imports_render'),
+                        'chronopost_imports_page'
+                );
+        }
+
+        function chronopost_imports_render() {
+                require_once plugin_dir_path( dirname( __FILE__ ) ) . 'partials/chronopost-admin-import-tracking.php';
+     }
+
+     function process_trackings_file($value, $old_value, $option)
+     {
+            $settings_page = 'chronopost_imports';
+
+         if (!is_numeric($value["general"]["order_id_column"]) || !is_numeric($value["general"]["tracking_number_column"])) {
+                add_settings_error( $settings_page, 10, __('Please choose the order reference and tracking number columns number') );
+             return $value;
+         }
+
+         if ($_FILES['chronopost_tracking'] && $_FILES['chronopost_tracking']['size'] > 0) {
+                $upload_feedback = false;
+                $finfo = new finfo(FILEINFO_MIME_TYPE);
+                // If the uploaded file is the right format
+                if (false === $ext = array_search(
+                                $finfo->file($_FILES['chronopost_tracking']['tmp_name']),
+                                array(
+                                        'text' => 'text/plain',
+                                        'csv' => 'text/csv'
+                                ),
+                                true
+                        )) {
+                        $upload_feedback = __('Please upload only CSV files.', 'chronopost');
+                        add_settings_error( $settings_page, 10, $upload_feedback );
+                }
+
+                if($upload_feedback === false && isset($_FILES['chronopost_tracking']['tmp_name']) && $_FILES['chronopost_tracking']['error'] === 0) {
+                        $updated_trackings = 0;
+                        $handle = fopen( $_FILES['chronopost_tracking']['tmp_name'], 'r' );
+                        while ( $row = fgetcsv( $handle, 0, ';' ) ) {
+                                $order_id = $row[ $value["general"]["order_id_column"] - 1 ];
+                                if ( ! is_numeric( $order_id ) ) {
+                                        continue;
+                                }
+                                $tracking_number = $row[ $value["general"]["tracking_number_column"] - 1 ];
+                                $trackingNumbers = explode( ',', trim( $tracking_number, '[]' ) );
+                                if (!is_array($trackingNumbers)) {
+                                        $upload_feedback = __('Unable to find tracking numbers (wrong column ?)', 'chronopost');
+                                        add_settings_error( $settings_page, 10, $upload_feedback );
+                                        continue;
+                     }
+
+                                $parcels = array();
+                                foreach ($trackingNumbers as $tracking_number) {
+                                        $parcel                = new stdClass();
+                                        $parcel->skybillNumber = $tracking_number;
+                                        $parcel->imported      = true;
+                                        $parcels[] = $parcel;
+                                        $updated_trackings ++;
+                     }
+                                $_order                = new WC_Order( $order_id );
+                                WC_Chronopost_Order::add_tracking_numbers( $_order, $parcels );
+                        }
+                        add_settings_error($settings_page, 100, sprintf(__('Tracking informations updated. Total processed : %s', 'chronopost'), $updated_trackings), 'updated');
+                } else {
+                        $upload_feedback = __('There was a problem with your upload.', 'chronopost');
+                        add_settings_error( $settings_page, 20, $upload_feedback );
+                }
+         } else {
+                $upload_feedback = __('No file was uploaded.', 'chronopost');
+                add_settings_error( $settings_page, 1, $upload_feedback );
+         }
+         return $value;
+     }
+
+       function chronopost_daily_docket() {
+               global $wpdb;
+               $prefixe = $wpdb->prefix;
+
+               require_once plugin_dir_path( dirname( __FILE__ ) ) . 'partials/chronopost-admin-daily-docket.php';
+       }
+       
+       function chronopost_exports() {
+               global $wpdb;
+               $prefixe = $wpdb->prefix;
+
+               require_once plugin_dir_path( dirname( __FILE__ ) ) . 'partials/chronopost-admin-exports.php';
+       }
+}
+
+new Chronopost_Admin_Display();
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/partials/chronopost-admin-exports.php b/wp-content/plugins/woocommerce-chronopost/admin/partials/chronopost-admin-exports.php
new file mode 100755 (executable)
index 0000000..6323b18
--- /dev/null
@@ -0,0 +1,141 @@
+<?php
+$pagenum = isset( $_GET['pagenum'] ) ? absint( $_GET['pagenum'] ) : 1;
+$limit = 10;
+$offset = ( $pagenum - 1 ) * $limit;
+// Get the orders
+$_orders = WC_Chronopost_Order::get_orders($limit, $pagenum);
+$total = WC_Chronopost_Order::get_post_count(true);
+$num_of_pages = ceil( $total / $limit );
+?>
+
+<div class="wrap">
+    <form id="shipment-list" method="get">
+        <h1><?php _e("Chronopost Exports", 'chronopost') ?></h1>
+        <hr class="wp-header-end">
+        <div class="tablenav top">
+            <div class="alignleft actions bulkactions">
+                <label for="bulk-action-selector-top" class="screen-reader-text"><?php _e( 'Select bulk action' ); ?></label><select name="chronoaction" id="bulk-action-selector-top">
+                <option value="-1"><?php _e( 'Bulk Actions' ); ?></option>
+                <option value="export-css" class="hide-if-no-js"><?php echo __('Export CSS', 'chronopost'); ?></option>
+                </select>
+                <input type="submit" id="doaction" class="button action" value="<?php _e('Apply'); ?>">
+                <span class="spinner"></span>
+            </div>
+
+            <div class="tablenav-pages">
+                <?php 
+                    $page_links = paginate_links( array(
+                        'base' => add_query_arg( 'pagenum', '%#%' ),
+                        'format' => '',
+                        'prev_text'          => '<span aria-label="' . esc_attr__( 'Previous page' ) . '">' . __( '&laquo;' ) . '</span>',
+                        'next_text'          => '<span aria-label="' . esc_attr__( 'Next page' ) . '">' . __( '&raquo;' ) . '</span>',
+                        'before_page_number' => '<span class="screen-reader-text">' . __( 'Page' ) . '</span> ',
+                        'total'   => $num_of_pages,
+                        'current' => $pagenum
+                    ));
+
+                    if ( $page_links ) {
+                        echo '<span class="displaying-num">' . sprintf( _n( '%s item', '%s items', $total ), number_format_i18n( $total ) ) . '</span>';
+                        echo $page_links;
+                    }
+                ?>
+            </div>
+        </div>
+        <input type="hidden" name="shipment_nonce" value="<?php echo wp_create_nonce( 'shipment_list_nonce' ); ?>">
+
+        <table class="wp-list-table widefat fixed striped posts" cellpadding="0" cellspacing="0">
+            <thead>
+                <td id="cb" class="manage-column column-cb check-column">
+                    <label class="screen-reader-text" for="cb-select-all-1"><?php _e('Select all'); ?></label>
+                    <input id="cb-select-all-1" type="checkbox">
+                </td>
+                <th class="manage-column column-order_status"><?php _e("Status", 'chronopost') ?></th>
+                <th class="manage-colum column-order_date"><?php _e("Order", 'woocommerce') ?></th>
+                <th class="manage-colum column-shipping_address"><?php _e("Shipped to", 'chronopost') ?></th>
+                <th class="manage-colum column-order_date"><?php _e("Date", 'chronopost') ?></th>
+                <th class="manage-colum column-actions"><?php _e("CSS", 'chronopost') ?></th>
+            </thead>
+            <tbody>
+            <?php while( $_orders->have_posts() ) : $_orders->the_post(); ?>
+                <?php
+                    $_order = new WC_Order( get_the_ID() );
+                    $order_shipping_method = $_order->get_shipping_methods();
+                    $shipping_method = reset($order_shipping_method);
+                    $shipping_method_id = $shipping_method->get_method_id();
+                    $shipment_datas = chrono_get_shipment_datas($_order->get_id());
+                ?>
+                <tr id="order-<?php echo $_order->get_id(); ?>">
+                    <th scope="row" class="check-column">
+                        <label class="screen-reader-text" for="cb-select-1"><?php printf(__('Select order #%s', 'chronopost'), $_order->get_id()); ?></label>
+                        <input id="cb-select-1" type="checkbox" name="order[]" value="<?php echo $_order->get_id(); ?>">
+                    </th>
+                    <td class="order_status column-order_status"><mark class="<?php echo str_replace('wc-', 'status-', get_post_status()) ?> order-status"><span><?php echo wc_get_order_status_name(get_post_status()) ?></span></mark></td>
+                    <td>
+                        <?php
+                        if ( $_order->get_customer_id() ) {
+                            $user     = get_user_by( 'id', $_order->get_customer_id() );
+                            $username = '<a href="user-edit.php?user_id=' . absint( $_order->get_customer_id() ) . '">';
+                            $username .= esc_html( ucwords( $user->display_name ) );
+                            $username .= '</a>';
+                        } elseif ( $_order->get_billing_first_name() || $_order->get_billing_last_name() ) {
+                            /* translators: 1: first name 2: last name */
+                            $username = trim( sprintf( _x( '%1$s %2$s', 'full name', 'woocommerce' ), $_order->get_billing_first_name(), $_order->get_billing_last_name() ) );
+                        } elseif ( $_order->get_billing_company() ) {
+                            $username = trim( $_order->get_billing_company() );
+                        } else {
+                            $username = __( 'Guest', 'woocommerce' );
+                        }
+
+                        printf(
+                            __( '%1$s by %2$s', 'woocommerce' ),
+                            '<a href="' . admin_url( 'post.php?post=' . absint( $_order->get_id() ) . '&action=edit' ) . '" class="row-title"><strong>#' . esc_attr( $_order->get_order_number() ) . '</strong></a>',
+                            $username
+                        );
+
+                        if ( $_order->get_billing_email() ) {
+                            echo '<small class="meta email"><a href="' . esc_url( 'mailto:' . $_order->get_billing_email() ) . '">' . esc_html( $_order->get_billing_email() ) . '</a></small>';
+                        }
+                        ?>
+                    </td>
+                    <td>
+                        <?php
+                            $address = $_order->get_shipping_address_1() . ' ' . $_order->get_shipping_address_2() . ' ' . $_order->get_shipping_postcode() . ' ' .$_order->get_shipping_city();
+                            $address_link = 'https://maps.google.com/maps?&q=' . urlencode( $address ) . '&z=16';
+                            echo "<a href=\"$address_link\">". get_post_meta( $_order->get_id(), '_shipping_address_index', true) . "</a>";
+                            echo "<small class=\"meta\">{$shipping_method->get_name()}</small>";
+                        ?>
+                    </td>
+                    <td>
+                        <?php echo get_the_date(); ?>
+                    </td>
+                <td class="tracking-link">
+                    <a class="button button-small button-primary chrono-generate-label" data-order-id="<?php echo $_order->get_id(); ?>" href="<?php echo admin_url('admin.php?page=chronopost-shipping&chronoaction=export-css&order='.$_order->get_id().'&shipment_nonce='.wp_create_nonce( 'shipment_list_nonce' )); ?>"><?php echo __('Export CSS', 'chronopost'); ?></a>
+                    <span class="spinner"></span>
+                </td>
+            </tr>
+            <?php endwhile; ?>
+            </tbody>
+        </table>
+        <div class="tablenav bottom">
+            <div class="tablenav-pages">
+                <?php 
+                    $page_links = paginate_links( array(
+                        'base' => add_query_arg( 'pagenum', '%#%' ),
+                        'format' => '',
+                        'prev_text'          => '<span aria-label="' . esc_attr__( 'Previous page' ) . '">' . __( '&laquo;' ) . '</span>',
+                        'next_text'          => '<span aria-label="' . esc_attr__( 'Next page' ) . '">' . __( '&raquo;' ) . '</span>',
+                        'before_page_number' => '<span class="screen-reader-text">' . __( 'Page' ) . '</span> ',
+                        'total'   => $num_of_pages,
+                        'current' => $pagenum
+                    ));
+
+                    if ( $page_links ) {
+                        echo '<span class="displaying-num">' . sprintf( _n( '%s item', '%s items', $total ), number_format_i18n( $total ) ) . '</span>';
+                        echo $page_links;
+                    }
+                ?>
+            </div>
+            <br class="clear">
+        </div>
+    </form>
+</div>
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/partials/chronopost-admin-import-tracking.php b/wp-content/plugins/woocommerce-chronopost/admin/partials/chronopost-admin-import-tracking.php
new file mode 100755 (executable)
index 0000000..2b1fa67
--- /dev/null
@@ -0,0 +1,24 @@
+<?php settings_errors(); ?>
+<table class="form-table show-table">
+       <tr>
+               <td>
+                       <div class="chronopost-imports">
+                               <div class="hint"><?php _e( 'Use this function to massively assign Chronopost parcel numbers to the desired orders. 
+                            This is useful if you edit your waybills from a third-party application. (Eg ChronoShip Office ChronoShip Station ...).
+                            The expected file must be in CSV format with semicolon separator.<br/><br/>It must contain 2 columns : <ol><li>WooCommerce orders reference</li><li>
+                            Chronopost tracking number</li></ol><br/>An email contaning the tracking number and a link 
+                            to follow the parcel will be sent to the customer.',
+                                               'chronopost' ) ?></div>
+                               <div class="chronopost-import-trackings">
+                                       <label><span><?php _e( 'Order reference column number', 'chronopost' ) ?></span><input
+                                                       name="chronopost_imports[general][order_id_column]" type="number" value="<?php echo chrono_get_imports_option('order_id_column') ?>" min="1"></label>
+                                       <label><span><?php _e( 'Tracking column number', 'chronopost' ) ?></span><input
+                                                       name="chronopost_imports[general][tracking_number_column]" type="number" value="<?php echo chrono_get_imports_option('tracking_number_column') ?>" min="1"></label>
+                                       <label><strong><?php _e( 'Pick a file to upload', 'chronopost' ) ?></strong>
+                                               <input type="file" name="chronopost_tracking" value="">
+                                       </label>
+                               </div>
+                       </div>
+               </td>
+       </tr>
+</table>
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/partials/chronopost-admin-shipping.php b/wp-content/plugins/woocommerce-chronopost/admin/partials/chronopost-admin-shipping.php
new file mode 100755 (executable)
index 0000000..ffc07a7
--- /dev/null
@@ -0,0 +1,238 @@
+<?php
+$pagenum = isset( $_GET['pagenum'] ) ? absint( $_GET['pagenum'] ) : 1;
+$limit = 10;
+$offset = ( $pagenum - 1 ) * $limit;
+// Get the orders
+$_orders = WC_Chronopost_Order::get_orders($limit, $pagenum);
+
+$total = WC_Chronopost_Order::get_post_count();
+$num_of_pages = ceil( $total / $limit );
+?>
+<div class="wrap">
+    <form id="shipment-list" method="post" action="<?php echo admin_url('admin.php?page=chronopost-shipping&pagenum='.$pagenum); ?>">
+        <h1><?php _e("Chronopost shipments", 'chronopost') ?></h1>
+        <hr class="wp-header-end">
+        <div class="tablenav top">
+            <div class="alignleft actions bulkactions">
+                <label for="bulk-action-selector-top" class="screen-reader-text"><?php _e( 'Select bulk action' ); ?></label><select name="chronoaction" id="bulk-action-selector-top">
+                <option value="-1"><?php _e( 'Bulk Actions' ); ?></option>
+                <option value="print-label" class="hide-if-no-js"><?php echo __('Generate label', 'chronopost'); ?></option>
+                <option value="cancel-label" class="hide-if-no-js"><?php echo __('Cancel label', 'chronopost'); ?></option>
+                </select>
+                <input type="submit" id="doaction" class="button action" value="<?php _e('Apply'); ?>">
+                <span class="spinner"></span>
+            </div>
+
+            <div class="tablenav-pages">
+                <?php 
+                    $page_links = paginate_links( array(
+                        'base' => add_query_arg( 'pagenum', '%#%' ),
+                        'format' => '',
+                        'prev_text'          => '<span aria-label="' . esc_attr__( 'Previous page' ) . '">' . __( '&laquo;' ) . '</span>',
+                        'next_text'          => '<span aria-label="' . esc_attr__( 'Next page' ) . '">' . __( '&raquo;' ) . '</span>',
+                        'before_page_number' => '<span class="screen-reader-text">' . __( 'Page' ) . '</span> ',
+                        'total'   => $num_of_pages,
+                        'current' => $pagenum
+                    ));
+
+                    if ( $page_links ) {
+                        echo '<span class="displaying-num">' . sprintf( _n( '%s item', '%s items', $total ), number_format_i18n( $total ) ) . '</span>';
+                        echo $page_links;
+                    }
+                ?>
+            </div>
+        </div>
+        <input type="hidden" name="shipment_nonce" value="<?php echo wp_create_nonce( 'shipment_list_nonce' ); ?>">
+
+        <?php $dimensions = array('weight', 'height', 'length', 'width'); ?>
+        <?php $localized_dimensions = array(__('weight', 'chronopost'), __('height', 'chronopost'), __('length', 'chronopost'), __('width', 'chronopost')); ?>
+        <table class="wp-list-table widefat fixed striped posts" cellpadding="0" cellspacing="0">
+            <thead>
+                <td id="cb" class="manage-column column-cb check-column">
+                    <label class="screen-reader-text" for="cb-select-all-1"><?php _e('Select all'); ?></label>
+                    <input id="cb-select-all-1" type="checkbox">
+                </td>
+                <th class="manage-column column-order_status"><?php _e("Status", 'chronopost') ?></th>
+                <th class="manage-colum column-order_date"><?php _e("Order", 'woocommerce') ?></th>
+                <th class="manage-colum column-shipping_address"><?php _e("Shipped to", 'chronopost') ?></th>
+                <th class="manage-colum column-contract"><?php _e("Use contract", 'chronopost') ?></th>
+                <th class="manage-colum column-parcels"><?php _e("Parcels number", 'chronopost') ?></th>
+                <?php foreach ($dimensions as $dimension) : ?>
+                <th class="manage-colum column-dimensions column-<?php $dimension ?>"><?php _e($dimension, 'chronopost') ?></th>
+                <?php endforeach; ?>
+                <th class="manage-colum column-order_date"><?php _e("Ship On Saturday", 'chronopost') ?></th>
+                <th class="manage-colum column-actions"><?php _e("Tracking", 'chronopost') ?></th>
+                <th class="manage-colum column-actions"><?php _e("Labels", 'chronopost') ?></th>
+                <th class="manage-colum column-actions"><?php _e('Return labels', 'chronopost') ?></th>
+            </thead>
+            <tbody>
+            <?php while( $_orders->have_posts() ) : $_orders->the_post(); ?>
+                <?php
+                    $_order = new WC_Order( get_the_ID() );
+                    $order_shipping_method = $_order->get_shipping_methods();
+                    $shipping_method = reset($order_shipping_method);
+                    $shipping_method_id = $shipping_method->get_method_id();
+                    $shipment_datas = chrono_get_shipment_datas($_order->get_id());
+                    $parcels_number = chrono_get_parcels_number($_order->get_id());
+                ?>
+                <tr id="order-<?php echo $_order->get_id(); ?>">
+                    <th scope="row" class="check-column">
+                        <label class="screen-reader-text" for="cb-select-1"><?php printf(__('Select order #%s', 'chronopost'), $_order->get_id()); ?></label>
+                        <input id="cb-select-1" type="checkbox" name="order[]" value="<?php echo $_order->get_id(); ?>">
+                    </th>
+                    <td class="order_status column-order_status"><mark class="<?php echo str_replace('wc-', 'status-', get_post_status()) ?> order-status"><span><?php echo wc_get_order_status_name(get_post_status()) ?></span></mark></td>
+                    <td>
+                        <?php
+                        if ( $_order->get_customer_id() ) {
+                            $user     = get_user_by( 'id', $_order->get_customer_id() );
+                            $username = '<a href="user-edit.php?user_id=' . absint( $_order->get_customer_id() ) . '">';
+                            $username .= esc_html( ucwords( $user->display_name ) );
+                            $username .= '</a>';
+                        } elseif ( $_order->get_billing_first_name() || $_order->get_billing_last_name() ) {
+                            /* translators: 1: first name 2: last name */
+                            $username = trim( sprintf( _x( '%1$s %2$s', 'full name', 'woocommerce' ), $_order->get_billing_first_name(), $_order->get_billing_last_name() ) );
+                        } elseif ( $_order->get_billing_company() ) {
+                            $username = trim( $_order->get_billing_company() );
+                        } else {
+                            $username = __( 'Guest', 'woocommerce' );
+                        }
+
+                        printf(
+                            __( '%1$s by %2$s', 'woocommerce' ),
+                            '<a href="' . admin_url( 'post.php?post=' . absint( $_order->get_id() ) . '&action=edit' ) . '" class="row-title"><strong>#' . esc_attr( $_order->get_order_number() ) . '</strong></a>',
+                            $username
+                        );
+
+                        if ( $_order->get_billing_email() ) {
+                            echo '<small class="meta email"><a href="' . esc_url( 'mailto:' . $_order->get_billing_email() ) . '">' . esc_html( $_order->get_billing_email() ) . '</a></small>';
+                        }
+                        ?>
+                    </td>
+                    <td>
+                        <?php
+                            $address = $_order->get_shipping_address_1() . ' ' . $_order->get_shipping_address_2() . ' ' . $_order->get_shipping_postcode() . ' ' .$_order->get_shipping_city();
+                            $address_link = 'https://maps.google.com/maps?&q=' . urlencode( $address ) . '&z=16';
+                            echo "<a href=\"$address_link\">". get_post_meta( $_order->get_id(), '_shipping_address_index', true) . "</a>";
+                            echo "<small class=\"meta\">{$shipping_method->get_name()}</small>";
+                        ?>
+                    </td>
+                    <td class="column-contract">
+                        <?php
+                        $shipping_method_contract = '';
+                        $shipping_method_instance = chrono_get_shipping_method_by_id($shipping_method_id);
+                        if (isset($shipping_method_instance->settings['contract'])) {
+                            $shipping_method_contract = $shipping_method_instance->settings['contract'];
+                        }
+                        $contracts = chrono_get_all_contracts();
+                        // Pourrait être surchargé par l'utilisateur
+                        $order_contract = get_post_meta( $_order->get_id(), '_use_contract', true);
+                        if ($order_contract) {
+                               $shipping_method_contract = $order_contract;
+                        }
+                        ?>
+                        <select name="use-contract" data-order-id="<?php echo $_order->get_id(); ?>" <?php echo $shipment_datas ? 'disabled="disabled"' : '' ?>>
+                            <?php foreach ($contracts as $contract): ?>
+                            <option value="<?php echo $contract['number'] ?>"
+                                <?php echo ($shipping_method_contract == $contract['number']) ? 'selected="selected"' : ''?>>
+                                <?php echo $contract['label'] ?>
+                            </option>
+                            <?php endforeach; ?>
+                        </select>
+                    </td>
+                    <td class="column-parcels">
+                        <?php
+                        $max_weight = $shipping_method->get_method_id() == 'chronorelais' || $shipping_method->get_method_id() == 'chronorelaiseurope' ? 20 : 30;
+                        ?>
+                        <input name="parcels" type="number" value="<?php echo $parcels_number ?>"
+                               data-action="update_parcels" min="1"
+                               data-order-id="<?php echo $_order->get_id(); ?>" />
+                    </td>
+                    <?php
+                    $defaultWeight = min( $max_weight, Chronopost_Package::getTotalWeight($_order->get_items(), false) );
+                    foreach ($dimensions as $dimension) : ?>
+                    <td class="column-dimension-<?php echo $dimension ?> column-dimensions">
+                        <input name="parcels_dimensions[1][<?php echo $dimension ?>]" type="number" class="default"
+                               value="<?php echo $dimension === 'weight' ? $defaultWeight : '1' ?>"
+                               data-action="update_parcels_<?php echo $dimension ?>" min="1"
+                                <?php echo $dimension == 'weight' ? 'max="' . $max_weight . '"' : ''; ?>
+                               data-order-id="<?php echo $_order->get_id(); ?>" />
+                    </td>
+                    <?php endforeach; ?>
+                <td class="ship-on-saturday">
+                    <?php
+                        $saturday_active = chrono_get_method_settings($shipping_method_id, 'deliver_on_saturday') == 'yes' ? true : false;
+                        $ship_saturday = get_post_meta( $_order->get_id(), '_ship_on_saturday', true);
+                        if ($ship_saturday == '') {
+                                $ship_saturday = chrono_is_sending_day() ? 'yes' : 'no';
+                        }
+                    ?>
+                    <?php if ($saturday_active && !chrono_is_shipping_methods_without_saturday($shipping_method_id)): ?>
+                    <select name="ship-saturday" data-order-id="<?php echo $_order->get_id(); ?>">
+                        <option value="no"<?php echo $ship_saturday == 'no' ? ' selected="selected"' : ''; ?>><?php _e('No', 'chronopost'); ?></option>
+                        <option value="yes"<?php echo $ship_saturday == 'yes' ? ' selected="selected"' : ''; ?>><?php _e('Yes', 'chronopost'); ?></option>
+                    </select>
+                    <?php else: ?>
+                        <?php _e('Not active', 'chronopost'); ?>
+                    <?php endif; ?>
+                </td>
+                <td class="tracking-link">
+                    <?php if ($shipment_datas): ?>
+                        <?php foreach($shipment_datas as $shipment): ?>
+                            <?php foreach($shipment['_parcels'] as $parcel): ?>
+                            <div><a target="_blank" href="<?php echo chrono_get_tracking_url($parcel['_skybill_number'], $shipping_method_id); ?>"><?php echo $parcel['_skybill_number']; ?></a></div>
+                            <?php endforeach; ?>
+                        <?php endforeach; ?>
+                    <?php endif; ?>
+                    <span class="spinner"></span>
+                </td>
+                <td class="label-printing">
+                    <?php if ($shipment_datas): ?>
+                        <a class="button button-small chrono-print" target="_blank" href="<?php echo admin_url('admin.php?page=chronopost-shipping&chronoaction=view-label&order='.$_order->get_id().'&shipment_nonce='.wp_create_nonce( 'shipment_list_nonce' )); ?>"><?php echo _n( 'Download label', 'Download labels', count($shipment_datas), 'chronopost' ); ?></a>
+                        <a class="button button-small button-primary chrono-generate-label" data-order-id="<?php echo $_order->get_id(); ?>" href="<?php echo admin_url('admin.php?page=chronopost-shipping&chronoaction=print-label&order='.$_order->get_id().'&shipment_nonce='.wp_create_nonce( 'shipment_list_nonce' )); ?>"><?php echo __('Generate label', 'chronopost'); ?></a>
+                    <?php else: ?>
+                        <a class="button button-small button-primary chrono-generate-label" data-order-id="<?php echo $_order->get_id(); ?>" href="<?php echo admin_url('admin.php?page=chronopost-shipping&chronoaction=print-label&order='.$_order->get_id().'&shipment_nonce='.wp_create_nonce( 'shipment_list_nonce' )); ?>"><?php echo __('Generate label', 'chronopost'); ?></a>
+                    <?php endif; ?>
+                </td>
+                <td class="return-printing">
+                    <?php if ($shipment_datas): ?>
+                        <?php foreach($shipment_datas as $shipment): ?>
+                               <?php foreach($shipment['_parcels'] as $parcel): ?>
+                            <?php
+                            $pdf_path = chrono_get_media_path().'chronopost-etiquette-retour-' . $parcel['_skybill_number'] . '.pdf';
+                            ?>
+                            <?php if (file_exists($pdf_path)): ?>
+                                <a class="button button-small" target="_blank" href="<?php echo str_replace(chrono_get_media_path(), chrono_get_media_url(), $pdf_path); ?>"><?php _e('Return label', 'chronopost'); ?> <?php echo $parcel['_skybill_number']; ?></a>
+                            <?php else: ?>
+                                <a class="button button-small button-primary" href="<?php echo admin_url('admin.php?page=chronopost-shipping&chronoaction=return-label&order='.$_order->get_id().'&skybill_id=' . $parcel['_skybill_number'] . '&shipment_nonce='.wp_create_nonce( 'shipment_list_nonce' ).'&pagenum='.$pagenum); ?>"><?php _e('Generate return label', 'chronopost'); ?> <?php echo $parcel['_skybill_number']; ?></a>
+                            <?php endif; ?>
+                            <?php endforeach; ?>
+                        <?php endforeach; ?>
+                    <?php endif; ?>
+                </td>
+            </tr>
+            <?php endwhile; ?>
+            </tbody>
+        </table>
+    </form>
+    <div class="tablenav bottom">
+        <div class="tablenav-pages">
+            <?php 
+                $page_links = paginate_links( array(
+                    'base' => add_query_arg( 'pagenum', '%#%' ),
+                    'format' => '',
+                    'prev_text'          => '<span aria-label="' . esc_attr__( 'Previous page' ) . '">' . __( '&laquo;' ) . '</span>',
+                    'next_text'          => '<span aria-label="' . esc_attr__( 'Next page' ) . '">' . __( '&raquo;' ) . '</span>',
+                    'before_page_number' => '<span class="screen-reader-text">' . __( 'Page' ) . '</span> ',
+                    'total'   => $num_of_pages,
+                    'current' => $pagenum
+                ));
+
+                if ( $page_links ) {
+                    echo '<span class="displaying-num">' . sprintf( _n( '%s item', '%s items', $total ), number_format_i18n( $total ) ) . '</span>';
+                    echo $page_links;
+                }
+            ?>
+        </div>
+        <br class="clear">
+    </div>
+</div>
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/.gitignore b/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/.gitignore
new file mode 100755 (executable)
index 0000000..4a42dee
--- /dev/null
@@ -0,0 +1,11 @@
+.sass-cache
+*.html
+jquery-1.11.3.min.js
+.idea
+sass
+jasmine
+spec
+node_modules
+node_module/*
+gulpfile.js
+package.json
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/LICENSE.md b/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/LICENSE.md
new file mode 100755 (executable)
index 0000000..fc1cc60
--- /dev/null
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2015-2016 Eric Gagnon http://ericjgagnon.github.io/wickedpicker/
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/README.md b/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/README.md
new file mode 100755 (executable)
index 0000000..8c84570
--- /dev/null
@@ -0,0 +1,79 @@
+# Wickedpicker
+
+## wickedpicker.js - A simple jQuery timepicker
+
+## Requirements
+
+* [jQuery](http://jquery.com/download/) (>= 1.9)
+
+## Installation
+```shell
+    $ bower install wickedpicker
+```
+
+## Usage
+
+#### In your HTML
+ ```html
+ <body>
+ ....
+ <input type="text" name="timepicker" class="timepicker"/>
+ ....
+ <script type="text/javascript" src="jquery-1.11.3.min.js"></script>
+  <script type="text/javascript" src="wickedpicker.js"></script>
+ </body>
+ ```
+
+#### In your JavaScript file
+ ```javascript
+     $('.timepicker').wickedpicker();
+ ```
+
+#### Options
+```javascript
+    var options = {
+        now: "12:35", //hh:mm 24 hour format only, defaults to current time
+        twentyFour: false,  //Display 24 hour format, defaults to false
+        upArrow: 'wickedpicker__controls__control-up',  //The up arrow class selector to use, for custom CSS
+        downArrow: 'wickedpicker__controls__control-down', //The down arrow class selector to use, for custom CSS
+        close: 'wickedpicker__close', //The close class selector to use, for custom CSS
+        hoverState: 'hover-state', //The hover state class to use, for custom CSS
+        title: 'Timepicker', //The Wickedpicker's title,
+        showSeconds: false, //Whether or not to show seconds,
+        timeSeparator: ' : ', // The string to put in between hours and minutes (and seconds)
+        secondsInterval: 1, //Change interval for seconds, defaults to 1,
+        minutesInterval: 1, //Change interval for minutes, defaults to 1
+        beforeShow: null, //A function to be called before the Wickedpicker is shown
+        afterShow: null, //A function to be called after the Wickedpicker is closed/hidden
+        show: null, //A function to be called when the Wickedpicker is shown
+        clearable: false, //Make the picker's input clearable (has clickable "x")
+    };
+    $('.timepicker').wickedpicker(options);
+```
+
+#### Methods
+
+'time' get the current time inside of the input element that has a wickedpicker attached to it.
+```javascript
+    $('.timepicker').wickedpicker('time');
+```
+
+  If multiple input fields have the same class and instantiate a wickedpicker then pass the index of the timepicker
+  you'd like to select
+ ```javascript
+    $('.timepicker').wickedpicker('time', 0);
+ ```
+
+#### Functionality
+    The Wickedpicker opens when the bound input is clicked, or focused on (try tabbing), and it can be closed by either
+    clicking the X, by clicking outside of it, or by pressing esc. The arrows icons increase or decrease their
+    associated time values or toggle the meridiem.  The values can also be changed using the up and down keys when
+    focused on. To move to the next value just press the left or right arrow key.
+
+For more checkout
+[Wickedpicker gh-pages](http://ericjgagnon.github.io/wickedpicker/)
+
+## License
+
+ Copyright (c) 2015-2016 Eric Gagnon Licensed under the MIT license.
+
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/bower.json b/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/bower.json
new file mode 100755 (executable)
index 0000000..2f29eee
--- /dev/null
@@ -0,0 +1,29 @@
+{
+  "name": "wickedpicker",
+  "version": "0.0.4",
+  "description": "A simple jQuery timepicker plugin.",
+  "main": [
+    "./dist/wickedpicker.min.js",
+    "./dist/wickedpicker.min.css"
+  ],
+  "authors": [
+    "Eric Gagnon",
+    "Ruben Seyferth"
+  ],
+  "moduleType": "globals",
+  "license": "MIT",
+  "keywords": [
+    "jQuery",
+    "timepicker",
+    "wickedpicker"
+  ],
+  "homepage": "http://ericjgagnon.github.io/wickedpicker/",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/ericjgagnon/wickedpicker.git"
+  },
+  "dependencies": {
+    "jquery": ">= 1.9.0"
+  },
+  "private": false
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/dist/wickedpicker.min.css b/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/dist/wickedpicker.min.css
new file mode 100755 (executable)
index 0000000..6048cb7
--- /dev/null
@@ -0,0 +1 @@
+.wickedpicker{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;box-shadow:0 0 0 1px rgba(14,41,57,.12),0 2px 5px rgba(14,41,57,.44),inset 0 -1px 2px rgba(14,41,57,.15);background:#fefefe;margin:0 auto;border-radius:.1px;width:270px;height:130px;font-size:14px;display:none}.wickedpicker__title{background-image:-webkit-linear-gradient(top,#fff 0,#f2f2f2 100%);position:relative;background:#f2f2f2;margin:0 auto;border-bottom:1px solid #e5e5e5;padding:12px 11px 10px 15px;color:#4C4C4C;font-size:inherit}.wickedpicker__close{-webkit-transform:translateY(-25%);-moz-transform:translateY(-25%);-ms-transform:translateY(-25%);-o-transform:translateY(-25%);transform:translateY(-25%);position:absolute;top:25%;right:10px;color:#34495e;cursor:pointer}.wickedpicker__close:before{content:'\00d7'}.wickedpicker__controls{padding:10px 0;line-height:normal;margin:0}.wickedpicker__controls__control,.wickedpicker__controls__control--separator{vertical-align:middle;display:inline-block;font-size:inherit;margin:0 auto;width:35px;letter-spacing:1.3px}.wickedpicker__controls__control-down,.wickedpicker__controls__control-up{color:#34495e;position:relative;display:block;margin:3px auto;font-size:18px;cursor:pointer}.wickedpicker__controls__control-up:before{content:'\e800'}.wickedpicker__controls__control-down:after{content:'\e801'}.wickedpicker__controls__control--separator{width:5px}.text-center,.wickedpicker__controls,.wickedpicker__controls__control,.wickedpicker__controls__control--separator,.wickedpicker__controls__control-down,.wickedpicker__controls__control-up,.wickedpicker__title{text-align:center}.hover-state{color:#3498db}@font-face{font-family:fontello;src:url(../fonts/fontello.eot?52602240);src:url(../fonts/fontello.eot?52602240#iefix) format("embedded-opentype"),url(../fonts/fontello.woff?52602240) format("woff"),url(../fonts/fontello.ttf?52602240) format("truetype"),url(../fonts/fontello.svg?52602240#fontello) format("svg");font-weight:400;font-style:normal}.fontello-after:after,.fontello:before,.wickedpicker__controls__control-down:after,.wickedpicker__controls__control-up:before{font-family:fontello;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/dist/wickedpicker.min.js b/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/dist/wickedpicker.min.js
new file mode 100755 (executable)
index 0000000..f6bda3a
--- /dev/null
@@ -0,0 +1 @@
+!function($,window,document){"use strict";function Wickedpicker(e,t){this.element=$(e),this.options=$.extend({},defaults,t),this.element.addClass("hasWickedpicker"),this.element.attr("onkeypress","return false;"),this.element.attr("aria-showingpicker","false"),this.createPicker(),this.timepicker=$(".wickedpicker"),this.up=$("."+this.options.upArrow.split(/\s+/).join(".")),this.down=$("."+this.options.downArrow.split(/\s+/).join(".")),this.separator=$(".wickedpicker__controls__control--separator"),this.hoursElem=$(".wickedpicker__controls__control--hours"),this.minutesElem=$(".wickedpicker__controls__control--minutes"),this.secondsElem=$(".wickedpicker__controls__control--seconds"),this.meridiemElem=$(".wickedpicker__controls__control--meridiem"),this.close=$("."+this.options.close.split(/\s+/).join("."));var i=this.timeArrayFromString(this.options.now);this.options.now=new Date(today.getFullYear(),today.getMonth(),today.getDate(),i[0],i[1],i[2]),this.selectedHour=this.parseHours(this.options.now.getHours()),this.selectedMin=this.parseSecMin(this.options.now.getMinutes()),this.selectedSec=this.parseSecMin(this.options.now.getSeconds()),this.selectedMeridiem=this.parseMeridiem(this.options.now.getHours()),this.setHoverState(),this.attach(e),this.setText(e)}"function"!=typeof String.prototype.endsWith&&(String.prototype.endsWith=function(e){return e.length>0&&this.substring(this.length-e.length,this.length)===e});var isMobile=function(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)},today=new Date,pluginName="wickedpicker",defaults={now:today.getHours()+":"+today.getMinutes(),twentyFour:!1,upArrow:"wickedpicker__controls__control-up",downArrow:"wickedpicker__controls__control-down",close:"wickedpicker__close",hoverState:"hover-state",title:"Timepicker",showSeconds:!1,timeSeparator:" : ",secondsInterval:1,minutesInterval:1,beforeShow:null,afterShow:null,show:null,clearable:!1};$.extend(Wickedpicker.prototype,{showPicker:function(e){"function"==typeof this.options.beforeShow&&this.options.beforeShow(e,this.timepicker);var t=$(e).offset();if($(e).attr({"aria-showingpicker":"true",tabindex:-1}),this.setText(e),this.showHideMeridiemControl(),this.getText(e)!==this.getTime()){var i=this.getText(e),s=/\s\w\w$/.test(i)?i.substr(-2,2):null,o=i.replace(/\s\w\w$/,"").split(this.options.timeSeparator),n={};n.hours=o[0],n.minutes=o[1],this.options.showSeconds?(n.seconds=o[2],n.meridiem=s):n.meridiem=s,this.setTime(n)}this.timepicker.css({"z-index":this.element.css("z-index")+1,position:"absolute",left:t.left,top:t.top+$(e)[0].offsetHeight}).show(),"function"==typeof this.options.show&&this.options.show(e,this.timepicker),this.handleTimeAdjustments(e)},hideTimepicker:function(e){function t(e){setTimeout(function(){$('[aria-showingpicker="false"]').attr("tabindex",e)},400)}this.timepicker.hide(),"function"==typeof this.options.afterShow&&this.options.afterShow(e,this.timepicker);var i={start:function(){var e=$.Deferred();return $('[aria-showingpicker="true"]').attr("aria-showingpicker","false"),e.promise()}};i.start().then(t(0))},createPicker:function(){if(0===$(".wickedpicker").length){var e='<div class="wickedpicker"><p class="wickedpicker__title">'+this.options.title+'<span class="wickedpicker__close"></span></p><ul class="wickedpicker__controls"><li class="wickedpicker__controls__control"><span class="'+this.options.upArrow+'"></span><span class="wickedpicker__controls__control--hours" tabindex="-1">00</span><span class="'+this.options.downArrow+'"></span></li><li class="wickedpicker__controls__control--separator"><span class="wickedpicker__controls__control--separator-inner">:</span></li><li class="wickedpicker__controls__control"><span class="'+this.options.upArrow+'"></span><span class="wickedpicker__controls__control--minutes" tabindex="-1">00</span><span class="'+this.options.downArrow+'"></span></li>';this.options.showSeconds&&(e+='<li class="wickedpicker__controls__control--separator"><span class="wickedpicker__controls__control--separator-inner">:</span></li><li class="wickedpicker__controls__control"><span class="'+this.options.upArrow+'"></span><span class="wickedpicker__controls__control--seconds" tabindex="-1">00</span><span class="'+this.options.downArrow+'"></span> </li>'),e+='<li class="wickedpicker__controls__control"><span class="'+this.options.upArrow+'"></span><span class="wickedpicker__controls__control--meridiem" tabindex="-1">AM</span><span class="'+this.options.downArrow+'"></span></li></ul></div>',$("body").append(e),this.attachKeyboardEvents()}},showHideMeridiemControl:function(){this.options.twentyFour===!1?$(this.meridiemElem).parent().show():$(this.meridiemElem).parent().hide()},showHideSecondsControl:function(){this.options.showSeconds?$(this.secondsElem).parent().show():$(this.secondsElem).parent().hide()},attach:function(e){var t=this;this.options.clearable&&t.makePickerInputClearable(e),$(e).attr("tabindex",0),$(e).on("click focus",function(e){$(t.timepicker).is(":hidden")&&(t.showPicker($(this)),$(t.hoursElem).focus())});var i=function(i){$(t.timepicker).is(":visible")&&($(i.target).is(t.close)?t.hideTimepicker(e):$(i.target).closest(t.timepicker).length||$(i.target).closest($(".hasWickedpicker")).length?i.stopPropagation():t.hideTimepicker(e))};$(document).off("click",i).on("click",i)},attachKeyboardEvents:function(){$(document).on("keydown",$.proxy(function(e){switch(e.keyCode){case 9:"hasWickedpicker"!==e.target.className&&$(this.close).trigger("click");break;case 27:$(this.close).trigger("click");break;case 37:e.target.className!==this.hoursElem[0].className?$(e.target).parent().prevAll("li").not(this.separator.selector).first().children()[1].focus():$(e.target).parent().siblings(":last").children()[1].focus();break;case 39:e.target.className!==this.meridiemElem[0].className?$(e.target).parent().nextAll("li").not(this.separator.selector).first().children()[1].focus():$(e.target).parent().siblings(":first").children()[1].focus();break;case 38:$(":focus").prev().trigger("click");break;case 40:$(":focus").next().trigger("click")}},this))},setTime:function(e){this.setHours(e.hours),this.setMinutes(e.minutes),this.setMeridiem(e.meridiem),this.options.showSeconds&&this.setSeconds(e.seconds)},getTime:function(){return[this.formatTime(this.getHours(),this.getMinutes(),this.getMeridiem(),this.getSeconds())]},setHours:function(e){var t=new Date;t.setHours(e);var i=this.parseHours(t.getHours());this.hoursElem.text(i),this.selectedHour=i},getHours:function(){var e=new Date;return e.setHours(this.hoursElem.text()),e.getHours()},parseHours:function(e){return this.options.twentyFour===!1?(e+11)%12+1:e<10?"0"+e:e},setMinutes:function(e){var t=new Date;t.setMinutes(e);var i=t.getMinutes(),s=this.parseSecMin(i);this.minutesElem.text(s),this.selectedMin=s},getMinutes:function(){var e=new Date;return e.setMinutes(this.minutesElem.text()),e.getMinutes()},parseSecMin:function(e){return(e<10?"0":"")+e},setMeridiem:function(e){var t="";if(void 0===e){var i=this.getMeridiem();t="PM"===i?"AM":"PM"}else t=e;this.meridiemElem.text(t),this.selectedMeridiem=t},getMeridiem:function(){return this.meridiemElem.text()},setSeconds:function(e){var t=new Date;t.setSeconds(e);var i=t.getSeconds(),s=this.parseSecMin(i);this.secondsElem.text(s),this.selectedSec=s},getSeconds:function(){var e=new Date;return e.setSeconds(this.secondsElem.text()),e.getSeconds()},parseMeridiem:function(e){return e>11?"PM":"AM"},handleTimeAdjustments:function(e){var t=0;$(this.up).add(this.down).off("mousedown click touchstart").on("mousedown click",{Wickedpicker:this,input:e},function(e){if(1!=e.which)return!1;var i=this.className.indexOf("up")>-1?"+":"-",s=e.data;"mousedown"==e.type?t=setInterval($.proxy(function(e){e.Wickedpicker.changeValue(i,e.input,this)},this,{Wickedpicker:s.Wickedpicker,input:s.input}),200):s.Wickedpicker.changeValue(i,s.input,this)}).bind("mouseup touchend",function(){clearInterval(t)})},changeValue:function(operator,input,clicked){var target="+"===operator?clicked.nextSibling:clicked.previousSibling,targetClass=$(target).attr("class");targetClass.endsWith("hours")?this.setHours(eval(this.getHours()+operator+1)):targetClass.endsWith("minutes")?this.setMinutes(eval(this.getMinutes()+operator+this.options.minutesInterval)):targetClass.endsWith("seconds")?this.setSeconds(eval(this.getSeconds()+operator+this.options.secondsInterval)):this.setMeridiem(),this.setText(input)},setText:function(e){$(e).val(this.formatTime(this.selectedHour,this.selectedMin,this.selectedMeridiem,this.selectedSec)).change()},getText:function(e){return $(e).val()},formatTime:function(e,t,i,s){var o=e+this.options.timeSeparator+t;return this.options.twentyFour&&(o=e+this.options.timeSeparator+t),this.options.showSeconds&&(o+=this.options.timeSeparator+s),this.options.twentyFour===!1&&(o+=" "+i),o},setHoverState:function(){var e=this;isMobile()||$(this.up).add(this.down).add(this.close).hover(function(){$(this).toggleClass(e.options.hoverState)})},makePickerInputClearable:function(e){$(e).wrap('<div class="clearable-picker"></div>').after("<span data-clear-picker>&times;</span>"),$("[data-clear-picker]").on("click",function(e){$(this).siblings(".hasWickedpicker").val("")})},timeArrayFromString:function(e){if(e.length){var t=e.split(":");return t[2]=t.length<3?"00":t[2],t}return!1},_time:function(){var e=$(this.element).val();return""===e?this.formatTime(this.selectedHour,this.selectedMin,this.selectedMeridiem,this.selectedSec):e},_hide:function(){this.hideTimepicker(this.element)}}),$.fn[pluginName]=function(e,t){return $.isFunction(Wickedpicker.prototype["_"+e])?$(this).hasClass("hasWickedpicker")?void 0!==t?$.data($(this)[t],"plugin_"+pluginName)["_"+e]():$.data($(this)[0],"plugin_"+pluginName)["_"+e]():void 0:this.each(function(){$.data(this,"plugin_"+pluginName)||$.data(this,"plugin_"+pluginName,new Wickedpicker(this,e))})}}(jQuery,window,document);
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/fonts/fontello.eot b/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/fonts/fontello.eot
new file mode 100755 (executable)
index 0000000..f9d3a8a
Binary files /dev/null and b/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/fonts/fontello.eot differ
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/fonts/fontello.svg b/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/fonts/fontello.svg
new file mode 100755 (executable)
index 0000000..930a6cc
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>Copyright (C) 2015 by original authors @ fontello.com</metadata>
+<defs>
+<font id="fontello" horiz-adv-x="1000" >
+<font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
+<missing-glyph horiz-adv-x="1000" />
+<glyph glyph-name="up-open" unicode="&#xe800;" d="m939 107l-92-92q-11-10-26-10t-25 10l-296 297-296-297q-11-10-25-10t-26 10l-92 92q-11 11-11 26t11 25l414 414q11 10 25 10t25-10l414-414q11-11 11-25t-11-26z" horiz-adv-x="1000" />
+<glyph glyph-name="down-open" unicode="&#xe801;" d="m939 399l-414-413q-10-11-25-11t-25 11l-414 413q-11 11-11 26t11 25l92 92q11 11 26 11t25-11l296-296 296 296q11 11 25 11t26-11l92-92q11-11 11-25t-11-26z" horiz-adv-x="1000" />
+<glyph glyph-name="cancel" unicode="&#xe802;" d="m724 112q0-22-15-38l-76-76q-16-15-38-15t-38 15l-164 165-164-165q-16-15-38-15t-38 15l-76 76q-16 16-16 38t16 38l164 164-164 164q-16 16-16 38t16 38l76 76q16 16 38 16t38-16l164-164 164 164q16 16 38 16t38-16l76-76q15-15 15-38t-15-38l-164-164 164-164q15-15 15-38z" horiz-adv-x="785.7" />
+</font>
+</defs>
+</svg>
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/fonts/fontello.ttf b/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/fonts/fontello.ttf
new file mode 100755 (executable)
index 0000000..2877820
Binary files /dev/null and b/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/fonts/fontello.ttf differ
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/fonts/fontello.woff b/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/fonts/fontello.woff
new file mode 100755 (executable)
index 0000000..35636f7
Binary files /dev/null and b/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/fonts/fontello.woff differ
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/src/wickedpicker.js b/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/src/wickedpicker.js
new file mode 100755 (executable)
index 0000000..d6020fe
--- /dev/null
@@ -0,0 +1,628 @@
+/**
+ * wickedpicker v0.4.1 - A simple jQuery timepicker.
+ * Copyright (c) 2015-2016 Eric Gagnon - http://github.com/wickedRidge/wickedpicker
+ * License: MIT
+ */
+
+(function ($, window, document) {
+
+    "use strict";
+
+    if (typeof String.prototype.endsWith != 'function') {
+        /*
+         * Checks if this string end ends with another string
+         *
+         * @param {string} the string to be checked
+         *
+         * @return {bool}
+         */
+        String.prototype.endsWith = function (string) {
+            return string.length > 0 && this.substring(this.length - string.length, this.length) === string;
+        }
+    }
+
+    /*
+     * Returns if the user agent is mobile
+     *
+     * @return {bool}
+     */
+    var isMobile = function () {
+        return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
+    };
+
+    var today = new Date();
+
+    var pluginName = "wickedpicker",
+        defaults = {
+            now: today.getHours() + ':' + today.getMinutes(),
+            twentyFour: false,
+            upArrow: 'wickedpicker__controls__control-up',
+            downArrow: 'wickedpicker__controls__control-down',
+            close: 'wickedpicker__close',
+            hoverState: 'hover-state',
+            title: 'Timepicker',
+            showSeconds: false,
+            timeSeparator: ' : ',
+            secondsInterval: 1,
+            minutesInterval: 1,
+            beforeShow: null,
+            afterShow: null,
+            show: null,
+            clearable: false,
+            closeOnClickOutside: true,
+            onClickOutside: function() {},
+        };
+
+    /*
+     * @param {object} The input object the timepicker is attached to.
+     * @param {object} The object containing options
+     */
+    function Wickedpicker(element, options) {
+        this.element = $(element);
+        this.options = $.extend({}, defaults, options);
+
+        this.element.addClass('hasWickedpicker');
+        this.element.attr('onkeypress', 'return false;');
+        this.element.attr('aria-showingpicker', 'false');
+        this.createPicker();
+        this.timepicker = $('.wickedpicker');
+        this.up = $('.' + this.options.upArrow.split(/\s+/).join('.'));
+        this.down = $('.' + this.options.downArrow.split(/\s+/).join('.'));
+        this.separator = $('.wickedpicker__controls__control--separator');
+        this.hoursElem = $('.wickedpicker__controls__control--hours');
+        this.minutesElem = $('.wickedpicker__controls__control--minutes');
+        this.secondsElem = $('.wickedpicker__controls__control--seconds');
+        this.meridiemElem = $('.wickedpicker__controls__control--meridiem');
+        this.close = $('.' + this.options.close.split(/\s+/).join('.'));
+
+        //Create a new Date object based on the default or passing in now value
+        var time = this.timeArrayFromString(this.options.now);
+        this.options.now = new Date(today.getFullYear(), today.getMonth(), today.getDate(), time[0], time[1], time[2]);
+        this.selectedHour = this.parseHours(this.options.now.getHours());
+        this.selectedMin = this.parseSecMin(this.options.now.getMinutes());
+        this.selectedSec = this.parseSecMin(this.options.now.getSeconds());
+        this.selectedMeridiem = this.parseMeridiem(this.options.now.getHours());
+        this.setHoverState();
+        this.attach(element);
+        this.setText(element);
+    }
+
+    $.extend(Wickedpicker.prototype, {
+
+        /*
+         * Show given input's timepicker
+         *
+         * @param {object} The input being clicked
+         */
+        showPicker: function (element) {
+            //If there is a beforeShow function, then call it with the input calling the timepicker and the
+            // timepicker itself
+            if (typeof this.options.beforeShow === 'function') {
+                this.options.beforeShow(element, this.timepicker);
+            }
+            var timepickerPos = $(element).offset();
+
+            $(element).attr({'aria-showingpicker': 'true', 'tabindex': -1});
+            this.setText(element);
+            this.showHideMeridiemControl();
+            if (this.getText(element) !== this.getTime()) {
+
+                // Check meridiem 
+                var text = this.getText(element);
+                var meridiem = /\s\w\w$/.test(text) ? text.substr(-2, 2) : null;
+                var inputTime = text.replace(/\s\w\w$/, '').split(this.options.timeSeparator);
+                var newTime = {};
+                newTime.hours = inputTime[0];
+                newTime.minutes = inputTime[1];
+                if (this.options.showSeconds) {
+                    newTime.seconds = inputTime[2];
+                    newTime.meridiem = meridiem;
+                } else {
+                    newTime.meridiem = meridiem;
+                }
+                this.setTime(newTime);
+            }
+            this.timepicker.css({
+                'z-index': this.element.css('z-index') + 1,
+                position: 'absolute',
+                left: timepickerPos.left,
+                top: timepickerPos.top + $(element)[0].offsetHeight
+            }).show();
+            //If there is a show function, then call it with the input calling the timepicker and the
+            // timepicker itself
+            if (typeof this.options.show === 'function') {
+                this.options.show(element, this.timepicker);
+            }
+
+            this.handleTimeAdjustments(element);
+        },
+
+        /*
+         * Hides the timepicker that is currently shown if it is not part of the timepicker
+         *
+         * @param {Object} The DOM object being clicked on the page
+         * 
+         * BeinnLora: added trigger function to call on closing/hiding timepicker. 
+         */
+        hideTimepicker: function (element) {
+            this.timepicker.hide();
+            if (typeof this.options.afterShow === 'function') {
+                this.options.afterShow(element, this.timepicker);
+            }
+            var pickerHidden = {
+                start: function () {
+                    var setShowPickerFalse = $.Deferred();
+                    $('[aria-showingpicker="true"]').attr('aria-showingpicker', 'false');
+                    return setShowPickerFalse.promise();
+                }
+            };
+
+            function setTabIndex(index) {
+                setTimeout(function () {
+                    $('[aria-showingpicker="false"]').attr('tabindex', index);
+                }, 400);
+            }
+
+            pickerHidden.start().then(setTabIndex(0));
+        },
+
+        /*
+         * Create a new timepicker. A single timepicker per page
+         */
+        createPicker: function () {
+            if ($('.wickedpicker').length === 0) {
+                var picker = '<div class="wickedpicker"><p class="wickedpicker__title">' + this.options.title + '<span class="wickedpicker__close"></span></p><ul class="wickedpicker__controls"><li class="wickedpicker__controls__control"><span class="' + this.options.upArrow + '"></span><span class="wickedpicker__controls__control--hours" tabindex="-1">00</span><span class="' + this.options.downArrow + '"></span></li><li class="wickedpicker__controls__control--separator"><span class="wickedpicker__controls__control--separator-inner">:</span></li><li class="wickedpicker__controls__control"><span class="' + this.options.upArrow + '"></span><span class="wickedpicker__controls__control--minutes" tabindex="-1">00</span><span class="' + this.options.downArrow + '"></span></li>';
+                if (this.options.showSeconds) {
+                    picker += '<li class="wickedpicker__controls__control--separator"><span class="wickedpicker__controls__control--separator-inner">:</span></li><li class="wickedpicker__controls__control"><span class="' + this.options.upArrow + '"></span><span class="wickedpicker__controls__control--seconds" tabindex="-1">00</span><span class="' + this.options.downArrow + '"></span> </li>';
+                }
+                picker += '<li class="wickedpicker__controls__control"><span class="' + this.options.upArrow + '"></span><span class="wickedpicker__controls__control--meridiem" tabindex="-1">AM</span><span class="' + this.options.downArrow + '"></span></li></ul></div>';
+                $('body').append(picker);
+                this.attachKeyboardEvents();
+            }
+        },
+
+        /*
+         * Hides the meridiem control if this timepicker is a 24 hour clock
+         */
+        showHideMeridiemControl: function () {
+            if (this.options.twentyFour === false) {
+                $(this.meridiemElem).parent().show();
+            }
+            else {
+                $(this.meridiemElem).parent().hide();
+            }
+        },
+
+        /*
+         * Hides the seconds control if this timepicker has showSeconds set to true
+         */
+        showHideSecondsControl: function () {
+            if (this.options.showSeconds) {
+                $(this.secondsElem).parent().show();
+            }
+            else {
+                $(this.secondsElem).parent().hide();
+            }
+        },
+
+        /*
+         * Bind the click events to the input
+         *
+         * @param {object} The input element
+         */
+        attach: function (element) {
+            var self = this;
+
+            if (this.options.clearable) {
+                self.makePickerInputClearable(element);
+            }
+
+            $(element).attr('tabindex', 0);
+            $(element).on('click focus', function (event) {
+                //Prevent multiple firings
+                if ($(self.timepicker).is(':hidden')) {
+                  self.showPicker($(this));
+                  window.lastTimePickerControl = $(this); //Put the reference on this timepicker into global scope for unsing that in afterShow function
+                  $(self.hoursElem).focus();
+                }
+            });
+
+
+            //Handle click events for closing Wickedpicker
+            var clickHandler = function (event) { //TODO: Fix double firing
+                //Only fire the hide event when you have to
+                if ($(self.timepicker).is(':visible')) {
+                    //Clicking the X
+                    if ($(event.target).is(self.close)) {
+                      self.hideTimepicker(window.lastTimePickerControl);
+                    } else if ($(event.target).closest(self.timepicker).length || $(event.target).closest($('.hasWickedpicker')).length) { //Clicking the Wickedpicker or one of it's inputs
+                      event.stopPropagation();
+                    } else {   //Everything else
+                      if (typeof self.options.onClickOutside === 'function') {
+                        self.options.onClickOutside();
+                      }
+                      else {
+                        console.warn("Type of onClickOutside must be a function");
+                      }
+
+                      if (!self.options.closeOnClickOutside) {
+                        return;
+                      }
+                      self.hideTimepicker(window.lastTimePickerControl);
+                    }
+                    window.lastTimePickerControl = null;
+                }
+            };
+            $(document).off('click', clickHandler).on('click', clickHandler);
+        },
+
+        /**
+         * Added keyboard functionality to improve usabil
+         */
+        attachKeyboardEvents: function () {
+            $(document).on('keydown', $.proxy(function (event) {
+                switch (event.keyCode) {
+                    case 9:
+                        if (event.target.className !== 'hasWickedpicker') {
+                            $(this.close).trigger('click');
+                        }
+                        break;
+                    case 27:
+                        $(this.close).trigger('click');
+                        break;
+                    case 37: //Left arrow
+                        if (event.target.className !== this.hoursElem[0].className) {
+                            $(event.target).parent().prevAll('li').not(this.separator.selector).first().children()[1].focus();
+                        } else {
+                            $(event.target).parent().siblings(':last').children()[1].focus();
+                        }
+                        break;
+                    case 39: //Right arrow
+                        if (event.target.className !== this.meridiemElem[0].className) {
+                            $(event.target).parent().nextAll('li').not(this.separator.selector).first().children()[1].focus();
+                        } else {
+                            $(event.target).parent().siblings(':first').children()[1].focus();
+                        }
+                        break;
+                    case 38: //Up arrow
+                        $(':focus').prev().trigger('click');
+                        break;
+                    case 40: //Down arrow
+                        $(':focus').next().trigger('click');
+                        break;
+                    default:
+                        break;
+                }
+            }, this));
+        },
+
+        /*
+         * Set the time on the timepicker
+         *
+         * @param {object} The date being set
+         */
+        setTime: function (time) {
+            this.setHours(time.hours);
+            this.setMinutes(time.minutes);
+            this.setMeridiem(time.meridiem);
+            if (this.options.showSeconds) {
+                this.setSeconds(time.seconds);
+            }
+        },
+
+        /*
+         * Get the time from the timepicker
+         */
+        getTime: function () {
+            return [this.formatTime(this.getHours(), this.getMinutes(), this.getMeridiem(), this.getSeconds())];
+        },
+
+        /*
+         * Set the timpicker's hour(s) value
+         *
+         * @param {string} hours
+         */
+        setHours: function (hours) {
+            var hour = new Date();
+            hour.setHours(hours);
+            var hoursText = this.parseHours(hour.getHours());
+            this.hoursElem.text(hoursText);
+            this.selectedHour = hoursText;
+        },
+
+        /*
+         * Get the hour(s) value from the timepicker
+         *
+         * @return {integer}
+         */
+        getHours: function () {
+            var hours = new Date();
+            hours.setHours(this.hoursElem.text());
+            return hours.getHours();
+        },
+
+        /*
+         * Returns the correct hour value based on the type of clock, 12 or 24 hour
+         *
+         * @param {integer} The hours value before parsing
+         *
+         * @return {string|integer}
+         */
+        parseHours: function (hours) {
+            return (this.options.twentyFour === false) ? ((hours + 11) % 12) + 1 : (hours < 10) ? '0' + hours : hours;
+        },
+
+        /*
+         * Sets the timpicker's minutes value
+         *
+         * @param {string} minutes
+         */
+        setMinutes: function (minutes) {
+            var minute = new Date();
+            minute.setMinutes(minutes);
+            var minutesText = minute.getMinutes();
+            var min = this.parseSecMin(minutesText);
+            this.minutesElem.text(min);
+            this.selectedMin = min;
+        },
+
+        /*
+         * Get the minutes value from the timepicker
+         *
+         * @return {integer}
+         */
+        getMinutes: function () {
+            var minutes = new Date();
+            minutes.setMinutes(this.minutesElem.text());
+            return minutes.getMinutes();
+        },
+
+
+        /*
+         * Return a human-readable minutes/seconds value
+         *
+         * @param {string} value seconds or minutes
+         *
+         * @return {string|integer}
+         */
+        parseSecMin: function (value) {
+            return ((value < 10) ? '0' : '') + value;
+        },
+
+        /*
+         * Set the timepicker's meridiem value, AM or PM
+         *
+         * @param {string} The new meridiem
+         */
+        setMeridiem: function (inputMeridiem) {
+            var newMeridiem = '';
+            if (inputMeridiem === undefined) {
+                var meridiem = this.getMeridiem();
+                newMeridiem = (meridiem === 'PM') ? 'AM' : 'PM';
+            } else {
+                newMeridiem = inputMeridiem;
+            }
+            this.meridiemElem.text(newMeridiem);
+            this.selectedMeridiem = newMeridiem;
+        },
+
+        /*
+         * Get the timepicker's meridiem value, AM or PM
+         *
+         * @return {string}
+         */
+        getMeridiem: function () {
+            return this.meridiemElem.text();
+        },
+
+        /*
+         * Set the timepicker's seconds value
+         *
+         * @param {string} seconds
+         */
+        setSeconds: function (seconds) {
+            var second = new Date();
+            second.setSeconds(seconds);
+            var secondsText = second.getSeconds();
+            var sec = this.parseSecMin(secondsText);
+            this.secondsElem.text(sec);
+            this.selectedSec = sec;
+        },
+
+        /*
+         * Get the timepicker's seconds value
+         *
+         * return {string}
+         */
+        getSeconds: function () {
+            var seconds = new Date();
+            seconds.setSeconds(this.secondsElem.text());
+            return seconds.getSeconds();
+        },
+
+        /*
+         * Get the correct meridiem based on the hours given
+         *
+         * @param {string|integer} hours
+         *
+         * @return {string}
+         */
+        parseMeridiem: function (hours) {
+            return (hours > 11) ? 'PM' : 'AM';
+        },
+
+        /*
+         * Handles time incrementing and decrementing and passes
+         * the operator, '+' or '-', the input to be set after the change
+         * and the current arrow clicked, to decipher if hours, ninutes, or meridiem.
+         *
+         * @param {object} The input element
+         */
+        handleTimeAdjustments: function (element) {
+            var timeOut = 0;
+            //Click and click and hold timepicker incrementer and decrementer
+            $(this.up).add(this.down).off('mousedown click touchstart').on('mousedown click', {
+                'Wickedpicker': this,
+                'input': element
+            }, function (event) {
+                if(event.which!=1) return false;
+                var operator = (this.className.indexOf('up') > -1) ? '+' : '-';
+                var passedData = event.data;
+                if (event.type == 'mousedown') {
+                    timeOut = setInterval($.proxy(function (args) {
+                        args.Wickedpicker.changeValue(operator, args.input, this);
+                    }, this, {'Wickedpicker': passedData.Wickedpicker, 'input': passedData.input}), 200);
+                } else {
+                    passedData.Wickedpicker.changeValue(operator, passedData.input, this);
+                }
+            }).bind('mouseup touchend', function () {
+                clearInterval(timeOut);
+            });
+        },
+
+        /*
+         * Change the timepicker's time base on what is clicked
+         *
+         * @param {string} The + or - operator
+         * @param {object} The timepicker's associated input to be set post change
+         * @param {object} The DOM arrow object clicked, determines if it is hours,
+         * minutes, or meridiem base on the operator and its siblings
+         */
+        changeValue: function (operator, input, clicked) {
+            var target = (operator === '+') ? clicked.nextSibling : clicked.previousSibling;
+            var targetClass = $(target).attr('class');
+            if (targetClass.endsWith('hours')) {
+                this.setHours(eval(this.getHours() + operator + 1));
+            } else if (targetClass.endsWith('minutes')) {
+                this.setMinutes(eval(this.getMinutes() + operator + this.options.minutesInterval));
+            } else if (targetClass.endsWith('seconds')) {
+                this.setSeconds(eval(this.getSeconds() + operator + this.options.secondsInterval));
+            } else {
+                this.setMeridiem();
+            }
+            this.setText(input);
+        },
+
+
+        /*
+         * Sets the give input's text to the current timepicker's time
+         *
+         * @param {object} The input element
+         */
+        setText: function (input) {
+            $(input).val(this.formatTime(this.selectedHour, this.selectedMin, this.selectedMeridiem, this.selectedSec)).change();
+        },
+
+        /*
+         * Get the given input's value
+         *
+         * @param {object} The input element
+         *
+         * @return {string}
+         */
+        getText: function (input) {
+            return $(input).val();
+        },
+
+        /*
+         * Returns the correct time format as a string
+         *
+         * @param {string} hour
+         * @param {string} minutes
+         * @param {string} meridiem
+         *
+         * @return {string}
+         */
+        formatTime: function (hour, min, meridiem, seconds) {
+            var formattedTime = hour + this.options.timeSeparator + min;
+            if (this.options.twentyFour) {
+                formattedTime = hour + this.options.timeSeparator  + min;
+            }
+            if (this.options.showSeconds) {
+                formattedTime += this.options.timeSeparator  + seconds;
+            }
+            if (this.options.twentyFour === false) {
+                formattedTime += ' ' + meridiem;
+            }
+            return formattedTime;
+        },
+
+        /**
+         *  Apply the hover class to the arrows and close icon fonts
+         */
+        setHoverState: function () {
+            var self = this;
+            if (!isMobile()) {
+                $(this.up).add(this.down).add(this.close).hover(function () {
+                    $(this).toggleClass(self.options.hoverState);
+                });
+            }
+        },
+
+        /**
+         * Wrapping the given input field with the clearable container
+         * , add a span that will contain the x, and bind the clear
+         * input event to the span
+         *
+         * @param input
+         */
+        makePickerInputClearable: function(input) {
+            $(input).wrap('<div class="clearable-picker"></div>').after('<span data-clear-picker>&times;</span>');
+
+            //When the x is clicked, clear its sibling input field
+            $('[data-clear-picker]').on('click', function(event) {
+               $(this).siblings('.hasWickedpicker').val('');
+            });
+        },
+
+        /**
+         * Convert the options time string format
+         * to an array
+         *
+         * returns => [hours, minutes, seconds]
+         *
+         * @param stringTime
+         * @returns {*}
+         */
+        timeArrayFromString: function (stringTime) {
+            if (stringTime.length) {
+                var time = stringTime.split(':');
+                time[2] = (time.length < 3) ? '00' : time[2];
+                return time;
+            }
+            return false;
+        },
+
+        //public functions
+        /*
+         * Returns the requested input element's value
+         */
+        _time: function () {
+            var inputValue = $(this.element).val();
+            return (inputValue === '') ? this.formatTime(this.selectedHour, this.selectedMin, this.selectedMeridiem, this.selectedSec) : inputValue;
+        },
+        _hide: function() {
+            this.hideTimepicker(this.element);
+        }
+    });
+
+    //optional index if multiple inputs share the same class
+    $.fn[pluginName] = function (options, index) {
+        if (!$.isFunction(Wickedpicker.prototype['_' + options])) {
+            return this.each(function () {
+                if (!$.data(this, "plugin_" + pluginName)) {
+                    $.data(this, "plugin_" + pluginName, new Wickedpicker(this, options));
+                }
+            });
+        }
+        else if ($(this).hasClass('hasWickedpicker')) {
+            if (index !== undefined) {
+                return $.data($(this)[index], 'plugin_' + pluginName)['_' + options]();
+            }
+            else {
+                return $.data($(this)[0], 'plugin_' + pluginName)['_' + options]();
+            }
+        }
+    };
+
+})(jQuery, window, document);
diff --git a/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/stylesheets/wickedpicker.css b/wp-content/plugins/woocommerce-chronopost/admin/vendor/wickedpicker/stylesheets/wickedpicker.css
new file mode 100755 (executable)
index 0000000..d2a6ab2
--- /dev/null
@@ -0,0 +1,90 @@
+.wickedpicker {
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  box-shadow: 0 0 0 1px rgba(14, 41, 57, 0.12), 0 2px 5px rgba(14, 41, 57, 0.44), inset 0 -1px 2px rgba(14, 41, 57, 0.15);
+  background: #fefefe;
+  margin: 0 auto;
+  border-radius: 0.1px;
+  width: 270px;
+  height: 130px;
+  font-size: 14px;
+  display: none; }
+  .wickedpicker__title {
+    background-image: -webkit-linear-gradient(top, #ffffff 0%, #f2f2f2 100%);
+    background-image: linear-gradient(to bottom, #ffffff 0%, #f2f2f2 100%);
+    position: relative;
+    background: #f2f2f2;
+    margin: 0 auto;
+    border-bottom: 1px solid #e5e5e5;
+    padding: 12px 11px 10px 15px;
+    color: #4C4C4C;
+    font-size: inherit; }
+  .wickedpicker__close {
+    -webkit-transform: translateY(-25%);
+    -moz-transform: translateY(-25%);
+    -ms-transform: translateY(-25%);
+    -o-transform: translateY(-25%);
+    transform: translateY(-25%);
+    position: absolute;
+    top: 25%;
+    right: 10px;
+    color: #34495e;
+    cursor: pointer; }
+    .wickedpicker__close:before {
+      content: '\00d7'; }
+  .wickedpicker__controls {
+    padding: 10px 0;
+    line-height: normal;
+    margin: 0; }
+    .wickedpicker__controls__control, .wickedpicker__controls__control--separator {
+      vertical-align: middle;
+      display: inline-block;
+      font-size: inherit;
+      margin: 0 auto;
+      width: 35px;
+      letter-spacing: 1.3px; }
+      .wickedpicker__controls__control-up, .wickedpicker__controls__control-down {
+        color: #34495e;
+        position: relative;
+        display: block;
+        margin: 3px auto;
+        font-size: 18px;
+        cursor: pointer; }
+      .wickedpicker__controls__control-up:before {
+        content: '\e800'; }
+      .wickedpicker__controls__control-down:after {
+        content: '\e801'; }
+      .wickedpicker__controls__control--separator {
+        width: 5px; }
+
+.text-center, .wickedpicker__title, .wickedpicker__controls, .wickedpicker__controls__control, .wickedpicker__controls__control--separator, .wickedpicker__controls__control-up, .wickedpicker__controls__control-down {
+  text-align: center; }
+
+.hover-state {
+  color: #3498db; }
+
+@font-face {
+  font-family: 'fontello';
+  src: url("../fonts/fontello.eot?52602240");
+  src: url("../fonts/fontello.eot?52602240#iefix") format("embedded-opentype"), url("../fonts/fontello.woff?52602240") format("woff"), url("../fonts/fontello.ttf?52602240") format("truetype"), url("../fonts/fontello.svg?52602240#fontello") format("svg");
+  font-weight: normal;
+  font-style: normal; }
+
+.fontello:before, .wickedpicker__controls__control-up:before, .fontello-after:after, .wickedpicker__controls__control-down:after {
+  font-family: 'fontello';
+  font-style: normal;
+  font-weight: normal;
+  speak: none;
+  display: inline-block;
+  text-decoration: inherit;
+  width: 1em;
+  margin-right: .2em;
+  text-align: center;
+  font-variant: normal;
+  text-transform: none;
+  line-height: 1em;
+  margin-left: .2em;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale; }
diff --git a/wp-content/plugins/woocommerce-chronopost/changelog.txt b/wp-content/plugins/woocommerce-chronopost/changelog.txt
new file mode 100755 (executable)
index 0000000..884ea4c
--- /dev/null
@@ -0,0 +1,2 @@
+=== 1.0.3
+- fix depuis nouvelle affectation des methodes de livraisons par Woocommerce
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/chronopost.php b/wp-content/plugins/woocommerce-chronopost/chronopost.php
new file mode 100755 (executable)
index 0000000..b0e56e2
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+
+/**
+ *
+ * This file is read by WordPress to generate the plugin information in the plugin
+ * admin area. This file also includes all of the dependencies used by the plugin,
+ * registers the activation and deactivation functions, and defines a function
+ * that starts the plugin.
+ *
+ * @link              https://www.adexos.fr
+ * @since             1.0.0
+ * @package           Chronopost
+ *
+ * @wordpress-plugin
+ * Plugin Name:       Chronopost
+ * Plugin URI:        https://www.chronopost.fr/
+ * Description:       Chronopost shipping methods for WooCommerce
+ * Version:           1.2.0
+ * Author:            Adexos
+ * Author URI:        https://www.adexos.fr
+ * License:           GPL-2.0+
+ * License URI:       http://www.gnu.org/licenses/gpl-2.0.txt
+ * Text Domain:       chronopost
+ * Domain Path:       /languages
+ */
+
+// If this file is called directly, abort.
+if ( ! defined( 'WPINC' ) ) {
+       die;
+}
+
+define('CHRONO_PLUGIN_PATH', plugin_dir_path( __FILE__ ));
+define('CHRONO_PLUGIN_URL', plugin_dir_url( __FILE__ ));
+
+/**
+ * The code that runs during plugin activation.
+ * This action is documented in includes/class-chronopost-activator.php
+ */
+function activate_chronopost() {
+       require_once plugin_dir_path( __FILE__ ) . 'includes/class-chronopost-activator.php';
+       Chronopost_Activator::activate();
+}
+
+/**
+ * The code that runs during plugin deactivation.
+ * This action is documented in includes/class-chronopost-deactivator.php
+ */
+function deactivate_chronopost() {
+       require_once plugin_dir_path( __FILE__ ) . 'includes/class-chronopost-deactivator.php';
+       Chronopost_Deactivator::deactivate();
+}
+
+register_activation_hook( __FILE__, 'activate_chronopost' );
+register_deactivation_hook( __FILE__, 'deactivate_chronopost' );
+
+/**
+ * The core plugin class that is used to define internationalization,
+ * admin-specific hooks, and public-facing site hooks.
+ */
+require plugin_dir_path( __FILE__ ) . 'includes/class-chronopost-core.php';
+
+/**
+ * Begins execution of the plugin.
+ *
+ * Since everything within the plugin is registered via hooks,
+ * then kicking off the plugin from this point in the file does
+ * not affect the page life cycle.
+ *
+ * @since    1.0.0
+ */
+function run_chronopost() {
+
+       require_once plugin_dir_path( __FILE__ ) . 'includes/deprecated.php';
+       require_once plugin_dir_path( __FILE__ ) . 'vendor/autoload.php';
+
+       $chronopost = new Chronopost();
+       $chronopost->run();
+
+}
+
+/**
+ * Check if WooCommerce is active
+ */
+
+ if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
+       run_chronopost();
+ }
diff --git a/wp-content/plugins/woocommerce-chronopost/composer.json b/wp-content/plugins/woocommerce-chronopost/composer.json
new file mode 100755 (executable)
index 0000000..30bf028
--- /dev/null
@@ -0,0 +1,5 @@
+{
+    "require": {
+        "setasign/fpdi-fpdf": "^2.0"
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/composer.lock b/wp-content/plugins/woocommerce-chronopost/composer.lock
new file mode 100755 (executable)
index 0000000..5031445
--- /dev/null
@@ -0,0 +1,157 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "908952551424991d961e1db540098bea",
+    "packages": [
+        {
+            "name": "setasign/fpdf",
+            "version": "1.8.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Setasign/FPDF.git",
+                "reference": "2c68c9e6c034ac3187d25968790139a73184cdb1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Setasign/FPDF/zipball/2c68c9e6c034ac3187d25968790139a73184cdb1",
+                "reference": "2c68c9e6c034ac3187d25968790139a73184cdb1",
+                "shasum": ""
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "fpdf.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "no usage restriction"
+            ],
+            "authors": [
+                {
+                    "name": "Olivier Plathey",
+                    "email": "oliver@fpdf.org",
+                    "homepage": "http://fpdf.org/"
+                }
+            ],
+            "description": "FPDF is a PHP class which allows to generate PDF files with pure PHP. F from FPDF stands for Free: you may use it for any kind of usage and modify it to suit your needs.",
+            "homepage": "http://www.fpdf.org",
+            "keywords": [
+                "fpdf",
+                "pdf"
+            ],
+            "time": "2016-01-01T17:47:15+00:00"
+        },
+        {
+            "name": "setasign/fpdi",
+            "version": "v2.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Setasign/FPDI.git",
+                "reference": "3c266002f8044f61b17329f7cd702d44d73f0f7f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Setasign/FPDI/zipball/3c266002f8044f61b17329f7cd702d44d73f0f7f",
+                "reference": "3c266002f8044f61b17329f7cd702d44d73f0f7f",
+                "shasum": ""
+            },
+            "require": {
+                "ext-zlib": "*",
+                "php": "^5.6 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5.7",
+                "setasign/fpdf": "~1.8",
+                "setasign/tfpdf": "1.25",
+                "tecnickcom/tcpdf": "~6.2"
+            },
+            "suggest": {
+                "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured.",
+                "setasign/fpdi-fpdf": "Use this package to automatically evaluate dependencies to FPDF.",
+                "setasign/fpdi-tcpdf": "Use this package to automatically evaluate dependencies to TCPDF.",
+                "setasign/fpdi-tfpdf": "Use this package to automatically evaluate dependencies to tFPDF."
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "setasign\\Fpdi\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jan Slabon",
+                    "email": "jan.slabon@setasign.com",
+                    "homepage": "https://www.setasign.com"
+                },
+                {
+                    "name": "Maximilian Kresse",
+                    "email": "maximilian.kresse@setasign.com",
+                    "homepage": "https://www.setasign.com"
+                }
+            ],
+            "description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.",
+            "homepage": "https://www.setasign.com/fpdi",
+            "keywords": [
+                "fpdf",
+                "fpdi",
+                "pdf"
+            ],
+            "time": "2019-01-30T14:11:19+00:00"
+        },
+        {
+            "name": "setasign/fpdi-fpdf",
+            "version": "v2.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Setasign/FPDI-FPDF.git",
+                "reference": "e4363ac09e1b766b38ebea1c3cbe82b3480a11e9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Setasign/FPDI-FPDF/zipball/e4363ac09e1b766b38ebea1c3cbe82b3480a11e9",
+                "reference": "e4363ac09e1b766b38ebea1c3cbe82b3480a11e9",
+                "shasum": ""
+            },
+            "require": {
+                "setasign/fpdf": "^1.8",
+                "setasign/fpdi": "^2.2"
+            },
+            "type": "library",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jan Slabon",
+                    "email": "jan.slabon@setasign.com",
+                    "homepage": "https://www.setasign.com"
+                }
+            ],
+            "description": "Kind of metadata package for dependencies of the latest versions of FPDI and FPDF.",
+            "homepage": "https://www.setasign.com/fpdi",
+            "keywords": [
+                "fpdf",
+                "fpdi",
+                "pdf"
+            ],
+            "time": "2019-01-30T14:38:19+00:00"
+        }
+    ],
+    "packages-dev": [],
+    "aliases": [],
+    "minimum-stability": "stable",
+    "stability-flags": [],
+    "prefer-stable": false,
+    "prefer-lowest": false,
+    "platform": [],
+    "platform-dev": []
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/csv/chrono10.csv b/wp-content/plugins/woocommerce-chronopost/csv/chrono10.csv
new file mode 100755 (executable)
index 0000000..0e73ef4
--- /dev/null
@@ -0,0 +1,27 @@
+FR,MC;0;2;18.2
+FR,MC;2;5;18.7
+FR,MC;5;6;19.5
+FR,MC;6;7;20.20
+FR,MC;7;8;20.85
+FR,MC;8;9;21.5
+FR,MC;9;10;22.15
+FR,MC;10;11;22.8
+FR,MC;11;12;23.45
+FR,MC;12;13;24.10
+FR,MC;13;14;24.75
+FR,MC;14;15;25.4
+FR,MC;15;16;26.05
+FR,MC;16;17;26.70
+FR,MC;17;18;27.35
+FR,MC;18;19;28
+FR,MC;19;20;28.65
+FR,MC;20;21;29.30
+FR,MC;21;22;29.95
+FR,MC;22;23;30.6
+FR,MC;23;24;31.25
+FR,MC;24;25;31.9
+FR,MC;25;26;32.55
+FR,MC;26;27;33.2
+FR,MC;27;28;33.85
+FR,MC;28;29;34.5
+FR,MC;29;30;35.15
diff --git a/wp-content/plugins/woocommerce-chronopost/csv/chrono13.csv b/wp-content/plugins/woocommerce-chronopost/csv/chrono13.csv
new file mode 100755 (executable)
index 0000000..0e73ef4
--- /dev/null
@@ -0,0 +1,27 @@
+FR,MC;0;2;18.2
+FR,MC;2;5;18.7
+FR,MC;5;6;19.5
+FR,MC;6;7;20.20
+FR,MC;7;8;20.85
+FR,MC;8;9;21.5
+FR,MC;9;10;22.15
+FR,MC;10;11;22.8
+FR,MC;11;12;23.45
+FR,MC;12;13;24.10
+FR,MC;13;14;24.75
+FR,MC;14;15;25.4
+FR,MC;15;16;26.05
+FR,MC;16;17;26.70
+FR,MC;17;18;27.35
+FR,MC;18;19;28
+FR,MC;19;20;28.65
+FR,MC;20;21;29.30
+FR,MC;21;22;29.95
+FR,MC;22;23;30.6
+FR,MC;23;24;31.25
+FR,MC;24;25;31.9
+FR,MC;25;26;32.55
+FR,MC;26;27;33.2
+FR,MC;27;28;33.85
+FR,MC;28;29;34.5
+FR,MC;29;30;35.15
diff --git a/wp-content/plugins/woocommerce-chronopost/csv/chrono18.csv b/wp-content/plugins/woocommerce-chronopost/csv/chrono18.csv
new file mode 100755 (executable)
index 0000000..0e73ef4
--- /dev/null
@@ -0,0 +1,27 @@
+FR,MC;0;2;18.2
+FR,MC;2;5;18.7
+FR,MC;5;6;19.5
+FR,MC;6;7;20.20
+FR,MC;7;8;20.85
+FR,MC;8;9;21.5
+FR,MC;9;10;22.15
+FR,MC;10;11;22.8
+FR,MC;11;12;23.45
+FR,MC;12;13;24.10
+FR,MC;13;14;24.75
+FR,MC;14;15;25.4
+FR,MC;15;16;26.05
+FR,MC;16;17;26.70
+FR,MC;17;18;27.35
+FR,MC;18;19;28
+FR,MC;19;20;28.65
+FR,MC;20;21;29.30
+FR,MC;21;22;29.95
+FR,MC;22;23;30.6
+FR,MC;23;24;31.25
+FR,MC;24;25;31.9
+FR,MC;25;26;32.55
+FR,MC;26;27;33.2
+FR,MC;27;28;33.85
+FR,MC;28;29;34.5
+FR,MC;29;30;35.15
diff --git a/wp-content/plugins/woocommerce-chronopost/csv/chronoclassic.csv b/wp-content/plugins/woocommerce-chronopost/csv/chronoclassic.csv
new file mode 100755 (executable)
index 0000000..adddb44
--- /dev/null
@@ -0,0 +1,11 @@
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;0;0.50;30.94
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;0.50;1.00;45.07
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;1.00;1.50;55.26
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;1.50;2.00;65.45
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;2.00;2.50;75.64
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;2.50;3.00;85.83
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;3.00;3.50;88.72
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;3.50;4.00;91.61
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;4.00;4.50;94.50
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;4.50;5.00;97.39
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;5.00;30.00;97.39
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/csv/chronoexpress.csv b/wp-content/plugins/woocommerce-chronopost/csv/chronoexpress.csv
new file mode 100755 (executable)
index 0000000..adddb44
--- /dev/null
@@ -0,0 +1,11 @@
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;0;0.50;30.94
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;0.50;1.00;45.07
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;1.00;1.50;55.26
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;1.50;2.00;65.45
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;2.00;2.50;75.64
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;2.50;3.00;85.83
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;3.00;3.50;88.72
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;3.50;4.00;91.61
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;4.00;4.50;94.50
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;4.50;5.00;97.39
+DE,BE,BG,CY,DK,ES,EE,FI,GR,IE,IT,LV,LT,MT,NL,PL,PT,CZ,RO,SK,AT,HU,LU,GB,SI,SE,GF,YT,GP,MQ,RE;5.00;30.00;97.39
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/csv/chronorelais.csv b/wp-content/plugins/woocommerce-chronopost/csv/chronorelais.csv
new file mode 100755 (executable)
index 0000000..8b928e1
--- /dev/null
@@ -0,0 +1,17 @@
+FR,MC;0;2;15.2
+FR,MC;2;5;15.9
+FR,MC;5;6;16.55
+FR,MC;6;7;17.20
+FR,MC;7;8;17.85
+FR,MC;8;9;18.5
+FR,MC;9;10;19.15
+FR,MC;10;11;19.8
+FR,MC;11;12;20.45
+FR,MC;12;13;21.10
+FR,MC;13;14;21.75
+FR,MC;14;15;22.4
+FR,MC;15;16;23.05
+FR,MC;16;17;23.7
+FR,MC;17;18;24.35
+FR,MC;18;19;25
+FR,MC;19;20;25.65
diff --git a/wp-content/plugins/woocommerce-chronopost/csv/chronorelaiseurope.csv b/wp-content/plugins/woocommerce-chronopost/csv/chronorelaiseurope.csv
new file mode 100755 (executable)
index 0000000..c745c75
--- /dev/null
@@ -0,0 +1,13 @@
+DE,AT,BE,BG,CY,DK,ES,EE,FI,GR,HU,IE,IT,LV,LT,LU,MT,NL,PL,PT,CZ,RO,GB,SK,SI,SE;0;2;17.56
+DE,AT,BE,BG,CY,DK,ES,EE,FI,GR,HU,IE,IT,LV,LT,LU,MT,NL,PL,PT,CZ,RO,GB,SK,SI,SE;2;3;18.40
+DE,AT,BE,BG,CY,DK,ES,EE,FI,GR,HU,IE,IT,LV,LT,LU,MT,NL,PL,PT,CZ,RO,GB,SK,SI,SE;3;4;19.24
+DE,AT,BE,BG,CY,DK,ES,EE,FI,GR,HU,IE,IT,LV,LT,LU,MT,NL,PL,PT,CZ,RO,GB,SK,SI,SE;4;5;20.08
+DE,AT,BE,BG,CY,DK,ES,EE,FI,GR,HU,IE,IT,LV,LT,LU,MT,NL,PL,PT,CZ,RO,GB,SK,SI,SE;5;6;20.92
+DE,AT,BE,BG,CY,DK,ES,EE,FI,GR,HU,IE,IT,LV,LT,LU,MT,NL,PL,PT,CZ,RO,GB,SK,SI,SE;6;7;21.76
+DE,AT,BE,BG,CY,DK,ES,EE,FI,GR,HU,IE,IT,LV,LT,LU,MT,NL,PL,PT,CZ,RO,GB,SK,SI,SE;7;8;22.60
+DE,AT,BE,BG,CY,DK,ES,EE,FI,GR,HU,IE,IT,LV,LT,LU,MT,NL,PL,PT,CZ,RO,GB,SK,SI,SE;8;9;23.44
+DE,AT,BE,BG,CY,DK,ES,EE,FI,GR,HU,IE,IT,LV,LT,LU,MT,NL,PL,PT,CZ,RO,GB,SK,SI,SE;9;10;24.28
+DE,AT,BE,BG,CY,DK,ES,EE,FI,GR,HU,IE,IT,LV,LT,LU,MT,NL,PL,PT,CZ,RO,GB,SK,SI,SE;10;15;28.48
+DE,AT,BE,BG,CY,DK,ES,EE,FI,GR,HU,IE,IT,LV,LT,LU,MT,NL,PL,PT,CZ,RO,GB,SK,SI,SE;15;20;32.68
+DE,AT,BE,BG,CY,DK,ES,EE,FI,GR,HU,IE,IT,LV,LT,LU,MT,NL,PL,PT,CZ,RO,GB,SK,SI,SE;20;25;36.88
+DE,AT,BE,BG,CY,DK,ES,EE,FI,GR,HU,IE,IT,LV,LT,LU,MT,NL,PL,PT,CZ,RO,GB,SK,SI,SE;25;30;41.08
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/csv/chronoretour.csv b/wp-content/plugins/woocommerce-chronopost/csv/chronoretour.csv
new file mode 100755 (executable)
index 0000000..712315f
--- /dev/null
@@ -0,0 +1 @@
+"FR","DE","AT","BE","EE","LV","LT","LU","NL","PT","CH","GB"
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/csv/chronosameday.csv b/wp-content/plugins/woocommerce-chronopost/csv/chronosameday.csv
new file mode 100755 (executable)
index 0000000..6ca63e6
--- /dev/null
@@ -0,0 +1,13 @@
+FR,MC;0;2.00;17.56
+FR,MC;2.00;3.00;18.40
+FR,MC;3.00;4.00;19.24
+FR,MC;.00;5.00;20.08
+FR,MC;5.00;6.00;20.92
+FR,MC;6.00;7.00;21.76
+FR,MC;7.00;8.00;22.60
+FR,MC;8.00;9.00;23.44
+FR,MC;9.00;10.00;24.28
+FR,MC;10.00;15.00;28.48
+FR,MC;15.00;20.00;32.68
+FR,MC;20.00;25.00;36.88
+FR,MC;25.00;30.00;41.08
diff --git a/wp-content/plugins/woocommerce-chronopost/csv/index.php b/wp-content/plugins/woocommerce-chronopost/csv/index.php
new file mode 100755 (executable)
index 0000000..6ed2657
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+/**
+  * MODULE WOOCOMMERCE OFFICIEL CHRONOPOST
+  *
+  * LICENSE : All rights reserved - COPY AND REDISTRIBUTION FORBIDDEN WITHOUT PRIOR CONSENT FROM ADEXOS
+  * LICENCE : Tous droits réservés, le droit d'auteur s'applique - COPIE ET REDISTRIBUTION INTERDITES SANS ACCORD EXPRES D'ADEXOS
+  *
+  * @author    Adexos <contact@adexos.fr>
+  * @copyright 2018 Adexos
+  * @license   Proprietary - no redistribution without authorization
+  */
+
+header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
+header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
+
+header('Cache-Control: no-store, no-cache, must-revalidate');
+header('Cache-Control: post-check=0, pre-check=0', false);
+header('Pragma: no-cache');
+
+header('Location: ../../../');
+exit;
diff --git a/wp-content/plugins/woocommerce-chronopost/csv/relaisdom.csv b/wp-content/plugins/woocommerce-chronopost/csv/relaisdom.csv
new file mode 100755 (executable)
index 0000000..e2eb78d
--- /dev/null
@@ -0,0 +1,30 @@
+0;0.5;1
+0.5;1;1
+1;1.5;1
+1.5;2;1
+2;2.5;1
+2.5;3;1
+3;3.5;1
+3.5;4;1
+4;4.5;1
+4.5;5;1
+5;5.5;1
+5.5;6;1
+6;6.5;1
+6.5;7;1
+7;7.5;1
+7.5;8;1
+8;8.5;1
+8.5;9;1
+9;9.5;1
+9.5;10;1
+10;11;1
+11;12;1
+12;13;1
+13;14;1
+14;15;1
+15;16;1
+16;17;1
+17;18;1
+18;19;1
+19;20;1
diff --git a/wp-content/plugins/woocommerce-chronopost/data/default_settings.json b/wp-content/plugins/woocommerce-chronopost/data/default_settings.json
new file mode 100755 (executable)
index 0000000..0d35b76
--- /dev/null
@@ -0,0 +1 @@
+{"general":{"accounts":{"1":{"number":"19869502","label":"Contrat TEST","subaccount":"","password":"255562"}}},"shipper":{"civility":"M","name":"Chronopost SAS","name2":"","address":"3 avenue Gallieni","address2":"","zipcode":"94250","city":"Gentilly","country":"FR","contactname":"Centre de service Chronopost","email":"demandez.a.chronopost@chronopost.fr","phone":"0 825 885 866","mobile":""},"customer":{"civility":"M","name":"Chronopost SAS","name2":"","address":"3 avenue Gallieni","address2":"","zipcode":"94250","city":"Gentilly","country":"FR","contactname":"Centre de service Chronopost","email":"demandez.a.chronopost@chronopost.fr","phone":"0 825 885 866","mobile":""},"return":{"civility":"M","name":"Chronopost SAS","name2":"","address":"3 avenue Gallieni","address2":"","zipcode":"94250","city":"Gentilly","country":"FR","contactname":"Centre de service Chronopost","email":"demandez.a.chronopost@chronopost.fr","phone":"0 825 885 866","mobile":""}}
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/deploy/after_push b/wp-content/plugins/woocommerce-chronopost/deploy/after_push
new file mode 100755 (executable)
index 0000000..265d620
--- /dev/null
@@ -0,0 +1,14 @@
+#!/usr/bin/env bash
+set -e
+oldrev=$1
+newrev=$2
+
+run() {
+  [ -x $1 ] && $1 $oldrev $newrev
+}
+
+echo files changed: $(git diff $oldrev $newrev --diff-filter=ACDMR --name-only | wc -l)
+
+umask 002
+
+git submodule sync && git submodule update --init --recursive
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/deploy/before_restart b/wp-content/plugins/woocommerce-chronopost/deploy/before_restart
new file mode 100755 (executable)
index 0000000..e69de29
diff --git a/wp-content/plugins/woocommerce-chronopost/deploy/restart b/wp-content/plugins/woocommerce-chronopost/deploy/restart
new file mode 100755 (executable)
index 0000000..1a24852
--- /dev/null
@@ -0,0 +1 @@
+#!/bin/sh
diff --git a/wp-content/plugins/woocommerce-chronopost/emails/customer-return-label.php b/wp-content/plugins/woocommerce-chronopost/emails/customer-return-label.php
new file mode 100755 (executable)
index 0000000..7c7a908
--- /dev/null
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Customer note email
+ *
+ * This template can be overridden by copying it to yourtheme/woocommerce/emails/customer-note.php.
+ *
+ * HOWEVER, on occasion WooCommerce will need to update template files and you
+ * (the theme developer) will need to copy the new files to your theme to
+ * maintain compatibility. We try to do this as little as possible, but it does
+ * happen. When this occurs the version of the template file will be bumped and
+ * the readme will list any important changes.
+ *
+ * @see            https://docs.woocommerce.com/document/template-structure/
+ * @author             WooThemes
+ * @package    WooCommerce/Templates/Emails
+ * @version     2.5.0
+ */
+
+if ( ! defined( 'ABSPATH' ) ) {
+       exit;
+}
+
+/**
+ * @hooked WC_Emails::email_header() Output the email header
+ */
+do_action( 'woocommerce_email_header', $email_heading, $email ); ?>
+
+<p><?php _e( "Hello,", 'chronopost' ); ?></p>
+
+<p><?php echo sprintf(__( "You will soon be making a Chronopost shipment for your backorder #%s. The person who sent you this mail has already prepared the waybill you will use. After printing, affix the shipping letter in an adhesive plastic pouch and affix it to your shipment. Note that the bar code must be clearly visible.", 'chronopost' ), $order->get_id()); ?></p>
+
+<p><?php _e( "Regards.", 'chronopost' ); ?></p>
+
+<?php
+
+/**
+ * @hooked WC_Emails::email_footer() Output the email footer
+ */
+do_action( 'woocommerce_email_footer', $email );
diff --git a/wp-content/plugins/woocommerce-chronopost/emails/plain/customer-return-label.php b/wp-content/plugins/woocommerce-chronopost/emails/plain/customer-return-label.php
new file mode 100755 (executable)
index 0000000..bc0ae90
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Customer note email
+ *
+ * This template can be overridden by copying it to yourtheme/woocommerce/emails/plain/customer-note.php.
+ *
+ * HOWEVER, on occasion WooCommerce will need to update template files and you
+ * (the theme developer) will need to copy the new files to your theme to
+ * maintain compatibility. We try to do this as little as possible, but it does
+ * happen. When this occurs the version of the template file will be bumped and
+ * the readme will list any important changes.
+ *
+ * @see            https://docs.woocommerce.com/document/template-structure/
+ * @author             WooThemes
+ * @package    WooCommerce/Templates/Emails/Plain
+ * @version            2.5.0
+ */
+
+if ( ! defined( 'ABSPATH' ) ) {
+       exit;
+}
+
+echo "= " . $email_heading . " =\n\n";
+
+echo __( "Hello,", 'chronopost' ) . "\n\n";
+
+echo sprintf(__( "You will soon be making a Chronopost shipment for your backorder #%s. The person who sent you this mail has already prepared the waybill you will use. After printing, affix the shipping letter in an adhesive plastic pouch and affix it to your shipment. Note that the bar code must be clearly visible.", 'chronopost' ), $order->get_id()) . "\n\n";
+
+echo __( "Regards.", 'chronopost' ) . "\n\n";
+
+echo apply_filters( 'woocommerce_email_footer_text', get_option( 'woocommerce_email_footer_text' ) );
diff --git a/wp-content/plugins/woocommerce-chronopost/gulpconfig.js b/wp-content/plugins/woocommerce-chronopost/gulpconfig.js
new file mode 100755 (executable)
index 0000000..abb541e
--- /dev/null
@@ -0,0 +1,58 @@
+/**
+ * gulpconfig.js
+ * (c) Adexos <contact@adexos.fr>
+ */
+
+//styles
+var SASS_DIR = 'public/scss';
+var CSS_DIR =  'public/css';
+
+module.exports = {
+    /**
+     * Source folders.
+     * @see {@link https://github.com/gulpjs/gulp/blob/master/docs/API.md#gulpsrcglobs-options}
+     */
+    src: {
+        scss:    [SASS_DIR + '/**/*.scss']
+    },
+
+    /**
+     * Destination folders.
+     * @see {@link https://github.com/gulpjs/gulp/blob/master/docs/API.md#gulpdestpath-options}
+     */
+    dest: {
+        css:     CSS_DIR
+    },
+
+    /**
+     * HTTP path of the website/application root.
+     * Used by spritesmith to generate URLs for the background-url declaration. Most often, leave "/".
+     */
+    httpPath: '/',
+
+    /**
+     * Autoprefixer.
+     * @see {@link https://www.npmjs.com/package/gulp-autoprefixer}
+     */
+    autoprefixer: {
+        browsers: ['> 1%', 'ie >= 9'],
+        cascade:  false
+    },
+
+    /**
+     * gulp-combine-media-queries
+     * @see {@link https://www.npmjs.com/package/gulp-combine-media-queries}
+     */
+    cmq: {
+        log: true,
+        use_external: false
+    },
+
+    /**
+     * BrowserSync.
+     * @see {@link https://browsersync.io/docs/options/}
+     */
+    browserSync: {
+        proxy: 'chronopost.local/'
+    }
+};
diff --git a/wp-content/plugins/woocommerce-chronopost/gulpfile.js b/wp-content/plugins/woocommerce-chronopost/gulpfile.js
new file mode 100755 (executable)
index 0000000..ae5e8ae
--- /dev/null
@@ -0,0 +1,52 @@
+'use strict'
+/**
+ * gulpfile.js
+ * (c) Adexos <contact@adexos.fr>
+ */
+
+/**
+ * Configuration loading.
+ */
+var config = require('./gulpconfig');
+
+/**
+ * Gulp & plugins loading.
+ */
+var gulp = require('gulp');
+
+var autoprefixer = require('gulp-autoprefixer');
+var browserSync  = require('browser-sync').create();
+var buffer       = require('vinyl-buffer');
+var cache        = require('gulp-cache');
+var cleancss     = require('gulp-cleancss');
+var sass         = require('gulp-sass');
+
+/**
+ * BrowserSync.
+ */
+gulp.task('browserSync', function() {
+    browserSync.init(config.browserSync);
+});
+
+/**
+ * Sass compiler, then live reload by BrowserSync.
+ */
+gulp.task('sass', function() {
+    return gulp
+        .src(config.src.scss)
+        .pipe(sass().on('error', sass.logError))
+        .pipe(autoprefixer(config.autoprefixer))
+        .pipe(cleancss())
+        //.pipe(cmq(config.cmq))
+        .pipe(gulp.dest(config.dest.css))
+        .pipe(browserSync.reload({stream: true}))
+    ;
+});
+
+/**
+ * Gulp watcher.
+ */
+gulp.task('watch', ['browserSync'], function() {
+    gulp.watch(config.src.scss, ['sass']);
+    gulp.watch(config.liveReload, browserSync.reload);
+});
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-activator.php b/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-activator.php
new file mode 100755 (executable)
index 0000000..ae64fbc
--- /dev/null
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Fired during plugin activation.
+ *
+ * This class defines all code necessary to run during the plugin's activation.
+ *
+ * @since      1.0.0
+ * @package    Chronopost
+ * @subpackage Chronopost/includes
+ * @author     Adexos <contact@adexos.fr>
+ */
+
+require_once plugin_dir_path(dirname(__FILE__)) . 'includes/functions-chronopost-helpers.php';
+
+class Chronopost_Activator
+{
+
+    /**
+     * Short Description. (use period)
+     *
+     * Long Description.
+     *
+     * @since    1.0.0
+     */
+    public static function activate()
+    {
+        $chronopost_media_path = chrono_get_media_path();
+        if (!is_dir($chronopost_media_path)) {
+            // dir doesn't exist, make it
+            mkdir($chronopost_media_path, 0777, true);
+        }
+
+           // Cleanup
+           delete_transient('chrono_contracts');
+
+        // Default settings
+        $plugin_dir = plugin_dir_path( __DIR__ );
+               $default_settings = json_decode(file_get_contents($plugin_dir . 'data/default_settings.json'), true);
+               add_option('chronopost_settings', $default_settings);
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-ajax.php b/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-ajax.php
new file mode 100755 (executable)
index 0000000..e6a7703
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+/**
+ * Chronopost Shipment Management
+ * (Deprecated)
+ *
+ *
+ * @since      1.0.0
+ * @package    Chronopost
+ * @subpackage Chronopost/includes
+ * @author     Adexos <contact@adexos.fr>
+ */
+
+function chronopost_ajax_init()
+{
+    class Chronopost_Ajax
+    {
+        public function __construct()
+        {
+            add_action('wp_ajax_create_shipment_label', array($this, 'ajax_saveAndCreateShipmentLabel'), 10);
+        }
+        
+        public function ajax_saveAndCreateShipmentLabel()
+        {
+            $shipment = new Chronopost_Shipment();
+            if (!isset($_POST['order_id']) || !isset($_POST['chrono_nonce'])) {
+                return false;
+            }
+            $order_id =  $_POST['order_id'];
+            $nonce = $_POST['chrono_nonce'];
+            
+            // check to see if the submitted nonce matches with the
+            // generated nonce we created earlier
+            if (! wp_verify_nonce($nonce, 'chronopost_ajax')) {
+                die('Busted!');
+            }
+            
+            $response = array();
+
+            try {
+                $shipping_labels = $shipment->saveAndCreateShipmentLabel($order_id);
+                $response['status'] = 'success';
+    
+                foreach ($shipping_labels as $key => $shipping_label) {
+                    $shipping_labels[$key]['_tracking_url'] = chrono_get_tracking_url($shipping_label['_skybill_number'], $shipping_label['_shipping_method_id']);
+                }
+                $response['shipping_labels'] = $shipping_labels;
+                echo wp_send_json($response);
+            } catch (Exception $e) {
+                $response['status'] = 'error';
+                $response['message'] = chrono_notice($e->getMessage(), 'error');
+                echo wp_send_json($response);
+            }
+        }
+    }
+    
+    new Chronopost_Ajax();
+}
+
+add_action('admin_init', 'chronopost_ajax_init');
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-core.php b/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-core.php
new file mode 100755 (executable)
index 0000000..31b1b48
--- /dev/null
@@ -0,0 +1,229 @@
+<?php
+/**
+ * The core plugin Chronopost class.
+ *
+ * This is used to define internationalization, admin-specific hooks, and
+ * public-facing site hooks.
+ *
+ * Also maintains the unique identifier of this plugin as well as the current
+ * version of the plugin.
+ *
+ * @since      1.0.0
+ * @package    Chronopost
+ * @subpackage Chronopost/includes
+ * @author     Adexos <contact@adexos.fr>
+ */
+
+class Chronopost
+{
+
+    /**
+     * The loader that's responsible for maintaining and registering all hooks that power
+     * the plugin.
+     *
+     * @since    1.0.0
+     * @access   protected
+     * @var      Chronopost_Loader    $loader    Maintains and registers all hooks for the plugin.
+     */
+    protected $loader;
+
+    /**
+     * The unique identifier of this plugin.
+     *
+     * @since    1.0.0
+     * @access   protected
+     * @var      string    $plugin_name    The string used to uniquely identify this plugin.
+     */
+    protected $plugin_name;
+
+    /**
+     * The current version of the plugin.
+     *
+     * @since    1.0.0
+     * @access   protected
+     * @var      string    $version    The current version of the plugin.
+     */
+    protected $version;
+
+    /**
+     * Define the core functionality of the plugin.
+     *
+     * Set the plugin name and the plugin version that can be used throughout the plugin.
+     * Load the dependencies, define the locale, and set the hooks for the admin area and
+     * the public-facing side of the site.
+     *
+     * @since    1.0.0
+     */
+    public function __construct()
+    {
+        $this->plugin_name = 'chronopost';
+        $this->version = '1.1.0';
+
+        $this->load_dependencies();
+        $this->set_locale();
+        $this->define_admin_hooks();
+        $this->define_public_hooks();
+    }
+
+    /**
+     * Load the required dependencies for this plugin.
+     *
+     * Include the following files that make up the plugin:
+     *
+     * - Chronopost_Loader. Orchestrates the hooks of the plugin.
+     * - Chronopost_i18n. Defines internationalization functionality.
+     * - Chronopost_Admin. Defines all hooks for the admin area.
+     * - Chronopost_Public. Defines all hooks for the public side of the site.
+     *
+     * Create an instance of the loader which will be used to register the hooks
+     * with WordPress.
+     *
+     * @since    1.0.0
+     * @access   private
+     */
+    private function load_dependencies()
+    {
+
+        /**
+         * The class responsible for orchestrating the actions and filters of the
+         * core plugin.
+         */
+        require_once plugin_dir_path(dirname(__FILE__)) . 'includes/functions-chronopost-helpers.php';
+        require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-chronopost-package.php';
+        require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-chronopost-webservice.php';
+        require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-chronopost-daily-docket.php';
+
+        // Chronopost products
+        require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-chronopost-product.php';
+        require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-chronopost-order.php';
+
+        require_once plugin_dir_path(dirname(__FILE__)) . 'includes/products/chrono10.php';
+        require_once plugin_dir_path(dirname(__FILE__)) . 'includes/products/chrono13.php';
+        require_once plugin_dir_path(dirname(__FILE__)) . 'includes/products/chrono18.php';
+        require_once plugin_dir_path(dirname(__FILE__)) . 'includes/products/chronosameday.php';
+        require_once plugin_dir_path(dirname(__FILE__)) . 'includes/products/chronoexpress.php';
+        require_once plugin_dir_path(dirname(__FILE__)) . 'includes/products/chronoclassic.php';
+        require_once plugin_dir_path(dirname(__FILE__)) . 'includes/products/chronorelais.php';
+        require_once plugin_dir_path(dirname(__FILE__)) . 'includes/products/chronorelaiseurope.php';
+        require_once plugin_dir_path(dirname(__FILE__)) . 'includes/products/chronoprecise.php';
+
+        require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-chronopost-shipment.php';
+        
+        require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-chronopost-ajax.php'; // it would be interesting to deactivate this (test needed!)
+
+        require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-chronopost-loader.php';
+
+        /**
+         * The class responsible for defining internationalization functionality
+         * of the plugin.
+         */
+        require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-chronopost-i18n.php';
+
+        /**
+         * The class responsible for defining all actions that occur in the admin area.
+         */
+        require_once plugin_dir_path(dirname(__FILE__)) . 'admin/class-chronopost-admin-settings.php';
+        require_once plugin_dir_path(dirname(__FILE__)) . 'admin/class-chronopost-admin.php';
+
+        /**
+         * The class responsible for defining all actions that occur in the public-facing
+         * side of the site.
+         */
+        require_once plugin_dir_path(dirname(__FILE__)) . 'public/class-chronopost-public.php';
+
+        $this->loader = new Chronopost_Loader();
+    }
+
+    /**
+     * Define the locale for this plugin for internationalization.
+     *
+     * Uses the Chronopost_i18n class in order to set the domain and to register the hook
+     * with WordPress.
+     *
+     * @since    1.0.0
+     * @access   private
+     */
+    private function set_locale()
+    {
+        $plugin_i18n = new Chronopost_i18n();
+
+        $this->loader->add_action('plugins_loaded', $plugin_i18n, 'load_plugin_textdomain');
+    }
+
+    /**
+     * Register all of the hooks related to the admin area functionality
+     * of the plugin.
+     *
+     * @since    1.0.0
+     * @access   private
+     */
+    private function define_admin_hooks()
+    {
+        $plugin_admin = new Chronopost_Admin($this->get_plugin_name(), $this->get_version());
+
+        $this->loader->add_action('admin_enqueue_scripts', $plugin_admin, 'enqueue_styles');
+        $this->loader->add_action('admin_enqueue_scripts', $plugin_admin, 'enqueue_scripts');
+        $this->loader->add_action('add_meta_boxes', $plugin_admin, 'chrono_order_meta_box');
+        $this->loader->add_filter('woocommerce_email_classes', $plugin_admin, 'add_return_label_woocommerce_email');
+        $this->loader->add_filter('admin_footer', $plugin_admin, 'update_db_check');
+    }
+
+    /**
+     * Register all of the hooks related to the public-facing functionality
+     * of the plugin.
+     *
+     * @since    1.0.0
+     * @access   private
+     */
+    private function define_public_hooks()
+    {
+        $plugin_public = new Chronopost_Public($this->get_plugin_name(), $this->get_version());
+        
+        $this->loader->add_action('wp_enqueue_scripts', $plugin_public, 'enqueue_styles');
+        $this->loader->add_action('wp_enqueue_scripts', $plugin_public, 'enqueue_scripts');
+    }
+
+    /**
+     * Run the loader to execute all of the hooks with WordPress.
+     *
+     * @since    1.0.0
+     */
+    public function run()
+    {
+        $this->loader->run();
+    }
+
+    /**
+     * The name of the plugin used to uniquely identify it within the context of
+     * WordPress and to define internationalization functionality.
+     *
+     * @since     1.0.0
+     * @return    string    The name of the plugin.
+     */
+    public function get_plugin_name()
+    {
+        return $this->plugin_name;
+    }
+
+    /**
+     * The reference to the class that orchestrates the hooks with the plugin.
+     *
+     * @since     1.0.0
+     * @return    Chronopost_Loader    Orchestrates the hooks of the plugin.
+     */
+    public function get_loader()
+    {
+        return $this->loader;
+    }
+
+    /**
+     * Retrieve the version number of the plugin.
+     *
+     * @since     1.0.0
+     * @return    string    The version number of the plugin.
+     */
+    public function get_version()
+    {
+        return $this->version;
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-daily-docket.php b/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-daily-docket.php
new file mode 100755 (executable)
index 0000000..4760711
--- /dev/null
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Format Datas to make PDF with FPDF Library
+ * @since      1.0.0
+ * @package    Chronopost
+ * @subpackage Chronopost/includes
+ * @author     Adexos <contact@adexos.fr>
+ */
+
+class DailyDocketPDF extends FPDF
+{
+    public function headTable($data, $w = array(75, 75), $mustBold = true)
+    {
+        foreach ($data as $row) {
+            $this->SetFont('Arial', '', 10);
+            $this->Cell($w[0], 4, $row[0]);
+            if ($mustBold) {
+                $this->SetFont('Arial', 'B', 10);
+            }
+            $this->Cell($w[1], 4, $row[1]);
+            $this->Ln();
+        }
+    }
+
+    public function innerTable($header, $data, $w = array(28, 20, 20, 25, 23, 15, 25, 35))
+    {
+        $this->SetFillColor(204, 204, 204);
+        $this->SetFont('Arial', 'B', 8);
+
+        $sizeof = count($header);
+        for ($i = 0; $i < $sizeof; $i++) {
+            $this->Cell($w[$i], 6, $header[$i], 1, 0, 'L', true);
+        }
+        $this->Ln();
+
+        $this->SetFont('Arial', '', 8);
+        foreach ($data as $row) {
+            $i = 0;
+            foreach ($row as $value) {
+                $this->Cell($w[$i], 5, $value, 'LRB', 0, 'C');
+                $i++;
+            }
+            $this->Ln();
+        }
+    }
+
+    public function oxiCell($text, $w = 0, $h = 0)
+    {
+        $w += $this->GetStringWidth($text);
+        $this->Cell($w, $h, $text);
+        $this->Ln();
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-deactivator.php b/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-deactivator.php
new file mode 100755 (executable)
index 0000000..27bbf13
--- /dev/null
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Fired during plugin deactivation.
+ *
+ * This class defines all code necessary to run during the plugin's deactivation.
+ *
+ * @since      1.0.0
+ * @package    Chronopost
+ * @subpackage Chronopost/includes
+ * @author     Adexos <contact@adexos.fr>
+ */
+
+class Chronopost_Deactivator
+{
+    /**
+     * Short Description. (use period)
+     *
+     * Long Description.
+     *
+     * @since    1.0.0
+     */
+    public static function deactivate()
+    {
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-i18n.php b/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-i18n.php
new file mode 100755 (executable)
index 0000000..5756c18
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Define the internationalization functionality.
+ *
+ * Loads and defines the internationalization files for this plugin
+ * so that it is ready for translation.
+ *
+ * @since      1.0.0
+ * @package    Chronopost
+ * @subpackage Chronopost/includes
+ * @author     Adexos <contact@adexos.fr>
+ */
+
+class Chronopost_i18n
+{
+    /**
+     * Load the plugin text domain for translation.
+     *
+     * @since    1.0.0
+     */
+    public function load_plugin_textdomain()
+    {
+        load_plugin_textdomain(
+            'chronopost',
+            false,
+            dirname(dirname(plugin_basename(__FILE__))) . '/languages/'
+        );
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-loader.php b/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-loader.php
new file mode 100755 (executable)
index 0000000..efccbef
--- /dev/null
@@ -0,0 +1,117 @@
+<?php
+/**
+ * Register all actions and filters for the plugin.
+ *
+ * Maintain a list of all hooks that are registered throughout
+ * the plugin, and register them with the WordPress API. Call the
+ * run function to execute the list of actions and filters.
+ *
+ * @package    Chronopost
+ * @subpackage Chronopost/includes
+ * @author     Adexos <contact@adexos.fr>
+ */
+
+class Chronopost_Loader
+{
+    /**
+     * The array of actions registered with WordPress.
+     *
+     * @since    1.0.0
+     * @access   protected
+     * @var      array    $actions    The actions registered with WordPress to fire when the plugin loads.
+     */
+    protected $actions;
+
+    /**
+     * The array of filters registered with WordPress.
+     *
+     * @since    1.0.0
+     * @access   protected
+     * @var      array    $filters    The filters registered with WordPress to fire when the plugin loads.
+     */
+    protected $filters;
+
+    /**
+     * Initialize the collections used to maintain the actions and filters.
+     *
+     * @since    1.0.0
+     */
+    public function __construct()
+    {
+        $this->actions = array();
+        $this->filters = array();
+    }
+
+    /**
+     * Add a new action to the collection to be registered with WordPress.
+     *
+     * @since    1.0.0
+     * @param    string               $hook             The name of the WordPress action that is being registered.
+     * @param    object               $component        A reference to the instance of the object on which the action is defined.
+     * @param    string               $callback         The name of the function definition on the $component.
+     * @param    int                  $priority         Optional. he priority at which the function should be fired. Default is 10.
+     * @param    int                  $accepted_args    Optional. The number of arguments that should be passed to the $callback. Default is 1.
+     */
+    public function add_action($hook, $component, $callback, $priority = 10, $accepted_args = 1)
+    {
+        $this->actions = $this->add($this->actions, $hook, $component, $callback, $priority, $accepted_args);
+    }
+
+    /**
+     * Add a new filter to the collection to be registered with WordPress.
+     *
+     * @since    1.0.0
+     * @param    string               $hook             The name of the WordPress filter that is being registered.
+     * @param    object               $component        A reference to the instance of the object on which the filter is defined.
+     * @param    string               $callback         The name of the function definition on the $component.
+     * @param    int                  $priority         Optional. he priority at which the function should be fired. Default is 10.
+     * @param    int                  $accepted_args    Optional. The number of arguments that should be passed to the $callback. Default is 1
+     */
+    public function add_filter($hook, $component, $callback, $priority = 10, $accepted_args = 1)
+    {
+        $this->filters = $this->add($this->filters, $hook, $component, $callback, $priority, $accepted_args);
+    }
+
+    /**
+     * A utility function that is used to register the actions and hooks into a single
+     * collection.
+     *
+     * @since    1.0.0
+     * @access   private
+     * @param    array                $hooks            The collection of hooks that is being registered (that is, actions or filters).
+     * @param    string               $hook             The name of the WordPress filter that is being registered.
+     * @param    object               $component        A reference to the instance of the object on which the filter is defined.
+     * @param    string               $callback         The name of the function definition on the $component.
+     * @param    int                  $priority         The priority at which the function should be fired.
+     * @param    int                  $accepted_args    The number of arguments that should be passed to the $callback.
+     * @return   array                                  The collection of actions and filters registered with WordPress.
+     */
+    private function add($hooks, $hook, $component, $callback, $priority, $accepted_args)
+    {
+        $hooks[] = array(
+            'hook'          => $hook,
+            'component'     => $component,
+            'callback'      => $callback,
+            'priority'      => $priority,
+            'accepted_args' => $accepted_args
+        );
+
+        return $hooks;
+    }
+
+    /**
+     * Register the filters and actions with WordPress.
+     *
+     * @since    1.0.0
+     */
+    public function run()
+    {
+        foreach ($this->filters as $hook) {
+            add_filter($hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args']);
+        }
+
+        foreach ($this->actions as $hook) {
+            add_action($hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args']);
+        }
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-order.php b/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-order.php
new file mode 100755 (executable)
index 0000000..db069d8
--- /dev/null
@@ -0,0 +1,140 @@
+<?php
+/**
+ * Get orders using Chronopost Product Shipping.
+ *
+ * Maintain a list of all hooks that are registered throughout
+ * the plugin, and register them with the WordPress API. Call the
+ * run function to execute the list of actions and filters.
+ *
+ * @package    Chronopost
+ * @subpackage Chronopost/includes
+ * @author     Adexos <contact@adexos.fr>
+ */
+
+if (! class_exists('WC_Chronopost_Order')) {
+    class WC_Chronopost_Order
+    {
+        public static function get_post_count($only_label = false)
+        {
+            $args = self::get_wp_query_args(-1, 1, $only_label);
+            $query = new WP_Query($args);
+            return $query->post_count;
+        }
+
+        public static function get_shipping_methods()
+        {
+            return get_option('chronopost_shipping_methods', true, array());
+        }
+
+        public static function get_wp_query_args($limit = -1, $pagenum = 1, $only_label = false)
+        {
+            global $wpdb;
+            $chrono_methods = array_keys(self::get_shipping_methods());
+
+            $results = $wpdb->get_results( "
+                SELECT SQL_CALC_FOUND_ROWS p.ID FROM {$wpdb->prefix}posts as p
+                INNER JOIN {$wpdb->prefix}woocommerce_order_items as woi ON woi.order_id = p.ID
+                INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta as woim ON woim.order_item_id = woi.order_item_id
+                WHERE p.post_type = 'shop_order'
+                AND woim.meta_value LIKE 'chrono%'
+                AND ((p.post_status <> 'trash' AND p.post_status <> 'auto-draft'))
+                GROUP BY p.ID
+                ORDER BY p.ID DESC
+            " );
+
+            $order_ids = array();
+
+            foreach ($results as $p) {
+                $order_ids[] = $p->ID;
+            }
+
+            $meta_query = [];
+
+            if ($only_label) {
+                $meta_query[] = array(
+                    'key'              => '_shipment_datas',
+                    'value'            => '_skybill_number',
+                    'compare'  => 'LIKE'
+                );
+            }
+
+            $args = array(
+                'posts_per_page'       => $limit,
+                'post_type'            => 'shop_order',
+                'post__in'         => $order_ids,
+                'post_status'   => 'any',
+                'orderby'       => 'ID',
+                'order'         => 'DESC',
+                'meta_query'   => $meta_query,
+                'paged' => $pagenum
+            );
+            return $args;
+        }
+
+        public static function get_orders($limit = -1, $pagenum = 1, $only_label= false)
+        {
+            $args = self::get_wp_query_args($limit, $pagenum, $only_label);
+            return new WP_Query($args);
+        }
+
+           /**
+            * @param        $_order
+            * @param        $parcels
+            * @param string $reservation_number
+            *
+            * @return array|bool|mixed
+            */
+        public static function add_tracking_numbers($_order, $parcels, $reservation_number = '')
+        {
+               $order_shipping_method = $_order->get_shipping_methods();
+               $shipping_method = reset($order_shipping_method);
+               $shipping_method_id = $shipping_method->get_method_id();
+
+               $shipment_datas = chrono_get_shipment_datas( $_order->get_id() );
+               if ( ! $shipment_datas ) {
+                       $shipment_datas = array();
+               }
+               $new_shipment_datas = array(
+                       '_reservation_number'     => $reservation_number,
+                       '_shipping_method_id' => $shipping_method_id,
+                       '_parcels' => array()
+               );
+
+               $tracking_infos = array();
+               foreach ($parcels as $parcel) {
+                       $tracking_number = $parcel->skybillNumber;
+                       $tracking_infos[] = array(
+                               'number' => $tracking_number,
+                               'url' => chrono_get_tracking_url( $tracking_number, $shipping_method_id )
+                       );
+                       $new_parcel = array(
+                               '_skybill_number' => $tracking_number,
+                               '_parcel'         => json_decode( json_encode( $parcel ), true )
+                       );
+                       array_push($new_shipment_datas['_parcels'], $new_parcel);
+               }
+
+               $shipment_datas[] = $new_shipment_datas;
+               update_post_meta($_order->get_id(), '_shipment_datas', $shipment_datas);
+
+               if (isset($tracking_infos) && is_array($tracking_infos)) {
+                       foreach ($tracking_infos as $tracking_info) {
+                               $note = sprintf(__('Your order has just been shipped. The tracking number is %s, you can track your shipment by <a href="%s">clicking here</a>', 'chronopost'), $tracking_info['number'], $tracking_info['url']);
+                               $_order->add_order_note($note, 1);
+                       }
+               }
+               return $shipment_datas;
+        }
+
+        public static function add_parcels_dimensions($shipment_datas, $parcels_dimensions) {
+               end($shipment_datas);
+               $last_shipment_key = key($shipment_datas);
+               foreach ($parcels_dimensions as $i => $dimensions) {
+                       if (isset($shipment_datas[$last_shipment_key]['_parcels'][$i - 1])) {
+                               $shipment_datas[$last_shipment_key]['_parcels'][$i - 1]['dimensions'] = $dimensions;
+                       }
+               }
+               return $shipment_datas;
+        }
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-package.php b/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-package.php
new file mode 100755 (executable)
index 0000000..4a23f39
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+/**
+ * The class which aims to give informations about shipped products.
+ *
+ * @since      1.0.0
+ * @package    Chronopost
+ * @subpackage Chronopost/includes
+ * @author     Adexos <contact@adexos.fr>
+ */
+
+class Chronopost_Package
+{
+    public static $admin_notice = '';
+
+    public static function print_admin_notice()
+    {
+        echo chrono_notice(self::$admin_notice, 'error');
+    }
+
+    public static function getTotalWeight($order_items, $round = false)
+    {
+        // Get weight of order
+        $weight = 0;
+        foreach ($order_items as $item_id => $values) {
+            $product_id = array_key_exists('product_id', $values) ? $values['product_id'] : $values->get_product_id();
+
+            // load wc_product if necessary
+            if (!array_key_exists('data', $values)) {
+                $values['data'] = new WC_Product($product_id);
+            }
+
+            if (!$values['data']->needs_shipping()) {
+                /*
+                if (is_admin()) {
+                    $this->admin_notice = sprintf(__('Product % is a virtual product. Skipping.', 'chronopost'), $product_id);
+                    add_action( 'admin_notices', array( $this, 'print_admin_notice' ) );
+                }
+                */
+                continue;
+            }
+            if (!$values['data']->get_weight()) {
+                if (is_admin()) {
+                    self::$admin_notice = sprintf(__('Warning, missing weight for Product %s. You should fill this information to make right label estimates.', 'chronopost'), $product_id);
+                    add_action('admin_notices', array( 'Chronopost_Package', 'print_admin_notice' ));
+                }
+                return;
+            }
+            $itemsWeight = wc_get_weight($values['data']->get_weight(), chrono_get_weight_unit());
+            if ($round) {
+               $itemsWeight = round($itemsWeight);
+            }
+            $weight += $values['quantity'] * $itemsWeight;
+        }
+        return $weight;
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-product.php b/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-product.php
new file mode 100755 (executable)
index 0000000..416c32c
--- /dev/null
@@ -0,0 +1,779 @@
+<?php
+/**
+ * Default Chronopost product object
+ *
+ * Maintain a list of all hooks that are registered throughout
+ * the plugin, and register them with the WordPress API. Call the
+ * run function to execute the list of actions and filters.
+ *
+ * @package    Chronopost
+ * @subpackage Chronopost/includes
+ * @author     Adexos <contact@adexos.fr>
+ */
+
+function chronopost_product_init()
+{
+    if (! class_exists('WC_Chronopost_Product')) {
+        class WC_Chronopost_Product extends WC_Shipping_Method
+        {
+               protected $admin_notice;
+               private $chrono_settings;
+            public $id;
+            public $method_description;
+            public $title;
+            public $loader;
+            public $pretty_title;
+            public $product_code;
+            public $product_code_bal = false;
+            public $product_code_str = false;
+            public $product_code_bal_str = false;
+            public $tracking_url = 'https://www.chronopost.fr/fr/chrono_suivi_search?listeNumerosLT={tracking_number}';
+            public $form_fields;
+
+            /**
+              * Constructor for your shipping class
+              *
+              * @access public
+              * @return void
+              */
+      
+            public function __construct()
+            {
+                $this->loader = new Chronopost_Loader();
+                
+                $this->shipping_method_setting();
+
+                $this->used_product_code = chrono_get_option('enable', 'bal_option') == 'yes' && $this->product_code_bal !== false ? $this->product_code_bal : $this->product_code;
+
+                $this->enabled            = "yes"; // This can be added as an setting but for this example its forced enabled
+
+                $this->option_key                = $this->id.'_table_rates';
+                $this->options                   = array();
+
+                $this->get_options();
+        
+                $this->chrono_settings = get_option('chronopost_settings');
+
+                $this->init();
+            }
+
+               public function print_admin_notice()
+               {
+                       echo chrono_notice($this->admin_notice, 'error');
+               }
+
+               public function print_admin_success()
+               {
+                       echo chrono_notice($this->admin_notice, 'success');
+               }
+            
+            public function shipping_method_setting()
+            {
+                $this->id                 = 'chronopost_product'; // Id for your shipping method. Should be uunique.
+                $this->title       = __('Chronopost Product', 'chronopost');  // Title shown in admin
+                $this->pretty_title       = __('Chronopost Product', 'chronopost');  // Title shown in admin
+                $this->method_title       = __( 'Chronopost', 'woocommerce' );
+                $this->method_description = ''; // Description shown in admin
+                $this->title              = "Chronopost Product"; // This can be added as an setting but for this example its forced.
+            }
+      
+            private function get_options()
+            {
+                if (get_option($this->option_key) === false) {
+                    $csv = plugin_dir_path(dirname(__FILE__)) . 'csv/' . $this->id . '.csv';
+                    if (file_exists($csv)) {
+                        $csv = fopen($csv, 'r');
+
+                        $country_array = array();
+                        $countries = array();
+                        $min = array();
+                        $max = array();
+                        $shipping = array();
+
+                        $i = 0;
+                        while (($row = fgetcsv($csv, 0, ';')) !== false) {
+                            // Extract the parameters from the current row.
+                            list(
+                                    $countries, $min, $max, $shipping) = $row;
+                            
+                            $country_arr = explode(',', $countries);
+                            $arr_zone_names = array();
+
+                            foreach ($country_arr as $c) {
+                                $arr_zone_names[] = WC()->countries->countries[ $c ];
+                            }
+
+                            $zone_name = implode(', ', $arr_zone_names);
+                            
+                            if (!array_key_exists($zone_name, $this->options)) {
+                                $this->options[ $zone_name ] = array();
+                                $this->options[ $zone_name ]['countries'] = $country_arr;
+                                $this->options[ $zone_name ]['rates'] = array();
+                            }
+                            $this->options[ $zone_name ]['min'][] = $min;
+                            $this->options[ $zone_name ]['max'][] = $max;
+                            $this->options[ $zone_name ]['shipping'][] = $shipping;
+                            $this->options[ $zone_name ]['rates'][] = array(
+                                'min' => $min,
+                                'max' => $max,
+                                'shipping' => $shipping
+                            );
+                        }
+                    }
+                } else {
+                    $this->options = array_filter((array) get_option($this->option_key));
+                }
+            }
+
+            /**
+              * Init your settings
+              *
+              * @access public
+              * @return void
+              */
+            public function init()
+            {
+                // Load the settings API
+                $this->get_default_form_fields();
+                $this->extra_form_fields();
+                $this->init_form_fields(); // This is part of the settings API. Override the method to add your own settings
+                $this->init_settings(); // This is part of the settings API. Loads settings you previously init.
+                $this->weight_unit = chrono_get_weight_unit();
+
+                $this->create_select_arrays();
+                
+                if (!is_admin()) {
+                    $this->load_frontend_hooks();
+                }
+
+                // Save settings in admin if you have any defined
+                add_action('woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ));
+        
+                //And save our options
+                add_action('woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_custom_settings' ));
+
+                $this->custom_actions();
+            }
+            
+            public function load_frontend_hooks()
+            {
+                // silence is golden
+            }
+
+            public function custom_actions()
+            {
+                // silence is golden still
+            }
+
+            public function extra_form_fields()
+            {
+            }
+
+               /**
+                * @param null|WC_Order $order
+                *
+                * @return array
+                */
+            public function getContractInfos($order = null)
+            {
+                   $selected_contract = false;
+                if ($order !== null && $order instanceof WC_Order) {
+                       $selected_contract = get_post_meta($order->get_id(), '_use_contract', true);
+                }
+                   if (!$selected_contract && isset($this->settings['contract'])) {
+                           $selected_contract = $this->settings['contract'];
+                   }
+                   // Last chance
+                   if (!$selected_contract) {
+                           $selected_contract = $this->form_fields["contract"]["default"];
+                   }
+
+                   return chrono_get_contract_infos($selected_contract);
+            }
+
+            public function addMargeToQuickcost($quickcost_val, $carrierCode = '', $firstPassage = true)
+            {
+                if ($carrierCode) {
+                    $quickcostMarge =  $this->settings['quickcost_marge'];
+                    $quickcostMargeType = $this->settings['quickcost_marge_type'];
+
+                    if ($quickcostMarge) {
+                        if ($quickcostMargeType == 'amount') {
+                            $quickcost_val += $quickcostMarge;
+                        } elseif ($quickcostMargeType == 'prcent') {
+                            $quickcost_val += $quickcost_val * $quickcostMarge / 100;
+                        }
+                    }
+                }
+                return $quickcost_val;
+            }
+
+            public function calculate_shipping($package = array())
+            {
+                $rate = $this->get_shipping_rate($package);
+                $this->add_rate($rate);
+            }
+
+            /**
+                * calculate_shipping function.
+                *
+                * @access public
+                * @param mixed $package
+                * @return mixed
+                */
+            public function get_shipping_rate($package = array())
+            {
+                if ($this->settings['enabled'] != 'yes') {
+                    return false;
+                }
+
+                $cost = false;
+
+                $ws = new Chronopost_Webservice();
+
+                if ($package['destination']['postcode'] == '') {
+                    return false;
+                }
+
+                $dest_country = $package['destination']['country'];
+
+                $this->isAllowed = $ws->getMethodIsAllowed($this, $package);
+
+                if (!$this->isAllowed) {
+                    return false;
+                }
+
+                //what is the tax status
+                $taxes = $this->settings['tax_status'] == 'none' ? false : '';
+            
+                $cartWeight = WC()->cart->cart_contents_weight;
+            
+                $items = WC()->cart->get_cart();
+            
+                // if one of an item exceed 30 kg, skip chrono methods
+                foreach ($items as $item => $values) {
+                    $product_weight = (float)$values['data']->get_weight();
+                    if (chrono_get_weight_unit() == 'g') {
+                        $product_weight = $product_weight / 1000;
+                    }
+                    if ($product_weight > 30) {
+                        return false;
+                    }
+                }
+
+                if ($this->settings['quickcost_enable'] == 'yes') {
+                    //to get arrival code
+                    if (chrono_get_weight_unit() == 'g') {
+                        $cartWeight = $cartWeight / 1000; /* conversion g => kg */
+                    }
+                
+                    $arrCode = $package['destination']['postcode'];
+
+                    if ($this->id == 'chronoexpress' || $this->id == 'chronopostcclassic') {
+                        $arrCode = $dest_country;
+                    }
+
+                       $contract = $this->getContractInfos();
+                    $quickCost = array(
+                        'accountNumber' => $contract['number'],
+                        'password' => $contract['password'],
+                        'depCode' => chrono_get_option('zipcode', 'shipper'),
+                        'arrCode' => $arrCode,
+                        'weight' => $cartWeight,
+                        'productCode' => $this->used_product_code,
+                        'type' => 'M'
+                    );
+                
+                    if ($quickCostValues = $ws->getQuickcost($quickCost, $this->settings['quickcost_url'])) {
+                        if ($quickCostValues->errorCode == 0) {
+                            $quickcost_val = (float) $quickCostValues->amountTTC;
+
+                            /* Ajout marge au quickcost */
+                            if ($quickcost_val !== false) {
+                                $cost = $this->addMargeToQuickcost($quickcost_val, $this->id);
+                            }
+                        } else {
+                            //wc_add_notice( $quickCostValues->errorMessage, 'error' );
+                            // @TODO situation si quickcost ne retourne aucune valeur
+                            return;
+                        }
+                    }
+                }
+
+                // no quickcost value or no activated quickcost
+                if ($cost === false) {
+                
+                    // get the associated rate for the country
+                    $rates = $this->get_rates_for_country($dest_country);
+                
+                    if ($rates == null) {
+                        //no rate available for the dest country
+                        return;
+                    }
+
+                    // get the associated rate by weight
+                    $cost = $this->find_matching_rate($cartWeight + 0.1, $rates);
+                }
+            
+                if ($cost === null || $cost === false) {
+                    return;
+                }
+
+                if (is_numeric($this->settings['handling_fee'])) {
+                    $cost += $this->settings['handling_fee'];
+                }
+            
+                if (is_numeric($this->settings['application_fee'])) {
+                    $cost += $this->settings['application_fee'];
+                }
+            
+                $rate = array(
+                    'id' => $this->id,
+                    'label' => $this->settings['title'] . (!$cost ? ': ' . __('Free', 'chronopost') : ''),
+                    'cost' => $cost,
+                    'taxes' => $taxes,
+                    'calc_tax' => 'per_order'
+                );
+
+                return $rate;
+            }
+            
+            public function get_rates_for_country($country)
+            {
+                //Find matching rate through options
+                $ret = array();
+                foreach ($this->options as $rate) {
+                    if (in_array($country, $rate['countries'])) {
+                        $ret[] =  $rate;
+                    }
+                }
+            
+                //if something found, return it, otherwise return null.
+                return count($ret) > 0 ? $ret : null; 
+            }
+        
+            //Find the matching rate
+            public function find_matching_rate($value, $shipping_zones)
+            {
+                foreach ($shipping_zones as $shipping_zone) {
+                    //get max and min rate for each zone
+                    for ($i=0; $i<count($shipping_zone['max']); $i++) {
+                        // infinity case
+                        if ($shipping_zone['max'][$i] == '*') {
+                            if ($value >= $shipping_zone['min'][$i]) {
+                                return $shipping_zone['shipping'][$i];
+                            }
+                        } else {
+                            if ($value >= $shipping_zone['min'][$i] && $value <= $shipping_zone['max'][$i]) {
+                                return $shipping_zone['shipping'][$i];
+                            }
+                        }
+                    }
+                    // nothing found, return null
+                    return null;
+                }
+            }
+
+            public function get_default_form_fields()
+            {
+                $this->form_fields = array(
+                'enabled' => array(
+                    'title'            => __('Enable?', 'chronopost'),
+                    'type'                     => 'checkbox',
+                    'label'            => __('Enable the shipping method', 'chronopost'),
+                    'default'          => 'no'
+                ),
+                'contract' => array(
+                       'title'                 => __('Contract', 'chronopost'),
+                       'type'                  => 'select',
+                       'default'       => $this->get_default_contrat(),
+                       'options'       => $this->get_contracts_list(),
+                ),
+                'title' => array(
+                    'title'            => __('Checkout Title', 'chronopost'),
+                    'description'              => __('This title appear during the checkout', 'chronopost'),
+                    'type'                     => 'text',
+                    'default'          => __($this->pretty_title, 'chronopost'),
+                    'desc_tip'     => true
+                ),
+                'quickcost_enable' => array(
+                    'title'            => __('Activate Quickcost', 'chronopost'),
+                    'type'                     => 'checkbox',
+                    'label'            => __('Automatically calculate the shipping cost with Quickcost', 'chronopost'),
+                    'default'          => 'no',
+                    'description'              => __('Quickcost will calculate the cost of an item, depending on the rates negociated with Chronopost. This option replaces the use of the fee schedule.', 'chronopost'),
+                    'desc_tip'     => true
+                ),
+                'quickcost_url' => array(
+                    'title'            => __('Quickcost URL', 'chronopost'),
+                    'type'                     => 'text',
+                    'default'          => 'https://www.chronopost.fr/quickcost-cxf/QuickcostServiceWS?wsdl'
+                ),
+                'quickcost_marge' => array(
+                    'title'            => __('Value to add to Quickcost', 'chronopost'),
+                    'type'                     => 'number',
+                    'default'          => '0',
+                    'class'     => 'small-text'
+                ),
+                'quickcost_marge_type' => array(
+                    'title'            => __('Type of marge', 'chronopost'),
+                    'type'                     => 'select',
+                    'default'          => 'amount',
+                    'options'          => array(
+                        'amount'       => __('Amount (€)', 'chronopost'),
+                        'prcent'               => __('Percentage (%)', 'chronopost'),
+                    ),
+                    'custom_attributes' => array(
+                        'step' => 'any'
+                    )
+                ),
+                'application_fee' => array(
+                    'title'            => __('Application fee', 'chronopost'),
+                    'type'                     => 'number',
+                    'default'          => 0,
+                    'class'     => 'small-text',
+                    'custom_attributes' => array(
+                        'step' => 'any'
+                    )
+                ),
+                'handling_fee' => array(
+                    'title'            => __('Handling fee', 'chronopost'),
+                    'type'                     => 'number',
+                    'default'          => 0,
+                    'class'     => 'small-text',
+                    'custom_attributes' => array(
+                        'step' => 'any'
+                    )
+                ),
+                'tracking_url' => array(
+                    'title'            => __('Tracking URL', 'chronopost'),
+                    'type'                     => 'text',
+                    'default'          => $this->tracking_url,
+                ),
+                'deliver_on_saturday' => array(
+                    'title'            => __('Deliver on Saturday?', 'chronopost'),
+                    'type'                     => 'select',
+                    'default'          => 'no',
+                    'options'          => array(
+                        'no'   => __('No', 'chronopost'),
+                        'yes'          => __('Yes', 'chronopost'),
+                    )
+                ),
+                'tax_status' => array(
+                    'title'            => __('Tax status', 'chronopost'),
+                    'type'                     => 'select',
+                    'default'          => 'none',
+                    'options'          => array(
+                        'taxable'      => __('Taxable', 'chronopost'),
+                        'none'                 => __('None', 'chronopost'),
+                    )
+                ),
+                'table_rates_table' => array(
+                    'type'                             => 'table_rates_table'
+                )
+            );
+            }
+
+            /**
+                ** This initialises the form field
+                */
+            public function init_form_fields()
+            {
+            }
+
+            /**
+            * admin_options
+            * These generates the HTML for all the options
+            */
+            public function admin_options()
+            {
+                ?>
+                               <h2><?php echo $this->title; ?></h2>
+                <table class="form-table">
+                    <?php $this->generate_settings_html(); ?>
+                </table> 
+                       <?php
+            }
+            
+            // generate table rate manager
+            public function generate_table_rates_table_html()
+            {
+                ob_start(); ?>
+                               <tr>
+                                       <th scope="row" class="titledesc"><?php _e('Shipping rates', 'chronopost'); ?></th>
+                                       <td id="<?php echo $this->id; ?>_settings" class="shipping-rate-table" data-rate-lines='<?php echo esc_attr(json_encode($this->options)); ?>' data-countries='<?php echo json_encode($this->country_array); ?>'>
+                                               <table class="shippingrows widefat">
+                                                                       <col style="width:0%">
+                                                                       <col style="width:0%">
+                                                                       <col style="width:0%">
+                                                                       <col style="width:100%;">
+                                                       <thead>
+                                                               <tr>
+                                                                       <th class="check-column"></th>
+                                                                       <th><?php _e('Shipping Zone Name', 'chronopost') ?></th>
+                                                                       <th><?php _e('Countries', 'chronopost'); ?></th>
+                                                               </tr>
+                                                       </thead>
+                                                       <tbody>
+                                                               <tr>
+                                                                       <td colspan="3" class="add-zone-buttons">
+                                                                               <a href="#" class="add button"><?php _e('Add New Shipping Zone', 'chronopost'); ?></a>
+                                                                               <a href="#" class="delete button"><?php _e('Delete Selected Zones', 'chronopost'); ?></a>
+                                                                       </td>
+                                                               </tr>
+                                                       </tbody>
+                                               </table>
+                                       </td>
+                               </tr>                           
+                               <?php
+                return ob_get_clean();
+            }
+
+            public function get_default_contrat()
+            {
+                   $accounts = chrono_get_option('accounts');
+                   if (!is_array($accounts)) {
+                           return '';
+                   }
+                   return isset($accounts[1]['number']) ? $accounts[1]['number'] : '';
+            }
+
+            public function get_contracts_list()
+            {
+                   $accounts = chrono_get_all_contracts();
+
+                   if (!is_array($accounts)) {
+                       return array();
+                }
+                $options = array();
+                foreach ($accounts as $account) {
+                       $options[esc_attr($account['number'])] = esc_js($account['label']);
+                }
+                return $options;
+            }
+
+            /**
+            * Get the shipping countries
+            */
+            public function get_shipping_country_list()
+            {
+                $options = array();
+                foreach (WC()->countries->get_shipping_countries() as $country_code => $country_name) :
+                    $options['country'][esc_attr($country_code)] = esc_js($country_name);
+                endforeach;
+                
+                return $options;
+            }
+
+            /**
+            * Make country array
+            */
+            public function create_select_arrays()
+            {
+                $this->country_array = array();
+
+                foreach (WC()->countries->get_shipping_countries() as $id => $value) :
+                    $this->country_array[esc_attr($id)] = esc_js($value);
+                endforeach;
+            }
+
+            /**
+             * Check if the product is available for the contract
+             * @return bool
+             */
+            private function isAvailableForContract(){
+
+                $ws = new Chronopost_Webservice();
+                $default_package = array(
+                    'contents'    => array(),
+                    'destination' => array(
+                        "country"   => "",
+                        "state"     => "",
+                        "postcode"  => "",
+                        "city"      => "",
+                        "address"   => "",
+                        "address_2" => ""
+                    )
+                );
+
+                // Produits disponibles pour l'addresse configurée
+                $default_package['destination']['country']  = $this->chrono_settings['shipper']['country'];
+                $default_package['destination']['postcode'] = $this->chrono_settings['shipper']['zipcode'];
+                $default_package['destination']['city']     = $this->chrono_settings['shipper']['city'];
+                $allowed = $ws->getMethodIsAllowed($this, $default_package);
+
+                // Produits disponibles en France Metropolitaine
+                if(!$allowed){
+                    $default_package['destination']['country']  = "FR";
+                    $default_package['destination']['postcode'] = "Paris";
+                    $default_package['destination']['city']     = "75001";
+                    $allowed = $ws->getMethodIsAllowed($this, $default_package);
+                }
+
+                // Produits disponibles pour les DOM
+                if(!$allowed){
+                    $default_package['destination']['country']  = "RE";
+                    $default_package['destination']['postcode'] = "974000";
+                    $default_package['destination']['city']     = "Saint-Denis";
+                    $allowed = $ws->getMethodIsAllowed($this, $default_package);
+                }
+
+                // Produits disponibles pour l'Europe
+                if(!$allowed){
+                    $default_package['destination']['country']  = "DE";
+                    $default_package['destination']['postcode'] = "101127";
+                    $default_package['destination']['city']     = "Berlin";
+                    $allowed = $ws->getMethodIsAllowed($this, $default_package);
+                }
+
+                return $allowed;
+            }
+
+            /**
+            * This saves all of our custom table settings
+            */
+            public function process_custom_settings()
+            {
+                // register chronopost method and code in the database if not exists
+                $chronopost_methods = get_option('chronopost_shipping_methods', array(), true);
+                   $method_settings = chrono_get_method_settings($this->id);
+                   $allowed = $this->isAvailableForContract();
+
+                   if (isset($_POST['woocommerce_' . $this->id . '_enabled']) && $_POST['woocommerce_' . $this->id . '_enabled'] === "1" && !$allowed) {
+                       if (!defined('CHRONO_RUN_ONCE')) {
+                        WC_Admin_Settings::add_error( __("You can't enable this product with this contract. Please contact us for more informations.", 'chronopost'));
+                        define('CHRONO_RUN_ONCE', true);
+                    }
+                           // Event is fired twice
+                    $method_settings['enabled'] = '';
+                }
+
+                   if ( array_key_exists( $this->id,
+                                   $chronopost_methods ) && ( ! isset( $chronopost_methods['product_allowed'] )
+                        || $chronopost_methods['product_allowed'] !== $allowed ) ) {
+                           $chronopost_methods[$this->id]['product_allowed'] = $allowed;
+                   }
+
+                if (!array_key_exists($this->id, $chronopost_methods)) {
+                    $chronopost_methods = array_merge(
+                        array(
+                            $this->id => array(
+                                   'product_allowed' => $allowed,
+                                'product_code' => $this->product_code,
+                                'product_code_bal' => $this->product_code_bal,
+                                'product_code_str' => $this->product_code_str,
+                                'product_code_bal_str' => $this->product_code_bal_str
+                            )
+                        ),
+                        $chronopost_methods
+                    );
+                    update_option('chronopost_shipping_methods', $chronopost_methods);
+
+                }
+
+                   // Force update enabled setting
+                if($method_settings['enabled'] === false)
+                       $method_settings['enabled'] = $allowed ? 'yes' : 'no';
+
+                   update_option('woocommerce_' . $this->id . '_settings', $method_settings);
+                
+                //Arrays to hold the clean POST vars
+                $keys =array();
+                $zone_name =array();
+                $countries = array();
+                $min = array();
+                $max = array();
+                $shipping = array();
+                
+                
+                // Get the post data from shipping zone configuration
+
+                if (isset($_POST[ 'key'])) {
+                    $keys = array_map('wc_clean', $_POST['key']);
+                }
+
+                if (isset($_POST[ 'zone-name'])) {
+                    $zone_name = array_map('wc_clean', $_POST['zone-name']);
+                }
+                
+                if (isset($_POST[ 'countries'])) {
+                    $countries = $_POST['countries'] ;
+                }
+
+                if (isset($_POST[ 'min'])) {
+                    $min = $_POST['min'] ;
+                }
+
+                if (isset($_POST[ 'max'])) {
+                    $max = $_POST['max'] ;
+                }
+
+                if (isset($_POST[ 'shipping'])) {
+                    $shipping = $_POST['shipping'] ;
+                }
+                
+                $options = $this->format_shipping_rate_options($zone_name, $countries, $min, $max, $shipping, $keys);
+                
+                // Save shipping rates options
+                update_option($this->option_key, $options);
+            }
+
+            public function format_shipping_rate_options($zone_name, $countries, $min, $max, $shipping, $keys)
+            {
+                $options = array();
+                
+                // Loop through the array of shipping rates
+                foreach ($keys as $key => $value) {
+                    
+                    
+                    // if empty, we continue to next field
+                    if (
+                        empty($zone_name[$key]) ||
+                        empty($countries[ $key ])
+                    ) {
+                        continue;
+                    }
+                    
+                    // Retrieve the shipping zone name
+                    $name =  $zone_name[$key];
+                    
+                    // Adding the shipping rates
+                    $obj =array();
+                    foreach ($min[ $key ] as $k => $val) {
+                        if (
+                            empty($min[ $key ][$k]) &&
+                            empty($max[ $key ][$k]) &&
+                            empty($shipping[ $key][$k])
+                        ) {
+                            unset($min[ $key ][$k]);
+                            unset($max[ $key ][$k]);
+                            unset($shipping[ $key ][$k]);
+                        } else {
+                            //add it to the object array
+                            $obj[] = array("min" => $min[ $key ][ $k], "max" => $max[ $key ][ $k], "shipping" => $shipping[ $key ][ $k]);
+                        }
+                    }
+                    
+                    usort($obj, 'self::cmp'); // sort the rate datas
+                    
+                    //create the array to hold the data
+                    $options[ $name ] = array();
+                    $options[ $name ][ 'countries'] = $countries[ $key ];
+                    $options[ $name ][ 'min'] = $min[ $key ];
+                    $options[ $name ][ 'max'] = $max[ $key ];
+                    $options[ $name ][ 'shipping'] = $shipping[ $key ];
+                    $options[ $name ][ 'rates'] = $obj;
+                }
+                return (array)$options;
+            }
+            
+            // Comparision function for sorting shipping rates
+            public function cmp($a, $b)
+            {
+                return $a['min'] - $b['min'];
+            }
+        }
+    }
+}
+
+add_action('woocommerce_shipping_init', 'chronopost_product_init');
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-return-email.php b/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-return-email.php
new file mode 100755 (executable)
index 0000000..f3bc6c8
--- /dev/null
@@ -0,0 +1,141 @@
+<?php
+/**
+* A custom Expedited Order WooCommerce Email class
+*
+* @since 0.1
+* @extends \WC_Email
+*/
+
+if (! defined('ABSPATH')) {
+    exit;
+} // Exit if accessed directly
+
+class WC_Return_Label_Email extends WC_Email
+{
+    /**
+    * Set email defaults
+    *
+    * @since 0.1
+    */
+    public function __construct()
+    {
+  
+     // set ID, this simply needs to be a unique name
+        $this->id = 'wc_return_label';
+        $this->customer_email = true;
+  
+        // this is the title in WooCommerce Email settings
+        $this->title = __('Return Label Email', 'chronopost');
+  
+        // this is the description in WooCommerce email settings
+        $this->description = __('Email sent to customers when return labels are generated', 'chronopost');
+  
+        // these define the locations of the templates that this email should use, we'll just use the new order template since this email is similar
+        $this->template_html  = '../../chronopost/emails/customer-return-label.php';
+        $this->template_plain = '../../chronopost/emails/plain/customer-return-label.php';
+  
+        // Trigger on new paid orders
+        add_action('chronopost_send_return_label_order', array( $this, 'trigger' ));
+  
+        // Call parent constructor to load any other defaults not explicity defined here
+        parent::__construct();
+    }
+  
+    /**
+      * Get email subject.
+      *
+      * @since  3.1.0
+      * @return string
+      */
+    public function get_default_subject()
+    {
+        return sprintf(__('%s: your Chronopost return label', 'chronopost'), get_bloginfo('name'));
+    }
+
+    /**
+      * Get email heading.
+      *
+      * @since  3.1.0
+      * @return string
+      */
+    public function get_default_heading()
+    {
+        return __('Your Chronopost return label', 'chronopost');
+    }
+  
+    /**
+      * Trigger.
+      *
+      * @param array $args
+      */
+    public function trigger($args)
+    {
+        if (! empty($args)) {
+            $defaults = array(
+        'order_id'      => '',
+        'return_label'  => ''
+      );
+
+            $args = wp_parse_args($args, $defaults);
+
+            extract($args);
+
+            if ($order_id && ($this->object = wc_get_order($order_id))) {
+                $this->recipient               = $this->object->get_billing_email();
+
+                $this->find['order-date']      = '{order_date}';
+                $this->find['order-number']    = '{order_number}';
+
+                $this->replace['order-date']   = wc_format_datetime($this->object->get_date_created());
+                $this->replace['order-number'] = $this->object->get_order_number();
+            } else {
+                return;
+            }
+        }
+
+        if (! $this->is_enabled() || ! $this->get_recipient()) {
+            return;
+        }
+
+        $this->setup_locale();
+        $this->send($this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), (array)$return_label);
+        $this->restore_locale();
+    }
+
+    /**
+    * get_content_html function.
+    *
+    * @since 0.1
+    * @return string
+    */
+    public function get_content_html()
+    {
+        return wc_get_template_html($this->template_html, array(
+            'order'         => $this->object,
+            'email_heading' => $this->get_heading(),
+            'sent_to_admin' => true,
+            'plain_text'    => false,
+            'email'                    => $this,
+        ));
+    }
+
+
+    /**
+    * get_content_plain function.
+    *
+    * @since 0.1
+    * @return string
+    */
+    public function get_content_plain()
+    {
+        return wc_get_template_html($this->template_plain, array(
+            'order'         => $this->object,
+            'email_heading' => $this->get_heading(),
+            'sent_to_admin' => true,
+            'plain_text'    => false,
+            'email'                    => $this,
+        ));
+    }
+} // end \WC_Expedited_Order_Email class
+
+return new WC_Return_Label_Email();
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-shipment.php b/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-shipment.php
new file mode 100755 (executable)
index 0000000..9d516c2
--- /dev/null
@@ -0,0 +1,937 @@
+<?php
+
+use setasign\Fpdi\Fpdi;
+
+/**
+ * Chronopost Shipment Management
+ *
+ *
+ * @since      1.0.0
+ * @package    Chronopost
+ * @subpackage Chronopost/includes
+ * @author     Adexos <contact@adexos.fr>
+ */
+
+function chronopost_shipment_init()
+{
+    class Chronopost_Shipment
+    {
+        public function saveAndCreateShipmentLabel($order_id = 0)
+        {
+            if (!is_admin()) {
+                return false;
+            }
+            $_order = new WC_Order($order_id);
+            $ws = new Chronopost_Webservice();
+            $shipping_labels = $ws->saveAndCreateShipmentLabel($_order);
+            if (isset($_GET['action']) && $_GET['action'] == 'edit' && !empty($ws->admin_notice)) {
+                set_transient('chronopost_admin_error', $ws->admin_notice);
+            }
+            return $shipping_labels;
+        }
+
+        /**
+         * Fetch from disk if available, or fetch from webservice
+         *
+         * @param $reservation
+         *
+         * @return string File location
+         */
+        public function getShipmentLabel($reservation)
+        {
+            $pdf_file = chrono_get_media_path() . $reservation . '.pdf';
+            if (!is_file($pdf_file)) {
+                $ws = new Chronopost_Webservice();
+                $label = $ws->getPDFSkybillByReservation($reservation);
+                if ($label && $label->errorCode === 0) {
+                    file_put_contents( $pdf_file, base64_decode( $label->skybill ) );
+                } else if ($label === false) {
+                    throw new Exception(__('An error occured during the label creation.', 'chronopost'));
+                }
+            }
+            return $pdf_file;
+        }
+    }
+
+    shipment_admin_print_action();
+    shipment_admin_cancel_action();
+    shipment_admin_view_action();
+    shipment_admin_return_label_action();
+    shipment_admin_daily_docket_print_action();
+    shipment_admin_export_css_action();
+    if (
+        isset($_REQUEST['chronoaction']) && $_REQUEST['chronoaction'] == '-1'
+        && isset($_REQUEST['shipment_nonce'])
+        && wp_verify_nonce($_REQUEST['shipment_nonce'], 'shipment_list_nonce')
+    ) {
+        if (session_status() == PHP_SESSION_NONE) {
+            session_start();
+        }
+        $_SESSION['alert_msg'] = __('Please select an action in the "Bulk Actions" list', 'chronopost');
+        header('Location: ' . $_SERVER['HTTP_REFERER']);
+    }
+}
+
+function shipment_admin_cancel_action()
+{
+    if (
+        isset($_REQUEST['chronoaction']) && $_REQUEST['chronoaction'] == 'cancel-label'
+        && isset($_REQUEST['shipment_nonce'])
+        && wp_verify_nonce($_REQUEST['shipment_nonce'], 'shipment_list_nonce')
+    ) {
+        if (!isset($_REQUEST['order'])) {
+            chronopost_error_no_order_selected();
+            setcookie("ChronopostGenerateProcess", 'done', time()+3600);
+            header('Location: ' . $_SERVER['HTTP_REFERER']);
+            //return;
+        }
+        $order_ids = (array)$_REQUEST['order'];
+        try {
+            foreach ($order_ids as $order_id) {
+                foreach ($order_ids as $order_id) {
+                    $_order = new WC_Order($order_id);
+                    $shipment_labels_datas = get_post_meta($order_id, '_shipment_datas', true);
+
+                    foreach ( $shipment_labels_datas as $key => $ship_data ) {
+                        foreach ( $ship_data['_parcels'] as $parcel_key => $parcel ) {
+                            $ws = new Chronopost_Webservice();
+                            if ( $ws->cancelSkybill( $_order, $parcel['_skybill_number'],
+                                $ship_data['_shipping_method_id'] ) ) {
+                                unset( $shipment_labels_datas[ $key ]['_parcels'][ $parcel_key ] );
+                                if (empty($shipment_labels_datas[ $key ]['_parcels'])) {
+                                    unset($shipment_labels_datas[ $key ]);
+                                }
+                            }
+                        }
+                    }
+                    update_post_meta($order_id, '_shipment_datas', $shipment_labels_datas);
+                }
+            }
+        } catch (SoapFault $fault) {
+            add_action('admin_notices', 'chronopost_default_generate_label_error');
+        }
+    }
+}
+
+function chronopost_error_no_order_selected()
+{
+    if (session_status() == PHP_SESSION_NONE) {
+        session_start();
+    }
+    $_SESSION['alert_msg'] = __('Please select orders before generate labels', 'chronopost');
+}
+
+function chronopost_error_return_label_already_created()
+{
+    $class = 'notice notice-error';
+    $message = __('Return label has already been generated.', 'chronopost');
+    echo chrono_notice($message, 'error');
+}
+
+function chronopost_default_generate_label_error()
+{
+    $class = 'notice notice-error';
+    $message = __('An error occured while generating your labels. Please try again.', 'chronopost');
+    echo chrono_notice($message, 'error');
+}
+
+function shipment_admin_view_action()
+{
+    if (
+        isset($_GET['chronoaction']) && $_GET['chronoaction'] == 'view-label'
+        && isset($_GET['shipment_nonce'])
+        && wp_verify_nonce($_GET['shipment_nonce'], 'shipment_list_nonce')
+    ) {
+        if (!isset($_GET['order'])) {
+            chronopost_error_no_order_selected();
+            setcookie("ChronopostGenerateProcess", 'done', time()+3600);
+            header('Location: ' . $_SERVER['HTTP_REFERER']);
+            return;
+        }
+        $order_ids = (array)$_REQUEST['order'];
+
+        $shipment = new Chronopost_Shipment();
+        $tmp_pdf_file = false;
+        $pdf = new FPDI();
+        try {
+            foreach ($order_ids as $order_id) {
+                $shipment_labels_datas = get_post_meta($order_id, '_shipment_datas', true);
+                $reservations_printed = array();
+                foreach ($shipment_labels_datas as $ship_data) {
+                    foreach ( $ship_data['_parcels'] as $parcel_data ) {
+                        // Legacy code (versions before 1.1.0)
+                        if (isset($parcel_data['_pdf_buffer'])) {
+                            $tmp_pdf_file = chrono_get_media_path() . $parcel_data['_skybill_number'] . '.pdf';
+                            file_put_contents( $tmp_pdf_file, base64_decode( $parcel_data['_pdf_buffer'] ) );
+                        } else if (isset($ship_data['_reservation_number']) && !empty($ship_data['_reservation_number'])) {
+                            if (in_array($ship_data['_reservation_number'], $reservations_printed)) {
+                                continue;
+                            }
+                            $pdf_file = $shipment->getShipmentLabel($ship_data['_reservation_number']);
+                            $tmp_pdf_file = $pdf_file;
+                            $reservations_printed[] = $ship_data['_reservation_number'];
+                        } else if (isset($parcel_data['_skybill_number']) && !empty($parcel_data['_skybill_number'])) {
+                            if (in_array($parcel_data['_skybill_number'], $reservations_printed)) {
+                                continue;
+                            }
+                            $pdf_file = $shipment->getShipmentLabel($parcel_data['_skybill_number']);
+                            $tmp_pdf_file = $pdf_file;
+                            $reservations_printed[] = $parcel_data['_skybill_number'];
+                        } else {
+                            add_action('admin_notices', 'chronopost_default_generate_label_error');
+                            return false;
+                        }
+
+                        $pageCount = $pdf->setSourceFile( $tmp_pdf_file );
+
+                        for ( $pageNo = 1; $pageNo <= $pageCount; $pageNo ++ ) {
+                            $template_id = $pdf->importPage( $pageNo );
+                            $size        = $pdf->getTemplateSize( $template_id );
+
+                            if ( $size['width'] > $size['height'] ) {
+                                $pdf->AddPage( 'L', array( $size['width'], $size['height'] ) );
+                            } else {
+                                $pdf->AddPage( 'P', array( $size['width'], $size['height'] ) );
+                            }
+
+                            $pdf->useTemplate( $template_id );
+                        }
+                    }
+                }
+            }
+        } catch (SoapFault $fault) {
+            add_action('admin_notices', 'chronopost_default_generate_label_error');
+        } catch (Exception $exception) {
+            add_action('admin_notices', 'chronopost_default_generate_label_error');
+        }
+
+        if ($tmp_pdf_file) {
+            $pdf->Output('D', 'chronopost-labels-'.date('d-m-Y').'.pdf');
+        }
+    }
+}
+
+function addFieldToCsv($csvContent, $fieldDelimiter, $fieldContent)
+{
+    return $csvContent . $fieldDelimiter . $fieldContent . $fieldDelimiter;
+}
+
+function shipment_admin_export_css_action()
+{
+    if (
+        isset($_REQUEST['chronoaction']) && $_REQUEST['chronoaction'] == 'export-css'
+        && isset($_REQUEST['shipment_nonce'])
+        && wp_verify_nonce($_REQUEST['shipment_nonce'], 'shipment_list_nonce')
+    ) {
+        if (!isset($_REQUEST['order'])) {
+            chronopost_error_no_order_selected();
+            setcookie("ChronopostGenerateProcess", 'done', time()+3600);
+            header('Location: ' . $_SERVER['HTTP_REFERER']);
+            //delete session cookie
+
+            return;
+        }
+        $order_ids = (array)$_REQUEST['order'];
+
+        try {
+            $separator = chrono_get_option('field_separator', 'css');
+            $delimiter = chrono_get_option('field_delimiter', 'css');
+            if ($delimiter == 'simple_quote') {
+                $delimiter = "'";
+            } elseif ($delimiter == 'double_quotes') {
+                $delimiter = '"';
+            } else {
+                $delimiter = '';
+            }
+            $lineBreak = chrono_get_option('eol', 'css');
+            if ($lineBreak == 'lf') {
+                $lineBreak = "\n";
+            } elseif ($lineBreak == 'cr') {
+                $lineBreak = "\r";
+            } elseif ($lineBreak == 'crlf') {
+                $lineBreak = "\r\n";
+            }
+            $fileExtension = chrono_get_option('file_extension', 'css');
+            $fileCharset = chrono_get_option('file_charset', 'css');
+
+            $filename = 'chronopost-exportcss_' . date('d-m-Y') . $fileExtension;
+
+            $content = '';
+
+            foreach ($order_ids as $order_id) {
+                $order = new WC_Order($order_id);
+
+                $shipment_extra_datas = chrono_get_shipment_datas($order_id);
+                $shipment_labels_datas = $shipment_extra_datas[0];
+
+                $customer_obj = new WC_Customer($order->get_customer_id());
+
+                $order_shipping_method = $order->get_shipping_methods();
+                $shipping_method = reset($order_shipping_method);
+                $_shippingMethod = $shipping_method->get_method_id();
+
+
+                /* customer id */
+                $content = addFieldToCsv($content, $delimiter, ($order->get_customer_id() ? $order->get_customer_id() : $order->get_shipping_last_name()));
+                $content .= $separator;
+                /* Nom du point relais OU société si livraison à domicile */
+                $content = addFieldToCsv($content, $delimiter, $order->get_shipping_company());
+                $content .= $separator;
+                /* customer name */
+                $content = addFieldToCsv($content, $delimiter, ($order->get_shipping_first_name() ? $order->get_shipping_first_name() : $order->get_billing_first_name()));
+                $content .= $separator;
+                $content = addFieldToCsv($content, $delimiter, ($order->get_shipping_last_name() ? $order->get_shipping_last_name() : $order->get_billing_last_name()));
+                $content .= $separator;
+                /* street address */
+                $content = addFieldToCsv($content, $delimiter, $order->get_shipping_address_1());
+                $content .= $separator;
+                $content = addFieldToCsv($content, $delimiter, $order->get_shipping_address_2());
+                $content .= $separator;
+
+                /* digicode (vide)*/
+                $content = addFieldToCsv($content, $delimiter, '');
+                $content .= $separator;
+
+                /* postal code */
+                $content = addFieldToCsv($content, $delimiter, $order->get_shipping_postcode());
+                $content .= $separator;
+                /* city */
+                $content = addFieldToCsv($content, $delimiter, $order->get_shipping_city());
+                $content .= $separator;
+                /* country code */
+                $content = addFieldToCsv($content, $delimiter, $order->get_shipping_country());
+                $content .= $separator;
+                /* telephone */
+                $telephone = trim(preg_replace("/[^0-9.-]/", " ", $order->get_billing_phone()));
+                $telephone = (strlen($telephone) >= 10 ? $telephone : '');
+                $content = addFieldToCsv($content, $delimiter, $telephone);
+
+                $content .= $separator;
+
+                /* email */
+                $customer_email = $order->get_billing_email() ? $order->get_billing_email() : $customer_obj->get_email();
+
+                $content = addFieldToCsv($content, $delimiter, $customer_email);
+
+                $content .= $separator;
+                /* real order id */
+                $content = addFieldToCsv($content, $delimiter, (int)$order->get_id());
+                $content .= $separator;
+
+                /* code barre client (vide) */
+                $content = addFieldToCsv($content, $delimiter, '');
+                $content .= $separator;
+
+                /* productCode */
+                $content = addFieldToCsv($content, $delimiter, chrono_get_product_code_by_id($_shippingMethod));
+                $content .= $separator;
+
+                /* compte (vide) */
+                $content = addFieldToCsv($content, $delimiter, chrono_get_option('account'));
+                $content .= $separator;
+
+                /* sous compte (vide) */
+                $content = addFieldToCsv($content, $delimiter, chrono_get_option('subaccount'));
+                $content .= $separator;
+
+                /* empty fields : assurance */
+
+                $weight = 0;
+
+                $totalAdValorem = 0;
+
+                $maxAmount = 20000;
+
+                $adValoremAmount = (float)chrono_get_option('min_amount', 'insurance');
+                $adValoremEnabled = chrono_get_option('enable', 'insurance') == 'yes' ? true : false;
+
+                $order_insurance_enable = get_post_meta($order->get_id(), '_insurance_enable', true);
+                $insurance_amount = (float)get_post_meta($order->get_id(), '_insurance_amount', true);
+
+
+                if ($order_insurance_enable != '') {
+                    $adValoremEnabled = $order_insurance_enable == 'no' ? false : true;
+                }
+
+                $totalAdValorem = (float) $_order->get_total() - $_order->get_shipping_total();
+
+                $totalAdValorem = $insurance_amount > 0 ? $insurance_amount : $totalAdValorem;
+
+                if ($adValoremEnabled) {
+                    $totalAdValorem = min($totalAdValorem, $maxAmount);
+                    if ( $totalAdValorem < $adValoremAmount ) {
+                        $totalAdValorem = 0;
+                    }
+                }
+
+                $content = addFieldToCsv($content, $delimiter, (float)$totalAdValorem);
+                $content .= $separator;
+
+                /* Valeur douane */
+                $content = addFieldToCsv($content, $delimiter, 0);
+                $content .= $separator;
+
+
+                /* Document ou marchandise */
+                $content = addFieldToCsv($content, $delimiter, 'M');
+                $content .= $separator;
+
+                /* description contenu (vide) */
+                $content = addFieldToCsv($content, $delimiter, '');
+                $content .= $separator;
+
+                /* Livraison Samedi */
+                $SaturdayShipping = 'L'; //default value for the saturday shipping
+                if ($_shippingMethod == "chronopost" || $_shippingMethod == "chronorelais") {
+                    $is_sending_day = chrono_is_sending_day();
+
+                    $_deliver_on_saturday = chrono_get_method_settings($_shippingMethod, 'deliver_on_saturday') == 'yes' ? 1 : 0;
+
+                    if ($_deliver_on_saturday && $is_sending_day) {
+                        $SaturdayShipping = 'S';
+                    } elseif (!$_deliver_on_saturday && $is_sending_day) {
+                        $SaturdayShipping = 'L';
+                    }
+                }
+
+                $content = addFieldToCsv($content, $delimiter, $SaturdayShipping);
+
+                $content .= $separator;
+
+                /* chronorelay point */
+
+                $recipientRef = '';
+                if ($pickup_relay_datas = get_post_meta($order->get_id(), '_shipping_method_chronorelais', true)) {
+                    $recipientRef = $pickup_relay_datas['id'];
+                }
+
+                $content = addFieldToCsv($content, $delimiter, $recipientRef);
+                $content .= $separator;
+
+                /* total weight (in kg) */
+
+                $order_weight = Chronopost_Package::getTotalWeight($order->get_items());
+
+                $order_weight = number_format($order_weight, 2, '.', '');
+                if (chrono_get_weight_unit() == 'g') {
+                    $order_weight = $order_weight / 1000;
+                }
+                $content = addFieldToCsv($content, $delimiter, $order_weight);
+                $content .= $separator;
+
+
+                /* largeur (vide) */
+                $content = addFieldToCsv($content, $delimiter, '');
+                $content .= $separator;
+
+                /* longueur (vide) */
+                $content = addFieldToCsv($content, $delimiter, '');
+                $content .= $separator;
+
+                /* hauteur (vide) */
+                $content = addFieldToCsv($content, $delimiter, '');
+                $content .= $separator;
+
+                /* avertir destinataire (vide) */
+                $content = addFieldToCsv($content, $delimiter, '1');
+                $content .= $separator;
+
+                /* nb colis (vide) */
+                $content = addFieldToCsv($content, $delimiter, count($shipment_extra_datas));
+                $content .= $separator;
+
+                /* date envoi */
+                $content = addFieldToCsv($content, $delimiter, date('d/m/Y'));
+                $content .= $separator;
+
+                /* a intégrer (vide) */
+                $content = addFieldToCsv($content, $delimiter, 'Y');
+                $content .= $separator;
+
+                /* avertir expéditeur (vide) */
+                $content = addFieldToCsv($content, $delimiter, 'N');
+                $content .= $separator;
+
+                /* DLC (vide) */
+                $content = addFieldToCsv($content, $delimiter, '');
+                $content .= $separator;
+
+                /* champ specifique rdv */
+                $chronopostprecise_creneaux_info = get_post_meta($order->get_id(), '_shipping_method_chronoprecise');
+                if ($chronopostprecise_creneaux_info) {
+                    if (is_array($chronopostprecise_creneaux_info)) {
+                        $chronopostprecise_creneaux_info = array_shift($chronopostprecise_creneaux_info);
+                    }
+                    $_dateRdvStart = new DateTime($chronopostprecise_creneaux_info['deliveryDate']);
+                    $_dateRdvStart->setTime($chronopostprecise_creneaux_info['startHour'], $chronopostprecise_creneaux_info['startMinutes']);
+
+                    $_dateRdvEnd = new DateTime($chronopostprecise_creneaux_info['deliveryDate']);
+                    $_dateRdvEnd->setTime($chronopostprecise_creneaux_info['endHour'], $chronopostprecise_creneaux_info['endMinutes']);
+
+                    /* date debut rdv */
+                    $content = addFieldToCsv($content, $delimiter, $_dateRdvStart->format("dmyHi"));
+                    $content .= $separator;
+
+                    /* date fin rdv */
+                    $content = addFieldToCsv($content, $delimiter, $_dateRdvEnd->format("dmyHi"));
+                    $content .= $separator;
+
+                    /* Niveau tarifaire */
+                    $content = addFieldToCsv($content, $delimiter, $chronopostprecise_creneaux_info['tariffLevel']);
+                    $content .= $separator;
+
+                    /* code service */
+                    $content = addFieldToCsv($content, $delimiter, $chronopostprecise_creneaux_info['serviceCode']);
+                } else {
+                    $content = addFieldToCsv($content, $delimiter, '');
+                    $content .= $separator;
+
+                    $content = addFieldToCsv($content, $delimiter, '');
+                    $content .= $separator;
+
+                    $content = addFieldToCsv($content, $delimiter, '');
+                    $content .= $separator;
+
+                    /* code service */
+                    $content = addFieldToCsv($content, $delimiter, '');
+                }
+
+
+                $content .= $lineBreak;
+            }
+
+            /* decode the content, depending on the charset */
+            if ($fileCharset == 'ISO-8859-1') {
+                $content = utf8_decode($content);
+            }
+
+            /* pick file mime type, depending on the extension */
+            switch ($fileExtension) {
+                case '.csv':
+                    $fileMimeType = 'application/csv';
+                    break;
+                case '.chr':
+                    $fileMimeType = 'application/chr';
+                    break;
+                default:
+                    $fileMimeType = 'text/plain';
+                    break;
+            }
+
+            header('Pragma: public');
+            header('Cache-Control: must-revalidate, post-check=0, pre-check=0', true);
+            header("Content-type: $fileMimeType", true);
+            header('Content-Length: '.strlen($content));
+            header('Content-Disposition: attachment; filename=' . $filename);
+            header('Last-Modified: ' . date('r'));
+
+            print $content;
+
+            die();
+        } catch (SoapFault $fault) {
+            add_action('admin_notices', 'chronopost_default_generate_label_error');
+        }
+
+        $pdf->SetFont('Arial', 'B', 10);
+        $pdf->AddPage();
+        $pdf->Cell(150, 10, 'BORDEREAU RECAPITULATIF');
+        $pdf->SetFont('Arial', '', 10);
+        $pdf->Cell(100, 10, 'date : '.date('d/m/Y'));
+        $pdf->Ln();
+        $pdf->Ln();
+
+        $pdf->SetFont('Arial', 'B', 10);
+
+        $pdf->OxiCell('EMETTEUR', 0, 10);
+        $pdf->HeadTable(array(
+            array('NOM', chrono_get_option('name', 'customer')),
+            array('ADRESSE', chrono_get_option('address', 'customer')),
+            array('ADRESSE (SUITE)', chrono_get_option('address2', 'customer')),
+            array('VILLE', chrono_get_option('city', 'customer')),
+            array('CODE POSTAL', chrono_get_option('zipcode', 'customer')),
+            array('PAYS', chrono_get_option('country', 'customer')),
+            array('TELEPHONE', chrono_get_option('phone', 'customer')),
+            array('POSTE COMPTABLE', (int)(chrono_get_option('zipcode', 'customer') / 1000) * 1000 + 999)
+        ));
+
+        $pdf->SetFont('Arial', 'B', 10);
+        $pdf->Ln();
+        $pdf->Ln();
+        $pdf->OxiCell('DETAIL DES ENVOIS', 0, 10);
+
+        $pdf->InnerTable(array('NUM DE LT', 'POIDS (kg)', 'CODE PRODUIT', 'CODE POSTAL', 'PAYS', 'ASSURANCE', 'VILLE'), $recapLT);
+
+        $pdf->SetFont('Arial', 'B', 10);
+        $pdf->Ln();
+        $pdf->Ln();
+        $pdf->OxiCell('RESUME', 0, 10);
+
+
+        $pdf->InnerTable(array('DESTINATION', 'UNITE', 'POIDS TOTAL (KG)'), array(
+            array('NATIONAL', $sum_nat, $sum_nat_weight),
+            array('INTERNATIONAL', $sum_inter, $sum_inter_weight),
+            array('TOTAL', $sum_inter + $sum_nat, $sum_nat_weight + $sum_inter_weight)
+        ), array(40, 20, 35));
+
+
+        $pdf->Ln(15);
+        $pdf->SetFont('Arial', 'B', 10);
+        $pdf->OxiCell('Bien pris en charge '.($sum_inter + $sum_nat).' colis.', 0, 10);
+        $pdf->Ln(25);
+
+        $pdf->HeadTable(array(
+            array('Signature du Client', 'Signature du Messager Chronopost')
+        ), array(95, 95), false);
+        $pdf->Output('D', 'chronopost-bordereau_'.date('d-m-Y').'.pdf');
+    }
+}
+
+function shipment_admin_daily_docket_print_action()
+{
+    if (
+        isset($_REQUEST['chronoaction']) && $_REQUEST['chronoaction'] == 'print-daily-docket'
+        && isset($_REQUEST['shipment_nonce'])
+        && wp_verify_nonce($_REQUEST['shipment_nonce'], 'shipment_list_nonce')
+    ) {
+        if (!isset($_REQUEST['order'])) {
+            chronopost_error_no_order_selected();
+            setcookie("ChronopostGenerateProcess", 'done', time()+3600);
+            header('Location: ' . $_SERVER['HTTP_REFERER']);
+            return;
+        }
+        $order_ids = (array)$_REQUEST['order'];
+
+        $pdf = new DailyDocketPDF();
+        $tmp_pdf_file = false;
+        try {
+            $recapLT = array();
+            $sum_nat = 0;
+            $sum_inter = 0;
+            $sum_nat_weight = 0;
+            $sum_inter_weight = 0;
+            foreach ($order_ids as $order_id) {
+                $_order = new WC_Order($order_id);
+                $postcode = $_order->get_shipping_postcode();
+                $country = $_order->get_shipping_country();
+                $city = $_order->get_shipping_city();
+                $shipment_labels_datas = chrono_get_shipment_datas($order_id);
+
+                $first_package_loaded = false;
+
+                if (is_array($shipment_labels_datas)) {
+                    foreach ($shipment_labels_datas as $ship_data) {
+                        $weight = 0;
+                        foreach ( $ship_data['_parcels'] as $parcel ) {
+                            $totalAdValorem = 0;
+
+                            // only take the first shipment weight as no multi-shipping on woocommerce by default
+                            if ( ! $first_package_loaded ) {
+                                $weight = Chronopost_Package::getTotalWeight( $_order->get_items() );
+
+                                if ( chrono_get_weight_unit() == 'g' ) {
+                                    $weight = $weight / 1000; // conversion g => kg
+                                }
+
+                                $maxAmount = 20000;
+
+                                $adValoremAmount  = (float) chrono_get_option( 'min_amount', 'insurance' );
+                                $adValoremEnabled = chrono_get_option( 'enable', 'insurance' ) == 'yes' ? true : false;
+
+                                $order_insurance_enable = get_post_meta( $_order->get_id(), '_insurance_enable', true );
+                                $insurance_amount       = (float) get_post_meta( $_order->get_id(), '_insurance_amount',
+                                    true );
+
+
+                                if ( $order_insurance_enable != '' ) {
+                                    $adValoremEnabled = $order_insurance_enable == 'no' ? false : true;
+                                }
+
+                                if ( $adValoremEnabled ) {
+                                    foreach ( $_order->get_items() as $item ) {
+                                        $totalAdValorem += $item->get_total() + (float) $item->get_total_tax() * $item->get_quantity();
+                                    }
+                                    $totalAdValorem = $insurance_amount > 0 ? $insurance_amount : $totalAdValorem;
+                                    $totalAdValorem = min( $totalAdValorem, $maxAmount );
+                                    if ( $totalAdValorem < $adValoremAmount ) {
+                                        $totalAdValorem = 0;
+                                    }
+                                }
+                            }
+
+                            $shipping_method_code     = chrono_get_product_code_by_id( $ship_data['_shipping_method_id'] );
+                            $shipping_method_instance = chrono_get_shipping_method_by_id( $ship_data['_shipping_method_id'] );
+                            $contract                 = $shipping_method_instance->getContractInfos( $_order );
+
+                            // Dimensions
+                            if (isset($parcel['dimensions']) && isset($parcel['dimensions']['weight'])) {
+                                $weight = $parcel['dimensions']['weight'];
+                            }
+
+                            if ( $country == 'FR' ) {
+                                $sum_nat_weight = $sum_nat_weight + $weight;
+                                $sum_nat ++;
+                            } else {
+                                $sum_inter_weight = $sum_inter_weight + $weight;
+                                $sum_inter ++;
+                            }
+
+                            $tmpRecapLT           = array(
+                                'lt_num'       => $parcel['_skybill_number'],
+                                'compte'       => $contract['number'],
+                                'weight'       => $weight,
+                                'product_code' => $shipping_method_code,
+                                'postcode'     => $postcode,
+                                'country'      => $country,
+                                'assurance'    => $totalAdValorem,
+                                'city'         => utf8_decode( $city )
+                            );
+                            $recapLT[]            = $tmpRecapLT;
+                            $first_package_loaded = true;
+                        }
+                    }
+                }
+            }
+        } catch (SoapFault $fault) {
+            add_action('admin_notices', 'chronopost_default_generate_label_error');
+        }
+
+        $pdf->SetFont('Arial', 'B', 10);
+        $pdf->AddPage();
+        $pdf->Cell(150, 10, 'BORDEREAU RECAPITULATIF');
+        $pdf->SetFont('Arial', '', 10);
+        $pdf->Cell(100, 10, 'date : '.date('d/m/Y'));
+        $pdf->Ln();
+        $pdf->Ln();
+
+        $pdf->SetFont('Arial', 'B', 9);
+
+        $pdf->OxiCell('EMETTEUR', 0, 10);
+        $pdf->HeadTable(array(
+            array('NOM', chrono_get_option('name', 'customer')),
+            array('ADRESSE', chrono_get_option('address', 'customer')),
+            array('ADRESSE (SUITE)', chrono_get_option('address2', 'customer')),
+            array('VILLE', chrono_get_option('city', 'customer')),
+            array('CODE POSTAL', chrono_get_option('zipcode', 'customer')),
+            array('PAYS', chrono_get_option('country', 'customer')),
+            array('TELEPHONE', chrono_get_option('phone', 'customer')),
+            array('POSTE COMPTABLE', (int)(chrono_get_option('zipcode', 'customer') / 1000) * 1000 + 999)
+        ));
+
+        $pdf->SetFont('Arial', 'B', 10);
+        $pdf->Ln();
+        $pdf->Ln();
+        $pdf->OxiCell('DETAIL DES ENVOIS', 0, 10);
+
+        $pdf->InnerTable(array('NUM DE LT', 'CONTRAT', 'POIDS (kg)', 'CODE PRODUIT', 'CODE POSTAL', 'PAYS', 'ASSURANCE', 'VILLE'), $recapLT);
+
+        $pdf->SetFont('Arial', 'B', 8);
+        $pdf->Ln();
+        $pdf->Ln();
+        $pdf->OxiCell('RESUME', 0, 10);
+
+
+        $pdf->InnerTable(array('DESTINATION', 'UNITE', 'POIDS TOTAL (KG)'), array(
+            array('NATIONAL', $sum_nat, $sum_nat_weight),
+            array('INTERNATIONAL', $sum_inter, $sum_inter_weight),
+            array('TOTAL', $sum_inter + $sum_nat, $sum_nat_weight + $sum_inter_weight)
+        ), array(40, 20, 35));
+
+
+        $pdf->Ln(15);
+        $pdf->SetFont('Arial', 'B', 10);
+        $pdf->OxiCell('Bien pris en charge '.($sum_inter + $sum_nat).' colis.', 0, 10);
+        $pdf->Ln(25);
+
+        $pdf->HeadTable(array(
+            array('Signature du Client', 'Signature du Messager Chronopost')
+        ), array(95, 95), false);
+        $pdf->Output('D', 'chronopost-bordereau_'.date('d-m-Y').'.pdf');
+    }
+}
+
+function chronopost_set_email_content_type()
+{
+    return "text/html";
+}
+
+function shipment_admin_return_label_action()
+{
+    if (
+        isset($_REQUEST['chronoaction']) && $_REQUEST['chronoaction'] == 'return-label'
+        && isset($_REQUEST['shipment_nonce'])
+        && wp_verify_nonce($_REQUEST['shipment_nonce'], 'shipment_list_nonce')
+    ) {
+        if (!isset($_REQUEST['order'])) {
+            chronopost_error_no_order_selected();
+            setcookie("ChronopostGenerateProcess", 'done', time()+3600);
+            header('Location: ' . $_SERVER['HTTP_REFERER']);
+            return;
+        }
+        $order_id = $_REQUEST['order'];
+        $skybill_id = $_REQUEST['skybill_id'];
+
+        $pdf_path = chrono_get_media_path().'chronopost-etiquette-retour-' . $skybill_id . '.pdf';
+
+        if (file_exists($pdf_path)) {
+            add_action('admin_notices', 'chronopost_error_return_label_already_created');
+        } else {
+            $_order = new WC_Order($order_id);
+            $ws = new Chronopost_Webservice();
+            $pdf_base_64 = $ws->getEtiquetteRetourUrl($_order);
+
+            if ($pdf_base_64) {
+                $pdf_path = chrono_get_media_path().'chronopost-etiquette-retour-' . $skybill_id . '.pdf';
+                file_put_contents($pdf_path, $pdf_base_64);
+
+                $customer_obj = new WC_Customer($_order->get_customer_id());
+
+                $to = $_order->get_billing_email() ? $_order->get_billing_email() : $customer_obj->get_email();
+
+                WC()->mailer()->emails['WC_Return_Label_Email']->trigger(array(
+                    'order_id' => $order_id,
+                    'return_label' => $pdf_path,
+                    'skybill_id' => $skybill_id
+                ));
+            }
+        }
+    }
+}
+
+function shipment_admin_print_action()
+{
+    if (session_status() == PHP_SESSION_NONE) {
+        session_start();
+    }
+    unset($_COOKIE['ChronopostGenerateProcess']);
+    setcookie("ChronopostGenerateProcess", 'processing', time()+3600);
+
+    if (
+        isset($_REQUEST['chronoaction']) && $_REQUEST['chronoaction'] == 'print-label'
+        && isset($_REQUEST['shipment_nonce'])
+        && wp_verify_nonce($_REQUEST['shipment_nonce'], 'shipment_list_nonce')
+    ) {
+        if (!isset($_REQUEST['order'])) {
+            chronopost_error_no_order_selected();
+            setcookie("ChronopostGenerateProcess", 'done', time()+3600);
+            header('Location: ' . $_SERVER['HTTP_REFERER']);
+            //delete session cookie
+        }
+        $order_ids = (array)$_REQUEST['order'];
+
+        $ws = new Chronopost_Webservice();
+        $shipment = new Chronopost_Shipment();
+        $tmp_pdf_file = false;
+        $pdf = new FPDI();
+        try {
+            foreach ($order_ids as $order_id) {
+                $shipment_labels_datas = $shipment->saveAndCreateShipmentLabel($order_id);
+                $_order = new WC_Order($order_id);
+                $order_shipping_method = $_order->get_shipping_methods();
+                $shipping_method_id = '';
+                if ($order_shipping_method) {
+                    $shipping_method = reset($order_shipping_method);
+                }
+
+                $max_weight = $shipping_method->get_method_id() == 'chronorelais' || $shipping_method->get_method_id() == 'chronorelaiseurope' ? 20 : 30;
+
+                $weight = Chronopost_Package::getTotalWeight($_order->get_items());
+
+                $dynamic_weight = get_post_meta($order_id, '_parcels_dimensions', true);
+
+                if (isset($dynamic_weight['weight'])) {
+                    $weight = $dynamic_weight['weight'];
+                }
+
+                if ($weight > $max_weight && count($shipment_labels_datas) >= 1) {
+                    $_SESSION['alert_msg'] = sprintf(__('Warning : the total weight of the packages exceeds %skg for the #%s order, you will need to generate at least one additional label.', 'chronopost'), $max_weight, $order_id);
+                    if (isset($_GET['action']) && $_GET['action'] === 'edit') {
+                        wp_redirect($_order->get_edit_order_url());
+                        return false;
+                    }
+
+                    if(isset($_GET['chronoaction']) && $_GET['chronoaction'] === 'print-label'){
+                        wp_redirect($_SERVER['PHP_SELF']."?page=chronopost-shipping");
+                        return false;
+                    }
+                }
+
+                if (!$shipment_labels_datas || isset($shipment_labels_datas['error'])) {
+                    if($shipment_labels_datas['error'] == 33){
+                        $_SESSION['label_error'] = __('An error occured during the label creation. Please check if this contract can edit labels for this carrier.', 'chronopost');
+                    }
+                    else{
+                        $_SESSION['label_error'] = __('An error occured during the label creation. Please check the customer datas or your Chronopost settings.', 'chronopost');;
+                        unset($_COOKIE['ChronopostGenerateProcess']);
+                    }
+
+                    if (isset($_GET['action']) && $_GET['action'] === 'edit') {
+                        wp_redirect($_order->get_edit_order_url());
+                        return false;
+                    }
+
+                    if(isset($_GET['chronoaction']) && $_GET['chronoaction'] === 'print-label'){
+                        wp_redirect($_SERVER['PHP_SELF']."?page=chronopost-shipping");
+                        return false;
+                    }
+
+                } else {
+                    $reservations_printed = array();
+                    foreach ($shipment_labels_datas as $ship_data) {
+                        foreach ( $ship_data['_parcels'] as $parcel_data ) {
+                            // Legacy code (versions before 1.1.0)
+                            if ( isset( $parcel_data['_pdf_buffer'] ) ) {
+                                $tmp_pdf_file = chrono_get_media_path() . $parcel_data['_skybill_number'] . '.pdf';
+                                file_put_contents( $tmp_pdf_file, base64_decode( $parcel_data['_pdf_buffer'] ) );
+                            } else if ( isset( $ship_data['_reservation_number'] ) && !empty($ship_data['_reservation_number']) ) {
+                                if (in_array($ship_data['_reservation_number'], $reservations_printed)) {
+                                    continue;
+                                }
+                                $pdf_file = $shipment->getShipmentLabel($ship_data['_reservation_number']);
+                                $tmp_pdf_file = $pdf_file;
+                                $reservations_printed[] = $ship_data['_reservation_number'];
+                            } else if (isset($parcel_data['_skybill_number']) && !empty($parcel_data['_skybill_number'])) {
+                                if (in_array($parcel_data['_skybill_number'], $reservations_printed)) {
+                                    continue;
+                                }
+                                $pdf_file = $shipment->getShipmentLabel($parcel_data['_skybill_number']);
+                                $tmp_pdf_file = $pdf_file;
+                                $reservations_printed[] = $parcel_data['_skybill_number'];
+                            } else {
+                                add_action( 'admin_notices', 'chronopost_default_generate_label_error' );
+                                return false;
+                            }
+
+                            $pageCount = $pdf->setSourceFile( $tmp_pdf_file );
+
+                            for ( $pageNo = 1; $pageNo <= $pageCount; $pageNo ++ ) {
+                                $template_id = $pdf->importPage( $pageNo );
+                                $size        = $pdf->getTemplateSize( $template_id );
+
+                                if ( $size['width'] > $size['height'] ) {
+                                    $pdf->AddPage( 'L', array( $size['width'], $size['height'] ) );
+                                } else {
+                                    $pdf->AddPage( 'P', array( $size['width'], $size['height'] ) );
+                                }
+
+                                $pdf->useTemplate( $template_id );
+                            }
+                        }
+                    }
+                }
+            }
+        } catch (SoapFault $fault) {
+            add_action('admin_notices', 'chronopost_default_generate_label_error');
+            setcookie("ChronopostGenerateProcess", 'done', time()+3600);
+        }
+        //delete session cookie
+        setcookie("ChronopostGenerateProcess", 'done', time()+3600);
+
+        if ($tmp_pdf_file) {
+            setcookie("ChronopostGenerateProcess", 'done', time()+3600);
+            $pdf->Output('D', 'chronopost-labels_'.date('d-m-Y').'.pdf');
+        }
+    }
+}
+
+
+add_action('admin_init', 'chronopost_shipment_init');
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-webservice.php b/wp-content/plugins/woocommerce-chronopost/includes/class-chronopost-webservice.php
new file mode 100755 (executable)
index 0000000..64dbb2b
--- /dev/null
@@ -0,0 +1,1514 @@
+<?php
+/**
+ * Chronopost Webservice methods
+ *
+ * Maintain a list of all hooks that are registered throughout
+ * the plugin, and register them with the WordPress API. Call the
+ * run function to execute the list of actions and filters.
+ *
+ * @package    Chronopost
+ * @subpackage Chronopost/includes
+ * @author     Adexos <contact@adexos.fr>
+ */
+
+class Chronopost_Webservice {
+
+       public $methodsAllowed = false;
+       public $admin_notice   = '';
+
+       public function print_admin_notice() {
+               echo chrono_notice( $this->admin_notice, 'error' );
+       }
+
+       public function print_admin_success() {
+               echo chrono_notice( $this->admin_notice, 'success' );
+       }
+
+       /**
+        * @param WC_Order $_order
+        * @param bool $ajax
+        *
+        * @return array|bool|mixed
+        * @throws Exception
+        */
+       public function saveAndCreateShipmentLabel( $_order, $ajax = false ) {
+               //Si l'expedition est réalisé par Mondial Relay, on créé le tracking automatiquement.
+               $order_shipping_method    = $_order->get_shipping_methods();
+               $shipping_method          = reset( $order_shipping_method );
+               $shipping_method_id       = $shipping_method->get_method_id();
+               $shipping_method_instance = chrono_get_shipping_method_by_id( $shipping_method_id );
+
+               $shippingMethodAllow = array_keys( get_option( 'chronopost_shipping_methods' ) );
+
+               $shipment_datas = false;
+
+               if ( in_array( $shipping_method_id, $shippingMethodAllow ) ) {
+                       $esdParams = $header = $shipper = $customer = $recipient = $ref = $skybill = $skybillParams = $password = array();
+
+                       // parcels
+                       $parcels_number = chrono_get_parcels_number( $_order->get_id() );
+
+                       // Dimensions
+                       $parcels_dimensions = chrono_get_parcels_dimensions( $_order->get_id() );
+                       if ( $parcels_dimensions && is_array( $parcels_dimensions ) ) {
+                               // Check if within boundaries
+                               $check = chrono_check_packages_dimensions( $shipping_method_id, $parcels_dimensions );
+                               if ( $check !== true ) {
+                                       $this->admin_notice .= $check;
+                                       add_action( 'admin_notices', array( $this, 'print_admin_notice' ) );
+                                       return false;
+                               }
+                       } else {
+                               $parcels_dimensions = array();
+                               for ( $i = 1; $i <= $parcels_number; $i++ ) {
+                                       $parcels_dimensions[ $i ] = array(
+                                               'weight' => Chronopost_Package::getTotalWeight( $_order->get_items() ),
+                                               'length' => 1,
+                                               'height' => 1,
+                                               'width'  => 1,
+                                       );
+                               }
+                       }
+
+                       //header parameters
+                       $contract = $shipping_method_instance->getContractInfos( $_order );
+                       $header   = array(
+                               'idEmit'        => 'WOO',
+                               'accountNumber' => $contract['number'],
+                               'subAccount'    => $contract['subaccount'],
+                       );
+
+                       //shipper parameters
+                       $shipperMobilePhone = $this->checkMobileNumber( chrono_get_option( 'mobile', 'shipper' ) );
+                       $shipper            = array(
+                               'shipperAdress1'     => chrono_get_option( 'address', 'shipper' ),
+                               'shipperAdress2'     => chrono_get_option( 'address2', 'shipper' ),
+                               'shipperCity'        => chrono_get_option( 'city', 'shipper' ),
+                               'shipperCivility'    => chrono_get_option( 'civility', 'shipper' ),
+                               'shipperContactName' => chrono_get_option( 'contactname', 'shipper' ),
+                               'shipperCountry'     => chrono_get_option( 'country', 'shipper' ),
+                               'shipperEmail'       => chrono_get_option( 'email', 'shipper' ),
+                               'shipperMobilePhone' => $shipperMobilePhone,
+                               'shipperName'        => chrono_get_option( 'name', 'shipper' ),
+                               'shipperName2'       => chrono_get_option( 'name2', 'shipper' ),
+                               'shipperPhone'       => chrono_get_option( 'phone', 'shipper' ),
+                               'shipperPreAlert'    => '',
+                               'shipperZipCode'     => chrono_get_option( 'zipcode', 'shipper' ),
+                       );
+
+                       //customer parameters
+                       $customerMobilePhone = $this->checkMobileNumber( chrono_get_option( 'mobile', 'customer' ) );
+                       $customer            = array(
+                               'customerAdress1'     => chrono_get_option( 'address', 'customer' ),
+                               'customerAdress2'     => chrono_get_option( 'address2', 'customer' ),
+                               'customerCity'        => chrono_get_option( 'city', 'customer' ),
+                               'customerCivility'    => chrono_get_option( 'civility', 'customer' ),
+                               'customerContactName' => chrono_get_option( 'contactname', 'customer' ),
+                               'customerCountry'     => chrono_get_option( 'country', 'customer' ),
+                               'customerEmail'       => chrono_get_option( 'email', 'customer' ),
+                               'customerMobilePhone' => $customerMobilePhone,
+                               'customerName'        => chrono_get_option( 'name', 'customer' ),
+                               'customerName2'       => chrono_get_option( 'name2', 'customer' ),
+                               'customerPhone'       => chrono_get_option( 'phone', 'customer' ),
+                               'customerPreAlert'    => '',
+                               'customerZipCode'     => chrono_get_option( 'zipcode', 'customer' ),
+                       );
+
+                       //recipient parameters
+                       //$recipient_address = $_order->get_shipping_street();
+
+                       $customer_obj = new WC_Customer( $_order->get_customer_id() );
+
+                       $customer_email       = $_order->get_billing_email() ? $_order->get_billing_email() : $customer_obj->get_email();
+                       $recipientMobilePhone = $this->checkMobileNumber( $_order->get_billing_phone() ); //no shipping mobile so we use the billing phone
+
+                       $recipientName  = $this->getFilledValue( $_order->get_shipping_company() ); //RelayPoint Name if chronorelais or Companyname if chronopost and
+                       $recipientName2 = $this->getFilledValue( $_order->get_shipping_first_name() . ' ' . $_order->get_shipping_last_name() );
+
+                       //remove any alphabets in phone number
+                       // billing phone (there's nos shipping phone in woocommerce!)
+                       $recipientPhone = trim( preg_replace( '/[^0-9\.\-]/', ' ', $_order->get_billing_phone() ) );
+                       $recipient      = array(
+                               'recipientAdress1'     => substr( $this->getFilledValue( $_order->get_shipping_address_1() ), 0, 38 ),
+                               'recipientAdress2'     => substr( $this->getFilledValue( $_order->get_shipping_address_2() ), 0, 38 ),
+                               'recipientCity'        => $this->getFilledValue( $_order->get_shipping_city() ),
+                               'recipientContactName' => $recipientName2,
+                               'recipientCountry'     => $this->getFilledValue( $_order->get_shipping_country() ),
+                               'recipientEmail'       => $customer_email,
+                               'recipientMobilePhone' => $recipientMobilePhone,
+                               'recipientName'        => $recipientName,
+                               'recipientName2'       => $recipientName2,
+                               'recipientPhone'       => $recipientPhone,
+                               'recipientPreAlert'    => '',
+                               'recipientZipCode'     => $this->getFilledValue( $_order->get_shipping_postcode() ),
+                       );
+
+                       //ref parameters
+                       $recipientRef = false;
+                       if ( $pickup_relay_datas = get_post_meta( $_order->get_id(), '_shipping_method_chronorelais', true ) ) {
+                               $recipientRef = $pickup_relay_datas['id'];
+                       }
+
+                       if ( ! $recipientRef ) {
+                               $recipientRef = $_order->get_customer_id();
+                       }
+
+                       $shipperRef = $_order->get_id();
+
+
+                       for ( $i = 1; $i <= $parcels_number; $i++ ) {
+                               array_push(
+                                       $ref, array(
+                                               'recipientRef' => $recipientRef,
+                                               'shipperRef'   => $shipperRef,
+                                       )
+                               );
+                       }
+
+                       //skybill parameters
+                               // Livraison Samedi (Delivery Saturday) field
+                               $SaturdayShipping    = 0; //default value for the saturday shipping
+                               $sat_shipMethodAllow = array_diff( $shippingMethodAllow, array( 'chronorelaiseurope', 'chronoexpress', 'chronoclassic' ) );
+
+
+                       if ( in_array( $shipping_method_id, $sat_shipMethodAllow ) ) {
+                           $pm_saturday_shipping = get_post_meta( $_order->get_id(), '_ship_on_saturday', true );
+                               $_force_deliver_on_saturday = $pm_saturday_shipping == 'yes' ? true : false;
+                               $_deliver_on_saturday       = chrono_get_method_settings( $shipping_method_id, 'deliver_on_saturday' ) == 'yes' ? 1 : 0;
+
+                               $is_sending_day = chrono_is_sending_day();
+
+                               if ( $pm_saturday_shipping == 'no') {
+                                   $SaturdayShipping = 0;
+                }
+                               else if (
+                                               $_force_deliver_on_saturday ||
+                                               ( $_deliver_on_saturday && $is_sending_day )
+                                       ) {
+                                       $SaturdayShipping = 6;
+                               } elseif ( ! $_deliver_on_saturday && $is_sending_day ) {
+                                       $SaturdayShipping = 1;
+                               }
+                       }
+
+                       $weight = 0;
+                       $weight = Chronopost_Package::getTotalWeight( $_order->get_items() );
+
+                       if ( chrono_get_weight_unit() == 'g' ) {
+                               $weight = $weight / 1000; // conversion g => kg
+                       }
+
+                       // si chronorelaiseurope : service : 337 si poids < 3kg ou 338 si > 3kg
+                       if ( $shipping_method_id == 'chronorelaiseurope' ) {
+                               $weight <= 3 ? $SaturdayShipping = '337' : $SaturdayShipping = '338';
+                       }
+
+                       $maxAmount = 20000;
+
+                       $totalAdValorem = 0;
+
+                       $adValoremAmount  = (float) chrono_get_option( 'min_amount', 'insurance' );
+                       $adValoremEnabled = chrono_get_option( 'enable', 'insurance' ) == 'yes' ? true : false;
+
+                       $order_insurance_enable = get_post_meta( $_order->get_id(), '_insurance_enable', true );
+                       $insurance_amount       = (float) get_post_meta( $_order->get_id(), '_insurance_amount', true );
+
+                       if ( $order_insurance_enable != '' ) {
+                               $adValoremEnabled = $order_insurance_enable == 'no' ? false : true;
+                       }
+
+            $totalAdValorem = (float) $_order->get_total() - $_order->get_shipping_total();
+
+                       $totalAdValorem = $insurance_amount > 0 ? $insurance_amount : $totalAdValorem;
+
+                       if ( $adValoremEnabled ) {
+                               $totalAdValorem = min( $totalAdValorem, $maxAmount );
+                if ( $totalAdValorem < $adValoremAmount ) {
+                                       $totalAdValorem = 0;
+                               }
+                       } else {
+                $totalAdValorem = 0;
+            }
+
+                       $totalAdValorem = (int) $totalAdValorem * 100;
+
+            if ( $weight > 30 ) {
+                               $weight = 0; // On met le poids à 0 car les colis sont pesé sur place
+                       }
+
+                       if ( ! $parcels_dimensions ) {
+                               $parcel_weight      = $weight;
+                               $parcel_height      = $parcel_length = $parcel_width = 1;
+                               $parcels_dimensions = array(
+                                       1 => array(
+                                               'weight' => $parcel_weight,
+                                               'height' => $parcel_height,
+                                               'length' => $parcel_length,
+                                               'width'  => $parcel_width,
+                                       ),
+                               );
+                       }
+
+                       $skybill = array();
+                       for ( $i = 1; $i <= $parcels_number; $i++ ) {
+                               $parcel_weight = $weight;
+                               $parcel_height = $parcel_length = $parcel_width = 1;
+                               if ( $parcels_dimensions ) {
+                                       $parcel_weight = $parcels_dimensions[ $i ]['weight'];
+                                       $parcel_height = $parcels_dimensions[ $i ]['height'];
+                                       $parcel_length = $parcels_dimensions[ $i ]['length'];
+                                       $parcel_width  = $parcels_dimensions[ $i ]['width'];
+                               }
+                               array_push(
+                                       $skybill, array(
+                                               'codCurrency'     => 'EUR',
+                                               'codValue'        => '',
+                                               'content1'        => '',
+                                               'content2'        => '',
+                                               'content3'        => '',
+                                               'content4'        => '',
+                                               'content5'        => '',
+                                               'customsCurrency' => 'EUR',
+                                               'customsValue'    => '',
+                                               'evtCode'         => 'DC',
+                                               'insuredCurrency' => 'EUR',
+                                               'insuredValue'    => $totalAdValorem,
+                                               'objectType'      => 'MAR',
+                                               'productCode'     => chrono_get_product_code_by_id( $shipping_method_id ),
+                                               'service'         => $SaturdayShipping,
+                                               'shipDate'        => date( 'c' ),
+                                               'shipHour'        => date( 'H' ),
+                                               'skybillRank'     => $i,
+                                               'bulkNumber'      => $parcels_number,
+                                               'weight'          => $parcel_weight,
+                                               'weightUnit'      => 'KGM',
+                                               'height'          => $parcel_height,
+                                               'length'          => $parcel_length,
+                                               'width'           => $parcel_width,
+                                       )
+                               );
+                       }
+
+                       $skybillParams = array(
+                               'mode' => chrono_get_option( 'mode', 'skybill' ),
+                       );
+
+                       $expeditionArray = array(
+                               'headerValue'        => $header,
+                               'shipperValue'       => $shipper,
+                               'customerValue'      => $customer,
+                               'recipientValue'     => $recipient,
+                               'refValue'           => $ref,
+                               'skybillValue'       => $skybill,
+                               'skybillParamsValue' => $skybillParams,
+                               'password'           => $contract['password'],
+                               'numberOfParcel'     => $parcels_number,
+                       );
+
+                       // si chronopostprecise : ajout parametres supplementaires
+                       if ( $shipping_method_id == 'chronoprecise' ) {
+                               $chronopostprecise_creneaux_info = get_post_meta( $_order->get_id(), '_shipping_method_chronoprecise' );
+                               if ( is_array( $chronopostprecise_creneaux_info ) ) {
+                                       $chronopostprecise_creneaux_info = array_shift( $chronopostprecise_creneaux_info );
+                               }
+
+                               $_dateRdvStart = new DateTime( $chronopostprecise_creneaux_info['deliveryDate'] );
+                               $_dateRdvStart->setTime( $chronopostprecise_creneaux_info['startHour'], $chronopostprecise_creneaux_info['startMinutes'] );
+
+                               $_dateRdvEnd = new DateTime( $chronopostprecise_creneaux_info['deliveryDate'] );
+                               $_dateRdvEnd->setTime( $chronopostprecise_creneaux_info['endHour'], $chronopostprecise_creneaux_info['endMinutes'] );
+
+                               $scheduledValue                    = array(
+                                       'appointmentValue' => array(
+                                               'timeSlotStartDate'   => $_dateRdvStart->format( 'Y-m-d' ) . 'T' . $_dateRdvStart->format( 'H:i:s' ),
+                                               'timeSlotEndDate'     => $_dateRdvEnd->format( 'Y-m-d' ) . 'T' . $_dateRdvEnd->format( 'H:i:s' ),
+                                               'timeSlotTariffLevel' => $chronopostprecise_creneaux_info['tariffLevel'],
+                                       ),
+                               );
+                               $expeditionArray['scheduledValue'] = $scheduledValue;
+
+                               // modification productCode et service car dynamique pour ce mode de livraison
+
+                               foreach ( $expeditionArray['skybillValue'] as &$skybillValue ) {
+                                       $skybillValue['productCode'] = $chronopostprecise_creneaux_info['productCode'];
+                                       $skybillValue['service']     = $chronopostprecise_creneaux_info['serviceCode'];
+                                       if ( isset( $chronopostprecise_creneaux_info['asCode'] ) ) {
+                                               $skybillValue['as'] = $chronopostprecise_creneaux_info['asCode'];
+                                       }
+                               }
+                       }
+
+                       $_shippingServiceUrl = 'https://www.chronopost.fr/shipping-cxf/ShippingServiceWS?wsdl';
+
+                       $client = new SoapClient( $_shippingServiceUrl, array( 'trace' => true ) );
+
+                       $expedition = $client->shippingMultiParcelWithReservationV3( $expeditionArray );
+
+                       try {
+
+                               if ( ! $expedition->return->errorCode && $expedition->return->reservationNumber ) {
+                                       if ( isset( $expedition->return->resultParcelValue->skybillNumber ) ) {
+                                               $expedition->return->resultParcelValue = array( $expedition->return->resultParcelValue );
+                                       }
+
+                                       // Save chronopost shipment data in post metas
+                                       $shipment_datas = WC_Chronopost_Order::add_tracking_numbers( $_order, $expedition->return->resultParcelValue, $expedition->return->reservationNumber );
+                                       // Save dimensions
+                                       $shipment_datas = WC_Chronopost_Order::add_parcels_dimensions( $shipment_datas, $parcels_dimensions );
+                                       update_post_meta( $_order->get_id(), '_shipment_datas', $shipment_datas );
+                               } else {
+                                       switch ( $expedition->return->errorCode ) {
+                                               case 33:
+                                                       $shipment_datas = array( 'error' => 33 );
+                                                       break;
+                                               default:
+                                                       $shipment_datas      = array( 'error' => -1 );
+                                                       $this->admin_notice .= ' ' . __( 'Webservice error:', 'chronopost' ) . ' ' . $expedition->return->errorMessage;
+                                                       break;
+                                       }
+                                       add_action( 'admin_notices', array( $this, 'print_admin_notice' ) );
+                               }
+                       } catch ( SoapFault $fault ) {
+                               $this->admin_notice  = __( 'An error occured during the label creation. Please check the customer datas or your Chronopost settings.', 'chronopost' );
+                               $this->admin_notice .= ' ' . __( 'System error:', 'chronopost' ) . ' ' . $fault->getMessage();
+                               add_action( 'admin_notices', array( $this, 'print_admin_notice' ) );
+                       } catch ( Exception $fault ) {
+                               $this->admin_notice  = __( 'An error occured during the label creation. Please check the customer datas or your Chronopost settings.', 'chronopost' );
+                               $this->admin_notice .= ' ' . __( 'System error:', 'chronopost' ) . ' ' . $fault->getMessage();
+                               add_action( 'admin_notices', array( $this, 'print_admin_notice' ) );
+                       }
+               }
+
+               // Cleanup
+               delete_post_meta( $_order->get_id(), '_parcels_number' );
+               delete_post_meta( $_order->get_id(), '_parcels_dimensions' );
+
+               return $shipment_datas;
+       }
+
+       /**
+        * @param $reservation
+        */
+       public function getPDFSkybillByReservation( $reservation ) {
+               $client = new SoapClient(
+                       'https://www.chronopost.fr/shipping-cxf/ShippingServiceWS?wsdl',
+                       array( 'trace' => true )
+               );
+               try {
+                       $result = $client->getReservedSkybill(
+                               array(
+                                       'reservationNumber' => $reservation,
+                               )
+                       );
+                       if ( $result->return->errorCode === 0 ) {
+                               return $result->return;
+                       }
+               } catch ( Exception $e ) {
+                       return false;
+               }
+               return false;
+       }
+
+       public function getPointsRelaisByCp( $cp ) {
+               try {
+                       $client = new SoapClient(
+                               'http://wsshipping.chronopost.fr/soap.point.relais/services/ServiceRechercheBt?wsdl', array(
+                                       'trace'              => 0,
+                                       'connection_timeout' => 10,
+                               )
+                       );
+                       return $client->__call( 'rechercheBtParCodeproduitEtCodepostalEtDate', array( 0, $cp, 0 ) );
+               } catch ( Exception $e ) {
+                       return $this->getPointsRelaisByPudo( $cp );
+               }
+       }
+
+       /* get point relais by address */
+       public function getPointRelaisByAddress( $shippingMethodCode = 'chronorelais' ) {
+               if ( ! $shippingMethodCode ) {
+                       return false;
+               }
+
+               try {
+                       $pointRelaisProductCode = chrono_get_product_code_by_id( $shippingMethodCode );
+                       $pointRelaisWs          = 'https://www.chronopost.fr/recherchebt-ws-cxf/PointRelaisServiceWS?wsdl';
+
+                       // to store in db ?
+                       if ( $shippingMethodCode == 'chronorelaiseurope' ) {
+                               $pointRelaisWsMethod = 'recherchePointChronopostInter';
+                               $addAddressToWs      = 0;
+                               $maxPointChronopost  = apply_filters( 'chronopost_max_pickup_relay_' . $shippingMethodCode, 10 );
+                       } else {
+                               $pointRelaisWsMethod = 'recherchePointChronopost';
+                               $addAddressToWs      = 1;
+                               $maxPointChronopost  = apply_filters( 'chronopost_max_pickup_relay_' . $shippingMethodCode, 5 );
+                       }
+                       $maxDistanceSearch = chrono_get_method_settings( $shippingMethodCode, 'max_distance_search' );
+
+                       $pointRelaisService = 'T';
+
+                       $client = new SoapClient(
+                               $pointRelaisWs, array(
+                                       'trace'              => 0,
+                                       'connection_timeout' => 10,
+                               )
+                       );
+
+                       /* si dom => on ne met pas le code ISO mais un code spécifique, sinon le relai dom ne fonctionne pas */
+                       $countryDomCode = $this->getCountryDomCode();
+
+                       $countryId = WC()->customer->get_shipping_country();
+                       if ( isset( $countryDomCode[ $countryId ] ) ) {
+                               $countryId = $countryDomCode[ $countryId ];
+                       }
+
+                       $chronopost_product = chrono_get_shipping_method_by_id( $shippingMethodCode );
+                       $contract           = $chronopost_product->getContractInfos();
+                       $params             = array(
+                               'accountNumber'      => $contract['number'],
+                               'password'           => $contract['password'],
+                               'zipCode'            => $this->getFilledValue( WC()->customer->get_shipping_postcode() ),
+                               'city'               => $this->getFilledValue( WC()->customer->get_shipping_city() ),
+                               'countryCode'        => $this->getFilledValue( $countryId ),
+                               'type'               => 'P',
+                               'productCode'        => $pointRelaisProductCode,
+                               'service'            => $pointRelaisService,
+                               'weight'             => 2000,
+                               'shippingDate'       => date( 'd/m/Y' ),
+                               'maxPointChronopost' => $maxPointChronopost,
+                               'maxDistanceSearch'  => $maxDistanceSearch,
+                               'holidayTolerant'    => 1,
+                       );
+                       if ( $addAddressToWs ) {
+                               $params['address'] = $this->getFilledValue( WC()->customer->get_shipping_address() );
+                       }
+                       $webservbt = $client->$pointRelaisWsMethod( $params );
+
+                       /* format $webservbt pour avoir le meme format que lors de l'appel du WS par code postal */
+                       if ( $webservbt->return->errorCode == 0 && isset( $webservbt->return->listePointRelais ) ) {
+                               /*
+                                * Format entrée
+                                *
+                                * accesPersonneMobiliteReduite
+                                       actif
+                                       adresse1
+                                       adresse2
+                                       adresse3
+                                       codePays
+                                       codePostal
+                                       coordGeolocalisationLatitude
+                                       coordGeolocalisationLongitude
+                                       distanceEnMetre
+                                       identifiant
+                                       indiceDeLocalisation
+                                       listeHoraireOuverture
+                                       localite
+                                       nom
+                                       poidsMaxi
+                                       typeDePoint
+                                       urlGoogleMaps
+                                *
+                                * Format sortie
+                                * adresse1
+                                       adresse2
+                                       adresse3
+                                       codePostal
+                                       dateArriveColis
+                                       horairesOuvertureDimanche ("10:00-12:30 14:30-19:00")
+                                       horairesOuvertureJeudi
+                                       horairesOuvertureLundi
+                                       horairesOuvertureMardi
+                                       horairesOuvertureMercredi
+                                       horairesOuvertureSamedi
+                                       horairesOuvertureVendredi
+                                       identifiantChronopostPointA2PAS
+                                       localite
+                                       nomEnseigne
+                                *
+                                *
+                                *
+                                * 2013-02-19T10:42:40.196Z
+                                *
+                                */
+                               $listePr = array();
+                               if ( isset( $webservbt->return->listePointRelais ) ) {
+                                       $listePr = $webservbt->return->listePointRelais;
+                                       if ( count( $webservbt->return->listePointRelais ) == 1 ) {
+                                               $listePr = array( $listePr );
+                                       }
+                               }
+                               $return = array();
+                               foreach ( $listePr as $pr ) {
+                                       $newPr                                  = (object) array();
+                                       $newPr->adresse1                        = $pr->adresse1;
+                                       $newPr->adresse2                        = property_exists( $pr, 'adresse2' ) ? $pr->adresse2 : '';
+                                       $newPr->adresse3                        = property_exists( $pr, 'adresse3' ) ? $pr->adresse3 : '';
+                                       $newPr->codePostal                      = $pr->codePostal;
+                                       $newPr->identifiantChronopostPointA2PAS = $pr->identifiant;
+                                       $newPr->localite                        = $pr->localite;
+                                       $newPr->nomEnseigne                     = $pr->nom;
+                                       $time                                   = new DateTime;
+                                       $newPr->dateArriveColis                 = $time->format( DateTime::ATOM );
+                                       $newPr->horairesOuvertureLundi          = $newPr->horairesOuvertureMardi = $newPr->horairesOuvertureMercredi = $newPr->horairesOuvertureJeudi = $newPr->horairesOuvertureVendredi = $newPr->horairesOuvertureSamedi = $newPr->horairesOuvertureDimanche = '';
+                                       foreach ( $pr->listeHoraireOuverture as $horaire ) {
+                                               switch ( $horaire->jour ) {
+                                                       case '1':
+                                                               $newPr->horairesOuvertureLundi = $horaire->horairesAsString;
+                                                               break;
+                                                       case '2':
+                                                               $newPr->horairesOuvertureMardi = $horaire->horairesAsString;
+                                                               break;
+                                                       case '3':
+                                                               $newPr->horairesOuvertureMercredi = $horaire->horairesAsString;
+                                                               break;
+                                                       case '4':
+                                                               $newPr->horairesOuvertureJeudi = $horaire->horairesAsString;
+                                                               break;
+                                                       case '5':
+                                                               $newPr->horairesOuvertureVendredi = $horaire->horairesAsString;
+                                                               break;
+                                                       case '6':
+                                                               $newPr->horairesOuvertureSamedi = $horaire->horairesAsString;
+                                                               break;
+                                                       case '7':
+                                                               if ( ! empty( $horaire->horairesAsString ) ) {
+                                                                       $newPr->horairesOuvertureDimanche = $horaire->horairesAsString;
+                                                               }
+                                                               break;
+                                                       default:
+                                                               break;
+                                               }
+                                       }
+                                       if ( empty( $newPr->horairesOuvertureLundi ) ) {
+                                               $newPr->horairesOuvertureLundi = '00:00-00:00 00:00-00:00';
+                                       }
+                                       if ( empty( $newPr->horairesOuvertureMardi ) ) {
+                                               $newPr->horairesOuvertureMardi = '00:00-00:00 00:00-00:00';
+                                       }
+                                       if ( empty( $newPr->horairesOuvertureMercredi ) ) {
+                                               $newPr->horairesOuvertureMercredi = '00:00-00:00 00:00-00:00';
+                                       }
+                                       if ( empty( $newPr->horairesOuvertureJeudi ) ) {
+                                               $newPr->horairesOuvertureJeudi = '00:00-00:00 00:00-00:00';
+                                       }
+                                       if ( empty( $newPr->horairesOuvertureVendredi ) ) {
+                                               $newPr->horairesOuvertureVendredi = '00:00-00:00 00:00-00:00';
+                                       }
+                                       if ( empty( $newPr->horairesOuvertureSamedi ) ) {
+                                               $newPr->horairesOuvertureSamedi = '00:00-00:00 00:00-00:00';
+                                       }
+                                       if ( empty( $newPr->horairesOuvertureDimanche ) ) {
+                                               $newPr->horairesOuvertureDimanche = '00:00-00:00 00:00-00:00';
+                                       }
+
+                                       $return[] = $newPr;
+                               }
+                               return $return;
+                       }
+               } catch ( Exception $e ) {
+                       $address = array(
+                               'address'  => $this->getFilledValue( WC()->customer->get_shipping_address() ),
+                               'postcode' => $this->getFilledValue( WC()->customer->get_shipping_postcode() ),
+                               'city'     => $this->getFilledValue( WC()->customer->get_shipping_city() ),
+                               'country'  => $this->getFilledValue( $countryId ),
+                       );
+                       return $this->getPointsRelaisByPudo( $address );
+               }
+       }
+
+       protected function getCountryDomCode() {
+               return array(
+                       'RE' => 'REU',
+                       'MQ' => 'MTQ',
+                       'GP' => 'GLP',
+                       'MX' => 'MYT',
+                       'GF' => 'GUF',
+               );
+       }
+
+       public function getDetailRelaisPoint( $btcode ) {
+               try {
+                       $shipping_method = new WC_Chronorelais();
+                       $contract        = $shipping_method->getContractInfos();
+                       $params          = array(
+                               'accountNumber' => $contract['number'],
+                               'password'      => $contract['password'],
+                               'identifiant'   => $btcode,
+                       );
+
+                       $client    = new SoapClient( 'https://www.chronopost.fr/recherchebt-ws-cxf/PointRelaisServiceWS?wsdl' );
+                       $webservbt = $client->rechercheDetailPointChronopost( $params );
+
+                       if ( $webservbt->return->errorCode == 0 ) {
+                               return $webservbt->return->listePointRelais;
+                       } else {
+                               return $this->getDetailRelaisPointByPudo( $btcode );
+                       }
+               } catch ( Exception $e ) {
+                       return $this->getDetailRelaisPointByPudo( $btcode );
+               }
+       }
+
+
+       /*
+        *
+        * WS de secours
+        */
+
+       public function getDetailRelaisPointByPudo( $btcode ) {
+               $params = array(
+                       'carrier' => 'CHR',
+                       'key'     => '75f6fe195dc88ceecbc0f8a2f70a8f3a',
+                       'pudo_id' => $btcode,
+               );
+
+               try {
+                       $client    = new SoapClient(
+                               'http://mypudo.pickup-services.com/mypudo/mypudo.asmx?wsdl', array(
+                                       'trace'              => 0,
+                                       'connection_timeout' => 10,
+                               )
+                       );
+                       $webservbt = $client->GetPudoDetails( $params );
+                       $webservbt = json_decode( json_encode( (object) simplexml_load_string( $webservbt->GetPudoDetailsResult->any ) ), 1 );
+                       if ( ! isset( $webservbt['ERROR'] ) ) {
+                               $pr = $webservbt['PUDO_ITEMS']['PUDO_ITEM'];
+                               if ( $pr && $pr['@attributes']['active'] == 'true' ) {
+                                       $newPr                                  = (object) array();
+                                       $newPr->adresse1                        = $pr['ADDRESS1'];
+                                       $newPr->adresse2                        = is_array( $pr['ADDRESS2'] ) ? implode( ' ', $pr['ADDRESS2'] ) : $pr['ADDRESS2'];
+                                       $newPr->adresse3                        = is_array( $pr['ADDRESS3'] ) ? implode( ' ', $pr['ADDRESS3'] ) : $pr['ADDRESS3'];
+                                       $newPr->codePostal                      = $pr['ZIPCODE'];
+                                       $newPr->identifiantChronopostPointA2PAS = $pr['PUDO_ID'];
+                                       $newPr->localite                        = $pr['CITY'];
+                                       $newPr->nomEnseigne                     = $pr['NAME'];
+                                       $time                                   = new DateTime;
+                                       $newPr->dateArriveColis                 = $time->format( DateTime::ATOM );
+                                       $newPr->horairesOuvertureLundi          = $newPr->horairesOuvertureMardi = $newPr->horairesOuvertureMercredi = $newPr->horairesOuvertureJeudi = $newPr->horairesOuvertureVendredi = $newPr->horairesOuvertureSamedi = $newPr->horairesOuvertureDimanche = '';
+
+                                       if ( isset( $pr['OPENING_HOURS_ITEMS']['OPENING_HOURS_ITEM'] ) ) {
+                                               $listeHoraires = $pr['OPENING_HOURS_ITEMS']['OPENING_HOURS_ITEM'];
+                                               foreach ( $listeHoraires as $horaire ) {
+                                                       switch ( $horaire['DAY_ID'] ) {
+                                                               case '1':
+                                                                       if ( ! empty( $newPr->horairesOuvertureLundi ) ) {
+                                                                               $newPr->horairesOuvertureLundi .= ' ';
+                                                                       }
+                                                                       $newPr->horairesOuvertureLundi .= $horaire['START_TM'] . '-' . $horaire['END_TM'];
+                                                                       break;
+                                                               case '2':
+                                                                       if ( ! empty( $newPr->horairesOuvertureMardi ) ) {
+                                                                               $newPr->horairesOuvertureMardi .= ' ';
+                                                                       }
+                                                                       $newPr->horairesOuvertureMardi .= $horaire['START_TM'] . '-' . $horaire['END_TM'];
+                                                                       break;
+                                                               case '3':
+                                                                       if ( ! empty( $newPr->horairesOuvertureMercredi ) ) {
+                                                                               $newPr->horairesOuvertureMercredi .= ' ';
+                                                                       }
+                                                                       $newPr->horairesOuvertureMercredi .= $horaire['START_TM'] . '-' . $horaire['END_TM'];
+                                                                       break;
+                                                               case '4':
+                                                                       if ( ! empty( $newPr->horairesOuvertureJeudi ) ) {
+                                                                               $newPr->horairesOuvertureJeudi .= ' ';
+                                                                       }
+                                                                       $newPr->horairesOuvertureJeudi .= $horaire['START_TM'] . '-' . $horaire['END_TM'];
+                                                                       break;
+                                                               case '5':
+                                                                       if ( ! empty( $newPr->horairesOuvertureVendredi ) ) {
+                                                                               $newPr->horairesOuvertureVendredi .= ' ';
+                                                                       }
+                                                                       $newPr->horairesOuvertureVendredi .= $horaire['START_TM'] . '-' . $horaire['END_TM'];
+                                                                       break;
+                                                               case '6':
+                                                                       if ( ! empty( $newPr->horairesOuvertureSamedi ) ) {
+                                                                               $newPr->horairesOuvertureSamedi .= ' ';
+                                                                       }
+                                                                       $newPr->horairesOuvertureSamedi .= $horaire['START_TM'] . '-' . $horaire['END_TM'];
+                                                                       break;
+                                                               case '7':
+                                                                       if ( ! empty( $newPr->horairesOuvertureDimanche ) ) {
+                                                                               $newPr->horairesOuvertureDimanche .= ' ';
+                                                                       }
+                                                                       $newPr->horairesOuvertureDimanche .= $horaire['START_TM'] . '-' . $horaire['END_TM'];
+                                                                       break;
+                                                               default:
+                                                                       break;
+                                                       }
+                                               }
+                                       }
+                                       if ( empty( $newPr->horairesOuvertureLundi ) ) {
+                                               $newPr->horairesOuvertureLundi = '00:00-00:00 00:00-00:00';
+                                       }
+                                       if ( empty( $newPr->horairesOuvertureMardi ) ) {
+                                               $newPr->horairesOuvertureMardi = '00:00-00:00 00:00-00:00';
+                                       }
+                                       if ( empty( $newPr->horairesOuvertureMercredi ) ) {
+                                               $newPr->horairesOuvertureMercredi = '00:00-00:00 00:00-00:00';
+                                       }
+                                       if ( empty( $newPr->horairesOuvertureJeudi ) ) {
+                                               $newPr->horairesOuvertureJeudi = '00:00-00:00 00:00-00:00';
+                                       }
+                                       if ( empty( $newPr->horairesOuvertureVendredi ) ) {
+                                               $newPr->horairesOuvertureVendredi = '00:00-00:00 00:00-00:00';
+                                       }
+                                       if ( empty( $newPr->horairesOuvertureSamedi ) ) {
+                                               $newPr->horairesOuvertureSamedi = '00:00-00:00 00:00-00:00';
+                                       }
+                                       if ( empty( $newPr->horairesOuvertureDimanche ) ) {
+                                               $newPr->horairesOuvertureDimanche = '00:00-00:00 00:00-00:00';
+                                       }
+
+                                       return $newPr;
+                               }
+                       }
+               } catch ( Exception $e ) {
+                       return false;
+               }
+               return false;
+       }
+
+       public function getPointsRelaisByPudo( $cp = '', $address = array() ) {
+               $params = array(
+                       'carrier'             => 'CHR',
+                       'key'                 => '75f6fe195dc88ceecbc0f8a2f70a8f3a',
+                       'address'             => array_key_exists( 'address', $address ) ? $this->getFilledValue( $address['address'] ) : '',
+                       'zipCode'             => array_key_exists( 'postcode', $address ) ? $this->getFilledValue( $address['postcode'] ) : $cp,
+                       'city'                => array_key_exists( 'city', $address ) ? $this->getFilledValue( $address['city'] ) : 'Lille',
+                       'countrycode'         => array_key_exists( 'country', $address ) ? $this->getFilledValue( $address['country'] ) : '',
+                       'requestID'           => '1',
+                       'date_from'           => date( 'd/m/Y' ),
+                       'max_pudo_number'     => 5,
+                       'max_distance_search' => 10,
+                       'weight'              => 1,
+                       'category'            => '',
+                       'holiday_tolerant'    => 1,
+               );
+               try {
+                       $client    = new SoapClient(
+                               'http://mypudo.pickup-services.com/mypudo/mypudo.asmx?wsdl', array(
+                                       'trace'              => 0,
+                                       'connection_timeout' => 10,
+                               )
+                       );
+                       $webservbt = $client->GetPudoList( $params );
+                       $webservbt = json_decode( json_encode( (object) simplexml_load_string( $webservbt->GetPudoListResult->any ) ), 1 );
+                       if ( ! isset( $webservbt['ERROR'] ) ) {
+                               $return = array();
+
+                               $listePr = $webservbt['PUDO_ITEMS']['PUDO_ITEM'];
+                               if ( $listePr ) {
+                                       foreach ( $listePr as $pr ) {
+                                               if ( $pr['@attributes']['active'] == 'true' ) {
+                                                       $newPr                                  = (object) array();
+                                                       $newPr->adresse1                        = $pr['ADDRESS1'];
+                                                       $newPr->adresse2                        = is_array( $pr['ADDRESS2'] ) ? implode( ' ', $pr['ADDRESS2'] ) : $pr['ADDRESS2'];
+                                                       $newPr->adresse3                        = is_array( $pr['ADDRESS3'] ) ? implode( ' ', $pr['ADDRESS3'] ) : $pr['ADDRESS3'];
+                                                       $newPr->codePostal                      = $pr['ZIPCODE'];
+                                                       $newPr->identifiantChronopostPointA2PAS = $pr['PUDO_ID'];
+                                                       $newPr->localite                        = $pr['CITY'];
+                                                       $newPr->nomEnseigne                     = $pr['NAME'];
+                                                       $time                                   = new DateTime;
+                                                       $newPr->dateArriveColis                 = $time->format( DateTime::ATOM );
+                                                       $newPr->horairesOuvertureLundi          = $newPr->horairesOuvertureMardi = $newPr->horairesOuvertureMercredi = $newPr->horairesOuvertureJeudi = $newPr->horairesOuvertureVendredi = $newPr->horairesOuvertureSamedi = $newPr->horairesOuvertureDimanche = '';
+
+                                                       if ( isset( $pr['OPENING_HOURS_ITEMS']['OPENING_HOURS_ITEM'] ) ) {
+                                                               $listeHoraires = $pr['OPENING_HOURS_ITEMS']['OPENING_HOURS_ITEM'];
+                                                               foreach ( $listeHoraires as $horaire ) {
+                                                                       switch ( $horaire['DAY_ID'] ) {
+                                                                               case '1':
+                                                                                       if ( ! empty( $newPr->horairesOuvertureLundi ) ) {
+                                                                                               $newPr->horairesOuvertureLundi .= ' ';
+                                                                                       }
+                                                                                       $newPr->horairesOuvertureLundi .= $horaire['START_TM'] . '-' . $horaire['END_TM'];
+                                                                                       break;
+                                                                               case '2':
+                                                                                       if ( ! empty( $newPr->horairesOuvertureMardi ) ) {
+                                                                                               $newPr->horairesOuvertureMardi .= ' ';
+                                                                                       }
+                                                                                       $newPr->horairesOuvertureMardi .= $horaire['START_TM'] . '-' . $horaire['END_TM'];
+                                                                                       break;
+                                                                               case '3':
+                                                                                       if ( ! empty( $newPr->horairesOuvertureMercredi ) ) {
+                                                                                               $newPr->horairesOuvertureMercredi .= ' ';
+                                                                                       }
+                                                                                       $newPr->horairesOuvertureMercredi .= $horaire['START_TM'] . '-' . $horaire['END_TM'];
+                                                                                       break;
+                                                                               case '4':
+                                                                                       if ( ! empty( $newPr->horairesOuvertureJeudi ) ) {
+                                                                                               $newPr->horairesOuvertureJeudi .= ' ';
+                                                                                       }
+                                                                                       $newPr->horairesOuvertureJeudi .= $horaire['START_TM'] . '-' . $horaire['END_TM'];
+                                                                                       break;
+                                                                               case '5':
+                                                                                       if ( ! empty( $newPr->horairesOuvertureVendredi ) ) {
+                                                                                               $newPr->horairesOuvertureVendredi .= ' ';
+                                                                                       }
+                                                                                       $newPr->horairesOuvertureVendredi .= $horaire['START_TM'] . '-' . $horaire['END_TM'];
+                                                                                       break;
+                                                                               case '6':
+                                                                                       if ( ! empty( $newPr->horairesOuvertureSamedi ) ) {
+                                                                                               $newPr->horairesOuvertureSamedi .= ' ';
+                                                                                       }
+                                                                                       $newPr->horairesOuvertureSamedi .= $horaire['START_TM'] . '-' . $horaire['END_TM'];
+                                                                                       break;
+                                                                               case '7':
+                                                                                       if ( ! empty( $newPr->horairesOuvertureDimanche ) ) {
+                                                                                               $newPr->horairesOuvertureDimanche .= ' ';
+                                                                                       }
+                                                                                       $newPr->horairesOuvertureDimanche .= $horaire['START_TM'] . '-' . $horaire['END_TM'];
+                                                                                       break;
+                                                                       }
+                                                               }
+                                                       }
+                                                       if ( empty( $newPr->horairesOuvertureLundi ) ) {
+                                                               $newPr->horairesOuvertureLundi = '00:00-00:00 00:00-00:00';
+                                                       }
+                                                       if ( empty( $newPr->horairesOuvertureMardi ) ) {
+                                                               $newPr->horairesOuvertureMardi = '00:00-00:00 00:00-00:00';
+                                                       }
+                                                       if ( empty( $newPr->horairesOuvertureMercredi ) ) {
+                                                               $newPr->horairesOuvertureMercredi = '00:00-00:00 00:00-00:00';
+                                                       }
+                                                       if ( empty( $newPr->horairesOuvertureJeudi ) ) {
+                                                               $newPr->horairesOuvertureJeudi = '00:00-00:00 00:00-00:00';
+                                                       }
+                                                       if ( empty( $newPr->horairesOuvertureVendredi ) ) {
+                                                               $newPr->horairesOuvertureVendredi = '00:00-00:00 00:00-00:00';
+                                                       }
+                                                       if ( empty( $newPr->horairesOuvertureSamedi ) ) {
+                                                               $newPr->horairesOuvertureSamedi = '00:00-00:00 00:00-00:00';
+                                                       }
+                                                       if ( empty( $newPr->horairesOuvertureDimanche ) ) {
+                                                               $newPr->horairesOuvertureDimanche = '00:00-00:00 00:00-00:00';
+                                                       }
+
+                                                       $return[] = $newPr;
+                                               }
+                                       }
+                                       return $return;
+                               }
+                       }
+               } catch ( Exception $e ) {
+                       return false;
+               }
+               return false;
+       }
+
+       public function getQuickcost( $quickCost, $quickcost_url = '' ) {
+               if ( ! $quickcost_url ) {
+                       $quickcost_url = 'https://www.chronopost.fr/quickcost-cxf/QuickcostServiceWS?wsdl';
+               }
+               try {
+                       $client    = new SoapClient( $quickcost_url );
+                       $webservbt = $client->quickCost( $quickCost );
+
+                       return $webservbt->return;
+               } catch ( Exception $e ) {
+                       return false;
+               }
+       }
+
+       public function checkLogin( $quickCost, $quickcost_url = '' ) {
+               return $this->calculateProducts( $quickCost, $quickcost_url );
+       }
+
+       public function calculateProducts( $quickCost, $quickcost_url = '' ) {
+               if ( ! $quickcost_url ) {
+                       $quickcost_url = 'https://www.chronopost.fr/quickcost-cxf/QuickcostServiceWS?wsdl';
+               }
+               try {
+                       $client    = new SoapClient( $quickcost_url );
+                       $webservbt = $client->calculateProducts( $quickCost );
+                       return $webservbt;
+               } catch ( Exception $e ) {
+                       return false;
+               }
+       }
+
+       /**
+        * Return true si la méthode de livraison fait partie du contrat
+        *
+        * @param null|WC_Chronopost_Product  $chronopost_product
+        * @param array $package
+        *
+        * @return bool
+        */
+       public function getMethodIsAllowed( $chronopost_product = null, $package = array() ) {
+               $code   = $chronopost_product->product_code;
+               $weight = 0;
+               try {
+                       $safe_package           = $package;
+                       $stored_allowed_methods = false;
+
+                       if ( WC()->session ) {
+                               $stored_allowed_methods = WC()->session->get( 'chrono_allowed_methods' );
+                               // Remove data objects so hashes are consistent
+                               foreach ( $safe_package['contents'] as $item_id => $item ) {
+                                       unset( $safe_package['contents'][ $item_id ]['data'] );
+                               }
+                               unset( $safe_package['rates'] );
+                               $safe_package_hash = 'wc_chrono_allowed_methods_' . md5( json_encode( $safe_package ) . WC_Cache_Helper::get_transient_version( 'shipping' ) );
+                               $weight            = Chronopost_Package::getTotalWeight( $package['contents'] );
+                       }
+
+                       if ( is_array( $stored_allowed_methods ) && $safe_package_hash == $stored_allowed_methods['allowed_methods_hash'] ) {
+                               $this->methodsAllowed = $stored_allowed_methods['methods_allowed'];
+                       } else {
+                               $this->methodsAllowed = false;
+                       }
+
+                       if ( $this->methodsAllowed === false || ! in_array( $code, $this->methodsAllowed ) ) {
+                               $this->methodsAllowed = array();
+
+                               if ( $weight == 0 ) {
+                                       $weight = 0.1;
+                               }
+
+                               $contract = $chronopost_product->getContractInfos();
+                               $params   = array(
+                                       'accountNumber'  => $contract['number'],
+                                       'password'       => $contract['password'],
+                                       'depCountryCode' => chrono_get_option( 'country', 'shipper' ),
+                                       'depZipCode'     => chrono_get_option( 'zipcode', 'shipper' ),
+                                       'arrCountryCode' => $package['destination']['country'],
+                                       'arrZipCode'     => $package['destination']['postcode'],
+                                       'arrCity'        => $package['destination']['city'] ? $this->getFilledValue( $package['destination']['city'] ) : '-',
+                                       'type'           => 'M',
+                                       'weight'         => $weight,
+                               );
+
+                               $webservbt = $this->calculateProducts( $params );
+
+                               if ( $webservbt->return->errorCode == 0 && isset( $webservbt->return->productList ) ) {
+                                       if ( is_array( $webservbt->return->productList ) ) {
+                                               foreach ( $webservbt->return->productList as $product ) {
+                                                       $this->methodsAllowed[] = $product->productCode;
+                                               }
+                                       } else { /* cas ou il y a un seul résultat */
+                                               $product                = $webservbt->return->productList;
+                                               $this->methodsAllowed[] = $product->productCode;
+                                       }
+                               }
+                       }
+
+                       if ( WC()->session ) {
+                               // Store in session to avoid recalculation
+                               WC()->session->set(
+                                       'chrono_allowed_methods', array(
+                                               'allowed_methods_hash' => $safe_package_hash,
+                                               'methods_allowed'      => $this->methodsAllowed,
+                                       )
+                               );
+                       }
+                       if ( is_numeric( $code ) ) {
+                               $code = (int) $code;
+                       }
+                       if ( ! empty( $this->methodsAllowed ) && in_array( $code, $this->methodsAllowed ) ) {
+                               return true;
+                       }
+                       return false;
+               } catch ( Exception $e ) {
+                       return false;
+               }
+       }
+
+
+       public function getFilledValue( $value ) {
+               if ( $value ) {
+                       return $this->removeaccents( trim( $value ) );
+               } else {
+                       return '';
+               }
+       }
+
+       public function removeaccents( $string ) {
+               $stringToReturn = str_replace(
+                       array( 'à', 'á', 'â', 'ã', 'ä', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'À', 'Á', 'Â', 'Ã', 'Ä', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', '/', '\xa8' ),
+                       array( 'a', 'a', 'a', 'a', 'a', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'n', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', 'A', 'A', 'A', 'A', 'A', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'N', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', ' ', 'e' ),
+                       $string
+               );
+               // Remove all remaining other unknown characters
+               $stringToReturn = preg_replace( '/[^a-zA-Z0-9\-]/', ' ', $stringToReturn );
+               $stringToReturn = preg_replace( '/^[\-]+/', '', $stringToReturn );
+               $stringToReturn = preg_replace( '/[\-]+$/', '', $stringToReturn );
+               $stringToReturn = preg_replace( '/[\-]{2,}/', ' ', $stringToReturn );
+               return $stringToReturn;
+       }
+
+       public function getEtiquetteRetourUrl( $_order ) {
+               //On récupère les infos d'expédition
+
+               $order_shipping_method = $_order->get_shipping_methods();
+               $shipping_method       = reset( $order_shipping_method );
+               $_shippingMethod       = $shipping_method->get_method_id();
+
+               $expeditionArray = $this->getEtiquetteRetourParams( $_order, $_shippingMethod );
+
+               if ( $expeditionArray ) {
+                       $client = new SoapClient( 'https://www.chronopost.fr/shipping-cxf/ShippingServiceWS?wsdl', array( 'trace' => true ) );
+                       try {
+                               $webservbt = $client->shippingV3( $expeditionArray );
+
+                               if ( ! $webservbt->return->errorCode && $webservbt->return->skybill ) {
+                                       $this->admin_notice = __( 'The return label has been generated and has just been sent', 'chronopost' );
+                                       add_action( 'admin_notices', array( $this, 'print_admin_success' ) );
+                                       return $webservbt->return->skybill;
+                               } else {
+                                       $this->admin_notice = $webservbt->return->errorMessage;
+                                       add_action( 'admin_notices', array( $this, 'print_admin_notice' ) );
+                                       return false;
+                               }
+                       } catch ( SoapFault $fault ) {
+                               $this->admin_notice = $fault->faultstring;
+                               add_action( 'admin_notices', array( $this, 'print_admin_notice' ) );
+                               return false;
+                       }
+               }
+       }
+
+       protected function getEtiquetteRetourParams( $_order, $_shippingMethod ) {
+               if ( ! chrono_can_return_package( $_order->get_shipping_country() ) ) {
+                       $this->admin_notice = sprintf( __( 'Return labels are not available for this country : %s', 'chronopost' ), $_order->get_shipping_country() );
+                       add_action( 'admin_notices', array( $this, 'print_admin_notice' ) );
+                       return false;
+               }
+
+               $shippingMethodAllow = array_keys( get_option( 'chronopost_shipping_methods' ) );
+               if ( ! in_array( $_shippingMethod, $shippingMethodAllow ) ) {
+                       $this->admin_notice = __( 'Return labels are not available for this method:', 'chronopost' ) . ' ' . $_shippingMethod;
+                       add_action( 'admin_notices', array( $this, 'print_admin_notice' ) );
+                       return false;
+               }
+
+               if ( in_array( $_shippingMethod, $shippingMethodAllow ) ) {
+                       $esdParams = $header = $shipper = $customer = $recipient = $ref = $skybill = $skybillParams = $password = array();
+
+                       $shippingMethodInstance = chrono_get_shipping_method_by_id( $_shippingMethod );
+
+                       //header parameters
+                       $contract = $shippingMethodInstance->getContractInfos();
+                       $header   = array(
+                               'idEmit'        => 'WOO',
+                               'accountNumber' => $contract['number'],
+                               'subAccount'    => $contract['subaccount'],
+                       );
+
+                       //shipper parameters
+                       $shipperMobilePhone = $this->checkMobileNumber( chrono_get_option( 'mobile', 'return' ) );
+                       $recipient          = array(
+                               'recipientAdress1'     => chrono_get_option( 'address', 'return' ),
+                               'recipientAdress2'     => chrono_get_option( 'address2', 'return' ),
+                               'recipientCity'        => chrono_get_option( 'city', 'return' ),
+                               'recipientCivility'    => chrono_get_option( 'civility', 'return' ),
+                               'recipientContactName' => chrono_get_option( 'contactname', 'return' ),
+                               'recipientCountry'     => chrono_get_option( 'country', 'return' ),
+                               'recipientEmail'       => chrono_get_option( 'email', 'return' ),
+                               'recipientMobilePhone' => $shipperMobilePhone,
+                               'recipientName'        => chrono_get_option( 'name', 'return' ),
+                               'recipientName2'       => chrono_get_option( 'name2', 'return' ),
+                               'recipientPhone'       => chrono_get_option( 'phone', 'return' ),
+                               'recipientPreAlert'    => '',
+                               'recipientZipCode'     => chrono_get_option( 'zipcode', 'return' ),
+                       );
+
+                       //customer parameters
+                       $customerMobilePhone = $this->checkMobileNumber( chrono_get_option( 'mobile', 'customer' ) );
+                       $customer            = array(
+                               'customerAdress1'     => chrono_get_option( 'address', 'customer' ),
+                               'customerAdress2'     => chrono_get_option( 'address2', 'customer' ),
+                               'customerCity'        => chrono_get_option( 'city', 'customer' ),
+                               'customerCivility'    => chrono_get_option( 'civility', 'customer' ),
+                               'customerContactName' => chrono_get_option( 'contactname', 'customer' ),
+                               'customerCountry'     => chrono_get_option( 'country', 'customer' ),
+                               'customerEmail'       => chrono_get_option( 'email', 'customer' ),
+                               'customerMobilePhone' => $customerMobilePhone,
+                               'customerName'        => chrono_get_option( 'name', 'customer' ),
+                               'customerName2'       => chrono_get_option( 'name2', 'customer' ),
+                               'customerPhone'       => chrono_get_option( 'phone', 'customer' ),
+                               'customerPreAlert'    => '',
+                               'customerZipCode'     => chrono_get_option( 'zipcode', 'customer' ),
+                       );
+
+                       //recipient parameters
+
+                       $customer_obj = new WC_Customer( $_order->get_customer_id() );
+
+                       $addr_type = 'shipping';
+                       if ( $_shippingMethod == 'chronorelais' ) {
+                               $addr_type = 'billing';
+                       }
+
+                       // Champs forcément basés sur l'adresse de livraison
+                       $customer_email = $_order->get_billing_email() ? $_order->get_billing_email() : $customer_obj->get_email();
+
+                       $recipientMobilePhone = $this->checkMobileNumber( $_order->get_billing_phone() ); //no shipping mobile so we use the billing phone
+                       $recipientName        = $this->getFilledValue( call_user_func( array( $_order, "get_{$addr_type}_company" ) ) ); //RelayPoint Name if chronorelais or Companyname if chronopost and
+
+                       $recipientName2 = $this->getFilledValue( $_order->get_shipping_first_name() . ' ' . $_order->get_shipping_last_name() );
+                       //remove any alphabets in phone number
+
+                       $recipientPhone = trim( preg_replace( '/[^0-9\.\-]/', ' ', $_order->get_billing_phone() ) );
+
+                       $shipper = array(
+                               'shipperAdress1'     => substr( $this->getFilledValue( call_user_func( array( $_order, "get_{$addr_type}_address_1" ) ) ), 0, 38 ),
+                               'shipperAdress2'     => substr( $this->getFilledValue( call_user_func( array( $_order, "get_{$addr_type}_address_2" ) ) ), 0, 38 ),
+                               'shipperCity'        => $this->getFilledValue( call_user_func( array( $_order, "get_{$addr_type}_city" ) ) ),
+                               'shipperCivility'    => 'M',
+                               'shipperContactName' => $recipientName2,
+                               'shipperCountry'     => $this->getFilledValue( call_user_func( array( $_order, "get_{$addr_type}_country" ) ) ),
+                               'shipperEmail'       => $customer_email,
+                               'shipperMobilePhone' => $recipientMobilePhone,
+                               'shipperName'        => $recipientName,
+                               'shipperName2'       => $recipientName2,
+                               'shipperPhone'       => $recipientPhone,
+                               'shipperPreAlert'    => '',
+                               'shipperZipCode'     => $this->getFilledValue( call_user_func( array( $_order, "get_{$addr_type}_postcode" ) ) ),
+                       );
+
+                       //ref parameters
+                       $recipientRef = false;
+                       if ( $pickup_relay_datas = get_post_meta( $_order->get_id(), '_shipping_method_chronorelais', true ) ) {
+                               $recipientRef = $pickup_relay_datas['id'];
+                       }
+
+                       if ( ! $recipientRef ) {
+                               $recipientRef = $_order->get_customer_id();
+                       }
+
+                       $shipperRef = $_order->get_id();
+
+                       $ref = array(
+                               'recipientRef' => $recipientRef,
+                               'shipperRef'   => $shipperRef,
+                       );
+
+                       //skybill parameters
+                       // Livraison Samedi (Delivery Saturday) field
+                       $SaturdayShipping = 0; //default value for the saturday shipping
+
+                       $sat_shipMethodAllow = array_diff( $shippingMethodAllow, array( 'chronorelaiseurope' ) );
+
+                       if ( in_array( $_shippingMethod, $shippingMethodAllow ) ) {
+                               $_deliver_on_saturday = get_post_meta( $_order->get_id(), '_ship_on_saturday', true ) == 'yes' ? true : false;
+                               if ( ! $_deliver_on_saturday ) {
+                                       $_deliver_on_saturday = chrono_get_method_settings( $_shippingMethod, 'deliver_on_saturday' ) == 'yes' ? 1 : 0;
+                               } else {
+                                       if ( $_deliver_on_saturday ) {
+                                               $_deliver_on_saturday = 1;
+                                       } else {
+                                               $_deliver_on_saturday = 0;
+                                       }
+                               }
+
+                               $is_sending_day = chrono_is_sending_day();
+
+                               if ( $_deliver_on_saturday && $is_sending_day ) {
+                                       $SaturdayShipping = 6;
+                               } elseif ( ! $_deliver_on_saturday && $is_sending_day ) {
+                                       $SaturdayShipping = 1;
+                               }
+                       }
+
+                       $weight = 0;
+                       $weight = Chronopost_Package::getTotalWeight( $_order->get_items() );
+
+                       if ( chrono_get_weight_unit() == 'g' ) {
+                               $weight = $weight / 1000; // conversion g => kg
+                       }
+
+                       $weight = 0; /* On met le poids à 0 car les colis sont pesé sur place */
+
+                       $productCode = '01';
+
+                       // Retour Europe
+                       if ( $recipient['recipientCountry'] == 'FR' && $_order->get_shipping_country() !== 'FR' ) {
+                               $productCode      = '3T';
+                               $SaturdayShipping = '332';
+                       }
+
+                       $skybill = array(
+                               'codCurrency'     => 'EUR',
+                               'codValue'        => '',
+                               'content1'        => '',
+                               'content2'        => '',
+                               'content3'        => '',
+                               'content4'        => '',
+                               'content5'        => '',
+                               'customsCurrency' => 'EUR',
+                               'customsValue'    => '',
+                               'evtCode'         => 'DC',
+                               'insuredCurrency' => 'EUR',
+                               'insuredValue'    => '',
+                               'objectType'      => 'MAR',
+                               'productCode'     => $productCode,
+                               'service'         => $SaturdayShipping,
+                               'shipDate'        => date( 'c' ),
+                               'shipHour'        => date( 'H' ),
+                               'weight'          => $weight,
+                               'weightUnit'      => 'KGM',
+                       );
+
+                       if ( $_shippingMethod == 'chronorelaiseurope' ) {
+                               $mode = 'PPR';
+                       }
+                       $skybillParams = array(
+                               'mode' => chrono_get_option( 'mode', 'skybill' ),
+                       );
+
+                       $expeditionArray = array(
+                               'headerValue'        => $header,
+                               'shipperValue'       => $shipper,
+                               'customerValue'      => $customer,
+                               'recipientValue'     => $recipient,
+                               'refValue'           => $ref,
+                               'skybillValue'       => $skybill,
+                               'skybillParamsValue' => $skybillParams,
+                               'password'           => $contract['password'],
+                       );
+
+                       return $expeditionArray;
+               }
+       }
+
+       public function cancelSkybill( $_order, $skybillNumber = '', $shipping_method_id = 0 ) {
+               if ( $skybillNumber ) {
+                       try {
+                               $client = new SoapClient(
+                                       'https://www.chronopost.fr/tracking-cxf/TrackingServiceWS?wsdl', array(
+                                               'trace'              => 0,
+                                               'connection_timeout' => 10,
+                                       )
+                               );
+
+                               $shipping_method = chrono_get_shipping_method_by_id( $shipping_method_id );
+                               $contract        = $shipping_method->getContractInfos( $_order );
+                               $params          = array(
+                                       'accountNumber' => $contract['number'],
+                                       'password'      => $contract['password'],
+                                       'skybillNumber' => $skybillNumber,
+                                       'language'      => get_option( 'WPLANG' ),
+                               );
+
+                               $webservbt = $client->cancelSkybill( $params );
+
+                               if ( $webservbt ) {
+                                       /* suppression du numéro de tracking */
+                                       if ( $webservbt->return->errorCode == 0 ) {
+                                               $this->admin_notice = sprintf( __( 'The label %s was cancelled', 'chronopost' ), $skybillNumber );
+                                               add_action( 'admin_notices', array( $this, 'print_admin_success' ) );
+                                               return true;
+                                       } else {
+                                               switch ( $webservbt->return->errorCode ) {
+                                                       case '1':
+                                                               $this->admin_notice = sprintf( __( 'An error occured when cancelling the %s label', 'chronopost' ), $skybillNumber );
+                                                               break;
+                                                       case '2':
+                                                               $this->admin_notice = sprintf( __( 'the %s package does not belong to the contract passed as parameter or has not yet been registered in the Chronopost tracking system', 'chronopost' ), $skybillNumber );
+                                                               break;
+                                                       case '3':
+                                                               $this->admin_notice = sprintf( __( 'The %s package can not be cancelled because it was supported by Chronopost', 'chronopost' ), $skybillNumber );
+                                                               break;
+                                                       default:
+                                                               $this->admin_notice = '';
+                                                               break;
+                                               }
+                                               add_action( 'admin_notices', array( $this, 'print_admin_notice' ) );
+                                               return false;
+                                       }
+                               } else {
+                                       $this->admin_notice = sprintf( 'Désolé, une erreur est survenu lors de la suppression de l\'étiquette %s. Merci de contacter Chronopost ou de réessayer plus tard', $skybillNumber );
+                                       add_action( 'admin_notices', array( $this, 'print_admin_notice' ) );
+                                       return false;
+                               }
+                       } catch ( Exception $e ) {
+                               return false;
+                       }
+               }
+               return false;
+       }
+
+       /* Livraison sur rendez-vous */
+       public function getSearchDeliverySlot( $shipping_method_id ) {
+               $table_slots        = get_option( $shipping_method_id . '_table_slots', false );
+               $cost_levels        = get_option( $shipping_method_id . '_cost_levels', false );
+               $chronopost_product = chrono_get_shipping_method_by_id( $shipping_method_id );
+
+               try {
+                       $contract      = $chronopost_product->getContractInfos();
+                       $soapHeaders   = array();
+                       $namespace     = 'http://cxf.soap.ws.creneau.chronopost.fr/';
+                       $soapHeaders[] = new SoapHeader( $namespace, 'password', $contract['password'] );
+                       $soapHeaders[] = new SoapHeader( $namespace, 'accountNumber', $contract['number'] );
+
+                       $_creneauServiceUrl = 'https://www.chronopost.fr/rdv-cxf/services/CreneauServiceWS?wsdl';
+                       if ( $chronopost_product->settings['quickcost_url'] ) {
+                               $_creneauServiceUrl = preg_replace( '/https:\/\/(.*)\/quickcost-cxf\/QuickcostServiceWS\?wsdl/U', 'https://$1/rdv-cxf/services/CreneauServiceWS?wsdl', $chronopost_product->settings['quickcost_url'] );
+                       }
+                       $client = new SoapClient(
+                               $_creneauServiceUrl, array(
+                                       'trace'              => 1,
+                                       'connection_timeout' => 10,
+                               )
+                       );
+                       $client->__setSoapHeaders( $soapHeaders );
+                       $dateRemiseColis_nbJour         = chrono_get_method_settings( $shipping_method_id, 'delivery_date_day_nbr' );
+                       $dateRemiseColis_jour           = chrono_get_method_settings( $shipping_method_id, 'delivery_date_day' );
+                       $dateRemiseColis_heures_minutes = chrono_get_method_settings( $shipping_method_id, 'delivery_date_hour' );
+
+                       /* definition date de debut */
+                       $dateBegin = date( 'Y-m-d H:i:s' );
+                       if ( isset( $dateRemiseColis_nbJour ) && $dateRemiseColis_nbJour > 0 ) {
+                               $dateBegin = date( 'Y-m-d', strtotime( '+' . (int) $dateRemiseColis_nbJour . ' day' ) );
+                       } elseif ( isset( $dateRemiseColis_jour ) && isset( $dateRemiseColis_heures_minutes ) ) {
+                               $jour_text = date( 'l', strtotime( 'Sunday +' . $dateRemiseColis_jour . ' days' ) );
+                               $dateBegin = date( 'Y-m-d', strtotime( 'next ' . $jour_text ) ) . ' ' . $dateRemiseColis_heures_minutes . ':00';
+                       }
+                       $dateBegin = date( 'Y-m-d', strtotime( $dateBegin ) ) . 'T' . date( 'H:i:s', strtotime( $dateBegin ) );
+
+                       /* si dom => on ne met pas le code ISO mais un code spécifique, sinon le relai dom ne fonctionne pas */
+                       $countryDomCode = $this->getCountryDomCode();
+
+                       $countryId = WC()->customer->get_shipping_country();
+                       if ( isset( $countryDomCode[ $countryId ] ) ) {
+                               $countryId = $countryDomCode[ $countryId ];
+                       }
+
+                       $params = array(
+                               'callerTool'                => 'RDVWS',
+                               'productType'               => 'RDV',
+
+                               'shipperAdress1'            => chrono_get_option( 'address', 'shipper' ),
+                               'shipperAdress2'            => chrono_get_option( 'address2', 'shipper' ),
+                               'shipperZipCode'            => chrono_get_option( 'zipcode', 'shipper' ),
+                               'shipperCity'               => chrono_get_option( 'city', 'shipper' ),
+                               'shipperCountry'            => chrono_get_option( 'country', 'shipper' ),
+
+                               'recipientAdress1'          => $this->getFilledValue( WC()->customer->get_shipping_address() ),
+                               'recipientAdress2'          => $this->getFilledValue( WC()->customer->get_shipping_address_2() ),
+                               'recipientZipCode'          => $this->getFilledValue( WC()->customer->get_shipping_postcode() ),
+                               'recipientCity'             => $this->getFilledValue( WC()->customer->get_shipping_city() ),
+                               'recipientCountry'          => $this->getFilledValue( $countryId ),
+
+                               'weight'                    => 1,
+                               'dateBegin'                 => $dateBegin,
+                               'shipperDeliverySlotClosed' => '',
+                               'currency'                  => 'EUR',
+                               'isDeliveryDate'            => 0,
+                               'slotType'                  => '',
+                       );
+
+                       if ( is_array( $cost_levels ) ) {
+                               $rateLevelsNotShow = array();
+                               foreach ( $cost_levels as $key => $cost_level ) {
+                                       if ( array_key_exists( 'price', $cost_level ) ) {
+                                               $params[ 'rate' . $key ] = $cost_level['price'];
+                                       }
+                                       if ( array_key_exists( 'status', $cost_level ) && $cost_level['status'] == '0' ) {
+                                               $rateLevelsNotShow[] = $key;
+                                       }
+                               }
+                               $params['rateLevelsNotShow'] = $rateLevelsNotShow;
+                       }
+
+                       /* creneaux à fermer */
+                       if ( is_array( $table_slots ) && count( $table_slots ) > 0 ) {
+                               foreach ( $table_slots as $_creneau ) {
+                                       $endHour             = explode( ':', $_creneau['endhour'] );
+                                       $endHour[1]          = str_pad( $endHour[1] + 1, 2, '0', STR_PAD_LEFT );
+                                       $_creneau['endhour'] = implode( ':', $endHour );
+                                       $jour_debut_text     = date( 'l', strtotime( 'Sunday +' . $_creneau['startday'] . ' days' ) );
+                                       $jour_fin_text       = date( 'l', strtotime( 'Sunday +' . $_creneau['endday'] . ' days' ) );
+
+                                       $dateDebut = '';
+                                       $dateFin   = '';
+
+                                       /* creation de creneaux aux bons formats, pour 6 semaines consécutives */
+                                       for ( $indiceWeek = 0; $indiceWeek < 6; $indiceWeek++ ) {
+                                               if ( empty( $dateDebut ) ) {
+                                                       $dateDebut = date( 'Y-m-d', strtotime( 'next ' . $jour_debut_text ) ) . ' ' . $_creneau['starthour'] . ':00';
+                                                       $dateFin   = date( 'Y-m-d', strtotime( 'next ' . $jour_fin_text ) ) . ' ' . $_creneau['endhour'] . ':00';
+                                                       if ( date( 'N' ) >= $_creneau['startday'] ) {
+                                                               $dateDebut = date( 'Y-m-d', strtotime( date( 'Y-m-d', strtotime( $dateDebut ) ) . ' -7 day' ) ) . ' ' . $_creneau['starthour'] . ':00';
+                                                       }
+                                                       if ( date( 'N' ) >= $_creneau['endday'] ) {
+                                                               $dateFin = date( 'Y-m-d', strtotime( date( 'Y-m-d', strtotime( $dateFin ) ) . ' -7 day' ) ) . ' ' . $_creneau['endhour'] . ':00';
+                                                       }
+                                               } else {
+                                                       $dateDebut = date( 'Y-m-d', strtotime( $jour_debut_text . ' next week ' . date( 'Y-m-d', strtotime( $dateDebut ) ) ) ) . ' ' . $_creneau['starthour'] . ':00';
+                                                       $dateFin   = date( 'Y-m-d', strtotime( $jour_fin_text . ' next week ' . date( 'Y-m-d', strtotime( $dateFin ) ) ) ) . ' ' . $_creneau['endhour'] . ':00';
+                                               }
+
+                                               $dateDebutStr = date( 'Y-m-d', chrono_add_gmt_timestamp( strtotime( $dateDebut ) ) ) . 'T' . date( 'H:i:s', chrono_add_gmt_timestamp( strtotime( $dateDebut ) ) );
+                                               $dateFinStr   = date( 'Y-m-d', chrono_add_gmt_timestamp( strtotime( $dateFin ) ) ) . 'T' . date( 'H:i:s', chrono_add_gmt_timestamp( strtotime( $dateFin ) ) );
+
+                                               if ( ! isset( $params['shipperDeliverySlotClosed'] ) || $params['shipperDeliverySlotClosed'] == '' ) {
+                                                       $params['shipperDeliverySlotClosed'] = array();
+                                               }
+                                               $params['shipperDeliverySlotClosed'][] = $dateDebutStr . '/' . $dateFinStr;
+                                       }
+                               }
+                       }
+
+                       $webservbt = $client->searchDeliverySlot( $params );
+
+                       if ( $webservbt->return->code == 0 ) {
+                               return $webservbt;
+                       }
+                       return false;
+               } catch ( Exception $e ) {
+                       return false;
+               }
+       }
+
+       public function confirmDeliverySlot( $chronopost_product, $rdvInfo = '' ) {
+               try {
+                       $contract      = $chronopost_product->getContractInfos();
+                       $soapHeaders   = array();
+                       $namespace     = 'http://cxf.soap.ws.creneau.chronopost.fr/';
+                       $soapHeaders[] = new SoapHeader( $namespace, 'password', $contract['password'] );
+                       $soapHeaders[] = new SoapHeader( $namespace, 'accountNumber', $contract['number'] );
+
+                       $_creneauServiceUrl = 'https://www.chronopost.fr/rdv-cxf/services/CreneauServiceWS?wsdl';
+                       if ( $chronopost_product->settings['quickcost_url'] ) {
+                               $_creneauServiceUrl = preg_replace( '/https:\/\/(.*)\/quickcost-cxf\/QuickcostServiceWS\?wsdl/U', 'https://$1/rdv-cxf/services/CreneauServiceWS?wsdl', $chronopost_product->settings['quickcost_url'] );
+                       }
+                       $client = new SoapClient(
+                               $_creneauServiceUrl, array(
+                                       'trace'              => 1,
+                                       'connection_timeout' => 10,
+                               )
+                       );
+                       $client->__setSoapHeaders( $soapHeaders );
+
+                       $params = array(
+                               'callerTool'    => 'RDVWS',
+                               'productType'   => 'RDV',
+
+                               'codeSlot'      => $rdvInfo['deliverySlotCode'],
+                               'meshCode'      => $rdvInfo['meshCode'],
+                               'transactionID' => $rdvInfo['transactionID'],
+                               'rank'          => $rdvInfo['rank'],
+                               'position'      => $rdvInfo['rank'],
+                               'dateSelected'  => $rdvInfo['deliveryDate'],
+                       );
+
+                       return $client->confirmDeliverySlotV2( $params );
+               } catch ( Exception $e ) {
+                       return false;
+               }
+       }
+
+
+       protected function checkMobileNumber( $value ) {
+               if ( $reqvalue = trim( $value ) ) {
+                       $_number     = substr( $reqvalue, 0, 2 );
+                       $fixed_array = array( '01', '02', '03', '04', '05', '06', '07' );
+                       if ( in_array( $_number, $fixed_array ) ) {
+                               return $reqvalue;
+                       } else {
+                               return '';
+                       }
+               }
+       }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/deprecated.php b/wp-content/plugins/woocommerce-chronopost/includes/deprecated.php
new file mode 100755 (executable)
index 0000000..2fe94f2
--- /dev/null
@@ -0,0 +1,146 @@
+<?php
+if (!function_exists('wf_get_settings_url')) {
+    function wf_get_settings_url()
+    {
+        return version_compare(WC()->version, '2.1', '>=') ? "wc-settings" : "woocommerce_settings";
+    }
+}
+
+if (!function_exists('wf_plugin_override')) {
+    add_action('plugins_loaded', 'wf_plugin_override');
+    function wf_plugin_override()
+    {
+        if (!function_exists('WC')) {
+            function WC()
+            {
+                return $GLOBALS['woocommerce'];
+            }
+        }
+    }
+}
+
+if (!function_exists('wf_get_shipping_countries')) {
+    function wf_get_shipping_countries()
+    {
+        $woocommerce = WC();
+        $shipping_countries = method_exists($woocommerce->countries, 'get_shipping_countries')
+        ? $woocommerce->countries->get_shipping_countries()
+        : $woocommerce->countries->countries;
+        return $shipping_countries;
+    }
+}
+
+/***************ORDER FUNCTION *************/
+
+function wf_get_order_id($order)
+{
+    global $woocommerce;
+    return (WC()->version < '2.7.0') ? $order->id : $order->get_id();
+}
+
+function wf_get_order_currency($order)
+{
+    global $woocommerce;
+    return (WC()->version < '2.7.0') ? $order->get_order_currency() : $order->get_currency();
+}
+
+function wf_get_order_shipping_country($order)
+{
+    global $woocommerce;
+    return (WC()->version < '2.7.0') ? $order->shipping_country : $order->get_shipping_country();
+}
+
+function wf_get_order_shipping_first_name($order)
+{
+    global $woocommerce;
+    return (WC()->version < '2.7.0') ? $order->shipping_first_name : $order->get_shipping_first_name();
+}
+
+function wf_get_order_shipping_last_name($order)
+{
+    global $woocommerce;
+    return (WC()->version < '2.7.0') ? $order->shipping_last_name : $order->get_shipping_last_name();
+}
+
+function wf_get_order_shipping_company($order)
+{
+    global $woocommerce;
+    return (WC()->version < '2.7.0') ? $order->shipping_company : $order->get_shipping_company();
+}
+
+function wf_get_order_shipping_address_1($order)
+{
+    global $woocommerce;
+    return (WC()->version < '2.7.0') ? $order->shipping_address_1 : $order->get_shipping_address_1();
+}
+
+function wf_get_order_shipping_address_2($order)
+{
+    global $woocommerce;
+    return (WC()->version < '2.7.0') ? $order->shipping_address_2 : $order->get_shipping_address_2();
+}
+
+function wf_get_order_shipping_city($order)
+{
+    global $woocommerce;
+    return (WC()->version < '2.7.0') ? $order->shipping_city : $order->get_shipping_city();
+}
+
+function wf_get_order_shipping_state($order)
+{
+    global $woocommerce;
+    return (WC()->version < '2.7.0') ? $order->shipping_state : $order->get_shipping_state();
+}
+
+function wf_get_order_shipping_postcode($order)
+{
+    global $woocommerce;
+    return (WC()->version < '2.7.0') ? $order->shipping_postcode : $order->get_shipping_postcode();
+}
+
+
+function wf_get_order_billing_email($order)
+{
+    global $woocommerce;
+    return (WC()->version < '2.7.0') ? $order->billing_email : $order->get_billing_email();
+}
+
+
+function wf_get_order_billing_phone($order)
+{
+    global $woocommerce;
+    return (WC()->version < '2.7.0') ? $order->billing_phone : $order->get_billing_phone();
+}
+
+
+/****************PRODUCT FUNCTIONS ***************/
+
+function wf_get_product_id($item)
+{
+    global $woocommerce;
+    return (WC()->version < '2.7.0') ? $item->id : $item->get_id();
+}
+
+function wf_get_product_length($item)
+{
+    global $woocommerce;
+    return (WC()->version < '2.7.0') ? $item->length : $item->get_length();
+}
+
+function wf_get_product_width($item)
+{
+    global $woocommerce;
+    return (WC()->version < '2.7.0') ? $item->width : $item->get_width();
+}
+
+function wf_get_product_height($item)
+{
+    global $woocommerce;
+    return (WC()->version < '2.7.0') ? $item->height : $item->get_height();
+}
+
+function wf_get_product_weight($item)
+{
+    global $woocommerce;
+    return (WC()->version < '2.7.0') ? $item->weight : $item->get_weight();
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/functions-chronopost-helpers.php b/wp-content/plugins/woocommerce-chronopost/includes/functions-chronopost-helpers.php
new file mode 100755 (executable)
index 0000000..f406cc5
--- /dev/null
@@ -0,0 +1,379 @@
+<?php
+
+function chrono_get_timezone() {
+    $timezone_string = get_option( 'timezone_string' );
+
+    if ( ! empty( $timezone_string ) ) {
+        return $timezone_string;
+    }
+
+    $offset  = get_option( 'gmt_offset' );
+    $hours   = (int) $offset;
+    $minutes = ( $offset - floor( $offset ) ) * 60;
+    $offset  = sprintf( '%+03d:%02d', $hours, $minutes );
+
+    return $offset;
+}
+
+function chrono_get_option($key = '', $section = 'general', $default = false)
+{
+       return chrono_get_generic_option( 'chronopost_settings', $key, $section, $default );
+}
+
+function chrono_get_imports_option( $key = '', $section = 'general', $default = false ) {
+       return chrono_get_generic_option( 'chronopost_imports', $key, $section, $default );
+}
+
+/**
+ * @param        $settings
+ * @param string $key
+ * @param string $section
+ * @param        $default
+ *
+ * @return string
+ */
+function chrono_get_generic_option( $settings, $key, $section, $default ) {
+       $options = get_option( $settings, $default );
+       if ( is_array( $options ) ) {
+               if ( ! array_key_exists( $section, $options ) ) {
+                       return $default == false ? '' : $default;
+               }
+
+               if ( array_key_exists( $key, $options[ $section ] ) ) {
+                       return $options[ $section ][ $key ];
+               }
+       }
+
+       return $default == false ? '' : $default;
+}
+
+function chrono_get_media_path()
+{
+    return WP_CONTENT_DIR . '/uploads/chronopost/';
+}
+
+function chrono_get_media_url()
+{
+    return WP_CONTENT_URL . '/uploads/chronopost/';
+}
+
+function chrono_get_weight_unit()
+{
+    return strtolower(get_option('woocommerce_weight_unit'));
+}
+
+function chrono_get_product_code_by_id($id_method)
+{
+    $product_code_key = chrono_get_option('enable', 'bal_option') == 'yes' ? 'product_code_bal' : 'product_code';
+    $default_product_code_key = 'product_code';
+
+    $chronopost_methods = get_option('chronopost_shipping_methods', array(), true);
+  
+    if (array_key_exists($id_method, $chronopost_methods)) {
+        if ($chronopost_methods[$id_method][$product_code_key] != false) {
+            return $chronopost_methods[$id_method][$product_code_key];
+        }
+    }
+    return $chronopost_methods[$id_method][$default_product_code_key];
+}
+
+function chrono_get_method_settings($id_method, $key = false)
+{
+    $method_settings = (array)get_option('woocommerce_' . $id_method . '_settings');
+    return !$key ? (array)$method_settings : (array_key_exists($key, $method_settings) ? $method_settings[$key] : '');
+}
+  
+function chrono_get_tracking_url($skybill_number = false, $shipping_method_id = false)
+{
+    if ($skybill_number && $shipping_method_id) {
+        return str_replace('{tracking_number}', $skybill_number, chrono_get_method_settings($shipping_method_id, 'tracking_url'));
+    }
+    return false;
+}
+
+function chrono_get_shipment_datas( $order_id ) {
+       $shipment_datas = get_post_meta( $order_id, '_shipment_datas', true );
+       if ( is_array( $shipment_datas ) && isset($shipment_datas[0]) &&
+            ( array_key_exists( '_skybill_number', $shipment_datas[0] ) || array_key_exists( '_reservation_number', $shipment_datas[0] ) ) ) {
+               return $shipment_datas;
+       }
+
+       return false;
+}
+
+function chrono_get_parcels_number( $order_id ) {
+       return get_post_meta($order_id, '_parcels_number', true) ?: 1;
+}
+
+function chrono_is_shipping_methods_without_saturday($shipping_method_id){
+    $shippingMethodsNoSaturday = array(
+        'chronorelaiseurope',
+        'chronoexpress',
+        'chronoclassic'
+    );
+    return in_array($shipping_method_id,$shippingMethodsNoSaturday);
+}
+
+function chrono_get_parcels_dimensions( $order_id ) {
+       return json_decode(get_post_meta($order_id, '_parcels_dimensions', true), true) ?: array();
+}
+
+function chrono_notice($message, $type='success', $modal = false, $args = array())
+{
+    $class = 'notice notice-'.$type;
+  
+    /**
+   * Define the array of defaults
+   */
+    $defaults = array(
+        'width' => 300,
+        'height' => 500,
+        'title' => __('Information Chronopost')
+    );
+
+    /**
+     * Parse incoming $args into an array and merge it with $defaults
+     */
+    $args = wp_parse_args($args, $defaults);
+
+    if (!$modal) {
+        return sprintf('<div class="%1$s"><p>%2$s</p></div>', esc_attr($class), esc_html($message));
+    } else {
+        $btnClose = '<button onclick="javascript:tb_remove()" class="button button-primary">'.__('I understand', 'chronopost').'</button>';
+        return sprintf('<div class="%1$s" style="display: none"><div id="alertModal" data-title="'.esc_attr($args['title']).'" data-width="'.$args['width'].'" data-height="'.$args['height'].'"><p>%2$s</p><div style="text-align:center;">'.$btnClose.'</div></div></div>', esc_attr($class), esc_html($message));
+    }
+}
+
+function get_day_with_key($key)
+{
+    $days = array(
+        'sunday',
+        'monday',
+        'thuesday',
+        'wednesday',
+        'thursday',
+        'friday',
+        'saturday'
+    );
+    return array_key_exists($key, $days) ? $days[$key] : 'sunday';
+}
+
+function chrono_get_saturday_shipping_days()
+{
+    $startday = chrono_get_option('startday', 'saturday_slot', 4);
+    $endday = chrono_get_option('endday', 'saturday_slot', 5);
+    $starttime = chrono_get_option('starttime', 'saturday_slot', '15:00');
+    $endtime = chrono_get_option('endtime', 'saturday_slot', '18:00');
+    $SaturdayShippingDays = array(
+        'startday' => get_day_with_key($startday),
+        'endday' => get_day_with_key($endday),
+        'starttime' => $starttime.':00',
+        'endtime' => $endtime.':00'
+    );
+    return $SaturdayShippingDays;
+}
+
+function chrono_is_sending_day()
+{
+    $satDays = chrono_get_saturday_shipping_days();
+
+    $satDayStart = date('N', strtotime($satDays['startday']));
+    $satTimeStart = explode(':', $satDays['starttime']);
+
+    $endDayStart = date('N', strtotime($satDays['endday']));
+    $endTimeStart = explode(':', $satDays['endtime']);
+
+    $start = new DateTime('last sun');
+    // COMPAT < 5.36 : no chaining (returns null)
+    $start->modify('+'.$satDayStart.' days');
+    $start->modify('+'.$satTimeStart[0].' hours');
+    $start->modify('+'.$satTimeStart[1].' minutes');
+    $end = new DateTime('last sun');
+    $end->modify('+'.$endDayStart.' days');
+    $end->modify('+'.$endTimeStart[0].' hours');
+    $end->modify('+'.$endTimeStart[1].' minutes');
+
+    if ($end < $start) {
+        $end->modify('+1 week');
+    }
+
+    $end = $end->getTimestamp();
+    $start = $start->getTimestamp();
+
+    $now = current_time('timestamp');
+
+    if ($start <= $now && $now <= $end) {
+        return true;
+    }
+    return false;
+}
+
+function chrono_add_gmt_timestamp($timestamp)
+{
+    //return $timestamp;
+    // todo : verifier cette fonction
+    return $timestamp - (get_option('gmt_offset') * HOUR_IN_SECONDS);
+}
+
+function chrono_get_post_datas($str_post_datas = '')
+{
+    $post_datas = array();
+    foreach (explode('&', $str_post_datas) as $chunk) {
+        $param = explode("=", $chunk);
+        if ($param) {
+            if (urldecode($param[0]) == 'chronopostprecise_creneaux_info') {
+                $post_datas[urldecode($param[0])] = json_decode(urldecode($param[1]));
+            } else {
+                $post_datas[urldecode($param[0])] = urldecode($param[1]);
+            }
+        }
+    }
+    return $post_datas;
+}
+
+function chronopost_is_configured()
+{
+       $contracts = chrono_get_all_contracts();
+       if (!$contracts) {
+               return false;
+       }
+       $default_options = Chronopost_Admin_Display::get_default_values();
+       foreach ($contracts as $contract) {
+               if ($contract["number"] == $default_options["contract"][1]["number"]) {
+                       return false;
+               }
+       }
+    return false;
+}
+
+function chronopost_methods_is_configured()
+{
+    return is_array(get_option('chronopost_shipping_methods'));
+}
+
+function chrono_format_relay_address($str)
+{
+    return ucwords(strtolower($str));
+}
+
+/**
+ * @param int $contract_number
+ *
+ * @return array
+ */
+function chrono_get_contract_infos($contract_number)
+{
+       $infos = get_transient('contract_infos_' . $contract_number);
+       if (!$infos) {
+               $accounts = chrono_get_option('accounts');
+               foreach ($accounts as $account) {
+                       if ($account['number'] === $contract_number) {
+                               $infos = $account;
+                               set_transient('contract_infos_' . $contract_number, $infos, 24 * 3600);
+                       }
+               }
+       }
+       return $infos;
+}
+
+/**
+ * @param string $shipping_method_id
+ *
+ * @return bool|WC_Chronopost_Product
+ */
+function chrono_get_shipping_method_by_id($shipping_method_id)
+{
+       $shipping_methods = WC()->shipping()->load_shipping_methods();
+
+       if (isset($shipping_methods[$shipping_method_id])) {
+               return $shipping_methods[$shipping_method_id];
+       }
+       return false;
+}
+
+/**
+ * @param int $order_id
+ *
+ * @return bool|WC_Chronopost_Product
+ */
+function chrono_get_shipping_method_by_order($order_id)
+{
+       $_order = new WC_Order($order_id);
+       $order_shipping_method = $_order->get_shipping_methods();
+       $shipping_method = reset($order_shipping_method);
+       $shipping_method_id = $shipping_method->get_method_id();
+       return chrono_get_shipping_method_by_id($shipping_method_id);
+}
+
+function chrono_filter_by_value($array, $index, $value){
+    if(is_array($array) && count($array)>0)
+    {
+        foreach(array_keys($array) as $key){
+            $temp[$key] = $array[$key][$index];
+
+            if ($temp[$key] == $value){
+                $newarray[$key] = $array[$key];
+            }
+        }
+    }
+    return $newarray;
+}
+
+/**
+ * @return mixed
+ */
+function chrono_get_all_contracts()
+{
+       $accounts = chrono_get_option('accounts' );
+
+    if ( ! isset($accounts[ key($accounts) ]['status'] ) ) {
+        $accounts = chrono_get_option('accounts' );
+    } else {
+        $accounts = chrono_filter_by_value( chrono_get_option('accounts'), 'status', 'success' );
+    }
+
+       return $accounts;
+}
+
+/**
+ * Can we return the package ?
+ * @param $country
+ *
+ * @return bool
+ */
+function chrono_can_return_package( $country ) {
+       // Load whitelist
+       $whitelistFile = fopen(plugin_dir_path(__FILE__) . '../csv/chronoretour.csv', 'r');
+       $whitelist = fgetcsv($whitelistFile);
+       return in_array($country, $whitelist);
+}
+
+/**
+ * Vérifie les dimensions de plusieurs paquets (tableau)
+ * @param array $dimensions
+ *
+ * @return bool|string
+ */
+function chrono_check_packages_dimensions($shipping_method_id, $dimensions) {
+       foreach ($dimensions as $parcel_dimension) {
+               if ($shipping_method_id === 'chronorelais' || $shipping_method_id === 'chronorelaiseurope') {
+                       $max_weight = 20; // Kg
+                       $max_size = 100; // cm
+                       $max_global_size = 250; //cm
+               } else {
+                       $max_weight = 30; // Kg
+                       $max_size = 150; // cm
+                       $max_global_size = 300; // cm
+               }
+               if ($parcel_dimension['weight'] > $max_weight) {
+                       return sprintf(__('One or several packages are above the weight limit (%s kg)', 'chronopost'), $max_weight);
+               }
+               if ($parcel_dimension['width'] > $max_size || $parcel_dimension['height'] > $max_size || $parcel_dimension['length'] > $max_size) {
+                       return sprintf(__('One or several packages are above the size limit (%s cm)', 'chronopost'), $max_size);
+               }
+               if ($parcel_dimension['width'] + ( 2 * $parcel_dimension['height'] ) + ( 2 * $parcel_dimension['length'] ) > $max_global_size) {
+                        return sprintf(__('One or several packages are above the total (L+2H+2l) size limit (%s cm)', 'chronopost'), $max_global_size);
+               }
+       }
+       return true;
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/index.php b/wp-content/plugins/woocommerce-chronopost/includes/index.php
new file mode 100755 (executable)
index 0000000..e71af0e
--- /dev/null
@@ -0,0 +1 @@
+<?php // Silence is golden
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/products/chrono10.php b/wp-content/plugins/woocommerce-chronopost/includes/products/chrono10.php
new file mode 100755 (executable)
index 0000000..51e50dd
--- /dev/null
@@ -0,0 +1,38 @@
+<?php
+/**
+ *
+ * Chronopost 10 offer
+ *
+ * @since      1.0.0
+ * @package    Chronopost
+ * @subpackage Chronopost/includes/products
+ * @author     Adexos <contact@adexos.fr>
+ */
+function chrono10_init()
+{
+    if (! class_exists('WC_Chrono10')) {
+        class WC_Chrono10 extends WC_Chronopost_Product
+        {
+            public function shipping_method_setting()
+            {
+                $this->id                 = 'chrono10'; // Id for your shipping method. Should be uunique.
+                $this->pretty_title       = __('Express delivery before 10am at home', 'chronopost');  // Title shown in admin
+                $this->title       = __('Chrono 10', 'chronopost');  // Title shown in admin
+                $this->method_title       = __('Chrono 10', 'chronopost');  // Title shown in admin
+                $this->method_description = __('Parcels delivered the next day before 10am at your home. The day before delivery, You\'ll be notified by e-mail and SMS.', 'chronopost'); // Description shown in admin
+                $this->product_code = '02';
+                $this->product_code_str = '10H';
+            }
+        }
+    }
+}
+
+add_action('woocommerce_shipping_init', 'chrono10_init');
+
+function add_chrono10($methods)
+{
+    $methods['chrono10'] = 'WC_Chrono10';
+    return $methods;
+}
+
+add_filter('woocommerce_shipping_methods', 'add_chrono10');
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/products/chrono13.php b/wp-content/plugins/woocommerce-chronopost/includes/products/chrono13.php
new file mode 100755 (executable)
index 0000000..cc963aa
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+/**
+ *
+ * Chronopost 13 offer
+ *
+ * @since      1.0.0
+ * @package    Chronopost
+ * @subpackage Chronopost/includes/products
+ * @author     Adexos <contact@adexos.fr>
+ */
+function chrono13_init()
+{
+    if (! class_exists('WC_Chrono13')) {
+        class WC_Chrono13 extends WC_Chronopost_Product
+        {
+            private $chrono_settings;
+            
+            public function shipping_method_setting()
+            {
+                $this->id                 = 'chrono13'; // Id for your shipping method. Should be unique.
+                $this->pretty_title       = __('Express delivery before 1pm at home', 'chronopost');  // Title shown in admin
+                $this->title       = __('Chrono 13', 'chronopost');  // Title shown in admin
+                $this->method_title       = __('Chrono 13', 'chronopost');  // Title shown in admin
+                $this->method_description = __('Parcels delivered the next day before 1pm at your home. The day before delivery, You\'ll be notified by e-mail and SMS.', 'chronopost'); // Description shown in admin
+                $this->product_code = '01';
+                $this->product_code_bal = '01';
+            }
+        }
+    }
+}
+
+add_action('woocommerce_shipping_init', 'chrono13_init');
+
+function add_chrono13($methods)
+{
+    $methods['chrono30'] = 'WC_Chrono13';
+    return $methods;
+}
+
+add_filter('woocommerce_shipping_methods', 'add_chrono13');
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/products/chrono18.php b/wp-content/plugins/woocommerce-chronopost/includes/products/chrono18.php
new file mode 100755 (executable)
index 0000000..42b492a
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+/**
+ *
+ * Chronopost 18 offer
+ *
+ * @since      1.0.0
+ * @package    Chronopost
+ * @subpackage Chronopost/includes/products
+ * @author     Adexos <contact@adexos.fr>
+ */
+function chrono18_init()
+{
+    if (! class_exists('WC_Chrono18')) {
+        class WC_Chrono18 extends WC_Chronopost_Product
+        {
+            private $chrono_settings;
+            
+            public function shipping_method_setting()
+            {
+                $this->id                 = 'chrono18'; // Id for your shipping method. Should be uunique.
+                $this->pretty_title       = __('Express delivery before 6pm at home', 'chronopost');  // Title shown in admin
+                $this->title       = __('Chrono 18', 'chronopost');  // Title shown in admin
+                $this->method_title       = __('Chrono 18', 'chronopost');  // Title shown in admin
+                $this->method_description = __('Parcels delivered the next day before 6pm at your home. The day before delivery, You\'ll be notified by e-mail and SMS.', 'chronopost'); // Description shown in admin
+                $this->product_code = '16';
+                $this->product_code_bal = '2M';
+                $this->product_code_str = '18H';
+                $this->product_code_bal_str = '18H BAL';
+            }
+        }
+    }
+}
+
+add_action('woocommerce_shipping_init', 'chrono18_init');
+
+function add_chrono18($methods)
+{
+    $methods['chrono18'] = 'WC_Chrono18';
+    return $methods;
+}
+
+add_filter('woocommerce_shipping_methods', 'add_chrono18');
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/products/chronoclassic.php b/wp-content/plugins/woocommerce-chronopost/includes/products/chronoclassic.php
new file mode 100755 (executable)
index 0000000..bd0e76a
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+/**
+ *
+ * Chronopost Express offer
+ *
+ * @since      1.0.0
+ * @package    Chronopost
+ * @subpackage Chronopost/includes/products
+ * @author     Adexos <contact@adexos.fr>
+ */
+function chronoclassic_init()
+{
+    if (! class_exists('WC_Chronoclassic')) {
+        class WC_Chronoclassic extends WC_Chronopost_Product
+        {
+            public function shipping_method_setting()
+            {
+                $this->id                 = 'chronoclassic'; // Id for your shipping method. Should be uunique.
+                $this->pretty_title       = __('Express delivery at home', 'chronopost');  // Title shown in admin
+                $this->title       = __('Chrono Classic', 'chronopost');  // Title shown in admin
+                $this->method_title       = __('Chrono Classic', 'chronopost');  // Title shown in admin
+                $this->method_description = __('Parcels delivered to Europe in 1 to 3 days', 'chronopost'); // Description shown in admin
+                $this->product_code = '44';
+                $this->product_code_str = 'CClassic';
+            }
+            public function extra_form_fields()
+            {
+                parent::extra_form_fields();
+                unset($this->form_fields['deliver_on_saturday']);
+            }
+        }
+    }
+}
+
+add_action('woocommerce_shipping_init', 'chronoclassic_init');
+
+function add_chronoclassic($methods)
+{
+    $methods['chronoclassics'] = 'WC_Chronoclassic';
+    return $methods;
+}
+
+add_filter('woocommerce_shipping_methods', 'add_chronoclassic');
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/products/chronoexpress.php b/wp-content/plugins/woocommerce-chronopost/includes/products/chronoexpress.php
new file mode 100755 (executable)
index 0000000..270b4a5
--- /dev/null
@@ -0,0 +1,44 @@
+<?php
+/**
+ *
+ * Chronopost Express offer
+ *
+ * @since      1.0.0
+ * @package    Chronopost
+ * @subpackage Chronopost/includes/products
+ * @author     Adexos <contact@adexos.fr>
+ */
+function chronoexpress_init()
+{
+    if (! class_exists('WC_Chronoexpress')) {
+        class WC_Chronoexpress extends WC_Chronopost_Product
+        {
+            public function shipping_method_setting()
+            {
+                $this->id                 = 'chronoexpress'; // Id for your shipping method. Should be uunique.
+                $this->pretty_title       = __('Worldwide Express delivery', 'chronopost');  // Title shown in admin
+                $this->title       = __('Chrono Express', 'chronopost');  // Title shown in admin
+                $this->method_title       = __('Chrono Express', 'chronopost');  // Title shown in admin
+                $this->method_description = __('Parcels delivered to Europe in 1 to 3 days, 48 hours to the DOM and 2 to 5 days to the rest of the world.', 'chronopost'); // Description shown in admin
+                $this->product_code = '17';
+                $this->product_code_str = 'EI';
+            }
+
+            public function extra_form_fields()
+            {
+                parent::extra_form_fields();
+                unset($this->form_fields['deliver_on_saturday']);
+            }
+        }
+    }
+}
+
+add_action('woocommerce_shipping_init', 'chronoexpress_init');
+
+function add_chronoexpress($methods)
+{
+    $methods['chronoexpress'] = 'WC_Chronoexpress';
+    return $methods;
+}
+
+add_filter('woocommerce_shipping_methods', 'add_chronoexpress');
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/products/chronoprecise.php b/wp-content/plugins/woocommerce-chronopost/includes/products/chronoprecise.php
new file mode 100755 (executable)
index 0000000..587a5e8
--- /dev/null
@@ -0,0 +1,441 @@
+<?php
+/**
+ *
+ * Chronopost Precise offer
+ *
+ * @since      1.0.0
+ * @package    Chronopost
+ * @subpackage Chronopost/includes/products
+ * @author     Adexos <contact@adexos.fr>
+ */
+function chronoprecise_init()
+{
+    if (! class_exists('WC_ChronoPrecise')) {
+        class WC_ChronoPrecise extends WC_Chronopost_Product
+        {
+            public $slot_option_key;
+
+            public function shipping_method_setting()
+            {
+                $this->id                 = 'chronoprecise'; // Id for your shipping method. Should be uunique.
+                $this->pretty_title       = __('Delivery on appointment', 'chronopost');  // Title shown in admin
+                $this->title       = __('Chrono Precise', 'chronopost');  // Title shown in admin
+                $this->method_title       = __('Chrono Precise', 'chronopost');  // Title shown in admin
+                $this->method_description = __('By appointment at your home! Order delivered on the day of your choice in a 2-hour time slot. You can reprogram your delivery in case of absence.', 'chronopost'); // Description shown in admin
+                $this->title              = "ChronoPrecise"; // This can be added as an setting but for this example its forced.
+                $this->product_code = '2O';
+                $this->product_code_str = 'SRDV';
+
+                $this->slot_option_key = $this->id . '_table_slots';
+                $this->cost_level_option_key = $this->id . '_cost_levels';
+            }
+      
+            public function custom_actions()
+            {
+                add_action('woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_slot_settings' ));
+                add_action('woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_cost_level_settings' ));
+                add_action('woocommerce_checkout_update_order_meta', array($this, 'save_shipping_method_chronoprecise'), 10, 2);
+            }
+
+            public function save_shipping_method_chronoprecise($order_id)
+            {
+                if ($_POST['shipping_method'][0] != $this->id) {
+                    return;
+                }
+                if ($_POST['shipping_method'][0] == $this->id && array_key_exists('chronopostprecise_creneaux_info', $_POST) && $_POST['chronopostprecise_creneaux_info'] == '') {
+                    throw new Exception(sprintf(__('Please <a href="#container-method-%s">select an appointment</a>', 'chronopost'), $this->id));
+                    die();
+                }
+        
+                $rdvInfo = json_decode(stripcslashes($_POST['chronopostprecise_creneaux_info']), true);
+
+                if (is_array($rdvInfo)) {
+                    $ws = new Chronopost_Webservice();
+                    $confirm = $ws->confirmDeliverySlot($this, $rdvInfo);
+                    if ($confirm->return->code == 0) {
+                        $rdvInfo = array_merge($rdvInfo, json_decode(json_encode($confirm->return->productServiceV2), true));
+                        update_post_meta($order_id, '_shipping_method_chronoprecise', $rdvInfo);
+                    } else {
+                        throw new Exception(__($confirm->return->message, 'chronopost'));
+                        die();
+                    }
+                } else {
+                    throw new Exception(__('An error occured while validating your data, please refresh the page and try again.', 'chronopost'));
+                    die();
+                }
+            }
+      
+      
+            public function calculate_shipping($package = array())
+            {
+                $rate = $this->get_shipping_rate($package);
+
+                if ($rate === null || $rate === false) {
+                    return false;
+                }
+
+                $cost = $rate['cost'];
+
+                //what is the tax status
+                if ($this->settings['tax_status'] == 'none') {
+                    $taxes = false;
+                } else {
+                    $taxes = '';
+                }
+
+                if (array_key_exists('post_data', $_POST) && $_POST['post_data'] != '') {
+                    $post_datas = chrono_get_post_datas($_POST['post_data']);
+                    $cost_levels = $this->get_cost_levels();
+
+                    if (array_key_exists('chronopostprecise_creneaux_info', $post_datas) && !empty($post_datas['chronopostprecise_creneaux_info']->tariffLevel)) {
+                        $cost += $cost_levels[$post_datas['chronopostprecise_creneaux_info']->tariffLevel]['price'];
+                    }
+                }
+
+                $rate = array(
+                  'id' => $this->id,
+                  'label' => $this->pretty_title,
+                  'cost' => $cost,
+                  'taxes' => $taxes,
+                  'calc_tax' => 'per_order'
+                );
+                $this->add_rate($rate);
+            }
+      
+            public function process_slot_settings()
+            {
+                if (!isset($_POST['slot'])) {
+                       $_POST['slot'] = array();
+                }
+                   update_option($this->slot_option_key, $_POST['slot']);
+            }
+
+            public function process_cost_level_settings()
+            {
+                update_option($this->cost_level_option_key, $_POST['appointment_costs']);
+            }
+
+            public function get_slot_options()
+            {
+                return get_option($this->slot_option_key, array());
+            }
+
+            public function get_cost_levels()
+            {
+                return get_option($this->cost_level_option_key, array());
+            }
+
+            public function extra_form_fields()
+            {
+                $wp_locale = new WP_Locale;
+
+                unset($this->form_fields['deliver_on_saturday']);
+
+                $this->form_fields['delivery_date_day_nbr'] = array(
+                  'title'              => __('Date of delivery', 'chronopost'),
+                  'type'                       => 'number',
+                  'description' => __('Date from which the weeks list of the RDV option will be calculated', 'chronopost'),
+                  'desc_tip'     => true,
+                  'default'            => '2',
+                  'class'  => 'small-text',
+                  'custom_attributes' => array(
+                    'min' => 0,
+                    'max' => 31,
+                    'data-text-before' => __('Day of delivery +', 'chronopost'),
+                    'data-text-after' => __('day(s)', 'chronopost')
+                  )
+                );
+                $this->form_fields['delivery_date_day'] = array(
+                  'title'              => __('or day and hour of delivery', 'chronopost'),
+                  'type'                       => 'select',
+                  'default'            => '1',
+                  'options' => $wp_locale->weekday
+                );
+                $this->form_fields['delivery_date_hour'] = array(
+                  'title'              => __('Hour of delivery', 'chronopost'),
+                  'type'                       => 'text',
+                  'default'            => '10:00',
+                  'class'  => 'small-text timepicker'
+                );
+                $this->form_fields['closing_slot'] = array(
+                  'type'                       => 'date_range_selector',
+                );
+                $this->form_fields['cost_levels'] = array(
+                  'type'                       => 'cost_level',
+                );
+                $this->form_fields['cost_levels_show'] = array(
+                  'title'              => __('Show cost levels', 'chronopost'),
+                  'type'                       => 'select',
+                  'default'            => 1,
+                  'options' => array(
+                    1 => __('Yes', 'chronopost'),
+                    0 => __('No', 'chronopost'),
+                  )
+                );
+            }
+
+            public function generate_cost_level_html()
+            {
+                ob_start();
+
+                $cost_levels = $this->get_cost_levels(); ?>
+                <tr>
+                  <th scope="row" class="titledesc"><?php _e('Cost levels', 'chronopost'); ?></th>
+                  <td id="<?php echo $this->id; ?>_slot_settings">
+                    <table class="appointmentrows widefat">
+                      <?php for ($i = 1; $i <= 4; $i++): ?>
+                      <?php
+                        $appointment_status = false;
+                        $appointment_price = false;
+                        if (array_key_exists('N'.$i, $cost_levels)) {
+                            $appointment_status = array_key_exists('status', $cost_levels['N'.$i]) ? $cost_levels['N'.$i]['status'] : '1';
+                            $appointment_price = array_key_exists('price', $cost_levels['N'.$i]) ? $cost_levels['N'.$i]['price'] : 0;
+                        } ?>
+                      <tr>
+                        <td>
+                          <b><?php printf(__('Appointment %s', 'chronopost'), $i); ?></b>
+                        </td>
+                        <td>
+                        <?php echo __('Status', 'chronopost'); ?>
+                          <select name="appointment_costs[N<?php echo $i; ?>][status]">
+                            <option value="1"<?php echo $appointment_status == '1' ? ' selected="selected"' : ''; ?>>Ouvert</option>
+                            <option value="0"<?php echo $appointment_status == '0' ? ' selected="selected"' : ''; ?>>Fermé</option>
+                          </select>
+                        </td>
+                        <td>
+                          <label for=""><?php echo __('Price', 'chronopost'); ?></label>
+                          <input value="<?php echo $appointment_price; ?>" type="number" step="any" name="appointment_costs[N<?php echo $i; ?>][price]" value="2" class="required-entry validate-number">
+                        </td>
+                      </tr>
+                      <?php endfor; ?>
+                    </table>
+                  </td>
+                </tr>
+                <?php
+                return ob_get_clean();
+            }
+      
+            public function generate_date_range_selector_html()
+            {
+                ob_start();
+
+                $slot_datas = $this->get_slot_options();
+                if (empty($slot_datas)) {
+                    $slot_datas = array();
+                }
+                ?>
+                <tr>
+                  <th scope="row" class="titledesc"><?php _e('Slots to be closed', 'chronopost'); ?></th>
+                  <td id="<?php echo $this->id; ?>_slot_settings" data-slot-lines=<?php echo esc_attr(json_encode($slot_datas)); ?>>
+                    <table class="closingslotsrows widefat">
+                      <col style="width:2%">
+                      <col style="width:4%">
+                      <col style="width:45%">
+                      <col style="width:4%;">
+                      <col style="width:45%;">
+                      <tbody>
+                        <?php $wp_locale = new WP_Locale; ?>
+                        <tr>
+                          <td colspan="5" class="add-slot-buttons">
+                            <a href="#" class="add button"><?php _e('Add New Slot', 'chronopost'); ?></a>
+                            <a href="#" class="delete button"><?php _e('Delete Selected Slot', 'chronopost'); ?></a>
+                          </td>
+                        </tr>
+                      </tbody>
+                    </table>
+                  </td>
+                </tr>
+                <?php
+                return ob_get_clean();
+            }
+      
+            public function load_frontend_hooks()
+            {
+                if ($this->settings['enabled']) {
+                    add_action('woocommerce_review_order_before_payment', array($this, 'rdv_fancybox'));
+                }
+            }
+
+            public function getSearchDeliverySlot()
+            {
+                /* appel WS SearchDeliverySlot pour récupérer les créneaux de livraison permettant de construire le semainier */
+                $ws = new Chronopost_Webservice();
+                return $ws->getSearchDeliverySlot($this->id);
+            }
+      
+            public function rdv_fancybox()
+            {
+        
+                // Only available on checkout page
+                if (!is_checkout()) {
+                    return false;
+                }
+
+                $delivery_slots = $this->getSearchDeliverySlot();
+
+                set_query_var('shipping_method_id', $this->id);
+                set_query_var('_creneaux', $delivery_slots ? $delivery_slots->return->slotList : false);
+                set_query_var('meshCode', $delivery_slots ? $delivery_slots->return->meshCode : false);
+                set_query_var('transactionID', $delivery_slots ? $delivery_slots->return->transactionID : false);
+                set_query_var('table_slots', get_option($this->id . '_table_slots', false));
+                set_query_var('cost_levels', get_option($this->id . '_cost_levels', false));
+
+                if ($overridden_template = locate_template('chronopost/chronoprecise.php')) {
+                    load_template($overridden_template);
+                } else {
+                    load_template(CHRONO_PLUGIN_PATH . '/templates/chronoprecise.php');
+                }
+            }
+        }
+    }
+}
+
+add_action('woocommerce_shipping_init', 'chronoprecise_init');
+
+function add_chronoprecise($methods)
+{
+    $methods['chronoprecise'] = 'WC_ChronoPrecise';
+    return $methods;
+}
+
+add_filter('woocommerce_shipping_methods', 'add_chronoprecise');
+
+add_action('woocommerce_after_shipping_rate', 'chrono_add_select_rdv_link', 10, 2);
+
+function chrono_add_select_rdv_link($method, $index)
+{
+    if ($method->id == 'chronoprecise' && is_checkout()) {
+        echo '<div class="appointment-link">';
+        if (array_key_exists('post_data', $_POST) && $_POST['post_data'] != '') {
+            $post_datas = chrono_get_post_datas($_POST['post_data']);
+            if (array_key_exists('chronopostprecise_creneaux_info', $post_datas) && $post_datas['chronopostprecise_creneaux_info'] != '') {
+                $appointment_date = chronoprecise_format_appointment_date((array)$post_datas['chronopostprecise_creneaux_info']);
+                echo" <small class=\"appointment-selected\">";
+                printf(__('Appointment for delivery on %s between %s and %s', 'chronopost'), $appointment_date['date'], $appointment_date['startHour'], $appointment_date['endHour']);
+                echo "</small>";
+                echo ' <a href="javascript:;">' . __('Edit', 'chronopost') . '</a>';
+            } else {
+                echo '<a href="javascript:;">' . __('Select an appointment', 'chronopost') . '</a>';
+            }
+        } else {
+            echo '<a href="javascript:;">' . __('Select an appointment', 'chronopost') . '</a>';
+        }
+        echo '</div>';
+    }
+}
+
+function action_woocommerce_checkout_update_order_review($order)
+{
+    if (array_key_exists('shipping_method', $_POST) && $_POST['shipping_method'][0] == 'chronoprecise') {
+        $chronoprecise_post_datas = chrono_get_post_datas($order);
+        $chronoprecise_hash = 'wc_chronoprecise_' . md5(json_encode($chronoprecise_post_datas['chronopostprecise_creneaux_info']) . WC_Cache_Helper::get_transient_version('shipping'));
+        $stored_appointement = WC()->session->get('chronoprecise_appointment_datas');
+
+        if (! is_array($stored_appointement) || $chronoprecise_hash !== $stored_appointement['appointment_hash'] || 'yes' === get_option('woocommerce_shipping_debug_mode', 'no')) {
+            $packages = WC()->cart->get_shipping_packages();
+
+            // Calculate costs for passed packages
+            foreach ($packages as $package_key => $package_to_hash) {
+                // Check if we need to recalculate shipping for this package
+        
+                // Remove data objects so hashes are consistent
+                foreach ($package_to_hash['contents'] as $item_id => $item) {
+                    unset($package_to_hash['contents'][ $item_id ]['data']);
+                }
+
+                $package_hash = 'wc_ship_' . md5(json_encode($package_to_hash) . WC_Cache_Helper::get_transient_version('shipping'));
+                $session_key  = 'shipping_for_package_' . $package_key;
+                unset(WC()->session->$session_key);
+
+                // Store in session to avoid recalculation
+                WC()->session->set('chronoprecise_appointment_datas', array(
+                    'appointment_hash' => $chronoprecise_hash
+                ));
+            }
+        }
+    }
+}
+add_action('woocommerce_checkout_update_order_review', 'action_woocommerce_checkout_update_order_review', 10, 1);
+
+add_filter('woocommerce_order_shipping_to_display', 'add_chronoprecise_extra_shipping_info', 10, 2);
+
+function chronoprecise_format_appointment_date($appointment_datas = array())
+{
+    $_date = new DateTime($appointment_datas['deliveryDate']);
+    $_date->setTimeZone(new DateTimeZone(chrono_get_timezone()));
+    $date = $_date->format('d/m/Y');
+
+    $startHour = str_pad($appointment_datas['startHour'], 2, '0', STR_PAD_LEFT);
+    $startMinutes = str_pad($appointment_datas['startMinutes'], 2, '0', STR_PAD_LEFT);
+    $endHour = str_pad($appointment_datas['endHour'], 2, '0', STR_PAD_LEFT);
+    $endMinutes = str_pad($appointment_datas['endMinutes'], 2, '0', STR_PAD_LEFT);
+
+    return array(
+        'date' => $date,
+        'startHour' => $startHour.':'.$startMinutes,
+        'endHour' => $endHour.':'.$endMinutes
+    );
+}
+
+
+function add_chronoprecise_extra_shipping_info($shipping, $_order)
+{
+    $shipping_methods = $_order->get_shipping_methods();
+    if (is_array($shipping_methods)) {
+        $shipping_method = array_shift($shipping_methods);
+        $shipping_method_id = $shipping_method['method_id'];
+    }
+    if ($shipping_method_id == 'chronoprecise') {
+        $appointment_details = get_post_meta($_order->get_id(), '_shipping_method_chronoprecise');
+        if (is_array($appointment_details)) {
+            $appointment_details = array_shift($appointment_details);
+        }
+    
+        $appointment_date = chronoprecise_format_appointment_date($appointment_details);
+
+        $shipping .= " <small>(";
+        $shipping .= sprintf(__('Appointment for delivery on %s between %s and %s', 'chronopost'), $appointment_date['date'], $appointment_date['startHour'], $appointment_date['endHour']);
+        $shipping .= ")</spall>";
+    }
+    return $shipping;
+}
+
+add_action('wp_ajax_load_chronoprecise_appointment', 'ajax_load_chronoprecise_appointment');
+add_action('wp_ajax_nopriv_load_chronoprecise_appointment', 'ajax_load_chronoprecise_appointment');
+
+function ajax_load_chronoprecise_appointment()
+{
+    $response['data'] = chronoprecise_async_load_fancybox($_POST['method_id']);
+    $response['status'] = 'success';
+    echo wp_send_json($response);
+    die();
+}
+
+function chronoprecise_async_load_fancybox($method_id)
+{
+    // Only available on checkout page
+    $ws = new Chronopost_Webservice();
+    $delivery_slots = $ws->getSearchDeliverySlot($method_id);
+    set_query_var('shipping_method_id', $method_id);
+    if (!$delivery_slots) {
+        set_query_var('_creneaux', false);
+    } else {
+        set_query_var('shipping_method_id', $method_id);
+        set_query_var('_creneaux', $delivery_slots ? $delivery_slots->return->slotList : false);
+        set_query_var('meshCode', $delivery_slots ? $delivery_slots->return->meshCode : false);
+        set_query_var('transactionID', $delivery_slots ? $delivery_slots->return->transactionID : false);
+        set_query_var('table_slots', get_option($method_id . '_table_slots', false));
+        set_query_var('cost_levels', get_option($method_id . '_cost_levels', false));
+    }
+
+    ob_start();
+
+    if ($overridden_template = locate_template('chronopost/chronoprecise.php')) {
+        load_template($overridden_template);
+    } else {
+        load_template(CHRONO_PLUGIN_PATH . '/templates/chronoprecise.php');
+    }
+    $output = ob_get_contents();
+    ob_end_clean();
+    return $output;
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/products/chronorelais.php b/wp-content/plugins/woocommerce-chronopost/includes/products/chronorelais.php
new file mode 100755 (executable)
index 0000000..cfe6af5
--- /dev/null
@@ -0,0 +1,301 @@
+<?php
+/**
+ *
+ * Chronopost 10 offer
+ *
+ * @since      1.0.0
+ * @package    Chronopost
+ * @subpackage Chronopost/includes/products
+ * @author     Adexos <contact@adexos.fr>
+ */
+
+function chronorelais_init()
+{
+    if (! class_exists('WC_Chronorelais')) {
+        class WC_Chronorelais extends WC_Chronopost_Product
+        {
+            public $_chronorelais;
+            public $_chronorelay_id;
+
+            public function shipping_method_setting()
+            {
+                $this->id                 = 'chronorelais'; // Id for your shipping method. Should be unique.
+                $this->pretty_title       = __('Express delivery in Pickup relay', 'chronopost');  // Title shown in admin
+                $this->title       = __('Chrono Relay', 'chronopost');  // Title shown in admin
+                $this->method_title       = __('Chrono Relay', 'chronopost');  // Title shown in admin
+                $this->method_description = __('In relay Pickup within 24h! Order delivered the next day in the pickup relay of your choice, among 7500 points spread all over France.', 'chronopost'); // Description shown in admin
+                $this->product_code = '86';
+                $this->product_code_str = 'PR';
+            }
+
+            public function load_frontend_hooks()
+            {
+                if ($this->settings['enabled']) {
+                    add_action('woocommerce_review_order_before_payment', array($this, 'relay_fancybox'));
+                }
+            }
+
+            public function custom_actions()
+            {
+                add_action('woocommerce_checkout_update_order_meta', array($this, 'save_shipping_method_chronorelais'), 10, 1);
+                add_action('wp_ajax_load_chronorelais_picker', array($this, 'ajax_load_chronorelais_picker'));
+                add_action('wp_ajax_nopriv_load_chronorelais_picker', array($this, 'ajax_load_chronorelais_picker'));
+            }
+
+            public function ajax_load_chronorelais_picker()
+            {
+                $this->relay_fancybox();
+            }
+
+            public function extra_form_fields()
+            {
+                unset($this->form_fields['deliver_on_saturday']);
+                $this->form_fields['can_change_postcode'] = array(
+                    'title'            => __('Can change postcode ?', 'chronopost'),
+                    'type'                     => 'checkbox',
+                    'label'            => __('Allow the user to change the postcode on the map', 'chronopost'),
+                    'default'          => 'yes'
+                );
+                $this->form_fields['max_distance_search'] = array(
+                    'title'            => __('Max distance search', 'chronopost'),
+                    'type'                     => 'number',
+                    'default'          => '15'
+                );
+                $this->form_fields['max_pickup_relay_number'] = array(
+                    'title'            => __('Max pickup relay number', 'chronopost'),
+                    'type'                     => 'number',
+                    'default'          => '5'
+                );
+                $this->form_fields['can_show_googlemap'] = array(
+                    'title'            => __('Enable Google Map ?', 'chronopost'),
+                    'type'                     => 'checkbox',
+                    'label'            => __('Activate the pickup relays choice on Google Map', 'chronopost'),
+                    'default'          => 'yes'
+                );
+            }
+
+            public function save_shipping_method_chronorelais($order_id)
+            {
+                $shipping_method = false;
+                if (in_array($_POST['shipping_method'][0], array('chronorelais', 'chronorelaiseurope'))) {
+                    $shipping_method = $_POST['shipping_method'][0];
+                }
+
+                if (!$shipping_method) {
+                    return;
+                }
+
+                if ($shipping_method && empty($_POST['shipping_method_chronorelais'])) {
+                    throw new Exception(sprintf(__('Please <a href="#container-method-%s">select a pickup relay</a>', 'chronopost'), $this->id));
+                    die();
+                }
+                // return new WP_Error( 'checkout-error', $e->getMessage() );
+                if (! empty($_POST['shipping_method_chronorelais'])) {
+                    $relay_point_id = sanitize_text_field($_POST['shipping_method_chronorelais']);
+                    $ws = new Chronopost_Webservice();
+                    $pickup_relay_datas = $ws->getDetailRelaisPoint($relay_point_id);
+                    
+                    add_action('woocommerce_get_order_address', array($this, 'before_shipping'));
+                    
+                    $_order = new WC_Order($order_id);
+                    $_order->set_shipping_company(chrono_format_relay_address($pickup_relay_datas->nom));
+                    $_order->set_shipping_address_1(chrono_format_relay_address($pickup_relay_datas->adresse1));
+                    $shipping_address_2 = $pickup_relay_datas->nom;
+                    if ($pickup_relay_datas->adresse3 != '') {
+                        $shipping_address_2 =  "\n" . $pickup_relay_datas->adresse3;
+                    }
+                    $_order->set_shipping_address_2(chrono_format_relay_address($shipping_address_2));
+                    $_order->set_shipping_postcode($pickup_relay_datas->codePostal);
+                    $_order->set_shipping_city(chrono_format_relay_address($pickup_relay_datas->localite));
+                    $_order->set_shipping_country($pickup_relay_datas->codePays);
+                    $_order->save();
+
+                    $pickup_relay_address = array();
+                    if (trim($pickup_relay_datas->adresse1) != '') {
+                        $pickup_relay_address[] = chrono_format_relay_address($pickup_relay_datas->adresse1);
+                    }
+                    if (trim($pickup_relay_datas->adresse2) != '') {
+                        $pickup_relay_address[] = chrono_format_relay_address($pickup_relay_datas->adresse2);
+                    }
+                    if (trim($pickup_relay_datas->adresse3) != '') {
+                        $pickup_relay_address[] = chrono_format_relay_address($pickup_relay_datas->adresse3);
+                    }
+
+                    $pickup_relay = array(
+                        'id' => $pickup_relay_datas->identifiant,
+                        'type' => $pickup_relay_datas->typeDePoint,
+                        'name' => chrono_format_relay_address($pickup_relay_datas->nom),
+                        'address' => implode(' ', $pickup_relay_address),
+                        'postcode' => $pickup_relay_datas->codePostal,
+                        'city' => chrono_format_relay_address($pickup_relay_datas->localite),
+                        'country' => $pickup_relay_datas->codePays,
+                        'google_map_url' => $pickup_relay_datas->urlGoogleMaps
+                    );
+
+                    update_post_meta($order_id, '_shipping_method_chronorelais', $pickup_relay);
+                }
+            }
+
+            public function getChronoRelaisMethod()
+            {
+                $packages = WC()->shipping->get_packages();
+                if (!empty($packages[0]['rates']) && array_key_exists($this->id, $packages[0]['rates'])) {
+                    return $this->id;
+                }
+            }
+
+            public function relay_fancybox()
+            {
+                
+                // Only available on checkout page
+                if (!is_checkout()) {
+                    return false;
+                }
+
+                if ($this->id == $this->getChronoRelaisMethod()) {
+                    set_query_var('shipping_method_id', $this->id);
+                    set_query_var('pickup_relays', $this->getChronorelais());
+
+                    if ($overridden_template = locate_template('chronopost/chronorelais.php')) {
+                        load_template($overridden_template);
+                    } else {
+                        load_template(CHRONO_PLUGIN_PATH . '/templates/chronorelais.php');
+                    }
+                }
+            }
+
+            public function getChronorelais()
+            {
+                $ws = new Chronopost_Webservice();
+                if (isset($_GET['mappostalcode'])) {
+                    $webservbt =  $ws->getPointsRelaisByCp($_GET['mappostalcode']);
+                } else {
+                    $shippingMethodCode = '';
+                    if (isset($params['shipping_method'])) {
+                        $shippingMethodCode = explode("_", $params['shipping_method']);
+                        $shippingMethodCode = $shippingMethodCode[0];
+                    }
+                    $webservbt = $ws->getPointRelaisByAddress($this->id);
+                }
+                $this->_chronorelais = $webservbt;
+
+                return $this->_chronorelais;
+            }
+        }
+    }
+}
+
+add_action('woocommerce_shipping_init', 'chronorelais_init');
+
+function add_chronorelais($methods)
+{
+    $methods['chronorelais'] = 'WC_Chronorelais';
+    return $methods;
+}
+
+add_filter('woocommerce_shipping_methods', 'add_chronorelais');
+
+
+// ajax reload force this method to be placed outside the WC_Chronorelais class
+
+add_action('woocommerce_after_shipping_rate', 'add_picking_relay_map_link', 10, 2);
+
+function add_picking_relay_map_link($method, $index)
+{
+    if (($method->id == 'chronorelais' || $method->id == 'chronorelaiseurope') && is_checkout()) {
+        echo '<div class="pickup-relay-link"><a href="javascript:;">' . __('Select a pickup relay', 'chronopost') . '</a></div>';
+    }
+}
+
+add_filter('woocommerce_order_shipping_to_display', 'add_chronorelais_extra_shipping_info', 10, 2);
+
+function add_chronorelais_extra_shipping_info($shipping, $_order)
+{
+    $shipping_methods = $_order->get_shipping_methods();
+    if (is_array($shipping_methods)) {
+        $shipping_method = array_shift($shipping_methods);
+        $shipping_method_id = $shipping_method['method_id'];
+    }
+    if ($shipping_method_id == 'chronorelais' || $shipping_method_id == 'chronorelaiseurope') {
+        $pickup_relay_details = get_post_meta($_order->get_id(), '_shipping_method_chronorelais');
+        if (is_array($pickup_relay_details)) {
+            $pickup_relay_details = array_shift($pickup_relay_details);
+        }
+        $shipping .= " <small>";
+        $shipping .= "({$pickup_relay_details['name']}, {$pickup_relay_details['address']} {$pickup_relay_details['postcode']} {$pickup_relay_details['city']}";
+        if (!is_checkout() && $pickup_relay_details['google_map_url'] != "") {
+            $shipping .= " - <a href=\"{$pickup_relay_details['google_map_url']}\">" . __('View on Google Map', 'chronopost') . "</a>";
+        }
+        $shipping .= ")</spall>";
+    }
+    return $shipping;
+}
+
+add_action('wp_ajax_nopriv_chronopost_pickup_relays', 'ajax_get_chronopost_pickup_relays');
+add_action('wp_ajax_chronopost_pickup_relays', 'ajax_get_chronopost_pickup_relays');
+
+function ajax_get_chronopost_pickup_relays()
+{
+    $nonce = $_POST['chrono_nonce'];
+    // check to see if the submitted nonce matches with the
+    // generated nonce we created earlier
+    if (! wp_verify_nonce($nonce, 'chronopost_ajax')) {
+        die('Busted!');
+    }
+
+    $ws = new Chronopost_Webservice();
+    if (isset($_POST['postcode']) && $_POST['postcode'] !== 'false') {
+        $webservbt =  $ws->getPointsRelaisByCp($_POST['postcode']);
+    } else {
+        if (isset($_POST['method_id'])) {
+            $shippingMethodCode = explode("_", $_POST['method_id']);
+            $shippingMethodCode = $shippingMethodCode[0];
+            $webservbt = $ws->getPointRelaisByAddress($shippingMethodCode);
+        }
+    }
+    $response['data'] = $webservbt;
+    $response['status'] = 'success';
+
+    echo wp_send_json($response);
+}
+
+add_action('wp_ajax_load_chronorelais_picker', 'ajax_load_chronorelais_picker');
+add_action('wp_ajax_nopriv_load_chronorelais_picker', 'ajax_load_chronorelais_picker');
+
+function ajax_load_chronorelais_picker()
+{
+    $datas = chronorelais_async_load_fancybox($_POST['method_id']);
+
+    $response['data'] = !$datas ? __('No relay points found. Please check your address information.', 'chronopost') : $datas;
+
+    $response['status'] = !$datas ? 'error' : 'success';
+    echo wp_send_json($response);
+    die();
+}
+
+function chronorelais_async_load_fancybox($method_id)
+{
+       $shipping = new WC_Chronorelais();
+    $ws = new Chronopost_Webservice();
+    $pickup_relays = WC()->customer->get_shipping_address() ? $ws->getPointRelaisByAddress($shipping) : $ws->getPointsRelaisByCp(WC()->customer->get_shipping_postcode());
+
+    if (!$pickup_relays) {
+        return false;
+    }
+
+    set_query_var('shipping_method_id', $method_id);
+
+    if ($pickup_relays) {
+        set_query_var('pickup_relays', $pickup_relays);
+    }
+
+    ob_start();
+    if ($overridden_template = locate_template('chronopost/chronorelais.php')) {
+        load_template($overridden_template);
+    } else {
+        load_template(CHRONO_PLUGIN_PATH . '/templates/chronorelais.php');
+    }
+    $output = ob_get_contents();
+    ob_end_clean();
+    return $output;
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/products/chronorelaiseurope.php b/wp-content/plugins/woocommerce-chronopost/includes/products/chronorelaiseurope.php
new file mode 100755 (executable)
index 0000000..50759a7
--- /dev/null
@@ -0,0 +1,48 @@
+<?php
+/**
+ *
+ * Chronopost 18 offer
+ *
+ * @since      1.0.0
+ * @package    Chronopost
+ * @subpackage Chronopost/includes/products
+ * @author     Adexos <contact@adexos.fr>
+ */
+function chronorelaiseurope_init()
+{
+    if (! class_exists('WC_ChronoRelaisEurope')) {
+        class WC_ChronoRelaisEurope extends WC_Chronorelais
+        {
+            private $chrono_settings;
+
+            public $tracking_url = 'http://www.chronopost.fr/expedier/inputLTNumbersNoJahia.do?lang=fr_FR&listeNumeros={tracking_number}';
+            
+            public function shipping_method_setting()
+            {
+                $this->id                 = 'chronorelaiseurope'; // Id for your shipping method. Should be uunique.
+                $this->pretty_title       = __('Chronopost - Express delivery in Pickup relay', 'chronopost');  // Title shown in admin
+                $this->title       = __('Chrono Relais Europe', 'chronopost');  // Title shown in admin
+                $this->method_title       = __('Chrono Relais Europe', 'chronopost');  // Title shown in admin
+                $this->method_description = __('In relay Pickup! Order delivered in the pickup relay of your choice', 'chronopost'); // Description shown in admin
+                $this->product_code = '49';
+                $this->product_code_str = 'PRU';
+            }
+
+            public function extra_form_fields()
+            {
+                parent::extra_form_fields();
+                unset($this->form_fields['deliver_on_saturday']);
+            }
+        }
+    }
+}
+
+add_action('woocommerce_shipping_init', 'chronorelaiseurope_init');
+
+function add_chronorelaiseurope($methods)
+{
+    $methods['chronorelaiseurope'] = 'WC_ChronoRelaisEurope';
+    return $methods;
+}
+
+add_filter('woocommerce_shipping_methods', 'add_chronorelaiseurope');
diff --git a/wp-content/plugins/woocommerce-chronopost/includes/products/chronosameday.php b/wp-content/plugins/woocommerce-chronopost/includes/products/chronosameday.php
new file mode 100755 (executable)
index 0000000..2e7acce
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+/**
+ *
+ * Chronopost Sameday offer
+ *
+ * @since      1.0.0
+ * @package    Chronopost
+ * @subpackage Chronopost/includes/products
+ * @author     Adexos <contact@adexos.fr>
+ */
+function chronosameday_init()
+{
+    if (! class_exists('WC_Chronosameday')) {
+        class WC_Chronosameday extends WC_Chronopost_Product
+        {
+            public function shipping_method_setting()
+            {
+                $this->id                 = 'chronosameday'; // Id for your shipping method. Should be uunique.
+                $this->pretty_title       = __('Same-day express delivery at home', 'chronopost');  // Title shown in admin
+                $this->title       = __('Chrono Sameday', 'chronopost');  // Title shown in admin
+                $this->method_title       = __('Chrono Sameday', 'chronopost');  // Title shown in admin
+                $this->method_description = __('Parcels delivered to Europe in 1 to 3 days', 'chronopost'); // Description shown in admin
+                $this->product_code = '4I';
+                $this->product_code_str = 'SMD';
+            }
+      
+            public function extra_form_fields()
+            {
+                $this->form_fields['delivery_time_limit'] = array(
+                    'title'            => __('Disable after', 'chronopost'),
+                    'type'                     => 'select',
+                    'default'          => '15:00',
+                    'options' => array(
+                      '07:00' => '7:00',
+                      '07:30' => '7:30',
+                      '08:00' => '8:00',
+                      '08:30' => '8:30',
+                      '09:00' => '9:00',
+                      '09:30' => '9:30',
+                      '10:00' => '10:00',
+                      '10:30' => '10:30',
+                      '11:00' => '11:00',
+                      '11:30' => '11:30',
+                      '12:00' => '12:00',
+                      '12:30' => '12:30',
+                      '13:00' => '13:00',
+                      '13:30' => '13:30',
+                      '14:00' => '14:00',
+                      '14:30' => '14:30',
+                      '15:00' => '15:00',
+                    )
+                );
+            }
+  
+            public function calculate_shipping($package = array())
+            {
+                $timezone = chrono_get_timezone();
+
+                $delivery_time_limit = new DateTime(date('Y-m-d') . chrono_get_method_settings($this->id, 'delivery_time_limit'), new DateTimeZone($timezone));
+                $now = new DateTime('NOW', new DateTimeZone($timezone));
+      
+                if ($now >= $delivery_time_limit) {
+                    return false;
+                }
+
+                $rate = $this->get_shipping_rate($package);
+                $this->add_rate($rate);
+            }
+        }
+    }
+}
+
+add_action('woocommerce_shipping_init', 'chronosameday_init');
+
+function add_chronosameday($methods)
+{
+    $methods['chronosameday'] = 'WC_Chronosameday';
+    return $methods;
+}
+
+add_filter('woocommerce_shipping_methods', 'add_chronosameday');
diff --git a/wp-content/plugins/woocommerce-chronopost/index.php b/wp-content/plugins/woocommerce-chronopost/index.php
new file mode 100755 (executable)
index 0000000..e71af0e
--- /dev/null
@@ -0,0 +1 @@
+<?php // Silence is golden
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/languages/chronopost-fr_FR.mo b/wp-content/plugins/woocommerce-chronopost/languages/chronopost-fr_FR.mo
new file mode 100755 (executable)
index 0000000..3c03e72
Binary files /dev/null and b/wp-content/plugins/woocommerce-chronopost/languages/chronopost-fr_FR.mo differ
diff --git a/wp-content/plugins/woocommerce-chronopost/languages/chronopost-fr_FR.po b/wp-content/plugins/woocommerce-chronopost/languages/chronopost-fr_FR.po
new file mode 100755 (executable)
index 0000000..9c6b2a1
--- /dev/null
@@ -0,0 +1,1590 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Chronopost\n"
+"POT-Creation-Date: 2019-03-05 09:32+0100\n"
+"PO-Revision-Date: 2019-03-05 09:33+0100\n"
+"Last-Translator: Olivier Gorzalka <olivier@behaba.com>\n"
+"Language-Team: Adexos <contact@adexos.fr>\n"
+"Language: fr_FR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Poedit 2.0.6\n"
+"X-Poedit-Basepath: ..\n"
+"X-Poedit-Flags-xgettext: --add-comments=translators:\n"
+"X-Poedit-WPHeader: chronopost.php\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
+"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
+"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
+"X-Poedit-SearchPath-0: .\n"
+"X-Poedit-SearchPathExcluded-0: *.js\n"
+
+#: admin/class-chronopost-admin.php:114
+msgid "Select a time"
+msgstr "Sélectionner une heure"
+
+#: admin/class-chronopost-admin.php:116
+#: admin/partials/chronopost-admin-display.php:665
+msgid "To"
+msgstr "Au"
+
+#: admin/class-chronopost-admin.php:117
+#: admin/partials/chronopost-admin-display.php:656
+msgid "From"
+msgstr "Du"
+
+#: admin/class-chronopost-admin.php:118
+msgid "Min weight"
+msgstr "Poids min"
+
+#: admin/class-chronopost-admin.php:119
+msgid "Max weight"
+msgstr "Poids max"
+
+#: admin/class-chronopost-admin.php:120
+msgid "Shipping Rate"
+msgstr "Tarif de livraison"
+
+#: admin/class-chronopost-admin.php:121
+msgid "Delete selected rates"
+msgstr "Supprimer les tarifs sélectionnés"
+
+#: admin/class-chronopost-admin.php:122
+msgid "Add new rate"
+msgstr "Ajouter un tarif"
+
+#. Plugin Name of the plugin/theme
+#: admin/class-chronopost-admin.php:193
+#: includes/class-chronopost-product.php:75
+msgid "Chronopost"
+msgstr "Chronopost"
+
+#: admin/class-chronopost-admin.php:232
+msgid "Shipment"
+msgstr "Expédition"
+
+#: admin/class-chronopost-admin.php:245
+#: admin/partials/chronopost-admin-shipping.php:190
+msgid "Download label"
+msgid_plural "Download labels"
+msgstr[0] "Télécharger l’étiquette"
+msgstr[1] "Télécharger les étiquettes"
+
+#: admin/class-chronopost-admin.php:251
+#: admin/partials/chronopost-admin-shipping.php:58
+msgid "Use contract"
+msgstr "Utiliser contrat"
+
+#: admin/class-chronopost-admin.php:297
+msgid "Advalorem insurance"
+msgstr "Assurance Ad Valorem"
+
+#: admin/class-chronopost-admin.php:300 admin/class-chronopost-admin.php:327
+#: admin/partials/chronopost-admin-display.php:634
+#: admin/partials/chronopost-admin-display.php:710
+#: admin/partials/chronopost-admin-shipping.php:171
+#: includes/class-chronopost-product.php:458
+#: includes/products/chronoprecise.php:172
+msgid "No"
+msgstr "Non"
+
+#: admin/class-chronopost-admin.php:301 admin/class-chronopost-admin.php:328
+#: admin/partials/chronopost-admin-display.php:635
+#: admin/partials/chronopost-admin-display.php:711
+#: admin/partials/chronopost-admin-shipping.php:172
+#: includes/class-chronopost-product.php:459
+#: includes/products/chronoprecise.php:171
+msgid "Yes"
+msgstr "Oui"
+
+#: admin/class-chronopost-admin.php:306
+msgid "Insurance amount"
+msgstr "Montant de l’assurance"
+
+#: admin/class-chronopost-admin.php:316
+#: admin/partials/chronopost-admin-shipping.php:63
+msgid "Ship On Saturday"
+msgstr "Livraison le samedi"
+
+#: admin/class-chronopost-admin.php:331
+#: admin/partials/chronopost-admin-shipping.php:175
+msgid "Not active"
+msgstr "Désactivée"
+
+#: admin/class-chronopost-admin.php:336
+#: admin/partials/chronopost-admin-shipping.php:59
+msgid "Parcels number"
+msgstr "Nombre colis"
+
+#: admin/class-chronopost-admin.php:345
+msgid "Parcels dimensions"
+msgstr "Dimensions colis"
+
+#: admin/class-chronopost-admin.php:380
+#: admin/partials/chronopost-admin-shipping.php:19
+#: admin/partials/chronopost-admin-shipping.php:191
+#: admin/partials/chronopost-admin-shipping.php:193
+msgid "Generate label"
+msgstr "Générer l’étiquette"
+
+#: admin/class-chronopost-admin.php:390 admin/class-chronopost-admin.php:398
+#: admin/partials/chronopost-admin-shipping.php:204
+msgid "Return label"
+msgstr "Étiquette de retour"
+
+#: admin/class-chronopost-admin.php:400
+#: admin/partials/chronopost-admin-shipping.php:206
+msgid "Generate return label"
+msgstr "Créer le retour"
+
+#: admin/class-chronopost-admin.php:569
+msgid "Valid username or password"
+msgstr "Nom d’utilisateur et mot de passe valides"
+
+#: admin/class-chronopost-admin.php:578
+msgid ""
+"A system error occured. Please contact the Chronopost support if the problem "
+"persists."
+msgstr ""
+"Une erreur système s’est produite. Contactez le support Chronopost si le "
+"problème persiste."
+
+#: admin/partials/chronopost-admin-daily-docket.php:13
+msgid "Chronopost Daily Dockets"
+msgstr "Chronopost Bordereaux de fin de journée"
+
+#: admin/partials/chronopost-admin-daily-docket.php:17
+#: admin/partials/chronopost-admin-exports.php:17
+#: admin/partials/chronopost-admin-shipping.php:17
+msgid "Select bulk action"
+msgstr "Sélectionnez l’action groupée"
+
+#: admin/partials/chronopost-admin-daily-docket.php:18
+#: admin/partials/chronopost-admin-exports.php:18
+#: admin/partials/chronopost-admin-shipping.php:18
+msgid "Bulk Actions"
+msgstr "Actions groupées"
+
+#: admin/partials/chronopost-admin-daily-docket.php:19
+msgid "Export daily dockets"
+msgstr "Exporter les bordereaux de fin de journée"
+
+#: admin/partials/chronopost-admin-daily-docket.php:21
+#: admin/partials/chronopost-admin-exports.php:21
+#: admin/partials/chronopost-admin-shipping.php:22
+msgid "Apply"
+msgstr "Appliquer"
+
+#: admin/partials/chronopost-admin-daily-docket.php:30
+#: admin/partials/chronopost-admin-daily-docket.php:120
+#: admin/partials/chronopost-admin-exports.php:30
+#: admin/partials/chronopost-admin-exports.php:125
+#: admin/partials/chronopost-admin-shipping.php:31
+#: admin/partials/chronopost-admin-shipping.php:223
+msgid "Previous page"
+msgstr "Page précédente"
+
+#: admin/partials/chronopost-admin-daily-docket.php:30
+#: admin/partials/chronopost-admin-daily-docket.php:120
+#: admin/partials/chronopost-admin-exports.php:30
+#: admin/partials/chronopost-admin-exports.php:125
+#: admin/partials/chronopost-admin-shipping.php:31
+#: admin/partials/chronopost-admin-shipping.php:223
+msgid "&laquo;"
+msgstr "&laquo;"
+
+#: admin/partials/chronopost-admin-daily-docket.php:31
+#: admin/partials/chronopost-admin-daily-docket.php:121
+#: admin/partials/chronopost-admin-exports.php:31
+#: admin/partials/chronopost-admin-exports.php:126
+#: admin/partials/chronopost-admin-shipping.php:32
+#: admin/partials/chronopost-admin-shipping.php:224
+msgid "Next page"
+msgstr "Page suivante"
+
+#: admin/partials/chronopost-admin-daily-docket.php:31
+#: admin/partials/chronopost-admin-daily-docket.php:121
+#: admin/partials/chronopost-admin-exports.php:31
+#: admin/partials/chronopost-admin-exports.php:126
+#: admin/partials/chronopost-admin-shipping.php:32
+#: admin/partials/chronopost-admin-shipping.php:224
+msgid "&raquo;"
+msgstr "&raquo;"
+
+#: admin/partials/chronopost-admin-daily-docket.php:32
+#: admin/partials/chronopost-admin-daily-docket.php:122
+#: admin/partials/chronopost-admin-exports.php:32
+#: admin/partials/chronopost-admin-exports.php:127
+#: admin/partials/chronopost-admin-shipping.php:33
+#: admin/partials/chronopost-admin-shipping.php:225
+msgid "Page"
+msgstr "Page"
+
+#: admin/partials/chronopost-admin-daily-docket.php:38
+#: admin/partials/chronopost-admin-daily-docket.php:128
+#: admin/partials/chronopost-admin-exports.php:38
+#: admin/partials/chronopost-admin-exports.php:133
+#: admin/partials/chronopost-admin-shipping.php:39
+#: admin/partials/chronopost-admin-shipping.php:231
+#, php-format
+msgid "%s item"
+msgid_plural "%s items"
+msgstr[0] "%s élément"
+msgstr[1] "%s éléments"
+
+#: admin/partials/chronopost-admin-daily-docket.php:49
+#: admin/partials/chronopost-admin-exports.php:49
+#: admin/partials/chronopost-admin-shipping.php:52
+msgid "Select all"
+msgstr "Tout sélectionner"
+
+#: admin/partials/chronopost-admin-daily-docket.php:52
+#: admin/partials/chronopost-admin-exports.php:52
+#: admin/partials/chronopost-admin-shipping.php:55
+#: includes/products/chronoprecise.php:199
+msgid "Status"
+msgstr "Statut"
+
+#: admin/partials/chronopost-admin-daily-docket.php:53
+#: admin/partials/chronopost-admin-exports.php:53
+#: admin/partials/chronopost-admin-shipping.php:56
+msgid "Order"
+msgstr "Commande"
+
+#: admin/partials/chronopost-admin-daily-docket.php:54
+#: admin/partials/chronopost-admin-exports.php:54
+#: admin/partials/chronopost-admin-shipping.php:57
+msgid "Shipped to"
+msgstr "Livrée à"
+
+#: admin/partials/chronopost-admin-daily-docket.php:55
+#: admin/partials/chronopost-admin-exports.php:55
+msgid "Date"
+msgstr "Date"
+
+#: admin/partials/chronopost-admin-daily-docket.php:68
+#: admin/partials/chronopost-admin-exports.php:69
+#: admin/partials/chronopost-admin-shipping.php:80
+#, php-format
+msgid "Select order #%s"
+msgstr "Sélectionner la commande #%s"
+
+#. translators: 1: first name 2: last name
+#: admin/partials/chronopost-admin-daily-docket.php:81
+#: admin/partials/chronopost-admin-exports.php:82
+#: admin/partials/chronopost-admin-shipping.php:93
+#, php-format
+msgctxt "full name"
+msgid "%1$s %2$s"
+msgstr ""
+
+#: admin/partials/chronopost-admin-daily-docket.php:85
+#: admin/partials/chronopost-admin-exports.php:86
+#: admin/partials/chronopost-admin-shipping.php:97
+msgid "Guest"
+msgstr "Invité"
+
+#: admin/partials/chronopost-admin-daily-docket.php:89
+#: admin/partials/chronopost-admin-exports.php:90
+#: admin/partials/chronopost-admin-shipping.php:101
+#, php-format
+msgid "%1$s by %2$s"
+msgstr "%1$s par %2$s"
+
+#: admin/partials/chronopost-admin-display.php:45
+msgid "You must define a minimun amount in order to enabled the insurance."
+msgstr ""
+"Vous devez définir un montant minimum pour pouvoir activer l’assurance."
+
+#: admin/partials/chronopost-admin-display.php:56
+msgid "TEST Contract"
+msgstr "Contrat TEST"
+
+#: admin/partials/chronopost-admin-display.php:74
+msgid "Chronopost notification about weight"
+msgstr "Notification Chronopost au sujet du poids"
+
+#: admin/partials/chronopost-admin-display.php:83
+msgid "Thank you for using the Chronopost plugin for WooCommerce!"
+msgstr "Merci d’utiliser le plugin Chronopost pour WooCommerce !"
+
+#: admin/partials/chronopost-admin-display.php:85
+#, php-format
+msgid "Don't forget to <a href=\"%s\">configure your Chronopost Settings.</a>"
+msgstr ""
+"N’oubliez pas de <a href=\"%s\">configurer vos paramètres Chronopost</a>"
+
+#: admin/partials/chronopost-admin-display.php:86
+#, php-format
+msgid "Start <a href=\"%s\">configuring your Chronopost delivery methods</a>"
+msgstr ""
+"Commencez à <a href=\"%s\">configurer vos méthodes de livraison Chronopost</"
+"a>"
+
+#: admin/partials/chronopost-admin-display.php:87
+msgid "Enjoy our plugin ;)"
+msgstr "Appréciez le plugin ;)"
+
+#: admin/partials/chronopost-admin-display.php:89
+msgid "The Chronopost Team"
+msgstr "L’équipe Chronopost"
+
+#: admin/partials/chronopost-admin-display.php:121
+#: admin/partials/chronopost-admin-display.php:122
+msgid "Shipments"
+msgstr "Expéditions"
+
+#: admin/partials/chronopost-admin-display.php:130
+#: admin/partials/chronopost-admin-display.php:131
+#: admin/partials/chronopost-admin-display.php:1121
+msgid "Import trackings"
+msgstr "Importer suivis colis"
+
+#: admin/partials/chronopost-admin-display.php:139
+#: admin/partials/chronopost-admin-display.php:140
+msgid "Daily docket"
+msgstr "Bordereaux de fin de journée"
+
+#: admin/partials/chronopost-admin-display.php:148
+#: admin/partials/chronopost-admin-display.php:149
+#: admin/partials/chronopost-admin-exports.php:19
+#: admin/partials/chronopost-admin-exports.php:112
+msgid "Export CSS"
+msgstr "Export CSS"
+
+#: admin/partials/chronopost-admin-display.php:169
+msgid "Accounts configuration"
+msgstr "Configuration des contrats"
+
+#: admin/partials/chronopost-admin-display.php:184
+msgid "Shipper address"
+msgstr "Adresse d'expédition"
+
+#: admin/partials/chronopost-admin-display.php:191
+#: admin/partials/chronopost-admin-display.php:294
+#: admin/partials/chronopost-admin-display.php:397
+msgid "Civility"
+msgstr "Civilité"
+
+#: admin/partials/chronopost-admin-display.php:199
+#: admin/partials/chronopost-admin-display.php:302
+#: admin/partials/chronopost-admin-display.php:405
+msgid "Name"
+msgstr "Raison sociale"
+
+#: admin/partials/chronopost-admin-display.php:207
+#: admin/partials/chronopost-admin-display.php:310
+#: admin/partials/chronopost-admin-display.php:413
+msgid "Name 2"
+msgstr "Raison sociale 2"
+
+#: admin/partials/chronopost-admin-display.php:215
+#: admin/partials/chronopost-admin-display.php:318
+#: admin/partials/chronopost-admin-display.php:421
+msgid "Address"
+msgstr "Adresse"
+
+#: admin/partials/chronopost-admin-display.php:223
+#: admin/partials/chronopost-admin-display.php:326
+#: admin/partials/chronopost-admin-display.php:429
+msgid "Address 2"
+msgstr "Adresse 2"
+
+#: admin/partials/chronopost-admin-display.php:231
+#: admin/partials/chronopost-admin-display.php:334
+#: admin/partials/chronopost-admin-display.php:437
+msgid "Zipcode"
+msgstr "Code postal"
+
+#: admin/partials/chronopost-admin-display.php:239
+#: admin/partials/chronopost-admin-display.php:342
+#: admin/partials/chronopost-admin-display.php:445
+msgid "City"
+msgstr "Ville"
+
+#: admin/partials/chronopost-admin-display.php:247
+#: admin/partials/chronopost-admin-display.php:350
+#: admin/partials/chronopost-admin-display.php:453
+msgid "Country"
+msgstr "Pays"
+
+#: admin/partials/chronopost-admin-display.php:255
+#: admin/partials/chronopost-admin-display.php:358
+#: admin/partials/chronopost-admin-display.php:461
+msgid "Contact name"
+msgstr "Nom du contact"
+
+#: admin/partials/chronopost-admin-display.php:263
+#: admin/partials/chronopost-admin-display.php:366
+#: admin/partials/chronopost-admin-display.php:469
+msgid "Email"
+msgstr "Email"
+
+#: admin/partials/chronopost-admin-display.php:271
+#: admin/partials/chronopost-admin-display.php:374
+#: admin/partials/chronopost-admin-display.php:477
+msgid "Phone"
+msgstr "Téléphone"
+
+#: admin/partials/chronopost-admin-display.php:279
+#: admin/partials/chronopost-admin-display.php:382
+#: admin/partials/chronopost-admin-display.php:485
+msgid "Mobile"
+msgstr "Portable"
+
+#: admin/partials/chronopost-admin-display.php:287
+msgid "Billing address"
+msgstr "Adresse de facturation"
+
+#: admin/partials/chronopost-admin-display.php:390
+msgid "Return address"
+msgstr "Adresse de retour"
+
+#: admin/partials/chronopost-admin-display.php:493
+msgid "Printing options"
+msgstr "Options d'impression"
+
+#: admin/partials/chronopost-admin-display.php:500
+msgid "Print Mode"
+msgstr "Mode d’impression"
+
+#: admin/partials/chronopost-admin-display.php:507
+msgid "Google Map Settings"
+msgstr "Paramètres Google Map"
+
+#: admin/partials/chronopost-admin-display.php:514
+msgid "Google Map Api Key"
+msgstr "Clé API Google Map"
+
+#: admin/partials/chronopost-admin-display.php:523
+msgid "Mailbox delivery option"
+msgstr "Option de dépôt en boîte aux lettres"
+
+#: admin/partials/chronopost-admin-display.php:530
+msgid "Enable bal option"
+msgstr "Activer l’option BAL"
+
+#: admin/partials/chronopost-admin-display.php:541
+msgid "Saturday shipping"
+msgstr "Livraison le samedi"
+
+#: admin/partials/chronopost-admin-display.php:548
+msgid "Slot when saturday option is enabled"
+msgstr "Créneau ou l’option samedi est activée"
+
+#: admin/partials/chronopost-admin-display.php:556
+msgid "Ad Valorem Insurance"
+msgstr "Assurance Ad Valorem"
+
+#: admin/partials/chronopost-admin-display.php:563
+msgid "Enable Ad Volorem Insurance"
+msgstr "Activer l’assurance Ad Valorem"
+
+#: admin/partials/chronopost-admin-display.php:571
+msgid "Minimum amount to be insured"
+msgstr "Montant minimum à assurer"
+
+#: admin/partials/chronopost-admin-display.php:579
+msgid "CSS Export Settings"
+msgstr "Paramètres export CSS"
+
+#: admin/partials/chronopost-admin-display.php:586
+msgid "File Extension"
+msgstr "Extension du fichier"
+
+#: admin/partials/chronopost-admin-display.php:594
+msgid "File charset"
+msgstr "Encodage du fichier"
+
+#: admin/partials/chronopost-admin-display.php:602
+msgid "End of line character"
+msgstr "Caractère de fin de ligne"
+
+#: admin/partials/chronopost-admin-display.php:610
+msgid "Field delimiter"
+msgstr "Délimitation des champs"
+
+#: admin/partials/chronopost-admin-display.php:618
+msgid "Field separator"
+msgstr "Séparateur des champs"
+
+#: admin/partials/chronopost-admin-display.php:627
+msgid "Reset form data"
+msgstr "Réinitialiser"
+
+#: admin/partials/chronopost-admin-display.php:688
+msgid ""
+"Offer to your customers the first Express delivery service with the official "
+"Chronopost module for WooCommerce. With Chronopost, your customer will have "
+"the choice of the main delivery modes within 24h : at home,  at a Pickup "
+"point or at the office !"
+msgstr ""
+"Avec le module officiel Chronopost pour WooCommerce, proposez les services "
+"du N°1 de la livraison Express à vos clients ! proposez les services du N°1 "
+"de la livraison Express à vos clients ! Avec ce module, proposez à vos "
+"clients le choix des principaux modes de livraison en moins de 24h : à "
+"domicile, en points relais ou encore au bureau !"
+
+#: admin/partials/chronopost-admin-display.php:690
+msgid ""
+"Your customers will also have the rdv service :  They are notified by email "
+"or SMS the day before the delivery and can reschedule the delivery or ask to "
+"be delivered at a pickup point among more than 17 000 points (post offices, "
+"Pickup relay or Chronopost agencies)."
+msgstr ""
+"Vos clients bénéficient également de Predict : ils sont ainsi "
+"automatiquement avertis par email et SMS la veille de la livraison et "
+"peuvent s’ils le souhaitent reprogrammer leur livraison ou demander une mise "
+"à disposition ultérieure dans le point de retrait de leur choix, parmi plus "
+"de 17 000 points (bureaux de poste, points relais ou agences Chronopost)."
+
+#: admin/partials/chronopost-admin-display.php:692
+msgid ""
+"Expand your business internationally with Chronopost international delivery "
+"service which is included in this module."
+msgstr ""
+"Développez votre activité à l’international en un clin d’oeil : les services "
+"de livraison Express de Chronopost pour l’international sont également "
+"inclus."
+
+#: admin/partials/chronopost-admin-display.php:694
+msgid ""
+"Find all these services in the Chronopost e-commerce pack : MyChrono. To "
+"activate the module on your site, contact us at "
+msgstr ""
+"Retrouvez tous ces services dans l’offre MyChrono, l’offre de Chronopost "
+"dédiée au secteur e-commerce. Pour bénéficier vous aussi de MyChrono et "
+"activer le module sur votre site, contactez-nous à l’adresse "
+
+#: admin/partials/chronopost-admin-display.php:739
+#: includes/class-chronopost-product.php:468
+msgid "None"
+msgstr "Aucun"
+
+#: admin/partials/chronopost-admin-display.php:740
+msgid "Simple quote"
+msgstr "Simple quote"
+
+#: admin/partials/chronopost-admin-display.php:741
+msgid "Double quotes"
+msgstr "Double quotes"
+
+#: admin/partials/chronopost-admin-display.php:749
+msgid "Semicolon"
+msgstr "Point virgule"
+
+#: admin/partials/chronopost-admin-display.php:750
+msgid "Comma"
+msgstr "Virgule"
+
+#: admin/partials/chronopost-admin-display.php:774
+msgid "Print PDF Laser with proof."
+msgstr "Impression laser avec preuve de dépôt."
+
+#: admin/partials/chronopost-admin-display.php:775
+msgid "Print PDF laser without proof"
+msgstr "Impression laser sans preuve de dépôt"
+
+#: admin/partials/chronopost-admin-display.php:776
+msgid "Print PDF thermal"
+msgstr "PDF pour imprimante thermique"
+
+#: admin/partials/chronopost-admin-display.php:784
+#: admin/partials/chronopost-admin-display.php:927
+#: admin/partials/chronopost-admin-display.php:1011
+msgid "Mr."
+msgstr "M."
+
+#: admin/partials/chronopost-admin-display.php:785
+#: admin/partials/chronopost-admin-display.php:928
+#: admin/partials/chronopost-admin-display.php:1012
+msgid "Mrs"
+msgstr "Mme"
+
+#: admin/partials/chronopost-admin-display.php:786
+#: admin/partials/chronopost-admin-display.php:929
+#: admin/partials/chronopost-admin-display.php:1013
+msgid "Miss"
+msgstr "Mlle"
+
+#: admin/partials/chronopost-admin-display.php:876
+msgid ""
+"Put here all your Chronopost contracts. You can change the default contract "
+"for each shipping method in the Carrier settings page."
+msgstr ""
+"Indiquez ici tous vos contrats Chronopost. Vous pouvez changer le contrat "
+"par défaut pour chaque transporteur dans sa page de configuration "
+"(WooCommerce > Réglages > Expédition > Chronopost)."
+
+#: admin/partials/chronopost-admin-display.php:878
+msgid ""
+"This will permanently delete this contract. Are you sure you want to "
+"proceed ?"
+msgstr ""
+"Vous allez définitivement supprimer ce contrat. Êtes-vous sûr de vouloir "
+"continuer ?"
+
+#: admin/partials/chronopost-admin-display.php:881
+#: admin/partials/chronopost-admin-display.php:907
+msgid "Remove contract"
+msgstr "Supprimer contrat"
+
+#: admin/partials/chronopost-admin-display.php:884
+msgid "Account #"
+msgstr "Contrat n°"
+
+#: admin/partials/chronopost-admin-display.php:887
+msgid "Account number"
+msgstr "Numéro du compte"
+
+#: admin/partials/chronopost-admin-display.php:891
+msgid "Account label"
+msgstr "Intitulé du contrat"
+
+#: admin/partials/chronopost-admin-display.php:895
+msgid "Sub-account number"
+msgstr "Numéro de sous-compte"
+
+#: admin/partials/chronopost-admin-display.php:899
+msgid "Chronopost password"
+msgstr "Mot de passe Chronopost"
+
+#: admin/partials/chronopost-admin-display.php:903
+msgid "Test my login datas"
+msgstr "Tester mes identifiants"
+
+#: admin/partials/chronopost-admin-display.php:917
+msgid "Add a new contract"
+msgstr "Ajouter un nouveau contrat"
+
+#: admin/partials/chronopost-admin-display.php:1127
+msgid "Import tracking informations"
+msgstr "Importer informations de suivi"
+
+#: admin/partials/chronopost-admin-display.php:1157
+msgid "Please choose the order reference and tracking number columns number"
+msgstr ""
+"Veuillez choisir les numéros de colonnes de la référence WooCommerce et du "
+"numéro d'envoi Chronopost"
+
+#: admin/partials/chronopost-admin-display.php:1173
+msgid "Please upload only CSV files."
+msgstr "Veuillez choisir un fichier CSV."
+
+#: admin/partials/chronopost-admin-display.php:1188
+msgid "Unable to find tracking numbers (wrong column ?)"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:1204
+#, php-format
+msgid "Tracking informations updated. Total processed : %s"
+msgstr "Informations de suivi mises à jour. Total traitées : %s"
+
+#: admin/partials/chronopost-admin-display.php:1206
+msgid "There was a problem with your upload."
+msgstr "Une erreur est survenue lors de l'envoi du fichier."
+
+#: admin/partials/chronopost-admin-display.php:1210
+msgid "No file was uploaded."
+msgstr "Le fichier n'a pas pu être envoyé."
+
+#: admin/partials/chronopost-admin-exports.php:13
+msgid "Chronopost Exports"
+msgstr "Exports Chronopost"
+
+#: admin/partials/chronopost-admin-exports.php:56
+msgid "CSS"
+msgstr "CSS"
+
+#: admin/partials/chronopost-admin-import-tracking.php:6
+msgid ""
+"Use this function to massively assign Chronopost parcel numbers to the "
+"desired orders. \n"
+"                            This is useful if you edit your waybills from a "
+"third-party application. (Eg ChronoShip Office ChronoShip Station ...).\n"
+"                            The expected file must be in CSV format with "
+"semicolon separator.<br/><br/>It must contain 2 columns : "
+"<ol><li>WooCommerce orders reference</li><li>\n"
+"                            Chronopost tracking number</li></ol><br/>An "
+"email contaning the tracking number and a link \n"
+"                            to follow the parcel will be sent to the "
+"customer."
+msgstr ""
+"Utilisez cette fonction pour affecter en masse des numéros de colis "
+"Chronopost aux commandes souhaitées. \n"
+"                            Cette fonction est utile si vous éditez vos "
+"bordereaux d'envoi Chronopost depuis une application tierce (ex: ChronoShip "
+"Office, ChronoShip Station...).\n"
+"                            Le fichier attendu doit être au format CSV avec "
+"séparateur point-virgule.<br/><br/>Il doit contenir 2 colonnes : <ol><li>la "
+"référence WooCommerce de la commande</li><li>\n"
+"                            le numéro d'envoi Chronopost</li></ol><br/>Un "
+"email contenant le numéro d'envoi Chronopost ainsi qu'un lien pour suivre "
+"leur colis  \n"
+"                            sera envoyé au client."
+
+#: admin/partials/chronopost-admin-import-tracking.php:13
+msgid "Order reference column number"
+msgstr "Numéro de colonne de la référence WooCommerce"
+
+#: admin/partials/chronopost-admin-import-tracking.php:15
+msgid "Tracking column number"
+msgstr "Numéro de colonne du numéro de suivi Chronopost"
+
+#: admin/partials/chronopost-admin-import-tracking.php:17
+msgid "Pick a file to upload"
+msgstr "Choisissez un fichier à envoyer"
+
+#: admin/partials/chronopost-admin-shipping.php:13
+msgid "Chronopost shipments"
+msgstr "Expéditions Chronopost"
+
+#: admin/partials/chronopost-admin-shipping.php:20
+msgid "Cancel label"
+msgstr "Annuler l’étiquette"
+
+#: admin/partials/chronopost-admin-shipping.php:48
+msgid "weight"
+msgstr "poids"
+
+#: admin/partials/chronopost-admin-shipping.php:48
+msgid "height"
+msgstr "hauteur"
+
+#: admin/partials/chronopost-admin-shipping.php:48
+msgid "length"
+msgstr "longueur"
+
+#: admin/partials/chronopost-admin-shipping.php:48
+msgid "width"
+msgstr "largeur"
+
+#: admin/partials/chronopost-admin-shipping.php:64
+msgid "Tracking"
+msgstr "Tracking"
+
+#: admin/partials/chronopost-admin-shipping.php:65
+msgid "Labels"
+msgstr "Étiquette"
+
+#: admin/partials/chronopost-admin-shipping.php:66
+msgid "Return labels"
+msgstr "Retours SAV"
+
+#: emails/customer-return-label.php:28
+#: emails/plain/customer-return-label.php:25
+msgid "Hello,"
+msgstr "Bonjour,"
+
+#: emails/customer-return-label.php:30
+#: emails/plain/customer-return-label.php:27
+#, php-format
+msgid ""
+"You will soon be making a Chronopost shipment for your backorder #%s. The "
+"person who sent you this mail has already prepared the waybill you will use. "
+"After printing, affix the shipping letter in an adhesive plastic pouch and "
+"affix it to your shipment. Note that the bar code must be clearly visible."
+msgstr ""
+"Vous allez bientôt effectuer un envoi Chronopost pour votre retour sur la "
+"commande #%s. La personne qui vous a adressé ce mail a déjà préparé la "
+"lettre de transport que vous utiliserez. Après impression, apposez la lettre "
+"de transport dans une pochette plastique adhésive et collez la sur votre "
+"envoi. Attention le code à barres doit être bien apparent."
+
+#: emails/customer-return-label.php:32
+#: emails/plain/customer-return-label.php:29
+msgid "Regards."
+msgstr "Cordialement."
+
+#: includes/class-chronopost-order.php:122
+#, php-format
+msgid ""
+"Your order has just been shipped. The tracking number is %s, you can track "
+"your shipment by <a href=\"%s\">clicking here</a>"
+msgstr ""
+"Le colis vient d’être expédié. Le numéro de suivi est le %s, vous pouvez "
+"suivre votre colis <a href=\"%s\">en cliquant ici</a>"
+
+#: includes/class-chronopost-package.php:43
+#, php-format
+msgid ""
+"Warning, missing weight for Product %s. You should fill this information to "
+"make right label estimates."
+msgstr ""
+"Attention, le poids est manquant pour le produit %s. Vous devriez renseigner "
+"cette information afin de fiabiliser l’estimation du coût de l’envoi."
+
+#: includes/class-chronopost-product.php:73
+#: includes/class-chronopost-product.php:74
+msgid "Chronopost Product"
+msgstr "Produit Chronopost"
+
+#: includes/class-chronopost-product.php:332
+msgid "Free"
+msgstr "Gratuit"
+
+#: includes/class-chronopost-product.php:381
+msgid "Enable?"
+msgstr "Activer?"
+
+#: includes/class-chronopost-product.php:383
+msgid "Enable the shipping method"
+msgstr "Activer la méthode de livraison"
+
+#: includes/class-chronopost-product.php:387
+msgid "Contract"
+msgstr "Contrat"
+
+#: includes/class-chronopost-product.php:393
+msgid "Checkout Title"
+msgstr "Titre de la méthode"
+
+#: includes/class-chronopost-product.php:394
+msgid "This title appear during the checkout"
+msgstr "Ce titre apparaît dans le tunnel de commande"
+
+#: includes/class-chronopost-product.php:400
+msgid "Activate Quickcost"
+msgstr "Activer Quickcost"
+
+#: includes/class-chronopost-product.php:402
+msgid "Automatically calculate the shipping cost with Quickcost"
+msgstr "Calculer automatiquement les coût de livraison avec Quickcost"
+
+#: includes/class-chronopost-product.php:404
+msgid ""
+"Quickcost will calculate the cost of an item, depending on the rates "
+"negociated with Chronopost. This option replaces the use of the fee schedule."
+msgstr ""
+"Quickcost affiche le coût de livraison en se basant sur votre grille "
+"tarifaire Chronopost. Cette option remplace les frais de livraison de votre "
+"installation Chronopost."
+
+#: includes/class-chronopost-product.php:408
+msgid "Quickcost URL"
+msgstr "URL du Quickcost"
+
+#: includes/class-chronopost-product.php:413
+msgid "Value to add to Quickcost"
+msgstr "Valeur à ajouter au Quickcost"
+
+#: includes/class-chronopost-product.php:419
+msgid "Type of marge"
+msgstr "Type de marge"
+
+#: includes/class-chronopost-product.php:423
+msgid "Amount (€)"
+msgstr "Montant (€)"
+
+#: includes/class-chronopost-product.php:424
+msgid "Percentage (%)"
+msgstr "Pourcentage (%)"
+
+#: includes/class-chronopost-product.php:431
+msgid "Application fee"
+msgstr "Frais de dossier"
+
+#: includes/class-chronopost-product.php:440
+msgid "Handling fee"
+msgstr "Frais de traitement"
+
+#: includes/class-chronopost-product.php:449
+msgid "Tracking URL"
+msgstr "URL de tracking"
+
+#: includes/class-chronopost-product.php:454
+msgid "Deliver on Saturday?"
+msgstr "Livraison le samedi ?"
+
+#: includes/class-chronopost-product.php:463
+msgid "Tax status"
+msgstr "État de la TVA"
+
+#: includes/class-chronopost-product.php:467
+msgid "Taxable"
+msgstr "Taxable"
+
+#: includes/class-chronopost-product.php:503
+msgid "Shipping rates"
+msgstr "Coûts de livraison"
+
+#: includes/class-chronopost-product.php:513
+msgid "Shipping Zone Name"
+msgstr "Nom de la zone de livraison"
+
+#: includes/class-chronopost-product.php:514
+msgid "Countries"
+msgstr "Pays"
+
+#: includes/class-chronopost-product.php:520
+msgid "Add New Shipping Zone"
+msgstr "Ajouter une zone de livraison"
+
+#: includes/class-chronopost-product.php:521
+msgid "Delete Selected Zones"
+msgstr "Supprimer les zones sélectionnées"
+
+#: includes/class-chronopost-product.php:644
+msgid ""
+"You can't enable this product with this contract. Please contact us for more "
+"informations."
+msgstr ""
+"Vous ne pouvez pas activer ce produit avec ce contrat. Veuillez nous "
+"contacter pour plus d'informations."
+
+#: includes/class-chronopost-return-email.php:28
+msgid "Return Label Email"
+msgstr "Email de l’étiquette de retour"
+
+#: includes/class-chronopost-return-email.php:31
+msgid "Email sent to customers when return labels are generated"
+msgstr "Email envoyé lorsqu’une étiquette de retour est créée"
+
+#: includes/class-chronopost-return-email.php:52
+#, php-format
+msgid "%s: your Chronopost return label"
+msgstr "%s: votre étiquette de retour"
+
+#: includes/class-chronopost-return-email.php:63
+msgid "Your Chronopost return label"
+msgstr "Votre étiquette de retour Chronopost"
+
+#: includes/class-chronopost-shipment.php:49
+msgid "An error occured during the label creation."
+msgstr "Une erreur est survenue lors de la création de l'étiquette."
+
+#: includes/class-chronopost-shipment.php:70
+msgid "Please select an action in the \"Bulk Actions\" list"
+msgstr ""
+"Veuillez sélectionner une action dans la liste de sélection « Action "
+"groupées »"
+
+#: includes/class-chronopost-shipment.php:121
+msgid "Please select orders before generate labels"
+msgstr ""
+"Veuillez sélectionner des commandes avant de procéder à la génération des "
+"étiquettes"
+
+#: includes/class-chronopost-shipment.php:127
+msgid "Return label has already been generated."
+msgstr "L’étiquette de retour a déjà été générée."
+
+#: includes/class-chronopost-shipment.php:134
+msgid "An error occured while generating your labels. Please try again."
+msgstr ""
+"Une erreur s’est produite lors de la génération de vos étiquettes. Veuillez "
+"ré-essayer."
+
+#: includes/class-chronopost-shipment.php:848
+#, php-format
+msgid ""
+"Warning : the total weight of the packages exceeds %skg for the #%s order, "
+"you will need to generate at least one additional label."
+msgstr ""
+"Attention : le poids total de vos colis excède les %skg pour la commande #"
+"%s, vous devrez générer au moins une étiquette additionnelle."
+
+#: includes/class-chronopost-shipment.php:862
+msgid ""
+"An error occured during the label creation. Please check if this contract "
+"can edit labels for this carrier."
+msgstr ""
+"Une erreur s’est produite lors de la création de l’étiquette. Veuillez "
+"vérifier si le contrat sélectionné peut éditer des étiquettes pour ce "
+"transporteur."
+
+#: includes/class-chronopost-shipment.php:865
+#: includes/class-chronopost-webservice.php:373
+#: includes/class-chronopost-webservice.php:377
+msgid ""
+"An error occured during the label creation. Please check the customer datas "
+"or your Chronopost settings."
+msgstr ""
+"Une erreur s’est produite lors de la création de l’étiquette. Veuillez "
+"vérifier les données du client ou vos paramètres Chronopost."
+
+#: includes/class-chronopost-webservice.php:367
+msgid "Webservice error:"
+msgstr "Erreur du webservice :"
+
+#: includes/class-chronopost-webservice.php:374
+#: includes/class-chronopost-webservice.php:378
+msgid "System error:"
+msgstr "Erreur système :"
+
+#: includes/class-chronopost-webservice.php:1055
+msgid "The return label has been generated and has just been sent"
+msgstr "L’étiquette de retour a été générée et vient d’être envoyée au client"
+
+#: includes/class-chronopost-webservice.php:1073
+#, php-format
+msgid "Return labels are not available for this country : %s"
+msgstr "Les étiquettes de retour ne sont pas disponibles pour ce pays : %s"
+
+#: includes/class-chronopost-webservice.php:1080
+msgid "Return labels are not available for this method:"
+msgstr "Les étiquettes de retour ne sont pas disponible pour cette méthode :"
+
+#: includes/class-chronopost-webservice.php:1299
+#, php-format
+msgid "The label %s was cancelled"
+msgstr "L'étiquette %s a été annulée"
+
+#: includes/class-chronopost-webservice.php:1305
+#, php-format
+msgid "An error occured when cancelling the %s label"
+msgstr "Une erreur système est survenue lors de l’annulation du colis %s"
+
+#: includes/class-chronopost-webservice.php:1308
+#, php-format
+msgid ""
+"the %s package does not belong to the contract passed as parameter or has "
+"not yet been registered in the Chronopost tracking system"
+msgstr ""
+"le colis %s n’appartient pas au contrat passé en paramètre ou n’a pas encore "
+"été enregistré dans le système de tracking Chronopost"
+
+#: includes/class-chronopost-webservice.php:1311
+#, php-format
+msgid ""
+"The %s package can not be cancelled because it was supported by Chronopost"
+msgstr ""
+"Le colis %s ne peut être pas annulé car il a été pris en charge par "
+"Chronopost"
+
+#: includes/functions-chronopost-helpers.php:131
+msgid "Information Chronopost"
+msgstr "Information Chronopost"
+
+#: includes/functions-chronopost-helpers.php:142
+msgid "I understand"
+msgstr "J’ai compris"
+
+#: includes/functions-chronopost-helpers.php:369
+#, php-format
+msgid "One or several packages are above the weight limit (%s kg)"
+msgstr "Un ou plusieurs colis dépassent la limite de poids (%s kg)"
+
+#: includes/functions-chronopost-helpers.php:372
+#, php-format
+msgid "One or several packages are above the size limit (%s cm)"
+msgstr "Un ou plusieurs colis dépassent la limite de taille (%s cm)"
+
+#: includes/functions-chronopost-helpers.php:375
+#, php-format
+msgid ""
+"One or several packages are above the total (L+2H+2l) size limit (%s cm)"
+msgstr ""
+"Un ou plusieurs colis dépassent la limite globale (L+2H+2l) de taille (%s cm)"
+
+#: includes/products/chrono10.php:19
+msgid "Express delivery before 10am at home"
+msgstr "Livraison express à domicile avant 10h"
+
+#: includes/products/chrono10.php:20 includes/products/chrono10.php:21
+msgid "Chrono 10"
+msgstr "Chrono10"
+
+#: includes/products/chrono10.php:22
+msgid ""
+"Parcels delivered the next day before 10am at your home. The day before "
+"delivery, You'll be notified by e-mail and SMS."
+msgstr ""
+"Colis livré le lendemain matin avant 10h à votre domicile. La veille de la "
+"livraison, vous êtes averti par e-mail et SMS."
+
+#: includes/products/chrono13.php:21
+msgid "Express delivery before 1pm at home"
+msgstr "Livraison express à domicile avant 13h"
+
+#: includes/products/chrono13.php:22 includes/products/chrono13.php:23
+msgid "Chrono 13"
+msgstr "Chrono13"
+
+#: includes/products/chrono13.php:24
+msgid ""
+"Parcels delivered the next day before 1pm at your home. The day before "
+"delivery, You'll be notified by e-mail and SMS."
+msgstr ""
+"Colis livré le lendemain matin avant 13h à votre domicile. La veille de la "
+"livraison, vous êtes averti par e-mail et SMS."
+
+#: includes/products/chrono18.php:21
+msgid "Express delivery before 6pm at home"
+msgstr "Livraison express à domicile avant 18h"
+
+#: includes/products/chrono18.php:22 includes/products/chrono18.php:23
+msgid "Chrono 18"
+msgstr "Chrono18"
+
+#: includes/products/chrono18.php:24
+msgid ""
+"Parcels delivered the next day before 6pm at your home. The day before "
+"delivery, You'll be notified by e-mail and SMS."
+msgstr ""
+"Colis livré le lendemain matin avant 18h à votre domicile. La veille de la "
+"livraison, vous êtes averti par e-mail et SMS."
+
+#: includes/products/chronoclassic.php:19
+msgid "Express delivery at home"
+msgstr "Livraison express à domicile"
+
+#: includes/products/chronoclassic.php:20
+#: includes/products/chronoclassic.php:21
+msgid "Chrono Classic"
+msgstr "Chrono Classic"
+
+#: includes/products/chronoclassic.php:22
+#: includes/products/chronosameday.php:22
+msgid "Parcels delivered to Europe in 1 to 3 days"
+msgstr "Colis livré en 1 à 3 jours vers l’Europe"
+
+#: includes/products/chronoexpress.php:19
+msgid "Worldwide Express delivery"
+msgstr "Livraison express partout dans le monde"
+
+#: includes/products/chronoexpress.php:20
+#: includes/products/chronoexpress.php:21
+msgid "Chrono Express"
+msgstr "Chrono Express"
+
+#: includes/products/chronoexpress.php:22
+msgid ""
+"Parcels delivered to Europe in 1 to 3 days, 48 hours to the DOM and 2 to 5 "
+"days to the rest of the world."
+msgstr ""
+"Colis livré en 1 à 3 jours vers l’Europe, en 48h vers les DOM et en 2 à 5 "
+"jours vers le reste du monde."
+
+#: includes/products/chronoprecise.php:21
+msgid "Delivery on appointment"
+msgstr "Livraison sur Rendez-vous"
+
+#: includes/products/chronoprecise.php:22
+#: includes/products/chronoprecise.php:23
+#, fuzzy
+#| msgid "Chrono Express"
+msgid "Chrono Precise"
+msgstr "Chrono Express"
+
+#: includes/products/chronoprecise.php:24
+msgid ""
+"By appointment at your home! Order delivered on the day of your choice in a "
+"2-hour time slot. You can reprogram your delivery in case of absence."
+msgstr ""
+"Sur RDV à votre domicile! Commande livrée au jour de votre choix dans un "
+"créneau horaire de 2h. Vous pouvez reprogrammer votre livraison en cas "
+"d’absence."
+
+#: includes/products/chronoprecise.php:46
+#, php-format
+msgid "Please <a href=\"#container-method-%s\">select an appointment</a>"
+msgstr ""
+"Merci de <a href=\"#container-method-%s\">sélectionner un créneau de rendez-"
+"vous.</a>"
+
+#: includes/products/chronoprecise.php:63
+msgid ""
+"An error occured while validating your data, please refresh the page and try "
+"again."
+msgstr ""
+"Une erreur s’est produite lors de la validation de vos données. Veuillez "
+"rafraîchir la page et ré-essayer."
+
+#: includes/products/chronoprecise.php:135
+msgid "Date of delivery"
+msgstr "Date de remise des colis"
+
+#: includes/products/chronoprecise.php:137
+msgid "Date from which the weeks list of the RDV option will be calculated"
+msgstr "Date à partir duquel le semainier de l’option RDV sera calculé"
+
+#: includes/products/chronoprecise.php:144
+msgid "Day of delivery +"
+msgstr "Jour de la commande +"
+
+#: includes/products/chronoprecise.php:145
+msgid "day(s)"
+msgstr "jour(s)"
+
+#: includes/products/chronoprecise.php:149
+msgid "or day and hour of delivery"
+msgstr "ou jour et heure de livraison"
+
+#: includes/products/chronoprecise.php:155
+msgid "Hour of delivery"
+msgstr "Heure de livraison"
+
+#: includes/products/chronoprecise.php:167
+msgid "Show cost levels"
+msgstr "Afficher les tarifs"
+
+#: includes/products/chronoprecise.php:183
+msgid "Cost levels"
+msgstr "Niveaux tarifaire"
+
+#: includes/products/chronoprecise.php:196
+#, php-format
+msgid "Appointment %s"
+msgstr "Rendez vous %s"
+
+#: includes/products/chronoprecise.php:206
+msgid "Price"
+msgstr "Prix"
+
+#: includes/products/chronoprecise.php:228
+msgid "Slots to be closed"
+msgstr "Créneaux qui devront être fermés"
+
+#: includes/products/chronoprecise.php:240
+msgid "Add New Slot"
+msgstr "Ajouter un créneau"
+
+#: includes/products/chronoprecise.php:241
+msgid "Delete Selected Slot"
+msgstr "Supprimer les créneaux sélectionnés"
+
+#: includes/products/chronoprecise.php:314
+#: includes/products/chronoprecise.php:397
+#, php-format
+msgid "Appointment for delivery on %s between %s and %s"
+msgstr "Rendez-vous pour livraison le %s entre %s et %s"
+
+#: includes/products/chronoprecise.php:316
+#: public/class-chronopost-public.php:139
+msgid "Edit"
+msgstr "Modifier"
+
+#: includes/products/chronoprecise.php:318
+#: includes/products/chronoprecise.php:321
+msgid "Select an appointment"
+msgstr "Sélectionner un créneau de rendez-vous"
+
+#: includes/products/chronorelais.php:23
+msgid "Express delivery in Pickup relay"
+msgstr "Livraison express en point relais"
+
+#: includes/products/chronorelais.php:24 includes/products/chronorelais.php:25
+msgid "Chrono Relay"
+msgstr "Chrono Relais"
+
+#: includes/products/chronorelais.php:26
+msgid ""
+"In relay Pickup within 24h! Order delivered the next day in the pickup relay "
+"of your choice, among 7500 points spread all over France."
+msgstr ""
+"En 24h en point relais! Commande livrée le lendemain dans le point relais de "
+"votre choix, parmi 7500 points répartis sur toute la France."
+
+#: includes/products/chronorelais.php:54
+msgid "Can change postcode ?"
+msgstr "Changement de code postal ?"
+
+#: includes/products/chronorelais.php:56
+msgid "Allow the user to change the postcode on the map"
+msgstr "Autoriser l’utilisateur à modifier le code postal"
+
+#: includes/products/chronorelais.php:60
+msgid "Max distance search"
+msgstr "Distance de recherche max"
+
+#: includes/products/chronorelais.php:65
+msgid "Max pickup relay number"
+msgstr "Nombre maximum de points relais"
+
+#: includes/products/chronorelais.php:70
+msgid "Enable Google Map ?"
+msgstr "Activer Google Map ?"
+
+#: includes/products/chronorelais.php:72
+msgid "Activate the pickup relays choice on Google Map"
+msgstr "Activer le choix d’un point relais sur la carte"
+
+#: includes/products/chronorelais.php:89
+#, php-format
+msgid "Please <a href=\"#container-method-%s\">select a pickup relay</a>"
+msgstr ""
+"Merci de <a href=\"#container-method-%s\">sélectionner un point relais.</a>"
+
+#: includes/products/chronorelais.php:206
+#: public/class-chronopost-public.php:138
+msgid "Select a pickup relay"
+msgstr "Sélectionner un point relais"
+
+#: includes/products/chronorelais.php:227
+msgid "View on Google Map"
+msgstr "Voir sur Google Map"
+
+#: includes/products/chronorelais.php:269
+msgid "No relay points found. Please check your address information."
+msgstr ""
+"Aucun point relais trouvé. Veuillez vérifier les informations concernant "
+"votre adresse."
+
+#: includes/products/chronorelaiseurope.php:23
+msgid "Chronopost - Express delivery in Pickup relay"
+msgstr "Chronopost - Livraison express en point relais"
+
+#: includes/products/chronorelaiseurope.php:24
+#: includes/products/chronorelaiseurope.php:25
+msgid "Chrono Relais Europe"
+msgstr "Chrono Relais Europe"
+
+#: includes/products/chronorelaiseurope.php:26
+msgid "In relay Pickup! Order delivered in the pickup relay of your choice"
+msgstr "En point relais ! Commande livrée dans le point relais de votre choix"
+
+#: includes/products/chronosameday.php:19
+msgid "Same-day express delivery at home"
+msgstr "Livraison express à domicile le même jour"
+
+#: includes/products/chronosameday.php:20
+#: includes/products/chronosameday.php:21
+msgid "Chrono Sameday"
+msgstr "Chrono Sameday"
+
+#: includes/products/chronosameday.php:30
+msgid "Disable after"
+msgstr "Désactiver après"
+
+#: public/class-chronopost-public.php:123
+msgid "Prev week"
+msgstr "Semaine précédente"
+
+#: public/class-chronopost-public.php:124
+msgid "Next week"
+msgstr "Semaine suivante"
+
+#: public/class-chronopost-public.php:140
+msgid "Loading, please wait&hellip;"
+msgstr "Veuillez patienter&hellip;"
+
+#: public/class-chronopost-public.php:141
+msgid "Mon"
+msgstr "Lun"
+
+#: public/class-chronopost-public.php:142
+msgid "Tue"
+msgstr "Mar"
+
+#: public/class-chronopost-public.php:143
+msgid "Wed"
+msgstr "Mer"
+
+#: public/class-chronopost-public.php:144
+msgid "Thu"
+msgstr "Jeu"
+
+#: public/class-chronopost-public.php:145
+msgid "Fri"
+msgstr "Ven"
+
+#: public/class-chronopost-public.php:146
+msgid "Sat"
+msgstr "Sam"
+
+#: public/class-chronopost-public.php:147
+msgid "Sun"
+msgstr "Dim"
+
+#: public/class-chronopost-public.php:148
+msgid "Infos"
+msgstr "Infos"
+
+#: public/class-chronopost-public.php:149
+msgid "Opening hours"
+msgstr "Horaires"
+
+#: public/class-chronopost-public.php:150
+msgid "Closed"
+msgstr "Fermé"
+
+#: templates/chronoprecise.php:124 templates/chronoprecise.php:189
+msgid "Confirm time slot"
+msgstr "Confirmer le créneau horaire"
+
+#: templates/chronoprecise.php:199
+msgid ""
+"It's not possible to use this service for your order yet, we are currently "
+"working to allow new cities to benefit from this new service."
+msgstr ""
+"Il n’est pas encore possible d’utiliser ce service pour votre commande, nous "
+"travaillons en ce moment pour permettre à de nouvelles villes de bénéficier "
+"de ce nouveau service."
+
+#: templates/chronorelais.php:4
+msgid "Chronopost Pickup Relays"
+msgstr "Point Relais Chronopost"
+
+#: templates/chronorelais.php:29
+msgid ""
+"Please select one of the 5 pickup relays displayed below to serve as the "
+"delivery address."
+msgstr ""
+"Veuillez choisir parmi les 5 points relais affichés ci-dessous celui qui "
+"servira d’adresse de livraison."
+
+#: templates/chronorelais.php:35
+msgid "Update my postcode"
+msgstr "Modifier mon code postal"
+
+#: templates/chronorelais.php:50
+msgid "Confirm relay pickup"
+msgstr "Confirmer le point relais"
+
+#. Plugin URI of the plugin/theme
+msgid "https://www.chronopost.fr/"
+msgstr "https://www.chronopost.fr/fr/"
+
+#. Description of the plugin/theme
+msgid "Chronopost shipping methods for WooCommerce"
+msgstr "Méthodes de livraison Chronopost pour WooCommerce"
+
+#. Author of the plugin/theme
+msgid "Adexos"
+msgstr "Adexos"
+
+#. Author URI of the plugin/theme
+msgid "https://www.adexos.fr"
+msgstr "https://www.adexos.fr"
+
+#~ msgid "Chrono RDV"
+#~ msgstr "Chrono RDV"
+
+#~ msgid "Please choose the order ID and tracking number columns number."
+#~ msgstr ""
+#~ "Veuillez choisir les numéros de colonnes de la référence WooCommerce et "
+#~ "du numéro d'envoi Chronopost"
+
+#~ msgid "Order ID column number"
+#~ msgstr "Numéro de colonne de l'ID de commande"
+
+#~ msgid ""
+#~ "Use this function to massively assign Chronopost parcel numbers to the "
+#~ "desired orders. \n"
+#~ "                            This is useful if you edit your waybills from "
+#~ "a third-party application. (Eg ChronoShip Office ChronoShip "
+#~ "Station ...).\n"
+#~ "                            The expected file must be in CSV format with "
+#~ "semicolon separator.<br/><br/>It must contain 2 columns : "
+#~ "<ol><li>WooCommerce orders reference</li><li>\n"
+#~ "                            Chronopost tracking number</li></ol><br/>The "
+#~ "orders status will be \"Shipment in transit\". An email contaning the "
+#~ "tracking number and a link \n"
+#~ "                            to follow the parcel will be sent to the "
+#~ "customer."
+#~ msgstr ""
+#~ "Utilisez cette fonction pour affecter en masse des numéros de colis "
+#~ "Chronopost aux commandes souhaitées. \n"
+#~ "\t\t\tCette fonction est utile si vous éditez vos bordereaux d'envoi "
+#~ "Chronopost depuis une application tierce (ex: ChronoShip Office, "
+#~ "ChronoShip Station...). <br>\n"
+#~ "\t\t\tLe fichier attendu doit être au format CSV avec séparateur point-"
+#~ "virgule.<br/><br/>Il doit contenir 2 colonnes : <ol><li>la référence "
+#~ "WooCommerce de la commande</li><li>\n"
+#~ "\t\t\tle numéro d'envoi Chronopost</li></ol><br/>Cela aura pour effet de "
+#~ "passer les commandes \"en cours de livraison\" et de transmettre un mail "
+#~ "aux clients leur indiquant leur numéro d'envoi\n"
+#~ "\t\t\tChronopost ainsi qu'un lien pour suivre leurs colis."
+
+#~ msgid "One of several packages are above the weight limit (%s kg)"
+#~ msgstr "Un ou plusieurs colis dépassent la limite de poids (%s kg)"
+
+#~ msgid "One of several packages are above the size limit (%s cm)"
+#~ msgstr "Un ou plusieurs colis dépassent la limite de taille (%s cm)"
+
+#~ msgid "One of several packages are above the total size limit (%s cm)"
+#~ msgstr "Un ou plusieurs colis dépassent la limite globale de taille (%s cm)"
+
+#~ msgid "Translations"
+#~ msgstr "Traductions"
+
+#~ msgid "Please loading&hellip;"
+#~ msgstr "Veuillez patienter&hellip;"
+
+#~ msgid "Shipper info"
+#~ msgstr "Adresse d'expédition"
+
+#~ msgid "Customer info"
+#~ msgstr "Adresse de facturation"
+
+#~ msgid "Return info"
+#~ msgstr "Informations de retour"
+
+#~ msgid "Skybill Parameters for Labels printing"
+#~ msgstr "Paramètres Skybill pour l’impression des labels"
+
+#~ msgid "BAL Option"
+#~ msgstr "Option BAL"
+
+#~ msgid "Return labels are only available for France"
+#~ msgstr "Les étiquettes de retour ne sont disponible que pour la France"
+
+#~ msgid "Download return label"
+#~ msgstr "Télécharger l’étiquette de retour"
+
+#~ msgid "Account configuration"
+#~ msgstr "Configuration du compte"
+
+#~ msgid "Track Your Order"
+#~ msgstr "Suivre votre commande"
+
+#~ msgid "Invalid username or password"
+#~ msgstr "Nom d’utilisateur ou mot de passe incorrect"
+
+#~ msgid "Product % is a virtual product. Skipping."
+#~ msgstr "Le produit %s est virtuel. Passage au suivant."
+
+#~ msgid "Missing weight for Product %. Aborting."
+#~ msgstr "Poids manquant pour le produit %s. L’étiquette n’a pu être générée."
+
+#~ msgid "Daily docket & export"
+#~ msgstr "Bordereaux de fin de journée et exports"
+
+#~ msgid ""
+#~ "The customer just received his return label. It can be downloaded <a "
+#~ "target=\"_blank\" href=\"%s\">by clicking here</a>"
+#~ msgstr ""
+#~ "Le client vient juste de recevoir son étiquette de retour SAV. Elle peut "
+#~ "être téléchargée <a target=\"_blank\" href=\"%s\">en cliquant ici</a>"
+
+#, fuzzy
+#~| msgid "Chronopost"
+#~ msgid "Expédition"
+#~ msgstr "Chronopost"
+
+#~ msgid "#"
+#~ msgstr "#"
+
+#~ msgid "Customer"
+#~ msgstr "Client"
+
+#~ msgid "Generate daily dockets"
+#~ msgstr "Générer le bordereau"
+
+#~ msgid "Generate additional label"
+#~ msgstr "Générer nouvelle étiquette"
+
+#~ msgid "Chronopost - Express delivery before 10am at home"
+#~ msgstr "Chronopost - Livraison express à domicile avant 10h"
+
+#~ msgid ""
+#~ "Veuillez choisir parmi les 5 relais Pickup affich&eacute;s ci-dessous "
+#~ "celui qui servira d'adresse de livraison."
+#~ msgstr ""
+#~ "Veuillez choisir parmi les 5 point relais affichés ci-dessous celui qui "
+#~ "servira d’adresse de livraison."
+
+#~ msgid "Changer mon code postal"
+#~ msgstr "Modifier le code postal"
+
+#~ msgid "Not Taxable"
+#~ msgstr "Aucun"
+
+#~ msgid "Enable/Disable"
+#~ msgstr "Activer"
+
+#~ msgid "Chrono 10 offer of Chronopost"
+#~ msgstr "Offre Chrono10 de Chronopost"
diff --git a/wp-content/plugins/woocommerce-chronopost/languages/chronopost.pot b/wp-content/plugins/woocommerce-chronopost/languages/chronopost.pot
new file mode 100755 (executable)
index 0000000..ae914e4
--- /dev/null
@@ -0,0 +1,1305 @@
+# Copyright (C) 2018 Chronopost
+# This file is distributed under the same license as the Chronopost package.
+msgid ""
+msgstr ""
+"Project-Id-Version: Chronopost 1.1.0\n"
+"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/chronopost\n"
+"POT-Creation-Date: 2018-09-06 15:34:40+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2018-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+
+#: admin/class-chronopost-admin.php:114
+msgid "Select a time"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:116
+#: admin/partials/chronopost-admin-display.php:636
+msgid "To"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:117
+#: admin/partials/chronopost-admin-display.php:627
+msgid "From"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:118
+msgid "Min weight"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:119
+msgid "Max weight"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:120
+msgid "Shipping Rate"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:121
+msgid "Delete selected rates"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:122
+msgid "Add new rate"
+msgstr ""
+
+#. #-#-#-#-#  chronopost.pot (Chronopost 1.1.0)  #-#-#-#-#
+#. Plugin Name of the plugin/theme
+#: admin/class-chronopost-admin.php:193
+#: includes/class-chronopost-product.php:75
+msgid "Chronopost"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:232
+msgid "Shipment"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:245
+#: admin/partials/chronopost-admin-shipping.php:186
+msgid "Download label"
+msgid_plural "Download labels"
+msgstr[0] ""
+msgstr[1] ""
+
+#: admin/class-chronopost-admin.php:251
+#: admin/partials/chronopost-admin-shipping.php:58
+msgid "Use contract"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:297
+msgid "Advalorem insurance"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:300 admin/class-chronopost-admin.php:327
+#: admin/partials/chronopost-admin-display.php:605
+#: admin/partials/chronopost-admin-display.php:681
+#: admin/partials/chronopost-admin-shipping.php:167
+#: includes/class-chronopost-product.php:458
+#: includes/products/chronordv.php:169
+msgid "No"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:301 admin/class-chronopost-admin.php:328
+#: admin/partials/chronopost-admin-display.php:606
+#: admin/partials/chronopost-admin-display.php:682
+#: admin/partials/chronopost-admin-shipping.php:168
+#: includes/class-chronopost-product.php:459
+#: includes/products/chronordv.php:168
+msgid "Yes"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:306
+msgid "Insurance amount"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:316
+#: admin/partials/chronopost-admin-shipping.php:63
+msgid "Ship On Saturday"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:331
+#: admin/partials/chronopost-admin-shipping.php:171
+msgid "Not active"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:336
+#: admin/partials/chronopost-admin-shipping.php:62
+msgid "Parcels number"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:345
+msgid "Parcels dimensions"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:375
+#: admin/partials/chronopost-admin-shipping.php:19
+#: admin/partials/chronopost-admin-shipping.php:187
+#: admin/partials/chronopost-admin-shipping.php:189
+msgid "Generate label"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:385 admin/class-chronopost-admin.php:393
+#: admin/partials/chronopost-admin-shipping.php:200
+msgid "Return label"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:395
+#: admin/partials/chronopost-admin-shipping.php:202
+msgid "Generate return label"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:558
+msgid "Valid username or password"
+msgstr ""
+
+#: admin/class-chronopost-admin.php:567
+msgid ""
+"A system error occured. Please contact the Chronopost support if the problem "
+"persists."
+msgstr ""
+
+#: admin/partials/chronopost-admin-daily-docket.php:13
+msgid "Chronopost Daily Dockets"
+msgstr ""
+
+#: admin/partials/chronopost-admin-daily-docket.php:17
+#: admin/partials/chronopost-admin-exports.php:17
+#: admin/partials/chronopost-admin-shipping.php:17
+msgid "Select bulk action"
+msgstr ""
+
+#: admin/partials/chronopost-admin-daily-docket.php:18
+#: admin/partials/chronopost-admin-exports.php:18
+#: admin/partials/chronopost-admin-shipping.php:18
+msgid "Bulk Actions"
+msgstr ""
+
+#: admin/partials/chronopost-admin-daily-docket.php:19
+msgid "Export daily dockets"
+msgstr ""
+
+#: admin/partials/chronopost-admin-daily-docket.php:21
+#: admin/partials/chronopost-admin-exports.php:21
+#: admin/partials/chronopost-admin-shipping.php:22
+msgid "Apply"
+msgstr ""
+
+#: admin/partials/chronopost-admin-daily-docket.php:30
+#: admin/partials/chronopost-admin-daily-docket.php:120
+#: admin/partials/chronopost-admin-exports.php:30
+#: admin/partials/chronopost-admin-exports.php:125
+#: admin/partials/chronopost-admin-shipping.php:31
+#: admin/partials/chronopost-admin-shipping.php:219
+msgid "Previous page"
+msgstr ""
+
+#: admin/partials/chronopost-admin-daily-docket.php:30
+#: admin/partials/chronopost-admin-daily-docket.php:120
+#: admin/partials/chronopost-admin-exports.php:30
+#: admin/partials/chronopost-admin-exports.php:125
+#: admin/partials/chronopost-admin-shipping.php:31
+#: admin/partials/chronopost-admin-shipping.php:219
+msgid "&laquo;"
+msgstr ""
+
+#: admin/partials/chronopost-admin-daily-docket.php:31
+#: admin/partials/chronopost-admin-daily-docket.php:121
+#: admin/partials/chronopost-admin-exports.php:31
+#: admin/partials/chronopost-admin-exports.php:126
+#: admin/partials/chronopost-admin-shipping.php:32
+#: admin/partials/chronopost-admin-shipping.php:220
+msgid "Next page"
+msgstr ""
+
+#: admin/partials/chronopost-admin-daily-docket.php:31
+#: admin/partials/chronopost-admin-daily-docket.php:121
+#: admin/partials/chronopost-admin-exports.php:31
+#: admin/partials/chronopost-admin-exports.php:126
+#: admin/partials/chronopost-admin-shipping.php:32
+#: admin/partials/chronopost-admin-shipping.php:220
+msgid "&raquo;"
+msgstr ""
+
+#: admin/partials/chronopost-admin-daily-docket.php:32
+#: admin/partials/chronopost-admin-daily-docket.php:122
+#: admin/partials/chronopost-admin-exports.php:32
+#: admin/partials/chronopost-admin-exports.php:127
+#: admin/partials/chronopost-admin-shipping.php:33
+#: admin/partials/chronopost-admin-shipping.php:221
+msgid "Page"
+msgstr ""
+
+#: admin/partials/chronopost-admin-daily-docket.php:38
+#: admin/partials/chronopost-admin-daily-docket.php:128
+#: admin/partials/chronopost-admin-exports.php:38
+#: admin/partials/chronopost-admin-exports.php:133
+#: admin/partials/chronopost-admin-shipping.php:39
+#: admin/partials/chronopost-admin-shipping.php:227
+msgid "%s item"
+msgid_plural "%s items"
+msgstr[0] ""
+msgstr[1] ""
+
+#: admin/partials/chronopost-admin-daily-docket.php:49
+#: admin/partials/chronopost-admin-exports.php:49
+#: admin/partials/chronopost-admin-shipping.php:52
+msgid "Select all"
+msgstr ""
+
+#: admin/partials/chronopost-admin-daily-docket.php:52
+#: admin/partials/chronopost-admin-exports.php:52
+#: admin/partials/chronopost-admin-shipping.php:55
+#: includes/products/chronordv.php:196
+msgid "Status"
+msgstr ""
+
+#: admin/partials/chronopost-admin-daily-docket.php:53
+#: admin/partials/chronopost-admin-exports.php:53
+#: admin/partials/chronopost-admin-shipping.php:56
+msgid "Order"
+msgstr ""
+
+#: admin/partials/chronopost-admin-daily-docket.php:54
+#: admin/partials/chronopost-admin-exports.php:54
+#: admin/partials/chronopost-admin-shipping.php:57
+msgid "Shipped to"
+msgstr ""
+
+#: admin/partials/chronopost-admin-daily-docket.php:55
+#: admin/partials/chronopost-admin-exports.php:55
+msgid "Date"
+msgstr ""
+
+#: admin/partials/chronopost-admin-daily-docket.php:68
+#: admin/partials/chronopost-admin-exports.php:69
+#: admin/partials/chronopost-admin-shipping.php:80
+msgid "Select order #%s"
+msgstr ""
+
+#. translators: 1: first name 2: last name
+#: admin/partials/chronopost-admin-daily-docket.php:81
+#: admin/partials/chronopost-admin-exports.php:82
+#: admin/partials/chronopost-admin-shipping.php:93
+msgctxt "full name"
+msgid "%1$s %2$s"
+msgstr ""
+
+#: admin/partials/chronopost-admin-daily-docket.php:85
+#: admin/partials/chronopost-admin-exports.php:86
+#: admin/partials/chronopost-admin-shipping.php:97
+msgid "Guest"
+msgstr ""
+
+#: admin/partials/chronopost-admin-daily-docket.php:89
+#: admin/partials/chronopost-admin-exports.php:90
+#: admin/partials/chronopost-admin-shipping.php:101
+msgid "%1$s by %2$s"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:27
+msgid "TEST Contract"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:45
+msgid "Chronopost notification about weight"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:54
+msgid "Thank you for using the Chronopost plugin for WooCommerce!"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:56
+msgid "Don't forget to <a href=\"%s\">configure your Chronopost Settings.</a>"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:57
+msgid "Start <a href=\"%s\">configuring your Chronopost delivery methods</a>"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:58
+msgid "Enjoy our plugin ;)"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:60
+msgid "The Chronopost Team"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:81
+#: admin/partials/chronopost-admin-display.php:82
+msgid "Shipments"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:90
+#: admin/partials/chronopost-admin-display.php:91
+#: admin/partials/chronopost-admin-display.php:1092
+msgid "Import trackings"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:99
+#: admin/partials/chronopost-admin-display.php:100
+msgid "Daily docket"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:108
+#: admin/partials/chronopost-admin-display.php:109
+#: admin/partials/chronopost-admin-exports.php:19
+#: admin/partials/chronopost-admin-exports.php:112
+msgid "Export CSS"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:129
+msgid "Accounts configuration"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:144
+msgid "Shipper address"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:151
+#: admin/partials/chronopost-admin-display.php:254
+#: admin/partials/chronopost-admin-display.php:357
+msgid "Civility"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:159
+#: admin/partials/chronopost-admin-display.php:262
+#: admin/partials/chronopost-admin-display.php:365
+msgid "Name"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:167
+#: admin/partials/chronopost-admin-display.php:270
+#: admin/partials/chronopost-admin-display.php:373
+msgid "Name 2"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:175
+#: admin/partials/chronopost-admin-display.php:278
+#: admin/partials/chronopost-admin-display.php:381
+msgid "Address"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:183
+#: admin/partials/chronopost-admin-display.php:286
+#: admin/partials/chronopost-admin-display.php:389
+msgid "Address 2"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:191
+#: admin/partials/chronopost-admin-display.php:294
+#: admin/partials/chronopost-admin-display.php:397
+msgid "Zipcode"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:199
+#: admin/partials/chronopost-admin-display.php:302
+#: admin/partials/chronopost-admin-display.php:405
+msgid "City"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:207
+#: admin/partials/chronopost-admin-display.php:310
+#: admin/partials/chronopost-admin-display.php:413
+msgid "Country"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:215
+#: admin/partials/chronopost-admin-display.php:318
+#: admin/partials/chronopost-admin-display.php:421
+msgid "Contact name"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:223
+#: admin/partials/chronopost-admin-display.php:326
+#: admin/partials/chronopost-admin-display.php:429
+msgid "Email"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:231
+#: admin/partials/chronopost-admin-display.php:334
+#: admin/partials/chronopost-admin-display.php:437
+msgid "Phone"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:239
+#: admin/partials/chronopost-admin-display.php:342
+#: admin/partials/chronopost-admin-display.php:445
+msgid "Mobile"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:247
+msgid "Billing address"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:350
+msgid "Return address"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:453
+msgid "Printing options"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:460
+msgid "Print Mode"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:467
+msgid "Google Map Settings"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:474
+msgid "Google Map Api Key"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:483
+msgid "Mailbox delivery option"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:490
+msgid "Enable bal option"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:501
+msgid "Saturday shipping"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:508
+msgid "Slot when saturday option is enabled"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:516
+msgid "Ad Valorem Insurance"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:523
+msgid "Enable Ad Volorem Insurance"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:531
+msgid "Minimum amount to be insured"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:539
+msgid "CSS Export Settings"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:546
+msgid "File Extension"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:554
+msgid "File charset"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:562
+msgid "End of line character"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:570
+msgid "Field delimiter"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:578
+msgid "Field separator"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:598
+msgid "Reset form data"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:659
+msgid ""
+"Offer to your customers the first Express delivery service with the official "
+"Chronopost module for WooCommerce. With Chronopost, your customer will have "
+"the choice of the main delivery modes within 24h : at home,  at a Pickup "
+"point or at the office !"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:661
+msgid ""
+"Your customers will also have the rdv service :  They are notified by email "
+"or SMS the day before the delivery and can reschedule the delivery or ask to "
+"be delivered at a pickup point among more than 17 000 points (post offices, "
+"Pickup relay or Chronopost agencies)."
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:663
+msgid ""
+"Expand your business internationally with Chronopost international delivery "
+"service which is included in this module."
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:665
+msgid ""
+"Find all these services in the Chronopost e-commerce pack : MyChrono. To "
+"activate the module on your site, contact us at "
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:710
+#: includes/class-chronopost-product.php:468
+msgid "None"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:711
+msgid "Simple quote"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:712
+msgid "Double quotes"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:720
+msgid "Semicolon"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:721
+msgid "Comma"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:745
+msgid "Print PDF Laser with proof."
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:746
+msgid "Print PDF laser without proof"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:747
+msgid "Print PDF thermal"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:755
+#: admin/partials/chronopost-admin-display.php:898
+#: admin/partials/chronopost-admin-display.php:982
+msgid "Mr."
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:756
+#: admin/partials/chronopost-admin-display.php:899
+#: admin/partials/chronopost-admin-display.php:983
+msgid "Mrs"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:757
+#: admin/partials/chronopost-admin-display.php:900
+#: admin/partials/chronopost-admin-display.php:984
+msgid "Miss"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:847
+msgid ""
+"Put here all your Chronopost contracts. You can change the default contract "
+"for each shipping method in the Carrier settings page."
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:849
+msgid ""
+"This will permanently delete this contract. Are you sure you want to "
+"proceed ?"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:852
+#: admin/partials/chronopost-admin-display.php:880
+msgid "Remove contract"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:855
+msgid "Account #"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:858
+msgid "Account number"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:862
+msgid "Account label"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:866
+msgid "Sub-account number"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:870
+msgid "Chronopost password"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:874
+msgid "Test my login datas"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:878
+msgid "Add a new contract"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:1098
+msgid "Import tracking informations"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:1128
+msgid "Please choose the order reference and tracking number columns number"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:1144
+msgid "Please upload only CSV files."
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:1163
+msgid "Tracking informations updated. Total processed : %s"
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:1165
+msgid "There was a problem with your upload."
+msgstr ""
+
+#: admin/partials/chronopost-admin-display.php:1169
+msgid "No file was uploaded."
+msgstr ""
+
+#: admin/partials/chronopost-admin-exports.php:13
+msgid "Chronopost Exports"
+msgstr ""
+
+#: admin/partials/chronopost-admin-exports.php:56
+msgid "CSS"
+msgstr ""
+
+#: admin/partials/chronopost-admin-import-tracking.php:6
+msgid ""
+"Use this function to massively assign Chronopost parcel numbers to the "
+"desired orders. \n"
+"                            This is useful if you edit your waybills from a "
+"third-party application. (Eg ChronoShip Office ChronoShip Station ...).\n"
+"                            The expected file must be in CSV format with "
+"semicolon separator.<br/><br/>It must contain 2 columns : "
+"<ol><li>WooCommerce orders reference</li><li>\n"
+"                            Chronopost tracking number</li></ol><br/>An "
+"email contaning the tracking number and a link \n"
+"                            to follow the parcel will be sent to the "
+"customer."
+msgstr ""
+
+#: admin/partials/chronopost-admin-import-tracking.php:13
+msgid "Order reference column number"
+msgstr ""
+
+#: admin/partials/chronopost-admin-import-tracking.php:15
+msgid "Tracking column number"
+msgstr ""
+
+#: admin/partials/chronopost-admin-import-tracking.php:17
+msgid "Pick a file to upload"
+msgstr ""
+
+#: admin/partials/chronopost-admin-shipping.php:13
+msgid "Chronopost shipments"
+msgstr ""
+
+#: admin/partials/chronopost-admin-shipping.php:20
+msgid "Cancel label"
+msgstr ""
+
+#: admin/partials/chronopost-admin-shipping.php:48
+msgid "weight"
+msgstr ""
+
+#: admin/partials/chronopost-admin-shipping.php:48
+msgid "height"
+msgstr ""
+
+#: admin/partials/chronopost-admin-shipping.php:48
+msgid "length"
+msgstr ""
+
+#: admin/partials/chronopost-admin-shipping.php:48
+msgid "width"
+msgstr ""
+
+#: admin/partials/chronopost-admin-shipping.php:64
+msgid "Tracking"
+msgstr ""
+
+#: admin/partials/chronopost-admin-shipping.php:65
+msgid "Labels"
+msgstr ""
+
+#: admin/partials/chronopost-admin-shipping.php:66
+msgid "Return labels"
+msgstr ""
+
+#: emails/customer-return-label.php:28
+#: emails/plain/customer-return-label.php:25
+msgid "Hello,"
+msgstr ""
+
+#: emails/customer-return-label.php:30
+#: emails/plain/customer-return-label.php:27
+msgid ""
+"You will soon be making a Chronopost shipment for your backorder #%s. The "
+"person who sent you this mail has already prepared the waybill you will use. "
+"After printing, affix the shipping letter in an adhesive plastic pouch and "
+"affix it to your shipment. Note that the bar code must be clearly visible."
+msgstr ""
+
+#: emails/customer-return-label.php:32
+#: emails/plain/customer-return-label.php:29
+msgid "Regards."
+msgstr ""
+
+#: includes/class-chronopost-order.php:119
+msgid ""
+"Your order has just been shipped. The tracking number is %s, you can track "
+"your shipment by <a href=\"%s\">clicking here</a>"
+msgstr ""
+
+#: includes/class-chronopost-package.php:43
+msgid ""
+"Warning, missing weight for Product %s. You should fill this information to "
+"make right label estimates."
+msgstr ""
+
+#: includes/class-chronopost-product.php:73
+#: includes/class-chronopost-product.php:74
+msgid "Chronopost Product"
+msgstr ""
+
+#: includes/class-chronopost-product.php:332
+msgid "Free"
+msgstr ""
+
+#: includes/class-chronopost-product.php:381
+msgid "Enable?"
+msgstr ""
+
+#: includes/class-chronopost-product.php:383
+msgid "Enable the shipping method"
+msgstr ""
+
+#: includes/class-chronopost-product.php:387
+msgid "Contract"
+msgstr ""
+
+#: includes/class-chronopost-product.php:393
+msgid "Checkout Title"
+msgstr ""
+
+#: includes/class-chronopost-product.php:394
+msgid "This title appear during the checkout"
+msgstr ""
+
+#: includes/class-chronopost-product.php:400
+msgid "Activate Quickcost"
+msgstr ""
+
+#: includes/class-chronopost-product.php:402
+msgid "Automatically calculate the shipping cost with Quickcost"
+msgstr ""
+
+#: includes/class-chronopost-product.php:404
+msgid ""
+"Quickcost will calculate the cost of an item, depending on the rates "
+"negociated with Chronopost. This option replaces the use of the fee schedule."
+msgstr ""
+
+#: includes/class-chronopost-product.php:408
+msgid "Quickcost URL"
+msgstr ""
+
+#: includes/class-chronopost-product.php:413
+msgid "Value to add to Quickcost"
+msgstr ""
+
+#: includes/class-chronopost-product.php:419
+msgid "Type of marge"
+msgstr ""
+
+#: includes/class-chronopost-product.php:423
+msgid "Amount (€)"
+msgstr ""
+
+#: includes/class-chronopost-product.php:424
+msgid "Percentage (%)"
+msgstr ""
+
+#: includes/class-chronopost-product.php:431
+msgid "Application fee"
+msgstr ""
+
+#: includes/class-chronopost-product.php:440
+msgid "Handling fee"
+msgstr ""
+
+#: includes/class-chronopost-product.php:449
+msgid "Tracking URL"
+msgstr ""
+
+#: includes/class-chronopost-product.php:454
+msgid "Deliver on Saturday?"
+msgstr ""
+
+#: includes/class-chronopost-product.php:463
+msgid "Tax status"
+msgstr ""
+
+#: includes/class-chronopost-product.php:467
+msgid "Taxable"
+msgstr ""
+
+#: includes/class-chronopost-product.php:503
+msgid "Shipping rates"
+msgstr ""
+
+#: includes/class-chronopost-product.php:513
+msgid "Shipping Zone Name"
+msgstr ""
+
+#: includes/class-chronopost-product.php:514
+msgid "Countries"
+msgstr ""
+
+#: includes/class-chronopost-product.php:520
+msgid "Add New Shipping Zone"
+msgstr ""
+
+#: includes/class-chronopost-product.php:521
+msgid "Delete Selected Zones"
+msgstr ""
+
+#: includes/class-chronopost-product.php:604
+msgid ""
+"You can't enable this product with this contract. Please contact us for more "
+"informations."
+msgstr ""
+
+#: includes/class-chronopost-return-email.php:28
+msgid "Return Label Email"
+msgstr ""
+
+#: includes/class-chronopost-return-email.php:31
+msgid "Email sent to customers when return labels are generated"
+msgstr ""
+
+#: includes/class-chronopost-return-email.php:52
+msgid "%s: your Chronopost return label"
+msgstr ""
+
+#: includes/class-chronopost-return-email.php:63
+msgid "Your Chronopost return label"
+msgstr ""
+
+#: includes/class-chronopost-shipment.php:44
+msgid "An error occured during the label creation."
+msgstr ""
+
+#: includes/class-chronopost-shipment.php:65
+msgid "Please select an action in the \"Bulk Actions\" list"
+msgstr ""
+
+#: includes/class-chronopost-shipment.php:116
+msgid "Please select orders before generate labels"
+msgstr ""
+
+#: includes/class-chronopost-shipment.php:122
+msgid "Return label has already been generated."
+msgstr ""
+
+#: includes/class-chronopost-shipment.php:129
+msgid "An error occured while generating your labels. Please try again."
+msgstr ""
+
+#: includes/class-chronopost-shipment.php:828
+msgid ""
+"Warning : the total weight of the packages exceeds 30kg for the #%s order, "
+"you will need to generate at least one additional label."
+msgstr ""
+
+#: includes/class-chronopost-webservice.php:328
+msgid ""
+"An error occured during the label creation. Please check if this contract "
+"can edit labels for this carrier."
+msgstr ""
+
+#: includes/class-chronopost-webservice.php:331
+#: includes/class-chronopost-webservice.php:338
+msgid ""
+"An error occured during the label creation. Please check the customer datas "
+"or your Chronopost settings."
+msgstr ""
+
+#: includes/class-chronopost-webservice.php:332
+msgid "Webservice error:"
+msgstr ""
+
+#: includes/class-chronopost-webservice.php:339
+msgid "System error:"
+msgstr ""
+
+#: includes/class-chronopost-webservice.php:995
+msgid "The return label has been generated and has just been sent"
+msgstr ""
+
+#: includes/class-chronopost-webservice.php:1014
+msgid "Return labels are not available for this country : %s"
+msgstr ""
+
+#: includes/class-chronopost-webservice.php:1021
+msgid "Return labels are not available for this method:"
+msgstr ""
+
+#: includes/class-chronopost-webservice.php:1238
+msgid "The label %s was cancelled"
+msgstr ""
+
+#: includes/class-chronopost-webservice.php:1244
+msgid "An error occured when cancelling the %s label"
+msgstr ""
+
+#: includes/class-chronopost-webservice.php:1247
+msgid ""
+"the %s package does not belong to the contract passed as parameter or has "
+"not yet been registered in the Chronopost tracking system"
+msgstr ""
+
+#: includes/class-chronopost-webservice.php:1250
+msgid ""
+"The %s package can not be cancelled because it was supported by Chronopost"
+msgstr ""
+
+#: includes/functions-chronopost-helpers.php:122
+msgid "Information Chronopost"
+msgstr ""
+
+#: includes/functions-chronopost-helpers.php:133
+msgid "I understand"
+msgstr ""
+
+#: includes/functions-chronopost-helpers.php:329
+msgid "One or several packages are above the weight limit (%s kg)"
+msgstr ""
+
+#: includes/functions-chronopost-helpers.php:332
+msgid "One or several packages are above the size limit (%s cm)"
+msgstr ""
+
+#: includes/functions-chronopost-helpers.php:335
+msgid ""
+"One or several packages are above the total (L+2H+2l) size limit (%s cm)"
+msgstr ""
+
+#: includes/products/chrono10.php:19
+msgid "Express delivery before 10am at home"
+msgstr ""
+
+#: includes/products/chrono10.php:20 includes/products/chrono10.php:21
+msgid "Chrono 10"
+msgstr ""
+
+#: includes/products/chrono10.php:22
+msgid ""
+"Parcels delivered the next day before 10am at your home. The day before "
+"delivery, You'll be notified by e-mail and SMS."
+msgstr ""
+
+#: includes/products/chrono13.php:21
+msgid "Express delivery before 1pm at home"
+msgstr ""
+
+#: includes/products/chrono13.php:22 includes/products/chrono13.php:23
+msgid "Chrono 13"
+msgstr ""
+
+#: includes/products/chrono13.php:24
+msgid ""
+"Parcels delivered the next day before 1pm at your home. The day before "
+"delivery, You'll be notified by e-mail and SMS."
+msgstr ""
+
+#: includes/products/chrono18.php:21
+msgid "Express delivery before 6pm at home"
+msgstr ""
+
+#: includes/products/chrono18.php:22 includes/products/chrono18.php:23
+msgid "Chrono 18"
+msgstr ""
+
+#: includes/products/chrono18.php:24
+msgid ""
+"Parcels delivered the next day before 6pm at your home. The day before "
+"delivery, You'll be notified by e-mail and SMS."
+msgstr ""
+
+#: includes/products/chronoclassic.php:19
+msgid "Express delivery at home"
+msgstr ""
+
+#: includes/products/chronoclassic.php:20
+#: includes/products/chronoclassic.php:21
+msgid "Chrono Classic"
+msgstr ""
+
+#: includes/products/chronoclassic.php:22
+#: includes/products/chronosameday.php:22
+msgid "Parcels delivered to Europe in 1 to 3 days"
+msgstr ""
+
+#: includes/products/chronoexpress.php:19
+msgid "Worldwide Express delivery"
+msgstr ""
+
+#: includes/products/chronoexpress.php:20
+#: includes/products/chronoexpress.php:21
+msgid "Chrono Express"
+msgstr ""
+
+#: includes/products/chronoexpress.php:22
+msgid ""
+"Parcels delivered to Europe in 1 to 3 days, 48 hours to the DOM and 2 to 5 "
+"days to the rest of the world."
+msgstr ""
+
+#: includes/products/chronordv.php:21
+msgid "Delivery on appointment"
+msgstr ""
+
+#: includes/products/chronordv.php:22 includes/products/chronordv.php:23
+msgid "Chrono RDV"
+msgstr ""
+
+#: includes/products/chronordv.php:24
+msgid ""
+"By appointment at your home! Order delivered on the day of your choice in a "
+"2-hour time slot. You can reprogram your delivery in case of absence."
+msgstr ""
+
+#: includes/products/chronordv.php:46
+msgid "Please <a href=\"#container-method-%s\">select an appointment</a>"
+msgstr ""
+
+#: includes/products/chronordv.php:65
+msgid ""
+"An error occured while validating your data, please refresh the page and try "
+"again."
+msgstr ""
+
+#: includes/products/chronordv.php:132
+msgid "Date of delivery"
+msgstr ""
+
+#: includes/products/chronordv.php:134
+msgid "Date from which the weeks list of the RDV option will be calculated"
+msgstr ""
+
+#: includes/products/chronordv.php:141
+msgid "Day of delivery +"
+msgstr ""
+
+#: includes/products/chronordv.php:142
+msgid "day(s)"
+msgstr ""
+
+#: includes/products/chronordv.php:146
+msgid "or day and hour of delivery"
+msgstr ""
+
+#: includes/products/chronordv.php:152
+msgid "Hour of delivery"
+msgstr ""
+
+#: includes/products/chronordv.php:164
+msgid "Show cost levels"
+msgstr ""
+
+#: includes/products/chronordv.php:180
+msgid "Cost levels"
+msgstr ""
+
+#: includes/products/chronordv.php:193
+msgid "Appointment %s"
+msgstr ""
+
+#: includes/products/chronordv.php:203
+msgid "Price"
+msgstr ""
+
+#: includes/products/chronordv.php:221
+msgid "Slots to be closed"
+msgstr ""
+
+#: includes/products/chronordv.php:233
+msgid "Add New Slot"
+msgstr ""
+
+#: includes/products/chronordv.php:234
+msgid "Delete Selected Slot"
+msgstr ""
+
+#: includes/products/chronordv.php:307 includes/products/chronordv.php:390
+msgid "Appointment for delivery on %s between %s and %s"
+msgstr ""
+
+#: includes/products/chronordv.php:309 public/class-chronopost-public.php:139
+msgid "Edit"
+msgstr ""
+
+#: includes/products/chronordv.php:311 includes/products/chronordv.php:314
+msgid "Select an appointment"
+msgstr ""
+
+#: includes/products/chronorelais.php:23
+msgid "Express delivery in Pickup relay"
+msgstr ""
+
+#: includes/products/chronorelais.php:24 includes/products/chronorelais.php:25
+msgid "Chrono Relay"
+msgstr ""
+
+#: includes/products/chronorelais.php:26
+msgid ""
+"In relay Pickup within 24h! Order delivered the next day in the pickup relay "
+"of your choice, among 7500 points spread all over France."
+msgstr ""
+
+#: includes/products/chronorelais.php:53
+msgid "Can change postcode ?"
+msgstr ""
+
+#: includes/products/chronorelais.php:55
+msgid "Allow the user to change the postcode on the map"
+msgstr ""
+
+#: includes/products/chronorelais.php:59
+msgid "Max distance search"
+msgstr ""
+
+#: includes/products/chronorelais.php:64
+msgid "Max pickup relay number"
+msgstr ""
+
+#: includes/products/chronorelais.php:69
+msgid "Enable Google Map ?"
+msgstr ""
+
+#: includes/products/chronorelais.php:71
+msgid "Activate the pickup relays choice on Google Map"
+msgstr ""
+
+#: includes/products/chronorelais.php:88
+msgid "Please <a href=\"#container-method-%s\">select a pickup relay</a>"
+msgstr ""
+
+#: includes/products/chronorelais.php:205
+#: public/class-chronopost-public.php:138
+msgid "Select a pickup relay"
+msgstr ""
+
+#: includes/products/chronorelais.php:226
+msgid "View on Google Map"
+msgstr ""
+
+#: includes/products/chronorelais.php:268
+msgid "No relay points found. Please check your address information."
+msgstr ""
+
+#: includes/products/chronorelaiseurope.php:23
+msgid "Chronopost - Express delivery in Pickup relay"
+msgstr ""
+
+#: includes/products/chronorelaiseurope.php:24
+#: includes/products/chronorelaiseurope.php:25
+msgid "Chrono Relais Europe"
+msgstr ""
+
+#: includes/products/chronorelaiseurope.php:26
+msgid "In relay Pickup! Order delivered in the pickup relay of your choice"
+msgstr ""
+
+#: includes/products/chronosameday.php:19
+msgid "Same-day express delivery at home"
+msgstr ""
+
+#: includes/products/chronosameday.php:20
+#: includes/products/chronosameday.php:21
+msgid "Chrono Sameday"
+msgstr ""
+
+#: includes/products/chronosameday.php:30
+msgid "Disable after"
+msgstr ""
+
+#: public/class-chronopost-public.php:123
+msgid "Prev week"
+msgstr ""
+
+#: public/class-chronopost-public.php:124
+msgid "Next week"
+msgstr ""
+
+#: public/class-chronopost-public.php:140
+msgid "Loading, please wait&hellip;"
+msgstr ""
+
+#: public/class-chronopost-public.php:141
+msgid "Mon"
+msgstr ""
+
+#: public/class-chronopost-public.php:142
+msgid "Tue"
+msgstr ""
+
+#: public/class-chronopost-public.php:143
+msgid "Wed"
+msgstr ""
+
+#: public/class-chronopost-public.php:144
+msgid "Thu"
+msgstr ""
+
+#: public/class-chronopost-public.php:145
+msgid "Fri"
+msgstr ""
+
+#: public/class-chronopost-public.php:146
+msgid "Sat"
+msgstr ""
+
+#: public/class-chronopost-public.php:147
+msgid "Sun"
+msgstr ""
+
+#: public/class-chronopost-public.php:148
+msgid "Infos"
+msgstr ""
+
+#: public/class-chronopost-public.php:149
+msgid "Opening hours"
+msgstr ""
+
+#: public/class-chronopost-public.php:150
+msgid "Closed"
+msgstr ""
+
+#: templates/chronordv.php:109 templates/chronordv.php:174
+msgid "Confirm time slot"
+msgstr ""
+
+#: templates/chronordv.php:184
+msgid ""
+"It's not possible to use this service for your order yet, we are currently "
+"working to allow new cities to benefit from this new service."
+msgstr ""
+
+#: templates/chronorelais.php:4
+msgid "Chronopost Pickup Relays"
+msgstr ""
+
+#: templates/chronorelais.php:29
+msgid ""
+"Please select one of the 5 pickup relays displayed below to serve as the "
+"delivery address."
+msgstr ""
+
+#: templates/chronorelais.php:35
+msgid "Update my postcode"
+msgstr ""
+
+#: templates/chronorelais.php:50
+msgid "Confirm relay pickup"
+msgstr ""
+
+#. Plugin URI of the plugin/theme
+msgid "https://www.chronopost.fr/"
+msgstr ""
+
+#. Description of the plugin/theme
+msgid "Chronopost shipping methods for WooCommerce"
+msgstr ""
+
+#. Author of the plugin/theme
+msgid "Adexos"
+msgstr ""
+
+#. Author URI of the plugin/theme
+msgid "https://www.adexos.fr"
+msgstr ""
diff --git a/wp-content/plugins/woocommerce-chronopost/package-lock.json b/wp-content/plugins/woocommerce-chronopost/package-lock.json
new file mode 100755 (executable)
index 0000000..16bcbb3
--- /dev/null
@@ -0,0 +1,10234 @@
+{
+  "name": "Gulp",
+  "version": "1.0.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "abbrev": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+      "dev": true
+    },
+    "accepts": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+      "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+      "dev": true,
+      "requires": {
+        "mime-types": "~2.1.18",
+        "negotiator": "0.6.1"
+      }
+    },
+    "acorn": {
+      "version": "5.7.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
+      "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==",
+      "dev": true
+    },
+    "after": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+      "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
+      "dev": true
+    },
+    "ajv": {
+      "version": "4.11.8",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+      "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
+      "dev": true,
+      "requires": {
+        "co": "^4.6.0",
+        "json-stable-stringify": "^1.0.1"
+      },
+      "dependencies": {
+        "co": {
+          "version": "4.6.0",
+          "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+          "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+          "dev": true
+        }
+      }
+    },
+    "align-text": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+      "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2",
+        "longest": "^1.0.1",
+        "repeat-string": "^1.5.2"
+      }
+    },
+    "amdefine": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+      "dev": true
+    },
+    "ansi-colors": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
+      "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
+      "dev": true,
+      "requires": {
+        "ansi-wrap": "^0.1.0"
+      }
+    },
+    "ansi-cyan": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz",
+      "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=",
+      "dev": true,
+      "requires": {
+        "ansi-wrap": "0.1.0"
+      }
+    },
+    "ansi-gray": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+      "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
+      "dev": true,
+      "requires": {
+        "ansi-wrap": "0.1.0"
+      }
+    },
+    "ansi-red": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz",
+      "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=",
+      "dev": true,
+      "requires": {
+        "ansi-wrap": "0.1.0"
+      }
+    },
+    "ansi-regex": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+      "dev": true
+    },
+    "ansi-styles": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+      "dev": true
+    },
+    "ansi-wrap": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+      "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+      "dev": true
+    },
+    "anymatch": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+      "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
+      "dev": true,
+      "requires": {
+        "micromatch": "^2.1.5",
+        "normalize-path": "^2.0.0"
+      }
+    },
+    "aproba": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+      "dev": true
+    },
+    "archive-type": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-3.2.0.tgz",
+      "integrity": "sha1-nNnABpV+vpX62tW9YJiUKoE3N/Y=",
+      "dev": true,
+      "requires": {
+        "file-type": "^3.1.0"
+      },
+      "dependencies": {
+        "file-type": {
+          "version": "3.9.0",
+          "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
+          "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
+          "dev": true
+        }
+      }
+    },
+    "archy": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+      "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+      "dev": true
+    },
+    "are-we-there-yet": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+      "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+      "dev": true,
+      "requires": {
+        "delegates": "^1.0.0",
+        "readable-stream": "^2.0.6"
+      }
+    },
+    "argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "sprintf-js": "~1.0.2"
+      }
+    },
+    "arr-diff": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+      "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+      "dev": true,
+      "requires": {
+        "arr-flatten": "^1.0.1"
+      }
+    },
+    "arr-flatten": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+      "dev": true
+    },
+    "arr-union": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+      "dev": true
+    },
+    "array-differ": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
+      "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
+      "dev": true
+    },
+    "array-each": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+      "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+      "dev": true
+    },
+    "array-find-index": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+      "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+      "dev": true
+    },
+    "array-slice": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+      "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
+      "dev": true
+    },
+    "array-union": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+      "dev": true,
+      "requires": {
+        "array-uniq": "^1.0.1"
+      }
+    },
+    "array-uniq": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+      "dev": true
+    },
+    "array-unique": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+      "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+      "dev": true
+    },
+    "arraybuffer.slice": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
+      "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
+      "dev": true
+    },
+    "asn1": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+      "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
+      "dev": true
+    },
+    "assert-plus": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+      "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+      "dev": true
+    },
+    "assign-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+      "dev": true
+    },
+    "async": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+      "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+      "dev": true
+    },
+    "async-each": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+      "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+      "dev": true
+    },
+    "async-each-series": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz",
+      "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=",
+      "dev": true
+    },
+    "async-foreach": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+      "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
+      "dev": true
+    },
+    "async-limiter": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+      "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+      "dev": true
+    },
+    "asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+      "dev": true
+    },
+    "atob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
+      "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=",
+      "dev": true
+    },
+    "autoprefixer": {
+      "version": "8.6.5",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.5.tgz",
+      "integrity": "sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig==",
+      "dev": true,
+      "requires": {
+        "browserslist": "^3.2.8",
+        "caniuse-lite": "^1.0.30000864",
+        "normalize-range": "^0.1.2",
+        "num2fraction": "^1.2.2",
+        "postcss": "^6.0.23",
+        "postcss-value-parser": "^3.2.3"
+      }
+    },
+    "aws-sign2": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+      "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+      "dev": true
+    },
+    "aws4": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
+      "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==",
+      "dev": true
+    },
+    "axios": {
+      "version": "0.17.1",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.17.1.tgz",
+      "integrity": "sha1-LY4+XQvb1zJ/kbyBT1xXZg+Bgk0=",
+      "dev": true,
+      "requires": {
+        "follow-redirects": "^1.2.5",
+        "is-buffer": "^1.1.5"
+      }
+    },
+    "babel-runtime": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+      "dev": true,
+      "requires": {
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.11.0"
+      }
+    },
+    "backo2": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+      "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
+      "dev": true
+    },
+    "balanced-match": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+      "dev": true
+    },
+    "base": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+      "dev": true,
+      "requires": {
+        "cache-base": "^1.0.1",
+        "class-utils": "^0.3.5",
+        "component-emitter": "^1.2.1",
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.1",
+        "mixin-deep": "^1.2.0",
+        "pascalcase": "^0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+          "dev": true
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "base64-arraybuffer": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+      "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
+      "dev": true
+    },
+    "base64id": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
+      "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
+      "dev": true
+    },
+    "batch": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+      "dev": true
+    },
+    "bcrypt-pbkdf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "tweetnacl": "^0.14.3"
+      }
+    },
+    "beeper": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
+      "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
+      "dev": true
+    },
+    "better-assert": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+      "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+      "dev": true,
+      "requires": {
+        "callsite": "1.0.0"
+      }
+    },
+    "bin-build": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-2.2.0.tgz",
+      "integrity": "sha1-EfjdYfcP/Por3KpbRvXo/t1CIcw=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "archive-type": "^3.0.1",
+        "decompress": "^3.0.0",
+        "download": "^4.1.2",
+        "exec-series": "^1.0.0",
+        "rimraf": "^2.2.6",
+        "tempfile": "^1.0.0",
+        "url-regex": "^3.0.0"
+      },
+      "dependencies": {
+        "tempfile": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz",
+          "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "os-tmpdir": "^1.0.0",
+            "uuid": "^2.0.1"
+          }
+        },
+        "uuid": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
+          "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "bin-check": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-2.0.0.tgz",
+      "integrity": "sha1-hvjm9CU4k99g3DFpV/WvAqywWTA=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "executable": "^1.0.0"
+      }
+    },
+    "bin-pack": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/bin-pack/-/bin-pack-1.0.2.tgz",
+      "integrity": "sha1-wqAU7b8L7XCjKSBi7UZXe5YSBnk=",
+      "dev": true
+    },
+    "bin-version": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-1.0.4.tgz",
+      "integrity": "sha1-nrSY7m/Xb3q5p8FgQ2+JV5Q1144=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "find-versions": "^1.0.0"
+      }
+    },
+    "bin-version-check": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-2.1.0.tgz",
+      "integrity": "sha1-5OXfKQuQaffRETJAMe/BP90RpbA=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "bin-version": "^1.0.0",
+        "minimist": "^1.1.0",
+        "semver": "^4.0.3",
+        "semver-truncate": "^1.0.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "4.3.6",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+          "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "bin-wrapper": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-3.0.2.tgz",
+      "integrity": "sha1-Z9MwYmLksaXy+I7iNGT2plVneus=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "bin-check": "^2.0.0",
+        "bin-version-check": "^2.1.0",
+        "download": "^4.0.0",
+        "each-async": "^1.1.1",
+        "lazy-req": "^1.0.0",
+        "os-filter-obj": "^1.0.0"
+      }
+    },
+    "binary-extensions": {
+      "version": "1.11.0",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
+      "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=",
+      "dev": true
+    },
+    "bl": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
+      "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
+      "dev": true,
+      "requires": {
+        "readable-stream": "^2.3.5",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "blob": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
+      "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=",
+      "dev": true
+    },
+    "block-stream": {
+      "version": "0.0.9",
+      "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+      "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+      "dev": true,
+      "requires": {
+        "inherits": "~2.0.0"
+      }
+    },
+    "boolbase": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+      "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+      "dev": true
+    },
+    "boom": {
+      "version": "2.10.1",
+      "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+      "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
+      "dev": true,
+      "requires": {
+        "hoek": "2.x.x"
+      }
+    },
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "braces": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+      "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+      "dev": true,
+      "requires": {
+        "expand-range": "^1.8.1",
+        "preserve": "^0.2.0",
+        "repeat-element": "^1.1.2"
+      }
+    },
+    "browser-sync": {
+      "version": "2.24.6",
+      "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.24.6.tgz",
+      "integrity": "sha512-3cVW8Ft3sPQ1t9gqZXBDZhTyRce8NW4wf5KzpCYcg6fWjPbyt+vZLvEo+sTq7c7eNQhi8lInQWbjIFEpoM2f7Q==",
+      "dev": true,
+      "requires": {
+        "browser-sync-ui": "v1.0.1",
+        "bs-recipes": "1.3.4",
+        "chokidar": "1.7.0",
+        "connect": "3.6.6",
+        "connect-history-api-fallback": "^1.5.0",
+        "dev-ip": "^1.0.1",
+        "easy-extender": "2.3.2",
+        "eazy-logger": "3.0.2",
+        "etag": "^1.8.1",
+        "fresh": "^0.5.2",
+        "fs-extra": "3.0.1",
+        "http-proxy": "1.15.2",
+        "immutable": "3.8.2",
+        "localtunnel": "1.9.0",
+        "micromatch": "2.3.11",
+        "opn": "4.0.2",
+        "portscanner": "2.1.1",
+        "qs": "6.2.3",
+        "raw-body": "^2.3.2",
+        "resp-modifier": "6.0.2",
+        "rx": "4.1.0",
+        "serve-index": "1.9.1",
+        "serve-static": "1.13.2",
+        "server-destroy": "1.0.1",
+        "socket.io": "2.1.1",
+        "ua-parser-js": "0.7.17",
+        "yargs": "6.4.0"
+      }
+    },
+    "browser-sync-ui": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-1.0.1.tgz",
+      "integrity": "sha512-RIxmwVVcUFhRd1zxp7m2FfLnXHf59x4Gtj8HFwTA//3VgYI3AKkaQAuDL8KDJnE59XqCshxZa13JYuIWtZlKQg==",
+      "dev": true,
+      "requires": {
+        "async-each-series": "0.1.1",
+        "connect-history-api-fallback": "^1.1.0",
+        "immutable": "^3.7.6",
+        "server-destroy": "1.0.1",
+        "socket.io-client": "2.0.4",
+        "stream-throttle": "^0.1.3"
+      }
+    },
+    "browserslist": {
+      "version": "3.2.8",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz",
+      "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==",
+      "dev": true,
+      "requires": {
+        "caniuse-lite": "^1.0.30000844",
+        "electron-to-chromium": "^1.3.47"
+      }
+    },
+    "bs-recipes": {
+      "version": "1.3.4",
+      "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz",
+      "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=",
+      "dev": true
+    },
+    "buffer-alloc": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+      "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+      "dev": true,
+      "requires": {
+        "buffer-alloc-unsafe": "^1.1.0",
+        "buffer-fill": "^1.0.0"
+      }
+    },
+    "buffer-alloc-unsafe": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+      "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
+      "dev": true
+    },
+    "buffer-crc32": {
+      "version": "0.2.13",
+      "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+      "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
+      "dev": true
+    },
+    "buffer-fill": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+      "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
+      "dev": true
+    },
+    "buffer-from": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",
+      "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==",
+      "dev": true
+    },
+    "buffer-to-vinyl": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz",
+      "integrity": "sha1-APFfruOreh3aLN5tkSG//dB7ImI=",
+      "dev": true,
+      "requires": {
+        "file-type": "^3.1.0",
+        "readable-stream": "^2.0.2",
+        "uuid": "^2.0.1",
+        "vinyl": "^1.0.0"
+      },
+      "dependencies": {
+        "file-type": {
+          "version": "3.9.0",
+          "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
+          "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
+          "dev": true
+        },
+        "uuid": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
+          "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
+          "dev": true
+        },
+        "vinyl": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
+          "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
+          "dev": true,
+          "requires": {
+            "clone": "^1.0.0",
+            "clone-stats": "^0.0.1",
+            "replace-ext": "0.0.1"
+          }
+        }
+      }
+    },
+    "builtin-modules": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+      "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+      "dev": true
+    },
+    "bytes": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+      "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+      "dev": true
+    },
+    "cache-base": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+      "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+      "dev": true,
+      "requires": {
+        "collection-visit": "^1.0.0",
+        "component-emitter": "^1.2.1",
+        "get-value": "^2.0.6",
+        "has-value": "^1.0.0",
+        "isobject": "^3.0.1",
+        "set-value": "^2.0.0",
+        "to-object-path": "^0.3.0",
+        "union-value": "^1.0.0",
+        "unset-value": "^1.0.0"
+      },
+      "dependencies": {
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+          "dev": true
+        }
+      }
+    },
+    "cache-swap": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/cache-swap/-/cache-swap-0.3.0.tgz",
+      "integrity": "sha1-HFQaoQilAQb2ML3Zj+HeyLoTP1E=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "mkdirp": "^0.5.1",
+        "object-assign": "^4.0.1",
+        "rimraf": "^2.4.0"
+      }
+    },
+    "callsite": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+      "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
+      "dev": true
+    },
+    "camelcase": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+      "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+      "dev": true
+    },
+    "camelcase-keys": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+      "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+      "dev": true,
+      "requires": {
+        "camelcase": "^2.0.0",
+        "map-obj": "^1.0.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+          "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+          "dev": true
+        }
+      }
+    },
+    "caniuse-lite": {
+      "version": "1.0.30000865",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000865.tgz",
+      "integrity": "sha512-vs79o1mOSKRGv/1pSkp4EXgl4ZviWeYReXw60XfacPU64uQWZwJT6vZNmxRF9O+6zu71sJwMxLK5JXxbzuVrLw==",
+      "dev": true
+    },
+    "capture-stack-trace": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz",
+      "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=",
+      "dev": true
+    },
+    "caseless": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+      "dev": true
+    },
+    "caw": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/caw/-/caw-1.2.0.tgz",
+      "integrity": "sha1-/7Im/n78VHKI3GLuPpcHPCEtEDQ=",
+      "dev": true,
+      "requires": {
+        "get-proxy": "^1.0.1",
+        "is-obj": "^1.0.0",
+        "object-assign": "^3.0.0",
+        "tunnel-agent": "^0.4.0"
+      },
+      "dependencies": {
+        "object-assign": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+          "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
+          "dev": true
+        }
+      }
+    },
+    "center-align": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+      "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+      "dev": true,
+      "requires": {
+        "align-text": "^0.1.3",
+        "lazy-cache": "^1.0.3"
+      }
+    },
+    "chalk": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+      "dev": true,
+      "requires": {
+        "ansi-styles": "^2.2.1",
+        "escape-string-regexp": "^1.0.2",
+        "has-ansi": "^2.0.0",
+        "strip-ansi": "^3.0.0",
+        "supports-color": "^2.0.0"
+      }
+    },
+    "chokidar": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+      "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+      "dev": true,
+      "requires": {
+        "anymatch": "^1.3.0",
+        "async-each": "^1.0.0",
+        "fsevents": "^1.0.0",
+        "glob-parent": "^2.0.0",
+        "inherits": "^2.0.1",
+        "is-binary-path": "^1.0.0",
+        "is-glob": "^2.0.0",
+        "path-is-absolute": "^1.0.0",
+        "readdirp": "^2.0.0"
+      }
+    },
+    "class-utils": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+      "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+      "dev": true,
+      "requires": {
+        "arr-union": "^3.1.0",
+        "define-property": "^0.2.5",
+        "isobject": "^3.0.0",
+        "static-extend": "^0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+          "dev": true
+        }
+      }
+    },
+    "clean-css": {
+      "version": "2.2.23",
+      "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-2.2.23.tgz",
+      "integrity": "sha1-BZC1R4tRbEkD7cLYm9P9vdKGMow=",
+      "dev": true,
+      "requires": {
+        "commander": "2.2.x"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.2.0.tgz",
+          "integrity": "sha1-F1rUuTF/P/YV8gHB5XIk9Vo+kd8=",
+          "dev": true
+        }
+      }
+    },
+    "cliui": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+      "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+      "dev": true,
+      "requires": {
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1",
+        "wrap-ansi": "^2.0.0"
+      }
+    },
+    "clone": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+      "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+      "dev": true
+    },
+    "clone-buffer": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
+      "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=",
+      "dev": true
+    },
+    "clone-stats": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+      "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+      "dev": true
+    },
+    "cloneable-readable": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz",
+      "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "process-nextick-args": "^2.0.0",
+        "readable-stream": "^2.3.5"
+      }
+    },
+    "co": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz",
+      "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=",
+      "dev": true
+    },
+    "coa": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.1.tgz",
+      "integrity": "sha512-5wfTTO8E2/ja4jFSxePXlG5nRu5bBtL/r1HCIpJW/lzT6yDtKl0u0Z4o/Vpz32IpKmBn7HerheEZQgA9N2DarQ==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "q": "^1.1.2"
+      }
+    },
+    "code-point-at": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+      "dev": true
+    },
+    "collection-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+      "dev": true,
+      "requires": {
+        "map-visit": "^1.0.0",
+        "object-visit": "^1.0.0"
+      }
+    },
+    "color-convert": {
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz",
+      "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==",
+      "dev": true,
+      "requires": {
+        "color-name": "1.1.1"
+      }
+    },
+    "color-name": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz",
+      "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=",
+      "dev": true
+    },
+    "color-support": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+      "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+      "dev": true
+    },
+    "colors": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+      "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+      "dev": true,
+      "optional": true
+    },
+    "combined-stream": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+      "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
+      "dev": true,
+      "requires": {
+        "delayed-stream": "~1.0.0"
+      }
+    },
+    "commander": {
+      "version": "2.16.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz",
+      "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==",
+      "dev": true
+    },
+    "component-bind": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+      "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
+      "dev": true
+    },
+    "component-emitter": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+      "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+      "dev": true
+    },
+    "component-inherit": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+      "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
+      "dev": true
+    },
+    "concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+      "dev": true
+    },
+    "concat-stream": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+      "dev": true,
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.2.2",
+        "typedarray": "^0.0.6"
+      }
+    },
+    "connect": {
+      "version": "3.6.6",
+      "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
+      "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.9",
+        "finalhandler": "1.1.0",
+        "parseurl": "~1.3.2",
+        "utils-merge": "1.0.1"
+      }
+    },
+    "connect-history-api-fallback": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz",
+      "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=",
+      "dev": true
+    },
+    "console-control-strings": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+      "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+      "dev": true
+    },
+    "console-stream": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz",
+      "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=",
+      "dev": true,
+      "optional": true
+    },
+    "contentstream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/contentstream/-/contentstream-1.0.0.tgz",
+      "integrity": "sha1-C9z6RtowRkqGzo+n7OVlQQ3G+aU=",
+      "dev": true,
+      "requires": {
+        "readable-stream": "~1.0.33-1"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+          "dev": true
+        }
+      }
+    },
+    "convert-source-map": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
+      "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
+      "dev": true
+    },
+    "cookie": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+      "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+      "dev": true
+    },
+    "copy-descriptor": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+      "dev": true
+    },
+    "core-js": {
+      "version": "2.5.7",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+      "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+      "dev": true
+    },
+    "core-util-is": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+      "dev": true
+    },
+    "create-error-class": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
+      "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
+      "dev": true,
+      "requires": {
+        "capture-stack-trace": "^1.0.0"
+      }
+    },
+    "cross-spawn": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+      "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "lru-cache": "^4.0.1",
+        "shebang-command": "^1.2.0",
+        "which": "^1.2.9"
+      },
+      "dependencies": {
+        "lru-cache": {
+          "version": "4.1.3",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
+          "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
+          }
+        }
+      }
+    },
+    "cryptiles": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+      "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+      "dev": true,
+      "requires": {
+        "boom": "2.x.x"
+      }
+    },
+    "css-parse": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz",
+      "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=",
+      "dev": true
+    },
+    "css-select": {
+      "version": "1.3.0-rc0",
+      "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.3.0-rc0.tgz",
+      "integrity": "sha1-b5MZaqrnN2ZuoQNqjLFKj8t6kjE=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "boolbase": "^1.0.0",
+        "css-what": "2.1",
+        "domutils": "1.5.1",
+        "nth-check": "^1.0.1"
+      }
+    },
+    "css-select-base-adapter": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.0.tgz",
+      "integrity": "sha1-AQKz0UYw34bD65+p9UVicBBs+ZA=",
+      "dev": true,
+      "optional": true
+    },
+    "css-tree": {
+      "version": "1.0.0-alpha25",
+      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha25.tgz",
+      "integrity": "sha512-XC6xLW/JqIGirnZuUWHXCHRaAjje2b3OIB0Vj5RIJo6mIi/AdJo30quQl5LxUl0gkXDIrTrFGbMlcZjyFplz1A==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "mdn-data": "^1.0.0",
+        "source-map": "^0.5.3"
+      }
+    },
+    "css-url-regex": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz",
+      "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=",
+      "dev": true,
+      "optional": true
+    },
+    "css-what": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
+      "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=",
+      "dev": true,
+      "optional": true
+    },
+    "csso": {
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz",
+      "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "css-tree": "1.0.0-alpha.29"
+      },
+      "dependencies": {
+        "css-tree": {
+          "version": "1.0.0-alpha.29",
+          "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz",
+          "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "mdn-data": "~1.1.0",
+            "source-map": "^0.5.3"
+          }
+        }
+      }
+    },
+    "currently-unhandled": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+      "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+      "dev": true,
+      "requires": {
+        "array-find-index": "^1.0.1"
+      }
+    },
+    "cwise": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/cwise/-/cwise-1.0.10.tgz",
+      "integrity": "sha1-JO7mBy69/WuMb12tsXCQtkmxK+8=",
+      "dev": true,
+      "requires": {
+        "cwise-compiler": "^1.1.1",
+        "cwise-parser": "^1.0.0",
+        "static-module": "^1.0.0",
+        "uglify-js": "^2.6.0"
+      }
+    },
+    "cwise-compiler": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/cwise-compiler/-/cwise-compiler-1.1.3.tgz",
+      "integrity": "sha1-9NZnQQ6FDToxOn0tt7HlBbsDTMU=",
+      "dev": true,
+      "requires": {
+        "uniq": "^1.0.0"
+      }
+    },
+    "cwise-parser": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/cwise-parser/-/cwise-parser-1.0.3.tgz",
+      "integrity": "sha1-jkk8F9VPl8sDCp6YVLyGyd+zVP4=",
+      "dev": true,
+      "requires": {
+        "esprima": "^1.0.3",
+        "uniq": "^1.0.0"
+      },
+      "dependencies": {
+        "esprima": {
+          "version": "1.2.5",
+          "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.5.tgz",
+          "integrity": "sha1-CZNQL+r2aBODJXVvMPmlH+7sEek=",
+          "dev": true
+        }
+      }
+    },
+    "dashdash": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0"
+      },
+      "dependencies": {
+        "assert-plus": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+          "dev": true
+        }
+      }
+    },
+    "data-uri-to-buffer": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-0.0.3.tgz",
+      "integrity": "sha1-GK6XmmoMqZSwYlhTkW0mYruuCxo=",
+      "dev": true
+    },
+    "dateformat": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
+      "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=",
+      "dev": true
+    },
+    "debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "requires": {
+        "ms": "2.0.0"
+      }
+    },
+    "decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+      "dev": true
+    },
+    "decode-uri-component": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+      "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+      "dev": true
+    },
+    "decompress": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/decompress/-/decompress-3.0.0.tgz",
+      "integrity": "sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0=",
+      "dev": true,
+      "requires": {
+        "buffer-to-vinyl": "^1.0.0",
+        "concat-stream": "^1.4.6",
+        "decompress-tar": "^3.0.0",
+        "decompress-tarbz2": "^3.0.0",
+        "decompress-targz": "^3.0.0",
+        "decompress-unzip": "^3.0.0",
+        "stream-combiner2": "^1.1.1",
+        "vinyl-assign": "^1.0.1",
+        "vinyl-fs": "^2.2.0"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "5.0.15",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+          "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+          "dev": true,
+          "requires": {
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "2 || 3",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "dev": true,
+          "requires": {
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          }
+        },
+        "glob-stream": {
+          "version": "5.3.5",
+          "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz",
+          "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=",
+          "dev": true,
+          "requires": {
+            "extend": "^3.0.0",
+            "glob": "^5.0.3",
+            "glob-parent": "^3.0.0",
+            "micromatch": "^2.3.7",
+            "ordered-read-streams": "^0.3.0",
+            "through2": "^0.6.0",
+            "to-absolute-glob": "^0.1.1",
+            "unique-stream": "^2.0.2"
+          },
+          "dependencies": {
+            "readable-stream": {
+              "version": "1.0.34",
+              "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+              "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+              "dev": true,
+              "requires": {
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.1",
+                "isarray": "0.0.1",
+                "string_decoder": "~0.10.x"
+              }
+            },
+            "through2": {
+              "version": "0.6.5",
+              "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+              "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+              "dev": true,
+              "requires": {
+                "readable-stream": ">=1.0.33-1 <1.1.0-0",
+                "xtend": ">=4.0.0 <4.1.0-0"
+              }
+            }
+          }
+        },
+        "is-extglob": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+          "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+          "dev": true
+        },
+        "is-glob": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^2.1.0"
+          }
+        },
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+          "dev": true
+        },
+        "ordered-read-streams": {
+          "version": "0.3.0",
+          "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz",
+          "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=",
+          "dev": true,
+          "requires": {
+            "is-stream": "^1.0.1",
+            "readable-stream": "^2.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+          "dev": true
+        },
+        "unique-stream": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz",
+          "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=",
+          "dev": true,
+          "requires": {
+            "json-stable-stringify": "^1.0.0",
+            "through2-filter": "^2.0.0"
+          }
+        },
+        "vinyl": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
+          "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
+          "dev": true,
+          "requires": {
+            "clone": "^1.0.0",
+            "clone-stats": "^0.0.1",
+            "replace-ext": "0.0.1"
+          }
+        },
+        "vinyl-fs": {
+          "version": "2.4.4",
+          "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz",
+          "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=",
+          "dev": true,
+          "requires": {
+            "duplexify": "^3.2.0",
+            "glob-stream": "^5.3.2",
+            "graceful-fs": "^4.0.0",
+            "gulp-sourcemaps": "1.6.0",
+            "is-valid-glob": "^0.3.0",
+            "lazystream": "^1.0.0",
+            "lodash.isequal": "^4.0.0",
+            "merge-stream": "^1.0.0",
+            "mkdirp": "^0.5.0",
+            "object-assign": "^4.0.0",
+            "readable-stream": "^2.0.4",
+            "strip-bom": "^2.0.0",
+            "strip-bom-stream": "^1.0.0",
+            "through2": "^2.0.0",
+            "through2-filter": "^2.0.0",
+            "vali-date": "^1.0.0",
+            "vinyl": "^1.0.0"
+          }
+        }
+      }
+    },
+    "decompress-tar": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-3.1.0.tgz",
+      "integrity": "sha1-IXx4n5uURQ76rcXF5TeXj8MzxGY=",
+      "dev": true,
+      "requires": {
+        "is-tar": "^1.0.0",
+        "object-assign": "^2.0.0",
+        "strip-dirs": "^1.0.0",
+        "tar-stream": "^1.1.1",
+        "through2": "^0.6.1",
+        "vinyl": "^0.4.3"
+      },
+      "dependencies": {
+        "clone": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+          "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+          "dev": true
+        },
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+          "dev": true
+        },
+        "object-assign": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
+          "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+          "dev": true
+        },
+        "through2": {
+          "version": "0.6.5",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+          "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+          "dev": true,
+          "requires": {
+            "readable-stream": ">=1.0.33-1 <1.1.0-0",
+            "xtend": ">=4.0.0 <4.1.0-0"
+          }
+        },
+        "vinyl": {
+          "version": "0.4.6",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+          "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+          "dev": true,
+          "requires": {
+            "clone": "^0.2.0",
+            "clone-stats": "^0.0.1"
+          }
+        }
+      }
+    },
+    "decompress-tarbz2": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz",
+      "integrity": "sha1-iyOTVoE1X58YnYclag+L3ZbZZm0=",
+      "dev": true,
+      "requires": {
+        "is-bzip2": "^1.0.0",
+        "object-assign": "^2.0.0",
+        "seek-bzip": "^1.0.3",
+        "strip-dirs": "^1.0.0",
+        "tar-stream": "^1.1.1",
+        "through2": "^0.6.1",
+        "vinyl": "^0.4.3"
+      },
+      "dependencies": {
+        "clone": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+          "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+          "dev": true
+        },
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+          "dev": true
+        },
+        "object-assign": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
+          "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+          "dev": true
+        },
+        "through2": {
+          "version": "0.6.5",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+          "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+          "dev": true,
+          "requires": {
+            "readable-stream": ">=1.0.33-1 <1.1.0-0",
+            "xtend": ">=4.0.0 <4.1.0-0"
+          }
+        },
+        "vinyl": {
+          "version": "0.4.6",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+          "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+          "dev": true,
+          "requires": {
+            "clone": "^0.2.0",
+            "clone-stats": "^0.0.1"
+          }
+        }
+      }
+    },
+    "decompress-targz": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-3.1.0.tgz",
+      "integrity": "sha1-ssE9+YFmJomRtxXWRH9kLpaW9aA=",
+      "dev": true,
+      "requires": {
+        "is-gzip": "^1.0.0",
+        "object-assign": "^2.0.0",
+        "strip-dirs": "^1.0.0",
+        "tar-stream": "^1.1.1",
+        "through2": "^0.6.1",
+        "vinyl": "^0.4.3"
+      },
+      "dependencies": {
+        "clone": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+          "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+          "dev": true
+        },
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+          "dev": true
+        },
+        "object-assign": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
+          "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+          "dev": true
+        },
+        "through2": {
+          "version": "0.6.5",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+          "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+          "dev": true,
+          "requires": {
+            "readable-stream": ">=1.0.33-1 <1.1.0-0",
+            "xtend": ">=4.0.0 <4.1.0-0"
+          }
+        },
+        "vinyl": {
+          "version": "0.4.6",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+          "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+          "dev": true,
+          "requires": {
+            "clone": "^0.2.0",
+            "clone-stats": "^0.0.1"
+          }
+        }
+      }
+    },
+    "decompress-unzip": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-3.4.0.tgz",
+      "integrity": "sha1-YUdbQVIGa74/7hL51inRX+ZHjus=",
+      "dev": true,
+      "requires": {
+        "is-zip": "^1.0.0",
+        "read-all-stream": "^3.0.0",
+        "stat-mode": "^0.2.0",
+        "strip-dirs": "^1.0.0",
+        "through2": "^2.0.0",
+        "vinyl": "^1.0.0",
+        "yauzl": "^2.2.1"
+      },
+      "dependencies": {
+        "vinyl": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
+          "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
+          "dev": true,
+          "requires": {
+            "clone": "^1.0.0",
+            "clone-stats": "^0.0.1",
+            "replace-ext": "0.0.1"
+          }
+        }
+      }
+    },
+    "deep-extend": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+      "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+      "dev": true
+    },
+    "defaults": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+      "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+      "dev": true,
+      "requires": {
+        "clone": "^1.0.2"
+      }
+    },
+    "define-properties": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
+      "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
+      "dev": true,
+      "requires": {
+        "foreach": "^2.0.5",
+        "object-keys": "^1.0.8"
+      },
+      "dependencies": {
+        "object-keys": {
+          "version": "1.0.12",
+          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
+          "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
+          "dev": true
+        }
+      }
+    },
+    "define-property": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+      "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+      "dev": true,
+      "requires": {
+        "is-descriptor": "^1.0.2",
+        "isobject": "^3.0.1"
+      },
+      "dependencies": {
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+          "dev": true
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+      "dev": true
+    },
+    "delegates": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+      "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+      "dev": true
+    },
+    "depd": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+      "dev": true
+    },
+    "deprecated": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz",
+      "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=",
+      "dev": true
+    },
+    "destroy": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+      "dev": true
+    },
+    "detect-file": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+      "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+      "dev": true
+    },
+    "dev-ip": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz",
+      "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=",
+      "dev": true
+    },
+    "dom-serializer": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+      "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "domelementtype": "~1.1.1",
+        "entities": "~1.1.1"
+      },
+      "dependencies": {
+        "domelementtype": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+          "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "domelementtype": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
+      "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
+      "dev": true,
+      "optional": true
+    },
+    "domutils": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+      "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "dom-serializer": "0",
+        "domelementtype": "1"
+      }
+    },
+    "download": {
+      "version": "4.4.3",
+      "resolved": "https://registry.npmjs.org/download/-/download-4.4.3.tgz",
+      "integrity": "sha1-qlX9rTktldS2jowr4D4MKqIbqaw=",
+      "dev": true,
+      "requires": {
+        "caw": "^1.0.1",
+        "concat-stream": "^1.4.7",
+        "each-async": "^1.0.0",
+        "filenamify": "^1.0.1",
+        "got": "^5.0.0",
+        "gulp-decompress": "^1.2.0",
+        "gulp-rename": "^1.2.0",
+        "is-url": "^1.2.0",
+        "object-assign": "^4.0.1",
+        "read-all-stream": "^3.0.0",
+        "readable-stream": "^2.0.2",
+        "stream-combiner2": "^1.1.1",
+        "vinyl": "^1.0.0",
+        "vinyl-fs": "^2.2.0",
+        "ware": "^1.2.0"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "5.0.15",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+          "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+          "dev": true,
+          "requires": {
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "2 || 3",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "dev": true,
+          "requires": {
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          }
+        },
+        "glob-stream": {
+          "version": "5.3.5",
+          "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz",
+          "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=",
+          "dev": true,
+          "requires": {
+            "extend": "^3.0.0",
+            "glob": "^5.0.3",
+            "glob-parent": "^3.0.0",
+            "micromatch": "^2.3.7",
+            "ordered-read-streams": "^0.3.0",
+            "through2": "^0.6.0",
+            "to-absolute-glob": "^0.1.1",
+            "unique-stream": "^2.0.2"
+          },
+          "dependencies": {
+            "readable-stream": {
+              "version": "1.0.34",
+              "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+              "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+              "dev": true,
+              "requires": {
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.1",
+                "isarray": "0.0.1",
+                "string_decoder": "~0.10.x"
+              }
+            },
+            "through2": {
+              "version": "0.6.5",
+              "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+              "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+              "dev": true,
+              "requires": {
+                "readable-stream": ">=1.0.33-1 <1.1.0-0",
+                "xtend": ">=4.0.0 <4.1.0-0"
+              }
+            }
+          }
+        },
+        "is-extglob": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+          "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+          "dev": true
+        },
+        "is-glob": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^2.1.0"
+          }
+        },
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+          "dev": true
+        },
+        "ordered-read-streams": {
+          "version": "0.3.0",
+          "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz",
+          "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=",
+          "dev": true,
+          "requires": {
+            "is-stream": "^1.0.1",
+            "readable-stream": "^2.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+          "dev": true
+        },
+        "unique-stream": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz",
+          "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=",
+          "dev": true,
+          "requires": {
+            "json-stable-stringify": "^1.0.0",
+            "through2-filter": "^2.0.0"
+          }
+        },
+        "vinyl": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
+          "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
+          "dev": true,
+          "requires": {
+            "clone": "^1.0.0",
+            "clone-stats": "^0.0.1",
+            "replace-ext": "0.0.1"
+          }
+        },
+        "vinyl-fs": {
+          "version": "2.4.4",
+          "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz",
+          "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=",
+          "dev": true,
+          "requires": {
+            "duplexify": "^3.2.0",
+            "glob-stream": "^5.3.2",
+            "graceful-fs": "^4.0.0",
+            "gulp-sourcemaps": "1.6.0",
+            "is-valid-glob": "^0.3.0",
+            "lazystream": "^1.0.0",
+            "lodash.isequal": "^4.0.0",
+            "merge-stream": "^1.0.0",
+            "mkdirp": "^0.5.0",
+            "object-assign": "^4.0.0",
+            "readable-stream": "^2.0.4",
+            "strip-bom": "^2.0.0",
+            "strip-bom-stream": "^1.0.0",
+            "through2": "^2.0.0",
+            "through2-filter": "^2.0.0",
+            "vali-date": "^1.0.0",
+            "vinyl": "^1.0.0"
+          }
+        }
+      }
+    },
+    "duplexer2": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+      "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+      "dev": true,
+      "requires": {
+        "readable-stream": "~1.1.9"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "1.1.14",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+          "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+          "dev": true
+        }
+      }
+    },
+    "duplexify": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz",
+      "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "^1.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0",
+        "stream-shift": "^1.0.0"
+      },
+      "dependencies": {
+        "end-of-stream": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+          "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+          "dev": true,
+          "requires": {
+            "once": "^1.4.0"
+          }
+        },
+        "once": {
+          "version": "1.4.0",
+          "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+          "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+          "dev": true,
+          "requires": {
+            "wrappy": "1"
+          }
+        }
+      }
+    },
+    "each-async": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz",
+      "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=",
+      "dev": true,
+      "requires": {
+        "onetime": "^1.0.0",
+        "set-immediate-shim": "^1.0.0"
+      }
+    },
+    "easy-extender": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.2.tgz",
+      "integrity": "sha1-PTJI/r4rFZYHMW2PnPSRwWZIIh0=",
+      "dev": true,
+      "requires": {
+        "lodash": "^3.10.1"
+      }
+    },
+    "eazy-logger": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz",
+      "integrity": "sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw=",
+      "dev": true,
+      "requires": {
+        "tfunk": "^3.0.1"
+      }
+    },
+    "ecc-jsbn": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+      "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.1.0"
+      }
+    },
+    "ee-first": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+      "dev": true
+    },
+    "electron-to-chromium": {
+      "version": "1.3.52",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.52.tgz",
+      "integrity": "sha1-0tnxJwuko7lnuDHEDvcftNmrXOA=",
+      "dev": true
+    },
+    "encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+      "dev": true
+    },
+    "end-of-stream": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz",
+      "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=",
+      "dev": true,
+      "requires": {
+        "once": "~1.3.0"
+      }
+    },
+    "engine.io": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz",
+      "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==",
+      "dev": true,
+      "requires": {
+        "accepts": "~1.3.4",
+        "base64id": "1.0.0",
+        "cookie": "0.3.1",
+        "debug": "~3.1.0",
+        "engine.io-parser": "~2.1.0",
+        "ws": "~3.3.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "engine.io-client": {
+      "version": "3.1.6",
+      "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz",
+      "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==",
+      "dev": true,
+      "requires": {
+        "component-emitter": "1.2.1",
+        "component-inherit": "0.0.3",
+        "debug": "~3.1.0",
+        "engine.io-parser": "~2.1.1",
+        "has-cors": "1.1.0",
+        "indexof": "0.0.1",
+        "parseqs": "0.0.5",
+        "parseuri": "0.0.5",
+        "ws": "~3.3.1",
+        "xmlhttprequest-ssl": "~1.5.4",
+        "yeast": "0.1.2"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "engine.io-parser": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz",
+      "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==",
+      "dev": true,
+      "requires": {
+        "after": "0.8.2",
+        "arraybuffer.slice": "~0.0.7",
+        "base64-arraybuffer": "0.1.5",
+        "blob": "0.0.4",
+        "has-binary2": "~1.0.2"
+      }
+    },
+    "entities": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
+      "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
+      "dev": true,
+      "optional": true
+    },
+    "error-ex": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+      "dev": true,
+      "requires": {
+        "is-arrayish": "^0.2.1"
+      }
+    },
+    "es-abstract": {
+      "version": "1.12.0",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
+      "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
+      "dev": true,
+      "requires": {
+        "es-to-primitive": "^1.1.1",
+        "function-bind": "^1.1.1",
+        "has": "^1.0.1",
+        "is-callable": "^1.1.3",
+        "is-regex": "^1.0.4"
+      }
+    },
+    "es-to-primitive": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz",
+      "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
+      "dev": true,
+      "requires": {
+        "is-callable": "^1.1.1",
+        "is-date-object": "^1.0.1",
+        "is-symbol": "^1.0.1"
+      }
+    },
+    "escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+      "dev": true
+    },
+    "escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+      "dev": true
+    },
+    "escodegen": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.3.3.tgz",
+      "integrity": "sha1-8CQBb1qI4Eb9EgBQVek5gC5sXyM=",
+      "dev": true,
+      "requires": {
+        "esprima": "~1.1.1",
+        "estraverse": "~1.5.0",
+        "esutils": "~1.0.0",
+        "source-map": "~0.1.33"
+      },
+      "dependencies": {
+        "esprima": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.1.1.tgz",
+          "integrity": "sha1-W28VR/TRAuZw4UDFCb5ncdautUk=",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.1.43",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+          "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "amdefine": ">=0.0.4"
+          }
+        }
+      }
+    },
+    "esprima": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+      "dev": true,
+      "optional": true
+    },
+    "estraverse": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz",
+      "integrity": "sha1-hno+jlip+EYYr7bC3bzZFrfLr3E=",
+      "dev": true
+    },
+    "esutils": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz",
+      "integrity": "sha1-gVHTWOIMisx/t0XnRywAJf5JZXA=",
+      "dev": true
+    },
+    "etag": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+      "dev": true
+    },
+    "eventemitter3": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
+      "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=",
+      "dev": true
+    },
+    "exec-buffer": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz",
+      "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "execa": "^0.7.0",
+        "p-finally": "^1.0.0",
+        "pify": "^3.0.0",
+        "rimraf": "^2.5.4",
+        "tempfile": "^2.0.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "exec-series": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/exec-series/-/exec-series-1.0.3.tgz",
+      "integrity": "sha1-bSV6m+rEgqhyx3g7yGFYOfx3FDo=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "async-each-series": "^1.1.0",
+        "object-assign": "^4.1.0"
+      },
+      "dependencies": {
+        "async-each-series": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-1.1.0.tgz",
+          "integrity": "sha1-9C/YFV048hpbjqB8KOBj7RcAsTg=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "execa": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+      "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "cross-spawn": "^5.0.1",
+        "get-stream": "^3.0.0",
+        "is-stream": "^1.1.0",
+        "npm-run-path": "^2.0.0",
+        "p-finally": "^1.0.0",
+        "signal-exit": "^3.0.0",
+        "strip-eof": "^1.0.0"
+      }
+    },
+    "executable": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/executable/-/executable-1.1.0.tgz",
+      "integrity": "sha1-h3mA6REvM5EGbaNyZd562ENKtNk=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "meow": "^3.1.0"
+      }
+    },
+    "expand-brackets": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+      "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+      "dev": true,
+      "requires": {
+        "is-posix-bracket": "^0.1.0"
+      }
+    },
+    "expand-range": {
+      "version": "1.8.2",
+      "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+      "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+      "dev": true,
+      "requires": {
+        "fill-range": "^2.1.0"
+      }
+    },
+    "expand-tilde": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+      "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+      "dev": true,
+      "requires": {
+        "homedir-polyfill": "^1.0.1"
+      }
+    },
+    "extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+      "dev": true
+    },
+    "extend-shallow": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+      "dev": true,
+      "requires": {
+        "assign-symbols": "^1.0.0",
+        "is-extendable": "^1.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+          "dev": true,
+          "requires": {
+            "is-plain-object": "^2.0.4"
+          }
+        }
+      }
+    },
+    "extglob": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+      "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+      "dev": true,
+      "requires": {
+        "is-extglob": "^1.0.0"
+      }
+    },
+    "extsprintf": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+      "dev": true
+    },
+    "falafel": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.1.0.tgz",
+      "integrity": "sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw=",
+      "dev": true,
+      "requires": {
+        "acorn": "^5.0.0",
+        "foreach": "^2.0.5",
+        "isarray": "0.0.1",
+        "object-keys": "^1.0.6"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+          "dev": true
+        },
+        "object-keys": {
+          "version": "1.0.12",
+          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
+          "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
+          "dev": true
+        }
+      }
+    },
+    "fancy-log": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz",
+      "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=",
+      "dev": true,
+      "requires": {
+        "ansi-gray": "^0.1.1",
+        "color-support": "^1.1.3",
+        "time-stamp": "^1.0.0"
+      }
+    },
+    "fast-deep-equal": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+      "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+      "dev": true
+    },
+    "fast-json-stable-stringify": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+      "dev": true
+    },
+    "fd-slicer": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+      "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+      "dev": true,
+      "requires": {
+        "pend": "~1.2.0"
+      }
+    },
+    "figures": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+      "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "escape-string-regexp": "^1.0.5",
+        "object-assign": "^4.1.0"
+      }
+    },
+    "file-type": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz",
+      "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=",
+      "dev": true
+    },
+    "filename-regex": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+      "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+      "dev": true
+    },
+    "filename-reserved-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz",
+      "integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=",
+      "dev": true
+    },
+    "filenamify": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz",
+      "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=",
+      "dev": true,
+      "requires": {
+        "filename-reserved-regex": "^1.0.0",
+        "strip-outer": "^1.0.0",
+        "trim-repeated": "^1.0.0"
+      }
+    },
+    "fill-range": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+      "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+      "dev": true,
+      "requires": {
+        "is-number": "^2.1.0",
+        "isobject": "^2.0.0",
+        "randomatic": "^3.0.0",
+        "repeat-element": "^1.1.2",
+        "repeat-string": "^1.5.2"
+      }
+    },
+    "finalhandler": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
+      "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.9",
+        "encodeurl": "~1.0.1",
+        "escape-html": "~1.0.3",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.2",
+        "statuses": "~1.3.1",
+        "unpipe": "~1.0.0"
+      }
+    },
+    "find-index": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz",
+      "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=",
+      "dev": true
+    },
+    "find-up": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+      "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+      "dev": true,
+      "requires": {
+        "path-exists": "^2.0.0",
+        "pinkie-promise": "^2.0.0"
+      }
+    },
+    "find-versions": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-1.2.1.tgz",
+      "integrity": "sha1-y96fEuOFdaCvG+G5osXV/Y8Ya2I=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "array-uniq": "^1.0.0",
+        "get-stdin": "^4.0.1",
+        "meow": "^3.5.0",
+        "semver-regex": "^1.0.0"
+      }
+    },
+    "findup-sync": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+      "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
+      "dev": true,
+      "requires": {
+        "detect-file": "^1.0.0",
+        "is-glob": "^3.1.0",
+        "micromatch": "^3.0.4",
+        "resolve-dir": "^1.0.1"
+      },
+      "dependencies": {
+        "arr-diff": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+          "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+          "dev": true
+        },
+        "array-unique": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+          "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+          "dev": true
+        },
+        "braces": {
+          "version": "2.3.2",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+          "dev": true,
+          "requires": {
+            "arr-flatten": "^1.1.0",
+            "array-unique": "^0.3.2",
+            "extend-shallow": "^2.0.1",
+            "fill-range": "^4.0.0",
+            "isobject": "^3.0.1",
+            "repeat-element": "^1.1.2",
+            "snapdragon": "^0.8.1",
+            "snapdragon-node": "^2.0.1",
+            "split-string": "^3.0.2",
+            "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "expand-brackets": {
+          "version": "2.1.4",
+          "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+          "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+          "dev": true,
+          "requires": {
+            "debug": "^2.3.3",
+            "define-property": "^0.2.5",
+            "extend-shallow": "^2.0.1",
+            "posix-character-classes": "^0.1.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "define-property": {
+              "version": "0.2.5",
+              "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+              "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+              "dev": true,
+              "requires": {
+                "is-descriptor": "^0.1.0"
+              }
+            },
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            },
+            "is-accessor-descriptor": {
+              "version": "0.1.6",
+              "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+              "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+              "dev": true,
+              "requires": {
+                "kind-of": "^3.0.2"
+              },
+              "dependencies": {
+                "kind-of": {
+                  "version": "3.2.2",
+                  "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+                  "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+                  "dev": true,
+                  "requires": {
+                    "is-buffer": "^1.1.5"
+                  }
+                }
+              }
+            },
+            "is-data-descriptor": {
+              "version": "0.1.4",
+              "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+              "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+              "dev": true,
+              "requires": {
+                "kind-of": "^3.0.2"
+              },
+              "dependencies": {
+                "kind-of": {
+                  "version": "3.2.2",
+                  "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+                  "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+                  "dev": true,
+                  "requires": {
+                    "is-buffer": "^1.1.5"
+                  }
+                }
+              }
+            },
+            "is-descriptor": {
+              "version": "0.1.6",
+              "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+              "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+              "dev": true,
+              "requires": {
+                "is-accessor-descriptor": "^0.1.6",
+                "is-data-descriptor": "^0.1.4",
+                "kind-of": "^5.0.0"
+              }
+            },
+            "kind-of": {
+              "version": "5.1.0",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+              "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+              "dev": true
+            }
+          }
+        },
+        "extglob": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+          "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+          "dev": true,
+          "requires": {
+            "array-unique": "^0.3.2",
+            "define-property": "^1.0.0",
+            "expand-brackets": "^2.1.4",
+            "extend-shallow": "^2.0.1",
+            "fragment-cache": "^0.2.1",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "define-property": {
+              "version": "1.0.0",
+              "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+              "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+              "dev": true,
+              "requires": {
+                "is-descriptor": "^1.0.0"
+              }
+            },
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "fill-range": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+          "dev": true,
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "is-extglob": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+          "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+          "dev": true
+        },
+        "is-glob": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^2.1.0"
+          }
+        },
+        "is-number": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+          "dev": true
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        },
+        "micromatch": {
+          "version": "3.1.10",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+          "dev": true,
+          "requires": {
+            "arr-diff": "^4.0.0",
+            "array-unique": "^0.3.2",
+            "braces": "^2.3.1",
+            "define-property": "^2.0.2",
+            "extend-shallow": "^3.0.2",
+            "extglob": "^2.0.4",
+            "fragment-cache": "^0.2.1",
+            "kind-of": "^6.0.2",
+            "nanomatch": "^1.2.9",
+            "object.pick": "^1.3.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.2"
+          }
+        }
+      }
+    },
+    "fined": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz",
+      "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=",
+      "dev": true,
+      "requires": {
+        "expand-tilde": "^2.0.2",
+        "is-plain-object": "^2.0.3",
+        "object.defaults": "^1.1.0",
+        "object.pick": "^1.2.0",
+        "parse-filepath": "^1.0.1"
+      }
+    },
+    "first-chunk-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
+      "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
+      "dev": true
+    },
+    "flagged-respawn": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz",
+      "integrity": "sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c=",
+      "dev": true
+    },
+    "follow-redirects": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.1.tgz",
+      "integrity": "sha512-v9GI1hpaqq1ZZR6pBD1+kI7O24PhDvNGNodjS3MdcEqyrahCp8zbtpv+2B/krUnSmUH80lbAS7MrdeK5IylgKg==",
+      "dev": true,
+      "requires": {
+        "debug": "^3.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "for-in": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+      "dev": true
+    },
+    "for-own": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+      "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+      "dev": true,
+      "requires": {
+        "for-in": "^1.0.1"
+      }
+    },
+    "foreach": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
+      "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
+      "dev": true
+    },
+    "forever-agent": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+      "dev": true
+    },
+    "form-data": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
+      "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
+      "dev": true,
+      "requires": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.5",
+        "mime-types": "^2.1.12"
+      }
+    },
+    "fragment-cache": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+      "dev": true,
+      "requires": {
+        "map-cache": "^0.2.2"
+      }
+    },
+    "fresh": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+      "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+      "dev": true
+    },
+    "fs-constants": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+      "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+      "dev": true
+    },
+    "fs-extra": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
+      "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "jsonfile": "^3.0.0",
+        "universalify": "^0.1.0"
+      }
+    },
+    "fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+      "dev": true
+    },
+    "fsevents": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
+      "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "nan": "^2.9.2",
+        "node-pre-gyp": "^0.10.0"
+      },
+      "dependencies": {
+        "abbrev": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "ansi-regex": {
+          "version": "2.1.1",
+          "bundled": true,
+          "dev": true
+        },
+        "aproba": {
+          "version": "1.2.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "are-we-there-yet": {
+          "version": "1.1.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "delegates": "^1.0.0",
+            "readable-stream": "^2.0.6"
+          }
+        },
+        "balanced-match": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true
+        },
+        "brace-expansion": {
+          "version": "1.1.11",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "balanced-match": "^1.0.0",
+            "concat-map": "0.0.1"
+          }
+        },
+        "chownr": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "code-point-at": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true
+        },
+        "concat-map": {
+          "version": "0.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "console-control-strings": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true
+        },
+        "core-util-is": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "debug": {
+          "version": "2.6.9",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "deep-extend": {
+          "version": "0.5.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "delegates": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "detect-libc": {
+          "version": "1.0.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "fs-minipass": {
+          "version": "1.2.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minipass": "^2.2.1"
+          }
+        },
+        "fs.realpath": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "gauge": {
+          "version": "2.7.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "aproba": "^1.0.3",
+            "console-control-strings": "^1.0.0",
+            "has-unicode": "^2.0.0",
+            "object-assign": "^4.1.0",
+            "signal-exit": "^3.0.0",
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.1",
+            "wide-align": "^1.1.0"
+          }
+        },
+        "glob": {
+          "version": "7.1.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "has-unicode": {
+          "version": "2.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "iconv-lite": {
+          "version": "0.4.21",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "safer-buffer": "^2.1.0"
+          }
+        },
+        "ignore-walk": {
+          "version": "3.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minimatch": "^3.0.4"
+          }
+        },
+        "inflight": {
+          "version": "1.0.6",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "once": "^1.3.0",
+            "wrappy": "1"
+          }
+        },
+        "inherits": {
+          "version": "2.0.3",
+          "bundled": true,
+          "dev": true
+        },
+        "ini": {
+          "version": "1.3.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "minimatch": {
+          "version": "3.0.4",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        },
+        "minimist": {
+          "version": "0.0.8",
+          "bundled": true,
+          "dev": true
+        },
+        "minipass": {
+          "version": "2.2.4",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "safe-buffer": "^5.1.1",
+            "yallist": "^3.0.0"
+          }
+        },
+        "minizlib": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minipass": "^2.2.1"
+          }
+        },
+        "mkdirp": {
+          "version": "0.5.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "minimist": "0.0.8"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "needle": {
+          "version": "2.2.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "debug": "^2.1.2",
+            "iconv-lite": "^0.4.4",
+            "sax": "^1.2.4"
+          }
+        },
+        "node-pre-gyp": {
+          "version": "0.10.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "detect-libc": "^1.0.2",
+            "mkdirp": "^0.5.1",
+            "needle": "^2.2.0",
+            "nopt": "^4.0.1",
+            "npm-packlist": "^1.1.6",
+            "npmlog": "^4.0.2",
+            "rc": "^1.1.7",
+            "rimraf": "^2.6.1",
+            "semver": "^5.3.0",
+            "tar": "^4"
+          }
+        },
+        "nopt": {
+          "version": "4.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "abbrev": "1",
+            "osenv": "^0.1.4"
+          }
+        },
+        "npm-bundled": {
+          "version": "1.0.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "npm-packlist": {
+          "version": "1.1.10",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ignore-walk": "^3.0.1",
+            "npm-bundled": "^1.0.1"
+          }
+        },
+        "npmlog": {
+          "version": "4.1.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "are-we-there-yet": "~1.1.2",
+            "console-control-strings": "~1.1.0",
+            "gauge": "~2.7.3",
+            "set-blocking": "~2.0.0"
+          }
+        },
+        "number-is-nan": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "object-assign": {
+          "version": "4.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "once": {
+          "version": "1.4.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "wrappy": "1"
+          }
+        },
+        "os-homedir": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "os-tmpdir": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "osenv": {
+          "version": "0.1.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "os-homedir": "^1.0.0",
+            "os-tmpdir": "^1.0.0"
+          }
+        },
+        "path-is-absolute": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "process-nextick-args": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "rc": {
+          "version": "1.2.7",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "deep-extend": "^0.5.1",
+            "ini": "~1.3.0",
+            "minimist": "^1.2.0",
+            "strip-json-comments": "~2.0.1"
+          },
+          "dependencies": {
+            "minimist": {
+              "version": "1.2.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            }
+          }
+        },
+        "readable-stream": {
+          "version": "2.3.6",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "rimraf": {
+          "version": "2.6.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "glob": "^7.0.5"
+          }
+        },
+        "safe-buffer": {
+          "version": "5.1.1",
+          "bundled": true,
+          "dev": true
+        },
+        "safer-buffer": {
+          "version": "2.1.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "sax": {
+          "version": "1.2.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "semver": {
+          "version": "5.5.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "set-blocking": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "signal-exit": {
+          "version": "3.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "strip-json-comments": {
+          "version": "2.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "tar": {
+          "version": "4.4.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "chownr": "^1.0.1",
+            "fs-minipass": "^1.2.5",
+            "minipass": "^2.2.4",
+            "minizlib": "^1.1.0",
+            "mkdirp": "^0.5.0",
+            "safe-buffer": "^5.1.1",
+            "yallist": "^3.0.2"
+          }
+        },
+        "util-deprecate": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "wide-align": {
+          "version": "1.1.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "string-width": "^1.0.2"
+          }
+        },
+        "wrappy": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true
+        },
+        "yallist": {
+          "version": "3.0.2",
+          "bundled": true,
+          "dev": true
+        }
+      }
+    },
+    "fstream": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
+      "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "inherits": "~2.0.0",
+        "mkdirp": ">=0.5 0",
+        "rimraf": "2"
+      }
+    },
+    "function-bind": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+      "dev": true
+    },
+    "gauge": {
+      "version": "2.7.4",
+      "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+      "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.0.3",
+        "console-control-strings": "^1.0.0",
+        "has-unicode": "^2.0.0",
+        "object-assign": "^4.1.0",
+        "signal-exit": "^3.0.0",
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1",
+        "wide-align": "^1.1.0"
+      }
+    },
+    "gaze": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz",
+      "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=",
+      "dev": true,
+      "requires": {
+        "globule": "~0.1.0"
+      }
+    },
+    "get-caller-file": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+      "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
+      "dev": true
+    },
+    "get-pixels": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/get-pixels/-/get-pixels-3.3.2.tgz",
+      "integrity": "sha512-6ar+8yPxRd1pskEcl2GSEu1La0+xYRjjnkby6AYiRDDwZ0tJbPQmHnSeH9fGLskT8kvR0OukVgtZLcsENF9YKQ==",
+      "dev": true,
+      "requires": {
+        "data-uri-to-buffer": "0.0.3",
+        "jpeg-js": "^0.3.2",
+        "mime-types": "^2.0.1",
+        "ndarray": "^1.0.13",
+        "ndarray-pack": "^1.1.1",
+        "node-bitmap": "0.0.1",
+        "omggif": "^1.0.5",
+        "parse-data-uri": "^0.2.0",
+        "pngjs": "^3.3.3",
+        "request": "^2.44.0",
+        "through": "^2.3.4"
+      }
+    },
+    "get-proxy": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-1.1.0.tgz",
+      "integrity": "sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=",
+      "dev": true,
+      "requires": {
+        "rc": "^1.1.2"
+      }
+    },
+    "get-stdin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+      "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+      "dev": true
+    },
+    "get-stream": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+      "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+      "dev": true,
+      "optional": true
+    },
+    "get-value": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+      "dev": true
+    },
+    "getpass": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0"
+      },
+      "dependencies": {
+        "assert-plus": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+          "dev": true
+        }
+      }
+    },
+    "gif-encoder": {
+      "version": "0.4.3",
+      "resolved": "https://registry.npmjs.org/gif-encoder/-/gif-encoder-0.4.3.tgz",
+      "integrity": "sha1-iitP6MqJWkjjoLbLs0CgpqNXGJk=",
+      "dev": true,
+      "requires": {
+        "readable-stream": "~1.1.9"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "1.1.14",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+          "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+          "dev": true
+        }
+      }
+    },
+    "gifsicle": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-3.0.4.tgz",
+      "integrity": "sha1-9Fy17RAWW2ZdySng6TKLbIId+js=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "bin-build": "^2.0.0",
+        "bin-wrapper": "^3.0.0",
+        "logalot": "^2.0.0"
+      }
+    },
+    "glob": {
+      "version": "4.5.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+      "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
+      "dev": true,
+      "requires": {
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^2.0.1",
+        "once": "^1.3.0"
+      },
+      "dependencies": {
+        "minimatch": {
+          "version": "2.0.10",
+          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
+          "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
+          "dev": true,
+          "requires": {
+            "brace-expansion": "^1.0.0"
+          }
+        }
+      }
+    },
+    "glob-base": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+      "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+      "dev": true,
+      "requires": {
+        "glob-parent": "^2.0.0",
+        "is-glob": "^2.0.0"
+      }
+    },
+    "glob-parent": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+      "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+      "dev": true,
+      "requires": {
+        "is-glob": "^2.0.0"
+      }
+    },
+    "glob-stream": {
+      "version": "3.1.18",
+      "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz",
+      "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=",
+      "dev": true,
+      "requires": {
+        "glob": "^4.3.1",
+        "glob2base": "^0.0.12",
+        "minimatch": "^2.0.1",
+        "ordered-read-streams": "^0.1.0",
+        "through2": "^0.6.1",
+        "unique-stream": "^1.0.0"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+          "dev": true
+        },
+        "minimatch": {
+          "version": "2.0.10",
+          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
+          "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
+          "dev": true,
+          "requires": {
+            "brace-expansion": "^1.0.0"
+          }
+        },
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+          "dev": true
+        },
+        "through2": {
+          "version": "0.6.5",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+          "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+          "dev": true,
+          "requires": {
+            "readable-stream": ">=1.0.33-1 <1.1.0-0",
+            "xtend": ">=4.0.0 <4.1.0-0"
+          }
+        }
+      }
+    },
+    "glob-watcher": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz",
+      "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=",
+      "dev": true,
+      "requires": {
+        "gaze": "^0.5.1"
+      }
+    },
+    "glob2base": {
+      "version": "0.0.12",
+      "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz",
+      "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=",
+      "dev": true,
+      "requires": {
+        "find-index": "^0.1.1"
+      }
+    },
+    "global-modules": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+      "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+      "dev": true,
+      "requires": {
+        "global-prefix": "^1.0.1",
+        "is-windows": "^1.0.1",
+        "resolve-dir": "^1.0.0"
+      }
+    },
+    "global-prefix": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+      "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+      "dev": true,
+      "requires": {
+        "expand-tilde": "^2.0.2",
+        "homedir-polyfill": "^1.0.1",
+        "ini": "^1.3.4",
+        "is-windows": "^1.0.1",
+        "which": "^1.2.14"
+      }
+    },
+    "globby": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+      "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+      "dev": true,
+      "requires": {
+        "array-union": "^1.0.1",
+        "glob": "^7.0.3",
+        "object-assign": "^4.0.1",
+        "pify": "^2.0.0",
+        "pinkie-promise": "^2.0.0"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "7.1.2",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+          "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        }
+      }
+    },
+    "globule": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz",
+      "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=",
+      "dev": true,
+      "requires": {
+        "glob": "~3.1.21",
+        "lodash": "~1.0.1",
+        "minimatch": "~0.2.11"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "3.1.21",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
+          "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "~1.2.0",
+            "inherits": "1",
+            "minimatch": "~0.2.11"
+          }
+        },
+        "graceful-fs": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
+          "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
+          "dev": true
+        },
+        "inherits": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
+          "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
+          "dev": true
+        },
+        "lodash": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
+          "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=",
+          "dev": true
+        },
+        "minimatch": {
+          "version": "0.2.14",
+          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+          "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+          "dev": true,
+          "requires": {
+            "lru-cache": "2",
+            "sigmund": "~1.0.0"
+          }
+        }
+      }
+    },
+    "glogg": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz",
+      "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==",
+      "dev": true,
+      "requires": {
+        "sparkles": "^1.0.0"
+      }
+    },
+    "got": {
+      "version": "5.7.1",
+      "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz",
+      "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=",
+      "dev": true,
+      "requires": {
+        "create-error-class": "^3.0.1",
+        "duplexer2": "^0.1.4",
+        "is-redirect": "^1.0.0",
+        "is-retry-allowed": "^1.0.0",
+        "is-stream": "^1.0.0",
+        "lowercase-keys": "^1.0.0",
+        "node-status-codes": "^1.0.0",
+        "object-assign": "^4.0.1",
+        "parse-json": "^2.1.0",
+        "pinkie-promise": "^2.0.0",
+        "read-all-stream": "^3.0.0",
+        "readable-stream": "^2.0.5",
+        "timed-out": "^3.0.0",
+        "unzip-response": "^1.0.2",
+        "url-parse-lax": "^1.0.0"
+      },
+      "dependencies": {
+        "duplexer2": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+          "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+          "dev": true,
+          "requires": {
+            "readable-stream": "^2.0.2"
+          }
+        }
+      }
+    },
+    "graceful-fs": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+      "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+      "dev": true
+    },
+    "graceful-readlink": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+      "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+      "dev": true
+    },
+    "gulp": {
+      "version": "3.9.1",
+      "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz",
+      "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=",
+      "dev": true,
+      "requires": {
+        "archy": "^1.0.0",
+        "chalk": "^1.0.0",
+        "deprecated": "^0.0.1",
+        "gulp-util": "^3.0.0",
+        "interpret": "^1.0.0",
+        "liftoff": "^2.1.0",
+        "minimist": "^1.1.0",
+        "orchestrator": "^0.3.0",
+        "pretty-hrtime": "^1.0.0",
+        "semver": "^4.1.0",
+        "tildify": "^1.0.0",
+        "v8flags": "^2.0.2",
+        "vinyl-fs": "^0.3.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "4.3.6",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+          "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+          "dev": true
+        }
+      }
+    },
+    "gulp-autoprefixer": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/gulp-autoprefixer/-/gulp-autoprefixer-5.0.0.tgz",
+      "integrity": "sha1-gjfCeKaXdScKHK/n1vEBz81YVUQ=",
+      "dev": true,
+      "requires": {
+        "autoprefixer": "^8.0.0",
+        "fancy-log": "^1.3.2",
+        "plugin-error": "^1.0.1",
+        "postcss": "^6.0.1",
+        "through2": "^2.0.0",
+        "vinyl-sourcemaps-apply": "^0.2.0"
+      }
+    },
+    "gulp-cache": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/gulp-cache/-/gulp-cache-1.0.2.tgz",
+      "integrity": "sha512-SFtWmWYARVzbzb6UiRZhZxpGo9oyXCOuXdTa0ML8CWQdFRTYZCfddn/grXG6SzdiY/D4rOnqpDJ8R2Trv0SQRQ==",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.26.0",
+        "cache-swap": "^0.3.0",
+        "object.pick": "^1.3.0",
+        "plugin-error": "^0.1.2",
+        "through2": "^2.0.3",
+        "vinyl": "^2.1.0"
+      },
+      "dependencies": {
+        "arr-diff": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
+          "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
+          "dev": true,
+          "requires": {
+            "arr-flatten": "^1.0.1",
+            "array-slice": "^0.2.3"
+          }
+        },
+        "arr-union": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
+          "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=",
+          "dev": true
+        },
+        "array-slice": {
+          "version": "0.2.3",
+          "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
+          "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
+          "dev": true
+        },
+        "clone": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+          "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+          "dev": true
+        },
+        "clone-stats": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+          "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
+          "dev": true
+        },
+        "extend-shallow": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
+          "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^1.1.0"
+          }
+        },
+        "kind-of": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
+          "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
+          "dev": true
+        },
+        "plugin-error": {
+          "version": "0.1.2",
+          "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
+          "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
+          "dev": true,
+          "requires": {
+            "ansi-cyan": "^0.1.1",
+            "ansi-red": "^0.1.1",
+            "arr-diff": "^1.0.1",
+            "arr-union": "^2.0.1",
+            "extend-shallow": "^1.1.2"
+          }
+        },
+        "replace-ext": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+          "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+          "dev": true
+        },
+        "vinyl": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz",
+          "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
+          "dev": true,
+          "requires": {
+            "clone": "^2.1.1",
+            "clone-buffer": "^1.0.0",
+            "clone-stats": "^1.0.0",
+            "cloneable-readable": "^1.0.0",
+            "remove-trailing-separator": "^1.0.1",
+            "replace-ext": "^1.0.0"
+          }
+        }
+      }
+    },
+    "gulp-cleancss": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/gulp-cleancss/-/gulp-cleancss-0.2.2.tgz",
+      "integrity": "sha1-Z9VeutOULHSar5TBGXjnlNQOqik=",
+      "dev": true,
+      "requires": {
+        "chalk": "^0.4.0",
+        "clean-css": "^2.2.1",
+        "gulp-util": "2.2.17",
+        "through2": "^0.5.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz",
+          "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "0.4.0",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz",
+          "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "~1.0.0",
+            "has-color": "~0.1.0",
+            "strip-ansi": "~0.1.0"
+          }
+        },
+        "dateformat": {
+          "version": "1.0.12",
+          "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
+          "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
+          "dev": true,
+          "requires": {
+            "get-stdin": "^4.0.1",
+            "meow": "^3.3.0"
+          }
+        },
+        "gulp-util": {
+          "version": "2.2.17",
+          "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.17.tgz",
+          "integrity": "sha1-aOEz0Ls4qfIeb1zF/bkLoE/tyAA=",
+          "dev": true,
+          "requires": {
+            "chalk": "^0.4.0",
+            "dateformat": "^1.0.7-1.2.3",
+            "lodash._reinterpolate": "^2.4.1",
+            "lodash.template": "^2.4.1",
+            "minimist": "^0.1.0",
+            "multipipe": "^0.1.0",
+            "through2": "^0.4.0",
+            "vinyl": "^0.2.1"
+          },
+          "dependencies": {
+            "through2": {
+              "version": "0.4.2",
+              "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz",
+              "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=",
+              "dev": true,
+              "requires": {
+                "readable-stream": "~1.0.17",
+                "xtend": "~2.1.1"
+              }
+            }
+          }
+        },
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+          "dev": true
+        },
+        "lodash._reinterpolate": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz",
+          "integrity": "sha1-TxInqlqHEfxjL1sHofRgequLMiI=",
+          "dev": true
+        },
+        "lodash.escape": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz",
+          "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=",
+          "dev": true,
+          "requires": {
+            "lodash._escapehtmlchar": "~2.4.1",
+            "lodash._reunescapedhtml": "~2.4.1",
+            "lodash.keys": "~2.4.1"
+          }
+        },
+        "lodash.keys": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+          "dev": true,
+          "requires": {
+            "lodash._isnative": "~2.4.1",
+            "lodash._shimkeys": "~2.4.1",
+            "lodash.isobject": "~2.4.1"
+          }
+        },
+        "lodash.template": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz",
+          "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=",
+          "dev": true,
+          "requires": {
+            "lodash._escapestringchar": "~2.4.1",
+            "lodash._reinterpolate": "~2.4.1",
+            "lodash.defaults": "~2.4.1",
+            "lodash.escape": "~2.4.1",
+            "lodash.keys": "~2.4.1",
+            "lodash.templatesettings": "~2.4.1",
+            "lodash.values": "~2.4.1"
+          }
+        },
+        "lodash.templatesettings": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz",
+          "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=",
+          "dev": true,
+          "requires": {
+            "lodash._reinterpolate": "~2.4.1",
+            "lodash.escape": "~2.4.1"
+          }
+        },
+        "minimist": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz",
+          "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "0.1.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz",
+          "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=",
+          "dev": true
+        },
+        "through2": {
+          "version": "0.5.1",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
+          "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
+          "dev": true,
+          "requires": {
+            "readable-stream": "~1.0.17",
+            "xtend": "~3.0.0"
+          },
+          "dependencies": {
+            "xtend": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
+              "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
+              "dev": true
+            }
+          }
+        },
+        "vinyl": {
+          "version": "0.2.3",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz",
+          "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=",
+          "dev": true,
+          "requires": {
+            "clone-stats": "~0.0.1"
+          }
+        },
+        "xtend": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+          "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
+          "dev": true,
+          "requires": {
+            "object-keys": "~0.4.0"
+          }
+        }
+      }
+    },
+    "gulp-combine-media-queries": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/gulp-combine-media-queries/-/gulp-combine-media-queries-0.2.0.tgz",
+      "integrity": "sha1-uuA/s8qBKdkJbAyT/k3rVfPLQR8=",
+      "dev": true,
+      "requires": {
+        "css-parse": "~1.7.0",
+        "gulp-util": "~2.2.14",
+        "lodash.defaults": "~2.4.1",
+        "through2": "~0.4.1"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "0.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
+          "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=",
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz",
+          "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "0.5.1",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
+          "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^1.1.0",
+            "escape-string-regexp": "^1.0.0",
+            "has-ansi": "^0.1.0",
+            "strip-ansi": "^0.3.0",
+            "supports-color": "^0.2.0"
+          }
+        },
+        "dateformat": {
+          "version": "1.0.12",
+          "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
+          "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
+          "dev": true,
+          "requires": {
+            "get-stdin": "^4.0.1",
+            "meow": "^3.3.0"
+          }
+        },
+        "gulp-util": {
+          "version": "2.2.20",
+          "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz",
+          "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=",
+          "dev": true,
+          "requires": {
+            "chalk": "^0.5.0",
+            "dateformat": "^1.0.7-1.2.3",
+            "lodash._reinterpolate": "^2.4.1",
+            "lodash.template": "^2.4.1",
+            "minimist": "^0.2.0",
+            "multipipe": "^0.1.0",
+            "through2": "^0.5.0",
+            "vinyl": "^0.2.1"
+          },
+          "dependencies": {
+            "through2": {
+              "version": "0.5.1",
+              "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
+              "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
+              "dev": true,
+              "requires": {
+                "readable-stream": "~1.0.17",
+                "xtend": "~3.0.0"
+              }
+            }
+          }
+        },
+        "has-ansi": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
+          "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^0.2.0"
+          }
+        },
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+          "dev": true
+        },
+        "lodash._reinterpolate": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz",
+          "integrity": "sha1-TxInqlqHEfxjL1sHofRgequLMiI=",
+          "dev": true
+        },
+        "lodash.escape": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz",
+          "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=",
+          "dev": true,
+          "requires": {
+            "lodash._escapehtmlchar": "~2.4.1",
+            "lodash._reunescapedhtml": "~2.4.1",
+            "lodash.keys": "~2.4.1"
+          }
+        },
+        "lodash.keys": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+          "dev": true,
+          "requires": {
+            "lodash._isnative": "~2.4.1",
+            "lodash._shimkeys": "~2.4.1",
+            "lodash.isobject": "~2.4.1"
+          }
+        },
+        "lodash.template": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz",
+          "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=",
+          "dev": true,
+          "requires": {
+            "lodash._escapestringchar": "~2.4.1",
+            "lodash._reinterpolate": "~2.4.1",
+            "lodash.defaults": "~2.4.1",
+            "lodash.escape": "~2.4.1",
+            "lodash.keys": "~2.4.1",
+            "lodash.templatesettings": "~2.4.1",
+            "lodash.values": "~2.4.1"
+          }
+        },
+        "lodash.templatesettings": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz",
+          "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=",
+          "dev": true,
+          "requires": {
+            "lodash._reinterpolate": "~2.4.1",
+            "lodash.escape": "~2.4.1"
+          }
+        },
+        "minimist": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz",
+          "integrity": "sha1-Tf/lJdriuGTGbC4jxicdev3s784=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "0.3.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
+          "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^0.2.1"
+          }
+        },
+        "supports-color": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz",
+          "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=",
+          "dev": true
+        },
+        "through2": {
+          "version": "0.4.2",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz",
+          "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=",
+          "dev": true,
+          "requires": {
+            "readable-stream": "~1.0.17",
+            "xtend": "~2.1.1"
+          },
+          "dependencies": {
+            "xtend": {
+              "version": "2.1.2",
+              "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+              "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
+              "dev": true,
+              "requires": {
+                "object-keys": "~0.4.0"
+              }
+            }
+          }
+        },
+        "vinyl": {
+          "version": "0.2.3",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz",
+          "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=",
+          "dev": true,
+          "requires": {
+            "clone-stats": "~0.0.1"
+          }
+        },
+        "xtend": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
+          "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
+          "dev": true
+        }
+      }
+    },
+    "gulp-decompress": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/gulp-decompress/-/gulp-decompress-1.2.0.tgz",
+      "integrity": "sha1-jutlpeAV+O2FMsr+KEVJYGJvDcc=",
+      "dev": true,
+      "requires": {
+        "archive-type": "^3.0.0",
+        "decompress": "^3.0.0",
+        "gulp-util": "^3.0.1",
+        "readable-stream": "^2.0.2"
+      }
+    },
+    "gulp-imagemin": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/gulp-imagemin/-/gulp-imagemin-4.1.0.tgz",
+      "integrity": "sha512-6nWkrMNY5ub+34+DwlgQdWg21Z4DWAOARLpnyuZ773pGPJrfiyQrkOzdz9DgQSGBQjU1zuw6gd+9clLi6eicuw==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.1.0",
+        "fancy-log": "^1.3.2",
+        "imagemin": "^5.3.1",
+        "imagemin-gifsicle": "^5.2.0",
+        "imagemin-jpegtran": "^5.0.2",
+        "imagemin-optipng": "^5.2.1",
+        "imagemin-svgo": "^6.0.0",
+        "plugin-error": "^0.1.2",
+        "plur": "^2.1.2",
+        "pretty-bytes": "^4.0.2",
+        "through2-concurrent": "^1.1.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+          "dev": true,
+          "requires": {
+            "color-convert": "^1.9.0"
+          }
+        },
+        "arr-diff": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
+          "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
+          "dev": true,
+          "requires": {
+            "arr-flatten": "^1.0.1",
+            "array-slice": "^0.2.3"
+          }
+        },
+        "arr-union": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
+          "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=",
+          "dev": true
+        },
+        "array-slice": {
+          "version": "0.2.3",
+          "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
+          "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+          "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^3.2.1",
+            "escape-string-regexp": "^1.0.5",
+            "supports-color": "^5.3.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
+          "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^1.1.0"
+          }
+        },
+        "kind-of": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
+          "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
+          "dev": true
+        },
+        "plugin-error": {
+          "version": "0.1.2",
+          "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
+          "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
+          "dev": true,
+          "requires": {
+            "ansi-cyan": "^0.1.1",
+            "ansi-red": "^0.1.1",
+            "arr-diff": "^1.0.1",
+            "arr-union": "^2.0.1",
+            "extend-shallow": "^1.1.2"
+          }
+        },
+        "supports-color": {
+          "version": "5.4.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+          "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+          "dev": true,
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "gulp-rename": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.4.0.tgz",
+      "integrity": "sha512-swzbIGb/arEoFK89tPY58vg3Ok1bw+d35PfUNwWqdo7KM4jkmuGA78JiDNqR+JeZFaeeHnRg9N7aihX3YPmsyg==",
+      "dev": true
+    },
+    "gulp-sass": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-4.0.1.tgz",
+      "integrity": "sha512-OMQEgWNggpog8Tc5v1MuI6eo+5iiPkVeLL76iBhDoEEScLUPfZlpvzmgTnLkpcqdrNodZxpz5qcv6mS2rulk3g==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.3.0",
+        "lodash.clonedeep": "^4.3.2",
+        "node-sass": "^4.8.3",
+        "plugin-error": "^1.0.1",
+        "replace-ext": "^1.0.0",
+        "strip-ansi": "^4.0.0",
+        "through2": "^2.0.0",
+        "vinyl-sourcemaps-apply": "^0.2.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+          "dev": true,
+          "requires": {
+            "color-convert": "^1.9.0"
+          }
+        },
+        "chalk": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+          "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^3.2.1",
+            "escape-string-regexp": "^1.0.5",
+            "supports-color": "^5.3.0"
+          }
+        },
+        "replace-ext": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+          "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "5.4.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+          "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+          "dev": true,
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "gulp-sourcemaps": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz",
+      "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=",
+      "dev": true,
+      "requires": {
+        "convert-source-map": "^1.1.1",
+        "graceful-fs": "^4.1.2",
+        "strip-bom": "^2.0.0",
+        "through2": "^2.0.0",
+        "vinyl": "^1.0.0"
+      },
+      "dependencies": {
+        "vinyl": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
+          "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
+          "dev": true,
+          "requires": {
+            "clone": "^1.0.0",
+            "clone-stats": "^0.0.1",
+            "replace-ext": "0.0.1"
+          }
+        }
+      }
+    },
+    "gulp-util": {
+      "version": "3.0.8",
+      "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
+      "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
+      "dev": true,
+      "requires": {
+        "array-differ": "^1.0.0",
+        "array-uniq": "^1.0.2",
+        "beeper": "^1.0.0",
+        "chalk": "^1.0.0",
+        "dateformat": "^2.0.0",
+        "fancy-log": "^1.1.0",
+        "gulplog": "^1.0.0",
+        "has-gulplog": "^0.1.0",
+        "lodash._reescape": "^3.0.0",
+        "lodash._reevaluate": "^3.0.0",
+        "lodash._reinterpolate": "^3.0.0",
+        "lodash.template": "^3.0.0",
+        "minimist": "^1.1.0",
+        "multipipe": "^0.1.2",
+        "object-assign": "^3.0.0",
+        "replace-ext": "0.0.1",
+        "through2": "^2.0.0",
+        "vinyl": "^0.5.0"
+      },
+      "dependencies": {
+        "object-assign": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+          "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
+          "dev": true
+        }
+      }
+    },
+    "gulp.spritesmith": {
+      "version": "6.9.0",
+      "resolved": "https://registry.npmjs.org/gulp.spritesmith/-/gulp.spritesmith-6.9.0.tgz",
+      "integrity": "sha1-KPge46Qlx/iMbd5WupINmV+dBBk=",
+      "dev": true,
+      "requires": {
+        "async": "~2.1.5",
+        "minimatch": "~3.0.3",
+        "spritesheet-templates": "~10.2.0",
+        "spritesmith": "~3.3.0",
+        "through2": "~2.0.3",
+        "underscore": "~1.8.3",
+        "url2": "~1.0.4",
+        "vinyl": "~2.1.0"
+      },
+      "dependencies": {
+        "async": {
+          "version": "2.1.5",
+          "resolved": "https://registry.npmjs.org/async/-/async-2.1.5.tgz",
+          "integrity": "sha1-5YfGhYCZSsZ/xW/4bTrFa9voELw=",
+          "dev": true,
+          "requires": {
+            "lodash": "^4.14.0"
+          }
+        },
+        "clone": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+          "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+          "dev": true
+        },
+        "clone-stats": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+          "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
+          "dev": true
+        },
+        "lodash": {
+          "version": "4.17.10",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+          "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+          "dev": true
+        },
+        "replace-ext": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+          "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+          "dev": true
+        },
+        "vinyl": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz",
+          "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=",
+          "dev": true,
+          "requires": {
+            "clone": "^2.1.1",
+            "clone-buffer": "^1.0.0",
+            "clone-stats": "^1.0.0",
+            "cloneable-readable": "^1.0.0",
+            "remove-trailing-separator": "^1.0.1",
+            "replace-ext": "^1.0.0"
+          }
+        }
+      }
+    },
+    "gulplog": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
+      "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
+      "dev": true,
+      "requires": {
+        "glogg": "^1.0.0"
+      }
+    },
+    "handlebars": {
+      "version": "4.0.11",
+      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
+      "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
+      "dev": true,
+      "requires": {
+        "async": "^1.4.0",
+        "optimist": "^0.6.1",
+        "source-map": "^0.4.4",
+        "uglify-js": "^2.6"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.4.4",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+          "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+          "dev": true,
+          "requires": {
+            "amdefine": ">=0.0.4"
+          }
+        }
+      }
+    },
+    "handlebars-layouts": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/handlebars-layouts/-/handlebars-layouts-1.1.0.tgz",
+      "integrity": "sha1-JhK+Wu2PICaXN8cxHaFcnC11+7w=",
+      "dev": true
+    },
+    "har-schema": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
+      "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
+      "dev": true
+    },
+    "har-validator": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
+      "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
+      "dev": true,
+      "requires": {
+        "ajv": "^4.9.1",
+        "har-schema": "^1.0.5"
+      }
+    },
+    "has": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+      "dev": true,
+      "requires": {
+        "function-bind": "^1.1.1"
+      }
+    },
+    "has-ansi": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      }
+    },
+    "has-binary2": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
+      "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
+      "dev": true,
+      "requires": {
+        "isarray": "2.0.1"
+      }
+    },
+    "has-color": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz",
+      "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=",
+      "dev": true
+    },
+    "has-cors": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+      "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
+      "dev": true
+    },
+    "has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+      "dev": true
+    },
+    "has-gulplog": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
+      "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
+      "dev": true,
+      "requires": {
+        "sparkles": "^1.0.0"
+      }
+    },
+    "has-unicode": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+      "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+      "dev": true
+    },
+    "has-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+      "dev": true,
+      "requires": {
+        "get-value": "^2.0.6",
+        "has-values": "^1.0.0",
+        "isobject": "^3.0.0"
+      },
+      "dependencies": {
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+          "dev": true
+        }
+      }
+    },
+    "has-values": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+      "dev": true,
+      "requires": {
+        "is-number": "^3.0.0",
+        "kind-of": "^4.0.0"
+      },
+      "dependencies": {
+        "is-number": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "kind-of": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "hawk": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+      "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+      "dev": true,
+      "requires": {
+        "boom": "2.x.x",
+        "cryptiles": "2.x.x",
+        "hoek": "2.x.x",
+        "sntp": "1.x.x"
+      }
+    },
+    "hoek": {
+      "version": "2.16.3",
+      "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+      "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+      "dev": true
+    },
+    "homedir-polyfill": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz",
+      "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=",
+      "dev": true,
+      "requires": {
+        "parse-passwd": "^1.0.0"
+      }
+    },
+    "hosted-git-info": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+      "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
+      "dev": true
+    },
+    "html-comment-regex": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz",
+      "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=",
+      "dev": true,
+      "optional": true
+    },
+    "http-errors": {
+      "version": "1.6.3",
+      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+      "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+      "dev": true,
+      "requires": {
+        "depd": "~1.1.2",
+        "inherits": "2.0.3",
+        "setprototypeof": "1.1.0",
+        "statuses": ">= 1.4.0 < 2"
+      },
+      "dependencies": {
+        "statuses": {
+          "version": "1.5.0",
+          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+          "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+          "dev": true
+        }
+      }
+    },
+    "http-proxy": {
+      "version": "1.15.2",
+      "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz",
+      "integrity": "sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE=",
+      "dev": true,
+      "requires": {
+        "eventemitter3": "1.x.x",
+        "requires-port": "1.x.x"
+      }
+    },
+    "http-signature": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+      "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^0.2.0",
+        "jsprim": "^1.2.2",
+        "sshpk": "^1.7.0"
+      }
+    },
+    "iconv-lite": {
+      "version": "0.4.23",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+      "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+      "dev": true,
+      "requires": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      }
+    },
+    "imagemin": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-5.3.1.tgz",
+      "integrity": "sha1-8Zwu7h5xumxlWMUV+fyWaAGJptQ=",
+      "dev": true,
+      "requires": {
+        "file-type": "^4.1.0",
+        "globby": "^6.1.0",
+        "make-dir": "^1.0.0",
+        "p-pipe": "^1.1.0",
+        "pify": "^2.3.0",
+        "replace-ext": "^1.0.0"
+      },
+      "dependencies": {
+        "replace-ext": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+          "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+          "dev": true
+        }
+      }
+    },
+    "imagemin-gifsicle": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-5.2.0.tgz",
+      "integrity": "sha512-K01m5QuPK+0en8oVhiOOAicF7KjrHlCZxS++mfLI2mV/Ksfq/Y9nCXCWDz6jRv13wwlqe5T7hXT+ji2DnLc2yQ==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "exec-buffer": "^3.0.0",
+        "gifsicle": "^3.0.0",
+        "is-gif": "^1.0.0"
+      }
+    },
+    "imagemin-jpegtran": {
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-5.0.2.tgz",
+      "integrity": "sha1-5ogiY7j3kW/duABkDPddLpcNKtY=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "exec-buffer": "^3.0.0",
+        "is-jpg": "^1.0.0",
+        "jpegtran-bin": "^3.0.0"
+      }
+    },
+    "imagemin-optipng": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz",
+      "integrity": "sha1-0i2kEsCfX/AKQzmWC5ioix2+hpU=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "exec-buffer": "^3.0.0",
+        "is-png": "^1.0.0",
+        "optipng-bin": "^3.0.0"
+      }
+    },
+    "imagemin-svgo": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-6.0.0.tgz",
+      "integrity": "sha512-xwjBZQKpbkklHtJYnCOwRJjTRJA/nR0hQzKMh+CUZRvm/L0QwKKPJQ9tkPWQHrg+cydPu2i1vLgHuy2E0hKEkg==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "buffer-from": "^0.1.1",
+        "is-svg": "^2.0.0",
+        "svgo": "^1.0.0"
+      },
+      "dependencies": {
+        "buffer-from": {
+          "version": "0.1.2",
+          "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz",
+          "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "immutable": {
+      "version": "3.8.2",
+      "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
+      "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=",
+      "dev": true
+    },
+    "in-publish": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
+      "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
+      "dev": true
+    },
+    "indent-string": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+      "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+      "dev": true,
+      "requires": {
+        "repeating": "^2.0.0"
+      }
+    },
+    "indexof": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+      "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+      "dev": true
+    },
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "dev": true,
+      "requires": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "inherits": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+      "dev": true
+    },
+    "ini": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+      "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+      "dev": true
+    },
+    "interpret": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
+      "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
+      "dev": true
+    },
+    "invert-kv": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+      "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+      "dev": true
+    },
+    "iota-array": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz",
+      "integrity": "sha1-ge9X/l0FgUzVjCSDYyqZwwoOgIc=",
+      "dev": true
+    },
+    "ip-regex": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz",
+      "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=",
+      "dev": true,
+      "optional": true
+    },
+    "irregular-plurals": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz",
+      "integrity": "sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y=",
+      "dev": true
+    },
+    "is-absolute": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+      "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+      "dev": true,
+      "requires": {
+        "is-relative": "^1.0.0",
+        "is-windows": "^1.0.1"
+      }
+    },
+    "is-accessor-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "is-arrayish": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+      "dev": true
+    },
+    "is-binary-path": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+      "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+      "dev": true,
+      "requires": {
+        "binary-extensions": "^1.0.0"
+      }
+    },
+    "is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+      "dev": true
+    },
+    "is-builtin-module": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+      "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+      "dev": true,
+      "requires": {
+        "builtin-modules": "^1.0.0"
+      }
+    },
+    "is-bzip2": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz",
+      "integrity": "sha1-XuWOqlounIDiFAe+3yOuWsCRs/w=",
+      "dev": true
+    },
+    "is-callable": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+      "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+      "dev": true
+    },
+    "is-data-descriptor": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "is-date-object": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+      "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+      "dev": true
+    },
+    "is-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+      "dev": true,
+      "requires": {
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+          "dev": true
+        }
+      }
+    },
+    "is-dotfile": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+      "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+      "dev": true
+    },
+    "is-equal-shallow": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+      "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+      "dev": true,
+      "requires": {
+        "is-primitive": "^2.0.0"
+      }
+    },
+    "is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+      "dev": true
+    },
+    "is-extglob": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+      "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+      "dev": true
+    },
+    "is-finite": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+      "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+      "dev": true,
+      "requires": {
+        "number-is-nan": "^1.0.0"
+      }
+    },
+    "is-fullwidth-code-point": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+      "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+      "dev": true,
+      "requires": {
+        "number-is-nan": "^1.0.0"
+      }
+    },
+    "is-gif": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-1.0.0.tgz",
+      "integrity": "sha1-ptKumIkwB7/6l6HYwB1jIFgyCX4=",
+      "dev": true,
+      "optional": true
+    },
+    "is-glob": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+      "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+      "dev": true,
+      "requires": {
+        "is-extglob": "^1.0.0"
+      }
+    },
+    "is-gzip": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz",
+      "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=",
+      "dev": true
+    },
+    "is-jpg": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-1.0.1.tgz",
+      "integrity": "sha1-KW1X/dmc4BBDSnKD40armhA16XU=",
+      "dev": true,
+      "optional": true
+    },
+    "is-natural-number": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-2.1.1.tgz",
+      "integrity": "sha1-fUxXKDd+84bD4ZSpkRv1fG3DNec=",
+      "dev": true
+    },
+    "is-number": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+      "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "is-number-like": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz",
+      "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==",
+      "dev": true,
+      "requires": {
+        "lodash.isfinite": "^3.3.2"
+      }
+    },
+    "is-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+      "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+      "dev": true
+    },
+    "is-plain-object": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.1"
+      },
+      "dependencies": {
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+          "dev": true
+        }
+      }
+    },
+    "is-png": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-png/-/is-png-1.1.0.tgz",
+      "integrity": "sha1-1XSxK/J1wDUEVVcLDltXqwYgd84=",
+      "dev": true,
+      "optional": true
+    },
+    "is-posix-bracket": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+      "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+      "dev": true
+    },
+    "is-primitive": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+      "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+      "dev": true
+    },
+    "is-redirect": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
+      "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
+      "dev": true
+    },
+    "is-regex": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+      "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+      "dev": true,
+      "requires": {
+        "has": "^1.0.1"
+      }
+    },
+    "is-relative": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+      "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+      "dev": true,
+      "requires": {
+        "is-unc-path": "^1.0.0"
+      }
+    },
+    "is-retry-allowed": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
+      "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
+      "dev": true
+    },
+    "is-stream": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+      "dev": true
+    },
+    "is-svg": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz",
+      "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "html-comment-regex": "^1.1.0"
+      }
+    },
+    "is-symbol": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz",
+      "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=",
+      "dev": true
+    },
+    "is-tar": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz",
+      "integrity": "sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0=",
+      "dev": true
+    },
+    "is-typedarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+      "dev": true
+    },
+    "is-unc-path": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+      "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+      "dev": true,
+      "requires": {
+        "unc-path-regex": "^0.1.2"
+      }
+    },
+    "is-url": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
+      "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==",
+      "dev": true
+    },
+    "is-utf8": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+      "dev": true
+    },
+    "is-valid-glob": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz",
+      "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=",
+      "dev": true
+    },
+    "is-windows": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+      "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+      "dev": true
+    },
+    "is-zip": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz",
+      "integrity": "sha1-R7Co/004p2QxzP2ZqOFaTIa6IyU=",
+      "dev": true
+    },
+    "isarray": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+      "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+      "dev": true
+    },
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "dev": true
+    },
+    "isobject": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+      "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+      "dev": true,
+      "requires": {
+        "isarray": "1.0.0"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+          "dev": true
+        }
+      }
+    },
+    "isstream": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+      "dev": true
+    },
+    "jpeg-js": {
+      "version": "0.3.4",
+      "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.4.tgz",
+      "integrity": "sha512-6IzjQxvnlT8UlklNmDXIJMWxijULjqGrzgqc0OG7YadZdvm7KPQ1j0ehmQQHckgEWOfgpptzcnWgESovxudpTA==",
+      "dev": true
+    },
+    "jpegtran-bin": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-3.2.0.tgz",
+      "integrity": "sha1-9g7PSumZwL2tLp+83ytvCYHnops=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "bin-build": "^2.0.0",
+        "bin-wrapper": "^3.0.0",
+        "logalot": "^2.0.0"
+      }
+    },
+    "js-base64": {
+      "version": "2.4.8",
+      "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.8.tgz",
+      "integrity": "sha512-hm2nYpDrwoO/OzBhdcqs/XGT6XjSuSSCVEpia+Kl2J6x4CYt5hISlVL/AYU1khoDXv0AQVgxtdJySb9gjAn56Q==",
+      "dev": true
+    },
+    "js-yaml": {
+      "version": "3.10.0",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
+      "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
+      }
+    },
+    "jsbn": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+      "dev": true,
+      "optional": true
+    },
+    "json-content-demux": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/json-content-demux/-/json-content-demux-0.1.3.tgz",
+      "integrity": "sha1-XBJ3v387dRKoa3Mt3UGzLU38scw=",
+      "dev": true
+    },
+    "json-schema": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+      "dev": true
+    },
+    "json-schema-traverse": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+      "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+      "dev": true
+    },
+    "json-stable-stringify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+      "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+      "dev": true,
+      "requires": {
+        "jsonify": "~0.0.0"
+      }
+    },
+    "json-stringify-safe": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+      "dev": true
+    },
+    "jsonfile": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
+      "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
+    "jsonify": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+      "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+      "dev": true
+    },
+    "jsprim": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "1.0.0",
+        "extsprintf": "1.3.0",
+        "json-schema": "0.2.3",
+        "verror": "1.10.0"
+      },
+      "dependencies": {
+        "assert-plus": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+          "dev": true
+        }
+      }
+    },
+    "kind-of": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+      "dev": true,
+      "requires": {
+        "is-buffer": "^1.1.5"
+      }
+    },
+    "layout": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/layout/-/layout-2.2.0.tgz",
+      "integrity": "sha1-MeRL/BjdEBmz/7II5AKku/4uavQ=",
+      "dev": true,
+      "requires": {
+        "bin-pack": "~1.0.1"
+      }
+    },
+    "lazy-cache": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+      "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+      "dev": true
+    },
+    "lazy-req": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz",
+      "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=",
+      "dev": true,
+      "optional": true
+    },
+    "lazystream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
+      "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
+      "dev": true,
+      "requires": {
+        "readable-stream": "^2.0.5"
+      }
+    },
+    "lcid": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+      "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+      "dev": true,
+      "requires": {
+        "invert-kv": "^1.0.0"
+      }
+    },
+    "liftoff": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
+      "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
+      "dev": true,
+      "requires": {
+        "extend": "^3.0.0",
+        "findup-sync": "^2.0.0",
+        "fined": "^1.0.1",
+        "flagged-respawn": "^1.0.0",
+        "is-plain-object": "^2.0.4",
+        "object.map": "^1.0.0",
+        "rechoir": "^0.6.2",
+        "resolve": "^1.1.7"
+      }
+    },
+    "limiter": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.3.tgz",
+      "integrity": "sha512-zrycnIMsLw/3ZxTbW7HCez56rcFGecWTx5OZNplzcXUUmJLmoYArC6qdJzmAN5BWiNXGcpjhF9RQ1HSv5zebEw==",
+      "dev": true
+    },
+    "load-json-file": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+      "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "parse-json": "^2.2.0",
+        "pify": "^2.0.0",
+        "pinkie-promise": "^2.0.0",
+        "strip-bom": "^2.0.0"
+      }
+    },
+    "localtunnel": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.9.0.tgz",
+      "integrity": "sha512-wCIiIHJ8kKIcWkTQE3m1VRABvsH2ZuOkiOpZUofUCf6Q42v3VIZ+Q0YfX1Z4sYDRj0muiKL1bLvz1FeoxsPO0w==",
+      "dev": true,
+      "requires": {
+        "axios": "0.17.1",
+        "debug": "2.6.8",
+        "openurl": "1.1.1",
+        "yargs": "6.6.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.8",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+          "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "yargs": {
+          "version": "6.6.0",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz",
+          "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=",
+          "dev": true,
+          "requires": {
+            "camelcase": "^3.0.0",
+            "cliui": "^3.2.0",
+            "decamelize": "^1.1.1",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^1.4.0",
+            "read-pkg-up": "^1.0.1",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^1.0.1",
+            "set-blocking": "^2.0.0",
+            "string-width": "^1.0.2",
+            "which-module": "^1.0.0",
+            "y18n": "^3.2.1",
+            "yargs-parser": "^4.2.0"
+          }
+        }
+      }
+    },
+    "lodash": {
+      "version": "3.10.1",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+      "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+      "dev": true
+    },
+    "lodash._basecopy": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+      "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
+      "dev": true
+    },
+    "lodash._basetostring": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
+      "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
+      "dev": true
+    },
+    "lodash._basevalues": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
+      "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
+      "dev": true
+    },
+    "lodash._escapehtmlchar": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz",
+      "integrity": "sha1-32fDu2t+jh6DGrSL+geVuSr+iZ0=",
+      "dev": true,
+      "requires": {
+        "lodash._htmlescapes": "~2.4.1"
+      }
+    },
+    "lodash._escapestringchar": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz",
+      "integrity": "sha1-7P4iYYoq3lC/7qQ5N+Ud9m8O23I=",
+      "dev": true
+    },
+    "lodash._getnative": {
+      "version": "3.9.1",
+      "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+      "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
+      "dev": true
+    },
+    "lodash._htmlescapes": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz",
+      "integrity": "sha1-MtFL8IRLbeb4tioFG09nwii2JMs=",
+      "dev": true
+    },
+    "lodash._isiterateecall": {
+      "version": "3.0.9",
+      "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+      "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
+      "dev": true
+    },
+    "lodash._isnative": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz",
+      "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw=",
+      "dev": true
+    },
+    "lodash._objecttypes": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz",
+      "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE=",
+      "dev": true
+    },
+    "lodash._reescape": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
+      "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=",
+      "dev": true
+    },
+    "lodash._reevaluate": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
+      "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=",
+      "dev": true
+    },
+    "lodash._reinterpolate": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+      "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+      "dev": true
+    },
+    "lodash._reunescapedhtml": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz",
+      "integrity": "sha1-dHxPxAED6zu4oJduVx96JlnpO6c=",
+      "dev": true,
+      "requires": {
+        "lodash._htmlescapes": "~2.4.1",
+        "lodash.keys": "~2.4.1"
+      },
+      "dependencies": {
+        "lodash.keys": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+          "dev": true,
+          "requires": {
+            "lodash._isnative": "~2.4.1",
+            "lodash._shimkeys": "~2.4.1",
+            "lodash.isobject": "~2.4.1"
+          }
+        }
+      }
+    },
+    "lodash._root": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
+      "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
+      "dev": true
+    },
+    "lodash._shimkeys": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz",
+      "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=",
+      "dev": true,
+      "requires": {
+        "lodash._objecttypes": "~2.4.1"
+      }
+    },
+    "lodash.assign": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+      "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
+      "dev": true
+    },
+    "lodash.clonedeep": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+      "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+      "dev": true
+    },
+    "lodash.defaults": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz",
+      "integrity": "sha1-p+iIXwXmiFEUS24SqPNngCa8TFQ=",
+      "dev": true,
+      "requires": {
+        "lodash._objecttypes": "~2.4.1",
+        "lodash.keys": "~2.4.1"
+      },
+      "dependencies": {
+        "lodash.keys": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+          "dev": true,
+          "requires": {
+            "lodash._isnative": "~2.4.1",
+            "lodash._shimkeys": "~2.4.1",
+            "lodash.isobject": "~2.4.1"
+          }
+        }
+      }
+    },
+    "lodash.escape": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
+      "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
+      "dev": true,
+      "requires": {
+        "lodash._root": "^3.0.0"
+      }
+    },
+    "lodash.isarguments": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+      "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
+      "dev": true
+    },
+    "lodash.isarray": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+      "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
+      "dev": true
+    },
+    "lodash.isequal": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+      "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
+      "dev": true
+    },
+    "lodash.isfinite": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz",
+      "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=",
+      "dev": true
+    },
+    "lodash.isobject": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz",
+      "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=",
+      "dev": true,
+      "requires": {
+        "lodash._objecttypes": "~2.4.1"
+      }
+    },
+    "lodash.keys": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+      "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+      "dev": true,
+      "requires": {
+        "lodash._getnative": "^3.0.0",
+        "lodash.isarguments": "^3.0.0",
+        "lodash.isarray": "^3.0.0"
+      }
+    },
+    "lodash.mergewith": {
+      "version": "4.6.1",
+      "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz",
+      "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==",
+      "dev": true
+    },
+    "lodash.restparam": {
+      "version": "3.6.1",
+      "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+      "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
+      "dev": true
+    },
+    "lodash.template": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
+      "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
+      "dev": true,
+      "requires": {
+        "lodash._basecopy": "^3.0.0",
+        "lodash._basetostring": "^3.0.0",
+        "lodash._basevalues": "^3.0.0",
+        "lodash._isiterateecall": "^3.0.0",
+        "lodash._reinterpolate": "^3.0.0",
+        "lodash.escape": "^3.0.0",
+        "lodash.keys": "^3.0.0",
+        "lodash.restparam": "^3.0.0",
+        "lodash.templatesettings": "^3.0.0"
+      }
+    },
+    "lodash.templatesettings": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
+      "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
+      "dev": true,
+      "requires": {
+        "lodash._reinterpolate": "^3.0.0",
+        "lodash.escape": "^3.0.0"
+      }
+    },
+    "lodash.values": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz",
+      "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=",
+      "dev": true,
+      "requires": {
+        "lodash.keys": "~2.4.1"
+      },
+      "dependencies": {
+        "lodash.keys": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+          "dev": true,
+          "requires": {
+            "lodash._isnative": "~2.4.1",
+            "lodash._shimkeys": "~2.4.1",
+            "lodash.isobject": "~2.4.1"
+          }
+        }
+      }
+    },
+    "logalot": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz",
+      "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "figures": "^1.3.5",
+        "squeak": "^1.0.0"
+      }
+    },
+    "longest": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+      "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+      "dev": true
+    },
+    "loud-rejection": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+      "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+      "dev": true,
+      "requires": {
+        "currently-unhandled": "^0.4.1",
+        "signal-exit": "^3.0.0"
+      }
+    },
+    "lowercase-keys": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+      "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+      "dev": true
+    },
+    "lpad-align": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz",
+      "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "get-stdin": "^4.0.1",
+        "indent-string": "^2.1.0",
+        "longest": "^1.0.0",
+        "meow": "^3.3.0"
+      }
+    },
+    "lru-cache": {
+      "version": "2.7.3",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+      "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+      "dev": true
+    },
+    "make-dir": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+      "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+      "dev": true,
+      "requires": {
+        "pify": "^3.0.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true
+        }
+      }
+    },
+    "make-iterator": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+      "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+      "dev": true,
+      "requires": {
+        "kind-of": "^6.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "map-cache": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+      "dev": true
+    },
+    "map-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+      "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+      "dev": true
+    },
+    "map-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+      "dev": true,
+      "requires": {
+        "object-visit": "^1.0.0"
+      }
+    },
+    "math-random": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
+      "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
+      "dev": true
+    },
+    "mdn-data": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz",
+      "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==",
+      "dev": true
+    },
+    "meow": {
+      "version": "3.7.0",
+      "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+      "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+      "dev": true,
+      "requires": {
+        "camelcase-keys": "^2.0.0",
+        "decamelize": "^1.1.2",
+        "loud-rejection": "^1.0.0",
+        "map-obj": "^1.0.1",
+        "minimist": "^1.1.3",
+        "normalize-package-data": "^2.3.4",
+        "object-assign": "^4.0.1",
+        "read-pkg-up": "^1.0.1",
+        "redent": "^1.0.0",
+        "trim-newlines": "^1.0.0"
+      }
+    },
+    "merge-stream": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
+      "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
+      "dev": true,
+      "requires": {
+        "readable-stream": "^2.0.1"
+      }
+    },
+    "micromatch": {
+      "version": "2.3.11",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+      "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+      "dev": true,
+      "requires": {
+        "arr-diff": "^2.0.0",
+        "array-unique": "^0.2.1",
+        "braces": "^1.8.2",
+        "expand-brackets": "^0.1.4",
+        "extglob": "^0.3.1",
+        "filename-regex": "^2.0.0",
+        "is-extglob": "^1.0.0",
+        "is-glob": "^2.0.1",
+        "kind-of": "^3.0.2",
+        "normalize-path": "^2.0.1",
+        "object.omit": "^2.0.0",
+        "parse-glob": "^3.0.4",
+        "regex-cache": "^0.4.2"
+      }
+    },
+    "mime": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+      "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
+      "dev": true
+    },
+    "mime-db": {
+      "version": "1.35.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz",
+      "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==",
+      "dev": true
+    },
+    "mime-types": {
+      "version": "2.1.19",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz",
+      "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==",
+      "dev": true,
+      "requires": {
+        "mime-db": "~1.35.0"
+      }
+    },
+    "minimatch": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+      "dev": true,
+      "requires": {
+        "brace-expansion": "^1.1.7"
+      }
+    },
+    "minimist": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+      "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+      "dev": true
+    },
+    "mixin-deep": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+      "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+      "dev": true,
+      "requires": {
+        "for-in": "^1.0.2",
+        "is-extendable": "^1.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+          "dev": true,
+          "requires": {
+            "is-plain-object": "^2.0.4"
+          }
+        }
+      }
+    },
+    "mkdirp": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "dev": true,
+      "requires": {
+        "minimist": "0.0.8"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "0.0.8",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+          "dev": true
+        }
+      }
+    },
+    "ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+      "dev": true
+    },
+    "multipipe": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
+      "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
+      "dev": true,
+      "requires": {
+        "duplexer2": "0.0.2"
+      }
+    },
+    "nan": {
+      "version": "2.10.0",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
+      "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==",
+      "dev": true
+    },
+    "nanomatch": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+      "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+      "dev": true,
+      "requires": {
+        "arr-diff": "^4.0.0",
+        "array-unique": "^0.3.2",
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "fragment-cache": "^0.2.1",
+        "is-windows": "^1.0.2",
+        "kind-of": "^6.0.2",
+        "object.pick": "^1.3.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "arr-diff": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+          "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+          "dev": true
+        },
+        "array-unique": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+          "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+          "dev": true
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "natives": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.4.tgz",
+      "integrity": "sha512-Q29yeg9aFKwhLVdkTAejM/HvYG0Y1Am1+HUkFQGn5k2j8GS+v60TVmZh6nujpEAj/qql+wGUrlryO8bF+b1jEg==",
+      "dev": true
+    },
+    "ndarray": {
+      "version": "1.0.18",
+      "resolved": "https://registry.npmjs.org/ndarray/-/ndarray-1.0.18.tgz",
+      "integrity": "sha1-tg06cyJOxVXQ+qeXEeUCRI/T95M=",
+      "dev": true,
+      "requires": {
+        "iota-array": "^1.0.0",
+        "is-buffer": "^1.0.2"
+      }
+    },
+    "ndarray-fill": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/ndarray-fill/-/ndarray-fill-1.0.2.tgz",
+      "integrity": "sha1-owpg9xiODJWC/N1YiWrNy1IqHtY=",
+      "dev": true,
+      "requires": {
+        "cwise": "^1.0.10"
+      }
+    },
+    "ndarray-ops": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/ndarray-ops/-/ndarray-ops-1.2.2.tgz",
+      "integrity": "sha1-WeiNLDKn7ryxvGkPrhQVeVV6YU4=",
+      "dev": true,
+      "requires": {
+        "cwise-compiler": "^1.0.0"
+      }
+    },
+    "ndarray-pack": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/ndarray-pack/-/ndarray-pack-1.2.1.tgz",
+      "integrity": "sha1-jK6+qqJNXs9w/4YCBjeXfajuWFo=",
+      "dev": true,
+      "requires": {
+        "cwise-compiler": "^1.1.2",
+        "ndarray": "^1.0.13"
+      }
+    },
+    "negotiator": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+      "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
+      "dev": true
+    },
+    "node-bitmap": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/node-bitmap/-/node-bitmap-0.0.1.tgz",
+      "integrity": "sha1-GA6scAPgxwdhjvMTaPYvhLKmkJE=",
+      "dev": true
+    },
+    "node-gyp": {
+      "version": "3.7.0",
+      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.7.0.tgz",
+      "integrity": "sha512-qDQE/Ft9xXP6zphwx4sD0t+VhwV7yFaloMpfbL2QnnDZcyaiakWlLdtFGGQfTAwpFHdpbRhRxVhIHN1OKAjgbg==",
+      "dev": true,
+      "requires": {
+        "fstream": "^1.0.0",
+        "glob": "^7.0.3",
+        "graceful-fs": "^4.1.2",
+        "mkdirp": "^0.5.0",
+        "nopt": "2 || 3",
+        "npmlog": "0 || 1 || 2 || 3 || 4",
+        "osenv": "0",
+        "request": ">=2.9.0 <2.82.0",
+        "rimraf": "2",
+        "semver": "~5.3.0",
+        "tar": "^2.0.0",
+        "which": "1"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "7.1.2",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+          "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "qs": {
+          "version": "6.4.0",
+          "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
+          "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
+          "dev": true
+        },
+        "request": {
+          "version": "2.81.0",
+          "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
+          "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
+          "dev": true,
+          "requires": {
+            "aws-sign2": "~0.6.0",
+            "aws4": "^1.2.1",
+            "caseless": "~0.12.0",
+            "combined-stream": "~1.0.5",
+            "extend": "~3.0.0",
+            "forever-agent": "~0.6.1",
+            "form-data": "~2.1.1",
+            "har-validator": "~4.2.1",
+            "hawk": "~3.1.3",
+            "http-signature": "~1.1.0",
+            "is-typedarray": "~1.0.0",
+            "isstream": "~0.1.2",
+            "json-stringify-safe": "~5.0.1",
+            "mime-types": "~2.1.7",
+            "oauth-sign": "~0.8.1",
+            "performance-now": "^0.2.0",
+            "qs": "~6.4.0",
+            "safe-buffer": "^5.0.1",
+            "stringstream": "~0.0.4",
+            "tough-cookie": "~2.3.0",
+            "tunnel-agent": "^0.6.0",
+            "uuid": "^3.0.0"
+          }
+        },
+        "semver": {
+          "version": "5.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+          "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+          "dev": true
+        },
+        "tunnel-agent": {
+          "version": "0.6.0",
+          "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+          "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+          "dev": true,
+          "requires": {
+            "safe-buffer": "^5.0.1"
+          }
+        }
+      }
+    },
+    "node-sass": {
+      "version": "4.9.2",
+      "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.2.tgz",
+      "integrity": "sha512-LdxoJLZutx0aQXHtWIYwJKMj+9pTjneTcLWJgzf2XbGu0q5pRNqW5QvFCEdm3mc5rJOdru/mzln5d0EZLacf6g==",
+      "dev": true,
+      "requires": {
+        "async-foreach": "^0.1.3",
+        "chalk": "^1.1.1",
+        "cross-spawn": "^3.0.0",
+        "gaze": "^1.0.0",
+        "get-stdin": "^4.0.1",
+        "glob": "^7.0.3",
+        "in-publish": "^2.0.0",
+        "lodash.assign": "^4.2.0",
+        "lodash.clonedeep": "^4.3.2",
+        "lodash.mergewith": "^4.6.0",
+        "meow": "^3.7.0",
+        "mkdirp": "^0.5.1",
+        "nan": "^2.10.0",
+        "node-gyp": "^3.3.1",
+        "npmlog": "^4.0.0",
+        "request": "2.87.0",
+        "sass-graph": "^2.2.4",
+        "stdout-stream": "^1.4.0",
+        "true-case-path": "^1.0.2"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
+          "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^4.0.1",
+            "which": "^1.2.9"
+          }
+        },
+        "gaze": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
+          "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
+          "dev": true,
+          "requires": {
+            "globule": "^1.0.0"
+          }
+        },
+        "glob": {
+          "version": "7.1.2",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+          "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "globule": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
+          "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
+          "dev": true,
+          "requires": {
+            "glob": "~7.1.1",
+            "lodash": "~4.17.10",
+            "minimatch": "~3.0.2"
+          }
+        },
+        "lodash": {
+          "version": "4.17.10",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+          "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+          "dev": true
+        },
+        "lru-cache": {
+          "version": "4.1.3",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
+          "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
+          "dev": true,
+          "requires": {
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
+          }
+        }
+      }
+    },
+    "node-status-codes": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz",
+      "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=",
+      "dev": true
+    },
+    "nopt": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+      "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+      "dev": true,
+      "requires": {
+        "abbrev": "1"
+      }
+    },
+    "normalize-package-data": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+      "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+      "dev": true,
+      "requires": {
+        "hosted-git-info": "^2.1.4",
+        "is-builtin-module": "^1.0.0",
+        "semver": "2 || 3 || 4 || 5",
+        "validate-npm-package-license": "^3.0.1"
+      }
+    },
+    "normalize-path": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+      "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+      "dev": true,
+      "requires": {
+        "remove-trailing-separator": "^1.0.1"
+      }
+    },
+    "normalize-range": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+      "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+      "dev": true
+    },
+    "npm-run-path": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+      "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "path-key": "^2.0.0"
+      }
+    },
+    "npmlog": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+      "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+      "dev": true,
+      "requires": {
+        "are-we-there-yet": "~1.1.2",
+        "console-control-strings": "~1.1.0",
+        "gauge": "~2.7.3",
+        "set-blocking": "~2.0.0"
+      }
+    },
+    "nth-check": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
+      "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "boolbase": "~1.0.0"
+      }
+    },
+    "num2fraction": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+      "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
+      "dev": true
+    },
+    "number-is-nan": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+      "dev": true
+    },
+    "oauth-sign": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+      "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+      "dev": true
+    },
+    "obj-extend": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/obj-extend/-/obj-extend-0.1.0.tgz",
+      "integrity": "sha1-u0SKR3X7les0p4H5CLusLfI9u1s=",
+      "dev": true
+    },
+    "object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+      "dev": true
+    },
+    "object-component": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
+      "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
+      "dev": true
+    },
+    "object-copy": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+      "dev": true,
+      "requires": {
+        "copy-descriptor": "^0.1.0",
+        "define-property": "^0.2.5",
+        "kind-of": "^3.0.3"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "object-inspect": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-0.4.0.tgz",
+      "integrity": "sha1-9RV8EWwUVbJDsG7pdwM5LFrYn+w=",
+      "dev": true
+    },
+    "object-keys": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
+      "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
+      "dev": true
+    },
+    "object-path": {
+      "version": "0.9.2",
+      "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz",
+      "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=",
+      "dev": true
+    },
+    "object-visit": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.0"
+      },
+      "dependencies": {
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+          "dev": true
+        }
+      }
+    },
+    "object.defaults": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+      "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+      "dev": true,
+      "requires": {
+        "array-each": "^1.0.1",
+        "array-slice": "^1.0.0",
+        "for-own": "^1.0.0",
+        "isobject": "^3.0.0"
+      },
+      "dependencies": {
+        "for-own": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+          "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+          "dev": true,
+          "requires": {
+            "for-in": "^1.0.1"
+          }
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+          "dev": true
+        }
+      }
+    },
+    "object.getownpropertydescriptors": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
+      "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.5.1"
+      }
+    },
+    "object.map": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+      "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+      "dev": true,
+      "requires": {
+        "for-own": "^1.0.0",
+        "make-iterator": "^1.0.0"
+      },
+      "dependencies": {
+        "for-own": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+          "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+          "dev": true,
+          "requires": {
+            "for-in": "^1.0.1"
+          }
+        }
+      }
+    },
+    "object.omit": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+      "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+      "dev": true,
+      "requires": {
+        "for-own": "^0.1.4",
+        "is-extendable": "^0.1.1"
+      }
+    },
+    "object.pick": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.1"
+      },
+      "dependencies": {
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+          "dev": true
+        }
+      }
+    },
+    "object.values": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz",
+      "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.6.1",
+        "function-bind": "^1.1.0",
+        "has": "^1.0.1"
+      }
+    },
+    "omggif": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.9.tgz",
+      "integrity": "sha1-3LcCTazVDFK00wPwSALJHAV8dl8=",
+      "dev": true
+    },
+    "on-finished": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+      "dev": true,
+      "requires": {
+        "ee-first": "1.1.1"
+      }
+    },
+    "once": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+      "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
+      "dev": true,
+      "requires": {
+        "wrappy": "1"
+      }
+    },
+    "onetime": {
+      "version": "1.1.0",
+      "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
+      "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
+      "dev": true
+    },
+    "openurl": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz",
+      "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=",
+      "dev": true
+    },
+    "opn": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz",
+      "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=",
+      "dev": true,
+      "requires": {
+        "object-assign": "^4.0.1",
+        "pinkie-promise": "^2.0.0"
+      }
+    },
+    "optimist": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+      "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+      "dev": true,
+      "requires": {
+        "minimist": "~0.0.1",
+        "wordwrap": "~0.0.2"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "0.0.10",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+          "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
+          "dev": true
+        }
+      }
+    },
+    "optipng-bin": {
+      "version": "3.1.4",
+      "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-3.1.4.tgz",
+      "integrity": "sha1-ldNPLEiHBPb9cGBr/qDGWfHZXYQ=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "bin-build": "^2.0.0",
+        "bin-wrapper": "^3.0.0",
+        "logalot": "^2.0.0"
+      }
+    },
+    "orchestrator": {
+      "version": "0.3.8",
+      "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz",
+      "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "~0.1.5",
+        "sequencify": "~0.0.7",
+        "stream-consume": "~0.1.0"
+      }
+    },
+    "ordered-read-streams": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz",
+      "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=",
+      "dev": true
+    },
+    "os-filter-obj": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-1.0.3.tgz",
+      "integrity": "sha1-WRUzDZDs7VV9LZOKMcbdIU2cY60=",
+      "dev": true,
+      "optional": true
+    },
+    "os-homedir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+      "dev": true
+    },
+    "os-locale": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+      "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+      "dev": true,
+      "requires": {
+        "lcid": "^1.0.0"
+      }
+    },
+    "os-tmpdir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+      "dev": true
+    },
+    "osenv": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+      "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+      "dev": true,
+      "requires": {
+        "os-homedir": "^1.0.0",
+        "os-tmpdir": "^1.0.0"
+      }
+    },
+    "p-finally": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+      "dev": true
+    },
+    "p-pipe": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz",
+      "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=",
+      "dev": true
+    },
+    "parse-data-uri": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/parse-data-uri/-/parse-data-uri-0.2.0.tgz",
+      "integrity": "sha1-vwTYUd1ch7CrI45dAazklLYEtMk=",
+      "dev": true,
+      "requires": {
+        "data-uri-to-buffer": "0.0.3"
+      }
+    },
+    "parse-filepath": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+      "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+      "dev": true,
+      "requires": {
+        "is-absolute": "^1.0.0",
+        "map-cache": "^0.2.0",
+        "path-root": "^0.1.1"
+      }
+    },
+    "parse-glob": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+      "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+      "dev": true,
+      "requires": {
+        "glob-base": "^0.3.0",
+        "is-dotfile": "^1.0.0",
+        "is-extglob": "^1.0.0",
+        "is-glob": "^2.0.0"
+      }
+    },
+    "parse-json": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+      "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+      "dev": true,
+      "requires": {
+        "error-ex": "^1.2.0"
+      }
+    },
+    "parse-passwd": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+      "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+      "dev": true
+    },
+    "parseqs": {
+      "version": "0.0.5",
+      "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
+      "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+      "dev": true,
+      "requires": {
+        "better-assert": "~1.0.0"
+      }
+    },
+    "parseuri": {
+      "version": "0.0.5",
+      "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
+      "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+      "dev": true,
+      "requires": {
+        "better-assert": "~1.0.0"
+      }
+    },
+    "parseurl": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+      "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
+      "dev": true
+    },
+    "pascalcase": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+      "dev": true
+    },
+    "path-dirname": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+      "dev": true
+    },
+    "path-exists": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+      "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+      "dev": true,
+      "requires": {
+        "pinkie-promise": "^2.0.0"
+      }
+    },
+    "path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+      "dev": true
+    },
+    "path-key": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+      "dev": true,
+      "optional": true
+    },
+    "path-parse": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+      "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+      "dev": true
+    },
+    "path-root": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+      "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+      "dev": true,
+      "requires": {
+        "path-root-regex": "^0.1.0"
+      }
+    },
+    "path-root-regex": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+      "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+      "dev": true
+    },
+    "path-type": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+      "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "pify": "^2.0.0",
+        "pinkie-promise": "^2.0.0"
+      }
+    },
+    "pend": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+      "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+      "dev": true
+    },
+    "performance-now": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
+      "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
+      "dev": true
+    },
+    "pify": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+      "dev": true
+    },
+    "pinkie": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+      "dev": true
+    },
+    "pinkie-promise": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+      "dev": true,
+      "requires": {
+        "pinkie": "^2.0.0"
+      }
+    },
+    "pixelsmith": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/pixelsmith/-/pixelsmith-2.2.1.tgz",
+      "integrity": "sha1-MT95MAKcZdCyj+HOKcBrjiy7OAc=",
+      "dev": true,
+      "requires": {
+        "async": "~0.9.0",
+        "concat-stream": "~1.5.1",
+        "get-pixels": "~3.3.0",
+        "mime-types": "~2.1.7",
+        "ndarray": "~1.0.15",
+        "ndarray-fill": "~1.0.1",
+        "obj-extend": "~0.1.0",
+        "save-pixels": "~2.3.0",
+        "vinyl-file": "~1.3.0"
+      },
+      "dependencies": {
+        "async": {
+          "version": "0.9.2",
+          "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
+          "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
+          "dev": true
+        },
+        "concat-stream": {
+          "version": "1.5.2",
+          "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
+          "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
+          "dev": true,
+          "requires": {
+            "inherits": "~2.0.1",
+            "readable-stream": "~2.0.0",
+            "typedarray": "~0.0.5"
+          }
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+          "dev": true
+        },
+        "process-nextick-args": {
+          "version": "1.0.7",
+          "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+          "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "2.0.6",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+          "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~1.0.6",
+            "string_decoder": "~0.10.x",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+          "dev": true
+        }
+      }
+    },
+    "plugin-error": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
+      "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
+      "dev": true,
+      "requires": {
+        "ansi-colors": "^1.0.1",
+        "arr-diff": "^4.0.0",
+        "arr-union": "^3.1.0",
+        "extend-shallow": "^3.0.2"
+      },
+      "dependencies": {
+        "arr-diff": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+          "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+          "dev": true
+        }
+      }
+    },
+    "plur": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz",
+      "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=",
+      "dev": true,
+      "requires": {
+        "irregular-plurals": "^1.0.0"
+      }
+    },
+    "pngjs": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.3.3.tgz",
+      "integrity": "sha512-1n3Z4p3IOxArEs1VRXnZ/RXdfEniAUS9jb68g58FIXMNkPJeZd+Qh4Uq7/e0LVxAQGos1eIUrqrt4FpjdnEd+Q==",
+      "dev": true
+    },
+    "pngjs-nozlib": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/pngjs-nozlib/-/pngjs-nozlib-1.0.0.tgz",
+      "integrity": "sha1-nmTWAs/pzOTZ1Zl9BodCmnPwt9c=",
+      "dev": true
+    },
+    "portscanner": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz",
+      "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=",
+      "dev": true,
+      "requires": {
+        "async": "1.5.2",
+        "is-number-like": "^1.0.3"
+      }
+    },
+    "posix-character-classes": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+      "dev": true
+    },
+    "postcss": {
+      "version": "6.0.23",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+      "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.4.1",
+        "source-map": "^0.6.1",
+        "supports-color": "^5.4.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+          "dev": true,
+          "requires": {
+            "color-convert": "^1.9.0"
+          }
+        },
+        "chalk": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+          "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^3.2.1",
+            "escape-string-regexp": "^1.0.5",
+            "supports-color": "^5.3.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "5.4.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+          "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+          "dev": true,
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-value-parser": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz",
+      "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=",
+      "dev": true
+    },
+    "prepend-http": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+      "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+      "dev": true
+    },
+    "preserve": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+      "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+      "dev": true
+    },
+    "pretty-bytes": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz",
+      "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=",
+      "dev": true
+    },
+    "pretty-hrtime": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+      "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
+      "dev": true
+    },
+    "process-nextick-args": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+      "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+      "dev": true
+    },
+    "pseudomap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+      "dev": true
+    },
+    "punycode": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+      "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+      "dev": true
+    },
+    "q": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+      "dev": true,
+      "optional": true
+    },
+    "qs": {
+      "version": "6.2.3",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz",
+      "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=",
+      "dev": true
+    },
+    "quote-stream": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-0.0.0.tgz",
+      "integrity": "sha1-zeKelMQJsW4Z3HCYuJtmWPlyHTs=",
+      "dev": true,
+      "requires": {
+        "minimist": "0.0.8",
+        "through2": "~0.4.1"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+          "dev": true
+        },
+        "minimist": {
+          "version": "0.0.8",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+          "dev": true
+        },
+        "through2": {
+          "version": "0.4.2",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz",
+          "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=",
+          "dev": true,
+          "requires": {
+            "readable-stream": "~1.0.17",
+            "xtend": "~2.1.1"
+          }
+        },
+        "xtend": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+          "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
+          "dev": true,
+          "requires": {
+            "object-keys": "~0.4.0"
+          }
+        }
+      }
+    },
+    "randomatic": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz",
+      "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==",
+      "dev": true,
+      "requires": {
+        "is-number": "^4.0.0",
+        "kind-of": "^6.0.0",
+        "math-random": "^1.0.1"
+      },
+      "dependencies": {
+        "is-number": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+          "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+          "dev": true
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "range-parser": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+      "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
+      "dev": true
+    },
+    "raw-body": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
+      "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
+      "dev": true,
+      "requires": {
+        "bytes": "3.0.0",
+        "http-errors": "1.6.3",
+        "iconv-lite": "0.4.23",
+        "unpipe": "1.0.0"
+      }
+    },
+    "rc": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+      "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+      "dev": true,
+      "requires": {
+        "deep-extend": "^0.6.0",
+        "ini": "~1.3.0",
+        "minimist": "^1.2.0",
+        "strip-json-comments": "~2.0.1"
+      }
+    },
+    "read-all-stream": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz",
+      "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=",
+      "dev": true,
+      "requires": {
+        "pinkie-promise": "^2.0.0",
+        "readable-stream": "^2.0.0"
+      }
+    },
+    "read-pkg": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+      "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+      "dev": true,
+      "requires": {
+        "load-json-file": "^1.0.0",
+        "normalize-package-data": "^2.3.2",
+        "path-type": "^1.0.0"
+      }
+    },
+    "read-pkg-up": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+      "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+      "dev": true,
+      "requires": {
+        "find-up": "^1.0.0",
+        "read-pkg": "^1.0.0"
+      }
+    },
+    "readable-stream": {
+      "version": "2.3.6",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+      "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+      "dev": true,
+      "requires": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+          "dev": true
+        }
+      }
+    },
+    "readdirp": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
+      "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "minimatch": "^3.0.2",
+        "readable-stream": "^2.0.2",
+        "set-immediate-shim": "^1.0.1"
+      }
+    },
+    "rechoir": {
+      "version": "0.6.2",
+      "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+      "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+      "dev": true,
+      "requires": {
+        "resolve": "^1.1.6"
+      }
+    },
+    "redent": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+      "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+      "dev": true,
+      "requires": {
+        "indent-string": "^2.1.0",
+        "strip-indent": "^1.0.1"
+      }
+    },
+    "regenerator-runtime": {
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+      "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+      "dev": true
+    },
+    "regex-cache": {
+      "version": "0.4.4",
+      "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+      "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+      "dev": true,
+      "requires": {
+        "is-equal-shallow": "^0.1.3"
+      }
+    },
+    "regex-not": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+      "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^3.0.2",
+        "safe-regex": "^1.1.0"
+      }
+    },
+    "remove-trailing-separator": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+      "dev": true
+    },
+    "repeat-element": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+      "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+      "dev": true
+    },
+    "repeat-string": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+      "dev": true
+    },
+    "repeating": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+      "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+      "dev": true,
+      "requires": {
+        "is-finite": "^1.0.0"
+      }
+    },
+    "replace-ext": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+      "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
+      "dev": true
+    },
+    "request": {
+      "version": "2.87.0",
+      "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz",
+      "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==",
+      "dev": true,
+      "requires": {
+        "aws-sign2": "~0.7.0",
+        "aws4": "^1.6.0",
+        "caseless": "~0.12.0",
+        "combined-stream": "~1.0.5",
+        "extend": "~3.0.1",
+        "forever-agent": "~0.6.1",
+        "form-data": "~2.3.1",
+        "har-validator": "~5.0.3",
+        "http-signature": "~1.2.0",
+        "is-typedarray": "~1.0.0",
+        "isstream": "~0.1.2",
+        "json-stringify-safe": "~5.0.1",
+        "mime-types": "~2.1.17",
+        "oauth-sign": "~0.8.2",
+        "performance-now": "^2.1.0",
+        "qs": "~6.5.1",
+        "safe-buffer": "^5.1.1",
+        "tough-cookie": "~2.3.3",
+        "tunnel-agent": "^0.6.0",
+        "uuid": "^3.1.0"
+      },
+      "dependencies": {
+        "ajv": {
+          "version": "5.5.2",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+          "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+          "dev": true,
+          "requires": {
+            "co": "^4.6.0",
+            "fast-deep-equal": "^1.0.0",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.3.0"
+          }
+        },
+        "assert-plus": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+          "dev": true
+        },
+        "aws-sign2": {
+          "version": "0.7.0",
+          "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+          "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+          "dev": true
+        },
+        "co": {
+          "version": "4.6.0",
+          "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+          "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+          "dev": true
+        },
+        "form-data": {
+          "version": "2.3.2",
+          "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
+          "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
+          "dev": true,
+          "requires": {
+            "asynckit": "^0.4.0",
+            "combined-stream": "1.0.6",
+            "mime-types": "^2.1.12"
+          }
+        },
+        "har-schema": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+          "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+          "dev": true
+        },
+        "har-validator": {
+          "version": "5.0.3",
+          "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
+          "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
+          "dev": true,
+          "requires": {
+            "ajv": "^5.1.0",
+            "har-schema": "^2.0.0"
+          }
+        },
+        "http-signature": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+          "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+          "dev": true,
+          "requires": {
+            "assert-plus": "^1.0.0",
+            "jsprim": "^1.2.2",
+            "sshpk": "^1.7.0"
+          }
+        },
+        "performance-now": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+          "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+          "dev": true
+        },
+        "qs": {
+          "version": "6.5.2",
+          "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+          "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+          "dev": true
+        },
+        "tunnel-agent": {
+          "version": "0.6.0",
+          "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+          "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+          "dev": true,
+          "requires": {
+            "safe-buffer": "^5.0.1"
+          }
+        }
+      }
+    },
+    "require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+      "dev": true
+    },
+    "require-main-filename": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+      "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+      "dev": true
+    },
+    "requires-port": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+      "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+      "dev": true
+    },
+    "resolve": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
+      "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+      "dev": true,
+      "requires": {
+        "path-parse": "^1.0.5"
+      }
+    },
+    "resolve-dir": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+      "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+      "dev": true,
+      "requires": {
+        "expand-tilde": "^2.0.0",
+        "global-modules": "^1.0.0"
+      }
+    },
+    "resolve-url": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+      "dev": true
+    },
+    "resp-modifier": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz",
+      "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=",
+      "dev": true,
+      "requires": {
+        "debug": "^2.2.0",
+        "minimatch": "^3.0.2"
+      }
+    },
+    "ret": {
+      "version": "0.1.15",
+      "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+      "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+      "dev": true
+    },
+    "right-align": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+      "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+      "dev": true,
+      "requires": {
+        "align-text": "^0.1.1"
+      }
+    },
+    "rimraf": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+      "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+      "dev": true,
+      "requires": {
+        "glob": "^7.0.5"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "7.1.2",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+          "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        }
+      }
+    },
+    "rx": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
+      "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=",
+      "dev": true
+    },
+    "safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "dev": true
+    },
+    "safe-regex": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+      "dev": true,
+      "requires": {
+        "ret": "~0.1.10"
+      }
+    },
+    "safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "dev": true
+    },
+    "sass-graph": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
+      "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
+      "dev": true,
+      "requires": {
+        "glob": "^7.0.0",
+        "lodash": "^4.0.0",
+        "scss-tokenizer": "^0.2.3",
+        "yargs": "^7.0.0"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "7.1.2",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+          "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "lodash": {
+          "version": "4.17.10",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+          "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+          "dev": true
+        },
+        "yargs": {
+          "version": "7.1.0",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
+          "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
+          "dev": true,
+          "requires": {
+            "camelcase": "^3.0.0",
+            "cliui": "^3.2.0",
+            "decamelize": "^1.1.1",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^1.4.0",
+            "read-pkg-up": "^1.0.1",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^1.0.1",
+            "set-blocking": "^2.0.0",
+            "string-width": "^1.0.2",
+            "which-module": "^1.0.0",
+            "y18n": "^3.2.1",
+            "yargs-parser": "^5.0.0"
+          }
+        },
+        "yargs-parser": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
+          "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
+          "dev": true,
+          "requires": {
+            "camelcase": "^3.0.0"
+          }
+        }
+      }
+    },
+    "save-pixels": {
+      "version": "2.3.4",
+      "resolved": "https://registry.npmjs.org/save-pixels/-/save-pixels-2.3.4.tgz",
+      "integrity": "sha1-SdNJwGuNfAEn2/DaJLRKylr7Wf4=",
+      "dev": true,
+      "requires": {
+        "contentstream": "^1.0.0",
+        "gif-encoder": "~0.4.1",
+        "jpeg-js": "0.0.4",
+        "ndarray": "^1.0.18",
+        "ndarray-ops": "^1.2.2",
+        "pngjs-nozlib": "^1.0.0",
+        "through": "^2.3.4"
+      },
+      "dependencies": {
+        "jpeg-js": {
+          "version": "0.0.4",
+          "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.0.4.tgz",
+          "integrity": "sha1-Bqr0fv7HrwsZJKWc1pWm0rXthw4=",
+          "dev": true
+        }
+      }
+    },
+    "sax": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+      "dev": true,
+      "optional": true
+    },
+    "scss-tokenizer": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
+      "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
+      "dev": true,
+      "requires": {
+        "js-base64": "^2.1.8",
+        "source-map": "^0.4.2"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.4.4",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+          "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+          "dev": true,
+          "requires": {
+            "amdefine": ">=0.0.4"
+          }
+        }
+      }
+    },
+    "seek-bzip": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz",
+      "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=",
+      "dev": true,
+      "requires": {
+        "commander": "~2.8.1"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.8.1",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
+          "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
+          "dev": true,
+          "requires": {
+            "graceful-readlink": ">= 1.0.0"
+          }
+        }
+      }
+    },
+    "semver": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+      "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+      "dev": true
+    },
+    "semver-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz",
+      "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=",
+      "dev": true,
+      "optional": true
+    },
+    "semver-truncate": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz",
+      "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "semver": "^5.3.0"
+      }
+    },
+    "send": {
+      "version": "0.16.2",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
+      "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "destroy": "~1.0.4",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "fresh": "0.5.2",
+        "http-errors": "~1.6.2",
+        "mime": "1.4.1",
+        "ms": "2.0.0",
+        "on-finished": "~2.3.0",
+        "range-parser": "~1.2.0",
+        "statuses": "~1.4.0"
+      },
+      "dependencies": {
+        "statuses": {
+          "version": "1.4.0",
+          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+          "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+          "dev": true
+        }
+      }
+    },
+    "sequencify": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz",
+      "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=",
+      "dev": true
+    },
+    "serve-index": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+      "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+      "dev": true,
+      "requires": {
+        "accepts": "~1.3.4",
+        "batch": "0.6.1",
+        "debug": "2.6.9",
+        "escape-html": "~1.0.3",
+        "http-errors": "~1.6.2",
+        "mime-types": "~2.1.17",
+        "parseurl": "~1.3.2"
+      }
+    },
+    "serve-static": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
+      "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
+      "dev": true,
+      "requires": {
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.2",
+        "send": "0.16.2"
+      }
+    },
+    "server-destroy": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
+      "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=",
+      "dev": true
+    },
+    "set-blocking": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+      "dev": true
+    },
+    "set-immediate-shim": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
+      "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
+      "dev": true
+    },
+    "set-value": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+      "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^2.0.1",
+        "is-extendable": "^0.1.1",
+        "is-plain-object": "^2.0.3",
+        "split-string": "^3.0.1"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "setprototypeof": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+      "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+      "dev": true
+    },
+    "shallow-copy": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz",
+      "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=",
+      "dev": true
+    },
+    "shebang-command": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "shebang-regex": "^1.0.0"
+      }
+    },
+    "shebang-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+      "dev": true,
+      "optional": true
+    },
+    "sigmund": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+      "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+      "dev": true
+    },
+    "signal-exit": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+      "dev": true
+    },
+    "snapdragon": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+      "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+      "dev": true,
+      "requires": {
+        "base": "^0.11.1",
+        "debug": "^2.2.0",
+        "define-property": "^0.2.5",
+        "extend-shallow": "^2.0.1",
+        "map-cache": "^0.2.2",
+        "source-map": "^0.5.6",
+        "source-map-resolve": "^0.5.0",
+        "use": "^3.1.0"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "snapdragon-node": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+      "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+      "dev": true,
+      "requires": {
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.0",
+        "snapdragon-util": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+          "dev": true
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "snapdragon-util": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+      "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.2.0"
+      }
+    },
+    "sntp": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+      "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+      "dev": true,
+      "requires": {
+        "hoek": "2.x.x"
+      }
+    },
+    "socket.io": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz",
+      "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==",
+      "dev": true,
+      "requires": {
+        "debug": "~3.1.0",
+        "engine.io": "~3.2.0",
+        "has-binary2": "~1.0.2",
+        "socket.io-adapter": "~1.1.0",
+        "socket.io-client": "2.1.1",
+        "socket.io-parser": "~3.2.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "engine.io-client": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz",
+          "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==",
+          "dev": true,
+          "requires": {
+            "component-emitter": "1.2.1",
+            "component-inherit": "0.0.3",
+            "debug": "~3.1.0",
+            "engine.io-parser": "~2.1.1",
+            "has-cors": "1.1.0",
+            "indexof": "0.0.1",
+            "parseqs": "0.0.5",
+            "parseuri": "0.0.5",
+            "ws": "~3.3.1",
+            "xmlhttprequest-ssl": "~1.5.4",
+            "yeast": "0.1.2"
+          }
+        },
+        "socket.io-client": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz",
+          "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==",
+          "dev": true,
+          "requires": {
+            "backo2": "1.0.2",
+            "base64-arraybuffer": "0.1.5",
+            "component-bind": "1.0.0",
+            "component-emitter": "1.2.1",
+            "debug": "~3.1.0",
+            "engine.io-client": "~3.2.0",
+            "has-binary2": "~1.0.2",
+            "has-cors": "1.1.0",
+            "indexof": "0.0.1",
+            "object-component": "0.0.3",
+            "parseqs": "0.0.5",
+            "parseuri": "0.0.5",
+            "socket.io-parser": "~3.2.0",
+            "to-array": "0.1.4"
+          }
+        },
+        "socket.io-parser": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz",
+          "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==",
+          "dev": true,
+          "requires": {
+            "component-emitter": "1.2.1",
+            "debug": "~3.1.0",
+            "isarray": "2.0.1"
+          }
+        }
+      }
+    },
+    "socket.io-adapter": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz",
+      "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=",
+      "dev": true
+    },
+    "socket.io-client": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz",
+      "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=",
+      "dev": true,
+      "requires": {
+        "backo2": "1.0.2",
+        "base64-arraybuffer": "0.1.5",
+        "component-bind": "1.0.0",
+        "component-emitter": "1.2.1",
+        "debug": "~2.6.4",
+        "engine.io-client": "~3.1.0",
+        "has-cors": "1.1.0",
+        "indexof": "0.0.1",
+        "object-component": "0.0.3",
+        "parseqs": "0.0.5",
+        "parseuri": "0.0.5",
+        "socket.io-parser": "~3.1.1",
+        "to-array": "0.1.4"
+      }
+    },
+    "socket.io-parser": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz",
+      "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==",
+      "dev": true,
+      "requires": {
+        "component-emitter": "1.2.1",
+        "debug": "~3.1.0",
+        "has-binary2": "~1.0.2",
+        "isarray": "2.0.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "source-map": {
+      "version": "0.5.7",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+      "dev": true
+    },
+    "source-map-resolve": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+      "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+      "dev": true,
+      "requires": {
+        "atob": "^2.1.1",
+        "decode-uri-component": "^0.2.0",
+        "resolve-url": "^0.2.1",
+        "source-map-url": "^0.4.0",
+        "urix": "^0.1.0"
+      }
+    },
+    "source-map-url": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+      "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+      "dev": true
+    },
+    "sparkles": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
+      "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==",
+      "dev": true
+    },
+    "spdx-correct": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+      "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
+      "dev": true,
+      "requires": {
+        "spdx-expression-parse": "^3.0.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-exceptions": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
+      "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
+      "dev": true
+    },
+    "spdx-expression-parse": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+      "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+      "dev": true,
+      "requires": {
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-license-ids": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+      "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
+      "dev": true
+    },
+    "split-string": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+      "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^3.0.0"
+      }
+    },
+    "sprintf-js": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+      "dev": true,
+      "optional": true
+    },
+    "spritesheet-templates": {
+      "version": "10.2.2",
+      "resolved": "https://registry.npmjs.org/spritesheet-templates/-/spritesheet-templates-10.2.2.tgz",
+      "integrity": "sha1-6J2ihbvM20HFm1eYFnTikGeJrWY=",
+      "dev": true,
+      "requires": {
+        "handlebars": "~4.0.5",
+        "handlebars-layouts": "~1.1.0",
+        "json-content-demux": "~0.1.2",
+        "underscore": "~1.4.2",
+        "underscore.string": "~3.0.3"
+      },
+      "dependencies": {
+        "underscore": {
+          "version": "1.4.4",
+          "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
+          "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=",
+          "dev": true
+        }
+      }
+    },
+    "spritesmith": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/spritesmith/-/spritesmith-3.3.1.tgz",
+      "integrity": "sha512-7mq+oBkeHU66DvJZGeGZO6NGkCbRbQA/WXToLAPyl4YQ2dsYfT9kF2wECJ5ImskmQWllve4T1hGt7tmyaa7OqA==",
+      "dev": true,
+      "requires": {
+        "concat-stream": "~1.5.1",
+        "layout": "~2.2.0",
+        "pixelsmith": "~2.2.0",
+        "semver": "~5.0.3",
+        "through2": "~2.0.0"
+      },
+      "dependencies": {
+        "concat-stream": {
+          "version": "1.5.2",
+          "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
+          "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
+          "dev": true,
+          "requires": {
+            "inherits": "~2.0.1",
+            "readable-stream": "~2.0.0",
+            "typedarray": "~0.0.5"
+          }
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+          "dev": true
+        },
+        "process-nextick-args": {
+          "version": "1.0.7",
+          "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+          "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "2.0.6",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+          "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~1.0.6",
+            "string_decoder": "~0.10.x",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "semver": {
+          "version": "5.0.3",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz",
+          "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=",
+          "dev": true
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+          "dev": true
+        }
+      }
+    },
+    "squeak": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz",
+      "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "chalk": "^1.0.0",
+        "console-stream": "^0.1.1",
+        "lpad-align": "^1.0.1"
+      }
+    },
+    "sshpk": {
+      "version": "1.14.2",
+      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
+      "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
+      "dev": true,
+      "requires": {
+        "asn1": "~0.2.3",
+        "assert-plus": "^1.0.0",
+        "bcrypt-pbkdf": "^1.0.0",
+        "dashdash": "^1.12.0",
+        "ecc-jsbn": "~0.1.1",
+        "getpass": "^0.1.1",
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.0.2",
+        "tweetnacl": "~0.14.0"
+      },
+      "dependencies": {
+        "assert-plus": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+          "dev": true
+        }
+      }
+    },
+    "stable": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+      "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
+      "dev": true,
+      "optional": true
+    },
+    "stat-mode": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz",
+      "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=",
+      "dev": true
+    },
+    "static-eval": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-0.2.4.tgz",
+      "integrity": "sha1-t9NNg4k3uWn5ZBygfUj47eJj6ns=",
+      "dev": true,
+      "requires": {
+        "escodegen": "~0.0.24"
+      },
+      "dependencies": {
+        "escodegen": {
+          "version": "0.0.28",
+          "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-0.0.28.tgz",
+          "integrity": "sha1-Dk/xcV8yh3XWyrUaxEpAbNer/9M=",
+          "dev": true,
+          "requires": {
+            "esprima": "~1.0.2",
+            "estraverse": "~1.3.0",
+            "source-map": ">= 0.1.2"
+          }
+        },
+        "esprima": {
+          "version": "1.0.4",
+          "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
+          "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=",
+          "dev": true
+        },
+        "estraverse": {
+          "version": "1.3.2",
+          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.3.2.tgz",
+          "integrity": "sha1-N8K4k+8T1yPydth41g2FNRUqbEI=",
+          "dev": true
+        }
+      }
+    },
+    "static-extend": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+      "dev": true,
+      "requires": {
+        "define-property": "^0.2.5",
+        "object-copy": "^0.1.0"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "static-module": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/static-module/-/static-module-1.5.0.tgz",
+      "integrity": "sha1-J9qYg8QajNCSNvhC8MHrxu32PYY=",
+      "dev": true,
+      "requires": {
+        "concat-stream": "~1.6.0",
+        "duplexer2": "~0.0.2",
+        "escodegen": "~1.3.2",
+        "falafel": "^2.1.0",
+        "has": "^1.0.0",
+        "object-inspect": "~0.4.0",
+        "quote-stream": "~0.0.0",
+        "readable-stream": "~1.0.27-1",
+        "shallow-copy": "~0.0.1",
+        "static-eval": "~0.2.0",
+        "through2": "~0.4.1"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+          "dev": true
+        },
+        "through2": {
+          "version": "0.4.2",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz",
+          "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=",
+          "dev": true,
+          "requires": {
+            "readable-stream": "~1.0.17",
+            "xtend": "~2.1.1"
+          }
+        },
+        "xtend": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+          "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
+          "dev": true,
+          "requires": {
+            "object-keys": "~0.4.0"
+          }
+        }
+      }
+    },
+    "statuses": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+      "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+      "dev": true
+    },
+    "stdout-stream": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz",
+      "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=",
+      "dev": true,
+      "requires": {
+        "readable-stream": "^2.0.1"
+      }
+    },
+    "stream-combiner2": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
+      "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
+      "dev": true,
+      "requires": {
+        "duplexer2": "~0.1.0",
+        "readable-stream": "^2.0.2"
+      },
+      "dependencies": {
+        "duplexer2": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+          "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+          "dev": true,
+          "requires": {
+            "readable-stream": "^2.0.2"
+          }
+        }
+      }
+    },
+    "stream-consume": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz",
+      "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==",
+      "dev": true
+    },
+    "stream-shift": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+      "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+      "dev": true
+    },
+    "stream-throttle": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz",
+      "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=",
+      "dev": true,
+      "requires": {
+        "commander": "^2.2.0",
+        "limiter": "^1.0.5"
+      }
+    },
+    "string-width": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+      "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+      "dev": true,
+      "requires": {
+        "code-point-at": "^1.0.0",
+        "is-fullwidth-code-point": "^1.0.0",
+        "strip-ansi": "^3.0.0"
+      }
+    },
+    "string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "stringstream": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz",
+      "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==",
+      "dev": true
+    },
+    "strip-ansi": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+      "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      }
+    },
+    "strip-bom": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+      "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+      "dev": true,
+      "requires": {
+        "is-utf8": "^0.2.0"
+      }
+    },
+    "strip-bom-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz",
+      "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=",
+      "dev": true,
+      "requires": {
+        "first-chunk-stream": "^1.0.0",
+        "strip-bom": "^2.0.0"
+      }
+    },
+    "strip-dirs": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz",
+      "integrity": "sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA=",
+      "dev": true,
+      "requires": {
+        "chalk": "^1.0.0",
+        "get-stdin": "^4.0.1",
+        "is-absolute": "^0.1.5",
+        "is-natural-number": "^2.0.0",
+        "minimist": "^1.1.0",
+        "sum-up": "^1.0.1"
+      },
+      "dependencies": {
+        "is-absolute": {
+          "version": "0.1.7",
+          "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz",
+          "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=",
+          "dev": true,
+          "requires": {
+            "is-relative": "^0.1.0"
+          }
+        },
+        "is-relative": {
+          "version": "0.1.3",
+          "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz",
+          "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=",
+          "dev": true
+        }
+      }
+    },
+    "strip-eof": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+      "dev": true,
+      "optional": true
+    },
+    "strip-indent": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+      "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+      "dev": true,
+      "requires": {
+        "get-stdin": "^4.0.1"
+      }
+    },
+    "strip-json-comments": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+      "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+      "dev": true
+    },
+    "strip-outer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
+      "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
+      "dev": true,
+      "requires": {
+        "escape-string-regexp": "^1.0.2"
+      }
+    },
+    "sum-up": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz",
+      "integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=",
+      "dev": true,
+      "requires": {
+        "chalk": "^1.0.0"
+      }
+    },
+    "supports-color": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+      "dev": true
+    },
+    "svgo": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.0.5.tgz",
+      "integrity": "sha512-nYrifviB77aNKDNKKyuay3M9aYiK6Hv5gJVDdjj2ZXTQmI8WZc8+UPLR5IpVlktJfSu3co/4XcWgrgI6seGBPg==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "coa": "~2.0.1",
+        "colors": "~1.1.2",
+        "css-select": "~1.3.0-rc0",
+        "css-select-base-adapter": "~0.1.0",
+        "css-tree": "1.0.0-alpha25",
+        "css-url-regex": "^1.1.0",
+        "csso": "^3.5.0",
+        "js-yaml": "~3.10.0",
+        "mkdirp": "~0.5.1",
+        "object.values": "^1.0.4",
+        "sax": "~1.2.4",
+        "stable": "~0.1.6",
+        "unquote": "~1.1.1",
+        "util.promisify": "~1.0.0"
+      }
+    },
+    "tar": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
+      "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
+      "dev": true,
+      "requires": {
+        "block-stream": "*",
+        "fstream": "^1.0.2",
+        "inherits": "2"
+      }
+    },
+    "tar-stream": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz",
+      "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==",
+      "dev": true,
+      "requires": {
+        "bl": "^1.0.0",
+        "buffer-alloc": "^1.1.0",
+        "end-of-stream": "^1.0.0",
+        "fs-constants": "^1.0.0",
+        "readable-stream": "^2.3.0",
+        "to-buffer": "^1.1.0",
+        "xtend": "^4.0.0"
+      },
+      "dependencies": {
+        "end-of-stream": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+          "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+          "dev": true,
+          "requires": {
+            "once": "^1.4.0"
+          }
+        },
+        "once": {
+          "version": "1.4.0",
+          "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+          "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+          "dev": true,
+          "requires": {
+            "wrappy": "1"
+          }
+        }
+      }
+    },
+    "temp-dir": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
+      "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=",
+      "dev": true,
+      "optional": true
+    },
+    "tempfile": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz",
+      "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "temp-dir": "^1.0.0",
+        "uuid": "^3.0.1"
+      }
+    },
+    "tfunk": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz",
+      "integrity": "sha1-OORBT8ZJd9h6/apy+sttKfgve1s=",
+      "dev": true,
+      "requires": {
+        "chalk": "^1.1.1",
+        "object-path": "^0.9.0"
+      }
+    },
+    "through": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+      "dev": true
+    },
+    "through2": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+      "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+      "dev": true,
+      "requires": {
+        "readable-stream": "^2.1.5",
+        "xtend": "~4.0.1"
+      }
+    },
+    "through2-concurrent": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/through2-concurrent/-/through2-concurrent-1.1.1.tgz",
+      "integrity": "sha1-EctOpMnjG8puTB5tukjRxyjDUks=",
+      "dev": true,
+      "requires": {
+        "through2": "^2.0.0"
+      }
+    },
+    "through2-filter": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz",
+      "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=",
+      "dev": true,
+      "requires": {
+        "through2": "~2.0.0",
+        "xtend": "~4.0.0"
+      }
+    },
+    "tildify": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz",
+      "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=",
+      "dev": true,
+      "requires": {
+        "os-homedir": "^1.0.0"
+      }
+    },
+    "time-stamp": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
+      "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
+      "dev": true
+    },
+    "timed-out": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz",
+      "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=",
+      "dev": true
+    },
+    "to-absolute-glob": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz",
+      "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^2.0.1"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "to-array": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
+      "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
+      "dev": true
+    },
+    "to-buffer": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
+      "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==",
+      "dev": true
+    },
+    "to-object-path": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+      "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "to-regex": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+      "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+      "dev": true,
+      "requires": {
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "regex-not": "^1.0.2",
+        "safe-regex": "^1.1.0"
+      }
+    },
+    "to-regex-range": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+      "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+      "dev": true,
+      "requires": {
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1"
+      },
+      "dependencies": {
+        "is-number": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          }
+        }
+      }
+    },
+    "tough-cookie": {
+      "version": "2.3.4",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
+      "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
+      "dev": true,
+      "requires": {
+        "punycode": "^1.4.1"
+      }
+    },
+    "trim-newlines": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+      "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+      "dev": true
+    },
+    "trim-repeated": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
+      "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
+      "dev": true,
+      "requires": {
+        "escape-string-regexp": "^1.0.2"
+      }
+    },
+    "true-case-path": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz",
+      "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=",
+      "dev": true,
+      "requires": {
+        "glob": "^6.0.4"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "6.0.4",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+          "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+          "dev": true,
+          "requires": {
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "2 || 3",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        }
+      }
+    },
+    "tunnel-agent": {
+      "version": "0.4.3",
+      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
+      "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
+      "dev": true
+    },
+    "tweetnacl": {
+      "version": "0.14.5",
+      "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+      "dev": true,
+      "optional": true
+    },
+    "typedarray": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+      "dev": true
+    },
+    "ua-parser-js": {
+      "version": "0.7.17",
+      "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz",
+      "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==",
+      "dev": true
+    },
+    "uglify-js": {
+      "version": "2.8.29",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+      "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+      "dev": true,
+      "requires": {
+        "source-map": "~0.5.1",
+        "uglify-to-browserify": "~1.0.0",
+        "yargs": "~3.10.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+          "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+          "dev": true
+        },
+        "cliui": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+          "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+          "dev": true,
+          "requires": {
+            "center-align": "^0.1.1",
+            "right-align": "^0.1.1",
+            "wordwrap": "0.0.2"
+          }
+        },
+        "window-size": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+          "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+          "dev": true
+        },
+        "wordwrap": {
+          "version": "0.0.2",
+          "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+          "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+          "dev": true
+        },
+        "yargs": {
+          "version": "3.10.0",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+          "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+          "dev": true,
+          "requires": {
+            "camelcase": "^1.0.2",
+            "cliui": "^2.1.0",
+            "decamelize": "^1.0.0",
+            "window-size": "0.1.0"
+          }
+        }
+      }
+    },
+    "uglify-to-browserify": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+      "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+      "dev": true,
+      "optional": true
+    },
+    "ultron": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
+      "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
+      "dev": true
+    },
+    "unc-path-regex": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+      "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+      "dev": true
+    },
+    "underscore": {
+      "version": "1.8.3",
+      "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
+      "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
+      "dev": true
+    },
+    "underscore.string": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.0.3.tgz",
+      "integrity": "sha1-Rhe4waJQz25QZPu7Nj0PqWzxRVI=",
+      "dev": true
+    },
+    "union-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+      "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+      "dev": true,
+      "requires": {
+        "arr-union": "^3.1.0",
+        "get-value": "^2.0.6",
+        "is-extendable": "^0.1.1",
+        "set-value": "^0.4.3"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "set-value": {
+          "version": "0.4.3",
+          "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+          "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+          "dev": true,
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-extendable": "^0.1.1",
+            "is-plain-object": "^2.0.1",
+            "to-object-path": "^0.3.0"
+          }
+        }
+      }
+    },
+    "uniq": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+      "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+      "dev": true
+    },
+    "unique-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz",
+      "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=",
+      "dev": true
+    },
+    "universalify": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+      "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+      "dev": true
+    },
+    "unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+      "dev": true
+    },
+    "unquote": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
+      "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
+      "dev": true,
+      "optional": true
+    },
+    "unset-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+      "dev": true,
+      "requires": {
+        "has-value": "^0.3.1",
+        "isobject": "^3.0.0"
+      },
+      "dependencies": {
+        "has-value": {
+          "version": "0.3.1",
+          "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+          "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+          "dev": true,
+          "requires": {
+            "get-value": "^2.0.3",
+            "has-values": "^0.1.4",
+            "isobject": "^2.0.0"
+          },
+          "dependencies": {
+            "isobject": {
+              "version": "2.1.0",
+              "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+              "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+              "dev": true,
+              "requires": {
+                "isarray": "1.0.0"
+              }
+            }
+          }
+        },
+        "has-values": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+          "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+          "dev": true
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+          "dev": true
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+          "dev": true
+        }
+      }
+    },
+    "unzip-response": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz",
+      "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=",
+      "dev": true
+    },
+    "urix": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+      "dev": true
+    },
+    "url": {
+      "version": "0.10.2",
+      "resolved": "https://registry.npmjs.org/url/-/url-0.10.2.tgz",
+      "integrity": "sha1-aGIdaSnqHK00Tr8TXYL89+sadGk=",
+      "dev": true,
+      "requires": {
+        "punycode": "1.3.2"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.3.2",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+          "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+          "dev": true
+        }
+      }
+    },
+    "url-parse-lax": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
+      "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+      "dev": true,
+      "requires": {
+        "prepend-http": "^1.0.1"
+      }
+    },
+    "url-regex": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz",
+      "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "ip-regex": "^1.0.1"
+      }
+    },
+    "url2": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/url2/-/url2-1.0.4.tgz",
+      "integrity": "sha1-3yKErhXHSbqAl1FRDl4l2p67gNg=",
+      "dev": true,
+      "requires": {
+        "url": "0.10.2"
+      }
+    },
+    "use": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+      "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+      "dev": true
+    },
+    "user-home": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+      "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
+      "dev": true
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+      "dev": true
+    },
+    "util.promisify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
+      "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "define-properties": "^1.1.2",
+        "object.getownpropertydescriptors": "^2.0.3"
+      }
+    },
+    "utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+      "dev": true
+    },
+    "uuid": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+      "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+      "dev": true
+    },
+    "v8flags": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+      "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
+      "dev": true,
+      "requires": {
+        "user-home": "^1.1.1"
+      }
+    },
+    "vali-date": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz",
+      "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=",
+      "dev": true
+    },
+    "validate-npm-package-license": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
+      "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
+      "dev": true,
+      "requires": {
+        "spdx-correct": "^3.0.0",
+        "spdx-expression-parse": "^3.0.0"
+      }
+    },
+    "verror": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+      "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "core-util-is": "1.0.2",
+        "extsprintf": "^1.2.0"
+      },
+      "dependencies": {
+        "assert-plus": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+          "dev": true
+        }
+      }
+    },
+    "vinyl": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
+      "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
+      "dev": true,
+      "requires": {
+        "clone": "^1.0.0",
+        "clone-stats": "^0.0.1",
+        "replace-ext": "0.0.1"
+      }
+    },
+    "vinyl-assign": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/vinyl-assign/-/vinyl-assign-1.2.1.tgz",
+      "integrity": "sha1-TRmIkbVRWRHXcajNnFSApGoHSkU=",
+      "dev": true,
+      "requires": {
+        "object-assign": "^4.0.1",
+        "readable-stream": "^2.0.0"
+      }
+    },
+    "vinyl-buffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/vinyl-buffer/-/vinyl-buffer-1.0.1.tgz",
+      "integrity": "sha1-lsGjR5uMU5JULGEgKQE7Wyf4i78=",
+      "dev": true,
+      "requires": {
+        "bl": "^1.2.1",
+        "through2": "^2.0.3"
+      }
+    },
+    "vinyl-file": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-1.3.0.tgz",
+      "integrity": "sha1-qgVjTTqGe6kUR77bs0r8sm9E9uc=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "strip-bom": "^2.0.0",
+        "strip-bom-stream": "^1.0.0",
+        "vinyl": "^1.1.0"
+      },
+      "dependencies": {
+        "vinyl": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
+          "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
+          "dev": true,
+          "requires": {
+            "clone": "^1.0.0",
+            "clone-stats": "^0.0.1",
+            "replace-ext": "0.0.1"
+          }
+        }
+      }
+    },
+    "vinyl-fs": {
+      "version": "0.3.14",
+      "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz",
+      "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=",
+      "dev": true,
+      "requires": {
+        "defaults": "^1.0.0",
+        "glob-stream": "^3.1.5",
+        "glob-watcher": "^0.0.6",
+        "graceful-fs": "^3.0.0",
+        "mkdirp": "^0.5.0",
+        "strip-bom": "^1.0.0",
+        "through2": "^0.6.1",
+        "vinyl": "^0.4.0"
+      },
+      "dependencies": {
+        "clone": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+          "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+          "dev": true
+        },
+        "graceful-fs": {
+          "version": "3.0.11",
+          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
+          "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
+          "dev": true,
+          "requires": {
+            "natives": "^1.1.0"
+          }
+        },
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+          "dev": true
+        },
+        "strip-bom": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz",
+          "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=",
+          "dev": true,
+          "requires": {
+            "first-chunk-stream": "^1.0.0",
+            "is-utf8": "^0.2.0"
+          }
+        },
+        "through2": {
+          "version": "0.6.5",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+          "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+          "dev": true,
+          "requires": {
+            "readable-stream": ">=1.0.33-1 <1.1.0-0",
+            "xtend": ">=4.0.0 <4.1.0-0"
+          }
+        },
+        "vinyl": {
+          "version": "0.4.6",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+          "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+          "dev": true,
+          "requires": {
+            "clone": "^0.2.0",
+            "clone-stats": "^0.0.1"
+          }
+        }
+      }
+    },
+    "vinyl-sourcemaps-apply": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+      "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
+      "dev": true,
+      "requires": {
+        "source-map": "^0.5.1"
+      }
+    },
+    "ware": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz",
+      "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=",
+      "dev": true,
+      "requires": {
+        "wrap-fn": "^0.1.0"
+      }
+    },
+    "which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "dev": true,
+      "requires": {
+        "isexe": "^2.0.0"
+      }
+    },
+    "which-module": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+      "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
+      "dev": true
+    },
+    "wide-align": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+      "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+      "dev": true,
+      "requires": {
+        "string-width": "^1.0.2 || 2"
+      }
+    },
+    "window-size": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz",
+      "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=",
+      "dev": true
+    },
+    "wordwrap": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+      "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+      "dev": true
+    },
+    "wrap-ansi": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+      "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+      "dev": true,
+      "requires": {
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1"
+      }
+    },
+    "wrap-fn": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz",
+      "integrity": "sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=",
+      "dev": true,
+      "requires": {
+        "co": "3.1.0"
+      }
+    },
+    "wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+      "dev": true
+    },
+    "ws": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
+      "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
+      "dev": true,
+      "requires": {
+        "async-limiter": "~1.0.0",
+        "safe-buffer": "~5.1.0",
+        "ultron": "~1.1.0"
+      }
+    },
+    "xmlhttprequest-ssl": {
+      "version": "1.5.5",
+      "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
+      "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=",
+      "dev": true
+    },
+    "xtend": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+      "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+      "dev": true
+    },
+    "y18n": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+      "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+      "dev": true
+    },
+    "yallist": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+      "dev": true
+    },
+    "yargs": {
+      "version": "6.4.0",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz",
+      "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=",
+      "dev": true,
+      "requires": {
+        "camelcase": "^3.0.0",
+        "cliui": "^3.2.0",
+        "decamelize": "^1.1.1",
+        "get-caller-file": "^1.0.1",
+        "os-locale": "^1.4.0",
+        "read-pkg-up": "^1.0.1",
+        "require-directory": "^2.1.1",
+        "require-main-filename": "^1.0.1",
+        "set-blocking": "^2.0.0",
+        "string-width": "^1.0.2",
+        "which-module": "^1.0.0",
+        "window-size": "^0.2.0",
+        "y18n": "^3.2.1",
+        "yargs-parser": "^4.1.0"
+      }
+    },
+    "yargs-parser": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz",
+      "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
+      "dev": true,
+      "requires": {
+        "camelcase": "^3.0.0"
+      }
+    },
+    "yauzl": {
+      "version": "2.10.0",
+      "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+      "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
+      "dev": true,
+      "requires": {
+        "buffer-crc32": "~0.2.3",
+        "fd-slicer": "~1.1.0"
+      }
+    },
+    "yeast": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
+      "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
+      "dev": true
+    }
+  }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/package.json b/wp-content/plugins/woocommerce-chronopost/package.json
new file mode 100755 (executable)
index 0000000..7cfa2af
--- /dev/null
@@ -0,0 +1,23 @@
+{
+  "name": "Gulp",
+  "version": "1.0.0",
+  "description": "Gulp packages",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "author": "Adexos <contact@adexos.fr> (https://www.adexos.fr/)",
+  "license": "WTFPL",
+  "devDependencies": {
+    "browser-sync": "latest",
+    "gulp": "latest",
+    "gulp-autoprefixer": "latest",
+    "gulp-combine-media-queries": "latest",
+    "gulp-cache": "latest",
+    "gulp-cleancss": "latest",
+    "gulp-imagemin": "latest",
+    "gulp-sass": "latest",
+    "gulp.spritesmith": "latest",
+    "vinyl-buffer": "latest"
+  }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/public/class-chronopost-public.php b/wp-content/plugins/woocommerce-chronopost/public/class-chronopost-public.php
new file mode 100755 (executable)
index 0000000..d15fc46
--- /dev/null
@@ -0,0 +1,157 @@
+<?php
+
+/**
+ * The public-facing functionality of the plugin.
+ *
+ * @link       https://www.adexos.fr
+ * @since      1.0.0
+ *
+ * @package    Chronopost
+ * @subpackage Chronopost/public
+ */
+
+/**
+ * The public-facing functionality of the plugin.
+ *
+ * Defines the plugin name, version, and two examples hooks for how to
+ * enqueue the admin-specific stylesheet and JavaScript.
+ *
+ * @package    Chronopost
+ * @subpackage Chronopost/public
+ * @author     Adexos <contact@adexos.fr>
+ */
+class Chronopost_Public {
+
+       /**
+        * The ID of this plugin.
+        *
+        * @since    1.0.0
+        * @access   private
+        * @var      string    $plugin_name    The ID of this plugin.
+        */
+       private $plugin_name;
+
+       /**
+        * The version of this plugin.
+        *
+        * @since    1.0.0
+        * @access   private
+        * @var      string    $version    The current version of this plugin.
+        */
+       private $version;
+
+       /**
+        * Initialize the class and set its properties.
+        *
+        * @since    1.0.0
+        * @param      string    $plugin_name       The name of the plugin.
+        * @param      string    $version    The version of this plugin.
+        */
+       public function __construct( $plugin_name, $version ) {
+
+               $this->plugin_name = $plugin_name;
+               $this->version = $version;
+
+       }
+
+       /**
+        * Register the stylesheets for the public-facing side of the site.
+        *
+        * @since    1.0.0
+        */
+       public function enqueue_styles() {
+
+               /**
+                * This function is provided for demonstration purposes only.
+                *
+                * An instance of this class should be passed to the run() function
+                * defined in Chronopost_Loader as all of the hooks are defined
+                * in that particular class.
+                *
+                * The Chronopost_Loader will then create the relationship
+                * between the defined hooks and the functions defined in this
+                * class.
+                */
+
+               wp_enqueue_style( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'css/chronopost-public.css', array(), $this->version, 'all' );
+
+       }
+
+       /**
+        * Register the JavaScript for the public-facing side of the site.
+        *
+        * @since    1.0.0
+        */
+       public function enqueue_scripts() {
+
+               /**
+                * This function is provided for demonstration purposes only.
+                *
+                * An instance of this class should be passed to the run() function
+                * defined in Chronopost_Loader as all of the hooks are defined
+                * in that particular class.
+                *
+                * The Chronopost_Loader will then create the relationship
+                * between the defined hooks and the functions defined in this
+                * class.
+                */
+
+               wp_register_script('chronopost-gmap', 'https://maps.googleapis.com/maps/api/js?key='.chrono_get_option('api_key', 'gmap'), array(), '2.0');
+               wp_enqueue_script('chronopost-gmap');
+
+               wp_register_script('chronopost-fancybox', CHRONO_PLUGIN_URL . 'public/vendor/fancybox/jquery.fancybox.min.js', array( 'jquery', 'woocommerce' ), '3.1.20');
+               wp_enqueue_script('chronopost-fancybox');
+
+               wp_enqueue_style('chronopost-fancybox', CHRONO_PLUGIN_URL . 'public/vendor/fancybox/jquery.fancybox.min.css');
+
+               wp_enqueue_script( 'chronomap', plugin_dir_url( __FILE__ ) . 'js/chronomap.plugin.js', array( 'jquery', 'woocommerce', 'chronopost-fancybox', 'chronopost-gmap' ), $this->version, false );
+
+               wp_localize_script(
+                       'chronomap',
+                       'Chronomap',
+                       $this->get_localized_script('chronomap')
+               );
+
+               wp_enqueue_script( 'chronoprecise', plugin_dir_url( __FILE__ ) . 'js/chronoprecise.plugin.js', array( 'jquery', 'woocommerce', 'chronopost-fancybox' ), $this->version, false );
+
+               wp_localize_script(
+                       'chronoprecise',
+                       'Chronoprecise',
+                       array(
+                               'ajaxurl' => admin_url( 'admin-ajax.php' ),
+                               'chrono_nonce' => wp_create_nonce( 'chronopost_ajax' ),
+                               'prev_week_txt' => __('Prev week', 'chronopost'),
+                               'next_week_txt' => __('Next week', 'chronopost'),
+                       )
+               );
+               
+               wp_enqueue_script( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'js/chronopost-public.js', array( 'jquery', 'woocommerce', 'chronopost-gmap', 'chronomap', 'chronoprecise' ), $this->version, false );
+
+       }
+
+       public function get_localized_script($handle)
+       {
+               if ($handle === 'chronomap') {
+                       $localized_strings = array(
+                               'ajaxurl' => admin_url( 'admin-ajax.php' ),
+                               'chrono_nonce' => wp_create_nonce( 'chronopost_ajax' ),
+                               'no_pickup_relay' => __('Select a pickup relay', 'chronopost'),
+                               'pickup_relay_edit_text' => __('Edit', 'chronopost'),
+                               'loading_txt' => __('Loading, please wait&hellip;', 'chronopost'),
+                               'day_mon' => __('Mon', 'chronopost'),
+                               'day_tue' => __('Tue', 'chronopost'),
+                               'day_wed' => __('Wed', 'chronopost'),
+                               'day_thu' => __('Thu', 'chronopost'),
+                               'day_fri' => __('Fri', 'chronopost'),
+                               'day_sat' => __('Sat', 'chronopost'),
+                               'day_sun' => __('Sun', 'chronopost'),
+                               'infos' => __('Infos', 'chronopost'),
+                               'opening_hours' => __('Opening hours', 'chronopost'),
+                               'closed' => __('Closed', 'chronopost'),
+                       );
+               }
+
+               return $localized_strings;
+       }
+
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/public/css/chronopost-public.css b/wp-content/plugins/woocommerce-chronopost/public/css/chronopost-public.css
new file mode 100755 (executable)
index 0000000..5ded17b
--- /dev/null
@@ -0,0 +1 @@
+#shipping_method li label[for*='_chrono']{position:relative}#shipping_method li label[for*='_chrono']:before{content:"";display:inline-block;position:relative;top:6px;vertical-align:baseline;background:url(../img/chronopost-horizontal.png) center center/contain no-repeat;width:99px;height:22px;margin-right:7px}#shipping_method li input[type=radio]:first-child+label+.appointment-link,#shipping_method li input[type=radio]:first-child+label+.pickup-relay-link{display:none}#shipping_method li input[type=radio]:first-child:checked+label+.appointment-link,#shipping_method li input[type=radio]:first-child:checked+label+.pickup-relay-link{display:block}.chronomap-text-loading{color:#666}@-webkit-keyframes spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}#container-method-chronorelay{height:100vh;margin-top:0;margin-bottom:0;max-height:768px;padding:10px;display:none}#container-method-chronorelay table.sw-table{table-layout:fixed;border-collapse:collapse;width:100%}#container-method-chronorelay table.sw-table tbody tr:nth-child(2n) td{background-color:transparent}#container-method-chronorelay table.sw-table tbody td{padding:2px;margin:0 10px 0 0;display:inline-block;background-color:transparent}#container-method-chronorelay table.sw-table tbody td:first-child{width:35px;font-weight:700}#container-method-chronorelay .marker-wrapper{max-width:430px}#container-method-chronorelay .marker-title{padding:5px 0;font-weight:700}#container-method-chronorelay .pickup-relay-title{margin-bottom:7px;font-weight:700}#container-method-chronorelay .hours-section{margin-left:7px;padding-left:7px;float:left;width:calc(100% - 177px)}#container-method-chronorelay .info-section{float:left;width:170px}#container-method-chronorelay .button{border:0;background:#43454b;border-color:#43454b;color:#fff;cursor:pointer;padding:10px;text-decoration:none;font-weight:600;text-shadow:none;display:inline-block;outline:0;-webkit-appearance:none;-webkit-font-smoothing:antialiased;border-radius:0}#container-method-chronorelay .button:hover{background-color:#d5d5d5;border-color:#d5d5d5;color:#333}@media (min-width:480px){#container-method-chronorelay .button{padding:10px 22px}}#container-method-chronorelay button.fancybox-close-small:hover{background-color:transparent}#container-method-chronorelay h3{margin:0 0 10px;padding:0;line-height:24px;font-size:20px;font-weight:700}#container-method-chronorelay .mappostalcode{margin-bottom:25px;padding:8px 0}#container-method-chronorelay .sp-methods-chronorelais{height:200px;overflow:auto;box-shadow:inset 0 -10px 20px #f8f8f8}#container-method-chronorelay .pickup-relays{list-style:none}#container-method-chronorelay .pickup-relays li{line-height:25px;padding:0;margin:0}#container-method-chronorelay .pickup-relays li:nth-child(odd) label{background-color:#f8f8f8}#container-method-chronorelay .pickup-relays li input[type=radio]:first-child{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:absolute!important}#container-method-chronorelay .pickup-relays li label{position:relative;padding:5px 5px 5px 30px}#container-method-chronorelay .pickup-relays li label:before{content:"";position:absolute;left:5px;top:10px;-webkit-transition:border-color,ease,.2s;transition:border-color,ease,.2s;border:2px solid #6d6d6d;width:11px;height:11px;border-radius:50%}#container-method-chronorelay .pickup-relays li input[type=radio]:first-child:checked+label{background:#f0f0f0}#container-method-chronorelay .pickup-relays li input[type=radio]:first-child:checked+label:after{content:"";position:absolute;top:15px;left:10px;background:#6d6d6d;height:5px;width:5px;border-radius:50%;-webkit-transition:-webkit-transform .3s cubic-bezier(0,0,.2,1);transition:-webkit-transform .3s cubic-bezier(0,0,.2,1);transition:transform .3s cubic-bezier(0,0,.2,1);transition:transform .3s cubic-bezier(0,0,.2,1),-webkit-transform .3s cubic-bezier(0,0,.2,1)}#container-method-chronorelay .pickup-relays li input[type=radio]:first-child:hover+label:before{border-color:#000}#container-method-chronorelay .pickup-relays li input[type=radio]:first-child:hover+label:after{background-color:#000}#container-method-chronorelay .pickup-relays li input[type=radio]:first-child:active+label:after{-webkit-transform:scale(1.5);-ms-transform:scale(1.5);transform:scale(1.5);-webkit-transition:-webkit-transform .3s cubic-bezier(0,0,.2,1);transition:-webkit-transform .3s cubic-bezier(0,0,.2,1);transition:transform .3s cubic-bezier(0,0,.2,1);transition:transform .3s cubic-bezier(0,0,.2,1),-webkit-transform .3s cubic-bezier(0,0,.2,1)}#container-method-chronorelay .postcode-input{float:left;margin-right:10px}#container-method-chronorelay .postcode-input input{max-width:80px}#container-method-chronorelay p.chronorelais-explain{margin:0 0 10px;padding:0;line-height:25px;font-size:16px}#container-method-chronorelay .pickup-relays{margin:0}#container-method-chronorelay .button-center{text-align:center;padding:10px}@media (min-width:768px){#container-method-chronorelay{width:calc(100vw - 80px);max-width:1024px;height:calc(100% - 88px);margin-top:44px;margin-bottom:44px;padding:24px}#container-method-chronorelay .wrapper-methods-chronorelais{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;height:calc(100% - 200px);position:relative}#container-method-chronorelay .wrapper-methods-chronorelais::before{height:1em;width:1em;display:block;position:absolute;top:50%;left:50%;margin-left:-.5em;margin-top:-.5em;content:'';-webkit-animation:spin 1s ease-in-out infinite;animation:spin 1s ease-in-out infinite;background:url(../img/loader.svg) center center/cover;line-height:1;text-align:center;font-size:2em;color:rgba(0,0,0,.75);z-index:-1;opacity:0;-webkit-transition:opacity .5s ease-in,z-index 0s linear .5s;transition:opacity .5s ease-in,z-index 0s linear .5s}#container-method-chronorelay .wrapper-methods-chronorelais .sp-methods-chronorelais.pickup-relay-selected{height:calc(100% - 65px)}#container-method-chronorelay .wrapper-methods-chronorelais .sp-methods-chronorelais.pickup-relay-selected+.button-center{display:block}#container-method-chronorelay .wrapper-methods-chronorelais .button-center{text-align:center;position:absolute;bottom:0;left:0;right:auto;width:30%;background:#fff;display:none}#container-method-chronorelay .wrapper-methods-chronorelais .button-center .button{width:100%}#container-method-chronorelay .wrapper-methods-chronorelais:after{content:"";background:rgba(255,255,255,.7);position:absolute;top:0;bottom:0;left:0;right:0;z-index:-1;opacity:0;-webkit-transition:opacity .5s ease-in;transition:opacity .5s ease-in}#container-method-chronorelay .wrapper-methods-chronorelais.chronopost-loading:before{z-index:6;opacity:.6;-webkit-transition:opacity .5s ease-in;transition:opacity .5s ease-in}#container-method-chronorelay .wrapper-methods-chronorelais.chronopost-loading:after{content:"";opacity:1;z-index:5}#container-method-chronorelay .wrapper-methods-chronorelais .sp-methods-chronorelais{width:30%;margin-right:10px;height:100%;overflow:auto}#container-method-chronorelay .wrapper-methods-chronorelais .sp-methods-chronorelais ul{list-style:none;margin:0;padding:0}}#chronomap,.chronorelaismap{height:100%;width:100%;min-height:300px}.chronorelaismap{margin-top:10px}@media (min-width:768px){.chronorelaismap{margin-top:0;width:calc(70% - 10px)}}#container-method-chronoprecise{display:none}#container-method-chronoprecise .button-center{position:absolute;bottom:0;left:0;right:0;display:none}#container-method-chronoprecise .button-center .button{width:100%}#container-method-chronoprecise.slot-selected .button-center{display:block}@media (max-width:739px){#container-method-chronoprecise{height:100vh;max-width:100vw;margin:0}}#container-method-chronoprecise .rdvCarouselheader{margin:0 auto 10px}#container-method-chronoprecise .rdvCarouselheader .carousel-control{color:#8f9091;font-weight:700}#container-method-chronoprecise .rdvCarouselheader .carousel-control:not(:first-child){margin-left:10px}#container-method-chronoprecise .rdvCarouselheader .carousel-control.inactive{opacity:.5}#container-method-chronoprecise .global-mobile{width:100%;height:100%;max-width:640px;margin:0 auto 20px;position:relative;padding-bottom:70px}@media (min-width:740px){#container-method-chronoprecise .global-mobile{display:none}}#container-method-chronoprecise .global-mobile .header{width:auto}#container-method-chronoprecise .global-mobile h1{font-size:16px;font-weight:400;margin-bottom:10px;text-align:left}#container-method-chronoprecise .global-mobile .left{float:left}#container-method-chronoprecise .global-mobile .right{float:right}#container-method-chronoprecise .global-mobile .scroll{width:100%;overflow-y:hidden;overflow-x:auto}#container-method-chronoprecise .global-mobile .scroll-v{overflow-y:auto;overflow-x:hidden;max-height:calc(100vh - 270px);margin-bottom:20px;border-bottom:solid 1px #f3f3f3}#container-method-chronoprecise .global-mobile .date-time{min-width:100%;border-collapse:collapse;margin-bottom:0}#container-method-chronoprecise .global-mobile .date-time th{padding:10px 5px;text-align:center;min-width:80px;line-height:1.1}#container-method-chronoprecise .global-mobile .date-row th{color:#fff;background-color:#8f9091;font-weight:400;border-left:solid 1px #fff;border-bottom:solid 1px #fff}#container-method-chronoprecise .global-mobile .date-row th:first-child{border-left:0}#container-method-chronoprecise .global-mobile .date-row th span{font-size:2.14em;display:block}#container-method-chronoprecise .global-mobile .time-list{border-left:solid 1px #f3f3f3;border-right:solid 1px #f3f3f3;position:relative}#container-method-chronoprecise .global-mobile .time-list ul{padding:0;margin:0}#container-method-chronoprecise .global-mobile .time-list li{display:table;width:100%;border-bottom:solid 1px #f3f3f3;font-size:16px}#container-method-chronoprecise .global-mobile .time-list li:last-child{border-bottom:none}#container-method-chronoprecise .global-mobile .time-list li:nth-child(odd){background-color:#fafafa}#container-method-chronoprecise .global-mobile .time-list li label{display:table-row!important;color:inherit!important;background:inherit!important}#container-method-chronoprecise .global-mobile .time-list li.unavailable{background-color:#e6e6e7}#container-method-chronoprecise .global-mobile .time-list li.unavailable .price-cell{font-size:.6em}#container-method-chronoprecise .global-mobile .date-row th.active,#container-method-chronoprecise .global-mobile .time-list li.active{background-color:#797979!important;color:#fff!important}#container-method-chronoprecise .global-mobile .eco{background-color:#e2f0e0}#container-method-chronoprecise .global-mobile .time-cell{display:table-cell;width:30%;white-space:nowrap;padding:20px}#container-method-chronoprecise .global-mobile .price-cell{display:table-cell;white-space:nowrap;padding:20px 60px 20px 20px;width:70%;text-align:right}#container-method-chronoprecise .global-mobile .ic-eco{position:absolute;margin-left:10px}#container-method-chronoprecise .global-mobile input{font-size:18px;padding:4px 30px;border:0;border-radius:4px;cursor:pointer}#container-method-chronoprecise .global-desktop{display:none}#container-method-chronoprecise .global-desktop nav{margin-top:-15px}#container-method-chronoprecise .global-desktop .button-center{text-align:center;position:static;margin:-7px 0}#container-method-chronoprecise .global-desktop .button-center .button{width:auto}#container-method-chronoprecise .global-desktop table td,#container-method-chronoprecise .global-desktop table th{padding:8px 5px}#container-method-chronoprecise .global-desktop table td.time-cell,#container-method-chronoprecise .global-desktop table th.time-cell{width:100px}#container-method-chronoprecise .global-desktop table td.active,#container-method-chronoprecise .global-desktop table th.active{background-color:#d5d5d5}#container-method-chronoprecise .global-desktop table td.incentive-flag,#container-method-chronoprecise .global-desktop table th.incentive-flag{background-color:#e2f0e0}#container-method-chronoprecise .global-desktop table td.incentive-flag:after,#container-method-chronoprecise .global-desktop table th.incentive-flag:after{content:"";display:inline-block;margin-left:5px;background:url(../img/eco.png) 0 0/cover no-repeat;width:38.24px;height:11.18px;vertical-align:middle}#container-method-chronoprecise .global-desktop .date-time td span{white-space:nowrap}#container-method-chronoprecise .global-desktop .woocommerce-Price-amount{font-weight:700;font-size:.85em}#container-method-chronoprecise .global-desktop .date-row th,#container-method-chronoprecise .global-desktop .time-cell{background-color:#8f9091;font-weight:400;color:#fff;border-bottom:solid 1px #fff;white-space:nowrap;text-align:center;line-height:1.1;vertical-align:middle}#container-method-chronoprecise .global-desktop .time-cell{font-size:1.1em}#container-method-chronoprecise .global-desktop .date-row th span{font-size:1.8em;display:block}@media (min-width:740px){#container-method-chronoprecise .global-desktop{display:block}}#container-method-chronoprecise .global-desktop table{table-layout:fixed;min-width:640px;max-width:960px}#container-method-chronoprecise #rdvCarouselContent .slide{display:none}#container-method-chronoprecise #rdvCarouselContent .slide.slide-active{display:block}
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/public/img/Logo-Chronopost.jpg b/wp-content/plugins/woocommerce-chronopost/public/img/Logo-Chronopost.jpg
new file mode 100755 (executable)
index 0000000..1728757
Binary files /dev/null and b/wp-content/plugins/woocommerce-chronopost/public/img/Logo-Chronopost.jpg differ
diff --git a/wp-content/plugins/woocommerce-chronopost/public/img/Picto_Chrono_Relais.png b/wp-content/plugins/woocommerce-chronopost/public/img/Picto_Chrono_Relais.png
new file mode 100755 (executable)
index 0000000..964ca13
Binary files /dev/null and b/wp-content/plugins/woocommerce-chronopost/public/img/Picto_Chrono_Relais.png differ
diff --git a/wp-content/plugins/woocommerce-chronopost/public/img/ac.png b/wp-content/plugins/woocommerce-chronopost/public/img/ac.png
new file mode 100755 (executable)
index 0000000..9703be9
Binary files /dev/null and b/wp-content/plugins/woocommerce-chronopost/public/img/ac.png differ
diff --git a/wp-content/plugins/woocommerce-chronopost/public/img/arrows.png b/wp-content/plugins/woocommerce-chronopost/public/img/arrows.png
new file mode 100755 (executable)
index 0000000..9aba91e
Binary files /dev/null and b/wp-content/plugins/woocommerce-chronopost/public/img/arrows.png differ
diff --git a/wp-content/plugins/woocommerce-chronopost/public/img/chronopost-horizontal.png b/wp-content/plugins/woocommerce-chronopost/public/img/chronopost-horizontal.png
new file mode 100755 (executable)
index 0000000..f3d767b
Binary files /dev/null and b/wp-content/plugins/woocommerce-chronopost/public/img/chronopost-horizontal.png differ
diff --git a/wp-content/plugins/woocommerce-chronopost/public/img/chronopost.png b/wp-content/plugins/woocommerce-chronopost/public/img/chronopost.png
new file mode 100755 (executable)
index 0000000..4f808b5
Binary files /dev/null and b/wp-content/plugins/woocommerce-chronopost/public/img/chronopost.png differ
diff --git a/wp-content/plugins/woocommerce-chronopost/public/img/chronorelais.png b/wp-content/plugins/woocommerce-chronopost/public/img/chronorelais.png
new file mode 100755 (executable)
index 0000000..15fe07d
Binary files /dev/null and b/wp-content/plugins/woocommerce-chronopost/public/img/chronorelais.png differ
diff --git a/wp-content/plugins/woocommerce-chronopost/public/img/close.gif b/wp-content/plugins/woocommerce-chronopost/public/img/close.gif
new file mode 100755 (executable)
index 0000000..18aced2
Binary files /dev/null and b/wp-content/plugins/woocommerce-chronopost/public/img/close.gif differ
diff --git a/wp-content/plugins/woocommerce-chronopost/public/img/eco.png b/wp-content/plugins/woocommerce-chronopost/public/img/eco.png
new file mode 100755 (executable)
index 0000000..b8bfb12
Binary files /dev/null and b/wp-content/plugins/woocommerce-chronopost/public/img/eco.png differ
diff --git a/wp-content/plugins/woocommerce-chronopost/public/img/home.png b/wp-content/plugins/woocommerce-chronopost/public/img/home.png
new file mode 100755 (executable)
index 0000000..d90ad9f
Binary files /dev/null and b/wp-content/plugins/woocommerce-chronopost/public/img/home.png differ
diff --git a/wp-content/plugins/woocommerce-chronopost/public/img/ico_ac_shaded.gif b/wp-content/plugins/woocommerce-chronopost/public/img/ico_ac_shaded.gif
new file mode 100755 (executable)
index 0000000..469f6c2
Binary files /dev/null and b/wp-content/plugins/woocommerce-chronopost/public/img/ico_ac_shaded.gif differ
diff --git a/wp-content/plugins/woocommerce-chronopost/public/img/loader.svg b/wp-content/plugins/woocommerce-chronopost/public/img/loader.svg
new file mode 100755 (executable)
index 0000000..4107219
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+        viewBox="0 0 91.3 91.1" enable-background="new 0 0 91.3 91.1" xml:space="preserve">\r
+<circle cx="45.7" cy="45.7" r="45.7"/>\r
+<circle fill="#FFFFFF" cx="45.7" cy="24.4" r="12.5"/>\r
+</svg>\r
diff --git a/wp-content/plugins/woocommerce-chronopost/public/index.php b/wp-content/plugins/woocommerce-chronopost/public/index.php
new file mode 100755 (executable)
index 0000000..e71af0e
--- /dev/null
@@ -0,0 +1 @@
+<?php // Silence is golden
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/public/js/chronomap.plugin.js b/wp-content/plugins/woocommerce-chronopost/public/js/chronomap.plugin.js
new file mode 100755 (executable)
index 0000000..d42e9fd
--- /dev/null
@@ -0,0 +1,513 @@
+var console = console || {
+    "log": function(stuff) {}
+};
+
+(function( $ ) {
+    'use strict';
+
+    if (typeof $.fancybox != 'undefined') {
+        $.fancybox.defaults.touch = false;
+    }
+
+    $.chronomap = function(element, options) {
+
+        var defaults = {
+            idMap: 'map',
+            mapOptions: {
+                zoom: 8,
+                center: new google.maps.LatLng(47.37285025362682, 2.4172996312499784),
+                mapTypeId: google.maps.MapTypeId.ROADMAP,
+                panControl: false,
+                rotateControl: true,
+                scaleControl: true,
+                zoomControl: true
+            },
+            methodID: 'chronorelais',
+            pickupRelayIcon: false,
+            homeIcon: false,
+            pickupRelays: [],
+            postcodeInputSelector: '.mappostalcode',
+            postcodeButtonSelector: '#mappostalcodebtn',
+            activateGmap: true,
+            canModifyPostcode: true,
+            pickupRelayListContainerSelector: '.pickup-relays',
+            pickupRelayListHtml: '<li class="form-row validate-required"><input name="shipping_method_chronorelais" type="radio" value="%identifiantChronopostPointA2PAS%" id="s_method_chronorelais_%identifiantChronopostPointA2PAS%" class="radio"><label for="s_method_chronorelais_%identifiantChronopostPointA2PAS%">%nomEnseigne% - %adresse1% - %codePostal% - %localite%</label></li>',
+            noPickupRelayHtml: '<a href="javascript:;">%no_pickup_relay%</a>',
+            currentPickupRelayHtml: '<span class="pickup-relay-selected">%pickup_relay_name%</span> <a href="javascript:;">%pickup_relay_edit_text%</a>'
+        }
+
+        var plugin = this;
+
+        plugin.settings = {}
+
+        var $element = $(element),
+            element = element;
+
+        plugin.init = function() {
+            plugin.settings = $.extend({}, defaults, options);
+            plugin.current_chronorelais_method =  jQuery('#order_review input[value^="chronorelais"]').val();
+            plugin.currentAddress = plugin.getShipAddress();
+
+            $('#container-method-chronorelay').addClass('map-need-to-reload');
+
+            if ($('.chronorelaismap').data('chronomap-options')) {
+                plugin.settings = $.extend({}, plugin.settings, $('.chronorelaismap').data('chronomap-options'));
+            }
+            //plugin.loadMap();
+            plugin.initEvents();
+        }
+
+        plugin.initEvents = function() {
+            
+            $(document.body).on('click', '.pickup-relay-link a', function() {
+                $.fancybox.open({
+                    src  : '#container-method-chronorelay',
+                    type : 'inline',
+                    // Clicked on the slide
+                    clickSlide : false,
+                    // Clicked on the background (backdrop) element
+                    touch: false,
+                    opts : {
+                        afterShow : function( instance, current ) {
+                            if ($('#container-method-chronorelay').hasClass('map-need-to-reload')) {
+                                plugin.loadMap();
+                                plugin.updatePickupRelay();
+                                $('#container-method-chronorelay').removeClass('map-need-to-reload')
+                            }
+                            google.maps.event.trigger(plugin.map, "resize");
+                            plugin.map.setCenter(plugin.map.bounds.getCenter());
+                            plugin.map.fitBounds(plugin.map.bounds);
+                            setTimeout(function() {
+                                google.maps.event.trigger(plugin.map, "resize");
+                                plugin.map.setCenter(plugin.map.bounds.getCenter());
+                                plugin.map.fitBounds(plugin.map.bounds);
+                            }, 100);
+                        }
+                    }
+                });
+            });
+
+            $( document.body ).on( 'updated_checkout', function() {
+                plugin.current_postcode = $('#mappostalcode').val();
+                plugin.current_shipping_method = $('input[name="shipping_method[0]"]:checked').val();
+                if (plugin.getShipAddress() != plugin.currentAddress) {
+                    $('#container-method-chronorelay .wrapper-methods-chronorelais .pickup-relays').html('');
+                    plugin.current_chronorelais_method =  jQuery('#order_review input[value^="chronorelais"]').val();
+                    plugin.currentAddress = plugin.getShipAddress();
+                    $('#container-method-chronorelay').addClass('map-need-to-reload');
+                }
+            });
+        }
+
+        plugin.loadMap = function() {
+            console.log('chargement du point de domicile');
+            if (plugin.settings.activateGmap && $element.find('#'+plugin.settings.idMap).length) {
+                plugin.markers = [];
+                plugin.relayIcon = new google.maps.MarkerImage(plugin.settings.pickupRelayIcon);
+                plugin.homeIcon = new google.maps.MarkerImage(plugin.settings.homeIcon);
+
+                plugin.map = new google.maps.Map(document.getElementById(plugin.settings.idMap), plugin.settings.mapOptions);
+                
+                plugin.map.bounds = new google.maps.LatLngBounds();
+
+                var ship_address = plugin.getShipAddress(); //get shipping address to set home address
+
+                var geo = new google.maps.Geocoder();
+          
+                geo.geocode({'address': ship_address}, function(results, status) {
+                  if (status == google.maps.GeocoderStatus.OK) {
+                    var point = results[0].geometry.location;
+                    plugin.mapCenter = point;
+                    var marker = new google.maps.Marker({
+                      position: point,
+                      map: plugin.map,
+                      title: 'home',
+                      icon: plugin.homeIcon
+                    });
+                    plugin.markers.push(marker);
+                    plugin.map.bounds.extend(point);
+                    plugin.map.fitBounds(plugin.map.bounds);
+                    plugin.map.setCenter(point, 11);
+                  }
+                });
+
+                /*
+                if (plugin.settings.pickupRelays.length > 0) {
+                    plugin.loadPickupRelays();
+                }*/
+            }
+            plugin.loadPostCodeForm();
+        }
+
+        plugin.loadPickupRelays = function() {
+            var prAddress = '',
+                curPr,
+                htmlPrList = '',
+                tmpHtmlPrList = '',
+                timeoutSearch,
+                prFieldsToRetrieve = ['identifiantChronopostPointA2PAS', 'adresse1', 'codePostal', 'localite', 'nomEnseigne'];
+            
+            clearTimeout(timeoutSearch);
+
+            console.log('chargement des points de relais');
+            
+            for (var i = 0; i < plugin.settings.pickupRelays.length; i++) {
+                curPr = plugin.settings.pickupRelays[i];
+                prAddress = curPr.adresse1;
+                if (curPr.adresse2) {
+                    prAddress += ' ' + curPr.adresse2;
+                }
+                if (curPr.adresse3) {
+                    prAddress += ' ' + curPr.adresse3;
+                }
+                prAddress += ' ' + curPr.codePostal;
+                prAddress += ' ' + curPr.localite;
+
+                if (plugin.settings.activateGmap) {
+                    var geo = new google.maps.Geocoder();
+
+                    timeoutSearch = setTimeout(function(idPR, searchAddress) {
+                        return function() {
+                            geo.geocode({'address':searchAddress}, function(i, searchAddress){
+                                return(function(results, status){
+                                    if (status == google.maps.GeocoderStatus.OK) {
+                                        var p = results[0].geometry.location;
+                                        plugin.settings.pickupRelays[idPR].location = p;
+                                        var marker = plugin.addPickupRelayMarker(plugin.settings.pickupRelays[idPR]);
+                                        plugin.settings.pickupRelays[idPR].marker = marker;
+                                        plugin.markers.push(marker);
+                                        plugin.map.bounds.extend(p);
+                                        plugin.map.fitBounds(plugin.map.bounds);
+                                        plugin.map.setCenter(plugin.map.bounds.getCenter());
+                                    }
+                                    // ====== Decode the error status ======
+                                    else {
+                                      var reason = "Code " + status;
+                                      /*
+                                      if (reasons[status]) {
+                                        reason = reasons[status]
+                                      }
+                                       */
+                                      console.log('Could not find "' + prAddress + '" ' + reason);
+                                    }
+                                });
+                            }(i, searchAddress));
+                        };
+                    }(i, prAddress), 1000);
+                }
+
+                tmpHtmlPrList = plugin.settings.pickupRelayListHtml;
+
+                for (var j = 0; j < prFieldsToRetrieve.length; j++) {
+                    tmpHtmlPrList = tmpHtmlPrList.replace(new RegExp('%'+prFieldsToRetrieve[j]+'%', 'g'), curPr[prFieldsToRetrieve[j]]);
+                }
+                 
+                htmlPrList += tmpHtmlPrList;
+
+                $(plugin.settings.pickupRelayListContainerSelector).html(htmlPrList);
+
+            }
+        }
+
+        plugin.searchForIdentifier = function(nameKey, myArray){
+            for (var i=0; i < myArray.length; i++) {
+                if (myArray[i].identifiantChronopostPointA2PAS === nameKey) {
+                    return myArray[i];
+                }
+            }
+        }
+
+        plugin.loadPostCodeForm = function() {
+            $(document).on('click', plugin.settings.postcodeButtonSelector, function(event) {
+                $element.trigger('chronomap:postcode_changed');
+                event.preventDefault();
+            });
+            $(document).on('keydown', plugin.settings.postcodeInputSelector, function(event) {
+                if (event.keyCode == 13) {
+                    $element.trigger('chronomap:postcode_changed');
+                    event.preventDefault();
+                }
+            });
+
+            $(document).on('change', '[name^="shipping_method_chronorelais"]', function(event) {
+                $element.trigger('chronomap:pickuprelay_change');
+                if (typeof plugin.searchForIdentifier($(this).val(), plugin.settings.pickupRelays).marker != 'undefined') { 
+                    google.maps.event.trigger(
+                        plugin.searchForIdentifier($(this).val(), plugin.settings.pickupRelays).marker,
+                        "click"
+                    );
+                }
+                event.preventDefault();
+            });
+
+            $element.on('chronomap:pickuprelay_change', function() {
+                plugin.currentPickupRelayName = $('input[name="shipping_method_chronorelais"]:checked').next('label').text();
+                $('.sp-methods-chronorelais').addClass('pickup-relay-selected');
+                $('.pickup-relay-link').html(
+                    plugin.settings.currentPickupRelayHtml
+                        .replace('%pickup_relay_name%', plugin.currentPickupRelayName)
+                        .replace('%pickup_relay_edit_text%', Chronomap.pickup_relay_edit_text)
+                );
+            });
+
+            $element.on('chronomap:postcode_changed', function() {
+                plugin.current_postcode = $('#mappostalcode').val();
+                plugin.updatePickupRelay(plugin.current_postcode);
+
+                $('.pickup-relay-link').html(
+                    plugin.settings.noPickupRelayHtml
+                        .replace('%no_pickup_relay%', Chronomap.no_pickup_relay)
+                );
+            });
+        }
+
+        plugin.updatePickupRelay = function(postcode) {
+            postcode = (typeof postcode == undefined) ? false : postcode;
+            $('.wrapper-methods-chronorelais').addClass('chronopost-loading');
+            $('.pickup-relay-link').hide();
+            $('<div class="chronomap-text-loading">'+Chronomap.loading_txt+'</div>').insertAfter('.pickup-relay-link');
+            $.ajax({
+                type: 'POST',
+                dataType: 'json',
+                url: Chronomap.ajaxurl,
+                cache: true,
+                data: {
+                    'action': 'chronopost_pickup_relays',
+                    'method_id' : plugin.current_chronorelais_method, 
+                    'postcode':   postcode,
+                    'chrono_nonce' : Chronomap.chrono_nonce
+                }
+                }).done(function(output) {
+                    if (output.status == 'success' && output.data !== null && output.data.length > 0) {
+                        plugin.settings.pickupRelays = output.data;
+                        plugin.loadPickupRelays();
+                        //plugin.map.setCenter(plugin.mapCenter, 11);
+                    }
+                    $('.pickup-relay-link').show();
+                    $('.chronomap-text-loading').remove();
+                    $('.wrapper-methods-chronorelais').removeClass('chronopost-loading');
+                });
+        }
+
+        plugin.resetAllMarkers = function() {
+            if (plugin.settings.activateGmap) {
+                for (var i = 0; i < plugin.markers.length; i++) {
+                    plugin.markers[i].setMap(null);
+                }
+                plugin.markers = [];
+            }
+            plugin.map.bounds = new google.maps.LatLngBounds();
+            plugin.settings.pickupRelays = [];
+        }
+
+        plugin.addPickupRelayMarker = function(pr) {
+            var relaypoint_id = pr.identifiantChronopostPointA2PAS;
+            var marker = new google.maps.Marker({
+                map: plugin.map,
+                position: pr.location,
+                title: pr.nomEnseigne,
+                icon: plugin.settings.pickupRelayIcon,
+                pr_id: relaypoint_id
+            });
+        
+            var infowindow;
+
+            infowindow = new google.maps.InfoWindow({
+                content: '<div class="marker-wrapper"><div class="info-section"><div class="marker-title">'+ Chronomap.infos +'</div>' + plugin.getMarkerInfoContent(pr) + '</div><div class="hours-section"><div class="marker-title">'+ Chronomap.opening_hours +'</div><div>' + plugin.getHoursTab(pr, true) + '</div></div></div>'
+            });
+
+            google.maps.event.addListener(marker, 'click', function() {
+              if(document.getElementById('s_method_chronorelais_'+marker.pr_id)) {
+                $('#s_method_chronorelais_'+relaypoint_id).attr('checked', 'checked');
+                $element.trigger('chronomap:pickuprelay_change');
+              }
+        
+              if (plugin.currentInfoWindow) {
+                plugin.currentInfoWindow.close();
+              }
+              infowindow.open(plugin.map,marker);
+              plugin.currentInfoWindow = infowindow;
+            });
+            return marker;
+        }
+
+        plugin.getActionsForm = function(pr) {
+            return '';
+            /* Disabled because not working uhuh !
+            var baseURL = "http://www.chronopost.fr/transport-express/webdav/site/chronov4/groups/administrators/public/Chronomaps/" ;
+            var latlngpoint = pr.location;
+            var printHref;
+            if(latlngpoint) {
+                printHref = baseURL
+                + "print-result.html?request=print&"
+                + encodeURI(plugin.btQueryString(pr, true).replace(/00%3A00-00%3A00/gi, 'Ferm%E9'))
+                + "&rtype=chronorelais"
+                + "&icnname=ac"
+                + "&lat=" + latlngpoint.lat()
+                + "&lng=" + latlngpoint.lng()
+                + "&sw-form-type-point=opt_chrlas"
+                + "&is_print_direction=" + false
+                + "&from_addr="
+                + "&to_addr=";
+                var html = '<div class="sw-map-tools"><a href="javascript:jQuery.chronomap.printPage(\''+printHref+'\')">Imprimer</a>'
+                + '</div>';
+                return html;
+            }
+            */
+        }
+
+        plugin.btQueryString = function(anArray, needEscape)
+        {
+          var rs = "" ;
+          for (var key in anArray)
+          {
+            if (needEscape == true)
+            {
+                    if(anArray[key]) {
+                        if (rs != "")
+                            rs += "&"
+                        rs += key +"=" + escape(anArray[key]) ;
+                    }
+            }
+            else
+            {
+                    if(anArray[key]) {
+                        if (rs != "")
+                            rs += "_-_"
+                        rs += key +"=" + anArray[key] ;
+                    }
+            }
+          }
+          return rs;
+        }
+
+        plugin.getMarkerInfoContent = function(pr){
+            var icoPath = plugin.settings.pickupRelayIcon;
+            var content="<div class=\"sw-map-adresse-wrp\" style=\"background-image: url("+ icoPath +"); background-repeat: no-repeat;padding-left:50px;\">"
+            + "<div class=\"pickup-relay-title\">"+pr.nomEnseigne+"</div>"
+            + "<div class=\"sw-map-adresse\">";
+            content += pr.adresse1;
+            if (pr.adresse2) {
+                content += ' ' + pr.adresse2;
+            }
+            if (pr.adresse3) {
+                content += ' ' + pr.adresse3;
+            }
+            content += ' ' + pr.codePostal + " " + pr.localite
+            + "</div></div>";
+            return content;
+        }
+
+        plugin.getHoursTab = function(pr, highlight)
+        {
+            var userAgent = navigator.userAgent.toLowerCase();
+            var msie = /msie/.test( userAgent ) && !/opera/.test( userAgent );
+        
+            var rs = "" ;
+            rs =  "<table class=\"sw-table\"";
+            if(msie) {
+                rs +=  " style=\"width:auto;\"";
+            }
+            rs +=  ">"
+                + "<tr><td>"+ Chronomap.day_mon +"</td>"+ plugin.parseHours(pr.horairesOuvertureLundi, 1, highlight) +"</tr>"
+                + "<tr><td>"+ Chronomap.day_tue +"</td>"+ plugin.parseHours(pr.horairesOuvertureMardi, 2, highlight) +"</tr>"
+                + "<tr><td>"+ Chronomap.day_wed +"</td>"+ plugin.parseHours(pr.horairesOuvertureMercredi, 3, highlight) +"</tr>"
+                + "<tr><td>"+ Chronomap.day_thu +"</td>"+ plugin.parseHours(pr.horairesOuvertureJeudi, 4, highlight) +"</tr>"
+                + "<tr><td>"+ Chronomap.day_fri +"</td>"+ plugin.parseHours(pr.horairesOuvertureVendredi, 5, highlight) +"</tr>"
+                + "<tr><td>"+ Chronomap.day_sat +"</td>"+ plugin.parseHours(pr.horairesOuvertureSamedi, 6, highlight) +"</tr>"
+                + "<tr><td>"+ Chronomap.day_sun +"</td>"+ plugin.parseHours(pr.horairesOuvertureDimanche, 0, highlight) +"</tr>"
+                + "</table>" ;
+            return rs ;
+        }
+
+        plugin.parseHours = function(value, day, highlight)
+        {
+            var rs = "" ;
+        
+            var now = new Date() ;
+            var today = now.getDay() ; // number of day
+            var attributedCell = "" ;
+            var reg = new RegExp(" ", "g");
+        
+            var hours = value.split(reg) ;
+        
+            for (var i=0; i < hours.length; i++)
+            {
+                    // first define the attributes for the current cell
+                    /* Aucun jour n'est mis en exergue car on ne sait pas quel sera le jour de livraison
+                    if ( highlight == true && day == today)
+                    {
+                        attributedCell = "style=\"color:red;\"" ;
+                    }
+                    else
+                    {
+                */
+                attributedCell = "" ;
+                    /*
+                    }
+                */
+        
+                // so, re-format time
+                if (hours[i] == "00:00-00:00")
+                {
+                    hours[i] = "<td "+attributedCell+">"+ Chronomap.closed +"</td>" ;
+                }
+                else
+                {
+                    hours[i] = "<td "+attributedCell+">"+hours[i]+"</td>" ;
+                }
+        
+                // yeah, concatenates result to the returned value
+                rs += hours[i] ;
+            }
+        
+            return rs ;
+        }
+
+        plugin.getShipAddress = function() {
+            var address_1                       = $( 'input#billing_address_1' ).val(),
+            address_2           = $( 'input#billing_address_2' ).val(),
+            postcode            = $( 'input#billing_postcode' ).val(),
+            city                = $( 'input#billing_city' ).val(),
+            country      = $( '#billing_country' ).val();
+        
+            if ( $( '#ship-to-different-address' ).find( 'input' ).is( ':checked' ) ) {
+                address_1               = $( 'input#shipping_address_1' ).val();
+                address_2               = $( 'input#shipping_address_2' ).val();
+                postcode                = $( 'input#shipping_postcode' ).val();
+                city            = $( 'input#shipping_city' ).val();
+                country      = $( '#shipping_country' ).val();
+            }
+        
+            var ship_address = address_1;
+            if (address_2 != '') {
+                ship_address += ' ' + address_2;
+            }
+        
+            return ship_address + ' ' + postcode + ' ' + city + ' ' + country;
+        }
+
+        plugin.init();
+
+    }
+
+    $.chronomap.printPage = function(href) {
+        var  fen=open("","Impression");
+        fen.focus();
+        if(href) {
+            fen.location.href = href;
+        }
+    }
+
+    $.fn.chronomap = function(options) {
+
+        return this.each(function() {
+            if (undefined == $(this).data('chronomap')) {
+                var plugin = new $.chronomap(this, options);
+                $(this).data('chronomap', plugin);
+            }
+        });
+
+    }
+  
+  })(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/public/js/chronopost-public.js b/wp-content/plugins/woocommerce-chronopost/public/js/chronopost-public.js
new file mode 100755 (executable)
index 0000000..af7550a
--- /dev/null
@@ -0,0 +1,55 @@
+(function( $ ) {
+       'use strict';
+
+       $(document).ready(function() {
+
+               var loadingMap = false,
+                               loadingRdv = false,
+                               shipping_method;
+
+               if ($('.chronorelaismap').length) {
+                       $('.chronorelaismap').chronomap();
+               }
+               if ($('#outer-container-method-chronoprecise').length) {
+                       $('#outer-container-method-chronoprecise').chronoprecise();
+               }
+
+               $( document.body ).on('click', '.pickup-relay-link', function(event) {
+                       if (!$('#container-method-chronorelay').length && !loadingMap) {
+                               $( '.pickup-relay-error' ).remove();
+                               loadingMap = true,
+                               shipping_method = $('.pickup-relay-link').closest('li').find('input[name="shipping_method[0]"]').val();
+                               $.ajax({
+                                               type: 'POST',
+                                               dataType: 'json',
+                                               url: Chronomap.ajaxurl,
+                                               cache: false,
+                                               data: {
+                                                               'action': 'load_chronorelais_picker',
+                                                               'method_id' : shipping_method,
+                                                               'chrono_nonce' : Chronomap.chrono_nonce
+                                               }
+                               })
+                               .done(function(output) {
+                                       if (output.status == 'success') {
+                                               $(output.data).insertBefore('#payment');
+                                               if ($('#container-method-chronorelay').length) {
+                                                       $("html, body").animate({ scrollTop: $('#container-method-chronorelay').offset().top }, 1000);
+                                                       $('.chronorelaismap').chronomap();
+                                               }
+                                       } else {
+                                               $( 'form.checkout' ).prepend( '<div class="pickup-relay-error woocommerce-error">' + output.data + '</div>' );
+                                               $( 'html, body' ).animate({
+                                                       scrollTop: ( $( 'form.checkout' ).offset().top - 100 )
+                                               }, 1000 );
+                                               $( document.body ).trigger( 'checkout_error' );
+                                       }
+                                       loadingMap = false;
+                               });
+                       }
+                       event.preventDefault();
+               });
+
+       });
+
+})( jQuery );
diff --git a/wp-content/plugins/woocommerce-chronopost/public/js/chronoprecise.plugin.js b/wp-content/plugins/woocommerce-chronopost/public/js/chronoprecise.plugin.js
new file mode 100755 (executable)
index 0000000..a75504f
--- /dev/null
@@ -0,0 +1,226 @@
+;(function($) {
+
+    $.chronoprecise = function(el, options) {
+
+      var defaults = {
+          navHtml: '<header class="rdvCarouselheader" id="rdvCarouselheader"><nav><a href="#" class="carousel-control prev" rel="prev">%prev_week_txt%</a><a href="#" class="carousel-control next" rel="next">%next_week_txt%</a></nav></header>'
+      }
+
+      var plugin = this;
+
+      plugin.settings = {}
+
+      var init = function() {
+          plugin.firstLoaded = false;
+          plugin.settings = $.extend({}, defaults, options);
+          plugin.el = el;
+          plugin.currentScreen = 1;
+          plugin.totalScreen = $(plugin.el).find('#rdvCarouselContent .slide').length;
+          plugin.initNavigation();
+          plugin.initEvents();
+          plugin.initMobileEvents();
+          plugin.firstLoaded = true;
+      }
+
+      plugin.reload = function() {
+        plugin.el = el;
+        plugin.firstLoaded = true;
+        plugin.currentScreen = 1;
+        plugin.totalScreen = $(plugin.el).find('#rdvCarouselContent .slide').length;
+        plugin.initNavigation();
+        plugin.resetEvents();
+        plugin.initEvents();
+        plugin.initMobileEvents();
+      }
+
+      plugin.initEvents = function() {
+        $( document.body ).on( 'updated_checkout', function() {
+          plugin.current_shipping_method = $('input[name="shipping_method[0]"]:checked').val();
+          plugin.isActive = $('.appointment-link').length ? true : false;
+          if (plugin.getShipAddress() != plugin.currentAddress && !plugin.loadingRdv && plugin.isActive) {
+            plugin.loadingRdv = true,
+            shipping_method = $('.appointment-link').closest('li').find('input[name="shipping_method[0]"]').val();
+            $.ajax({
+                type: 'POST',
+                dataType: 'json',
+                url: Chronoprecise.ajaxurl,
+                cache: false,
+                data: {
+                    'action': 'load_chronoprecise_appointment',
+                    'method_id' : shipping_method,
+                    'chrono_nonce' : Chronoprecise.chrono_nonce
+                }
+            })
+            .done(function(output) {
+                $('#outer-container-method-chronoprecise').html($(output.data).filter('#outer-container-method-chronoprecise').html());
+                plugin.loadingRdv = false;
+                $('#outer-container-method-chronoprecise').data('chronoprecise').reload();
+                $(document).trigger('chronoprecise:slot_loaded');
+            });
+          }
+        });
+
+        if (plugin.firstLoaded == false) {
+          $(document.body).on('click', '.appointment-link a', function() {
+            if (typeof plugin.loadingRdv != 'undefined' && plugin.loadingRdv) {
+              $(document).on('chronoprecise:slot_loaded', function() {
+                plugin.showFancybox();
+                $(document).off('chronoprecise:slot_loaded');
+              });
+            } else {
+              plugin.showFancybox();
+            }
+          });
+        }
+
+        $(document.body).on('click', '.shipping_method_chronopostprecise', function() {
+          plugin.selectChronopostSrdvSlot(this);
+        });
+        
+        $(document.body).on('click', '#container-method-chronoprecise .carousel-control', function(event) {
+          event.preventDefault();
+          if (!$(this).is('.inactive')) {
+            plugin.currentScreen = $(this).is('.next') ? plugin.currentScreen + 1 : plugin.currentScreen - 1;
+            plugin.getScreen(plugin.currentScreen);
+          }
+        });
+      }
+
+      plugin.showFancybox = function() {
+        $.fancybox.open({
+          src  : '#container-method-chronoprecise',
+          type : 'inline',
+          // Clicked on the slide
+          clickSlide : false,
+          // Clicked on the background (backdrop) element
+          touch: false,
+          opts : {
+            afterShow : function( instance, current ) {
+              //
+            }
+          }
+        });
+      }
+
+      plugin.resetEvents = function() {
+        //$( document.body ).off( 'updated_checkout');
+        $(plugin.el).off('click', '.shipping_method_chronopostprecise');
+        $(plugin.el).off('click', '#rdvCarouselheader .carousel-control');
+        $('#global-mobile').off('click', 'th');
+      }
+
+
+      plugin.initMobileEvents = function() {
+        $('#global-mobile').on('click', 'th', function(event){
+          event.preventDefault();
+          var $this = $(this);
+  
+          $('#global-mobile th').removeClass('active');
+          $this.addClass('active');
+  
+          $('#time-list ul').hide();
+          var idUlHoraireDay = $this.attr('id').replace("th","ul");
+          $('#'+idUlHoraireDay).show();
+        });
+        $('#global-mobile th').eq(0).click();
+      }
+
+      var dateLeadingZero = function(date){
+        return ('0' + date).slice(-2);
+      }
+
+      plugin.initNavigation = function() {
+        plugin.settings.navHtml = plugin.settings.navHtml.replace('%prev_week_txt%', Chronoprecise.prev_week_txt).replace('%next_week_txt%', Chronoprecise.next_week_txt);
+        if (plugin.totalScreen > 1) {
+          $(plugin.el).find('#rdvCarousel').before(plugin.settings.navHtml);
+        }
+        plugin.getScreen(1);
+      }
+
+      plugin.getScreen = function(nb) {
+        $('#rdvCarouselContent .slide')
+          .removeClass('slide-active')
+          .eq(nb - 1)
+            .addClass('slide-active');
+        $('#rdvCarouselheader .carousel-control')
+            .removeClass('inactive')
+        if (nb == 1) {
+          $('#rdvCarouselheader .carousel-control.prev')
+              .addClass('inactive');
+        } else if (nb == plugin.totalScreen) {
+          $('#rdvCarouselheader .carousel-control.next')
+              .addClass('inactive');
+        }
+      }
+
+      plugin.selectChronopostSrdvSlot = function(element) {
+
+        $('#container-method-chronoprecise').addClass('slot-selected');
+
+        var slotValue = $(element).data('slotvaluejson');
+
+        var d = new Date(slotValue.deliveryDate);
+
+        var thID = '#th_'+dateLeadingZero(d.getDate());
+            thID += '-'+dateLeadingZero((d.getMonth() + 1));
+            thID += '-'+d.getFullYear();
+        
+        $("#rdvCarousel .active").removeClass("active");
+
+        var td = $(element).closest("td");
+        var tr = td.closest("tr");
+        var th = tr.find('th');
+
+        th.addClass("active");
+        $(thID).addClass("active");
+        
+
+        $("#global-mobile ul li.active").removeClass("active");
+
+        var li = $(element).closest("li");
+        li.addClass("active");
+        
+        $('#chronopostprecise_creneaux_info').val(JSON.stringify(slotValue)).trigger('chronoprecise:appointment_changed');
+        setTimeout(function() {
+          jQuery( document.body ).trigger( 'update_checkout', { update_shipping_method: true });
+        }, 5);
+      }
+      
+      plugin.getShipAddress = function() {
+        var address_1                   = $( 'input#billing_address_1' ).val(),
+        address_2               = $( 'input#billing_address_2' ).val(),
+        postcode                = $( 'input#billing_postcode' ).val(),
+        city            = $( 'input#billing_city' ).val(),
+        country      = $( '#billing_country' ).val();
+    
+        if ( $( '#ship-to-different-address' ).find( 'input' ).is( ':checked' ) ) {
+            address_1           = $( 'input#shipping_address_1' ).val();
+            address_2           = $( 'input#shipping_address_2' ).val();
+            postcode            = $( 'input#shipping_postcode' ).val();
+            city                = $( 'input#shipping_city' ).val();
+            country      = $( '#shipping_country' ).val();
+        }
+    
+        var ship_address = address_1;
+        if (address_2 != '') {
+            ship_address += ' ' + address_2;
+        }
+    
+        return ship_address + ' ' + postcode + ' ' + city + ' ' + country;
+      }
+
+      init();
+    }
+
+    $.fn.chronoprecise = function(options) {
+      return this.each(function() {
+        if (undefined == $(this).data('chronoprecise')) {
+          var plugin = new $.chronoprecise(this, options);
+          $(this).data('chronoprecise', plugin);
+
+        }
+      });
+    }  
+
+})(jQuery);
+
diff --git a/wp-content/plugins/woocommerce-chronopost/public/partials/chronopost-public-display.php b/wp-content/plugins/woocommerce-chronopost/public/partials/chronopost-public-display.php
new file mode 100755 (executable)
index 0000000..c446470
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+
+/**
+ * Provide a public-facing view for the plugin
+ *
+ * This file is used to markup the public-facing aspects of the plugin.
+ *
+ * @link       https://www.adexos.fr
+ * @since      1.0.0
+ *
+ * @package    Chronopost
+ * @subpackage Chronopost/public/partials
+ */
+?>
+
+<!-- This file should primarily consist of HTML with a little bit of PHP. -->
diff --git a/wp-content/plugins/woocommerce-chronopost/public/scss/chronopost-public.scss b/wp-content/plugins/woocommerce-chronopost/public/scss/chronopost-public.scss
new file mode 100755 (executable)
index 0000000..1aa6ca3
--- /dev/null
@@ -0,0 +1,641 @@
+#shipping_method {
+       li {
+               label[for*='_chrono'] {
+                       position: relative;
+                       &:before {
+                               content: "";
+                               display: inline-block;
+                               position: relative;
+                               top: 6px;
+                               vertical-align: baseline;
+                               background:transparent url(../img/chronopost-horizontal.png) no-repeat center center;
+                               background-size: contain;
+                               width: (198px / 2);
+                               height: (44px / 2);
+                               margin-right: 7px;
+                       }
+               }
+               input[type="radio"]:first-child {
+                       + label + .appointment-link,
+                       + label + .pickup-relay-link {
+                               display: none;
+                       }
+
+                       &:checked {
+                               + label + .appointment-link,
+                               + label + .pickup-relay-link {
+                                       display: block;
+                               }
+                       }
+               }
+       }
+}
+
+.chronomap-text-loading {
+       color: #666666;
+}
+
+/**
+ * _animation.scss
+ * Custom WooCommerce Animations.
+ */
+ @keyframes spin {
+       100% {
+               transform: rotate( 360deg );
+       }
+}
+
+@mixin loader() {
+       &::before {
+               height: 1em;
+               width: 1em;
+               display: block;
+               position: absolute;
+               top: 50%;
+               left: 50%;
+               margin-left: -0.5em;
+               margin-top: -0.5em;
+               content: '';
+               animation: spin 1s ease-in-out infinite;
+               background: url('../img/loader.svg') center center;
+               background-size: cover;
+               line-height: 1;
+               text-align: center;
+               font-size: 2em;
+               color: rgba(#000, 0.75);
+               z-index: -1;
+               opacity: 0;
+               transition: opacity .5s ease-in, z-index 0s linear .5s;
+       }
+}
+
+#container-method-chronorelay {
+       height: 100vh;
+       margin-top: 0;
+       margin-bottom: 0;
+       max-height: 768px;
+       padding: 10px;
+       display: none;
+
+       table.sw-table {
+               table-layout: fixed;
+               border-collapse: collapse;
+               width: 100%;
+
+               tbody {
+                       tr:nth-child(2n) td {
+                               background-color: transparent;
+                       }
+                       td {
+                               padding: 2px;
+                               margin: 0;
+                               display: inline-block;
+                               margin-right: 10px;
+                               background-color: transparent;
+                               &:first-child {
+                                       width: 35px;
+                                       font-weight: bold;
+                               }
+                       }
+               }
+       }
+
+       .marker-wrapper {
+               max-width: 430px;
+       }
+
+       .marker-title {
+               padding: 5px 0;
+               font-weight: bold;
+       }
+
+       .pickup-relay-title {
+               margin-bottom: 7px;
+               font-weight: bold;
+       }
+
+       .hours-section {
+               margin-left: 7px;
+               padding-left: 7px;
+               float: left;
+               width: calc(100% - 177px);
+       }
+
+       .info-section {
+               float: left;
+               width: 170px;
+       }
+
+       .button {
+               border: 0;
+    background: 0 0;
+    background-color: #43454b;
+    border-color: #43454b;
+    color: #fff;
+    cursor: pointer;
+    padding: 10px;
+    text-decoration: none;
+    font-weight: 600;
+    text-shadow: none;
+    display: inline-block;
+    outline: 0;
+    -webkit-appearance: none;
+    -webkit-font-smoothing: antialiased;
+               border-radius: 0;
+               
+               &:hover {
+                       background-color: #d5d5d5;
+                       border-color: #d5d5d5;
+                       color: #333333;
+               }
+               
+               @media (min-width: 480px) {
+                       padding: 10px 22px;
+               }
+       }
+
+       button.fancybox-close-small {
+               &:hover {
+                       background-color: transparent;
+               }
+       }
+       
+       h3 {
+               margin: 0 0 10px 0;
+               padding: 0;
+               line-height: 24px;
+               font-size: 20px;
+               font-weight: bold;
+       }
+
+       .mappostalcode {
+               margin-bottom: 25px;
+               padding: 8px 0;
+       }
+
+       .sp-methods-chronorelais {
+               height: 200px;
+               overflow: auto;
+               box-shadow: inset 0px -10px 20px #f8f8f8;
+       }
+
+       .pickup-relays {
+               list-style: none;
+               li {
+                       line-height: 25px;
+                       padding: 0;
+                       margin: 0;
+
+                       &:nth-child(odd) {
+                               label {
+                                       background-color: #f8f8f8;
+                               }
+                       }
+                       
+                       input[type=radio]:first-child {
+                               clip: rect(1px 1px 1px 1px);
+                               clip: rect(1px, 1px, 1px, 1px);
+                               position: absolute !important;
+                       }
+
+                       label {
+                               position: relative;
+                               padding: 5px 5px 5px 30px;
+                               &:before {
+                                       content: "";
+                                       position: absolute;
+                                       left: 5px;
+                                       top: 10px;
+                                       transition: border-color, ease, .2s;
+                                       border: 2px solid #6d6d6d;
+                                       width: 11px;
+                                       height: 11px;
+                                       border-radius: 50%;
+                               }
+                       }
+
+                       input[type=radio]:first-child:checked + label {
+                               background: #f0f0f0;
+                               &:after {
+                                               content: "";
+                                               position: absolute;
+                                               top: 15px;
+                                               left: 10px;
+                                               background: #6d6d6d;
+                                               height: 5px;
+                                               width: 5px;
+                                               border-radius: 50%;
+                                               transition: transform .3s cubic-bezier(0, 0, .2, 1);
+                               }
+                       }
+
+                       input[type=radio]:first-child:hover +  label {
+                               &:before {
+                                       border-color: #000;
+                               }
+                               
+                               &:after {
+                                       background-color: #000;
+                               }
+                       }
+                       
+                       input[type=radio]:first-child:active + label:after {
+                               transform: scale(1.5);
+                               transition: transform .3s cubic-bezier(0, 0, .2, 1);
+                       }
+               }
+       }
+
+       .postcode-input {
+               float: left;
+               margin-right: 10px;
+
+               input {
+                       max-width: 80px;
+               }
+       }
+
+       p.chronorelais-explain {
+               margin: 0 0 10px 0;
+               padding: 0;
+               line-height: 25px;
+               font-size: 16px;
+       }
+       .pickup-relays {
+               margin: 0;
+       }
+
+
+       .button-center {
+               text-align: center;
+               padding: 10px;
+       }
+
+       @media (min-width: 768px) {
+               width: calc(100vw - 80px);
+               max-width: 1024px;
+               height: calc(100% - 88px);
+               margin-top: 44px;
+               margin-bottom: 44px;
+               padding: 24px;
+
+               .wrapper-methods-chronorelais {
+                       display: flex;
+                       flex-wrap: wrap;
+                       height: calc(100% - 200px);
+                       position: relative;
+                       
+                       @include loader;
+
+                       .sp-methods-chronorelais {
+                               &.pickup-relay-selected {
+                                       height: calc(100% - 65px);
+
+                                       + .button-center {
+                                               display: block;
+                                       }
+                               }
+                       }
+
+                       .button-center {
+                               text-align: center;
+                               position: absolute;
+                               bottom: 0;
+                               left: 0;
+                               right: auto;
+                               width: 30%;
+                               background: #fff;
+                               display: none;
+
+                               .button {
+                                       width: 100%;
+                               }
+                       }
+
+                       &:after {
+                               content: "";
+                               background: rgba(#fff, 0.7);
+                               position: absolute;
+                               top: 0;
+                               bottom: 0;
+                               left: 0;
+                               right: 0;
+                               z-index: -1;
+                               opacity: 0;
+                               transition: opacity .5s ease-in;
+                       }
+
+                       &.chronopost-loading {
+                               &:before {
+                                       z-index: 6;
+                                       opacity: .6;
+                                       transition: opacity .5s ease-in;
+                               }
+                               &:after {
+                                       content: "";
+                                       opacity: 1;
+                                       z-index: 5;
+                               }
+                       }
+
+                       .sp-methods-chronorelais {
+                               width: 30%;
+                               margin-right: 10px;
+                               height: 100%;
+                               overflow: auto;
+
+                               ul {
+                                       list-style: none;
+                                       margin: 0;
+                                       padding: 0;
+                               }
+                       }
+               }
+       }
+}
+
+.chronorelaismap,
+#chronomap {
+       height: 100%;
+       width: 100%;
+       min-height: 300px;
+}
+
+.chronorelaismap {
+       margin-top: 10px;
+       @media (min-width: 768px) {
+               margin-top: 0;
+               width: calc(70% - 10px);
+       }
+}
+
+#container-method-chronoprecise {
+       display: none;
+
+
+       .button-center {
+               position: absolute;
+               bottom: 0;
+               left: 0;
+               right: 0;
+               display: none;
+
+               .button {
+                       width: 100%;
+               }
+       }
+       
+       &.slot-selected .button-center {
+               display: block;
+       }
+
+       @media (max-width: 739px) {
+               height: 100vh;
+               max-width: 100vw;
+               margin: 0;
+       }
+
+       .rdvCarouselheader {
+               margin: 0 auto 10px auto;
+               .carousel-control {
+                       color: #8f9091;
+                       font-weight: bold;
+                       &:not(:first-child) {
+                               margin-left: 10px;
+                       }
+                       &.inactive {
+                               opacity: .5;
+                       }
+               }
+       }
+
+       .global-mobile {
+               width: 100%;
+               height: 100%;
+               max-width: 640px;
+               margin: 0 auto 20px auto;
+               position: relative;
+               padding-bottom: 70px;
+               @media (min-width: 740px) {
+                       display: none;
+               }
+
+               .header {
+                       width: auto;
+               }
+               h1 {
+                       font-size: 16px;
+                       font-weight: normal;
+                       margin-bottom: 10px;
+                       text-align: left;
+               }
+               .left {
+                       float: left;
+               }
+               .right {
+                       float: right;
+               }
+               .scroll {
+                       width: 100%;
+                       overflow-y: hidden;
+                       overflow-x: auto;
+               }
+               .scroll-v {
+                       overflow-y: auto;
+                       overflow-x: hidden;
+                       max-height: calc(100vh - 270px);
+                       margin-bottom: 20px;
+                       border-bottom: solid 1px #f3f3f3;
+               }
+               .date-time {
+                       min-width: 100%;
+                       border-collapse: collapse;
+                       margin-bottom: 0;
+                       th {
+                               padding: 10px 5px;
+                               text-align: center;
+                               min-width: 80px;
+                               line-height: 1.1;
+                       }
+               }
+               .date-row th {
+                       color: #fff;
+                       background-color: #8f9091;
+                       font-weight: normal;
+                       border-left: solid 1px #fff;
+                       border-bottom: solid 1px #fff;
+                       &:first-child {
+                               border-left: 0;
+                       }
+                       span {
+                               font-size: 2.14em;
+                               display: block;
+                       }
+               }
+               .time-list {
+                       border-left: solid 1px #f3f3f3;
+                       border-right: solid 1px #f3f3f3;
+                       position: relative;
+
+                       ul {
+                               padding: 0;
+                               margin: 0;
+                       }
+
+                       li {
+                               display: table;
+                               width: 100%;
+                               border-bottom: solid 1px #f3f3f3;
+                               &:last-child {
+                                       border-bottom: none;
+                               }
+                               font-size: 16px;
+                               &:nth-child(odd) {
+                                       background-color: #fafafa;
+                               }
+                               label {
+                                       display: table-row !important;
+                                       color: inherit !important;
+                                       background: inherit !important;
+                               }
+                               &.unavailable {
+                                       background-color: #e6e6e7;
+                                       .price-cell {
+                                               font-size: .6em;
+                                       }
+                               }
+                               &.active {
+                                       background-color: #797979 !important;
+                                       color: #fff !important;
+                               }
+                       }
+               }
+               .date-row th.active {
+                       background-color: #797979 !important;
+                       color: #fff !important;
+               }
+               .eco {
+                       background-color: #e2f0e0;
+               }
+               .time-cell {
+                       display: table-cell;
+                       width: 30%;
+                       white-space: nowrap;
+                       padding: 20px;
+               }
+               .price-cell {
+                       display: table-cell;
+                       width: 30%;
+                       white-space: nowrap;
+                       padding: 20px;
+                       width: 70%;
+                       padding-right: 60px;
+                       text-align: right;
+               }
+               .ic-eco {
+                       position: absolute;
+                       margin-left: 10px;
+               }
+               input {
+                       font-size: 18px;
+                       padding: 4px 30px;
+                       border: 0;
+                       -webkit-border-radius: 4px;
+                       -moz-border-radius: 4px;
+                       border-radius: 4px;
+                       cursor: pointer;
+               }
+       }
+
+       .global-desktop {
+               display: none;
+
+               nav {
+                       margin-top: -15px;
+               }
+
+               .button-center {
+                       text-align: center;
+                       position: static;
+                       margin: -7px 0;
+                       .button {
+                               width: auto;
+                       }
+               }
+               
+               table {
+                       td, th {
+                               padding: 8px 5px;
+                               &.time-cell {
+                                       width: 100px
+                               }
+                               &.active {
+                                       background-color: #d5d5d5;
+                               }
+                               &.incentive-flag {
+                                       background-color: #e2f0e0;
+                                       &:after {
+                                               content: "";
+                                               display: inline-block;
+                                               margin-left: 5px;
+                                               background: transparent url(../img/eco.png) no-repeat 0 0;
+                                               background-size: cover;
+                                               width: (65px / 1.7);
+                                               height: (19px / 1.7);
+                                               vertical-align: middle;
+                                       }
+                               }
+                       }
+               }
+               
+               .date-time td span {
+                       white-space: nowrap;
+               }
+       
+               .woocommerce-Price-amount {
+                       font-weight: bold;
+                       font-size: 0.85em;
+               }
+       
+               .date-row th,
+               .time-cell {
+                               background-color: #8f9091;
+                               font-weight: normal;
+                               color: #fff;
+                               border-bottom: solid 1px #fff;
+                               white-space: nowrap;
+                               text-align: center;
+                               line-height: 1.1;
+                               vertical-align: middle;
+               }
+       
+               .time-cell {
+                       font-size: 1.1em;
+               }
+       
+               .date-row th {
+                       span {
+                               font-size: 1.8em;
+                               display: block;
+                       }
+               }
+
+               @media (min-width: 740px) {
+                       display: block;
+               }
+               table {
+                       table-layout: fixed;
+                       min-width: 640px;
+                       max-width: 960px;
+               }
+       }
+       
+       #rdvCarouselContent {
+               .slide {
+                       display: none;
+                       &.slide-active {
+                               display: block;
+                       }
+               }
+       }
+}
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/public/vendor/fancybox/jquery.fancybox.css b/wp-content/plugins/woocommerce-chronopost/public/vendor/fancybox/jquery.fancybox.css
new file mode 100755 (executable)
index 0000000..0ed0785
--- /dev/null
@@ -0,0 +1,740 @@
+@charset "UTF-8";
+.fancybox-enabled {
+  overflow: hidden; }
+
+.fancybox-enabled body {
+  overflow: visible;
+  height: 100%; }
+
+.fancybox-is-hidden {
+  position: absolute;
+  top: -9999px;
+  left: -9999px;
+  visibility: hidden; }
+
+.fancybox-container {
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 99993;
+  -webkit-tap-highlight-color: transparent;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+  -webkit-transform: translateZ(0);
+  transform: translateZ(0); }
+
+/* Make sure that the first one is on the top */
+.fancybox-container ~ .fancybox-container {
+  z-index: 99992; }
+
+.fancybox-outer,
+.fancybox-inner,
+.fancybox-bg,
+.fancybox-stage {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0; }
+
+.fancybox-outer {
+  overflow-y: auto;
+  -webkit-overflow-scrolling: touch; }
+
+.fancybox-bg {
+  background: #1e1e1e;
+  opacity: 0;
+  transition-duration: inherit;
+  transition-property: opacity;
+  transition-timing-function: cubic-bezier(0.47, 0, 0.74, 0.71); }
+
+.fancybox-is-open .fancybox-bg {
+  opacity: 0.87;
+  transition-timing-function: cubic-bezier(0.22, 0.61, 0.36, 1); }
+
+.fancybox-infobar,
+.fancybox-toolbar,
+.fancybox-caption-wrap {
+  position: absolute;
+  direction: ltr;
+  z-index: 99997;
+  opacity: 0;
+  visibility: hidden;
+  transition: opacity .25s, visibility 0s linear .25s;
+  box-sizing: border-box; }
+
+.fancybox-show-infobar .fancybox-infobar,
+.fancybox-show-toolbar .fancybox-toolbar,
+.fancybox-show-caption .fancybox-caption-wrap {
+  opacity: 1;
+  visibility: visible;
+  transition: opacity .25s, visibility 0s; }
+
+.fancybox-infobar {
+  top: 0;
+  left: 50%;
+  margin-left: -79px; }
+
+.fancybox-infobar__body {
+  display: inline-block;
+  width: 70px;
+  line-height: 44px;
+  font-size: 13px;
+  font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+  text-align: center;
+  color: #ddd;
+  background-color: rgba(30, 30, 30, 0.7);
+  pointer-events: none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  -webkit-touch-callout: none;
+  -webkit-tap-highlight-color: transparent;
+  -webkit-font-smoothing: subpixel-antialiased; }
+
+.fancybox-toolbar {
+  top: 0;
+  right: 0; }
+
+.fancybox-stage {
+  overflow: hidden;
+  direction: ltr;
+  z-index: 99994;
+  -webkit-transform: translate3d(0, 0, 0); }
+
+.fancybox-slide {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  margin: 0;
+  padding: 0;
+  overflow: auto;
+  outline: none;
+  white-space: normal;
+  box-sizing: border-box;
+  text-align: center;
+  z-index: 99994;
+  -webkit-overflow-scrolling: touch;
+  display: none;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+  transition-property: opacity, -webkit-transform;
+  transition-property: transform, opacity;
+  transition-property: transform, opacity, -webkit-transform;
+  -webkit-transform-style: preserve-3d;
+  transform-style: preserve-3d; }
+
+.fancybox-slide::before {
+  content: '';
+  display: inline-block;
+  vertical-align: middle;
+  height: 100%;
+  width: 0; }
+
+.fancybox-is-sliding .fancybox-slide,
+.fancybox-slide--previous,
+.fancybox-slide--current,
+.fancybox-slide--next {
+  display: block; }
+
+.fancybox-slide--image {
+  overflow: visible; }
+
+.fancybox-slide--image::before {
+  display: none; }
+
+.fancybox-slide--video .fancybox-content,
+.fancybox-slide--video iframe {
+  background: #000; }
+
+.fancybox-slide--map .fancybox-content,
+.fancybox-slide--map iframe {
+  background: #E5E3DF; }
+
+.fancybox-slide--next {
+  z-index: 99995; }
+
+.fancybox-slide > * {
+  display: inline-block;
+  position: relative;
+  padding: 24px;
+  margin: 44px 0 44px;
+  border-width: 0;
+  vertical-align: middle;
+  text-align: left;
+  background-color: #fff;
+  overflow: auto;
+  box-sizing: border-box; }
+
+.fancybox-slide .fancybox-image-wrap {
+  position: absolute;
+  top: 0;
+  left: 0;
+  margin: 0;
+  padding: 0;
+  border: 0;
+  z-index: 99995;
+  background: transparent;
+  cursor: default;
+  overflow: visible;
+  -webkit-transform-origin: top left;
+  -ms-transform-origin: top left;
+  transform-origin: top left;
+  background-size: 100% 100%;
+  background-repeat: no-repeat;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden; }
+
+.fancybox-can-zoomOut .fancybox-image-wrap {
+  cursor: -webkit-zoom-out;
+  cursor: zoom-out; }
+
+.fancybox-can-zoomIn .fancybox-image-wrap {
+  cursor: -webkit-zoom-in;
+  cursor: zoom-in; }
+
+.fancybox-can-drag .fancybox-image-wrap {
+  cursor: -webkit-grab;
+  cursor: grab; }
+
+.fancybox-is-dragging .fancybox-image-wrap {
+  cursor: -webkit-grabbing;
+  cursor: grabbing; }
+
+.fancybox-image,
+.fancybox-spaceball {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  margin: 0;
+  padding: 0;
+  border: 0;
+  max-width: none;
+  max-height: none; }
+
+.fancybox-spaceball {
+  z-index: 1; }
+
+.fancybox-slide--iframe .fancybox-content {
+  padding: 0;
+  width: 80%;
+  height: 80%;
+  max-width: calc(100% - 100px);
+  max-height: calc(100% - 88px);
+  overflow: visible;
+  background: #fff; }
+
+.fancybox-iframe {
+  display: block;
+  margin: 0;
+  padding: 0;
+  border: 0;
+  width: 100%;
+  height: 100%;
+  background: #fff; }
+
+.fancybox-error {
+  margin: 0;
+  padding: 40px;
+  width: 100%;
+  max-width: 380px;
+  background: #fff;
+  cursor: default; }
+
+.fancybox-error p {
+  margin: 0;
+  padding: 0;
+  color: #444;
+  font: 16px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; }
+
+.fancybox-close-small {
+  position: absolute;
+  top: 0;
+  right: 0;
+  width: 44px;
+  height: 44px;
+  padding: 0;
+  margin: 0;
+  border: 0;
+  border-radius: 0;
+  outline: none;
+  background: transparent;
+  z-index: 10;
+  cursor: pointer; }
+
+.fancybox-close-small:after {
+  content: '×';
+  position: absolute;
+  top: 5px;
+  right: 5px;
+  width: 30px;
+  height: 30px;
+  font: 20px/30px Arial,"Helvetica Neue",Helvetica,sans-serif;
+  color: #888;
+  font-weight: 300;
+  text-align: center;
+  border-radius: 50%;
+  border-width: 0;
+  background: #fff;
+  transition: background .25s;
+  box-sizing: border-box;
+  z-index: 2; }
+
+.fancybox-close-small:focus:after {
+  outline: 1px dotted #888; }
+
+.fancybox-close-small:hover:after {
+  color: #555;
+  background: #eee; }
+
+.fancybox-slide--iframe .fancybox-close-small {
+  top: 0;
+  right: -44px; }
+
+.fancybox-slide--iframe .fancybox-close-small:after {
+  background: transparent;
+  font-size: 35px;
+  color: #aaa; }
+
+.fancybox-slide--iframe .fancybox-close-small:hover:after {
+  color: #fff; }
+
+/* Caption */
+.fancybox-caption-wrap {
+  bottom: 0;
+  left: 0;
+  right: 0;
+  padding: 60px 30px 0 30px;
+  background: linear-gradient(to bottom, transparent 0%, rgba(0, 0, 0, 0.1) 20%, rgba(0, 0, 0, 0.2) 40%, rgba(0, 0, 0, 0.6) 80%, rgba(0, 0, 0, 0.8) 100%);
+  pointer-events: none; }
+
+.fancybox-caption {
+  padding: 30px 0;
+  border-top: 1px solid rgba(255, 255, 255, 0.4);
+  font-size: 14px;
+  font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+  color: #fff;
+  line-height: 20px;
+  -webkit-text-size-adjust: none; }
+
+.fancybox-caption a,
+.fancybox-caption button,
+.fancybox-caption select {
+  pointer-events: all; }
+
+.fancybox-caption a {
+  color: #fff;
+  text-decoration: underline; }
+
+/* Buttons */
+.fancybox-button {
+  display: inline-block;
+  position: relative;
+  margin: 0;
+  padding: 0;
+  border: 0;
+  width: 44px;
+  height: 44px;
+  line-height: 44px;
+  text-align: center;
+  background: transparent;
+  color: #ddd;
+  border-radius: 0;
+  cursor: pointer;
+  vertical-align: top;
+  outline: none; }
+
+.fancybox-button[disabled] {
+  cursor: default;
+  pointer-events: none; }
+
+.fancybox-infobar__body, .fancybox-button {
+  background: rgba(30, 30, 30, 0.6); }
+
+.fancybox-button:hover:not([disabled]) {
+  color: #fff;
+  background: rgba(0, 0, 0, 0.8); }
+
+.fancybox-button::before,
+.fancybox-button::after {
+  content: '';
+  pointer-events: none;
+  position: absolute;
+  background-color: currentColor;
+  color: currentColor;
+  opacity: 0.9;
+  box-sizing: border-box;
+  display: inline-block; }
+
+.fancybox-button[disabled]::before,
+.fancybox-button[disabled]::after {
+  opacity: 0.3; }
+
+.fancybox-button--left::after,
+.fancybox-button--right::after {
+  top: 18px;
+  width: 6px;
+  height: 6px;
+  background: transparent;
+  border-top: solid 2px currentColor;
+  border-right: solid 2px currentColor; }
+
+.fancybox-button--left::after {
+  left: 20px;
+  -webkit-transform: rotate(-135deg);
+  -ms-transform: rotate(-135deg);
+  transform: rotate(-135deg); }
+
+.fancybox-button--right::after {
+  right: 20px;
+  -webkit-transform: rotate(45deg);
+  -ms-transform: rotate(45deg);
+  transform: rotate(45deg); }
+
+.fancybox-button--left {
+  border-bottom-left-radius: 5px; }
+
+.fancybox-button--right {
+  border-bottom-right-radius: 5px; }
+
+.fancybox-button--close::before, .fancybox-button--close::after {
+  content: '';
+  display: inline-block;
+  position: absolute;
+  height: 2px;
+  width: 16px;
+  top: calc(50% - 1px);
+  left: calc(50% - 8px); }
+
+.fancybox-button--close::before {
+  -webkit-transform: rotate(45deg);
+  -ms-transform: rotate(45deg);
+  transform: rotate(45deg); }
+
+.fancybox-button--close::after {
+  -webkit-transform: rotate(-45deg);
+  -ms-transform: rotate(-45deg);
+  transform: rotate(-45deg); }
+
+/* Navigation arrows */
+.fancybox-arrow {
+  position: absolute;
+  top: 50%;
+  margin: -50px 0 0 0;
+  height: 100px;
+  width: 54px;
+  padding: 0;
+  border: 0;
+  outline: none;
+  background: none;
+  cursor: pointer;
+  z-index: 99995;
+  opacity: 0;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  transition: opacity .25s; }
+
+.fancybox-arrow::after {
+  content: '';
+  position: absolute;
+  top: 28px;
+  width: 44px;
+  height: 44px;
+  background-color: rgba(30, 30, 30, 0.8);
+  background-image: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjQ4IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSI0OCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMTIgNGwtMS40MSAxLjQxTDE2LjE3IDExSDR2MmgxMi4xN2wtNS41OCA1LjU5TDEyIDIwbDgtOHoiLz48L3N2Zz4=);
+  background-repeat: no-repeat;
+  background-position: center center;
+  background-size: 24px 24px; }
+
+.fancybox-arrow--right {
+  right: 0; }
+
+.fancybox-arrow--left {
+  left: 0;
+  -webkit-transform: scaleX(-1);
+  -ms-transform: scaleX(-1);
+  transform: scaleX(-1); }
+
+.fancybox-arrow--right::after,
+.fancybox-arrow--left::after {
+  left: 0; }
+
+.fancybox-show-nav .fancybox-arrow {
+  opacity: 0.6; }
+
+.fancybox-show-nav .fancybox-arrow[disabled] {
+  opacity: 0.3; }
+
+/* Loading indicator */
+.fancybox-loading {
+  border: 6px solid rgba(100, 100, 100, 0.4);
+  border-top: 6px solid rgba(255, 255, 255, 0.6);
+  border-radius: 100%;
+  height: 50px;
+  width: 50px;
+  -webkit-animation: fancybox-rotate .8s infinite linear;
+  animation: fancybox-rotate .8s infinite linear;
+  background: transparent;
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  margin-top: -25px;
+  margin-left: -25px;
+  z-index: 99999; }
+
+@-webkit-keyframes fancybox-rotate {
+  from {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg); }
+  to {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg); } }
+
+@keyframes fancybox-rotate {
+  from {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg); }
+  to {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg); } }
+
+/* Transition effects */
+.fancybox-animated {
+  transition-timing-function: cubic-bezier(0, 0, 0.25, 1); }
+
+/* transitionEffect: slide */
+.fancybox-fx-slide.fancybox-slide--previous {
+  -webkit-transform: translate3d(-100%, 0, 0);
+  transform: translate3d(-100%, 0, 0);
+  opacity: 0; }
+
+.fancybox-fx-slide.fancybox-slide--next {
+  -webkit-transform: translate3d(100%, 0, 0);
+  transform: translate3d(100%, 0, 0);
+  opacity: 0; }
+
+.fancybox-fx-slide.fancybox-slide--current {
+  -webkit-transform: translate3d(0, 0, 0);
+  transform: translate3d(0, 0, 0);
+  opacity: 1; }
+
+/* transitionEffect: fade */
+.fancybox-fx-fade.fancybox-slide--previous,
+.fancybox-fx-fade.fancybox-slide--next {
+  opacity: 0;
+  transition-timing-function: cubic-bezier(0.19, 1, 0.22, 1); }
+
+.fancybox-fx-fade.fancybox-slide--current {
+  opacity: 1; }
+
+/* transitionEffect: zoom-in-out */
+.fancybox-fx-zoom-in-out.fancybox-slide--previous {
+  -webkit-transform: scale3d(1.5, 1.5, 1.5);
+  transform: scale3d(1.5, 1.5, 1.5);
+  opacity: 0; }
+
+.fancybox-fx-zoom-in-out.fancybox-slide--next {
+  -webkit-transform: scale3d(0.5, 0.5, 0.5);
+  transform: scale3d(0.5, 0.5, 0.5);
+  opacity: 0; }
+
+.fancybox-fx-zoom-in-out.fancybox-slide--current {
+  -webkit-transform: scale3d(1, 1, 1);
+  transform: scale3d(1, 1, 1);
+  opacity: 1; }
+
+/* transitionEffect: rotate */
+.fancybox-fx-rotate.fancybox-slide--previous {
+  -webkit-transform: rotate(-360deg);
+  -ms-transform: rotate(-360deg);
+  transform: rotate(-360deg);
+  opacity: 0; }
+
+.fancybox-fx-rotate.fancybox-slide--next {
+  -webkit-transform: rotate(360deg);
+  -ms-transform: rotate(360deg);
+  transform: rotate(360deg);
+  opacity: 0; }
+
+.fancybox-fx-rotate.fancybox-slide--current {
+  -webkit-transform: rotate(0deg);
+  -ms-transform: rotate(0deg);
+  transform: rotate(0deg);
+  opacity: 1; }
+
+/* transitionEffect: circular */
+.fancybox-fx-circular.fancybox-slide--previous {
+  -webkit-transform: scale3d(0, 0, 0) translate3d(-100%, 0, 0);
+  transform: scale3d(0, 0, 0) translate3d(-100%, 0, 0);
+  opacity: 0; }
+
+.fancybox-fx-circular.fancybox-slide--next {
+  -webkit-transform: scale3d(0, 0, 0) translate3d(100%, 0, 0);
+  transform: scale3d(0, 0, 0) translate3d(100%, 0, 0);
+  opacity: 0; }
+
+.fancybox-fx-circular.fancybox-slide--current {
+  -webkit-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
+  transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
+  opacity: 1; }
+
+/* transitionEffect: tube */
+.fancybox-fx-tube.fancybox-slide--previous {
+  -webkit-transform: translate3d(-100%, 0, 0) scale(0.1) skew(-10deg);
+  transform: translate3d(-100%, 0, 0) scale(0.1) skew(-10deg); }
+
+.fancybox-fx-tube.fancybox-slide--next {
+  -webkit-transform: translate3d(100%, 0, 0) scale(0.1) skew(10deg);
+  transform: translate3d(100%, 0, 0) scale(0.1) skew(10deg); }
+
+.fancybox-fx-tube.fancybox-slide--current {
+  -webkit-transform: translate3d(0, 0, 0) scale(1);
+  transform: translate3d(0, 0, 0) scale(1); }
+
+/* Styling for Small-Screen Devices */
+@media all and (max-width: 800px) {
+  .fancybox-infobar {
+    left: 0;
+    margin-left: 0; }
+  .fancybox-button--left,
+  .fancybox-button--right {
+    display: none !important; }
+  .fancybox-caption {
+    padding: 20px 0;
+    margin: 0; } }
+
+/* Fullscreen  */
+.fancybox-button--fullscreen::before {
+  width: 15px;
+  height: 11px;
+  left: calc(50% - 7px);
+  top: calc(50% - 6px);
+  border: 2px solid;
+  background: none; }
+
+/* Slideshow button */
+.fancybox-button--play::before,
+.fancybox-button--pause::before {
+  top: calc(50% - 6px);
+  left: calc(50% - 4px);
+  background: transparent; }
+
+.fancybox-button--play::before {
+  width: 0;
+  height: 0;
+  border-top: 6px inset transparent;
+  border-bottom: 6px inset transparent;
+  border-left: 10px solid;
+  border-radius: 1px; }
+
+.fancybox-button--pause::before {
+  width: 7px;
+  height: 11px;
+  border-style: solid;
+  border-width: 0 2px 0 2px; }
+
+/* Thumbs */
+.fancybox-thumbs {
+  display: none; }
+
+.fancybox-button--thumbs {
+  display: none; }
+
+@media all and (min-width: 800px) {
+  .fancybox-button--thumbs {
+    display: inline-block; }
+  .fancybox-button--thumbs span {
+    font-size: 23px; }
+  .fancybox-button--thumbs::before {
+    width: 3px;
+    height: 3px;
+    top: calc(50% - 2px);
+    left: calc(50% - 2px);
+    box-shadow: 0 -4px 0, -4px -4px 0, 4px -4px 0, 0 0 0 32px inset, -4px 0 0, 4px 0 0, 0 4px 0, -4px 4px 0, 4px 4px 0; }
+  .fancybox-thumbs {
+    position: absolute;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: auto;
+    width: 220px;
+    margin: 0;
+    padding: 5px 5px 0 0;
+    background: #fff;
+    word-break: normal;
+    -webkit-tap-highlight-color: transparent;
+    -webkit-overflow-scrolling: touch;
+    -ms-overflow-style: -ms-autohiding-scrollbar;
+    box-sizing: border-box;
+    z-index: 99995; }
+  .fancybox-show-thumbs .fancybox-thumbs {
+    display: block; }
+  .fancybox-show-thumbs .fancybox-inner {
+    right: 220px; }
+  .fancybox-thumbs > ul {
+    list-style: none;
+    position: absolute;
+    position: relative;
+    width: 100%;
+    height: 100%;
+    margin: 0;
+    padding: 0;
+    overflow-x: hidden;
+    overflow-y: auto;
+    font-size: 0; }
+  .fancybox-thumbs > ul > li {
+    float: left;
+    overflow: hidden;
+    max-width: 50%;
+    padding: 0;
+    margin: 0;
+    width: 105px;
+    height: 75px;
+    position: relative;
+    cursor: pointer;
+    outline: none;
+    border: 5px solid transparent;
+    border-top-width: 0;
+    border-right-width: 0;
+    -webkit-tap-highlight-color: transparent;
+    -webkit-backface-visibility: hidden;
+    backface-visibility: hidden;
+    box-sizing: border-box; }
+  li.fancybox-thumbs-loading {
+    background: rgba(0, 0, 0, 0.1); }
+  .fancybox-thumbs > ul > li > img {
+    position: absolute;
+    top: 0;
+    left: 0;
+    min-width: 100%;
+    min-height: 100%;
+    max-width: none;
+    max-height: none;
+    -webkit-touch-callout: none;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none; }
+  .fancybox-thumbs > ul > li:before {
+    content: '';
+    position: absolute;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: 0;
+    border-radius: 2px;
+    border: 4px solid #4ea7f9;
+    z-index: 99991;
+    opacity: 0;
+    transition: all 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94); }
+  .fancybox-thumbs > ul > li.fancybox-thumbs-active:before {
+    opacity: 1; } }
diff --git a/wp-content/plugins/woocommerce-chronopost/public/vendor/fancybox/jquery.fancybox.js b/wp-content/plugins/woocommerce-chronopost/public/vendor/fancybox/jquery.fancybox.js
new file mode 100755 (executable)
index 0000000..eb47a7a
--- /dev/null
@@ -0,0 +1,4916 @@
+// ==================================================
+// fancyBox v3.1.20
+//
+// Licensed GPLv3 for open source use
+// or fancyBox Commercial License for commercial use
+//
+// http://fancyapps.com/fancybox/
+// Copyright 2017 fancyApps
+//
+// ==================================================
+;(function (window, document, $, undefined) {
+    'use strict';
+
+    // If there's no jQuery, fancyBox can't work
+    // =========================================
+
+    if ( !$ ) {
+        return;
+    }
+
+    // Check if fancyBox is already initialized
+    // ========================================
+
+    if ( $.fn.fancybox ) {
+
+        $.error('fancyBox already initialized');
+
+        return;
+    }
+
+    // Private default settings
+    // ========================
+
+    var defaults = {
+
+        // Enable infinite gallery navigation
+        loop : false,
+
+        // Space around image, ignored if zoomed-in or viewport smaller than 800px
+        margin : [44, 0],
+
+        // Horizontal space between slides
+        gutter : 50,
+
+        // Enable keyboard navigation
+        keyboard : true,
+
+        // Should display navigation arrows at the screen edges
+        arrows : true,
+
+        // Should display infobar (counter and arrows at the top)
+        infobar : false,
+
+        // Should display toolbar (buttons at the top)
+        toolbar : true,
+
+        // What buttons should appear in the top right corner.
+        // Buttons will be created using templates from `btnTpl` option
+        // and they will be placed into toolbar (class="fancybox-toolbar"` element)
+        buttons : [
+            'slideShow',
+            'fullScreen',
+            'thumbs',
+            'close'
+        ],
+
+        // Detect "idle" time in seconds
+        idleTime : 4,
+
+        // Should display buttons at top right corner of the content
+        // If 'auto' - they will be created for content having type 'html', 'inline' or 'ajax'
+        // Use template from `btnTpl.smallBtn` for customization
+        smallBtn : 'auto',
+
+        // Disable right-click and use simple image protection for images
+        protect : false,
+
+        // Shortcut to make content "modal" - disable keyboard navigtion, hide buttons, etc
+        modal : false,
+
+        image : {
+
+            // Wait for images to load before displaying
+            // Requires predefined image dimensions
+            // If 'auto' - will zoom in thumbnail if 'width' and 'height' attributes are found
+            preload : "auto",
+
+        },
+
+        ajax : {
+
+            // Object containing settings for ajax request
+            settings : {
+
+                // This helps to indicate that request comes from the modal
+                // Feel free to change naming
+                data : {
+                    fancybox : true
+                }
+            }
+
+        },
+
+        iframe : {
+
+            // Iframe template
+            tpl : '<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen allowtransparency="true" src=""></iframe>',
+
+            // Preload iframe before displaying it
+            // This allows to calculate iframe content width and height
+            // (note: Due to "Same Origin Policy", you can't get cross domain data).
+            preload : true,
+
+            // Custom CSS styling for iframe wrapping element
+            // You can use this to set custom iframe dimensions
+            css : {},
+
+            // Iframe tag attributes
+            attr : {
+                scrolling : 'auto'
+            }
+
+        },
+
+        // Open/close animation type
+        // Possible values:
+        //   false            - disable
+        //   "zoom"           - zoom images from/to thumbnail
+        //   "fade"
+        //   "zoom-in-out"
+        //
+        animationEffect : "zoom",
+
+        // Duration in ms for open/close animation
+        animationDuration : 366,
+
+        // Should image change opacity while zooming
+        // If opacity is 'auto', then opacity will be changed if image and thumbnail have different aspect ratios
+        zoomOpacity : 'auto',
+
+        // Transition effect between slides
+        //
+        // Possible values:
+        //   false            - disable
+        //   "fade'
+        //   "slide'
+        //   "circular'
+        //   "tube'
+        //   "zoom-in-out'
+        //   "rotate'
+        //
+        transitionEffect : "fade",
+
+        // Duration in ms for transition animation
+        transitionDuration : 366,
+
+        // Custom CSS class for slide element
+        slideClass : '',
+
+        // Custom CSS class for layout
+        baseClass : '',
+
+        // Base template for layout
+        baseTpl        :
+            '<div class="fancybox-container" role="dialog" tabindex="-1">' +
+                '<div class="fancybox-bg"></div>' +
+                '<div class="fancybox-inner">' +
+                    '<div class="fancybox-infobar">' +
+                        '<button data-fancybox-prev title="{{PREV}}" class="fancybox-button fancybox-button--left"></button>' +
+                        '<div class="fancybox-infobar__body">' +
+                            '<span data-fancybox-index></span>&nbsp;/&nbsp;<span data-fancybox-count></span>' +
+                        '</div>' +
+                        '<button data-fancybox-next title="{{NEXT}}" class="fancybox-button fancybox-button--right"></button>' +
+                    '</div>' +
+                    '<div class="fancybox-toolbar">' +
+                        '{{BUTTONS}}' +
+                    '</div>' +
+                    '<div class="fancybox-navigation">' +
+                        '<button data-fancybox-prev title="{{PREV}}" class="fancybox-arrow fancybox-arrow--left" />' +
+                        '<button data-fancybox-next title="{{NEXT}}" class="fancybox-arrow fancybox-arrow--right" />' +
+                    '</div>' +
+                    '<div class="fancybox-stage"></div>' +
+                    '<div class="fancybox-caption-wrap">' +
+                        '<div class="fancybox-caption"></div>' +
+                    '</div>' +
+                '</div>' +
+            '</div>',
+
+        // Loading indicator template
+        spinnerTpl : '<div class="fancybox-loading"></div>',
+
+        // Error message template
+        errorTpl : '<div class="fancybox-error"><p>{{ERROR}}<p></div>',
+
+        btnTpl : {
+            slideShow  : '<button data-fancybox-play class="fancybox-button fancybox-button--play" title="{{PLAY_START}}"></button>',
+            fullScreen : '<button data-fancybox-fullscreen class="fancybox-button fancybox-button--fullscreen" title="{{FULL_SCREEN}}"></button>',
+            thumbs     : '<button data-fancybox-thumbs class="fancybox-button fancybox-button--thumbs" title="{{THUMBS}}"></button>',
+            close      : '<button data-fancybox-close class="fancybox-button fancybox-button--close" title="{{CLOSE}}"></button>',
+
+            // This small close button will be appended to your html/inline/ajax content by default,
+            // if "smallBtn" option is not set to false
+            smallBtn   : '<button data-fancybox-close class="fancybox-close-small" title="{{CLOSE}}"></button>'
+        },
+
+        // Container is injected into this element
+        parentEl : 'body',
+
+
+        // Focus handling
+        // ==============
+
+        // Try to focus on the first focusable element after opening
+        autoFocus : true,
+
+        // Put focus back to active element after closing
+        backFocus : true,
+
+        // Do not let user to focus on element outside modal content
+        trapFocus : true,
+
+
+        // Module specific options
+        // =======================
+
+        fullScreen : {
+            autoStart : false,
+        },
+
+        touch : {
+            vertical : true,  // Allow to drag content vertically
+            momentum : true   // Continue movement after releasing mouse/touch when panning
+        },
+
+        // Hash value when initializing manually,
+        // set `false` to disable hash change
+        hash : null,
+
+        // Customize or add new media types
+        // Example:
+        /*
+        media : {
+            youtube : {
+                params : {
+                    autoplay : 0
+                }
+            }
+        }
+        */
+        media : {},
+
+        slideShow : {
+            autoStart : false,
+            speed     : 4000
+        },
+
+        thumbs : {
+            autoStart   : false,   // Display thumbnails on opening
+            hideOnClose : true     // Hide thumbnail grid when closing animation starts
+        },
+
+        // Callbacks
+        //==========
+
+        // See Documentation/API/Events for more information
+        // Example:
+        /*
+            afterShow: function( instance, current ) {
+                 console.info( 'Clicked element:' );
+                 console.info( current.opts.$orig );
+            }
+        */
+
+        onInit       : $.noop,  // When instance has been initialized
+
+        beforeLoad   : $.noop,  // Before the content of a slide is being loaded
+        afterLoad    : $.noop,  // When the content of a slide is done loading
+
+        beforeShow   : $.noop,  // Before open animation starts
+        afterShow    : $.noop,  // When content is done loading and animating
+
+        beforeClose  : $.noop,  // Before the instance attempts to close. Return false to cancel the close.
+        afterClose   : $.noop,  // After instance has been closed
+
+        onActivate   : $.noop,  // When instance is brought to front
+        onDeactivate : $.noop,  // When other instance has been activated
+
+
+        // Interaction
+        // ===========
+
+        // Use options below to customize taken action when user clicks or double clicks on the fancyBox area,
+        // each option can be string or method that returns value.
+        //
+        // Possible values:
+        //   "close"           - close instance
+        //   "next"            - move to next gallery item
+        //   "nextOrClose"     - move to next gallery item or close if gallery has only one item
+        //   "toggleControls"  - show/hide controls
+        //   "zoom"            - zoom image (if loaded)
+        //   false             - do nothing
+
+        // Clicked on the content
+        clickContent : function( current, event ) {
+            return current.type === 'image' ? 'zoom' : false;
+        },
+
+        // Clicked on the slide
+        clickSlide : 'close',
+
+        // Clicked on the background (backdrop) element
+        clickOutside : 'close',
+
+        // Same as previous two, but for double click
+        dblclickContent : false,
+        dblclickSlide   : false,
+        dblclickOutside : false,
+
+
+        // Custom options when mobile device is detected
+        // =============================================
+
+        mobile : {
+            clickContent : function( current, event ) {
+                return current.type === 'image' ? 'toggleControls' : false;
+            },
+            clickSlide : function( current, event ) {
+                return current.type === 'image' ? 'toggleControls' : "close";
+            },
+            dblclickContent : function( current, event ) {
+                return current.type === 'image' ? 'zoom' : false;
+            },
+            dblclickSlide : function( current, event ) {
+                return current.type === 'image' ? 'zoom' : false;
+            }
+        },
+
+
+        // Internationalization
+        // ============
+
+        lang : 'en',
+        i18n : {
+            'en' : {
+                CLOSE       : 'Close',
+                NEXT        : 'Next',
+                PREV        : 'Previous',
+                ERROR       : 'The requested content cannot be loaded. <br/> Please try again later.',
+                PLAY_START  : 'Start slideshow',
+                PLAY_STOP   : 'Pause slideshow',
+                FULL_SCREEN : 'Full screen',
+                THUMBS      : 'Thumbnails'
+            },
+            'de' : {
+                CLOSE       : 'Schliessen',
+                NEXT        : 'Weiter',
+                PREV        : 'Zurück',
+                ERROR       : 'Die angeforderten Daten konnten nicht geladen werden. <br/> Bitte versuchen Sie es später nochmal.',
+                PLAY_START  : 'Diaschau starten',
+                PLAY_STOP   : 'Diaschau beenden',
+                FULL_SCREEN : 'Vollbild',
+                THUMBS      : 'Vorschaubilder'
+            }
+        }
+
+    };
+
+    // Few useful variables and methods
+    // ================================
+
+    var $W = $(window);
+    var $D = $(document);
+
+    var called = 0;
+
+
+    // Check if an object is a jQuery object and not a native JavaScript object
+    // ========================================================================
+
+    var isQuery = function ( obj ) {
+        return obj && obj.hasOwnProperty && obj instanceof $;
+    };
+
+
+    // Handle multiple browsers for "requestAnimationFrame" and "cancelAnimationFrame"
+    // ===============================================================================
+
+    var requestAFrame = (function () {
+        return window.requestAnimationFrame ||
+                window.webkitRequestAnimationFrame ||
+                window.mozRequestAnimationFrame ||
+                window.oRequestAnimationFrame ||
+                // if all else fails, use setTimeout
+                function (callback) {
+                    return window.setTimeout(callback, 1000 / 60);
+                };
+    })();
+
+
+    // Detect the supported transition-end event property name
+    // =======================================================
+
+    var transitionEnd = (function () {
+        var t, el = document.createElement("fakeelement");
+
+        var transitions = {
+            "transition"      : "transitionend",
+            "OTransition"     : "oTransitionEnd",
+            "MozTransition"   : "transitionend",
+            "WebkitTransition": "webkitTransitionEnd"
+        };
+
+        for (t in transitions) {
+            if (el.style[t] !== undefined){
+                return transitions[t];
+            }
+        }
+    })();
+
+
+    // Force redraw on an element.
+    // This helps in cases where the browser doesn't redraw an updated element properly.
+    // =================================================================================
+
+    var forceRedraw = function( $el ) {
+        return ( $el && $el.length && $el[0].offsetHeight );
+    };
+
+
+    // Class definition
+    // ================
+
+    var FancyBox = function( content, opts, index ) {
+        var self = this;
+
+        self.opts  = $.extend( true, { index : index }, defaults, opts || {} );
+
+        // Exclude buttons option from deep merging
+        if ( opts && $.isArray( opts.buttons ) ) {
+            self.opts.buttons = opts.buttons;
+        }
+
+        self.id    = self.opts.id || ++called;
+        self.group = [];
+
+        self.currIndex = parseInt( self.opts.index, 10 ) || 0;
+        self.prevIndex = null;
+
+        self.prevPos = null;
+        self.currPos = 0;
+
+        self.firstRun = null;
+
+        // Create group elements from original item collection
+        self.createGroup( content );
+
+        if ( !self.group.length ) {
+            return;
+        }
+
+        // Save last active element and current scroll position
+        self.$lastFocus = $(document.activeElement).blur();
+
+        // Collection of gallery objects
+        self.slides = {};
+
+        self.init( content );
+
+    };
+
+    $.extend(FancyBox.prototype, {
+
+        // Create DOM structure
+        // ====================
+
+        init : function() {
+            var self = this;
+
+            var testWidth, $container, buttonStr;
+
+            var firstItemOpts = self.group[ self.currIndex ].opts;
+
+            self.scrollTop  = $D.scrollTop();
+            self.scrollLeft = $D.scrollLeft();
+
+
+            // Hide scrollbars
+            // ===============
+
+            if ( !$.fancybox.getInstance() && !$.fancybox.isMobile && $( 'body' ).css('overflow') !== 'hidden' ) {
+                testWidth = $( 'body' ).width();
+
+                $( 'html' ).addClass( 'fancybox-enabled' );
+
+                // Compare body width after applying "overflow: hidden"
+                testWidth = $( 'body' ).width() - testWidth;
+
+                // If width has changed - compensate missing scrollbars by adding right margin
+                if ( testWidth > 1 ) {
+                    $( 'head' ).append( '<style id="fancybox-style-noscroll" type="text/css">.compensate-for-scrollbar, .fancybox-enabled body { margin-right: ' + testWidth + 'px; }</style>' );
+                }
+            }
+
+
+            // Build html markup and set references
+            // ====================================
+
+            // Build html code for buttons and insert into main template
+            buttonStr = '';
+
+            $.each( firstItemOpts.buttons, function( index, value ) {
+                buttonStr += ( firstItemOpts.btnTpl[ value ] || '' );
+            });
+
+            // Create markup from base template, it will be initially hidden to
+            // avoid unnecessary work like painting while initializing is not complete
+            $container = $( self.translate( self, firstItemOpts.baseTpl.replace( '\{\{BUTTONS\}\}', buttonStr ) ) )
+                .addClass( 'fancybox-is-hidden' )
+                .attr('id', 'fancybox-container-' + self.id)
+                .addClass( firstItemOpts.baseClass )
+                .data( 'FancyBox', self )
+                .prependTo( firstItemOpts.parentEl );
+
+            // Create object holding references to jQuery wrapped nodes
+            self.$refs = {
+                container : $container
+            };
+
+            [ 'bg', 'inner', 'infobar', 'toolbar', 'stage', 'caption' ].forEach(function(item) {
+                self.$refs[ item ] = $container.find( '.fancybox-' + item );
+            });
+
+            // Check for redundant elements
+            if ( !firstItemOpts.arrows || self.group.length < 2 ) {
+                $container.find('.fancybox-navigation').remove();
+            }
+
+            if ( !firstItemOpts.infobar ) {
+                self.$refs.infobar.remove();
+            }
+
+            if ( !firstItemOpts.toolbar ) {
+                self.$refs.toolbar.remove();
+            }
+
+            self.trigger( 'onInit' );
+
+            // Bring to front and enable events
+            self.activate();
+
+            // Build slides, load and reveal content
+            self.jumpTo( self.currIndex );
+        },
+
+
+        // Simple i18n support - replaces object keys found in template
+        // with corresponding values
+        // ============================================================
+
+        translate : function( obj, str ) {
+            var arr = obj.opts.i18n[ obj.opts.lang ];
+
+            return str.replace(/\{\{(\w+)\}\}/g, function(match, n) {
+                var value = arr[n];
+
+                if ( value === undefined ) {
+                    return match;
+                }
+
+                return value;
+            });
+        },
+
+        // Create array of gally item objects
+        // Check if each object has valid type and content
+        // ===============================================
+
+        createGroup : function ( content ) {
+            var self  = this;
+            var items = $.makeArray( content );
+
+            $.each(items, function( i, item ) {
+                var obj  = {},
+                    opts = {},
+                    data = [],
+                    $item,
+                    type,
+                    src,
+                    srcParts;
+
+                // Step 1 - Make sure we have an object
+                // ====================================
+
+                if ( $.isPlainObject( item ) ) {
+
+                    // We probably have manual usage here, something like
+                    // $.fancybox.open( [ { src : "image.jpg", type : "image" } ] )
+
+                    obj  = item;
+                    opts = item.opts || item;
+
+                } else if ( $.type( item ) === 'object' && $( item ).length ) {
+
+                    // Here we propbably have jQuery collection returned by some selector
+
+                    $item = $( item );
+                    data  = $item.data();
+
+                    opts = 'options' in data ? data.options : {};
+                    opts = $.type( opts ) === 'object' ? opts : {};
+
+                    obj.src  = 'src' in data ? data.src : ( opts.src || $item.attr( 'href' ) );
+
+                    [ 'width', 'height', 'thumb', 'type', 'filter' ].forEach(function(item) {
+                        if ( item in data ) {
+                            opts[ item ] = data[ item ];
+                        }
+                    });
+
+                    if ( 'srcset' in data ) {
+                        opts.image = { srcset : data.srcset };
+                    }
+
+                    opts.$orig = $item;
+
+                    if ( !obj.type && !obj.src ) {
+                        obj.type = 'inline';
+                        obj.src  = item;
+                    }
+
+                } else {
+
+                    // Assume we have a simple html code, for example:
+                    // $.fancybox.open( '<div><h1>Hi!</h1></div>' );
+
+                    obj = {
+                        type : 'html',
+                        src  : item + ''
+                    };
+
+                }
+
+                // Each gallery object has full collection of options
+                obj.opts = $.extend( true, {}, self.opts, opts );
+
+                if ( $.fancybox.isMobile ) {
+                    obj.opts = $.extend( true, {}, obj.opts, obj.opts.mobile );
+                }
+
+
+                // Step 2 - Make sure we have content type, if not - try to guess
+                // ==============================================================
+
+                type = obj.type || obj.opts.type;
+                src  = obj.src || '';
+
+                if ( !type && src ) {
+                    if ( src.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i) ) {
+                        type = 'image';
+
+                    } else if ( src.match(/\.(pdf)((\?|#).*)?$/i) ) {
+                        type = 'pdf';
+
+                    } else if ( src.charAt(0) === '#' ) {
+                        type = 'inline';
+                    }
+                }
+
+                obj.type = type;
+
+
+                // Step 3 - Some adjustments
+                // =========================
+
+                obj.index = self.group.length;
+
+                // Check if $orig and $thumb objects exist
+                if ( obj.opts.$orig && !obj.opts.$orig.length ) {
+                    delete obj.opts.$orig;
+                }
+
+                if ( !obj.opts.$thumb && obj.opts.$orig ) {
+                    obj.opts.$thumb = obj.opts.$orig.find( 'img:first' );
+                }
+
+                if ( obj.opts.$thumb && !obj.opts.$thumb.length ) {
+                    delete obj.opts.$thumb;
+                }
+
+                // Caption is a "special" option, it can be passed as a method
+                if ( $.type( obj.opts.caption ) === 'function' ) {
+                    obj.opts.caption = obj.opts.caption.apply( item, [ self, obj ] );
+
+                } else if ( 'caption' in data ) {
+                    obj.opts.caption = data.caption;
+                }
+
+                // Make sure we have caption as a string
+                obj.opts.caption = obj.opts.caption === undefined ? '' : obj.opts.caption + '';
+
+                // Check if url contains "filter" used to filter the content
+                // Example: "ajax.html #something"
+                if ( type === 'ajax' ) {
+                    srcParts = src.split(/\s+/, 2);
+
+                    if ( srcParts.length > 1 ) {
+                        obj.src = srcParts.shift();
+
+                        obj.opts.filter = srcParts.shift();
+                    }
+                }
+
+                if ( obj.opts.smallBtn == 'auto' ) {
+
+                    if ( $.inArray( type, ['html', 'inline', 'ajax'] ) > -1 ) {
+                        obj.opts.toolbar  = false;
+                        obj.opts.smallBtn = true;
+
+                    } else {
+                        obj.opts.smallBtn = false;
+                    }
+
+                }
+
+                // If the type is "pdf", then simply load file into iframe
+                if ( type === 'pdf' ) {
+                    obj.type = 'iframe';
+
+                    obj.opts.iframe.preload = false;
+                }
+
+                // Hide all buttons and disable interactivity for modal items
+                if ( obj.opts.modal ) {
+
+                    obj.opts = $.extend(true, obj.opts, {
+                        // Remove buttons
+                        infobar : 0,
+                        toolbar : 0,
+
+                        smallBtn : 0,
+
+                        // Disable keyboard navigation
+                        keyboard : 0,
+
+                        // Disable some modules
+                        slideShow  : 0,
+                        fullScreen : 0,
+                        thumbs     : 0,
+                        touch      : 0,
+
+                        // Disable click event handlers
+                        clickContent    : false,
+                        clickSlide      : false,
+                        clickOutside    : false,
+                        dblclickContent : false,
+                        dblclickSlide   : false,
+                        dblclickOutside : false
+                    });
+
+                }
+
+                // Step 4 - Add processed object to group
+                // ======================================
+
+                self.group.push( obj );
+
+            });
+
+        },
+
+
+        // Attach an event handler functions for:
+        //   - navigation buttons
+        //   - browser scrolling, resizing;
+        //   - focusing
+        //   - keyboard
+        //   - detect idle
+        // ======================================
+
+        addEvents : function() {
+            var self = this;
+
+            self.removeEvents();
+
+            // Make navigation elements clickable
+            self.$refs.container.on('click.fb-close', '[data-fancybox-close]', function(e) {
+                e.stopPropagation();
+                e.preventDefault();
+
+                self.close( e );
+
+            }).on( 'click.fb-prev touchend.fb-prev', '[data-fancybox-prev]', function(e) {
+                e.stopPropagation();
+                e.preventDefault();
+
+                self.previous();
+
+            }).on( 'click.fb-next touchend.fb-next', '[data-fancybox-next]', function(e) {
+                e.stopPropagation();
+                e.preventDefault();
+
+                self.next();
+
+            });
+
+
+            // Handle page scrolling and browser resizing
+            $W.on('orientationchange.fb resize.fb', function(e) {
+
+                if ( e && e.originalEvent && e.originalEvent.type === "resize" ) {
+
+                    requestAFrame(function() {
+                        self.update();
+                    });
+
+                } else {
+
+                    self.$refs.stage.hide();
+
+                    setTimeout(function() {
+                        self.$refs.stage.show();
+
+                        self.update();
+                    }, 500);
+
+                }
+
+            });
+
+            // Trap keyboard focus inside of the modal, so the user does not accidentally tab outside of the modal
+            // (a.k.a. "escaping the modal")
+            $D.on('focusin.fb', function(e) {
+                var instance = $.fancybox ? $.fancybox.getInstance() : null;
+
+                if ( instance.isClosing || !instance.current || !instance.current.opts.trapFocus || $( e.target ).hasClass( 'fancybox-container' ) || $( e.target ).is( document ) ) {
+                    return;
+                }
+
+                if ( instance && $( e.target ).css( 'position' ) !== 'fixed' && !instance.$refs.container.has( e.target ).length ) {
+                    e.stopPropagation();
+
+                    instance.focus();
+
+                    // Sometimes page gets scrolled, set it back
+                    $W.scrollTop( self.scrollTop ).scrollLeft( self.scrollLeft );
+                }
+            });
+
+
+            // Enable keyboard navigation
+            $D.on('keydown.fb', function (e) {
+                var current = self.current,
+                    keycode = e.keyCode || e.which;
+
+                if ( !current || !current.opts.keyboard ) {
+                    return;
+                }
+
+                if ( $(e.target).is('input') || $(e.target).is('textarea') ) {
+                    return;
+                }
+
+                // Backspace and Esc keys
+                if ( keycode === 8 || keycode === 27 ) {
+                    e.preventDefault();
+
+                    self.close( e );
+
+                    return;
+                }
+
+                // Left arrow and Up arrow
+                if ( keycode === 37 || keycode === 38 ) {
+                    e.preventDefault();
+
+                    self.previous();
+
+                    return;
+                }
+
+                // Righ arrow and Down arrow
+                if ( keycode === 39 || keycode === 40 ) {
+                    e.preventDefault();
+
+                    self.next();
+
+                    return;
+                }
+
+                self.trigger('afterKeydown', e, keycode);
+            });
+
+
+            // Hide controls after some inactivity period
+            if ( self.group[ self.currIndex ].opts.idleTime ) {
+                self.idleSecondsCounter = 0;
+
+                $D.on('mousemove.fb-idle mouseenter.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle', function() {
+                    self.idleSecondsCounter = 0;
+
+                    if ( self.isIdle ) {
+                        self.showControls();
+                    }
+
+                    self.isIdle = false;
+                });
+
+                self.idleInterval = window.setInterval(function() {
+
+                    self.idleSecondsCounter++;
+
+                    if ( self.idleSecondsCounter >= self.group[ self.currIndex ].opts.idleTime ) {
+                        self.isIdle = true;
+                        self.idleSecondsCounter = 0;
+
+                        self.hideControls();
+                    }
+
+                }, 1000);
+            }
+
+        },
+
+
+        // Remove events added by the core
+        // ===============================
+
+        removeEvents : function () {
+            var self = this;
+
+            $W.off( 'orientationchange.fb resize.fb' );
+            $D.off( 'focusin.fb keydown.fb .fb-idle' );
+
+            this.$refs.container.off( '.fb-close .fb-prev .fb-next' );
+
+            if ( self.idleInterval ) {
+                window.clearInterval( self.idleInterval );
+
+                self.idleInterval = null;
+            }
+        },
+
+
+        // Change to previous gallery item
+        // ===============================
+
+        previous : function( duration ) {
+            return this.jumpTo( this.currPos - 1, duration );
+        },
+
+
+        // Change to next gallery item
+        // ===========================
+
+        next : function( duration ) {
+            return this.jumpTo( this.currPos + 1, duration );
+        },
+
+
+        // Switch to selected gallery item
+        // ===============================
+
+        jumpTo : function ( pos, duration, slide ) {
+            var self = this,
+                firstRun,
+                loop,
+                current,
+                previous,
+                canvasWidth,
+                currentPos,
+                transitionProps;
+
+            var groupLen = self.group.length;
+
+            if ( self.isSliding || self.isClosing || ( self.isAnimating && self.firstRun ) ) {
+                return;
+            }
+
+            pos  = parseInt( pos, 10 );
+            loop = self.current ? self.current.opts.loop : self.opts.loop;
+
+            if ( !loop && ( pos < 0 || pos >= groupLen ) ) {
+                return false;
+            }
+
+            firstRun = self.firstRun = ( self.firstRun === null );
+
+            if ( groupLen < 2 && !firstRun && !!self.isSliding ) {
+                return;
+            }
+
+            previous = self.current;
+
+            self.prevIndex = self.currIndex;
+            self.prevPos   = self.currPos;
+
+            // Create slides
+            current = self.createSlide( pos );
+
+            if ( groupLen > 1 ) {
+                if ( loop || current.index > 0 ) {
+                    self.createSlide( pos - 1 );
+                }
+
+                if ( loop || current.index < groupLen - 1 ) {
+                    self.createSlide( pos + 1 );
+                }
+            }
+
+            self.current   = current;
+            self.currIndex = current.index;
+            self.currPos   = current.pos;
+
+            self.trigger( 'beforeShow', firstRun );
+
+            self.updateControls();
+
+            currentPos = $.fancybox.getTranslate( current.$slide );
+
+            current.isMoved        = ( currentPos.left !== 0 || currentPos.top !== 0 ) && !current.$slide.hasClass( 'fancybox-animated' );
+            current.forcedDuration = undefined;
+
+            if ( $.isNumeric( duration ) ) {
+                current.forcedDuration = duration;
+            } else {
+                duration = current.opts[ firstRun ? 'animationDuration' : 'transitionDuration' ];
+            }
+
+            duration = parseInt( duration, 10 );
+
+            // Fresh start - reveal container, current slide and start loading content
+            if ( firstRun ) {
+
+                if ( current.opts.animationEffect && duration ) {
+                    self.$refs.container.css( 'transition-duration', duration + 'ms' );
+                }
+
+                self.$refs.container.removeClass( 'fancybox-is-hidden' );
+
+                forceRedraw( self.$refs.container );
+
+                self.$refs.container.addClass( 'fancybox-is-open' );
+
+                // Make first slide visible (to display loading icon, if needed)
+                current.$slide.addClass( 'fancybox-slide--current' );
+
+                self.loadSlide( current );
+
+                self.preload();
+
+                return;
+            }
+
+            // Clean up
+            $.each(self.slides, function( index, slide ) {
+                $.fancybox.stop( slide.$slide );
+            });
+
+            // Make current that slide is visible even if content is still loading
+            current.$slide.removeClass( 'fancybox-slide--next fancybox-slide--previous' ).addClass( 'fancybox-slide--current' );
+
+            // If slides have been dragged, animate them to correct position
+            if ( current.isMoved ) {
+                canvasWidth = Math.round( current.$slide.width() );
+
+                $.each(self.slides, function( index, slide ) {
+                    var pos = slide.pos - current.pos;
+
+                    $.fancybox.animate( slide.$slide, {
+                        top  : 0,
+                        left : ( pos * canvasWidth ) + ( pos * slide.opts.gutter )
+                    }, duration, function() {
+
+                        slide.$slide.removeAttr('style').removeClass( 'fancybox-slide--next fancybox-slide--previous' );
+
+                        if ( slide.pos === self.currPos ) {
+                            current.isMoved = false;
+
+                            self.complete();
+                        }
+                    });
+                });
+
+            } else {
+                self.$refs.stage.children().removeAttr( 'style' );
+            }
+
+            // Start transition that reveals current content
+            // or wait when it will be loaded
+
+            if ( current.isLoaded ) {
+                self.revealContent( current );
+
+            } else {
+                self.loadSlide( current );
+            }
+
+            self.preload();
+
+            if ( previous.pos === current.pos ) {
+                return;
+            }
+
+            // Handle previous slide
+            // =====================
+
+            transitionProps = 'fancybox-slide--' + ( previous.pos > current.pos ? 'next' : 'previous' );
+
+            previous.$slide.removeClass( 'fancybox-slide--complete fancybox-slide--current fancybox-slide--next fancybox-slide--previous' );
+
+            previous.isComplete = false;
+
+            if ( !duration || ( !current.isMoved && !current.opts.transitionEffect ) ) {
+                return;
+            }
+
+            if ( current.isMoved ) {
+                previous.$slide.addClass( transitionProps );
+
+            } else {
+
+                transitionProps = 'fancybox-animated ' + transitionProps + ' fancybox-fx-' + current.opts.transitionEffect;
+
+                $.fancybox.animate( previous.$slide, transitionProps, duration, function() {
+                    previous.$slide.removeClass( transitionProps ).removeAttr( 'style' );
+                });
+
+            }
+
+        },
+
+
+        // Create new "slide" element
+        // These are gallery items  that are actually added to DOM
+        // =======================================================
+
+        createSlide : function( pos ) {
+
+            var self = this;
+            var $slide;
+            var index;
+
+            index = pos % self.group.length;
+            index = index < 0 ? self.group.length + index : index;
+
+            if ( !self.slides[ pos ] && self.group[ index ] ) {
+                $slide = $('<div class="fancybox-slide"></div>').appendTo( self.$refs.stage );
+
+                self.slides[ pos ] = $.extend( true, {}, self.group[ index ], {
+                    pos      : pos,
+                    $slide   : $slide,
+                    isLoaded : false,
+                });
+
+                self.updateSlide( self.slides[ pos ] );
+            }
+
+            return self.slides[ pos ];
+        },
+
+
+        // Scale image to the actual size of the image
+        // ===========================================
+
+        scaleToActual : function( x, y, duration ) {
+
+            var self = this;
+
+            var current = self.current;
+            var $what   = current.$content;
+
+            var imgPos, posX, posY, scaleX, scaleY;
+
+            var canvasWidth  = parseInt( current.$slide.width(), 10 );
+            var canvasHeight = parseInt( current.$slide.height(), 10 );
+
+            var newImgWidth  = current.width;
+            var newImgHeight = current.height;
+
+            if ( !( current.type == 'image' && !current.hasError) || !$what || self.isAnimating) {
+                return;
+            }
+
+            $.fancybox.stop( $what );
+
+            self.isAnimating = true;
+
+            x = x === undefined ? canvasWidth  * 0.5  : x;
+            y = y === undefined ? canvasHeight * 0.5  : y;
+
+            imgPos = $.fancybox.getTranslate( $what );
+
+            scaleX  = newImgWidth  / imgPos.width;
+            scaleY  = newImgHeight / imgPos.height;
+
+            // Get center position for original image
+            posX = ( canvasWidth * 0.5  - newImgWidth * 0.5 );
+            posY = ( canvasHeight * 0.5 - newImgHeight * 0.5 );
+
+            // Make sure image does not move away from edges
+            if ( newImgWidth > canvasWidth ) {
+                posX = imgPos.left * scaleX - ( ( x * scaleX ) - x );
+
+                if ( posX > 0 ) {
+                    posX = 0;
+                }
+
+                if ( posX <  canvasWidth - newImgWidth ) {
+                    posX = canvasWidth - newImgWidth;
+                }
+            }
+
+            if ( newImgHeight > canvasHeight) {
+                posY = imgPos.top  * scaleY - ( ( y * scaleY ) - y );
+
+                if ( posY > 0 ) {
+                    posY = 0;
+                }
+
+                if ( posY <  canvasHeight - newImgHeight ) {
+                    posY = canvasHeight - newImgHeight;
+                }
+            }
+
+            self.updateCursor( newImgWidth, newImgHeight );
+
+            $.fancybox.animate( $what, {
+                top    : posY,
+                left   : posX,
+                scaleX : scaleX,
+                scaleY : scaleY
+            }, duration || 330, function() {
+                self.isAnimating = false;
+            });
+
+            // Stop slideshow
+            if ( self.SlideShow && self.SlideShow.isActive ) {
+                self.SlideShow.stop();
+            }
+        },
+
+
+        // Scale image to fit inside parent element
+        // ========================================
+
+        scaleToFit : function( duration ) {
+
+            var self = this;
+
+            var current = self.current;
+            var $what   = current.$content;
+            var end;
+
+            if ( !( current.type == 'image' && !current.hasError) || !$what || self.isAnimating ) {
+                return;
+            }
+
+            $.fancybox.stop( $what );
+
+            self.isAnimating = true;
+
+            end = self.getFitPos( current );
+
+            self.updateCursor( end.width, end.height );
+
+            $.fancybox.animate( $what, {
+                top    : end.top,
+                left   : end.left,
+                scaleX : end.width  / $what.width(),
+                scaleY : end.height / $what.height()
+            }, duration || 330, function() {
+                self.isAnimating = false;
+            });
+
+        },
+
+        // Calculate image size to fit inside viewport
+        // ===========================================
+
+        getFitPos : function( slide ) {
+            var self  = this;
+            var $what = slide.$content;
+
+            var imgWidth  = slide.width;
+            var imgHeight = slide.height;
+
+            var margin = slide.opts.margin;
+
+            var canvasWidth, canvasHeight, minRatio, width, height;
+
+            if ( !$what || !$what.length || ( !imgWidth && !imgHeight) ) {
+                return false;
+            }
+
+            // Convert "margin to CSS style: [ top, right, bottom, left ]
+            if ( $.type( margin ) === "number" ) {
+                margin = [ margin, margin ];
+            }
+
+            if ( margin.length == 2 ) {
+                margin = [ margin[0], margin[1], margin[0], margin[1] ];
+            }
+
+            if ( $W.width() < 800 ) {
+                margin = [ 0, 0, 0, 0 ];
+            }
+
+            // We can not use $slide width here, because it can have different diemensions while in transiton
+            canvasWidth  = parseInt( self.$refs.stage.width(), 10 )  - ( margin[ 1 ] + margin[ 3 ] );
+            canvasHeight = parseInt( self.$refs.stage.height(), 10 ) - ( margin[ 0 ] + margin[ 2 ] );
+
+            minRatio = Math.min(1, canvasWidth / imgWidth, canvasHeight / imgHeight );
+
+            width  = Math.floor( minRatio * imgWidth );
+            height = Math.floor( minRatio * imgHeight );
+
+            // Use floor rounding to make sure it really fits
+            return {
+                top    : Math.floor( ( canvasHeight - height ) * 0.5 ) + margin[ 0 ],
+                left   : Math.floor( ( canvasWidth  - width )  * 0.5 ) + margin[ 3 ],
+                width  : width,
+                height : height
+            };
+
+        },
+
+
+        // Update position and content of all slides
+        // =========================================
+
+        update : function() {
+
+            var self = this;
+
+            $.each( self.slides, function( key, slide ) {
+                self.updateSlide( slide );
+            });
+
+        },
+
+
+        // Update slide position and scale content to fit
+        // ==============================================
+
+        updateSlide : function( slide ) {
+
+            var self  = this;
+            var $what = slide.$content;
+
+            if ( $what && ( slide.width || slide.height ) ) {
+                $.fancybox.stop( $what );
+
+                $.fancybox.setTranslate( $what, self.getFitPos( slide ) );
+
+                if ( slide.pos === self.currPos ) {
+                    self.updateCursor();
+                }
+            }
+
+            slide.$slide.trigger( 'refresh' );
+
+            self.trigger( 'onUpdate', slide );
+
+        },
+
+        // Update cursor style depending if content can be zoomed
+        // ======================================================
+
+        updateCursor : function( nextWidth, nextHeight ) {
+
+            var self = this;
+            var isScaledDown;
+
+            var $container = self.$refs.container.removeClass('fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-drag fancybox-can-zoomOut');
+
+            if ( !self.current || self.isClosing ) {
+                return;
+            }
+
+            if ( self.isZoomable() ) {
+
+                $container.addClass( 'fancybox-is-zoomable' );
+
+                if ( nextWidth !== undefined && nextHeight !== undefined ) {
+                    isScaledDown = nextWidth < self.current.width && nextHeight < self.current.height;
+
+                } else {
+                    isScaledDown = self.isScaledDown();
+                }
+
+                if ( isScaledDown ) {
+
+                    // If image is scaled down, then, obviously, it can be zoomed to full size
+                    $container.addClass('fancybox-can-zoomIn');
+
+                } else {
+
+                    if ( self.current.opts.touch ) {
+
+                        // If image size ir largen than available available and touch module is not disable,
+                        // then user can do panning
+                        $container.addClass('fancybox-can-drag');
+
+                    } else {
+                        $container.addClass('fancybox-can-zoomOut');
+                    }
+
+                }
+
+            } else if ( self.current.opts.touch ) {
+                $container.addClass('fancybox-can-drag');
+            }
+
+        },
+
+
+        // Check if current slide is zoomable
+        // ==================================
+
+        isZoomable : function() {
+
+            var self = this;
+
+            var current = self.current;
+            var fitPos;
+
+            if ( !current || self.isClosing ) {
+                return;
+            }
+
+            // Assume that slide is zoomable if
+            //   - image is loaded successfuly
+            //   - click action is "zoom"
+            //   - actual size of the image is smaller than available area
+            if ( current.type === 'image' && current.isLoaded && !current.hasError &&
+                ( current.opts.clickContent === 'zoom' || ( $.isFunction( current.opts.clickContent ) && current.opts.clickContent( current ) ===  "zoom" ) )
+            ) {
+
+                fitPos = self.getFitPos( current );
+
+                if ( current.width > fitPos.width || current.height > fitPos.height ) {
+                    return true;
+                }
+
+            }
+
+            return false;
+
+        },
+
+
+        // Check if current image dimensions are smaller than actual
+        // =========================================================
+
+        isScaledDown : function() {
+
+            var self = this;
+
+            var current = self.current;
+            var $what   = current.$content;
+
+            var rez = false;
+
+            if ( $what ) {
+                rez = $.fancybox.getTranslate( $what );
+                rez = rez.width < current.width || rez.height < current.height;
+            }
+
+            return rez;
+
+        },
+
+
+        // Check if image dimensions exceed parent element
+        // ===============================================
+
+        canPan : function() {
+
+            var self = this;
+
+            var current = self.current;
+            var $what   = current.$content;
+
+            var rez = false;
+
+            if ( $what ) {
+                rez = self.getFitPos( current );
+                rez = Math.abs( $what.width() - rez.width ) > 1  || Math.abs( $what.height() - rez.height ) > 1;
+
+            }
+
+            return rez;
+
+        },
+
+
+        // Load content into the slide
+        // ===========================
+
+        loadSlide : function( slide ) {
+
+            var self = this, type, $slide;
+            var ajaxLoad;
+
+            if ( slide.isLoading ) {
+                return;
+            }
+
+            if ( slide.isLoaded ) {
+                return;
+            }
+
+            slide.isLoading = true;
+
+            self.trigger( 'beforeLoad', slide );
+
+            type   = slide.type;
+            $slide = slide.$slide;
+
+            $slide
+                .off( 'refresh' )
+                .trigger( 'onReset' )
+                .addClass( 'fancybox-slide--' + ( type || 'unknown' ) )
+                .addClass( slide.opts.slideClass );
+
+            // Create content depending on the type
+
+            switch ( type ) {
+
+                case 'image':
+
+                    self.setImage( slide );
+
+                break;
+
+                case 'iframe':
+
+                    self.setIframe( slide );
+
+                break;
+
+                case 'html':
+
+                    self.setContent( slide, slide.src || slide.content );
+
+                break;
+
+                case 'inline':
+
+                    if ( $( slide.src ).length ) {
+                        self.setContent( slide, $( slide.src ) );
+
+                    } else {
+                        self.setError( slide );
+                    }
+
+                break;
+
+                case 'ajax':
+
+                    self.showLoading( slide );
+
+                    ajaxLoad = $.ajax( $.extend( {}, slide.opts.ajax.settings, {
+                        url : slide.src,
+                        success : function ( data, textStatus ) {
+
+                            if ( textStatus === 'success' ) {
+                                self.setContent( slide, data );
+                            }
+
+                        },
+                        error : function ( jqXHR, textStatus ) {
+
+                            if ( jqXHR && textStatus !== 'abort' ) {
+                                self.setError( slide );
+                            }
+
+                        }
+                    }));
+
+                    $slide.one( 'onReset', function () {
+                        ajaxLoad.abort();
+                    });
+
+                break;
+
+                default:
+
+                    self.setError( slide );
+
+                break;
+
+            }
+
+            return true;
+
+        },
+
+
+        // Use thumbnail image, if possible
+        // ================================
+
+        setImage : function( slide ) {
+
+            var self   = this;
+            var srcset = slide.opts.image.srcset;
+
+            var found, temp, pxRatio, windowWidth;
+
+            // If we have "srcset", then we need to find matching "src" value.
+            // This is necessary, because when you set an src attribute, the browser will preload the image
+            // before any javascript or even CSS is applied.
+            if ( srcset ) {
+                pxRatio     = window.devicePixelRatio || 1;
+                windowWidth = window.innerWidth  * pxRatio;
+
+                temp = srcset.split(',').map(function ( el ) {
+                       var ret = {};
+
+                       el.trim().split(/\s+/).forEach(function ( el, i ) {
+                        var value = parseInt( el.substring(0, el.length - 1), 10 );
+
+                               if ( i === 0 ) {
+                                       return ( ret.url = el );
+                               }
+
+                        if ( value ) {
+                            ret.value   = value;
+                            ret.postfix = el[ el.length - 1 ];
+                        }
+
+                       });
+
+                       return ret;
+               });
+
+                // Sort by value
+                temp.sort(function (a, b) {
+                  return a.value - b.value;
+                });
+
+                // Ok, now we have an array of all srcset values
+                for ( var j = 0; j < temp.length; j++ ) {
+                    var el = temp[ j ];
+
+                    if ( ( el.postfix === 'w' && el.value >= windowWidth ) || ( el.postfix === 'x' && el.value >= pxRatio ) ) {
+                        found = el;
+                        break;
+                    }
+                }
+
+                // If not found, take the last one
+                if ( !found && temp.length ) {
+                    found = temp[ temp.length - 1 ];
+                }
+
+                if ( found ) {
+                    slide.src = found.url;
+
+                    // If we have default width/height values, we can calculate height for matching source
+                    if ( slide.width && slide.height && found.postfix == 'w' ) {
+                        slide.height = ( slide.width / slide.height ) * found.value;
+                        slide.width  = found.value;
+                    }
+                }
+            }
+
+            // This will be wrapper containing both ghost and actual image
+            slide.$content = $('<div class="fancybox-image-wrap"></div>')
+                .addClass( 'fancybox-is-hidden' )
+                .appendTo( slide.$slide );
+
+
+            // If we have a thumbnail, we can display it while actual image is loading
+            // Users will not stare at black screen and actual image will appear gradually
+            if ( slide.opts.preload !== false && slide.opts.width && slide.opts.height && ( slide.opts.thumb || slide.opts.$thumb ) ) {
+
+                slide.width  = slide.opts.width;
+                slide.height = slide.opts.height;
+
+                slide.$ghost = $('<img />')
+                    .one('error', function() {
+
+                        $(this).remove();
+
+                        slide.$ghost = null;
+
+                        self.setBigImage( slide );
+
+                    })
+                    .one('load', function() {
+
+                        self.afterLoad( slide );
+
+                        self.setBigImage( slide );
+
+                    })
+                    .addClass( 'fancybox-image' )
+                    .appendTo( slide.$content )
+                    .attr( 'src', slide.opts.thumb || slide.opts.$thumb.attr( 'src' ) );
+
+            } else {
+
+                self.setBigImage( slide );
+
+            }
+
+        },
+
+
+        // Create full-size image
+        // ======================
+
+        setBigImage : function ( slide ) {
+            var self = this;
+            var $img = $('<img />');
+
+            slide.$image = $img
+                .one('error', function() {
+
+                    self.setError( slide );
+
+                })
+                .one('load', function() {
+
+                    // Clear timeout that checks if loading icon needs to be displayed
+                    clearTimeout( slide.timouts );
+
+                    slide.timouts = null;
+
+                    if ( self.isClosing ) {
+                        return;
+                    }
+
+                    slide.width  = this.naturalWidth;
+                    slide.height = this.naturalHeight;
+
+                    if ( slide.opts.image.srcset ) {
+                        $img.attr( 'sizes', '100vw' ).attr( 'srcset', slide.opts.image.srcset );
+                    }
+
+                    self.hideLoading( slide );
+
+                    if ( slide.$ghost ) {
+
+                        slide.timouts = setTimeout(function() {
+                            slide.timouts = null;
+
+                            slide.$ghost.hide();
+
+                        }, Math.min( 300, Math.max( 1000, slide.height / 1600 ) ) );
+
+                    } else {
+                        self.afterLoad( slide );
+                    }
+
+                })
+                .addClass( 'fancybox-image' )
+                .attr('src', slide.src)
+                .appendTo( slide.$content );
+
+            if ( $img[0].complete ) {
+                  $img.trigger( 'load' );
+
+            } else if( $img[0].error ) {
+                 $img.trigger( 'error' );
+
+            } else {
+
+                slide.timouts = setTimeout(function() {
+                    if ( !$img[0].complete && !slide.hasError ) {
+                        self.showLoading( slide );
+                    }
+
+                }, 100);
+
+            }
+
+        },
+
+
+        // Create iframe wrapper, iframe and bindings
+        // ==========================================
+
+        setIframe : function( slide ) {
+            var self   = this,
+                opts    = slide.opts.iframe,
+                $slide = slide.$slide,
+                $iframe;
+
+            slide.$content = $('<div class="fancybox-content' + ( opts.preload ? ' fancybox-is-hidden' : '' ) + '"></div>')
+                .css( opts.css )
+                .appendTo( $slide );
+
+            $iframe = $( opts.tpl.replace(/\{rnd\}/g, new Date().getTime()) )
+                .attr( opts.attr )
+                .appendTo( slide.$content );
+
+            if ( opts.preload ) {
+
+                self.showLoading( slide );
+
+                // Unfortunately, it is not always possible to determine if iframe is successfully loaded
+                // (due to browser security policy)
+
+                $iframe.on('load.fb error.fb', function(e) {
+                    this.isReady = 1;
+
+                    slide.$slide.trigger( 'refresh' );
+
+                    self.afterLoad( slide );
+                });
+
+                // Recalculate iframe content size
+                // ===============================
+
+                $slide.on('refresh.fb', function() {
+                    var $wrap = slide.$content,
+                        $contents,
+                        $body,
+                        scrollWidth,
+                        frameWidth,
+                        frameHeight;
+
+                    if ( $iframe[0].isReady !== 1 ) {
+                        return;
+                    }
+
+                    // Check if content is accessible,
+                    // it will fail if frame is not with the same origin
+
+                    try {
+                        $contents = $iframe.contents();
+                        $body     = $contents.find('body');
+
+                    } catch (ignore) {}
+
+                    // Calculate dimensions for the wrapper
+                    if ( $body && $body.length && !( opts.css.width !== undefined && opts.css.height !== undefined ) ) {
+
+                        scrollWidth = $iframe[0].contentWindow.document.documentElement.scrollWidth;
+
+                        frameWidth     = Math.ceil( $body.outerWidth(true) + ( $wrap.width() - scrollWidth ) );
+                        frameHeight    = Math.ceil( $body.outerHeight(true) );
+
+                        // Resize wrapper to fit iframe content
+                        $wrap.css({
+                            'width'  : opts.css.width  === undefined ? frameWidth  + ( $wrap.outerWidth()  - $wrap.innerWidth() )  : opts.css.width,
+                            'height' : opts.css.height === undefined ? frameHeight + ( $wrap.outerHeight() - $wrap.innerHeight() ) : opts.css.height
+                        });
+
+                    }
+
+                    $wrap.removeClass( 'fancybox-is-hidden' );
+
+                });
+
+            } else {
+
+                this.afterLoad( slide );
+
+            }
+
+            $iframe.attr( 'src', slide.src );
+
+            if ( slide.opts.smallBtn === true ) {
+                slide.$content.prepend( self.translate( slide, slide.opts.btnTpl.smallBtn ) );
+            }
+
+            // Remove iframe if closing or changing gallery item
+            $slide.one( 'onReset', function () {
+
+                // This helps IE not to throw errors when closing
+                try {
+
+                    $( this ).find( 'iframe' ).hide().attr( 'src', '//about:blank' );
+
+                } catch ( ignore ) {}
+
+                $( this ).empty();
+
+                slide.isLoaded = false;
+
+            });
+
+        },
+
+
+        // Wrap and append content to the slide
+        // ======================================
+
+        setContent : function ( slide, content ) {
+
+            var self = this;
+
+            if ( self.isClosing ) {
+                return;
+            }
+
+            self.hideLoading( slide );
+
+            slide.$slide.empty();
+
+            if ( isQuery( content ) && content.parent().length ) {
+
+                // If content is a jQuery object, then it will be moved to the slide.
+                // The placeholder is created so we will know where to put it back.
+                // If user is navigating gallery fast, then the content might be already inside fancyBox
+                // =====================================================================================
+
+                // Make sure content is not already moved to fancyBox
+                content.parent( '.fancybox-slide--inline' ).trigger( 'onReset' );
+
+                // Create temporary element marking original place of the content
+                slide.$placeholder = $( '<div></div>' ).hide().insertAfter( content );
+
+                // Make sure content is visible
+                content.css('display', 'inline-block');
+
+            } else if ( !slide.hasError ) {
+
+                // If content is just a plain text, try to convert it to html
+                if ( $.type( content ) === 'string' ) {
+                    content = $('<div>').append( $.trim( content ) ).contents();
+
+                    // If we have text node, then add wrapping element to make vertical alignment work
+                    if ( content[0].nodeType === 3 ) {
+                        content = $('<div>').html( content );
+                    }
+                }
+
+                // If "filter" option is provided, then filter content
+                if ( slide.opts.filter ) {
+                    content = $('<div>').html( content ).find( slide.opts.filter );
+                }
+
+            }
+
+            slide.$slide.one('onReset', function () {
+
+                // Put content back
+                if ( slide.$placeholder ) {
+                    slide.$placeholder.after( content.hide() ).remove();
+
+                    slide.$placeholder = null;
+                }
+
+                // Remove custom close button
+                if ( slide.$smallBtn ) {
+                    slide.$smallBtn.remove();
+
+                    slide.$smallBtn = null;
+                }
+
+                // Remove content and mark slide as not loaded
+                if ( !slide.hasError ) {
+                    $(this).empty();
+
+                    slide.isLoaded = false;
+                }
+
+            });
+
+            slide.$content = $( content ).appendTo( slide.$slide );
+
+            if ( slide.opts.smallBtn && !slide.$smallBtn ) {
+                slide.$smallBtn = $( self.translate( slide, slide.opts.btnTpl.smallBtn ) ).appendTo( slide.$content );
+            }
+
+            this.afterLoad( slide );
+        },
+
+        // Display error message
+        // =====================
+
+        setError : function ( slide ) {
+
+            slide.hasError = true;
+
+            slide.$slide.removeClass( 'fancybox-slide--' + slide.type );
+
+            this.setContent( slide, this.translate( slide, slide.opts.errorTpl ) );
+
+        },
+
+
+        // Show loading icon inside the slide
+        // ==================================
+
+        showLoading : function( slide ) {
+
+            var self = this;
+
+            slide = slide || self.current;
+
+            if ( slide && !slide.$spinner ) {
+                slide.$spinner = $( self.opts.spinnerTpl ).appendTo( slide.$slide );
+            }
+
+        },
+
+        // Remove loading icon from the slide
+        // ==================================
+
+        hideLoading : function( slide ) {
+
+            var self = this;
+
+            slide = slide || self.current;
+
+            if ( slide && slide.$spinner ) {
+                slide.$spinner.remove();
+
+                delete slide.$spinner;
+            }
+
+        },
+
+
+        // Adjustments after slide content has been loaded
+        // ===============================================
+
+        afterLoad : function( slide ) {
+
+            var self = this;
+
+            if ( self.isClosing ) {
+                return;
+            }
+
+            slide.isLoading = false;
+            slide.isLoaded  = true;
+
+            self.trigger( 'afterLoad', slide );
+
+            self.hideLoading( slide );
+
+            if ( slide.opts.protect && slide.$content && !slide.hasError ) {
+
+                // Disable right click
+                slide.$content.on( 'contextmenu.fb', function( e ) {
+                     if ( e.button == 2 ) {
+                         e.preventDefault();
+                     }
+
+                    return true;
+                });
+
+                // Add fake element on top of the image
+                // This makes a bit harder for user to select image
+                if ( slide.type === 'image' ) {
+                    $( '<div class="fancybox-spaceball"></div>' ).appendTo( slide.$content );
+                }
+
+            }
+
+            self.revealContent( slide );
+
+        },
+
+
+        // Make content visible
+        // This method is called right after content has been loaded or
+        // user navigates gallery and transition should start
+        // ============================================================
+
+        revealContent : function( slide ) {
+
+            var self   = this;
+            var $slide = slide.$slide;
+
+            var effect, effectClassName, duration, opacity, end, start = false;
+
+            effect   = slide.opts[ self.firstRun ? 'animationEffect'   : 'transitionEffect' ];
+            duration = slide.opts[ self.firstRun ? 'animationDuration' : 'transitionDuration' ];
+
+            duration = parseInt( slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10 );
+
+            if ( slide.isMoved || slide.pos !== self.currPos || !duration ) {
+                effect = false;
+            }
+
+            // Check if can zoom
+            if ( effect === 'zoom' && !( slide.pos === self.currPos && duration && slide.type === 'image' && !slide.hasError && ( start = self.getThumbPos( slide ) ) ) ) {
+                effect = 'fade';
+            }
+
+
+            // Zoom animation
+            // ==============
+
+            if ( effect === 'zoom' ) {
+                end = self.getFitPos( slide );
+
+                end.scaleX = Math.round( (end.width  / start.width)  * 100 ) / 100;
+                end.scaleY = Math.round( (end.height / start.height) * 100 ) / 100;
+
+                delete end.width;
+                delete end.height;
+
+                // Check if we need to animate opacity
+                opacity = slide.opts.zoomOpacity;
+
+                if ( opacity == 'auto' ) {
+                    opacity = Math.abs( slide.width / slide.height - start.width / start.height ) > 0.1;
+                }
+
+                if ( opacity ) {
+                    start.opacity = 0.1;
+                    end.opacity   = 1;
+                }
+
+                // Draw image at start position
+                $.fancybox.setTranslate( slide.$content.removeClass( 'fancybox-is-hidden' ), start );
+
+                forceRedraw( slide.$content );
+
+                // Start animation
+                $.fancybox.animate( slide.$content, end, duration, function() {
+                    self.complete();
+                });
+
+                return;
+            }
+
+
+            self.updateSlide( slide );
+
+
+            // Simply show content
+            // ===================
+
+            if ( !effect ) {
+                forceRedraw( $slide );
+
+                slide.$content.removeClass( 'fancybox-is-hidden' );
+
+                if ( slide.pos === self.currPos ) {
+                    self.complete();
+                }
+
+                return;
+            }
+
+            $.fancybox.stop( $slide );
+
+            effectClassName = 'fancybox-animated fancybox-slide--' + ( slide.pos > self.prevPos ? 'next' : 'previous' ) + ' fancybox-fx-' + effect;
+
+            $slide.removeAttr( 'style' ).removeClass( 'fancybox-slide--current fancybox-slide--next fancybox-slide--previous' ).addClass( effectClassName );
+
+            slide.$content.removeClass( 'fancybox-is-hidden' );
+
+            //Force reflow for CSS3 transitions
+            forceRedraw( $slide );
+
+            $.fancybox.animate( $slide, 'fancybox-slide--current', duration, function(e) {
+                $slide.removeClass( effectClassName ).removeAttr( 'style' );
+
+                if ( slide.pos === self.currPos ) {
+                    self.complete();
+                }
+
+            }, true);
+
+        },
+
+
+        // Check if we can and have to zoom from thumbnail
+        //================================================
+
+        getThumbPos : function( slide ) {
+
+            var self = this;
+            var rez  = false;
+
+            // Check if element is inside the viewport by at least 1 pixel
+            var isElementVisible = function( $el ) {
+                var element = $el[0];
+
+                var elementRect = element.getBoundingClientRect();
+                var parentRects = [];
+
+                var visibleInAllParents;
+
+                while ( element.parentElement !== null ) {
+                    if ( $(element.parentElement).css('overflow') === 'hidden'  || $(element.parentElement).css('overflow') === 'auto' ) {
+                        parentRects.push(element.parentElement.getBoundingClientRect());
+                    }
+
+                    element = element.parentElement;
+                }
+
+                visibleInAllParents = parentRects.every(function(parentRect){
+                    var visiblePixelX = Math.min(elementRect.right, parentRect.right) - Math.max(elementRect.left, parentRect.left);
+                    var visiblePixelY = Math.min(elementRect.bottom, parentRect.bottom) - Math.max(elementRect.top, parentRect.top);
+
+                    return visiblePixelX > 0 && visiblePixelY > 0;
+                });
+
+                return visibleInAllParents &&
+                    elementRect.bottom > 0 && elementRect.right > 0 &&
+                    elementRect.left < $(window).width() && elementRect.top < $(window).height();
+            };
+
+            var $thumb   = slide.opts.$thumb;
+            var thumbPos = $thumb ? $thumb.offset() : 0;
+            var slidePos;
+
+            if ( thumbPos && $thumb[0].ownerDocument === document && isElementVisible( $thumb ) ) {
+                slidePos = self.$refs.stage.offset();
+
+                rez = {
+                    top    : thumbPos.top  - slidePos.top  + parseFloat( $thumb.css( "border-top-width" ) || 0 ),
+                    left   : thumbPos.left - slidePos.left + parseFloat( $thumb.css( "border-left-width" ) || 0 ),
+                    width  : $thumb.width(),
+                    height : $thumb.height(),
+                    scaleX : 1,
+                    scaleY : 1
+                };
+            }
+
+            return rez;
+        },
+
+
+        // Final adjustments after current gallery item is moved to position
+        // and it`s content is loaded
+        // ==================================================================
+
+        complete : function() {
+
+            var self = this;
+
+            var current = self.current;
+            var slides  = {};
+
+            if ( current.isMoved || !current.isLoaded || current.isComplete ) {
+                return;
+            }
+
+            current.isComplete = true;
+
+            current.$slide.siblings().trigger( 'onReset' );
+
+            // Trigger any CSS3 transiton inside the slide
+            forceRedraw( current.$slide );
+
+            current.$slide.addClass( 'fancybox-slide--complete' );
+
+            // Remove unnecessary slides
+            $.each( self.slides, function( key, slide ) {
+                if ( slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1 ) {
+                    slides[ slide.pos ] = slide;
+
+                } else if ( slide ) {
+
+                    $.fancybox.stop( slide.$slide );
+
+                    slide.$slide.unbind().remove();
+                }
+            });
+
+            self.slides = slides;
+
+            self.updateCursor();
+
+            self.trigger( 'afterShow' );
+
+            // Try to focus on the first focusable element
+            if ( $( document.activeElement ).is( '[disabled]' ) || ( current.opts.autoFocus && !( current.type == 'image' || current.type === 'iframe' ) ) ) {
+                self.focus();
+            }
+
+        },
+
+
+        // Preload next and previous slides
+        // ================================
+
+        preload : function() {
+            var self = this;
+            var next, prev;
+
+            if ( self.group.length < 2 ) {
+                return;
+            }
+
+            next  = self.slides[ self.currPos + 1 ];
+            prev  = self.slides[ self.currPos - 1 ];
+
+            if ( next && next.type === 'image' ) {
+                self.loadSlide( next );
+            }
+
+            if ( prev && prev.type === 'image' ) {
+                self.loadSlide( prev );
+            }
+
+        },
+
+
+        // Try to find and focus on the first focusable element
+        // ====================================================
+
+        focus : function() {
+            var current = this.current;
+            var $el;
+
+            if ( this.isClosing ) {
+                return;
+            }
+
+            // Skip for images and iframes
+            $el = current && current.isComplete ? current.$slide.find('button,:input,[tabindex],a').filter(':not([disabled]):visible:first') : null;
+            $el = $el && $el.length ? $el : this.$refs.container;
+
+            $el.focus();
+        },
+
+
+        // Activates current instance - brings container to the front and enables keyboard,
+        // notifies other instances about deactivating
+        // =================================================================================
+
+        activate : function () {
+            var self = this;
+
+            // Deactivate all instances
+            $( '.fancybox-container' ).each(function () {
+                var instance = $(this).data( 'FancyBox' );
+
+                // Skip self and closing instances
+                if (instance && instance.uid !== self.uid && !instance.isClosing) {
+                    instance.trigger( 'onDeactivate' );
+                }
+
+            });
+
+            if ( self.current ) {
+                if ( self.$refs.container.index() > 0 ) {
+                    self.$refs.container.prependTo( document.body );
+                }
+
+                self.updateControls();
+            }
+
+            self.trigger( 'onActivate' );
+
+            self.addEvents();
+
+        },
+
+
+        // Start closing procedure
+        // This will start "zoom-out" animation if needed and clean everything up afterwards
+        // =================================================================================
+
+        close : function( e, d ) {
+
+            var self    = this;
+            var current = self.current;
+
+            var effect, duration;
+            var $what, opacity, start, end;
+
+            var done = function() {
+                self.cleanUp( e );
+            };
+
+            if ( self.isClosing ) {
+                return false;
+            }
+
+            self.isClosing = true;
+
+            // If beforeClose callback prevents closing, make sure content is centered
+            if ( self.trigger( 'beforeClose', e ) === false ) {
+                self.isClosing = false;
+
+                requestAFrame(function() {
+                    self.update();
+                });
+
+                return false;
+            }
+
+            // Remove all events
+            // If there are multiple instances, they will be set again by "activate" method
+            self.removeEvents();
+
+            if ( current.timouts ) {
+                clearTimeout( current.timouts );
+            }
+
+            $what    = current.$content;
+            effect   = current.opts.animationEffect;
+            duration = $.isNumeric( d ) ? d : ( effect ? current.opts.animationDuration : 0 );
+
+            // Remove other slides
+            current.$slide.off( transitionEnd ).removeClass( 'fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated' );
+
+            current.$slide.siblings().trigger( 'onReset' ).remove();
+
+            // Trigger animations
+            if ( duration ) {
+                self.$refs.container.removeClass( 'fancybox-is-open' ).addClass( 'fancybox-is-closing' );
+            }
+
+            // Clean up
+            self.hideLoading( current );
+
+            self.hideControls();
+
+            self.updateCursor();
+
+            // Check if possible to zoom-out
+            if ( effect === 'zoom' && !( e !== true && $what && duration && current.type === 'image' && !current.hasError && ( end = self.getThumbPos( current ) ) ) ) {
+                effect = 'fade';
+            }
+
+            if ( effect === 'zoom' ) {
+                $.fancybox.stop( $what );
+
+                start = $.fancybox.getTranslate( $what );
+
+                start.width  = start.width  * start.scaleX;
+                start.height = start.height * start.scaleY;
+
+                // Check if we need to animate opacity
+                opacity = current.opts.zoomOpacity;
+
+                if ( opacity == 'auto' ) {
+                    opacity = Math.abs( current.width / current.height - end.width / end.height ) > 0.1;
+                }
+
+                if ( opacity ) {
+                    end.opacity = 0;
+                }
+
+                start.scaleX = start.width  / end.width;
+                start.scaleY = start.height / end.height;
+
+                start.width  = end.width;
+                start.height = end.height;
+
+                $.fancybox.setTranslate( current.$content, start );
+
+                $.fancybox.animate( current.$content, end, duration, done );
+
+                return true;
+            }
+
+            if ( effect && duration ) {
+
+                // If skip animation
+                if ( e === true ) {
+                    setTimeout( done, duration );
+
+                } else {
+                    $.fancybox.animate( current.$slide.removeClass( 'fancybox-slide--current' ), 'fancybox-animated fancybox-slide--previous fancybox-fx-' + effect, duration, done );
+                }
+
+            } else {
+                done();
+            }
+
+            return true;
+        },
+
+
+        // Final adjustments after removing the instance
+        // =============================================
+
+        cleanUp : function( e ) {
+            var self = this,
+                instance;
+
+            self.current.$slide.trigger( 'onReset' );
+
+            self.$refs.container.empty().remove();
+
+            self.trigger( 'afterClose', e );
+
+            // Place back focus
+            if ( self.$lastFocus && !!!self.current.focusBack ) {
+                self.$lastFocus.focus();
+            }
+
+            self.current = null;
+
+            // Check if there are other instances
+            instance = $.fancybox.getInstance();
+
+            if ( instance ) {
+                instance.activate();
+
+            } else {
+
+                $W.scrollTop( self.scrollTop ).scrollLeft( self.scrollLeft );
+
+                $( 'html' ).removeClass( 'fancybox-enabled' );
+
+                $( '#fancybox-style-noscroll' ).remove();
+            }
+
+        },
+
+
+        // Call callback and trigger an event
+        // ==================================
+
+        trigger : function( name, slide ) {
+            var args  = Array.prototype.slice.call(arguments, 1),
+                self  = this,
+                obj   = slide && slide.opts ? slide : self.current,
+                rez;
+
+            if ( obj ) {
+                args.unshift( obj );
+
+            } else {
+                obj = self;
+            }
+
+            args.unshift( self );
+
+            if ( $.isFunction( obj.opts[ name ] ) ) {
+                rez = obj.opts[ name ].apply( obj, args );
+            }
+
+            if ( rez === false ) {
+                return rez;
+            }
+
+            if ( name === 'afterClose' ) {
+                $D.trigger( name + '.fb', args );
+
+            } else {
+                self.$refs.container.trigger( name + '.fb', args );
+            }
+
+        },
+
+
+        // Update infobar values, navigation button states and reveal caption
+        // ==================================================================
+
+        updateControls : function ( force ) {
+
+            var self = this;
+
+            var current  = self.current;
+            var index    = current.index;
+            var opts     = current.opts;
+            var caption  = opts.caption;
+            var $caption = self.$refs.caption;
+
+            // Recalculate content dimensions
+            current.$slide.trigger( 'refresh' );
+
+            self.$caption = caption && caption.length ? $caption.html( caption ) : null;
+
+            if ( !self.isHiddenControls ) {
+                self.showControls();
+            }
+
+            // Update info and navigation elements
+            $('[data-fancybox-count]').html( self.group.length );
+            $('[data-fancybox-index]').html( index + 1 );
+
+            $('[data-fancybox-prev]').prop('disabled', ( !opts.loop && index <= 0 ) );
+            $('[data-fancybox-next]').prop('disabled', ( !opts.loop && index >= self.group.length - 1 ) );
+
+        },
+
+        // Hide toolbar and caption
+        // ========================
+
+        hideControls : function () {
+
+            this.isHiddenControls = true;
+
+            this.$refs.container.removeClass('fancybox-show-infobar fancybox-show-toolbar fancybox-show-caption fancybox-show-nav');
+
+        },
+
+        showControls : function() {
+
+            var self = this;
+            var opts = self.current ? self.current.opts : self.opts;
+            var $container = self.$refs.container;
+
+            self.isHiddenControls   = false;
+            self.idleSecondsCounter = 0;
+
+            $container
+                .toggleClass('fancybox-show-toolbar', !!( opts.toolbar && opts.buttons ) )
+                .toggleClass('fancybox-show-infobar', !!( opts.infobar && self.group.length > 1 ) )
+                .toggleClass('fancybox-show-nav',     !!( opts.arrows && self.group.length > 1 ) )
+                .toggleClass('fancybox-is-modal',     !!opts.modal );
+
+            if ( self.$caption ) {
+                $container.addClass( 'fancybox-show-caption ');
+
+            } else {
+               $container.removeClass( 'fancybox-show-caption' );
+           }
+
+       },
+
+
+       // Toggle toolbar and caption
+       // ==========================
+
+       toggleControls : function() {
+
+           if ( this.isHiddenControls ) {
+               this.showControls();
+
+           } else {
+               this.hideControls();
+           }
+
+       },
+
+
+    });
+
+
+    $.fancybox = {
+
+        version  : "3.1.20",
+        defaults : defaults,
+
+
+        // Get current instance and execute a command.
+        //
+        // Examples of usage:
+        //
+        //   $instance = $.fancybox.getInstance();
+        //   $.fancybox.getInstance().jumpTo( 1 );
+        //   $.fancybox.getInstance( 'jumpTo', 1 );
+        //   $.fancybox.getInstance( function() {
+        //       console.info( this.currIndex );
+        //   });
+        // ======================================================
+
+        getInstance : function ( command ) {
+            var instance = $('.fancybox-container:not(".fancybox-is-closing"):first').data( 'FancyBox' );
+            var args     = Array.prototype.slice.call(arguments, 1);
+
+            if ( instance instanceof FancyBox ) {
+
+                if ( $.type( command ) === 'string' ) {
+                    instance[ command ].apply( instance, args );
+
+                } else if ( $.type( command ) === 'function' ) {
+                    command.apply( instance, args );
+
+                }
+
+                return instance;
+            }
+
+            return false;
+
+        },
+
+
+        // Create new instance
+        // ===================
+
+        open : function ( items, opts, index ) {
+            return new FancyBox( items, opts, index );
+        },
+
+
+        // Close current or all instances
+        // ==============================
+
+        close : function ( all ) {
+            var instance = this.getInstance();
+
+            if ( instance ) {
+                instance.close();
+
+                // Try to find and close next instance
+
+                if ( all === true ) {
+                    this.close();
+                }
+            }
+
+        },
+
+        // Close instances and unbind all events
+        // ==============================
+
+        destroy : function() {
+
+            this.close( true );
+
+            $D.off( 'click.fb-start' );
+
+        },
+
+
+        // Try to detect mobile devices
+        // ============================
+
+        isMobile : document.createTouch !== undefined && /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent),
+
+
+        // Detect if 'translate3d' support is available
+        // ============================================
+
+        use3d : (function() {
+            var div = document.createElement('div');
+
+            return window.getComputedStyle && window.getComputedStyle( div ).getPropertyValue('transform') && !(document.documentMode && document.documentMode < 11);
+        }()),
+
+
+        // Helper function to get current visual state of an element
+        // returns array[ top, left, horizontal-scale, vertical-scale, opacity ]
+        // =====================================================================
+
+        getTranslate : function( $el ) {
+            var matrix;
+
+            if ( !$el || !$el.length ) {
+                return false;
+            }
+
+            matrix  = $el.eq( 0 ).css('transform');
+
+            if ( matrix && matrix.indexOf( 'matrix' ) !== -1 ) {
+                matrix = matrix.split('(')[1];
+                matrix = matrix.split(')')[0];
+                matrix = matrix.split(',');
+            } else {
+                matrix = [];
+            }
+
+            if ( matrix.length ) {
+
+                // If IE
+                if ( matrix.length > 10 ) {
+                    matrix = [ matrix[13], matrix[12], matrix[0], matrix[5] ];
+
+                } else {
+                    matrix = [ matrix[5], matrix[4], matrix[0], matrix[3]];
+                }
+
+                matrix = matrix.map(parseFloat);
+
+            } else {
+                matrix = [ 0, 0, 1, 1 ];
+
+                var transRegex = /\.*translate\((.*)px,(.*)px\)/i;
+                var transRez = transRegex.exec( $el.eq( 0 ).attr('style') );
+
+                if ( transRez ) {
+                    matrix[ 0 ] = parseFloat( transRez[2] );
+                    matrix[ 1 ] = parseFloat( transRez[1] );
+                }
+            }
+
+            return {
+                top     : matrix[ 0 ],
+                left    : matrix[ 1 ],
+                scaleX  : matrix[ 2 ],
+                scaleY  : matrix[ 3 ],
+                opacity : parseFloat( $el.css('opacity') ),
+                width   : $el.width(),
+                height  : $el.height()
+            };
+
+        },
+
+
+        // Shortcut for setting "translate3d" properties for element
+        // Can set be used to set opacity, too
+        // ========================================================
+
+        setTranslate : function( $el, props ) {
+            var str  = '';
+            var css  = {};
+
+            if ( !$el || !props ) {
+                return;
+            }
+
+            if ( props.left !== undefined || props.top !== undefined ) {
+                str = ( props.left === undefined ? $el.position().left : props.left )  + 'px, ' + ( props.top === undefined ? $el.position().top : props.top ) + 'px';
+
+                if ( this.use3d ) {
+                    str = 'translate3d(' + str + ', 0px)';
+
+                } else {
+                    str = 'translate(' + str + ')';
+                }
+            }
+
+            if ( props.scaleX !== undefined && props.scaleY !== undefined ) {
+                str = (str.length ? str + ' ' : '') + 'scale(' + props.scaleX + ', ' + props.scaleY + ')';
+            }
+
+            if ( str.length ) {
+                css.transform = str;
+            }
+
+            if ( props.opacity !== undefined ) {
+                css.opacity = props.opacity;
+            }
+
+            if ( props.width !== undefined ) {
+                css.width = props.width;
+            }
+
+            if ( props.height !== undefined ) {
+                css.height = props.height;
+            }
+
+            return $el.css( css );
+        },
+
+
+        // Simple CSS transition handler
+        // =============================
+
+        animate : function ( $el, to, duration, callback, leaveAnimationName ) {
+            var event = transitionEnd || 'transitionend';
+
+            if ( $.isFunction( duration ) ) {
+                callback = duration;
+                duration = null;
+            }
+
+            if ( !$.isPlainObject( to ) ) {
+                $el.removeAttr('style');
+            }
+
+            $el.on( event, function(e) {
+
+                // Skip events from child elements and z-index change
+                if ( e && e.originalEvent && ( !$el.is( e.originalEvent.target ) || e.originalEvent.propertyName == 'z-index' ) ) {
+                    return;
+                }
+
+                $el.off( event );
+
+                if ( $.isPlainObject( to ) ) {
+
+                    if ( to.scaleX !== undefined && to.scaleY !== undefined ) {
+                        $el.css( 'transition-duration', '0ms' );
+
+                        to.width  = $el.width()  * to.scaleX;
+                        to.height = $el.height() * to.scaleY;
+
+                        to.scaleX = 1;
+                        to.scaleY = 1;
+
+                        $.fancybox.setTranslate( $el, to );
+                    }
+
+                } else if ( leaveAnimationName !== true ) {
+                    $el.removeClass( to );
+                }
+
+                if ( $.isFunction( callback ) ) {
+                    callback( e );
+                }
+
+            });
+
+            if ( $.isNumeric( duration ) ) {
+                $el.css( 'transition-duration', duration + 'ms' );
+            }
+
+            if ( $.isPlainObject( to ) ) {
+                $.fancybox.setTranslate( $el, to );
+
+            } else {
+                $el.addClass( to );
+            }
+
+            $el.data("timer", setTimeout(function() {
+                $el.trigger( 'transitionend' );
+            }, duration + 16));
+
+        },
+
+        stop : function( $el ) {
+            clearTimeout( $el.data("timer") );
+
+            $el.off( transitionEnd );
+        }
+
+    };
+
+
+    // Default click handler for "fancyboxed" links
+    // ============================================
+
+    function _run( e ) {
+        var target     = e.currentTarget,
+            opts       = e.data ? e.data.options : {},
+            items      = e.data ? e.data.items : [],
+            value      = $(target).attr( 'data-fancybox' ) || '',
+            index      = 0;
+
+        e.preventDefault();
+        e.stopPropagation();
+
+        // Get all related items and find index for clicked one
+        if ( value ) {
+            items = items.length ? items.filter( '[data-fancybox="' + value + '"]' ) : $( '[data-fancybox="' + value + '"]' );
+            index = items.index( target );
+
+            // Sometimes current item can not be found
+            // (for example, when slider clones items)
+            if ( index < 0 ) {
+                index = 0;
+            }
+
+        } else {
+            items = [ target ];
+        }
+
+        $.fancybox.open( items, opts, index );
+    }
+
+
+    // Create a jQuery plugin
+    // ======================
+
+    $.fn.fancybox = function (options) {
+        var selector;
+
+        options  = options || {};
+        selector = options.selector || false;
+
+        if ( selector ) {
+
+            $( 'body' ).off( 'click.fb-start', selector ).on( 'click.fb-start', selector, {
+                items   : $( selector ),
+                options : options
+            }, _run );
+
+        } else {
+
+            this.off( 'click.fb-start' ).on( 'click.fb-start', {
+                items   : this,
+                options : options
+            }, _run);
+
+        }
+
+        return this;
+    };
+
+
+    // Self initializing plugin
+    // ========================
+
+    $D.on( 'click.fb-start', '[data-fancybox]', _run );
+
+}( window, document, window.jQuery ));
+
+// ==========================================================================
+//
+// Media
+// Adds additional media type support
+//
+// ==========================================================================
+;(function ($) {
+
+       'use strict';
+
+       // Formats matching url to final form
+
+       var format = function (url, rez, params) {
+               if ( !url ) {
+                       return;
+               }
+
+               params = params || '';
+
+               if ( $.type(params) === "object" ) {
+                       params = $.param(params, true);
+               }
+
+               $.each(rez, function (key, value) {
+                       url = url.replace('$' + key, value || '');
+               });
+
+               if (params.length) {
+                       url += (url.indexOf('?') > 0 ? '&' : '?') + params;
+               }
+
+               return url;
+       };
+
+       // Object containing properties for each media type
+
+       var defaults = {
+               youtube : {
+                       matcher : /(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(watch\?(.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*))(.*)/i,
+                       params  : {
+                               autoplay : 1,
+                               autohide : 1,
+                               fs  : 1,
+                               rel : 0,
+                               hd  : 1,
+                               wmode : 'transparent',
+                               enablejsapi : 1,
+                               html5 : 1
+                       },
+                       paramPlace : 8,
+                       type  : 'iframe',
+                       url   : '//www.youtube.com/embed/$4',
+                       thumb : '//img.youtube.com/vi/$4/hqdefault.jpg'
+               },
+
+               vimeo : {
+                       matcher : /^.+vimeo.com\/(.*\/)?([\d]+)(.*)?/,
+                       params  : {
+                               autoplay : 1,
+                               hd : 1,
+                               show_title    : 1,
+                               show_byline   : 1,
+                               show_portrait : 0,
+                               fullscreen    : 1,
+                               api : 1
+                       },
+                       paramPlace : 3,
+                       type : 'iframe',
+                       url : '//player.vimeo.com/video/$2'
+               },
+
+               metacafe : {
+                       matcher : /metacafe.com\/watch\/(\d+)\/(.*)?/,
+                       type    : 'iframe',
+                       url     : '//www.metacafe.com/embed/$1/?ap=1'
+               },
+
+               dailymotion : {
+                       matcher : /dailymotion.com\/video\/(.*)\/?(.*)/,
+                       params : {
+                               additionalInfos : 0,
+                               autoStart : 1
+                       },
+                       type : 'iframe',
+                       url  : '//www.dailymotion.com/embed/video/$1'
+               },
+
+               vine : {
+                       matcher : /vine.co\/v\/([a-zA-Z0-9\?\=\-]+)/,
+                       type    : 'iframe',
+                       url     : '//vine.co/v/$1/embed/simple'
+               },
+
+               instagram : {
+                       matcher : /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,
+                       type    : 'image',
+                       url     : '//$1/p/$2/media/?size=l'
+               },
+
+               // Examples:
+               // http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16
+               // http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16
+               // https://www.google.lv/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572
+               google_maps : {
+                       matcher : /(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(((maps\/(place\/(.*)\/)?\@(.*),(\d+.?\d+?)z))|(\?ll=))(.*)?/i,
+                       type    : 'iframe',
+                       url     : function (rez) {
+                               return '//maps.google.' + rez[2] + '/?ll=' + ( rez[9] ? rez[9] + '&z=' + Math.floor(  rez[10]  ) + ( rez[12] ? rez[12].replace(/^\//, "&") : '' )  : rez[12] ) + '&output=' + ( rez[12] && rez[12].indexOf('layer=c') > 0 ? 'svembed' : 'embed' );
+                       }
+               }
+       };
+
+       $(document).on('onInit.fb', function (e, instance) {
+
+               $.each(instance.group, function( i, item ) {
+
+                       var url  = item.src || '',
+                               type = false,
+                               media,
+                               thumb,
+                               rez,
+                               params,
+                               urlParams,
+                               o,
+                               provider;
+
+                       // Skip items that already have content type
+                       if ( item.type ) {
+                               return;
+                       }
+
+                       media = $.extend( true, {}, defaults, item.opts.media );
+
+                       // Look for any matching media type
+                       $.each(media, function ( n, el ) {
+                               rez = url.match(el.matcher);
+                               o   = {};
+                               provider = n;
+
+                               if (!rez) {
+                                       return;
+                               }
+
+                               type = el.type;
+
+                               if ( el.paramPlace && rez[ el.paramPlace ] ) {
+                                       urlParams = rez[ el.paramPlace ];
+
+                                       if ( urlParams[ 0 ] == '?' ) {
+                                               urlParams = urlParams.substring(1);
+                                       }
+
+                                       urlParams = urlParams.split('&');
+
+                                       for ( var m = 0; m < urlParams.length; ++m ) {
+                                               var p = urlParams[ m ].split('=', 2);
+
+                                               if ( p.length == 2 ) {
+                                                       o[ p[0] ] = decodeURIComponent( p[1].replace(/\+/g, " ") );
+                                               }
+                                       }
+                               }
+
+                               params = $.extend( true, {}, el.params, item.opts[ n ], o );
+
+                               url   = $.type(el.url) === "function" ? el.url.call(this, rez, params, item) : format(el.url, rez, params);
+                               thumb = $.type(el.thumb) === "function" ? el.thumb.call(this, rez, params, item) : format(el.thumb, rez);
+
+                               if ( provider === 'vimeo' ) {
+                                       url = url.replace('&%23', '#');
+                               }
+
+                               return false;
+                       });
+
+                       // If it is found, then change content type and update the url
+
+                       if ( type ) {
+                               item.src  = url;
+                               item.type = type;
+
+                               if ( !item.opts.thumb && !( item.opts.$thumb && item.opts.$thumb.length ) ) {
+                                       item.opts.thumb = thumb;
+                               }
+
+                               if ( type === 'iframe' ) {
+                                       $.extend(true, item.opts, {
+                                               iframe : {
+                                                       preload : false,
+                                                       attr : {
+                                                               scrolling : "no"
+                                                       }
+                                               }
+                                       });
+
+                                       item.contentProvider = provider;
+
+                                       item.opts.slideClass += ' fancybox-slide--' + ( provider == 'google_maps' ? 'map' : 'video' );
+                               }
+
+                       } else {
+
+                               // If no content type is found, then set it to `image` as fallback
+                               item.type = 'image';
+                       }
+
+               });
+
+       });
+
+}(window.jQuery));
+
+// ==========================================================================
+//
+// Guestures
+// Adds touch guestures, handles click and tap events
+//
+// ==========================================================================
+;(function (window, document, $) {
+       'use strict';
+
+       var requestAFrame = (function () {
+        return window.requestAnimationFrame ||
+                window.webkitRequestAnimationFrame ||
+                window.mozRequestAnimationFrame ||
+                window.oRequestAnimationFrame ||
+                // if all else fails, use setTimeout
+                function (callback) {
+                    return window.setTimeout(callback, 1000 / 60);
+                };
+    })();
+
+
+    var cancelAFrame = (function () {
+        return window.cancelAnimationFrame ||
+                window.webkitCancelAnimationFrame ||
+                window.mozCancelAnimationFrame ||
+                window.oCancelAnimationFrame ||
+                function (id) {
+                    window.clearTimeout(id);
+                };
+    })();
+
+
+       var pointers = function( e ) {
+               var result = [];
+
+               e = e.originalEvent || e || window.e;
+               e = e.touches && e.touches.length ? e.touches : ( e.changedTouches && e.changedTouches.length ? e.changedTouches : [ e ] );
+
+               for ( var key in e ) {
+
+                       if ( e[ key ].pageX ) {
+                               result.push( { x : e[ key ].pageX, y : e[ key ].pageY } );
+
+                       } else if ( e[ key ].clientX ) {
+                               result.push( { x : e[ key ].clientX, y : e[ key ].clientY } );
+                       }
+               }
+
+               return result;
+       };
+
+       var distance = function( point2, point1, what ) {
+               if ( !point1 || !point2 ) {
+                       return 0;
+               }
+
+               if ( what === 'x' ) {
+                       return point2.x - point1.x;
+
+               } else if ( what === 'y' ) {
+                       return point2.y - point1.y;
+               }
+
+               return Math.sqrt( Math.pow( point2.x - point1.x, 2 ) + Math.pow( point2.y - point1.y, 2 ) );
+       };
+
+       var isClickable = function( $el ) {
+               if ( $el.is('a,button,input,select,textarea') || $.isFunction( $el.get(0).onclick ) ) {
+                       return true;
+               }
+
+               // Check for attributes like data-fancybox-next or data-fancybox-close
+               for ( var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++ ) {
+            if ( atts[i].nodeName.substr(0, 14) === 'data-fancybox-' ) {
+                return true;
+            }
+        }
+
+               return false;
+       };
+
+       var hasScrollbars = function( el ) {
+               var overflowY = window.getComputedStyle( el )['overflow-y'];
+               var overflowX = window.getComputedStyle( el )['overflow-x'];
+
+               var vertical   = (overflowY === 'scroll' || overflowY === 'auto') && el.scrollHeight > el.clientHeight;
+               var horizontal = (overflowX === 'scroll' || overflowX === 'auto') && el.scrollWidth > el.clientWidth;
+
+               return vertical || horizontal;
+       };
+
+       var isScrollable = function ( $el ) {
+               var rez = false;
+
+               while ( true ) {
+                       rez     = hasScrollbars( $el.get(0) );
+
+                       if ( rez ) {
+                               break;
+                       }
+
+                       $el = $el.parent();
+
+                       if ( !$el.length || $el.hasClass( 'fancybox-stage' ) || $el.is( 'body' ) ) {
+                               break;
+                       }
+               }
+
+               return rez;
+       };
+
+
+       var Guestures = function ( instance ) {
+               var self = this;
+
+               self.instance = instance;
+
+               self.$bg        = instance.$refs.bg;
+               self.$stage     = instance.$refs.stage;
+               self.$container = instance.$refs.container;
+
+               self.destroy();
+
+               self.$container.on( 'touchstart.fb.touch mousedown.fb.touch', $.proxy(self, 'ontouchstart') );
+       };
+
+       Guestures.prototype.destroy = function() {
+               this.$container.off( '.fb.touch' );
+       };
+
+       Guestures.prototype.ontouchstart = function( e ) {
+               var self = this;
+
+               var $target  = $( e.target );
+               var instance = self.instance;
+               var current  = instance.current;
+               var $content = current.$content;
+
+               var isTouchDevice = ( e.type == 'touchstart' );
+
+               // Do not respond to both events
+               if ( isTouchDevice ) {
+               self.$container.off( 'mousedown.fb.touch' );
+           }
+
+               // Ignore clicks while zooming or closing
+               if ( !current || self.instance.isAnimating || self.instance.isClosing ) {
+                       e.stopPropagation();
+                       e.preventDefault();
+
+                       return;
+               }
+
+               // Ignore right click
+               if ( e.originalEvent && e.originalEvent.button == 2 ) {
+                       return;
+               }
+
+               // Ignore taping on links, buttons, input elements
+               if ( !$target.length || isClickable( $target ) || isClickable( $target.parent() ) ) {
+                       return;
+               }
+
+               // Ignore clicks on the scrollbar
+               if ( e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left ) {
+                       return;
+               }
+
+               self.startPoints = pointers( e );
+
+               // Prevent zooming if already swiping
+               if ( !self.startPoints || ( self.startPoints.length > 1 && instance.isSliding ) ) {
+                       return;
+               }
+
+               self.$target  = $target;
+               self.$content = $content;
+               self.canTap   = true;
+
+               $(document).off( '.fb.touch' );
+
+               $(document).on( isTouchDevice ? 'touchend.fb.touch touchcancel.fb.touch' : 'mouseup.fb.touch mouseleave.fb.touch',  $.proxy(self, "ontouchend"));
+               $(document).on( isTouchDevice ? 'touchmove.fb.touch' : 'mousemove.fb.touch',  $.proxy(self, "ontouchmove"));
+
+               e.stopPropagation();
+
+               if ( !(instance.current.opts.touch || instance.canPan() ) || !( $target.is( self.$stage ) || self.$stage.find( $target ).length ) ) {
+
+                       // Prevent ghosting
+                       if ( $target.is('img') ) {
+                               e.preventDefault();
+                       }
+
+                       return;
+               }
+
+               if ( !( $.fancybox.isMobile && ( isScrollable( self.$target ) || isScrollable( self.$target.parent() ) ) ) ) {
+                       e.preventDefault();
+               }
+
+               self.canvasWidth  = Math.round( current.$slide[0].clientWidth );
+               self.canvasHeight = Math.round( current.$slide[0].clientHeight );
+
+               self.startTime = new Date().getTime();
+               self.distanceX = self.distanceY = self.distance = 0;
+
+               self.isPanning = false;
+               self.isSwiping = false;
+               self.isZooming = false;
+
+               self.sliderStartPos  = self.sliderLastPos || { top: 0, left: 0 };
+               self.contentStartPos = $.fancybox.getTranslate( self.$content );
+               self.contentLastPos  = null;
+
+               if ( self.startPoints.length === 1 && !self.isZooming ) {
+                       self.canTap = !instance.isSliding;
+
+                       if ( current.type === 'image' && ( self.contentStartPos.width > self.canvasWidth + 1 || self.contentStartPos.height > self.canvasHeight + 1 ) ) {
+
+                               $.fancybox.stop( self.$content );
+
+                               self.$content.css( 'transition-duration', '0ms' );
+
+                               self.isPanning = true;
+
+                       } else {
+
+                               self.isSwiping = true;
+                       }
+
+                       self.$container.addClass('fancybox-controls--isGrabbing');
+               }
+
+               if ( self.startPoints.length === 2 && !instance.isAnimating && !current.hasError && current.type === 'image' && ( current.isLoaded || current.$ghost ) ) {
+                       self.isZooming = true;
+
+                       self.isSwiping = false;
+                       self.isPanning = false;
+
+                       $.fancybox.stop( self.$content );
+
+                       self.$content.css( 'transition-duration', '0ms' );
+
+                       self.centerPointStartX = ( ( self.startPoints[0].x + self.startPoints[1].x ) * 0.5 ) - $(window).scrollLeft();
+                       self.centerPointStartY = ( ( self.startPoints[0].y + self.startPoints[1].y ) * 0.5 ) - $(window).scrollTop();
+
+                       self.percentageOfImageAtPinchPointX = ( self.centerPointStartX - self.contentStartPos.left ) / self.contentStartPos.width;
+                       self.percentageOfImageAtPinchPointY = ( self.centerPointStartY - self.contentStartPos.top  ) / self.contentStartPos.height;
+
+                       self.startDistanceBetweenFingers = distance( self.startPoints[0], self.startPoints[1] );
+               }
+
+       };
+
+       Guestures.prototype.ontouchmove = function( e ) {
+
+               var self = this;
+
+               self.newPoints = pointers( e );
+
+               if ( $.fancybox.isMobile && ( isScrollable( self.$target ) || isScrollable( self.$target.parent() ) ) ) {
+                       e.stopPropagation();
+
+                       self.canTap = false;
+
+                       return;
+               }
+
+               if ( !( self.instance.current.opts.touch || self.instance.canPan() ) || !self.newPoints || !self.newPoints.length ) {
+                       return;
+               }
+
+               self.distanceX = distance( self.newPoints[0], self.startPoints[0], 'x' );
+               self.distanceY = distance( self.newPoints[0], self.startPoints[0], 'y' );
+
+               self.distance = distance( self.newPoints[0], self.startPoints[0] );
+
+               // Skip false ontouchmove events (Chrome)
+               if ( self.distance > 0 ) {
+
+                       if ( !( self.$target.is( self.$stage ) || self.$stage.find( self.$target ).length ) ) {
+                               return;
+                       }
+
+                       e.stopPropagation();
+                       e.preventDefault();
+
+                       if ( self.isSwiping ) {
+                               self.onSwipe();
+
+                       } else if ( self.isPanning ) {
+                               self.onPan();
+
+                       } else if ( self.isZooming ) {
+                               self.onZoom();
+                       }
+
+               }
+
+       };
+
+       Guestures.prototype.onSwipe = function() {
+
+               var self = this;
+
+               var swiping = self.isSwiping;
+               var left    = self.sliderStartPos.left || 0;
+               var angle;
+
+               if ( swiping === true ) {
+
+                       if ( Math.abs( self.distance ) > 10 )  {
+
+                               self.canTap = false;
+
+                               if ( self.instance.group.length < 2 && self.instance.opts.touch.vertical ) {
+                                       self.isSwiping  = 'y';
+
+                               } else if ( self.instance.isSliding || self.instance.opts.touch.vertical === false || ( self.instance.opts.touch.vertical === 'auto' && $( window ).width() > 800 ) ) {
+                                       self.isSwiping  = 'x';
+
+                               } else {
+                                       angle = Math.abs( Math.atan2( self.distanceY, self.distanceX ) * 180 / Math.PI );
+
+                                       self.isSwiping = ( angle > 45 && angle < 135 ) ? 'y' : 'x';
+                               }
+
+                               self.instance.isSliding = self.isSwiping;
+
+                               // Reset points to avoid jumping, because we dropped first swipes to calculate the angle
+                               self.startPoints = self.newPoints;
+
+                               $.each(self.instance.slides, function( index, slide ) {
+                                       $.fancybox.stop( slide.$slide );
+
+                                       slide.$slide.css( 'transition-duration', '0ms' );
+
+                                       slide.inTransition = false;
+
+                                       if ( slide.pos === self.instance.current.pos ) {
+                                               self.sliderStartPos.left = $.fancybox.getTranslate( slide.$slide ).left;
+                                       }
+                               });
+
+                               //self.instance.current.isMoved = true;
+
+                               // Stop slideshow
+                               if ( self.instance.SlideShow && self.instance.SlideShow.isActive ) {
+                                       self.instance.SlideShow.stop();
+                               }
+                       }
+
+               } else {
+
+                       if ( swiping == 'x' ) {
+
+                               // Sticky edges
+                               if ( self.distanceX > 0 && ( self.instance.group.length < 2 || ( self.instance.current.index === 0 && !self.instance.current.opts.loop ) ) ) {
+                                       left = left + Math.pow( self.distanceX, 0.8 );
+
+                               } else if ( self.distanceX < 0 && ( self.instance.group.length < 2 || ( self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop ) ) ) {
+                                       left = left - Math.pow( -self.distanceX, 0.8 );
+
+                               } else {
+                                       left = left + self.distanceX;
+                               }
+
+                       }
+
+                       self.sliderLastPos = {
+                               top  : swiping == 'x' ? 0 : self.sliderStartPos.top + self.distanceY,
+                               left : left
+                       };
+
+                       if ( self.requestId ) {
+                               cancelAFrame( self.requestId );
+
+                               self.requestId = null;
+                       }
+
+                       self.requestId = requestAFrame(function() {
+
+                               if ( self.sliderLastPos ) {
+                                       $.each(self.instance.slides, function( index, slide ) {
+                                               var pos = slide.pos - self.instance.currPos;
+
+                                               $.fancybox.setTranslate( slide.$slide, {
+                                                       top  : self.sliderLastPos.top,
+                                                       left : self.sliderLastPos.left + ( pos * self.canvasWidth ) + ( pos * slide.opts.gutter )
+                                               });
+                                       });
+
+                                       self.$container.addClass( 'fancybox-is-sliding' );
+                               }
+
+                       });
+
+               }
+
+       };
+
+       Guestures.prototype.onPan = function() {
+
+               var self = this;
+
+               var newOffsetX, newOffsetY, newPos;
+
+               self.canTap = false;
+
+               if ( self.contentStartPos.width > self.canvasWidth ) {
+                       newOffsetX = self.contentStartPos.left + self.distanceX;
+
+               } else {
+                       newOffsetX = self.contentStartPos.left;
+               }
+
+               newOffsetY = self.contentStartPos.top + self.distanceY;
+
+               newPos = self.limitMovement( newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height );
+
+               newPos.scaleX = self.contentStartPos.scaleX;
+               newPos.scaleY = self.contentStartPos.scaleY;
+
+               self.contentLastPos = newPos;
+
+               if ( self.requestId ) {
+                       cancelAFrame( self.requestId );
+
+                       self.requestId = null;
+               }
+
+               self.requestId = requestAFrame(function() {
+                       $.fancybox.setTranslate( self.$content, self.contentLastPos );
+               });
+       };
+
+       // Make panning sticky to the edges
+       Guestures.prototype.limitMovement = function( newOffsetX, newOffsetY, newWidth, newHeight ) {
+
+               var self = this;
+
+               var minTranslateX, minTranslateY, maxTranslateX, maxTranslateY;
+
+               var canvasWidth  = self.canvasWidth;
+               var canvasHeight = self.canvasHeight;
+
+               var currentOffsetX = self.contentStartPos.left;
+               var currentOffsetY = self.contentStartPos.top;
+
+               var distanceX = self.distanceX;
+               var distanceY = self.distanceY;
+
+               // Slow down proportionally to traveled distance
+
+               minTranslateX = Math.max(0, canvasWidth  * 0.5 - newWidth  * 0.5 );
+               minTranslateY = Math.max(0, canvasHeight * 0.5 - newHeight * 0.5 );
+
+               maxTranslateX = Math.min( canvasWidth  - newWidth,  canvasWidth  * 0.5 - newWidth  * 0.5 );
+               maxTranslateY = Math.min( canvasHeight - newHeight, canvasHeight * 0.5 - newHeight * 0.5 );
+
+               if ( newWidth > canvasWidth ) {
+
+                       //   ->
+                       if ( distanceX > 0 && newOffsetX > minTranslateX ) {
+                               newOffsetX = minTranslateX - 1 + Math.pow( -minTranslateX + currentOffsetX + distanceX, 0.8 ) || 0;
+                       }
+
+                       //    <-
+                       if ( distanceX  < 0 && newOffsetX < maxTranslateX ) {
+                               newOffsetX = maxTranslateX + 1 - Math.pow( maxTranslateX - currentOffsetX - distanceX, 0.8 ) || 0;
+                       }
+
+               }
+
+               if ( newHeight > canvasHeight ) {
+
+                       //   \/
+                       if ( distanceY > 0 && newOffsetY > minTranslateY ) {
+                               newOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8 ) || 0;
+                       }
+
+                       //   /\
+                       if ( distanceY < 0 && newOffsetY < maxTranslateY ) {
+                               newOffsetY = maxTranslateY + 1 - Math.pow ( maxTranslateY - currentOffsetY - distanceY, 0.8 ) || 0;
+                       }
+
+               }
+
+               return {
+                       top  : newOffsetY,
+                       left : newOffsetX
+               };
+
+       };
+
+
+       Guestures.prototype.limitPosition = function( newOffsetX, newOffsetY, newWidth, newHeight ) {
+
+               var self = this;
+
+               var canvasWidth  = self.canvasWidth;
+               var canvasHeight = self.canvasHeight;
+
+               if ( newWidth > canvasWidth ) {
+                       newOffsetX = newOffsetX > 0 ? 0 : newOffsetX;
+                       newOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX;
+
+               } else {
+
+                       // Center horizontally
+                       newOffsetX = Math.max( 0, canvasWidth / 2 - newWidth / 2 );
+
+               }
+
+               if ( newHeight > canvasHeight ) {
+                       newOffsetY = newOffsetY > 0 ? 0 : newOffsetY;
+                       newOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY;
+
+               } else {
+
+                       // Center vertically
+                       newOffsetY = Math.max( 0, canvasHeight / 2 - newHeight / 2 );
+
+               }
+
+               return {
+                       top  : newOffsetY,
+                       left : newOffsetX
+               };
+
+       };
+
+       Guestures.prototype.onZoom = function() {
+
+               var self = this;
+
+               // Calculate current distance between points to get pinch ratio and new width and height
+
+               var currentWidth  = self.contentStartPos.width;
+               var currentHeight = self.contentStartPos.height;
+
+               var currentOffsetX = self.contentStartPos.left;
+               var currentOffsetY = self.contentStartPos.top;
+
+               var endDistanceBetweenFingers = distance( self.newPoints[0], self.newPoints[1] );
+
+               var pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers;
+
+               var newWidth  = Math.floor( currentWidth  * pinchRatio );
+               var newHeight = Math.floor( currentHeight * pinchRatio );
+
+               // This is the translation due to pinch-zooming
+               var translateFromZoomingX = (currentWidth  - newWidth)  * self.percentageOfImageAtPinchPointX;
+               var translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY;
+
+               //Point between the two touches
+
+               var centerPointEndX = ((self.newPoints[0].x + self.newPoints[1].x) / 2) - $(window).scrollLeft();
+               var centerPointEndY = ((self.newPoints[0].y + self.newPoints[1].y) / 2) - $(window).scrollTop();
+
+               // And this is the translation due to translation of the centerpoint
+               // between the two fingers
+
+               var translateFromTranslatingX = centerPointEndX - self.centerPointStartX;
+               var translateFromTranslatingY = centerPointEndY - self.centerPointStartY;
+
+               // The new offset is the old/current one plus the total translation
+
+               var newOffsetX = currentOffsetX + ( translateFromZoomingX + translateFromTranslatingX );
+               var newOffsetY = currentOffsetY + ( translateFromZoomingY + translateFromTranslatingY );
+
+               var newPos = {
+                       top    : newOffsetY,
+                       left   : newOffsetX,
+                       scaleX : self.contentStartPos.scaleX * pinchRatio,
+                       scaleY : self.contentStartPos.scaleY * pinchRatio
+               };
+
+               self.canTap = false;
+
+               self.newWidth  = newWidth;
+               self.newHeight = newHeight;
+
+               self.contentLastPos = newPos;
+
+               if ( self.requestId ) {
+                       cancelAFrame( self.requestId );
+
+                       self.requestId = null;
+               }
+
+               self.requestId = requestAFrame(function() {
+                       $.fancybox.setTranslate( self.$content, self.contentLastPos );
+               });
+
+       };
+
+       Guestures.prototype.ontouchend = function( e ) {
+
+               var self = this;
+               var dMs  = Math.max( (new Date().getTime() ) - self.startTime, 1);
+
+               var swiping = self.isSwiping;
+               var panning = self.isPanning;
+               var zooming = self.isZooming;
+
+               self.endPoints = pointers( e );
+
+               self.$container.removeClass( 'fancybox-controls--isGrabbing' );
+
+               $(document).off( '.fb.touch' );
+
+               if ( self.requestId ) {
+                       cancelAFrame( self.requestId );
+
+                       self.requestId = null;
+               }
+
+               self.isSwiping = false;
+               self.isPanning = false;
+               self.isZooming = false;
+
+               if ( self.canTap )  {
+                       return self.onTap( e );
+               }
+
+               self.speed = 366;
+
+               // Speed in px/ms
+               self.velocityX = self.distanceX / dMs * 0.5;
+               self.velocityY = self.distanceY / dMs * 0.5;
+
+               self.speedX = Math.max( self.speed * 0.5, Math.min( self.speed * 1.5, ( 1 / Math.abs( self.velocityX ) ) * self.speed ) );
+
+               if ( panning ) {
+                       self.endPanning();
+
+               } else if ( zooming ) {
+                       self.endZooming();
+
+               } else {
+                       self.endSwiping( swiping );
+               }
+
+               return;
+       };
+
+       Guestures.prototype.endSwiping = function( swiping ) {
+
+               var self = this;
+               var ret = false;
+
+               self.instance.isSliding = false;
+               self.sliderLastPos      = null;
+
+               // Close if swiped vertically / navigate if horizontally
+               if ( swiping == 'y' && Math.abs( self.distanceY ) > 50 ) {
+
+                       // Continue vertical movement
+                       $.fancybox.animate( self.instance.current.$slide, {
+                               top     : self.sliderStartPos.top + self.distanceY + ( self.velocityY * 150 ),
+                               opacity : 0
+                       }, 150 );
+
+                       ret = self.instance.close( true, 300 );
+
+               } else if ( swiping == 'x' && self.distanceX > 50 && self.instance.group.length > 1 ) {
+                       ret = self.instance.previous( self.speedX );
+
+               } else if ( swiping == 'x' && self.distanceX < -50  && self.instance.group.length > 1 ) {
+                       ret = self.instance.next( self.speedX );
+               }
+
+               if ( ret === false && ( swiping == 'x' || swiping == 'y' ) ) {
+                       self.instance.jumpTo( self.instance.current.index, 150 );
+               }
+
+               self.$container.removeClass( 'fancybox-is-sliding' );
+
+       };
+
+       // Limit panning from edges
+       // ========================
+
+       Guestures.prototype.endPanning = function() {
+
+               var self = this;
+               var newOffsetX, newOffsetY, newPos;
+
+               if ( !self.contentLastPos ) {
+                       return;
+               }
+
+               if ( self.instance.current.opts.touch.momentum === false ) {
+                       newOffsetX = self.contentLastPos.left;
+                       newOffsetY = self.contentLastPos.top;
+
+               } else {
+
+                       // Continue movement
+                       newOffsetX = self.contentLastPos.left + ( self.velocityX * self.speed );
+                       newOffsetY = self.contentLastPos.top  + ( self.velocityY * self.speed );
+               }
+
+               newPos = self.limitPosition( newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height );
+
+                newPos.width  = self.contentStartPos.width;
+                newPos.height = self.contentStartPos.height;
+
+               $.fancybox.animate( self.$content, newPos, 330 );
+       };
+
+
+       Guestures.prototype.endZooming = function() {
+
+               var self = this;
+
+               var current = self.instance.current;
+
+               var newOffsetX, newOffsetY, newPos, reset;
+
+               var newWidth  = self.newWidth;
+               var newHeight = self.newHeight;
+
+               if ( !self.contentLastPos ) {
+                       return;
+               }
+
+               newOffsetX = self.contentLastPos.left;
+               newOffsetY = self.contentLastPos.top;
+
+               reset = {
+                       top    : newOffsetY,
+                       left   : newOffsetX,
+                       width  : newWidth,
+                       height : newHeight,
+                       scaleX : 1,
+                       scaleY : 1
+          };
+
+          // Reset scalex/scaleY values; this helps for perfomance and does not break animation
+          $.fancybox.setTranslate( self.$content, reset );
+
+               if ( newWidth < self.canvasWidth && newHeight < self.canvasHeight ) {
+                       self.instance.scaleToFit( 150 );
+
+               } else if ( newWidth > current.width || newHeight > current.height ) {
+                       self.instance.scaleToActual( self.centerPointStartX, self.centerPointStartY, 150 );
+
+               } else {
+
+                       newPos = self.limitPosition( newOffsetX, newOffsetY, newWidth, newHeight );
+
+                       // Switch from scale() to width/height or animation will not work correctly
+                       $.fancybox.setTranslate( self.content, $.fancybox.getTranslate( self.$content ) );
+
+                       $.fancybox.animate( self.$content, newPos, 150 );
+               }
+
+       };
+
+       Guestures.prototype.onTap = function(e) {
+               var self    = this;
+               var $target = $( e.target );
+
+               var instance = self.instance;
+               var current  = instance.current;
+
+               var endPoints = ( e && pointers( e ) ) || self.startPoints;
+
+               var tapX = endPoints[0] ? endPoints[0].x - self.$stage.offset().left : 0;
+               var tapY = endPoints[0] ? endPoints[0].y - self.$stage.offset().top  : 0;
+
+               var where;
+
+               var process = function ( prefix ) {
+
+                       var action = current.opts[ prefix ];
+
+                       if ( $.isFunction( action ) ) {
+                               action = action.apply( instance, [ current, e ] );
+                       }
+
+                       if ( !action) {
+                               return;
+                       }
+
+                       switch ( action ) {
+
+                               case "close" :
+
+                                       instance.close( self.startEvent );
+
+                               break;
+
+                               case "toggleControls" :
+
+                                       instance.toggleControls( true );
+
+                               break;
+
+                               case "next" :
+
+                                       instance.next();
+
+                               break;
+
+                               case "nextOrClose" :
+
+                                       if ( instance.group.length > 1 ) {
+                                               instance.next();
+
+                                       } else {
+                                               instance.close( self.startEvent );
+                                       }
+
+                               break;
+
+                               case "zoom" :
+
+                                       if ( current.type == 'image' && ( current.isLoaded || current.$ghost ) ) {
+
+                                               if ( instance.canPan() ) {
+                                                       instance.scaleToFit();
+
+                                               } else if ( instance.isScaledDown() ) {
+                                                       instance.scaleToActual( tapX, tapY );
+
+                                               } else if ( instance.group.length < 2 ) {
+                                                       instance.close( self.startEvent );
+                                               }
+                                       }
+
+                               break;
+                       }
+
+               };
+
+               // Ignore right click
+               if ( e.originalEvent && e.originalEvent.button == 2 ) {
+                       return;
+               }
+
+               // Skip if current slide is not in the center
+               if ( instance.isSliding ) {
+                       return;
+               }
+
+               // Skip if clicked on the scrollbar
+               if ( tapX > $target[0].clientWidth + $target.offset().left ) {
+                       return;
+               }
+
+               // Check where is clicked
+               if ( $target.is( '.fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container' ) ) {
+                       where = 'Outside';
+
+               } else if ( $target.is( '.fancybox-slide' ) ) {
+                       where = 'Slide';
+
+               } else if  ( instance.current.$content && instance.current.$content.has( e.target ).length ) {
+                       where = 'Content';
+
+               } else {
+                       return;
+               }
+
+               // Check if this is a double tap
+               if ( self.tapped ) {
+
+                       // Stop previously created single tap
+                       clearTimeout( self.tapped );
+                       self.tapped = null;
+
+                       // Skip if distance between taps is too big
+                       if ( Math.abs( tapX - self.tapX ) > 50 || Math.abs( tapY - self.tapY ) > 50 || instance.isSliding ) {
+                               return this;
+                       }
+
+                       // OK, now we assume that this is a double-tap
+                       process( 'dblclick' + where );
+
+               } else {
+
+                       // Single tap will be processed if user has not clicked second time within 300ms
+                       // or there is no need to wait for double-tap
+                       self.tapX = tapX;
+                       self.tapY = tapY;
+
+                       if ( current.opts[ 'dblclick' + where ] && current.opts[ 'dblclick' + where ] !== current.opts[ 'click' + where ] ) {
+                               self.tapped = setTimeout(function() {
+                                       self.tapped = null;
+
+                                       process( 'click' + where );
+
+                               }, 300);
+
+                       } else {
+                               process( 'click' + where );
+                       }
+
+               }
+
+               return this;
+       };
+
+       $(document).on('onActivate.fb', function (e, instance) {
+               if ( instance && !instance.Guestures ) {
+                       instance.Guestures = new Guestures( instance );
+               }
+       });
+
+       $(document).on('beforeClose.fb', function (e, instance) {
+               if ( instance && instance.Guestures ) {
+                       instance.Guestures.destroy();
+               }
+       });
+
+
+}(window, document, window.jQuery));
+
+// ==========================================================================
+//
+// SlideShow
+// Enables slideshow functionality
+//
+// Example of usage:
+// $.fancybox.getInstance().SlideShow.start()
+//
+// ==========================================================================
+;(function (document, $) {
+       'use strict';
+
+       var SlideShow = function( instance ) {
+               this.instance = instance;
+               this.init();
+       };
+
+       $.extend( SlideShow.prototype, {
+               timer    : null,
+               isActive : false,
+               $button  : null,
+               speed    : 3000,
+
+               init : function() {
+                       var self = this;
+
+                       self.$button = self.instance.$refs.toolbar.find('[data-fancybox-play]').on('click', function() {
+                               self.toggle();
+                       });
+
+                       if ( self.instance.group.length < 2 || !self.instance.group[ self.instance.currIndex ].opts.slideShow ) {
+                               self.$button.hide();
+                       }
+               },
+
+               set : function() {
+                       var self = this;
+
+                       // Check if reached last element
+                       if ( self.instance && self.instance.current && (self.instance.current.opts.loop || self.instance.currIndex < self.instance.group.length - 1 )) {
+                               self.timer = setTimeout(function() {
+                                       self.instance.next();
+
+                               }, self.instance.current.opts.slideShow.speed || self.speed);
+
+                       } else {
+                               self.stop();
+                               self.instance.idleSecondsCounter = 0;
+                               self.instance.showControls();
+                       }
+
+               },
+
+               clear : function() {
+                       var self = this;
+
+                       clearTimeout( self.timer );
+
+                       self.timer = null;
+               },
+
+               start : function() {
+                       var self = this;
+                       var current = self.instance.current;
+
+                       if ( self.instance && current && ( current.opts.loop || current.index < self.instance.group.length - 1 )) {
+
+                               self.isActive = true;
+
+                               self.$button
+                                       .attr( 'title', current.opts.i18n[ current.opts.lang ].PLAY_STOP )
+                                       .addClass( 'fancybox-button--pause' );
+
+                               if ( current.isComplete ) {
+                                       self.set();
+                               }
+                       }
+               },
+
+               stop : function() {
+                       var self = this;
+                       var current = self.instance.current;
+
+                       self.clear();
+
+                       self.$button
+                               .attr( 'title', current.opts.i18n[ current.opts.lang ].PLAY_START )
+                               .removeClass( 'fancybox-button--pause' );
+
+                       self.isActive = false;
+               },
+
+               toggle : function() {
+                       var self = this;
+
+                       if ( self.isActive ) {
+                               self.stop();
+
+                       } else {
+                               self.start();
+                       }
+               }
+
+       });
+
+       $(document).on({
+               'onInit.fb' : function(e, instance) {
+                       if ( instance && !instance.SlideShow ) {
+                               instance.SlideShow = new SlideShow( instance );
+                       }
+               },
+
+               'beforeShow.fb' : function(e, instance, current, firstRun) {
+                       var SlideShow = instance && instance.SlideShow;
+
+                       if ( firstRun ) {
+
+                               if ( SlideShow && current.opts.slideShow.autoStart ) {
+                                       SlideShow.start();
+                               }
+
+                       } else if ( SlideShow && SlideShow.isActive )  {
+                               SlideShow.clear();
+                       }
+               },
+
+               'afterShow.fb' : function(e, instance, current) {
+                       var SlideShow = instance && instance.SlideShow;
+
+                       if ( SlideShow && SlideShow.isActive ) {
+                               SlideShow.set();
+                       }
+               },
+
+               'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {
+                       var SlideShow = instance && instance.SlideShow;
+
+                       // "P" or Spacebar
+                       if ( SlideShow && current.opts.slideShow && ( keycode === 80 || keycode === 32 ) && !$(document.activeElement).is( 'button,a,input' ) ) {
+                               keypress.preventDefault();
+
+                               SlideShow.toggle();
+                       }
+               },
+
+               'beforeClose.fb onDeactivate.fb' : function(e, instance) {
+                       var SlideShow = instance && instance.SlideShow;
+
+                       if ( SlideShow ) {
+                               SlideShow.stop();
+                       }
+               }
+       });
+
+       // Page Visibility API to pause slideshow when window is not active
+       $(document).on("visibilitychange", function() {
+               var instance  = $.fancybox.getInstance();
+               var SlideShow = instance && instance.SlideShow;
+
+               if ( SlideShow && SlideShow.isActive ) {
+                       if ( document.hidden ) {
+                               SlideShow.clear();
+
+                       } else {
+                               SlideShow.set();
+                       }
+               }
+       });
+
+}(document, window.jQuery));
+
+// ==========================================================================
+//
+// FullScreen
+// Adds fullscreen functionality
+//
+// ==========================================================================
+;(function (document, $) {
+       'use strict';
+
+       // Collection of methods supported by user browser
+       var fn = (function () {
+
+               var fnMap = [
+                       [
+                               'requestFullscreen',
+                               'exitFullscreen',
+                               'fullscreenElement',
+                               'fullscreenEnabled',
+                               'fullscreenchange',
+                               'fullscreenerror'
+                       ],
+                       // new WebKit
+                       [
+                               'webkitRequestFullscreen',
+                               'webkitExitFullscreen',
+                               'webkitFullscreenElement',
+                               'webkitFullscreenEnabled',
+                               'webkitfullscreenchange',
+                               'webkitfullscreenerror'
+
+                       ],
+                       // old WebKit (Safari 5.1)
+                       [
+                               'webkitRequestFullScreen',
+                               'webkitCancelFullScreen',
+                               'webkitCurrentFullScreenElement',
+                               'webkitCancelFullScreen',
+                               'webkitfullscreenchange',
+                               'webkitfullscreenerror'
+
+                       ],
+                       [
+                               'mozRequestFullScreen',
+                               'mozCancelFullScreen',
+                               'mozFullScreenElement',
+                               'mozFullScreenEnabled',
+                               'mozfullscreenchange',
+                               'mozfullscreenerror'
+                       ],
+                       [
+                               'msRequestFullscreen',
+                               'msExitFullscreen',
+                               'msFullscreenElement',
+                               'msFullscreenEnabled',
+                               'MSFullscreenChange',
+                               'MSFullscreenError'
+                       ]
+               ];
+
+               var val;
+               var ret = {};
+               var i, j;
+
+               for ( i = 0; i < fnMap.length; i++ ) {
+                       val = fnMap[ i ];
+
+                       if ( val && val[ 1 ] in document ) {
+                               for ( j = 0; j < val.length; j++ ) {
+                                       ret[ fnMap[ 0 ][ j ] ] = val[ j ];
+                               }
+
+                               return ret;
+                       }
+               }
+
+               return false;
+       })();
+
+       // If browser does not have Full Screen API, then simply unset default button template and stop
+       if ( !fn ) {
+               $.fancybox.defaults.btnTpl.fullScreen = false;
+
+               return;
+       }
+
+       var FullScreen = {
+               request : function ( elem ) {
+
+                       elem = elem || document.documentElement;
+
+                       elem[ fn.requestFullscreen ]( elem.ALLOW_KEYBOARD_INPUT );
+
+               },
+               exit : function () {
+
+                       document[ fn.exitFullscreen ]();
+
+               },
+               toggle : function ( elem ) {
+
+                       elem = elem || document.documentElement;
+
+                       if ( this.isFullscreen() ) {
+                               this.exit();
+
+                       } else {
+                               this.request( elem );
+                       }
+
+               },
+               isFullscreen : function()  {
+
+                       return Boolean( document[ fn.fullscreenElement ] );
+
+               },
+               enabled : function()  {
+
+                       return Boolean( document[ fn.fullscreenEnabled ] );
+
+               }
+       };
+
+       $(document).on({
+               'onInit.fb' : function(e, instance) {
+                       var $container;
+
+                       var $button = instance.$refs.toolbar.find('[data-fancybox-fullscreen]');
+
+                       if ( instance && !instance.FullScreen && instance.group[ instance.currIndex ].opts.fullScreen ) {
+                               $container = instance.$refs.container;
+
+                               $container.on('click.fb-fullscreen', '[data-fancybox-fullscreen]', function(e) {
+
+                                       e.stopPropagation();
+                                       e.preventDefault();
+
+                                       FullScreen.toggle( $container[ 0 ] );
+
+                               });
+
+                               if ( instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true ) {
+                                       FullScreen.request( $container[ 0 ] );
+                               }
+
+                               // Expose API
+                               instance.FullScreen = FullScreen;
+
+                       } else {
+                               $button.hide();
+                       }
+
+               },
+
+               'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {
+
+                       // "P" or Spacebar
+                       if ( instance && instance.FullScreen && keycode === 70 ) {
+                               keypress.preventDefault();
+
+                               instance.FullScreen.toggle( instance.$refs.container[ 0 ] );
+                       }
+
+               },
+
+               'beforeClose.fb' : function( instance ) {
+                       if ( instance && instance.FullScreen ) {
+                               FullScreen.exit();
+                       }
+               }
+       });
+
+       $(document).on(fn.fullscreenchange, function() {
+               var instance = $.fancybox.getInstance();
+
+               // If image is zooming, then force to stop and reposition properly
+               if ( instance.current && instance.current.type === 'image' && instance.isAnimating ) {
+                       instance.current.$content.css( 'transition', 'none' );
+
+                       instance.isAnimating = false;
+
+                       instance.update( true, true, 0 );
+               }
+
+       });
+
+}(document, window.jQuery));
+
+// ==========================================================================
+//
+// Thumbs
+// Displays thumbnails in a grid
+//
+// ==========================================================================
+;(function (document, $) {
+       'use strict';
+
+       var FancyThumbs = function( instance ) {
+               this.instance = instance;
+               this.init();
+       };
+
+       $.extend( FancyThumbs.prototype, {
+
+               $button         : null,
+               $grid           : null,
+               $list           : null,
+               isVisible       : false,
+
+               init : function() {
+                       var self = this;
+
+                       var first  = self.instance.group[0],
+                               second = self.instance.group[1];
+
+                       self.$button = self.instance.$refs.toolbar.find( '[data-fancybox-thumbs]' );
+
+                       if ( self.instance.group.length > 1 && self.instance.group[ self.instance.currIndex ].opts.thumbs && (
+                               ( first.type == 'image'  || first.opts.thumb  || first.opts.$thumb ) &&
+                               ( second.type == 'image' || second.opts.thumb || second.opts.$thumb )
+                       )) {
+
+                               self.$button.on('click', function() {
+                                       self.toggle();
+                               });
+
+                               self.isActive = true;
+
+                       } else {
+                               self.$button.hide();
+
+                               self.isActive = false;
+                       }
+
+               },
+
+               create : function() {
+                       var instance = this.instance,
+                               list,
+                               src;
+
+                       this.$grid = $('<div class="fancybox-thumbs"></div>').appendTo( instance.$refs.container );
+
+                       list = '<ul>';
+
+                       $.each(instance.group, function( i, item ) {
+
+                               src = item.opts.thumb || ( item.opts.$thumb ? item.opts.$thumb.attr('src') : null );
+
+                               if ( !src && item.type === 'image' ) {
+                                       src = item.src;
+                               }
+
+                               if ( src && src.length ) {
+                                       list += '<li data-index="' + i + '"  tabindex="0" class="fancybox-thumbs-loading"><img data-src="' + src + '" /></li>';
+                               }
+
+                       });
+
+                       list += '</ul>';
+
+                       this.$list = $( list ).appendTo( this.$grid ).on('click', 'li', function() {
+                               instance.jumpTo( $(this).data('index') );
+                       });
+
+                       this.$list.find('img').hide().one('load', function() {
+
+                               var $parent             = $(this).parent().removeClass('fancybox-thumbs-loading'),
+                                       thumbWidth      = $parent.outerWidth(),
+                                       thumbHeight     = $parent.outerHeight(),
+                                       width,
+                                       height,
+                                       widthRatio,
+                                       heightRatio;
+
+                               width  = this.naturalWidth      || this.width;
+                               height = this.naturalHeight     || this.height;
+
+                               //Calculate thumbnail width/height and center it
+
+                               widthRatio  = width  / thumbWidth;
+                               heightRatio = height / thumbHeight;
+
+                               if (widthRatio >= 1 && heightRatio >= 1) {
+                                       if (widthRatio > heightRatio) {
+                                               width  = width / heightRatio;
+                                               height = thumbHeight;
+
+                                       } else {
+                                               width  = thumbWidth;
+                                               height = height / widthRatio;
+                                       }
+                               }
+
+                               $(this).css({
+                                       width         : Math.floor(width),
+                                       height        : Math.floor(height),
+                                       'margin-top'  : Math.min( 0, Math.floor(thumbHeight * 0.3 - height * 0.3 ) ),
+                                       'margin-left' : Math.min( 0, Math.floor(thumbWidth  * 0.5 - width  * 0.5 ) )
+                               }).show();
+
+                       })
+                       .each(function() {
+                               this.src = $( this ).data( 'src' );
+                       });
+
+               },
+
+               focus : function() {
+
+                       if ( this.instance.current ) {
+                               this.$list
+                                       .children()
+                                       .removeClass('fancybox-thumbs-active')
+                                       .filter('[data-index="' + this.instance.current.index  + '"]')
+                                       .addClass('fancybox-thumbs-active')
+                                       .focus();
+                       }
+
+               },
+
+               close : function() {
+                       this.$grid.hide();
+               },
+
+               update : function() {
+
+                       this.instance.$refs.container.toggleClass( 'fancybox-show-thumbs', this.isVisible );
+
+                       if ( this.isVisible ) {
+
+                               if ( !this.$grid ) {
+                                       this.create();
+                               }
+
+                               this.instance.trigger( 'onThumbsShow' );
+
+                               this.focus();
+
+                       } else if ( this.$grid ) {
+                               this.instance.trigger( 'onThumbsHide' );
+                       }
+
+                       // Update content position
+                       this.instance.update();
+
+               },
+
+               hide : function() {
+                       this.isVisible = false;
+                       this.update();
+               },
+
+               show : function() {
+                       this.isVisible = true;
+                       this.update();
+               },
+
+               toggle : function() {
+                       this.isVisible = !this.isVisible;
+                       this.update();
+               }
+
+       });
+
+       $(document).on({
+
+               'onInit.fb' : function(e, instance) {
+                       if ( instance && !instance.Thumbs ) {
+                               instance.Thumbs = new FancyThumbs( instance );
+                       }
+               },
+
+               'beforeShow.fb' : function(e, instance, item, firstRun) {
+                       var Thumbs = instance && instance.Thumbs;
+
+                       if ( !Thumbs || !Thumbs.isActive ) {
+                               return;
+                       }
+
+                       if ( item.modal ) {
+                               Thumbs.$button.hide();
+
+                               Thumbs.hide();
+
+                               return;
+                       }
+
+                       if ( firstRun && instance.opts.thumbs.autoStart === true ) {
+                               Thumbs.show();
+                       }
+
+                       if ( Thumbs.isVisible ) {
+                               Thumbs.focus();
+                       }
+               },
+
+               'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {
+                       var Thumbs = instance && instance.Thumbs;
+
+                       // "G"
+                       if ( Thumbs && Thumbs.isActive && keycode === 71 ) {
+                               keypress.preventDefault();
+
+                               Thumbs.toggle();
+                       }
+               },
+
+               'beforeClose.fb' : function( e, instance ) {
+                       var Thumbs = instance && instance.Thumbs;
+
+                       if ( Thumbs && Thumbs.isVisible && instance.opts.thumbs.hideOnClose !== false ) {
+                               Thumbs.close();
+                       }
+               }
+
+       });
+
+}(document, window.jQuery));
+
+// ==========================================================================
+//
+// Hash
+// Enables linking to each modal
+//
+// ==========================================================================
+;(function (document, window, $) {
+       'use strict';
+
+       // Simple $.escapeSelector polyfill (for jQuery prior v3)
+       if ( !$.escapeSelector ) {
+               $.escapeSelector = function( sel ) {
+                       var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
+                       var fcssescape = function( ch, asCodePoint ) {
+                               if ( asCodePoint ) {
+                                       // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+                                       if ( ch === "\0" ) {
+                                               return "\uFFFD";
+                                       }
+
+                                       // Control characters and (dependent upon position) numbers get escaped as code points
+                                       return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+                               }
+
+                               // Other potentially-special ASCII characters get backslash-escaped
+                               return "\\" + ch;
+                       };
+
+                       return ( sel + "" ).replace( rcssescape, fcssescape );
+               };
+       }
+
+       // Variable containing last hash value set by fancyBox
+       // It will be used to determine if fancyBox needs to close after hash change is detected
+    var currentHash = null;
+
+       // Throtlling the history change
+       var timerID = null;
+
+       // Get info about gallery name and current index from url
+    function parseUrl() {
+        var hash    = window.location.hash.substr( 1 );
+        var rez     = hash.split( '-' );
+        var index   = rez.length > 1 && /^\+?\d+$/.test( rez[ rez.length - 1 ] ) ? parseInt( rez.pop( -1 ), 10 ) || 1 : 1;
+        var gallery = rez.join( '-' );
+
+               // Index is starting from 1
+               if ( index < 1 ) {
+                       index = 1;
+               }
+
+        return {
+            hash    : hash,
+            index   : index,
+            gallery : gallery
+        };
+    }
+
+       // Trigger click evnt on links to open new fancyBox instance
+       function triggerFromUrl( url ) {
+               var $el;
+
+        if ( url.gallery !== '' ) {
+
+                       // If we can find element matching 'data-fancybox' atribute, then trigger click event for that ..
+                       $el = $( "[data-fancybox='" + $.escapeSelector( url.gallery ) + "']" ).eq( url.index - 1 );
+
+            if ( $el.length ) {
+                               $el.trigger( 'click' );
+
+                       } else {
+
+                               // .. if not, try finding element by ID
+                               $( "#" + $.escapeSelector( url.gallery ) + "" ).trigger( 'click' );
+
+                       }
+
+        }
+       }
+
+       // Get gallery name from current instance
+       function getGallery( instance ) {
+               var opts;
+
+               if ( !instance ) {
+                       return false;
+               }
+
+               opts = instance.current ? instance.current.opts : instance.opts;
+
+               return opts.$orig ? opts.$orig.data( 'fancybox' ) : ( opts.hash || '' );
+       }
+
+       // Star when DOM becomes ready
+    $(function() {
+
+               // Small delay is used to allow other scripts to process "dom ready" event
+               setTimeout(function() {
+
+                       // Check if this module is not disabled
+                       if ( $.fancybox.defaults.hash === false ) {
+                               return;
+                       }
+
+                       // Update hash when opening/closing fancyBox
+                   $(document).on({
+                               'onInit.fb' : function( e, instance ) {
+                                       var url, gallery;
+
+                                       if ( instance.group[ instance.currIndex ].opts.hash === false ) {
+                                               return;
+                                       }
+
+                                       url     = parseUrl();
+                                       gallery = getGallery( instance );
+
+                                       // Make sure gallery start index matches index from hash
+                                       if ( gallery && url.gallery && gallery == url.gallery ) {
+                                               instance.currIndex = url.index - 1;
+                                       }
+
+                               },
+
+                               'beforeShow.fb' : function( e, instance, current, firstRun ) {
+                                       var gallery;
+
+                                       if ( current.opts.hash === false ) {
+                                               return;
+                                       }
+
+                           gallery = getGallery( instance );
+
+                           // Update window hash
+                           if ( gallery && gallery !== '' ) {
+
+                                               if ( window.location.hash.indexOf( gallery ) < 0 ) {
+                                       instance.opts.origHash = window.location.hash;
+                                   }
+
+                                               currentHash = gallery + ( instance.group.length > 1 ? '-' + ( current.index + 1 ) : '' );
+
+                                               if ( 'replaceState' in window.history ) {
+                                                       if ( timerID ) {
+                                                               clearTimeout( timerID );
+                                                       }
+
+                                                       timerID = setTimeout(function() {
+                                                               window.history[ firstRun ? 'pushState' : 'replaceState' ]( {} , document.title, window.location.pathname + window.location.search + '#' +  currentHash );
+
+                                                               timerID = null;
+
+                                                       }, 300);
+
+                                               } else {
+                                                       window.location.hash = currentHash;
+                                               }
+
+                           }
+
+                       },
+
+                               'beforeClose.fb' : function( e, instance, current ) {
+                                       var gallery, origHash;
+
+                                       if ( timerID ) {
+                                               clearTimeout( timerID );
+                                       }
+
+                                       if ( current.opts.hash === false ) {
+                                               return;
+                                       }
+
+                                       gallery  = getGallery( instance );
+                                       origHash = instance && instance.opts.origHash ? instance.opts.origHash : '';
+
+                           // Remove hash from location bar
+                           if ( gallery && gallery !== '' ) {
+
+                               if ( 'replaceState' in history ) {
+                                                       window.history.replaceState( {} , document.title, window.location.pathname + window.location.search + origHash );
+
+                               } else {
+                                                       window.location.hash = origHash;
+
+                                                       // Keep original scroll position
+                                                       $( window ).scrollTop( instance.scrollTop ).scrollLeft( instance.scrollLeft );
+                               }
+                           }
+
+                                       currentHash = null;
+                       }
+                   });
+
+                       // Check if need to close after url has changed
+                       $(window).on('hashchange.fb', function() {
+                               var url = parseUrl();
+
+                               if ( $.fancybox.getInstance() ) {
+                                       if ( currentHash && currentHash !== url.gallery + '-' + url.index && !( url.index === 1 && currentHash == url.gallery ) ) {
+                                               currentHash = null;
+
+                                               $.fancybox.close();
+                                       }
+
+                               } else if ( url.gallery !== '' ) {
+                                       triggerFromUrl( url );
+                               }
+                       });
+
+                       // If navigating away from current page
+                       $(window).one('unload.fb popstate.fb', function() {
+                               $.fancybox.getInstance( 'close', true, 0 );
+                       });
+
+                       // Check current hash and trigger click event on matching element to start fancyBox, if needed
+                       triggerFromUrl( parseUrl() );
+
+               }, 50);
+
+    });
+
+
+}(document, window, window.jQuery));
diff --git a/wp-content/plugins/woocommerce-chronopost/public/vendor/fancybox/jquery.fancybox.min.css b/wp-content/plugins/woocommerce-chronopost/public/vendor/fancybox/jquery.fancybox.min.css
new file mode 100755 (executable)
index 0000000..ab39c7a
--- /dev/null
@@ -0,0 +1 @@
+@charset "UTF-8";.fancybox-enabled{overflow:hidden}.fancybox-enabled body{overflow:visible;height:100%}.fancybox-is-hidden{position:absolute;top:-9999px;left:-9999px;visibility:hidden}.fancybox-container{position:fixed;top:0;left:0;width:100%;height:100%;z-index:99993;-webkit-tap-highlight-color:transparent;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0)}.fancybox-container~.fancybox-container{z-index:99992}.fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-stage{position:absolute;top:0;right:0;bottom:0;left:0}.fancybox-outer{overflow-y:auto;-webkit-overflow-scrolling:touch}.fancybox-bg{background:#1e1e1e;opacity:0;transition-duration:inherit;transition-property:opacity;transition-timing-function:cubic-bezier(.47,0,.74,.71)}.fancybox-is-open .fancybox-bg{opacity:.87;transition-timing-function:cubic-bezier(.22,.61,.36,1)}.fancybox-caption-wrap,.fancybox-infobar,.fancybox-toolbar{position:absolute;direction:ltr;z-index:99997;opacity:0;visibility:hidden;transition:opacity .25s,visibility 0s linear .25s;box-sizing:border-box}.fancybox-show-caption .fancybox-caption-wrap,.fancybox-show-infobar .fancybox-infobar,.fancybox-show-toolbar .fancybox-toolbar{opacity:1;visibility:visible;transition:opacity .25s,visibility 0s}.fancybox-infobar{top:0;left:50%;margin-left:-79px}.fancybox-infobar__body{display:inline-block;width:70px;line-height:44px;font-size:13px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;text-align:center;color:#ddd;background-color:rgba(30,30,30,.7);pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;-webkit-font-smoothing:subpixel-antialiased}.fancybox-toolbar{top:0;right:0}.fancybox-stage{overflow:hidden;direction:ltr;z-index:99994;-webkit-transform:translateZ(0)}.fancybox-slide{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;padding:0;overflow:auto;outline:none;white-space:normal;box-sizing:border-box;text-align:center;z-index:99994;-webkit-overflow-scrolling:touch;display:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.fancybox-slide:before{content:"";display:inline-block;vertical-align:middle;height:100%;width:0}.fancybox-is-sliding .fancybox-slide,.fancybox-slide--current,.fancybox-slide--next,.fancybox-slide--previous{display:block}.fancybox-slide--image{overflow:visible}.fancybox-slide--image:before{display:none}.fancybox-slide--video .fancybox-content,.fancybox-slide--video iframe{background:#000}.fancybox-slide--map .fancybox-content,.fancybox-slide--map iframe{background:#e5e3df}.fancybox-slide--next{z-index:99995}.fancybox-slide>*{display:inline-block;position:relative;padding:24px;margin:44px 0;border-width:0;vertical-align:middle;text-align:left;background-color:#fff;overflow:auto;box-sizing:border-box}.fancybox-slide .fancybox-image-wrap{position:absolute;top:0;left:0;margin:0;padding:0;border:0;z-index:99995;background:transparent;cursor:default;overflow:visible;-webkit-transform-origin:top left;transform-origin:top left;background-size:100% 100%;background-repeat:no-repeat;-webkit-backface-visibility:hidden;backface-visibility:hidden}.fancybox-can-zoomOut .fancybox-image-wrap{cursor:zoom-out}.fancybox-can-zoomIn .fancybox-image-wrap{cursor:zoom-in}.fancybox-can-drag .fancybox-image-wrap{cursor:-webkit-grab;cursor:grab}.fancybox-is-dragging .fancybox-image-wrap{cursor:-webkit-grabbing;cursor:grabbing}.fancybox-image,.fancybox-spaceball{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;padding:0;border:0;max-width:none;max-height:none}.fancybox-spaceball{z-index:1}.fancybox-slide--iframe .fancybox-content{padding:0;width:80%;height:80%;max-width:calc(100% - 100px);max-height:calc(100% - 88px);overflow:visible;background:#fff}.fancybox-iframe{display:block;padding:0;border:0;height:100%}.fancybox-error,.fancybox-iframe{margin:0;width:100%;background:#fff}.fancybox-error{padding:40px;max-width:380px;cursor:default}.fancybox-error p{margin:0;padding:0;color:#444;font:16px/20px Helvetica Neue,Helvetica,Arial,sans-serif}.fancybox-close-small{position:absolute;top:0;right:0;width:44px;height:44px;padding:0;margin:0;border:0;border-radius:0;outline:none;background:transparent;z-index:10;cursor:pointer}.fancybox-close-small:after{content:"×";position:absolute;top:5px;right:5px;width:30px;height:30px;font:20px/30px Arial,Helvetica Neue,Helvetica,sans-serif;color:#888;font-weight:300;text-align:center;border-radius:50%;border-width:0;background:#fff;transition:background .25s;box-sizing:border-box;z-index:2}.fancybox-close-small:focus:after{outline:1px dotted #888}.fancybox-close-small:hover:after{color:#555;background:#eee}.fancybox-slide--iframe .fancybox-close-small{top:0;right:-44px}.fancybox-slide--iframe .fancybox-close-small:after{background:transparent;font-size:35px;color:#aaa}.fancybox-slide--iframe .fancybox-close-small:hover:after{color:#fff}.fancybox-caption-wrap{bottom:0;left:0;right:0;padding:60px 30px 0;background:linear-gradient(180deg,transparent 0,rgba(0,0,0,.1) 20%,rgba(0,0,0,.2) 40%,rgba(0,0,0,.6) 80%,rgba(0,0,0,.8));pointer-events:none}.fancybox-caption{padding:30px 0;border-top:1px solid hsla(0,0%,100%,.4);font-size:14px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:#fff;line-height:20px;-webkit-text-size-adjust:none}.fancybox-caption a,.fancybox-caption button,.fancybox-caption select{pointer-events:all}.fancybox-caption a{color:#fff;text-decoration:underline}.fancybox-button{display:inline-block;position:relative;margin:0;padding:0;border:0;width:44px;height:44px;line-height:44px;text-align:center;background:transparent;color:#ddd;border-radius:0;cursor:pointer;vertical-align:top;outline:none}.fancybox-button[disabled]{cursor:default;pointer-events:none}.fancybox-button,.fancybox-infobar__body{background:rgba(30,30,30,.6)}.fancybox-button:hover:not([disabled]){color:#fff;background:rgba(0,0,0,.8)}.fancybox-button:after,.fancybox-button:before{content:"";pointer-events:none;position:absolute;background-color:currentColor;color:currentColor;opacity:.9;box-sizing:border-box;display:inline-block}.fancybox-button[disabled]:after,.fancybox-button[disabled]:before{opacity:.3}.fancybox-button--left:after,.fancybox-button--right:after{top:18px;width:6px;height:6px;background:transparent;border-top:2px solid currentColor;border-right:2px solid currentColor}.fancybox-button--left:after{left:20px;-webkit-transform:rotate(-135deg);transform:rotate(-135deg)}.fancybox-button--right:after{right:20px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.fancybox-button--left{border-bottom-left-radius:5px}.fancybox-button--right{border-bottom-right-radius:5px}.fancybox-button--close:after,.fancybox-button--close:before{content:"";display:inline-block;position:absolute;height:2px;width:16px;top:calc(50% - 1px);left:calc(50% - 8px)}.fancybox-button--close:before{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.fancybox-button--close:after{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.fancybox-arrow{position:absolute;top:50%;margin:-50px 0 0;height:100px;width:54px;padding:0;border:0;outline:none;background:none;cursor:pointer;z-index:99995;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition:opacity .25s}.fancybox-arrow:after{content:"";position:absolute;top:28px;width:44px;height:44px;background-color:rgba(30,30,30,.8);background-image:url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjQ4IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSI0OCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMTIgNGwtMS40MSAxLjQxTDE2LjE3IDExSDR2MmgxMi4xN2wtNS41OCA1LjU5TDEyIDIwbDgtOHoiLz48L3N2Zz4=);background-repeat:no-repeat;background-position:50%;background-size:24px 24px}.fancybox-arrow--right{right:0}.fancybox-arrow--left{left:0;-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fancybox-arrow--left:after,.fancybox-arrow--right:after{left:0}.fancybox-show-nav .fancybox-arrow{opacity:.6}.fancybox-show-nav .fancybox-arrow[disabled]{opacity:.3}.fancybox-loading{border:6px solid hsla(0,0%,39%,.4);border-top:6px solid hsla(0,0%,100%,.6);border-radius:100%;height:50px;width:50px;-webkit-animation:a .8s infinite linear;animation:a .8s infinite linear;background:transparent;position:absolute;top:50%;left:50%;margin-top:-25px;margin-left:-25px;z-index:99999}@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fancybox-animated{transition-timing-function:cubic-bezier(0,0,.25,1)}.fancybox-fx-slide.fancybox-slide--previous{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);opacity:0}.fancybox-fx-slide.fancybox-slide--next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);opacity:0}.fancybox-fx-slide.fancybox-slide--current{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}.fancybox-fx-fade.fancybox-slide--next,.fancybox-fx-fade.fancybox-slide--previous{opacity:0;transition-timing-function:cubic-bezier(.19,1,.22,1)}.fancybox-fx-fade.fancybox-slide--current{opacity:1}.fancybox-fx-zoom-in-out.fancybox-slide--previous{-webkit-transform:scale3d(1.5,1.5,1.5);transform:scale3d(1.5,1.5,1.5);opacity:0}.fancybox-fx-zoom-in-out.fancybox-slide--next{-webkit-transform:scale3d(.5,.5,.5);transform:scale3d(.5,.5,.5);opacity:0}.fancybox-fx-zoom-in-out.fancybox-slide--current{-webkit-transform:scaleX(1);transform:scaleX(1);opacity:1}.fancybox-fx-rotate.fancybox-slide--previous{-webkit-transform:rotate(-1turn);transform:rotate(-1turn);opacity:0}.fancybox-fx-rotate.fancybox-slide--next{-webkit-transform:rotate(1turn);transform:rotate(1turn);opacity:0}.fancybox-fx-rotate.fancybox-slide--current{-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}.fancybox-fx-circular.fancybox-slide--previous{-webkit-transform:scale3d(0,0,0) translate3d(-100%,0,0);transform:scale3d(0,0,0) translate3d(-100%,0,0);opacity:0}.fancybox-fx-circular.fancybox-slide--next{-webkit-transform:scale3d(0,0,0) translate3d(100%,0,0);transform:scale3d(0,0,0) translate3d(100%,0,0);opacity:0}.fancybox-fx-circular.fancybox-slide--current{-webkit-transform:scaleX(1) translateZ(0);transform:scaleX(1) translateZ(0);opacity:1}.fancybox-fx-tube.fancybox-slide--previous{-webkit-transform:translate3d(-100%,0,0) scale(.1) skew(-10deg);transform:translate3d(-100%,0,0) scale(.1) skew(-10deg)}.fancybox-fx-tube.fancybox-slide--next{-webkit-transform:translate3d(100%,0,0) scale(.1) skew(10deg);transform:translate3d(100%,0,0) scale(.1) skew(10deg)}.fancybox-fx-tube.fancybox-slide--current{-webkit-transform:translateZ(0) scale(1);transform:translateZ(0) scale(1)}@media (max-width:800px){.fancybox-infobar{left:0;margin-left:0}.fancybox-button--left,.fancybox-button--right{display:none!important}.fancybox-caption{padding:20px 0;margin:0}}.fancybox-button--fullscreen:before{width:15px;height:11px;left:calc(50% - 7px);top:calc(50% - 6px);border:2px solid;background:none}.fancybox-button--pause:before,.fancybox-button--play:before{top:calc(50% - 6px);left:calc(50% - 4px);background:transparent}.fancybox-button--play:before{width:0;height:0;border-top:6px inset transparent;border-bottom:6px inset transparent;border-left:10px solid;border-radius:1px}.fancybox-button--pause:before{width:7px;height:11px;border-style:solid;border-width:0 2px}.fancybox-button--thumbs,.fancybox-thumbs{display:none}@media (min-width:800px){.fancybox-button--thumbs{display:inline-block}.fancybox-button--thumbs span{font-size:23px}.fancybox-button--thumbs:before{width:3px;height:3px;top:calc(50% - 2px);left:calc(50% - 2px);box-shadow:0 -4px 0,-4px -4px 0,4px -4px 0,inset 0 0 0 32px,-4px 0 0,4px 0 0,0 4px 0,-4px 4px 0,4px 4px 0}.fancybox-thumbs{position:absolute;top:0;right:0;bottom:0;left:auto;width:220px;margin:0;padding:5px 5px 0 0;background:#fff;word-break:normal;-webkit-tap-highlight-color:transparent;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;box-sizing:border-box;z-index:99995}.fancybox-show-thumbs .fancybox-thumbs{display:block}.fancybox-show-thumbs .fancybox-inner{right:220px}.fancybox-thumbs>ul{list-style:none;position:absolute;position:relative;width:100%;height:100%;margin:0;padding:0;overflow-x:hidden;overflow-y:auto;font-size:0}.fancybox-thumbs>ul>li{float:left;overflow:hidden;max-width:50%;padding:0;margin:0;width:105px;height:75px;position:relative;cursor:pointer;outline:none;border:5px solid transparent;border-top-width:0;border-right-width:0;-webkit-tap-highlight-color:transparent;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box}li.fancybox-thumbs-loading{background:rgba(0,0,0,.1)}.fancybox-thumbs>ul>li>img{position:absolute;top:0;left:0;min-width:100%;min-height:100%;max-width:none;max-height:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fancybox-thumbs>ul>li:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:2px;border:4px solid #4ea7f9;z-index:99991;opacity:0;transition:all .2s cubic-bezier(.25,.46,.45,.94)}.fancybox-thumbs>ul>li.fancybox-thumbs-active:before{opacity:1}}
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/public/vendor/fancybox/jquery.fancybox.min.js b/wp-content/plugins/woocommerce-chronopost/public/vendor/fancybox/jquery.fancybox.min.js
new file mode 100755 (executable)
index 0000000..e5e20f0
--- /dev/null
@@ -0,0 +1,12 @@
+// ==================================================
+// fancyBox v3.1.20
+//
+// Licensed GPLv3 for open source use
+// or fancyBox Commercial License for commercial use
+//
+// http://fancyapps.com/fancybox/
+// Copyright 2017 fancyApps
+//
+// ==================================================
+!function(t,e,n,o){"use strict";function i(t){var e=t.currentTarget,o=t.data?t.data.options:{},i=t.data?t.data.items:[],a=n(e).attr("data-fancybox")||"",s=0;t.preventDefault(),t.stopPropagation(),a?(i=i.length?i.filter('[data-fancybox="'+a+'"]'):n('[data-fancybox="'+a+'"]'),s=i.index(e),s<0&&(s=0)):i=[e],n.fancybox.open(i,o,s)}if(n){if(n.fn.fancybox)return void n.error("fancyBox already initialized");var a={loop:!1,margin:[44,0],gutter:50,keyboard:!0,arrows:!0,infobar:!1,toolbar:!0,buttons:["slideShow","fullScreen","thumbs","close"],idleTime:4,smallBtn:"auto",protect:!1,modal:!1,image:{preload:"auto"},ajax:{settings:{data:{fancybox:!0}}},iframe:{tpl:'<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen allowtransparency="true" src=""></iframe>',preload:!0,css:{},attr:{scrolling:"auto"}},animationEffect:"zoom",animationDuration:366,zoomOpacity:"auto",transitionEffect:"fade",transitionDuration:366,slideClass:"",baseClass:"",baseTpl:'<div class="fancybox-container" role="dialog" tabindex="-1"><div class="fancybox-bg"></div><div class="fancybox-inner"><div class="fancybox-infobar"><button data-fancybox-prev title="{{PREV}}" class="fancybox-button fancybox-button--left"></button><div class="fancybox-infobar__body"><span data-fancybox-index></span>&nbsp;/&nbsp;<span data-fancybox-count></span></div><button data-fancybox-next title="{{NEXT}}" class="fancybox-button fancybox-button--right"></button></div><div class="fancybox-toolbar">{{BUTTONS}}</div><div class="fancybox-navigation"><button data-fancybox-prev title="{{PREV}}" class="fancybox-arrow fancybox-arrow--left" /><button data-fancybox-next title="{{NEXT}}" class="fancybox-arrow fancybox-arrow--right" /></div><div class="fancybox-stage"></div><div class="fancybox-caption-wrap"><div class="fancybox-caption"></div></div></div></div>',spinnerTpl:'<div class="fancybox-loading"></div>',errorTpl:'<div class="fancybox-error"><p>{{ERROR}}<p></div>',btnTpl:{slideShow:'<button data-fancybox-play class="fancybox-button fancybox-button--play" title="{{PLAY_START}}"></button>',fullScreen:'<button data-fancybox-fullscreen class="fancybox-button fancybox-button--fullscreen" title="{{FULL_SCREEN}}"></button>',thumbs:'<button data-fancybox-thumbs class="fancybox-button fancybox-button--thumbs" title="{{THUMBS}}"></button>',close:'<button data-fancybox-close class="fancybox-button fancybox-button--close" title="{{CLOSE}}"></button>',smallBtn:'<button data-fancybox-close class="fancybox-close-small" title="{{CLOSE}}"></button>'},parentEl:"body",autoFocus:!0,backFocus:!0,trapFocus:!0,fullScreen:{autoStart:!1},touch:{vertical:!0,momentum:!0},hash:null,media:{},slideShow:{autoStart:!1,speed:4e3},thumbs:{autoStart:!1,hideOnClose:!0},onInit:n.noop,beforeLoad:n.noop,afterLoad:n.noop,beforeShow:n.noop,afterShow:n.noop,beforeClose:n.noop,afterClose:n.noop,onActivate:n.noop,onDeactivate:n.noop,clickContent:function(t,e){return"image"===t.type&&"zoom"},clickSlide:"close",clickOutside:"close",dblclickContent:!1,dblclickSlide:!1,dblclickOutside:!1,mobile:{clickContent:function(t,e){return"image"===t.type&&"toggleControls"},clickSlide:function(t,e){return"image"===t.type?"toggleControls":"close"},dblclickContent:function(t,e){return"image"===t.type&&"zoom"},dblclickSlide:function(t,e){return"image"===t.type&&"zoom"}},lang:"en",i18n:{en:{CLOSE:"Close",NEXT:"Next",PREV:"Previous",ERROR:"The requested content cannot be loaded. <br/> Please try again later.",PLAY_START:"Start slideshow",PLAY_STOP:"Pause slideshow",FULL_SCREEN:"Full screen",THUMBS:"Thumbnails"},de:{CLOSE:"Schliessen",NEXT:"Weiter",PREV:"Zurück",ERROR:"Die angeforderten Daten konnten nicht geladen werden. <br/> Bitte versuchen Sie es später nochmal.",PLAY_START:"Diaschau starten",PLAY_STOP:"Diaschau beenden",FULL_SCREEN:"Vollbild",THUMBS:"Vorschaubilder"}}},s=n(t),r=n(e),c=0,l=function(t){return t&&t.hasOwnProperty&&t instanceof n},u=function(){return t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||function(e){return t.setTimeout(e,1e3/60)}}(),d=function(){var t,n=e.createElement("fakeelement"),i={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(t in i)if(n.style[t]!==o)return i[t]}(),f=function(t){return t&&t.length&&t[0].offsetHeight},h=function(t,o,i){var s=this;s.opts=n.extend(!0,{index:i},a,o||{}),o&&n.isArray(o.buttons)&&(s.opts.buttons=o.buttons),s.id=s.opts.id||++c,s.group=[],s.currIndex=parseInt(s.opts.index,10)||0,s.prevIndex=null,s.prevPos=null,s.currPos=0,s.firstRun=null,s.createGroup(t),s.group.length&&(s.$lastFocus=n(e.activeElement).blur(),s.slides={},s.init(t))};n.extend(h.prototype,{init:function(){var t,e,o,i=this,a=i.group[i.currIndex].opts;i.scrollTop=r.scrollTop(),i.scrollLeft=r.scrollLeft(),n.fancybox.getInstance()||n.fancybox.isMobile||"hidden"===n("body").css("overflow")||(t=n("body").width(),n("html").addClass("fancybox-enabled"),t=n("body").width()-t,t>1&&n("head").append('<style id="fancybox-style-noscroll" type="text/css">.compensate-for-scrollbar, .fancybox-enabled body { margin-right: '+t+"px; }</style>")),o="",n.each(a.buttons,function(t,e){o+=a.btnTpl[e]||""}),e=n(i.translate(i,a.baseTpl.replace("{{BUTTONS}}",o))).addClass("fancybox-is-hidden").attr("id","fancybox-container-"+i.id).addClass(a.baseClass).data("FancyBox",i).prependTo(a.parentEl),i.$refs={container:e},["bg","inner","infobar","toolbar","stage","caption"].forEach(function(t){i.$refs[t]=e.find(".fancybox-"+t)}),(!a.arrows||i.group.length<2)&&e.find(".fancybox-navigation").remove(),a.infobar||i.$refs.infobar.remove(),a.toolbar||i.$refs.toolbar.remove(),i.trigger("onInit"),i.activate(),i.jumpTo(i.currIndex)},translate:function(t,e){var n=t.opts.i18n[t.opts.lang];return e.replace(/\{\{(\w+)\}\}/g,function(t,e){var i=n[e];return i===o?t:i})},createGroup:function(t){var e=this,i=n.makeArray(t);n.each(i,function(t,i){var a,s,r,c,l={},u={},d=[];n.isPlainObject(i)?(l=i,u=i.opts||i):"object"===n.type(i)&&n(i).length?(a=n(i),d=a.data(),u="options"in d?d.options:{},u="object"===n.type(u)?u:{},l.src="src"in d?d.src:u.src||a.attr("href"),["width","height","thumb","type","filter"].forEach(function(t){t in d&&(u[t]=d[t])}),"srcset"in d&&(u.image={srcset:d.srcset}),u.$orig=a,l.type||l.src||(l.type="inline",l.src=i)):l={type:"html",src:i+""},l.opts=n.extend(!0,{},e.opts,u),n.fancybox.isMobile&&(l.opts=n.extend(!0,{},l.opts,l.opts.mobile)),s=l.type||l.opts.type,r=l.src||"",!s&&r&&(r.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i)?s="image":r.match(/\.(pdf)((\?|#).*)?$/i)?s="pdf":"#"===r.charAt(0)&&(s="inline")),l.type=s,l.index=e.group.length,l.opts.$orig&&!l.opts.$orig.length&&delete l.opts.$orig,!l.opts.$thumb&&l.opts.$orig&&(l.opts.$thumb=l.opts.$orig.find("img:first")),l.opts.$thumb&&!l.opts.$thumb.length&&delete l.opts.$thumb,"function"===n.type(l.opts.caption)?l.opts.caption=l.opts.caption.apply(i,[e,l]):"caption"in d&&(l.opts.caption=d.caption),l.opts.caption=l.opts.caption===o?"":l.opts.caption+"","ajax"===s&&(c=r.split(/\s+/,2),c.length>1&&(l.src=c.shift(),l.opts.filter=c.shift())),"auto"==l.opts.smallBtn&&(n.inArray(s,["html","inline","ajax"])>-1?(l.opts.toolbar=!1,l.opts.smallBtn=!0):l.opts.smallBtn=!1),"pdf"===s&&(l.type="iframe",l.opts.iframe.preload=!1),l.opts.modal&&(l.opts=n.extend(!0,l.opts,{infobar:0,toolbar:0,smallBtn:0,keyboard:0,slideShow:0,fullScreen:0,thumbs:0,touch:0,clickContent:!1,clickSlide:!1,clickOutside:!1,dblclickContent:!1,dblclickSlide:!1,dblclickOutside:!1})),e.group.push(l)})},addEvents:function(){var o=this;o.removeEvents(),o.$refs.container.on("click.fb-close","[data-fancybox-close]",function(t){t.stopPropagation(),t.preventDefault(),o.close(t)}).on("click.fb-prev touchend.fb-prev","[data-fancybox-prev]",function(t){t.stopPropagation(),t.preventDefault(),o.previous()}).on("click.fb-next touchend.fb-next","[data-fancybox-next]",function(t){t.stopPropagation(),t.preventDefault(),o.next()}),s.on("orientationchange.fb resize.fb",function(t){t&&t.originalEvent&&"resize"===t.originalEvent.type?u(function(){o.update()}):(o.$refs.stage.hide(),setTimeout(function(){o.$refs.stage.show(),o.update()},500))}),r.on("focusin.fb",function(t){var i=n.fancybox?n.fancybox.getInstance():null;i.isClosing||!i.current||!i.current.opts.trapFocus||n(t.target).hasClass("fancybox-container")||n(t.target).is(e)||i&&"fixed"!==n(t.target).css("position")&&!i.$refs.container.has(t.target).length&&(t.stopPropagation(),i.focus(),s.scrollTop(o.scrollTop).scrollLeft(o.scrollLeft))}),r.on("keydown.fb",function(t){var e=o.current,i=t.keyCode||t.which;if(e&&e.opts.keyboard&&!n(t.target).is("input")&&!n(t.target).is("textarea"))return 8===i||27===i?(t.preventDefault(),void o.close(t)):37===i||38===i?(t.preventDefault(),void o.previous()):39===i||40===i?(t.preventDefault(),void o.next()):void o.trigger("afterKeydown",t,i)}),o.group[o.currIndex].opts.idleTime&&(o.idleSecondsCounter=0,r.on("mousemove.fb-idle mouseenter.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle",function(){o.idleSecondsCounter=0,o.isIdle&&o.showControls(),o.isIdle=!1}),o.idleInterval=t.setInterval(function(){o.idleSecondsCounter++,o.idleSecondsCounter>=o.group[o.currIndex].opts.idleTime&&(o.isIdle=!0,o.idleSecondsCounter=0,o.hideControls())},1e3))},removeEvents:function(){var e=this;s.off("orientationchange.fb resize.fb"),r.off("focusin.fb keydown.fb .fb-idle"),this.$refs.container.off(".fb-close .fb-prev .fb-next"),e.idleInterval&&(t.clearInterval(e.idleInterval),e.idleInterval=null)},previous:function(t){return this.jumpTo(this.currPos-1,t)},next:function(t){return this.jumpTo(this.currPos+1,t)},jumpTo:function(t,e,i){var a,s,r,c,l,u,d,h=this,p=h.group.length;if(!(h.isSliding||h.isClosing||h.isAnimating&&h.firstRun)){if(t=parseInt(t,10),s=h.current?h.current.opts.loop:h.opts.loop,!s&&(t<0||t>=p))return!1;if(a=h.firstRun=null===h.firstRun,!(p<2&&!a&&h.isSliding)){if(c=h.current,h.prevIndex=h.currIndex,h.prevPos=h.currPos,r=h.createSlide(t),p>1&&((s||r.index>0)&&h.createSlide(t-1),(s||r.index<p-1)&&h.createSlide(t+1)),h.current=r,h.currIndex=r.index,h.currPos=r.pos,h.trigger("beforeShow",a),h.updateControls(),u=n.fancybox.getTranslate(r.$slide),r.isMoved=(0!==u.left||0!==u.top)&&!r.$slide.hasClass("fancybox-animated"),r.forcedDuration=o,n.isNumeric(e)?r.forcedDuration=e:e=r.opts[a?"animationDuration":"transitionDuration"],e=parseInt(e,10),a)return r.opts.animationEffect&&e&&h.$refs.container.css("transition-duration",e+"ms"),h.$refs.container.removeClass("fancybox-is-hidden"),f(h.$refs.container),h.$refs.container.addClass("fancybox-is-open"),r.$slide.addClass("fancybox-slide--current"),h.loadSlide(r),void h.preload();n.each(h.slides,function(t,e){n.fancybox.stop(e.$slide)}),r.$slide.removeClass("fancybox-slide--next fancybox-slide--previous").addClass("fancybox-slide--current"),r.isMoved?(l=Math.round(r.$slide.width()),n.each(h.slides,function(t,o){var i=o.pos-r.pos;n.fancybox.animate(o.$slide,{top:0,left:i*l+i*o.opts.gutter},e,function(){o.$slide.removeAttr("style").removeClass("fancybox-slide--next fancybox-slide--previous"),o.pos===h.currPos&&(r.isMoved=!1,h.complete())})})):h.$refs.stage.children().removeAttr("style"),r.isLoaded?h.revealContent(r):h.loadSlide(r),h.preload(),c.pos!==r.pos&&(d="fancybox-slide--"+(c.pos>r.pos?"next":"previous"),c.$slide.removeClass("fancybox-slide--complete fancybox-slide--current fancybox-slide--next fancybox-slide--previous"),c.isComplete=!1,e&&(r.isMoved||r.opts.transitionEffect)&&(r.isMoved?c.$slide.addClass(d):(d="fancybox-animated "+d+" fancybox-fx-"+r.opts.transitionEffect,n.fancybox.animate(c.$slide,d,e,function(){c.$slide.removeClass(d).removeAttr("style")}))))}}},createSlide:function(t){var e,o,i=this;return o=t%i.group.length,o=o<0?i.group.length+o:o,!i.slides[t]&&i.group[o]&&(e=n('<div class="fancybox-slide"></div>').appendTo(i.$refs.stage),i.slides[t]=n.extend(!0,{},i.group[o],{pos:t,$slide:e,isLoaded:!1}),i.updateSlide(i.slides[t])),i.slides[t]},scaleToActual:function(t,e,i){var a,s,r,c,l,u=this,d=u.current,f=d.$content,h=parseInt(d.$slide.width(),10),p=parseInt(d.$slide.height(),10),g=d.width,b=d.height;"image"!=d.type||d.hasError||!f||u.isAnimating||(n.fancybox.stop(f),u.isAnimating=!0,t=t===o?.5*h:t,e=e===o?.5*p:e,a=n.fancybox.getTranslate(f),c=g/a.width,l=b/a.height,s=.5*h-.5*g,r=.5*p-.5*b,g>h&&(s=a.left*c-(t*c-t),s>0&&(s=0),s<h-g&&(s=h-g)),b>p&&(r=a.top*l-(e*l-e),r>0&&(r=0),r<p-b&&(r=p-b)),u.updateCursor(g,b),n.fancybox.animate(f,{top:r,left:s,scaleX:c,scaleY:l},i||330,function(){u.isAnimating=!1}),u.SlideShow&&u.SlideShow.isActive&&u.SlideShow.stop())},scaleToFit:function(t){var e,o=this,i=o.current,a=i.$content;"image"!=i.type||i.hasError||!a||o.isAnimating||(n.fancybox.stop(a),o.isAnimating=!0,e=o.getFitPos(i),o.updateCursor(e.width,e.height),n.fancybox.animate(a,{top:e.top,left:e.left,scaleX:e.width/a.width(),scaleY:e.height/a.height()},t||330,function(){o.isAnimating=!1}))},getFitPos:function(t){var e,o,i,a,r,c=this,l=t.$content,u=t.width,d=t.height,f=t.opts.margin;return!(!l||!l.length||!u&&!d)&&("number"===n.type(f)&&(f=[f,f]),2==f.length&&(f=[f[0],f[1],f[0],f[1]]),s.width()<800&&(f=[0,0,0,0]),e=parseInt(c.$refs.stage.width(),10)-(f[1]+f[3]),o=parseInt(c.$refs.stage.height(),10)-(f[0]+f[2]),i=Math.min(1,e/u,o/d),a=Math.floor(i*u),r=Math.floor(i*d),{top:Math.floor(.5*(o-r))+f[0],left:Math.floor(.5*(e-a))+f[3],width:a,height:r})},update:function(){var t=this;n.each(t.slides,function(e,n){t.updateSlide(n)})},updateSlide:function(t){var e=this,o=t.$content;o&&(t.width||t.height)&&(n.fancybox.stop(o),n.fancybox.setTranslate(o,e.getFitPos(t)),t.pos===e.currPos&&e.updateCursor()),t.$slide.trigger("refresh"),e.trigger("onUpdate",t)},updateCursor:function(t,e){var n,i=this,a=i.$refs.container.removeClass("fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-drag fancybox-can-zoomOut");i.current&&!i.isClosing&&(i.isZoomable()?(a.addClass("fancybox-is-zoomable"),n=t!==o&&e!==o?t<i.current.width&&e<i.current.height:i.isScaledDown(),n?a.addClass("fancybox-can-zoomIn"):i.current.opts.touch?a.addClass("fancybox-can-drag"):a.addClass("fancybox-can-zoomOut")):i.current.opts.touch&&a.addClass("fancybox-can-drag"))},isZoomable:function(){var t,e=this,o=e.current;if(o&&!e.isClosing)return!!("image"===o.type&&o.isLoaded&&!o.hasError&&("zoom"===o.opts.clickContent||n.isFunction(o.opts.clickContent)&&"zoom"===o.opts.clickContent(o))&&(t=e.getFitPos(o),o.width>t.width||o.height>t.height))},isScaledDown:function(){var t=this,e=t.current,o=e.$content,i=!1;return o&&(i=n.fancybox.getTranslate(o),i=i.width<e.width||i.height<e.height),i},canPan:function(){var t=this,e=t.current,n=e.$content,o=!1;return n&&(o=t.getFitPos(e),o=Math.abs(n.width()-o.width)>1||Math.abs(n.height()-o.height)>1),o},loadSlide:function(t){var e,o,i,a=this;if(!t.isLoading&&!t.isLoaded){switch(t.isLoading=!0,a.trigger("beforeLoad",t),e=t.type,o=t.$slide,o.off("refresh").trigger("onReset").addClass("fancybox-slide--"+(e||"unknown")).addClass(t.opts.slideClass),e){case"image":a.setImage(t);break;case"iframe":a.setIframe(t);break;case"html":a.setContent(t,t.src||t.content);break;case"inline":n(t.src).length?a.setContent(t,n(t.src)):a.setError(t);break;case"ajax":a.showLoading(t),i=n.ajax(n.extend({},t.opts.ajax.settings,{url:t.src,success:function(e,n){"success"===n&&a.setContent(t,e)},error:function(e,n){e&&"abort"!==n&&a.setError(t)}})),o.one("onReset",function(){i.abort()});break;default:a.setError(t)}return!0}},setImage:function(e){var o,i,a,s,r=this,c=e.opts.image.srcset;if(c){a=t.devicePixelRatio||1,s=t.innerWidth*a,i=c.split(",").map(function(t){var e={};return t.trim().split(/\s+/).forEach(function(t,n){var o=parseInt(t.substring(0,t.length-1),10);return 0===n?e.url=t:void(o&&(e.value=o,e.postfix=t[t.length-1]))}),e}),i.sort(function(t,e){return t.value-e.value});for(var l=0;l<i.length;l++){var u=i[l];if("w"===u.postfix&&u.value>=s||"x"===u.postfix&&u.value>=a){o=u;break}}!o&&i.length&&(o=i[i.length-1]),o&&(e.src=o.url,e.width&&e.height&&"w"==o.postfix&&(e.height=e.width/e.height*o.value,e.width=o.value))}e.$content=n('<div class="fancybox-image-wrap"></div>').addClass("fancybox-is-hidden").appendTo(e.$slide),e.opts.preload!==!1&&e.opts.width&&e.opts.height&&(e.opts.thumb||e.opts.$thumb)?(e.width=e.opts.width,e.height=e.opts.height,e.$ghost=n("<img />").one("error",function(){n(this).remove(),e.$ghost=null,r.setBigImage(e)}).one("load",function(){r.afterLoad(e),r.setBigImage(e)}).addClass("fancybox-image").appendTo(e.$content).attr("src",e.opts.thumb||e.opts.$thumb.attr("src"))):r.setBigImage(e)},setBigImage:function(t){var e=this,o=n("<img />");t.$image=o.one("error",function(){e.setError(t)}).one("load",function(){clearTimeout(t.timouts),t.timouts=null,e.isClosing||(t.width=this.naturalWidth,t.height=this.naturalHeight,t.opts.image.srcset&&o.attr("sizes","100vw").attr("srcset",t.opts.image.srcset),e.hideLoading(t),t.$ghost?t.timouts=setTimeout(function(){t.timouts=null,t.$ghost.hide()},Math.min(300,Math.max(1e3,t.height/1600))):e.afterLoad(t))}).addClass("fancybox-image").attr("src",t.src).appendTo(t.$content),o[0].complete?o.trigger("load"):o[0].error?o.trigger("error"):t.timouts=setTimeout(function(){o[0].complete||t.hasError||e.showLoading(t)},100)},setIframe:function(t){var e,i=this,a=t.opts.iframe,s=t.$slide;t.$content=n('<div class="fancybox-content'+(a.preload?" fancybox-is-hidden":"")+'"></div>').css(a.css).appendTo(s),e=n(a.tpl.replace(/\{rnd\}/g,(new Date).getTime())).attr(a.attr).appendTo(t.$content),a.preload?(i.showLoading(t),e.on("load.fb error.fb",function(e){this.isReady=1,t.$slide.trigger("refresh"),i.afterLoad(t)}),s.on("refresh.fb",function(){var n,i,s,r,c,l=t.$content;if(1===e[0].isReady){try{n=e.contents(),i=n.find("body")}catch(t){}i&&i.length&&(a.css.width===o||a.css.height===o)&&(s=e[0].contentWindow.document.documentElement.scrollWidth,r=Math.ceil(i.outerWidth(!0)+(l.width()-s)),c=Math.ceil(i.outerHeight(!0)),l.css({width:a.css.width===o?r+(l.outerWidth()-l.innerWidth()):a.css.width,height:a.css.height===o?c+(l.outerHeight()-l.innerHeight()):a.css.height})),l.removeClass("fancybox-is-hidden")}})):this.afterLoad(t),e.attr("src",t.src),t.opts.smallBtn===!0&&t.$content.prepend(i.translate(t,t.opts.btnTpl.smallBtn)),s.one("onReset",function(){try{n(this).find("iframe").hide().attr("src","//about:blank")}catch(t){}n(this).empty(),t.isLoaded=!1})},setContent:function(t,e){var o=this;o.isClosing||(o.hideLoading(t),t.$slide.empty(),l(e)&&e.parent().length?(e.parent(".fancybox-slide--inline").trigger("onReset"),t.$placeholder=n("<div></div>").hide().insertAfter(e),e.css("display","inline-block")):t.hasError||("string"===n.type(e)&&(e=n("<div>").append(n.trim(e)).contents(),3===e[0].nodeType&&(e=n("<div>").html(e))),t.opts.filter&&(e=n("<div>").html(e).find(t.opts.filter))),t.$slide.one("onReset",function(){t.$placeholder&&(t.$placeholder.after(e.hide()).remove(),t.$placeholder=null),t.$smallBtn&&(t.$smallBtn.remove(),t.$smallBtn=null),t.hasError||(n(this).empty(),t.isLoaded=!1)}),t.$content=n(e).appendTo(t.$slide),t.opts.smallBtn&&!t.$smallBtn&&(t.$smallBtn=n(o.translate(t,t.opts.btnTpl.smallBtn)).appendTo(t.$content)),this.afterLoad(t))},setError:function(t){t.hasError=!0,t.$slide.removeClass("fancybox-slide--"+t.type),this.setContent(t,this.translate(t,t.opts.errorTpl))},showLoading:function(t){var e=this;t=t||e.current,t&&!t.$spinner&&(t.$spinner=n(e.opts.spinnerTpl).appendTo(t.$slide))},hideLoading:function(t){var e=this;t=t||e.current,t&&t.$spinner&&(t.$spinner.remove(),delete t.$spinner)},afterLoad:function(t){var e=this;e.isClosing||(t.isLoading=!1,t.isLoaded=!0,e.trigger("afterLoad",t),e.hideLoading(t),t.opts.protect&&t.$content&&!t.hasError&&(t.$content.on("contextmenu.fb",function(t){return 2==t.button&&t.preventDefault(),!0}),"image"===t.type&&n('<div class="fancybox-spaceball"></div>').appendTo(t.$content)),e.revealContent(t))},revealContent:function(t){var e,i,a,s,r,c=this,l=t.$slide,u=!1;return e=t.opts[c.firstRun?"animationEffect":"transitionEffect"],a=t.opts[c.firstRun?"animationDuration":"transitionDuration"],a=parseInt(t.forcedDuration===o?a:t.forcedDuration,10),!t.isMoved&&t.pos===c.currPos&&a||(e=!1),"zoom"!==e||t.pos===c.currPos&&a&&"image"===t.type&&!t.hasError&&(u=c.getThumbPos(t))||(e="fade"),"zoom"===e?(r=c.getFitPos(t),r.scaleX=Math.round(r.width/u.width*100)/100,r.scaleY=Math.round(r.height/u.height*100)/100,delete r.width,delete r.height,s=t.opts.zoomOpacity,"auto"==s&&(s=Math.abs(t.width/t.height-u.width/u.height)>.1),s&&(u.opacity=.1,r.opacity=1),n.fancybox.setTranslate(t.$content.removeClass("fancybox-is-hidden"),u),f(t.$content),void n.fancybox.animate(t.$content,r,a,function(){c.complete()})):(c.updateSlide(t),e?(n.fancybox.stop(l),i="fancybox-animated fancybox-slide--"+(t.pos>c.prevPos?"next":"previous")+" fancybox-fx-"+e,l.removeAttr("style").removeClass("fancybox-slide--current fancybox-slide--next fancybox-slide--previous").addClass(i),t.$content.removeClass("fancybox-is-hidden"),f(l),void n.fancybox.animate(l,"fancybox-slide--current",a,function(e){l.removeClass(i).removeAttr("style"),t.pos===c.currPos&&c.complete()},!0)):(f(l),t.$content.removeClass("fancybox-is-hidden"),void(t.pos===c.currPos&&c.complete())))},getThumbPos:function(o){var i,a=this,s=!1,r=function(e){for(var o,i=e[0],a=i.getBoundingClientRect(),s=[];null!==i.parentElement;)"hidden"!==n(i.parentElement).css("overflow")&&"auto"!==n(i.parentElement).css("overflow")||s.push(i.parentElement.getBoundingClientRect()),i=i.parentElement;return o=s.every(function(t){var e=Math.min(a.right,t.right)-Math.max(a.left,t.left),n=Math.min(a.bottom,t.bottom)-Math.max(a.top,t.top);return e>0&&n>0}),o&&a.bottom>0&&a.right>0&&a.left<n(t).width()&&a.top<n(t).height()},c=o.opts.$thumb,l=c?c.offset():0;return l&&c[0].ownerDocument===e&&r(c)&&(i=a.$refs.stage.offset(),s={top:l.top-i.top+parseFloat(c.css("border-top-width")||0),left:l.left-i.left+parseFloat(c.css("border-left-width")||0),width:c.width(),height:c.height(),scaleX:1,scaleY:1}),s},complete:function(){var t=this,o=t.current,i={};o.isMoved||!o.isLoaded||o.isComplete||(o.isComplete=!0,o.$slide.siblings().trigger("onReset"),f(o.$slide),o.$slide.addClass("fancybox-slide--complete"),n.each(t.slides,function(e,o){o.pos>=t.currPos-1&&o.pos<=t.currPos+1?i[o.pos]=o:o&&(n.fancybox.stop(o.$slide),o.$slide.unbind().remove())}),t.slides=i,t.updateCursor(),t.trigger("afterShow"),(n(e.activeElement).is("[disabled]")||o.opts.autoFocus&&"image"!=o.type&&"iframe"!==o.type)&&t.focus())},preload:function(){var t,e,n=this;n.group.length<2||(t=n.slides[n.currPos+1],e=n.slides[n.currPos-1],t&&"image"===t.type&&n.loadSlide(t),e&&"image"===e.type&&n.loadSlide(e))},focus:function(){var t,e=this.current;this.isClosing||(t=e&&e.isComplete?e.$slide.find("button,:input,[tabindex],a").filter(":not([disabled]):visible:first"):null,t=t&&t.length?t:this.$refs.container,t.focus())},activate:function(){var t=this;n(".fancybox-container").each(function(){var e=n(this).data("FancyBox");e&&e.uid!==t.uid&&!e.isClosing&&e.trigger("onDeactivate")}),t.current&&(t.$refs.container.index()>0&&t.$refs.container.prependTo(e.body),t.updateControls()),t.trigger("onActivate"),t.addEvents()},close:function(t,e){var o,i,a,s,r,c,l=this,f=l.current,h=function(){l.cleanUp(t)};return!l.isClosing&&(l.isClosing=!0,l.trigger("beforeClose",t)===!1?(l.isClosing=!1,u(function(){l.update()}),!1):(l.removeEvents(),f.timouts&&clearTimeout(f.timouts),a=f.$content,o=f.opts.animationEffect,i=n.isNumeric(e)?e:o?f.opts.animationDuration:0,f.$slide.off(d).removeClass("fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated"),f.$slide.siblings().trigger("onReset").remove(),i&&l.$refs.container.removeClass("fancybox-is-open").addClass("fancybox-is-closing"),l.hideLoading(f),l.hideControls(),l.updateCursor(),"zoom"!==o||t!==!0&&a&&i&&"image"===f.type&&!f.hasError&&(c=l.getThumbPos(f))||(o="fade"),"zoom"===o?(n.fancybox.stop(a),r=n.fancybox.getTranslate(a),r.width=r.width*r.scaleX,r.height=r.height*r.scaleY,s=f.opts.zoomOpacity,"auto"==s&&(s=Math.abs(f.width/f.height-c.width/c.height)>.1),s&&(c.opacity=0),r.scaleX=r.width/c.width,r.scaleY=r.height/c.height,r.width=c.width,r.height=c.height,n.fancybox.setTranslate(f.$content,r),n.fancybox.animate(f.$content,c,i,h),!0):(o&&i?t===!0?setTimeout(h,i):n.fancybox.animate(f.$slide.removeClass("fancybox-slide--current"),"fancybox-animated fancybox-slide--previous fancybox-fx-"+o,i,h):h(),!0)))},cleanUp:function(t){var e,o=this;o.current.$slide.trigger("onReset"),o.$refs.container.empty().remove(),o.trigger("afterClose",t),o.$lastFocus&&!o.current.focusBack&&o.$lastFocus.focus(),o.current=null,e=n.fancybox.getInstance(),e?e.activate():(s.scrollTop(o.scrollTop).scrollLeft(o.scrollLeft),n("html").removeClass("fancybox-enabled"),n("#fancybox-style-noscroll").remove())},trigger:function(t,e){var o,i=Array.prototype.slice.call(arguments,1),a=this,s=e&&e.opts?e:a.current;return s?i.unshift(s):s=a,i.unshift(a),n.isFunction(s.opts[t])&&(o=s.opts[t].apply(s,i)),o===!1?o:void("afterClose"===t?r.trigger(t+".fb",i):a.$refs.container.trigger(t+".fb",i))},updateControls:function(t){var e=this,o=e.current,i=o.index,a=o.opts,s=a.caption,r=e.$refs.caption;o.$slide.trigger("refresh"),e.$caption=s&&s.length?r.html(s):null,e.isHiddenControls||e.showControls(),n("[data-fancybox-count]").html(e.group.length),n("[data-fancybox-index]").html(i+1),n("[data-fancybox-prev]").prop("disabled",!a.loop&&i<=0),n("[data-fancybox-next]").prop("disabled",!a.loop&&i>=e.group.length-1)},hideControls:function(){this.isHiddenControls=!0,this.$refs.container.removeClass("fancybox-show-infobar fancybox-show-toolbar fancybox-show-caption fancybox-show-nav")},showControls:function(){var t=this,e=t.current?t.current.opts:t.opts,n=t.$refs.container;t.isHiddenControls=!1,t.idleSecondsCounter=0,n.toggleClass("fancybox-show-toolbar",!(!e.toolbar||!e.buttons)).toggleClass("fancybox-show-infobar",!!(e.infobar&&t.group.length>1)).toggleClass("fancybox-show-nav",!!(e.arrows&&t.group.length>1)).toggleClass("fancybox-is-modal",!!e.modal),t.$caption?n.addClass("fancybox-show-caption "):n.removeClass("fancybox-show-caption")},toggleControls:function(){this.isHiddenControls?this.showControls():this.hideControls()}}),n.fancybox={version:"3.1.20",defaults:a,getInstance:function(t){var e=n('.fancybox-container:not(".fancybox-is-closing"):first').data("FancyBox"),o=Array.prototype.slice.call(arguments,1);return e instanceof h&&("string"===n.type(t)?e[t].apply(e,o):"function"===n.type(t)&&t.apply(e,o),e)},open:function(t,e,n){return new h(t,e,n)},close:function(t){var e=this.getInstance();e&&(e.close(),t===!0&&this.close())},destroy:function(){this.close(!0),r.off("click.fb-start")},isMobile:e.createTouch!==o&&/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent),use3d:function(){var n=e.createElement("div");return t.getComputedStyle&&t.getComputedStyle(n).getPropertyValue("transform")&&!(e.documentMode&&e.documentMode<11)}(),getTranslate:function(t){var e;if(!t||!t.length)return!1;if(e=t.eq(0).css("transform"),e&&e.indexOf("matrix")!==-1?(e=e.split("(")[1],e=e.split(")")[0],e=e.split(",")):e=[],e.length)e=e.length>10?[e[13],e[12],e[0],e[5]]:[e[5],e[4],e[0],e[3]],e=e.map(parseFloat);else{e=[0,0,1,1];var n=/\.*translate\((.*)px,(.*)px\)/i,o=n.exec(t.eq(0).attr("style"));o&&(e[0]=parseFloat(o[2]),e[1]=parseFloat(o[1]))}return{top:e[0],left:e[1],scaleX:e[2],scaleY:e[3],opacity:parseFloat(t.css("opacity")),width:t.width(),height:t.height()}},setTranslate:function(t,e){var n="",i={};if(t&&e)return e.left===o&&e.top===o||(n=(e.left===o?t.position().left:e.left)+"px, "+(e.top===o?t.position().top:e.top)+"px",n=this.use3d?"translate3d("+n+", 0px)":"translate("+n+")"),e.scaleX!==o&&e.scaleY!==o&&(n=(n.length?n+" ":"")+"scale("+e.scaleX+", "+e.scaleY+")"),n.length&&(i.transform=n),e.opacity!==o&&(i.opacity=e.opacity),e.width!==o&&(i.width=e.width),e.height!==o&&(i.height=e.height),t.css(i)},animate:function(t,e,i,a,s){var r=d||"transitionend";n.isFunction(i)&&(a=i,i=null),n.isPlainObject(e)||t.removeAttr("style"),t.on(r,function(i){(!i||!i.originalEvent||t.is(i.originalEvent.target)&&"z-index"!=i.originalEvent.propertyName)&&(t.off(r),n.isPlainObject(e)?e.scaleX!==o&&e.scaleY!==o&&(t.css("transition-duration","0ms"),e.width=t.width()*e.scaleX,e.height=t.height()*e.scaleY,e.scaleX=1,e.scaleY=1,n.fancybox.setTranslate(t,e)):s!==!0&&t.removeClass(e),n.isFunction(a)&&a(i))}),n.isNumeric(i)&&t.css("transition-duration",i+"ms"),n.isPlainObject(e)?n.fancybox.setTranslate(t,e):t.addClass(e),t.data("timer",setTimeout(function(){t.trigger("transitionend")},i+16))},stop:function(t){clearTimeout(t.data("timer")),t.off(d)}},n.fn.fancybox=function(t){var e;return t=t||{},e=t.selector||!1,e?n("body").off("click.fb-start",e).on("click.fb-start",e,{items:n(e),options:t},i):this.off("click.fb-start").on("click.fb-start",{items:this,options:t},i),this},r.on("click.fb-start","[data-fancybox]",i)}}(window,document,window.jQuery),function(t){"use strict";var e=function(e,n,o){if(e)return o=o||"","object"===t.type(o)&&(o=t.param(o,!0)),t.each(n,function(t,n){e=e.replace("$"+t,n||"")}),o.length&&(e+=(e.indexOf("?")>0?"&":"?")+o),e},n={youtube:{matcher:/(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(watch\?(.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*))(.*)/i,params:{autoplay:1,autohide:1,fs:1,rel:0,hd:1,wmode:"transparent",enablejsapi:1,html5:1},paramPlace:8,type:"iframe",url:"//www.youtube.com/embed/$4",thumb:"//img.youtube.com/vi/$4/hqdefault.jpg"},vimeo:{matcher:/^.+vimeo.com\/(.*\/)?([\d]+)(.*)?/,params:{autoplay:1,hd:1,show_title:1,show_byline:1,show_portrait:0,fullscreen:1,api:1},paramPlace:3,type:"iframe",url:"//player.vimeo.com/video/$2"},metacafe:{matcher:/metacafe.com\/watch\/(\d+)\/(.*)?/,type:"iframe",url:"//www.metacafe.com/embed/$1/?ap=1"},dailymotion:{matcher:/dailymotion.com\/video\/(.*)\/?(.*)/,params:{additionalInfos:0,autoStart:1},type:"iframe",url:"//www.dailymotion.com/embed/video/$1"},vine:{matcher:/vine.co\/v\/([a-zA-Z0-9\?\=\-]+)/,type:"iframe",url:"//vine.co/v/$1/embed/simple"},instagram:{matcher:/(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,type:"image",url:"//$1/p/$2/media/?size=l"},google_maps:{matcher:/(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(((maps\/(place\/(.*)\/)?\@(.*),(\d+.?\d+?)z))|(\?ll=))(.*)?/i,type:"iframe",url:function(t){return"//maps.google."+t[2]+"/?ll="+(t[9]?t[9]+"&z="+Math.floor(t[10])+(t[12]?t[12].replace(/^\//,"&"):""):t[12])+"&output="+(t[12]&&t[12].indexOf("layer=c")>0?"svembed":"embed")}}};t(document).on("onInit.fb",function(o,i){t.each(i.group,function(o,i){var a,s,r,c,l,u,d,f=i.src||"",h=!1;i.type||(a=t.extend(!0,{},n,i.opts.media),t.each(a,function(n,o){if(r=f.match(o.matcher),u={},d=n,r){if(h=o.type,o.paramPlace&&r[o.paramPlace]){l=r[o.paramPlace],"?"==l[0]&&(l=l.substring(1)),l=l.split("&");for(var a=0;a<l.length;++a){var p=l[a].split("=",2);2==p.length&&(u[p[0]]=decodeURIComponent(p[1].replace(/\+/g," ")))}}return c=t.extend(!0,{},o.params,i.opts[n],u),f="function"===t.type(o.url)?o.url.call(this,r,c,i):e(o.url,r,c),s="function"===t.type(o.thumb)?o.thumb.call(this,r,c,i):e(o.thumb,r),"vimeo"===d&&(f=f.replace("&%23","#")),!1}}),h?(i.src=f,i.type=h,i.opts.thumb||i.opts.$thumb&&i.opts.$thumb.length||(i.opts.thumb=s),"iframe"===h&&(t.extend(!0,i.opts,{iframe:{preload:!1,attr:{scrolling:"no"}}}),i.contentProvider=d,i.opts.slideClass+=" fancybox-slide--"+("google_maps"==d?"map":"video"))):i.type="image")})})}(window.jQuery),function(t,e,n){"use strict";var o=function(){return t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||function(e){
+return t.setTimeout(e,1e3/60)}}(),i=function(){return t.cancelAnimationFrame||t.webkitCancelAnimationFrame||t.mozCancelAnimationFrame||t.oCancelAnimationFrame||function(e){t.clearTimeout(e)}}(),a=function(e){var n=[];e=e.originalEvent||e||t.e,e=e.touches&&e.touches.length?e.touches:e.changedTouches&&e.changedTouches.length?e.changedTouches:[e];for(var o in e)e[o].pageX?n.push({x:e[o].pageX,y:e[o].pageY}):e[o].clientX&&n.push({x:e[o].clientX,y:e[o].clientY});return n},s=function(t,e,n){return e&&t?"x"===n?t.x-e.x:"y"===n?t.y-e.y:Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)):0},r=function(t){if(t.is("a,button,input,select,textarea")||n.isFunction(t.get(0).onclick))return!0;for(var e=0,o=t[0].attributes,i=o.length;e<i;e++)if("data-fancybox-"===o[e].nodeName.substr(0,14))return!0;return!1},c=function(e){var n=t.getComputedStyle(e)["overflow-y"],o=t.getComputedStyle(e)["overflow-x"],i=("scroll"===n||"auto"===n)&&e.scrollHeight>e.clientHeight,a=("scroll"===o||"auto"===o)&&e.scrollWidth>e.clientWidth;return i||a},l=function(t){for(var e=!1;;){if(e=c(t.get(0)))break;if(t=t.parent(),!t.length||t.hasClass("fancybox-stage")||t.is("body"))break}return e},u=function(t){var e=this;e.instance=t,e.$bg=t.$refs.bg,e.$stage=t.$refs.stage,e.$container=t.$refs.container,e.destroy(),e.$container.on("touchstart.fb.touch mousedown.fb.touch",n.proxy(e,"ontouchstart"))};u.prototype.destroy=function(){this.$container.off(".fb.touch")},u.prototype.ontouchstart=function(o){var i=this,c=n(o.target),u=i.instance,d=u.current,f=d.$content,h="touchstart"==o.type;if(h&&i.$container.off("mousedown.fb.touch"),!d||i.instance.isAnimating||i.instance.isClosing)return o.stopPropagation(),void o.preventDefault();if((!o.originalEvent||2!=o.originalEvent.button)&&c.length&&!r(c)&&!r(c.parent())&&!(o.originalEvent.clientX>c[0].clientWidth+c.offset().left)&&(i.startPoints=a(o),i.startPoints&&!(i.startPoints.length>1&&u.isSliding))){if(i.$target=c,i.$content=f,i.canTap=!0,n(e).off(".fb.touch"),n(e).on(h?"touchend.fb.touch touchcancel.fb.touch":"mouseup.fb.touch mouseleave.fb.touch",n.proxy(i,"ontouchend")),n(e).on(h?"touchmove.fb.touch":"mousemove.fb.touch",n.proxy(i,"ontouchmove")),o.stopPropagation(),!u.current.opts.touch&&!u.canPan()||!c.is(i.$stage)&&!i.$stage.find(c).length)return void(c.is("img")&&o.preventDefault());n.fancybox.isMobile&&(l(i.$target)||l(i.$target.parent()))||o.preventDefault(),i.canvasWidth=Math.round(d.$slide[0].clientWidth),i.canvasHeight=Math.round(d.$slide[0].clientHeight),i.startTime=(new Date).getTime(),i.distanceX=i.distanceY=i.distance=0,i.isPanning=!1,i.isSwiping=!1,i.isZooming=!1,i.sliderStartPos=i.sliderLastPos||{top:0,left:0},i.contentStartPos=n.fancybox.getTranslate(i.$content),i.contentLastPos=null,1!==i.startPoints.length||i.isZooming||(i.canTap=!u.isSliding,"image"===d.type&&(i.contentStartPos.width>i.canvasWidth+1||i.contentStartPos.height>i.canvasHeight+1)?(n.fancybox.stop(i.$content),i.$content.css("transition-duration","0ms"),i.isPanning=!0):i.isSwiping=!0,i.$container.addClass("fancybox-controls--isGrabbing")),2!==i.startPoints.length||u.isAnimating||d.hasError||"image"!==d.type||!d.isLoaded&&!d.$ghost||(i.isZooming=!0,i.isSwiping=!1,i.isPanning=!1,n.fancybox.stop(i.$content),i.$content.css("transition-duration","0ms"),i.centerPointStartX=.5*(i.startPoints[0].x+i.startPoints[1].x)-n(t).scrollLeft(),i.centerPointStartY=.5*(i.startPoints[0].y+i.startPoints[1].y)-n(t).scrollTop(),i.percentageOfImageAtPinchPointX=(i.centerPointStartX-i.contentStartPos.left)/i.contentStartPos.width,i.percentageOfImageAtPinchPointY=(i.centerPointStartY-i.contentStartPos.top)/i.contentStartPos.height,i.startDistanceBetweenFingers=s(i.startPoints[0],i.startPoints[1]))}},u.prototype.ontouchmove=function(t){var e=this;if(e.newPoints=a(t),n.fancybox.isMobile&&(l(e.$target)||l(e.$target.parent())))return t.stopPropagation(),void(e.canTap=!1);if((e.instance.current.opts.touch||e.instance.canPan())&&e.newPoints&&e.newPoints.length&&(e.distanceX=s(e.newPoints[0],e.startPoints[0],"x"),e.distanceY=s(e.newPoints[0],e.startPoints[0],"y"),e.distance=s(e.newPoints[0],e.startPoints[0]),e.distance>0)){if(!e.$target.is(e.$stage)&&!e.$stage.find(e.$target).length)return;t.stopPropagation(),t.preventDefault(),e.isSwiping?e.onSwipe():e.isPanning?e.onPan():e.isZooming&&e.onZoom()}},u.prototype.onSwipe=function(){var e,a=this,s=a.isSwiping,r=a.sliderStartPos.left||0;s===!0?Math.abs(a.distance)>10&&(a.canTap=!1,a.instance.group.length<2&&a.instance.opts.touch.vertical?a.isSwiping="y":a.instance.isSliding||a.instance.opts.touch.vertical===!1||"auto"===a.instance.opts.touch.vertical&&n(t).width()>800?a.isSwiping="x":(e=Math.abs(180*Math.atan2(a.distanceY,a.distanceX)/Math.PI),a.isSwiping=e>45&&e<135?"y":"x"),a.instance.isSliding=a.isSwiping,a.startPoints=a.newPoints,n.each(a.instance.slides,function(t,e){n.fancybox.stop(e.$slide),e.$slide.css("transition-duration","0ms"),e.inTransition=!1,e.pos===a.instance.current.pos&&(a.sliderStartPos.left=n.fancybox.getTranslate(e.$slide).left)}),a.instance.SlideShow&&a.instance.SlideShow.isActive&&a.instance.SlideShow.stop()):("x"==s&&(a.distanceX>0&&(a.instance.group.length<2||0===a.instance.current.index&&!a.instance.current.opts.loop)?r+=Math.pow(a.distanceX,.8):a.distanceX<0&&(a.instance.group.length<2||a.instance.current.index===a.instance.group.length-1&&!a.instance.current.opts.loop)?r-=Math.pow(-a.distanceX,.8):r+=a.distanceX),a.sliderLastPos={top:"x"==s?0:a.sliderStartPos.top+a.distanceY,left:r},a.requestId&&(i(a.requestId),a.requestId=null),a.requestId=o(function(){a.sliderLastPos&&(n.each(a.instance.slides,function(t,e){var o=e.pos-a.instance.currPos;n.fancybox.setTranslate(e.$slide,{top:a.sliderLastPos.top,left:a.sliderLastPos.left+o*a.canvasWidth+o*e.opts.gutter})}),a.$container.addClass("fancybox-is-sliding"))}))},u.prototype.onPan=function(){var t,e,a,s=this;s.canTap=!1,t=s.contentStartPos.width>s.canvasWidth?s.contentStartPos.left+s.distanceX:s.contentStartPos.left,e=s.contentStartPos.top+s.distanceY,a=s.limitMovement(t,e,s.contentStartPos.width,s.contentStartPos.height),a.scaleX=s.contentStartPos.scaleX,a.scaleY=s.contentStartPos.scaleY,s.contentLastPos=a,s.requestId&&(i(s.requestId),s.requestId=null),s.requestId=o(function(){n.fancybox.setTranslate(s.$content,s.contentLastPos)})},u.prototype.limitMovement=function(t,e,n,o){var i,a,s,r,c=this,l=c.canvasWidth,u=c.canvasHeight,d=c.contentStartPos.left,f=c.contentStartPos.top,h=c.distanceX,p=c.distanceY;return i=Math.max(0,.5*l-.5*n),a=Math.max(0,.5*u-.5*o),s=Math.min(l-n,.5*l-.5*n),r=Math.min(u-o,.5*u-.5*o),n>l&&(h>0&&t>i&&(t=i-1+Math.pow(-i+d+h,.8)||0),h<0&&t<s&&(t=s+1-Math.pow(s-d-h,.8)||0)),o>u&&(p>0&&e>a&&(e=a-1+Math.pow(-a+f+p,.8)||0),p<0&&e<r&&(e=r+1-Math.pow(r-f-p,.8)||0)),{top:e,left:t}},u.prototype.limitPosition=function(t,e,n,o){var i=this,a=i.canvasWidth,s=i.canvasHeight;return n>a?(t=t>0?0:t,t=t<a-n?a-n:t):t=Math.max(0,a/2-n/2),o>s?(e=e>0?0:e,e=e<s-o?s-o:e):e=Math.max(0,s/2-o/2),{top:e,left:t}},u.prototype.onZoom=function(){var e=this,a=e.contentStartPos.width,r=e.contentStartPos.height,c=e.contentStartPos.left,l=e.contentStartPos.top,u=s(e.newPoints[0],e.newPoints[1]),d=u/e.startDistanceBetweenFingers,f=Math.floor(a*d),h=Math.floor(r*d),p=(a-f)*e.percentageOfImageAtPinchPointX,g=(r-h)*e.percentageOfImageAtPinchPointY,b=(e.newPoints[0].x+e.newPoints[1].x)/2-n(t).scrollLeft(),m=(e.newPoints[0].y+e.newPoints[1].y)/2-n(t).scrollTop(),y=b-e.centerPointStartX,v=m-e.centerPointStartY,x=c+(p+y),w=l+(g+v),$={top:w,left:x,scaleX:e.contentStartPos.scaleX*d,scaleY:e.contentStartPos.scaleY*d};e.canTap=!1,e.newWidth=f,e.newHeight=h,e.contentLastPos=$,e.requestId&&(i(e.requestId),e.requestId=null),e.requestId=o(function(){n.fancybox.setTranslate(e.$content,e.contentLastPos)})},u.prototype.ontouchend=function(t){var o=this,s=Math.max((new Date).getTime()-o.startTime,1),r=o.isSwiping,c=o.isPanning,l=o.isZooming;return o.endPoints=a(t),o.$container.removeClass("fancybox-controls--isGrabbing"),n(e).off(".fb.touch"),o.requestId&&(i(o.requestId),o.requestId=null),o.isSwiping=!1,o.isPanning=!1,o.isZooming=!1,o.canTap?o.onTap(t):(o.speed=366,o.velocityX=o.distanceX/s*.5,o.velocityY=o.distanceY/s*.5,o.speedX=Math.max(.5*o.speed,Math.min(1.5*o.speed,1/Math.abs(o.velocityX)*o.speed)),void(c?o.endPanning():l?o.endZooming():o.endSwiping(r)))},u.prototype.endSwiping=function(t){var e=this,o=!1;e.instance.isSliding=!1,e.sliderLastPos=null,"y"==t&&Math.abs(e.distanceY)>50?(n.fancybox.animate(e.instance.current.$slide,{top:e.sliderStartPos.top+e.distanceY+150*e.velocityY,opacity:0},150),o=e.instance.close(!0,300)):"x"==t&&e.distanceX>50&&e.instance.group.length>1?o=e.instance.previous(e.speedX):"x"==t&&e.distanceX<-50&&e.instance.group.length>1&&(o=e.instance.next(e.speedX)),o!==!1||"x"!=t&&"y"!=t||e.instance.jumpTo(e.instance.current.index,150),e.$container.removeClass("fancybox-is-sliding")},u.prototype.endPanning=function(){var t,e,o,i=this;i.contentLastPos&&(i.instance.current.opts.touch.momentum===!1?(t=i.contentLastPos.left,e=i.contentLastPos.top):(t=i.contentLastPos.left+i.velocityX*i.speed,e=i.contentLastPos.top+i.velocityY*i.speed),o=i.limitPosition(t,e,i.contentStartPos.width,i.contentStartPos.height),o.width=i.contentStartPos.width,o.height=i.contentStartPos.height,n.fancybox.animate(i.$content,o,330))},u.prototype.endZooming=function(){var t,e,o,i,a=this,s=a.instance.current,r=a.newWidth,c=a.newHeight;a.contentLastPos&&(t=a.contentLastPos.left,e=a.contentLastPos.top,i={top:e,left:t,width:r,height:c,scaleX:1,scaleY:1},n.fancybox.setTranslate(a.$content,i),r<a.canvasWidth&&c<a.canvasHeight?a.instance.scaleToFit(150):r>s.width||c>s.height?a.instance.scaleToActual(a.centerPointStartX,a.centerPointStartY,150):(o=a.limitPosition(t,e,r,c),n.fancybox.setTranslate(a.content,n.fancybox.getTranslate(a.$content)),n.fancybox.animate(a.$content,o,150)))},u.prototype.onTap=function(t){var e,o=this,i=n(t.target),s=o.instance,r=s.current,c=t&&a(t)||o.startPoints,l=c[0]?c[0].x-o.$stage.offset().left:0,u=c[0]?c[0].y-o.$stage.offset().top:0,d=function(e){var i=r.opts[e];if(n.isFunction(i)&&(i=i.apply(s,[r,t])),i)switch(i){case"close":s.close(o.startEvent);break;case"toggleControls":s.toggleControls(!0);break;case"next":s.next();break;case"nextOrClose":s.group.length>1?s.next():s.close(o.startEvent);break;case"zoom":"image"==r.type&&(r.isLoaded||r.$ghost)&&(s.canPan()?s.scaleToFit():s.isScaledDown()?s.scaleToActual(l,u):s.group.length<2&&s.close(o.startEvent))}};if(!(t.originalEvent&&2==t.originalEvent.button||s.isSliding||l>i[0].clientWidth+i.offset().left)){if(i.is(".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container"))e="Outside";else if(i.is(".fancybox-slide"))e="Slide";else{if(!s.current.$content||!s.current.$content.has(t.target).length)return;e="Content"}if(o.tapped){if(clearTimeout(o.tapped),o.tapped=null,Math.abs(l-o.tapX)>50||Math.abs(u-o.tapY)>50||s.isSliding)return this;d("dblclick"+e)}else o.tapX=l,o.tapY=u,r.opts["dblclick"+e]&&r.opts["dblclick"+e]!==r.opts["click"+e]?o.tapped=setTimeout(function(){o.tapped=null,d("click"+e)},300):d("click"+e);return this}},n(e).on("onActivate.fb",function(t,e){e&&!e.Guestures&&(e.Guestures=new u(e))}),n(e).on("beforeClose.fb",function(t,e){e&&e.Guestures&&e.Guestures.destroy()})}(window,document,window.jQuery),function(t,e){"use strict";var n=function(t){this.instance=t,this.init()};e.extend(n.prototype,{timer:null,isActive:!1,$button:null,speed:3e3,init:function(){var t=this;t.$button=t.instance.$refs.toolbar.find("[data-fancybox-play]").on("click",function(){t.toggle()}),(t.instance.group.length<2||!t.instance.group[t.instance.currIndex].opts.slideShow)&&t.$button.hide()},set:function(){var t=this;t.instance&&t.instance.current&&(t.instance.current.opts.loop||t.instance.currIndex<t.instance.group.length-1)?t.timer=setTimeout(function(){t.instance.next()},t.instance.current.opts.slideShow.speed||t.speed):(t.stop(),t.instance.idleSecondsCounter=0,t.instance.showControls())},clear:function(){var t=this;clearTimeout(t.timer),t.timer=null},start:function(){var t=this,e=t.instance.current;t.instance&&e&&(e.opts.loop||e.index<t.instance.group.length-1)&&(t.isActive=!0,t.$button.attr("title",e.opts.i18n[e.opts.lang].PLAY_STOP).addClass("fancybox-button--pause"),e.isComplete&&t.set())},stop:function(){var t=this,e=t.instance.current;t.clear(),t.$button.attr("title",e.opts.i18n[e.opts.lang].PLAY_START).removeClass("fancybox-button--pause"),t.isActive=!1},toggle:function(){var t=this;t.isActive?t.stop():t.start()}}),e(t).on({"onInit.fb":function(t,e){e&&!e.SlideShow&&(e.SlideShow=new n(e))},"beforeShow.fb":function(t,e,n,o){var i=e&&e.SlideShow;o?i&&n.opts.slideShow.autoStart&&i.start():i&&i.isActive&&i.clear()},"afterShow.fb":function(t,e,n){var o=e&&e.SlideShow;o&&o.isActive&&o.set()},"afterKeydown.fb":function(n,o,i,a,s){var r=o&&o.SlideShow;!r||!i.opts.slideShow||80!==s&&32!==s||e(t.activeElement).is("button,a,input")||(a.preventDefault(),r.toggle())},"beforeClose.fb onDeactivate.fb":function(t,e){var n=e&&e.SlideShow;n&&n.stop()}}),e(t).on("visibilitychange",function(){var n=e.fancybox.getInstance(),o=n&&n.SlideShow;o&&o.isActive&&(t.hidden?o.clear():o.set())})}(document,window.jQuery),function(t,e){"use strict";var n=function(){var e,n,o,i=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],a={};for(n=0;n<i.length;n++)if(e=i[n],e&&e[1]in t){for(o=0;o<e.length;o++)a[i[0][o]]=e[o];return a}return!1}();if(!n)return void(e.fancybox.defaults.btnTpl.fullScreen=!1);var o={request:function(e){e=e||t.documentElement,e[n.requestFullscreen](e.ALLOW_KEYBOARD_INPUT)},exit:function(){t[n.exitFullscreen]()},toggle:function(e){e=e||t.documentElement,this.isFullscreen()?this.exit():this.request(e)},isFullscreen:function(){return Boolean(t[n.fullscreenElement])},enabled:function(){return Boolean(t[n.fullscreenEnabled])}};e(t).on({"onInit.fb":function(t,e){var n,i=e.$refs.toolbar.find("[data-fancybox-fullscreen]");e&&!e.FullScreen&&e.group[e.currIndex].opts.fullScreen?(n=e.$refs.container,n.on("click.fb-fullscreen","[data-fancybox-fullscreen]",function(t){t.stopPropagation(),t.preventDefault(),o.toggle(n[0])}),e.opts.fullScreen&&e.opts.fullScreen.autoStart===!0&&o.request(n[0]),e.FullScreen=o):i.hide()},"afterKeydown.fb":function(t,e,n,o,i){e&&e.FullScreen&&70===i&&(o.preventDefault(),e.FullScreen.toggle(e.$refs.container[0]))},"beforeClose.fb":function(t){t&&t.FullScreen&&o.exit()}}),e(t).on(n.fullscreenchange,function(){var t=e.fancybox.getInstance();t.current&&"image"===t.current.type&&t.isAnimating&&(t.current.$content.css("transition","none"),t.isAnimating=!1,t.update(!0,!0,0))})}(document,window.jQuery),function(t,e){"use strict";var n=function(t){this.instance=t,this.init()};e.extend(n.prototype,{$button:null,$grid:null,$list:null,isVisible:!1,init:function(){var t=this,e=t.instance.group[0],n=t.instance.group[1];t.$button=t.instance.$refs.toolbar.find("[data-fancybox-thumbs]"),t.instance.group.length>1&&t.instance.group[t.instance.currIndex].opts.thumbs&&("image"==e.type||e.opts.thumb||e.opts.$thumb)&&("image"==n.type||n.opts.thumb||n.opts.$thumb)?(t.$button.on("click",function(){t.toggle()}),t.isActive=!0):(t.$button.hide(),t.isActive=!1)},create:function(){var t,n,o=this.instance;this.$grid=e('<div class="fancybox-thumbs"></div>').appendTo(o.$refs.container),t="<ul>",e.each(o.group,function(e,o){n=o.opts.thumb||(o.opts.$thumb?o.opts.$thumb.attr("src"):null),n||"image"!==o.type||(n=o.src),n&&n.length&&(t+='<li data-index="'+e+'"  tabindex="0" class="fancybox-thumbs-loading"><img data-src="'+n+'" /></li>')}),t+="</ul>",this.$list=e(t).appendTo(this.$grid).on("click","li",function(){o.jumpTo(e(this).data("index"))}),this.$list.find("img").hide().one("load",function(){var t,n,o,i,a=e(this).parent().removeClass("fancybox-thumbs-loading"),s=a.outerWidth(),r=a.outerHeight();t=this.naturalWidth||this.width,n=this.naturalHeight||this.height,o=t/s,i=n/r,o>=1&&i>=1&&(o>i?(t/=i,n=r):(t=s,n/=o)),e(this).css({width:Math.floor(t),height:Math.floor(n),"margin-top":Math.min(0,Math.floor(.3*r-.3*n)),"margin-left":Math.min(0,Math.floor(.5*s-.5*t))}).show()}).each(function(){this.src=e(this).data("src")})},focus:function(){this.instance.current&&this.$list.children().removeClass("fancybox-thumbs-active").filter('[data-index="'+this.instance.current.index+'"]').addClass("fancybox-thumbs-active").focus()},close:function(){this.$grid.hide()},update:function(){this.instance.$refs.container.toggleClass("fancybox-show-thumbs",this.isVisible),this.isVisible?(this.$grid||this.create(),this.instance.trigger("onThumbsShow"),this.focus()):this.$grid&&this.instance.trigger("onThumbsHide"),this.instance.update()},hide:function(){this.isVisible=!1,this.update()},show:function(){this.isVisible=!0,this.update()},toggle:function(){this.isVisible=!this.isVisible,this.update()}}),e(t).on({"onInit.fb":function(t,e){e&&!e.Thumbs&&(e.Thumbs=new n(e))},"beforeShow.fb":function(t,e,n,o){var i=e&&e.Thumbs;if(i&&i.isActive){if(n.modal)return i.$button.hide(),void i.hide();o&&e.opts.thumbs.autoStart===!0&&i.show(),i.isVisible&&i.focus()}},"afterKeydown.fb":function(t,e,n,o,i){var a=e&&e.Thumbs;a&&a.isActive&&71===i&&(o.preventDefault(),a.toggle())},"beforeClose.fb":function(t,e){var n=e&&e.Thumbs;n&&n.isVisible&&e.opts.thumbs.hideOnClose!==!1&&n.close()}})}(document,window.jQuery),function(t,e,n){"use strict";function o(){var t=e.location.hash.substr(1),n=t.split("-"),o=n.length>1&&/^\+?\d+$/.test(n[n.length-1])?parseInt(n.pop(-1),10)||1:1,i=n.join("-");return o<1&&(o=1),{hash:t,index:o,gallery:i}}function i(t){var e;""!==t.gallery&&(e=n("[data-fancybox='"+n.escapeSelector(t.gallery)+"']").eq(t.index-1),e.length?e.trigger("click"):n("#"+n.escapeSelector(t.gallery)).trigger("click"))}function a(t){var e;return!!t&&(e=t.current?t.current.opts:t.opts,e.$orig?e.$orig.data("fancybox"):e.hash||"")}n.escapeSelector||(n.escapeSelector=function(t){var e=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,n=function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t};return(t+"").replace(e,n)});var s=null,r=null;n(function(){setTimeout(function(){n.fancybox.defaults.hash!==!1&&(n(t).on({"onInit.fb":function(t,e){var n,i;e.group[e.currIndex].opts.hash!==!1&&(n=o(),i=a(e),i&&n.gallery&&i==n.gallery&&(e.currIndex=n.index-1))},"beforeShow.fb":function(n,o,i,c){var l;i.opts.hash!==!1&&(l=a(o),l&&""!==l&&(e.location.hash.indexOf(l)<0&&(o.opts.origHash=e.location.hash),s=l+(o.group.length>1?"-"+(i.index+1):""),"replaceState"in e.history?(r&&clearTimeout(r),r=setTimeout(function(){e.history[c?"pushState":"replaceState"]({},t.title,e.location.pathname+e.location.search+"#"+s),r=null},300)):e.location.hash=s))},"beforeClose.fb":function(o,i,c){var l,u;r&&clearTimeout(r),c.opts.hash!==!1&&(l=a(i),u=i&&i.opts.origHash?i.opts.origHash:"",l&&""!==l&&("replaceState"in history?e.history.replaceState({},t.title,e.location.pathname+e.location.search+u):(e.location.hash=u,n(e).scrollTop(i.scrollTop).scrollLeft(i.scrollLeft))),s=null)}}),n(e).on("hashchange.fb",function(){var t=o();n.fancybox.getInstance()?!s||s===t.gallery+"-"+t.index||1===t.index&&s==t.gallery||(s=null,n.fancybox.close()):""!==t.gallery&&i(t)}),n(e).one("unload.fb popstate.fb",function(){n.fancybox.getInstance("close",!0,0)}),i(o()))},50)})}(document,window,window.jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/templates/chronoprecise.php b/wp-content/plugins/woocommerce-chronopost/templates/chronoprecise.php
new file mode 100755 (executable)
index 0000000..5ffd15a
--- /dev/null
@@ -0,0 +1,204 @@
+<?php
+/**
+ * @var array $_creneaux Tableau des créneaux
+ * @var string $shipping_method_id l'ID de la méthode Chronopost (chronoprecise)
+ * @var WooCommerce $woocommerce
+ */
+global $woocommerce;
+?>
+<input type="hidden" name="chronopostprecise_creneaux_info" id="chronopostprecise_creneaux_info" value="" />
+<div id="outer-container-method-chronoprecise">
+    <!-- Permettra de récupérer toutes les infos aux format json du créneau choisi : date, code, ... -->
+    <div id="container-method-chronoprecise">
+    <?php
+    if($_creneaux):
+        $_chronopost_product = chrono_get_shipping_method_by_id($shipping_method_id);
+        $_baseCost = 0;
+        foreach ($woocommerce->cart->get_shipping_packages() as $package) {
+            $packageCost = $_chronopost_product->get_shipping_rate($package);
+            if (isset($packageCost['cost'])) {
+                   $_baseCost+= $packageCost['cost'];
+            }
+        }
+
+        /**
+        * Code jours dans résultats WS :
+        * 1 = Lundi
+        * 7 = dimanche
+        **/
+
+        $_creneauxSort = array();
+        $_distinctCreneauxHoraire = array();
+        $_semaine = 0;
+
+        if(!is_array($_creneaux)) $_creneaux = array($_creneaux);
+
+        /* trie des creneaux par heures et date */
+        foreach($_creneaux as $_creneau):
+
+            $_creneau = (array)$_creneau;
+
+            $_creneauHoraire = str_pad($_creneau['startHour'], 2, '0', STR_PAD_LEFT).'h';
+            if($_creneau['startMinutes']) {
+                $_creneauHoraire .= str_pad($_creneau['startMinutes'], 2, '0', STR_PAD_LEFT);
+            }
+            $_creneauHoraire .= ' - ';
+            $_creneauHoraire .= str_pad($_creneau['endHour'], 2, '0', STR_PAD_LEFT).'h';
+            if($_creneau['endMinutes']) {
+                $_creneauHoraire .= str_pad($_creneau['endMinutes'], 2, '0', STR_PAD_LEFT);
+            }
+
+            if(!in_array($_creneauHoraire, $_distinctCreneauxHoraire)) {
+                $_distinctCreneauxHoraire[] = $_creneauHoraire;
+            }
+
+            /* rangement des creneaux par jour */
+            if(!isset($_creneauxSort[$_creneau['deliveryDate']])) {
+                $_creneauxSort[$_creneau['deliveryDate']] = array();
+            }
+            $_creneauxSort[$_creneau['deliveryDate']][$_creneauHoraire] = $_creneau;
+
+        endforeach;
+
+        sort($_distinctCreneauxHoraire);
+
+        /* on scinde le tableau tous les 7 éléments (7 jours) */
+        $_creneauxSortByWeek = array_chunk($_creneauxSort, 7, true);
+
+        ?>
+
+        <?php //setlocale(LC_ALL, Mage::app()->getLocale()->getLocaleCode().'.UTF-8','fra'); ?>
+
+        <?php //if(!Mage::getStoreConfig('onestepcheckout/general/rewrite_checkout_links')): ?>
+            <div class="global-desktop" id="global-desktop">
+                <div id="rdvCarousel">
+                    <div id="rdvCarouselContent">
+                        <?php for($i = 0; $i < count($_creneauxSortByWeek); $i++): ?>
+                            <?php $_creneauxSort = $_creneauxSortByWeek[$i]; ?>
+                            <section class="slide content" id="content<?php echo $i ?>">
+                                <table class="date-time" id="thead" width="100%">
+                                    <thead>
+                                        <tr class="date-row" id="date-row">
+                                            <th>&nbsp;</th>
+                                            <?php foreach($_creneauxSort as $_day => $_creneaux): ?>
+                                                   <?php $_dateTime = new DateTime($_day); ?>
+                                                <th scope="col" id="th_<?php echo date('d-m-Y', strtotime($_day) + $_dateTime->getOffset()) ?>">
+                                                    <?php echo date_i18n( "D <\s\p\a\\n>j</\s\p\a\\n> M", $_dateTime->getTimestamp() + $_dateTime->getOffset(), true ); ?>
+                                                </th>
+                                            <?php endforeach; ?>
+                                        </tr>
+                                    </thead>
+                                    <tbody>
+                                        <?php foreach($_distinctCreneauxHoraire as $_horaire): ?>
+                                            <tr>
+                                                <th class="time-cell" scope="row"><?php echo $_horaire; ?></th>
+                                                <?php foreach($_creneauxSort as $_day => $_creneaux): ?>
+                                                    <?php if(isset($_creneaux[$_horaire]) && $_creneaux[$_horaire]['status'] == 'O'): ?>
+                                                        <?php $_creneaux[$_horaire]['meshCode'] = $meshCode;?>
+                                                        <?php $_creneaux[$_horaire]['transactionID'] = $transactionID;?>
+                                                        <td<?php echo $_creneaux[$_horaire]['incentiveFlag'] ? ' class="incentive-flag"': ''; ?>>
+                                                            <label>
+                                                                <span>
+                                                                    <input type="radio" name="shipping_method_chronopostprecise" class="shipping_method_chronopostprecise" data-slotvaluejson='<?php echo json_encode($_creneaux[$_horaire],true) ?>' >
+                                                                    <?php
+                                                                    if(chrono_get_method_settings($shipping_method_id, 'cost_levels_show') == '1') {
+                                                                        echo wc_price($_baseCost + $cost_levels[$_creneaux[$_horaire]['tariffLevel']]['price']);
+                                                                    }
+                                                                    ?>
+                                                                </span>
+                                                            </label>
+                                                        </td>
+                                                    <?php else: ?>
+                                                        <td class="unavailable">&nbsp;</td>
+                                                    <?php endif; ?>
+                                                <?php endforeach; ?>
+                                            </tr>
+                                        <?php endforeach; ?>
+                                    </tbody>
+                                </table>
+                            </section>
+                        <?php endfor; ?>
+                    </div>
+                </div> <!-- End #rdvCarousel -->
+                <div class="button-center">
+                    <button data-fancybox-close="" class="button button-primary" title="Close"><span class="wcicon-check"></span> <?php _e('Confirm time slot', 'chronopost'); ?></button>
+                </div>
+            </div>
+        <?php //else: ?>
+            <!-- Mobile -->
+            <div class="global-mobile" id="global-mobile">
+                <header class="header">
+                    <h1>S&eacute;lectionnez une date et un cr&eacute;neau horaire ci dessous&nbsp;:</h1>
+                    <div class="scroll">
+                        <table class="date-time">
+                            <tr class="date-row" id="date-row">
+                                <?php for($i = 0; $i < count($_creneauxSortByWeek); $i++): ?>
+                                    <?php $_creneauxSort = $_creneauxSortByWeek[$i]; ?>
+                                    <?php foreach($_creneauxSort as $_day => $_creneaux): ?>
+                                        <th scope="col" id="th_mobile_<?php echo date('d-m-Y', strtotime($_day)) ?>">
+                                            <?php $_dateTime = new DateTime($_day); ?>
+                                            <?php echo date_i18n( "D <\s\p\a\\n>j</\s\p\a\\n> M", $_dateTime->getTimestamp() ); ?>
+                                        </th>
+                                    <?php endforeach; ?>
+                                <?php endfor; ?>
+                            </tr>
+                        </table>
+                    </div>
+                </header>
+                <section class="content" id="content">
+                    <div class="scroll-v" id="scroll-v">
+                        <div class="time-list" id="time-list">
+                            <?php for($i = 0; $i < count($_creneauxSortByWeek); $i++): ?>
+                                <?php $_creneauxSort = $_creneauxSortByWeek[$i]; ?>
+
+                                <?php foreach($_creneauxSort as $_day => $_creneaux): ?>
+                                    <ul id="ul_mobile_<?php echo date('d-m-Y', strtotime($_day)) ?>" style="display:none;">
+                                        <?php foreach($_distinctCreneauxHoraire as $_horaire): ?>
+                                            <?php if(isset($_creneaux[$_horaire]) && $_creneaux[$_horaire]['status'] == 'O'): ?>
+                                                <?php $_creneaux[$_horaire]['meshCode'] = $meshCode;?>
+                                                <?php $_creneaux[$_horaire]['transactionID'] = $transactionID;?>
+                                                <li>
+                                                    <label>
+                                                        <span class="time-cell"><b><?php echo $_horaire; ?></b></span>
+                                                        <span class="price-cell">
+                                                            <input type="radio" name="shipping_method_chronopostprecise" class="shipping_method_chronopostprecise" data-slotvaluejson='<?php echo json_encode($_creneaux[$_horaire],true) ?>' >
+                                                            <?php
+                                                            if(chrono_get_method_settings($shipping_method_id, 'cost_levels_show') == '1') {
+                                                                echo wc_price($_baseCost + $cost_levels[$_creneaux[$_horaire]['tariffLevel']]['price']);
+                                                            }
+                                                            ?>
+                                                        </span>
+                                                    </label>
+                                                </li>
+                                            <?php else: ?>
+                                                <li class="unavailable">
+                                                    <label>
+                                                        <span class="time-cell"><?php echo $_horaire; ?></span>
+                                                        <span class="price-cell">non disponible</span>
+                                                    </label>
+                                                </li>
+                                            <?php endif; ?>
+                                        <?php endforeach; ?>
+                                    </ul>
+                                <?php endforeach; ?>
+
+                            <?php endfor; ?>
+                        </div>
+                </section>
+                <div class="button-center">
+                    <button data-fancybox-close="" class="button button-primary" title="Close"><span class="wcicon-check"></span> <?php _e('Confirm time slot', 'chronopost'); ?></button>
+                </div>
+            </div>
+            <!-- End mobile -->
+
+        <?php //endif; ?>
+
+    <?php else: /* Aucun créneaux disponible */ ?>
+        <div class="chronopostprecise_noresult" id="chronopostprecise_noresult"></div>
+            <div class="popin" id="popin">
+                <?php _e("It's not possible to use this service for your order yet, we are currently working to allow new cities to benefit from this new service.", 'chronopost') ?>
+            </div>
+        </script>
+    <?php endif; ?>
+    </div>
+</div>
diff --git a/wp-content/plugins/woocommerce-chronopost/templates/chronorelais.php b/wp-content/plugins/woocommerce-chronopost/templates/chronorelais.php
new file mode 100755 (executable)
index 0000000..7e21e85
--- /dev/null
@@ -0,0 +1,60 @@
+<div id="outer-container-method-chronorelay">
+    <?php if(count($pickup_relays)>0): ?>
+    <div id="container-method-chronorelay">
+        <h3><?php echo __('Chronopost Pickup Relays', 'chronopost')?></h3>
+        <?php
+            $postcode = WC()->customer->get_shipping_postcode();
+
+            $method_settings = chrono_get_method_settings($shipping_method_id);
+
+            $_shippingMethodCode = $shipping_method_id;
+
+            $_canChangePostcode = (isset($method_settings['can_change_postcode']) && $method_settings['can_change_postcode'] == 'yes') ? true: false;
+            $_canShowGoogleMap = (isset($method_settings['can_show_googlemap']) && $method_settings['can_show_googlemap'] == 'yes') ? true: false;
+        ?>
+
+        <?php 
+            $chronomapOptions = array(
+                'methodID' => $shipping_method_id,
+                'pickupRelays' => $pickup_relays,
+                'idMap' => 'chronomap',
+                'pickupRelayIcon' => CHRONO_PLUGIN_URL . '/public/img/Picto_Chrono_Relais.png',
+                'homeIcon' => CHRONO_PLUGIN_URL . '/public/img/home.png',
+                'activateGmap' => $_canShowGoogleMap,
+                'canModifyPostcode' => $_canChangePostcode
+            );
+
+            $jsonChronoMapOptions = htmlspecialchars(json_encode($chronomapOptions), ENT_QUOTES, 'UTF-8');
+        ?>
+        <p class="chronorelais-explain"><?php echo __('Please select one of the 5 pickup relays displayed below to serve as the delivery address.', 'chronopost')?></p>
+        <?php if($_canChangePostcode): ?>
+        <div class="mappostalcode">
+            <div class="postcode-input">
+                <input type="text" name="mappostalcode" id="mappostalcode" value="<?php echo $postcode ?>" class="input-text" />
+            </div>
+            <button id="mappostalcodebtn" class="button" type="button"><?php echo __('Update my postcode', 'chronopost'); ?></button>
+        </div>
+        <?php endif; ?>
+        <div class="wrapper-methods-chronorelais">
+            <div class="sp-methods-chronorelais">
+                <ul class="pickup-relays">
+                <?php foreach($pickup_relays as $key=>$chronorelais): ?>
+                    <li class="form-row validate-required">
+                        <input name="shipping_method_chronorelais" type="radio" value="<?php echo $chronorelais->identifiantChronopostPointA2PAS;?>" id="s_method_chronorelais_<?php echo $chronorelais->identifiantChronopostPointA2PAS;?>" class="radio">
+                        <label for="s_method_chronorelais_<?php echo $chronorelais->identifiantChronopostPointA2PAS;?>"><?php echo $chronorelais->nomEnseigne.' - '.$chronorelais->adresse1.' - '.$chronorelais->codePostal.' - '.$chronorelais->localite;?></label>
+                    </li>
+                <?php endforeach; ?>
+                </ul>
+            </div>
+            <div class="button-center">
+                <button data-fancybox-close="" class="button button-primary" title="Close"><span class="wcicon-check"></span> <?php _e('Confirm relay pickup', 'chronopost'); ?></button>
+            </div>
+            <?php if($_canShowGoogleMap): ?>
+            <div class="chronorelaismap" data-chronomap-options='<?php echo $jsonChronoMapOptions; ?>'>
+                    <div id="chronomap" class="chronomap"></div>
+            </div>
+            <?php endif; ?>
+        </div>
+    </div>
+    <?php endif; ?>
+</div>
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/uninstall.php b/wp-content/plugins/woocommerce-chronopost/uninstall.php
new file mode 100755 (executable)
index 0000000..d3e5b12
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * Fired when the plugin is uninstalled.
+ *
+ * When populating this file, consider the following flow
+ * of control:
+ *
+ * - This method should be static
+ * - Check if the $_REQUEST content actually is the plugin name
+ * - Run an admin referrer check to make sure it goes through authentication
+ * - Verify the output of $_GET makes sense
+ * - Repeat with other user roles. Best directly by using the links/query string parameters.
+ * - Repeat things for multisite. Once for a single site in the network, once sitewide.
+ *
+ * This file may be updated more in future version of the Boilerplate; however, this is the
+ * general skeleton and outline for how the file should work.
+ *
+ * For more information, see the following discussion:
+ * https://github.com/tommcfarlin/WordPress-Plugin-Boilerplate/pull/123#issuecomment-28541913
+ *
+ * @link       https://www.adexos.fr
+ * @since      1.0.0
+ *
+ * @package    Chronopost
+ */
+
+// If uninstall not called from WordPress, then exit.
+if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
+       exit;
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/autoload.php b/wp-content/plugins/woocommerce-chronopost/vendor/autoload.php
new file mode 100755 (executable)
index 0000000..12a0ed1
--- /dev/null
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderIniteab9314b778804e12241b2f586dd44b9::getLoader();
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/composer/ClassLoader.php b/wp-content/plugins/woocommerce-chronopost/vendor/composer/ClassLoader.php
new file mode 100755 (executable)
index 0000000..fce8549
--- /dev/null
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ *     $loader = new \Composer\Autoload\ClassLoader();
+ *
+ *     // register classes with namespaces
+ *     $loader->add('Symfony\Component', __DIR__.'/component');
+ *     $loader->add('Symfony',           __DIR__.'/framework');
+ *
+ *     // activate the autoloader
+ *     $loader->register();
+ *
+ *     // to enable searching the include path (eg. for PEAR packages)
+ *     $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see    http://www.php-fig.org/psr/psr-0/
+ * @see    http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+    // PSR-4
+    private $prefixLengthsPsr4 = array();
+    private $prefixDirsPsr4 = array();
+    private $fallbackDirsPsr4 = array();
+
+    // PSR-0
+    private $prefixesPsr0 = array();
+    private $fallbackDirsPsr0 = array();
+
+    private $useIncludePath = false;
+    private $classMap = array();
+    private $classMapAuthoritative = false;
+    private $missingClasses = array();
+    private $apcuPrefix;
+
+    public function getPrefixes()
+    {
+        if (!empty($this->prefixesPsr0)) {
+            return call_user_func_array('array_merge', $this->prefixesPsr0);
+        }
+
+        return array();
+    }
+
+    public function getPrefixesPsr4()
+    {
+        return $this->prefixDirsPsr4;
+    }
+
+    public function getFallbackDirs()
+    {
+        return $this->fallbackDirsPsr0;
+    }
+
+    public function getFallbackDirsPsr4()
+    {
+        return $this->fallbackDirsPsr4;
+    }
+
+    public function getClassMap()
+    {
+        return $this->classMap;
+    }
+
+    /**
+     * @param array $classMap Class to filename map
+     */
+    public function addClassMap(array $classMap)
+    {
+        if ($this->classMap) {
+            $this->classMap = array_merge($this->classMap, $classMap);
+        } else {
+            $this->classMap = $classMap;
+        }
+    }
+
+    /**
+     * Registers a set of PSR-0 directories for a given prefix, either
+     * appending or prepending to the ones previously set for this prefix.
+     *
+     * @param string       $prefix  The prefix
+     * @param array|string $paths   The PSR-0 root directories
+     * @param bool         $prepend Whether to prepend the directories
+     */
+    public function add($prefix, $paths, $prepend = false)
+    {
+        if (!$prefix) {
+            if ($prepend) {
+                $this->fallbackDirsPsr0 = array_merge(
+                    (array) $paths,
+                    $this->fallbackDirsPsr0
+                );
+            } else {
+                $this->fallbackDirsPsr0 = array_merge(
+                    $this->fallbackDirsPsr0,
+                    (array) $paths
+                );
+            }
+
+            return;
+        }
+
+        $first = $prefix[0];
+        if (!isset($this->prefixesPsr0[$first][$prefix])) {
+            $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+            return;
+        }
+        if ($prepend) {
+            $this->prefixesPsr0[$first][$prefix] = array_merge(
+                (array) $paths,
+                $this->prefixesPsr0[$first][$prefix]
+            );
+        } else {
+            $this->prefixesPsr0[$first][$prefix] = array_merge(
+                $this->prefixesPsr0[$first][$prefix],
+                (array) $paths
+            );
+        }
+    }
+
+    /**
+     * Registers a set of PSR-4 directories for a given namespace, either
+     * appending or prepending to the ones previously set for this namespace.
+     *
+     * @param string       $prefix  The prefix/namespace, with trailing '\\'
+     * @param array|string $paths   The PSR-4 base directories
+     * @param bool         $prepend Whether to prepend the directories
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function addPsr4($prefix, $paths, $prepend = false)
+    {
+        if (!$prefix) {
+            // Register directories for the root namespace.
+            if ($prepend) {
+                $this->fallbackDirsPsr4 = array_merge(
+                    (array) $paths,
+                    $this->fallbackDirsPsr4
+                );
+            } else {
+                $this->fallbackDirsPsr4 = array_merge(
+                    $this->fallbackDirsPsr4,
+                    (array) $paths
+                );
+            }
+        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+            // Register directories for a new namespace.
+            $length = strlen($prefix);
+            if ('\\' !== $prefix[$length - 1]) {
+                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+            }
+            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+            $this->prefixDirsPsr4[$prefix] = (array) $paths;
+        } elseif ($prepend) {
+            // Prepend directories for an already registered namespace.
+            $this->prefixDirsPsr4[$prefix] = array_merge(
+                (array) $paths,
+                $this->prefixDirsPsr4[$prefix]
+            );
+        } else {
+            // Append directories for an already registered namespace.
+            $this->prefixDirsPsr4[$prefix] = array_merge(
+                $this->prefixDirsPsr4[$prefix],
+                (array) $paths
+            );
+        }
+    }
+
+    /**
+     * Registers a set of PSR-0 directories for a given prefix,
+     * replacing any others previously set for this prefix.
+     *
+     * @param string       $prefix The prefix
+     * @param array|string $paths  The PSR-0 base directories
+     */
+    public function set($prefix, $paths)
+    {
+        if (!$prefix) {
+            $this->fallbackDirsPsr0 = (array) $paths;
+        } else {
+            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+        }
+    }
+
+    /**
+     * Registers a set of PSR-4 directories for a given namespace,
+     * replacing any others previously set for this namespace.
+     *
+     * @param string       $prefix The prefix/namespace, with trailing '\\'
+     * @param array|string $paths  The PSR-4 base directories
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function setPsr4($prefix, $paths)
+    {
+        if (!$prefix) {
+            $this->fallbackDirsPsr4 = (array) $paths;
+        } else {
+            $length = strlen($prefix);
+            if ('\\' !== $prefix[$length - 1]) {
+                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+            }
+            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+            $this->prefixDirsPsr4[$prefix] = (array) $paths;
+        }
+    }
+
+    /**
+     * Turns on searching the include path for class files.
+     *
+     * @param bool $useIncludePath
+     */
+    public function setUseIncludePath($useIncludePath)
+    {
+        $this->useIncludePath = $useIncludePath;
+    }
+
+    /**
+     * Can be used to check if the autoloader uses the include path to check
+     * for classes.
+     *
+     * @return bool
+     */
+    public function getUseIncludePath()
+    {
+        return $this->useIncludePath;
+    }
+
+    /**
+     * Turns off searching the prefix and fallback directories for classes
+     * that have not been registered with the class map.
+     *
+     * @param bool $classMapAuthoritative
+     */
+    public function setClassMapAuthoritative($classMapAuthoritative)
+    {
+        $this->classMapAuthoritative = $classMapAuthoritative;
+    }
+
+    /**
+     * Should class lookup fail if not found in the current class map?
+     *
+     * @return bool
+     */
+    public function isClassMapAuthoritative()
+    {
+        return $this->classMapAuthoritative;
+    }
+
+    /**
+     * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+     *
+     * @param string|null $apcuPrefix
+     */
+    public function setApcuPrefix($apcuPrefix)
+    {
+        $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
+    }
+
+    /**
+     * The APCu prefix in use, or null if APCu caching is not enabled.
+     *
+     * @return string|null
+     */
+    public function getApcuPrefix()
+    {
+        return $this->apcuPrefix;
+    }
+
+    /**
+     * Registers this instance as an autoloader.
+     *
+     * @param bool $prepend Whether to prepend the autoloader or not
+     */
+    public function register($prepend = false)
+    {
+        spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+    }
+
+    /**
+     * Unregisters this instance as an autoloader.
+     */
+    public function unregister()
+    {
+        spl_autoload_unregister(array($this, 'loadClass'));
+    }
+
+    /**
+     * Loads the given class or interface.
+     *
+     * @param  string    $class The name of the class
+     * @return bool|null True if loaded, null otherwise
+     */
+    public function loadClass($class)
+    {
+        if ($file = $this->findFile($class)) {
+            includeFile($file);
+
+            return true;
+        }
+    }
+
+    /**
+     * Finds the path to the file where the class is defined.
+     *
+     * @param string $class The name of the class
+     *
+     * @return string|false The path if found, false otherwise
+     */
+    public function findFile($class)
+    {
+        // class map lookup
+        if (isset($this->classMap[$class])) {
+            return $this->classMap[$class];
+        }
+        if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+            return false;
+        }
+        if (null !== $this->apcuPrefix) {
+            $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+            if ($hit) {
+                return $file;
+            }
+        }
+
+        $file = $this->findFileWithExtension($class, '.php');
+
+        // Search for Hack files if we are running on HHVM
+        if (false === $file && defined('HHVM_VERSION')) {
+            $file = $this->findFileWithExtension($class, '.hh');
+        }
+
+        if (null !== $this->apcuPrefix) {
+            apcu_add($this->apcuPrefix.$class, $file);
+        }
+
+        if (false === $file) {
+            // Remember that this class does not exist.
+            $this->missingClasses[$class] = true;
+        }
+
+        return $file;
+    }
+
+    private function findFileWithExtension($class, $ext)
+    {
+        // PSR-4 lookup
+        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+        $first = $class[0];
+        if (isset($this->prefixLengthsPsr4[$first])) {
+            $subPath = $class;
+            while (false !== $lastPos = strrpos($subPath, '\\')) {
+                $subPath = substr($subPath, 0, $lastPos);
+                $search = $subPath . '\\';
+                if (isset($this->prefixDirsPsr4[$search])) {
+                    $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
+                    foreach ($this->prefixDirsPsr4[$search] as $dir) {
+                        if (file_exists($file = $dir . $pathEnd)) {
+                            return $file;
+                        }
+                    }
+                }
+            }
+        }
+
+        // PSR-4 fallback dirs
+        foreach ($this->fallbackDirsPsr4 as $dir) {
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+                return $file;
+            }
+        }
+
+        // PSR-0 lookup
+        if (false !== $pos = strrpos($class, '\\')) {
+            // namespaced class name
+            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+        } else {
+            // PEAR-like class name
+            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+        }
+
+        if (isset($this->prefixesPsr0[$first])) {
+            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+                if (0 === strpos($class, $prefix)) {
+                    foreach ($dirs as $dir) {
+                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+                            return $file;
+                        }
+                    }
+                }
+            }
+        }
+
+        // PSR-0 fallback dirs
+        foreach ($this->fallbackDirsPsr0 as $dir) {
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+                return $file;
+            }
+        }
+
+        // PSR-0 include paths.
+        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+            return $file;
+        }
+
+        return false;
+    }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+    include $file;
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/composer/LICENSE b/wp-content/plugins/woocommerce-chronopost/vendor/composer/LICENSE
new file mode 100755 (executable)
index 0000000..f27399a
--- /dev/null
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/composer/autoload_classmap.php b/wp-content/plugins/woocommerce-chronopost/vendor/composer/autoload_classmap.php
new file mode 100755 (executable)
index 0000000..7a077b1
--- /dev/null
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'FPDF' => $vendorDir . '/setasign/fpdf/fpdf.php',
+);
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/composer/autoload_namespaces.php b/wp-content/plugins/woocommerce-chronopost/vendor/composer/autoload_namespaces.php
new file mode 100755 (executable)
index 0000000..b7fc012
--- /dev/null
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+);
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/composer/autoload_psr4.php b/wp-content/plugins/woocommerce-chronopost/vendor/composer/autoload_psr4.php
new file mode 100755 (executable)
index 0000000..d373a62
--- /dev/null
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'setasign\\Fpdi\\' => array($vendorDir . '/setasign/fpdi/src'),
+);
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/composer/autoload_real.php b/wp-content/plugins/woocommerce-chronopost/vendor/composer/autoload_real.php
new file mode 100755 (executable)
index 0000000..c45105a
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderIniteab9314b778804e12241b2f586dd44b9
+{
+    private static $loader;
+
+    public static function loadClassLoader($class)
+    {
+        if ('Composer\Autoload\ClassLoader' === $class) {
+            require __DIR__ . '/ClassLoader.php';
+        }
+    }
+
+    public static function getLoader()
+    {
+        if (null !== self::$loader) {
+            return self::$loader;
+        }
+
+        spl_autoload_register(array('ComposerAutoloaderIniteab9314b778804e12241b2f586dd44b9', 'loadClassLoader'), true, true);
+        self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+        spl_autoload_unregister(array('ComposerAutoloaderIniteab9314b778804e12241b2f586dd44b9', 'loadClassLoader'));
+
+        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+        if ($useStaticLoader) {
+            require_once __DIR__ . '/autoload_static.php';
+
+            call_user_func(\Composer\Autoload\ComposerStaticIniteab9314b778804e12241b2f586dd44b9::getInitializer($loader));
+        } else {
+            $map = require __DIR__ . '/autoload_namespaces.php';
+            foreach ($map as $namespace => $path) {
+                $loader->set($namespace, $path);
+            }
+
+            $map = require __DIR__ . '/autoload_psr4.php';
+            foreach ($map as $namespace => $path) {
+                $loader->setPsr4($namespace, $path);
+            }
+
+            $classMap = require __DIR__ . '/autoload_classmap.php';
+            if ($classMap) {
+                $loader->addClassMap($classMap);
+            }
+        }
+
+        $loader->register(true);
+
+        return $loader;
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/composer/autoload_static.php b/wp-content/plugins/woocommerce-chronopost/vendor/composer/autoload_static.php
new file mode 100755 (executable)
index 0000000..02ff5b8
--- /dev/null
@@ -0,0 +1,36 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticIniteab9314b778804e12241b2f586dd44b9
+{
+    public static $prefixLengthsPsr4 = array (
+        's' => 
+        array (
+            'setasign\\Fpdi\\' => 14,
+        ),
+    );
+
+    public static $prefixDirsPsr4 = array (
+        'setasign\\Fpdi\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/setasign/fpdi/src',
+        ),
+    );
+
+    public static $classMap = array (
+        'FPDF' => __DIR__ . '/..' . '/setasign/fpdf/fpdf.php',
+    );
+
+    public static function getInitializer(ClassLoader $loader)
+    {
+        return \Closure::bind(function () use ($loader) {
+            $loader->prefixLengthsPsr4 = ComposerStaticIniteab9314b778804e12241b2f586dd44b9::$prefixLengthsPsr4;
+            $loader->prefixDirsPsr4 = ComposerStaticIniteab9314b778804e12241b2f586dd44b9::$prefixDirsPsr4;
+            $loader->classMap = ComposerStaticIniteab9314b778804e12241b2f586dd44b9::$classMap;
+
+        }, null, ClassLoader::class);
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/composer/installed.json b/wp-content/plugins/woocommerce-chronopost/vendor/composer/installed.json
new file mode 100755 (executable)
index 0000000..a6cad3e
--- /dev/null
@@ -0,0 +1,147 @@
+[
+    {
+        "name": "setasign/fpdf",
+        "version": "1.8.1",
+        "version_normalized": "1.8.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/Setasign/FPDF.git",
+            "reference": "2c68c9e6c034ac3187d25968790139a73184cdb1"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/Setasign/FPDF/zipball/2c68c9e6c034ac3187d25968790139a73184cdb1",
+            "reference": "2c68c9e6c034ac3187d25968790139a73184cdb1",
+            "shasum": ""
+        },
+        "time": "2016-01-01T17:47:15+00:00",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "classmap": [
+                "fpdf.php"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "no usage restriction"
+        ],
+        "authors": [
+            {
+                "name": "Olivier Plathey",
+                "email": "oliver@fpdf.org",
+                "homepage": "http://fpdf.org/"
+            }
+        ],
+        "description": "FPDF is a PHP class which allows to generate PDF files with pure PHP. F from FPDF stands for Free: you may use it for any kind of usage and modify it to suit your needs.",
+        "homepage": "http://www.fpdf.org",
+        "keywords": [
+            "fpdf",
+            "pdf"
+        ]
+    },
+    {
+        "name": "setasign/fpdi",
+        "version": "v2.2.0",
+        "version_normalized": "2.2.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/Setasign/FPDI.git",
+            "reference": "3c266002f8044f61b17329f7cd702d44d73f0f7f"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/Setasign/FPDI/zipball/3c266002f8044f61b17329f7cd702d44d73f0f7f",
+            "reference": "3c266002f8044f61b17329f7cd702d44d73f0f7f",
+            "shasum": ""
+        },
+        "require": {
+            "ext-zlib": "*",
+            "php": "^5.6 || ^7.0"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~5.7",
+            "setasign/fpdf": "~1.8",
+            "setasign/tfpdf": "1.25",
+            "tecnickcom/tcpdf": "~6.2"
+        },
+        "suggest": {
+            "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured.",
+            "setasign/fpdi-fpdf": "Use this package to automatically evaluate dependencies to FPDF.",
+            "setasign/fpdi-tcpdf": "Use this package to automatically evaluate dependencies to TCPDF.",
+            "setasign/fpdi-tfpdf": "Use this package to automatically evaluate dependencies to tFPDF."
+        },
+        "time": "2019-01-30T14:11:19+00:00",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "setasign\\Fpdi\\": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Jan Slabon",
+                "email": "jan.slabon@setasign.com",
+                "homepage": "https://www.setasign.com"
+            },
+            {
+                "name": "Maximilian Kresse",
+                "email": "maximilian.kresse@setasign.com",
+                "homepage": "https://www.setasign.com"
+            }
+        ],
+        "description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.",
+        "homepage": "https://www.setasign.com/fpdi",
+        "keywords": [
+            "fpdf",
+            "fpdi",
+            "pdf"
+        ]
+    },
+    {
+        "name": "setasign/fpdi-fpdf",
+        "version": "v2.2.0",
+        "version_normalized": "2.2.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/Setasign/FPDI-FPDF.git",
+            "reference": "e4363ac09e1b766b38ebea1c3cbe82b3480a11e9"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/Setasign/FPDI-FPDF/zipball/e4363ac09e1b766b38ebea1c3cbe82b3480a11e9",
+            "reference": "e4363ac09e1b766b38ebea1c3cbe82b3480a11e9",
+            "shasum": ""
+        },
+        "require": {
+            "setasign/fpdf": "^1.8",
+            "setasign/fpdi": "^2.2"
+        },
+        "time": "2019-01-30T14:38:19+00:00",
+        "type": "library",
+        "installation-source": "dist",
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Jan Slabon",
+                "email": "jan.slabon@setasign.com",
+                "homepage": "https://www.setasign.com"
+            }
+        ],
+        "description": "Kind of metadata package for dependencies of the latest versions of FPDI and FPDF.",
+        "homepage": "https://www.setasign.com/fpdi",
+        "keywords": [
+            "fpdf",
+            "fpdi",
+            "pdf"
+        ]
+    }
+]
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/FAQ.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/FAQ.htm
new file mode 100755 (executable)
index 0000000..3ed7414
--- /dev/null
@@ -0,0 +1,272 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>FAQ</title>
+<link type="text/css" rel="stylesheet" href="fpdf.css">
+<style type="text/css">
+ul {list-style-type:none; margin:0; padding:0}
+ul#answers li {margin-top:1.8em}
+.question {font-weight:bold; color:#900000}
+</style>
+</head>
+<body>
+<h1>FAQ</h1>
+<ul>
+<li><b>1.</b> <a href='#q1'>What's exactly the license of FPDF? Are there any usage restrictions?</a></li>
+<li><b>2.</b> <a href='#q2'>I get the following error when I try to generate a PDF: Some data has already been output, can't send PDF file</a></li>
+<li><b>3.</b> <a href='#q3'>Accented letters are replaced with some strange characters like é.</a></li>
+<li><b>4.</b> <a href='#q4'>I try to display the Euro symbol but it doesn't work.</a></li>
+<li><b>5.</b> <a href='#q5'>I try to display a variable in the Header method but nothing prints.</a></li>
+<li><b>6.</b> <a href='#q6'>I have defined the Header and Footer methods in my PDF class but nothing shows.</a></li>
+<li><b>7.</b> <a href='#q7'>I can't make line breaks work. I put \n in the string printed by MultiCell but it doesn't work.</a></li>
+<li><b>8.</b> <a href='#q8'>I use jQuery to generate the PDF but it doesn't show.</a></li>
+<li><b>9.</b> <a href='#q9'>I draw a frame with very precise dimensions, but when printed I notice some differences.</a></li>
+<li><b>10.</b> <a href='#q10'>I'd like to use the whole surface of the page, but when printed I always have some margins. How can I get rid of them?</a></li>
+<li><b>11.</b> <a href='#q11'>How can I put a background in my PDF?</a></li>
+<li><b>12.</b> <a href='#q12'>How can I set a specific header or footer on the first page?</a></li>
+<li><b>13.</b> <a href='#q13'>I'd like to use extensions provided by different scripts. How can I combine them?</a></li>
+<li><b>14.</b> <a href='#q14'>How can I open the PDF in a new tab?</a></li>
+<li><b>15.</b> <a href='#q15'>How can I send the PDF by email?</a></li>
+<li><b>16.</b> <a href='#q16'>What's the limit of the file sizes I can generate with FPDF?</a></li>
+<li><b>17.</b> <a href='#q17'>Can I modify a PDF with FPDF?</a></li>
+<li><b>18.</b> <a href='#q18'>I'd like to make a search engine in PHP and index PDF files. Can I do it with FPDF?</a></li>
+<li><b>19.</b> <a href='#q19'>Can I convert an HTML page to PDF with FPDF?</a></li>
+<li><b>20.</b> <a href='#q20'>Can I concatenate PDF files with FPDF?</a></li>
+</ul>
+
+<ul id='answers'>
+<li id='q1'>
+<p><b>1.</b> <span class='question'>What's exactly the license of FPDF? Are there any usage restrictions?</span></p>
+FPDF is released under a permissive license: there is no usage restriction. You may embed it
+freely in your application (commercial or not), with or without modifications.
+</li>
+
+<li id='q2'>
+<p><b>2.</b> <span class='question'>I get the following error when I try to generate a PDF: Some data has already been output, can't send PDF file</span></p>
+You must send nothing to the browser except the PDF itself: no HTML, no space, no carriage return. A common
+case is having extra blank at the end of an included script file.<br>
+If you can't figure out where the problem comes from, this other message appearing just before can help you:<br>
+<br>
+<b>Warning:</b> Cannot modify header information - headers already sent by (output started at script.php:X)<br>
+<br>
+It means that script.php outputs something at line X. Go to this line and fix it.
+In case the message doesn't show, first check that you didn't disable warnings, then add this at the very
+beginning of your script:
+<div class="doc-source">
+<pre><code>ob_end_clean();</code></pre>
+</div>
+If you still don't see it, disable zlib.output_compression in your php.ini and it should appear.
+</li>
+
+<li id='q3'>
+<p><b>3.</b> <span class='question'>Accented letters are replaced with some strange characters like é.</span></p>
+Don't use UTF-8 with the standard fonts; they expect text encoded in ISO-8859-1 or windows-1252.
+You can use utf8_decode() to perform a conversion to ISO-8859-1:
+<div class="doc-source">
+<pre><code>$str = utf8_decode($str);</code></pre>
+</div>
+But some characters such as Euro won't be translated correctly. If the iconv extension is available, the
+right way to do it is the following:
+<div class="doc-source">
+<pre><code>$str = iconv('UTF-8', 'windows-1252', $str);</code></pre>
+</div>
+In case you need characters outside windows-1252, take a look at tutorial #7 or
+<a href="http://www.fpdf.org/?go=script&amp;id=92" target="_blank">tFPDF</a>.
+</li>
+
+<li id='q4'>
+<p><b>4.</b> <span class='question'>I try to display the Euro symbol but it doesn't work.</span></p>
+The standard fonts have the Euro character at position 128. You can define a constant like this
+for convenience:
+<div class="doc-source">
+<pre><code>define('EURO', chr(128));</code></pre>
+</div>
+</li>
+
+<li id='q5'>
+<p><b>5.</b> <span class='question'>I try to display a variable in the Header method but nothing prints.</span></p>
+You have to use the <code>global</code> keyword to access global variables, for example:
+<div class="doc-source">
+<pre><code>function Header()
+{
+    global $title;
+
+    $this-&gt;SetFont('Arial', 'B', 15);
+    $this-&gt;Cell(0, 10, $title, 1, 1, 'C');
+}
+
+$title = 'My title';</code></pre>
+</div>
+Alternatively, you can use an object property:
+<div class="doc-source">
+<pre><code>function Header()
+{
+    $this-&gt;SetFont('Arial', 'B', 15);
+    $this-&gt;Cell(0, 10, $this-&gt;title, 1, 1, 'C');
+}
+
+$pdf-&gt;title = 'My title';</code></pre>
+</div>
+</li>
+
+<li id='q6'>
+<p><b>6.</b> <span class='question'>I have defined the Header and Footer methods in my PDF class but nothing shows.</span></p>
+You have to create an object from the PDF class, not FPDF:
+<div class="doc-source">
+<pre><code>$pdf = new PDF();</code></pre>
+</div>
+</li>
+
+<li id='q7'>
+<p><b>7.</b> <span class='question'>I can't make line breaks work. I put \n in the string printed by MultiCell but it doesn't work.</span></p>
+You have to enclose your string with double quotes, not single ones.
+</li>
+
+<li id='q8'>
+<p><b>8.</b> <span class='question'>I use jQuery to generate the PDF but it doesn't show.</span></p>
+Don't use an AJAX request to retrieve the PDF.
+</li>
+
+<li id='q9'>
+<p><b>9.</b> <span class='question'>I draw a frame with very precise dimensions, but when printed I notice some differences.</span></p>
+To respect dimensions, select "None" for the Page Scaling setting instead of "Shrink to Printable Area" in the print dialog box.
+</li>
+
+<li id='q10'>
+<p><b>10.</b> <span class='question'>I'd like to use the whole surface of the page, but when printed I always have some margins. How can I get rid of them?</span></p>
+Printers have physical margins (different depending on the models); it is therefore impossible to remove
+them and print on the whole surface of the paper.
+</li>
+
+<li id='q11'>
+<p><b>11.</b> <span class='question'>How can I put a background in my PDF?</span></p>
+For a picture, call Image() in the Header() method, before any other output. To set a background color, use Rect().
+</li>
+
+<li id='q12'>
+<p><b>12.</b> <span class='question'>How can I set a specific header or footer on the first page?</span></p>
+Just test the page number:
+<div class="doc-source">
+<pre><code>function Header()
+{
+    if($this-&gt;PageNo()==1)
+    {
+        //First page
+        ...
+    }
+    else
+    {
+        //Other pages
+        ...
+    }
+}</code></pre>
+</div>
+</li>
+
+<li id='q13'>
+<p><b>13.</b> <span class='question'>I'd like to use extensions provided by different scripts. How can I combine them?</span></p>
+Use an inheritance chain. If you have two classes, say A in a.php:
+<div class="doc-source">
+<pre><code>require('fpdf.php');
+
+class A extends FPDF
+{
+...
+}</code></pre>
+</div>
+and B in b.php:
+<div class="doc-source">
+<pre><code>require('fpdf.php');
+
+class B extends FPDF
+{
+...
+}</code></pre>
+</div>
+then make B extend A:
+<div class="doc-source">
+<pre><code>require('a.php');
+
+class B extends A
+{
+...
+}</code></pre>
+</div>
+and make your own class extend B:
+<div class="doc-source">
+<pre><code>require('b.php');
+
+class PDF extends B
+{
+...
+}
+
+$pdf = new PDF();</code></pre>
+</div>
+</li>
+
+<li id='q14'>
+<p><b>14.</b> <span class='question'>How can I open the PDF in a new tab?</span></p>
+Just do the same as you would for an HTML page or anything else: add a target="_blank" to your link or form.
+</li>
+
+<li id='q15'>
+<p><b>15.</b> <span class='question'>How can I send the PDF by email?</span></p>
+As for any other file, but an easy way is to use <a href="http://phpmailer.codeworxtech.com" target="_blank">PHPMailer</a> and
+its in-memory attachment:
+<div class="doc-source">
+<pre><code>$mail = new PHPMailer();
+...
+$doc = $pdf-&gt;Output('S');
+$mail-&gt;AddStringAttachment($doc, 'doc.pdf', 'base64', 'application/pdf');
+$mail-&gt;Send();</code></pre>
+</div>
+</li>
+
+<li id='q16'>
+<p><b>16.</b> <span class='question'>What's the limit of the file sizes I can generate with FPDF?</span></p>
+There is no particular limit. There are some constraints, however:
+<br>
+<br>
+- There is usually a maximum memory size allocated to PHP scripts. For very big documents,
+especially with images, the limit may be reached (the file being built in memory). The
+parameter is configured in the php.ini file.
+<br>
+<br>
+- The maximum execution time allocated to scripts defaults to 30 seconds. This limit can of course
+be easily reached. It is configured in php.ini and may be altered dynamically with set_time_limit().
+<br>
+<br>
+You can work around the memory limit with <a href="http://www.fpdf.org/?go=script&amp;id=76" target="_blank">this script</a>.
+</li>
+
+<li id='q17'>
+<p><b>17.</b> <span class='question'>Can I modify a PDF with FPDF?</span></p>
+It's possible to import pages from an existing PDF document thanks to the
+<a href="https://www.setasign.com/products/fpdi/about/" target="_blank">FPDI</a> extension.
+Then you can add some content to them.
+</li>
+
+<li id='q18'>
+<p><b>18.</b> <span class='question'>I'd like to make a search engine in PHP and index PDF files. Can I do it with FPDF?</span></p>
+No. But a GPL C utility does exist, pdftotext, which is able to extract the textual content from a PDF.
+It's provided with the <a href="http://www.foolabs.com/xpdf/" target="_blank">Xpdf</a> package.
+</li>
+
+<li id='q19'>
+<p><b>19.</b> <span class='question'>Can I convert an HTML page to PDF with FPDF?</span></p>
+Not real-world pages. But a GPL C utility does exist, <a href="https://www.msweet.org/projects.php?Z1" target="_blank">HTMLDOC</a>,
+which allows to do it and gives good results.
+</li>
+
+<li id='q20'>
+<p><b>20.</b> <span class='question'>Can I concatenate PDF files with FPDF?</span></p>
+Not directly, but it's possible to use <a href="https://www.setasign.com/products/fpdi/demos/concatenate-fake/" target="_blank">FPDI</a>
+to perform that task. Some free command-line tools also exist:
+<a href="https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/" target="_blank">pdftk</a> and
+<a href="http://thierry.schmit.free.fr/spip/spip.php?article15" target="_blank">mbtPdfAsm</a>.
+</li>
+</ul>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/README.md b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/README.md
new file mode 100755 (executable)
index 0000000..2b0ecba
--- /dev/null
@@ -0,0 +1,21 @@
+# FPDF
+**This repository is only made for cloning official FPDF releases which are available at: http://www.fpdf.org**
+**THERE WILL BE NO DEVELOPMENT IN THIS REPOSITORY!**
+
+FPDF is a PHP class which allows to generate PDF files with pure PHP. F from FPDF stands for Free: you may use it for any kind of usage and modify it to suit your needs.
+
+## Installation with [Composer](https://packagist.org/packages/setasign/fpdf)
+
+If you're using Composer to manage dependencies, you can use
+
+    $ composer require setasign/fpdf:1.8.1
+
+or you can include the following in your composer.json file:
+
+```json
+{
+    "require": {
+        "setasign/fpdf": "1.8.1"
+    }
+}
+```
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/changelog.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/changelog.htm
new file mode 100755 (executable)
index 0000000..1f4b0c6
--- /dev/null
@@ -0,0 +1,163 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Changelog</title>
+<link type="text/css" rel="stylesheet" href="fpdf.css">
+<style type="text/css">
+dd {margin:1em 0 1em 1em}
+</style>
+</head>
+<body>
+<h1>Changelog</h1>
+<dl>
+<dt><strong>v1.81</strong> (2015-12-20)</dt>
+<dd>
+- Added GetPageWidth() and GetPageHeight().<br>
+- Fixed a bug in SetXY().<br>
+</dd>
+<dt><strong>v1.8</strong> (2015-11-29)</dt>
+<dd>
+- PHP 5.1.0 or higher is now required.<br>
+- The MakeFont utility now subsets fonts, which can greatly reduce font sizes.<br>
+- Added ToUnicode CMaps to improve text extraction.<br>
+- Added a parameter to AddPage() to rotate the page.<br>
+- Added a parameter to SetY() to indicate whether the x position should be reset or not.<br>
+- Added a parameter to Output() to specify the encoding of the name, and special characters are now properly encoded. Additionally the order of the first two parameters was reversed to be more logical (however the old order is still supported for compatibility).<br>
+- The Error() method now throws an exception.<br>
+- Adding contents before the first AddPage() or after Close() now raises an error.<br>
+- Outputting text with no font selected now raises an error.<br>
+</dd>
+<dt><strong>v1.7</strong> (2011-06-18)</dt>
+<dd>
+- The MakeFont utility has been completely rewritten and doesn't depend on ttf2pt1 anymore.<br>
+- Alpha channel is now supported for PNGs.<br>
+- When inserting an image, it's now possible to specify its resolution.<br>
+- Default resolution for images was increased from 72 to 96 dpi.<br>
+- When inserting a GIF image, no temporary file is used anymore if the PHP version is 5.1 or higher.<br>
+- When output buffering is enabled and the PDF is about to be sent, the buffer is now cleared if it contains only a UTF-8 BOM and/or whitespace (instead of throwing an error).<br>
+- Symbol and ZapfDingbats fonts now support underline style.<br>
+- Custom page sizes are now checked to ensure that width is smaller than height.<br>
+- Standard font files were changed to use the same format as user fonts.<br>
+- A bug in the embedding of Type1 fonts was fixed.<br>
+- A bug related to SetDisplayMode() and the current locale was fixed.<br>
+- A display issue occurring with the Adobe Reader X plug-in was fixed.<br>
+- An issue related to transparency with some versions of Adobe Reader was fixed.<br>
+- The Content-Length header was removed because it caused an issue when the HTTP server applies compression.<br>
+</dd>
+<dt><strong>v1.6</strong> (2008-08-03)</dt>
+<dd>
+- PHP 4.3.10 or higher is now required.<br>
+- GIF image support.<br>
+- Images can now trigger page breaks.<br>
+- Possibility to have different page formats in a single document.<br>
+- Document properties (author, creator, keywords, subject and title) can now be specified in UTF-8.<br>
+- Fixed a bug: when a PNG was inserted through a URL, an error sometimes occurred.<br>
+- An automatic page break in Header() doesn't cause an infinite loop any more.<br>
+- Removed some warning messages appearing with recent PHP versions.<br>
+- Added HTTP headers to reduce problems with IE.<br>
+</dd>
+<dt><strong>v1.53</strong> (2004-12-31)</dt>
+<dd>
+- When the font subdirectory is in the same directory as fpdf.php, it's no longer necessary to define the FPDF_FONTPATH constant.<br>
+- The array $HTTP_SERVER_VARS is no longer used. It could cause trouble on PHP5-based configurations with the register_long_arrays option disabled.<br>
+- Fixed a problem related to Type1 font embedding which caused trouble to some PDF processors.<br>
+- The file name sent to the browser could not contain a space character.<br>
+- The Cell() method could not print the number 0 (you had to pass the string '0').<br>
+</dd>
+<dt><strong>v1.52</strong> (2003-12-30)</dt>
+<dd>
+- Image() now displays the image at 72 dpi if no dimension is given.<br>
+- Output() takes a string as second parameter to indicate destination.<br>
+- Open() is now called automatically by AddPage().<br>
+- Inserting remote JPEG images doesn't generate an error any longer.<br>
+- Decimal separator is forced to dot in the constructor.<br>
+- Added several encodings (Turkish, Thai, Hebrew, Ukrainian and Vietnamese).<br>
+- The last line of a right-aligned MultiCell() was not correctly aligned if it was terminated by a carriage return.<br>
+- No more error message about already sent headers when outputting the PDF to the standard output from the command line.<br>
+- The underlining was going too far for text containing characters \, ( or ).<br>
+- $HTTP_ENV_VARS has been replaced by $HTTP_SERVER_VARS.<br>
+</dd>
+<dt><strong>v1.51</strong> (2002-08-03)</dt>
+<dd>
+- Type1 font support.<br>
+- Added Baltic encoding.<br>
+- The class now works internally in points with the origin at the bottom in order to avoid two bugs occurring with Acrobat 5:<br>&nbsp;&nbsp;* The line thickness was too large when printed under Windows 98 SE and ME.<br>&nbsp;&nbsp;* TrueType fonts didn't appear immediately inside the plug-in (a substitution font was used), one had to cause a window refresh to make them show up.<br>
+- It's no longer necessary to set the decimal separator as dot to produce valid documents.<br>
+- The clickable area in a cell was always on the left independently from the text alignment.<br>
+- JPEG images in CMYK mode appeared in inverted colors.<br>
+- Transparent PNG images in grayscale or true color mode were incorrectly handled.<br>
+- Adding new fonts now works correctly even with the magic_quotes_runtime option set to on.<br>
+</dd>
+<dt><strong>v1.5</strong> (2002-05-28)</dt>
+<dd>
+- TrueType font (AddFont()) and encoding support (Western and Eastern Europe, Cyrillic and Greek).<br>
+- Added Write() method.<br>
+- Added underlined style.<br>
+- Internal and external link support (AddLink(), SetLink(), Link()).<br>
+- Added right margin management and methods SetRightMargin(), SetTopMargin().<br>
+- Modification of SetDisplayMode() to select page layout.<br>
+- The border parameter of MultiCell() now lets choose borders to draw as Cell().<br>
+- When a document contains no page, Close() now calls AddPage() instead of causing a fatal error.<br>
+</dd>
+<dt><strong>v1.41</strong> (2002-03-13)</dt>
+<dd>
+- Fixed SetDisplayMode() which no longer worked (the PDF viewer used its default display).<br>
+</dd>
+<dt><strong>v1.4</strong> (2002-03-02)</dt>
+<dd>
+- PHP3 is no longer supported.<br>
+- Page compression (SetCompression()).<br>
+- Choice of page format and possibility to change orientation inside document.<br>
+- Added AcceptPageBreak() method.<br>
+- Ability to print the total number of pages (AliasNbPages()).<br>
+- Choice of cell borders to draw.<br>
+- New mode for Cell(): the current position can now move under the cell.<br>
+- Ability to include an image by specifying height only (width is calculated automatically).<br>
+- Fixed a bug: when a justified line triggered a page break, the footer inherited the corresponding word spacing.<br>
+</dd>
+<dt><strong>v1.31</strong> (2002-01-12)</dt>
+<dd>
+- Fixed a bug in drawing frame with MultiCell(): the last line always started from the left margin.<br>
+- Removed Expires HTTP header (gives trouble in some situations).<br>
+- Added Content-disposition HTTP header (seems to help in some situations).<br>
+</dd>
+<dt><strong>v1.3</strong> (2001-12-03)</dt>
+<dd>
+- Line break and text justification support (MultiCell()).<br>
+- Color support (SetDrawColor(), SetFillColor(), SetTextColor()). Possibility to draw filled rectangles and paint cell background.<br>
+- A cell whose width is declared null extends up to the right margin of the page.<br>
+- Line width is now retained from page to page and defaults to 0.2 mm.<br>
+- Added SetXY() method.<br>
+- Fixed a passing by reference done in a deprecated manner for PHP4.<br>
+</dd>
+<dt><strong>v1.2</strong> (2001-11-11)</dt>
+<dd>
+- Added font metric files and GetStringWidth() method.<br>
+- Centering and right-aligning text in cells.<br>
+- Display mode control (SetDisplayMode()).<br>
+- Added methods to set document properties (SetAuthor(), SetCreator(), SetKeywords(), SetSubject(), SetTitle()).<br>
+- Possibility to force PDF download by browser.<br>
+- Added SetX() and GetX() methods.<br>
+- During automatic page break, current abscissa is now retained.<br>
+</dd>
+<dt><strong>v1.11</strong> (2001-10-20)</dt>
+<dd>
+- PNG support doesn't require PHP4/zlib any more. Data are now put directly into PDF without any decompression/recompression stage.<br>
+- Image insertion now works correctly even with magic_quotes_runtime option set to on.<br>
+</dd>
+<dt><strong>v1.1</strong> (2001-10-07)</dt>
+<dd>
+- JPEG and PNG image support.<br>
+</dd>
+<dt><strong>v1.01</strong> (2001-10-03)</dt>
+<dd>
+- Fixed a bug involving page break: in case when Header() doesn't specify a font, the one from previous page was not restored and produced an incorrect document.<br>
+</dd>
+<dt><strong>v1.0</strong> (2001-09-17)</dt>
+<dd>
+- First version.<br>
+</dd>
+</dl>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/composer.json b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/composer.json
new file mode 100755 (executable)
index 0000000..524652a
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    "name": "setasign/fpdf",
+    "version": "1.8.1",
+    "homepage": "http://www.fpdf.org",
+    "description": "FPDF is a PHP class which allows to generate PDF files with pure PHP. F from FPDF stands for Free: you may use it for any kind of usage and modify it to suit your needs.",
+    "type": "library",
+    "keywords": ["pdf", "fpdf"],
+    "license": "no usage restriction",
+    "authors": [
+        {
+            "name": "Olivier Plathey",
+            "email": "oliver@fpdf.org",
+            "homepage": "http://fpdf.org/"
+        }
+    ],
+    "autoload": {
+        "classmap": [
+            "fpdf.php"
+        ]
+    }
+}
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/__construct.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/__construct.htm
new file mode 100755 (executable)
index 0000000..5d76dd2
--- /dev/null
@@ -0,0 +1,63 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>__construct</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>__construct</h1>
+<code>__construct([<b>string</b> orientation [, <b>string</b> unit [, <b>mixed</b> size]]])</code>
+<h2>Description</h2>
+This is the class constructor. It allows to set up the page size, the orientation and the
+unit of measure used in all methods (except for font sizes).
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>orientation</code></dt>
+<dd>
+Default page orientation. Possible values are (case insensitive):
+<ul>
+<li><code>P</code> or <code>Portrait</code></li>
+<li><code>L</code> or <code>Landscape</code></li>
+</ul>
+Default value is <code>P</code>.
+</dd>
+<dt><code>unit</code></dt>
+<dd>
+User unit. Possible values are:
+<ul>
+<li><code>pt</code>: point</li>
+<li><code>mm</code>: millimeter</li>
+<li><code>cm</code>: centimeter</li>
+<li><code>in</code>: inch</li>
+</ul>
+A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This
+is a very common unit in typography; font sizes are expressed in that unit.
+<br>
+<br>
+Default value is <code>mm</code>.
+</dd>
+<dt><code>size</code></dt>
+<dd>
+The size used for pages. It can be either one of the following values (case insensitive):
+<ul>
+<li><code>A3</code></li>
+<li><code>A4</code></li>
+<li><code>A5</code></li>
+<li><code>Letter</code></li>
+<li><code>Legal</code></li>
+</ul>
+or an array containing the width and the height (expressed in the unit given by <code>unit</code>).<br>
+<br>
+Default value is <code>A4</code>.
+</dd>
+</dl>
+<h2>Example</h2>
+Example with a custom 100x150 mm page size:
+<div class="doc-source">
+<pre><code>$pdf = new FPDF('P','mm',array(100,150));</code></pre>
+</div>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/acceptpagebreak.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/acceptpagebreak.htm
new file mode 100755 (executable)
index 0000000..79c4a49
--- /dev/null
@@ -0,0 +1,63 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>AcceptPageBreak</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>AcceptPageBreak</h1>
+<code><b>boolean</b> AcceptPageBreak()</code>
+<h2>Description</h2>
+Whenever a page break condition is met, the method is called, and the break is issued or not
+depending on the returned value. The default implementation returns a value according to the
+mode selected by SetAutoPageBreak().
+<br>
+This method is called automatically and should not be called directly by the application.
+<h2>Example</h2>
+The method is overriden in an inherited class in order to obtain a 3 column layout:
+<div class="doc-source">
+<pre><code>class PDF extends FPDF
+{
+var $col = 0;
+
+function SetCol($col)
+{
+    // Move position to a column
+    $this-&gt;col = $col;
+    $x = 10+$col*65;
+    $this-&gt;SetLeftMargin($x);
+    $this-&gt;SetX($x);
+}
+
+function AcceptPageBreak()
+{
+    if($this-&gt;col&lt;2)
+    {
+        // Go to next column
+        $this-&gt;SetCol($this-&gt;col+1);
+        $this-&gt;SetY(10);
+        return false;
+    }
+    else
+    {
+        // Go back to first column and issue page break
+        $this-&gt;SetCol(0);
+        return true;
+    }
+}
+}
+
+$pdf = new PDF();
+$pdf-&gt;AddPage();
+$pdf-&gt;SetFont('Arial','',12);
+for($i=1;$i&lt;=300;$i++)
+    $pdf-&gt;Cell(0,5,"Line $i",0,1);
+$pdf-&gt;Output();</code></pre>
+</div>
+<h2>See also</h2>
+<a href="setautopagebreak.htm">SetAutoPageBreak</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/addfont.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/addfont.htm
new file mode 100755 (executable)
index 0000000..b1bca0c
--- /dev/null
@@ -0,0 +1,55 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>AddFont</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>AddFont</h1>
+<code>AddFont(<b>string</b> family [, <b>string</b> style [, <b>string</b> file]])</code>
+<h2>Description</h2>
+Imports a TrueType, OpenType or Type1 font and makes it available. It is necessary to generate a font
+definition file first with the MakeFont utility.
+<br>
+The definition file (and the font file itself when embedding) must be present in the font directory.
+If it is not found, the error "Could not include font definition file" is raised.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>family</code></dt>
+<dd>
+Font family. The name can be chosen arbitrarily. If it is a standard family name, it will
+override the corresponding font.
+</dd>
+<dt><code>style</code></dt>
+<dd>
+Font style. Possible values are (case insensitive):
+<ul>
+<li>empty string: regular</li>
+<li><code>B</code>: bold</li>
+<li><code>I</code>: italic</li>
+<li><code>BI</code> or <code>IB</code>: bold italic</li>
+</ul>
+The default value is regular.
+</dd>
+<dt><code>file</code></dt>
+<dd>
+The font definition file.
+<br>
+By default, the name is built from the family and style, in lower case with no space.
+</dd>
+</dl>
+<h2>Example</h2>
+<div class="doc-source">
+<pre><code>$pdf-&gt;AddFont('Comic','I');</code></pre>
+</div>
+is equivalent to:
+<div class="doc-source">
+<pre><code>$pdf-&gt;AddFont('Comic','I','comici.php');</code></pre>
+</div>
+<h2>See also</h2>
+<a href="setfont.htm">SetFont</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/addlink.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/addlink.htm
new file mode 100755 (executable)
index 0000000..9bc3276
--- /dev/null
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>AddLink</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>AddLink</h1>
+<code><b>int</b> AddLink()</code>
+<h2>Description</h2>
+Creates a new internal link and returns its identifier. An internal link is a clickable area
+which directs to another place within the document.
+<br>
+The identifier can then be passed to Cell(), Write(), Image() or Link(). The destination is
+defined with SetLink().
+<h2>See also</h2>
+<a href="cell.htm">Cell</a>,
+<a href="write.htm">Write</a>,
+<a href="image.htm">Image</a>,
+<a href="link.htm">Link</a>,
+<a href="setlink.htm">SetLink</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/addpage.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/addpage.htm
new file mode 100755 (executable)
index 0000000..7d9ebe1
--- /dev/null
@@ -0,0 +1,61 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>AddPage</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>AddPage</h1>
+<code>AddPage([<b>string</b> orientation [, <b>mixed</b> size [, <b>int</b> rotation]]])</code>
+<h2>Description</h2>
+Adds a new page to the document. If a page is already present, the Footer() method is called
+first to output the footer. Then the page is added, the current position set to the top-left
+corner according to the left and top margins, and Header() is called to display the header.
+<br>
+The font which was set before calling is automatically restored. There is no need to call
+SetFont() again if you want to continue with the same font. The same is true for colors and
+line width.
+<br>
+The origin of the coordinate system is at the top-left corner and increasing ordinates go
+downwards.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>orientation</code></dt>
+<dd>
+Page orientation. Possible values are (case insensitive):
+<ul>
+<li><code>P</code> or <code>Portrait</code></li>
+<li><code>L</code> or <code>Landscape</code></li>
+</ul>
+The default value is the one passed to the constructor.
+</dd>
+<dt><code>size</code></dt>
+<dd>
+Page size. It can be either one of the following values (case insensitive):
+<ul>
+<li><code>A3</code></li>
+<li><code>A4</code></li>
+<li><code>A5</code></li>
+<li><code>Letter</code></li>
+<li><code>Legal</code></li>
+</ul>
+or an array containing the width and the height (expressed in user unit).<br>
+<br>
+The default value is the one passed to the constructor.
+</dd>
+<dt><code>rotation</code></dt>
+<dd>
+Angle by which to rotate the page. It must be a multiple of 90; positive values
+mean clockwise rotation. The default value is <code>0</code>.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="__construct.htm">__construct</a>,
+<a href="header.htm">Header</a>,
+<a href="footer.htm">Footer</a>,
+<a href="setmargins.htm">SetMargins</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/aliasnbpages.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/aliasnbpages.htm
new file mode 100755 (executable)
index 0000000..3768cf7
--- /dev/null
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>AliasNbPages</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>AliasNbPages</h1>
+<code>AliasNbPages([<b>string</b> alias])</code>
+<h2>Description</h2>
+Defines an alias for the total number of pages. It will be substituted as the document is
+closed.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>alias</code></dt>
+<dd>
+The alias. Default value: <code>{nb}</code>.
+</dd>
+</dl>
+<h2>Example</h2>
+<div class="doc-source">
+<pre><code>class PDF extends FPDF
+{
+function Footer()
+{
+    // Go to 1.5 cm from bottom
+    $this-&gt;SetY(-15);
+    // Select Arial italic 8
+    $this-&gt;SetFont('Arial','I',8);
+    // Print current and total page numbers
+    $this-&gt;Cell(0,10,'Page '.$this-&gt;PageNo().'/{nb}',0,0,'C');
+}
+}
+
+$pdf = new PDF();
+$pdf-&gt;AliasNbPages();</code></pre>
+</div>
+<h2>See also</h2>
+<a href="pageno.htm">PageNo</a>,
+<a href="footer.htm">Footer</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/cell.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/cell.htm
new file mode 100755 (executable)
index 0000000..d46359a
--- /dev/null
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Cell</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Cell</h1>
+<code>Cell(<b>float</b> w [, <b>float</b> h [, <b>string</b> txt [, <b>mixed</b> border [, <b>int</b> ln [, <b>string</b> align [, <b>boolean</b> fill [, <b>mixed</b> link]]]]]]])</code>
+<h2>Description</h2>
+Prints a cell (rectangular area) with optional borders, background color and character string.
+The upper-left corner of the cell corresponds to the current position. The text can be aligned
+or centered. After the call, the current position moves to the right or to the next line. It is
+possible to put a link on the text.
+<br>
+If automatic page breaking is enabled and the cell goes beyond the limit, a page break is
+done before outputting.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>w</code></dt>
+<dd>
+Cell width. If <code>0</code>, the cell extends up to the right margin.
+</dd>
+<dt><code>h</code></dt>
+<dd>
+Cell height.
+Default value: <code>0</code>.
+</dd>
+<dt><code>txt</code></dt>
+<dd>
+String to print.
+Default value: empty string.
+</dd>
+<dt><code>border</code></dt>
+<dd>
+Indicates if borders must be drawn around the cell. The value can be either a number:
+<ul>
+<li><code>0</code>: no border</li>
+<li><code>1</code>: frame</li>
+</ul>
+or a string containing some or all of the following characters (in any order):
+<ul>
+<li><code>L</code>: left</li>
+<li><code>T</code>: top</li>
+<li><code>R</code>: right</li>
+<li><code>B</code>: bottom</li>
+</ul>
+Default value: <code>0</code>.
+</dd>
+<dt><code>ln</code></dt>
+<dd>
+Indicates where the current position should go after the call. Possible values are:
+<ul>
+<li><code>0</code>: to the right</li>
+<li><code>1</code>: to the beginning of the next line</li>
+<li><code>2</code>: below</li>
+</ul>
+Putting <code>1</code> is equivalent to putting <code>0</code> and calling Ln() just after.
+Default value: <code>0</code>.
+</dd>
+<dt><code>align</code></dt>
+<dd>
+Allows to center or align the text. Possible values are:
+<ul>
+<li><code>L</code> or empty string: left align (default value)</li>
+<li><code>C</code>: center</li>
+<li><code>R</code>: right align</li>
+</ul>
+</dd>
+<dt><code>fill</code></dt>
+<dd>
+Indicates if the cell background must be painted (<code>true</code>) or transparent (<code>false</code>).
+Default value: <code>false</code>.
+</dd>
+<dt><code>link</code></dt>
+<dd>
+URL or identifier returned by AddLink().
+</dd>
+</dl>
+<h2>Example</h2>
+<div class="doc-source">
+<pre><code>// Set font
+$pdf-&gt;SetFont('Arial','B',16);
+// Move to 8 cm to the right
+$pdf-&gt;Cell(80);
+// Centered text in a framed 20*10 mm cell and line break
+$pdf-&gt;Cell(20,10,'Title',1,1,'C');</code></pre>
+</div>
+<h2>See also</h2>
+<a href="setfont.htm">SetFont</a>,
+<a href="setdrawcolor.htm">SetDrawColor</a>,
+<a href="setfillcolor.htm">SetFillColor</a>,
+<a href="settextcolor.htm">SetTextColor</a>,
+<a href="setlinewidth.htm">SetLineWidth</a>,
+<a href="addlink.htm">AddLink</a>,
+<a href="ln.htm">Ln</a>,
+<a href="multicell.htm">MultiCell</a>,
+<a href="write.htm">Write</a>,
+<a href="setautopagebreak.htm">SetAutoPageBreak</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/close.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/close.htm
new file mode 100755 (executable)
index 0000000..933eaba
--- /dev/null
@@ -0,0 +1,21 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Close</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Close</h1>
+<code>Close()</code>
+<h2>Description</h2>
+Terminates the PDF document. It is not necessary to call this method explicitly because Output()
+does it automatically.
+<br>
+If the document contains no page, AddPage() is called to prevent from getting an invalid document.
+<h2>See also</h2>
+<a href="output.htm">Output</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/error.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/error.htm
new file mode 100755 (executable)
index 0000000..95b02c6
--- /dev/null
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Error</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Error</h1>
+<code>Error(<b>string</b> msg)</code>
+<h2>Description</h2>
+This method is automatically called in case of a fatal error; it simply throws an exception
+with the provided message.<br>
+An inherited class may override it to customize the error handling but the method should
+never return, otherwise the resulting document would probably be invalid.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>msg</code></dt>
+<dd>
+The error message.
+</dd>
+</dl>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/footer.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/footer.htm
new file mode 100755 (executable)
index 0000000..a3a2018
--- /dev/null
@@ -0,0 +1,35 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Footer</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Footer</h1>
+<code>Footer()</code>
+<h2>Description</h2>
+This method is used to render the page footer. It is automatically called by AddPage() and
+Close() and should not be called directly by the application. The implementation in FPDF is
+empty, so you have to subclass it and override the method if you want a specific processing.
+<h2>Example</h2>
+<div class="doc-source">
+<pre><code>class PDF extends FPDF
+{
+function Footer()
+{
+    // Go to 1.5 cm from bottom
+    $this-&gt;SetY(-15);
+    // Select Arial italic 8
+    $this-&gt;SetFont('Arial','I',8);
+    // Print centered page number
+    $this-&gt;Cell(0,10,'Page '.$this-&gt;PageNo(),0,0,'C');
+}
+}</code></pre>
+</div>
+<h2>See also</h2>
+<a href="header.htm">Header</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/getpageheight.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/getpageheight.htm
new file mode 100755 (executable)
index 0000000..5150072
--- /dev/null
@@ -0,0 +1,18 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>GetPageHeight</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>GetPageHeight</h1>
+<code><b>float</b> GetPageHeight()</code>
+<h2>Description</h2>
+Returns the current page height.
+<h2>See also</h2>
+<a href="getpagewidth.htm">GetPageWidth</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/getpagewidth.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/getpagewidth.htm
new file mode 100755 (executable)
index 0000000..2ae306b
--- /dev/null
@@ -0,0 +1,18 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>GetPageWidth</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>GetPageWidth</h1>
+<code><b>float</b> GetPageWidth()</code>
+<h2>Description</h2>
+Returns the current page width.
+<h2>See also</h2>
+<a href="getpageheight.htm">GetPageHeight</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/getstringwidth.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/getstringwidth.htm
new file mode 100755 (executable)
index 0000000..38b4875
--- /dev/null
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>GetStringWidth</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>GetStringWidth</h1>
+<code><b>float</b> GetStringWidth(<b>string</b> s)</code>
+<h2>Description</h2>
+Returns the length of a string in user unit. A font must be selected.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>s</code></dt>
+<dd>
+The string whose length is to be computed.
+</dd>
+</dl>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/getx.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/getx.htm
new file mode 100755 (executable)
index 0000000..86550a3
--- /dev/null
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>GetX</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>GetX</h1>
+<code><b>float</b> GetX()</code>
+<h2>Description</h2>
+Returns the abscissa of the current position.
+<h2>See also</h2>
+<a href="setx.htm">SetX</a>,
+<a href="gety.htm">GetY</a>,
+<a href="sety.htm">SetY</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/gety.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/gety.htm
new file mode 100755 (executable)
index 0000000..e1b387a
--- /dev/null
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>GetY</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>GetY</h1>
+<code><b>float</b> GetY()</code>
+<h2>Description</h2>
+Returns the ordinate of the current position.
+<h2>See also</h2>
+<a href="sety.htm">SetY</a>,
+<a href="getx.htm">GetX</a>,
+<a href="setx.htm">SetX</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/header.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/header.htm
new file mode 100755 (executable)
index 0000000..3c3da96
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Header</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Header</h1>
+<code>Header()</code>
+<h2>Description</h2>
+This method is used to render the page header. It is automatically called by AddPage() and
+should not be called directly by the application. The implementation in FPDF is empty, so
+you have to subclass it and override the method if you want a specific processing.
+<h2>Example</h2>
+<div class="doc-source">
+<pre><code>class PDF extends FPDF
+{
+function Header()
+{
+    // Select Arial bold 15
+    $this-&gt;SetFont('Arial','B',15);
+    // Move to the right
+    $this-&gt;Cell(80);
+    // Framed title
+    $this-&gt;Cell(30,10,'Title',1,0,'C');
+    // Line break
+    $this-&gt;Ln(20);
+}
+}</code></pre>
+</div>
+<h2>See also</h2>
+<a href="footer.htm">Footer</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/image.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/image.htm
new file mode 100755 (executable)
index 0000000..96ab907
--- /dev/null
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Image</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Image</h1>
+<code>Image(<b>string</b> file [, <b>float</b> x [, <b>float</b> y [, <b>float</b> w [, <b>float</b> h [, <b>string</b> type [, <b>mixed</b> link]]]]]])</code>
+<h2>Description</h2>
+Puts an image. The size it will take on the page can be specified in different ways:
+<ul>
+<li>explicit width and height (expressed in user unit or dpi)</li>
+<li>one explicit dimension, the other being calculated automatically in order to keep the original proportions</li>
+<li>no explicit dimension, in which case the image is put at 96 dpi</li>
+</ul>
+Supported formats are JPEG, PNG and GIF. The GD extension is required for GIF.
+<br>
+<br>
+For JPEGs, all flavors are allowed:
+<ul>
+<li>gray scales</li>
+<li>true colors (24 bits)</li>
+<li>CMYK (32 bits)</li>
+</ul>
+For PNGs, are allowed:
+<ul>
+<li>gray scales on at most 8 bits (256 levels)</li>
+<li>indexed colors</li>
+<li>true colors (24 bits)</li>
+</ul>
+For GIFs: in case of an animated GIF, only the first frame is displayed.<br>
+<br>
+Transparency is supported.<br>
+<br>
+The format can be specified explicitly or inferred from the file extension.<br>
+<br>
+It is possible to put a link on the image.<br>
+<br>
+Remark: if an image is used several times, only one copy is embedded in the file.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>file</code></dt>
+<dd>
+Path or URL of the image.
+</dd>
+<dt><code>x</code></dt>
+<dd>
+Abscissa of the upper-left corner. If not specified or equal to <code>null</code>, the current abscissa
+is used.
+</dd>
+<dt><code>y</code></dt>
+<dd>
+Ordinate of the upper-left corner. If not specified or equal to <code>null</code>, the current ordinate
+is used; moreover, a page break is triggered first if necessary (in case automatic page breaking is enabled)
+and, after the call, the current ordinate is moved to the bottom of the image.
+</dd>
+<dt><code>w</code></dt>
+<dd>
+Width of the image in the page. There are three cases:
+<ul>
+<li>If the value is positive, it represents the width in user unit</li>
+<li>If the value is negative, the absolute value represents the horizontal resolution in dpi</li>
+<li>If the value is not specified or equal to zero, it is automatically calculated</li>
+</ul>
+</dd>
+<dt><code>h</code></dt>
+<dd>
+Height of the image in the page. There are three cases:
+<ul>
+<li>If the value is positive, it represents the height in user unit</li>
+<li>If the value is negative, the absolute value represents the vertical resolution in dpi</li>
+<li>If the value is not specified or equal to zero, it is automatically calculated</li>
+</ul>
+</dd>
+<dt><code>type</code></dt>
+<dd>
+Image format. Possible values are (case insensitive): <code>JPG</code>, <code>JPEG</code>, <code>PNG</code> and <code>GIF</code>.
+If not specified, the type is inferred from the file extension.
+</dd>
+<dt><code>link</code></dt>
+<dd>
+URL or identifier returned by AddLink().
+</dd>
+</dl>
+<h2>Example</h2>
+<div class="doc-source">
+<pre><code>// Insert a logo in the top-left corner at 300 dpi
+$pdf-&gt;Image('logo.png',10,10,-300);
+// Insert a dynamic image from a URL
+$pdf-&gt;Image('http://chart.googleapis.com/chart?cht=p3&amp;chd=t:60,40&amp;chs=250x100&amp;chl=Hello|World',60,30,90,0,'PNG');</code></pre>
+</div>
+<h2>See also</h2>
+<a href="addlink.htm">AddLink</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/index.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/index.htm
new file mode 100755 (executable)
index 0000000..e924afe
--- /dev/null
@@ -0,0 +1,59 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>FPDF 1.81 Reference Manual</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>FPDF 1.81 Reference Manual</h1>
+<a href="__construct.htm">__construct</a> - constructor<br>
+<a href="acceptpagebreak.htm">AcceptPageBreak</a> - accept or not automatic page break<br>
+<a href="addfont.htm">AddFont</a> - add a new font<br>
+<a href="addlink.htm">AddLink</a> - create an internal link<br>
+<a href="addpage.htm">AddPage</a> - add a new page<br>
+<a href="aliasnbpages.htm">AliasNbPages</a> - define an alias for number of pages<br>
+<a href="cell.htm">Cell</a> - print a cell<br>
+<a href="close.htm">Close</a> - terminate the document<br>
+<a href="error.htm">Error</a> - fatal error<br>
+<a href="footer.htm">Footer</a> - page footer<br>
+<a href="getpageheight.htm">GetPageHeight</a> - get current page height<br>
+<a href="getpagewidth.htm">GetPageWidth</a> - get current page width<br>
+<a href="getstringwidth.htm">GetStringWidth</a> - compute string length<br>
+<a href="getx.htm">GetX</a> - get current x position<br>
+<a href="gety.htm">GetY</a> - get current y position<br>
+<a href="header.htm">Header</a> - page header<br>
+<a href="image.htm">Image</a> - output an image<br>
+<a href="line.htm">Line</a> - draw a line<br>
+<a href="link.htm">Link</a> - put a link<br>
+<a href="ln.htm">Ln</a> - line break<br>
+<a href="multicell.htm">MultiCell</a> - print text with line breaks<br>
+<a href="output.htm">Output</a> - save or send the document<br>
+<a href="pageno.htm">PageNo</a> - page number<br>
+<a href="rect.htm">Rect</a> - draw a rectangle<br>
+<a href="setauthor.htm">SetAuthor</a> - set the document author<br>
+<a href="setautopagebreak.htm">SetAutoPageBreak</a> - set the automatic page breaking mode<br>
+<a href="setcompression.htm">SetCompression</a> - turn compression on or off<br>
+<a href="setcreator.htm">SetCreator</a> - set document creator<br>
+<a href="setdisplaymode.htm">SetDisplayMode</a> - set display mode<br>
+<a href="setdrawcolor.htm">SetDrawColor</a> - set drawing color<br>
+<a href="setfillcolor.htm">SetFillColor</a> - set filling color<br>
+<a href="setfont.htm">SetFont</a> - set font<br>
+<a href="setfontsize.htm">SetFontSize</a> - set font size<br>
+<a href="setkeywords.htm">SetKeywords</a> - associate keywords with document<br>
+<a href="setleftmargin.htm">SetLeftMargin</a> - set left margin<br>
+<a href="setlinewidth.htm">SetLineWidth</a> - set line width<br>
+<a href="setlink.htm">SetLink</a> - set internal link destination<br>
+<a href="setmargins.htm">SetMargins</a> - set margins<br>
+<a href="setrightmargin.htm">SetRightMargin</a> - set right margin<br>
+<a href="setsubject.htm">SetSubject</a> - set document subject<br>
+<a href="settextcolor.htm">SetTextColor</a> - set text color<br>
+<a href="settitle.htm">SetTitle</a> - set document title<br>
+<a href="settopmargin.htm">SetTopMargin</a> - set top margin<br>
+<a href="setx.htm">SetX</a> - set current x position<br>
+<a href="setxy.htm">SetXY</a> - set current x and y positions<br>
+<a href="sety.htm">SetY</a> - set current y position and optionally reset x<br>
+<a href="text.htm">Text</a> - print a string<br>
+<a href="write.htm">Write</a> - print flowing text<br>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/line.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/line.htm
new file mode 100755 (executable)
index 0000000..e232b4e
--- /dev/null
@@ -0,0 +1,38 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Line</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Line</h1>
+<code>Line(<b>float</b> x1, <b>float</b> y1, <b>float</b> x2, <b>float</b> y2)</code>
+<h2>Description</h2>
+Draws a line between two points.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>x1</code></dt>
+<dd>
+Abscissa of first point.
+</dd>
+<dt><code>y1</code></dt>
+<dd>
+Ordinate of first point.
+</dd>
+<dt><code>x2</code></dt>
+<dd>
+Abscissa of second point.
+</dd>
+<dt><code>y2</code></dt>
+<dd>
+Ordinate of second point.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setlinewidth.htm">SetLineWidth</a>,
+<a href="setdrawcolor.htm">SetDrawColor</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/link.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/link.htm
new file mode 100755 (executable)
index 0000000..f3df2fb
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Link</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Link</h1>
+<code>Link(<b>float</b> x, <b>float</b> y, <b>float</b> w, <b>float</b> h, <b>mixed</b> link)</code>
+<h2>Description</h2>
+Puts a link on a rectangular area of the page. Text or image links are generally put via Cell(),
+Write() or Image(), but this method can be useful for instance to define a clickable area inside
+an image.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>x</code></dt>
+<dd>
+Abscissa of the upper-left corner of the rectangle.
+</dd>
+<dt><code>y</code></dt>
+<dd>
+Ordinate of the upper-left corner of the rectangle.
+</dd>
+<dt><code>w</code></dt>
+<dd>
+Width of the rectangle.
+</dd>
+<dt><code>h</code></dt>
+<dd>
+Height of the rectangle.
+</dd>
+<dt><code>link</code></dt>
+<dd>
+URL or identifier returned by AddLink().
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="addlink.htm">AddLink</a>,
+<a href="cell.htm">Cell</a>,
+<a href="write.htm">Write</a>,
+<a href="image.htm">Image</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/ln.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/ln.htm
new file mode 100755 (executable)
index 0000000..04dbe37
--- /dev/null
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Ln</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Ln</h1>
+<code>Ln([<b>float</b> h])</code>
+<h2>Description</h2>
+Performs a line break. The current abscissa goes back to the left margin and the ordinate
+increases by the amount passed in parameter.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>h</code></dt>
+<dd>
+The height of the break.
+<br>
+By default, the value equals the height of the last printed cell.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="cell.htm">Cell</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/multicell.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/multicell.htm
new file mode 100755 (executable)
index 0000000..9f136ae
--- /dev/null
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>MultiCell</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>MultiCell</h1>
+<code>MultiCell(<b>float</b> w, <b>float</b> h, <b>string</b> txt [, <b>mixed</b> border [, <b>string</b> align [, <b>boolean</b> fill]]])</code>
+<h2>Description</h2>
+This method allows printing text with line breaks. They can be automatic (as soon as the
+text reaches the right border of the cell) or explicit (via the \n character). As many cells
+as necessary are output, one below the other.
+<br>
+Text can be aligned, centered or justified. The cell block can be framed and the background
+painted.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>w</code></dt>
+<dd>
+Width of cells. If <code>0</code>, they extend up to the right margin of the page.
+</dd>
+<dt><code>h</code></dt>
+<dd>
+Height of cells.
+</dd>
+<dt><code>txt</code></dt>
+<dd>
+String to print.
+</dd>
+<dt><code>border</code></dt>
+<dd>
+Indicates if borders must be drawn around the cell block. The value can be either a number:
+<ul>
+<li><code>0</code>: no border</li>
+<li><code>1</code>: frame</li>
+</ul>
+or a string containing some or all of the following characters (in any order):
+<ul>
+<li><code>L</code>: left</li>
+<li><code>T</code>: top</li>
+<li><code>R</code>: right</li>
+<li><code>B</code>: bottom</li>
+</ul>
+Default value: <code>0</code>.
+</dd>
+<dt><code>align</code></dt>
+<dd>
+Sets the text alignment. Possible values are:
+<ul>
+<li><code>L</code>: left alignment</li>
+<li><code>C</code>: center</li>
+<li><code>R</code>: right alignment</li>
+<li><code>J</code>: justification (default value)</li>
+</ul>
+</dd>
+<dt><code>fill</code></dt>
+<dd>
+Indicates if the cell background must be painted (<code>true</code>) or transparent (<code>false</code>).
+Default value: <code>false</code>.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setfont.htm">SetFont</a>,
+<a href="setdrawcolor.htm">SetDrawColor</a>,
+<a href="setfillcolor.htm">SetFillColor</a>,
+<a href="settextcolor.htm">SetTextColor</a>,
+<a href="setlinewidth.htm">SetLineWidth</a>,
+<a href="cell.htm">Cell</a>,
+<a href="write.htm">Write</a>,
+<a href="setautopagebreak.htm">SetAutoPageBreak</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/output.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/output.htm
new file mode 100755 (executable)
index 0000000..229e0a7
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Output</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Output</h1>
+<code><b>string</b> Output([<b>string</b> dest [, <b>string</b> name [, <b>boolean</b> isUTF8]]])</code>
+<h2>Description</h2>
+Send the document to a given destination: browser, file or string. In the case of a browser, the
+PDF viewer may be used or a download may be forced.
+<br>
+The method first calls Close() if necessary to terminate the document.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>dest</code></dt>
+<dd>
+Destination where to send the document. It can be one of the following:
+<ul>
+<li><code>I</code>: send the file inline to the browser. The PDF viewer is used if available.</li>
+<li><code>D</code>: send to the browser and force a file download with the name given by <code>name</code>.</li>
+<li><code>F</code>: save to a local file with the name given by <code>name</code> (may include a path).</li>
+<li><code>S</code>: return the document as a string.</li>
+</ul>
+The default value is <code>I</code>.
+</dd>
+<dt><code>name</code></dt>
+<dd>
+The name of the file. It is ignored in case of destination <code>S</code>.<br>
+The default value is <code>doc.pdf</code>.
+</dd>
+<dt><code>isUTF8</code></dt>
+<dd>
+Indicates if <code>name</code> is encoded in ISO-8859-1 (<code>false</code>) or UTF-8 (<code>true</code>).
+Only used for destinations <code>I</code> and <code>D</code>.<br>
+The default value is <code>false</code>.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="close.htm">Close</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/pageno.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/pageno.htm
new file mode 100755 (executable)
index 0000000..95400be
--- /dev/null
@@ -0,0 +1,18 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>PageNo</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>PageNo</h1>
+<code><b>int</b> PageNo()</code>
+<h2>Description</h2>
+Returns the current page number.
+<h2>See also</h2>
+<a href="aliasnbpages.htm">AliasNbPages</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/rect.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/rect.htm
new file mode 100755 (executable)
index 0000000..febc9ae
--- /dev/null
@@ -0,0 +1,48 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Rect</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Rect</h1>
+<code>Rect(<b>float</b> x, <b>float</b> y, <b>float</b> w, <b>float</b> h [, <b>string</b> style])</code>
+<h2>Description</h2>
+Outputs a rectangle. It can be drawn (border only), filled (with no border) or both.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>x</code></dt>
+<dd>
+Abscissa of upper-left corner.
+</dd>
+<dt><code>y</code></dt>
+<dd>
+Ordinate of upper-left corner.
+</dd>
+<dt><code>w</code></dt>
+<dd>
+Width.
+</dd>
+<dt><code>h</code></dt>
+<dd>
+Height.
+</dd>
+<dt><code>style</code></dt>
+<dd>
+Style of rendering. Possible values are:
+<ul>
+<li><code>D</code> or empty string: draw. This is the default value.</li>
+<li><code>F</code>: fill</li>
+<li><code>DF</code> or <code>FD</code>: draw and fill</li>
+</ul>
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setlinewidth.htm">SetLineWidth</a>,
+<a href="setdrawcolor.htm">SetDrawColor</a>,
+<a href="setfillcolor.htm">SetFillColor</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setauthor.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setauthor.htm
new file mode 100755 (executable)
index 0000000..374134b
--- /dev/null
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetAuthor</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetAuthor</h1>
+<code>SetAuthor(<b>string</b> author [, <b>boolean</b> isUTF8])</code>
+<h2>Description</h2>
+Defines the author of the document.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>author</code></dt>
+<dd>
+The name of the author.
+</dd>
+<dt><code>isUTF8</code></dt>
+<dd>
+Indicates if the string is encoded in ISO-8859-1 (<code>false</code>) or UTF-8 (<code>true</code>).<br>
+Default value: <code>false</code>.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setcreator.htm">SetCreator</a>,
+<a href="setkeywords.htm">SetKeywords</a>,
+<a href="setsubject.htm">SetSubject</a>,
+<a href="settitle.htm">SetTitle</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setautopagebreak.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setautopagebreak.htm
new file mode 100755 (executable)
index 0000000..8c0c6f2
--- /dev/null
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetAutoPageBreak</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetAutoPageBreak</h1>
+<code>SetAutoPageBreak(<b>boolean</b> auto [, <b>float</b> margin])</code>
+<h2>Description</h2>
+Enables or disables the automatic page breaking mode. When enabling, the second parameter is
+the distance from the bottom of the page that defines the triggering limit. By default, the
+mode is on and the margin is 2 cm.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>auto</code></dt>
+<dd>
+Boolean indicating if mode should be on or off.
+</dd>
+<dt><code>margin</code></dt>
+<dd>
+Distance from the bottom of the page.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="cell.htm">Cell</a>,
+<a href="multicell.htm">MultiCell</a>,
+<a href="acceptpagebreak.htm">AcceptPageBreak</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setcompression.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setcompression.htm
new file mode 100755 (executable)
index 0000000..ec506d9
--- /dev/null
@@ -0,0 +1,31 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetCompression</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetCompression</h1>
+<code>SetCompression(<b>boolean</b> compress)</code>
+<h2>Description</h2>
+Activates or deactivates page compression. When activated, the internal representation of
+each page is compressed, which leads to a compression ratio of about 2 for the resulting
+document.
+<br>
+Compression is on by default.
+<br>
+<br>
+<strong>Note:</strong> the Zlib extension is required for this feature. If not present, compression
+will be turned off.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>compress</code></dt>
+<dd>
+Boolean indicating if compression must be enabled.
+</dd>
+</dl>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setcreator.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setcreator.htm
new file mode 100755 (executable)
index 0000000..1cf2ed8
--- /dev/null
@@ -0,0 +1,34 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetCreator</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetCreator</h1>
+<code>SetCreator(<b>string</b> creator [, <b>boolean</b> isUTF8])</code>
+<h2>Description</h2>
+Defines the creator of the document. This is typically the name of the application that
+generates the PDF.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>creator</code></dt>
+<dd>
+The name of the creator.
+</dd>
+<dt><code>isUTF8</code></dt>
+<dd>
+Indicates if the string is encoded in ISO-8859-1 (<code>false</code>) or UTF-8 (<code>true</code>).<br>
+Default value: <code>false</code>.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setauthor.htm">SetAuthor</a>,
+<a href="setkeywords.htm">SetKeywords</a>,
+<a href="setsubject.htm">SetSubject</a>,
+<a href="settitle.htm">SetTitle</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setdisplaymode.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setdisplaymode.htm
new file mode 100755 (executable)
index 0000000..e9deb56
--- /dev/null
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetDisplayMode</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetDisplayMode</h1>
+<code>SetDisplayMode(<b>mixed</b> zoom [, <b>string</b> layout])</code>
+<h2>Description</h2>
+Defines the way the document is to be displayed by the viewer. The zoom level can be set: pages can be
+displayed entirely on screen, occupy the full width of the window, use real size, be scaled by a
+specific zooming factor or use viewer default (configured in the Preferences menu of Adobe Reader).
+The page layout can be specified too: single at once, continuous display, two columns or viewer
+default.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>zoom</code></dt>
+<dd>
+The zoom to use. It can be one of the following string values:
+<ul>
+<li><code>fullpage</code>: displays the entire page on screen</li>
+<li><code>fullwidth</code>: uses maximum width of window</li>
+<li><code>real</code>: uses real size (equivalent to 100% zoom)</li>
+<li><code>default</code>: uses viewer default mode</li>
+</ul>
+or a number indicating the zooming factor to use.
+</dd>
+<dt><code>layout</code></dt>
+<dd>
+The page layout. Possible values are:
+<ul>
+<li><code>single</code>: displays one page at once</li>
+<li><code>continuous</code>: displays pages continuously</li>
+<li><code>two</code>: displays two pages on two columns</li>
+<li><code>default</code>: uses viewer default mode</li>
+</ul>
+Default value is <code>default</code>.
+</dd>
+</dl>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setdrawcolor.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setdrawcolor.htm
new file mode 100755 (executable)
index 0000000..fc5a093
--- /dev/null
@@ -0,0 +1,41 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetDrawColor</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetDrawColor</h1>
+<code>SetDrawColor(<b>int</b> r [, <b>int</b> g, <b>int</b> b])</code>
+<h2>Description</h2>
+Defines the color used for all drawing operations (lines, rectangles and cell borders). It
+can be expressed in RGB components or gray scale. The method can be called before the first
+page is created and the value is retained from page to page.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>r</code></dt>
+<dd>
+If <code>g</code> et <code>b</code> are given, red component; if not, indicates the gray level.
+Value between 0 and 255.
+</dd>
+<dt><code>g</code></dt>
+<dd>
+Green component (between 0 and 255).
+</dd>
+<dt><code>b</code></dt>
+<dd>
+Blue component (between 0 and 255).
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setfillcolor.htm">SetFillColor</a>,
+<a href="settextcolor.htm">SetTextColor</a>,
+<a href="line.htm">Line</a>,
+<a href="rect.htm">Rect</a>,
+<a href="cell.htm">Cell</a>,
+<a href="multicell.htm">MultiCell</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setfillcolor.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setfillcolor.htm
new file mode 100755 (executable)
index 0000000..9e18343
--- /dev/null
@@ -0,0 +1,40 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetFillColor</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetFillColor</h1>
+<code>SetFillColor(<b>int</b> r [, <b>int</b> g, <b>int</b> b])</code>
+<h2>Description</h2>
+Defines the color used for all filling operations (filled rectangles and cell backgrounds).
+It can be expressed in RGB components or gray scale. The method can be called before the first
+page is created and the value is retained from page to page.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>r</code></dt>
+<dd>
+If <code>g</code> and <code>b</code> are given, red component; if not, indicates the gray level.
+Value between 0 and 255.
+</dd>
+<dt><code>g</code></dt>
+<dd>
+Green component (between 0 and 255).
+</dd>
+<dt><code>b</code></dt>
+<dd>
+Blue component (between 0 and 255).
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setdrawcolor.htm">SetDrawColor</a>,
+<a href="settextcolor.htm">SetTextColor</a>,
+<a href="rect.htm">Rect</a>,
+<a href="cell.htm">Cell</a>,
+<a href="multicell.htm">MultiCell</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setfont.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setfont.htm
new file mode 100755 (executable)
index 0000000..a1de05c
--- /dev/null
@@ -0,0 +1,92 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetFont</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetFont</h1>
+<code>SetFont(<b>string</b> family [, <b>string</b> style [, <b>float</b> size]])</code>
+<h2>Description</h2>
+Sets the font used to print character strings. It is mandatory to call this method
+at least once before printing text or the resulting document would not be valid.
+<br>
+The font can be either a standard one or a font added via the AddFont() method. Standard fonts
+use the Windows encoding cp1252 (Western Europe).
+<br>
+The method can be called before the first page is created and the font is kept from page
+to page.
+<br>
+If you just wish to change the current font size, it is simpler to call SetFontSize().
+<br>
+<br>
+<strong>Note:</strong> the font definition files must be accessible. They are searched successively in:
+<ul>
+<li>The directory defined by the <code>FPDF_FONTPATH</code> constant (if this constant is defined)</li>
+<li>The <code>font</code> directory located in the same directory as <code>fpdf.php</code> (if it exists)</li>
+<li>The directories accessible through <code>include()</code></li>
+</ul>
+Example using <code>FPDF_FONTPATH</code>:
+<div class="doc-source">
+<pre><code>define('FPDF_FONTPATH','/home/www/font');
+require('fpdf.php');</code></pre>
+</div>
+If the file corresponding to the requested font is not found, the error "Could not include font
+definition file" is raised.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>family</code></dt>
+<dd>
+Family font. It can be either a name defined by AddFont() or one of the standard families (case
+insensitive):
+<ul>
+<li><code>Courier</code> (fixed-width)</li>
+<li><code>Helvetica</code> or <code>Arial</code> (synonymous; sans serif)</li>
+<li><code>Times</code> (serif)</li>
+<li><code>Symbol</code> (symbolic)</li>
+<li><code>ZapfDingbats</code> (symbolic)</li>
+</ul>
+It is also possible to pass an empty string. In that case, the current family is kept.
+</dd>
+<dt><code>style</code></dt>
+<dd>
+Font style. Possible values are (case insensitive):
+<ul>
+<li>empty string: regular</li>
+<li><code>B</code>: bold</li>
+<li><code>I</code>: italic</li>
+<li><code>U</code>: underline</li>
+</ul>
+or any combination. The default value is regular.
+Bold and italic styles do not apply to <code>Symbol</code> and <code>ZapfDingbats</code>.
+</dd>
+<dt><code>size</code></dt>
+<dd>
+Font size in points.
+<br>
+The default value is the current size. If no size has been specified since the beginning of
+the document, the value taken is 12.
+</dd>
+</dl>
+<h2>Example</h2>
+<div class="doc-source">
+<pre><code>// Times regular 12
+$pdf-&gt;SetFont('Times');
+// Arial bold 14
+$pdf-&gt;SetFont('Arial','B',14);
+// Removes bold
+$pdf-&gt;SetFont('');
+// Times bold, italic and underlined 14
+$pdf-&gt;SetFont('Times','BIU');</code></pre>
+</div>
+<h2>See also</h2>
+<a href="addfont.htm">AddFont</a>,
+<a href="setfontsize.htm">SetFontSize</a>,
+<a href="cell.htm">Cell</a>,
+<a href="multicell.htm">MultiCell</a>,
+<a href="write.htm">Write</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setfontsize.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setfontsize.htm
new file mode 100755 (executable)
index 0000000..70d002d
--- /dev/null
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetFontSize</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetFontSize</h1>
+<code>SetFontSize(<b>float</b> size)</code>
+<h2>Description</h2>
+Defines the size of the current font.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>size</code></dt>
+<dd>
+The size (in points).
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setfont.htm">SetFont</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setkeywords.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setkeywords.htm
new file mode 100755 (executable)
index 0000000..4952cc6
--- /dev/null
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetKeywords</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetKeywords</h1>
+<code>SetKeywords(<b>string</b> keywords [, <b>boolean</b> isUTF8])</code>
+<h2>Description</h2>
+Associates keywords with the document, generally in the form 'keyword1 keyword2 ...'.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>keywords</code></dt>
+<dd>
+The list of keywords.
+</dd>
+<dt><code>isUTF8</code></dt>
+<dd>
+Indicates if the string is encoded in ISO-8859-1 (<code>false</code>) or UTF-8 (<code>true</code>).<br>
+Default value: <code>false</code>.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setauthor.htm">SetAuthor</a>,
+<a href="setcreator.htm">SetCreator</a>,
+<a href="setsubject.htm">SetSubject</a>,
+<a href="settitle.htm">SetTitle</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setleftmargin.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setleftmargin.htm
new file mode 100755 (executable)
index 0000000..efa9c4e
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetLeftMargin</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetLeftMargin</h1>
+<code>SetLeftMargin(<b>float</b> margin)</code>
+<h2>Description</h2>
+Defines the left margin. The method can be called before creating the first page.
+<br>
+If the current abscissa gets out of page, it is brought back to the margin.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>margin</code></dt>
+<dd>
+The margin.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="settopmargin.htm">SetTopMargin</a>,
+<a href="setrightmargin.htm">SetRightMargin</a>,
+<a href="setautopagebreak.htm">SetAutoPageBreak</a>,
+<a href="setmargins.htm">SetMargins</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setlinewidth.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setlinewidth.htm
new file mode 100755 (executable)
index 0000000..b60b3b9
--- /dev/null
@@ -0,0 +1,29 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetLineWidth</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetLineWidth</h1>
+<code>SetLineWidth(<b>float</b> width)</code>
+<h2>Description</h2>
+Defines the line width. By default, the value equals 0.2 mm. The method can be called before
+the first page is created and the value is retained from page to page.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>width</code></dt>
+<dd>
+The width.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="line.htm">Line</a>,
+<a href="rect.htm">Rect</a>,
+<a href="cell.htm">Cell</a>,
+<a href="multicell.htm">MultiCell</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setlink.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setlink.htm
new file mode 100755 (executable)
index 0000000..6160dc8
--- /dev/null
@@ -0,0 +1,34 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetLink</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetLink</h1>
+<code>SetLink(<b>int</b> link [, <b>float</b> y [, <b>int</b> page]])</code>
+<h2>Description</h2>
+Defines the page and position a link points to.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>link</code></dt>
+<dd>
+The link identifier returned by AddLink().
+</dd>
+<dt><code>y</code></dt>
+<dd>
+Ordinate of target position; <code>-1</code> indicates the current position.
+The default value is <code>0</code> (top of page).
+</dd>
+<dt><code>page</code></dt>
+<dd>
+Number of target page; <code>-1</code> indicates the current page. This is the default value.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="addlink.htm">AddLink</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setmargins.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setmargins.htm
new file mode 100755 (executable)
index 0000000..01e32f7
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetMargins</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetMargins</h1>
+<code>SetMargins(<b>float</b> left, <b>float</b> top [, <b>float</b> right])</code>
+<h2>Description</h2>
+Defines the left, top and right margins. By default, they equal 1 cm. Call this method to change
+them.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>left</code></dt>
+<dd>
+Left margin.
+</dd>
+<dt><code>top</code></dt>
+<dd>
+Top margin.
+</dd>
+<dt><code>right</code></dt>
+<dd>
+Right margin. Default value is the left one.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setleftmargin.htm">SetLeftMargin</a>,
+<a href="settopmargin.htm">SetTopMargin</a>,
+<a href="setrightmargin.htm">SetRightMargin</a>,
+<a href="setautopagebreak.htm">SetAutoPageBreak</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setrightmargin.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setrightmargin.htm
new file mode 100755 (executable)
index 0000000..b55941b
--- /dev/null
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetRightMargin</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetRightMargin</h1>
+<code>SetRightMargin(<b>float</b> margin)</code>
+<h2>Description</h2>
+Defines the right margin. The method can be called before creating the first page.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>margin</code></dt>
+<dd>
+The margin.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setleftmargin.htm">SetLeftMargin</a>,
+<a href="settopmargin.htm">SetTopMargin</a>,
+<a href="setautopagebreak.htm">SetAutoPageBreak</a>,
+<a href="setmargins.htm">SetMargins</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setsubject.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setsubject.htm
new file mode 100755 (executable)
index 0000000..5df7fd4
--- /dev/null
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetSubject</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetSubject</h1>
+<code>SetSubject(<b>string</b> subject [, <b>boolean</b> isUTF8])</code>
+<h2>Description</h2>
+Defines the subject of the document.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>subject</code></dt>
+<dd>
+The subject.
+</dd>
+<dt><code>isUTF8</code></dt>
+<dd>
+Indicates if the string is encoded in ISO-8859-1 (<code>false</code>) or UTF-8 (<code>true</code>).<br>
+Default value: <code>false</code>.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setauthor.htm">SetAuthor</a>,
+<a href="setcreator.htm">SetCreator</a>,
+<a href="setkeywords.htm">SetKeywords</a>,
+<a href="settitle.htm">SetTitle</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/settextcolor.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/settextcolor.htm
new file mode 100755 (executable)
index 0000000..2db3b0d
--- /dev/null
@@ -0,0 +1,40 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetTextColor</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetTextColor</h1>
+<code>SetTextColor(<b>int</b> r [, <b>int</b> g, <b>int</b> b])</code>
+<h2>Description</h2>
+Defines the color used for text. It can be expressed in RGB components or gray scale. The
+method can be called before the first page is created and the value is retained from page to
+page.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>r</code></dt>
+<dd>
+If <code>g</code> et <code>b</code> are given, red component; if not, indicates the gray level.
+Value between 0 and 255.
+</dd>
+<dt><code>g</code></dt>
+<dd>
+Green component (between 0 and 255).
+</dd>
+<dt><code>b</code></dt>
+<dd>
+Blue component (between 0 and 255).
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setdrawcolor.htm">SetDrawColor</a>,
+<a href="setfillcolor.htm">SetFillColor</a>,
+<a href="text.htm">Text</a>,
+<a href="cell.htm">Cell</a>,
+<a href="multicell.htm">MultiCell</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/settitle.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/settitle.htm
new file mode 100755 (executable)
index 0000000..75cb9aa
--- /dev/null
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetTitle</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetTitle</h1>
+<code>SetTitle(<b>string</b> title [, <b>boolean</b> isUTF8])</code>
+<h2>Description</h2>
+Defines the title of the document.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>title</code></dt>
+<dd>
+The title.
+</dd>
+<dt><code>isUTF8</code></dt>
+<dd>
+Indicates if the string is encoded in ISO-8859-1 (<code>false</code>) or UTF-8 (<code>true</code>).<br>
+Default value: <code>false</code>.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setauthor.htm">SetAuthor</a>,
+<a href="setcreator.htm">SetCreator</a>,
+<a href="setkeywords.htm">SetKeywords</a>,
+<a href="setsubject.htm">SetSubject</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/settopmargin.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/settopmargin.htm
new file mode 100755 (executable)
index 0000000..5ea6ebc
--- /dev/null
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetTopMargin</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetTopMargin</h1>
+<code>SetTopMargin(<b>float</b> margin)</code>
+<h2>Description</h2>
+Defines the top margin. The method can be called before creating the first page.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>margin</code></dt>
+<dd>
+The margin.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setleftmargin.htm">SetLeftMargin</a>,
+<a href="setrightmargin.htm">SetRightMargin</a>,
+<a href="setautopagebreak.htm">SetAutoPageBreak</a>,
+<a href="setmargins.htm">SetMargins</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setx.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setx.htm
new file mode 100755 (executable)
index 0000000..39d3796
--- /dev/null
@@ -0,0 +1,29 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetX</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetX</h1>
+<code>SetX(<b>float</b> x)</code>
+<h2>Description</h2>
+Defines the abscissa of the current position. If the passed value is negative, it is relative
+to the right of the page.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>x</code></dt>
+<dd>
+The value of the abscissa.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="getx.htm">GetX</a>,
+<a href="gety.htm">GetY</a>,
+<a href="sety.htm">SetY</a>,
+<a href="setxy.htm">SetXY</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setxy.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/setxy.htm
new file mode 100755 (executable)
index 0000000..005acd4
--- /dev/null
@@ -0,0 +1,31 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetXY</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetXY</h1>
+<code>SetXY(<b>float</b> x, <b>float</b> y)</code>
+<h2>Description</h2>
+Defines the abscissa and ordinate of the current position. If the passed values are negative,
+they are relative respectively to the right and bottom of the page.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>x</code></dt>
+<dd>
+The value of the abscissa.
+</dd>
+<dt><code>y</code></dt>
+<dd>
+The value of the ordinate.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setx.htm">SetX</a>,
+<a href="sety.htm">SetY</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/sety.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/sety.htm
new file mode 100755 (executable)
index 0000000..7ee94ea
--- /dev/null
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>SetY</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>SetY</h1>
+<code>SetY(<b>float</b> y [, <b>boolean</b> resetX])</code>
+<h2>Description</h2>
+Sets the ordinate and optionally moves the current abscissa back to the left margin. If the value
+is negative, it is relative to the bottom of the page.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>y</code></dt>
+<dd>
+The value of the ordinate.
+</dd>
+<dt><code>resetX</code></dt>
+<dd>
+Whether to reset the abscissa. Default value: <code>true</code>.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="getx.htm">GetX</a>,
+<a href="gety.htm">GetY</a>,
+<a href="setx.htm">SetX</a>,
+<a href="setxy.htm">SetXY</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/text.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/text.htm
new file mode 100755 (executable)
index 0000000..0ef6187
--- /dev/null
@@ -0,0 +1,39 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Text</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Text</h1>
+<code>Text(<b>float</b> x, <b>float</b> y, <b>string</b> txt)</code>
+<h2>Description</h2>
+Prints a character string. The origin is on the left of the first character, on the baseline.
+This method allows to place a string precisely on the page, but it is usually easier to use
+Cell(), MultiCell() or Write() which are the standard methods to print text.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>x</code></dt>
+<dd>
+Abscissa of the origin.
+</dd>
+<dt><code>y</code></dt>
+<dd>
+Ordinate of the origin.
+</dd>
+<dt><code>txt</code></dt>
+<dd>
+String to print.
+</dd>
+</dl>
+<h2>See also</h2>
+<a href="setfont.htm">SetFont</a>,
+<a href="settextcolor.htm">SetTextColor</a>,
+<a href="cell.htm">Cell</a>,
+<a href="multicell.htm">MultiCell</a>,
+<a href="write.htm">Write</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/write.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/doc/write.htm
new file mode 100755 (executable)
index 0000000..0c7914c
--- /dev/null
@@ -0,0 +1,51 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Write</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Write</h1>
+<code>Write(<b>float</b> h, <b>string</b> txt [, <b>mixed</b> link])</code>
+<h2>Description</h2>
+This method prints text from the current position. When the right margin is reached (or the \n
+character is met) a line break occurs and text continues from the left margin. Upon method exit,
+the current position is left just at the end of the text.
+<br>
+It is possible to put a link on the text.
+<h2>Parameters</h2>
+<dl class="param">
+<dt><code>h</code></dt>
+<dd>
+Line height.
+</dd>
+<dt><code>txt</code></dt>
+<dd>
+String to print.
+</dd>
+<dt><code>link</code></dt>
+<dd>
+URL or identifier returned by AddLink().
+</dd>
+</dl>
+<h2>Example</h2>
+<div class="doc-source">
+<pre><code>// Begin with regular font
+$pdf-&gt;SetFont('Arial','',14);
+$pdf-&gt;Write(5,'Visit ');
+// Then put a blue underlined link
+$pdf-&gt;SetTextColor(0,0,255);
+$pdf-&gt;SetFont('','U');
+$pdf-&gt;Write(5,'www.fpdf.org','http://www.fpdf.org');</code></pre>
+</div>
+<h2>See also</h2>
+<a href="setfont.htm">SetFont</a>,
+<a href="settextcolor.htm">SetTextColor</a>,
+<a href="addlink.htm">AddLink</a>,
+<a href="multicell.htm">MultiCell</a>,
+<a href="setautopagebreak.htm">SetAutoPageBreak</a>
+<hr style="margin-top:1.5em">
+<div style="text-align:center"><a href="index.htm">Index</a></div>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/courier.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/courier.php
new file mode 100755 (executable)
index 0000000..bc8478e
--- /dev/null
@@ -0,0 +1,10 @@
+<?php
+$type = 'Core';
+$name = 'Courier';
+$up = -100;
+$ut = 50;
+for($i=0;$i<=255;$i++)
+       $cw[chr($i)] = 600;
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/courierb.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/courierb.php
new file mode 100755 (executable)
index 0000000..97ecd70
--- /dev/null
@@ -0,0 +1,10 @@
+<?php
+$type = 'Core';
+$name = 'Courier-Bold';
+$up = -100;
+$ut = 50;
+for($i=0;$i<=255;$i++)
+       $cw[chr($i)] = 600;
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/courierbi.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/courierbi.php
new file mode 100755 (executable)
index 0000000..c4bfff8
--- /dev/null
@@ -0,0 +1,10 @@
+<?php
+$type = 'Core';
+$name = 'Courier-BoldOblique';
+$up = -100;
+$ut = 50;
+for($i=0;$i<=255;$i++)
+       $cw[chr($i)] = 600;
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/courieri.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/courieri.php
new file mode 100755 (executable)
index 0000000..015a15a
--- /dev/null
@@ -0,0 +1,10 @@
+<?php
+$type = 'Core';
+$name = 'Courier-Oblique';
+$up = -100;
+$ut = 50;
+for($i=0;$i<=255;$i++)
+       $cw[chr($i)] = 600;
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/helvetica.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/helvetica.php
new file mode 100755 (executable)
index 0000000..927759b
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Helvetica';
+$up = -100;
+$ut = 50;
+$cw = array(
+       chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
+       chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
+       ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
+       'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+       'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
+       'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
+       chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+       chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
+       chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
+       chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+       chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
+       chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/helveticab.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/helveticab.php
new file mode 100755 (executable)
index 0000000..bcd7367
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Helvetica-Bold';
+$up = -100;
+$ut = 50;
+$cw = array(
+       chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
+       chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
+       ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
+       'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+       'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
+       'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
+       chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+       chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
+       chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
+       chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+       chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
+       chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/helveticabi.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/helveticabi.php
new file mode 100755 (executable)
index 0000000..0243cde
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Helvetica-BoldOblique';
+$up = -100;
+$ut = 50;
+$cw = array(
+       chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
+       chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
+       ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
+       'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+       'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
+       'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
+       chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+       chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
+       chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
+       chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+       chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
+       chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/helveticai.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/helveticai.php
new file mode 100755 (executable)
index 0000000..06ec735
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Helvetica-Oblique';
+$up = -100;
+$ut = 50;
+$cw = array(
+       chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
+       chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
+       ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
+       'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+       'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
+       'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
+       chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+       chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
+       chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
+       chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+       chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
+       chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/symbol.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/symbol.php
new file mode 100755 (executable)
index 0000000..f8f0c33
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+$type = 'Core';
+$name = 'Symbol';
+$up = -100;
+$ut = 50;
+$cw = array(
+       chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+       chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549,
+       ','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722,
+       'B'=>667,'C'=>722,'D'=>612,'E'=>611,'F'=>763,'G'=>603,'H'=>722,'I'=>333,'J'=>631,'K'=>722,'L'=>686,'M'=>889,'N'=>722,'O'=>722,'P'=>768,'Q'=>741,'R'=>556,'S'=>592,'T'=>611,'U'=>690,'V'=>439,'W'=>768,
+       'X'=>645,'Y'=>795,'Z'=>611,'['=>333,'\\'=>863,']'=>333,'^'=>658,'_'=>500,'`'=>500,'a'=>631,'b'=>549,'c'=>549,'d'=>494,'e'=>439,'f'=>521,'g'=>411,'h'=>603,'i'=>329,'j'=>603,'k'=>549,'l'=>549,'m'=>576,
+       'n'=>521,'o'=>549,'p'=>549,'q'=>521,'r'=>549,'s'=>603,'t'=>439,'u'=>576,'v'=>713,'w'=>686,'x'=>493,'y'=>686,'z'=>494,'{'=>480,'|'=>200,'}'=>480,'~'=>549,chr(127)=>0,chr(128)=>0,chr(129)=>0,chr(130)=>0,chr(131)=>0,
+       chr(132)=>0,chr(133)=>0,chr(134)=>0,chr(135)=>0,chr(136)=>0,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>0,chr(141)=>0,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
+       chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>750,chr(161)=>620,chr(162)=>247,chr(163)=>549,chr(164)=>167,chr(165)=>713,chr(166)=>500,chr(167)=>753,chr(168)=>753,chr(169)=>753,chr(170)=>753,chr(171)=>1042,chr(172)=>987,chr(173)=>603,chr(174)=>987,chr(175)=>603,
+       chr(176)=>400,chr(177)=>549,chr(178)=>411,chr(179)=>549,chr(180)=>549,chr(181)=>713,chr(182)=>494,chr(183)=>460,chr(184)=>549,chr(185)=>549,chr(186)=>549,chr(187)=>549,chr(188)=>1000,chr(189)=>603,chr(190)=>1000,chr(191)=>658,chr(192)=>823,chr(193)=>686,chr(194)=>795,chr(195)=>987,chr(196)=>768,chr(197)=>768,
+       chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042,
+       chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329,
+       chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0);
+$uv = array(32=>160,33=>33,34=>8704,35=>35,36=>8707,37=>array(37,2),39=>8715,40=>array(40,2),42=>8727,43=>array(43,2),45=>8722,46=>array(46,18),64=>8773,65=>array(913,2),67=>935,68=>array(916,2),70=>934,71=>915,72=>919,73=>921,74=>977,75=>array(922,4),79=>array(927,2),81=>920,82=>929,83=>array(931,3),86=>962,87=>937,88=>926,89=>936,90=>918,91=>91,92=>8756,93=>93,94=>8869,95=>95,96=>63717,97=>array(945,2),99=>967,100=>array(948,2),102=>966,103=>947,104=>951,105=>953,106=>981,107=>array(954,4),111=>array(959,2),113=>952,114=>961,115=>array(963,3),118=>982,119=>969,120=>958,121=>968,122=>950,123=>array(123,3),126=>8764,160=>8364,161=>978,162=>8242,163=>8804,164=>8725,165=>8734,166=>402,167=>9827,168=>9830,169=>9829,170=>9824,171=>8596,172=>array(8592,4),176=>array(176,2),178=>8243,179=>8805,180=>215,181=>8733,182=>8706,183=>8226,184=>247,185=>array(8800,2),187=>8776,188=>8230,189=>array(63718,2),191=>8629,192=>8501,193=>8465,194=>8476,195=>8472,196=>8855,197=>8853,198=>8709,199=>array(8745,2),201=>8835,202=>8839,203=>8836,204=>8834,205=>8838,206=>array(8712,2),208=>8736,209=>8711,210=>63194,211=>63193,212=>63195,213=>8719,214=>8730,215=>8901,216=>172,217=>array(8743,2),219=>8660,220=>array(8656,4),224=>9674,225=>9001,226=>array(63720,3),229=>8721,230=>array(63723,10),241=>9002,242=>8747,243=>8992,244=>63733,245=>8993,246=>array(63734,9));
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/times.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/times.php
new file mode 100755 (executable)
index 0000000..81f2a8b
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Times-Roman';
+$up = -100;
+$ut = 50;
+$cw = array(
+       chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+       chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564,
+       ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722,
+       'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944,
+       'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
+       'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
+       chr(132)=>444,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>889,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>444,chr(148)=>444,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>980,
+       chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>200,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>564,chr(173)=>333,chr(174)=>760,chr(175)=>333,
+       chr(176)=>400,chr(177)=>564,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>453,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>444,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
+       chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+       chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
+       chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/timesb.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/timesb.php
new file mode 100755 (executable)
index 0000000..7db704f
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Times-Bold';
+$up = -100;
+$ut = 50;
+$cw = array(
+       chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+       chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
+       ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722,
+       'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>778,'I'=>389,'J'=>500,'K'=>778,'L'=>667,'M'=>944,'N'=>722,'O'=>778,'P'=>611,'Q'=>778,'R'=>722,'S'=>556,'T'=>667,'U'=>722,'V'=>722,'W'=>1000,
+       'X'=>722,'Y'=>722,'Z'=>667,'['=>333,'\\'=>278,']'=>333,'^'=>581,'_'=>500,'`'=>333,'a'=>500,'b'=>556,'c'=>444,'d'=>556,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>333,'k'=>556,'l'=>278,'m'=>833,
+       'n'=>556,'o'=>500,'p'=>556,'q'=>556,'r'=>444,'s'=>389,'t'=>333,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>394,'|'=>220,'}'=>394,'~'=>520,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
+       chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>667,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+       chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>300,chr(171)=>500,chr(172)=>570,chr(173)=>333,chr(174)=>747,chr(175)=>333,
+       chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>556,chr(182)=>540,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>330,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
+       chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+       chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
+       chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/timesbi.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/timesbi.php
new file mode 100755 (executable)
index 0000000..089f21a
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Times-BoldItalic';
+$up = -100;
+$ut = 50;
+$cw = array(
+       chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+       chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
+       ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667,
+       'B'=>667,'C'=>667,'D'=>722,'E'=>667,'F'=>667,'G'=>722,'H'=>778,'I'=>389,'J'=>500,'K'=>667,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>611,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>667,'W'=>889,
+       'X'=>667,'Y'=>611,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>570,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
+       'n'=>556,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>556,'v'=>444,'w'=>667,'x'=>500,'y'=>444,'z'=>389,'{'=>348,'|'=>220,'}'=>348,'~'=>570,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
+       chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+       chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>389,chr(159)=>611,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>266,chr(171)=>500,chr(172)=>606,chr(173)=>333,chr(174)=>747,chr(175)=>333,
+       chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>576,chr(182)=>500,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>300,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
+       chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+       chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
+       chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/timesi.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/timesi.php
new file mode 100755 (executable)
index 0000000..f958b5b
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Times-Italic';
+$up = -100;
+$ut = 50;
+$cw = array(
+       chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+       chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675,
+       ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611,
+       'B'=>611,'C'=>667,'D'=>722,'E'=>611,'F'=>611,'G'=>722,'H'=>722,'I'=>333,'J'=>444,'K'=>667,'L'=>556,'M'=>833,'N'=>667,'O'=>722,'P'=>611,'Q'=>722,'R'=>611,'S'=>500,'T'=>556,'U'=>722,'V'=>611,'W'=>833,
+       'X'=>611,'Y'=>556,'Z'=>556,'['=>389,'\\'=>278,']'=>389,'^'=>422,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>278,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>444,'l'=>278,'m'=>722,
+       'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>500,'v'=>444,'w'=>667,'x'=>444,'y'=>444,'z'=>389,'{'=>400,'|'=>275,'}'=>400,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
+       chr(132)=>556,chr(133)=>889,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>500,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>556,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>556,chr(148)=>556,chr(149)=>350,chr(150)=>500,chr(151)=>889,chr(152)=>333,chr(153)=>980,
+       chr(154)=>389,chr(155)=>333,chr(156)=>667,chr(157)=>350,chr(158)=>389,chr(159)=>556,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>275,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>675,chr(173)=>333,chr(174)=>760,chr(175)=>333,
+       chr(176)=>400,chr(177)=>675,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>523,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>611,chr(193)=>611,chr(194)=>611,chr(195)=>611,chr(196)=>611,chr(197)=>611,
+       chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+       chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
+       chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/zapfdingbats.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/font/zapfdingbats.php
new file mode 100755 (executable)
index 0000000..7c2cb5e
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+$type = 'Core';
+$name = 'ZapfDingbats';
+$up = -100;
+$ut = 50;
+$cw = array(
+       chr(0)=>0,chr(1)=>0,chr(2)=>0,chr(3)=>0,chr(4)=>0,chr(5)=>0,chr(6)=>0,chr(7)=>0,chr(8)=>0,chr(9)=>0,chr(10)=>0,chr(11)=>0,chr(12)=>0,chr(13)=>0,chr(14)=>0,chr(15)=>0,chr(16)=>0,chr(17)=>0,chr(18)=>0,chr(19)=>0,chr(20)=>0,chr(21)=>0,
+       chr(22)=>0,chr(23)=>0,chr(24)=>0,chr(25)=>0,chr(26)=>0,chr(27)=>0,chr(28)=>0,chr(29)=>0,chr(30)=>0,chr(31)=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939,
+       ','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692,
+       'B'=>786,'C'=>788,'D'=>788,'E'=>790,'F'=>793,'G'=>794,'H'=>816,'I'=>823,'J'=>789,'K'=>841,'L'=>823,'M'=>833,'N'=>816,'O'=>831,'P'=>923,'Q'=>744,'R'=>723,'S'=>749,'T'=>790,'U'=>792,'V'=>695,'W'=>776,
+       'X'=>768,'Y'=>792,'Z'=>759,'['=>707,'\\'=>708,']'=>682,'^'=>701,'_'=>826,'`'=>815,'a'=>789,'b'=>789,'c'=>707,'d'=>687,'e'=>696,'f'=>689,'g'=>786,'h'=>787,'i'=>713,'j'=>791,'k'=>785,'l'=>791,'m'=>873,
+       'n'=>761,'o'=>762,'p'=>762,'q'=>759,'r'=>759,'s'=>892,'t'=>892,'u'=>788,'v'=>784,'w'=>438,'x'=>138,'y'=>277,'z'=>415,'{'=>392,'|'=>392,'}'=>668,'~'=>668,chr(127)=>0,chr(128)=>390,chr(129)=>390,chr(130)=>317,chr(131)=>317,
+       chr(132)=>276,chr(133)=>276,chr(134)=>509,chr(135)=>509,chr(136)=>410,chr(137)=>410,chr(138)=>234,chr(139)=>234,chr(140)=>334,chr(141)=>334,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
+       chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>0,chr(161)=>732,chr(162)=>544,chr(163)=>544,chr(164)=>910,chr(165)=>667,chr(166)=>760,chr(167)=>760,chr(168)=>776,chr(169)=>595,chr(170)=>694,chr(171)=>626,chr(172)=>788,chr(173)=>788,chr(174)=>788,chr(175)=>788,
+       chr(176)=>788,chr(177)=>788,chr(178)=>788,chr(179)=>788,chr(180)=>788,chr(181)=>788,chr(182)=>788,chr(183)=>788,chr(184)=>788,chr(185)=>788,chr(186)=>788,chr(187)=>788,chr(188)=>788,chr(189)=>788,chr(190)=>788,chr(191)=>788,chr(192)=>788,chr(193)=>788,chr(194)=>788,chr(195)=>788,chr(196)=>788,chr(197)=>788,
+       chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918,
+       chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874,
+       chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0);
+$uv = array(32=>32,33=>array(9985,4),37=>9742,38=>array(9990,4),42=>9755,43=>9758,44=>array(9996,28),72=>9733,73=>array(10025,35),108=>9679,109=>10061,110=>9632,111=>array(10063,4),115=>9650,116=>9660,117=>9670,118=>10070,119=>9687,120=>array(10072,7),128=>array(10088,14),161=>array(10081,7),168=>9827,169=>9830,170=>9829,171=>9824,172=>array(9312,10),182=>array(10102,31),213=>8594,214=>array(8596,2),216=>array(10136,24),241=>array(10161,14));
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/fpdf.css b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/fpdf.css
new file mode 100755 (executable)
index 0000000..8cfa33d
--- /dev/null
@@ -0,0 +1,21 @@
+body {font-family:"Times New Roman",serif}
+h1 {font:bold 135% Arial,sans-serif; color:#4000A0; margin-bottom:0.9em}
+h2 {font:bold 95% Arial,sans-serif; color:#900000; margin-top:1.5em; margin-bottom:1em}
+dl.param dt {text-decoration:underline}
+dl.param dd {margin-top:1em; margin-bottom:1em}
+dl.param ul {margin-top:1em; margin-bottom:1em}
+tt, code, kbd {font-family:"Courier New",Courier,monospace; font-size:82%}
+div.source {margin-top:1.4em; margin-bottom:1.3em}
+div.source pre {display:table; border:1px solid #24246A; width:100%; margin:0em; font-family:inherit; font-size:100%}
+div.source code {display:block; border:1px solid #C5C5EC; background-color:#F0F5FF; padding:6px; color:#000000}
+div.doc-source {margin-top:1.4em; margin-bottom:1.3em}
+div.doc-source pre {display:table; width:100%; margin:0em; font-family:inherit; font-size:100%}
+div.doc-source code {display:block; background-color:#E0E0E0; padding:4px}
+.kw {color:#000080; font-weight:bold}
+.str {color:#CC0000}
+.cmt {color:#008000}
+p.demo {text-align:center; margin-top:-0.9em}
+a.demo {text-decoration:none; font-weight:bold; color:#0000CC}
+a.demo:link {text-decoration:none; font-weight:bold; color:#0000CC}
+a.demo:hover {text-decoration:none; font-weight:bold; color:#0000FF}
+a.demo:active {text-decoration:none; font-weight:bold; color:#0000FF}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/fpdf.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/fpdf.php
new file mode 100755 (executable)
index 0000000..e7fbb45
--- /dev/null
@@ -0,0 +1,1898 @@
+<?php
+/*******************************************************************************
+* FPDF                                                                         *
+*                                                                              *
+* Version: 1.81                                                                *
+* Date:    2015-12-20                                                          *
+* Author:  Olivier PLATHEY                                                     *
+*******************************************************************************/
+
+define('FPDF_VERSION','1.81');
+
+class FPDF
+{
+protected $page;               // current page number
+protected $n;                  // current object number
+protected $offsets;            // array of object offsets
+protected $buffer;             // buffer holding in-memory PDF
+protected $pages;              // array containing pages
+protected $state;              // current document state
+protected $compress;           // compression flag
+protected $k;                  // scale factor (number of points in user unit)
+protected $DefOrientation;     // default orientation
+protected $CurOrientation;     // current orientation
+protected $StdPageSizes;       // standard page sizes
+protected $DefPageSize;        // default page size
+protected $CurPageSize;        // current page size
+protected $CurRotation;        // current page rotation
+protected $PageInfo;           // page-related data
+protected $wPt, $hPt;          // dimensions of current page in points
+protected $w, $h;              // dimensions of current page in user unit
+protected $lMargin;            // left margin
+protected $tMargin;            // top margin
+protected $rMargin;            // right margin
+protected $bMargin;            // page break margin
+protected $cMargin;            // cell margin
+protected $x, $y;              // current position in user unit
+protected $lasth;              // height of last printed cell
+protected $LineWidth;          // line width in user unit
+protected $fontpath;           // path containing fonts
+protected $CoreFonts;          // array of core font names
+protected $fonts;              // array of used fonts
+protected $FontFiles;          // array of font files
+protected $encodings;          // array of encodings
+protected $cmaps;              // array of ToUnicode CMaps
+protected $FontFamily;         // current font family
+protected $FontStyle;          // current font style
+protected $underline;          // underlining flag
+protected $CurrentFont;        // current font info
+protected $FontSizePt;         // current font size in points
+protected $FontSize;           // current font size in user unit
+protected $DrawColor;          // commands for drawing color
+protected $FillColor;          // commands for filling color
+protected $TextColor;          // commands for text color
+protected $ColorFlag;          // indicates whether fill and text colors are different
+protected $WithAlpha;          // indicates whether alpha channel is used
+protected $ws;                 // word spacing
+protected $images;             // array of used images
+protected $PageLinks;          // array of links in pages
+protected $links;              // array of internal links
+protected $AutoPageBreak;      // automatic page breaking
+protected $PageBreakTrigger;   // threshold used to trigger page breaks
+protected $InHeader;           // flag set when processing header
+protected $InFooter;           // flag set when processing footer
+protected $AliasNbPages;       // alias for total number of pages
+protected $ZoomMode;           // zoom display mode
+protected $LayoutMode;         // layout display mode
+protected $metadata;           // document properties
+protected $PDFVersion;         // PDF version number
+
+/*******************************************************************************
+*                               Public methods                                 *
+*******************************************************************************/
+
+function __construct($orientation='P', $unit='mm', $size='A4')
+{
+       // Some checks
+       $this->_dochecks();
+       // Initialization of properties
+       $this->state = 0;
+       $this->page = 0;
+       $this->n = 2;
+       $this->buffer = '';
+       $this->pages = array();
+       $this->PageInfo = array();
+       $this->fonts = array();
+       $this->FontFiles = array();
+       $this->encodings = array();
+       $this->cmaps = array();
+       $this->images = array();
+       $this->links = array();
+       $this->InHeader = false;
+       $this->InFooter = false;
+       $this->lasth = 0;
+       $this->FontFamily = '';
+       $this->FontStyle = '';
+       $this->FontSizePt = 12;
+       $this->underline = false;
+       $this->DrawColor = '0 G';
+       $this->FillColor = '0 g';
+       $this->TextColor = '0 g';
+       $this->ColorFlag = false;
+       $this->WithAlpha = false;
+       $this->ws = 0;
+       // Font path
+       if(defined('FPDF_FONTPATH'))
+       {
+               $this->fontpath = FPDF_FONTPATH;
+               if(substr($this->fontpath,-1)!='/' && substr($this->fontpath,-1)!='\\')
+                       $this->fontpath .= '/';
+       }
+       elseif(is_dir(dirname(__FILE__).'/font'))
+               $this->fontpath = dirname(__FILE__).'/font/';
+       else
+               $this->fontpath = '';
+       // Core fonts
+       $this->CoreFonts = array('courier', 'helvetica', 'times', 'symbol', 'zapfdingbats');
+       // Scale factor
+       if($unit=='pt')
+               $this->k = 1;
+       elseif($unit=='mm')
+               $this->k = 72/25.4;
+       elseif($unit=='cm')
+               $this->k = 72/2.54;
+       elseif($unit=='in')
+               $this->k = 72;
+       else
+               $this->Error('Incorrect unit: '.$unit);
+       // Page sizes
+       $this->StdPageSizes = array('a3'=>array(841.89,1190.55), 'a4'=>array(595.28,841.89), 'a5'=>array(420.94,595.28),
+               'letter'=>array(612,792), 'legal'=>array(612,1008));
+       $size = $this->_getpagesize($size);
+       $this->DefPageSize = $size;
+       $this->CurPageSize = $size;
+       // Page orientation
+       $orientation = strtolower($orientation);
+       if($orientation=='p' || $orientation=='portrait')
+       {
+               $this->DefOrientation = 'P';
+               $this->w = $size[0];
+               $this->h = $size[1];
+       }
+       elseif($orientation=='l' || $orientation=='landscape')
+       {
+               $this->DefOrientation = 'L';
+               $this->w = $size[1];
+               $this->h = $size[0];
+       }
+       else
+               $this->Error('Incorrect orientation: '.$orientation);
+       $this->CurOrientation = $this->DefOrientation;
+       $this->wPt = $this->w*$this->k;
+       $this->hPt = $this->h*$this->k;
+       // Page rotation
+       $this->CurRotation = 0;
+       // Page margins (1 cm)
+       $margin = 28.35/$this->k;
+       $this->SetMargins($margin,$margin);
+       // Interior cell margin (1 mm)
+       $this->cMargin = $margin/10;
+       // Line width (0.2 mm)
+       $this->LineWidth = .567/$this->k;
+       // Automatic page break
+       $this->SetAutoPageBreak(true,2*$margin);
+       // Default display mode
+       $this->SetDisplayMode('default');
+       // Enable compression
+       $this->SetCompression(true);
+       // Set default PDF version number
+       $this->PDFVersion = '1.3';
+}
+
+function SetMargins($left, $top, $right=null)
+{
+       // Set left, top and right margins
+       $this->lMargin = $left;
+       $this->tMargin = $top;
+       if($right===null)
+               $right = $left;
+       $this->rMargin = $right;
+}
+
+function SetLeftMargin($margin)
+{
+       // Set left margin
+       $this->lMargin = $margin;
+       if($this->page>0 && $this->x<$margin)
+               $this->x = $margin;
+}
+
+function SetTopMargin($margin)
+{
+       // Set top margin
+       $this->tMargin = $margin;
+}
+
+function SetRightMargin($margin)
+{
+       // Set right margin
+       $this->rMargin = $margin;
+}
+
+function SetAutoPageBreak($auto, $margin=0)
+{
+       // Set auto page break mode and triggering margin
+       $this->AutoPageBreak = $auto;
+       $this->bMargin = $margin;
+       $this->PageBreakTrigger = $this->h-$margin;
+}
+
+function SetDisplayMode($zoom, $layout='default')
+{
+       // Set display mode in viewer
+       if($zoom=='fullpage' || $zoom=='fullwidth' || $zoom=='real' || $zoom=='default' || !is_string($zoom))
+               $this->ZoomMode = $zoom;
+       else
+               $this->Error('Incorrect zoom display mode: '.$zoom);
+       if($layout=='single' || $layout=='continuous' || $layout=='two' || $layout=='default')
+               $this->LayoutMode = $layout;
+       else
+               $this->Error('Incorrect layout display mode: '.$layout);
+}
+
+function SetCompression($compress)
+{
+       // Set page compression
+       if(function_exists('gzcompress'))
+               $this->compress = $compress;
+       else
+               $this->compress = false;
+}
+
+function SetTitle($title, $isUTF8=false)
+{
+       // Title of document
+       $this->metadata['Title'] = $isUTF8 ? $title : utf8_encode($title);
+}
+
+function SetAuthor($author, $isUTF8=false)
+{
+       // Author of document
+       $this->metadata['Author'] = $isUTF8 ? $author : utf8_encode($author);
+}
+
+function SetSubject($subject, $isUTF8=false)
+{
+       // Subject of document
+       $this->metadata['Subject'] = $isUTF8 ? $subject : utf8_encode($subject);
+}
+
+function SetKeywords($keywords, $isUTF8=false)
+{
+       // Keywords of document
+       $this->metadata['Keywords'] = $isUTF8 ? $keywords : utf8_encode($keywords);
+}
+
+function SetCreator($creator, $isUTF8=false)
+{
+       // Creator of document
+       $this->metadata['Creator'] = $isUTF8 ? $creator : utf8_encode($creator);
+}
+
+function AliasNbPages($alias='{nb}')
+{
+       // Define an alias for total number of pages
+       $this->AliasNbPages = $alias;
+}
+
+function Error($msg)
+{
+       // Fatal error
+       throw new Exception('FPDF error: '.$msg);
+}
+
+function Close()
+{
+       // Terminate document
+       if($this->state==3)
+               return;
+       if($this->page==0)
+               $this->AddPage();
+       // Page footer
+       $this->InFooter = true;
+       $this->Footer();
+       $this->InFooter = false;
+       // Close page
+       $this->_endpage();
+       // Close document
+       $this->_enddoc();
+}
+
+function AddPage($orientation='', $size='', $rotation=0)
+{
+       // Start a new page
+       if($this->state==3)
+               $this->Error('The document is closed');
+       $family = $this->FontFamily;
+       $style = $this->FontStyle.($this->underline ? 'U' : '');
+       $fontsize = $this->FontSizePt;
+       $lw = $this->LineWidth;
+       $dc = $this->DrawColor;
+       $fc = $this->FillColor;
+       $tc = $this->TextColor;
+       $cf = $this->ColorFlag;
+       if($this->page>0)
+       {
+               // Page footer
+               $this->InFooter = true;
+               $this->Footer();
+               $this->InFooter = false;
+               // Close page
+               $this->_endpage();
+       }
+       // Start new page
+       $this->_beginpage($orientation,$size,$rotation);
+       // Set line cap style to square
+       $this->_out('2 J');
+       // Set line width
+       $this->LineWidth = $lw;
+       $this->_out(sprintf('%.2F w',$lw*$this->k));
+       // Set font
+       if($family)
+               $this->SetFont($family,$style,$fontsize);
+       // Set colors
+       $this->DrawColor = $dc;
+       if($dc!='0 G')
+               $this->_out($dc);
+       $this->FillColor = $fc;
+       if($fc!='0 g')
+               $this->_out($fc);
+       $this->TextColor = $tc;
+       $this->ColorFlag = $cf;
+       // Page header
+       $this->InHeader = true;
+       $this->Header();
+       $this->InHeader = false;
+       // Restore line width
+       if($this->LineWidth!=$lw)
+       {
+               $this->LineWidth = $lw;
+               $this->_out(sprintf('%.2F w',$lw*$this->k));
+       }
+       // Restore font
+       if($family)
+               $this->SetFont($family,$style,$fontsize);
+       // Restore colors
+       if($this->DrawColor!=$dc)
+       {
+               $this->DrawColor = $dc;
+               $this->_out($dc);
+       }
+       if($this->FillColor!=$fc)
+       {
+               $this->FillColor = $fc;
+               $this->_out($fc);
+       }
+       $this->TextColor = $tc;
+       $this->ColorFlag = $cf;
+}
+
+function Header()
+{
+       // To be implemented in your own inherited class
+}
+
+function Footer()
+{
+       // To be implemented in your own inherited class
+}
+
+function PageNo()
+{
+       // Get current page number
+       return $this->page;
+}
+
+function SetDrawColor($r, $g=null, $b=null)
+{
+       // Set color for all stroking operations
+       if(($r==0 && $g==0 && $b==0) || $g===null)
+               $this->DrawColor = sprintf('%.3F G',$r/255);
+       else
+               $this->DrawColor = sprintf('%.3F %.3F %.3F RG',$r/255,$g/255,$b/255);
+       if($this->page>0)
+               $this->_out($this->DrawColor);
+}
+
+function SetFillColor($r, $g=null, $b=null)
+{
+       // Set color for all filling operations
+       if(($r==0 && $g==0 && $b==0) || $g===null)
+               $this->FillColor = sprintf('%.3F g',$r/255);
+       else
+               $this->FillColor = sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255);
+       $this->ColorFlag = ($this->FillColor!=$this->TextColor);
+       if($this->page>0)
+               $this->_out($this->FillColor);
+}
+
+function SetTextColor($r, $g=null, $b=null)
+{
+       // Set color for text
+       if(($r==0 && $g==0 && $b==0) || $g===null)
+               $this->TextColor = sprintf('%.3F g',$r/255);
+       else
+               $this->TextColor = sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255);
+       $this->ColorFlag = ($this->FillColor!=$this->TextColor);
+}
+
+function GetStringWidth($s)
+{
+       // Get width of a string in the current font
+       $s = (string)$s;
+       $cw = &$this->CurrentFont['cw'];
+       $w = 0;
+       $l = strlen($s);
+       for($i=0;$i<$l;$i++)
+               $w += $cw[$s[$i]];
+       return $w*$this->FontSize/1000;
+}
+
+function SetLineWidth($width)
+{
+       // Set line width
+       $this->LineWidth = $width;
+       if($this->page>0)
+               $this->_out(sprintf('%.2F w',$width*$this->k));
+}
+
+function Line($x1, $y1, $x2, $y2)
+{
+       // Draw a line
+       $this->_out(sprintf('%.2F %.2F m %.2F %.2F l S',$x1*$this->k,($this->h-$y1)*$this->k,$x2*$this->k,($this->h-$y2)*$this->k));
+}
+
+function Rect($x, $y, $w, $h, $style='')
+{
+       // Draw a rectangle
+       if($style=='F')
+               $op = 'f';
+       elseif($style=='FD' || $style=='DF')
+               $op = 'B';
+       else
+               $op = 'S';
+       $this->_out(sprintf('%.2F %.2F %.2F %.2F re %s',$x*$this->k,($this->h-$y)*$this->k,$w*$this->k,-$h*$this->k,$op));
+}
+
+function AddFont($family, $style='', $file='')
+{
+       // Add a TrueType, OpenType or Type1 font
+       $family = strtolower($family);
+       if($file=='')
+               $file = str_replace(' ','',$family).strtolower($style).'.php';
+       $style = strtoupper($style);
+       if($style=='IB')
+               $style = 'BI';
+       $fontkey = $family.$style;
+       if(isset($this->fonts[$fontkey]))
+               return;
+       $info = $this->_loadfont($file);
+       $info['i'] = count($this->fonts)+1;
+       if(!empty($info['file']))
+       {
+               // Embedded font
+               if($info['type']=='TrueType')
+                       $this->FontFiles[$info['file']] = array('length1'=>$info['originalsize']);
+               else
+                       $this->FontFiles[$info['file']] = array('length1'=>$info['size1'], 'length2'=>$info['size2']);
+       }
+       $this->fonts[$fontkey] = $info;
+}
+
+function SetFont($family, $style='', $size=0)
+{
+       // Select a font; size given in points
+       if($family=='')
+               $family = $this->FontFamily;
+       else
+               $family = strtolower($family);
+       $style = strtoupper($style);
+       if(strpos($style,'U')!==false)
+       {
+               $this->underline = true;
+               $style = str_replace('U','',$style);
+       }
+       else
+               $this->underline = false;
+       if($style=='IB')
+               $style = 'BI';
+       if($size==0)
+               $size = $this->FontSizePt;
+       // Test if font is already selected
+       if($this->FontFamily==$family && $this->FontStyle==$style && $this->FontSizePt==$size)
+               return;
+       // Test if font is already loaded
+       $fontkey = $family.$style;
+       if(!isset($this->fonts[$fontkey]))
+       {
+               // Test if one of the core fonts
+               if($family=='arial')
+                       $family = 'helvetica';
+               if(in_array($family,$this->CoreFonts))
+               {
+                       if($family=='symbol' || $family=='zapfdingbats')
+                               $style = '';
+                       $fontkey = $family.$style;
+                       if(!isset($this->fonts[$fontkey]))
+                               $this->AddFont($family,$style);
+               }
+               else
+                       $this->Error('Undefined font: '.$family.' '.$style);
+       }
+       // Select it
+       $this->FontFamily = $family;
+       $this->FontStyle = $style;
+       $this->FontSizePt = $size;
+       $this->FontSize = $size/$this->k;
+       $this->CurrentFont = &$this->fonts[$fontkey];
+       if($this->page>0)
+               $this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt));
+}
+
+function SetFontSize($size)
+{
+       // Set font size in points
+       if($this->FontSizePt==$size)
+               return;
+       $this->FontSizePt = $size;
+       $this->FontSize = $size/$this->k;
+       if($this->page>0)
+               $this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt));
+}
+
+function AddLink()
+{
+       // Create a new internal link
+       $n = count($this->links)+1;
+       $this->links[$n] = array(0, 0);
+       return $n;
+}
+
+function SetLink($link, $y=0, $page=-1)
+{
+       // Set destination of internal link
+       if($y==-1)
+               $y = $this->y;
+       if($page==-1)
+               $page = $this->page;
+       $this->links[$link] = array($page, $y);
+}
+
+function Link($x, $y, $w, $h, $link)
+{
+       // Put a link on the page
+       $this->PageLinks[$this->page][] = array($x*$this->k, $this->hPt-$y*$this->k, $w*$this->k, $h*$this->k, $link);
+}
+
+function Text($x, $y, $txt)
+{
+       // Output a string
+       if(!isset($this->CurrentFont))
+               $this->Error('No font has been set');
+       $s = sprintf('BT %.2F %.2F Td (%s) Tj ET',$x*$this->k,($this->h-$y)*$this->k,$this->_escape($txt));
+       if($this->underline && $txt!='')
+               $s .= ' '.$this->_dounderline($x,$y,$txt);
+       if($this->ColorFlag)
+               $s = 'q '.$this->TextColor.' '.$s.' Q';
+       $this->_out($s);
+}
+
+function AcceptPageBreak()
+{
+       // Accept automatic page break or not
+       return $this->AutoPageBreak;
+}
+
+function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='')
+{
+       // Output a cell
+       $k = $this->k;
+       if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak())
+       {
+               // Automatic page break
+               $x = $this->x;
+               $ws = $this->ws;
+               if($ws>0)
+               {
+                       $this->ws = 0;
+                       $this->_out('0 Tw');
+               }
+               $this->AddPage($this->CurOrientation,$this->CurPageSize,$this->CurRotation);
+               $this->x = $x;
+               if($ws>0)
+               {
+                       $this->ws = $ws;
+                       $this->_out(sprintf('%.3F Tw',$ws*$k));
+               }
+       }
+       if($w==0)
+               $w = $this->w-$this->rMargin-$this->x;
+       $s = '';
+       if($fill || $border==1)
+       {
+               if($fill)
+                       $op = ($border==1) ? 'B' : 'f';
+               else
+                       $op = 'S';
+               $s = sprintf('%.2F %.2F %.2F %.2F re %s ',$this->x*$k,($this->h-$this->y)*$k,$w*$k,-$h*$k,$op);
+       }
+       if(is_string($border))
+       {
+               $x = $this->x;
+               $y = $this->y;
+               if(strpos($border,'L')!==false)
+                       $s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,$x*$k,($this->h-($y+$h))*$k);
+               if(strpos($border,'T')!==false)
+                       $s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-$y)*$k);
+               if(strpos($border,'R')!==false)
+                       $s .= sprintf('%.2F %.2F m %.2F %.2F l S ',($x+$w)*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-($y+$h))*$k);
+               if(strpos($border,'B')!==false)
+                       $s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-($y+$h))*$k,($x+$w)*$k,($this->h-($y+$h))*$k);
+       }
+       if($txt!=='')
+       {
+               if(!isset($this->CurrentFont))
+                       $this->Error('No font has been set');
+               if($align=='R')
+                       $dx = $w-$this->cMargin-$this->GetStringWidth($txt);
+               elseif($align=='C')
+                       $dx = ($w-$this->GetStringWidth($txt))/2;
+               else
+                       $dx = $this->cMargin;
+               if($this->ColorFlag)
+                       $s .= 'q '.$this->TextColor.' ';
+               $s .= sprintf('BT %.2F %.2F Td (%s) Tj ET',($this->x+$dx)*$k,($this->h-($this->y+.5*$h+.3*$this->FontSize))*$k,$this->_escape($txt));
+               if($this->underline)
+                       $s .= ' '.$this->_dounderline($this->x+$dx,$this->y+.5*$h+.3*$this->FontSize,$txt);
+               if($this->ColorFlag)
+                       $s .= ' Q';
+               if($link)
+                       $this->Link($this->x+$dx,$this->y+.5*$h-.5*$this->FontSize,$this->GetStringWidth($txt),$this->FontSize,$link);
+       }
+       if($s)
+               $this->_out($s);
+       $this->lasth = $h;
+       if($ln>0)
+       {
+               // Go to next line
+               $this->y += $h;
+               if($ln==1)
+                       $this->x = $this->lMargin;
+       }
+       else
+               $this->x += $w;
+}
+
+function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=false)
+{
+       // Output text with automatic or explicit line breaks
+       if(!isset($this->CurrentFont))
+               $this->Error('No font has been set');
+       $cw = &$this->CurrentFont['cw'];
+       if($w==0)
+               $w = $this->w-$this->rMargin-$this->x;
+       $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
+       $s = str_replace("\r",'',$txt);
+       $nb = strlen($s);
+       if($nb>0 && $s[$nb-1]=="\n")
+               $nb--;
+       $b = 0;
+       if($border)
+       {
+               if($border==1)
+               {
+                       $border = 'LTRB';
+                       $b = 'LRT';
+                       $b2 = 'LR';
+               }
+               else
+               {
+                       $b2 = '';
+                       if(strpos($border,'L')!==false)
+                               $b2 .= 'L';
+                       if(strpos($border,'R')!==false)
+                               $b2 .= 'R';
+                       $b = (strpos($border,'T')!==false) ? $b2.'T' : $b2;
+               }
+       }
+       $sep = -1;
+       $i = 0;
+       $j = 0;
+       $l = 0;
+       $ns = 0;
+       $nl = 1;
+       while($i<$nb)
+       {
+               // Get next character
+               $c = $s[$i];
+               if($c=="\n")
+               {
+                       // Explicit line break
+                       if($this->ws>0)
+                       {
+                               $this->ws = 0;
+                               $this->_out('0 Tw');
+                       }
+                       $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);
+                       $i++;
+                       $sep = -1;
+                       $j = $i;
+                       $l = 0;
+                       $ns = 0;
+                       $nl++;
+                       if($border && $nl==2)
+                               $b = $b2;
+                       continue;
+               }
+               if($c==' ')
+               {
+                       $sep = $i;
+                       $ls = $l;
+                       $ns++;
+               }
+               $l += $cw[$c];
+               if($l>$wmax)
+               {
+                       // Automatic line break
+                       if($sep==-1)
+                       {
+                               if($i==$j)
+                                       $i++;
+                               if($this->ws>0)
+                               {
+                                       $this->ws = 0;
+                                       $this->_out('0 Tw');
+                               }
+                               $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);
+                       }
+                       else
+                       {
+                               if($align=='J')
+                               {
+                                       $this->ws = ($ns>1) ? ($wmax-$ls)/1000*$this->FontSize/($ns-1) : 0;
+                                       $this->_out(sprintf('%.3F Tw',$this->ws*$this->k));
+                               }
+                               $this->Cell($w,$h,substr($s,$j,$sep-$j),$b,2,$align,$fill);
+                               $i = $sep+1;
+                       }
+                       $sep = -1;
+                       $j = $i;
+                       $l = 0;
+                       $ns = 0;
+                       $nl++;
+                       if($border && $nl==2)
+                               $b = $b2;
+               }
+               else
+                       $i++;
+       }
+       // Last chunk
+       if($this->ws>0)
+       {
+               $this->ws = 0;
+               $this->_out('0 Tw');
+       }
+       if($border && strpos($border,'B')!==false)
+               $b .= 'B';
+       $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);
+       $this->x = $this->lMargin;
+}
+
+function Write($h, $txt, $link='')
+{
+       // Output text in flowing mode
+       if(!isset($this->CurrentFont))
+               $this->Error('No font has been set');
+       $cw = &$this->CurrentFont['cw'];
+       $w = $this->w-$this->rMargin-$this->x;
+       $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
+       $s = str_replace("\r",'',$txt);
+       $nb = strlen($s);
+       $sep = -1;
+       $i = 0;
+       $j = 0;
+       $l = 0;
+       $nl = 1;
+       while($i<$nb)
+       {
+               // Get next character
+               $c = $s[$i];
+               if($c=="\n")
+               {
+                       // Explicit line break
+                       $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',false,$link);
+                       $i++;
+                       $sep = -1;
+                       $j = $i;
+                       $l = 0;
+                       if($nl==1)
+                       {
+                               $this->x = $this->lMargin;
+                               $w = $this->w-$this->rMargin-$this->x;
+                               $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
+                       }
+                       $nl++;
+                       continue;
+               }
+               if($c==' ')
+                       $sep = $i;
+               $l += $cw[$c];
+               if($l>$wmax)
+               {
+                       // Automatic line break
+                       if($sep==-1)
+                       {
+                               if($this->x>$this->lMargin)
+                               {
+                                       // Move to next line
+                                       $this->x = $this->lMargin;
+                                       $this->y += $h;
+                                       $w = $this->w-$this->rMargin-$this->x;
+                                       $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
+                                       $i++;
+                                       $nl++;
+                                       continue;
+                               }
+                               if($i==$j)
+                                       $i++;
+                               $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',false,$link);
+                       }
+                       else
+                       {
+                               $this->Cell($w,$h,substr($s,$j,$sep-$j),0,2,'',false,$link);
+                               $i = $sep+1;
+                       }
+                       $sep = -1;
+                       $j = $i;
+                       $l = 0;
+                       if($nl==1)
+                       {
+                               $this->x = $this->lMargin;
+                               $w = $this->w-$this->rMargin-$this->x;
+                               $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
+                       }
+                       $nl++;
+               }
+               else
+                       $i++;
+       }
+       // Last chunk
+       if($i!=$j)
+               $this->Cell($l/1000*$this->FontSize,$h,substr($s,$j),0,0,'',false,$link);
+}
+
+function Ln($h=null)
+{
+       // Line feed; default value is the last cell height
+       $this->x = $this->lMargin;
+       if($h===null)
+               $this->y += $this->lasth;
+       else
+               $this->y += $h;
+}
+
+function Image($file, $x=null, $y=null, $w=0, $h=0, $type='', $link='')
+{
+       // Put an image on the page
+       if($file=='')
+               $this->Error('Image file name is empty');
+       if(!isset($this->images[$file]))
+       {
+               // First use of this image, get info
+               if($type=='')
+               {
+                       $pos = strrpos($file,'.');
+                       if(!$pos)
+                               $this->Error('Image file has no extension and no type was specified: '.$file);
+                       $type = substr($file,$pos+1);
+               }
+               $type = strtolower($type);
+               if($type=='jpeg')
+                       $type = 'jpg';
+               $mtd = '_parse'.$type;
+               if(!method_exists($this,$mtd))
+                       $this->Error('Unsupported image type: '.$type);
+               $info = $this->$mtd($file);
+               $info['i'] = count($this->images)+1;
+               $this->images[$file] = $info;
+       }
+       else
+               $info = $this->images[$file];
+
+       // Automatic width and height calculation if needed
+       if($w==0 && $h==0)
+       {
+               // Put image at 96 dpi
+               $w = -96;
+               $h = -96;
+       }
+       if($w<0)
+               $w = -$info['w']*72/$w/$this->k;
+       if($h<0)
+               $h = -$info['h']*72/$h/$this->k;
+       if($w==0)
+               $w = $h*$info['w']/$info['h'];
+       if($h==0)
+               $h = $w*$info['h']/$info['w'];
+
+       // Flowing mode
+       if($y===null)
+       {
+               if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak())
+               {
+                       // Automatic page break
+                       $x2 = $this->x;
+                       $this->AddPage($this->CurOrientation,$this->CurPageSize,$this->CurRotation);
+                       $this->x = $x2;
+               }
+               $y = $this->y;
+               $this->y += $h;
+       }
+
+       if($x===null)
+               $x = $this->x;
+       $this->_out(sprintf('q %.2F 0 0 %.2F %.2F %.2F cm /I%d Do Q',$w*$this->k,$h*$this->k,$x*$this->k,($this->h-($y+$h))*$this->k,$info['i']));
+       if($link)
+               $this->Link($x,$y,$w,$h,$link);
+}
+
+function GetPageWidth()
+{
+       // Get current page width
+       return $this->w;
+}
+
+function GetPageHeight()
+{
+       // Get current page height
+       return $this->h;
+}
+
+function GetX()
+{
+       // Get x position
+       return $this->x;
+}
+
+function SetX($x)
+{
+       // Set x position
+       if($x>=0)
+               $this->x = $x;
+       else
+               $this->x = $this->w+$x;
+}
+
+function GetY()
+{
+       // Get y position
+       return $this->y;
+}
+
+function SetY($y, $resetX=true)
+{
+       // Set y position and optionally reset x
+       if($y>=0)
+               $this->y = $y;
+       else
+               $this->y = $this->h+$y;
+       if($resetX)
+               $this->x = $this->lMargin;
+}
+
+function SetXY($x, $y)
+{
+       // Set x and y positions
+       $this->SetX($x);
+       $this->SetY($y,false);
+}
+
+function Output($dest='', $name='', $isUTF8=false)
+{
+       // Output PDF to some destination
+       $this->Close();
+       if(strlen($name)==1 && strlen($dest)!=1)
+       {
+               // Fix parameter order
+               $tmp = $dest;
+               $dest = $name;
+               $name = $tmp;
+       }
+       if($dest=='')
+               $dest = 'I';
+       if($name=='')
+               $name = 'doc.pdf';
+       switch(strtoupper($dest))
+       {
+               case 'I':
+                       // Send to standard output
+                       $this->_checkoutput();
+                       if(PHP_SAPI!='cli')
+                       {
+                               // We send to a browser
+                               header('Content-Type: application/pdf');
+                               header('Content-Disposition: inline; '.$this->_httpencode('filename',$name,$isUTF8));
+                               header('Cache-Control: private, max-age=0, must-revalidate');
+                               header('Pragma: public');
+                       }
+                       echo $this->buffer;
+                       break;
+               case 'D':
+                       // Download file
+                       $this->_checkoutput();
+                       header('Content-Type: application/x-download');
+                       header('Content-Disposition: attachment; '.$this->_httpencode('filename',$name,$isUTF8));
+                       header('Cache-Control: private, max-age=0, must-revalidate');
+                       header('Pragma: public');
+                       echo $this->buffer;
+                       break;
+               case 'F':
+                       // Save to local file
+                       if(!file_put_contents($name,$this->buffer))
+                               $this->Error('Unable to create output file: '.$name);
+                       break;
+               case 'S':
+                       // Return as a string
+                       return $this->buffer;
+               default:
+                       $this->Error('Incorrect output destination: '.$dest);
+       }
+       return '';
+}
+
+/*******************************************************************************
+*                              Protected methods                               *
+*******************************************************************************/
+
+protected function _dochecks()
+{
+       // Check mbstring overloading
+       if(ini_get('mbstring.func_overload') & 2)
+               $this->Error('mbstring overloading must be disabled');
+       // Ensure runtime magic quotes are disabled
+       if(get_magic_quotes_runtime())
+               @set_magic_quotes_runtime(0);
+}
+
+protected function _checkoutput()
+{
+       if(PHP_SAPI!='cli')
+       {
+               if(headers_sent($file,$line))
+                       $this->Error("Some data has already been output, can't send PDF file (output started at $file:$line)");
+       }
+       if(ob_get_length())
+       {
+               // The output buffer is not empty
+               if(preg_match('/^(\xEF\xBB\xBF)?\s*$/',ob_get_contents()))
+               {
+                       // It contains only a UTF-8 BOM and/or whitespace, let's clean it
+                       ob_clean();
+               }
+               else
+                       $this->Error("Some data has already been output, can't send PDF file");
+       }
+}
+
+protected function _getpagesize($size)
+{
+       if(is_string($size))
+       {
+               $size = strtolower($size);
+               if(!isset($this->StdPageSizes[$size]))
+                       $this->Error('Unknown page size: '.$size);
+               $a = $this->StdPageSizes[$size];
+               return array($a[0]/$this->k, $a[1]/$this->k);
+       }
+       else
+       {
+               if($size[0]>$size[1])
+                       return array($size[1], $size[0]);
+               else
+                       return $size;
+       }
+}
+
+protected function _beginpage($orientation, $size, $rotation)
+{
+       $this->page++;
+       $this->pages[$this->page] = '';
+       $this->state = 2;
+       $this->x = $this->lMargin;
+       $this->y = $this->tMargin;
+       $this->FontFamily = '';
+       // Check page size and orientation
+       if($orientation=='')
+               $orientation = $this->DefOrientation;
+       else
+               $orientation = strtoupper($orientation[0]);
+       if($size=='')
+               $size = $this->DefPageSize;
+       else
+               $size = $this->_getpagesize($size);
+       if($orientation!=$this->CurOrientation || $size[0]!=$this->CurPageSize[0] || $size[1]!=$this->CurPageSize[1])
+       {
+               // New size or orientation
+               if($orientation=='P')
+               {
+                       $this->w = $size[0];
+                       $this->h = $size[1];
+               }
+               else
+               {
+                       $this->w = $size[1];
+                       $this->h = $size[0];
+               }
+               $this->wPt = $this->w*$this->k;
+               $this->hPt = $this->h*$this->k;
+               $this->PageBreakTrigger = $this->h-$this->bMargin;
+               $this->CurOrientation = $orientation;
+               $this->CurPageSize = $size;
+       }
+       if($orientation!=$this->DefOrientation || $size[0]!=$this->DefPageSize[0] || $size[1]!=$this->DefPageSize[1])
+               $this->PageInfo[$this->page]['size'] = array($this->wPt, $this->hPt);
+       if($rotation!=0)
+       {
+               if($rotation%90!=0)
+                       $this->Error('Incorrect rotation value: '.$rotation);
+               $this->CurRotation = $rotation;
+               $this->PageInfo[$this->page]['rotation'] = $rotation;
+       }
+}
+
+protected function _endpage()
+{
+       $this->state = 1;
+}
+
+protected function _loadfont($font)
+{
+       // Load a font definition file from the font directory
+       if(strpos($font,'/')!==false || strpos($font,"\\")!==false)
+               $this->Error('Incorrect font definition file name: '.$font);
+       include($this->fontpath.$font);
+       if(!isset($name))
+               $this->Error('Could not include font definition file');
+       if(isset($enc))
+               $enc = strtolower($enc);
+       if(!isset($subsetted))
+               $subsetted = false;
+       return get_defined_vars();
+}
+
+protected function _isascii($s)
+{
+       // Test if string is ASCII
+       $nb = strlen($s);
+       for($i=0;$i<$nb;$i++)
+       {
+               if(ord($s[$i])>127)
+                       return false;
+       }
+       return true;
+}
+
+protected function _httpencode($param, $value, $isUTF8)
+{
+       // Encode HTTP header field parameter
+       if($this->_isascii($value))
+               return $param.'="'.$value.'"';
+       if(!$isUTF8)
+               $value = utf8_encode($value);
+       if(strpos($_SERVER['HTTP_USER_AGENT'],'MSIE')!==false)
+               return $param.'="'.rawurlencode($value).'"';
+       else
+               return $param."*=UTF-8''".rawurlencode($value);
+}
+
+protected function _UTF8toUTF16($s)
+{
+       // Convert UTF-8 to UTF-16BE with BOM
+       $res = "\xFE\xFF";
+       $nb = strlen($s);
+       $i = 0;
+       while($i<$nb)
+       {
+               $c1 = ord($s[$i++]);
+               if($c1>=224)
+               {
+                       // 3-byte character
+                       $c2 = ord($s[$i++]);
+                       $c3 = ord($s[$i++]);
+                       $res .= chr((($c1 & 0x0F)<<4) + (($c2 & 0x3C)>>2));
+                       $res .= chr((($c2 & 0x03)<<6) + ($c3 & 0x3F));
+               }
+               elseif($c1>=192)
+               {
+                       // 2-byte character
+                       $c2 = ord($s[$i++]);
+                       $res .= chr(($c1 & 0x1C)>>2);
+                       $res .= chr((($c1 & 0x03)<<6) + ($c2 & 0x3F));
+               }
+               else
+               {
+                       // Single-byte character
+                       $res .= "\0".chr($c1);
+               }
+       }
+       return $res;
+}
+
+protected function _escape($s)
+{
+       // Escape special characters
+       if(strpos($s,'(')!==false || strpos($s,')')!==false || strpos($s,'\\')!==false || strpos($s,"\r")!==false)
+               return str_replace(array('\\','(',')',"\r"), array('\\\\','\\(','\\)','\\r'), $s);
+       else
+               return $s;
+}
+
+protected function _textstring($s)
+{
+       // Format a text string
+       if(!$this->_isascii($s))
+               $s = $this->_UTF8toUTF16($s);
+       return '('.$this->_escape($s).')';
+}
+
+protected function _dounderline($x, $y, $txt)
+{
+       // Underline text
+       $up = $this->CurrentFont['up'];
+       $ut = $this->CurrentFont['ut'];
+       $w = $this->GetStringWidth($txt)+$this->ws*substr_count($txt,' ');
+       return sprintf('%.2F %.2F %.2F %.2F re f',$x*$this->k,($this->h-($y-$up/1000*$this->FontSize))*$this->k,$w*$this->k,-$ut/1000*$this->FontSizePt);
+}
+
+protected function _parsejpg($file)
+{
+       // Extract info from a JPEG file
+       $a = getimagesize($file);
+       if(!$a)
+               $this->Error('Missing or incorrect image file: '.$file);
+       if($a[2]!=2)
+               $this->Error('Not a JPEG file: '.$file);
+       if(!isset($a['channels']) || $a['channels']==3)
+               $colspace = 'DeviceRGB';
+       elseif($a['channels']==4)
+               $colspace = 'DeviceCMYK';
+       else
+               $colspace = 'DeviceGray';
+       $bpc = isset($a['bits']) ? $a['bits'] : 8;
+       $data = file_get_contents($file);
+       return array('w'=>$a[0], 'h'=>$a[1], 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'DCTDecode', 'data'=>$data);
+}
+
+protected function _parsepng($file)
+{
+       // Extract info from a PNG file
+       $f = fopen($file,'rb');
+       if(!$f)
+               $this->Error('Can\'t open image file: '.$file);
+       $info = $this->_parsepngstream($f,$file);
+       fclose($f);
+       return $info;
+}
+
+protected function _parsepngstream($f, $file)
+{
+       // Check signature
+       if($this->_readstream($f,8)!=chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10))
+               $this->Error('Not a PNG file: '.$file);
+
+       // Read header chunk
+       $this->_readstream($f,4);
+       if($this->_readstream($f,4)!='IHDR')
+               $this->Error('Incorrect PNG file: '.$file);
+       $w = $this->_readint($f);
+       $h = $this->_readint($f);
+       $bpc = ord($this->_readstream($f,1));
+       if($bpc>8)
+               $this->Error('16-bit depth not supported: '.$file);
+       $ct = ord($this->_readstream($f,1));
+       if($ct==0 || $ct==4)
+               $colspace = 'DeviceGray';
+       elseif($ct==2 || $ct==6)
+               $colspace = 'DeviceRGB';
+       elseif($ct==3)
+               $colspace = 'Indexed';
+       else
+               $this->Error('Unknown color type: '.$file);
+       if(ord($this->_readstream($f,1))!=0)
+               $this->Error('Unknown compression method: '.$file);
+       if(ord($this->_readstream($f,1))!=0)
+               $this->Error('Unknown filter method: '.$file);
+       if(ord($this->_readstream($f,1))!=0)
+               $this->Error('Interlacing not supported: '.$file);
+       $this->_readstream($f,4);
+       $dp = '/Predictor 15 /Colors '.($colspace=='DeviceRGB' ? 3 : 1).' /BitsPerComponent '.$bpc.' /Columns '.$w;
+
+       // Scan chunks looking for palette, transparency and image data
+       $pal = '';
+       $trns = '';
+       $data = '';
+       do
+       {
+               $n = $this->_readint($f);
+               $type = $this->_readstream($f,4);
+               if($type=='PLTE')
+               {
+                       // Read palette
+                       $pal = $this->_readstream($f,$n);
+                       $this->_readstream($f,4);
+               }
+               elseif($type=='tRNS')
+               {
+                       // Read transparency info
+                       $t = $this->_readstream($f,$n);
+                       if($ct==0)
+                               $trns = array(ord(substr($t,1,1)));
+                       elseif($ct==2)
+                               $trns = array(ord(substr($t,1,1)), ord(substr($t,3,1)), ord(substr($t,5,1)));
+                       else
+                       {
+                               $pos = strpos($t,chr(0));
+                               if($pos!==false)
+                                       $trns = array($pos);
+                       }
+                       $this->_readstream($f,4);
+               }
+               elseif($type=='IDAT')
+               {
+                       // Read image data block
+                       $data .= $this->_readstream($f,$n);
+                       $this->_readstream($f,4);
+               }
+               elseif($type=='IEND')
+                       break;
+               else
+                       $this->_readstream($f,$n+4);
+       }
+       while($n);
+
+       if($colspace=='Indexed' && empty($pal))
+               $this->Error('Missing palette in '.$file);
+       $info = array('w'=>$w, 'h'=>$h, 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'FlateDecode', 'dp'=>$dp, 'pal'=>$pal, 'trns'=>$trns);
+       if($ct>=4)
+       {
+               // Extract alpha channel
+               if(!function_exists('gzuncompress'))
+                       $this->Error('Zlib not available, can\'t handle alpha channel: '.$file);
+               $data = gzuncompress($data);
+               $color = '';
+               $alpha = '';
+               if($ct==4)
+               {
+                       // Gray image
+                       $len = 2*$w;
+                       for($i=0;$i<$h;$i++)
+                       {
+                               $pos = (1+$len)*$i;
+                               $color .= $data[$pos];
+                               $alpha .= $data[$pos];
+                               $line = substr($data,$pos+1,$len);
+                               $color .= preg_replace('/(.)./s','$1',$line);
+                               $alpha .= preg_replace('/.(.)/s','$1',$line);
+                       }
+               }
+               else
+               {
+                       // RGB image
+                       $len = 4*$w;
+                       for($i=0;$i<$h;$i++)
+                       {
+                               $pos = (1+$len)*$i;
+                               $color .= $data[$pos];
+                               $alpha .= $data[$pos];
+                               $line = substr($data,$pos+1,$len);
+                               $color .= preg_replace('/(.{3})./s','$1',$line);
+                               $alpha .= preg_replace('/.{3}(.)/s','$1',$line);
+                       }
+               }
+               unset($data);
+               $data = gzcompress($color);
+               $info['smask'] = gzcompress($alpha);
+               $this->WithAlpha = true;
+               if($this->PDFVersion<'1.4')
+                       $this->PDFVersion = '1.4';
+       }
+       $info['data'] = $data;
+       return $info;
+}
+
+protected function _readstream($f, $n)
+{
+       // Read n bytes from stream
+       $res = '';
+       while($n>0 && !feof($f))
+       {
+               $s = fread($f,$n);
+               if($s===false)
+                       $this->Error('Error while reading stream');
+               $n -= strlen($s);
+               $res .= $s;
+       }
+       if($n>0)
+               $this->Error('Unexpected end of stream');
+       return $res;
+}
+
+protected function _readint($f)
+{
+       // Read a 4-byte integer from stream
+       $a = unpack('Ni',$this->_readstream($f,4));
+       return $a['i'];
+}
+
+protected function _parsegif($file)
+{
+       // Extract info from a GIF file (via PNG conversion)
+       if(!function_exists('imagepng'))
+               $this->Error('GD extension is required for GIF support');
+       if(!function_exists('imagecreatefromgif'))
+               $this->Error('GD has no GIF read support');
+       $im = imagecreatefromgif($file);
+       if(!$im)
+               $this->Error('Missing or incorrect image file: '.$file);
+       imageinterlace($im,0);
+       ob_start();
+       imagepng($im);
+       $data = ob_get_clean();
+       imagedestroy($im);
+       $f = fopen('php://temp','rb+');
+       if(!$f)
+               $this->Error('Unable to create memory stream');
+       fwrite($f,$data);
+       rewind($f);
+       $info = $this->_parsepngstream($f,$file);
+       fclose($f);
+       return $info;
+}
+
+protected function _out($s)
+{
+       // Add a line to the document
+       if($this->state==2)
+               $this->pages[$this->page] .= $s."\n";
+       elseif($this->state==1)
+               $this->_put($s);
+       elseif($this->state==0)
+               $this->Error('No page has been added yet');
+       elseif($this->state==3)
+               $this->Error('The document is closed');
+}
+
+protected function _put($s)
+{
+       $this->buffer .= $s."\n";
+}
+
+protected function _getoffset()
+{
+       return strlen($this->buffer);
+}
+
+protected function _newobj($n=null)
+{
+       // Begin a new object
+       if($n===null)
+               $n = ++$this->n;
+       $this->offsets[$n] = $this->_getoffset();
+       $this->_put($n.' 0 obj');
+}
+
+protected function _putstream($data)
+{
+       $this->_put('stream');
+       $this->_put($data);
+       $this->_put('endstream');
+}
+
+protected function _putstreamobject($data)
+{
+       if($this->compress)
+       {
+               $entries = '/Filter /FlateDecode ';
+               $data = gzcompress($data);
+       }
+       else
+               $entries = '';
+       $entries .= '/Length '.strlen($data);
+       $this->_newobj();
+       $this->_put('<<'.$entries.'>>');
+       $this->_putstream($data);
+       $this->_put('endobj');
+}
+
+protected function _putpage($n)
+{
+       $this->_newobj();
+       $this->_put('<</Type /Page');
+       $this->_put('/Parent 1 0 R');
+       if(isset($this->PageInfo[$n]['size']))
+               $this->_put(sprintf('/MediaBox [0 0 %.2F %.2F]',$this->PageInfo[$n]['size'][0],$this->PageInfo[$n]['size'][1]));
+       if(isset($this->PageInfo[$n]['rotation']))
+               $this->_put('/Rotate '.$this->PageInfo[$n]['rotation']);
+       $this->_put('/Resources 2 0 R');
+       if(isset($this->PageLinks[$n]))
+       {
+               // Links
+               $annots = '/Annots [';
+               foreach($this->PageLinks[$n] as $pl)
+               {
+                       $rect = sprintf('%.2F %.2F %.2F %.2F',$pl[0],$pl[1],$pl[0]+$pl[2],$pl[1]-$pl[3]);
+                       $annots .= '<</Type /Annot /Subtype /Link /Rect ['.$rect.'] /Border [0 0 0] ';
+                       if(is_string($pl[4]))
+                               $annots .= '/A <</S /URI /URI '.$this->_textstring($pl[4]).'>>>>';
+                       else
+                       {
+                               $l = $this->links[$pl[4]];
+                               if(isset($this->PageInfo[$l[0]]['size']))
+                                       $h = $this->PageInfo[$l[0]]['size'][1];
+                               else
+                                       $h = ($this->DefOrientation=='P') ? $this->DefPageSize[1]*$this->k : $this->DefPageSize[0]*$this->k;
+                               $annots .= sprintf('/Dest [%d 0 R /XYZ 0 %.2F null]>>',$this->PageInfo[$l[0]]['n'],$h-$l[1]*$this->k);
+                       }
+               }
+               $this->_put($annots.']');
+       }
+       if($this->WithAlpha)
+               $this->_put('/Group <</Type /Group /S /Transparency /CS /DeviceRGB>>');
+       $this->_put('/Contents '.($this->n+1).' 0 R>>');
+       $this->_put('endobj');
+       // Page content
+       if(!empty($this->AliasNbPages))
+               $this->pages[$n] = str_replace($this->AliasNbPages,$this->page,$this->pages[$n]);
+       $this->_putstreamobject($this->pages[$n]);
+}
+
+protected function _putpages()
+{
+       $nb = $this->page;
+       for($n=1;$n<=$nb;$n++)
+               $this->PageInfo[$n]['n'] = $this->n+1+2*($n-1);
+       for($n=1;$n<=$nb;$n++)
+               $this->_putpage($n);
+       // Pages root
+       $this->_newobj(1);
+       $this->_put('<</Type /Pages');
+       $kids = '/Kids [';
+       for($n=1;$n<=$nb;$n++)
+               $kids .= $this->PageInfo[$n]['n'].' 0 R ';
+       $this->_put($kids.']');
+       $this->_put('/Count '.$nb);
+       if($this->DefOrientation=='P')
+       {
+               $w = $this->DefPageSize[0];
+               $h = $this->DefPageSize[1];
+       }
+       else
+       {
+               $w = $this->DefPageSize[1];
+               $h = $this->DefPageSize[0];
+       }
+       $this->_put(sprintf('/MediaBox [0 0 %.2F %.2F]',$w*$this->k,$h*$this->k));
+       $this->_put('>>');
+       $this->_put('endobj');
+}
+
+protected function _putfonts()
+{
+       foreach($this->FontFiles as $file=>$info)
+       {
+               // Font file embedding
+               $this->_newobj();
+               $this->FontFiles[$file]['n'] = $this->n;
+               $font = file_get_contents($this->fontpath.$file,true);
+               if(!$font)
+                       $this->Error('Font file not found: '.$file);
+               $compressed = (substr($file,-2)=='.z');
+               if(!$compressed && isset($info['length2']))
+                       $font = substr($font,6,$info['length1']).substr($font,6+$info['length1']+6,$info['length2']);
+               $this->_put('<</Length '.strlen($font));
+               if($compressed)
+                       $this->_put('/Filter /FlateDecode');
+               $this->_put('/Length1 '.$info['length1']);
+               if(isset($info['length2']))
+                       $this->_put('/Length2 '.$info['length2'].' /Length3 0');
+               $this->_put('>>');
+               $this->_putstream($font);
+               $this->_put('endobj');
+       }
+       foreach($this->fonts as $k=>$font)
+       {
+               // Encoding
+               if(isset($font['diff']))
+               {
+                       if(!isset($this->encodings[$font['enc']]))
+                       {
+                               $this->_newobj();
+                               $this->_put('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['.$font['diff'].']>>');
+                               $this->_put('endobj');
+                               $this->encodings[$font['enc']] = $this->n;
+                       }
+               }
+               // ToUnicode CMap
+               if(isset($font['uv']))
+               {
+                       if(isset($font['enc']))
+                               $cmapkey = $font['enc'];
+                       else
+                               $cmapkey = $font['name'];
+                       if(!isset($this->cmaps[$cmapkey]))
+                       {
+                               $cmap = $this->_tounicodecmap($font['uv']);
+                               $this->_putstreamobject($cmap);
+                               $this->cmaps[$cmapkey] = $this->n;
+                       }
+               }
+               // Font object
+               $this->fonts[$k]['n'] = $this->n+1;
+               $type = $font['type'];
+               $name = $font['name'];
+               if($font['subsetted'])
+                       $name = 'AAAAAA+'.$name;
+               if($type=='Core')
+               {
+                       // Core font
+                       $this->_newobj();
+                       $this->_put('<</Type /Font');
+                       $this->_put('/BaseFont /'.$name);
+                       $this->_put('/Subtype /Type1');
+                       if($name!='Symbol' && $name!='ZapfDingbats')
+                               $this->_put('/Encoding /WinAnsiEncoding');
+                       if(isset($font['uv']))
+                               $this->_put('/ToUnicode '.$this->cmaps[$cmapkey].' 0 R');
+                       $this->_put('>>');
+                       $this->_put('endobj');
+               }
+               elseif($type=='Type1' || $type=='TrueType')
+               {
+                       // Additional Type1 or TrueType/OpenType font
+                       $this->_newobj();
+                       $this->_put('<</Type /Font');
+                       $this->_put('/BaseFont /'.$name);
+                       $this->_put('/Subtype /'.$type);
+                       $this->_put('/FirstChar 32 /LastChar 255');
+                       $this->_put('/Widths '.($this->n+1).' 0 R');
+                       $this->_put('/FontDescriptor '.($this->n+2).' 0 R');
+                       if(isset($font['diff']))
+                               $this->_put('/Encoding '.$this->encodings[$font['enc']].' 0 R');
+                       else
+                               $this->_put('/Encoding /WinAnsiEncoding');
+                       if(isset($font['uv']))
+                               $this->_put('/ToUnicode '.$this->cmaps[$cmapkey].' 0 R');
+                       $this->_put('>>');
+                       $this->_put('endobj');
+                       // Widths
+                       $this->_newobj();
+                       $cw = &$font['cw'];
+                       $s = '[';
+                       for($i=32;$i<=255;$i++)
+                               $s .= $cw[chr($i)].' ';
+                       $this->_put($s.']');
+                       $this->_put('endobj');
+                       // Descriptor
+                       $this->_newobj();
+                       $s = '<</Type /FontDescriptor /FontName /'.$name;
+                       foreach($font['desc'] as $k=>$v)
+                               $s .= ' /'.$k.' '.$v;
+                       if(!empty($font['file']))
+                               $s .= ' /FontFile'.($type=='Type1' ? '' : '2').' '.$this->FontFiles[$font['file']]['n'].' 0 R';
+                       $this->_put($s.'>>');
+                       $this->_put('endobj');
+               }
+               else
+               {
+                       // Allow for additional types
+                       $mtd = '_put'.strtolower($type);
+                       if(!method_exists($this,$mtd))
+                               $this->Error('Unsupported font type: '.$type);
+                       $this->$mtd($font);
+               }
+       }
+}
+
+protected function _tounicodecmap($uv)
+{
+       $ranges = '';
+       $nbr = 0;
+       $chars = '';
+       $nbc = 0;
+       foreach($uv as $c=>$v)
+       {
+               if(is_array($v))
+               {
+                       $ranges .= sprintf("<%02X> <%02X> <%04X>\n",$c,$c+$v[1]-1,$v[0]);
+                       $nbr++;
+               }
+               else
+               {
+                       $chars .= sprintf("<%02X> <%04X>\n",$c,$v);
+                       $nbc++;
+               }
+       }
+       $s = "/CIDInit /ProcSet findresource begin\n";
+       $s .= "12 dict begin\n";
+       $s .= "begincmap\n";
+       $s .= "/CIDSystemInfo\n";
+       $s .= "<</Registry (Adobe)\n";
+       $s .= "/Ordering (UCS)\n";
+       $s .= "/Supplement 0\n";
+       $s .= ">> def\n";
+       $s .= "/CMapName /Adobe-Identity-UCS def\n";
+       $s .= "/CMapType 2 def\n";
+       $s .= "1 begincodespacerange\n";
+       $s .= "<00> <FF>\n";
+       $s .= "endcodespacerange\n";
+       if($nbr>0)
+       {
+               $s .= "$nbr beginbfrange\n";
+               $s .= $ranges;
+               $s .= "endbfrange\n";
+       }
+       if($nbc>0)
+       {
+               $s .= "$nbc beginbfchar\n";
+               $s .= $chars;
+               $s .= "endbfchar\n";
+       }
+       $s .= "endcmap\n";
+       $s .= "CMapName currentdict /CMap defineresource pop\n";
+       $s .= "end\n";
+       $s .= "end";
+       return $s;
+}
+
+protected function _putimages()
+{
+       foreach(array_keys($this->images) as $file)
+       {
+               $this->_putimage($this->images[$file]);
+               unset($this->images[$file]['data']);
+               unset($this->images[$file]['smask']);
+       }
+}
+
+protected function _putimage(&$info)
+{
+       $this->_newobj();
+       $info['n'] = $this->n;
+       $this->_put('<</Type /XObject');
+       $this->_put('/Subtype /Image');
+       $this->_put('/Width '.$info['w']);
+       $this->_put('/Height '.$info['h']);
+       if($info['cs']=='Indexed')
+               $this->_put('/ColorSpace [/Indexed /DeviceRGB '.(strlen($info['pal'])/3-1).' '.($this->n+1).' 0 R]');
+       else
+       {
+               $this->_put('/ColorSpace /'.$info['cs']);
+               if($info['cs']=='DeviceCMYK')
+                       $this->_put('/Decode [1 0 1 0 1 0 1 0]');
+       }
+       $this->_put('/BitsPerComponent '.$info['bpc']);
+       if(isset($info['f']))
+               $this->_put('/Filter /'.$info['f']);
+       if(isset($info['dp']))
+               $this->_put('/DecodeParms <<'.$info['dp'].'>>');
+       if(isset($info['trns']) && is_array($info['trns']))
+       {
+               $trns = '';
+               for($i=0;$i<count($info['trns']);$i++)
+                       $trns .= $info['trns'][$i].' '.$info['trns'][$i].' ';
+               $this->_put('/Mask ['.$trns.']');
+       }
+       if(isset($info['smask']))
+               $this->_put('/SMask '.($this->n+1).' 0 R');
+       $this->_put('/Length '.strlen($info['data']).'>>');
+       $this->_putstream($info['data']);
+       $this->_put('endobj');
+       // Soft mask
+       if(isset($info['smask']))
+       {
+               $dp = '/Predictor 15 /Colors 1 /BitsPerComponent 8 /Columns '.$info['w'];
+               $smask = array('w'=>$info['w'], 'h'=>$info['h'], 'cs'=>'DeviceGray', 'bpc'=>8, 'f'=>$info['f'], 'dp'=>$dp, 'data'=>$info['smask']);
+               $this->_putimage($smask);
+       }
+       // Palette
+       if($info['cs']=='Indexed')
+               $this->_putstreamobject($info['pal']);
+}
+
+protected function _putxobjectdict()
+{
+       foreach($this->images as $image)
+               $this->_put('/I'.$image['i'].' '.$image['n'].' 0 R');
+}
+
+protected function _putresourcedict()
+{
+       $this->_put('/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
+       $this->_put('/Font <<');
+       foreach($this->fonts as $font)
+               $this->_put('/F'.$font['i'].' '.$font['n'].' 0 R');
+       $this->_put('>>');
+       $this->_put('/XObject <<');
+       $this->_putxobjectdict();
+       $this->_put('>>');
+}
+
+protected function _putresources()
+{
+       $this->_putfonts();
+       $this->_putimages();
+       // Resource dictionary
+       $this->_newobj(2);
+       $this->_put('<<');
+       $this->_putresourcedict();
+       $this->_put('>>');
+       $this->_put('endobj');
+}
+
+protected function _putinfo()
+{
+       $this->metadata['Producer'] = 'FPDF '.FPDF_VERSION;
+       $this->metadata['CreationDate'] = 'D:'.@date('YmdHis');
+       foreach($this->metadata as $key=>$value)
+               $this->_put('/'.$key.' '.$this->_textstring($value));
+}
+
+protected function _putcatalog()
+{
+       $n = $this->PageInfo[1]['n'];
+       $this->_put('/Type /Catalog');
+       $this->_put('/Pages 1 0 R');
+       if($this->ZoomMode=='fullpage')
+               $this->_put('/OpenAction ['.$n.' 0 R /Fit]');
+       elseif($this->ZoomMode=='fullwidth')
+               $this->_put('/OpenAction ['.$n.' 0 R /FitH null]');
+       elseif($this->ZoomMode=='real')
+               $this->_put('/OpenAction ['.$n.' 0 R /XYZ null null 1]');
+       elseif(!is_string($this->ZoomMode))
+               $this->_put('/OpenAction ['.$n.' 0 R /XYZ null null '.sprintf('%.2F',$this->ZoomMode/100).']');
+       if($this->LayoutMode=='single')
+               $this->_put('/PageLayout /SinglePage');
+       elseif($this->LayoutMode=='continuous')
+               $this->_put('/PageLayout /OneColumn');
+       elseif($this->LayoutMode=='two')
+               $this->_put('/PageLayout /TwoColumnLeft');
+}
+
+protected function _putheader()
+{
+       $this->_put('%PDF-'.$this->PDFVersion);
+}
+
+protected function _puttrailer()
+{
+       $this->_put('/Size '.($this->n+1));
+       $this->_put('/Root '.$this->n.' 0 R');
+       $this->_put('/Info '.($this->n-1).' 0 R');
+}
+
+protected function _enddoc()
+{
+       $this->_putheader();
+       $this->_putpages();
+       $this->_putresources();
+       // Info
+       $this->_newobj();
+       $this->_put('<<');
+       $this->_putinfo();
+       $this->_put('>>');
+       $this->_put('endobj');
+       // Catalog
+       $this->_newobj();
+       $this->_put('<<');
+       $this->_putcatalog();
+       $this->_put('>>');
+       $this->_put('endobj');
+       // Cross-ref
+       $offset = $this->_getoffset();
+       $this->_put('xref');
+       $this->_put('0 '.($this->n+1));
+       $this->_put('0000000000 65535 f ');
+       for($i=1;$i<=$this->n;$i++)
+               $this->_put(sprintf('%010d 00000 n ',$this->offsets[$i]));
+       // Trailer
+       $this->_put('trailer');
+       $this->_put('<<');
+       $this->_puttrailer();
+       $this->_put('>>');
+       $this->_put('startxref');
+       $this->_put($offset);
+       $this->_put('%%EOF');
+       $this->state = 3;
+}
+}
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/install.txt b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/install.txt
new file mode 100755 (executable)
index 0000000..62d25e6
--- /dev/null
@@ -0,0 +1,15 @@
+The FPDF library is made up of the following elements:
+
+- the main file, fpdf.php, which contains the class
+- the font definition files located in the font directory
+
+The font definition files are necessary as soon as you want to output some text in a document.
+If they are not accessible, the SetFont() method will produce the following error:
+
+FPDF error: Could not include font definition file
+
+
+Remarks:
+
+- Only the files corresponding to the fonts actually used are necessary
+- The tutorials provided in this package are ready to be executed
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/license.txt b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/license.txt
new file mode 100755 (executable)
index 0000000..6107ee4
--- /dev/null
@@ -0,0 +1,6 @@
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software to use, copy, modify, distribute, sublicense, and/or sell
+copies of the software, and to permit persons to whom the software is furnished
+to do so.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED.
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1250.map b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1250.map
new file mode 100755 (executable)
index 0000000..ec110af
--- /dev/null
@@ -0,0 +1,251 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!89 U+2030 perthousand
+!8A U+0160 Scaron
+!8B U+2039 guilsinglleft
+!8C U+015A Sacute
+!8D U+0164 Tcaron
+!8E U+017D Zcaron
+!8F U+0179 Zacute
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!99 U+2122 trademark
+!9A U+0161 scaron
+!9B U+203A guilsinglright
+!9C U+015B sacute
+!9D U+0165 tcaron
+!9E U+017E zcaron
+!9F U+017A zacute
+!A0 U+00A0 space
+!A1 U+02C7 caron
+!A2 U+02D8 breve
+!A3 U+0141 Lslash
+!A4 U+00A4 currency
+!A5 U+0104 Aogonek
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+015E Scedilla
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+017B Zdotaccent
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+02DB ogonek
+!B3 U+0142 lslash
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00B8 cedilla
+!B9 U+0105 aogonek
+!BA U+015F scedilla
+!BB U+00BB guillemotright
+!BC U+013D Lcaron
+!BD U+02DD hungarumlaut
+!BE U+013E lcaron
+!BF U+017C zdotaccent
+!C0 U+0154 Racute
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+0102 Abreve
+!C4 U+00C4 Adieresis
+!C5 U+0139 Lacute
+!C6 U+0106 Cacute
+!C7 U+00C7 Ccedilla
+!C8 U+010C Ccaron
+!C9 U+00C9 Eacute
+!CA U+0118 Eogonek
+!CB U+00CB Edieresis
+!CC U+011A Ecaron
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+010E Dcaron
+!D0 U+0110 Dcroat
+!D1 U+0143 Nacute
+!D2 U+0147 Ncaron
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+0150 Ohungarumlaut
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+0158 Rcaron
+!D9 U+016E Uring
+!DA U+00DA Uacute
+!DB U+0170 Uhungarumlaut
+!DC U+00DC Udieresis
+!DD U+00DD Yacute
+!DE U+0162 Tcommaaccent
+!DF U+00DF germandbls
+!E0 U+0155 racute
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+0103 abreve
+!E4 U+00E4 adieresis
+!E5 U+013A lacute
+!E6 U+0107 cacute
+!E7 U+00E7 ccedilla
+!E8 U+010D ccaron
+!E9 U+00E9 eacute
+!EA U+0119 eogonek
+!EB U+00EB edieresis
+!EC U+011B ecaron
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+010F dcaron
+!F0 U+0111 dcroat
+!F1 U+0144 nacute
+!F2 U+0148 ncaron
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+0151 ohungarumlaut
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+0159 rcaron
+!F9 U+016F uring
+!FA U+00FA uacute
+!FB U+0171 uhungarumlaut
+!FC U+00FC udieresis
+!FD U+00FD yacute
+!FE U+0163 tcommaaccent
+!FF U+02D9 dotaccent
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1251.map b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1251.map
new file mode 100755 (executable)
index 0000000..de6a198
--- /dev/null
@@ -0,0 +1,255 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0402 afii10051
+!81 U+0403 afii10052
+!82 U+201A quotesinglbase
+!83 U+0453 afii10100
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!88 U+20AC Euro
+!89 U+2030 perthousand
+!8A U+0409 afii10058
+!8B U+2039 guilsinglleft
+!8C U+040A afii10059
+!8D U+040C afii10061
+!8E U+040B afii10060
+!8F U+040F afii10145
+!90 U+0452 afii10099
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!99 U+2122 trademark
+!9A U+0459 afii10106
+!9B U+203A guilsinglright
+!9C U+045A afii10107
+!9D U+045C afii10109
+!9E U+045B afii10108
+!9F U+045F afii10193
+!A0 U+00A0 space
+!A1 U+040E afii10062
+!A2 U+045E afii10110
+!A3 U+0408 afii10057
+!A4 U+00A4 currency
+!A5 U+0490 afii10050
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+0401 afii10023
+!A9 U+00A9 copyright
+!AA U+0404 afii10053
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+0407 afii10056
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+0406 afii10055
+!B3 U+0456 afii10103
+!B4 U+0491 afii10098
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+0451 afii10071
+!B9 U+2116 afii61352
+!BA U+0454 afii10101
+!BB U+00BB guillemotright
+!BC U+0458 afii10105
+!BD U+0405 afii10054
+!BE U+0455 afii10102
+!BF U+0457 afii10104
+!C0 U+0410 afii10017
+!C1 U+0411 afii10018
+!C2 U+0412 afii10019
+!C3 U+0413 afii10020
+!C4 U+0414 afii10021
+!C5 U+0415 afii10022
+!C6 U+0416 afii10024
+!C7 U+0417 afii10025
+!C8 U+0418 afii10026
+!C9 U+0419 afii10027
+!CA U+041A afii10028
+!CB U+041B afii10029
+!CC U+041C afii10030
+!CD U+041D afii10031
+!CE U+041E afii10032
+!CF U+041F afii10033
+!D0 U+0420 afii10034
+!D1 U+0421 afii10035
+!D2 U+0422 afii10036
+!D3 U+0423 afii10037
+!D4 U+0424 afii10038
+!D5 U+0425 afii10039
+!D6 U+0426 afii10040
+!D7 U+0427 afii10041
+!D8 U+0428 afii10042
+!D9 U+0429 afii10043
+!DA U+042A afii10044
+!DB U+042B afii10045
+!DC U+042C afii10046
+!DD U+042D afii10047
+!DE U+042E afii10048
+!DF U+042F afii10049
+!E0 U+0430 afii10065
+!E1 U+0431 afii10066
+!E2 U+0432 afii10067
+!E3 U+0433 afii10068
+!E4 U+0434 afii10069
+!E5 U+0435 afii10070
+!E6 U+0436 afii10072
+!E7 U+0437 afii10073
+!E8 U+0438 afii10074
+!E9 U+0439 afii10075
+!EA U+043A afii10076
+!EB U+043B afii10077
+!EC U+043C afii10078
+!ED U+043D afii10079
+!EE U+043E afii10080
+!EF U+043F afii10081
+!F0 U+0440 afii10082
+!F1 U+0441 afii10083
+!F2 U+0442 afii10084
+!F3 U+0443 afii10085
+!F4 U+0444 afii10086
+!F5 U+0445 afii10087
+!F6 U+0446 afii10088
+!F7 U+0447 afii10089
+!F8 U+0448 afii10090
+!F9 U+0449 afii10091
+!FA U+044A afii10092
+!FB U+044B afii10093
+!FC U+044C afii10094
+!FD U+044D afii10095
+!FE U+044E afii10096
+!FF U+044F afii10097
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1252.map b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1252.map
new file mode 100755 (executable)
index 0000000..dd490e5
--- /dev/null
@@ -0,0 +1,251 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!83 U+0192 florin
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!88 U+02C6 circumflex
+!89 U+2030 perthousand
+!8A U+0160 Scaron
+!8B U+2039 guilsinglleft
+!8C U+0152 OE
+!8E U+017D Zcaron
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!98 U+02DC tilde
+!99 U+2122 trademark
+!9A U+0161 scaron
+!9B U+203A guilsinglright
+!9C U+0153 oe
+!9E U+017E zcaron
+!9F U+0178 Ydieresis
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+00AA ordfeminine
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00B8 cedilla
+!B9 U+00B9 onesuperior
+!BA U+00BA ordmasculine
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00BF questiondown
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+00C3 Atilde
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+00CC Igrave
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+00D0 Eth
+!D1 U+00D1 Ntilde
+!D2 U+00D2 Ograve
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+00DD Yacute
+!DE U+00DE Thorn
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+00E3 atilde
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+00EC igrave
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+00F0 eth
+!F1 U+00F1 ntilde
+!F2 U+00F2 ograve
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+00FD yacute
+!FE U+00FE thorn
+!FF U+00FF ydieresis
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1253.map b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1253.map
new file mode 100755 (executable)
index 0000000..4bd826f
--- /dev/null
@@ -0,0 +1,239 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!83 U+0192 florin
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!89 U+2030 perthousand
+!8B U+2039 guilsinglleft
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!99 U+2122 trademark
+!9B U+203A guilsinglright
+!A0 U+00A0 space
+!A1 U+0385 dieresistonos
+!A2 U+0386 Alphatonos
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+2015 afii00208
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+0384 tonos
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+0388 Epsilontonos
+!B9 U+0389 Etatonos
+!BA U+038A Iotatonos
+!BB U+00BB guillemotright
+!BC U+038C Omicrontonos
+!BD U+00BD onehalf
+!BE U+038E Upsilontonos
+!BF U+038F Omegatonos
+!C0 U+0390 iotadieresistonos
+!C1 U+0391 Alpha
+!C2 U+0392 Beta
+!C3 U+0393 Gamma
+!C4 U+0394 Delta
+!C5 U+0395 Epsilon
+!C6 U+0396 Zeta
+!C7 U+0397 Eta
+!C8 U+0398 Theta
+!C9 U+0399 Iota
+!CA U+039A Kappa
+!CB U+039B Lambda
+!CC U+039C Mu
+!CD U+039D Nu
+!CE U+039E Xi
+!CF U+039F Omicron
+!D0 U+03A0 Pi
+!D1 U+03A1 Rho
+!D3 U+03A3 Sigma
+!D4 U+03A4 Tau
+!D5 U+03A5 Upsilon
+!D6 U+03A6 Phi
+!D7 U+03A7 Chi
+!D8 U+03A8 Psi
+!D9 U+03A9 Omega
+!DA U+03AA Iotadieresis
+!DB U+03AB Upsilondieresis
+!DC U+03AC alphatonos
+!DD U+03AD epsilontonos
+!DE U+03AE etatonos
+!DF U+03AF iotatonos
+!E0 U+03B0 upsilondieresistonos
+!E1 U+03B1 alpha
+!E2 U+03B2 beta
+!E3 U+03B3 gamma
+!E4 U+03B4 delta
+!E5 U+03B5 epsilon
+!E6 U+03B6 zeta
+!E7 U+03B7 eta
+!E8 U+03B8 theta
+!E9 U+03B9 iota
+!EA U+03BA kappa
+!EB U+03BB lambda
+!EC U+03BC mu
+!ED U+03BD nu
+!EE U+03BE xi
+!EF U+03BF omicron
+!F0 U+03C0 pi
+!F1 U+03C1 rho
+!F2 U+03C2 sigma1
+!F3 U+03C3 sigma
+!F4 U+03C4 tau
+!F5 U+03C5 upsilon
+!F6 U+03C6 phi
+!F7 U+03C7 chi
+!F8 U+03C8 psi
+!F9 U+03C9 omega
+!FA U+03CA iotadieresis
+!FB U+03CB upsilondieresis
+!FC U+03CC omicrontonos
+!FD U+03CD upsilontonos
+!FE U+03CE omegatonos
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1254.map b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1254.map
new file mode 100755 (executable)
index 0000000..829473b
--- /dev/null
@@ -0,0 +1,249 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!83 U+0192 florin
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!88 U+02C6 circumflex
+!89 U+2030 perthousand
+!8A U+0160 Scaron
+!8B U+2039 guilsinglleft
+!8C U+0152 OE
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!98 U+02DC tilde
+!99 U+2122 trademark
+!9A U+0161 scaron
+!9B U+203A guilsinglright
+!9C U+0153 oe
+!9F U+0178 Ydieresis
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+00AA ordfeminine
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00B8 cedilla
+!B9 U+00B9 onesuperior
+!BA U+00BA ordmasculine
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00BF questiondown
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+00C3 Atilde
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+00CC Igrave
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+011E Gbreve
+!D1 U+00D1 Ntilde
+!D2 U+00D2 Ograve
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+0130 Idotaccent
+!DE U+015E Scedilla
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+00E3 atilde
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+00EC igrave
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+011F gbreve
+!F1 U+00F1 ntilde
+!F2 U+00F2 ograve
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+0131 dotlessi
+!FE U+015F scedilla
+!FF U+00FF ydieresis
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1255.map b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1255.map
new file mode 100755 (executable)
index 0000000..079e10c
--- /dev/null
@@ -0,0 +1,233 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!83 U+0192 florin
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!88 U+02C6 circumflex
+!89 U+2030 perthousand
+!8B U+2039 guilsinglleft
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!98 U+02DC tilde
+!99 U+2122 trademark
+!9B U+203A guilsinglright
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+20AA afii57636
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+00D7 multiply
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD sfthyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 middot
+!B8 U+00B8 cedilla
+!B9 U+00B9 onesuperior
+!BA U+00F7 divide
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00BF questiondown
+!C0 U+05B0 afii57799
+!C1 U+05B1 afii57801
+!C2 U+05B2 afii57800
+!C3 U+05B3 afii57802
+!C4 U+05B4 afii57793
+!C5 U+05B5 afii57794
+!C6 U+05B6 afii57795
+!C7 U+05B7 afii57798
+!C8 U+05B8 afii57797
+!C9 U+05B9 afii57806
+!CB U+05BB afii57796
+!CC U+05BC afii57807
+!CD U+05BD afii57839
+!CE U+05BE afii57645
+!CF U+05BF afii57841
+!D0 U+05C0 afii57842
+!D1 U+05C1 afii57804
+!D2 U+05C2 afii57803
+!D3 U+05C3 afii57658
+!D4 U+05F0 afii57716
+!D5 U+05F1 afii57717
+!D6 U+05F2 afii57718
+!D7 U+05F3 gereshhebrew
+!D8 U+05F4 gershayimhebrew
+!E0 U+05D0 afii57664
+!E1 U+05D1 afii57665
+!E2 U+05D2 afii57666
+!E3 U+05D3 afii57667
+!E4 U+05D4 afii57668
+!E5 U+05D5 afii57669
+!E6 U+05D6 afii57670
+!E7 U+05D7 afii57671
+!E8 U+05D8 afii57672
+!E9 U+05D9 afii57673
+!EA U+05DA afii57674
+!EB U+05DB afii57675
+!EC U+05DC afii57676
+!ED U+05DD afii57677
+!EE U+05DE afii57678
+!EF U+05DF afii57679
+!F0 U+05E0 afii57680
+!F1 U+05E1 afii57681
+!F2 U+05E2 afii57682
+!F3 U+05E3 afii57683
+!F4 U+05E4 afii57684
+!F5 U+05E5 afii57685
+!F6 U+05E6 afii57686
+!F7 U+05E7 afii57687
+!F8 U+05E8 afii57688
+!F9 U+05E9 afii57689
+!FA U+05EA afii57690
+!FD U+200E afii299
+!FE U+200F afii300
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1257.map b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1257.map
new file mode 100755 (executable)
index 0000000..2f2ecfa
--- /dev/null
@@ -0,0 +1,244 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!89 U+2030 perthousand
+!8B U+2039 guilsinglleft
+!8D U+00A8 dieresis
+!8E U+02C7 caron
+!8F U+00B8 cedilla
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!99 U+2122 trademark
+!9B U+203A guilsinglright
+!9D U+00AF macron
+!9E U+02DB ogonek
+!A0 U+00A0 space
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00D8 Oslash
+!A9 U+00A9 copyright
+!AA U+0156 Rcommaaccent
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00C6 AE
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00F8 oslash
+!B9 U+00B9 onesuperior
+!BA U+0157 rcommaaccent
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00E6 ae
+!C0 U+0104 Aogonek
+!C1 U+012E Iogonek
+!C2 U+0100 Amacron
+!C3 U+0106 Cacute
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+0118 Eogonek
+!C7 U+0112 Emacron
+!C8 U+010C Ccaron
+!C9 U+00C9 Eacute
+!CA U+0179 Zacute
+!CB U+0116 Edotaccent
+!CC U+0122 Gcommaaccent
+!CD U+0136 Kcommaaccent
+!CE U+012A Imacron
+!CF U+013B Lcommaaccent
+!D0 U+0160 Scaron
+!D1 U+0143 Nacute
+!D2 U+0145 Ncommaaccent
+!D3 U+00D3 Oacute
+!D4 U+014C Omacron
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+0172 Uogonek
+!D9 U+0141 Lslash
+!DA U+015A Sacute
+!DB U+016A Umacron
+!DC U+00DC Udieresis
+!DD U+017B Zdotaccent
+!DE U+017D Zcaron
+!DF U+00DF germandbls
+!E0 U+0105 aogonek
+!E1 U+012F iogonek
+!E2 U+0101 amacron
+!E3 U+0107 cacute
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+0119 eogonek
+!E7 U+0113 emacron
+!E8 U+010D ccaron
+!E9 U+00E9 eacute
+!EA U+017A zacute
+!EB U+0117 edotaccent
+!EC U+0123 gcommaaccent
+!ED U+0137 kcommaaccent
+!EE U+012B imacron
+!EF U+013C lcommaaccent
+!F0 U+0161 scaron
+!F1 U+0144 nacute
+!F2 U+0146 ncommaaccent
+!F3 U+00F3 oacute
+!F4 U+014D omacron
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+0173 uogonek
+!F9 U+0142 lslash
+!FA U+015B sacute
+!FB U+016B umacron
+!FC U+00FC udieresis
+!FD U+017C zdotaccent
+!FE U+017E zcaron
+!FF U+02D9 dotaccent
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1258.map b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp1258.map
new file mode 100755 (executable)
index 0000000..fed915f
--- /dev/null
@@ -0,0 +1,247 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!82 U+201A quotesinglbase
+!83 U+0192 florin
+!84 U+201E quotedblbase
+!85 U+2026 ellipsis
+!86 U+2020 dagger
+!87 U+2021 daggerdbl
+!88 U+02C6 circumflex
+!89 U+2030 perthousand
+!8B U+2039 guilsinglleft
+!8C U+0152 OE
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!98 U+02DC tilde
+!99 U+2122 trademark
+!9B U+203A guilsinglright
+!9C U+0153 oe
+!9F U+0178 Ydieresis
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+00AA ordfeminine
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00B8 cedilla
+!B9 U+00B9 onesuperior
+!BA U+00BA ordmasculine
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00BF questiondown
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+0102 Abreve
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+0300 gravecomb
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+0110 Dcroat
+!D1 U+00D1 Ntilde
+!D2 U+0309 hookabovecomb
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+01A0 Ohorn
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+01AF Uhorn
+!DE U+0303 tildecomb
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+0103 abreve
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+0301 acutecomb
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+0111 dcroat
+!F1 U+00F1 ntilde
+!F2 U+0323 dotbelowcomb
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+01A1 ohorn
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+01B0 uhorn
+!FE U+20AB dong
+!FF U+00FF ydieresis
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp874.map b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/cp874.map
new file mode 100755 (executable)
index 0000000..1006e6b
--- /dev/null
@@ -0,0 +1,225 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+20AC Euro
+!85 U+2026 ellipsis
+!91 U+2018 quoteleft
+!92 U+2019 quoteright
+!93 U+201C quotedblleft
+!94 U+201D quotedblright
+!95 U+2022 bullet
+!96 U+2013 endash
+!97 U+2014 emdash
+!A0 U+00A0 space
+!A1 U+0E01 kokaithai
+!A2 U+0E02 khokhaithai
+!A3 U+0E03 khokhuatthai
+!A4 U+0E04 khokhwaithai
+!A5 U+0E05 khokhonthai
+!A6 U+0E06 khorakhangthai
+!A7 U+0E07 ngonguthai
+!A8 U+0E08 chochanthai
+!A9 U+0E09 chochingthai
+!AA U+0E0A chochangthai
+!AB U+0E0B sosothai
+!AC U+0E0C chochoethai
+!AD U+0E0D yoyingthai
+!AE U+0E0E dochadathai
+!AF U+0E0F topatakthai
+!B0 U+0E10 thothanthai
+!B1 U+0E11 thonangmonthothai
+!B2 U+0E12 thophuthaothai
+!B3 U+0E13 nonenthai
+!B4 U+0E14 dodekthai
+!B5 U+0E15 totaothai
+!B6 U+0E16 thothungthai
+!B7 U+0E17 thothahanthai
+!B8 U+0E18 thothongthai
+!B9 U+0E19 nonuthai
+!BA U+0E1A bobaimaithai
+!BB U+0E1B poplathai
+!BC U+0E1C phophungthai
+!BD U+0E1D fofathai
+!BE U+0E1E phophanthai
+!BF U+0E1F fofanthai
+!C0 U+0E20 phosamphaothai
+!C1 U+0E21 momathai
+!C2 U+0E22 yoyakthai
+!C3 U+0E23 roruathai
+!C4 U+0E24 ruthai
+!C5 U+0E25 lolingthai
+!C6 U+0E26 luthai
+!C7 U+0E27 wowaenthai
+!C8 U+0E28 sosalathai
+!C9 U+0E29 sorusithai
+!CA U+0E2A sosuathai
+!CB U+0E2B hohipthai
+!CC U+0E2C lochulathai
+!CD U+0E2D oangthai
+!CE U+0E2E honokhukthai
+!CF U+0E2F paiyannoithai
+!D0 U+0E30 saraathai
+!D1 U+0E31 maihanakatthai
+!D2 U+0E32 saraaathai
+!D3 U+0E33 saraamthai
+!D4 U+0E34 saraithai
+!D5 U+0E35 saraiithai
+!D6 U+0E36 sarauethai
+!D7 U+0E37 saraueethai
+!D8 U+0E38 sarauthai
+!D9 U+0E39 sarauuthai
+!DA U+0E3A phinthuthai
+!DF U+0E3F bahtthai
+!E0 U+0E40 saraethai
+!E1 U+0E41 saraaethai
+!E2 U+0E42 saraothai
+!E3 U+0E43 saraaimaimuanthai
+!E4 U+0E44 saraaimaimalaithai
+!E5 U+0E45 lakkhangyaothai
+!E6 U+0E46 maiyamokthai
+!E7 U+0E47 maitaikhuthai
+!E8 U+0E48 maiekthai
+!E9 U+0E49 maithothai
+!EA U+0E4A maitrithai
+!EB U+0E4B maichattawathai
+!EC U+0E4C thanthakhatthai
+!ED U+0E4D nikhahitthai
+!EE U+0E4E yamakkanthai
+!EF U+0E4F fongmanthai
+!F0 U+0E50 zerothai
+!F1 U+0E51 onethai
+!F2 U+0E52 twothai
+!F3 U+0E53 threethai
+!F4 U+0E54 fourthai
+!F5 U+0E55 fivethai
+!F6 U+0E56 sixthai
+!F7 U+0E57 seventhai
+!F8 U+0E58 eightthai
+!F9 U+0E59 ninethai
+!FA U+0E5A angkhankhuthai
+!FB U+0E5B khomutthai
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-1.map b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-1.map
new file mode 100755 (executable)
index 0000000..61740a3
--- /dev/null
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+00AA ordfeminine
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00B8 cedilla
+!B9 U+00B9 onesuperior
+!BA U+00BA ordmasculine
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00BF questiondown
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+00C3 Atilde
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+00CC Igrave
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+00D0 Eth
+!D1 U+00D1 Ntilde
+!D2 U+00D2 Ograve
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+00DD Yacute
+!DE U+00DE Thorn
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+00E3 atilde
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+00EC igrave
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+00F0 eth
+!F1 U+00F1 ntilde
+!F2 U+00F2 ograve
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+00FD yacute
+!FE U+00FE thorn
+!FF U+00FF ydieresis
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-11.map b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-11.map
new file mode 100755 (executable)
index 0000000..9168812
--- /dev/null
@@ -0,0 +1,248 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+0E01 kokaithai
+!A2 U+0E02 khokhaithai
+!A3 U+0E03 khokhuatthai
+!A4 U+0E04 khokhwaithai
+!A5 U+0E05 khokhonthai
+!A6 U+0E06 khorakhangthai
+!A7 U+0E07 ngonguthai
+!A8 U+0E08 chochanthai
+!A9 U+0E09 chochingthai
+!AA U+0E0A chochangthai
+!AB U+0E0B sosothai
+!AC U+0E0C chochoethai
+!AD U+0E0D yoyingthai
+!AE U+0E0E dochadathai
+!AF U+0E0F topatakthai
+!B0 U+0E10 thothanthai
+!B1 U+0E11 thonangmonthothai
+!B2 U+0E12 thophuthaothai
+!B3 U+0E13 nonenthai
+!B4 U+0E14 dodekthai
+!B5 U+0E15 totaothai
+!B6 U+0E16 thothungthai
+!B7 U+0E17 thothahanthai
+!B8 U+0E18 thothongthai
+!B9 U+0E19 nonuthai
+!BA U+0E1A bobaimaithai
+!BB U+0E1B poplathai
+!BC U+0E1C phophungthai
+!BD U+0E1D fofathai
+!BE U+0E1E phophanthai
+!BF U+0E1F fofanthai
+!C0 U+0E20 phosamphaothai
+!C1 U+0E21 momathai
+!C2 U+0E22 yoyakthai
+!C3 U+0E23 roruathai
+!C4 U+0E24 ruthai
+!C5 U+0E25 lolingthai
+!C6 U+0E26 luthai
+!C7 U+0E27 wowaenthai
+!C8 U+0E28 sosalathai
+!C9 U+0E29 sorusithai
+!CA U+0E2A sosuathai
+!CB U+0E2B hohipthai
+!CC U+0E2C lochulathai
+!CD U+0E2D oangthai
+!CE U+0E2E honokhukthai
+!CF U+0E2F paiyannoithai
+!D0 U+0E30 saraathai
+!D1 U+0E31 maihanakatthai
+!D2 U+0E32 saraaathai
+!D3 U+0E33 saraamthai
+!D4 U+0E34 saraithai
+!D5 U+0E35 saraiithai
+!D6 U+0E36 sarauethai
+!D7 U+0E37 saraueethai
+!D8 U+0E38 sarauthai
+!D9 U+0E39 sarauuthai
+!DA U+0E3A phinthuthai
+!DF U+0E3F bahtthai
+!E0 U+0E40 saraethai
+!E1 U+0E41 saraaethai
+!E2 U+0E42 saraothai
+!E3 U+0E43 saraaimaimuanthai
+!E4 U+0E44 saraaimaimalaithai
+!E5 U+0E45 lakkhangyaothai
+!E6 U+0E46 maiyamokthai
+!E7 U+0E47 maitaikhuthai
+!E8 U+0E48 maiekthai
+!E9 U+0E49 maithothai
+!EA U+0E4A maitrithai
+!EB U+0E4B maichattawathai
+!EC U+0E4C thanthakhatthai
+!ED U+0E4D nikhahitthai
+!EE U+0E4E yamakkanthai
+!EF U+0E4F fongmanthai
+!F0 U+0E50 zerothai
+!F1 U+0E51 onethai
+!F2 U+0E52 twothai
+!F3 U+0E53 threethai
+!F4 U+0E54 fourthai
+!F5 U+0E55 fivethai
+!F6 U+0E56 sixthai
+!F7 U+0E57 seventhai
+!F8 U+0E58 eightthai
+!F9 U+0E59 ninethai
+!FA U+0E5A angkhankhuthai
+!FB U+0E5B khomutthai
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-15.map b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-15.map
new file mode 100755 (executable)
index 0000000..6c2b571
--- /dev/null
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+20AC Euro
+!A5 U+00A5 yen
+!A6 U+0160 Scaron
+!A7 U+00A7 section
+!A8 U+0161 scaron
+!A9 U+00A9 copyright
+!AA U+00AA ordfeminine
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+017D Zcaron
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+017E zcaron
+!B9 U+00B9 onesuperior
+!BA U+00BA ordmasculine
+!BB U+00BB guillemotright
+!BC U+0152 OE
+!BD U+0153 oe
+!BE U+0178 Ydieresis
+!BF U+00BF questiondown
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+00C3 Atilde
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+00CC Igrave
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+00D0 Eth
+!D1 U+00D1 Ntilde
+!D2 U+00D2 Ograve
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+00DD Yacute
+!DE U+00DE Thorn
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+00E3 atilde
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+00EC igrave
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+00F0 eth
+!F1 U+00F1 ntilde
+!F2 U+00F2 ograve
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+00FD yacute
+!FE U+00FE thorn
+!FF U+00FF ydieresis
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-16.map b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-16.map
new file mode 100755 (executable)
index 0000000..202c8fe
--- /dev/null
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+0104 Aogonek
+!A2 U+0105 aogonek
+!A3 U+0141 Lslash
+!A4 U+20AC Euro
+!A5 U+201E quotedblbase
+!A6 U+0160 Scaron
+!A7 U+00A7 section
+!A8 U+0161 scaron
+!A9 U+00A9 copyright
+!AA U+0218 Scommaaccent
+!AB U+00AB guillemotleft
+!AC U+0179 Zacute
+!AD U+00AD hyphen
+!AE U+017A zacute
+!AF U+017B Zdotaccent
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+010C Ccaron
+!B3 U+0142 lslash
+!B4 U+017D Zcaron
+!B5 U+201D quotedblright
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+017E zcaron
+!B9 U+010D ccaron
+!BA U+0219 scommaaccent
+!BB U+00BB guillemotright
+!BC U+0152 OE
+!BD U+0153 oe
+!BE U+0178 Ydieresis
+!BF U+017C zdotaccent
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+0102 Abreve
+!C4 U+00C4 Adieresis
+!C5 U+0106 Cacute
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+00CC Igrave
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+0110 Dcroat
+!D1 U+0143 Nacute
+!D2 U+00D2 Ograve
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+0150 Ohungarumlaut
+!D6 U+00D6 Odieresis
+!D7 U+015A Sacute
+!D8 U+0170 Uhungarumlaut
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+0118 Eogonek
+!DE U+021A Tcommaaccent
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+0103 abreve
+!E4 U+00E4 adieresis
+!E5 U+0107 cacute
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+00EC igrave
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+0111 dcroat
+!F1 U+0144 nacute
+!F2 U+00F2 ograve
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+0151 ohungarumlaut
+!F6 U+00F6 odieresis
+!F7 U+015B sacute
+!F8 U+0171 uhungarumlaut
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+0119 eogonek
+!FE U+021B tcommaaccent
+!FF U+00FF ydieresis
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-2.map b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-2.map
new file mode 100755 (executable)
index 0000000..65ae09f
--- /dev/null
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+0104 Aogonek
+!A2 U+02D8 breve
+!A3 U+0141 Lslash
+!A4 U+00A4 currency
+!A5 U+013D Lcaron
+!A6 U+015A Sacute
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+0160 Scaron
+!AA U+015E Scedilla
+!AB U+0164 Tcaron
+!AC U+0179 Zacute
+!AD U+00AD hyphen
+!AE U+017D Zcaron
+!AF U+017B Zdotaccent
+!B0 U+00B0 degree
+!B1 U+0105 aogonek
+!B2 U+02DB ogonek
+!B3 U+0142 lslash
+!B4 U+00B4 acute
+!B5 U+013E lcaron
+!B6 U+015B sacute
+!B7 U+02C7 caron
+!B8 U+00B8 cedilla
+!B9 U+0161 scaron
+!BA U+015F scedilla
+!BB U+0165 tcaron
+!BC U+017A zacute
+!BD U+02DD hungarumlaut
+!BE U+017E zcaron
+!BF U+017C zdotaccent
+!C0 U+0154 Racute
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+0102 Abreve
+!C4 U+00C4 Adieresis
+!C5 U+0139 Lacute
+!C6 U+0106 Cacute
+!C7 U+00C7 Ccedilla
+!C8 U+010C Ccaron
+!C9 U+00C9 Eacute
+!CA U+0118 Eogonek
+!CB U+00CB Edieresis
+!CC U+011A Ecaron
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+010E Dcaron
+!D0 U+0110 Dcroat
+!D1 U+0143 Nacute
+!D2 U+0147 Ncaron
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+0150 Ohungarumlaut
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+0158 Rcaron
+!D9 U+016E Uring
+!DA U+00DA Uacute
+!DB U+0170 Uhungarumlaut
+!DC U+00DC Udieresis
+!DD U+00DD Yacute
+!DE U+0162 Tcommaaccent
+!DF U+00DF germandbls
+!E0 U+0155 racute
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+0103 abreve
+!E4 U+00E4 adieresis
+!E5 U+013A lacute
+!E6 U+0107 cacute
+!E7 U+00E7 ccedilla
+!E8 U+010D ccaron
+!E9 U+00E9 eacute
+!EA U+0119 eogonek
+!EB U+00EB edieresis
+!EC U+011B ecaron
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+010F dcaron
+!F0 U+0111 dcroat
+!F1 U+0144 nacute
+!F2 U+0148 ncaron
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+0151 ohungarumlaut
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+0159 rcaron
+!F9 U+016F uring
+!FA U+00FA uacute
+!FB U+0171 uhungarumlaut
+!FC U+00FC udieresis
+!FD U+00FD yacute
+!FE U+0163 tcommaaccent
+!FF U+02D9 dotaccent
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-4.map b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-4.map
new file mode 100755 (executable)
index 0000000..a7d87bf
--- /dev/null
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+0104 Aogonek
+!A2 U+0138 kgreenlandic
+!A3 U+0156 Rcommaaccent
+!A4 U+00A4 currency
+!A5 U+0128 Itilde
+!A6 U+013B Lcommaaccent
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+0160 Scaron
+!AA U+0112 Emacron
+!AB U+0122 Gcommaaccent
+!AC U+0166 Tbar
+!AD U+00AD hyphen
+!AE U+017D Zcaron
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+0105 aogonek
+!B2 U+02DB ogonek
+!B3 U+0157 rcommaaccent
+!B4 U+00B4 acute
+!B5 U+0129 itilde
+!B6 U+013C lcommaaccent
+!B7 U+02C7 caron
+!B8 U+00B8 cedilla
+!B9 U+0161 scaron
+!BA U+0113 emacron
+!BB U+0123 gcommaaccent
+!BC U+0167 tbar
+!BD U+014A Eng
+!BE U+017E zcaron
+!BF U+014B eng
+!C0 U+0100 Amacron
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+00C3 Atilde
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+012E Iogonek
+!C8 U+010C Ccaron
+!C9 U+00C9 Eacute
+!CA U+0118 Eogonek
+!CB U+00CB Edieresis
+!CC U+0116 Edotaccent
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+012A Imacron
+!D0 U+0110 Dcroat
+!D1 U+0145 Ncommaaccent
+!D2 U+014C Omacron
+!D3 U+0136 Kcommaaccent
+!D4 U+00D4 Ocircumflex
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+0172 Uogonek
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+0168 Utilde
+!DE U+016A Umacron
+!DF U+00DF germandbls
+!E0 U+0101 amacron
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+00E3 atilde
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+012F iogonek
+!E8 U+010D ccaron
+!E9 U+00E9 eacute
+!EA U+0119 eogonek
+!EB U+00EB edieresis
+!EC U+0117 edotaccent
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+012B imacron
+!F0 U+0111 dcroat
+!F1 U+0146 ncommaaccent
+!F2 U+014D omacron
+!F3 U+0137 kcommaaccent
+!F4 U+00F4 ocircumflex
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+0173 uogonek
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+0169 utilde
+!FE U+016B umacron
+!FF U+02D9 dotaccent
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-5.map b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-5.map
new file mode 100755 (executable)
index 0000000..f9cd4ed
--- /dev/null
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+0401 afii10023
+!A2 U+0402 afii10051
+!A3 U+0403 afii10052
+!A4 U+0404 afii10053
+!A5 U+0405 afii10054
+!A6 U+0406 afii10055
+!A7 U+0407 afii10056
+!A8 U+0408 afii10057
+!A9 U+0409 afii10058
+!AA U+040A afii10059
+!AB U+040B afii10060
+!AC U+040C afii10061
+!AD U+00AD hyphen
+!AE U+040E afii10062
+!AF U+040F afii10145
+!B0 U+0410 afii10017
+!B1 U+0411 afii10018
+!B2 U+0412 afii10019
+!B3 U+0413 afii10020
+!B4 U+0414 afii10021
+!B5 U+0415 afii10022
+!B6 U+0416 afii10024
+!B7 U+0417 afii10025
+!B8 U+0418 afii10026
+!B9 U+0419 afii10027
+!BA U+041A afii10028
+!BB U+041B afii10029
+!BC U+041C afii10030
+!BD U+041D afii10031
+!BE U+041E afii10032
+!BF U+041F afii10033
+!C0 U+0420 afii10034
+!C1 U+0421 afii10035
+!C2 U+0422 afii10036
+!C3 U+0423 afii10037
+!C4 U+0424 afii10038
+!C5 U+0425 afii10039
+!C6 U+0426 afii10040
+!C7 U+0427 afii10041
+!C8 U+0428 afii10042
+!C9 U+0429 afii10043
+!CA U+042A afii10044
+!CB U+042B afii10045
+!CC U+042C afii10046
+!CD U+042D afii10047
+!CE U+042E afii10048
+!CF U+042F afii10049
+!D0 U+0430 afii10065
+!D1 U+0431 afii10066
+!D2 U+0432 afii10067
+!D3 U+0433 afii10068
+!D4 U+0434 afii10069
+!D5 U+0435 afii10070
+!D6 U+0436 afii10072
+!D7 U+0437 afii10073
+!D8 U+0438 afii10074
+!D9 U+0439 afii10075
+!DA U+043A afii10076
+!DB U+043B afii10077
+!DC U+043C afii10078
+!DD U+043D afii10079
+!DE U+043E afii10080
+!DF U+043F afii10081
+!E0 U+0440 afii10082
+!E1 U+0441 afii10083
+!E2 U+0442 afii10084
+!E3 U+0443 afii10085
+!E4 U+0444 afii10086
+!E5 U+0445 afii10087
+!E6 U+0446 afii10088
+!E7 U+0447 afii10089
+!E8 U+0448 afii10090
+!E9 U+0449 afii10091
+!EA U+044A afii10092
+!EB U+044B afii10093
+!EC U+044C afii10094
+!ED U+044D afii10095
+!EE U+044E afii10096
+!EF U+044F afii10097
+!F0 U+2116 afii61352
+!F1 U+0451 afii10071
+!F2 U+0452 afii10099
+!F3 U+0453 afii10100
+!F4 U+0454 afii10101
+!F5 U+0455 afii10102
+!F6 U+0456 afii10103
+!F7 U+0457 afii10104
+!F8 U+0458 afii10105
+!F9 U+0459 afii10106
+!FA U+045A afii10107
+!FB U+045B afii10108
+!FC U+045C afii10109
+!FD U+00A7 section
+!FE U+045E afii10110
+!FF U+045F afii10193
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-7.map b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-7.map
new file mode 100755 (executable)
index 0000000..e163796
--- /dev/null
@@ -0,0 +1,250 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+2018 quoteleft
+!A2 U+2019 quoteright
+!A3 U+00A3 sterling
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AF U+2015 afii00208
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+0384 tonos
+!B5 U+0385 dieresistonos
+!B6 U+0386 Alphatonos
+!B7 U+00B7 periodcentered
+!B8 U+0388 Epsilontonos
+!B9 U+0389 Etatonos
+!BA U+038A Iotatonos
+!BB U+00BB guillemotright
+!BC U+038C Omicrontonos
+!BD U+00BD onehalf
+!BE U+038E Upsilontonos
+!BF U+038F Omegatonos
+!C0 U+0390 iotadieresistonos
+!C1 U+0391 Alpha
+!C2 U+0392 Beta
+!C3 U+0393 Gamma
+!C4 U+0394 Delta
+!C5 U+0395 Epsilon
+!C6 U+0396 Zeta
+!C7 U+0397 Eta
+!C8 U+0398 Theta
+!C9 U+0399 Iota
+!CA U+039A Kappa
+!CB U+039B Lambda
+!CC U+039C Mu
+!CD U+039D Nu
+!CE U+039E Xi
+!CF U+039F Omicron
+!D0 U+03A0 Pi
+!D1 U+03A1 Rho
+!D3 U+03A3 Sigma
+!D4 U+03A4 Tau
+!D5 U+03A5 Upsilon
+!D6 U+03A6 Phi
+!D7 U+03A7 Chi
+!D8 U+03A8 Psi
+!D9 U+03A9 Omega
+!DA U+03AA Iotadieresis
+!DB U+03AB Upsilondieresis
+!DC U+03AC alphatonos
+!DD U+03AD epsilontonos
+!DE U+03AE etatonos
+!DF U+03AF iotatonos
+!E0 U+03B0 upsilondieresistonos
+!E1 U+03B1 alpha
+!E2 U+03B2 beta
+!E3 U+03B3 gamma
+!E4 U+03B4 delta
+!E5 U+03B5 epsilon
+!E6 U+03B6 zeta
+!E7 U+03B7 eta
+!E8 U+03B8 theta
+!E9 U+03B9 iota
+!EA U+03BA kappa
+!EB U+03BB lambda
+!EC U+03BC mu
+!ED U+03BD nu
+!EE U+03BE xi
+!EF U+03BF omicron
+!F0 U+03C0 pi
+!F1 U+03C1 rho
+!F2 U+03C2 sigma1
+!F3 U+03C3 sigma
+!F4 U+03C4 tau
+!F5 U+03C5 upsilon
+!F6 U+03C6 phi
+!F7 U+03C7 chi
+!F8 U+03C8 psi
+!F9 U+03C9 omega
+!FA U+03CA iotadieresis
+!FB U+03CB upsilondieresis
+!FC U+03CC omicrontonos
+!FD U+03CD upsilontonos
+!FE U+03CE omegatonos
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-9.map b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/iso-8859-9.map
new file mode 100755 (executable)
index 0000000..48c123a
--- /dev/null
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+0080 .notdef
+!81 U+0081 .notdef
+!82 U+0082 .notdef
+!83 U+0083 .notdef
+!84 U+0084 .notdef
+!85 U+0085 .notdef
+!86 U+0086 .notdef
+!87 U+0087 .notdef
+!88 U+0088 .notdef
+!89 U+0089 .notdef
+!8A U+008A .notdef
+!8B U+008B .notdef
+!8C U+008C .notdef
+!8D U+008D .notdef
+!8E U+008E .notdef
+!8F U+008F .notdef
+!90 U+0090 .notdef
+!91 U+0091 .notdef
+!92 U+0092 .notdef
+!93 U+0093 .notdef
+!94 U+0094 .notdef
+!95 U+0095 .notdef
+!96 U+0096 .notdef
+!97 U+0097 .notdef
+!98 U+0098 .notdef
+!99 U+0099 .notdef
+!9A U+009A .notdef
+!9B U+009B .notdef
+!9C U+009C .notdef
+!9D U+009D .notdef
+!9E U+009E .notdef
+!9F U+009F .notdef
+!A0 U+00A0 space
+!A1 U+00A1 exclamdown
+!A2 U+00A2 cent
+!A3 U+00A3 sterling
+!A4 U+00A4 currency
+!A5 U+00A5 yen
+!A6 U+00A6 brokenbar
+!A7 U+00A7 section
+!A8 U+00A8 dieresis
+!A9 U+00A9 copyright
+!AA U+00AA ordfeminine
+!AB U+00AB guillemotleft
+!AC U+00AC logicalnot
+!AD U+00AD hyphen
+!AE U+00AE registered
+!AF U+00AF macron
+!B0 U+00B0 degree
+!B1 U+00B1 plusminus
+!B2 U+00B2 twosuperior
+!B3 U+00B3 threesuperior
+!B4 U+00B4 acute
+!B5 U+00B5 mu
+!B6 U+00B6 paragraph
+!B7 U+00B7 periodcentered
+!B8 U+00B8 cedilla
+!B9 U+00B9 onesuperior
+!BA U+00BA ordmasculine
+!BB U+00BB guillemotright
+!BC U+00BC onequarter
+!BD U+00BD onehalf
+!BE U+00BE threequarters
+!BF U+00BF questiondown
+!C0 U+00C0 Agrave
+!C1 U+00C1 Aacute
+!C2 U+00C2 Acircumflex
+!C3 U+00C3 Atilde
+!C4 U+00C4 Adieresis
+!C5 U+00C5 Aring
+!C6 U+00C6 AE
+!C7 U+00C7 Ccedilla
+!C8 U+00C8 Egrave
+!C9 U+00C9 Eacute
+!CA U+00CA Ecircumflex
+!CB U+00CB Edieresis
+!CC U+00CC Igrave
+!CD U+00CD Iacute
+!CE U+00CE Icircumflex
+!CF U+00CF Idieresis
+!D0 U+011E Gbreve
+!D1 U+00D1 Ntilde
+!D2 U+00D2 Ograve
+!D3 U+00D3 Oacute
+!D4 U+00D4 Ocircumflex
+!D5 U+00D5 Otilde
+!D6 U+00D6 Odieresis
+!D7 U+00D7 multiply
+!D8 U+00D8 Oslash
+!D9 U+00D9 Ugrave
+!DA U+00DA Uacute
+!DB U+00DB Ucircumflex
+!DC U+00DC Udieresis
+!DD U+0130 Idotaccent
+!DE U+015E Scedilla
+!DF U+00DF germandbls
+!E0 U+00E0 agrave
+!E1 U+00E1 aacute
+!E2 U+00E2 acircumflex
+!E3 U+00E3 atilde
+!E4 U+00E4 adieresis
+!E5 U+00E5 aring
+!E6 U+00E6 ae
+!E7 U+00E7 ccedilla
+!E8 U+00E8 egrave
+!E9 U+00E9 eacute
+!EA U+00EA ecircumflex
+!EB U+00EB edieresis
+!EC U+00EC igrave
+!ED U+00ED iacute
+!EE U+00EE icircumflex
+!EF U+00EF idieresis
+!F0 U+011F gbreve
+!F1 U+00F1 ntilde
+!F2 U+00F2 ograve
+!F3 U+00F3 oacute
+!F4 U+00F4 ocircumflex
+!F5 U+00F5 otilde
+!F6 U+00F6 odieresis
+!F7 U+00F7 divide
+!F8 U+00F8 oslash
+!F9 U+00F9 ugrave
+!FA U+00FA uacute
+!FB U+00FB ucircumflex
+!FC U+00FC udieresis
+!FD U+0131 dotlessi
+!FE U+015F scedilla
+!FF U+00FF ydieresis
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/koi8-r.map b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/koi8-r.map
new file mode 100755 (executable)
index 0000000..6ad5d05
--- /dev/null
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+2500 SF100000
+!81 U+2502 SF110000
+!82 U+250C SF010000
+!83 U+2510 SF030000
+!84 U+2514 SF020000
+!85 U+2518 SF040000
+!86 U+251C SF080000
+!87 U+2524 SF090000
+!88 U+252C SF060000
+!89 U+2534 SF070000
+!8A U+253C SF050000
+!8B U+2580 upblock
+!8C U+2584 dnblock
+!8D U+2588 block
+!8E U+258C lfblock
+!8F U+2590 rtblock
+!90 U+2591 ltshade
+!91 U+2592 shade
+!92 U+2593 dkshade
+!93 U+2320 integraltp
+!94 U+25A0 filledbox
+!95 U+2219 periodcentered
+!96 U+221A radical
+!97 U+2248 approxequal
+!98 U+2264 lessequal
+!99 U+2265 greaterequal
+!9A U+00A0 space
+!9B U+2321 integralbt
+!9C U+00B0 degree
+!9D U+00B2 twosuperior
+!9E U+00B7 periodcentered
+!9F U+00F7 divide
+!A0 U+2550 SF430000
+!A1 U+2551 SF240000
+!A2 U+2552 SF510000
+!A3 U+0451 afii10071
+!A4 U+2553 SF520000
+!A5 U+2554 SF390000
+!A6 U+2555 SF220000
+!A7 U+2556 SF210000
+!A8 U+2557 SF250000
+!A9 U+2558 SF500000
+!AA U+2559 SF490000
+!AB U+255A SF380000
+!AC U+255B SF280000
+!AD U+255C SF270000
+!AE U+255D SF260000
+!AF U+255E SF360000
+!B0 U+255F SF370000
+!B1 U+2560 SF420000
+!B2 U+2561 SF190000
+!B3 U+0401 afii10023
+!B4 U+2562 SF200000
+!B5 U+2563 SF230000
+!B6 U+2564 SF470000
+!B7 U+2565 SF480000
+!B8 U+2566 SF410000
+!B9 U+2567 SF450000
+!BA U+2568 SF460000
+!BB U+2569 SF400000
+!BC U+256A SF540000
+!BD U+256B SF530000
+!BE U+256C SF440000
+!BF U+00A9 copyright
+!C0 U+044E afii10096
+!C1 U+0430 afii10065
+!C2 U+0431 afii10066
+!C3 U+0446 afii10088
+!C4 U+0434 afii10069
+!C5 U+0435 afii10070
+!C6 U+0444 afii10086
+!C7 U+0433 afii10068
+!C8 U+0445 afii10087
+!C9 U+0438 afii10074
+!CA U+0439 afii10075
+!CB U+043A afii10076
+!CC U+043B afii10077
+!CD U+043C afii10078
+!CE U+043D afii10079
+!CF U+043E afii10080
+!D0 U+043F afii10081
+!D1 U+044F afii10097
+!D2 U+0440 afii10082
+!D3 U+0441 afii10083
+!D4 U+0442 afii10084
+!D5 U+0443 afii10085
+!D6 U+0436 afii10072
+!D7 U+0432 afii10067
+!D8 U+044C afii10094
+!D9 U+044B afii10093
+!DA U+0437 afii10073
+!DB U+0448 afii10090
+!DC U+044D afii10095
+!DD U+0449 afii10091
+!DE U+0447 afii10089
+!DF U+044A afii10092
+!E0 U+042E afii10048
+!E1 U+0410 afii10017
+!E2 U+0411 afii10018
+!E3 U+0426 afii10040
+!E4 U+0414 afii10021
+!E5 U+0415 afii10022
+!E6 U+0424 afii10038
+!E7 U+0413 afii10020
+!E8 U+0425 afii10039
+!E9 U+0418 afii10026
+!EA U+0419 afii10027
+!EB U+041A afii10028
+!EC U+041B afii10029
+!ED U+041C afii10030
+!EE U+041D afii10031
+!EF U+041E afii10032
+!F0 U+041F afii10033
+!F1 U+042F afii10049
+!F2 U+0420 afii10034
+!F3 U+0421 afii10035
+!F4 U+0422 afii10036
+!F5 U+0423 afii10037
+!F6 U+0416 afii10024
+!F7 U+0412 afii10019
+!F8 U+042C afii10046
+!F9 U+042B afii10045
+!FA U+0417 afii10025
+!FB U+0428 afii10042
+!FC U+042D afii10047
+!FD U+0429 afii10043
+!FE U+0427 afii10041
+!FF U+042A afii10044
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/koi8-u.map b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/koi8-u.map
new file mode 100755 (executable)
index 0000000..40a7e4f
--- /dev/null
@@ -0,0 +1,256 @@
+!00 U+0000 .notdef
+!01 U+0001 .notdef
+!02 U+0002 .notdef
+!03 U+0003 .notdef
+!04 U+0004 .notdef
+!05 U+0005 .notdef
+!06 U+0006 .notdef
+!07 U+0007 .notdef
+!08 U+0008 .notdef
+!09 U+0009 .notdef
+!0A U+000A .notdef
+!0B U+000B .notdef
+!0C U+000C .notdef
+!0D U+000D .notdef
+!0E U+000E .notdef
+!0F U+000F .notdef
+!10 U+0010 .notdef
+!11 U+0011 .notdef
+!12 U+0012 .notdef
+!13 U+0013 .notdef
+!14 U+0014 .notdef
+!15 U+0015 .notdef
+!16 U+0016 .notdef
+!17 U+0017 .notdef
+!18 U+0018 .notdef
+!19 U+0019 .notdef
+!1A U+001A .notdef
+!1B U+001B .notdef
+!1C U+001C .notdef
+!1D U+001D .notdef
+!1E U+001E .notdef
+!1F U+001F .notdef
+!20 U+0020 space
+!21 U+0021 exclam
+!22 U+0022 quotedbl
+!23 U+0023 numbersign
+!24 U+0024 dollar
+!25 U+0025 percent
+!26 U+0026 ampersand
+!27 U+0027 quotesingle
+!28 U+0028 parenleft
+!29 U+0029 parenright
+!2A U+002A asterisk
+!2B U+002B plus
+!2C U+002C comma
+!2D U+002D hyphen
+!2E U+002E period
+!2F U+002F slash
+!30 U+0030 zero
+!31 U+0031 one
+!32 U+0032 two
+!33 U+0033 three
+!34 U+0034 four
+!35 U+0035 five
+!36 U+0036 six
+!37 U+0037 seven
+!38 U+0038 eight
+!39 U+0039 nine
+!3A U+003A colon
+!3B U+003B semicolon
+!3C U+003C less
+!3D U+003D equal
+!3E U+003E greater
+!3F U+003F question
+!40 U+0040 at
+!41 U+0041 A
+!42 U+0042 B
+!43 U+0043 C
+!44 U+0044 D
+!45 U+0045 E
+!46 U+0046 F
+!47 U+0047 G
+!48 U+0048 H
+!49 U+0049 I
+!4A U+004A J
+!4B U+004B K
+!4C U+004C L
+!4D U+004D M
+!4E U+004E N
+!4F U+004F O
+!50 U+0050 P
+!51 U+0051 Q
+!52 U+0052 R
+!53 U+0053 S
+!54 U+0054 T
+!55 U+0055 U
+!56 U+0056 V
+!57 U+0057 W
+!58 U+0058 X
+!59 U+0059 Y
+!5A U+005A Z
+!5B U+005B bracketleft
+!5C U+005C backslash
+!5D U+005D bracketright
+!5E U+005E asciicircum
+!5F U+005F underscore
+!60 U+0060 grave
+!61 U+0061 a
+!62 U+0062 b
+!63 U+0063 c
+!64 U+0064 d
+!65 U+0065 e
+!66 U+0066 f
+!67 U+0067 g
+!68 U+0068 h
+!69 U+0069 i
+!6A U+006A j
+!6B U+006B k
+!6C U+006C l
+!6D U+006D m
+!6E U+006E n
+!6F U+006F o
+!70 U+0070 p
+!71 U+0071 q
+!72 U+0072 r
+!73 U+0073 s
+!74 U+0074 t
+!75 U+0075 u
+!76 U+0076 v
+!77 U+0077 w
+!78 U+0078 x
+!79 U+0079 y
+!7A U+007A z
+!7B U+007B braceleft
+!7C U+007C bar
+!7D U+007D braceright
+!7E U+007E asciitilde
+!7F U+007F .notdef
+!80 U+2500 SF100000
+!81 U+2502 SF110000
+!82 U+250C SF010000
+!83 U+2510 SF030000
+!84 U+2514 SF020000
+!85 U+2518 SF040000
+!86 U+251C SF080000
+!87 U+2524 SF090000
+!88 U+252C SF060000
+!89 U+2534 SF070000
+!8A U+253C SF050000
+!8B U+2580 upblock
+!8C U+2584 dnblock
+!8D U+2588 block
+!8E U+258C lfblock
+!8F U+2590 rtblock
+!90 U+2591 ltshade
+!91 U+2592 shade
+!92 U+2593 dkshade
+!93 U+2320 integraltp
+!94 U+25A0 filledbox
+!95 U+2022 bullet
+!96 U+221A radical
+!97 U+2248 approxequal
+!98 U+2264 lessequal
+!99 U+2265 greaterequal
+!9A U+00A0 space
+!9B U+2321 integralbt
+!9C U+00B0 degree
+!9D U+00B2 twosuperior
+!9E U+00B7 periodcentered
+!9F U+00F7 divide
+!A0 U+2550 SF430000
+!A1 U+2551 SF240000
+!A2 U+2552 SF510000
+!A3 U+0451 afii10071
+!A4 U+0454 afii10101
+!A5 U+2554 SF390000
+!A6 U+0456 afii10103
+!A7 U+0457 afii10104
+!A8 U+2557 SF250000
+!A9 U+2558 SF500000
+!AA U+2559 SF490000
+!AB U+255A SF380000
+!AC U+255B SF280000
+!AD U+0491 afii10098
+!AE U+255D SF260000
+!AF U+255E SF360000
+!B0 U+255F SF370000
+!B1 U+2560 SF420000
+!B2 U+2561 SF190000
+!B3 U+0401 afii10023
+!B4 U+0404 afii10053
+!B5 U+2563 SF230000
+!B6 U+0406 afii10055
+!B7 U+0407 afii10056
+!B8 U+2566 SF410000
+!B9 U+2567 SF450000
+!BA U+2568 SF460000
+!BB U+2569 SF400000
+!BC U+256A SF540000
+!BD U+0490 afii10050
+!BE U+256C SF440000
+!BF U+00A9 copyright
+!C0 U+044E afii10096
+!C1 U+0430 afii10065
+!C2 U+0431 afii10066
+!C3 U+0446 afii10088
+!C4 U+0434 afii10069
+!C5 U+0435 afii10070
+!C6 U+0444 afii10086
+!C7 U+0433 afii10068
+!C8 U+0445 afii10087
+!C9 U+0438 afii10074
+!CA U+0439 afii10075
+!CB U+043A afii10076
+!CC U+043B afii10077
+!CD U+043C afii10078
+!CE U+043D afii10079
+!CF U+043E afii10080
+!D0 U+043F afii10081
+!D1 U+044F afii10097
+!D2 U+0440 afii10082
+!D3 U+0441 afii10083
+!D4 U+0442 afii10084
+!D5 U+0443 afii10085
+!D6 U+0436 afii10072
+!D7 U+0432 afii10067
+!D8 U+044C afii10094
+!D9 U+044B afii10093
+!DA U+0437 afii10073
+!DB U+0448 afii10090
+!DC U+044D afii10095
+!DD U+0449 afii10091
+!DE U+0447 afii10089
+!DF U+044A afii10092
+!E0 U+042E afii10048
+!E1 U+0410 afii10017
+!E2 U+0411 afii10018
+!E3 U+0426 afii10040
+!E4 U+0414 afii10021
+!E5 U+0415 afii10022
+!E6 U+0424 afii10038
+!E7 U+0413 afii10020
+!E8 U+0425 afii10039
+!E9 U+0418 afii10026
+!EA U+0419 afii10027
+!EB U+041A afii10028
+!EC U+041B afii10029
+!ED U+041C afii10030
+!EE U+041D afii10031
+!EF U+041E afii10032
+!F0 U+041F afii10033
+!F1 U+042F afii10049
+!F2 U+0420 afii10034
+!F3 U+0421 afii10035
+!F4 U+0422 afii10036
+!F5 U+0423 afii10037
+!F6 U+0416 afii10024
+!F7 U+0412 afii10019
+!F8 U+042C afii10046
+!F9 U+042B afii10045
+!FA U+0417 afii10025
+!FB U+0428 afii10042
+!FC U+042D afii10047
+!FD U+0429 afii10043
+!FE U+0427 afii10041
+!FF U+042A afii10044
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/makefont.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/makefont.php
new file mode 100755 (executable)
index 0000000..4bbd6d7
--- /dev/null
@@ -0,0 +1,451 @@
+<?php
+/*******************************************************************************
+* Utility to generate font definition files                                    *
+*                                                                              *
+* Version: 1.3                                                                 *
+* Date:    2015-11-29                                                          *
+* Author:  Olivier PLATHEY                                                     *
+*******************************************************************************/
+
+require('ttfparser.php');
+
+function Message($txt, $severity='')
+{
+       if(PHP_SAPI=='cli')
+       {
+               if($severity)
+                       echo "$severity: ";
+               echo "$txt\n";
+       }
+       else
+       {
+               if($severity)
+                       echo "<b>$severity</b>: ";
+               echo "$txt<br>";
+       }
+}
+
+function Notice($txt)
+{
+       Message($txt, 'Notice');
+}
+
+function Warning($txt)
+{
+       Message($txt, 'Warning');
+}
+
+function Error($txt)
+{
+       Message($txt, 'Error');
+       exit;
+}
+
+function LoadMap($enc)
+{
+       $file = dirname(__FILE__).'/'.strtolower($enc).'.map';
+       $a = file($file);
+       if(empty($a))
+               Error('Encoding not found: '.$enc);
+       $map = array_fill(0, 256, array('uv'=>-1, 'name'=>'.notdef'));
+       foreach($a as $line)
+       {
+               $e = explode(' ', rtrim($line));
+               $c = hexdec(substr($e[0],1));
+               $uv = hexdec(substr($e[1],2));
+               $name = $e[2];
+               $map[$c] = array('uv'=>$uv, 'name'=>$name);
+       }
+       return $map;
+}
+
+function GetInfoFromTrueType($file, $embed, $subset, $map)
+{
+       // Return information from a TrueType font
+       try
+       {
+               $ttf = new TTFParser($file);
+               $ttf->Parse();
+       }
+       catch(Exception $e)
+       {
+               Error($e->getMessage());
+       }
+       if($embed)
+       {
+               if(!$ttf->embeddable)
+                       Error('Font license does not allow embedding');
+               if($subset)
+               {
+                       $chars = array();
+                       foreach($map as $v)
+                       {
+                               if($v['name']!='.notdef')
+                                       $chars[] = $v['uv'];
+                       }
+                       $ttf->Subset($chars);
+                       $info['Data'] = $ttf->Build();
+               }
+               else
+                       $info['Data'] = file_get_contents($file);
+               $info['OriginalSize'] = strlen($info['Data']);
+       }
+       $k = 1000/$ttf->unitsPerEm;
+       $info['FontName'] = $ttf->postScriptName;
+       $info['Bold'] = $ttf->bold;
+       $info['ItalicAngle'] = $ttf->italicAngle;
+       $info['IsFixedPitch'] = $ttf->isFixedPitch;
+       $info['Ascender'] = round($k*$ttf->typoAscender);
+       $info['Descender'] = round($k*$ttf->typoDescender);
+       $info['UnderlineThickness'] = round($k*$ttf->underlineThickness);
+       $info['UnderlinePosition'] = round($k*$ttf->underlinePosition);
+       $info['FontBBox'] = array(round($k*$ttf->xMin), round($k*$ttf->yMin), round($k*$ttf->xMax), round($k*$ttf->yMax));
+       $info['CapHeight'] = round($k*$ttf->capHeight);
+       $info['MissingWidth'] = round($k*$ttf->glyphs[0]['w']);
+       $widths = array_fill(0, 256, $info['MissingWidth']);
+       foreach($map as $c=>$v)
+       {
+               if($v['name']!='.notdef')
+               {
+                       if(isset($ttf->chars[$v['uv']]))
+                       {
+                               $id = $ttf->chars[$v['uv']];
+                               $w = $ttf->glyphs[$id]['w'];
+                               $widths[$c] = round($k*$w);
+                       }
+                       else
+                               Warning('Character '.$v['name'].' is missing');
+               }
+       }
+       $info['Widths'] = $widths;
+       return $info;
+}
+
+function GetInfoFromType1($file, $embed, $map)
+{
+       // Return information from a Type1 font
+       if($embed)
+       {
+               $f = fopen($file, 'rb');
+               if(!$f)
+                       Error('Can\'t open font file');
+               // Read first segment
+               $a = unpack('Cmarker/Ctype/Vsize', fread($f,6));
+               if($a['marker']!=128)
+                       Error('Font file is not a valid binary Type1');
+               $size1 = $a['size'];
+               $data = fread($f, $size1);
+               // Read second segment
+               $a = unpack('Cmarker/Ctype/Vsize', fread($f,6));
+               if($a['marker']!=128)
+                       Error('Font file is not a valid binary Type1');
+               $size2 = $a['size'];
+               $data .= fread($f, $size2);
+               fclose($f);
+               $info['Data'] = $data;
+               $info['Size1'] = $size1;
+               $info['Size2'] = $size2;
+       }
+
+       $afm = substr($file, 0, -3).'afm';
+       if(!file_exists($afm))
+               Error('AFM font file not found: '.$afm);
+       $a = file($afm);
+       if(empty($a))
+               Error('AFM file empty or not readable');
+       foreach($a as $line)
+       {
+               $e = explode(' ', rtrim($line));
+               if(count($e)<2)
+                       continue;
+               $entry = $e[0];
+               if($entry=='C')
+               {
+                       $w = $e[4];
+                       $name = $e[7];
+                       $cw[$name] = $w;
+               }
+               elseif($entry=='FontName')
+                       $info['FontName'] = $e[1];
+               elseif($entry=='Weight')
+                       $info['Weight'] = $e[1];
+               elseif($entry=='ItalicAngle')
+                       $info['ItalicAngle'] = (int)$e[1];
+               elseif($entry=='Ascender')
+                       $info['Ascender'] = (int)$e[1];
+               elseif($entry=='Descender')
+                       $info['Descender'] = (int)$e[1];
+               elseif($entry=='UnderlineThickness')
+                       $info['UnderlineThickness'] = (int)$e[1];
+               elseif($entry=='UnderlinePosition')
+                       $info['UnderlinePosition'] = (int)$e[1];
+               elseif($entry=='IsFixedPitch')
+                       $info['IsFixedPitch'] = ($e[1]=='true');
+               elseif($entry=='FontBBox')
+                       $info['FontBBox'] = array((int)$e[1], (int)$e[2], (int)$e[3], (int)$e[4]);
+               elseif($entry=='CapHeight')
+                       $info['CapHeight'] = (int)$e[1];
+               elseif($entry=='StdVW')
+                       $info['StdVW'] = (int)$e[1];
+       }
+
+       if(!isset($info['FontName']))
+               Error('FontName missing in AFM file');
+       if(!isset($info['Ascender']))
+               $info['Ascender'] = $info['FontBBox'][3];
+       if(!isset($info['Descender']))
+               $info['Descender'] = $info['FontBBox'][1];
+       $info['Bold'] = isset($info['Weight']) && preg_match('/bold|black/i', $info['Weight']);
+       if(isset($cw['.notdef']))
+               $info['MissingWidth'] = $cw['.notdef'];
+       else
+               $info['MissingWidth'] = 0;
+       $widths = array_fill(0, 256, $info['MissingWidth']);
+       foreach($map as $c=>$v)
+       {
+               if($v['name']!='.notdef')
+               {
+                       if(isset($cw[$v['name']]))
+                               $widths[$c] = $cw[$v['name']];
+                       else
+                               Warning('Character '.$v['name'].' is missing');
+               }
+       }
+       $info['Widths'] = $widths;
+       return $info;
+}
+
+function MakeFontDescriptor($info)
+{
+       // Ascent
+       $fd = "array('Ascent'=>".$info['Ascender'];
+       // Descent
+       $fd .= ",'Descent'=>".$info['Descender'];
+       // CapHeight
+       if(!empty($info['CapHeight']))
+               $fd .= ",'CapHeight'=>".$info['CapHeight'];
+       else
+               $fd .= ",'CapHeight'=>".$info['Ascender'];
+       // Flags
+       $flags = 0;
+       if($info['IsFixedPitch'])
+               $flags += 1<<0;
+       $flags += 1<<5;
+       if($info['ItalicAngle']!=0)
+               $flags += 1<<6;
+       $fd .= ",'Flags'=>".$flags;
+       // FontBBox
+       $fbb = $info['FontBBox'];
+       $fd .= ",'FontBBox'=>'[".$fbb[0].' '.$fbb[1].' '.$fbb[2].' '.$fbb[3]."]'";
+       // ItalicAngle
+       $fd .= ",'ItalicAngle'=>".$info['ItalicAngle'];
+       // StemV
+       if(isset($info['StdVW']))
+               $stemv = $info['StdVW'];
+       elseif($info['Bold'])
+               $stemv = 120;
+       else
+               $stemv = 70;
+       $fd .= ",'StemV'=>".$stemv;
+       // MissingWidth
+       $fd .= ",'MissingWidth'=>".$info['MissingWidth'].')';
+       return $fd;
+}
+
+function MakeWidthArray($widths)
+{
+       $s = "array(\n\t";
+       for($c=0;$c<=255;$c++)
+       {
+               if(chr($c)=="'")
+                       $s .= "'\\''";
+               elseif(chr($c)=="\\")
+                       $s .= "'\\\\'";
+               elseif($c>=32 && $c<=126)
+                       $s .= "'".chr($c)."'";
+               else
+                       $s .= "chr($c)";
+               $s .= '=>'.$widths[$c];
+               if($c<255)
+                       $s .= ',';
+               if(($c+1)%22==0)
+                       $s .= "\n\t";
+       }
+       $s .= ')';
+       return $s;
+}
+
+function MakeFontEncoding($map)
+{
+       // Build differences from reference encoding
+       $ref = LoadMap('cp1252');
+       $s = '';
+       $last = 0;
+       for($c=32;$c<=255;$c++)
+       {
+               if($map[$c]['name']!=$ref[$c]['name'])
+               {
+                       if($c!=$last+1)
+                               $s .= $c.' ';
+                       $last = $c;
+                       $s .= '/'.$map[$c]['name'].' ';
+               }
+       }
+       return rtrim($s);
+}
+
+function MakeUnicodeArray($map)
+{
+       // Build mapping to Unicode values
+       $ranges = array();
+       foreach($map as $c=>$v)
+       {
+               $uv = $v['uv'];
+               if($uv!=-1)
+               {
+                       if(isset($range))
+                       {
+                               if($c==$range[1]+1 && $uv==$range[3]+1)
+                               {
+                                       $range[1]++;
+                                       $range[3]++;
+                               }
+                               else
+                               {
+                                       $ranges[] = $range;
+                                       $range = array($c, $c, $uv, $uv);
+                               }
+                       }
+                       else
+                               $range = array($c, $c, $uv, $uv);
+               }
+       }
+       $ranges[] = $range;
+
+       foreach($ranges as $range)
+       {
+               if(isset($s))
+                       $s .= ',';
+               else
+                       $s = 'array(';
+               $s .= $range[0].'=>';
+               $nb = $range[1]-$range[0]+1;
+               if($nb>1)
+                       $s .= 'array('.$range[2].','.$nb.')';
+               else
+                       $s .= $range[2];
+       }
+       $s .= ')';
+       return $s;
+}
+
+function SaveToFile($file, $s, $mode)
+{
+       $f = fopen($file, 'w'.$mode);
+       if(!$f)
+               Error('Can\'t write to file '.$file);
+       fwrite($f, $s);
+       fclose($f);
+}
+
+function MakeDefinitionFile($file, $type, $enc, $embed, $subset, $map, $info)
+{
+       $s = "<?php\n";
+       $s .= '$type = \''.$type."';\n";
+       $s .= '$name = \''.$info['FontName']."';\n";
+       $s .= '$desc = '.MakeFontDescriptor($info).";\n";
+       $s .= '$up = '.$info['UnderlinePosition'].";\n";
+       $s .= '$ut = '.$info['UnderlineThickness'].";\n";
+       $s .= '$cw = '.MakeWidthArray($info['Widths']).";\n";
+       $s .= '$enc = \''.$enc."';\n";
+       $diff = MakeFontEncoding($map);
+       if($diff)
+               $s .= '$diff = \''.$diff."';\n";
+       $s .= '$uv = '.MakeUnicodeArray($map).";\n";
+       if($embed)
+       {
+               $s .= '$file = \''.$info['File']."';\n";
+               if($type=='Type1')
+               {
+                       $s .= '$size1 = '.$info['Size1'].";\n";
+                       $s .= '$size2 = '.$info['Size2'].";\n";
+               }
+               else
+               {
+                       $s .= '$originalsize = '.$info['OriginalSize'].";\n";
+                       if($subset)
+                               $s .= "\$subsetted = true;\n";
+               }
+       }
+       $s .= "?>\n";
+       SaveToFile($file, $s, 't');
+}
+
+function MakeFont($fontfile, $enc='cp1252', $embed=true, $subset=true)
+{
+       // Generate a font definition file
+       if(get_magic_quotes_runtime())
+               @set_magic_quotes_runtime(false);
+       ini_set('auto_detect_line_endings', '1');
+
+       if(!file_exists($fontfile))
+               Error('Font file not found: '.$fontfile);
+       $ext = strtolower(substr($fontfile,-3));
+       if($ext=='ttf' || $ext=='otf')
+               $type = 'TrueType';
+       elseif($ext=='pfb')
+               $type = 'Type1';
+       else
+               Error('Unrecognized font file extension: '.$ext);
+
+       $map = LoadMap($enc);
+
+       if($type=='TrueType')
+               $info = GetInfoFromTrueType($fontfile, $embed, $subset, $map);
+       else
+               $info = GetInfoFromType1($fontfile, $embed, $map);
+
+       $basename = substr(basename($fontfile), 0, -4);
+       if($embed)
+       {
+               if(function_exists('gzcompress'))
+               {
+                       $file = $basename.'.z';
+                       SaveToFile($file, gzcompress($info['Data']), 'b');
+                       $info['File'] = $file;
+                       Message('Font file compressed: '.$file);
+               }
+               else
+               {
+                       $info['File'] = basename($fontfile);
+                       $subset = false;
+                       Notice('Font file could not be compressed (zlib extension not available)');
+               }
+       }
+
+       MakeDefinitionFile($basename.'.php', $type, $enc, $embed, $subset, $map, $info);
+       Message('Font definition file generated: '.$basename.'.php');
+}
+
+if(PHP_SAPI=='cli')
+{
+       // Command-line interface
+       ini_set('log_errors', '0');
+       if($argc==1)
+               die("Usage: php makefont.php fontfile [encoding] [embed] [subset]\n");
+       $fontfile = $argv[1];
+       if($argc>=3)
+               $enc = $argv[2];
+       else
+               $enc = 'cp1252';
+       if($argc>=4)
+               $embed = ($argv[3]=='true' || $argv[3]=='1');
+       else
+               $embed = true;
+       if($argc>=5)
+               $subset = ($argv[4]=='true' || $argv[4]=='1');
+       else
+               $subset = true;
+       MakeFont($fontfile, $enc, $embed, $subset);
+}
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/ttfparser.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/makefont/ttfparser.php
new file mode 100755 (executable)
index 0000000..56c46a4
--- /dev/null
@@ -0,0 +1,723 @@
+<?php
+/*******************************************************************************
+* Class to parse and subset TrueType fonts                                     *
+*                                                                              *
+* Version: 1.1                                                                 *
+* Date:    2015-11-29                                                          *
+* Author:  Olivier PLATHEY                                                     *
+*******************************************************************************/
+
+class TTFParser
+{
+       protected $f;
+       protected $tables;
+       protected $numberOfHMetrics;
+       protected $numGlyphs;
+       protected $glyphNames;
+       protected $indexToLocFormat;
+       protected $subsettedChars;
+       protected $subsettedGlyphs;
+       public $chars;
+       public $glyphs;
+       public $unitsPerEm;
+       public $xMin, $yMin, $xMax, $yMax;
+       public $postScriptName;
+       public $embeddable;
+       public $bold;
+       public $typoAscender;
+       public $typoDescender;
+       public $capHeight;
+       public $italicAngle;
+       public $underlinePosition;
+       public $underlineThickness;
+       public $isFixedPitch;
+
+       function __construct($file)
+       {
+               $this->f = fopen($file, 'rb');
+               if(!$this->f)
+                       $this->Error('Can\'t open file: '.$file);
+       }
+
+       function __destruct()
+       {
+               if(is_resource($this->f))
+                       fclose($this->f);
+       }
+
+       function Parse()
+       {
+               $this->ParseOffsetTable();
+               $this->ParseHead();
+               $this->ParseHhea();
+               $this->ParseMaxp();
+               $this->ParseHmtx();
+               $this->ParseLoca();
+               $this->ParseGlyf();
+               $this->ParseCmap();
+               $this->ParseName();
+               $this->ParseOS2();
+               $this->ParsePost();
+       }
+
+       function ParseOffsetTable()
+       {
+               $version = $this->Read(4);
+               if($version=='OTTO')
+                       $this->Error('OpenType fonts based on PostScript outlines are not supported');
+               if($version!="\x00\x01\x00\x00")
+                       $this->Error('Unrecognized file format');
+               $numTables = $this->ReadUShort();
+               $this->Skip(3*2); // searchRange, entrySelector, rangeShift
+               $this->tables = array();
+               for($i=0;$i<$numTables;$i++)
+               {
+                       $tag = $this->Read(4);
+                       $checkSum = $this->Read(4);
+                       $offset = $this->ReadULong();
+                       $length = $this->ReadULong(4);
+                       $this->tables[$tag] = array('offset'=>$offset, 'length'=>$length, 'checkSum'=>$checkSum);
+               }
+       }       
+
+       function ParseHead()
+       {
+               $this->Seek('head');
+               $this->Skip(3*4); // version, fontRevision, checkSumAdjustment
+               $magicNumber = $this->ReadULong();
+               if($magicNumber!=0x5F0F3CF5)
+                       $this->Error('Incorrect magic number');
+               $this->Skip(2); // flags
+               $this->unitsPerEm = $this->ReadUShort();
+               $this->Skip(2*8); // created, modified
+               $this->xMin = $this->ReadShort();
+               $this->yMin = $this->ReadShort();
+               $this->xMax = $this->ReadShort();
+               $this->yMax = $this->ReadShort();
+               $this->Skip(3*2); // macStyle, lowestRecPPEM, fontDirectionHint
+               $this->indexToLocFormat = $this->ReadShort();
+       }
+
+       function ParseHhea()
+       {
+               $this->Seek('hhea');
+               $this->Skip(4+15*2);
+               $this->numberOfHMetrics = $this->ReadUShort();
+       }
+
+       function ParseMaxp()
+       {
+               $this->Seek('maxp');
+               $this->Skip(4);
+               $this->numGlyphs = $this->ReadUShort();
+       }
+
+       function ParseHmtx()
+       {
+               $this->Seek('hmtx');
+               $this->glyphs = array();
+               for($i=0;$i<$this->numberOfHMetrics;$i++)
+               {
+                       $advanceWidth = $this->ReadUShort();
+                       $lsb = $this->ReadShort();
+                       $this->glyphs[$i] = array('w'=>$advanceWidth, 'lsb'=>$lsb);
+               }
+               for($i=$this->numberOfHMetrics;$i<$this->numGlyphs;$i++)
+               {
+                       $lsb = $this->ReadShort();
+                       $this->glyphs[$i] = array('w'=>$advanceWidth, 'lsb'=>$lsb);
+               }
+       }
+
+       function ParseLoca()
+       {
+               $this->Seek('loca');
+               $offsets = array();
+               if($this->indexToLocFormat==0)
+               {
+                       // Short format
+                       for($i=0;$i<=$this->numGlyphs;$i++)
+                               $offsets[] = 2*$this->ReadUShort();
+               }
+               else
+               {
+                       // Long format
+                       for($i=0;$i<=$this->numGlyphs;$i++)
+                               $offsets[] = $this->ReadULong();
+               }
+               for($i=0;$i<$this->numGlyphs;$i++)
+               {
+                       $this->glyphs[$i]['offset'] = $offsets[$i];
+                       $this->glyphs[$i]['length'] = $offsets[$i+1] - $offsets[$i];
+               }
+       }
+
+       function ParseGlyf()
+       {
+               $tableOffset = $this->tables['glyf']['offset'];
+               foreach($this->glyphs as &$glyph)
+               {
+                       if($glyph['length']>0)
+                       {
+                               fseek($this->f, $tableOffset+$glyph['offset'], SEEK_SET);
+                               if($this->ReadShort()<0)
+                               {
+                                       // Composite glyph
+                                       $this->Skip(4*2); // xMin, yMin, xMax, yMax
+                                       $offset = 5*2;
+                                       $a = array();
+                                       do
+                                       {
+                                               $flags = $this->ReadUShort();
+                                               $index = $this->ReadUShort();
+                                               $a[$offset+2] = $index;
+                                               if($flags & 1) // ARG_1_AND_2_ARE_WORDS
+                                                       $skip = 2*2;
+                                               else
+                                                       $skip = 2;
+                                               if($flags & 8) // WE_HAVE_A_SCALE
+                                                       $skip += 2;
+                                               elseif($flags & 64) // WE_HAVE_AN_X_AND_Y_SCALE
+                                                       $skip += 2*2;
+                                               elseif($flags & 128) // WE_HAVE_A_TWO_BY_TWO
+                                                       $skip += 4*2;
+                                               $this->Skip($skip);
+                                               $offset += 2*2 + $skip;
+                                       }
+                                       while($flags & 32); // MORE_COMPONENTS
+                                       $glyph['components'] = $a;
+                               }
+                       }
+               }
+       }
+
+       function ParseCmap()
+       {
+               $this->Seek('cmap');
+               $this->Skip(2); // version
+               $numTables = $this->ReadUShort();
+               $offset31 = 0;
+               for($i=0;$i<$numTables;$i++)
+               {
+                       $platformID = $this->ReadUShort();
+                       $encodingID = $this->ReadUShort();
+                       $offset = $this->ReadULong();
+                       if($platformID==3 && $encodingID==1)
+                               $offset31 = $offset;
+               }
+               if($offset31==0)
+                       $this->Error('No Unicode encoding found');
+
+               $startCount = array();
+               $endCount = array();
+               $idDelta = array();
+               $idRangeOffset = array();
+               $this->chars = array();
+               fseek($this->f, $this->tables['cmap']['offset']+$offset31, SEEK_SET);
+               $format = $this->ReadUShort();
+               if($format!=4)
+                       $this->Error('Unexpected subtable format: '.$format);
+               $this->Skip(2*2); // length, language
+               $segCount = $this->ReadUShort()/2;
+               $this->Skip(3*2); // searchRange, entrySelector, rangeShift
+               for($i=0;$i<$segCount;$i++)
+                       $endCount[$i] = $this->ReadUShort();
+               $this->Skip(2); // reservedPad
+               for($i=0;$i<$segCount;$i++)
+                       $startCount[$i] = $this->ReadUShort();
+               for($i=0;$i<$segCount;$i++)
+                       $idDelta[$i] = $this->ReadShort();
+               $offset = ftell($this->f);
+               for($i=0;$i<$segCount;$i++)
+                       $idRangeOffset[$i] = $this->ReadUShort();
+
+               for($i=0;$i<$segCount;$i++)
+               {
+                       $c1 = $startCount[$i];
+                       $c2 = $endCount[$i];
+                       $d = $idDelta[$i];
+                       $ro = $idRangeOffset[$i];
+                       if($ro>0)
+                               fseek($this->f, $offset+2*$i+$ro, SEEK_SET);
+                       for($c=$c1;$c<=$c2;$c++)
+                       {
+                               if($c==0xFFFF)
+                                       break;
+                               if($ro>0)
+                               {
+                                       $gid = $this->ReadUShort();
+                                       if($gid>0)
+                                               $gid += $d;
+                               }
+                               else
+                                       $gid = $c+$d;
+                               if($gid>=65536)
+                                       $gid -= 65536;
+                               if($gid>0)
+                                       $this->chars[$c] = $gid;
+                       }
+               }
+       }
+
+       function ParseName()
+       {
+               $this->Seek('name');
+               $tableOffset = $this->tables['name']['offset'];
+               $this->postScriptName = '';
+               $this->Skip(2); // format
+               $count = $this->ReadUShort();
+               $stringOffset = $this->ReadUShort();
+               for($i=0;$i<$count;$i++)
+               {
+                       $this->Skip(3*2); // platformID, encodingID, languageID
+                       $nameID = $this->ReadUShort();
+                       $length = $this->ReadUShort();
+                       $offset = $this->ReadUShort();
+                       if($nameID==6)
+                       {
+                               // PostScript name
+                               fseek($this->f, $tableOffset+$stringOffset+$offset, SEEK_SET);
+                               $s = $this->Read($length);
+                               $s = str_replace(chr(0), '', $s);
+                               $s = preg_replace('|[ \[\](){}<>/%]|', '', $s);
+                               $this->postScriptName = $s;
+                               break;
+                       }
+               }
+               if($this->postScriptName=='')
+                       $this->Error('PostScript name not found');
+       }
+
+       function ParseOS2()
+       {
+               $this->Seek('OS/2');
+               $version = $this->ReadUShort();
+               $this->Skip(3*2); // xAvgCharWidth, usWeightClass, usWidthClass
+               $fsType = $this->ReadUShort();
+               $this->embeddable = ($fsType!=2) && ($fsType & 0x200)==0;
+               $this->Skip(11*2+10+4*4+4);
+               $fsSelection = $this->ReadUShort();
+               $this->bold = ($fsSelection & 32)!=0;
+               $this->Skip(2*2); // usFirstCharIndex, usLastCharIndex
+               $this->typoAscender = $this->ReadShort();
+               $this->typoDescender = $this->ReadShort();
+               if($version>=2)
+               {
+                       $this->Skip(3*2+2*4+2);
+                       $this->capHeight = $this->ReadShort();
+               }
+               else
+                       $this->capHeight = 0;
+       }
+
+       function ParsePost()
+       {
+               $this->Seek('post');
+               $version = $this->ReadULong();
+               $this->italicAngle = $this->ReadShort();
+               $this->Skip(2); // Skip decimal part
+               $this->underlinePosition = $this->ReadShort();
+               $this->underlineThickness = $this->ReadShort();
+               $this->isFixedPitch = ($this->ReadULong()!=0);
+               if($version==0x20000)
+               {
+                       // Extract glyph names
+                       $this->Skip(4*4); // min/max usage
+                       $this->Skip(2); // numberOfGlyphs
+                       $glyphNameIndex = array();
+                       $names = array();
+                       $numNames = 0;
+                       for($i=0;$i<$this->numGlyphs;$i++)
+                       {
+                               $index = $this->ReadUShort();
+                               $glyphNameIndex[] = $index;
+                               if($index>=258 && $index-257>$numNames)
+                                       $numNames = $index-257;
+                       }
+                       for($i=0;$i<$numNames;$i++)
+                       {
+                               $len = ord($this->Read(1));
+                               $names[] = $this->Read($len);
+                       }
+                       foreach($glyphNameIndex as $i=>$index)
+                       {
+                               if($index>=258)
+                                       $this->glyphs[$i]['name'] = $names[$index-258];
+                               else
+                                       $this->glyphs[$i]['name'] = $index;
+                       }
+                       $this->glyphNames = true;
+               }
+               else
+                       $this->glyphNames = false;
+       }
+
+       function Subset($chars)
+       {
+/*             $chars = array_keys($this->chars);
+               $this->subsettedChars = $chars;
+               $this->subsettedGlyphs = array();
+               for($i=0;$i<$this->numGlyphs;$i++)
+               {
+                       $this->subsettedGlyphs[] = $i;
+                       $this->glyphs[$i]['ssid'] = $i;
+               }*/
+
+               $this->AddGlyph(0);
+               $this->subsettedChars = array();
+               foreach($chars as $char)
+               {
+                       if(isset($this->chars[$char]))
+                       {
+                               $this->subsettedChars[] = $char;
+                               $this->AddGlyph($this->chars[$char]);
+                       }
+               }
+       }
+
+       function AddGlyph($id)
+       {
+               if(!isset($this->glyphs[$id]['ssid']))
+               {
+                       $this->glyphs[$id]['ssid'] = count($this->subsettedGlyphs);
+                       $this->subsettedGlyphs[] = $id;
+                       if(isset($this->glyphs[$id]['components']))
+                       {
+                               foreach($this->glyphs[$id]['components'] as $cid)
+                                       $this->AddGlyph($cid);
+                       }
+               }
+       }
+
+       function Build()
+       {
+               $this->BuildCmap();
+               $this->BuildHhea();
+               $this->BuildHmtx();
+               $this->BuildLoca();
+               $this->BuildGlyf();
+               $this->BuildMaxp();
+               $this->BuildPost();
+               return $this->BuildFont();
+       }
+
+       function BuildCmap()
+       {
+               if(!isset($this->subsettedChars))
+                       return;
+
+               // Divide charset in contiguous segments
+               $chars = $this->subsettedChars;
+               sort($chars);
+               $segments = array();
+               $segment = array($chars[0], $chars[0]);
+               for($i=1;$i<count($chars);$i++)
+               {
+                       if($chars[$i]>$segment[1]+1)
+                       {
+                               $segments[] = $segment;
+                               $segment = array($chars[$i], $chars[$i]);
+                       }
+                       else
+                               $segment[1]++;
+               }
+               $segments[] = $segment;
+               $segments[] = array(0xFFFF, 0xFFFF);
+               $segCount = count($segments);
+
+               // Build a Format 4 subtable
+               $startCount = array();
+               $endCount = array();
+               $idDelta = array();
+               $idRangeOffset = array();
+               $glyphIdArray = '';
+               for($i=0;$i<$segCount;$i++)
+               {
+                       list($start, $end) = $segments[$i];
+                       $startCount[] = $start;
+                       $endCount[] = $end;
+                       if($start!=$end)
+                       {
+                               // Segment with multiple chars
+                               $idDelta[] = 0;
+                               $idRangeOffset[] = strlen($glyphIdArray) + ($segCount-$i)*2;
+                               for($c=$start;$c<=$end;$c++)
+                               {
+                                       $ssid = $this->glyphs[$this->chars[$c]]['ssid'];
+                                       $glyphIdArray .= pack('n', $ssid);
+                               }
+                       }
+                       else
+                       {
+                               // Segment with a single char
+                               if($start<0xFFFF)
+                                       $ssid = $this->glyphs[$this->chars[$start]]['ssid'];
+                               else
+                                       $ssid = 0;
+                               $idDelta[] = $ssid - $start;
+                               $idRangeOffset[] = 0;
+                       }
+               }
+               $entrySelector = 0;
+               $n = $segCount;
+               while($n!=1)
+               {
+                       $n = $n>>1;
+                       $entrySelector++;
+               }
+               $searchRange = (1<<$entrySelector)*2;
+               $rangeShift = 2*$segCount - $searchRange;
+               $cmap = pack('nnnn', 2*$segCount, $searchRange, $entrySelector, $rangeShift);
+               foreach($endCount as $val)
+                       $cmap .= pack('n', $val);
+               $cmap .= pack('n', 0); // reservedPad
+               foreach($startCount as $val)
+                       $cmap .= pack('n', $val);
+               foreach($idDelta as $val)
+                       $cmap .= pack('n', $val);
+               foreach($idRangeOffset as $val)
+                       $cmap .= pack('n', $val);
+               $cmap .= $glyphIdArray;
+
+               $data = pack('nn', 0, 1); // version, numTables
+               $data .= pack('nnN', 3, 1, 12); // platformID, encodingID, offset
+               $data .= pack('nnn', 4, 6+strlen($cmap), 0); // format, length, language
+               $data .= $cmap;
+               $this->SetTable('cmap', $data);
+       }
+
+       function BuildHhea()
+       {
+               $this->LoadTable('hhea');
+               $numberOfHMetrics = count($this->subsettedGlyphs);
+               $data = substr_replace($this->tables['hhea']['data'], pack('n',$numberOfHMetrics), 4+15*2, 2);
+               $this->SetTable('hhea', $data);
+       }
+
+       function BuildHmtx()
+       {
+               $data = '';
+               foreach($this->subsettedGlyphs as $id)
+               {
+                       $glyph = $this->glyphs[$id];
+                       $data .= pack('nn', $glyph['w'], $glyph['lsb']);
+               }
+               $this->SetTable('hmtx', $data);
+       }
+
+       function BuildLoca()
+       {
+               $data = '';
+               $offset = 0;
+               foreach($this->subsettedGlyphs as $id)
+               {
+                       if($this->indexToLocFormat==0)
+                               $data .= pack('n', $offset/2);
+                       else
+                               $data .= pack('N', $offset);
+                       $offset += $this->glyphs[$id]['length'];
+               }
+               if($this->indexToLocFormat==0)
+                       $data .= pack('n', $offset/2);
+               else
+                       $data .= pack('N', $offset);
+               $this->SetTable('loca', $data);
+       }
+
+       function BuildGlyf()
+       {
+               $tableOffset = $this->tables['glyf']['offset'];
+               $data = '';
+               foreach($this->subsettedGlyphs as $id)
+               {
+                       $glyph = $this->glyphs[$id];
+                       fseek($this->f, $tableOffset+$glyph['offset'], SEEK_SET);
+                       $glyph_data = $this->Read($glyph['length']);
+                       if(isset($glyph['components']))
+                       {
+                               // Composite glyph
+                               foreach($glyph['components'] as $offset=>$cid)
+                               {
+                                       $ssid = $this->glyphs[$cid]['ssid'];
+                                       $glyph_data = substr_replace($glyph_data, pack('n',$ssid), $offset, 2);
+                               }
+                       }
+                       $data .= $glyph_data;
+               }
+               $this->SetTable('glyf', $data);
+       }
+
+       function BuildMaxp()
+       {
+               $this->LoadTable('maxp');
+               $numGlyphs = count($this->subsettedGlyphs);
+               $data = substr_replace($this->tables['maxp']['data'], pack('n',$numGlyphs), 4, 2);
+               $this->SetTable('maxp', $data);
+       }
+
+       function BuildPost()
+       {
+               $this->Seek('post');
+               if($this->glyphNames)
+               {
+                       // Version 2.0
+                       $numberOfGlyphs = count($this->subsettedGlyphs);
+                       $numNames = 0;
+                       $names = '';
+                       $data = $this->Read(2*4+2*2+5*4);
+                       $data .= pack('n', $numberOfGlyphs);
+                       foreach($this->subsettedGlyphs as $id)
+                       {
+                               $name = $this->glyphs[$id]['name'];
+                               if(is_string($name))
+                               {
+                                       $data .= pack('n', 258+$numNames);
+                                       $names .= chr(strlen($name)).$name;
+                                       $numNames++;
+                               }
+                               else
+                                       $data .= pack('n', $name);
+                       }
+                       $data .= $names;
+               }
+               else
+               {
+                       // Version 3.0
+                       $this->Skip(4);
+                       $data = "\x00\x03\x00\x00";
+                       $data .= $this->Read(4+2*2+5*4);
+               }
+               $this->SetTable('post', $data);
+       }
+
+       function BuildFont()
+       {
+               $tags = array();
+               foreach(array('cmap', 'cvt ', 'fpgm', 'glyf', 'head', 'hhea', 'hmtx', 'loca', 'maxp', 'name', 'post', 'prep') as $tag)
+               {
+                       if(isset($this->tables[$tag]))
+                               $tags[] = $tag;
+               }
+               $numTables = count($tags);
+               $offset = 12 + 16*$numTables;
+               foreach($tags as $tag)
+               {
+                       if(!isset($this->tables[$tag]['data']))
+                               $this->LoadTable($tag);
+                       $this->tables[$tag]['offset'] = $offset;
+                       $offset += strlen($this->tables[$tag]['data']);
+               }
+//             $this->tables['head']['data'] = substr_replace($this->tables['head']['data'], "\x00\x00\x00\x00", 8, 4);
+
+               // Build offset table
+               $entrySelector = 0;
+               $n = $numTables;
+               while($n!=1)
+               {
+                       $n = $n>>1;
+                       $entrySelector++;
+               }
+               $searchRange = 16*(1<<$entrySelector);
+               $rangeShift = 16*$numTables - $searchRange;
+               $offsetTable = pack('nnnnnn', 1, 0, $numTables, $searchRange, $entrySelector, $rangeShift);
+               foreach($tags as $tag)
+               {
+                       $table = $this->tables[$tag];
+                       $offsetTable .= $tag.$table['checkSum'].pack('NN', $table['offset'], $table['length']);
+               }
+
+               // Compute checkSumAdjustment (0xB1B0AFBA - font checkSum)
+               $s = $this->CheckSum($offsetTable);
+               foreach($tags as $tag)
+                       $s .= $this->tables[$tag]['checkSum'];
+               $a = unpack('n2', $this->CheckSum($s));
+               $high = 0xB1B0 + ($a[1]^0xFFFF);
+               $low = 0xAFBA + ($a[2]^0xFFFF) + 1;
+               $checkSumAdjustment = pack('nn', $high+($low>>16), $low);
+               $this->tables['head']['data'] = substr_replace($this->tables['head']['data'], $checkSumAdjustment, 8, 4);
+
+               $font = $offsetTable;
+               foreach($tags as $tag)
+                       $font .= $this->tables[$tag]['data'];
+
+               return $font;
+       }
+
+       function LoadTable($tag)
+       {
+               $this->Seek($tag);
+               $length = $this->tables[$tag]['length'];
+               $n = $length % 4;
+               if($n>0)
+                       $length += 4 - $n;
+               $this->tables[$tag]['data'] = $this->Read($length);
+       }
+
+       function SetTable($tag, $data)
+       {
+               $length = strlen($data);
+               $n = $length % 4;
+               if($n>0)
+                       $data = str_pad($data, $length+4-$n, "\x00");
+               $this->tables[$tag]['data'] = $data;
+               $this->tables[$tag]['length'] = $length;
+               $this->tables[$tag]['checkSum'] = $this->CheckSum($data);
+       }
+
+       function Seek($tag)
+       {
+               if(!isset($this->tables[$tag]))
+                       $this->Error('Table not found: '.$tag);
+               fseek($this->f, $this->tables[$tag]['offset'], SEEK_SET);
+       }
+
+       function Skip($n)
+       {
+               fseek($this->f, $n, SEEK_CUR);
+       }
+
+       function Read($n)
+       {
+               return $n>0 ? fread($this->f, $n) : '';
+       }
+
+       function ReadUShort()
+       {
+               $a = unpack('nn', fread($this->f,2));
+               return $a['n'];
+       }
+
+       function ReadShort()
+       {
+               $a = unpack('nn', fread($this->f,2));
+               $v = $a['n'];
+               if($v>=0x8000)
+                       $v -= 65536;
+               return $v;
+       }
+
+       function ReadULong()
+       {
+               $a = unpack('NN', fread($this->f,4));
+               return $a['N'];
+       }
+
+       function CheckSum($s)
+       {
+               $n = strlen($s);
+               $high = 0;
+               $low = 0;
+               for($i=0;$i<$n;$i+=4)
+               {
+                       $high += (ord($s[$i])<<8) + ord($s[$i+1]);
+                       $low += (ord($s[$i+2])<<8) + ord($s[$i+3]);
+               }
+               return pack('nn', $high+($low>>16), $low);
+       }
+
+       function Error($msg)
+       {
+               throw new Exception($msg);
+       }
+}
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/20k_c1.txt b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/20k_c1.txt
new file mode 100755 (executable)
index 0000000..6d5b295
--- /dev/null
@@ -0,0 +1,10 @@
+The year 1866 was marked by a bizarre development, an unexplained and downright inexplicable phenomenon that surely no one has forgotten. Without getting into those rumors that upset civilians in the seaports and deranged the public mind even far inland, it must be said that professional seamen were especially alarmed. Traders, shipowners, captains of vessels, skippers, and master mariners from Europe and America, naval officers from every country, and at their heels the various national governments on these two continents, were all extremely disturbed by the business.
+In essence, over a period of time several ships had encountered "an enormous thing" at sea, a long spindle-shaped object, sometimes giving off a phosphorescent glow, infinitely bigger and faster than any whale.
+The relevant data on this apparition, as recorded in various logbooks, agreed pretty closely as to the structure of the object or creature in question, its unprecedented speed of movement, its startling locomotive power, and the unique vitality with which it seemed to be gifted.  If it was a cetacean, it exceeded in bulk any whale previously classified by science.  No naturalist, neither Cuvier nor Lacépède, neither Professor Dumeril nor Professor de Quatrefages, would have accepted the existence of such a monster sight unseen -- specifically, unseen by their own scientific eyes.
+Striking an average of observations taken at different times -- rejecting those timid estimates that gave the object a length of 200 feet, and ignoring those exaggerated views that saw it as a mile wide and three long--you could still assert that this phenomenal creature greatly exceeded the dimensions of anything then known to ichthyologists, if it existed at all.
+Now then, it did exist, this was an undeniable fact; and since the human mind dotes on objects of wonder, you can understand the worldwide excitement caused by this unearthly apparition. As for relegating it to the realm of fiction, that charge had to be dropped.
+In essence, on July 20, 1866, the steamer Governor Higginson, from the Calcutta & Burnach Steam Navigation Co., encountered this moving mass five miles off the eastern shores of Australia. Captain Baker at first thought he was in the presence of an unknown reef; he was even about to fix its exact position when two waterspouts shot out of this inexplicable object and sprang hissing into the air some 150 feet.  So, unless this reef was subject to the intermittent eruptions of a geyser, the Governor Higginson had fair and honest dealings with some aquatic mammal, until then unknown, that could spurt from its blowholes waterspouts mixed with air and steam.
+Similar events were likewise observed in Pacific seas, on July 23 of the same year, by the Christopher Columbus from the West India & Pacific Steam Navigation Co.  Consequently, this extraordinary cetacean could transfer itself from one locality to another with startling swiftness, since within an interval of just three days, the Governor Higginson and the Christopher Columbus had observed it at two positions on the charts separated by a distance of more than 700 nautical leagues.
+Fifteen days later and 2,000 leagues farther, the Helvetia from the Compagnie Nationale and the Shannon from the Royal Mail line, running on opposite tacks in that part of the Atlantic lying between the United States and Europe, respectively signaled each other that the monster had been sighted in latitude 42 degrees 15' north and longitude 60 degrees 35' west of the meridian of Greenwich.  From their simultaneous observations, they were able to estimate the mammal's minimum length at more than 350 English feet; this was because both the Shannon and the Helvetia were of smaller dimensions, although each measured 100 meters stem to stern. Now then, the biggest whales, those rorqual whales that frequent the waterways of the Aleutian Islands, have never exceeded a length of 56 meters--if they reach even that.
+One after another, reports arrived that would profoundly affect public opinion:  new observations taken by the transatlantic liner Pereire, the Inman line's Etna running afoul of the monster, an official report drawn up by officers on the French frigate Normandy, dead-earnest reckonings obtained by the general staff of Commodore Fitz-James aboard the Lord Clyde. In lighthearted countries, people joked about this phenomenon, but such serious, practical countries as England, America, and Germany were deeply concerned.
+In every big city the monster was the latest rage; they sang about it in the coffee houses, they ridiculed it in the newspapers, they dramatized it in the theaters.  The tabloids found it a fine opportunity for hatching all sorts of hoaxes. In those newspapers short of copy, you saw the reappearance of every gigantic imaginary creature, from "Moby Dick," that dreadful white whale from the High Arctic regions, to the stupendous kraken whose tentacles could entwine a 500-ton craft and drag it into the ocean depths. They even reprinted reports from ancient times: the views of Aristotle and Pliny accepting the existence of such monsters, then the Norwegian stories of Bishop Pontoppidan, the narratives of Paul Egede, and finally the reports of Captain Harrington -- whose good faith is above suspicion--in which he claims he saw, while aboard the Castilian in 1857, one of those enormous serpents that, until then, had frequented only the seas of France's old extremist newspaper, The Constitutionalist.
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/20k_c2.txt b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/20k_c2.txt
new file mode 100755 (executable)
index 0000000..7b5c565
--- /dev/null
@@ -0,0 +1,23 @@
+During the period in which these developments were occurring, I had returned from a scientific undertaking organized to explore the Nebraska badlands in the United States. In my capacity as Assistant Professor at the Paris Museum of Natural History, I had been attached to this expedition by the French government. After spending six months in Nebraska, I arrived in New York laden with valuable collections near the end of March. My departure for France was set for early May. In the meantime, then, I was busy classifying my mineralogical, botanical, and zoological treasures when that incident took place with the Scotia.
+I was perfectly abreast of this question, which was the big news of the day, and how could I not have been? I had read and reread every American and European newspaper without being any farther along. This mystery puzzled me. Finding it impossible to form any views, I drifted from one extreme to the other. Something was out there, that much was certain, and any doubting Thomas was invited to place his finger on the Scotia's wound.
+When I arrived in New York, the question was at the boiling point. The hypothesis of a drifting islet or an elusive reef, put forward by people not quite in their right minds, was completely eliminated. And indeed, unless this reef had an engine in its belly, how could it move about with such prodigious speed?
+Also discredited was the idea of a floating hull or some other enormous wreckage, and again because of this speed of movement.
+So only two possible solutions to the question were left, creating two very distinct groups of supporters: on one side, those favoring a monster of colossal strength; on the other, those favoring an "underwater boat" of tremendous motor power.
+Now then, although the latter hypothesis was completely admissible, it couldn't stand up to inquiries conducted in both the New World and the Old. That a private individual had such a mechanism at his disposal was less than probable. Where and when had he built it, and how could he have built it in secret?
+Only some government could own such an engine of destruction, and in these disaster-filled times, when men tax their ingenuity to build increasingly powerful aggressive weapons, it was possible that, unknown to the rest of the world, some nation could have been testing such a fearsome machine. The Chassepot rifle led to the torpedo, and the torpedo has led to this underwater battering ram, which in turn will lead to the world putting its foot down. At least I hope it will.
+But this hypothesis of a war machine collapsed in the face of formal denials from the various governments. Since the public interest was at stake and transoceanic travel was suffering, the sincerity of these governments could not be doubted. Besides, how could the assembly of this underwater boat have escaped public notice? Keeping a secret under such circumstances would be difficult enough for an individual, and certainly impossible for a nation whose every move is under constant surveillance by rival powers.
+So, after inquiries conducted in England, France, Russia, Prussia, Spain, Italy, America, and even Turkey, the hypothesis of an underwater Monitor was ultimately rejected.
+After I arrived in New York, several people did me the honor of consulting me on the phenomenon in question. In France I had published a two-volume work, in quarto, entitled The Mysteries of the Great Ocean Depths. Well received in scholarly circles, this book had established me as a specialist in this pretty obscure field of natural history. My views were in demand. As long as I could deny the reality of the business, I confined myself to a flat "no comment." But soon, pinned to the wall, I had to explain myself straight out. And in this vein, "the honorable Pierre Aronnax, Professor at the Paris Museum," was summoned by The New York Herald to formulate his views no matter what.
+I complied. Since I could no longer hold my tongue, I let it wag. I discussed the question in its every aspect, both political and scientific, and this is an excerpt from the well-padded article I published in the issue of April 30.
+
+"Therefore," I wrote, "after examining these different hypotheses one by one, we are forced, every other supposition having been refuted, to accept the existence of an extremely powerful marine animal.
+"The deepest parts of the ocean are totally unknown to us. No soundings have been able to reach them. What goes on in those distant depths? What creatures inhabit, or could inhabit, those regions twelve or fifteen miles beneath the surface of the water? What is the constitution of these animals? It's almost beyond conjecture.
+"However, the solution to this problem submitted to me can take the form of a choice between two alternatives.
+"Either we know every variety of creature populating our planet, or we do not.
+"If we do not know every one of them, if nature still keeps ichthyological secrets from us, nothing is more admissible than to accept the existence of fish or cetaceans of new species or even new genera, animals with a basically 'cast-iron' constitution that inhabit strata beyond the reach of our soundings, and which some development or other, an urge or a whim if you prefer, can bring to the upper level of the ocean for long intervals.
+"If, on the other hand, we do know every living species, we must look for the animal in question among those marine creatures already cataloged, and in this event I would be inclined to accept the existence of a giant narwhale.
+"The common narwhale, or sea unicorn, often reaches a length of sixty feet. Increase its dimensions fivefold or even tenfold, then give this cetacean a strength in proportion to its size while enlarging its offensive weapons, and you have the animal we're looking for. It would have the proportions determined by the officers of the Shannon, the instrument needed to perforate the Scotia, and the power to pierce a steamer's hull.
+"In essence, the narwhale is armed with a sort of ivory sword, or lance, as certain naturalists have expressed it. It's a king-sized tooth as hard as steel. Some of these teeth have been found buried in the bodies of baleen whales, which the narwhale attacks with invariable success. Others have been wrenched, not without difficulty, from the undersides of vessels that narwhales have pierced clean through, as a gimlet pierces a wine barrel. The museum at the Faculty of Medicine in Paris owns one of these tusks with a length of 2.25 meters and a width at its base of forty-eight centimeters!
+"All right then! Imagine this weapon to be ten times stronger and the animal ten times more powerful, launch it at a speed of twenty miles per hour, multiply its mass times its velocity, and you get just the collision we need to cause the specified catastrophe.
+"So, until information becomes more abundant, I plump for a sea unicorn of colossal dimensions, no longer armed with a mere lance but with an actual spur, like ironclad frigates or those warships called 'rams,' whose mass and motor power it would possess simultaneously.
+"This inexplicable phenomenon is thus explained away--unless it's something else entirely, which, despite everything that has been sighted, studied, explored and experienced, is still possible!"
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/calligra.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/calligra.php
new file mode 100755 (executable)
index 0000000..a9cfdb3
--- /dev/null
@@ -0,0 +1,25 @@
+<?php
+$type = 'TrueType';
+$name = 'CalligrapherRegular';
+$desc = array('Ascent'=>899,'Descent'=>-234,'CapHeight'=>899,'Flags'=>32,'FontBBox'=>'[-173 -234 1328 899]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>800);
+$up = -200;
+$ut = 20;
+$cw = array(
+       chr(0)=>800,chr(1)=>800,chr(2)=>800,chr(3)=>800,chr(4)=>800,chr(5)=>800,chr(6)=>800,chr(7)=>800,chr(8)=>800,chr(9)=>800,chr(10)=>800,chr(11)=>800,chr(12)=>800,chr(13)=>800,chr(14)=>800,chr(15)=>800,chr(16)=>800,chr(17)=>800,chr(18)=>800,chr(19)=>800,chr(20)=>800,chr(21)=>800,
+       chr(22)=>800,chr(23)=>800,chr(24)=>800,chr(25)=>800,chr(26)=>800,chr(27)=>800,chr(28)=>800,chr(29)=>800,chr(30)=>800,chr(31)=>800,' '=>282,'!'=>324,'"'=>405,'#'=>584,'$'=>632,'%'=>980,'&'=>776,'\''=>259,'('=>299,')'=>299,'*'=>377,'+'=>600,
+       ','=>259,'-'=>432,'.'=>254,'/'=>597,'0'=>529,'1'=>298,'2'=>451,'3'=>359,'4'=>525,'5'=>423,'6'=>464,'7'=>417,'8'=>457,'9'=>479,':'=>275,';'=>282,'<'=>600,'='=>600,'>'=>600,'?'=>501,'@'=>800,'A'=>743,
+       'B'=>636,'C'=>598,'D'=>712,'E'=>608,'F'=>562,'G'=>680,'H'=>756,'I'=>308,'J'=>314,'K'=>676,'L'=>552,'M'=>1041,'N'=>817,'O'=>729,'P'=>569,'Q'=>698,'R'=>674,'S'=>618,'T'=>673,'U'=>805,'V'=>753,'W'=>1238,
+       'X'=>716,'Y'=>754,'Z'=>599,'['=>315,'\\'=>463,']'=>315,'^'=>600,'_'=>547,'`'=>278,'a'=>581,'b'=>564,'c'=>440,'d'=>571,'e'=>450,'f'=>347,'g'=>628,'h'=>611,'i'=>283,'j'=>283,'k'=>560,'l'=>252,'m'=>976,
+       'n'=>595,'o'=>508,'p'=>549,'q'=>540,'r'=>395,'s'=>441,'t'=>307,'u'=>614,'v'=>556,'w'=>915,'x'=>559,'y'=>597,'z'=>452,'{'=>315,'|'=>222,'}'=>315,'~'=>600,chr(127)=>800,chr(128)=>800,chr(129)=>800,chr(130)=>0,chr(131)=>0,
+       chr(132)=>0,chr(133)=>780,chr(134)=>0,chr(135)=>0,chr(136)=>278,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>1064,chr(141)=>800,chr(142)=>0,chr(143)=>800,chr(144)=>800,chr(145)=>259,chr(146)=>259,chr(147)=>470,chr(148)=>470,chr(149)=>500,chr(150)=>300,chr(151)=>600,chr(152)=>278,chr(153)=>990,
+       chr(154)=>0,chr(155)=>0,chr(156)=>790,chr(157)=>800,chr(158)=>800,chr(159)=>754,chr(160)=>282,chr(161)=>324,chr(162)=>450,chr(163)=>640,chr(164)=>518,chr(165)=>603,chr(166)=>0,chr(167)=>519,chr(168)=>254,chr(169)=>800,chr(170)=>349,chr(171)=>0,chr(172)=>0,chr(173)=>432,chr(174)=>800,chr(175)=>278,
+       chr(176)=>0,chr(177)=>0,chr(178)=>0,chr(179)=>0,chr(180)=>278,chr(181)=>614,chr(182)=>0,chr(183)=>254,chr(184)=>278,chr(185)=>0,chr(186)=>305,chr(187)=>0,chr(188)=>0,chr(189)=>0,chr(190)=>0,chr(191)=>501,chr(192)=>743,chr(193)=>743,chr(194)=>743,chr(195)=>743,chr(196)=>743,chr(197)=>743,
+       chr(198)=>1060,chr(199)=>598,chr(200)=>608,chr(201)=>608,chr(202)=>608,chr(203)=>608,chr(204)=>308,chr(205)=>308,chr(206)=>308,chr(207)=>308,chr(208)=>0,chr(209)=>817,chr(210)=>729,chr(211)=>729,chr(212)=>729,chr(213)=>729,chr(214)=>729,chr(215)=>0,chr(216)=>729,chr(217)=>805,chr(218)=>805,chr(219)=>805,
+       chr(220)=>805,chr(221)=>0,chr(222)=>0,chr(223)=>688,chr(224)=>581,chr(225)=>581,chr(226)=>581,chr(227)=>581,chr(228)=>581,chr(229)=>581,chr(230)=>792,chr(231)=>440,chr(232)=>450,chr(233)=>450,chr(234)=>450,chr(235)=>450,chr(236)=>283,chr(237)=>283,chr(238)=>283,chr(239)=>283,chr(240)=>0,chr(241)=>595,
+       chr(242)=>508,chr(243)=>508,chr(244)=>508,chr(245)=>508,chr(246)=>508,chr(247)=>0,chr(248)=>508,chr(249)=>614,chr(250)=>614,chr(251)=>614,chr(252)=>614,chr(253)=>0,chr(254)=>0,chr(255)=>597);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+$file = 'calligra.z';
+$originalsize = 33948;
+$subsetted = true;
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/calligra.ttf b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/calligra.ttf
new file mode 100755 (executable)
index 0000000..9713c46
Binary files /dev/null and b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/calligra.ttf differ
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/calligra.z b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/calligra.z
new file mode 100755 (executable)
index 0000000..8a14e9c
Binary files /dev/null and b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/calligra.z differ
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/countries.txt b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/countries.txt
new file mode 100755 (executable)
index 0000000..5a48a42
--- /dev/null
@@ -0,0 +1,15 @@
+Austria;Vienna;83859;8075
+Belgium;Brussels;30518;10192
+Denmark;Copenhagen;43094;5295
+Finland;Helsinki;304529;5147
+France;Paris;543965;58728
+Germany;Berlin;357022;82057
+Greece;Athens;131625;10511
+Ireland;Dublin;70723;3694
+Italy;Roma;301316;57563
+Luxembourg;Luxembourg;2586;424
+Netherlands;Amsterdam;41526;15654
+Portugal;Lisbon;91906;9957
+Spain;Madrid;504790;39348
+Sweden;Stockholm;410934;8839
+United Kingdom;London;243820;58862
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/index.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/index.htm
new file mode 100755 (executable)
index 0000000..d1f8fb6
--- /dev/null
@@ -0,0 +1,20 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Tutorials</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Tutorials</h1>
+<ul style="list-style-type:none; margin-left:0; padding-left:0">
+<li><a href="tuto1.htm">Tutorial 1</a>: Minimal example</li>
+<li><a href="tuto2.htm">Tutorial 2</a>: Header, footer, page break and image</li>
+<li><a href="tuto3.htm">Tutorial 3</a>: Line breaks and colors</li>
+<li><a href="tuto4.htm">Tutorial 4</a>: Multi-columns</li>
+<li><a href="tuto5.htm">Tutorial 5</a>: Tables</li>
+<li><a href="tuto6.htm">Tutorial 6</a>: Links and flowing text</li>
+<li><a href="tuto7.htm">Tutorial 7</a>: Adding new fonts and encodings</li>
+</ul>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/logo.png b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/logo.png
new file mode 100755 (executable)
index 0000000..284a007
Binary files /dev/null and b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/logo.png differ
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/makefont.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/makefont.php
new file mode 100755 (executable)
index 0000000..7a09201
--- /dev/null
@@ -0,0 +1,6 @@
+<?php
+// Generation of font definition file for tutorial 7
+require('../makefont/makefont.php');
+
+MakeFont('calligra.ttf','cp1252');
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto1.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto1.htm
new file mode 100755 (executable)
index 0000000..0b95c93
--- /dev/null
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Minimal example</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Minimal example</h1>
+Let's start with the classic example:
+<div class="source">
+<pre><code>&lt;?php
+<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
+
+</span>$pdf <span class="kw">= new </span>FPDF<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">,</span>16<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Cell<span class="kw">(</span>40<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Hello World!'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">();
+</span>?&gt;</code></pre>
+</div>
+<p class='demo'><a href='tuto1.php' target='_blank' class='demo'>[Demo]</a></p>
+After including the library file, we create an FPDF object.
+The <a href='../doc/__construct.htm'>constructor</a> is used here with the default values: pages are in A4 portrait and
+the unit of measure is millimeter. It could have been specified explicitly with:
+<div class="source">
+<pre><code>$pdf <span class="kw">= new </span>FPDF<span class="kw">(</span><span class="str">'P'</span><span class="kw">,</span><span class="str">'mm'</span><span class="kw">,</span><span class="str">'A4'</span><span class="kw">);
+</span></code></pre>
+</div>
+It's possible to use landscape (<code>L</code>), other page sizes (such as <code>Letter</code> and
+<code>Legal</code>) and units (<code>pt</code>, <code>cm</code>, <code>in</code>).
+<br>
+<br>
+There's no page at the moment, so we have to add one with <a href='../doc/addpage.htm'>AddPage()</a>. The origin
+is at the upper-left corner and the current position is by default set at 1 cm from the
+borders; the margins can be changed with <a href='../doc/setmargins.htm'>SetMargins()</a>.
+<br>
+<br>
+Before we can print text, it's mandatory to select a font with <a href='../doc/setfont.htm'>SetFont()</a>.
+We choose Arial bold 16:
+<div class="source">
+<pre><code>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">,</span>16<span class="kw">);
+</span></code></pre>
+</div>
+We could have specified italics with I, underlined with U or a regular font with an empty string
+(or any combination). Note that the font size is given in points, not millimeters (or another user
+unit); it's the only exception. The other standard fonts are Times, Courier, Symbol and ZapfDingbats.
+<br>
+<br>
+We can now print a cell with <a href='../doc/cell.htm'>Cell()</a>. A cell is a rectangular area, possibly framed,
+which contains a line of text. It is output at the current position. We specify its dimensions,
+its text (centered or aligned), if borders should be drawn, and where the current position
+moves after it (to the right, below or to the beginning of the next line). To add a frame, we would do this:
+<div class="source">
+<pre><code>$pdf<span class="kw">-&gt;</span>Cell<span class="kw">(</span>40<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Hello World !'</span><span class="kw">,</span>1<span class="kw">);
+</span></code></pre>
+</div>
+To add a new cell next to it with centered text and go to the next line, we would do:
+<div class="source">
+<pre><code>$pdf<span class="kw">-&gt;</span>Cell<span class="kw">(</span>60<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Powered by FPDF.'</span><span class="kw">,</span>0<span class="kw">,</span>1<span class="kw">,</span><span class="str">'C'</span><span class="kw">);
+</span></code></pre>
+</div>
+Remark: the line break can also be done with <a href='../doc/ln.htm'>Ln()</a>. This method additionnaly allows to specify
+the height of the break.
+<br>
+<br>
+Finally, the document is closed and sent to the browser with <a href='../doc/output.htm'>Output()</a>. We could have saved
+it to a file by passing the appropriate parameters.
+<br>
+<br>
+<strong>Caution:</strong> in case when the PDF is sent to the browser, nothing else must be output by the
+script, neither before nor after (no HTML, not even a space or a carriage return). If you send something
+before, you will get the error message: "Some data has already been output, can't send PDF file". If you
+send something after, the document might not display.
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto1.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto1.php
new file mode 100755 (executable)
index 0000000..3ab55a1
--- /dev/null
@@ -0,0 +1,9 @@
+<?php
+require('../fpdf.php');
+
+$pdf = new FPDF();
+$pdf->AddPage();
+$pdf->SetFont('Arial','B',16);
+$pdf->Cell(40,10,'Hello World!');
+$pdf->Output();
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto2.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto2.htm
new file mode 100755 (executable)
index 0000000..c402cf4
--- /dev/null
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Header, footer, page break and image</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Header, footer, page break and image</h1>
+Here's a two page example with header, footer and logo:
+<div class="source">
+<pre><code>&lt;?php
+<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
+
+class </span>PDF <span class="kw">extends </span>FPDF
+<span class="kw">{
+</span><span class="cmt">// Page header
+</span><span class="kw">function </span>Header<span class="kw">()
+{
+    </span><span class="cmt">// Logo
+    </span>$<span class="kw">this-&gt;</span>Image<span class="kw">(</span><span class="str">'logo.png'</span><span class="kw">,</span>10<span class="kw">,</span>6<span class="kw">,</span>30<span class="kw">);
+    </span><span class="cmt">// Arial bold 15
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">,</span>15<span class="kw">);
+    </span><span class="cmt">// Move to the right
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>80<span class="kw">);
+    </span><span class="cmt">// Title
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>30<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Title'</span><span class="kw">,</span>1<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">);
+    </span><span class="cmt">// Line break
+    </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(</span>20<span class="kw">);
+}
+
+</span><span class="cmt">// Page footer
+</span><span class="kw">function </span>Footer<span class="kw">()
+{
+    </span><span class="cmt">// Position at 1.5 cm from bottom
+    </span>$<span class="kw">this-&gt;</span>SetY<span class="kw">(-</span>15<span class="kw">);
+    </span><span class="cmt">// Arial italic 8
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'I'</span><span class="kw">,</span>8<span class="kw">);
+    </span><span class="cmt">// Page number
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Page '</span><span class="kw">.</span>$<span class="kw">this-&gt;</span>PageNo<span class="kw">().</span><span class="str">'/{nb}'</span><span class="kw">,</span>0<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">);
+}
+}
+
+</span><span class="cmt">// Instanciation of inherited class
+</span>$pdf <span class="kw">= new </span>PDF<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>AliasNbPages<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Times'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>12<span class="kw">);
+for(</span>$i<span class="kw">=</span>1<span class="kw">;</span>$i<span class="kw">&lt;=</span>40<span class="kw">;</span>$i<span class="kw">++)
+    </span>$pdf<span class="kw">-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Printing line number '</span><span class="kw">.</span>$i<span class="kw">,</span>0<span class="kw">,</span>1<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">();
+</span>?&gt;</code></pre>
+</div>
+<p class='demo'><a href='tuto2.php' target='_blank' class='demo'>[Demo]</a></p>
+This example makes use of the <a href='../doc/header.htm'>Header()</a> and <a href='../doc/footer.htm'>Footer()</a> methods to process page headers and
+footers. They are called automatically. They already exist in the FPDF class but do nothing,
+therefore we have to extend the class and override them.
+<br>
+<br>
+The logo is printed with the <a href='../doc/image.htm'>Image()</a> method by specifying its upper-left corner and
+its width. The height is calculated automatically to respect the image proportions.
+<br>
+<br>
+To print the page number, a null value is passed as the cell width. It means that the cell
+should extend up to the right margin of the page; this is handy to center text. The current page
+number is returned by the <a href='../doc/pageno.htm'>PageNo()</a> method; as for the total number of pages, it's obtained
+via the special value <code>{nb}</code> which is substituted when the document is finished
+(provided you first called <a href='../doc/aliasnbpages.htm'>AliasNbPages()</a>).
+<br>
+Note the use of the <a href='../doc/sety.htm'>SetY()</a> method which allows to set position at an absolute location in
+the page, starting from the top or the bottom.
+<br>
+<br>
+Another interesting feature is used here: the automatic page breaking. As soon as a cell would
+cross a limit in the page (at 2 centimeters from the bottom by default), a break is issued
+and the font restored. Although the header and footer select their own font (Arial), the body
+continues with Times. This mechanism of automatic restoration also applies to colors and line
+width. The limit which triggers page breaks can be set with <a href='../doc/setautopagebreak.htm'>SetAutoPageBreak()</a>.
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto2.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto2.php
new file mode 100755 (executable)
index 0000000..6a1b4f8
--- /dev/null
@@ -0,0 +1,41 @@
+<?php
+require('../fpdf.php');
+
+class PDF extends FPDF
+{
+// Page header
+function Header()
+{
+       // Logo
+       $this->Image('logo.png',10,6,30);
+       // Arial bold 15
+       $this->SetFont('Arial','B',15);
+       // Move to the right
+       $this->Cell(80);
+       // Title
+       $this->Cell(30,10,'Title',1,0,'C');
+       // Line break
+       $this->Ln(20);
+}
+
+// Page footer
+function Footer()
+{
+       // Position at 1.5 cm from bottom
+       $this->SetY(-15);
+       // Arial italic 8
+       $this->SetFont('Arial','I',8);
+       // Page number
+       $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
+}
+}
+
+// Instanciation of inherited class
+$pdf = new PDF();
+$pdf->AliasNbPages();
+$pdf->AddPage();
+$pdf->SetFont('Times','',12);
+for($i=1;$i<=40;$i++)
+       $pdf->Cell(0,10,'Printing line number '.$i,0,1);
+$pdf->Output();
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto3.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto3.htm
new file mode 100755 (executable)
index 0000000..5d8363f
--- /dev/null
@@ -0,0 +1,115 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Line breaks and colors</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Line breaks and colors</h1>
+Let's continue with an example which prints justified paragraphs. It also illustrates the use
+of colors.
+<div class="source">
+<pre><code>&lt;?php
+<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
+
+class </span>PDF <span class="kw">extends </span>FPDF
+<span class="kw">{
+function </span>Header<span class="kw">()
+{
+    global </span>$title<span class="kw">;
+
+    </span><span class="cmt">// Arial bold 15
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">,</span>15<span class="kw">);
+    </span><span class="cmt">// Calculate width of title and position
+    </span>$w <span class="kw">= </span>$<span class="kw">this-&gt;</span>GetStringWidth<span class="kw">(</span>$title<span class="kw">)+</span>6<span class="kw">;
+    </span>$<span class="kw">this-&gt;</span>SetX<span class="kw">((</span>210<span class="kw">-</span>$w<span class="kw">)/</span>2<span class="kw">);
+    </span><span class="cmt">// Colors of frame, background and text
+    </span>$<span class="kw">this-&gt;</span>SetDrawColor<span class="kw">(</span>0<span class="kw">,</span>80<span class="kw">,</span>180<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetFillColor<span class="kw">(</span>230<span class="kw">,</span>230<span class="kw">,</span>0<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>220<span class="kw">,</span>50<span class="kw">,</span>50<span class="kw">);
+    </span><span class="cmt">// Thickness of frame (1 mm)
+    </span>$<span class="kw">this-&gt;</span>SetLineWidth<span class="kw">(</span>1<span class="kw">);
+    </span><span class="cmt">// Title
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">,</span>9<span class="kw">,</span>$title<span class="kw">,</span>1<span class="kw">,</span>1<span class="kw">,</span><span class="str">'C'</span><span class="kw">,</span>true<span class="kw">);
+    </span><span class="cmt">// Line break
+    </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(</span>10<span class="kw">);
+}
+
+function </span>Footer<span class="kw">()
+{
+    </span><span class="cmt">// Position at 1.5 cm from bottom
+    </span>$<span class="kw">this-&gt;</span>SetY<span class="kw">(-</span>15<span class="kw">);
+    </span><span class="cmt">// Arial italic 8
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'I'</span><span class="kw">,</span>8<span class="kw">);
+    </span><span class="cmt">// Text color in gray
+    </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>128<span class="kw">);
+    </span><span class="cmt">// Page number
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Page '</span><span class="kw">.</span>$<span class="kw">this-&gt;</span>PageNo<span class="kw">(),</span>0<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">);
+}
+
+function </span>ChapterTitle<span class="kw">(</span>$num<span class="kw">, </span>$label<span class="kw">)
+{
+    </span><span class="cmt">// Arial 12
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>12<span class="kw">);
+    </span><span class="cmt">// Background color
+    </span>$<span class="kw">this-&gt;</span>SetFillColor<span class="kw">(</span>200<span class="kw">,</span>220<span class="kw">,</span>255<span class="kw">);
+    </span><span class="cmt">// Title
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>6<span class="kw">,</span><span class="str">"Chapter </span>$num<span class="str"> : </span>$label<span class="str">"</span><span class="kw">,</span>0<span class="kw">,</span>1<span class="kw">,</span><span class="str">'L'</span><span class="kw">,</span>true<span class="kw">);
+    </span><span class="cmt">// Line break
+    </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(</span>4<span class="kw">);
+}
+
+function </span>ChapterBody<span class="kw">(</span>$file<span class="kw">)
+{
+    </span><span class="cmt">// Read text file
+    </span>$txt <span class="kw">= </span>file_get_contents<span class="kw">(</span>$file<span class="kw">);
+    </span><span class="cmt">// Times 12
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Times'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>12<span class="kw">);
+    </span><span class="cmt">// Output justified text
+    </span>$<span class="kw">this-&gt;</span>MultiCell<span class="kw">(</span>0<span class="kw">,</span>5<span class="kw">,</span>$txt<span class="kw">);
+    </span><span class="cmt">// Line break
+    </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
+    </span><span class="cmt">// Mention in italics
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span><span class="str">'I'</span><span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>5<span class="kw">,</span><span class="str">'(end of excerpt)'</span><span class="kw">);
+}
+
+function </span>PrintChapter<span class="kw">(</span>$num<span class="kw">, </span>$title<span class="kw">, </span>$file<span class="kw">)
+{
+    </span>$<span class="kw">this-&gt;</span>AddPage<span class="kw">();
+    </span>$<span class="kw">this-&gt;</span>ChapterTitle<span class="kw">(</span>$num<span class="kw">,</span>$title<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>ChapterBody<span class="kw">(</span>$file<span class="kw">);
+}
+}
+
+</span>$pdf <span class="kw">= new </span>PDF<span class="kw">();
+</span>$title <span class="kw">= </span><span class="str">'20000 Leagues Under the Seas'</span><span class="kw">;
+</span>$pdf<span class="kw">-&gt;</span>SetTitle<span class="kw">(</span>$title<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>SetAuthor<span class="kw">(</span><span class="str">'Jules Verne'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>PrintChapter<span class="kw">(</span>1<span class="kw">,</span><span class="str">'A RUNAWAY REEF'</span><span class="kw">,</span><span class="str">'20k_c1.txt'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>PrintChapter<span class="kw">(</span>2<span class="kw">,</span><span class="str">'THE PROS AND CONS'</span><span class="kw">,</span><span class="str">'20k_c2.txt'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">();
+</span>?&gt;</code></pre>
+</div>
+<p class='demo'><a href='tuto3.php' target='_blank' class='demo'>[Demo]</a></p>
+The <a href='../doc/getstringwidth.htm'>GetStringWidth()</a> method allows to determine the length of a string in the current font,
+which is used here to calculate the position and the width of the frame surrounding the title.
+Then colors are set (via <a href='../doc/setdrawcolor.htm'>SetDrawColor()</a>, <a href='../doc/setfillcolor.htm'>SetFillColor()</a> and <a href='../doc/settextcolor.htm'>SetTextColor()</a>) and the
+thickness of the line is set to 1 mm (instead of 0.2 by default) with <a href='../doc/setlinewidth.htm'>SetLineWidth()</a>. Finally,
+we output the cell (the last parameter <code>true</code> indicates that the background must
+be filled).
+<br>
+<br>
+The method used to print the paragraphs is <a href='../doc/multicell.htm'>MultiCell()</a>. Each time a line reaches the
+right extremity of the cell or a carriage return character is met, a line break is issued
+and a new cell automatically created under the current one. Text is justified by default.
+<br>
+<br>
+Two document properties are defined: the title (<a href='../doc/settitle.htm'>SetTitle()</a>) and the author (<a href='../doc/setauthor.htm'>SetAuthor()</a>).
+There are several ways to view them in Adobe Reader. The first one is to open the file directly with
+the reader, go to the File menu and choose the Properties option. The second one, also available from
+the plug-in, is to right-click and select Document Properties. The third method is to type the Ctrl+D
+key combination.
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto3.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto3.php
new file mode 100755 (executable)
index 0000000..3316ddb
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+require('../fpdf.php');
+
+class PDF extends FPDF
+{
+function Header()
+{
+       global $title;
+
+       // Arial bold 15
+       $this->SetFont('Arial','B',15);
+       // Calculate width of title and position
+       $w = $this->GetStringWidth($title)+6;
+       $this->SetX((210-$w)/2);
+       // Colors of frame, background and text
+       $this->SetDrawColor(0,80,180);
+       $this->SetFillColor(230,230,0);
+       $this->SetTextColor(220,50,50);
+       // Thickness of frame (1 mm)
+       $this->SetLineWidth(1);
+       // Title
+       $this->Cell($w,9,$title,1,1,'C',true);
+       // Line break
+       $this->Ln(10);
+}
+
+function Footer()
+{
+       // Position at 1.5 cm from bottom
+       $this->SetY(-15);
+       // Arial italic 8
+       $this->SetFont('Arial','I',8);
+       // Text color in gray
+       $this->SetTextColor(128);
+       // Page number
+       $this->Cell(0,10,'Page '.$this->PageNo(),0,0,'C');
+}
+
+function ChapterTitle($num, $label)
+{
+       // Arial 12
+       $this->SetFont('Arial','',12);
+       // Background color
+       $this->SetFillColor(200,220,255);
+       // Title
+       $this->Cell(0,6,"Chapter $num : $label",0,1,'L',true);
+       // Line break
+       $this->Ln(4);
+}
+
+function ChapterBody($file)
+{
+       // Read text file
+       $txt = file_get_contents($file);
+       // Times 12
+       $this->SetFont('Times','',12);
+       // Output justified text
+       $this->MultiCell(0,5,$txt);
+       // Line break
+       $this->Ln();
+       // Mention in italics
+       $this->SetFont('','I');
+       $this->Cell(0,5,'(end of excerpt)');
+}
+
+function PrintChapter($num, $title, $file)
+{
+       $this->AddPage();
+       $this->ChapterTitle($num,$title);
+       $this->ChapterBody($file);
+}
+}
+
+$pdf = new PDF();
+$title = '20000 Leagues Under the Seas';
+$pdf->SetTitle($title);
+$pdf->SetAuthor('Jules Verne');
+$pdf->PrintChapter(1,'A RUNAWAY REEF','20k_c1.txt');
+$pdf->PrintChapter(2,'THE PROS AND CONS','20k_c2.txt');
+$pdf->Output();
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto4.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto4.htm
new file mode 100755 (executable)
index 0000000..05ccde2
--- /dev/null
@@ -0,0 +1,132 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Multi-columns</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Multi-columns</h1>
+This example is a variant of the previous one showing how to lay the text across multiple
+columns.
+<div class="source">
+<pre><code>&lt;?php
+<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
+
+class </span>PDF <span class="kw">extends </span>FPDF
+<span class="kw">{
+protected </span>$col <span class="kw">= </span>0<span class="kw">; </span><span class="cmt">// Current column
+</span><span class="kw">protected </span>$y0<span class="kw">;      </span><span class="cmt">// Ordinate of column start
+
+</span><span class="kw">function </span>Header<span class="kw">()
+{
+    </span><span class="cmt">// Page header
+    </span><span class="kw">global </span>$title<span class="kw">;
+
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">,</span>15<span class="kw">);
+    </span>$w <span class="kw">= </span>$<span class="kw">this-&gt;</span>GetStringWidth<span class="kw">(</span>$title<span class="kw">)+</span>6<span class="kw">;
+    </span>$<span class="kw">this-&gt;</span>SetX<span class="kw">((</span>210<span class="kw">-</span>$w<span class="kw">)/</span>2<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetDrawColor<span class="kw">(</span>0<span class="kw">,</span>80<span class="kw">,</span>180<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetFillColor<span class="kw">(</span>230<span class="kw">,</span>230<span class="kw">,</span>0<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>220<span class="kw">,</span>50<span class="kw">,</span>50<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetLineWidth<span class="kw">(</span>1<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">,</span>9<span class="kw">,</span>$title<span class="kw">,</span>1<span class="kw">,</span>1<span class="kw">,</span><span class="str">'C'</span><span class="kw">,</span>true<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(</span>10<span class="kw">);
+    </span><span class="cmt">// Save ordinate
+    </span>$<span class="kw">this-&gt;</span>y0 <span class="kw">= </span>$<span class="kw">this-&gt;</span>GetY<span class="kw">();
+}
+
+function </span>Footer<span class="kw">()
+{
+    </span><span class="cmt">// Page footer
+    </span>$<span class="kw">this-&gt;</span>SetY<span class="kw">(-</span>15<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'I'</span><span class="kw">,</span>8<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>128<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Page '</span><span class="kw">.</span>$<span class="kw">this-&gt;</span>PageNo<span class="kw">(),</span>0<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">);
+}
+
+function </span>SetCol<span class="kw">(</span>$col<span class="kw">)
+{
+    </span><span class="cmt">// Set position at a given column
+    </span>$<span class="kw">this-&gt;</span>col <span class="kw">= </span>$col<span class="kw">;
+    </span>$x <span class="kw">= </span>10<span class="kw">+</span>$col<span class="kw">*</span>65<span class="kw">;
+    </span>$<span class="kw">this-&gt;</span>SetLeftMargin<span class="kw">(</span>$x<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetX<span class="kw">(</span>$x<span class="kw">);
+}
+
+function </span>AcceptPageBreak<span class="kw">()
+{
+    </span><span class="cmt">// Method accepting or not automatic page break
+    </span><span class="kw">if(</span>$<span class="kw">this-&gt;</span>col<span class="kw">&lt;</span>2<span class="kw">)
+    {
+        </span><span class="cmt">// Go to next column
+        </span>$<span class="kw">this-&gt;</span>SetCol<span class="kw">(</span>$<span class="kw">this-&gt;</span>col<span class="kw">+</span>1<span class="kw">);
+        </span><span class="cmt">// Set ordinate to top
+        </span>$<span class="kw">this-&gt;</span>SetY<span class="kw">(</span>$<span class="kw">this-&gt;</span>y0<span class="kw">);
+        </span><span class="cmt">// Keep on page
+        </span><span class="kw">return </span>false<span class="kw">;
+    }
+    else
+    {
+        </span><span class="cmt">// Go back to first column
+        </span>$<span class="kw">this-&gt;</span>SetCol<span class="kw">(</span>0<span class="kw">);
+        </span><span class="cmt">// Page break
+        </span><span class="kw">return </span>true<span class="kw">;
+    }
+}
+
+function </span>ChapterTitle<span class="kw">(</span>$num<span class="kw">, </span>$label<span class="kw">)
+{
+    </span><span class="cmt">// Title
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>12<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetFillColor<span class="kw">(</span>200<span class="kw">,</span>220<span class="kw">,</span>255<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>6<span class="kw">,</span><span class="str">"Chapter </span>$num<span class="str"> : </span>$label<span class="str">"</span><span class="kw">,</span>0<span class="kw">,</span>1<span class="kw">,</span><span class="str">'L'</span><span class="kw">,</span>true<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(</span>4<span class="kw">);
+    </span><span class="cmt">// Save ordinate
+    </span>$<span class="kw">this-&gt;</span>y0 <span class="kw">= </span>$<span class="kw">this-&gt;</span>GetY<span class="kw">();
+}
+
+function </span>ChapterBody<span class="kw">(</span>$file<span class="kw">)
+{
+    </span><span class="cmt">// Read text file
+    </span>$txt <span class="kw">= </span>file_get_contents<span class="kw">(</span>$file<span class="kw">);
+    </span><span class="cmt">// Font
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Times'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>12<span class="kw">);
+    </span><span class="cmt">// Output text in a 6 cm width column
+    </span>$<span class="kw">this-&gt;</span>MultiCell<span class="kw">(</span>60<span class="kw">,</span>5<span class="kw">,</span>$txt<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
+    </span><span class="cmt">// Mention
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span><span class="str">'I'</span><span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>5<span class="kw">,</span><span class="str">'(end of excerpt)'</span><span class="kw">);
+    </span><span class="cmt">// Go back to first column
+    </span>$<span class="kw">this-&gt;</span>SetCol<span class="kw">(</span>0<span class="kw">);
+}
+
+function </span>PrintChapter<span class="kw">(</span>$num<span class="kw">, </span>$title<span class="kw">, </span>$file<span class="kw">)
+{
+    </span><span class="cmt">// Add chapter
+    </span>$<span class="kw">this-&gt;</span>AddPage<span class="kw">();
+    </span>$<span class="kw">this-&gt;</span>ChapterTitle<span class="kw">(</span>$num<span class="kw">,</span>$title<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>ChapterBody<span class="kw">(</span>$file<span class="kw">);
+}
+}
+
+</span>$pdf <span class="kw">= new </span>PDF<span class="kw">();
+</span>$title <span class="kw">= </span><span class="str">'20000 Leagues Under the Seas'</span><span class="kw">;
+</span>$pdf<span class="kw">-&gt;</span>SetTitle<span class="kw">(</span>$title<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>SetAuthor<span class="kw">(</span><span class="str">'Jules Verne'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>PrintChapter<span class="kw">(</span>1<span class="kw">,</span><span class="str">'A RUNAWAY REEF'</span><span class="kw">,</span><span class="str">'20k_c1.txt'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>PrintChapter<span class="kw">(</span>2<span class="kw">,</span><span class="str">'THE PROS AND CONS'</span><span class="kw">,</span><span class="str">'20k_c2.txt'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">();
+</span>?&gt;</code></pre>
+</div>
+<p class='demo'><a href='tuto4.php' target='_blank' class='demo'>[Demo]</a></p>
+The key method used is <a href='../doc/acceptpagebreak.htm'>AcceptPageBreak()</a>. It allows to accept or not an automatic page
+break. By refusing it and altering the margin and current position, the desired column layout
+is achieved.
+<br>
+For the rest, not many changes; two properties have been added to the class to save the current
+column number and the position where columns begin, and the MultiCell() call specifies a
+6 centimeter width.
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto4.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto4.php
new file mode 100755 (executable)
index 0000000..c39b42c
--- /dev/null
@@ -0,0 +1,109 @@
+<?php
+require('../fpdf.php');
+
+class PDF extends FPDF
+{
+protected $col = 0; // Current column
+protected $y0;      // Ordinate of column start
+
+function Header()
+{
+       // Page header
+       global $title;
+
+       $this->SetFont('Arial','B',15);
+       $w = $this->GetStringWidth($title)+6;
+       $this->SetX((210-$w)/2);
+       $this->SetDrawColor(0,80,180);
+       $this->SetFillColor(230,230,0);
+       $this->SetTextColor(220,50,50);
+       $this->SetLineWidth(1);
+       $this->Cell($w,9,$title,1,1,'C',true);
+       $this->Ln(10);
+       // Save ordinate
+       $this->y0 = $this->GetY();
+}
+
+function Footer()
+{
+       // Page footer
+       $this->SetY(-15);
+       $this->SetFont('Arial','I',8);
+       $this->SetTextColor(128);
+       $this->Cell(0,10,'Page '.$this->PageNo(),0,0,'C');
+}
+
+function SetCol($col)
+{
+       // Set position at a given column
+       $this->col = $col;
+       $x = 10+$col*65;
+       $this->SetLeftMargin($x);
+       $this->SetX($x);
+}
+
+function AcceptPageBreak()
+{
+       // Method accepting or not automatic page break
+       if($this->col<2)
+       {
+               // Go to next column
+               $this->SetCol($this->col+1);
+               // Set ordinate to top
+               $this->SetY($this->y0);
+               // Keep on page
+               return false;
+       }
+       else
+       {
+               // Go back to first column
+               $this->SetCol(0);
+               // Page break
+               return true;
+       }
+}
+
+function ChapterTitle($num, $label)
+{
+       // Title
+       $this->SetFont('Arial','',12);
+       $this->SetFillColor(200,220,255);
+       $this->Cell(0,6,"Chapter $num : $label",0,1,'L',true);
+       $this->Ln(4);
+       // Save ordinate
+       $this->y0 = $this->GetY();
+}
+
+function ChapterBody($file)
+{
+       // Read text file
+       $txt = file_get_contents($file);
+       // Font
+       $this->SetFont('Times','',12);
+       // Output text in a 6 cm width column
+       $this->MultiCell(60,5,$txt);
+       $this->Ln();
+       // Mention
+       $this->SetFont('','I');
+       $this->Cell(0,5,'(end of excerpt)');
+       // Go back to first column
+       $this->SetCol(0);
+}
+
+function PrintChapter($num, $title, $file)
+{
+       // Add chapter
+       $this->AddPage();
+       $this->ChapterTitle($num,$title);
+       $this->ChapterBody($file);
+}
+}
+
+$pdf = new PDF();
+$title = '20000 Leagues Under the Seas';
+$pdf->SetTitle($title);
+$pdf->SetAuthor('Jules Verne');
+$pdf->PrintChapter(1,'A RUNAWAY REEF','20k_c1.txt');
+$pdf->PrintChapter(2,'THE PROS AND CONS','20k_c2.txt');
+$pdf->Output();
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto5.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto5.htm
new file mode 100755 (executable)
index 0000000..f90102b
--- /dev/null
@@ -0,0 +1,134 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Tables</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Tables</h1>
+This tutorial shows different ways to make tables.
+<div class="source">
+<pre><code>&lt;?php
+<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
+
+class </span>PDF <span class="kw">extends </span>FPDF
+<span class="kw">{
+</span><span class="cmt">// Load data
+</span><span class="kw">function </span>LoadData<span class="kw">(</span>$file<span class="kw">)
+{
+    </span><span class="cmt">// Read file lines
+    </span>$lines <span class="kw">= </span>file<span class="kw">(</span>$file<span class="kw">);
+    </span>$data <span class="kw">= array();
+    foreach(</span>$lines <span class="kw">as </span>$line<span class="kw">)
+        </span>$data<span class="kw">[] = </span>explode<span class="kw">(</span><span class="str">';'</span><span class="kw">,</span>trim<span class="kw">(</span>$line<span class="kw">));
+    return </span>$data<span class="kw">;
+}
+
+</span><span class="cmt">// Simple table
+</span><span class="kw">function </span>BasicTable<span class="kw">(</span>$header<span class="kw">, </span>$data<span class="kw">)
+{
+    </span><span class="cmt">// Header
+    </span><span class="kw">foreach(</span>$header <span class="kw">as </span>$col<span class="kw">)
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>40<span class="kw">,</span>7<span class="kw">,</span>$col<span class="kw">,</span>1<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
+    </span><span class="cmt">// Data
+    </span><span class="kw">foreach(</span>$data <span class="kw">as </span>$row<span class="kw">)
+    {
+        foreach(</span>$row <span class="kw">as </span>$col<span class="kw">)
+            </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>40<span class="kw">,</span>6<span class="kw">,</span>$col<span class="kw">,</span>1<span class="kw">);
+        </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
+    }
+}
+
+</span><span class="cmt">// Better table
+</span><span class="kw">function </span>ImprovedTable<span class="kw">(</span>$header<span class="kw">, </span>$data<span class="kw">)
+{
+    </span><span class="cmt">// Column widths
+    </span>$w <span class="kw">= array(</span>40<span class="kw">, </span>35<span class="kw">, </span>40<span class="kw">, </span>45<span class="kw">);
+    </span><span class="cmt">// Header
+    </span><span class="kw">for(</span>$i<span class="kw">=</span>0<span class="kw">;</span>$i<span class="kw">&lt;</span>count<span class="kw">(</span>$header<span class="kw">);</span>$i<span class="kw">++)
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>$i<span class="kw">],</span>7<span class="kw">,</span>$header<span class="kw">[</span>$i<span class="kw">],</span>1<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
+    </span><span class="cmt">// Data
+    </span><span class="kw">foreach(</span>$data <span class="kw">as </span>$row<span class="kw">)
+    {
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>0<span class="kw">],</span>6<span class="kw">,</span>$row<span class="kw">[</span>0<span class="kw">],</span><span class="str">'LR'</span><span class="kw">);
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>1<span class="kw">],</span>6<span class="kw">,</span>$row<span class="kw">[</span>1<span class="kw">],</span><span class="str">'LR'</span><span class="kw">);
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>2<span class="kw">],</span>6<span class="kw">,</span>number_format<span class="kw">(</span>$row<span class="kw">[</span>2<span class="kw">]),</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'R'</span><span class="kw">);
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>3<span class="kw">],</span>6<span class="kw">,</span>number_format<span class="kw">(</span>$row<span class="kw">[</span>3<span class="kw">]),</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'R'</span><span class="kw">);
+        </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
+    }
+    </span><span class="cmt">// Closing line
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>array_sum<span class="kw">(</span>$w<span class="kw">),</span>0<span class="kw">,</span><span class="str">''</span><span class="kw">,</span><span class="str">'T'</span><span class="kw">);
+}
+
+</span><span class="cmt">// Colored table
+</span><span class="kw">function </span>FancyTable<span class="kw">(</span>$header<span class="kw">, </span>$data<span class="kw">)
+{
+    </span><span class="cmt">// Colors, line width and bold font
+    </span>$<span class="kw">this-&gt;</span>SetFillColor<span class="kw">(</span>255<span class="kw">,</span>0<span class="kw">,</span>0<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>255<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetDrawColor<span class="kw">(</span>128<span class="kw">,</span>0<span class="kw">,</span>0<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetLineWidth<span class="kw">(</span>.3<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">);
+    </span><span class="cmt">// Header
+    </span>$w <span class="kw">= array(</span>40<span class="kw">, </span>35<span class="kw">, </span>40<span class="kw">, </span>45<span class="kw">);
+    for(</span>$i<span class="kw">=</span>0<span class="kw">;</span>$i<span class="kw">&lt;</span>count<span class="kw">(</span>$header<span class="kw">);</span>$i<span class="kw">++)
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>$i<span class="kw">],</span>7<span class="kw">,</span>$header<span class="kw">[</span>$i<span class="kw">],</span>1<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">,</span>true<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
+    </span><span class="cmt">// Color and font restoration
+    </span>$<span class="kw">this-&gt;</span>SetFillColor<span class="kw">(</span>224<span class="kw">,</span>235<span class="kw">,</span>255<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>0<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">);
+    </span><span class="cmt">// Data
+    </span>$fill <span class="kw">= </span>false<span class="kw">;
+    foreach(</span>$data <span class="kw">as </span>$row<span class="kw">)
+    {
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>0<span class="kw">],</span>6<span class="kw">,</span>$row<span class="kw">[</span>0<span class="kw">],</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'L'</span><span class="kw">,</span>$fill<span class="kw">);
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>1<span class="kw">],</span>6<span class="kw">,</span>$row<span class="kw">[</span>1<span class="kw">],</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'L'</span><span class="kw">,</span>$fill<span class="kw">);
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>2<span class="kw">],</span>6<span class="kw">,</span>number_format<span class="kw">(</span>$row<span class="kw">[</span>2<span class="kw">]),</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'R'</span><span class="kw">,</span>$fill<span class="kw">);
+        </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>3<span class="kw">],</span>6<span class="kw">,</span>number_format<span class="kw">(</span>$row<span class="kw">[</span>3<span class="kw">]),</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'R'</span><span class="kw">,</span>$fill<span class="kw">);
+        </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">();
+        </span>$fill <span class="kw">= !</span>$fill<span class="kw">;
+    }
+    </span><span class="cmt">// Closing line
+    </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>array_sum<span class="kw">(</span>$w<span class="kw">),</span>0<span class="kw">,</span><span class="str">''</span><span class="kw">,</span><span class="str">'T'</span><span class="kw">);
+}
+}
+
+</span>$pdf <span class="kw">= new </span>PDF<span class="kw">();
+</span><span class="cmt">// Column headings
+</span>$header <span class="kw">= array(</span><span class="str">'Country'</span><span class="kw">, </span><span class="str">'Capital'</span><span class="kw">, </span><span class="str">'Area (sq km)'</span><span class="kw">, </span><span class="str">'Pop. (thousands)'</span><span class="kw">);
+</span><span class="cmt">// Data loading
+</span>$data <span class="kw">= </span>$pdf<span class="kw">-&gt;</span>LoadData<span class="kw">(</span><span class="str">'countries.txt'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>14<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>BasicTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>ImprovedTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>FancyTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">();
+</span>?&gt;</code></pre>
+</div>
+<p class='demo'><a href='tuto5.php' target='_blank' class='demo'>[Demo]</a></p>
+A table being just a collection of cells, it's natural to build one from them. The first
+example is achieved in the most basic way possible: simple framed cells, all of the same size
+and left aligned. The result is rudimentary but very quick to obtain.
+<br>
+<br>
+The second table brings some improvements: each column has its own width, headings are centered,
+and numbers right aligned. Moreover, horizontal lines have been removed. This is done by means
+of the <code>border</code> parameter of the <a href='../doc/cell.htm'>Cell()</a> method, which specifies which sides of the
+cell must be drawn. Here we want the left (<code>L</code>) and right (<code>R</code>) ones. It remains
+the problem of the horizontal line to finish the table. There are two possibilities: either
+check for the last line in the loop, in which case we use <code>LRB</code> for the <code>border</code>
+parameter; or, as done here, add the line once the loop is over.
+<br>
+<br>
+The third table is similar to the second one but uses colors. Fill, text and line colors are
+simply specified. Alternate coloring for rows is obtained by using alternatively transparent
+and filled cells.
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto5.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto5.php
new file mode 100755 (executable)
index 0000000..252b70f
--- /dev/null
@@ -0,0 +1,102 @@
+<?php
+require('../fpdf.php');
+
+class PDF extends FPDF
+{
+// Load data
+function LoadData($file)
+{
+       // Read file lines
+       $lines = file($file);
+       $data = array();
+       foreach($lines as $line)
+               $data[] = explode(';',trim($line));
+       return $data;
+}
+
+// Simple table
+function BasicTable($header, $data)
+{
+       // Header
+       foreach($header as $col)
+               $this->Cell(40,7,$col,1);
+       $this->Ln();
+       // Data
+       foreach($data as $row)
+       {
+               foreach($row as $col)
+                       $this->Cell(40,6,$col,1);
+               $this->Ln();
+       }
+}
+
+// Better table
+function ImprovedTable($header, $data)
+{
+       // Column widths
+       $w = array(40, 35, 40, 45);
+       // Header
+       for($i=0;$i<count($header);$i++)
+               $this->Cell($w[$i],7,$header[$i],1,0,'C');
+       $this->Ln();
+       // Data
+       foreach($data as $row)
+       {
+               $this->Cell($w[0],6,$row[0],'LR');
+               $this->Cell($w[1],6,$row[1],'LR');
+               $this->Cell($w[2],6,number_format($row[2]),'LR',0,'R');
+               $this->Cell($w[3],6,number_format($row[3]),'LR',0,'R');
+               $this->Ln();
+       }
+       // Closing line
+       $this->Cell(array_sum($w),0,'','T');
+}
+
+// Colored table
+function FancyTable($header, $data)
+{
+       // Colors, line width and bold font
+       $this->SetFillColor(255,0,0);
+       $this->SetTextColor(255);
+       $this->SetDrawColor(128,0,0);
+       $this->SetLineWidth(.3);
+       $this->SetFont('','B');
+       // Header
+       $w = array(40, 35, 40, 45);
+       for($i=0;$i<count($header);$i++)
+               $this->Cell($w[$i],7,$header[$i],1,0,'C',true);
+       $this->Ln();
+       // Color and font restoration
+       $this->SetFillColor(224,235,255);
+       $this->SetTextColor(0);
+       $this->SetFont('');
+       // Data
+       $fill = false;
+       foreach($data as $row)
+       {
+               $this->Cell($w[0],6,$row[0],'LR',0,'L',$fill);
+               $this->Cell($w[1],6,$row[1],'LR',0,'L',$fill);
+               $this->Cell($w[2],6,number_format($row[2]),'LR',0,'R',$fill);
+               $this->Cell($w[3],6,number_format($row[3]),'LR',0,'R',$fill);
+               $this->Ln();
+               $fill = !$fill;
+       }
+       // Closing line
+       $this->Cell(array_sum($w),0,'','T');
+}
+}
+
+$pdf = new PDF();
+// Column headings
+$header = array('Country', 'Capital', 'Area (sq km)', 'Pop. (thousands)');
+// Data loading
+$data = $pdf->LoadData('countries.txt');
+$pdf->SetFont('Arial','',14);
+$pdf->AddPage();
+$pdf->BasicTable($header,$data);
+$pdf->AddPage();
+$pdf->ImprovedTable($header,$data);
+$pdf->AddPage();
+$pdf->FancyTable($header,$data);
+$pdf->Output();
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto6.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto6.htm
new file mode 100755 (executable)
index 0000000..602a119
--- /dev/null
@@ -0,0 +1,154 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Links and flowing text</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Links and flowing text</h1>
+This tutorial explains how to insert links (internal and external) and shows a new text writing
+mode. It also contains a basic HTML parser.
+<div class="source">
+<pre><code>&lt;?php
+<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
+
+class </span>PDF <span class="kw">extends </span>FPDF
+<span class="kw">{
+protected </span>$B <span class="kw">= </span>0<span class="kw">;
+protected </span>$I <span class="kw">= </span>0<span class="kw">;
+protected </span>$U <span class="kw">= </span>0<span class="kw">;
+protected </span>$HREF <span class="kw">= </span><span class="str">''</span><span class="kw">;
+
+function </span>WriteHTML<span class="kw">(</span>$html<span class="kw">)
+{
+    </span><span class="cmt">// HTML parser
+    </span>$html <span class="kw">= </span>str_replace<span class="kw">(</span><span class="str">"\n"</span><span class="kw">,</span><span class="str">' '</span><span class="kw">,</span>$html<span class="kw">);
+    </span>$a <span class="kw">= </span>preg_split<span class="kw">(</span><span class="str">'/&lt;(.*)&gt;/U'</span><span class="kw">,</span>$html<span class="kw">,-</span>1<span class="kw">,</span>PREG_SPLIT_DELIM_CAPTURE<span class="kw">);
+    foreach(</span>$a <span class="kw">as </span>$i<span class="kw">=&gt;</span>$e<span class="kw">)
+    {
+        if(</span>$i<span class="kw">%</span>2<span class="kw">==</span>0<span class="kw">)
+        {
+            </span><span class="cmt">// Text
+            </span><span class="kw">if(</span>$<span class="kw">this-&gt;</span>HREF<span class="kw">)
+                </span>$<span class="kw">this-&gt;</span>PutLink<span class="kw">(</span>$<span class="kw">this-&gt;</span>HREF<span class="kw">,</span>$e<span class="kw">);
+            else
+                </span>$<span class="kw">this-&gt;</span>Write<span class="kw">(</span>5<span class="kw">,</span>$e<span class="kw">);
+        }
+        else
+        {
+            </span><span class="cmt">// Tag
+            </span><span class="kw">if(</span>$e<span class="kw">[</span>0<span class="kw">]==</span><span class="str">'/'</span><span class="kw">)
+                </span>$<span class="kw">this-&gt;</span>CloseTag<span class="kw">(</span>strtoupper<span class="kw">(</span>substr<span class="kw">(</span>$e<span class="kw">,</span>1<span class="kw">)));
+            else
+            {
+                </span><span class="cmt">// Extract attributes
+                </span>$a2 <span class="kw">= </span>explode<span class="kw">(</span><span class="str">' '</span><span class="kw">,</span>$e<span class="kw">);
+                </span>$tag <span class="kw">= </span>strtoupper<span class="kw">(</span>array_shift<span class="kw">(</span>$a2<span class="kw">));
+                </span>$attr <span class="kw">= array();
+                foreach(</span>$a2 <span class="kw">as </span>$v<span class="kw">)
+                {
+                    if(</span>preg_match<span class="kw">(</span><span class="str">'/([^=]*)=["\']?([^"\']*)/'</span><span class="kw">,</span>$v<span class="kw">,</span>$a3<span class="kw">))
+                        </span>$attr<span class="kw">[</span>strtoupper<span class="kw">(</span>$a3<span class="kw">[</span>1<span class="kw">])] = </span>$a3<span class="kw">[</span>2<span class="kw">];
+                }
+                </span>$<span class="kw">this-&gt;</span>OpenTag<span class="kw">(</span>$tag<span class="kw">,</span>$attr<span class="kw">);
+            }
+        }
+    }
+}
+
+function </span>OpenTag<span class="kw">(</span>$tag<span class="kw">, </span>$attr<span class="kw">)
+{
+    </span><span class="cmt">// Opening tag
+    </span><span class="kw">if(</span>$tag<span class="kw">==</span><span class="str">'B' </span><span class="kw">|| </span>$tag<span class="kw">==</span><span class="str">'I' </span><span class="kw">|| </span>$tag<span class="kw">==</span><span class="str">'U'</span><span class="kw">)
+        </span>$<span class="kw">this-&gt;</span>SetStyle<span class="kw">(</span>$tag<span class="kw">,</span>true<span class="kw">);
+    if(</span>$tag<span class="kw">==</span><span class="str">'A'</span><span class="kw">)
+        </span>$<span class="kw">this-&gt;</span>HREF <span class="kw">= </span>$attr<span class="kw">[</span><span class="str">'HREF'</span><span class="kw">];
+    if(</span>$tag<span class="kw">==</span><span class="str">'BR'</span><span class="kw">)
+        </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(</span>5<span class="kw">);
+}
+
+function </span>CloseTag<span class="kw">(</span>$tag<span class="kw">)
+{
+    </span><span class="cmt">// Closing tag
+    </span><span class="kw">if(</span>$tag<span class="kw">==</span><span class="str">'B' </span><span class="kw">|| </span>$tag<span class="kw">==</span><span class="str">'I' </span><span class="kw">|| </span>$tag<span class="kw">==</span><span class="str">'U'</span><span class="kw">)
+        </span>$<span class="kw">this-&gt;</span>SetStyle<span class="kw">(</span>$tag<span class="kw">,</span>false<span class="kw">);
+    if(</span>$tag<span class="kw">==</span><span class="str">'A'</span><span class="kw">)
+        </span>$<span class="kw">this-&gt;</span>HREF <span class="kw">= </span><span class="str">''</span><span class="kw">;
+}
+
+function </span>SetStyle<span class="kw">(</span>$tag<span class="kw">, </span>$enable<span class="kw">)
+{
+    </span><span class="cmt">// Modify style and select corresponding font
+    </span>$<span class="kw">this-&gt;</span>$tag <span class="kw">+= (</span>$enable <span class="kw">? </span>1 <span class="kw">: -</span>1<span class="kw">);
+    </span>$style <span class="kw">= </span><span class="str">''</span><span class="kw">;
+    foreach(array(</span><span class="str">'B'</span><span class="kw">, </span><span class="str">'I'</span><span class="kw">, </span><span class="str">'U'</span><span class="kw">) as </span>$s<span class="kw">)
+    {
+        if(</span>$<span class="kw">this-&gt;</span>$s<span class="kw">&gt;</span>0<span class="kw">)
+            </span>$style <span class="kw">.= </span>$s<span class="kw">;
+    }
+    </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span>$style<span class="kw">);
+}
+
+function </span>PutLink<span class="kw">(</span>$URL<span class="kw">, </span>$txt<span class="kw">)
+{
+    </span><span class="cmt">// Put a hyperlink
+    </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>0<span class="kw">,</span>0<span class="kw">,</span>255<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetStyle<span class="kw">(</span><span class="str">'U'</span><span class="kw">,</span>true<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>Write<span class="kw">(</span>5<span class="kw">,</span>$txt<span class="kw">,</span>$URL<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetStyle<span class="kw">(</span><span class="str">'U'</span><span class="kw">,</span>false<span class="kw">);
+    </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>0<span class="kw">);
+}
+}
+
+</span>$html <span class="kw">= </span><span class="str">'You can now easily print text mixing different styles: &lt;b&gt;bold&lt;/b&gt;, &lt;i&gt;italic&lt;/i&gt;,
+&lt;u&gt;underlined&lt;/u&gt;, or &lt;b&gt;&lt;i&gt;&lt;u&gt;all at once&lt;/u&gt;&lt;/i&gt;&lt;/b&gt;!&lt;br&gt;&lt;br&gt;You can also insert links on
+text, such as &lt;a href="http://www.fpdf.org"&gt;www.fpdf.org&lt;/a&gt;, or on an image: click on the logo.'</span><span class="kw">;
+
+</span>$pdf <span class="kw">= new </span>PDF<span class="kw">();
+</span><span class="cmt">// First page
+</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>20<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Write<span class="kw">(</span>5<span class="kw">,</span><span class="str">"To find out what's new in this tutorial, click "</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span><span class="str">'U'</span><span class="kw">);
+</span>$link <span class="kw">= </span>$pdf<span class="kw">-&gt;</span>AddLink<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>Write<span class="kw">(</span>5<span class="kw">,</span><span class="str">'here'</span><span class="kw">,</span>$link<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">);
+</span><span class="cmt">// Second page
+</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>SetLink<span class="kw">(</span>$link<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Image<span class="kw">(</span><span class="str">'logo.png'</span><span class="kw">,</span>10<span class="kw">,</span>12<span class="kw">,</span>30<span class="kw">,</span>0<span class="kw">,</span><span class="str">''</span><span class="kw">,</span><span class="str">'http://www.fpdf.org'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>SetLeftMargin<span class="kw">(</span>45<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>SetFontSize<span class="kw">(</span>14<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>WriteHTML<span class="kw">(</span>$html<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">();
+</span>?&gt;</code></pre>
+</div>
+<p class='demo'><a href='tuto6.php' target='_blank' class='demo'>[Demo]</a></p>
+The new method to print text is <a href='../doc/write.htm'>Write()</a>. It's very close to <a href='../doc/multicell.htm'>MultiCell()</a>; the differences are:
+<ul>
+<li>The end of line is at the right margin and the next line begins at the left one</li>
+<li>The current position moves at the end of the text</li>
+</ul>
+So it allows to write a chunk of text, alter the font style, then continue from the exact
+place we left it. On the other hand, you cannot justify it.
+<br>
+<br>
+The method is used on the first page to put a link pointing to the second one. The beginning of
+the sentence is written in regular style, then we switch to underline and finish it. The link
+is created with <a href='../doc/addlink.htm'>AddLink()</a>, which returns a link identifier. The identifier is
+passed as third parameter of Write(). Once the second page is created, we use <a href='../doc/setlink.htm'>SetLink()</a> to
+make the link point to the beginning of the current page.
+<br>
+<br>
+Then we put an image with an external link on it. An external link is just a URL. It's passed as
+last parameter of <a href='../doc/image.htm'>Image()</a>.
+<br>
+<br>
+Finally, the left margin is moved after the image with <a href='../doc/setleftmargin.htm'>SetLeftMargin()</a> and some text in
+HTML format is output. A very simple HTML parser is used for this, based on regular expressions.
+Recognized tags are &lt;b&gt;, &lt;i&gt;, &lt;u&gt;, &lt;a&gt; and &lt;br&gt;; the others are
+ignored. The parser also makes use of the Write() method. An external link is put the same way as
+an internal one (third parameter of Write()). Note that <a href='../doc/cell.htm'>Cell()</a> also allows to put links.
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto6.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto6.php
new file mode 100755 (executable)
index 0000000..427e4d3
--- /dev/null
@@ -0,0 +1,113 @@
+<?php
+require('../fpdf.php');
+
+class PDF extends FPDF
+{
+protected $B = 0;
+protected $I = 0;
+protected $U = 0;
+protected $HREF = '';
+
+function WriteHTML($html)
+{
+       // HTML parser
+       $html = str_replace("\n",' ',$html);
+       $a = preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE);
+       foreach($a as $i=>$e)
+       {
+               if($i%2==0)
+               {
+                       // Text
+                       if($this->HREF)
+                               $this->PutLink($this->HREF,$e);
+                       else
+                               $this->Write(5,$e);
+               }
+               else
+               {
+                       // Tag
+                       if($e[0]=='/')
+                               $this->CloseTag(strtoupper(substr($e,1)));
+                       else
+                       {
+                               // Extract attributes
+                               $a2 = explode(' ',$e);
+                               $tag = strtoupper(array_shift($a2));
+                               $attr = array();
+                               foreach($a2 as $v)
+                               {
+                                       if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3))
+                                               $attr[strtoupper($a3[1])] = $a3[2];
+                               }
+                               $this->OpenTag($tag,$attr);
+                       }
+               }
+       }
+}
+
+function OpenTag($tag, $attr)
+{
+       // Opening tag
+       if($tag=='B' || $tag=='I' || $tag=='U')
+               $this->SetStyle($tag,true);
+       if($tag=='A')
+               $this->HREF = $attr['HREF'];
+       if($tag=='BR')
+               $this->Ln(5);
+}
+
+function CloseTag($tag)
+{
+       // Closing tag
+       if($tag=='B' || $tag=='I' || $tag=='U')
+               $this->SetStyle($tag,false);
+       if($tag=='A')
+               $this->HREF = '';
+}
+
+function SetStyle($tag, $enable)
+{
+       // Modify style and select corresponding font
+       $this->$tag += ($enable ? 1 : -1);
+       $style = '';
+       foreach(array('B', 'I', 'U') as $s)
+       {
+               if($this->$s>0)
+                       $style .= $s;
+       }
+       $this->SetFont('',$style);
+}
+
+function PutLink($URL, $txt)
+{
+       // Put a hyperlink
+       $this->SetTextColor(0,0,255);
+       $this->SetStyle('U',true);
+       $this->Write(5,$txt,$URL);
+       $this->SetStyle('U',false);
+       $this->SetTextColor(0);
+}
+}
+
+$html = 'You can now easily print text mixing different styles: <b>bold</b>, <i>italic</i>,
+<u>underlined</u>, or <b><i><u>all at once</u></i></b>!<br><br>You can also insert links on
+text, such as <a href="http://www.fpdf.org">www.fpdf.org</a>, or on an image: click on the logo.';
+
+$pdf = new PDF();
+// First page
+$pdf->AddPage();
+$pdf->SetFont('Arial','',20);
+$pdf->Write(5,"To find out what's new in this tutorial, click ");
+$pdf->SetFont('','U');
+$link = $pdf->AddLink();
+$pdf->Write(5,'here',$link);
+$pdf->SetFont('');
+// Second page
+$pdf->AddPage();
+$pdf->SetLink($link);
+$pdf->Image('logo.png',10,12,30,0,'','http://www.fpdf.org');
+$pdf->SetLeftMargin(45);
+$pdf->SetFontSize(14);
+$pdf->WriteHTML($html);
+$pdf->Output();
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto7.htm b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto7.htm
new file mode 100755 (executable)
index 0000000..146a952
--- /dev/null
@@ -0,0 +1,187 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Adding new fonts and encodings</title>
+<link type="text/css" rel="stylesheet" href="../fpdf.css">
+</head>
+<body>
+<h1>Adding new fonts and encodings</h1>
+This tutorial explains how to use TrueType, OpenType and Type1 fonts so that you are not limited to the
+standard fonts anymore. The other benefit is that you can choose the text encoding, which allows you to
+use other languages than the Western ones (the standard fonts support only cp1252 aka windows-1252).
+<br>
+<br>
+For OpenType, only the format based on TrueType is supported (not the one based on Type1).<br>
+For Type1, you will need the corresponding AFM file (it is usually provided with the font).
+<br>
+<br>
+Adding a new font requires two steps:
+<ul>
+<li>Generation of the font definition file</li>
+<li>Declaration of the font in the script</li>
+</ul>
+
+<h2>Generation of the font definition file</h2>
+The first step consists in generating a PHP file containing all the information needed by FPDF;
+in addition, the font file is compressed. To do this, a helper script is provided in the makefont
+directory of the package: makefont.php. It contains the following function:
+<br>
+<br>
+<code>MakeFont(<b>string</b> fontfile [, <b>string</b> enc [, <b>boolean</b> embed [, <b>boolean</b> subset]]])</code>
+<dl class="param" style="margin-bottom:2em">
+<dt><code>fontfile</code></dt>
+<dd>
+<p>Path to the .ttf, .otf or .pfb file.</p>
+</dd>
+<dt><code>enc</code></dt>
+<dd>
+<p>Name of the encoding to use. Default value: <code>cp1252</code>.</p>
+</dd>
+<dt><code>embed</code></dt>
+<dd>
+<p>Whether to embed the font or not. Default value: <code>true</code>.</p>
+</dd>
+<dt><code>subset</code></dt>
+<dd>
+<p>Whether to subset the font or not. Default value: <code>true</code>.</p>
+</dd>
+</dl>
+The first parameter is the name of the font file. The extension must be either .ttf, .otf or .pfb and
+determines the font type. If your Type1 font is in ASCII format (.pfa), you can convert it to binary
+(.pfb) with the help of <a href="http://www.lcdf.org/~eddietwo/type/#t1utils" target="_blank">t1utils</a>.
+<br>
+<br>
+For Type1 fonts, the corresponding .afm file must be present in the same directory.
+<br>
+<br>
+The encoding defines the association between a code (from 0 to 255) and a character. The first 128 are
+always the same and correspond to ASCII; the following are variable. Encodings are stored in .map
+files. The available ones are:
+<ul>
+<li>cp1250 (Central Europe)</li>
+<li>cp1251 (Cyrillic)</li>
+<li>cp1252 (Western Europe)</li>
+<li>cp1253 (Greek)</li>
+<li>cp1254 (Turkish)</li>
+<li>cp1255 (Hebrew)</li>
+<li>cp1257 (Baltic)</li>
+<li>cp1258 (Vietnamese)</li>
+<li>cp874 (Thai)</li>
+<li>ISO-8859-1 (Western Europe)</li>
+<li>ISO-8859-2 (Central Europe)</li>
+<li>ISO-8859-4 (Baltic)</li>
+<li>ISO-8859-5 (Cyrillic)</li>
+<li>ISO-8859-7 (Greek)</li>
+<li>ISO-8859-9 (Turkish)</li>
+<li>ISO-8859-11 (Thai)</li>
+<li>ISO-8859-15 (Western Europe)</li>
+<li>ISO-8859-16 (Central Europe)</li>
+<li>KOI8-R (Russian)</li>
+<li>KOI8-U (Ukrainian)</li>
+</ul>
+Of course, the font must contain the characters corresponding to the selected encoding.
+<br>
+<br>
+The third parameter indicates whether the font should be embedded in the PDF or not. When a font is
+not embedded, it is searched in the system. The advantage is that the PDF file is smaller; on the
+other hand, if it is not available, then a substitution font is used. So you should ensure that the
+needed font is installed on the client systems. Embedding is the recommended option to guarantee a
+correct rendering.
+<br>
+<br>
+The last parameter indicates whether subsetting should be used, that is to say, whether only
+the characters from the selected encoding should be kept in the embedded font. As a result,
+the size of the PDF file can be greatly reduced, especially if the original font was big.
+<br>
+<br>
+After you have called the function (create a new file for this and include makefont.php), a .php file
+is created, with the same name as the font file. You may rename it if you wish. If the case of embedding,
+the font file is compressed and gives a second file with .z as extension (except if the compression
+function is not available, it requires Zlib). You may rename it too, but in this case you have to change
+the variable <code>$file</code> in the .php file accordingly.
+<br>
+<br>
+Example:
+<div class="source">
+<pre><code>&lt;?php
+<span class="kw">require(</span><span class="str">'makefont/makefont.php'</span><span class="kw">);
+
+</span>MakeFont<span class="kw">(</span><span class="str">'C:\\Windows\\Fonts\\comic.ttf'</span><span class="kw">,</span><span class="str">'cp1252'</span><span class="kw">);
+</span>?&gt;</code></pre>
+</div>
+which gives the files comic.php and comic.z.
+<br>
+<br>
+Then copy the generated files to the font directory. If the font file could not be compressed, copy
+it directly instead of the .z version.
+<br>
+<br>
+Another way to call MakeFont() is through the command line:
+<br>
+<br>
+<kbd>php makefont\makefont.php C:\Windows\Fonts\comic.ttf cp1252</kbd>
+<br>
+<br>
+Finally, for TrueType and OpenType fonts, you can also generate the files
+<a href="http://www.fpdf.org/makefont/">online</a> instead of doing it manually.
+
+<h2>Declaration of the font in the script</h2>
+The second step is simple. You just need to call the <a href='../doc/addfont.htm'>AddFont()</a> method:
+<div class="source">
+<pre><code>$pdf<span class="kw">-&gt;</span>AddFont<span class="kw">(</span><span class="str">'Comic'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span><span class="str">'comic.php'</span><span class="kw">);
+</span></code></pre>
+</div>
+And the font is now available (in regular and underlined styles), usable like the others. If we
+had worked with Comic Sans MS Bold (comicbd.ttf), we would have written:
+<div class="source">
+<pre><code>$pdf<span class="kw">-&gt;</span>AddFont<span class="kw">(</span><span class="str">'Comic'</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">,</span><span class="str">'comicbd.php'</span><span class="kw">);
+</span></code></pre>
+</div>
+
+<h2>Example</h2>
+Let's now see a complete example. We will use the font <a href="http://www.abstractfonts.com/font/52" target="_blank">Calligrapher</a>.
+The first step is the generation of the font files:
+<div class="source">
+<pre><code>&lt;?php
+<span class="kw">require(</span><span class="str">'makefont/makefont.php'</span><span class="kw">);
+
+</span>MakeFont<span class="kw">(</span><span class="str">'calligra.ttf'</span><span class="kw">,</span><span class="str">'cp1252'</span><span class="kw">);
+</span>?&gt;</code></pre>
+</div>
+The script gives the following report:
+<br>
+<br>
+<b>Warning:</b> character Euro is missing<br>
+<b>Warning:</b> character zcaron is missing<br>
+Font file compressed: calligra.z<br>
+Font definition file generated: calligra.php<br>
+<br>
+The euro character is not present in the font (it's too old). Another character is missing too.
+<br>
+<br>
+Alternatively we could have used the command line:
+<br>
+<br>
+<kbd>php makefont\makefont.php calligra.ttf cp1252</kbd>
+<br>
+<br>
+or used the online generator.
+<br>
+<br>
+We can now copy the two generated files to the font directory and write the script:
+<div class="source">
+<pre><code>&lt;?php
+<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);
+
+</span>$pdf <span class="kw">= new </span>FPDF<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>AddFont<span class="kw">(</span><span class="str">'Calligrapher'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span><span class="str">'calligra.php'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">();
+</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Calligrapher'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>35<span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Write<span class="kw">(</span>10<span class="kw">,</span><span class="str">'Enjoy new fonts with FPDF!'</span><span class="kw">);
+</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">();
+</span>?&gt;</code></pre>
+</div>
+<p class='demo'><a href='tuto7.php' target='_blank' class='demo'>[Demo]</a></p>
+</body>
+</html>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto7.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdf/tutorial/tuto7.php
new file mode 100755 (executable)
index 0000000..a7acb47
--- /dev/null
@@ -0,0 +1,11 @@
+<?php
+define('FPDF_FONTPATH','.');
+require('../fpdf.php');
+
+$pdf = new FPDF();
+$pdf->AddFont('Calligrapher','','calligra.php');
+$pdf->AddPage();
+$pdf->SetFont('Calligrapher','',35);
+$pdf->Cell(0,10,'Enjoy new fonts with FPDF!');
+$pdf->Output();
+?>
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi-fpdf/LICENSE.txt b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi-fpdf/LICENSE.txt
new file mode 100755 (executable)
index 0000000..7e75850
--- /dev/null
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2017 Setasign - Jan Slabon, https://www.setasign.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi-fpdf/README.md b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi-fpdf/README.md
new file mode 100755 (executable)
index 0000000..f8b3626
--- /dev/null
@@ -0,0 +1,18 @@
+# FPDI-FPDF
+A kind of metadata package for Composer with fixed dependencies for the latest versions of FPDI and FPDF.
+
+## Installation with [Composer](https://packagist.org/packages/setasign/fpdi-fpdf)
+
+```bash
+$ composer require setasign/fpdi-fpdf:2.2
+```
+
+or you can include the following in your composer.json file:
+
+```json
+{
+    "require": {
+        "setasign/fpdi-fpdf": "^2.2"
+    }
+}
+```
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi-fpdf/composer.json b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi-fpdf/composer.json
new file mode 100755 (executable)
index 0000000..ec1b663
--- /dev/null
@@ -0,0 +1,19 @@
+{
+    "name": "setasign/fpdi-fpdf",
+    "homepage": "https://www.setasign.com/fpdi",
+    "description": "Kind of metadata package for dependencies of the latest versions of FPDI and FPDF.",
+    "type": "library",
+    "keywords": ["pdf", "fpdi", "fpdf"],
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Jan Slabon",
+            "email": "jan.slabon@setasign.com",
+            "homepage": "https://www.setasign.com"
+        }
+    ],
+    "require": {
+        "setasign/fpdf": "^1.8",
+        "setasign/fpdi": "^2.2"
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/LICENSE.txt b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/LICENSE.txt
new file mode 100755 (executable)
index 0000000..7e75850
--- /dev/null
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2017 Setasign - Jan Slabon, https://www.setasign.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/README.md b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/README.md
new file mode 100755 (executable)
index 0000000..42856df
--- /dev/null
@@ -0,0 +1,168 @@
+FPDI - Free PDF Document Importer
+=================================
+
+[![Latest Stable Version](https://poser.pugx.org/setasign/fpdi/v/stable.svg)](https://packagist.org/packages/setasign/fpdi)
+[![Total Downloads](https://poser.pugx.org/setasign/fpdi/downloads.svg)](https://packagist.org/packages/setasign/fpdi)
+[![Latest Unstable Version](https://poser.pugx.org/setasign/fpdi/v/unstable.svg)](https://packagist.org/packages/setasign/fpdi)
+[![License](https://poser.pugx.org/setasign/fpdi/license.svg)](https://packagist.org/packages/setasign/fpdi)
+[![Build Status](https://travis-ci.org/Setasign/FPDI.svg?branch=development)](https://travis-ci.org/Setasign/FPDI)
+
+:heavy_exclamation_mark: This document refers to FPDI 2. Version 1 is deprecated and development is discontinued. :heavy_exclamation_mark: 
+
+FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF
+documents and use them as templates in [FPDF](http://www.fpdf.org), which was developed by Olivier Plathey. Apart
+from a copy of [FPDF](http://www.fpdf.org), FPDI does not require any special PHP extensions.
+
+FPDI can also be used as an extension for [TCPDF](https://github.com/tecnickcom/TCPDF) or 
+[tFPDF](http://fpdf.org/en/script/script92.php), too.
+
+## Installation with [Composer](https://packagist.org/packages/setasign/fpdi)
+
+Because FPDI can be used with FPDF, TCPDF or tFPDF we didn't added a fixed dependency in the main
+composer.json file but we added metadata packages for 
+[FPDF](https://github.com/Setasign/FPDI-FPDF), 
+[TCPDF](https://github.com/Setasign/FPDI-TCPDF) and
+[tFPDF](https://github.com/Setasign/FPDI-tFPDF).
+
+### Evaluate Dependencies Automatically
+
+For FPDF add following [package](https://github.com/Setasign/FPDI-FPDF) to your composer.json:
+```json
+{
+    "require": {
+        "setasign/fpdi-fpdf": "^2.0"
+    }
+}
+```
+
+For TCPDF add following [package](https://github.com/Setasign/FPDI-TCPDF) to your composer.json:
+```json
+{
+    "require": {
+        "setasign/fpdi-tcpdf": "^2.0"
+    }
+}
+```
+
+For tFPDF add following [package](https://github.com/Setasign/FPDI-tFPDF) to your composer.json:
+```json
+{
+    "require": {
+        "setasign/fpdi-tfpdf": "^2.1"
+    }
+}
+```
+
+### Manual Dependencies
+
+If you don't want to use the metadata packages, it is up to you to add the dependencies to your
+composer.json file.
+
+To use FPDI with FPDF include following in your composer.json file:
+
+```json
+{
+    "require": {
+        "setasign/fpdf": "^1.8",
+        "setasign/fpdi": "^2.0"
+    }
+}
+```
+
+If you want to use TCPDF, your have to update your composer.json respectively to:
+
+```json
+{
+    "require": {
+        "tecnickcom/tcpdf": "^6.2",
+        "setasign/fpdi": "^2.0"
+    }
+}
+```
+
+If you want to use tFPDF, your have to update your composer.json respectively to:
+
+```json
+{
+    "require": {
+        "tecnickcom/tfpdf": "1.25",
+        "setasign/fpdi": "^2.1"
+    }
+}
+```
+
+## Manual Installation
+
+If you do not use composer, just require the autoload.php in the /src folder:
+
+```php
+require_once('src/autoload.php');
+```
+
+If you have a PSR-4 autoloader implemented, just register the src path as follows:
+```php
+$loader = new \Example\Psr4AutoloaderClass;
+$loader->register();
+$loader->addNamespace('setasign\Fpdi', 'path/to/src/');
+```
+
+## Changes to Version 1
+
+Version 2 is a complete rewrite from scratch of FPDI which comes with:
+- Namespaced code
+- Clean and up-to-date code base and style
+- PSR-4 compatible autoloading
+- Performance improvements by up to 100%
+- Less memory consumption
+- Native support for reading PDFs from strings or stream-resources
+- Support for documents with "invalid" data before their file-header
+- Optimized page tree resolving
+- Usage of individual exceptions
+- Several test types (unit, functional and visual tests)
+
+We tried to keep the main methods and logical workflow the same as in version 1 but please
+notice that there were incompatible changes which you should consider when updating to
+version 2:
+- You need to load the code using the `src/autoload.php` file instead of `classes/FPDI.php`.
+- The classes and traits are namespaced now: `setasign\Fpdi`
+- Page boundaries beginning with a slash, such as `/MediaBox`, are not supported anymore. Remove
+  the slash or use a constant of `PdfReader\PageBoundaries`.
+- The parameters $x, $y, $width and $height of the `useTemplate()` or `getTemplateSize()`
+  method have more logical correct default values now. Passing `0` as width or height will
+  result in an `InvalidArgumentException` now.
+- The return value of `getTemplateSize()` had changed to an array with more speaking keys
+  and reusability: Use `width` instead of `w` and `height` instead of `h`.
+- If you want to use **FPDI with TCPDF** you need to refactor your code to use the class `Tcpdf\Fpdi`
+(since 2.1; before it was `TcpdfFpdi`) instead of `FPDI`.
+
+## Example and Documentation
+
+A simple example, that imports a single page and places this onto a new created page:
+
+```php
+<?php
+use setasign\Fpdi\Fpdi;
+// or for usage with TCPDF:
+// use setasign\Fpdi\Tcpdf\Fpdi;
+
+// or for usage with tFPDF:
+// use setasign\Fpdi\Tfpdf\Fpdi;
+
+// setup the autoload function
+require_once('vendor/autoload.php');
+
+// initiate FPDI
+$pdf = new Fpdi();
+// add a page
+$pdf->AddPage();
+// set the source file
+$pdf->setSourceFile("Fantastic-Speaker.pdf");
+// import page 1
+$tplId = $pdf->importPage(1);
+// use the imported page and place it at point 10,10 with a width of 100 mm
+$pdf->useTemplate($tplId, 10, 10, 100);
+
+$pdf->Output();            
+```
+
+A full end-user documentation and API reference is available [here](https://manuals.setasign.com/fpdi-manual/).
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/composer.json b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/composer.json
new file mode 100755 (executable)
index 0000000..58f7931
--- /dev/null
@@ -0,0 +1,50 @@
+{
+    "name": "setasign/fpdi",
+    "homepage": "https://www.setasign.com/fpdi",
+    "description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.",
+    "type": "library",
+    "keywords": [
+        "pdf",
+        "fpdi",
+        "fpdf"
+    ],
+    "license": "MIT",
+    "autoload": {
+        "psr-4": {
+            "setasign\\Fpdi\\": "src/"
+        }
+    },
+    "require": {
+        "php": "^5.6 || ^7.0",
+        "ext-zlib": "*"
+    },
+    "authors": [
+        {
+            "name": "Jan Slabon",
+            "email": "jan.slabon@setasign.com",
+            "homepage": "https://www.setasign.com"
+        },
+        {
+            "name": "Maximilian Kresse",
+            "email": "maximilian.kresse@setasign.com",
+            "homepage": "https://www.setasign.com"
+        }
+    ],
+    "suggest": {
+        "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured.",
+        "setasign/fpdi-fpdf": "Use this package to automatically evaluate dependencies to FPDF.",
+        "setasign/fpdi-tcpdf": "Use this package to automatically evaluate dependencies to TCPDF.",
+        "setasign/fpdi-tfpdf": "Use this package to automatically evaluate dependencies to tFPDF."
+    },
+    "require-dev": {
+        "phpunit/phpunit": "~5.7",
+        "setasign/fpdf": "~1.8",
+        "tecnickcom/tcpdf": "~6.2",
+        "setasign/tfpdf": "1.25"
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "setasign\\Fpdi\\": "tests/"
+        }
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/FpdfTpl.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/FpdfTpl.php
new file mode 100755 (executable)
index 0000000..fba7c6a
--- /dev/null
@@ -0,0 +1,22 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi;
+
+/**
+ * Class FpdfTpl
+ *
+ * This class adds a templating feature to FPDF.
+ *
+ * @package setasign\Fpdi
+ */
+class FpdfTpl extends \FPDF
+{
+    use FpdfTplTrait;
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/FpdfTplTrait.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/FpdfTplTrait.php
new file mode 100755 (executable)
index 0000000..9fb0d9a
--- /dev/null
@@ -0,0 +1,466 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi;
+
+/**
+ * Trait FpdfTplTrait
+ *
+ * This class adds a templating feature to tFPDF.
+ *
+ * @package setasign\Fpdi
+ */
+trait FpdfTplTrait
+{
+    /**
+     * Data of all created templates.
+     *
+     * @var array
+     */
+    protected $templates = [];
+
+    /**
+     * The template id for the currently created template.
+     *
+     * @var null|int
+     */
+    protected $currentTemplateId;
+
+    /**
+     * A counter for template ids.
+     *
+     * @var int
+     */
+    protected $templateId = 0;
+
+    /**
+     * Set the page format of the current page.
+     *
+     * @param array $size An array with two values defining the size.
+     * @param string $orientation "L" for landscape, "P" for portrait.
+     * @throws \BadMethodCallException
+     */
+    public function setPageFormat($size, $orientation)
+    {
+        if ($this->currentTemplateId !== null) {
+            throw new \BadMethodCallException('The page format cannot be changed when writing to a template.');
+        }
+
+        if (!\in_array($orientation, ['P', 'L'], true)) {
+            throw new \InvalidArgumentException(\sprintf(
+                'Invalid page orientation "%s"! Only "P" and "L" are allowed!',
+                $orientation
+            ));
+        }
+
+        $size = $this->_getpagesize($size);
+
+        if ($orientation != $this->CurOrientation
+            || $size[0] != $this->CurPageSize[0]
+            || $size[1] != $this->CurPageSize[1]
+        ) {
+            // New size or orientation
+            if ($orientation === 'P') {
+                $this->w = $size[0];
+                $this->h = $size[1];
+            } else {
+                $this->w = $size[1];
+                $this->h = $size[0];
+            }
+            $this->wPt = $this->w * $this->k;
+            $this->hPt = $this->h * $this->k;
+            $this->PageBreakTrigger = $this->h - $this->bMargin;
+            $this->CurOrientation = $orientation;
+            $this->CurPageSize = $size;
+
+            $this->PageInfo[$this->page]['size'] = array($this->wPt, $this->hPt);
+        }
+    }
+
+    /**
+     * Draws a template onto the page or another template.
+     *
+     * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
+     * aspect ratio.
+     *
+     * @param mixed $tpl The template id
+     * @param array|float|int $x The abscissa of upper-left corner. Alternatively you could use an assoc array
+     *                           with the keys "x", "y", "width", "height", "adjustPageSize".
+     * @param float|int $y The ordinate of upper-left corner.
+     * @param float|int|null $width The width.
+     * @param float|int|null $height The height.
+     * @param bool $adjustPageSize
+     * @return array The size
+     * @see FpdfTplTrait::getTemplateSize()
+     */
+    public function useTemplate($tpl, $x = 0, $y = 0, $width = null, $height = null, $adjustPageSize = false)
+    {
+        if (!isset($this->templates[$tpl])) {
+            throw new \InvalidArgumentException('Template does not exist!');
+        }
+
+        if (\is_array($x)) {
+            unset($x['tpl']);
+            \extract($x, EXTR_IF_EXISTS);
+            /** @noinspection NotOptimalIfConditionsInspection */
+            /** @noinspection CallableParameterUseCaseInTypeContextInspection */
+            if (\is_array($x)) {
+                $x = 0;
+            }
+        }
+
+        $template = $this->templates[$tpl];
+
+        $originalSize = $this->getTemplateSize($tpl);
+        $newSize = $this->getTemplateSize($tpl, $width, $height);
+        if ($adjustPageSize) {
+            $this->setPageFormat($newSize, $newSize['orientation']);
+        }
+
+        $this->_out(
+        // reset standard values, translate and scale
+            \sprintf(
+                'q 0 J 1 w 0 j 0 G 0 g %.4F 0 0 %.4F %.4F %.4F cm /%s Do Q',
+                ($newSize['width'] / $originalSize['width']),
+                ($newSize['height'] / $originalSize['height']),
+                $x * $this->k,
+                ($this->h - $y - $newSize['height']) * $this->k,
+                $template['id']
+            )
+        );
+
+        return $newSize;
+    }
+
+    /**
+     * Get the size of a template.
+     *
+     * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
+     * aspect ratio.
+     *
+     * @param mixed $tpl The template id
+     * @param float|int|null $width The width.
+     * @param float|int|null $height The height.
+     * @return array|bool An array with following keys: width, height, 0 (=width), 1 (=height), orientation (L or P)
+     */
+    public function getTemplateSize($tpl, $width = null, $height = null)
+    {
+        if (!isset($this->templates[$tpl])) {
+            return false;
+        }
+
+        if ($width === null && $height === null) {
+            $width = $this->templates[$tpl]['width'];
+            $height = $this->templates[$tpl]['height'];
+        } elseif ($width === null) {
+            $width = $height * $this->templates[$tpl]['width'] / $this->templates[$tpl]['height'];
+        }
+
+        if ($height === null) {
+            $height = $width * $this->templates[$tpl]['height'] / $this->templates[$tpl]['width'];
+        }
+
+        if ($height <= 0. || $width <= 0.) {
+            throw new \InvalidArgumentException('Width or height parameter needs to be larger than zero.');
+        }
+
+        return [
+            'width' => $width,
+            'height' => $height,
+            0 => $width,
+            1 => $height,
+            'orientation' => $width > $height ? 'L' : 'P'
+        ];
+    }
+
+    /**
+     * Begins a new template.
+     *
+     * @param float|int|null $width The width of the template. If null, the current page width is used.
+     * @param float|int|null $height The height of the template. If null, the current page height is used.
+     * @param bool $groupXObject Define the form XObject as a group XObject to support transparency (if used).
+     * @return int A template identifier.
+     */
+    public function beginTemplate($width = null, $height = null, $groupXObject = false)
+    {
+        if ($width === null) {
+            $width = $this->w;
+        }
+
+        if ($height === null) {
+            $height = $this->h;
+        }
+
+        $templateId = $this->getNextTemplateId();
+
+        // initiate buffer with current state of FPDF
+        $buffer = "2 J\n"
+            . \sprintf('%.2F w', $this->LineWidth * $this->k) . "\n";
+
+        if ($this->FontFamily) {
+            $buffer .= \sprintf("BT /F%d %.2F Tf ET\n", $this->CurrentFont['i'], $this->FontSizePt);
+        }
+
+        if ($this->DrawColor !== '0 G') {
+            $buffer .= $this->DrawColor . "\n";
+        }
+        if ($this->FillColor !== '0 g') {
+            $buffer .= $this->FillColor . "\n";
+        }
+
+        if ($groupXObject && \version_compare('1.4', $this->PDFVersion, '>')) {
+            $this->PDFVersion = '1.4';
+        }
+
+        $this->templates[$templateId] = [
+            'objectNumber' => null,
+            'id' => 'TPL' . $templateId,
+            'buffer' => $buffer,
+            'width' => $width,
+            'height' => $height,
+            'groupXObject' => $groupXObject,
+            'state' => [
+                'x' => $this->x,
+                'y' => $this->y,
+                'AutoPageBreak' => $this->AutoPageBreak,
+                'bMargin' => $this->bMargin,
+                'tMargin' => $this->tMargin,
+                'lMargin' => $this->lMargin,
+                'rMargin' => $this->rMargin,
+                'h' => $this->h,
+                'w' => $this->w,
+                'FontFamily' => $this->FontFamily,
+                'FontStyle' => $this->FontStyle,
+                'FontSizePt' => $this->FontSizePt,
+                'FontSize' => $this->FontSize,
+                'underline' => $this->underline,
+                'TextColor' => $this->TextColor,
+                'DrawColor' => $this->DrawColor,
+                'FillColor' => $this->FillColor,
+                'ColorFlag' => $this->ColorFlag
+            ]
+        ];
+
+        $this->SetAutoPageBreak(false);
+        $this->currentTemplateId = $templateId;
+
+        $this->h = $height;
+        $this->w = $width;
+
+        $this->SetXY($this->lMargin, $this->tMargin);
+        $this->SetRightMargin($this->w - $width + $this->rMargin);
+
+        return $templateId;
+    }
+
+    /**
+     * Ends a template.
+     *
+     * @return bool|int|null A template identifier.
+     */
+    public function endTemplate()
+    {
+        if (null === $this->currentTemplateId) {
+            return false;
+        }
+
+        $templateId = $this->currentTemplateId;
+        $template = $this->templates[$templateId];
+
+        $state = $template['state'];
+        $this->SetXY($state['x'], $state['y']);
+        $this->tMargin = $state['tMargin'];
+        $this->lMargin = $state['lMargin'];
+        $this->rMargin = $state['rMargin'];
+        $this->h = $state['h'];
+        $this->w = $state['w'];
+        $this->SetAutoPageBreak($state['AutoPageBreak'], $state['bMargin']);
+
+        $this->FontFamily = $state['FontFamily'];
+        $this->FontStyle = $state['FontStyle'];
+        $this->FontSizePt = $state['FontSizePt'];
+        $this->FontSize = $state['FontSize'];
+
+        $this->TextColor = $state['TextColor'];
+        $this->DrawColor = $state['DrawColor'];
+        $this->FillColor = $state['FillColor'];
+        $this->ColorFlag = $state['ColorFlag'];
+
+        $this->underline = $state['underline'];
+
+        $fontKey = $this->FontFamily . $this->FontStyle;
+        if ($fontKey) {
+            $this->CurrentFont =& $this->fonts[$fontKey];
+        } else {
+            unset($this->CurrentFont);
+        }
+
+        $this->currentTemplateId = null;
+
+        return $templateId;
+    }
+
+    /**
+     * Get the next template id.
+     *
+     * @return int
+     */
+    protected function getNextTemplateId()
+    {
+        return $this->templateId++;
+    }
+
+    /* overwritten FPDF methods: */
+
+    /**
+     * @inheritdoc
+     */
+    public function AddPage($orientation = '', $size = '', $rotation = 0)
+    {
+        if ($this->currentTemplateId !== null) {
+            throw new \BadMethodCallException('Pages cannot be added when writing to a template.');
+        }
+        parent::AddPage($orientation, $size, $rotation);
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function Link($x, $y, $w, $h, $link)
+    {
+        if ($this->currentTemplateId !== null) {
+            throw new \BadMethodCallException('Links cannot be set when writing to a template.');
+        }
+        parent::Link($x, $y, $w, $h, $link);
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function SetLink($link, $y = 0, $page = -1)
+    {
+        if ($this->currentTemplateId !== null) {
+            throw new \BadMethodCallException('Links cannot be set when writing to a template.');
+        }
+        return parent::SetLink($link, $y, $page);
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function SetDrawColor($r, $g = null, $b = null)
+    {
+        parent::SetDrawColor($r, $g, $b);
+        if ($this->page === 0 && $this->currentTemplateId !== null) {
+            $this->_out($this->DrawColor);
+        }
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function SetFillColor($r, $g = null, $b = null)
+    {
+        parent::SetFillColor($r, $g, $b);
+        if ($this->page === 0 && $this->currentTemplateId !== null) {
+            $this->_out($this->FillColor);
+        }
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function SetLineWidth($width)
+    {
+        parent::SetLineWidth($width);
+        if ($this->page === 0 && $this->currentTemplateId !== null) {
+            $this->_out(\sprintf('%.2F w', $width * $this->k));
+        }
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function SetFont($family, $style = '', $size = 0)
+    {
+        parent::SetFont($family, $style, $size);
+        if ($this->page === 0 && $this->currentTemplateId !== null) {
+            $this->_out(\sprintf('BT /F%d %.2F Tf ET', $this->CurrentFont['i'], $this->FontSizePt));
+        }
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function SetFontSize($size)
+    {
+        parent::SetFontSize($size);
+        if ($this->page === 0 && $this->currentTemplateId !== null) {
+            $this->_out(sprintf('BT /F%d %.2F Tf ET', $this->CurrentFont['i'], $this->FontSizePt));
+        }
+    }
+
+    /**
+     * @inheritdoc
+     */
+    protected function _putimages()
+    {
+        parent::_putimages();
+
+        foreach ($this->templates as $key => $template) {
+            $this->_newobj();
+            $this->templates[$key]['objectNumber'] = $this->n;
+
+            $this->_put('<</Type /XObject /Subtype /Form /FormType 1');
+            $this->_put(\sprintf('/BBox[0 0 %.2F %.2F]', $template['width'] * $this->k, $template['height'] * $this->k));
+            $this->_put('/Resources 2 0 R'); // default resources dictionary of FPDF
+
+            if ($this->compress) {
+                $buffer = \gzcompress($template['buffer']);
+                $this->_put('/Filter/FlateDecode');
+            } else {
+                $buffer = $template['buffer'];
+            }
+
+            $this->_put('/Length ' . \strlen($buffer));
+
+            if ($template['groupXObject']) {
+                $this->_put('/Group <</Type/Group/S/Transparency>>');
+            }
+
+            $this->_put('>>');
+            $this->_putstream($buffer);
+            $this->_put('endobj');
+        }
+    }
+
+    /**
+     * @inheritdoc
+     */
+    protected function _putxobjectdict()
+    {
+        foreach ($this->templates as $key => $template) {
+            $this->_put('/' . $template['id'] . ' ' . $template['objectNumber'] . ' 0 R');
+        }
+
+        parent::_putxobjectdict();
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function _out($s)
+    {
+        if ($this->currentTemplateId !== null) {
+            $this->templates[$this->currentTemplateId]['buffer'] .= $s . "\n";
+        } else {
+            parent::_out($s);
+        }
+    }
+}
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/Fpdi.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/Fpdi.php
new file mode 100755 (executable)
index 0000000..b49c103
--- /dev/null
@@ -0,0 +1,155 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi;
+
+use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
+use setasign\Fpdi\PdfParser\PdfParserException;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObject;
+use setasign\Fpdi\PdfParser\Type\PdfNull;
+
+/**
+ * Class Fpdi
+ *
+ * This class let you import pages of existing PDF documents into a reusable structure for FPDF.
+ *
+ * @package setasign\Fpdi
+ */
+class Fpdi extends FpdfTpl
+{
+    use FpdiTrait;
+
+    /**
+     * FPDI version
+     *
+     * @string
+     */
+    const VERSION = '2.2.0';
+
+    protected function _enddoc()
+    {
+        parent::_enddoc();
+        $this->cleanUp();
+    }
+
+    /**
+     * Draws an imported page or a template onto the page or another template.
+     *
+     * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
+     * aspect ratio.
+     *
+     * @param mixed $tpl The template id
+     * @param float|int|array $x The abscissa of upper-left corner. Alternatively you could use an assoc array
+     *                           with the keys "x", "y", "width", "height", "adjustPageSize".
+     * @param float|int $y The ordinate of upper-left corner.
+     * @param float|int|null $width The width.
+     * @param float|int|null $height The height.
+     * @param bool $adjustPageSize
+     * @return array The size
+     * @see Fpdi::getTemplateSize()
+     */
+    public function useTemplate($tpl, $x = 0, $y = 0, $width = null, $height = null, $adjustPageSize = false)
+    {
+        if (isset($this->importedPages[$tpl])) {
+            $size = $this->useImportedPage($tpl, $x, $y, $width, $height, $adjustPageSize);
+            if ($this->currentTemplateId !== null) {
+                $this->templates[$this->currentTemplateId]['resources']['templates']['importedPages'][$tpl] = $tpl;
+            }
+            return $size;
+        }
+
+        return parent::useTemplate($tpl, $x, $y, $width, $height, $adjustPageSize);
+    }
+
+    /**
+     * Get the size of an imported page or template.
+     *
+     * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
+     * aspect ratio.
+     *
+     * @param mixed $tpl The template id
+     * @param float|int|null $width The width.
+     * @param float|int|null $height The height.
+     * @return array|bool An array with following keys: width, height, 0 (=width), 1 (=height), orientation (L or P)
+     */
+    public function getTemplateSize($tpl, $width = null, $height = null)
+    {
+        $size = parent::getTemplateSize($tpl, $width, $height);
+        if ($size === false) {
+            return $this->getImportedPageSize($tpl, $width, $height);
+        }
+
+        return $size;
+    }
+
+    /**
+     * @inheritdoc
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    protected function _putimages()
+    {
+        $this->currentReaderId = null;
+        parent::_putimages();
+
+        foreach ($this->importedPages as $key => $pageData) {
+            $this->_newobj();
+            $this->importedPages[$key]['objectNumber'] = $this->n;
+            $this->currentReaderId = $pageData['readerId'];
+            $this->writePdfType($pageData['stream']);
+            $this->_put('endobj');
+        }
+
+        foreach (\array_keys($this->readers) as $readerId) {
+            $parser = $this->getPdfReader($readerId)->getParser();
+            $this->currentReaderId = $readerId;
+
+            while (($objectNumber = \array_pop($this->objectsToCopy[$readerId])) !== null) {
+                try {
+                    $object = $parser->getIndirectObject($objectNumber);
+
+                } catch (CrossReferenceException $e) {
+                    if ($e->getCode() === CrossReferenceException::OBJECT_NOT_FOUND) {
+                        $object = PdfIndirectObject::create($objectNumber, 0, new PdfNull());
+                    } else {
+                        throw $e;
+                    }
+                }
+
+                $this->writePdfType($object);
+            }
+        }
+
+        $this->currentReaderId = null;
+    }
+
+    /**
+     * @inheritdoc
+     */
+    protected function _putxobjectdict()
+    {
+        foreach ($this->importedPages as $key => $pageData) {
+            $this->_put('/' . $pageData['id'] . ' ' . $pageData['objectNumber'] . ' 0 R');
+        }
+
+        parent::_putxobjectdict();
+    }
+
+    /**
+     * @inheritdoc
+     */
+    protected function _put($s, $newLine = true)
+    {
+        if ($newLine) {
+            $this->buffer .= $s . "\n";
+        } else {
+            $this->buffer .= $s;
+        }
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/FpdiException.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/FpdiException.php
new file mode 100755 (executable)
index 0000000..d126c14
--- /dev/null
@@ -0,0 +1,19 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi;
+
+/**
+ * Base exception class for the FPDI package.
+ *
+ * @package setasign\Fpdi
+ */
+class FpdiException extends \Exception
+{
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/FpdiTrait.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/FpdiTrait.php
new file mode 100755 (executable)
index 0000000..0bdbc03
--- /dev/null
@@ -0,0 +1,562 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi;
+
+use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
+use setasign\Fpdi\PdfParser\Filter\FilterException;
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\PdfParserException;
+use setasign\Fpdi\PdfParser\StreamReader;
+use setasign\Fpdi\PdfParser\Type\PdfArray;
+use setasign\Fpdi\PdfParser\Type\PdfBoolean;
+use setasign\Fpdi\PdfParser\Type\PdfDictionary;
+use setasign\Fpdi\PdfParser\Type\PdfHexString;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObject;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObjectReference;
+use setasign\Fpdi\PdfParser\Type\PdfName;
+use setasign\Fpdi\PdfParser\Type\PdfNull;
+use setasign\Fpdi\PdfParser\Type\PdfNumeric;
+use setasign\Fpdi\PdfParser\Type\PdfStream;
+use setasign\Fpdi\PdfParser\Type\PdfString;
+use setasign\Fpdi\PdfParser\Type\PdfToken;
+use setasign\Fpdi\PdfParser\Type\PdfType;
+use setasign\Fpdi\PdfParser\Type\PdfTypeException;
+use setasign\Fpdi\PdfReader\PageBoundaries;
+use setasign\Fpdi\PdfReader\PdfReader;
+use setasign\Fpdi\PdfReader\PdfReaderException;
+use /* This namespace/class is used by the commercial FPDI PDF-Parser add-on. */
+    /** @noinspection PhpUndefinedClassInspection */
+    /** @noinspection PhpUndefinedNamespaceInspection */
+    setasign\FpdiPdfParser\PdfParser\PdfParser as FpdiPdfParser;
+
+/**
+ * The FpdiTrait
+ *
+ * This trait offers the core functionalities of FPDI. By passing them to a trait we can reuse it with e.g. TCPDF in a
+ * very easy way.
+ *
+ * @package setasign\Fpdi
+ */
+trait FpdiTrait
+{
+    /**
+     * The pdf reader instances.
+     *
+     * @var PdfReader[]
+     */
+    protected $readers = [];
+
+    /**
+     * Instances created internally.
+     *
+     * @var array
+     */
+    protected $createdReaders = [];
+
+    /**
+     * The current reader id.
+     *
+     * @var string
+     */
+    protected $currentReaderId;
+
+    /**
+     * Data of all imported pages.
+     *
+     * @var array
+     */
+    protected $importedPages = [];
+
+    /**
+     * A map from object numbers of imported objects to new assigned object numbers by FPDF.
+     *
+     * @var array
+     */
+    protected $objectMap = [];
+
+    /**
+     * An array with information about objects, which needs to be copied to the resulting document.
+     *
+     * @var array
+     */
+    protected $objectsToCopy = [];
+
+    /**
+     * Release resources and file handles.
+     *
+     * This method is called internally when the document is created successfully. By default it only cleans up
+     * stream reader instances which were created internally.
+     *
+     * @param bool $allReaders
+     */
+    public function cleanUp($allReaders = false)
+    {
+        $readers = $allReaders ? array_keys($this->readers) : $this->createdReaders;
+        foreach ($readers as $id) {
+            $this->readers[$id]->getParser()->getStreamReader()->cleanUp();
+            unset($this->readers[$id]);
+        }
+
+        $this->createdReaders= [];
+    }
+
+    /**
+     * Set the minimal PDF version.
+     *
+     * @param string $pdfVersion
+     */
+    protected function setMinPdfVersion($pdfVersion)
+    {
+        if (\version_compare($pdfVersion, $this->PDFVersion, '>')) {
+            $this->PDFVersion = $pdfVersion;
+        }
+    }
+
+    /** @noinspection PhpUndefinedClassInspection */
+    /**
+     * Get a new pdf parser instance.
+     *
+     * @param StreamReader $streamReader
+     * @return PdfParser|FpdiPdfParser
+     */
+    protected function getPdfParserInstance(StreamReader $streamReader)
+    {
+        /** @noinspection PhpUndefinedClassInspection */
+        if (\class_exists(FpdiPdfParser::class)) {
+            /** @noinspection PhpUndefinedClassInspection */
+            return new FpdiPdfParser($streamReader);
+        }
+
+        return new PdfParser($streamReader);
+    }
+
+    /**
+     * Get an unique reader id by the $file parameter.
+     *
+     * @param string|resource|PdfReader|StreamReader $file An open file descriptor, a path to a file, a PdfReader
+     *                                                     instance or a StreamReader instance.
+     * @return string
+     */
+    protected function getPdfReaderId($file)
+    {
+        if (\is_resource($file)) {
+            $id = (string) $file;
+        } elseif (\is_string($file)) {
+            $id = \realpath($file);
+            if ($id === false) {
+                $id = $file;
+            }
+        } elseif (\is_object($file)) {
+            $id = \spl_object_hash($file);
+        } else {
+            throw new \InvalidArgumentException(
+                \sprintf('Invalid type in $file parameter (%s)', \gettype($file))
+            );
+        }
+
+        /** @noinspection OffsetOperationsInspection */
+        if (isset($this->readers[$id])) {
+            return $id;
+        }
+
+        if (\is_resource($file)) {
+            $streamReader = new StreamReader($file);
+        } elseif (\is_string($file)) {
+            $streamReader = StreamReader::createByFile($file);
+            $this->createdReaders[] = $id;
+        } else {
+            $streamReader = $file;
+        }
+
+        $reader = new PdfReader($this->getPdfParserInstance($streamReader));
+        /** @noinspection OffsetOperationsInspection */
+        $this->readers[$id] = $reader;
+
+        return $id;
+    }
+
+    /**
+     * Get a pdf reader instance by its id.
+     *
+     * @param string $id
+     * @return PdfReader
+     */
+    protected function getPdfReader($id)
+    {
+        if (isset($this->readers[$id])) {
+            return $this->readers[$id];
+        }
+
+        throw new \InvalidArgumentException(
+            \sprintf('No pdf reader with the given id (%s) exists.', $id)
+        );
+    }
+
+    /**
+     * Set the source PDF file.
+     *
+     * @param string|resource|StreamReader $file Path to the file or a stream resource or a StreamReader instance.
+     * @return int The page count of the PDF document.
+     * @throws PdfParserException
+     */
+    public function setSourceFile($file)
+    {
+        $this->currentReaderId = $this->getPdfReaderId($file);
+        $this->objectsToCopy[$this->currentReaderId] = [];
+
+        $reader = $this->getPdfReader($this->currentReaderId);
+        $this->setMinPdfVersion($reader->getPdfVersion());
+
+        return $reader->getPageCount();
+    }
+
+    /**
+     * Imports a page.
+     *
+     * @param int $pageNumber The page number.
+     * @param string $box The page boundary to import. Default set to PageBoundaries::CROP_BOX.
+     * @param bool $groupXObject Define the form XObject as a group XObject to support transparency (if used).
+     * @return string A unique string identifying the imported page.
+     * @throws CrossReferenceException
+     * @throws FilterException
+     * @throws PdfParserException
+     * @throws PdfTypeException
+     * @throws PdfReaderException
+     * @see PageBoundaries
+     */
+    public function importPage($pageNumber, $box = PageBoundaries::CROP_BOX, $groupXObject = true)
+    {
+        if (null === $this->currentReaderId) {
+            throw new \BadMethodCallException('No reader initiated. Call setSourceFile() first.');
+        }
+
+        $pageId = $this->currentReaderId;
+
+        $pageNumber = (int)$pageNumber;
+        $pageId .= '|' . $pageNumber . '|' . ($groupXObject ? '1' : '0');
+
+        // for backwards compatibility with FPDI 1
+        $box = \ltrim($box, '/');
+        if (!PageBoundaries::isValidName($box)) {
+            throw new \InvalidArgumentException(
+                \sprintf('Box name is invalid: "%s"', $box)
+            );
+        }
+
+        $pageId .= '|' . $box;
+
+        if (isset($this->importedPages[$pageId])) {
+            return $pageId;
+        }
+
+        $reader = $this->getPdfReader($this->currentReaderId);
+        $page = $reader->getPage($pageNumber);
+
+        $bbox = $page->getBoundary($box);
+        if ($bbox === false) {
+            throw new PdfReaderException(
+                \sprintf("Page doesn't have a boundary box (%s).", $box),
+                PdfReaderException::MISSING_DATA
+            );
+        }
+
+        $dict = new PdfDictionary();
+        $dict->value['Type'] = PdfName::create('XObject');
+        $dict->value['Subtype'] = PdfName::create('Form');
+        $dict->value['FormType'] = PdfNumeric::create(1);
+        $dict->value['BBox'] = $bbox->toPdfArray();
+
+        if ($groupXObject) {
+            $this->setMinPdfVersion('1.4');
+            $dict->value['Group'] = PdfDictionary::create([
+                'Type' => PdfName::create('Group'),
+                'S' => PdfName::create('Transparency')
+            ]);
+        }
+
+        $resources = $page->getAttribute('Resources');
+        if ($resources !== null) {
+            $dict->value['Resources'] = $resources;
+        }
+
+        list($width, $height) = $page->getWidthAndHeight($box);
+
+        $a = 1;
+        $b = 0;
+        $c = 0;
+        $d = 1;
+        $e = -$bbox->getLlx();
+        $f = -$bbox->getLly();
+
+        $rotation = $page->getRotation();
+
+        if ($rotation !== 0) {
+            $rotation *= -1;
+            $angle = $rotation * M_PI/180;
+            $a = \cos($angle);
+            $b = \sin($angle);
+            $c = -$b;
+            $d = $a;
+
+            switch ($rotation) {
+                case -90:
+                    $e = -$bbox->getLly();
+                    $f = $bbox->getUrx();
+                    break;
+                case -180:
+                    $e = $bbox->getUrx();
+                    $f = $bbox->getUry();
+                    break;
+                case -270:
+                    $e = $bbox->getUry();
+                    $f = -$bbox->getLlx();
+                    break;
+            }
+        }
+
+        // we need to rotate/translate
+        if ($a != 1 || $b != 0 || $c != 0 || $d != 1 || $e != 0 || $f != 0) {
+            $dict->value['Matrix'] = PdfArray::create([
+                PdfNumeric::create($a), PdfNumeric::create($b), PdfNumeric::create($c),
+                PdfNumeric::create($d), PdfNumeric::create($e), PdfNumeric::create($f)
+            ]);
+        }
+
+        // try to use the existing content stream
+        $pageDict = $page->getPageDictionary();
+
+        $contentsObject = PdfType::resolve(PdfDictionary::get($pageDict, 'Contents'), $reader->getParser(), true);
+        $contents =  PdfType::resolve($contentsObject, $reader->getParser());
+
+        // just copy the stream reference if it is only a single stream
+        if (($contentsIsStream = ($contents instanceof PdfStream))
+            || ($contents instanceof PdfArray && \count($contents->value) === 1)
+        ) {
+            if ($contentsIsStream) {
+                /**
+                 * @var PdfIndirectObject $contentsObject
+                 */
+                $stream = $contents;
+            } else {
+                $stream = PdfType::resolve($contents->value[0], $reader->getParser());
+            }
+
+            $filter = PdfDictionary::get($stream->value, 'Filter');
+            if (!$filter instanceof PdfNull) {
+                $dict->value['Filter'] = $filter;
+            }
+            $length = PdfType::resolve(PdfDictionary::get($stream->value, 'Length'), $reader->getParser());
+            $dict->value['Length'] = $length;
+            $stream->value = $dict;
+
+        // otherwise extract it from the array and re-compress the whole stream
+        } else {
+            $streamContent = $this->compress
+                ? \gzcompress($page->getContentStream())
+                : $page->getContentStream();
+
+            $dict->value['Length'] = PdfNumeric::create(\strlen($streamContent));
+            if ($this->compress) {
+                $dict->value['Filter'] = PdfName::create('FlateDecode');
+            }
+
+            $stream = PdfStream::create($dict, $streamContent);
+        }
+
+        $this->importedPages[$pageId] = [
+            'objectNumber' => null,
+            'readerId' => $this->currentReaderId,
+            'id' => 'TPL' . $this->getNextTemplateId(),
+            'width' => $width / $this->k,
+            'height' => $height / $this->k,
+            'stream' => $stream
+        ];
+
+        return $pageId;
+    }
+
+    /**
+     * Draws an imported page onto the page.
+     *
+     * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
+     * aspect ratio.
+     *
+     * @param mixed $pageId The page id
+     * @param float|int|array $x The abscissa of upper-left corner. Alternatively you could use an assoc array
+     *                           with the keys "x", "y", "width", "height", "adjustPageSize".
+     * @param float|int $y The ordinate of upper-left corner.
+     * @param float|int|null $width The width.
+     * @param float|int|null $height The height.
+     * @param bool $adjustPageSize
+     * @return array The size.
+     * @see Fpdi::getTemplateSize()
+     */
+    public function useImportedPage($pageId, $x = 0, $y = 0, $width = null, $height = null, $adjustPageSize = false)
+    {
+        if (\is_array($x)) {
+            /** @noinspection OffsetOperationsInspection */
+            unset($x['pageId']);
+            \extract($x, EXTR_IF_EXISTS);
+            /** @noinspection NotOptimalIfConditionsInspection */
+            if (\is_array($x)) {
+                $x = 0;
+            }
+        }
+
+        if (!isset($this->importedPages[$pageId])) {
+            throw new \InvalidArgumentException('Imported page does not exist!');
+        }
+
+        $importedPage = $this->importedPages[$pageId];
+
+        $originalSize = $this->getTemplateSize($pageId);
+        $newSize = $this->getTemplateSize($pageId, $width, $height);
+        if ($adjustPageSize) {
+            $this->setPageFormat($newSize, $newSize['orientation']);
+        }
+
+        $this->_out(
+            // reset standard values, translate and scale
+            \sprintf(
+                'q 0 J 1 w 0 j 0 G 0 g %.4F 0 0 %.4F %.4F %.4F cm /%s Do Q',
+                ($newSize['width'] / $originalSize['width']),
+                ($newSize['height'] / $originalSize['height']),
+                $x * $this->k,
+                ($this->h - $y - $newSize['height']) * $this->k,
+                $importedPage['id']
+            )
+        );
+
+        return $newSize;
+    }
+
+    /**
+     * Get the size of an imported page.
+     *
+     * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
+     * aspect ratio.
+     *
+     * @param mixed $tpl The template id
+     * @param float|int|null $width The width.
+     * @param float|int|null $height The height.
+     * @return array|bool An array with following keys: width, height, 0 (=width), 1 (=height), orientation (L or P)
+     */
+    public function getImportedPageSize($tpl, $width = null, $height = null)
+    {
+        if (isset($this->importedPages[$tpl])) {
+            $importedPage = $this->importedPages[$tpl];
+
+            if ($width === null && $height === null) {
+                $width = $importedPage['width'];
+                $height = $importedPage['height'];
+            } elseif ($width === null) {
+                $width = $height * $importedPage['width'] / $importedPage['height'];
+            }
+
+            if ($height  === null) {
+                $height = $width * $importedPage['height'] / $importedPage['width'];
+            }
+
+            if ($height <= 0. || $width <= 0.) {
+                throw new \InvalidArgumentException('Width or height parameter needs to be larger than zero.');
+            }
+
+            return [
+                'width' => $width,
+                'height' => $height,
+                0 => $width,
+                1 => $height,
+                'orientation' => $width > $height ? 'L' : 'P'
+            ];
+        }
+
+        return false;
+    }
+
+    /**
+     * Writes a PdfType object to the resulting buffer.
+     *
+     * @param PdfType $value
+     * @throws PdfTypeException
+     */
+    protected function writePdfType(PdfType $value)
+    {
+        if ($value instanceof PdfNumeric) {
+            if (\is_int($value->value)) {
+                $this->_put($value->value . ' ', false);
+            } else {
+                $this->_put(\rtrim(\rtrim(\sprintf('%.5F', $value->value), '0'), '.') . ' ', false);
+            }
+
+        } elseif ($value instanceof PdfName) {
+            $this->_put('/' . $value->value . ' ', false);
+
+        } elseif ($value instanceof PdfString) {
+            $this->_put('(' . $value->value . ')', false);
+
+        } elseif ($value instanceof PdfHexString) {
+            $this->_put('<' . $value->value . '>');
+
+        } elseif ($value instanceof PdfBoolean) {
+            $this->_put($value->value ? 'true ' : 'false ', false);
+
+        } elseif ($value instanceof PdfArray) {
+            $this->_put('[', false);
+            foreach ($value->value as $entry) {
+                $this->writePdfType($entry);
+            }
+            $this->_put(']');
+
+        } elseif ($value instanceof PdfDictionary) {
+            $this->_put('<<', false);
+            foreach ($value->value as $name => $entry) {
+                $this->_put('/' . $name . ' ', false);
+                $this->writePdfType($entry);
+            }
+            $this->_put('>>');
+
+        } elseif ($value instanceof PdfToken) {
+            $this->_put($value->value);
+
+        } elseif ($value instanceof PdfNull) {
+            $this->_put('null ');
+
+        } elseif ($value instanceof PdfStream) {
+            /**
+             * @var $value PdfStream
+             */
+            $this->writePdfType($value->value);
+            $this->_put('stream');
+            $this->_put($value->getStream());
+            $this->_put('endstream');
+
+        } elseif ($value instanceof PdfIndirectObjectReference) {
+            if (!isset($this->objectMap[$this->currentReaderId])) {
+                $this->objectMap[$this->currentReaderId] = [];
+            }
+
+            if (!isset($this->objectMap[$this->currentReaderId][$value->value])) {
+                $this->objectMap[$this->currentReaderId][$value->value] = ++$this->n;
+                $this->objectsToCopy[$this->currentReaderId][] = $value->value;
+            }
+
+            $this->_put($this->objectMap[$this->currentReaderId][$value->value] . ' 0 R ', false);
+
+        } elseif ($value instanceof PdfIndirectObject) {
+            /**
+             * @var $value PdfIndirectObject
+             */
+            $n = $this->objectMap[$this->currentReaderId][$value->objectNumber];
+            $this->_newobj($n);
+            $this->writePdfType($value->value);
+            $this->_put('endobj');
+        }
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/CrossReference/AbstractReader.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/CrossReference/AbstractReader.php
new file mode 100755 (executable)
index 0000000..1d5c579
--- /dev/null
@@ -0,0 +1,96 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\CrossReference;
+
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\Type\PdfDictionary;
+use setasign\Fpdi\PdfParser\Type\PdfToken;
+use setasign\Fpdi\PdfParser\Type\PdfTypeException;
+
+/**
+ * Abstract class for cross-reference reader classes.
+ *
+ * @package setasign\Fpdi\PdfParser\CrossReference
+ */
+abstract class AbstractReader
+{
+    /**
+     * @var PdfParser
+     */
+    protected $parser;
+
+    /**
+     * @var PdfDictionary
+     */
+    protected $trailer;
+
+    /**
+     * AbstractReader constructor.
+     *
+     * @param PdfParser $parser
+     * @throws CrossReferenceException
+     * @throws PdfTypeException
+     */
+    public function __construct(PdfParser $parser)
+    {
+        $this->parser = $parser;
+        $this->readTrailer();
+    }
+
+    /**
+     * Get the trailer dictionary.
+     *
+     * @return PdfDictionary
+     */
+    public function getTrailer()
+    {
+        return $this->trailer;
+    }
+
+    /**
+     * Read the trailer dictionary.
+     *
+     * @throws CrossReferenceException
+     * @throws PdfTypeException
+     */
+    protected function readTrailer()
+    {
+        try {
+            $trailerKeyword = $this->parser->readValue(null, PdfToken::class);
+            if ($trailerKeyword->value !== 'trailer') {
+                throw new CrossReferenceException(
+                    \sprintf(
+                        'Unexpected end of cross reference. "trailer"-keyword expected, got: %s.',
+                        $trailerKeyword->value
+                    ),
+                    CrossReferenceException::UNEXPECTED_END
+                );
+            }
+        } catch (PdfTypeException $e) {
+            throw new CrossReferenceException(
+                'Unexpected end of cross reference. "trailer"-keyword expected, got an invalid object type.',
+                CrossReferenceException::UNEXPECTED_END,
+                $e
+            );
+        }
+
+        try {
+            $trailer = $this->parser->readValue(null, PdfDictionary::class);
+        } catch (PdfTypeException $e) {
+            throw new CrossReferenceException(
+                'Unexpected end of cross reference. Trailer not found.',
+                CrossReferenceException::UNEXPECTED_END,
+                $e
+            );
+        }
+
+        $this->trailer = $trailer;
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/CrossReference/CrossReference.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/CrossReference/CrossReference.php
new file mode 100755 (executable)
index 0000000..95674ce
--- /dev/null
@@ -0,0 +1,320 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\CrossReference;
+
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\Type\PdfDictionary;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObject;
+use setasign\Fpdi\PdfParser\Type\PdfNumeric;
+use setasign\Fpdi\PdfParser\Type\PdfStream;
+use setasign\Fpdi\PdfParser\Type\PdfToken;
+use setasign\Fpdi\PdfParser\Type\PdfTypeException;
+
+/**
+ * Class CrossReference
+ *
+ * This class processes the standard cross reference of a PDF document.
+ *
+ * @package setasign\Fpdi\PdfParser\CrossReference
+ */
+class CrossReference
+{
+    /**
+     * The byte length in which the "startxref" keyword should be searched.
+     *
+     * @var int
+     */
+    static public $trailerSearchLength = 5500;
+
+    /**
+     * @var int
+     */
+    protected $fileHeaderOffset = 0;
+
+    /**
+     * @var PdfParser
+     */
+    protected $parser;
+
+    /**
+     * @var ReaderInterface[]
+     */
+    protected $readers = [];
+
+    /**
+     * CrossReference constructor.
+     *
+     * @param PdfParser $parser
+     * @throws CrossReferenceException
+     * @throws PdfTypeException
+     */
+    public function __construct(PdfParser $parser, $fileHeaderOffset = 0)
+    {
+        $this->parser = $parser;
+        $this->fileHeaderOffset = $fileHeaderOffset;
+
+        $offset = $this->findStartXref();
+        $reader = null;
+        /** @noinspection TypeUnsafeComparisonInspection */
+        while ($offset != false) { // By doing an unsafe comparsion we ignore faulty references to byte offset 0
+            try {
+                $reader = $this->readXref($offset + $this->fileHeaderOffset);
+            } catch (CrossReferenceException $e) {
+                // sometimes the file header offset is part of the byte offsets, so let's retry by resetting it to zero.
+                if ($e->getCode() === CrossReferenceException::INVALID_DATA && $this->fileHeaderOffset !== 0) {
+                    $this->fileHeaderOffset = 0;
+                    $reader = $this->readXref($offset + $this->fileHeaderOffset);
+                } else {
+                    throw $e;
+                }
+            }
+
+            $trailer = $reader->getTrailer();
+            $this->checkForEncryption($trailer);
+            $this->readers[] = $reader;
+
+            if (isset($trailer->value['Prev'])) {
+                $offset = $trailer->value['Prev']->value;
+            } else {
+                $offset = false;
+            }
+        }
+
+        // fix faulty sub-section header
+        if ($reader instanceof FixedReader) {
+            /**
+             * @var FixedReader $reader
+             */
+            $reader->fixFaultySubSectionShift();
+        }
+
+        if ($reader === null) {
+            throw new CrossReferenceException('No cross-reference found.', CrossReferenceException::NO_XREF_FOUND);
+        }
+    }
+
+    /**
+     * Get the size of the cross reference.
+     *
+     * @return integer
+     */
+    public function getSize()
+    {
+        return $this->getTrailer()->value['Size']->value;
+    }
+
+    /**
+     * Get the trailer dictionary.
+     *
+     * @return PdfDictionary
+     */
+    public function getTrailer()
+    {
+        return $this->readers[0]->getTrailer();
+    }
+
+    /**
+     * Get the cross reference readser instances.
+     *
+     * @return ReaderInterface[]
+     */
+    public function getReaders()
+    {
+        return $this->readers;
+    }
+
+    /**
+     * Get the offset by an object number.
+     *
+     * @param int $objectNumber
+     * @return integer|bool
+     */
+    public function getOffsetFor($objectNumber)
+    {
+        foreach ($this->getReaders() as $reader) {
+            $offset = $reader->getOffsetFor($objectNumber);
+            if ($offset !== false) {
+                return $offset;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Get an indirect object by its object number.
+     *
+     * @param int $objectNumber
+     * @return PdfIndirectObject
+     * @throws CrossReferenceException
+     */
+    public function getIndirectObject($objectNumber)
+    {
+        $offset = $this->getOffsetFor($objectNumber);
+        if ($offset === false) {
+            throw new CrossReferenceException(
+                \sprintf('Object (id:%s) not found.', $objectNumber),
+                CrossReferenceException::OBJECT_NOT_FOUND
+            );
+        }
+
+        $parser = $this->parser;
+
+        $parser->getTokenizer()->clearStack();
+        $parser->getStreamReader()->reset($offset + $this->fileHeaderOffset);
+
+        try {
+            /** @var PdfIndirectObject $object */
+            $object = $parser->readValue(null, PdfIndirectObject::class);
+        } catch (PdfTypeException $e) {
+            throw new CrossReferenceException(
+                \sprintf('Object (id:%s) not found at location (%s).', $objectNumber, $offset),
+                CrossReferenceException::OBJECT_NOT_FOUND,
+                $e
+            );
+        }
+
+        if ($object->objectNumber !== $objectNumber) {
+            throw new CrossReferenceException(
+                \sprintf('Wrong object found, got %s while %s was expected.', $object->objectNumber, $objectNumber),
+                CrossReferenceException::OBJECT_NOT_FOUND
+            );
+        }
+
+        return $object;
+    }
+
+    /**
+     * Read the cross-reference table at a given offset.
+     *
+     * Internally the method will try to evaluate the best reader for this cross-reference.
+     *
+     * @param int $offset
+     * @return ReaderInterface
+     * @throws CrossReferenceException
+     * @throws PdfTypeException
+     */
+    protected function readXref($offset)
+    {
+        $this->parser->getStreamReader()->reset($offset);
+        $this->parser->getTokenizer()->clearStack();
+        $initValue = $this->parser->readValue();
+        
+        return $this->initReaderInstance($initValue);
+    }
+
+    /**
+     * Get a cross-reference reader instance.
+     *
+     * @param PdfToken|PdfIndirectObject $initValue
+     * @return ReaderInterface|bool
+     * @throws CrossReferenceException
+     * @throws PdfTypeException
+     */
+    protected function initReaderInstance($initValue)
+    {
+        $position = $this->parser->getStreamReader()->getPosition()
+            + $this->parser->getStreamReader()->getOffset() + $this->fileHeaderOffset;
+
+        if ($initValue instanceof PdfToken && $initValue->value === 'xref') {
+            try {
+                return new FixedReader($this->parser);
+            } catch (CrossReferenceException $e) {
+                $this->parser->getStreamReader()->reset($position);
+                $this->parser->getTokenizer()->clearStack();
+
+                return new LineReader($this->parser);
+            }
+        }
+
+        if ($initValue instanceof PdfIndirectObject) {
+            // check for encryption
+            $stream = PdfStream::ensure($initValue->value);
+
+            $type = PdfDictionary::get($stream->value, 'Type');
+            if ($type->value !== 'XRef') {
+                throw new CrossReferenceException(
+                    'The xref position points to an incorrect object type.',
+                    CrossReferenceException::INVALID_DATA
+                );
+            }
+
+            $this->checkForEncryption($stream->value);
+
+            throw new CrossReferenceException(
+                'This PDF document probably uses a compression technique which is not supported by the ' .
+                'free parser shipped with FPDI. (See https://www.setasign.com/fpdi-pdf-parser for more details)',
+                CrossReferenceException::COMPRESSED_XREF
+            );
+        }
+
+        throw new CrossReferenceException(
+            'The xref position points to an incorrect object type.',
+            CrossReferenceException::INVALID_DATA
+        );
+    }
+
+    /**
+     * Check for encryption.
+     *
+     * @param PdfDictionary $dictionary
+     * @throws CrossReferenceException
+     */
+    protected function checkForEncryption(PdfDictionary $dictionary)
+    {
+        if (isset($dictionary->value['Encrypt'])) {
+            throw new CrossReferenceException(
+                'This PDF document is encrypted and cannot be processed with FPDI.',
+                CrossReferenceException::ENCRYPTED
+            );
+        }
+    }
+
+    /**
+     * Find the start position for the first cross-reference.
+     *
+     * @return int The byte-offset position of the first cross-reference.
+     * @throws CrossReferenceException
+     */
+    protected function findStartXref()
+    {
+        $reader = $this->parser->getStreamReader();
+        $reader->reset(-self::$trailerSearchLength, self::$trailerSearchLength);
+
+        $buffer = $reader->getBuffer(false);
+        $pos = \strrpos($buffer, 'startxref');
+        $addOffset = 9;
+        if ($pos === false) {
+            // Some corrupted documents uses startref, instead of startxref
+            $pos = \strrpos($buffer, 'startref');
+            if ($pos === false) {
+                throw new CrossReferenceException(
+                    'Unable to find pointer to xref table',
+                    CrossReferenceException::NO_STARTXREF_FOUND
+                );
+            }
+            $addOffset = 8;
+        }
+
+        $reader->setOffset($pos + $addOffset);
+
+        try {
+            $value = $this->parser->readValue(null, PdfNumeric::class);
+        } catch (PdfTypeException $e) {
+            throw new CrossReferenceException(
+                'Invalid data after startxref keyword.',
+                CrossReferenceException::INVALID_DATA,
+                $e
+            );
+        }
+
+        return $value->value;
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/CrossReference/CrossReferenceException.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/CrossReference/CrossReferenceException.php
new file mode 100755 (executable)
index 0000000..3fa9b33
--- /dev/null
@@ -0,0 +1,80 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\CrossReference;
+
+use setasign\Fpdi\PdfParser\PdfParserException;
+
+/**
+ * Exception used by the CrossReference and Reader classes.
+ *
+ * @package setasign\Fpdi\PdfParser\CrossReference
+ */
+class CrossReferenceException extends PdfParserException
+{
+    /**
+     * @var int
+     */
+    const INVALID_DATA = 0x0101;
+
+    /**
+     * @var int
+     */
+    const XREF_MISSING = 0x0102;
+
+    /**
+     * @var int
+     */
+    const ENTRIES_TOO_LARGE = 0x0103;
+
+    /**
+     * @var int
+     */
+    const ENTRIES_TOO_SHORT = 0x0104;
+
+    /**
+     * @var int
+     */
+    const NO_ENTRIES = 0x0105;
+
+    /**
+     * @var int
+     */
+    const NO_TRAILER_FOUND = 0x0106;
+
+    /**
+     * @var int
+     */
+    const NO_STARTXREF_FOUND = 0x0107;
+
+    /**
+     * @var int
+     */
+    const NO_XREF_FOUND = 0x0108;
+
+    /**
+     * @var int
+     */
+    const UNEXPECTED_END = 0x0109;
+
+    /**
+     * @var int
+     */
+    const OBJECT_NOT_FOUND = 0x010A;
+
+    /**
+     * @var int
+     */
+    const COMPRESSED_XREF = 0x010B;
+
+    /**
+     * @var int
+     */
+    const ENCRYPTED = 0x010C;
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/CrossReference/FixedReader.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/CrossReference/FixedReader.php
new file mode 100755 (executable)
index 0000000..f96b979
--- /dev/null
@@ -0,0 +1,196 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\CrossReference;
+
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\StreamReader;
+
+/**
+ * Class FixedReader
+ *
+ * This reader allows a very less overhead parsing of single entries of the cross-reference, because the main entries
+ * are only read when needed and not in a single run.
+ *
+ * @package setasign\Fpdi\PdfParser\CrossReference
+ */
+class FixedReader extends AbstractReader implements ReaderInterface
+{
+    /**
+     * @var StreamReader
+     */
+    protected $reader;
+
+    /**
+     * Data of subsections.
+     *
+     * @var array
+     */
+    protected $subSections;
+
+    /**
+     * FixedReader constructor.
+     *
+     * @param PdfParser $parser
+     * @throws CrossReferenceException
+     */
+    public function __construct(PdfParser $parser)
+    {
+        $this->reader = $parser->getStreamReader();
+        $this->read();
+        parent::__construct($parser);
+    }
+
+    /**
+     * Get all subsection data.
+     *
+     * @return array
+     */
+    public function getSubSections()
+    {
+        return $this->subSections;
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function getOffsetFor($objectNumber)
+    {
+        foreach ($this->subSections as $offset => list($startObject, $objectCount)) {
+            if ($objectNumber >= $startObject && $objectNumber < ($startObject + $objectCount)) {
+                $position = $offset + 20 * ($objectNumber - $startObject);
+                $this->reader->ensure($position, 20);
+                $line = $this->reader->readBytes(20);
+                if ($line[17] === 'f') {
+                    return false;
+                }
+
+                return (int) \substr($line, 0, 10);
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Read the cross-reference.
+     *
+     * This reader will only read the subsections in this method. The offsets were resolved individually by this
+     * information.
+     *
+     * @throws CrossReferenceException
+     */
+    protected function read()
+    {
+        $subSections = [];
+
+        $startObject = $entryCount = $lastLineStart = null;
+        $validityChecked = false;
+        while (($line = $this->reader->readLine(20)) !== false) {
+            if (\strpos($line, 'trailer') !== false) {
+                $this->reader->reset($lastLineStart);
+                break;
+            }
+
+            // jump over if line content doesn't match the expected string
+            if (\sscanf($line, '%d %d', $startObject, $entryCount) !== 2) {
+                continue;
+            }
+
+            $oldPosition = $this->reader->getPosition();
+            $position = $oldPosition + $this->reader->getOffset();
+
+            if (!$validityChecked && $entryCount > 0) {
+                $nextLine = $this->reader->readBytes(21);
+                /* Check the next line for maximum of 20 bytes and not longer
+                 * By catching 21 bytes and trimming the length should be still 21.
+                 */
+                if (\strlen(\trim($nextLine)) !== 21) {
+                    throw new CrossReferenceException(
+                        'Cross-reference entries are larger than 20 bytes.',
+                        CrossReferenceException::ENTRIES_TOO_LARGE
+                    );
+                }
+
+                /* Check for less than 20 bytes: cut the line to 20 bytes and trim; have to result in exactly 18 bytes.
+                 * If it would have less bytes the substring would get the first bytes of the next line which would
+                 * evaluate to a 20 bytes long string after trimming.
+                 */
+                if (\strlen(\trim(\substr($nextLine, 0, 20))) !== 18) {
+                    throw new CrossReferenceException(
+                        'Cross-reference entries are less than 20 bytes.',
+                        CrossReferenceException::ENTRIES_TOO_SHORT
+                    );
+                }
+
+                $validityChecked = true;
+            }
+
+            $subSections[$position] = [$startObject, $entryCount];
+
+            $lastLineStart = $position + $entryCount * 20;
+            $this->reader->reset($lastLineStart);
+        }
+
+        // reset after the last correct parsed line
+        $this->reader->reset($lastLineStart);
+
+        if (\count($subSections) === 0) {
+            throw new CrossReferenceException(
+                'No entries found in cross-reference.',
+                CrossReferenceException::NO_ENTRIES
+            );
+        }
+
+        $this->subSections = $subSections;
+    }
+
+    /**
+     * Fixes an invalid object number shift.
+     *
+     * This method can be used to repair documents with an invalid subsection header:
+     *
+     * <code>
+     * xref
+     * 1 7
+     * 0000000000 65535 f
+     * 0000000009 00000 n
+     * 0000412075 00000 n
+     * 0000412172 00000 n
+     * 0000412359 00000 n
+     * 0000412417 00000 n
+     * 0000412468 00000 n
+     * </code>
+     *
+     * It shall only be called on the first table.
+     *
+     * @return bool
+     */
+    public function fixFaultySubSectionShift()
+    {
+        $subSections = $this->getSubSections();
+        if (\count($subSections) > 1) {
+            return false;
+        }
+
+        $subSection = \current($subSections);
+        if ($subSection[0] != 1) {
+            return false;
+        }
+
+        if ($this->getOffsetFor(1) === false) {
+            foreach ($subSections as $offset => list($startObject, $objectCount)) {
+                $this->subSections[$offset] = [$startObject - 1, $objectCount];
+            }
+            return true;
+        }
+
+        return false;
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/CrossReference/LineReader.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/CrossReference/LineReader.php
new file mode 100755 (executable)
index 0000000..31a96be
--- /dev/null
@@ -0,0 +1,173 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\CrossReference;
+
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\StreamReader;
+
+/**
+ * Class LineReader
+ *
+ * This reader class read all cross-reference entries in a single run.
+ * It supports reading cross-references with e.g. invalid data (e.g. entries with a length < or > 20 bytes).
+ *
+ * @package setasign\Fpdi\PdfParser\CrossReference
+ */
+class LineReader extends AbstractReader implements ReaderInterface
+{
+    /**
+     * The object offsets.
+     *
+     * @var array
+     */
+    protected $offsets;
+
+    /**
+     * LineReader constructor.
+     *
+     * @param PdfParser $parser
+     * @throws CrossReferenceException
+     */
+    public function __construct(PdfParser $parser)
+    {
+        $this->read($this->extract($parser->getStreamReader()));
+        parent::__construct($parser);
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function getOffsetFor($objectNumber)
+    {
+        if (isset($this->offsets[$objectNumber])) {
+            return $this->offsets[$objectNumber][0];
+        }
+
+        return false;
+    }
+
+    /**
+     * Get all found offsets.
+     *
+     * @return array
+     */
+    public function getOffsets()
+    {
+        return $this->offsets;
+    }
+
+    /**
+     * Extracts the cross reference data from the stream reader.
+     *
+     * @param StreamReader $reader
+     * @return string
+     * @throws CrossReferenceException
+     */
+    protected function extract(StreamReader $reader)
+    {
+        $cycles = -1;
+        $bytesPerCycle = 100;
+
+        $reader->reset(null, $bytesPerCycle);
+
+        while (
+            ($trailerPos = \strpos($reader->getBuffer(false), 'trailer', \max($bytesPerCycle * $cycles++, 0))) === false
+        ) {
+            if ($reader->increaseLength($bytesPerCycle) === false) {
+                break;
+            }
+        }
+
+        if ($trailerPos === false) {
+            throw new CrossReferenceException(
+                'Unexpected end of cross reference. "trailer"-keyword not found.',
+                CrossReferenceException::NO_TRAILER_FOUND
+            );
+        }
+
+        $xrefContent = \substr($reader->getBuffer(false), 0, $trailerPos);
+        $reader->reset($reader->getPosition() + $trailerPos);
+
+        return $xrefContent;
+    }
+
+    /**
+     * Read the cross-reference entries.
+     *
+     * @param string $xrefContent
+     * @throws CrossReferenceException
+     */
+    protected function read($xrefContent)
+    {
+        // get eol markers in the first 100 bytes
+        \preg_match_all("/(\r\n|\n|\r)/", \substr($xrefContent, 0, 100), $m);
+
+        if (\count($m[0]) === 0) {
+            throw new CrossReferenceException(
+                'No data found in cross-reference.',
+                CrossReferenceException::INVALID_DATA
+            );
+        }
+
+        // count(array_count_values()) is faster then count(array_unique())
+        // @see https://github.com/symfony/symfony/pull/23731
+        // can be reverted for php7.2
+        $differentLineEndings = \count(\array_count_values($m[0]));
+        if ($differentLineEndings > 1) {
+            $lines = \preg_split("/(\r\n|\n|\r)/", $xrefContent, -1, PREG_SPLIT_NO_EMPTY);
+        } else {
+            $lines = \explode($m[0][0], $xrefContent);
+        }
+
+        unset($differentLineEndings, $m);
+        $linesCount = \count($lines);
+        $start = null;
+        $entryCount = 0;
+
+        $offsets = [];
+
+        /** @noinspection ForeachInvariantsInspection */
+        for ($i = 0; $i < $linesCount; $i++) {
+            $line = \trim($lines[$i]);
+            if ($line) {
+                $pieces = \explode(' ', $line);
+
+                $c = \count($pieces);
+                switch ($c) {
+                    case 2:
+                        $start = (int) $pieces[0];
+                        $entryCount += (int) $pieces[1];
+                        break;
+
+                    /** @noinspection PhpMissingBreakStatementInspection */
+                    case 3:
+                        switch ($pieces[2]) {
+                            case 'n':
+                                $offsets[$start] = [(int) $pieces[0], (int) $pieces[1]];
+                                $start++;
+                                break 2;
+                            case 'f':
+                                $start++;
+                                break 2;
+                        }
+                        // fall through if pieces doesn't match
+
+                    default:
+                        throw new CrossReferenceException(
+                            \sprintf('Unexpected data in xref table (%s)', \implode(' ', $pieces)),
+                            CrossReferenceException::INVALID_DATA
+                        );
+                }
+            }
+        }
+
+        $this->offsets = $offsets;
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/CrossReference/ReaderInterface.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/CrossReference/ReaderInterface.php
new file mode 100755 (executable)
index 0000000..84b2267
--- /dev/null
@@ -0,0 +1,35 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\CrossReference;
+
+use setasign\Fpdi\PdfParser\Type\PdfDictionary;
+
+/**
+ * ReaderInterface for cross-reference readers.
+ *
+ * @package setasign\Fpdi\PdfParser\CrossReference
+ */
+interface ReaderInterface
+{
+    /**
+     * Get an offset by an object number.
+     *
+     * @param int $objectNumber
+     * @return int|bool False if the offset was not found.
+     */
+    public function getOffsetFor($objectNumber);
+
+    /**
+     * Get the trailer related to this cross reference.
+     *
+     * @return PdfDictionary
+     */
+    public function getTrailer();
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/Ascii85.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/Ascii85.php
new file mode 100755 (executable)
index 0000000..3541cca
--- /dev/null
@@ -0,0 +1,104 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Filter;
+
+/**
+ * Class for handling ASCII base-85 encoded data
+ *
+ * @package setasign\Fpdi\PdfParser\Filter
+ */
+class Ascii85 implements FilterInterface
+{
+    /**
+     * Decode ASCII85 encoded string.
+     *
+     * @param string $data The input string
+     * @return string
+     * @throws Ascii85Exception
+     */
+    public function decode($data)
+    {
+        $out = '';
+        $state = 0;
+        $chn = null;
+
+        $l = \strlen($data);
+
+        /** @noinspection ForeachInvariantsInspection */
+        for ($k = 0; $k < $l; ++$k) {
+            $ch = \ord($data[$k]) & 0xff;
+
+            //Start <~
+            if ($k === 0 && $ch === 60 && isset($data[$k + 1]) && (\ord($data[$k + 1]) & 0xFF) === 126) {
+                $k++;
+                continue;
+            }
+            //End ~>
+            if ($ch === 126 && isset($data[$k + 1]) && (\ord($data[$k + 1]) & 0xFF) === 62) {
+                break;
+            }
+            if (\preg_match('/^\s$/', \chr($ch))) {
+                continue;
+            }
+            if ($ch === 122 /* z */ && $state === 0) {
+                $out .= \chr(0) . \chr(0) . \chr(0) . \chr(0);
+                continue;
+            }
+            if ($ch < 33 /* ! */ || $ch > 117 /* u */) {
+                throw new Ascii85Exception(
+                    'Illegal character found while ASCII85 decode.',
+                    Ascii85Exception::ILLEGAL_CHAR_FOUND
+                );
+            }
+
+            $chn[$state] = $ch - 33;/* ! */
+            $state++;
+
+            if ($state === 5) {
+                $state = 0;
+                $r = 0;
+                for ($j = 0; $j < 5; ++$j) {
+                    /** @noinspection UnnecessaryCastingInspection */
+                    $r = (int)($r * 85 + $chn[$j]);
+                }
+
+                $out .= \chr($r >> 24)
+                    . \chr($r >> 16)
+                    . \chr($r >> 8)
+                    . \chr($r);
+            }
+        }
+
+        if ($state === 1) {
+            throw new Ascii85Exception(
+                'Illegal length while ASCII85 decode.',
+                Ascii85Exception::ILLEGAL_LENGTH
+            );
+        }
+
+        if ($state === 2) {
+            $r = $chn[0] * 85 * 85 * 85 * 85 + ($chn[1] + 1) * 85 * 85 * 85;
+            $out .= \chr($r >> 24);
+
+        } elseif ($state === 3) {
+            $r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85 + ($chn[2] + 1) * 85 * 85;
+            $out .= \chr($r >> 24);
+            $out .= \chr($r >> 16);
+
+        } elseif ($state === 4) {
+            $r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85 + $chn[2] * 85 * 85 + ($chn[3] + 1) * 85;
+            $out .= \chr($r >> 24);
+            $out .= \chr($r >> 16);
+            $out .= \chr($r >> 8);
+        }
+
+        return $out;
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/Ascii85Exception.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/Ascii85Exception.php
new file mode 100755 (executable)
index 0000000..898276c
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Filter;
+
+/**
+ * Exception for Ascii85 filter class
+ *
+ * @package setasign\Fpdi\PdfParser\Filter
+ */
+class Ascii85Exception extends FilterException
+{
+    /**
+     * @var integer
+     */
+    const ILLEGAL_CHAR_FOUND = 0x0301;
+
+    /**
+     * @var integer
+     */
+    const ILLEGAL_LENGTH = 0x0302;
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/AsciiHex.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/AsciiHex.php
new file mode 100755 (executable)
index 0000000..3868584
--- /dev/null
@@ -0,0 +1,48 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Filter;
+
+/**
+ * Class for handling ASCII hexadecimal encoded data
+ *
+ * @package setasign\Fpdi\PdfParser\Filter
+ */
+class AsciiHex implements FilterInterface
+{
+    /**
+     * Converts an ASCII hexadecimal encoded string into its binary representation.
+     *
+     * @param string $data The input string
+     * @return string
+     */
+    public function decode($data)
+    {
+        $data = \preg_replace('/[^0-9A-Fa-f]/', '', \rtrim($data, '>'));
+        if ((\strlen($data) % 2) === 1) {
+            $data .= '0';
+        }
+
+        return \pack('H*', $data);
+    }
+
+    /**
+     * Converts a string into ASCII hexadecimal representation.
+     *
+     * @param string $data The input string
+     * @param boolean $leaveEOD
+     * @return string
+     */
+    public function encode($data, $leaveEOD = false)
+    {
+        $t = \unpack('H*', $data);
+        return \current($t)
+            . ($leaveEOD ? '' : '>');
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/FilterException.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/FilterException.php
new file mode 100755 (executable)
index 0000000..a41ce69
--- /dev/null
@@ -0,0 +1,24 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Filter;
+
+use setasign\Fpdi\PdfParser\PdfParserException;
+
+/**
+ * Exception for filters
+ *
+ * @package setasign\Fpdi\PdfParser\Filter
+ */
+class FilterException extends PdfParserException
+{
+    const UNSUPPORTED_FILTER = 0x0201;
+
+    const NOT_IMPLEMENTED = 0x0202;
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/FilterInterface.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/FilterInterface.php
new file mode 100755 (executable)
index 0000000..0323471
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Filter;
+
+/**
+ * Interface for filters
+ *
+ * @package setasign\Fpdi\PdfParser\Filter
+ */
+interface FilterInterface
+{
+    /**
+     * Decode a string.
+     *
+     * @param string $data The input string
+     * @return string
+     */
+    public function decode($data);
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/Flate.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/Flate.php
new file mode 100755 (executable)
index 0000000..c12f619
--- /dev/null
@@ -0,0 +1,78 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Filter;
+
+/**
+ * Class for handling zlib/deflate encoded data
+ *
+ * @package setasign\Fpdi\PdfParser\Filter
+ */
+class Flate implements FilterInterface
+{
+    /**
+     * Checks whether the zlib extension is loaded.
+     *
+     * Used for testing purpose.
+     *
+     * @return boolean
+     * @internal
+     */
+    protected function extensionLoaded()
+    {
+        return \extension_loaded('zlib');
+    }
+
+    /**
+     * Decodes a flate compressed string.
+     *
+     * @param string $data The input string
+     * @return string
+     * @throws FlateException
+     */
+    public function decode($data)
+    {
+        if ($this->extensionLoaded()) {
+            $oData = $data;
+            $data = @((\strlen($data) > 0) ? \gzuncompress($data) : '');
+            if ($data === false) {
+                // Try this fallback
+                $tries = 1;
+                while ($tries < 10 && ($data === false || \strlen($data) < (\strlen($oData) - $tries - 1))) {
+                    $data = @(\gzinflate(\substr($oData, $tries)));
+                    $tries++;
+                }
+
+                if ($data === false) {
+                    // let's try if the checksum is CRC32
+                    $fh = fopen('php://temp', 'w+b');
+                    \fwrite($fh, "\x1f\x8b\x08\x00\x00\x00\x00\x00" . $oData);
+                    \stream_filter_append($fh, 'zlib.inflate', \STREAM_FILTER_READ, ['window' => 30]);
+                    \fseek($fh, 0);
+                    $data = \stream_get_contents($fh);
+                    \fclose($fh);
+                }
+
+                if (!$data) {
+                    throw new FlateException(
+                        'Error while decompressing stream.',
+                        FlateException::DECOMPRESS_ERROR
+                    );
+                }
+            }
+        } else {
+            throw new FlateException(
+                'To handle FlateDecode filter, enable zlib support in PHP.',
+                FlateException::NO_ZLIB
+            );
+        }
+
+        return $data;
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/FlateException.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/FlateException.php
new file mode 100755 (executable)
index 0000000..d44281d
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Filter;
+
+/**
+ * Exception for flate filter class
+ *
+ * @package setasign\Fpdi\PdfParser\Filter
+ */
+class FlateException extends FilterException
+{
+    /**
+     * @var integer
+     */
+    const NO_ZLIB = 0x0401;
+
+    /**
+     * @var integer
+     */
+    const DECOMPRESS_ERROR = 0x0402;
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/Lzw.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/Lzw.php
new file mode 100755 (executable)
index 0000000..f4df719
--- /dev/null
@@ -0,0 +1,189 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Filter;
+
+/**
+ * Class for handling LZW encoded data
+ *
+ * @package setasign\Fpdi\PdfParser\Filter
+ */
+class Lzw implements FilterInterface
+{
+    /**
+     * @var null|string
+     */
+    protected $data;
+
+    /**
+     * @var array
+     */
+    protected $sTable = [];
+
+    /**
+     * @var int
+     */
+    protected $dataLength = 0;
+
+    /**
+     * @var int
+     */
+    protected $tIdx;
+
+    /**
+     * @var int
+     */
+    protected $bitsToGet = 9;
+
+    /**
+     * @var int
+     */
+    protected $bytePointer;
+
+    /**
+     * @var int
+     */
+    protected $nextData = 0;
+
+    /**
+     * @var int
+     */
+    protected $nextBits = 0;
+
+    /**
+     * @var array
+     */
+    protected $andTable = [511, 1023, 2047, 4095];
+
+    /**
+     * Method to decode LZW compressed data.
+     *
+     * @param string $data The compressed data
+     * @return string The uncompressed data
+     * @throws LzwException
+     */
+    public function decode($data)
+    {
+        if ($data[0] === "\x00" && $data[1] === "\x01") {
+            throw new LzwException(
+                'LZW flavour not supported.',
+                LzwException::LZW_FLAVOUR_NOT_SUPPORTED
+            );
+        }
+
+        $this->initsTable();
+
+        $this->data = $data;
+        $this->dataLength = \strlen($data);
+
+        // Initialize pointers
+        $this->bytePointer = 0;
+
+        $this->nextData = 0;
+        $this->nextBits = 0;
+
+        $oldCode = 0;
+
+        $uncompData = '';
+
+        while (($code = $this->getNextCode()) !== 257) {
+            if ($code === 256) {
+                $this->initsTable();
+                $code = $this->getNextCode();
+
+                if ($code === 257) {
+                    break;
+                }
+
+                $uncompData .= $this->sTable[$code];
+                $oldCode = $code;
+
+            } else {
+                if ($code < $this->tIdx) {
+                    $string = $this->sTable[$code];
+                    $uncompData .= $string;
+
+                    $this->addStringToTable($this->sTable[$oldCode], $string[0]);
+                    $oldCode = $code;
+                } else {
+                    $string = $this->sTable[$oldCode];
+                    $string .= $string[0];
+                    $uncompData .= $string;
+
+                    $this->addStringToTable($string);
+                    $oldCode = $code;
+                }
+            }
+        }
+
+        return $uncompData;
+    }
+
+    /**
+     * Initialize the string table.
+     */
+    protected function initsTable()
+    {
+        $this->sTable = [];
+
+        for ($i = 0; $i < 256; $i++) {
+            $this->sTable[$i] = \chr($i);
+        }
+
+        $this->tIdx = 258;
+        $this->bitsToGet = 9;
+    }
+
+    /**
+     * Add a new string to the string table.
+     *
+     * @param string $oldString
+     * @param string $newString
+     */
+    protected function addStringToTable($oldString, $newString = '')
+    {
+        $string = $oldString . $newString;
+
+        // Add this new String to the table
+        $this->sTable[$this->tIdx++] = $string;
+
+        if ($this->tIdx === 511) {
+            $this->bitsToGet = 10;
+        } elseif ($this->tIdx === 1023) {
+            $this->bitsToGet = 11;
+        } elseif ($this->tIdx === 2047) {
+            $this->bitsToGet = 12;
+        }
+    }
+
+    /**
+     * Returns the next 9, 10, 11 or 12 bits.
+     *
+     * @return integer
+     */
+    protected function getNextCode()
+    {
+        if ($this->bytePointer === $this->dataLength) {
+            return 257;
+        }
+
+        $this->nextData = ($this->nextData << 8) | (\ord($this->data[$this->bytePointer++]) & 0xff);
+        $this->nextBits += 8;
+
+        if ($this->nextBits < $this->bitsToGet) {
+            $this->nextData = ($this->nextData << 8) | (\ord($this->data[$this->bytePointer++]) & 0xff);
+            $this->nextBits += 8;
+        }
+
+        $code = ($this->nextData >> ($this->nextBits - $this->bitsToGet)) & $this->andTable[$this->bitsToGet - 9];
+        $this->nextBits -= $this->bitsToGet;
+
+        return $code;
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/LzwException.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Filter/LzwException.php
new file mode 100755 (executable)
index 0000000..e822bc9
--- /dev/null
@@ -0,0 +1,23 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Filter;
+
+/**
+ * Exception for LZW filter class
+ *
+ * @package setasign\Fpdi\PdfParser\Filter
+ */
+class LzwException extends FilterException
+{
+    /**
+     * @var integer
+     */
+    const LZW_FLAVOUR_NOT_SUPPORTED = 0x0501;
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/PdfParser.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/PdfParser.php
new file mode 100755 (executable)
index 0000000..cccdfb6
--- /dev/null
@@ -0,0 +1,378 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser;
+
+use setasign\Fpdi\PdfParser\CrossReference\CrossReference;
+use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
+use setasign\Fpdi\PdfParser\Type\PdfArray;
+use setasign\Fpdi\PdfParser\Type\PdfBoolean;
+use setasign\Fpdi\PdfParser\Type\PdfDictionary;
+use setasign\Fpdi\PdfParser\Type\PdfHexString;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObject;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObjectReference;
+use setasign\Fpdi\PdfParser\Type\PdfName;
+use setasign\Fpdi\PdfParser\Type\PdfNull;
+use setasign\Fpdi\PdfParser\Type\PdfNumeric;
+use setasign\Fpdi\PdfParser\Type\PdfString;
+use setasign\Fpdi\PdfParser\Type\PdfToken;
+use setasign\Fpdi\PdfParser\Type\PdfType;
+
+/**
+ * A PDF parser class
+ *
+ * @package setasign\Fpdi\PdfParser
+ */
+class PdfParser
+{
+    /**
+     * @var StreamReader
+     */
+    protected $streamReader;
+
+    /**
+     * @var Tokenizer
+     */
+    protected $tokenizer;
+
+    /**
+     * The file header.
+     *
+     * @var string
+     */
+    protected $fileHeader;
+
+    /**
+     * The offset to the file header.
+     *
+     * @var int
+     */
+    protected $fileHeaderOffset;
+
+    /**
+     * @var CrossReference
+     */
+    protected $xref;
+
+    /**
+     * All read objects.
+     *
+     * @var array
+     */
+    protected $objects = [];
+
+    /**
+     * PdfParser constructor.
+     *
+     * @param StreamReader $streamReader
+     */
+    public function __construct(StreamReader $streamReader)
+    {
+        $this->streamReader = $streamReader;
+        $this->tokenizer = new Tokenizer($streamReader);
+    }
+
+    /**
+     * Removes cycled references.
+     *
+     * @internal
+     */
+    public function cleanUp()
+    {
+        $this->xref = null;
+    }
+
+    /**
+     * Get the stream reader instance.
+     *
+     * @return StreamReader
+     */
+    public function getStreamReader()
+    {
+        return $this->streamReader;
+    }
+
+    /**
+     * Get the tokenizer instance.
+     *
+     * @return Tokenizer
+     */
+    public function getTokenizer()
+    {
+        return $this->tokenizer;
+    }
+
+    /**
+     * Resolves the file header.
+     *
+     * @throws PdfParserException
+     * @return int
+     */
+    protected function resolveFileHeader()
+    {
+        if ($this->fileHeader) {
+            return $this->fileHeaderOffset;
+        }
+
+        $this->streamReader->reset(0);
+        $offset = false;
+        $maxIterations = 1000;
+        while (true) {
+            $buffer = $this->streamReader->getBuffer(false);
+            $offset = \strpos($buffer, '%PDF-');
+            if ($offset === false) {
+                if (!$this->streamReader->increaseLength(100) || (--$maxIterations === 0)) {
+                    throw new PdfParserException(
+                        'Unable to find PDF file header.',
+                        PdfParserException::FILE_HEADER_NOT_FOUND
+                    );
+                }
+                continue;
+            }
+            break;
+        }
+
+        $this->fileHeaderOffset = $offset;
+        $this->streamReader->setOffset($offset);
+
+        $this->fileHeader = \trim($this->streamReader->readLine());
+        return $this->fileHeaderOffset;
+    }
+
+    /**
+     * Get the cross reference instance.
+     *
+     * @return CrossReference
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    public function getCrossReference()
+    {
+        if ($this->xref === null) {
+            $this->xref = new CrossReference($this, $this->resolveFileHeader());
+        }
+
+        return $this->xref;
+    }
+
+    /**
+     * Get the PDF version.
+     *
+     * @return int[] An array of major and minor version.
+     * @throws PdfParserException
+     */
+    public function getPdfVersion()
+    {
+        $this->resolveFileHeader();
+
+        if (\preg_match('/%PDF-(\d)\.(\d)/', $this->fileHeader, $result) === 0) {
+            throw new PdfParserException(
+                'Unable to extract PDF version from file header.',
+                PdfParserException::PDF_VERSION_NOT_FOUND
+            );
+        }
+        list(, $major, $minor) = $result;
+
+        $catalog = $this->getCatalog();
+        if (isset($catalog->value['Version'])) {
+            $versionParts = \explode('.', PdfName::unescape(PdfType::resolve($catalog->value['Version'], $this)->value));
+            if (count($versionParts) === 2) {
+                list($major, $minor) = $versionParts;
+            }
+        }
+
+        return [(int) $major, (int) $minor];
+    }
+
+    /**
+     * Get the catalog dictionary.
+     *
+     * @return PdfDictionary
+     * @throws Type\PdfTypeException
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    public function getCatalog()
+    {
+        $xref = $this->getCrossReference();
+        $trailer = $xref->getTrailer();
+
+        $catalog = PdfType::resolve(PdfDictionary::get($trailer, 'Root'), $this);
+
+        return PdfDictionary::ensure($catalog);
+    }
+
+    /**
+     * Get an indirect object by its object number.
+     *
+     * @param int $objectNumber
+     * @param bool $cache
+     * @return PdfIndirectObject
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    public function getIndirectObject($objectNumber, $cache = false)
+    {
+        $objectNumber = (int) $objectNumber;
+        if (isset($this->objects[$objectNumber])) {
+            return $this->objects[$objectNumber];
+        }
+
+        $xref = $this->getCrossReference();
+        $object = $xref->getIndirectObject($objectNumber);
+
+        if ($cache) {
+            $this->objects[$objectNumber] = $object;
+        }
+
+        return $object;
+    }
+
+    /**
+     * Read a PDF value.
+     *
+     * @param null|bool|string $token
+     * @param null|string $expectedType
+     * @return bool|PdfArray|PdfBoolean|PdfHexString|PdfName|PdfNull|PdfNumeric|PdfString|PdfToken|PdfIndirectObjectReference
+     * @throws Type\PdfTypeException
+     */
+    public function readValue($token = null, $expectedType = null)
+    {
+        if ($token === null) {
+            $token = $this->tokenizer->getNextToken();
+        }
+
+        if ($token === false) {
+            if ($expectedType !== null) {
+                throw new Type\PdfTypeException('Got unexpected token type.', Type\PdfTypeException::INVALID_DATA_TYPE);
+            }
+            return false;
+        }
+
+        switch ($token) {
+            case '(':
+                $this->ensureExpectedType($token, $expectedType);
+                return PdfString::parse($this->streamReader);
+
+            case '<':
+                if ($this->streamReader->getByte() === '<') {
+                    $this->ensureExpectedType('<<', $expectedType);
+                    $this->streamReader->addOffset(1);
+                    return PdfDictionary::parse($this->tokenizer, $this->streamReader, $this);
+                }
+
+                $this->ensureExpectedType($token, $expectedType);
+                return PdfHexString::parse($this->streamReader);
+
+            case '/':
+                $this->ensureExpectedType($token, $expectedType);
+                return PdfName::parse($this->tokenizer, $this->streamReader);
+
+            case '[':
+                $this->ensureExpectedType($token, $expectedType);
+                return PdfArray::parse($this->tokenizer, $this);
+
+            default:
+                if (\is_numeric($token)) {
+                    if (($token2 = $this->tokenizer->getNextToken()) !== false) {
+                        if (\is_numeric($token2)) {
+                            if (($token3 = $this->tokenizer->getNextToken()) !== false) {
+                                switch ($token3) {
+                                    case 'obj':
+                                        if ($expectedType !== null && $expectedType !== PdfIndirectObject::class) {
+                                            throw new Type\PdfTypeException(
+                                                'Got unexpected token type.', Type\PdfTypeException::INVALID_DATA_TYPE
+                                            );
+                                        }
+
+                                        return PdfIndirectObject::parse(
+                                            $token,
+                                            $token2,
+                                            $this,
+                                            $this->tokenizer,
+                                            $this->streamReader
+                                        );
+                                    case 'R':
+                                        if ($expectedType !== null &&
+                                            $expectedType !== PdfIndirectObjectReference::class
+                                        ) {
+                                            throw new Type\PdfTypeException(
+                                                'Got unexpected token type.', Type\PdfTypeException::INVALID_DATA_TYPE
+                                            );
+                                        }
+
+                                        return PdfIndirectObjectReference::create($token, $token2);
+                                }
+
+                                $this->tokenizer->pushStack($token3);
+                            }
+                        }
+
+                        $this->tokenizer->pushStack($token2);
+                    }
+
+                    if ($expectedType !== null && $expectedType !== PdfNumeric::class) {
+                        throw new Type\PdfTypeException(
+                            'Got unexpected token type.', Type\PdfTypeException::INVALID_DATA_TYPE
+                        );
+                    }
+                    return PdfNumeric::create($token);
+                }
+
+                if ($token === 'true' || $token === 'false') {
+                    $this->ensureExpectedType($token, $expectedType);
+                    return PdfBoolean::create($token === 'true');
+                }
+
+                if ($token === 'null') {
+                    $this->ensureExpectedType($token, $expectedType);
+                    return new PdfNull();
+                }
+
+                if ($expectedType !== null && $expectedType !== PdfToken::class) {
+                    throw new Type\PdfTypeException(
+                        'Got unexpected token type.', Type\PdfTypeException::INVALID_DATA_TYPE
+                    );
+                }
+
+                $v = new PdfToken();
+                $v->value = $token;
+
+                return $v;
+        }
+    }
+
+    /**
+     * Ensures that the token will evaluate to an expected object type (or not).
+     *
+     * @param string $token
+     * @param string|null $expectedType
+     * @return bool
+     * @throws Type\PdfTypeException
+     */
+    private function ensureExpectedType($token, $expectedType)
+    {
+        static $mapping = [
+            '(' => PdfString::class,
+            '<' => PdfHexString::class,
+            '<<' => PdfDictionary::class,
+            '/' => PdfName::class,
+            '[' => PdfArray::class,
+            'true' => PdfBoolean::class,
+            'false' => PdfBoolean::class,
+            'null' => PdfNull::class
+        ];
+
+        if ($expectedType === null || $mapping[$token] === $expectedType) {
+            return true;
+        }
+
+        throw new Type\PdfTypeException('Got unexpected token type.', Type\PdfTypeException::INVALID_DATA_TYPE);
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/PdfParserException.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/PdfParserException.php
new file mode 100755 (executable)
index 0000000..476bccd
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser;
+
+use setasign\Fpdi\FpdiException;
+
+/**
+ * Exception for the pdf parser class
+ *
+ * @package setasign\Fpdi\PdfParser
+ */
+class PdfParserException extends FpdiException
+{
+    /**
+     * @var int
+     */
+    const NOT_IMPLEMENTED = 0x0001;
+
+    /**
+     * @var int
+     */
+    const IMPLEMENTED_IN_FPDI_PDF_PARSER = 0x0002;
+
+    /**
+     * @var int
+     */
+    const INVALID_DATA_TYPE = 0x0003;
+
+    /**
+     * @var int
+     */
+    const FILE_HEADER_NOT_FOUND = 0x0004;
+
+    /**
+     * @var int
+     */
+    const PDF_VERSION_NOT_FOUND = 0x0005;
+
+    /**
+     * @var int
+     */
+    const INVALID_DATA_SIZE = 0x0006;
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/StreamReader.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/StreamReader.php
new file mode 100755 (executable)
index 0000000..27de6d9
--- /dev/null
@@ -0,0 +1,468 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser;
+
+/**
+ * A stream reader class
+ *
+ * @package setasign\Fpdi\PdfParser
+ */
+class StreamReader
+{
+    /**
+     * Creates a stream reader instance by a string value.
+     *
+     * @param string $content
+     * @param int $maxMemory
+     * @return StreamReader
+     */
+    public static function createByString($content, $maxMemory = 2097152)
+    {
+        $h = \fopen('php://temp/maxmemory:' . ((int) $maxMemory), 'r+b');
+        \fwrite($h, $content);
+        \rewind($h);
+
+        return new self($h, true);
+    }
+
+    /**
+     * Creates a stream reader instance by a filename.
+     *
+     * @param string $filename
+     * @return StreamReader
+     */
+    public static function createByFile($filename)
+    {
+        $h = \fopen($filename, 'rb');
+        return new self($h, true);
+    }
+
+    /**
+     * Defines whether the stream should be closed when the stream reader instance is deconstructed or not.
+     *
+     * @var bool
+     */
+    protected $closeStream;
+
+    /**
+     * The stream resource.
+     *
+     * @var resource
+     */
+    protected $stream;
+
+    /**
+     * The byte-offset position in the stream.
+     *
+     * @var int
+     */
+    protected $position;
+
+    /**
+     * The byte-offset position in the buffer.
+     *
+     * @var int
+     */
+    protected $offset;
+
+    /**
+     * The buffer length.
+     *
+     * @var int
+     */
+    protected $bufferLength;
+
+    /**
+     * The total length of the stream.
+     *
+     * @var int
+     */
+    protected $totalLength;
+
+    /**
+     * The buffer.
+     *
+     * @var string
+     */
+    protected $buffer;
+
+    /**
+     * StreamReader constructor.
+     *
+     * @param resource $stream
+     * @param bool $closeStream Defines whether to close the stream resource if the instance is destructed or not.
+     */
+    public function __construct($stream, $closeStream = false)
+    {
+        if (!\is_resource($stream)) {
+            throw new \InvalidArgumentException(
+                'No stream given.'
+            );
+        }
+
+        $metaData = \stream_get_meta_data($stream);
+        if (!$metaData['seekable']) {
+            throw new \InvalidArgumentException(
+                'Given stream is not seekable!'
+            );
+        }
+
+        $this->stream = $stream;
+        $this->closeStream = $closeStream;
+        $this->reset();
+    }
+
+    /**
+     * The destructor.
+     */
+    public function __destruct()
+    {
+        $this->cleanUp();
+    }
+
+    /**
+     * Closes the file handle.
+     */
+    public function cleanUp()
+    {
+        if ($this->closeStream && is_resource($this->stream)) {
+            \fclose($this->stream);
+        }
+    }
+
+    /**
+     * Returns the byte length of the buffer.
+     *
+     * @param bool $atOffset
+     * @return int
+     */
+    public function getBufferLength($atOffset = false)
+    {
+        if ($atOffset === false) {
+            return $this->bufferLength;
+        }
+
+        return $this->bufferLength - $this->offset;
+    }
+
+    /**
+     * Get the current position in the stream.
+     *
+     * @return int
+     */
+    public function getPosition()
+    {
+        return $this->position;
+    }
+
+    /**
+     * Returns the current buffer.
+     *
+     * @param bool $atOffset
+     * @return string
+     */
+    public function getBuffer($atOffset = true)
+    {
+        if ($atOffset === false) {
+            return $this->buffer;
+        }
+
+        $string = \substr($this->buffer, $this->offset);
+
+        return (string) $string;
+    }
+
+    /**
+     * Gets a byte at a specific position in the buffer.
+     *
+     * If the position is invalid the method will return false.
+     *
+     * If the $position parameter is set to null the value of $this->offset will be used.
+     *
+     * @param int|null $position
+     * @return string|bool
+     */
+    public function getByte($position = null)
+    {
+        $position = (int) ($position !== null ? $position : $this->offset);
+        if ($position >= $this->bufferLength &&
+            (!$this->increaseLength() || $position >= $this->bufferLength)
+        ) {
+            return false;
+        }
+
+        return $this->buffer[$position];
+    }
+
+    /**
+     * Returns a byte at a specific position, and set the offset to the next byte position.
+     *
+     * If the position is invalid the method will return false.
+     *
+     * If the $position parameter is set to null the value of $this->offset will be used.
+     *
+     * @param int|null $position
+     * @return string|bool
+     */
+    public function readByte($position = null)
+    {
+        if ($position !== null) {
+            $position = (int) $position;
+            // check if needed bytes are available in the current buffer
+            if (!($position >= $this->position && $position < $this->position + $this->bufferLength)) {
+                $this->reset($position);
+                $offset = $this->offset;
+            } else {
+                $offset = $position - $this->position;
+            }
+        } else {
+            $offset = $this->offset;
+        }
+
+        if ($offset >= $this->bufferLength &&
+            ((!$this->increaseLength()) || $offset >= $this->bufferLength)
+        ) {
+            return false;
+        }
+
+        $this->offset = $offset + 1;
+        return $this->buffer[$offset];
+    }
+
+    /**
+     * Read bytes from the current or a specific offset position and set the internal pointer to the next byte.
+     *
+     * If the position is invalid the method will return false.
+     *
+     * If the $position parameter is set to null the value of $this->offset will be used.
+     *
+     * @param int $length
+     * @param int|null $position
+     * @return string
+     */
+    public function readBytes($length, $position = null)
+    {
+        $length = (int) $length;
+        if ($position !== null) {
+            // check if needed bytes are available in the current buffer
+            if (!($position >= $this->position && $position < $this->position + $this->bufferLength)) {
+                $this->reset($position, $length);
+                $offset = $this->offset;
+            } else {
+                $offset = $position - $this->position;
+            }
+        } else {
+            $offset = $this->offset;
+        }
+
+        if (($offset + $length) > $this->bufferLength &&
+            ((!$this->increaseLength($length)) || ($offset + $length) > $this->bufferLength)
+        ) {
+            return false;
+        }
+
+        $bytes = \substr($this->buffer, $offset, $length);
+        $this->offset = $offset + $length;
+
+        return $bytes;
+    }
+
+    /**
+     * Read a line from the current position.
+     *
+     * @param int $length
+     * @return string|bool
+     */
+    public function readLine($length = 1024)
+    {
+        if ($this->ensureContent() === false) {
+            return false;
+        }
+
+        $line = '';
+        while ($this->ensureContent()) {
+            $char = $this->readByte();
+
+            if ($char === "\n") {
+                break;
+            }
+
+            if ($char === "\r") {
+                if ($this->getByte() === "\n") {
+                    $this->addOffset(1);
+                }
+                break;
+            }
+
+            $line .= $char;
+
+            if (\strlen($line) >= $length) {
+                break;
+            }
+        }
+
+        return $line;
+    }
+
+    /**
+     * Set the offset position in the current buffer.
+     *
+     * @param int $offset
+     */
+    public function setOffset($offset)
+    {
+        if ($offset > $this->bufferLength || $offset < 0) {
+            throw new \OutOfRangeException(
+                \sprintf('Offset (%s) out of range (length: %s)', $offset, $this->bufferLength)
+            );
+        }
+
+        $this->offset = (int) $offset;
+    }
+
+    /**
+     * Returns the current offset in the current buffer.
+     *
+     * @return int
+     */
+    public function getOffset()
+    {
+        return $this->offset;
+    }
+
+    /**
+     * Add an offset to the current offset.
+     *
+     * @param int $offset
+     */
+    public function addOffset($offset)
+    {
+        $this->setOffset($this->offset + $offset);
+    }
+
+    /**
+     * Make sure that there is at least one character beyond the current offset in the buffer.
+     *
+     * @return bool
+     */
+    public function ensureContent()
+    {
+        while ($this->offset >= $this->bufferLength) {
+            if (!$this->increaseLength()) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Returns the stream.
+     *
+     * @return resource
+     */
+    public function getStream()
+    {
+        return $this->stream;
+    }
+
+    /**
+     * Gets the total available length.
+     *
+     * @return int
+     */
+    public function getTotalLength()
+    {
+        if ($this->totalLength === null) {
+            $stat = \fstat($this->stream);
+            $this->totalLength = $stat['size'];
+        }
+
+        return $this->totalLength;
+    }
+
+    /**
+     * Resets the buffer to a position and re-read the buffer with the given length.
+     *
+     * If the $pos parameter is negative the start buffer position will be the $pos'th position from
+     * the end of the file.
+     *
+     * If the $pos parameter is negative and the absolute value is bigger then the totalLength of
+     * the file $pos will set to zero.
+     *
+     * @param int|null $pos Start position of the new buffer
+     * @param int $length Length of the new buffer. Mustn't be negative
+     */
+    public function reset($pos = 0, $length = 200)
+    {
+        if ($pos === null) {
+            $pos = $this->position + $this->offset;
+        } elseif ($pos < 0) {
+            $pos = \max(0, $this->getTotalLength() + $pos);
+        }
+
+        \fseek($this->stream, $pos);
+
+        $this->position = $pos;
+        $this->buffer = $length > 0 ? \fread($this->stream, $length) : '';
+        $this->bufferLength = \strlen($this->buffer);
+        $this->offset = 0;
+
+        // If a stream wrapper is in use it is possible that
+        // length values > 8096 will be ignored, so use the
+        // increaseLength()-method to correct that behavior
+        if ($this->bufferLength < $length && $this->increaseLength($length - $this->bufferLength)) {
+            // increaseLength parameter is $minLength, so cut to have only the required bytes in the buffer
+            $this->buffer = \substr($this->buffer, 0, $length);
+            $this->bufferLength = \strlen($this->buffer);
+        }
+    }
+
+    /**
+     * Ensures bytes in the buffer with a specific length and location in the file.
+     *
+     * @param int $pos
+     * @param int $length
+     * @see reset()
+     */
+    public function ensure($pos, $length)
+    {
+        if ($pos >= $this->position
+            && $pos < ($this->position + $this->bufferLength)
+            && ($this->position + $this->bufferLength) >= ($pos + $length)
+        ) {
+            $this->offset = $pos - $this->position;
+        } else {
+            $this->reset($pos, $length);
+        }
+    }
+
+    /**
+     * Forcefully read more data into the buffer.
+     *
+     * @param int $minLength
+     * @return bool Returns false if the stream reaches the end
+     */
+    public function increaseLength($minLength = 100)
+    {
+        $length = \max($minLength, 100);
+
+        if (\feof($this->stream) || $this->getTotalLength() === $this->position + $this->bufferLength) {
+            return false;
+        }
+
+        $newLength = $this->bufferLength + $length;
+        do {
+            $this->buffer .= \fread($this->stream, $newLength - $this->bufferLength);
+            $this->bufferLength = \strlen($this->buffer);
+        } while (($this->bufferLength !== $newLength) && !\feof($this->stream));
+
+        return true;
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Tokenizer.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Tokenizer.php
new file mode 100755 (executable)
index 0000000..ebf0d0b
--- /dev/null
@@ -0,0 +1,161 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser;
+
+/**
+ * A tokenizer class.
+ *
+ * @package setasign\Fpdi\PdfParser
+ */
+class Tokenizer
+{
+    /**
+     * @var StreamReader
+     */
+    protected $streamReader;
+
+    /**
+     * A token stack.
+     *
+     * @var string[]
+     */
+    protected $stack = [];
+
+    /**
+     * Tokenizer constructor.
+     *
+     * @param StreamReader $streamReader
+     */
+    public function __construct(StreamReader $streamReader)
+    {
+        $this->streamReader = $streamReader;
+    }
+
+    /**
+     * Get the stream reader instance.
+     *
+     * @return StreamReader
+     */
+    public function getStreamReader()
+    {
+        return $this->streamReader;
+    }
+
+    /**
+     * Clear the token stack.
+     */
+    public function clearStack()
+    {
+        $this->stack = [];
+    }
+
+    /**
+     * Push a token onto the stack.
+     *
+     * @param string $token
+     */
+    public function pushStack($token)
+    {
+        $this->stack[] = $token;
+    }
+
+    /**
+     * Get next token.
+     *
+     * @return bool|string
+     */
+    public function getNextToken()
+    {
+        $token = \array_pop($this->stack);
+        if ($token !== null) {
+            return $token;
+        }
+
+        if (($byte = $this->streamReader->readByte()) === false) {
+            return false;
+        }
+
+        if ($byte === "\x20" ||
+            $byte === "\x0A" ||
+            $byte === "\x0D" ||
+            $byte === "\x0C" ||
+            $byte === "\x09" ||
+            $byte === "\x00"
+        ) {
+            if ($this->leapWhiteSpaces() === false) {
+                return false;
+            }
+            $byte = $this->streamReader->readByte();
+        }
+
+        switch ($byte) {
+            case '/':
+            case '[':
+            case ']':
+            case '(':
+            case ')':
+            case '{':
+            case '}':
+            case '<':
+            case '>':
+                return $byte;
+            case '%':
+                $this->streamReader->readLine();
+                return $this->getNextToken();
+        }
+
+        /* This way is faster than checking single bytes.
+         */
+        $bufferOffset = $this->streamReader->getOffset();
+        do {
+            $lastBuffer = $this->streamReader->getBuffer(false);
+            $pos = \strcspn(
+                $lastBuffer,
+                "\x00\x09\x0A\x0C\x0D\x20()<>[]{}/%",
+                $bufferOffset
+            );
+        } while (
+            // Break the loop if a delimiter or white space char is matched
+            // in the current buffer or increase the buffers length
+            $lastBuffer !== false &&
+            (
+                $bufferOffset + $pos === \strlen($lastBuffer) &&
+                $this->streamReader->increaseLength()
+            )
+        );
+
+        $result = \substr($lastBuffer, $bufferOffset - 1, $pos + 1);
+        $this->streamReader->setOffset($bufferOffset + $pos);
+
+        return $result;
+    }
+
+    /**
+     * Leap white spaces.
+     *
+     * @return boolean
+     */
+    public function leapWhiteSpaces()
+    {
+        do {
+            if (!$this->streamReader->ensureContent()) {
+                return false;
+            }
+
+            $buffer = $this->streamReader->getBuffer(false);
+            $matches = \strspn($buffer, "\x20\x0A\x0C\x0D\x09\x00", $this->streamReader->getOffset());
+            if ($matches > 0) {
+                $this->streamReader->addOffset($matches);
+            }
+        } while ($this->streamReader->getOffset() >= $this->streamReader->getBufferLength());
+
+        return true;
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfArray.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfArray.php
new file mode 100755 (executable)
index 0000000..9cf449a
--- /dev/null
@@ -0,0 +1,85 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\Tokenizer;
+
+/**
+ * Class representing a PDF array object
+ *
+ * @package setasign\Fpdi\PdfParser\Type
+ * @property array $value The value of the PDF type.
+ */
+class PdfArray extends PdfType
+{
+    /**
+     * Parses an array of the passed tokenizer and parser.
+     *
+     * @param Tokenizer $tokenizer
+     * @param PdfParser $parser
+     * @return bool|self
+     * @throws PdfTypeException
+     */
+    public static function parse(Tokenizer $tokenizer, PdfParser $parser)
+    {
+        $result = [];
+
+        // Recurse into this function until we reach the end of the array.
+        while (($token = $tokenizer->getNextToken()) !== ']') {
+            if ($token === false || ($value = $parser->readValue($token)) === false) {
+                return false;
+            }
+
+            $result[] = $value;
+        }
+
+        $v = new self;
+        $v->value = $result;
+
+        return $v;
+    }
+
+    /**
+     * Helper method to create an instance.
+     *
+     * @param PdfType[] $values
+     * @return self
+     */
+    public static function create(array $values = [])
+    {
+        $v = new self;
+        $v->value = $values;
+
+        return $v;
+    }
+
+    /**
+     * Ensures that the passed array is a PdfArray instance with a (optional) specific size.
+     *
+     * @param mixed $array
+     * @param null|int $size
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($array, $size = null)
+    {
+        $result = PdfType::ensureType(self::class, $array, 'Array value expected.');
+
+        if ($size !== null && \count($array->value) !== $size) {
+            throw new PdfTypeException(
+                \sprintf('Array with %s entries expected.', $size),
+                PdfTypeException::INVALID_DATA_SIZE
+            );
+        }
+
+        return $result;
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfBoolean.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfBoolean.php
new file mode 100755 (executable)
index 0000000..5f746b7
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+/**
+ * Class representing a boolean PDF object
+ *
+ * @package setasign\Fpdi\PdfParser\Type
+ */
+class PdfBoolean extends PdfType
+{
+    /**
+     * Helper method to create an instance.
+     *
+     * @param bool $value
+     * @return self
+     */
+    public static function create($value)
+    {
+        $v = new self;
+        $v->value = (boolean) $value;
+        return $v;
+    }
+
+    /**
+     * Ensures that the passed value is a PdfBoolean instance.
+     *
+     * @param mixed $value
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($value)
+    {
+        return PdfType::ensureType(self::class, $value, 'Boolean value expected.');
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfDictionary.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfDictionary.php
new file mode 100755 (executable)
index 0000000..46b669d
--- /dev/null
@@ -0,0 +1,135 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\StreamReader;
+use setasign\Fpdi\PdfParser\Tokenizer;
+
+/**
+ * Class representing a PDF dictionary object
+ *
+ * @package setasign\Fpdi\PdfParser\Type
+ */
+class PdfDictionary extends PdfType
+{
+    /**
+     * Parses a dictionary of the passed tokenizer, stream-reader and parser.
+     *
+     * @param Tokenizer $tokenizer
+     * @param StreamReader $streamReader
+     * @param PdfParser $parser
+     * @return bool|self
+     * @throws PdfTypeException
+     */
+    public static function parse(Tokenizer $tokenizer, StreamReader $streamReader, PdfParser $parser)
+    {
+        $entries = [];
+
+        while (true) {
+            $token = $tokenizer->getNextToken();
+            if ($token === '>' && $streamReader->getByte() === '>') {
+                $streamReader->addOffset(1);
+                break;
+            }
+
+            $key = $parser->readValue($token);
+            if ($key === false) {
+                return false;
+            }
+
+            // ensure the first value to be a Name object
+            if (!($key instanceof PdfName)) {
+                $lastToken = null;
+                // ignore all other entries and search for the closing brackets
+                while (($token = $tokenizer->getNextToken()) !== '>' && $token !== false && $lastToken !== '>') {
+                    $lastToken = $token;
+                }
+
+                if ($token === false) {
+                    return false;
+                }
+
+                break;
+            }
+
+
+            $value = $parser->readValue();
+            if ($value === false) {
+                return false;
+            }
+
+            if ($value instanceof PdfNull) {
+                continue;
+            }
+
+            // catch missing value
+            if ($value instanceof PdfToken && $value->value === '>' && $streamReader->getByte() === '>') {
+                $streamReader->addOffset(1);
+                break;
+            }
+
+            $entries[$key->value] = $value;
+        }
+
+        $v = new self;
+        $v->value = $entries;
+
+        return $v;
+    }
+
+    /**
+     * Helper method to create an instance.
+     *
+     * @param PdfType[] $entries The keys are the name entries of the dictionary.
+     * @return self
+     */
+    public static function create(array $entries = [])
+    {
+        $v = new self;
+        $v->value = $entries;
+
+        return $v;
+    }
+
+    /**
+     * Get a value by its key from a dictionary or a default value.
+     *
+     * @param mixed $dictionary
+     * @param string $key
+     * @param PdfType|mixed|null $default
+     * @return PdfNull|PdfType
+     * @throws PdfTypeException
+     */
+    public static function get($dictionary, $key, PdfType $default = null)
+    {
+        $dictionary = self::ensure($dictionary);
+
+        if (isset($dictionary->value[$key])) {
+            return $dictionary->value[$key];
+        }
+
+        return $default === null
+            ? new PdfNull()
+            : $default;
+    }
+
+    /**
+     * Ensures that the passed value is a PdfDictionary instance.
+     *
+     * @param mixed $dictionary
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($dictionary)
+    {
+        return PdfType::ensureType(self::class, $dictionary, 'Dictionary value expected.');
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfHexString.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfHexString.php
new file mode 100755 (executable)
index 0000000..793fa43
--- /dev/null
@@ -0,0 +1,82 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+use setasign\Fpdi\PdfParser\StreamReader;
+
+/**
+ * Class representing a hexadecimal encoded PDF string object
+ *
+ * @package setasign\Fpdi\PdfParser\Type
+ */
+class PdfHexString extends PdfType
+{
+    /**
+     * Parses a hexadecimal string object from the stream reader.
+     *
+     * @param StreamReader $streamReader
+     * @return bool|self
+     */
+    public static function parse(StreamReader $streamReader)
+    {
+        $bufferOffset = $streamReader->getOffset();
+
+        /**
+         * @var string $buffer
+         * @var int $pos
+         */
+        while (true) {
+            $buffer = $streamReader->getBuffer(false);
+            $pos = \strpos($buffer, '>', $bufferOffset);
+            if ($pos === false) {
+                if (!$streamReader->increaseLength()) {
+                    return false;
+                }
+                continue;
+            }
+
+            break;
+        }
+
+        $result = \substr($buffer, $bufferOffset, $pos - $bufferOffset);
+        $streamReader->setOffset($pos + 1);
+
+        $v = new self;
+        $v->value = $result;
+
+        return $v;
+    }
+
+    /**
+     * Helper method to create an instance.
+     *
+     * @param string $string The hex encoded string.
+     * @return self
+     */
+    public static function create($string)
+    {
+        $v = new self;
+        $v->value = $string;
+
+        return $v;
+    }
+
+    /**
+     * Ensures that the passed value is a PdfHexString instance.
+     *
+     * @param mixed $hexString
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($hexString)
+    {
+        return PdfType::ensureType(self::class, $hexString, 'Hex string value expected.');
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfIndirectObject.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfIndirectObject.php
new file mode 100755 (executable)
index 0000000..a5bd2ac
--- /dev/null
@@ -0,0 +1,104 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\StreamReader;
+use setasign\Fpdi\PdfParser\Tokenizer;
+
+/**
+ * Class representing an indirect object
+ *
+ * @package setasign\Fpdi\PdfParser\Type
+ */
+class PdfIndirectObject extends PdfType
+{
+    /**
+     * Parses an indirect object from a tokenizer, parser and stream-reader.
+     *
+     * @param int $objectNumberToken
+     * @param int $objectGenerationNumberToken
+     * @param PdfParser $parser
+     * @param Tokenizer $tokenizer
+     * @param StreamReader $reader
+     * @return bool|self
+     * @throws PdfTypeException
+     */
+    public static function parse(
+        $objectNumberToken,
+        $objectGenerationNumberToken,
+        PdfParser $parser,
+        Tokenizer $tokenizer,
+        StreamReader $reader
+    ) {
+        $value = $parser->readValue();
+        if ($value === false) {
+            return false;
+        }
+
+        $nextToken = $tokenizer->getNextToken();
+        if ($nextToken === 'stream') {
+            $value = PdfStream::parse($value, $reader, $parser);
+        } elseif ($nextToken !== false) {
+            $tokenizer->pushStack($nextToken);
+        }
+
+        $v = new self;
+        $v->objectNumber = (int) $objectNumberToken;
+        $v->generationNumber = (int) $objectGenerationNumberToken;
+        $v->value = $value;
+
+        return $v;
+    }
+
+    /**
+     * Helper method to create an instance.
+     *
+     * @param int $objectNumber
+     * @param int $generationNumber
+     * @param PdfType $value
+     * @return self
+     */
+    public static function create($objectNumber, $generationNumber, PdfType $value)
+    {
+        $v = new self;
+        $v->objectNumber = (int) $objectNumber;
+        $v->generationNumber = (int) $generationNumber;
+        $v->value = $value;
+
+        return $v;
+    }
+
+    /**
+     * Ensures that the passed value is a PdfIndirectObject instance.
+     *
+     * @param mixed $indirectObject
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($indirectObject)
+    {
+        return PdfType::ensureType(self::class, $indirectObject, 'Indirect object expected.');
+    }
+
+    /**
+     * The object number.
+     *
+     * @var int
+     */
+    public $objectNumber;
+
+    /**
+     * The generation number.
+     *
+     * @var int
+     */
+    public $generationNumber;
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfIndirectObjectReference.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfIndirectObjectReference.php
new file mode 100755 (executable)
index 0000000..c6a67a0
--- /dev/null
@@ -0,0 +1,53 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+/**
+ * Class representing an indirect object reference
+ *
+ * @package setasign\Fpdi\PdfParser\Type
+ */
+class PdfIndirectObjectReference extends PdfType
+{
+    /**
+     * Helper method to create an instance.
+     *
+     * @param int $objectNumber
+     * @param int $generationNumber
+     * @return self
+     */
+    public static function create($objectNumber, $generationNumber)
+    {
+        $v = new self;
+        $v->value = (int) $objectNumber;
+        $v->generationNumber = (int) $generationNumber;
+
+        return $v;
+    }
+
+    /**
+     * Ensures that the passed value is a PdfIndirectObject instance.
+     *
+     * @param mixed $value
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($value)
+    {
+        return PdfType::ensureType(self::class, $value, 'Indirect reference value expected.');
+    }
+
+    /**
+     * The generation number.
+     *
+     * @var int
+     */
+    public $generationNumber;
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfName.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfName.php
new file mode 100755 (executable)
index 0000000..6be7d0e
--- /dev/null
@@ -0,0 +1,82 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+use setasign\Fpdi\PdfParser\StreamReader;
+use setasign\Fpdi\PdfParser\Tokenizer;
+
+/**
+ * Class representing a PDF name object
+ *
+ * @package setasign\Fpdi\PdfParser\Type
+ */
+class PdfName extends PdfType
+{
+    /**
+     * Parses a name object from the passed tokenizer and stream-reader.
+     *
+     * @param Tokenizer $tokenizer
+     * @param StreamReader $streamReader
+     * @return self
+     */
+    public static function parse(Tokenizer $tokenizer, StreamReader $streamReader)
+    {
+        $v = new self;
+        if (\strspn($streamReader->getByte(), "\x00\x09\x0A\x0C\x0D\x20()<>[]{}/%") === 0) {
+            $v->value = (string) $tokenizer->getNextToken();
+            return $v;
+        }
+
+        $v->value = '';
+        return $v;
+    }
+
+    /**
+     * Unescapes a name string.
+     *
+     * @param string $value
+     * @return string
+     */
+    static public function unescape($value)
+    {
+        if (strpos($value, '#') === false)
+            return $value;
+
+        return preg_replace_callback('/#[a-fA-F\d]{2}/', function($matches) {
+            return chr(hexdec($matches[0]));
+        }, $value);
+    }
+
+    /**
+     * Helper method to create an instance.
+     *
+     * @param string $string
+     * @return self
+     */
+    public static function create($string)
+    {
+        $v = new self;
+        $v->value = $string;
+
+        return $v;
+    }
+
+    /**
+     * Ensures that the passed value is a PdfName instance.
+     *
+     * @param mixed $name
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($name)
+    {
+        return PdfType::ensureType(self::class, $name, 'Name value expected.');
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfNull.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfNull.php
new file mode 100755 (executable)
index 0000000..3dbe37c
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+/**
+ * Class representing a PDF null object
+ *
+ * @package setasign\Fpdi\PdfParser\Type
+ */
+class PdfNull extends PdfType
+{
+    // empty body
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfNumeric.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfNumeric.php
new file mode 100755 (executable)
index 0000000..e9bf287
--- /dev/null
@@ -0,0 +1,44 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+/**
+ * Class representing a numeric PDF object
+ *
+ * @package setasign\Fpdi\PdfParser\Type
+ */
+class PdfNumeric extends PdfType
+{
+    /**
+     * Helper method to create an instance.
+     *
+     * @param int|float $value
+     * @return PdfNumeric
+     */
+    public static function create($value)
+    {
+        $v = new self;
+        $v->value = $value + 0;
+
+        return $v;
+    }
+
+    /**
+     * Ensures that the passed value is a PdfNumeric instance.
+     *
+     * @param mixed $value
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($value)
+    {
+        return PdfType::ensureType(self::class, $value, 'Numeric value expected.');
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfStream.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfStream.php
new file mode 100755 (executable)
index 0000000..4b9300b
--- /dev/null
@@ -0,0 +1,320 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
+use setasign\Fpdi\PdfParser\Filter\Ascii85;
+use setasign\Fpdi\PdfParser\Filter\AsciiHex;
+use setasign\Fpdi\PdfParser\Filter\FilterException;
+use setasign\Fpdi\PdfParser\Filter\Flate;
+use setasign\Fpdi\PdfParser\Filter\Lzw;
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\PdfParserException;
+use setasign\Fpdi\PdfParser\StreamReader;
+use setasign\FpdiPdfParser\PdfParser\Filter\Predictor;
+
+/**
+ * Class representing a PDF stream object
+ *
+ * @package setasign\Fpdi\PdfParser\Type
+ */
+class PdfStream extends PdfType
+{
+    /**
+     * Parses a stream from a stream reader.
+     *
+     * @param PdfDictionary $dictionary
+     * @param StreamReader $reader
+     * @param PdfParser $parser Optional to keep backwards compatibility
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function parse(PdfDictionary $dictionary, StreamReader $reader, PdfParser $parser = null)
+    {
+        $v = new self;
+        $v->value = $dictionary;
+        $v->reader = $reader;
+        $v->parser = $parser;
+
+        $offset = $reader->getOffset();
+
+        // Find the first "newline"
+        while (($firstByte = $reader->getByte($offset)) !== false) {
+            if ($firstByte !== "\n" && $firstByte !== "\r") {
+                $offset++;
+            } else {
+                break;
+            }
+        }
+
+        if (false === $firstByte) {
+            throw new PdfTypeException(
+                'Unable to parse stream data. No newline after the stream keyword found.',
+                PdfTypeException::NO_NEWLINE_AFTER_STREAM_KEYWORD
+            );
+        }
+
+        $sndByte = $reader->getByte($offset + 1);
+        if ($firstByte === "\n" || $firstByte === "\r") {
+            $offset++;
+        }
+
+        if ($sndByte === "\n" && $firstByte !== "\n") {
+            $offset++;
+        }
+
+        $reader->setOffset($offset);
+        // let's only save the byte-offset and read the stream only when needed
+        $v->stream = $reader->getPosition() + $reader->getOffset();
+
+        return $v;
+    }
+
+    /**
+     * Helper method to create an instance.
+     *
+     * @param PdfDictionary $dictionary
+     * @param string $stream
+     * @return self
+     */
+    public static function create(PdfDictionary $dictionary, $stream)
+    {
+        $v = new self;
+        $v->value = $dictionary;
+        $v->stream = (string) $stream;
+
+        return $v;
+    }
+
+    /**
+     * Ensures that the passed value is a PdfStream instance.
+     *
+     * @param mixed $stream
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($stream)
+    {
+        return PdfType::ensureType(self::class, $stream, 'Stream value expected.');
+    }
+
+    /**
+     * The stream or its byte-offset position.
+     *
+     * @var int|string
+     */
+    protected $stream;
+
+    /**
+     * The stream reader instance.
+     *
+     * @var StreamReader
+     */
+    protected $reader;
+
+    /**
+     * The PDF parser instance.
+     *
+     * @var PdfParser
+     */
+    protected $parser;
+
+    /**
+     * Get the stream data.
+     *
+     * @param bool $cache Whether cache the stream data or not.
+     * @return bool|string
+     * @throws PdfTypeException
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    public function getStream($cache = false)
+    {
+        if (\is_int($this->stream)) {
+            $length = PdfDictionary::get($this->value, 'Length');
+            if ($this->parser !== null) {
+                $length = PdfType::resolve($length, $this->parser);
+            }
+
+            if (!($length instanceof PdfNumeric) || $length->value === 0) {
+                $this->reader->reset($this->stream, 100000);
+                $buffer = $this->extractStream();
+            } else {
+                $this->reader->reset($this->stream, $length->value);
+                $buffer = $this->reader->getBuffer(false);
+                if ($this->parser !== null) {
+                    $this->reader->reset($this->stream + strlen($buffer));
+                    $this->parser->getTokenizer()->clearStack();
+                    $token = $this->parser->readValue();
+                    if ($token === false || !($token instanceof PdfToken) || $token->value !== 'endstream') {
+                        $this->reader->reset($this->stream, 100000);
+                        $buffer = $this->extractStream();
+                        $this->reader->reset($this->stream + strlen($buffer));
+                    }
+                }
+            }
+
+            if ($cache === false) {
+                return $buffer;
+            }
+
+            $this->stream = $buffer;
+            $this->reader = null;
+        }
+
+        return $this->stream;
+    }
+
+    /**
+     * Extract the stream "manually".
+     *
+     * @return string
+     * @throws PdfTypeException
+     */
+    protected function extractStream()
+    {
+        while (true) {
+            $buffer = $this->reader->getBuffer(false);
+            $length = \strpos($buffer, 'endstream');
+            if ($length === false) {
+                if (!$this->reader->increaseLength(100000)) {
+                    throw new PdfTypeException('Cannot extract stream.');
+                }
+                continue;
+            }
+            break;
+        }
+
+        $buffer = \substr($buffer, 0, $length);
+        $lastByte = \substr($buffer, -1);
+
+        /* Check for EOL marker =
+         *   CARRIAGE RETURN (\r) and a LINE FEED (\n) or just a LINE FEED (\n},
+         *   and not by a CARRIAGE RETURN (\r) alone
+         */
+        if ($lastByte === "\n") {
+            $buffer = \substr($buffer, 0, -1);
+
+            $lastByte = \substr($buffer, -1);
+            if ($lastByte === "\r") {
+                $buffer = \substr($buffer, 0, -1);
+            }
+        }
+
+        return $buffer;
+    }
+
+    /**
+     * Get the unfiltered stream data.
+     *
+     * @return string
+     * @throws FilterException
+     * @throws PdfParserException
+     */
+    public function getUnfilteredStream()
+    {
+        $stream = $this->getStream();
+        $filters = PdfDictionary::get($this->value, 'Filter');
+        if ($filters instanceof PdfNull) {
+            return $stream;
+        }
+
+        if ($filters instanceof PdfArray) {
+            $filters = $filters->value;
+        } else {
+            $filters = [$filters];
+        }
+
+        $decodeParams = PdfDictionary::get($this->value, 'DecodeParms');
+        if ($decodeParams instanceof PdfArray) {
+            $decodeParams = $decodeParams->value;
+        } else {
+            $decodeParams = [$decodeParams];
+        }
+
+        foreach ($filters as $key => $filter) {
+            if (!($filter instanceof PdfName)) {
+                continue;
+            }
+
+            $decodeParam = null;
+            if (isset($decodeParams[$key])) {
+                $decodeParam = ($decodeParams[$key] instanceof PdfDictionary ? $decodeParams[$key] : null);
+            }
+
+            switch ($filter->value) {
+                case 'FlateDecode':
+                case 'Fl':
+                case 'LZWDecode':
+                case 'LZW':
+                    if (\strpos($filter->value, 'LZW') === 0) {
+                        $filterObject = new Lzw();
+                    } else {
+                        $filterObject = new Flate();
+                    }
+
+                    $stream = $filterObject->decode($stream);
+
+                    if ($decodeParam instanceof PdfDictionary) {
+                        $predictor = PdfDictionary::get($decodeParam, 'Predictor', PdfNumeric::create(1));
+                        if ($predictor->value !== 1) {
+                            if (!\class_exists(Predictor::class)) {
+                                throw new PdfParserException(
+                                    'This PDF document makes use of features which are only implemented in the ' .
+                                    'commercial "FPDI PDF-Parser" add-on (see https://www.setasign.com/fpdi-pdf-' .
+                                    'parser).',
+                                    PdfParserException::IMPLEMENTED_IN_FPDI_PDF_PARSER
+                                );
+                            }
+
+                            $colors = PdfDictionary::get($decodeParam, 'Colors', PdfNumeric::create(1));
+                            $bitsPerComponent = PdfDictionary::get(
+                                $decodeParam,
+                                'BitsPerComponent',
+                                PdfNumeric::create(8)
+                            );
+
+                            $columns = PdfDictionary::get($decodeParam, 'Columns', PdfNumeric::create(1));
+
+                            $filterObject = new Predictor(
+                                $predictor->value,
+                                $colors->value,
+                                $bitsPerComponent->value,
+                                $columns->value
+                            );
+
+                            $stream = $filterObject->decode($stream);
+                        }
+                    }
+
+                    break;
+                case 'ASCII85Decode':
+                case 'A85':
+                    $filterObject = new Ascii85();
+                    $stream = $filterObject->decode($stream);
+                    break;
+
+                case 'ASCIIHexDecode':
+                case 'AHx':
+                    $filterObject = new AsciiHex();
+                    $stream = $filterObject->decode($stream);
+                    break;
+
+                default:
+                    throw new FilterException(
+                        \sprintf('Unsupported filter "%s".', $filter->value),
+                        FilterException::UNSUPPORTED_FILTER
+                    );
+            }
+        }
+
+        return $stream;
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfString.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfString.php
new file mode 100755 (executable)
index 0000000..f933b1a
--- /dev/null
@@ -0,0 +1,172 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+use setasign\Fpdi\PdfParser\StreamReader;
+
+/**
+ * Class representing a PDF string object
+ *
+ * @package setasign\Fpdi\PdfParser\Type
+ */
+class PdfString extends PdfType
+{
+    /**
+     * Parses a string object from the stream reader.
+     *
+     * @param StreamReader $streamReader
+     * @return self
+     */
+    public static function parse(StreamReader $streamReader)
+    {
+        $pos = $startPos = $streamReader->getOffset();
+        $openBrackets = 1;
+        do {
+            $buffer = $streamReader->getBuffer(false);
+            for ($length = \strlen($buffer); $openBrackets !== 0 && $pos < $length; $pos++) {
+                switch ($buffer[$pos]) {
+                    case '(':
+                        $openBrackets++;
+                        break;
+                    case ')':
+                        $openBrackets--;
+                        break;
+                    case '\\':
+                        $pos++;
+                }
+            }
+        } while ($openBrackets !== 0 && $streamReader->increaseLength());
+
+        $result = \substr($buffer, $startPos, $openBrackets + $pos - $startPos - 1);
+        $streamReader->setOffset($pos);
+
+        $v = new self;
+        $v->value = $result;
+
+        return $v;
+    }
+
+    /**
+     * Helper method to create an instance.
+     *
+     * @param string $value The string needs to be escaped accordingly.
+     * @return self
+     */
+    public static function create($value)
+    {
+        $v = new self;
+        $v->value = $value;
+
+        return $v;
+    }
+
+    /**
+     * Ensures that the passed value is a PdfString instance.
+     *
+     * @param mixed $string
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($string)
+    {
+        return PdfType::ensureType(self::class, $string, 'String value expected.');
+    }
+
+    /**
+     * Unescapes escaped sequences in a PDF string according to the PDF specification.
+     *
+     * @param string $s
+     * @return string
+     */
+    public static function unescape($s)
+    {
+        $out = '';
+        /** @noinspection ForeachInvariantsInspection */
+        for ($count = 0, $n = \strlen($s); $count < $n; $count++) {
+            if ($s[$count] !== '\\') {
+                $out .= $s[$count];
+            } else {
+                // A backslash at the end of the string - ignore it
+                if ($count === ($n - 1)) {
+                    break;
+                }
+
+                switch ($s[++$count]) {
+                    case ')':
+                    case '(':
+                    case '\\':
+                        $out .= $s[$count];
+                        break;
+
+                    case 'f':
+                        $out .= "\x0C";
+                        break;
+
+                    case 'b':
+                        $out .= "\x08";
+                        break;
+
+                    case 't':
+                        $out .= "\x09";
+                        break;
+
+                    case 'r':
+                        $out .= "\x0D";
+                        break;
+
+                    case 'n':
+                        $out .= "\x0A";
+                        break;
+
+                    case "\r":
+                        if ($count !== $n - 1 && $s[$count + 1] === "\n") {
+                            $count++;
+                        }
+                        break;
+
+                    case "\n":
+                        break;
+
+                    default:
+                        $actualChar = \ord($s[$count]);
+                        // ascii 48 = number 0
+                        // ascii 57 = number 9
+                        if ($actualChar >= 48 &&
+                            $actualChar <= 57) {
+                            $oct = '' . $s[$count];
+
+                            /** @noinspection NotOptimalIfConditionsInspection */
+                            if ($count + 1 < $n &&
+                                \ord($s[$count + 1]) >= 48 &&
+                                \ord($s[$count + 1]) <= 57
+                            ) {
+                                $count++;
+                                $oct .= $s[$count];
+
+                                /** @noinspection NotOptimalIfConditionsInspection */
+                                if ($count + 1 < $n &&
+                                    \ord($s[$count + 1]) >= 48 &&
+                                    \ord($s[$count + 1]) <= 57
+                                ) {
+                                    $oct .= $s[++$count];
+                                }
+                            }
+
+                            $out .= \chr(\octdec($oct));
+                        } else {
+                            // If the character is not one of those defined, the backslash is ignored
+                            $out .= $s[$count];
+                        }
+                }
+            }
+        }
+        return $out;
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfToken.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfToken.php
new file mode 100755 (executable)
index 0000000..4abda09
--- /dev/null
@@ -0,0 +1,44 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+/**
+ * Class representing PDF token object
+ *
+ * @package setasign\Fpdi\PdfParser\Type
+ */
+class PdfToken extends PdfType
+{
+    /**
+     * Helper method to create an instance.
+     *
+     * @param string $token
+     * @return self
+     */
+    public static function create($token)
+    {
+        $v = new self;
+        $v->value = $token;
+
+        return $v;
+    }
+
+    /**
+     * Ensures that the passed value is a PdfToken instance.
+     *
+     * @param mixed $token
+     * @return self
+     * @throws PdfTypeException
+     */
+    public static function ensure($token)
+    {
+        return PdfType::ensureType(self::class, $token, 'Token value expected.');
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfType.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfType.php
new file mode 100755 (executable)
index 0000000..6ce3c8c
--- /dev/null
@@ -0,0 +1,79 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\PdfParserException;
+
+/**
+ * A class defining a PDF data type
+ *
+ * @package setasign\Fpdi\PdfParser\Type
+ */
+class PdfType
+{
+    /**
+     * Resolves a PdfType value to its value.
+     *
+     * This method is used to evaluate indirect and direct object references until a final value is reached.
+     *
+     * @param PdfType $value
+     * @param PdfParser $parser
+     * @param bool $stopAtIndirectObject
+     * @return PdfType
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    public static function resolve(PdfType $value, PdfParser $parser, $stopAtIndirectObject = false)
+    {
+        if ($value instanceof PdfIndirectObject) {
+            if ($stopAtIndirectObject === true) {
+                return $value;
+            }
+
+            return self::resolve($value->value, $parser, $stopAtIndirectObject);
+        }
+
+        if ($value instanceof PdfIndirectObjectReference) {
+            return self::resolve($parser->getIndirectObject($value->value), $parser, $stopAtIndirectObject);
+        }
+
+        return $value;
+    }
+
+    /**
+     * Ensure that a value is an instance of a specific PDF type.
+     *
+     * @param string $type
+     * @param PdfType $value
+     * @param string $errorMessage
+     * @return mixed
+     * @throws PdfTypeException
+     */
+    protected static function ensureType($type, $value, $errorMessage)
+    {
+        if (!($value instanceof $type)) {
+            throw new PdfTypeException(
+                $errorMessage,
+                PdfTypeException::INVALID_DATA_TYPE
+            );
+        }
+
+        return $value;
+    }
+
+    /**
+     * The value of the PDF type.
+     *
+     * @var mixed
+     */
+    public $value;
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfTypeException.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfParser/Type/PdfTypeException.php
new file mode 100755 (executable)
index 0000000..8327220
--- /dev/null
@@ -0,0 +1,25 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfParser\Type;
+
+use setasign\Fpdi\PdfParser\PdfParserException;
+
+/**
+ * Exception class for pdf type classes
+ *
+ * @package setasign\Fpdi\PdfParser\Type
+ */
+class PdfTypeException extends PdfParserException
+{
+    /**
+     * @var int
+     */
+    const NO_NEWLINE_AFTER_STREAM_KEYWORD = 0x0601;
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfReader/DataStructure/Rectangle.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfReader/DataStructure/Rectangle.php
new file mode 100755 (executable)
index 0000000..51f531f
--- /dev/null
@@ -0,0 +1,174 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfReader\DataStructure;
+
+use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\PdfParserException;
+use setasign\Fpdi\PdfParser\Type\PdfArray;
+use setasign\Fpdi\PdfParser\Type\PdfNumeric;
+use setasign\Fpdi\PdfParser\Type\PdfType;
+use setasign\Fpdi\PdfParser\Type\PdfTypeException;
+
+/**
+ * Class representing a rectangle
+ *
+ * @package setasign\Fpdi\PdfReader\DataStructure
+ */
+class Rectangle
+{
+    /**
+     * @var int|float
+     */
+    protected $llx;
+
+    /**
+     * @var int|float
+     */
+    protected $lly;
+
+    /**
+     * @var int|float
+     */
+    protected $urx;
+
+    /**
+     * @var int|float
+     */
+    protected $ury;
+
+    /**
+     * Create a rectangle instance by a PdfArray.
+     *
+     * @param PdfArray|mixed $array
+     * @param PdfParser $parser
+     * @return Rectangle
+     * @throws PdfTypeException
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    public static function byPdfArray($array, PdfParser $parser)
+    {
+        $array = PdfArray::ensure(PdfType::resolve($array, $parser), 4)->value;
+        $ax = PdfNumeric::ensure(PdfType::resolve($array[0], $parser))->value;
+        $ay = PdfNumeric::ensure(PdfType::resolve($array[1], $parser))->value;
+        $bx = PdfNumeric::ensure(PdfType::resolve($array[2], $parser))->value;
+        $by = PdfNumeric::ensure(PdfType::resolve($array[3], $parser))->value;
+
+        return new self($ax, $ay, $bx, $by);
+    }
+
+    /**
+     * Rectangle constructor.
+     *
+     * @param float|int $ax
+     * @param float|int $ay
+     * @param float|int $bx
+     * @param float|int $by
+     */
+    public function __construct($ax, $ay, $bx, $by)
+    {
+        $this->llx = \min($ax, $bx);
+        $this->lly = \min($ay, $by);
+        $this->urx = \max($ax, $bx);
+        $this->ury = \max($ay, $by);
+    }
+
+    /**
+     * Get the width of the rectangle.
+     *
+     * @return float|int
+     */
+    public function getWidth()
+    {
+        return $this->urx - $this->llx;
+    }
+
+    /**
+     * Get the height of the rectangle.
+     *
+     * @return float|int
+     */
+    public function getHeight()
+    {
+        return $this->ury - $this->lly;
+    }
+
+    /**
+     * Get the lower left abscissa.
+     *
+     * @return float|int
+     */
+    public function getLlx()
+    {
+        return $this->llx;
+    }
+
+    /**
+     * Get the lower left ordinate.
+     *
+     * @return float|int
+     */
+    public function getLly()
+    {
+        return $this->lly;
+    }
+
+    /**
+     * Get the upper right abscissa.
+     *
+     * @return float|int
+     */
+    public function getUrx()
+    {
+        return $this->urx;
+    }
+
+    /**
+     * Get the upper right ordinate.
+     *
+     * @return float|int
+     */
+    public function getUry()
+    {
+        return $this->ury;
+    }
+
+    /**
+     * Get the rectangle as an array.
+     *
+     * @return array
+     */
+    public function toArray()
+    {
+        return [
+            $this->llx,
+            $this->lly,
+            $this->urx,
+            $this->ury
+        ];
+    }
+
+    /**
+     * Get the rectangle as a PdfArray.
+     *
+     * @return PdfArray
+     */
+    public function toPdfArray()
+    {
+        $array = new PdfArray();
+        $array->value[] = PdfNumeric::create($this->llx);
+        $array->value[] = PdfNumeric::create($this->lly);
+        $array->value[] = PdfNumeric::create($this->urx);
+        $array->value[] = PdfNumeric::create($this->ury);
+
+        return $array;
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfReader/Page.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfReader/Page.php
new file mode 100755 (executable)
index 0000000..0c2fb56
--- /dev/null
@@ -0,0 +1,272 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfReader;
+
+use setasign\Fpdi\PdfParser\Filter\FilterException;
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\PdfParserException;
+use setasign\Fpdi\PdfParser\Type\PdfArray;
+use setasign\Fpdi\PdfParser\Type\PdfDictionary;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObject;
+use setasign\Fpdi\PdfParser\Type\PdfNull;
+use setasign\Fpdi\PdfParser\Type\PdfNumeric;
+use setasign\Fpdi\PdfParser\Type\PdfStream;
+use setasign\Fpdi\PdfParser\Type\PdfType;
+use setasign\Fpdi\PdfParser\Type\PdfTypeException;
+use setasign\Fpdi\PdfReader\DataStructure\Rectangle;
+use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
+
+/**
+ * Class representing a page of a PDF document
+ *
+ * @package setasign\Fpdi\PdfReader
+ */
+class Page
+{
+    /**
+     * @var PdfIndirectObject
+     */
+    protected $pageObject;
+
+    /**
+     * @var PdfDictionary
+     */
+    protected $pageDictionary;
+
+    /**
+     * @var PdfParser
+     */
+    protected $parser;
+
+    /**
+     * Inherited attributes
+     *
+     * @var null|array
+     */
+    protected $inheritedAttributes;
+
+    /**
+     * Page constructor.
+     *
+     * @param PdfIndirectObject $page
+     * @param PdfParser $parser
+     */
+    public function __construct(PdfIndirectObject $page, PdfParser $parser)
+    {
+        $this->pageObject = $page;
+        $this->parser = $parser;
+    }
+
+    /**
+     * Get the indirect object of this page.
+     *
+     * @return PdfIndirectObject
+     */
+    public function getPageObject()
+    {
+        return $this->pageObject;
+    }
+
+    /**
+     * Get the dictionary of this page.
+     *
+     * @return PdfDictionary
+     * @throws PdfParserException
+     * @throws PdfTypeException
+     * @throws CrossReferenceException
+     */
+    public function getPageDictionary()
+    {
+        if (null === $this->pageDictionary) {
+            $this->pageDictionary = PdfDictionary::ensure(PdfType::resolve($this->getPageObject(), $this->parser));
+        }
+
+        return $this->pageDictionary;
+    }
+
+    /**
+     * Get a page attribute.
+     *
+     * @param string $name
+     * @param bool $inherited
+     * @return PdfType|null
+     * @throws PdfParserException
+     * @throws PdfTypeException
+     * @throws CrossReferenceException
+     */
+    public function getAttribute($name, $inherited = true)
+    {
+        $dict = $this->getPageDictionary();
+
+        if (isset($dict->value[$name])) {
+            return $dict->value[$name];
+        }
+
+        $inheritedKeys = ['Resources', 'MediaBox', 'CropBox', 'Rotate'];
+        if ($inherited && \in_array($name, $inheritedKeys, true)) {
+            if ($this->inheritedAttributes === null) {
+                $this->inheritedAttributes = [];
+                $inheritedKeys = \array_filter($inheritedKeys, function ($key) use ($dict) {
+                    return !isset($dict->value[$key]);
+                });
+
+                if (\count($inheritedKeys) > 0) {
+                    $parentDict = PdfType::resolve(PdfDictionary::get($dict, 'Parent'), $this->parser);
+                    while ($parentDict instanceof PdfDictionary) {
+                        foreach ($inheritedKeys as $index => $key) {
+                            if (isset($parentDict->value[$key])) {
+                                $this->inheritedAttributes[$key] = $parentDict->value[$key];
+                                unset($inheritedKeys[$index]);
+                            }
+                        }
+
+                        /** @noinspection NotOptimalIfConditionsInspection */
+                        if (isset($parentDict->value['Parent']) && \count($inheritedKeys) > 0) {
+                            $parentDict = PdfType::resolve(PdfDictionary::get($parentDict, 'Parent'), $this->parser);
+                        } else {
+                            break;
+                        }
+                    }
+                }
+            }
+
+            if (isset($this->inheritedAttributes[$name])) {
+                return $this->inheritedAttributes[$name];
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Get the rotation value.
+     *
+     * @return int
+     * @throws PdfParserException
+     * @throws PdfTypeException
+     * @throws CrossReferenceException
+     */
+    public function getRotation()
+    {
+        $rotation = $this->getAttribute('Rotate');
+        if (null === $rotation) {
+            return 0;
+        }
+
+        $rotation = PdfNumeric::ensure(PdfType::resolve($rotation, $this->parser))->value % 360;
+
+        if ($rotation < 0) {
+            $rotation += 360;
+        }
+
+        return $rotation;
+    }
+
+    /**
+     * Get a boundary of this page.
+     *
+     * @param string $box
+     * @param bool $fallback
+     * @return bool|Rectangle
+     * @throws PdfParserException
+     * @throws PdfTypeException
+     * @throws CrossReferenceException
+     * @see PageBoundaries
+     */
+    public function getBoundary($box = PageBoundaries::CROP_BOX, $fallback = true)
+    {
+        $value = $this->getAttribute($box);
+
+        if ($value !== null) {
+            return Rectangle::byPdfArray($value, $this->parser);
+        }
+
+        if ($fallback === false) {
+            return false;
+        }
+
+        switch ($box) {
+            case PageBoundaries::BLEED_BOX:
+            case PageBoundaries::TRIM_BOX:
+            case PageBoundaries::ART_BOX:
+                return $this->getBoundary(PageBoundaries::CROP_BOX, true);
+            case PageBoundaries::CROP_BOX:
+                return $this->getBoundary(PageBoundaries::MEDIA_BOX, true);
+        }
+
+        return false;
+    }
+
+    /**
+     * Get the width and height of this page.
+     *
+     * @param string $box
+     * @param bool $fallback
+     * @return array|bool
+     * @throws PdfParserException
+     * @throws PdfTypeException
+     * @throws CrossReferenceException
+     */
+    public function getWidthAndHeight($box = PageBoundaries::CROP_BOX, $fallback = true)
+    {
+        $boundary = $this->getBoundary($box, $fallback);
+        if ($boundary === false) {
+            return false;
+        }
+
+        $rotation = $this->getRotation();
+        $interchange = ($rotation / 90) % 2;
+
+        return [
+            $interchange ? $boundary->getHeight() : $boundary->getWidth(),
+            $interchange ? $boundary->getWidth() : $boundary->getHeight()
+        ];
+    }
+
+    /**
+     * Get the raw content stream.
+     *
+     * @return string
+     * @throws PdfReaderException
+     * @throws PdfTypeException
+     * @throws FilterException
+     * @throws PdfParserException
+     */
+    public function getContentStream()
+    {
+        $dict = $this->getPageDictionary();
+        $contents = PdfType::resolve(PdfDictionary::get($dict, 'Contents'), $this->parser);
+        if ($contents instanceof PdfNull) {
+            return '';
+        }
+
+        if ($contents instanceof PdfArray) {
+            $result = [];
+            foreach ($contents->value as $content) {
+                $content = PdfType::resolve($content, $this->parser);
+                if (!($content instanceof PdfStream)) {
+                    continue;
+                }
+                $result[] = $content->getUnfilteredStream();
+            }
+
+            return \implode("\n", $result);
+        }
+
+        if ($contents instanceof PdfStream) {
+            return $contents->getUnfilteredStream();
+        }
+
+        throw new PdfReaderException(
+            'Array or stream expected.',
+            PdfReaderException::UNEXPECTED_DATA_TYPE
+        );
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfReader/PageBoundaries.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfReader/PageBoundaries.php
new file mode 100755 (executable)
index 0000000..aaeaf91
--- /dev/null
@@ -0,0 +1,95 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfReader;
+
+/**
+ * An abstract class for page boundary constants and some helper methods
+ *
+ * @package setasign\Fpdi\PdfReader
+ */
+abstract class PageBoundaries
+{
+    /**
+     * MediaBox
+     *
+     * The media box defines the boundaries of the physical medium on which the page is to be printed.
+     *
+     * @see PDF 32000-1:2008 - 14.11.2 Page Boundaries
+     * @var string
+     */
+    const MEDIA_BOX = 'MediaBox';
+
+    /**
+     * CropBox
+     *
+     * The crop box defines the region to which the contents of the page shall be clipped (cropped) when displayed or
+     * printed.
+     *
+     * @see PDF 32000-1:2008 - 14.11.2 Page Boundaries
+     * @var string
+     */
+    const CROP_BOX = 'CropBox';
+
+    /**
+     * BleedBox
+     *
+     * The bleed box defines the region to which the contents of the page shall be clipped when output in a
+     * production environment.
+     *
+     * @see PDF 32000-1:2008 - 14.11.2 Page Boundaries
+     * @var string
+     */
+    const BLEED_BOX = 'BleedBox';
+
+    /**
+     * TrimBox
+     *
+     * The trim box defines the intended dimensions of the finished page after trimming.
+     *
+     * @see PDF 32000-1:2008 - 14.11.2 Page Boundaries
+     * @var string
+     */
+    const TRIM_BOX = 'TrimBox';
+
+    /**
+     * ArtBox
+     *
+     * The art box defines the extent of the page’s meaningful content (including potential white space) as intended
+     * by the page’s creator.
+     *
+     * @see PDF 32000-1:2008 - 14.11.2 Page Boundaries
+     * @var string
+     */
+    const ART_BOX = 'ArtBox';
+
+    /**
+     * All page boundaries
+     *
+     * @var array
+     */
+    public static $all = array(
+        self::MEDIA_BOX,
+        self::CROP_BOX,
+        self::BLEED_BOX,
+        self::TRIM_BOX,
+        self::ART_BOX
+    );
+
+    /**
+     * Checks if a name is a valid page boundary name.
+     *
+     * @param string $name The boundary name
+     * @return boolean A boolean value whether the name is valid or not.
+     */
+    public static function isValidName($name)
+    {
+        return \in_array($name, self::$all, true);
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfReader/PdfReader.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfReader/PdfReader.php
new file mode 100755 (executable)
index 0000000..896d44d
--- /dev/null
@@ -0,0 +1,221 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfReader;
+
+use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
+use setasign\Fpdi\PdfParser\PdfParser;
+use setasign\Fpdi\PdfParser\PdfParserException;
+use setasign\Fpdi\PdfParser\Type\PdfArray;
+use setasign\Fpdi\PdfParser\Type\PdfDictionary;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObjectReference;
+use setasign\Fpdi\PdfParser\Type\PdfNumeric;
+use setasign\Fpdi\PdfParser\Type\PdfType;
+use setasign\Fpdi\PdfParser\Type\PdfTypeException;
+
+/**
+ * A PDF reader class
+ *
+ * @package setasign\Fpdi\PdfReader
+ */
+class PdfReader
+{
+    /**
+     * @var PdfParser
+     */
+    protected $parser;
+
+    /**
+     * @var int
+     */
+    protected $pageCount;
+
+    /**
+     * Indirect objects of resolved pages.
+     *
+     * @var PdfIndirectObjectReference[]
+     */
+    protected $pages = [];
+
+    /**
+     * PdfReader constructor.
+     *
+     * @param PdfParser $parser
+     */
+    public function __construct(PdfParser $parser)
+    {
+        $this->parser = $parser;
+    }
+
+    /**
+     * PdfReader destructor.
+     */
+    public function __destruct()
+    {
+        if ($this->parser !== null) {
+            /** @noinspection PhpInternalEntityUsedInspection */
+            $this->parser->cleanUp();
+        }
+    }
+
+    /**
+     * Get the pdf parser instance.
+     *
+     * @return PdfParser
+     */
+    public function getParser()
+    {
+        return $this->parser;
+    }
+
+    /**
+     * Get the PDF version.
+     *
+     * @return string
+     * @throws PdfParserException
+     */
+    public function getPdfVersion()
+    {
+        return \implode('.', $this->parser->getPdfVersion());
+    }
+
+    /**
+     * Get the page count.
+     *
+     * @return int
+     * @throws PdfTypeException
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    public function getPageCount()
+    {
+        if ($this->pageCount === null) {
+            $catalog = $this->parser->getCatalog();
+
+            $pages = PdfType::resolve(PdfDictionary::get($catalog, 'Pages'), $this->parser);
+            $count = PdfType::resolve(PdfDictionary::get($pages, 'Count'), $this->parser);
+
+            $this->pageCount = PdfNumeric::ensure($count)->value;
+        }
+
+        return $this->pageCount;
+    }
+
+    /**
+     * Get a page instance.
+     *
+     * @param int $pageNumber
+     * @return Page
+     * @throws PdfTypeException
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     * @throws \InvalidArgumentException
+     */
+    public function getPage($pageNumber)
+    {
+        if (!\is_numeric($pageNumber)) {
+            throw new \InvalidArgumentException(
+                'Page number needs to be a number.'
+            );
+        }
+
+        if ($pageNumber < 1 || $pageNumber > $this->getPageCount()) {
+            throw new \InvalidArgumentException(
+                \sprintf(
+                    'Page number "%s" out of available page range (1 - %s)',
+                    $pageNumber,
+                    $this->getPageCount()
+                )
+            );
+        }
+
+        $this->readPages();
+
+        $page = $this->pages[$pageNumber - 1];
+
+        if ($page instanceof PdfIndirectObjectReference) {
+            $readPages = function ($kids) use (&$readPages) {
+                $kids = PdfArray::ensure($kids);
+
+                /** @noinspection LoopWhichDoesNotLoopInspection */
+                foreach ($kids->value as $reference) {
+                    $reference = PdfIndirectObjectReference::ensure($reference);
+                    $object = $this->parser->getIndirectObject($reference->value);
+                    $type = PdfDictionary::get($object->value, 'Type');
+
+                    if ($type->value === 'Pages') {
+                        return $readPages(PdfDictionary::get($object->value, 'Kids'));
+                    }
+
+                    return $object;
+                }
+
+                throw new PdfReaderException(
+                    'Kids array cannot be empty.',
+                    PdfReaderException::KIDS_EMPTY
+                );
+            };
+
+            $page = $this->parser->getIndirectObject($page->value);
+            $dict = PdfType::resolve($page, $this->parser);
+            $type = PdfDictionary::get($dict, 'Type');
+            if ($type->value === 'Pages') {
+                $kids = PdfType::resolve(PdfDictionary::get($dict, 'Kids'), $this->parser);
+                $page = $this->pages[$pageNumber - 1] = $readPages($kids);
+            } else {
+                $this->pages[$pageNumber - 1] = $page;
+            }
+        }
+
+        return new Page($page, $this->parser);
+    }
+
+    /**
+     * Walk the page tree and resolve all indirect objects of all pages.
+     *
+     * @throws PdfTypeException
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    protected function readPages()
+    {
+        if (\count($this->pages) > 0) {
+            return;
+        }
+
+        $readPages = function ($kids, $count) use (&$readPages) {
+            $kids = PdfArray::ensure($kids);
+            $isLeaf = $count->value === \count($kids->value);
+
+            foreach ($kids->value as $reference) {
+                $reference = PdfIndirectObjectReference::ensure($reference);
+
+                if ($isLeaf) {
+                    $this->pages[] = $reference;
+                    continue;
+                }
+
+                $object = $this->parser->getIndirectObject($reference->value);
+                $type = PdfDictionary::get($object->value, 'Type');
+
+                if ($type->value === 'Pages') {
+                    $readPages(PdfDictionary::get($object->value, 'Kids'), PdfDictionary::get($object->value, 'Count'));
+                } else {
+                    $this->pages[] = $object;
+                }
+            }
+        };
+
+        $catalog = $this->parser->getCatalog();
+        $pages = PdfType::resolve(PdfDictionary::get($catalog, 'Pages'), $this->parser);
+        $count = PdfType::resolve(PdfDictionary::get($pages, 'Count'), $this->parser);
+        $kids = PdfType::resolve(PdfDictionary::get($pages, 'Kids'), $this->parser);
+        $readPages($kids, $count);
+    }
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfReader/PdfReaderException.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/PdfReader/PdfReaderException.php
new file mode 100755 (executable)
index 0000000..c1159ba
--- /dev/null
@@ -0,0 +1,35 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\PdfReader;
+
+use setasign\Fpdi\FpdiException;
+
+/**
+ * Exception for the pdf reader class
+ *
+ * @package setasign\Fpdi\PdfReader
+ */
+class PdfReaderException extends FpdiException
+{
+    /**
+     * @var int
+     */
+    const KIDS_EMPTY = 0x0101;
+
+    /**
+     * @var int
+     */
+    const UNEXPECTED_DATA_TYPE = 0x0102;
+
+    /**
+     * @var int
+     */
+    const MISSING_DATA = 0x0103;
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/Tcpdf/Fpdi.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/Tcpdf/Fpdi.php
new file mode 100755 (executable)
index 0000000..47886ea
--- /dev/null
@@ -0,0 +1,266 @@
+<?php
+
+namespace setasign\Fpdi\Tcpdf;
+
+use setasign\Fpdi\FpdiTrait;
+use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
+use setasign\Fpdi\PdfParser\Filter\AsciiHex;
+use setasign\Fpdi\PdfParser\PdfParserException;
+use setasign\Fpdi\PdfParser\Type\PdfHexString;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObject;
+use setasign\Fpdi\PdfParser\Type\PdfNull;
+use setasign\Fpdi\PdfParser\Type\PdfNumeric;
+use setasign\Fpdi\PdfParser\Type\PdfStream;
+use setasign\Fpdi\PdfParser\Type\PdfString;
+use setasign\Fpdi\PdfParser\Type\PdfType;
+use setasign\Fpdi\PdfParser\Type\PdfTypeException;
+
+/**
+ * Class Fpdi
+ *
+ * This class let you import pages of existing PDF documents into a reusable structure for TCPDF.
+ *
+ * @package setasign\Fpdi
+ */
+class Fpdi extends \TCPDF
+{
+    use FpdiTrait {
+        writePdfType as fpdiWritePdfType;
+        useImportedPage as fpdiUseImportedPage;
+    }
+
+    /**
+     * FPDI version
+     *
+     * @string
+     */
+    const VERSION = '2.2.0';
+
+    /**
+     * A counter for template ids.
+     *
+     * @var int
+     */
+    protected $templateId = 0;
+
+    /**
+     * The currently used object number.
+     *
+     * @var int
+     */
+    protected $currentObjectNumber;
+
+    protected function _enddoc()
+    {
+        parent::_enddoc();
+        $this->cleanUp();
+    }
+
+    /**
+     * Get the next template id.
+     *
+     * @return int
+     */
+    protected function getNextTemplateId()
+    {
+        return $this->templateId++;
+    }
+
+    /**
+     * Draws an imported page onto the page or another template.
+     *
+     * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
+     * aspect ratio.
+     *
+     * @param mixed $tpl The template id
+     * @param float|int|array $x The abscissa of upper-left corner. Alternatively you could use an assoc array
+     *                           with the keys "x", "y", "width", "height", "adjustPageSize".
+     * @param float|int $y The ordinate of upper-left corner.
+     * @param float|int|null $width The width.
+     * @param float|int|null $height The height.
+     * @param bool $adjustPageSize
+     * @return array The size
+     * @see FpdiTrait::getTemplateSize()
+     */
+    public function useTemplate($tpl, $x = 0, $y = 0, $width = null, $height = null, $adjustPageSize = false)
+    {
+        return $this->useImportedPage($tpl, $x, $y, $width, $height, $adjustPageSize);
+    }
+
+    /**
+     * Draws an imported page onto the page.
+     *
+     * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
+     * aspect ratio.
+     *
+     * @param mixed $pageId The page id
+     * @param float|int|array $x The abscissa of upper-left corner. Alternatively you could use an assoc array
+     *                           with the keys "x", "y", "width", "height", "adjustPageSize".
+     * @param float|int $y The ordinate of upper-left corner.
+     * @param float|int|null $width The width.
+     * @param float|int|null $height The height.
+     * @param bool $adjustPageSize
+     * @return array The size.
+     * @see Fpdi::getTemplateSize()
+     */
+    public function useImportedPage($pageId, $x = 0, $y = 0, $width = null, $height = null, $adjustPageSize = false)
+    {
+        $size = $this->fpdiUseImportedPage($pageId, $x, $y, $width, $height, $adjustPageSize);
+        if ($this->inxobj) {
+            $importedPage = $this->importedPages[$pageId];
+            $this->xobjects[$this->xobjid]['importedPages'][$importedPage['id']] = $pageId;
+        }
+
+        return $size;
+    }
+
+    /**
+     * Get the size of an imported page.
+     *
+     * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
+     * aspect ratio.
+     *
+     * @param mixed $tpl The template id
+     * @param float|int|null $width The width.
+     * @param float|int|null $height The height.
+     * @return array|bool An array with following keys: width, height, 0 (=width), 1 (=height), orientation (L or P)
+     */
+    public function getTemplateSize($tpl, $width = null, $height = null)
+    {
+        return $this->getImportedPageSize($tpl, $width, $height);
+    }
+
+    /**
+     * @inheritdoc
+     */
+    protected function _getxobjectdict()
+    {
+        $out = parent::_getxobjectdict();
+
+        foreach ($this->importedPages as $key => $pageData) {
+            $out .= '/' . $pageData['id'] . ' ' . $pageData['objectNumber'] . ' 0 R ';
+        }
+
+        return $out;
+    }
+
+    /**
+     * @inheritdoc
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    protected function _putxobjects()
+    {
+        foreach ($this->importedPages as $key => $pageData) {
+            $this->currentObjectNumber = $this->_newobj();
+            $this->importedPages[$key]['objectNumber'] = $this->currentObjectNumber;
+            $this->currentReaderId = $pageData['readerId'];
+            $this->writePdfType($pageData['stream']);
+            $this->_put('endobj');
+        }
+
+        foreach (\array_keys($this->readers) as $readerId) {
+            $parser = $this->getPdfReader($readerId)->getParser();
+            $this->currentReaderId = $readerId;
+
+            while (($objectNumber = \array_pop($this->objectsToCopy[$readerId])) !== null) {
+                try {
+                    $object = $parser->getIndirectObject($objectNumber);
+
+                } catch (CrossReferenceException $e) {
+                    if ($e->getCode() === CrossReferenceException::OBJECT_NOT_FOUND) {
+                        $object = PdfIndirectObject::create($objectNumber, 0, new PdfNull());
+                    } else {
+                        throw $e;
+                    }
+                }
+
+                $this->writePdfType($object);
+            }
+        }
+
+        // let's prepare resources for imported pages in templates
+        foreach ($this->xobjects as $xObjectId => $data) {
+            if (!isset($data['importedPages'])) {
+                continue;
+            }
+
+            foreach ($data['importedPages'] as $id => $pageKey) {
+                $page = $this->importedPages[$pageKey];
+                $this->xobjects[$xObjectId]['xobjects'][$id] = ['n' => $page['objectNumber']];
+            }
+        }
+
+
+        parent::_putxobjects();
+        $this->currentObjectNumber = null;
+    }
+
+    /**
+     * Append content to the buffer of TCPDF.
+     *
+     * @param string $s
+     * @param bool $newLine
+     */
+    protected function _put($s, $newLine = true)
+    {
+        if ($newLine) {
+            $this->setBuffer($s . "\n");
+        } else {
+            $this->setBuffer($s);
+        }
+    }
+
+    /**
+     * Begin a new object and return the object number.
+     *
+     * @param int|string $objid Object ID (leave empty to get a new ID).
+     * @return int object number
+     */
+    protected function _newobj($objid = '')
+    {
+        $this->_out($this->_getobj($objid));
+        return $this->n;
+    }
+
+    /**
+     * Writes a PdfType object to the resulting buffer.
+     *
+     * @param PdfType $value
+     * @throws PdfTypeException
+     */
+    protected function writePdfType(PdfType $value)
+    {
+        if (!$this->encrypted) {
+            $this->fpdiWritePdfType($value);
+            return;
+        }
+
+        if ($value instanceof PdfString) {
+            $string = PdfString::unescape($value->value);
+            $string = $this->_encrypt_data($this->currentObjectNumber, $string);
+            $value->value = \TCPDF_STATIC::_escape($string);
+
+        } elseif ($value instanceof PdfHexString) {
+            $filter = new AsciiHex();
+            $string = $filter->decode($value->value);
+            $string = $this->_encrypt_data($this->currentObjectNumber, $string);
+            $value->value = $filter->encode($string, true);
+
+        } elseif ($value instanceof PdfStream) {
+            $stream = $value->getStream();
+            $stream = $this->_encrypt_data($this->currentObjectNumber, $stream);
+            $dictionary = $value->value;
+            $dictionary->value['Length'] = PdfNumeric::create(\strlen($stream));
+            $value = PdfStream::create($dictionary, $stream);
+
+        } elseif ($value instanceof PdfIndirectObject) {
+            /**
+             * @var $value PdfIndirectObject
+             */
+            $this->currentObjectNumber = $this->objectMap[$this->currentReaderId][$value->objectNumber];
+        }
+
+        $this->fpdiWritePdfType($value);
+    }
+}
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/TcpdfFpdi.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/TcpdfFpdi.php
new file mode 100755 (executable)
index 0000000..6b617a1
--- /dev/null
@@ -0,0 +1,23 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi;
+
+/**
+ * Class TcpdfFpdi
+ *
+ * This class let you import pages of existing PDF documents into a reusable structure for TCPDF.
+ *
+ * @package setasign\Fpdi
+ * @deprecated Class was moved to \setasign\Fpdi\Tcpdf\Fpdi
+ */
+class TcpdfFpdi extends \setasign\Fpdi\Tcpdf\Fpdi
+{
+    // this class is moved to \setasign\Fpdi\Tcpdf\Fpdi
+}
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/Tfpdf/FpdfTpl.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/Tfpdf/FpdfTpl.php
new file mode 100755 (executable)
index 0000000..13ca8d4
--- /dev/null
@@ -0,0 +1,99 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\Tfpdf;
+
+use setasign\Fpdi\FpdfTplTrait;
+
+/**
+ * Class FpdfTpl
+ *
+ * We need to change some access levels and implement the setPageFormat() method to bring back compatibility to tFPDF.
+ *
+ * @package setasign\Fpdi\Tfpdf
+ */
+class FpdfTpl extends \tFPDF
+{
+    use FpdfTplTrait {
+        _putimages as _protectedPutimages;
+        _putxobjectdict as _protectedPutxobjectdict;
+    }
+
+    /**
+     * Make the method public as in tFPDF.
+     */
+    public function _putimages()
+    {
+        $this->_protectedPutimages();
+    }
+
+    /**
+     * Make the method public as in tFPDF.
+     */
+    public function _putxobjectdict()
+    {
+        $this->_protectedPutxobjectdict();
+    }
+
+    /**
+     * Set the page format of the current page.
+     *
+     * @param array $size An array with two values defining the size.
+     * @param string $orientation "L" for landscape, "P" for portrait.
+     * @throws \BadMethodCallException
+     */
+    public function setPageFormat($size, $orientation)
+    {
+        if ($this->currentTemplateId !== null) {
+            throw new \BadMethodCallException('The page format cannot be changed when writing to a template.');
+        }
+
+        if (!\in_array($orientation, ['P', 'L'], true)) {
+            throw new \InvalidArgumentException(\sprintf(
+                'Invalid page orientation "%s"! Only "P" and "L" are allowed!',
+                $orientation
+            ));
+        }
+
+        $size = $this->_getpagesize($size);
+
+        if ($orientation != $this->CurOrientation
+            || $size[0] != $this->CurPageSize[0]
+            || $size[1] != $this->CurPageSize[1]
+        ) {
+            // New size or orientation
+            if ($orientation === 'P') {
+                $this->w = $size[0];
+                $this->h = $size[1];
+            } else {
+                $this->w = $size[1];
+                $this->h = $size[0];
+            }
+            $this->wPt = $this->w * $this->k;
+            $this->hPt = $this->h * $this->k;
+            $this->PageBreakTrigger = $this->h - $this->bMargin;
+            $this->CurOrientation = $orientation;
+            $this->CurPageSize = $size;
+
+            $this->PageSizes[$this->page] = array($this->wPt, $this->hPt);
+        }
+    }
+
+    /**
+     * @inheritdoc
+     */
+    protected function _put($s, $newLine = true)
+    {
+        if ($newLine) {
+            $this->buffer .= $s . "\n";
+        } else {
+            $this->buffer .= $s;
+        }
+    }
+}
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/Tfpdf/Fpdi.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/Tfpdf/Fpdi.php
new file mode 100755 (executable)
index 0000000..f22625f
--- /dev/null
@@ -0,0 +1,164 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+namespace setasign\Fpdi\Tfpdf;
+
+use setasign\Fpdi\FpdiTrait;
+use setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException;
+use setasign\Fpdi\PdfParser\PdfParserException;
+use setasign\Fpdi\PdfParser\Type\PdfIndirectObject;
+use setasign\Fpdi\PdfParser\Type\PdfNull;
+
+/**
+ * Class Fpdi
+ *
+ * This class let you import pages of existing PDF documents into a reusable structure for tFPDF.
+ *
+ * @package setasign\Fpdi
+ */
+class Fpdi extends FpdfTpl
+{
+    use FpdiTrait;
+
+    /**
+     * FPDI version
+     *
+     * @string
+     */
+    const VERSION = '2.2.0';
+
+    public function _enddoc()
+    {
+        parent::_enddoc();
+        $this->cleanUp();
+    }
+
+    /**
+     * Draws an imported page or a template onto the page or another template.
+     *
+     * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
+     * aspect ratio.
+     *
+     * @param mixed $tpl The template id
+     * @param float|int|array $x The abscissa of upper-left corner. Alternatively you could use an assoc array
+     *                           with the keys "x", "y", "width", "height", "adjustPageSize".
+     * @param float|int $y The ordinate of upper-left corner.
+     * @param float|int|null $width The width.
+     * @param float|int|null $height The height.
+     * @param bool $adjustPageSize
+     * @return array The size
+     * @see Fpdi::getTemplateSize()
+     */
+    public function useTemplate($tpl, $x = 0, $y = 0, $width = null, $height = null, $adjustPageSize = false)
+    {
+        if (isset($this->importedPages[$tpl])) {
+            $size = $this->useImportedPage($tpl, $x, $y, $width, $height, $adjustPageSize);
+            if ($this->currentTemplateId !== null) {
+                $this->templates[$this->currentTemplateId]['resources']['templates']['importedPages'][$tpl] = $tpl;
+            }
+            return $size;
+        }
+
+        return parent::useTemplate($tpl, $x, $y, $width, $height, $adjustPageSize);
+    }
+
+    /**
+     * Get the size of an imported page or template.
+     *
+     * Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
+     * aspect ratio.
+     *
+     * @param mixed $tpl The template id
+     * @param float|int|null $width The width.
+     * @param float|int|null $height The height.
+     * @return array|bool An array with following keys: width, height, 0 (=width), 1 (=height), orientation (L or P)
+     */
+    public function getTemplateSize($tpl, $width = null, $height = null)
+    {
+        $size = parent::getTemplateSize($tpl, $width, $height);
+        if ($size === false) {
+            return $this->getImportedPageSize($tpl, $width, $height);
+        }
+
+        return $size;
+    }
+
+    /**
+     * @inheritdoc
+     * @throws CrossReferenceException
+     * @throws PdfParserException
+     */
+    public function _putimages()
+    {
+        $this->currentReaderId = null;
+        parent::_putimages();
+
+        foreach ($this->importedPages as $key => $pageData) {
+            $this->_newobj();
+            $this->importedPages[$key]['objectNumber'] = $this->n;
+            $this->currentReaderId = $pageData['readerId'];
+            $this->writePdfType($pageData['stream']);
+            $this->_put('endobj');
+        }
+
+        foreach (\array_keys($this->readers) as $readerId) {
+            $parser = $this->getPdfReader($readerId)->getParser();
+            $this->currentReaderId = $readerId;
+
+            while (($objectNumber = \array_pop($this->objectsToCopy[$readerId])) !== null) {
+                try {
+                    $object = $parser->getIndirectObject($objectNumber);
+
+                } catch (CrossReferenceException $e) {
+                    if ($e->getCode() === CrossReferenceException::OBJECT_NOT_FOUND) {
+                        $object = PdfIndirectObject::create($objectNumber, 0, new PdfNull());
+                    } else {
+                        throw $e;
+                    }
+                }
+
+                $this->writePdfType($object);
+            }
+        }
+
+        $this->currentReaderId = null;
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function _putxobjectdict()
+    {
+        foreach ($this->importedPages as $key => $pageData) {
+            $this->_put('/' . $pageData['id'] . ' ' . $pageData['objectNumber'] . ' 0 R');
+        }
+
+        parent::_putxobjectdict();
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function _newobj($n = null)
+    {
+        // Begin a new object
+        if($n === null)
+            $n = ++$this->n;
+        $this->offsets[$n] = $this->_getoffset();
+        $this->_put($n.' 0 obj');
+    }
+
+    /**
+     * @inheritdoc
+     */
+    protected function _getoffset()
+    {
+        return strlen($this->buffer);
+    }
+}
\ No newline at end of file
diff --git a/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/autoload.php b/wp-content/plugins/woocommerce-chronopost/vendor/setasign/fpdi/src/autoload.php
new file mode 100755 (executable)
index 0000000..fd7d472
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+/**
+ * This file is part of FPDI
+ *
+ * @package   setasign\Fpdi
+ * @copyright Copyright (c) 2019 Setasign - Jan Slabon (https://www.setasign.com)
+ * @license   http://opensource.org/licenses/mit-license The MIT License
+ */
+
+spl_autoload_register(function ($class) {
+    if (strpos($class, 'setasign\Fpdi\\') === 0) {
+        $filename = str_replace('\\', DIRECTORY_SEPARATOR, substr($class, 14)) . '.php';
+        $fullpath = __DIR__ . DIRECTORY_SEPARATOR . $filename;
+
+        if (file_exists($fullpath)) {
+            /** @noinspection PhpIncludeInspection */
+            require_once $fullpath;
+        }
+    }
+});
index 96fdc84acb54778a759b9c7560c59490775dfc48..7970649985823119f8ba6f95056f6b41f1ba72cc 100644 (file)
@@ -1,5 +1,5 @@
-$placeholder-color = #7f8999
-$border-color = #7f8999
+$placeholder-color = $colors.text
+$border-color = $colors.text
 
 ::-webkit-input-placeholder /* Chrome/Opera/Safari */
   color: $placeholder-color
@@ -19,11 +19,11 @@ input[type="text"], input[type="email"], input[type="number"], input[type="tel"]
   appearance: none
   border: none
   padding: 0.5em 0
-  border-bottom: 3px solid $border-color
+  border-bottom: 2px solid $border-color
   width: 100%
 
 textarea
-  border: 3px solid $border-color
+  border: 2px solid $border-color
   width: 100%
   min-height: 200px
   padding: 1em
index 6ad7e00d4c20866b805c5916a7c30c07a39ec06e..99abc776deb3a900d43717f7e6fa421f6e3f9ced 100644 (file)
     &:before
       color: $colors.blue
 
+  // General form styles
+  form, &-page form
+    .form-row
+      label
+        display: block
+        text-transform: uppercase
+        font-size: 14px
+        margin-top: 1em
+        color: #20548c
+        font-weight: 600
+        margin-bottom: 0.5em
+
   // Button overrides
   #respond input#submit,
   a.button, 
@@ -93,3 +105,37 @@ form.checkout
 #ship-to-different-address
   font-size: inherit
   color: inherit
+
+
+//=============
+
+// Select 2 overrides
+.select2-container--default
+  .select2-selection--single
+    position: relative
+    border-radius: 0
+    border: 2px solid $colors.text
+    height: auto
+
+    // Dropdown arrow
+    .select2-selection__arrow
+      top: 0
+      right: 0
+      width: 40px
+      height: 100%
+
+      b
+        border-width: 7px 6px 0 6px
+        margin: 0
+        transform: translate(-50%, -50%)
+
+  .select2-selection__rendered
+    padding: 4px 40px 4px 8px
+
+// Dropdown panel
+.select2-dropdown
+  border: 2px solid $colors.text
+  border-radius: 0
+
+.select2-search--dropdown
+  padding: 4px 8px