diff --git a/.htaccess b/.htaccess index 8b1f582ca455..6abdc32e4efc 100644 --- a/.htaccess +++ b/.htaccess @@ -2,6 +2,7 @@ RewriteEngine On RewriteRule "^.env" - [F,L] RewriteRule "^storage" - [F,L] + RewriteRule ^(.well-known)($|/) - [L] # https://coderwall.com/p/erbaig/laravel-s-htaccess-to-remove-public-from-url # RewriteRule ^(.*)$ public/$1 [L] @@ -143,4 +144,4 @@ AddDefaultCharset utf-8 "text/xml" - \ No newline at end of file + diff --git a/.travis.yml b/.travis.yml index e3f9e86f24ba..c88c9560a851 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,13 +6,9 @@ sudo: true group: deprecated-2017Q4 php: -# - 5.5.9 -# - 5.6 -# - 5.6 # - 7.0 - 7.1 -# - 7.2 -# - hhvm + - 7.2 addons: hosts: @@ -114,15 +110,17 @@ after_script: - mysql -u root -e 'select * from account_gateways;' ninja - mysql -u root -e 'select * from clients;' ninja - mysql -u root -e 'select * from contacts;' ninja - - mysql -u root -e 'select * from invoices;' ninja + - mysql -u root -e 'select id, account_id, invoice_number, amount, balance from invoices;' ninja - mysql -u root -e 'select * from invoice_items;' ninja - mysql -u root -e 'select * from invitations;' ninja - - mysql -u root -e 'select * from payments;' ninja + - mysql -u root -e 'select id, account_id, invoice_id, amount, transaction_reference from payments;' ninja - mysql -u root -e 'select * from credits;' ninja - mysql -u root -e 'select * from expenses;' ninja - mysql -u root -e 'select * from accounts;' ninja - mysql -u root -e 'select * from fonts;' ninja - mysql -u root -e 'select * from banks;' ninja + - mysql -u root -e 'select * from account_gateway_tokens;' ninja + - mysql -u root -e 'select * from payment_methods;' ninja - FILES=$(find tests/_output -type f -name '*.png' | sort -nr) - for i in $FILES; do echo $i; base64 "$i"; break; done @@ -131,3 +129,5 @@ notifications: email: on_success: never on_failure: change + slack: + invoiceninja: SLraaKBDvjeRuRtY9o3Yvp1b diff --git a/README.md b/README.md index f23a38bfefee..a313f407dcaa 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,6 @@ [![Build Status](https://travis-ci.org/invoiceninja/invoiceninja.svg?branch=master)](https://travis-ci.org/invoiceninja/invoiceninja) [![Docs](https://readthedocs.org/projects/invoice-ninja/badge/?version=latest)](http://docs.invoiceninja.com/en/latest/?badge=latest) -[![Join the chat at https://gitter.im/hillelcoren/invoice-ninja](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/hillelcoren/invoice-ninja?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) ## [Hosted](https://www.invoiceninja.com) | [Self-Hosted](https://www.invoiceninja.org) | [iPhone](https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=1220337560&mt=8) | [Android](https://play.google.com/store/apps/details?id=com.invoiceninja.invoiceninja) diff --git a/app/Console/Commands/SendRecurringInvoices.php b/app/Console/Commands/SendRecurringInvoices.php index 533f14d3c0ae..fbb4347d7d51 100644 --- a/app/Console/Commands/SendRecurringInvoices.php +++ b/app/Console/Commands/SendRecurringInvoices.php @@ -5,10 +5,10 @@ namespace App\Console\Commands; use App\Models\Account; use App\Models\Invoice; use App\Models\RecurringExpense; -use App\Ninja\Mailers\ContactMailer as Mailer; use App\Ninja\Repositories\InvoiceRepository; use App\Ninja\Repositories\RecurringExpenseRepository; use App\Services\PaymentService; +use App\Jobs\SendInvoiceEmail; use DateTime; use Illuminate\Console\Command; use Symfony\Component\Console\Input\InputOption; @@ -31,11 +31,6 @@ class SendRecurringInvoices extends Command */ protected $description = 'Send recurring invoices'; - /** - * @var Mailer - */ - protected $mailer; - /** * @var InvoiceRepository */ @@ -49,15 +44,13 @@ class SendRecurringInvoices extends Command /** * SendRecurringInvoices constructor. * - * @param Mailer $mailer * @param InvoiceRepository $invoiceRepo * @param PaymentService $paymentService */ - public function __construct(Mailer $mailer, InvoiceRepository $invoiceRepo, PaymentService $paymentService, RecurringExpenseRepository $recurringExpenseRepo) + public function __construct(InvoiceRepository $invoiceRepo, PaymentService $paymentService, RecurringExpenseRepository $recurringExpenseRepo) { parent::__construct(); - $this->mailer = $mailer; $this->invoiceRepo = $invoiceRepo; $this->paymentService = $paymentService; $this->recurringExpenseRepo = $recurringExpenseRepo; @@ -115,9 +108,9 @@ class SendRecurringInvoices extends Command try { $invoice = $this->invoiceRepo->createRecurringInvoice($recurInvoice); - if ($invoice && ! $invoice->isPaid()) { + if ($invoice && ! $invoice->isPaid() && $account->auto_email_invoice) { $this->info('Not billed - Sending Invoice'); - $this->mailer->sendInvoice($invoice); + dispatch(new SendInvoiceEmail($invoice, $invoice->user_id)); } elseif ($invoice) { $this->info('Successfully billed invoice'); } diff --git a/app/Console/Commands/SendReminders.php b/app/Console/Commands/SendReminders.php index 3ee5032ed240..6ff6b87f176a 100644 --- a/app/Console/Commands/SendReminders.php +++ b/app/Console/Commands/SendReminders.php @@ -6,9 +6,10 @@ use App\Libraries\CurlUtils; use Carbon; use Str; use Cache; +use Exception; +use App\Jobs\SendInvoiceEmail; use App\Models\Invoice; use App\Models\Currency; -use App\Ninja\Mailers\ContactMailer as Mailer; use App\Ninja\Mailers\UserMailer; use App\Ninja\Repositories\AccountRepository; use App\Ninja\Repositories\InvoiceRepository; @@ -33,11 +34,6 @@ class SendReminders extends Command */ protected $description = 'Send reminder emails'; - /** - * @var Mailer - */ - protected $mailer; - /** * @var InvoiceRepository */ @@ -55,11 +51,10 @@ class SendReminders extends Command * @param InvoiceRepository $invoiceRepo * @param accountRepository $accountRepo */ - public function __construct(Mailer $mailer, InvoiceRepository $invoiceRepo, AccountRepository $accountRepo, UserMailer $userMailer) + public function __construct(InvoiceRepository $invoiceRepo, AccountRepository $accountRepo, UserMailer $userMailer) { parent::__construct(); - $this->mailer = $mailer; $this->invoiceRepo = $invoiceRepo; $this->accountRepo = $accountRepo; $this->userMailer = $userMailer; @@ -136,7 +131,7 @@ class SendReminders extends Command continue; } $this->info('Send email: ' . $invoice->id); - $this->mailer->sendInvoice($invoice, $reminder); + dispatch(new SendInvoiceEmail($invoice, $invoice->user_id, $reminder)); } } @@ -149,7 +144,7 @@ class SendReminders extends Command continue; } $this->info('Send email: ' . $invoice->id); - $this->mailer->sendInvoice($invoice, 'reminder4'); + dispatch(new SendInvoiceEmail($invoice, $invoice->user_id, 'reminder4')); } } } @@ -162,6 +157,8 @@ class SendReminders extends Command $this->info($scheduledReports->count() . ' scheduled reports'); foreach ($scheduledReports as $scheduledReport) { + $this->info('Processing report: ' . $scheduledReport->id); + $user = $scheduledReport->user; $account = $scheduledReport->account; @@ -179,7 +176,14 @@ class SendReminders extends Command $file = dispatch(new ExportReportResults($scheduledReport->user, $config['export_format'], $reportType, $report->exportParams)); if ($file) { - $this->userMailer->sendScheduledReport($scheduledReport, $file); + try { + $this->userMailer->sendScheduledReport($scheduledReport, $file); + $this->info('Sent report'); + } catch (Exception $exception) { + $this->info('ERROR: ' . $exception->getMessage()); + } + } else { + $this->info('ERROR: Failed to run report'); } $scheduledReport->updateSendDate(); diff --git a/app/Console/Commands/stubs/routes.stub b/app/Console/Commands/stubs/routes.stub index 6de6769750b8..1c5cf394ba8e 100755 --- a/app/Console/Commands/stubs/routes.stub +++ b/app/Console/Commands/stubs/routes.stub @@ -1,6 +1,6 @@ 'auth', 'namespace' => '$MODULE_NAMESPACE$\$STUDLY_NAME$\Http\Controllers'], function() +Route::group(['middleware' => ['web', 'lookup:user', 'auth:user'], 'namespace' => '$MODULE_NAMESPACE$\$STUDLY_NAME$\Http\Controllers'], function() { Route::resource('$LOWER_NAME$', '$STUDLY_NAME$Controller'); Route::post('$LOWER_NAME$/bulk', '$STUDLY_NAME$Controller@bulk'); diff --git a/app/Constants.php b/app/Constants.php index ffce38d041ff..db0f03820851 100644 --- a/app/Constants.php +++ b/app/Constants.php @@ -301,6 +301,7 @@ if (! defined('APP_NAME')) { define('GATEWAY_BRAINTREE', 61); define('GATEWAY_CUSTOM', 62); define('GATEWAY_GOCARDLESS', 64); + define('GATEWAY_PAYMILL', 66); // The customer exists, but only as a local concept // The remote gateway doesn't understand the concept of customers @@ -338,7 +339,8 @@ if (! defined('APP_NAME')) { define('NINJA_APP_URL', env('NINJA_APP_URL', 'https://app.invoiceninja.com')); define('NINJA_DOCS_URL', env('NINJA_DOCS_URL', 'http://docs.invoiceninja.com/en/latest')); define('NINJA_DATE', '2000-01-01'); - define('NINJA_VERSION', '4.2.2' . env('NINJA_VERSION_SUFFIX')); + define('NINJA_VERSION', '4.3.0' . env('NINJA_VERSION_SUFFIX')); + define('NINJA_TERMS_VERSION', ''); define('SOCIAL_LINK_FACEBOOK', env('SOCIAL_LINK_FACEBOOK', 'https://www.facebook.com/invoiceninja')); define('SOCIAL_LINK_TWITTER', env('SOCIAL_LINK_TWITTER', 'https://twitter.com/invoiceninja')); diff --git a/app/Events/ProjectWasDeleted.php b/app/Events/ProjectWasDeleted.php new file mode 100644 index 000000000000..2368fc910670 --- /dev/null +++ b/app/Events/ProjectWasDeleted.php @@ -0,0 +1,29 @@ +project = $project; + } +} diff --git a/app/Events/ProposalWasDeleted.php b/app/Events/ProposalWasDeleted.php new file mode 100644 index 000000000000..009b5127cda6 --- /dev/null +++ b/app/Events/ProposalWasDeleted.php @@ -0,0 +1,29 @@ +proposal = $proposal; + } +} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index bdaf103dd36e..ae3a47152aea 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -68,7 +68,11 @@ class Handler extends ExceptionHandler } // Log 404s to a separate file $errorStr = date('Y-m-d h:i:s') . ' ' . $e->getMessage() . ' URL:' . request()->url() . "\n" . json_encode(Utils::prepareErrorData('PHP')) . "\n\n"; - @file_put_contents(storage_path('logs/not-found.log'), $errorStr, FILE_APPEND); + if (config('app.log') == 'single') { + @file_put_contents(storage_path('logs/not-found.log'), $errorStr, FILE_APPEND); + } else { + Utils::logError('[not found] ' . $errorStr); + } return false; } elseif ($e instanceof HttpResponseException) { return false; @@ -77,7 +81,11 @@ class Handler extends ExceptionHandler if (! Utils::isTravis()) { Utils::logError(Utils::getErrorString($e)); $stacktrace = date('Y-m-d h:i:s') . ' ' . $e->getMessage() . ': ' . $e->getTraceAsString() . "\n\n"; - @file_put_contents(storage_path('logs/stacktrace.log'), $stacktrace, FILE_APPEND); + if (config('app.log') == 'single') { + @file_put_contents(storage_path('logs/stacktrace.log'), $stacktrace, FILE_APPEND); + } else { + Utils::logError('[stacktrace] ' . $stacktrace); + } return false; } else { return parent::report($e); diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index 4bc38294b108..553df8dae94d 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -46,6 +46,7 @@ use Utils; use Validator; use View; +use App\Jobs\PurgeClientData; /** * Class AccountController. @@ -139,7 +140,12 @@ class AccountController extends BaseController Session::flash('warning', $message); } - $redirectTo = Input::get('redirect_to') ? SITE_URL . '/' . ltrim(Input::get('redirect_to'), '/') : 'dashboard'; + if ($redirectTo = Input::get('redirect_to')) { + $redirectTo = SITE_URL . '/' . ltrim($redirectTo, '/'); + } else { + $redirectTo = Input::get('sign_up') ? 'dashboard' : 'invoices/create'; + } + return Redirect::to($redirectTo)->with('sign_up', Input::get('sign_up')); } @@ -389,7 +395,9 @@ class AccountController extends BaseController $planDetails = $account->getPlanDetails(true, false); $portalLink = false; - if (Utils::isNinja() && $planDetails && $ninjaClient = $this->accountRepo->getNinjaClient($account)) { + if (Utils::isNinja() && $planDetails + && $account->getPrimaryAccount()->id == auth()->user()->account_id + && $ninjaClient = $this->accountRepo->getNinjaClient($account)) { $contact = $ninjaClient->getPrimaryContact(); $portalLink = $contact->link; } @@ -473,7 +481,7 @@ class AccountController extends BaseController $trashedCount = AccountGateway::scope()->withTrashed()->count(); if ($accountGateway = $account->getGatewayConfig(GATEWAY_STRIPE)) { - if (! $accountGateway->getPublishableStripeKey()) { + if (! $accountGateway->getPublishableKey()) { Session::now('warning', trans('texts.missing_publishable_key')); } } @@ -976,6 +984,9 @@ class AccountController extends BaseController $account->invoice_footer = Input::get('invoice_footer'); $account->quote_terms = Input::get('quote_terms'); $account->auto_convert_quote = Input::get('auto_convert_quote'); + $account->auto_archive_quote = Input::get('auto_archive_quote'); + $account->auto_archive_invoice = Input::get('auto_archive_invoice'); + $account->auto_email_invoice = Input::get('auto_email_invoice'); $account->recurring_invoice_number_prefix = Input::get('recurring_invoice_number_prefix'); $account->client_number_prefix = trim(Input::get('client_number_prefix')); @@ -1067,6 +1078,7 @@ class AccountController extends BaseController $user->notify_viewed = Input::get('notify_viewed'); $user->notify_paid = Input::get('notify_paid'); $user->notify_approved = Input::get('notify_approved'); + $user->slack_webhook_url = Input::get('slack_webhook_url'); $user->save(); $account = $user->account; @@ -1265,6 +1277,7 @@ class AccountController extends BaseController $account->token_billing_type_id = Input::get('token_billing_type_id'); $account->auto_bill_on_due_date = boolval(Input::get('auto_bill_on_due_date')); $account->gateway_fee_enabled = boolval(Input::get('gateway_fee_enabled')); + $account->send_item_details = boolval(Input::get('send_item_details')); $account->save(); @@ -1326,6 +1339,7 @@ class AccountController extends BaseController public function submitSignup() { $user = Auth::user(); + $ip = Request::getClientIp(); $account = $user->account; $rules = [ @@ -1357,6 +1371,7 @@ class AccountController extends BaseController if ($user->registered) { $newAccount = $this->accountRepo->create($firstName, $lastName, $email, $password, $account->company); $newUser = $newAccount->users()->first(); + $newUser->acceptLatestTerms($ip)->save(); $users = $this->accountRepo->associateAccounts($user->id, $newUser->id); Session::flash('message', trans('texts.created_new_company')); @@ -1371,12 +1386,13 @@ class AccountController extends BaseController $user->username = $user->email; $user->password = bcrypt($password); $user->registered = true; + $user->acceptLatestTerms($ip); $user->save(); $user->account->startTrial(PLAN_PRO); if (Input::get('go_pro') == 'true') { - Session::set(REQUESTED_PRO_PLAN, true); + session([REQUESTED_PRO_PLAN => true]); } return "{$user->first_name} {$user->last_name}"; @@ -1452,7 +1468,7 @@ class AccountController extends BaseController $refunded = $company->processRefund(Auth::user()); $ninjaClient = $this->accountRepo->getNinjaClient($account); - $ninjaClient->delete(); + dispatch(new \App\Jobs\PurgeClientData($ninjaClient)); } Document::scope()->each(function ($item, $key) { diff --git a/app/Http/Controllers/AccountGatewayController.php b/app/Http/Controllers/AccountGatewayController.php index 5a112b9baae7..8c022828120a 100644 --- a/app/Http/Controllers/AccountGatewayController.php +++ b/app/Http/Controllers/AccountGatewayController.php @@ -183,6 +183,8 @@ class AccountGatewayController extends BaseController if ($gatewayId == GATEWAY_DWOLLA) { $optional = array_merge($optional, ['key', 'secret']); + } elseif ($gatewayId == GATEWAY_PAYMILL) { + $rules['publishable_key'] = 'required'; } elseif ($gatewayId == GATEWAY_STRIPE) { if (Utils::isNinjaDev()) { // do nothing - we're unable to acceptance test with StripeJS diff --git a/app/Http/Controllers/AppController.php b/app/Http/Controllers/AppController.php index cb0b6ed3dcd3..a04f449c0f32 100644 --- a/app/Http/Controllers/AppController.php +++ b/app/Http/Controllers/AppController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers; use App\Events\UserSettingsChanged; use App\Models\Account; use App\Models\Industry; +use App\Models\Invoice; use App\Ninja\Mailers\Mailer; use App\Ninja\Repositories\AccountRepository; use App\Services\EmailService; @@ -425,4 +426,42 @@ class AppController extends BaseController return json_encode($data); } + + public function testHeadless() + { + $invoice = Invoice::scope()->orderBy('id')->first(); + + if (! $invoice) { + dd('Please create an invoice to run this test'); + } + + header('Content-type:application/pdf'); + echo $invoice->getPDFString(); + exit; + } + + public function runCommand() + { + if (Utils::isNinjaProd()) { + abort(400, 'Not allowed'); + } + + $command = request()->command; + $options = request()->options ?: []; + $secret = env('COMMAND_SECRET'); + + if (! $secret) { + exit('Set a value for COMMAND_SECRET in the .env file'); + } elseif (! hash_equals($secret, request()->secret ?: '')) { + exit('Invalid secret'); + } + + if (! $command || ! in_array($command, ['send-invoices', 'send-reminders', 'update-key'])) { + exit('Invalid command: Valid options are send-invoices, send-reminders or update-key'); + } + + Artisan::call('ninja:' . $command, $options); + + return response(nl2br(Artisan::output())); + } } diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 811d734eb504..e8835f95cbce 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -105,8 +105,11 @@ class LoginController extends Controller */ } else { $stacktrace = sprintf("%s %s %s %s\n", date('Y-m-d h:i:s'), $request->input('email'), \Request::getClientIp(), array_get($_SERVER, 'HTTP_USER_AGENT')); - file_put_contents(storage_path('logs/failed-logins.log'), $stacktrace, FILE_APPEND); - error_log('login failed'); + if (config('app.log') == 'single') { + file_put_contents(storage_path('logs/failed-logins.log'), $stacktrace, FILE_APPEND); + } else { + Utils::logError('[failed login] ' . $stacktrace); + } if ($user) { $user->failed_logins = $user->failed_logins + 1; $user->save(); diff --git a/app/Http/Controllers/BaseController.php b/app/Http/Controllers/BaseController.php index ab3ed1891645..535062515c77 100644 --- a/app/Http/Controllers/BaseController.php +++ b/app/Http/Controllers/BaseController.php @@ -50,4 +50,21 @@ class BaseController extends Controller return redirect("{$entityTypes}"); } } + + protected function downloadResponse($filename, $contents, $type = 'application/pdf') + { + header('Content-Type: ' . $type); + header('Content-Length: ' . strlen($contents)); + + if (! request()->debug) { + header('Content-disposition: attachment; filename="' . $filename . '"'); + } + + header('Cache-Control: public, must-revalidate, max-age=0'); + header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); + + echo $contents; + + exit; + } } diff --git a/app/Http/Controllers/ClientController.php b/app/Http/Controllers/ClientController.php index e590bae9eba7..bdf7bcc7cb39 100644 --- a/app/Http/Controllers/ClientController.php +++ b/app/Http/Controllers/ClientController.php @@ -5,10 +5,13 @@ namespace App\Http\Controllers; use App\Http\Requests\ClientRequest; use App\Http\Requests\CreateClientRequest; use App\Http\Requests\UpdateClientRequest; +use App\Jobs\LoadPostmarkHistory; +use App\Jobs\ReactivatePostmarkEmail; use App\Models\Account; use App\Models\Client; use App\Models\Credit; use App\Models\Invoice; +use App\Models\Expense; use App\Models\Task; use App\Ninja\Datatables\ClientDatatable; use App\Ninja\Repositories\ClientRepository; @@ -84,6 +87,7 @@ class ClientController extends BaseController { $client = $request->entity(); $user = Auth::user(); + $account = $user->account; $actionLinks = []; if ($user->can('create', ENTITY_INVOICE)) { @@ -118,14 +122,16 @@ class ClientController extends BaseController $token = $client->getGatewayToken(); $data = [ + 'account' => $account, 'actionLinks' => $actionLinks, 'showBreadcrumbs' => false, 'client' => $client, 'credit' => $client->getTotalCredit(), 'title' => trans('texts.view_client'), - 'hasRecurringInvoices' => Invoice::scope()->recurring()->withArchived()->whereClientId($client->id)->count() > 0, - 'hasQuotes' => Invoice::scope()->quotes()->withArchived()->whereClientId($client->id)->count() > 0, - 'hasTasks' => Task::scope()->withArchived()->whereClientId($client->id)->count() > 0, + 'hasRecurringInvoices' => $account->isModuleEnabled(ENTITY_RECURRING_INVOICE) && Invoice::scope()->recurring()->withArchived()->whereClientId($client->id)->count() > 0, + 'hasQuotes' => $account->isModuleEnabled(ENTITY_QUOTE) && Invoice::scope()->quotes()->withArchived()->whereClientId($client->id)->count() > 0, + 'hasTasks' => $account->isModuleEnabled(ENTITY_TASK) && Task::scope()->withArchived()->whereClientId($client->id)->count() > 0, + 'hasExpenses' => $account->isModuleEnabled(ENTITY_EXPENSE) && Expense::scope()->withArchived()->whereClientId($client->id)->count() > 0, 'gatewayLink' => $token ? $token->gatewayLink() : false, 'gatewayName' => $token ? $token->gatewayName() : false, ]; @@ -216,12 +222,21 @@ class ClientController extends BaseController { $action = Input::get('action'); $ids = Input::get('public_id') ? Input::get('public_id') : Input::get('ids'); + + if ($action == 'purge' && ! auth()->user()->is_admin) { + return redirect('dashboard')->withError(trans('texts.not_authorized')); + } + $count = $this->clientService->bulk($ids, $action); $message = Utils::pluralize($action.'d_client', $count); Session::flash('message', $message); - return $this->returnBulk(ENTITY_CLIENT, $action, $ids); + if ($action == 'purge') { + return redirect('dashboard')->withMessage($message); + } else { + return $this->returnBulk(ENTITY_CLIENT, $action, $ids); + } } public function statement($clientPublicId, $statusId = false, $startDate = false, $endDate = false) @@ -273,4 +288,18 @@ class ClientController extends BaseController return view('clients.statement', $data); } + + public function getEmailHistory() + { + $history = dispatch(new LoadPostmarkHistory(request()->email)); + + return response()->json($history); + } + + public function reactivateEmail() + { + $result = dispatch(new ReactivatePostmarkEmail(request()->bounce_id)); + + return response()->json($result); + } } diff --git a/app/Http/Controllers/ClientPortalController.php b/app/Http/Controllers/ClientPortalController.php index a47e1a62f814..7c565e88bb54 100644 --- a/app/Http/Controllers/ClientPortalController.php +++ b/app/Http/Controllers/ClientPortalController.php @@ -113,6 +113,7 @@ class ClientPortalController extends BaseController 'custom_value1', 'custom_value2', ]); + $account->load(['date_format', 'datetime_format']); // translate the country names if ($invoice->client->country) { @@ -987,7 +988,7 @@ class ClientPortalController extends BaseController 'email' => 'required', 'address1' => 'required', 'city' => 'required', - 'state' => 'required', + 'state' => $account->requiresAddressState() ? 'required' : '', 'postal_code' => 'required', 'country_id' => 'required', ]; diff --git a/app/Http/Controllers/ClientPortalProposalController.php b/app/Http/Controllers/ClientPortalProposalController.php index 1dd19ab9fc87..340b9f1a703e 100644 --- a/app/Http/Controllers/ClientPortalProposalController.php +++ b/app/Http/Controllers/ClientPortalProposalController.php @@ -2,11 +2,11 @@ namespace App\Http\Controllers; -use mPDF; use App\Models\Account; use App\Models\Document; use App\Models\Invitation; use App\Ninja\Repositories\ProposalRepository; +use App\Jobs\ConvertProposalToPdf; class ClientPortalProposalController extends BaseController { @@ -39,7 +39,11 @@ class ClientPortalProposalController extends BaseController 'proposalInvitation' => $invitation, ]; - return view('invited.proposal', $data); + if (request()->phantomjs) { + return $proposal->present()->htmlDocument; + } else { + return view('invited.proposal', $data); + } } public function downloadProposal($invitationKey) @@ -50,9 +54,9 @@ class ClientPortalProposalController extends BaseController $proposal = $invitation->proposal; - $mpdf = new mPDF(); - $mpdf->WriteHTML($proposal->present()->htmlDocument); - $mpdf->Output($proposal->present()->filename, 'D'); + $pdf = dispatch(new ConvertProposalToPdf($proposal)); + + $this->downloadResponse($proposal->getFilename(), $pdf); } public function getProposalImage($accountKey, $documentKey) diff --git a/app/Http/Controllers/ExpenseController.php b/app/Http/Controllers/ExpenseController.php index 3f708d8d4845..b02d6d978638 100644 --- a/app/Http/Controllers/ExpenseController.php +++ b/app/Http/Controllers/ExpenseController.php @@ -18,6 +18,7 @@ use Auth; use Cache; use Input; use Redirect; +use Request; use Session; use URL; use Utils; @@ -82,9 +83,7 @@ class ExpenseController extends BaseController 'method' => 'POST', 'url' => 'expenses', 'title' => trans('texts.new_expense'), - 'vendors' => Vendor::scope()->with('vendor_contacts')->orderBy('name')->get(), 'vendor' => $vendor, - 'clients' => Client::scope()->with('contacts')->orderBy('name')->get(), 'clientPublicId' => $request->client_id, 'categoryPublicId' => $request->category_id, ]; @@ -160,14 +159,12 @@ class ExpenseController extends BaseController 'url' => $url, 'title' => 'Edit Expense', 'actions' => $actions, - 'vendors' => Vendor::scope()->with('vendor_contacts')->orderBy('name')->get(), 'vendorPublicId' => $expense->vendor ? $expense->vendor->public_id : null, - 'clients' => Client::scope()->with('contacts')->orderBy('name')->get(), 'clientPublicId' => $expense->client ? $expense->client->public_id : null, 'categoryPublicId' => $expense->expense_category ? $expense->expense_category->public_id : null, ]; - $data = array_merge($data, self::getViewModel()); + $data = array_merge($data, self::getViewModel($expense)); return View::make('expenses.edit', $data); } @@ -227,6 +224,7 @@ class ExpenseController extends BaseController { $action = Input::get('action'); $ids = Input::get('public_id') ? Input::get('public_id') : Input::get('ids'); + $referer = Request::server('HTTP_REFERER'); switch ($action) { case 'invoice': @@ -238,27 +236,25 @@ class ExpenseController extends BaseController // Validate that either all expenses do not have a client or if there is a client, it is the same client foreach ($expenses as $expense) { if ($expense->client) { + if ($expense->client->trashed()) { + return redirect($referer)->withError(trans('texts.client_must_be_active')); + } + if (! $clientPublicId) { $clientPublicId = $expense->client->public_id; } elseif ($clientPublicId != $expense->client->public_id) { - Session::flash('error', trans('texts.expense_error_multiple_clients')); - - return Redirect::to('expenses'); + return redirect($referer)->withError(trans('texts.expense_error_multiple_clients')); } } if (! $currencyId) { $currencyId = $expense->invoice_currency_id; } elseif ($currencyId != $expense->invoice_currency_id && $expense->invoice_currency_id) { - Session::flash('error', trans('texts.expense_error_multiple_currencies')); - - return Redirect::to('expenses'); + return redirect($referer)->withError(trans('texts.expense_error_multiple_currencies')); } if ($expense->invoice_id) { - Session::flash('error', trans('texts.expense_error_invoiced')); - - return Redirect::to('expenses'); + return redirect($referer)->withError(trans('texts.expense_error_invoiced')); } } @@ -287,12 +283,14 @@ class ExpenseController extends BaseController return $this->returnBulk($this->entityType, $action, $ids); } - private static function getViewModel() + private static function getViewModel($expense = false) { return [ 'data' => Input::old('data'), 'account' => Auth::user()->account, - 'categories' => ExpenseCategory::whereAccountId(Auth::user()->account_id)->withArchived()->orderBy('name')->get(), + 'vendors' => Vendor::scope()->withActiveOrSelected($expense ? $expense->vendor_id : false)->with('vendor_contacts')->orderBy('name')->get(), + 'clients' => Client::scope()->withActiveOrSelected($expense ? $expense->client_id : false)->with('contacts')->orderBy('name')->get(), + 'categories' => ExpenseCategory::whereAccountId(Auth::user()->account_id)->withActiveOrSelected($expense ? $expense->expense_category_id : false)->orderBy('name')->get(), 'taxRates' => TaxRate::scope()->whereIsInclusive(false)->orderBy('name')->get(), 'isRecurring' => false, ]; diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index e29c173c92b2..6838ca154275 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -67,7 +67,7 @@ class HomeController extends BaseController { // Track the referral/campaign code if (Input::has('rc')) { - Session::set(SESSION_REFERRAL_CODE, Input::get('rc')); + session([SESSION_REFERRAL_CODE => Input::get('rc')]); } if (Auth::check()) { diff --git a/app/Http/Controllers/InvoiceController.php b/app/Http/Controllers/InvoiceController.php index c084851d8b70..cfde36f324f7 100644 --- a/app/Http/Controllers/InvoiceController.php +++ b/app/Http/Controllers/InvoiceController.php @@ -327,7 +327,7 @@ class InvoiceController extends BaseController 'invoiceLabels' => Auth::user()->account->getInvoiceLabels(), 'tasks' => Session::get('tasks') ? Session::get('tasks') : null, 'expenseCurrencyId' => Session::get('expenseCurrencyId') ?: null, - 'expenses' => Session::get('expenses') ? Expense::scope(Session::get('expenses'))->with('documents', 'expense_category')->get() : [], + 'expenses' => Expense::scope(Session::get('expenses'))->with('documents', 'expense_category')->get(), ]; } diff --git a/app/Http/Controllers/NinjaController.php b/app/Http/Controllers/NinjaController.php index c74f705f3e1e..c90b45b26c52 100644 --- a/app/Http/Controllers/NinjaController.php +++ b/app/Http/Controllers/NinjaController.php @@ -92,19 +92,19 @@ class NinjaController extends BaseController public function show_license_payment() { if (Input::has('return_url')) { - Session::set('return_url', Input::get('return_url')); + session(['return_url' => Input::get('return_url')]); } if (Input::has('affiliate_key')) { if ($affiliate = Affiliate::where('affiliate_key', '=', Input::get('affiliate_key'))->first()) { - Session::set('affiliate_id', $affiliate->id); + session(['affiliate_id' => $affiliate->id]); } } if (Input::has('product_id')) { - Session::set('product_id', Input::get('product_id')); + session(['product_id' => Input::get('product_id')]); } elseif (! Session::has('product_id')) { - Session::set('product_id', PRODUCT_ONE_CLICK_INSTALL); + session(['product_id' => PRODUCT_ONE_CLICK_INSTALL]); } if (! Session::get('affiliate_id')) { @@ -112,7 +112,7 @@ class NinjaController extends BaseController } if (Utils::isNinjaDev() && Input::has('test_mode')) { - Session::set('test_mode', Input::get('test_mode')); + session(['test_mode' => Input::get('test_mode')]); } $account = $this->accountRepo->getNinjaAccount(); diff --git a/app/Http/Controllers/OnlinePaymentController.php b/app/Http/Controllers/OnlinePaymentController.php index 828af5864b4b..66b91b8b5c7a 100644 --- a/app/Http/Controllers/OnlinePaymentController.php +++ b/app/Http/Controllers/OnlinePaymentController.php @@ -75,14 +75,14 @@ class OnlinePaymentController extends BaseController ]); } - if (! $invitation->invoice->canBePaid() && ! request()->update) { + if (! request()->capture && ! $invitation->invoice->canBePaid()) { return redirect()->to('view/' . $invitation->invitation_key); } $invitation = $invitation->load('invoice.client.account.account_gateways.gateway'); $account = $invitation->account; - if ($account->requiresAuthorization($invitation->invoice) && ! session('authorized:' . $invitation->invitation_key) && ! request()->update) { + if (! request()->capture && $account->requiresAuthorization($invitation->invoice) && ! session('authorized:' . $invitation->invitation_key)) { return redirect()->to('view/' . $invitation->invitation_key); } @@ -126,14 +126,14 @@ class OnlinePaymentController extends BaseController $paymentDriver = $invitation->account->paymentDriver($invitation, $gatewayTypeId); - if (! $invitation->invoice->canBePaid() && ! request()->update) { + if (! $invitation->invoice->canBePaid() && ! request()->capture) { return redirect()->to('view/' . $invitation->invitation_key); } try { $paymentDriver->completeOnsitePurchase($request->all()); - if (request()->update) { + if (request()->capture) { return redirect('/client/dashboard')->withMessage(trans('texts.updated_payment_details')); } elseif ($paymentDriver->isTwoStep()) { Session::flash('warning', trans('texts.bank_account_verification_next_steps')); diff --git a/app/Http/Controllers/PaymentTermApiController.php b/app/Http/Controllers/PaymentTermApiController.php index ef11a64e19f5..86d2ea2bb68a 100644 --- a/app/Http/Controllers/PaymentTermApiController.php +++ b/app/Http/Controllers/PaymentTermApiController.php @@ -2,7 +2,7 @@ namespace App\Http\Controllers; -use App\Http\Requests\CreatePaymentTermAPIRequest; +use App\Http\Requests\CreatePaymentTermRequest; use App\Http\Requests\PaymentTermRequest; use App\Http\Requests\UpdatePaymentTermRequest; use App\Libraries\Utils; @@ -39,7 +39,7 @@ class PaymentTermApiController extends BaseAPIController * @SWG\Response( * response=200, * description="A list of payment terms", - * @SWG\Schema(type="array", @SWG\Items(ref="#/definitions/PaymentTerms")) + * @SWG\Schema(type="array", @SWG\Items(ref="#/definitions/PaymentTerm")) * ), * @SWG\Response( * response="default", @@ -73,7 +73,7 @@ class PaymentTermApiController extends BaseAPIController * @SWG\Response( * response=200, * description="A single payment term", - * @SWG\Schema(type="object", @SWG\Items(ref="#/definitions/PaymentTerms")) + * @SWG\Schema(type="object", @SWG\Items(ref="#/definitions/PaymentTerm")) * ), * @SWG\Response( * response="default", @@ -110,7 +110,7 @@ class PaymentTermApiController extends BaseAPIController * ) * ) */ - public function store(CreatePaymentTermAPIRequest $request) + public function store(CreatePaymentTermRequest $request) { $paymentTerm = PaymentTerm::createNew(); diff --git a/app/Http/Controllers/PaymentTermController.php b/app/Http/Controllers/PaymentTermController.php index e92e53035675..13a67f15ead8 100644 --- a/app/Http/Controllers/PaymentTermController.php +++ b/app/Http/Controllers/PaymentTermController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers; +use App\Http\Requests\CreatePaymentTermRequest; +use App\Http\Requests\UpdatePaymentTermRequest; use App\Models\PaymentTerm; use App\Services\PaymentTermService; use Auth; @@ -84,7 +86,7 @@ class PaymentTermController extends BaseController /** * @return \Illuminate\Http\RedirectResponse */ - public function store() + public function store(CreatePaymentTermRequest $request) { return $this->save(); } @@ -94,7 +96,7 @@ class PaymentTermController extends BaseController * * @return \Illuminate\Http\RedirectResponse */ - public function update($publicId) + public function update(UpdatePaymentTermRequest $request, $publicId) { return $this->save($publicId); } diff --git a/app/Http/Controllers/ProductController.php b/app/Http/Controllers/ProductController.php index 276a3516e8e0..b877ed961202 100644 --- a/app/Http/Controllers/ProductController.php +++ b/app/Http/Controllers/ProductController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Http\Requests\ProductRequest; use App\Models\Product; use App\Models\TaxRate; use App\Ninja\Datatables\ProductDatatable; @@ -71,23 +72,39 @@ class ProductController extends BaseController return $this->productService->getDatatable(Auth::user()->account_id, Input::get('sSearch')); } + public function cloneProduct(ProductRequest $request, $publicId) + { + return self::edit($request, $publicId, true); + } + /** * @param $publicId * * @return \Illuminate\Contracts\View\View */ - public function edit($publicId) + public function edit(ProductRequest $request, $publicId, $clone = false) { $account = Auth::user()->account; $product = Product::scope($publicId)->withTrashed()->firstOrFail(); + if ($clone) { + $product->id = null; + $product->public_id = null; + $product->deleted_at = null; + $url = 'products'; + $method = 'POST'; + } else { + $url = 'products/'.$publicId; + $method = 'PUT'; + } + $data = [ 'account' => $account, 'taxRates' => $account->invoice_item_taxes ? TaxRate::scope()->whereIsInclusive(false)->get() : null, 'product' => $product, 'entity' => $product, - 'method' => 'PUT', - 'url' => 'products/'.$publicId, + 'method' => $method, + 'url' => $url, 'title' => trans('texts.edit_product'), ]; @@ -149,11 +166,16 @@ class ProductController extends BaseController $message = $productPublicId ? trans('texts.updated_product') : trans('texts.created_product'); Session::flash('message', $message); - if (in_array(request('action'), ['archive', 'delete', 'restore', 'invoice'])) { + $action = request('action'); + if (in_array($action, ['archive', 'delete', 'restore', 'invoice'])) { return self::bulk(); } - return Redirect::to("products/{$product->public_id}/edit"); + if ($action == 'clone') { + return redirect()->to(sprintf('products/%s/clone', $product->public_id)); + } else { + return redirect()->to("products/{$product->public_id}/edit"); + } } /** diff --git a/app/Http/Controllers/ProposalController.php b/app/Http/Controllers/ProposalController.php index 9b5fa1a841c4..a3f2a3f59b1e 100644 --- a/app/Http/Controllers/ProposalController.php +++ b/app/Http/Controllers/ProposalController.php @@ -6,6 +6,7 @@ use App\Http\Requests\CreateProposalRequest; use App\Http\Requests\ProposalRequest; use App\Http\Requests\UpdateProposalRequest; use App\Jobs\SendInvoiceEmail; +use App\Jobs\ConvertProposalToPdf; use App\Models\Invoice; use App\Models\Proposal; use App\Models\ProposalTemplate; @@ -17,7 +18,6 @@ use Auth; use Input; use Session; use View; -use mPDF; class ProposalController extends BaseController { @@ -82,13 +82,13 @@ class ProposalController extends BaseController { $proposal = $request->entity(); - $data = array_merge($this->getViewmodel(), [ + $data = array_merge($this->getViewmodel($proposal), [ 'proposal' => $proposal, 'entity' => $proposal, 'method' => 'PUT', 'url' => 'proposals/' . $proposal->public_id, 'title' => trans('texts.edit_proposal'), - 'invoices' => Invoice::scope()->with('client.contacts', 'client.country')->unapprovedQuotes($proposal->invoice_id)->orderBy('id')->get(), + 'invoices' => Invoice::scope()->with('client.contacts', 'client.country')->withActiveOrSelected($proposal->invoice_id)->unapprovedQuotes($proposal->invoice_id)->orderBy('id')->get(), 'invoicePublicId' => $proposal->invoice ? $proposal->invoice->public_id : null, 'templatePublicId' => $proposal->proposal_template ? $proposal->proposal_template->public_id : null, ]); @@ -96,10 +96,10 @@ class ProposalController extends BaseController return View::make('proposals.edit', $data); } - private function getViewmodel() + private function getViewmodel($proposal = false) { $account = auth()->user()->account; - $templates = ProposalTemplate::whereAccountId($account->id)->orderBy('name')->get(); + $templates = ProposalTemplate::whereAccountId($account->id)->withActiveOrSelected($proposal ? $proposal->proposal_template_id : false)->orderBy('name')->get(); if (! $templates->count()) { $templates = ProposalTemplate::whereNull('account_id')->orderBy('name')->get(); @@ -167,12 +167,8 @@ class ProposalController extends BaseController { $proposal = $request->entity(); - $mpdf = new mPDF(); - $mpdf->showImageErrors = true; - $mpdf->WriteHTML($proposal->present()->htmlDocument); + $pdf = dispatch(new ConvertProposalToPdf($proposal)); - //$mpdf->Output(); - - $mpdf->Output($proposal->present()->filename, 'D'); + $this->downloadResponse($proposal->getFilename(), $pdf); } } diff --git a/app/Http/Controllers/ProposalSnippetController.php b/app/Http/Controllers/ProposalSnippetController.php index c0bcd03c49e0..21d694b6a428 100644 --- a/app/Http/Controllers/ProposalSnippetController.php +++ b/app/Http/Controllers/ProposalSnippetController.php @@ -84,7 +84,7 @@ class ProposalSnippetController extends BaseController 'method' => 'PUT', 'url' => 'proposals/snippets/' . $proposalSnippet->public_id, 'title' => trans('texts.edit_proposal_snippet'), - 'categories' => ProposalCategory::scope()->orderBy('name')->get(), + 'categories' => ProposalCategory::scope()->withActiveOrSelected($proposalSnippet->proposal_category_id)->orderBy('name')->get(), 'categoryPublicId' => $proposalSnippet->proposal_category ? $proposalSnippet->proposal_category->public_id : null, 'icons' => $this->getIcons(), ]; diff --git a/app/Http/Controllers/QuoteController.php b/app/Http/Controllers/QuoteController.php index 06b363297d2f..601c243f9ea1 100644 --- a/app/Http/Controllers/QuoteController.php +++ b/app/Http/Controllers/QuoteController.php @@ -108,7 +108,7 @@ class QuoteController extends BaseController 'invoiceFonts' => Cache::get('fonts'), 'invoiceLabels' => Auth::user()->account->getInvoiceLabels(), 'isRecurring' => false, - 'expenses' => [], + 'expenses' => collect(), ]; } diff --git a/app/Http/Controllers/ReportController.php b/app/Http/Controllers/ReportController.php index 6b2ee1e90f46..18f7a2159e44 100644 --- a/app/Http/Controllers/ReportController.php +++ b/app/Http/Controllers/ReportController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Jobs\ExportReportResults; +use App\Jobs\LoadPostmarkStats; use App\Jobs\RunReport; use App\Models\Account; use App\Models\ScheduledReport; @@ -13,6 +14,7 @@ use View; use Carbon; use Validator; + /** * Class ReportController. */ @@ -101,7 +103,8 @@ class ReportController extends BaseController $config = [ 'date_field' => $dateField, 'status_ids' => request()->status_ids, - 'group_dates_by' => request()->group_dates_by, + 'group' => request()->group, + 'subgroup' => request()->subgroup, 'document_filter' => request()->document_filter, 'currency_type' => request()->currency_type, 'export_format' => $format, @@ -152,7 +155,8 @@ class ReportController extends BaseController unset($options['start_date']); unset($options['end_date']); - unset($options['group_dates_by']); + unset($options['group']); + unset($options['subgroup']); $schedule = ScheduledReport::createNew(); $schedule->config = json_encode($options); @@ -173,4 +177,20 @@ class ReportController extends BaseController session()->flash('message', trans('texts.deleted_scheduled_report')); } + + public function showEmailReport() + { + $data = [ + 'account' => auth()->user()->account, + ]; + + return view('reports.emails', $data); + } + + public function loadEmailReport($startDate, $endDate) + { + $data = dispatch(new LoadPostmarkStats($startDate, $endDate)); + + return response()->json($data); + } } diff --git a/app/Http/Controllers/TaskController.php b/app/Http/Controllers/TaskController.php index b9017db2e4fe..9495406cd387 100644 --- a/app/Http/Controllers/TaskController.php +++ b/app/Http/Controllers/TaskController.php @@ -16,6 +16,7 @@ use Auth; use DropdownButton; use Input; use Redirect; +use Request; use Session; use URL; use Utils; @@ -189,7 +190,7 @@ class TaskController extends BaseController 'datetimeFormat' => Auth::user()->account->getMomentDateTimeFormat(), ]; - $data = array_merge($data, self::getViewModel()); + $data = array_merge($data, self::getViewModel($task)); return View::make('tasks.edit', $data); } @@ -211,12 +212,12 @@ class TaskController extends BaseController /** * @return array */ - private static function getViewModel() + private static function getViewModel($task = false) { return [ - 'clients' => Client::scope()->with('contacts')->orderBy('name')->get(), + 'clients' => Client::scope()->withActiveOrSelected($task ? $task->client_id : false)->with('contacts')->orderBy('name')->get(), 'account' => Auth::user()->account, - 'projects' => Project::scope()->with('client.contacts')->orderBy('name')->get(), + 'projects' => Project::scope()->withActiveOrSelected($task ? $task->project_id : false)->with('client.contacts')->orderBy('name')->get(), ]; } @@ -260,6 +261,7 @@ class TaskController extends BaseController { $action = Input::get('action'); $ids = Input::get('public_id') ?: (Input::get('id') ?: Input::get('ids')); + $referer = Request::server('HTTP_REFERER'); if (in_array($action, ['resume', 'stop'])) { $this->taskRepo->save($ids, ['action' => $action]); @@ -273,23 +275,21 @@ class TaskController extends BaseController $lastProjectId = false; foreach ($tasks as $task) { if ($task->client) { + if ($task->client->trashed()) { + return redirect($referer)->withError(trans('texts.client_must_be_active')); + } + if (! $clientPublicId) { $clientPublicId = $task->client->public_id; } elseif ($clientPublicId != $task->client->public_id) { - Session::flash('error', trans('texts.task_error_multiple_clients')); - - return Redirect::to('tasks'); + return redirect($referer)->withError(trans('texts.task_error_multiple_clients')); } } if ($task->is_running) { - Session::flash('error', trans('texts.task_error_running')); - - return Redirect::to('tasks'); + return redirect($referer)->withError(trans('texts.task_error_running')); } elseif ($task->invoice_id) { - Session::flash('error', trans('texts.task_error_invoiced')); - - return Redirect::to('tasks'); + return redirect($referer)->withError(trans('texts.task_error_invoiced')); } $account = Auth::user()->account; diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 384bd48a9186..92f168778cac 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -45,15 +45,6 @@ class UserController extends BaseController return $this->userService->getDatatable(Auth::user()->account_id); } - public function setTheme() - { - $user = User::find(Auth::user()->id); - $user->theme_id = Input::get('theme_id'); - $user->save(); - - return Redirect::to(Input::get('path')); - } - public function forcePDFJS() { $user = Auth::user(); @@ -401,4 +392,18 @@ class UserController extends BaseController return RESULT_SUCCESS; } + + public function acceptTerms() + { + $ip = Request::getClientIp(); + $referer = Request::server('HTTP_REFERER'); + $message = ''; + + if (request()->accepted_terms) { + auth()->user()->acceptLatestTerms($ip)->save(); + $message = trans('texts.accepted_terms'); + } + + return redirect($referer)->withMessage($message); + } } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index e5053551dcd6..89150a23cf9e 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -30,11 +30,13 @@ class Kernel extends HttpKernel \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, //\Illuminate\Routing\Middleware\SubstituteBindings::class, + \Illuminate\Foundation\Http\Middleware\TrimStrings::class, \App\Http\Middleware\DuplicateSubmissionCheck::class, \App\Http\Middleware\QueryLogging::class, \App\Http\Middleware\StartupCheck::class, ], 'api' => [ + \App\Http\Middleware\QueryLogging::class, \App\Http\Middleware\ApiCheck::class, ], /* diff --git a/app/Http/Middleware/ApiCheck.php b/app/Http/Middleware/ApiCheck.php index 7bd19386d6ea..cefbd0ea3b5b 100644 --- a/app/Http/Middleware/ApiCheck.php +++ b/app/Http/Middleware/ApiCheck.php @@ -54,7 +54,7 @@ class ApiCheck // check if user is archived if ($token && $token->user) { Auth::onceUsingId($token->user_id); - Session::set('token_id', $token->id); + session(['token_id' => $token->id]); } elseif ($hasApiSecret && $request->is('api/v1/ping')) { // do nothing: allow ping with api_secret or account token } else { diff --git a/app/Http/Middleware/StartupCheck.php b/app/Http/Middleware/StartupCheck.php index 302ea9aa7914..3d33720a8979 100644 --- a/app/Http/Middleware/StartupCheck.php +++ b/app/Http/Middleware/StartupCheck.php @@ -147,7 +147,7 @@ class StartupCheck if (Input::has('lang')) { $locale = Input::get('lang'); App::setLocale($locale); - Session::set(SESSION_LOCALE, $locale); + session([SESSION_LOCALE => $locale]); if (Auth::check()) { if ($language = Language::whereLocale($locale)->first()) { diff --git a/app/Http/Requests/CreatePaymentTermAPIRequest.php b/app/Http/Requests/CreatePaymentTermRequest.php similarity index 71% rename from app/Http/Requests/CreatePaymentTermAPIRequest.php rename to app/Http/Requests/CreatePaymentTermRequest.php index 44002ecf90ee..e839b873804c 100644 --- a/app/Http/Requests/CreatePaymentTermAPIRequest.php +++ b/app/Http/Requests/CreatePaymentTermRequest.php @@ -4,7 +4,7 @@ namespace App\Http\Requests; use App\Models\Invoice; -class CreatePaymentTermAPIRequest extends Request +class CreatePaymentTermRequest extends PaymentTermRequest { /** * Determine if the user is authorized to make this request. @@ -27,7 +27,8 @@ class CreatePaymentTermAPIRequest extends Request { $rules = [ - 'num_days' => 'required|numeric|unique:payment_terms', + 'num_days' => 'required|numeric|unique:payment_terms,num_days,,id,account_id,' . $this->user()->account_id . ',deleted_at,NULL' + . '|unique:payment_terms,num_days,,id,account_id,0,deleted_at,NULL', ]; diff --git a/app/Http/Requests/UpdatePaymentTermRequest.php b/app/Http/Requests/UpdatePaymentTermRequest.php index 022a65087d39..b1d33fb91ca2 100644 --- a/app/Http/Requests/UpdatePaymentTermRequest.php +++ b/app/Http/Requests/UpdatePaymentTermRequest.php @@ -2,16 +2,41 @@ namespace App\Http\Requests; -class UpdatePaymentTermRequest extends EntityRequest +use App\Models\Invoice; + +class UpdatePaymentTermRequest extends PaymentTermRequest { + /** + * Determine if the user is authorized to make this request. + * + * @return bool + */ + + public function authorize() + { + return $this->entity() && $this->user()->can('edit', $this->entity()); + } /** * Get the validation rules that apply to the request. * * @return array */ + public function rules() { - return []; + if (! $this->entity()) { + return []; + } + + $paymentTermId = $this->entity()->id; + + $rules = [ + 'num_days' => 'required|numeric|unique:payment_terms,num_days,' . $paymentTermId . ',id,account_id,' . $this->user()->account_id . ',deleted_at,NULL' + . '|unique:payment_terms,num_days,' . $paymentTermId . ',id,account_id,0,deleted_at,NULL', + ]; + + + return $rules; } } diff --git a/app/Jobs/ConvertProposalToPdf.php b/app/Jobs/ConvertProposalToPdf.php new file mode 100644 index 000000000000..dc8e27ba7d4c --- /dev/null +++ b/app/Jobs/ConvertProposalToPdf.php @@ -0,0 +1,25 @@ +proposal = $proposal; + } + + public function handle() + { + $proposal = $this->proposal; + $url = $proposal->getHeadlessLink(); + + $filename = sprintf('%s/storage/app/%s.pdf', base_path(), strtolower(str_random(RANDOM_KEY_LENGTH))); + $pdf = CurlUtils::renderPDF($url, $filename); + + return $pdf; + } +} diff --git a/app/Jobs/ExportReportResults.php b/app/Jobs/ExportReportResults.php index aed6a34e4a21..1608c1094c5b 100644 --- a/app/Jobs/ExportReportResults.php +++ b/app/Jobs/ExportReportResults.php @@ -66,8 +66,12 @@ class ExportReportResults extends Job foreach ($each as $dimension => $val) { $tmp = []; $tmp[] = Utils::getFromCache($currencyId, 'currencies')->name . (($dimension) ? ' - ' . $dimension : ''); - foreach ($val as $id => $field) { - $tmp[] = Utils::formatMoney($field, $currencyId); + foreach ($val as $field => $value) { + if ($field == 'duration') { + $tmp[] = Utils::formatTime($value); + } else { + $tmp[] = Utils::formatMoney($value, $currencyId); + } } $summary[] = $tmp; } diff --git a/app/Jobs/LoadPostmarkHistory.php b/app/Jobs/LoadPostmarkHistory.php new file mode 100644 index 000000000000..5708e10e2b9e --- /dev/null +++ b/app/Jobs/LoadPostmarkHistory.php @@ -0,0 +1,88 @@ +email = $email; + $this->bounceId = false; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + $str = ''; + + if (config('services.postmark')) { + $this->account = auth()->user()->account; + $this->postmark = new PostmarkClient(config('services.postmark')); + + $str .= $this->loadBounceEvents(); + $str .= $this->loadEmailEvents(); + } + + if (! $str) { + $str = trans('texts.no_messages_found'); + } + + $response = new stdClass; + $response->str = $str; + $response->bounce_id = $this->bounceId; + + return $response; + } + + private function loadBounceEvents() { + $str = ''; + $response = $this->postmark->getBounces(5, 0, null, null, $this->email, $this->account->account_key); + + foreach ($response['bounces'] as $bounce) { + if (! $bounce['inactive'] || ! $bounce['canactivate']) { + continue; + } + + $str .= sprintf('%s
', $bounce['subject']); + $str .= sprintf('%s | %s
', $bounce['type'], $this->account->getDateTime($bounce['bouncedat'], true)); + $str .= sprintf('%s %s

', $bounce['description'], $bounce['details']); + + $this->bounceId = $bounce['id']; + } + + return $str; + } + + private function loadEmailEvents() { + $str = ''; + $response = $this->postmark->getOutboundMessages(5, 0, $this->email, null, $this->account->account_key); + + foreach ($response['messages'] as $message) { + $details = $this->postmark->getOutboundMessageDetails($message['MessageID']); + $str .= sprintf('%s
', $details['subject']); + + if (count($details['messageevents'])) { + $event = $details['messageevents'][0]; + $str .= sprintf('%s | %s
', $event['Type'], $this->account->getDateTime($event['ReceivedAt'], true)); + if ($message = $event['Details']['DeliveryMessage']) { + $str .= sprintf('%s
', $message); + } + if ($server = $event['Details']['DestinationServer']) { + $str .= sprintf('%s
', $server); + } + } else { + $str .= trans('texts.processing') . '...'; + } + + $str .= '

'; + } + } +} diff --git a/app/Jobs/LoadPostmarkStats.php b/app/Jobs/LoadPostmarkStats.php new file mode 100644 index 000000000000..f5a508e577b8 --- /dev/null +++ b/app/Jobs/LoadPostmarkStats.php @@ -0,0 +1,157 @@ +startDate = $startDate; + $this->endDate = $endDate; + + $this->response = new stdClass(); + $this->postmark = new \Postmark\PostmarkClient(config('services.postmark')); + $this->account = auth()->user()->account; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + if (! auth()->user()->hasPermission('view_all')) { + return $this->response; + } + + $this->loadOverallStats(); + $this->loadSentStats(); + $this->loadPlatformStats(); + $this->loadEmailClientStats(); + + return $this->response; + } + + private function loadOverallStats() { + $startDate = date_create($this->startDate); + $endDate = date_create($this->endDate); + + $eventTypes = ['sent', 'opened']; + + foreach ($eventTypes as $eventType) { + $data = []; + $endDate->modify('+1 day'); + $interval = new DateInterval('P1D'); + $period = new DatePeriod($startDate, $interval, $endDate); + $endDate->modify('-1 day'); + $records = []; + + if ($eventType == 'sent') { + $response = $this->postmark->getOutboundSendStatistics($this->account->account_key, request()->start_date, request()->end_date); + } else { + $response = $this->postmark->getOutboundOpenStatistics($this->account->account_key, request()->start_date, request()->end_date); + } + + foreach ($response->days as $key => $val) { + $field = $eventType == 'opened' ? 'unique' : $eventType; + $data[$val['date']] = $val[$field]; + } + + foreach ($period as $day) { + $date = $day->format('Y-m-d'); + $records[] = isset($data[$date]) ? $data[$date] : 0; + + if ($eventType == 'sent') { + $labels[] = $day->format('m/d/Y'); + } + } + + if ($eventType == 'sent') { + $color = '51,122,183'; + } elseif ($eventType == 'opened') { + $color = '54,193,87'; + } elseif ($eventType == 'bounced') { + $color = '128,128,128'; + } + + $group = new stdClass(); + $group->data = $records; + $group->label = trans("texts.{$eventType}"); + $group->lineTension = 0; + $group->borderWidth = 4; + $group->borderColor = "rgba({$color}, 1)"; + $group->backgroundColor = "rgba({$color}, 0.1)"; + $datasets[] = $group; + } + + $data = new stdClass(); + $data->labels = $labels; + $data->datasets = $datasets; + $this->response->data = $data; + } + + private function loadSentStats() { + $account = $this->account; + $data = $this->postmark->getOutboundOverviewStatistics($this->account->account_key, request()->start_date, request()->end_date); + $percent = $data->sent ? ($data->uniqueopens / $data->sent * 100) : 0; + $this->response->totals = [ + 'sent' => $account->formatNumber($data->sent), + 'opened' => sprintf('%s | %s%%', $account->formatNumber($data->uniqueopens), $account->formatNumber($percent)), + 'bounced' => sprintf('%s | %s%%', $account->formatNumber($data->bounced), $account->formatNumber($data->bouncerate, 3)), + //'spam' => sprintf('%s | %s%%', $account->formatNumber($data->spamcomplaints), $account->formatNumber($data->spamcomplaintsrate, 3)) + ]; + } + + private function loadPlatformStats() { + $data = $this->postmark->getOutboundPlatformStatistics($this->account->account_key, request()->start_date, request()->end_date); + $account = $this->account; + $str = ''; + $total = 0; + + $total = $data['desktop'] + $data['mobile'] + $data['webmail']; + + foreach (['mobile', 'desktop', 'webmail'] as $platform) { + $percent = $total ? ($data[$platform] / $total * 100) : 0; + $str .= sprintf('%s%s%%', trans('texts.' . $platform), $account->formatNumber($percent)); + } + + $this->response->platforms = $str; + } + + private function loadEmailClientStats() { + $data = $this->postmark->getOutboundEmailClientStatistics($this->account->account_key, request()->start_date, request()->end_date); + $account = $this->account; + $str = ''; + $total = 0; + $clients = []; + + foreach ($data as $key => $val) { + if ($key == 'days') { + continue; + } + + $total += $val; + $clients[$key] = $val; + } + + arsort($clients); + + foreach ($clients as $key => $val) { + $percent = $total ? ($val / $total * 100) : 0; + if ($percent < 0.5) { + continue; + } + $str .= sprintf('%s%s%%', ucwords($key), $account->formatNumber($percent)); + } + + $this->response->emailClients = $str; + } + +} diff --git a/app/Jobs/PurgeAccountData.php b/app/Jobs/PurgeAccountData.php index a43a3f0a907f..a81f2eddced9 100644 --- a/app/Jobs/PurgeAccountData.php +++ b/app/Jobs/PurgeAccountData.php @@ -55,6 +55,7 @@ class PurgeAccountData extends Job 'proposal_snippets', 'proposal_categories', 'proposal_invitations', + 'tax_rates', ]; foreach ($tables as $table) { diff --git a/app/Jobs/PurgeClientData.php b/app/Jobs/PurgeClientData.php new file mode 100644 index 000000000000..464a6a411c0f --- /dev/null +++ b/app/Jobs/PurgeClientData.php @@ -0,0 +1,44 @@ +client = $client; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + $invoices = $this->client->invoices()->withTrashed()->get(); + $expenses = $this->client->expenses()->withTrashed()->get(); + + foreach ($invoices as $invoice) { + foreach ($invoice->documents as $document) { + $document->delete(); + } + } + foreach ($expenses as $expense) { + foreach ($expense->documents as $document) { + $document->delete(); + } + } + + $this->client->forceDelete(); + + HistoryUtils::deleteHistory($this->client); + } +} diff --git a/app/Jobs/ReactivatePostmarkEmail.php b/app/Jobs/ReactivatePostmarkEmail.php new file mode 100644 index 000000000000..891619d99e28 --- /dev/null +++ b/app/Jobs/ReactivatePostmarkEmail.php @@ -0,0 +1,29 @@ +bounceId = $bounceId; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + if (! config('services.postmark')) { + return false; + } + + $postmark = new PostmarkClient(config('services.postmark')); + $response = $postmark->activateBounce($this->bounceId); + } +} diff --git a/app/Jobs/RunReport.php b/app/Jobs/RunReport.php index 4d915fdd9139..19aeae05e3f4 100644 --- a/app/Jobs/RunReport.php +++ b/app/Jobs/RunReport.php @@ -31,6 +31,8 @@ class RunReport extends Job $reportType = $this->reportType; $config = $this->config; + $config['subgroup'] = false; // don't yet support charts in export + $isExport = $this->isExport; $reportClass = '\\App\\Ninja\\Reports\\' . Str::studly($reportType) . 'Report'; diff --git a/app/Libraries/CurlUtils.php b/app/Libraries/CurlUtils.php index 7e699c226b94..9e1141b4ed19 100644 --- a/app/Libraries/CurlUtils.php +++ b/app/Libraries/CurlUtils.php @@ -66,4 +66,32 @@ class CurlUtils return false; } } + + public static function renderPDF($url, $filename) + { + if (! $path = env('PHANTOMJS_BIN_PATH')) { + return false; + } + + $client = Client::getInstance(); + $client->isLazy(); + $client->getEngine()->addOption("--load-images=true"); + $client->getEngine()->setPath($path); + + $request = $client->getMessageFactory()->createPdfRequest($url, 'GET'); + $request->setOutputFile($filename); + //$request->setOrientation('landscape'); + $request->setMargin('0'); + + $response = $client->getMessageFactory()->createResponse(); + $client->send($request, $response); + + if ($response->getStatus() === 200) { + $pdf = file_get_contents($filename); + unlink($filename); + return $pdf; + } else { + return false; + } + } } diff --git a/app/Libraries/HistoryUtils.php b/app/Libraries/HistoryUtils.php index b9782b6dab9a..a9e6c68e9602 100644 --- a/app/Libraries/HistoryUtils.php +++ b/app/Libraries/HistoryUtils.php @@ -46,6 +46,10 @@ class HistoryUtils ->get(); foreach ($activities->reverse() as $activity) { + if ($activity->client && $activity->client->is_deleted) { + continue; + } + if ($activity->activity_type_id == ACTIVITY_TYPE_CREATE_CLIENT) { $entity = $activity->client; } elseif ($activity->activity_type_id == ACTIVITY_TYPE_CREATE_TASK || $activity->activity_type_id == ACTIVITY_TYPE_UPDATE_TASK) { @@ -78,6 +82,28 @@ class HistoryUtils } } + public static function deleteHistory(EntityModel $entity) + { + $history = Session::get(RECENTLY_VIEWED) ?: []; + $accountHistory = isset($history[$entity->account_id]) ? $history[$entity->account_id] : []; + $remove = []; + + for ($i=0; $iequalTo($item)) { + $remove[] = $i; + } elseif ($entity->getEntityType() == ENTITY_CLIENT && $entity->public_id == $item->client_id) { + $remove[] = $i; + } + } + + for ($i=count($remove) - 1; $i>=0; $i--) { + array_splice($history[$entity->account_id], $remove[$i], 1); + } + + Session::put(RECENTLY_VIEWED, $history); + } + public static function trackViewed(EntityModel $entity) { $entityType = $entity->getEntityType(); @@ -136,6 +162,7 @@ class HistoryUtils private static function convertToObject($entity) { $object = new stdClass(); + $object->id = $entity->id; $object->accountId = $entity->account_id; $object->url = $entity->present()->url; $object->entityType = $entity->subEntityType(); diff --git a/app/Libraries/Utils.php b/app/Libraries/Utils.php index 5dab8479b534..a4cdceaf2c0c 100644 --- a/app/Libraries/Utils.php +++ b/app/Libraries/Utils.php @@ -435,6 +435,7 @@ class Utils 'url' => Input::get('url', Request::url()), 'previous' => url()->previous(), 'user_agent' => isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '', + 'locale' => App::getLocale(), 'ip' => Request::getClientIp(), 'count' => Session::get('error_count', 0), 'is_console' => App::runningInConsole() ? 'yes' : 'no', @@ -500,6 +501,21 @@ class Utils return $data->first(); } + public static function formatNumber($value, $currencyId = false, $precision = 0) + { + $value = floatval($value); + + if (! $currencyId) { + $currencyId = Session::get(SESSION_CURRENCY, DEFAULT_CURRENCY); + } + + $currency = self::getFromCache($currencyId, 'currencies'); + $thousand = $currency->thousand_separator; + $decimal = $currency->decimal_separator; + + return number_format($value, $precision, $decimal, $thousand); + } + public static function formatMoney($value, $currencyId = false, $countryId = false, $decorator = false) { $value = floatval($value); @@ -1327,6 +1343,28 @@ class Utils } public static function brewerColor($number) { + $colors = [ + '#337AB7', + '#3cb44b', + '#e6194b', + '#f58231', + '#911eb4', + '#46f0f0', + '#f032e6', + '#d2f53c', + '#fabebe', + '#008080', + '#e6beff', + '#aa6e28', + '#fffac8', + '#800000', + '#aaffc3', + '#808000', + '#000080', + '#808080', + ]; + + /* $colors = [ '#1c9f77', '#d95d02', @@ -1337,11 +1375,18 @@ class Utils '#a87821', '#676767', ]; + */ $number = ($number-1) % count($colors); return $colors[$number]; } + public static function brewerColorRGB($number) { + $color = static::brewerColor($number); + list($r, $g, $b) = sscanf($color, "#%02x%02x%02x"); + return "{$r},{$g},{$b}"; + } + /** * Replace language-specific characters by ASCII-equivalents. * @param string $s diff --git a/app/Listeners/HandleUserLoggedIn.php b/app/Listeners/HandleUserLoggedIn.php index 3fd5380f4e04..4e85abe2fc0d 100644 --- a/app/Listeners/HandleUserLoggedIn.php +++ b/app/Listeners/HandleUserLoggedIn.php @@ -71,7 +71,7 @@ class HandleUserLoggedIn // if they're using Stripe make sure they're using Stripe.js $accountGateway = $account->getGatewayConfig(GATEWAY_STRIPE); - if ($accountGateway && ! $accountGateway->getPublishableStripeKey()) { + if ($accountGateway && ! $accountGateway->getPublishableKey()) { Session::flash('warning', trans('texts.missing_publishable_key')); } elseif ($account->isLogoTooLarge()) { Session::flash('warning', trans('texts.logo_too_large', ['size' => $account->getLogoSize() . 'KB'])); diff --git a/app/Listeners/HistoryListener.php b/app/Listeners/HistoryListener.php new file mode 100644 index 000000000000..537785181c67 --- /dev/null +++ b/app/Listeners/HistoryListener.php @@ -0,0 +1,74 @@ +client); + } + + /** + * @param InvoiceWasDeleted $event + */ + public function deletedInvoice(InvoiceWasDeleted $event) + { + HistoryUtils::deleteHistory($event->invoice); + } + + /** + * @param QuoteWasDeleted $event + */ + public function deletedQuote(QuoteWasDeleted $event) + { + HistoryUtils::deleteHistory($event->quote); + } + + /** + * @param TaskWasDeleted $event + */ + public function deletedTask(TaskWasDeleted $event) + { + HistoryUtils::deleteHistory($event->task); + } + + /** + * @param ExpenseWasDeleted $event + */ + public function deletedExpense(ExpenseWasDeleted $event) + { + HistoryUtils::deleteHistory($event->expense); + } + + /** + * @param ProjectWasDeleted $event + */ + public function deletedProject(ProjectWasDeleted $event) + { + HistoryUtils::deleteHistory($event->project); + } + + /** + * @param ProposalWasDeleted $event + */ + public function deletedProposal(ProposalWasDeleted $event) + { + HistoryUtils::deleteHistory($event->proposal); + } +} diff --git a/app/Listeners/InvoiceListener.php b/app/Listeners/InvoiceListener.php index 5f06c4d70213..fbff9274daf8 100644 --- a/app/Listeners/InvoiceListener.php +++ b/app/Listeners/InvoiceListener.php @@ -90,6 +90,11 @@ class InvoiceListener ->first(); $activity->json_backup = $invoice->hidePrivateFields()->toJSON(); $activity->save(); + + if ($invoice->balance == 0 && $payment->account->auto_archive_invoice) { + $invoiceRepo = app('App\Ninja\Repositories\InvoiceRepository'); + $invoiceRepo->archive($invoice); + } } /** diff --git a/app/Listeners/NotificationListener.php b/app/Listeners/NotificationListener.php index 089e45505617..a906436519ec 100644 --- a/app/Listeners/NotificationListener.php +++ b/app/Listeners/NotificationListener.php @@ -10,6 +10,8 @@ use App\Events\QuoteInvitationWasApproved; use App\Events\PaymentWasCreated; use App\Services\PushService; use App\Jobs\SendNotificationEmail; +use App\Jobs\SendPaymentEmail; +use App\Notifications\PaymentCreated; /** * Class NotificationListener @@ -47,14 +49,17 @@ class NotificationListener * @param $type * @param null $payment */ - private function sendEmails($invoice, $type, $payment = null, $notes = false) + private function sendNotifications($invoice, $type, $payment = null, $notes = false) { foreach ($invoice->account->users as $user) { - if ($user->{"notify_{$type}"}) - { + if ($user->{"notify_{$type}"}) { dispatch(new SendNotificationEmail($user, $invoice, $type, $payment, $notes)); } + + if ($payment && $user->slack_webhook_url) { + $user->notify(new PaymentCreated($payment, $invoice)); + } } } @@ -63,7 +68,7 @@ class NotificationListener */ public function emailedInvoice(InvoiceWasEmailed $event) { - $this->sendEmails($event->invoice, 'sent', null, $event->notes); + $this->sendNotifications($event->invoice, 'sent', null, $event->notes); $this->pushService->sendNotification($event->invoice, 'sent'); } @@ -72,7 +77,7 @@ class NotificationListener */ public function emailedQuote(QuoteWasEmailed $event) { - $this->sendEmails($event->quote, 'sent', null, $event->notes); + $this->sendNotifications($event->quote, 'sent', null, $event->notes); $this->pushService->sendNotification($event->quote, 'sent'); } @@ -85,7 +90,7 @@ class NotificationListener return; } - $this->sendEmails($event->invoice, 'viewed'); + $this->sendNotifications($event->invoice, 'viewed'); $this->pushService->sendNotification($event->invoice, 'viewed'); } @@ -98,7 +103,7 @@ class NotificationListener return; } - $this->sendEmails($event->quote, 'viewed'); + $this->sendNotifications($event->quote, 'viewed'); $this->pushService->sendNotification($event->quote, 'viewed'); } @@ -107,7 +112,7 @@ class NotificationListener */ public function approvedQuote(QuoteInvitationWasApproved $event) { - $this->sendEmails($event->quote, 'approved'); + $this->sendNotifications($event->quote, 'approved'); $this->pushService->sendNotification($event->quote, 'approved'); } @@ -121,8 +126,8 @@ class NotificationListener return; } - $this->contactMailer->sendPaymentConfirmation($event->payment); - $this->sendEmails($event->payment->invoice, 'paid', $event->payment); + dispatch(new SendPaymentEmail($event->payment)); + $this->sendNotifications($event->payment->invoice, 'paid', $event->payment); $this->pushService->sendNotification($event->payment->invoice, 'paid'); } diff --git a/app/Models/Account.php b/app/Models/Account.php index 184a15fba043..98daf5a88fe5 100644 --- a/app/Models/Account.php +++ b/app/Models/Account.php @@ -134,6 +134,9 @@ class Account extends Eloquent 'header_font_id', 'body_font_id', 'auto_convert_quote', + 'auto_archive_quote', + 'auto_archive_invoice', + 'auto_email_invoice', 'all_pages_footer', 'all_pages_header', 'show_currency_code', @@ -170,6 +173,7 @@ class Account extends Eloquent 'reset_counter_frequency_id', 'payment_type_id', 'gateway_fee_enabled', + 'send_item_details', 'reset_counter_date', 'custom_contact_label1', 'custom_contact_label2', @@ -232,6 +236,7 @@ class Account extends Eloquent public static $customLabels = [ 'balance_due', 'credit_card', + 'delivery_note', 'description', 'discount', 'due_date', @@ -256,6 +261,7 @@ class Account extends Eloquent 'tax', 'terms', 'unit_cost', + 'valid_until', 'vat_number', ]; @@ -624,12 +630,12 @@ class Account extends Eloquent * * @return DateTime|null|string */ - public function getDateTime($date = 'now') + public function getDateTime($date = 'now', $formatted = false) { $date = $this->getDate($date); $date->setTimeZone(new \DateTimeZone($this->getTimezone())); - return $date; + return $formatted ? $date->format($this->getCustomDateTimeFormat()) : $date; } /** @@ -682,6 +688,17 @@ class Account extends Eloquent return Utils::formatMoney($amount, $currencyId, $countryId, $decorator); } + public function formatNumber($amount, $precision = 0) + { + if ($this->currency_id) { + $currencyId = $this->currency_id; + } else { + $currencyId = DEFAULT_CURRENCY; + } + + return Utils::formatNumber($amount, $currencyId, $precision); + } + /** * @return mixed */ @@ -1780,6 +1797,11 @@ class Account extends Eloquent return url('/'); } } + + public function requiresAddressState() { + return true; + //return ! $this->country_id || $this->country_id == DEFAULT_COUNTRY; + } } Account::creating(function ($account) diff --git a/app/Models/AccountGateway.php b/app/Models/AccountGateway.php index 535ec60de72c..07c5c80bfb89 100644 --- a/app/Models/AccountGateway.php +++ b/app/Models/AccountGateway.php @@ -95,7 +95,16 @@ class AccountGateway extends EntityModel */ public function isGateway($gatewayId) { - return $this->gateway_id == $gatewayId; + if (is_array($gatewayId)) { + foreach ($gatewayId as $id) { + if ($this->gateway_id == $id) { + return true; + } + } + return false; + } else { + return $this->gateway_id == $gatewayId; + } } /** @@ -127,9 +136,9 @@ class AccountGateway extends EntityModel /** * @return bool|mixed */ - public function getPublishableStripeKey() + public function getPublishableKey() { - if (! $this->isGateway(GATEWAY_STRIPE)) { + if (! $this->isGateway([GATEWAY_STRIPE, GATEWAY_PAYMILL])) { return false; } @@ -254,7 +263,7 @@ class AccountGateway extends EntityModel return null; } - $stripe_key = $this->getPublishableStripeKey(); + $stripe_key = $this->getPublishableKey(); return substr(trim($stripe_key), 0, 8) == 'pk_test_' ? 'tartan' : 'production'; } @@ -272,7 +281,7 @@ class AccountGateway extends EntityModel public function isTestMode() { if ($this->isGateway(GATEWAY_STRIPE)) { - return strpos($this->getPublishableStripeKey(), 'test') !== false; + return strpos($this->getPublishableKey(), 'test') !== false; } else { return $this->getConfigField('testMode'); } diff --git a/app/Models/Activity.php b/app/Models/Activity.php index 43b9fff4795e..c5902048d40e 100644 --- a/app/Models/Activity.php +++ b/app/Models/Activity.php @@ -137,4 +137,71 @@ class Activity extends Eloquent return trans("texts.activity_{$activityTypeId}", $data); } + + public function relatedEntityType() + { + switch ($this->activity_type_id) { + case ACTIVITY_TYPE_CREATE_CLIENT: + case ACTIVITY_TYPE_ARCHIVE_CLIENT: + case ACTIVITY_TYPE_DELETE_CLIENT: + case ACTIVITY_TYPE_RESTORE_CLIENT: + case ACTIVITY_TYPE_CREATE_CREDIT: + case ACTIVITY_TYPE_ARCHIVE_CREDIT: + case ACTIVITY_TYPE_DELETE_CREDIT: + case ACTIVITY_TYPE_RESTORE_CREDIT: + return ENTITY_CLIENT; + break; + + case ACTIVITY_TYPE_CREATE_INVOICE: + case ACTIVITY_TYPE_UPDATE_INVOICE: + case ACTIVITY_TYPE_EMAIL_INVOICE: + case ACTIVITY_TYPE_VIEW_INVOICE: + case ACTIVITY_TYPE_ARCHIVE_INVOICE: + case ACTIVITY_TYPE_DELETE_INVOICE: + case ACTIVITY_TYPE_RESTORE_INVOICE: + return ENTITY_INVOICE; + break; + + case ACTIVITY_TYPE_CREATE_PAYMENT: + case ACTIVITY_TYPE_ARCHIVE_PAYMENT: + case ACTIVITY_TYPE_DELETE_PAYMENT: + case ACTIVITY_TYPE_RESTORE_PAYMENT: + case ACTIVITY_TYPE_VOIDED_PAYMENT: + case ACTIVITY_TYPE_REFUNDED_PAYMENT: + case ACTIVITY_TYPE_FAILED_PAYMENT: + return ENTITY_PAYMENT; + break; + + case ACTIVITY_TYPE_CREATE_QUOTE: + case ACTIVITY_TYPE_UPDATE_QUOTE: + case ACTIVITY_TYPE_EMAIL_QUOTE: + case ACTIVITY_TYPE_VIEW_QUOTE: + case ACTIVITY_TYPE_ARCHIVE_QUOTE: + case ACTIVITY_TYPE_DELETE_QUOTE: + case ACTIVITY_TYPE_RESTORE_QUOTE: + case ACTIVITY_TYPE_APPROVE_QUOTE: + return ENTITY_QUOTE; + break; + + case ACTIVITY_TYPE_CREATE_VENDOR: + case ACTIVITY_TYPE_ARCHIVE_VENDOR: + case ACTIVITY_TYPE_DELETE_VENDOR: + case ACTIVITY_TYPE_RESTORE_VENDOR: + case ACTIVITY_TYPE_CREATE_EXPENSE: + case ACTIVITY_TYPE_ARCHIVE_EXPENSE: + case ACTIVITY_TYPE_DELETE_EXPENSE: + case ACTIVITY_TYPE_RESTORE_EXPENSE: + case ACTIVITY_TYPE_UPDATE_EXPENSE: + return ENTITY_EXPENSE; + break; + + case ACTIVITY_TYPE_CREATE_TASK: + case ACTIVITY_TYPE_UPDATE_TASK: + case ACTIVITY_TYPE_ARCHIVE_TASK: + case ACTIVITY_TYPE_DELETE_TASK: + case ACTIVITY_TYPE_RESTORE_TASK: + return ENTITY_TASK; + break; + } + } } diff --git a/app/Models/Client.php b/app/Models/Client.php index de128945adb3..24b45e131fc2 100644 --- a/app/Models/Client.php +++ b/app/Models/Client.php @@ -262,7 +262,7 @@ class Client extends EntityModel // check if this client wasRecentlyCreated to ensure a new contact is // always created even if the request includes a contact id if (! $this->wasRecentlyCreated && $publicId && $publicId != '-1') { - $contact = Contact::scope($publicId)->firstOrFail(); + $contact = Contact::scope($publicId)->whereClientId($this->id)->firstOrFail(); } else { $contact = Contact::createNew(); $contact->send_invoice = true; diff --git a/app/Models/EntityModel.php b/app/Models/EntityModel.php index d922d641e7ad..56935a64b301 100644 --- a/app/Models/EntityModel.php +++ b/app/Models/EntityModel.php @@ -155,18 +155,18 @@ class EntityModel extends Eloquent */ public function scopeScope($query, $publicId = false, $accountId = false) { - if (! $accountId) { - $accountId = Auth::user()->account_id; - } - - $query->where($this->getTable() .'.account_id', '=', $accountId); - // If 'false' is passed as the publicId return nothing rather than everything if (func_num_args() > 1 && ! $publicId && ! $accountId) { $query->where('id', '=', 0); return $query; } + if (! $accountId) { + $accountId = Auth::user()->account_id; + } + + $query->where($this->getTable() .'.account_id', '=', $accountId); + if ($publicId) { if (is_array($publicId)) { $query->whereIn('public_id', $publicId); @@ -182,6 +182,15 @@ class EntityModel extends Eloquent return $query; } + public function scopeWithActiveOrSelected($query, $id = false) + { + return $query->withTrashed() + ->where(function ($query) use ($id) { + $query->whereNull('deleted_at') + ->orWhere('id', '=', $id); + }); + } + /** * @param $query * @@ -427,4 +436,13 @@ class EntityModel extends Eloquent throw $exception; } } + + public function equalTo($obj) + { + if (empty($obj->id)) { + return false; + } + + return $this->id == $obj->id && $this->getEntityType() == $obj->entityType; + } } diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php index 4b40f9611f8f..868fb660d109 100644 --- a/app/Models/Invoice.php +++ b/app/Models/Invoice.php @@ -369,7 +369,7 @@ class Invoice extends EntityModel implements BalanceAffecting */ public function quote() { - return $this->belongsTo('App\Models\Invoice'); + return $this->belongsTo('App\Models\Invoice')->withTrashed(); } /** @@ -1093,67 +1093,6 @@ class Invoice extends EntityModel implements BalanceAffecting return $this; } - /** - * @throws \Recurr\Exception\MissingData - * - * @return bool|\Recurr\RecurrenceCollection - */ - public function getSchedule() - { - if (! $this->start_date || ! $this->is_recurring || ! $this->frequency_id) { - return false; - } - - $startDate = $this->getOriginal('last_sent_date') ?: $this->getOriginal('start_date'); - $startDate .= ' ' . $this->account->recurring_hour . ':00:00'; - $startDate = $this->account->getDateTime($startDate); - $endDate = $this->end_date ? $this->account->getDateTime($this->getOriginal('end_date')) : null; - $timezone = $this->account->getTimezone(); - - $rule = $this->getRecurrenceRule(); - $rule = new \Recurr\Rule("{$rule}", $startDate, $endDate, $timezone); - - // Fix for months with less than 31 days - $transformerConfig = new \Recurr\Transformer\ArrayTransformerConfig(); - $transformerConfig->enableLastDayOfMonthFix(); - - $transformer = new \Recurr\Transformer\ArrayTransformer(); - $transformer->setConfig($transformerConfig); - $dates = $transformer->transform($rule); - - if (count($dates) < 2) { - return false; - } - - return $dates; - } - - /** - * @return null - */ - public function getNextSendDate() - { - if (! $this->is_public) { - return null; - } - - if ($this->start_date && ! $this->last_sent_date) { - $startDate = $this->getOriginal('start_date') . ' ' . $this->account->recurring_hour . ':00:00'; - - return $this->account->getDateTime($startDate); - } - - if (! $schedule = $this->getSchedule()) { - return null; - } - - if (count($schedule) < 2) { - return null; - } - - return $schedule[1]->getStart(); - } - /** * @param null $invoice_date * @@ -1258,7 +1197,7 @@ class Invoice extends EntityModel implements BalanceAffecting * * @return null */ - public function getPrettySchedule($min = 1, $max = 10) + public function getPrettySchedule($min = 0, $max = 10) { if (! $schedule = $this->getSchedule($max)) { return null; @@ -1310,6 +1249,9 @@ class Invoice extends EntityModel implements BalanceAffecting if (strpos($pdfString, 'data') === 0) { break; } else { + if (Utils::isNinjaDev() || Utils::isTravis()) { + Utils::logError('Failed to generate: ' . $i); + } $pdfString = false; sleep(2); } diff --git a/app/Models/Proposal.php b/app/Models/Proposal.php index 37ffe27b2402..b079bf347923 100644 --- a/app/Models/Proposal.php +++ b/app/Models/Proposal.php @@ -96,6 +96,25 @@ class Proposal extends EntityModel { return $this->invoice->invoice_number; } + + public function getLink($forceOnsite = false, $forcePlain = false) + { + $invitation = $this->invitations->first(); + + return $invitation->getLink('proposal', $forceOnsite, $forcePlain); + } + + public function getHeadlessLink() + { + return sprintf('%s?phantomjs=true&phantomjs_secret=%s', $this->getLink(true, true), env('PHANTOMJS_SECRET')); + } + + public function getFilename($extension = 'pdf') + { + $entityType = $this->getEntityType(); + + return trans('texts.proposal') . '_' . $this->invoice->invoice_number . '.' . $extension; + } } Proposal::creating(function ($project) { diff --git a/app/Models/Traits/HasLogo.php b/app/Models/Traits/HasLogo.php index 6caf188ec009..1feb8c0a3d87 100644 --- a/app/Models/Traits/HasLogo.php +++ b/app/Models/Traits/HasLogo.php @@ -145,6 +145,18 @@ trait HasLogo return round($this->logo_size / 1000); } + /** + * @return string|null + */ + public function getLogoName() + { + if (! $this->hasLogo()) { + return null; + } + + return $this->logo; + } + /** * @return bool */ diff --git a/app/Models/Traits/HasRecurrence.php b/app/Models/Traits/HasRecurrence.php index e2620b8d2de6..a81ef8cc0280 100644 --- a/app/Models/Traits/HasRecurrence.php +++ b/app/Models/Traits/HasRecurrence.php @@ -14,6 +14,7 @@ trait HasRecurrence /** * @return bool */ + /* public function shouldSendToday() { if (! $this->user->confirmed) { @@ -78,6 +79,101 @@ trait HasRecurrence return false; } + */ + + public function shouldSendToday() + { + if (! $this->user->confirmed) { + return false; + } + + $account = $this->account; + $timezone = $account->getTimezone(); + + if (! $this->start_date || Carbon::parse($this->start_date, $timezone)->isFuture()) { + return false; + } + + if ($this->end_date && Carbon::parse($this->end_date, $timezone)->isPast()) { + return false; + } + + if (! $this->last_sent_date) { + return true; + } else { + // check we don't send a few hours early due to timezone difference + if (Utils::isNinja() && Carbon::now()->format('Y-m-d') != Carbon::now($timezone)->format('Y-m-d')) { + return false; + } + + $nextSendDate = $this->getNextSendDate(); + + if (! $nextSendDate) { + return false; + } + + return $this->account->getDateTime() >= $nextSendDate; + } + } + + /** + * @throws \Recurr\Exception\MissingData + * + * @return bool|\Recurr\RecurrenceCollection + */ + public function getSchedule() + { + if (! $this->start_date || ! $this->frequency_id) { + return false; + } + + $startDate = $this->getOriginal('last_sent_date') ?: $this->getOriginal('start_date'); + $startDate .= ' ' . $this->account->recurring_hour . ':00:00'; + $timezone = $this->account->getTimezone(); + + $rule = $this->getRecurrenceRule(); + $rule = new \Recurr\Rule("{$rule}", $startDate, null, $timezone); + + // Fix for months with less than 31 days + $transformerConfig = new \Recurr\Transformer\ArrayTransformerConfig(); + $transformerConfig->enableLastDayOfMonthFix(); + + $transformer = new \Recurr\Transformer\ArrayTransformer(); + $transformer->setConfig($transformerConfig); + $dates = $transformer->transform($rule); + + if (count($dates) < 1) { + return false; + } + + return $dates; + } + + /** + * @return null + */ + public function getNextSendDate() + { + if (! $this->is_public) { + return null; + } + + if ($this->start_date && ! $this->last_sent_date) { + $startDate = $this->getOriginal('start_date') . ' ' . $this->account->recurring_hour . ':00:00'; + + return $this->account->getDateTime($startDate); + } + + if (! $schedule = $this->getSchedule()) { + return null; + } + + if (count($schedule) < 2) { + return null; + } + + return $schedule[1]->getStart(); + } /** * @return string @@ -120,21 +216,9 @@ trait HasRecurrence } if ($this->end_date) { - $rule .= 'UNTIL=' . $this->getOriginal('end_date'); + $rule .= 'UNTIL=' . $this->getOriginal('end_date') . ' 24:00:00'; } return $rule; } - - /* - public function shouldSendToday() - { - if (!$nextSendDate = $this->getNextSendDate()) { - return false; - } - - return $this->account->getDateTime() >= $nextSendDate; - } - */ - } diff --git a/app/Models/Traits/PresentsInvoice.php b/app/Models/Traits/PresentsInvoice.php index e6961dadf53a..157211f5b1a3 100644 --- a/app/Models/Traits/PresentsInvoice.php +++ b/app/Models/Traits/PresentsInvoice.php @@ -336,6 +336,7 @@ trait PresentsInvoice 'custom_value1', 'custom_value2', 'delivery_note', + 'date', ]; foreach ($fields as $field) { diff --git a/app/Models/User.php b/app/Models/User.php index 6162bffef2bb..d7504610c876 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -70,6 +70,7 @@ class User extends Authenticatable 'google_2fa_secret', 'google_2fa_phone', 'remember_2fa_token', + 'slack_webhook_url', ]; /** @@ -446,6 +447,29 @@ class User extends Authenticatable //$this->notify(new ResetPasswordNotification($token)); app('App\Ninja\Mailers\UserMailer')->sendPasswordReset($this, $token); } + + public function routeNotificationForSlack() + { + return $this->slack_webhook_url; + } + + public function hasAcceptedLatestTerms() + { + if (! NINJA_TERMS_VERSION) { + return true; + } + + return $this->accepted_terms_version == NINJA_TERMS_VERSION; + } + + public function acceptLatestTerms($ip) + { + $this->accepted_terms_version = NINJA_TERMS_VERSION; + $this->accepted_terms_timestamp = date('Y-m-d H:i:s'); + $this->accepted_terms_ip = $ip; + + return $this; + } } User::created(function ($user) diff --git a/app/Models/Vendor.php b/app/Models/Vendor.php index 4f4a7112d33d..afc48afbc21f 100644 --- a/app/Models/Vendor.php +++ b/app/Models/Vendor.php @@ -216,8 +216,8 @@ class Vendor extends EntityModel { $publicId = isset($data['public_id']) ? $data['public_id'] : (isset($data['id']) ? $data['id'] : false); - if ($publicId && $publicId != '-1') { - $contact = VendorContact::scope($publicId)->firstOrFail(); + if (! $this->wasRecentlyCreated && $publicId && $publicId != '-1') { + $contact = VendorContact::scope($publicId)->whereVendorId($this->id)->firstOrFail(); } else { $contact = VendorContact::createNew(); } diff --git a/app/Ninja/Datatables/PaymentDatatable.php b/app/Ninja/Datatables/PaymentDatatable.php index e0be4b78c86d..b20610cb0d71 100644 --- a/app/Ninja/Datatables/PaymentDatatable.php +++ b/app/Ninja/Datatables/PaymentDatatable.php @@ -143,7 +143,7 @@ class PaymentDatatable extends EntityDatatable [ trans('texts.refund_payment'), function ($model) { - $max_refund = number_format($model->amount - $model->refunded, 2); + $max_refund = $model->amount - $model->refunded; $formatted = Utils::formatMoney($max_refund, $model->currency_id, $model->country_id); $symbol = Utils::getFromCache($model->currency_id ? $model->currency_id : 1, 'currencies')->symbol; $local = in_array($model->gateway_id, [GATEWAY_BRAINTREE, GATEWAY_STRIPE, GATEWAY_WEPAY]) || ! $model->gateway_id ? 0 : 1; diff --git a/app/Ninja/Datatables/ProductDatatable.php b/app/Ninja/Datatables/ProductDatatable.php index 33c691806b85..9c51418cd6be 100644 --- a/app/Ninja/Datatables/ProductDatatable.php +++ b/app/Ninja/Datatables/ProductDatatable.php @@ -68,6 +68,15 @@ class ProductDatatable extends EntityDatatable return URL::to("products/{$model->public_id}/edit"); }, ], + [ + trans('texts.clone_product'), + function ($model) { + return URL::to("products/{$model->public_id}/clone"); + }, + function ($model) { + return Auth::user()->can('create', ENTITY_PRODUCT); + }, + ], [ trans('texts.invoice_product'), function ($model) { diff --git a/app/Ninja/Mailers/ContactMailer.php b/app/Ninja/Mailers/ContactMailer.php index 5e20d8f531b2..94132ce1d8ef 100644 --- a/app/Ninja/Mailers/ContactMailer.php +++ b/app/Ninja/Mailers/ContactMailer.php @@ -191,7 +191,7 @@ class ContactMailer extends Mailer $data = [ 'body' => $this->templateService->processVariables($body, $variables), 'link' => $invitation->getLink(), - 'entityType' => $invoice->getEntityType(), + 'entityType' => $proposal ? ENTITY_PROPOSAL : $invoice->getEntityType(), 'invoiceId' => $invoice->id, 'invitation' => $invitation, 'account' => $account, diff --git a/app/Ninja/Mailers/Mailer.php b/app/Ninja/Mailers/Mailer.php index 26cd5165d71c..1270e0390ba8 100644 --- a/app/Ninja/Mailers/Mailer.php +++ b/app/Ninja/Mailers/Mailer.php @@ -6,6 +6,9 @@ use App\Models\Invoice; use Exception; use Mail; use Utils; +use Postmark\PostmarkClient; +use Postmark\Models\PostmarkException; +use Postmark\Models\PostmarkAttachment; /** * Class Mailer. @@ -34,6 +37,25 @@ class Mailer 'emails.'.$view.'_text', ]; + $toEmail = strtolower($toEmail); + $replyEmail = $fromEmail; + $fromEmail = CONTACT_EMAIL; + //\Log::info("{$toEmail} | {$replyEmail} | $fromEmail"); + + // Optionally send for alternate domain + if (! empty($data['fromEmail'])) { + $fromEmail = $data['fromEmail']; + } + + if (config('services.postmark')) { + return $this->sendPostmarkMail($toEmail, $fromEmail, $fromName, $replyEmail, $subject, $views, $data); + } else { + return $this->sendLaravelMail($toEmail, $fromEmail, $fromName, $replyEmail, $subject, $views, $data); + } + } + + private function sendLaravelMail($toEmail, $fromEmail, $fromName, $replyEmail, $subject, $views, $data = []) + { if (Utils::isSelfHost()) { if (isset($data['account'])) { $account = $data['account']; @@ -60,17 +82,7 @@ class Mailer } try { - $response = Mail::send($views, $data, function ($message) use ($toEmail, $fromEmail, $fromName, $subject, $data) { - $toEmail = strtolower($toEmail); - $replyEmail = $fromEmail; - $fromEmail = CONTACT_EMAIL; - //\Log::info("{$toEmail} | {$replyEmail} | $fromEmail"); - - // Optionally send for alternate domain - if (! empty($data['fromEmail'])) { - $fromEmail = $data['fromEmail']; - } - + $response = Mail::send($views, $data, function ($message) use ($toEmail, $fromEmail, $fromName, $replyEmail, $subject, $data) { $message->to($toEmail) ->from($fromEmail, $fromName) ->replyTo($replyEmail, $fromName) @@ -95,9 +107,77 @@ class Mailer } }); - return $this->handleSuccess($response, $data); + return $this->handleSuccess($data); } catch (Exception $exception) { - return $this->handleFailure($exception); + return $this->handleFailure($data, $exception->getMessage()); + } + } + + private function sendPostmarkMail($toEmail, $fromEmail, $fromName, $replyEmail, $subject, $views, $data = []) + { + $htmlBody = view($views[0], $data)->render(); + $textBody = view($views[1], $data)->render(); + $attachments = []; + + if (isset($data['account'])) { + $account = $data['account']; + $logoName = $account->getLogoName(); + if (strpos($htmlBody, 'cid:' . $logoName) !== false && $account->hasLogo()) { + $attachments[] = PostmarkAttachment::fromFile($account->getLogoPath(), $logoName, null, 'cid:' . $logoName); + } + } + + if (strpos($htmlBody, 'cid:invoiceninja-logo.png') !== false) { + $attachments[] = PostmarkAttachment::fromFile(public_path('images/invoiceninja-logo.png'), 'invoiceninja-logo.png', null, 'cid:invoiceninja-logo.png'); + $attachments[] = PostmarkAttachment::fromFile(public_path('images/emails/icon-facebook.png'), 'icon-facebook.png', null, 'cid:icon-facebook.png'); + $attachments[] = PostmarkAttachment::fromFile(public_path('images/emails/icon-twitter.png'), 'icon-twitter.png', null, 'cid:icon-twitter.png'); + $attachments[] = PostmarkAttachment::fromFile(public_path('images/emails/icon-github.png'), 'icon-github.png', null, 'cid:icon-github.png'); + } + + // Handle invoice attachments + if (! empty($data['pdfString']) && ! empty($data['pdfFileName'])) { + $attachments[] = PostmarkAttachment::fromRawData($data['pdfString'], $data['pdfFileName']); + } + if (! empty($data['ublString']) && ! empty($data['ublFileName'])) { + $attachments[] = PostmarkAttachment::fromRawData($data['ublString'], $data['ublFileName']); + } + if (! empty($data['documents'])) { + foreach ($data['documents'] as $document) { + $attachments[] = PostmarkAttachment::fromRawData($document['data'], $document['name']); + } + } + + try { + $client = new PostmarkClient(config('services.postmark')); + $message = [ + 'To' => $toEmail, + 'From' => $fromEmail, + 'ReplyTo' => $replyEmail, + 'Subject' => $subject, + 'TextBody' => $textBody, + 'HtmlBody' => $htmlBody, + 'Attachments' => $attachments, + ]; + + if (! empty($data['bccEmail'])) { + $message['Bcc'] = $data['bccEmail']; + } + + if (! empty($data['account'])) { + $message['Tag'] = $data['account']->account_key; + } + + $response = $client->sendEmailBatch([$message]); + if ($messageId = $response[0]->messageid) { + return $this->handleSuccess($data, $messageId); + } else { + return $this->handleFailure($data, $response[0]->message); + } + } catch (PostmarkException $exception) { + return $this->handleFailure($data, $exception->getMessage()); + } catch (Exception $exception) { + Utils::logError(Utils::getErrorString($exception)); + throw $exception; } } @@ -107,19 +187,11 @@ class Mailer * * @return bool */ - private function handleSuccess($response, $data) + private function handleSuccess($data, $messageId = false) { if (isset($data['invitation'])) { $invitation = $data['invitation']; $invoice = $invitation->invoice; - $messageId = false; - - // Track the Postmark message id - if (isset($_ENV['POSTMARK_API_TOKEN']) && $response) { - $json = json_decode((string) $response->getBody()); - $messageId = $json->MessageID; - } - $notes = isset($data['notes']) ? $data['notes'] : false; if (! empty($data['proposal'])) { @@ -137,35 +209,14 @@ class Mailer * * @return string */ - private function handleFailure($exception) + private function handleFailure($data, $emailError) { - if (isset($_ENV['POSTMARK_API_TOKEN']) && method_exists($exception, 'getResponse')) { - $response = $exception->getResponse(); - - if (! $response) { - $error = trans('texts.postmark_error', ['link' => link_to('https://status.postmarkapp.com/')]); - Utils::logError($error); - - if (config('queue.default') === 'sync') { - return $error; - } else { - throw $exception; - } - } - - $response = $response->getBody()->getContents(); - $response = json_decode($response); - $emailError = nl2br($response->Message); - } else { - $emailError = $exception->getMessage(); - } - if (isset($data['invitation'])) { $invitation = $data['invitation']; $invitation->email_error = $emailError; $invitation->save(); } elseif (! Utils::isNinjaProd()) { - Utils::logError(Utils::getErrorString($exception)); + Utils::logError($emailError); } return $emailError; diff --git a/app/Ninja/PaymentDrivers/AuthorizeNetAIMPaymentDriver.php b/app/Ninja/PaymentDrivers/AuthorizeNetAIMPaymentDriver.php index a53c1d6735d2..0fa524605faf 100644 --- a/app/Ninja/PaymentDrivers/AuthorizeNetAIMPaymentDriver.php +++ b/app/Ninja/PaymentDrivers/AuthorizeNetAIMPaymentDriver.php @@ -14,4 +14,11 @@ class AuthorizeNetAIMPaymentDriver extends BasePaymentDriver return $data; } + + public function createPayment($ref = false, $paymentMethod = null) + { + $ref = $this->purchaseResponse['transactionResponse']['transId'] ?: $this->purchaseResponse['refId']; + + parent::createPayment($ref, $paymentMethod); + } } diff --git a/app/Ninja/PaymentDrivers/BasePaymentDriver.php b/app/Ninja/PaymentDrivers/BasePaymentDriver.php index a6d8b0ce9449..16c03696d883 100644 --- a/app/Ninja/PaymentDrivers/BasePaymentDriver.php +++ b/app/Ninja/PaymentDrivers/BasePaymentDriver.php @@ -164,8 +164,8 @@ class BasePaymentDriver } $url = 'payment/' . $this->invitation->invitation_key; - if (request()->update) { - $url .= '?update=true'; + if (request()->capture) { + $url .= '?capture=true'; } $data = [ @@ -242,10 +242,13 @@ class BasePaymentDriver $rules = array_merge($rules, [ 'address1' => 'required', 'city' => 'required', - 'state' => 'required', 'postal_code' => 'required', 'country_id' => 'required', ]); + + if ($this->account()->requiresAddressState()) { + $rules['state'] = 'required'; + } } } @@ -266,7 +269,7 @@ class BasePaymentDriver public function completeOnsitePurchase($input = false, $paymentMethod = false) { - $this->input = count($input) ? $input : false; + $this->input = $input && count($input) ? $input : false; $gateway = $this->gateway(); if ($input) { @@ -303,17 +306,19 @@ class BasePaymentDriver } } - if ($this->isTwoStep() || request()->update) { + if ($this->isTwoStep() || request()->capture) { return; } // prepare and process payment $data = $this->paymentDetails($paymentMethod); + // TODO move to payment driver class if ($this->isGateway(GATEWAY_SAGE_PAY_DIRECT) || $this->isGateway(GATEWAY_SAGE_PAY_SERVER)) { $items = null; + } elseif ($this->account()->send_item_details) { + $items = $this->paymentItems(); } else { - //$items = $this->paymentItems(); $items = null; } $response = $gateway->purchase($data) @@ -369,7 +374,7 @@ class BasePaymentDriver $item = new Item([ 'name' => $invoiceItem->product_key, - 'description' => $invoiceItem->notes, + 'description' => substr($invoiceItem->notes, 0, 100), 'price' => $invoiceItem->cost, 'quantity' => $invoiceItem->qty, ]); @@ -867,6 +872,7 @@ class BasePaymentDriver return [ 'amount' => $amount, 'transactionReference' => $payment->transaction_reference, + 'currency' => $payment->client->getCurrencyCode(), ]; } diff --git a/app/Ninja/PaymentDrivers/PaymillPaymentDriver.php b/app/Ninja/PaymentDrivers/PaymillPaymentDriver.php new file mode 100644 index 000000000000..701ff1115d3a --- /dev/null +++ b/app/Ninja/PaymentDrivers/PaymillPaymentDriver.php @@ -0,0 +1,27 @@ +input['sourceToken'])) { + $data['token'] = $this->input['sourceToken']; + unset($data['card']); + } + + return $data; + } +} diff --git a/app/Ninja/PaymentDrivers/StripePaymentDriver.php b/app/Ninja/PaymentDrivers/StripePaymentDriver.php index 2be1c5b83327..6b0a63284c26 100644 --- a/app/Ninja/PaymentDrivers/StripePaymentDriver.php +++ b/app/Ninja/PaymentDrivers/StripePaymentDriver.php @@ -63,7 +63,7 @@ class StripePaymentDriver extends BasePaymentDriver public function tokenize() { - return $this->accountGateway->getPublishableStripeKey(); + return $this->accountGateway->getPublishableKey(); } public function rules() diff --git a/app/Ninja/Presenters/ExpensePresenter.php b/app/Ninja/Presenters/ExpensePresenter.php index 1559e3b5a04a..c9bd71b1fabb 100644 --- a/app/Ninja/Presenters/ExpensePresenter.php +++ b/app/Ninja/Presenters/ExpensePresenter.php @@ -44,6 +44,11 @@ class ExpensePresenter extends EntityPresenter return Utils::formatMoney($this->entity->amountWithTax(), $this->entity->expense_currency_id); } + public function currencyCode() + { + return Utils::getFromCache($this->entity->expense_currency_id, 'currencies')->code; + } + public function taxAmount() { return Utils::formatMoney($this->entity->taxAmount(), $this->entity->expense_currency_id); diff --git a/app/Ninja/Presenters/ProductPresenter.php b/app/Ninja/Presenters/ProductPresenter.php index 07351e1c0841..6f7659c0823f 100644 --- a/app/Ninja/Presenters/ProductPresenter.php +++ b/app/Ninja/Presenters/ProductPresenter.php @@ -27,10 +27,16 @@ class ProductPresenter extends EntityPresenter public function moreActions() { $product = $this->entity; + $actions = []; if (! $product->trashed()) { + if (auth()->user()->can('create', ENTITY_PRODUCT)) { + $actions[] = ['url' => 'javascript:submitAction("clone")', 'label' => trans('texts.clone_product')]; + } if (auth()->user()->can('create', ENTITY_INVOICE)) { $actions[] = ['url' => 'javascript:submitAction("invoice")', 'label' => trans('texts.invoice_product')]; + } + if (count($actions)) { $actions[] = DropdownButton::DIVIDER; } $actions[] = ['url' => 'javascript:submitAction("archive")', 'label' => trans("texts.archive_product")]; diff --git a/app/Ninja/Presenters/ProposalPresenter.php b/app/Ninja/Presenters/ProposalPresenter.php index eca4e906df81..ed05d01b89c5 100644 --- a/app/Ninja/Presenters/ProposalPresenter.php +++ b/app/Ninja/Presenters/ProposalPresenter.php @@ -16,7 +16,7 @@ class ProposalPresenter extends EntityPresenter $invitation = $proposal->invitations->first(); $actions = []; - $actions[] = ['url' => $invitation->getLink('proposal'), 'label' => trans("texts.view_as_recipient")]; + $actions[] = ['url' => $invitation->getLink('proposal'), 'label' => trans("texts.view_in_portal")]; $actions[] = DropdownButton::DIVIDER; diff --git a/app/Ninja/Reports/AbstractReport.php b/app/Ninja/Reports/AbstractReport.php index a96f0e4ca010..595ef8daef47 100644 --- a/app/Ninja/Reports/AbstractReport.php +++ b/app/Ninja/Reports/AbstractReport.php @@ -2,7 +2,13 @@ namespace App\Ninja\Reports; +use Utils; use Auth; +use Carbon; +use DateInterval; +use DatePeriod; +use stdClass; +use App\Models\Client; class AbstractReport { @@ -13,6 +19,7 @@ class AbstractReport public $totals = []; public $data = []; + public $chartData = []; public function __construct($startDate, $endDate, $isExport, $options = false) { @@ -69,7 +76,7 @@ class AbstractReport } if (strpos($field, 'date') !== false) { - $class[] = 'group-date-' . (isset($this->options['group_dates_by']) ? $this->options['group_dates_by'] : 'monthyear'); + $class[] = 'group-date-' . (isset($this->options['group']) ? $this->options['group'] : 'monthyear'); } elseif (in_array($field, ['client', 'vendor', 'product', 'user', 'method', 'category', 'project'])) { $class[] = 'group-letter-100'; } elseif (in_array($field, ['amount', 'paid', 'balance'])) { @@ -141,4 +148,166 @@ class AbstractReport return join('', $reportParts); } + + protected function getDimension($entity) + { + $subgroup = $this->options['subgroup']; + + if ($subgroup == 'user') { + return $entity->user->getDisplayName(); + } elseif ($subgroup == 'client') { + if ($entity instanceof Client) { + return $entity->getDisplayName(); + } elseif ($entity->client) { + return $entity->client->getDisplayName(); + } else { + return trans('texts.unset'); + } + } + } + + protected function addChartData($dimension, $date, $amount) + { + if (! isset($this->chartData[$dimension])) { + $this->chartData[$dimension] = []; + } + + $date = $this->formatDate($date); + + if (! isset($this->chartData[$dimension][$date])) { + $this->chartData[$dimension][$date] = 0; + } + + $this->chartData[$dimension][$date] += $amount; + } + + public function chartGroupBy() + { + $groupBy = empty($this->options['group']) ? 'day' : $this->options['group']; + + if ($groupBy == 'monthyear') { + $groupBy = 'month'; + } + + return strtoupper($groupBy); + } + + protected function formatDate($date) + { + if (! $date instanceof \DateTime) { + $date = new \DateTime($date); + } + + $groupBy = $this->chartGroupBy(); + $dateFormat = $groupBy == 'DAY' ? 'z' : ($groupBy == 'MONTH' ? 'm' : ''); + + return $date->format('Y' . $dateFormat); + } + + public function getLineChartData() + { + $startDate = date_create($this->startDate); + $endDate = date_create($this->endDate); + $groupBy = $this->chartGroupBy(); + + $datasets = []; + $labels = []; + + foreach ($this->chartData as $dimension => $data) { + $interval = new DateInterval('P1'.substr($groupBy, 0, 1)); + $intervalStartDate = Carbon::instance($startDate); + $intervalEndDate = Carbon::instance($endDate); + + // round dates to match grouping + $intervalStartDate->hour(0)->minute(0)->second(0); + $intervalEndDate->hour(24)->minute(0)->second(0); + if ($groupBy == 'MONTHYEAR' || $groupBy == 'YEAR') { + $intervalStartDate->day(1); + $intervalEndDate->addMonth(1)->day(1); + } + if ($groupBy == 'YEAR') { + $intervalStartDate->month(1); + $intervalEndDate->month(12); + } + + $period = new DatePeriod($intervalStartDate, $interval, $intervalEndDate); + $records = []; + + foreach ($period as $date) { + $labels[] = $date->format('m/d/Y'); + $date = $this->formatDate($date); + $records[] = isset($data[$date]) ? $data[$date] : 0; + } + + $record = new stdClass(); + $datasets[] = $record; + $color = Utils::brewerColorRGB(count($datasets)); + + $record->data = $records; + $record->label = $dimension; + $record->lineTension = 0; + $record->borderWidth = 3; + $record->borderColor = "rgba({$color}, 1)"; + $record->backgroundColor = "rgba(255,255,255,0)"; + } + + $data = new stdClass(); + $data->labels = $labels; + $data->datasets = $datasets; + + return $data; + } + + public function isLineChartEnabled() + { + return $this->options['group']; + } + + public function isPieChartEnabled() + { + return $this->options['subgroup']; + } + + public function getPieChartData() + { + if (! $this->isPieChartEnabled()) { + return false; + } + + $datasets = []; + $labels = []; + $totals = []; + + foreach ($this->chartData as $dimension => $data) { + foreach ($data as $date => $value) { + if (! isset($totals[$dimension])) { + $totals[$dimension] = 0; + } + + $totals[$dimension] += $value; + } + } + + $response = new stdClass(); + $response->labels = []; + + $datasets = new stdClass(); + $datasets->data = []; + $datasets->backgroundColor = []; + + foreach ($totals as $dimension => $value) { + $response->labels[] = $dimension; + $datasets->data[] = $value; + $datasets->lineTension = 0; + $datasets->borderWidth = 3; + + $color = count($totals) ? Utils::brewerColorRGB(count($response->labels)) : '51,122,183'; + $datasets->borderColor[] = "rgba({$color}, 1)"; + $datasets->backgroundColor[] = "rgba({$color}, 0.1)"; + } + + $response->datasets = [$datasets]; + + return $response; + } } diff --git a/app/Ninja/Reports/ActivityReport.php b/app/Ninja/Reports/ActivityReport.php index cf4e9dce9359..0ce8113273e4 100644 --- a/app/Ninja/Reports/ActivityReport.php +++ b/app/Ninja/Reports/ActivityReport.php @@ -23,6 +23,7 @@ class ActivityReport extends AbstractReport $startDate = $this->startDate;; $endDate = $this->endDate; + $subgroup = $this->options['subgroup']; $activities = Activity::scope() ->with('client.contacts', 'user', 'invoice', 'payment', 'credit', 'task', 'expense', 'account') @@ -37,8 +38,16 @@ class ActivityReport extends AbstractReport $activity->present()->user, $this->isExport ? strip_tags($activity->getMessage()) : $activity->getMessage(), ]; + + if ($subgroup == 'category') { + $dimension = trans('texts.' . $activity->relatedEntityType()); + } else { + $dimension = $this->getDimension($activity); + } + + $this->addChartData($dimension, $activity->created_at, 1); } - + //dd($this->getChartData()); } } diff --git a/app/Ninja/Reports/AgingReport.php b/app/Ninja/Reports/AgingReport.php index 0b4a3ada5881..ed59c105aa9d 100644 --- a/app/Ninja/Reports/AgingReport.php +++ b/app/Ninja/Reports/AgingReport.php @@ -24,6 +24,7 @@ class AgingReport extends AbstractReport public function run() { $account = Auth::user()->account; + $subgroup = $this->options['subgroup']; $clients = Client::scope() ->orderBy('name') @@ -56,6 +57,13 @@ class AgingReport extends AbstractReport //$this->addToTotals($client->currency_id, 'paid', $payment ? $payment->getCompletedAmount() : 0); //$this->addToTotals($client->currency_id, 'amount', $invoice->amount); //$this->addToTotals($client->currency_id, 'balance', $invoice->balance); + + if ($subgroup == 'age') { + $dimension = trans('texts.' .$invoice->present()->ageGroup); + } else { + $dimension = $this->getDimension($client); + } + $this->addChartData($dimension, $invoice->invoice_date, $invoice->balance); } } } diff --git a/app/Ninja/Reports/ClientReport.php b/app/Ninja/Reports/ClientReport.php index a51e0c6c2d3c..18a46d15b07e 100644 --- a/app/Ninja/Reports/ClientReport.php +++ b/app/Ninja/Reports/ClientReport.php @@ -35,6 +35,7 @@ class ClientReport extends AbstractReport public function run() { $account = Auth::user()->account; + $subgroup = $this->options['subgroup']; $clients = Client::scope() ->orderBy('name') @@ -55,6 +56,13 @@ class ClientReport extends AbstractReport foreach ($client->invoices as $invoice) { $amount += $invoice->amount; $paid += $invoice->getAmountPaid(); + + if ($subgroup == 'country') { + $dimension = $client->present()->country; + } else { + $dimension = $this->getDimension($client); + } + $this->addChartData($dimension, $invoice->invoice_date, $invoice->amount); } $row = [ diff --git a/app/Ninja/Reports/CreditReport.php b/app/Ninja/Reports/CreditReport.php index 6ba311c3897f..976a3e537acc 100644 --- a/app/Ninja/Reports/CreditReport.php +++ b/app/Ninja/Reports/CreditReport.php @@ -22,11 +22,12 @@ class CreditReport extends AbstractReport public function run() { $account = Auth::user()->account; + $subgroup = $this->options['subgroup']; $clients = Client::scope() ->orderBy('name') ->withArchived() - ->with(['user', 'credits' => function ($query) { + ->with(['contacts', 'user', 'credits' => function ($query) { $query->where('credit_date', '>=', $this->startDate) ->where('credit_date', '<=', $this->endDate) ->withArchived(); @@ -39,6 +40,9 @@ class CreditReport extends AbstractReport foreach ($client->credits as $credit) { $amount += $credit->amount; $balance += $credit->balance; + + $dimension = $this->getDimension($client); + $this->addChartData($dimension, $credit->credit_date, $credit->amount); } if (! $amount && ! $balance) { diff --git a/app/Ninja/Reports/DocumentReport.php b/app/Ninja/Reports/DocumentReport.php index bfa195034dbd..a5e4de3c474b 100644 --- a/app/Ninja/Reports/DocumentReport.php +++ b/app/Ninja/Reports/DocumentReport.php @@ -24,6 +24,7 @@ class DocumentReport extends AbstractReport $account = auth()->user()->account; $filter = $this->options['document_filter']; $exportFormat = $this->options['export_format']; + $subgroup = $this->options['subgroup']; $records = false; if (! $filter || $filter == ENTITY_INVOICE) { @@ -70,12 +71,16 @@ class DocumentReport extends AbstractReport foreach ($records as $record) { foreach ($record->documents as $document) { + $date = $record->getEntityType() == ENTITY_INVOICE ? $record->invoice_date : $record->expense_date; $this->data[] = [ $this->isExport ? $document->name : link_to($document->getUrl(), $document->name), $record->client ? ($this->isExport ? $record->client->getDisplayName() : $record->client->present()->link) : '', $this->isExport ? $record->present()->titledName : ($filter ? $record->present()->link : link_to($record->present()->url, $record->present()->titledName)), - $record->getEntityType() == ENTITY_INVOICE ? $record->invoice_date : $record->expense_date, + $date, ]; + + $dimension = $this->getDimension($record); + $this->addChartData($dimension, $date, 1); } } } diff --git a/app/Ninja/Reports/ExpenseReport.php b/app/Ninja/Reports/ExpenseReport.php index 1756e8aa87be..b852dcc64f5f 100644 --- a/app/Ninja/Reports/ExpenseReport.php +++ b/app/Ninja/Reports/ExpenseReport.php @@ -27,6 +27,10 @@ class ExpenseReport extends AbstractReport $columns['tax'] = ['columnSelector-false']; } + if ($this->isExport) { + $columns['currency'] = ['columnSelector-false']; + } + return $columns; } @@ -34,6 +38,7 @@ class ExpenseReport extends AbstractReport { $account = Auth::user()->account; $exportFormat = $this->options['export_format']; + $subgroup = $this->options['subgroup']; $with = ['client.contacts', 'vendor']; $hasTaxRates = TaxRate::scope()->count(); @@ -84,10 +89,24 @@ class ExpenseReport extends AbstractReport $row[] = $expense->present()->taxAmount; } + if ($this->isExport) { + $row[] = $expense->present()->currencyCode; + } + $this->data[] = $row; $this->addToTotals($expense->expense_currency_id, 'amount', $amount); $this->addToTotals($expense->invoice_currency_id, 'amount', 0); + + if ($subgroup == 'category') { + $dimension = $expense->present()->category; + } elseif ($subgroup == 'vendor') { + $dimension = $expense->vendor ? $expense->vendor->name : trans('texts.unset'); + } else { + $dimension = $this->getDimension($expense); + } + + $this->addChartData($dimension, $expense->expense_date, $amount); } } } diff --git a/app/Ninja/Reports/InvoiceReport.php b/app/Ninja/Reports/InvoiceReport.php index 51be25981c2a..dc120a9b1118 100644 --- a/app/Ninja/Reports/InvoiceReport.php +++ b/app/Ninja/Reports/InvoiceReport.php @@ -46,6 +46,7 @@ class InvoiceReport extends AbstractReport $account = Auth::user()->account; $statusIds = $this->options['status_ids']; $exportFormat = $this->options['export_format']; + $subgroup = $this->options['subgroup']; $hasTaxRates = TaxRate::scope()->count(); $clients = Client::scope() @@ -122,6 +123,14 @@ class InvoiceReport extends AbstractReport $this->addToTotals($client->currency_id, 'amount', $invoice->amount); $this->addToTotals($client->currency_id, 'balance', $invoice->balance); + + if ($subgroup == 'status') { + $dimension = $invoice->statusLabel(); + } else { + $dimension = $this->getDimension($client); + } + + $this->addChartData($dimension, $invoice->invoice_date, $invoice->amount); } } } diff --git a/app/Ninja/Reports/PaymentReport.php b/app/Ninja/Reports/PaymentReport.php index 13dd355b83bb..e1c73710a721 100644 --- a/app/Ninja/Reports/PaymentReport.php +++ b/app/Ninja/Reports/PaymentReport.php @@ -28,6 +28,7 @@ class PaymentReport extends AbstractReport $account = Auth::user()->account; $currencyType = $this->options['currency_type']; $invoiceMap = []; + $subgroup = $this->options['subgroup']; $payments = Payment::scope() ->orderBy('payment_date', 'desc') @@ -80,6 +81,15 @@ class PaymentReport extends AbstractReport } } + if ($subgroup == 'method') { + $dimension = $payment->present()->method; + } else { + $dimension = $this->getDimension($payment); + } + + $convertedAmount = $currencyType == 'converted' ? ($invoice->amount * $payment->exchange_rate) : $invoice->amount; + $this->addChartData($dimension, $payment->payment_date, $convertedAmount); + $lastInvoiceId = $invoice->id; } } diff --git a/app/Ninja/Reports/ProductReport.php b/app/Ninja/Reports/ProductReport.php index 9ccc7ea03c5e..922e6b148bc4 100644 --- a/app/Ninja/Reports/ProductReport.php +++ b/app/Ninja/Reports/ProductReport.php @@ -46,11 +46,12 @@ class ProductReport extends AbstractReport { $account = Auth::user()->account; $statusIds = $this->options['status_ids']; + $subgroup = $this->options['subgroup']; $clients = Client::scope() ->orderBy('name') ->withArchived() - ->with('contacts') + ->with('contacts', 'user') ->with(['invoices' => function ($query) use ($statusIds) { $query->invoices() ->withArchived() @@ -90,6 +91,13 @@ class ProductReport extends AbstractReport $this->data[] = $row; + if ($subgroup == 'product') { + $dimension = $item->product_key; + } else { + $dimension = $this->getDimension($client); + } + + $this->addChartData($dimension, $invoice->invoice_date, $invoice->amount); } //$this->addToTotals($client->currency_id, 'paid', $payment ? $payment->getCompletedAmount() : 0); diff --git a/app/Ninja/Reports/ProfitAndLossReport.php b/app/Ninja/Reports/ProfitAndLossReport.php index fd2372d96531..7f11081e86dc 100644 --- a/app/Ninja/Reports/ProfitAndLossReport.php +++ b/app/Ninja/Reports/ProfitAndLossReport.php @@ -22,10 +22,11 @@ class ProfitAndLossReport extends AbstractReport public function run() { $account = Auth::user()->account; + $subgroup = $this->options['subgroup']; $payments = Payment::scope() ->orderBy('payment_date', 'desc') - ->with('client.contacts', 'invoice') + ->with('client.contacts', 'invoice', 'user') ->withArchived() ->excludeFailed() ->where('payment_date', '>=', $this->startDate) @@ -48,6 +49,13 @@ class ProfitAndLossReport extends AbstractReport $this->addToTotals($client->currency_id, 'revenue', $payment->getCompletedAmount(), $payment->present()->month); $this->addToTotals($client->currency_id, 'expenses', 0, $payment->present()->month); $this->addToTotals($client->currency_id, 'profit', $payment->getCompletedAmount(), $payment->present()->month); + + if ($subgroup == 'type') { + $dimension = trans('texts.payment'); + } else { + $dimension = $this->getDimension($payment); + } + $this->addChartData($dimension, $payment->payment_date, $payment->getCompletedAmount()); } $expenses = Expense::scope() @@ -70,6 +78,13 @@ class ProfitAndLossReport extends AbstractReport $this->addToTotals($expense->expense_currency_id, 'revenue', 0, $expense->present()->month); $this->addToTotals($expense->expense_currency_id, 'expenses', $expense->amountWithTax(), $expense->present()->month); $this->addToTotals($expense->expense_currency_id, 'profit', $expense->amountWithTax() * -1, $expense->present()->month); + + if ($subgroup == 'type') { + $dimension = trans('texts.expense'); + } else { + $dimension = $this->getDimension($expense); + } + $this->addChartData($dimension, $expense->expense_date, $expense->amountWithTax()); } //$this->addToTotals($client->currency_id, 'paid', $payment ? $payment->getCompletedAmount() : 0); diff --git a/app/Ninja/Reports/QuoteReport.php b/app/Ninja/Reports/QuoteReport.php index fbc1e2152aaa..5dbc529ba877 100644 --- a/app/Ninja/Reports/QuoteReport.php +++ b/app/Ninja/Reports/QuoteReport.php @@ -43,6 +43,7 @@ class QuoteReport extends AbstractReport $statusIds = $this->options['status_ids']; $exportFormat = $this->options['export_format']; $hasTaxRates = TaxRate::scope()->count(); + $subgroup = $this->options['subgroup']; $clients = Client::scope() ->orderBy('name') @@ -102,6 +103,14 @@ class QuoteReport extends AbstractReport $this->data[] = $row; $this->addToTotals($client->currency_id, 'amount', $invoice->amount); + + if ($subgroup == 'status') { + $dimension = $invoice->statusLabel(); + } else { + $dimension = $this->getDimension($client); + } + + $this->addChartData($dimension, $invoice->invoice_date, $invoice->amount); } } } diff --git a/app/Ninja/Reports/TaskReport.php b/app/Ninja/Reports/TaskReport.php index 9419af24b43c..d6a2398a4760 100644 --- a/app/Ninja/Reports/TaskReport.php +++ b/app/Ninja/Reports/TaskReport.php @@ -24,6 +24,7 @@ class TaskReport extends AbstractReport { $startDate = date_create($this->startDate); $endDate = date_create($this->endDate); + $subgroup = $this->options['subgroup']; $tasks = Task::scope() ->orderBy('created_at', 'desc') @@ -52,6 +53,13 @@ class TaskReport extends AbstractReport $this->addToTotals($currencyId, 'duration', $duration); $this->addToTotals($currencyId, 'amount', $amount); + + if ($subgroup == 'project') { + $dimension = $task->present()->project; + } else { + $dimension = $this->getDimension($task); + } + $this->addChartData($dimension, $task->created_at, round($duration / 60 / 60, 2)); } } } diff --git a/app/Ninja/Reports/TaxRateReport.php b/app/Ninja/Reports/TaxRateReport.php index f4005134091b..4cc9df12468c 100644 --- a/app/Ninja/Reports/TaxRateReport.php +++ b/app/Ninja/Reports/TaxRateReport.php @@ -24,11 +24,12 @@ class TaxRateReport extends AbstractReport public function run() { $account = Auth::user()->account; + $subgroup = $this->options['subgroup']; $clients = Client::scope() ->orderBy('name') ->withArchived() - ->with('contacts') + ->with('contacts', 'user') ->with(['invoices' => function ($query) { $query->with('invoice_items') ->withArchived() @@ -85,6 +86,9 @@ class TaxRateReport extends AbstractReport $this->addToTotals($client->currency_id, 'amount', $tax['amount']); $this->addToTotals($client->currency_id, 'paid', $tax['paid']); + + $dimension = $this->getDimension($client); + $this->addChartData($dimension, $invoice->invoice_date, $tax['amount']); } } } diff --git a/app/Ninja/Repositories/AccountRepository.php b/app/Ninja/Repositories/AccountRepository.php index cf5ef0c71135..844781dbc624 100644 --- a/app/Ninja/Repositories/AccountRepository.php +++ b/app/Ninja/Repositories/AccountRepository.php @@ -193,7 +193,7 @@ class AccountRepository foreach ($clients as $client) { if ($client->name) { $data['clients'][] = [ - 'value' => ($account->clientNumbersEnabled() && $client->id_number ? $client->id_number . ': ' : '') . $client->name, + 'value' => ($client->id_number ? $client->id_number . ': ' : '') . $client->name, 'tokens' => implode(',', [$client->name, $client->id_number, $client->vat_number, $client->work_phone]), 'url' => $client->present()->url, ]; diff --git a/app/Ninja/Repositories/ActivityRepository.php b/app/Ninja/Repositories/ActivityRepository.php index 7c94cf726597..f086d8c6e606 100644 --- a/app/Ninja/Repositories/ActivityRepository.php +++ b/app/Ninja/Repositories/ActivityRepository.php @@ -30,7 +30,7 @@ class ActivityRepository $activity->activity_type_id = $activityTypeId; $activity->adjustment = $balanceChange; - $activity->client_id = $client ? $client->id : 0; + $activity->client_id = $client ? $client->id : null; $activity->balance = $client ? ($client->balance + $balanceChange) : 0; $activity->notes = $notes ?: ''; diff --git a/app/Ninja/Repositories/ClientRepository.php b/app/Ninja/Repositories/ClientRepository.php index 9b41cc206a04..a4ea88091b44 100644 --- a/app/Ninja/Repositories/ClientRepository.php +++ b/app/Ninja/Repositories/ClientRepository.php @@ -2,6 +2,7 @@ namespace App\Ninja\Repositories; +use App\Jobs\PurgeClientData; use App\Events\ClientWasCreated; use App\Events\ClientWasUpdated; use App\Models\Client; @@ -75,6 +76,11 @@ class ClientRepository extends BaseRepository return $query; } + public function purge($client) + { + dispatch(new PurgeClientData($client)); + } + public function save($data, $client = null) { $publicId = isset($data['public_id']) ? $data['public_id'] : false; diff --git a/app/Ninja/Repositories/ExpenseRepository.php b/app/Ninja/Repositories/ExpenseRepository.php index dfda1ee70a31..62505625f11f 100644 --- a/app/Ninja/Repositories/ExpenseRepository.php +++ b/app/Ninja/Repositories/ExpenseRepository.php @@ -54,8 +54,8 @@ class ExpenseRepository extends BaseRepository ->leftJoin('expense_categories', 'expenses.expense_category_id', '=', 'expense_categories.id') ->where('expenses.account_id', '=', $accountid) ->where('contacts.deleted_at', '=', null) - ->where('vendors.deleted_at', '=', null) - ->where('clients.deleted_at', '=', null) + //->where('vendors.deleted_at', '=', null) + //->where('clients.deleted_at', '=', null) ->where(function ($query) { // handle when client isn't set $query->where('contacts.is_primary', '=', true) ->orWhere('contacts.is_primary', '=', null); diff --git a/app/Ninja/Repositories/NinjaRepository.php b/app/Ninja/Repositories/NinjaRepository.php index 968504b69a63..8ba3e711b018 100644 --- a/app/Ninja/Repositories/NinjaRepository.php +++ b/app/Ninja/Repositories/NinjaRepository.php @@ -16,6 +16,7 @@ class NinjaRepository $company = $account->company; $company->fill($data); + $company->plan_expires = $company->plan_expires ?: null; $company->save(); } } diff --git a/app/Ninja/Transformers/AccountTransformer.php b/app/Ninja/Transformers/AccountTransformer.php index 8e59e4946bd6..8c17763af1b1 100644 --- a/app/Ninja/Transformers/AccountTransformer.php +++ b/app/Ninja/Transformers/AccountTransformer.php @@ -237,6 +237,9 @@ class AccountTransformer extends EntityTransformer 'header_font_id' => (int) $account->header_font_id, 'body_font_id' => (int) $account->body_font_id, 'auto_convert_quote' => (bool) $account->auto_convert_quote, + 'auto_archive_quote' => (bool) $account->auto_archive_quote, + 'auto_archive_invoice' => (bool) $account->auto_archive_invoice, + 'auto_email_invoice' => (bool) $account->auto_email_invoice, 'all_pages_footer' => (bool) $account->all_pages_footer, 'all_pages_header' => (bool) $account->all_pages_header, 'show_currency_code' => (bool) $account->show_currency_code, @@ -272,6 +275,7 @@ class AccountTransformer extends EntityTransformer 'reset_counter_frequency_id' => (int) $account->reset_counter_frequency_id, 'payment_type_id' => (int) $account->payment_type_id, 'gateway_fee_enabled' => (bool) $account->gateway_fee_enabled, + 'send_item_details' => (bool) $account->send_item_details, 'reset_counter_date' => $account->reset_counter_date, 'custom_contact_label1' => $account->custom_contact_label1, 'custom_contact_label2' => $account->custom_contact_label2, diff --git a/app/Notifications/PaymentCreated.php b/app/Notifications/PaymentCreated.php new file mode 100644 index 000000000000..08ac7c7ef4f2 --- /dev/null +++ b/app/Notifications/PaymentCreated.php @@ -0,0 +1,76 @@ +invoice = $invoice; + $this->payment = $payment; + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * @return array + */ + public function via($notifiable) + { + return ['slack']; + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toSlack($notifiable) + { + $url = 'http://www.ninja.test/subscriptions/create'; + + return (new SlackMessage) + ->from(APP_NAME) + ->image('https://app.invoiceninja.com/favicon-v2.png') + ->content(trans('texts.received_new_payment')) + ->attachment(function ($attachment) { + $invoiceName = $this->invoice->present()->titledName; + $invoiceLink = $this->invoice->present()->multiAccountLink; + $attachment->title($invoiceName, $invoiceLink) + ->fields([ + trans('texts.client') => $this->invoice->client->getDisplayName(), + trans('texts.amount') => $this->payment->present()->amount, + ]); + }); + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray($notifiable) + { + return [ + // + ]; + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 5a501e891df9..f8eac7da90f2 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -27,6 +27,7 @@ class EventServiceProvider extends ServiceProvider 'App\Events\ClientWasDeleted' => [ 'App\Listeners\ActivityListener@deletedClient', 'App\Listeners\SubscriptionListener@deletedClient', + 'App\Listeners\HistoryListener@deletedClient', ], 'App\Events\ClientWasRestored' => [ 'App\Listeners\ActivityListener@restoredClient', @@ -54,6 +55,7 @@ class EventServiceProvider extends ServiceProvider 'App\Listeners\ActivityListener@deletedInvoice', 'App\Listeners\TaskListener@deletedInvoice', 'App\Listeners\ExpenseListener@deletedInvoice', + 'App\Listeners\HistoryListener@deletedInvoice', ], 'App\Events\InvoiceWasRestored' => [ 'App\Listeners\ActivityListener@restoredInvoice', @@ -89,6 +91,7 @@ class EventServiceProvider extends ServiceProvider ], 'App\Events\QuoteWasDeleted' => [ 'App\Listeners\ActivityListener@deletedQuote', + 'App\Listeners\HistoryListener@deletedQuote', ], 'App\Events\QuoteWasRestored' => [ 'App\Listeners\ActivityListener@restoredQuote', @@ -188,6 +191,7 @@ class EventServiceProvider extends ServiceProvider 'App\Events\TaskWasDeleted' => [ 'App\Listeners\ActivityListener@deletedTask', 'App\Listeners\SubscriptionListener@deletedTask', + 'App\Listeners\HistoryListener@deletedTask', ], // Vendor events @@ -219,6 +223,17 @@ class EventServiceProvider extends ServiceProvider 'App\Events\ExpenseWasDeleted' => [ 'App\Listeners\ActivityListener@deletedExpense', 'App\Listeners\SubscriptionListener@deletedExpense', + 'App\Listeners\HistoryListener@deletedExpense', + ], + + // Project events + 'App\Events\ProjectWasDeleted' => [ + 'App\Listeners\HistoryListener@deletedProject', + ], + + // Proposal events + 'App\Events\ProposalWasDeleted' => [ + 'App\Listeners\HistoryListener@deletedProposal', ], 'Illuminate\Queue\Events\JobExceptionOccurred' => [ diff --git a/app/Services/ImportService.php b/app/Services/ImportService.php index 7c927660b964..6b6ae78dbe24 100644 --- a/app/Services/ImportService.php +++ b/app/Services/ImportService.php @@ -393,12 +393,14 @@ class ImportService } } + /* // if the invoice number is blank we'll assign it if ($entityType == ENTITY_INVOICE && ! $data['invoice_number']) { $account = Auth::user()->account; $invoice = Invoice::createNew(); $data['invoice_number'] = $account->getNextNumber($invoice); } + */ if (EntityModel::validate($data, $entityType) !== true) { return false; diff --git a/app/Services/InvoiceService.php b/app/Services/InvoiceService.php index 282fd00a8558..dbaf86574a36 100644 --- a/app/Services/InvoiceService.php +++ b/app/Services/InvoiceService.php @@ -110,7 +110,14 @@ class InvoiceService extends BaseService */ public function convertQuote($quote) { - return $this->invoiceRepo->cloneInvoice($quote, $quote->id); + $account = $quote->account; + $invoice = $this->invoiceRepo->cloneInvoice($quote, $quote->id); + + if ($account->auto_archive_quote) { + $this->invoiceRepo->archive($quote); + } + + return $invoice; } /** @@ -141,6 +148,10 @@ class InvoiceService extends BaseService $quote->markApproved(); } + if ($account->auto_archive_quote) { + $this->invoiceRepo->archive($quote); + } + return $invitation->invitation_key; } diff --git a/app/Services/PaymentService.php b/app/Services/PaymentService.php index 386755926cbc..0e7ed3de7dc9 100644 --- a/app/Services/PaymentService.php +++ b/app/Services/PaymentService.php @@ -137,9 +137,11 @@ class PaymentService extends BaseService try { return $paymentDriver->completeOnsitePurchase(false, $paymentMethod); } catch (Exception $exception) { + $subject = trans('texts.auto_bill_failed', ['invoice_number' => $invoice->invoice_number]); + $message = sprintf('%s: %s', ucwords($paymentDriver->providerName()), $exception->getMessage()); + //$message .= $exception->getTraceAsString(); + Utils::logError($message, 'PHP', true); if (! Auth::check()) { - $subject = trans('texts.auto_bill_failed', ['invoice_number' => $invoice->invoice_number]); - $message = sprintf('%s: %s', ucwords($paymentDriver->providerName()), $exception->getMessage()); $mailer = app('App\Ninja\Mailers\UserMailer'); $mailer->sendMessage($invoice->user, $subject, $message, [ 'invoice' => $invoice diff --git a/app/Services/PushService.php b/app/Services/PushService.php index 1fd50d1a3acd..238b3f2099a5 100644 --- a/app/Services/PushService.php +++ b/app/Services/PushService.php @@ -75,7 +75,7 @@ class PushService { $devices = json_decode($account->devices, true); - if (count($devices) >= 1) { + if (count((array) $devices) >= 1) { return true; } else { return false; diff --git a/app/Services/TemplateService.php b/app/Services/TemplateService.php index 8ed901d406d3..ab85a2a0677c 100644 --- a/app/Services/TemplateService.php +++ b/app/Services/TemplateService.php @@ -30,8 +30,10 @@ class TemplateService // check if it's a proposal if ($invitation->proposal) { $invoice = $invitation->proposal->invoice; + $entityType = ENTITY_PROPOSAL; } else { $invoice = $invitation->invoice; + $entityType = $invoice->getEntityType(); } $contact = $invitation->contact; @@ -67,7 +69,7 @@ class TemplateService '$link' => $invitation->getLink(), '$password' => $passwordHTML, '$viewLink' => $invitation->getLink().'$password', - '$viewButton' => Form::emailViewButton($invitation->getLink(), $invoice->getEntityType()).'$password', + '$viewButton' => Form::emailViewButton($invitation->getLink(), $entityType).'$password', '$paymentLink' => $invitation->getLink('payment').'$password', '$paymentButton' => Form::emailPaymentButton($invitation->getLink('payment')).'$password', '$customClient1' => $client->custom_value1, diff --git a/composer.json b/composer.json index b7d93290c6c8..d448888ad9a1 100644 --- a/composer.json +++ b/composer.json @@ -13,7 +13,7 @@ } ], "require": { - "php": ">=7.0.0 <7.2", + "php": ">=7.0.0", "ext-gd": "*", "ext-gmp": "*", "anahkiasen/former": "4.*", @@ -24,7 +24,7 @@ "barryvdh/laravel-debugbar": "~2.2", "barryvdh/laravel-ide-helper": "~2.2", "cerdic/css-tidy": "~v1.5", - "chumper/datatable": "dev-develop#04ef2bf", + "chumper/datatable": "dev-add-back-options", "cleverit/ubl_invoice": "1.*", "codedge/laravel-selfupdater": "5.x-dev", "collizo4sky/omnipay-wepay": "dev-address-fix", @@ -34,24 +34,24 @@ "fzaninotto/faker": "^1.5", "gatepay/FedACHdir": "dev-master@dev", "google/apiclient": "^2.0", - "guzzlehttp/guzzle": "~6.0", + "guzzlehttp/guzzle": "^6.3", "intervention/image": "dev-master", - "invoiceninja/omnipay-collection": "0.6@dev", + "invoiceninja/omnipay-collection": "^0.9.0", "jaybizzle/laravel-crawler-detect": "1.*", "jlapp/swaggervel": "master-dev", - "jonnyw/php-phantomjs": "4.*", + "jonnyw/php-phantomjs": "dev-fixes", "laracasts/presenter": "dev-master", - "laravel/framework": "5.3.*", + "laravel/framework": "5.4.*", "laravel/legacy-encrypter": "^1.0", - "laravel/socialite": "~2.0", - "laravelcollective/bus": "5.3.*", - "laravelcollective/html": "5.3.*", + "laravel/socialite": "~3.0", + "laravel/tinker": "^1.0", + "laravelcollective/html": "5.4.*", "league/flysystem-aws-s3-v3": "~1.0", "league/flysystem-rackspace": "~1.0", "league/fractal": "0.13.*", "maatwebsite/excel": "~2.0", "mpdf/mpdf": "6.1.3", - "nwidart/laravel-modules": "^1.14", + "nwidart/laravel-modules": "1.*", "omnipay/authorizenet": "dev-solution-id as 2.5.0", "patricktalmadge/bootstrapper": "5.5.x", "pragmarx/google2fa-laravel": "^0.1.2", @@ -60,17 +60,17 @@ "simshaun/recurr": "dev-master", "symfony/css-selector": "~3.1", "turbo124/laravel-push-notification": "2.*", - "webpatser/laravel-countries": "dev-master", + "webpatser/laravel-countries": "dev-master#75992ad", "websight/l5-google-cloud-storage": "dev-master", "wepay/php-sdk": "^0.2", - "wildbit/laravel-postmark-provider": "dev-master#134f359" + "wildbit/postmark-php": "^2.5" }, "require-dev": { "symfony/dom-crawler": "~3.1", - "codeception/c3": "~2.0", - "codeception/codeception": "2.3.3", + "codeception/c3": "2.*", + "codeception/codeception": "2.*", "phpspec/phpspec": "~2.1", - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "~5.7" }, "autoload": { "classmap": [ @@ -98,10 +98,14 @@ }, "scripts": { "post-install-cmd": [ + "rm bootstrap/cache/compiled.php || true", + "php artisan view:clear", "php artisan clear-compiled", "php artisan optimize" ], "post-update-cmd": [ + "rm bootstrap/cache/compiled.php || true", + "php artisan view:clear", "php artisan clear-compiled", "php artisan optimize" ], @@ -148,7 +152,11 @@ }, { "type": "vcs", - "url": "https://github.com/hillelcoren/omnipay-authorizenet" + "url": "https://github.com/hillelcoren/datatable" + }, + { + "type": "vcs", + "url": "https://github.com/hillelcoren/php-phantomjs" } ] } diff --git a/composer.lock b/composer.lock index 7370febc379e..0fe0eefcf6d3 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "93dd175ac0d4991745c24edb65807e04", - "content-hash": "2fafcc49fe838509079aea7e46db843f", + "hash": "7090bedcce23dd1dcc592a0d3e544763", + "content-hash": "4ce866c804fd7e1b830c8ae1afa28846", "packages": [ { "name": "abdala/omnipay-pagseguro", @@ -393,16 +393,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.49.0", + "version": "3.52.23", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "b4a698296c5772a959b131481d11b6c1d7498a66" + "reference": "3ce95b96c217a699168d937c4ed700e6a27ec783" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/b4a698296c5772a959b131481d11b6c1d7498a66", - "reference": "b4a698296c5772a959b131481d11b6c1d7498a66", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/3ce95b96c217a699168d937c4ed700e6a27ec783", + "reference": "3ce95b96c217a699168d937c4ed700e6a27ec783", "shasum": "" }, "require": { @@ -469,7 +469,7 @@ "s3", "sdk" ], - "time": "2018-01-16 23:44:11" + "time": "2018-03-08 22:51:35" }, { "name": "bacon/bacon-qr-code", @@ -671,30 +671,30 @@ }, { "name": "barryvdh/laravel-ide-helper", - "version": "v2.4.1", + "version": "v2.4.3", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-ide-helper.git", - "reference": "2b1273c45e2f8df7a625563e2283a17c14f02ae8" + "reference": "5c304db44fba8e9c4aa0c09739e59f7be7736fdd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/2b1273c45e2f8df7a625563e2283a17c14f02ae8", - "reference": "2b1273c45e2f8df7a625563e2283a17c14f02ae8", + "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/5c304db44fba8e9c4aa0c09739e59f7be7736fdd", + "reference": "5c304db44fba8e9c4aa0c09739e59f7be7736fdd", "shasum": "" }, "require": { "barryvdh/reflection-docblock": "^2.0.4", - "illuminate/console": "^5.0,<5.6", - "illuminate/filesystem": "^5.0,<5.6", - "illuminate/support": "^5.0,<5.6", + "illuminate/console": "^5.0,<5.7", + "illuminate/filesystem": "^5.0,<5.7", + "illuminate/support": "^5.0,<5.7", "php": ">=5.4.0", "symfony/class-loader": "^2.3|^3.0" }, "require-dev": { "doctrine/dbal": "~2.3", - "illuminate/config": "^5.0,<5.6", - "illuminate/view": "^5.0,<5.6", + "illuminate/config": "^5.0,<5.7", + "illuminate/view": "^5.0,<5.7", "phpunit/phpunit": "4.*", "scrutinizer/ocular": "~1.1", "squizlabs/php_codesniffer": "~2.3" @@ -740,7 +740,7 @@ "phpstorm", "sublime" ], - "time": "2017-07-16 00:24:12" + "time": "2018-02-08 07:56:07" }, { "name": "barryvdh/reflection-docblock", @@ -793,16 +793,16 @@ }, { "name": "braintree/braintree_php", - "version": "3.26.1", + "version": "3.30.0", "source": { "type": "git", "url": "https://github.com/braintree/braintree_php.git", - "reference": "7f66ed17f38efd45904f920695b02603b091bae6" + "reference": "7053be17ec7cd3040d019779bdb5cd89a3b95a94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/braintree/braintree_php/zipball/7f66ed17f38efd45904f920695b02603b091bae6", - "reference": "7f66ed17f38efd45904f920695b02603b091bae6", + "url": "https://api.github.com/repos/braintree/braintree_php/zipball/7053be17ec7cd3040d019779bdb5cd89a3b95a94", + "reference": "7053be17ec7cd3040d019779bdb5cd89a3b95a94", "shasum": "" }, "require": { @@ -832,11 +832,55 @@ "authors": [ { "name": "Braintree", - "homepage": "http://www.braintreepayments.com" + "homepage": "https://www.braintreepayments.com" } ], "description": "Braintree PHP Client Library", - "time": "2017-12-14 00:08:17" + "time": "2018-03-20 20:14:04" + }, + { + "name": "bramdevries/omnipay-paymill", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/bramdevries/omnipay-paymill.git", + "reference": "df264a980b4b6005899f659d55b24d5c125d7e2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bramdevries/omnipay-paymill/zipball/df264a980b4b6005899f659d55b24d5c125d7e2e", + "reference": "df264a980b4b6005899f659d55b24d5c125d7e2e", + "shasum": "" + }, + "require": { + "omnipay/common": "~2.0" + }, + "require-dev": { + "omnipay/tests": "~2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Omnipay\\Paymill\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "authors": [ + { + "name": "Bram Devries", + "email": "bramdevries93@gmail.com" + } + ], + "description": "Paymill driver for the Omnipay payment processing library", + "keywords": [ + "gateway", + "merchant", + "omnipay", + "pay", + "payment", + "paymill" + ], + "time": "2014-12-14 17:00:43" }, { "name": "cardgate/omnipay-cardgate", @@ -977,16 +1021,16 @@ }, { "name": "chumper/datatable", - "version": "dev-develop", + "version": "dev-add-back-options", "source": { "type": "git", - "url": "https://github.com/Chumper/Datatable.git", - "reference": "04ef2bf" + "url": "https://github.com/hillelcoren/Datatable.git", + "reference": "5672e7395e85b27f18166a6446bcecdba9719381" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Chumper/Datatable/zipball/04ef2bf", - "reference": "04ef2bf", + "url": "https://api.github.com/repos/hillelcoren/Datatable/zipball/5672e7395e85b27f18166a6446bcecdba9719381", + "reference": "5672e7395e85b27f18166a6446bcecdba9719381", "shasum": "" }, "require": { @@ -1006,7 +1050,6 @@ "Chumper\\Datatable": "src/" } }, - "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -1026,62 +1069,10 @@ "jquery", "laravel" ], - "abandoned": "OpenSkill/Datatable", - "time": "2017-01-26 10:04:06" - }, - { - "name": "classpreloader/classpreloader", - "version": "3.2.0", - "source": { - "type": "git", - "url": "https://github.com/ClassPreloader/ClassPreloader.git", - "reference": "4729e438e0ada350f91148e7d4bb9809342575ff" + "support": { + "source": "https://github.com/hillelcoren/Datatable/tree/add-back-options" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ClassPreloader/ClassPreloader/zipball/4729e438e0ada350f91148e7d4bb9809342575ff", - "reference": "4729e438e0ada350f91148e7d4bb9809342575ff", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^1.0|^2.0|^3.0", - "php": ">=5.5.9" - }, - "require-dev": { - "phpunit/phpunit": "^4.8|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, - "autoload": { - "psr-4": { - "ClassPreloader\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - } - ], - "description": "Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case", - "keywords": [ - "autoload", - "class", - "preload" - ], - "time": "2017-12-10 11:40:39" + "time": "2018-02-22 18:37:06" }, { "name": "cleverit/ubl_invoice", @@ -2338,17 +2329,63 @@ "time": "2015-06-05 13:57:26" }, { - "name": "ezyang/htmlpurifier", - "version": "v4.9.3", + "name": "erusev/parsedown", + "version": "1.7.1", "source": { "type": "git", - "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "95e1bae3182efc0f3422896a3236e991049dac69" + "url": "https://github.com/erusev/parsedown.git", + "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/95e1bae3182efc0f3422896a3236e991049dac69", - "reference": "95e1bae3182efc0f3422896a3236e991049dac69", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", + "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, + "type": "library", + "autoload": { + "psr-0": { + "Parsedown": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "description": "Parser for Markdown.", + "homepage": "http://parsedown.org", + "keywords": [ + "markdown", + "parser" + ], + "time": "2018-03-08 01:11:30" + }, + { + "name": "ezyang/htmlpurifier", + "version": "v4.10.0", + "source": { + "type": "git", + "url": "https://github.com/ezyang/htmlpurifier.git", + "reference": "d85d39da4576a6934b72480be6978fb10c860021" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/d85d39da4576a6934b72480be6978fb10c860021", + "reference": "d85d39da4576a6934b72480be6978fb10c860021", "shasum": "" }, "require": { @@ -2382,7 +2419,7 @@ "keywords": [ "html" ], - "time": "2017-06-03 02:28:16" + "time": "2018-02-23 01:58:20" }, { "name": "firebase/php-jwt", @@ -2485,16 +2522,16 @@ }, { "name": "fruitcakestudio/omnipay-sisow", - "version": "v2.0.3", + "version": "v2.0.4", "source": { "type": "git", "url": "https://github.com/fruitcake/omnipay-sisow.git", - "reference": "adbe7e9f0887a7d807917a7d6b61d6d8b6d98b88" + "reference": "b0a20a4f1ee5e08f3e5b0796748a15cbe1aed1b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fruitcake/omnipay-sisow/zipball/adbe7e9f0887a7d807917a7d6b61d6d8b6d98b88", - "reference": "adbe7e9f0887a7d807917a7d6b61d6d8b6d98b88", + "url": "https://api.github.com/repos/fruitcake/omnipay-sisow/zipball/b0a20a4f1ee5e08f3e5b0796748a15cbe1aed1b4", + "reference": "b0a20a4f1ee5e08f3e5b0796748a15cbe1aed1b4", "shasum": "" }, "require": { @@ -2537,7 +2574,7 @@ "payment", "sisow" ], - "time": "2017-07-12 13:28:11" + "time": "2018-01-03 09:47:20" }, { "name": "fzaninotto/faker", @@ -2607,16 +2644,16 @@ }, { "name": "gocardless/gocardless-pro", - "version": "1.4.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/gocardless/gocardless-pro-php.git", - "reference": "38ecc74aed51d2135d6e0b5419d1449dcf1ff692" + "reference": "303c66fcfd381e216144b8407022b91cb1b00521" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/gocardless/gocardless-pro-php/zipball/38ecc74aed51d2135d6e0b5419d1449dcf1ff692", - "reference": "38ecc74aed51d2135d6e0b5419d1449dcf1ff692", + "url": "https://api.github.com/repos/gocardless/gocardless-pro-php/zipball/303c66fcfd381e216144b8407022b91cb1b00521", + "reference": "303c66fcfd381e216144b8407022b91cb1b00521", "shasum": "" }, "require": { @@ -2655,7 +2692,7 @@ "direct debit", "gocardless" ], - "time": "2017-12-04 16:46:06" + "time": "2018-02-21 12:56:52" }, { "name": "google/apiclient", @@ -2718,16 +2755,16 @@ }, { "name": "google/apiclient-services", - "version": "v0.42", + "version": "v0.49", "source": { "type": "git", "url": "https://github.com/google/google-api-php-client-services.git", - "reference": "873421bf7cd0cab613da792124db04e203ff196b" + "reference": "7552d7d1bb92e933fc93088014c8c2555c0feab6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/google/google-api-php-client-services/zipball/873421bf7cd0cab613da792124db04e203ff196b", - "reference": "873421bf7cd0cab613da792124db04e203ff196b", + "url": "https://api.github.com/repos/google/google-api-php-client-services/zipball/7552d7d1bb92e933fc93088014c8c2555c0feab6", + "reference": "7552d7d1bb92e933fc93088014c8c2555c0feab6", "shasum": "" }, "require": { @@ -2751,20 +2788,20 @@ "keywords": [ "google" ], - "time": "2018-01-13 00:23:28" + "time": "2018-03-04 00:24:05" }, { "name": "google/auth", - "version": "v1.2.0", + "version": "v1.2.1", "source": { "type": "git", "url": "https://github.com/google/google-auth-library-php.git", - "reference": "f3fc99fd621f339ee3d4de01bd6a709ed1396116" + "reference": "da0062d279c9459350808a4fb63dbc08b90d6b90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/google/google-auth-library-php/zipball/f3fc99fd621f339ee3d4de01bd6a709ed1396116", - "reference": "f3fc99fd621f339ee3d4de01bd6a709ed1396116", + "url": "https://api.github.com/repos/google/google-auth-library-php/zipball/da0062d279c9459350808a4fb63dbc08b90d6b90", + "reference": "da0062d279c9459350808a4fb63dbc08b90d6b90", "shasum": "" }, "require": { @@ -2778,7 +2815,7 @@ "require-dev": { "friendsofphp/php-cs-fixer": "^1.11", "guzzlehttp/promises": "0.1.1|^1.3", - "phpunit/phpunit": "^4.8.36", + "phpunit/phpunit": "^4.8.36|^5.7", "sebastian/comparator": ">=1.2.3" }, "type": "library", @@ -2798,26 +2835,25 @@ "google", "oauth2" ], - "time": "2017-12-06 21:27:53" + "time": "2018-01-24 18:28:42" }, { "name": "google/cloud", - "version": "v0.51.0", + "version": "v0.56.0", "source": { "type": "git", "url": "https://github.com/GoogleCloudPlatform/google-cloud-php.git", - "reference": "563469c033d82412fc5eaa0884e55c2ee0bcfe05" + "reference": "7136c7e12596a3461840cac916937e24462b2ad1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GoogleCloudPlatform/google-cloud-php/zipball/563469c033d82412fc5eaa0884e55c2ee0bcfe05", - "reference": "563469c033d82412fc5eaa0884e55c2ee0bcfe05", + "url": "https://api.github.com/repos/GoogleCloudPlatform/google-cloud-php/zipball/7136c7e12596a3461840cac916937e24462b2ad1", + "reference": "7136c7e12596a3461840cac916937e24462b2ad1", "shasum": "" }, "require": { - "google/auth": "~0.9|^1.0", - "google/gax": "^0.29", - "google/proto-client": "^0.29.0", + "google/gax": "^0.30", + "google/proto-client": "^0.33", "guzzlehttp/guzzle": "^5.3|^6.0", "guzzlehttp/psr7": "^1.2", "monolog/monolog": "~1", @@ -2827,32 +2863,34 @@ "rize/uri-template": "~0.3" }, "replace": { - "google/cloud-bigquery": "1.0.1", - "google/cloud-bigtable": "0.1.1", - "google/cloud-container": "0.1.1", - "google/cloud-core": "1.15.1", - "google/cloud-dataproc": "0.1.1", - "google/cloud-datastore": "1.2.1", - "google/cloud-debugger": "0.2.0", - "google/cloud-dlp": "0.4.3", - "google/cloud-error-reporting": "0.7.3", - "google/cloud-firestore": "0.3.4", - "google/cloud-language": "0.11.2", - "google/cloud-logging": "1.8.3", - "google/cloud-monitoring": "0.7.3", - "google/cloud-oslogin": "0.1.1", - "google/cloud-pubsub": "0.11.3", - "google/cloud-spanner": "1.0.1", - "google/cloud-speech": "0.10.2", - "google/cloud-storage": "1.3.2", - "google/cloud-trace": "0.5.1", - "google/cloud-translate": "1.1.0", - "google/cloud-videointelligence": "0.8.3", - "google/cloud-vision": "0.8.2" + "google/cloud-bigquery": "1.0.3", + "google/cloud-bigtable": "0.2.2", + "google/cloud-container": "0.2.2", + "google/cloud-core": "1.17.1", + "google/cloud-dataproc": "0.2.2", + "google/cloud-datastore": "1.3.1", + "google/cloud-debugger": "0.5.0", + "google/cloud-dlp": "0.5.3", + "google/cloud-error-reporting": "0.8.3", + "google/cloud-firestore": "0.5.1", + "google/cloud-language": "0.12.2", + "google/cloud-logging": "1.9.3", + "google/cloud-monitoring": "0.8.2", + "google/cloud-oslogin": "0.2.2", + "google/cloud-pubsub": "1.0.1", + "google/cloud-spanner": "1.2.0", + "google/cloud-speech": "0.11.2", + "google/cloud-storage": "1.3.4", + "google/cloud-trace": "0.6.2", + "google/cloud-translate": "1.1.2", + "google/cloud-videointelligence": "0.9.2", + "google/cloud-vision": "0.10.1" }, "require-dev": { "erusev/parsedown": "^1.6", + "google/cloud-tools": "^0.6", "league/json-guard": "^0.3", + "opis/closure": "^3.0", "phpdocumentor/reflection": "^3.0", "phpseclib/phpseclib": "^2", "phpunit/phpunit": "^4.8|^5.0", @@ -2863,6 +2901,7 @@ }, "suggest": { "google/cloud-bigquerydatatransfer": "Client library for the BigQuery Data Transfer API.", + "opis/closure": "May be used to serialize closures to process jobs in the batch daemon. Please require version ^3.", "phpseclib/phpseclib": "May be used in place of OpenSSL for creating signed Cloud Storage URLs. Please require version ^2." }, "bin": [ @@ -2873,7 +2912,7 @@ "extra": { "component": { "id": "google-cloud", - "target": "git@github.com:jdpedrie-gcp/google-cloud-php.git", + "target": "git@github.com:GoogleCloudPlatform/google-cloud-php.git", "path": "src", "entry": [ "Version.php", @@ -2928,26 +2967,28 @@ "translation", "vision" ], - "time": "2018-01-12 19:19:47" + "time": "2018-02-26 20:57:20" }, { "name": "google/gax", - "version": "0.29.0", + "version": "0.30.0", "source": { "type": "git", "url": "https://github.com/googleapis/gax-php.git", - "reference": "eb4787747f6c90cbe760a31801ef224ccf3a9b36" + "reference": "c16fe4fd7d32e21ffbeaeae27a3ec08ee0bd6121" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/gax-php/zipball/eb4787747f6c90cbe760a31801ef224ccf3a9b36", - "reference": "eb4787747f6c90cbe760a31801ef224ccf3a9b36", + "url": "https://api.github.com/repos/googleapis/gax-php/zipball/c16fe4fd7d32e21ffbeaeae27a3ec08ee0bd6121", + "reference": "c16fe4fd7d32e21ffbeaeae27a3ec08ee0bd6121", "shasum": "" }, "require": { - "google/auth": "~0.9|^1.0", + "google/auth": "^1.2.0", "google/protobuf": "^3.5.1", "grpc/grpc": "^1.4", + "guzzlehttp/promises": "^1.3", + "guzzlehttp/psr7": "^1.2", "php": ">=5.5" }, "require-dev": { @@ -2957,7 +2998,14 @@ "type": "library", "autoload": { "psr-4": { - "Google\\": "src", + "Google\\Api\\": "src/Api", + "Google\\ApiCore\\": "src/ApiCore", + "Google\\Cloud\\": "src/Cloud", + "Google\\Iam\\": "src/Iam", + "Google\\Jison\\": "src/Jison", + "Google\\LongRunning\\": "src/LongRunning", + "Google\\Rpc\\": "src/Rpc", + "Google\\Type\\": "src/Type", "GPBMetadata\\Google\\": "metadata" } }, @@ -2970,20 +3018,20 @@ "keywords": [ "google" ], - "time": "2017-12-28 17:31:08" + "time": "2018-01-22 21:49:54" }, { "name": "google/proto-client", - "version": "0.29.0", + "version": "0.33.0", "source": { "type": "git", "url": "https://github.com/googleapis/proto-client-php.git", - "reference": "47e52e5819426edff97c2831efe022b0141c44f1" + "reference": "d2b60e84886ab9770cc3fb695a514e15afdc8d82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/proto-client-php/zipball/47e52e5819426edff97c2831efe022b0141c44f1", - "reference": "47e52e5819426edff97c2831efe022b0141c44f1", + "url": "https://api.github.com/repos/googleapis/proto-client-php/zipball/d2b60e84886ab9770cc3fb695a514e15afdc8d82", + "reference": "d2b60e84886ab9770cc3fb695a514e15afdc8d82", "shasum": "" }, "require": { @@ -3010,20 +3058,20 @@ "keywords": [ "google" ], - "time": "2017-12-21 21:59:33" + "time": "2018-02-26 17:01:46" }, { "name": "google/protobuf", - "version": "v3.5.1.1", + "version": "v3.5.2", "source": { "type": "git", "url": "https://github.com/google/protobuf.git", - "reference": "860bd12fec5c69e6529565165532b3d5108a7d97" + "reference": "b5fbb742af122b565925987e65c08957739976a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/google/protobuf/zipball/860bd12fec5c69e6529565165532b3d5108a7d97", - "reference": "860bd12fec5c69e6529565165532b3d5108a7d97", + "url": "https://api.github.com/repos/google/protobuf/zipball/b5fbb742af122b565925987e65c08957739976a7", + "reference": "b5fbb742af122b565925987e65c08957739976a7", "shasum": "" }, "require": { @@ -3051,20 +3099,20 @@ "keywords": [ "proto" ], - "time": "2018-01-05 21:42:10" + "time": "2018-03-06 03:54:18" }, { "name": "grpc/grpc", - "version": "1.6.0", + "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/grpc/grpc-php.git", - "reference": "8d190d91ddb9d980f685d9caf79bca62d7edc1e6" + "reference": "a502df7fac0b392dde13ddf157062b5184d0688e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/grpc/grpc-php/zipball/8d190d91ddb9d980f685d9caf79bca62d7edc1e6", - "reference": "8d190d91ddb9d980f685d9caf79bca62d7edc1e6", + "url": "https://api.github.com/repos/grpc/grpc-php/zipball/a502df7fac0b392dde13ddf157062b5184d0688e", + "reference": "a502df7fac0b392dde13ddf157062b5184d0688e", "shasum": "" }, "require": { @@ -3092,7 +3140,7 @@ "keywords": [ "rpc" ], - "time": "2017-09-11 20:50:39" + "time": "2018-01-24 21:48:21" }, { "name": "guzzle/guzzle", @@ -3490,16 +3538,16 @@ }, { "name": "invoiceninja/omnipay-collection", - "version": "v0.6", + "version": "v0.9", "source": { "type": "git", "url": "https://github.com/invoiceninja/omnipay-collection.git", - "reference": "2ca215e97e3b436b26b0b8f52e865ed94eb61408" + "reference": "97ad152922664ff2ca8b5fcb6171ed053f865808" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/invoiceninja/omnipay-collection/zipball/2ca215e97e3b436b26b0b8f52e865ed94eb61408", - "reference": "2ca215e97e3b436b26b0b8f52e865ed94eb61408", + "url": "https://api.github.com/repos/invoiceninja/omnipay-collection/zipball/97ad152922664ff2ca8b5fcb6171ed053f865808", + "reference": "97ad152922664ff2ca8b5fcb6171ed053f865808", "shasum": "" }, "require": { @@ -3507,6 +3555,7 @@ "agmscode/omnipay-agms": "~1.0", "alfaproject/omnipay-skrill": "dev-master", "andreas22/omnipay-fasapay": "1.*", + "bramdevries/omnipay-paymill": "^1.0", "cardgate/omnipay-cardgate": "~2.0", "delatbabel/omnipay-fatzebra": "dev-master", "dercoder/omnipay-ecopayz": "~1.0", @@ -3526,7 +3575,7 @@ "mfauveau/omnipay-pacnet": "~2.0", "omnipay/2checkout": "dev-master#e9c079c2dde0d7ba461903b3b7bd5caf6dee1248", "omnipay/bitpay": "dev-master", - "omnipay/braintree": "~2.0@dev", + "omnipay/braintree": "^1.1", "omnipay/gocardless": "dev-master", "omnipay/mollie": "3.*", "omnipay/omnipay": "~2.3", @@ -3546,7 +3595,7 @@ } ], "description": "Collection of Omnipay drivers", - "time": "2018-01-17 13:51:24" + "time": "2018-03-25 11:44:45" }, { "name": "jakoch/phantomjs-installer", @@ -3678,16 +3727,16 @@ }, { "name": "jaybizzle/crawler-detect", - "version": "v1.2.55", + "version": "v1.2.60", "source": { "type": "git", "url": "https://github.com/JayBizzle/Crawler-Detect.git", - "reference": "e745d69502afc610ff993315e2607ad41e3bc13c" + "reference": "6e9abfe7100f1c8febfa600b3568192989f10c2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/e745d69502afc610ff993315e2607ad41e3bc13c", - "reference": "e745d69502afc610ff993315e2607ad41e3bc13c", + "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/6e9abfe7100f1c8febfa600b3568192989f10c2e", + "reference": "6e9abfe7100f1c8febfa600b3568192989f10c2e", "shasum": "" }, "require": { @@ -3723,7 +3772,7 @@ "crawlerdetect", "php crawler detect" ], - "time": "2018-01-05 07:59:11" + "time": "2018-03-05 20:50:06" }, { "name": "jaybizzle/laravel-crawler-detect", @@ -3894,20 +3943,20 @@ }, { "name": "jonnyw/php-phantomjs", - "version": "v4.5.1", + "version": "dev-fixes", "source": { "type": "git", - "url": "https://github.com/jonnnnyw/php-phantomjs.git", - "reference": "cf8d9a221f4c624aa1537c55a2e181f4b50367d7" + "url": "https://github.com/hillelcoren/php-phantomjs.git", + "reference": "4b62f0b1235b3ff4020c0362238d765de37b2795" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jonnnnyw/php-phantomjs/zipball/cf8d9a221f4c624aa1537c55a2e181f4b50367d7", - "reference": "cf8d9a221f4c624aa1537c55a2e181f4b50367d7", + "url": "https://api.github.com/repos/hillelcoren/php-phantomjs/zipball/4b62f0b1235b3ff4020c0362238d765de37b2795", + "reference": "4b62f0b1235b3ff4020c0362238d765de37b2795", "shasum": "" }, "require": { - "jakoch/phantomjs-installer": "2.1.1", + "jakoch/phantomjs-installer": "^2.1", "php": ">=5.3.0", "symfony/config": "~2.3|~3.0", "symfony/dependency-injection": "~2.3|~3.0", @@ -3929,7 +3978,14 @@ "src/" ] }, - "notification-url": "https://packagist.org/downloads/", + "scripts": { + "post-install-cmd": [ + "PhantomInstaller\\Installer::installPhantomJS" + ], + "post-update-cmd": [ + "PhantomInstaller\\Installer::installPhantomJS" + ] + }, "license": [ "MIT" ], @@ -3943,10 +3999,13 @@ "description": "A PHP wrapper for loading pages through PhantomJS", "keywords": [ "Headless Browser", - "phantomjs", - "testing" + "PhantomJS", + "Testing" ], - "time": "2016-06-28 16:00:15" + "support": { + "source": "https://github.com/hillelcoren/php-phantomjs/tree/fixes" + }, + "time": "2018-02-26 18:39:21" }, { "name": "justinbusschau/omnipay-secpay", @@ -4051,42 +4110,40 @@ }, { "name": "laravel/framework", - "version": "v5.3.31", + "version": "v5.4.36", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "e641e75fc5b26ad0ba8c19b7e83b08cad1d03b89" + "reference": "1062a22232071c3e8636487c86ec1ae75681bbf9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/e641e75fc5b26ad0ba8c19b7e83b08cad1d03b89", - "reference": "e641e75fc5b26ad0ba8c19b7e83b08cad1d03b89", + "url": "https://api.github.com/repos/laravel/framework/zipball/1062a22232071c3e8636487c86ec1ae75681bbf9", + "reference": "1062a22232071c3e8636487c86ec1ae75681bbf9", "shasum": "" }, "require": { - "classpreloader/classpreloader": "~3.0", - "doctrine/inflector": "~1.0", + "doctrine/inflector": "~1.1", + "erusev/parsedown": "~1.6", "ext-mbstring": "*", "ext-openssl": "*", - "jeremeamia/superclosure": "~2.2", "league/flysystem": "~1.0", "monolog/monolog": "~1.11", "mtdowling/cron-expression": "~1.0", "nesbot/carbon": "~1.20", "paragonie/random_compat": "~1.4|~2.0", "php": ">=5.6.4", - "psy/psysh": "0.7.*|0.8.*", "ramsey/uuid": "~3.0", "swiftmailer/swiftmailer": "~5.4", - "symfony/console": "3.1.*", - "symfony/debug": "3.1.*", - "symfony/finder": "3.1.*", - "symfony/http-foundation": "3.1.*", - "symfony/http-kernel": "3.1.*", - "symfony/process": "3.1.*", - "symfony/routing": "3.1.*", - "symfony/translation": "3.1.*", - "symfony/var-dumper": "3.1.*", + "symfony/console": "~3.2", + "symfony/debug": "~3.2", + "symfony/finder": "~3.2", + "symfony/http-foundation": "~3.2", + "symfony/http-kernel": "~3.2", + "symfony/process": "~3.2", + "symfony/routing": "~3.2", + "symfony/var-dumper": "~3.2", + "tijsverkoyen/css-to-inline-styles": "~2.2", "vlucas/phpdotenv": "~2.2" }, "replace": { @@ -4123,31 +4180,34 @@ }, "require-dev": { "aws/aws-sdk-php": "~3.0", + "doctrine/dbal": "~2.5", "mockery/mockery": "~0.9.4", "pda/pheanstalk": "~3.0", - "phpunit/phpunit": "~5.4", + "phpunit/phpunit": "~5.7", "predis/predis": "~1.0", - "symfony/css-selector": "3.1.*", - "symfony/dom-crawler": "3.1.*" + "symfony/css-selector": "~3.2", + "symfony/dom-crawler": "~3.2" }, "suggest": { "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.4).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.5).", "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~5.3|~6.0).", + "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", + "laravel/tinker": "Required to use the tinker console command (~1.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", + "nexmo/client": "Required to use the Nexmo transport (~1.0).", "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (3.1.*).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (3.1.*).", - "symfony/psr-http-message-bridge": "Required to use psr7 bridging features (0.2.*)." + "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.2).", + "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.2).", + "symfony/psr-http-message-bridge": "Required to psr7 bridging features (0.2.*)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.3-dev" + "dev-master": "5.4-dev" } }, "autoload": { @@ -4175,27 +4235,27 @@ "framework", "laravel" ], - "time": "2017-03-24 16:31:06" + "time": "2017-08-30 09:26:16" }, { "name": "laravel/legacy-encrypter", - "version": "v1.0.0", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/laravel/legacy-encrypter.git", - "reference": "4047fc1e6a9346501ba48ba3f79509534875dea3" + "reference": "0e53ea5051588e4e5de8d36b02f2b26335d0d987" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/legacy-encrypter/zipball/4047fc1e6a9346501ba48ba3f79509534875dea3", - "reference": "4047fc1e6a9346501ba48ba3f79509534875dea3", + "url": "https://api.github.com/repos/laravel/legacy-encrypter/zipball/0e53ea5051588e4e5de8d36b02f2b26335d0d987", + "reference": "0e53ea5051588e4e5de8d36b02f2b26335d0d987", "shasum": "" }, "require": { "ext-mbstring": "*", "ext-openssl": "*", - "illuminate/contracts": "5.3.*", - "illuminate/support": "5.3.*", + "illuminate/contracts": ">=5.3", + "illuminate/support": ">=5.3", "paragonie/random_compat": "~1.4|~2.0", "php": ">=5.5.9" }, @@ -4222,27 +4282,27 @@ ], "description": "The legacy version of the Laravel mcrypt encrypter.", "homepage": "http://laravel.com", - "time": "2016-08-03 21:22:03" + "time": "2017-05-24 13:23:35" }, { "name": "laravel/socialite", - "version": "v2.0.21", + "version": "v3.0.9", "source": { "type": "git", "url": "https://github.com/laravel/socialite.git", - "reference": "c4e4337e5b70149fdbefbb95b2c9e93d0749c413" + "reference": "fc1c8d415699e502f3e61cbc61e3250d5bd942eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/socialite/zipball/c4e4337e5b70149fdbefbb95b2c9e93d0749c413", - "reference": "c4e4337e5b70149fdbefbb95b2c9e93d0749c413", + "url": "https://api.github.com/repos/laravel/socialite/zipball/fc1c8d415699e502f3e61cbc61e3250d5bd942eb", + "reference": "fc1c8d415699e502f3e61cbc61e3250d5bd942eb", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "~5.0|~6.0", - "illuminate/contracts": "~5.0", - "illuminate/http": "~5.0", - "illuminate/support": "~5.0", + "guzzlehttp/guzzle": "~6.0", + "illuminate/contracts": "~5.4", + "illuminate/http": "~5.4", + "illuminate/support": "~5.4", "league/oauth1-client": "~1.0", "php": ">=5.4.0" }, @@ -4254,6 +4314,14 @@ "extra": { "branch-alias": { "dev-master": "3.0-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Socialite\\SocialiteServiceProvider" + ], + "aliases": { + "Socialite": "Laravel\\Socialite\\Facades\\Socialite" + } } }, "autoload": { @@ -4268,7 +4336,7 @@ "authors": [ { "name": "Taylor Otwell", - "email": "taylorotwell@gmail.com" + "email": "taylor@laravel.com" } ], "description": "Laravel wrapper around OAuth 1 & OAuth 2 libraries.", @@ -4276,37 +4344,50 @@ "laravel", "oauth" ], - "time": "2017-03-27 21:32:28" + "time": "2017-11-06 16:02:48" }, { - "name": "laravelcollective/bus", - "version": "v5.3.0", + "name": "laravel/tinker", + "version": "v1.0.5", "source": { "type": "git", - "url": "https://github.com/LaravelCollective/bus.git", - "reference": "720298af5ddaa09e1ddb846d02c2a911e92c3574" + "url": "https://github.com/laravel/tinker.git", + "reference": "94f6daf2131508cebd11cd6f8632ba586d7ecc41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/LaravelCollective/bus/zipball/720298af5ddaa09e1ddb846d02c2a911e92c3574", - "reference": "720298af5ddaa09e1ddb846d02c2a911e92c3574", + "url": "https://api.github.com/repos/laravel/tinker/zipball/94f6daf2131508cebd11cd6f8632ba586d7ecc41", + "reference": "94f6daf2131508cebd11cd6f8632ba586d7ecc41", "shasum": "" }, "require": { - "illuminate/container": "5.3.*", - "illuminate/contracts": "5.3.*", - "illuminate/pipeline": "5.3.*", - "illuminate/support": "5.3.*", - "php": ">=5.6.4" + "illuminate/console": "~5.1", + "illuminate/contracts": "~5.1", + "illuminate/support": "~5.1", + "php": ">=5.5.9", + "psy/psysh": "0.7.*|0.8.*", + "symfony/var-dumper": "~3.0|~4.0" }, "require-dev": { - "mockery/mockery": "~0.9.4", - "phpunit/phpunit": "~5.4" + "phpunit/phpunit": "~4.0|~5.0" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (~5.1)." }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, "autoload": { "psr-4": { - "Collective\\Bus\\": "src/" + "Laravel\\Tinker\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4316,41 +4397,42 @@ "authors": [ { "name": "Taylor Otwell", - "email": "taylorotwell@gmail.com" - }, - { - "name": "Adam Engebretson", - "email": "adam@laravelcollective.com" + "email": "taylor@laravel.com" } ], - "description": "The Laravel Bus (5.1) package for use in Laravel 5.3.", - "homepage": "http://laravelcollective.com", - "time": "2016-08-28 00:02:50" + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "time": "2018-03-06 17:34:36" }, { "name": "laravelcollective/html", - "version": "v5.3.2", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/LaravelCollective/html.git", - "reference": "299f3dccd61c3f6d89ebb9b10f36fb2a9aee5206" + "reference": "f04965dc688254f4c77f684ab0b42264f9eb9634" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/LaravelCollective/html/zipball/299f3dccd61c3f6d89ebb9b10f36fb2a9aee5206", - "reference": "299f3dccd61c3f6d89ebb9b10f36fb2a9aee5206", + "url": "https://api.github.com/repos/LaravelCollective/html/zipball/f04965dc688254f4c77f684ab0b42264f9eb9634", + "reference": "f04965dc688254f4c77f684ab0b42264f9eb9634", "shasum": "" }, "require": { - "illuminate/http": "5.3.*", - "illuminate/routing": "5.3.*", - "illuminate/session": "5.3.*", - "illuminate/support": "5.3.*", - "illuminate/view": "5.3.*", + "illuminate/http": "5.4.*", + "illuminate/routing": "5.4.*", + "illuminate/session": "5.4.*", + "illuminate/support": "5.4.*", + "illuminate/view": "5.4.*", "php": ">=5.6.4" }, "require-dev": { - "illuminate/database": "5.3.*", + "illuminate/database": "5.4.*", "mockery/mockery": "~0.9.4", "phpunit/phpunit": "~5.4" }, @@ -4379,20 +4461,20 @@ ], "description": "HTML and Form Builders for the Laravel Framework", "homepage": "http://laravelcollective.com", - "time": "2017-05-21 22:00:10" + "time": "2017-08-12 15:52:38" }, { "name": "league/flysystem", - "version": "1.0.41", + "version": "1.0.43", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "f400aa98912c561ba625ea4065031b7a41e5a155" + "reference": "1ce7cc142d906ba58dc54c82915d355a9191c8a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f400aa98912c561ba625ea4065031b7a41e5a155", - "reference": "f400aa98912c561ba625ea4065031b7a41e5a155", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/1ce7cc142d906ba58dc54c82915d355a9191c8a8", + "reference": "1ce7cc142d906ba58dc54c82915d355a9191c8a8", "shasum": "" }, "require": { @@ -4403,12 +4485,13 @@ }, "require-dev": { "ext-fileinfo": "*", - "mockery/mockery": "~0.9", - "phpspec/phpspec": "^2.2", - "phpunit/phpunit": "~4.8" + "phpspec/phpspec": "^3.4", + "phpunit/phpunit": "^5.7" }, "suggest": { "ext-fileinfo": "Required for MimeType", + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", @@ -4462,7 +4545,7 @@ "sftp", "storage" ], - "time": "2017-08-06 17:41:04" + "time": "2018-03-01 10:27:04" }, { "name": "league/flysystem-aws-s3-v3", @@ -4790,23 +4873,23 @@ }, { "name": "maatwebsite/excel", - "version": "2.1.24", + "version": "2.1.27", "source": { "type": "git", "url": "https://github.com/Maatwebsite/Laravel-Excel.git", - "reference": "bd71c9f462ea4a7945944691cc58acd2c85abd47" + "reference": "ea758fe5a9d33e0d88b40f099d1df652a0c99d38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Maatwebsite/Laravel-Excel/zipball/bd71c9f462ea4a7945944691cc58acd2c85abd47", - "reference": "bd71c9f462ea4a7945944691cc58acd2c85abd47", + "url": "https://api.github.com/repos/Maatwebsite/Laravel-Excel/zipball/ea758fe5a9d33e0d88b40f099d1df652a0c99d38", + "reference": "ea758fe5a9d33e0d88b40f099d1df652a0c99d38", "shasum": "" }, "require": { - "illuminate/cache": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*", - "illuminate/config": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*", - "illuminate/filesystem": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*", - "illuminate/support": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*", + "illuminate/cache": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*", + "illuminate/config": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*", + "illuminate/filesystem": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*", + "illuminate/support": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*", "jeremeamia/superclosure": "^2.3", "nesbot/carbon": "~1.0", "php": ">=5.5", @@ -4815,15 +4898,15 @@ }, "require-dev": { "mockery/mockery": "~1.0", - "orchestra/testbench": "3.1.*|3.2.*|3.3.*|3.4.*|3.5.*", + "orchestra/testbench": "3.1.*|3.2.*|3.3.*|3.4.*|3.5.*|3.6.*", "phpseclib/phpseclib": "~1.0", "phpunit/phpunit": "~4.0" }, "suggest": { - "illuminate/http": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*", - "illuminate/queue": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*", - "illuminate/routing": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*", - "illuminate/view": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*" + "illuminate/http": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*", + "illuminate/queue": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*", + "illuminate/routing": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*", + "illuminate/view": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*" }, "type": "library", "extra": { @@ -4846,7 +4929,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL" + "MIT" ], "authors": [ { @@ -4864,7 +4947,7 @@ "import", "laravel" ], - "time": "2018-01-10 11:58:11" + "time": "2018-03-09 13:14:19" }, { "name": "maximebf/debugbar", @@ -5355,25 +5438,25 @@ }, { "name": "nesbot/carbon", - "version": "1.22.1", + "version": "1.24.1", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc" + "reference": "ef12cbd8ba5ce624f0a6a95e0850c4cc13e71e41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", - "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ef12cbd8ba5ce624f0a6a95e0850c4cc13e71e41", + "reference": "ef12cbd8ba5ce624f0a6a95e0850c4cc13e71e41", "shasum": "" }, "require": { - "php": ">=5.3.0", - "symfony/translation": "~2.6 || ~3.0" + "php": ">=5.3.9", + "symfony/translation": "~2.6 || ~3.0 || ~4.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "~2", - "phpunit/phpunit": "~4.0 || ~5.0" + "phpunit/phpunit": "^4.8.35 || ^5.7" }, "type": "library", "extra": { @@ -5404,20 +5487,20 @@ "datetime", "time" ], - "time": "2017-01-16 07:55:07" + "time": "2018-03-09 15:49:34" }, { "name": "nikic/php-parser", - "version": "v3.1.3", + "version": "v3.1.5", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "579f4ce846734a1cf55d6a531d00ca07a43e3cda" + "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/579f4ce846734a1cf55d6a531d00ca07a43e3cda", - "reference": "579f4ce846734a1cf55d6a531d00ca07a43e3cda", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bb87e28e7d7b8d9a7fda231d37457c9210faf6ce", + "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce", "shasum": "" }, "require": { @@ -5455,7 +5538,7 @@ "parser", "php" ], - "time": "2017-12-26 14:43:21" + "time": "2018-02-28 20:30:58" }, { "name": "nwidart/laravel-modules", @@ -5703,7 +5786,7 @@ }, { "name": "omnipay/braintree", - "version": "dev-master", + "version": "v1.1.2", "source": { "type": "git", "url": "https://github.com/thephpleague/omnipay-braintree.git", @@ -6093,16 +6176,16 @@ }, { "name": "omnipay/eway", - "version": "v2.2.1", + "version": "v2.2.2", "source": { "type": "git", "url": "https://github.com/thephpleague/omnipay-eway.git", - "reference": "1c953630f7097bfdeed200b17a847015a4df5607" + "reference": "480153441ad2e7aff9c26cf55e398c88da3e7eb1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/omnipay-eway/zipball/1c953630f7097bfdeed200b17a847015a4df5607", - "reference": "1c953630f7097bfdeed200b17a847015a4df5607", + "url": "https://api.github.com/repos/thephpleague/omnipay-eway/zipball/480153441ad2e7aff9c26cf55e398c88da3e7eb1", + "reference": "480153441ad2e7aff9c26cf55e398c88da3e7eb1", "shasum": "" }, "require": { @@ -6146,7 +6229,7 @@ "pay", "payment" ], - "time": "2016-03-22 01:11:02" + "time": "2017-05-12 08:17:12" }, { "name": "omnipay/firstdata", @@ -6763,16 +6846,16 @@ }, { "name": "omnipay/payfast", - "version": "v2.1.3", + "version": "v2.2", "source": { "type": "git", "url": "https://github.com/thephpleague/omnipay-payfast.git", - "reference": "21741c7197509bfc295c0b9a944fcd7c1b3a0633" + "reference": "c3ff0de9d02c5ac1b502eefb29e6aa6f12a374d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/omnipay-payfast/zipball/21741c7197509bfc295c0b9a944fcd7c1b3a0633", - "reference": "21741c7197509bfc295c0b9a944fcd7c1b3a0633", + "url": "https://api.github.com/repos/thephpleague/omnipay-payfast/zipball/c3ff0de9d02c5ac1b502eefb29e6aa6f12a374d2", + "reference": "c3ff0de9d02c5ac1b502eefb29e6aa6f12a374d2", "shasum": "" }, "require": { @@ -6816,7 +6899,7 @@ "payfast", "payment" ], - "time": "2017-08-15 07:52:52" + "time": "2018-02-02 17:02:45" }, { "name": "omnipay/payflow", @@ -7343,24 +7426,24 @@ }, { "name": "paragonie/constant_time_encoding", - "version": "v2.2.0", + "version": "v2.2.2", "source": { "type": "git", "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "9e7d88e6e4015c2f06a3fa22f06e1d5faa77e6c4" + "reference": "eccf915f45f911bfb189d1d1638d940ec6ee6e33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/9e7d88e6e4015c2f06a3fa22f06e1d5faa77e6c4", - "reference": "9e7d88e6e4015c2f06a3fa22f06e1d5faa77e6c4", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/eccf915f45f911bfb189d1d1638d940ec6ee6e33", + "reference": "eccf915f45f911bfb189d1d1638d940ec6ee6e33", "shasum": "" }, "require": { "php": "^7" }, "require-dev": { - "phpunit/phpunit": "^6", - "vimeo/psalm": "^0.3|^1" + "phpunit/phpunit": "^6|^7", + "vimeo/psalm": "^1" }, "type": "library", "autoload": { @@ -7401,7 +7484,7 @@ "hex2bin", "rfc4648" ], - "time": "2017-09-22 14:55:37" + "time": "2018-03-10 19:47:49" }, { "name": "paragonie/random_compat", @@ -7565,20 +7648,21 @@ "xls", "xlsx" ], + "abandoned": "phpoffice/phpspreadsheet", "time": "2015-05-01 07:00:55" }, { "name": "phpseclib/phpseclib", - "version": "2.0.9", + "version": "2.0.10", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "c9a3fe35e20eb6eeaca716d6a23cde03f52d1558" + "reference": "d305b780829ea4252ed9400b3f5937c2c99b51d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/c9a3fe35e20eb6eeaca716d6a23cde03f52d1558", - "reference": "c9a3fe35e20eb6eeaca716d6a23cde03f52d1558", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/d305b780829ea4252ed9400b3f5937c2c99b51d4", + "reference": "d305b780829ea4252ed9400b3f5937c2c99b51d4", "shasum": "" }, "require": { @@ -7586,7 +7670,7 @@ }, "require-dev": { "phing/phing": "~2.7", - "phpunit/phpunit": "~4.0", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0", "sami/sami": "~2.0", "squizlabs/php_codesniffer": "~2.0" }, @@ -7657,7 +7741,7 @@ "x.509", "x509" ], - "time": "2017-11-29 06:38:08" + "time": "2018-02-19 04:29:13" }, { "name": "pragmarx/google2fa", @@ -8164,16 +8248,16 @@ }, { "name": "ramsey/uuid", - "version": "3.7.2", + "version": "3.7.3", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "bba83ad77bb9deb6d3c352a7361b818e415b221d" + "reference": "44abcdad877d9a46685a3a4d221e3b2c4b87cb76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/bba83ad77bb9deb6d3c352a7361b818e415b221d", - "reference": "bba83ad77bb9deb6d3c352a7361b818e415b221d", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/44abcdad877d9a46685a3a4d221e3b2c4b87cb76", + "reference": "44abcdad877d9a46685a3a4d221e3b2c4b87cb76", "shasum": "" }, "require": { @@ -8184,17 +8268,15 @@ "rhumsaa/uuid": "self.version" }, "require-dev": { - "apigen/apigen": "^4.1", "codeception/aspect-mock": "^1.0 | ~2.0.0", "doctrine/annotations": "~1.2.0", "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ^2.1", "ircmaxell/random-lib": "^1.1", "jakub-onderka/php-parallel-lint": "^0.9.0", - "mockery/mockery": "^0.9.4", + "mockery/mockery": "^0.9.9", "moontoast/math": "^1.1", "php-mock/php-mock-phpunit": "^0.3|^1.1", "phpunit/phpunit": "^4.7|^5.0", - "satooshi/php-coveralls": "^0.6.1", "squizlabs/php_codesniffer": "^2.3" }, "suggest": { @@ -8242,7 +8324,7 @@ "identifier", "uuid" ], - "time": "2018-01-13 22:22:03" + "time": "2018-01-20 00:28:24" }, { "name": "rize/uri-template", @@ -8294,17 +8376,19 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "a54d4cf91890993ee599c446e2eb3dba3f9eae32" + "reference": "664836e89c7ecad3dbaabc1572ea752c0d532d80" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/a54d4cf91890993ee599c446e2eb3dba3f9eae32", - "reference": "a54d4cf91890993ee599c446e2eb3dba3f9eae32", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/664836e89c7ecad3dbaabc1572ea752c0d532d80", + "reference": "664836e89c7ecad3dbaabc1572ea752c0d532d80", "shasum": "" }, "conflict": { + "3f/pygmentize": "<1.2", "adodb/adodb-php": "<5.20.6", "amphp/artax": "<1.0.6|>=2,<2.0.6", + "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99", "aws/aws-sdk-php": ">=3,<3.2.1", "bugsnag/bugsnag-laravel": ">=2,<2.0.2", "cakephp/cakephp": ">=1.3,<1.3.18|>=2,<2.4.99|>=2.5,<2.5.99|>=2.6,<2.6.12|>=2.7,<2.7.6|>=3,<3.0.15|>=3.1,<3.1.4", @@ -8313,9 +8397,10 @@ "codeigniter/framework": "<=3.0.6", "composer/composer": "<=1.0.0-alpha11", "contao-components/mediaelement": ">=2.14.2,<2.21.1", - "contao/core": ">=2,<3.5.31", + "contao/core": ">=2,<3.5.32", "contao/core-bundle": ">=4,<4.4.8", "contao/listing-bundle": ">=4,<4.4.8", + "contao/newsletter-bundle": ">=4,<4.1", "doctrine/annotations": ">=1,<1.2.7", "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1", @@ -8326,9 +8411,10 @@ "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1", "dompdf/dompdf": ">=0.6,<0.6.2", - "drupal/core": ">=8,<8.3.7", - "drupal/drupal": ">=8,<8.3.7", - "ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.2|>=5.4,<5.4.10.1|>=2017.8,<2017.8.1.1", + "drupal/core": ">=8,<8.4.5", + "drupal/drupal": ">=8,<8.4.5", + "erusev/parsedown": "<1.7", + "ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.3|>=5.4,<5.4.11.3|>=2017.8,<2017.8.1.1|>=2017.12,<2017.12.2.1", "firebase/php-jwt": "<2", "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", @@ -8348,21 +8434,27 @@ "onelogin/php-saml": "<2.10.4", "oro/crm": ">=1.7,<1.7.4", "oro/platform": ">=1.7,<1.7.4", + "padraic/humbug_get_contents": "<1.1.2", + "pagarme/pagarme-php": ">=0,<3", + "paragonie/random_compat": "<2", "phpmailer/phpmailer": ">=5,<5.2.24", "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3", "phpxmlrpc/extras": "<0.6.1", + "propel/propel": ">=2.0.0-alpha1,<=2.0.0-alpha7", + "propel/propel1": ">=1,<=1.7.1", "pusher/pusher-php-server": "<2.2.1", "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9", - "shopware/shopware": "<5.2.25", + "shopware/shopware": "<5.3.7", "silverstripe/cms": ">=3,<=3.0.11|>=3.1,<3.1.11", "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", "silverstripe/framework": ">=3,<3.3", "silverstripe/userforms": "<3", - "simplesamlphp/saml2": "<1.8.1|>=1.9,<1.9.1|>=1.10,<1.10.3|>=2,<2.3.3", - "simplesamlphp/simplesamlphp": "<1.14.16", + "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4", + "simplesamlphp/simplesamlphp": "<1.15.2", "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", "socalnick/scn-social-auth": "<1.15.2", "squizlabs/php_codesniffer": ">=1,<2.8.1", + "stormpath/sdk": ">=0,<9.9.99", "swiftmailer/swiftmailer": ">=4,<5.4.5", "symfony/dependency-injection": ">=2,<2.0.17", "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", @@ -8383,15 +8475,16 @@ "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", "thelia/backoffice-default-template": ">=2.1,<2.1.2", "thelia/thelia": ">=2.1,<2.1.2|>=2.1.0-beta1,<2.1.3", + "titon/framework": ">=0,<9.9.99", "twig/twig": "<1.20", "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.22|>=8,<8.7.5", "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5", "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4", "willdurand/js-translation-bundle": "<2.1.1", "yiisoft/yii": ">=1.1.14,<1.1.15", - "yiisoft/yii2": "<2.0.5", + "yiisoft/yii2": "<2.0.14", "yiisoft/yii2-bootstrap": "<2.0.4", - "yiisoft/yii2-dev": "<2.0.4", + "yiisoft/yii2-dev": "<2.0.14", "yiisoft/yii2-gii": "<2.0.4", "yiisoft/yii2-jui": "<2.0.4", "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", @@ -8431,7 +8524,7 @@ } ], "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", - "time": "2018-01-13 18:31:46" + "time": "2018-03-07 15:45:44" }, { "name": "sabre/uri", @@ -8602,12 +8695,12 @@ "source": { "type": "git", "url": "https://github.com/simshaun/recurr.git", - "reference": "7679f92be8e6046c40668b34dbf87000e4ab430f" + "reference": "bff55c3baa5ab905c8f49c325daa6e9fcfccbfc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simshaun/recurr/zipball/7679f92be8e6046c40668b34dbf87000e4ab430f", - "reference": "7679f92be8e6046c40668b34dbf87000e4ab430f", + "url": "https://api.github.com/repos/simshaun/recurr/zipball/bff55c3baa5ab905c8f49c325daa6e9fcfccbfc1", + "reference": "bff55c3baa5ab905c8f49c325daa6e9fcfccbfc1", "shasum": "" }, "require": { @@ -8624,8 +8717,9 @@ } }, "autoload": { - "psr-0": { - "Recurr": "src/" + "psr-4": { + "Recurr\\": "src/Recurr/", + "Recurr\\Test\\": "tests/" } }, "notification-url": "https://packagist.org/downloads/", @@ -8648,7 +8742,76 @@ "recurring", "rrule" ], - "time": "2017-11-13 18:18:52" + "time": "2018-01-17 18:53:01" + }, + { + "name": "sly/notification-pusher", + "version": "v2.3.5", + "source": { + "type": "git", + "url": "https://github.com/Ph3nol/NotificationPusher.git", + "reference": "fc6ab3e72f3d93e7dd3b1e1df883946d206a12ec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Ph3nol/NotificationPusher/zipball/fc6ab3e72f3d93e7dd3b1e1df883946d206a12ec", + "reference": "fc6ab3e72f3d93e7dd3b1e1df883946d206a12ec", + "shasum": "" + }, + "require": { + "doctrine/inflector": "1.*", + "php": ">=5.6", + "symfony/console": ">=2.3,<5", + "symfony/debug": ">=2.3,<5", + "symfony/filesystem": ">=2.3,<5", + "symfony/options-resolver": ">=2.3,<5", + "symfony/process": ">=2.3,<5", + "zendframework/zendservice-apple-apns": "~1.0", + "zendframework/zendservice-google-gcm": "~2.0" + }, + "require-dev": { + "atoum/atoum": "^3.1", + "atoum/stubs": "^2.5", + "atoum/visibility-extension": "^1.3", + "symfony/var-dumper": ">=2.3,<5" + }, + "bin": [ + "np" + ], + "type": "standalone", + "autoload": { + "psr-0": { + "Sly": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Cédric Dugat", + "email": "cedric@dugat.me" + }, + { + "name": "Contributors", + "homepage": "https://github.com/Ph3nol/NotificationPusher/contributors" + } + ], + "description": "Standalone PHP library for easy devices notifications push.", + "homepage": "https://github.com/Ph3nol/NotificationPusher", + "keywords": [ + "android", + "apns", + "apple", + "gcm", + "iphone", + "message", + "notification", + "push", + "pusher" + ], + "time": "2018-02-17 13:20:40" }, { "name": "softcommerce/omnipay-paytrace", @@ -8704,16 +8867,16 @@ }, { "name": "swiftmailer/swiftmailer", - "version": "v5.4.8", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "9a06dc570a0367850280eefd3f1dc2da45aef517" + "reference": "7ffc1ea296ed14bf8260b6ef11b80208dbadba91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/9a06dc570a0367850280eefd3f1dc2da45aef517", - "reference": "9a06dc570a0367850280eefd3f1dc2da45aef517", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/7ffc1ea296ed14bf8260b6ef11b80208dbadba91", + "reference": "7ffc1ea296ed14bf8260b6ef11b80208dbadba91", "shasum": "" }, "require": { @@ -8748,17 +8911,17 @@ } ], "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "http://swiftmailer.org", + "homepage": "https://swiftmailer.symfony.com", "keywords": [ "email", "mail", "mailer" ], - "time": "2017-05-01 15:54:03" + "time": "2018-01-23 07:37:21" }, { "name": "symfony/class-loader", - "version": "v3.4.3", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", @@ -8814,24 +8977,31 @@ }, { "name": "symfony/config", - "version": "v3.2.14", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "e5533fcc0b3dd377626153b2852707878f363728" + "reference": "05e10567b529476a006b00746c5f538f1636810e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/e5533fcc0b3dd377626153b2852707878f363728", - "reference": "e5533fcc0b3dd377626153b2852707878f363728", + "url": "https://api.github.com/repos/symfony/config/zipball/05e10567b529476a006b00746c5f538f1636810e", + "reference": "05e10567b529476a006b00746c5f538f1636810e", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/filesystem": "~2.8|~3.0" + "php": "^5.5.9|>=7.0.8", + "symfony/filesystem": "~2.8|~3.0|~4.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.3", + "symfony/finder": "<3.3" }, "require-dev": { - "symfony/yaml": "~3.0" + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/event-dispatcher": "~3.3|~4.0", + "symfony/finder": "~3.3|~4.0", + "symfony/yaml": "~3.0|~4.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -8839,7 +9009,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -8866,41 +9036,49 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2017-04-12 14:13:17" + "time": "2018-02-14 10:03:57" }, { "name": "symfony/console", - "version": "v3.1.10", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "047f16485d68c083bd5d9b73ff16f9cb9c1a9f52" + "reference": "067339e9b8ec30d5f19f5950208893ff026b94f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/047f16485d68c083bd5d9b73ff16f9cb9c1a9f52", - "reference": "047f16485d68c083bd5d9b73ff16f9cb9c1a9f52", + "url": "https://api.github.com/repos/symfony/console/zipball/067339e9b8ec30d5f19f5950208893ff026b94f7", + "reference": "067339e9b8ec30d5f19f5950208893ff026b94f7", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/debug": "~2.8|~3.0", + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0|~4.0", "symfony/polyfill-mbstring": "~1.0" }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, "require-dev": { "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0" + "symfony/config": "~3.3|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.3|~4.0" }, "suggest": { "psr/log": "For using the console logger", "symfony/event-dispatcher": "", + "symfony/lock": "", "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -8927,20 +9105,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2017-01-08 20:43:43" + "time": "2018-02-26 15:46:28" }, { "name": "symfony/css-selector", - "version": "v3.4.3", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "e66394bc7610e69279bfdb3ab11b4fe65403f556" + "reference": "544655f1fc078a9cd839fdda2b7b1e64627c826a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/e66394bc7610e69279bfdb3ab11b4fe65403f556", - "reference": "e66394bc7610e69279bfdb3ab11b4fe65403f556", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/544655f1fc078a9cd839fdda2b7b1e64627c826a", + "reference": "544655f1fc078a9cd839fdda2b7b1e64627c826a", "shasum": "" }, "require": { @@ -8980,37 +9158,36 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2018-01-03 07:37:34" + "time": "2018-02-03 14:55:07" }, { "name": "symfony/debug", - "version": "v3.1.10", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "c6661361626b3cf5cf2089df98b3b5006a197e85" + "reference": "9b1071f86e79e1999b3d3675d2e0e7684268b9bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/c6661361626b3cf5cf2089df98b3b5006a197e85", - "reference": "c6661361626b3cf5cf2089df98b3b5006a197e85", + "url": "https://api.github.com/repos/symfony/debug/zipball/9b1071f86e79e1999b3d3675d2e0e7684268b9bc", + "reference": "9b1071f86e79e1999b3d3675d2e0e7684268b9bc", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0" }, "conflict": { "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" }, "require-dev": { - "symfony/class-loader": "~2.8|~3.0", - "symfony/http-kernel": "~2.8|~3.0" + "symfony/http-kernel": "~2.8|~3.0|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -9037,43 +9214,51 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2017-01-28 00:04:57" + "time": "2018-02-28 21:49:22" }, { "name": "symfony/dependency-injection", - "version": "v3.2.14", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "d9f2e62e1a93d52ad4e4f6faaf66f6eef723d761" + "reference": "12e901abc1cb0d637a0e5abe9923471361d96b07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/d9f2e62e1a93d52ad4e4f6faaf66f6eef723d761", - "reference": "d9f2e62e1a93d52ad4e4f6faaf66f6eef723d761", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/12e901abc1cb0d637a0e5abe9923471361d96b07", + "reference": "12e901abc1cb0d637a0e5abe9923471361d96b07", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8", + "psr/container": "^1.0" }, "conflict": { - "symfony/yaml": "<3.2" + "symfony/config": "<3.3.7", + "symfony/finder": "<3.3", + "symfony/proxy-manager-bridge": "<3.4", + "symfony/yaml": "<3.4" + }, + "provide": { + "psr/container-implementation": "1.0" }, "require-dev": { - "symfony/config": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/yaml": "~3.2" + "symfony/config": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { "symfony/config": "", "symfony/expression-language": "For using expressions in service container configuration", + "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", "symfony/yaml": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -9100,20 +9285,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2017-07-28 15:22:55" + "time": "2018-03-04 03:54:53" }, { "name": "symfony/event-dispatcher", - "version": "v2.8.33", + "version": "v2.8.36", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "d64be24fc1eba62f9daace8a8918f797fc8e87cc" + "reference": "f5d2d7dcc33b89e20c2696ea9afcbddf6540081c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d64be24fc1eba62f9daace8a8918f797fc8e87cc", - "reference": "d64be24fc1eba62f9daace8a8918f797fc8e87cc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f5d2d7dcc33b89e20c2696ea9afcbddf6540081c", + "reference": "f5d2d7dcc33b89e20c2696ea9afcbddf6540081c", "shasum": "" }, "require": { @@ -9160,20 +9345,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2018-01-03 07:36:31" + "time": "2018-02-11 16:53:59" }, { "name": "symfony/filesystem", - "version": "v3.4.3", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "e078773ad6354af38169faf31c21df0f18ace03d" + "reference": "253a4490b528597aa14d2bf5aeded6f5e5e4a541" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/e078773ad6354af38169faf31c21df0f18ace03d", - "reference": "e078773ad6354af38169faf31c21df0f18ace03d", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/253a4490b528597aa14d2bf5aeded6f5e5e4a541", + "reference": "253a4490b528597aa14d2bf5aeded6f5e5e4a541", "shasum": "" }, "require": { @@ -9209,29 +9394,29 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2018-01-03 07:37:34" + "time": "2018-02-22 10:48:49" }, { "name": "symfony/finder", - "version": "v3.1.10", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "59687a255d1562f2c17b012418273862083d85f7" + "reference": "a479817ce0a9e4adfd7d39c6407c95d97c254625" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/59687a255d1562f2c17b012418273862083d85f7", - "reference": "59687a255d1562f2c17b012418273862083d85f7", + "url": "https://api.github.com/repos/symfony/finder/zipball/a479817ce0a9e4adfd7d39c6407c95d97c254625", + "reference": "a479817ce0a9e4adfd7d39c6407c95d97c254625", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -9258,33 +9443,34 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2017-01-02 20:31:54" + "time": "2018-03-05 18:28:11" }, { "name": "symfony/http-foundation", - "version": "v3.1.10", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "cef0ad49a2e90455cfc649522025b5a2929648c0" + "reference": "6f5935723c11b4125fc9927db6ad2feaa196e175" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/cef0ad49a2e90455cfc649522025b5a2929648c0", - "reference": "cef0ad49a2e90455cfc649522025b5a2929648c0", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6f5935723c11b4125fc9927db6ad2feaa196e175", + "reference": "6f5935723c11b4125fc9927db6ad2feaa196e175", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/polyfill-mbstring": "~1.1" + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php70": "~1.6" }, "require-dev": { - "symfony/expression-language": "~2.8|~3.0" + "symfony/expression-language": "~2.8|~3.0|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -9311,52 +9497,58 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2017-01-08 20:43:43" + "time": "2018-02-22 10:48:49" }, { "name": "symfony/http-kernel", - "version": "v3.1.10", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "c830387dec1b48c100473d10a6a356c3c3ae2a13" + "reference": "a443bbbd93682aa08e623fade4c94edd586ed2de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/c830387dec1b48c100473d10a6a356c3c3ae2a13", - "reference": "c830387dec1b48c100473d10a6a356c3c3ae2a13", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a443bbbd93682aa08e623fade4c94edd586ed2de", + "reference": "a443bbbd93682aa08e623fade4c94edd586ed2de", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0", - "symfony/debug": "~2.8|~3.0", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/http-foundation": "~2.8.13|~3.1.6|~3.2" + "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "^3.4.4|^4.0.4" }, "conflict": { - "symfony/config": "<2.8" + "symfony/config": "<2.8", + "symfony/dependency-injection": "<3.4.5|<4.0.5,>=4", + "symfony/var-dumper": "<3.3", + "twig/twig": "<1.34|<2.4,>=2" + }, + "provide": { + "psr/log-implementation": "1.0" }, "require-dev": { - "symfony/browser-kit": "~2.8|~3.0", + "psr/cache": "~1.0", + "symfony/browser-kit": "~2.8|~3.0|~4.0", "symfony/class-loader": "~2.8|~3.0", - "symfony/config": "~2.8|~3.0", - "symfony/console": "~2.8|~3.0", - "symfony/css-selector": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", - "symfony/dom-crawler": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/finder": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0", - "symfony/routing": "~2.8|~3.0", - "symfony/stopwatch": "~2.8|~3.0", - "symfony/templating": "~2.8|~3.0", - "symfony/translation": "~2.8|~3.0", - "symfony/var-dumper": "~2.8|~3.0" + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/console": "~2.8|~3.0|~4.0", + "symfony/css-selector": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "^3.4.5|^4.0.5", + "symfony/dom-crawler": "~2.8|~3.0|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/process": "~2.8|~3.0|~4.0", + "symfony/routing": "~3.4|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0", + "symfony/templating": "~2.8|~3.0|~4.0", + "symfony/translation": "~2.8|~3.0|~4.0", + "symfony/var-dumper": "~3.3|~4.0" }, "suggest": { "symfony/browser-kit": "", - "symfony/class-loader": "", "symfony/config": "", "symfony/console": "", "symfony/dependency-injection": "", @@ -9366,7 +9558,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -9393,20 +9585,20 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2017-01-28 02:53:17" + "time": "2018-03-05 19:41:07" }, { "name": "symfony/options-resolver", - "version": "v3.4.3", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "f31f4d3ce4eaf7597abc41bd5ba53d634c2fdb0e" + "reference": "f3109a6aedd20e35c3a33190e932c2b063b7b50e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/f31f4d3ce4eaf7597abc41bd5ba53d634c2fdb0e", - "reference": "f31f4d3ce4eaf7597abc41bd5ba53d634c2fdb0e", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/f3109a6aedd20e35c3a33190e932c2b063b7b50e", + "reference": "f3109a6aedd20e35c3a33190e932c2b063b7b50e", "shasum": "" }, "require": { @@ -9447,20 +9639,20 @@ "configuration", "options" ], - "time": "2018-01-03 07:37:34" + "time": "2018-01-11 07:56:07" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.6.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", - "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b", + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b", "shasum": "" }, "require": { @@ -9472,7 +9664,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -9506,20 +9698,20 @@ "portable", "shim" ], - "time": "2017-10-11 12:05:26" + "time": "2018-01-30 19:27:44" }, { "name": "symfony/polyfill-php56", - "version": "v1.6.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "265fc96795492430762c29be291a371494ba3a5b" + "reference": "ebc999ce5f14204c5150b9bd15f8f04e621409d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/265fc96795492430762c29be291a371494ba3a5b", - "reference": "265fc96795492430762c29be291a371494ba3a5b", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/ebc999ce5f14204c5150b9bd15f8f04e621409d8", + "reference": "ebc999ce5f14204c5150b9bd15f8f04e621409d8", "shasum": "" }, "require": { @@ -9529,7 +9721,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -9562,20 +9754,79 @@ "portable", "shim" ], - "time": "2017-10-11 12:05:26" + "time": "2018-01-30 19:27:44" }, { - "name": "symfony/polyfill-util", - "version": "v1.6.0", + "name": "symfony/polyfill-php70", + "version": "v1.7.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-util.git", - "reference": "6e719200c8e540e0c0effeb31f96bdb344b94176" + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "3532bfcd8f933a7816f3a0a59682fc404776600f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/6e719200c8e540e0c0effeb31f96bdb344b94176", - "reference": "6e719200c8e540e0c0effeb31f96bdb344b94176", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/3532bfcd8f933a7816f3a0a59682fc404776600f", + "reference": "3532bfcd8f933a7816f3a0a59682fc404776600f", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2018-01-30 19:27:44" + }, + { + "name": "symfony/polyfill-util", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-util.git", + "reference": "e17c808ec4228026d4f5a8832afa19be85979563" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/e17c808ec4228026d4f5a8832afa19be85979563", + "reference": "e17c808ec4228026d4f5a8832afa19be85979563", "shasum": "" }, "require": { @@ -9584,7 +9835,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -9614,29 +9865,29 @@ "polyfill", "shim" ], - "time": "2017-10-11 12:05:26" + "time": "2018-01-31 18:08:44" }, { "name": "symfony/process", - "version": "v3.1.10", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "2605753c5f8c531623d24d002825ebb1d6a22248" + "reference": "cc4aea21f619116aaf1c58016a944e4821c8e8af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/2605753c5f8c531623d24d002825ebb1d6a22248", - "reference": "2605753c5f8c531623d24d002825ebb1d6a22248", + "url": "https://api.github.com/repos/symfony/process/zipball/cc4aea21f619116aaf1c58016a944e4821c8e8af", + "reference": "cc4aea21f619116aaf1c58016a944e4821c8e8af", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -9663,36 +9914,39 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2017-01-21 17:13:55" + "time": "2018-02-12 17:55:00" }, { "name": "symfony/routing", - "version": "v3.1.10", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "f25581d4eb0a82962c291917f826166f0dcd8a9a" + "reference": "8773a9d52715f1a579576ce0e60213de34f5ef3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/f25581d4eb0a82962c291917f826166f0dcd8a9a", - "reference": "f25581d4eb0a82962c291917f826166f0dcd8a9a", + "url": "https://api.github.com/repos/symfony/routing/zipball/8773a9d52715f1a579576ce0e60213de34f5ef3e", + "reference": "8773a9d52715f1a579576ce0e60213de34f5ef3e", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "conflict": { - "symfony/config": "<2.8" + "symfony/config": "<2.8", + "symfony/dependency-injection": "<3.3", + "symfony/yaml": "<3.4" }, "require-dev": { "doctrine/annotations": "~1.0", "doctrine/common": "~2.2", "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/http-foundation": "~2.8|~3.0", - "symfony/yaml": "~2.8|~3.0" + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "~2.8|~3.0|~4.0", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { "doctrine/annotations": "For using the annotation loader", @@ -9705,7 +9959,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -9738,34 +9992,38 @@ "uri", "url" ], - "time": "2017-01-28 00:04:57" + "time": "2018-02-28 21:49:22" }, { "name": "symfony/translation", - "version": "v3.1.10", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "d5a20fab5f63f44c233c69b3041c3cb1d4945e45" + "reference": "80e19eaf12cbb546ac40384e5c55c36306823e57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/d5a20fab5f63f44c233c69b3041c3cb1d4945e45", - "reference": "d5a20fab5f63f44c233c69b3041c3cb1d4945e45", + "url": "https://api.github.com/repos/symfony/translation/zipball/80e19eaf12cbb546ac40384e5c55c36306823e57", + "reference": "80e19eaf12cbb546ac40384e5c55c36306823e57", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/config": "<2.8" + "symfony/config": "<2.8", + "symfony/dependency-injection": "<3.4", + "symfony/yaml": "<3.4" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/intl": "~2.8|~3.0", - "symfony/yaml": "~2.8|~3.0" + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/intl": "^2.8.18|^3.2.5|~4.0", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { "psr/log": "To use logging capability in translator", @@ -9775,7 +10033,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -9802,36 +10060,42 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2017-01-21 17:01:39" + "time": "2018-02-22 06:28:18" }, { "name": "symfony/var-dumper", - "version": "v3.1.10", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "16df11647e5b992d687cb4eeeb9a882d5f5c26b9" + "reference": "80964679d81da3d5618519e0e4be488c3d7ecd7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/16df11647e5b992d687cb4eeeb9a882d5f5c26b9", - "reference": "16df11647e5b992d687cb4eeeb9a882d5f5c26b9", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/80964679d81da3d5618519e0e4be488c3d7ecd7d", + "reference": "80964679d81da3d5618519e0e4be488c3d7ecd7d", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "symfony/polyfill-mbstring": "~1.0" }, + "conflict": { + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" + }, "require-dev": { - "twig/twig": "~1.20|~2.0" + "ext-iconv": "*", + "twig/twig": "~1.34|~2.4" }, "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", "ext-symfony_debug": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -9865,27 +10129,30 @@ "debug", "dump" ], - "time": "2017-01-24 13:02:38" + "time": "2018-02-22 17:29:24" }, { "name": "symfony/yaml", - "version": "v3.3.15", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "7c80d81b5805589be151b85b0df785f0dc3269cf" + "reference": "6af42631dcf89e9c616242c900d6c52bd53bd1bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/7c80d81b5805589be151b85b0df785f0dc3269cf", - "reference": "7c80d81b5805589be151b85b0df785f0dc3269cf", + "url": "https://api.github.com/repos/symfony/yaml/zipball/6af42631dcf89e9c616242c900d6c52bd53bd1bb", + "reference": "6af42631dcf89e9c616242c900d6c52bd53bd1bb", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8" }, + "conflict": { + "symfony/console": "<3.4" + }, "require-dev": { - "symfony/console": "~2.8|~3.0" + "symfony/console": "~3.4|~4.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -9893,7 +10160,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -9920,7 +10187,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-01-03 07:37:11" + "time": "2018-02-16 09:50:28" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -10017,22 +10284,22 @@ }, { "name": "turbo124/laravel-push-notification", - "version": "v2.0.0", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/turbo124/laravel-push-notification.git", - "reference": "10a2cf7702a90cdc3064eaa9a157b973ad69bfb3" + "reference": "96132aa4c7c8a6a3d411c4488f81aac50491a7bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/turbo124/laravel-push-notification/zipball/10a2cf7702a90cdc3064eaa9a157b973ad69bfb3", - "reference": "10a2cf7702a90cdc3064eaa9a157b973ad69bfb3", + "url": "https://api.github.com/repos/turbo124/laravel-push-notification/zipball/96132aa4c7c8a6a3d411c4488f81aac50491a7bd", + "reference": "96132aa4c7c8a6a3d411c4488f81aac50491a7bd", "shasum": "" }, "require": { "illuminate/support": "5.*", "php": ">=5.3.0", - "turbo124/notification-pusher": "3.*" + "sly/notification-pusher": "2.*" }, "type": "library", "autoload": { @@ -10055,71 +10322,7 @@ "notification", "push" ], - "time": "2017-01-09 08:49:59" - }, - { - "name": "turbo124/notification-pusher", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/turbo124/NotificationPusher.git", - "reference": "52e8298895ebbbaed3cd6b325057767f15c77b4c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/turbo124/NotificationPusher/zipball/52e8298895ebbbaed3cd6b325057767f15c77b4c", - "reference": "52e8298895ebbbaed3cd6b325057767f15c77b4c", - "shasum": "" - }, - "require": { - "doctrine/inflector": "~1.0", - "php": ">=5.5", - "symfony/console": "~2.3|~3.0", - "symfony/options-resolver": "~2.3|~3.0", - "symfony/process": "~2.3|~3.0", - "zendframework/zendservice-apple-apns": "^1.1.0", - "zendframework/zendservice-google-gcm": "1.*" - }, - "require-dev": { - "atoum/atoum": "dev-master" - }, - "bin": [ - "np" - ], - "type": "standalone", - "autoload": { - "psr-0": { - "Sly": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Cédric Dugat", - "email": "cedric@dugat.me" - }, - { - "name": "Contributors", - "homepage": "https://github.com/Ph3nol/NotificationPusher/contributors" - } - ], - "description": "Standalone PHP library for easy devices notifications push.", - "homepage": "https://github.com/Ph3nol/NotificationPusher", - "keywords": [ - "android", - "apns", - "apple", - "gcm", - "iphone", - "message", - "notification", - "push", - "pusher" - ], - "time": "2017-01-10 02:17:34" + "time": "2018-02-22 10:05:05" }, { "name": "twbs/bootstrap", @@ -10174,16 +10377,16 @@ }, { "name": "twig/twig", - "version": "v1.35.0", + "version": "v1.35.2", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "daa657073e55b0a78cce8fdd22682fddecc6385f" + "reference": "9c24f2cd39dc1906b76879e099970b7e53724601" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/daa657073e55b0a78cce8fdd22682fddecc6385f", - "reference": "daa657073e55b0a78cce8fdd22682fddecc6385f", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/9c24f2cd39dc1906b76879e099970b7e53724601", + "reference": "9c24f2cd39dc1906b76879e099970b7e53724601", "shasum": "" }, "require": { @@ -10235,7 +10438,7 @@ "keywords": [ "templating" ], - "time": "2017-09-27 18:06:46" + "time": "2018-03-03 16:21:29" }, { "name": "vink/omnipay-komoju", @@ -10341,12 +10544,12 @@ "source": { "type": "git", "url": "https://github.com/webpatser/laravel-countries.git", - "reference": "2568394dd6bcc983be190086576ff2715c236f42" + "reference": "75992ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webpatser/laravel-countries/zipball/2568394dd6bcc983be190086576ff2715c236f42", - "reference": "2568394dd6bcc983be190086576ff2715c236f42", + "url": "https://api.github.com/repos/webpatser/laravel-countries/zipball/75992ad", + "reference": "75992ad", "shasum": "" }, "require": { @@ -10496,59 +10699,25 @@ "time": "2015-08-14 19:42:37" }, { - "name": "wildbit/laravel-postmark-provider", - "version": "dev-master", + "name": "wildbit/postmark-php", + "version": "2.5.0", "source": { "type": "git", - "url": "https://github.com/wildbit/laravel-postmark-provider.git", - "reference": "134f359" + "url": "https://github.com/wildbit/postmark-php.git", + "reference": "10fbcc61216ddee5f944c3082d16a8c858a998ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wildbit/laravel-postmark-provider/zipball/134f359", - "reference": "134f359", - "shasum": "" - }, - "require": { - "illuminate/mail": "~5.2", - "wildbit/swiftmailer-postmark": "~2.0" - }, - "type": "library", - "autoload": { - "psr-0": { - "Postmark\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "An officially supported mail provider to send mail from Laravel through Postmark, see instructions for integrating it here: https://github.com/wildbit/laravel-postmark-provider/blob/master/README.md", - "time": "2017-01-19 19:52:38" - }, - { - "name": "wildbit/swiftmailer-postmark", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/wildbit/swiftmailer-postmark.git", - "reference": "fb49114bc8033b125f9d19473dc0741385131d84" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wildbit/swiftmailer-postmark/zipball/fb49114bc8033b125f9d19473dc0741385131d84", - "reference": "fb49114bc8033b125f9d19473dc0741385131d84", + "url": "https://api.github.com/repos/wildbit/postmark-php/zipball/10fbcc61216ddee5f944c3082d16a8c858a998ea", + "reference": "10fbcc61216ddee5f944c3082d16a8c858a998ea", "shasum": "" }, "require": { "guzzlehttp/guzzle": "~6.0", - "swiftmailer/swiftmailer": ">=4.1.5" + "php": ">=5.5.0" }, "require-dev": { - "phpunit/phpunit": "~4.5" - }, - "suggest": { - "wildbit/laravel-postmark-provider": "~1.0" + "phpunit/phpunit": "4.4.0" }, "type": "library", "autoload": { @@ -10560,14 +10729,8 @@ "license": [ "MIT" ], - "authors": [ - { - "name": "Postmark", - "email": "support@postmarkapp.com" - } - ], - "description": "A Swiftmailer Transport for Postmark.", - "time": "2017-04-18 14:24:10" + "description": "The officially supported client for Postmark (http://postmarkapp.com)", + "time": "2017-12-13 14:35:57" }, { "name": "zendframework/zend-escaper", @@ -10859,16 +11022,16 @@ }, { "name": "zendframework/zend-validator", - "version": "2.10.1", + "version": "2.10.2", "source": { "type": "git", "url": "https://github.com/zendframework/zend-validator.git", - "reference": "010084ddbd33299bf51ea6f0e07f8f4e8bd832a8" + "reference": "38109ed7d8e46cfa71bccbe7e6ca80cdd035f8c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/010084ddbd33299bf51ea6f0e07f8f4e8bd832a8", - "reference": "010084ddbd33299bf51ea6f0e07f8f4e8bd832a8", + "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/38109ed7d8e46cfa71bccbe7e6ca80cdd035f8c9", + "reference": "38109ed7d8e46cfa71bccbe7e6ca80cdd035f8c9", "shasum": "" }, "require": { @@ -10903,8 +11066,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.10-dev", - "dev-develop": "2.11-dev" + "dev-master": "2.10.x-dev", + "dev-develop": "2.11.x-dev" }, "zf": { "component": "Zend\\Validator", @@ -10926,7 +11089,7 @@ "validator", "zf2" ], - "time": "2017-08-22 14:19:23" + "time": "2018-02-01 17:05:33" }, { "name": "zendframework/zendservice-apple-apns", @@ -10973,31 +11136,30 @@ }, { "name": "zendframework/zendservice-google-gcm", - "version": "1.0.3", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/zendframework/ZendService_Google_Gcm.git", - "reference": "86d16e9dcb4d41677e6f691642856b3eb95a1073" + "reference": "617221cb04e75c05080ceec61f31c71566e0b999" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/ZendService_Google_Gcm/zipball/86d16e9dcb4d41677e6f691642856b3eb95a1073", - "reference": "86d16e9dcb4d41677e6f691642856b3eb95a1073", + "url": "https://api.github.com/repos/zendframework/ZendService_Google_Gcm/zipball/617221cb04e75c05080ceec61f31c71566e0b999", + "reference": "617221cb04e75c05080ceec61f31c71566e0b999", "shasum": "" }, "require": { - "php": ">=5.3.3", - "zendframework/zend-http": ">=2.0.0", - "zendframework/zend-json": ">=2.0.0" + "php": "^5.5 || ^7.0", + "zendframework/zend-http": "^2.0", + "zendframework/zend-json": "^2.0" }, "require-dev": { - "phpunit/phpunit": "3.7.*" + "phpunit/phpunit": "^4.8" }, "type": "library", "autoload": { - "psr-0": { - "ZendService\\Google\\Gcm\\": "library/", - "ZendService\\Google\\Exception\\": "library/" + "psr-4": { + "ZendService\\Google\\": "library/" } }, "notification-url": "https://packagist.org/downloads/", @@ -11005,7 +11167,7 @@ "BSD-3-Clause" ], "description": "OOP wrapper for Google Cloud Messaging", - "homepage": "http://packages.zendframework.com/", + "homepage": "https://github.com/zendframework/zendservice-google-gcm", "keywords": [ "gcm", "google", @@ -11013,7 +11175,7 @@ "push", "zf2" ], - "time": "2015-10-14 03:18:56" + "time": "2017-01-17 13:57:50" }, { "name": "zircote/swagger-php", @@ -11081,16 +11243,16 @@ "packages-dev": [ { "name": "behat/gherkin", - "version": "v4.4.5", + "version": "v4.5.1", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74" + "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/5c14cff4f955b17d20d088dec1bde61c0539ec74", - "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", + "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", "shasum": "" }, "require": { @@ -11136,20 +11298,20 @@ "gherkin", "parser" ], - "time": "2016-10-30 11:50:56" + "time": "2017-08-30 11:04:43" }, { "name": "codeception/c3", - "version": "2.0.14", + "version": "2.4.0", "source": { "type": "git", "url": "https://github.com/Codeception/c3.git", - "reference": "777e3b626d9a5ecdfea3eff3d3de437045b41c92" + "reference": "c7348bbc82da82834fe237c5fb754003ac0fe782" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/c3/zipball/777e3b626d9a5ecdfea3eff3d3de437045b41c92", - "reference": "777e3b626d9a5ecdfea3eff3d3de437045b41c92", + "url": "https://api.github.com/repos/Codeception/c3/zipball/c7348bbc82da82834fe237c5fb754003ac0fe782", + "reference": "c7348bbc82da82834fe237c5fb754003ac0fe782", "shasum": "" }, "require": { @@ -11186,65 +11348,62 @@ "code coverage", "codecoverage" ], - "time": "2017-10-29 23:14:30" + "time": "2018-02-19 11:27:45" }, { "name": "codeception/codeception", - "version": "2.3.3", + "version": "2.4.0", "source": { "type": "git", "url": "https://github.com/Codeception/Codeception.git", - "reference": "67cd520b4f20cdfc3a52d1a0022924125822a8e6" + "reference": "c50789a9a62cc0eefc0252e88a5f04f8c47b55f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/67cd520b4f20cdfc3a52d1a0022924125822a8e6", - "reference": "67cd520b4f20cdfc3a52d1a0022924125822a8e6", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/c50789a9a62cc0eefc0252e88a5f04f8c47b55f4", + "reference": "c50789a9a62cc0eefc0252e88a5f04f8c47b55f4", "shasum": "" }, "require": { - "behat/gherkin": "~4.4.0", + "behat/gherkin": "^4.4.0", + "codeception/phpunit-wrapper": "^6.0|^7.0", + "codeception/stub": "^1.0", "ext-json": "*", "ext-mbstring": "*", - "facebook/webdriver": ">=1.0.1 <2.0", + "facebook/webdriver": ">=1.1.3 <2.0", "guzzlehttp/guzzle": ">=4.1.4 <7.0", "guzzlehttp/psr7": "~1.0", "php": ">=5.4.0 <8.0", - "phpunit/php-code-coverage": ">=2.2.4 <6.0", - "phpunit/phpunit": ">4.8.20 <7.0", - "phpunit/phpunit-mock-objects": ">2.3 <5.0", - "sebastian/comparator": ">1.1 <3.0", - "sebastian/diff": "^1.4", - "stecman/symfony-console-completion": "^0.7.0", - "symfony/browser-kit": ">=2.7 <4.0", - "symfony/console": ">=2.7 <4.0", - "symfony/css-selector": ">=2.7 <4.0", - "symfony/dom-crawler": ">=2.7.5 <4.0", - "symfony/event-dispatcher": ">=2.7 <4.0", - "symfony/finder": ">=2.7 <4.0", - "symfony/yaml": ">=2.7 <4.0" + "symfony/browser-kit": ">=2.7 <5.0", + "symfony/console": ">=2.7 <5.0", + "symfony/css-selector": ">=2.7 <5.0", + "symfony/dom-crawler": ">=2.7 <5.0", + "symfony/event-dispatcher": ">=2.7 <5.0", + "symfony/finder": ">=2.7 <5.0", + "symfony/yaml": ">=2.7 <5.0" }, "require-dev": { "codeception/specify": "~0.3", "facebook/graph-sdk": "~5.3", "flow/jsonpath": "~0.2", - "league/factory-muffin": "^3.0", - "league/factory-muffin-faker": "^1.0", - "mongodb/mongodb": "^1.0", "monolog/monolog": "~1.8", "pda/pheanstalk": "~3.0", "php-amqplib/php-amqplib": "~2.4", "predis/predis": "^1.0", "squizlabs/php_codesniffer": "~2.0", + "symfony/process": ">=2.7 <5.0", "vlucas/phpdotenv": "^2.4.0" }, "suggest": { + "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module", + "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests", "codeception/specify": "BDD-style code blocks", "codeception/verify": "BDD-style assertions", "flow/jsonpath": "For using JSONPath in REST module", "league/factory-muffin": "For DataFactory module", "league/factory-muffin-faker": "For Faker support in DataFactory module", "phpseclib/phpseclib": "for SFTP option in FTP Module", + "stecman/symfony-console-completion": "For BASH autocompletion", "symfony/phpunit-bridge": "For phpunit-bridge support" }, "bin": [ @@ -11280,7 +11439,79 @@ "functional testing", "unit testing" ], - "time": "2017-06-02 00:22:30" + "time": "2018-02-27 00:09:12" + }, + { + "name": "codeception/phpunit-wrapper", + "version": "6.0.5", + "source": { + "type": "git", + "url": "https://github.com/Codeception/phpunit-wrapper.git", + "reference": "44e2100c300413a6b40cf8874ad402695010f443" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/44e2100c300413a6b40cf8874ad402695010f443", + "reference": "44e2100c300413a6b40cf8874ad402695010f443", + "shasum": "" + }, + "require": { + "phpunit/php-code-coverage": ">=2.2.4 <6.0", + "phpunit/phpunit": ">=4.8.28 <5.0.0 || >=5.6.3 <7.0", + "sebastian/comparator": ">1.1 <3.0", + "sebastian/diff": ">=1.4 <4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\PHPUnit\\": "src\\" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Davert", + "email": "davert.php@resend.cc" + } + ], + "description": "PHPUnit classes used by Codeception", + "time": "2018-02-19 13:24:40" + }, + { + "name": "codeception/stub", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Stub.git", + "reference": "95fb7a36b81890dd2e5163e7ab31310df6f1bb99" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Stub/zipball/95fb7a36b81890dd2e5163e7ab31310df6f1bb99", + "reference": "95fb7a36b81890dd2e5163e7ab31310df6f1bb99", + "shasum": "" + }, + "require": { + "phpunit/phpunit-mock-objects": ">2.3 <7.0" + }, + "require-dev": { + "phpunit/phpunit": ">=4.8 <8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", + "time": "2018-02-18 13:56:56" }, { "name": "doctrine/instantiator", @@ -11391,6 +11622,51 @@ ], "time": "2017-11-15 11:08:09" }, + { + "name": "myclabs/deep-copy", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^4.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2017-10-19 19:58:43" + }, { "name": "phpdocumentor/reflection-common", "version": "1.0.1", @@ -11447,16 +11723,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.2.0", + "version": "4.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "66465776cfc249844bde6d117abff1d22e06c2da" + "reference": "94fd0001232e47129dd3504189fa1c7225010d08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/66465776cfc249844bde6d117abff1d22e06c2da", - "reference": "66465776cfc249844bde6d117abff1d22e06c2da", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08", "shasum": "" }, "require": { @@ -11494,7 +11770,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-27 17:38:31" + "time": "2017-11-30 07:14:17" }, { "name": "phpdocumentor/type-resolver", @@ -11657,16 +11933,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.7.3", + "version": "1.7.5", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf" + "reference": "dfd6be44111a7c41c2e884a336cc4f461b3b2401" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", - "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/dfd6be44111a7c41c2e884a336cc4f461b3b2401", + "reference": "dfd6be44111a7c41c2e884a336cc4f461b3b2401", "shasum": "" }, "require": { @@ -11678,7 +11954,7 @@ }, "require-dev": { "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" }, "type": "library", "extra": { @@ -11716,43 +11992,44 @@ "spy", "stub" ], - "time": "2017-11-24 13:59:53" + "time": "2018-02-19 10:16:54" }, { "name": "phpunit/php-code-coverage", - "version": "2.2.4", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", - "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d", "shasum": "" }, "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "~1.3", - "sebastian/environment": "^1.3.2", - "sebastian/version": "~1.0" + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^5.6 || ^7.0", + "phpunit/php-file-iterator": "^1.3", + "phpunit/php-text-template": "^1.2", + "phpunit/php-token-stream": "^1.4.2 || ^2.0", + "sebastian/code-unit-reverse-lookup": "^1.0", + "sebastian/environment": "^1.3.2 || ^2.0", + "sebastian/version": "^1.0 || ^2.0" }, "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "~4" + "ext-xdebug": "^2.1.4", + "phpunit/phpunit": "^5.7" }, "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.2.1", - "ext-xmlwriter": "*" + "ext-xdebug": "^2.5.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { @@ -11778,7 +12055,7 @@ "testing", "xunit" ], - "time": "2015-10-06 15:47:00" + "time": "2017-04-02 07:44:40" }, { "name": "phpunit/php-file-iterator", @@ -11919,29 +12196,29 @@ }, { "name": "phpunit/php-token-stream", - "version": "1.4.12", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" + "reference": "791198a2c6254db10131eecfe8c06670700904db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", - "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "^6.2.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -11964,44 +12241,54 @@ "keywords": [ "tokenizer" ], - "time": "2017-12-04 08:55:13" + "time": "2017-11-27 05:48:46" }, { "name": "phpunit/phpunit", - "version": "4.8.36", + "version": "5.7.27", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" + "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", - "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c", + "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c", "shasum": "" }, "require": { "ext-dom": "*", "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=5.3.3", - "phpspec/prophecy": "^1.3.1", - "phpunit/php-code-coverage": "~2.1", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "~1.3", + "php": "^5.6 || ^7.0", + "phpspec/prophecy": "^1.6.2", + "phpunit/php-code-coverage": "^4.0.4", "phpunit/php-file-iterator": "~1.4", "phpunit/php-text-template": "~1.2", "phpunit/php-timer": "^1.0.6", - "phpunit/phpunit-mock-objects": "~2.3", - "sebastian/comparator": "~1.2.2", - "sebastian/diff": "~1.2", - "sebastian/environment": "~1.3", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/version": "~1.0", - "symfony/yaml": "~2.1|~3.0" + "phpunit/phpunit-mock-objects": "^3.2", + "sebastian/comparator": "^1.2.4", + "sebastian/diff": "^1.4.3", + "sebastian/environment": "^1.3.4 || ^2.0", + "sebastian/exporter": "~2.0", + "sebastian/global-state": "^1.1", + "sebastian/object-enumerator": "~2.0", + "sebastian/resource-operations": "~1.0", + "sebastian/version": "^1.0.6|^2.0.1", + "symfony/yaml": "~2.1|~3.0|~4.0" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2" + }, + "require-dev": { + "ext-pdo": "*" }, "suggest": { + "ext-xdebug": "*", "phpunit/php-invoker": "~1.1" }, "bin": [ @@ -12010,7 +12297,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.8.x-dev" + "dev-master": "5.7.x-dev" } }, "autoload": { @@ -12036,30 +12323,33 @@ "testing", "xunit" ], - "time": "2017-06-21 08:07:12" + "time": "2018-02-01 05:50:59" }, { "name": "phpunit/phpunit-mock-objects", - "version": "2.3.8", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", - "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118", + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", - "php": ">=5.3.3", - "phpunit/php-text-template": "~1.2", - "sebastian/exporter": "~1.2" + "php": "^5.6 || ^7.0", + "phpunit/php-text-template": "^1.2", + "sebastian/exporter": "^1.2 || ^2.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.0" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^5.4" }, "suggest": { "ext-soap": "*" @@ -12067,7 +12357,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3.x-dev" + "dev-master": "3.2.x-dev" } }, "autoload": { @@ -12092,7 +12382,52 @@ "mock", "xunit" ], - "time": "2015-10-02 06:51:40" + "time": "2017-06-30 09:13:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2017-03-04 06:30:41" }, { "name": "sebastian/comparator", @@ -12212,28 +12547,28 @@ }, { "name": "sebastian/environment", - "version": "1.3.8", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", - "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^5.6 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^4.8 || ^5.0" + "phpunit/phpunit": "^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -12258,25 +12593,25 @@ "environment", "hhvm" ], - "time": "2016-08-18 05:49:44" + "time": "2016-11-26 07:53:53" }, { "name": "sebastian/exporter", - "version": "1.2.2", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", "shasum": "" }, "require": { "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" + "sebastian/recursion-context": "~2.0" }, "require-dev": { "ext-mbstring": "*", @@ -12285,7 +12620,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -12325,7 +12660,7 @@ "export", "exporter" ], - "time": "2016-06-17 09:04:28" + "time": "2016-11-19 08:54:04" }, { "name": "sebastian/global-state", @@ -12379,17 +12714,63 @@ "time": "2015-10-12 03:26:01" }, { - "name": "sebastian/recursion-context", - "version": "1.0.5", + "name": "sebastian/object-enumerator", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", - "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-02-18 15:18:39" + }, + { + "name": "sebastian/recursion-context", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", "shasum": "" }, "require": { @@ -12401,7 +12782,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -12429,23 +12810,73 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2016-10-03 07:41:43" + "time": "2016-11-19 07:33:16" }, { - "name": "sebastian/version", - "version": "1.0.6", + "name": "sebastian/resource-operations", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", "shasum": "" }, + "require": { + "php": ">=5.6.0" + }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2015-07-28 20:34:47" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -12464,56 +12895,11 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2015-06-21 13:59:46" - }, - { - "name": "stecman/symfony-console-completion", - "version": "0.7.0", - "source": { - "type": "git", - "url": "https://github.com/stecman/symfony-console-completion.git", - "reference": "5461d43e53092b3d3b9dbd9d999f2054730f4bbb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/stecman/symfony-console-completion/zipball/5461d43e53092b3d3b9dbd9d999f2054730f4bbb", - "reference": "5461d43e53092b3d3b9dbd9d999f2054730f4bbb", - "shasum": "" - }, - "require": { - "php": ">=5.3.2", - "symfony/console": "~2.3 || ~3.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.6.x-dev" - } - }, - "autoload": { - "psr-4": { - "Stecman\\Component\\Symfony\\Console\\BashCompletion\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Stephen Holdaway", - "email": "stephen@stecman.co.nz" - } - ], - "description": "Automatic BASH completion for Symfony Console Component based applications.", - "time": "2016-02-24 05:08:54" + "time": "2016-10-03 07:35:21" }, { "name": "symfony/browser-kit", - "version": "v3.4.3", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", @@ -12570,16 +12956,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v3.4.3", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "09bd97b844b3151fab82f2fdd62db9c464b3910a" + "reference": "2bb5d3101cc01f4fe580e536daf4f1959bc2d24d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/09bd97b844b3151fab82f2fdd62db9c464b3910a", - "reference": "09bd97b844b3151fab82f2fdd62db9c464b3910a", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/2bb5d3101cc01f4fe580e536daf4f1959bc2d24d", + "reference": "2bb5d3101cc01f4fe580e536daf4f1959bc2d24d", "shasum": "" }, "require": { @@ -12622,20 +13008,20 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2018-01-03 07:37:34" + "time": "2018-02-22 10:48:49" }, { "name": "webmozart/assert", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + "reference": "0df1908962e7a3071564e857d86874dad1ef204a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", - "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", + "reference": "0df1908962e7a3071564e857d86874dad1ef204a", "shasum": "" }, "require": { @@ -12672,7 +13058,7 @@ "check", "validate" ], - "time": "2016-11-23 20:04:58" + "time": "2018-01-29 19:49:41" } ], "aliases": [ @@ -12691,15 +13077,14 @@ "digitickets/omnipay-gocardlessv2": 20, "gatepay/fedachdir": 20, "intervention/image": 20, - "invoiceninja/omnipay-collection": 20, "jlapp/swaggervel": 20, + "jonnyw/php-phantomjs": 20, "laracasts/presenter": 20, "omnipay/authorizenet": 20, "roave/security-advisories": 20, "simshaun/recurr": 20, "webpatser/laravel-countries": 20, - "websight/l5-google-cloud-storage": 20, - "wildbit/laravel-postmark-provider": 20 + "websight/l5-google-cloud-storage": 20 }, "prefer-stable": true, "prefer-lowest": false, diff --git a/config/app.php b/config/app.php index adcd953d58e3..4aa50f7bff2a 100644 --- a/config/app.php +++ b/config/app.php @@ -130,7 +130,7 @@ return [ 'Illuminate\Filesystem\FilesystemServiceProvider', 'Illuminate\Foundation\Providers\FoundationServiceProvider', 'Illuminate\Hashing\HashServiceProvider', - (isset($_ENV['POSTMARK_API_TOKEN']) ? 'Postmark\Adapters\LaravelMailProvider' : 'Illuminate\Mail\MailServiceProvider'), + 'Illuminate\Mail\MailServiceProvider', 'Illuminate\Pagination\PaginationServiceProvider', 'Illuminate\Pipeline\PipelineServiceProvider', 'Illuminate\Queue\QueueServiceProvider', @@ -149,7 +149,6 @@ return [ 'Bootstrapper\BootstrapperL5ServiceProvider', 'Former\FormerServiceProvider', 'Barryvdh\Debugbar\ServiceProvider', - 'Chumper\Datatable\DatatableServiceProvider', 'Intervention\Image\ImageServiceProvider', 'Webpatser\Countries\CountriesServiceProvider', 'Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider', @@ -162,6 +161,8 @@ return [ Nwidart\Modules\LaravelModulesServiceProvider::class, Barryvdh\Cors\ServiceProvider::class, PragmaRX\Google2FALaravel\ServiceProvider::class, + 'Chumper\Datatable\DatatableServiceProvider', + Laravel\Tinker\TinkerServiceProvider::class, /* * Application Service Providers... @@ -253,7 +254,6 @@ return [ 'Typeahead' => 'Bootstrapper\Facades\Typeahead', 'Typography' => 'Bootstrapper\Facades\Typography', 'Former' => 'Former\Facades\Former', - 'Datatable' => 'Chumper\Datatable\Facades\DatatableFacade', 'Omnipay' => 'Omnipay\Omnipay', 'CreditCard' => 'Omnipay\Common\CreditCard', 'Image' => 'Intervention\Image\Facades\Image', @@ -264,6 +264,7 @@ return [ 'Excel' => 'Maatwebsite\Excel\Facades\Excel', 'PushNotification' => 'Davibennun\LaravelPushNotification\Facades\PushNotification', 'Crawler' => 'Jaybizzle\LaravelCrawlerDetect\Facades\LaravelCrawlerDetect', + 'Datatable' => 'Chumper\Datatable\Facades\DatatableFacade', 'Updater' => Codedge\Updater\UpdaterFacade::class, 'Module' => Nwidart\Modules\Facades\Module::class, diff --git a/config/database.php b/config/database.php index 6864538968a7..da9fc36867f1 100644 --- a/config/database.php +++ b/config/database.php @@ -53,6 +53,7 @@ return [ 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), + 'port' => env('DB_PORT', '3306'), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', @@ -67,6 +68,7 @@ return [ 'database' => env('DB_DATABASE0', env('DB_DATABASE', 'forge')), 'username' => env('DB_USERNAME0', env('DB_USERNAME', 'forge')), 'password' => env('DB_PASSWORD0', env('DB_PASSWORD', '')), + 'port' => env('DB_PORT0', env('DB_PORT', '3306')), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', @@ -80,6 +82,7 @@ return [ 'database' => env('DB_DATABASE1', env('DB_DATABASE', 'forge')), 'username' => env('DB_USERNAME1', env('DB_USERNAME', 'forge')), 'password' => env('DB_PASSWORD1', env('DB_PASSWORD', '')), + 'port' => env('DB_PORT1', env('DB_PORT', '3306')), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', @@ -93,6 +96,7 @@ return [ 'database' => env('DB_DATABASE2', env('DB_DATABASE', 'forge')), 'username' => env('DB_USERNAME2', env('DB_USERNAME', 'forge')), 'password' => env('DB_PASSWORD2', env('DB_PASSWORD', '')), + 'port' => env('DB_PORT2', env('DB_PORT', '3306')), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', diff --git a/config/push-notification.php b/config/push-notification.php index 31e51edb88a9..adbe5f9f70a1 100644 --- a/config/push-notification.php +++ b/config/push-notification.php @@ -17,7 +17,7 @@ return [ 'ninjaAndroid' => [ 'environment' =>'production', 'apiKey' =>env('FCM_API_TOKEN'), - 'service' =>'fcm' + 'service' =>'gcm' ] ]; diff --git a/database/migrations/2018_03_08_150414_add_slack_notifications.php b/database/migrations/2018_03_08_150414_add_slack_notifications.php new file mode 100644 index 000000000000..5325e03c07a9 --- /dev/null +++ b/database/migrations/2018_03_08_150414_add_slack_notifications.php @@ -0,0 +1,112 @@ +integer('task_id')->unsigned()->change(); + $table->integer('client_id')->unsigned()->nullable()->change(); + }); + + DB::statement('UPDATE activities SET client_id = NULL WHERE client_id = 0'); + + Schema::table('activities', function ($table) { + $table->foreign('client_id')->references('id')->on('clients')->onDelete('cascade'); + $table->index('payment_id'); + }); + + Schema::table('users', function ($table) { + $table->string('slack_webhook_url')->nullable(); + $table->string('accepted_terms_version')->nullable(); + $table->timestamp('accepted_terms_timestamp')->nullable(); + $table->string('accepted_terms_ip')->nullable(); + }); + + Schema::table('accounts', function ($table) { + $table->boolean('auto_archive_invoice')->default(false)->nullable(); + $table->boolean('auto_archive_quote')->default(false)->nullable(); + $table->boolean('auto_email_invoice')->default(true)->nullable(); + $table->boolean('send_item_details')->default(false)->nullable(); + }); + + Schema::table('expenses', function ($table) { + $table->foreign('client_id')->references('id')->on('clients')->onDelete('cascade'); + }); + + Schema::table('companies', function ($table) { + $table->dropForeign('companies_payment_id_foreign'); + }); + + Schema::table('companies', function ($table) { + $table->index('payment_id'); + }); + + Schema::table('user_accounts', function ($table) { + $table->dropForeign('user_accounts_user_id1_foreign'); + $table->dropForeign('user_accounts_user_id2_foreign'); + $table->dropForeign('user_accounts_user_id3_foreign'); + $table->dropForeign('user_accounts_user_id4_foreign'); + $table->dropForeign('user_accounts_user_id5_foreign'); + }); + + Schema::table('user_accounts', function ($table) { + $table->index('user_id1'); + $table->index('user_id2'); + $table->index('user_id3'); + $table->index('user_id4'); + $table->index('user_id5'); + }); + + Schema::table('jobs', function (Blueprint $table) { + $table->dropIndex('jobs_queue_reserved_reserved_at_index'); + $table->dropColumn('reserved'); + $table->index(['queue', 'reserved_at']); + }); + + Schema::table('failed_jobs', function (Blueprint $table) { + $table->longText('exception')->after('payload'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function ($table) { + $table->dropColumn('slack_webhook_url'); + $table->dropColumn('accepted_terms_version'); + $table->dropColumn('accepted_terms_timestamp'); + $table->dropColumn('accepted_terms_ip'); + }); + + Schema::table('accounts', function ($table) { + $table->dropColumn('auto_archive_invoice'); + $table->dropColumn('auto_archive_quote'); + $table->dropColumn('auto_email_invoice'); + $table->dropColumn('send_item_details'); + }); + + Schema::table('jobs', function (Blueprint $table) { + $table->tinyInteger('reserved')->unsigned(); + $table->index(['queue', 'reserved', 'reserved_at']); + $table->dropIndex('jobs_queue_reserved_at_index'); + }); + + Schema::table('failed_jobs', function (Blueprint $table) { + $table->dropColumn('exception'); + }); + } +} diff --git a/database/seeds/CountriesSeeder.php b/database/seeds/CountriesSeeder.php index 826fe9ea901c..426deec1a2da 100644 --- a/database/seeds/CountriesSeeder.php +++ b/database/seeds/CountriesSeeder.php @@ -55,6 +55,10 @@ class CountriesSeeder extends Seeder 'BG' => [ // Belgium 'swap_currency_symbol' => true, ], + 'CA' => [ + 'thousand_separator' => ',', + 'decimal_separator' => '.', + ], 'CH' => [ 'swap_postal_code' => true, ], @@ -120,6 +124,10 @@ class CountriesSeeder extends Seeder 'LU' => [ 'swap_postal_code' => true, ], + 'MT' => [ + 'thousand_separator' => ',', + 'decimal_separator' => '.', + ], 'MY' => [ 'swap_postal_code' => true, ], diff --git a/database/seeds/CurrenciesSeeder.php b/database/seeds/CurrenciesSeeder.php index 18416e6dfe88..e4936de33b37 100644 --- a/database/seeds/CurrenciesSeeder.php +++ b/database/seeds/CurrenciesSeeder.php @@ -82,6 +82,7 @@ class CurrenciesSeeder extends Seeder ['name' => 'Ugandan Shilling', 'code' => 'UGX', 'symbol' => 'USh ', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], ['name' => 'Barbadian Dollar', 'code' => 'BBD', 'symbol' => '$', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], ['name' => 'Brunei Dollar', 'code' => 'BND', 'symbol' => 'B$', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], + ['name' => 'Georgian Lari', 'code' => 'GEL', 'symbol' => '', 'precision' => '2', 'thousand_separator' => ' ', 'decimal_separator' => ','], ]; foreach ($currencies as $currency) { diff --git a/database/seeds/PaymentLibrariesSeeder.php b/database/seeds/PaymentLibrariesSeeder.php index 89b3221b66ec..3dc53b918194 100644 --- a/database/seeds/PaymentLibrariesSeeder.php +++ b/database/seeds/PaymentLibrariesSeeder.php @@ -74,6 +74,7 @@ class PaymentLibrariesSeeder extends Seeder ['name' => 'FirstData Payeezy', 'provider' => 'FirstData_Payeezy'], ['name' => 'GoCardless', 'provider' => 'GoCardlessV2\Redirect', 'sort_order' => 9, 'is_offsite' => true], ['name' => 'PagSeguro', 'provider' => 'PagSeguro'], + ['name' => 'PAYMILL', 'provider' => 'Paymill'], ]; foreach ($gateways as $gateway) { diff --git a/database/setup.sql b/database/setup.sql index eecd25323af5..2ee03d956bef 100644 --- a/database/setup.sql +++ b/database/setup.sql @@ -376,6 +376,10 @@ CREATE TABLE `accounts` ( `enable_reminder4` tinyint(1) NOT NULL DEFAULT '0', `signature_on_pdf` tinyint(1) NOT NULL DEFAULT '0', `ubl_email_attachment` tinyint(1) NOT NULL DEFAULT '0', + `auto_archive_invoice` tinyint(1) DEFAULT '0', + `auto_archive_quote` tinyint(1) DEFAULT '0', + `auto_email_invoice` tinyint(1) DEFAULT '1', + `send_item_details` tinyint(1) DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `accounts_account_key_unique` (`account_key`), KEY `accounts_timezone_id_foreign` (`timezone_id`), @@ -428,7 +432,7 @@ CREATE TABLE `activities` ( `invoice_id` int(10) unsigned DEFAULT NULL, `credit_id` int(10) unsigned DEFAULT NULL, `invitation_id` int(10) unsigned DEFAULT NULL, - `task_id` int(11) DEFAULT NULL, + `task_id` int(10) unsigned DEFAULT NULL, `json_backup` text COLLATE utf8_unicode_ci, `activity_type_id` int(11) NOT NULL, `adjustment` decimal(13,2) DEFAULT NULL, @@ -441,7 +445,10 @@ CREATE TABLE `activities` ( PRIMARY KEY (`id`), KEY `activities_account_id_foreign` (`account_id`), KEY `activities_user_id_index` (`user_id`), - CONSTRAINT `activities_account_id_foreign` FOREIGN KEY (`account_id`) REFERENCES `accounts` (`id`) ON DELETE CASCADE + KEY `activities_client_id_foreign` (`client_id`), + KEY `activities_payment_id_index` (`payment_id`), + CONSTRAINT `activities_account_id_foreign` FOREIGN KEY (`account_id`) REFERENCES `accounts` (`id`) ON DELETE CASCADE, + CONSTRAINT `activities_client_id_foreign` FOREIGN KEY (`client_id`) REFERENCES `clients` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; @@ -702,8 +709,7 @@ CREATE TABLE `companies` ( `bluevine_status` enum('ignored','signed_up') COLLATE utf8_unicode_ci DEFAULT NULL, `referral_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`), - KEY `companies_payment_id_foreign` (`payment_id`), - CONSTRAINT `companies_payment_id_foreign` FOREIGN KEY (`payment_id`) REFERENCES `payments` (`id`) + KEY `companies_payment_id_index` (`payment_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; @@ -799,7 +805,7 @@ CREATE TABLE `countries` ( LOCK TABLES `countries` WRITE; /*!40000 ALTER TABLE `countries` DISABLE KEYS */; -INSERT INTO `countries` VALUES (4,'Kabul','Afghan','004','afghani','AFN','pul','Islamic Republic of Afghanistan','AF','AFG','Afghanistan','142','034',0,0,0,NULL,NULL),(8,'Tirana','Albanian','008','lek','ALL','(qindar (pl. qindarka))','Republic of Albania','AL','ALB','Albania','150','039',0,0,0,NULL,NULL),(10,'Antartica','of Antartica','010','','','','Antarctica','AQ','ATA','Antarctica','','',0,0,0,NULL,NULL),(12,'Algiers','Algerian','012','Algerian dinar','DZD','centime','People’s Democratic Republic of Algeria','DZ','DZA','Algeria','002','015',0,0,0,NULL,NULL),(16,'Pago Pago','American Samoan','016','US dollar','USD','cent','Territory of American','AS','ASM','American Samoa','009','061',0,0,0,NULL,NULL),(20,'Andorra la Vella','Andorran','020','euro','EUR','cent','Principality of Andorra','AD','AND','Andorra','150','039',0,0,0,NULL,NULL),(24,'Luanda','Angolan','024','kwanza','AOA','cêntimo','Republic of Angola','AO','AGO','Angola','002','017',0,0,0,NULL,NULL),(28,'St John’s','of Antigua and Barbuda','028','East Caribbean dollar','XCD','cent','Antigua and Barbuda','AG','ATG','Antigua and Barbuda','019','029',0,0,0,NULL,NULL),(31,'Baku','Azerbaijani','031','Azerbaijani manat','AZN','kepik (inv.)','Republic of Azerbaijan','AZ','AZE','Azerbaijan','142','145',0,0,0,NULL,NULL),(32,'Buenos Aires','Argentinian','032','Argentine peso','ARS','centavo','Argentine Republic','AR','ARG','Argentina','019','005',0,1,0,NULL,NULL),(36,'Canberra','Australian','036','Australian dollar','AUD','cent','Commonwealth of Australia','AU','AUS','Australia','009','053',0,0,0,NULL,NULL),(40,'Vienna','Austrian','040','euro','EUR','cent','Republic of Austria','AT','AUT','Austria','150','155',1,1,1,NULL,NULL),(44,'Nassau','Bahamian','044','Bahamian dollar','BSD','cent','Commonwealth of the Bahamas','BS','BHS','Bahamas','019','029',0,0,0,NULL,NULL),(48,'Manama','Bahraini','048','Bahraini dinar','BHD','fils (inv.)','Kingdom of Bahrain','BH','BHR','Bahrain','142','145',0,0,0,NULL,NULL),(50,'Dhaka','Bangladeshi','050','taka (inv.)','BDT','poisha (inv.)','People’s Republic of Bangladesh','BD','BGD','Bangladesh','142','034',0,0,0,NULL,NULL),(51,'Yerevan','Armenian','051','dram (inv.)','AMD','luma','Republic of Armenia','AM','ARM','Armenia','142','145',0,0,0,NULL,NULL),(52,'Bridgetown','Barbadian','052','Barbados dollar','BBD','cent','Barbados','BB','BRB','Barbados','019','029',0,0,0,NULL,NULL),(56,'Brussels','Belgian','056','euro','EUR','cent','Kingdom of Belgium','BE','BEL','Belgium','150','155',1,1,0,NULL,NULL),(60,'Hamilton','Bermudian','060','Bermuda dollar','BMD','cent','Bermuda','BM','BMU','Bermuda','019','021',0,0,0,NULL,NULL),(64,'Thimphu','Bhutanese','064','ngultrum (inv.)','BTN','chhetrum (inv.)','Kingdom of Bhutan','BT','BTN','Bhutan','142','034',0,0,0,NULL,NULL),(68,'Sucre (BO1)','Bolivian','068','boliviano','BOB','centavo','Plurinational State of Bolivia','BO','BOL','Bolivia, Plurinational State of','019','005',0,0,0,NULL,NULL),(70,'Sarajevo','of Bosnia and Herzegovina','070','convertible mark','BAM','fening','Bosnia and Herzegovina','BA','BIH','Bosnia and Herzegovina','150','039',0,0,0,NULL,NULL),(72,'Gaborone','Botswanan','072','pula (inv.)','BWP','thebe (inv.)','Republic of Botswana','BW','BWA','Botswana','002','018',0,0,0,NULL,NULL),(74,'Bouvet island','of Bouvet island','074','','','','Bouvet Island','BV','BVT','Bouvet Island','','',0,0,0,NULL,NULL),(76,'Brasilia','Brazilian','076','real (pl. reais)','BRL','centavo','Federative Republic of Brazil','BR','BRA','Brazil','019','005',0,0,0,NULL,NULL),(84,'Belmopan','Belizean','084','Belize dollar','BZD','cent','Belize','BZ','BLZ','Belize','019','013',0,0,0,NULL,NULL),(86,'Diego Garcia','Changosian','086','US dollar','USD','cent','British Indian Ocean Territory','IO','IOT','British Indian Ocean Territory','','',0,0,0,NULL,NULL),(90,'Honiara','Solomon Islander','090','Solomon Islands dollar','SBD','cent','Solomon Islands','SB','SLB','Solomon Islands','009','054',0,0,0,NULL,NULL),(92,'Road Town','British Virgin Islander;','092','US dollar','USD','cent','British Virgin Islands','VG','VGB','Virgin Islands, British','019','029',0,0,0,NULL,NULL),(96,'Bandar Seri Begawan','Bruneian','096','Brunei dollar','BND','sen (inv.)','Brunei Darussalam','BN','BRN','Brunei Darussalam','142','035',0,0,0,NULL,NULL),(100,'Sofia','Bulgarian','100','lev (pl. leva)','BGN','stotinka','Republic of Bulgaria','BG','BGR','Bulgaria','150','151',1,0,1,NULL,NULL),(104,'Yangon','Burmese','104','kyat','MMK','pya','Union of Myanmar/','MM','MMR','Myanmar','142','035',0,0,0,NULL,NULL),(108,'Bujumbura','Burundian','108','Burundi franc','BIF','centime','Republic of Burundi','BI','BDI','Burundi','002','014',0,0,0,NULL,NULL),(112,'Minsk','Belarusian','112','Belarusian rouble','BYR','kopek','Republic of Belarus','BY','BLR','Belarus','150','151',0,0,0,NULL,NULL),(116,'Phnom Penh','Cambodian','116','riel','KHR','sen (inv.)','Kingdom of Cambodia','KH','KHM','Cambodia','142','035',0,0,0,NULL,NULL),(120,'Yaoundé','Cameroonian','120','CFA franc (BEAC)','XAF','centime','Republic of Cameroon','CM','CMR','Cameroon','002','017',0,0,0,NULL,NULL),(124,'Ottawa','Canadian','124','Canadian dollar','CAD','cent','Canada','CA','CAN','Canada','019','021',0,0,0,NULL,NULL),(132,'Praia','Cape Verdean','132','Cape Verde escudo','CVE','centavo','Republic of Cape Verde','CV','CPV','Cape Verde','002','011',0,0,0,NULL,NULL),(136,'George Town','Caymanian','136','Cayman Islands dollar','KYD','cent','Cayman Islands','KY','CYM','Cayman Islands','019','029',0,0,0,NULL,NULL),(140,'Bangui','Central African','140','CFA franc (BEAC)','XAF','centime','Central African Republic','CF','CAF','Central African Republic','002','017',0,0,0,NULL,NULL),(144,'Colombo','Sri Lankan','144','Sri Lankan rupee','LKR','cent','Democratic Socialist Republic of Sri Lanka','LK','LKA','Sri Lanka','142','034',0,0,0,NULL,NULL),(148,'N’Djamena','Chadian','148','CFA franc (BEAC)','XAF','centime','Republic of Chad','TD','TCD','Chad','002','017',0,0,0,NULL,NULL),(152,'Santiago','Chilean','152','Chilean peso','CLP','centavo','Republic of Chile','CL','CHL','Chile','019','005',0,0,0,NULL,NULL),(156,'Beijing','Chinese','156','renminbi-yuan (inv.)','CNY','jiao (10)','People’s Republic of China','CN','CHN','China','142','030',0,0,0,NULL,NULL),(158,'Taipei','Taiwanese','158','new Taiwan dollar','TWD','fen (inv.)','Republic of China, Taiwan (TW1)','TW','TWN','Taiwan, Province of China','142','030',0,0,0,NULL,NULL),(162,'Flying Fish Cove','Christmas Islander','162','Australian dollar','AUD','cent','Christmas Island Territory','CX','CXR','Christmas Island','','',0,0,0,NULL,NULL),(166,'Bantam','Cocos Islander','166','Australian dollar','AUD','cent','Territory of Cocos (Keeling) Islands','CC','CCK','Cocos (Keeling) Islands','','',0,0,0,NULL,NULL),(170,'Santa Fe de Bogotá','Colombian','170','Colombian peso','COP','centavo','Republic of Colombia','CO','COL','Colombia','019','005',0,0,0,NULL,NULL),(174,'Moroni','Comorian','174','Comorian franc','KMF','','Union of the Comoros','KM','COM','Comoros','002','014',0,0,0,NULL,NULL),(175,'Mamoudzou','Mahorais','175','euro','EUR','cent','Departmental Collectivity of Mayotte','YT','MYT','Mayotte','002','014',0,0,0,NULL,NULL),(178,'Brazzaville','Congolese','178','CFA franc (BEAC)','XAF','centime','Republic of the Congo','CG','COG','Congo','002','017',0,0,0,NULL,NULL),(180,'Kinshasa','Congolese','180','Congolese franc','CDF','centime','Democratic Republic of the Congo','CD','COD','Congo, the Democratic Republic of the','002','017',0,0,0,NULL,NULL),(184,'Avarua','Cook Islander','184','New Zealand dollar','NZD','cent','Cook Islands','CK','COK','Cook Islands','009','061',0,0,0,NULL,NULL),(188,'San José','Costa Rican','188','Costa Rican colón (pl. colones)','CRC','céntimo','Republic of Costa Rica','CR','CRI','Costa Rica','019','013',0,0,0,NULL,NULL),(191,'Zagreb','Croatian','191','kuna (inv.)','HRK','lipa (inv.)','Republic of Croatia','HR','HRV','Croatia','150','039',1,0,1,NULL,NULL),(192,'Havana','Cuban','192','Cuban peso','CUP','centavo','Republic of Cuba','CU','CUB','Cuba','019','029',0,0,0,NULL,NULL),(196,'Nicosia','Cypriot','196','euro','EUR','cent','Republic of Cyprus','CY','CYP','Cyprus','142','145',1,0,0,NULL,NULL),(203,'Prague','Czech','203','Czech koruna (pl. koruny)','CZK','halér','Czech Republic','CZ','CZE','Czech Republic','150','151',1,0,1,NULL,NULL),(204,'Porto Novo (BJ1)','Beninese','204','CFA franc (BCEAO)','XOF','centime','Republic of Benin','BJ','BEN','Benin','002','011',0,0,0,NULL,NULL),(208,'Copenhagen','Danish','208','Danish krone','DKK','øre (inv.)','Kingdom of Denmark','DK','DNK','Denmark','150','154',1,1,0,NULL,NULL),(212,'Roseau','Dominican','212','East Caribbean dollar','XCD','cent','Commonwealth of Dominica','DM','DMA','Dominica','019','029',0,0,0,NULL,NULL),(214,'Santo Domingo','Dominican','214','Dominican peso','DOP','centavo','Dominican Republic','DO','DOM','Dominican Republic','019','029',0,0,0,NULL,NULL),(218,'Quito','Ecuadorian','218','US dollar','USD','cent','Republic of Ecuador','EC','ECU','Ecuador','019','005',0,0,0,NULL,NULL),(222,'San Salvador','Salvadoran','222','Salvadorian colón (pl. colones)','SVC','centavo','Republic of El Salvador','SV','SLV','El Salvador','019','013',0,0,0,NULL,NULL),(226,'Malabo','Equatorial Guinean','226','CFA franc (BEAC)','XAF','centime','Republic of Equatorial Guinea','GQ','GNQ','Equatorial Guinea','002','017',0,0,0,NULL,NULL),(231,'Addis Ababa','Ethiopian','231','birr (inv.)','ETB','cent','Federal Democratic Republic of Ethiopia','ET','ETH','Ethiopia','002','014',0,0,0,NULL,NULL),(232,'Asmara','Eritrean','232','nakfa','ERN','cent','State of Eritrea','ER','ERI','Eritrea','002','014',0,0,0,NULL,NULL),(233,'Tallinn','Estonian','233','euro','EUR','cent','Republic of Estonia','EE','EST','Estonia','150','154',1,0,1,NULL,NULL),(234,'Tórshavn','Faeroese','234','Danish krone','DKK','øre (inv.)','Faeroe Islands','FO','FRO','Faroe Islands','150','154',0,0,0,NULL,NULL),(238,'Stanley','Falkland Islander','238','Falkland Islands pound','FKP','new penny','Falkland Islands','FK','FLK','Falkland Islands (Malvinas)','019','005',0,0,0,NULL,NULL),(239,'King Edward Point (Grytviken)','of South Georgia and the South Sandwich Islands','239','','','','South Georgia and the South Sandwich Islands','GS','SGS','South Georgia and the South Sandwich Islands','','',0,0,0,NULL,NULL),(242,'Suva','Fijian','242','Fiji dollar','FJD','cent','Republic of Fiji','FJ','FJI','Fiji','009','054',0,0,0,NULL,NULL),(246,'Helsinki','Finnish','246','euro','EUR','cent','Republic of Finland','FI','FIN','Finland','150','154',1,1,1,NULL,NULL),(248,'Mariehamn','Åland Islander','248','euro','EUR','cent','Åland Islands','AX','ALA','Åland Islands','150','154',0,0,0,NULL,NULL),(250,'Paris','French','250','euro','EUR','cent','French Republic','FR','FRA','France','150','155',1,1,1,NULL,NULL),(254,'Cayenne','Guianese','254','euro','EUR','cent','French Guiana','GF','GUF','French Guiana','019','005',0,0,0,NULL,NULL),(258,'Papeete','Polynesian','258','CFP franc','XPF','centime','French Polynesia','PF','PYF','French Polynesia','009','061',0,0,0,NULL,NULL),(260,'Port-aux-Francais','of French Southern and Antarctic Lands','260','euro','EUR','cent','French Southern and Antarctic Lands','TF','ATF','French Southern Territories','','',0,0,0,NULL,NULL),(262,'Djibouti','Djiboutian','262','Djibouti franc','DJF','','Republic of Djibouti','DJ','DJI','Djibouti','002','014',0,0,0,NULL,NULL),(266,'Libreville','Gabonese','266','CFA franc (BEAC)','XAF','centime','Gabonese Republic','GA','GAB','Gabon','002','017',0,0,0,NULL,NULL),(268,'Tbilisi','Georgian','268','lari','GEL','tetri (inv.)','Georgia','GE','GEO','Georgia','142','145',0,0,0,NULL,NULL),(270,'Banjul','Gambian','270','dalasi (inv.)','GMD','butut','Republic of the Gambia','GM','GMB','Gambia','002','011',0,0,0,NULL,NULL),(275,NULL,'Palestinian','275',NULL,NULL,NULL,NULL,'PS','PSE','Palestinian Territory, Occupied','142','145',0,0,0,NULL,NULL),(276,'Berlin','German','276','euro','EUR','cent','Federal Republic of Germany','DE','DEU','Germany','150','155',1,1,1,NULL,NULL),(288,'Accra','Ghanaian','288','Ghana cedi','GHS','pesewa','Republic of Ghana','GH','GHA','Ghana','002','011',0,0,0,NULL,NULL),(292,'Gibraltar','Gibraltarian','292','Gibraltar pound','GIP','penny','Gibraltar','GI','GIB','Gibraltar','150','039',0,0,0,NULL,NULL),(296,'Tarawa','Kiribatian','296','Australian dollar','AUD','cent','Republic of Kiribati','KI','KIR','Kiribati','009','057',0,0,0,NULL,NULL),(300,'Athens','Greek','300','euro','EUR','cent','Hellenic Republic','GR','GRC','Greece','150','039',1,0,1,NULL,NULL),(304,'Nuuk','Greenlander','304','Danish krone','DKK','øre (inv.)','Greenland','GL','GRL','Greenland','019','021',0,1,0,NULL,NULL),(308,'St George’s','Grenadian','308','East Caribbean dollar','XCD','cent','Grenada','GD','GRD','Grenada','019','029',0,0,0,NULL,NULL),(312,'Basse Terre','Guadeloupean','312','euro','EUR','cent','Guadeloupe','GP','GLP','Guadeloupe','019','029',0,0,0,NULL,NULL),(316,'Agaña (Hagåtña)','Guamanian','316','US dollar','USD','cent','Territory of Guam','GU','GUM','Guam','009','057',0,0,0,NULL,NULL),(320,'Guatemala City','Guatemalan','320','quetzal (pl. quetzales)','GTQ','centavo','Republic of Guatemala','GT','GTM','Guatemala','019','013',0,0,0,NULL,NULL),(324,'Conakry','Guinean','324','Guinean franc','GNF','','Republic of Guinea','GN','GIN','Guinea','002','011',0,0,0,NULL,NULL),(328,'Georgetown','Guyanese','328','Guyana dollar','GYD','cent','Cooperative Republic of Guyana','GY','GUY','Guyana','019','005',0,0,0,NULL,NULL),(332,'Port-au-Prince','Haitian','332','gourde','HTG','centime','Republic of Haiti','HT','HTI','Haiti','019','029',0,0,0,NULL,NULL),(334,'Territory of Heard Island and McDonald Islands','of Territory of Heard Island and McDonald Islands','334','','','','Territory of Heard Island and McDonald Islands','HM','HMD','Heard Island and McDonald Islands','','',0,0,0,NULL,NULL),(336,'Vatican City','of the Holy See/of the Vatican','336','euro','EUR','cent','the Holy See/ Vatican City State','VA','VAT','Holy See (Vatican City State)','150','039',0,0,0,NULL,NULL),(340,'Tegucigalpa','Honduran','340','lempira','HNL','centavo','Republic of Honduras','HN','HND','Honduras','019','013',0,0,0,NULL,NULL),(344,'(HK3)','Hong Kong Chinese','344','Hong Kong dollar','HKD','cent','Hong Kong Special Administrative Region of the People’s Republic of China (HK2)','HK','HKG','Hong Kong','142','030',0,0,0,NULL,NULL),(348,'Budapest','Hungarian','348','forint (inv.)','HUF','(fillér (inv.))','Republic of Hungary','HU','HUN','Hungary','150','151',1,0,1,NULL,NULL),(352,'Reykjavik','Icelander','352','króna (pl. krónur)','ISK','','Republic of Iceland','IS','ISL','Iceland','150','154',0,1,1,NULL,NULL),(356,'New Delhi','Indian','356','Indian rupee','INR','paisa','Republic of India','IN','IND','India','142','034',0,0,0,NULL,NULL),(360,'Jakarta','Indonesian','360','Indonesian rupiah (inv.)','IDR','sen (inv.)','Republic of Indonesia','ID','IDN','Indonesia','142','035',0,0,0,NULL,NULL),(364,'Tehran','Iranian','364','Iranian rial','IRR','(dinar) (IR1)','Islamic Republic of Iran','IR','IRN','Iran, Islamic Republic of','142','034',0,0,0,NULL,NULL),(368,'Baghdad','Iraqi','368','Iraqi dinar','IQD','fils (inv.)','Republic of Iraq','IQ','IRQ','Iraq','142','145',0,0,0,NULL,NULL),(372,'Dublin','Irish','372','euro','EUR','cent','Ireland (IE1)','IE','IRL','Ireland','150','154',1,0,0,',','.'),(376,'(IL1)','Israeli','376','shekel','ILS','agora','State of Israel','IL','ISR','Israel','142','145',0,1,0,NULL,NULL),(380,'Rome','Italian','380','euro','EUR','cent','Italian Republic','IT','ITA','Italy','150','039',1,1,1,NULL,NULL),(384,'Yamoussoukro (CI1)','Ivorian','384','CFA franc (BCEAO)','XOF','centime','Republic of Côte d’Ivoire','CI','CIV','Côte d\'Ivoire','002','011',0,0,0,NULL,NULL),(388,'Kingston','Jamaican','388','Jamaica dollar','JMD','cent','Jamaica','JM','JAM','Jamaica','019','029',0,0,0,NULL,NULL),(392,'Tokyo','Japanese','392','yen (inv.)','JPY','(sen (inv.)) (JP1)','Japan','JP','JPN','Japan','142','030',0,1,1,NULL,NULL),(398,'Astana','Kazakh','398','tenge (inv.)','KZT','tiyn','Republic of Kazakhstan','KZ','KAZ','Kazakhstan','142','143',0,0,0,NULL,NULL),(400,'Amman','Jordanian','400','Jordanian dinar','JOD','100 qirsh','Hashemite Kingdom of Jordan','JO','JOR','Jordan','142','145',0,0,0,NULL,NULL),(404,'Nairobi','Kenyan','404','Kenyan shilling','KES','cent','Republic of Kenya','KE','KEN','Kenya','002','014',0,0,0,NULL,NULL),(408,'Pyongyang','North Korean','408','North Korean won (inv.)','KPW','chun (inv.)','Democratic People’s Republic of Korea','KP','PRK','Korea, Democratic People\'s Republic of','142','030',0,0,0,NULL,NULL),(410,'Seoul','South Korean','410','South Korean won (inv.)','KRW','(chun (inv.))','Republic of Korea','KR','KOR','Korea, Republic of','142','030',0,0,0,NULL,NULL),(414,'Kuwait City','Kuwaiti','414','Kuwaiti dinar','KWD','fils (inv.)','State of Kuwait','KW','KWT','Kuwait','142','145',0,0,0,NULL,NULL),(417,'Bishkek','Kyrgyz','417','som','KGS','tyiyn','Kyrgyz Republic','KG','KGZ','Kyrgyzstan','142','143',0,0,0,NULL,NULL),(418,'Vientiane','Lao','418','kip (inv.)','LAK','(at (inv.))','Lao People’s Democratic Republic','LA','LAO','Lao People\'s Democratic Republic','142','035',0,0,0,NULL,NULL),(422,'Beirut','Lebanese','422','Lebanese pound','LBP','(piastre)','Lebanese Republic','LB','LBN','Lebanon','142','145',0,0,0,NULL,NULL),(426,'Maseru','Basotho','426','loti (pl. maloti)','LSL','sente','Kingdom of Lesotho','LS','LSO','Lesotho','002','018',0,0,0,NULL,NULL),(428,'Riga','Latvian','428','euro','EUR','cent','Republic of Latvia','LV','LVA','Latvia','150','154',1,0,0,NULL,NULL),(430,'Monrovia','Liberian','430','Liberian dollar','LRD','cent','Republic of Liberia','LR','LBR','Liberia','002','011',0,0,0,NULL,NULL),(434,'Tripoli','Libyan','434','Libyan dinar','LYD','dirham','Socialist People’s Libyan Arab Jamahiriya','LY','LBY','Libya','002','015',0,0,0,NULL,NULL),(438,'Vaduz','Liechtensteiner','438','Swiss franc','CHF','centime','Principality of Liechtenstein','LI','LIE','Liechtenstein','150','155',0,0,0,NULL,NULL),(440,'Vilnius','Lithuanian','440','euro','EUR','cent','Republic of Lithuania','LT','LTU','Lithuania','150','154',1,0,1,NULL,NULL),(442,'Luxembourg','Luxembourger','442','euro','EUR','cent','Grand Duchy of Luxembourg','LU','LUX','Luxembourg','150','155',1,1,0,NULL,NULL),(446,'Macao (MO3)','Macanese','446','pataca','MOP','avo','Macao Special Administrative Region of the People’s Republic of China (MO2)','MO','MAC','Macao','142','030',0,0,0,NULL,NULL),(450,'Antananarivo','Malagasy','450','ariary','MGA','iraimbilanja (inv.)','Republic of Madagascar','MG','MDG','Madagascar','002','014',0,0,0,NULL,NULL),(454,'Lilongwe','Malawian','454','Malawian kwacha (inv.)','MWK','tambala (inv.)','Republic of Malawi','MW','MWI','Malawi','002','014',0,0,0,NULL,NULL),(458,'Kuala Lumpur (MY1)','Malaysian','458','ringgit (inv.)','MYR','sen (inv.)','Malaysia','MY','MYS','Malaysia','142','035',0,1,0,NULL,NULL),(462,'Malé','Maldivian','462','rufiyaa','MVR','laari (inv.)','Republic of Maldives','MV','MDV','Maldives','142','034',0,0,0,NULL,NULL),(466,'Bamako','Malian','466','CFA franc (BCEAO)','XOF','centime','Republic of Mali','ML','MLI','Mali','002','011',0,0,0,NULL,NULL),(470,'Valletta','Maltese','470','euro','EUR','cent','Republic of Malta','MT','MLT','Malta','150','039',1,0,0,NULL,NULL),(474,'Fort-de-France','Martinican','474','euro','EUR','cent','Martinique','MQ','MTQ','Martinique','019','029',0,0,0,NULL,NULL),(478,'Nouakchott','Mauritanian','478','ouguiya','MRO','khoum','Islamic Republic of Mauritania','MR','MRT','Mauritania','002','011',0,0,0,NULL,NULL),(480,'Port Louis','Mauritian','480','Mauritian rupee','MUR','cent','Republic of Mauritius','MU','MUS','Mauritius','002','014',0,0,0,NULL,NULL),(484,'Mexico City','Mexican','484','Mexican peso','MXN','centavo','United Mexican States','MX','MEX','Mexico','019','013',0,1,0,NULL,NULL),(492,'Monaco','Monegasque','492','euro','EUR','cent','Principality of Monaco','MC','MCO','Monaco','150','155',0,0,0,NULL,NULL),(496,'Ulan Bator','Mongolian','496','tugrik','MNT','möngö (inv.)','Mongolia','MN','MNG','Mongolia','142','030',0,0,0,NULL,NULL),(498,'Chisinau','Moldovan','498','Moldovan leu (pl. lei)','MDL','ban','Republic of Moldova','MD','MDA','Moldova, Republic of','150','151',0,0,0,NULL,NULL),(499,'Podgorica','Montenegrin','499','euro','EUR','cent','Montenegro','ME','MNE','Montenegro','150','039',0,0,0,NULL,NULL),(500,'Plymouth (MS2)','Montserratian','500','East Caribbean dollar','XCD','cent','Montserrat','MS','MSR','Montserrat','019','029',0,0,0,NULL,NULL),(504,'Rabat','Moroccan','504','Moroccan dirham','MAD','centime','Kingdom of Morocco','MA','MAR','Morocco','002','015',0,0,0,NULL,NULL),(508,'Maputo','Mozambican','508','metical','MZN','centavo','Republic of Mozambique','MZ','MOZ','Mozambique','002','014',0,0,0,NULL,NULL),(512,'Muscat','Omani','512','Omani rial','OMR','baiza','Sultanate of Oman','OM','OMN','Oman','142','145',0,0,0,NULL,NULL),(516,'Windhoek','Namibian','516','Namibian dollar','NAD','cent','Republic of Namibia','NA','NAM','Namibia','002','018',0,0,0,NULL,NULL),(520,'Yaren','Nauruan','520','Australian dollar','AUD','cent','Republic of Nauru','NR','NRU','Nauru','009','057',0,0,0,NULL,NULL),(524,'Kathmandu','Nepalese','524','Nepalese rupee','NPR','paisa (inv.)','Nepal','NP','NPL','Nepal','142','034',0,0,0,NULL,NULL),(528,'Amsterdam (NL2)','Dutch','528','euro','EUR','cent','Kingdom of the Netherlands','NL','NLD','Netherlands','150','155',1,1,0,NULL,NULL),(531,'Willemstad','Curaçaoan','531','Netherlands Antillean guilder (CW1)','ANG','cent','Curaçao','CW','CUW','Curaçao','019','029',0,0,0,NULL,NULL),(533,'Oranjestad','Aruban','533','Aruban guilder','AWG','cent','Aruba','AW','ABW','Aruba','019','029',0,0,0,NULL,NULL),(534,'Philipsburg','Sint Maartener','534','Netherlands Antillean guilder (SX1)','ANG','cent','Sint Maarten','SX','SXM','Sint Maarten (Dutch part)','019','029',0,0,0,NULL,NULL),(535,NULL,'of Bonaire, Sint Eustatius and Saba','535','US dollar','USD','cent',NULL,'BQ','BES','Bonaire, Sint Eustatius and Saba','019','029',0,0,0,NULL,NULL),(540,'Nouméa','New Caledonian','540','CFP franc','XPF','centime','New Caledonia','NC','NCL','New Caledonia','009','054',0,0,0,NULL,NULL),(548,'Port Vila','Vanuatuan','548','vatu (inv.)','VUV','','Republic of Vanuatu','VU','VUT','Vanuatu','009','054',0,0,0,NULL,NULL),(554,'Wellington','New Zealander','554','New Zealand dollar','NZD','cent','New Zealand','NZ','NZL','New Zealand','009','053',0,0,0,NULL,NULL),(558,'Managua','Nicaraguan','558','córdoba oro','NIO','centavo','Republic of Nicaragua','NI','NIC','Nicaragua','019','013',0,0,0,NULL,NULL),(562,'Niamey','Nigerien','562','CFA franc (BCEAO)','XOF','centime','Republic of Niger','NE','NER','Niger','002','011',0,0,0,NULL,NULL),(566,'Abuja','Nigerian','566','naira (inv.)','NGN','kobo (inv.)','Federal Republic of Nigeria','NG','NGA','Nigeria','002','011',0,0,0,NULL,NULL),(570,'Alofi','Niuean','570','New Zealand dollar','NZD','cent','Niue','NU','NIU','Niue','009','061',0,0,0,NULL,NULL),(574,'Kingston','Norfolk Islander','574','Australian dollar','AUD','cent','Territory of Norfolk Island','NF','NFK','Norfolk Island','009','053',0,0,0,NULL,NULL),(578,'Oslo','Norwegian','578','Norwegian krone (pl. kroner)','NOK','øre (inv.)','Kingdom of Norway','NO','NOR','Norway','150','154',0,0,0,NULL,NULL),(580,'Saipan','Northern Mariana Islander','580','US dollar','USD','cent','Commonwealth of the Northern Mariana Islands','MP','MNP','Northern Mariana Islands','009','057',0,0,0,NULL,NULL),(581,'United States Minor Outlying Islands','of United States Minor Outlying Islands','581','US dollar','USD','cent','United States Minor Outlying Islands','UM','UMI','United States Minor Outlying Islands','','',0,0,0,NULL,NULL),(583,'Palikir','Micronesian','583','US dollar','USD','cent','Federated States of Micronesia','FM','FSM','Micronesia, Federated States of','009','057',0,0,0,NULL,NULL),(584,'Majuro','Marshallese','584','US dollar','USD','cent','Republic of the Marshall Islands','MH','MHL','Marshall Islands','009','057',0,0,0,NULL,NULL),(585,'Melekeok','Palauan','585','US dollar','USD','cent','Republic of Palau','PW','PLW','Palau','009','057',0,0,0,NULL,NULL),(586,'Islamabad','Pakistani','586','Pakistani rupee','PKR','paisa','Islamic Republic of Pakistan','PK','PAK','Pakistan','142','034',0,0,0,NULL,NULL),(591,'Panama City','Panamanian','591','balboa','PAB','centésimo','Republic of Panama','PA','PAN','Panama','019','013',0,0,0,NULL,NULL),(598,'Port Moresby','Papua New Guinean','598','kina (inv.)','PGK','toea (inv.)','Independent State of Papua New Guinea','PG','PNG','Papua New Guinea','009','054',0,0,0,NULL,NULL),(600,'Asunción','Paraguayan','600','guaraní','PYG','céntimo','Republic of Paraguay','PY','PRY','Paraguay','019','005',0,0,0,NULL,NULL),(604,'Lima','Peruvian','604','new sol','PEN','céntimo','Republic of Peru','PE','PER','Peru','019','005',0,0,0,NULL,NULL),(608,'Manila','Filipino','608','Philippine peso','PHP','centavo','Republic of the Philippines','PH','PHL','Philippines','142','035',0,0,0,NULL,NULL),(612,'Adamstown','Pitcairner','612','New Zealand dollar','NZD','cent','Pitcairn Islands','PN','PCN','Pitcairn','009','061',0,0,0,NULL,NULL),(616,'Warsaw','Polish','616','zloty','PLN','grosz (pl. groszy)','Republic of Poland','PL','POL','Poland','150','151',1,1,1,NULL,NULL),(620,'Lisbon','Portuguese','620','euro','EUR','cent','Portuguese Republic','PT','PRT','Portugal','150','039',1,1,1,NULL,NULL),(624,'Bissau','Guinea-Bissau national','624','CFA franc (BCEAO)','XOF','centime','Republic of Guinea-Bissau','GW','GNB','Guinea-Bissau','002','011',0,0,0,NULL,NULL),(626,'Dili','East Timorese','626','US dollar','USD','cent','Democratic Republic of East Timor','TL','TLS','Timor-Leste','142','035',0,0,0,NULL,NULL),(630,'San Juan','Puerto Rican','630','US dollar','USD','cent','Commonwealth of Puerto Rico','PR','PRI','Puerto Rico','019','029',0,0,0,NULL,NULL),(634,'Doha','Qatari','634','Qatari riyal','QAR','dirham','State of Qatar','QA','QAT','Qatar','142','145',0,0,0,NULL,NULL),(638,'Saint-Denis','Reunionese','638','euro','EUR','cent','Réunion','RE','REU','Réunion','002','014',0,0,0,NULL,NULL),(642,'Bucharest','Romanian','642','Romanian leu (pl. lei)','RON','ban (pl. bani)','Romania','RO','ROU','Romania','150','151',1,0,1,NULL,NULL),(643,'Moscow','Russian','643','Russian rouble','RUB','kopek','Russian Federation','RU','RUS','Russian Federation','150','151',0,0,0,NULL,NULL),(646,'Kigali','Rwandan; Rwandese','646','Rwandese franc','RWF','centime','Republic of Rwanda','RW','RWA','Rwanda','002','014',0,0,0,NULL,NULL),(652,'Gustavia','of Saint Barthélemy','652','euro','EUR','cent','Collectivity of Saint Barthélemy','BL','BLM','Saint Barthélemy','019','029',0,0,0,NULL,NULL),(654,'Jamestown','Saint Helenian','654','Saint Helena pound','SHP','penny','Saint Helena, Ascension and Tristan da Cunha','SH','SHN','Saint Helena, Ascension and Tristan da Cunha','002','011',0,0,0,NULL,NULL),(659,'Basseterre','Kittsian; Nevisian','659','East Caribbean dollar','XCD','cent','Federation of Saint Kitts and Nevis','KN','KNA','Saint Kitts and Nevis','019','029',0,0,0,NULL,NULL),(660,'The Valley','Anguillan','660','East Caribbean dollar','XCD','cent','Anguilla','AI','AIA','Anguilla','019','029',0,0,0,NULL,NULL),(662,'Castries','Saint Lucian','662','East Caribbean dollar','XCD','cent','Saint Lucia','LC','LCA','Saint Lucia','019','029',0,0,0,NULL,NULL),(663,'Marigot','of Saint Martin','663','euro','EUR','cent','Collectivity of Saint Martin','MF','MAF','Saint Martin (French part)','019','029',0,0,0,NULL,NULL),(666,'Saint-Pierre','St-Pierrais; Miquelonnais','666','euro','EUR','cent','Territorial Collectivity of Saint Pierre and Miquelon','PM','SPM','Saint Pierre and Miquelon','019','021',0,0,0,NULL,NULL),(670,'Kingstown','Vincentian','670','East Caribbean dollar','XCD','cent','Saint Vincent and the Grenadines','VC','VCT','Saint Vincent and the Grenadines','019','029',0,0,0,NULL,NULL),(674,'San Marino','San Marinese','674','euro','EUR','cent','Republic of San Marino','SM','SMR','San Marino','150','039',0,0,0,NULL,NULL),(678,'São Tomé','São Toméan','678','dobra','STD','centavo','Democratic Republic of São Tomé and Príncipe','ST','STP','Sao Tome and Principe','002','017',0,0,0,NULL,NULL),(682,'Riyadh','Saudi Arabian','682','riyal','SAR','halala','Kingdom of Saudi Arabia','SA','SAU','Saudi Arabia','142','145',0,0,0,NULL,NULL),(686,'Dakar','Senegalese','686','CFA franc (BCEAO)','XOF','centime','Republic of Senegal','SN','SEN','Senegal','002','011',0,0,0,NULL,NULL),(688,'Belgrade','Serb','688','Serbian dinar','RSD','para (inv.)','Republic of Serbia','RS','SRB','Serbia','150','039',0,0,0,NULL,NULL),(690,'Victoria','Seychellois','690','Seychelles rupee','SCR','cent','Republic of Seychelles','SC','SYC','Seychelles','002','014',0,0,0,NULL,NULL),(694,'Freetown','Sierra Leonean','694','leone','SLL','cent','Republic of Sierra Leone','SL','SLE','Sierra Leone','002','011',0,0,0,NULL,NULL),(702,'Singapore','Singaporean','702','Singapore dollar','SGD','cent','Republic of Singapore','SG','SGP','Singapore','142','035',0,0,0,NULL,NULL),(703,'Bratislava','Slovak','703','euro','EUR','cent','Slovak Republic','SK','SVK','Slovakia','150','151',1,0,1,NULL,NULL),(704,'Hanoi','Vietnamese','704','dong','VND','(10 hào','Socialist Republic of Vietnam','VN','VNM','Viet Nam','142','035',0,0,0,NULL,NULL),(705,'Ljubljana','Slovene','705','euro','EUR','cent','Republic of Slovenia','SI','SVN','Slovenia','150','039',1,0,1,NULL,NULL),(706,'Mogadishu','Somali','706','Somali shilling','SOS','cent','Somali Republic','SO','SOM','Somalia','002','014',0,0,0,NULL,NULL),(710,'Pretoria (ZA1)','South African','710','rand','ZAR','cent','Republic of South Africa','ZA','ZAF','South Africa','002','018',0,0,0,NULL,NULL),(716,'Harare','Zimbabwean','716','Zimbabwe dollar (ZW1)','ZWL','cent','Republic of Zimbabwe','ZW','ZWE','Zimbabwe','002','014',0,0,0,NULL,NULL),(724,'Madrid','Spaniard','724','euro','EUR','cent','Kingdom of Spain','ES','ESP','Spain','150','039',1,1,1,NULL,NULL),(728,'Juba','South Sudanese','728','South Sudanese pound','SSP','piaster','Republic of South Sudan','SS','SSD','South Sudan','002','015',0,0,0,NULL,NULL),(729,'Khartoum','Sudanese','729','Sudanese pound','SDG','piastre','Republic of the Sudan','SD','SDN','Sudan','002','015',0,0,0,NULL,NULL),(732,'Al aaiun','Sahrawi','732','Moroccan dirham','MAD','centime','Western Sahara','EH','ESH','Western Sahara','002','015',0,0,0,NULL,NULL),(740,'Paramaribo','Surinamese','740','Surinamese dollar','SRD','cent','Republic of Suriname','SR','SUR','Suriname','019','005',0,0,0,NULL,NULL),(744,'Longyearbyen','of Svalbard','744','Norwegian krone (pl. kroner)','NOK','øre (inv.)','Svalbard and Jan Mayen','SJ','SJM','Svalbard and Jan Mayen','150','154',0,0,0,NULL,NULL),(748,'Mbabane','Swazi','748','lilangeni','SZL','cent','Kingdom of Swaziland','SZ','SWZ','Swaziland','002','018',0,0,0,NULL,NULL),(752,'Stockholm','Swedish','752','krona (pl. kronor)','SEK','öre (inv.)','Kingdom of Sweden','SE','SWE','Sweden','150','154',1,1,1,NULL,NULL),(756,'Berne','Swiss','756','Swiss franc','CHF','centime','Swiss Confederation','CH','CHE','Switzerland','150','155',0,1,0,NULL,NULL),(760,'Damascus','Syrian','760','Syrian pound','SYP','piastre','Syrian Arab Republic','SY','SYR','Syrian Arab Republic','142','145',0,0,0,NULL,NULL),(762,'Dushanbe','Tajik','762','somoni','TJS','diram','Republic of Tajikistan','TJ','TJK','Tajikistan','142','143',0,0,0,NULL,NULL),(764,'Bangkok','Thai','764','baht (inv.)','THB','satang (inv.)','Kingdom of Thailand','TH','THA','Thailand','142','035',0,0,0,NULL,NULL),(768,'Lomé','Togolese','768','CFA franc (BCEAO)','XOF','centime','Togolese Republic','TG','TGO','Togo','002','011',0,0,0,NULL,NULL),(772,'(TK2)','Tokelauan','772','New Zealand dollar','NZD','cent','Tokelau','TK','TKL','Tokelau','009','061',0,0,0,NULL,NULL),(776,'Nuku’alofa','Tongan','776','pa’anga (inv.)','TOP','seniti (inv.)','Kingdom of Tonga','TO','TON','Tonga','009','061',0,0,0,NULL,NULL),(780,'Port of Spain','Trinidadian; Tobagonian','780','Trinidad and Tobago dollar','TTD','cent','Republic of Trinidad and Tobago','TT','TTO','Trinidad and Tobago','019','029',0,0,0,NULL,NULL),(784,'Abu Dhabi','Emirian','784','UAE dirham','AED','fils (inv.)','United Arab Emirates','AE','ARE','United Arab Emirates','142','145',0,0,0,NULL,NULL),(788,'Tunis','Tunisian','788','Tunisian dinar','TND','millime','Republic of Tunisia','TN','TUN','Tunisia','002','015',0,0,0,NULL,NULL),(792,'Ankara','Turk','792','Turkish lira (inv.)','TRY','kurus (inv.)','Republic of Turkey','TR','TUR','Turkey','142','145',0,0,0,NULL,NULL),(795,'Ashgabat','Turkmen','795','Turkmen manat (inv.)','TMT','tenge (inv.)','Turkmenistan','TM','TKM','Turkmenistan','142','143',0,0,0,NULL,NULL),(796,'Cockburn Town','Turks and Caicos Islander','796','US dollar','USD','cent','Turks and Caicos Islands','TC','TCA','Turks and Caicos Islands','019','029',0,0,0,NULL,NULL),(798,'Funafuti','Tuvaluan','798','Australian dollar','AUD','cent','Tuvalu','TV','TUV','Tuvalu','009','061',0,0,0,NULL,NULL),(800,'Kampala','Ugandan','800','Uganda shilling','UGX','cent','Republic of Uganda','UG','UGA','Uganda','002','014',0,0,0,NULL,NULL),(804,'Kiev','Ukrainian','804','hryvnia','UAH','kopiyka','Ukraine','UA','UKR','Ukraine','150','151',0,0,0,NULL,NULL),(807,'Skopje','of the former Yugoslav Republic of Macedonia','807','denar (pl. denars)','MKD','deni (inv.)','the former Yugoslav Republic of Macedonia','MK','MKD','Macedonia, the former Yugoslav Republic of','150','039',0,0,0,NULL,NULL),(818,'Cairo','Egyptian','818','Egyptian pound','EGP','piastre','Arab Republic of Egypt','EG','EGY','Egypt','002','015',0,0,0,NULL,NULL),(826,'London','British','826','pound sterling','GBP','penny (pl. pence)','United Kingdom of Great Britain and Northern Ireland','GB','GBR','United Kingdom','150','154',1,0,0,NULL,NULL),(831,'St Peter Port','of Guernsey','831','Guernsey pound (GG2)','GGP (GG2)','penny (pl. pence)','Bailiwick of Guernsey','GG','GGY','Guernsey','150','154',0,0,0,NULL,NULL),(832,'St Helier','of Jersey','832','Jersey pound (JE2)','JEP (JE2)','penny (pl. pence)','Bailiwick of Jersey','JE','JEY','Jersey','150','154',0,0,0,NULL,NULL),(833,'Douglas','Manxman; Manxwoman','833','Manx pound (IM2)','IMP (IM2)','penny (pl. pence)','Isle of Man','IM','IMN','Isle of Man','150','154',0,0,0,NULL,NULL),(834,'Dodoma (TZ1)','Tanzanian','834','Tanzanian shilling','TZS','cent','United Republic of Tanzania','TZ','TZA','Tanzania, United Republic of','002','014',0,0,0,NULL,NULL),(840,'Washington DC','American','840','US dollar','USD','cent','United States of America','US','USA','United States','019','021',0,0,0,',','.'),(850,'Charlotte Amalie','US Virgin Islander','850','US dollar','USD','cent','United States Virgin Islands','VI','VIR','Virgin Islands, U.S.','019','029',0,0,0,NULL,NULL),(854,'Ouagadougou','Burkinabe','854','CFA franc (BCEAO)','XOF','centime','Burkina Faso','BF','BFA','Burkina Faso','002','011',0,0,0,NULL,NULL),(858,'Montevideo','Uruguayan','858','Uruguayan peso','UYU','centésimo','Eastern Republic of Uruguay','UY','URY','Uruguay','019','005',0,1,0,NULL,NULL),(860,'Tashkent','Uzbek','860','sum (inv.)','UZS','tiyin (inv.)','Republic of Uzbekistan','UZ','UZB','Uzbekistan','142','143',0,0,0,NULL,NULL),(862,'Caracas','Venezuelan','862','bolívar fuerte (pl. bolívares fuertes)','VEF','céntimo','Bolivarian Republic of Venezuela','VE','VEN','Venezuela, Bolivarian Republic of','019','005',0,0,0,NULL,NULL),(876,'Mata-Utu','Wallisian; Futunan; Wallis and Futuna Islander','876','CFP franc','XPF','centime','Wallis and Futuna','WF','WLF','Wallis and Futuna','009','061',0,0,0,NULL,NULL),(882,'Apia','Samoan','882','tala (inv.)','WST','sene (inv.)','Independent State of Samoa','WS','WSM','Samoa','009','061',0,0,0,NULL,NULL),(887,'San’a','Yemenite','887','Yemeni rial','YER','fils (inv.)','Republic of Yemen','YE','YEM','Yemen','142','145',0,0,0,NULL,NULL),(894,'Lusaka','Zambian','894','Zambian kwacha (inv.)','ZMW','ngwee (inv.)','Republic of Zambia','ZM','ZMB','Zambia','002','014',0,0,0,NULL,NULL); +INSERT INTO `countries` VALUES (4,'Kabul','Afghan','004','afghani','AFN','pul','Islamic Republic of Afghanistan','AF','AFG','Afghanistan','142','034',0,0,0,NULL,NULL),(8,'Tirana','Albanian','008','lek','ALL','(qindar (pl. qindarka))','Republic of Albania','AL','ALB','Albania','150','039',0,0,0,NULL,NULL),(10,'Antartica','of Antartica','010','','','','Antarctica','AQ','ATA','Antarctica','','',0,0,0,NULL,NULL),(12,'Algiers','Algerian','012','Algerian dinar','DZD','centime','People’s Democratic Republic of Algeria','DZ','DZA','Algeria','002','015',0,0,0,NULL,NULL),(16,'Pago Pago','American Samoan','016','US dollar','USD','cent','Territory of American','AS','ASM','American Samoa','009','061',0,0,0,NULL,NULL),(20,'Andorra la Vella','Andorran','020','euro','EUR','cent','Principality of Andorra','AD','AND','Andorra','150','039',0,0,0,NULL,NULL),(24,'Luanda','Angolan','024','kwanza','AOA','cêntimo','Republic of Angola','AO','AGO','Angola','002','017',0,0,0,NULL,NULL),(28,'St John’s','of Antigua and Barbuda','028','East Caribbean dollar','XCD','cent','Antigua and Barbuda','AG','ATG','Antigua and Barbuda','019','029',0,0,0,NULL,NULL),(31,'Baku','Azerbaijani','031','Azerbaijani manat','AZN','kepik (inv.)','Republic of Azerbaijan','AZ','AZE','Azerbaijan','142','145',0,0,0,NULL,NULL),(32,'Buenos Aires','Argentinian','032','Argentine peso','ARS','centavo','Argentine Republic','AR','ARG','Argentina','019','005',0,1,0,NULL,NULL),(36,'Canberra','Australian','036','Australian dollar','AUD','cent','Commonwealth of Australia','AU','AUS','Australia','009','053',0,0,0,NULL,NULL),(40,'Vienna','Austrian','040','euro','EUR','cent','Republic of Austria','AT','AUT','Austria','150','155',1,1,1,NULL,NULL),(44,'Nassau','Bahamian','044','Bahamian dollar','BSD','cent','Commonwealth of the Bahamas','BS','BHS','Bahamas','019','029',0,0,0,NULL,NULL),(48,'Manama','Bahraini','048','Bahraini dinar','BHD','fils (inv.)','Kingdom of Bahrain','BH','BHR','Bahrain','142','145',0,0,0,NULL,NULL),(50,'Dhaka','Bangladeshi','050','taka (inv.)','BDT','poisha (inv.)','People’s Republic of Bangladesh','BD','BGD','Bangladesh','142','034',0,0,0,NULL,NULL),(51,'Yerevan','Armenian','051','dram (inv.)','AMD','luma','Republic of Armenia','AM','ARM','Armenia','142','145',0,0,0,NULL,NULL),(52,'Bridgetown','Barbadian','052','Barbados dollar','BBD','cent','Barbados','BB','BRB','Barbados','019','029',0,0,0,NULL,NULL),(56,'Brussels','Belgian','056','euro','EUR','cent','Kingdom of Belgium','BE','BEL','Belgium','150','155',1,1,0,NULL,NULL),(60,'Hamilton','Bermudian','060','Bermuda dollar','BMD','cent','Bermuda','BM','BMU','Bermuda','019','021',0,0,0,NULL,NULL),(64,'Thimphu','Bhutanese','064','ngultrum (inv.)','BTN','chhetrum (inv.)','Kingdom of Bhutan','BT','BTN','Bhutan','142','034',0,0,0,NULL,NULL),(68,'Sucre (BO1)','Bolivian','068','boliviano','BOB','centavo','Plurinational State of Bolivia','BO','BOL','Bolivia, Plurinational State of','019','005',0,0,0,NULL,NULL),(70,'Sarajevo','of Bosnia and Herzegovina','070','convertible mark','BAM','fening','Bosnia and Herzegovina','BA','BIH','Bosnia and Herzegovina','150','039',0,0,0,NULL,NULL),(72,'Gaborone','Botswanan','072','pula (inv.)','BWP','thebe (inv.)','Republic of Botswana','BW','BWA','Botswana','002','018',0,0,0,NULL,NULL),(74,'Bouvet island','of Bouvet island','074','','','','Bouvet Island','BV','BVT','Bouvet Island','','',0,0,0,NULL,NULL),(76,'Brasilia','Brazilian','076','real (pl. reais)','BRL','centavo','Federative Republic of Brazil','BR','BRA','Brazil','019','005',0,0,0,NULL,NULL),(84,'Belmopan','Belizean','084','Belize dollar','BZD','cent','Belize','BZ','BLZ','Belize','019','013',0,0,0,NULL,NULL),(86,'Diego Garcia','Changosian','086','US dollar','USD','cent','British Indian Ocean Territory','IO','IOT','British Indian Ocean Territory','','',0,0,0,NULL,NULL),(90,'Honiara','Solomon Islander','090','Solomon Islands dollar','SBD','cent','Solomon Islands','SB','SLB','Solomon Islands','009','054',0,0,0,NULL,NULL),(92,'Road Town','British Virgin Islander;','092','US dollar','USD','cent','British Virgin Islands','VG','VGB','Virgin Islands, British','019','029',0,0,0,NULL,NULL),(96,'Bandar Seri Begawan','Bruneian','096','Brunei dollar','BND','sen (inv.)','Brunei Darussalam','BN','BRN','Brunei Darussalam','142','035',0,0,0,NULL,NULL),(100,'Sofia','Bulgarian','100','lev (pl. leva)','BGN','stotinka','Republic of Bulgaria','BG','BGR','Bulgaria','150','151',1,0,1,NULL,NULL),(104,'Yangon','Burmese','104','kyat','MMK','pya','Union of Myanmar/','MM','MMR','Myanmar','142','035',0,0,0,NULL,NULL),(108,'Bujumbura','Burundian','108','Burundi franc','BIF','centime','Republic of Burundi','BI','BDI','Burundi','002','014',0,0,0,NULL,NULL),(112,'Minsk','Belarusian','112','Belarusian rouble','BYR','kopek','Republic of Belarus','BY','BLR','Belarus','150','151',0,0,0,NULL,NULL),(116,'Phnom Penh','Cambodian','116','riel','KHR','sen (inv.)','Kingdom of Cambodia','KH','KHM','Cambodia','142','035',0,0,0,NULL,NULL),(120,'Yaoundé','Cameroonian','120','CFA franc (BEAC)','XAF','centime','Republic of Cameroon','CM','CMR','Cameroon','002','017',0,0,0,NULL,NULL),(124,'Ottawa','Canadian','124','Canadian dollar','CAD','cent','Canada','CA','CAN','Canada','019','021',0,0,0,',','.'),(132,'Praia','Cape Verdean','132','Cape Verde escudo','CVE','centavo','Republic of Cape Verde','CV','CPV','Cape Verde','002','011',0,0,0,NULL,NULL),(136,'George Town','Caymanian','136','Cayman Islands dollar','KYD','cent','Cayman Islands','KY','CYM','Cayman Islands','019','029',0,0,0,NULL,NULL),(140,'Bangui','Central African','140','CFA franc (BEAC)','XAF','centime','Central African Republic','CF','CAF','Central African Republic','002','017',0,0,0,NULL,NULL),(144,'Colombo','Sri Lankan','144','Sri Lankan rupee','LKR','cent','Democratic Socialist Republic of Sri Lanka','LK','LKA','Sri Lanka','142','034',0,0,0,NULL,NULL),(148,'N’Djamena','Chadian','148','CFA franc (BEAC)','XAF','centime','Republic of Chad','TD','TCD','Chad','002','017',0,0,0,NULL,NULL),(152,'Santiago','Chilean','152','Chilean peso','CLP','centavo','Republic of Chile','CL','CHL','Chile','019','005',0,0,0,NULL,NULL),(156,'Beijing','Chinese','156','renminbi-yuan (inv.)','CNY','jiao (10)','People’s Republic of China','CN','CHN','China','142','030',0,0,0,NULL,NULL),(158,'Taipei','Taiwanese','158','new Taiwan dollar','TWD','fen (inv.)','Republic of China, Taiwan (TW1)','TW','TWN','Taiwan, Province of China','142','030',0,0,0,NULL,NULL),(162,'Flying Fish Cove','Christmas Islander','162','Australian dollar','AUD','cent','Christmas Island Territory','CX','CXR','Christmas Island','','',0,0,0,NULL,NULL),(166,'Bantam','Cocos Islander','166','Australian dollar','AUD','cent','Territory of Cocos (Keeling) Islands','CC','CCK','Cocos (Keeling) Islands','','',0,0,0,NULL,NULL),(170,'Santa Fe de Bogotá','Colombian','170','Colombian peso','COP','centavo','Republic of Colombia','CO','COL','Colombia','019','005',0,0,0,NULL,NULL),(174,'Moroni','Comorian','174','Comorian franc','KMF','','Union of the Comoros','KM','COM','Comoros','002','014',0,0,0,NULL,NULL),(175,'Mamoudzou','Mahorais','175','euro','EUR','cent','Departmental Collectivity of Mayotte','YT','MYT','Mayotte','002','014',0,0,0,NULL,NULL),(178,'Brazzaville','Congolese','178','CFA franc (BEAC)','XAF','centime','Republic of the Congo','CG','COG','Congo','002','017',0,0,0,NULL,NULL),(180,'Kinshasa','Congolese','180','Congolese franc','CDF','centime','Democratic Republic of the Congo','CD','COD','Congo, the Democratic Republic of the','002','017',0,0,0,NULL,NULL),(184,'Avarua','Cook Islander','184','New Zealand dollar','NZD','cent','Cook Islands','CK','COK','Cook Islands','009','061',0,0,0,NULL,NULL),(188,'San José','Costa Rican','188','Costa Rican colón (pl. colones)','CRC','céntimo','Republic of Costa Rica','CR','CRI','Costa Rica','019','013',0,0,0,NULL,NULL),(191,'Zagreb','Croatian','191','kuna (inv.)','HRK','lipa (inv.)','Republic of Croatia','HR','HRV','Croatia','150','039',1,0,1,NULL,NULL),(192,'Havana','Cuban','192','Cuban peso','CUP','centavo','Republic of Cuba','CU','CUB','Cuba','019','029',0,0,0,NULL,NULL),(196,'Nicosia','Cypriot','196','euro','EUR','cent','Republic of Cyprus','CY','CYP','Cyprus','142','145',1,0,0,NULL,NULL),(203,'Prague','Czech','203','Czech koruna (pl. koruny)','CZK','halér','Czech Republic','CZ','CZE','Czech Republic','150','151',1,0,1,NULL,NULL),(204,'Porto Novo (BJ1)','Beninese','204','CFA franc (BCEAO)','XOF','centime','Republic of Benin','BJ','BEN','Benin','002','011',0,0,0,NULL,NULL),(208,'Copenhagen','Danish','208','Danish krone','DKK','øre (inv.)','Kingdom of Denmark','DK','DNK','Denmark','150','154',1,1,0,NULL,NULL),(212,'Roseau','Dominican','212','East Caribbean dollar','XCD','cent','Commonwealth of Dominica','DM','DMA','Dominica','019','029',0,0,0,NULL,NULL),(214,'Santo Domingo','Dominican','214','Dominican peso','DOP','centavo','Dominican Republic','DO','DOM','Dominican Republic','019','029',0,0,0,NULL,NULL),(218,'Quito','Ecuadorian','218','US dollar','USD','cent','Republic of Ecuador','EC','ECU','Ecuador','019','005',0,0,0,NULL,NULL),(222,'San Salvador','Salvadoran','222','Salvadorian colón (pl. colones)','SVC','centavo','Republic of El Salvador','SV','SLV','El Salvador','019','013',0,0,0,NULL,NULL),(226,'Malabo','Equatorial Guinean','226','CFA franc (BEAC)','XAF','centime','Republic of Equatorial Guinea','GQ','GNQ','Equatorial Guinea','002','017',0,0,0,NULL,NULL),(231,'Addis Ababa','Ethiopian','231','birr (inv.)','ETB','cent','Federal Democratic Republic of Ethiopia','ET','ETH','Ethiopia','002','014',0,0,0,NULL,NULL),(232,'Asmara','Eritrean','232','nakfa','ERN','cent','State of Eritrea','ER','ERI','Eritrea','002','014',0,0,0,NULL,NULL),(233,'Tallinn','Estonian','233','euro','EUR','cent','Republic of Estonia','EE','EST','Estonia','150','154',1,0,1,NULL,NULL),(234,'Tórshavn','Faeroese','234','Danish krone','DKK','øre (inv.)','Faeroe Islands','FO','FRO','Faroe Islands','150','154',0,0,0,NULL,NULL),(238,'Stanley','Falkland Islander','238','Falkland Islands pound','FKP','new penny','Falkland Islands','FK','FLK','Falkland Islands (Malvinas)','019','005',0,0,0,NULL,NULL),(239,'King Edward Point (Grytviken)','of South Georgia and the South Sandwich Islands','239','','','','South Georgia and the South Sandwich Islands','GS','SGS','South Georgia and the South Sandwich Islands','','',0,0,0,NULL,NULL),(242,'Suva','Fijian','242','Fiji dollar','FJD','cent','Republic of Fiji','FJ','FJI','Fiji','009','054',0,0,0,NULL,NULL),(246,'Helsinki','Finnish','246','euro','EUR','cent','Republic of Finland','FI','FIN','Finland','150','154',1,1,1,NULL,NULL),(248,'Mariehamn','Åland Islander','248','euro','EUR','cent','Åland Islands','AX','ALA','Åland Islands','150','154',0,0,0,NULL,NULL),(250,'Paris','French','250','euro','EUR','cent','French Republic','FR','FRA','France','150','155',1,1,1,NULL,NULL),(254,'Cayenne','Guianese','254','euro','EUR','cent','French Guiana','GF','GUF','French Guiana','019','005',0,0,0,NULL,NULL),(258,'Papeete','Polynesian','258','CFP franc','XPF','centime','French Polynesia','PF','PYF','French Polynesia','009','061',0,0,0,NULL,NULL),(260,'Port-aux-Francais','of French Southern and Antarctic Lands','260','euro','EUR','cent','French Southern and Antarctic Lands','TF','ATF','French Southern Territories','','',0,0,0,NULL,NULL),(262,'Djibouti','Djiboutian','262','Djibouti franc','DJF','','Republic of Djibouti','DJ','DJI','Djibouti','002','014',0,0,0,NULL,NULL),(266,'Libreville','Gabonese','266','CFA franc (BEAC)','XAF','centime','Gabonese Republic','GA','GAB','Gabon','002','017',0,0,0,NULL,NULL),(268,'Tbilisi','Georgian','268','lari','GEL','tetri (inv.)','Georgia','GE','GEO','Georgia','142','145',0,0,0,NULL,NULL),(270,'Banjul','Gambian','270','dalasi (inv.)','GMD','butut','Republic of the Gambia','GM','GMB','Gambia','002','011',0,0,0,NULL,NULL),(275,NULL,'Palestinian','275',NULL,NULL,NULL,NULL,'PS','PSE','Palestinian Territory, Occupied','142','145',0,0,0,NULL,NULL),(276,'Berlin','German','276','euro','EUR','cent','Federal Republic of Germany','DE','DEU','Germany','150','155',1,1,1,NULL,NULL),(288,'Accra','Ghanaian','288','Ghana cedi','GHS','pesewa','Republic of Ghana','GH','GHA','Ghana','002','011',0,0,0,NULL,NULL),(292,'Gibraltar','Gibraltarian','292','Gibraltar pound','GIP','penny','Gibraltar','GI','GIB','Gibraltar','150','039',0,0,0,NULL,NULL),(296,'Tarawa','Kiribatian','296','Australian dollar','AUD','cent','Republic of Kiribati','KI','KIR','Kiribati','009','057',0,0,0,NULL,NULL),(300,'Athens','Greek','300','euro','EUR','cent','Hellenic Republic','GR','GRC','Greece','150','039',1,0,1,NULL,NULL),(304,'Nuuk','Greenlander','304','Danish krone','DKK','øre (inv.)','Greenland','GL','GRL','Greenland','019','021',0,1,0,NULL,NULL),(308,'St George’s','Grenadian','308','East Caribbean dollar','XCD','cent','Grenada','GD','GRD','Grenada','019','029',0,0,0,NULL,NULL),(312,'Basse Terre','Guadeloupean','312','euro','EUR','cent','Guadeloupe','GP','GLP','Guadeloupe','019','029',0,0,0,NULL,NULL),(316,'Agaña (Hagåtña)','Guamanian','316','US dollar','USD','cent','Territory of Guam','GU','GUM','Guam','009','057',0,0,0,NULL,NULL),(320,'Guatemala City','Guatemalan','320','quetzal (pl. quetzales)','GTQ','centavo','Republic of Guatemala','GT','GTM','Guatemala','019','013',0,0,0,NULL,NULL),(324,'Conakry','Guinean','324','Guinean franc','GNF','','Republic of Guinea','GN','GIN','Guinea','002','011',0,0,0,NULL,NULL),(328,'Georgetown','Guyanese','328','Guyana dollar','GYD','cent','Cooperative Republic of Guyana','GY','GUY','Guyana','019','005',0,0,0,NULL,NULL),(332,'Port-au-Prince','Haitian','332','gourde','HTG','centime','Republic of Haiti','HT','HTI','Haiti','019','029',0,0,0,NULL,NULL),(334,'Territory of Heard Island and McDonald Islands','of Territory of Heard Island and McDonald Islands','334','','','','Territory of Heard Island and McDonald Islands','HM','HMD','Heard Island and McDonald Islands','','',0,0,0,NULL,NULL),(336,'Vatican City','of the Holy See/of the Vatican','336','euro','EUR','cent','the Holy See/ Vatican City State','VA','VAT','Holy See (Vatican City State)','150','039',0,0,0,NULL,NULL),(340,'Tegucigalpa','Honduran','340','lempira','HNL','centavo','Republic of Honduras','HN','HND','Honduras','019','013',0,0,0,NULL,NULL),(344,'(HK3)','Hong Kong Chinese','344','Hong Kong dollar','HKD','cent','Hong Kong Special Administrative Region of the People’s Republic of China (HK2)','HK','HKG','Hong Kong','142','030',0,0,0,NULL,NULL),(348,'Budapest','Hungarian','348','forint (inv.)','HUF','(fillér (inv.))','Republic of Hungary','HU','HUN','Hungary','150','151',1,0,1,NULL,NULL),(352,'Reykjavik','Icelander','352','króna (pl. krónur)','ISK','','Republic of Iceland','IS','ISL','Iceland','150','154',0,1,1,NULL,NULL),(356,'New Delhi','Indian','356','Indian rupee','INR','paisa','Republic of India','IN','IND','India','142','034',0,0,0,NULL,NULL),(360,'Jakarta','Indonesian','360','Indonesian rupiah (inv.)','IDR','sen (inv.)','Republic of Indonesia','ID','IDN','Indonesia','142','035',0,0,0,NULL,NULL),(364,'Tehran','Iranian','364','Iranian rial','IRR','(dinar) (IR1)','Islamic Republic of Iran','IR','IRN','Iran, Islamic Republic of','142','034',0,0,0,NULL,NULL),(368,'Baghdad','Iraqi','368','Iraqi dinar','IQD','fils (inv.)','Republic of Iraq','IQ','IRQ','Iraq','142','145',0,0,0,NULL,NULL),(372,'Dublin','Irish','372','euro','EUR','cent','Ireland (IE1)','IE','IRL','Ireland','150','154',1,0,0,',','.'),(376,'(IL1)','Israeli','376','shekel','ILS','agora','State of Israel','IL','ISR','Israel','142','145',0,1,0,NULL,NULL),(380,'Rome','Italian','380','euro','EUR','cent','Italian Republic','IT','ITA','Italy','150','039',1,1,1,NULL,NULL),(384,'Yamoussoukro (CI1)','Ivorian','384','CFA franc (BCEAO)','XOF','centime','Republic of Côte d’Ivoire','CI','CIV','Côte d\'Ivoire','002','011',0,0,0,NULL,NULL),(388,'Kingston','Jamaican','388','Jamaica dollar','JMD','cent','Jamaica','JM','JAM','Jamaica','019','029',0,0,0,NULL,NULL),(392,'Tokyo','Japanese','392','yen (inv.)','JPY','(sen (inv.)) (JP1)','Japan','JP','JPN','Japan','142','030',0,1,1,NULL,NULL),(398,'Astana','Kazakh','398','tenge (inv.)','KZT','tiyn','Republic of Kazakhstan','KZ','KAZ','Kazakhstan','142','143',0,0,0,NULL,NULL),(400,'Amman','Jordanian','400','Jordanian dinar','JOD','100 qirsh','Hashemite Kingdom of Jordan','JO','JOR','Jordan','142','145',0,0,0,NULL,NULL),(404,'Nairobi','Kenyan','404','Kenyan shilling','KES','cent','Republic of Kenya','KE','KEN','Kenya','002','014',0,0,0,NULL,NULL),(408,'Pyongyang','North Korean','408','North Korean won (inv.)','KPW','chun (inv.)','Democratic People’s Republic of Korea','KP','PRK','Korea, Democratic People\'s Republic of','142','030',0,0,0,NULL,NULL),(410,'Seoul','South Korean','410','South Korean won (inv.)','KRW','(chun (inv.))','Republic of Korea','KR','KOR','Korea, Republic of','142','030',0,0,0,NULL,NULL),(414,'Kuwait City','Kuwaiti','414','Kuwaiti dinar','KWD','fils (inv.)','State of Kuwait','KW','KWT','Kuwait','142','145',0,0,0,NULL,NULL),(417,'Bishkek','Kyrgyz','417','som','KGS','tyiyn','Kyrgyz Republic','KG','KGZ','Kyrgyzstan','142','143',0,0,0,NULL,NULL),(418,'Vientiane','Lao','418','kip (inv.)','LAK','(at (inv.))','Lao People’s Democratic Republic','LA','LAO','Lao People\'s Democratic Republic','142','035',0,0,0,NULL,NULL),(422,'Beirut','Lebanese','422','Lebanese pound','LBP','(piastre)','Lebanese Republic','LB','LBN','Lebanon','142','145',0,0,0,NULL,NULL),(426,'Maseru','Basotho','426','loti (pl. maloti)','LSL','sente','Kingdom of Lesotho','LS','LSO','Lesotho','002','018',0,0,0,NULL,NULL),(428,'Riga','Latvian','428','euro','EUR','cent','Republic of Latvia','LV','LVA','Latvia','150','154',1,0,0,NULL,NULL),(430,'Monrovia','Liberian','430','Liberian dollar','LRD','cent','Republic of Liberia','LR','LBR','Liberia','002','011',0,0,0,NULL,NULL),(434,'Tripoli','Libyan','434','Libyan dinar','LYD','dirham','Socialist People’s Libyan Arab Jamahiriya','LY','LBY','Libya','002','015',0,0,0,NULL,NULL),(438,'Vaduz','Liechtensteiner','438','Swiss franc','CHF','centime','Principality of Liechtenstein','LI','LIE','Liechtenstein','150','155',0,0,0,NULL,NULL),(440,'Vilnius','Lithuanian','440','euro','EUR','cent','Republic of Lithuania','LT','LTU','Lithuania','150','154',1,0,1,NULL,NULL),(442,'Luxembourg','Luxembourger','442','euro','EUR','cent','Grand Duchy of Luxembourg','LU','LUX','Luxembourg','150','155',1,1,0,NULL,NULL),(446,'Macao (MO3)','Macanese','446','pataca','MOP','avo','Macao Special Administrative Region of the People’s Republic of China (MO2)','MO','MAC','Macao','142','030',0,0,0,NULL,NULL),(450,'Antananarivo','Malagasy','450','ariary','MGA','iraimbilanja (inv.)','Republic of Madagascar','MG','MDG','Madagascar','002','014',0,0,0,NULL,NULL),(454,'Lilongwe','Malawian','454','Malawian kwacha (inv.)','MWK','tambala (inv.)','Republic of Malawi','MW','MWI','Malawi','002','014',0,0,0,NULL,NULL),(458,'Kuala Lumpur (MY1)','Malaysian','458','ringgit (inv.)','MYR','sen (inv.)','Malaysia','MY','MYS','Malaysia','142','035',0,1,0,NULL,NULL),(462,'Malé','Maldivian','462','rufiyaa','MVR','laari (inv.)','Republic of Maldives','MV','MDV','Maldives','142','034',0,0,0,NULL,NULL),(466,'Bamako','Malian','466','CFA franc (BCEAO)','XOF','centime','Republic of Mali','ML','MLI','Mali','002','011',0,0,0,NULL,NULL),(470,'Valletta','Maltese','470','euro','EUR','cent','Republic of Malta','MT','MLT','Malta','150','039',1,0,0,',','.'),(474,'Fort-de-France','Martinican','474','euro','EUR','cent','Martinique','MQ','MTQ','Martinique','019','029',0,0,0,NULL,NULL),(478,'Nouakchott','Mauritanian','478','ouguiya','MRO','khoum','Islamic Republic of Mauritania','MR','MRT','Mauritania','002','011',0,0,0,NULL,NULL),(480,'Port Louis','Mauritian','480','Mauritian rupee','MUR','cent','Republic of Mauritius','MU','MUS','Mauritius','002','014',0,0,0,NULL,NULL),(484,'Mexico City','Mexican','484','Mexican peso','MXN','centavo','United Mexican States','MX','MEX','Mexico','019','013',0,1,0,NULL,NULL),(492,'Monaco','Monegasque','492','euro','EUR','cent','Principality of Monaco','MC','MCO','Monaco','150','155',0,0,0,NULL,NULL),(496,'Ulan Bator','Mongolian','496','tugrik','MNT','möngö (inv.)','Mongolia','MN','MNG','Mongolia','142','030',0,0,0,NULL,NULL),(498,'Chisinau','Moldovan','498','Moldovan leu (pl. lei)','MDL','ban','Republic of Moldova','MD','MDA','Moldova, Republic of','150','151',0,0,0,NULL,NULL),(499,'Podgorica','Montenegrin','499','euro','EUR','cent','Montenegro','ME','MNE','Montenegro','150','039',0,0,0,NULL,NULL),(500,'Plymouth (MS2)','Montserratian','500','East Caribbean dollar','XCD','cent','Montserrat','MS','MSR','Montserrat','019','029',0,0,0,NULL,NULL),(504,'Rabat','Moroccan','504','Moroccan dirham','MAD','centime','Kingdom of Morocco','MA','MAR','Morocco','002','015',0,0,0,NULL,NULL),(508,'Maputo','Mozambican','508','metical','MZN','centavo','Republic of Mozambique','MZ','MOZ','Mozambique','002','014',0,0,0,NULL,NULL),(512,'Muscat','Omani','512','Omani rial','OMR','baiza','Sultanate of Oman','OM','OMN','Oman','142','145',0,0,0,NULL,NULL),(516,'Windhoek','Namibian','516','Namibian dollar','NAD','cent','Republic of Namibia','NA','NAM','Namibia','002','018',0,0,0,NULL,NULL),(520,'Yaren','Nauruan','520','Australian dollar','AUD','cent','Republic of Nauru','NR','NRU','Nauru','009','057',0,0,0,NULL,NULL),(524,'Kathmandu','Nepalese','524','Nepalese rupee','NPR','paisa (inv.)','Nepal','NP','NPL','Nepal','142','034',0,0,0,NULL,NULL),(528,'Amsterdam (NL2)','Dutch','528','euro','EUR','cent','Kingdom of the Netherlands','NL','NLD','Netherlands','150','155',1,1,0,NULL,NULL),(531,'Willemstad','Curaçaoan','531','Netherlands Antillean guilder (CW1)','ANG','cent','Curaçao','CW','CUW','Curaçao','019','029',0,0,0,NULL,NULL),(533,'Oranjestad','Aruban','533','Aruban guilder','AWG','cent','Aruba','AW','ABW','Aruba','019','029',0,0,0,NULL,NULL),(534,'Philipsburg','Sint Maartener','534','Netherlands Antillean guilder (SX1)','ANG','cent','Sint Maarten','SX','SXM','Sint Maarten (Dutch part)','019','029',0,0,0,NULL,NULL),(535,NULL,'of Bonaire, Sint Eustatius and Saba','535','US dollar','USD','cent',NULL,'BQ','BES','Bonaire, Sint Eustatius and Saba','019','029',0,0,0,NULL,NULL),(540,'Nouméa','New Caledonian','540','CFP franc','XPF','centime','New Caledonia','NC','NCL','New Caledonia','009','054',0,0,0,NULL,NULL),(548,'Port Vila','Vanuatuan','548','vatu (inv.)','VUV','','Republic of Vanuatu','VU','VUT','Vanuatu','009','054',0,0,0,NULL,NULL),(554,'Wellington','New Zealander','554','New Zealand dollar','NZD','cent','New Zealand','NZ','NZL','New Zealand','009','053',0,0,0,NULL,NULL),(558,'Managua','Nicaraguan','558','córdoba oro','NIO','centavo','Republic of Nicaragua','NI','NIC','Nicaragua','019','013',0,0,0,NULL,NULL),(562,'Niamey','Nigerien','562','CFA franc (BCEAO)','XOF','centime','Republic of Niger','NE','NER','Niger','002','011',0,0,0,NULL,NULL),(566,'Abuja','Nigerian','566','naira (inv.)','NGN','kobo (inv.)','Federal Republic of Nigeria','NG','NGA','Nigeria','002','011',0,0,0,NULL,NULL),(570,'Alofi','Niuean','570','New Zealand dollar','NZD','cent','Niue','NU','NIU','Niue','009','061',0,0,0,NULL,NULL),(574,'Kingston','Norfolk Islander','574','Australian dollar','AUD','cent','Territory of Norfolk Island','NF','NFK','Norfolk Island','009','053',0,0,0,NULL,NULL),(578,'Oslo','Norwegian','578','Norwegian krone (pl. kroner)','NOK','øre (inv.)','Kingdom of Norway','NO','NOR','Norway','150','154',0,0,0,NULL,NULL),(580,'Saipan','Northern Mariana Islander','580','US dollar','USD','cent','Commonwealth of the Northern Mariana Islands','MP','MNP','Northern Mariana Islands','009','057',0,0,0,NULL,NULL),(581,'United States Minor Outlying Islands','of United States Minor Outlying Islands','581','US dollar','USD','cent','United States Minor Outlying Islands','UM','UMI','United States Minor Outlying Islands','','',0,0,0,NULL,NULL),(583,'Palikir','Micronesian','583','US dollar','USD','cent','Federated States of Micronesia','FM','FSM','Micronesia, Federated States of','009','057',0,0,0,NULL,NULL),(584,'Majuro','Marshallese','584','US dollar','USD','cent','Republic of the Marshall Islands','MH','MHL','Marshall Islands','009','057',0,0,0,NULL,NULL),(585,'Melekeok','Palauan','585','US dollar','USD','cent','Republic of Palau','PW','PLW','Palau','009','057',0,0,0,NULL,NULL),(586,'Islamabad','Pakistani','586','Pakistani rupee','PKR','paisa','Islamic Republic of Pakistan','PK','PAK','Pakistan','142','034',0,0,0,NULL,NULL),(591,'Panama City','Panamanian','591','balboa','PAB','centésimo','Republic of Panama','PA','PAN','Panama','019','013',0,0,0,NULL,NULL),(598,'Port Moresby','Papua New Guinean','598','kina (inv.)','PGK','toea (inv.)','Independent State of Papua New Guinea','PG','PNG','Papua New Guinea','009','054',0,0,0,NULL,NULL),(600,'Asunción','Paraguayan','600','guaraní','PYG','céntimo','Republic of Paraguay','PY','PRY','Paraguay','019','005',0,0,0,NULL,NULL),(604,'Lima','Peruvian','604','new sol','PEN','céntimo','Republic of Peru','PE','PER','Peru','019','005',0,0,0,NULL,NULL),(608,'Manila','Filipino','608','Philippine peso','PHP','centavo','Republic of the Philippines','PH','PHL','Philippines','142','035',0,0,0,NULL,NULL),(612,'Adamstown','Pitcairner','612','New Zealand dollar','NZD','cent','Pitcairn Islands','PN','PCN','Pitcairn','009','061',0,0,0,NULL,NULL),(616,'Warsaw','Polish','616','zloty','PLN','grosz (pl. groszy)','Republic of Poland','PL','POL','Poland','150','151',1,1,1,NULL,NULL),(620,'Lisbon','Portuguese','620','euro','EUR','cent','Portuguese Republic','PT','PRT','Portugal','150','039',1,1,1,NULL,NULL),(624,'Bissau','Guinea-Bissau national','624','CFA franc (BCEAO)','XOF','centime','Republic of Guinea-Bissau','GW','GNB','Guinea-Bissau','002','011',0,0,0,NULL,NULL),(626,'Dili','East Timorese','626','US dollar','USD','cent','Democratic Republic of East Timor','TL','TLS','Timor-Leste','142','035',0,0,0,NULL,NULL),(630,'San Juan','Puerto Rican','630','US dollar','USD','cent','Commonwealth of Puerto Rico','PR','PRI','Puerto Rico','019','029',0,0,0,NULL,NULL),(634,'Doha','Qatari','634','Qatari riyal','QAR','dirham','State of Qatar','QA','QAT','Qatar','142','145',0,0,0,NULL,NULL),(638,'Saint-Denis','Reunionese','638','euro','EUR','cent','Réunion','RE','REU','Réunion','002','014',0,0,0,NULL,NULL),(642,'Bucharest','Romanian','642','Romanian leu (pl. lei)','RON','ban (pl. bani)','Romania','RO','ROU','Romania','150','151',1,0,1,NULL,NULL),(643,'Moscow','Russian','643','Russian rouble','RUB','kopek','Russian Federation','RU','RUS','Russian Federation','150','151',0,0,0,NULL,NULL),(646,'Kigali','Rwandan; Rwandese','646','Rwandese franc','RWF','centime','Republic of Rwanda','RW','RWA','Rwanda','002','014',0,0,0,NULL,NULL),(652,'Gustavia','of Saint Barthélemy','652','euro','EUR','cent','Collectivity of Saint Barthélemy','BL','BLM','Saint Barthélemy','019','029',0,0,0,NULL,NULL),(654,'Jamestown','Saint Helenian','654','Saint Helena pound','SHP','penny','Saint Helena, Ascension and Tristan da Cunha','SH','SHN','Saint Helena, Ascension and Tristan da Cunha','002','011',0,0,0,NULL,NULL),(659,'Basseterre','Kittsian; Nevisian','659','East Caribbean dollar','XCD','cent','Federation of Saint Kitts and Nevis','KN','KNA','Saint Kitts and Nevis','019','029',0,0,0,NULL,NULL),(660,'The Valley','Anguillan','660','East Caribbean dollar','XCD','cent','Anguilla','AI','AIA','Anguilla','019','029',0,0,0,NULL,NULL),(662,'Castries','Saint Lucian','662','East Caribbean dollar','XCD','cent','Saint Lucia','LC','LCA','Saint Lucia','019','029',0,0,0,NULL,NULL),(663,'Marigot','of Saint Martin','663','euro','EUR','cent','Collectivity of Saint Martin','MF','MAF','Saint Martin (French part)','019','029',0,0,0,NULL,NULL),(666,'Saint-Pierre','St-Pierrais; Miquelonnais','666','euro','EUR','cent','Territorial Collectivity of Saint Pierre and Miquelon','PM','SPM','Saint Pierre and Miquelon','019','021',0,0,0,NULL,NULL),(670,'Kingstown','Vincentian','670','East Caribbean dollar','XCD','cent','Saint Vincent and the Grenadines','VC','VCT','Saint Vincent and the Grenadines','019','029',0,0,0,NULL,NULL),(674,'San Marino','San Marinese','674','euro','EUR','cent','Republic of San Marino','SM','SMR','San Marino','150','039',0,0,0,NULL,NULL),(678,'São Tomé','São Toméan','678','dobra','STD','centavo','Democratic Republic of São Tomé and Príncipe','ST','STP','Sao Tome and Principe','002','017',0,0,0,NULL,NULL),(682,'Riyadh','Saudi Arabian','682','riyal','SAR','halala','Kingdom of Saudi Arabia','SA','SAU','Saudi Arabia','142','145',0,0,0,NULL,NULL),(686,'Dakar','Senegalese','686','CFA franc (BCEAO)','XOF','centime','Republic of Senegal','SN','SEN','Senegal','002','011',0,0,0,NULL,NULL),(688,'Belgrade','Serb','688','Serbian dinar','RSD','para (inv.)','Republic of Serbia','RS','SRB','Serbia','150','039',0,0,0,NULL,NULL),(690,'Victoria','Seychellois','690','Seychelles rupee','SCR','cent','Republic of Seychelles','SC','SYC','Seychelles','002','014',0,0,0,NULL,NULL),(694,'Freetown','Sierra Leonean','694','leone','SLL','cent','Republic of Sierra Leone','SL','SLE','Sierra Leone','002','011',0,0,0,NULL,NULL),(702,'Singapore','Singaporean','702','Singapore dollar','SGD','cent','Republic of Singapore','SG','SGP','Singapore','142','035',0,0,0,NULL,NULL),(703,'Bratislava','Slovak','703','euro','EUR','cent','Slovak Republic','SK','SVK','Slovakia','150','151',1,0,1,NULL,NULL),(704,'Hanoi','Vietnamese','704','dong','VND','(10 hào','Socialist Republic of Vietnam','VN','VNM','Viet Nam','142','035',0,0,0,NULL,NULL),(705,'Ljubljana','Slovene','705','euro','EUR','cent','Republic of Slovenia','SI','SVN','Slovenia','150','039',1,0,1,NULL,NULL),(706,'Mogadishu','Somali','706','Somali shilling','SOS','cent','Somali Republic','SO','SOM','Somalia','002','014',0,0,0,NULL,NULL),(710,'Pretoria (ZA1)','South African','710','rand','ZAR','cent','Republic of South Africa','ZA','ZAF','South Africa','002','018',0,0,0,NULL,NULL),(716,'Harare','Zimbabwean','716','Zimbabwe dollar (ZW1)','ZWL','cent','Republic of Zimbabwe','ZW','ZWE','Zimbabwe','002','014',0,0,0,NULL,NULL),(724,'Madrid','Spaniard','724','euro','EUR','cent','Kingdom of Spain','ES','ESP','Spain','150','039',1,1,1,NULL,NULL),(728,'Juba','South Sudanese','728','South Sudanese pound','SSP','piaster','Republic of South Sudan','SS','SSD','South Sudan','002','015',0,0,0,NULL,NULL),(729,'Khartoum','Sudanese','729','Sudanese pound','SDG','piastre','Republic of the Sudan','SD','SDN','Sudan','002','015',0,0,0,NULL,NULL),(732,'Al aaiun','Sahrawi','732','Moroccan dirham','MAD','centime','Western Sahara','EH','ESH','Western Sahara','002','015',0,0,0,NULL,NULL),(740,'Paramaribo','Surinamese','740','Surinamese dollar','SRD','cent','Republic of Suriname','SR','SUR','Suriname','019','005',0,0,0,NULL,NULL),(744,'Longyearbyen','of Svalbard','744','Norwegian krone (pl. kroner)','NOK','øre (inv.)','Svalbard and Jan Mayen','SJ','SJM','Svalbard and Jan Mayen','150','154',0,0,0,NULL,NULL),(748,'Mbabane','Swazi','748','lilangeni','SZL','cent','Kingdom of Swaziland','SZ','SWZ','Swaziland','002','018',0,0,0,NULL,NULL),(752,'Stockholm','Swedish','752','krona (pl. kronor)','SEK','öre (inv.)','Kingdom of Sweden','SE','SWE','Sweden','150','154',1,1,1,NULL,NULL),(756,'Berne','Swiss','756','Swiss franc','CHF','centime','Swiss Confederation','CH','CHE','Switzerland','150','155',0,1,0,NULL,NULL),(760,'Damascus','Syrian','760','Syrian pound','SYP','piastre','Syrian Arab Republic','SY','SYR','Syrian Arab Republic','142','145',0,0,0,NULL,NULL),(762,'Dushanbe','Tajik','762','somoni','TJS','diram','Republic of Tajikistan','TJ','TJK','Tajikistan','142','143',0,0,0,NULL,NULL),(764,'Bangkok','Thai','764','baht (inv.)','THB','satang (inv.)','Kingdom of Thailand','TH','THA','Thailand','142','035',0,0,0,NULL,NULL),(768,'Lomé','Togolese','768','CFA franc (BCEAO)','XOF','centime','Togolese Republic','TG','TGO','Togo','002','011',0,0,0,NULL,NULL),(772,'(TK2)','Tokelauan','772','New Zealand dollar','NZD','cent','Tokelau','TK','TKL','Tokelau','009','061',0,0,0,NULL,NULL),(776,'Nuku’alofa','Tongan','776','pa’anga (inv.)','TOP','seniti (inv.)','Kingdom of Tonga','TO','TON','Tonga','009','061',0,0,0,NULL,NULL),(780,'Port of Spain','Trinidadian; Tobagonian','780','Trinidad and Tobago dollar','TTD','cent','Republic of Trinidad and Tobago','TT','TTO','Trinidad and Tobago','019','029',0,0,0,NULL,NULL),(784,'Abu Dhabi','Emirian','784','UAE dirham','AED','fils (inv.)','United Arab Emirates','AE','ARE','United Arab Emirates','142','145',0,0,0,NULL,NULL),(788,'Tunis','Tunisian','788','Tunisian dinar','TND','millime','Republic of Tunisia','TN','TUN','Tunisia','002','015',0,0,0,NULL,NULL),(792,'Ankara','Turk','792','Turkish lira (inv.)','TRY','kurus (inv.)','Republic of Turkey','TR','TUR','Turkey','142','145',0,0,0,NULL,NULL),(795,'Ashgabat','Turkmen','795','Turkmen manat (inv.)','TMT','tenge (inv.)','Turkmenistan','TM','TKM','Turkmenistan','142','143',0,0,0,NULL,NULL),(796,'Cockburn Town','Turks and Caicos Islander','796','US dollar','USD','cent','Turks and Caicos Islands','TC','TCA','Turks and Caicos Islands','019','029',0,0,0,NULL,NULL),(798,'Funafuti','Tuvaluan','798','Australian dollar','AUD','cent','Tuvalu','TV','TUV','Tuvalu','009','061',0,0,0,NULL,NULL),(800,'Kampala','Ugandan','800','Uganda shilling','UGX','cent','Republic of Uganda','UG','UGA','Uganda','002','014',0,0,0,NULL,NULL),(804,'Kiev','Ukrainian','804','hryvnia','UAH','kopiyka','Ukraine','UA','UKR','Ukraine','150','151',0,0,0,NULL,NULL),(807,'Skopje','of the former Yugoslav Republic of Macedonia','807','denar (pl. denars)','MKD','deni (inv.)','the former Yugoslav Republic of Macedonia','MK','MKD','Macedonia, the former Yugoslav Republic of','150','039',0,0,0,NULL,NULL),(818,'Cairo','Egyptian','818','Egyptian pound','EGP','piastre','Arab Republic of Egypt','EG','EGY','Egypt','002','015',0,0,0,NULL,NULL),(826,'London','British','826','pound sterling','GBP','penny (pl. pence)','United Kingdom of Great Britain and Northern Ireland','GB','GBR','United Kingdom','150','154',1,0,0,NULL,NULL),(831,'St Peter Port','of Guernsey','831','Guernsey pound (GG2)','GGP (GG2)','penny (pl. pence)','Bailiwick of Guernsey','GG','GGY','Guernsey','150','154',0,0,0,NULL,NULL),(832,'St Helier','of Jersey','832','Jersey pound (JE2)','JEP (JE2)','penny (pl. pence)','Bailiwick of Jersey','JE','JEY','Jersey','150','154',0,0,0,NULL,NULL),(833,'Douglas','Manxman; Manxwoman','833','Manx pound (IM2)','IMP (IM2)','penny (pl. pence)','Isle of Man','IM','IMN','Isle of Man','150','154',0,0,0,NULL,NULL),(834,'Dodoma (TZ1)','Tanzanian','834','Tanzanian shilling','TZS','cent','United Republic of Tanzania','TZ','TZA','Tanzania, United Republic of','002','014',0,0,0,NULL,NULL),(840,'Washington DC','American','840','US dollar','USD','cent','United States of America','US','USA','United States','019','021',0,0,0,',','.'),(850,'Charlotte Amalie','US Virgin Islander','850','US dollar','USD','cent','United States Virgin Islands','VI','VIR','Virgin Islands, U.S.','019','029',0,0,0,NULL,NULL),(854,'Ouagadougou','Burkinabe','854','CFA franc (BCEAO)','XOF','centime','Burkina Faso','BF','BFA','Burkina Faso','002','011',0,0,0,NULL,NULL),(858,'Montevideo','Uruguayan','858','Uruguayan peso','UYU','centésimo','Eastern Republic of Uruguay','UY','URY','Uruguay','019','005',0,1,0,NULL,NULL),(860,'Tashkent','Uzbek','860','sum (inv.)','UZS','tiyin (inv.)','Republic of Uzbekistan','UZ','UZB','Uzbekistan','142','143',0,0,0,NULL,NULL),(862,'Caracas','Venezuelan','862','bolívar fuerte (pl. bolívares fuertes)','VEF','céntimo','Bolivarian Republic of Venezuela','VE','VEN','Venezuela, Bolivarian Republic of','019','005',0,0,0,NULL,NULL),(876,'Mata-Utu','Wallisian; Futunan; Wallis and Futuna Islander','876','CFP franc','XPF','centime','Wallis and Futuna','WF','WLF','Wallis and Futuna','009','061',0,0,0,NULL,NULL),(882,'Apia','Samoan','882','tala (inv.)','WST','sene (inv.)','Independent State of Samoa','WS','WSM','Samoa','009','061',0,0,0,NULL,NULL),(887,'San’a','Yemenite','887','Yemeni rial','YER','fils (inv.)','Republic of Yemen','YE','YEM','Yemen','142','145',0,0,0,NULL,NULL),(894,'Lusaka','Zambian','894','Zambian kwacha (inv.)','ZMW','ngwee (inv.)','Republic of Zambia','ZM','ZMB','Zambia','002','014',0,0,0,NULL,NULL); /*!40000 ALTER TABLE `countries` ENABLE KEYS */; UNLOCK TABLES; @@ -863,7 +869,7 @@ CREATE TABLE `currencies` ( `swap_currency_symbol` tinyint(1) NOT NULL DEFAULT '0', `exchange_rate` decimal(13,4) DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=74 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -872,7 +878,7 @@ CREATE TABLE `currencies` ( LOCK TABLES `currencies` WRITE; /*!40000 ALTER TABLE `currencies` DISABLE KEYS */; -INSERT INTO `currencies` VALUES (1,'US Dollar','$','2',',','.','USD',0,NULL),(2,'British Pound','£','2',',','.','GBP',0,NULL),(3,'Euro','€','2','.',',','EUR',0,NULL),(4,'South African Rand','R','2','.',',','ZAR',0,NULL),(5,'Danish Krone','kr','2','.',',','DKK',1,NULL),(6,'Israeli Shekel','NIS ','2',',','.','ILS',0,NULL),(7,'Swedish Krona','kr','2','.',',','SEK',1,NULL),(8,'Kenyan Shilling','KSh ','2',',','.','KES',0,NULL),(9,'Canadian Dollar','C$','2',',','.','CAD',0,NULL),(10,'Philippine Peso','P ','2',',','.','PHP',0,NULL),(11,'Indian Rupee','Rs. ','2',',','.','INR',0,NULL),(12,'Australian Dollar','$','2',',','.','AUD',0,NULL),(13,'Singapore Dollar','','2',',','.','SGD',0,NULL),(14,'Norske Kroner','kr','2','.',',','NOK',1,NULL),(15,'New Zealand Dollar','$','2',',','.','NZD',0,NULL),(16,'Vietnamese Dong','','0','.',',','VND',0,NULL),(17,'Swiss Franc','','2','\'','.','CHF',0,NULL),(18,'Guatemalan Quetzal','Q','2',',','.','GTQ',0,NULL),(19,'Malaysian Ringgit','RM','2',',','.','MYR',0,NULL),(20,'Brazilian Real','R$','2','.',',','BRL',0,NULL),(21,'Thai Baht','','2',',','.','THB',0,NULL),(22,'Nigerian Naira','','2',',','.','NGN',0,NULL),(23,'Argentine Peso','$','2','.',',','ARS',0,NULL),(24,'Bangladeshi Taka','Tk','2',',','.','BDT',0,NULL),(25,'United Arab Emirates Dirham','DH ','2',',','.','AED',0,NULL),(26,'Hong Kong Dollar','','2',',','.','HKD',0,NULL),(27,'Indonesian Rupiah','Rp','2',',','.','IDR',0,NULL),(28,'Mexican Peso','$','2',',','.','MXN',0,NULL),(29,'Egyptian Pound','E£','2',',','.','EGP',0,NULL),(30,'Colombian Peso','$','2','.',',','COP',0,NULL),(31,'West African Franc','CFA ','2',',','.','XOF',0,NULL),(32,'Chinese Renminbi','RMB ','2',',','.','CNY',0,NULL),(33,'Rwandan Franc','RF ','2',',','.','RWF',0,NULL),(34,'Tanzanian Shilling','TSh ','2',',','.','TZS',0,NULL),(35,'Netherlands Antillean Guilder','','2','.',',','ANG',0,NULL),(36,'Trinidad and Tobago Dollar','TT$','2',',','.','TTD',0,NULL),(37,'East Caribbean Dollar','EC$','2',',','.','XCD',0,NULL),(38,'Ghanaian Cedi','','2',',','.','GHS',0,NULL),(39,'Bulgarian Lev','','2',' ','.','BGN',0,NULL),(40,'Aruban Florin','Afl. ','2',' ','.','AWG',0,NULL),(41,'Turkish Lira','TL ','2','.',',','TRY',0,NULL),(42,'Romanian New Leu','','2',',','.','RON',0,NULL),(43,'Croatian Kuna','kn','2','.',',','HRK',0,NULL),(44,'Saudi Riyal','','2',',','.','SAR',0,NULL),(45,'Japanese Yen','¥','0',',','.','JPY',0,NULL),(46,'Maldivian Rufiyaa','','2',',','.','MVR',0,NULL),(47,'Costa Rican Colón','','2',',','.','CRC',0,NULL),(48,'Pakistani Rupee','Rs ','0',',','.','PKR',0,NULL),(49,'Polish Zloty','zł','2',' ',',','PLN',1,NULL),(50,'Sri Lankan Rupee','LKR','2',',','.','LKR',1,NULL),(51,'Czech Koruna','Kč','2',' ',',','CZK',1,NULL),(52,'Uruguayan Peso','$','2','.',',','UYU',0,NULL),(53,'Namibian Dollar','$','2',',','.','NAD',0,NULL),(54,'Tunisian Dinar','','2',',','.','TND',0,NULL),(55,'Russian Ruble','','2',',','.','RUB',0,NULL),(56,'Mozambican Metical','MT','2','.',',','MZN',1,NULL),(57,'Omani Rial','','2',',','.','OMR',0,NULL),(58,'Ukrainian Hryvnia','','2',',','.','UAH',0,NULL),(59,'Macanese Pataca','MOP$','2',',','.','MOP',0,NULL),(60,'Taiwan New Dollar','NT$','2',',','.','TWD',0,NULL),(61,'Dominican Peso','RD$','2',',','.','DOP',0,NULL),(62,'Chilean Peso','$','0','.',',','CLP',0,NULL),(63,'Icelandic Króna','kr','2','.',',','ISK',1,NULL),(64,'Papua New Guinean Kina','K','2',',','.','PGK',0,NULL),(65,'Jordanian Dinar','','2',',','.','JOD',0,NULL),(66,'Myanmar Kyat','K','2',',','.','MMK',0,NULL),(67,'Peruvian Sol','S/ ','2',',','.','PEN',0,NULL),(68,'Botswana Pula','P','2',',','.','BWP',0,NULL),(69,'Hungarian Forint','Ft','0','.',',','HUF',1,NULL),(70,'Ugandan Shilling','USh ','2',',','.','UGX',0,NULL),(71,'Barbadian Dollar','$','2',',','.','BBD',0,NULL),(72,'Brunei Dollar','B$','2',',','.','BND',0,NULL); +INSERT INTO `currencies` VALUES (1,'US Dollar','$','2',',','.','USD',0,NULL),(2,'British Pound','£','2',',','.','GBP',0,NULL),(3,'Euro','€','2','.',',','EUR',0,NULL),(4,'South African Rand','R','2','.',',','ZAR',0,NULL),(5,'Danish Krone','kr','2','.',',','DKK',1,NULL),(6,'Israeli Shekel','NIS ','2',',','.','ILS',0,NULL),(7,'Swedish Krona','kr','2','.',',','SEK',1,NULL),(8,'Kenyan Shilling','KSh ','2',',','.','KES',0,NULL),(9,'Canadian Dollar','C$','2',',','.','CAD',0,NULL),(10,'Philippine Peso','P ','2',',','.','PHP',0,NULL),(11,'Indian Rupee','Rs. ','2',',','.','INR',0,NULL),(12,'Australian Dollar','$','2',',','.','AUD',0,NULL),(13,'Singapore Dollar','','2',',','.','SGD',0,NULL),(14,'Norske Kroner','kr','2','.',',','NOK',1,NULL),(15,'New Zealand Dollar','$','2',',','.','NZD',0,NULL),(16,'Vietnamese Dong','','0','.',',','VND',0,NULL),(17,'Swiss Franc','','2','\'','.','CHF',0,NULL),(18,'Guatemalan Quetzal','Q','2',',','.','GTQ',0,NULL),(19,'Malaysian Ringgit','RM','2',',','.','MYR',0,NULL),(20,'Brazilian Real','R$','2','.',',','BRL',0,NULL),(21,'Thai Baht','','2',',','.','THB',0,NULL),(22,'Nigerian Naira','','2',',','.','NGN',0,NULL),(23,'Argentine Peso','$','2','.',',','ARS',0,NULL),(24,'Bangladeshi Taka','Tk','2',',','.','BDT',0,NULL),(25,'United Arab Emirates Dirham','DH ','2',',','.','AED',0,NULL),(26,'Hong Kong Dollar','','2',',','.','HKD',0,NULL),(27,'Indonesian Rupiah','Rp','2',',','.','IDR',0,NULL),(28,'Mexican Peso','$','2',',','.','MXN',0,NULL),(29,'Egyptian Pound','E£','2',',','.','EGP',0,NULL),(30,'Colombian Peso','$','2','.',',','COP',0,NULL),(31,'West African Franc','CFA ','2',',','.','XOF',0,NULL),(32,'Chinese Renminbi','RMB ','2',',','.','CNY',0,NULL),(33,'Rwandan Franc','RF ','2',',','.','RWF',0,NULL),(34,'Tanzanian Shilling','TSh ','2',',','.','TZS',0,NULL),(35,'Netherlands Antillean Guilder','','2','.',',','ANG',0,NULL),(36,'Trinidad and Tobago Dollar','TT$','2',',','.','TTD',0,NULL),(37,'East Caribbean Dollar','EC$','2',',','.','XCD',0,NULL),(38,'Ghanaian Cedi','','2',',','.','GHS',0,NULL),(39,'Bulgarian Lev','','2',' ','.','BGN',0,NULL),(40,'Aruban Florin','Afl. ','2',' ','.','AWG',0,NULL),(41,'Turkish Lira','TL ','2','.',',','TRY',0,NULL),(42,'Romanian New Leu','','2',',','.','RON',0,NULL),(43,'Croatian Kuna','kn','2','.',',','HRK',0,NULL),(44,'Saudi Riyal','','2',',','.','SAR',0,NULL),(45,'Japanese Yen','¥','0',',','.','JPY',0,NULL),(46,'Maldivian Rufiyaa','','2',',','.','MVR',0,NULL),(47,'Costa Rican Colón','','2',',','.','CRC',0,NULL),(48,'Pakistani Rupee','Rs ','0',',','.','PKR',0,NULL),(49,'Polish Zloty','zł','2',' ',',','PLN',1,NULL),(50,'Sri Lankan Rupee','LKR','2',',','.','LKR',1,NULL),(51,'Czech Koruna','Kč','2',' ',',','CZK',1,NULL),(52,'Uruguayan Peso','$','2','.',',','UYU',0,NULL),(53,'Namibian Dollar','$','2',',','.','NAD',0,NULL),(54,'Tunisian Dinar','','2',',','.','TND',0,NULL),(55,'Russian Ruble','','2',',','.','RUB',0,NULL),(56,'Mozambican Metical','MT','2','.',',','MZN',1,NULL),(57,'Omani Rial','','2',',','.','OMR',0,NULL),(58,'Ukrainian Hryvnia','','2',',','.','UAH',0,NULL),(59,'Macanese Pataca','MOP$','2',',','.','MOP',0,NULL),(60,'Taiwan New Dollar','NT$','2',',','.','TWD',0,NULL),(61,'Dominican Peso','RD$','2',',','.','DOP',0,NULL),(62,'Chilean Peso','$','0','.',',','CLP',0,NULL),(63,'Icelandic Króna','kr','2','.',',','ISK',1,NULL),(64,'Papua New Guinean Kina','K','2',',','.','PGK',0,NULL),(65,'Jordanian Dinar','','2',',','.','JOD',0,NULL),(66,'Myanmar Kyat','K','2',',','.','MMK',0,NULL),(67,'Peruvian Sol','S/ ','2',',','.','PEN',0,NULL),(68,'Botswana Pula','P','2',',','.','BWP',0,NULL),(69,'Hungarian Forint','Ft','0','.',',','HUF',1,NULL),(70,'Ugandan Shilling','USh ','2',',','.','UGX',0,NULL),(71,'Barbadian Dollar','$','2',',','.','BBD',0,NULL),(72,'Brunei Dollar','B$','2',',','.','BND',0,NULL),(73,'Georgian Lari','','2',' ',',','GEL',0,NULL); /*!40000 ALTER TABLE `currencies` ENABLE KEYS */; UNLOCK TABLES; @@ -1079,7 +1085,9 @@ CREATE TABLE `expenses` ( KEY `expenses_invoice_currency_id_foreign` (`invoice_currency_id`), KEY `expenses_expense_category_id_index` (`expense_category_id`), KEY `expenses_payment_type_id_foreign` (`payment_type_id`), + KEY `expenses_client_id_foreign` (`client_id`), CONSTRAINT `expenses_account_id_foreign` FOREIGN KEY (`account_id`) REFERENCES `accounts` (`id`) ON DELETE CASCADE, + CONSTRAINT `expenses_client_id_foreign` FOREIGN KEY (`client_id`) REFERENCES `clients` (`id`) ON DELETE CASCADE, CONSTRAINT `expenses_expense_category_id_foreign` FOREIGN KEY (`expense_category_id`) REFERENCES `expense_categories` (`id`) ON DELETE CASCADE, CONSTRAINT `expenses_expense_currency_id_foreign` FOREIGN KEY (`expense_currency_id`) REFERENCES `currencies` (`id`), CONSTRAINT `expenses_invoice_currency_id_foreign` FOREIGN KEY (`invoice_currency_id`) REFERENCES `currencies` (`id`), @@ -1108,6 +1116,7 @@ CREATE TABLE `failed_jobs` ( `connection` text COLLATE utf8_unicode_ci NOT NULL, `queue` text COLLATE utf8_unicode_ci NOT NULL, `payload` longtext COLLATE utf8_unicode_ci NOT NULL, + `exception` longtext COLLATE utf8_unicode_ci NOT NULL, `failed_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; @@ -1224,7 +1233,7 @@ CREATE TABLE `gateways` ( PRIMARY KEY (`id`), KEY `gateways_payment_library_id_foreign` (`payment_library_id`), CONSTRAINT `gateways_payment_library_id_foreign` FOREIGN KEY (`payment_library_id`) REFERENCES `payment_libraries` (`id`) ON DELETE CASCADE -) ENGINE=InnoDB AUTO_INCREMENT=66 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=67 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1233,7 +1242,7 @@ CREATE TABLE `gateways` ( LOCK TABLES `gateways` WRITE; /*!40000 ALTER TABLE `gateways` DISABLE KEYS */; -INSERT INTO `gateways` VALUES (1,'2018-02-21 16:58:00','2018-02-21 16:58:00','Authorize.Net AIM','AuthorizeNet_AIM',1,1,5,0,NULL,0,0),(2,'2018-02-21 16:58:00','2018-02-21 16:58:00','Authorize.Net SIM','AuthorizeNet_SIM',1,2,10000,0,NULL,0,0),(3,'2018-02-21 16:58:00','2018-02-21 16:58:00','CardSave','CardSave',1,1,10000,0,NULL,0,0),(4,'2018-02-21 16:58:00','2018-02-21 16:58:00','Eway Rapid','Eway_RapidShared',1,1,10000,0,NULL,1,0),(5,'2018-02-21 16:58:00','2018-02-21 16:58:00','FirstData Connect','FirstData_Connect',1,1,10000,0,NULL,0,0),(6,'2018-02-21 16:58:00','2018-02-21 16:58:00','GoCardless','GoCardless',1,2,10000,0,NULL,1,0),(7,'2018-02-21 16:58:00','2018-02-21 16:58:00','Migs ThreeParty','Migs_ThreeParty',1,1,10000,0,NULL,0,0),(8,'2018-02-21 16:58:00','2018-02-21 16:58:00','Migs TwoParty','Migs_TwoParty',1,1,10000,0,NULL,0,0),(9,'2018-02-21 16:58:00','2018-02-21 16:58:00','Mollie','Mollie',1,1,8,0,NULL,1,0),(10,'2018-02-21 16:58:00','2018-02-21 16:58:00','MultiSafepay','MultiSafepay',1,1,10000,0,NULL,0,0),(11,'2018-02-21 16:58:00','2018-02-21 16:58:00','Netaxept','Netaxept',1,1,10000,0,NULL,0,0),(12,'2018-02-21 16:58:00','2018-02-21 16:58:00','NetBanx','NetBanx',1,1,10000,0,NULL,0,0),(13,'2018-02-21 16:58:00','2018-02-21 16:58:00','PayFast','PayFast',1,1,10000,0,NULL,1,0),(14,'2018-02-21 16:58:00','2018-02-21 16:58:00','Payflow Pro','Payflow_Pro',1,1,10000,0,NULL,0,0),(15,'2018-02-21 16:58:00','2018-02-21 16:58:00','PaymentExpress PxPay','PaymentExpress_PxPay',1,1,10000,0,NULL,0,0),(16,'2018-02-21 16:58:00','2018-02-21 16:58:00','PaymentExpress PxPost','PaymentExpress_PxPost',1,1,10000,0,NULL,0,0),(17,'2018-02-21 16:58:00','2018-02-21 16:58:00','PayPal Express','PayPal_Express',1,1,4,0,NULL,1,0),(18,'2018-02-21 16:58:00','2018-02-21 16:58:00','PayPal Pro','PayPal_Pro',1,1,10000,0,NULL,0,0),(19,'2018-02-21 16:58:00','2018-02-21 16:58:00','Pin','Pin',1,1,10000,0,NULL,0,0),(20,'2018-02-21 16:58:00','2018-02-21 16:58:00','SagePay Direct','SagePay_Direct',1,1,10000,0,NULL,0,0),(21,'2018-02-21 16:58:00','2018-02-21 16:58:00','SagePay Server','SagePay_Server',1,1,10000,0,NULL,0,0),(22,'2018-02-21 16:58:00','2018-02-21 16:58:00','SecurePay DirectPost','SecurePay_DirectPost',1,1,10000,0,NULL,0,0),(23,'2018-02-21 16:58:00','2018-02-21 16:58:00','Stripe','Stripe',1,1,1,0,NULL,0,0),(24,'2018-02-21 16:58:00','2018-02-21 16:58:00','TargetPay Direct eBanking','TargetPay_Directebanking',1,1,10000,0,NULL,0,0),(25,'2018-02-21 16:58:00','2018-02-21 16:58:00','TargetPay Ideal','TargetPay_Ideal',1,1,10000,0,NULL,0,0),(26,'2018-02-21 16:58:00','2018-02-21 16:58:00','TargetPay Mr Cash','TargetPay_Mrcash',1,1,10000,0,NULL,0,0),(27,'2018-02-21 16:58:00','2018-02-21 16:58:00','TwoCheckout','TwoCheckout',1,1,10000,0,NULL,1,0),(28,'2018-02-21 16:58:00','2018-02-21 16:58:00','WorldPay','WorldPay',1,1,10000,0,NULL,0,0),(29,'2018-02-21 16:58:00','2018-02-21 16:58:00','BeanStream','BeanStream',1,2,10000,0,NULL,0,0),(30,'2018-02-21 16:58:00','2018-02-21 16:58:00','Psigate','Psigate',1,2,10000,0,NULL,0,0),(31,'2018-02-21 16:58:00','2018-02-21 16:58:00','moolah','AuthorizeNet_AIM',1,1,10000,0,NULL,0,0),(32,'2018-02-21 16:58:00','2018-02-21 16:58:00','Alipay','Alipay_Express',1,1,10000,0,NULL,0,0),(33,'2018-02-21 16:58:00','2018-02-21 16:58:00','Buckaroo','Buckaroo_CreditCard',1,1,10000,0,NULL,0,0),(34,'2018-02-21 16:58:00','2018-02-21 16:58:00','Coinbase','Coinbase',1,1,10000,0,NULL,0,0),(35,'2018-02-21 16:58:00','2018-02-21 16:58:00','DataCash','DataCash',1,1,10000,0,NULL,0,0),(36,'2018-02-21 16:58:00','2018-02-21 16:58:00','Neteller','Neteller',1,2,10000,0,NULL,0,0),(37,'2018-02-21 16:58:00','2018-02-21 16:58:00','Pacnet','Pacnet',1,1,10000,0,NULL,0,0),(38,'2018-02-21 16:58:00','2018-02-21 16:58:00','PaymentSense','PaymentSense',1,2,10000,0,NULL,0,0),(39,'2018-02-21 16:58:00','2018-02-21 16:58:00','Realex','Realex_Remote',1,1,10000,0,NULL,0,0),(40,'2018-02-21 16:58:00','2018-02-21 16:58:00','Sisow','Sisow',1,1,10000,0,NULL,0,0),(41,'2018-02-21 16:58:00','2018-02-21 16:58:00','Skrill','Skrill',1,1,10000,0,NULL,1,0),(42,'2018-02-21 16:58:00','2018-02-21 16:58:00','BitPay','BitPay',1,1,7,0,NULL,1,0),(43,'2018-02-21 16:58:00','2018-02-21 16:58:00','Dwolla','Dwolla',1,1,6,0,NULL,1,0),(44,'2018-02-21 16:58:00','2018-02-21 16:58:00','AGMS','Agms',1,1,10000,0,NULL,0,0),(45,'2018-02-21 16:58:00','2018-02-21 16:58:00','Barclays','BarclaysEpdq\\Essential',1,1,10000,0,NULL,0,0),(46,'2018-02-21 16:58:00','2018-02-21 16:58:00','Cardgate','Cardgate',1,1,10000,0,NULL,0,0),(47,'2018-02-21 16:58:00','2018-02-21 16:58:00','Checkout.com','CheckoutCom',1,1,10000,0,NULL,0,0),(48,'2018-02-21 16:58:00','2018-02-21 16:58:00','Creditcall','Creditcall',1,1,10000,0,NULL,0,0),(49,'2018-02-21 16:58:00','2018-02-21 16:58:00','Cybersource','Cybersource',1,1,10000,0,NULL,0,0),(50,'2018-02-21 16:58:00','2018-02-21 16:58:00','ecoPayz','Ecopayz',1,1,10000,0,NULL,0,0),(51,'2018-02-21 16:58:00','2018-02-21 16:58:00','Fasapay','Fasapay',1,1,10000,0,NULL,0,0),(52,'2018-02-21 16:58:00','2018-02-21 16:58:00','Komoju','Komoju',1,1,10000,0,NULL,0,0),(53,'2018-02-21 16:58:00','2018-02-21 16:58:00','Multicards','Multicards',1,2,10000,0,NULL,0,0),(54,'2018-02-21 16:58:00','2018-02-21 16:58:00','Pagar.Me','Pagarme',1,2,10000,0,NULL,0,0),(55,'2018-02-21 16:58:00','2018-02-21 16:58:00','Paysafecard','Paysafecard',1,1,10000,0,NULL,0,0),(56,'2018-02-21 16:58:00','2018-02-21 16:58:00','Paytrace','Paytrace_CreditCard',1,1,10000,0,NULL,0,0),(57,'2018-02-21 16:58:00','2018-02-21 16:58:00','Secure Trading','SecureTrading',1,1,10000,0,NULL,0,0),(58,'2018-02-21 16:58:00','2018-02-21 16:58:00','SecPay','SecPay',1,1,10000,0,NULL,0,0),(59,'2018-02-21 16:58:00','2018-02-21 16:58:00','WeChat Express','WeChat_Express',1,2,10000,0,NULL,0,0),(60,'2018-02-21 16:58:00','2018-02-21 16:58:00','WePay','WePay',1,1,3,0,NULL,0,0),(61,'2018-02-21 16:58:00','2018-02-21 16:58:00','Braintree','Braintree',1,1,3,0,NULL,0,0),(62,'2018-02-21 16:58:00','2018-02-21 16:58:00','Custom','Custom',1,1,20,0,NULL,1,0),(63,'2018-02-21 16:58:00','2018-02-21 16:58:00','FirstData Payeezy','FirstData_Payeezy',1,1,10000,0,NULL,0,0),(64,'2018-02-21 16:58:00','2018-02-21 16:58:00','GoCardless','GoCardlessV2\\Redirect',1,1,9,0,NULL,1,0),(65,'2018-02-21 16:58:00','2018-02-21 16:58:00','PagSeguro','PagSeguro',1,1,10000,0,NULL,0,0); +INSERT INTO `gateways` VALUES (1,'2018-03-27 10:06:17','2018-03-27 10:06:17','Authorize.Net AIM','AuthorizeNet_AIM',1,1,5,0,NULL,0,0),(2,'2018-03-27 10:06:17','2018-03-27 10:06:17','Authorize.Net SIM','AuthorizeNet_SIM',1,2,10000,0,NULL,0,0),(3,'2018-03-27 10:06:17','2018-03-27 10:06:17','CardSave','CardSave',1,1,10000,0,NULL,0,0),(4,'2018-03-27 10:06:17','2018-03-27 10:06:17','Eway Rapid','Eway_RapidShared',1,1,10000,0,NULL,1,0),(5,'2018-03-27 10:06:17','2018-03-27 10:06:17','FirstData Connect','FirstData_Connect',1,1,10000,0,NULL,0,0),(6,'2018-03-27 10:06:17','2018-03-27 10:06:17','GoCardless','GoCardless',1,2,10000,0,NULL,1,0),(7,'2018-03-27 10:06:17','2018-03-27 10:06:17','Migs ThreeParty','Migs_ThreeParty',1,1,10000,0,NULL,0,0),(8,'2018-03-27 10:06:17','2018-03-27 10:06:17','Migs TwoParty','Migs_TwoParty',1,1,10000,0,NULL,0,0),(9,'2018-03-27 10:06:17','2018-03-27 10:06:17','Mollie','Mollie',1,1,8,0,NULL,1,0),(10,'2018-03-27 10:06:17','2018-03-27 10:06:17','MultiSafepay','MultiSafepay',1,1,10000,0,NULL,0,0),(11,'2018-03-27 10:06:17','2018-03-27 10:06:17','Netaxept','Netaxept',1,1,10000,0,NULL,0,0),(12,'2018-03-27 10:06:17','2018-03-27 10:06:17','NetBanx','NetBanx',1,1,10000,0,NULL,0,0),(13,'2018-03-27 10:06:17','2018-03-27 10:06:17','PayFast','PayFast',1,1,10000,0,NULL,1,0),(14,'2018-03-27 10:06:17','2018-03-27 10:06:17','Payflow Pro','Payflow_Pro',1,1,10000,0,NULL,0,0),(15,'2018-03-27 10:06:17','2018-03-27 10:06:17','PaymentExpress PxPay','PaymentExpress_PxPay',1,1,10000,0,NULL,0,0),(16,'2018-03-27 10:06:17','2018-03-27 10:06:17','PaymentExpress PxPost','PaymentExpress_PxPost',1,1,10000,0,NULL,0,0),(17,'2018-03-27 10:06:17','2018-03-27 10:06:17','PayPal Express','PayPal_Express',1,1,4,0,NULL,1,0),(18,'2018-03-27 10:06:17','2018-03-27 10:06:17','PayPal Pro','PayPal_Pro',1,1,10000,0,NULL,0,0),(19,'2018-03-27 10:06:17','2018-03-27 10:06:17','Pin','Pin',1,1,10000,0,NULL,0,0),(20,'2018-03-27 10:06:17','2018-03-27 10:06:17','SagePay Direct','SagePay_Direct',1,1,10000,0,NULL,0,0),(21,'2018-03-27 10:06:17','2018-03-27 10:06:17','SagePay Server','SagePay_Server',1,1,10000,0,NULL,1,0),(22,'2018-03-27 10:06:17','2018-03-27 10:06:17','SecurePay DirectPost','SecurePay_DirectPost',1,1,10000,0,NULL,0,0),(23,'2018-03-27 10:06:17','2018-03-27 10:06:17','Stripe','Stripe',1,1,1,0,NULL,0,0),(24,'2018-03-27 10:06:17','2018-03-27 10:06:17','TargetPay Direct eBanking','TargetPay_Directebanking',1,1,10000,0,NULL,0,0),(25,'2018-03-27 10:06:17','2018-03-27 10:06:17','TargetPay Ideal','TargetPay_Ideal',1,1,10000,0,NULL,0,0),(26,'2018-03-27 10:06:17','2018-03-27 10:06:17','TargetPay Mr Cash','TargetPay_Mrcash',1,1,10000,0,NULL,0,0),(27,'2018-03-27 10:06:17','2018-03-27 10:06:17','TwoCheckout','TwoCheckout',1,1,10000,0,NULL,1,0),(28,'2018-03-27 10:06:17','2018-03-27 10:06:17','WorldPay','WorldPay',1,1,10000,0,NULL,0,0),(29,'2018-03-27 10:06:17','2018-03-27 10:06:17','BeanStream','BeanStream',1,2,10000,0,NULL,0,0),(30,'2018-03-27 10:06:17','2018-03-27 10:06:17','Psigate','Psigate',1,2,10000,0,NULL,0,0),(31,'2018-03-27 10:06:17','2018-03-27 10:06:17','moolah','AuthorizeNet_AIM',1,1,10000,0,NULL,0,0),(32,'2018-03-27 10:06:17','2018-03-27 10:06:17','Alipay','Alipay_Express',1,1,10000,0,NULL,0,0),(33,'2018-03-27 10:06:17','2018-03-27 10:06:17','Buckaroo','Buckaroo_CreditCard',1,1,10000,0,NULL,0,0),(34,'2018-03-27 10:06:17','2018-03-27 10:06:17','Coinbase','Coinbase',1,1,10000,0,NULL,0,0),(35,'2018-03-27 10:06:17','2018-03-27 10:06:17','DataCash','DataCash',1,1,10000,0,NULL,0,0),(36,'2018-03-27 10:06:17','2018-03-27 10:06:17','Neteller','Neteller',1,2,10000,0,NULL,0,0),(37,'2018-03-27 10:06:17','2018-03-27 10:06:17','Pacnet','Pacnet',1,1,10000,0,NULL,0,0),(38,'2018-03-27 10:06:17','2018-03-27 10:06:17','PaymentSense','PaymentSense',1,2,10000,0,NULL,0,0),(39,'2018-03-27 10:06:17','2018-03-27 10:06:17','Realex','Realex_Remote',1,1,10000,0,NULL,0,0),(40,'2018-03-27 10:06:17','2018-03-27 10:06:17','Sisow','Sisow',1,1,10000,0,NULL,0,0),(41,'2018-03-27 10:06:17','2018-03-27 10:06:17','Skrill','Skrill',1,1,10000,0,NULL,1,0),(42,'2018-03-27 10:06:17','2018-03-27 10:06:17','BitPay','BitPay',1,1,7,0,NULL,1,0),(43,'2018-03-27 10:06:17','2018-03-27 10:06:17','Dwolla','Dwolla',1,1,6,0,NULL,1,0),(44,'2018-03-27 10:06:17','2018-03-27 10:06:17','AGMS','Agms',1,1,10000,0,NULL,0,0),(45,'2018-03-27 10:06:17','2018-03-27 10:06:17','Barclays','BarclaysEpdq\\Essential',1,1,10000,0,NULL,0,0),(46,'2018-03-27 10:06:17','2018-03-27 10:06:17','Cardgate','Cardgate',1,1,10000,0,NULL,0,0),(47,'2018-03-27 10:06:17','2018-03-27 10:06:17','Checkout.com','CheckoutCom',1,1,10000,0,NULL,0,0),(48,'2018-03-27 10:06:17','2018-03-27 10:06:17','Creditcall','Creditcall',1,1,10000,0,NULL,0,0),(49,'2018-03-27 10:06:17','2018-03-27 10:06:17','Cybersource','Cybersource',1,1,10000,0,NULL,0,0),(50,'2018-03-27 10:06:17','2018-03-27 10:06:17','ecoPayz','Ecopayz',1,1,10000,0,NULL,0,0),(51,'2018-03-27 10:06:17','2018-03-27 10:06:17','Fasapay','Fasapay',1,1,10000,0,NULL,0,0),(52,'2018-03-27 10:06:17','2018-03-27 10:06:17','Komoju','Komoju',1,1,10000,0,NULL,0,0),(53,'2018-03-27 10:06:17','2018-03-27 10:06:17','Multicards','Multicards',1,2,10000,0,NULL,0,0),(54,'2018-03-27 10:06:17','2018-03-27 10:06:17','Pagar.Me','Pagarme',1,2,10000,0,NULL,0,0),(55,'2018-03-27 10:06:17','2018-03-27 10:06:17','Paysafecard','Paysafecard',1,1,10000,0,NULL,0,0),(56,'2018-03-27 10:06:17','2018-03-27 10:06:17','Paytrace','Paytrace_CreditCard',1,1,10000,0,NULL,0,0),(57,'2018-03-27 10:06:17','2018-03-27 10:06:17','Secure Trading','SecureTrading',1,1,10000,0,NULL,0,0),(58,'2018-03-27 10:06:17','2018-03-27 10:06:17','SecPay','SecPay',1,1,10000,0,NULL,0,0),(59,'2018-03-27 10:06:17','2018-03-27 10:06:17','WeChat Express','WeChat_Express',1,2,10000,0,NULL,0,0),(60,'2018-03-27 10:06:17','2018-03-27 10:06:17','WePay','WePay',1,1,3,0,NULL,0,0),(61,'2018-03-27 10:06:17','2018-03-27 10:06:17','Braintree','Braintree',1,1,3,0,NULL,0,0),(62,'2018-03-27 10:06:17','2018-03-27 10:06:17','Custom','Custom',1,1,20,0,NULL,1,0),(63,'2018-03-27 10:06:17','2018-03-27 10:06:17','FirstData Payeezy','FirstData_Payeezy',1,1,10000,0,NULL,0,0),(64,'2018-03-27 10:06:17','2018-03-27 10:06:17','GoCardless','GoCardlessV2\\Redirect',1,1,9,0,NULL,1,0),(65,'2018-03-27 10:06:17','2018-03-27 10:06:17','PagSeguro','PagSeguro',1,1,10000,0,NULL,0,0),(66,'2018-03-27 10:06:17','2018-03-27 10:06:17','PAYMILL','Paymill',1,1,10000,0,NULL,0,0); /*!40000 ALTER TABLE `gateways` ENABLE KEYS */; UNLOCK TABLES; @@ -1328,7 +1337,7 @@ CREATE TABLE `invoice_designs` ( LOCK TABLES `invoice_designs` WRITE; /*!40000 ALTER TABLE `invoice_designs` DISABLE KEYS */; -INSERT INTO `invoice_designs` VALUES (1,'Clean','var GlobalY=0;//Y position of line at current page\n\n var client = invoice.client;\n var account = invoice.account;\n var currencyId = client.currency_id;\n\n layout.headerRight = 550;\n layout.rowHeight = 15;\n\n doc.setFontSize(9);\n\n if (invoice.image)\n {\n var left = layout.headerRight - invoice.imageWidth;\n doc.addImage(invoice.image, \'JPEG\', layout.marginLeft, 30);\n }\n \n if (!invoice.is_pro && logoImages.imageLogo1)\n {\n pageHeight=820;\n y=pageHeight-logoImages.imageLogoHeight1;\n doc.addImage(logoImages.imageLogo1, \'JPEG\', layout.marginLeft, y, logoImages.imageLogoWidth1, logoImages.imageLogoHeight1);\n }\n\n doc.setFontSize(9);\n SetPdfColor(\'LightBlue\', doc, \'primary\');\n displayAccount(doc, invoice, 220, layout.accountTop, layout);\n\n SetPdfColor(\'LightBlue\', doc, \'primary\');\n doc.setFontSize(\'11\');\n doc.text(50, layout.headerTop, (invoice.is_quote ? invoiceLabels.quote : invoiceLabels.invoice).toUpperCase());\n\n\n SetPdfColor(\'Black\',doc); //set black color\n doc.setFontSize(9);\n\n var invoiceHeight = displayInvoice(doc, invoice, 50, 170, layout);\n var clientHeight = displayClient(doc, invoice, 220, 170, layout);\n var detailsHeight = Math.max(invoiceHeight, clientHeight);\n layout.tableTop = Math.max(layout.tableTop, layout.headerTop + detailsHeight + (3 * layout.rowHeight));\n \n doc.setLineWidth(0.3); \n doc.setDrawColor(200,200,200);\n doc.line(layout.marginLeft - layout.tablePadding, layout.headerTop + 6, layout.marginRight + layout.tablePadding, layout.headerTop + 6);\n doc.line(layout.marginLeft - layout.tablePadding, layout.headerTop + detailsHeight + 14, layout.marginRight + layout.tablePadding, layout.headerTop + detailsHeight + 14);\n\n doc.setFontSize(10);\n doc.setFontType(\'bold\');\n displayInvoiceHeader(doc, invoice, layout);\n var y = displayInvoiceItems(doc, invoice, layout);\n\n doc.setFontSize(9);\n doc.setFontType(\'bold\');\n\n GlobalY=GlobalY+25;\n\n\n doc.setLineWidth(0.3);\n doc.setDrawColor(241,241,241);\n doc.setFillColor(241,241,241);\n var x1 = layout.marginLeft - 12;\n var y1 = GlobalY-layout.tablePadding;\n\n var w2 = 510 + 24;\n var h2 = doc.internal.getFontSize()*3+layout.tablePadding*2;\n\n if (invoice.discount) {\n h2 += doc.internal.getFontSize()*2;\n }\n if (invoice.tax_amount) {\n h2 += doc.internal.getFontSize()*2;\n }\n\n //doc.rect(x1, y1, w2, h2, \'FD\');\n\n doc.setFontSize(9);\n displayNotesAndTerms(doc, layout, invoice, y);\n y += displaySubtotals(doc, layout, invoice, y, layout.unitCostRight);\n\n\n doc.setFontSize(10);\n Msg = invoice.is_quote ? invoiceLabels.total : invoiceLabels.balance_due;\n var TmpMsgX = layout.unitCostRight-(doc.getStringUnitWidth(Msg) * doc.internal.getFontSize());\n \n doc.text(TmpMsgX, y, Msg);\n\n SetPdfColor(\'LightBlue\', doc, \'primary\');\n AmountText = formatMoney(invoice.balance_amount, currencyId);\n headerLeft=layout.headerRight+400;\n var AmountX = layout.lineTotalRight - (doc.getStringUnitWidth(AmountText) * doc.internal.getFontSize());\n doc.text(AmountX, y, AmountText);','{\"content\":[{\"columns\":[{\"image\":\"$accountLogo\",\"fit\":[120,80]},{\"stack\":\"$accountDetails\",\"margin\":[7,0,0,0]},{\"stack\":\"$accountAddress\"}]},{\"text\":\"$entityTypeUC\",\"margin\":[8,30,8,5],\"style\":\"entityTypeLabel\"},{\"table\":{\"headerRows\":1,\"widths\":[\"auto\",\"auto\",\"*\"],\"body\":[[{\"table\":{\"body\":\"$invoiceDetails\"},\"margin\":[0,0,12,0],\"layout\":\"noBorders\"},{\"stack\":\"$clientDetails\"},{\"text\":\"\"}]]},\"layout\":{\"hLineWidth\":\"$firstAndLast:.5\",\"vLineWidth\":\"$none\",\"hLineColor\":\"#D8D8D8\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:6\",\"paddingBottom\":\"$amount:6\"}},{\"style\":\"invoiceLineItemsTable\",\"table\":{\"headerRows\":1,\"widths\":\"$invoiceLineItemColumns\",\"body\":\"$invoiceLineItems\"},\"layout\":{\"hLineWidth\":\"$notFirst:.5\",\"vLineWidth\":\"$none\",\"hLineColor\":\"#D8D8D8\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:14\",\"paddingBottom\":\"$amount:14\"}},{\"columns\":[\"$notesAndTerms\",{\"table\":{\"widths\":[\"*\",\"40%\"],\"body\":\"$subtotals\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:34\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}}]},{\"stack\":[{\"image\":\"$signatureBase64\",\"margin\":[200,10,0,0]},{\"text\":\"$signatureDate\",\"margin\":[200,-40,0,0]}]},{\"stack\":[\"$invoiceDocuments\"],\"style\":\"invoiceDocuments\"}],\"defaultStyle\":{\"font\":\"$bodyFont\",\"fontSize\":\"$fontSize\",\"margin\":[8,4,8,4]},\"footer\":{\"columns\":[{\"text\":\"$invoiceFooter\",\"alignment\":\"left\"}],\"margin\":[40,-20,40,0]},\"styles\":{\"entityTypeLabel\":{\"font\":\"$headerFont\",\"fontSize\":\"$fontSizeLargest\",\"color\":\"$primaryColor:#37a3c6\"},\"primaryColor\":{\"color\":\"$primaryColor:#37a3c6\"},\"accountName\":{\"color\":\"$primaryColor:#37a3c6\",\"bold\":true},\"invoiceDetails\":{\"margin\":[0,0,8,0]},\"accountDetails\":{\"margin\":[0,2,0,2]},\"clientDetails\":{\"margin\":[0,2,0,2]},\"notesAndTerms\":{\"margin\":[0,2,0,2]},\"accountAddress\":{\"margin\":[0,2,0,2]},\"odd\":{\"fillColor\":\"#fbfbfb\"},\"productKey\":{\"color\":\"$primaryColor:#37a3c6\",\"bold\":true},\"subtotalsBalanceDueLabel\":{\"fontSize\":\"$fontSizeLarger\"},\"subtotalsBalanceDue\":{\"fontSize\":\"$fontSizeLarger\",\"color\":\"$primaryColor:#37a3c6\"},\"invoiceNumber\":{\"bold\":true},\"tableHeader\":{\"bold\":true,\"fontSize\":\"$fontSizeLarger\"},\"costTableHeader\":{\"alignment\":\"right\"},\"qtyTableHeader\":{\"alignment\":\"right\"},\"taxTableHeader\":{\"alignment\":\"right\"},\"lineTotalTableHeader\":{\"alignment\":\"right\"},\"invoiceLineItemsTable\":{\"margin\":[0,16,0,16]},\"clientName\":{\"bold\":true},\"cost\":{\"alignment\":\"right\"},\"quantity\":{\"alignment\":\"right\"},\"tax\":{\"alignment\":\"right\"},\"lineTotal\":{\"alignment\":\"right\"},\"subtotals\":{\"alignment\":\"right\"},\"termsLabel\":{\"bold\":true},\"fullheader\":{\"font\":\"$headerFont\",\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"subheader\":{\"font\":\"$headerFont\",\"fontSize\":\"$fontSizeLarger\"},\"help\":{\"fontSize\":\"$fontSizeSmaller\",\"color\":\"#737373\"},\"invoiceDocuments\":{\"margin\":[7,0,7,0]},\"invoiceDocument\":{\"margin\":[0,10,0,10]}},\"pageMargins\":[40,40,40,60]}'),(2,'Bold',' var GlobalY=0;//Y position of line at current page\n\n var client = invoice.client;\n var account = invoice.account;\n var currencyId = client.currency_id;\n\n layout.headerRight = 150;\n layout.rowHeight = 15;\n layout.headerTop = 125;\n layout.tableTop = 300;\n\n doc.setLineWidth(0.5);\n\n if (NINJA.primaryColor) {\n setDocHexFill(doc, NINJA.primaryColor);\n setDocHexDraw(doc, NINJA.primaryColor);\n } else {\n doc.setFillColor(46,43,43);\n } \n\n var x1 =0;\n var y1 = 0;\n var w2 = 595;\n var h2 = 100;\n doc.rect(x1, y1, w2, h2, \'FD\');\n\n if (invoice.image)\n {\n var left = layout.headerRight - invoice.imageWidth;\n doc.addImage(invoice.image, \'JPEG\', layout.marginLeft, 30);\n }\n\n doc.setLineWidth(0.5);\n if (NINJA.primaryColor) {\n setDocHexFill(doc, NINJA.primaryColor);\n setDocHexDraw(doc, NINJA.primaryColor);\n } else {\n doc.setFillColor(46,43,43);\n doc.setDrawColor(46,43,43);\n } \n\n // return doc.setTextColor(240,240,240);//select color Custom Report GRAY Colour\n var x1 = 0;//tableLeft-tablePadding ;\n var y1 = 750;\n var w2 = 596;\n var h2 = 94;//doc.internal.getFontSize()*length+length*1.1;//+h;//+tablePadding;\n\n doc.rect(x1, y1, w2, h2, \'FD\');\n if (!invoice.is_pro && logoImages.imageLogo2)\n {\n pageHeight=820;\n var left = 250;//headerRight ;\n y=pageHeight-logoImages.imageLogoHeight2;\n var headerRight=370;\n\n var left = headerRight - logoImages.imageLogoWidth2;\n doc.addImage(logoImages.imageLogo2, \'JPEG\', left, y, logoImages.imageLogoWidth2, logoImages.imageLogoHeight2);\n }\n\n doc.setFontSize(7);\n doc.setFontType(\'bold\');\n SetPdfColor(\'White\',doc);\n\n displayAccount(doc, invoice, 300, layout.accountTop, layout);\n\n\n var y = layout.accountTop;\n var left = layout.marginLeft;\n var headerY = layout.headerTop;\n\n SetPdfColor(\'GrayLogo\',doc); //set black color\n doc.setFontSize(7);\n\n //show left column\n SetPdfColor(\'Black\',doc); //set black color\n doc.setFontType(\'normal\');\n\n //publish filled box\n doc.setDrawColor(200,200,200);\n\n if (NINJA.secondaryColor) {\n setDocHexFill(doc, NINJA.secondaryColor);\n } else {\n doc.setFillColor(54,164,152); \n } \n\n GlobalY=190;\n doc.setLineWidth(0.5);\n\n var BlockLenght=220;\n var x1 =595-BlockLenght;\n var y1 = GlobalY-12;\n var w2 = BlockLenght;\n var h2 = getInvoiceDetailsHeight(invoice, layout) + layout.tablePadding + 2;\n\n doc.rect(x1, y1, w2, h2, \'FD\');\n\n SetPdfColor(\'SomeGreen\', doc, \'secondary\');\n doc.setFontSize(\'14\');\n doc.setFontType(\'bold\');\n doc.text(50, GlobalY, (invoice.is_quote ? invoiceLabels.your_quote : invoiceLabels.your_invoice).toUpperCase());\n\n\n var z=GlobalY;\n z=z+30;\n\n doc.setFontSize(\'8\'); \n SetPdfColor(\'Black\',doc); \n var clientHeight = displayClient(doc, invoice, layout.marginLeft, z, layout);\n layout.tableTop += Math.max(0, clientHeight - 75);\n marginLeft2=395;\n\n //publish left side information\n SetPdfColor(\'White\',doc);\n doc.setFontSize(\'8\');\n var detailsHeight = displayInvoice(doc, invoice, marginLeft2, z-25, layout) + 75;\n layout.tableTop = Math.max(layout.tableTop, layout.headerTop + detailsHeight + (2 * layout.tablePadding));\n\n y=z+60;\n x = GlobalY + 100;\n doc.setFontType(\'bold\');\n\n doc.setFontSize(12);\n doc.setFontType(\'bold\');\n SetPdfColor(\'Black\',doc);\n displayInvoiceHeader(doc, invoice, layout);\n\n var y = displayInvoiceItems(doc, invoice, layout);\n doc.setLineWidth(0.3);\n displayNotesAndTerms(doc, layout, invoice, y);\n y += displaySubtotals(doc, layout, invoice, y, layout.unitCostRight);\n\n doc.setFontType(\'bold\');\n\n doc.setFontSize(12);\n x += doc.internal.getFontSize()*4;\n Msg = invoice.is_quote ? invoiceLabels.total : invoiceLabels.balance_due;\n var TmpMsgX = layout.unitCostRight-(doc.getStringUnitWidth(Msg) * doc.internal.getFontSize());\n\n doc.text(TmpMsgX, y, Msg);\n\n //SetPdfColor(\'LightBlue\',doc);\n AmountText = formatMoney(invoice.balance_amount , currencyId);\n headerLeft=layout.headerRight+400;\n var AmountX = headerLeft - (doc.getStringUnitWidth(AmountText) * doc.internal.getFontSize());\n SetPdfColor(\'SomeGreen\', doc, \'secondary\');\n doc.text(AmountX, y, AmountText);','{\"content\":[{\"columns\":[{\"width\":380,\"stack\":[{\"text\":\"$yourInvoiceLabelUC\",\"style\":\"yourInvoice\"},\"$clientDetails\"],\"margin\":[60,100,0,10]},{\"canvas\":[{\"type\":\"rect\",\"x\":0,\"y\":0,\"w\":225,\"h\":\"$invoiceDetailsHeight\",\"r\":0,\"lineWidth\":1,\"color\":\"$primaryColor:#36a498\"}],\"width\":10,\"margin\":[-10,100,0,10]},{\"table\":{\"body\":\"$invoiceDetails\"},\"layout\":\"noBorders\",\"margin\":[0,110,0,0]}]},{\"style\":\"invoiceLineItemsTable\",\"table\":{\"headerRows\":1,\"widths\":\"$invoiceLineItemColumns\",\"body\":\"$invoiceLineItems\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:14\",\"paddingBottom\":\"$amount:14\"}},{\"columns\":[{\"width\":46,\"text\":\" \"},\"$notesAndTerms\",{\"table\":{\"widths\":[\"*\",\"40%\"],\"body\":\"$subtotals\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}}]},{\"stack\":[{\"image\":\"$signatureBase64\",\"margin\":[200,10,0,0]},{\"text\":\"$signatureDate\",\"margin\":[200,-40,0,0]}]},{\"stack\":[\"$invoiceDocuments\"],\"style\":\"invoiceDocuments\"}],\"footer\":[{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":0,\"x2\":600,\"y2\":0,\"lineWidth\":100,\"lineColor\":\"$secondaryColor:#292526\"}]},{\"columns\":[{\"text\":\"$invoiceFooter\",\"margin\":[40,-40,40,0],\"alignment\":\"left\",\"color\":\"#FFFFFF\"}]}],\"header\":[{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":0,\"x2\":600,\"y2\":0,\"lineWidth\":200,\"lineColor\":\"$secondaryColor:#292526\"}],\"width\":10},{\"columns\":[{\"image\":\"$accountLogo\",\"fit\":[120,60],\"margin\":[30,16,0,0]},{\"stack\":\"$accountDetails\",\"margin\":[0,16,0,0],\"width\":140},{\"stack\":\"$accountAddress\",\"margin\":[20,16,0,0]}]}],\"defaultStyle\":{\"font\":\"$bodyFont\",\"fontSize\":\"$fontSize\",\"margin\":[8,4,8,4]},\"styles\":{\"primaryColor\":{\"color\":\"$primaryColor:#36a498\"},\"accountName\":{\"bold\":true,\"margin\":[4,2,4,1],\"color\":\"$primaryColor:#36a498\"},\"accountDetails\":{\"margin\":[4,2,4,1],\"color\":\"#FFFFFF\"},\"accountAddress\":{\"margin\":[4,2,4,1],\"color\":\"#FFFFFF\"},\"clientDetails\":{\"margin\":[0,2,0,1]},\"odd\":{\"fillColor\":\"#ebebeb\"},\"subtotalsBalanceDueLabel\":{\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"subtotalsBalanceDue\":{\"fontSize\":\"$fontSizeLargest\",\"color\":\"$primaryColor:#36a498\",\"bold\":true},\"invoiceDetails\":{\"color\":\"#ffffff\"},\"invoiceNumber\":{\"bold\":true},\"tableHeader\":{\"fontSize\":12,\"bold\":true},\"costTableHeader\":{\"alignment\":\"right\"},\"qtyTableHeader\":{\"alignment\":\"right\"},\"taxTableHeader\":{\"alignment\":\"right\"},\"lineTotalTableHeader\":{\"alignment\":\"right\",\"margin\":[0,0,40,0]},\"firstColumn\":{\"margin\":[40,0,0,0]},\"lastColumn\":{\"margin\":[0,0,40,0]},\"productKey\":{\"color\":\"$primaryColor:#36a498\",\"bold\":true},\"yourInvoice\":{\"font\":\"$headerFont\",\"bold\":true,\"fontSize\":14,\"color\":\"$primaryColor:#36a498\",\"margin\":[0,0,0,8]},\"invoiceLineItemsTable\":{\"margin\":[0,26,0,16]},\"clientName\":{\"bold\":true},\"cost\":{\"alignment\":\"right\"},\"quantity\":{\"alignment\":\"right\"},\"tax\":{\"alignment\":\"right\"},\"lineTotal\":{\"alignment\":\"right\"},\"subtotals\":{\"alignment\":\"right\",\"margin\":[0,0,40,0]},\"termsLabel\":{\"bold\":true,\"margin\":[0,0,0,4]},\"fullheader\":{\"font\":\"$headerFont\",\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"subheader\":{\"font\":\"$headerFont\",\"fontSize\":\"$fontSizeLarger\"},\"help\":{\"fontSize\":\"$fontSizeSmaller\",\"color\":\"#737373\"},\"invoiceDocuments\":{\"margin\":[47,0,47,0]},\"invoiceDocument\":{\"margin\":[0,10,0,10]}},\"pageMargins\":[0,80,0,40]}'),(3,'Modern',' var client = invoice.client;\n var account = invoice.account;\n var currencyId = client.currency_id;\n\n layout.headerRight = 400;\n layout.rowHeight = 15;\n\n\n doc.setFontSize(7);\n\n // add header\n doc.setLineWidth(0.5);\n\n if (NINJA.primaryColor) {\n setDocHexFill(doc, NINJA.primaryColor);\n setDocHexDraw(doc, NINJA.primaryColor);\n } else {\n doc.setDrawColor(242,101,34);\n doc.setFillColor(242,101,34);\n } \n\n var x1 =0;\n var y1 = 0;\n var w2 = 595;\n var h2 = Math.max(110, getInvoiceDetailsHeight(invoice, layout) + 30);\n doc.rect(x1, y1, w2, h2, \'FD\');\n\n SetPdfColor(\'White\',doc);\n\n //second column\n doc.setFontType(\'bold\');\n var name = invoice.account.name; \n if (name) {\n doc.setFontSize(\'30\');\n doc.setFontType(\'bold\');\n doc.text(40, 50, name);\n }\n\n if (invoice.image)\n {\n y=130;\n var left = layout.headerRight - invoice.imageWidth;\n doc.addImage(invoice.image, \'JPEG\', layout.marginLeft, y);\n }\n\n // add footer \n doc.setLineWidth(0.5);\n\n if (NINJA.primaryColor) {\n setDocHexFill(doc, NINJA.primaryColor);\n setDocHexDraw(doc, NINJA.primaryColor);\n } else {\n doc.setDrawColor(242,101,34);\n doc.setFillColor(242,101,34);\n } \n\n var x1 = 0;//tableLeft-tablePadding ;\n var y1 = 750;\n var w2 = 596;\n var h2 = 94;//doc.internal.getFontSize()*length+length*1.1;//+h;//+tablePadding;\n\n doc.rect(x1, y1, w2, h2, \'FD\');\n\n if (!invoice.is_pro && logoImages.imageLogo3)\n {\n pageHeight=820;\n // var left = 25;//250;//headerRight ;\n y=pageHeight-logoImages.imageLogoHeight3;\n //var headerRight=370;\n\n //var left = headerRight - invoice.imageLogoWidth3;\n doc.addImage(logoImages.imageLogo3, \'JPEG\', 40, y, logoImages.imageLogoWidth3, logoImages.imageLogoHeight3);\n }\n\n doc.setFontSize(10); \n var marginLeft = 340;\n displayAccount(doc, invoice, marginLeft, 780, layout);\n\n\n SetPdfColor(\'White\',doc); \n doc.setFontSize(\'8\');\n var detailsHeight = displayInvoice(doc, invoice, layout.headerRight, layout.accountTop-10, layout);\n layout.headerTop = Math.max(layout.headerTop, detailsHeight + 50);\n layout.tableTop = Math.max(layout.tableTop, detailsHeight + 150);\n\n SetPdfColor(\'Black\',doc); //set black color\n doc.setFontSize(7);\n doc.setFontType(\'normal\');\n displayClient(doc, invoice, layout.headerRight, layout.headerTop, layout);\n\n\n \n SetPdfColor(\'White\',doc); \n doc.setFontType(\'bold\');\n\n doc.setLineWidth(0.3);\n if (NINJA.secondaryColor) {\n setDocHexFill(doc, NINJA.secondaryColor);\n setDocHexDraw(doc, NINJA.secondaryColor);\n } else {\n doc.setDrawColor(63,60,60);\n doc.setFillColor(63,60,60);\n } \n\n var left = layout.marginLeft - layout.tablePadding;\n var top = layout.tableTop - layout.tablePadding;\n var width = layout.marginRight - (2 * layout.tablePadding);\n var height = 20;\n doc.rect(left, top, width, height, \'FD\');\n \n\n displayInvoiceHeader(doc, invoice, layout);\n SetPdfColor(\'Black\',doc);\n var y = displayInvoiceItems(doc, invoice, layout);\n\n\n var height1 = displayNotesAndTerms(doc, layout, invoice, y);\n var height2 = displaySubtotals(doc, layout, invoice, y, layout.unitCostRight);\n y += Math.max(height1, height2);\n\n\n var left = layout.marginLeft - layout.tablePadding;\n var top = y - layout.tablePadding;\n var width = layout.marginRight - (2 * layout.tablePadding);\n var height = 20;\n if (NINJA.secondaryColor) {\n setDocHexFill(doc, NINJA.secondaryColor);\n setDocHexDraw(doc, NINJA.secondaryColor);\n } else {\n doc.setDrawColor(63,60,60);\n doc.setFillColor(63,60,60);\n } \n doc.rect(left, top, width, height, \'FD\');\n \n doc.setFontType(\'bold\');\n SetPdfColor(\'White\', doc);\n doc.setFontSize(12);\n \n var label = invoice.is_quote ? invoiceLabels.total : invoiceLabels.balance_due;\n var labelX = layout.unitCostRight-(doc.getStringUnitWidth(label) * doc.internal.getFontSize());\n doc.text(labelX, y+2, label);\n\n\n doc.setFontType(\'normal\');\n var amount = formatMoney(invoice.balance_amount , currencyId);\n headerLeft=layout.headerRight+400;\n var amountX = layout.lineTotalRight - (doc.getStringUnitWidth(amount) * doc.internal.getFontSize());\n doc.text(amountX, y+2, amount);','{\"content\":[{\"columns\":[{\"image\":\"$accountLogo\",\"fit\":[120,80],\"margin\":[0,60,0,30]},{\"stack\":\"$clientDetails\",\"margin\":[0,60,0,0]}]},{\"style\":\"invoiceLineItemsTable\",\"table\":{\"headerRows\":1,\"widths\":\"$invoiceLineItemColumns\",\"body\":\"$invoiceLineItems\"},\"layout\":{\"hLineWidth\":\"$notFirst:.5\",\"vLineWidth\":\"$notFirstAndLastColumn:.5\",\"hLineColor\":\"#888888\",\"vLineColor\":\"#FFFFFF\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:8\",\"paddingBottom\":\"$amount:8\"}},{\"columns\":[\"$notesAndTerms\",{\"table\":{\"widths\":[\"*\",\"40%\"],\"body\":\"$subtotalsWithoutBalance\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:34\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}}]},{\"columns\":[{\"canvas\":[{\"type\":\"rect\",\"x\":0,\"y\":0,\"w\":515,\"h\":26,\"r\":0,\"lineWidth\":1,\"color\":\"$secondaryColor:#403d3d\"}],\"width\":10,\"margin\":[0,10,0,0]},{\"text\":\"$balanceDueLabel\",\"style\":\"subtotalsBalanceDueLabel\",\"margin\":[0,16,0,0],\"width\":370},{\"text\":\"$balanceDue\",\"style\":\"subtotalsBalanceDue\",\"margin\":[0,16,8,0]}]},{\"stack\":[{\"image\":\"$signatureBase64\",\"margin\":[200,10,0,0]},{\"text\":\"$signatureDate\",\"margin\":[200,-40,0,0]}]},{\"stack\":[\"$invoiceDocuments\"],\"style\":\"invoiceDocuments\"}],\"footer\":[{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":0,\"x2\":600,\"y2\":0,\"lineWidth\":100,\"lineColor\":\"$primaryColor:#f26621\"}],\"width\":10},{\"columns\":[{\"width\":350,\"stack\":[{\"text\":\"$invoiceFooter\",\"margin\":[40,-40,40,0],\"alignment\":\"left\",\"color\":\"#FFFFFF\"}]},{\"stack\":\"$accountDetails\",\"margin\":[0,-40,0,0],\"width\":\"*\"},{\"stack\":\"$accountAddress\",\"margin\":[0,-40,0,0],\"width\":\"*\"}]}],\"header\":[{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":0,\"x2\":600,\"y2\":0,\"lineWidth\":200,\"lineColor\":\"$primaryColor:#f26621\"}],\"width\":10},{\"columns\":[{\"text\":\"$accountName\",\"bold\":true,\"font\":\"$headerFont\",\"fontSize\":30,\"color\":\"#ffffff\",\"margin\":[40,20,0,0],\"width\":350}]},{\"width\":300,\"table\":{\"body\":\"$invoiceDetails\"},\"layout\":\"noBorders\",\"margin\":[400,-40,0,0]}],\"defaultStyle\":{\"font\":\"$bodyFont\",\"fontSize\":\"$fontSize\",\"margin\":[8,4,8,4]},\"styles\":{\"primaryColor\":{\"color\":\"$primaryColor:#299CC2\"},\"accountName\":{\"margin\":[4,2,4,2],\"color\":\"$primaryColor:#299CC2\"},\"accountDetails\":{\"margin\":[4,2,4,2],\"color\":\"#FFFFFF\"},\"accountAddress\":{\"margin\":[4,2,4,2],\"color\":\"#FFFFFF\"},\"clientDetails\":{\"margin\":[0,2,4,2]},\"invoiceDetails\":{\"color\":\"#FFFFFF\"},\"invoiceLineItemsTable\":{\"margin\":[0,0,0,16]},\"productKey\":{\"bold\":true},\"clientName\":{\"bold\":true},\"tableHeader\":{\"bold\":true,\"color\":\"#FFFFFF\",\"fontSize\":\"$fontSizeLargest\",\"fillColor\":\"$secondaryColor:#403d3d\"},\"costTableHeader\":{\"alignment\":\"right\"},\"qtyTableHeader\":{\"alignment\":\"right\"},\"taxTableHeader\":{\"alignment\":\"right\"},\"lineTotalTableHeader\":{\"alignment\":\"right\"},\"subtotalsBalanceDueLabel\":{\"fontSize\":\"$fontSizeLargest\",\"color\":\"#FFFFFF\",\"alignment\":\"right\",\"bold\":true},\"subtotalsBalanceDue\":{\"fontSize\":\"$fontSizeLargest\",\"color\":\"#FFFFFF\",\"bold\":true,\"alignment\":\"right\"},\"cost\":{\"alignment\":\"right\"},\"quantity\":{\"alignment\":\"right\"},\"tax\":{\"alignment\":\"right\"},\"lineTotal\":{\"alignment\":\"right\"},\"subtotals\":{\"alignment\":\"right\"},\"termsLabel\":{\"bold\":true,\"margin\":[0,0,0,4]},\"invoiceNumberLabel\":{\"bold\":true},\"invoiceNumber\":{\"bold\":true},\"fullheader\":{\"font\":\"$headerFont\",\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"subheader\":{\"font\":\"$headerFont\",\"fontSize\":\"$fontSizeLarger\"},\"help\":{\"fontSize\":\"$fontSizeSmaller\",\"color\":\"#737373\"},\"invoiceDocuments\":{\"margin\":[7,0,7,0]},\"invoiceDocument\":{\"margin\":[0,10,0,10]}},\"pageMargins\":[40,120,40,50]}'),(4,'Plain',' var client = invoice.client;\n var account = invoice.account;\n var currencyId = client.currency_id; \n \n layout.accountTop += 25;\n layout.headerTop += 25;\n layout.tableTop += 25;\n\n if (invoice.image)\n {\n var left = layout.headerRight - invoice.imageWidth;\n doc.addImage(invoice.image, \'JPEG\', left, 50);\n } \n \n /* table header */\n doc.setDrawColor(200,200,200);\n doc.setFillColor(230,230,230);\n \n var detailsHeight = getInvoiceDetailsHeight(invoice, layout);\n var left = layout.headerLeft - layout.tablePadding;\n var top = layout.headerTop + detailsHeight - layout.rowHeight - layout.tablePadding;\n var width = layout.headerRight - layout.headerLeft + (2 * layout.tablePadding);\n var height = layout.rowHeight + 1;\n doc.rect(left, top, width, height, \'FD\'); \n\n doc.setFontSize(10);\n doc.setFontType(\'normal\');\n\n displayAccount(doc, invoice, layout.marginLeft, layout.accountTop, layout);\n displayClient(doc, invoice, layout.marginLeft, layout.headerTop, layout);\n\n displayInvoice(doc, invoice, layout.headerLeft, layout.headerTop, layout, layout.headerRight);\n layout.tableTop = Math.max(layout.tableTop, layout.headerTop + detailsHeight + (2 * layout.tablePadding));\n\n var headerY = layout.headerTop;\n var total = 0;\n\n doc.setDrawColor(200,200,200);\n doc.setFillColor(230,230,230);\n var left = layout.marginLeft - layout.tablePadding;\n var top = layout.tableTop - layout.tablePadding;\n var width = layout.headerRight - layout.marginLeft + (2 * layout.tablePadding);\n var height = layout.rowHeight + 2;\n doc.rect(left, top, width, height, \'FD\'); \n\n displayInvoiceHeader(doc, invoice, layout);\n var y = displayInvoiceItems(doc, invoice, layout);\n\n doc.setFontSize(10);\n\n displayNotesAndTerms(doc, layout, invoice, y+20);\n\n y += displaySubtotals(doc, layout, invoice, y+20, 480) + 20;\n\n doc.setDrawColor(200,200,200);\n doc.setFillColor(230,230,230);\n \n var left = layout.footerLeft - layout.tablePadding;\n var top = y - layout.tablePadding;\n var width = layout.headerRight - layout.footerLeft + (2 * layout.tablePadding);\n var height = layout.rowHeight + 2;\n doc.rect(left, top, width, height, \'FD\'); \n \n doc.setFontType(\'bold\');\n doc.text(layout.footerLeft, y, invoice.is_quote ? invoiceLabels.total : invoiceLabels.balance_due);\n\n total = formatMoney(invoice.balance_amount, currencyId);\n var totalX = layout.headerRight - (doc.getStringUnitWidth(total) * doc.internal.getFontSize());\n doc.text(totalX, y, total); \n\n if (!invoice.is_pro) {\n doc.setFontType(\'normal\');\n doc.text(layout.marginLeft, 790, \'Created by InvoiceNinja.com\');\n }','{\"content\":[{\"columns\":[{\"stack\":\"$accountDetails\"},{\"stack\":\"$accountAddress\"},[{\"image\":\"$accountLogo\",\"fit\":[120,80]}]]},{\"columns\":[{\"width\":340,\"stack\":\"$clientDetails\",\"margin\":[0,40,0,0]},{\"width\":200,\"table\":{\"body\":\"$invoiceDetails\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"hLineColor\":\"#E6E6E6\",\"paddingLeft\":\"$amount:10\",\"paddingRight\":\"$amount:10\"}}]},{\"canvas\":[{\"type\":\"rect\",\"x\":0,\"y\":0,\"w\":515,\"h\":25,\"r\":0,\"lineWidth\":1,\"color\":\"#e6e6e6\"}],\"width\":10,\"margin\":[0,30,0,-43]},{\"style\":\"invoiceLineItemsTable\",\"table\":{\"headerRows\":1,\"widths\":\"$invoiceLineItemColumns\",\"body\":\"$invoiceLineItems\"},\"layout\":{\"hLineWidth\":\"$notFirst:1\",\"vLineWidth\":\"$none\",\"hLineColor\":\"#e6e6e6\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:8\",\"paddingBottom\":\"$amount:8\"}},{\"columns\":[\"$notesAndTerms\",{\"width\":160,\"style\":\"subtotals\",\"table\":{\"widths\":[60,60],\"body\":\"$subtotals\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:10\",\"paddingRight\":\"$amount:10\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}}]},{\"stack\":[{\"image\":\"$signatureBase64\",\"margin\":[200,10,0,0]},{\"text\":\"$signatureDate\",\"margin\":[200,-40,0,0]}]},{\"stack\":[\"$invoiceDocuments\"],\"style\":\"invoiceDocuments\"}],\"footer\":{\"columns\":[{\"text\":\"$invoiceFooter\",\"alignment\":\"left\",\"margin\":[0,0,0,12]}],\"margin\":[40,-20,40,40]},\"defaultStyle\":{\"font\":\"$bodyFont\",\"fontSize\":\"$fontSize\",\"margin\":[8,4,8,4]},\"styles\":{\"primaryColor\":{\"color\":\"$primaryColor:#299CC2\"},\"accountDetails\":{\"margin\":[0,2,0,1]},\"accountAddress\":{\"margin\":[0,2,0,1]},\"clientDetails\":{\"margin\":[0,2,0,1]},\"tableHeader\":{\"bold\":true},\"costTableHeader\":{\"alignment\":\"right\"},\"qtyTableHeader\":{\"alignment\":\"right\"},\"lineTotalTableHeader\":{\"alignment\":\"right\"},\"invoiceLineItemsTable\":{\"margin\":[0,16,0,16]},\"cost\":{\"alignment\":\"right\"},\"quantity\":{\"alignment\":\"right\"},\"tax\":{\"alignment\":\"right\"},\"lineTotal\":{\"alignment\":\"right\"},\"subtotals\":{\"alignment\":\"right\"},\"termsLabel\":{\"bold\":true,\"margin\":[0,0,0,4]},\"terms\":{\"margin\":[0,0,20,0]},\"invoiceDetailBalanceDueLabel\":{\"fillColor\":\"#e6e6e6\"},\"invoiceDetailBalanceDue\":{\"fillColor\":\"#e6e6e6\"},\"subtotalsBalanceDueLabel\":{\"fillColor\":\"#e6e6e6\"},\"subtotalsBalanceDue\":{\"fillColor\":\"#e6e6e6\"},\"fullheader\":{\"font\":\"$headerFont\",\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"subheader\":{\"font\":\"$headerFont\",\"fontSize\":\"$fontSizeLarger\"},\"help\":{\"fontSize\":\"$fontSizeSmaller\",\"color\":\"#737373\"},\"invoiceDocuments\":{\"margin\":[7,0,7,0]},\"invoiceDocument\":{\"margin\":[0,10,0,10]}},\"pageMargins\":[40,40,40,60]}'),(5,'Business',NULL,'{\"content\":[{\"columns\":[{\"image\":\"$accountLogo\",\"fit\":[120,80]},{\"width\":300,\"stack\":\"$accountDetails\",\"margin\":[140,0,0,0]},{\"width\":150,\"stack\":\"$accountAddress\"}]},{\"columns\":[{\"width\":120,\"stack\":[{\"text\":\"$invoiceIssuedToLabel\",\"style\":\"issuedTo\"},\"$clientDetails\"],\"margin\":[0,20,0,0]},{\"canvas\":[{\"type\":\"rect\",\"x\":20,\"y\":0,\"w\":174,\"h\":\"$invoiceDetailsHeight\",\"r\":10,\"lineWidth\":1,\"color\":\"$primaryColor:#eb792d\"}],\"width\":30,\"margin\":[200,25,0,0]},{\"table\":{\"widths\":[70,76],\"body\":\"$invoiceDetails\"},\"layout\":\"noBorders\",\"margin\":[200,34,0,0]}]},{\"canvas\":[{\"type\":\"rect\",\"x\":0,\"y\":0,\"w\":515,\"h\":32,\"r\":8,\"lineWidth\":1,\"color\":\"$secondaryColor:#374e6b\"}],\"width\":10,\"margin\":[0,20,0,-45]},{\"style\":\"invoiceLineItemsTable\",\"table\":{\"headerRows\":1,\"widths\":\"$invoiceLineItemColumns\",\"body\":\"$invoiceLineItems\"},\"layout\":{\"hLineWidth\":\"$notFirst:1\",\"vLineWidth\":\"$notFirst:.5\",\"hLineColor\":\"#FFFFFF\",\"vLineColor\":\"#FFFFFF\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:12\",\"paddingBottom\":\"$amount:12\"}},{\"columns\":[\"$notesAndTerms\",{\"stack\":[{\"style\":\"subtotals\",\"table\":{\"widths\":[\"*\",\"35%\"],\"body\":\"$subtotalsWithoutBalance\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:34\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}},{\"canvas\":[{\"type\":\"rect\",\"x\":60,\"y\":20,\"w\":198,\"h\":30,\"r\":7,\"lineWidth\":1,\"color\":\"$secondaryColor:#374e6b\"}]},{\"style\":\"subtotalsBalance\",\"table\":{\"widths\":[\"*\",\"45%\"],\"body\":\"$subtotalsBalance\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:34\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}}]}]},{\"stack\":[{\"image\":\"$signatureBase64\",\"margin\":[200,10,0,0]},{\"text\":\"$signatureDate\",\"margin\":[200,-40,0,0]}]},{\"stack\":[\"$invoiceDocuments\"],\"style\":\"invoiceDocuments\"}],\"footer\":{\"columns\":[{\"text\":\"$invoiceFooter\",\"alignment\":\"left\"}],\"margin\":[40,-20,40,0]},\"defaultStyle\":{\"fontSize\":\"$fontSize\",\"margin\":[8,4,8,4]},\"styles\":{\"primaryColor\":{\"color\":\"$primaryColor:#299CC2\"},\"accountName\":{\"bold\":true},\"accountDetails\":{\"color\":\"#AAA9A9\",\"margin\":[0,2,0,1]},\"accountAddress\":{\"color\":\"#AAA9A9\",\"margin\":[0,2,0,1]},\"even\":{\"fillColor\":\"#E8E8E8\"},\"odd\":{\"fillColor\":\"#F7F7F7\"},\"productKey\":{\"bold\":true},\"subtotalsBalanceDueLabel\":{\"fontSize\":\"$fontSizeLargest\",\"color\":\"#ffffff\",\"bold\":true},\"subtotalsBalanceDue\":{\"fontSize\":\"$fontSizeLargest\",\"bold\":true,\"color\":\"#ffffff\",\"alignment\":\"right\",\"noWrap\":true},\"invoiceDetails\":{\"color\":\"#ffffff\"},\"tableHeader\":{\"color\":\"#ffffff\",\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"secondTableHeader\":{\"color\":\"$secondaryColor:#374e6b\"},\"costTableHeader\":{\"alignment\":\"right\"},\"qtyTableHeader\":{\"alignment\":\"right\"},\"taxTableHeader\":{\"alignment\":\"right\"},\"lineTotalTableHeader\":{\"alignment\":\"right\"},\"issuedTo\":{\"margin\":[0,2,0,1],\"bold\":true,\"color\":\"#374e6b\"},\"clientDetails\":{\"margin\":[0,2,0,1]},\"clientName\":{\"color\":\"$primaryColor:#eb792d\"},\"invoiceLineItemsTable\":{\"margin\":[0,10,0,10]},\"invoiceDetailsValue\":{\"alignment\":\"right\"},\"cost\":{\"alignment\":\"right\"},\"quantity\":{\"alignment\":\"right\"},\"tax\":{\"alignment\":\"right\"},\"lineTotal\":{\"alignment\":\"right\"},\"subtotals\":{\"alignment\":\"right\"},\"subtotalsBalance\":{\"alignment\":\"right\",\"margin\":[0,-25,0,0]},\"termsLabel\":{\"bold\":true,\"margin\":[0,0,0,4]},\"fullheader\":{\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"subheader\":{\"fontSize\":\"$fontSizeLarger\"},\"help\":{\"fontSize\":\"$fontSizeSmaller\",\"color\":\"#737373\"}},\"pageMargins\":[40,40,40,40]}'),(6,'Creative',NULL,'{\"content\":[{\"columns\":[{\"stack\":\"$clientDetails\"},{\"stack\":\"$accountDetails\"},{\"stack\":\"$accountAddress\"},{\"image\":\"$accountLogo\",\"fit\":[120,80],\"alignment\":\"right\"}],\"margin\":[0,0,0,20]},{\"columns\":[{\"text\":[{\"text\":\"$entityTypeUC\",\"style\":\"header1\"},{\"text\":\" #\",\"style\":\"header2\"},{\"text\":\"$invoiceNumber\",\"style\":\"header2\"}],\"width\":\"*\"},{\"width\":200,\"table\":{\"body\":\"$invoiceDetails\"},\"layout\":\"noBorders\",\"margin\":[16,4,0,0]}],\"margin\":[0,0,0,20]},{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":5,\"x2\":515,\"y2\":5,\"lineWidth\":3,\"lineColor\":\"$primaryColor:#AE1E54\"}]},{\"style\":\"invoiceLineItemsTable\",\"table\":{\"headerRows\":1,\"widths\":\"$invoiceLineItemColumns\",\"body\":\"$invoiceLineItems\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"hLineColor\":\"$primaryColor:#E8E8E8\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:8\",\"paddingBottom\":\"$amount:8\"}},{\"columns\":[\"$notesAndTerms\",{\"style\":\"subtotals\",\"table\":{\"widths\":[\"*\",\"40%\"],\"body\":\"$subtotalsWithoutBalance\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:34\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}}]},{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":20,\"x2\":515,\"y2\":20,\"lineWidth\":3,\"lineColor\":\"$primaryColor:#AE1E54\"}],\"margin\":[0,-8,0,-8]},{\"text\":\"$balanceDueLabel\",\"style\":\"subtotalsBalanceDueLabel\"},{\"text\":\"$balanceDue\",\"style\":\"subtotalsBalanceDue\"},{\"stack\":[{\"image\":\"$signatureBase64\",\"margin\":[200,10,0,0]},{\"text\":\"$signatureDate\",\"margin\":[200,-40,0,0]}]},{\"stack\":[\"$invoiceDocuments\"],\"style\":\"invoiceDocuments\"}],\"footer\":{\"columns\":[{\"text\":\"$invoiceFooter\",\"alignment\":\"left\"}],\"margin\":[40,-20,40,0]},\"defaultStyle\":{\"fontSize\":\"$fontSize\",\"margin\":[8,4,8,4]},\"styles\":{\"primaryColor\":{\"color\":\"$primaryColor:#AE1E54\"},\"accountName\":{\"margin\":[4,2,4,2],\"color\":\"$primaryColor:#AE1E54\",\"bold\":true},\"accountDetails\":{\"margin\":[4,2,4,2]},\"accountAddress\":{\"margin\":[4,2,4,2]},\"odd\":{\"fillColor\":\"#F4F4F4\"},\"productKey\":{\"bold\":true},\"subtotalsBalanceDueLabel\":{\"fontSize\":\"$fontSizeLargest\",\"margin\":[320,20,0,0]},\"subtotalsBalanceDue\":{\"fontSize\":\"$fontSizeLargest\",\"color\":\"$primaryColor:#AE1E54\",\"bold\":true,\"margin\":[0,-10,10,0],\"alignment\":\"right\"},\"invoiceDetailBalanceDue\":{\"bold\":true,\"color\":\"$primaryColor:#AE1E54\"},\"invoiceDetailBalanceDueLabel\":{\"bold\":true},\"tableHeader\":{\"bold\":true,\"color\":\"$primaryColor:#AE1E54\",\"fontSize\":\"$fontSizeLargest\"},\"costTableHeader\":{\"alignment\":\"right\"},\"qtyTableHeader\":{\"alignment\":\"right\"},\"taxTableHeader\":{\"alignment\":\"right\"},\"lineTotalTableHeader\":{\"alignment\":\"right\"},\"clientName\":{\"bold\":true},\"clientDetails\":{\"margin\":[0,2,0,1]},\"header1\":{\"bold\":true,\"margin\":[0,30,0,16],\"fontSize\":42},\"header2\":{\"margin\":[0,30,0,16],\"fontSize\":42,\"italics\":true,\"color\":\"$primaryColor:#AE1E54\"},\"invoiceLineItemsTable\":{\"margin\":[0,4,0,16]},\"cost\":{\"alignment\":\"right\"},\"quantity\":{\"alignment\":\"right\"},\"tax\":{\"alignment\":\"right\"},\"lineTotal\":{\"alignment\":\"right\"},\"subtotals\":{\"alignment\":\"right\"},\"termsLabel\":{\"bold\":true,\"margin\":[0,0,0,4]},\"fullheader\":{\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"subheader\":{\"fontSize\":\"$fontSizeLarger\"},\"help\":{\"fontSize\":\"$fontSizeSmaller\",\"color\":\"#737373\"}},\"pageMargins\":[40,40,40,40]}'),(7,'Elegant',NULL,'{\"content\":[{\"image\":\"$accountLogo\",\"fit\":[120,80],\"alignment\":\"center\",\"margin\":[0,0,0,30]},{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":5,\"x2\":515,\"y2\":5,\"lineWidth\":2}]},{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":3,\"x2\":515,\"y2\":3,\"lineWidth\":1}]},{\"columns\":[{\"width\":120,\"stack\":[{\"text\":\"$invoiceToLabel\",\"style\":\"header\",\"margin\":[0,0,0,6]},\"$clientDetails\"]},{\"width\":10,\"canvas\":[{\"type\":\"line\",\"x1\":-2,\"y1\":18,\"x2\":-2,\"y2\":80,\"lineWidth\":1,\"dash\":{\"length\":2}}]},{\"width\":120,\"stack\":\"$accountDetails\",\"margin\":[0,20,0,0]},{\"width\":110,\"stack\":\"$accountAddress\",\"margin\":[0,20,0,0]},{\"stack\":[{\"text\":\"$detailsLabel\",\"style\":\"header\",\"margin\":[0,0,0,6]},{\"width\":180,\"table\":{\"body\":\"$invoiceDetails\"},\"layout\":\"noBorders\"}]}],\"margin\":[0,20,0,0]},{\"style\":\"invoiceLineItemsTable\",\"table\":{\"headerRows\":1,\"widths\":\"$invoiceLineItemColumns\",\"body\":\"$invoiceLineItems\"},\"layout\":{\"hLineWidth\":\"$notFirst:.5\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:12\",\"paddingBottom\":\"$amount:12\"}},{\"columns\":[\"$notesAndTerms\",{\"style\":\"subtotals\",\"table\":{\"widths\":[\"*\",\"40%\"],\"body\":\"$subtotalsWithoutBalance\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:34\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}}]},{\"canvas\":[{\"type\":\"line\",\"x1\":270,\"y1\":20,\"x2\":515,\"y2\":20,\"lineWidth\":1,\"dash\":{\"length\":2}}]},{\"text\":\"$balanceDueLabel\",\"style\":\"subtotalsBalanceDueLabel\"},{\"text\":\"$balanceDue\",\"style\":\"subtotalsBalanceDue\"},{\"canvas\":[{\"type\":\"line\",\"x1\":270,\"y1\":20,\"x2\":515,\"y2\":20,\"lineWidth\":1,\"dash\":{\"length\":2}}]},{\"stack\":[{\"image\":\"$signatureBase64\",\"margin\":[200,10,0,0]},{\"text\":\"$signatureDate\",\"margin\":[200,-40,0,0]}]},{\"stack\":[\"$invoiceDocuments\"],\"style\":\"invoiceDocuments\"}],\"footer\":[{\"columns\":[{\"text\":\"$invoiceFooter\",\"alignment\":\"left\"}],\"margin\":[40,-20,40,0]},{\"canvas\":[{\"type\":\"line\",\"x1\":35,\"y1\":5,\"x2\":555,\"y2\":5,\"lineWidth\":2,\"margin\":[30,0,0,0]}]},{\"canvas\":[{\"type\":\"line\",\"x1\":35,\"y1\":3,\"x2\":555,\"y2\":3,\"lineWidth\":1,\"margin\":[30,0,0,0]}]}],\"defaultStyle\":{\"fontSize\":\"$fontSize\",\"margin\":[8,4,8,4]},\"styles\":{\"accountDetails\":{\"margin\":[0,2,0,1]},\"clientDetails\":{\"margin\":[0,2,0,1]},\"accountAddress\":{\"margin\":[0,2,0,1]},\"clientName\":{\"bold\":true},\"accountName\":{\"bold\":true},\"odd\":{},\"subtotalsBalanceDueLabel\":{\"fontSize\":\"$fontSizeLargest\",\"color\":\"$primaryColor:#5a7b61\",\"margin\":[320,20,0,0]},\"subtotalsBalanceDue\":{\"fontSize\":\"$fontSizeLargest\",\"color\":\"$primaryColor:#5a7b61\",\"style\":true,\"margin\":[0,-14,8,0],\"alignment\":\"right\"},\"invoiceDetailBalanceDue\":{\"color\":\"$primaryColor:#5a7b61\",\"bold\":true},\"fullheader\":{\"font\":\"$headerFont\",\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"header\":{\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"tableHeader\":{\"bold\":true,\"color\":\"$primaryColor:#5a7b61\",\"fontSize\":\"$fontSizeLargest\"},\"costTableHeader\":{\"alignment\":\"right\"},\"qtyTableHeader\":{\"alignment\":\"right\"},\"taxTableHeader\":{\"alignment\":\"right\"},\"lineTotalTableHeader\":{\"alignment\":\"right\"},\"invoiceLineItemsTable\":{\"margin\":[0,40,0,16]},\"cost\":{\"alignment\":\"right\"},\"quantity\":{\"alignment\":\"right\"},\"tax\":{\"alignment\":\"right\"},\"lineTotal\":{\"alignment\":\"right\"},\"subtotals\":{\"alignment\":\"right\"},\"termsLabel\":{\"bold\":true,\"margin\":[0,0,0,4]},\"subheader\":{\"fontSize\":\"$fontSizeLarger\"},\"help\":{\"fontSize\":\"$fontSizeSmaller\",\"color\":\"#737373\"}},\"pageMargins\":[40,40,40,40]}'),(8,'Hipster',NULL,'{\"content\":[{\"columns\":[{\"width\":10,\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":0,\"x2\":0,\"y2\":75,\"lineWidth\":0.5}]},{\"width\":120,\"stack\":[{\"text\":\"$fromLabelUC\",\"style\":\"fromLabel\"},\"$accountDetails\"]},{\"width\":120,\"stack\":[{\"text\":\" \"},\"$accountAddress\"],\"margin\":[10,0,0,16]},{\"width\":10,\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":0,\"x2\":0,\"y2\":75,\"lineWidth\":0.5}]},{\"stack\":[{\"text\":\"$toLabelUC\",\"style\":\"toLabel\"},\"$clientDetails\"]},[{\"image\":\"$accountLogo\",\"fit\":[120,80]}]]},{\"text\":\"$entityTypeUC\",\"margin\":[0,4,0,8],\"bold\":\"true\",\"fontSize\":42},{\"columnGap\":16,\"columns\":[{\"width\":\"auto\",\"text\":[\"$invoiceNoLabel\",\" \",\"$invoiceNumberValue\"],\"bold\":true,\"color\":\"$primaryColor:#bc9f2b\",\"fontSize\":10},{\"width\":\"auto\",\"text\":[\"$invoiceDateLabel\",\" \",\"$invoiceDateValue\"],\"fontSize\":10},{\"width\":\"auto\",\"text\":[\"$dueDateLabel?\",\" \",\"$dueDateValue\"],\"fontSize\":10},{\"width\":\"*\",\"text\":[\"$balanceDueLabel\",\" \",{\"text\":\"$balanceDue\",\"bold\":true,\"color\":\"$primaryColor:#bc9f2b\"}],\"fontSize\":10}]},{\"margin\":[0,26,0,0],\"style\":\"invoiceLineItemsTable\",\"table\":{\"headerRows\":1,\"widths\":\"$invoiceLineItemColumns\",\"body\":\"$invoiceLineItems\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$amount:.5\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:8\",\"paddingBottom\":\"$amount:8\"}},{\"columns\":[{\"stack\":\"$notesAndTerms\",\"width\":\"*\",\"margin\":[0,12,0,0]},{\"width\":200,\"style\":\"subtotals\",\"table\":{\"widths\":[\"*\",\"36%\"],\"body\":\"$subtotals\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$notFirst:.5\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:12\",\"paddingBottom\":\"$amount:4\"}}]},{\"stack\":[{\"image\":\"$signatureBase64\",\"margin\":[200,10,0,0]},{\"text\":\"$signatureDate\",\"margin\":[200,-40,0,0]}]},{\"stack\":[\"$invoiceDocuments\"],\"style\":\"invoiceDocuments\"}],\"footer\":{\"columns\":[{\"text\":\"$invoiceFooter\",\"alignment\":\"left\"}],\"margin\":[40,-20,40,0]},\"defaultStyle\":{\"fontSize\":\"$fontSize\",\"margin\":[8,4,8,4]},\"styles\":{\"accountName\":{\"bold\":true},\"clientName\":{\"bold\":true},\"subtotalsBalanceDueLabel\":{\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"subtotalsBalanceDue\":{\"fontSize\":\"$fontSizeLargest\",\"color\":\"$primaryColor:#bc9f2b\",\"bold\":true},\"tableHeader\":{\"bold\":true,\"fontSize\":\"$fontSizeLargest\"},\"costTableHeader\":{\"alignment\":\"right\"},\"qtyTableHeader\":{\"alignment\":\"right\"},\"taxTableHeader\":{\"alignment\":\"right\"},\"lineTotalTableHeader\":{\"alignment\":\"right\"},\"fromLabel\":{\"color\":\"$primaryColor:#bc9f2b\",\"bold\":true},\"toLabel\":{\"color\":\"$primaryColor:#bc9f2b\",\"bold\":true},\"accountDetails\":{\"margin\":[0,2,0,1]},\"accountAddress\":{\"margin\":[0,2,0,1]},\"clientDetails\":{\"margin\":[0,2,0,1]},\"cost\":{\"alignment\":\"right\"},\"quantity\":{\"alignment\":\"right\"},\"tax\":{\"alignment\":\"right\"},\"lineTotal\":{\"alignment\":\"right\"},\"subtotals\":{\"alignment\":\"right\"},\"termsLabel\":{\"bold\":true,\"margin\":[0,16,0,4]},\"fullheader\":{\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"subheader\":{\"fontSize\":\"$fontSizeLarger\"},\"help\":{\"fontSize\":\"$fontSizeSmaller\",\"color\":\"#737373\"}},\"pageMargins\":[40,40,40,40]}'),(9,'Playful',NULL,'{\"content\":[{\"columns\":[{\"image\":\"$accountLogo\",\"fit\":[120,80]},{\"canvas\":[{\"type\":\"rect\",\"x\":0,\"y\":0,\"w\":190,\"h\":\"$invoiceDetailsHeight\",\"r\":5,\"lineWidth\":1,\"color\":\"$primaryColor:#009d91\"}],\"width\":10,\"margin\":[200,0,0,0]},{\"width\":400,\"table\":{\"body\":\"$invoiceDetails\"},\"layout\":\"noBorders\",\"margin\":[210,10,10,0]}]},{\"margin\":[0,18,0,0],\"columnGap\":50,\"columns\":[{\"width\":212,\"stack\":[{\"text\":\"$invoiceToLabel:\",\"style\":\"toLabel\"},{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":4,\"x2\":150,\"y2\":4,\"lineWidth\":1,\"dash\":{\"length\":3},\"lineColor\":\"$primaryColor:#009d91\"}],\"margin\":[0,0,0,4]},\"$clientDetails\",{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":9,\"x2\":150,\"y2\":9,\"lineWidth\":1,\"dash\":{\"length\":3},\"lineColor\":\"$primaryColor:#009d91\"}]}]},{\"width\":\"*\",\"stack\":[{\"text\":\"$fromLabel:\",\"style\":\"fromLabel\"},{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":4,\"x2\":250,\"y2\":4,\"lineWidth\":1,\"dash\":{\"length\":3},\"lineColor\":\"$primaryColor:#009d91\"}],\"margin\":[0,0,0,4]},{\"columns\":[\"$accountDetails\",\"$accountAddress\"],\"columnGap\":4},{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":9,\"x2\":250,\"y2\":9,\"lineWidth\":1,\"dash\":{\"length\":3},\"lineColor\":\"$primaryColor:#009d91\"}]}]}]},{\"canvas\":[{\"type\":\"rect\",\"x\":0,\"y\":0,\"w\":515,\"h\":35,\"r\":6,\"lineWidth\":1,\"color\":\"$primaryColor:#009d91\"}],\"width\":10,\"margin\":[0,30,0,-30]},{\"style\":\"invoiceLineItemsTable\",\"table\":{\"headerRows\":1,\"widths\":\"$invoiceLineItemColumns\",\"body\":\"$invoiceLineItems\"},\"layout\":{\"hLineWidth\":\"$notFirst:.5\",\"vLineWidth\":\"$none\",\"hLineColor\":\"$primaryColor:#009d91\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:8\",\"paddingBottom\":\"$amount:8\"}},{\"columns\":[\"$notesAndTerms\",{\"stack\":[{\"style\":\"subtotals\",\"table\":{\"widths\":[\"*\",\"35%\"],\"body\":\"$subtotalsWithoutBalance\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:34\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}},{\"canvas\":[{\"type\":\"rect\",\"x\":76,\"y\":20,\"w\":182,\"h\":30,\"r\":4,\"lineWidth\":1,\"color\":\"$primaryColor:#009d91\"}]},{\"style\":\"subtotalsBalance\",\"table\":{\"widths\":[\"*\",\"35%\"],\"body\":\"$subtotalsBalance\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:34\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}}]}]},{\"stack\":[{\"image\":\"$signatureBase64\",\"margin\":[200,10,0,0]},{\"text\":\"$signatureDate\",\"margin\":[200,-40,0,0]}]},{\"stack\":[\"$invoiceDocuments\"],\"style\":\"invoiceDocuments\"}],\"footer\":[{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":38,\"x2\":68,\"y2\":38,\"lineWidth\":6,\"lineColor\":\"#009d91\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":68,\"y1\":0,\"x2\":135,\"y2\":0,\"lineWidth\":6,\"lineColor\":\"#1d766f\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":135,\"y1\":0,\"x2\":201,\"y2\":0,\"lineWidth\":6,\"lineColor\":\"#ffb800\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":201,\"y1\":0,\"x2\":267,\"y2\":0,\"lineWidth\":6,\"lineColor\":\"#bf9730\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":267,\"y1\":0,\"x2\":333,\"y2\":0,\"lineWidth\":6,\"lineColor\":\"#ac2b50\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":333,\"y1\":0,\"x2\":399,\"y2\":0,\"lineWidth\":6,\"lineColor\":\"#e60042\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":399,\"y1\":0,\"x2\":465,\"y2\":0,\"lineWidth\":6,\"lineColor\":\"#ffb800\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":465,\"y1\":0,\"x2\":532,\"y2\":0,\"lineWidth\":6,\"lineColor\":\"#009d91\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":532,\"y1\":0,\"x2\":600,\"y2\":0,\"lineWidth\":6,\"lineColor\":\"#ac2b50\"}]},{\"text\":\"$invoiceFooter\",\"alignment\":\"left\",\"margin\":[40,-60,40,0]}],\"header\":[{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":0,\"x2\":68,\"y2\":0,\"lineWidth\":9,\"lineColor\":\"#009d91\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":68,\"y1\":0,\"x2\":135,\"y2\":0,\"lineWidth\":9,\"lineColor\":\"#1d766f\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":135,\"y1\":0,\"x2\":201,\"y2\":0,\"lineWidth\":9,\"lineColor\":\"#ffb800\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":201,\"y1\":0,\"x2\":267,\"y2\":0,\"lineWidth\":9,\"lineColor\":\"#bf9730\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":267,\"y1\":0,\"x2\":333,\"y2\":0,\"lineWidth\":9,\"lineColor\":\"#ac2b50\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":333,\"y1\":0,\"x2\":399,\"y2\":0,\"lineWidth\":9,\"lineColor\":\"#e60042\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":399,\"y1\":0,\"x2\":465,\"y2\":0,\"lineWidth\":9,\"lineColor\":\"#ffb800\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":465,\"y1\":0,\"x2\":532,\"y2\":0,\"lineWidth\":9,\"lineColor\":\"#009d91\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":532,\"y1\":0,\"x2\":600,\"y2\":0,\"lineWidth\":9,\"lineColor\":\"#ac2b50\"}]}],\"defaultStyle\":{\"fontSize\":\"$fontSize\",\"margin\":[8,4,8,4]},\"styles\":{\"accountName\":{\"color\":\"$secondaryColor:#bb3328\"},\"accountDetails\":{\"margin\":[0,2,0,1]},\"accountAddress\":{\"margin\":[0,2,0,1]},\"clientDetails\":{\"margin\":[0,2,0,1]},\"clientName\":{\"color\":\"$secondaryColor:#bb3328\"},\"even\":{\"fillColor\":\"#E8E8E8\"},\"odd\":{\"fillColor\":\"#F7F7F7\"},\"productKey\":{\"color\":\"$secondaryColor:#bb3328\"},\"lineTotal\":{\"alignment\":\"right\"},\"tableHeader\":{\"bold\":true,\"fontSize\":\"$fontSizeLargest\",\"color\":\"#FFFFFF\"},\"secondTableHeader\":{\"color\":\"$primaryColor:#009d91\"},\"costTableHeader\":{\"alignment\":\"right\"},\"qtyTableHeader\":{\"alignment\":\"right\"},\"lineTotalTableHeader\":{\"alignment\":\"right\"},\"subtotalsBalanceDueLabel\":{\"fontSize\":\"$fontSizeLargest\",\"color\":\"#FFFFFF\",\"bold\":true},\"subtotalsBalanceDue\":{\"fontSize\":\"$fontSizeLargest\",\"bold\":true,\"color\":\"#FFFFFF\",\"alignment\":\"right\"},\"invoiceDetails\":{\"color\":\"#FFFFFF\"},\"invoiceLineItemsTable\":{\"margin\":[0,0,0,16]},\"invoiceDetailBalanceDueLabel\":{\"bold\":true},\"invoiceDetailBalanceDue\":{\"bold\":true},\"fromLabel\":{\"color\":\"$primaryColor:#009d91\"},\"toLabel\":{\"color\":\"$primaryColor:#009d91\"},\"cost\":{\"alignment\":\"right\"},\"quantity\":{\"alignment\":\"right\"},\"tax\":{\"alignment\":\"right\"},\"subtotals\":{\"alignment\":\"right\"},\"subtotalsBalance\":{\"alignment\":\"right\",\"margin\":[0,-25,0,0]},\"termsLabel\":{\"bold\":true,\"margin\":[0,0,0,4]},\"fullheader\":{\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"subheader\":{\"fontSize\":\"$fontSizeLarger\"},\"help\":{\"fontSize\":\"$fontSizeSmaller\",\"color\":\"#737373\"}},\"pageMargins\":[40,40,40,40]}'),(10,'Photo',NULL,'{\"content\":[{\"columns\":[{\"image\":\"$accountLogo\",\"fit\":[120,80]},{\"text\":\"\",\"width\":\"*\"},{\"width\":180,\"table\":{\"body\":\"$invoiceDetails\"},\"layout\":\"noBorders\"}]},{\"image\":\"data:image\\/jpeg;base64,\\/9j\\/4AAQSkZJRgABAQEAYABgAAD\\/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT\\/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT\\/wAARCAEZA4QDASIAAhEBAxEB\\/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL\\/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6\\/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL\\/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6\\/9oADAMBAAIRAxEAPwD0kT6iVJXXdaC++rXH\\/wAcpY59U+9\\/bmtED\\/qKXA\\/9nqmJuPlOR6Af\\/XpUuHRCD8o9CM1jqaWL5vb5+usa2p\\/7C1x\\/8XUbXOpQddd1pgf+opc\\/\\/F1Thulx1B57ipzIoH3sfVR\\/hRqFiy11qP8A0G9aXj\\/oKXP9Xpst9qLfd1nWSe+dVuP\\/AIuq6XJjzl\\/M+rHj86ljuTnlwn4E0ahYkW81HIxretEjqDqtwP8A2pUp1PUFH\\/Ib1oH\\/ALCc\\/wD8XVQyqMmWHavZhhc0PtYDapPsGo1CxpDUtSA+XWdZc\\/8AYUn\\/APiqaNX1A5U63q6\\/9xOY\\/wDs9Uwcj5WOfRTzUABDHOB7nFGoWNRdQ1Numtaxjrk6jP8A\\/F1MdX1BYwF1rV947\\/2hPj\\/0Os3KvGFUqzemMVD5whbknjjAxj86Wo7I1DrGqj5v7Z1b6nUZ\\/wD4upY9c1Qr\\/wAhrVS3p\\/aE3\\/xVZJuAU3BcH+8TikS6GQMhpPTg\\/rRqBr\\/27qvT+2dVH11GX\\/4ulGt6sWA\\/tnVSPX7fN\\/8AFVlmd8ZZdq+o\\/wD1UhmV12s42nrRqFkbX9t6mqZOs6kCP+ojPn\\/0KmnXtVCk\\/wBs6qR1\\/wCP+b\\/4qsXfGg2ocnsN1Kk7KuNu0dTxmlqFjaj8R6mykHVtV3Z6i\\/l4\\/wDH6cNd1VcA63qjHt\\/p8v8A8VWTHdfKQGwKcWZ\\/u7XHtRqFjXTXdWHXWdT9s30v\\/wAVTh4k1dQf+JvqLfS\\/kP8A7NWPG4UESZU9gP8A9VIZPKI4IB\\/uGjUDZHiPWsYOr6muPW8l\\/wDiqcvifWG\\/5jOoJ7fa5ef\\/AB41lfaUf+IH6U2AomcyIc+wP9aNQNf\\/AISTWe2taifpdSn+tTnxTrSAY1i+Pt9sf+rVhCYHo3\\/juKPtYTopJ\\/2WH+NO4G9\\/wlmrr11nUfwvW\\/xpB4z1cMQNX1FuehupB\\/I1giQMclT+JpWkTHdP8\\/hSA6H\\/AIS7WTh\\/7Zv+ewu34\\/Wm\\/wDCW61jP9s354\\/5+n\\/xrCVuATkjseaa8odDgk0Aa7+LdcJx\\/bWoDtn7W\\/r9aRvF2tgEf2zqAPOD9qf\\/ABrn2uC7k8dfpmlnkAj5f5T05\\/SncDpdP8X65HqVp\\/xOb6U+cnym6cg8jqM9K96\\/aD8R3mj\\/AAN8Q3tpPNaXf2TaksUhV1YkDhhyOtfN3hhs+IdOUqWU3CjH1PSvo79pD7LD8C\\/EMdwuRJbBIwf75I2\\/ripd7j6H5r+KPiv4yhuXEXivXI8KBhdRm9P96uHk+Lvjdpc\\/8Jn4gA9Bqs\\/\\/AMXR4uu\\/Nu50TAG7FcjtAfB6k4zXSYnaR\\/Ffxxt\\/5HLxDk\\/9RSf\\/AOLqKT4teOFOP+Ez8QEA\\/wDQVn\\/+KrmkxtI7gciopyVYZAz6UAd7afF3xoLQv\\/wmGvHA5J1Ocn\\/0Ks+6+LvjdiSvjLXwe\\/8AxNZ\\/\\/i65mzkJjkjP3faqsn3zjnnJJoA6j\\/hbvjk8Hxl4g6f9BWf\\/AOLqZPiz44BH\\/FZ+Ic55\\/wCJpP8A\\/FVx\\/Qe3rihW3Px07EDqKAOuf4t+OCWx4z8Q9f8AoKT5\\/wDQqWL4teOB18ZeIT\\/3FZ\\/\\/AIuuTGSrY6Z701pMD\\/CgDrn+Lfjlj8vjLxBg\\/wDUUn\\/+LqM\\/FnxyOP8AhM\\/EPoT\\/AGpPz\\/4\\/XKDO4n24BFPJAOcgY6UAdWfiz45C5PjPxD0\\/6Ck\\/\\/wAVUY+LPjkgY8Z+IiP+wrPn\\/wBDrl3dSeB9eajHB657kCgDrf8AhbfjkjA8Z+IQfX+1J\\/8A4uhvi545PI8Z+If\\/AAaT8f8Aj9cox44zgU0A4PJIzQB1p+LXjnd\\/yOniEDH\\/AEFJ+v8A33TV+Lfjk9PGfiHr\\/wBBWf8A+LrlACV5GO4xSHIzgZOeMjrQB1Y+Lfjof8zp4h\\/8Gs\\/\\/AMXQfi345Rs\\/8Jn4hPbH9qz+v+\\/XJ5U89D70jctwQD+lAHW\\/8Lb8dcZ8Z+Ic+2qT8f8Aj1TRfFvxuUP\\/ABWfiDP\\/AGFJ\\/wD4uuNOCeB26VYt8fN3oA67\\/hbPjgL\\/AMjl4hz0z\\/ak\\/wD8XSj4s+OWjLDxlr5AOONUn5\\/8erkJTzgfKB0p9ucQli2MngE0AdQnxX8cs2T408Qge2qTn\\/2elf4teOFGR4z8Qbv+wpP\\/APF1yUYLHAPHXk9KkkZQhVdpJoA6T\\/hbnjndz4y8QdP+grP\\/APF0J8WvHOB\\/xWniE\\/8AcUn\\/APi65XqT245+tNY7iDnAoA7Fvi545IGPGXiAf9xWf\\/4unRfFnxwAzHxnr+7\\/ALCk\\/wD8XXIrgoDuOAe1IXwRk4oA6g\\/FzxwW48aeIP8AwaT\\/APxdMHxb8dcg+M\\/EOPUapP8A\\/F1y7LkjHOfzppGAT0xQB1n\\/AAtvxycf8Vp4h6dP7Vn\\/APi6T\\/hbfjr\\/AKHTxBx\\/1FZ\\/\\/iq5Xdkc5U9fSkAHHTHvQB1y\\/Fzxzjnxn4gBA6\\/2rP8A\\/FUjfFvx1\\/0OniE\\/9xSf\\/wCLrk0Hbj8KR2DA9\\/egDqx8WPHWT\\/xWniL\\/AMGs\\/wD8VS\\/8Lb8ckf8AI5+Icf8AYVn\\/APi65LkDvinYIIOcjv7UAdbH8XfHB\\/5nPxACRk\\/8TSc\\/+z00\\/FzxxuGfGfiHA7f2rP8A\\/FVyyozPsGc+nep7PT59QvobWCJpZ5nCIiclj0xQB7Jb+OPGFz4UbU\\/+Eu12Nkh4QapPyemfv+4NeweAdCvPib4o16PW\\/irrfhwWNrZrDawahKXlZrdCWwXAwD19zXIeNPhxp3gL4F6bcT38n\\/CRzNsvdKljw1sAepHX0\\/OvOvFlhp3iDxFcarpvjHTLZJ0iCxytNG64jVSDhO201F77FWsVPG3jnxn4T8Y6no8HxC1nU4bOdoVu4NUn2SgHgjL19O+E\\/hjfa34M0JLzxz4ntte1XSX1BZX12ZWRgoI2xAkMvIydw9q+SR4CjkYsvifQpGzyTeEZP4qP1rttK8UfEHR9MttO034gWCWVtG0UMKatF8iEYKgt29ulJ3toCaW56D4ff7J8FbHxv4n8eeNla41OSw8vTtSc9AcH5nHTBPWuh8NfD7Ur6+8H6bf\\/ABI8ZfbfE9pJf20tvfyeVDEBuUPl+WIPOOBXgs2l+LZ\\/C0Hht9a0y40S3uTdxWi6pblVkIILD5s9zX1Z8OPG3hnwL4V09TrI1OSwtRFbWhuYJbiJmUeYu44CqDnhX6AVMm0tGUrM8z8MeDvEF\\/a+F4dT+JniuHUPE93Pb6ebW9leOJY2K7pMyc5OOBWX4b+HPxR1S78WSap491\\/StF8OvPHNqQvbmRZ2jZgREocZPy\\/rWb4PvviloXkabpwtJbGG6eW0u7kQzNZl8hnjOSUyDkgZrsfjB4f8QWHwz0fwT4WsdR1uWadtR1vVIYnH2i4YfdBOCwySfwFF2na4tDzjxDB4+0fwT4V8RWnj\\/wAQaiPENxPb29ol9cCQeW+wH7\\/O7jj3rofFngv4heDtPcaj8VNQt9YjsU1GTTp9SuYzsbqiSM215BkEqKwnn+JK+A9N8L3PgWS4ttL8w2F41lMLm2Z2LMyurAA5xjjsKl8U+PviF4k0iS31XwX5+oS2iWEmpT2E0kpjUAZVWJVHOBllAJxVXYaGp4r8IfFbwh4ZbxLH8Tp9R8O\\/ZvPXU7PW53jaTgCAc\\/6wk4x9fSvMdJ+NPxMv7yG1tPGfiKa5lYJHEl\\/MxZicAAZ5JPFdrB8Z\\/Fen6Dc+Gr3wZDN4OmtVtn0Y20kaqR\\/y1V+SJM8lufpXkdhcaj4d16HVNOgnsZ7WcXFvvUs0ZVty\\/MQM4x1xTV+pLt0PcpvFXx0+HXi7w1Z+K9a8SafBqVwiJFfXL7Jl3AMOT6EZHUZFefeP\\/il42s\\/EF7bweLtehtEuJ1gRdTmGEWZ1UZ3c8D9K6ef40+JPjJ4+8F2uvbVjtNSjdVQN8zsy5Y5Pt2ry74hKTrrS7i4leZwCen+kS9Py7U0N+RMfi345PTxn4hA\\/7Ck5\\/wDZ6T\\/hbPjvkf8ACZ+If\\/BpP\\/8AF1yu35gPbr0oC7s55BqiTqx8WvHAbB8Z+If\\/AAaz\\/wDxVL\\/wtrxzyf8AhM\\/EOPQapP8A\\/F1yjAIOvPpUa5LYxt47CgDrn+LfjkjI8Z+IRz\\/0FJ\\/\\/AIqj\\/hbfjkj\\/AJHLxBnrj+1Z\\/wD4uuUjG0+o96kRBu5A5oA6j\\/ha\\/joYz408QE\\/9hSf\\/AOLpU+LXjoLj\\/hM\\/EOR2\\/tSfn\\/x6uVnID8Dvio1k\\/izkfSgDrn+LPjrcSvjLxDt4\\/wCYpP8A\\/F0w\\/Fvx1\\/0OfiEn\\/sKz\\/wDxdc0kvG0qMetRuPn469R2NAHUr8WfHP8A0OniEH\\/sKz\\/\\/ABdPX4ueOA4P\\/CZ+IOf+opP\\/APF1ybgdsH1NNiBJGT06ZoA7F\\/ir44wGXxl4hPv\\/AGrP\\/wDF0yT4t+OBhf8AhM\\/EC+\\/9qz\\/\\/ABdc2TgKAQv0qvdMxc8g49KAOqT4teOiePGXiDPr\\/ak\\/\\/wAXTf8AhbfjoHnxn4h+n9qT\\/wDxdcxEGI4+maRT8w4yAfXFAHXSfFvxygX\\/AIrLxCAQef7Un\\/8Aiqif4t+OOCfGniH3\\/wCJpP8A\\/Ff5zXNStuUEkn0AqCT5jkjB9KAOpPxd8dYwfGniH8NVn\\/8Ai6QfF3xyAD\\/wmniE8\\/8AQVn\\/APiq5PqRn+dKv3s9qAOs\\/wCFueOjyvjTxCOOB\\/as\\/wD8XSD4ueOTjPjPxFgeuqz\\/APxVcpx0wc0cY5INAHWj4u+OV\\/5nTxDgk\\/8AMVn\\/APi6P+FueOSf+R08Q4x\\/0FZ\\/\\/i65IrkcGlPC8gD07GgDqm+LvjpTj\\/hM\\/EJ\\/7is\\/\\/wAXRXK5UZ3Lk+9FAH22dzj7mffP\\/wBapYEKxnG4Y9+P5U1CAQPnxnsSRT2jDZKuVx2DYFZGoI28Zyn\\/AALGakc5HUj6DH8qqr5g\\/iz75zTstxuYP\\/vc4oAkgmZt29wcdN3NSEsBgv8AmwqBUOT1P1B\\/wpvmOB87F\\/QelAFmWRSq7MK3c1MjBVBZicj1AqtE5J+62KimkdP4QQT0Y0AaQ+f+79aa7YHrz3qiXMigOFAHT\\/IFSLLIv+7260AWGk3rtGQfYU0u4GCcL7kVHl+pOM\\/3s4pPM7BVz\\/fAOP5UAPMrpzuDKOwPNKtyWwC2F\\/u96rnyw5Zid3pt4pyy7XG1QB6gEGgCwZwjZUN+INAuBM20kDPY5zVaTcZN5II6fNk\\/pSoCxB+Xb6KMGkBa\\/wBX0xgejc\\/lSiZGPKknpzVUsqTD5W+pOTUruGOcZx03LRYCfzI1+QgBj0\\/yTUgYRAgsqnthg38qqKGdTkLn6UgYx8E4J6Bs0WAtK+8HMu3HtSI2z\\/VnGeuTiq5fb98Y9Nn9aXz8\\/ecKe3NFhNliSUqfmcH6im+cX+58nqACM\\/nVYjd987iO4JGKkBiH3irH\\/ZH\\/ANaiwx73ix44x9R\\/9amC5kUk9j0yMfzqIuT985HbjNRSXRAHU\\/T5aLAaBnYKCxU\\/pUQu9rcufpmq6z+YAC2O\\/HWomuI9xXauR36GgC\\/9oO3cQwB+vNK04YYwCPXPas03IOQJFwP4Rjio1uc5yQvP5e1FhXNZbr5l54zzzTRMBxwTWclySB0z\\/P3qUtkk8DsPrRYZ6T8DdPg1bx\\/YCUKRExkGR3AJH611H7enjE+F\\/hRptpGdrX16A3OCVVGOPzxWT+zhZC48aCXONkbZPrxjFcp\\/wU23ReFfBmDhDdTA+n3BUfaB7H5\\/T3L3Vw8jMTk5OTnrURiB6dj6U215Ygj8KsFsMMHmukyGpCWTLYUD1qvMSzf496mnuCAVHpwMcVTyScdqALEBwpI55596lcAxhiPzpLWLzEYE9TyKLsiMhFbgdRQBAeCcgZPOaarAPjocUEjJzwe1Mxg9MAdKAJy6hc45xTHbdzjBHfNHfPUYzkUmARQAuMlcjnPGacxxxweOtGCF5OSO9R7gR7ZoAGIJHGD3oUgn\\/Z44H+fpTm4OQcD86Z0Hp9KAFU59fqKX0JAOKavB\\/wAKCcg55zQAO2M9TntSglsj3pvXtn1ozznGKAAZOTzj1pBwDzu460vO0EDtk0oU9uOfzoAaQec8VZhASJifx4qsefqKsx\\/Kh5zngUAEmVOeuelA4jGMnrxURbccZJ\\/z61aVMxrzkA0AIzbUJxzj8qrE\\/PnJ49RxUsz5AHIXHWmiPoT39BQApGw881GTu6E4qe44Xr254qsCS3PA\\/nQBLswgP3hTMhScd\\/xqdiMKecEVGFyRt659PrQAiL16g4710\\/gf4eav8R9TNjo8AeRV3SSudscY9WY8AVzRIX5VyDjBr2DR\\/FkXw08FaTaRjf8A2rMLnUERtrvECMICOmcNSY0UPHH7O3ibwNo8OqSta6jasdrPYyF9h9+K8ve2kjJDIy9sEe9fd1h+1z8MrbwjBbRfD4nTI1WJ\\/N5XdjucHJ964G+8S\\/AvxVqVrOthdaf50wMsEM+UQE\\/7QB\\/I1mpPqiml0Z8qWWm3d9cpBbQSXEzHAjjXcT+VdBq\\/wy8UaFJHHf6JeWryxiZBJERvQ9xX3d8NtJ+CkfjGCDRZZtN1C2USR37Ou4naCcqwII69PSvcfG\\/wOsfHVkuq2eqy3WqRxnyJwU2yL12kgcex7Zo59dh8vmfkF\\/Y90JZIzA4Mf3l2nK\\/WrWn+G73VZ\\/ItbeSWb+6q5Nfeup2N18Ilng03w7aaXqFxKZb+41mKO4EyDqUyMY6HINfO3iXxhP478bDUp9NS10Z5yJrLSUFp5qDgMxUHk9faqUmyWrHk7aHp\\/hmWWLWJ\\/OukH\\/HnZkNg\\/wC1J0HvjNdh8B9F0vV\\/GSXN9rK+H\\/scguLZjCJSzAkhcnAH1Net6x+zx8OPGmitfeF\\/EN\\/o2tCIvJp2r4kRiBk4kCj26181tDJpG+MyL5schhOw5HHfPcdaaakLY9k+MHxR0XxFqmrypd3OoXl4cTXbxgbwDjgZAA\\/CvGVTRXBLPMD\\/ANcx\\/jWbJM8vyn5s+gqJYJCAdhz24ppWVg3Nd7XQsDFzMoP\\/AEzz\\/WnHTtHZsf2gwzxkxniskWrgDCN+VAtpHH3SPTApiNZdL0vzCv8AaYx\\/eEbU\\/wDsbTV4GrRg9fuMMn8qp2Oh3mpTpFDbyySMRhUXOa90+Hf7G3jLxeYZr+IaLaSjdvuR+8I9k6\\/nipcktxpN7HjiaDZkjbrUPT+62P5UsugxwSjydahJznKswxX2PafsHeHNKhRtS1nUbiXIAEISMH8CCaS\\/\\/Yq8GNEPLv8AVLVscvJNHjP\\/AAJBWftYl8kj5AjsL1WIi8RopHTFyy\\/1q1AviNBui8TuvP8ADqLD\\/wBmr2nx7+xZq+kxLN4f1AaojZIhnHlOfQK33Tn8K+efEfhbVfC2ovZ6nZz2VwpIMcqEfiD3HvVpqWxLTR1BvPGcDDy\\/FN0c9NupsR\\/6FUy6v4+Vd6+JLyT6X5b+teds7tnLk+lAkZf4iD6DjNVYk9ETxF8QkZJE1e9aQHKuJQWB9j1pdU+G2u+IbfTZ9P0+7v2jtlSbyk3nzN7u2e\\/8Qrzr7TKp4kZenAatjRfFOpaLcRTWt5PEwOQVkIwcj0+lFuwEHiDw5eeH7g2+oWclhOqg+VOpQkH2NZC\\/I3TPHPevqr9p7W7X4l2XgS1mhU+IW8OQ3MdwmA0smSXjb1yoyPcY718qFTFlSCCDgqRzmkndXG1ZiO3y4C8HikVdo4JAx9KHJb2FPQlT2xjpiqEHIz6\\/SpYiRnI5qPzMr79OKWNjjB7Z6mgBkzAuTjg8c0q44J6E+lI6ZIYgk9eeaAcEKOOcn6UAOGAcZ+XpwaYww2TyPU04Ody4wOajcnK45oAl4fBGM05htXI69qi6kc9KlDl1YAE45oAUPlA2QSO9Qu3PI\\/KnRjoT1NOuArONuMfWgCOFm4x1p8q54A6\\/rUPKHJPHQEGpjl413AFSetADS3yAdulRuM5znr2p5wM9gfXmmdAQOCTgYHFADM88YGOc0uMHkhiOSelISc4wKU478H0xQAdMAdR7UcbuvFKOBgc59KUc9B0oAMZABAPamk9dtKWOecfWgn0GT1oAFOB1\\/KilPXg0UAfcn2MqcBR9QabJD5bAFyp7DOa62TR8Ngj9f\\/rU3+yEA5Rfq3NYXNTk3tJnGQCQBzzUcMT\\/ADbAR69v6V1v9lkfdVSO+FoOk89C305xRcDlngc427k+hzmjyHTqG\\/76rqptKiG3aFTPoKhfSsAYyP8AdWi4rHMPbStxGOffIqbyH2gfMx7gEHH510aaU0hwB09M019J6blP6Ci4zBjj8okhGyetJIrkZbp25NdDHphPBG76DNK2njOAMH0\\/yaLhY5tY3Q5J+X64\\/XFOWMh93Dg\\/w5FdCNNTdyoz7innTDj5Yx7HFFwMEKWXlSAf4dxxUbQMX9I\\/7o5\\/Wt4Wwjk2kDI9amWxjcbmA9yRxRcDnDbHblVKj+9\\/9akFuSOFJfs3T+tdCbFFn4K7Mfwnj8qc+nggsqk+4xSuBzgtCp3OhLDtn\\/65oa2LvlYiB0rfFi2RlMj1PWpBp6spyM\\/rTuBzzWzp\\/wAs8D6A01bZpOQgGP71dLFpaMhOChz0HFL\\/AGWMEnIPpwc0XA5l4HJGUA+gNJ9lVPu7UPtnmujFgCPmBX8c1GumqP4jID6Y4ouBzxtXbG5yf94EUvlPGOAy59Oa6NNKQZwhb3Apw04t1yfSi4WOSNsFPR1z7VH5BP3uR9K6waNtJ5FMj0vax2BGPei4HNmEoo2oM\\/7AOagZJQxOQeencV1SaaFdtq5PfcOKa+knO7YCSem00XCxzDx5UHysMOS1RSRMcDGD06V1i6M5OWVQp6Y7VXbRjheGGB0p3CxyyhlySPmJ6elTB9\\/94Y9q220fC\\/OvH1pY9Ey\\/3SPTPcUXEdn8ANSnsviHYpF80coZHAI6YzVn\\/gpFp6Xfwp8Pzuv7+PVFVGz0BifP8h+Vb3wK0JI\\/HFrOQp2xsQPf2rnP+Ck+oJF4I8HaeCMz6m8hX1CREf8As4qFrK43sfnH5TWrk54NSIcgsQMe5q1qMaJcFeMA8iqN1KMbVAx3IHIrpMivM+45GeBnOKYvBGeR6inqd2M\\/dPt+dPKhV7jJoAlsZdhZT355qO4+aX8KbCDvOO1OZgT83A5\\/CgCEZLd+vA9qV+Ae\\/wBaVjgDv2zSPgAn37UAJ91cEcdMU+IgAYJx71GPmyTyfSlPAxgCgBztzz0xwabgHHc+lByTnrn09acxxxjJ9hQAHjAOf51Gw3ZPY8c96cCeh60hAzzn0FAAOT0+bvSHgZPPtTycggmmjIYg4PrQAmdo4BFIecg+vel7gZ4pqkb\\/AJufxoAcFJ4zgYz0oY7gT1U5pq9+Mf0pwIHJGcetABkkjPGBVhV\\/EjpVZR82R261YjzkDt3oAcYtke48M3Sn2xMybB0J6Ypk7gtjoPWkiPlozZJI7YoASVMyHjg1Iqsyg456CmOfM29QCccVL\\/qFGep60AVnLMSDz1\\/Smfdx39sVK5AHDZHtTFwBk9e3FAEo5UYwD3qSIEZJwTkVEZRgjIxShio5PXpmgAb\\/AFgGM89q9D+K9qirouyPymFqibTxggen415\\/YWz3l\\/BEiF2dgB6nmvadVtUvvE1xqmpxK9ppEQQI33WcL8q9x2\\/SgDgPEjNofg3TNJZNsszfa5SDn733Rj6fzrjAxViwByOhzWl4j1ibXNWubuRi29jt7cfSsxgMkZNAHReGtav5tStAlyEkh4h3nb+Ga+vvgl8dvElloqfZdTeGWFissDgMjYPcYxXxFGMrnPNbmh+LNV8OzB7C+kgA5Kg5U49R3qWrjTsfo34o\\/aCt9Z0fyPFfh7TdWtEIYRzISN3r\\/OuY074ieBtWieTSPAGgxyEdie3qBXyr4M+JPiHx54n03SLqa0SKVtru0eBt68847U2L4j3vhnxDqUdilvCIpmSMrHnGDjPJxWfIXzHb\\/tJfGeS6t7PRNFS10eBlLXdtYWwj3H+H95jJHXgHFfO1hIJo2VhnBLHnnp\\/9avV9B1ez13wl48utX0yLVNUeFTBfzKpa3JlTlR26np615RbKRJMwwBtJrSOmhDd9SOBlMyYHGO3pV44IIB57VQgx56YyDt6DtV\\/B7Z\\/CqEKE3kDbknk10Hhvw\\/Nrt\\/BaW0DXEsrhFRFyST0wB1rEi+ZwOeK+yf2NPhhHHHP4pvoSTnyrMyICM4+dunUcAYPXNRKXKrjSu7HqPwR\\/Z60r4Z2EeoarbQ3uvEbhIp3CH\\/ZQHq3vXdeN\\/i5ofw+0432qXUdtGoIMRYF3H8OOMk+3bvXIfGf4p2fw60K41q4YtLGhitbUNhWcg4\\/HIPPBHzelfnf4++IOsfEHXJ7+\\/unnmkc4jDHbGD\\/Co7AZrmjBzd2bykoaI+pPHn7dyTytDo+lOYF5WSWXYT+Azn8a5TTP24dXt7pDdaak0WeQly0ZIz\\/s4\\/WvDPC\\/wa8YeM7c3GlaHd3sI48xY\\/k9\\/mPFQ+Kfg94t8IxedqmhXltCp5lMZKD8RxW6jDYycpbn298Nv2nPCXxCuf7PYtpF\\/ORiC5ChWb\\/eGFYnjhh+NdX8QvhXoXxE0prbUrNZWCEQyqfnibnleffO05B6gkV+ZVtcSWkoaMkFT696+yf2Ufj1LrLJ4R8Q3QkkCYsLiUnc+P8AliWPfup7EfnnKny+9EuMr6M+evib8NL74fa9LYXkYdcZiuE5SRfUHH5jtXFi1RtxKgem7jFfoX+0F8N4vG\\/gW+EcGb+BDPaOqDBcDO0E8qHUdB3HPQY\\/Pm5BimkjZdrA4IPY+lawlzozkrMqi3TB+QDB+lVpl2Soq4UYHvnnrVzgg8gdfWqE5zcgZB6VoSeqfG6\\/uINY8HKkpjkg0K0CuvVTgkEfQn9K4DxjYl7i11UbVOoIZJEXAKyqxV+nqRu\\/4FXoHxKtoH8b6RJcspgg06037idoHlj+ua+jfgHZ\\/BX4rfDu38H+IrW1tvE0ks7x3oUJKQznaVkxxgH7p44qL8qHa58LLjH6U5IwPTHTNejfHr4PX3wS+IV94duX8+EATWl12mhY\\/K314IPuK85xx7Hoaq9xETsqsQFHPTmkRiox+lNDbpO+Peng\\/N7ZxxTAeGynHb8qkjiWXOfrioG4HAz7mpoWAYAnBoAjnUI30\\/SoepAHJPepJypc9jTI8Ejn3oAM7Tg5P1qSKUDoCR796a6ds4BpI1yw7885FAEyxfODk8+tRvgyYUY+lWWXKbhxjqKp53OTg8+lAD5VBAGQD7UoyAAemfpmkcAlc8H1FOY4XGckUAMyNvTtjimB8A8d\\/WlYDA6\\/j3ppJA5GfwoATGcYwO9Gfm4HHbJo+7jnHsKCevp\\/KgBS2M5A6cYNG44yOPWkJOMd+tA9OaAAnt1OfSkY4GdxJ5FKMk49PUUuDg460AAfA5BooyO6hvfGaKAP1AksxtJJfGOmCaqrYKx4RvqT\\/wDWrrPsYB5O0+gBFNktV3j7xPYjGK4bnVY5SXTiSNrFB6AZzSppaAHPBP8AcGK6z7GT\\/AW+i002YTrETnuoxRcVjl20raBujK\\/VhzUi6Sx+7uH14\\/pXSvY7MY3HPoc\\/ypfspb+EH60XHY5T+xmBJTAbuc4pr6Gz\\/fYe3Oa6o2UYz5jYHbApRp4XlSSD0zRzCscf\\/YzDpGG+tKujeWS21CT2C12n2RIxkuV+nFBslYA9vU0+YLHGDS8HO1RTTphZiuVA9xgV1zWK7j8uR79P0pfsWPuxqvuAaOYLHHtpLDOTlfbOKP7N2oQBkex5rr1swW+YfUYofTkdiAuM980cwWORj01QM7HLe5pTaqW2FWX3B6fpXVf2WoO3AI\\/EUh0tS2wKQPXGaLhY5gWSqwVcn3LUj2A342BiR1INdQdLEJ4yWH+zx\\/Kmm1dpAGAXP0FHMFjmf7NIH3WVe+1TilGl7uUIIHXd1\\/pXUnTdpGN\\/4Hikex3NnaOP7opXCxy0mnqCNylj2Ix\\/hQunJz8pH511P2Mt7Un2Be0RH+8MU+YLHLiw8rgLnP8AdWiTTiOkefoa6g6aScjI+vNLNYsxGUQ\\/Q0rhY5MaZ6qE+oxSrpUjn5cD6viusuLAkLsH5Uw6dgAsD\\/KnzBY5X+zZ4+3meyij+ynYZEYDd811a6eAeRx6daP7NGSVDH6CjmCxyn9nM2EZQoHc0j6duBJXGB1JrrhpJI6HJ7EVE2k4IGOBz9afMFjipNP+XCx4FA03BUhOQOufrXZS6aDkbcKPbio\\/7KIOQn0J6mjmCx0PwSsvK8RMzH5whK5PavFv+CmLSR\\/8IExz5Hm3AyPXCV718OY2t9diwoGeCe4HNeT\\/APBSKygufh14VlfIuU1U+WB\\/dMT7v5LVQepMlZH53akwknZuo9h2rLlb94cDAFamoKEHc8dDWd5QlYY6n1rp2MBsRyd3Hp+NSScLuOTxT0tHywI4FDqdpBz16GmBXixux+tSeSzZOPl9+KbCP3ygirVy2IwB24\\/xoApSHB4+nrTCTxnn6dh70Dk5JxilzkdQcjpQAnBB9+1KCRn68c0mdx7mkwDjGfegBckcfzqQuQRyPY1GQAAQTn0FKOvuT1oAGBDE+tISfpTjnnA7Z5ppOTjjn0oAFUdWA6cUEkEjGM+opSD6Zz7dKTByQc4z270AB9\\/wpNuRnAz9KP4T0FABBGeOOnpQAm8dj2pQMDPb60dCMDnPQUDOBk8fyoAcvJ46+v8An6VMnLk9hzgdqjhz6DjualtlUAnkc9c\\/59KAGynGcAjPSlTCwjPQnvTJMNjByM9qmjUNCQfXPtQAsYBQHPH61FLKHbK5YU\\/cVjxgHng4qJRngYJ6YFACxkbQDgn2phY7jz+tOVcqc4xnFRtwdvb0oAk+Vfm+tKeRjOMGlUDy8cgg8ZphHTj8cUAdF8PLcz+KLV8lVgJmPfAUFv6V2PjzXHtPCVvZ5dLm\\/me4lLdWU9M\\/rXO+CIWtLPUb0xsQiCI7e248\\/oKoeNtYbXNUDbiY4kWNPTgUAZOoKtutukeOYwzH1Y\\/5\\/Sqe3cRnrUk1yZooldAxj4B7496iToD2HtigCUJ26ewNKgx0\\/wD1UB\\/vEAjk0xiAc\\/pQBoaRez6dercW7lJEBAYds8f1ok1GWW6kldss7Fi3rnvUdrbXE9ndzxRlooUDSOP4VLAfzIqrvBBB5Y\\/pQB6Foni60t\\/h94i04QKtzPEoEv8AEx81D\\/IGuNhYRGUnvH1HvVCGcpDMnB3AD9RVm5LREKVI+Toe9ICOFgs4boMVeEhx0zxmqEOTOvPUA5xzVsENkk9PU0wNHTwJJkyO4GOa\\/SjwJp3\\/AAj3wh0S0skEdy1nCPm3NlnAZs45xyfzr8z9Nm26hExAAyM1+qHw2mj1D4fadJhZF+xRMCwBx8lc9bZGtPqfEH7W\\/jq41\\/xydHWTdZ2CL+73ZBkI6\\/lt\\/Wqf7K3wXg+Kvjgf2ipOlWQE90BwWXso+pFcD8U5JL3x7rMjsSxuCCc556V9W\\/sCyRJpviSMAGcmE89Svz1cvdhoStZan1jaaLpejabFZafbRWlnCoVIUXAA9hXJaxoC6oJYJo45rdsh1cZBXnrXVXJ3E549+xrA1KdzbOFBGTjOe1cSZ1WR8FftR\\/BK18BX8et6TEsWmXR2vboDiJwO3sa8T8M6vcaHq1te2rtFNBIsqOpwQwOc\\/pX3Z+0zoyah8JtUllkAMQV13gdRXwfbWjQyZweBXdDWOpyyVmfp3pniAeIvBtrqscgCzWyXAUdMsnmDH4rIPbcfSvzx+MGmDR\\/iR4ghEflA3LSBAQdu\\/wCYAf8AfX6V9jfs46pcaj8MLC1ljLRw2+xXJz2uD+fP6V8m\\/tF3Yl+LuujG0oUQ5GOQoHas4aSaKlqkzzgHkj\\/Jqm2PtQJxncMgcd6kL4YHPHeq6tvuF6\\/eFdBkd38a74t4yaGMeWgtrf5QcgHyl9a47RdWuNK1O2u4ZSkkLhgVOO+cV0vxfmE\\/jq86jbHCmT14jWuZ0bT\\/ALfqNtbL96WQL+ZpdBn0Z+2L4ibxTpfw41OSNSZNNkQTA5ZwChCk+27\\/AMeNfNG4Ku7nHavZfjjdb\\/h98P4CAZIYJVVs9RhAf5CvFeoGSQOORSirIHuB5OcfTvTgeMcdacpXAyQCfWpBHGR83BxiqEQkllPb8KdEyj5iTmo3+90zTQCpGS2D+FAD5ARk9ulM4GDjPXjFT7tykYHTFRFmXjHTrxQA8fPnPapNg2ccFj3qEY6Z56YHSnr8yHJ4HPFAErECM7W\\/A1Vbjg5571NGh689CeT1qNlDM35ZFADx93Jxz2HWo1U5\\/vHpUikoMZ601lGDzgjgmgBjYK+m3rnmkyNvAzj1oY7cUmM8cHPrQAu3jByO1KAN2OPfPemEAkng0vQnoMc9KAAls8nPFHH0BNGcdCOnOKNu4Afn9aADjGR+vrSkjJ7ZpAuCR2zTsYOOmeaAGnGfu5opdq9yDRQB+vj2QZtxTH4809LUbCAq8\\/3jzW0lgCMjgehqVLPKkgMAOw6V5h22Oa+xlTgryac1gGPzIDj2roVstxycD6Ch7UcfcOf7v\\/1xQFjnBZq33F2+uTmhrDI5DfjXRLYqv3g3PqaDZhj8mfzphY53+z8fwk\\/Wl+yE8DPHbFbz2YAGCzH0TH9TSNaDA+Q575WkFjFXT2TkqSD0701dMy5+TH15\\/St4225QHUAds5\\/pSC0TPAP4UwMRtOBGBkGmpprI+5ThvUDn+dbXlEuVBC49qPszg8HcfzpBYxnsmIO4\\/N6sKQWpC7e3qpNbi22\\/5Tx64z\\/hSnTlHRst6YP+FAWMH7ASM7T9Tn+tOXTn25zx\\/d6GtxbQK2G4\\/MfoakEJUDaAV9zTAwPsH+zj680osMDorH1HFb32fc2\\/A\\/AUpgBGTjPp\\/kUAYSWTFcAED2JxSrYsoOFU+5Fbf2LzGDbM47jj9Kc8QTjAOR1IxSAwTaMcEqP+Ar\\/9ehrLzMYLPjru7VuRW4AOwfrmkFuc4ZTzQFjD\\/s8L0Gc\\/SnjTdmdij34xW2bHB4+X8RUhsfL6MWz68UAc8tishOE3EetPhtkjY5XcPQtjFbEln5fJAOfTNOWyJzuyw7AHpQBgpZK0jHaG6nC54pDZIGPBHsa3jpoXklgD\\/d60hsA4wuSfpz+tAGILNuMISvrjik+wAHBUZPQitv7EVBHUjtTfsuc9vw60wMF9PBJHXPWk+w7SOM10C2hK8DP1pGsse\\/4GgBnhO0EOtROi\\/lXhv\\/BQ6bz9D8HW\\/JP2mdxg8DEYFfQegWxj1GInjPb0rwT\\/AIKE6YYfB\\/hXVMk+XftbEf78bHP\\/AI5j8a1p7mU9j86NZZhcsueecin6LZmU7sZAGeOag1WNmuX4LHPOK2vDcWLdiwxgE8iu05yrqbpECADkce9YryFzjktnvV\\/Wd0k5ABK881TgtmlKgdDgH2oAIICULuCADjk+9JNLnICnFaN0qQwKgIPviqbQeZjBwM54oArEErgDgDnmkyQOQFHqakLAfLt4HeomJPB5oACOMEc+tA25xyCKB7np2xSjHXIzQAw8DnPPFKGIwcEnvinFc9DzSdwB0HqKAEDHaM\\/lQBkk9T1NBxjnk+g7Ui8AEflQAoyehIGOlK3IwBjHWms3Unn8KX7vI556CgBAOeeSOvFKCSMDjJznNJ9QfpQuTjGPQUADtjAHP49KQkhSMdKXAI565oUZI46DigB8Y4Y9B6ipYvuMQSOaiTIA4PIp8TDB9zzmgCSCNdzZzxRCS0jDk5pCML1685otm2Ox\\/Qj+VADpUKRgnrzUKL8o7Zp8jmQ\\/iaAuAT+FACMpQ4H\\/AALHeo1U98etOLZPbPrSZZR2oAfjzDinxruOevI5FRq20YOeantY2nmjjQEuzBRigDs9v9m+BhuAV7tvMLnnIHC4FcK24rwT6nvXa+NZhZ21rYB1zCio21uMgVxjctkjp6UAM5yTjoAeKVFywHXnFTQ2slyyxxRmR3bAUAk\\/lXr3gj9lP4k+NbZbqy8OXNvbsOJbseUD7jdzSbS3GlfY8icBMjr6c9KgKl2AHBPHvX0RffsO\\/E62tyfsNq5\\/urcAmvPvE37Pfj3wcjyX+gXBjXkvBiQfpS5k+oWZw9jqcmn6ZqFoqZF5Gsbc9MMrf+y1lgnB7fhVq4hlgZo5o2jdTgq4wR+dViuOf596oQighhjuRWjqLg3TqvZVHH0qvaoC6jA65z3qzqJIvJMjB4I46cCgCGElZjg5OMc8VZU4PrjqKhXHmHJ69ambIQnHbGKAHQt5UofkAc4HWv0M+AHiaLxd8GrFDO\\/nWkQhmwSpwmQRx1+Qsfwr87w2ZMkfSvdP2XPi+Ph94pOn38mdN1IojFj8sb9mwT781lNcyLg7MwPj\\/wCFbjw38Q7szR7Euvn3ZyN44b9RkexFbP7PHxim+Efi1Lx0aXT58Q3USgcoT1HuDyK+lPjp8IoPiT4d36c2buMB7WXAYNj+HIGSQOMd1CkZxXw5qejXvhrUJbK\\/he2uImxiQEdPT1HvTi1NWYO8XofqjoXjLTPGOmRX+jXsV7Yy\\/ddeo9QR1BFaVrpsd8kjyghB27Cvy38OeNtW8PP5mn6ncWTH+K3mKfng109z8aPFup2j2t34g1CWFxtaM3LhT+AOKxdHszT2h7n+1n8QdLvoI\\/DOh3ou0WTdeSRn92COiZ7nnnHTpXynNZSTzxW8ILz3DhVVe\\/Iq7e6qJN29i8mOFU8mvZ\\/2evg3d6rqsfiPWonRUx9lgI+YnqCB2b0z9TwBnbSETP4mfQvw40RPAfw8gjk+SK2tvMlZjjnbj9f3p\\/L1r89fiB4hPijxtrmqFt32q7kkBxtyCxxx24xX1\\/8AtY\\/FeHwb4TfwrYTh9S1CMrKIiAIk4B9wMDaPYe9fDmSQDnk85zU019pjm+hKhO0jk56ZpsRAmQkHO4fhTsnAHPTkVJp9lNeXsMcUbO7SABVGT1rYzPQvix4Vkmmn8Q2m+4sxcC1upQOIn2KyA9+RkZ\\/2a5Lwmjwaj9sVf+PWNpRnpnHH86978M\\/DLx7N4h1VbPwve6jpF0dk1ndQMtvdIR0ycDKnBB6iqF3+zN8RNOub5LTwVf29jO24Rr++KDOQNw6\\/lUKS7jszzb4sasb7T\\/C9pni2tXOOvVsf+y155jnnn8K9c+KXwq8Yxa7ufwxq0dpbW8cKyPZSBSQvzHOMdSa85k8ManDIUksriMjgq0bVSaAyGAOfUdeKfk7R\\/LNaZ8M6nKpKWVwcekTcfpVSW0lhZlkjZG\\/2lwRTEUFPzcdfWn8lRzux7YpWRkIG04pD83H64xQA9Tngj8ajkyXYj0p6YYc8MOlNbgkAZb0x1oAQHDZ6fpz0qaIgkqx4P\\/16hK7fQmnQjDgnkZ70ASqdm\\/bkKOntTIcMTnr1xUszKVJHB9KigfZkD6c0AMUHBOeKDyDkZI70oAXODupmPmH+NACZA\\/wFABJ9B70ZAJOOvWkZjyBgY5zQAAcdsZoPytjjP6UuFYjsetJjGB6UAIvJyOKXOR79KUHaOOaOgxzj19KADg5\\/WlXkZ9OKQg7\\/AMqABngcd6ADax\\/i\\/QUU0xljkAkdqKAP2r8puoXKdyc0CEN9w8e2ak4A+6R+VCmJgQcg9twrzDtEEe3g9\\/Rf\\/r1G0aRdC3PvViOJdpyyn6ik+6Rzu9+aAK6x5\\/8Ar5qXYyj5V2\\/U1OwDfeyPqMfzoxs5P8qAIzE6gFSmT\\/eP\\/wBaoPKyT1z3weKu7QevzfX\\/APXTWyeMqPwoAqvEGUZYcegpoXYfkYZ9xirqgjrIf+BEYpphOSc8f7PNAFIws3JwfoaUrhcbMf7W6rQQZ4x\\/wI0pRTwFQN6gc0AUvLZuOKkjjMZB4OOw61b8r5ecA+pNG0gYwGHqKAKcsRkfeFwfQjmnJAeCR+fFWzGAvCnPpmgKNmcAH0J5oAqta5O\\/BGO46UnlAnlVYf3gtXUAKbSgOe+OKaYwGxwoPYHigCqYUz8r49iKcIsg\\/KG984qw8aIeevoOaEhEwJwVA6hqAKvkIOq4+vNKqLHnBJJ7VO0K\\/wACKo796WKKNchTj2OaAIj+7GGBXPoM0BC+cBR\\/unNWRG46BU\\/HNL5Sxjs+fagCmItx+Y\\/9881KEJ6Fv+BDNSiLHTA+uaaUGfmJFAEflNn5SM+wxTmjLDHf2NThMD72fr2o2A9Tn2oAqiHJxs\\/Ekc0nkKMcDJ6VbwD8uwKB\\/FnrQRg5A5z\\/ADoApPDxx3zkHpTktxk4xmrDId3T8KXAIJIHsaADTkEF1G\\/Awe1cZ+1p4Dj8e\\/BLV4iha408DUbcg8howc\\/mpYfjXbxEKynqQfpVrxr\\/AKZ4B1qJcbpLGZeeQMxmtIOxEtT8WvLWfVzGMMGbr7VpXcjwOttbryeGHtTNMVbY3U7AbkYqDnvT9LnEUUt3KSxbODmu85Qlt0gT96AXIrBkuY4nZUGOcetWtT1b7QxIPPTHtWI7fN1Bz60ATvOH78+ppskpIODx+VQA8Y\\/HNLwf4j0oAQ9cnp+Ypw57ZWkVgByuacsmOSuT6gUAD53L1GTxTRgNnqe\\/FNLg5GM+9Lx7k0AP4ALHOPamFyQSM9OtLuI6Dj1poxnigBdvCnrnnmg4GcHHqB60hznOMg+1DEdP0H6UALlieDmkZvXn3oC9znn16UDg+g60AAILYJ6dMUvIOM8dPwpvfg9evpQeDjt60ADEg9MelOVx0HWjrjHSkXGSMcnvQBJzt5FLuOMk8j1700sWAwPwoTJPPftmgB8hGM\\/lSwnlgWz2wKjYkEc9OaIzhhnt1OaAHovz54NPkYqDxknrgUzooIJ4HNNZiy5yc460AIvzMRjJpCMcjsKmWF2ACIWPsCambTLt1O21lIPcIf8AP\\/6qAKeMHGcexrofBUSnXInbkQgyY9cc1Ss\\/Dl7PIB9naIY\\/5aDb+Ndro3h1fD9leX8sgkfy\\/LAHQZoA5XxPefbNWlccc9qyoYmmfaDkngClupjPPI\\/Tec8dq9z\\/AGP\\/AIRj4nfFC0+0xB9N09lubnK5DAHhT9aTdldjSvofQ\\/7G\\/wCyrBbWdl418T2aSyPHvsbSUZAB6SEfyr7S8sImFAVQOg7U2zgis4IoIEWKKNQqIvAUDgCpM88dDxj0rjbvqdCVitNAJEwwGO\\/Ga4PxxoEV5YygqAcHt1r0dl+Xgg+1YmuaZ9tt3XHOOKhrqNM\\/Pn46fC6xv5ppzbKkwPyzRDDc+uOtfK+saNJol48ErZIOVYdCK+5Pj5puo+GdWzdRSfY7g\\/JIq\\/KfYntXyV41torqORQMvGcqc84rtg7o55bnF2Dr5xJPHqata26yXEZAwAuKylyj8np34qzcztLtbJOO3rVkiwkmZs9hU5bC5IwMc1Wh4kPP4VLg+uQaAHlSw68ds0+NZFcleSvIPcfhVzS9NfUZgiIzbjgYHX6V9m\\/s5\\/sWf8JFa2niDxYGt9OcLJFZbSHlHXJz0FS2luNJs439m\\/4\\/X8SJ4a8RQTXViFIhvArFkwcgMV5wDzuzkV7N40+E3hj4sRh5FS4mcF47qAjzQxGclSQG7fdIPqpNdx8cdM+HngXwUdPis7bTH\\/5YwWCKJXb6Dlia+ePB\\/wAP\\/iRrkr3Hhuxl0PTXYGN9YkZDICeP3Y\\/xrn0fvLQ1V1o9Tjdc\\/ZN1KK8dNM1W3ZhnMNxII3X\\/AL72H\\/x2su0\\/ZV8UNOF1C9s7SAH7\\/wBojbP0G8V9Z6Z4e8caRbBNU1jTriUDkKHX9DxUd7p\\/jUh202XSXmYDCyFxt\\/FR\\/On7R9w5UeWfD39mTRvDZi1K6L30kbBo5ZvkiBHfkAn6Krf71aHxa+PmifCrS3stHmS91oKYkRV+VB3+gz3ySccnisjWdf8AGGl6\\/HH44gvbKyZv+PrT1MtqAD\\/GcBgPevT9T+BXgL4yeCoUVYUvDHm31ayKmVTjjOOGX2P6VLet5DXZH5y+JfEd\\/wCLNbn1PVJ2ubudixdh0yc4HoKzghcbR2\\/zzXr\\/AI\\/\\/AGY\\/GPgvxtF4eWwfVJLk7rS5so2aKdPUHHBHGQele9fCf9hiG1FtfeMbo3EzYc6dZ\\/dB9HbjP0H51u5xSuZKLZ85fCf4I+JPizqHk6VabbWNlE15IcRxA+\\/c8dBX3p8Gf2WvCvwyjgu2tBqmrquXvblQcN1Oxei\\/zr0Twx4RtvCljHa2NjFYWUWAkMKBQPw\\/rXVwlRGPT19a5p1HLY3jBLccjmEKFX5QMcVoWV4TIqt096ypJ0XCscfypqXyRN8rZz71kaWOuRUdScZ7c1UudF0+5bMtlbyMP4niBP5kU6xvFcA542AkVaDBgcHJHb0rW6ZmZ6aPZRcJaxKv+ygFeafFT9mTwJ8W7eZ9S0uOy1VlKpqVmoSVTjALY4YfWvUZ2K5PrVNb1kIBywz371Kdh2ufkD8aPg\\/rHwZ8XXeh6xHypLQTp92aLJCyD646dQc156sKBSMHOSCK\\/Wn9p34MQ\\/Gf4eTtZwQt4h09Gls5HXJcYy0eevPb3r8qNc0e70LVbiyvYGiuoTseN1KlCOoIOOa64S5kc8lZmRKAmcHAHtUagk4ADetLJGxY54HXmmcMccjmtCSUjd69elHcDApFYZxUk6bSpHGe4oAZIxZffpTI8Bj2PQ4p7sVAUnA9qjDbCOM9896AFYAuTxz6U0HJHYHqacxGDzt+lNxt9v60AH8Pt1z60ZCjPHJzmkAz\\/EM9vSlxkYHNACDJA7++aM4HofTFAAHbvSgY6jA6k0ANxgfX2p643cDPvSE7cEd+lOA5POMUAKELJk8Zpqr6jHHSldjgDpz0FKqluilqADA78ewFFO2SKP4vwFFAH7XINq7VHH5\\/qKD8pA8wL7ZppuAvVvm9sChLncp5yPVmrzDtJVTcDj5\\/cdqYFZeFHB9aaZXX7nzL3xQsu4cL9cmgCVk2Ab1LZ\\/vc0wuvTIH\\/AAGkE4boAmKR3I6ZP+9QA9DgnOR6YGc099qgE4we5qJHZMlsYx705JFcn5h\\/wHrQA7IUZyT9OaCN3RQ30GDUYkidiGUcf7WKmQqPuqPxNAAN2MYb6Hn+tMVgJdo4ceuKewJHHyn1BpCUVQTs3dznBoAUtjpnf6gcU5G3L8zc96i8w\\/eHI7Y5pVIJ3HIb0FAEjAA8fMPbg0g2hs9\\/TPNNZ167mLf3etKpJIJ3H\\/ZJH8qABmYvnHye5p2FPzKAT24oLheCMfzpNwPIHHqaAAYkIL4D9gBTzI8fykkE9sVGdx5Vm2jqB0\\/lR9\\/nI49DQAKhXOVx+NAwDwfyo80\\/xAA07AH3QqjvQAoBPcj86bKSCOcfWnMFJBB59uKduY\\/fz7bcUAMH7vkc59R\\/9ekRNhJjKsT1p4K+o\\/nSE47E\\/pQAhC+mT3FKVYgZYAelPDK3DYSlUhDnJx+FADFRlOT0HIpQhySfwoVsyEc89Of6U9z8oPTNADDHycDAPJGKZs+bkA\\/hUgOAOp7UoUZ4IoAaEwenJPQ960btFm8PXaMOGgdf\\/HSKpIm0Y6GrmsyR6Z4Xv7mYiOOK2eR2Y4AAUnk1cSJH5D+I9CXSV1OGX5Cbl8jPoxGK4jUbnyYUhiPycnjvXa\\/EHWItQhuJyf3s8rygg9ixI\\/nXmTys3XPXv1rvRyiSuWzk8+tRM2D7HpSswOQST7imkcYIz\\/OmAAANxgADp70uQ5Ge9Aw56EfWrEFvlgWBGfXtQBDsLKeOvGKCmMZ464xU0jYYqO2ah3HnHPpzQAHI+h74pvOcfhT44zM2Ogz17f55qzPbpbBeQSRgjNAFQqeCelOJCqMgZ6cCgsxzwc9TxQE\\/dD1HrQAn3uAOD1oMRXGBnjin5AJH3cVJChdwD8vNAEBUsAQuR9elNVDgEAgVdNvxwc9+OamgEMZ2su5gO\\/0oAz1gfaeDinLbMO+MnvirV1ImdqlTx1BqJYpHXIBJ9cZoArlcE880hUg9unr2qV7Z14ZeT270ht5FXIXdxQAzp9AemKaOckDp\\/KnEEE8EDpkUsUDzkBELHOMCgABwOnNCKXYKBye2eauwaDe3EoAhdQfUcV3Hh7wUIwJrjCIhy0j8L9KAOV0vw1c37hdpOTxjmuos\\/CekWMRe9nMsvURRjP4Zq3eaqmxYNNUwQA4aZh8z1mDyBKI2O9jnJFAGvY39ppwZ47eKKPBAz8xxTJvGeFMdtC8hPAITr9KqBraBCoCk9PmOSKgj1SGBj80aKpyMYoASe\\/1a7bKW4jzyWc4FW9dvJtP8JfZ55d087lmCiqcviSCWRUQNKx6bab8SJPLmtIAwJ8tSVBHBwM\\/59qAOLDE4Az16HjFfop\\/wT70C30b4c6jq7Jtub65KbsfwJ\\/8ArNfnQBk5A9ua\\/Rn9jTUJbb4MWMhyVF1IpPT0rGr8JpDc+tIrpZOhIz0qyMkHn61xFlr6iQq7j6Z6109tfrNGPmHIHtmuVO2hvY1MBgOSQD1qjeXEUbbCwDsOKp6nq5soAc\\/M3Ari9f8AGkNtMUbB29CCMihu+wWsbPiDRrPXbKW2vbWC7hY\\/NFMgYH86+Kvj\\/wDsmT281xrHg5HlUF3m012BwOv7s\\/0P4V9Oz+PknmWONixYZYjoBVpNUN\\/KTwQ\\/XmhOUHcTSe5+Reo2ktneSQTRvFLGxVo3XDAjsQaVeY2weQc\\/Sv0D+Pv7LmmfFFH1XSiuma+qn59vyTYBwHA7+9fBOs6Je+GtUu9M1C2ktby2kMckUgIKkGu2ElJHPKLiVI+47H1q5axrM6LjAz8xz27VShbBfJJHcGuk8I6HNr+sWWn2ymSe7mWJEHU5OBx9TVkn1V+xh8AIvFt+PE+uW27RbNisEbdJpRjjHoAcmvrn4nfFH\\/hE7S20rR7V73Vro+TDbQJ93HU56AAfy4rM0WPSvhH4BttHtJUhh0y3JkaT5CzYy7kH3zzXMfDa1S5S\\/wDHWpPNO+o7XtLacbTGn8ChfU56981xOV3c6ErKw7Rvhjpmg6k3iTxLPJrmvSqWQ3O0CNe+0fdRR6mub+JP7R+heBQ0F9qIWVgf9DswScdhgYJ+rMo9BivP\\/wBo\\/wDaBPhO1nsrKZbnWLkEeYp4Ucjf1+6D90dyM18N6zrd5rF\\/Nd3k8lxcSsWeWQ5ZietaQp82shOXLoj6g1P9tmW3dk0fw9bR24PDXDLvP1AX+pq34d\\/bZik1C3Ou+HYpIQwYvauhYH1wy\\/1FfIhJbqTnPU0u49ug9619nHsZczP0r8J\\/GjSfikEi0y6tdctijm5srlPJvIuOAiHIYEk5OSAMVPa+FLnwNrltqfhKdI9PvJ1F3YSH5MMTlwP4WHPTg455FfnF4c8Tah4a1OC+0+7ltbuFg8c0TFWUj0P6V9o\\/B342XPxN0kxrEp8R2Ua\\/ardCAL2IkDzUHGHDYzyANxNZSg47bGilfc+x9M0xbrbNNmbjueFPsPyroUs4oUUqg2j9K8f8J\\/FKDyxDNIrTRHZKquCG9xivRLHxRa6haLLbTJMnQ7WBZfqK57W3NdzbuUjnhKNjIGAR2rjLi8aCSSM\\/IFPH0rVl1+FshJFMnXaDzWHqGo2kS7pZVMh68iluMilvgE67U75NYc2u+VceWDvIPas3W\\/F1vasVEgz7Yrlr3x3Z2iyTzfdAxzgfzquVibsew6R4jYJvkYKPU8cVv6f4njmOPMDZ6V84+L\\/iTb6H4Ri1CKcwPM5RU3DLYGSf5V5fp\\/7RkttMB5ryMxwcN\\/OqVOXQhzSPu2bVoyhKNuPfmsC61QLLkMeMHHt618\\/aH8cTfomZTlx8wByRXXaZ4yOr3yMjDbjnP8qlxa3LUk9j2zRdVVx83APGa+b\\/ANsH9nuDV9Hu\\/GXh\\/TUm1KIGa9iRctIoABcD1GBkV7bo8+4REEkBsnA6\\/wD1q7aBkvLYowDKw5UjjHvTjKzCSTR+QmmyaPqUkUF3YW6lmGHbI\\/Cq2qeH\\/C811KkkF5p+GOJI1LKCO\\/evsT9qz9mrw1Y+Hb\\/xBoVuul38ObhreL7rnqdo7fhXxj4X8SypcvHcTLvzgLcnCfQmu2MuZXOZqzsUJPht9q+fStShvAeiOdjfkaoXHgbWIEZZrRo9vViQcV6TKIWCvKlowc7gkTFSPTBq\\/BNhjIjybCn3GO9c0yTw2TR7vzjH5RxnGc1et\\/C15OoICk9MbhnFezS+HdK1tcvtguQNxaP5c\\/hXNeIvh\\/d6bG09nceaijovNAzzTUNCvbFj5sDbem4cis9oJUGChX6iunv9R1KxZobmKRCp6svBFT6RfMxSW6RZIN\\/zKy9vWmI48q4wSOKltdOnnU+XGXH+eK9abT9F1C1eO2SNpCNwxjmsMwy6QDvg2xDgsRQBxcWi3LAkxEY61N\\/Ys0zgJGwPof8APtXomi32nagskbpskbOWyOawNVM2m3rqUIj6rIBwfegDIPhi6ihLeSWCjk8UyxgUTFHgwT7ZrsPD3iCCa3ltZG2uw6sRVK9gezV5fLEqZGCgoAzU0i1nb5o9rE\\/rVR7BbO4ZF6Z5BrZ03ULfK5XkHGO9Z3iO3ltr77TEC0LgE47UAPaxU4IUdOflorNi12WJAuzHsc0UAfsKsyD+ID2IpJJwp+7n3GSKzRcZIPzA+g6U43W4gnj9K8w7S79qB\\/iA9hxUnn+nH+6f8Kzjdj0z+NMa78zk7xj1wKANYT56\\/J9VzmmyznA2AE96zDd5+5sHrtANAnUZ2HB7\\/wCcUAabTMyjAyfrihZMdMj1yTVDzmABUZPsaX7QABzz3GaAL5usfekB9iKd9qjx9\\/b78is5psAbUOfpmnjlQc\\/gRQBoG6CqCrkmn7w0YYlgT3LEVnIcN8x49lqUXAYbdpC+uKALokATAy3uOaRZ2U8sAvfJqj5iBsBefU08Nuwc\\/gOtAF37QM7sjHqOtKXwPMVz\\/KqYkI+X5j7HrSBsN0T\\/AHSeaALguAwydrP68GnLLuTaRye3SqbP\\/FgKB2HIpBIGO4ED2FAF9SI+GH5GnMwz8gBHfIFUkumII2Z9zz\\/KpI2dkY8YHrkUAWhKP936Gm5Y+h9dtVVnDdvzOaepVDyoXPvQBZTaAcMB9RQsqN0O76D\\/AOvUDNj7rLj601Zy3I3J+X9KALSzkE9RRGWUk56\\/3sVX+1GTv0oDM\\/3WGR14\\/wDrUAWjIF5JT6f5FOzuwV5J9M1VV2Jxu59uaUOMnK49wKALPmsRtYYA6E\\/\\/AKqUMGPJIHt3qsZECnao3etSq\\/HrjtQBYz26EelIoySMZH9ajEmSB360\\/wAwAt0P1oAs2oDzICc5P5157+1742TwR8A\\/EE2\\/ZNfoNOhx\\/elyP5Zr0SwXfcIOgznNfOf\\/AAUTnVPhLokDN80urIwX12xSVtTMpn5ueIL95p+G4AwB6Vj7sZHGccjFWb9w0jswwfzNViQvT9a7TnGgDcO+KeqmTG3qamtLMzK0hGI1HJA600uq528dRjFAFiOCNIQ5+Zjxj0pHuSR82AfXiq4uG2lex557U0ZbIX9OgoAQKZn+U5J9K07fS1wTKe\\/SiygFsGkkGDjjP86iuLwzMQCQueRQBO2yFGCEY74HNZ0hMr7epz19anMchhGASTVm1tlgAeU5J6A0AKtksMGWHzHByRiqLRNPIUjXJyeP5VpX0uUIB6jpSaRZOxL7sKfagCsunMGG8dPSriac+zKrwPUd6uumWCggfpTmjIQKrHgde1AGJO3kZU561S3l2L9j+tXb92MhRh6c1paRpcUkaySKW9j2oAyobFpG3EYXrVz7U0PyRr0yOlaupWvlx4jTBPoO+KlsdMVFDNg4BOD2oA52Q3U0ofysiuj07T\\/tESh4xkDkYxV2aOIQ7QVQAjsOaii1HznMUJyqgjp3oAiudCsokLMOTxj0rX8PeGPtEyx28Y3d2YcCqtno8+p6jFDFmaaQgAKM4zX0F4T+HR0jThEWRpyoeWQ8Accik3YaOEs\\/BqW8D3V84isrcbpJQMYFed+KvFf\\/AAkd4LWwQQWEJ2qFyMj1PvWx8aPH\\/wBtuJNHsJCtpC+19jf6xh3P0rzGG+S1hZCCXY5JX+VJdwNbUNX8s+UiBUjxgDqTiqlvDqFwWaGNgWH3sVni7leTeqjI5x1ratdWmWE+bNtxwAB2qhCweHbqeUNc3QiGOfm6Vfh8PaSjDzZ5JmB6JyKzH1W2AJLNIx67jgVWbWdvEKDOeCoxQB2eiwWUeqxpBbJGpbq2Oe9cv451A3usP8gG0EfKPcmtHwjHez38l5IreXFEzAMD1IwD+tcrqUxl1CZzk\\/McUAVkwznP6Gv06\\/ZD0VB8C9PgkTBuC7k98k9a\\/MeMb5VXPPYV+sX7L+nNY\\/CLRISu1hECQfU81hW+E1prUZ4ue88MSJPIjGBcLvHX2NdL4S8Ww6np6zI+8AgZB6V0Ov6DBrVpJbzqCCOvQCvnjWVu\\/hTrJldHOnSn53jB2dep9DXMkpGzdme761rUFw4G\\/JUFtoNeQeLZxNK7K2XboKS88Yx3FvHdwymWGaMFWB6Dg4Nefap4gN1PguwQdVB+97ZrSMWiZNNWOy0gJC4Bbcz8swFdxo8zeWMqVyOM8cV5PpWvELgjCL3brXZabrKysqLIOeFFEkJM7p9ZhtVYuV3KNxA54rxb47fBXRfjRpL32myRReIbZGME0ZA83vsf8uD2r23wloMd7ALuZRJCc7VZc+Z\\/tfT0rXuvB1nIoeJfInH3ZE4P\\/wCqs0+V3RbVz8htZ0S98O6td6ZqMDW15buUlicYKmvZP2P9FGu\\/HLw6jr+6tWa6YE9QiFh+oFet\\/thfBQXWny+J7SELqlqo+0FEOLiIZGf94cfhXkH7IeryaR8Wo54n2v8AZJsfiAP8a7ObmjdHPblkfa\\/x61W6ubCx0y1EZe7uoYZPNQONjN8xI7jAPFXfHd\\/D4Y8Kwxq3lRWFtuAAwAxwi\\/kCx\\/CvMfiFr66r4w8EveTuhOqqEKqCpYRkAHPTgnnmug\\/aY1GK28Ba4PJTzmtXMc3n4YMofGE7jBbn3rlStZM2vuz8+viN4tn8ZeKL7VJmwssmIhg4WNeAB+FZmgeHZtduURNqIW2734H1P6VQnXknhua7nwBetp1m52bhICFbH3fp9f6V29DmOv1b4J6bo3h03JvjeXZIC7JAoJ74Xk49zXmep+E7hYZZYI3eGIEsxHQDgn+Vepy6jc31ms7FsF8AuvBqlq73TwfZbdl2SjMjbSO3Q8UkB4sylH5+X3rs\\/hd4vn8C+NNJ1aIlVimAlTs8ZOHU+oKk1i63oU+lXUSyhMPkqUOc44qKOLymjcjPI6c03sNH398UfDt9ofhW51\\/SgzPGHlTzHXEqAblxtGFAXdx9PSvEtI\\/aEu7MxvulgkKgsNzAgYB\\/qK+jY5GvfBlt5iOUGjRo+4HaGMRPXOOjemeDXBfCj4aWN54HivxLYXUzHi3VBJIowBk55HTI9iK54tWszVraxzI\\/avURhVu0U456A1iaj+0mtwxL3ikg5zvPT1\\/nXyvr1omm61f2qMWSCd4gWHUKxGT+VVUB9iORgitlCJnzM+mX\\/aJ0kzHzrppBnLMsbGuN8WfH8apdotpDJJbx5KhztBPqRXiWTkE8\\/UU8Eg+vOMCnZCudt4g+KOreJnjNzJ5UUS7Y4kJ2qO\\/41Fpt\\/kqXlcswzjFckgJAyckVt6Spk2AHnpmqEeq+FNWukliijctk449K+g\\/AN5ejyZXH7pHwxzy3r9a8T+EukyTyqz5S3DANnktx\\/Kvq7w5p9vcaVbQwQhdvPIOGHsR\\/WsJuyNYq56zoBX7LDJuK5QfKRXbaVLlF4AXtXnugWLSeSgYNCnCc5GOwNeh6dCYwDyOMHk1ydTfocP8AtB+EX8WfDTWBb5F7BbvJHjjIA5Br8k54X0bxIY7kBRHJ8wPIzX7YXUaXFrPC6ho5UKFcdQetfmB+1r8ILjwR4zuZI4G+ySkPC6oQrD6+vrXVTl0MZrqeUpok+pStPY6krhTkLkjb6DmpDYeKbGVQka3BXJDDmsnw5rAtt0bRyBAvzEHAB+tdPZ+JbaNg8F1MNvIUMGx6jBroMTPg8U32nvtvNPkV9mzjuc10mlfEmxQIj7kKsdyyjjmol1r7Y48p4ZnY5\\/e4BB9Kkkk0u\\/f\\/AE7SkiJG1ti9fU5FA0dLdS6b4qtsbYWl2H0IxXPaXowSxljNgDHExAyMllrIbwpaG6L6NqjWZAyI2c4Pt1pun65rXh7V0S8BdJOPNXlX\\/wDr0CJraKzudSU6cHsryMZNvKMK\\/ar9pr0N+ZtO1GBYzwMsM4PrXC+MLzUI\\/E096iyRZIZccY6Ulp4h+1yB7lfnHJcdTQBd8X6VPokqyWiEJvIBXoRWba67fbDHcW5uIewK5xXe+HvFdnJ5dpfhZrd2xl+oPFbGu6DZWUyS6eI2STlVPIOfelcDyHVJ4Comg3wzZ+6elMstW1EsqJLuQno1ehXWh6Zq3nIiLFd44Vu5rjItFk+0yrGuGU7Sc8A0wGas\\/wBnijlaMxT8E7elRweK5TFsZA+ex6VoXCS2YjjnjE0Trz3AOasQeGrK5t5Wt5FM23cEoAxZNQWVy32BD+FFSLDJHlXjBZeDmigD9Vxc7Tgkfkad9rKcAAjuQM\\/rVJ3Zm4AwRjGaFQAZIwR0wcV51jtZaN2D0fH0OKXz2fGCGA9TVVCHGWByPpSeYT3xUk3LvnA+h\\/3ef6Cn+aQeCx+tZpO3+Ld+A4qTzm7HH+9mqsUXo7gysVVeR68U9nPY8jrkVnq4kYjOPUgULJgkB1GPVgKQGgboJ2Vv0pPNyc7gfbPSqaTbSejZ\\/uqD\\/MUhmdieQoz2HNIDUS5TACjDeoqRrmTZjgr6FazA5AG45H+yRmk8zYc\\/Nj6UAaf2k7RjANCynO7Lf0qhHMHIHI9zj+VK0gBwpUn6\\/wBKANIXHPU7vYUvnbmxjJ\\/Ws5ZiOCuD\\/eVaeHYfvNxZfTofyoAvedsOCSn+yaeLjIyrDPpWeJmPzBcD0qRZSULccds0AXfPkYgkFfqDTzO4PKmT3YniqMdxGwzuKHPC461IJdw7D2zQBdNwB\\/AP+Aj\\/AApv2nb9xuvrzVQdD1\\/lSRlkzk7vTOBigC3HOwBy6k+1Sm6DY3YH05\\/lVJ7hc\\/Nx9KI5Q2fm\\/IUAXmudmD0z6nFKJR3P5KKo+dt\\/iB+oqTzD2cR+7Ec\\/nQBcEm7ofyp3nMeOmPbFUo5WydzhhTjKFOcBfcc0AXFk55cfTFTLICPU9qzkmG8Y4I7kVMkysMZzgd6ALyOSAc8A8CpY5cE84A4qgk3J7L14qaOQjGCMdaANrSZVNwCTjPSvkX\\/go7q+3\\/hD7LfmLFzKVzxnCqD+pr6x0yYG6UZ+h\\/Cviz\\/gpRayLqng28jYkGOeMr2\\/hOa2pbmc9mfDM7HzD9c4qMdTzn+lSSxsGPPP86lsrZppgoUsCcmu05jQuS1rpMUWMeZ82axgpI5PNbGtzGaQIPuooGM8Vn2cBkfr8vf3oAhK9cHOD+dXbNDAxkZeo4461a2QIjdyOhqhPdOcqOmegNAEl5ftMccAD0HFV4UaeUDGQTURbn1Fa2n3aW0GCuW7HFAGhtS2hUHr9KohhNdBc5XP5VWuL1ruQBeAT0NXLLT2gJkdhn60AS3FsqNubJ9Aau6UFkjyeEFZN00k8\\/lggkgDGc1pMo0+yCFhuI65oAZe3IWbCnIwefzqG2mknTCfO2cBfSsy4uPPZgD1P6Vf02X7Mh3d+mKAGzWReXcfulupNbdkwKARMuFGDxXPXWpFyRkNk9RUukzMBJMzkLjjOaANy8YKpdjj0z3pdKulkVmZQAOOO9YF1fPdXCqCWBOOeTV55l02x8tnBlb5j24oAfqOro6vGikc4FO0lHjiaYoNznj1\\/Ksyw8u4nMshConOCa9g+BPw4f4l+Isk7dJsyXmkYYHHRaTdlcaVz0D4GfDN0tH17UInWSUBYQRgAd2FXfjn8Srfwl4en0qzYLqFym1sDlV7817X4r1HTvAfhWaZvLht7aEhQOOAOAK\\/Pb4geLJPFviC5vHclHc4z2HYVlH33cuWhz0kj3ly8jEuznJJqxLEka7QAT1z6mm6dbrPIxJ2KvOT0q55lrEvzRlyOQzHGa2MyrGzNIAnLnoMdasRaPdXbAuNgPcn8qqyXYBzCuw9eO1S298QuHmYA+lAGjFodpESs0uXHbPWtGC1tbYosEAkl5PPGKxBqMEJDRx7245Y5pjajc3Eu2NXJI7f\\/WoA7O2uG\\/sfUC4+dQFIjbAA571548mXJIyc569a7bTo7ix8IXrToFMzg5YdgPX8a4g\\/McjgdARQBueBtHPiLxZpVgn\\/AC3uFUkdcZ5r9aPgtCtt4Ot4UOAjMo56DNfmZ+zToP8AbvxY0tc5WDdOT\\/uiv0n+D9yv\\/CORKcZPPX1rmrM2pnpEiAodvX3rhvG3h6HWbCaKWIOjKVIYcCu5RgehzkfWszUrcyI3AYduMVzbGx8Y+JbC5+FUs8ZR5tCnfevfyWPpz0rJ0\\/UbPXoftNlPkIeVYEFW9CK+j\\/HnheDUrOeC8t1e2k6g84r4\\/wDH3he++GmrSzafKRZSnKEchfZgeorqhLmRjJW1PS7eZ9ixqu8E447e9dHoZMl8kVwzRozBMngEd\\/0FeE+F\\/jbZ2l9HbaxE1o+donXlCf6V7hHqFj4jtIprSeJpU+aKRW3AnHqO3anJEpn0DpOtwx2kUEOCqqD8vYe1dDFeC4VCp4XHPrXh3h\\/xQhAiciKdTh492foR7V3Nt4ph06zeRpQDjI5rlcWbpkXxmu7OLwxdx3IUxiJi5PYEGvz3\\/Z\\/sr64+L1tc6XAZ7WFpmnw4ULCVYE8nsOcD0r6+13xr4c8Z6lqWleIdSjt7FbSSQxNKFLkDAUDIJ5PavmH4JWkVt4quE01mjVJnwQ3zeXyBkV001ZWMZu7Vj2P4uag3h2x07VUiScaffQzlpOdqnKsR6HmvV\\/ixYjxf4SguId7WuoWhXIjXbtlTIYvkEAHPAzn0rgvFmlw+J\\/DNxZzqW8yMo\\/tx1A9e9XP2bvGsHibwxd+CNdSObUtAbyxFMc+fCCcEA9cY\\/I4qXtcpb2Pgyewktbu4s5lZJ4nKFTwQQcEV2HgbVrFNNuNMvF8q5J3202Thj\\/dPp\\/8AXr1T9p\\/4V3aa\\/d+KtOsDapId11ZxAuVwMebkcc8ZA+teCw+TdkZIWQdVPc10Rd1cxasz1HS74alAsPl\\/MjAhsDrmvUIfgnNe6Ymp3d7FA7ReaQSFRAAeSe3HNfPekanqmjzJ9ku9hU5AdFfH5iuq1bxv4i8T2iW2p6rLNbKB+5XaienIUDP40NPoGnU5nxBZreavIiTC6hhPlpNg4Ye2ah8P+HpfEfi7SNEtIy81zMkZx2BPJ+gGfyp9\\/qMVm+xB5twwwqrzj619Ffs6fCafwtbyeJ9cQJqN7EqwwH78UT87T6O+Mf7K5NKUrIErs9m8Ya9daJ4F1QRqrPb2WLaOOPkF9wjXjrhCh\\/PtXD3caeCvhRql5IqLLa6c6iXHO4JsHP8AvYqz4gvrrxZ4q0\\/R7M7ra3l+03c6MCrzY+RPXC\\/exwAFxz24f9sDxfbeH\\/AemeE7SXF7dus04B5EKDv\\/ALzY\\/wC+TWKXQ1Z8dSFpXZnyxPzEtySTTov9YOOcGo\\/XPXrUsI2tu6ArjmukxK5UtnHFOyAo4yTXefCX4TXnxO1aSOOUWun2xU3M57ZzgAdycVzPirSI\\/D\\/iXUtPikMsVtO8aOepAJAov0AoW6FpFBz1rp9J09pZo0TljjHPvXN2OTKMkHH58V6\\/8M9Bjv8AFxJjI4XI+770gPWPA2mxafo0UIXfOfmz057\\/AIV9A\\/Dy\\/NtpsbSM0UKDp69K8R0m7t7WZIUBcKeVQZaQ17P4L0y91eRJrqPyLZTlLY8EfWsJ6o2ie2+HilxZxSBQdwBJ6c\\/T8a6y1AEYbbjAA4rktDkEUEabvlAHy11liymMgHgjiuZGzJpc9umPyrgvjR8MdO+J\\/gq8029T95tLRTL95G9jXoJPPXJxVa5P7iTIG0g8Gq2Efi9daWuh+ItW0W+aUGG4aBwgHQMRmtKX4eWN0c22pshPOJFIHbjNbfx0mW0+NHisxKJI\\/tr7tvHHf9a5qz1iyuNuI3jbcDlZD0967lqjkK934Q13Sw8sYW6gXpIjAg\\/h16VmRa1e2DL5sTxuhB4yMV00WuzQyEwXRZXJBilXAGPerkerJeB2uLVJUxtYhQwyaYGFbeLoZ43NwA8rqAMrjac9c1rN4ggm0+GBW3oHx5bHJHuDVe707RL9ZF+z\\/ZpAQPMQ4x+Fc\\/q\\/h240lfOt5zPCh\\/hPSgDo55TpzpMMXEMy7WEgzt\\/wrnfEenpZ+VeWqlYJx930PcUy31n7XA0Eny5xz7+9dBaQNqOjy2G9WZW3oT1\\/A0Ac5Y3rwx73XGMZJGQa7a58Qtqegxi0YGeBhhEBzj0rhLhm02d45VZSQRjHStSzv4007ER2TxfPuXjcPQ0rAdFaXbXqwXGSl3HzKjcHitqXw+l9C91bEeYw3Oi9M96yLXVrbXrFnEfl6hHHu3r\\/ABgdiKk8N6lviVo7jypF+Voh0b160AYKaq2J7W4QMFJXjqKzdPuJNO1JgMsnrntVfxPBPBrdzIAwVn3Z7VnRXLNjDHcec0wO8Fi9yTIrcMfQUVyUWt3cCBFmIA9DRQB+qcqq8oJOG9l4p+CgOWP0A\\/xqo0ygEbsD0AqITqrDEhX\\/AGfWvPOwuCQsRtX8xmpThcc8\\/WqzXJHt7ZzTFnDfxiP2VhzQItFhJ\\/GR+FR+bj+Db7\\/\\/AKqYZ\\/M6MVx7ZpFuAc5x+NAE8CFmOSF+rAVKNrEj5iR1NVpLjCjbEXPoB\\/8AWpRK7Dpt9iaTAnLN2fGPTj+tLFhWyo3t35zVUOinLAn6E1KH7kbF7HbQO5Nw7EHKn36UKTu2kYX+9uqJXLnaQsi+meaYjhZyNuzHpSsItYAPA\\/HinCZQAp2n64NRCVeuDu9dwz+VDO0gwshGexbmiw0yyk3IVQmPTilMoZtnRvZQap7WQbSQT+FGGHIxn3xTsMvhgi8nkdyMUCX5SxIb8KqLIAvzk7vRTR5o+6uQT60rAWknV1J4U+wA\\/pSCTdyWPHvVYFkB3Zz7Himh9\\/LEZHT5qANA3oPqv4mgXAlOQ5O314rPZ92MjH0anxTbScdDRYDRMxkzgBvrxUQcHqxX6ZquZwh65+oFOkuy5H3h9TmiwFpbhf4WHvT0n2k7zkdu9Z5mB7Z+lDuuPl\\/d\\/TmiwGh54Y4WPHuP\\/rCnLIM8uD\\/s9SKzvtHHysQfU05JSpyWHPvRYDSSckkZwO2aUXG3gnNZ32jOMEe5yKe0+BjJwPypAaYn5B\\/A1KlwDwTgfyrF+04PB5\\/SpYpzyehAoA37S6CTxljgZ4rx79ubwDbeKfg42r7gt7o0n2mJxzlSCGU\\/Xj8q9HjuWmKoo+92zXCftcz3Vv8AAHWtjfK6BGx\\/dNXB2aJlqj8u2O+Tscn06V1kFhHpmjJMMGRwc4xXOabZG5vYlA6mtrW5HitmjDfKp24r0DkOevZvNmY45J6ehpkFx5LAKc54xUErmUn1FIhAkGeRnPHFAFq4mHA\\/MgYqqCW46fhzSyMHbKjj2NXIrMSxk4yxPXrQBTht2mYbRk1rxadIsIYr+BpdJtxDcEt0Heta6uwI8gcYwOelAHPpGkbnJwRyB6Ul3eSEbQ34VHesGl3KCGx64p9pps93gqCQOS2OKAFsYZZnZ1J6cse1Q3U0gdkMhcA\\/WtKeA2tqY42w38eD+fFY8qEsdwye2KAJ7EJvLyEcdiKsS3MYTIAzis2MbWwe57VahsZrl8Ipz3PpQAyHa9wNx2qT8xx2rUury2S22QYCgY4FQrpDxhmZcsPeqjwKcKeG9KAEt7lhc5RdzDpVi6tHY75CTIwzg9q1NK0yO1Xz5156qM0s81vK7Nswc9QetAGZpumSX93FbrjMrBRgZr9DPg74Msvht8MLWwQj7bdAS3D9yT2zXy7+zX8PbTxL4q\\/tK+\\/48bTDgEcM2eBX1N451+Pw54Pvrpgpt4o9ynODx\\/kVhUd3yo1hpqfPf7VfxMaa6Tw5aSgxQktMQf4uw\\/I\\/rXy+zBz1BOc4FbPizWZtb1e5upZGkeR2YljnqaxEXkY457VrFWVjNu7LvmhLfYhKn+dQTSliec4pNxw\\/GcU3GByOh9aoQ4MSCP8AJqSCJJZFVmwOp\\/Kq6jkjPHtUsb7HDY6HNAF+KxgiZurAfjWrbmSNAIo0iU5y7HpWMl+w+VF9Txz\\/AJ61LGLu7KYBHuxoA73xQv2P4faarOJHn3SMwHuQK8w2jcSGP5V3\\/j\\/UHk0XSrPyvJjghjXls7jjJP515+Rgd8elAHv37HVqH8falcFgvk2EmD9cCvtb4N6qr+H7TDhsrjjpxXwH+zdr39k\\/EGK3dgiXsbQnjocZH8hX2X8F7421pfabIdr2kxUZ646jFc9RbmsGfS1hKSg78etXnhDLk8E9u1c14auxcRqCSQRya6psEAE5\\/H2rlOg53W9LS7hZSgIOOtfPHxc+HwubKcBN8ZU8NX1Bc26upAGF7YHSuM8ReHUvI3LruJHGeeKafKyWuZH5a+P\\/AAxJo9xJGyssYY7f6Yrn9A8b634UlDWF9LDsOdhbKn6ivtT4v\\/CG2v0ncQ75CflP9a+MPHHhK58M37q6Hy8nnFd0ZKSOVqx6Fp37TN7NEiappySzRrhbm2cxuP0o8QftK6rdQeTao6oQMB2I59z3rw+Rdr+oz17VLIpJTuDzVcqC5c1bXL7W9QkurqZ3mfqQxxj0pNE16+8Patb6jp9w9tdQOGWRD6evt14qogyRntx1pGTAwOPWiwj608AftI6L4ht7Cw1SIaZq8jbHkY5hlJ+6Qf4ewwTS+NtG1HTPEUHirwzN9m1mzbeNvCzL\\/dbH6H3xXyrpE9raapaS3sLXNokqtLCj7S6gjIB7ZHGa+n5Pj54Ku9Xt7awtZtL0q5iRY4ZnMn2f5QpV2PJ6dai1noVc9n8DfEfw78cdHjtbhl03XoWJuNMdtj5HUKTyVPoP\\/rV5l4\\/\\/AGUbbWrq7vbM\\/wBh3eA7bCptpZGJ+VFJBU8Z49cAVka94Gg1iddR0+VrW8A3Q31o+HX056MPr+dbuhfGf4heFojY63Z2njCyRBEGlIhmKD1Pfj3NZ8rT90u6e541ffADx\\/o1wY47MTrn76ybB09HANXdH\\/Z38fa7Osd0kenwH70jNvIHriMHNfY3wb1e3+LENzLH4f1Dw1BbnYTLMVVm67UC4z716k3wz01MC5Ml1ERgrLIWGfcEmpdVrRlKCPlf4Y\\/s66D4MuxqMhfWNVh5jllC7Ub\\/AGVGVTHqxJHZQa3fFXj\\/AAzaT4da21DUlISZxJ+6tI2zuYt\\/E3H1J7dq9S+JHwJ1\\/wATsi6T4iNjpSJtfTYIvKaQf3RKCcD8K8x1fw5pHwR0ea61e2NhbRvuGELF5MdQTkuxwfmJ\\/KhO+oWtsJoNvovwm8J3WtahI0Vvbh5WkmfdLI7Hkn1djwB2GBXxL8S\\/Ht18SPGmo67dqU899sUQORHGOFX8Bj8a6D4x\\/GPUfidquwB7HRYG\\/cWe7nP99z3b+VebhTng7T6ZreMbamTd9EIxIU+h55p+evOaaTgcdaFwN3pjp+NWSe8\\/s6eIo\\/DvhXxPcOyqd8ZA7n5WrxPxBfHUtcvrs43TTMxx7mr2k+I5dK8O3tjFkG4cMxHQgDisFiXOck59aVtbjLOnjdMiFcljivZ\\/BWqS2dvHBAm5zwqjjvXjeknddoSO\\/UfSvffhhp6RyC5mUs+PkXHOaAR7B4F0CPS1S7nHnX0oDM2P9WPQV7j4UivLxI\\/KCjPU5rzPwT4R1nWnilFs0cDEESScAj6V9C+F\\/CVzpMEaIVkGOQzc5rkqM6Io1tI8OukaSTXDbuDtTpXSwjyRjg44pthDLsw4AIHQd6nWNgdrdefaskW2SxOXTIOR7dqyPE+orpulXUrsFVELEn6Vsx8R4PY9cYrxn9p3xYvhf4Za7ciTZIINikEAktxV9iT8w\\/HOrDVfHWtXtwjN9quZHGxucFzVX\\/hFrSRJHt7mVSMcOnTPvWPqlzJ9ulZslS3BB6irdnrUcCkRrJGeuVk612rRHKTnw9qtmEkglSdTk4DdD6YNVnnv7GX99bSIQckAEc1d\\/wCEibyok8w5XJBZevetD+2zLCrIyyBzlhnnjrwaYGOviLd5qyAFHG3DDJz\\/AJNW11e1n0yW2YlS2MOpzRfzWV2pMtr5ZJyDjnHbpWZfaZbwwK8LFT6Z96AM6Qi3nIRty+oNdDouoJtG5skMCQpwQAa52JGjlL9QvJ962NCubOR5Fu0DszBR2IGeTmgDR+IUUJNlPbggMhLZ6k+9cnBdPFE4\\/hIxmuw8Q20Nx5fkMDCMqoc8j2964ogxsUK9DggUAdD4a1CW2uwI8FjhVLHg5rvbOzhtgZLiBYpsk5AyprymykxdRgHbgjJNehSX93NokkVt\\/pJkPy47Z9KAI\\/EOnI92hRlKSjqeRXB3Nm9tdyIcKA2B+fFdRHqP2u3jgaPbLGduD1FN1vT\\/AD4Wm8vDouOtAHPpCAo+br60VnMXLHacjNFAH6stIWPU01yc8gH3IJpSWU8sT+FJtMxDA4x\\/eFeedYbt33SPfBzQdqjnH\\/AqSRWyOn4Jj+dLGRzkE+lADS5Q\\/wAJ+jVJucDnIHsaQs5++px22nP9KbtlHUYoAsK2QN8jEeivSmbAG5jjt81QCNv4M579TTsnoyn8qALJkV1GGOaEnbOM\\/lVfp1BYemKU\\/KMht3+zjpQBbEjn77Ap2HQ\\/pTVkUPx09zmo4ic5xt98YqZF3tjcT7NgigCQuDFkZ\\/A01JGyORt9D1oztbZkcds4pdoduX2Z7nkUABcF8HAH1z\\/OnF1QZIBjHU8\\/\\/qpohCnht\\/8AtDpSOiYOVy3ryaAJo50MfyY2\\/WgzDG0Dr7kmoURcYwAfXbQFCsFyefQUATKWUHPA\\/wBomhWUgkPjHbFQyx7WGCc4pyA4OcZ7c5pWAd5+ccDPuc0srsCpIwPoR\\/WmEYHzSc9uKZu3D5izHtimBYS5HOMAe3\\/6qDMh6Sn8gf5VSCuOx\\/PFSEB8bwGx0zQO5Y+1beuP1NLKwUAq+0nr1qmJWbrk49TTjISMIMeuOaBFpiQgJJHuBilEoIA3H9aovM7DCtk+gFOBAALZyeuBmgdy39oz8oA4\\/iz1pzT\\/ACAbsZqDewj+\\/kdhmmmTcAMce9KwXLAk+Y5Ofp3qx5vlpgnBIFZyuQeD05yecUplJOCc4HPaiwXNKG5KSqR69e9Zf7SWlt4m+BevQxg5S2MuB\\/EVBNSrJtKk8EelbN95eseFLyxmO9ZIGQqfcEf1prR3E9UflnoenfZ71h\\/GBwO9YWrXTtLPE55BJ59a6\\/xBpdxo3i6+tGUxm3mePbjoATj9K4bWIz9ulJOBuPSvQOQoRKGfDcckcU6VO4454qUQhIwT98mq7sxx6g9qAJrK28wksDtB5rRNwIIwgHA71n2140GMdD1461NPLkIuM\\/yoAla8JdVBzn0qxeysCIwTzg9elZ6YglVn5A9KtyuLu6LrkFuuO1ADbyycxKwBz1xV\\/TJZ7XT2LcMeMUTXEaqA3YVSutUJIiQYUGgCvdzsXbqc81W2uwGASOnvTrtsvnBHue1WrAjaS2MKaAIrDyhKEkU9c1stfCCPy7dQo6k1ms8IBOOeearGdnlChsDPftQBpxXkspxkH196qRkpe7niyD2NLZSLFdbWIx0+lX5byG0G4gNIRye1ADL67ik5JIPZR0qjZy+beKin5WYAcVWSczTOTzkE49K7f4L+F08V\\/ECwt5lBtUYyOD3AGf6Ck3YD6y+FvhuPwP4HtojCHuXUTSgDnJHQ\\/nXmv7SXjpk0OHTYZCBO4eSHPIA55\\/SvW9Z1hG09zpfyXUIwY26Nj0r4\\/wDjD4kuNe8TzPcRiKZQIiB6jviso6u5beh5\\/JlmyQcHnmmINvXg9qegYAcZpmPmxxu9Sa2IAqW5HTHNNJLA8ZI9BSrlm7jPWrMbKijBwfWgCGFSMkjgilDfvQOPriiSTIPYGmqeQQOT3zQBq2qbR8kYPpxV23cvOikhSSBjOSTWNDNNMNseSo61p6Jpck2qWgZwMzJ0+tAHRfFGJ7Q2FuxBZIlG3uOB1rg2Puev6V2nxRlI1xo2kDlSw4GCPY1xir1HcGgDY8GawdC8VaXfDhYZ0Yn8a+6PDt2lj8Q\\/PgJa1vo0kGG4\\/wA81+fpyNpzz3NfWvwX8Zt4g8P6JdPlp7GT7JISe3G39KzmtCo7n2x4UvVNwiKQowMt3NehQ7PKBIAJ6GvKvAyi4eGUDhlBJFekm7SNVzgHtiuLY6iwwVm4APOcmq13arJGRtB69qfBP5nzEgY7U25uRHlQRuPGKGCOB8VeG47uN12Ddyc9K+Ufjj8L1ntJ28vIAYg4\\/wA96+2LpVnTlN5HpzXmHj\\/wxFfWsyGIDKkEVcJcrFJXR+U+rWEmmX8tu45U4qCRcBCO4AzjmvVP2g\\/Br+GfE5kVNsEnKkDvzXlO7hcHgV2p3OXYkQZQjr9aXHGCOPUcmliwq5OSPbrTyAeD0NMREqjgNyuOoprDOe2KlwMZzgH88UjjHTr7GgDo\\/CPxL1zwXOrWd60luDk205LxHp2zx+FeoaZ+0XY3iBNX0p7diOZLZg65\\/wB09Pzrwkgjnoev60m0jJPOD2FKyA\\/Tf9nLxrpus+BrW40qVXhLuGGNrK245yOx6V7pZ3q3CfOd3HOTX5M\\/Bj4u6p8KvEUVxbTudNkcC6tQflde5x6jsa\\/SHwL42i17SrXUYG32dxbidHHIKkZ\\/P2rkqQs7nTCV1Y9Zt5gBlTx0x0qDVtKsNcspbS\\/s4L22kUh4biJZEYHg5B61i6Beed+9kkBXqB29q1hqkZkKx5xWJpY+Tvjr+wfpeuRXWreBCLDUcb\\/7JdgIJT3CE\\/cPXgkj6V8OeKvAmt+CtXn07WtPuNPvIWIaK4Qgn3HqD6iv2WN8h6Nn3\\/z+Nc34y+HHhT4mRQweJtFg1WKAny2l3K6E+jKQRx2zW0arW5k4X2PxuaJvTB\\/ummEnoOw9a\\/RL4j\\/8E9vD2vSNceEtTbRXbJNreZmj9gHzuX8c147qn\\/BO\\/wAeQhza6hpFxjp++ZM\\/mtdCqRZi4tHyaW4BoHTg19GD9g\\/4px3sdu2n2Yic\\/wDHyLxPLXHrzn9K9E0H\\/gmzr11Cjap4psLMkZIt7d5sH05K0OcV1Dll2PlHwRoc\\/iDxBb2VtG0ssjYAQZNfe\\/wT+BDadDFcX67mxkJIAcZ9q6r4M\\/sWaL8K5nupNRbV9RY\\/LcNB5e0dMAbj7175p3heOwRAGLAD0xisZzvpE1hG2rM7SPDUVpEoVPlAACgcV0VtYpEBsHC9qkW2NuB049RU8QUsQeW9PWsUtS2x0aBWx0J6UsiZOCMD61JtyeDz9aX765GQB61pYkrs+xGyeOuc18H\\/ALfXj8rpVto0Tjfd3G4pnkog\\/wASK+2\\/EOo\\/Y9PmbcFbBX6V+UX7V\\/jMeLvizfxQSebaWGIEx6gfN+uacFeQpaRPLVeK7tNkqlXjbO5TjIpi6fbFsJK4bn3FVPP3KxC4PqfWo0lVWywBAPO3iuswNKbRghQwTiUH14Oahe0u4MN5ZdexXmmwXeGJDEN2ycirsF2w4Do2eMMMYoAoR3k0DMTu56g06TUPtaFXQbs53KOat3Mm9yrKCobJz\\/Ks2RYnnxHlATj2FADXYhOhJ+uaiH7pweRz2qR1w+3sp49qJ41WP\\/a6fT3oA2oJ\\/tVqgZ8iIcZNY18266ckYz6VpaZ5ixuxGVx0IrJm5mYnJ5oAmskV5+u1iODXQ6HrdzZalDb\\/AHirYwD+lcsh5yOCPQ1bsJCl0G7+vf8Az1oA6HxDayWXiAOilJJiHwfWujS3luLR4yFMrDoG61h6oRqfkTM+5wuAT\\/hVG31021yRubegwKAK9xarHM6sgVgeQcUVYnjN9IZ8kF+Tg4ooA\\/UhLJgOV5pG04uwJXHrzXQtYjOec+vWgwopxIVDdge9ebc7LGB\\/ZwJ4Gfz\\/AMKebJxjJQfWtxrISEHbtx7U2SzGRkAn3ouFjDl04xgY3c+vFK9tvAAQcepxW29scDcv60SWrADAU\\/UUXGYZs8gbVGe+DSS2qKi85PfHat1LPP3l3j0Aoe0BAx8n40XFYwktmJ43j60xLc72yhP1X\\/8AXXQNB5YBywz3pqxjcSRjPf1p3CxifZwOe\\/pyP6UzyV3nh2PoAP51u\\/Z1BJAAPsaPsq5zz9SP\\/rUrhYwzASPlQhvUkH+VKYJfLPH4ZrZMO5tuD9QcUC0DfIVJz6n+tO4zESIqMspB9M04x7hwG3fga1\\/svlvt2bV9etDQEE7QT7jrSAx\\/LdWwSQP7pAFBTac7iuOxNaj25OdykN7mmrZR7fmUbv72aaYGdkPyWXPvQVI\\/hY+68VoLbGJSqcg+9MNs4HUD6DH9aLk2KBgZvvNn680eUYhgKefXmryRNzvYZ7E0zyXXrJuz6\\/8A1qLhYp7DHwQDn+7xSBdnbb9DirMkCqRuI9sLUjQAj5QU\\/wB7v+tFwKLljjCq35Cotu0+n+8P8KtNDu+6+KcsYP3g2PXBpgUslDkFT\\/u\\/\\/XpGdgPlHP1zVlbVdx4x9KYYtzEZPB6EUBYi8zKAlW3e\\/FRsxwBVgxFSRuGPaq0w4woJB9KAF8wq3XdT\\/NJyTgA1XOQRkE4PY0ZLD8KALSyB1wOBn8a2tElxcBHIKt13DisOIcEjn8c\\/hV+2Vn+bPNJgj5w\\/bG+E66RdJ4y0eJirDbdwouQfR+K+L7+dZ52YZOfXsa\\/W++0u28SaXPaXqiZJE8sqx7V+Y\\/x1+Hj\\/AA6+IWqaasJisjIZLb\\/cPOPwziuqlK+jMakbO5575h3jBzTGyCDn6k0nrgHPrTmPGcYPqK3MhVTfk9hyKmB81kI7YqSxj3Jg\\/wAVSRQBLvPbsCeaANGe1SeFFJGSKda2yW67pHHfAqndTbiOSMcD8KoXN3JLtVzx0BPpQBZvpQxJHQkgc1QcEDdjJB7d6knbIyxyccE1Lp6JJkEemKAK8rmYgnrjqKlT93CGOcnvVk2sSc8j\\/PSqrzA4GOe4oAikk3Ee\\/pRGNjhuTjvTC5Bzz9a2tLhglt8P1FAFSyjM0pOCQOc066ZA5GDz1BHWrchhsLVth57j+lZk0xmXdxkmgCMqS2V4yO1e6fs86fBpllf6xcRu05IihGO3GTXhtm652nHPFe9eDNUOmeE7SG2AlJy7L6Z6Gkxo7XxHratBJNDcG3MYJ64IOD1\\/SvmDxNfyX2qyzyvvldy7MO5Ney+OdXnl8PzTmEZIww7jI6+9eD3blp23ZJFJAy4ZFS0A7nis44bJJ4\\/nUylplx2XpURU7s9cVQhv3cg05WO0j8Bn0pm0k\\/N+VPAKqTz9AaAE6DJOKfAR5gB5\\/rURI9hTlwnPT6UAaMLxRbiQR3wD1rX8JSxz+JdOUkKGmQFnPA56mudjTewLHAxXS+D7WJNdtpGG8pluT7UAM+IEgm8S3TBlYb2+6eOtc0MHpzz6961vEbLJqtw4BALHrx+FZgyMA8AmgACMx6ZA7mvWv2dda+z69faQzcXsRaMFv+Wi8jFeWRDKEA4HPWtHwlr8nhnxVp+qR43QSqzZ6EZ5FJjR+mXwd8WxS6Ukc77ZoQY5AT3Fdrc+JxcXJKvkY4UH+lfK2l+JpIZFv7KTzLS+jWSMD3\\/rXRad8Smt7t7e6LxkhcFgBnk\\/41yunrc3Uz6OtfGJCdvVeeamsddGoy7hIQTxn0rx7T9chvBG8c5MoJGM8AYruvCkyhCMg89u3+eaxasaJ3PS4kM0Kgdx1J6e1Z2r6OJIGG0MxBwCKt6fdo2BgBcdhnFa7FZV4wTjqKkZ8e\\/tI\\/AHW\\/HXh6eTS7KKS8iIkiTdtZ8Z4Ga+N9W+CHjbQbYz6j4evbeIE53Rn5cdc1+wU1ukjcDdntUNzpEc8ZUxjaRz71tGq46Gbgmfivc2NxY5E1vJF2y4I5qvuDbuB9c1+jv7QP7OvhPxVY3VybRdP1VvmS7gJB3YONw6GvkrSP2Q\\/iRrV3KkOlRw2gbal3czKiSL2YDk4\\/CulTTVzFxaPFfO2jATpz+NTWsEt5KI44ZJJGwAqLuJPsBX1fo3\\/BPvWp4kfUvElrav1ZYLdpQPxLD+VfRHwf8A2cPDPwogN2xbUtUwMXlxxs9lUcD+dS6sVsNQbPijwF+yv438aosz6edJsyM+ffAoxHsuN354r2PSP2HdLsoBJq+sXdxJgFkt1WNffqCa+sNT8RwWOERdzck7RzXB6\\/40gDl\\/ODKOoUcisvaSlsackVueRSfsyeB9DXizedgP+W0uSP6Vp+HPFOl\\/DFRpkLrFppkz5bSnCepAzx9KxPG\\/xIuCs8gYKqjG7jtXiN5q\\/wDaN+91fP50qt8ig8KDz+daqPMtTNtJ6H6Aab4ghudPjltJPMgdco4bOcis7V\\/GT2MkaBxknJPPSvl\\/4YfGweHohp92xNmM7Hxnb6\\/hzXpF541s9aiM8c6srjbGc5BHrWPs7M05z1nSviAl0wDsOeeTXVWfi2E\\/8tF9znrXzfpurbC7OTGRgY3Z\\/GtyHxKdoZST6Env9KHAakfSEPii3cDEgUY6A\\/yq0niCN8AYKn3r58sfE0itGGkIBPUV0en+LJYWG8sIz1J6Y71m4tFKVz26C9WXoc9+K1LaVSikgYI7V5lp3iaOSPzFYhAMk4rptN1lVCqzfP1K+lSnYq1zrlYDjI57VLGwAx+hrBl1RYlWRmHHJ+nrVV\\/EUSjJPsOevOKvmIsdNMyMjDp\\/Ws+S68p8jB561mjXreaMtv3bR16ADvWXqviGCFGyVw2RkHnH+f5UnIdjr0vFKltw9atxOGi4\\/DFeZQeKo48KZQVIzkdO\\/wD9augtPFdubQtkggZpqVgaPGf2u\\/i2nw28AXbRSqmp3itBbLnDbmGC2PYc1+W0tzJNO80rNJKxJZnOSSe9e+fto\\/FAfED4pSWcExe00hWtgpXgS7jvIP5D8K8CeJyFbBwwzmuqmrK5zzd2WBKuR+7XAGeR2p7Jbyvwnl467TiquJMHKHpx7UnnHbyMjvWpBObFN+0ORnmkayZcLvz6mhbpMDcpJ9RUnnxMf4sH3oAhlEyZOcHuQarbypPceueaszyIV+VjjJPNVx6qfm9aAHr1+YHPqan8kTQhRgY71AgLEdWHt61oxNGCFHMuPyoAsWWoeVC0ZwF24JFYTHcxb15xVmUiORlBOP5VXYckZyTQAn8PIIz3605GAkU9KZg4PGVpy\\/L3O4HigDatNRSBFLcuB0NN1aFGh8+NNuTgmskvuIIyG7\\/5\\/GtNJhJppjc9\\/wA6AC3nPlLkUUzzGhCrhunbFFAH7JLENvzGgQrg45H0oRNyEjr6nihELcsoPvmvMO0Y8WSMKAPTFARewCfj1qV228BtvsDnNEQ3A5Kj2FADHhAxx+XFRxRqxPB\\/4DUkpZMdVz6ikBEg6gEdytAAYh2wP97NMMBb\\/a\\/A1YRCTwdvuvNMcEfeG760AR+Tv4Zzx7UxoAf4Bx39atCJpe\\/H+yaaY16EdO+KAKT2yDkdfccU1YOe4988VfKoB8gOfejYFXcVIPrgYoAovFlSvG3+9nmmrAwHHT1JNXGIYdMD1oRBjgA\\/lmgCoV28MCfcYxSeWDzlQPrV9sGPYcken\\/16idUCFSAo9CaAKLW4L5zn\\/azmmPbjOS+T7girgRcYUj2xSCPJG5gPUf5NAFD7IrguWPHYGlTAUgA4960TbK6koRt+lMjhXaRtY++f\\/rUAZ6xAg7gKhe2IK7SD68YrTNmgxhc\\/QUfZ152AD1oAziACNzMD7U6UCXGBjHoDV5bQc7gx+pqIIrZ+Qt\\/wL\\/61AGatugPyqCfalNsHHz7WA6AAjH61daH02j8aSaEMoCjHrxQBnPAOysfYGo2t1Kj5efcVpCJeyFD3IPWoJISzEHIXPBxTuBnyW67SAFB9QOfxqjJH85A5+tbn2Qjnse5WoJbPAyQaLisYq2\\/zE5I4xz3qYRBgB3HYVa+zkYJ4444p\\/wBmH3uoHb\\/P1p3CxWjiKHaQcZq\\/BE2MgfQYzT4rcEKOOucitGG0wAQMZ9qVwQadFiRQTwTya8S\\/bP8Ag0nir4fHW7GIvqGnHzmKqMsm07h\\/X8K98hgOBjGBzV\\/UbKPWtFuLG4TfFLE0bKRngjFOLs7g1dWPxijty0hVvlPTP4VHJBsYjtjOPevUvj58LZ\\/hX47vNPdW+zTN5tq\\/qpPI\\/CvLixJYNXoJ3VzkatoOjdYY8DqeeKZJcsM8ADGM1E+5SeRn3oGHAOeT2xTETwzNK3JOaY43g7cn6VGoKtkZx705JCHyD+JoAY5LDaxxgYqxZEqjHoMVG\\/JJYZNIJdoGM47YoAnklZvUjt6VUJzIDgnnt0qyXyvHFRFd4JGD7CgCNzk5wAemBVq2kIi9D1qFYGPGcCn7\\/JxySOme1ADrgtIMZJB55qJfkXYw6d6d5gIyBgdsUoVGXJIGCOnagBlnEbi6hjGQXYDj3r25FXSoEiSRUdIwAF6HgeleS+HtNN5qsEcPMpYYX3r0mWK4tsJeRSnB70gMXx3qj\\/YUg858seVB4xXnaL5khzxjjPrXV+Nr6C6aFYySyZyecVycBy\\/BwM5zQBPhYt3Tnv61C5CtkcD0FOYbzjv0OaTASM7gc8Y4pgM34HPHoTTS+7IAGen9Kdj5SDjFN2AHj8jQAgUZxnFPiQyNk4H1pF+8e49RUokVRgYJz1HrQA\\/zwuRgE\\/Suk8CXZbWFjCBnKMAWOAOK5QDc\\/PI68Cuo8EsDrDr9zELnt0xzQBka07NqlyHOW3kHB4461R2kA9AKs6hhr6ZiAMuSD+NV9uG5PI5wDyKAJGjZ4VYYAzjrzTGhaMks249cd6es2EGclQfpUZdepBx7mgD2\\/wCBPj3zY4vD14RuiJe2djz2yvP419M6j4DsvFmko6LslAPzIOQa\\/Puwv5NPvIri3cpKjb1YdjX6Kfs3+J4\\/H\\/g6z1Dd+\\/QmG4XphgP6isammqNIaux5BqDa38Prwpue6tVfG4A5+v6V6h4B+J9teOI3kAlzkqzevtXXfErwtDeqwCc+u3\\/69fPXiHQ5dDvhd25a3kX5lPZsVKtNaj+E+v8AQPE6SRrhww7HrXbafqnmKVD7uhPPNfKnw78cm\\/tkhnYR3Cn5lJ78dPb\\/ABr23SvEkcaIysdzLu4PX68VhKLRspJnqcEo27i3HPfmpnkBjIxgGuT0rXluIEYEshPbuadqfiJbSNcfe67c+1ZlFK+0caz4gM1381lbgFUYZDv2\\/AVaub2JC0a\\/Lt444rj9S8bzEOq\\/cHbvUXhWafxbqhjRzDFHh5HP8Iz0Huaqwro7GXVd8LKmGYDI21zOu6zcW9q4MTqOSeDzXV61qlh4asiltEskmeVJ+ZvfNc1D8SdLvZ3gkHlv91o36g0khnkHi3x1JYRtMGB2xseTj8K8R8S\\/FFJruSVZMpIuRtbJBr6y8TfDvwz47tXjngClv+WkDFGH5Gvnzx1+xrqFu7TeHtZSeHqlvfDDD23Dg9e4FdMZRMJKR4LrfjSa9iZd4K4\\/M\\/nXJal4njhZgG3N6L\\/n1ra+IHwq8ZeCZiNU0maCDOPtCEPGc\\/7SkgfjiuSs\\/DU11Iu4EdyT2rdNdDIrXfiS8ucrGxhXvtJycepp+g+LNY8Pzb7G6lVc8xuxZG+orrtK+HqyAGQHPbI4rp7bwDY2sQZ4wx6e3amBN4O+NE12yQX9u8Up+UToSU\\/HvXrOm6xHewiaKTdgZ2q3NeQRaXb6cW2xqJDzyOnNTDxJLpXzwybCp7DANS9Que\\/6NqweVWlwFU9a7O51JWgSKGMSN0J6896+atH+L1lBtjvv3L9mX7p9D0r1TTPHumNYxSxXQl\\/djDKe\\/c\\/nWbiaJnpen+JJbN1WQeXBGN7sc\\/gP8+lbunfEu3unctKP3as2c9q8P174kwTWEdokokdvmfb\\/ACrDs\\/EsdlEyuwKEh3A5zjnaPqQPyqfZ33HzWPoTVvH7vZIm9455Bgq54zxzx9aqR+P5RbrufftByu\\/pXisnjmMRPNczpAhBOGIGOlcnqnxe0+1hkhtpXmY91yf1\\/Gj2Yuc+iNT+JqWXyifAAwCHyBXB6l8a5FkZTMNvLY3fdwOnXoeK8FvvGsmoQNIzyPKxykYXAHTrXN3FxeTyMzblycn61apoTmz6b0r4sHUryCJJNw4U4J57\\/wCFeoa74+i8EfC\\/VfEl22RDCdiZ++\\/RQP8AgRr59+B3wy1vxJcQ3UkH2axUhjNKcDGOw9eap\\/ti\\/E62toLP4f6QQUtCJrxweM7cqn65\\/KpcU5WRSbSuz5a1bUZdZ1a5vrg7prmVpXPuxyf501DtTbuXHfnpTIkWZiCdhx35qQWIxw4GOoroMQMzZGMe\\/NPEu6I5UMTyDxUbWbg5LgkDpUYhdB+vBoAsxiB1w6gEHrgjNNe2hJyrEDrVfLoDweO3rTRISNuMCgA2neQD3wD1pOA2BwOgx1pznG0DknpTGGBwOfUdTQBJbt+8BPrmr1ud9y0oIPNZqEDBOPqKt2mQ4Pbrj1oAlvo1SQt3Y\\/rVGT5mz1z1\\/OrF2wY5Axj+dVW6Enj60AIw98UYx7\\/SgbhkEcCgEAnnIxjPpQA7nHXaTVi2m8tlLDK8ZBqqGyuOvNStKSgXGR0oAvmZZSWIIz2FFVY5cIMqfzxRQB+zZbLYAJH+zxT1j6HBGPWq5uiHC4Vgf4sEmn\\/atoIzjPYqa8w7SV\\/3hBQkj2NOI2\\/d2CqyT9ssvsopzyeXwQefXn+QoAnb58bhJx7U0kD7w2iqobOc8\\/nTpJhgckfQ0AWVAQ5XBz\\/dH\\/1qbtyxJ69eKgaR4gGU5z6mlE4xls5PoKALKOqn5owfqc\\/1qNZVZyCgUf7tM84N1VnHs2KRJd7EJnPoDyKALDNxgqCtNBw2SQF9AuCKiY\\/LyCT6Cm\\/aT9wbRjtjJoAsByX43bfWhvvcAlvcVCJtoyDg+tPSc8MSSPY0AH3m+br6gcUvl4+ZRk+pFRuxkbKE59DTCXU4cg+oK\\/1oAlYsHycA+wwKcWVgQ33j24pse0pkDDeoPH5UrYwQxz+FAAsYVSRwPQ5zSA7hn5h7E0sKjYSMEZ74oZm7AN7igCJiHPPGO2etOCCToAuP739KbIq5HmcHttpUZnByOnYHFACMMY4BPuKRVYg7kDe4GKdsLAkjZ7LzQjc8up\\/CgCIwpxlsfXApn3P72PyqdF253Ae2M0eUrf3T7NigCsI85KjafdajKkHuD6ngVYO5ehApGfH8IY980AVjBn7zB89sHA\\/Go5LYEdOe9WYyWd8Nj\\/Z5wKV1yuMZ9c0AZEsI5I609UXvgE+tWpIRIo45pRDkqG54z+NAEVuhZgehB71pQxdO3H5VWiXnIHGc5zmtKCMHsSDxQBJChHr65q\\/AgVjjjI6dqhjABII5PcVaiXkH09aAPA\\/2uPg0PiN4KkurKDfqlkvmQlRknplfx5r8z9Rs3s7mSOSMxyIxVkcYwR1FftlLapdQtG65VhtOa+Av2uf2Z7\\/S9Wu\\/E\\/h21NxYzMZbi3iHzIepYDv9K6aU7aMxnHqj5AUbyAeR60NGYzjaeKlBKsVYFWU9DxinSSBsk8nvXUYDYotynjgUilEbJGCOKPN+TAXnpULyZ5OAfSgBZWBIOfxphJXJ7HpntSfUE9gKcR14755oAUcDjkn8qWOT2x60+PDqwPOPxpHYJg0ALJKQR1OfTtUT5ILc\\/WleTn1zTd3GT370APyNmPz9qIwWYrwv0pUQMnv0zThiNuDk\\/lQBveC4mOqbkZl8tdwZR0PrXbz6rO7Lul+0Mncn+dcv4Cit\\/KupJbowPgBMDIY1pSyCJzuJVfXHDUAcz4qvlv7xpEj8sHg46fWsKA7Bux+ArR1ecTXksiDapPA71mFyuAenrQBMXDKf6VZSGN4FPBXHIqlEOTk5HWrAyI+CSR0zQBFMFRhtxUJxnk\\/gKViSvv1pCozyMZPegBDnLDGPT3p\\/PIGQeo9KZ15AxinFtuMdfXFACh8E9z6eldD4KV31KaRfvJA+FzjORiubz1yRz3xXUeA5UF9dmRTKGtnVUBIznjrjtQBiXQDTSbjwCTnrUR6dMD1xzUl0As8ijghjwf5UwHnngjPegBD856HA5FJhVGAuQfxocEKMH64qMBicZx2wRQBKoGzG3FfVH7D\\/AI\\/h0bUNZ0O5nWMz7Z4EY\\/eIyGA\\/DFfKvzKhAOat6Lq954e1O3v7KdoLqBw6OvUGpkuZWGnZ3P1B1\\/XbeXJJXB5OO1eOeMprS6ZwroAR2P8AOvF\\/Dfxi8R+M7OVIoWuLm2jBmWJgGK5+8Afw6VieJviHqUylZbaa3OBkMuCcVlGFi3K528s7WNwJbdykig8g4zXqPgr4jSXMSQTOiXCEA5bgj1FfJEvjO8aR8swj6AE5xVvTvHV1BdJcJIVljYEEVo43JTsfopoHiFjbFlO5ScfL6\\/4Vd1LUYMEvITn+LGfwr5w+EPxntdaWO0upPIu1B+Rhw3HUf4V6PqfjeziikEkwAiXccjrnIH9a5XCzN1LQd4n8Ux2Ym+zjEi\\/xuwAarvwy+I9tpXhrUb24mWN3uCm44PRR\\/j+pr5x+KvxLW6kC2TlR0BA+teSnxjq9q7PFdyRq3LpnKt9R9K29ndWMubW59oXXxMa8vnmkbGfuhn5xWXq2v2GrosjPsnXlXUgHNfI9t8UbiKcCWfJHBYDIPSu28PeO5btg7OJUXoQQapQtsHOfR\\/hXxvcabMsU0nOccnqK9XsvFyXMCc5YjJ\\/GvjrTPFkt1qyyCTqQM9eK9Y0fxzbpEqyvyfu+prOUClI9uuxa6nEUnjRkYYIIyK8v1\\/8AZ78OazeSXEEb2Esh3Yt8Bc\\/7uP5Va0\\/x1ZXThBMTgZbOa63StdhnIIYMBj8PSs7SjsXozyPWPgJqOkxu9lPDcjjCuCp\\/wrz\\/AF3wj4g0gHdpFyy55aJd44OO3tX2FHfQypsbDZ5B61TvdNtrmLIUA5\\/Gmqj6icOx+fviTVLuyc+dZzQuB\\/y0jK4\\/MVy0UOteJpWj0\\/T5rhWPVIyV\\/PpX6D6z4Ns9RhZZYEkUjBDqCK5Wb4fRWMHl2kQijXgJGMAfhWyqJkcjPkOx+BPiC8VZL27t7IEZKElmH1wMVaX4P3OlvkazcoSMfuRtB\\/WvqKfwfIVAX5W287hnNUj4Ca44KqzdzjtT5xcp8+W3h64sD5aTSXTL0eXk\\/hxWhB4W1S\\/3KN6qeSyg8e1fQel\\/CQtLueMHJ7+n+c12ukfDCK1RTIgAx24\\/SpdRAoXPkOX4U6hcsfMMh4HzODzQPhPMhGVZ8dOMcV9j3XgqFYgEHyrw3A5rmtQ8PRANtXDE52gcY70lUvsPksfK6eAriC8VGiYgnnH1r1r4V\\/CC21K\\/iurmISIGyI5AMcH\\/AOtXY6voFtbTRtGgVX5bHr\\/n+Veh\\/Du1Szt0MaqylucevHr9f50TnoEY6nV+JY7T4cfDPV9aaFEg0+zefZjAO1eB+JwK\\/JbxJ4gu\\/FWv32rXzb7y7lMsjc4yew\\/Sv0b\\/AG4viTF4Y+BTaKHDXuuypboF7IpDSH9APxr81EYFhldx9+1FFaXCo9bEkLiMkk8+tSLcIMfKc46VKVgwp2ZJ7E0skEDRgiPB7kE10GRA0wGdufXrSGUY+8cj8jT2WN8AJ0+tNMC5HHfmgBjSAE4PHuc5qPOW4\\/AUOCpK9yOp6U1RznIx6igCYrnbz09qawwfQ56ZpN+OpIx1psjFh3OR09aADByR6d\\/QVajIMJOdrZwPWqi5OACT61IhyvB6AdsYoAmmJ8hRjkcdagCjHfGKdJMcY4GfT1qMZwQfpQAdCBik2k+mRS4BxxnvSN8p\\/HpQAD1HPehSW64zijGeBxSrnr2HOaALcdlLKgYdD70VH9plwMyMPTiigD9jt43AhialSfAIYhSfUc1TVio2k8\\/X+lPVeMkM2O4O39K8w7Sw5II+bd9KVlYcD\\/x6qe\\/zSDnfju1SmQg9Nv8AWgCdoxDgrsYn0NR4Jzlf50rswxyV\\/rQSH6gH9aAHb3jGSDjp8oyaQMGJ3Y\\/A80RlSSMZ\\/HFNWMFjzn6GgCTBYAKOnoCaRSwPCAe5p3lPHgggfX\\/9VR7WJJyDQA7c2eX49A2f0phJDHkkehFSbCAO3uKA\\/YEkigAByg4P8hSLLztwMeu7JpTknn9RTcKD0BPpzmgBxcK2SST6DrQWVh94g+hODSMqlfunP+fWlEQKcEj2oAaHCOBliPzFK5Z2yuQPQdKNmD\\/X\\/IpwUdPlJ9xQA0yuJApV+fcYqVoyzDkj6GkRCAVZV57gUuzyCBkHP+zQA8KYxyQCfxpWXOBkHPXmlLqeicd8c0weS\\/8AqwR68df0oAdsVBwQfrURzxnA+pp\\/C9AV\\/A00SGX\\/AGsepzQAS5iwUAbPXjGKia4YDksv0xVny\\/UbfqMVA0KycbOh780AIfmHIAz3FAY5ww+X161KoCgZGB7EVGQwYnaCp6dM0ACn5uAMdutNYAZ45z24NPEmQRyMUijr7880AR7QQT39aXbhsdOMUoUo2R8oI55pw5PHp370AOQfkPSrcQyOMdvwqqgCnOPwqeKQAdMHGSKAL8b46cf1qynIHIzWfDIc8Hn36Vbjkxkbu9AF6MgBc1Df6fb6nbPDOqurDBDAU1JfmA6U8O24Z5PTNAHxb+0n+yPDqTT6z4bgW3vACzQRrhZOfYcGviLVtIvNEv5bK\\/tpLW6hba8co2sPzr9qpoYr0MkgBXGBmvn\\/APaB\\/Zi0j4kWX2uGBbfU0OROgwenQ10QqW0ZjKHVH5jOGIA9O9NycmvbvGf7Lfi3w2sskMKXsEeT8jANgegrxq\\/025064eG5heCdDgo64INdSaexha25X6sMfnTsAqW9+\\/pSgBl6YpoJz82RxxTAfG21Sen9aY5yR3pM5Bx19+9NLfMR3x64oAD90cdKB8p6ZFBDMowO\\/c09cFRxnj1oAF4zwR6ihsswOM57UjY3DPB9aQMTzgfUUAdz4Uj0+HSf9KkKSSOWG3pxWjdhYjtWUzWuew5ArOsLqG00+3guLYOAm4Hvk96Z9t8sO0Qyn9wigDl9SIW4kKnK5OMiqLc9+ParF3L5szNjGTkj8aq8DPUn270AT26h5Am3rnvVh4vJQ5GfbpVeF9jLkYI\\/nU9wXaLGevPNAFQkkkjHPApEH59KVRwc4\\/E0hbHbmgBz\\/kAeopoAO05x\\/WnsAAp\\/Ooi24YwOOg680AHJ9OPXtXZfDFN+r3pwGIs5No9+AP1rjiRwcV1nw9cJdag4HItmGc4AyRyf0oAwr5Nl3OuApDnIqHouQOvc0+7C\\/aJFUhhkjI6Go+cnnjHOeaAGS\\/Lg4655NMLMccDj2p8mSAMYxzUZJ4IwB1oAUOScEcmgZ6kFfajcARgZPrTNxXAHWgDrvhh4zPgrxjZ6iVDWvMUyk8FDwfy\\/pX1D4x0PSfEFol5aiF0dMo8ZB3cdQa+L92Dntn8q7nwd8T77w9pr6e8peAf6ssNwTPUfSk1d3GmdLr\\/hBIZJim3CtzgZFcRd2DQvkcHPQ9a1Z\\/HEt08hLbjKcnn+Q7Vl3F3PcYLcHpz0piCCeaxlV4pGjZOQyNgivY\\/Al5rfxB03UERWluLWFd0m\\/DScnHHr1rxIyhXBOS3cV3fwu+KC+Bp78SxyMlzGqDZj5WB4P05P50mNDde0a8sLpory2uI51PMciHI9s1zF\\/A8+Y1Rkx1yME16Vq3imPXW+1SlyJeQ7DFYVwlvc7cYY4wKEB53JpTqCSOgzwKbbveaZIHhdwOpArs20zbcGMAD0BP8AhTrzw88YUgKc9hTESeFfHUKYjuAIZh3Ydfxrop\\/FhUiRTgkZGD90egrhrjw4sik457HtTRpGo28YCNvReitz+ApWA9A0bxndW4aQOWMjZHuK9U8H\\/EeQO5lkO3ds\\/Svm6C4uYZS1wjBsYLA10Ft4nMK8bvlI+7xx\\/nNJxTGm0fXdj8QUwpa4Bz3z07VuWXj2KX5DIOB94nvXxvZ+MZ4Osr7R0wcZ+tdHp\\/j2VQxWXk44JrN00Wpn1zbeL4p3RfNUjOOTWnHqVvcyr+8QjH3d2K+Y9E8etLGP3hE\\/QNnvXU6H42H20Ca4OFGSazcC+Y+hhYwTKJCFwcDC1ah0W2RN4KEEcHFec6F47tnbElwwRgAeOMe9bGqeNLLTtPM63AaFiI8rwyt0GfUdKy5WXdHe2q2scZRcHimzatDbPt3L7EdfyNeOp8S4vKkcylH3EA9u+c+3FZ+p\\/Fixs4N08xbAPIPcDgjNPkbDnR6zf60rhtsnyjOOnP4VwGr+LrSylYySAlmIwTjj1\\/z7V4V4r+PN1dPJDpm9pSNpkcYA7fjVn4eeG7jx9dldYu7iVnO8eS5Qg568VqocquzNzvsdP4i+KWniQIJ1Lbs8sPl5rS0P4y2Wi2H2u7uYrexjwWmd+N3Uj3Pt7V4H+0\\/4W0v4V+L9M0vQri4llltPtNyLmTzNhZiFAP0BP414lfa1e6jGsVzctJEhysecKD6gVoopoi7TPQvj78aLz40+MDftvh0qzUwWNsxzhM53kf3m4J\\/CvNUjdTjaemMAUyPlvT6Vaa5PzbzzjqT3rRJJWJbbGL5p7HPbigmcoAVYYoN02Rn6Ugm+YsTjA5piEDOoPGD9KGmkAxggjsaDcdOTj2pWlJHI565FACZ81WypZvUDpQtuNuSAc1f07XZ9Psr2ziSNlu1CSF0BIGc8E9KrzsEiQDG0UAVXKngdj3PShIgcMDnFKuGYkccdvWrkaqY8Z+btj+VAFIqAOeO9LHHuOc4xzihiWJ35yp5qeFV3HIOOM80AMFuDng\\/WoPLO7p7c1bnYwFSPun1qNHUNnGM8UAMNqwBOSPf1pvlkHBIPfp2q2ziSMjIyP1qszngk5x2oAfbweYDnr0FOmh8pTj8jwc06GZY1BwM561Jcf6Q4ZOT049aAKoU4HOKK2bbw9qVxEHitJpE\\/vIhINFAH63+WC424A\\/u5pziQN02jvkU13w2OPwNSI0YRuQD\\/ALteYdo1II2HBzjuRmnrEvPzA\\/QVF5\\/B+fP0FMWV2znH4UAWkZuc\\/o2aYkqqT8wJ9G4\\/lVdbgnPlMw9cGnM4HXAP4UAWDKG7KT\\/tCgHOcYX8arswAGWZh6Y6VLHKEGSSAaAHgH\\/lmzE98iiPKMcsM\\/71AQNyXJHXgGl+VjgMOPWgBzqrDn5hSps2gABR9KgmXavyr82fwpyvIIhjP0ycUASjcX24AT+9TvL2DIIIHcZFQlmdMEZPpnihW2jBXn0FAEwUsQxOB7808uEjOGBI7Dr\\/ACqOMGTthf7pp5UhSuF20AAlLpnaM\\/XmkV\\/73B96BgDGVpTGGGRgn2oAlWQBCAAQe5HNMRiB8u0\\/VajKSE8Lx35pdpB6tg\\/3aAJHfJBbt07UjzFyNwDY9cU1odx+Uk\\/lStE6YyTz0oAkWQsCVwvsaZCxlB4PH90Um3y\\/vnk9MU54ufn4+pxQAjtyMjd9BjFKmAepX6D\\/ABpSSAOW\\/CgB26bs+7EUAMOznnP50wgY+UHP0qRY2Qk7c\\/U\\/\\/Xoyw6tj2FACBflB39e2elI5JOByc8HqacitvyQQD3zTwuSaAISpbBI5\\/WpQq45PJHr704IVAOevSkI4GT270AROnzZB5pqu2TnBA79KeAGJ68j\\/ADzQgz1yfp3oAmjc8fw++atwvtI556VSA28VYVjtyOSe9AF7zsYIPWhXzgc49qrIcjrT06jGM+lAFgtk5z\\/gKa8gckNjg1GWGcduahmbBLAkN7UAV7\\/S7O9BWSJTnPavIfid+zX4c8dWcwlskWdslXjXDIcccivXVkLZ3HPHFPWQjIIyKpNrYTSe5+VXxS+AviH4catcRG1mvbBclJ44ycDPQ4HWvNntGj4ZWRh\\/CwxX6++IfCmn+IY3W4hSTcMHIryLxF+yr4X18ySPYJvk43Lwa6Y1VbUxdN9D815Yhls5BB4JoVTgN3719WfEL9ijU9OaefQJWlRckRyt+OK+Z9b0S98OarcadfwmC6gba8b9j\\/nFbKSlsZNNbmXtC84z\\/wDrozj6ds1PtBYcAEHjFRFNwzk47iqEMYdx1PanJhnGeOccUALjkYP96prSItcxgdWYDp0oA7eW4FzHHE0ahVUKD0yMVn3YcBiDtA4x7Vbu7dopCWXg\\/wAQNZVwHSF2J3jpmgDnZ+ZM9T3NNIGevXnNOYZfIyM00RFhnHtmgCbavXIHtT5XG31+gqFRgEMfpTTknHABOKAAtkg+\\/btSAYPDZ9ADQT8pz\\/jTRkIeSfbtQA5m4BJ6d+1ITlc5x2puOeefWgnkk8DP50ADZx1wfTvXa\\/Dq3tZk1iS5u0tlFuVO5ckgkdK4sDAJ6rXVeCnK2+rMVDR\\/Z8HnocigDDlwHbaRtJPP+NRHAXgkdakfO4nI4JP1pvDdMn0oAhmBba3IGO1R7g3b8u9TXOeFBJA6GoW+negBFIDZ6D0pA20Z\\/kaXGOcHj9KTA6gcCgA5pd3POfbNGMlunNBGRkDoO9ABv+TAHvxWjY6y0AKT5lj9e4rN52EZ70YABJ5NAG893aMpII\\/4F2qlNcxZG0lvSs9V8wgY4J4qR43gZgwKMOobg0Aa+meJ7mwCo+JbfGNjn+VdTpur29+N1q6xSgfcc85rz0NkdB7UsMzwSLIjbHU5yKAPVLIPJOskwDDqea3Li6ijiXhTkYJZuRXKeF7+HXbcx7il0F5UH73vUuoNNaMyMPM7cnjFAGrG0dzclFbdgZJz3rQt7FNoYLuJ75rlNEufKkGWySTwBgmumXVFjAQSgtnDKB0\\/HvSYGimmRzRbWhVs\\/wB4cio28N285ZmiCY7KKkttZjAABGffrUi6rHL8xcE+g7e1IZnXPg+Byxjm288duaxLnTJ9PkYBQ6qeq11M98oj37gFbH\\/1qpRyLc5JbgjPzelFxGfba86RbUVkZflCnr6Voxa5NZxcNvI+cncOuKnbRra5DcHzPXpmrfw98H6brPii7t9VWWe1t1WTZFJsJycEZH4UXsMteGvGVzdMIJMjfIpLf3VByTn8MV1eqa3f3byxW7s8LHKbxgD3+veuu8YaJ4Y8N+FbFdJs4bZmuHJlILSMu3G0seSB6Vw1prtrEW807VzwP6YqFZ6lbaFE2V22ZJrllAJJOcZ\\/\\/VWe2lK0hneViSuMNkj+VWfFHjmx0u1d2lGxVI\\/3jxxivJdW+LV3cborKERwdAX5OO9WI7iPRx9tRflYEgkV7d4d8U+H\\/hZof9t6rdRx+QCUiBG+V\\/4VUd818dv491fzPMSZY5B3UVl6rrmo65MJb65lunHTzGyB9PSk43FexqfELxtefELxjqniC\\/z515M0gQnIjTPyoPYDA\\/CudQfN1\\/Sm7m2\\/0pw+Q4PBq0IkAHbjnoDSNweg+vrTM5X0PekwcYPFADyOD0NIOBwOvOSKbnOewFOXOeq89sUAJzyffkClJxgYHHfvTQ2T\\/nrS9VyCR7H0oAcpDc9O\\/wBacZCYyrHFR4Ck7SB3+tKcgY7elADi2MDORjFAkIUkHn88U0FlI3cLSgktjH+NACudzZPB9u9LFMQuMnJpoyeDkY7etKeVP9fWgCV2yoBO761EGbG0ZFM3kknI68Vt+HNPiv7kRSAnkmgDJVSrEg4A7etXbLSbrVJUjt4Xd2IAwM81a1qw+xXjKoOwngnuK6f4YSj+37RGIwXGR70AaHhD4Janrut2Vneq1qtw2BuWvuf4a\\/sZ+FNL063lurWO6mGGMkiAk8ehry5EWLXNFkHIEq8j\\/P0r7b8Lyf8AEogPUlQf5Vzzk+hvCKsYem\\/CHw1ptnHbxafCEXoNgortQy\\/X8M0VjYo8Gu\\/Ed6rfKI8Y6BT\\/AI1BD4wvV+Voock90Of51XuBkDA+lUZLcuSR16UlYrU2f+EqvG6LGCOwB5\\/WnjxPdHlkiI9wf8a59VKHGeMVP5THbwPaiyC7NVvFF30jht+vXYen508+KL116RAeyn\\/GshEIY7vXr\\/n6VMsbMRjBAosguzT\\/AOEhvV7R\\/XH\\/ANercGu3bcbYiT0wP\\/r1kJCwxgfKfU1ftrdm4YgjOOtLQLs0o9TncZ2hsjoc4\\/nU0d9O4GQox6ZqvFEwwCTxxkGrix7VHHIHepKGefL1IBOehFJJdyheDj1FOkGBgDP09Ka0Qxk+vXvSAYupTEbT9M96UX0wA6D3HWoihVxjp1zQIPm3AEcfrQBdivJOCWyMfxd6nW9ZSOEx9KzVDbgOQRxntVmIYZQd3WgC+LyTI4AU+2AaeL45ICqM1UzgAf8A681FJL8qt+fuKALp1ByTgJke1RNqU3PCfiDWa1x3yeenrTftG0\\/L6UCuaZ1OdeyHPt\\/9emjUZwDhEGfY1nfasuB2xjB7VL5pZB3460DL8d\\/KMZI\\/AVPJqDsPmxxz3rJErLgd84wPWpBLjk49TQBoJcEZyA3GTSm7dTn5fxzVITELjPHcVCJ9zYA470Abcc+8DcF99uaek+H+XB+vaslbwgKF6nnmp4pweCc4\\/nQBpLtBaT+InqKUSDGeS39Koi83R4zjPvTkkJbtgCgC4z\\/MOn1puRjceWxUUcgbABzj0pWfB\\/iH0oANwVzxwTz\\/APWp6yZU8ZzxVV5QdvtT1kVVGCOeemDQBOTtY8Y4FTJLtyM4+lUi4xycepNTRuGXqQPSgC7u5I9egFSrIMYI9eM1ACRgn0BNKZdoJPBPfFAD2fPHaoXORyck9803zQDyPl9qZJJ3yM\\/1oAQnB64+tPKblGDj3pkbBgQRk570qkEYH\\/1qAIn+XoDwetRGcpyBjtmnykfMenU8HtVWUF2\\/zigDotPhje0Qugc\\/e+bmvzF\\/bPu7Sb49azFaIii3jiik2DgvsDH\\/ANCH5V+mqy\\/ZNPaTcFCR5+nFfkZ8btYbX\\/iz4r1BsES6hIBn0U4H6AVvR3uZVNjiRISSCOM5qVYmlGB19jUIAZvXBxzxW1p6FYicc9812HOY7q6MFIIP0q5pwX7ZEGb5QecCkv0Amzj\\/AOvVnRYEkv4gflAz1\\/GgDXdY5pHaK4JLMch+KqahFJHbtlSQP4lOQalfauTtXuQQcVVu3mEDFXAUjoTmgDF5wAMn19qE44HQ8+tMdxv4B4weeOab5uQCfrQBNtwMdT71Gy\\/\\/AKj60iSdznHrSCUDJB49qAF7cgH1x2pMKpAznnOKa0mOBjnsTQBkY6elACDOQc9ecZp3GMDIPXPrSM20DPXuaQHjOOMUAKRz1GeT713Pw98uLStflMaSOtuoCOMjlh3z1rhCCTkdK7HwNdCPSdfjYtmSBQAOhww7\\/wCe9IDn5W\\/eNxncTwAcU0fMDxk5xjtRIn97Of8AaoZSSAcDA7UwIblApBI68Y9KrqODwRjpzVi8AKLjqKrsSqjHHfrxQAAkkkjr2oB46DHrQFyeMmjHOCP60AIcjtkHoaUYYn6d+aBhjgjn0oXkEZ\\/WgA5IHYe3al3ccdup70gwB2HHWgEqp7qeaAJo5BGQ\\/YHgCu78TaNJ4n0BPElu\\/mSRIkdzEByuAAG4rhDEfJBAG4nGCa6v4ea89lqg0yVwbK+\\/cyqegB7\\/AK0AcgOCeQvuBRwfU+oroPHfhSbwb4im0+U7o\\/vxODkMp6HNc6Mc5yOec96AJbS5ms5lmgkKSKeCDzXQN45ubmJVuI0dgMbhwTXNDGMDk0AAHPcd6AOwsNdtpnXe4jPo3FbL+RIoMVxhsZODkV5sMj2P0qSOeWJgysU9CD0oA78XsluQoYOv94GrNrq3mlVYlQpwGB61w1vr0sYG8B89SeuKsx+IUX\\/lmXPXrQB3f9oRmQYOQeSM1ctrm2YqNwwGB+Y9TXnNv4oeOfc0KEYwNvBAqw\\/ilZIdiREtjjJoA9Tk8VQwaWZJdqbgyjjrjvUXgfxJb2txc3k8yxNcMFAd9uQvc\\/UmvHr\\/AFm6ndVkmO1VAWMDgCqj3s0hKvKzEknHPWgZ6\\/8AFD4ySXLQaXpMkcsMCMXuBz85xkL24AFeWz+JdUu2zLeysewzx+VZgbJx60hAGOPmJ7mlsIknnlvGBlkaRj\\/E7ZqL7uQMnFLnpznPTNLgDGOhPSmADHQkEfzo4zx07YoPTHftTSMDPqemKAFAIzj+fNAPPYfSlI2gY4HbmkbPTueaAA\\/T6UegwAOtCpg8nrz60AE8HnHSgAzwT9e9BG4Hv9Dmhgoxx+GKAQOSeKADJBoHf+LHalXJPcd8+tN25yR3oAUYBznjrkUpJz1z7elLgbec5ppHGcEgetABjJ6n\\/GlwSB0J9e9KCc88DHANKoJfA4+lACdcc04jA4Ix60zAJx0p+AVyeSaAGMBzjFaWhymG9jOQoHY1n8MoyM\\/hUtnKySqwO3B7dqAO28SaaboJMDxtyazfC8htNUidHMbKww9a9vc\\/bNOZHzgjFY6wG2k2g8k9aAPrzR7lbvRtNuInEjI6NuHbmvs7wNLv0K3yf4fz4r4O+GF8s3gyGPd+9jXoD93mvuP4dSl\\/Dtqc8lBz+FclTQ3gdhvJ5Xp9KKrgj1orG5pY8KuLcg9RjPbvSxqUGSOcZwKnuf8AV\\/8AAv8AClj6H\\/dH9aYFFrfJ4GDnGTVqC3YjkY7UH\\/Vx\\/wC9\\/SrkX3n\\/AM9qAKi2YPBJYH\\/69PW26HOe30q2f9ZF9f6mm9l\\/3qAI\\/s2BuHWr1uhyMr17dBTIv9T+FX4f60mNIljiJ4CnFWFgyuSCpHvT4uj1NP8Af\\/Ef0qRlGaIdMexqsQxBBAwDz7Vem6tUL\\/6w\\/hQBXCEfNkilCAsc5HfFWD\\/q\\/wAf6VHF\\/F\\/vf4UANEQAJIPvUsKY46ZHanS\\/6lfqv9Kkj+8PxoAYylc88j9Kp3XL5PI61oH\\/AFZ+v9aqXPU\\/7g\\/nQBl3Hyk4xtyTxVGW6eJsYHPf0q5N1FZ1x\\/qx+H86skIrliQCMk+laUVwW+7xntWTF\\/r0rWtOn4UgTHxy7jk8ZHApxmxzkE+maiXp+NQt\\/rJPqP50FFvzgV4ORTlwW4I9\\/Wqyf8ekP1H8qmH+sT6j+tFhXHPcbXAIz34NIbwFB8xxzxmqdx\\/rX\\/3TSf8ALJvx\\/mKLBc0VvNy9e3ABqZbvGPmHPH1rLj\\/j\\/GrEf3D9P6UmFzThvAhIDA+9Sy3gJwcVlxfehpZPun8aQXLwuBu9M9jTluhkgnAz0zWeOq1Mf4fof60DL4nB7jJ71btn3c9j2rIH3H+n+NaVh\\/x7D8KAL5m2qTjtSeaCOx+tQP8A8e7fQ0k3RfrQBJJLt9+Oxqq8+SevPpTZPur9KhH+rSgC0LkDGOM+lSCfJHoO9Zs3+t\\/AVND0i\\/GgCw8mQfTFQp88oUtzmppev4VV07\\/j5T6igCx4x1JtK8J6nOqn5LZ2Htha\\/H3Vbp77Ubq4kbfJLKzsx5ySSa\\/XH4r\\/APJN\\/EH\\/AF5S\\/wDoLV+Qs3U\\/Q11UdmYVB0C5mXgelbMByMdyc8VlWn3k\\/D+Va1n\\/AK0V0mJUu4W84jqf5Vc0aJDdN5iZwjH8cUyf\\/Wy1NpX\\/AC1\\/3G\\/lQBUMkQb5g20eh61DdESREqCBjnJpYerfQ\\/zpLr+GgDLbls4GcZNNfGeO9L\\/Gf96kb7p\\/z60AGcHHYfpQB8vqSe9LJ0P0H9KVPuH\\/AHh\\/KgBu3PfJoIBYZAOTj260Sf6tqVf9b+P9BQA1QR0H45pMY4HanN9xv896G+8v4UAIMr3z7V1XgyJpLTVzlRH9nzuJPXIwOO9cr\\/y1b6j+tdX4K\\/5Buuf9c0\\/9CoAxThA2Y8sT1Jpo4P1p7f8AHw\\/1P9art94\\/UfzoAkuYXaNWVSVHX2qhnnA47Vp3f3F\\/H+VZ8fQ0ANJwccY6Ufe754ximxf6xvwpy\\/6t\\/wAf6UAGeQBScEZHI96Q\\/wCu\\/AVIv8X0oAavz8AY+tTWcv2e6ikZRIqtnDd6hj\\/4+Pw\\/oasCgDpfHWvL4p1x78WkOno0UaiG3QKi7VA6DvxXLwSlJY5AcFDnPpWzqH3pfqaw4\\/vH\\/d\\/woA7DxX44i8S+H7G0ltib62AHnsckgVxgwA3XpUz\\/AH3+pqB\\/utQA4Z7dugpSdx6A\\/WiP7zf71NX\\/AFRoAVBxjdjNBAXnrnj6Ui9D9aaPvPQBICe\\/b8BSEgEUkP8Aqm+n+NK33Y\\/92gA6ZBwTU0UZJxkHnAJqKTr\\/AMCP8qsfwxUAV5TukLYzRjpnIB5pF7fj\\/OkXt9aAHA8E9R3NNbOBhvwpZP8AGkfr+VAChRjII4PSjbk5J59qdH99Poak7r9KAIQCM59PWgjBHPFKP9bSS\\/w\\/73+FAAM5PqfT2pV9DwfY0qfeP+e1MX7rfUUAOLYIPB9c0NkdecUR\\/wAX1pF+6n0\\/pQAp7dCaQ4PUjPapE\\/1R+n+FQDqfoKAJQFyc+mc0Ke2CSfWkbt9KkH3V+tAERIz19hThg4PUUxfut9TUif6pP896AEHfnt2pyg99uT396IfvP9f8Klj\\/AIv9+gCuMhvQZqRSMcd+oph6r\\/u\\/1p9v\\/q2+tAEsibogxIHHJFV0J3A8881ZH\\/Hoah\\/5aH8aAOy8PzxtbhWxv96vahZbmVh0B\\/Wue8Nf6411d32\\/36APU\\/hTdCPSriHJwBkD07196\\/CW6W68MWbfeIjHJ+lfn98Kf9VP\\/uj+tfePwS\\/5FK2\\/3F\\/kK5avRm0D0URbucgfjRUbfeNFcxrc\\/9k=\",\"margin\":[-40,16,0,0],\"width\":595},{\"margin\":[-20,-150,0,0],\"columnGap\":8,\"columns\":[{\"width\":\"auto\",\"text\":\"$toLabel:\",\"style\":\"bold\",\"color\":\"#cd5138\"},{\"width\":\"*\",\"stack\":\"$clientDetails\",\"margin\":[4,0,0,0]}]},{\"margin\":[-20,10,0,140],\"columnGap\":8,\"columns\":[{\"width\":\"auto\",\"text\":\"$fromLabel:\",\"style\":\"bold\",\"color\":\"#cd5138\"},{\"width\":\"*\",\"stack\":[{\"width\":150,\"stack\":\"$accountDetails\"},{\"width\":150,\"stack\":\"$accountAddress\"}]}]},{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":5,\"x2\":515,\"y2\":5,\"lineWidth\":1.5}],\"margin\":[0,0,0,-30]},{\"style\":\"invoiceLineItemsTable\",\"table\":{\"headerRows\":1,\"widths\":\"$invoiceLineItemColumns\",\"body\":\"$invoiceLineItems\"},\"layout\":{\"hLineWidth\":\"$notFirst:.5\",\"vLineWidth\":\"$none\",\"hLineColor\":\"#000000\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:10\",\"paddingBottom\":\"$amount:10\"}},{\"columns\":[\"$notesAndTerms\",{\"alignment\":\"right\",\"table\":{\"widths\":[\"*\",\"40%\"],\"body\":\"$subtotals\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:34\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}}]},{\"stack\":[{\"image\":\"$signatureBase64\",\"margin\":[200,10,0,0]},{\"text\":\"$signatureDate\",\"margin\":[200,-40,0,0]}]},{\"stack\":[\"$invoiceDocuments\"],\"style\":\"invoiceDocuments\"}],\"defaultStyle\":{\"fontSize\":\"$fontSize\",\"margin\":[8,4,8,4]},\"footer\":{\"columns\":[{\"text\":\"$invoiceFooter\",\"alignment\":\"left\"}],\"margin\":[40,-20,40,0]},\"styles\":{\"accountDetails\":{\"margin\":[0,0,0,3]},\"accountAddress\":{\"margin\":[0,0,0,3]},\"clientDetails\":{\"margin\":[0,0,0,3]},\"productKey\":{\"color\":\"$primaryColor:#cd5138\"},\"lineTotal\":{\"alignment\":\"right\"},\"tableHeader\":{\"bold\":true,\"fontSize\":\"$fontSizeLarger\"},\"subtotalsBalanceDueLabel\":{\"fontSize\":\"$fontSizeLargest\"},\"subtotalsBalanceDue\":{\"fontSize\":\"$fontSizeLargest\",\"color\":\"$primaryColor:#cd5138\"},\"invoiceLineItemsTable\":{\"margin\":[0,0,0,16]},\"cost\":{\"alignment\":\"right\"},\"quantity\":{\"alignment\":\"right\"},\"tax\":{\"alignment\":\"right\"},\"termsLabel\":{\"bold\":true,\"margin\":[0,0,0,4]},\"fullheader\":{\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"help\":{\"fontSize\":\"$fontSizeSmaller\",\"color\":\"#737373\"}},\"pageMargins\":[40,30,40,30]}'),(11,'Custom1',NULL,NULL),(12,'Custom2',NULL,NULL),(13,'Custom3',NULL,NULL); +INSERT INTO `invoice_designs` VALUES (1,'Clean','var GlobalY=0;//Y position of line at current page\n\n var client = invoice.client;\n var account = invoice.account;\n var currencyId = client.currency_id;\n\n layout.headerRight = 550;\n layout.rowHeight = 15;\n\n doc.setFontSize(9);\n\n if (invoice.image)\n {\n var left = layout.headerRight - invoice.imageWidth;\n doc.addImage(invoice.image, \'JPEG\', layout.marginLeft, 30);\n }\n \n if (!invoice.is_pro && logoImages.imageLogo1)\n {\n pageHeight=820;\n y=pageHeight-logoImages.imageLogoHeight1;\n doc.addImage(logoImages.imageLogo1, \'JPEG\', layout.marginLeft, y, logoImages.imageLogoWidth1, logoImages.imageLogoHeight1);\n }\n\n doc.setFontSize(9);\n SetPdfColor(\'LightBlue\', doc, \'primary\');\n displayAccount(doc, invoice, 220, layout.accountTop, layout);\n\n SetPdfColor(\'LightBlue\', doc, \'primary\');\n doc.setFontSize(\'11\');\n doc.text(50, layout.headerTop, (invoice.is_quote ? invoiceLabels.quote : invoiceLabels.invoice).toUpperCase());\n\n\n SetPdfColor(\'Black\',doc); //set black color\n doc.setFontSize(9);\n\n var invoiceHeight = displayInvoice(doc, invoice, 50, 170, layout);\n var clientHeight = displayClient(doc, invoice, 220, 170, layout);\n var detailsHeight = Math.max(invoiceHeight, clientHeight);\n layout.tableTop = Math.max(layout.tableTop, layout.headerTop + detailsHeight + (3 * layout.rowHeight));\n \n doc.setLineWidth(0.3); \n doc.setDrawColor(200,200,200);\n doc.line(layout.marginLeft - layout.tablePadding, layout.headerTop + 6, layout.marginRight + layout.tablePadding, layout.headerTop + 6);\n doc.line(layout.marginLeft - layout.tablePadding, layout.headerTop + detailsHeight + 14, layout.marginRight + layout.tablePadding, layout.headerTop + detailsHeight + 14);\n\n doc.setFontSize(10);\n doc.setFontType(\'bold\');\n displayInvoiceHeader(doc, invoice, layout);\n var y = displayInvoiceItems(doc, invoice, layout);\n\n doc.setFontSize(9);\n doc.setFontType(\'bold\');\n\n GlobalY=GlobalY+25;\n\n\n doc.setLineWidth(0.3);\n doc.setDrawColor(241,241,241);\n doc.setFillColor(241,241,241);\n var x1 = layout.marginLeft - 12;\n var y1 = GlobalY-layout.tablePadding;\n\n var w2 = 510 + 24;\n var h2 = doc.internal.getFontSize()*3+layout.tablePadding*2;\n\n if (invoice.discount) {\n h2 += doc.internal.getFontSize()*2;\n }\n if (invoice.tax_amount) {\n h2 += doc.internal.getFontSize()*2;\n }\n\n //doc.rect(x1, y1, w2, h2, \'FD\');\n\n doc.setFontSize(9);\n displayNotesAndTerms(doc, layout, invoice, y);\n y += displaySubtotals(doc, layout, invoice, y, layout.unitCostRight);\n\n\n doc.setFontSize(10);\n Msg = invoice.is_quote ? invoiceLabels.total : invoiceLabels.balance_due;\n var TmpMsgX = layout.unitCostRight-(doc.getStringUnitWidth(Msg) * doc.internal.getFontSize());\n \n doc.text(TmpMsgX, y, Msg);\n\n SetPdfColor(\'LightBlue\', doc, \'primary\');\n AmountText = formatMoney(invoice.balance_amount, currencyId);\n headerLeft=layout.headerRight+400;\n var AmountX = layout.lineTotalRight - (doc.getStringUnitWidth(AmountText) * doc.internal.getFontSize());\n doc.text(AmountX, y, AmountText);','{\"content\":[{\"columns\":[{\"image\":\"$accountLogo\",\"fit\":[120,80]},{\"stack\":\"$accountDetails\",\"margin\":[7,0,0,0]},{\"stack\":\"$accountAddress\"}]},{\"text\":\"$entityTypeUC\",\"margin\":[8,30,8,5],\"style\":\"entityTypeLabel\"},{\"table\":{\"headerRows\":1,\"widths\":[\"auto\",\"auto\",\"*\"],\"body\":[[{\"table\":{\"body\":\"$invoiceDetails\"},\"margin\":[0,0,12,0],\"layout\":\"noBorders\"},{\"stack\":\"$clientDetails\"},{\"text\":\"\"}]]},\"layout\":{\"hLineWidth\":\"$firstAndLast:.5\",\"vLineWidth\":\"$none\",\"hLineColor\":\"#D8D8D8\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:6\",\"paddingBottom\":\"$amount:6\"}},{\"style\":\"invoiceLineItemsTable\",\"table\":{\"headerRows\":1,\"widths\":\"$invoiceLineItemColumns\",\"body\":\"$invoiceLineItems\"},\"layout\":{\"hLineWidth\":\"$notFirst:.5\",\"vLineWidth\":\"$none\",\"hLineColor\":\"#D8D8D8\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:14\",\"paddingBottom\":\"$amount:14\"}},{\"columns\":[\"$notesAndTerms\",{\"table\":{\"widths\":[\"*\",\"40%\"],\"body\":\"$subtotals\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:34\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}}]},\"$signature\",{\"stack\":[\"$invoiceDocuments\"],\"style\":\"invoiceDocuments\"}],\"defaultStyle\":{\"font\":\"$bodyFont\",\"fontSize\":\"$fontSize\",\"margin\":[8,4,8,4]},\"footer\":{\"columns\":[{\"text\":\"$invoiceFooter\",\"alignment\":\"left\"}],\"margin\":[40,-20,40,0]},\"styles\":{\"entityTypeLabel\":{\"font\":\"$headerFont\",\"fontSize\":\"$fontSizeLargest\",\"color\":\"$primaryColor:#37a3c6\"},\"primaryColor\":{\"color\":\"$primaryColor:#37a3c6\"},\"accountName\":{\"color\":\"$primaryColor:#37a3c6\",\"bold\":true},\"invoiceDetails\":{\"margin\":[0,0,8,0]},\"accountDetails\":{\"margin\":[0,2,0,2]},\"clientDetails\":{\"margin\":[0,2,0,2]},\"notesAndTerms\":{\"margin\":[0,2,0,2]},\"accountAddress\":{\"margin\":[0,2,0,2]},\"odd\":{\"fillColor\":\"#fbfbfb\"},\"productKey\":{\"color\":\"$primaryColor:#37a3c6\",\"bold\":true},\"subtotalsBalanceDueLabel\":{\"fontSize\":\"$fontSizeLarger\"},\"subtotalsBalanceDue\":{\"fontSize\":\"$fontSizeLarger\",\"color\":\"$primaryColor:#37a3c6\"},\"invoiceNumber\":{\"bold\":true},\"tableHeader\":{\"bold\":true,\"fontSize\":\"$fontSizeLarger\"},\"costTableHeader\":{\"alignment\":\"right\"},\"qtyTableHeader\":{\"alignment\":\"right\"},\"taxTableHeader\":{\"alignment\":\"right\"},\"lineTotalTableHeader\":{\"alignment\":\"right\"},\"invoiceLineItemsTable\":{\"margin\":[0,16,0,16]},\"clientName\":{\"bold\":true},\"cost\":{\"alignment\":\"right\"},\"quantity\":{\"alignment\":\"right\"},\"tax\":{\"alignment\":\"right\"},\"lineTotal\":{\"alignment\":\"right\"},\"subtotals\":{\"alignment\":\"right\"},\"termsLabel\":{\"bold\":true},\"fullheader\":{\"font\":\"$headerFont\",\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"subheader\":{\"font\":\"$headerFont\",\"fontSize\":\"$fontSizeLarger\"},\"help\":{\"fontSize\":\"$fontSizeSmaller\",\"color\":\"#737373\"},\"invoiceDocuments\":{\"margin\":[7,0,7,0]},\"invoiceDocument\":{\"margin\":[0,10,0,10]}},\"pageMargins\":[40,40,40,60]}'),(2,'Bold',' var GlobalY=0;//Y position of line at current page\n\n var client = invoice.client;\n var account = invoice.account;\n var currencyId = client.currency_id;\n\n layout.headerRight = 150;\n layout.rowHeight = 15;\n layout.headerTop = 125;\n layout.tableTop = 300;\n\n doc.setLineWidth(0.5);\n\n if (NINJA.primaryColor) {\n setDocHexFill(doc, NINJA.primaryColor);\n setDocHexDraw(doc, NINJA.primaryColor);\n } else {\n doc.setFillColor(46,43,43);\n } \n\n var x1 =0;\n var y1 = 0;\n var w2 = 595;\n var h2 = 100;\n doc.rect(x1, y1, w2, h2, \'FD\');\n\n if (invoice.image)\n {\n var left = layout.headerRight - invoice.imageWidth;\n doc.addImage(invoice.image, \'JPEG\', layout.marginLeft, 30);\n }\n\n doc.setLineWidth(0.5);\n if (NINJA.primaryColor) {\n setDocHexFill(doc, NINJA.primaryColor);\n setDocHexDraw(doc, NINJA.primaryColor);\n } else {\n doc.setFillColor(46,43,43);\n doc.setDrawColor(46,43,43);\n } \n\n // return doc.setTextColor(240,240,240);//select color Custom Report GRAY Colour\n var x1 = 0;//tableLeft-tablePadding ;\n var y1 = 750;\n var w2 = 596;\n var h2 = 94;//doc.internal.getFontSize()*length+length*1.1;//+h;//+tablePadding;\n\n doc.rect(x1, y1, w2, h2, \'FD\');\n if (!invoice.is_pro && logoImages.imageLogo2)\n {\n pageHeight=820;\n var left = 250;//headerRight ;\n y=pageHeight-logoImages.imageLogoHeight2;\n var headerRight=370;\n\n var left = headerRight - logoImages.imageLogoWidth2;\n doc.addImage(logoImages.imageLogo2, \'JPEG\', left, y, logoImages.imageLogoWidth2, logoImages.imageLogoHeight2);\n }\n\n doc.setFontSize(7);\n doc.setFontType(\'bold\');\n SetPdfColor(\'White\',doc);\n\n displayAccount(doc, invoice, 300, layout.accountTop, layout);\n\n\n var y = layout.accountTop;\n var left = layout.marginLeft;\n var headerY = layout.headerTop;\n\n SetPdfColor(\'GrayLogo\',doc); //set black color\n doc.setFontSize(7);\n\n //show left column\n SetPdfColor(\'Black\',doc); //set black color\n doc.setFontType(\'normal\');\n\n //publish filled box\n doc.setDrawColor(200,200,200);\n\n if (NINJA.secondaryColor) {\n setDocHexFill(doc, NINJA.secondaryColor);\n } else {\n doc.setFillColor(54,164,152); \n } \n\n GlobalY=190;\n doc.setLineWidth(0.5);\n\n var BlockLenght=220;\n var x1 =595-BlockLenght;\n var y1 = GlobalY-12;\n var w2 = BlockLenght;\n var h2 = getInvoiceDetailsHeight(invoice, layout) + layout.tablePadding + 2;\n\n doc.rect(x1, y1, w2, h2, \'FD\');\n\n SetPdfColor(\'SomeGreen\', doc, \'secondary\');\n doc.setFontSize(\'14\');\n doc.setFontType(\'bold\');\n doc.text(50, GlobalY, (invoice.is_quote ? invoiceLabels.your_quote : invoiceLabels.your_invoice).toUpperCase());\n\n\n var z=GlobalY;\n z=z+30;\n\n doc.setFontSize(\'8\'); \n SetPdfColor(\'Black\',doc); \n var clientHeight = displayClient(doc, invoice, layout.marginLeft, z, layout);\n layout.tableTop += Math.max(0, clientHeight - 75);\n marginLeft2=395;\n\n //publish left side information\n SetPdfColor(\'White\',doc);\n doc.setFontSize(\'8\');\n var detailsHeight = displayInvoice(doc, invoice, marginLeft2, z-25, layout) + 75;\n layout.tableTop = Math.max(layout.tableTop, layout.headerTop + detailsHeight + (2 * layout.tablePadding));\n\n y=z+60;\n x = GlobalY + 100;\n doc.setFontType(\'bold\');\n\n doc.setFontSize(12);\n doc.setFontType(\'bold\');\n SetPdfColor(\'Black\',doc);\n displayInvoiceHeader(doc, invoice, layout);\n\n var y = displayInvoiceItems(doc, invoice, layout);\n doc.setLineWidth(0.3);\n displayNotesAndTerms(doc, layout, invoice, y);\n y += displaySubtotals(doc, layout, invoice, y, layout.unitCostRight);\n\n doc.setFontType(\'bold\');\n\n doc.setFontSize(12);\n x += doc.internal.getFontSize()*4;\n Msg = invoice.is_quote ? invoiceLabels.total : invoiceLabels.balance_due;\n var TmpMsgX = layout.unitCostRight-(doc.getStringUnitWidth(Msg) * doc.internal.getFontSize());\n\n doc.text(TmpMsgX, y, Msg);\n\n //SetPdfColor(\'LightBlue\',doc);\n AmountText = formatMoney(invoice.balance_amount , currencyId);\n headerLeft=layout.headerRight+400;\n var AmountX = headerLeft - (doc.getStringUnitWidth(AmountText) * doc.internal.getFontSize());\n SetPdfColor(\'SomeGreen\', doc, \'secondary\');\n doc.text(AmountX, y, AmountText);','{\"content\":[{\"columns\":[{\"width\":380,\"stack\":[{\"text\":\"$yourInvoiceLabelUC\",\"style\":\"yourInvoice\"},\"$clientDetails\"],\"margin\":[60,100,0,10]},{\"canvas\":[{\"type\":\"rect\",\"x\":0,\"y\":0,\"w\":225,\"h\":\"$invoiceDetailsHeight\",\"r\":0,\"lineWidth\":1,\"color\":\"$primaryColor:#36a498\"}],\"width\":10,\"margin\":[-10,100,0,10]},{\"table\":{\"body\":\"$invoiceDetails\"},\"layout\":\"noBorders\",\"margin\":[0,110,0,0]}]},{\"style\":\"invoiceLineItemsTable\",\"table\":{\"headerRows\":1,\"widths\":\"$invoiceLineItemColumns\",\"body\":\"$invoiceLineItems\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:14\",\"paddingBottom\":\"$amount:14\"}},{\"columns\":[{\"width\":46,\"text\":\" \"},\"$notesAndTerms\",{\"table\":{\"widths\":[\"*\",\"40%\"],\"body\":\"$subtotals\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}}]},\"$signature\",{\"stack\":[\"$invoiceDocuments\"],\"style\":\"invoiceDocuments\"}],\"footer\":[{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":0,\"x2\":600,\"y2\":0,\"lineWidth\":100,\"lineColor\":\"$secondaryColor:#292526\"}]},{\"columns\":[{\"text\":\"$invoiceFooter\",\"margin\":[40,-40,40,0],\"alignment\":\"left\",\"color\":\"#FFFFFF\"}]}],\"header\":[{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":0,\"x2\":600,\"y2\":0,\"lineWidth\":200,\"lineColor\":\"$secondaryColor:#292526\"}],\"width\":10},{\"columns\":[{\"image\":\"$accountLogo\",\"fit\":[120,60],\"margin\":[30,16,0,0]},{\"stack\":\"$accountDetails\",\"margin\":[0,16,0,0],\"width\":140},{\"stack\":\"$accountAddress\",\"margin\":[20,16,0,0]}]}],\"defaultStyle\":{\"font\":\"$bodyFont\",\"fontSize\":\"$fontSize\",\"margin\":[8,4,8,4]},\"styles\":{\"primaryColor\":{\"color\":\"$primaryColor:#36a498\"},\"accountName\":{\"bold\":true,\"margin\":[4,2,4,1],\"color\":\"$primaryColor:#36a498\"},\"accountDetails\":{\"margin\":[4,2,4,1],\"color\":\"#FFFFFF\"},\"accountAddress\":{\"margin\":[4,2,4,1],\"color\":\"#FFFFFF\"},\"clientDetails\":{\"margin\":[0,2,0,1]},\"odd\":{\"fillColor\":\"#ebebeb\"},\"subtotalsBalanceDueLabel\":{\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"subtotalsBalanceDue\":{\"fontSize\":\"$fontSizeLargest\",\"color\":\"$primaryColor:#36a498\",\"bold\":true},\"invoiceDetails\":{\"color\":\"#ffffff\"},\"invoiceNumber\":{\"bold\":true},\"tableHeader\":{\"fontSize\":12,\"bold\":true},\"costTableHeader\":{\"alignment\":\"right\"},\"qtyTableHeader\":{\"alignment\":\"right\"},\"taxTableHeader\":{\"alignment\":\"right\"},\"lineTotalTableHeader\":{\"alignment\":\"right\",\"margin\":[0,0,40,0]},\"firstColumn\":{\"margin\":[40,0,0,0]},\"lastColumn\":{\"margin\":[0,0,40,0]},\"productKey\":{\"color\":\"$primaryColor:#36a498\",\"bold\":true},\"yourInvoice\":{\"font\":\"$headerFont\",\"bold\":true,\"fontSize\":14,\"color\":\"$primaryColor:#36a498\",\"margin\":[0,0,0,8]},\"invoiceLineItemsTable\":{\"margin\":[0,26,0,16]},\"clientName\":{\"bold\":true},\"cost\":{\"alignment\":\"right\"},\"quantity\":{\"alignment\":\"right\"},\"tax\":{\"alignment\":\"right\"},\"lineTotal\":{\"alignment\":\"right\"},\"subtotals\":{\"alignment\":\"right\",\"margin\":[0,0,40,0]},\"termsLabel\":{\"bold\":true,\"margin\":[0,0,0,4]},\"fullheader\":{\"font\":\"$headerFont\",\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"subheader\":{\"font\":\"$headerFont\",\"fontSize\":\"$fontSizeLarger\"},\"help\":{\"fontSize\":\"$fontSizeSmaller\",\"color\":\"#737373\"},\"invoiceDocuments\":{\"margin\":[47,0,47,0]},\"invoiceDocument\":{\"margin\":[0,10,0,10]}},\"pageMargins\":[0,80,0,40]}'),(3,'Modern',' var client = invoice.client;\n var account = invoice.account;\n var currencyId = client.currency_id;\n\n layout.headerRight = 400;\n layout.rowHeight = 15;\n\n\n doc.setFontSize(7);\n\n // add header\n doc.setLineWidth(0.5);\n\n if (NINJA.primaryColor) {\n setDocHexFill(doc, NINJA.primaryColor);\n setDocHexDraw(doc, NINJA.primaryColor);\n } else {\n doc.setDrawColor(242,101,34);\n doc.setFillColor(242,101,34);\n } \n\n var x1 =0;\n var y1 = 0;\n var w2 = 595;\n var h2 = Math.max(110, getInvoiceDetailsHeight(invoice, layout) + 30);\n doc.rect(x1, y1, w2, h2, \'FD\');\n\n SetPdfColor(\'White\',doc);\n\n //second column\n doc.setFontType(\'bold\');\n var name = invoice.account.name; \n if (name) {\n doc.setFontSize(\'30\');\n doc.setFontType(\'bold\');\n doc.text(40, 50, name);\n }\n\n if (invoice.image)\n {\n y=130;\n var left = layout.headerRight - invoice.imageWidth;\n doc.addImage(invoice.image, \'JPEG\', layout.marginLeft, y);\n }\n\n // add footer \n doc.setLineWidth(0.5);\n\n if (NINJA.primaryColor) {\n setDocHexFill(doc, NINJA.primaryColor);\n setDocHexDraw(doc, NINJA.primaryColor);\n } else {\n doc.setDrawColor(242,101,34);\n doc.setFillColor(242,101,34);\n } \n\n var x1 = 0;//tableLeft-tablePadding ;\n var y1 = 750;\n var w2 = 596;\n var h2 = 94;//doc.internal.getFontSize()*length+length*1.1;//+h;//+tablePadding;\n\n doc.rect(x1, y1, w2, h2, \'FD\');\n\n if (!invoice.is_pro && logoImages.imageLogo3)\n {\n pageHeight=820;\n // var left = 25;//250;//headerRight ;\n y=pageHeight-logoImages.imageLogoHeight3;\n //var headerRight=370;\n\n //var left = headerRight - invoice.imageLogoWidth3;\n doc.addImage(logoImages.imageLogo3, \'JPEG\', 40, y, logoImages.imageLogoWidth3, logoImages.imageLogoHeight3);\n }\n\n doc.setFontSize(10); \n var marginLeft = 340;\n displayAccount(doc, invoice, marginLeft, 780, layout);\n\n\n SetPdfColor(\'White\',doc); \n doc.setFontSize(\'8\');\n var detailsHeight = displayInvoice(doc, invoice, layout.headerRight, layout.accountTop-10, layout);\n layout.headerTop = Math.max(layout.headerTop, detailsHeight + 50);\n layout.tableTop = Math.max(layout.tableTop, detailsHeight + 150);\n\n SetPdfColor(\'Black\',doc); //set black color\n doc.setFontSize(7);\n doc.setFontType(\'normal\');\n displayClient(doc, invoice, layout.headerRight, layout.headerTop, layout);\n\n\n \n SetPdfColor(\'White\',doc); \n doc.setFontType(\'bold\');\n\n doc.setLineWidth(0.3);\n if (NINJA.secondaryColor) {\n setDocHexFill(doc, NINJA.secondaryColor);\n setDocHexDraw(doc, NINJA.secondaryColor);\n } else {\n doc.setDrawColor(63,60,60);\n doc.setFillColor(63,60,60);\n } \n\n var left = layout.marginLeft - layout.tablePadding;\n var top = layout.tableTop - layout.tablePadding;\n var width = layout.marginRight - (2 * layout.tablePadding);\n var height = 20;\n doc.rect(left, top, width, height, \'FD\');\n \n\n displayInvoiceHeader(doc, invoice, layout);\n SetPdfColor(\'Black\',doc);\n var y = displayInvoiceItems(doc, invoice, layout);\n\n\n var height1 = displayNotesAndTerms(doc, layout, invoice, y);\n var height2 = displaySubtotals(doc, layout, invoice, y, layout.unitCostRight);\n y += Math.max(height1, height2);\n\n\n var left = layout.marginLeft - layout.tablePadding;\n var top = y - layout.tablePadding;\n var width = layout.marginRight - (2 * layout.tablePadding);\n var height = 20;\n if (NINJA.secondaryColor) {\n setDocHexFill(doc, NINJA.secondaryColor);\n setDocHexDraw(doc, NINJA.secondaryColor);\n } else {\n doc.setDrawColor(63,60,60);\n doc.setFillColor(63,60,60);\n } \n doc.rect(left, top, width, height, \'FD\');\n \n doc.setFontType(\'bold\');\n SetPdfColor(\'White\', doc);\n doc.setFontSize(12);\n \n var label = invoice.is_quote ? invoiceLabels.total : invoiceLabels.balance_due;\n var labelX = layout.unitCostRight-(doc.getStringUnitWidth(label) * doc.internal.getFontSize());\n doc.text(labelX, y+2, label);\n\n\n doc.setFontType(\'normal\');\n var amount = formatMoney(invoice.balance_amount , currencyId);\n headerLeft=layout.headerRight+400;\n var amountX = layout.lineTotalRight - (doc.getStringUnitWidth(amount) * doc.internal.getFontSize());\n doc.text(amountX, y+2, amount);','{\"content\":[{\"columns\":[{\"image\":\"$accountLogo\",\"fit\":[120,80],\"margin\":[0,60,0,30]},{\"stack\":\"$clientDetails\",\"margin\":[0,60,0,0]}]},{\"style\":\"invoiceLineItemsTable\",\"table\":{\"headerRows\":1,\"widths\":\"$invoiceLineItemColumns\",\"body\":\"$invoiceLineItems\"},\"layout\":{\"hLineWidth\":\"$notFirst:.5\",\"vLineWidth\":\"$notFirstAndLastColumn:.5\",\"hLineColor\":\"#888888\",\"vLineColor\":\"#FFFFFF\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:8\",\"paddingBottom\":\"$amount:8\"}},{\"columns\":[\"$notesAndTerms\",{\"table\":{\"widths\":[\"*\",\"40%\"],\"body\":\"$subtotalsWithoutBalance\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:34\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}}]},{\"columns\":[{\"canvas\":[{\"type\":\"rect\",\"x\":0,\"y\":0,\"w\":515,\"h\":26,\"r\":0,\"lineWidth\":1,\"color\":\"$secondaryColor:#403d3d\"}],\"width\":10,\"margin\":[0,10,0,0]},{\"text\":\"$balanceDueLabel\",\"style\":\"subtotalsBalanceDueLabel\",\"margin\":[0,16,0,0],\"width\":370},{\"text\":\"$balanceDue\",\"style\":\"subtotalsBalanceDue\",\"margin\":[0,16,8,0]}]},\"$signature\",{\"stack\":[\"$invoiceDocuments\"],\"style\":\"invoiceDocuments\"}],\"footer\":[{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":0,\"x2\":600,\"y2\":0,\"lineWidth\":100,\"lineColor\":\"$primaryColor:#f26621\"}],\"width\":10},{\"columns\":[{\"width\":350,\"stack\":[{\"text\":\"$invoiceFooter\",\"margin\":[40,-40,40,0],\"alignment\":\"left\",\"color\":\"#FFFFFF\"}]},{\"stack\":\"$accountDetails\",\"margin\":[0,-40,0,0],\"width\":\"*\"},{\"stack\":\"$accountAddress\",\"margin\":[0,-40,0,0],\"width\":\"*\"}]}],\"header\":[{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":0,\"x2\":600,\"y2\":0,\"lineWidth\":200,\"lineColor\":\"$primaryColor:#f26621\"}],\"width\":10},{\"columns\":[{\"text\":\"$accountName\",\"bold\":true,\"font\":\"$headerFont\",\"fontSize\":30,\"color\":\"#ffffff\",\"margin\":[40,20,0,0],\"width\":350}]},{\"width\":300,\"table\":{\"body\":\"$invoiceDetails\"},\"layout\":\"noBorders\",\"margin\":[400,-40,0,0]}],\"defaultStyle\":{\"font\":\"$bodyFont\",\"fontSize\":\"$fontSize\",\"margin\":[8,4,8,4]},\"styles\":{\"primaryColor\":{\"color\":\"$primaryColor:#299CC2\"},\"accountName\":{\"margin\":[4,2,4,2],\"color\":\"$primaryColor:#299CC2\"},\"accountDetails\":{\"margin\":[4,2,4,2],\"color\":\"#FFFFFF\"},\"accountAddress\":{\"margin\":[4,2,4,2],\"color\":\"#FFFFFF\"},\"clientDetails\":{\"margin\":[0,2,4,2]},\"invoiceDetails\":{\"color\":\"#FFFFFF\"},\"invoiceLineItemsTable\":{\"margin\":[0,0,0,16]},\"productKey\":{\"bold\":true},\"clientName\":{\"bold\":true},\"tableHeader\":{\"bold\":true,\"color\":\"#FFFFFF\",\"fontSize\":\"$fontSizeLargest\",\"fillColor\":\"$secondaryColor:#403d3d\"},\"costTableHeader\":{\"alignment\":\"right\"},\"qtyTableHeader\":{\"alignment\":\"right\"},\"taxTableHeader\":{\"alignment\":\"right\"},\"lineTotalTableHeader\":{\"alignment\":\"right\"},\"subtotalsBalanceDueLabel\":{\"fontSize\":\"$fontSizeLargest\",\"color\":\"#FFFFFF\",\"alignment\":\"right\",\"bold\":true},\"subtotalsBalanceDue\":{\"fontSize\":\"$fontSizeLargest\",\"color\":\"#FFFFFF\",\"bold\":true,\"alignment\":\"right\"},\"cost\":{\"alignment\":\"right\"},\"quantity\":{\"alignment\":\"right\"},\"tax\":{\"alignment\":\"right\"},\"lineTotal\":{\"alignment\":\"right\"},\"subtotals\":{\"alignment\":\"right\"},\"termsLabel\":{\"bold\":true,\"margin\":[0,0,0,4]},\"invoiceNumberLabel\":{\"bold\":true},\"invoiceNumber\":{\"bold\":true},\"fullheader\":{\"font\":\"$headerFont\",\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"subheader\":{\"font\":\"$headerFont\",\"fontSize\":\"$fontSizeLarger\"},\"help\":{\"fontSize\":\"$fontSizeSmaller\",\"color\":\"#737373\"},\"invoiceDocuments\":{\"margin\":[7,0,7,0]},\"invoiceDocument\":{\"margin\":[0,10,0,10]}},\"pageMargins\":[40,120,40,50]}'),(4,'Plain',' var client = invoice.client;\n var account = invoice.account;\n var currencyId = client.currency_id; \n \n layout.accountTop += 25;\n layout.headerTop += 25;\n layout.tableTop += 25;\n\n if (invoice.image)\n {\n var left = layout.headerRight - invoice.imageWidth;\n doc.addImage(invoice.image, \'JPEG\', left, 50);\n } \n \n /* table header */\n doc.setDrawColor(200,200,200);\n doc.setFillColor(230,230,230);\n \n var detailsHeight = getInvoiceDetailsHeight(invoice, layout);\n var left = layout.headerLeft - layout.tablePadding;\n var top = layout.headerTop + detailsHeight - layout.rowHeight - layout.tablePadding;\n var width = layout.headerRight - layout.headerLeft + (2 * layout.tablePadding);\n var height = layout.rowHeight + 1;\n doc.rect(left, top, width, height, \'FD\'); \n\n doc.setFontSize(10);\n doc.setFontType(\'normal\');\n\n displayAccount(doc, invoice, layout.marginLeft, layout.accountTop, layout);\n displayClient(doc, invoice, layout.marginLeft, layout.headerTop, layout);\n\n displayInvoice(doc, invoice, layout.headerLeft, layout.headerTop, layout, layout.headerRight);\n layout.tableTop = Math.max(layout.tableTop, layout.headerTop + detailsHeight + (2 * layout.tablePadding));\n\n var headerY = layout.headerTop;\n var total = 0;\n\n doc.setDrawColor(200,200,200);\n doc.setFillColor(230,230,230);\n var left = layout.marginLeft - layout.tablePadding;\n var top = layout.tableTop - layout.tablePadding;\n var width = layout.headerRight - layout.marginLeft + (2 * layout.tablePadding);\n var height = layout.rowHeight + 2;\n doc.rect(left, top, width, height, \'FD\'); \n\n displayInvoiceHeader(doc, invoice, layout);\n var y = displayInvoiceItems(doc, invoice, layout);\n\n doc.setFontSize(10);\n\n displayNotesAndTerms(doc, layout, invoice, y+20);\n\n y += displaySubtotals(doc, layout, invoice, y+20, 480) + 20;\n\n doc.setDrawColor(200,200,200);\n doc.setFillColor(230,230,230);\n \n var left = layout.footerLeft - layout.tablePadding;\n var top = y - layout.tablePadding;\n var width = layout.headerRight - layout.footerLeft + (2 * layout.tablePadding);\n var height = layout.rowHeight + 2;\n doc.rect(left, top, width, height, \'FD\'); \n \n doc.setFontType(\'bold\');\n doc.text(layout.footerLeft, y, invoice.is_quote ? invoiceLabels.total : invoiceLabels.balance_due);\n\n total = formatMoney(invoice.balance_amount, currencyId);\n var totalX = layout.headerRight - (doc.getStringUnitWidth(total) * doc.internal.getFontSize());\n doc.text(totalX, y, total); \n\n if (!invoice.is_pro) {\n doc.setFontType(\'normal\');\n doc.text(layout.marginLeft, 790, \'Created by InvoiceNinja.com\');\n }','{\"content\":[{\"columns\":[{\"stack\":\"$accountDetails\"},{\"stack\":\"$accountAddress\"},[{\"image\":\"$accountLogo\",\"fit\":[120,80]}]]},{\"columns\":[{\"width\":340,\"stack\":\"$clientDetails\",\"margin\":[0,40,0,0]},{\"width\":200,\"table\":{\"body\":\"$invoiceDetails\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"hLineColor\":\"#E6E6E6\",\"paddingLeft\":\"$amount:10\",\"paddingRight\":\"$amount:10\"}}]},{\"canvas\":[{\"type\":\"rect\",\"x\":0,\"y\":0,\"w\":515,\"h\":25,\"r\":0,\"lineWidth\":1,\"color\":\"#e6e6e6\"}],\"width\":10,\"margin\":[0,30,0,-43]},{\"style\":\"invoiceLineItemsTable\",\"table\":{\"headerRows\":1,\"widths\":\"$invoiceLineItemColumns\",\"body\":\"$invoiceLineItems\"},\"layout\":{\"hLineWidth\":\"$notFirst:1\",\"vLineWidth\":\"$none\",\"hLineColor\":\"#e6e6e6\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:8\",\"paddingBottom\":\"$amount:8\"}},{\"columns\":[\"$notesAndTerms\",{\"width\":160,\"style\":\"subtotals\",\"table\":{\"widths\":[60,60],\"body\":\"$subtotals\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:10\",\"paddingRight\":\"$amount:10\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}}]},\"$signature\",{\"stack\":[\"$invoiceDocuments\"],\"style\":\"invoiceDocuments\"}],\"footer\":{\"columns\":[{\"text\":\"$invoiceFooter\",\"alignment\":\"left\",\"margin\":[0,0,0,12]}],\"margin\":[40,-20,40,40]},\"defaultStyle\":{\"font\":\"$bodyFont\",\"fontSize\":\"$fontSize\",\"margin\":[8,4,8,4]},\"styles\":{\"primaryColor\":{\"color\":\"$primaryColor:#299CC2\"},\"accountDetails\":{\"margin\":[0,2,0,1]},\"accountAddress\":{\"margin\":[0,2,0,1]},\"clientDetails\":{\"margin\":[0,2,0,1]},\"tableHeader\":{\"bold\":true},\"costTableHeader\":{\"alignment\":\"right\"},\"qtyTableHeader\":{\"alignment\":\"right\"},\"lineTotalTableHeader\":{\"alignment\":\"right\"},\"invoiceLineItemsTable\":{\"margin\":[0,16,0,16]},\"cost\":{\"alignment\":\"right\"},\"quantity\":{\"alignment\":\"right\"},\"tax\":{\"alignment\":\"right\"},\"lineTotal\":{\"alignment\":\"right\"},\"subtotals\":{\"alignment\":\"right\"},\"termsLabel\":{\"bold\":true,\"margin\":[0,0,0,4]},\"terms\":{\"margin\":[0,0,20,0]},\"invoiceDetailBalanceDueLabel\":{\"fillColor\":\"#e6e6e6\"},\"invoiceDetailBalanceDue\":{\"fillColor\":\"#e6e6e6\"},\"subtotalsBalanceDueLabel\":{\"fillColor\":\"#e6e6e6\"},\"subtotalsBalanceDue\":{\"fillColor\":\"#e6e6e6\"},\"fullheader\":{\"font\":\"$headerFont\",\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"subheader\":{\"font\":\"$headerFont\",\"fontSize\":\"$fontSizeLarger\"},\"help\":{\"fontSize\":\"$fontSizeSmaller\",\"color\":\"#737373\"},\"invoiceDocuments\":{\"margin\":[7,0,7,0]},\"invoiceDocument\":{\"margin\":[0,10,0,10]}},\"pageMargins\":[40,40,40,60]}'),(5,'Business',NULL,'{\"content\":[{\"columns\":[{\"image\":\"$accountLogo\",\"fit\":[120,80]},{\"width\":300,\"stack\":\"$accountDetails\",\"margin\":[140,0,0,0]},{\"width\":150,\"stack\":\"$accountAddress\"}]},{\"columns\":[{\"width\":120,\"stack\":[{\"text\":\"$invoiceIssuedToLabel\",\"style\":\"issuedTo\"},\"$clientDetails\"],\"margin\":[0,20,0,0]},{\"canvas\":[{\"type\":\"rect\",\"x\":20,\"y\":0,\"w\":174,\"h\":\"$invoiceDetailsHeight\",\"r\":10,\"lineWidth\":1,\"color\":\"$primaryColor:#eb792d\"}],\"width\":30,\"margin\":[200,25,0,0]},{\"table\":{\"widths\":[70,76],\"body\":\"$invoiceDetails\"},\"layout\":\"noBorders\",\"margin\":[200,34,0,0]}]},{\"canvas\":[{\"type\":\"rect\",\"x\":0,\"y\":0,\"w\":515,\"h\":32,\"r\":8,\"lineWidth\":1,\"color\":\"$secondaryColor:#374e6b\"}],\"width\":10,\"margin\":[0,20,0,-45]},{\"style\":\"invoiceLineItemsTable\",\"table\":{\"headerRows\":1,\"widths\":\"$invoiceLineItemColumns\",\"body\":\"$invoiceLineItems\"},\"layout\":{\"hLineWidth\":\"$notFirst:1\",\"vLineWidth\":\"$notFirst:.5\",\"hLineColor\":\"#FFFFFF\",\"vLineColor\":\"#FFFFFF\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:12\",\"paddingBottom\":\"$amount:12\"}},{\"columns\":[\"$notesAndTerms\",{\"stack\":[{\"style\":\"subtotals\",\"table\":{\"widths\":[\"*\",\"35%\"],\"body\":\"$subtotalsWithoutBalance\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:34\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}},{\"canvas\":[{\"type\":\"rect\",\"x\":60,\"y\":20,\"w\":198,\"h\":30,\"r\":7,\"lineWidth\":1,\"color\":\"$secondaryColor:#374e6b\"}]},{\"style\":\"subtotalsBalance\",\"table\":{\"widths\":[\"*\",\"45%\"],\"body\":\"$subtotalsBalance\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:34\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}}]}]},\"$signature\",{\"stack\":[\"$invoiceDocuments\"],\"style\":\"invoiceDocuments\"}],\"footer\":{\"columns\":[{\"text\":\"$invoiceFooter\",\"alignment\":\"left\"}],\"margin\":[40,-20,40,0]},\"defaultStyle\":{\"fontSize\":\"$fontSize\",\"margin\":[8,4,8,4]},\"styles\":{\"primaryColor\":{\"color\":\"$primaryColor:#299CC2\"},\"accountName\":{\"bold\":true},\"accountDetails\":{\"color\":\"#AAA9A9\",\"margin\":[0,2,0,1]},\"accountAddress\":{\"color\":\"#AAA9A9\",\"margin\":[0,2,0,1]},\"even\":{\"fillColor\":\"#E8E8E8\"},\"odd\":{\"fillColor\":\"#F7F7F7\"},\"productKey\":{\"bold\":true},\"subtotalsBalanceDueLabel\":{\"fontSize\":\"$fontSizeLargest\",\"color\":\"#ffffff\",\"bold\":true},\"subtotalsBalanceDue\":{\"fontSize\":\"$fontSizeLargest\",\"bold\":true,\"color\":\"#ffffff\",\"alignment\":\"right\",\"noWrap\":true},\"invoiceDetails\":{\"color\":\"#ffffff\"},\"tableHeader\":{\"color\":\"#ffffff\",\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"secondTableHeader\":{\"color\":\"$secondaryColor:#374e6b\"},\"costTableHeader\":{\"alignment\":\"right\"},\"qtyTableHeader\":{\"alignment\":\"right\"},\"taxTableHeader\":{\"alignment\":\"right\"},\"lineTotalTableHeader\":{\"alignment\":\"right\"},\"issuedTo\":{\"margin\":[0,2,0,1],\"bold\":true,\"color\":\"#374e6b\"},\"clientDetails\":{\"margin\":[0,2,0,1]},\"clientName\":{\"color\":\"$primaryColor:#eb792d\"},\"invoiceLineItemsTable\":{\"margin\":[0,10,0,10]},\"invoiceDetailsValue\":{\"alignment\":\"right\"},\"cost\":{\"alignment\":\"right\"},\"quantity\":{\"alignment\":\"right\"},\"tax\":{\"alignment\":\"right\"},\"lineTotal\":{\"alignment\":\"right\"},\"subtotals\":{\"alignment\":\"right\"},\"subtotalsBalance\":{\"alignment\":\"right\",\"margin\":[0,-25,0,0]},\"termsLabel\":{\"bold\":true,\"margin\":[0,0,0,4]},\"fullheader\":{\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"subheader\":{\"fontSize\":\"$fontSizeLarger\"},\"help\":{\"fontSize\":\"$fontSizeSmaller\",\"color\":\"#737373\"}},\"pageMargins\":[40,40,40,40]}'),(6,'Creative',NULL,'{\"content\":[{\"columns\":[{\"stack\":\"$clientDetails\"},{\"stack\":\"$accountDetails\"},{\"stack\":\"$accountAddress\"},{\"image\":\"$accountLogo\",\"fit\":[120,80],\"alignment\":\"right\"}],\"margin\":[0,0,0,20]},{\"columns\":[{\"text\":[{\"text\":\"$entityTypeUC\",\"style\":\"header1\"},{\"text\":\" #\",\"style\":\"header2\"},{\"text\":\"$invoiceNumber\",\"style\":\"header2\"}],\"width\":\"*\"},{\"width\":200,\"table\":{\"body\":\"$invoiceDetails\"},\"layout\":\"noBorders\",\"margin\":[16,4,0,0]}],\"margin\":[0,0,0,20]},{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":5,\"x2\":515,\"y2\":5,\"lineWidth\":3,\"lineColor\":\"$primaryColor:#AE1E54\"}]},{\"style\":\"invoiceLineItemsTable\",\"table\":{\"headerRows\":1,\"widths\":\"$invoiceLineItemColumns\",\"body\":\"$invoiceLineItems\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"hLineColor\":\"$primaryColor:#E8E8E8\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:8\",\"paddingBottom\":\"$amount:8\"}},{\"columns\":[\"$notesAndTerms\",{\"style\":\"subtotals\",\"table\":{\"widths\":[\"*\",\"40%\"],\"body\":\"$subtotalsWithoutBalance\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:34\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}}]},{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":20,\"x2\":515,\"y2\":20,\"lineWidth\":3,\"lineColor\":\"$primaryColor:#AE1E54\"}],\"margin\":[0,-8,0,-8]},{\"text\":\"$balanceDueLabel\",\"style\":\"subtotalsBalanceDueLabel\"},{\"text\":\"$balanceDue\",\"style\":\"subtotalsBalanceDue\"},\"$signature\",{\"stack\":[\"$invoiceDocuments\"],\"style\":\"invoiceDocuments\"}],\"footer\":{\"columns\":[{\"text\":\"$invoiceFooter\",\"alignment\":\"left\"}],\"margin\":[40,-20,40,0]},\"defaultStyle\":{\"fontSize\":\"$fontSize\",\"margin\":[8,4,8,4]},\"styles\":{\"primaryColor\":{\"color\":\"$primaryColor:#AE1E54\"},\"accountName\":{\"margin\":[4,2,4,2],\"color\":\"$primaryColor:#AE1E54\",\"bold\":true},\"accountDetails\":{\"margin\":[4,2,4,2]},\"accountAddress\":{\"margin\":[4,2,4,2]},\"odd\":{\"fillColor\":\"#F4F4F4\"},\"productKey\":{\"bold\":true},\"subtotalsBalanceDueLabel\":{\"fontSize\":\"$fontSizeLargest\",\"margin\":[320,20,0,0]},\"subtotalsBalanceDue\":{\"fontSize\":\"$fontSizeLargest\",\"color\":\"$primaryColor:#AE1E54\",\"bold\":true,\"margin\":[0,-10,10,0],\"alignment\":\"right\"},\"invoiceDetailBalanceDue\":{\"bold\":true,\"color\":\"$primaryColor:#AE1E54\"},\"invoiceDetailBalanceDueLabel\":{\"bold\":true},\"tableHeader\":{\"bold\":true,\"color\":\"$primaryColor:#AE1E54\",\"fontSize\":\"$fontSizeLargest\"},\"costTableHeader\":{\"alignment\":\"right\"},\"qtyTableHeader\":{\"alignment\":\"right\"},\"taxTableHeader\":{\"alignment\":\"right\"},\"lineTotalTableHeader\":{\"alignment\":\"right\"},\"clientName\":{\"bold\":true},\"clientDetails\":{\"margin\":[0,2,0,1]},\"header1\":{\"bold\":true,\"margin\":[0,30,0,16],\"fontSize\":42},\"header2\":{\"margin\":[0,30,0,16],\"fontSize\":42,\"italics\":true,\"color\":\"$primaryColor:#AE1E54\"},\"invoiceLineItemsTable\":{\"margin\":[0,4,0,16]},\"cost\":{\"alignment\":\"right\"},\"quantity\":{\"alignment\":\"right\"},\"tax\":{\"alignment\":\"right\"},\"lineTotal\":{\"alignment\":\"right\"},\"subtotals\":{\"alignment\":\"right\"},\"termsLabel\":{\"bold\":true,\"margin\":[0,0,0,4]},\"fullheader\":{\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"subheader\":{\"fontSize\":\"$fontSizeLarger\"},\"help\":{\"fontSize\":\"$fontSizeSmaller\",\"color\":\"#737373\"}},\"pageMargins\":[40,40,40,40]}'),(7,'Elegant',NULL,'{\"content\":[{\"image\":\"$accountLogo\",\"fit\":[120,80],\"alignment\":\"center\",\"margin\":[0,0,0,30]},{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":5,\"x2\":515,\"y2\":5,\"lineWidth\":2}]},{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":3,\"x2\":515,\"y2\":3,\"lineWidth\":1}]},{\"columns\":[{\"width\":120,\"stack\":[{\"text\":\"$invoiceToLabel\",\"style\":\"header\",\"margin\":[0,0,0,6]},\"$clientDetails\"]},{\"width\":10,\"canvas\":[{\"type\":\"line\",\"x1\":-2,\"y1\":18,\"x2\":-2,\"y2\":80,\"lineWidth\":1,\"dash\":{\"length\":2}}]},{\"width\":120,\"stack\":\"$accountDetails\",\"margin\":[0,20,0,0]},{\"width\":110,\"stack\":\"$accountAddress\",\"margin\":[0,20,0,0]},{\"stack\":[{\"text\":\"$detailsLabel\",\"style\":\"header\",\"margin\":[0,0,0,6]},{\"width\":180,\"table\":{\"body\":\"$invoiceDetails\"},\"layout\":\"noBorders\"}]}],\"margin\":[0,20,0,0]},{\"style\":\"invoiceLineItemsTable\",\"table\":{\"headerRows\":1,\"widths\":\"$invoiceLineItemColumns\",\"body\":\"$invoiceLineItems\"},\"layout\":{\"hLineWidth\":\"$notFirst:.5\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:12\",\"paddingBottom\":\"$amount:12\"}},{\"columns\":[\"$notesAndTerms\",{\"style\":\"subtotals\",\"table\":{\"widths\":[\"*\",\"40%\"],\"body\":\"$subtotalsWithoutBalance\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:34\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}}]},{\"canvas\":[{\"type\":\"line\",\"x1\":270,\"y1\":20,\"x2\":515,\"y2\":20,\"lineWidth\":1,\"dash\":{\"length\":2}}]},{\"text\":\"$balanceDueLabel\",\"style\":\"subtotalsBalanceDueLabel\"},{\"text\":\"$balanceDue\",\"style\":\"subtotalsBalanceDue\"},{\"canvas\":[{\"type\":\"line\",\"x1\":270,\"y1\":20,\"x2\":515,\"y2\":20,\"lineWidth\":1,\"dash\":{\"length\":2}}]},\"$signature\",{\"stack\":[\"$invoiceDocuments\"],\"style\":\"invoiceDocuments\"}],\"footer\":[{\"columns\":[{\"text\":\"$invoiceFooter\",\"alignment\":\"left\"}],\"margin\":[40,-20,40,0]},{\"canvas\":[{\"type\":\"line\",\"x1\":35,\"y1\":5,\"x2\":555,\"y2\":5,\"lineWidth\":2,\"margin\":[30,0,0,0]}]},{\"canvas\":[{\"type\":\"line\",\"x1\":35,\"y1\":3,\"x2\":555,\"y2\":3,\"lineWidth\":1,\"margin\":[30,0,0,0]}]}],\"defaultStyle\":{\"fontSize\":\"$fontSize\",\"margin\":[8,4,8,4]},\"styles\":{\"accountDetails\":{\"margin\":[0,2,0,1]},\"clientDetails\":{\"margin\":[0,2,0,1]},\"accountAddress\":{\"margin\":[0,2,0,1]},\"clientName\":{\"bold\":true},\"accountName\":{\"bold\":true},\"odd\":{},\"subtotalsBalanceDueLabel\":{\"fontSize\":\"$fontSizeLargest\",\"color\":\"$primaryColor:#5a7b61\",\"margin\":[320,20,0,0]},\"subtotalsBalanceDue\":{\"fontSize\":\"$fontSizeLargest\",\"color\":\"$primaryColor:#5a7b61\",\"style\":true,\"margin\":[0,-14,8,0],\"alignment\":\"right\"},\"invoiceDetailBalanceDue\":{\"color\":\"$primaryColor:#5a7b61\",\"bold\":true},\"fullheader\":{\"font\":\"$headerFont\",\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"header\":{\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"tableHeader\":{\"bold\":true,\"color\":\"$primaryColor:#5a7b61\",\"fontSize\":\"$fontSizeLargest\"},\"costTableHeader\":{\"alignment\":\"right\"},\"qtyTableHeader\":{\"alignment\":\"right\"},\"taxTableHeader\":{\"alignment\":\"right\"},\"lineTotalTableHeader\":{\"alignment\":\"right\"},\"invoiceLineItemsTable\":{\"margin\":[0,40,0,16]},\"cost\":{\"alignment\":\"right\"},\"quantity\":{\"alignment\":\"right\"},\"tax\":{\"alignment\":\"right\"},\"lineTotal\":{\"alignment\":\"right\"},\"subtotals\":{\"alignment\":\"right\"},\"termsLabel\":{\"bold\":true,\"margin\":[0,0,0,4]},\"subheader\":{\"fontSize\":\"$fontSizeLarger\"},\"help\":{\"fontSize\":\"$fontSizeSmaller\",\"color\":\"#737373\"}},\"pageMargins\":[40,40,40,40]}'),(8,'Hipster',NULL,'{\"content\":[{\"columns\":[{\"width\":10,\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":0,\"x2\":0,\"y2\":75,\"lineWidth\":0.5}]},{\"width\":120,\"stack\":[{\"text\":\"$fromLabelUC\",\"style\":\"fromLabel\"},\"$accountDetails\"]},{\"width\":120,\"stack\":[{\"text\":\" \"},\"$accountAddress\"],\"margin\":[10,0,0,16]},{\"width\":10,\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":0,\"x2\":0,\"y2\":75,\"lineWidth\":0.5}]},{\"stack\":[{\"text\":\"$toLabelUC\",\"style\":\"toLabel\"},\"$clientDetails\"]},[{\"image\":\"$accountLogo\",\"fit\":[120,80]}]]},{\"text\":\"$entityTypeUC\",\"margin\":[0,4,0,8],\"bold\":\"true\",\"fontSize\":42},{\"columnGap\":16,\"columns\":[{\"width\":\"auto\",\"text\":[\"$invoiceNoLabel\",\" \",\"$invoiceNumberValue\"],\"bold\":true,\"color\":\"$primaryColor:#bc9f2b\",\"fontSize\":10},{\"width\":\"auto\",\"text\":[\"$invoiceDateLabel\",\" \",\"$invoiceDateValue\"],\"fontSize\":10},{\"width\":\"auto\",\"text\":[\"$dueDateLabel?\",\" \",\"$dueDateValue\"],\"fontSize\":10},{\"width\":\"*\",\"text\":[\"$balanceDueLabel\",\" \",{\"text\":\"$balanceDue\",\"bold\":true,\"color\":\"$primaryColor:#bc9f2b\"}],\"fontSize\":10}]},{\"margin\":[0,26,0,0],\"style\":\"invoiceLineItemsTable\",\"table\":{\"headerRows\":1,\"widths\":\"$invoiceLineItemColumns\",\"body\":\"$invoiceLineItems\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$amount:.5\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:8\",\"paddingBottom\":\"$amount:8\"}},{\"columns\":[{\"stack\":\"$notesAndTerms\",\"width\":\"*\",\"margin\":[0,12,0,0]},{\"width\":200,\"style\":\"subtotals\",\"table\":{\"widths\":[\"*\",\"36%\"],\"body\":\"$subtotals\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$notFirst:.5\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:12\",\"paddingBottom\":\"$amount:4\"}}]},\"$signature\",{\"stack\":[\"$invoiceDocuments\"],\"style\":\"invoiceDocuments\"}],\"footer\":{\"columns\":[{\"text\":\"$invoiceFooter\",\"alignment\":\"left\"}],\"margin\":[40,-20,40,0]},\"defaultStyle\":{\"fontSize\":\"$fontSize\",\"margin\":[8,4,8,4]},\"styles\":{\"accountName\":{\"bold\":true},\"clientName\":{\"bold\":true},\"subtotalsBalanceDueLabel\":{\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"subtotalsBalanceDue\":{\"fontSize\":\"$fontSizeLargest\",\"color\":\"$primaryColor:#bc9f2b\",\"bold\":true},\"tableHeader\":{\"bold\":true,\"fontSize\":\"$fontSizeLargest\"},\"costTableHeader\":{\"alignment\":\"right\"},\"qtyTableHeader\":{\"alignment\":\"right\"},\"taxTableHeader\":{\"alignment\":\"right\"},\"lineTotalTableHeader\":{\"alignment\":\"right\"},\"fromLabel\":{\"color\":\"$primaryColor:#bc9f2b\",\"bold\":true},\"toLabel\":{\"color\":\"$primaryColor:#bc9f2b\",\"bold\":true},\"accountDetails\":{\"margin\":[0,2,0,1]},\"accountAddress\":{\"margin\":[0,2,0,1]},\"clientDetails\":{\"margin\":[0,2,0,1]},\"cost\":{\"alignment\":\"right\"},\"quantity\":{\"alignment\":\"right\"},\"tax\":{\"alignment\":\"right\"},\"lineTotal\":{\"alignment\":\"right\"},\"subtotals\":{\"alignment\":\"right\"},\"termsLabel\":{\"bold\":true,\"margin\":[0,16,0,4]},\"fullheader\":{\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"subheader\":{\"fontSize\":\"$fontSizeLarger\"},\"help\":{\"fontSize\":\"$fontSizeSmaller\",\"color\":\"#737373\"}},\"pageMargins\":[40,40,40,40]}'),(9,'Playful',NULL,'{\"content\":[{\"columns\":[{\"image\":\"$accountLogo\",\"fit\":[120,80]},{\"canvas\":[{\"type\":\"rect\",\"x\":0,\"y\":0,\"w\":190,\"h\":\"$invoiceDetailsHeight\",\"r\":5,\"lineWidth\":1,\"color\":\"$primaryColor:#009d91\"}],\"width\":10,\"margin\":[200,0,0,0]},{\"width\":400,\"table\":{\"body\":\"$invoiceDetails\"},\"layout\":\"noBorders\",\"margin\":[210,10,10,0]}]},{\"margin\":[0,18,0,0],\"columnGap\":50,\"columns\":[{\"width\":212,\"stack\":[{\"text\":\"$invoiceToLabel:\",\"style\":\"toLabel\"},{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":4,\"x2\":150,\"y2\":4,\"lineWidth\":1,\"dash\":{\"length\":3},\"lineColor\":\"$primaryColor:#009d91\"}],\"margin\":[0,0,0,4]},\"$clientDetails\",{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":9,\"x2\":150,\"y2\":9,\"lineWidth\":1,\"dash\":{\"length\":3},\"lineColor\":\"$primaryColor:#009d91\"}]}]},{\"width\":\"*\",\"stack\":[{\"text\":\"$fromLabel:\",\"style\":\"fromLabel\"},{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":4,\"x2\":250,\"y2\":4,\"lineWidth\":1,\"dash\":{\"length\":3},\"lineColor\":\"$primaryColor:#009d91\"}],\"margin\":[0,0,0,4]},{\"columns\":[\"$accountDetails\",\"$accountAddress\"],\"columnGap\":4},{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":9,\"x2\":250,\"y2\":9,\"lineWidth\":1,\"dash\":{\"length\":3},\"lineColor\":\"$primaryColor:#009d91\"}]}]}]},{\"canvas\":[{\"type\":\"rect\",\"x\":0,\"y\":0,\"w\":515,\"h\":35,\"r\":6,\"lineWidth\":1,\"color\":\"$primaryColor:#009d91\"}],\"width\":10,\"margin\":[0,30,0,-30]},{\"style\":\"invoiceLineItemsTable\",\"table\":{\"headerRows\":1,\"widths\":\"$invoiceLineItemColumns\",\"body\":\"$invoiceLineItems\"},\"layout\":{\"hLineWidth\":\"$notFirst:.5\",\"vLineWidth\":\"$none\",\"hLineColor\":\"$primaryColor:#009d91\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:8\",\"paddingBottom\":\"$amount:8\"}},{\"columns\":[\"$notesAndTerms\",{\"stack\":[{\"style\":\"subtotals\",\"table\":{\"widths\":[\"*\",\"35%\"],\"body\":\"$subtotalsWithoutBalance\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:34\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}},{\"canvas\":[{\"type\":\"rect\",\"x\":50,\"y\":20,\"w\":208,\"h\":30,\"r\":4,\"lineWidth\":1,\"color\":\"$primaryColor:#009d91\"}]},{\"style\":\"subtotalsBalance\",\"table\":{\"widths\":[\"*\",\"50%\"],\"body\":\"$subtotalsBalance\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:34\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}}]}]},\"$signature\",{\"stack\":[\"$invoiceDocuments\"],\"style\":\"invoiceDocuments\"}],\"footer\":[{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":38,\"x2\":68,\"y2\":38,\"lineWidth\":6,\"lineColor\":\"#009d91\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":68,\"y1\":0,\"x2\":135,\"y2\":0,\"lineWidth\":6,\"lineColor\":\"#1d766f\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":135,\"y1\":0,\"x2\":201,\"y2\":0,\"lineWidth\":6,\"lineColor\":\"#ffb800\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":201,\"y1\":0,\"x2\":267,\"y2\":0,\"lineWidth\":6,\"lineColor\":\"#bf9730\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":267,\"y1\":0,\"x2\":333,\"y2\":0,\"lineWidth\":6,\"lineColor\":\"#ac2b50\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":333,\"y1\":0,\"x2\":399,\"y2\":0,\"lineWidth\":6,\"lineColor\":\"#e60042\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":399,\"y1\":0,\"x2\":465,\"y2\":0,\"lineWidth\":6,\"lineColor\":\"#ffb800\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":465,\"y1\":0,\"x2\":532,\"y2\":0,\"lineWidth\":6,\"lineColor\":\"#009d91\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":532,\"y1\":0,\"x2\":600,\"y2\":0,\"lineWidth\":6,\"lineColor\":\"#ac2b50\"}]},{\"text\":\"$invoiceFooter\",\"alignment\":\"left\",\"margin\":[40,-60,40,0]}],\"header\":[{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":0,\"x2\":68,\"y2\":0,\"lineWidth\":9,\"lineColor\":\"#009d91\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":68,\"y1\":0,\"x2\":135,\"y2\":0,\"lineWidth\":9,\"lineColor\":\"#1d766f\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":135,\"y1\":0,\"x2\":201,\"y2\":0,\"lineWidth\":9,\"lineColor\":\"#ffb800\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":201,\"y1\":0,\"x2\":267,\"y2\":0,\"lineWidth\":9,\"lineColor\":\"#bf9730\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":267,\"y1\":0,\"x2\":333,\"y2\":0,\"lineWidth\":9,\"lineColor\":\"#ac2b50\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":333,\"y1\":0,\"x2\":399,\"y2\":0,\"lineWidth\":9,\"lineColor\":\"#e60042\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":399,\"y1\":0,\"x2\":465,\"y2\":0,\"lineWidth\":9,\"lineColor\":\"#ffb800\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":465,\"y1\":0,\"x2\":532,\"y2\":0,\"lineWidth\":9,\"lineColor\":\"#009d91\"}]},{\"canvas\":[{\"type\":\"line\",\"x1\":532,\"y1\":0,\"x2\":600,\"y2\":0,\"lineWidth\":9,\"lineColor\":\"#ac2b50\"}]}],\"defaultStyle\":{\"fontSize\":\"$fontSize\",\"margin\":[8,4,8,4]},\"styles\":{\"accountName\":{\"color\":\"$secondaryColor:#bb3328\"},\"accountDetails\":{\"margin\":[0,2,0,1]},\"accountAddress\":{\"margin\":[0,2,0,1]},\"clientDetails\":{\"margin\":[0,2,0,1]},\"clientName\":{\"color\":\"$secondaryColor:#bb3328\"},\"even\":{\"fillColor\":\"#E8E8E8\"},\"odd\":{\"fillColor\":\"#F7F7F7\"},\"productKey\":{\"color\":\"$secondaryColor:#bb3328\"},\"lineTotal\":{\"alignment\":\"right\"},\"tableHeader\":{\"bold\":true,\"fontSize\":\"$fontSizeLargest\",\"color\":\"#FFFFFF\"},\"secondTableHeader\":{\"color\":\"$primaryColor:#009d91\"},\"costTableHeader\":{\"alignment\":\"right\"},\"qtyTableHeader\":{\"alignment\":\"right\"},\"lineTotalTableHeader\":{\"alignment\":\"right\"},\"subtotalsBalanceDueLabel\":{\"fontSize\":\"$fontSizeLargest\",\"color\":\"#FFFFFF\",\"bold\":true},\"subtotalsBalanceDue\":{\"fontSize\":\"$fontSizeLargest\",\"bold\":true,\"color\":\"#FFFFFF\",\"alignment\":\"right\"},\"invoiceDetails\":{\"color\":\"#FFFFFF\"},\"invoiceLineItemsTable\":{\"margin\":[0,0,0,16]},\"invoiceDetailBalanceDueLabel\":{\"bold\":true},\"invoiceDetailBalanceDue\":{\"bold\":true},\"fromLabel\":{\"color\":\"$primaryColor:#009d91\"},\"toLabel\":{\"color\":\"$primaryColor:#009d91\"},\"cost\":{\"alignment\":\"right\"},\"quantity\":{\"alignment\":\"right\"},\"tax\":{\"alignment\":\"right\"},\"subtotals\":{\"alignment\":\"right\"},\"subtotalsBalance\":{\"alignment\":\"right\",\"margin\":[0,-25,0,0]},\"termsLabel\":{\"bold\":true,\"margin\":[0,0,0,4]},\"fullheader\":{\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"subheader\":{\"fontSize\":\"$fontSizeLarger\"},\"help\":{\"fontSize\":\"$fontSizeSmaller\",\"color\":\"#737373\"}},\"pageMargins\":[40,40,40,40]}'),(10,'Photo',NULL,'{\"content\":[{\"columns\":[{\"image\":\"$accountLogo\",\"fit\":[120,80]},{\"text\":\"\",\"width\":\"*\"},{\"width\":180,\"table\":{\"body\":\"$invoiceDetails\"},\"layout\":\"noBorders\"}]},{\"image\":\"data:image\\/jpeg;base64,\\/9j\\/4AAQSkZJRgABAQEAYABgAAD\\/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT\\/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT\\/wAARCAEZA4QDASIAAhEBAxEB\\/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL\\/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6\\/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL\\/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6\\/9oADAMBAAIRAxEAPwD0kT6iVJXXdaC++rXH\\/wAcpY59U+9\\/bmtED\\/qKXA\\/9nqmJuPlOR6Af\\/XpUuHRCD8o9CM1jqaWL5vb5+usa2p\\/7C1x\\/8XUbXOpQddd1pgf+opc\\/\\/F1Thulx1B57ipzIoH3sfVR\\/hRqFiy11qP8A0G9aXj\\/oKXP9Xpst9qLfd1nWSe+dVuP\\/AIuq6XJjzl\\/M+rHj86ljuTnlwn4E0ahYkW81HIxretEjqDqtwP8A2pUp1PUFH\\/Ib1oH\\/ALCc\\/wD8XVQyqMmWHavZhhc0PtYDapPsGo1CxpDUtSA+XWdZc\\/8AYUn\\/APiqaNX1A5U63q6\\/9xOY\\/wDs9Uwcj5WOfRTzUABDHOB7nFGoWNRdQ1Numtaxjrk6jP8A\\/F1MdX1BYwF1rV947\\/2hPj\\/0Os3KvGFUqzemMVD5whbknjjAxj86Wo7I1DrGqj5v7Z1b6nUZ\\/wD4upY9c1Qr\\/wAhrVS3p\\/aE3\\/xVZJuAU3BcH+8TikS6GQMhpPTg\\/rRqBr\\/27qvT+2dVH11GX\\/4ulGt6sWA\\/tnVSPX7fN\\/8AFVlmd8ZZdq+o\\/wD1UhmV12s42nrRqFkbX9t6mqZOs6kCP+ojPn\\/0KmnXtVCk\\/wBs6qR1\\/wCP+b\\/4qsXfGg2ocnsN1Kk7KuNu0dTxmlqFjaj8R6mykHVtV3Z6i\\/l4\\/wDH6cNd1VcA63qjHt\\/p8v8A8VWTHdfKQGwKcWZ\\/u7XHtRqFjXTXdWHXWdT9s30v\\/wAVTh4k1dQf+JvqLfS\\/kP8A7NWPG4UESZU9gP8A9VIZPKI4IB\\/uGjUDZHiPWsYOr6muPW8l\\/wDiqcvifWG\\/5jOoJ7fa5ef\\/AB41lfaUf+IH6U2AomcyIc+wP9aNQNf\\/AISTWe2taifpdSn+tTnxTrSAY1i+Pt9sf+rVhCYHo3\\/juKPtYTopJ\\/2WH+NO4G9\\/wlmrr11nUfwvW\\/xpB4z1cMQNX1FuehupB\\/I1giQMclT+JpWkTHdP8\\/hSA6H\\/AIS7WTh\\/7Zv+ewu34\\/Wm\\/wDCW61jP9s354\\/5+n\\/xrCVuATkjseaa8odDgk0Aa7+LdcJx\\/bWoDtn7W\\/r9aRvF2tgEf2zqAPOD9qf\\/ABrn2uC7k8dfpmlnkAj5f5T05\\/SncDpdP8X65HqVp\\/xOb6U+cnym6cg8jqM9K96\\/aD8R3mj\\/AAN8Q3tpPNaXf2TaksUhV1YkDhhyOtfN3hhs+IdOUqWU3CjH1PSvo79pD7LD8C\\/EMdwuRJbBIwf75I2\\/ripd7j6H5r+KPiv4yhuXEXivXI8KBhdRm9P96uHk+Lvjdpc\\/8Jn4gA9Bqs\\/\\/AMXR4uu\\/Nu50TAG7FcjtAfB6k4zXSYnaR\\/Ffxxt\\/5HLxDk\\/9RSf\\/AOLqKT4teOFOP+Ez8QEA\\/wDQVn\\/+KrmkxtI7gciopyVYZAz6UAd7afF3xoLQv\\/wmGvHA5J1Ocn\\/0Ks+6+LvjdiSvjLXwe\\/8AxNZ\\/\\/i65mzkJjkjP3faqsn3zjnnJJoA6j\\/hbvjk8Hxl4g6f9BWf\\/AOLqZPiz44BH\\/FZ+Ic55\\/wCJpP8A\\/FVx\\/Qe3rihW3Px07EDqKAOuf4t+OCWx4z8Q9f8AoKT5\\/wDQqWL4teOB18ZeIT\\/3FZ\\/\\/AIuuTGSrY6Z701pMD\\/CgDrn+Lfjlj8vjLxBg\\/wDUUn\\/+LqM\\/FnxyOP8AhM\\/EPoT\\/AGpPz\\/4\\/XKDO4n24BFPJAOcgY6UAdWfiz45C5PjPxD0\\/6Ck\\/\\/wAVUY+LPjkgY8Z+IiP+wrPn\\/wBDrl3dSeB9eajHB657kCgDrf8AhbfjkjA8Z+IQfX+1J\\/8A4uhvi545PI8Z+If\\/AAaT8f8Aj9cox44zgU0A4PJIzQB1p+LXjnd\\/yOniEDH\\/AEFJ+v8A33TV+Lfjk9PGfiHr\\/wBBWf8A+LrlACV5GO4xSHIzgZOeMjrQB1Y+Lfjof8zp4h\\/8Gs\\/\\/AMXQfi345Rs\\/8Jn4hPbH9qz+v+\\/XJ5U89D70jctwQD+lAHW\\/8Lb8dcZ8Z+Ic+2qT8f8Aj1TRfFvxuUP\\/ABWfiDP\\/AGFJ\\/wD4uuNOCeB26VYt8fN3oA67\\/hbPjgL\\/AMjl4hz0z\\/ak\\/wD8XSj4s+OWjLDxlr5AOONUn5\\/8erkJTzgfKB0p9ucQli2MngE0AdQnxX8cs2T408Qge2qTn\\/2elf4teOFGR4z8Qbv+wpP\\/APF1yUYLHAPHXk9KkkZQhVdpJoA6T\\/hbnjndz4y8QdP+grP\\/APF0J8WvHOB\\/xWniE\\/8AcUn\\/APi65XqT245+tNY7iDnAoA7Fvi545IGPGXiAf9xWf\\/4unRfFnxwAzHxnr+7\\/ALCk\\/wD8XXIrgoDuOAe1IXwRk4oA6g\\/FzxwW48aeIP8AwaT\\/APxdMHxb8dcg+M\\/EOPUapP8A\\/F1y7LkjHOfzppGAT0xQB1n\\/AAtvxycf8Vp4h6dP7Vn\\/APi6T\\/hbfjr\\/AKHTxBx\\/1FZ\\/\\/iq5Xdkc5U9fSkAHHTHvQB1y\\/Fzxzjnxn4gBA6\\/2rP8A\\/FUjfFvx1\\/0OniE\\/9xSf\\/wCLrk0Hbj8KR2DA9\\/egDqx8WPHWT\\/xWniL\\/AMGs\\/wD8VS\\/8Lb8ckf8AI5+Icf8AYVn\\/APi65LkDvinYIIOcjv7UAdbH8XfHB\\/5nPxACRk\\/8TSc\\/+z00\\/FzxxuGfGfiHA7f2rP8A\\/FVyyozPsGc+nep7PT59QvobWCJpZ5nCIiclj0xQB7Jb+OPGFz4UbU\\/+Eu12Nkh4QapPyemfv+4NeweAdCvPib4o16PW\\/irrfhwWNrZrDawahKXlZrdCWwXAwD19zXIeNPhxp3gL4F6bcT38n\\/CRzNsvdKljw1sAepHX0\\/OvOvFlhp3iDxFcarpvjHTLZJ0iCxytNG64jVSDhO201F77FWsVPG3jnxn4T8Y6no8HxC1nU4bOdoVu4NUn2SgHgjL19O+E\\/hjfa34M0JLzxz4ntte1XSX1BZX12ZWRgoI2xAkMvIydw9q+SR4CjkYsvifQpGzyTeEZP4qP1rttK8UfEHR9MttO034gWCWVtG0UMKatF8iEYKgt29ulJ3toCaW56D4ff7J8FbHxv4n8eeNla41OSw8vTtSc9AcH5nHTBPWuh8NfD7Ur6+8H6bf\\/ABI8ZfbfE9pJf20tvfyeVDEBuUPl+WIPOOBXgs2l+LZ\\/C0Hht9a0y40S3uTdxWi6pblVkIILD5s9zX1Z8OPG3hnwL4V09TrI1OSwtRFbWhuYJbiJmUeYu44CqDnhX6AVMm0tGUrM8z8MeDvEF\\/a+F4dT+JniuHUPE93Pb6ebW9leOJY2K7pMyc5OOBWX4b+HPxR1S78WSap491\\/StF8OvPHNqQvbmRZ2jZgREocZPy\\/rWb4PvviloXkabpwtJbGG6eW0u7kQzNZl8hnjOSUyDkgZrsfjB4f8QWHwz0fwT4WsdR1uWadtR1vVIYnH2i4YfdBOCwySfwFF2na4tDzjxDB4+0fwT4V8RWnj\\/wAQaiPENxPb29ol9cCQeW+wH7\\/O7jj3rofFngv4heDtPcaj8VNQt9YjsU1GTTp9SuYzsbqiSM215BkEqKwnn+JK+A9N8L3PgWS4ttL8w2F41lMLm2Z2LMyurAA5xjjsKl8U+PviF4k0iS31XwX5+oS2iWEmpT2E0kpjUAZVWJVHOBllAJxVXYaGp4r8IfFbwh4ZbxLH8Tp9R8O\\/ZvPXU7PW53jaTgCAc\\/6wk4x9fSvMdJ+NPxMv7yG1tPGfiKa5lYJHEl\\/MxZicAAZ5JPFdrB8Z\\/Fen6Dc+Gr3wZDN4OmtVtn0Y20kaqR\\/y1V+SJM8lufpXkdhcaj4d16HVNOgnsZ7WcXFvvUs0ZVty\\/MQM4x1xTV+pLt0PcpvFXx0+HXi7w1Z+K9a8SafBqVwiJFfXL7Jl3AMOT6EZHUZFefeP\\/il42s\\/EF7bweLtehtEuJ1gRdTmGEWZ1UZ3c8D9K6ef40+JPjJ4+8F2uvbVjtNSjdVQN8zsy5Y5Pt2ry74hKTrrS7i4leZwCen+kS9Py7U0N+RMfi345PTxn4hA\\/7Ck5\\/wDZ6T\\/hbPjvkf8ACZ+If\\/BpP\\/8AF1yu35gPbr0oC7s55BqiTqx8WvHAbB8Z+If\\/AAaz\\/wDxVL\\/wtrxzyf8AhM\\/EOPQapP8A\\/F1yjAIOvPpUa5LYxt47CgDrn+LfjkjI8Z+IRz\\/0FJ\\/\\/AIqj\\/hbfjkj\\/AJHLxBnrj+1Z\\/wD4uuUjG0+o96kRBu5A5oA6j\\/ha\\/joYz408QE\\/9hSf\\/AOLpU+LXjoLj\\/hM\\/EOR2\\/tSfn\\/x6uVnID8Dvio1k\\/izkfSgDrn+LPjrcSvjLxDt4\\/wCYpP8A\\/F0w\\/Fvx1\\/0OfiEn\\/sKz\\/wDxdc0kvG0qMetRuPn469R2NAHUr8WfHP8A0OniEH\\/sKz\\/\\/ABdPX4ueOA4P\\/CZ+IOf+opP\\/APF1ybgdsH1NNiBJGT06ZoA7F\\/ir44wGXxl4hPv\\/AGrP\\/wDF0yT4t+OBhf8AhM\\/EC+\\/9qz\\/\\/ABdc2TgKAQv0qvdMxc8g49KAOqT4teOiePGXiDPr\\/ak\\/\\/wAXTf8AhbfjoHnxn4h+n9qT\\/wDxdcxEGI4+maRT8w4yAfXFAHXSfFvxygX\\/AIrLxCAQef7Un\\/8Aiqif4t+OOCfGniH3\\/wCJpP8A\\/Ff5zXNStuUEkn0AqCT5jkjB9KAOpPxd8dYwfGniH8NVn\\/8Ai6QfF3xyAD\\/wmniE8\\/8AQVn\\/APiq5PqRn+dKv3s9qAOs\\/wCFueOjyvjTxCOOB\\/as\\/wD8XSD4ueOTjPjPxFgeuqz\\/APxVcpx0wc0cY5INAHWj4u+OV\\/5nTxDgk\\/8AMVn\\/APi6P+FueOSf+R08Q4x\\/0FZ\\/\\/i65IrkcGlPC8gD07GgDqm+LvjpTj\\/hM\\/EJ\\/7is\\/\\/wAXRXK5UZ3Lk+9FAH22dzj7mffP\\/wBapYEKxnG4Y9+P5U1CAQPnxnsSRT2jDZKuVx2DYFZGoI28Zyn\\/AALGakc5HUj6DH8qqr5g\\/iz75zTstxuYP\\/vc4oAkgmZt29wcdN3NSEsBgv8AmwqBUOT1P1B\\/wpvmOB87F\\/QelAFmWRSq7MK3c1MjBVBZicj1AqtE5J+62KimkdP4QQT0Y0AaQ+f+79aa7YHrz3qiXMigOFAHT\\/IFSLLIv+7260AWGk3rtGQfYU0u4GCcL7kVHl+pOM\\/3s4pPM7BVz\\/fAOP5UAPMrpzuDKOwPNKtyWwC2F\\/u96rnyw5Zid3pt4pyy7XG1QB6gEGgCwZwjZUN+INAuBM20kDPY5zVaTcZN5II6fNk\\/pSoCxB+Xb6KMGkBa\\/wBX0xgejc\\/lSiZGPKknpzVUsqTD5W+pOTUruGOcZx03LRYCfzI1+QgBj0\\/yTUgYRAgsqnthg38qqKGdTkLn6UgYx8E4J6Bs0WAtK+8HMu3HtSI2z\\/VnGeuTiq5fb98Y9Nn9aXz8\\/ecKe3NFhNliSUqfmcH6im+cX+58nqACM\\/nVYjd987iO4JGKkBiH3irH\\/ZH\\/ANaiwx73ix44x9R\\/9amC5kUk9j0yMfzqIuT985HbjNRSXRAHU\\/T5aLAaBnYKCxU\\/pUQu9rcufpmq6z+YAC2O\\/HWomuI9xXauR36GgC\\/9oO3cQwB+vNK04YYwCPXPas03IOQJFwP4Rjio1uc5yQvP5e1FhXNZbr5l54zzzTRMBxwTWclySB0z\\/P3qUtkk8DsPrRYZ6T8DdPg1bx\\/YCUKRExkGR3AJH611H7enjE+F\\/hRptpGdrX16A3OCVVGOPzxWT+zhZC48aCXONkbZPrxjFcp\\/wU23ReFfBmDhDdTA+n3BUfaB7H5\\/T3L3Vw8jMTk5OTnrURiB6dj6U215Ygj8KsFsMMHmukyGpCWTLYUD1qvMSzf496mnuCAVHpwMcVTyScdqALEBwpI55596lcAxhiPzpLWLzEYE9TyKLsiMhFbgdRQBAeCcgZPOaarAPjocUEjJzwe1Mxg9MAdKAJy6hc45xTHbdzjBHfNHfPUYzkUmARQAuMlcjnPGacxxxweOtGCF5OSO9R7gR7ZoAGIJHGD3oUgn\\/Z44H+fpTm4OQcD86Z0Hp9KAFU59fqKX0JAOKavB\\/wAKCcg55zQAO2M9TntSglsj3pvXtn1ozznGKAAZOTzj1pBwDzu460vO0EDtk0oU9uOfzoAaQec8VZhASJifx4qsefqKsx\\/Kh5zngUAEmVOeuelA4jGMnrxURbccZJ\\/z61aVMxrzkA0AIzbUJxzj8qrE\\/PnJ49RxUsz5AHIXHWmiPoT39BQApGw881GTu6E4qe44Xr254qsCS3PA\\/nQBLswgP3hTMhScd\\/xqdiMKecEVGFyRt659PrQAiL16g4710\\/gf4eav8R9TNjo8AeRV3SSudscY9WY8AVzRIX5VyDjBr2DR\\/FkXw08FaTaRjf8A2rMLnUERtrvECMICOmcNSY0UPHH7O3ibwNo8OqSta6jasdrPYyF9h9+K8ve2kjJDIy9sEe9fd1h+1z8MrbwjBbRfD4nTI1WJ\\/N5XdjucHJ964G+8S\\/AvxVqVrOthdaf50wMsEM+UQE\\/7QB\\/I1mpPqiml0Z8qWWm3d9cpBbQSXEzHAjjXcT+VdBq\\/wy8UaFJHHf6JeWryxiZBJERvQ9xX3d8NtJ+CkfjGCDRZZtN1C2USR37Ou4naCcqwII69PSvcfG\\/wOsfHVkuq2eqy3WqRxnyJwU2yL12kgcex7Zo59dh8vmfkF\\/Y90JZIzA4Mf3l2nK\\/WrWn+G73VZ\\/ItbeSWb+6q5Nfeup2N18Ilng03w7aaXqFxKZb+41mKO4EyDqUyMY6HINfO3iXxhP478bDUp9NS10Z5yJrLSUFp5qDgMxUHk9faqUmyWrHk7aHp\\/hmWWLWJ\\/OukH\\/HnZkNg\\/wC1J0HvjNdh8B9F0vV\\/GSXN9rK+H\\/scguLZjCJSzAkhcnAH1Net6x+zx8OPGmitfeF\\/EN\\/o2tCIvJp2r4kRiBk4kCj26181tDJpG+MyL5schhOw5HHfPcdaaakLY9k+MHxR0XxFqmrypd3OoXl4cTXbxgbwDjgZAA\\/CvGVTRXBLPMD\\/ANcx\\/jWbJM8vyn5s+gqJYJCAdhz24ppWVg3Nd7XQsDFzMoP\\/AEzz\\/WnHTtHZsf2gwzxkxniskWrgDCN+VAtpHH3SPTApiNZdL0vzCv8AaYx\\/eEbU\\/wDsbTV4GrRg9fuMMn8qp2Oh3mpTpFDbyySMRhUXOa90+Hf7G3jLxeYZr+IaLaSjdvuR+8I9k6\\/nipcktxpN7HjiaDZkjbrUPT+62P5UsugxwSjydahJznKswxX2PafsHeHNKhRtS1nUbiXIAEISMH8CCaS\\/\\/Yq8GNEPLv8AVLVscvJNHjP\\/AAJBWftYl8kj5AjsL1WIi8RopHTFyy\\/1q1AviNBui8TuvP8ADqLD\\/wBmr2nx7+xZq+kxLN4f1AaojZIhnHlOfQK33Tn8K+efEfhbVfC2ovZ6nZz2VwpIMcqEfiD3HvVpqWxLTR1BvPGcDDy\\/FN0c9NupsR\\/6FUy6v4+Vd6+JLyT6X5b+teds7tnLk+lAkZf4iD6DjNVYk9ETxF8QkZJE1e9aQHKuJQWB9j1pdU+G2u+IbfTZ9P0+7v2jtlSbyk3nzN7u2e\\/8Qrzr7TKp4kZenAatjRfFOpaLcRTWt5PEwOQVkIwcj0+lFuwEHiDw5eeH7g2+oWclhOqg+VOpQkH2NZC\\/I3TPHPevqr9p7W7X4l2XgS1mhU+IW8OQ3MdwmA0smSXjb1yoyPcY718qFTFlSCCDgqRzmkndXG1ZiO3y4C8HikVdo4JAx9KHJb2FPQlT2xjpiqEHIz6\\/SpYiRnI5qPzMr79OKWNjjB7Z6mgBkzAuTjg8c0q44J6E+lI6ZIYgk9eeaAcEKOOcn6UAOGAcZ+XpwaYww2TyPU04Ody4wOajcnK45oAl4fBGM05htXI69qi6kc9KlDl1YAE45oAUPlA2QSO9Qu3PI\\/KnRjoT1NOuArONuMfWgCOFm4x1p8q54A6\\/rUPKHJPHQEGpjl413AFSetADS3yAdulRuM5znr2p5wM9gfXmmdAQOCTgYHFADM88YGOc0uMHkhiOSelISc4wKU478H0xQAdMAdR7UcbuvFKOBgc59KUc9B0oAMZABAPamk9dtKWOecfWgn0GT1oAFOB1\\/KilPXg0UAfcn2MqcBR9QabJD5bAFyp7DOa62TR8Ngj9f\\/rU3+yEA5Rfq3NYXNTk3tJnGQCQBzzUcMT\\/ADbAR69v6V1v9lkfdVSO+FoOk89C305xRcDlngc427k+hzmjyHTqG\\/76rqptKiG3aFTPoKhfSsAYyP8AdWi4rHMPbStxGOffIqbyH2gfMx7gEHH510aaU0hwB09M019J6blP6Ci4zBjj8okhGyetJIrkZbp25NdDHphPBG76DNK2njOAMH0\\/yaLhY5tY3Q5J+X64\\/XFOWMh93Dg\\/w5FdCNNTdyoz7innTDj5Yx7HFFwMEKWXlSAf4dxxUbQMX9I\\/7o5\\/Wt4Wwjk2kDI9amWxjcbmA9yRxRcDnDbHblVKj+9\\/9akFuSOFJfs3T+tdCbFFn4K7Mfwnj8qc+nggsqk+4xSuBzgtCp3OhLDtn\\/65oa2LvlYiB0rfFi2RlMj1PWpBp6spyM\\/rTuBzzWzp\\/wAs8D6A01bZpOQgGP71dLFpaMhOChz0HFL\\/AGWMEnIPpwc0XA5l4HJGUA+gNJ9lVPu7UPtnmujFgCPmBX8c1GumqP4jID6Y4ouBzxtXbG5yf94EUvlPGOAy59Oa6NNKQZwhb3Apw04t1yfSi4WOSNsFPR1z7VH5BP3uR9K6waNtJ5FMj0vax2BGPei4HNmEoo2oM\\/7AOagZJQxOQeencV1SaaFdtq5PfcOKa+knO7YCSem00XCxzDx5UHysMOS1RSRMcDGD06V1i6M5OWVQp6Y7VXbRjheGGB0p3CxyyhlySPmJ6elTB9\\/94Y9q220fC\\/OvH1pY9Ey\\/3SPTPcUXEdn8ANSnsviHYpF80coZHAI6YzVn\\/gpFp6Xfwp8Pzuv7+PVFVGz0BifP8h+Vb3wK0JI\\/HFrOQp2xsQPf2rnP+Ck+oJF4I8HaeCMz6m8hX1CREf8As4qFrK43sfnH5TWrk54NSIcgsQMe5q1qMaJcFeMA8iqN1KMbVAx3IHIrpMivM+45GeBnOKYvBGeR6inqd2M\\/dPt+dPKhV7jJoAlsZdhZT355qO4+aX8KbCDvOO1OZgT83A5\\/CgCEZLd+vA9qV+Ae\\/wBaVjgDv2zSPgAn37UAJ91cEcdMU+IgAYJx71GPmyTyfSlPAxgCgBztzz0xwabgHHc+lByTnrn09acxxxjJ9hQAHjAOf51Gw3ZPY8c96cCeh60hAzzn0FAAOT0+bvSHgZPPtTycggmmjIYg4PrQAmdo4BFIecg+vel7gZ4pqkb\\/AJufxoAcFJ4zgYz0oY7gT1U5pq9+Mf0pwIHJGcetABkkjPGBVhV\\/EjpVZR82R261YjzkDt3oAcYtke48M3Sn2xMybB0J6Ypk7gtjoPWkiPlozZJI7YoASVMyHjg1Iqsyg456CmOfM29QCccVL\\/qFGep60AVnLMSDz1\\/Smfdx39sVK5AHDZHtTFwBk9e3FAEo5UYwD3qSIEZJwTkVEZRgjIxShio5PXpmgAb\\/AFgGM89q9D+K9qirouyPymFqibTxggen415\\/YWz3l\\/BEiF2dgB6nmvadVtUvvE1xqmpxK9ppEQQI33WcL8q9x2\\/SgDgPEjNofg3TNJZNsszfa5SDn733Rj6fzrjAxViwByOhzWl4j1ibXNWubuRi29jt7cfSsxgMkZNAHReGtav5tStAlyEkh4h3nb+Ga+vvgl8dvElloqfZdTeGWFissDgMjYPcYxXxFGMrnPNbmh+LNV8OzB7C+kgA5Kg5U49R3qWrjTsfo34o\\/aCt9Z0fyPFfh7TdWtEIYRzISN3r\\/OuY074ieBtWieTSPAGgxyEdie3qBXyr4M+JPiHx54n03SLqa0SKVtru0eBt68847U2L4j3vhnxDqUdilvCIpmSMrHnGDjPJxWfIXzHb\\/tJfGeS6t7PRNFS10eBlLXdtYWwj3H+H95jJHXgHFfO1hIJo2VhnBLHnnp\\/9avV9B1ez13wl48utX0yLVNUeFTBfzKpa3JlTlR26np615RbKRJMwwBtJrSOmhDd9SOBlMyYHGO3pV44IIB57VQgx56YyDt6DtV\\/B7Z\\/CqEKE3kDbknk10Hhvw\\/Nrt\\/BaW0DXEsrhFRFyST0wB1rEi+ZwOeK+yf2NPhhHHHP4pvoSTnyrMyICM4+dunUcAYPXNRKXKrjSu7HqPwR\\/Z60r4Z2EeoarbQ3uvEbhIp3CH\\/ZQHq3vXdeN\\/i5ofw+0432qXUdtGoIMRYF3H8OOMk+3bvXIfGf4p2fw60K41q4YtLGhitbUNhWcg4\\/HIPPBHzelfnf4++IOsfEHXJ7+\\/unnmkc4jDHbGD\\/Co7AZrmjBzd2bykoaI+pPHn7dyTytDo+lOYF5WSWXYT+Azn8a5TTP24dXt7pDdaak0WeQly0ZIz\\/s4\\/WvDPC\\/wa8YeM7c3GlaHd3sI48xY\\/k9\\/mPFQ+Kfg94t8IxedqmhXltCp5lMZKD8RxW6jDYycpbn298Nv2nPCXxCuf7PYtpF\\/ORiC5ChWb\\/eGFYnjhh+NdX8QvhXoXxE0prbUrNZWCEQyqfnibnleffO05B6gkV+ZVtcSWkoaMkFT696+yf2Ufj1LrLJ4R8Q3QkkCYsLiUnc+P8AliWPfup7EfnnKny+9EuMr6M+evib8NL74fa9LYXkYdcZiuE5SRfUHH5jtXFi1RtxKgem7jFfoX+0F8N4vG\\/gW+EcGb+BDPaOqDBcDO0E8qHUdB3HPQY\\/Pm5BimkjZdrA4IPY+lawlzozkrMqi3TB+QDB+lVpl2Soq4UYHvnnrVzgg8gdfWqE5zcgZB6VoSeqfG6\\/uINY8HKkpjkg0K0CuvVTgkEfQn9K4DxjYl7i11UbVOoIZJEXAKyqxV+nqRu\\/4FXoHxKtoH8b6RJcspgg06037idoHlj+ua+jfgHZ\\/BX4rfDu38H+IrW1tvE0ks7x3oUJKQznaVkxxgH7p44qL8qHa58LLjH6U5IwPTHTNejfHr4PX3wS+IV94duX8+EATWl12mhY\\/K314IPuK85xx7Hoaq9xETsqsQFHPTmkRiox+lNDbpO+Peng\\/N7ZxxTAeGynHb8qkjiWXOfrioG4HAz7mpoWAYAnBoAjnUI30\\/SoepAHJPepJypc9jTI8Ejn3oAM7Tg5P1qSKUDoCR796a6ds4BpI1yw7885FAEyxfODk8+tRvgyYUY+lWWXKbhxjqKp53OTg8+lAD5VBAGQD7UoyAAemfpmkcAlc8H1FOY4XGckUAMyNvTtjimB8A8d\\/WlYDA6\\/j3ppJA5GfwoATGcYwO9Gfm4HHbJo+7jnHsKCevp\\/KgBS2M5A6cYNG44yOPWkJOMd+tA9OaAAnt1OfSkY4GdxJ5FKMk49PUUuDg460AAfA5BooyO6hvfGaKAP1AksxtJJfGOmCaqrYKx4RvqT\\/wDWrrPsYB5O0+gBFNktV3j7xPYjGK4bnVY5SXTiSNrFB6AZzSppaAHPBP8AcGK6z7GT\\/AW+i002YTrETnuoxRcVjl20raBujK\\/VhzUi6Sx+7uH14\\/pXSvY7MY3HPoc\\/ypfspb+EH60XHY5T+xmBJTAbuc4pr6Gz\\/fYe3Oa6o2UYz5jYHbApRp4XlSSD0zRzCscf\\/YzDpGG+tKujeWS21CT2C12n2RIxkuV+nFBslYA9vU0+YLHGDS8HO1RTTphZiuVA9xgV1zWK7j8uR79P0pfsWPuxqvuAaOYLHHtpLDOTlfbOKP7N2oQBkex5rr1swW+YfUYofTkdiAuM980cwWORj01QM7HLe5pTaqW2FWX3B6fpXVf2WoO3AI\\/EUh0tS2wKQPXGaLhY5gWSqwVcn3LUj2A342BiR1INdQdLEJ4yWH+zx\\/Kmm1dpAGAXP0FHMFjmf7NIH3WVe+1TilGl7uUIIHXd1\\/pXUnTdpGN\\/4Hikex3NnaOP7opXCxy0mnqCNylj2Ix\\/hQunJz8pH511P2Mt7Un2Be0RH+8MU+YLHLiw8rgLnP8AdWiTTiOkefoa6g6aScjI+vNLNYsxGUQ\\/Q0rhY5MaZ6qE+oxSrpUjn5cD6viusuLAkLsH5Uw6dgAsD\\/KnzBY5X+zZ4+3meyij+ynYZEYDd811a6eAeRx6daP7NGSVDH6CjmCxyn9nM2EZQoHc0j6duBJXGB1JrrhpJI6HJ7EVE2k4IGOBz9afMFjipNP+XCx4FA03BUhOQOufrXZS6aDkbcKPbio\\/7KIOQn0J6mjmCx0PwSsvK8RMzH5whK5PavFv+CmLSR\\/8IExz5Hm3AyPXCV718OY2t9diwoGeCe4HNeT\\/APBSKygufh14VlfIuU1U+WB\\/dMT7v5LVQepMlZH53akwknZuo9h2rLlb94cDAFamoKEHc8dDWd5QlYY6n1rp2MBsRyd3Hp+NSScLuOTxT0tHywI4FDqdpBz16GmBXixux+tSeSzZOPl9+KbCP3ygirVy2IwB24\\/xoApSHB4+nrTCTxnn6dh70Dk5JxilzkdQcjpQAnBB9+1KCRn68c0mdx7mkwDjGfegBckcfzqQuQRyPY1GQAAQTn0FKOvuT1oAGBDE+tISfpTjnnA7Z5ppOTjjn0oAFUdWA6cUEkEjGM+opSD6Zz7dKTByQc4z270AB9\\/wpNuRnAz9KP4T0FABBGeOOnpQAm8dj2pQMDPb60dCMDnPQUDOBk8fyoAcvJ46+v8An6VMnLk9hzgdqjhz6DjualtlUAnkc9c\\/59KAGynGcAjPSlTCwjPQnvTJMNjByM9qmjUNCQfXPtQAsYBQHPH61FLKHbK5YU\\/cVjxgHng4qJRngYJ6YFACxkbQDgn2phY7jz+tOVcqc4xnFRtwdvb0oAk+Vfm+tKeRjOMGlUDy8cgg8ZphHTj8cUAdF8PLcz+KLV8lVgJmPfAUFv6V2PjzXHtPCVvZ5dLm\\/me4lLdWU9M\\/rXO+CIWtLPUb0xsQiCI7e248\\/oKoeNtYbXNUDbiY4kWNPTgUAZOoKtutukeOYwzH1Y\\/5\\/Sqe3cRnrUk1yZooldAxj4B7496iToD2HtigCUJ26ewNKgx0\\/wD1UB\\/vEAjk0xiAc\\/pQBoaRez6dercW7lJEBAYds8f1ok1GWW6kldss7Fi3rnvUdrbXE9ndzxRlooUDSOP4VLAfzIqrvBBB5Y\\/pQB6Foni60t\\/h94i04QKtzPEoEv8AEx81D\\/IGuNhYRGUnvH1HvVCGcpDMnB3AD9RVm5LREKVI+Toe9ICOFgs4boMVeEhx0zxmqEOTOvPUA5xzVsENkk9PU0wNHTwJJkyO4GOa\\/SjwJp3\\/AAj3wh0S0skEdy1nCPm3NlnAZs45xyfzr8z9Nm26hExAAyM1+qHw2mj1D4fadJhZF+xRMCwBx8lc9bZGtPqfEH7W\\/jq41\\/xydHWTdZ2CL+73ZBkI6\\/lt\\/Wqf7K3wXg+Kvjgf2ipOlWQE90BwWXso+pFcD8U5JL3x7rMjsSxuCCc556V9W\\/sCyRJpviSMAGcmE89Svz1cvdhoStZan1jaaLpejabFZafbRWlnCoVIUXAA9hXJaxoC6oJYJo45rdsh1cZBXnrXVXJ3E549+xrA1KdzbOFBGTjOe1cSZ1WR8FftR\\/BK18BX8et6TEsWmXR2vboDiJwO3sa8T8M6vcaHq1te2rtFNBIsqOpwQwOc\\/pX3Z+0zoyah8JtUllkAMQV13gdRXwfbWjQyZweBXdDWOpyyVmfp3pniAeIvBtrqscgCzWyXAUdMsnmDH4rIPbcfSvzx+MGmDR\\/iR4ghEflA3LSBAQdu\\/wCYAf8AfX6V9jfs46pcaj8MLC1ljLRw2+xXJz2uD+fP6V8m\\/tF3Yl+LuujG0oUQ5GOQoHas4aSaKlqkzzgHkj\\/Jqm2PtQJxncMgcd6kL4YHPHeq6tvuF6\\/eFdBkd38a74t4yaGMeWgtrf5QcgHyl9a47RdWuNK1O2u4ZSkkLhgVOO+cV0vxfmE\\/jq86jbHCmT14jWuZ0bT\\/ALfqNtbL96WQL+ZpdBn0Z+2L4ibxTpfw41OSNSZNNkQTA5ZwChCk+27\\/AMeNfNG4Ku7nHavZfjjdb\\/h98P4CAZIYJVVs9RhAf5CvFeoGSQOORSirIHuB5OcfTvTgeMcdacpXAyQCfWpBHGR83BxiqEQkllPb8KdEyj5iTmo3+90zTQCpGS2D+FAD5ARk9ulM4GDjPXjFT7tykYHTFRFmXjHTrxQA8fPnPapNg2ccFj3qEY6Z56YHSnr8yHJ4HPFAErECM7W\\/A1Vbjg5571NGh689CeT1qNlDM35ZFADx93Jxz2HWo1U5\\/vHpUikoMZ601lGDzgjgmgBjYK+m3rnmkyNvAzj1oY7cUmM8cHPrQAu3jByO1KAN2OPfPemEAkng0vQnoMc9KAAls8nPFHH0BNGcdCOnOKNu4Afn9aADjGR+vrSkjJ7ZpAuCR2zTsYOOmeaAGnGfu5opdq9yDRQB+vj2QZtxTH4809LUbCAq8\\/3jzW0lgCMjgehqVLPKkgMAOw6V5h22Oa+xlTgryac1gGPzIDj2roVstxycD6Ch7UcfcOf7v\\/1xQFjnBZq33F2+uTmhrDI5DfjXRLYqv3g3PqaDZhj8mfzphY53+z8fwk\\/Wl+yE8DPHbFbz2YAGCzH0TH9TSNaDA+Q575WkFjFXT2TkqSD0701dMy5+TH15\\/St4225QHUAds5\\/pSC0TPAP4UwMRtOBGBkGmpprI+5ThvUDn+dbXlEuVBC49qPszg8HcfzpBYxnsmIO4\\/N6sKQWpC7e3qpNbi22\\/5Tx64z\\/hSnTlHRst6YP+FAWMH7ASM7T9Tn+tOXTn25zx\\/d6GtxbQK2G4\\/MfoakEJUDaAV9zTAwPsH+zj680osMDorH1HFb32fc2\\/A\\/AUpgBGTjPp\\/kUAYSWTFcAED2JxSrYsoOFU+5Fbf2LzGDbM47jj9Kc8QTjAOR1IxSAwTaMcEqP+Ar\\/9ehrLzMYLPjru7VuRW4AOwfrmkFuc4ZTzQFjD\\/s8L0Gc\\/SnjTdmdij34xW2bHB4+X8RUhsfL6MWz68UAc8tishOE3EetPhtkjY5XcPQtjFbEln5fJAOfTNOWyJzuyw7AHpQBgpZK0jHaG6nC54pDZIGPBHsa3jpoXklgD\\/d60hsA4wuSfpz+tAGILNuMISvrjik+wAHBUZPQitv7EVBHUjtTfsuc9vw60wMF9PBJHXPWk+w7SOM10C2hK8DP1pGsse\\/4GgBnhO0EOtROi\\/lXhv\\/BQ6bz9D8HW\\/JP2mdxg8DEYFfQegWxj1GInjPb0rwT\\/AIKE6YYfB\\/hXVMk+XftbEf78bHP\\/AI5j8a1p7mU9j86NZZhcsueecin6LZmU7sZAGeOag1WNmuX4LHPOK2vDcWLdiwxgE8iu05yrqbpECADkce9YryFzjktnvV\\/Wd0k5ABK881TgtmlKgdDgH2oAIICULuCADjk+9JNLnICnFaN0qQwKgIPviqbQeZjBwM54oArEErgDgDnmkyQOQFHqakLAfLt4HeomJPB5oACOMEc+tA25xyCKB7np2xSjHXIzQAw8DnPPFKGIwcEnvinFc9DzSdwB0HqKAEDHaM\\/lQBkk9T1NBxjnk+g7Ui8AEflQAoyehIGOlK3IwBjHWms3Unn8KX7vI556CgBAOeeSOvFKCSMDjJznNJ9QfpQuTjGPQUADtjAHP49KQkhSMdKXAI565oUZI46DigB8Y4Y9B6ipYvuMQSOaiTIA4PIp8TDB9zzmgCSCNdzZzxRCS0jDk5pCML1685otm2Ox\\/Qj+VADpUKRgnrzUKL8o7Zp8jmQ\\/iaAuAT+FACMpQ4H\\/AALHeo1U98etOLZPbPrSZZR2oAfjzDinxruOevI5FRq20YOeantY2nmjjQEuzBRigDs9v9m+BhuAV7tvMLnnIHC4FcK24rwT6nvXa+NZhZ21rYB1zCio21uMgVxjctkjp6UAM5yTjoAeKVFywHXnFTQ2slyyxxRmR3bAUAk\\/lXr3gj9lP4k+NbZbqy8OXNvbsOJbseUD7jdzSbS3GlfY8icBMjr6c9KgKl2AHBPHvX0RffsO\\/E62tyfsNq5\\/urcAmvPvE37Pfj3wcjyX+gXBjXkvBiQfpS5k+oWZw9jqcmn6ZqFoqZF5Gsbc9MMrf+y1lgnB7fhVq4hlgZo5o2jdTgq4wR+dViuOf596oQighhjuRWjqLg3TqvZVHH0qvaoC6jA65z3qzqJIvJMjB4I46cCgCGElZjg5OMc8VZU4PrjqKhXHmHJ69ambIQnHbGKAHQt5UofkAc4HWv0M+AHiaLxd8GrFDO\\/nWkQhmwSpwmQRx1+Qsfwr87w2ZMkfSvdP2XPi+Ph94pOn38mdN1IojFj8sb9mwT781lNcyLg7MwPj\\/wCFbjw38Q7szR7Euvn3ZyN44b9RkexFbP7PHxim+Efi1Lx0aXT58Q3USgcoT1HuDyK+lPjp8IoPiT4d36c2buMB7WXAYNj+HIGSQOMd1CkZxXw5qejXvhrUJbK\\/he2uImxiQEdPT1HvTi1NWYO8XofqjoXjLTPGOmRX+jXsV7Yy\\/ddeo9QR1BFaVrpsd8kjyghB27Cvy38OeNtW8PP5mn6ncWTH+K3mKfng109z8aPFup2j2t34g1CWFxtaM3LhT+AOKxdHszT2h7n+1n8QdLvoI\\/DOh3ou0WTdeSRn92COiZ7nnnHTpXynNZSTzxW8ILz3DhVVe\\/Iq7e6qJN29i8mOFU8mvZ\\/2evg3d6rqsfiPWonRUx9lgI+YnqCB2b0z9TwBnbSETP4mfQvw40RPAfw8gjk+SK2tvMlZjjnbj9f3p\\/L1r89fiB4hPijxtrmqFt32q7kkBxtyCxxx24xX1\\/8AtY\\/FeHwb4TfwrYTh9S1CMrKIiAIk4B9wMDaPYe9fDmSQDnk85zU019pjm+hKhO0jk56ZpsRAmQkHO4fhTsnAHPTkVJp9lNeXsMcUbO7SABVGT1rYzPQvix4Vkmmn8Q2m+4sxcC1upQOIn2KyA9+RkZ\\/2a5Lwmjwaj9sVf+PWNpRnpnHH86978M\\/DLx7N4h1VbPwve6jpF0dk1ndQMtvdIR0ycDKnBB6iqF3+zN8RNOub5LTwVf29jO24Rr++KDOQNw6\\/lUKS7jszzb4sasb7T\\/C9pni2tXOOvVsf+y155jnnn8K9c+KXwq8Yxa7ufwxq0dpbW8cKyPZSBSQvzHOMdSa85k8ManDIUksriMjgq0bVSaAyGAOfUdeKfk7R\\/LNaZ8M6nKpKWVwcekTcfpVSW0lhZlkjZG\\/2lwRTEUFPzcdfWn8lRzux7YpWRkIG04pD83H64xQA9Tngj8ajkyXYj0p6YYc8MOlNbgkAZb0x1oAQHDZ6fpz0qaIgkqx4P\\/16hK7fQmnQjDgnkZ70ASqdm\\/bkKOntTIcMTnr1xUszKVJHB9KigfZkD6c0AMUHBOeKDyDkZI70oAXODupmPmH+NACZA\\/wFABJ9B70ZAJOOvWkZjyBgY5zQAAcdsZoPytjjP6UuFYjsetJjGB6UAIvJyOKXOR79KUHaOOaOgxzj19KADg5\\/WlXkZ9OKQg7\\/AMqABngcd6ADax\\/i\\/QUU0xljkAkdqKAP2r8puoXKdyc0CEN9w8e2ak4A+6R+VCmJgQcg9twrzDtEEe3g9\\/Rf\\/r1G0aRdC3PvViOJdpyyn6ik+6Rzu9+aAK6x5\\/8Ar5qXYyj5V2\\/U1OwDfeyPqMfzoxs5P8qAIzE6gFSmT\\/eP\\/wBaoPKyT1z3weKu7QevzfX\\/APXTWyeMqPwoAqvEGUZYcegpoXYfkYZ9xirqgjrIf+BEYpphOSc8f7PNAFIws3JwfoaUrhcbMf7W6rQQZ4x\\/wI0pRTwFQN6gc0AUvLZuOKkjjMZB4OOw61b8r5ecA+pNG0gYwGHqKAKcsRkfeFwfQjmnJAeCR+fFWzGAvCnPpmgKNmcAH0J5oAqta5O\\/BGO46UnlAnlVYf3gtXUAKbSgOe+OKaYwGxwoPYHigCqYUz8r49iKcIsg\\/KG984qw8aIeevoOaEhEwJwVA6hqAKvkIOq4+vNKqLHnBJJ7VO0K\\/wACKo796WKKNchTj2OaAIj+7GGBXPoM0BC+cBR\\/unNWRG46BU\\/HNL5Sxjs+fagCmItx+Y\\/9881KEJ6Fv+BDNSiLHTA+uaaUGfmJFAEflNn5SM+wxTmjLDHf2NThMD72fr2o2A9Tn2oAqiHJxs\\/Ekc0nkKMcDJ6VbwD8uwKB\\/FnrQRg5A5z\\/ADoApPDxx3zkHpTktxk4xmrDId3T8KXAIJIHsaADTkEF1G\\/Awe1cZ+1p4Dj8e\\/BLV4iha408DUbcg8howc\\/mpYfjXbxEKynqQfpVrxr\\/AKZ4B1qJcbpLGZeeQMxmtIOxEtT8WvLWfVzGMMGbr7VpXcjwOttbryeGHtTNMVbY3U7AbkYqDnvT9LnEUUt3KSxbODmu85Qlt0gT96AXIrBkuY4nZUGOcetWtT1b7QxIPPTHtWI7fN1Bz60ATvOH78+ppskpIODx+VQA8Y\\/HNLwf4j0oAQ9cnp+Ypw57ZWkVgByuacsmOSuT6gUAD53L1GTxTRgNnqe\\/FNLg5GM+9Lx7k0AP4ALHOPamFyQSM9OtLuI6Dj1poxnigBdvCnrnnmg4GcHHqB60hznOMg+1DEdP0H6UALlieDmkZvXn3oC9znn16UDg+g60AAILYJ6dMUvIOM8dPwpvfg9evpQeDjt60ADEg9MelOVx0HWjrjHSkXGSMcnvQBJzt5FLuOMk8j1700sWAwPwoTJPPftmgB8hGM\\/lSwnlgWz2wKjYkEc9OaIzhhnt1OaAHovz54NPkYqDxknrgUzooIJ4HNNZiy5yc460AIvzMRjJpCMcjsKmWF2ACIWPsCambTLt1O21lIPcIf8AP\\/6qAKeMHGcexrofBUSnXInbkQgyY9cc1Ss\\/Dl7PIB9naIY\\/5aDb+Ndro3h1fD9leX8sgkfy\\/LAHQZoA5XxPefbNWlccc9qyoYmmfaDkngClupjPPI\\/Tec8dq9z\\/AGP\\/AIRj4nfFC0+0xB9N09lubnK5DAHhT9aTdldjSvofQ\\/7G\\/wCyrBbWdl418T2aSyPHvsbSUZAB6SEfyr7S8sImFAVQOg7U2zgis4IoIEWKKNQqIvAUDgCpM88dDxj0rjbvqdCVitNAJEwwGO\\/Ga4PxxoEV5YygqAcHt1r0dl+Xgg+1YmuaZ9tt3XHOOKhrqNM\\/Pn46fC6xv5ppzbKkwPyzRDDc+uOtfK+saNJol48ErZIOVYdCK+5Pj5puo+GdWzdRSfY7g\\/JIq\\/KfYntXyV41torqORQMvGcqc84rtg7o55bnF2Dr5xJPHqata26yXEZAwAuKylyj8np34qzcztLtbJOO3rVkiwkmZs9hU5bC5IwMc1Wh4kPP4VLg+uQaAHlSw68ds0+NZFcleSvIPcfhVzS9NfUZgiIzbjgYHX6V9m\\/s5\\/sWf8JFa2niDxYGt9OcLJFZbSHlHXJz0FS2luNJs439m\\/4\\/X8SJ4a8RQTXViFIhvArFkwcgMV5wDzuzkV7N40+E3hj4sRh5FS4mcF47qAjzQxGclSQG7fdIPqpNdx8cdM+HngXwUdPis7bTH\\/5YwWCKJXb6Dlia+ePB\\/wAP\\/iRrkr3Hhuxl0PTXYGN9YkZDICeP3Y\\/xrn0fvLQ1V1o9Tjdc\\/ZN1KK8dNM1W3ZhnMNxII3X\\/AL72H\\/x2su0\\/ZV8UNOF1C9s7SAH7\\/wBojbP0G8V9Z6Z4e8caRbBNU1jTriUDkKHX9DxUd7p\\/jUh202XSXmYDCyFxt\\/FR\\/On7R9w5UeWfD39mTRvDZi1K6L30kbBo5ZvkiBHfkAn6Krf71aHxa+PmifCrS3stHmS91oKYkRV+VB3+gz3ySccnisjWdf8AGGl6\\/HH44gvbKyZv+PrT1MtqAD\\/GcBgPevT9T+BXgL4yeCoUVYUvDHm31ayKmVTjjOOGX2P6VLet5DXZH5y+JfEd\\/wCLNbn1PVJ2ubudixdh0yc4HoKzghcbR2\\/zzXr\\/AI\\/\\/AGY\\/GPgvxtF4eWwfVJLk7rS5so2aKdPUHHBHGQele9fCf9hiG1FtfeMbo3EzYc6dZ\\/dB9HbjP0H51u5xSuZKLZ85fCf4I+JPizqHk6VabbWNlE15IcRxA+\\/c8dBX3p8Gf2WvCvwyjgu2tBqmrquXvblQcN1Oxei\\/zr0Twx4RtvCljHa2NjFYWUWAkMKBQPw\\/rXVwlRGPT19a5p1HLY3jBLccjmEKFX5QMcVoWV4TIqt096ypJ0XCscfypqXyRN8rZz71kaWOuRUdScZ7c1UudF0+5bMtlbyMP4niBP5kU6xvFcA542AkVaDBgcHJHb0rW6ZmZ6aPZRcJaxKv+ygFeafFT9mTwJ8W7eZ9S0uOy1VlKpqVmoSVTjALY4YfWvUZ2K5PrVNb1kIBywz371Kdh2ufkD8aPg\\/rHwZ8XXeh6xHypLQTp92aLJCyD646dQc156sKBSMHOSCK\\/Wn9p34MQ\\/Gf4eTtZwQt4h09Gls5HXJcYy0eevPb3r8qNc0e70LVbiyvYGiuoTseN1KlCOoIOOa64S5kc8lZmRKAmcHAHtUagk4ADetLJGxY54HXmmcMccjmtCSUjd69elHcDApFYZxUk6bSpHGe4oAZIxZffpTI8Bj2PQ4p7sVAUnA9qjDbCOM9896AFYAuTxz6U0HJHYHqacxGDzt+lNxt9v60AH8Pt1z60ZCjPHJzmkAz\\/EM9vSlxkYHNACDJA7++aM4HofTFAAHbvSgY6jA6k0ANxgfX2p643cDPvSE7cEd+lOA5POMUAKELJk8Zpqr6jHHSldjgDpz0FKqluilqADA78ewFFO2SKP4vwFFAH7XINq7VHH5\\/qKD8pA8wL7ZppuAvVvm9sChLncp5yPVmrzDtJVTcDj5\\/cdqYFZeFHB9aaZXX7nzL3xQsu4cL9cmgCVk2Ab1LZ\\/vc0wuvTIH\\/AAGkE4boAmKR3I6ZP+9QA9DgnOR6YGc099qgE4we5qJHZMlsYx705JFcn5h\\/wHrQA7IUZyT9OaCN3RQ30GDUYkidiGUcf7WKmQqPuqPxNAAN2MYb6Hn+tMVgJdo4ceuKewJHHyn1BpCUVQTs3dznBoAUtjpnf6gcU5G3L8zc96i8w\\/eHI7Y5pVIJ3HIb0FAEjAA8fMPbg0g2hs9\\/TPNNZ167mLf3etKpJIJ3H\\/ZJH8qABmYvnHye5p2FPzKAT24oLheCMfzpNwPIHHqaAAYkIL4D9gBTzI8fykkE9sVGdx5Vm2jqB0\\/lR9\\/nI49DQAKhXOVx+NAwDwfyo80\\/xAA07AH3QqjvQAoBPcj86bKSCOcfWnMFJBB59uKduY\\/fz7bcUAMH7vkc59R\\/9ekRNhJjKsT1p4K+o\\/nSE47E\\/pQAhC+mT3FKVYgZYAelPDK3DYSlUhDnJx+FADFRlOT0HIpQhySfwoVsyEc89Of6U9z8oPTNADDHycDAPJGKZs+bkA\\/hUgOAOp7UoUZ4IoAaEwenJPQ960btFm8PXaMOGgdf\\/HSKpIm0Y6GrmsyR6Z4Xv7mYiOOK2eR2Y4AAUnk1cSJH5D+I9CXSV1OGX5Cbl8jPoxGK4jUbnyYUhiPycnjvXa\\/EHWItQhuJyf3s8rygg9ixI\\/nXmTys3XPXv1rvRyiSuWzk8+tRM2D7HpSswOQST7imkcYIz\\/OmAAANxgADp70uQ5Ge9Aw56EfWrEFvlgWBGfXtQBDsLKeOvGKCmMZ464xU0jYYqO2ah3HnHPpzQAHI+h74pvOcfhT44zM2Ogz17f55qzPbpbBeQSRgjNAFQqeCelOJCqMgZ6cCgsxzwc9TxQE\\/dD1HrQAn3uAOD1oMRXGBnjin5AJH3cVJChdwD8vNAEBUsAQuR9elNVDgEAgVdNvxwc9+OamgEMZ2su5gO\\/0oAz1gfaeDinLbMO+MnvirV1ImdqlTx1BqJYpHXIBJ9cZoArlcE880hUg9unr2qV7Z14ZeT270ht5FXIXdxQAzp9AemKaOckDp\\/KnEEE8EDpkUsUDzkBELHOMCgABwOnNCKXYKBye2eauwaDe3EoAhdQfUcV3Hh7wUIwJrjCIhy0j8L9KAOV0vw1c37hdpOTxjmuos\\/CekWMRe9nMsvURRjP4Zq3eaqmxYNNUwQA4aZh8z1mDyBKI2O9jnJFAGvY39ppwZ47eKKPBAz8xxTJvGeFMdtC8hPAITr9KqBraBCoCk9PmOSKgj1SGBj80aKpyMYoASe\\/1a7bKW4jzyWc4FW9dvJtP8JfZ55d087lmCiqcviSCWRUQNKx6bab8SJPLmtIAwJ8tSVBHBwM\\/59qAOLDE4Az16HjFfop\\/wT70C30b4c6jq7Jtub65KbsfwJ\\/8ArNfnQBk5A9ua\\/Rn9jTUJbb4MWMhyVF1IpPT0rGr8JpDc+tIrpZOhIz0qyMkHn61xFlr6iQq7j6Z6109tfrNGPmHIHtmuVO2hvY1MBgOSQD1qjeXEUbbCwDsOKp6nq5soAc\\/M3Ari9f8AGkNtMUbB29CCMihu+wWsbPiDRrPXbKW2vbWC7hY\\/NFMgYH86+Kvj\\/wDsmT281xrHg5HlUF3m012BwOv7s\\/0P4V9Oz+PknmWONixYZYjoBVpNUN\\/KTwQ\\/XmhOUHcTSe5+Reo2ktneSQTRvFLGxVo3XDAjsQaVeY2weQc\\/Sv0D+Pv7LmmfFFH1XSiuma+qn59vyTYBwHA7+9fBOs6Je+GtUu9M1C2ktby2kMckUgIKkGu2ElJHPKLiVI+47H1q5axrM6LjAz8xz27VShbBfJJHcGuk8I6HNr+sWWn2ymSe7mWJEHU5OBx9TVkn1V+xh8AIvFt+PE+uW27RbNisEbdJpRjjHoAcmvrn4nfFH\\/hE7S20rR7V73Vro+TDbQJ93HU56AAfy4rM0WPSvhH4BttHtJUhh0y3JkaT5CzYy7kH3zzXMfDa1S5S\\/wDHWpPNO+o7XtLacbTGn8ChfU56981xOV3c6ErKw7Rvhjpmg6k3iTxLPJrmvSqWQ3O0CNe+0fdRR6mub+JP7R+heBQ0F9qIWVgf9DswScdhgYJ+rMo9BivP\\/wBo\\/wDaBPhO1nsrKZbnWLkEeYp4Ucjf1+6D90dyM18N6zrd5rF\\/Nd3k8lxcSsWeWQ5ZietaQp82shOXLoj6g1P9tmW3dk0fw9bR24PDXDLvP1AX+pq34d\\/bZik1C3Ou+HYpIQwYvauhYH1wy\\/1FfIhJbqTnPU0u49ug9619nHsZczP0r8J\\/GjSfikEi0y6tdctijm5srlPJvIuOAiHIYEk5OSAMVPa+FLnwNrltqfhKdI9PvJ1F3YSH5MMTlwP4WHPTg455FfnF4c8Tah4a1OC+0+7ltbuFg8c0TFWUj0P6V9o\\/B342XPxN0kxrEp8R2Ua\\/ardCAL2IkDzUHGHDYzyANxNZSg47bGilfc+x9M0xbrbNNmbjueFPsPyroUs4oUUqg2j9K8f8J\\/FKDyxDNIrTRHZKquCG9xivRLHxRa6haLLbTJMnQ7WBZfqK57W3NdzbuUjnhKNjIGAR2rjLi8aCSSM\\/IFPH0rVl1+FshJFMnXaDzWHqGo2kS7pZVMh68iluMilvgE67U75NYc2u+VceWDvIPas3W\\/F1vasVEgz7Yrlr3x3Z2iyTzfdAxzgfzquVibsew6R4jYJvkYKPU8cVv6f4njmOPMDZ6V84+L\\/iTb6H4Ri1CKcwPM5RU3DLYGSf5V5fp\\/7RkttMB5ryMxwcN\\/OqVOXQhzSPu2bVoyhKNuPfmsC61QLLkMeMHHt618\\/aH8cTfomZTlx8wByRXXaZ4yOr3yMjDbjnP8qlxa3LUk9j2zRdVVx83APGa+b\\/ANsH9nuDV9Hu\\/GXh\\/TUm1KIGa9iRctIoABcD1GBkV7bo8+4REEkBsnA6\\/wD1q7aBkvLYowDKw5UjjHvTjKzCSTR+QmmyaPqUkUF3YW6lmGHbI\\/Cq2qeH\\/C811KkkF5p+GOJI1LKCO\\/evsT9qz9mrw1Y+Hb\\/xBoVuul38ObhreL7rnqdo7fhXxj4X8SypcvHcTLvzgLcnCfQmu2MuZXOZqzsUJPht9q+fStShvAeiOdjfkaoXHgbWIEZZrRo9vViQcV6TKIWCvKlowc7gkTFSPTBq\\/BNhjIjybCn3GO9c0yTw2TR7vzjH5RxnGc1et\\/C15OoICk9MbhnFezS+HdK1tcvtguQNxaP5c\\/hXNeIvh\\/d6bG09nceaijovNAzzTUNCvbFj5sDbem4cis9oJUGChX6iunv9R1KxZobmKRCp6svBFT6RfMxSW6RZIN\\/zKy9vWmI48q4wSOKltdOnnU+XGXH+eK9abT9F1C1eO2SNpCNwxjmsMwy6QDvg2xDgsRQBxcWi3LAkxEY61N\\/Ys0zgJGwPof8APtXomi32nagskbpskbOWyOawNVM2m3rqUIj6rIBwfegDIPhi6ihLeSWCjk8UyxgUTFHgwT7ZrsPD3iCCa3ltZG2uw6sRVK9gezV5fLEqZGCgoAzU0i1nb5o9rE\\/rVR7BbO4ZF6Z5BrZ03ULfK5XkHGO9Z3iO3ltr77TEC0LgE47UAPaxU4IUdOflorNi12WJAuzHsc0UAfsKsyD+ID2IpJJwp+7n3GSKzRcZIPzA+g6U43W4gnj9K8w7S79qB\\/iA9hxUnn+nH+6f8Kzjdj0z+NMa78zk7xj1wKANYT56\\/J9VzmmyznA2AE96zDd5+5sHrtANAnUZ2HB7\\/wCcUAabTMyjAyfrihZMdMj1yTVDzmABUZPsaX7QABzz3GaAL5usfekB9iKd9qjx9\\/b78is5psAbUOfpmnjlQc\\/gRQBoG6CqCrkmn7w0YYlgT3LEVnIcN8x49lqUXAYbdpC+uKALokATAy3uOaRZ2U8sAvfJqj5iBsBefU08Nuwc\\/gOtAF37QM7sjHqOtKXwPMVz\\/KqYkI+X5j7HrSBsN0T\\/AHSeaALguAwydrP68GnLLuTaRye3SqbP\\/FgKB2HIpBIGO4ED2FAF9SI+GH5GnMwz8gBHfIFUkumII2Z9zz\\/KpI2dkY8YHrkUAWhKP936Gm5Y+h9dtVVnDdvzOaepVDyoXPvQBZTaAcMB9RQsqN0O76D\\/AOvUDNj7rLj601Zy3I3J+X9KALSzkE9RRGWUk56\\/3sVX+1GTv0oDM\\/3WGR14\\/wDrUAWjIF5JT6f5FOzuwV5J9M1VV2Jxu59uaUOMnK49wKALPmsRtYYA6E\\/\\/AKqUMGPJIHt3qsZECnao3etSq\\/HrjtQBYz26EelIoySMZH9ajEmSB360\\/wAwAt0P1oAs2oDzICc5P5157+1742TwR8A\\/EE2\\/ZNfoNOhx\\/elyP5Zr0SwXfcIOgznNfOf\\/AAUTnVPhLokDN80urIwX12xSVtTMpn5ueIL95p+G4AwB6Vj7sZHGccjFWb9w0jswwfzNViQvT9a7TnGgDcO+KeqmTG3qamtLMzK0hGI1HJA600uq528dRjFAFiOCNIQ5+Zjxj0pHuSR82AfXiq4uG2lex557U0ZbIX9OgoAQKZn+U5J9K07fS1wTKe\\/SiygFsGkkGDjjP86iuLwzMQCQueRQBO2yFGCEY74HNZ0hMr7epz19anMchhGASTVm1tlgAeU5J6A0AKtksMGWHzHByRiqLRNPIUjXJyeP5VpX0uUIB6jpSaRZOxL7sKfagCsunMGG8dPSriac+zKrwPUd6uumWCggfpTmjIQKrHgde1AGJO3kZU561S3l2L9j+tXb92MhRh6c1paRpcUkaySKW9j2oAyobFpG3EYXrVz7U0PyRr0yOlaupWvlx4jTBPoO+KlsdMVFDNg4BOD2oA52Q3U0ofysiuj07T\\/tESh4xkDkYxV2aOIQ7QVQAjsOaii1HznMUJyqgjp3oAiudCsokLMOTxj0rX8PeGPtEyx28Y3d2YcCqtno8+p6jFDFmaaQgAKM4zX0F4T+HR0jThEWRpyoeWQ8Accik3YaOEs\\/BqW8D3V84isrcbpJQMYFed+KvFf\\/AAkd4LWwQQWEJ2qFyMj1PvWx8aPH\\/wBtuJNHsJCtpC+19jf6xh3P0rzGG+S1hZCCXY5JX+VJdwNbUNX8s+UiBUjxgDqTiqlvDqFwWaGNgWH3sVni7leTeqjI5x1ratdWmWE+bNtxwAB2qhCweHbqeUNc3QiGOfm6Vfh8PaSjDzZ5JmB6JyKzH1W2AJLNIx67jgVWbWdvEKDOeCoxQB2eiwWUeqxpBbJGpbq2Oe9cv451A3usP8gG0EfKPcmtHwjHez38l5IreXFEzAMD1IwD+tcrqUxl1CZzk\\/McUAVkwznP6Gv06\\/ZD0VB8C9PgkTBuC7k98k9a\\/MeMb5VXPPYV+sX7L+nNY\\/CLRISu1hECQfU81hW+E1prUZ4ue88MSJPIjGBcLvHX2NdL4S8Ww6np6zI+8AgZB6V0Ov6DBrVpJbzqCCOvQCvnjWVu\\/hTrJldHOnSn53jB2dep9DXMkpGzdme761rUFw4G\\/JUFtoNeQeLZxNK7K2XboKS88Yx3FvHdwymWGaMFWB6Dg4Nefap4gN1PguwQdVB+97ZrSMWiZNNWOy0gJC4Bbcz8swFdxo8zeWMqVyOM8cV5PpWvELgjCL3brXZabrKysqLIOeFFEkJM7p9ZhtVYuV3KNxA54rxb47fBXRfjRpL32myRReIbZGME0ZA83vsf8uD2r23wloMd7ALuZRJCc7VZc+Z\\/tfT0rXuvB1nIoeJfInH3ZE4P\\/wCqs0+V3RbVz8htZ0S98O6td6ZqMDW15buUlicYKmvZP2P9FGu\\/HLw6jr+6tWa6YE9QiFh+oFet\\/thfBQXWny+J7SELqlqo+0FEOLiIZGf94cfhXkH7IeryaR8Wo54n2v8AZJsfiAP8a7ObmjdHPblkfa\\/x61W6ubCx0y1EZe7uoYZPNQONjN8xI7jAPFXfHd\\/D4Y8Kwxq3lRWFtuAAwAxwi\\/kCx\\/CvMfiFr66r4w8EveTuhOqqEKqCpYRkAHPTgnnmug\\/aY1GK28Ba4PJTzmtXMc3n4YMofGE7jBbn3rlStZM2vuz8+viN4tn8ZeKL7VJmwssmIhg4WNeAB+FZmgeHZtduURNqIW2734H1P6VQnXknhua7nwBetp1m52bhICFbH3fp9f6V29DmOv1b4J6bo3h03JvjeXZIC7JAoJ74Xk49zXmep+E7hYZZYI3eGIEsxHQDgn+Vepy6jc31ms7FsF8AuvBqlq73TwfZbdl2SjMjbSO3Q8UkB4sylH5+X3rs\\/hd4vn8C+NNJ1aIlVimAlTs8ZOHU+oKk1i63oU+lXUSyhMPkqUOc44qKOLymjcjPI6c03sNH398UfDt9ofhW51\\/SgzPGHlTzHXEqAblxtGFAXdx9PSvEtI\\/aEu7MxvulgkKgsNzAgYB\\/qK+jY5GvfBlt5iOUGjRo+4HaGMRPXOOjemeDXBfCj4aWN54HivxLYXUzHi3VBJIowBk55HTI9iK54tWszVraxzI\\/avURhVu0U456A1iaj+0mtwxL3ikg5zvPT1\\/nXyvr1omm61f2qMWSCd4gWHUKxGT+VVUB9iORgitlCJnzM+mX\\/aJ0kzHzrppBnLMsbGuN8WfH8apdotpDJJbx5KhztBPqRXiWTkE8\\/UU8Eg+vOMCnZCudt4g+KOreJnjNzJ5UUS7Y4kJ2qO\\/41Fpt\\/kqXlcswzjFckgJAyckVt6Spk2AHnpmqEeq+FNWukliijctk449K+g\\/AN5ejyZXH7pHwxzy3r9a8T+EukyTyqz5S3DANnktx\\/Kvq7w5p9vcaVbQwQhdvPIOGHsR\\/WsJuyNYq56zoBX7LDJuK5QfKRXbaVLlF4AXtXnugWLSeSgYNCnCc5GOwNeh6dCYwDyOMHk1ydTfocP8AtB+EX8WfDTWBb5F7BbvJHjjIA5Br8k54X0bxIY7kBRHJ8wPIzX7YXUaXFrPC6ho5UKFcdQetfmB+1r8ILjwR4zuZI4G+ySkPC6oQrD6+vrXVTl0MZrqeUpok+pStPY6krhTkLkjb6DmpDYeKbGVQka3BXJDDmsnw5rAtt0bRyBAvzEHAB+tdPZ+JbaNg8F1MNvIUMGx6jBroMTPg8U32nvtvNPkV9mzjuc10mlfEmxQIj7kKsdyyjjmol1r7Y48p4ZnY5\\/e4BB9Kkkk0u\\/f\\/AE7SkiJG1ti9fU5FA0dLdS6b4qtsbYWl2H0IxXPaXowSxljNgDHExAyMllrIbwpaG6L6NqjWZAyI2c4Pt1pun65rXh7V0S8BdJOPNXlX\\/wDr0CJraKzudSU6cHsryMZNvKMK\\/ar9pr0N+ZtO1GBYzwMsM4PrXC+MLzUI\\/E096iyRZIZccY6Ulp4h+1yB7lfnHJcdTQBd8X6VPokqyWiEJvIBXoRWba67fbDHcW5uIewK5xXe+HvFdnJ5dpfhZrd2xl+oPFbGu6DZWUyS6eI2STlVPIOfelcDyHVJ4Comg3wzZ+6elMstW1EsqJLuQno1ehXWh6Zq3nIiLFd44Vu5rjItFk+0yrGuGU7Sc8A0wGas\\/wBnijlaMxT8E7elRweK5TFsZA+ex6VoXCS2YjjnjE0Trz3AOasQeGrK5t5Wt5FM23cEoAxZNQWVy32BD+FFSLDJHlXjBZeDmigD9Vxc7Tgkfkad9rKcAAjuQM\\/rVJ3Zm4AwRjGaFQAZIwR0wcV51jtZaN2D0fH0OKXz2fGCGA9TVVCHGWByPpSeYT3xUk3LvnA+h\\/3ef6Cn+aQeCx+tZpO3+Ld+A4qTzm7HH+9mqsUXo7gysVVeR68U9nPY8jrkVnq4kYjOPUgULJgkB1GPVgKQGgboJ2Vv0pPNyc7gfbPSqaTbSejZ\\/uqD\\/MUhmdieQoz2HNIDUS5TACjDeoqRrmTZjgr6FazA5AG45H+yRmk8zYc\\/Nj6UAaf2k7RjANCynO7Lf0qhHMHIHI9zj+VK0gBwpUn6\\/wBKANIXHPU7vYUvnbmxjJ\\/Ws5ZiOCuD\\/eVaeHYfvNxZfTofyoAvedsOCSn+yaeLjIyrDPpWeJmPzBcD0qRZSULccds0AXfPkYgkFfqDTzO4PKmT3YniqMdxGwzuKHPC461IJdw7D2zQBdNwB\\/AP+Aj\\/AApv2nb9xuvrzVQdD1\\/lSRlkzk7vTOBigC3HOwBy6k+1Sm6DY3YH05\\/lVJ7hc\\/Nx9KI5Q2fm\\/IUAXmudmD0z6nFKJR3P5KKo+dt\\/iB+oqTzD2cR+7Ec\\/nQBcEm7ofyp3nMeOmPbFUo5WydzhhTjKFOcBfcc0AXFk55cfTFTLICPU9qzkmG8Y4I7kVMkysMZzgd6ALyOSAc8A8CpY5cE84A4qgk3J7L14qaOQjGCMdaANrSZVNwCTjPSvkX\\/go7q+3\\/hD7LfmLFzKVzxnCqD+pr6x0yYG6UZ+h\\/Cviz\\/gpRayLqng28jYkGOeMr2\\/hOa2pbmc9mfDM7HzD9c4qMdTzn+lSSxsGPPP86lsrZppgoUsCcmu05jQuS1rpMUWMeZ82axgpI5PNbGtzGaQIPuooGM8Vn2cBkfr8vf3oAhK9cHOD+dXbNDAxkZeo4461a2QIjdyOhqhPdOcqOmegNAEl5ftMccAD0HFV4UaeUDGQTURbn1Fa2n3aW0GCuW7HFAGhtS2hUHr9KohhNdBc5XP5VWuL1ruQBeAT0NXLLT2gJkdhn60AS3FsqNubJ9Aau6UFkjyeEFZN00k8\\/lggkgDGc1pMo0+yCFhuI65oAZe3IWbCnIwefzqG2mknTCfO2cBfSsy4uPPZgD1P6Vf02X7Mh3d+mKAGzWReXcfulupNbdkwKARMuFGDxXPXWpFyRkNk9RUukzMBJMzkLjjOaANy8YKpdjj0z3pdKulkVmZQAOOO9YF1fPdXCqCWBOOeTV55l02x8tnBlb5j24oAfqOro6vGikc4FO0lHjiaYoNznj1\\/Ksyw8u4nMshConOCa9g+BPw4f4l+Isk7dJsyXmkYYHHRaTdlcaVz0D4GfDN0tH17UInWSUBYQRgAd2FXfjn8Srfwl4en0qzYLqFym1sDlV7817X4r1HTvAfhWaZvLht7aEhQOOAOAK\\/Pb4geLJPFviC5vHclHc4z2HYVlH33cuWhz0kj3ly8jEuznJJqxLEka7QAT1z6mm6dbrPIxJ2KvOT0q55lrEvzRlyOQzHGa2MyrGzNIAnLnoMdasRaPdXbAuNgPcn8qqyXYBzCuw9eO1S298QuHmYA+lAGjFodpESs0uXHbPWtGC1tbYosEAkl5PPGKxBqMEJDRx7245Y5pjajc3Eu2NXJI7f\\/WoA7O2uG\\/sfUC4+dQFIjbAA571548mXJIyc569a7bTo7ix8IXrToFMzg5YdgPX8a4g\\/McjgdARQBueBtHPiLxZpVgn\\/AC3uFUkdcZ5r9aPgtCtt4Ot4UOAjMo56DNfmZ+zToP8AbvxY0tc5WDdOT\\/uiv0n+D9yv\\/CORKcZPPX1rmrM2pnpEiAodvX3rhvG3h6HWbCaKWIOjKVIYcCu5RgehzkfWszUrcyI3AYduMVzbGx8Y+JbC5+FUs8ZR5tCnfevfyWPpz0rJ0\\/UbPXoftNlPkIeVYEFW9CK+j\\/HnheDUrOeC8t1e2k6g84r4\\/wDH3he++GmrSzafKRZSnKEchfZgeorqhLmRjJW1PS7eZ9ixqu8E447e9dHoZMl8kVwzRozBMngEd\\/0FeE+F\\/jbZ2l9HbaxE1o+donXlCf6V7hHqFj4jtIprSeJpU+aKRW3AnHqO3anJEpn0DpOtwx2kUEOCqqD8vYe1dDFeC4VCp4XHPrXh3h\\/xQhAiciKdTh492foR7V3Nt4ph06zeRpQDjI5rlcWbpkXxmu7OLwxdx3IUxiJi5PYEGvz3\\/Z\\/sr64+L1tc6XAZ7WFpmnw4ULCVYE8nsOcD0r6+13xr4c8Z6lqWleIdSjt7FbSSQxNKFLkDAUDIJ5PavmH4JWkVt4quE01mjVJnwQ3zeXyBkV001ZWMZu7Vj2P4uag3h2x07VUiScaffQzlpOdqnKsR6HmvV\\/ixYjxf4SguId7WuoWhXIjXbtlTIYvkEAHPAzn0rgvFmlw+J\\/DNxZzqW8yMo\\/tx1A9e9XP2bvGsHibwxd+CNdSObUtAbyxFMc+fCCcEA9cY\\/I4qXtcpb2Pgyewktbu4s5lZJ4nKFTwQQcEV2HgbVrFNNuNMvF8q5J3202Thj\\/dPp\\/8AXr1T9p\\/4V3aa\\/d+KtOsDapId11ZxAuVwMebkcc8ZA+teCw+TdkZIWQdVPc10Rd1cxasz1HS74alAsPl\\/MjAhsDrmvUIfgnNe6Ymp3d7FA7ReaQSFRAAeSe3HNfPekanqmjzJ9ku9hU5AdFfH5iuq1bxv4i8T2iW2p6rLNbKB+5XaienIUDP40NPoGnU5nxBZreavIiTC6hhPlpNg4Ye2ah8P+HpfEfi7SNEtIy81zMkZx2BPJ+gGfyp9\\/qMVm+xB5twwwqrzj619Ffs6fCafwtbyeJ9cQJqN7EqwwH78UT87T6O+Mf7K5NKUrIErs9m8Ya9daJ4F1QRqrPb2WLaOOPkF9wjXjrhCh\\/PtXD3caeCvhRql5IqLLa6c6iXHO4JsHP8AvYqz4gvrrxZ4q0\\/R7M7ra3l+03c6MCrzY+RPXC\\/exwAFxz24f9sDxfbeH\\/AemeE7SXF7dus04B5EKDv\\/ALzY\\/wC+TWKXQ1Z8dSFpXZnyxPzEtySTTov9YOOcGo\\/XPXrUsI2tu6ArjmukxK5UtnHFOyAo4yTXefCX4TXnxO1aSOOUWun2xU3M57ZzgAdycVzPirSI\\/D\\/iXUtPikMsVtO8aOepAJAov0AoW6FpFBz1rp9J09pZo0TljjHPvXN2OTKMkHH58V6\\/8M9Bjv8AFxJjI4XI+770gPWPA2mxafo0UIXfOfmz057\\/AIV9A\\/Dy\\/NtpsbSM0UKDp69K8R0m7t7WZIUBcKeVQZaQ17P4L0y91eRJrqPyLZTlLY8EfWsJ6o2ie2+HilxZxSBQdwBJ6c\\/T8a6y1AEYbbjAA4rktDkEUEabvlAHy11liymMgHgjiuZGzJpc9umPyrgvjR8MdO+J\\/gq8029T95tLRTL95G9jXoJPPXJxVa5P7iTIG0g8Gq2Efi9daWuh+ItW0W+aUGG4aBwgHQMRmtKX4eWN0c22pshPOJFIHbjNbfx0mW0+NHisxKJI\\/tr7tvHHf9a5qz1iyuNuI3jbcDlZD0967lqjkK934Q13Sw8sYW6gXpIjAg\\/h16VmRa1e2DL5sTxuhB4yMV00WuzQyEwXRZXJBilXAGPerkerJeB2uLVJUxtYhQwyaYGFbeLoZ43NwA8rqAMrjac9c1rN4ggm0+GBW3oHx5bHJHuDVe707RL9ZF+z\\/ZpAQPMQ4x+Fc\\/q\\/h240lfOt5zPCh\\/hPSgDo55TpzpMMXEMy7WEgzt\\/wrnfEenpZ+VeWqlYJx930PcUy31n7XA0Eny5xz7+9dBaQNqOjy2G9WZW3oT1\\/A0Ac5Y3rwx73XGMZJGQa7a58Qtqegxi0YGeBhhEBzj0rhLhm02d45VZSQRjHStSzv4007ER2TxfPuXjcPQ0rAdFaXbXqwXGSl3HzKjcHitqXw+l9C91bEeYw3Oi9M96yLXVrbXrFnEfl6hHHu3r\\/ABgdiKk8N6lviVo7jypF+Voh0b160AYKaq2J7W4QMFJXjqKzdPuJNO1JgMsnrntVfxPBPBrdzIAwVn3Z7VnRXLNjDHcec0wO8Fi9yTIrcMfQUVyUWt3cCBFmIA9DRQB+qcqq8oJOG9l4p+CgOWP0A\\/xqo0ygEbsD0AqITqrDEhX\\/AGfWvPOwuCQsRtX8xmpThcc8\\/WqzXJHt7ZzTFnDfxiP2VhzQItFhJ\\/GR+FR+bj+Db7\\/\\/AKqYZ\\/M6MVx7ZpFuAc5x+NAE8CFmOSF+rAVKNrEj5iR1NVpLjCjbEXPoB\\/8AWpRK7Dpt9iaTAnLN2fGPTj+tLFhWyo3t35zVUOinLAn6E1KH7kbF7HbQO5Nw7EHKn36UKTu2kYX+9uqJXLnaQsi+meaYjhZyNuzHpSsItYAPA\\/HinCZQAp2n64NRCVeuDu9dwz+VDO0gwshGexbmiw0yyk3IVQmPTilMoZtnRvZQap7WQbSQT+FGGHIxn3xTsMvhgi8nkdyMUCX5SxIb8KqLIAvzk7vRTR5o+6uQT60rAWknV1J4U+wA\\/pSCTdyWPHvVYFkB3Zz7Himh9\\/LEZHT5qANA3oPqv4mgXAlOQ5O314rPZ92MjH0anxTbScdDRYDRMxkzgBvrxUQcHqxX6ZquZwh65+oFOkuy5H3h9TmiwFpbhf4WHvT0n2k7zkdu9Z5mB7Z+lDuuPl\\/d\\/TmiwGh54Y4WPHuP\\/rCnLIM8uD\\/s9SKzvtHHysQfU05JSpyWHPvRYDSSckkZwO2aUXG3gnNZ32jOMEe5yKe0+BjJwPypAaYn5B\\/A1KlwDwTgfyrF+04PB5\\/SpYpzyehAoA37S6CTxljgZ4rx79ubwDbeKfg42r7gt7o0n2mJxzlSCGU\\/Xj8q9HjuWmKoo+92zXCftcz3Vv8AAHWtjfK6BGx\\/dNXB2aJlqj8u2O+Tscn06V1kFhHpmjJMMGRwc4xXOabZG5vYlA6mtrW5HitmjDfKp24r0DkOevZvNmY45J6ehpkFx5LAKc54xUErmUn1FIhAkGeRnPHFAFq4mHA\\/MgYqqCW46fhzSyMHbKjj2NXIrMSxk4yxPXrQBTht2mYbRk1rxadIsIYr+BpdJtxDcEt0Heta6uwI8gcYwOelAHPpGkbnJwRyB6Ul3eSEbQ34VHesGl3KCGx64p9pps93gqCQOS2OKAFsYZZnZ1J6cse1Q3U0gdkMhcA\\/WtKeA2tqY42w38eD+fFY8qEsdwye2KAJ7EJvLyEcdiKsS3MYTIAzis2MbWwe57VahsZrl8Ipz3PpQAyHa9wNx2qT8xx2rUury2S22QYCgY4FQrpDxhmZcsPeqjwKcKeG9KAEt7lhc5RdzDpVi6tHY75CTIwzg9q1NK0yO1Xz5156qM0s81vK7Nswc9QetAGZpumSX93FbrjMrBRgZr9DPg74Msvht8MLWwQj7bdAS3D9yT2zXy7+zX8PbTxL4q\\/tK+\\/48bTDgEcM2eBX1N451+Pw54Pvrpgpt4o9ynODx\\/kVhUd3yo1hpqfPf7VfxMaa6Tw5aSgxQktMQf4uw\\/I\\/rXy+zBz1BOc4FbPizWZtb1e5upZGkeR2YljnqaxEXkY457VrFWVjNu7LvmhLfYhKn+dQTSliec4pNxw\\/GcU3GByOh9aoQ4MSCP8AJqSCJJZFVmwOp\\/Kq6jkjPHtUsb7HDY6HNAF+KxgiZurAfjWrbmSNAIo0iU5y7HpWMl+w+VF9Txz\\/AJ61LGLu7KYBHuxoA73xQv2P4faarOJHn3SMwHuQK8w2jcSGP5V3\\/j\\/UHk0XSrPyvJjghjXls7jjJP515+Rgd8elAHv37HVqH8falcFgvk2EmD9cCvtb4N6qr+H7TDhsrjjpxXwH+zdr39k\\/EGK3dgiXsbQnjocZH8hX2X8F7421pfabIdr2kxUZ646jFc9RbmsGfS1hKSg78etXnhDLk8E9u1c14auxcRqCSQRya6psEAE5\\/H2rlOg53W9LS7hZSgIOOtfPHxc+HwubKcBN8ZU8NX1Bc26upAGF7YHSuM8ReHUvI3LruJHGeeKafKyWuZH5a+P\\/AAxJo9xJGyssYY7f6Yrn9A8b634UlDWF9LDsOdhbKn6ivtT4v\\/CG2v0ncQ75CflP9a+MPHHhK58M37q6Hy8nnFd0ZKSOVqx6Fp37TN7NEiappySzRrhbm2cxuP0o8QftK6rdQeTao6oQMB2I59z3rw+Rdr+oz17VLIpJTuDzVcqC5c1bXL7W9QkurqZ3mfqQxxj0pNE16+8Patb6jp9w9tdQOGWRD6evt14qogyRntx1pGTAwOPWiwj608AftI6L4ht7Cw1SIaZq8jbHkY5hlJ+6Qf4ewwTS+NtG1HTPEUHirwzN9m1mzbeNvCzL\\/dbH6H3xXyrpE9raapaS3sLXNokqtLCj7S6gjIB7ZHGa+n5Pj54Ku9Xt7awtZtL0q5iRY4ZnMn2f5QpV2PJ6dai1noVc9n8DfEfw78cdHjtbhl03XoWJuNMdtj5HUKTyVPoP\\/rV5l4\\/\\/AGUbbWrq7vbM\\/wBh3eA7bCptpZGJ+VFJBU8Z49cAVka94Gg1iddR0+VrW8A3Q31o+HX056MPr+dbuhfGf4heFojY63Z2njCyRBEGlIhmKD1Pfj3NZ8rT90u6e541ffADx\\/o1wY47MTrn76ybB09HANXdH\\/Z38fa7Osd0kenwH70jNvIHriMHNfY3wb1e3+LENzLH4f1Dw1BbnYTLMVVm67UC4z716k3wz01MC5Ml1ERgrLIWGfcEmpdVrRlKCPlf4Y\\/s66D4MuxqMhfWNVh5jllC7Ub\\/AGVGVTHqxJHZQa3fFXj\\/AAzaT4da21DUlISZxJ+6tI2zuYt\\/E3H1J7dq9S+JHwJ1\\/wATsi6T4iNjpSJtfTYIvKaQf3RKCcD8K8x1fw5pHwR0ea61e2NhbRvuGELF5MdQTkuxwfmJ\\/KhO+oWtsJoNvovwm8J3WtahI0Vvbh5WkmfdLI7Hkn1djwB2GBXxL8S\\/Ht18SPGmo67dqU899sUQORHGOFX8Bj8a6D4x\\/GPUfidquwB7HRYG\\/cWe7nP99z3b+VebhTng7T6ZreMbamTd9EIxIU+h55p+evOaaTgcdaFwN3pjp+NWSe8\\/s6eIo\\/DvhXxPcOyqd8ZA7n5WrxPxBfHUtcvrs43TTMxx7mr2k+I5dK8O3tjFkG4cMxHQgDisFiXOck59aVtbjLOnjdMiFcljivZ\\/BWqS2dvHBAm5zwqjjvXjeknddoSO\\/UfSvffhhp6RyC5mUs+PkXHOaAR7B4F0CPS1S7nHnX0oDM2P9WPQV7j4UivLxI\\/KCjPU5rzPwT4R1nWnilFs0cDEESScAj6V9C+F\\/CVzpMEaIVkGOQzc5rkqM6Io1tI8OukaSTXDbuDtTpXSwjyRjg44pthDLsw4AIHQd6nWNgdrdefaskW2SxOXTIOR7dqyPE+orpulXUrsFVELEn6Vsx8R4PY9cYrxn9p3xYvhf4Za7ciTZIINikEAktxV9iT8w\\/HOrDVfHWtXtwjN9quZHGxucFzVX\\/hFrSRJHt7mVSMcOnTPvWPqlzJ9ulZslS3BB6irdnrUcCkRrJGeuVk612rRHKTnw9qtmEkglSdTk4DdD6YNVnnv7GX99bSIQckAEc1d\\/wCEibyok8w5XJBZevetD+2zLCrIyyBzlhnnjrwaYGOviLd5qyAFHG3DDJz\\/AJNW11e1n0yW2YlS2MOpzRfzWV2pMtr5ZJyDjnHbpWZfaZbwwK8LFT6Z96AM6Qi3nIRty+oNdDouoJtG5skMCQpwQAa52JGjlL9QvJ962NCubOR5Fu0DszBR2IGeTmgDR+IUUJNlPbggMhLZ6k+9cnBdPFE4\\/hIxmuw8Q20Nx5fkMDCMqoc8j2964ogxsUK9DggUAdD4a1CW2uwI8FjhVLHg5rvbOzhtgZLiBYpsk5AyprymykxdRgHbgjJNehSX93NokkVt\\/pJkPy47Z9KAI\\/EOnI92hRlKSjqeRXB3Nm9tdyIcKA2B+fFdRHqP2u3jgaPbLGduD1FN1vT\\/AD4Wm8vDouOtAHPpCAo+br60VnMXLHacjNFAH6stIWPU01yc8gH3IJpSWU8sT+FJtMxDA4x\\/eFeedYbt33SPfBzQdqjnH\\/AqSRWyOn4Jj+dLGRzkE+lADS5Q\\/wAJ+jVJucDnIHsaQs5++px22nP9KbtlHUYoAsK2QN8jEeivSmbAG5jjt81QCNv4M579TTsnoyn8qALJkV1GGOaEnbOM\\/lVfp1BYemKU\\/KMht3+zjpQBbEjn77Ap2HQ\\/pTVkUPx09zmo4ic5xt98YqZF3tjcT7NgigCQuDFkZ\\/A01JGyORt9D1oztbZkcds4pdoduX2Z7nkUABcF8HAH1z\\/OnF1QZIBjHU8\\/\\/qpohCnht\\/8AtDpSOiYOVy3ryaAJo50MfyY2\\/WgzDG0Dr7kmoURcYwAfXbQFCsFyefQUATKWUHPA\\/wBomhWUgkPjHbFQyx7WGCc4pyA4OcZ7c5pWAd5+ccDPuc0srsCpIwPoR\\/WmEYHzSc9uKZu3D5izHtimBYS5HOMAe3\\/6qDMh6Sn8gf5VSCuOx\\/PFSEB8bwGx0zQO5Y+1beuP1NLKwUAq+0nr1qmJWbrk49TTjISMIMeuOaBFpiQgJJHuBilEoIA3H9aovM7DCtk+gFOBAALZyeuBmgdy39oz8oA4\\/iz1pzT\\/ACAbsZqDewj+\\/kdhmmmTcAMce9KwXLAk+Y5Ofp3qx5vlpgnBIFZyuQeD05yecUplJOCc4HPaiwXNKG5KSqR69e9Zf7SWlt4m+BevQxg5S2MuB\\/EVBNSrJtKk8EelbN95eseFLyxmO9ZIGQqfcEf1prR3E9UflnoenfZ71h\\/GBwO9YWrXTtLPE55BJ59a6\\/xBpdxo3i6+tGUxm3mePbjoATj9K4bWIz9ulJOBuPSvQOQoRKGfDcckcU6VO4454qUQhIwT98mq7sxx6g9qAJrK28wksDtB5rRNwIIwgHA71n2140GMdD1461NPLkIuM\\/yoAla8JdVBzn0qxeysCIwTzg9elZ6YglVn5A9KtyuLu6LrkFuuO1ADbyycxKwBz1xV\\/TJZ7XT2LcMeMUTXEaqA3YVSutUJIiQYUGgCvdzsXbqc81W2uwGASOnvTrtsvnBHue1WrAjaS2MKaAIrDyhKEkU9c1stfCCPy7dQo6k1ms8IBOOeearGdnlChsDPftQBpxXkspxkH196qRkpe7niyD2NLZSLFdbWIx0+lX5byG0G4gNIRye1ADL67ik5JIPZR0qjZy+beKin5WYAcVWSczTOTzkE49K7f4L+F08V\\/ECwt5lBtUYyOD3AGf6Ck3YD6y+FvhuPwP4HtojCHuXUTSgDnJHQ\\/nXmv7SXjpk0OHTYZCBO4eSHPIA55\\/SvW9Z1hG09zpfyXUIwY26Nj0r4\\/wDjD4kuNe8TzPcRiKZQIiB6jviso6u5beh5\\/JlmyQcHnmmINvXg9qegYAcZpmPmxxu9Sa2IAqW5HTHNNJLA8ZI9BSrlm7jPWrMbKijBwfWgCGFSMkjgilDfvQOPriiSTIPYGmqeQQOT3zQBq2qbR8kYPpxV23cvOikhSSBjOSTWNDNNMNseSo61p6Jpck2qWgZwMzJ0+tAHRfFGJ7Q2FuxBZIlG3uOB1rg2Puev6V2nxRlI1xo2kDlSw4GCPY1xir1HcGgDY8GawdC8VaXfDhYZ0Yn8a+6PDt2lj8Q\\/PgJa1vo0kGG4\\/wA81+fpyNpzz3NfWvwX8Zt4g8P6JdPlp7GT7JISe3G39KzmtCo7n2x4UvVNwiKQowMt3NehQ7PKBIAJ6GvKvAyi4eGUDhlBJFekm7SNVzgHtiuLY6iwwVm4APOcmq13arJGRtB69qfBP5nzEgY7U25uRHlQRuPGKGCOB8VeG47uN12Ddyc9K+Ufjj8L1ntJ28vIAYg4\\/wA96+2LpVnTlN5HpzXmHj\\/wxFfWsyGIDKkEVcJcrFJXR+U+rWEmmX8tu45U4qCRcBCO4AzjmvVP2g\\/Br+GfE5kVNsEnKkDvzXlO7hcHgV2p3OXYkQZQjr9aXHGCOPUcmliwq5OSPbrTyAeD0NMREqjgNyuOoprDOe2KlwMZzgH88UjjHTr7GgDo\\/CPxL1zwXOrWd60luDk205LxHp2zx+FeoaZ+0XY3iBNX0p7diOZLZg65\\/wB09Pzrwkgjnoev60m0jJPOD2FKyA\\/Tf9nLxrpus+BrW40qVXhLuGGNrK245yOx6V7pZ3q3CfOd3HOTX5M\\/Bj4u6p8KvEUVxbTudNkcC6tQflde5x6jsa\\/SHwL42i17SrXUYG32dxbidHHIKkZ\\/P2rkqQs7nTCV1Y9Zt5gBlTx0x0qDVtKsNcspbS\\/s4L22kUh4biJZEYHg5B61i6Beed+9kkBXqB29q1hqkZkKx5xWJpY+Tvjr+wfpeuRXWreBCLDUcb\\/7JdgIJT3CE\\/cPXgkj6V8OeKvAmt+CtXn07WtPuNPvIWIaK4Qgn3HqD6iv2WN8h6Nn3\\/z+Nc34y+HHhT4mRQweJtFg1WKAny2l3K6E+jKQRx2zW0arW5k4X2PxuaJvTB\\/ummEnoOw9a\\/RL4j\\/8E9vD2vSNceEtTbRXbJNreZmj9gHzuX8c147qn\\/BO\\/wAeQhza6hpFxjp++ZM\\/mtdCqRZi4tHyaW4BoHTg19GD9g\\/4px3sdu2n2Yic\\/wDHyLxPLXHrzn9K9E0H\\/gmzr11Cjap4psLMkZIt7d5sH05K0OcV1Dll2PlHwRoc\\/iDxBb2VtG0ssjYAQZNfe\\/wT+BDadDFcX67mxkJIAcZ9q6r4M\\/sWaL8K5nupNRbV9RY\\/LcNB5e0dMAbj7175p3heOwRAGLAD0xisZzvpE1hG2rM7SPDUVpEoVPlAACgcV0VtYpEBsHC9qkW2NuB049RU8QUsQeW9PWsUtS2x0aBWx0J6UsiZOCMD61JtyeDz9aX765GQB61pYkrs+xGyeOuc18H\\/ALfXj8rpVto0Tjfd3G4pnkog\\/wASK+2\\/EOo\\/Y9PmbcFbBX6V+UX7V\\/jMeLvizfxQSebaWGIEx6gfN+uacFeQpaRPLVeK7tNkqlXjbO5TjIpi6fbFsJK4bn3FVPP3KxC4PqfWo0lVWywBAPO3iuswNKbRghQwTiUH14Oahe0u4MN5ZdexXmmwXeGJDEN2ycirsF2w4Do2eMMMYoAoR3k0DMTu56g06TUPtaFXQbs53KOat3Mm9yrKCobJz\\/Ks2RYnnxHlATj2FADXYhOhJ+uaiH7pweRz2qR1w+3sp49qJ41WP\\/a6fT3oA2oJ\\/tVqgZ8iIcZNY18266ckYz6VpaZ5ixuxGVx0IrJm5mYnJ5oAmskV5+u1iODXQ6HrdzZalDb\\/AHirYwD+lcsh5yOCPQ1bsJCl0G7+vf8Az1oA6HxDayWXiAOilJJiHwfWujS3luLR4yFMrDoG61h6oRqfkTM+5wuAT\\/hVG31021yRubegwKAK9xarHM6sgVgeQcUVYnjN9IZ8kF+Tg4ooA\\/UhLJgOV5pG04uwJXHrzXQtYjOec+vWgwopxIVDdge9ebc7LGB\\/ZwJ4Gfz\\/AMKebJxjJQfWtxrISEHbtx7U2SzGRkAn3ouFjDl04xgY3c+vFK9tvAAQcepxW29scDcv60SWrADAU\\/UUXGYZs8gbVGe+DSS2qKi85PfHat1LPP3l3j0Aoe0BAx8n40XFYwktmJ43j60xLc72yhP1X\\/8AXXQNB5YBywz3pqxjcSRjPf1p3CxifZwOe\\/pyP6UzyV3nh2PoAP51u\\/Z1BJAAPsaPsq5zz9SP\\/rUrhYwzASPlQhvUkH+VKYJfLPH4ZrZMO5tuD9QcUC0DfIVJz6n+tO4zESIqMspB9M04x7hwG3fga1\\/svlvt2bV9etDQEE7QT7jrSAx\\/LdWwSQP7pAFBTac7iuOxNaj25OdykN7mmrZR7fmUbv72aaYGdkPyWXPvQVI\\/hY+68VoLbGJSqcg+9MNs4HUD6DH9aLk2KBgZvvNn680eUYhgKefXmryRNzvYZ7E0zyXXrJuz6\\/8A1qLhYp7DHwQDn+7xSBdnbb9DirMkCqRuI9sLUjQAj5QU\\/wB7v+tFwKLljjCq35Cotu0+n+8P8KtNDu+6+KcsYP3g2PXBpgUslDkFT\\/u\\/\\/XpGdgPlHP1zVlbVdx4x9KYYtzEZPB6EUBYi8zKAlW3e\\/FRsxwBVgxFSRuGPaq0w4woJB9KAF8wq3XdT\\/NJyTgA1XOQRkE4PY0ZLD8KALSyB1wOBn8a2tElxcBHIKt13DisOIcEjn8c\\/hV+2Vn+bPNJgj5w\\/bG+E66RdJ4y0eJirDbdwouQfR+K+L7+dZ52YZOfXsa\\/W++0u28SaXPaXqiZJE8sqx7V+Y\\/x1+Hj\\/AA6+IWqaasJisjIZLb\\/cPOPwziuqlK+jMakbO5575h3jBzTGyCDn6k0nrgHPrTmPGcYPqK3MhVTfk9hyKmB81kI7YqSxj3Jg\\/wAVSRQBLvPbsCeaANGe1SeFFJGSKda2yW67pHHfAqndTbiOSMcD8KoXN3JLtVzx0BPpQBZvpQxJHQkgc1QcEDdjJB7d6knbIyxyccE1Lp6JJkEemKAK8rmYgnrjqKlT93CGOcnvVk2sSc8j\\/PSqrzA4GOe4oAikk3Ee\\/pRGNjhuTjvTC5Bzz9a2tLhglt8P1FAFSyjM0pOCQOc066ZA5GDz1BHWrchhsLVth57j+lZk0xmXdxkmgCMqS2V4yO1e6fs86fBpllf6xcRu05IihGO3GTXhtm652nHPFe9eDNUOmeE7SG2AlJy7L6Z6Gkxo7XxHratBJNDcG3MYJ64IOD1\\/SvmDxNfyX2qyzyvvldy7MO5Ney+OdXnl8PzTmEZIww7jI6+9eD3blp23ZJFJAy4ZFS0A7nis44bJJ4\\/nUylplx2XpURU7s9cVQhv3cg05WO0j8Bn0pm0k\\/N+VPAKqTz9AaAE6DJOKfAR5gB5\\/rURI9hTlwnPT6UAaMLxRbiQR3wD1rX8JSxz+JdOUkKGmQFnPA56mudjTewLHAxXS+D7WJNdtpGG8pluT7UAM+IEgm8S3TBlYb2+6eOtc0MHpzz6961vEbLJqtw4BALHrx+FZgyMA8AmgACMx6ZA7mvWv2dda+z69faQzcXsRaMFv+Wi8jFeWRDKEA4HPWtHwlr8nhnxVp+qR43QSqzZ6EZ5FJjR+mXwd8WxS6Ukc77ZoQY5AT3Fdrc+JxcXJKvkY4UH+lfK2l+JpIZFv7KTzLS+jWSMD3\\/rXRad8Smt7t7e6LxkhcFgBnk\\/41yunrc3Uz6OtfGJCdvVeeamsddGoy7hIQTxn0rx7T9chvBG8c5MoJGM8AYruvCkyhCMg89u3+eaxasaJ3PS4kM0Kgdx1J6e1Z2r6OJIGG0MxBwCKt6fdo2BgBcdhnFa7FZV4wTjqKkZ8e\\/tI\\/AHW\\/HXh6eTS7KKS8iIkiTdtZ8Z4Ga+N9W+CHjbQbYz6j4evbeIE53Rn5cdc1+wU1ukjcDdntUNzpEc8ZUxjaRz71tGq46Gbgmfivc2NxY5E1vJF2y4I5qvuDbuB9c1+jv7QP7OvhPxVY3VybRdP1VvmS7gJB3YONw6GvkrSP2Q\\/iRrV3KkOlRw2gbal3czKiSL2YDk4\\/CulTTVzFxaPFfO2jATpz+NTWsEt5KI44ZJJGwAqLuJPsBX1fo3\\/BPvWp4kfUvElrav1ZYLdpQPxLD+VfRHwf8A2cPDPwogN2xbUtUwMXlxxs9lUcD+dS6sVsNQbPijwF+yv438aosz6edJsyM+ffAoxHsuN354r2PSP2HdLsoBJq+sXdxJgFkt1WNffqCa+sNT8RwWOERdzck7RzXB6\\/40gDl\\/ODKOoUcisvaSlsackVueRSfsyeB9DXizedgP+W0uSP6Vp+HPFOl\\/DFRpkLrFppkz5bSnCepAzx9KxPG\\/xIuCs8gYKqjG7jtXiN5q\\/wDaN+91fP50qt8ig8KDz+daqPMtTNtJ6H6Aab4ghudPjltJPMgdco4bOcis7V\\/GT2MkaBxknJPPSvl\\/4YfGweHohp92xNmM7Hxnb6\\/hzXpF541s9aiM8c6srjbGc5BHrWPs7M05z1nSviAl0wDsOeeTXVWfi2E\\/8tF9znrXzfpurbC7OTGRgY3Z\\/GtyHxKdoZST6Env9KHAakfSEPii3cDEgUY6A\\/yq0niCN8AYKn3r58sfE0itGGkIBPUV0en+LJYWG8sIz1J6Y71m4tFKVz26C9WXoc9+K1LaVSikgYI7V5lp3iaOSPzFYhAMk4rptN1lVCqzfP1K+lSnYq1zrlYDjI57VLGwAx+hrBl1RYlWRmHHJ+nrVV\\/EUSjJPsOevOKvmIsdNMyMjDp\\/Ws+S68p8jB561mjXreaMtv3bR16ADvWXqviGCFGyVw2RkHnH+f5UnIdjr0vFKltw9atxOGi4\\/DFeZQeKo48KZQVIzkdO\\/wD9augtPFdubQtkggZpqVgaPGf2u\\/i2nw28AXbRSqmp3itBbLnDbmGC2PYc1+W0tzJNO80rNJKxJZnOSSe9e+fto\\/FAfED4pSWcExe00hWtgpXgS7jvIP5D8K8CeJyFbBwwzmuqmrK5zzd2WBKuR+7XAGeR2p7Jbyvwnl467TiquJMHKHpx7UnnHbyMjvWpBObFN+0ORnmkayZcLvz6mhbpMDcpJ9RUnnxMf4sH3oAhlEyZOcHuQarbypPceueaszyIV+VjjJPNVx6qfm9aAHr1+YHPqan8kTQhRgY71AgLEdWHt61oxNGCFHMuPyoAsWWoeVC0ZwF24JFYTHcxb15xVmUiORlBOP5VXYckZyTQAn8PIIz3605GAkU9KZg4PGVpy\\/L3O4HigDatNRSBFLcuB0NN1aFGh8+NNuTgmskvuIIyG7\\/5\\/GtNJhJppjc9\\/wA6AC3nPlLkUUzzGhCrhunbFFAH7JLENvzGgQrg45H0oRNyEjr6nihELcsoPvmvMO0Y8WSMKAPTFARewCfj1qV228BtvsDnNEQ3A5Kj2FADHhAxx+XFRxRqxPB\\/4DUkpZMdVz6ikBEg6gEdytAAYh2wP97NMMBb\\/a\\/A1YRCTwdvuvNMcEfeG760AR+Tv4Zzx7UxoAf4Bx39atCJpe\\/H+yaaY16EdO+KAKT2yDkdfccU1YOe4988VfKoB8gOfejYFXcVIPrgYoAovFlSvG3+9nmmrAwHHT1JNXGIYdMD1oRBjgA\\/lmgCoV28MCfcYxSeWDzlQPrV9sGPYcken\\/16idUCFSAo9CaAKLW4L5zn\\/azmmPbjOS+T7girgRcYUj2xSCPJG5gPUf5NAFD7IrguWPHYGlTAUgA4960TbK6koRt+lMjhXaRtY++f\\/rUAZ6xAg7gKhe2IK7SD68YrTNmgxhc\\/QUfZ152AD1oAziACNzMD7U6UCXGBjHoDV5bQc7gx+pqIIrZ+Qt\\/wL\\/61AGatugPyqCfalNsHHz7WA6AAjH61daH02j8aSaEMoCjHrxQBnPAOysfYGo2t1Kj5efcVpCJeyFD3IPWoJISzEHIXPBxTuBnyW67SAFB9QOfxqjJH85A5+tbn2Qjnse5WoJbPAyQaLisYq2\\/zE5I4xz3qYRBgB3HYVa+zkYJ4444p\\/wBmH3uoHb\\/P1p3CxWjiKHaQcZq\\/BE2MgfQYzT4rcEKOOucitGG0wAQMZ9qVwQadFiRQTwTya8S\\/bP8Ag0nir4fHW7GIvqGnHzmKqMsm07h\\/X8K98hgOBjGBzV\\/UbKPWtFuLG4TfFLE0bKRngjFOLs7g1dWPxijty0hVvlPTP4VHJBsYjtjOPevUvj58LZ\\/hX47vNPdW+zTN5tq\\/qpPI\\/CvLixJYNXoJ3VzkatoOjdYY8DqeeKZJcsM8ADGM1E+5SeRn3oGHAOeT2xTETwzNK3JOaY43g7cn6VGoKtkZx705JCHyD+JoAY5LDaxxgYqxZEqjHoMVG\\/JJYZNIJdoGM47YoAnklZvUjt6VUJzIDgnnt0qyXyvHFRFd4JGD7CgCNzk5wAemBVq2kIi9D1qFYGPGcCn7\\/JxySOme1ADrgtIMZJB55qJfkXYw6d6d5gIyBgdsUoVGXJIGCOnagBlnEbi6hjGQXYDj3r25FXSoEiSRUdIwAF6HgeleS+HtNN5qsEcPMpYYX3r0mWK4tsJeRSnB70gMXx3qj\\/YUg858seVB4xXnaL5khzxjjPrXV+Nr6C6aFYySyZyecVycBy\\/BwM5zQBPhYt3Tnv61C5CtkcD0FOYbzjv0OaTASM7gc8Y4pgM34HPHoTTS+7IAGen9Kdj5SDjFN2AHj8jQAgUZxnFPiQyNk4H1pF+8e49RUokVRgYJz1HrQA\\/zwuRgE\\/Suk8CXZbWFjCBnKMAWOAOK5QDc\\/PI68Cuo8EsDrDr9zELnt0xzQBka07NqlyHOW3kHB4461R2kA9AKs6hhr6ZiAMuSD+NV9uG5PI5wDyKAJGjZ4VYYAzjrzTGhaMks249cd6es2EGclQfpUZdepBx7mgD2\\/wCBPj3zY4vD14RuiJe2djz2yvP419M6j4DsvFmko6LslAPzIOQa\\/Puwv5NPvIri3cpKjb1YdjX6Kfs3+J4\\/H\\/g6z1Dd+\\/QmG4XphgP6isammqNIaux5BqDa38Prwpue6tVfG4A5+v6V6h4B+J9teOI3kAlzkqzevtXXfErwtDeqwCc+u3\\/69fPXiHQ5dDvhd25a3kX5lPZsVKtNaj+E+v8AQPE6SRrhww7HrXbafqnmKVD7uhPPNfKnw78cm\\/tkhnYR3Cn5lJ78dPb\\/ABr23SvEkcaIysdzLu4PX68VhKLRspJnqcEo27i3HPfmpnkBjIxgGuT0rXluIEYEshPbuadqfiJbSNcfe67c+1ZlFK+0caz4gM1381lbgFUYZDv2\\/AVaub2JC0a\\/Lt444rj9S8bzEOq\\/cHbvUXhWafxbqhjRzDFHh5HP8Iz0Huaqwro7GXVd8LKmGYDI21zOu6zcW9q4MTqOSeDzXV61qlh4asiltEskmeVJ+ZvfNc1D8SdLvZ3gkHlv91o36g0khnkHi3x1JYRtMGB2xseTj8K8R8S\\/FFJruSVZMpIuRtbJBr6y8TfDvwz47tXjngClv+WkDFGH5Gvnzx1+xrqFu7TeHtZSeHqlvfDDD23Dg9e4FdMZRMJKR4LrfjSa9iZd4K4\\/M\\/nXJal4njhZgG3N6L\\/n1ra+IHwq8ZeCZiNU0maCDOPtCEPGc\\/7SkgfjiuSs\\/DU11Iu4EdyT2rdNdDIrXfiS8ucrGxhXvtJycepp+g+LNY8Pzb7G6lVc8xuxZG+orrtK+HqyAGQHPbI4rp7bwDY2sQZ4wx6e3amBN4O+NE12yQX9u8Up+UToSU\\/HvXrOm6xHewiaKTdgZ2q3NeQRaXb6cW2xqJDzyOnNTDxJLpXzwybCp7DANS9Que\\/6NqweVWlwFU9a7O51JWgSKGMSN0J6896+atH+L1lBtjvv3L9mX7p9D0r1TTPHumNYxSxXQl\\/djDKe\\/c\\/nWbiaJnpen+JJbN1WQeXBGN7sc\\/gP8+lbunfEu3unctKP3as2c9q8P174kwTWEdokokdvmfb\\/ACrDs\\/EsdlEyuwKEh3A5zjnaPqQPyqfZ33HzWPoTVvH7vZIm9455Bgq54zxzx9aqR+P5RbrufftByu\\/pXisnjmMRPNczpAhBOGIGOlcnqnxe0+1hkhtpXmY91yf1\\/Gj2Yuc+iNT+JqWXyifAAwCHyBXB6l8a5FkZTMNvLY3fdwOnXoeK8FvvGsmoQNIzyPKxykYXAHTrXN3FxeTyMzblycn61apoTmz6b0r4sHUryCJJNw4U4J57\\/wCFeoa74+i8EfC\\/VfEl22RDCdiZ++\\/RQP8AgRr59+B3wy1vxJcQ3UkH2axUhjNKcDGOw9eap\\/ti\\/E62toLP4f6QQUtCJrxweM7cqn65\\/KpcU5WRSbSuz5a1bUZdZ1a5vrg7prmVpXPuxyf501DtTbuXHfnpTIkWZiCdhx35qQWIxw4GOoroMQMzZGMe\\/NPEu6I5UMTyDxUbWbg5LgkDpUYhdB+vBoAsxiB1w6gEHrgjNNe2hJyrEDrVfLoDweO3rTRISNuMCgA2neQD3wD1pOA2BwOgx1pznG0DknpTGGBwOfUdTQBJbt+8BPrmr1ud9y0oIPNZqEDBOPqKt2mQ4Pbrj1oAlvo1SQt3Y\\/rVGT5mz1z1\\/OrF2wY5Axj+dVW6Enj60AIw98UYx7\\/SgbhkEcCgEAnnIxjPpQA7nHXaTVi2m8tlLDK8ZBqqGyuOvNStKSgXGR0oAvmZZSWIIz2FFVY5cIMqfzxRQB+zZbLYAJH+zxT1j6HBGPWq5uiHC4Vgf4sEmn\\/atoIzjPYqa8w7SV\\/3hBQkj2NOI2\\/d2CqyT9ssvsopzyeXwQefXn+QoAnb58bhJx7U0kD7w2iqobOc8\\/nTpJhgckfQ0AWVAQ5XBz\\/dH\\/1qbtyxJ69eKgaR4gGU5z6mlE4xls5PoKALKOqn5owfqc\\/1qNZVZyCgUf7tM84N1VnHs2KRJd7EJnPoDyKALDNxgqCtNBw2SQF9AuCKiY\\/LyCT6Cm\\/aT9wbRjtjJoAsByX43bfWhvvcAlvcVCJtoyDg+tPSc8MSSPY0AH3m+br6gcUvl4+ZRk+pFRuxkbKE59DTCXU4cg+oK\\/1oAlYsHycA+wwKcWVgQ33j24pse0pkDDeoPH5UrYwQxz+FAAsYVSRwPQ5zSA7hn5h7E0sKjYSMEZ74oZm7AN7igCJiHPPGO2etOCCToAuP739KbIq5HmcHttpUZnByOnYHFACMMY4BPuKRVYg7kDe4GKdsLAkjZ7LzQjc8up\\/CgCIwpxlsfXApn3P72PyqdF253Ae2M0eUrf3T7NigCsI85KjafdajKkHuD6ngVYO5ehApGfH8IY980AVjBn7zB89sHA\\/Go5LYEdOe9WYyWd8Nj\\/Z5wKV1yuMZ9c0AZEsI5I609UXvgE+tWpIRIo45pRDkqG54z+NAEVuhZgehB71pQxdO3H5VWiXnIHGc5zmtKCMHsSDxQBJChHr65q\\/AgVjjjI6dqhjABII5PcVaiXkH09aAPA\\/2uPg0PiN4KkurKDfqlkvmQlRknplfx5r8z9Rs3s7mSOSMxyIxVkcYwR1FftlLapdQtG65VhtOa+Av2uf2Z7\\/S9Wu\\/E\\/h21NxYzMZbi3iHzIepYDv9K6aU7aMxnHqj5AUbyAeR60NGYzjaeKlBKsVYFWU9DxinSSBsk8nvXUYDYotynjgUilEbJGCOKPN+TAXnpULyZ5OAfSgBZWBIOfxphJXJ7HpntSfUE9gKcR14755oAUcDjkn8qWOT2x60+PDqwPOPxpHYJg0ALJKQR1OfTtUT5ILc\\/WleTn1zTd3GT370APyNmPz9qIwWYrwv0pUQMnv0zThiNuDk\\/lQBveC4mOqbkZl8tdwZR0PrXbz6rO7Lul+0Mncn+dcv4Cit\\/KupJbowPgBMDIY1pSyCJzuJVfXHDUAcz4qvlv7xpEj8sHg46fWsKA7Bux+ArR1ecTXksiDapPA71mFyuAenrQBMXDKf6VZSGN4FPBXHIqlEOTk5HWrAyI+CSR0zQBFMFRhtxUJxnk\\/gKViSvv1pCozyMZPegBDnLDGPT3p\\/PIGQeo9KZ15AxinFtuMdfXFACh8E9z6eldD4KV31KaRfvJA+FzjORiubz1yRz3xXUeA5UF9dmRTKGtnVUBIznjrjtQBiXQDTSbjwCTnrUR6dMD1xzUl0As8ijghjwf5UwHnngjPegBD856HA5FJhVGAuQfxocEKMH64qMBicZx2wRQBKoGzG3FfVH7D\\/AI\\/h0bUNZ0O5nWMz7Z4EY\\/eIyGA\\/DFfKvzKhAOat6Lq954e1O3v7KdoLqBw6OvUGpkuZWGnZ3P1B1\\/XbeXJJXB5OO1eOeMprS6ZwroAR2P8AOvF\\/Dfxi8R+M7OVIoWuLm2jBmWJgGK5+8Afw6VieJviHqUylZbaa3OBkMuCcVlGFi3K528s7WNwJbdykig8g4zXqPgr4jSXMSQTOiXCEA5bgj1FfJEvjO8aR8swj6AE5xVvTvHV1BdJcJIVljYEEVo43JTsfopoHiFjbFlO5ScfL6\\/4Vd1LUYMEvITn+LGfwr5w+EPxntdaWO0upPIu1B+Rhw3HUf4V6PqfjeziikEkwAiXccjrnIH9a5XCzN1LQd4n8Ux2Ym+zjEi\\/xuwAarvwy+I9tpXhrUb24mWN3uCm44PRR\\/j+pr5x+KvxLW6kC2TlR0BA+teSnxjq9q7PFdyRq3LpnKt9R9K29ndWMubW59oXXxMa8vnmkbGfuhn5xWXq2v2GrosjPsnXlXUgHNfI9t8UbiKcCWfJHBYDIPSu28PeO5btg7OJUXoQQapQtsHOfR\\/hXxvcabMsU0nOccnqK9XsvFyXMCc5YjJ\\/GvjrTPFkt1qyyCTqQM9eK9Y0fxzbpEqyvyfu+prOUClI9uuxa6nEUnjRkYYIIyK8v1\\/8AZ78OazeSXEEb2Esh3Yt8Bc\\/7uP5Va0\\/x1ZXThBMTgZbOa63StdhnIIYMBj8PSs7SjsXozyPWPgJqOkxu9lPDcjjCuCp\\/wrz\\/AF3wj4g0gHdpFyy55aJd44OO3tX2FHfQypsbDZ5B61TvdNtrmLIUA5\\/Gmqj6icOx+fviTVLuyc+dZzQuB\\/y0jK4\\/MVy0UOteJpWj0\\/T5rhWPVIyV\\/PpX6D6z4Ns9RhZZYEkUjBDqCK5Wb4fRWMHl2kQijXgJGMAfhWyqJkcjPkOx+BPiC8VZL27t7IEZKElmH1wMVaX4P3OlvkazcoSMfuRtB\\/WvqKfwfIVAX5W287hnNUj4Ca44KqzdzjtT5xcp8+W3h64sD5aTSXTL0eXk\\/hxWhB4W1S\\/3KN6qeSyg8e1fQel\\/CQtLueMHJ7+n+c12ukfDCK1RTIgAx24\\/SpdRAoXPkOX4U6hcsfMMh4HzODzQPhPMhGVZ8dOMcV9j3XgqFYgEHyrw3A5rmtQ8PRANtXDE52gcY70lUvsPksfK6eAriC8VGiYgnnH1r1r4V\\/CC21K\\/iurmISIGyI5AMcH\\/AOtXY6voFtbTRtGgVX5bHr\\/n+Veh\\/Du1Szt0MaqylucevHr9f50TnoEY6nV+JY7T4cfDPV9aaFEg0+zefZjAO1eB+JwK\\/JbxJ4gu\\/FWv32rXzb7y7lMsjc4yew\\/Sv0b\\/AG4viTF4Y+BTaKHDXuuypboF7IpDSH9APxr81EYFhldx9+1FFaXCo9bEkLiMkk8+tSLcIMfKc46VKVgwp2ZJ7E0skEDRgiPB7kE10GRA0wGdufXrSGUY+8cj8jT2WN8AJ0+tNMC5HHfmgBjSAE4PHuc5qPOW4\\/AUOCpK9yOp6U1RznIx6igCYrnbz09qawwfQ56ZpN+OpIx1psjFh3OR09aADByR6d\\/QVajIMJOdrZwPWqi5OACT61IhyvB6AdsYoAmmJ8hRjkcdagCjHfGKdJMcY4GfT1qMZwQfpQAdCBik2k+mRS4BxxnvSN8p\\/HpQAD1HPehSW64zijGeBxSrnr2HOaALcdlLKgYdD70VH9plwMyMPTiigD9jt43AhialSfAIYhSfUc1TVio2k8\\/X+lPVeMkM2O4O39K8w7Sw5II+bd9KVlYcD\\/x6qe\\/zSDnfju1SmQg9Nv8AWgCdoxDgrsYn0NR4Jzlf50rswxyV\\/rQSH6gH9aAHb3jGSDjp8oyaQMGJ3Y\\/A80RlSSMZ\\/HFNWMFjzn6GgCTBYAKOnoCaRSwPCAe5p3lPHgggfX\\/9VR7WJJyDQA7c2eX49A2f0phJDHkkehFSbCAO3uKA\\/YEkigAByg4P8hSLLztwMeu7JpTknn9RTcKD0BPpzmgBxcK2SST6DrQWVh94g+hODSMqlfunP+fWlEQKcEj2oAaHCOBliPzFK5Z2yuQPQdKNmD\\/X\\/IpwUdPlJ9xQA0yuJApV+fcYqVoyzDkj6GkRCAVZV57gUuzyCBkHP+zQA8KYxyQCfxpWXOBkHPXmlLqeicd8c0weS\\/8AqwR68df0oAdsVBwQfrURzxnA+pp\\/C9AV\\/A00SGX\\/AGsepzQAS5iwUAbPXjGKia4YDksv0xVny\\/UbfqMVA0KycbOh780AIfmHIAz3FAY5ww+X161KoCgZGB7EVGQwYnaCp6dM0ACn5uAMdutNYAZ45z24NPEmQRyMUijr7880AR7QQT39aXbhsdOMUoUo2R8oI55pw5PHp370AOQfkPSrcQyOMdvwqqgCnOPwqeKQAdMHGSKAL8b46cf1qynIHIzWfDIc8Hn36Vbjkxkbu9AF6MgBc1Df6fb6nbPDOqurDBDAU1JfmA6U8O24Z5PTNAHxb+0n+yPDqTT6z4bgW3vACzQRrhZOfYcGviLVtIvNEv5bK\\/tpLW6hba8co2sPzr9qpoYr0MkgBXGBmvn\\/APaB\\/Zi0j4kWX2uGBbfU0OROgwenQ10QqW0ZjKHVH5jOGIA9O9NycmvbvGf7Lfi3w2sskMKXsEeT8jANgegrxq\\/025064eG5heCdDgo64INdSaexha25X6sMfnTsAqW9+\\/pSgBl6YpoJz82RxxTAfG21Sen9aY5yR3pM5Bx19+9NLfMR3x64oAD90cdKB8p6ZFBDMowO\\/c09cFRxnj1oAF4zwR6ihsswOM57UjY3DPB9aQMTzgfUUAdz4Uj0+HSf9KkKSSOWG3pxWjdhYjtWUzWuew5ArOsLqG00+3guLYOAm4Hvk96Z9t8sO0Qyn9wigDl9SIW4kKnK5OMiqLc9+ParF3L5szNjGTkj8aq8DPUn270AT26h5Am3rnvVh4vJQ5GfbpVeF9jLkYI\\/nU9wXaLGevPNAFQkkkjHPApEH59KVRwc4\\/E0hbHbmgBz\\/kAeopoAO05x\\/WnsAAp\\/Ooi24YwOOg680AHJ9OPXtXZfDFN+r3pwGIs5No9+AP1rjiRwcV1nw9cJdag4HItmGc4AyRyf0oAwr5Nl3OuApDnIqHouQOvc0+7C\\/aJFUhhkjI6Go+cnnjHOeaAGS\\/Lg4655NMLMccDj2p8mSAMYxzUZJ4IwB1oAUOScEcmgZ6kFfajcARgZPrTNxXAHWgDrvhh4zPgrxjZ6iVDWvMUyk8FDwfy\\/pX1D4x0PSfEFol5aiF0dMo8ZB3cdQa+L92Dntn8q7nwd8T77w9pr6e8peAf6ssNwTPUfSk1d3GmdLr\\/hBIZJim3CtzgZFcRd2DQvkcHPQ9a1Z\\/HEt08hLbjKcnn+Q7Vl3F3PcYLcHpz0piCCeaxlV4pGjZOQyNgivY\\/Al5rfxB03UERWluLWFd0m\\/DScnHHr1rxIyhXBOS3cV3fwu+KC+Bp78SxyMlzGqDZj5WB4P05P50mNDde0a8sLpory2uI51PMciHI9s1zF\\/A8+Y1Rkx1yME16Vq3imPXW+1SlyJeQ7DFYVwlvc7cYY4wKEB53JpTqCSOgzwKbbveaZIHhdwOpArs20zbcGMAD0BP8AhTrzw88YUgKc9hTESeFfHUKYjuAIZh3Ydfxrop\\/FhUiRTgkZGD90egrhrjw4sik457HtTRpGo28YCNvReitz+ApWA9A0bxndW4aQOWMjZHuK9U8H\\/EeQO5lkO3ds\\/Svm6C4uYZS1wjBsYLA10Ft4nMK8bvlI+7xx\\/nNJxTGm0fXdj8QUwpa4Bz3z07VuWXj2KX5DIOB94nvXxvZ+MZ4Osr7R0wcZ+tdHp\\/j2VQxWXk44JrN00Wpn1zbeL4p3RfNUjOOTWnHqVvcyr+8QjH3d2K+Y9E8etLGP3hE\\/QNnvXU6H42H20Ca4OFGSazcC+Y+hhYwTKJCFwcDC1ah0W2RN4KEEcHFec6F47tnbElwwRgAeOMe9bGqeNLLTtPM63AaFiI8rwyt0GfUdKy5WXdHe2q2scZRcHimzatDbPt3L7EdfyNeOp8S4vKkcylH3EA9u+c+3FZ+p\\/Fixs4N08xbAPIPcDgjNPkbDnR6zf60rhtsnyjOOnP4VwGr+LrSylYySAlmIwTjj1\\/z7V4V4r+PN1dPJDpm9pSNpkcYA7fjVn4eeG7jx9dldYu7iVnO8eS5Qg568VqocquzNzvsdP4i+KWniQIJ1Lbs8sPl5rS0P4y2Wi2H2u7uYrexjwWmd+N3Uj3Pt7V4H+0\\/4W0v4V+L9M0vQri4llltPtNyLmTzNhZiFAP0BP414lfa1e6jGsVzctJEhysecKD6gVoopoi7TPQvj78aLz40+MDftvh0qzUwWNsxzhM53kf3m4J\\/CvNUjdTjaemMAUyPlvT6Vaa5PzbzzjqT3rRJJWJbbGL5p7HPbigmcoAVYYoN02Rn6Ugm+YsTjA5piEDOoPGD9KGmkAxggjsaDcdOTj2pWlJHI565FACZ81WypZvUDpQtuNuSAc1f07XZ9Psr2ziSNlu1CSF0BIGc8E9KrzsEiQDG0UAVXKngdj3PShIgcMDnFKuGYkccdvWrkaqY8Z+btj+VAFIqAOeO9LHHuOc4xzihiWJ35yp5qeFV3HIOOM80AMFuDng\\/WoPLO7p7c1bnYwFSPun1qNHUNnGM8UAMNqwBOSPf1pvlkHBIPfp2q2ziSMjIyP1qszngk5x2oAfbweYDnr0FOmh8pTj8jwc06GZY1BwM561Jcf6Q4ZOT049aAKoU4HOKK2bbw9qVxEHitJpE\\/vIhINFAH63+WC424A\\/u5pziQN02jvkU13w2OPwNSI0YRuQD\\/ALteYdo1II2HBzjuRmnrEvPzA\\/QVF5\\/B+fP0FMWV2znH4UAWkZuc\\/o2aYkqqT8wJ9G4\\/lVdbgnPlMw9cGnM4HXAP4UAWDKG7KT\\/tCgHOcYX8arswAGWZh6Y6VLHKEGSSAaAHgH\\/lmzE98iiPKMcsM\\/71AQNyXJHXgGl+VjgMOPWgBzqrDn5hSps2gABR9KgmXavyr82fwpyvIIhjP0ycUASjcX24AT+9TvL2DIIIHcZFQlmdMEZPpnihW2jBXn0FAEwUsQxOB7808uEjOGBI7Dr\\/ACqOMGTthf7pp5UhSuF20AAlLpnaM\\/XmkV\\/73B96BgDGVpTGGGRgn2oAlWQBCAAQe5HNMRiB8u0\\/VajKSE8Lx35pdpB6tg\\/3aAJHfJBbt07UjzFyNwDY9cU1odx+Uk\\/lStE6YyTz0oAkWQsCVwvsaZCxlB4PH90Um3y\\/vnk9MU54ufn4+pxQAjtyMjd9BjFKmAepX6D\\/ABpSSAOW\\/CgB26bs+7EUAMOznnP50wgY+UHP0qRY2Qk7c\\/U\\/\\/Xoyw6tj2FACBflB39e2elI5JOByc8HqacitvyQQD3zTwuSaAISpbBI5\\/WpQq45PJHr704IVAOevSkI4GT270AROnzZB5pqu2TnBA79KeAGJ68j\\/ADzQgz1yfp3oAmjc8fw++atwvtI556VSA28VYVjtyOSe9AF7zsYIPWhXzgc49qrIcjrT06jGM+lAFgtk5z\\/gKa8gckNjg1GWGcduahmbBLAkN7UAV7\\/S7O9BWSJTnPavIfid+zX4c8dWcwlskWdslXjXDIcccivXVkLZ3HPHFPWQjIIyKpNrYTSe5+VXxS+AviH4catcRG1mvbBclJ44ycDPQ4HWvNntGj4ZWRh\\/CwxX6++IfCmn+IY3W4hSTcMHIryLxF+yr4X18ySPYJvk43Lwa6Y1VbUxdN9D815Yhls5BB4JoVTgN3719WfEL9ijU9OaefQJWlRckRyt+OK+Z9b0S98OarcadfwmC6gba8b9j\\/nFbKSlsZNNbmXtC84z\\/wDrozj6ds1PtBYcAEHjFRFNwzk47iqEMYdx1PanJhnGeOccUALjkYP96prSItcxgdWYDp0oA7eW4FzHHE0ahVUKD0yMVn3YcBiDtA4x7Vbu7dopCWXg\\/wAQNZVwHSF2J3jpmgDnZ+ZM9T3NNIGevXnNOYZfIyM00RFhnHtmgCbavXIHtT5XG31+gqFRgEMfpTTknHABOKAAtkg+\\/btSAYPDZ9ADQT8pz\\/jTRkIeSfbtQA5m4BJ6d+1ITlc5x2puOeefWgnkk8DP50ADZx1wfTvXa\\/Dq3tZk1iS5u0tlFuVO5ckgkdK4sDAJ6rXVeCnK2+rMVDR\\/Z8HnocigDDlwHbaRtJPP+NRHAXgkdakfO4nI4JP1pvDdMn0oAhmBba3IGO1R7g3b8u9TXOeFBJA6GoW+negBFIDZ6D0pA20Z\\/kaXGOcHj9KTA6gcCgA5pd3POfbNGMlunNBGRkDoO9ABv+TAHvxWjY6y0AKT5lj9e4rN52EZ70YABJ5NAG893aMpII\\/4F2qlNcxZG0lvSs9V8wgY4J4qR43gZgwKMOobg0Aa+meJ7mwCo+JbfGNjn+VdTpur29+N1q6xSgfcc85rz0NkdB7UsMzwSLIjbHU5yKAPVLIPJOskwDDqea3Li6ijiXhTkYJZuRXKeF7+HXbcx7il0F5UH73vUuoNNaMyMPM7cnjFAGrG0dzclFbdgZJz3rQt7FNoYLuJ75rlNEufKkGWySTwBgmumXVFjAQSgtnDKB0\\/HvSYGimmRzRbWhVs\\/wB4cio28N285ZmiCY7KKkttZjAABGffrUi6rHL8xcE+g7e1IZnXPg+Byxjm288duaxLnTJ9PkYBQ6qeq11M98oj37gFbH\\/1qpRyLc5JbgjPzelFxGfba86RbUVkZflCnr6Voxa5NZxcNvI+cncOuKnbRra5DcHzPXpmrfw98H6brPii7t9VWWe1t1WTZFJsJycEZH4UXsMteGvGVzdMIJMjfIpLf3VByTn8MV1eqa3f3byxW7s8LHKbxgD3+veuu8YaJ4Y8N+FbFdJs4bZmuHJlILSMu3G0seSB6Vw1prtrEW807VzwP6YqFZ6lbaFE2V22ZJrllAJJOcZ\\/\\/VWe2lK0hneViSuMNkj+VWfFHjmx0u1d2lGxVI\\/3jxxivJdW+LV3cborKERwdAX5OO9WI7iPRx9tRflYEgkV7d4d8U+H\\/hZof9t6rdRx+QCUiBG+V\\/4VUd818dv491fzPMSZY5B3UVl6rrmo65MJb65lunHTzGyB9PSk43FexqfELxtefELxjqniC\\/z515M0gQnIjTPyoPYDA\\/CudQfN1\\/Sm7m2\\/0pw+Q4PBq0IkAHbjnoDSNweg+vrTM5X0PekwcYPFADyOD0NIOBwOvOSKbnOewFOXOeq89sUAJzyffkClJxgYHHfvTQ2T\\/nrS9VyCR7H0oAcpDc9O\\/wBacZCYyrHFR4Ck7SB3+tKcgY7elADi2MDORjFAkIUkHn88U0FlI3cLSgktjH+NACudzZPB9u9LFMQuMnJpoyeDkY7etKeVP9fWgCV2yoBO761EGbG0ZFM3kknI68Vt+HNPiv7kRSAnkmgDJVSrEg4A7etXbLSbrVJUjt4Xd2IAwM81a1qw+xXjKoOwngnuK6f4YSj+37RGIwXGR70AaHhD4Janrut2Vneq1qtw2BuWvuf4a\\/sZ+FNL063lurWO6mGGMkiAk8ehry5EWLXNFkHIEq8j\\/P0r7b8Lyf8AEogPUlQf5Vzzk+hvCKsYem\\/CHw1ptnHbxafCEXoNgortQy\\/X8M0VjYo8Gu\\/Ed6rfKI8Y6BT\\/AI1BD4wvV+Voock90Of51XuBkDA+lUZLcuSR16UlYrU2f+EqvG6LGCOwB5\\/WnjxPdHlkiI9wf8a59VKHGeMVP5THbwPaiyC7NVvFF30jht+vXYen508+KL116RAeyn\\/GshEIY7vXr\\/n6VMsbMRjBAosguzT\\/AOEhvV7R\\/XH\\/ANercGu3bcbYiT0wP\\/r1kJCwxgfKfU1ftrdm4YgjOOtLQLs0o9TncZ2hsjoc4\\/nU0d9O4GQox6ZqvFEwwCTxxkGrix7VHHIHepKGefL1IBOehFJJdyheDj1FOkGBgDP09Ka0Qxk+vXvSAYupTEbT9M96UX0wA6D3HWoihVxjp1zQIPm3AEcfrQBdivJOCWyMfxd6nW9ZSOEx9KzVDbgOQRxntVmIYZQd3WgC+LyTI4AU+2AaeL45ICqM1UzgAf8A681FJL8qt+fuKALp1ByTgJke1RNqU3PCfiDWa1x3yeenrTftG0\\/L6UCuaZ1OdeyHPt\\/9emjUZwDhEGfY1nfasuB2xjB7VL5pZB3460DL8d\\/KMZI\\/AVPJqDsPmxxz3rJErLgd84wPWpBLjk49TQBoJcEZyA3GTSm7dTn5fxzVITELjPHcVCJ9zYA470Abcc+8DcF99uaek+H+XB+vaslbwgKF6nnmp4pweCc4\\/nQBpLtBaT+InqKUSDGeS39Koi83R4zjPvTkkJbtgCgC4z\\/MOn1puRjceWxUUcgbABzj0pWfB\\/iH0oANwVzxwTz\\/APWp6yZU8ZzxVV5QdvtT1kVVGCOeemDQBOTtY8Y4FTJLtyM4+lUi4xycepNTRuGXqQPSgC7u5I9egFSrIMYI9eM1ACRgn0BNKZdoJPBPfFAD2fPHaoXORyck9803zQDyPl9qZJJ3yM\\/1oAQnB64+tPKblGDj3pkbBgQRk570qkEYH\\/1qAIn+XoDwetRGcpyBjtmnykfMenU8HtVWUF2\\/zigDotPhje0Qugc\\/e+bmvzF\\/bPu7Sb49azFaIii3jiik2DgvsDH\\/ANCH5V+mqy\\/ZNPaTcFCR5+nFfkZ8btYbX\\/iz4r1BsES6hIBn0U4H6AVvR3uZVNjiRISSCOM5qVYmlGB19jUIAZvXBxzxW1p6FYicc9812HOY7q6MFIIP0q5pwX7ZEGb5QecCkv0Amzj\\/AOvVnRYEkv4gflAz1\\/GgDXdY5pHaK4JLMch+KqahFJHbtlSQP4lOQalfauTtXuQQcVVu3mEDFXAUjoTmgDF5wAMn19qE44HQ8+tMdxv4B4weeOab5uQCfrQBNtwMdT71Gy\\/\\/AKj60iSdznHrSCUDJB49qAF7cgH1x2pMKpAznnOKa0mOBjnsTQBkY6elACDOQc9ecZp3GMDIPXPrSM20DPXuaQHjOOMUAKRz1GeT713Pw98uLStflMaSOtuoCOMjlh3z1rhCCTkdK7HwNdCPSdfjYtmSBQAOhww7\\/wCe9IDn5W\\/eNxncTwAcU0fMDxk5xjtRIn97Of8AaoZSSAcDA7UwIblApBI68Y9KrqODwRjpzVi8AKLjqKrsSqjHHfrxQAAkkkjr2oB46DHrQFyeMmjHOCP60AIcjtkHoaUYYn6d+aBhjgjn0oXkEZ\\/WgA5IHYe3al3ccdup70gwB2HHWgEqp7qeaAJo5BGQ\\/YHgCu78TaNJ4n0BPElu\\/mSRIkdzEByuAAG4rhDEfJBAG4nGCa6v4ea89lqg0yVwbK+\\/cyqegB7\\/AK0AcgOCeQvuBRwfU+oroPHfhSbwb4im0+U7o\\/vxODkMp6HNc6Mc5yOec96AJbS5ms5lmgkKSKeCDzXQN45ubmJVuI0dgMbhwTXNDGMDk0AAHPcd6AOwsNdtpnXe4jPo3FbL+RIoMVxhsZODkV5sMj2P0qSOeWJgysU9CD0oA78XsluQoYOv94GrNrq3mlVYlQpwGB61w1vr0sYG8B89SeuKsx+IUX\\/lmXPXrQB3f9oRmQYOQeSM1ctrm2YqNwwGB+Y9TXnNv4oeOfc0KEYwNvBAqw\\/ilZIdiREtjjJoA9Tk8VQwaWZJdqbgyjjrjvUXgfxJb2txc3k8yxNcMFAd9uQvc\\/UmvHr\\/AFm6ndVkmO1VAWMDgCqj3s0hKvKzEknHPWgZ6\\/8AFD4ySXLQaXpMkcsMCMXuBz85xkL24AFeWz+JdUu2zLeysewzx+VZgbJx60hAGOPmJ7mlsIknnlvGBlkaRj\\/E7ZqL7uQMnFLnpznPTNLgDGOhPSmADHQkEfzo4zx07YoPTHftTSMDPqemKAFAIzj+fNAPPYfSlI2gY4HbmkbPTueaAA\\/T6UegwAOtCpg8nrz60AE8HnHSgAzwT9e9BG4Hv9Dmhgoxx+GKAQOSeKADJBoHf+LHalXJPcd8+tN25yR3oAUYBznjrkUpJz1z7elLgbec5ppHGcEgetABjJ6n\\/GlwSB0J9e9KCc88DHANKoJfA4+lACdcc04jA4Ix60zAJx0p+AVyeSaAGMBzjFaWhymG9jOQoHY1n8MoyM\\/hUtnKySqwO3B7dqAO28SaaboJMDxtyazfC8htNUidHMbKww9a9vc\\/bNOZHzgjFY6wG2k2g8k9aAPrzR7lbvRtNuInEjI6NuHbmvs7wNLv0K3yf4fz4r4O+GF8s3gyGPd+9jXoD93mvuP4dSl\\/Dtqc8lBz+FclTQ3gdhvJ5Xp9KKrgj1orG5pY8KuLcg9RjPbvSxqUGSOcZwKnuf8AV\\/8AAv8AClj6H\\/dH9aYFFrfJ4GDnGTVqC3YjkY7UH\\/Vx\\/wC9\\/SrkX3n\\/AM9qAKi2YPBJYH\\/69PW26HOe30q2f9ZF9f6mm9l\\/3qAI\\/s2BuHWr1uhyMr17dBTIv9T+FX4f60mNIljiJ4CnFWFgyuSCpHvT4uj1NP8Af\\/Ef0qRlGaIdMexqsQxBBAwDz7Vem6tUL\\/6w\\/hQBXCEfNkilCAsc5HfFWD\\/q\\/wAf6VHF\\/F\\/vf4UANEQAJIPvUsKY46ZHanS\\/6lfqv9Kkj+8PxoAYylc88j9Kp3XL5PI61oH\\/AFZ+v9aqXPU\\/7g\\/nQBl3Hyk4xtyTxVGW6eJsYHPf0q5N1FZ1x\\/qx+H86skIrliQCMk+laUVwW+7xntWTF\\/r0rWtOn4UgTHxy7jk8ZHApxmxzkE+maiXp+NQt\\/rJPqP50FFvzgV4ORTlwW4I9\\/Wqyf8ekP1H8qmH+sT6j+tFhXHPcbXAIz34NIbwFB8xxzxmqdx\\/rX\\/3TSf8ALJvx\\/mKLBc0VvNy9e3ABqZbvGPmHPH1rLj\\/j\\/GrEf3D9P6UmFzThvAhIDA+9Sy3gJwcVlxfehpZPun8aQXLwuBu9M9jTluhkgnAz0zWeOq1Mf4fof60DL4nB7jJ71btn3c9j2rIH3H+n+NaVh\\/x7D8KAL5m2qTjtSeaCOx+tQP8A8e7fQ0k3RfrQBJJLt9+Oxqq8+SevPpTZPur9KhH+rSgC0LkDGOM+lSCfJHoO9Zs3+t\\/AVND0i\\/GgCw8mQfTFQp88oUtzmppev4VV07\\/j5T6igCx4x1JtK8J6nOqn5LZ2Htha\\/H3Vbp77Ubq4kbfJLKzsx5ySSa\\/XH4r\\/APJN\\/EH\\/AF5S\\/wDoLV+Qs3U\\/Q11UdmYVB0C5mXgelbMByMdyc8VlWn3k\\/D+Va1n\\/AK0V0mJUu4W84jqf5Vc0aJDdN5iZwjH8cUyf\\/Wy1NpX\\/AC1\\/3G\\/lQBUMkQb5g20eh61DdESREqCBjnJpYerfQ\\/zpLr+GgDLbls4GcZNNfGeO9L\\/Gf96kb7p\\/z60AGcHHYfpQB8vqSe9LJ0P0H9KVPuH\\/AHh\\/KgBu3PfJoIBYZAOTj260Sf6tqVf9b+P9BQA1QR0H45pMY4HanN9xv896G+8v4UAIMr3z7V1XgyJpLTVzlRH9nzuJPXIwOO9cr\\/y1b6j+tdX4K\\/5Buuf9c0\\/9CoAxThA2Y8sT1Jpo4P1p7f8AHw\\/1P9art94\\/UfzoAkuYXaNWVSVHX2qhnnA47Vp3f3F\\/H+VZ8fQ0ANJwccY6Ufe754ximxf6xvwpy\\/6t\\/wAf6UAGeQBScEZHI96Q\\/wCu\\/AVIv8X0oAavz8AY+tTWcv2e6ikZRIqtnDd6hj\\/4+Pw\\/oasCgDpfHWvL4p1x78WkOno0UaiG3QKi7VA6DvxXLwSlJY5AcFDnPpWzqH3pfqaw4\\/vH\\/d\\/woA7DxX44i8S+H7G0ltib62AHnsckgVxgwA3XpUz\\/AH3+pqB\\/utQA4Z7dugpSdx6A\\/WiP7zf71NX\\/AFRoAVBxjdjNBAXnrnj6Ui9D9aaPvPQBICe\\/b8BSEgEUkP8Aqm+n+NK33Y\\/92gA6ZBwTU0UZJxkHnAJqKTr\\/AMCP8qsfwxUAV5TukLYzRjpnIB5pF7fj\\/OkXt9aAHA8E9R3NNbOBhvwpZP8AGkfr+VAChRjII4PSjbk5J59qdH99Poak7r9KAIQCM59PWgjBHPFKP9bSS\\/w\\/73+FAAM5PqfT2pV9DwfY0qfeP+e1MX7rfUUAOLYIPB9c0NkdecUR\\/wAX1pF+6n0\\/pQAp7dCaQ4PUjPapE\\/1R+n+FQDqfoKAJQFyc+mc0Ke2CSfWkbt9KkH3V+tAERIz19hThg4PUUxfut9TUif6pP896AEHfnt2pyg99uT396IfvP9f8Klj\\/AIv9+gCuMhvQZqRSMcd+oph6r\\/u\\/1p9v\\/q2+tAEsibogxIHHJFV0J3A8881ZH\\/Hoah\\/5aH8aAOy8PzxtbhWxv96vahZbmVh0B\\/Wue8Nf6411d32\\/36APU\\/hTdCPSriHJwBkD07196\\/CW6W68MWbfeIjHJ+lfn98Kf9VP\\/uj+tfePwS\\/5FK2\\/3F\\/kK5avRm0D0URbucgfjRUbfeNFcxrc\\/9k=\",\"margin\":[-40,16,0,0],\"width\":595},{\"margin\":[-20,-150,0,0],\"columnGap\":8,\"columns\":[{\"width\":\"auto\",\"text\":\"$toLabel:\",\"style\":\"bold\",\"color\":\"#cd5138\"},{\"width\":\"*\",\"stack\":\"$clientDetails\",\"margin\":[4,0,0,0]}]},{\"margin\":[-20,10,0,140],\"columnGap\":8,\"columns\":[{\"width\":\"auto\",\"text\":\"$fromLabel:\",\"style\":\"bold\",\"color\":\"#cd5138\"},{\"width\":\"*\",\"stack\":[{\"width\":150,\"stack\":\"$accountDetails\"},{\"width\":150,\"stack\":\"$accountAddress\"}]}]},{\"canvas\":[{\"type\":\"line\",\"x1\":0,\"y1\":5,\"x2\":515,\"y2\":5,\"lineWidth\":1.5}],\"margin\":[0,0,0,-30]},{\"style\":\"invoiceLineItemsTable\",\"table\":{\"headerRows\":1,\"widths\":\"$invoiceLineItemColumns\",\"body\":\"$invoiceLineItems\"},\"layout\":{\"hLineWidth\":\"$notFirst:.5\",\"vLineWidth\":\"$none\",\"hLineColor\":\"#000000\",\"paddingLeft\":\"$amount:8\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:10\",\"paddingBottom\":\"$amount:10\"}},{\"columns\":[\"$notesAndTerms\",{\"alignment\":\"right\",\"table\":{\"widths\":[\"*\",\"40%\"],\"body\":\"$subtotals\"},\"layout\":{\"hLineWidth\":\"$none\",\"vLineWidth\":\"$none\",\"paddingLeft\":\"$amount:34\",\"paddingRight\":\"$amount:8\",\"paddingTop\":\"$amount:4\",\"paddingBottom\":\"$amount:4\"}}]},\"$signature\",{\"stack\":[\"$invoiceDocuments\"],\"style\":\"invoiceDocuments\"}],\"defaultStyle\":{\"fontSize\":\"$fontSize\",\"margin\":[8,4,8,4]},\"footer\":{\"columns\":[{\"text\":\"$invoiceFooter\",\"alignment\":\"left\"}],\"margin\":[40,-20,40,0]},\"styles\":{\"accountDetails\":{\"margin\":[0,0,0,3]},\"accountAddress\":{\"margin\":[0,0,0,3]},\"clientDetails\":{\"margin\":[0,0,0,3]},\"productKey\":{\"color\":\"$primaryColor:#cd5138\"},\"lineTotal\":{\"alignment\":\"right\"},\"tableHeader\":{\"bold\":true,\"fontSize\":\"$fontSizeLarger\"},\"subtotalsBalanceDueLabel\":{\"fontSize\":\"$fontSizeLargest\"},\"subtotalsBalanceDue\":{\"fontSize\":\"$fontSizeLargest\",\"color\":\"$primaryColor:#cd5138\"},\"invoiceLineItemsTable\":{\"margin\":[0,0,0,16]},\"cost\":{\"alignment\":\"right\"},\"quantity\":{\"alignment\":\"right\"},\"tax\":{\"alignment\":\"right\"},\"termsLabel\":{\"bold\":true,\"margin\":[0,0,0,4]},\"fullheader\":{\"fontSize\":\"$fontSizeLargest\",\"bold\":true},\"help\":{\"fontSize\":\"$fontSizeSmaller\",\"color\":\"#737373\"}},\"pageMargins\":[40,30,40,30]}'),(11,'Custom1',NULL,NULL),(12,'Custom2',NULL,NULL),(13,'Custom3',NULL,NULL); /*!40000 ALTER TABLE `invoice_designs` ENABLE KEYS */; UNLOCK TABLES; @@ -1498,12 +1507,11 @@ CREATE TABLE `jobs` ( `queue` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `payload` longtext COLLATE utf8_unicode_ci NOT NULL, `attempts` tinyint(3) unsigned NOT NULL, - `reserved` tinyint(3) unsigned NOT NULL, `reserved_at` int(10) unsigned DEFAULT NULL, `available_at` int(10) unsigned NOT NULL, `created_at` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - KEY `jobs_queue_reserved_reserved_at_index` (`queue`,`reserved`,`reserved_at`) + KEY `jobs_queue_reserved_at_index` (`queue`,`reserved_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; @@ -1783,7 +1791,7 @@ CREATE TABLE `migrations` ( `migration` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `batch` int(11) NOT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=106 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=107 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1792,7 +1800,7 @@ CREATE TABLE `migrations` ( LOCK TABLES `migrations` WRITE; /*!40000 ALTER TABLE `migrations` DISABLE KEYS */; -INSERT INTO `migrations` VALUES (1,'2013_11_05_180133_confide_setup_users_table',1),(2,'2013_11_28_195703_setup_countries_table',1),(3,'2014_02_13_151500_add_cascase_drops',1),(4,'2014_02_19_151817_add_support_for_invoice_designs',1),(5,'2014_03_03_155556_add_phone_to_account',1),(6,'2014_03_19_201454_add_language_support',1),(7,'2014_03_20_200300_create_payment_libraries',1),(8,'2014_03_23_051736_enable_forcing_jspdf',1),(9,'2014_03_25_102200_add_sort_and_recommended_to_gateways',1),(10,'2014_04_03_191105_add_pro_plan',1),(11,'2014_04_17_100523_add_remember_token',1),(12,'2014_04_17_145108_add_custom_fields',1),(13,'2014_04_23_170909_add_products_settings',1),(14,'2014_04_29_174315_add_advanced_settings',1),(15,'2014_05_17_175626_add_quotes',1),(16,'2014_06_17_131940_add_accepted_credit_cards_to_account_gateways',1),(17,'2014_07_13_142654_one_click_install',1),(18,'2014_07_17_205900_support_hiding_quantity',1),(19,'2014_07_24_171214_add_zapier_support',1),(20,'2014_10_01_141248_add_company_vat_number',1),(21,'2014_10_05_141856_track_last_seen_message',1),(22,'2014_10_06_103529_add_timesheets',1),(23,'2014_10_06_195330_add_invoice_design_table',1),(24,'2014_10_13_054100_add_invoice_number_settings',1),(25,'2014_10_14_225227_add_danish_translation',1),(26,'2014_10_22_174452_add_affiliate_price',1),(27,'2014_10_30_184126_add_company_id_number',1),(28,'2014_11_04_200406_allow_null_client_currency',1),(29,'2014_12_03_154119_add_discount_type',1),(30,'2015_02_12_102940_add_email_templates',1),(31,'2015_02_17_131714_support_token_billing',1),(32,'2015_02_27_081836_add_invoice_footer',1),(33,'2015_03_03_140259_add_tokens',1),(34,'2015_03_09_151011_add_ip_to_activity',1),(35,'2015_03_15_174122_add_pdf_email_attachment_option',1),(36,'2015_03_30_100000_create_password_resets_table',1),(37,'2015_04_12_093447_add_sv_language',1),(38,'2015_04_13_100333_add_notify_approved',1),(39,'2015_04_16_122647_add_partial_amount_to_invoices',1),(40,'2015_05_21_184104_add_font_size',1),(41,'2015_05_27_121828_add_tasks',1),(42,'2015_05_27_170808_add_custom_invoice_labels',1),(43,'2015_06_09_134208_add_has_tasks_to_invoices',1),(44,'2015_06_14_093410_enable_resuming_tasks',1),(45,'2015_06_14_173025_multi_company_support',1),(46,'2015_07_07_160257_support_locking_account',1),(47,'2015_07_08_114333_simplify_tasks',1),(48,'2015_07_19_081332_add_custom_design',1),(49,'2015_07_27_183830_add_pdfmake_support',1),(50,'2015_08_13_084041_add_formats_to_datetime_formats_table',1),(51,'2015_09_04_080604_add_swap_postal_code',1),(52,'2015_09_07_135935_add_account_domain',1),(53,'2015_09_10_185135_add_reminder_emails',1),(54,'2015_10_07_135651_add_social_login',1),(55,'2015_10_21_075058_add_default_tax_rates',1),(56,'2015_10_21_185724_add_invoice_number_pattern',1),(57,'2015_10_27_180214_add_is_system_to_activities',1),(58,'2015_10_29_133747_add_default_quote_terms',1),(59,'2015_11_01_080417_encrypt_tokens',1),(60,'2015_11_03_181318_improve_currency_localization',1),(61,'2015_11_30_133206_add_email_designs',1),(62,'2015_12_27_154513_add_reminder_settings',1),(63,'2015_12_30_042035_add_client_view_css',1),(64,'2016_01_04_175228_create_vendors_table',1),(65,'2016_01_06_153144_add_invoice_font_support',1),(66,'2016_01_17_155725_add_quote_to_invoice_option',1),(67,'2016_01_18_195351_add_bank_accounts',1),(68,'2016_01_24_112646_add_bank_subaccounts',1),(69,'2016_01_27_173015_add_header_footer_option',1),(70,'2016_02_01_135956_add_source_currency_to_expenses',1),(71,'2016_02_25_152948_add_client_password',1),(72,'2016_02_28_081424_add_custom_invoice_fields',1),(73,'2016_03_14_066181_add_user_permissions',1),(74,'2016_03_14_214710_add_support_three_decimal_taxes',1),(75,'2016_03_22_168362_add_documents',1),(76,'2016_03_23_215049_support_multiple_tax_rates',1),(77,'2016_04_16_103943_enterprise_plan',1),(78,'2016_04_18_174135_add_page_size',1),(79,'2016_04_23_182223_payments_changes',1),(80,'2016_05_16_102925_add_swap_currency_symbol_to_currency',1),(81,'2016_05_18_085739_add_invoice_type_support',1),(82,'2016_05_24_164847_wepay_ach',1),(83,'2016_07_08_083802_support_new_pricing',1),(84,'2016_07_13_083821_add_buy_now_buttons',1),(85,'2016_08_10_184027_add_support_for_bots',1),(86,'2016_09_05_150625_create_gateway_types',1),(87,'2016_10_20_191150_add_expense_to_activities',1),(88,'2016_11_03_113316_add_invoice_signature',1),(89,'2016_11_03_161149_add_bluevine_fields',1),(90,'2016_11_28_092904_add_task_projects',1),(91,'2016_12_13_113955_add_pro_plan_discount',1),(92,'2017_01_01_214241_add_inclusive_taxes',1),(93,'2017_02_23_095934_add_custom_product_fields',1),(94,'2017_03_16_085702_add_gateway_fee_location',1),(95,'2017_04_16_101744_add_custom_contact_fields',1),(96,'2017_04_30_174702_add_multiple_database_support',1),(97,'2017_05_10_144928_add_oauth_to_lookups',1),(98,'2017_05_16_101715_add_default_note_to_client',1),(99,'2017_06_19_111515_update_dark_mode',1),(100,'2017_07_18_124150_add_late_fees',1),(101,'2017_08_14_085334_increase_precision',1),(102,'2017_10_17_083846_add_default_rates',1),(103,'2017_11_15_114422_add_subdomain_to_lookups',1),(104,'2017_12_13_074024_add_remember_2fa_token',1),(105,'2018_01_10_073825_add_subscription_format',1); +INSERT INTO `migrations` VALUES (1,'2013_11_05_180133_confide_setup_users_table',1),(2,'2013_11_28_195703_setup_countries_table',1),(3,'2014_02_13_151500_add_cascase_drops',1),(4,'2014_02_19_151817_add_support_for_invoice_designs',1),(5,'2014_03_03_155556_add_phone_to_account',1),(6,'2014_03_19_201454_add_language_support',1),(7,'2014_03_20_200300_create_payment_libraries',1),(8,'2014_03_23_051736_enable_forcing_jspdf',1),(9,'2014_03_25_102200_add_sort_and_recommended_to_gateways',1),(10,'2014_04_03_191105_add_pro_plan',1),(11,'2014_04_17_100523_add_remember_token',1),(12,'2014_04_17_145108_add_custom_fields',1),(13,'2014_04_23_170909_add_products_settings',1),(14,'2014_04_29_174315_add_advanced_settings',1),(15,'2014_05_17_175626_add_quotes',1),(16,'2014_06_17_131940_add_accepted_credit_cards_to_account_gateways',1),(17,'2014_07_13_142654_one_click_install',1),(18,'2014_07_17_205900_support_hiding_quantity',1),(19,'2014_07_24_171214_add_zapier_support',1),(20,'2014_10_01_141248_add_company_vat_number',1),(21,'2014_10_05_141856_track_last_seen_message',1),(22,'2014_10_06_103529_add_timesheets',1),(23,'2014_10_06_195330_add_invoice_design_table',1),(24,'2014_10_13_054100_add_invoice_number_settings',1),(25,'2014_10_14_225227_add_danish_translation',1),(26,'2014_10_22_174452_add_affiliate_price',1),(27,'2014_10_30_184126_add_company_id_number',1),(28,'2014_11_04_200406_allow_null_client_currency',1),(29,'2014_12_03_154119_add_discount_type',1),(30,'2015_02_12_102940_add_email_templates',1),(31,'2015_02_17_131714_support_token_billing',1),(32,'2015_02_27_081836_add_invoice_footer',1),(33,'2015_03_03_140259_add_tokens',1),(34,'2015_03_09_151011_add_ip_to_activity',1),(35,'2015_03_15_174122_add_pdf_email_attachment_option',1),(36,'2015_03_30_100000_create_password_resets_table',1),(37,'2015_04_12_093447_add_sv_language',1),(38,'2015_04_13_100333_add_notify_approved',1),(39,'2015_04_16_122647_add_partial_amount_to_invoices',1),(40,'2015_05_21_184104_add_font_size',1),(41,'2015_05_27_121828_add_tasks',1),(42,'2015_05_27_170808_add_custom_invoice_labels',1),(43,'2015_06_09_134208_add_has_tasks_to_invoices',1),(44,'2015_06_14_093410_enable_resuming_tasks',1),(45,'2015_06_14_173025_multi_company_support',1),(46,'2015_07_07_160257_support_locking_account',1),(47,'2015_07_08_114333_simplify_tasks',1),(48,'2015_07_19_081332_add_custom_design',1),(49,'2015_07_27_183830_add_pdfmake_support',1),(50,'2015_08_13_084041_add_formats_to_datetime_formats_table',1),(51,'2015_09_04_080604_add_swap_postal_code',1),(52,'2015_09_07_135935_add_account_domain',1),(53,'2015_09_10_185135_add_reminder_emails',1),(54,'2015_10_07_135651_add_social_login',1),(55,'2015_10_21_075058_add_default_tax_rates',1),(56,'2015_10_21_185724_add_invoice_number_pattern',1),(57,'2015_10_27_180214_add_is_system_to_activities',1),(58,'2015_10_29_133747_add_default_quote_terms',1),(59,'2015_11_01_080417_encrypt_tokens',1),(60,'2015_11_03_181318_improve_currency_localization',1),(61,'2015_11_30_133206_add_email_designs',1),(62,'2015_12_27_154513_add_reminder_settings',1),(63,'2015_12_30_042035_add_client_view_css',1),(64,'2016_01_04_175228_create_vendors_table',1),(65,'2016_01_06_153144_add_invoice_font_support',1),(66,'2016_01_17_155725_add_quote_to_invoice_option',1),(67,'2016_01_18_195351_add_bank_accounts',1),(68,'2016_01_24_112646_add_bank_subaccounts',1),(69,'2016_01_27_173015_add_header_footer_option',1),(70,'2016_02_01_135956_add_source_currency_to_expenses',1),(71,'2016_02_25_152948_add_client_password',1),(72,'2016_02_28_081424_add_custom_invoice_fields',1),(73,'2016_03_14_066181_add_user_permissions',1),(74,'2016_03_14_214710_add_support_three_decimal_taxes',1),(75,'2016_03_22_168362_add_documents',1),(76,'2016_03_23_215049_support_multiple_tax_rates',1),(77,'2016_04_16_103943_enterprise_plan',1),(78,'2016_04_18_174135_add_page_size',1),(79,'2016_04_23_182223_payments_changes',1),(80,'2016_05_16_102925_add_swap_currency_symbol_to_currency',1),(81,'2016_05_18_085739_add_invoice_type_support',1),(82,'2016_05_24_164847_wepay_ach',1),(83,'2016_07_08_083802_support_new_pricing',1),(84,'2016_07_13_083821_add_buy_now_buttons',1),(85,'2016_08_10_184027_add_support_for_bots',1),(86,'2016_09_05_150625_create_gateway_types',1),(87,'2016_10_20_191150_add_expense_to_activities',1),(88,'2016_11_03_113316_add_invoice_signature',1),(89,'2016_11_03_161149_add_bluevine_fields',1),(90,'2016_11_28_092904_add_task_projects',1),(91,'2016_12_13_113955_add_pro_plan_discount',1),(92,'2017_01_01_214241_add_inclusive_taxes',1),(93,'2017_02_23_095934_add_custom_product_fields',1),(94,'2017_03_16_085702_add_gateway_fee_location',1),(95,'2017_04_16_101744_add_custom_contact_fields',1),(96,'2017_04_30_174702_add_multiple_database_support',1),(97,'2017_05_10_144928_add_oauth_to_lookups',1),(98,'2017_05_16_101715_add_default_note_to_client',1),(99,'2017_06_19_111515_update_dark_mode',1),(100,'2017_07_18_124150_add_late_fees',1),(101,'2017_08_14_085334_increase_precision',1),(102,'2017_10_17_083846_add_default_rates',1),(103,'2017_11_15_114422_add_subdomain_to_lookups',1),(104,'2017_12_13_074024_add_remember_2fa_token',1),(105,'2018_01_10_073825_add_subscription_format',1),(106,'2018_03_08_150414_add_slack_notifications',1); /*!40000 ALTER TABLE `migrations` ENABLE KEYS */; UNLOCK TABLES; @@ -1841,7 +1849,7 @@ CREATE TABLE `payment_libraries` ( LOCK TABLES `payment_libraries` WRITE; /*!40000 ALTER TABLE `payment_libraries` DISABLE KEYS */; -INSERT INTO `payment_libraries` VALUES (1,'2018-02-21 16:57:58','2018-02-21 16:57:58','Omnipay',1),(2,'2018-02-21 16:57:58','2018-02-21 16:57:58','PHP-Payments [Deprecated]',1); +INSERT INTO `payment_libraries` VALUES (1,'2018-03-27 10:06:16','2018-03-27 10:06:16','Omnipay',1),(2,'2018-03-27 10:06:16','2018-03-27 10:06:16','PHP-Payments [Deprecated]',1); /*!40000 ALTER TABLE `payment_libraries` ENABLE KEYS */; UNLOCK TABLES; @@ -1939,7 +1947,7 @@ CREATE TABLE `payment_terms` ( PRIMARY KEY (`id`), UNIQUE KEY `payment_terms_account_id_public_id_unique` (`account_id`,`public_id`), KEY `payment_terms_public_id_index` (`public_id`) -) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1948,7 +1956,7 @@ CREATE TABLE `payment_terms` ( LOCK TABLES `payment_terms` WRITE; /*!40000 ALTER TABLE `payment_terms` DISABLE KEYS */; -INSERT INTO `payment_terms` VALUES (1,7,'Net 7','2018-02-21 16:57:58','2018-02-21 16:57:58',NULL,0,0,1),(2,10,'Net 10','2018-02-21 16:57:58','2018-02-21 16:57:58',NULL,0,0,2),(3,14,'Net 14','2018-02-21 16:57:58','2018-02-21 16:57:58',NULL,0,0,3),(4,15,'Net 15','2018-02-21 16:57:58','2018-02-21 16:57:58',NULL,0,0,4),(5,30,'Net 30','2018-02-21 16:57:58','2018-02-21 16:57:58',NULL,0,0,5),(6,60,'Net 60','2018-02-21 16:57:58','2018-02-21 16:57:58',NULL,0,0,6),(7,90,'Net 90','2018-02-21 16:57:58','2018-02-21 16:57:58',NULL,0,0,7); +INSERT INTO `payment_terms` VALUES (1,7,'Net 7','2018-03-27 10:06:16','2018-03-27 10:06:16',NULL,0,0,1),(2,10,'Net 10','2018-03-27 10:06:16','2018-03-27 10:06:16',NULL,0,0,2),(3,14,'Net 14','2018-03-27 10:06:16','2018-03-27 10:06:16',NULL,0,0,3),(4,15,'Net 15','2018-03-27 10:06:16','2018-03-27 10:06:16',NULL,0,0,4),(5,30,'Net 30','2018-03-27 10:06:16','2018-03-27 10:06:16',NULL,0,0,5),(6,60,'Net 60','2018-03-27 10:06:16','2018-03-27 10:06:16',NULL,0,0,6),(7,90,'Net 90','2018-03-27 10:06:16','2018-03-27 10:06:16',NULL,0,0,7),(8,-1,'Net 0','2018-03-27 10:06:19','2018-03-27 10:06:19',NULL,0,0,0); /*!40000 ALTER TABLE `payment_terms` ENABLE KEYS */; UNLOCK TABLES; @@ -2277,7 +2285,7 @@ CREATE TABLE `proposal_templates` ( KEY `proposal_templates_public_id_index` (`public_id`), CONSTRAINT `proposal_templates_account_id_foreign` FOREIGN KEY (`account_id`) REFERENCES `accounts` (`id`) ON DELETE CASCADE, CONSTRAINT `proposal_templates_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -2286,6 +2294,7 @@ CREATE TABLE `proposal_templates` ( LOCK TABLES `proposal_templates` WRITE; /*!40000 ALTER TABLE `proposal_templates` DISABLE KEYS */; +INSERT INTO `proposal_templates` VALUES (1,NULL,NULL,'2018-03-27 10:06:18','2018-03-27 10:06:18',NULL,0,'','Clean','\n\n \n \n \n \n\n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n \n\n \n \n \n\n

Proposal #$quoteNumber

\n

New Business Proposal

\n

Valid Until $validUntil

\n
\n

Prepared for:

\n

$client.name

\n

\n $client.address1
\n $client.city, $client.state $client.postal_code

\n
\n

Prepared by:

\n

$account.name

\n

\n $account.address1
\n $account.city, $account.state $account.postal_code

\n
\n

Project Description:

\n

Koala Photography seeks a full review of their historical financial records and future accounting needs. At the start, our experts carefully review your past records and assess your financial services needs according to the nature of your company and suggest the services model best suited to your requirements. The work plan is finalized only after an initial (and possibly subsequent) extensive consultation with [Client.Company]. Periodic review of our services and client feedback is an essential feature of our work plan which ensures that we remain an efficient accounting partner for your business.


\n
\n
\n
\n

Objective:

\n

Koala Photography seeks a full review of their historical financial records and future accounting needs. At the start, our experts carefully review your past records and assess your financial services needs according to the nature of your company and suggest the services model best suited to your requirements. The work plan is finalized only after an initial (and possibly subsequent) extensive consultation with [Client.Company]. Periodic review of our services and client feedback is an essential feature of our work plan which ensures that we remain an efficient accounting partner for your business.

\n
\n

Goal:

\n

Koala Photography seeks a full review of their historical financial records and future accounting needs. At the start, our experts carefully review your past records and assess your financial services needs according to the nature of your company and suggest the services model best suited to your requirements. The work plan is finalized only after an initial (and possibly subsequent) extensive consultation with [Client.Company]. Periodic review of our services and client feedback is an essential feature of our work plan which ensures that we remain an efficient accounting partner for your business.

\n
\n \n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce congue auctor magna id sodales. Maecenas mollis justo sed tempor facilisis. Ut malesuada in nibh ultrices auctor. Proin id maximus ipsum. Sed eu magna ac nisl sollicitudin porta in non augue. Mauris feugiat interdum aliquam. Aliquam ultrices interdum dolor.

\n
\n \n \n \n \n \n \n \n \n \n

Objective:

\n

Koala Photography seeks a full review of their historical financial records and future accounting needs. At the start, our experts carefully review your past records and assess your financial services needs according to the nature of your company and suggest the services model best suited to your requirements. The work plan is finalized only after an initial (and possibly subsequent) extensive consultation with [Client.Company]. Periodic review of our services and client feedback is an essential feature of our work plan which ensures that we remain an efficient accounting partner for your business.

\n

Objective:

\n

Koala Photography seeks a full review of their historical financial records and future accounting needs. At the start, our experts carefully review your past records and assess your financial services needs according to the nature of your company and suggest the services model best suited to your requirements. The work plan is finalized only after an initial (and possibly subsequent) extensive consultation with [Client.Company]. Periodic review of our services and client feedback is an essential feature of our work plan which ensures that we remain an efficient accounting partner for your business.

\n
\n
\n
\n
\n \n

Objective:

\n

Koala Photography seeks a full review of their historical financial records and future accounting needs. At the start, our experts carefully review your past records and assess your financial services needs according to the nature of your company and suggest the services model best suited to your requirements. The work plan is finalized only after an initial (and possibly subsequent) extensive consultation with [Client.Company]. Periodic review of our services and client feedback is an essential feature of our work plan which ensures that we remain an efficient accounting partner for your business.

\n
\n \n

Goal:

\n

Koala Photography seeks a full review of their historical financial records and future accounting needs. At the start, our experts carefully review your past records and assess your financial services needs according to the nature of your company and suggest the services model best suited to your requirements. The work plan is finalized only after an initial (and possibly subsequent) extensive consultation with [Client.Company]. Periodic review of our services and client feedback is an essential feature of our work plan which ensures that we remain an efficient accounting partner for your business.

\n
\n','body {\n font-family: \'Open Sans\', Helvetica, arial, sans-serif;\n color: #161616;\n}\n\n.grey-upper {\n font-size: 11px;\n letter-spacing: 3px;\n text-transform: uppercase;\n color: #9a9a9a;\n}\n\n.blue-upper {\n padding-bottom: 8px;\n font-size: 11px;\n letter-spacing: 3px;\n text-transform: uppercase;\n color: #37a3c6;\n margin: 0;\n}\n\np span.client {\n margin:5px 0px 0px 0px;\n}\n\nh1.heading {\n font-size: 48px;\n line-height: 53px;\n text-transform: uppercase;\n font-weight: 100;\n letter-spacing: 3px;\n padding: 0 50px;\n}\n\nh3.client.name {\n padding: 0;\n margin: 0 0 -10px 0;\n font-size:18px;\n font-weight: 600;\n}\n\nspan.client.address1, span.client.city, span.client.state, span.client.postal-code {\n font-size: 14px;\n line-height: 18.5px;\n}\n\nh3.account.name {\n padding: 0;\n margin: 0 0 -10px 0;\n font-size:18px;\n font-weight: 600;\n}\n\nspan.account.address1, span.account.city, span.account.state, span.account.postal-code {\n font-size: 14px;\n line-height: 18.5px;\n}\n\n\n.card-title {\n font-size: 13px;\n letter-spacing: 3px;\n text-transform: uppercase;\n color: #37a3c6;\n font-weight: 600;\n}\n\n.card-text {\n font-size: 15px;\n line-height: 21px;\n}\n\n\na.button {\n background: #37a3c6;\n padding: 12px 25px;\n border-radius: 2px;\n color: #fff;\n text-transform: uppercase;\n font-size: 12px;\n text-decoration: none;\n letter-spacing: 3px;\n font-weight: 600;\n margin: 15px 0;\n}\n\na.button:hover {\n background: #161616;\n}\n\n/****** Table *****************************************/\n\n.grey-bg {\n background: #eeefef;\n}\n\ntable td {\n padding: 20px;\n}\n\ntr.top-header {\n height: 350px;\n}\n\ntr.top-header td {\n padding: 80px 0 0 0;\n border-bottom: 1px solid #dddcdc;\n}\n\ntr.top-header h1.heading {\n margin: 0;\n}\n\ntr.top-header p {\n margin: 5px 0 0 0;\n}\n\n.proposal-info {\n height: 350px;\n}\n\n.proposal-info td {\n padding: 0 0 120px 0;\n}\n\ntr.block-quote {\n margin: 50px 0 ;\n}\n\ntr.block-quote td {\n background: #fbfbfb;\n font-style: italic;\n padding: 0 75px;\n font-size: 17px;\n line-height: 24px;\n padding: 80px 120px;\n color: #686766;\n border-top: 1px solid #dddcdc;\n border-bottom: 1px solid #dddcdc;\n}\n\ntr.footer td {\n background: #f0efef;\n font-size: 12px;\n letter-spacing: 3px;\n color: #8c8b8a;\n padding: 50px 0;\n text-transform: uppercase;\n}\n\n/****** Misc *****************************************/\n\n\nhr {\n border: 0;\n height: 1px;\n background: #dddada;\n}\n\n.footer img {\n vertical-align: middle;\n}\n',1); /*!40000 ALTER TABLE `proposal_templates` ENABLE KEYS */; UNLOCK TABLES; @@ -2694,16 +2703,11 @@ CREATE TABLE `user_accounts` ( `user_id4` int(10) unsigned DEFAULT NULL, `user_id5` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`id`), - KEY `user_accounts_user_id1_foreign` (`user_id1`), - KEY `user_accounts_user_id2_foreign` (`user_id2`), - KEY `user_accounts_user_id3_foreign` (`user_id3`), - KEY `user_accounts_user_id4_foreign` (`user_id4`), - KEY `user_accounts_user_id5_foreign` (`user_id5`), - CONSTRAINT `user_accounts_user_id1_foreign` FOREIGN KEY (`user_id1`) REFERENCES `users` (`id`), - CONSTRAINT `user_accounts_user_id2_foreign` FOREIGN KEY (`user_id2`) REFERENCES `users` (`id`), - CONSTRAINT `user_accounts_user_id3_foreign` FOREIGN KEY (`user_id3`) REFERENCES `users` (`id`), - CONSTRAINT `user_accounts_user_id4_foreign` FOREIGN KEY (`user_id4`) REFERENCES `users` (`id`), - CONSTRAINT `user_accounts_user_id5_foreign` FOREIGN KEY (`user_id5`) REFERENCES `users` (`id`) + KEY `user_accounts_user_id1_index` (`user_id1`), + KEY `user_accounts_user_id2_index` (`user_id2`), + KEY `user_accounts_user_id3_index` (`user_id3`), + KEY `user_accounts_user_id4_index` (`user_id4`), + KEY `user_accounts_user_id5_index` (`user_id5`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; @@ -2755,6 +2759,10 @@ CREATE TABLE `users` ( `bot_user_id` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `google_2fa_secret` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `remember_2fa_token` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, + `slack_webhook_url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `accepted_terms_version` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `accepted_terms_timestamp` timestamp NULL DEFAULT NULL, + `accepted_terms_ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `users_username_unique` (`username`), UNIQUE KEY `users_account_id_public_id_unique` (`account_id`,`public_id`), @@ -2871,4 +2879,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2018-02-21 20:58:03 +-- Dump completed on 2018-03-27 16:06:19 diff --git a/docs/conf.py b/docs/conf.py index cee0f0bfcf2f..78a65ebd2a2b 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -57,9 +57,9 @@ author = u'Invoice Ninja' # built documents. # # The short X.Y version. -version = u'4.2' +version = u'4.3' # The full version, including alpha/beta/rc tags. -release = u'4.2.2' +release = u'4.3.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/configure.rst b/docs/configure.rst index 20928a184c74..95c783773959 100644 --- a/docs/configure.rst +++ b/docs/configure.rst @@ -13,6 +13,8 @@ Create a cron to call the ``ninja:send-invoices`` and ``ninja:send-reminders`` c 0 8 * * * /usr/local/bin/php /path/to/ninja/artisan ninja:send-invoices 0 8 * * * /usr/local/bin/php /path/to/ninja/artisan ninja:send-reminders +If you server doesn't support crons commands can be run by setting a value for COMMAND_SECRET in the .env file and then loading ``/run_command?command=&secret=``. The following commands are supported: send-invoices, send-reminders and update-key. + Email Queues """""""""""" @@ -66,11 +68,11 @@ Troubleshooting - To determine the path you can run ``which phantomjs`` from the command line. - We suggest using PhantomJS version >= 2.1.1, users have reported seeing 'Error: 0' with older versions. - You can use `this script `_ to test from the command line, change ``__YOUR_LINK_HERE__`` to the link in the error and then run ``phantomjs test.pjs``. +- It may help to test with HTTP to check the problem isn't related to the SSL certificate. - You may need to add an entry in the /etc/hosts file to resolve the domain name. - If you require contacts to enter a password to see their invoice you'll need to set a random value for ``PHANTOMJS_SECRET``. - If you're using a proxy and/or self-signed certificate `this comment `_ may help. - If you're using a custom design try using a standard one, if the PDF is outside the printable area it can fail. -- If you installed PhantomJS using APT `these steps `_ may help. Custom Fonts """""""""""" diff --git a/docs/install.rst b/docs/install.rst index 5d0fc9e1108f..1f323e73cb5a 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -93,4 +93,4 @@ Troubleshooting - Running ``composer install`` and ``composer dump-autoload`` can sometimes help with composer problems. - If you’re using a subdomain. ie, invoice.mycompany.com You will need to add ``RewriteBase /`` to public/.htaccess otherwise it may fail with ``Request exceeded the limit of 10 internal redirects due to probable configuration error.`` messages in the logs. - Composer install error: ``Fatal error: Allowed memory size of...`` Try the following: ``php -d memory_limit=-1 /usr/local/bin/composer install`` -- PHP Fatal error: ``Call to undefined method Illuminate\Support\Facades\Session::get()`` try deleting bootstrap/cache/services.php. If the file doesn't exist the steps `https://stackoverflow.com/a/37266353/497368 `_ may help. +- PHP Fatal error: ``Call to undefined method Illuminate\Support\Facades\Session::get()`` try deleting bootstrap/cache/services.php. If the file doesn't exist the steps `here `_ may help. diff --git a/docs/reports.rst b/docs/reports.rst index 130cb4174e47..c2aabb8dc3ae 100644 --- a/docs/reports.rst +++ b/docs/reports.rst @@ -10,9 +10,33 @@ Report Settings The Report Settings section enables you to set parameters and filter the data to generate the right report for you. -- **Start Date**: Click on the calendar button and select the Start Date for the report. -- **End Date**: Click on the calendar button and select the End Date for the report. -- **Type**: To select the report type, click on the Type field and a drop down menu will open. Select the type of report you want from the available list. +- **Type**: Click on the drop-down menu and choose the type of report you want to create. There's a wide range of report types to choose from, such as Invoice, Payment, Client, Quote, Expense, Profit and Loss, and more. + +- **Date Range**: Click on the drop-down menu and choose the desired date range of your report. There are a number of pre-defined ranges to choose from, such as Last 7 Days, Last Month, Last Year and This Year. Or you can select a custom date range with the Start and End calendars. Click Apply to implement the custom range. + +- **Group Sort**: You can sort the report results according to various parameters. Click the drop-down menu to select a sort function from the options available for the chosen report type. + +.. TIP:: For some report types, there is an extra filter function that you can apply. When you select a report type that has an extra filter function, the filter field will automatically appear beneath the Group Sort field. For example, if you select Invoice report type, a field will appear below Group Sort that allows you to filter the report according to invoice status. + - **Run**: Once you've selected all the parameters, click the green Run> button. The extracted data will show in the report display section below. TIP: When you click Run>, the report will generate automatically, and includes only the relevant columns and data, based on the type of reports and dates selected. To view another report, simply change your selections and click Run>. -Export To export the report data to Excel or other spreadsheet software, click the blue Export button. The report will automatically download as a .csv file. +- **Export**: To export the report data, click the gray Export button. The report will automatically download as a .csv file. If you want to export the data as an Excel, PDF or Zip file, click the drop-down menu at the left of the Export button and choose the desired file type. Then click Export. The file will download in the format you selected. + +- **Schedule**: Don't have the time or mindspace to remember to download reports? You don't have to! With the Schedule feature, you can pre-select reports to be automatically generated at a frequency of your choosing, and sent to the email address linked to your Invoice Ninja account. + +To schedule receiving the defined report, click the blue Schedule button. + +In the pop-up box, select the Frequency you'd like to receive the report. Options include Daily, Weekly, Biweekly or Monthly. Then select the Start Date from when you want to begin receiving the report. + +After the report has been scheduled, you'll see a gray Cancel Schedule button on your Reports page. You can cancel the scheduled report at any time by clicking on the cancel button. + +Calendar +"""""""" + +Want a calendar style visualization of your Invoice Ninja activity? Click the gray Calendar button that appears at the top right of the Reports page. You can view details of Invoices, Payments, Quotes, Projects, Tasks and Expenses on the dates they occurred on the calendar. + +The calendar will include details of all transactions by default. To filter the calendar so it only displays some of your invoicing data, click inside the Filter field at the top right of the page. Select your desired filters from the drop-down menu. + +The calendar is customizable so you can create your preferred view. At the top right of the calendar, there are 4 periodic views tabs to choose from: Month, Week, Day or List. Click the preferred tab and the view will change automatically. + +Select today's date by clicking the Today tab at the top left of the calendar. Or click the left or right arrows to move between time periods. diff --git a/gulpfile.js b/gulpfile.js index 33b97a9a537f..d98cb6b41060 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -111,8 +111,6 @@ elixir(function(mix) { mix.scripts([ bowerDir + '/grapesjs/dist/grapes.js', - 'grapesjs-blocks-basic.min.js', - 'grapesjs-preset-newsletter.min.js', ], 'public/js/grapesjs.min.js'); mix.scripts([ diff --git a/public/built.js b/public/built.js index e82143a54914..73545e08c11e 100644 --- a/public/built.js +++ b/public/built.js @@ -1,28 +1,28 @@ -function generatePDF(t,e,n,i){if(t&&e){if(!n)return refreshTimer&&clearTimeout(refreshTimer),void(refreshTimer=setTimeout(function(){generatePDF(t,e,!0,i)},500));if(refreshTimer=null,t=calculateAmounts(t),parseInt(t.account.signature_on_pdf)&&(t=convertSignature(t)),!t)return!1;var o=GetPdfMake(t,e,i);return i&&o.getDataUrl(i),o}}function copyObject(t){return!!t&&JSON.parse(JSON.stringify(t))}function processVariables(t){if(!t)return"";for(var e=["MONTH","QUARTER","YEAR"],n=0;n1?c=r.split("+")[1]:r.split("-").length>1&&(c=parseInt(r.split("-")[1])*-1),t=t.replace(r,getDatePart(i,c))}}return t}function getDatePart(t,e){return e=parseInt(e),e||(e=0),"MONTH"==t?getMonth(e):"QUARTER"==t?getQuarter(e):"YEAR"==t?getYear(e):void 0}function getMonth(t){var e=new Date,n=["January","February","March","April","May","June","July","August","September","October","November","December"],i=e.getMonth();return i=parseInt(i)+t,i%=12,i<0&&(i+=12),n[i]}function getYear(t){var e=new Date,n=e.getFullYear();return parseInt(n)+t}function getQuarter(t){var e=new Date,n=Math.floor((e.getMonth()+3)/3);return n+=t,n%=4,0==n&&(n=4),"Q"+n}function isStorageSupported(){try{return"localStorage"in window&&null!==window.localStorage}catch(t){return!1}}function isValidEmailAddress(t){var e=new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i);return e.test(t)}function enableHoverClick(t,e,n){}function setAsLink(t,e){e?(t.css("text-decoration","underline"),t.css("cursor","pointer")):(t.css("text-decoration","none"),t.css("cursor","text"))}function setComboboxValue(t,e,n){t.find("input").val(e),t.find("input.form-control").val(n),e&&n?(t.find("select").combobox("setSelected"),t.find(".combobox-container").addClass("combobox-selected")):t.find(".combobox-container").removeClass("combobox-selected")}function convertDataURIToBinary(t){var e=t.indexOf(BASE64_MARKER)+BASE64_MARKER.length,n=t.substring(e);return base64DecToArr(n)}function comboboxHighlighter(t){var e=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),n=t.replace(new RegExp("
","g"),"\n");return n=_.escape(n),n=n.replace(new RegExp("("+e+")","ig"),function(t,n){return n?""+n+"":e}),n.replace(new RegExp("\n","g"),"
")}function inIframe(){try{return window.self!==window.top}catch(t){return!0}}function getContactDisplayName(t){return t.first_name||t.last_name?$.trim((t.first_name||"")+" "+(t.last_name||"")):t.email}function getContactDisplayNameWithEmail(t){var e="";return(t.first_name||t.last_name)&&(e+=$.trim((t.first_name||"")+" "+(t.last_name||""))),t.email&&(e&&(e+=" - "),e+=t.email),$.trim(e)}function getClientDisplayName(t){var e=!!t.contacts&&t.contacts[0];return t.name?t.name:e?getContactDisplayName(e):""}function formatAddress(t,e,n,i){var o="";return i?(o+=n?n+" ":"",o+=t?t:"",o+=t&&e?", ":t?" ":"",o+=e):(o+=t?t:"",o+=t&&e?", ":e?" ":"",o+=e+" "+n),o}function concatStrings(){for(var t="",e=[],n=0;n1?t+=", ":n64&&t<91?t-65:t>96&&t<123?t-71:t>47&&t<58?t+4:43===t?62:47===t?63:0}function base64DecToArr(t,e){for(var n,i,o=t.replace(/[^A-Za-z0-9\+\/]/g,""),a=o.length,s=e?Math.ceil((3*a+1>>2)/e)*e:3*a+1>>2,r=new Uint8Array(s),c=0,l=0,u=0;u>>(16>>>n&24)&255;c=0}return r}function uint6ToB64(t){return t<26?t+65:t<52?t+71:t<62?t-4:62===t?43:63===t?47:65}function base64EncArr(t){for(var e=2,n="",i=t.length,o=0,a=0;a0&&4*a/3%76===0&&(n+="\r\n"),o|=t[a]<<(16>>>e&24),2!==e&&t.length-a!==1||(n+=String.fromCharCode(uint6ToB64(o>>>18&63),uint6ToB64(o>>>12&63),uint6ToB64(o>>>6&63),uint6ToB64(63&o)),o=0);return n.substr(0,n.length-2+e)+(2===e?"":1===e?"=":"==")}function UTF8ArrToStr(t){for(var e,n="",i=t.length,o=0;o251&&e<254&&o+5247&&e<252&&o+4239&&e<248&&o+3223&&e<240&&o+2191&&e<224&&o+1>>6),e[s++]=128+(63&n)):n<65536?(e[s++]=224+(n>>>12),e[s++]=128+(n>>>6&63),e[s++]=128+(63&n)):n<2097152?(e[s++]=240+(n>>>18),e[s++]=128+(n>>>12&63),e[s++]=128+(n>>>6&63),e[s++]=128+(63&n)):n<67108864?(e[s++]=248+(n>>>24),e[s++]=128+(n>>>18&63),e[s++]=128+(n>>>12&63),e[s++]=128+(n>>>6&63),e[s++]=128+(63&n)):(e[s++]=252+n/1073741824,e[s++]=128+(n>>>24&63),e[s++]=128+(n>>>18&63),e[s++]=128+(n>>>12&63),e[s++]=128+(n>>>6&63),e[s++]=128+(63&n));return e}function hexToR(t){return parseInt(cutHex(t).substring(0,2),16)}function hexToG(t){return parseInt(cutHex(t).substring(2,4),16)}function hexToB(t){return parseInt(cutHex(t).substring(4,6),16)}function cutHex(t){return"#"==t.charAt(0)?t.substring(1,7):t}function setDocHexColor(t,e){var n=hexToR(e),i=hexToG(e),o=hexToB(e);return t.setTextColor(n,i,o)}function setDocHexFill(t,e){var n=hexToR(e),i=hexToG(e),o=hexToB(e);return t.setFillColor(n,i,o)}function setDocHexDraw(t,e){var n=hexToR(e),i=hexToG(e),o=hexToB(e);return t.setDrawColor(n,i,o)}function toggleDatePicker(t){$("#"+t).datepicker("show")}function getPrecision(t){return roundToPrecision(t,3)!=t?4:roundToPrecision(t,2)!=t?3:2}function roundSignificant(t,e){var n=getPrecision(t),i=roundToPrecision(t,n)||0;return e?i.toFixed(n):i}function roundToTwo(t,e){var n=roundToPrecision(t,2)||0;return e?n.toFixed(2):n}function roundToFour(t,e){var n=roundToPrecision(t,4)||0;return e?n.toFixed(4):n}function roundToPrecision(t,e){var n=t<0;return n&&(t*=-1),t=+(Math.round(t+"e+"+e)+"e-"+e),n&&(t*=-1),t}function truncate(t,e){return t&&t.length>e?t.substr(0,e-1)+"...":t}function endsWith(t,e){return t.indexOf(e,t.length-e.length)!==-1}function secondsToTime(t){t=Math.round(t);var e=Math.floor(t/3600),n=t%3600,i=Math.floor(n/60),o=n%60,a=Math.ceil(o),s={h:e,m:i,s:a};return s}function twoDigits(t){return t<10?"0"+t:t}function toSnakeCase(t){return t?t.replace(/([A-Z])/g,function(t){return"_"+t.toLowerCase()}):""}function snakeToCamel(t){return t.replace(/_([a-z])/g,function(t){return t[1].toUpperCase()})}function getDescendantProp(t,e){for(var n=e.split(".");n.length&&(t=t[n.shift()]););return t}function doubleDollarSign(t){return t?t.replace?t.replace(/\$/g,"$$$"):t:""}function truncate(t,e){return t.length>e?t.substring(0,e)+"...":t}function actionListHandler(){$("tbody tr .tr-action").closest("tr").mouseover(function(){$(this).closest("tr").find(".tr-action").show(),$(this).closest("tr").find(".tr-status").hide()}).mouseout(function(){$dropdown=$(this).closest("tr").find(".tr-action"),$dropdown.hasClass("open")||($dropdown.hide(),$(this).closest("tr").find(".tr-status").show())})}function loadImages(t){$(t+" img").each(function(t,e){var n=$(e).attr("data-src");$(e).attr("src",n),$(e).attr("data-src",n)})}function prettyJson(t){return"string"!=typeof t&&(t=JSON.stringify(t,void 0,2)),t=t.replace(/&/g,"&").replace(//g,">"),t.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g,function(t){var e="number";return/^"/.test(t)?e=/:$/.test(t)?"key":"string":/true|false/.test(t)?e="boolean":/null/.test(t)&&(e="null"),t=snakeToCamel(t),''+t+""})}function searchData(t,e,n){return function(i,o){var a;if(n){var s={keys:[e]},r=new Fuse(t,s);a=r.search(i)}else a=[],substrRegex=new RegExp(escapeRegExp(i),"i"),$.each(t,function(t,n){substrRegex.test(n[e])&&a.push(n)});o(a)}}function escapeRegExp(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}function firstJSONError(t){for(var e in t)if(t.hasOwnProperty(e)){var n=t[e];for(var i in n)if(n.hasOwnProperty(i))return n[i]}return!1}function pad(t,e,n){return n=n||"0",t+="",t.length>=e?t:new Array(e-t.length+1).join(n)+t}function brewerColor(t){var e=["#1c9f77","#d95d02","#716cb1","#e62a8b","#5fa213","#e6aa04","#a87821","#676767"],t=(t-1)%e.length;return e[t]}function formatXml(t){var e="",n=/(>)(<)(\/*)/g;t=t.replace(n,"$1\r\n$2$3");var i=0;return jQuery.each(t.split("\r\n"),function(t,n){var o=0;n.match(/.+<\/\w[^>]*>$/)?o=0:n.match(/^<\/\w/)?0!=i&&(i-=1):o=n.match(/^<\w[^>]*[^\/]>.*$/)?1:0;for(var a="",s=0;s0&&e-1 in t))}function i(t,e,n){if(ot.isFunction(e))return ot.grep(t,function(t,i){return!!e.call(t,i,t)!==n});if(e.nodeType)return ot.grep(t,function(t){return t===e!==n});if("string"==typeof e){if(ht.test(e))return ot.filter(e,t,n);e=ot.filter(e,t)}return ot.grep(t,function(t){return ot.inArray(t,e)>=0!==n})}function o(t,e){do t=t[e];while(t&&1!==t.nodeType);return t}function a(t){var e=yt[t]={};return ot.each(t.match(Mt)||[],function(t,n){e[n]=!0}),e}function s(){ft.addEventListener?(ft.removeEventListener("DOMContentLoaded",r,!1),t.removeEventListener("load",r,!1)):(ft.detachEvent("onreadystatechange",r),t.detachEvent("onload",r))}function r(){(ft.addEventListener||"load"===event.type||"complete"===ft.readyState)&&(s(),ot.ready())}function c(t,e,n){if(void 0===n&&1===t.nodeType){var i="data-"+e.replace(wt,"-$1").toLowerCase();if(n=t.getAttribute(i),"string"==typeof n){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:Tt.test(n)?ot.parseJSON(n):n)}catch(o){}ot.data(t,e,n)}else n=void 0}return n}function l(t){var e;for(e in t)if(("data"!==e||!ot.isEmptyObject(t[e]))&&"toJSON"!==e)return!1;return!0}function u(t,e,n,i){if(ot.acceptData(t)){var o,a,s=ot.expando,r=t.nodeType,c=r?ot.cache:t,l=r?t[s]:t[s]&&s;if(l&&c[l]&&(i||c[l].data)||void 0!==n||"string"!=typeof e)return l||(l=r?t[s]=J.pop()||ot.guid++:s),c[l]||(c[l]=r?{}:{toJSON:ot.noop}),"object"!=typeof e&&"function"!=typeof e||(i?c[l]=ot.extend(c[l],e):c[l].data=ot.extend(c[l].data,e)),a=c[l],i||(a.data||(a.data={}),a=a.data),void 0!==n&&(a[ot.camelCase(e)]=n),"string"==typeof e?(o=a[e],null==o&&(o=a[ot.camelCase(e)])):o=a,o}}function d(t,e,n){if(ot.acceptData(t)){var i,o,a=t.nodeType,s=a?ot.cache:t,r=a?t[ot.expando]:ot.expando;if(s[r]){if(e&&(i=n?s[r]:s[r].data)){ot.isArray(e)?e=e.concat(ot.map(e,ot.camelCase)):e in i?e=[e]:(e=ot.camelCase(e),e=e in i?[e]:e.split(" ")),o=e.length;for(;o--;)delete i[e[o]];if(n?!l(i):!ot.isEmptyObject(i))return}(n||(delete s[r].data,l(s[r])))&&(a?ot.cleanData([t],!0):nt.deleteExpando||s!=s.window?delete s[r]:s[r]=null)}}}function h(){return!0}function p(){return!1}function f(){try{return ft.activeElement}catch(t){}}function m(t){var e=Et.split("|"),n=t.createDocumentFragment();if(n.createElement)for(;e.length;)n.createElement(e.pop());return n}function g(t,e){var n,i,o=0,a=typeof t.getElementsByTagName!==zt?t.getElementsByTagName(e||"*"):typeof t.querySelectorAll!==zt?t.querySelectorAll(e||"*"):void 0;if(!a)for(a=[],n=t.childNodes||t;null!=(i=n[o]);o++)!e||ot.nodeName(i,e)?a.push(i):ot.merge(a,g(i,e));return void 0===e||e&&ot.nodeName(t,e)?ot.merge([t],a):a}function b(t){xt.test(t.type)&&(t.defaultChecked=t.checked)}function v(t,e){return ot.nodeName(t,"table")&&ot.nodeName(11!==e.nodeType?e:e.firstChild,"tr")?t.getElementsByTagName("tbody")[0]||t.appendChild(t.ownerDocument.createElement("tbody")):t}function M(t){return t.type=(null!==ot.find.attr(t,"type"))+"/"+t.type,t}function y(t){var e=Vt.exec(t.type);return e?t.type=e[1]:t.removeAttribute("type"),t}function A(t,e){for(var n,i=0;null!=(n=t[i]);i++)ot._data(n,"globalEval",!e||ot._data(e[i],"globalEval"))}function _(t,e){if(1===e.nodeType&&ot.hasData(t)){var n,i,o,a=ot._data(t),s=ot._data(e,a),r=a.events;if(r){delete s.handle,s.events={};for(n in r)for(i=0,o=r[n].length;i")).appendTo(e.documentElement),e=(Qt[0].contentWindow||Qt[0].contentDocument).document,e.write(),e.close(),n=T(t,e),Qt.detach()),Zt[t]=n),n}function C(t,e){return{get:function(){var n=t();if(null!=n)return n?void delete this.get:(this.get=e).apply(this,arguments)}}}function N(t,e){if(e in t)return e;for(var n=e.charAt(0).toUpperCase()+e.slice(1),i=e,o=he.length;o--;)if(e=he[o]+n,e in t)return e;return i}function O(t,e){for(var n,i,o,a=[],s=0,r=t.length;s=0&&n=0},isEmptyObject:function(t){var e;for(e in t)return!1;return!0},isPlainObject:function(t){var e;if(!t||"object"!==ot.type(t)||t.nodeType||ot.isWindow(t))return!1;try{if(t.constructor&&!et.call(t,"constructor")&&!et.call(t.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}if(nt.ownLast)for(e in t)return et.call(t,e);for(e in t);return void 0===e||et.call(t,e)},type:function(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?Z[tt.call(t)]||"object":typeof t},globalEval:function(e){e&&ot.trim(e)&&(t.execScript||function(e){t.eval.call(t,e)})(e)},camelCase:function(t){return t.replace(st,"ms-").replace(rt,ct)},nodeName:function(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()},each:function(t,e,i){var o,a=0,s=t.length,r=n(t);if(i){if(r)for(;a_.cacheLength&&delete t[e.shift()],t[n+" "]=i}var e=[];return t}function i(t){return t[P]=!0,t}function o(t){var e=D.createElement("div");try{return!!t(e)}catch(n){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function a(t,e){for(var n=t.split("|"),i=t.length;i--;)_.attrHandle[n[i]]=e}function s(t,e){var n=e&&t,i=n&&1===t.nodeType&&1===e.nodeType&&(~e.sourceIndex||V)-(~t.sourceIndex||V);if(i)return i;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function r(t){return function(e){var n=e.nodeName.toLowerCase();return"input"===n&&e.type===t}}function c(t){return function(e){var n=e.nodeName.toLowerCase();return("input"===n||"button"===n)&&e.type===t}}function l(t){return i(function(e){return e=+e,i(function(n,i){for(var o,a=t([],n.length,e),s=a.length;s--;)n[o=a[s]]&&(n[o]=!(i[o]=n[o]))})})}function u(t){return t&&"undefined"!=typeof t.getElementsByTagName&&t}function d(){}function h(t){for(var e=0,n=t.length,i="";e1?function(e,n,i){for(var o=t.length;o--;)if(!t[o](e,n,i))return!1;return!0}:t[0]}function m(t,n,i){for(var o=0,a=n.length;o-1&&(i[l]=!(s[l]=d))}}else M=g(M===s?M.splice(f,M.length):M),a?a(null,s,M,c):Q.apply(s,M)})}function v(t){for(var e,n,i,o=t.length,a=_.relative[t[0].type],s=a||_.relative[" "],r=a?1:0,c=p(function(t){return t===e},s,!0),l=p(function(t){return tt(e,t)>-1},s,!0),u=[function(t,n,i){var o=!a&&(i||n!==O)||((e=n).nodeType?c(t,n,i):l(t,n,i));return e=null,o}];r1&&f(u),r>1&&h(t.slice(0,r-1).concat({value:" "===t[r-2].type?"*":""})).replace(ct,"$1"),n,r0,a=t.length>0,s=function(i,s,r,c,l){var u,d,h,p=0,f="0",m=i&&[],b=[],v=O,M=i||a&&_.find.TAG("*",l),y=R+=null==v?1:Math.random()||.1,A=M.length;for(l&&(O=s!==D&&s);f!==A&&null!=(u=M[f]);f++){if(a&&u){for(d=0;h=t[d++];)if(h(u,s,r)){c.push(u);break}l&&(R=y)}o&&((u=!h&&u)&&p--,i&&m.push(u))}if(p+=f,o&&f!==p){for(d=0;h=n[d++];)h(m,b,s,r);if(i){if(p>0)for(;f--;)m[f]||b[f]||(b[f]=K.call(c));b=g(b)}Q.apply(c,b),l&&!i&&b.length>0&&p+n.length>1&&e.uniqueSort(c)}return l&&(R=y,O=v),m};return o?i(s):s}var y,A,_,z,T,w,C,N,O,S,x,L,D,k,q,W,E,B,I,P="sizzle"+1*new Date,X=t.document,R=0,F=0,H=n(),j=n(),U=n(),$=function(t,e){return t===e&&(x=!0),0},V=1<<31,J={}.hasOwnProperty,Y=[],K=Y.pop,G=Y.push,Q=Y.push,Z=Y.slice,tt=function(t,e){for(var n=0,i=t.length;n+~]|"+nt+")"+nt+"*"),dt=new RegExp("="+nt+"*([^\\]'\"]*?)"+nt+"*\\]","g"),ht=new RegExp(st),pt=new RegExp("^"+ot+"$"),ft={ID:new RegExp("^#("+it+")"),CLASS:new RegExp("^\\.("+it+")"),TAG:new RegExp("^("+it.replace("w","w*")+")"),ATTR:new RegExp("^"+at),PSEUDO:new RegExp("^"+st),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+nt+"*(even|odd|(([+-]|)(\\d*)n|)"+nt+"*(?:([+-]|)"+nt+"*(\\d+)|))"+nt+"*\\)|)","i"),bool:new RegExp("^(?:"+et+")$","i"),needsContext:new RegExp("^"+nt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+nt+"*((?:-\\d)?\\d*)"+nt+"*\\)|)(?=[^-]|$)","i")},mt=/^(?:input|select|textarea|button)$/i,gt=/^h\d$/i,bt=/^[^{]+\{\s*\[native \w/,vt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Mt=/[+~]/,yt=/'|\\/g,At=new RegExp("\\\\([\\da-f]{1,6}"+nt+"?|("+nt+")|.)","ig"),_t=function(t,e,n){var i="0x"+e-65536;return i!==i||n?e:i<0?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},zt=function(){L()};try{Q.apply(Y=Z.call(X.childNodes),X.childNodes),Y[X.childNodes.length].nodeType}catch(Tt){Q={apply:Y.length?function(t,e){G.apply(t,Z.call(e))}:function(t,e){for(var n=t.length,i=0;t[n++]=e[i++];);t.length=n-1}}}A=e.support={},T=e.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},L=e.setDocument=function(t){var e,n,i=t?t.ownerDocument||t:X;return i!==D&&9===i.nodeType&&i.documentElement?(D=i,k=i.documentElement,n=i.defaultView,n&&n!==n.top&&(n.addEventListener?n.addEventListener("unload",zt,!1):n.attachEvent&&n.attachEvent("onunload",zt)),q=!T(i),A.attributes=o(function(t){return t.className="i",!t.getAttribute("className")}),A.getElementsByTagName=o(function(t){return t.appendChild(i.createComment("")),!t.getElementsByTagName("*").length}),A.getElementsByClassName=bt.test(i.getElementsByClassName),A.getById=o(function(t){return k.appendChild(t).id=P,!i.getElementsByName||!i.getElementsByName(P).length}),A.getById?(_.find.ID=function(t,e){if("undefined"!=typeof e.getElementById&&q){var n=e.getElementById(t);return n&&n.parentNode?[n]:[]}},_.filter.ID=function(t){var e=t.replace(At,_t);return function(t){return t.getAttribute("id")===e}}):(delete _.find.ID,_.filter.ID=function(t){var e=t.replace(At,_t);return function(t){var n="undefined"!=typeof t.getAttributeNode&&t.getAttributeNode("id");return n&&n.value===e}}),_.find.TAG=A.getElementsByTagName?function(t,e){return"undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t):A.qsa?e.querySelectorAll(t):void 0}:function(t,e){var n,i=[],o=0,a=e.getElementsByTagName(t);if("*"===t){for(;n=a[o++];)1===n.nodeType&&i.push(n);return i}return a},_.find.CLASS=A.getElementsByClassName&&function(t,e){if(q)return e.getElementsByClassName(t)},E=[],W=[],(A.qsa=bt.test(i.querySelectorAll))&&(o(function(t){k.appendChild(t).innerHTML="",t.querySelectorAll("[msallowcapture^='']").length&&W.push("[*^$]="+nt+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||W.push("\\["+nt+"*(?:value|"+et+")"),t.querySelectorAll("[id~="+P+"-]").length||W.push("~="),t.querySelectorAll(":checked").length||W.push(":checked"),t.querySelectorAll("a#"+P+"+*").length||W.push(".#.+[+~]")}),o(function(t){var e=i.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&W.push("name"+nt+"*[*^$|!~]?="),t.querySelectorAll(":enabled").length||W.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),W.push(",.*:")})),(A.matchesSelector=bt.test(B=k.matches||k.webkitMatchesSelector||k.mozMatchesSelector||k.oMatchesSelector||k.msMatchesSelector))&&o(function(t){A.disconnectedMatch=B.call(t,"div"),B.call(t,"[s!='']:x"),E.push("!=",st)}),W=W.length&&new RegExp(W.join("|")),E=E.length&&new RegExp(E.join("|")),e=bt.test(k.compareDocumentPosition),I=e||bt.test(k.contains)?function(t,e){var n=9===t.nodeType?t.documentElement:t,i=e&&e.parentNode;return t===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):t.compareDocumentPosition&&16&t.compareDocumentPosition(i)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},$=e?function(t,e){if(t===e)return x=!0,0;var n=!t.compareDocumentPosition-!e.compareDocumentPosition;return n?n:(n=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1,1&n||!A.sortDetached&&e.compareDocumentPosition(t)===n?t===i||t.ownerDocument===X&&I(X,t)?-1:e===i||e.ownerDocument===X&&I(X,e)?1:S?tt(S,t)-tt(S,e):0:4&n?-1:1)}:function(t,e){if(t===e)return x=!0,0;var n,o=0,a=t.parentNode,r=e.parentNode,c=[t],l=[e];if(!a||!r)return t===i?-1:e===i?1:a?-1:r?1:S?tt(S,t)-tt(S,e):0;if(a===r)return s(t,e);for(n=t;n=n.parentNode;)c.unshift(n);for(n=e;n=n.parentNode;)l.unshift(n);for(;c[o]===l[o];)o++;return o?s(c[o],l[o]):c[o]===X?-1:l[o]===X?1:0},i):D},e.matches=function(t,n){return e(t,null,null,n)},e.matchesSelector=function(t,n){if((t.ownerDocument||t)!==D&&L(t),n=n.replace(dt,"='$1']"),A.matchesSelector&&q&&(!E||!E.test(n))&&(!W||!W.test(n)))try{var i=B.call(t,n);if(i||A.disconnectedMatch||t.document&&11!==t.document.nodeType)return i}catch(o){}return e(n,D,null,[t]).length>0},e.contains=function(t,e){return(t.ownerDocument||t)!==D&&L(t),I(t,e)},e.attr=function(t,e){(t.ownerDocument||t)!==D&&L(t);var n=_.attrHandle[e.toLowerCase()],i=n&&J.call(_.attrHandle,e.toLowerCase())?n(t,e,!q):void 0;return void 0!==i?i:A.attributes||!q?t.getAttribute(e):(i=t.getAttributeNode(e))&&i.specified?i.value:null},e.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},e.uniqueSort=function(t){var e,n=[],i=0,o=0;if(x=!A.detectDuplicates,S=!A.sortStable&&t.slice(0),t.sort($),x){for(;e=t[o++];)e===t[o]&&(i=n.push(o));for(;i--;)t.splice(n[i],1)}return S=null,t},z=e.getText=function(t){var e,n="",i=0,o=t.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=z(t)}else if(3===o||4===o)return t.nodeValue}else for(;e=t[i++];)n+=z(e);return n},_=e.selectors={cacheLength:50,createPseudo:i,match:ft,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(At,_t),t[3]=(t[3]||t[4]||t[5]||"").replace(At,_t),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return ft.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":n&&ht.test(n)&&(e=w(n,!0))&&(e=n.indexOf(")",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(At,_t).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=H[t+" "];return e||(e=new RegExp("(^|"+nt+")"+t+"("+nt+"|$)"))&&H(t,function(t){return e.test("string"==typeof t.className&&t.className||"undefined"!=typeof t.getAttribute&&t.getAttribute("class")||"")})},ATTR:function(t,n,i){return function(o){var a=e.attr(o,t);return null==a?"!="===n:!n||(a+="","="===n?a===i:"!="===n?a!==i:"^="===n?i&&0===a.indexOf(i):"*="===n?i&&a.indexOf(i)>-1:"$="===n?i&&a.slice(-i.length)===i:"~="===n?(" "+a.replace(rt," ")+" ").indexOf(i)>-1:"|="===n&&(a===i||a.slice(0,i.length+1)===i+"-"))}},CHILD:function(t,e,n,i,o){var a="nth"!==t.slice(0,3),s="last"!==t.slice(-4),r="of-type"===e;return 1===i&&0===o?function(t){return!!t.parentNode}:function(e,n,c){var l,u,d,h,p,f,m=a!==s?"nextSibling":"previousSibling",g=e.parentNode,b=r&&e.nodeName.toLowerCase(),v=!c&&!r;if(g){if(a){for(;m;){for(d=e;d=d[m];)if(r?d.nodeName.toLowerCase()===b:1===d.nodeType)return!1;f=m="only"===t&&!f&&"nextSibling"}return!0}if(f=[s?g.firstChild:g.lastChild],s&&v){for(u=g[P]||(g[P]={}),l=u[t]||[],p=l[0]===R&&l[1],h=l[0]===R&&l[2],d=p&&g.childNodes[p];d=++p&&d&&d[m]||(h=p=0)||f.pop();)if(1===d.nodeType&&++h&&d===e){u[t]=[R,p,h];break}}else if(v&&(l=(e[P]||(e[P]={}))[t])&&l[0]===R)h=l[1];else for(;(d=++p&&d&&d[m]||(h=p=0)||f.pop())&&((r?d.nodeName.toLowerCase()!==b:1!==d.nodeType)||!++h||(v&&((d[P]||(d[P]={}))[t]=[R,h]),d!==e)););return h-=o,h===i||h%i===0&&h/i>=0}}},PSEUDO:function(t,n){var o,a=_.pseudos[t]||_.setFilters[t.toLowerCase()]||e.error("unsupported pseudo: "+t);return a[P]?a(n):a.length>1?(o=[t,t,"",n],_.setFilters.hasOwnProperty(t.toLowerCase())?i(function(t,e){for(var i,o=a(t,n),s=o.length;s--;)i=tt(t,o[s]),t[i]=!(e[i]=o[s])}):function(t){return a(t,0,o)}):a}},pseudos:{not:i(function(t){var e=[],n=[],o=C(t.replace(ct,"$1"));return o[P]?i(function(t,e,n,i){for(var a,s=o(t,null,i,[]),r=t.length;r--;)(a=s[r])&&(t[r]=!(e[r]=a))}):function(t,i,a){return e[0]=t,o(e,null,a,n),e[0]=null,!n.pop()}}),has:i(function(t){return function(n){return e(t,n).length>0}}),contains:i(function(t){return t=t.replace(At,_t),function(e){return(e.textContent||e.innerText||z(e)).indexOf(t)>-1}}),lang:i(function(t){return pt.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(At,_t).toLowerCase(),function(e){var n;do if(n=q?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return n=n.toLowerCase(),n===t||0===n.indexOf(t+"-");while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===k},focus:function(t){return t===D.activeElement&&(!D.hasFocus||D.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:function(t){return t.disabled===!1},disabled:function(t){return t.disabled===!0},checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,t.selected===!0},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!_.pseudos.empty(t)},header:function(t){return gt.test(t.nodeName)},input:function(t){return mt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:l(function(){return[0]}),last:l(function(t,e){return[e-1]}),eq:l(function(t,e,n){return[n<0?n+e:n]}),even:l(function(t,e){for(var n=0;n=0;)t.push(i);return t}),gt:l(function(t,e,n){for(var i=n<0?n+e:n;++i2&&"ID"===(s=a[0]).type&&A.getById&&9===e.nodeType&&q&&_.relative[a[1].type]){if(e=(_.find.ID(s.matches[0].replace(At,_t),e)||[])[0],!e)return n;l&&(e=e.parentNode),t=t.slice(a.shift().value.length)}for(o=ft.needsContext.test(t)?0:a.length;o--&&(s=a[o],!_.relative[r=s.type]);)if((c=_.find[r])&&(i=c(s.matches[0].replace(At,_t),Mt.test(a[0].type)&&u(e.parentNode)||e))){if(a.splice(o,1),t=i.length&&h(a),!t)return Q.apply(n,i),n;break}}return(l||C(t,d))(i,e,!q,n,Mt.test(t)&&u(e.parentNode)||e),n},A.sortStable=P.split("").sort($).join("")===P,A.detectDuplicates=!!x,L(),A.sortDetached=o(function(t){return 1&t.compareDocumentPosition(D.createElement("div"))}),o(function(t){return t.innerHTML="","#"===t.firstChild.getAttribute("href")})||a("type|href|height|width",function(t,e,n){if(!n)return t.getAttribute(e,"type"===e.toLowerCase()?1:2)}),A.attributes&&o(function(t){return t.innerHTML="",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")})||a("value",function(t,e,n){if(!n&&"input"===t.nodeName.toLowerCase())return t.defaultValue}),o(function(t){return null==t.getAttribute("disabled")})||a(et,function(t,e,n){var i;if(!n)return t[e]===!0?e.toLowerCase():(i=t.getAttributeNode(e))&&i.specified?i.value:null}),e}(t);ot.find=lt,ot.expr=lt.selectors,ot.expr[":"]=ot.expr.pseudos,ot.unique=lt.uniqueSort,ot.text=lt.getText,ot.isXMLDoc=lt.isXML,ot.contains=lt.contains;var ut=ot.expr.match.needsContext,dt=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,ht=/^.[^:#\[\.,]*$/;ot.filter=function(t,e,n){var i=e[0];return n&&(t=":not("+t+")"),1===e.length&&1===i.nodeType?ot.find.matchesSelector(i,t)?[i]:[]:ot.find.matches(t,ot.grep(e,function(t){return 1===t.nodeType}))},ot.fn.extend({find:function(t){var e,n=[],i=this,o=i.length;if("string"!=typeof t)return this.pushStack(ot(t).filter(function(){for(e=0;e1?ot.unique(n):n),n.selector=this.selector?this.selector+" "+t:t,n},filter:function(t){return this.pushStack(i(this,t||[],!1))},not:function(t){return this.pushStack(i(this,t||[],!0))},is:function(t){return!!i(this,"string"==typeof t&&ut.test(t)?ot(t):t||[],!1).length}});var pt,ft=t.document,mt=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,gt=ot.fn.init=function(t,e){var n,i;if(!t)return this;if("string"==typeof t){if(n="<"===t.charAt(0)&&">"===t.charAt(t.length-1)&&t.length>=3?[null,t,null]:mt.exec(t),!n||!n[1]&&e)return!e||e.jquery?(e||pt).find(t):this.constructor(e).find(t);if(n[1]){if(e=e instanceof ot?e[0]:e,ot.merge(this,ot.parseHTML(n[1],e&&e.nodeType?e.ownerDocument||e:ft,!0)),dt.test(n[1])&&ot.isPlainObject(e))for(n in e)ot.isFunction(this[n])?this[n](e[n]):this.attr(n,e[n]);return this}if(i=ft.getElementById(n[2]),i&&i.parentNode){if(i.id!==n[2])return pt.find(t);this.length=1,this[0]=i}return this.context=ft,this.selector=t,this}return t.nodeType?(this.context=this[0]=t,this.length=1,this):ot.isFunction(t)?"undefined"!=typeof pt.ready?pt.ready(t):t(ot):(void 0!==t.selector&&(this.selector=t.selector,this.context=t.context),ot.makeArray(t,this))};gt.prototype=ot.fn,pt=ot(ft);var bt=/^(?:parents|prev(?:Until|All))/,vt={children:!0,contents:!0,next:!0,prev:!0};ot.extend({dir:function(t,e,n){for(var i=[],o=t[e];o&&9!==o.nodeType&&(void 0===n||1!==o.nodeType||!ot(o).is(n));)1===o.nodeType&&i.push(o),o=o[e];return i},sibling:function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n}}),ot.fn.extend({has:function(t){var e,n=ot(t,this),i=n.length;return this.filter(function(){for(e=0;e-1:1===n.nodeType&&ot.find.matchesSelector(n,t))){a.push(n);break}return this.pushStack(a.length>1?ot.unique(a):a)},index:function(t){return t?"string"==typeof t?ot.inArray(this[0],ot(t)):ot.inArray(t.jquery?t[0]:t,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(ot.unique(ot.merge(this.get(),ot(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),ot.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return ot.dir(t,"parentNode")},parentsUntil:function(t,e,n){return ot.dir(t,"parentNode",n)},next:function(t){return o(t,"nextSibling")},prev:function(t){return o(t,"previousSibling")},nextAll:function(t){return ot.dir(t,"nextSibling")},prevAll:function(t){return ot.dir(t,"previousSibling")},nextUntil:function(t,e,n){return ot.dir(t,"nextSibling",n)},prevUntil:function(t,e,n){return ot.dir(t,"previousSibling",n)},siblings:function(t){return ot.sibling((t.parentNode||{}).firstChild,t)},children:function(t){return ot.sibling(t.firstChild)},contents:function(t){return ot.nodeName(t,"iframe")?t.contentDocument||t.contentWindow.document:ot.merge([],t.childNodes)}},function(t,e){ot.fn[t]=function(n,i){var o=ot.map(this,e,n);return"Until"!==t.slice(-5)&&(i=n),i&&"string"==typeof i&&(o=ot.filter(i,o)),this.length>1&&(vt[t]||(o=ot.unique(o)),bt.test(t)&&(o=o.reverse())),this.pushStack(o)}});var Mt=/\S+/g,yt={};ot.Callbacks=function(t){t="string"==typeof t?yt[t]||a(t):ot.extend({},t);var e,n,i,o,s,r,c=[],l=!t.once&&[],u=function(a){for(n=t.memory&&a,i=!0,s=r||0,r=0,o=c.length,e=!0;c&&s-1;)c.splice(i,1),e&&(i<=o&&o--,i<=s&&s--)}),this},has:function(t){return t?ot.inArray(t,c)>-1:!(!c||!c.length)},empty:function(){return c=[],o=0,this},disable:function(){return c=l=n=void 0,this},disabled:function(){return!c},lock:function(){return l=void 0,n||d.disable(),this},locked:function(){return!l},fireWith:function(t,n){return!c||i&&!l||(n=n||[],n=[t,n.slice?n.slice():n],e?l.push(n):u(n)),this},fire:function(){return d.fireWith(this,arguments),this},fired:function(){return!!i}};return d},ot.extend({Deferred:function(t){var e=[["resolve","done",ot.Callbacks("once memory"),"resolved"],["reject","fail",ot.Callbacks("once memory"),"rejected"],["notify","progress",ot.Callbacks("memory")]],n="pending",i={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},then:function(){var t=arguments;return ot.Deferred(function(n){ot.each(e,function(e,a){var s=ot.isFunction(t[e])&&t[e];o[a[1]](function(){var t=s&&s.apply(this,arguments);t&&ot.isFunction(t.promise)?t.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a[0]+"With"](this===i?n.promise():this,s?[t]:arguments)})}),t=null}).promise()},promise:function(t){return null!=t?ot.extend(t,i):i}},o={};return i.pipe=i.then,ot.each(e,function(t,a){var s=a[2],r=a[3];i[a[1]]=s.add,r&&s.add(function(){n=r},e[1^t][2].disable,e[2][2].lock),o[a[0]]=function(){return o[a[0]+"With"](this===o?i:this,arguments),this},o[a[0]+"With"]=s.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(t){var e,n,i,o=0,a=Y.call(arguments),s=a.length,r=1!==s||t&&ot.isFunction(t.promise)?s:0,c=1===r?t:ot.Deferred(),l=function(t,n,i){return function(o){n[t]=this,i[t]=arguments.length>1?Y.call(arguments):o,i===e?c.notifyWith(n,i):--r||c.resolveWith(n,i)}};if(s>1)for(e=new Array(s),n=new Array(s),i=new Array(s);o0||(At.resolveWith(ft,[ot]),ot.fn.triggerHandler&&(ot(ft).triggerHandler("ready"),ot(ft).off("ready")))}}}),ot.ready.promise=function(e){if(!At)if(At=ot.Deferred(),"complete"===ft.readyState)setTimeout(ot.ready);else if(ft.addEventListener)ft.addEventListener("DOMContentLoaded",r,!1),t.addEventListener("load",r,!1);else{ft.attachEvent("onreadystatechange",r),t.attachEvent("onload",r);var n=!1;try{n=null==t.frameElement&&ft.documentElement}catch(i){}n&&n.doScroll&&!function o(){if(!ot.isReady){try{n.doScroll("left")}catch(t){return setTimeout(o,50)}s(),ot.ready()}}()}return At.promise(e)};var _t,zt="undefined";for(_t in ot(nt))break;nt.ownLast="0"!==_t,nt.inlineBlockNeedsLayout=!1,ot(function(){var t,e,n,i;n=ft.getElementsByTagName("body")[0],n&&n.style&&(e=ft.createElement("div"),i=ft.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(i).appendChild(e),typeof e.style.zoom!==zt&&(e.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",nt.inlineBlockNeedsLayout=t=3===e.offsetWidth,t&&(n.style.zoom=1)),n.removeChild(i))}),function(){var t=ft.createElement("div");if(null==nt.deleteExpando){nt.deleteExpando=!0;try{delete t.test}catch(e){nt.deleteExpando=!1}}t=null}(),ot.acceptData=function(t){var e=ot.noData[(t.nodeName+" ").toLowerCase()],n=+t.nodeType||1;return(1===n||9===n)&&(!e||e!==!0&&t.getAttribute("classid")===e)};var Tt=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,wt=/([A-Z])/g;ot.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(t){return t=t.nodeType?ot.cache[t[ot.expando]]:t[ot.expando],!!t&&!l(t)},data:function(t,e,n){return u(t,e,n)},removeData:function(t,e){return d(t,e)},_data:function(t,e,n){return u(t,e,n,!0)},_removeData:function(t,e){return d(t,e,!0)}}),ot.fn.extend({data:function(t,e){var n,i,o,a=this[0],s=a&&a.attributes;if(void 0===t){if(this.length&&(o=ot.data(a),1===a.nodeType&&!ot._data(a,"parsedAttrs"))){for(n=s.length;n--;)s[n]&&(i=s[n].name,0===i.indexOf("data-")&&(i=ot.camelCase(i.slice(5)),c(a,i,o[i])));ot._data(a,"parsedAttrs",!0)}return o}return"object"==typeof t?this.each(function(){ot.data(this,t)}):arguments.length>1?this.each(function(){ot.data(this,t,e)}):a?c(a,t,ot.data(a,t)):void 0},removeData:function(t){return this.each(function(){ot.removeData(this,t)})}}),ot.extend({queue:function(t,e,n){var i;if(t)return e=(e||"fx")+"queue",i=ot._data(t,e),n&&(!i||ot.isArray(n)?i=ot._data(t,e,ot.makeArray(n)):i.push(n)),i||[]},dequeue:function(t,e){e=e||"fx";var n=ot.queue(t,e),i=n.length,o=n.shift(),a=ot._queueHooks(t,e),s=function(){ot.dequeue(t,e)};"inprogress"===o&&(o=n.shift(),i--),o&&("fx"===e&&n.unshift("inprogress"),delete a.stop,o.call(t,s,a)),!i&&a&&a.empty.fire()},_queueHooks:function(t,e){var n=e+"queueHooks";return ot._data(t,n)||ot._data(t,n,{empty:ot.Callbacks("once memory").add(function(){ot._removeData(t,e+"queue"),ot._removeData(t,n)})})}}),ot.fn.extend({queue:function(t,e){var n=2;return"string"!=typeof t&&(e=t,t="fx",n--),arguments.length
a",nt.leadingWhitespace=3===e.firstChild.nodeType,nt.tbody=!e.getElementsByTagName("tbody").length,nt.htmlSerialize=!!e.getElementsByTagName("link").length,nt.html5Clone="<:nav>"!==ft.createElement("nav").cloneNode(!0).outerHTML,t.type="checkbox",t.checked=!0,n.appendChild(t),nt.appendChecked=t.checked,e.innerHTML="",nt.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue,n.appendChild(e),e.innerHTML="",nt.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,nt.noCloneEvent=!0,e.attachEvent&&(e.attachEvent("onclick",function(){nt.noCloneEvent=!1}),e.cloneNode(!0).click()),null==nt.deleteExpando){nt.deleteExpando=!0;try{delete e.test}catch(i){nt.deleteExpando=!1}}}(),function(){var e,n,i=ft.createElement("div");for(e in{submit:!0,change:!0,focusin:!0})n="on"+e,(nt[e+"Bubbles"]=n in t)||(i.setAttribute(n,"t"),nt[e+"Bubbles"]=i.attributes[n].expando===!1);i=null}();var Lt=/^(?:input|select|textarea)$/i,Dt=/^key/,kt=/^(?:mouse|pointer|contextmenu)|click/,qt=/^(?:focusinfocus|focusoutblur)$/,Wt=/^([^.]*)(?:\.(.+)|)$/;ot.event={global:{},add:function(t,e,n,i,o){var a,s,r,c,l,u,d,h,p,f,m,g=ot._data(t);if(g){for(n.handler&&(c=n,n=c.handler,o=c.selector),n.guid||(n.guid=ot.guid++),(s=g.events)||(s=g.events={}),(u=g.handle)||(u=g.handle=function(t){return typeof ot===zt||t&&ot.event.triggered===t.type?void 0:ot.event.dispatch.apply(u.elem,arguments)},u.elem=t),e=(e||"").match(Mt)||[""],r=e.length;r--;)a=Wt.exec(e[r])||[],p=m=a[1],f=(a[2]||"").split(".").sort(),p&&(l=ot.event.special[p]||{},p=(o?l.delegateType:l.bindType)||p,l=ot.event.special[p]||{},d=ot.extend({type:p,origType:m,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&ot.expr.match.needsContext.test(o),namespace:f.join(".")},c),(h=s[p])||(h=s[p]=[],h.delegateCount=0,l.setup&&l.setup.call(t,i,f,u)!==!1||(t.addEventListener?t.addEventListener(p,u,!1):t.attachEvent&&t.attachEvent("on"+p,u))),l.add&&(l.add.call(t,d),d.handler.guid||(d.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,d):h.push(d),ot.event.global[p]=!0);t=null}},remove:function(t,e,n,i,o){var a,s,r,c,l,u,d,h,p,f,m,g=ot.hasData(t)&&ot._data(t);if(g&&(u=g.events)){for(e=(e||"").match(Mt)||[""],l=e.length;l--;)if(r=Wt.exec(e[l])||[],p=m=r[1],f=(r[2]||"").split(".").sort(),p){for(d=ot.event.special[p]||{},p=(i?d.delegateType:d.bindType)||p,h=u[p]||[],r=r[2]&&new RegExp("(^|\\.)"+f.join("\\.(?:.*\\.|)")+"(\\.|$)"),c=a=h.length;a--;)s=h[a],!o&&m!==s.origType||n&&n.guid!==s.guid||r&&!r.test(s.namespace)||i&&i!==s.selector&&("**"!==i||!s.selector)||(h.splice(a,1),s.selector&&h.delegateCount--,d.remove&&d.remove.call(t,s));c&&!h.length&&(d.teardown&&d.teardown.call(t,f,g.handle)!==!1||ot.removeEvent(t,p,g.handle),delete u[p])}else for(p in u)ot.event.remove(t,p+e[l],n,i,!0);ot.isEmptyObject(u)&&(delete g.handle,ot._removeData(t,"events")); -}},trigger:function(e,n,i,o){var a,s,r,c,l,u,d,h=[i||ft],p=et.call(e,"type")?e.type:e,f=et.call(e,"namespace")?e.namespace.split("."):[];if(r=u=i=i||ft,3!==i.nodeType&&8!==i.nodeType&&!qt.test(p+ot.event.triggered)&&(p.indexOf(".")>=0&&(f=p.split("."),p=f.shift(),f.sort()),s=p.indexOf(":")<0&&"on"+p,e=e[ot.expando]?e:new ot.Event(p,"object"==typeof e&&e),e.isTrigger=o?2:3,e.namespace=f.join("."),e.namespace_re=e.namespace?new RegExp("(^|\\.)"+f.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=i),n=null==n?[e]:ot.makeArray(n,[e]),l=ot.event.special[p]||{},o||!l.trigger||l.trigger.apply(i,n)!==!1)){if(!o&&!l.noBubble&&!ot.isWindow(i)){for(c=l.delegateType||p,qt.test(c+p)||(r=r.parentNode);r;r=r.parentNode)h.push(r),u=r;u===(i.ownerDocument||ft)&&h.push(u.defaultView||u.parentWindow||t)}for(d=0;(r=h[d++])&&!e.isPropagationStopped();)e.type=d>1?c:l.bindType||p,a=(ot._data(r,"events")||{})[e.type]&&ot._data(r,"handle"),a&&a.apply(r,n),a=s&&r[s],a&&a.apply&&ot.acceptData(r)&&(e.result=a.apply(r,n),e.result===!1&&e.preventDefault());if(e.type=p,!o&&!e.isDefaultPrevented()&&(!l._default||l._default.apply(h.pop(),n)===!1)&&ot.acceptData(i)&&s&&i[p]&&!ot.isWindow(i)){u=i[s],u&&(i[s]=null),ot.event.triggered=p;try{i[p]()}catch(m){}ot.event.triggered=void 0,u&&(i[s]=u)}return e.result}},dispatch:function(t){t=ot.event.fix(t);var e,n,i,o,a,s=[],r=Y.call(arguments),c=(ot._data(this,"events")||{})[t.type]||[],l=ot.event.special[t.type]||{};if(r[0]=t,t.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,t)!==!1){for(s=ot.event.handlers.call(this,t,c),e=0;(o=s[e++])&&!t.isPropagationStopped();)for(t.currentTarget=o.elem,a=0;(i=o.handlers[a++])&&!t.isImmediatePropagationStopped();)t.namespace_re&&!t.namespace_re.test(i.namespace)||(t.handleObj=i,t.data=i.data,n=((ot.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,r),void 0!==n&&(t.result=n)===!1&&(t.preventDefault(),t.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,t),t.result}},handlers:function(t,e){var n,i,o,a,s=[],r=e.delegateCount,c=t.target;if(r&&c.nodeType&&(!t.button||"click"!==t.type))for(;c!=this;c=c.parentNode||this)if(1===c.nodeType&&(c.disabled!==!0||"click"!==t.type)){for(o=[],a=0;a=0:ot.find(n,this,null,[c]).length),o[n]&&o.push(i);o.length&&s.push({elem:c,handlers:o})}return r]","i"),Pt=/^\s+/,Xt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Rt=/<([\w:]+)/,Ft=/\s*$/g,Yt={option:[1,""],legend:[1,"

","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:nt.htmlSerialize?[0,"",""]:[1,"X
","
"]},Kt=m(ft),Gt=Kt.appendChild(ft.createElement("div"));Yt.optgroup=Yt.option,Yt.tbody=Yt.tfoot=Yt.colgroup=Yt.caption=Yt.thead,Yt.th=Yt.td,ot.extend({clone:function(t,e,n){var i,o,a,s,r,c=ot.contains(t.ownerDocument,t);if(nt.html5Clone||ot.isXMLDoc(t)||!It.test("<"+t.nodeName+">")?a=t.cloneNode(!0):(Gt.innerHTML=t.outerHTML,Gt.removeChild(a=Gt.firstChild)),!(nt.noCloneEvent&&nt.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||ot.isXMLDoc(t)))for(i=g(a),r=g(t),s=0;null!=(o=r[s]);++s)i[s]&&z(o,i[s]);if(e)if(n)for(r=r||g(t),i=i||g(a),s=0;null!=(o=r[s]);s++)_(o,i[s]);else _(t,a);return i=g(a,"script"),i.length>0&&A(i,!c&&g(t,"script")),i=r=o=null,a},buildFragment:function(t,e,n,i){for(var o,a,s,r,c,l,u,d=t.length,h=m(e),p=[],f=0;f")+u[2],o=u[0];o--;)r=r.lastChild;if(!nt.leadingWhitespace&&Pt.test(a)&&p.push(e.createTextNode(Pt.exec(a)[0])),!nt.tbody)for(a="table"!==c||Ft.test(a)?""!==u[1]||Ft.test(a)?0:r:r.firstChild,o=a&&a.childNodes.length;o--;)ot.nodeName(l=a.childNodes[o],"tbody")&&!l.childNodes.length&&a.removeChild(l);for(ot.merge(p,r.childNodes),r.textContent="";r.firstChild;)r.removeChild(r.firstChild);r=h.lastChild}else p.push(e.createTextNode(a));for(r&&h.removeChild(r),nt.appendChecked||ot.grep(g(p,"input"),b),f=0;a=p[f++];)if((!i||ot.inArray(a,i)===-1)&&(s=ot.contains(a.ownerDocument,a),r=g(h.appendChild(a),"script"),s&&A(r),n))for(o=0;a=r[o++];)$t.test(a.type||"")&&n.push(a);return r=null,h},cleanData:function(t,e){for(var n,i,o,a,s=0,r=ot.expando,c=ot.cache,l=nt.deleteExpando,u=ot.event.special;null!=(n=t[s]);s++)if((e||ot.acceptData(n))&&(o=n[r],a=o&&c[o])){if(a.events)for(i in a.events)u[i]?ot.event.remove(n,i):ot.removeEvent(n,i,a.handle);c[o]&&(delete c[o],l?delete n[r]:typeof n.removeAttribute!==zt?n.removeAttribute(r):n[r]=null,J.push(o))}}}),ot.fn.extend({text:function(t){return St(this,function(t){return void 0===t?ot.text(this):this.empty().append((this[0]&&this[0].ownerDocument||ft).createTextNode(t))},null,t,arguments.length)},append:function(){return this.domManip(arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=v(this,t);e.appendChild(t)}})},prepend:function(){return this.domManip(arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=v(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return this.domManip(arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return this.domManip(arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},remove:function(t,e){for(var n,i=t?ot.filter(t,this):this,o=0;null!=(n=i[o]);o++)e||1!==n.nodeType||ot.cleanData(g(n)),n.parentNode&&(e&&ot.contains(n.ownerDocument,n)&&A(g(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){for(var t,e=0;null!=(t=this[e]);e++){for(1===t.nodeType&&ot.cleanData(g(t,!1));t.firstChild;)t.removeChild(t.firstChild);t.options&&ot.nodeName(t,"select")&&(t.options.length=0)}return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return ot.clone(this,t,e)})},html:function(t){return St(this,function(t){var e=this[0]||{},n=0,i=this.length;if(void 0===t)return 1===e.nodeType?e.innerHTML.replace(Bt,""):void 0;if("string"==typeof t&&!jt.test(t)&&(nt.htmlSerialize||!It.test(t))&&(nt.leadingWhitespace||!Pt.test(t))&&!Yt[(Rt.exec(t)||["",""])[1].toLowerCase()]){t=t.replace(Xt,"<$1>");try{for(;n1&&"string"==typeof h&&!nt.checkClone&&Ut.test(h))return this.each(function(n){var i=u.eq(n);p&&(t[0]=h.call(this,n,i.html())),i.domManip(t,e)});if(l&&(r=ot.buildFragment(t,this[0].ownerDocument,!1,this),n=r.firstChild,1===r.childNodes.length&&(r=n),n)){for(a=ot.map(g(r,"script"),M),o=a.length;c
t
",o=e.getElementsByTagName("td"),o[0].style.cssText="margin:0;border:0;padding:0;display:none",r=0===o[0].offsetHeight,r&&(o[0].style.display="",o[1].style.display="none",r=0===o[0].offsetHeight),n.removeChild(i))}var n,i,o,a,s,r,c;n=ft.createElement("div"),n.innerHTML="
a",o=n.getElementsByTagName("a")[0],i=o&&o.style,i&&(i.cssText="float:left;opacity:.5",nt.opacity="0.5"===i.opacity,nt.cssFloat=!!i.cssFloat,n.style.backgroundClip="content-box",n.cloneNode(!0).style.backgroundClip="",nt.clearCloneStyle="content-box"===n.style.backgroundClip,nt.boxSizing=""===i.boxSizing||""===i.MozBoxSizing||""===i.WebkitBoxSizing,ot.extend(nt,{reliableHiddenOffsets:function(){return null==r&&e(),r},boxSizingReliable:function(){return null==s&&e(),s},pixelPosition:function(){return null==a&&e(),a},reliableMarginRight:function(){return null==c&&e(),c}}))}(),ot.swap=function(t,e,n,i){var o,a,s={};for(a in e)s[a]=t.style[a],t.style[a]=e[a];o=n.apply(t,i||[]);for(a in e)t.style[a]=s[a];return o};var ae=/alpha\([^)]*\)/i,se=/opacity\s*=\s*([^)]*)/,re=/^(none|table(?!-c[ea]).+)/,ce=new RegExp("^("+Ct+")(.*)$","i"),le=new RegExp("^([+-])=("+Ct+")","i"),ue={position:"absolute",visibility:"hidden",display:"block"},de={letterSpacing:"0",fontWeight:"400"},he=["Webkit","O","Moz","ms"];ot.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=ee(t,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":nt.cssFloat?"cssFloat":"styleFloat"},style:function(t,e,n,i){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var o,a,s,r=ot.camelCase(e),c=t.style;if(e=ot.cssProps[r]||(ot.cssProps[r]=N(c,r)),s=ot.cssHooks[e]||ot.cssHooks[r],void 0===n)return s&&"get"in s&&void 0!==(o=s.get(t,!1,i))?o:c[e];if(a=typeof n,"string"===a&&(o=le.exec(n))&&(n=(o[1]+1)*o[2]+parseFloat(ot.css(t,e)),a="number"),null!=n&&n===n&&("number"!==a||ot.cssNumber[r]||(n+="px"),nt.clearCloneStyle||""!==n||0!==e.indexOf("background")||(c[e]="inherit"),!(s&&"set"in s&&void 0===(n=s.set(t,n,i)))))try{c[e]=n}catch(l){}}},css:function(t,e,n,i){var o,a,s,r=ot.camelCase(e);return e=ot.cssProps[r]||(ot.cssProps[r]=N(t.style,r)),s=ot.cssHooks[e]||ot.cssHooks[r],s&&"get"in s&&(a=s.get(t,!0,n)),void 0===a&&(a=ee(t,e,i)),"normal"===a&&e in de&&(a=de[e]),""===n||n?(o=parseFloat(a),n===!0||ot.isNumeric(o)?o||0:a):a}}),ot.each(["height","width"],function(t,e){ot.cssHooks[e]={get:function(t,n,i){if(n)return re.test(ot.css(t,"display"))&&0===t.offsetWidth?ot.swap(t,ue,function(){return L(t,e,i)}):L(t,e,i)},set:function(t,n,i){var o=i&&te(t);return S(t,n,i?x(t,e,i,nt.boxSizing&&"border-box"===ot.css(t,"boxSizing",!1,o),o):0)}}}),nt.opacity||(ot.cssHooks.opacity={get:function(t,e){return se.test((e&&t.currentStyle?t.currentStyle.filter:t.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":e?"1":""},set:function(t,e){var n=t.style,i=t.currentStyle,o=ot.isNumeric(e)?"alpha(opacity="+100*e+")":"",a=i&&i.filter||n.filter||"";n.zoom=1,(e>=1||""===e)&&""===ot.trim(a.replace(ae,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===e||i&&!i.filter)||(n.filter=ae.test(a)?a.replace(ae,o):a+" "+o)}}),ot.cssHooks.marginRight=C(nt.reliableMarginRight,function(t,e){if(e)return ot.swap(t,{display:"inline-block"},ee,[t,"marginRight"])}),ot.each({margin:"",padding:"",border:"Width"},function(t,e){ot.cssHooks[t+e]={expand:function(n){for(var i=0,o={},a="string"==typeof n?n.split(" "):[n];i<4;i++)o[t+Nt[i]+e]=a[i]||a[i-2]||a[0];return o}},ne.test(t)||(ot.cssHooks[t+e].set=S)}),ot.fn.extend({css:function(t,e){return St(this,function(t,e,n){var i,o,a={},s=0;if(ot.isArray(e)){for(i=te(t),o=e.length;s1)},show:function(){return O(this,!0)},hide:function(){return O(this)},toggle:function(t){return"boolean"==typeof t?t?this.show():this.hide():this.each(function(){Ot(this)?ot(this).show():ot(this).hide()})}}),ot.Tween=D,D.prototype={constructor:D,init:function(t,e,n,i,o,a){this.elem=t,this.prop=n,this.easing=o||"swing",this.options=e,this.start=this.now=this.cur(),this.end=i,this.unit=a||(ot.cssNumber[n]?"":"px")},cur:function(){var t=D.propHooks[this.prop];return t&&t.get?t.get(this):D.propHooks._default.get(this)},run:function(t){var e,n=D.propHooks[this.prop];return this.options.duration?this.pos=e=ot.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):D.propHooks._default.set(this),this}},D.prototype.init.prototype=D.prototype,D.propHooks={_default:{get:function(t){var e;return null==t.elem[t.prop]||t.elem.style&&null!=t.elem.style[t.prop]?(e=ot.css(t.elem,t.prop,""),e&&"auto"!==e?e:0):t.elem[t.prop]},set:function(t){ot.fx.step[t.prop]?ot.fx.step[t.prop](t):t.elem.style&&(null!=t.elem.style[ot.cssProps[t.prop]]||ot.cssHooks[t.prop])?ot.style(t.elem,t.prop,t.now+t.unit):t.elem[t.prop]=t.now}}},D.propHooks.scrollTop=D.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},ot.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2}},ot.fx=D.prototype.init,ot.fx.step={};var pe,fe,me=/^(?:toggle|show|hide)$/,ge=new RegExp("^(?:([+-])=|)("+Ct+")([a-z%]*)$","i"),be=/queueHooks$/,ve=[E],Me={"*":[function(t,e){var n=this.createTween(t,e),i=n.cur(),o=ge.exec(e),a=o&&o[3]||(ot.cssNumber[t]?"":"px"),s=(ot.cssNumber[t]||"px"!==a&&+i)&&ge.exec(ot.css(n.elem,t)),r=1,c=20;if(s&&s[3]!==a){a=a||s[3],o=o||[],s=+i||1;do r=r||".5",s/=r,ot.style(n.elem,t,s+a);while(r!==(r=n.cur()/i)&&1!==r&&--c)}return o&&(s=n.start=+s||+i||0,n.unit=a,n.end=o[1]?s+(o[1]+1)*o[2]:+o[2]),n}]};ot.Animation=ot.extend(I,{tweener:function(t,e){ot.isFunction(t)?(e=t,t=["*"]):t=t.split(" ");for(var n,i=0,o=t.length;i
a",i=e.getElementsByTagName("a")[0],n=ft.createElement("select"),o=n.appendChild(ft.createElement("option")),t=e.getElementsByTagName("input")[0],i.style.cssText="top:1px",nt.getSetAttribute="t"!==e.className,nt.style=/top/.test(i.getAttribute("style")),nt.hrefNormalized="/a"===i.getAttribute("href"),nt.checkOn=!!t.value,nt.optSelected=o.selected,nt.enctype=!!ft.createElement("form").enctype,n.disabled=!0,nt.optDisabled=!o.disabled,t=ft.createElement("input"),t.setAttribute("value",""),nt.input=""===t.getAttribute("value"),t.value="t",t.setAttribute("type","radio"),nt.radioValue="t"===t.value}();var ye=/\r/g;ot.fn.extend({val:function(t){var e,n,i,o=this[0];{if(arguments.length)return i=ot.isFunction(t),this.each(function(n){var o;1===this.nodeType&&(o=i?t.call(this,n,ot(this).val()):t,null==o?o="":"number"==typeof o?o+="":ot.isArray(o)&&(o=ot.map(o,function(t){return null==t?"":t+""})),e=ot.valHooks[this.type]||ot.valHooks[this.nodeName.toLowerCase()],e&&"set"in e&&void 0!==e.set(this,o,"value")||(this.value=o))});if(o)return e=ot.valHooks[o.type]||ot.valHooks[o.nodeName.toLowerCase()],e&&"get"in e&&void 0!==(n=e.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(ye,""):null==n?"":n)}}}),ot.extend({valHooks:{option:{get:function(t){var e=ot.find.attr(t,"value");return null!=e?e:ot.trim(ot.text(t))}},select:{get:function(t){for(var e,n,i=t.options,o=t.selectedIndex,a="select-one"===t.type||o<0,s=a?null:[],r=a?o+1:i.length,c=o<0?r:a?o:0;c=0)try{i.selected=n=!0}catch(r){i.scrollHeight}else i.selected=!1;return n||(t.selectedIndex=-1),o}}}}),ot.each(["radio","checkbox"],function(){ot.valHooks[this]={set:function(t,e){if(ot.isArray(e))return t.checked=ot.inArray(ot(t).val(),e)>=0}},nt.checkOn||(ot.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})});var Ae,_e,ze=ot.expr.attrHandle,Te=/^(?:checked|selected)$/i,we=nt.getSetAttribute,Ce=nt.input;ot.fn.extend({attr:function(t,e){return St(this,ot.attr,t,e,arguments.length>1)},removeAttr:function(t){return this.each(function(){ot.removeAttr(this,t)})}}),ot.extend({attr:function(t,e,n){var i,o,a=t.nodeType;if(t&&3!==a&&8!==a&&2!==a)return typeof t.getAttribute===zt?ot.prop(t,e,n):(1===a&&ot.isXMLDoc(t)||(e=e.toLowerCase(),i=ot.attrHooks[e]||(ot.expr.match.bool.test(e)?_e:Ae)),void 0===n?i&&"get"in i&&null!==(o=i.get(t,e))?o:(o=ot.find.attr(t,e),null==o?void 0:o):null!==n?i&&"set"in i&&void 0!==(o=i.set(t,n,e))?o:(t.setAttribute(e,n+""),n):void ot.removeAttr(t,e))},removeAttr:function(t,e){var n,i,o=0,a=e&&e.match(Mt);if(a&&1===t.nodeType)for(;n=a[o++];)i=ot.propFix[n]||n,ot.expr.match.bool.test(n)?Ce&&we||!Te.test(n)?t[i]=!1:t[ot.camelCase("default-"+n)]=t[i]=!1:ot.attr(t,n,""),t.removeAttribute(we?n:i)},attrHooks:{type:{set:function(t,e){if(!nt.radioValue&&"radio"===e&&ot.nodeName(t,"input")){var n=t.value;return t.setAttribute("type",e),n&&(t.value=n),e}}}}}),_e={set:function(t,e,n){return e===!1?ot.removeAttr(t,n):Ce&&we||!Te.test(n)?t.setAttribute(!we&&ot.propFix[n]||n,n):t[ot.camelCase("default-"+n)]=t[n]=!0,n}},ot.each(ot.expr.match.bool.source.match(/\w+/g),function(t,e){var n=ze[e]||ot.find.attr;ze[e]=Ce&&we||!Te.test(e)?function(t,e,i){var o,a;return i||(a=ze[e],ze[e]=o,o=null!=n(t,e,i)?e.toLowerCase():null,ze[e]=a),o}:function(t,e,n){if(!n)return t[ot.camelCase("default-"+e)]?e.toLowerCase():null}}),Ce&&we||(ot.attrHooks.value={set:function(t,e,n){return ot.nodeName(t,"input")?void(t.defaultValue=e):Ae&&Ae.set(t,e,n)}}),we||(Ae={set:function(t,e,n){var i=t.getAttributeNode(n);if(i||t.setAttributeNode(i=t.ownerDocument.createAttribute(n)),i.value=e+="","value"===n||e===t.getAttribute(n))return e}},ze.id=ze.name=ze.coords=function(t,e,n){var i;if(!n)return(i=t.getAttributeNode(e))&&""!==i.value?i.value:null},ot.valHooks.button={get:function(t,e){var n=t.getAttributeNode(e);if(n&&n.specified)return n.value},set:Ae.set},ot.attrHooks.contenteditable={set:function(t,e,n){Ae.set(t,""!==e&&e,n)}},ot.each(["width","height"],function(t,e){ot.attrHooks[e]={set:function(t,n){if(""===n)return t.setAttribute(e,"auto"),n}}})),nt.style||(ot.attrHooks.style={get:function(t){return t.style.cssText||void 0},set:function(t,e){return t.style.cssText=e+""}});var Ne=/^(?:input|select|textarea|button|object)$/i,Oe=/^(?:a|area)$/i;ot.fn.extend({prop:function(t,e){return St(this,ot.prop,t,e,arguments.length>1)},removeProp:function(t){return t=ot.propFix[t]||t,this.each(function(){try{this[t]=void 0,delete this[t]}catch(e){}})}}),ot.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(t,e,n){var i,o,a,s=t.nodeType;if(t&&3!==s&&8!==s&&2!==s)return a=1!==s||!ot.isXMLDoc(t),a&&(e=ot.propFix[e]||e,o=ot.propHooks[e]),void 0!==n?o&&"set"in o&&void 0!==(i=o.set(t,n,e))?i:t[e]=n:o&&"get"in o&&null!==(i=o.get(t,e))?i:t[e]},propHooks:{tabIndex:{get:function(t){var e=ot.find.attr(t,"tabindex");return e?parseInt(e,10):Ne.test(t.nodeName)||Oe.test(t.nodeName)&&t.href?0:-1}}}}),nt.hrefNormalized||ot.each(["href","src"],function(t,e){ot.propHooks[e]={get:function(t){return t.getAttribute(e,4)}}}),nt.optSelected||(ot.propHooks.selected={get:function(t){var e=t.parentNode;return e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex), -null}}),ot.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ot.propFix[this.toLowerCase()]=this}),nt.enctype||(ot.propFix.enctype="encoding");var Se=/[\t\r\n\f]/g;ot.fn.extend({addClass:function(t){var e,n,i,o,a,s,r=0,c=this.length,l="string"==typeof t&&t;if(ot.isFunction(t))return this.each(function(e){ot(this).addClass(t.call(this,e,this.className))});if(l)for(e=(t||"").match(Mt)||[];r=0;)i=i.replace(" "+o+" "," ");s=t?ot.trim(i):"",n.className!==s&&(n.className=s)}return this},toggleClass:function(t,e){var n=typeof t;return"boolean"==typeof e&&"string"===n?e?this.addClass(t):this.removeClass(t):ot.isFunction(t)?this.each(function(n){ot(this).toggleClass(t.call(this,n,this.className,e),e)}):this.each(function(){if("string"===n)for(var e,i=0,o=ot(this),a=t.match(Mt)||[];e=a[i++];)o.hasClass(e)?o.removeClass(e):o.addClass(e);else n!==zt&&"boolean"!==n||(this.className&&ot._data(this,"__className__",this.className),this.className=this.className||t===!1?"":ot._data(this,"__className__")||"")})},hasClass:function(t){for(var e=" "+t+" ",n=0,i=this.length;n=0)return!0;return!1}}),ot.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(t,e){ot.fn[e]=function(t,n){return arguments.length>0?this.on(e,null,t,n):this.trigger(e)}}),ot.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)},bind:function(t,e,n){return this.on(t,null,e,n)},unbind:function(t,e){return this.off(t,null,e)},delegate:function(t,e,n,i){return this.on(e,t,n,i)},undelegate:function(t,e,n){return 1===arguments.length?this.off(t,"**"):this.off(e,t||"**",n)}});var xe=ot.now(),Le=/\?/,De=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;ot.parseJSON=function(e){if(t.JSON&&t.JSON.parse)return t.JSON.parse(e+"");var n,i=null,o=ot.trim(e+"");return o&&!ot.trim(o.replace(De,function(t,e,o,a){return n&&e&&(i=0),0===i?t:(n=o||e,i+=!a-!o,"")}))?Function("return "+o)():ot.error("Invalid JSON: "+e)},ot.parseXML=function(e){var n,i;if(!e||"string"!=typeof e)return null;try{t.DOMParser?(i=new DOMParser,n=i.parseFromString(e,"text/xml")):(n=new ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(e))}catch(o){n=void 0}return n&&n.documentElement&&!n.getElementsByTagName("parsererror").length||ot.error("Invalid XML: "+e),n};var ke,qe,We=/#.*$/,Ee=/([?&])_=[^&]*/,Be=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Ie=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Pe=/^(?:GET|HEAD)$/,Xe=/^\/\//,Re=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Fe={},He={},je="*/".concat("*");try{qe=location.href}catch(Ue){qe=ft.createElement("a"),qe.href="",qe=qe.href}ke=Re.exec(qe.toLowerCase())||[],ot.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qe,type:"GET",isLocal:Ie.test(ke[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":je,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":ot.parseJSON,"text xml":ot.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?R(R(t,ot.ajaxSettings),e):R(ot.ajaxSettings,t)},ajaxPrefilter:P(Fe),ajaxTransport:P(He),ajax:function(t,e){function n(t,e,n,i){var o,u,b,v,y,_=e;2!==M&&(M=2,r&&clearTimeout(r),l=void 0,s=i||"",A.readyState=t>0?4:0,o=t>=200&&t<300||304===t,n&&(v=F(d,A,n)),v=H(d,v,A,o),o?(d.ifModified&&(y=A.getResponseHeader("Last-Modified"),y&&(ot.lastModified[a]=y),y=A.getResponseHeader("etag"),y&&(ot.etag[a]=y)),204===t||"HEAD"===d.type?_="nocontent":304===t?_="notmodified":(_=v.state,u=v.data,b=v.error,o=!b)):(b=_,!t&&_||(_="error",t<0&&(t=0))),A.status=t,A.statusText=(e||_)+"",o?f.resolveWith(h,[u,_,A]):f.rejectWith(h,[A,_,b]),A.statusCode(g),g=void 0,c&&p.trigger(o?"ajaxSuccess":"ajaxError",[A,d,o?u:b]),m.fireWith(h,[A,_]),c&&(p.trigger("ajaxComplete",[A,d]),--ot.active||ot.event.trigger("ajaxStop")))}"object"==typeof t&&(e=t,t=void 0),e=e||{};var i,o,a,s,r,c,l,u,d=ot.ajaxSetup({},e),h=d.context||d,p=d.context&&(h.nodeType||h.jquery)?ot(h):ot.event,f=ot.Deferred(),m=ot.Callbacks("once memory"),g=d.statusCode||{},b={},v={},M=0,y="canceled",A={readyState:0,getResponseHeader:function(t){var e;if(2===M){if(!u)for(u={};e=Be.exec(s);)u[e[1].toLowerCase()]=e[2];e=u[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return 2===M?s:null},setRequestHeader:function(t,e){var n=t.toLowerCase();return M||(t=v[n]=v[n]||t,b[t]=e),this},overrideMimeType:function(t){return M||(d.mimeType=t),this},statusCode:function(t){var e;if(t)if(M<2)for(e in t)g[e]=[g[e],t[e]];else A.always(t[A.status]);return this},abort:function(t){var e=t||y;return l&&l.abort(e),n(0,e),this}};if(f.promise(A).complete=m.add,A.success=A.done,A.error=A.fail,d.url=((t||d.url||qe)+"").replace(We,"").replace(Xe,ke[1]+"//"),d.type=e.method||e.type||d.method||d.type,d.dataTypes=ot.trim(d.dataType||"*").toLowerCase().match(Mt)||[""],null==d.crossDomain&&(i=Re.exec(d.url.toLowerCase()),d.crossDomain=!(!i||i[1]===ke[1]&&i[2]===ke[2]&&(i[3]||("http:"===i[1]?"80":"443"))===(ke[3]||("http:"===ke[1]?"80":"443")))),d.data&&d.processData&&"string"!=typeof d.data&&(d.data=ot.param(d.data,d.traditional)),X(Fe,d,e,A),2===M)return A;c=ot.event&&d.global,c&&0===ot.active++&&ot.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Pe.test(d.type),a=d.url,d.hasContent||(d.data&&(a=d.url+=(Le.test(a)?"&":"?")+d.data,delete d.data),d.cache===!1&&(d.url=Ee.test(a)?a.replace(Ee,"$1_="+xe++):a+(Le.test(a)?"&":"?")+"_="+xe++)),d.ifModified&&(ot.lastModified[a]&&A.setRequestHeader("If-Modified-Since",ot.lastModified[a]),ot.etag[a]&&A.setRequestHeader("If-None-Match",ot.etag[a])),(d.data&&d.hasContent&&d.contentType!==!1||e.contentType)&&A.setRequestHeader("Content-Type",d.contentType),A.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+je+"; q=0.01":""):d.accepts["*"]);for(o in d.headers)A.setRequestHeader(o,d.headers[o]);if(d.beforeSend&&(d.beforeSend.call(h,A,d)===!1||2===M))return A.abort();y="abort";for(o in{success:1,error:1,complete:1})A[o](d[o]);if(l=X(He,d,e,A)){A.readyState=1,c&&p.trigger("ajaxSend",[A,d]),d.async&&d.timeout>0&&(r=setTimeout(function(){A.abort("timeout")},d.timeout));try{M=1,l.send(b,n)}catch(_){if(!(M<2))throw _;n(-1,_)}}else n(-1,"No Transport");return A},getJSON:function(t,e,n){return ot.get(t,e,n,"json")},getScript:function(t,e){return ot.get(t,void 0,e,"script")}}),ot.each(["get","post"],function(t,e){ot[e]=function(t,n,i,o){return ot.isFunction(n)&&(o=o||i,i=n,n=void 0),ot.ajax({url:t,type:e,dataType:o,data:n,success:i})}}),ot._evalUrl=function(t){return ot.ajax({url:t,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},ot.fn.extend({wrapAll:function(t){if(ot.isFunction(t))return this.each(function(e){ot(this).wrapAll(t.call(this,e))});if(this[0]){var e=ot(t,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstChild&&1===t.firstChild.nodeType;)t=t.firstChild;return t}).append(this)}return this},wrapInner:function(t){return ot.isFunction(t)?this.each(function(e){ot(this).wrapInner(t.call(this,e))}):this.each(function(){var e=ot(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)})},wrap:function(t){var e=ot.isFunction(t);return this.each(function(n){ot(this).wrapAll(e?t.call(this,n):t)})},unwrap:function(){return this.parent().each(function(){ot.nodeName(this,"body")||ot(this).replaceWith(this.childNodes)}).end()}}),ot.expr.filters.hidden=function(t){return t.offsetWidth<=0&&t.offsetHeight<=0||!nt.reliableHiddenOffsets()&&"none"===(t.style&&t.style.display||ot.css(t,"display"))},ot.expr.filters.visible=function(t){return!ot.expr.filters.hidden(t)};var $e=/%20/g,Ve=/\[\]$/,Je=/\r?\n/g,Ye=/^(?:submit|button|image|reset|file)$/i,Ke=/^(?:input|select|textarea|keygen)/i;ot.param=function(t,e){var n,i=[],o=function(t,e){e=ot.isFunction(e)?e():null==e?"":e,i[i.length]=encodeURIComponent(t)+"="+encodeURIComponent(e)};if(void 0===e&&(e=ot.ajaxSettings&&ot.ajaxSettings.traditional),ot.isArray(t)||t.jquery&&!ot.isPlainObject(t))ot.each(t,function(){o(this.name,this.value)});else for(n in t)j(n,t[n],e,o);return i.join("&").replace($e,"+")},ot.fn.extend({serialize:function(){return ot.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=ot.prop(this,"elements");return t?ot.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!ot(this).is(":disabled")&&Ke.test(this.nodeName)&&!Ye.test(t)&&(this.checked||!xt.test(t))}).map(function(t,e){var n=ot(this).val();return null==n?null:ot.isArray(n)?ot.map(n,function(t){return{name:e.name,value:t.replace(Je,"\r\n")}}):{name:e.name,value:n.replace(Je,"\r\n")}}).get()}}),ot.ajaxSettings.xhr=void 0!==t.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&U()||$()}:U;var Ge=0,Qe={},Ze=ot.ajaxSettings.xhr();t.attachEvent&&t.attachEvent("onunload",function(){for(var t in Qe)Qe[t](void 0,!0)}),nt.cors=!!Ze&&"withCredentials"in Ze,Ze=nt.ajax=!!Ze,Ze&&ot.ajaxTransport(function(t){if(!t.crossDomain||nt.cors){var e;return{send:function(n,i){var o,a=t.xhr(),s=++Ge;if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(o in t.xhrFields)a[o]=t.xhrFields[o];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||n["X-Requested-With"]||(n["X-Requested-With"]="XMLHttpRequest");for(o in n)void 0!==n[o]&&a.setRequestHeader(o,n[o]+"");a.send(t.hasContent&&t.data||null),e=function(n,o){var r,c,l;if(e&&(o||4===a.readyState))if(delete Qe[s],e=void 0,a.onreadystatechange=ot.noop,o)4!==a.readyState&&a.abort();else{l={},r=a.status,"string"==typeof a.responseText&&(l.text=a.responseText);try{c=a.statusText}catch(u){c=""}r||!t.isLocal||t.crossDomain?1223===r&&(r=204):r=l.text?200:404}l&&i(r,c,l,a.getAllResponseHeaders())},t.async?4===a.readyState?setTimeout(e):a.onreadystatechange=Qe[s]=e:e()},abort:function(){e&&e(void 0,!0)}}}}),ot.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(t){return ot.globalEval(t),t}}}),ot.ajaxPrefilter("script",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET",t.global=!1)}),ot.ajaxTransport("script",function(t){if(t.crossDomain){var e,n=ft.head||ot("head")[0]||ft.documentElement;return{send:function(i,o){e=ft.createElement("script"),e.async=!0,t.scriptCharset&&(e.charset=t.scriptCharset),e.src=t.url,e.onload=e.onreadystatechange=function(t,n){(n||!e.readyState||/loaded|complete/.test(e.readyState))&&(e.onload=e.onreadystatechange=null,e.parentNode&&e.parentNode.removeChild(e),e=null,n||o(200,"success"))},n.insertBefore(e,n.firstChild)},abort:function(){e&&e.onload(void 0,!0)}}}});var tn=[],en=/(=)\?(?=&|$)|\?\?/;ot.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var t=tn.pop()||ot.expando+"_"+xe++;return this[t]=!0,t}}),ot.ajaxPrefilter("json jsonp",function(e,n,i){var o,a,s,r=e.jsonp!==!1&&(en.test(e.url)?"url":"string"==typeof e.data&&!(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&en.test(e.data)&&"data");if(r||"jsonp"===e.dataTypes[0])return o=e.jsonpCallback=ot.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,r?e[r]=e[r].replace(en,"$1"+o):e.jsonp!==!1&&(e.url+=(Le.test(e.url)?"&":"?")+e.jsonp+"="+o),e.converters["script json"]=function(){return s||ot.error(o+" was not called"),s[0]},e.dataTypes[0]="json",a=t[o],t[o]=function(){s=arguments},i.always(function(){t[o]=a,e[o]&&(e.jsonpCallback=n.jsonpCallback,tn.push(o)),s&&ot.isFunction(a)&&a(s[0]),s=a=void 0}),"script"}),ot.parseHTML=function(t,e,n){if(!t||"string"!=typeof t)return null;"boolean"==typeof e&&(n=e,e=!1),e=e||ft;var i=dt.exec(t),o=!n&&[];return i?[e.createElement(i[1])]:(i=ot.buildFragment([t],e,o),o&&o.length&&ot(o).remove(),ot.merge([],i.childNodes))};var nn=ot.fn.load;ot.fn.load=function(t,e,n){if("string"!=typeof t&&nn)return nn.apply(this,arguments);var i,o,a,s=this,r=t.indexOf(" ");return r>=0&&(i=ot.trim(t.slice(r,t.length)),t=t.slice(0,r)),ot.isFunction(e)?(n=e,e=void 0):e&&"object"==typeof e&&(a="POST"),s.length>0&&ot.ajax({url:t,type:a,dataType:"html",data:e}).done(function(t){o=arguments,s.html(i?ot("
").append(ot.parseHTML(t)).find(i):t)}).complete(n&&function(t,e){s.each(n,o||[t.responseText,e,t])}),this},ot.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(t,e){ot.fn[e]=function(t){return this.on(e,t)}}),ot.expr.filters.animated=function(t){return ot.grep(ot.timers,function(e){return t===e.elem}).length};var on=t.document.documentElement;ot.offset={setOffset:function(t,e,n){var i,o,a,s,r,c,l,u=ot.css(t,"position"),d=ot(t),h={};"static"===u&&(t.style.position="relative"),r=d.offset(),a=ot.css(t,"top"),c=ot.css(t,"left"),l=("absolute"===u||"fixed"===u)&&ot.inArray("auto",[a,c])>-1,l?(i=d.position(),s=i.top,o=i.left):(s=parseFloat(a)||0,o=parseFloat(c)||0),ot.isFunction(e)&&(e=e.call(t,n,r)),null!=e.top&&(h.top=e.top-r.top+s),null!=e.left&&(h.left=e.left-r.left+o),"using"in e?e.using.call(t,h):d.css(h)}},ot.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ot.offset.setOffset(this,t,e)});var e,n,i={top:0,left:0},o=this[0],a=o&&o.ownerDocument;if(a)return e=a.documentElement,ot.contains(e,o)?(typeof o.getBoundingClientRect!==zt&&(i=o.getBoundingClientRect()),n=V(a),{top:i.top+(n.pageYOffset||e.scrollTop)-(e.clientTop||0),left:i.left+(n.pageXOffset||e.scrollLeft)-(e.clientLeft||0)}):i},position:function(){if(this[0]){var t,e,n={top:0,left:0},i=this[0];return"fixed"===ot.css(i,"position")?e=i.getBoundingClientRect():(t=this.offsetParent(),e=this.offset(),ot.nodeName(t[0],"html")||(n=t.offset()),n.top+=ot.css(t[0],"borderTopWidth",!0),n.left+=ot.css(t[0],"borderLeftWidth",!0)),{top:e.top-n.top-ot.css(i,"marginTop",!0),left:e.left-n.left-ot.css(i,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||on;t&&!ot.nodeName(t,"html")&&"static"===ot.css(t,"position");)t=t.offsetParent;return t||on})}}),ot.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,e){var n=/Y/.test(e);ot.fn[t]=function(i){return St(this,function(t,i,o){var a=V(t);return void 0===o?a?e in a?a[e]:a.document.documentElement[i]:t[i]:void(a?a.scrollTo(n?ot(a).scrollLeft():o,n?o:ot(a).scrollTop()):t[i]=o)},t,i,arguments.length,null)}}),ot.each(["top","left"],function(t,e){ot.cssHooks[e]=C(nt.pixelPosition,function(t,n){if(n)return n=ee(t,e),ie.test(n)?ot(t).position()[e]+"px":n})}),ot.each({Height:"height",Width:"width"},function(t,e){ot.each({padding:"inner"+t,content:e,"":"outer"+t},function(n,i){ot.fn[i]=function(i,o){var a=arguments.length&&(n||"boolean"!=typeof i),s=n||(i===!0||o===!0?"margin":"border");return St(this,function(e,n,i){var o;return ot.isWindow(e)?e.document.documentElement["client"+t]:9===e.nodeType?(o=e.documentElement,Math.max(e.body["scroll"+t],o["scroll"+t],e.body["offset"+t],o["offset"+t],o["client"+t])):void 0===i?ot.css(e,n,s):ot.style(e,n,i,s)},e,a?i:void 0,a,null)}})}),ot.fn.size=function(){return this.length},ot.fn.andSelf=ot.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return ot});var an=t.jQuery,sn=t.$;return ot.noConflict=function(e){return t.$===ot&&(t.$=sn),e&&t.jQuery===ot&&(t.jQuery=an),ot},typeof e===zt&&(t.jQuery=t.$=ot),ot}),function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(t){function e(e,i){var o,a,s,r=e.nodeName.toLowerCase();return"area"===r?(o=e.parentNode,a=o.name,!(!e.href||!a||"map"!==o.nodeName.toLowerCase())&&(s=t("img[usemap='#"+a+"']")[0],!!s&&n(s))):(/input|select|textarea|button|object/.test(r)?!e.disabled:"a"===r?e.href||i:i)&&n(e)}function n(e){return t.expr.filters.visible(e)&&!t(e).parents().addBack().filter(function(){return"hidden"===t.css(this,"visibility")}).length}function i(t){for(var e,n;t.length&&t[0]!==document;){if(e=t.css("position"),("absolute"===e||"relative"===e||"fixed"===e)&&(n=parseInt(t.css("zIndex"),10),!isNaN(n)&&0!==n))return n;t=t.parent()}return 0}function o(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=a(t("
"))}function a(e){var n="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.delegate(n,"mouseout",function(){t(this).removeClass("ui-state-hover"),this.className.indexOf("ui-datepicker-prev")!==-1&&t(this).removeClass("ui-datepicker-prev-hover"),this.className.indexOf("ui-datepicker-next")!==-1&&t(this).removeClass("ui-datepicker-next-hover")}).delegate(n,"mouseover",s)}function s(){t.datepicker._isDisabledDatepicker(b.inline?b.dpDiv.parent()[0]:b.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),this.className.indexOf("ui-datepicker-prev")!==-1&&t(this).addClass("ui-datepicker-prev-hover"),this.className.indexOf("ui-datepicker-next")!==-1&&t(this).addClass("ui-datepicker-next-hover"))}function r(e,n){t.extend(e,n);for(var i in n)null==n[i]&&(e[i]=n[i]);return e}function c(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{},t.extend(t.ui,{version:"1.11.2",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),t.fn.extend({scrollParent:function(e){var n=this.css("position"),i="absolute"===n,o=e?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var e=t(this);return(!i||"static"!==e.css("position"))&&o.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==n&&a.length?a:t(this[0].ownerDocument||document)},uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(n){return!!t.data(n,e)}}):function(e,n,i){return!!t.data(e,i[3])},focusable:function(n){return e(n,!isNaN(t.attr(n,"tabindex")))},tabbable:function(n){var i=t.attr(n,"tabindex"),o=isNaN(i);return(o||i>=0)&&e(n,!o)}}),t("").outerWidth(1).jquery||t.each(["Width","Height"],function(e,n){function i(e,n,i,a){return t.each(o,function(){n-=parseFloat(t.css(e,"padding"+this))||0,i&&(n-=parseFloat(t.css(e,"border"+this+"Width"))||0),a&&(n-=parseFloat(t.css(e,"margin"+this))||0)}),n}var o="Width"===n?["Left","Right"]:["Top","Bottom"],a=n.toLowerCase(),s={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+n]=function(e){return void 0===e?s["inner"+n].call(this):this.each(function(){t(this).css(a,i(this,e)+"px")})},t.fn["outer"+n]=function(e,o){return"number"!=typeof e?s["outer"+n].call(this,e):this.each(function(){t(this).css(a,i(this,e,!0,o)+"px")})}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t("").data("a-b","a").removeData("a-b").data("a-b")&&(t.fn.removeData=function(e){return function(n){return arguments.length?e.call(this,t.camelCase(n)):e.call(this)}}(t.fn.removeData)),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),t.fn.extend({focus:function(e){return function(n,i){return"number"==typeof n?this.each(function(){var e=this;setTimeout(function(){t(e).focus(),i&&i.call(e)},n)}):e.apply(this,arguments)}}(t.fn.focus),disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(e){if(void 0!==e)return this.css("zIndex",e);if(this.length)for(var n,i,o=t(this[0]);o.length&&o[0]!==document;){if(n=o.css("position"),("absolute"===n||"relative"===n||"fixed"===n)&&(i=parseInt(o.css("zIndex"),10),!isNaN(i)&&0!==i))return i;o=o.parent()}return 0}}),t.ui.plugin={add:function(e,n,i){var o,a=t.ui[e].prototype;for(o in i)a.plugins[o]=a.plugins[o]||[],a.plugins[o].push([n,i[o]])},call:function(t,e,n,i){var o,a=t.plugins[e];if(a&&(i||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(o=0;o",options:{disabled:!1,create:null},_createWidget:function(e,n){n=t(n||this.defaultElement||this)[0],this.element=t(n),this.uuid=l++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),n!==this&&(t.data(n,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===n&&this.destroy()}}),this.document=t(n.style?n.ownerDocument:n.document||n),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:t.noop,_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(t.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:t.noop,widget:function(){return this.element},option:function(e,n){var i,o,a,s=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(s={},i=e.split("."),e=i.shift(),i.length){for(o=s[e]=t.widget.extend({},this.options[e]),a=0;a1?c=r.split("+")[1]:r.split("-").length>1&&(c=parseInt(r.split("-")[1])*-1),t=t.replace(r,getDatePart(i,c))}}return t}function getDatePart(t,e){return e=parseInt(e),e||(e=0),"MONTH"==t?getMonth(e):"QUARTER"==t?getQuarter(e):"YEAR"==t?getYear(e):void 0}function getMonth(t){var e=new Date,n=["January","February","March","April","May","June","July","August","September","October","November","December"],i=e.getMonth();return i=parseInt(i)+t,i%=12,i<0&&(i+=12),n[i]}function getYear(t){var e=new Date,n=e.getFullYear();return parseInt(n)+t}function getQuarter(t){var e=new Date,n=Math.floor((e.getMonth()+3)/3);return n+=t,n%=4,0==n&&(n=4),"Q"+n}function isStorageSupported(){try{return"localStorage"in window&&null!==window.localStorage}catch(t){return!1}}function isValidEmailAddress(t){var e=new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i);return e.test(t)}function enableHoverClick(t,e,n){}function setAsLink(t,e){e?(t.css("text-decoration","underline"),t.css("cursor","pointer")):(t.css("text-decoration","none"),t.css("cursor","text"))}function setComboboxValue(t,e,n){t.find("input").val(e),t.find("input.form-control").val(n),e&&n?(t.find("select").combobox("setSelected"),t.find(".combobox-container").addClass("combobox-selected")):t.find(".combobox-container").removeClass("combobox-selected")}function convertDataURIToBinary(t){var e=t.indexOf(BASE64_MARKER)+BASE64_MARKER.length,n=t.substring(e);return base64DecToArr(n)}function comboboxHighlighter(t){var e=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),n=t.replace(new RegExp("
","g"),"\n");return n=_.escape(n),n=n.replace(new RegExp("("+e+")","ig"),function(t,n){return n?""+n+"":e}),n.replace(new RegExp("\n","g"),"
")}function inIframe(){try{return window.self!==window.top}catch(t){return!0}}function getContactDisplayName(t){return t.first_name||t.last_name?$.trim((t.first_name||"")+" "+(t.last_name||"")):t.email}function getContactDisplayNameWithEmail(t){var e="";return(t.first_name||t.last_name)&&(e+=$.trim((t.first_name||"")+" "+(t.last_name||""))),t.email&&(e&&(e+=" - "),e+=t.email),$.trim(e)}function getClientDisplayName(t){var e=!!t.contacts&&t.contacts[0];return t.name?t.name:e?getContactDisplayName(e):""}function formatAddress(t,e,n,i){var o="";return i?(o+=n?n+" ":"",o+=t?t:"",o+=t&&e?", ":t?" ":"",o+=e):(o+=t?t:"",o+=t&&e?", ":e?" ":"",o+=e+" "+n),o}function concatStrings(){for(var t="",e=[],n=0;n1?t+=", ":n64&&t<91?t-65:t>96&&t<123?t-71:t>47&&t<58?t+4:43===t?62:47===t?63:0}function base64DecToArr(t,e){for(var n,i,o=t.replace(/[^A-Za-z0-9\+\/]/g,""),a=o.length,s=e?Math.ceil((3*a+1>>2)/e)*e:3*a+1>>2,r=new Uint8Array(s),c=0,l=0,u=0;u>>(16>>>n&24)&255;c=0}return r}function uint6ToB64(t){return t<26?t+65:t<52?t+71:t<62?t-4:62===t?43:63===t?47:65}function base64EncArr(t){for(var e=2,n="",i=t.length,o=0,a=0;a0&&4*a/3%76===0&&(n+="\r\n"),o|=t[a]<<(16>>>e&24),2!==e&&t.length-a!==1||(n+=String.fromCharCode(uint6ToB64(o>>>18&63),uint6ToB64(o>>>12&63),uint6ToB64(o>>>6&63),uint6ToB64(63&o)),o=0);return n.substr(0,n.length-2+e)+(2===e?"":1===e?"=":"==")}function UTF8ArrToStr(t){for(var e,n="",i=t.length,o=0;o251&&e<254&&o+5247&&e<252&&o+4239&&e<248&&o+3223&&e<240&&o+2191&&e<224&&o+1>>6),e[s++]=128+(63&n)):n<65536?(e[s++]=224+(n>>>12),e[s++]=128+(n>>>6&63),e[s++]=128+(63&n)):n<2097152?(e[s++]=240+(n>>>18),e[s++]=128+(n>>>12&63),e[s++]=128+(n>>>6&63),e[s++]=128+(63&n)):n<67108864?(e[s++]=248+(n>>>24),e[s++]=128+(n>>>18&63),e[s++]=128+(n>>>12&63),e[s++]=128+(n>>>6&63),e[s++]=128+(63&n)):(e[s++]=252+n/1073741824,e[s++]=128+(n>>>24&63),e[s++]=128+(n>>>18&63),e[s++]=128+(n>>>12&63),e[s++]=128+(n>>>6&63),e[s++]=128+(63&n));return e}function hexToR(t){return parseInt(cutHex(t).substring(0,2),16)}function hexToG(t){return parseInt(cutHex(t).substring(2,4),16)}function hexToB(t){return parseInt(cutHex(t).substring(4,6),16)}function cutHex(t){return"#"==t.charAt(0)?t.substring(1,7):t}function setDocHexColor(t,e){var n=hexToR(e),i=hexToG(e),o=hexToB(e);return t.setTextColor(n,i,o)}function setDocHexFill(t,e){var n=hexToR(e),i=hexToG(e),o=hexToB(e);return t.setFillColor(n,i,o)}function setDocHexDraw(t,e){var n=hexToR(e),i=hexToG(e),o=hexToB(e);return t.setDrawColor(n,i,o)}function toggleDatePicker(t){$("#"+t).datepicker("show")}function getPrecision(t){return roundToPrecision(t,3)!=t?4:roundToPrecision(t,2)!=t?3:2}function roundSignificant(t,e){var n=getPrecision(t),i=roundToPrecision(t,n)||0;return e?i.toFixed(n):i}function roundToTwo(t,e){var n=roundToPrecision(t,2)||0;return e?n.toFixed(2):n}function roundToFour(t,e){var n=roundToPrecision(t,4)||0;return e?n.toFixed(4):n}function roundToPrecision(t,e){var n=t<0;return n&&(t*=-1),t=+(Math.round(t+"e+"+e)+"e-"+e),n&&(t*=-1),t}function truncate(t,e){return t&&t.length>e?t.substr(0,e-1)+"...":t}function endsWith(t,e){return t.indexOf(e,t.length-e.length)!==-1}function secondsToTime(t){t=Math.round(t);var e=Math.floor(t/3600),n=t%3600,i=Math.floor(n/60),o=n%60,a=Math.ceil(o),s={h:e,m:i,s:a};return s}function twoDigits(t){return t<10?"0"+t:t}function toSnakeCase(t){return t?t.replace(/([A-Z])/g,function(t){return"_"+t.toLowerCase()}):""}function snakeToCamel(t){return t.replace(/_([a-z])/g,function(t){return t[1].toUpperCase()})}function getDescendantProp(t,e){for(var n=e.split(".");n.length&&(t=t[n.shift()]););return t}function doubleDollarSign(t){return t?t.replace?t.replace(/\$/g,"$$$"):t:""}function truncate(t,e){return t.length>e?t.substring(0,e)+"...":t}function actionListHandler(){$("tbody tr .tr-action").closest("tr").mouseover(function(){$(this).closest("tr").find(".tr-action").show(),$(this).closest("tr").find(".tr-status").hide()}).mouseout(function(){$dropdown=$(this).closest("tr").find(".tr-action"),$dropdown.hasClass("open")||($dropdown.hide(),$(this).closest("tr").find(".tr-status").show())})}function loadImages(t){$(t+" img").each(function(t,e){var n=$(e).attr("data-src");$(e).attr("src",n),$(e).attr("data-src",n)})}function prettyJson(t){return"string"!=typeof t&&(t=JSON.stringify(t,void 0,2)),t=t.replace(/&/g,"&").replace(//g,">"),t.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g,function(t){var e="number";return/^"/.test(t)?e=/:$/.test(t)?"key":"string":/true|false/.test(t)?e="boolean":/null/.test(t)&&(e="null"),t=snakeToCamel(t),''+t+""})}function searchData(t,e,n){return function(i,o){var a;if(n){var s={keys:[e]},r=new Fuse(t,s);a=r.search(i)}else a=[],substrRegex=new RegExp(escapeRegExp(i),"i"),$.each(t,function(t,n){substrRegex.test(n[e])&&a.push(n)});o(a)}}function escapeRegExp(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}function firstJSONError(t){for(var e in t)if(t.hasOwnProperty(e)){var n=t[e];for(var i in n)if(n.hasOwnProperty(i))return n[i]}return!1}function pad(t,e,n){return n=n||"0",t+="",t.length>=e?t:new Array(e-t.length+1).join(n)+t}function brewerColor(t){var e=["#1c9f77","#d95d02","#716cb1","#e62a8b","#5fa213","#e6aa04","#a87821","#676767"],t=(t-1)%e.length;return e[t]}function formatXml(t){var e="",n=/(>)(<)(\/*)/g;t=t.replace(n,"$1\r\n$2$3");var i=0;return jQuery.each(t.split("\r\n"),function(t,n){var o=0;n.match(/.+<\/\w[^>]*>$/)?o=0:n.match(/^<\/\w/)?0!=i&&(i-=1):o=n.match(/^<\w[^>]*[^\/]>.*$/)?1:0;for(var a="",s=0;s0&&e-1 in t))}function i(t,e,n){if(ot.isFunction(e))return ot.grep(t,function(t,i){return!!e.call(t,i,t)!==n});if(e.nodeType)return ot.grep(t,function(t){return t===e!==n});if("string"==typeof e){if(ht.test(e))return ot.filter(e,t,n);e=ot.filter(e,t)}return ot.grep(t,function(t){return ot.inArray(t,e)>=0!==n})}function o(t,e){do t=t[e];while(t&&1!==t.nodeType);return t}function a(t){var e=yt[t]={};return ot.each(t.match(Mt)||[],function(t,n){e[n]=!0}),e}function s(){ft.addEventListener?(ft.removeEventListener("DOMContentLoaded",r,!1),t.removeEventListener("load",r,!1)):(ft.detachEvent("onreadystatechange",r),t.detachEvent("onload",r))}function r(){(ft.addEventListener||"load"===event.type||"complete"===ft.readyState)&&(s(),ot.ready())}function c(t,e,n){if(void 0===n&&1===t.nodeType){var i="data-"+e.replace(wt,"-$1").toLowerCase();if(n=t.getAttribute(i),"string"==typeof n){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:Tt.test(n)?ot.parseJSON(n):n)}catch(o){}ot.data(t,e,n)}else n=void 0}return n}function l(t){var e;for(e in t)if(("data"!==e||!ot.isEmptyObject(t[e]))&&"toJSON"!==e)return!1;return!0}function u(t,e,n,i){if(ot.acceptData(t)){var o,a,s=ot.expando,r=t.nodeType,c=r?ot.cache:t,l=r?t[s]:t[s]&&s;if(l&&c[l]&&(i||c[l].data)||void 0!==n||"string"!=typeof e)return l||(l=r?t[s]=V.pop()||ot.guid++:s),c[l]||(c[l]=r?{}:{toJSON:ot.noop}),"object"!=typeof e&&"function"!=typeof e||(i?c[l]=ot.extend(c[l],e):c[l].data=ot.extend(c[l].data,e)),a=c[l],i||(a.data||(a.data={}),a=a.data),void 0!==n&&(a[ot.camelCase(e)]=n),"string"==typeof e?(o=a[e],null==o&&(o=a[ot.camelCase(e)])):o=a,o}}function d(t,e,n){if(ot.acceptData(t)){var i,o,a=t.nodeType,s=a?ot.cache:t,r=a?t[ot.expando]:ot.expando;if(s[r]){if(e&&(i=n?s[r]:s[r].data)){ot.isArray(e)?e=e.concat(ot.map(e,ot.camelCase)):e in i?e=[e]:(e=ot.camelCase(e),e=e in i?[e]:e.split(" ")),o=e.length;for(;o--;)delete i[e[o]];if(n?!l(i):!ot.isEmptyObject(i))return}(n||(delete s[r].data,l(s[r])))&&(a?ot.cleanData([t],!0):nt.deleteExpando||s!=s.window?delete s[r]:s[r]=null)}}}function h(){return!0}function p(){return!1}function f(){try{return ft.activeElement}catch(t){}}function m(t){var e=Et.split("|"),n=t.createDocumentFragment();if(n.createElement)for(;e.length;)n.createElement(e.pop());return n}function g(t,e){var n,i,o=0,a=typeof t.getElementsByTagName!==zt?t.getElementsByTagName(e||"*"):typeof t.querySelectorAll!==zt?t.querySelectorAll(e||"*"):void 0;if(!a)for(a=[],n=t.childNodes||t;null!=(i=n[o]);o++)!e||ot.nodeName(i,e)?a.push(i):ot.merge(a,g(i,e));return void 0===e||e&&ot.nodeName(t,e)?ot.merge([t],a):a}function b(t){xt.test(t.type)&&(t.defaultChecked=t.checked)}function v(t,e){return ot.nodeName(t,"table")&&ot.nodeName(11!==e.nodeType?e:e.firstChild,"tr")?t.getElementsByTagName("tbody")[0]||t.appendChild(t.ownerDocument.createElement("tbody")):t}function M(t){return t.type=(null!==ot.find.attr(t,"type"))+"/"+t.type,t}function y(t){var e=Jt.exec(t.type);return e?t.type=e[1]:t.removeAttribute("type"),t}function A(t,e){for(var n,i=0;null!=(n=t[i]);i++)ot._data(n,"globalEval",!e||ot._data(e[i],"globalEval"))}function _(t,e){if(1===e.nodeType&&ot.hasData(t)){var n,i,o,a=ot._data(t),s=ot._data(e,a),r=a.events;if(r){delete s.handle,s.events={};for(n in r)for(i=0,o=r[n].length;i")).appendTo(e.documentElement),e=(Qt[0].contentWindow||Qt[0].contentDocument).document,e.write(),e.close(),n=T(t,e),Qt.detach()),Zt[t]=n),n}function C(t,e){return{get:function(){var n=t();if(null!=n)return n?void delete this.get:(this.get=e).apply(this,arguments)}}}function N(t,e){if(e in t)return e;for(var n=e.charAt(0).toUpperCase()+e.slice(1),i=e,o=he.length;o--;)if(e=he[o]+n,e in t)return e;return i}function O(t,e){for(var n,i,o,a=[],s=0,r=t.length;s=0&&n=0},isEmptyObject:function(t){var e;for(e in t)return!1;return!0},isPlainObject:function(t){var e;if(!t||"object"!==ot.type(t)||t.nodeType||ot.isWindow(t))return!1;try{if(t.constructor&&!et.call(t,"constructor")&&!et.call(t.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}if(nt.ownLast)for(e in t)return et.call(t,e);for(e in t);return void 0===e||et.call(t,e)},type:function(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?Z[tt.call(t)]||"object":typeof t},globalEval:function(e){e&&ot.trim(e)&&(t.execScript||function(e){t.eval.call(t,e)})(e)},camelCase:function(t){return t.replace(st,"ms-").replace(rt,ct)},nodeName:function(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()},each:function(t,e,i){var o,a=0,s=t.length,r=n(t);if(i){if(r)for(;a_.cacheLength&&delete t[e.shift()],t[n+" "]=i}var e=[];return t}function i(t){return t[P]=!0,t}function o(t){var e=D.createElement("div");try{return!!t(e)}catch(n){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function a(t,e){for(var n=t.split("|"),i=t.length;i--;)_.attrHandle[n[i]]=e}function s(t,e){var n=e&&t,i=n&&1===t.nodeType&&1===e.nodeType&&(~e.sourceIndex||J)-(~t.sourceIndex||J);if(i)return i;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function r(t){return function(e){var n=e.nodeName.toLowerCase();return"input"===n&&e.type===t}}function c(t){return function(e){var n=e.nodeName.toLowerCase();return("input"===n||"button"===n)&&e.type===t}}function l(t){return i(function(e){return e=+e,i(function(n,i){for(var o,a=t([],n.length,e),s=a.length;s--;)n[o=a[s]]&&(n[o]=!(i[o]=n[o]))})})}function u(t){return t&&"undefined"!=typeof t.getElementsByTagName&&t}function d(){}function h(t){for(var e=0,n=t.length,i="";e1?function(e,n,i){for(var o=t.length;o--;)if(!t[o](e,n,i))return!1;return!0}:t[0]}function m(t,n,i){for(var o=0,a=n.length;o-1&&(i[l]=!(s[l]=d))}}else M=g(M===s?M.splice(f,M.length):M),a?a(null,s,M,c):Q.apply(s,M)})}function v(t){for(var e,n,i,o=t.length,a=_.relative[t[0].type],s=a||_.relative[" "],r=a?1:0,c=p(function(t){return t===e},s,!0),l=p(function(t){return tt(e,t)>-1},s,!0),u=[function(t,n,i){var o=!a&&(i||n!==O)||((e=n).nodeType?c(t,n,i):l(t,n,i));return e=null,o}];r1&&f(u),r>1&&h(t.slice(0,r-1).concat({value:" "===t[r-2].type?"*":""})).replace(ct,"$1"),n,r0,a=t.length>0,s=function(i,s,r,c,l){var u,d,h,p=0,f="0",m=i&&[],b=[],v=O,M=i||a&&_.find.TAG("*",l),y=R+=null==v?1:Math.random()||.1,A=M.length;for(l&&(O=s!==D&&s);f!==A&&null!=(u=M[f]);f++){if(a&&u){for(d=0;h=t[d++];)if(h(u,s,r)){c.push(u);break}l&&(R=y)}o&&((u=!h&&u)&&p--,i&&m.push(u))}if(p+=f,o&&f!==p){for(d=0;h=n[d++];)h(m,b,s,r);if(i){if(p>0)for(;f--;)m[f]||b[f]||(b[f]=K.call(c));b=g(b)}Q.apply(c,b),l&&!i&&b.length>0&&p+n.length>1&&e.uniqueSort(c)}return l&&(R=y,O=v),m};return o?i(s):s}var y,A,_,z,T,w,C,N,O,S,x,L,D,k,q,W,E,B,I,P="sizzle"+1*new Date,X=t.document,R=0,F=0,H=n(),j=n(),U=n(),$=function(t,e){return t===e&&(x=!0),0},J=1<<31,V={}.hasOwnProperty,Y=[],K=Y.pop,G=Y.push,Q=Y.push,Z=Y.slice,tt=function(t,e){for(var n=0,i=t.length;n+~]|"+nt+")"+nt+"*"),dt=new RegExp("="+nt+"*([^\\]'\"]*?)"+nt+"*\\]","g"),ht=new RegExp(st),pt=new RegExp("^"+ot+"$"),ft={ID:new RegExp("^#("+it+")"),CLASS:new RegExp("^\\.("+it+")"),TAG:new RegExp("^("+it.replace("w","w*")+")"),ATTR:new RegExp("^"+at),PSEUDO:new RegExp("^"+st),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+nt+"*(even|odd|(([+-]|)(\\d*)n|)"+nt+"*(?:([+-]|)"+nt+"*(\\d+)|))"+nt+"*\\)|)","i"),bool:new RegExp("^(?:"+et+")$","i"),needsContext:new RegExp("^"+nt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+nt+"*((?:-\\d)?\\d*)"+nt+"*\\)|)(?=[^-]|$)","i")},mt=/^(?:input|select|textarea|button)$/i,gt=/^h\d$/i,bt=/^[^{]+\{\s*\[native \w/,vt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Mt=/[+~]/,yt=/'|\\/g,At=new RegExp("\\\\([\\da-f]{1,6}"+nt+"?|("+nt+")|.)","ig"),_t=function(t,e,n){var i="0x"+e-65536;return i!==i||n?e:i<0?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},zt=function(){L()};try{Q.apply(Y=Z.call(X.childNodes),X.childNodes),Y[X.childNodes.length].nodeType}catch(Tt){Q={apply:Y.length?function(t,e){G.apply(t,Z.call(e))}:function(t,e){for(var n=t.length,i=0;t[n++]=e[i++];);t.length=n-1}}}A=e.support={},T=e.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},L=e.setDocument=function(t){var e,n,i=t?t.ownerDocument||t:X;return i!==D&&9===i.nodeType&&i.documentElement?(D=i,k=i.documentElement,n=i.defaultView,n&&n!==n.top&&(n.addEventListener?n.addEventListener("unload",zt,!1):n.attachEvent&&n.attachEvent("onunload",zt)),q=!T(i),A.attributes=o(function(t){return t.className="i",!t.getAttribute("className")}),A.getElementsByTagName=o(function(t){return t.appendChild(i.createComment("")),!t.getElementsByTagName("*").length}),A.getElementsByClassName=bt.test(i.getElementsByClassName),A.getById=o(function(t){return k.appendChild(t).id=P,!i.getElementsByName||!i.getElementsByName(P).length}),A.getById?(_.find.ID=function(t,e){if("undefined"!=typeof e.getElementById&&q){var n=e.getElementById(t);return n&&n.parentNode?[n]:[]}},_.filter.ID=function(t){var e=t.replace(At,_t);return function(t){return t.getAttribute("id")===e}}):(delete _.find.ID,_.filter.ID=function(t){var e=t.replace(At,_t);return function(t){var n="undefined"!=typeof t.getAttributeNode&&t.getAttributeNode("id");return n&&n.value===e}}),_.find.TAG=A.getElementsByTagName?function(t,e){return"undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t):A.qsa?e.querySelectorAll(t):void 0}:function(t,e){var n,i=[],o=0,a=e.getElementsByTagName(t);if("*"===t){for(;n=a[o++];)1===n.nodeType&&i.push(n);return i}return a},_.find.CLASS=A.getElementsByClassName&&function(t,e){if(q)return e.getElementsByClassName(t)},E=[],W=[],(A.qsa=bt.test(i.querySelectorAll))&&(o(function(t){k.appendChild(t).innerHTML="
",t.querySelectorAll("[msallowcapture^='']").length&&W.push("[*^$]="+nt+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||W.push("\\["+nt+"*(?:value|"+et+")"),t.querySelectorAll("[id~="+P+"-]").length||W.push("~="),t.querySelectorAll(":checked").length||W.push(":checked"),t.querySelectorAll("a#"+P+"+*").length||W.push(".#.+[+~]")}),o(function(t){var e=i.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&W.push("name"+nt+"*[*^$|!~]?="),t.querySelectorAll(":enabled").length||W.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),W.push(",.*:")})),(A.matchesSelector=bt.test(B=k.matches||k.webkitMatchesSelector||k.mozMatchesSelector||k.oMatchesSelector||k.msMatchesSelector))&&o(function(t){A.disconnectedMatch=B.call(t,"div"),B.call(t,"[s!='']:x"),E.push("!=",st)}),W=W.length&&new RegExp(W.join("|")),E=E.length&&new RegExp(E.join("|")),e=bt.test(k.compareDocumentPosition),I=e||bt.test(k.contains)?function(t,e){var n=9===t.nodeType?t.documentElement:t,i=e&&e.parentNode;return t===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):t.compareDocumentPosition&&16&t.compareDocumentPosition(i)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},$=e?function(t,e){if(t===e)return x=!0,0;var n=!t.compareDocumentPosition-!e.compareDocumentPosition;return n?n:(n=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1,1&n||!A.sortDetached&&e.compareDocumentPosition(t)===n?t===i||t.ownerDocument===X&&I(X,t)?-1:e===i||e.ownerDocument===X&&I(X,e)?1:S?tt(S,t)-tt(S,e):0:4&n?-1:1)}:function(t,e){if(t===e)return x=!0,0;var n,o=0,a=t.parentNode,r=e.parentNode,c=[t],l=[e];if(!a||!r)return t===i?-1:e===i?1:a?-1:r?1:S?tt(S,t)-tt(S,e):0;if(a===r)return s(t,e);for(n=t;n=n.parentNode;)c.unshift(n);for(n=e;n=n.parentNode;)l.unshift(n);for(;c[o]===l[o];)o++;return o?s(c[o],l[o]):c[o]===X?-1:l[o]===X?1:0},i):D},e.matches=function(t,n){return e(t,null,null,n)},e.matchesSelector=function(t,n){if((t.ownerDocument||t)!==D&&L(t),n=n.replace(dt,"='$1']"),A.matchesSelector&&q&&(!E||!E.test(n))&&(!W||!W.test(n)))try{var i=B.call(t,n);if(i||A.disconnectedMatch||t.document&&11!==t.document.nodeType)return i}catch(o){}return e(n,D,null,[t]).length>0},e.contains=function(t,e){return(t.ownerDocument||t)!==D&&L(t),I(t,e)},e.attr=function(t,e){(t.ownerDocument||t)!==D&&L(t);var n=_.attrHandle[e.toLowerCase()],i=n&&V.call(_.attrHandle,e.toLowerCase())?n(t,e,!q):void 0;return void 0!==i?i:A.attributes||!q?t.getAttribute(e):(i=t.getAttributeNode(e))&&i.specified?i.value:null},e.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},e.uniqueSort=function(t){var e,n=[],i=0,o=0;if(x=!A.detectDuplicates,S=!A.sortStable&&t.slice(0),t.sort($),x){for(;e=t[o++];)e===t[o]&&(i=n.push(o));for(;i--;)t.splice(n[i],1)}return S=null,t},z=e.getText=function(t){var e,n="",i=0,o=t.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=z(t)}else if(3===o||4===o)return t.nodeValue}else for(;e=t[i++];)n+=z(e);return n},_=e.selectors={cacheLength:50,createPseudo:i,match:ft,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(At,_t),t[3]=(t[3]||t[4]||t[5]||"").replace(At,_t),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return ft.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":n&&ht.test(n)&&(e=w(n,!0))&&(e=n.indexOf(")",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(At,_t).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=H[t+" "];return e||(e=new RegExp("(^|"+nt+")"+t+"("+nt+"|$)"))&&H(t,function(t){return e.test("string"==typeof t.className&&t.className||"undefined"!=typeof t.getAttribute&&t.getAttribute("class")||"")})},ATTR:function(t,n,i){return function(o){var a=e.attr(o,t);return null==a?"!="===n:!n||(a+="","="===n?a===i:"!="===n?a!==i:"^="===n?i&&0===a.indexOf(i):"*="===n?i&&a.indexOf(i)>-1:"$="===n?i&&a.slice(-i.length)===i:"~="===n?(" "+a.replace(rt," ")+" ").indexOf(i)>-1:"|="===n&&(a===i||a.slice(0,i.length+1)===i+"-"))}},CHILD:function(t,e,n,i,o){var a="nth"!==t.slice(0,3),s="last"!==t.slice(-4),r="of-type"===e;return 1===i&&0===o?function(t){return!!t.parentNode}:function(e,n,c){var l,u,d,h,p,f,m=a!==s?"nextSibling":"previousSibling",g=e.parentNode,b=r&&e.nodeName.toLowerCase(),v=!c&&!r;if(g){if(a){for(;m;){for(d=e;d=d[m];)if(r?d.nodeName.toLowerCase()===b:1===d.nodeType)return!1;f=m="only"===t&&!f&&"nextSibling"}return!0}if(f=[s?g.firstChild:g.lastChild],s&&v){for(u=g[P]||(g[P]={}),l=u[t]||[],p=l[0]===R&&l[1],h=l[0]===R&&l[2],d=p&&g.childNodes[p];d=++p&&d&&d[m]||(h=p=0)||f.pop();)if(1===d.nodeType&&++h&&d===e){u[t]=[R,p,h];break}}else if(v&&(l=(e[P]||(e[P]={}))[t])&&l[0]===R)h=l[1];else for(;(d=++p&&d&&d[m]||(h=p=0)||f.pop())&&((r?d.nodeName.toLowerCase()!==b:1!==d.nodeType)||!++h||(v&&((d[P]||(d[P]={}))[t]=[R,h]),d!==e)););return h-=o,h===i||h%i===0&&h/i>=0}}},PSEUDO:function(t,n){var o,a=_.pseudos[t]||_.setFilters[t.toLowerCase()]||e.error("unsupported pseudo: "+t);return a[P]?a(n):a.length>1?(o=[t,t,"",n],_.setFilters.hasOwnProperty(t.toLowerCase())?i(function(t,e){for(var i,o=a(t,n),s=o.length;s--;)i=tt(t,o[s]),t[i]=!(e[i]=o[s])}):function(t){return a(t,0,o)}):a}},pseudos:{not:i(function(t){var e=[],n=[],o=C(t.replace(ct,"$1"));return o[P]?i(function(t,e,n,i){for(var a,s=o(t,null,i,[]),r=t.length;r--;)(a=s[r])&&(t[r]=!(e[r]=a))}):function(t,i,a){return e[0]=t,o(e,null,a,n),e[0]=null,!n.pop()}}),has:i(function(t){return function(n){return e(t,n).length>0}}),contains:i(function(t){return t=t.replace(At,_t),function(e){return(e.textContent||e.innerText||z(e)).indexOf(t)>-1}}),lang:i(function(t){return pt.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(At,_t).toLowerCase(),function(e){var n;do if(n=q?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return n=n.toLowerCase(),n===t||0===n.indexOf(t+"-");while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===k},focus:function(t){return t===D.activeElement&&(!D.hasFocus||D.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:function(t){return t.disabled===!1},disabled:function(t){return t.disabled===!0},checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,t.selected===!0},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!_.pseudos.empty(t)},header:function(t){return gt.test(t.nodeName)},input:function(t){return mt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:l(function(){return[0]}),last:l(function(t,e){return[e-1]}),eq:l(function(t,e,n){return[n<0?n+e:n]}),even:l(function(t,e){for(var n=0;n=0;)t.push(i);return t}),gt:l(function(t,e,n){for(var i=n<0?n+e:n;++i2&&"ID"===(s=a[0]).type&&A.getById&&9===e.nodeType&&q&&_.relative[a[1].type]){if(e=(_.find.ID(s.matches[0].replace(At,_t),e)||[])[0],!e)return n;l&&(e=e.parentNode),t=t.slice(a.shift().value.length)}for(o=ft.needsContext.test(t)?0:a.length;o--&&(s=a[o],!_.relative[r=s.type]);)if((c=_.find[r])&&(i=c(s.matches[0].replace(At,_t),Mt.test(a[0].type)&&u(e.parentNode)||e))){if(a.splice(o,1),t=i.length&&h(a),!t)return Q.apply(n,i),n;break}}return(l||C(t,d))(i,e,!q,n,Mt.test(t)&&u(e.parentNode)||e),n},A.sortStable=P.split("").sort($).join("")===P,A.detectDuplicates=!!x,L(),A.sortDetached=o(function(t){return 1&t.compareDocumentPosition(D.createElement("div"))}),o(function(t){return t.innerHTML="","#"===t.firstChild.getAttribute("href")})||a("type|href|height|width",function(t,e,n){if(!n)return t.getAttribute(e,"type"===e.toLowerCase()?1:2)}),A.attributes&&o(function(t){return t.innerHTML="",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")})||a("value",function(t,e,n){if(!n&&"input"===t.nodeName.toLowerCase())return t.defaultValue}),o(function(t){return null==t.getAttribute("disabled")})||a(et,function(t,e,n){var i;if(!n)return t[e]===!0?e.toLowerCase():(i=t.getAttributeNode(e))&&i.specified?i.value:null}),e}(t);ot.find=lt,ot.expr=lt.selectors,ot.expr[":"]=ot.expr.pseudos,ot.unique=lt.uniqueSort,ot.text=lt.getText,ot.isXMLDoc=lt.isXML,ot.contains=lt.contains;var ut=ot.expr.match.needsContext,dt=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,ht=/^.[^:#\[\.,]*$/;ot.filter=function(t,e,n){var i=e[0];return n&&(t=":not("+t+")"),1===e.length&&1===i.nodeType?ot.find.matchesSelector(i,t)?[i]:[]:ot.find.matches(t,ot.grep(e,function(t){return 1===t.nodeType}))},ot.fn.extend({find:function(t){var e,n=[],i=this,o=i.length;if("string"!=typeof t)return this.pushStack(ot(t).filter(function(){for(e=0;e1?ot.unique(n):n),n.selector=this.selector?this.selector+" "+t:t,n},filter:function(t){return this.pushStack(i(this,t||[],!1))},not:function(t){return this.pushStack(i(this,t||[],!0))},is:function(t){return!!i(this,"string"==typeof t&&ut.test(t)?ot(t):t||[],!1).length}});var pt,ft=t.document,mt=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,gt=ot.fn.init=function(t,e){var n,i;if(!t)return this;if("string"==typeof t){if(n="<"===t.charAt(0)&&">"===t.charAt(t.length-1)&&t.length>=3?[null,t,null]:mt.exec(t),!n||!n[1]&&e)return!e||e.jquery?(e||pt).find(t):this.constructor(e).find(t);if(n[1]){if(e=e instanceof ot?e[0]:e,ot.merge(this,ot.parseHTML(n[1],e&&e.nodeType?e.ownerDocument||e:ft,!0)),dt.test(n[1])&&ot.isPlainObject(e))for(n in e)ot.isFunction(this[n])?this[n](e[n]):this.attr(n,e[n]);return this}if(i=ft.getElementById(n[2]),i&&i.parentNode){if(i.id!==n[2])return pt.find(t);this.length=1,this[0]=i}return this.context=ft,this.selector=t,this}return t.nodeType?(this.context=this[0]=t,this.length=1,this):ot.isFunction(t)?"undefined"!=typeof pt.ready?pt.ready(t):t(ot):(void 0!==t.selector&&(this.selector=t.selector,this.context=t.context),ot.makeArray(t,this))};gt.prototype=ot.fn,pt=ot(ft);var bt=/^(?:parents|prev(?:Until|All))/,vt={children:!0,contents:!0,next:!0,prev:!0};ot.extend({dir:function(t,e,n){for(var i=[],o=t[e];o&&9!==o.nodeType&&(void 0===n||1!==o.nodeType||!ot(o).is(n));)1===o.nodeType&&i.push(o),o=o[e];return i},sibling:function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n}}),ot.fn.extend({has:function(t){var e,n=ot(t,this),i=n.length;return this.filter(function(){for(e=0;e-1:1===n.nodeType&&ot.find.matchesSelector(n,t))){a.push(n);break}return this.pushStack(a.length>1?ot.unique(a):a)},index:function(t){return t?"string"==typeof t?ot.inArray(this[0],ot(t)):ot.inArray(t.jquery?t[0]:t,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(ot.unique(ot.merge(this.get(),ot(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),ot.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return ot.dir(t,"parentNode")},parentsUntil:function(t,e,n){return ot.dir(t,"parentNode",n)},next:function(t){return o(t,"nextSibling")},prev:function(t){return o(t,"previousSibling")},nextAll:function(t){return ot.dir(t,"nextSibling")},prevAll:function(t){return ot.dir(t,"previousSibling")},nextUntil:function(t,e,n){return ot.dir(t,"nextSibling",n)},prevUntil:function(t,e,n){return ot.dir(t,"previousSibling",n)},siblings:function(t){return ot.sibling((t.parentNode||{}).firstChild,t)},children:function(t){return ot.sibling(t.firstChild)},contents:function(t){return ot.nodeName(t,"iframe")?t.contentDocument||t.contentWindow.document:ot.merge([],t.childNodes)}},function(t,e){ot.fn[t]=function(n,i){var o=ot.map(this,e,n);return"Until"!==t.slice(-5)&&(i=n),i&&"string"==typeof i&&(o=ot.filter(i,o)),this.length>1&&(vt[t]||(o=ot.unique(o)),bt.test(t)&&(o=o.reverse())),this.pushStack(o)}});var Mt=/\S+/g,yt={};ot.Callbacks=function(t){t="string"==typeof t?yt[t]||a(t):ot.extend({},t);var e,n,i,o,s,r,c=[],l=!t.once&&[],u=function(a){for(n=t.memory&&a,i=!0,s=r||0,r=0,o=c.length,e=!0;c&&s-1;)c.splice(i,1),e&&(i<=o&&o--,i<=s&&s--)}),this},has:function(t){return t?ot.inArray(t,c)>-1:!(!c||!c.length)},empty:function(){return c=[],o=0,this},disable:function(){return c=l=n=void 0,this},disabled:function(){return!c},lock:function(){return l=void 0,n||d.disable(),this},locked:function(){return!l},fireWith:function(t,n){return!c||i&&!l||(n=n||[],n=[t,n.slice?n.slice():n],e?l.push(n):u(n)),this},fire:function(){return d.fireWith(this,arguments),this},fired:function(){return!!i}};return d},ot.extend({Deferred:function(t){var e=[["resolve","done",ot.Callbacks("once memory"),"resolved"],["reject","fail",ot.Callbacks("once memory"),"rejected"],["notify","progress",ot.Callbacks("memory")]],n="pending",i={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},then:function(){var t=arguments;return ot.Deferred(function(n){ot.each(e,function(e,a){var s=ot.isFunction(t[e])&&t[e];o[a[1]](function(){var t=s&&s.apply(this,arguments);t&&ot.isFunction(t.promise)?t.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a[0]+"With"](this===i?n.promise():this,s?[t]:arguments)})}),t=null}).promise()},promise:function(t){return null!=t?ot.extend(t,i):i}},o={};return i.pipe=i.then,ot.each(e,function(t,a){var s=a[2],r=a[3];i[a[1]]=s.add,r&&s.add(function(){n=r},e[1^t][2].disable,e[2][2].lock),o[a[0]]=function(){return o[a[0]+"With"](this===o?i:this,arguments),this},o[a[0]+"With"]=s.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(t){var e,n,i,o=0,a=Y.call(arguments),s=a.length,r=1!==s||t&&ot.isFunction(t.promise)?s:0,c=1===r?t:ot.Deferred(),l=function(t,n,i){return function(o){n[t]=this,i[t]=arguments.length>1?Y.call(arguments):o,i===e?c.notifyWith(n,i):--r||c.resolveWith(n,i)}};if(s>1)for(e=new Array(s),n=new Array(s),i=new Array(s);o0||(At.resolveWith(ft,[ot]),ot.fn.triggerHandler&&(ot(ft).triggerHandler("ready"),ot(ft).off("ready")))}}}),ot.ready.promise=function(e){if(!At)if(At=ot.Deferred(),"complete"===ft.readyState)setTimeout(ot.ready);else if(ft.addEventListener)ft.addEventListener("DOMContentLoaded",r,!1),t.addEventListener("load",r,!1);else{ft.attachEvent("onreadystatechange",r),t.attachEvent("onload",r);var n=!1;try{n=null==t.frameElement&&ft.documentElement}catch(i){}n&&n.doScroll&&!function o(){if(!ot.isReady){try{n.doScroll("left")}catch(t){return setTimeout(o,50)}s(),ot.ready()}}()}return At.promise(e)};var _t,zt="undefined";for(_t in ot(nt))break;nt.ownLast="0"!==_t,nt.inlineBlockNeedsLayout=!1,ot(function(){var t,e,n,i;n=ft.getElementsByTagName("body")[0],n&&n.style&&(e=ft.createElement("div"),i=ft.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(i).appendChild(e),typeof e.style.zoom!==zt&&(e.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",nt.inlineBlockNeedsLayout=t=3===e.offsetWidth,t&&(n.style.zoom=1)),n.removeChild(i))}),function(){var t=ft.createElement("div");if(null==nt.deleteExpando){nt.deleteExpando=!0;try{delete t.test}catch(e){nt.deleteExpando=!1}}t=null}(),ot.acceptData=function(t){var e=ot.noData[(t.nodeName+" ").toLowerCase()],n=+t.nodeType||1;return(1===n||9===n)&&(!e||e!==!0&&t.getAttribute("classid")===e)};var Tt=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,wt=/([A-Z])/g;ot.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(t){return t=t.nodeType?ot.cache[t[ot.expando]]:t[ot.expando],!!t&&!l(t)},data:function(t,e,n){return u(t,e,n)},removeData:function(t,e){return d(t,e)},_data:function(t,e,n){return u(t,e,n,!0)},_removeData:function(t,e){return d(t,e,!0)}}),ot.fn.extend({data:function(t,e){var n,i,o,a=this[0],s=a&&a.attributes;if(void 0===t){if(this.length&&(o=ot.data(a),1===a.nodeType&&!ot._data(a,"parsedAttrs"))){for(n=s.length;n--;)s[n]&&(i=s[n].name,0===i.indexOf("data-")&&(i=ot.camelCase(i.slice(5)),c(a,i,o[i])));ot._data(a,"parsedAttrs",!0)}return o}return"object"==typeof t?this.each(function(){ot.data(this,t)}):arguments.length>1?this.each(function(){ot.data(this,t,e)}):a?c(a,t,ot.data(a,t)):void 0},removeData:function(t){return this.each(function(){ot.removeData(this,t)})}}),ot.extend({queue:function(t,e,n){var i;if(t)return e=(e||"fx")+"queue",i=ot._data(t,e),n&&(!i||ot.isArray(n)?i=ot._data(t,e,ot.makeArray(n)):i.push(n)),i||[]},dequeue:function(t,e){e=e||"fx";var n=ot.queue(t,e),i=n.length,o=n.shift(),a=ot._queueHooks(t,e),s=function(){ot.dequeue(t,e)};"inprogress"===o&&(o=n.shift(),i--),o&&("fx"===e&&n.unshift("inprogress"),delete a.stop,o.call(t,s,a)),!i&&a&&a.empty.fire()},_queueHooks:function(t,e){var n=e+"queueHooks";return ot._data(t,n)||ot._data(t,n,{empty:ot.Callbacks("once memory").add(function(){ot._removeData(t,e+"queue"),ot._removeData(t,n)})})}}),ot.fn.extend({queue:function(t,e){var n=2;return"string"!=typeof t&&(e=t,t="fx",n--),arguments.length
a",nt.leadingWhitespace=3===e.firstChild.nodeType,nt.tbody=!e.getElementsByTagName("tbody").length,nt.htmlSerialize=!!e.getElementsByTagName("link").length,nt.html5Clone="<:nav>"!==ft.createElement("nav").cloneNode(!0).outerHTML,t.type="checkbox",t.checked=!0,n.appendChild(t),nt.appendChecked=t.checked,e.innerHTML="",nt.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue,n.appendChild(e),e.innerHTML="",nt.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,nt.noCloneEvent=!0,e.attachEvent&&(e.attachEvent("onclick",function(){nt.noCloneEvent=!1}),e.cloneNode(!0).click()),null==nt.deleteExpando){nt.deleteExpando=!0;try{delete e.test}catch(i){nt.deleteExpando=!1}}}(),function(){var e,n,i=ft.createElement("div");for(e in{submit:!0,change:!0,focusin:!0})n="on"+e,(nt[e+"Bubbles"]=n in t)||(i.setAttribute(n,"t"),nt[e+"Bubbles"]=i.attributes[n].expando===!1);i=null}();var Lt=/^(?:input|select|textarea)$/i,Dt=/^key/,kt=/^(?:mouse|pointer|contextmenu)|click/,qt=/^(?:focusinfocus|focusoutblur)$/,Wt=/^([^.]*)(?:\.(.+)|)$/;ot.event={global:{},add:function(t,e,n,i,o){var a,s,r,c,l,u,d,h,p,f,m,g=ot._data(t);if(g){for(n.handler&&(c=n,n=c.handler,o=c.selector),n.guid||(n.guid=ot.guid++),(s=g.events)||(s=g.events={}),(u=g.handle)||(u=g.handle=function(t){return typeof ot===zt||t&&ot.event.triggered===t.type?void 0:ot.event.dispatch.apply(u.elem,arguments)},u.elem=t),e=(e||"").match(Mt)||[""],r=e.length;r--;)a=Wt.exec(e[r])||[],p=m=a[1],f=(a[2]||"").split(".").sort(),p&&(l=ot.event.special[p]||{},p=(o?l.delegateType:l.bindType)||p,l=ot.event.special[p]||{},d=ot.extend({type:p,origType:m,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&ot.expr.match.needsContext.test(o),namespace:f.join(".")},c),(h=s[p])||(h=s[p]=[],h.delegateCount=0,l.setup&&l.setup.call(t,i,f,u)!==!1||(t.addEventListener?t.addEventListener(p,u,!1):t.attachEvent&&t.attachEvent("on"+p,u))),l.add&&(l.add.call(t,d),d.handler.guid||(d.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,d):h.push(d),ot.event.global[p]=!0);t=null}},remove:function(t,e,n,i,o){var a,s,r,c,l,u,d,h,p,f,m,g=ot.hasData(t)&&ot._data(t);if(g&&(u=g.events)){for(e=(e||"").match(Mt)||[""],l=e.length;l--;)if(r=Wt.exec(e[l])||[],p=m=r[1],f=(r[2]||"").split(".").sort(),p){for(d=ot.event.special[p]||{},p=(i?d.delegateType:d.bindType)||p,h=u[p]||[],r=r[2]&&new RegExp("(^|\\.)"+f.join("\\.(?:.*\\.|)")+"(\\.|$)"),c=a=h.length;a--;)s=h[a],!o&&m!==s.origType||n&&n.guid!==s.guid||r&&!r.test(s.namespace)||i&&i!==s.selector&&("**"!==i||!s.selector)||(h.splice(a,1),s.selector&&h.delegateCount--,d.remove&&d.remove.call(t,s));c&&!h.length&&(d.teardown&&d.teardown.call(t,f,g.handle)!==!1||ot.removeEvent(t,p,g.handle),delete u[p])}else for(p in u)ot.event.remove(t,p+e[l],n,i,!0);ot.isEmptyObject(u)&&(delete g.handle,ot._removeData(t,"events")); +}},trigger:function(e,n,i,o){var a,s,r,c,l,u,d,h=[i||ft],p=et.call(e,"type")?e.type:e,f=et.call(e,"namespace")?e.namespace.split("."):[];if(r=u=i=i||ft,3!==i.nodeType&&8!==i.nodeType&&!qt.test(p+ot.event.triggered)&&(p.indexOf(".")>=0&&(f=p.split("."),p=f.shift(),f.sort()),s=p.indexOf(":")<0&&"on"+p,e=e[ot.expando]?e:new ot.Event(p,"object"==typeof e&&e),e.isTrigger=o?2:3,e.namespace=f.join("."),e.namespace_re=e.namespace?new RegExp("(^|\\.)"+f.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=i),n=null==n?[e]:ot.makeArray(n,[e]),l=ot.event.special[p]||{},o||!l.trigger||l.trigger.apply(i,n)!==!1)){if(!o&&!l.noBubble&&!ot.isWindow(i)){for(c=l.delegateType||p,qt.test(c+p)||(r=r.parentNode);r;r=r.parentNode)h.push(r),u=r;u===(i.ownerDocument||ft)&&h.push(u.defaultView||u.parentWindow||t)}for(d=0;(r=h[d++])&&!e.isPropagationStopped();)e.type=d>1?c:l.bindType||p,a=(ot._data(r,"events")||{})[e.type]&&ot._data(r,"handle"),a&&a.apply(r,n),a=s&&r[s],a&&a.apply&&ot.acceptData(r)&&(e.result=a.apply(r,n),e.result===!1&&e.preventDefault());if(e.type=p,!o&&!e.isDefaultPrevented()&&(!l._default||l._default.apply(h.pop(),n)===!1)&&ot.acceptData(i)&&s&&i[p]&&!ot.isWindow(i)){u=i[s],u&&(i[s]=null),ot.event.triggered=p;try{i[p]()}catch(m){}ot.event.triggered=void 0,u&&(i[s]=u)}return e.result}},dispatch:function(t){t=ot.event.fix(t);var e,n,i,o,a,s=[],r=Y.call(arguments),c=(ot._data(this,"events")||{})[t.type]||[],l=ot.event.special[t.type]||{};if(r[0]=t,t.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,t)!==!1){for(s=ot.event.handlers.call(this,t,c),e=0;(o=s[e++])&&!t.isPropagationStopped();)for(t.currentTarget=o.elem,a=0;(i=o.handlers[a++])&&!t.isImmediatePropagationStopped();)t.namespace_re&&!t.namespace_re.test(i.namespace)||(t.handleObj=i,t.data=i.data,n=((ot.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,r),void 0!==n&&(t.result=n)===!1&&(t.preventDefault(),t.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,t),t.result}},handlers:function(t,e){var n,i,o,a,s=[],r=e.delegateCount,c=t.target;if(r&&c.nodeType&&(!t.button||"click"!==t.type))for(;c!=this;c=c.parentNode||this)if(1===c.nodeType&&(c.disabled!==!0||"click"!==t.type)){for(o=[],a=0;a=0:ot.find(n,this,null,[c]).length),o[n]&&o.push(i);o.length&&s.push({elem:c,handlers:o})}return r]","i"),Pt=/^\s+/,Xt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Rt=/<([\w:]+)/,Ft=/\s*$/g,Yt={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:nt.htmlSerialize?[0,"",""]:[1,"X
","
"]},Kt=m(ft),Gt=Kt.appendChild(ft.createElement("div"));Yt.optgroup=Yt.option,Yt.tbody=Yt.tfoot=Yt.colgroup=Yt.caption=Yt.thead,Yt.th=Yt.td,ot.extend({clone:function(t,e,n){var i,o,a,s,r,c=ot.contains(t.ownerDocument,t);if(nt.html5Clone||ot.isXMLDoc(t)||!It.test("<"+t.nodeName+">")?a=t.cloneNode(!0):(Gt.innerHTML=t.outerHTML,Gt.removeChild(a=Gt.firstChild)),!(nt.noCloneEvent&&nt.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||ot.isXMLDoc(t)))for(i=g(a),r=g(t),s=0;null!=(o=r[s]);++s)i[s]&&z(o,i[s]);if(e)if(n)for(r=r||g(t),i=i||g(a),s=0;null!=(o=r[s]);s++)_(o,i[s]);else _(t,a);return i=g(a,"script"),i.length>0&&A(i,!c&&g(t,"script")),i=r=o=null,a},buildFragment:function(t,e,n,i){for(var o,a,s,r,c,l,u,d=t.length,h=m(e),p=[],f=0;f")+u[2],o=u[0];o--;)r=r.lastChild;if(!nt.leadingWhitespace&&Pt.test(a)&&p.push(e.createTextNode(Pt.exec(a)[0])),!nt.tbody)for(a="table"!==c||Ft.test(a)?""!==u[1]||Ft.test(a)?0:r:r.firstChild,o=a&&a.childNodes.length;o--;)ot.nodeName(l=a.childNodes[o],"tbody")&&!l.childNodes.length&&a.removeChild(l);for(ot.merge(p,r.childNodes),r.textContent="";r.firstChild;)r.removeChild(r.firstChild);r=h.lastChild}else p.push(e.createTextNode(a));for(r&&h.removeChild(r),nt.appendChecked||ot.grep(g(p,"input"),b),f=0;a=p[f++];)if((!i||ot.inArray(a,i)===-1)&&(s=ot.contains(a.ownerDocument,a),r=g(h.appendChild(a),"script"),s&&A(r),n))for(o=0;a=r[o++];)$t.test(a.type||"")&&n.push(a);return r=null,h},cleanData:function(t,e){for(var n,i,o,a,s=0,r=ot.expando,c=ot.cache,l=nt.deleteExpando,u=ot.event.special;null!=(n=t[s]);s++)if((e||ot.acceptData(n))&&(o=n[r],a=o&&c[o])){if(a.events)for(i in a.events)u[i]?ot.event.remove(n,i):ot.removeEvent(n,i,a.handle);c[o]&&(delete c[o],l?delete n[r]:typeof n.removeAttribute!==zt?n.removeAttribute(r):n[r]=null,V.push(o))}}}),ot.fn.extend({text:function(t){return St(this,function(t){return void 0===t?ot.text(this):this.empty().append((this[0]&&this[0].ownerDocument||ft).createTextNode(t))},null,t,arguments.length)},append:function(){return this.domManip(arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=v(this,t);e.appendChild(t)}})},prepend:function(){return this.domManip(arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=v(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return this.domManip(arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return this.domManip(arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},remove:function(t,e){for(var n,i=t?ot.filter(t,this):this,o=0;null!=(n=i[o]);o++)e||1!==n.nodeType||ot.cleanData(g(n)),n.parentNode&&(e&&ot.contains(n.ownerDocument,n)&&A(g(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){for(var t,e=0;null!=(t=this[e]);e++){for(1===t.nodeType&&ot.cleanData(g(t,!1));t.firstChild;)t.removeChild(t.firstChild);t.options&&ot.nodeName(t,"select")&&(t.options.length=0)}return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return ot.clone(this,t,e)})},html:function(t){return St(this,function(t){var e=this[0]||{},n=0,i=this.length;if(void 0===t)return 1===e.nodeType?e.innerHTML.replace(Bt,""):void 0;if("string"==typeof t&&!jt.test(t)&&(nt.htmlSerialize||!It.test(t))&&(nt.leadingWhitespace||!Pt.test(t))&&!Yt[(Rt.exec(t)||["",""])[1].toLowerCase()]){t=t.replace(Xt,"<$1>");try{for(;n1&&"string"==typeof h&&!nt.checkClone&&Ut.test(h))return this.each(function(n){var i=u.eq(n);p&&(t[0]=h.call(this,n,i.html())),i.domManip(t,e)});if(l&&(r=ot.buildFragment(t,this[0].ownerDocument,!1,this),n=r.firstChild,1===r.childNodes.length&&(r=n),n)){for(a=ot.map(g(r,"script"),M),o=a.length;c
t
",o=e.getElementsByTagName("td"),o[0].style.cssText="margin:0;border:0;padding:0;display:none",r=0===o[0].offsetHeight,r&&(o[0].style.display="",o[1].style.display="none",r=0===o[0].offsetHeight),n.removeChild(i))}var n,i,o,a,s,r,c;n=ft.createElement("div"),n.innerHTML="
a",o=n.getElementsByTagName("a")[0],i=o&&o.style,i&&(i.cssText="float:left;opacity:.5",nt.opacity="0.5"===i.opacity,nt.cssFloat=!!i.cssFloat,n.style.backgroundClip="content-box",n.cloneNode(!0).style.backgroundClip="",nt.clearCloneStyle="content-box"===n.style.backgroundClip,nt.boxSizing=""===i.boxSizing||""===i.MozBoxSizing||""===i.WebkitBoxSizing,ot.extend(nt,{reliableHiddenOffsets:function(){return null==r&&e(),r},boxSizingReliable:function(){return null==s&&e(),s},pixelPosition:function(){return null==a&&e(),a},reliableMarginRight:function(){return null==c&&e(),c}}))}(),ot.swap=function(t,e,n,i){var o,a,s={};for(a in e)s[a]=t.style[a],t.style[a]=e[a];o=n.apply(t,i||[]);for(a in e)t.style[a]=s[a];return o};var ae=/alpha\([^)]*\)/i,se=/opacity\s*=\s*([^)]*)/,re=/^(none|table(?!-c[ea]).+)/,ce=new RegExp("^("+Ct+")(.*)$","i"),le=new RegExp("^([+-])=("+Ct+")","i"),ue={position:"absolute",visibility:"hidden",display:"block"},de={letterSpacing:"0",fontWeight:"400"},he=["Webkit","O","Moz","ms"];ot.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=ee(t,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":nt.cssFloat?"cssFloat":"styleFloat"},style:function(t,e,n,i){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var o,a,s,r=ot.camelCase(e),c=t.style;if(e=ot.cssProps[r]||(ot.cssProps[r]=N(c,r)),s=ot.cssHooks[e]||ot.cssHooks[r],void 0===n)return s&&"get"in s&&void 0!==(o=s.get(t,!1,i))?o:c[e];if(a=typeof n,"string"===a&&(o=le.exec(n))&&(n=(o[1]+1)*o[2]+parseFloat(ot.css(t,e)),a="number"),null!=n&&n===n&&("number"!==a||ot.cssNumber[r]||(n+="px"),nt.clearCloneStyle||""!==n||0!==e.indexOf("background")||(c[e]="inherit"),!(s&&"set"in s&&void 0===(n=s.set(t,n,i)))))try{c[e]=n}catch(l){}}},css:function(t,e,n,i){var o,a,s,r=ot.camelCase(e);return e=ot.cssProps[r]||(ot.cssProps[r]=N(t.style,r)),s=ot.cssHooks[e]||ot.cssHooks[r],s&&"get"in s&&(a=s.get(t,!0,n)),void 0===a&&(a=ee(t,e,i)),"normal"===a&&e in de&&(a=de[e]),""===n||n?(o=parseFloat(a),n===!0||ot.isNumeric(o)?o||0:a):a}}),ot.each(["height","width"],function(t,e){ot.cssHooks[e]={get:function(t,n,i){if(n)return re.test(ot.css(t,"display"))&&0===t.offsetWidth?ot.swap(t,ue,function(){return L(t,e,i)}):L(t,e,i)},set:function(t,n,i){var o=i&&te(t);return S(t,n,i?x(t,e,i,nt.boxSizing&&"border-box"===ot.css(t,"boxSizing",!1,o),o):0)}}}),nt.opacity||(ot.cssHooks.opacity={get:function(t,e){return se.test((e&&t.currentStyle?t.currentStyle.filter:t.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":e?"1":""},set:function(t,e){var n=t.style,i=t.currentStyle,o=ot.isNumeric(e)?"alpha(opacity="+100*e+")":"",a=i&&i.filter||n.filter||"";n.zoom=1,(e>=1||""===e)&&""===ot.trim(a.replace(ae,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===e||i&&!i.filter)||(n.filter=ae.test(a)?a.replace(ae,o):a+" "+o)}}),ot.cssHooks.marginRight=C(nt.reliableMarginRight,function(t,e){if(e)return ot.swap(t,{display:"inline-block"},ee,[t,"marginRight"])}),ot.each({margin:"",padding:"",border:"Width"},function(t,e){ot.cssHooks[t+e]={expand:function(n){for(var i=0,o={},a="string"==typeof n?n.split(" "):[n];i<4;i++)o[t+Nt[i]+e]=a[i]||a[i-2]||a[0];return o}},ne.test(t)||(ot.cssHooks[t+e].set=S)}),ot.fn.extend({css:function(t,e){return St(this,function(t,e,n){var i,o,a={},s=0;if(ot.isArray(e)){for(i=te(t),o=e.length;s1)},show:function(){return O(this,!0)},hide:function(){return O(this)},toggle:function(t){return"boolean"==typeof t?t?this.show():this.hide():this.each(function(){Ot(this)?ot(this).show():ot(this).hide()})}}),ot.Tween=D,D.prototype={constructor:D,init:function(t,e,n,i,o,a){this.elem=t,this.prop=n,this.easing=o||"swing",this.options=e,this.start=this.now=this.cur(),this.end=i,this.unit=a||(ot.cssNumber[n]?"":"px")},cur:function(){var t=D.propHooks[this.prop];return t&&t.get?t.get(this):D.propHooks._default.get(this)},run:function(t){var e,n=D.propHooks[this.prop];return this.options.duration?this.pos=e=ot.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):D.propHooks._default.set(this),this}},D.prototype.init.prototype=D.prototype,D.propHooks={_default:{get:function(t){var e;return null==t.elem[t.prop]||t.elem.style&&null!=t.elem.style[t.prop]?(e=ot.css(t.elem,t.prop,""),e&&"auto"!==e?e:0):t.elem[t.prop]},set:function(t){ot.fx.step[t.prop]?ot.fx.step[t.prop](t):t.elem.style&&(null!=t.elem.style[ot.cssProps[t.prop]]||ot.cssHooks[t.prop])?ot.style(t.elem,t.prop,t.now+t.unit):t.elem[t.prop]=t.now}}},D.propHooks.scrollTop=D.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},ot.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2}},ot.fx=D.prototype.init,ot.fx.step={};var pe,fe,me=/^(?:toggle|show|hide)$/,ge=new RegExp("^(?:([+-])=|)("+Ct+")([a-z%]*)$","i"),be=/queueHooks$/,ve=[E],Me={"*":[function(t,e){var n=this.createTween(t,e),i=n.cur(),o=ge.exec(e),a=o&&o[3]||(ot.cssNumber[t]?"":"px"),s=(ot.cssNumber[t]||"px"!==a&&+i)&&ge.exec(ot.css(n.elem,t)),r=1,c=20;if(s&&s[3]!==a){a=a||s[3],o=o||[],s=+i||1;do r=r||".5",s/=r,ot.style(n.elem,t,s+a);while(r!==(r=n.cur()/i)&&1!==r&&--c)}return o&&(s=n.start=+s||+i||0,n.unit=a,n.end=o[1]?s+(o[1]+1)*o[2]:+o[2]),n}]};ot.Animation=ot.extend(I,{tweener:function(t,e){ot.isFunction(t)?(e=t,t=["*"]):t=t.split(" ");for(var n,i=0,o=t.length;i
a",i=e.getElementsByTagName("a")[0],n=ft.createElement("select"),o=n.appendChild(ft.createElement("option")),t=e.getElementsByTagName("input")[0],i.style.cssText="top:1px",nt.getSetAttribute="t"!==e.className,nt.style=/top/.test(i.getAttribute("style")),nt.hrefNormalized="/a"===i.getAttribute("href"),nt.checkOn=!!t.value,nt.optSelected=o.selected,nt.enctype=!!ft.createElement("form").enctype,n.disabled=!0,nt.optDisabled=!o.disabled,t=ft.createElement("input"),t.setAttribute("value",""),nt.input=""===t.getAttribute("value"),t.value="t",t.setAttribute("type","radio"),nt.radioValue="t"===t.value}();var ye=/\r/g;ot.fn.extend({val:function(t){var e,n,i,o=this[0];{if(arguments.length)return i=ot.isFunction(t),this.each(function(n){var o;1===this.nodeType&&(o=i?t.call(this,n,ot(this).val()):t,null==o?o="":"number"==typeof o?o+="":ot.isArray(o)&&(o=ot.map(o,function(t){return null==t?"":t+""})),e=ot.valHooks[this.type]||ot.valHooks[this.nodeName.toLowerCase()],e&&"set"in e&&void 0!==e.set(this,o,"value")||(this.value=o))});if(o)return e=ot.valHooks[o.type]||ot.valHooks[o.nodeName.toLowerCase()],e&&"get"in e&&void 0!==(n=e.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(ye,""):null==n?"":n)}}}),ot.extend({valHooks:{option:{get:function(t){var e=ot.find.attr(t,"value");return null!=e?e:ot.trim(ot.text(t))}},select:{get:function(t){for(var e,n,i=t.options,o=t.selectedIndex,a="select-one"===t.type||o<0,s=a?null:[],r=a?o+1:i.length,c=o<0?r:a?o:0;c=0)try{i.selected=n=!0}catch(r){i.scrollHeight}else i.selected=!1;return n||(t.selectedIndex=-1),o}}}}),ot.each(["radio","checkbox"],function(){ot.valHooks[this]={set:function(t,e){if(ot.isArray(e))return t.checked=ot.inArray(ot(t).val(),e)>=0}},nt.checkOn||(ot.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})});var Ae,_e,ze=ot.expr.attrHandle,Te=/^(?:checked|selected)$/i,we=nt.getSetAttribute,Ce=nt.input;ot.fn.extend({attr:function(t,e){return St(this,ot.attr,t,e,arguments.length>1)},removeAttr:function(t){return this.each(function(){ot.removeAttr(this,t)})}}),ot.extend({attr:function(t,e,n){var i,o,a=t.nodeType;if(t&&3!==a&&8!==a&&2!==a)return typeof t.getAttribute===zt?ot.prop(t,e,n):(1===a&&ot.isXMLDoc(t)||(e=e.toLowerCase(),i=ot.attrHooks[e]||(ot.expr.match.bool.test(e)?_e:Ae)),void 0===n?i&&"get"in i&&null!==(o=i.get(t,e))?o:(o=ot.find.attr(t,e),null==o?void 0:o):null!==n?i&&"set"in i&&void 0!==(o=i.set(t,n,e))?o:(t.setAttribute(e,n+""),n):void ot.removeAttr(t,e))},removeAttr:function(t,e){var n,i,o=0,a=e&&e.match(Mt);if(a&&1===t.nodeType)for(;n=a[o++];)i=ot.propFix[n]||n,ot.expr.match.bool.test(n)?Ce&&we||!Te.test(n)?t[i]=!1:t[ot.camelCase("default-"+n)]=t[i]=!1:ot.attr(t,n,""),t.removeAttribute(we?n:i)},attrHooks:{type:{set:function(t,e){if(!nt.radioValue&&"radio"===e&&ot.nodeName(t,"input")){var n=t.value;return t.setAttribute("type",e),n&&(t.value=n),e}}}}}),_e={set:function(t,e,n){return e===!1?ot.removeAttr(t,n):Ce&&we||!Te.test(n)?t.setAttribute(!we&&ot.propFix[n]||n,n):t[ot.camelCase("default-"+n)]=t[n]=!0,n}},ot.each(ot.expr.match.bool.source.match(/\w+/g),function(t,e){var n=ze[e]||ot.find.attr;ze[e]=Ce&&we||!Te.test(e)?function(t,e,i){var o,a;return i||(a=ze[e],ze[e]=o,o=null!=n(t,e,i)?e.toLowerCase():null,ze[e]=a),o}:function(t,e,n){if(!n)return t[ot.camelCase("default-"+e)]?e.toLowerCase():null}}),Ce&&we||(ot.attrHooks.value={set:function(t,e,n){return ot.nodeName(t,"input")?void(t.defaultValue=e):Ae&&Ae.set(t,e,n)}}),we||(Ae={set:function(t,e,n){var i=t.getAttributeNode(n);if(i||t.setAttributeNode(i=t.ownerDocument.createAttribute(n)),i.value=e+="","value"===n||e===t.getAttribute(n))return e}},ze.id=ze.name=ze.coords=function(t,e,n){var i;if(!n)return(i=t.getAttributeNode(e))&&""!==i.value?i.value:null},ot.valHooks.button={get:function(t,e){var n=t.getAttributeNode(e);if(n&&n.specified)return n.value},set:Ae.set},ot.attrHooks.contenteditable={set:function(t,e,n){Ae.set(t,""!==e&&e,n)}},ot.each(["width","height"],function(t,e){ot.attrHooks[e]={set:function(t,n){if(""===n)return t.setAttribute(e,"auto"),n}}})),nt.style||(ot.attrHooks.style={get:function(t){return t.style.cssText||void 0},set:function(t,e){return t.style.cssText=e+""}});var Ne=/^(?:input|select|textarea|button|object)$/i,Oe=/^(?:a|area)$/i;ot.fn.extend({prop:function(t,e){return St(this,ot.prop,t,e,arguments.length>1)},removeProp:function(t){return t=ot.propFix[t]||t,this.each(function(){try{this[t]=void 0,delete this[t]}catch(e){}})}}),ot.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(t,e,n){var i,o,a,s=t.nodeType;if(t&&3!==s&&8!==s&&2!==s)return a=1!==s||!ot.isXMLDoc(t),a&&(e=ot.propFix[e]||e,o=ot.propHooks[e]),void 0!==n?o&&"set"in o&&void 0!==(i=o.set(t,n,e))?i:t[e]=n:o&&"get"in o&&null!==(i=o.get(t,e))?i:t[e]},propHooks:{tabIndex:{get:function(t){var e=ot.find.attr(t,"tabindex");return e?parseInt(e,10):Ne.test(t.nodeName)||Oe.test(t.nodeName)&&t.href?0:-1}}}}),nt.hrefNormalized||ot.each(["href","src"],function(t,e){ot.propHooks[e]={get:function(t){return t.getAttribute(e,4)}}}),nt.optSelected||(ot.propHooks.selected={get:function(t){var e=t.parentNode;return e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex), +null}}),ot.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ot.propFix[this.toLowerCase()]=this}),nt.enctype||(ot.propFix.enctype="encoding");var Se=/[\t\r\n\f]/g;ot.fn.extend({addClass:function(t){var e,n,i,o,a,s,r=0,c=this.length,l="string"==typeof t&&t;if(ot.isFunction(t))return this.each(function(e){ot(this).addClass(t.call(this,e,this.className))});if(l)for(e=(t||"").match(Mt)||[];r=0;)i=i.replace(" "+o+" "," ");s=t?ot.trim(i):"",n.className!==s&&(n.className=s)}return this},toggleClass:function(t,e){var n=typeof t;return"boolean"==typeof e&&"string"===n?e?this.addClass(t):this.removeClass(t):ot.isFunction(t)?this.each(function(n){ot(this).toggleClass(t.call(this,n,this.className,e),e)}):this.each(function(){if("string"===n)for(var e,i=0,o=ot(this),a=t.match(Mt)||[];e=a[i++];)o.hasClass(e)?o.removeClass(e):o.addClass(e);else n!==zt&&"boolean"!==n||(this.className&&ot._data(this,"__className__",this.className),this.className=this.className||t===!1?"":ot._data(this,"__className__")||"")})},hasClass:function(t){for(var e=" "+t+" ",n=0,i=this.length;n=0)return!0;return!1}}),ot.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(t,e){ot.fn[e]=function(t,n){return arguments.length>0?this.on(e,null,t,n):this.trigger(e)}}),ot.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)},bind:function(t,e,n){return this.on(t,null,e,n)},unbind:function(t,e){return this.off(t,null,e)},delegate:function(t,e,n,i){return this.on(e,t,n,i)},undelegate:function(t,e,n){return 1===arguments.length?this.off(t,"**"):this.off(e,t||"**",n)}});var xe=ot.now(),Le=/\?/,De=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;ot.parseJSON=function(e){if(t.JSON&&t.JSON.parse)return t.JSON.parse(e+"");var n,i=null,o=ot.trim(e+"");return o&&!ot.trim(o.replace(De,function(t,e,o,a){return n&&e&&(i=0),0===i?t:(n=o||e,i+=!a-!o,"")}))?Function("return "+o)():ot.error("Invalid JSON: "+e)},ot.parseXML=function(e){var n,i;if(!e||"string"!=typeof e)return null;try{t.DOMParser?(i=new DOMParser,n=i.parseFromString(e,"text/xml")):(n=new ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(e))}catch(o){n=void 0}return n&&n.documentElement&&!n.getElementsByTagName("parsererror").length||ot.error("Invalid XML: "+e),n};var ke,qe,We=/#.*$/,Ee=/([?&])_=[^&]*/,Be=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Ie=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Pe=/^(?:GET|HEAD)$/,Xe=/^\/\//,Re=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Fe={},He={},je="*/".concat("*");try{qe=location.href}catch(Ue){qe=ft.createElement("a"),qe.href="",qe=qe.href}ke=Re.exec(qe.toLowerCase())||[],ot.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qe,type:"GET",isLocal:Ie.test(ke[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":je,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":ot.parseJSON,"text xml":ot.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?R(R(t,ot.ajaxSettings),e):R(ot.ajaxSettings,t)},ajaxPrefilter:P(Fe),ajaxTransport:P(He),ajax:function(t,e){function n(t,e,n,i){var o,u,b,v,y,_=e;2!==M&&(M=2,r&&clearTimeout(r),l=void 0,s=i||"",A.readyState=t>0?4:0,o=t>=200&&t<300||304===t,n&&(v=F(d,A,n)),v=H(d,v,A,o),o?(d.ifModified&&(y=A.getResponseHeader("Last-Modified"),y&&(ot.lastModified[a]=y),y=A.getResponseHeader("etag"),y&&(ot.etag[a]=y)),204===t||"HEAD"===d.type?_="nocontent":304===t?_="notmodified":(_=v.state,u=v.data,b=v.error,o=!b)):(b=_,!t&&_||(_="error",t<0&&(t=0))),A.status=t,A.statusText=(e||_)+"",o?f.resolveWith(h,[u,_,A]):f.rejectWith(h,[A,_,b]),A.statusCode(g),g=void 0,c&&p.trigger(o?"ajaxSuccess":"ajaxError",[A,d,o?u:b]),m.fireWith(h,[A,_]),c&&(p.trigger("ajaxComplete",[A,d]),--ot.active||ot.event.trigger("ajaxStop")))}"object"==typeof t&&(e=t,t=void 0),e=e||{};var i,o,a,s,r,c,l,u,d=ot.ajaxSetup({},e),h=d.context||d,p=d.context&&(h.nodeType||h.jquery)?ot(h):ot.event,f=ot.Deferred(),m=ot.Callbacks("once memory"),g=d.statusCode||{},b={},v={},M=0,y="canceled",A={readyState:0,getResponseHeader:function(t){var e;if(2===M){if(!u)for(u={};e=Be.exec(s);)u[e[1].toLowerCase()]=e[2];e=u[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return 2===M?s:null},setRequestHeader:function(t,e){var n=t.toLowerCase();return M||(t=v[n]=v[n]||t,b[t]=e),this},overrideMimeType:function(t){return M||(d.mimeType=t),this},statusCode:function(t){var e;if(t)if(M<2)for(e in t)g[e]=[g[e],t[e]];else A.always(t[A.status]);return this},abort:function(t){var e=t||y;return l&&l.abort(e),n(0,e),this}};if(f.promise(A).complete=m.add,A.success=A.done,A.error=A.fail,d.url=((t||d.url||qe)+"").replace(We,"").replace(Xe,ke[1]+"//"),d.type=e.method||e.type||d.method||d.type,d.dataTypes=ot.trim(d.dataType||"*").toLowerCase().match(Mt)||[""],null==d.crossDomain&&(i=Re.exec(d.url.toLowerCase()),d.crossDomain=!(!i||i[1]===ke[1]&&i[2]===ke[2]&&(i[3]||("http:"===i[1]?"80":"443"))===(ke[3]||("http:"===ke[1]?"80":"443")))),d.data&&d.processData&&"string"!=typeof d.data&&(d.data=ot.param(d.data,d.traditional)),X(Fe,d,e,A),2===M)return A;c=ot.event&&d.global,c&&0===ot.active++&&ot.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Pe.test(d.type),a=d.url,d.hasContent||(d.data&&(a=d.url+=(Le.test(a)?"&":"?")+d.data,delete d.data),d.cache===!1&&(d.url=Ee.test(a)?a.replace(Ee,"$1_="+xe++):a+(Le.test(a)?"&":"?")+"_="+xe++)),d.ifModified&&(ot.lastModified[a]&&A.setRequestHeader("If-Modified-Since",ot.lastModified[a]),ot.etag[a]&&A.setRequestHeader("If-None-Match",ot.etag[a])),(d.data&&d.hasContent&&d.contentType!==!1||e.contentType)&&A.setRequestHeader("Content-Type",d.contentType),A.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+je+"; q=0.01":""):d.accepts["*"]);for(o in d.headers)A.setRequestHeader(o,d.headers[o]);if(d.beforeSend&&(d.beforeSend.call(h,A,d)===!1||2===M))return A.abort();y="abort";for(o in{success:1,error:1,complete:1})A[o](d[o]);if(l=X(He,d,e,A)){A.readyState=1,c&&p.trigger("ajaxSend",[A,d]),d.async&&d.timeout>0&&(r=setTimeout(function(){A.abort("timeout")},d.timeout));try{M=1,l.send(b,n)}catch(_){if(!(M<2))throw _;n(-1,_)}}else n(-1,"No Transport");return A},getJSON:function(t,e,n){return ot.get(t,e,n,"json")},getScript:function(t,e){return ot.get(t,void 0,e,"script")}}),ot.each(["get","post"],function(t,e){ot[e]=function(t,n,i,o){return ot.isFunction(n)&&(o=o||i,i=n,n=void 0),ot.ajax({url:t,type:e,dataType:o,data:n,success:i})}}),ot._evalUrl=function(t){return ot.ajax({url:t,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},ot.fn.extend({wrapAll:function(t){if(ot.isFunction(t))return this.each(function(e){ot(this).wrapAll(t.call(this,e))});if(this[0]){var e=ot(t,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstChild&&1===t.firstChild.nodeType;)t=t.firstChild;return t}).append(this)}return this},wrapInner:function(t){return ot.isFunction(t)?this.each(function(e){ot(this).wrapInner(t.call(this,e))}):this.each(function(){var e=ot(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)})},wrap:function(t){var e=ot.isFunction(t);return this.each(function(n){ot(this).wrapAll(e?t.call(this,n):t)})},unwrap:function(){return this.parent().each(function(){ot.nodeName(this,"body")||ot(this).replaceWith(this.childNodes)}).end()}}),ot.expr.filters.hidden=function(t){return t.offsetWidth<=0&&t.offsetHeight<=0||!nt.reliableHiddenOffsets()&&"none"===(t.style&&t.style.display||ot.css(t,"display"))},ot.expr.filters.visible=function(t){return!ot.expr.filters.hidden(t)};var $e=/%20/g,Je=/\[\]$/,Ve=/\r?\n/g,Ye=/^(?:submit|button|image|reset|file)$/i,Ke=/^(?:input|select|textarea|keygen)/i;ot.param=function(t,e){var n,i=[],o=function(t,e){e=ot.isFunction(e)?e():null==e?"":e,i[i.length]=encodeURIComponent(t)+"="+encodeURIComponent(e)};if(void 0===e&&(e=ot.ajaxSettings&&ot.ajaxSettings.traditional),ot.isArray(t)||t.jquery&&!ot.isPlainObject(t))ot.each(t,function(){o(this.name,this.value)});else for(n in t)j(n,t[n],e,o);return i.join("&").replace($e,"+")},ot.fn.extend({serialize:function(){return ot.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=ot.prop(this,"elements");return t?ot.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!ot(this).is(":disabled")&&Ke.test(this.nodeName)&&!Ye.test(t)&&(this.checked||!xt.test(t))}).map(function(t,e){var n=ot(this).val();return null==n?null:ot.isArray(n)?ot.map(n,function(t){return{name:e.name,value:t.replace(Ve,"\r\n")}}):{name:e.name,value:n.replace(Ve,"\r\n")}}).get()}}),ot.ajaxSettings.xhr=void 0!==t.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&U()||$()}:U;var Ge=0,Qe={},Ze=ot.ajaxSettings.xhr();t.attachEvent&&t.attachEvent("onunload",function(){for(var t in Qe)Qe[t](void 0,!0)}),nt.cors=!!Ze&&"withCredentials"in Ze,Ze=nt.ajax=!!Ze,Ze&&ot.ajaxTransport(function(t){if(!t.crossDomain||nt.cors){var e;return{send:function(n,i){var o,a=t.xhr(),s=++Ge;if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(o in t.xhrFields)a[o]=t.xhrFields[o];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||n["X-Requested-With"]||(n["X-Requested-With"]="XMLHttpRequest");for(o in n)void 0!==n[o]&&a.setRequestHeader(o,n[o]+"");a.send(t.hasContent&&t.data||null),e=function(n,o){var r,c,l;if(e&&(o||4===a.readyState))if(delete Qe[s],e=void 0,a.onreadystatechange=ot.noop,o)4!==a.readyState&&a.abort();else{l={},r=a.status,"string"==typeof a.responseText&&(l.text=a.responseText);try{c=a.statusText}catch(u){c=""}r||!t.isLocal||t.crossDomain?1223===r&&(r=204):r=l.text?200:404}l&&i(r,c,l,a.getAllResponseHeaders())},t.async?4===a.readyState?setTimeout(e):a.onreadystatechange=Qe[s]=e:e()},abort:function(){e&&e(void 0,!0)}}}}),ot.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(t){return ot.globalEval(t),t}}}),ot.ajaxPrefilter("script",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET",t.global=!1)}),ot.ajaxTransport("script",function(t){if(t.crossDomain){var e,n=ft.head||ot("head")[0]||ft.documentElement;return{send:function(i,o){e=ft.createElement("script"),e.async=!0,t.scriptCharset&&(e.charset=t.scriptCharset),e.src=t.url,e.onload=e.onreadystatechange=function(t,n){(n||!e.readyState||/loaded|complete/.test(e.readyState))&&(e.onload=e.onreadystatechange=null,e.parentNode&&e.parentNode.removeChild(e),e=null,n||o(200,"success"))},n.insertBefore(e,n.firstChild)},abort:function(){e&&e.onload(void 0,!0)}}}});var tn=[],en=/(=)\?(?=&|$)|\?\?/;ot.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var t=tn.pop()||ot.expando+"_"+xe++;return this[t]=!0,t}}),ot.ajaxPrefilter("json jsonp",function(e,n,i){var o,a,s,r=e.jsonp!==!1&&(en.test(e.url)?"url":"string"==typeof e.data&&!(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&en.test(e.data)&&"data");if(r||"jsonp"===e.dataTypes[0])return o=e.jsonpCallback=ot.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,r?e[r]=e[r].replace(en,"$1"+o):e.jsonp!==!1&&(e.url+=(Le.test(e.url)?"&":"?")+e.jsonp+"="+o),e.converters["script json"]=function(){return s||ot.error(o+" was not called"),s[0]},e.dataTypes[0]="json",a=t[o],t[o]=function(){s=arguments},i.always(function(){t[o]=a,e[o]&&(e.jsonpCallback=n.jsonpCallback,tn.push(o)),s&&ot.isFunction(a)&&a(s[0]),s=a=void 0}),"script"}),ot.parseHTML=function(t,e,n){if(!t||"string"!=typeof t)return null;"boolean"==typeof e&&(n=e,e=!1),e=e||ft;var i=dt.exec(t),o=!n&&[];return i?[e.createElement(i[1])]:(i=ot.buildFragment([t],e,o),o&&o.length&&ot(o).remove(),ot.merge([],i.childNodes))};var nn=ot.fn.load;ot.fn.load=function(t,e,n){if("string"!=typeof t&&nn)return nn.apply(this,arguments);var i,o,a,s=this,r=t.indexOf(" ");return r>=0&&(i=ot.trim(t.slice(r,t.length)),t=t.slice(0,r)),ot.isFunction(e)?(n=e,e=void 0):e&&"object"==typeof e&&(a="POST"),s.length>0&&ot.ajax({url:t,type:a,dataType:"html",data:e}).done(function(t){o=arguments,s.html(i?ot("
").append(ot.parseHTML(t)).find(i):t)}).complete(n&&function(t,e){s.each(n,o||[t.responseText,e,t])}),this},ot.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(t,e){ot.fn[e]=function(t){return this.on(e,t)}}),ot.expr.filters.animated=function(t){return ot.grep(ot.timers,function(e){return t===e.elem}).length};var on=t.document.documentElement;ot.offset={setOffset:function(t,e,n){var i,o,a,s,r,c,l,u=ot.css(t,"position"),d=ot(t),h={};"static"===u&&(t.style.position="relative"),r=d.offset(),a=ot.css(t,"top"),c=ot.css(t,"left"),l=("absolute"===u||"fixed"===u)&&ot.inArray("auto",[a,c])>-1,l?(i=d.position(),s=i.top,o=i.left):(s=parseFloat(a)||0,o=parseFloat(c)||0),ot.isFunction(e)&&(e=e.call(t,n,r)),null!=e.top&&(h.top=e.top-r.top+s),null!=e.left&&(h.left=e.left-r.left+o),"using"in e?e.using.call(t,h):d.css(h)}},ot.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ot.offset.setOffset(this,t,e)});var e,n,i={top:0,left:0},o=this[0],a=o&&o.ownerDocument;if(a)return e=a.documentElement,ot.contains(e,o)?(typeof o.getBoundingClientRect!==zt&&(i=o.getBoundingClientRect()),n=J(a),{top:i.top+(n.pageYOffset||e.scrollTop)-(e.clientTop||0),left:i.left+(n.pageXOffset||e.scrollLeft)-(e.clientLeft||0)}):i},position:function(){if(this[0]){var t,e,n={top:0,left:0},i=this[0];return"fixed"===ot.css(i,"position")?e=i.getBoundingClientRect():(t=this.offsetParent(),e=this.offset(),ot.nodeName(t[0],"html")||(n=t.offset()),n.top+=ot.css(t[0],"borderTopWidth",!0),n.left+=ot.css(t[0],"borderLeftWidth",!0)),{top:e.top-n.top-ot.css(i,"marginTop",!0),left:e.left-n.left-ot.css(i,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||on;t&&!ot.nodeName(t,"html")&&"static"===ot.css(t,"position");)t=t.offsetParent;return t||on})}}),ot.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,e){var n=/Y/.test(e);ot.fn[t]=function(i){return St(this,function(t,i,o){var a=J(t);return void 0===o?a?e in a?a[e]:a.document.documentElement[i]:t[i]:void(a?a.scrollTo(n?ot(a).scrollLeft():o,n?o:ot(a).scrollTop()):t[i]=o)},t,i,arguments.length,null)}}),ot.each(["top","left"],function(t,e){ot.cssHooks[e]=C(nt.pixelPosition,function(t,n){if(n)return n=ee(t,e),ie.test(n)?ot(t).position()[e]+"px":n})}),ot.each({Height:"height",Width:"width"},function(t,e){ot.each({padding:"inner"+t,content:e,"":"outer"+t},function(n,i){ot.fn[i]=function(i,o){var a=arguments.length&&(n||"boolean"!=typeof i),s=n||(i===!0||o===!0?"margin":"border");return St(this,function(e,n,i){var o;return ot.isWindow(e)?e.document.documentElement["client"+t]:9===e.nodeType?(o=e.documentElement,Math.max(e.body["scroll"+t],o["scroll"+t],e.body["offset"+t],o["offset"+t],o["client"+t])):void 0===i?ot.css(e,n,s):ot.style(e,n,i,s)},e,a?i:void 0,a,null)}})}),ot.fn.size=function(){return this.length},ot.fn.andSelf=ot.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return ot});var an=t.jQuery,sn=t.$;return ot.noConflict=function(e){return t.$===ot&&(t.$=sn),e&&t.jQuery===ot&&(t.jQuery=an),ot},typeof e===zt&&(t.jQuery=t.$=ot),ot}),function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(t){function e(e,i){var o,a,s,r=e.nodeName.toLowerCase();return"area"===r?(o=e.parentNode,a=o.name,!(!e.href||!a||"map"!==o.nodeName.toLowerCase())&&(s=t("img[usemap='#"+a+"']")[0],!!s&&n(s))):(/input|select|textarea|button|object/.test(r)?!e.disabled:"a"===r?e.href||i:i)&&n(e)}function n(e){return t.expr.filters.visible(e)&&!t(e).parents().addBack().filter(function(){return"hidden"===t.css(this,"visibility")}).length}function i(t){for(var e,n;t.length&&t[0]!==document;){if(e=t.css("position"),("absolute"===e||"relative"===e||"fixed"===e)&&(n=parseInt(t.css("zIndex"),10),!isNaN(n)&&0!==n))return n;t=t.parent()}return 0}function o(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=a(t("
"))}function a(e){var n="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.delegate(n,"mouseout",function(){t(this).removeClass("ui-state-hover"),this.className.indexOf("ui-datepicker-prev")!==-1&&t(this).removeClass("ui-datepicker-prev-hover"),this.className.indexOf("ui-datepicker-next")!==-1&&t(this).removeClass("ui-datepicker-next-hover")}).delegate(n,"mouseover",s)}function s(){t.datepicker._isDisabledDatepicker(b.inline?b.dpDiv.parent()[0]:b.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),this.className.indexOf("ui-datepicker-prev")!==-1&&t(this).addClass("ui-datepicker-prev-hover"),this.className.indexOf("ui-datepicker-next")!==-1&&t(this).addClass("ui-datepicker-next-hover"))}function r(e,n){t.extend(e,n);for(var i in n)null==n[i]&&(e[i]=n[i]);return e}function c(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{},t.extend(t.ui,{version:"1.11.2",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),t.fn.extend({scrollParent:function(e){var n=this.css("position"),i="absolute"===n,o=e?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var e=t(this);return(!i||"static"!==e.css("position"))&&o.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==n&&a.length?a:t(this[0].ownerDocument||document)},uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(n){return!!t.data(n,e)}}):function(e,n,i){return!!t.data(e,i[3])},focusable:function(n){return e(n,!isNaN(t.attr(n,"tabindex")))},tabbable:function(n){var i=t.attr(n,"tabindex"),o=isNaN(i);return(o||i>=0)&&e(n,!o)}}),t("").outerWidth(1).jquery||t.each(["Width","Height"],function(e,n){function i(e,n,i,a){return t.each(o,function(){n-=parseFloat(t.css(e,"padding"+this))||0,i&&(n-=parseFloat(t.css(e,"border"+this+"Width"))||0),a&&(n-=parseFloat(t.css(e,"margin"+this))||0)}),n}var o="Width"===n?["Left","Right"]:["Top","Bottom"],a=n.toLowerCase(),s={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+n]=function(e){return void 0===e?s["inner"+n].call(this):this.each(function(){t(this).css(a,i(this,e)+"px")})},t.fn["outer"+n]=function(e,o){return"number"!=typeof e?s["outer"+n].call(this,e):this.each(function(){t(this).css(a,i(this,e,!0,o)+"px")})}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t("").data("a-b","a").removeData("a-b").data("a-b")&&(t.fn.removeData=function(e){return function(n){return arguments.length?e.call(this,t.camelCase(n)):e.call(this)}}(t.fn.removeData)),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),t.fn.extend({focus:function(e){return function(n,i){return"number"==typeof n?this.each(function(){var e=this;setTimeout(function(){t(e).focus(),i&&i.call(e)},n)}):e.apply(this,arguments)}}(t.fn.focus),disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(e){if(void 0!==e)return this.css("zIndex",e);if(this.length)for(var n,i,o=t(this[0]);o.length&&o[0]!==document;){if(n=o.css("position"),("absolute"===n||"relative"===n||"fixed"===n)&&(i=parseInt(o.css("zIndex"),10),!isNaN(i)&&0!==i))return i;o=o.parent()}return 0}}),t.ui.plugin={add:function(e,n,i){var o,a=t.ui[e].prototype;for(o in i)a.plugins[o]=a.plugins[o]||[],a.plugins[o].push([n,i[o]])},call:function(t,e,n,i){var o,a=t.plugins[e];if(a&&(i||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(o=0;o",options:{disabled:!1,create:null},_createWidget:function(e,n){n=t(n||this.defaultElement||this)[0],this.element=t(n),this.uuid=l++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),n!==this&&(t.data(n,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===n&&this.destroy()}}),this.document=t(n.style?n.ownerDocument:n.document||n),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:t.noop,_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(t.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:t.noop,widget:function(){return this.element},option:function(e,n){var i,o,a,s=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(s={},i=e.split("."),e=i.shift(),i.length){for(o=s[e]=t.widget.extend({},this.options[e]),a=0;a=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}});!function(){function e(t,e,n){return[parseFloat(t[0])*(p.test(t[0])?e/100:1),parseFloat(t[1])*(p.test(t[1])?n/100:1)]}function n(e,n){return parseInt(t.css(e,n),10)||0}function i(e){var n=e[0];return 9===n.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(n)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:n.preventDefault?{width:0,height:0,offset:{top:n.pageY,left:n.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}t.ui=t.ui||{};var o,a,s=Math.max,r=Math.abs,c=Math.round,l=/left|center|right/,u=/top|center|bottom/,d=/[\+\-]\d+(\.[\d]+)?%?/,h=/^\w+/,p=/%$/,f=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==o)return o;var e,n,i=t("
"),a=i.children()[0];return t("body").append(i),e=a.offsetWidth,i.css("overflow","scroll"),n=a.offsetWidth,e===n&&(n=i[0].clientWidth),i.remove(),o=e-n},getScrollInfo:function(e){var n=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),i=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),o="scroll"===n||"auto"===n&&e.width0?"right":"center",vertical:a<0?"top":i>0?"bottom":"middle"};ms(r(i),r(a))?c.important="horizontal":c.important="vertical",o.using.call(this,t,c)}),u.offset(t.extend(N,{using:l}))})},t.ui.position={fit:{left:function(t,e){var n,i=e.within,o=i.isWindow?i.scrollLeft:i.offset.left,a=i.width,r=t.left-e.collisionPosition.marginLeft,c=o-r,l=r+e.collisionWidth-a-o;e.collisionWidth>a?c>0&&l<=0?(n=t.left+c+e.collisionWidth-a-o,t.left+=c-n):l>0&&c<=0?t.left=o:c>l?t.left=o+a-e.collisionWidth:t.left=o:c>0?t.left+=c:l>0?t.left-=l:t.left=s(t.left-r,t.left)},top:function(t,e){var n,i=e.within,o=i.isWindow?i.scrollTop:i.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,c=o-r,l=r+e.collisionHeight-a-o;e.collisionHeight>a?c>0&&l<=0?(n=t.top+c+e.collisionHeight-a-o,t.top+=c-n):l>0&&c<=0?t.top=o:c>l?t.top=o+a-e.collisionHeight:t.top=o:c>0?t.top+=c:l>0?t.top-=l:t.top=s(t.top-r,t.top)}},flip:{left:function(t,e){var n,i,o=e.within,a=o.offset.left+o.scrollLeft,s=o.width,c=o.isWindow?o.scrollLeft:o.offset.left,l=t.left-e.collisionPosition.marginLeft,u=l-c,d=l+e.collisionWidth-s-c,h="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];u<0?(n=t.left+h+p+f+e.collisionWidth-s-a,(n<0||n0&&(i=t.left-e.collisionPosition.marginLeft+h+p+f-c,(i>0||r(i)u&&(i<0||i0&&(n=t.top-e.collisionPosition.marginTop+p+f+m-c,t.top+p+f+m>d&&(n>0||r(n)10&&o<11,e.innerHTML="",n.removeChild(e)}()}();t.ui.position,t.widget("ui.accordion",{version:"1.11.2",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),e.active<0&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e=this.options.icons;e&&(t("").addClass("ui-accordion-header-icon ui-icon "+e.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(e.header).addClass(e.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?void this._activate(e):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void("disabled"===t&&(this.element.toggleClass("ui-state-disabled",!!e).attr("aria-disabled",e),this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!e))))},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var n=t.ui.keyCode,i=this.headers.length,o=this.headers.index(e.target),a=!1;switch(e.keyCode){case n.RIGHT:case n.DOWN:a=this.headers[(o+1)%i];break;case n.LEFT:case n.UP:a=this.headers[(o-1+i)%i];break;case n.SPACE:case n.ENTER:this._eventHandler(e);break;case n.HOME:a=this.headers[0];break;case n.END:a=this.headers[i-1]}a&&(t(e.target).attr("tabIndex",-1),t(a).attr("tabIndex",0),a.focus(),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().focus()},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"),this.panels=this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide(),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,n=this.options,i=n.heightStyle,o=this.element.parent();this.active=this._findActive(n.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(){var e=t(this),n=e.uniqueId().attr("id"),i=e.next(),o=i.uniqueId().attr("id");e.attr("aria-controls",o),i.attr("aria-labelledby",n)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(n.event),"fill"===i?(e=o.height(),this.element.siblings(":visible").each(function(){var n=t(this),i=n.css("position");"absolute"!==i&&"fixed"!==i&&(e-=n.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===i&&(e=0,this.headers.next().each(function(){e=Math.max(e,t(this).css("height","").height())}).height(e))},_activate:function(e){var n=this._findActive(e)[0];n!==this.active[0]&&(n=n||this.active[0],this._eventHandler({target:n,currentTarget:n,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var n={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){n[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,n),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var n=this.options,i=this.active,o=t(e.currentTarget),a=o[0]===i[0],s=a&&n.collapsible,r=s?t():o.next(),c=i.next(),l={oldHeader:i,oldPanel:c,newHeader:s?t():o,newPanel:r};e.preventDefault(),a&&!n.collapsible||this._trigger("beforeActivate",e,l)===!1||(n.active=!s&&this.headers.index(o),this.active=a?t():o,this._toggle(l),i.removeClass("ui-accordion-header-active ui-state-active"),n.icons&&i.children(".ui-accordion-header-icon").removeClass(n.icons.activeHeader).addClass(n.icons.header),a||(o.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),n.icons&&o.children(".ui-accordion-header-icon").removeClass(n.icons.header).addClass(n.icons.activeHeader),o.next().addClass("ui-accordion-content-active")))},_toggle:function(e){var n=e.newPanel,i=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=n,this.prevHide=i,this.options.animate?this._animate(n,i,e):(i.hide(),n.show(),this._toggleComplete(e)),i.attr({"aria-hidden":"true"}),i.prev().attr("aria-selected","false"),n.length&&i.length?i.prev().attr({tabIndex:-1,"aria-expanded":"false"}):n.length&&this.headers.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),n.attr("aria-hidden","false").prev().attr({"aria-selected":"true",tabIndex:0,"aria-expanded":"true"})},_animate:function(t,e,n){var i,o,a,s=this,r=0,c=t.length&&(!e.length||t.index()",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var n=t(e.target);!this.mouseHandled&&n.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),n.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&t(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var n=t(e.currentTarget);n.siblings(".ui-state-active").removeClass("ui-state-active"),this.focus(e,n)}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var n=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,n)},blur:function(e){this._delay(function(){t.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var e=t(this);e.data("ui-menu-submenu-carat")&&e.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(e){var n,i,o,a,s=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:s=!1,i=this.previousFilter||"",o=String.fromCharCode(e.keyCode),a=!1,clearTimeout(this.filterTimer),o===i?a=!0:o=i+o,n=this._filterMenuItems(o),n=a&&n.index(this.active.next())!==-1?this.active.nextAll(".ui-menu-item"):n,n.length||(o=String.fromCharCode(e.keyCode),n=this._filterMenuItems(o)),n.length?(this.focus(e,n),this.previousFilter=o,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}s&&e.preventDefault()},_activate:function(t){this.active.is(".ui-state-disabled")||(this.active.is("[aria-haspopup='true']")?this.expand(t):this.select(t))},refresh:function(){var e,n,i=this,o=this.options.icons.submenu,a=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),a.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),n=e.parent(),i=t("").addClass("ui-menu-icon ui-icon "+o).data("ui-menu-submenu-carat",!0);n.attr("aria-haspopup","true").prepend(i),e.attr("aria-labelledby",n.attr("id"))}),e=a.add(this.element),n=e.find(this.options.items),n.not(".ui-menu-item").each(function(){var e=t(this);i._isDivider(e)&&e.addClass("ui-widget-content ui-menu-divider")}),n.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),n.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){"icons"===t&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(e.submenu),"disabled"===t&&this.element.toggleClass("ui-state-disabled",!!e).attr("aria-disabled",e),this._super(t,e)},focus:function(t,e){var n,i;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),i=this.active.addClass("ui-state-focus").removeClass("ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",i.attr("id")),this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),n=e.children(".ui-menu"),n.length&&t&&/^mouse/.test(t.type)&&this._startOpening(n),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var n,i,o,a,s,r;this._hasScroll()&&(n=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,i=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,o=e.offset().top-this.activeMenu.offset().top-n-i,a=this.activeMenu.scrollTop(),s=this.activeMenu.height(),r=e.outerHeight(),o<0?this.activeMenu.scrollTop(a+o):o+r>s&&this.activeMenu.scrollTop(a+o-s+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this.active.removeClass("ui-state-focus"),this.active=null,this._trigger("blur",t,{item:this.active}))},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var n=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(n)},collapseAll:function(e,n){clearTimeout(this.timer),this.timer=this._delay(function(){var i=n?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));i.length||(i=this.element),this._close(i),this.blur(e),this.activeMenu=i},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,n){var i;this.active&&(i="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),i&&i.length&&this.active||(i=this.activeMenu.find(this.options.items)[e]()),this.focus(n,i)},nextPage:function(e){var n,i,o;return this.active?void(this.isLastItem()||(this._hasScroll()?(i=this.active.offset().top,o=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return n=t(this),n.offset().top-i-o<0}),this.focus(e,n)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]()))):void this.next(e)},previousPage:function(e){var n,i,o;return this.active?void(this.isFirstItem()||(this._hasScroll()?(i=this.active.offset().top,o=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return n=t(this),n.offset().top-i+o>0}),this.focus(e,n)):this.focus(e,this.activeMenu.find(this.options.items).first()))):void this.next(e)},_hasScroll:function(){return this.element.outerHeight()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,n,i,o=this.element[0].nodeName.toLowerCase(),a="textarea"===o,s="input"===o;this.isMultiLine=!!a||!s&&this.element.prop("isContentEditable"),this.valueMethod=this.element[a||s?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(o){if(this.element.prop("readOnly"))return e=!0,i=!0,void(n=!0);e=!1,i=!1,n=!1;var a=t.ui.keyCode;switch(o.keyCode){case a.PAGE_UP:e=!0,this._move("previousPage",o);break;case a.PAGE_DOWN:e=!0,this._move("nextPage",o);break;case a.UP:e=!0,this._keyEvent("previous",o);break;case a.DOWN:e=!0,this._keyEvent("next",o);break;case a.ENTER:this.menu.active&&(e=!0,o.preventDefault(),this.menu.select(o));break;case a.TAB:this.menu.active&&this.menu.select(o);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(o),o.preventDefault());break;default:n=!0,this._searchTimeout(o)}},keypress:function(i){if(e)return e=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||i.preventDefault());if(!n){var o=t.ui.keyCode;switch(i.keyCode){case o.PAGE_UP:this._move("previousPage",i);break;case o.PAGE_DOWN:this._move("nextPage",i);break;case o.UP:this._keyEvent("previous",i);break;case o.DOWN:this._keyEvent("next",i)}}},input:function(t){return i?(i=!1,void t.preventDefault()):void this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?void delete this.cancelBlur:(clearTimeout(this.searching),this.close(t),void this._change(t))}}),this._initSource(),this.menu=t("
");var r=t("a",n),c=r[0],l=r[1],u=r[2],d=r[3];e.oApi._fnBindAction(c,{action:"first"},s),e.oApi._fnBindAction(l,{action:"previous"},s),e.oApi._fnBindAction(u,{action:"next"},s),e.oApi._fnBindAction(d,{action:"last"},s),e.aanFeatures.p||(n.id=e.sTableId+"_paginate",c.id=e.sTableId+"_first",l.id=e.sTableId+"_previous",u.id=e.sTableId+"_next",d.id=e.sTableId+"_last")},fnUpdate:function(e,n){if(e.aanFeatures.p){var i,o,a,s,r,c=e.oInstance.fnPagingInfo(),l=t.fn.dataTableExt.oPagination.iFullNumbersShowPages,u=Math.floor(l/2),d=Math.ceil(e.fnRecordsDisplay()/e._iDisplayLength),h=Math.ceil(e._iDisplayStart/e._iDisplayLength)+1,p="",f=(e.oClasses,e.aanFeatures.p);for(e._iDisplayLength===-1?(i=1,o=1,h=1):d=d-u?(i=d-l+1,o=d):(i=h-Math.ceil(l/2)+1,o=i+l-1),a=i;a<=o;a++)p+=h!==a?'
  • '+e.fnFormatNumber(a)+"
  • ":'
  • '+e.fnFormatNumber(a)+"
  • ";for(a=0,s=f.length;a",o[0];);return 4d.a.l(e,t[n])&&e.push(t[n]);return e},ya:function(t,e){t=t||[];for(var n=[],i=0,o=t.length;ii?n&&t.push(e):n||t.splice(i,1)},na:l,extend:r,ra:c,sa:l?c:r,A:s,Oa:function(t,e){if(!t)return t;var n,i={};for(n in t)t.hasOwnProperty(n)&&(i[n]=e(t[n],n,t));return i},Fa:function(t){for(;t.firstChild;)d.removeNode(t.firstChild)},ec:function(t){t=d.a.R(t);for(var e=n.createElement("div"),i=0,o=t.length;if?t.setAttribute("selected",e):t.selected=e},ta:function(e){return null===e||e===t?"":e.trim?e.trim():e.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},oc:function(t,e){for(var n=[],i=(t||"").split(e),o=0,a=i.length;ot.length)&&t.substring(0,e.length)===e},Sb:function(t,e){if(t===e)return!0;if(11===t.nodeType)return!1;if(e.contains)return e.contains(3===t.nodeType?t.parentNode:t);if(e.compareDocumentPosition)return 16==(16&e.compareDocumentPosition(t));for(;t&&t!=e;)t=t.parentNode;return!!t},Ea:function(t){return d.a.Sb(t,t.ownerDocument.documentElement)},eb:function(t){return!!d.a.hb(t,d.a.Ea)},B:function(t){return t&&t.tagName&&t.tagName.toLowerCase()},q:function(t,e,n){var i=f&&p[e];if(!i&&o)o(t).bind(e,n);else if(i||"function"!=typeof t.addEventListener){if("undefined"==typeof t.attachEvent)throw Error("Browser doesn't support addEventListener or attachEvent");var a=function(e){n.call(t,e)},s="on"+e;t.attachEvent(s,a),d.a.u.ja(t,function(){t.detachEvent(s,a)})}else t.addEventListener(e,n,!1)},ha:function(t,i){if(!t||!t.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var a;if("input"===d.a.B(t)&&t.type&&"click"==i.toLowerCase()?(a=t.type,a="checkbox"==a||"radio"==a):a=!1,o&&!a)o(t).trigger(i);else if("function"==typeof n.createEvent){if("function"!=typeof t.dispatchEvent)throw Error("The supplied element doesn't support dispatchEvent");a=n.createEvent(h[i]||"HTMLEvents"),a.initEvent(i,!0,!0,e,0,0,0,0,0,!1,!1,!1,!1,0,t),t.dispatchEvent(a)}else if(a&&t.click)t.click();else{if("undefined"==typeof t.fireEvent)throw Error("Browser doesn't support triggering events");t.fireEvent("on"+i)}},c:function(t){return d.v(t)?t():t},Sa:function(t){return d.v(t)?t.o():t},ua:function(t,e,n){if(e){var i=/\S+/g,o=t.className.match(i)||[];d.a.r(e.match(i),function(t){d.a.Y(o,t,n)}),t.className=o.join(" ")}},Xa:function(e,n){var i=d.a.c(n);null!==i&&i!==t||(i="");var o=d.e.firstChild(e);!o||3!=o.nodeType||d.e.nextSibling(o)?d.e.U(e,[e.ownerDocument.createTextNode(i)]):o.data=i,d.a.Vb(e)},Cb:function(t,e){if(t.name=e,7>=f)try{t.mergeAttributes(n.createElement(""),!1)}catch(i){}},Vb:function(t){9<=f&&(t=1==t.nodeType?t:t.parentNode,t.style&&(t.style.zoom=t.style.zoom))},Tb:function(t){if(f){var e=t.style.width;t.style.width=0,t.style.width=e}},ic:function(t,e){t=d.a.c(t),e=d.a.c(e);for(var n=[],i=t;i<=e;i++)n.push(i);return n},R:function(t){for(var e=[],n=0,i=t.length;n=t-i&&"bottom"},n.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(n.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},n.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},n.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),i=this.options.offset,o=i.top,a=i.bottom,s=t("body").height();"object"!=typeof i&&(a=o=i),"function"==typeof o&&(o=i.top(this.$element)),"function"==typeof a&&(a=i.bottom(this.$element));var r=this.getState(s,e,o,a);if(this.affixed!=r){null!=this.unpin&&this.$element.css("top","");var c="affix"+(r?"-"+r:""),l=t.Event(c+".bs.affix");if(this.$element.trigger(l),l.isDefaultPrevented())return;this.affixed=r,this.unpin="bottom"==r?this.getPinnedOffset():null,this.$element.removeClass(n.RESET).addClass(c).trigger(c.replace("affix","affixed")+".bs.affix")}"bottom"==r&&this.$element.offset({top:s-e-a})}};var i=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=n,t.fn.affix.noConflict=function(){return t.fn.affix=i,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var n=t(this),i=n.data();i.offset=i.offset||{},null!=i.offsetBottom&&(i.offset.bottom=i.offsetBottom),null!=i.offsetTop&&(i.offset.top=i.offsetTop),e.call(n,i)})})}(jQuery),function(t,e,n){!function(t){"use strict";"function"==typeof define&&define.amd?define("datatables",["jquery"],t):"object"==typeof exports?t(require("jquery")):jQuery&&!jQuery.fn.dataTable&&t(jQuery)}(function(i){"use strict";function o(t){var e,n,a="a aa ai ao as b fn i m o s ",s={};i.each(t,function(i,r){e=i.match(/^([^A-Z]+?)([A-Z])/),e&&a.indexOf(e[1]+" ")!==-1&&(n=i.replace(e[0],e[2].toLowerCase()),s[n]=i,"o"===e[1]&&o(t[i]))}),t._hungarianMap=s}function a(t,e,s){t._hungarianMap||o(t);var r;i.each(e,function(o,c){r=t._hungarianMap[o],r===n||!s&&e[r]!==n||("o"===r.charAt(0)?(e[r]||(e[r]={}),i.extend(!0,e[r],e[o]),a(t[r],e[r],s)):e[r]=e[o])})}function s(t){var e=Vt.defaults.oLanguage,n=t.sZeroRecords;!t.sEmptyTable&&n&&"No data available in table"===e.sEmptyTable&&Bt(t,t,"sZeroRecords","sEmptyTable"),!t.sLoadingRecords&&n&&"Loading..."===e.sLoadingRecords&&Bt(t,t,"sZeroRecords","sLoadingRecords"),t.sInfoThousands&&(t.sThousands=t.sInfoThousands);var i=t.sDecimal;i&&$t(i)}function r(t){ve(t,"ordering","bSort"),ve(t,"orderMulti","bSortMulti"),ve(t,"orderClasses","bSortClasses"),ve(t,"orderCellsTop","bSortCellsTop"),ve(t,"order","aaSorting"),ve(t,"orderFixed","aaSortingFixed"),ve(t,"paging","bPaginate"),ve(t,"pagingType","sPaginationType"),ve(t,"pageLength","iDisplayLength"),ve(t,"searching","bFilter");var e=t.aoSearchCols;if(e)for(var n=0,i=e.length;n").css({position:"absolute",top:0,left:0,height:1,width:1,overflow:"hidden"}).append(i("
    ").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append(i('
    ').css({width:"100%",height:10}))).appendTo("body"),o=n.find(".test");e.bScrollOversize=100===o[0].offsetWidth,e.bScrollbarLeft=1!==o.offset().left,n.remove()}function u(t,e,i,o,a,s){var r,c=o,l=!1;for(i!==n&&(r=i,l=!0);c!==a;)t.hasOwnProperty(c)&&(r=l?e(r,t[c],c,t):t[c],l=!0,c+=s);return r}function d(t,n){var o=Vt.defaults.column,a=t.aoColumns.length,s=i.extend({},Vt.models.oColumn,o,{nTh:n?n:e.createElement("th"),sTitle:o.sTitle?o.sTitle:n?n.innerHTML:"",aDataSort:o.aDataSort?o.aDataSort:[a],mData:o.mData?o.mData:a,idx:a});t.aoColumns.push(s);var r=t.aoPreSearchCols;r[a]=i.extend({},Vt.models.oSearch,r[a]),h(t,a,null)}function h(t,e,o){var s=t.aoColumns[e],r=t.oClasses,l=i(s.nTh);if(!s.sWidthOrig){s.sWidthOrig=l.attr("width")||null;var u=(l.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);u&&(s.sWidthOrig=u[1])}o!==n&&null!==o&&(c(o),a(Vt.defaults.column,o),o.mDataProp===n||o.mData||(o.mData=o.mDataProp),o.sType&&(s._sManualType=o.sType),o.className&&!o.sClass&&(o.sClass=o.className),i.extend(s,o),Bt(s,o,"sWidth","sWidthOrig"),"number"==typeof o.iDataSort&&(s.aDataSort=[o.iDataSort]),Bt(s,o,"aDataSort"));var d=s.mData,h=N(d),p=s.mRender?N(s.mRender):null,f=function(t){return"string"==typeof t&&t.indexOf("@")!==-1};s._bAttrSrc=i.isPlainObject(d)&&(f(d.sort)||f(d.type)||f(d.filter)),s.fnGetData=function(t,e,i){var o=h(t,e,n,i);return p&&e?p(o,e,t,i):o},s.fnSetData=function(t,e,n){return O(d)(t,e,n)},"number"!=typeof d&&(t._rowReadObject=!0),t.oFeatures.bSort||(s.bSortable=!1,l.addClass(r.sSortableNone));var m=i.inArray("asc",s.asSorting)!==-1,g=i.inArray("desc",s.asSorting)!==-1;s.bSortable&&(m||g)?m&&!g?(s.sSortingClass=r.sSortableAsc,s.sSortingClassJUI=r.sSortJUIAscAllowed):!m&&g?(s.sSortingClass=r.sSortableDesc,s.sSortingClassJUI=r.sSortJUIDescAllowed):(s.sSortingClass=r.sSortable,s.sSortingClassJUI=r.sSortJUI):(s.sSortingClass=r.sSortableNone,s.sSortingClassJUI="")}function p(t){if(t.oFeatures.bAutoWidth!==!1){var e=t.aoColumns;vt(t);for(var n=0,i=e.length;n=0;s--){p=e[s];var m=p.targets!==n?p.targets:p.aTargets;for(i.isArray(m)||(m=[m]),c=0,l=m.length;c=0){for(;f.length<=m[c];)d(t);a(m[c],p)}else if("number"==typeof m[c]&&m[c]<0)a(f.length+m[c],p);else if("string"==typeof m[c])for(u=0,h=f.length;ue&&t[a]--;o!=-1&&i===n&&t.splice(o,1)}function D(t,e,i,o){var a,s,r=t.aoData[e],c=function(n,i){for(;n.childNodes.length;)n.removeChild(n.firstChild);n.innerHTML=T(t,e,i,"display")};if("dom"!==i&&(i&&"auto"!==i||"dom"!==r.src)){var l=r.anCells;if(l)if(o!==n)c(l[o],o);else for(a=0,s=l.length;a").appendTo(r)),e=0,n=d.length;etr").attr("role","row"),i(r).find(">tr>th, >tr>td").addClass(u.sHeaderTH),i(c).find(">tr>th, >tr>td").addClass(u.sFooterTH),null!==c){var h=t.aoFooter[0];for(e=0,n=h.length;e=0;r--)t.aoColumns[r].bVisible||o||f[a].splice(r,1);m.push([])}for(a=0,s=f.length;a=t.fnRecordsDisplay()?0:l,t.iInitDisplayStart=-1);var h=t._iDisplayStart,p=t.fnDisplayEnd();if(t.bDeferLoading)t.bDeferLoading=!1,t.iDraw++,ft(t,!1);else if(u){if(!t.bDestroying&&!j(t))return}else t.iDraw++;if(0!==d.length)for(var f=u?0:h,m=u?t.aoData.length:p,b=f;b",{"class":r?s[0]:""}).append(i("",{valign:"top",colSpan:g(t),"class":t.oClasses.sRowEmpty}).html(_))[0]}Rt(t,"aoHeaderCallback","header",[i(t.nTHead).children("tr")[0],S(t),h,p,d]),Rt(t,"aoFooterCallback","footer",[i(t.nTFoot).children("tr")[0],S(t),h,p,d]);var z=i(t.nTBody);z.children().detach(),z.append(i(o)),Rt(t,"aoDrawCallback","draw",[t]),t.bSorted=!1,t.bFiltered=!1,t.bDrawing=!1}function P(t,e){var n=t.oFeatures,i=n.bSort,o=n.bFilter;i&&Nt(t),o?Y(t,t.oPreviousSearch):t.aiDisplay=t.aiDisplayMaster.slice(),e!==!0&&(t._iDisplayStart=0),t._drawHold=e,I(t),t._drawHold=!1}function X(t){var e=t.oClasses,n=i(t.nTable),o=i("
    ").insertBefore(n),a=t.oFeatures,s=i("
    ",{id:t.sTableId+"_wrapper","class":e.sWrapper+(t.nTFoot?"":" "+e.sNoFooter)});t.nHolding=o[0],t.nTableWrapper=s[0],t.nTableReinsertBefore=t.nTable.nextSibling;for(var r,c,l,u,d,h,p=t.sDom.split(""),f=0;f")[0],u=p[f+1],"'"==u||'"'==u){for(d="",h=2;p[f+h]!=u;)d+=p[f+h],h++;if("H"==d?d=e.sJUIHeader:"F"==d&&(d=e.sJUIFooter),d.indexOf(".")!=-1){var m=d.split(".");l.id=m[0].substr(1,m[0].length-1),l.className=m[1]}else"#"==d.charAt(0)?l.id=d.substr(1,d.length-1):l.className=d;f+=h}s.append(l),s=i(l)}else if(">"==c)s=s.parent();else if("l"==c&&a.bPaginate&&a.bLengthChange)r=ut(t);else if("f"==c&&a.bFilter)r=V(t);else if("r"==c&&a.bProcessing)r=pt(t);else if("t"==c)r=mt(t);else if("i"==c&&a.bInfo)r=ot(t);else if("p"==c&&a.bPaginate)r=dt(t);else if(0!==Vt.ext.feature.length)for(var g=Vt.ext.feature,b=0,v=g.length;b',l=a.sSearch;l=l.match(/_INPUT_/)?l.replace("_INPUT_",c):l+c;var u=i("
    ",{id:r.f?null:o+"_filter","class":n.sFilter}).append(i("
    ").addClass(e.sLength);return t.aanFeatures.l||(d[0].id=n+"_length"),d.children().append(t.oLanguage.sLengthMenu.replace("_MENU_",c[0].outerHTML)),i("select",d).val(t._iDisplayLength).bind("change.DT",function(e){lt(t,i(this).val()),I(t)}),i(t.nTable).bind("length.dt.DT",function(e,n,o){t===n&&i("select",d).val(o)}),d[0]}function dt(t){var e=t.sPaginationType,n=Vt.ext.pager[e],o="function"==typeof n,a=function(t){I(t)},s=i("
    ").addClass(t.oClasses.sPaging+e)[0],r=t.aanFeatures;return o||n.fnInit(t,s,a),r.p||(s.id=t.sTableId+"_paginate",t.aoDrawCallback.push({fn:function(t){if(o){var e,i,s=t._iDisplayStart,c=t._iDisplayLength,l=t.fnRecordsDisplay(),u=c===-1,d=u?0:Math.ceil(s/c),h=u?1:Math.ceil(l/c),p=n(d,h);for(e=0,i=r.p.length;ea&&(i=0)):"first"==e?i=0:"previous"==e?(i=o>=0?i-o:0,i<0&&(i=0)):"next"==e?i+o",{id:t.aanFeatures.r?null:t.sTableId+"_processing","class":t.oClasses.sProcessing}).html(t.oLanguage.sProcessing).insertBefore(t.nTable)[0]}function ft(t,e){t.oFeatures.bProcessing&&i(t.aanFeatures.r).css("display",e?"block":"none"),Rt(t,null,"processing",[t,e])}function mt(t){var e=i(t.nTable);e.attr("role","grid");var n=t.oScroll;if(""===n.sX&&""===n.sY)return t.nTable;var o=n.sX,a=n.sY,s=t.oClasses,r=e.children("caption"),c=r.length?r[0]._captionSide:null,l=i(e[0].cloneNode(!1)),u=i(e[0].cloneNode(!1)),d=e.children("tfoot"),h="
    ",p=function(t){return t?Tt(t):null};n.sX&&"100%"===e.attr("width")&&e.removeAttr("width"),d.length||(d=null);var f=i(h,{"class":s.sScrollWrapper}).append(i(h,{"class":s.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:o?p(o):"100%"}).append(i(h,{"class":s.sScrollHeadInner}).css({"box-sizing":"content-box",width:n.sXInner||"100%"}).append(l.removeAttr("id").css("margin-left",0).append("top"===c?r:null).append(e.children("thead"))))).append(i(h,{"class":s.sScrollBody}).css({overflow:"auto",height:p(a),width:p(o)}).append(e));d&&f.append(i(h,{"class":s.sScrollFoot}).css({overflow:"hidden",border:0,width:o?p(o):"100%"}).append(i(h,{"class":s.sScrollFootInner}).append(u.removeAttr("id").css("margin-left",0).append("bottom"===c?r:null).append(e.children("tfoot")))));var m=f.children(),g=m[0],b=m[1],v=d?m[2]:null;return o&&i(b).scroll(function(t){var e=this.scrollLeft;g.scrollLeft=e,d&&(v.scrollLeft=e)}),t.nScrollHead=g,t.nScrollBody=b,t.nScrollFoot=v,t.aoDrawCallback.push({fn:gt,sName:"scrolling"}),f[0]}function gt(t){var e,n,o,a,s,r,c,l,u,d=t.oScroll,h=d.sX,p=d.sXInner,m=d.sY,g=d.iBarWidth,b=i(t.nScrollHead),v=b[0].style,M=b.children("div"),y=M[0].style,A=M.children("table"),_=t.nScrollBody,z=i(_),T=_.style,w=i(t.nScrollFoot),C=w.children("div"),N=C.children("table"),O=i(t.nTHead),S=i(t.nTable),x=S[0],L=x.style,D=t.nTFoot?i(t.nTFoot):null,k=t.oBrowser,q=k.bScrollOversize,W=[],E=[],B=[],I=function(t){var e=t.style;e.paddingTop="0",e.paddingBottom="0",e.borderTopWidth="0",e.borderBottomWidth="0",e.height=0};if(S.children("thead, tfoot").remove(),s=O.clone().prependTo(S),e=O.find("tr"),o=s.find("tr"),s.find("th, td").removeAttr("tabindex"),D&&(r=D.clone().prependTo(S),n=D.find("tr"),a=r.find("tr")),h||(T.width="100%",b[0].style.width="100%"),i.each(F(t,s),function(e,n){c=f(t,e),n.style.width=t.aoColumns[c].sWidth}),D&&bt(function(t){t.style.width=""},a),d.bCollapse&&""!==m&&(T.height=z[0].offsetHeight+O[0].offsetHeight+"px"),u=S.outerWidth(),""===h?(L.width="100%",q&&(S.find("tbody").height()>_.offsetHeight||"scroll"==z.css("overflow-y"))&&(L.width=Tt(S.outerWidth()-g))):""!==p?L.width=Tt(p):u==z.width()&&z.height()u-g&&(L.width=Tt(u))):L.width=Tt(u),u=S.outerWidth(),bt(I,o),bt(function(t){B.push(t.innerHTML),W.push(Tt(i(t).css("width")))},o),bt(function(t,e){t.style.width=W[e]},e),i(o).height(0),D&&(bt(I,a),bt(function(t){E.push(Tt(i(t).css("width")))},a),bt(function(t,e){t.style.width=E[e]},n),i(a).height(0)),bt(function(t,e){t.innerHTML='
    '+B[e]+"
    ",t.style.width=W[e]},o),D&&bt(function(t,e){t.innerHTML="",t.style.width=E[e]},a),S.outerWidth()_.offsetHeight||"scroll"==z.css("overflow-y")?u+g:u,q&&(_.scrollHeight>_.offsetHeight||"scroll"==z.css("overflow-y"))&&(L.width=Tt(l-g)),""!==h&&""===p||Et(t,1,"Possible column misalignment",6)):l="100%",T.width=Tt(l),v.width=Tt(l),D&&(t.nScrollFoot.style.width=Tt(l)),m||q&&(T.height=Tt(x.offsetHeight+g)),m&&d.bCollapse){T.height=Tt(m);var P=h&&x.offsetWidth>_.offsetWidth?g:0;x.offsetHeight<_.offsetHeight&&(T.height=Tt(x.offsetHeight+P))}var X=S.outerWidth();A[0].style.width=Tt(X),y.width=Tt(X);var R=S.height()>_.clientHeight||"scroll"==z.css("overflow-y"),H="padding"+(k.bScrollbarLeft?"Left":"Right");y[H]=R?g+"px":"0px",D&&(N[0].style.width=Tt(X),C[0].style.width=Tt(X),C[0].style[H]=R?g+"px":"0px"),z.scroll(),!t.bSorted&&!t.bFiltered||t._drawHold||(_.scrollTop=0)}function bt(t,e,n){for(var i,o,a=0,s=0,r=e.length;s"));z.find("tfoot th, tfoot td").css("width","");var T=z.find("tbody tr");for(M=F(e,z.find("thead")[0]),n=0;n").css("width",Tt(t)).appendTo(n||e.body),a=o[0].offsetWidth; +return o.remove(),a}function At(t,e){var n=t.oScroll;if(n.sX||n.sY){var o=n.sX?0:n.iBarWidth;e.style.width=Tt(i(e).outerWidth()-o)}}function _t(t,e){var n=zt(t,e);if(n<0)return null;var o=t.aoData[n];return o.nTr?o.anCells[e]:i("").html(T(t,n,e,"display"))[0]}function zt(t,e){for(var n,i=-1,o=-1,a=0,s=t.aoData.length;ai&&(i=n.length,o=a);return o}function Tt(t){return null===t?"0px":"number"==typeof t?t<0?"0px":t+"px":t.match(/\d$/)?t+"px":t}function wt(){if(!Vt.__scrollbarWidth){var t=i("

    ").css({width:"100%",height:200,padding:0})[0],e=i("

    ").css({position:"absolute",top:0,left:0,width:200,height:150,padding:0,overflow:"hidden",visibility:"hidden"}).append(t).appendTo("body"),n=t.offsetWidth;e.css("overflow","scroll");var o=t.offsetWidth;n===o&&(o=e[0].clientWidth),e.remove(),Vt.__scrollbarWidth=n-o}return Vt.__scrollbarWidth}function Ct(t){var e,o,a,s,r,c,l,u=[],d=t.aoColumns,h=t.aaSortingFixed,p=i.isPlainObject(h),f=[],m=function(t){t.length&&!i.isArray(t[0])?f.push(t):f.push.apply(f,t)};for(i.isArray(h)&&m(h),p&&h.pre&&m(h.pre),m(t.aaSorting),p&&h.post&&m(h.post),e=0;ei?1:0,0!==r)return"asc"===l.dir?r:-r;return n=s[t],i=s[e],ni?1:0}):u.sort(function(t,e){var n,i,o,l,u,d,h=a.length,p=c[t]._aSortData,f=c[e]._aSortData;for(o=0;oi?1:0})}t.bSorted=!0}function Ot(t){for(var e,n,i=t.aoColumns,o=Ct(t),a=t.oLanguage.oAria,s=0,r=i.length;s/g,""),d=c.nTh;d.removeAttribute("aria-sort"),c.bSortable?(o.length>0&&o[0].col==s?(d.setAttribute("aria-sort","asc"==o[0].dir?"ascending":"descending"),n=l[o[0].index+1]||l[0]):n=l[0],e=u+("asc"===n?a.sSortAscending:a.sSortDescending)):e=u,d.setAttribute("aria-label",e)}}function St(t,e,o,a){var s,r=t.aoColumns[e],c=t.aaSorting,l=r.asSorting,u=function(t,e){var o=t._idx;return o===n&&(o=i.inArray(t[1],l)),o+10&&s.time<+new Date-1e3*c)&&a.length===s.columns.length){for(t.oLoadedState=i.extend(!0,{},s),t._iDisplayStart=s.start,t.iInitDisplayStart=s.start,t._iDisplayLength=s.length,t.aaSorting=[],i.each(s.order,function(e,n){t.aaSorting.push(n[0]>=a.length?[0,n[1]]:n)}),i.extend(t.oPreviousSearch,it(s.search)),n=0,o=s.columns.length;n=n&&(e=n-i),e-=e%i,(i===-1||e<0)&&(e=0),t._iDisplayStart=e}function Ht(t,e){var n=t.renderer,o=Vt.ext.renderer[e];return i.isPlainObject(n)&&n[e]?o[n[e]]||o._:"string"==typeof n?o[n]||o._:o._}function jt(t){return t.oFeatures.bServerSide?"ssp":t.ajax||t.sAjaxSource?"ajax":"dom"}function Ut(t,e){var n=[],i=$e.numbers_length,o=Math.floor(i/2);return e<=i?n=fe(0,e):t<=o?(n=fe(0,i-2),n.push("ellipsis"),n.push(e-1)):t>=e-1-o?(n=fe(e-(i-2),e),n.splice(0,0,"ellipsis"),n.splice(0,0,0)):(n=fe(t-1,t+2),n.push("ellipsis"),n.push(e-1),n.splice(0,0,"ellipsis"),n.splice(0,0,0)),n.DT_el="span",n}function $t(t){i.each({num:function(e){return Je(e,t)},"num-fmt":function(e){return Je(e,t,ae)},"html-num":function(e){return Je(e,t,ee)},"html-num-fmt":function(e){return Je(e,t,ee,ae)}},function(e,n){Yt.type.order[e+t+"-pre"]=n,e.match(/^html\-/)&&(Yt.type.search[e+t]=Yt.type.search.html)})}function Jt(t){return function(){var e=[Wt(this[Vt.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return Vt.ext.internal[t].apply(this,e)}}var Vt,Yt,Kt,Gt,Qt,Zt={},te=/[\r\n]/g,ee=/<.*?>/g,ne=/^[\w\+\-]/,ie=/[\w\+\-]$/,oe=new RegExp("(\\"+["/",".","*","+","?","|","(",")","[","]","{","}","\\","$","^","-"].join("|\\")+")","g"),ae=/[',$£€¥%\u2009\u202F]/g,se=function(t){return!t||t===!0||"-"===t},re=function(t){var e=parseInt(t,10);return!isNaN(e)&&isFinite(t)?e:null},ce=function(t,e){return Zt[e]||(Zt[e]=new RegExp(tt(e),"g")),"string"==typeof t&&"."!==e?t.replace(/\./g,"").replace(Zt[e],"."):t},le=function(t,e,n){var i="string"==typeof t;return e&&i&&(t=ce(t,e)),n&&i&&(t=t.replace(ae,"")),se(t)||!isNaN(parseFloat(t))&&isFinite(t)},ue=function(t){return se(t)||"string"==typeof t},de=function(t,e,n){if(se(t))return!0;var i=ue(t);return i?!!le(ge(t),e,n)||null:null},he=function(t,e,i){var o=[],a=0,s=t.length;if(i!==n)for(;a")[0],_e=Ae.textContent!==n,ze=/<.*?>/g;Vt=function(t){this.$=function(t,e){return this.api(!0).$(t,e)},this._=function(t,e){return this.api(!0).rows(t,e).data()},this.api=function(t){return new Kt(t?Wt(this[Yt.iApiIndex]):this)},this.fnAddData=function(t,e){var o=this.api(!0),a=i.isArray(t)&&(i.isArray(t[0])||i.isPlainObject(t[0]))?o.rows.add(t):o.row.add(t);return(e===n||e)&&o.draw(),a.flatten().toArray()},this.fnAdjustColumnSizing=function(t){var e=this.api(!0).columns.adjust(),i=e.settings()[0],o=i.oScroll;t===n||t?e.draw(!1):""===o.sX&&""===o.sY||gt(i)},this.fnClearTable=function(t){var e=this.api(!0).clear();(t===n||t)&&e.draw()},this.fnClose=function(t){this.api(!0).row(t).child.hide()},this.fnDeleteRow=function(t,e,i){var o=this.api(!0),a=o.rows(t),s=a.settings()[0],r=s.aoData[a[0][0]];return a.remove(),e&&e.call(this,s,r),(i===n||i)&&o.draw(),r},this.fnDestroy=function(t){this.api(!0).destroy(t)},this.fnDraw=function(t){this.api(!0).draw(!t)},this.fnFilter=function(t,e,i,o,a,s){var r=this.api(!0);null===e||e===n?r.search(t,i,o,s):r.column(e).search(t,i,o,s),r.draw()},this.fnGetData=function(t,e){var i=this.api(!0);if(t!==n){var o=t.nodeName?t.nodeName.toLowerCase():"";return e!==n||"td"==o||"th"==o?i.cell(t,e).data():i.row(t).data()||null}return i.data().toArray()},this.fnGetNodes=function(t){var e=this.api(!0);return t!==n?e.row(t).node():e.rows().nodes().flatten().toArray()},this.fnGetPosition=function(t){var e=this.api(!0),n=t.nodeName.toUpperCase();if("TR"==n)return e.row(t).index();if("TD"==n||"TH"==n){var i=e.cell(t).index();return[i.row,i.columnVisible,i.column]}return null},this.fnIsOpen=function(t){return this.api(!0).row(t).child.isShown()},this.fnOpen=function(t,e,n){return this.api(!0).row(t).child(e,n).show().child()[0]},this.fnPageChange=function(t,e){var i=this.api(!0).page(t);(e===n||e)&&i.draw(!1)},this.fnSetColumnVis=function(t,e,i){var o=this.api(!0).column(t).visible(e);(i===n||i)&&o.columns.adjust().draw()},this.fnSettings=function(){return Wt(this[Yt.iApiIndex])},this.fnSort=function(t){this.api(!0).order(t).draw()},this.fnSortListener=function(t,e,n){this.api(!0).order.listener(t,e,n)},this.fnUpdate=function(t,e,i,o,a){var s=this.api(!0);return i===n||null===i?s.row(e).data(t):s.cell(e,i).data(t),(a===n||a)&&s.columns.adjust(),(o===n||o)&&s.draw(),0},this.fnVersionCheck=Yt.fnVersionCheck;var e=this,o=t===n,u=this.length;o&&(t={}),this.oApi=this.internal=Yt.internal;for(var p in Vt.ext.internal)p&&(this[p]=Jt(p));return this.each(function(){var p,f={},m=u>1?It(f,t,!0):t,g=0,b=this.getAttribute("id"),v=!1,_=Vt.defaults;if("table"!=this.nodeName.toLowerCase())return void Et(null,0,"Non-table node initialisation ("+this.nodeName+")",2);r(_),c(_.column),a(_,_,!0),a(_.column,_.column,!0),a(_,m);var z=Vt.settings;for(g=0,p=z.length;gt<"F"ip>'),C.renderer?i.isPlainObject(C.renderer)&&!C.renderer.header&&(C.renderer.header="jqueryui"):C.renderer="jqueryui"):i.extend(N,Vt.ext.classes,m.oClasses),i(this).addClass(N.sTable),""===C.oScroll.sX&&""===C.oScroll.sY||(C.oScroll.iBarWidth=wt()),C.oScroll.sX===!0&&(C.oScroll.sX="100%"),C.iInitDisplayStart===n&&(C.iInitDisplayStart=m.iDisplayStart,C._iDisplayStart=m.iDisplayStart),null!==m.iDeferLoading){C.bDeferLoading=!0;var O=i.isArray(m.iDeferLoading);C._iRecordsDisplay=O?m.iDeferLoading[0]:m.iDeferLoading,C._iRecordsTotal=O?m.iDeferLoading[1]:m.iDeferLoading}var S=C.oLanguage;i.extend(!0,S,m.oLanguage),""!==S.sUrl&&(i.ajax({dataType:"json",url:S.sUrl,success:function(t){s(t),a(_.oLanguage,t),i.extend(!0,S,t),rt(C)},error:function(){rt(C)}}),v=!0),null===m.asStripeClasses&&(C.asStripeClasses=[N.sStripeOdd,N.sStripeEven]);var x=C.asStripeClasses,L=i("tbody tr:eq(0)",this);i.inArray(!0,i.map(x,function(t,e){return L.hasClass(t)}))!==-1&&(i("tbody tr",this).removeClass(x.join(" ")),C.asDestroyStripes=x.slice());var D,q=[],W=this.getElementsByTagName("thead");if(0!==W.length&&(R(C.aoHeader,W[0]),q=F(C)),null===m.aoColumns)for(D=[],g=0,p=q.length;g").appendTo(this)),C.nTHead=X[0];var H=i(this).children("tbody");0===H.length&&(H=i("").appendTo(this)),C.nTBody=H[0];var j=i(this).children("tfoot");if(0===j.length&&P.length>0&&(""!==C.oScroll.sX||""!==C.oScroll.sY)&&(j=i("").appendTo(this)),0===j.length||0===j.children().length?i(this).addClass(N.sNoFooter):j.length>0&&(C.nTFoot=j[0],R(C.aoFooter,C.nTFoot)),m.aaData)for(g=0;gt?new Kt(e[t],this[t]):null},filter:function(t){var e=[];if(we.filter)e=we.filter.call(this,t,this);else for(var n=0,i=this.length;n0)return t[0].json}),Gt("ajax.params()",function(){var t=this.context;if(t.length>0)return t[0].oAjaxData}),Gt("ajax.reload()",function(t,e){return this.iterator("table",function(n){Oe(n,e===!1,t)})}),Gt("ajax.url()",function(t){var e=this.context;return t===n?0===e.length?n:(e=e[0],e.ajax?i.isPlainObject(e.ajax)?e.ajax.url:e.ajax:e.sAjaxSource):this.iterator("table",function(e){i.isPlainObject(e.ajax)?e.ajax.url=t:e.ajax=t})}),Gt("ajax.url().load()",function(t,e){return this.iterator("table",function(n){Oe(n,e===!1,t)})});var Se=function(t,e){var o,a,s,r,c,l,u=[],d=typeof t;for(t&&"string"!==d&&"function"!==d&&t.length!==n||(t=[t]),s=0,r=t.length;s0)return t[0]=t[e],t.length=1,t.context=[t.context[e]],t;return t.length=0,t},De=function(t,e){var n,o,a,s=[],r=t.aiDisplay,c=t.aiDisplayMaster,l=e.search,u=e.order,d=e.page;if("ssp"==jt(t))return"removed"===l?[]:fe(0,c.length);if("current"==d)for(n=t._iDisplayStart,o=t.fnDisplayEnd();n=0&&"applied"==l)&&s.push(n));return s},ke=function(t,e,n){return Se(e,function(e){var o=re(e);if(null!==o&&!n)return[o];var a=De(t,n);if(null!==o&&i.inArray(o,a)!==-1)return[o];if(!e)return a;if("function"==typeof e)return i.map(a,function(n){var i=t.aoData[n];return e(n,i._aData,i.nTr)?n:null});var s=me(pe(t.aoData,a,"nTr"));return e.nodeName&&i.inArray(e,s)!==-1?[e._DT_RowIndex]:i(s).filter(e).map(function(){return this._DT_RowIndex}).toArray()})};Gt("rows()",function(t,e){t===n?t="":i.isPlainObject(t)&&(e=t,t=""),e=xe(e);var o=this.iterator("table",function(n){return ke(n,t,e)},1);return o.selector.rows=t,o.selector.opts=e,o}),Gt("rows().nodes()",function(){return this.iterator("row",function(t,e){return t.aoData[e].nTr||n},1)}),Gt("rows().data()",function(){return this.iterator(!0,"rows",function(t,e){return pe(t.aoData,e,"_aData")},1)}),Qt("rows().cache()","row().cache()",function(t){return this.iterator("row",function(e,n){var i=e.aoData[n];return"search"===t?i._aFilterData:i._aSortData},1)}),Qt("rows().invalidate()","row().invalidate()",function(t){return this.iterator("row",function(e,n){D(e,n,t)})}),Qt("rows().indexes()","row().index()",function(){return this.iterator("row",function(t,e){return e},1)}),Qt("rows().remove()","row().remove()",function(){var t=this;return this.iterator("row",function(e,n,o){var a=e.aoData;a.splice(n,1);for(var s=0,r=a.length;s").addClass(n);i("td",o).addClass(n).html(e)[0].colSpan=g(t),a.push(o[0])}};if(i.isArray(n)||n instanceof i)for(var r=0,c=n.length;r0&&(e.on(i,function(n,i){t===i&&e.rows({page:"current"}).eq(0).each(function(t){var e=s[t];e._detailsShow&&e._details.insertAfter(e.nTr)})}),e.on(o,function(e,n,i,o){if(t===n)for(var a,r=g(n),c=0,l=s.length;c=0?r:o.length+r];if("function"==typeof e){var c=De(t,n);return i.map(o,function(n,i){return e(i,Fe(t,i,0,0,c),s[i])?i:null})}var l="string"==typeof e?e.match(Re):"";if(!l)return i(s).filter(e).map(function(){return i.inArray(this,s)}).toArray();switch(l[2]){case"visIdx":case"visible":var u=parseInt(l[1],10);if(u<0){var d=i.map(o,function(t,e){return t.bVisible?e:null});return[d[d.length+u]]}return[f(t,u)];case"name":return i.map(a,function(t,e){return t===l[1]?e:null})}})},je=function(t,e,o,a){var s,r,c,l,u=t.aoColumns,d=u[e],h=t.aoData;if(o===n)return d.bVisible;if(d.bVisible!==o){if(o){var f=i.inArray(!0,he(u,"bVisible"),e+1);for(r=0,c=h.length;rn;return!0},Vt.isDataTable=Vt.fnIsDataTable=function(t){var e=i(t).get(0),n=!1;return i.each(Vt.settings,function(t,i){i.nTable!==e&&i.nScrollHead!==e&&i.nScrollFoot!==e||(n=!0)}),n},Vt.tables=Vt.fnTables=function(t){return i.map(Vt.settings,function(e){if(!t||t&&i(e.nTable).is(":visible"))return e.nTable})},Vt.util={throttle:Mt,escapeRegex:tt},Vt.camelToHungarian=a,Gt("$()",function(t,e){var n=this.rows(e).nodes(),o=i(n);return i([].concat(o.filter(t).toArray(),o.find(t).toArray()))}),i.each(["on","one","off"],function(t,e){Gt(e+"()",function(){var t=Array.prototype.slice.call(arguments);t[0].match(/\.dt\b/)||(t[0]+=".dt");var n=i(this.tables().nodes());return n[e].apply(n,t),this})}),Gt("clear()",function(){return this.iterator("table",function(t){x(t)})}),Gt("settings()",function(){return new Kt(this.context,this.context)}),Gt("data()",function(){return this.iterator("table",function(t){return he(t.aoData,"_aData")}).flatten()}),Gt("destroy()",function(e){return e=e||!1,this.iterator("table",function(n){var o,a=n.nTableWrapper.parentNode,s=n.oClasses,r=n.nTable,c=n.nTBody,l=n.nTHead,u=n.nTFoot,d=i(r),h=i(c),p=i(n.nTableWrapper),f=i.map(n.aoData,function(t){return t.nTr});n.bDestroying=!0,Rt(n,"aoDestroyCallback","destroy",[n]),e||new Kt(n).columns().visible(!0),p.unbind(".DT").find(":not(tbody *)").unbind(".DT"),i(t).unbind(".DT-"+n.sInstance),r!=l.parentNode&&(d.children("thead").detach(),d.append(l)),u&&r!=u.parentNode&&(d.children("tfoot").detach(),d.append(u)),d.detach(),p.detach(),n.aaSorting=[],n.aaSortingFixed=[],Lt(n),i(f).removeClass(n.asStripeClasses.join(" ")),i("th, td",l).removeClass(s.sSortable+" "+s.sSortableAsc+" "+s.sSortableDesc+" "+s.sSortableNone),n.bJUI&&(i("th span."+s.sSortIcon+", td span."+s.sSortIcon,l).detach(),i("th, td",l).each(function(){var t=i("div."+s.sSortJUIWrapper,this);i(this).append(t.contents()),t.detach()})),!e&&a&&a.insertBefore(r,n.nTableReinsertBefore),h.children().detach(),h.append(f),d.css("width",n.sDestroyWidth).removeClass(s.sTable),o=n.asDestroyStripes.length,o&&h.children().each(function(t){i(this).addClass(n.asDestroyStripes[t%o])});var m=i.inArray(n,Vt.settings);m!==-1&&Vt.settings.splice(m,1)})}),Vt.version="1.10.4",Vt.settings=[],Vt.models={},Vt.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0},Vt.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null},Vt.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null},Vt.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bJQueryUI:!1,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(t){return t.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(t){try{return JSON.parse((t.iStateDuration===-1?sessionStorage:localStorage).getItem("DataTables_"+t.sInstance+"_"+location.pathname))}catch(e){}},fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(t,e){try{(t.iStateDuration===-1?sessionStorage:localStorage).setItem("DataTables_"+t.sInstance+"_"+location.pathname,JSON.stringify(e))}catch(n){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:i.extend({},Vt.models.oSearch),sAjaxDataProp:"data",sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null},o(Vt.defaults),Vt.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null},o(Vt.defaults.column),Vt.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:n,oAjaxData:n,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,bJUI:null,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==jt(this)?1*this._iRecordsTotal:this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==jt(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var t=this._iDisplayLength,e=this._iDisplayStart,n=e+t,i=this.aiDisplay.length,o=this.oFeatures,a=o.bPaginate;return o.bServerSide?a===!1||t===-1?e+i:Math.min(e+t,this._iRecordsDisplay):!a||n>i||t===-1?i:n},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{}},Vt.ext=Yt={classes:{},errMode:"alert",feature:[],search:[],internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:Vt.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:Vt.version},i.extend(Yt,{afnFiltering:Yt.search,aTypes:Yt.type.detect,ofnSearch:Yt.type.search,oSort:Yt.type.order,afnSortData:Yt.order,aoFeatures:Yt.feature,oApi:Yt.internal,oStdClasses:Yt.classes,oPagination:Yt.pager}),i.extend(Vt.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sJUIHeader:"",sJUIFooter:""}),function(){var t="";t="";var e=t+"ui-state-default",n=t+"css_right ui-icon ui-icon-",o=t+"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix";i.extend(Vt.ext.oJUIClasses,Vt.ext.classes,{sPageButton:"fg-button ui-button "+e,sPageButtonActive:"ui-state-disabled",sPageButtonDisabled:"ui-state-disabled",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sSortAsc:e+" sorting_asc",sSortDesc:e+" sorting_desc",sSortable:e+" sorting",sSortableAsc:e+" sorting_asc_disabled",sSortableDesc:e+" sorting_desc_disabled",sSortableNone:e+" sorting_disabled",sSortJUIAsc:n+"triangle-1-n",sSortJUIDesc:n+"triangle-1-s",sSortJUI:n+"carat-2-n-s",sSortJUIAscAllowed:n+"carat-1-n",sSortJUIDescAllowed:n+"carat-1-s",sSortJUIWrapper:"DataTables_sort_wrapper",sSortIcon:"DataTables_sort_icon",sScrollHead:"dataTables_scrollHead "+e,sScrollFoot:"dataTables_scrollFoot "+e,sHeaderTH:e,sFooterTH:e,sJUIHeader:o+" ui-corner-tl ui-corner-tr",sJUIFooter:o+" ui-corner-bl ui-corner-br"})}();var $e=Vt.ext.pager;i.extend($e,{simple:function(t,e){return["previous","next"]},full:function(t,e){return["first","previous","next","last"]},simple_numbers:function(t,e){return["previous",Ut(t,e),"next"]},full_numbers:function(t,e){return["first","previous",Ut(t,e),"next","last"]},_numbers:Ut,numbers_length:7}),i.extend(!0,Vt.ext.renderer,{pageButton:{_:function(t,n,o,a,s,r){var c,l,u=t.oClasses,d=t.oLanguage.oPaginate,h=0,p=function(e,n){var a,f,m,g,b=function(e){ht(t,e.data.action,!0)};for(a=0,f=n.length;a").appendTo(e);p(v,g)}else{switch(c="",l="",g){case"ellipsis":e.append("");break;case"first":c=d.sFirst,l=g+(s>0?"":" "+u.sPageButtonDisabled);break;case"previous":c=d.sPrevious,l=g+(s>0?"":" "+u.sPageButtonDisabled);break;case"next":c=d.sNext,l=g+(s",{"class":u.sPageButton+" "+l,"aria-controls":t.sTableId,"data-dt-idx":h,tabindex:t.iTabIndex,id:0===o&&"string"==typeof g?t.sTableId+"_"+g:null}).html(c).appendTo(e),Pt(m,{action:g},b),h++)}};try{var f=i(e.activeElement).data("dt-idx");p(i(n).empty(),a),null!==f&&i(n).find("[data-dt-idx="+f+"]").focus()}catch(m){}}}}),i.extend(Vt.ext.type.detect,[function(t,e){var n=e.oLanguage.sDecimal;return le(t,n)?"num"+n:null},function(t,e){if(t&&!(t instanceof Date)&&(!ne.test(t)||!ie.test(t)))return null;var n=Date.parse(t);return null!==n&&!isNaN(n)||se(t)?"date":null},function(t,e){var n=e.oLanguage.sDecimal;return le(t,n,!0)?"num-fmt"+n:null},function(t,e){var n=e.oLanguage.sDecimal;return de(t,n)?"html-num"+n:null},function(t,e){var n=e.oLanguage.sDecimal;return de(t,n,!0)?"html-num-fmt"+n:null},function(t,e){return se(t)||"string"==typeof t&&t.indexOf("<")!==-1?"html":null}]),i.extend(Vt.ext.type.search,{html:function(t){return se(t)?t:"string"==typeof t?t.replace(te," ").replace(ee,""):""},string:function(t){return se(t)?t:"string"==typeof t?t.replace(te," "):t}});var Je=function(t,e,n,i){return 0===t||t&&"-"!==t?(e&&(t=ce(t,e)),t.replace&&(n&&(t=t.replace(n,"")),i&&(t=t.replace(i,""))),1*t):-(1/0)};return i.extend(Yt.type.order,{"date-pre":function(t){return Date.parse(t)||0},"html-pre":function(t){return se(t)?"":t.replace?t.replace(/<.*?>/g,"").toLowerCase():t+""},"string-pre":function(t){return se(t)?"":"string"==typeof t?t.toLowerCase():t.toString?t.toString():""},"string-asc":function(t,e){return te?1:0},"string-desc":function(t,e){return te?-1:0}}),$t(""),i.extend(!0,Vt.ext.renderer,{header:{_:function(t,e,n,o){i(t.nTable).on("order.dt.DT",function(i,a,s,r){if(t===a){var c=n.idx;e.removeClass(n.sSortingClass+" "+o.sSortAsc+" "+o.sSortDesc).addClass("asc"==r[c]?o.sSortAsc:"desc"==r[c]?o.sSortDesc:n.sSortingClass)}})},jqueryui:function(t,e,n,o){i("
    ").addClass(o.sSortJUIWrapper).append(e.contents()).append(i("").addClass(o.sSortIcon+" "+n.sSortingClassJUI)).appendTo(e),i(t.nTable).on("order.dt.DT",function(i,a,s,r){if(t===a){var c=n.idx;e.removeClass(o.sSortAsc+" "+o.sSortDesc).addClass("asc"==r[c]?o.sSortAsc:"desc"==r[c]?o.sSortDesc:n.sSortingClass),e.find("span."+o.sSortIcon).removeClass(o.sSortJUIAsc+" "+o.sSortJUIDesc+" "+o.sSortJUI+" "+o.sSortJUIAscAllowed+" "+o.sSortJUIDescAllowed).addClass("asc"==r[c]?o.sSortJUIAsc:"desc"==r[c]?o.sSortJUIDesc:n.sSortingClassJUI)}})}}}),Vt.render={number:function(t,e,n,i){return{display:function(o){var a=o<0?"-":"";o=Math.abs(parseFloat(o));var s=parseInt(o,10),r=n?e+(o-s).toFixed(n).substring(2):"";return a+(i||"")+s.toString().replace(/\B(?=(\d{3})+(?!\d))/g,t)+r}}}},i.extend(Vt.ext.internal,{_fnExternApiFunc:Jt,_fnBuildAjax:H,_fnAjaxUpdate:j,_fnAjaxParameters:U,_fnAjaxUpdateDraw:$,_fnAjaxDataSrc:J,_fnAddColumn:d,_fnColumnOptions:h,_fnAdjustColumnSizing:p,_fnVisibleToColumnIndex:f,_fnColumnIndexToVisible:m,_fnVisbleColumns:g,_fnGetColumns:b,_fnColumnTypes:v,_fnApplyColumnDefs:M,_fnHungarianMap:o,_fnCamelToHungarian:a,_fnLanguageCompat:s,_fnBrowserDetect:l,_fnAddData:y,_fnAddTr:A,_fnNodeToDataIndex:_,_fnNodeToColumnIndex:z,_fnGetCellData:T,_fnSetCellData:w,_fnSplitObjNotation:C,_fnGetObjectDataFn:N,_fnSetObjectDataFn:O,_fnGetDataMaster:S,_fnClearTable:x,_fnDeleteIndex:L,_fnInvalidate:D,_fnGetRowElements:k,_fnCreateTr:q,_fnBuildHead:E,_fnDrawHead:B,_fnDraw:I,_fnReDraw:P,_fnAddOptionsHtml:X,_fnDetectHeader:R,_fnGetUniqueThs:F,_fnFeatureHtmlFilter:V,_fnFilterComplete:Y,_fnFilterCustom:K,_fnFilterColumn:G,_fnFilter:Q,_fnFilterCreateSearch:Z,_fnEscapeRegex:tt,_fnFilterData:et,_fnFeatureHtmlInfo:ot,_fnUpdateInfo:at,_fnInfoMacros:st,_fnInitialise:rt,_fnInitComplete:ct,_fnLengthChange:lt,_fnFeatureHtmlLength:ut,_fnFeatureHtmlPaginate:dt,_fnPageChange:ht,_fnFeatureHtmlProcessing:pt,_fnProcessingDisplay:ft,_fnFeatureHtmlTable:mt,_fnScrollDraw:gt,_fnApplyToChildren:bt,_fnCalculateColumnWidths:vt,_fnThrottle:Mt,_fnConvertToWidth:yt,_fnScrollingWidthAdjust:At,_fnGetWidestNode:_t,_fnGetMaxLenString:zt,_fnStringToCss:Tt,_fnScrollBarWidth:wt,_fnSortFlatten:Ct,_fnSort:Nt,_fnSortAria:Ot,_fnSortListener:St,_fnSortAttachListener:xt,_fnSortingClasses:Lt,_fnSortData:Dt,_fnSaveState:kt,_fnLoadState:qt,_fnSettingsFromNode:Wt,_fnLog:Et,_fnMap:Bt,_fnBindAction:Pt,_fnCallbackReg:Xt,_fnCallbackFire:Rt,_fnLengthOverflow:Ft,_fnRenderer:Ht,_fnDataSource:jt,_fnRowAttributes:W,_fnCalculateEnd:function(){}}),i.fn.dataTable=Vt,i.fn.dataTableSettings=Vt.settings,i.fn.dataTableExt=Vt.ext,i.fn.DataTable=function(t){return i(this).dataTable(t).api()},i.each(Vt,function(t,e){i.fn.DataTable[t]=e}),i.fn.dataTable})}(window,document),function(t){"function"==typeof define&&define.amd?define(["jquery","datatables"],t):t(jQuery)}(function(t){t.extend(!0,t.fn.dataTable.defaults,{sDom:"<'row'<'col-sm-12'<'pull-right'f><'pull-left'l>r<'clearfix'>>>t<'row'<'col-sm-12'<'pull-left'i><'pull-right'p><'clearfix'>>>",sPaginationType:"bs_normal",oLanguage:{sIconClassFirst:"glyphicon glyphicon-backward",sIconClassLast:"glyphicon glyphicon-forward",sIconClassPrevious:"glyphicon glyphicon-chevron-left",sIconClassNext:"glyphicon glyphicon-chevron-right"}}),t.extend(t.fn.dataTableExt.oStdClasses,{sWrapper:"dataTables_wrapper form-inline"}),t.fn.dataTableExt.oApi.fnPagingInfo=function(t){return{iStart:t._iDisplayStart,iEnd:t.fnDisplayEnd(),iLength:t._iDisplayLength,iTotal:t.fnRecordsTotal(),iFilteredTotal:t.fnRecordsDisplay(),iPage:t._iDisplayLength===-1?0:Math.ceil(t._iDisplayStart/t._iDisplayLength),iTotalPages:t._iDisplayLength===-1?0:Math.ceil(t.fnRecordsDisplay()/t._iDisplayLength)}},t.extend(t.fn.dataTableExt.oPagination,{bs_normal:{fnInit:function(e,n,i){var o=e.oLanguage.oPaginate,a=function(t){t.preventDefault(),e.oApi._fnPageChange(e,t.data.action)&&i(e)};t(n).append('');var s=t("a",n);t(s[0]).bind("click.DT",{action:"previous"},a),t(s[1]).bind("click.DT",{action:"next"},a)},fnUpdate:function(e,n){var i,o,a,s,r,c,l=5,u=e.oInstance.fnPagingInfo(),d=e.aanFeatures.p,h=Math.floor(l/2);for(u.iTotalPages=u.iTotalPages-h?(r=u.iTotalPages-l+1,c=u.iTotalPages):(r=u.iPage-h+1,c=r+l-1),i=0,o=d.length;i'+a+"").insertBefore(t("li:last",d[i])[0]).bind("click",function(i){i.preventDefault(),e.oApi._fnPageChange(e,parseInt(t("a",this).text(),10)-1)&&n(e)});0===u.iPage?t("li:first",d[i]).addClass("disabled"):t("li:first",d[i]).removeClass("disabled"),u.iPage===u.iTotalPages-1||0===u.iTotalPages?t("li:last",d[i]).addClass("disabled"):t("li:last",d[i]).removeClass("disabled")}}},bs_two_button:{fnInit:function(e,n,i){var o=e.oLanguage.oPaginate,a=(e.oClasses,function(t){e.oApi._fnPageChange(e,t.data.action)&&i(e)}),s='';t(n).append(s);var r=t("a",n),c=r[0],l=r[1];e.oApi._fnBindAction(c,{action:"previous"},a),e.oApi._fnBindAction(l,{action:"next"},a),e.aanFeatures.p||(n.id=e.sTableId+"_paginate",c.id=e.sTableId+"_previous",l.id=e.sTableId+"_next",c.setAttribute("aria-controls",e.sTableId),l.setAttribute("aria-controls",e.sTableId))},fnUpdate:function(e,n){if(e.aanFeatures.p)for(var i=e.oInstance.fnPagingInfo(),o=(e.oClasses,e.aanFeatures.p),a=0,s=o.length;a
  •  '+o.sFirst+'
  •  '+o.sPrevious+'
  • '+o.sNext+' 
  • '+o.sLast+' 
  • ');var r=t("a",n),c=r[0],l=r[1],u=r[2],d=r[3];e.oApi._fnBindAction(c,{action:"first"},s),e.oApi._fnBindAction(l,{action:"previous"},s),e.oApi._fnBindAction(u,{action:"next"},s),e.oApi._fnBindAction(d,{action:"last"},s),e.aanFeatures.p||(n.id=e.sTableId+"_paginate",c.id=e.sTableId+"_first",l.id=e.sTableId+"_previous",u.id=e.sTableId+"_next",d.id=e.sTableId+"_last")},fnUpdate:function(e,n){if(e.aanFeatures.p)for(var i=e.oInstance.fnPagingInfo(),o=(e.oClasses,e.aanFeatures.p),a=0,s=o.length;a
  • '+o.sFirst+'
  • '+o.sPrevious+'
  • '+o.sNext+'
  • '+o.sLast+"
  • ");var r=t("a",n),c=r[0],l=r[1],u=r[2],d=r[3];e.oApi._fnBindAction(c,{action:"first"},s),e.oApi._fnBindAction(l,{action:"previous"},s),e.oApi._fnBindAction(u,{action:"next"},s),e.oApi._fnBindAction(d,{action:"last"},s),e.aanFeatures.p||(n.id=e.sTableId+"_paginate",c.id=e.sTableId+"_first",l.id=e.sTableId+"_previous",u.id=e.sTableId+"_next",d.id=e.sTableId+"_last")},fnUpdate:function(e,n){if(e.aanFeatures.p){var i,o,a,s,r,c=e.oInstance.fnPagingInfo(),l=t.fn.dataTableExt.oPagination.iFullNumbersShowPages,u=Math.floor(l/2),d=Math.ceil(e.fnRecordsDisplay()/e._iDisplayLength),h=Math.ceil(e._iDisplayStart/e._iDisplayLength)+1,p="",f=(e.oClasses,e.aanFeatures.p);for(e._iDisplayLength===-1?(i=1,o=1,h=1):d=d-u?(i=d-l+1,o=d):(i=h-Math.ceil(l/2)+1,o=i+l-1),a=i;a<=o;a++)p+=h!==a?'
  • '+e.fnFormatNumber(a)+"
  • ":'
  • '+e.fnFormatNumber(a)+"
  • ";for(a=0,s=f.length;a",o[0];);return 4d.a.l(e,t[n])&&e.push(t[n]);return e},ya:function(t,e){t=t||[];for(var n=[],i=0,o=t.length;ii?n&&t.push(e):n||t.splice(i,1)},na:l,extend:r,ra:c,sa:l?c:r,A:s,Oa:function(t,e){if(!t)return t;var n,i={};for(n in t)t.hasOwnProperty(n)&&(i[n]=e(t[n],n,t));return i},Fa:function(t){for(;t.firstChild;)d.removeNode(t.firstChild)},ec:function(t){t=d.a.R(t);for(var e=n.createElement("div"),i=0,o=t.length;if?t.setAttribute("selected",e):t.selected=e},ta:function(e){return null===e||e===t?"":e.trim?e.trim():e.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},oc:function(t,e){for(var n=[],i=(t||"").split(e),o=0,a=i.length;ot.length)&&t.substring(0,e.length)===e},Sb:function(t,e){if(t===e)return!0;if(11===t.nodeType)return!1;if(e.contains)return e.contains(3===t.nodeType?t.parentNode:t);if(e.compareDocumentPosition)return 16==(16&e.compareDocumentPosition(t));for(;t&&t!=e;)t=t.parentNode;return!!t},Ea:function(t){return d.a.Sb(t,t.ownerDocument.documentElement)},eb:function(t){return!!d.a.hb(t,d.a.Ea)},B:function(t){return t&&t.tagName&&t.tagName.toLowerCase()},q:function(t,e,n){var i=f&&p[e];if(!i&&o)o(t).bind(e,n);else if(i||"function"!=typeof t.addEventListener){if("undefined"==typeof t.attachEvent)throw Error("Browser doesn't support addEventListener or attachEvent");var a=function(e){n.call(t,e)},s="on"+e;t.attachEvent(s,a),d.a.u.ja(t,function(){t.detachEvent(s,a)})}else t.addEventListener(e,n,!1)},ha:function(t,i){if(!t||!t.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var a;if("input"===d.a.B(t)&&t.type&&"click"==i.toLowerCase()?(a=t.type,a="checkbox"==a||"radio"==a):a=!1,o&&!a)o(t).trigger(i);else if("function"==typeof n.createEvent){if("function"!=typeof t.dispatchEvent)throw Error("The supplied element doesn't support dispatchEvent");a=n.createEvent(h[i]||"HTMLEvents"),a.initEvent(i,!0,!0,e,0,0,0,0,0,!1,!1,!1,!1,0,t),t.dispatchEvent(a)}else if(a&&t.click)t.click();else{if("undefined"==typeof t.fireEvent)throw Error("Browser doesn't support triggering events");t.fireEvent("on"+i)}},c:function(t){return d.v(t)?t():t},Sa:function(t){return d.v(t)?t.o():t},ua:function(t,e,n){if(e){var i=/\S+/g,o=t.className.match(i)||[];d.a.r(e.match(i),function(t){d.a.Y(o,t,n)}),t.className=o.join(" ")}},Xa:function(e,n){var i=d.a.c(n);null!==i&&i!==t||(i="");var o=d.e.firstChild(e);!o||3!=o.nodeType||d.e.nextSibling(o)?d.e.U(e,[e.ownerDocument.createTextNode(i)]):o.data=i,d.a.Vb(e)},Cb:function(t,e){if(t.name=e,7>=f)try{t.mergeAttributes(n.createElement(""),!1)}catch(i){}},Vb:function(t){9<=f&&(t=1==t.nodeType?t:t.parentNode,t.style&&(t.style.zoom=t.style.zoom))},Tb:function(t){if(f){var e=t.style.width;t.style.width=0,t.style.width=e}},ic:function(t,e){t=d.a.c(t),e=d.a.c(e);for(var n=[],i=t;i<=e;i++)n.push(i);return n},R:function(t){for(var e=[],n=0,i=t.length;n",""]||!a.indexOf("",""]||(!a.indexOf("",""]||[0,"",""],t="ignored
    "+a[1]+t+a[2]+"
    ","function"==typeof e.innerShiv?i.appendChild(e.innerShiv(t)):i.innerHTML=t;a[0]--;)i=i.lastChild;i=d.a.R(i.lastChild.childNodes)}return i},d.a.Va=function(e,n){if(d.a.Fa(e),n=d.a.c(n),null!==n&&n!==t)if("string"!=typeof n&&(n=n.toString()),o)o(e).html(n);else for(var i=d.a.Qa(n),a=0;a"},Hb:function(e,i){var o=n[e];if(o===t)throw Error("Couldn't find any memo with ID "+e+". Perhaps it's already been unmemoized.");try{return o.apply(null,i||[]),!0}finally{delete n[e]}},Ib:function(t,n){var i=[];e(t,i);for(var o=0,a=i.length;oa[0]?c+a[0]:a[0]),c);for(var c=1===l?c:Math.min(e+(a[1]||0),c),l=e+l-2,u=Math.max(c,l),h=[],p=[],f=2;ee;e++)t=t();return t})},d.toJSON=function(t,e,n){return t=d.Gb(t),d.a.Ya(t,e,n)},i.prototype={save:function(t,e){var n=d.a.l(this.keys,t);0<=n?this.ab[n]=e:(this.keys.push(t),this.ab.push(e))},get:function(e){return e=d.a.l(this.keys,e),0<=e?this.ab[e]:t}}}(),d.b("toJS",d.Gb),d.b("toJSON",d.toJSON),function(){d.i={p:function(e){switch(d.a.B(e)){case"option":return!0===e.__ko__hasDomDataOptionValue__?d.a.f.get(e,d.d.options.Pa):7>=d.a.oa?e.getAttributeNode("value")&&e.getAttributeNode("value").specified?e.value:e.text:e.value;case"select":return 0<=e.selectedIndex?d.i.p(e.options[e.selectedIndex]):t;default:return e.value}},X:function(e,n,i){switch(d.a.B(e)){case"option":switch(typeof n){case"string":d.a.f.set(e,d.d.options.Pa,t),"__ko__hasDomDataOptionValue__"in e&&delete e.__ko__hasDomDataOptionValue__,e.value=n;break;default:d.a.f.set(e,d.d.options.Pa,n),e.__ko__hasDomDataOptionValue__=!0,e.value="number"==typeof n?n:""}break;case"select":""!==n&&null!==n||(n=t);for(var o,a=-1,s=0,r=e.options.length;s=c){e&&s.push(n?{key:e,value:n.join("")}:{unknown:e}),e=n=c=0;continue}}else if(58===h){if(!n)continue}else if(47===h&&u&&1"===n.createComment("test").text,s=a?/^\x3c!--\s*ko(?:\s+([\s\S]+))?\s*--\x3e$/:/^\s*ko(?:\s+([\s\S]+))?\s*$/,r=a?/^\x3c!--\s*\/ko\s*--\x3e$/:/^\s*\/ko\s*$/,c={ul:!0,ol:!0};d.e={Q:{},childNodes:function(e){return t(e)?i(e):e.childNodes},da:function(e){if(t(e)){e=d.e.childNodes(e);for(var n=0,i=e.length;n=d.a.oa&&n in g?(n=g[n],o?e.removeAttribute(n):e[n]=i):o||e.setAttribute(n,i.toString()),"name"===n&&d.a.Cb(e,o?"":i.toString())})}},function(){d.d.checked={after:["value","attr"],init:function(e,n,i){function o(){return i.has("checkedValue")?d.a.c(i.get("checkedValue")):e.value}function a(){var t=e.checked,a=h?o():t;if(!d.ca.pa()&&(!c||t)){var s=d.k.t(n);l?u!==a?(t&&(d.a.Y(s,a,!0),d.a.Y(s,u,!1)),u=a):d.a.Y(s,a,t):d.g.va(s,i,"checked",a,!0)}}function s(){var t=d.a.c(n());e.checked=l?0<=d.a.l(t,o()):r?t:o()===t}var r="checkbox"==e.type,c="radio"==e.type;if(r||c){var l=r&&d.a.c(n())instanceof Array,u=l?o():t,h=c||l;c&&!e.name&&d.d.uniqueName.init(e,function(){return!0}),d.ba(a,null,{G:e}),d.a.q(e,"click",a),d.ba(s,null,{G:e})}}},d.g.W.checked=!0,d.d.checkedValue={update:function(t,e){t.value=d.a.c(e())}}}(),d.d.css={update:function(t,e){var n=d.a.c(e());"object"==typeof n?d.a.A(n,function(e,n){n=d.a.c(n),d.a.ua(t,e,n)}):(n=String(n||""),d.a.ua(t,t.__ko__cssValue,!1),t.__ko__cssValue=n,d.a.ua(t,n,!0))}},d.d.enable={update:function(t,e){var n=d.a.c(e());n&&t.disabled?t.removeAttribute("disabled"):n||t.disabled||(t.disabled=!0)}},d.d.disable={update:function(t,e){d.d.enable.update(t,function(){return!d.a.c(e())})}},d.d.event={init:function(t,e,n,i,o){var a=e()||{};d.a.A(a,function(a){"string"==typeof a&&d.a.q(t,a,function(t){var s,r=e()[a];if(r){try{var c=d.a.R(arguments);i=o.$data,c.unshift(i),s=r.apply(i,c)}finally{!0!==s&&(t.preventDefault?t.preventDefault():t.returnValue=!1)}!1===n.get(a+"Bubble")&&(t.cancelBubble=!0,t.stopPropagation&&t.stopPropagation())}})})}},d.d.foreach={vb:function(t){return function(){var e=t(),n=d.a.Sa(e);return n&&"number"!=typeof n.length?(d.a.c(e),{foreach:n.data,as:n.as,includeDestroyed:n.includeDestroyed,afterAdd:n.afterAdd,beforeRemove:n.beforeRemove,afterRender:n.afterRender,beforeMove:n.beforeMove,afterMove:n.afterMove,templateEngine:d.K.Ja}):{foreach:e,templateEngine:d.K.Ja}}},init:function(t,e){return d.d.template.init(t,d.d.foreach.vb(e))},update:function(t,e,n,i,o){return d.d.template.update(t,d.d.foreach.vb(e),n,i,o)}},d.g.aa.foreach=!1,d.e.Q.foreach=!0,d.d.hasfocus={init:function(t,e,n){function i(i){t.__ko_hasfocusUpdating=!0;var o=t.ownerDocument;if("activeElement"in o){var a;try{a=o.activeElement}catch(s){a=o.body}i=a===t}o=e(),d.g.va(o,n,"hasfocus",i,!0),t.__ko_hasfocusLastValue=i,t.__ko_hasfocusUpdating=!1}var o=i.bind(null,!0),a=i.bind(null,!1);d.a.q(t,"focus",o),d.a.q(t,"focusin",o),d.a.q(t,"blur",a),d.a.q(t,"focusout",a)},update:function(t,e){var n=!!d.a.c(e());t.__ko_hasfocusUpdating||t.__ko_hasfocusLastValue===n||(n?t.focus():t.blur(),d.k.t(d.a.ha,null,[t,n?"focusin":"focusout"]))}},d.g.W.hasfocus=!0,d.d.hasFocus=d.d.hasfocus,d.g.W.hasFocus=!0,d.d.html={init:function(){return{controlsDescendantBindings:!0}},update:function(t,e){d.a.Va(t,e())}},u("if"),u("ifnot",!1,!0),u("with",!0,!1,function(t,e){return t.createChildContext(e)});var b={};d.d.options={init:function(t){if("select"!==d.a.B(t))throw Error("options binding applies only to SELECT elements");for(;0","#comment",o)})},Mb:function(t,e){return d.w.Na(function(n,i){var o=n.nextSibling;o&&o.nodeName.toLowerCase()===e&&d.xa(o,t,i)})}}}(),d.b("__tr_ambtns",d.Za.Mb),function(){d.n={},d.n.j=function(t){this.j=t},d.n.j.prototype.text=function(){var t=d.a.B(this.j),t="script"===t?"text":"textarea"===t?"value":"innerHTML";if(0==arguments.length)return this.j[t];var e=arguments[0];"innerHTML"===t?d.a.Va(this.j,e):this.j[t]=e};var e=d.a.f.L()+"_";d.n.j.prototype.data=function(t){return 1===arguments.length?d.a.f.get(this.j,e+t):void d.a.f.set(this.j,e+t,arguments[1])};var n=d.a.f.L();d.n.Z=function(t){this.j=t},d.n.Z.prototype=new d.n.j,d.n.Z.prototype.text=function(){if(0==arguments.length){var e=d.a.f.get(this.j,n)||{};return e.$a===t&&e.Ba&&(e.$a=e.Ba.innerHTML),e.$a}d.a.f.set(this.j,n,{$a:arguments[0]})},d.n.j.prototype.nodes=function(){return 0==arguments.length?(d.a.f.get(this.j,n)||{}).Ba:void d.a.f.set(this.j,n,{Ba:arguments[0]})},d.b("templateSources",d.n),d.b("templateSources.domElement",d.n.j),d.b("templateSources.anonymousTemplate",d.n.Z)}(),function(){function e(t,e,n){var i;for(e=d.e.nextSibling(e);t&&(i=t)!==e;)t=d.e.nextSibling(i),n(i,t)}function n(t,n){if(t.length){var i=t[0],o=t[t.length-1],a=i.parentNode,s=d.J.instance,r=s.preprocessNode;if(r){if(e(i,o,function(t,e){var n=t.previousSibling,a=r.call(s,t);a&&(t===i&&(i=a[0]||e),t===o&&(o=a[a.length-1]||n))}),t.length=0,!i)return;i===o?t.push(i):(t.push(i,o),d.a.ea(t,a))}e(i,o,function(t){1!==t.nodeType&&8!==t.nodeType||d.fb(n,t)}),e(i,o,function(t){1!==t.nodeType&&8!==t.nodeType||d.w.Ib(t,[n])}),d.a.ea(t,a)}}function i(t){return t.nodeType?t:0d.a.oa?0:t.nodes)?t.nodes():null;return e?d.a.R(e.cloneNode(!0).childNodes):(t=t.text(),d.a.Qa(t))},d.K.Ja=new d.K,d.Wa(d.K.Ja),d.b("nativeTemplateEngine",d.K),function(){d.La=function(){var t=this.ac=function(){if(!o||!o.tmpl)return 0;try{if(0<=o.tmpl.tag.tmpl.open.toString().indexOf("__"))return 2}catch(t){}return 1}();this.renderTemplateSource=function(e,i,a){if(a=a||{},2>t)throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");var s=e.data("precompiled");return s||(s=e.text()||"",s=o.template(null,"{{ko_with $item.koBindingContext}}"+s+"{{/ko_with}}"),e.data("precompiled",s)),e=[i.$data],i=o.extend({koBindingContext:i},a.templateOptions),i=o.tmpl(s,e,i),i.appendTo(n.createElement("div")),o.fragments={},i},this.createJavaScriptEvaluatorBlock=function(t){return"{{ko_code ((function() { return "+t+" })()) }}"},this.addTemplate=function(t,e){n.write("")},0=0&&(u&&(u.splice(m,1),t.processAllDeferredBindingUpdates&&t.processAllDeferredBindingUpdates()),p.splice(g,0,A)),l(v,n,null),t.processAllDeferredBindingUpdates&&t.processAllDeferredBindingUpdates(),T.afterMove&&T.afterMove.call(this,b,s,r)}y&&y.apply(this,arguments)},connectWith:!!T.connectClass&&"."+T.connectClass})),void 0!==T.isEnabled&&t.computed({read:function(){A.sortable(r(T.isEnabled)?"enable":"disable")},disposeWhenNodeIsRemoved:u})},0);return t.utils.domNodeDisposal.addDisposeCallback(u,function(){(A.data("ui-sortable")||A.data("sortable"))&&A.sortable("destroy"),clearTimeout(w)}),{controlsDescendantBindings:!0}},update:function(e,n,i,a,s){var r=p(n,"foreach");l(e,o,r.foreach),t.bindingHandlers.template.update(e,function(){return r},i,a,s)},connectClass:"ko_container",allowDrop:!0,afterMove:null,beforeMove:null,options:{}},t.bindingHandlers.draggable={init:function(n,i,o,a,c){var u=r(i())||{},d=u.options||{},h=t.utils.extend({},t.bindingHandlers.draggable.options),f=p(i,"data"),m=u.connectClass||t.bindingHandlers.draggable.connectClass,g=void 0!==u.isEnabled?u.isEnabled:t.bindingHandlers.draggable.isEnabled;return u="data"in u?u.data:u,l(n,s,u),t.utils.extend(h,d),h.connectToSortable=!!m&&"."+m,e(n).draggable(h),void 0!==g&&t.computed({read:function(){e(n).draggable(r(g)?"enable":"disable")},disposeWhenNodeIsRemoved:n}),t.bindingHandlers.template.init(n,function(){return f},o,a,c)},update:function(e,n,i,o,a){var s=p(n,"data");return t.bindingHandlers.template.update(e,function(){return s},i,o,a)},connectClass:t.bindingHandlers.sortable.connectClass,options:{helper:"clone"}}}),function(){var t=this,e=t._,n=Array.prototype,i=Object.prototype,o=Function.prototype,a=n.push,s=n.slice,r=n.concat,c=i.toString,l=i.hasOwnProperty,u=Array.isArray,d=Object.keys,h=o.bind,p=function(t){return t instanceof p?t:this instanceof p?void(this._wrapped=t):new p(t)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=p),exports._=p):t._=p,p.VERSION="1.7.0";var f=function(t,e,n){if(void 0===e)return t;switch(null==n?3:n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,i){return t.call(e,n,i)};case 3:return function(n,i,o){return t.call(e,n,i,o)};case 4:return function(n,i,o,a){return t.call(e,n,i,o,a)}}return function(){return t.apply(e,arguments)}};p.iteratee=function(t,e,n){return null==t?p.identity:p.isFunction(t)?f(t,e,n):p.isObject(t)?p.matches(t):p.property(t)},p.each=p.forEach=function(t,e,n){if(null==t)return t;e=f(e,n);var i,o=t.length;if(o===+o)for(i=0;i=0)},p.invoke=function(t,e){var n=s.call(arguments,2),i=p.isFunction(e);return p.map(t,function(t){return(i?e:t[e]).apply(t,n)})},p.pluck=function(t,e){return p.map(t,p.property(e))},p.where=function(t,e){return p.filter(t,p.matches(e))},p.findWhere=function(t,e){return p.find(t,p.matches(e))},p.max=function(t,e,n){var i,o,a=-(1/0),s=-(1/0);if(null==e&&null!=t){t=t.length===+t.length?t:p.values(t);for(var r=0,c=t.length;ra&&(a=i)}else e=p.iteratee(e,n),p.each(t,function(t,n,i){o=e(t,n,i),(o>s||o===-(1/0)&&a===-(1/0))&&(a=t,s=o)});return a},p.min=function(t,e,n){var i,o,a=1/0,s=1/0;if(null==e&&null!=t){t=t.length===+t.length?t:p.values(t);for(var r=0,c=t.length;ri||void 0===n)return 1;if(n>>1;n(t[r])=0;)if(t[i]===e)return i;return-1},p.range=function(t,e,n){arguments.length<=1&&(e=t||0,t=0),n=n||1;for(var i=Math.max(Math.ceil((e-t)/n),0),o=Array(i),a=0;ae?(clearTimeout(s),s=null,r=l,a=t.apply(i,o),s||(i=o=null)):s||n.trailing===!1||(s=setTimeout(c,u)),a}},p.debounce=function(t,e,n){var i,o,a,s,r,c=function(){var l=p.now()-s;l0?i=setTimeout(c,e-l):(i=null,n||(r=t.apply(a,o),i||(a=o=null)))};return function(){a=this,o=arguments,s=p.now();var l=n&&!i;return i||(i=setTimeout(c,e)),l&&(r=t.apply(a,o),a=o=null),r}},p.wrap=function(t,e){return p.partial(e,t)},p.negate=function(t){return function(){return!t.apply(this,arguments)}},p.compose=function(){var t=arguments,e=t.length-1;return function(){for(var n=e,i=t[e].apply(this,arguments);n--;)i=t[n].call(this,i);return i}},p.after=function(t,e){return function(){if(--t<1)return e.apply(this,arguments)}},p.before=function(t,e){var n;return function(){return--t>0?n=e.apply(this,arguments):e=null,n}},p.once=p.partial(p.before,2),p.keys=function(t){if(!p.isObject(t))return[];if(d)return d(t);var e=[];for(var n in t)p.has(t,n)&&e.push(n);return e},p.values=function(t){for(var e=p.keys(t),n=e.length,i=Array(n),o=0;o":">",'"':""","'":"'","`":"`"},A=p.invert(y),_=function(t){var e=function(e){return t[e]},n="(?:"+p.keys(t).join("|")+")",i=RegExp(n),o=RegExp(n,"g");return function(t){return t=null==t?"":""+t,i.test(t)?t.replace(o,e):t}};p.escape=_(y),p.unescape=_(A),p.result=function(t,e){if(null!=t){var n=t[e];return p.isFunction(n)?t[e]():n}};var z=0;p.uniqueId=function(t){var e=++z+"";return t?t+e:e},p.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var T=/(.)^/,w={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},C=/\\|'|\r|\n|\u2028|\u2029/g,N=function(t){return"\\"+w[t]};p.template=function(t,e,n){!e&&n&&(e=n),e=p.defaults({},e,p.templateSettings);var i=RegExp([(e.escape||T).source,(e.interpolate||T).source,(e.evaluate||T).source].join("|")+"|$","g"),o=0,a="__p+='";t.replace(i,function(e,n,i,s,r){return a+=t.slice(o,r).replace(C,N),o=r+e.length,n?a+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":i?a+="'+\n((__t=("+i+"))==null?'':__t)+\n'":s&&(a+="';\n"+s+"\n__p+='"),e}),a+="';\n",e.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{var s=new Function(e.variable||"obj","_",a)}catch(r){throw r.source=a,r}var c=function(t){return s.call(this,t,p)},l=e.variable||"obj";return c.source="function("+l+"){\n"+a+"}",c},p.chain=function(t){var e=p(t);return e._chain=!0,e};var O=function(t){return this._chain?p(t).chain():t};p.mixin=function(t){p.each(p.functions(t),function(e){var n=p[e]=t[e];p.prototype[e]=function(){var t=[this._wrapped];return a.apply(t,arguments),O.call(this,n.apply(p,t))}})},p.mixin(p),p.each(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var e=n[t];p.prototype[t]=function(){var n=this._wrapped;return e.apply(n,arguments),"shift"!==t&&"splice"!==t||0!==n.length||delete n[0],O.call(this,n)}}),p.each(["concat","join","slice"],function(t){var e=n[t];p.prototype[t]=function(){return O.call(this,e.apply(this._wrapped,arguments))}}),p.prototype.value=function(){return this._wrapped},"function"==typeof define&&define.amd&&define("underscore",[],function(){return p})}.call(this),function(t,e){function n(){return new Date(Date.UTC.apply(Date,arguments))}function i(){var t=new Date;return n(t.getFullYear(),t.getMonth(),t.getDate())}function o(t,e){return t.getUTCFullYear()===e.getUTCFullYear()&&t.getUTCMonth()===e.getUTCMonth()&&t.getUTCDate()===e.getUTCDate()}function a(t){return function(){return this[t].apply(this,arguments)}}function s(e,n){function i(t,e){return e.toLowerCase()}var o,a=t(e).data(),s={},r=new RegExp("^"+n.toLowerCase()+"([A-Z])");n=new RegExp("^"+n.toLowerCase());for(var c in a)n.test(c)&&(o=c.replace(r,i),s[o]=a[c]);return s}function r(e){var n={};if(m[e]||(e=e.split("-")[0],m[e])){var i=m[e];return t.each(f,function(t,e){e in i&&(n[e]=i[e])}),n}}var c=function(){var e={get:function(t){return this.slice(t)[0]},contains:function(t){for(var e=t&&t.valueOf(),n=0,i=this.length;no?(this.picker.addClass("datepicker-orient-right"),p=u.left+h-e):this.picker.addClass("datepicker-orient-left");var m,g,b=this.o.orientation.y;if("auto"===b&&(m=-s+f-n,g=s+a-(f+d+n),b=Math.max(m,g)===g?"top":"bottom"),this.picker.addClass("datepicker-orient-"+b),"top"===b?f+=d:f-=n+parseInt(this.picker.css("padding-top")),this.o.rtl){var v=o-(p+h);this.picker.css({top:f,right:v,zIndex:l})}else this.picker.css({top:f,left:p,zIndex:l});return this},_allow_update:!0,update:function(){if(!this._allow_update)return this;var e=this.dates.copy(),n=[],i=!1;return arguments.length?(t.each(arguments,t.proxy(function(t,e){e instanceof Date&&(e=this._local_to_utc(e)),n.push(e)},this)),i=!0):(n=this.isInput?this.element.val():this.element.data("date")||this.element.find("input").val(),n=n&&this.o.multidate?n.split(this.o.multidateSeparator):[n],delete this.element.data().date),n=t.map(n,t.proxy(function(t){return g.parseDate(t,this.o.format,this.o.language)},this)),n=t.grep(n,t.proxy(function(t){return tthis.o.endDate||!t},this),!0),this.dates.replace(n),this.dates.length?this.viewDate=new Date(this.dates.get(-1)):this.viewDatethis.o.endDate&&(this.viewDate=new Date(this.o.endDate)),i?this.setValue():n.length&&String(e)!==String(this.dates)&&this._trigger("changeDate"),!this.dates.length&&e.length&&this._trigger("clearDate"),this.fill(),this},fillDow:function(){var t=this.o.weekStart,e="";if(this.o.calendarWeeks){this.picker.find(".datepicker-days thead tr:first-child .datepicker-switch").attr("colspan",function(t,e){return parseInt(e)+1});var n=' ';e+=n}for(;t'+m[this.o.language].daysMin[t++%7]+"";e+="",this.picker.find(".datepicker-days thead").append(e)},fillMonths:function(){for(var t="",e=0;e<12;)t+=''+m[this.o.language].monthsShort[e++]+"";this.picker.find(".datepicker-months td").html(t)},setRange:function(e){e&&e.length?this.range=t.map(e,function(t){return t.valueOf()}):delete this.range,this.fill()},getClassNames:function(e){var n=[],i=this.viewDate.getUTCFullYear(),a=this.viewDate.getUTCMonth(),s=new Date;return e.getUTCFullYear()i||e.getUTCFullYear()===i&&e.getUTCMonth()>a)&&n.push("new"),this.focusDate&&e.valueOf()===this.focusDate.valueOf()&&n.push("focused"),this.o.todayHighlight&&e.getUTCFullYear()===s.getFullYear()&&e.getUTCMonth()===s.getMonth()&&e.getUTCDate()===s.getDate()&&n.push("today"),this.dates.contains(e)!==-1&&n.push("active"),(e.valueOf()this.o.endDate||t.inArray(e.getUTCDay(),this.o.daysOfWeekDisabled)!==-1)&&n.push("disabled"),this.o.datesDisabled.length>0&&t.grep(this.o.datesDisabled,function(t){return o(e,t)}).length>0&&n.push("disabled","disabled-date"),this.range&&(e>this.range[0]&&e"),this.o.calendarWeeks)){var y=new Date(+p+(this.o.weekStart-p.getUTCDay()-7)%7*864e5),A=new Date(Number(y)+(11-y.getUTCDay())%7*864e5),_=new Date(Number(_=n(A.getUTCFullYear(),0,1))+(11-_.getUTCDay())%7*864e5),z=(A-_)/864e5/7+1;M.push(''+z+"")}if(v=this.getClassNames(p),v.push("day"),this.o.beforeShowDay!==t.noop){var T=this.o.beforeShowDay(this._utc_to_local(p));T===e?T={}:"boolean"==typeof T?T={enabled:T}:"string"==typeof T&&(T={classes:T}),T.enabled===!1&&v.push("disabled"),T.classes&&(v=v.concat(T.classes.split(/\s+/))),T.tooltip&&(i=T.tooltip)}v=t.unique(v),M.push('"+p.getUTCDate()+""),i=null,p.getUTCDay()===this.o.weekEnd&&M.push(""),p.setUTCDate(p.getUTCDate()+1)}this.picker.find(".datepicker-days tbody").empty().append(M.join(""));var w=this.picker.find(".datepicker-months").find("th:eq(1)").text(a).end().find("span").removeClass("active");if(t.each(this.dates,function(t,e){e.getUTCFullYear()===a&&w.eq(e.getUTCMonth()).addClass("active")}),(al)&&w.addClass("disabled"),a===r&&w.slice(0,c).addClass("disabled"),a===l&&w.slice(u+1).addClass("disabled"),this.o.beforeShowMonth!==t.noop){var C=this;t.each(w,function(e,n){if(!t(n).hasClass("disabled")){var i=new Date(a,e,1),o=C.o.beforeShowMonth(i);o===!1&&t(n).addClass("disabled")}})}M="",a=10*parseInt(a/10,10);var N=this.picker.find(".datepicker-years").find("th:eq(1)").text(a+"-"+(a+9)).end().find("td");a-=1;for(var O,S=t.map(this.dates,function(t){return t.getUTCFullYear()}),x=-1;x<11;x++)O=["year"],x===-1?O.push("old"):10===x&&O.push("new"),t.inArray(a,S)!==-1&&O.push("active"),(al)&&O.push("disabled"),M+=''+a+"",a+=1;N.html(M)}},updateNavArrows:function(){if(this._allow_update){var t=new Date(this.viewDate),e=t.getUTCFullYear(),n=t.getUTCMonth();switch(this.viewMode){case 0:this.o.startDate!==-(1/0)&&e<=this.o.startDate.getUTCFullYear()&&n<=this.o.startDate.getUTCMonth()?this.picker.find(".prev").css({visibility:"hidden"}):this.picker.find(".prev").css({visibility:"visible"}),this.o.endDate!==1/0&&e>=this.o.endDate.getUTCFullYear()&&n>=this.o.endDate.getUTCMonth()?this.picker.find(".next").css({visibility:"hidden"}):this.picker.find(".next").css({visibility:"visible"});break;case 1:case 2:this.o.startDate!==-(1/0)&&e<=this.o.startDate.getUTCFullYear()?this.picker.find(".prev").css({visibility:"hidden"}):this.picker.find(".prev").css({visibility:"visible"}),this.o.endDate!==1/0&&e>=this.o.endDate.getUTCFullYear()?this.picker.find(".next").css({visibility:"hidden"}):this.picker.find(".next").css({visibility:"visible"})}}},click:function(e){e.preventDefault();var i,o,a,s=t(e.target).closest("span, td, th");if(1===s.length)switch(s[0].nodeName.toLowerCase()){case"th":switch(s[0].className){case"datepicker-switch":this.showMode(1);break;case"prev":case"next":var r=g.modes[this.viewMode].navStep*("prev"===s[0].className?-1:1);switch(this.viewMode){case 0:this.viewDate=this.moveMonth(this.viewDate,r),this._trigger("changeMonth",this.viewDate);break;case 1:case 2:this.viewDate=this.moveYear(this.viewDate,r),1===this.viewMode&&this._trigger("changeYear",this.viewDate)}this.fill();break;case"today":var c=new Date;c=n(c.getFullYear(),c.getMonth(),c.getDate(),0,0,0),this.showMode(-2);var l="linked"===this.o.todayBtn?null:"view";this._setDate(c,l);break;case"clear":this.clearDates()}break;case"span":s.hasClass("disabled")||(this.viewDate.setUTCDate(1),s.hasClass("month")?(a=1,o=s.parent().find("span").index(s),i=this.viewDate.getUTCFullYear(),this.viewDate.setUTCMonth(o),this._trigger("changeMonth",this.viewDate),1===this.o.minViewMode&&this._setDate(n(i,o,a))):(a=1,o=0,i=parseInt(s.text(),10)||0,this.viewDate.setUTCFullYear(i),this._trigger("changeYear",this.viewDate),2===this.o.minViewMode&&this._setDate(n(i,o,a))),this.showMode(-1),this.fill());break;case"td":s.hasClass("day")&&!s.hasClass("disabled")&&(a=parseInt(s.text(),10)||1,i=this.viewDate.getUTCFullYear(),o=this.viewDate.getUTCMonth(),s.hasClass("old")?0===o?(o=11,i-=1):o-=1:s.hasClass("new")&&(11===o?(o=0,i+=1):o+=1),this._setDate(n(i,o,a)))}this.picker.is(":visible")&&this._focused_from&&t(this._focused_from).focus(),delete this._focused_from},_toggle_multidate:function(t){var e=this.dates.contains(t);if(t||this.dates.clear(),e!==-1?(this.o.multidate===!0||this.o.multidate>1||this.o.toggleActive)&&this.dates.remove(e):this.o.multidate===!1?(this.dates.clear(),this.dates.push(t)):this.dates.push(t),"number"==typeof this.o.multidate)for(;this.dates.length>this.o.multidate;)this.dates.remove(0)},_setDate:function(t,e){e&&"date"!==e||this._toggle_multidate(t&&new Date(t)),e&&"view"!==e||(this.viewDate=t&&new Date(t)),this.fill(),this.setValue(),e&&"view"===e||this._trigger("changeDate");var n;this.isInput?n=this.element:this.component&&(n=this.element.find("input")),n&&n.change(),!this.o.autoclose||e&&"date"!==e||this.hide()},moveMonth:function(t,n){if(!t)return e;if(!n)return t;var i,o,a=new Date(t.valueOf()),s=a.getUTCDate(),r=a.getUTCMonth(),c=Math.abs(n);if(n=n>0?1:-1,1===c)o=n===-1?function(){return a.getUTCMonth()===r}:function(){return a.getUTCMonth()!==i},i=r+n,a.setUTCMonth(i),(i<0||i>11)&&(i=(i+12)%12);else{for(var l=0;l=this.o.startDate&&t<=this.o.endDate},keydown:function(t){if(!this.picker.is(":visible"))return void(27===t.keyCode&&this.show());var e,n,o,a=!1,s=this.focusDate||this.viewDate;switch(t.keyCode){case 27:this.focusDate?(this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill()):this.hide(),t.preventDefault();break;case 37:case 39:if(!this.o.keyboardNavigation)break;e=37===t.keyCode?-1:1,t.ctrlKey?(n=this.moveYear(this.dates.get(-1)||i(),e),o=this.moveYear(s,e),this._trigger("changeYear",this.viewDate)):t.shiftKey?(n=this.moveMonth(this.dates.get(-1)||i(),e),o=this.moveMonth(s,e),this._trigger("changeMonth",this.viewDate)):(n=new Date(this.dates.get(-1)||i()),n.setUTCDate(n.getUTCDate()+e),o=new Date(s),o.setUTCDate(s.getUTCDate()+e)),this.dateWithinRange(o)&&(this.focusDate=this.viewDate=o,this.setValue(),this.fill(),t.preventDefault());break;case 38:case 40:if(!this.o.keyboardNavigation)break;e=38===t.keyCode?-1:1,t.ctrlKey?(n=this.moveYear(this.dates.get(-1)||i(),e),o=this.moveYear(s,e),this._trigger("changeYear",this.viewDate)):t.shiftKey?(n=this.moveMonth(this.dates.get(-1)||i(),e),o=this.moveMonth(s,e),this._trigger("changeMonth",this.viewDate)):(n=new Date(this.dates.get(-1)||i()),n.setUTCDate(n.getUTCDate()+7*e),o=new Date(s),o.setUTCDate(s.getUTCDate()+7*e)),this.dateWithinRange(o)&&(this.focusDate=this.viewDate=o,this.setValue(),this.fill(),t.preventDefault());break;case 32:break;case 13:s=this.focusDate||this.dates.get(-1)||this.viewDate,this.o.keyboardNavigation&&(this._toggle_multidate(s),a=!0),this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.setValue(),this.fill(),this.picker.is(":visible")&&(t.preventDefault(),"function"==typeof t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,this.o.autoclose&&this.hide());break;case 9:this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill(),this.hide()}if(a){this.dates.length?this._trigger("changeDate"):this._trigger("clearDate");var r;this.isInput?r=this.element:this.component&&(r=this.element.find("input")),r&&r.change()}},showMode:function(t){t&&(this.viewMode=Math.max(this.o.minViewMode,Math.min(2,this.viewMode+t))),this.picker.children("div").hide().filter(".datepicker-"+g.modes[this.viewMode].clsName).css("display","block"),this.updateNavArrows()}};var u=function(e,n){this.element=t(e),this.inputs=t.map(n.inputs,function(t){return t.jquery?t[0]:t}),delete n.inputs,h.call(t(this.inputs),n).bind("changeDate",t.proxy(this.dateUpdated,this)),this.pickers=t.map(this.inputs,function(e){return t(e).data("datepicker")}),this.updateDates()};u.prototype={updateDates:function(){this.dates=t.map(this.pickers,function(t){return t.getUTCDate()}),this.updateRanges()},updateRanges:function(){var e=t.map(this.dates,function(t){return t.valueOf()});t.each(this.pickers,function(t,n){n.setRange(e)})},dateUpdated:function(e){if(!this.updating){this.updating=!0;var n=t(e.target).data("datepicker"),i=n.getUTCDate(),o=t.inArray(e.target,this.inputs),a=o-1,s=o+1,r=this.inputs.length;if(o!==-1){if(t.each(this.pickers,function(t,e){e.getUTCDate()||e.setUTCDate(i)}),i=0&&ithis.dates[s])for(;sthis.dates[s];)this.pickers[s++].setUTCDate(i);this.updateDates(),delete this.updating}}},remove:function(){t.map(this.pickers,function(t){t.remove()}),delete this.element.data().datepicker}};var d=t.fn.datepicker,h=function(n){var i=Array.apply(null,arguments);i.shift();var o;return this.each(function(){var a=t(this),c=a.data("datepicker"),d="object"==typeof n&&n;if(!c){var h=s(this,"date"),f=t.extend({},p,h,d),m=r(f.language),g=t.extend({},p,m,h,d);if(a.hasClass("input-daterange")||g.inputs){var b={inputs:g.inputs||a.find("input").toArray()};a.data("datepicker",c=new u(this,t.extend(g,b)))}else a.data("datepicker",c=new l(this,g))}if("string"==typeof n&&"function"==typeof c[n]&&(o=c[n].apply(c,i),o!==e))return!1}),o!==e?o:this};t.fn.datepicker=h;var p=t.fn.datepicker.defaults={autoclose:!1,beforeShowDay:t.noop,beforeShowMonth:t.noop,calendarWeeks:!1,clearBtn:!1,toggleActive:!1,daysOfWeekDisabled:[],datesDisabled:[],endDate:1/0,forceParse:!0,format:"mm/dd/yyyy",keyboardNavigation:!0,language:"en",minViewMode:0,multidate:!1,multidateSeparator:",",orientation:"auto",rtl:!1,startDate:-(1/0),startView:0,todayBtn:!1,todayHighlight:!1,weekStart:0,disableTouchKeyboard:!1,enableOnReadonly:!0,container:"body"},f=t.fn.datepicker.locale_opts=["format","rtl","weekStart"];t.fn.datepicker.Constructor=l;var m=t.fn.datepicker.dates={en:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa","Su"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",clear:"Clear"}},g={modes:[{clsName:"days",navFnc:"Month",navStep:1},{clsName:"months",navFnc:"FullYear",navStep:1},{clsName:"years",navFnc:"FullYear",navStep:10}],isLeapYear:function(t){return t%4===0&&t%100!==0||t%400===0},getDaysInMonth:function(t,e){return[31,g.isLeapYear(t)?29:28,31,30,31,30,31,31,30,31,30,31][e]},validParts:/dd?|DD?|mm?|MM?|yy(?:yy)?/g,nonpunctuation:/[^ -\/:-@\[\u3400-\u9fff-`{-~\t\n\r]+/g,parseFormat:function(t){var e=t.replace(this.validParts,"\0").split("\0"),n=t.match(this.validParts);if(!e||!e.length||!n||0===n.length)throw new Error("Invalid date format.");return{separators:e,parts:n}},parseDate:function(i,o,a){function s(){var t=this.slice(0,h[u].length),e=h[u].slice(0,t.length);return t.toLowerCase()===e.toLowerCase()}if(!i)return e;if(i instanceof Date)return i;"string"==typeof o&&(o=g.parseFormat(o));var r,c,u,d=/([\-+]\d+)([dmwy])/,h=i.match(/([\-+]\d+)([dmwy])/g);if(/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(i)){ for(i=new Date,u=0;u«»',contTemplate:'',footTemplate:''};g.template='
    '+g.headTemplate+""+g.footTemplate+'
    '+g.headTemplate+g.contTemplate+g.footTemplate+'
    '+g.headTemplate+g.contTemplate+g.footTemplate+"
    ",t.fn.datepicker.DPGlobal=g,t.fn.datepicker.noConflict=function(){return t.fn.datepicker=d,this},t.fn.datepicker.version="1.4.0",t(document).on("focus.datepicker.data-api click.datepicker.data-api",'[data-provide="datepicker"]',function(e){var n=t(this);n.data("datepicker")||(e.preventDefault(),h.call(n,"show"))}),t(function(){h.call(t('[data-provide="datepicker-inline"]'))})}(window.jQuery),!function(t){t.fn.datepicker.dates.de={days:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag"],daysShort:["Son","Mon","Die","Mit","Don","Fre","Sam","Son"],daysMin:["So","Mo","Di","Mi","Do","Fr","Sa","So"],months:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthsShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],today:"Heute",clear:"Löschen",weekStart:1,format:"dd.mm.yyyy"}}(jQuery),!function(t){t.fn.datepicker.dates.da={days:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag"],daysShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør","Søn"],daysMin:["Sø","Ma","Ti","On","To","Fr","Lø","Sø"],months:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],today:"I Dag",clear:"Nulstil"}}(jQuery),!function(t){t.fn.datepicker.dates["pt-BR"]={days:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado","Domingo"],daysShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb","Dom"],daysMin:["Do","Se","Te","Qu","Qu","Se","Sa","Do"],months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthsShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],today:"Hoje",clear:"Limpar"}}(jQuery),!function(t){t.fn.datepicker.dates.nl={days:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag","zondag"],daysShort:["zo","ma","di","wo","do","vr","za","zo"],daysMin:["zo","ma","di","wo","do","vr","za","zo"],months:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthsShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],today:"Vandaag",clear:"Wissen",weekStart:1,format:"dd-mm-yyyy"}}(jQuery),!function(t){t.fn.datepicker.dates.fr={days:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"],daysShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam.","dim."],daysMin:["d","l","ma","me","j","v","s","d"],months:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthsShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],today:"Aujourd'hui",clear:"Effacer",weekStart:1,format:"dd/mm/yyyy"}}(jQuery),!function(t){t.fn.datepicker.dates.it={days:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato","Domenica"],daysShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab","Dom"],daysMin:["Do","Lu","Ma","Me","Gi","Ve","Sa","Do"],months:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthsShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],today:"Oggi",clear:"Cancella",weekStart:1,format:"dd/mm/yyyy"}}(jQuery),!function(t){t.fn.datepicker.dates.lt={days:["Sekmadienis","Pirmadienis","Antradienis","Trečiadienis","Ketvirtadienis","Penktadienis","Šeštadienis","Sekmadienis"],daysShort:["S","Pr","A","T","K","Pn","Š","S"],daysMin:["Sk","Pr","An","Tr","Ke","Pn","Št","Sk"],months:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthsShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],today:"Šiandien",weekStart:1}}(jQuery),!function(t){t.fn.datepicker.dates.no={days:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],daysShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],daysMin:["Sø","Ma","Ti","On","To","Fr","Lø"],months:["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],monthsShort:["Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Des"],today:"I dag",clear:"Nullstill",weekStart:1,format:"dd.mm.yyyy"}}(jQuery),!function(t){t.fn.datepicker.dates.es={days:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado","Domingo"],daysShort:["Dom","Lun","Mar","Mié","Jue","Vie","Sáb","Dom"],daysMin:["Do","Lu","Ma","Mi","Ju","Vi","Sa","Do"],months:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],monthsShort:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],today:"Hoy",clear:"Borrar",weekStart:1,format:"dd/mm/yyyy"}}(jQuery),!function(t){t.fn.datepicker.dates.sv={days:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag","Söndag"],daysShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör","Sön"],daysMin:["Sö","Må","Ti","On","To","Fr","Lö","Sö"],months:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],today:"Idag",format:"yyyy-mm-dd",weekStart:1,clear:"Rensa"}}(jQuery),function(){var t,e,n,i,o,a,s,r,c=[].slice,l={}.hasOwnProperty,u=function(t,e){function n(){this.constructor=t}for(var i in e)l.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t};s=function(){},e=function(){function t(){}return t.prototype.addEventListener=t.prototype.on,t.prototype.on=function(t,e){return this._callbacks=this._callbacks||{},this._callbacks[t]||(this._callbacks[t]=[]),this._callbacks[t].push(e),this},t.prototype.emit=function(){var t,e,n,i,o,a;if(i=arguments[0],t=2<=arguments.length?c.call(arguments,1):[],this._callbacks=this._callbacks||{},n=this._callbacks[i])for(o=0,a=n.length;o
    '),this.element.appendChild(e)),i=e.getElementsByTagName("span")[0],i&&(null!=i.textContent?i.textContent=this.options.dictFallbackMessage:null!=i.innerText&&(i.innerText=this.options.dictFallbackMessage)),this.element.appendChild(this.getFallbackForm())},resize:function(t){var e,n,i;return e={srcX:0,srcY:0,srcWidth:t.width,srcHeight:t.height},n=t.width/t.height,e.optWidth=this.options.thumbnailWidth,e.optHeight=this.options.thumbnailHeight,null==e.optWidth&&null==e.optHeight?(e.optWidth=e.srcWidth,e.optHeight=e.srcHeight):null==e.optWidth?e.optWidth=n*e.optHeight:null==e.optHeight&&(e.optHeight=1/n*e.optWidth),i=e.optWidth/e.optHeight,t.heighti?(e.srcHeight=t.height,e.srcWidth=e.srcHeight*i):(e.srcWidth=t.width,e.srcHeight=e.srcWidth/i),e.srcX=(t.width-e.srcWidth)/2,e.srcY=(t.height-e.srcHeight)/2,e},drop:function(t){return this.element.classList.remove("dz-drag-hover")},dragstart:s,dragend:function(t){return this.element.classList.remove("dz-drag-hover")},dragenter:function(t){return this.element.classList.add("dz-drag-hover")},dragover:function(t){return this.element.classList.add("dz-drag-hover")},dragleave:function(t){return this.element.classList.remove("dz-drag-hover")},paste:s,reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(t){var e,i,o,a,s,r,c,l,u,d,h,p,f;if(this.element===this.previewsContainer&&this.element.classList.add("dz-started"),this.previewsContainer){for(t.previewElement=n.createElement(this.options.previewTemplate.trim()),t.previewTemplate=t.previewElement,this.previewsContainer.appendChild(t.previewElement),d=t.previewElement.querySelectorAll("[data-dz-name]"),a=0,c=d.length;a'+this.options.dictRemoveFile+""),t.previewElement.appendChild(t._removeLink)),i=function(e){return function(i){return i.preventDefault(),i.stopPropagation(),t.status===n.UPLOADING?n.confirm(e.options.dictCancelUploadConfirmation,function(){return e.removeFile(t)}):e.options.dictRemoveFileConfirmation?n.confirm(e.options.dictRemoveFileConfirmation,function(){return e.removeFile(t)}):e.removeFile(t)}}(this),p=t.previewElement.querySelectorAll("[data-dz-remove]"),f=[],r=0,u=p.length;r\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Check\n \n \n \n \n \n
    \n
    \n \n Error\n \n \n \n \n \n \n \n
    \n
    '},i=function(){var t,e,n,i,o,a,s;for(i=arguments[0],n=2<=arguments.length?c.call(arguments,1):[],a=0,s=n.length;a'+this.options.dictDefaultMessage+"
    ")),this.clickableElements.length&&(i=function(t){return function(){return t.hiddenFileInput&&t.hiddenFileInput.parentNode.removeChild(t.hiddenFileInput),t.hiddenFileInput=document.createElement("input"),t.hiddenFileInput.setAttribute("type","file"),(null==t.options.maxFiles||t.options.maxFiles>1)&&t.hiddenFileInput.setAttribute("multiple","multiple"),t.hiddenFileInput.className="dz-hidden-input",null!=t.options.acceptedFiles&&t.hiddenFileInput.setAttribute("accept",t.options.acceptedFiles),null!=t.options.capture&&t.hiddenFileInput.setAttribute("capture",t.options.capture),t.hiddenFileInput.style.visibility="hidden",t.hiddenFileInput.style.position="absolute",t.hiddenFileInput.style.top="0",t.hiddenFileInput.style.left="0",t.hiddenFileInput.style.height="0",t.hiddenFileInput.style.width="0",document.querySelector(t.options.hiddenInputContainer).appendChild(t.hiddenFileInput),t.hiddenFileInput.addEventListener("change",function(){var e,n,o,a;if(n=t.hiddenFileInput.files,n.length)for(o=0,a=n.length;o',this.options.dictFallbackText&&(i+="

    "+this.options.dictFallbackText+"

    "),i+='
    ',e=n.createElement(i),"FORM"!==this.element.tagName?(o=n.createElement('
    '),o.appendChild(e)):(this.element.setAttribute("enctype","multipart/form-data"),this.element.setAttribute("method",this.options.method)),null!=o?o:e)},n.prototype.getExistingFallback=function(){var t,e,n,i,o,a;for(e=function(t){var e,n,i;for(n=0,i=t.length;n0){for(s=["TB","GB","MB","KB","b"],n=r=0,c=s.length;r=e){i=t/Math.pow(this.options.filesizeBase,4-n),o=a;break}i=Math.round(10*i)/10}return""+i+" "+o},n.prototype._updateMaxFilesReachedClass=function(){return null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit("maxfilesreached",this.files),this.element.classList.add("dz-max-files-reached")):this.element.classList.remove("dz-max-files-reached")},n.prototype.drop=function(t){var e,n;t.dataTransfer&&(this.emit("drop",t),e=t.dataTransfer.files,this.emit("addedfiles",e),e.length&&(n=t.dataTransfer.items,n&&n.length&&null!=n[0].webkitGetAsEntry?this._addFilesFromItems(n):this.handleFiles(e)))},n.prototype.paste=function(t){var e,n;if(null!=(null!=t&&null!=(n=t.clipboardData)?n.items:void 0))return this.emit("paste",t),e=t.clipboardData.items,e.length?this._addFilesFromItems(e):void 0},n.prototype.handleFiles=function(t){var e,n,i,o;for(o=[],n=0,i=t.length;n0){for(a=0,s=n.length;a1024*this.options.maxFilesize*1024?e(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(t.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize)):n.isValidFile(t,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(e(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles)),this.emit("maxfilesexceeded",t)):this.options.accept.call(this,t,e):e(this.options.dictInvalidFileType)},n.prototype.addFile=function(t){return t.upload={progress:0,total:t.size,bytesSent:0},this.files.push(t),t.status=n.ADDED,this.emit("addedfile",t),this._enqueueThumbnail(t),this.accept(t,function(e){return function(n){return n?(t.accepted=!1,e._errorProcessing([t],n)):(t.accepted=!0,e.options.autoQueue&&e.enqueueFile(t)),e._updateMaxFilesReachedClass()}}(this))},n.prototype.enqueueFiles=function(t){var e,n,i;for(n=0,i=t.length;n=e)&&(i=this.getQueuedFiles(),i.length>0)){if(this.options.uploadMultiple)return this.processFiles(i.slice(0,e-n));for(;t=B;u=0<=B?++L:--L)a.append(this._getParamName(u),t[u],this._renameFilename(t[u].name));return this.submitRequest(_,a,t)},n.prototype.submitRequest=function(t,e,n){return t.send(e)},n.prototype._finished=function(t,e,i){var o,a,s;for(a=0,s=t.length;au;)e=o[4*(c-1)+3],0===e?a=c:u=c,c=a+u>>1;return l=c/s,0===l?1:l},a=function(t,e,n,i,a,s,r,c,l,u){var d;return d=o(e),t.drawImage(e,n,i,a,s,r,c,l,u/d)},i=function(t,e){var n,i,o,a,s,r,c,l,u;if(o=!1,u=!0,i=t.document,l=i.documentElement,n=i.addEventListener?"addEventListener":"attachEvent",c=i.addEventListener?"removeEventListener":"detachEvent",r=i.addEventListener?"":"on",a=function(n){if("readystatechange"!==n.type||"complete"===i.readyState)return("load"===n.type?t:i)[c](r+n.type,a,!1),!o&&(o=!0)?e.call(t,n.type||n):void 0},s=function(){var t;try{l.doScroll("left")}catch(e){return t=e,void setTimeout(s,50)}return a("poll")},"complete"!==i.readyState){if(i.createEventObject&&l.doScroll){try{u=!t.frameElement}catch(d){}u&&s()}return i[n](r+"DOMContentLoaded",a,!1),i[n](r+"readystatechange",a,!1),t[n](r+"load",a,!1)}},t._autoDiscoverFunction=function(){if(t.autoDiscover)return t.discover()},i(window,t._autoDiscoverFunction)}.call(this),function(t,e){"function"==typeof define&&define.amd?define("typeahead.js",["jquery"],function(t){return e(t)}):"object"==typeof exports?module.exports=e(require("jquery")):e(jQuery)}(this,function(t){var e=function(){"use strict";return{isMsie:function(){return!!/(msie|trident)/i.test(navigator.userAgent)&&navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]},isBlankString:function(t){return!t||/^\s*$/.test(t)},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:t.isArray,isFunction:t.isFunction,isObject:t.isPlainObject,isUndefined:function(t){return"undefined"==typeof t},isElement:function(t){return!(!t||1!==t.nodeType)},isJQuery:function(e){return e instanceof t},toStr:function(t){return e.isUndefined(t)||null===t?"":t+""},bind:t.proxy,each:function(e,n){function i(t,e){return n(e,t)}t.each(e,i)},map:t.map,filter:t.grep,every:function(e,n){var i=!0;return e?(t.each(e,function(t,o){if(!(i=n.call(null,o,t,e)))return!1}),!!i):i},some:function(e,n){var i=!1;return e?(t.each(e,function(t,o){if(i=n.call(null,o,t,e))return!1}),!!i):i},mixin:t.extend,identity:function(t){return t},clone:function(e){return t.extend(!0,{},e)},getIdGenerator:function(){var t=0;return function(){return t++}},templatify:function(e){function n(){return String(e)}return t.isFunction(e)?e:n},defer:function(t){setTimeout(t,0)},debounce:function(t,e,n){var i,o;return function(){var a,s,r=this,c=arguments;return a=function(){i=null,n||(o=t.apply(r,c))},s=n&&!i,clearTimeout(i),i=setTimeout(a,e),s&&(o=t.apply(r,c)),o}},throttle:function(t,e){var n,i,o,a,s,r;return s=0,r=function(){s=new Date,o=null,a=t.apply(n,i)},function(){var c=new Date,l=e-(c-s);return n=this,i=arguments,l<=0?(clearTimeout(o),o=null,s=c,a=t.apply(n,i)):o||(o=setTimeout(r,l)),a}},stringify:function(t){return e.isString(t)?t:JSON.stringify(t)},noop:function(){}}}(),n=function(){"use strict";function t(t){var s,r;return r=e.mixin({},a,t),s={css:o(),classes:r,html:n(r),selectors:i(r)},{css:s.css,html:s.html,classes:s.classes,selectors:s.selectors,mixin:function(t){e.mixin(t,s)}}}function n(t){return{wrapper:'',menu:'
    '}}function i(t){var n={};return e.each(t,function(t,e){n[e]="."+t}),n}function o(){var t={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},menu:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:" 0"}};return e.isMsie()&&e.mixin(t.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),t}var a={wrapper:"twitter-typeahead",input:"tt-input",hint:"tt-hint",menu:"tt-menu",dataset:"tt-dataset",suggestion:"tt-suggestion",selectable:"tt-selectable",empty:"tt-empty",open:"tt-open",cursor:"tt-cursor",highlight:"tt-highlight"};return t}(),i=function(){"use strict";function n(e){e&&e.el||t.error("EventBus initialized without el"),this.$el=t(e.el)}var i,o;return i="typeahead:",o={render:"rendered",cursorchange:"cursorchanged",select:"selected",autocomplete:"autocompleted"},e.mixin(n.prototype,{_trigger:function(e,n){var o;return o=t.Event(i+e),(n=n||[]).unshift(o),this.$el.trigger.apply(this.$el,n),o},before:function(t){var e,n;return e=[].slice.call(arguments,1),n=this._trigger("before"+t,e),n.isDefaultPrevented()},trigger:function(t){var e;this._trigger(t,[].slice.call(arguments,1)),(e=o[t])&&this._trigger(e,[].slice.call(arguments,1))}}),n}(),o=function(){"use strict";function t(t,e,n,i){var o;if(!n)return this;for(e=e.split(c),n=i?r(n,i):n,this._callbacks=this._callbacks||{};o=e.shift();)this._callbacks[o]=this._callbacks[o]||{sync:[],async:[]},this._callbacks[o][t].push(n);return this}function e(e,n,i){return t.call(this,"async",e,n,i)}function n(e,n,i){return t.call(this,"sync",e,n,i)}function i(t){var e;if(!this._callbacks)return this;for(t=t.split(c);e=t.shift();)delete this._callbacks[e];return this}function o(t){var e,n,i,o,s;if(!this._callbacks)return this;for(t=t.split(c),i=[].slice.call(arguments,1);(e=t.shift())&&(n=this._callbacks[e]);)o=a(n.sync,this,[e].concat(i)),s=a(n.async,this,[e].concat(i)),o()&&l(s);return this}function a(t,e,n){function i(){for(var i,o=0,a=t.length;!i&&o