diff --git a/Block/Cart/ApplePay.php b/Block/Cart/CheckoutConfig.php similarity index 87% rename from Block/Cart/ApplePay.php rename to Block/Cart/CheckoutConfig.php index 8b1ea55d..db7bd24b 100644 --- a/Block/Cart/ApplePay.php +++ b/Block/Cart/CheckoutConfig.php @@ -33,11 +33,12 @@ use Magento\Framework\Serialize\SerializerInterface; use Magento\Framework\View\Element\Template\Context; -class ApplePay extends Onepage +class CheckoutConfig extends Onepage { private Cart $cart; private ConfigProvider $checkoutComConfigProvider; private SerializerInterface $serializer; + private Config $checkoutComConfig; public function __construct( Cart $cart, @@ -62,6 +63,7 @@ public function __construct( ); $this->cart = $cart; $this->checkoutComConfigProvider = $checkoutComConfigProvider; + $this->checkoutComConfig = $checkoutComConfig; $this->serializer = $serializerInterface ?: ObjectManager::getInstance() ->get(JsonHexTag::class); } @@ -86,4 +88,10 @@ public function getSerializedCheckoutComConfig(): string return $this->serializer->serialize($config); } + + public function isPaypalOrApplePayEnabled(): bool + { + return $this->checkoutComConfig->getValue('active', 'checkoutcom_apple_pay') + || $this->checkoutComConfig->getValue('active', 'checkoutcom_paypal'); + } } diff --git a/Block/Paypal/Review/PaymentMethod.php b/Block/Paypal/Review/PaymentMethod.php new file mode 100644 index 00000000..3d06a43f --- /dev/null +++ b/Block/Paypal/Review/PaymentMethod.php @@ -0,0 +1,51 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ +namespace CheckoutCom\Magento2\Block\Paypal\Review; + +use CheckoutCom\Magento2\Model\Methods\PaypalMethod; +use Magento\Checkout\Model\Session; +use Magento\Framework\View\Element\Template; +use \Magento\Framework\View\Element\Template\Context as TemplateContext; + +class PaymentMethod extends Template +{ + protected Session $checkoutSession; + protected PaypalMethod $paypalMethod; + + public function __construct( + TemplateContext $context, + Session $checkoutSession, + PaypalMethod $paypalMethod, + array $data = [] + ) { + parent::__construct($context, $data); + $this->checkoutSession = $checkoutSession; + $this->paypalMethod = $paypalMethod; + } + + public function getEmail(): string + { + return (string)$this->checkoutSession->getQuote()->getCustomerEmail(); + } + + public function getPaymentMethod(): string + { + return (string)$this->paypalMethod->getTitle(); + } +} diff --git a/Block/Paypal/Review/PlaceOrderButton.php b/Block/Paypal/Review/PlaceOrderButton.php new file mode 100644 index 00000000..75cc32c0 --- /dev/null +++ b/Block/Paypal/Review/PlaceOrderButton.php @@ -0,0 +1,66 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ +namespace CheckoutCom\Magento2\Block\Paypal\Review; + +use CheckoutCom\Magento2\Controller\Paypal\Review; +use CheckoutCom\Magento2\Model\Methods\PaypalMethod; +use Magento\Checkout\Model\Session; +use Magento\Framework\App\RequestInterface; +use Magento\Framework\View\Element\Template; +use \Magento\Framework\View\Element\Template\Context as TemplateContext; + +class PlaceOrderButton extends Template +{ + protected Session $checkoutSession; + protected RequestInterface $request; + protected PaypalMethod $paypalMethod; + + public function __construct( + TemplateContext $context, + Session $checkoutSession, + RequestInterface $request, + PaypalMethod $paypalMethod, + array $data = [] + ) { + parent::__construct($context, $data); + $this->checkoutSession = $checkoutSession; + $this->request = $request; + $this->paypalMethod = $paypalMethod; + } + + public function getEmail(): string + { + return (string)$this->checkoutSession->getQuote()->getCustomerEmail(); + } + + public function canPlaceOrder(): bool + { + return (bool)$this->checkoutSession->getQuote()->getShippingAddress()->getShippingMethod(); + } + + public function getPaymentMethod(): string + { + return (string)$this->paypalMethod->getCode(); + } + + public function getContextId(): string + { + return (string)$this->request->getParam(Review::PAYMENT_CONTEXT_ID_PARAMETER); + } +} diff --git a/Block/Paypal/Review/ShippingAddress.php b/Block/Paypal/Review/ShippingAddress.php new file mode 100644 index 00000000..6e4a352d --- /dev/null +++ b/Block/Paypal/Review/ShippingAddress.php @@ -0,0 +1,163 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ + +namespace CheckoutCom\Magento2\Block\Paypal\Review; + +use CheckoutCom\Magento2\Controller\Paypal\Review; +use Magento\Checkout\Model\Session as CheckoutSession; +use Magento\Customer\Api\AddressMetadataInterface; +use Magento\Customer\Api\AddressRepositoryInterface; +use Magento\Customer\Api\Data\AddressInterfaceFactory; +use Magento\Customer\Api\Data\CustomerInterface; +use Magento\Customer\Api\Data\CustomerInterfaceFactory; +use Magento\Customer\Block\Address\Edit as CustomerAddressEdit; +use Magento\Customer\Helper\Address; +use Magento\Customer\Helper\Session\CurrentCustomer; +use Magento\Customer\Model\Address\Config as AddressConfig; +use Magento\Customer\Model\Session; +use Magento\Directory\Helper\Data; +use Magento\Directory\Model\ResourceModel\Country\CollectionFactory as CountryCollectionFactory; +use Magento\Directory\Model\ResourceModel\Region\CollectionFactory; +use Magento\Framework\Api\DataObjectHelper; +use Magento\Framework\App\Cache\Type\Config; +use Magento\Framework\App\RequestInterface; +use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\Exception\NoSuchEntityException; +use Magento\Framework\Json\EncoderInterface; +use Magento\Framework\Phrase; +use Magento\Framework\UrlInterface; +use Magento\Framework\View\Element\Template\Context; +use Magento\Quote\Model\Quote\Address as QuoteAddress; + +class ShippingAddress extends CustomerAddressEdit +{ + protected CheckoutSession $checkoutSession; + protected AddressConfig $addressConfig; + protected CustomerInterfaceFactory $customerInterfaceFactory; + protected UrlInterface $url; + protected RequestInterface $request; + + public function __construct( + Context $context, + Data $directoryHelper, + EncoderInterface $jsonEncoder, + Config $configCacheType, + CollectionFactory $regionCollectionFactory, + CountryCollectionFactory $countryCollectionFactory, + Session $customerSession, + AddressRepositoryInterface $addressRepository, + AddressInterfaceFactory $addressDataFactory, + CurrentCustomer $currentCustomer, + DataObjectHelper $dataObjectHelper, + CheckoutSession $checkoutSession, + AddressConfig $addressConfig, + CustomerInterfaceFactory $customerInterfaceFactory, + UrlInterface $url, + RequestInterface $request, + array $data = [], + AddressMetadataInterface $addressMetadata = null, + Address $addressHelper = null + ) { + parent::__construct( + $context, + $directoryHelper, + $jsonEncoder, + $configCacheType, + $regionCollectionFactory, + $countryCollectionFactory, + $customerSession, + $addressRepository, + $addressDataFactory, + $currentCustomer, + $dataObjectHelper, + $data, + $addressMetadata, + $addressHelper + ); + + $this->addressConfig = $addressConfig; + $this->checkoutSession = $checkoutSession; + $this->customerInterfaceFactory = $customerInterfaceFactory; + $this->url = $url; + $this->request = $request; + + $this->_address = $this->checkoutSession->getQuote()->getShippingAddress(); + } + + /** + * @throws LocalizedException + * @throws NoSuchEntityException + */ + public function getAddress(): ?QuoteAddress + { + return $this->checkoutSession->getQuote()->getShippingAddress(); + } + + public function getCustomer(): CustomerInterface + { + return $this->customerInterfaceFactory->create(); + } + + public function isDefaultBilling(): bool + { + return false; + } + + public function isDefaultShipping(): bool + { + return false; + } + + public function canSetAsDefaultBilling(): bool + { + return false; + } + + public function canSetAsDefaultShipping(): bool + { + return false; + } + + public function getCustomerAddressCount(): int + { + return 1; + } + + public function getRegion(): string + { + return (string)$this->getAddress()->getRegion(); + } + + public function getRegionId() + { + return $this->getAddress()->getRegionId() ?? 0; + } + + public function getTitle(): Phrase + { + return __('Review Order'); + } + + public function getSaveUrl(): string + { + return $this->url->getUrl('checkoutcom/paypal/saveExpressShippingAddress', [ + Review::PAYMENT_CONTEXT_ID_PARAMETER => $this->request->getParam(Review::PAYMENT_CONTEXT_ID_PARAMETER) + ]); + } +} diff --git a/Block/Paypal/Review/ShippingMethod.php b/Block/Paypal/Review/ShippingMethod.php new file mode 100644 index 00000000..4b900317 --- /dev/null +++ b/Block/Paypal/Review/ShippingMethod.php @@ -0,0 +1,88 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ +namespace CheckoutCom\Magento2\Block\Paypal\Review; + +use CheckoutCom\Magento2\Controller\Paypal\Review; +use Magento\Checkout\Model\Session; +use Magento\Framework\App\RequestInterface; +use Magento\Framework\Pricing\PriceCurrencyInterface; +use Magento\Framework\UrlInterface; +use Magento\Framework\View\Element\Template; +use Magento\Framework\View\Element\Template\Context as TemplateContext; +use Magento\Quote\Model\Quote\Address as QuoteAddresss; +use Magento\Quote\Model\Quote\Address\Rate as QuoteRate; + +class ShippingMethod extends Template +{ + protected Session $checkoutSession; + protected UrlInterface $url; + protected RequestInterface $request; + protected PriceCurrencyInterface $priceCurrency; + + public function __construct( + TemplateContext $context, + Session $checkoutSession, + RequestInterface $request, + UrlInterface $url, + PriceCurrencyInterface $priceCurrency, + array $data = [] + ) { + parent::__construct($context, $data); + $this->checkoutSession = $checkoutSession; + $this->url = $url; + $this->request = $request; + $this->priceCurrency = $priceCurrency; + } + + public function getRates(): array + { + $shippingAddress = $this->getShippingAddress(); + $shippingAddress->collectShippingRates(); + + return $shippingAddress->getGroupedAllShippingRates(); + } + + public function getShippingMethodUpdateUrl(QuoteRate $carrierRate): string + { + return $this->url->getUrl('checkoutcom/paypal/saveExpressShippingMethod', [ + Review::PAYMENT_CONTEXT_ID_PARAMETER => $this->request->getParam(Review::PAYMENT_CONTEXT_ID_PARAMETER), + Review::SHIPPING_METHOD_PARAMETER => $carrierRate->getCode() + ]); + } + + public function isCurrentShippingRate(QuoteRate $carrierRate): bool + { + return $carrierRate->getCode() === $this->getShippingAddress()->getShippingMethod(); + } + + public function getFormatedPrice($price): string + { + return $this->priceCurrency->convertAndFormat( + $price, + false, + PriceCurrencyInterface::DEFAULT_PRECISION, + $this->checkoutSession->getQuote()->getStore() + ); + } + + private function getShippingAddress(): QuoteAddresss + { + return $this->checkoutSession->getQuote()->getShippingAddress(); + } +} diff --git a/Block/Paypal/Script.php b/Block/Paypal/Script.php new file mode 100644 index 00000000..64570cea --- /dev/null +++ b/Block/Paypal/Script.php @@ -0,0 +1,76 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ +namespace CheckoutCom\Magento2\Block\Paypal; + +use CheckoutCom\Magento2\Gateway\Config\Config; +use CheckoutCom\Magento2\Model\Methods\PaypalMethod; +use Magento\Framework\View\Element\Template; +use Magento\Framework\View\Element\Template\Context as TemplateContext; + +class Script extends Template +{ + private PaypalMethod $paypalMethod; + private Config $checkoutConfig; + + public function __construct( + TemplateContext $context, + PaypalMethod $paypalMethod, + Config $checkoutConfig, + array $data = [] + ) { + parent::__construct($context, $data); + $this->paypalMethod = $paypalMethod; + $this->checkoutConfig = $checkoutConfig; + } + + public function getPaypalMerchantId(): string + { + return (string)$this->paypalMethod->getConfigData('merchant_id'); + } + + public function getClientId(): string + { + return (string)$this->paypalMethod->getConfigData('checkout_client_id'); + } + + public function getPartnerAttributionId(): string + { + return (string)$this->paypalMethod->getConfigData('checkout_partner_attribution_id'); + } + + public function getIntent(): string + { + return $this->checkoutConfig->needsAutoCapture() ? 'capture' : 'authorize'; + } + + public function getCommit(): string + { + return $this->isExpressButton() ? 'false' : 'true'; + } + + public function getPageType(): string + { + return $this->getScriptType() ?? 'checkout'; + } + + private function isExpressButton(): bool + { + return $this->getMode() === 'express'; + } +} diff --git a/Controller/Api/V1.php b/Controller/Api/V1.php index 21f8804d..8760a259 100644 --- a/Controller/Api/V1.php +++ b/Controller/Api/V1.php @@ -161,30 +161,14 @@ public function execute(): Json if ($this->isValidRequest()) { // Load the quote $quote = $this->loadQuote(); - $order = null; - $reservedOrderId = null; - - if ($this->config->isPaymentWithOrderFirst()) { - // Create an order - $order = $this->orderHandler->setMethodId('checkoutcom_card_payment')->handleOrder($quote); - } - - if ($this->config->isPaymentWithPaymentFirst()) { - // Reserved an order - /** @var string $reservedOrderId */ - $reservedOrderId = $this->quoteHandler->getReference($quote); - } - - + $order = $this->orderHandler->setMethodId('checkoutcom_card_payment')->handleOrder($quote); // Process the payment - if (($this->config->isPaymentWithPaymentFirst() && $this->quoteHandler->isQuote($quote) && $reservedOrderId !== null) - || ($this->config->isPaymentWithOrderFirst() && $this->orderHandler->isOrder($order)) - ) { + if ($this->orderHandler->isOrder($order)) { //Init values to request payment - $amount = (float)$this->config->isPaymentWithPaymentFirst() ? $quote->getGrandTotal() : $order->getGrandTotal(); - $currency = (string)$this->config->isPaymentWithPaymentFirst() ? $quote->getQuoteCurrencyCode() : $order->getOrderCurrencyCode(); - $reference = (string)$this->config->isPaymentWithPaymentFirst() ? $reservedOrderId : $order->getIncrementId(); + $amount = $order->getGrandTotal(); + $currency = $order->getOrderCurrencyCode(); + $reference = $order->getIncrementId(); // Get response and success $response = $this->requestPayment($amount, $currency, $reference); @@ -195,9 +179,6 @@ public function execute(): Json // Process the response $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); if ($api->isValidResponse($response)) { - // Create an order if processing is with payment first - $order = $order === null ? $this->orderHandler->setMethodId('checkoutcom_card_payment')->handleOrder($quote) : $order; - // Get the payment details $paymentDetails = $api->getPaymentDetails($response->id); @@ -211,6 +192,9 @@ public function execute(): Json $success = $response->isSuccessful(); $orderId = $order->getId(); } else { + // Delete the order if payment is first + $this->orderHandler->deleteOrder($order); + $errorMessage = __('The payment request was declined by the gateway.'); } } else { diff --git a/Controller/Api/V2.php b/Controller/Api/V2.php index 702ec144..08421ae0 100644 --- a/Controller/Api/V2.php +++ b/Controller/Api/V2.php @@ -343,29 +343,20 @@ protected function hasValidFields() */ protected function processPayment(): array { - // Try to load a quote - $quote = $this->config->isPaymentWithPaymentFirst() ? $this->loadQuote() : null; - // Reserved an order - $reservedOrderId = $this->config->isPaymentWithPaymentFirst() ? $this->quoteHandler->getReference($quote) : null; - // Create Order if needed before paymen - $orderBeforePayment = $this->config->isPaymentWithOrderFirst() ? $this->createOrder() : null; + // Create Order if needed before payment + $order = $this->createOrder(); // Process the payment - if (($this->config->isPaymentWithPaymentFirst() && $this->quoteHandler->isQuote($quote) && $reservedOrderId !== null) - || ($this->config->isPaymentWithOrderFirst() && $this->orderHandler->isOrder($orderBeforePayment)) - ) { + if ($this->orderHandler->isOrder($order)) { //Init values to request payment - $amount = (float)$this->config->isPaymentWithPaymentFirst() ? $quote->getGrandTotal() : $orderBeforePayment->getGrandTotal(); - $currency = (string)$this->config->isPaymentWithPaymentFirst() ? $quote->getQuoteCurrencyCode() : $orderBeforePayment->getOrderCurrencyCode(); - $reference = (string)$this->config->isPaymentWithPaymentFirst() ? $reservedOrderId : $orderBeforePayment->getIncrementId(); + $amount = $order->getGrandTotal(); + $currency = $order->getOrderCurrencyCode(); + $reference = $order->getIncrementId(); // Get the payment response $response = $this->getPaymentResponse($amount, $currency, $reference); if ($this->api->isValidResponse($response)) { - // Create Order - $this->order = $order = ($orderBeforePayment === null) ? $this->createOrder() : $orderBeforePayment; - // Process the payment response $is3ds = property_exists( $response, @@ -408,6 +399,9 @@ protected function processPayment(): array if (isset($this->data->failure_url)) { $this->result['redirect_url'] = $this->data->failure_url; } + + // Delete the order if payment is first + $this->orderHandler->deleteOrder($order); } // Update the order id diff --git a/Controller/Apm/Display.php b/Controller/Apm/Display.php index 536ccfe4..50e9daef 100644 --- a/Controller/Apm/Display.php +++ b/Controller/Apm/Display.php @@ -22,6 +22,7 @@ use CheckoutCom\Magento2\Gateway\Config\Config; use CheckoutCom\Magento2\Model\Config\Backend\Source\ConfigService; use CheckoutCom\Magento2\Model\Methods\AlternativePaymentMethod; +use CheckoutCom\Magento2\Model\Service\ApiHandlerService; use CheckoutCom\Magento2\Model\Service\QuoteHandlerService; use Magento\Framework\App\Action\Action; use Magento\Framework\App\Action\Context; @@ -71,6 +72,12 @@ class Display extends Action * @var QuoteHandlerService $quoteHandler */ private $quoteHandler; + /** + * $apiHandler field + * + * @var ApiHandlerService $apiHandler + */ + private $apiHandler; /** * Display constructor @@ -82,6 +89,7 @@ class Display extends Action * @param QuoteHandlerService $quoteHandler * @param StoreManagerInterface $storeManager * @param ScopeConfigInterface $scopeConfig + * @param ApiHandlerService $apiHandler */ public function __construct( Context $context, @@ -90,7 +98,8 @@ public function __construct( Config $config, QuoteHandlerService $quoteHandler, StoreManagerInterface $storeManager, - ScopeConfigInterface $scopeConfig + ScopeConfigInterface $scopeConfig, + ApiHandlerService $apiHandler ) { parent::__construct($context); @@ -100,6 +109,7 @@ public function __construct( $this->quoteHandler = $quoteHandler; $this->storeManager = $storeManager; $this->scopeConfig = $scopeConfig; + $this->apiHandler = $apiHandler; } /** @@ -213,6 +223,7 @@ public function loadBlock(string $apmId, string $title): string ->setTemplate('CheckoutCom_Magento2::payment/apm/' . $apmId . '.phtml') ->setData('apm_id', $apmId) ->setData('title', $title) + ->setData('service_previous_mode', $this->apiHandler->isPreviousMode()) ->toHtml(); } } diff --git a/Controller/Klarna/Context.php b/Controller/Klarna/Context.php new file mode 100644 index 00000000..dfa18f39 --- /dev/null +++ b/Controller/Klarna/Context.php @@ -0,0 +1,126 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ + +namespace CheckoutCom\Magento2\Controller\Klarna; + +use Checkout\CheckoutApiException; +use Checkout\Common\AccountHolder; +use Checkout\Common\Address; +use Checkout\Payments\Request\Source\AbstractRequestSource; +use Checkout\Payments\Request\Source\Contexts\PaymentContextsKlarnaSource; +use CheckoutCom\Magento2\Helper\Logger; +use CheckoutCom\Magento2\Model\Service\PaymentContextRequestService; +use CheckoutCom\Magento2\Model\Service\QuoteHandlerService; +use Magento\Framework\App\Action\HttpPostActionInterface; +use Magento\Framework\App\RequestInterface; +use Magento\Framework\Controller\Result\Json; +use Magento\Framework\Controller\Result\JsonFactory; +use Magento\Framework\Phrase; +use Magento\Framework\Serialize\SerializerInterface; + +class Context implements HttpPostActionInterface +{ + protected JsonFactory $resultJsonFactory; + protected PaymentContextRequestService $paymentContextRequestService; + protected RequestInterface $request; + protected QuoteHandlerService $quoteHandlerService; + protected Logger $logger; + protected SerializerInterface $serializer; + + public function __construct( + JsonFactory $resultJsonFactory, + PaymentContextRequestService $paymentContextRequestService, + RequestInterface $request, + QuoteHandlerService $quoteHandlerService, + SerializerInterface $serializer, + Logger $logger + ) { + $this->resultJsonFactory = $resultJsonFactory; + $this->paymentContextRequestService = $paymentContextRequestService; + $this->request = $request; + $this->quoteHandlerService = $quoteHandlerService; + $this->logger = $logger; + $this->serializer = $serializer; + } + + /** + * @inheritDoc + */ + public function execute(): Json + { + $resultJson = $this->resultJsonFactory->create(); + + try { + $resultJson->setData( + [ + 'content' => $this->paymentContextRequestService + ->setShippingFeesAsItem(true) + ->collectDiscountAmountOnItemUnitPrice(false) + ->setForceAuthorizeMode((bool)$this->request->getParam('forceAuthorizeMode')) + ->makePaymentContextRequests( + $this->getKlarnaContextSource() + ), + ] + ); + } catch (CheckoutApiException $apiException) { + $this->logger->write(sprintf('Error happen while requesting klarna context: %s', $apiException->getMessage())); + $resultJson->setData( + [ + 'content' => [ + 'error' => $this->resolveExceptionErrorMessage($apiException), + ], + ] + ); + } + + return $resultJson; + } + + private function resolveExceptionErrorMessage(CheckoutApiException $apiException): Phrase + { + $errorDetails = !$apiException->error_details ? [] : $apiException->error_details; + $errorCodes = $errorDetails['error_codes'] ?? []; + + return in_array('billing_country_invalid', $errorCodes) ? + __('This payment method is not available in your country') : + ( + in_array('currency_not_supported', $errorCodes) ? + __('Currency is not supported for your country') : __('This payment method is not available') + ); + } + + private function getKlarnaContextSource(): AbstractRequestSource + { + $klarnaRequestSource = new PaymentContextsKlarnaSource(); + $accountHolder = new AccountHolder(); + $billingAddress = new Address(); + $billingAddress->country = $this->getCountryId(); + $accountHolder->billing_address = $billingAddress; + $klarnaRequestSource->account_holder = $accountHolder; + + return $klarnaRequestSource; + } + + /** + * If a country id is given on request parameters give it first, if no use the quote one + */ + private function getCountryId(): string + { + return (string)$this->serializer->unserialize((string)$this->request->getContent())['country'] ?: $this->quoteHandlerService->getBillingAddress()->getCountry(); + } +} diff --git a/Controller/Klarna/GetCustomerDatas.php b/Controller/Klarna/GetCustomerDatas.php new file mode 100644 index 00000000..53beda39 --- /dev/null +++ b/Controller/Klarna/GetCustomerDatas.php @@ -0,0 +1,67 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ + +namespace CheckoutCom\Magento2\Controller\Klarna; + +use CheckoutCom\Magento2\Model\Service\QuoteHandlerService; +use Magento\Framework\App\Action\HttpPostActionInterface; +use Magento\Framework\App\RequestInterface; +use Magento\Framework\Controller\Result\Json; +use Magento\Framework\Controller\Result\JsonFactory; + +class GetCustomerDatas implements HttpPostActionInterface +{ + protected JsonFactory $resultJsonFactory; + protected RequestInterface $request; + protected QuoteHandlerService $quoteHandlerService; + + public function __construct( + JsonFactory $resultJsonFactory, + RequestInterface $request, + QuoteHandlerService $quoteHandlerService + ) { + $this->resultJsonFactory = $resultJsonFactory; + $this->request = $request; + $this->quoteHandlerService = $quoteHandlerService; + } + + /** + * @inheritDoc + */ + public function execute(): Json + { + // Get the request data + $quoteId = $this->request->getParam('quote_id'); + $storeId = $this->request->getParam('store_id'); + + // Try to load a quote + $quote = $this->quoteHandlerService->getQuote([ + 'entity_id' => $quoteId, + 'store_id' => $storeId, + ]); + + $resultJson = $this->resultJsonFactory->create(); + $resultJson->setData( + [ + 'billing' => $this->quoteHandlerService->getBillingAddress()->toArray(), + ] + ); + + return $resultJson; + } +} diff --git a/Controller/Payment/Fail.php b/Controller/Payment/Fail.php index 775a2ab5..f07d2f16 100644 --- a/Controller/Payment/Fail.php +++ b/Controller/Payment/Fail.php @@ -191,6 +191,9 @@ public function execute(): ResponseInterface // Handle the failed order $this->orderStatusHandler->handleFailedPayment($order); + //Delete order if payment first + $this->orderHandler->deleteOrder($order); + $errorMessage = null; if (isset($response['actions'][0]['response_code'])) { $errorMessage = $this->paymentErrorHandlerService->getErrorMessage( @@ -204,19 +207,10 @@ public function execute(): ResponseInterface $order ); - // Display error message and knet mandate info + // Display error message $this->messageManager->addErrorMessage( __('The transaction could not be processed.') ); - $this->messageManager->addComplexNoticeMessage('knetInfoMessage', [ - 'postDate' => $response['source']['post_date'] ?? null, - 'amount' => $amount ?? null, - 'paymentId' => $response['source']['knet_payment_id'] ?? null, - 'transactionId' => $response['source']['knet_transaction_id'] ?? null, - 'authCode' => $response['source']['auth_code'] ?? null, - 'reference' => $response['source']['bank_reference'] ?? null, - 'resultCode' => $response['source']['knet_result'] ?? null, - ]); } else { $this->messageManager->addErrorMessage( $errorMessage ? $errorMessage->getText() : __('The transaction could not be processed.') diff --git a/Controller/Payment/PlaceOrder.php b/Controller/Payment/PlaceOrder.php index 9c601a91..05652945 100644 --- a/Controller/Payment/PlaceOrder.php +++ b/Controller/Payment/PlaceOrder.php @@ -219,18 +219,12 @@ public function execute(): Json if (isset($data['methodId']) && !$this->isEmptyCardToken($data)) { // Process the request if ($this->getRequest()->isAjax() && $quote) { - // Reserved an order - /** @var string $reservedOrderId */ - $reservedOrderId = $this->config->isPaymentWithPaymentFirst() ? $this->quoteHandler->getReference($quote) : null; - //Create order if it is needed before payment - $order = $this->config->isPaymentWithOrderFirst() ? $this->orderHandler->setMethodId($data['methodId'])->handleOrder($quote) : null; + //Create order before payment + $order = $this->orderHandler->setMethodId($data['methodId'])->handleOrder($quote); // Process the payment - if (($this->config->isPaymentWithPaymentFirst() && $this->quoteHandler->isQuote($quote) && $reservedOrderId !== null) - || ($this->config->isPaymentWithOrderFirst() && $this->orderHandler->isOrder($order) - ) - ) { + if ($this->orderHandler->isOrder($order)) { $log = false; // Get the debug config value $debug = $this->scopeConfig->getValue( @@ -245,9 +239,9 @@ public function execute(): Json ); //Init values to request payment - $amount = (float)$this->config->isPaymentWithPaymentFirst() ? $quote->getGrandTotal() : $order->getGrandTotal(); - $currency = (string)$this->config->isPaymentWithPaymentFirst() ? $quote->getQuoteCurrencyCode() : $order->getOrderCurrencyCode(); - $reference = (string)$this->config->isPaymentWithPaymentFirst() ? $reservedOrderId : $order->getIncrementId(); + $amount = (float) $order->getGrandTotal(); + $currency = (string) $order->getOrderCurrencyCode(); + $reference = (string) $order->getIncrementId(); // Get response and success $response = $this->requestPayment($quote, $data, $amount, $currency, $reference); @@ -262,11 +256,9 @@ public function execute(): Json $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); $isValidResponse = $api->isValidResponse($response); + $responseCode = isset($response['response_code']) ? $response['response_code'] : ''; - if ($isValidResponse) { - // Create an order if processing is payment first - $order = $order === null ? $this->orderHandler->setMethodId($data['methodId'])->handleOrder($quote) : $order; - + if ($isValidResponse && $this->isAuthorized($responseCode)) { // Add the payment info to the order $order = $this->utilities->setPaymentData($order, $response, $data); @@ -303,6 +295,9 @@ public function execute(): Json if ($this->config->isPaymentWithOrderFirst()) { $this->orderStatusHandler->handleFailedPayment($order); } + + // Delete the order if payment is first + $this->orderHandler->deleteOrder($order); } } else { // Payment failed @@ -380,4 +375,16 @@ protected function requestPayment(CartInterface $quote, array $data, float $amou $reference ); } + + /** + * Check if response code is successful + * + * @param string $responseCode + * + * @return bool + */ + protected function isAuthorized(string $responseCode): bool + { + return empty($responseCode) || mb_substr($responseCode, 0, 2) === PaymentErrorHandlerService::TRANSACTION_SUCCESS_DIGITS; + } } diff --git a/Controller/Payment/Verify.php b/Controller/Payment/Verify.php index bbc4af89..2d4c4dde 100644 --- a/Controller/Payment/Verify.php +++ b/Controller/Payment/Verify.php @@ -161,16 +161,6 @@ public function execute(): ResponseInterface $response['amount'] ?? null, $order ); - - $this->messageManager->addComplexNoticeMessage('knetInfoMessage', [ - 'postDate' => $response['source']['post_date'] ?? null, - 'amount' => $amount ?? null, - 'paymentId' => $response['source']['knet_payment_id'] ?? null, - 'transactionId' => $response['source']['knet_transaction_id'] ?? null, - 'authCode' => $response['source']['auth_code'] ?? null, - 'reference' => $response['source']['bank_reference'] ?? null, - 'resultCode' => $response['source']['knet_result'] ?? null, - ]); } if (isset($response['metadata']['successUrl']) && @@ -215,7 +205,7 @@ public function execute(): ResponseInterface $this->messageManager->addErrorMessage( __('An error has occurred, please select another payment method or retry in a few minutes') ); - + $this->logger->write($e->getMessage()); return $this->_redirect('checkout/cart', ['_secure' => true]); diff --git a/Controller/Paypal/Context.php b/Controller/Paypal/Context.php new file mode 100644 index 00000000..3016431e --- /dev/null +++ b/Controller/Paypal/Context.php @@ -0,0 +1,70 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ + +namespace CheckoutCom\Magento2\Controller\Paypal; + +use Checkout\Payments\Request\Source\AbstractRequestSource; +use Checkout\Payments\Request\Source\Contexts\PaymentContextsPayPalSource; +use CheckoutCom\Magento2\Model\Service\PaymentContextRequestService; +use Magento\Framework\App\Action\HttpPostActionInterface; +use Magento\Framework\App\RequestInterface; +use Magento\Framework\Controller\Result\Json; +use Magento\Framework\Controller\Result\JsonFactory; + +class Context implements HttpPostActionInterface +{ + protected JsonFactory $resultJsonFactory; + protected PaymentContextRequestService $paymentContextRequestService; + protected RequestInterface $request; + + public function __construct( + JsonFactory $resultJsonFactory, + PaymentContextRequestService $paymentContextRequestService, + RequestInterface $request + ) { + $this->resultJsonFactory = $resultJsonFactory; + $this->paymentContextRequestService = $paymentContextRequestService; + $this->request = $request; + } + + /** + * @inheritDoc + */ + public function execute(): Json + { + $resultJson = $this->resultJsonFactory->create(); + $resultJson->setData( + [ + 'content' => $this->paymentContextRequestService + ->setShippingFeesAsItem(false) + ->collectDiscountAmountOnItemUnitPrice(true) + ->setForceAuthorizeMode((bool)$this->request->getParam('forceAuthorizeMode')) + ->makePaymentContextRequests( + $this->getPaypalContext() + ), + ] + ); + + return $resultJson; + } + + private function getPaypalContext(): AbstractRequestSource + { + return new PaymentContextsPayPalSource(); + } +} diff --git a/Controller/Paypal/Review.php b/Controller/Paypal/Review.php new file mode 100644 index 00000000..cc178a05 --- /dev/null +++ b/Controller/Paypal/Review.php @@ -0,0 +1,113 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ +namespace CheckoutCom\Magento2\Controller\Paypal; + +use CheckoutCom\Magento2\Model\Methods\PaypalMethod; +use CheckoutCom\Magento2\Model\Service\PaymentContextRequestService; +use Magento\Checkout\Model\Session; +use Magento\Framework\App\Action\HttpGetActionInterface; +use Magento\Framework\App\RequestInterface; +use Magento\Framework\Controller\Result\RedirectFactory; +use Magento\Framework\Controller\ResultFactory; +use Magento\Framework\Controller\ResultInterface; +use Magento\Framework\Message\ManagerInterface; +use Magento\Framework\UrlInterface; +use Magento\Quote\Api\Data\PaymentInterface; +use Magento\Quote\Api\Data\PaymentInterfaceFactory; + +class Review implements HttpGetActionInterface +{ + public const PAYMENT_CONTEXT_ID_PARAMETER = 'contextId'; + public const SHIPPING_METHOD_PARAMETER = 'method_code'; + + protected ResultFactory $resultFactory; + protected ManagerInterface $messageManager; + protected RequestInterface $request; + protected Session $checkoutSession; + protected PaymentContextRequestService $paymentContextRequestService; + protected RedirectFactory $redirectFactory; + protected UrlInterface $urlInterface; + protected PaymentInterfaceFactory $paymentInterfaceFactory; + protected PaypalMethod $paypalMethod; + + public function __construct( + ResultFactory $resultFactory, + ManagerInterface $messageManager, + RequestInterface $request, + Session $checkoutSession, + PaymentContextRequestService $paymentContextRequestService, + RedirectFactory $redirectFactory, + UrlInterface $urlInterface, + PaymentInterfaceFactory $paymentInterfaceFactory, + PaypalMethod $paypalMethod + ) { + $this->resultFactory = $resultFactory; + $this->request = $request; + $this->messageManager = $messageManager; + $this->checkoutSession = $checkoutSession; + $this->paymentContextRequestService = $paymentContextRequestService; + $this->redirectFactory = $redirectFactory; + $this->urlInterface = $urlInterface; + $this->paymentInterfaceFactory = $paymentInterfaceFactory; + $this->paypalMethod = $paypalMethod; + } + + /** + * @return ResultInterface + */ + public function execute() + { + $resultPage = $this->resultFactory->create(ResultFactory::TYPE_PAGE); + + $quote = $this->checkoutSession->getQuote(); + $redirectToCart = false; + $paymentContextId = $this->request->getParam(self::PAYMENT_CONTEXT_ID_PARAMETER); + + // Check quote + if (!$quote || ($quote && !$quote->getId())) { + $this->messageManager->addErrorMessage(__('Your Cart is empty')); + $redirectToCart = true; + } + + // Check if context is given + if (!$redirectToCart && !$paymentContextId) { + $this->messageManager->addErrorMessage(__('We cannot find your payment informations, please try again')); + $redirectToCart = true; + } + + if (!$redirectToCart) { + /** @var PaymentInterface $paymentMethod */ + $paymentMethod = $this->paymentInterfaceFactory->create(); + $paymentMethod->setMethod($this->paypalMethod->getCode()); + + $contextDatas = $this->paymentContextRequestService->getPaymentContextById($paymentContextId, (int)$quote->getStoreId(), true, $paymentMethod); + + if (empty($contextDatas)) { + $this->messageManager->addErrorMessage(__('We cannot find your payment informations, please try again')); + $redirectToCart = true; + } + } + + if ($redirectToCart) { + return $this->redirectFactory->create()->setUrl($this->urlInterface->getUrl('checkout/cart')); + } + + return $resultPage; + } +} diff --git a/Controller/Paypal/SaveData.php b/Controller/Paypal/SaveData.php new file mode 100644 index 00000000..4e583f9a --- /dev/null +++ b/Controller/Paypal/SaveData.php @@ -0,0 +1,139 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ +namespace CheckoutCom\Magento2\Controller\Paypal; + +use CheckoutCom\Magento2\Helper\Logger as LoggerHelper; +use CheckoutCom\Magento2\Model\Methods\PaypalMethod; +use CheckoutCom\Magento2\Model\Service\PaymentContextRequestService; +use Magento\Checkout\Model\Session; +use Magento\Framework\App\RequestInterface; +use Magento\Framework\Controller\Result\RedirectFactory; +use Magento\Framework\Controller\ResultFactory; +use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\Exception\NoSuchEntityException; +use Magento\Framework\Message\ManagerInterface; +use Magento\Framework\UrlInterface; +use Magento\Quote\Api\CartRepositoryInterface; +use Magento\Quote\Api\Data\AddressInterfaceFactory; +use Magento\Quote\Api\Data\CartInterface; +use Magento\Quote\Model\Quote; + +class SaveData +{ + protected ResultFactory $resultFactory; + protected ManagerInterface $messageManager; + protected RequestInterface $request; + protected Session $checkoutSession; + protected PaymentContextRequestService $paymentContextRequestService; + protected RedirectFactory $redirectFactory; + protected UrlInterface $urlInterface; + protected CartRepositoryInterface $cartRepository; + protected AddressInterfaceFactory $addressInterfaceFactory; + protected PaypalMethod $paypalMethod; + protected LoggerHelper $logger; + + public function __construct( + LoggerHelper $loggerHelper, + ResultFactory $resultFactory, + ManagerInterface $messageManager, + RequestInterface $request, + Session $checkoutSession, + PaymentContextRequestService $paymentContextRequestService, + RedirectFactory $redirectFactory, + UrlInterface $urlInterface, + CartRepositoryInterface $cartRepository, + AddressInterfaceFactory $addressInterfaceFactory, + PaypalMethod $paypalMethod + ) { + $this->resultFactory = $resultFactory; + $this->request = $request; + $this->messageManager = $messageManager; + $this->checkoutSession = $checkoutSession; + $this->paymentContextRequestService = $paymentContextRequestService; + $this->redirectFactory = $redirectFactory; + $this->urlInterface = $urlInterface; + $this->cartRepository = $cartRepository; + $this->addressInterfaceFactory = $addressInterfaceFactory; + $this->paypalMethod = $paypalMethod; + $this->logger = $loggerHelper; + } + + /** + * Control about current request + * + * @throws LocalizedException + * @throws NoSuchEntityException + */ + protected function shouldRedirectToCart(): bool + { + $quote = $this->checkoutSession->getQuote(); + $redirectToCart = false; + + $paymentContextId = $this->request->getParam(Review::PAYMENT_CONTEXT_ID_PARAMETER); + + // Check quote + if (!$quote || ($quote && !$quote->getId())) { + $this->messageManager->addErrorMessage(__('Your Cart is empty')); + $redirectToCart = true; + } + + // Check if context is given + if (!$redirectToCart && !$paymentContextId) { + $this->messageManager->addErrorMessage(__('We cannot find your payment informations, please try again')); + $redirectToCart = true; + } + + // Check if context exists + if (!$redirectToCart) { + $contextDatas = $this->paymentContextRequestService->getPaymentContextById($paymentContextId, (int)$quote->getStoreId(), false); + + if (empty($contextDatas)) { + $this->messageManager->addErrorMessage(__('We cannot find your payment informations, please try again')); + $redirectToCart = true; + } + } + + return $redirectToCart; + } + + /** + * Assign a shipping method to quote + */ + protected function setShippingMethod(string $methodCode, CartInterface $quote): bool + { + try { + $shippingAddress = $quote->getShippingAddress(); + $shippingAddress->setShippingMethod($methodCode)->setCollectShippingRates(true); + $cartExtension = $quote->getExtensionAttributes(); + if ($cartExtension && $cartExtension->getShippingAssignments()) { + $cartExtension->getShippingAssignments()[0] + ->getShipping() + ->setMethod($methodCode); + } + $quote->collectTotals(); + + $this->cartRepository->save($quote); + + return true; + } catch (Exception $e) { + $this->messageManager->addErrorMessage(__($e->getMessage())); + + return false; + } + } +} diff --git a/Controller/Paypal/SaveExpressShippingAddress.php b/Controller/Paypal/SaveExpressShippingAddress.php new file mode 100644 index 00000000..87b70bce --- /dev/null +++ b/Controller/Paypal/SaveExpressShippingAddress.php @@ -0,0 +1,83 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ +namespace CheckoutCom\Magento2\Controller\Paypal; + +use Magento\Customer\Api\Data\AddressInterface as CustomerAddressInterface; +use Magento\Framework\App\Action\HttpPostActionInterface; +use Magento\Framework\Controller\Result\Redirect; +use Magento\Quote\Api\Data\AddressInterface; + +class SaveExpressShippingAddress extends SaveData implements HttpPostActionInterface +{ + /** + * @inheritDoc + */ + public function execute(): Redirect + { + $quote = $this->checkoutSession->getQuote(); + + $redirectToCart = $this->shouldRedirectToCart(); + + if ($redirectToCart) { + return $this->redirectFactory->create()->setUrl($this->urlInterface->getUrl('checkout/cart')); + } + + //Assign address and save quote + try { + $quoteAddress = $this->buildAddress(); + $quote->setBillingAddress($quoteAddress)->setShippingAddress($quoteAddress); + $this->cartRepository->save($quote); + + // Auto assign shipping method + $shippingAddress = $quote->getShippingAddress(); + if ($this->paypalMethod->getConfigData('express_auto_method') && !$shippingAddress->getShippingMethod()) { + $shippingAddress->collectShippingRates(); + $rates = $shippingAddress->getGroupedAllShippingRates(); + if (!empty($rates)) { + foreach ($rates as $carrier) { + foreach ($carrier as $carrierMethod) { + $this->setShippingMethod($carrierMethod->getCode(), $quote); + break; + } + } + } + } + } catch (Exception $e) { + $this->logger->write(__('Error occured while saving paypal express shipping address: %1', $e->getMessage())); + $this->messageManager->addErrorMessage(__('Unable to save Addres')); + } + + return $this->redirectFactory->create()->setRefererUrl(); + } + + public function buildAddress(): AddressInterface + { + $address = $this->addressInterfaceFactory->create(); + $address->setFirstname($this->request->getParam(CustomerAddressInterface::FIRSTNAME)); + $address->setLastName($this->request->getParam(CustomerAddressInterface::LASTNAME)); + $address->setCompany($this->request->getParam(CustomerAddressInterface::COMPANY)); + $address->setCountryId($this->request->getParam(CustomerAddressInterface::COUNTRY_ID)); + $address->setPostCode($this->request->getParam(CustomerAddressInterface::POSTCODE)); + $address->setRegionId($this->request->getParam(CustomerAddressInterface::REGION_ID)); + $address->setCity($this->request->getParam(CustomerAddressInterface::CITY)); + $address->setStreet($this->request->getParam(CustomerAddressInterface::STREET)); + $address->setTelephone($this->request->getParam(CustomerAddressInterface::TELEPHONE)); + + return $address; + } +} diff --git a/Controller/Paypal/SaveExpressShippingMethod.php b/Controller/Paypal/SaveExpressShippingMethod.php new file mode 100644 index 00000000..a44b6ad0 --- /dev/null +++ b/Controller/Paypal/SaveExpressShippingMethod.php @@ -0,0 +1,64 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ +namespace CheckoutCom\Magento2\Controller\Paypal; + +use Magento\Framework\App\Action\HttpGetActionInterface; +use Magento\Framework\Controller\Result\Redirect; + +class SaveExpressShippingMethod extends SaveData implements HttpGetActionInterface +{ + /** + * @inheritDoc + */ + public function execute(): Redirect + { + $quote = $this->checkoutSession->getQuote(); + + $redirectToCart = $this->shouldRedirectToCart(); + $methodCode = $this->request->getParam(Review::SHIPPING_METHOD_PARAMETER); + if (!$redirectToCart && !$methodCode) { + $this->messageManager->addErrorMessage(__('Missing shipping method')); + + return $this->redirectFactory->create()->setRefererUrl(); + } + + if ($redirectToCart) { + return $this->redirectFactory->create()->setUrl($this->urlInterface->getUrl('checkout/cart')); + } + + // Save Shipping address + try { + $shippingAddress = $quote->getShippingAddress(); + $shippingAddress->setShippingMethod($methodCode)->setCollectShippingRates(true); + $cartExtension = $quote->getExtensionAttributes(); + if ($cartExtension && $cartExtension->getShippingAssignments()) { + $cartExtension->getShippingAssignments()[0] + ->getShipping() + ->setMethod($methodCode); + } + $quote->collectTotals(); + + $this->cartRepository->save($quote); + } catch (Exception $e) { + $this->logger->write(__('Error occured while saving paypal express shipping method: %1', $e->getMessage())); + $this->messageManager->addErrorMessage(__('An error occurred while saving shipping method')); + } + + return $this->redirectFactory->create()->setRefererUrl(); + } +} diff --git a/Controller/Webhook/Callback.php b/Controller/Webhook/Callback.php index caff9647..3a3df8c0 100644 --- a/Controller/Webhook/Callback.php +++ b/Controller/Webhook/Callback.php @@ -340,6 +340,9 @@ public function getPayload() */ protected function cardNeedsSaving(array $payload): bool { + if (!isset($payload['data']['metadata'])) { + return false; + } $metadata = $payload['data']['metadata']; $id = $payload['data']['source']['id'] ?? ''; $saveCard = 0; diff --git a/Gateway/Config/Config.php b/Gateway/Config/Config.php index 50602670..85eb1126 100755 --- a/Gateway/Config/Config.php +++ b/Gateway/Config/Config.php @@ -314,7 +314,7 @@ public function getMethodsConfig(): array { $output = []; /** @var array $paymentMethodsConfig */ - $paymentMethodsConfig = $this->scopeConfig->getValue(Loader::KEY_PAYMENT, ScopeInterface::SCOPE_WEBSITE); + $paymentMethodsConfig = $this->scopeConfig->getValue(Loader::KEY_PAYMENT, ScopeInterface::SCOPE_STORE); /** * Get only the active CheckoutCom methods @@ -558,12 +558,22 @@ public function needsRiskRules($methodId): bool } /** - * @param int $storeCode + * Check ABC refund after NAS migration + * + * @return bool + */ + public function isAbcRefundAfterNasMigrationActive($storeCode = null): bool + { + return (bool) $this->getValue('abc_refund_enable', null, $storeCode, ScopeInterface::SCOPE_STORE); + } + + /** + * @param string $storeCode * @param string $scope * * @return Environment */ - public function getEnvironment(int $storeCode, string $scope): Environment + public function getEnvironment(string $storeCode, string $scope): Environment { if ((int)$this->getValue('environment', null, $storeCode, $scope) === 1) { return Environment::sandbox(); @@ -571,5 +581,4 @@ public function getEnvironment(int $storeCode, string $scope): Environment return Environment::production(); } - } diff --git a/Model/Api/V3.php b/Model/Api/V3.php index 1cf5b531..adab3e7a 100644 --- a/Model/Api/V3.php +++ b/Model/Api/V3.php @@ -152,12 +152,6 @@ class V3 implements V3Interface * @var Object $api */ private $api; - /** - * $order field - * - * @var Object $order - */ - private $order; /** * $quote field * @@ -295,10 +289,8 @@ private function execute(): PaymentResponseInterface if ($this->isValidPublicKey()) { if ($this->hasValidFields()) { $this->result = $this->processPayment(); - if (!$this->result['success']) { + if (!$this->result['success'] && !$this->result['error_message']) { $this->result['error_message'][] = __('The order could not be created.'); - // Handle order on failed payment - $this->orderStatusHandler->handleFailedPayment($this->order); } } } else { @@ -333,25 +325,20 @@ private function isValidPublicKey(): bool */ private function processPayment(): array { - // Try to load a quote - $quote = $this->config->isPaymentWithPaymentFirst() ? $this->loadQuote() : null; - $reservedOrderId = $this->config->isPaymentWithPaymentFirst() ? $this->quoteHandler->getReference($quote) : null; - // Create order if needed before payment - $orderBeforePayment = $this->config->isPaymentWithOrderFirst() ? $this->createOrder($this->data->getPaymentMethod()) : null; + $order = $this->createOrder($this->data->getPaymentMethod()); - if (($quote !== null && $reservedOrderId !== null) || $this->orderHandler->isOrder($orderBeforePayment)) { + if ($this->orderHandler->isOrder($order)) { //Init values to request payment - $amount = (float)$this->config->isPaymentWithPaymentFirst() ? $quote->getGrandTotal() : $orderBeforePayment->getGrandTotal(); - $currency = (string)$this->config->isPaymentWithPaymentFirst() ? $quote->getQuoteCurrencyCode() : $orderBeforePayment->getOrderCurrencyCode(); - $reference = (string)$this->config->isPaymentWithPaymentFirst() ? $reservedOrderId : $orderBeforePayment->getIncrementId(); + $amount = $order->getGrandTotal(); + $currency = $order->getOrderCurrencyCode(); + $reference = $order->getIncrementId(); // Get the payment $response = $this->getPaymentResponse($amount, $currency, $reference); + $isValidResponse = $this->api->isValidResponse($response); - if ($this->api->isValidResponse($response)) { - $this->order = $order = ($orderBeforePayment === null) ? $this->createOrder($this->data->getPaymentMethod()) : $orderBeforePayment; - + if ($isValidResponse) { // Process the payment response $is3ds = property_exists($response, '_links') && isset($response->_links['redirect']) @@ -371,7 +358,7 @@ private function processPayment(): array } // Update the result - $this->result['success'] = $response->isSuccessful(); + $this->result['success'] = $isValidResponse; } else { // Payment failed if (isset($response->response_code)) { @@ -380,6 +367,11 @@ private function processPayment(): array ); } + // Handle order on failed payment if payment is order first. + if ($this->config->isPaymentWithOrderFirst()) { + $this->orderStatusHandler->handleFailedPayment($order); + } + // Token invalid/expired if (method_exists($response, 'getErrors')) { $this->result['error_message'] = array_merge( @@ -391,6 +383,9 @@ private function processPayment(): array if ($this->data->getFailureUrl()) { $this->result['redirect_url'] = $this->data->getFailureUrl(); } + + // Delete the order if payment is first + $this->orderHandler->deleteOrder($order); } // Update the order id diff --git a/Model/Config/Backend/Source/ConfigRegion.php b/Model/Config/Backend/Source/ConfigRegion.php new file mode 100644 index 00000000..84653c13 --- /dev/null +++ b/Model/Config/Backend/Source/ConfigRegion.php @@ -0,0 +1,47 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ + +declare(strict_types=1); + +namespace CheckoutCom\Magento2\Model\Config\Backend\Source; + +use Magento\Framework\Data\OptionSourceInterface; + +class ConfigRegion implements OptionSourceInterface +{ + public const REGION_GLOBAL = 'global'; + public const REGION_KSA = 'ksa'; + + /** + * Options getter + * + * @return string[][] + */ + public function toOptionArray(): array + { + return [ + [ + 'value' => self::REGION_GLOBAL, + 'label' => __('--') + ], + [ + 'value' => self::REGION_KSA, + 'label' => __('KSA') + ] + ]; + } +} diff --git a/Model/Files/Mada/apm_list.csv b/Model/Files/Mada/apm_list.csv index 5f9d6e68..d95e296a 100644 --- a/Model/Files/Mada/apm_list.csv +++ b/Model/Files/Mada/apm_list.csv @@ -1,10 +1,9 @@ Id,Title alipay,Alipay boleto,Boleto -giropay,Giropay ideal,Ideal poli,Poli sepa,Sepa sofort,Sofort klarna,Klarna -eps,EPS \ No newline at end of file +eps,EPS diff --git a/Model/Methods/AlternativePaymentMethod.php b/Model/Methods/AlternativePaymentMethod.php index 424c52a1..d53d71bd 100755 --- a/Model/Methods/AlternativePaymentMethod.php +++ b/Model/Methods/AlternativePaymentMethod.php @@ -27,7 +27,6 @@ use Checkout\Payments\Previous\Source\Apm\RequestBoletoSource; use Checkout\Payments\Previous\Source\Apm\RequestEpsSource as PreviousRequestEpsSource; use Checkout\Payments\Previous\Source\Apm\RequestFawrySource as PreviousRequestFawrySource; -use Checkout\Payments\Previous\Source\Apm\RequestGiropaySource; use Checkout\Payments\Previous\Source\Apm\RequestIdealSource as PreviousRequestIdealSource; use Checkout\Payments\Previous\Source\Apm\RequestKlarnaSource; use Checkout\Payments\Previous\Source\Apm\RequestKnetSource; @@ -103,11 +102,10 @@ class AlternativePaymentMethod extends AbstractMethod const NAS_UNAVAILABLE_APM = [ 'alipay', 'boleto', - 'giropay', 'klarna', - 'knet', 'poli', 'sepa', + 'paypal' ]; /** * List of unavailable apm for ABC mode @@ -678,31 +676,6 @@ public function boleto(array $data): RequestBoletoSource return $boletoSource; } - /** - * Create source - * - * @param array $data - * - * @return RequestGiropaySource - * @throws NoSuchEntityException - */ - public function giropay(array $data): RequestGiropaySource - { - /** @var string $purpose */ - $purpose = substr( - (string)__('Pay. req. from %1', $this->config->getStoreName()), - 0, - 27 - ); - - $source = new RequestGiropaySource(); - $source->purpose = null; - $source->bic = $this->getValue('bic', $data); - $source->info_fields = null; - - return $source; - } - /** * @param array $data * @@ -714,10 +687,10 @@ public function ideal(array $data) { if ($this->apiHandler->isPreviousMode()) { $source = new PreviousRequestIdealSource(); + $source->bic = $data['bic']; } else { $source = new RequestIdealSource(); } - $source->bic = $data['bic']; $source->description = $data['description']; $locale = explode('_', $this->shopperHandler->getCustomerLocale('nl_NL') ?? ''); $source->language = $locale[0]; @@ -1060,7 +1033,14 @@ public function refund(InfoInterface $payment, $amount): AbstractMethod $storeCode = $payment->getOrder()->getStore()->getCode(); // Initialize the API handler - $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + try { + $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + } catch (CheckoutArgumentException $e) { + if (!$this->config->isAbcRefundAfterNasMigrationActive($storeCode)) { + throw new LocalizedException(__($e->getMessage())); + } + $api = $this->apiHandler->initAbcForRefund($storeCode, ScopeInterface::SCOPE_STORE); + } // Check the status if (!$this->canRefund()) { @@ -1070,7 +1050,15 @@ public function refund(InfoInterface $payment, $amount): AbstractMethod } // Process the refund request - $response = $api->refundOrder($payment, $amount); + try { + $response = $api->refundOrder($payment, $amount); + } catch (CheckoutApiException $e) { + if (!$this->config->isAbcRefundAfterNasMigrationActive($storeCode)) { + throw new LocalizedException(__($e->getMessage())); + } + $api = $this->apiHandler->initAbcForRefund($storeCode, ScopeInterface::SCOPE_STORE); + $response = $api->refundOrder($payment, $amount); + } if (!$api->isValidResponse($response)) { throw new LocalizedException( @@ -1109,7 +1097,12 @@ public function isAvailable(CartInterface $quote = null): bool ); $apms = $this->config->getApms(); - $billingAddress = $this->quoteHandler->getBillingAddress()->getData(); + + if (!$quote) { + $quote = $this->quoteHandler->getQuote(); + } + + $billingAddress = $quote->getBillingAddress()->getData(); if (isset($billingAddress['country_id'])) { foreach ($apms as $apm) { diff --git a/Model/Methods/ApplePayMethod.php b/Model/Methods/ApplePayMethod.php index 99bd777b..8fb31da0 100755 --- a/Model/Methods/ApplePayMethod.php +++ b/Model/Methods/ApplePayMethod.php @@ -494,7 +494,14 @@ public function refund(InfoInterface $payment, $amount): AbstractMethod $storeCode = $payment->getOrder()->getStore()->getCode(); // Initialize the API handler - $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + try { + $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + } catch (CheckoutArgumentException $e) { + if (!$this->config->isAbcRefundAfterNasMigrationActive($storeCode)) { + throw new LocalizedException(__($e->getMessage())); + } + $api = $this->apiHandler->initAbcForRefund($storeCode, ScopeInterface::SCOPE_STORE); + } // Check the status if (!$this->canRefund()) { @@ -504,7 +511,16 @@ public function refund(InfoInterface $payment, $amount): AbstractMethod } // Process the refund request - $response = $api->refundOrder($payment, $amount); + try { + $response = $api->refundOrder($payment, $amount); + } catch (CheckoutApiException $e) { + if (!$this->config->isAbcRefundAfterNasMigrationActive($storeCode)) { + throw new LocalizedException(__($e->getMessage())); + } + $api = $this->apiHandler->initAbcForRefund($storeCode, ScopeInterface::SCOPE_STORE); + $response = $api->refundOrder($payment, $amount); + } + if (!$api->isValidResponse($response)) { throw new LocalizedException( __('The refund request could not be processed.') diff --git a/Model/Methods/CardPaymentMethod.php b/Model/Methods/CardPaymentMethod.php index c1649c6d..fc176dd5 100755 --- a/Model/Methods/CardPaymentMethod.php +++ b/Model/Methods/CardPaymentMethod.php @@ -66,6 +66,9 @@ class CardPaymentMethod extends AbstractMethod * @var string CODE */ const CODE = 'checkoutcom_card_payment'; + + const PREFERRED_SCHEMES = ['VISA','MASTERCARD','CARTES_BANCAIRES']; + /** * $_code field * @@ -357,7 +360,7 @@ public function sendPaymentRequest( } // Preferred scheme - if (isset($data['preferredScheme']) && $data['preferredScheme'] !== '') { + if (isset($data['preferredScheme']) && in_array((string) strtoupper($data['preferredScheme']), self::PREFERRED_SCHEMES)) { $request->processing = ['preferred_scheme' => strtolower($data['preferredScheme'])]; } @@ -427,7 +430,14 @@ public function capture(InfoInterface $payment, $amount): AbstractMethod $storeCode = $payment->getOrder()->getStore()->getCode(); // Initialize the API handler - $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + try { + $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + } catch (CheckoutArgumentException $e) { + if (!$this->config->isAbcRefundAfterNasMigrationActive($storeCode)) { + throw new LocalizedException(__($e->getMessage())); + } + $api = $this->apiHandler->initAbcForRefund($storeCode, ScopeInterface::SCOPE_STORE); + } // Check the status if (!$this->canCapture()) { @@ -558,7 +568,14 @@ public function refund(InfoInterface $payment, $amount): AbstractMethod $storeCode = $payment->getOrder()->getStore()->getCode(); // Initialize the API handler - $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + try { + $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + } catch (CheckoutArgumentException $e) { + if (!$this->config->isAbcRefundAfterNasMigrationActive($storeCode)) { + throw new LocalizedException(__($e->getMessage())); + } + $api = $this->apiHandler->initAbcForRefund($storeCode, ScopeInterface::SCOPE_STORE); + } // Check the status if (!$this->canRefund()) { @@ -568,7 +585,15 @@ public function refund(InfoInterface $payment, $amount): AbstractMethod } // Process the refund request - $response = $api->refundOrder($payment, $amount); + try { + $response = $api->refundOrder($payment, $amount); + } catch (CheckoutApiException $e) { + if (!$this->config->isAbcRefundAfterNasMigrationActive($storeCode)) { + throw new LocalizedException(__($e->getMessage())); + } + $api = $this->apiHandler->initAbcForRefund($storeCode, ScopeInterface::SCOPE_STORE); + $response = $api->refundOrder($payment, $amount); + } if (!$api->isValidResponse($response)) { throw new LocalizedException( diff --git a/Model/Methods/GooglePayMethod.php b/Model/Methods/GooglePayMethod.php index 594bf748..0a60e174 100755 --- a/Model/Methods/GooglePayMethod.php +++ b/Model/Methods/GooglePayMethod.php @@ -490,7 +490,14 @@ public function refund(InfoInterface $payment, $amount): AbstractMethod $storeCode = $payment->getOrder()->getStore()->getCode(); // Initialize the API handler - $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + try { + $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + } catch (CheckoutArgumentException $e) { + if (!$this->config->isAbcRefundAfterNasMigrationActive($storeCode)) { + throw new LocalizedException(__($e->getMessage())); + } + $api = $this->apiHandler->initAbcForRefund($storeCode, ScopeInterface::SCOPE_STORE); + } // Check the status if (!$this->canRefund()) { @@ -500,7 +507,16 @@ public function refund(InfoInterface $payment, $amount): AbstractMethod } // Process the refund request - $response = $api->refundOrder($payment, $amount); + try { + $response = $api->refundOrder($payment, $amount); + } catch (CheckoutApiException $e) { + if (!$this->config->isAbcRefundAfterNasMigrationActive($storeCode)) { + throw new LocalizedException(__($e->getMessage())); + } + $api = $this->apiHandler->initAbcForRefund($storeCode, ScopeInterface::SCOPE_STORE); + $response = $api->refundOrder($payment, $amount); + } + if (!$api->isValidResponse($response)) { throw new LocalizedException( __('The refund request could not be processed.') diff --git a/Model/Methods/KlarnaMethod.php b/Model/Methods/KlarnaMethod.php new file mode 100755 index 00000000..735f0914 --- /dev/null +++ b/Model/Methods/KlarnaMethod.php @@ -0,0 +1,501 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ + +declare(strict_types=1); + +namespace CheckoutCom\Magento2\Model\Methods; + +use Checkout\CheckoutApiException; +use Checkout\CheckoutArgumentException; +use Checkout\Payments\BillingDescriptor; +use Checkout\Payments\PaymentType; +use Checkout\Payments\Previous\PaymentRequest as PreviousPaymentRequest; +use Checkout\Payments\Previous\Source\RequestTokenSource as PreviousRequestTokenSource; +use Checkout\Payments\Request\PaymentRequest; +use Checkout\Payments\Request\Source\RequestTokenSource; +use CheckoutCom\Magento2\Gateway\Config\Config; +use CheckoutCom\Magento2\Helper\Logger as LoggerHelper; +use CheckoutCom\Magento2\Helper\Utilities; +use CheckoutCom\Magento2\Model\Service\ApiHandlerService; +use CheckoutCom\Magento2\Model\Service\PaymentContextRequestService; +use CheckoutCom\Magento2\Model\Service\QuoteHandlerService; +use Magento\Backend\Model\Auth\Session; +use Magento\Directory\Helper\Data as DirectoryHelper; +use Magento\Framework\Api\AttributeValueFactory; +use Magento\Framework\Api\ExtensionAttributesFactory; +use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Framework\Data\Collection\AbstractDb; +use Magento\Framework\DataObjectFactory; +use Magento\Framework\Exception\FileSystemException; +use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\Exception\NoSuchEntityException; +use Magento\Framework\Model\Context; +use Magento\Framework\Model\ResourceModel\AbstractResource; +use Magento\Framework\Registry; +use Magento\Framework\Serialize\Serializer\Json; +use Magento\Payment\Helper\Data; +use Magento\Payment\Model\InfoInterface; +use Magento\Payment\Model\Method\Logger; +use Magento\Quote\Api\Data\CartInterface; +use Magento\Store\Model\ScopeInterface; +use Magento\Store\Model\StoreManagerInterface; + +/** + * Class GooglePayMethod + */ +class KlarnaMethod extends AbstractMethod +{ + /** + * CODE constant + * + * @var string CODE + */ + const CODE = 'checkoutcom_klarna'; + /** + * $_code field + * + * @var string $_code + */ + protected $_code = self::CODE; + /** + * $_canAuthorize field + * + * @var bool $_canAuthorize + */ + protected $_canAuthorize = true; + /** + * $_canCapture field + * + * @var bool $_canCapture + */ + protected $_canCapture = true; + /** + * $_canCapturePartial field + * + * @var bool $_canCapturePartial + */ + protected $_canCapturePartial = true; + /** + * $_canVoid field + * + * @var bool $_canVoid + */ + protected $_canVoid = true; + /** + * $_canUseInternal field + * + * @var bool $_canUseInternal + */ + protected $_canUseInternal = false; + /** + * $_canUseCheckout field + * + * @var bool $_canUseCheckout + */ + protected $_canUseCheckout = true; + /** + * $_canRefund field + * + * @var bool $_canRefund + */ + protected $_canRefund = true; + /** + * $_canRefundInvoicePartial field + * + * @var bool $_canRefundInvoicePartial + */ + protected $_canRefundInvoicePartial = true; + /** + * @var Json + */ + private $json; + /** + * $config field + * + * @var Config $config + */ + private $config; + /** + * $apiHandler field + * + * @var ApiHandlerService $apiHandler + */ + private $apiHandler; + /** + * $utilities field + * + * @var Utilities $utilities + */ + private $utilities; + /** + * $quoteHandler field + * + * @var QuoteHandlerService $quoteHandler + */ + private $quoteHandler; + /** + * $ckoLogger field + * + * @var Logger $ckoLogger + */ + private $ckoLogger; + /** + * $storeManager field + * + * @var StoreManagerInterface $storeManager + */ + private $storeManager; + /** + * $backendAuthSession field + * + * @var Session $backendAuthSession + */ + private $backendAuthSession; + + private PaymentContextRequestService $contextService; + + /** + * GooglePayMethod constructor + * + * @param Context $context + * @param Registry $registry + * @param ExtensionAttributesFactory $extensionFactory + * @param AttributeValueFactory $customAttributeFactory + * @param Data $paymentData + * @param ScopeConfigInterface $scopeConfig + * @param Logger $logger + * @param Config $config + * @param ApiHandlerService $apiHandler + * @param Utilities $utilities + * @param StoreManagerInterface $storeManager + * @param QuoteHandlerService $quoteHandler + * @param LoggerHelper $ckoLogger + * @param Session $backendAuthSession + * @param DirectoryHelper $directoryHelper + * @param DataObjectFactory $dataObjectFactory + * @param Json $json + * @param AbstractResource|null $resource + * @param AbstractDb|null $resourceCollection + * @param array $data + */ + public function __construct( + Context $context, + Registry $registry, + ExtensionAttributesFactory $extensionFactory, + AttributeValueFactory $customAttributeFactory, + Data $paymentData, + ScopeConfigInterface $scopeConfig, + Logger $logger, + Config $config, + ApiHandlerService $apiHandler, + Utilities $utilities, + StoreManagerInterface $storeManager, + QuoteHandlerService $quoteHandler, + LoggerHelper $ckoLogger, + Session $backendAuthSession, + DirectoryHelper $directoryHelper, + DataObjectFactory $dataObjectFactory, + Json $json, + PaymentContextRequestService $contextService, + AbstractResource $resource = null, + AbstractDb $resourceCollection = null, + array $data = [] + ) { + parent::__construct( + $config, + $context, + $registry, + $extensionFactory, + $customAttributeFactory, + $paymentData, + $scopeConfig, + $logger, + $directoryHelper, + $dataObjectFactory, + $resource, + $resourceCollection, + $data + ); + + $this->config = $config; + $this->apiHandler = $apiHandler; + $this->utilities = $utilities; + $this->storeManager = $storeManager; + $this->quoteHandler = $quoteHandler; + $this->ckoLogger = $ckoLogger; + $this->backendAuthSession = $backendAuthSession; + $this->json = $json; + $this->contextService = $contextService; + } + + /** + * @throws CheckoutApiException + * @throws CheckoutArgumentException + * @throws FileSystemException + * @throws LocalizedException + * @throws NoSuchEntityException + */ + public function sendPaymentRequest(array $data, float $amount, string $currency, string $reference = ''): array + { + // Get the store code + $storeCode = $this->storeManager->getStore()->getCode(); + + // Initialize the API handler + $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + + // Get the quote + $quote = $this->quoteHandler->getQuote(); + + // Set the payment + if ($this->apiHandler->isPreviousMode()) { + $request = new PreviousPaymentRequest(); + } else { + $request = new PaymentRequest(); + } + + // Set parameters + $request->capture = $this->config->needsAutoCapture(); + $request->amount = $this->utilities->formatDecimals($amount * 100); + $request->payment_context_id = $data['contextPaymentId']; + $request->processing_channel_id = $this->config->getValue('channel_id'); + $request->reference = $reference; + $request->description = __('Payment request from %1', $this->config->getStoreName())->render(); + $request->customer = $api->createCustomer($quote); + $request->payment_type = PaymentType::$regular; + $request->shipping = $api->createShippingAddress($quote); + $request->metadata['methodId'] = $this->_code; + $request->metadata['quoteData'] = $this->json->serialize($this->quoteHandler->getQuoteRequestData($quote)); + $request->metadata = array_merge( + $request->metadata, + $this->apiHandler->getBaseMetadata() + ); + // Billing descriptor + if ($this->config->needsDynamicDescriptor()) { + $billingDescriptor = new BillingDescriptor(); + $billingDescriptor->city = $this->config->getValue('descriptor_city'); + $billingDescriptor->name = $this->config->getValue('descriptor_name', null, null, ScopeInterface::SCOPE_STORE); + $request->billing_descriptor = $billingDescriptor; + } + // Set the token source + if ($this->apiHandler->isPreviousMode()) { + $tokenSource = new PreviousRequestTokenSource(); + } else { + $tokenSource = new RequestTokenSource(); + } + + $request->currency = $currency; + + $this->ckoLogger->additional($this->utilities->objectToArray($request), 'payment'); + + // Send the charge request + return $api->getCheckoutApi()->getPaymentsClient()->requestPayment($request); + } + + /** + * @throws CheckoutApiException + * @throws CheckoutArgumentException + * @throws LocalizedException + * @throws NoSuchEntityException + */ + public function capture(InfoInterface $payment, $amount): AbstractMethod + { + if ($this->backendAuthSession->isLoggedIn()) { + // Get the store code + $storeCode = $payment->getOrder()->getStore()->getCode(); + + // Initialize the API handler + $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + + // Check the status + if (!$this->canCapture()) { + throw new LocalizedException( + __('The capture action is not available.') + ); + } + + // Process the capture request + $response = $api->captureOrder($payment, (float)$amount); + if (!$api->isValidResponse($response)) { + throw new LocalizedException( + __('The capture request could not be processed.') + ); + } + + // Set the transaction id from response + $payment->setTransactionId($response['action_id']); + } + + return $this; + } + + /** + * @throws CheckoutApiException + * @throws CheckoutArgumentException + * @throws LocalizedException + */ + public function void(InfoInterface $payment): AbstractMethod + { + if ($this->backendAuthSession->isLoggedIn()) { + // Get the store code + $storeCode = $payment->getOrder()->getStore()->getCode(); + + // Initialize the API handler + $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + + // Check the status + if (!$this->canVoid()) { + throw new LocalizedException( + __('The void action is not available.') + ); + } + + // Process the void request + $response = $api->voidOrder($payment); + if (!$api->isValidResponse($response)) { + throw new LocalizedException( + __('The void request could not be processed.') + ); + } + + // Set the transaction id from response + $payment->setTransactionId($response['action_id']); + } + + return $this; + } + + /** + * @throws CheckoutApiException + * @throws CheckoutArgumentException + * @throws LocalizedException + */ + public function cancel(InfoInterface $payment): AbstractMethod + { + if ($this->backendAuthSession->isLoggedIn()) { + $order = $payment->getOrder(); + // Get the store code + $storeCode = $order->getStore()->getCode(); + + // Initialize the API handler + $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + + // Check the status + if (!$this->canVoid()) { + throw new LocalizedException( + __('The void action is not available.') + ); + } + + // Process the void request + $response = $api->voidOrder($payment); + if (!$api->isValidResponse($response)) { + throw new LocalizedException( + __('The void request could not be processed.') + ); + } + + $comment = __( + 'Canceled order online, the voided amount is %1.', + $order->formatPriceTxt($order->getGrandTotal()) + ); + $payment->setMessage($comment); + // Set the transaction id from response + $payment->setTransactionId($response['action_id']); + } + + return $this; + } + + /** + * @throws CheckoutApiException + * @throws CheckoutArgumentException + * @throws LocalizedException + * @throws NoSuchEntityException + */ + public function refund(InfoInterface $payment, $amount): AbstractMethod + { + if ($this->backendAuthSession->isLoggedIn()) { + // Get the store code + $storeCode = $payment->getOrder()->getStore()->getCode(); + + // Initialize the API handler + try { + $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + } catch (CheckoutArgumentException $e) { + if (!$this->config->isAbcRefundAfterNasMigrationActive($storeCode)) { + throw new LocalizedException(__($e->getMessage())); + } + $api = $this->apiHandler->initAbcForRefund($storeCode, ScopeInterface::SCOPE_STORE); + } + + // Check the status + if (!$this->canRefund()) { + throw new LocalizedException( + __('The refund action is not available.') + ); + } + + // Process the refund request + try { + $response = $api->refundOrder($payment, $amount); + } catch (CheckoutApiException $e) { + if (!$this->config->isAbcRefundAfterNasMigrationActive($storeCode)) { + throw new LocalizedException(__($e->getMessage())); + } + $api = $this->apiHandler->initAbcForRefund($storeCode, ScopeInterface::SCOPE_STORE); + $response = $api->refundOrder($payment, $amount); + } + + if (!$api->isValidResponse($response)) { + throw new LocalizedException( + __('The refund request could not be processed.') + ); + } + + // Set the transaction id from response + $payment->setTransactionId($response['action_id']); + } + + return $this; + } + + /** + * Check whether method is available + * + * @param CartInterface|null $quote + * + * @throws LocalizedException + */ + public function isAvailable(CartInterface $quote = null): bool + { + if ($this->isModuleActive() && parent::isAvailable($quote) && null !== $quote) { + return $this->config->getValue('active', $this->_code) && !$this->backendAuthSession->isLoggedIn(); + } + + return false; + } + + public function canUseForCurrency($currencyCode): bool + { + $availableCurrencies = array_filter(explode(',', $this->getConfigData('specificcurrencies') ?? '')); + if (!empty($availableCurrencies) && !in_array($currencyCode, $availableCurrencies)) { + return false; + } + + return true; + } +} diff --git a/Model/Methods/MotoMethod.php b/Model/Methods/MotoMethod.php index 5d435ebc..e6d8cacb 100755 --- a/Model/Methods/MotoMethod.php +++ b/Model/Methods/MotoMethod.php @@ -331,7 +331,14 @@ public function refund(InfoInterface $payment, $amount): AbstractMethod $storeCode = $payment->getOrder()->getStore()->getCode(); // Initialize the API handler - $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + try { + $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + } catch (CheckoutArgumentException $e) { + if (!$this->config->isAbcRefundAfterNasMigrationActive($storeCode)) { + throw new LocalizedException(__($e->getMessage())); + } + $api = $this->apiHandler->initAbcForRefund($storeCode, ScopeInterface::SCOPE_STORE); + } // Check the status if (!$this->canRefund()) { @@ -341,7 +348,16 @@ public function refund(InfoInterface $payment, $amount): AbstractMethod } // Process the refund request - $response = $api->refundOrder($payment, $amount); + try { + $response = $api->refundOrder($payment, $amount); + } catch (CheckoutApiException $e) { + if (!$this->config->isAbcRefundAfterNasMigrationActive($storeCode)) { + throw new LocalizedException(__($e->getMessage())); + } + $api = $this->apiHandler->initAbcForRefund($storeCode, ScopeInterface::SCOPE_STORE); + $response = $api->refundOrder($payment, $amount); + } + if (!$api->isValidResponse($response)) { throw new LocalizedException( __('The refund request could not be processed.') diff --git a/Model/Methods/PaypalMethod.php b/Model/Methods/PaypalMethod.php new file mode 100755 index 00000000..d873e355 --- /dev/null +++ b/Model/Methods/PaypalMethod.php @@ -0,0 +1,505 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ + +declare(strict_types=1); + +namespace CheckoutCom\Magento2\Model\Methods; + +use Checkout\CheckoutApiException; +use Checkout\CheckoutArgumentException; +use Checkout\Payments\BillingDescriptor; +use Checkout\Payments\PaymentType; +use Checkout\Payments\Previous\PaymentRequest as PreviousPaymentRequest; +use Checkout\Payments\ProcessingSettings; +use Checkout\Payments\Request\PaymentRequest; +use CheckoutCom\Magento2\Gateway\Config\Config; +use CheckoutCom\Magento2\Helper\Logger as LoggerHelper; +use CheckoutCom\Magento2\Helper\Utilities; +use CheckoutCom\Magento2\Model\Service\ApiHandlerService; +use CheckoutCom\Magento2\Model\Service\PaymentContextRequestService; +use CheckoutCom\Magento2\Model\Service\QuoteHandlerService; +use Magento\Backend\Model\Auth\Session; +use Magento\Directory\Helper\Data as DirectoryHelper; +use Magento\Framework\Api\AttributeValueFactory; +use Magento\Framework\Api\ExtensionAttributesFactory; +use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Framework\Data\Collection\AbstractDb; +use Magento\Framework\DataObjectFactory; +use Magento\Framework\Exception\FileSystemException; +use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\Exception\NoSuchEntityException; +use Magento\Framework\Model\Context; +use Magento\Framework\Model\ResourceModel\AbstractResource; +use Magento\Framework\Registry; +use Magento\Framework\Serialize\Serializer\Json; +use Magento\Payment\Helper\Data; +use Magento\Payment\Model\InfoInterface; +use Magento\Payment\Model\Method\Logger; +use Magento\Quote\Api\Data\CartInterface; +use Magento\Store\Model\ScopeInterface; +use Magento\Store\Model\StoreManagerInterface; + +/** + * Class GooglePayMethod + */ +class PaypalMethod extends AbstractMethod +{ + /** + * CODE constant + * + * @var string CODE + */ + const CODE = 'checkoutcom_paypal'; + /** + * $_code field + * + * @var string $_code + */ + protected $_code = self::CODE; + /** + * $_canAuthorize field + * + * @var bool $_canAuthorize + */ + protected $_canAuthorize = true; + /** + * $_canCapture field + * + * @var bool $_canCapture + */ + protected $_canCapture = true; + /** + * $_canCapturePartial field + * + * @var bool $_canCapturePartial + */ + protected $_canCapturePartial = true; + /** + * $_canVoid field + * + * @var bool $_canVoid + */ + protected $_canVoid = true; + /** + * $_canUseInternal field + * + * @var bool $_canUseInternal + */ + protected $_canUseInternal = false; + /** + * $_canUseCheckout field + * + * @var bool $_canUseCheckout + */ + protected $_canUseCheckout = true; + /** + * $_canRefund field + * + * @var bool $_canRefund + */ + protected $_canRefund = true; + /** + * $_canRefundInvoicePartial field + * + * @var bool $_canRefundInvoicePartial + */ + protected $_canRefundInvoicePartial = true; + /** + * @var Json + */ + private $json; + /** + * $config field + * + * @var Config $config + */ + private $config; + /** + * $apiHandler field + * + * @var ApiHandlerService $apiHandler + */ + private $apiHandler; + /** + * $utilities field + * + * @var Utilities $utilities + */ + private $utilities; + /** + * $quoteHandler field + * + * @var QuoteHandlerService $quoteHandler + */ + private $quoteHandler; + /** + * $ckoLogger field + * + * @var Logger $ckoLogger + */ + private $ckoLogger; + /** + * $storeManager field + * + * @var StoreManagerInterface $storeManager + */ + private $storeManager; + /** + * $backendAuthSession field + * + * @var Session $backendAuthSession + */ + private $backendAuthSession; + + private PaymentContextRequestService $contextService; + + /** + * GooglePayMethod constructor + * + * @param Context $context + * @param Registry $registry + * @param ExtensionAttributesFactory $extensionFactory + * @param AttributeValueFactory $customAttributeFactory + * @param Data $paymentData + * @param ScopeConfigInterface $scopeConfig + * @param Logger $logger + * @param Config $config + * @param ApiHandlerService $apiHandler + * @param Utilities $utilities + * @param StoreManagerInterface $storeManager + * @param QuoteHandlerService $quoteHandler + * @param LoggerHelper $ckoLogger + * @param Session $backendAuthSession + * @param DirectoryHelper $directoryHelper + * @param DataObjectFactory $dataObjectFactory + * @param Json $json + * @param AbstractResource|null $resource + * @param AbstractDb|null $resourceCollection + * @param array $data + */ + public function __construct( + Context $context, + Registry $registry, + ExtensionAttributesFactory $extensionFactory, + AttributeValueFactory $customAttributeFactory, + Data $paymentData, + ScopeConfigInterface $scopeConfig, + Logger $logger, + Config $config, + ApiHandlerService $apiHandler, + Utilities $utilities, + StoreManagerInterface $storeManager, + QuoteHandlerService $quoteHandler, + LoggerHelper $ckoLogger, + Session $backendAuthSession, + DirectoryHelper $directoryHelper, + DataObjectFactory $dataObjectFactory, + Json $json, + PaymentContextRequestService $contextService, + AbstractResource $resource = null, + AbstractDb $resourceCollection = null, + array $data = [] + ) { + parent::__construct( + $config, + $context, + $registry, + $extensionFactory, + $customAttributeFactory, + $paymentData, + $scopeConfig, + $logger, + $directoryHelper, + $dataObjectFactory, + $resource, + $resourceCollection, + $data + ); + + $this->config = $config; + $this->apiHandler = $apiHandler; + $this->utilities = $utilities; + $this->storeManager = $storeManager; + $this->quoteHandler = $quoteHandler; + $this->ckoLogger = $ckoLogger; + $this->backendAuthSession = $backendAuthSession; + $this->json = $json; + $this->contextService = $contextService; + } + + /** + * @throws CheckoutApiException + * @throws CheckoutArgumentException + * @throws FileSystemException + * @throws LocalizedException + * @throws NoSuchEntityException + */ + public function sendPaymentRequest(array $data, float $amount, string $currency, string $reference = ''): array + { + // Get the store code + $storeCode = $this->storeManager->getStore()->getCode(); + + // Initialize the API handler + $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + + // Get the quote + $quote = $this->quoteHandler->getQuote(); + + // Set the payment + if ($this->apiHandler->isPreviousMode()) { + $request = new PreviousPaymentRequest(); + } else { + $request = new PaymentRequest(); + } + + // Set parameters + $request->capture = $this->config->needsAutoCapture(); + $request->amount = $this->utilities->formatDecimals($amount * 100); + $request->payment_context_id = $data['contextPaymentId']; + $request->processing_channel_id = $this->config->getValue('channel_id'); + $request->reference = $reference; + $request->metadata['methodId'] = $this->_code; + $request->description = __('Payment request from %1', $this->config->getStoreName())->render(); + $request->customer = $api->createCustomer($quote); + $request->payment_type = PaymentType::$regular; + $request->shipping = $api->createShippingAddress($quote); + $request->metadata['quoteData'] = $this->json->serialize($this->quoteHandler->getQuoteRequestData($quote)); + $request->metadata = array_merge( + $request->metadata, + $this->apiHandler->getBaseMetadata() + ); + // Billing descriptor + if ($this->config->needsDynamicDescriptor()) { + $billingDescriptor = new BillingDescriptor(); + $billingDescriptor->city = $this->config->getValue('descriptor_city'); + $billingDescriptor->name = $this->config->getValue('descriptor_name', null, null, ScopeInterface::SCOPE_STORE); + $request->billing_descriptor = $billingDescriptor; + } + + // Shipping fee + $shipping = $quote->getShippingAddress(); + if ($shipping->getShippingDescription() && $shipping->getShippingInclTax() > 0) { + $processing = new ProcessingSettings(); + $processing->shipping_amount = $this->utilities->formatDecimals($shipping->getShippingInclTax() * 100); + $request->processing = $processing; + } + + $request->currency = $currency; + + $this->ckoLogger->additional($this->utilities->objectToArray($request), 'payment'); + + // Send the charge request + return $api->getCheckoutApi()->getPaymentsClient()->requestPayment($request); + } + + /** + * @throws CheckoutApiException + * @throws CheckoutArgumentException + * @throws LocalizedException + * @throws NoSuchEntityException + */ + public function capture(InfoInterface $payment, $amount): AbstractMethod + { + if ($this->backendAuthSession->isLoggedIn()) { + // Get the store code + $storeCode = $payment->getOrder()->getStore()->getCode(); + + // Initialize the API handler + $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + + // Check the status + if (!$this->canCapture()) { + throw new LocalizedException( + __('The capture action is not available.') + ); + } + + // Process the capture request + $response = $api->captureOrder($payment, (float)$amount); + if (!$api->isValidResponse($response)) { + throw new LocalizedException( + __('The capture request could not be processed.') + ); + } + + // Set the transaction id from response + $payment->setTransactionId($response['action_id']); + } + + return $this; + } + + /** + * @throws CheckoutApiException + * @throws CheckoutArgumentException + * @throws LocalizedException + */ + public function void(InfoInterface $payment): AbstractMethod + { + if ($this->backendAuthSession->isLoggedIn()) { + // Get the store code + $storeCode = $payment->getOrder()->getStore()->getCode(); + + // Initialize the API handler + $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + + // Check the status + if (!$this->canVoid()) { + throw new LocalizedException( + __('The void action is not available.') + ); + } + + // Process the void request + $response = $api->voidOrder($payment); + if (!$api->isValidResponse($response)) { + throw new LocalizedException( + __('The void request could not be processed.') + ); + } + + // Set the transaction id from response + $payment->setTransactionId($response['action_id']); + } + + return $this; + } + + /** + * @throws CheckoutApiException + * @throws CheckoutArgumentException + * @throws LocalizedException + */ + public function cancel(InfoInterface $payment): AbstractMethod + { + if ($this->backendAuthSession->isLoggedIn()) { + $order = $payment->getOrder(); + // Get the store code + $storeCode = $order->getStore()->getCode(); + + // Initialize the API handler + $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + + // Check the status + if (!$this->canVoid()) { + throw new LocalizedException( + __('The void action is not available.') + ); + } + + // Process the void request + $response = $api->voidOrder($payment); + if (!$api->isValidResponse($response)) { + throw new LocalizedException( + __('The void request could not be processed.') + ); + } + + $comment = __( + 'Canceled order online, the voided amount is %1.', + $order->formatPriceTxt($order->getGrandTotal()) + ); + $payment->setMessage($comment); + // Set the transaction id from response + $payment->setTransactionId($response['action_id']); + } + + return $this; + } + + /** + * @throws CheckoutApiException + * @throws CheckoutArgumentException + * @throws LocalizedException + * @throws NoSuchEntityException + */ + public function refund(InfoInterface $payment, $amount): AbstractMethod + { + if ($this->backendAuthSession->isLoggedIn()) { + // Get the store code + $storeCode = $payment->getOrder()->getStore()->getCode(); + + // Initialize the API handler + try { + $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + } catch (CheckoutArgumentException $e) { + if (!$this->config->isAbcRefundAfterNasMigrationActive($storeCode)) { + throw new LocalizedException(__($e->getMessage())); + } + $api = $this->apiHandler->initAbcForRefund($storeCode, ScopeInterface::SCOPE_STORE); + } + + // Check the status + if (!$this->canRefund()) { + throw new LocalizedException( + __('The refund action is not available.') + ); + } + + // Process the refund request + try { + $response = $api->refundOrder($payment, $amount); + } catch (CheckoutApiException $e) { + if (!$this->config->isAbcRefundAfterNasMigrationActive($storeCode)) { + throw new LocalizedException(__($e->getMessage())); + } + $api = $this->apiHandler->initAbcForRefund($storeCode, ScopeInterface::SCOPE_STORE); + $response = $api->refundOrder($payment, $amount); + } + + if (!$api->isValidResponse($response)) { + throw new LocalizedException( + __('The refund request could not be processed.') + ); + } + + // Set the transaction id from response + $payment->setTransactionId($response['action_id']); + } + + return $this; + } + + /** + * Check whether method is available + * + * @param CartInterface|null $quote + * + * @throws LocalizedException + */ + public function isAvailable(CartInterface $quote = null): bool + { + if ($this->isModuleActive() && parent::isAvailable($quote) && null !== $quote) { + return $this->config->getValue('active', $this->_code) && !$this->backendAuthSession->isLoggedIn(); + } + + return false; + } + + /** + * @inheritDoc + */ + public function canUseForCurrency($currencyCode): bool + { + $availableCurrencies = array_filter(explode(',', $this->getConfigData('specificcurrencies') ?? '')); + if (!empty($availableCurrencies) && !in_array($currencyCode, $availableCurrencies)) { + return false; + } + + return true; + } +} diff --git a/Model/Methods/VaultMethod.php b/Model/Methods/VaultMethod.php index 90af924e..b39bae5c 100755 --- a/Model/Methods/VaultMethod.php +++ b/Model/Methods/VaultMethod.php @@ -551,7 +551,14 @@ public function refund(InfoInterface $payment, $amount): AbstractMethod $storeCode = $payment->getOrder()->getStore()->getCode(); // Initialize the API handler - $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + try { + $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + } catch (CheckoutArgumentException $e) { + if (!$this->config->isAbcRefundAfterNasMigrationActive($storeCode)) { + throw new LocalizedException(__($e->getMessage())); + } + $api = $this->apiHandler->initAbcForRefund($storeCode, ScopeInterface::SCOPE_STORE); + } // Check the status if (!$this->canRefund()) { @@ -561,7 +568,16 @@ public function refund(InfoInterface $payment, $amount): AbstractMethod } // Process the refund request - $response = $api->refundOrder($payment, $amount); + try { + $response = $api->refundOrder($payment, $amount); + } catch (CheckoutApiException $e) { + if (!$this->config->isAbcRefundAfterNasMigrationActive($storeCode)) { + throw new LocalizedException(__($e->getMessage())); + } + $api = $this->apiHandler->initAbcForRefund($storeCode, ScopeInterface::SCOPE_STORE); + $response = $api->refundOrder($payment, $amount); + } + if (!$api->isValidResponse($response)) { throw new LocalizedException( __('The refund request could not be processed.') diff --git a/Model/Service/ApiHandlerService.php b/Model/Service/ApiHandlerService.php index debe9a4c..03b62a6c 100644 --- a/Model/Service/ApiHandlerService.php +++ b/Model/Service/ApiHandlerService.php @@ -37,6 +37,7 @@ use CheckoutCom\Magento2\Gateway\Config\Config; use CheckoutCom\Magento2\Helper\Logger; use CheckoutCom\Magento2\Helper\Utilities; +use CheckoutCom\Magento2\Model\Config\Backend\Source\ConfigRegion; use CheckoutCom\Magento2\Model\Config\Backend\Source\ConfigService; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\App\ProductMetadataInterface; @@ -172,6 +173,8 @@ public function init( string $secretKey = null, string $publicKey = null ): ApiHandlerService { + $region = $this->config->getValue('region', null, $storeCode, $scope); + if (!$secretKey) { $secretKey = $this->config->getValue('secret_key', null, $storeCode, $scope); } @@ -181,7 +184,7 @@ public function init( } $service = $this->scopeConfig->getValue(ConfigService::SERVICE_CONFIG_PATH, $scope, $storeCode); - $environment = $this->config->getEnvironment((int)$storeCode, $scope); + $environment = $this->config->getEnvironment((string)$storeCode, $scope); $api = CheckoutSdk::builder(); if ($service === ConfigService::SERVICE_ABC) { @@ -190,7 +193,34 @@ public function init( $api = $api->staticKeys(); } + $sdkBuilder = $api + ->publicKey($publicKey) + ->secretKey($secretKey) + ->environment($environment); + + // Do not set subdomain when global region is used + if ($region !== ConfigRegion::REGION_GLOBAL) { + $sdkBuilder->environmentSubdomain($region); + } + + $this->checkoutApi = $sdkBuilder->build(); + + return $this; + } + + public function initAbcForRefund( + $storeCode = null, + string $scope = ScopeInterface::SCOPE_WEBSITE + ): ApiHandlerService + { + $secretKey = $this->config->getValue('abc_refund_secret_key', null, $storeCode, $scope); + $publicKey = $this->config->getValue('abc_refund_public_key', null, $storeCode, $scope); + + $api = CheckoutSdk::builder(); + $environment = $this->config->getEnvironment((string)$storeCode, $scope); + $this->checkoutApi = $api + ->previous()->staticKeys() ->publicKey($publicKey) ->secretKey($secretKey) ->environment($environment) @@ -458,10 +488,7 @@ public function createItems(CartInterface $entity): array $product->name = $shipping->getShippingDescription(); $product->quantity = 1; $product->unit_price = $shipping->getShippingInclTax() * 100; - $product->tax_rate = $shipping->getTaxPercent() * 100; $product->total_amount = $shipping->getShippingAmount() * 100; - $product->total_tax_amount = $shipping->getTaxAmount() * 100; - $product->type = 'shipping_fee'; $items[] = $product; } diff --git a/Model/Service/OrderHandlerService.php b/Model/Service/OrderHandlerService.php index 75607649..c43479f0 100644 --- a/Model/Service/OrderHandlerService.php +++ b/Model/Service/OrderHandlerService.php @@ -29,10 +29,12 @@ use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\Model\AbstractExtensibleModel; +use Magento\Framework\Registry; use Magento\Quote\Api\Data\CartInterface; use Magento\Quote\Model\Quote; use Magento\Quote\Model\QuoteManagement; use Magento\Sales\Api\Data\OrderInterface; +use Magento\Sales\Api\OrderManagementInterface; use Magento\Sales\Api\OrderRepositoryInterface; use Magento\Sales\Model\Order; use Magento\Sales\Model\Order\Status\History as OrderStatusHistory; @@ -108,6 +110,20 @@ class OrderHandlerService */ private $transactionHandler; + /** + * $orderManagement field + * + * @var OrderManagementInterface $orderManagement + */ + private $orderManagement; + + /** + * $registry field + * + * @var Registry $registry + */ + private $registry; + /** * OrderHandlerService constructor * @@ -121,6 +137,7 @@ class OrderHandlerService * @param Logger $logger * @param TransactionHandlerService $transactionHandler * @param SortOrderBuilderFactory $sortOrderBuilderFactory + * @param OrderManagementInterface $orderManagement */ public function __construct( Session $checkoutSession, @@ -132,7 +149,9 @@ public function __construct( StoreManagerInterface $storeManager, Logger $logger, TransactionHandlerService $transactionHandler, - SortOrderBuilderFactory $sortOrderBuilderFactory + SortOrderBuilderFactory $sortOrderBuilderFactory, + OrderManagementInterface $orderManagement, + Registry $registry ) { $this->checkoutSession = $checkoutSession; $this->quoteManagement = $quoteManagement; @@ -144,6 +163,8 @@ public function __construct( $this->logger = $logger; $this->transactionHandler = $transactionHandler; $this->sortOrderBuilderFactory = $sortOrderBuilderFactory; + $this->orderManagement = $orderManagement; + $this->registry = $registry; } /** @@ -386,4 +407,18 @@ public function getOrderDetails(OrderInterface $order): array 'transactions' => $this->transactionHandler->getTransactionDetails($order), ]; } + + /** + * Delete order if order processing is Payment first. + * Temporary function before removing completely the feature. + */ + public function deleteOrder(OrderInterface $order): void + { + if ($this->config->isPaymentWithPaymentFirst()) { + $this->orderManagement->cancel($order->getEntityId()); + $this->registry->register('isSecureArea', true); + $this->orderRepository->delete($order); + $this->registry->unregister('isSecureArea'); + } + } } diff --git a/Model/Service/OrderStatusHandlerService.php b/Model/Service/OrderStatusHandlerService.php index 3e5b9490..d926d02e 100644 --- a/Model/Service/OrderStatusHandlerService.php +++ b/Model/Service/OrderStatusHandlerService.php @@ -26,7 +26,6 @@ use Magento\Sales\Api\OrderManagementInterface; use Magento\Sales\Api\OrderRepositoryInterface; use Magento\Sales\Model\Order; -use Magento\Store\Model\ScopeInterface; use Magento\Store\Model\StoreManagerInterface; /** @@ -159,9 +158,12 @@ public function setOrderStatus(OrderInterface $order, array $webhook): void case 'payment_expired': $this->paymentExpired(); break; + case 'payment_declined': + $this->declined(); + break; case 'payment_authentication_failed': $this->paymentAuthenticationFailed(); - break; + break; } if ($this->state) { @@ -297,6 +299,9 @@ protected function refund(array $webhook): void protected function capturePending(array $webhook): void { $payload = json_decode($webhook['event_data']); + if (!isset($payload->data->metadata)) { + return; + } $methodId = $payload->data->metadata->methodId ?? $payload->data->metadata->method_id; if ($methodId === 'checkoutcom_apm') { $this->state = Order::STATE_PENDING_PAYMENT; @@ -317,7 +322,6 @@ protected function paymentExpired(): void $this->handleFailedPayment($this->order); } - /** * Set the order status for a payment authentication failed webhook. * @@ -331,4 +335,18 @@ protected function paymentAuthenticationFailed(): void $this->order->addStatusHistoryComment(__('3DS authentication failed/expired.')); $this->handleFailedPayment($this->order); } + + /** + * Set the order status for a payment authorization failed webhook. + * + * @return void + * @throws NoSuchEntityException + */ + protected function declined(): void + { + $this->state = Order::STATE_CANCELED; + $this->status = $this->order->getConfig()->getStateDefaultStatus($this->state); + $this->order->addStatusHistoryComment(__('Failed payment authorization')); + $this->handleFailedPayment($this->order); + } } diff --git a/Model/Service/PaymentContextRequestService.php b/Model/Service/PaymentContextRequestService.php new file mode 100644 index 00000000..1b1665a1 --- /dev/null +++ b/Model/Service/PaymentContextRequestService.php @@ -0,0 +1,333 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ + +declare(strict_types=1); + +namespace CheckoutCom\Magento2\Model\Service; + +use Checkout\Payments\AuthorizationType; +use Checkout\Payments\Contexts\PaymentContextsItems; +use Checkout\Payments\Contexts\PaymentContextsRequest; +use Checkout\Payments\PaymentType; +use Checkout\Payments\ProcessingSettings; +use Checkout\Payments\Request\Source\AbstractRequestSource; +use CheckoutCom\Magento2\Gateway\Config\Config; +use CheckoutCom\Magento2\Helper\Logger as MagentoLoggerHelper; +use CheckoutCom\Magento2\Helper\Utilities; +use Exception; +use Magento\Checkout\Model\Session; +use Magento\Directory\Model\ResourceModel\Region\CollectionFactory as RegionCollectionFactory; +use Magento\Framework\UrlInterface; +use Magento\Quote\Api\CartRepositoryInterface; +use Magento\Quote\Api\Data\AddressInterface; +use Magento\Quote\Api\Data\AddressInterfaceFactory; +use Magento\Quote\Api\Data\CartInterface; +use Magento\Quote\Api\Data\PaymentInterface; +use Magento\Quote\Model\Quote; +use Magento\Store\Model\ScopeInterface; +use Magento\Store\Model\StoreManagerInterface; + +class PaymentContextRequestService +{ + protected StoreManagerInterface $storeManager; + protected ApiHandlerService $apiHandlerService; + protected Session $checkoutSession; + protected Config $checkoutConfigProvider; + protected UrlInterface $urlBuilder; + protected MagentoLoggerHelper $ckoLogger; + protected Utilities $utilities; + protected AddressInterfaceFactory $addressInterfaceFactory; + protected CartRepositoryInterface $cartRepository; + protected RegionCollectionFactory $regionCollectionFactory; + protected ShopperHandlerService $shopperHandlerService; + /** + * Should we set the shipping fils as an item line (if no it's used on "processing" request part) + */ + protected bool $setShippingFeesAsItem = false; + /** + * Should we substract the dicount amount from the unit price of each item ? + */ + protected bool $collectDiscountAmountOnItemUnitPrice = true; + /** + * Should we force authorise mode instead of capture for this context + */ + protected bool $forceAuthorize = false; + /** + * The payment type for this context (default Regular) + * + * @see PaymentType + */ + protected ?string $paymentType = null; + /** + * The Authorize type type for this context (Default Final) + * + * @see AuthorizationType + */ + protected ?string $authorizeType = null; + + public function __construct( + StoreManagerInterface $storeManager, + ApiHandlerService $apiHandler, + Session $checkoutSession, + Config $checkoutConfigProvider, + UrlInterface $urlBuilder, + ApiHandlerService $apiHandlerService, + MagentoLoggerHelper $ckoLogger, + Utilities $utilities, + AddressInterfaceFactory $addressInterfaceFactory, + RegionCollectionFactory $regionCollectionFactory, + CartRepositoryInterface $cartRepository, + ShopperHandlerService $shopperHandlerService + ) { + $this->storeManager = $storeManager; + $this->apiHandlerService = $apiHandler; + $this->checkoutConfigProvider = $checkoutConfigProvider; + $this->checkoutSession = $checkoutSession; + $this->urlBuilder = $urlBuilder; + $this->ckoLogger = $ckoLogger; + $this->utilities = $utilities; + $this->addressInterfaceFactory = $addressInterfaceFactory; + $this->cartRepository = $cartRepository; + $this->regionCollectionFactory = $regionCollectionFactory; + $this->shopperHandlerService = $shopperHandlerService; + } + + public function makePaymentContextRequests( + AbstractRequestSource $source + ): array { + $quote = $this->getQuote(); + if (!$quote->getId() || ($quote->getId() && !$quote->getItemsQty())) { + return []; + } + + $request = $this->getContextRequest($quote, $source); + + $this->ckoLogger->additional($this->utilities->objectToArray($request), 'payment'); + + $storeCode = $this->storeManager->getStore($quote->getStoreId())->getCode(); + $api = $this->apiHandlerService->init($storeCode, ScopeInterface::SCOPE_STORE); + + return $api->getCheckoutApi() + ->getPaymentContextsClient() + ->createPaymentContexts($request); + } + + public function getPaymentContextById(string $paymentContextId, int $storeId, ?bool $refreshQuote = false, ?PaymentInterface $paymentMethod = null): array + { + $storeCode = $this->storeManager->getStore($storeId)->getCode(); + $api = $this->apiHandlerService->init($storeCode, ScopeInterface::SCOPE_STORE); + try { + $contextDatas = $api->getCheckoutApi()->getPaymentContextsClient()->getPaymentContextDetails($paymentContextId); + if ($refreshQuote) { + $this->refreshQuoteWithPaymentContext($contextDatas, $paymentMethod); + } + + return $contextDatas; + } catch (Exception $e) { + return []; + } + } + + public function refreshQuoteWithPaymentContext(array $contextDatas, ?PaymentInterface $paymentMethod = null): void + { + if (empty($contextDatas)) { + return; + } + + $quote = $this->getQuote(); + $paymentRequestsDatas = $contextDatas['payment_request']; + $name = $paymentRequestsDatas['customer']['name'] ? explode(' ', $paymentRequestsDatas['customer']['name'], 2) : []; + $quote->setCustomerFirstname($name[0] ?? $quote->getCustomerFirstname()); + $quote->setCustomerLastname($name[1] ?? $quote->getCustomerLastname()); + $quote->setCustomerEmail($paymentRequestsDatas['customer']['email'] ?? $quote->getCustomerEmail()); + + /** @var AddressInterface $quoteAddress */ + $quoteAddress = $this->addressInterfaceFactory->create(); + $shippingAddressRequesDatas = $paymentRequestsDatas['shipping']['address']; + $shippingName = $paymentRequestsDatas['shipping']['first_name'] ? explode(' ', $paymentRequestsDatas['shipping']['first_name'], 2) : []; + $quoteAddress->setFirstname($shippingName[0] ?? $quoteAddress->getFirstname()); + $quoteAddress->setLastname($shippingName[1] ?? $quoteAddress->getLastname()); + $quoteAddress->setCity($shippingAddressRequesDatas['city'] ?? $quoteAddress->getCity()); + $quoteAddress->setCountryId($shippingAddressRequesDatas['country'] ?? $quoteAddress->getCountry()); + $quoteAddress->setPostcode($shippingAddressRequesDatas['zip'] ?? $quoteAddress->getPostcode()); + + $streets = []; + $i = 1; + while ($i < 4) { + if (!empty($shippingAddressRequesDatas['address_line' . $i])) { + $streets[] = $shippingAddressRequesDatas['address_line' . $i]; + } + $i++; + } + $quoteAddress->setStreet($streets); + + // Manage region + $stateName = $shippingAddressRequesDatas['state'] ?? null; + if ($stateName) { + $regionCollection = $this->regionCollectionFactory->create(); + $region = $regionCollection->addFieldToFilter('default_name', ['eq' => $stateName])->getFirstItem(); + if ($region->getId()) { + $quoteAddress->setRegionCode($region->getCode()); + $quoteAddress->setRegionId($region->getRegionId()); + } + } + + // Set Payment method if given + if ($paymentMethod) { + $quote->setPayment($paymentMethod); + } + + //Assign addresse and save quote + $quote->setBillingAddress($quoteAddress)->setShippingAddress($quoteAddress); + $this->cartRepository->save($quote); + } + + private function getContextRequest( + CartInterface $quote, + AbstractRequestSource $source + ): PaymentContextsRequest { + $capture = $this->forceAuthorize ? false : $this->checkoutConfigProvider->needsAutoCapture(); + + // Global informations + $request = new PaymentContextsRequest(); + $request->amount = $this->utilities->formatDecimals($quote->getGrandTotal() * 100); + $request->payment_type = $this->getPaymentType(); + $request->currency = $quote->getCurrency()->getQuoteCurrencyCode(); + $request->capture = $capture; + $request->processing_channel_id = $this->checkoutConfigProvider->getValue('channel_id'); + $request->authorizationType = $this->getAuthorizeType(); + + $processing = new ProcessingSettings(); + $processing->locale = str_replace('_', '-', $this->shopperHandlerService->getCustomerLocale()); + + $shipping = $quote->getShippingAddress(); + if ($shipping->getShippingDescription() && $shipping->getShippingInclTax() > 0) { + if (!$this->setShippingFeesAsItem) { + $processing->shipping_amount = $this->utilities->formatDecimals($shipping->getShippingInclTax() * 100); + } + } + $request->processing = $processing; + + // Source + $request->source = $source; + + // Items + $request->items = $this->getRequestItems($quote); + + // Urls + $request->success_url = $this->urlBuilder->getUrl('checkout/onepage/success'); + $request->failure_url = $this->urlBuilder->getUrl('checkout/onepage/failure'); + + return $request; + } + + public function getRequestItems(CartInterface $quote): array + { + $items = []; + /** @var Quote\Item $item */ + foreach ($quote->getAllVisibleItems() as $item) { + $discount = $discountOnUnitPrice = $this->utilities->formatDecimals($item->getDiscountAmount()) * 100; + if (!$this->collectDiscountAmountOnItemUnitPrice) { + $discountOnUnitPrice = 0; + } + $rowAmount = ($this->utilities->formatDecimals($item->getRowTotalInclTax()) * 100) - + ($this->utilities->formatDecimals($discount)); + $unitPrice = ($this->utilities->formatDecimals($item->getRowTotalInclTax() / $item->getQty()) * 100) - + ($this->utilities->formatDecimals($discountOnUnitPrice / $item->getQty())); + // Api does not accept 0 prices + if (!$unitPrice) { + continue; + } + + $contextItem = new PaymentContextsItems(); + $contextItem->reference = $item->getSku(); + $contextItem->quantity = $item->getQty(); + $contextItem->name = $item->getName(); + $contextItem->discount_amount = $discount; + $contextItem->unit_price = $unitPrice; + $contextItem->total_amount = $rowAmount; + + $items[] = $contextItem; + } + + // Shipping fee + $shipping = $quote->getShippingAddress(); + + if ($this->setShippingFeesAsItem && $shipping->getShippingDescription() && $shipping->getShippingInclTax() > 0) { + $product = new PaymentContextsItems(); + $product->name = $shipping->getShippingDescription(); + $product->quantity = 1; + $product->unit_price = $shipping->getShippingInclTax() * 100; + $product->total_amount = $shipping->getShippingInclTax() * 100; + + $items[] = $product; + } + + return $items; + } + + private function getQuote(): CartInterface + { + return $this->checkoutSession->getQuote(); + } + + public function setShippingFeesAsItem(bool $value): self + { + $this->setShippingFeesAsItem = $value; + + return $this; + } + + public function setForceAuthorizeMode(bool $value): self + { + $this->forceAuthorize = $value; + + return $this; + } + + public function collectDiscountAmountOnItemUnitPrice(bool $value): self + { + $this->collectDiscountAmountOnItemUnitPrice = $value; + + return $this; + } + + public function setPaymentType(string $paymentType): self + { + $this->paymentType = $paymentType; + + return $this; + } + + private function getPaymentType(): string + { + if (!$this->paymentType) { + return PaymentType::$regular; + } + + return $this->paymentType; + } + + private function getAuthorizeType(): string + { + if (!$this->authorizeType) { + return AuthorizationType::$final; + } + + return $this->authorizeType; + } +} diff --git a/Model/Service/PaymentErrorHandlerService.php b/Model/Service/PaymentErrorHandlerService.php index 993d0293..a3a5e673 100755 --- a/Model/Service/PaymentErrorHandlerService.php +++ b/Model/Service/PaymentErrorHandlerService.php @@ -44,6 +44,13 @@ class PaymentErrorHandlerService 'payment_refund_declined' => 'Failed payment refund', 'payment_pending' => 'Failed payment request', ]; + + /** + * TRANSACTION_SUCCESS_DIGITS const + * + * @var string TRANSACTION_SUCCESS_DIGITS + */ + const TRANSACTION_SUCCESS_DIGITS = '10'; /** * $transactionHandler field * diff --git a/Model/Service/TransactionHandlerService.php b/Model/Service/TransactionHandlerService.php index 6a254b61..5dd286d7 100755 --- a/Model/Service/TransactionHandlerService.php +++ b/Model/Service/TransactionHandlerService.php @@ -737,7 +737,11 @@ public function processEmail($payload): void && $this->transaction->getTxnType() === TransactionInterface::TYPE_CAPTURE && $emailSent == 0; - $methodId = $payload->data->metadata->methodId ?? $payload->data->metadata->method_id; + $methodId = ''; + if (isset($payload->data->metadata)) { + $methodId = $payload->data->metadata->methodId ?? $payload->data->metadata->method_id; + } + $condition3 = $this->config->getValue('order_email') === 'authorize' && $this->transaction->getTxnType() === TransactionInterface::TYPE_CAPTURE && $methodId === 'checkoutcom_apm' diff --git a/Model/Service/WebhookHandlerService.php b/Model/Service/WebhookHandlerService.php index 661382b2..f7b083b1 100644 --- a/Model/Service/WebhookHandlerService.php +++ b/Model/Service/WebhookHandlerService.php @@ -140,9 +140,10 @@ public function processSingleWebhook(OrderInterface $order, array $payload): voi } } else { // Handle missing action ID - $msg = __( - 'Missing action ID for webhook with payment ID %', - $payload['data']['id'] + $msg = sprintf( + 'Missing action ID for webhook with payment ID %s. Payload was: %s', + $payload['data']['id'], + $this->json->serialize($payload) ); $this->logger->write($msg); } diff --git a/Model/Ui/ConfigProvider.php b/Model/Ui/ConfigProvider.php index a1914f8b..ce3ff58b 100644 --- a/Model/Ui/ConfigProvider.php +++ b/Model/Ui/ConfigProvider.php @@ -20,6 +20,7 @@ use CheckoutCom\Magento2\Gateway\Config\Config; use CheckoutCom\Magento2\Gateway\Config\Loader; +use CheckoutCom\Magento2\Model\Methods\PaypalMethod; use CheckoutCom\Magento2\Model\Service\CardHandlerService; use CheckoutCom\Magento2\Model\Service\MethodHandlerService; use CheckoutCom\Magento2\Model\Service\QuoteHandlerService; @@ -70,16 +71,22 @@ class ConfigProvider implements ConfigProviderInterface * @var VaultHandlerService $vaultHandler */ private $vaultHandler; + /** + * $paypalMethod + * + * @var PaypalMethod $paypalMethod + */ + private $paypalMethod; /** * ConfigProvider constructor * - * @param Config $config + * @param Config $config * @param ShopperHandlerService $shopperHandler - * @param QuoteHandlerService $quoteHandler - * @param VaultHandlerService $vaultHandler - * @param CardHandlerService $cardHandler - * @param MethodHandlerService $methodHandler + * @param QuoteHandlerService $quoteHandler + * @param VaultHandlerService $vaultHandler + * @param CardHandlerService $cardHandler + * @param MethodHandlerService $methodHandler */ public function __construct( Config $config, @@ -87,14 +94,16 @@ public function __construct( QuoteHandlerService $quoteHandler, VaultHandlerService $vaultHandler, CardHandlerService $cardHandler, - MethodHandlerService $methodHandler + MethodHandlerService $methodHandler, + PaypalMethod $paypalMethod ) { - $this->config = $config; + $this->config = $config; $this->shopperHandler = $shopperHandler; - $this->quoteHandler = $quoteHandler; - $this->vaultHandler = $vaultHandler; - $this->cardHandler = $cardHandler; - $this->methodHandler = $methodHandler; + $this->quoteHandler = $quoteHandler; + $this->vaultHandler = $vaultHandler; + $this->cardHandler = $cardHandler; + $this->methodHandler = $methodHandler; + $this->paypalMethod = $paypalMethod; } /** @@ -123,25 +132,26 @@ public function getConfig(): array public function getConfigArray(): array { return array_merge($this->config->getModuleConfig(), $this->config->getMethodsConfig(), [ - 'checkoutcom_data' => [ - 'quote' => $this->quoteHandler->getQuoteData(), - 'store' => [ - 'name' => $this->config->getStoreName(), - 'language' => $this->config->getStoreLanguage(), - 'code' => $this->config->getStoreCode(), - 'country' => $this->config->getStoreCountry() - ], - 'user' => [ - 'has_cards' => $this->vaultHandler->userHasCards(), - 'language_fallback' => $this->shopperHandler->getLanguageFallback(), - 'previous_method' => $this->methodHandler->getPreviousMethod(), - 'previous_source' => $this->methodHandler->getPreviousSource() - ], - 'cards' => $this->cardHandler->getCardIcons(), - 'images_path' => $this->config->getImagesPath(), - 'css_path' => $this->config->getCssPath(), - 'use_minified_css' => $this->config->getCoreValue('dev/css/minify_files') + 'checkoutcom_data' => [ + 'quote' => $this->quoteHandler->getQuoteData(), + 'store' => [ + 'name' => $this->config->getStoreName(), + 'language' => $this->config->getStoreLanguage(), + 'code' => $this->config->getStoreCode(), + 'country' => $this->config->getStoreCountry() ], - ]); + 'user' => [ + 'has_cards' => $this->vaultHandler->userHasCards(), + 'language_fallback' => $this->shopperHandler->getLanguageFallback(), + 'previous_method' => $this->methodHandler->getPreviousMethod(), + 'previous_source' => $this->methodHandler->getPreviousSource() + ], + 'cards' => $this->cardHandler->getCardIcons(), + 'images_path' => $this->config->getImagesPath(), + 'css_path' => $this->config->getCssPath(), + 'use_minified_css' => $this->config->getCoreValue('dev/css/minify_files'), + 'paypal_allowed_currencies' => array_filter(explode(',', $this->paypalMethod->getConfigData('specificcurrencies') ?? '')) + ], + ]); } } diff --git a/Plugin/Api/RefundInvoice.php b/Plugin/Api/RefundInvoice.php index 9804d64d..11c875f0 100644 --- a/Plugin/Api/RefundInvoice.php +++ b/Plugin/Api/RefundInvoice.php @@ -18,6 +18,7 @@ namespace CheckoutCom\Magento2\Plugin\Api; +use Checkout\CheckoutArgumentException; use CheckoutCom\Magento2\Gateway\Config\Config; use CheckoutCom\Magento2\Model\Service\ApiHandlerService; use CheckoutCom\Magento2\Model\Service\MethodHandlerService; @@ -113,7 +114,14 @@ public function beforeRefund( $storeCode = $this->storeManager->getStore()->getCode(); // Initialize the API handler - $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + try { + $api = $this->apiHandler->init($storeCode, ScopeInterface::SCOPE_STORE); + } catch (CheckoutArgumentException $e) { + if (!$this->config->isAbcRefundAfterNasMigrationActive($storeCode)) { + throw new LocalizedException(__($e->getMessage())); + } + $api = $this->apiHandler->initAbcForRefund($storeCode, ScopeInterface::SCOPE_STORE); + } // Get the method and method id $methodId = $order->getPayment()->getMethodInstance()->getCode(); diff --git a/README.md b/README.md index 51f946b8..cd90e9df 100755 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ The Frames.js payment form is cross-browser and cross-device compatible, and can * Alternative Payments
Users can place orders with the following alternative and local payment options used around the world: -Alipay, Bancontact, Boleto, EPS, Fawry, Giropay, Ideal, Klarna, KNet, Poli, Sepa, Sofort. +Alipay, Bancontact, Boleto, EPS, Fawry, Ideal, Klarna, KNet, Poli, Sepa, Sofort. * Apple Pay Payments
Users can place orders with an Apple Pay wallet. diff --git a/composer.json b/composer.json index 7dcf15ed..ae858e3e 100755 --- a/composer.json +++ b/composer.json @@ -2,12 +2,12 @@ "name": "checkoutcom/magento2", "description": "Checkout.com Payment Gateway for Magento 2", "require": { - "checkout/checkout-sdk-php": "3.0.6", - "php": "~7.3.0||~7.4.0||~8.1.0||~8.2.0", + "checkout/checkout-sdk-php": "3.2.4", + "php": "~7.4.0||~8.1.0||~8.2.0||~8.3.0", "magento/framework": ">=100.0.1" }, "type": "magento2-module", - "version": "5.5.0", + "version": "6.4.1", "autoload": { "files": [ "registration.php" diff --git a/etc/adminhtml/system.xml b/etc/adminhtml/system.xml index d30a7290..2be5d8bf 100755 --- a/etc/adminhtml/system.xml +++ b/etc/adminhtml/system.xml @@ -16,7 +16,6 @@
- + + + CheckoutCom\Magento2\Model\Config\Backend\Source\ConfigRegion + settings/checkoutcom_configuration/region + required-entry + CheckoutCom\Magento2\Model\Config\Backend\Source\ConfigService @@ -276,6 +281,29 @@ settings/checkoutcom_configuration/gateway_responses + + + + + Magento\Config\Model\Config\Source\Yesno + settings/checkoutcom_configuration/abc_refund_enable + + + + + + + + + Magento\Config\Model\Config\Backend\Encrypted + settings/checkoutcom_configuration/abc_refund_secret_key + + + + + settings/checkoutcom_configuration/abc_refund_public_key + + @@ -358,9 +386,62 @@ payment/checkoutcom_card_payment/payment_form_styles - Add add CSS styles in JSON format for the payment form (See Frames.js docs for more information). Ex: {"base":{"color":"blue","fontSize":"18px"}} + Frames.js docs in the "style" node of javascript example for more information). Ex: {"base":{"color":"blue","fontSize":"18px"}}]]> + + + + payment/checkoutcom_card_payment/card_number_label + + multi + + + On multi form layout only + + + + + + payment/checkoutcom_card_payment/card_number_placeholder + + + + + payment/checkoutcom_card_payment/expiration_date_label + + multi + + + On multi form layout only + + + + + + payment/checkoutcom_card_payment/expiration_date_month_placeholder + + + + + payment/checkoutcom_card_payment/expiration_date_year_placeholder + + + + + payment/checkoutcom_card_payment/cvv_label + + multi + + + On multi form layout only + + + + + + payment/checkoutcom_card_payment/cvv_placeholder + @@ -552,6 +633,88 @@ Select the Google Pay supported cards + + + + + payment/checkoutcom_klarna/title + + + + Magento\Config\Model\Config\Source\Yesno + payment/checkoutcom_klarna/active + + + + validate-number + payment/checkoutcom_klarna/sort_order + + + NAS + + + + + + + payment/checkoutcom_paypal/title + + + + + Magento\Config\Model\Config\Source\Yesno + payment/checkoutcom_paypal/active + + + + + + + + + payment/checkoutcom_paypal/merchant_id + Provided by Checkout.com during integration. Your PayPal Merchant ID is generated when you create your test and live PayPal Business accounts; it consists of 13 randomly generated alphanumeric characters + + + + + payment/checkoutcom_paypal/checkout_client_id + sdk documentation]]> + + + + + payment/checkoutcom_paypal/checkout_partner_attribution_id + sdk documentation]]> + + + + + Magento\Config\Model\Config\Source\Yesno + payment/checkoutcom_paypal/express_cart + + + + + Magento\Config\Model\Config\Source\Yesno + payment/checkoutcom_paypal/express_minicart + + + + + Magento\Config\Model\Config\Source\Yesno + payment/checkoutcom_paypal/express_auto_method + + + + + validate-number + payment/checkoutcom_paypal/sort_order + + + NAS + + diff --git a/etc/apm.xml b/etc/apm.xml index 9e235be0..a40be41d 100755 --- a/etc/apm.xml +++ b/etc/apm.xml @@ -26,12 +26,6 @@ BRL,USD BR - - giropay - Giropay - EUR - DE - ideal iDEAL diff --git a/etc/config.xml b/etc/config.xml index e2e79fdf..7b02ff57 100755 --- a/etc/config.xml +++ b/etc/config.xml @@ -20,13 +20,14 @@ secret_key,private_shared_key 1 - payment_first + order_first 0 0 0 0 1 + global ABC @@ -54,6 +55,8 @@ BHD,LYD,JOD,KWD,OMR,TND checkoutcom_card_payment https://api.github.com/repos/checkout/checkout-magento2-plugin/releases + 0 + @@ -171,6 +174,51 @@ TEST white + + CheckoutCom\Magento2\Model\Methods\KlarnaMethod + Klarna with Checkout.com + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + + + CheckoutCom\Magento2\Model\Methods\PaypalMethod + Paypal with Checkout.com + 0 + 0 + 0 + 0 + 1 + ASLqLf4pnWuBshW8Qh8z_DRUbIv2Cgs3Ft8aauLm9Z-MO9FZx1INSo38nW109o_Xvu88P3tly88XbJMR + CheckoutLtd_PSP + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + AF,AX,AL,DZ,AS,AD,AO,AI,AQ,AG,AR,AM,AW,AU,AT,AZ,BS,BH,BD,BB,BY,BE,BZ,BJ,BM,BT,BO,BA,BW,BV,BR,IO,VG,BN,BG,BF,BI,KH,CM,CA,CV,KY,CF,TD,CL,CN,CX,CC,CO,KM,CG,CD,CK,CR,CI,HR,CU,CY,CZ,DK,DJ,DM,DO,EC,EG,SV,GQ,ER,EE,ET,FK,FO,FJ,FI,FR,GF,PF,TF,GA,GM,GE,DE,GH,GI,GR,GL,GD,GP,GU,GT,GG,GN,GW,GY,HT,HM,HN,HK,HU,IS,IN,ID,IR,IQ,IE,IM,IL,IT,JM,JP,JE,JO,KZ,KE,KI,KW,KG,LA,LV,LB,LS,LR,LY,LI,LT,LU,MO,MK,MG,MW,MY,MV,ML,MT,MH,MQ,MR,MU,YT,MX,FM,MD,MC,MN,ME,MS,MA,MZ,MM,NA,NR,NP,NL,AN,NC,NZ,NI,NE,NG,NU,NF,MP,KP,NO,OM,PK,PW,PS,PA,PG,PY,PE,PH,PN,PL,PT,QA,RE,RO,RU,RW,WS,SM,ST,SA,SN,RS,SC,SL,SG,SK,SI,SB,SO,ZA,GS,KR,ES,LK,BL,SH,KN,LC,MF,PM,VC,SD,SR,SJ,SZ,SE,CH,SY,TW,TJ,TZ,TH,TL,TG,TK,TO,TT,TN,TR,TM,TC,TV,UG,UA,AE,GB,US,UY,UM,VI,UZ,VU,VA,VE,VN,WF,EH,YE,ZM,ZW + AUD,BRL,CAD,CNY,CZK,DKK,EUR,HKD,HUF,INR,ILS,JPY,MXN,TWD,NZD,NOK,PHP,PLN,GBP,RUB,SGD,SEK,CHF,THB,USD + CheckoutCom\Magento2\Model\Methods\ApplePayMethod Apple Pay with Checkout.com diff --git a/etc/csp_whitelist.xml b/etc/csp_whitelist.xml index aa7f7d6c..bcaf333a 100644 --- a/etc/csp_whitelist.xml +++ b/etc/csp_whitelist.xml @@ -27,7 +27,7 @@ - https://cdn.checkout.com + https://*.checkout.com *.klarnacdn.net @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/etc/di.xml b/etc/di.xml index 3bac7ff9..7dce885f 100755 --- a/etc/di.xml +++ b/etc/di.xml @@ -41,6 +41,8 @@ CheckoutCom\Magento2\Model\Methods\AlternativePaymentMethod CheckoutCom\Magento2\Model\Methods\ApplePayMethod CheckoutCom\Magento2\Model\Methods\GooglePayMethod + CheckoutCom\Magento2\Model\Methods\PaypalMethod + CheckoutCom\Magento2\Model\Methods\KlarnaMethod CheckoutCom\Magento2\Model\Methods\VaultMethod diff --git a/etc/frontend/di.xml b/etc/frontend/di.xml index 929031e2..f563d089 100755 --- a/etc/frontend/di.xml +++ b/etc/frontend/di.xml @@ -50,20 +50,6 @@ - - - - - - \Magento\Framework\View\Element\Message\Renderer\BlockRenderer::CODE - - CheckoutCom_Magento2::ui/knetInfo.phtml - - - - - - diff --git a/etc/payment.xml b/etc/payment.xml index 47d9b592..01f7769c 100644 --- a/etc/payment.xml +++ b/etc/payment.xml @@ -26,6 +26,9 @@ 0 + + 0 + 0 diff --git a/i18n/en_GB.csv b/i18n/en_GB.csv index 7e43c6ec..bd713ff6 100644 --- a/i18n/en_GB.csv +++ b/i18n/en_GB.csv @@ -1,163 +1,38 @@ -"Please keep your website safe! Your checkout plugin (v' . . ') is not the latest version (v' . . '). - Update now to get the latest features and security updates. - See https://github.com/checkout/checkout-magento2-plugin for detailed instructions.","Please keep your website safe! Your checkout plugin (v' . . ') is not the latest version (v' . . '). - Update now to get the latest features and security updates. - See https://github.com/checkout/checkout-magento2-plugin for detailed instructions." -Configure,Configure -Close,Close -"Learn More","Learn More" -"View Demo","View Demo" -"The payment card has been stored successfully.","The payment card has been stored successfully." -"The card could not be saved.","The card could not be saved." -"The payment request was declined by the gateway.","The payment request was declined by the gateway." -"The order could not be created.","The order could not be created." -"The request is invalid.","The request is invalid." -"No quote was found with the provided ID.","No quote was found with the provided ID." -"The quote ID is missing or invalid.","The quote ID is missing or invalid." -"The payment token is missing or invalid.","The payment token is missing or invalid." -"The public key is invalid.","The public key is invalid." -"No quote found with the provided ID","No quote found with the provided ID" -"Payment token provided is not a string","Payment token provided is not a string" -"Payment token provided is empty string","Payment token provided is empty string" -"Payment token is missing from request body","Payment token is missing from request body" -"Quote ID provided must be a positive integer","Quote ID provided must be a positive integer" -"Quote ID is missing from request body","Quote ID is missing from request body" -"Card BIN is empty string","Card BIN is empty string" -"Success URL provided is not a string","Success URL provided is not a string" -"Success URL is empty string","Success URL is empty string" -"Failure URL provided is not a string","Failure URL provided is not a string" -"Failure URL is empty string","Failure URL is empty string" -"An error occurred and the order could not be created.","An error occurred and the order could not be created." -"Your order number %1 has been created successfully.","Your order number %1 has been created successfully." -"The transaction could not be processed.","The transaction could not be processed." -"The order could not be processed.","The order could not be processed." -"The request is invalid or there was no quote found.","The request is invalid or there was no quote found." -"Please enter valid card details.","Please enter valid card details." -"The transaction could not be processed or has been cancelled.","The transaction could not be processed or has been cancelled." -"Invalid request. No order found.","Invalid request. No order found." -"Invalid request. No session ID found.","Invalid request. No session ID found." -"Webhook and order successfully processed.","Webhook and order successfully processed." -"The order creation failed. Please check the error logs.","The order creation failed. Please check the error logs." -"The webhook response is invalid.","The webhook response is invalid." -"The webhook payment response is invalid.","The webhook payment response is invalid." -"Unauthorized request. No matching private shared key.","Unauthorized request. No matching private shared key." -Black,Black -White,White -"White with line","White with line" -"Credit cards","Credit cards" -"Debit cards","Debit cards" -Visa,Visa -Mastercard,Mastercard -"American Express","American Express" -None,None -title,title -Test,Test -Production,Production -Standard,Standard -Simple,Simple -JCB,JCB -Discover,Discover -English,English -Spanish,Spanish -German,German -Korean,Korean -French,French -Italian,Italian -Dutch,Dutch -"Cancel the order","Cancel the order" -"Delete the order","Delete the order" -"Do nothing","Do nothing" -Processing,Processing -Pending,Pending -Authorize,Authorize -"Authorize and Capture","Authorize and Capture" -"Single iframe","Single iframe" -"Multiple iframes","Multiple iframes" -Webhook,Webhook -"Cron Job","Cron Job" -"Payment request from %1","Payment request from %1" -"The capture action is not available.","The capture action is not available." -"The capture request could not be processed.","The capture request could not be processed." -"The void action is not available.","The void action is not available." -"The void request could not be processed.","The void request could not be processed." -"The refund action is not available.","The refund action is not available." -"The refund request could not be processed.","The refund request could not be processed." -"The CVV value is required.","The CVV value is required." -"There is no quote available to place an order.","There is no quote available to place an order." -"A payment method ID is required to place an order.","A payment method ID is required to place an order." +"--","Others" " for an amount of %1. Action ID: %2. Event ID: %3. Payment ID: %4. Error: %5 %6"," for an amount of %1. Action ID: %2. Event ID: %3. Payment ID: %4. Error: %5 %6" -"The payment was declined, please try again. If the problem persists, try another card or payment method.","The payment was declined, please try again. If the problem persists, try another card or payment method." -"You have reached the limit allowed for this card/account, please try again with another card or payment method.","You have reached the limit allowed for this card/account, please try again with another card or payment method." -"Something went wrong, please try again later","Something went wrong, please try again later" -"It looks like your card is invalid or blocked, please try with another card","It looks like your card is invalid or blocked, please try with another card" -"It looks like this transaction has been blocked due to account holder action, please contact your bank or use another card or payment method","It looks like this transaction has been blocked due to account holder action, please contact your bank or use another card or payment method" +"3DS authorization code","3DS authorization code" "3DS has expired or authentication failed, please try again","3DS has expired or authentication failed, please try again" -"The transaction could not be processed","The transaction could not be processed" -"Payment capture initiated, awaiting capture confirmation.","Payment capture initiated, awaiting capture confirmation." "3DS payment expired.","3DS payment expired." -"This card is already saved.","This card is already saved." -ending,ending -expires,expires -"Missing action ID for webhook with payment ID %","Missing action ID for webhook with payment ID %" -"The payment request was successfully processed.","The payment request was successfully processed." -"The transaction could not be processed. Please check the payment details.","The transaction could not be processed. Please check the payment details." -"Please provide the required card information for the MOTO payment.","Please provide the required card information for the MOTO payment." -"Missing required card information for the MOTO payment.","Missing required card information for the MOTO payment." -CVV,CVV -"Get your credentials here.","Get your credentials here." -"Add a card","Add a card" -"Save the card","Save the card" -"Card Number","Card Number" -"Expiration Date","Expiration Date" -Type,Type -Actions,Actions -Delete,Delete -"The card ending with %1 will be deleted.","The card ending with %1 will be deleted." -"Delete a card","Delete a card" -Name,Name -"Cadastro de Pessoas Físicas or Cadastro Nacional da Pessoa Jurídica","Cadastro de Pessoas Físicas or Cadastro Nacional da Pessoa Jurídica" -"Birth date (YYYY-MM-DD)","Birth date (YYYY-MM-DD)" -BIC,BIC -Description,Description -"Could not load the Klarna script.","Could not load the Klarna script." -"Account IBAN","Account IBAN" -Continue,Continue -"SEPA Direct Debit Mandate for single payment","SEPA Direct Debit Mandate for single payment" -Creditor,Creditor -"Creditor ID","Creditor ID" -Debitor,Debitor -"By accepting this mandate form, you authorise (A) b4payment GmbH to send instructions to your bank to debit your account (B) your bank to debit your account in accordance with the instructions from b4payment GmbH.","By accepting this mandate form, you authorise (A) b4payment GmbH to send instructions to your bank to debit your account (B) your bank to debit your account in accordance with the instructions from b4payment GmbH." -"As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited.","As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited." -"I accept the mandate for a single payment","I accept the mandate for a single payment" -"Your rights regarding the above mandate are explained in a statement that you can obtain from your bank.","Your rights regarding the above mandate are explained in a statement that you can obtain from your bank." -"Place Order","Place Order" -"Card number","Card number" -"Save this card for later use.","Save this card for later use." -"Set Webhooks","Set Webhooks" -"Attention, webhook not properly configured!","Attention, webhook not properly configured!" -"Your webhook is all set!","Your webhook is all set!" -"Error! Could not set webhooks. Please check your secret key.","Error! Could not set webhooks. Please check your secret key." -"Attention, secret key incorrect!","Attention, secret key incorrect!" -"Use Risk Rules For MOTO","Use Risk Rules For MOTO" -"3DS authorization code","3DS authorization code" -"Payment Method refunded","Payment Method refunded" -"Mismatched Address (fraud check)","Mismatched Address (fraud check)" -"Alternative payment method","Alternative payment method" -"Transaction Id","Transaction Id" -"Card Country","Card Country" -"Card Bank","Card Bank" -"Card expiry year","Card expiry year" -"Card expiry month","Card expiry month" -"Card 4 last numbers","Card 4 last numbers" -"Card type","Card type" -"Payment Additional Information","Payment Additional Information" "5 Digit Postal Match","5 Digit Postal Match" +"A payment method ID is required to place an order.","A payment method ID is required to place an order." "AVS Not Available","AVS Not Available" +"Account IBAN","Account IBAN" +"Add a card","Add a card" +"Alternative payment method","Alternative payment method" +"American Express","American Express" +"An error occurred and the order could not be created.","An error occurred and the order could not be created." +"As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited.","As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited." "Attempt at processing performed. Not authenticated or verified, but a proof of attempted authentication/verification is provided.","Attempt at processing performed. Not authenticated or verified, but a proof of attempted authentication/verification is provided." +"Attention, secret key incorrect!","Attention, secret key incorrect!" +"Attention, webhook not properly configured!","Attention, webhook not properly configured!" "Authentication or account verification could not be performed. This is due to a technical problem, or another problem as indicated in ARes or RReq.","Authentication or account verification could not be performed. This is due to a technical problem, or another problem as indicated in ARes or RReq." "Authentication or account verification rejected. Issuer is rejecting and requests that authorization not be attempted.","Authentication or account verification rejected. Issuer is rejecting and requests that authorization not be attempted." "Authentication verification successful.","Authentication verification successful." +"Authorize and Capture","Authorize and Capture" "Authorizing entity has not attempted card verification or could not verify the CVD due to a security device error","Authorizing entity has not attempted card verification or could not verify the CVD due to a security device error" +"Birth date (YYYY-MM-DD)","Birth date (YYYY-MM-DD)" +"By accepting this mandate form, you authorise (A) b4payment GmbH to send instructions to your bank to debit your account (B) your bank to debit your account in accordance with the instructions from b4payment GmbH.","By accepting this mandate form, you authorise (A) b4payment GmbH to send instructions to your bank to debit your account (B) your bank to debit your account in accordance with the instructions from b4payment GmbH." +"Cadastro de Pessoas Físicas or Cadastro Nacional da Pessoa Jurídica","Cadastro de Pessoas Físicas or Cadastro Nacional da Pessoa Jurídica" +"Cancel the order","Cancel the order" +"Card 4 last numbers","Card 4 last numbers" +"Card BIN is empty string","Card BIN is empty string" +"Card Bank","Card Bank" +"Card Country","Card Country" +"Card Number","Card Number" +"Card expiry month","Card expiry month" +"Card expiry year","Card expiry year" +"Card number","Card number" +"Card type","Card type" "Card verification not performed, CVD was not on the card. Not all cards have a CVD value encoded","Card verification not performed, CVD was not on the card. Not all cards have a CVD value encoded" "Card verification performed, and CVD was invalid","Card verification performed, and CVD was invalid" "Card verification performed, and CVD was valid","Card verification performed, and CVD was valid" @@ -170,17 +45,142 @@ Debitor,Debitor "Cardholder Name, Street and Postal/ZIP Match","Cardholder Name, Street and Postal/ZIP Match" "Challenge required. Additional authentication is required using the CReq or CRes.","Challenge required. Additional authentication is required using the CReq or CRes." "Challenge required. Decoupled authentication confirmed.","Challenge required. Decoupled authentication confirmed." +"Could not load the Klarna script.","Could not load the Klarna script." +"Credit cards","Credit cards" +"Creditor ID","Creditor ID" +"Cron Job","Cron Job" +"Debit cards","Debit cards" +"Delete a card","Delete a card" +"Delete the order","Delete the order" +"Do nothing","Do nothing" +"Error! Could not set webhooks. Please check your secret key.","Error! Could not set webhooks. Please check your secret key." +"Expiration Date","Expiration Date" +"Failure URL is empty string","Failure URL is empty string" +"Failure URL provided is not a string","Failure URL provided is not a string" +"Get your credentials here.","Get your credentials here." +"I accept the mandate for a single payment","I accept the mandate for a single payment" "Informational only. 3DS requestor challenge preference acknowledged.","Informational only. 3DS requestor challenge preference acknowledged." +"Invalid request. No order found.","Invalid request. No order found." +"Invalid request. No session ID found.","Invalid request. No session ID found." +"It looks like this transaction has been blocked due to account holder action, please contact your bank or use another card or payment method","It looks like this transaction has been blocked due to account holder action, please contact your bank or use another card or payment method" +"It looks like your card is invalid or blocked, please try with another card","It looks like your card is invalid or blocked, please try with another card" +"KSA","KSA" +"Learn More","Learn More" "Match Not Capable","Match Not Capable" +"Mismatched Address (fraud check)","Mismatched Address (fraud check)" +"Missing action ID for webhook with payment ID %","Missing action ID for webhook with payment ID %" +"Missing required card information for the MOTO payment.","Missing required card information for the MOTO payment." +"Multiple iframes","Multiple iframes" "No Address Match","No Address Match" "No CVV2 information is available",,"No CVV2 information is available" +"No quote found with the provided ID","No quote found with the provided ID" +"No quote was found with the provided ID.","No quote was found with the provided ID." "Not Verified or Not Supported","Not Verified or Not Supported" "Not authenticated or account not verified. This means the transaction was denied.","Not authenticated or account not verified. This means the transaction was denied." "Not supported","Not supported" +"Payment Additional Information","Payment Additional Information" +"Payment Method refunded","Payment Method refunded" +"Payment capture initiated, awaiting capture confirmation.","Payment capture initiated, awaiting capture confirmation." +"Payment request from %1","Payment request from %1" +"Payment token is missing from request body","Payment token is missing from request body" +"Payment token provided is empty string","Payment token provided is empty string" +"Payment token provided is not a string","Payment token provided is not a string" +"Place Order","Place Order" +"Please enter valid card details.","Please enter valid card details." +"Please keep your website safe! Your checkout plugin (v' . . ') is not the latest version (v' . . '). Update now to get the latest features and security updates. See https://github.com/checkout/checkout-magento2-plugin for detailed instructions.","Please keep your website safe! Your checkout plugin (v' . . ') is not the latest version (v' . . '). Update now to get the latest features and security updates. See https://github.com/checkout/checkout-magento2-plugin for detailed instructions." +"Please provide the required card information for the MOTO payment.","Please provide the required card information for the MOTO payment." +"Quote ID is missing from request body","Quote ID is missing from request body" +"Quote ID provided must be a positive integer","Quote ID provided must be a positive integer" +"SEPA Direct Debit Mandate for single payment","SEPA Direct Debit Mandate for single payment" +"Save the card","Save the card" +"Save this card for later use.","Save this card for later use." +"Set Webhooks","Set Webhooks" +"Single iframe","Single iframe" +"Something went wrong with paypal method. Please choose another method.","Something went wrong with paypal method. Please choose another method." +"Something went wrong, please try again later","Something went wrong, please try again later" "Street Match Postal Not Verified","Street Match Postal Not Verified" "Street Match","Street Match" "Street Not Verified Postal Match","Street Not Verified Postal Match" "Street and 5 Digit Postal Match","Street and 5 Digit Postal Match" "Street and Postal Match","Street and Postal Match" "Street and Postal Not Verified","Street and Postal Not Verified" +"Success URL is empty string","Success URL is empty string" +"Success URL provided is not a string","Success URL provided is not a string" +"The CVV value is required.","The CVV value is required." +"The capture action is not available.","The capture action is not available." +"The capture request could not be processed.","The capture request could not be processed." +"The card could not be saved.","The card could not be saved." +"The card ending with %1 will be deleted.","The card ending with %1 will be deleted." "The issuer has not certified or has not provided the encryption keys to the interchange","The issuer has not certified or has not provided the encryption keys to the interchange" +"The order could not be created.","The order could not be created." +"The order could not be processed.","The order could not be processed." +"The order creation failed. Please check the error logs.","The order creation failed. Please check the error logs." +"The payment card has been stored successfully.","The payment card has been stored successfully." +"The payment request was declined by the gateway.","The payment request was declined by the gateway." +"The payment request was successfully processed.","The payment request was successfully processed." +"The payment token is missing or invalid.","The payment token is missing or invalid." +"The payment was declined, please try again. If the problem persists, try another card or payment method.","The payment was declined, please try again. If the problem persists, try another card or payment method." +"The public key is invalid.","The public key is invalid." +"The quote ID is missing or invalid.","The quote ID is missing or invalid." +"The refund action is not available.","The refund action is not available." +"The refund request could not be processed.","The refund request could not be processed." +"The request is invalid or there was no quote found.","The request is invalid or there was no quote found." +"The request is invalid.","The request is invalid." +"The transaction could not be processed or has been cancelled.","The transaction could not be processed or has been cancelled." +"The transaction could not be processed","The transaction could not be processed" +"The transaction could not be processed. Please check the payment details.","The transaction could not be processed. Please check the payment details." +"The transaction could not be processed.","The transaction could not be processed." +"The void action is not available.","The void action is not available." +"The void request could not be processed.","The void request could not be processed." +"The webhook payment response is invalid.","The webhook payment response is invalid." +"The webhook response is invalid.","The webhook response is invalid." +"There is no quote available to place an order.","There is no quote available to place an order." +"This card is already saved.","This card is already saved." +"Transaction Id","Transaction Id" +"Unauthorized request. No matching private shared key.","Unauthorized request. No matching private shared key." +"Use Risk Rules For MOTO","Use Risk Rules For MOTO" +"View Demo","View Demo" +"Webhook and order successfully processed.","Webhook and order successfully processed." +"White with line","White with line" +"You have reached the limit allowed for this card/account, please try again with another card or payment method.","You have reached the limit allowed for this card/account, please try again with another card or payment method." +"Your browser is not compatible with the Apple Pay version. Please use the most updated OS system and browsers.","Your browser is not compatible with the Apple Pay version. Please use the most updated OS system and browsers." +"Your order number %1 has been created successfully.","Your order number %1 has been created successfully." +"Your rights regarding the above mandate are explained in a statement that you can obtain from your bank.","Your rights regarding the above mandate are explained in a statement that you can obtain from your bank." +"Your webhook is all set!","Your webhook is all set!" +Actions,Actions +Authorize,Authorize +BIC,BIC +Black,Black +CVV,CVV +Close,Close +Configure,Configure +Continue,Continue +Creditor,Creditor +Debitor,Debitor +Delete,Delete +Description,Description +Discover,Discover +Dutch,Dutch +English,English +French,French +German,German +Italian,Italian +JCB,JCB +Korean,Korean +Mastercard,Mastercard +Name,Name +None,None +Pending,Pending +Processing,Processing +Production,Production +Simple,Simple +Spanish,Spanish +Standard,Standard +Test,Test +Type,Type +Visa,Visa +Webhook,Webhook +White,White +ending,ending +expires,expires +title,title diff --git a/i18n/en_US.csv b/i18n/en_US.csv index 7e43c6ec..bd713ff6 100644 --- a/i18n/en_US.csv +++ b/i18n/en_US.csv @@ -1,163 +1,38 @@ -"Please keep your website safe! Your checkout plugin (v' . . ') is not the latest version (v' . . '). - Update now to get the latest features and security updates. - See https://github.com/checkout/checkout-magento2-plugin for detailed instructions.","Please keep your website safe! Your checkout plugin (v' . . ') is not the latest version (v' . . '). - Update now to get the latest features and security updates. - See https://github.com/checkout/checkout-magento2-plugin for detailed instructions." -Configure,Configure -Close,Close -"Learn More","Learn More" -"View Demo","View Demo" -"The payment card has been stored successfully.","The payment card has been stored successfully." -"The card could not be saved.","The card could not be saved." -"The payment request was declined by the gateway.","The payment request was declined by the gateway." -"The order could not be created.","The order could not be created." -"The request is invalid.","The request is invalid." -"No quote was found with the provided ID.","No quote was found with the provided ID." -"The quote ID is missing or invalid.","The quote ID is missing or invalid." -"The payment token is missing or invalid.","The payment token is missing or invalid." -"The public key is invalid.","The public key is invalid." -"No quote found with the provided ID","No quote found with the provided ID" -"Payment token provided is not a string","Payment token provided is not a string" -"Payment token provided is empty string","Payment token provided is empty string" -"Payment token is missing from request body","Payment token is missing from request body" -"Quote ID provided must be a positive integer","Quote ID provided must be a positive integer" -"Quote ID is missing from request body","Quote ID is missing from request body" -"Card BIN is empty string","Card BIN is empty string" -"Success URL provided is not a string","Success URL provided is not a string" -"Success URL is empty string","Success URL is empty string" -"Failure URL provided is not a string","Failure URL provided is not a string" -"Failure URL is empty string","Failure URL is empty string" -"An error occurred and the order could not be created.","An error occurred and the order could not be created." -"Your order number %1 has been created successfully.","Your order number %1 has been created successfully." -"The transaction could not be processed.","The transaction could not be processed." -"The order could not be processed.","The order could not be processed." -"The request is invalid or there was no quote found.","The request is invalid or there was no quote found." -"Please enter valid card details.","Please enter valid card details." -"The transaction could not be processed or has been cancelled.","The transaction could not be processed or has been cancelled." -"Invalid request. No order found.","Invalid request. No order found." -"Invalid request. No session ID found.","Invalid request. No session ID found." -"Webhook and order successfully processed.","Webhook and order successfully processed." -"The order creation failed. Please check the error logs.","The order creation failed. Please check the error logs." -"The webhook response is invalid.","The webhook response is invalid." -"The webhook payment response is invalid.","The webhook payment response is invalid." -"Unauthorized request. No matching private shared key.","Unauthorized request. No matching private shared key." -Black,Black -White,White -"White with line","White with line" -"Credit cards","Credit cards" -"Debit cards","Debit cards" -Visa,Visa -Mastercard,Mastercard -"American Express","American Express" -None,None -title,title -Test,Test -Production,Production -Standard,Standard -Simple,Simple -JCB,JCB -Discover,Discover -English,English -Spanish,Spanish -German,German -Korean,Korean -French,French -Italian,Italian -Dutch,Dutch -"Cancel the order","Cancel the order" -"Delete the order","Delete the order" -"Do nothing","Do nothing" -Processing,Processing -Pending,Pending -Authorize,Authorize -"Authorize and Capture","Authorize and Capture" -"Single iframe","Single iframe" -"Multiple iframes","Multiple iframes" -Webhook,Webhook -"Cron Job","Cron Job" -"Payment request from %1","Payment request from %1" -"The capture action is not available.","The capture action is not available." -"The capture request could not be processed.","The capture request could not be processed." -"The void action is not available.","The void action is not available." -"The void request could not be processed.","The void request could not be processed." -"The refund action is not available.","The refund action is not available." -"The refund request could not be processed.","The refund request could not be processed." -"The CVV value is required.","The CVV value is required." -"There is no quote available to place an order.","There is no quote available to place an order." -"A payment method ID is required to place an order.","A payment method ID is required to place an order." +"--","Others" " for an amount of %1. Action ID: %2. Event ID: %3. Payment ID: %4. Error: %5 %6"," for an amount of %1. Action ID: %2. Event ID: %3. Payment ID: %4. Error: %5 %6" -"The payment was declined, please try again. If the problem persists, try another card or payment method.","The payment was declined, please try again. If the problem persists, try another card or payment method." -"You have reached the limit allowed for this card/account, please try again with another card or payment method.","You have reached the limit allowed for this card/account, please try again with another card or payment method." -"Something went wrong, please try again later","Something went wrong, please try again later" -"It looks like your card is invalid or blocked, please try with another card","It looks like your card is invalid or blocked, please try with another card" -"It looks like this transaction has been blocked due to account holder action, please contact your bank or use another card or payment method","It looks like this transaction has been blocked due to account holder action, please contact your bank or use another card or payment method" +"3DS authorization code","3DS authorization code" "3DS has expired or authentication failed, please try again","3DS has expired or authentication failed, please try again" -"The transaction could not be processed","The transaction could not be processed" -"Payment capture initiated, awaiting capture confirmation.","Payment capture initiated, awaiting capture confirmation." "3DS payment expired.","3DS payment expired." -"This card is already saved.","This card is already saved." -ending,ending -expires,expires -"Missing action ID for webhook with payment ID %","Missing action ID for webhook with payment ID %" -"The payment request was successfully processed.","The payment request was successfully processed." -"The transaction could not be processed. Please check the payment details.","The transaction could not be processed. Please check the payment details." -"Please provide the required card information for the MOTO payment.","Please provide the required card information for the MOTO payment." -"Missing required card information for the MOTO payment.","Missing required card information for the MOTO payment." -CVV,CVV -"Get your credentials here.","Get your credentials here." -"Add a card","Add a card" -"Save the card","Save the card" -"Card Number","Card Number" -"Expiration Date","Expiration Date" -Type,Type -Actions,Actions -Delete,Delete -"The card ending with %1 will be deleted.","The card ending with %1 will be deleted." -"Delete a card","Delete a card" -Name,Name -"Cadastro de Pessoas Físicas or Cadastro Nacional da Pessoa Jurídica","Cadastro de Pessoas Físicas or Cadastro Nacional da Pessoa Jurídica" -"Birth date (YYYY-MM-DD)","Birth date (YYYY-MM-DD)" -BIC,BIC -Description,Description -"Could not load the Klarna script.","Could not load the Klarna script." -"Account IBAN","Account IBAN" -Continue,Continue -"SEPA Direct Debit Mandate for single payment","SEPA Direct Debit Mandate for single payment" -Creditor,Creditor -"Creditor ID","Creditor ID" -Debitor,Debitor -"By accepting this mandate form, you authorise (A) b4payment GmbH to send instructions to your bank to debit your account (B) your bank to debit your account in accordance with the instructions from b4payment GmbH.","By accepting this mandate form, you authorise (A) b4payment GmbH to send instructions to your bank to debit your account (B) your bank to debit your account in accordance with the instructions from b4payment GmbH." -"As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited.","As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited." -"I accept the mandate for a single payment","I accept the mandate for a single payment" -"Your rights regarding the above mandate are explained in a statement that you can obtain from your bank.","Your rights regarding the above mandate are explained in a statement that you can obtain from your bank." -"Place Order","Place Order" -"Card number","Card number" -"Save this card for later use.","Save this card for later use." -"Set Webhooks","Set Webhooks" -"Attention, webhook not properly configured!","Attention, webhook not properly configured!" -"Your webhook is all set!","Your webhook is all set!" -"Error! Could not set webhooks. Please check your secret key.","Error! Could not set webhooks. Please check your secret key." -"Attention, secret key incorrect!","Attention, secret key incorrect!" -"Use Risk Rules For MOTO","Use Risk Rules For MOTO" -"3DS authorization code","3DS authorization code" -"Payment Method refunded","Payment Method refunded" -"Mismatched Address (fraud check)","Mismatched Address (fraud check)" -"Alternative payment method","Alternative payment method" -"Transaction Id","Transaction Id" -"Card Country","Card Country" -"Card Bank","Card Bank" -"Card expiry year","Card expiry year" -"Card expiry month","Card expiry month" -"Card 4 last numbers","Card 4 last numbers" -"Card type","Card type" -"Payment Additional Information","Payment Additional Information" "5 Digit Postal Match","5 Digit Postal Match" +"A payment method ID is required to place an order.","A payment method ID is required to place an order." "AVS Not Available","AVS Not Available" +"Account IBAN","Account IBAN" +"Add a card","Add a card" +"Alternative payment method","Alternative payment method" +"American Express","American Express" +"An error occurred and the order could not be created.","An error occurred and the order could not be created." +"As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited.","As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited." "Attempt at processing performed. Not authenticated or verified, but a proof of attempted authentication/verification is provided.","Attempt at processing performed. Not authenticated or verified, but a proof of attempted authentication/verification is provided." +"Attention, secret key incorrect!","Attention, secret key incorrect!" +"Attention, webhook not properly configured!","Attention, webhook not properly configured!" "Authentication or account verification could not be performed. This is due to a technical problem, or another problem as indicated in ARes or RReq.","Authentication or account verification could not be performed. This is due to a technical problem, or another problem as indicated in ARes or RReq." "Authentication or account verification rejected. Issuer is rejecting and requests that authorization not be attempted.","Authentication or account verification rejected. Issuer is rejecting and requests that authorization not be attempted." "Authentication verification successful.","Authentication verification successful." +"Authorize and Capture","Authorize and Capture" "Authorizing entity has not attempted card verification or could not verify the CVD due to a security device error","Authorizing entity has not attempted card verification or could not verify the CVD due to a security device error" +"Birth date (YYYY-MM-DD)","Birth date (YYYY-MM-DD)" +"By accepting this mandate form, you authorise (A) b4payment GmbH to send instructions to your bank to debit your account (B) your bank to debit your account in accordance with the instructions from b4payment GmbH.","By accepting this mandate form, you authorise (A) b4payment GmbH to send instructions to your bank to debit your account (B) your bank to debit your account in accordance with the instructions from b4payment GmbH." +"Cadastro de Pessoas Físicas or Cadastro Nacional da Pessoa Jurídica","Cadastro de Pessoas Físicas or Cadastro Nacional da Pessoa Jurídica" +"Cancel the order","Cancel the order" +"Card 4 last numbers","Card 4 last numbers" +"Card BIN is empty string","Card BIN is empty string" +"Card Bank","Card Bank" +"Card Country","Card Country" +"Card Number","Card Number" +"Card expiry month","Card expiry month" +"Card expiry year","Card expiry year" +"Card number","Card number" +"Card type","Card type" "Card verification not performed, CVD was not on the card. Not all cards have a CVD value encoded","Card verification not performed, CVD was not on the card. Not all cards have a CVD value encoded" "Card verification performed, and CVD was invalid","Card verification performed, and CVD was invalid" "Card verification performed, and CVD was valid","Card verification performed, and CVD was valid" @@ -170,17 +45,142 @@ Debitor,Debitor "Cardholder Name, Street and Postal/ZIP Match","Cardholder Name, Street and Postal/ZIP Match" "Challenge required. Additional authentication is required using the CReq or CRes.","Challenge required. Additional authentication is required using the CReq or CRes." "Challenge required. Decoupled authentication confirmed.","Challenge required. Decoupled authentication confirmed." +"Could not load the Klarna script.","Could not load the Klarna script." +"Credit cards","Credit cards" +"Creditor ID","Creditor ID" +"Cron Job","Cron Job" +"Debit cards","Debit cards" +"Delete a card","Delete a card" +"Delete the order","Delete the order" +"Do nothing","Do nothing" +"Error! Could not set webhooks. Please check your secret key.","Error! Could not set webhooks. Please check your secret key." +"Expiration Date","Expiration Date" +"Failure URL is empty string","Failure URL is empty string" +"Failure URL provided is not a string","Failure URL provided is not a string" +"Get your credentials here.","Get your credentials here." +"I accept the mandate for a single payment","I accept the mandate for a single payment" "Informational only. 3DS requestor challenge preference acknowledged.","Informational only. 3DS requestor challenge preference acknowledged." +"Invalid request. No order found.","Invalid request. No order found." +"Invalid request. No session ID found.","Invalid request. No session ID found." +"It looks like this transaction has been blocked due to account holder action, please contact your bank or use another card or payment method","It looks like this transaction has been blocked due to account holder action, please contact your bank or use another card or payment method" +"It looks like your card is invalid or blocked, please try with another card","It looks like your card is invalid or blocked, please try with another card" +"KSA","KSA" +"Learn More","Learn More" "Match Not Capable","Match Not Capable" +"Mismatched Address (fraud check)","Mismatched Address (fraud check)" +"Missing action ID for webhook with payment ID %","Missing action ID for webhook with payment ID %" +"Missing required card information for the MOTO payment.","Missing required card information for the MOTO payment." +"Multiple iframes","Multiple iframes" "No Address Match","No Address Match" "No CVV2 information is available",,"No CVV2 information is available" +"No quote found with the provided ID","No quote found with the provided ID" +"No quote was found with the provided ID.","No quote was found with the provided ID." "Not Verified or Not Supported","Not Verified or Not Supported" "Not authenticated or account not verified. This means the transaction was denied.","Not authenticated or account not verified. This means the transaction was denied." "Not supported","Not supported" +"Payment Additional Information","Payment Additional Information" +"Payment Method refunded","Payment Method refunded" +"Payment capture initiated, awaiting capture confirmation.","Payment capture initiated, awaiting capture confirmation." +"Payment request from %1","Payment request from %1" +"Payment token is missing from request body","Payment token is missing from request body" +"Payment token provided is empty string","Payment token provided is empty string" +"Payment token provided is not a string","Payment token provided is not a string" +"Place Order","Place Order" +"Please enter valid card details.","Please enter valid card details." +"Please keep your website safe! Your checkout plugin (v' . . ') is not the latest version (v' . . '). Update now to get the latest features and security updates. See https://github.com/checkout/checkout-magento2-plugin for detailed instructions.","Please keep your website safe! Your checkout plugin (v' . . ') is not the latest version (v' . . '). Update now to get the latest features and security updates. See https://github.com/checkout/checkout-magento2-plugin for detailed instructions." +"Please provide the required card information for the MOTO payment.","Please provide the required card information for the MOTO payment." +"Quote ID is missing from request body","Quote ID is missing from request body" +"Quote ID provided must be a positive integer","Quote ID provided must be a positive integer" +"SEPA Direct Debit Mandate for single payment","SEPA Direct Debit Mandate for single payment" +"Save the card","Save the card" +"Save this card for later use.","Save this card for later use." +"Set Webhooks","Set Webhooks" +"Single iframe","Single iframe" +"Something went wrong with paypal method. Please choose another method.","Something went wrong with paypal method. Please choose another method." +"Something went wrong, please try again later","Something went wrong, please try again later" "Street Match Postal Not Verified","Street Match Postal Not Verified" "Street Match","Street Match" "Street Not Verified Postal Match","Street Not Verified Postal Match" "Street and 5 Digit Postal Match","Street and 5 Digit Postal Match" "Street and Postal Match","Street and Postal Match" "Street and Postal Not Verified","Street and Postal Not Verified" +"Success URL is empty string","Success URL is empty string" +"Success URL provided is not a string","Success URL provided is not a string" +"The CVV value is required.","The CVV value is required." +"The capture action is not available.","The capture action is not available." +"The capture request could not be processed.","The capture request could not be processed." +"The card could not be saved.","The card could not be saved." +"The card ending with %1 will be deleted.","The card ending with %1 will be deleted." "The issuer has not certified or has not provided the encryption keys to the interchange","The issuer has not certified or has not provided the encryption keys to the interchange" +"The order could not be created.","The order could not be created." +"The order could not be processed.","The order could not be processed." +"The order creation failed. Please check the error logs.","The order creation failed. Please check the error logs." +"The payment card has been stored successfully.","The payment card has been stored successfully." +"The payment request was declined by the gateway.","The payment request was declined by the gateway." +"The payment request was successfully processed.","The payment request was successfully processed." +"The payment token is missing or invalid.","The payment token is missing or invalid." +"The payment was declined, please try again. If the problem persists, try another card or payment method.","The payment was declined, please try again. If the problem persists, try another card or payment method." +"The public key is invalid.","The public key is invalid." +"The quote ID is missing or invalid.","The quote ID is missing or invalid." +"The refund action is not available.","The refund action is not available." +"The refund request could not be processed.","The refund request could not be processed." +"The request is invalid or there was no quote found.","The request is invalid or there was no quote found." +"The request is invalid.","The request is invalid." +"The transaction could not be processed or has been cancelled.","The transaction could not be processed or has been cancelled." +"The transaction could not be processed","The transaction could not be processed" +"The transaction could not be processed. Please check the payment details.","The transaction could not be processed. Please check the payment details." +"The transaction could not be processed.","The transaction could not be processed." +"The void action is not available.","The void action is not available." +"The void request could not be processed.","The void request could not be processed." +"The webhook payment response is invalid.","The webhook payment response is invalid." +"The webhook response is invalid.","The webhook response is invalid." +"There is no quote available to place an order.","There is no quote available to place an order." +"This card is already saved.","This card is already saved." +"Transaction Id","Transaction Id" +"Unauthorized request. No matching private shared key.","Unauthorized request. No matching private shared key." +"Use Risk Rules For MOTO","Use Risk Rules For MOTO" +"View Demo","View Demo" +"Webhook and order successfully processed.","Webhook and order successfully processed." +"White with line","White with line" +"You have reached the limit allowed for this card/account, please try again with another card or payment method.","You have reached the limit allowed for this card/account, please try again with another card or payment method." +"Your browser is not compatible with the Apple Pay version. Please use the most updated OS system and browsers.","Your browser is not compatible with the Apple Pay version. Please use the most updated OS system and browsers." +"Your order number %1 has been created successfully.","Your order number %1 has been created successfully." +"Your rights regarding the above mandate are explained in a statement that you can obtain from your bank.","Your rights regarding the above mandate are explained in a statement that you can obtain from your bank." +"Your webhook is all set!","Your webhook is all set!" +Actions,Actions +Authorize,Authorize +BIC,BIC +Black,Black +CVV,CVV +Close,Close +Configure,Configure +Continue,Continue +Creditor,Creditor +Debitor,Debitor +Delete,Delete +Description,Description +Discover,Discover +Dutch,Dutch +English,English +French,French +German,German +Italian,Italian +JCB,JCB +Korean,Korean +Mastercard,Mastercard +Name,Name +None,None +Pending,Pending +Processing,Processing +Production,Production +Simple,Simple +Spanish,Spanish +Standard,Standard +Test,Test +Type,Type +Visa,Visa +Webhook,Webhook +White,White +ending,ending +expires,expires +title,title diff --git a/view/base/templates/ui/knetInfo.phtml b/view/base/templates/ui/knetInfo.phtml deleted file mode 100644 index 027d9a4a..00000000 --- a/view/base/templates/ui/knetInfo.phtml +++ /dev/null @@ -1,25 +0,0 @@ - - * @copyright 2010-present Checkout.com - * @license https://opensource.org/licenses/mit-license.html MIT License - * @link https://docs.checkout.com/ - */ -?> - -%1 ; ', $block->escapeHtml($block->getData('postDate'))) ?> -%1 ; ', $block->escapeHtml($block->getData('amount'))) ?> -%1 ; ', $block->escapeHtml($block->getData('resultCode'))) ?> -%1 ; ', $block->escapeHtml($block->getData('paymentId'))) ?> -%1 ; ', $block->escapeHtml($block->getData('transactionId'))) ?> -%1 ; ', $block->escapeHtml($block->getData('authCode'))) ?> -%1 ; ', $block->escapeHtml($block->getData('reference'))) ?> diff --git a/view/frontend/layout/checkout_cart_index.xml b/view/frontend/layout/checkout_cart_index.xml index dea6da35..a761e5be 100644 --- a/view/frontend/layout/checkout_cart_index.xml +++ b/view/frontend/layout/checkout_cart_index.xml @@ -6,8 +6,51 @@ + + + + + + CheckoutCom_Magento2/js/view/payment/method-renderer/checkoutcom_paypal_express + + CheckoutCom_Magento2/payment/checkoutcom_paypal_express + express_cart + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + cart + + + diff --git a/view/frontend/layout/checkout_index_index.xml b/view/frontend/layout/checkout_index_index.xml index fec3e168..478838d6 100755 --- a/view/frontend/layout/checkout_index_index.xml +++ b/view/frontend/layout/checkout_index_index.xml @@ -19,6 +19,19 @@ + + + + + + checkout + checkout + + + @@ -38,6 +51,12 @@ CheckoutCom_Magento2/js/view/payment/method-renderer + + true + + + true + true diff --git a/view/frontend/layout/checkoutcom_paypal_review.xml b/view/frontend/layout/checkoutcom_paypal_review.xml new file mode 100644 index 00000000..3dca2021 --- /dev/null +++ b/view/frontend/layout/checkoutcom_paypal_review.xml @@ -0,0 +1,68 @@ + + + + + + Review Order + + + + + + + + + + + + + Magento\Customer\Block\DataProviders\AddressAttributeData + Magento\Customer\Block\DataProviders\PostCodesPatternsAttributeData + Magento\Customer\ViewModel\Address + Magento\Customer\ViewModel\Address\RegionProvider + + + + + + + + + + + + + + + + + + + + + diff --git a/view/frontend/layout/default.xml b/view/frontend/layout/default.xml index 5d705221..23743293 100644 --- a/view/frontend/layout/default.xml +++ b/view/frontend/layout/default.xml @@ -25,6 +25,13 @@ CheckoutCom_Magento2/checkout/minicart/applepaybutton + + CheckoutCom_Magento2/js/view/payment/method-renderer/checkoutcom_paypal_express + + CheckoutCom_Magento2/payment/checkoutcom_paypal_express + express_minicart + + @@ -33,9 +40,22 @@ - + - + + + + + + + express + mini-cart + + + diff --git a/view/frontend/templates/cart/minicart-config.phtml b/view/frontend/templates/cart/minicart-config.phtml index 2c43de4f..a7b09700 100644 --- a/view/frontend/templates/cart/minicart-config.phtml +++ b/view/frontend/templates/cart/minicart-config.phtml @@ -1,13 +1,26 @@ - * @copyright 2004-present Agence Dn'D - * @license https://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) - * @link https://www.dnd.fr/ + * Checkout.com + * Authorized and regulated as an electronic money institution + * by the UK Financial Conduct Authority (FCA) under number 900816. + * + * PHP version 7 + * + * @category Magento2 + * @package Checkout.com + * @author Platforms Development Team + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ */ -/** @var \CheckoutCom\Magento2\Block\Cart\ApplePay $block */ -/** @var \Magento\Framework\View\Helper\SecureHtmlRenderer $secureRenderer */ + +use CheckoutCom\Magento2\Block\Cart\CheckoutConfig; +use Magento\Framework\View\Helper\SecureHtmlRenderer; + +/** @var CheckoutConfig $block */ +/** @var SecureHtmlRenderer $secureRenderer */ +if ($block->isPaypalOrApplePayEnabled()): ?> getProductCount() > 0 ? $block->getSerializedCheckoutConfig() : $block->getSerializedCheckoutComConfig(); $scriptString = << +
+ +
diff --git a/view/frontend/templates/payment/apm/giropay.phtml b/view/frontend/templates/payment/apm/giropay.phtml index bdc1c7ee..3b2d88f4 100755 --- a/view/frontend/templates/payment/apm/giropay.phtml +++ b/view/frontend/templates/payment/apm/giropay.phtml @@ -24,11 +24,13 @@
-
- - -
+ getData('service_previous_mode')): ?> +
+ + +
+
diff --git a/view/frontend/templates/payment/apm/ideal.phtml b/view/frontend/templates/payment/apm/ideal.phtml index 5ecb1462..829e0751 100755 --- a/view/frontend/templates/payment/apm/ideal.phtml +++ b/view/frontend/templates/payment/apm/ideal.phtml @@ -24,13 +24,15 @@
-
- - -
+ getData('service_previous_mode')): ?> +
+ + +
+
@@ -38,24 +40,26 @@

- + +
diff --git a/view/frontend/templates/payment/paypal/review.phtml b/view/frontend/templates/payment/paypal/review.phtml new file mode 100644 index 00000000..825aaf40 --- /dev/null +++ b/view/frontend/templates/payment/paypal/review.phtml @@ -0,0 +1,53 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ + +/** + * @var Escaper $escaper + */ + +use Magento\Framework\Escaper; + +?> + +
+
+
+
+ getChildHtml('checkoutcom_paypal_review_shipping_method') ?> + getChildHtml('checkoutcom_paypal_review_payment_method') ?> +
+
+ getChildHtml('checkoutcom_paypal_review_shipping_address') ?> +
+
+
+ +
+ getChildHtml('checkoutcom_paypal.additional.actions') ?> +
+ +
+
+ escapeHtml(__('Items in Your Shopping Cart')) ?> + + escapeHtml(__('Edit Shopping Cart')) ?> + +
+ + getChildHtml('details') ?> + getChildHtml('checkoutcom_paypal_review_place_order') ?> +
+
diff --git a/view/frontend/templates/payment/paypal/review/details.phtml b/view/frontend/templates/payment/paypal/review/details.phtml new file mode 100644 index 00000000..1e5e8e4c --- /dev/null +++ b/view/frontend/templates/payment/paypal/review/details.phtml @@ -0,0 +1,45 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ + +use Magento\Checkout\Block\Cart\Totals; +use Magento\Framework\Escaper; + +/** + * @var Totals $block + * @var Escaper $escaper + */ +?> +
+ + + + + + + + + + + getItems() as $item) : ?> + getItemHtml($item) ?> + + + getChildHtml('totals') ?> + +
escapeHtml(__('Items in Your Shopping Cart')) ?>
escapeHtml(__('Item')) ?>escapeHtml(__('Price')) ?>escapeHtml(__('Qty')) ?>escapeHtml(__('Subtotal')) ?>
+
diff --git a/view/frontend/templates/payment/paypal/review/payment-method.phtml b/view/frontend/templates/payment/paypal/review/payment-method.phtml new file mode 100644 index 00000000..92266218 --- /dev/null +++ b/view/frontend/templates/payment/paypal/review/payment-method.phtml @@ -0,0 +1,32 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ + +/** + * @var PaymentMethod $block + * @var Escaper $escaper + */ + +use CheckoutCom\Magento2\Block\Paypal\Review\PaymentMethod; +use Magento\Framework\Escaper; + +?> +
+ escapeHtml(__('Payment Method')) ?> +
+ escapeHtml($block->getPaymentMethod()); ?>
+ escapeHtml($block->getEmail()); ?> +
+
diff --git a/view/frontend/templates/payment/paypal/review/place-order.phtml b/view/frontend/templates/payment/paypal/review/place-order.phtml new file mode 100644 index 00000000..dfb5a865 --- /dev/null +++ b/view/frontend/templates/payment/paypal/review/place-order.phtml @@ -0,0 +1,58 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ + +/** + * @var PlaceOrderButton $block + * @var Escaper $escaper + */ + +use CheckoutCom\Magento2\Block\Paypal\Review\PlaceOrderButton; +use Magento\Framework\Escaper; +?> + +
+
+
+
+ getChildHtml('agreements') ?> +
+
+ +
+ + escapeHtml(__('Submitting order information...')) ?> + + renderStyleAsTag("display: none;", 'span#review-please-wait') ?> +
+
+ diff --git a/view/frontend/templates/payment/paypal/review/shipping-method.phtml b/view/frontend/templates/payment/paypal/review/shipping-method.phtml new file mode 100644 index 00000000..1a67bd1d --- /dev/null +++ b/view/frontend/templates/payment/paypal/review/shipping-method.phtml @@ -0,0 +1,62 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ + +/** + * @var ShippingMethod $block + * @var Escaper $escaper + */ + +use CheckoutCom\Magento2\Block\Paypal\Review\ShippingMethod; +use Magento\Framework\Escaper; + +$rates = $block->getRates(); +?> +
+ escapeHtml(__('Shipping Method')) ?> +
+ + + + isCurrentShippingRate($carrierMethod); ?> + + + + + + escapeHtml($carrierMethod->getCarrierTitle()) ?> - + escapeHtml($carrierMethod->getMethodTitle()) ?> - + getFormatedPrice($carrierMethod->getPrice()) ?> + + + + + + + + +

+ escapeHtml( + __( + 'Sorry, no quotes are available for this order right now.' + ) + ); ?> +

+ +
+
diff --git a/view/frontend/templates/script/paypal-script.phtml b/view/frontend/templates/script/paypal-script.phtml new file mode 100644 index 00000000..17807763 --- /dev/null +++ b/view/frontend/templates/script/paypal-script.phtml @@ -0,0 +1,33 @@ + + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ + +use CheckoutCom\Magento2\Block\Paypal\Script; +use Magento\Framework\Escaper; +/** @var Escaper $escaper */ +/** @var Script $block */ +$clientId = $block->getClientId(); +$partnerId = $block->getPartnerAttributionId(); +$paypalMerchantId = $block->getPaypalMerchantId(); +if ($clientId && $partnerId && $paypalMerchantId): +?> + + diff --git a/view/frontend/web/css/apm/apm.css b/view/frontend/web/css/apm/apm.css index 39c94aac..728bb3c8 100644 --- a/view/frontend/web/css/apm/apm.css +++ b/view/frontend/web/css/apm/apm.css @@ -153,10 +153,6 @@ div.cko-alternative-form { background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU1XzNfIiBjbGFzcz0ic3QxNSIgZD0iTTMsMGgzMGMxLjcsMCwzLDEuMywzLDN2MTZjMCwxLjctMS4zLDMtMywzSDNjLTEuNywwLTMtMS4zLTMtM1YzQzAsMS4zLDEuMywwLDMsMHoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTUuNCwxMS44QzE1LjQsMTEuOCwxNS40LDExLjgsMTUuNCwxMS44Yy0wLjEtMC4xLTAuMS0wLjEtMC4yLTAuMmMtMC40LTAuOC0wLjgtMS42LTEuMi0yLjNjLTAuMy0wLjYtMC43LTEuMy0xLTEuOWMwLTAuMS0wLjEtMC4xLTAuMi0wLjFjLTAuNCwwLTAuOSwwLTEuMywwYy0wLjIsMC0wLjIsMC4xLTAuMiwwLjJjMCwyLjEsMCw0LjIsMCw2LjJjMCwwLjEsMC4xLDAuMiwwLjIsMC4yYzAuMywwLDAuNSwwLDAuOCwwYzAuMiwwLDAuMiwwLDAuMi0wLjJjMC0xLjQsMC0yLjgsMC00LjJjMC0wLjEsMC0wLjEsMC0wLjJjMCwwLjEsMC4xLDAuMSwwLjEsMC4yYzAuMywwLjYsMC42LDEuMSwwLjksMS43YzAuNSwwLjksMSwxLjgsMS40LDIuN2MwLDAuMSwwLjEsMC4xLDAuMiwwLjFjMC40LDAsMC45LDAsMS4zLDBjMC4xLDAsMC4yLDAsMC4yLTAuMmMwLTIuMSwwLTQuMiwwLTYuM2MwLTAuMiwwLTAuMi0wLjItMC4yYy0wLjIsMC0wLjUsMC0wLjcsMGMtMC4yLDAtMC4yLDAtMC4yLDAuMmMwLDEuNCwwLDIuOCwwLDQuMUMxNS40LDExLjYsMTUuNCwxMS43LDE1LjQsMTEuOHogTTE5LDguM0MxOSw4LjMsMTksOC4zLDE5LDguM2MwLjksMCwxLjYsMCwyLjQsMGMwLjEsMCwwLjIsMCwwLjItMC4yYzAtMC4zLDAtMC41LDAtMC44YzAtMC4yLDAtMC4yLTAuMi0wLjJjLTEuMiwwLTIuNSwwLTMuNywwYy0wLjIsMC0wLjIsMC4xLTAuMiwwLjJjMCwwLjMsMCwwLjUsMCwwLjhjMCwxLjgsMCwzLjYsMCw1LjRjMCwwLjIsMCwwLjIsMC4yLDAuMmMxLjMsMCwyLjcsMCw0LDBjMC4xLDAsMC4yLTAuMSwwLjItMC4yYzAtMC4zLDAtMC41LDAtMC44YzAtMC4yLDAtMC4yLTAuMi0wLjJjLTAuOCwwLTEuNiwwLTIuNCwwYy0wLjEsMC0wLjEsMC0wLjIsMGMwLTAuNiwwLTEuMSwwLTEuN2MwLjEsMCwwLjEsMCwwLjIsMGMwLjYsMCwxLjEsMCwxLjcsMGMwLjEsMCwwLjIsMCwwLjItMC4yYzAtMC4zLDAtMC41LDAtMC44YzAtMC4yLDAtMC4yLTAuMi0wLjJjLTAuNiwwLTEuMiwwLTEuNywwYy0wLjEsMC0wLjEsMC0wLjIsMEMxOSw5LjIsMTksOC44LDE5LDguM3ogTTcuNSw3Yy0wLjMsMC0wLjUsMC0wLjgsMC4xQzUuOSw3LjMsNS4zLDcuNyw0LjgsOC4zQzQuMSw5LjEsMy45LDEwLDQsMTFjMC4xLDAuOSwwLjYsMS43LDEuMywyLjJjMC44LDAuNiwxLjgsMC45LDIuOCwwLjdjMC43LTAuMSwxLjMtMC41LDEuOC0wLjljMC4zLTAuMywwLjMtMC43LDAtMC45Yy0wLjMtMC4zLTAuNy0wLjMtMC45LDBjLTAuNSwwLjUtMS4xLDAuNy0xLjgsMC42Yy0wLjQtMC4xLTAuOC0wLjItMS4yLTAuNWMtMC41LTAuNS0wLjgtMS4xLTAuNy0xLjhDNS40LDkuOCw1LjYsOS40LDUuOSw5QzYuNCw4LjUsNyw4LjMsNy43LDguNEM4LjIsOC40LDguNiw4LjYsOSw5YzAuMiwwLjIsMC43LDAuMywxLDBjMC4yLTAuMiwwLjItMC43LDAtMC45QzkuOCw4LDkuOCw3LjksOS43LDcuOUM5LjEsNy4zLDguMyw3LjEsNy41LDd6IE0yOS42LDEzLjljMC4zLDAsMC43LTAuMSwxLTAuMWMwLjYtMC4xLDEtMC40LDEuMy0xYzAuMi0wLjMsMC4yLTAuNywwLjItMWMwLTAuNS0wLjItMC45LTAuNi0xLjJjLTAuNC0wLjMtMC44LTAuNi0xLjItMC44Yy0wLjItMC4yLTAuNS0wLjMtMC43LTAuNWMtMC4zLTAuMi0wLjItMC42LDAuMS0wLjhjMC4zLTAuMiwwLjctMC4yLDEuMS0wLjFjMC40LDAuMSwwLjcsMC4yLDEsMC40YzAuMiwwLjEsMC4yLDAsMC4yLTAuMmMwLTAuMywwLTAuNiwwLTAuOGMwLTAuMi0wLjEtMC4yLTAuMi0wLjNjLTAuNC0wLjEtMC43LTAuMi0xLjEtMC4yYy0wLjYsMC0xLjIsMC0xLjcsMC4yYy0wLjQsMC4yLTAuNywwLjQtMC45LDAuOGMtMC4yLDAuMy0wLjIsMC42LTAuMiwxYzAsMC42LDAuMywxLjEsMC44LDEuNWMwLjUsMC40LDEsMC43LDEuNSwxYzAuMiwwLjEsMC4zLDAuMywwLjMsMC42YzAsMC4zLTAuMiwwLjUtMC41LDAuNmMtMC41LDAuMS0xLDAuMS0xLjQtMC4xYy0wLjMtMC4xLTAuNS0wLjItMC43LTAuM2MtMC4yLTAuMS0wLjMsMC0wLjMsMC4xYzAsMC4yLDAsMC41LDAsMC43YzAsMC4xLDAuMSwwLjIsMC4yLDAuM2MwLjEsMC4xLDAuMiwwLjEsMC4zLDAuMUMyOC42LDEzLjgsMjkuMSwxMy45LDI5LjYsMTMuOXogTTI0LDguM2MwLDAuMSwwLDAuMSwwLDAuMmMwLDEuNywwLDMuNCwwLDVjMCwwLjIsMCwwLjIsMC4yLDAuMmMwLjQsMCwwLjgsMCwxLjIsMGMwLjIsMCwwLjIsMCwwLjItMC4yYzAtMS43LDAtMy40LDAtNWMwLTAuMSwwLTAuMSwwLTAuMmMwLjEsMCwwLjEsMCwwLjIsMGMwLjUsMCwxLjEsMCwxLjYsMGMwLjIsMCwwLjIsMCwwLjItMC4yYzAtMC4zLDAtMC41LDAtMC44YzAtMC4xLTAuMS0wLjItMC4yLTAuMmMwLDAtMC4xLDAtMC4xLDBjLTEuNiwwLTMuMywwLTQuOSwwYzAsMC0wLjEsMC0wLjEsMGMtMC4xLDAtMC4yLDAuMS0wLjIsMC4yYzAsMC4zLDAsMC41LDAsMC44YzAsMC4xLDAuMSwwLjIsMC4yLDAuMmMwLjUsMCwxLjEsMCwxLjYsMEMyMy45LDguMywyNCw4LjMsMjQsOC4zeiBNOCwxMS4yYzAuNiwwLDEuMSwwLDEuNywwYzAuMywwLDAuNC0wLjEsMC42LTAuM2MwLjItMC41LTAuMS0xLTAuNi0xYy0xLjEsMC0yLjIsMC0zLjMsMGMtMC40LDAtMC43LDAuMi0wLjcsMC42YzAsMC41LDAuMywwLjcsMC42LDAuN0M2LjgsMTEuMiw3LjQsMTEuMiw4LDExLjJ6Ii8+PC9zdmc+); } -.bg-giropay { - background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfNF8iIGNsYXNzPSJzdDIwIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxnPjxwYXRoIGlkPSJfOTIxODYxODRfMV8iIGNsYXNzPSJzdDAiIGQ9Ik0zLjgsNi44djguNWMwLDAuOCwwLjcsMS41LDEuNSwxLjVoMTMuOVY1LjJINS4zQzQuNSw1LjIsMy44LDUuOSwzLjgsNi44TDMuOCw2Ljh6IE0yMi44LDExYzAsMC41LTAuMywwLjktMC43LDAuOWMtMC40LDAtMC43LTAuNC0wLjctMC45YzAtMC41LDAuMy0wLjksMC43LTAuOUMyMi42LDEwLjEsMjIuOCwxMC41LDIyLjgsMTF6IE0yMC4yLDE0LjFoMS4ydi0xLjhoMGMwLjIsMC40LDAuNywwLjYsMS4xLDAuNmMxLDAsMS42LTAuOCwxLjYtMS44YzAtMC44LTAuNS0xLjctMS41LTEuN2MtMC41LDAtMSwwLjItMS4zLDAuN2gwVjkuM2gtMS4xVjE0LjF6IE0yNS43LDExLjZjMC0wLjMsMC4zLTAuNCwwLjctMC40YzAuMiwwLDAuMywwLDAuNSwwYzAsMC40LTAuMywwLjgtMC43LDAuOEMyNS45LDEyLDI1LjcsMTEuOSwyNS43LDExLjZ6IE0yOCwxMi43QzI4LDEyLjQsMjgsMTIuMiwyOCwxMS45di0xLjNjMC0xLTAuNy0xLjQtMS42LTEuNGMtMC41LDAtMC45LDAuMS0xLjQsMC4ybDAsMC44YzAuMy0wLjIsMC43LTAuMywxLjEtMC4zYzAuNCwwLDAuOCwwLjEsMC44LDAuNmMtMC4xLDAtMC40LDAtMC41LDBjLTAuNiwwLTEuOCwwLjEtMS44LDEuMmMwLDAuNywwLjYsMS4xLDEuMywxLjFjMC41LDAsMC44LTAuMiwxLjEtMC42aDBjMCwwLjIsMCwwLjQsMCwwLjVMMjgsMTIuN0wyOCwxMi43eiBNMjguNSwxNC4xYzAuMiwwLjEsMC41LDAuMSwwLjcsMC4xYzEuMSwwLDEuMy0wLjgsMS43LTEuN2wxLjItMy4ySDMxbC0wLjcsMi4yaDBsLTAuNy0yLjJoLTEuM2wxLjQsMy41Yy0wLjEsMC4zLTAuMywwLjUtMC42LDAuNWMtMC4yLDAtMC4zLDAtMC41LTAuMUwyOC41LDE0LjF6Ii8+PHBhdGggaWQ9Il80NzMwMzAzMl8xXyIgY2xhc3M9InN0MzMiIGQ9Ik02LjcsMTFjMC0wLjUsMC4yLTAuOCwwLjctMC44YzAuNSwwLDAuNywwLjQsMC43LDAuOGMwLDAuNS0wLjMsMC45LTAuNywwLjlDNywxMS44LDYuNywxMS41LDYuNywxMXogTTkuMiw5LjNIOC4ydjAuNmgwQzcuOSw5LjUsNy41LDkuMiw3LDkuMkM1LjksOS4yLDUuNSwxMCw1LjUsMTFjMCwxLDAuNiwxLjcsMS41LDEuN2MwLjUsMCwwLjktMC4yLDEuMS0wLjZoMHYwLjJjMCwwLjctMC40LDEtMSwxYy0wLjUsMC0wLjgtMC4xLTEuMS0wLjNsLTAuMSwwLjljMC4zLDAuMSwwLjcsMC4yLDEuMywwLjJjMS40LDAsMi0wLjUsMi0xLjhWOS4zTDkuMiw5LjN6IE0xMS4yLDcuOUgxMHYwLjloMS4yTDExLjIsNy45TDExLjIsNy45eiBNMTAsMTIuN2gxLjJWOS4zSDEwVjEyLjdMMTAsMTIuN3ogTTE0LjUsOS4zYy0wLjEsMC0wLjMsMC0wLjQsMGMtMC41LDAtMC44LDAuMy0xLDAuN2gwVjkuM0gxMnYzLjRoMS4ydi0xLjRjMC0wLjcsMC4zLTEuMSwwLjktMS4xYzAuMSwwLDAuMywwLDAuNCwwTDE0LjUsOS4zeiBNMTYuNSwxMS45Yy0wLjUsMC0wLjgtMC40LTAuOC0xYzAtMC41LDAuMi0xLDAuOC0xYzAuNSwwLDAuOCwwLjQsMC44LDFDMTcuMywxMS41LDE3LDExLjksMTYuNSwxMS45eiBNMTYuNSwxMi44YzEuMSwwLDItMC43LDItMS44YzAtMS4xLTAuOS0xLjgtMi0xLjhjLTEuMSwwLTIsMC43LTIsMS44QzE0LjUsMTIuMSwxNS40LDEyLjgsMTYuNSwxMi44eiIvPjwvZz48L3N2Zz4=); -} - .bg-gpay { background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfN18iIGNsYXNzPSJzdDIzIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxnIGlkPSJHUGF5LUxpZ2h0LXRoZW1lZC1idXR0b25zIj48ZyBpZD0iR1BBWS0tLVNWR3MiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xODUuMDAwMDAwLCAtNDAwLjAwMDAwMCkiPjxnIGlkPSJHUGF5LUJyYW5kLU1hcmsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE4NS4wMDAwMDAsIDQwMC4wMDAwMDApIj48ZyBpZD0iR1BheSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4yNjE0NzQsIDAuMjYxNDc0KSI+PGcgaWQ9IlBheSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTcuNjE1MDY5LCAwLjgyNTcwNikiPjxwYXRoIGlkPSJGaWxsLTEiIGNsYXNzPSJzdDAiIGQ9Ik0tMC42LDcuM3YyLjZIMWMwLjQsMCwwLjctMC4xLDAuOS0wLjRjMC4zLTAuMywwLjQtMC42LDAuNC0wLjljMC0wLjMtMC4xLTAuNi0wLjQtMC45QzEuNyw3LjQsMS40LDcuMywxLDcuM0wtMC42LDcuM0wtMC42LDcuM3ogTS0wLjYsMTAuOHYzaC0xVjYuNEgxYzAuNiwwLDEuMiwwLjIsMS42LDAuNmMwLjUsMC40LDAuNywxLDAuNywxLjZjMCwwLjYtMC4yLDEuMi0wLjcsMS42Yy0wLjQsMC40LTEsMC42LTEuNiwwLjZMLTAuNiwxMC44TC0wLjYsMTAuOHoiLz48cGF0aCBpZD0iRmlsbC0zIiBjbGFzcz0ic3QwIiBkPSJNNC4zLDEyLjNjMCwwLjIsMC4xLDAuNSwwLjMsMC42YzAuMiwwLjIsMC41LDAuMiwwLjcsMC4yYzAuNCwwLDAuOC0wLjEsMS4xLTAuNGMwLjMtMC4zLDAuNS0wLjYsMC41LTEuMWMtMC4zLTAuMi0wLjctMC40LTEuMi0wLjRjLTAuNCwwLTAuNywwLjEtMSwwLjNDNC40LDExLjcsNC4zLDEyLDQuMywxMi4zIE01LjUsOC41YzAuNywwLDEuMywwLjIsMS43LDAuNmMwLjQsMC40LDAuNiwwLjksMC42LDEuNnYzLjFINi45di0wLjdoMEM2LjUsMTMuNyw2LDE0LDUuMywxNGMtMC42LDAtMS0wLjItMS40LTAuNWMtMC40LTAuMy0wLjYtMC43LTAuNi0xLjJjMC0wLjUsMC4yLTAuOSwwLjYtMS4zYzAuNC0wLjMsMC45LTAuNSwxLjYtMC41YzAuNiwwLDEsMC4xLDEuNCwwLjN2LTAuMmMwLTAuMy0wLjEtMC42LTAuNC0wLjhDNi4zLDkuNSw2LDkuNCw1LjYsOS40Yy0wLjUsMC0xLDAuMi0xLjMsMC43TDMuNSw5LjVDMy45LDguOSw0LjYsOC41LDUuNSw4LjUiLz48ZyBpZD0iR3JvdXAtNyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTUuMDg0OTIzLCAzLjc1OTQ0NykiPjxwb2x5Z29uIGlkPSJGaWxsLTUiIGNsYXNzPSJzdDAiIHBvaW50cz0iLTIsNSAtNS4yLDEyLjMgLTYuMiwxMi4zIC01LDkuNyAtNy4xLDUgLTYuMSw1IC00LjUsOC42IC00LjUsOC42IC0zLDUgIi8+PC9nPjwvZz48ZyBpZD0iRyI+PHBhdGggaWQ9IkZpbGwtOCIgY2xhc3M9InN0MCIgZD0iTTEzLjIsMTFjMC0wLjMsMC0wLjYtMC4xLTAuOWgtNHYxLjZoMi4zYy0wLjEsMC41LTAuNCwxLTAuOSwxLjN2MS4xaDEuNEMxMi43LDEzLjQsMTMuMiwxMi4zLDEzLjIsMTEiLz48cGF0aCBpZD0iRmlsbC0xMCIgY2xhc3M9InN0MCIgZD0iTTkuMSwxNS4yYzEuMiwwLDIuMS0wLjQsMi44LTFMMTAuNSwxM2MtMC40LDAuMy0wLjksMC40LTEuNSwwLjRjLTEuMSwwLTIuMS0wLjgtMi40LTEuOEg1LjJ2MS4xQzUuOSwxNC4yLDcuNCwxNS4yLDkuMSwxNS4yIi8+PHBhdGggaWQ9IkZpbGwtMTIiIGNsYXNzPSJzdDAiIGQ9Ik02LjYsMTEuN2MtMC4xLTAuMy0wLjEtMC41LTAuMS0wLjhjMC0wLjMsMC0wLjYsMC4xLTAuOFY5SDUuMmMtMC4zLDAuNi0wLjUsMS4yLTAuNSwxLjljMCwwLjcsMC4yLDEuMywwLjUsMS45TDYuNiwxMS43eiIvPjxwYXRoIGlkPSJGaWxsLTE0IiBjbGFzcz0ic3QwIiBkPSJNOS4xLDguM2MwLjYsMCwxLjIsMC4yLDEuNiwwLjZ2MGwxLjItMS4yQzExLjIsNywxMC4yLDYuNiw5LjEsNi42Yy0xLjcsMC0zLjEsMS0zLjgsMi40bDEuNCwxLjFDNyw5LDcuOSw4LjMsOS4xLDguMyIvPjwvZz48L2c+PC9nPjwvZz48L2c+PC9zdmc+); } diff --git a/view/frontend/web/css/apm/apm.min.css b/view/frontend/web/css/apm/apm.min.css index 6d6feff2..1b3c3a57 100644 --- a/view/frontend/web/css/apm/apm.min.css +++ b/view/frontend/web/css/apm/apm.min.css @@ -13,4 +13,4 @@ * @link https://docs.checkout.com/ */ -.alternative-selector input{margin:0;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.alternative-selector input:active+label div.alternative-icon{opacity:.9}.alternative-selector input:checked+label div.alternative-icon{-webkit-filter:none;-moz-filter:none;filter:none}.alternative-selector label:hover *{-webkit-filter:brightness(1.2) grayscale(.5) opacity(.9);-moz-filter:brightness(1.2) grayscale(.5) opacity(.9);filter:brightness(1.2) grayscale(.5) opacity(.9)}.alternative-icon{display:inline-block;width:4em;height:3em;-webkit-transition:all .1s ease-in;-moz-transition:all .1s ease-in;transition:all .1s ease-in;-webkit-filter:brightness(1) grayscale(.8) opacity(.7);-moz-filter:brightness(1) grayscale(.8) opacity(.7);filter:brightness(1) grayscale(.8) opacity(.7)}.alternative-selector h2{display:inline-block;margin:0 0 0 10px;vertical-align:middle}div.alternative-selector label{cursor:pointer}div.alternative-selector>div{margin-bottom:10px}div.alternative-selector>div:last-child{margin-bottom:0}div.cko-alternative-form{padding-left:2em}#apm-container{margin-bottom:20px}#apm-container div[data-role=collapsible]{border-bottom:1px solid #ccc;cursor:pointer;padding:15px}#apm-container div[aria-selected=true],#apm-container div[data-role=collapsible]:focus,#apm-container div[data-role=collapsible]:hover{background-color:#f1f1f1}#apm-container div.cko-apm:last-child{border-bottom:none!important}#apm-container div[data-role=trigger]{cursor:pointer}#apm-container div[data-role=content]{padding:1rem 2rem}.cko-apm.paypal{display:block!important}.bg-apm{background-repeat:no-repeat;background-position:center center;background-size:contain;vertical-align:middle;display:inline-block;width:45px;height:30px;margin-right:10px}.bg-alipay{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfM18iIGNsYXNzPSJzdDE3IiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxwYXRoIGNsYXNzPSJzdDE4IiBkPSJNMjAuMiwxMi40YzAuNy0xLjMsMS4zLTIuNiwxLjctNGgtNFY3LjFoNVY2LjJoLTVWNGgtMi4zdjIuMmgtNXYwLjhoNXYxLjRoLTQuMnYwLjdoOC4xYy0wLjMsMC45LTAuNywxLjgtMS4yLDIuN2MtMS45LTAuNi0zLjgtMS01LjgtMS4xYy0zLjksMC00LjcsMS45LTQuNSwzLjZjMC4xLDEuNCwxLjIsMy40LDQuNCwzLjRjMi43LTAuMSw1LjItMS40LDYuOC0zLjZjMi44LDEuMiw1LjcsMi44LDcuOCwzLjl2LTMuM0MyNC44LDE0LDIyLjUsMTMuMiwyMC4yLDEyLjR6IE0xMiwxNi41Yy0yLjcsMC0zLjEtMS41LTMuMi0yLjRjMC0wLjgsMC41LTIuMiwzLjYtMi4yYzEuNywwLjIsMy40LDAuNyw1LDEuNEMxNi4yLDE0LjgsMTQuMywxNi41LDEyLDE2LjVMMTIsMTYuNXoiLz48L3N2Zz4=)}.bg-amex{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU1XzJfIiBjbGFzcz0ic3QyIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMywxMmgyLjd2MC42aC0xLjl2MC42aDEuOHYwLjZoLTEuOHYwLjZoMS45VjE1SDIzVjEyeiBNMzAuOSwxMy4yYzEsMCwxLjEsMC41LDEuMSwxYzAsMC41LTAuNSwwLjktMSwwLjljMCwwLDAsMCwwLDBoLTEuN3YtMC42aDEuM2MwLjIsMCwwLjYsMCwwLjYtMC4zYzAtMC4xLTAuMS0wLjItMC4zLTAuMmMtMC4xLDAtMC41LDAtMC42LDBjLTAuOSwwLTEuMS0wLjQtMS4xLTAuOWMwLTAuNSwwLjQtMC45LDAuOS0wLjljMCwwLDAuMSwwLDAuMSwwaDEuN3YwLjZoLTEuM2MtMC4zLDAtMC42LDAtMC42LDAuM2MwLDAuMiwwLjIsMC4yLDAuMywwLjJDMzAuNCwxMy4xLDMwLjgsMTMuMiwzMC45LDEzLjJMMzAuOSwxMy4yeiBNMjcuOCwxMy4yYzEsMCwxLjEsMC41LDEuMSwxYzAsMC41LTAuNSwwLjktMSwwLjljMCwwLDAsMCwwLDBoLTEuN3YtMC42aDEuM2MwLjIsMCwwLjYsMCwwLjYtMC4zYzAtMC4xLTAuMS0wLjItMC4zLTAuMmMtMC4xLDAtMC41LDAtMC42LDBjLTAuOSwwLTEuMS0wLjQtMS4xLTAuOWMwLTAuNSwwLjQtMC45LDAuOS0wLjljMCwwLDAuMSwwLDAuMSwwaDEuN3YwLjZoLTEuM2MtMC4zLDAtMC42LDAtMC42LDAuM2MwLDAuMiwwLjIsMC4yLDAuMywwLjJDMjcuMywxMy4xLDI3LjcsMTMuMiwyNy44LDEzLjJMMjcuOCwxMy4yeiBNMTgsMTJoLTIuOWwtMC45LDAuOUwxMy4zLDEySDEwdjNoMy4xbDEtMWwxLDFoMS42di0xaDEuMWMwLjUsMC4xLDEuMS0wLjIsMS4yLTAuN2MwLTAuMSwwLTAuMiwwLTAuM2MwLTAuNS0wLjQtMC45LTAuOC0wLjlDMTguMSwxMiwxOC4xLDEyLDE4LDEyeiBNMTIuOCwxNC40aC0xLjl2LTAuNmgxLjh2LTAuNmgtMS44di0wLjZoMmwwLjgsMC44TDEyLjgsMTQuNHogTTE1LjksMTQuN2wtMS4yLTEuMmwxLjItMS4yVjE0Ljd6IE0xNy44LDEzLjRoLTF2LTAuN2gxYzAuMiwwLDAuNCwwLjEsMC40LDAuM2MwLDAuMi0wLjEsMC40LTAuMywwLjRDMTcuOSwxMy40LDE3LjgsMTMuNCwxNy44LDEzLjRMMTcuOCwxMy40eiBNMjIsMTMuNmMwLjQtMC4xLDAuNi0wLjUsMC42LTAuOGMwLTAuNS0wLjQtMC44LTAuOS0wLjhjMCwwLTAuMSwwLTAuMSwwaC0yLjF2M2gwLjh2LTEuMWgxLjFjMC4yLDAsMC40LDAuMiwwLjQsMC41YzAsMCwwLDAsMCwwbDAsMC41aDAuOGwwLTAuNmMwLjEtMC4zLTAuMS0wLjYtMC40LTAuN0MyMi4xLDEzLjYsMjIuMSwxMy42LDIyLDEzLjZMMjIsMTMuNnogTTIxLjMsMTMuM2gtMXYtMC43aDFjMC4yLDAsMC40LDAuMSwwLjQsMC4zYzAsMCwwLDAsMCwwQzIxLjgsMTMuMiwyMS42LDEzLjMsMjEuMywxMy4zTDIxLjMsMTMuM3ogTTIwLjksMTFWOGgtMC44djNIMjAuOXogTTEzLjMsOEgxNnYwLjZoLTEuOXYwLjZIMTZ2MC42aC0xLjh2MC42SDE2VjExaC0yLjdWOHogTTE5LjEsOS42YzAuNC0wLjEsMC42LTAuNSwwLjYtMC44YzAtMC41LTAuNC0wLjgtMC45LTAuOGMwLDAtMC4xLDAtMC4xLDBoLTIuMnYzaDAuOFY5LjloMS4xYzAuMiwwLDAuNCwwLjIsMC40LDAuNWMwLDAsMCwwLDAsMGwwLDAuNmgwLjhsMC0wLjZjMC4xLTAuMy0wLjEtMC42LTAuNC0wLjdDMTkuMiw5LjYsMTkuMSw5LjYsMTkuMSw5LjZMMTkuMSw5LjZ6IE0xOC40LDkuM2gtMVY4LjZoMWMwLjIsMCwwLjQsMC4xLDAuNSwwLjNjMCwwLDAsMCwwLDBDMTguOCw5LjIsMTguNyw5LjMsMTguNCw5LjNMMTguNCw5LjN6IE0xMS40LDhsLTEsMmwtMS0ySDh2Mi45TDYuNiw4SDUuNUw0LDExaDAuOWwwLjMtMC43aDEuN0w3LjIsMTFoMS43VjguOEwxMCwxMWgwLjhsMS4xLTIuMlYxMWgwLjhWOEgxMS40TDExLjQsOHogTTUuNSw5LjdsMC41LTFsMC41LDFINS41TDUuNSw5Ljd6IE0yOS41LDh2Mi4xTDI4LjEsOGgtMS4ydjIuOEwyNS41LDhoLTEuMWwtMS4xLDIuM2MwLDAtMC41LDAtMC41LDBjLTAuMywwLTAuNi0wLjQtMC41LTAuN2MwLDAsMCwwLDAsMFY5LjRjMC0wLjcsMC40LTAuOCwxLTAuOGgwLjVWOGgtMS4xYy0wLjgsMC4xLTEuNCwwLjktMS4yLDEuOGMwLjEsMC43LDAuNiwxLjIsMS4zLDEuMmgxLjFsMC4zLTAuN2gxLjdsMC4zLDAuN2gxLjZWOC44bDEuNSwyLjJoMS4xVjhIMjkuNUwyOS41LDh6IE0yNC40LDkuN2wwLjUtMWwwLjUsMUgyNC40TDI0LjQsOS43eiIvPjwvc3ZnPg==)}.bg-applepay{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5XzFfIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxwYXRoIGlkPSJBcHBsZV8xXyIgY2xhc3M9InN0MCIgZD0iTTExLjcsMTFjMCwwLjgsMC41LDEuNiwxLjMsMS45Yy0wLjIsMC41LTAuNCwwLjktMC43LDEuM2MtMC4zLDAuNi0wLjgsMS0xLjUsMS4xYy0wLjcsMC0wLjktMC40LTEuNi0wLjRzLTEsMC40LTEuNiwwLjRjLTAuNy0wLjEtMS4yLTAuNi0xLjUtMS4yQzUuMiwxMyw0LjUsMTAuOSw1LjQsOS41YzAuNC0wLjcsMS4yLTEuMiwyLTEuMkM4LDguNCw4LjUsOC41LDkuMSw4LjdjMC42LTAuMiwxLjItMC40LDEuOS0wLjRjMC43LDAsMS40LDAuNCwxLjgsMC45QzEyLjEsOS42LDExLjcsMTAuMiwxMS43LDExIE0xMC40LDcuNUMxMC44LDcuMSwxMSw2LjUsMTAuOSw2Yy0wLjYsMC0xLjEsMC4zLTEuNCwwLjdDOS4xLDcuMSw4LjksNy42LDksOC4yQzkuNSw4LjIsMTAuMSw3LjksMTAuNCw3LjUiLz48cGF0aCBpZD0iUGF5XzFfIiBjbGFzcz0ic3QwIiBkPSJNMTUuNCw2LjhjMC4zLDAsMC42LTAuMSwwLjgtMC4xYzAuMywwLDAuNy0wLjEsMSwwYzAuNSwwLDAuOSwwLjEsMS40LDAuMmMwLjMsMC4xLDAuNywwLjMsMC45LDAuNWMwLjIsMC4yLDAuNCwwLjQsMC41LDAuN2MwLjEsMC4zLDAuMiwwLjYsMC4yLDFjMCwwLjQtMC4xLDAuOC0wLjIsMS4xYy0wLjIsMC4zLTAuNCwwLjYtMC43LDAuOGMtMC4zLDAuMi0wLjYsMC40LTEsMC41Yy0wLjQsMC4xLTAuOCwwLjItMS4zLDAuMmMtMC4zLDAtMC43LDAtMS0wLjF2My42aC0wLjZWNi44TDE1LjQsNi44TDE1LjQsNi44eiBNMTYsMTEuMWMwLjIsMCwwLjMsMC4xLDAuNSwwLjFjMC4yLDAsMC40LDAsMC42LDBjMC43LDAsMS4zLTAuMSwxLjgtMC41YzAuNC0wLjQsMC43LTEsMC42LTEuNmMwLTAuMy0wLjEtMC42LTAuMi0wLjljLTAuMS0wLjItMC4zLTAuNC0wLjUtMC42Yy0wLjItMC4yLTAuNS0wLjMtMC43LTAuNGMtMC4zLTAuMS0wLjYtMC4xLTEtMC4xYy0wLjIsMC0wLjUsMC0wLjcsMGMtMC4yLDAtMC40LDAtMC41LDAuMUwxNiwxMS4xTDE2LDExLjFMMTYsMTEuMXogTTI1LjEsMTMuOGMwLDAuMiwwLDAuNSwwLDAuN2MwLDAuMiwwLDAuNSwwLjEsMC43aC0wLjZsLTAuMS0wLjloMGMtMC4xLDAuMS0wLjIsMC4yLTAuMywwLjRjLTAuMSwwLjEtMC4zLDAuMi0wLjQsMC4zYy0wLjIsMC4xLTAuNCwwLjItMC42LDAuMmMtMC4yLDAuMS0wLjQsMC4xLTAuNywwLjFjLTAuMywwLTAuNSwwLTAuOC0wLjFjLTAuMi0wLjEtMC40LTAuMi0wLjYtMC40Yy0wLjEtMC4yLTAuMy0wLjMtMC4zLTAuNWMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjZjMC0wLjcsMC4zLTEuMywwLjktMS43YzAuOS0wLjQsMS45LTAuNiwyLjgtMC42di0wLjJjMC0wLjIsMC0wLjQsMC0wLjVjMC0wLjItMC4xLTAuNC0wLjItMC42QzI0LjEsMTAsMjQsOS44LDIzLjgsOS43Yy0wLjMtMC4xLTAuNi0wLjItMC45LTAuMmMtMC4zLDAtMC41LDAtMC44LDAuMWMtMC4zLDAuMS0wLjUsMC4yLTAuNywwLjNsLTAuMi0wLjRjMC4zLTAuMiwwLjYtMC4zLDAuOS0wLjRDMjIuMyw5LjEsMjIuNyw5LDIzLDljMC40LDAsMC43LDAuMSwxLjEsMC4yYzAuMywwLjEsMC41LDAuMywwLjYsMC42YzAuMiwwLjIsMC4zLDAuNSwwLjMsMC44YzAuMSwwLjMsMC4xLDAuNiwwLjEsMC44TDI1LjEsMTMuOEwyNS4xLDEzLjhMMjUuMSwxMy44eiBNMjQuNSwxMmMtMC4zLDAtMC43LDAtMSwwYy0wLjMsMC0wLjcsMC4xLTEsMC4yYy0wLjMsMC4xLTAuNiwwLjMtMC44LDAuNWMtMC4yLDAuMi0wLjMsMC42LTAuMywwLjljMCwwLjQsMC4xLDAuNywwLjQsMC45YzAuMiwwLjIsMC41LDAuMywwLjksMC4zYzAuMiwwLDAuNSwwLDAuNy0wLjFjMC4yLTAuMSwwLjQtMC4yLDAuNS0wLjNjMC4xLTAuMSwwLjMtMC4yLDAuNC0wLjRjMC4xLTAuMSwwLjItMC4zLDAuMi0wLjRjMC0wLjEsMC4xLTAuMiwwLjEtMC40TDI0LjUsMTJMMjQuNSwxMkwyNC41LDEyeiBNMjYuMyw5LjJsMS42LDMuOWMwLjEsMC4yLDAuMiwwLjQsMC4yLDAuN3MwLjEsMC40LDAuMiwwLjZoMGMwLjEtMC4yLDAuMS0wLjQsMC4yLTAuNnMwLjItMC41LDAuMy0wLjdsMS41LTMuOUgzMWwtMS44LDQuNGMtMC4yLDAuNC0wLjMsMC45LTAuNSwxLjNjLTAuMSwwLjQtMC4zLDAuNy0wLjUsMWMtMC4xLDAuMy0wLjMsMC42LTAuNSwwLjhjLTAuMiwwLjItMC40LDAuNC0wLjYsMC42Yy0wLjIsMC4yLTAuNCwwLjMtMC43LDAuNUMyNi4yLDE3LjksMjYuMSwxOCwyNiwxOGwtMC4yLTAuNWMwLjItMC4xLDAuNC0wLjIsMC41LTAuM2MwLjItMC4xLDAuNC0wLjMsMC42LTAuNGMwLjItMC4yLDAuNC0wLjQsMC41LTAuNmMwLjItMC4zLDAuNC0wLjYsMC41LTAuOWMwLTAuMSwwLjEtMC4yLDAuMS0wLjNjMC0wLjEsMC0wLjItMC4xLTAuM2wtMi4zLTUuNkwyNi4zLDkuMkwyNi4zLDkuMnoiLz48L3N2Zz4=)}.bg-astro{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU2X2NvcHlfMl8yXyIgY2xhc3M9InN0MjciIGQ9Ik0zLDBoMzBjMS43LDAsMywxLjMsMywzdjE2YzAsMS43LTEuMywzLTMsM0gzYy0xLjcsMC0zLTEuMy0zLTNWM0MwLDEuMywxLjMsMCwzLDB6Ii8+PGc+PHBhdGggY2xhc3M9InN0MCIgZD0iTTUuOSwxNC44YzAuMS0wLjIsMC4yLTAuNCwwLjItMC43QzYuOCwxMiw3LjYsOS44LDguMyw3LjZjMC4xLTAuMiwwLjItMC40LDAuMi0wLjdjMC0wLjEsMC0wLjEsMC4xLTAuMWMwLjQsMCwwLjcsMCwxLjEsMGMwLjEsMCwwLjEsMCwwLjEsMC4xYzAuNCwxLjMsMC45LDIuNiwxLjMsMy45YzAuNCwxLjMsMC45LDIuNiwxLjMsMy45YzAsMCwwLDAuMSwwLDAuMWMtMC40LDAtMC43LDAtMSwwYzAsMC0wLjEsMC0wLjEtMC4xYy0wLjItMC41LTAuMy0xLTAuNS0xLjVjLTAuMS0wLjMtMC4yLTAuNi0wLjMtMC45YzAtMC4xLDAtMC4xLTAuMS0wLjFjLTAuOSwwLTEuOCwwLTIuNywwYy0wLjEsMC0wLjEsMC0wLjEsMC4xQzcuNSwxMy4yLDcuMiwxNCw3LDE0LjhjMCwwLjEtMC4xLDAuMS0wLjEsMC4xQzYuNSwxNC45LDYuMiwxNC45LDUuOSwxNC44QzUuOSwxNC44LDUuOSwxNC44LDUuOSwxNC44eiBNOS4yLDcuOEM4LjksOS4xLDguNCwxMC4zLDgsMTEuNWMwLjgsMCwxLjYsMCwyLjQsMEMxMCwxMC4zLDkuNSw5LjEsOS4yLDcuOHoiLz48cGF0aCBkPSJNMTcuMyw1YzAuMSwwLDAuMywwLDAuNCwwLjFjMC43LDAuMSwxLjMsMC4zLDEuOSwwLjZjMS4xLDAuNSwyLjEsMS4yLDIuOSwyYzAsMCwwLDAsMC4xLDAuMWMtMC4xLDAtMC4yLDAtMC4zLDBjLTAuOC0wLjYtMS42LTEuMS0yLjYtMS41Yy0wLjctMC4zLTEuNS0wLjUtMi4yLTAuNWMtMS4yLTAuMS0yLjIsMC4yLTMuMywwLjhjLTAuNiwwLjQtMS4yLDAuOC0xLjcsMS4zQzEyLjUsOCwxMi4zLDgsMTIsOGMtMC40LDAtMC45LDAtMS4zLDBjMCwwLTAuMSwwLTAuMSwwYzAsMCwwLjEtMC4xLDAuMS0wLjFjMS4zLTEuNCwyLjgtMi4zLDQuNi0yLjdjMC40LTAuMSwwLjktMC4yLDEuNC0wLjJjMCwwLDAuMSwwLDAuMSwwQzE2LjksNSwxNy4xLDUsMTcuMyw1eiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yNS41LDEyYzAtMC43LDAuMi0xLjQsMC42LTJjMC41LTAuNiwxLjEtMC45LDEuOC0xYzAuNi0wLjEsMS4xLDAsMS42LDAuMmMwLjcsMC4zLDEuMSwwLjgsMS4zLDEuNWMwLjMsMC45LDAuMywxLjktMC4xLDIuN2MtMC40LDAuOS0xLjEsMS4zLTIsMS41Yy0wLjYsMC4xLTEuMiwwLTEuOC0wLjNjLTAuNy0wLjQtMS4xLTEtMS4zLTEuOEMyNS42LDEyLjYsMjUuNiwxMi4zLDI1LjUsMTJ6IE0zMC4xLDEyYzAtMC4yLTAuMS0wLjUtMC4xLTAuN2MtMC4xLTAuNC0wLjMtMC44LTAuNy0xLjFjLTAuNy0wLjYtMS44LTAuNC0yLjMsMC40Yy0wLjMsMC41LTAuNCwxLTAuNCwxLjVjMCwwLjUsMC4xLDEsMC40LDEuNGMwLjYsMSwxLjksMSwyLjYsMEMzMCwxMywzMC4xLDEyLjUsMzAuMSwxMnoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTYuNSwxMC4xQzE2LjMsMTAsMTYsOS45LDE1LjgsOS44Yy0wLjMtMC4xLTAuNi0wLjEtMC45LDBjLTAuMywwLjEtMC41LDAuMy0wLjUsMC42YzAsMC4zLDAuMSwwLjYsMC4zLDAuN2MwLjMsMC4yLDAuNSwwLjMsMC44LDAuNGMwLjMsMC4xLDAuNywwLjMsMSwwLjZjMC40LDAuMywwLjUsMC44LDAuNSwxLjNjLTAuMSwwLjgtMC42LDEuMy0xLjQsMS41Yy0wLjgsMC4yLTEuNSwwLjEtMi4yLTAuMmMtMC4xLDAtMC4xLTAuMS0wLjItMC4xYzAuMS0wLjMsMC4yLTAuNSwwLjItMC44YzAsMCwwLjEsMCwwLjEsMC4xYzAuNSwwLjIsMC45LDAuNCwxLjQsMC4zYzAuMywwLDAuNS0wLjEsMC43LTAuM2MwLjMtMC4zLDAuMy0wLjksMC0xLjJjLTAuMi0wLjItMC40LTAuMy0wLjctMC40Yy0wLjMtMC4xLTAuNy0wLjMtMS0wLjVjLTAuMy0wLjItMC41LTAuNS0wLjYtMC45Yy0wLjEtMC42LDAuMS0xLjMsMC43LTEuN0MxNC41LDkuMSwxNC45LDksMTUuMyw5YzAuNCwwLDAuOSwwLjEsMS4zLDAuM2MwLjEsMC4xLDAuMSwwLjEsMC4xLDAuMkMxNi42LDkuNywxNi42LDkuOSwxNi41LDEwLjF6Ii8+PHBhdGggY2xhc3M9InN0MCIgZD0iTTIxLDkuMWMwLDAuMywwLDAuNSwwLDAuOGMtMC41LDAtMSwwLTEuNSwwYzAsMCwwLDAsMCwwLjFjMCwxLjEsMCwyLjEsMCwzLjJjMCwwLjIsMCwwLjQsMC4xLDAuNWMwLjEsMC4zLDAuMywwLjQsMC42LDAuNGMwLjIsMCwwLjQsMCwwLjcsMGMwLDAuMiwwLDAuNCwwLDAuNWMwLDAuMiwwLDAuMi0wLjIsMC4zYy0wLjQsMC4xLTAuNywwLjEtMS4xLDBjLTAuNi0wLjEtMS0wLjUtMS4xLTEuMWMwLTAuMi0wLjEtMC41LTAuMS0wLjdjMC0xLDAtMi4xLDAtMy4xYzAsMCwwLTAuMSwwLTAuMWMtMC4zLDAtMC42LDAtMC45LDBjMC0wLjMsMC0wLjUsMC0wLjhjMC4zLDAsMC42LDAsMC45LDBjMC0wLjEsMC0wLjIsMC0wLjNjMC0wLjIsMC0wLjUsMC0wLjdjMCwwLDAtMC4xLDAtMC4xYzAuMy0wLjEsMC42LTAuMiwxLTAuM2MwLDAuNSwwLDAuOSwwLDEuNEMyMCw5LjEsMjAuNSw5LjEsMjEsOS4xeiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMi4yLDkuMWMwLjMsMCwwLjYsMCwwLjksMGMwLDAuNCwwLDAuOCwwLDEuMWMwLDAsMCwwLDAsMGMwLDAsMC0wLjEsMC0wLjFjMC4yLTAuNiwwLjYtMSwxLjItMS4xYzAuMiwwLDAuMywwLDAuNSwwQzI1LDksMjUsOSwyNSw5LjFjMCwwLjMsMCwwLjYsMCwwLjljMCwwLDAsMCwwLDBjLTAuMiwwLTAuNCwwLTAuNywwYy0wLjUsMC4xLTAuOCwwLjUtMSwwLjljLTAuMSwwLjMtMC4xLDAuNi0wLjEsMC45YzAsMSwwLDEuOSwwLDIuOWMwLDAsMCwwLjEsMCwwLjFjLTAuMywwLTAuNywwLTEuMSwwQzIyLjIsMTIuOSwyMi4yLDExLDIyLjIsOS4xeiIvPjwvZz48L3N2Zz4=)}.bg-boleto{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfMl8iIGQ9Ik0zLDBoMzBjMS43LDAsMywxLjMsMywzdjE2YzAsMS43LTEuMywzLTMsM0gzYy0xLjcsMC0zLTEuMy0zLTNWM0MwLDEuMywxLjMsMCwzLDB6Ii8+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzYxXzFfIiBjbGFzcz0ic3QwIiBkPSJNMTQsMTZWNmg0YzAuNywwLDEuMywwLjEsMS45LDAuM2MwLjUsMC4yLDAuOSwwLjUsMS4xLDAuOWMwLjMsMC40LDAuNCwwLjgsMC40LDEuM2MwLDAuNC0wLjEsMC44LTAuNCwxLjJjLTAuMywwLjQtMC43LDAuNy0xLjEsMC45YzAuNiwwLjEsMS4xLDAuNSwxLjUsMC45YzAuMywwLjQsMC41LDEsMC41LDEuNWMwLDAuNS0wLjEsMC45LTAuMywxLjNjLTAuMiwwLjQtMC40LDAuNy0wLjgsMC45Yy0wLjQsMC4yLTAuNywwLjQtMS4yLDAuNUMxOS4yLDE2LDE4LjYsMTYsMTgsMTZMMTQsMTZMMTQsMTZ6IE0xNS40LDEwLjJoMi4zYzAuNCwwLDAuOSwwLDEuMy0wLjFjMC4zLTAuMSwwLjYtMC4zLDAuOC0wLjVDMjAsOS4zLDIwLjEsOSwyMC4xLDguN2MwLTAuMy0wLjEtMC42LTAuMy0wLjljLTAuMi0wLjMtMC40LTAuNC0wLjctMC41Yy0wLjUtMC4xLTEuMS0wLjItMS42LTAuMWgtMi4xTDE1LjQsMTAuMkwxNS40LDEwLjJMMTUuNCwxMC4yeiBNMTUuNCwxNC44SDE4YzAuMywwLDAuNiwwLDEsMGMwLjMsMCwwLjYtMC4xLDAuOC0wLjNjMC4yLTAuMSwwLjQtMC4zLDAuNS0wLjZjMC4xLTAuMywwLjItMC41LDAuMi0wLjhjMC0wLjctMC41LTEuNC0xLjEtMS42Yy0wLjUtMC4xLTEtMC4yLTEuNS0wLjJoLTIuNFYxNC44TDE1LjQsMTQuOEwxNS40LDE0Ljh6Ii8+PC9zdmc+)}.bg-diners{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU0XzFfIiBjbGFzcz0ic3QxMiIgZD0iTTMsMGgzMGMxLjcsMCwzLDEuMywzLDN2MTZjMCwxLjctMS4zLDMtMywzSDNjLTEuNywwLTMtMS4zLTMtM1YzQzAsMS4zLDEuMywwLDMsMHoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTkuMSwxOGgtMi40Yy0zLjctMC4xLTYuNy0zLjItNi42LTYuOUM5LjgsNy40LDEyLjYsNC4yLDE2LjMsNGgyLjdjMy44LDAsNi45LDMuMiw2LjksN2MwLDAsMCwwLDAsMHYwLjFDMjUuOSwxNC45LDIyLjksMTcuOSwxOS4xLDE4eiBNMTYuOCw1LjJjLTMuMi0wLjEtNS44LDIuNC01LjksNS42Yy0wLjEsMy4yLDIuNCw1LjgsNS42LDUuOWMzLjIsMC4xLDUuOC0yLjQsNS45LTUuNmMwLTAuMSwwLTAuMSwwLTAuMkMyMi41LDcuOSwxOS45LDUuMywxNi44LDUuMkwxNi44LDUuMnogTTE3LjcsMTQuOVY3LjJjMi4xLDAuNiwzLjQsMi43LDIuOCw0LjhDMjAuMiwxMy40LDE5LjEsMTQuNSwxNy43LDE0LjlMMTcuNywxNC45eiBNMTUuOSwxNC45Yy0yLjEtMC42LTMuMy0yLjgtMi44LTQuOWMwLjMtMS40LDEuNC0yLjUsMi44LTIuOVYxNC45eiIvPjwvc3ZnPg==)}.bg-discover{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU2XzFfIiBjbGFzcz0ic3QxMSIgZD0iTTMsMGgzMGMxLjcsMCwzLDEuMywzLDN2MTZjMCwxLjctMS4zLDMtMywzSDNjLTEuNywwLTMtMS4zLTMtM1YzQzAsMS4zLDEuMywwLDMsMHoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjkuOSwxMS4zaC0wLjNWOS45aDAuM2MwLjQtMC4xLDAuNywwLjIsMC44LDAuNWMwLDAuMSwwLDAuMSwwLDAuMmMwLDAuNC0wLjMsMC43LTAuNiwwLjhDMzAsMTEuMywyOS45LDExLjMsMjkuOSwxMS4zTDI5LjksMTEuM3ogTTMxLjYsMTAuNWMwLTAuNy0wLjUtMS40LTEuMy0xLjRjLTAuMSwwLTAuMiwwLTAuMywwaC0xLjN2NC44aDAuOVYxMmgwLjFsMS4yLDEuOUgzMmwtMS40LTJDMzEuMiwxMS44LDMxLjcsMTEuMiwzMS42LDEwLjVMMzEuNiwxMC41TDMxLjYsMTAuNXogTTI1LjcsMTMuOWgyLjV2LTAuOGgtMS42di0xLjNoMS41VjExaC0xLjVWOS45aDEuNlY5LjFoLTIuNUwyNS43LDEzLjlMMjUuNywxMy45TDI1LjcsMTMuOXogTTIzLjEsMTIuM2wtMS4yLTMuMkgyMWwxLjksNC45aDAuNWwxLjktNC45aC0wLjlMMjMuMSwxMi4zTDIzLjEsMTIuM3ogTTEyLjcsMTEuNWMwLDEuMywxLDIuNCwyLjMsMi41YzAuNCwwLDAuOC0wLjEsMS4xLTAuM3YtMS4xYy0wLjIsMC4zLTAuNiwwLjUtMSwwLjVjLTAuOCwwLTEuNS0wLjYtMS41LTEuNWMwLDAsMCwwLDAsMHYtMC4xYzAtMC45LDAuNi0xLjYsMS40LTEuN2MwLjQsMCwwLjgsMC4yLDEuMSwwLjVWOS40Yy0wLjMtMC4yLTAuNy0wLjMtMS4xLTAuM2MtMS4zLTAuMS0yLjMsMC45LTIuNCwyLjJDMTIuNywxMS40LDEyLjcsMTEuNCwxMi43LDExLjVMMTIuNywxMS41TDEyLjcsMTEuNXogTTExLjEsMTAuOWMtMC41LTAuMi0wLjctMC4zLTAuNy0wLjZjMC0wLjMsMC4zLTAuNiwwLjYtMC41YzAsMCwwLDAsMCwwYzAuMywwLDAuNSwwLjIsMC43LDAuNGwwLjUtMC42QzExLjgsOS4yLDExLjQsOSwxMC45LDljLTAuNywwLTEuNCwwLjUtMS40LDEuM3YwLjFjMCwwLjYsMC40LDEuMiwxLjEsMS4zYzAuMiwwLjEsMC40LDAuMiwwLjYsMC4zYzAuMiwwLjEsMC4zLDAuMywwLjMsMC41YzAsMC40LTAuMywwLjctMC42LDAuN2gtMC4xYy0wLjQsMC0wLjgtMC4zLTAuOS0wLjZMOS4zLDEzYzAuMywwLjYsMC45LDAuOSwxLjUsMC45YzAuOCwwLDEuNS0wLjYsMS41LTEuNGMwLDAsMCwwLDAsMHYtMC4yQzEyLjQsMTEuNywxMi4xLDExLjQsMTEuMSwxMC45TDExLjEsMTAuOUwxMS4xLDEwLjl6IE04LjEsMTMuOWgwLjlWOS4xSDguMVYxMy45TDguMSwxMy45eiBNNi4zLDEyLjdDNiwxMyw1LjYsMTMuMSw1LjEsMTMuMUg0LjlWOS45aDAuM2MwLjQsMCwwLjksMC4xLDEuMiwwLjRjMC4zLDAuMywwLjUsMC43LDAuNSwxLjJDNi44LDExLjksNi42LDEyLjQsNi4zLDEyLjdMNi4zLDEyLjd6IE01LjMsOS4xSDR2NC44aDEuM2MwLjYsMCwxLjItMC4yLDEuNi0wLjVjMC41LTAuNSwwLjgtMS4xLDAuOC0xLjhjMC4xLTEuMy0wLjktMi4zLTIuMi0yLjRINS4zTDUuMyw5LjF6IE0xOC43LDljLTEuMywwLTIuNCwxLjEtMi40LDIuNWMwLDAsMCwwLDAsMGMwLDEuMywxLDIuNCwyLjQsMi41YzEuMywwLDIuNC0xLjEsMi40LTIuNGMwLDAsMCwwLDAsMEMyMS4yLDEwLjIsMjAuMSw5LjEsMTguNyw5TDE4LjcsOUwxOC43LDl6Ii8+PC9zdmc+)}.bg-enets{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU1XzNfIiBjbGFzcz0ic3QxNSIgZD0iTTMsMGgzMGMxLjcsMCwzLDEuMywzLDN2MTZjMCwxLjctMS4zLDMtMywzSDNjLTEuNywwLTMtMS4zLTMtM1YzQzAsMS4zLDEuMywwLDMsMHoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTUuNCwxMS44QzE1LjQsMTEuOCwxNS40LDExLjgsMTUuNCwxMS44Yy0wLjEtMC4xLTAuMS0wLjEtMC4yLTAuMmMtMC40LTAuOC0wLjgtMS42LTEuMi0yLjNjLTAuMy0wLjYtMC43LTEuMy0xLTEuOWMwLTAuMS0wLjEtMC4xLTAuMi0wLjFjLTAuNCwwLTAuOSwwLTEuMywwYy0wLjIsMC0wLjIsMC4xLTAuMiwwLjJjMCwyLjEsMCw0LjIsMCw2LjJjMCwwLjEsMC4xLDAuMiwwLjIsMC4yYzAuMywwLDAuNSwwLDAuOCwwYzAuMiwwLDAuMiwwLDAuMi0wLjJjMC0xLjQsMC0yLjgsMC00LjJjMC0wLjEsMC0wLjEsMC0wLjJjMCwwLjEsMC4xLDAuMSwwLjEsMC4yYzAuMywwLjYsMC42LDEuMSwwLjksMS43YzAuNSwwLjksMSwxLjgsMS40LDIuN2MwLDAuMSwwLjEsMC4xLDAuMiwwLjFjMC40LDAsMC45LDAsMS4zLDBjMC4xLDAsMC4yLDAsMC4yLTAuMmMwLTIuMSwwLTQuMiwwLTYuM2MwLTAuMiwwLTAuMi0wLjItMC4yYy0wLjIsMC0wLjUsMC0wLjcsMGMtMC4yLDAtMC4yLDAtMC4yLDAuMmMwLDEuNCwwLDIuOCwwLDQuMUMxNS40LDExLjYsMTUuNCwxMS43LDE1LjQsMTEuOHogTTE5LDguM0MxOSw4LjMsMTksOC4zLDE5LDguM2MwLjksMCwxLjYsMCwyLjQsMGMwLjEsMCwwLjIsMCwwLjItMC4yYzAtMC4zLDAtMC41LDAtMC44YzAtMC4yLDAtMC4yLTAuMi0wLjJjLTEuMiwwLTIuNSwwLTMuNywwYy0wLjIsMC0wLjIsMC4xLTAuMiwwLjJjMCwwLjMsMCwwLjUsMCwwLjhjMCwxLjgsMCwzLjYsMCw1LjRjMCwwLjIsMCwwLjIsMC4yLDAuMmMxLjMsMCwyLjcsMCw0LDBjMC4xLDAsMC4yLTAuMSwwLjItMC4yYzAtMC4zLDAtMC41LDAtMC44YzAtMC4yLDAtMC4yLTAuMi0wLjJjLTAuOCwwLTEuNiwwLTIuNCwwYy0wLjEsMC0wLjEsMC0wLjIsMGMwLTAuNiwwLTEuMSwwLTEuN2MwLjEsMCwwLjEsMCwwLjIsMGMwLjYsMCwxLjEsMCwxLjcsMGMwLjEsMCwwLjIsMCwwLjItMC4yYzAtMC4zLDAtMC41LDAtMC44YzAtMC4yLDAtMC4yLTAuMi0wLjJjLTAuNiwwLTEuMiwwLTEuNywwYy0wLjEsMC0wLjEsMC0wLjIsMEMxOSw5LjIsMTksOC44LDE5LDguM3ogTTcuNSw3Yy0wLjMsMC0wLjUsMC0wLjgsMC4xQzUuOSw3LjMsNS4zLDcuNyw0LjgsOC4zQzQuMSw5LjEsMy45LDEwLDQsMTFjMC4xLDAuOSwwLjYsMS43LDEuMywyLjJjMC44LDAuNiwxLjgsMC45LDIuOCwwLjdjMC43LTAuMSwxLjMtMC41LDEuOC0wLjljMC4zLTAuMywwLjMtMC43LDAtMC45Yy0wLjMtMC4zLTAuNy0wLjMtMC45LDBjLTAuNSwwLjUtMS4xLDAuNy0xLjgsMC42Yy0wLjQtMC4xLTAuOC0wLjItMS4yLTAuNWMtMC41LTAuNS0wLjgtMS4xLTAuNy0xLjhDNS40LDkuOCw1LjYsOS40LDUuOSw5QzYuNCw4LjUsNyw4LjMsNy43LDguNEM4LjIsOC40LDguNiw4LjYsOSw5YzAuMiwwLjIsMC43LDAuMywxLDBjMC4yLTAuMiwwLjItMC43LDAtMC45QzkuOCw4LDkuOCw3LjksOS43LDcuOUM5LjEsNy4zLDguMyw3LjEsNy41LDd6IE0yOS42LDEzLjljMC4zLDAsMC43LTAuMSwxLTAuMWMwLjYtMC4xLDEtMC40LDEuMy0xYzAuMi0wLjMsMC4yLTAuNywwLjItMWMwLTAuNS0wLjItMC45LTAuNi0xLjJjLTAuNC0wLjMtMC44LTAuNi0xLjItMC44Yy0wLjItMC4yLTAuNS0wLjMtMC43LTAuNWMtMC4zLTAuMi0wLjItMC42LDAuMS0wLjhjMC4zLTAuMiwwLjctMC4yLDEuMS0wLjFjMC40LDAuMSwwLjcsMC4yLDEsMC40YzAuMiwwLjEsMC4yLDAsMC4yLTAuMmMwLTAuMywwLTAuNiwwLTAuOGMwLTAuMi0wLjEtMC4yLTAuMi0wLjNjLTAuNC0wLjEtMC43LTAuMi0xLjEtMC4yYy0wLjYsMC0xLjIsMC0xLjcsMC4yYy0wLjQsMC4yLTAuNywwLjQtMC45LDAuOGMtMC4yLDAuMy0wLjIsMC42LTAuMiwxYzAsMC42LDAuMywxLjEsMC44LDEuNWMwLjUsMC40LDEsMC43LDEuNSwxYzAuMiwwLjEsMC4zLDAuMywwLjMsMC42YzAsMC4zLTAuMiwwLjUtMC41LDAuNmMtMC41LDAuMS0xLDAuMS0xLjQtMC4xYy0wLjMtMC4xLTAuNS0wLjItMC43LTAuM2MtMC4yLTAuMS0wLjMsMC0wLjMsMC4xYzAsMC4yLDAsMC41LDAsMC43YzAsMC4xLDAuMSwwLjIsMC4yLDAuM2MwLjEsMC4xLDAuMiwwLjEsMC4zLDAuMUMyOC42LDEzLjgsMjkuMSwxMy45LDI5LjYsMTMuOXogTTI0LDguM2MwLDAuMSwwLDAuMSwwLDAuMmMwLDEuNywwLDMuNCwwLDVjMCwwLjIsMCwwLjIsMC4yLDAuMmMwLjQsMCwwLjgsMCwxLjIsMGMwLjIsMCwwLjIsMCwwLjItMC4yYzAtMS43LDAtMy40LDAtNWMwLTAuMSwwLTAuMSwwLTAuMmMwLjEsMCwwLjEsMCwwLjIsMGMwLjUsMCwxLjEsMCwxLjYsMGMwLjIsMCwwLjIsMCwwLjItMC4yYzAtMC4zLDAtMC41LDAtMC44YzAtMC4xLTAuMS0wLjItMC4yLTAuMmMwLDAtMC4xLDAtMC4xLDBjLTEuNiwwLTMuMywwLTQuOSwwYzAsMC0wLjEsMC0wLjEsMGMtMC4xLDAtMC4yLDAuMS0wLjIsMC4yYzAsMC4zLDAsMC41LDAsMC44YzAsMC4xLDAuMSwwLjIsMC4yLDAuMmMwLjUsMCwxLjEsMCwxLjYsMEMyMy45LDguMywyNCw4LjMsMjQsOC4zeiBNOCwxMS4yYzAuNiwwLDEuMSwwLDEuNywwYzAuMywwLDAuNC0wLjEsMC42LTAuM2MwLjItMC41LTAuMS0xLTAuNi0xYy0xLjEsMC0yLjIsMC0zLjMsMGMtMC40LDAtMC43LDAuMi0wLjcsMC42YzAsMC41LDAuMywwLjcsMC42LDAuN0M2LjgsMTEuMiw3LjQsMTEuMiw4LDExLjJ6Ii8+PC9zdmc+)}.bg-giropay{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfNF8iIGNsYXNzPSJzdDIwIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxnPjxwYXRoIGlkPSJfOTIxODYxODRfMV8iIGNsYXNzPSJzdDAiIGQ9Ik0zLjgsNi44djguNWMwLDAuOCwwLjcsMS41LDEuNSwxLjVoMTMuOVY1LjJINS4zQzQuNSw1LjIsMy44LDUuOSwzLjgsNi44TDMuOCw2Ljh6IE0yMi44LDExYzAsMC41LTAuMywwLjktMC43LDAuOWMtMC40LDAtMC43LTAuNC0wLjctMC45YzAtMC41LDAuMy0wLjksMC43LTAuOUMyMi42LDEwLjEsMjIuOCwxMC41LDIyLjgsMTF6IE0yMC4yLDE0LjFoMS4ydi0xLjhoMGMwLjIsMC40LDAuNywwLjYsMS4xLDAuNmMxLDAsMS42LTAuOCwxLjYtMS44YzAtMC44LTAuNS0xLjctMS41LTEuN2MtMC41LDAtMSwwLjItMS4zLDAuN2gwVjkuM2gtMS4xVjE0LjF6IE0yNS43LDExLjZjMC0wLjMsMC4zLTAuNCwwLjctMC40YzAuMiwwLDAuMywwLDAuNSwwYzAsMC40LTAuMywwLjgtMC43LDAuOEMyNS45LDEyLDI1LjcsMTEuOSwyNS43LDExLjZ6IE0yOCwxMi43QzI4LDEyLjQsMjgsMTIuMiwyOCwxMS45di0xLjNjMC0xLTAuNy0xLjQtMS42LTEuNGMtMC41LDAtMC45LDAuMS0xLjQsMC4ybDAsMC44YzAuMy0wLjIsMC43LTAuMywxLjEtMC4zYzAuNCwwLDAuOCwwLjEsMC44LDAuNmMtMC4xLDAtMC40LDAtMC41LDBjLTAuNiwwLTEuOCwwLjEtMS44LDEuMmMwLDAuNywwLjYsMS4xLDEuMywxLjFjMC41LDAsMC44LTAuMiwxLjEtMC42aDBjMCwwLjIsMCwwLjQsMCwwLjVMMjgsMTIuN0wyOCwxMi43eiBNMjguNSwxNC4xYzAuMiwwLjEsMC41LDAuMSwwLjcsMC4xYzEuMSwwLDEuMy0wLjgsMS43LTEuN2wxLjItMy4ySDMxbC0wLjcsMi4yaDBsLTAuNy0yLjJoLTEuM2wxLjQsMy41Yy0wLjEsMC4zLTAuMywwLjUtMC42LDAuNWMtMC4yLDAtMC4zLDAtMC41LTAuMUwyOC41LDE0LjF6Ii8+PHBhdGggaWQ9Il80NzMwMzAzMl8xXyIgY2xhc3M9InN0MzMiIGQ9Ik02LjcsMTFjMC0wLjUsMC4yLTAuOCwwLjctMC44YzAuNSwwLDAuNywwLjQsMC43LDAuOGMwLDAuNS0wLjMsMC45LTAuNywwLjlDNywxMS44LDYuNywxMS41LDYuNywxMXogTTkuMiw5LjNIOC4ydjAuNmgwQzcuOSw5LjUsNy41LDkuMiw3LDkuMkM1LjksOS4yLDUuNSwxMCw1LjUsMTFjMCwxLDAuNiwxLjcsMS41LDEuN2MwLjUsMCwwLjktMC4yLDEuMS0wLjZoMHYwLjJjMCwwLjctMC40LDEtMSwxYy0wLjUsMC0wLjgtMC4xLTEuMS0wLjNsLTAuMSwwLjljMC4zLDAuMSwwLjcsMC4yLDEuMywwLjJjMS40LDAsMi0wLjUsMi0xLjhWOS4zTDkuMiw5LjN6IE0xMS4yLDcuOUgxMHYwLjloMS4yTDExLjIsNy45TDExLjIsNy45eiBNMTAsMTIuN2gxLjJWOS4zSDEwVjEyLjdMMTAsMTIuN3ogTTE0LjUsOS4zYy0wLjEsMC0wLjMsMC0wLjQsMGMtMC41LDAtMC44LDAuMy0xLDAuN2gwVjkuM0gxMnYzLjRoMS4ydi0xLjRjMC0wLjcsMC4zLTEuMSwwLjktMS4xYzAuMSwwLDAuMywwLDAuNCwwTDE0LjUsOS4zeiBNMTYuNSwxMS45Yy0wLjUsMC0wLjgtMC40LTAuOC0xYzAtMC41LDAuMi0xLDAuOC0xYzAuNSwwLDAuOCwwLjQsMC44LDFDMTcuMywxMS41LDE3LDExLjksMTYuNSwxMS45eiBNMTYuNSwxMi44YzEuMSwwLDItMC43LDItMS44YzAtMS4xLTAuOS0xLjgtMi0xLjhjLTEuMSwwLTIsMC43LTIsMS44QzE0LjUsMTIuMSwxNS40LDEyLjgsMTYuNSwxMi44eiIvPjwvZz48L3N2Zz4=)}.bg-gpay{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfN18iIGNsYXNzPSJzdDIzIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxnIGlkPSJHUGF5LUxpZ2h0LXRoZW1lZC1idXR0b25zIj48ZyBpZD0iR1BBWS0tLVNWR3MiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xODUuMDAwMDAwLCAtNDAwLjAwMDAwMCkiPjxnIGlkPSJHUGF5LUJyYW5kLU1hcmsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE4NS4wMDAwMDAsIDQwMC4wMDAwMDApIj48ZyBpZD0iR1BheSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4yNjE0NzQsIDAuMjYxNDc0KSI+PGcgaWQ9IlBheSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTcuNjE1MDY5LCAwLjgyNTcwNikiPjxwYXRoIGlkPSJGaWxsLTEiIGNsYXNzPSJzdDAiIGQ9Ik0tMC42LDcuM3YyLjZIMWMwLjQsMCwwLjctMC4xLDAuOS0wLjRjMC4zLTAuMywwLjQtMC42LDAuNC0wLjljMC0wLjMtMC4xLTAuNi0wLjQtMC45QzEuNyw3LjQsMS40LDcuMywxLDcuM0wtMC42LDcuM0wtMC42LDcuM3ogTS0wLjYsMTAuOHYzaC0xVjYuNEgxYzAuNiwwLDEuMiwwLjIsMS42LDAuNmMwLjUsMC40LDAuNywxLDAuNywxLjZjMCwwLjYtMC4yLDEuMi0wLjcsMS42Yy0wLjQsMC40LTEsMC42LTEuNiwwLjZMLTAuNiwxMC44TC0wLjYsMTAuOHoiLz48cGF0aCBpZD0iRmlsbC0zIiBjbGFzcz0ic3QwIiBkPSJNNC4zLDEyLjNjMCwwLjIsMC4xLDAuNSwwLjMsMC42YzAuMiwwLjIsMC41LDAuMiwwLjcsMC4yYzAuNCwwLDAuOC0wLjEsMS4xLTAuNGMwLjMtMC4zLDAuNS0wLjYsMC41LTEuMWMtMC4zLTAuMi0wLjctMC40LTEuMi0wLjRjLTAuNCwwLTAuNywwLjEtMSwwLjNDNC40LDExLjcsNC4zLDEyLDQuMywxMi4zIE01LjUsOC41YzAuNywwLDEuMywwLjIsMS43LDAuNmMwLjQsMC40LDAuNiwwLjksMC42LDEuNnYzLjFINi45di0wLjdoMEM2LjUsMTMuNyw2LDE0LDUuMywxNGMtMC42LDAtMS0wLjItMS40LTAuNWMtMC40LTAuMy0wLjYtMC43LTAuNi0xLjJjMC0wLjUsMC4yLTAuOSwwLjYtMS4zYzAuNC0wLjMsMC45LTAuNSwxLjYtMC41YzAuNiwwLDEsMC4xLDEuNCwwLjN2LTAuMmMwLTAuMy0wLjEtMC42LTAuNC0wLjhDNi4zLDkuNSw2LDkuNCw1LjYsOS40Yy0wLjUsMC0xLDAuMi0xLjMsMC43TDMuNSw5LjVDMy45LDguOSw0LjYsOC41LDUuNSw4LjUiLz48ZyBpZD0iR3JvdXAtNyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTUuMDg0OTIzLCAzLjc1OTQ0NykiPjxwb2x5Z29uIGlkPSJGaWxsLTUiIGNsYXNzPSJzdDAiIHBvaW50cz0iLTIsNSAtNS4yLDEyLjMgLTYuMiwxMi4zIC01LDkuNyAtNy4xLDUgLTYuMSw1IC00LjUsOC42IC00LjUsOC42IC0zLDUgIi8+PC9nPjwvZz48ZyBpZD0iRyI+PHBhdGggaWQ9IkZpbGwtOCIgY2xhc3M9InN0MCIgZD0iTTEzLjIsMTFjMC0wLjMsMC0wLjYtMC4xLTAuOWgtNHYxLjZoMi4zYy0wLjEsMC41LTAuNCwxLTAuOSwxLjN2MS4xaDEuNEMxMi43LDEzLjQsMTMuMiwxMi4zLDEzLjIsMTEiLz48cGF0aCBpZD0iRmlsbC0xMCIgY2xhc3M9InN0MCIgZD0iTTkuMSwxNS4yYzEuMiwwLDIuMS0wLjQsMi44LTFMMTAuNSwxM2MtMC40LDAuMy0wLjksMC40LTEuNSwwLjRjLTEuMSwwLTIuMS0wLjgtMi40LTEuOEg1LjJ2MS4xQzUuOSwxNC4yLDcuNCwxNS4yLDkuMSwxNS4yIi8+PHBhdGggaWQ9IkZpbGwtMTIiIGNsYXNzPSJzdDAiIGQ9Ik02LjYsMTEuN2MtMC4xLTAuMy0wLjEtMC41LTAuMS0wLjhjMC0wLjMsMC0wLjYsMC4xLTAuOFY5SDUuMmMtMC4zLDAuNi0wLjUsMS4yLTAuNSwxLjljMCwwLjcsMC4yLDEuMywwLjUsMS45TDYuNiwxMS43eiIvPjxwYXRoIGlkPSJGaWxsLTE0IiBjbGFzcz0ic3QwIiBkPSJNOS4xLDguM2MwLjYsMCwxLjIsMC4yLDEuNiwwLjZ2MGwxLjItMS4yQzExLjIsNywxMC4yLDYuNiw5LjEsNi42Yy0xLjcsMC0zLjEsMS0zLjgsMi40bDEuNCwxLjFDNyw5LDcuOSw4LjMsOS4xLDguMyIvPjwvZz48L2c+PC9nPjwvZz48L2c+PC9zdmc+)}.bg-ideal{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU2X2NvcHlfMl8xXyIgY2xhc3M9InN0MTkiIGQ9Ik0zLDBoMzBjMS43LDAsMywxLjMsMywzdjE2YzAsMS43LTEuMywzLTMsM0gzYy0xLjcsMC0zLTEuMy0zLTNWM0MwLDEuMywxLjMsMCwzLDB6Ii8+PGc+PHJlY3QgeD0iMTEuNCIgeT0iMTEuOSIgY2xhc3M9InN0MCIgd2lkdGg9IjIuNyIgaGVpZ2h0PSI0LjUiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTQuMyw5LjdjMCwwLjktMC43LDEuNS0xLjUsMS41Yy0wLjksMC0xLjUtMC43LTEuNS0xLjVjMC0wLjksMC43LTEuNSwxLjUtMS41QzEzLjYsOC4xLDE0LjMsOC44LDE0LjMsOS43eiIvPjxnPjxnPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xOS4zLDMuNkg5LjV2MTQuOWg5Ljh2MGMyLjEsMCwzLjgtMC42LDUtMS42YzEuNS0xLjIsMi4yLTMuMiwyLjItNS44YzAtMS4zLTAuMi0yLjQtMC42LTMuNGMtMC40LTAuOS0wLjktMS43LTEuNi0yLjNDMjMuMSw0LjIsMjEuMywzLjYsMTkuMywzLjZDMTkuMywzLjYsMTkuMywzLjYsMTkuMywzLjZ6IE0xOS4xLDQuNmMxLjksMCwzLjUsMC41LDQuNiwxLjVjMS4yLDEuMSwxLjksMi44LDEuOSw1YzAsNC4zLTIuMSw2LjQtNi40LDYuNGMtMC4zLDAtNy44LDAtOC42LDBjMC0wLjksMC0xMiwwLTEyLjlDMTEuMyw0LjYsMTguOCw0LjYsMTkuMSw0LjZ6Ii8+PC9nPjwvZz48Zz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTYsMTAuNmMwLjEsMCwwLjEsMCwwLjItMC4xYzAsMCwwLjEtMC4xLDAuMS0wLjJjMC0wLjEsMC0wLjMsMC0wLjVjMC0wLjIsMC0wLjMsMC0wLjRjMC0wLjEtMC4xLTAuMi0wLjEtMC4yYy0wLjEtMC4xLTAuMS0wLjEtMC4yLTAuMWMwLDAtMC4yLDAtMC40LDBjMCwwLTAuMSwwLTAuMiwwdjEuNmMwLjEsMCwwLjMsMCwwLjMsMEMxNS44LDEwLjYsMTUuOSwxMC42LDE2LDEwLjZ6Ii8+PHBhdGggY2xhc3M9InN0MCIgZD0iTTIwLjgsMTBjMC4xLDAsMC40LDAsMC41LDBjMC0wLjEtMC4yLTAuNS0wLjMtMC43QzIxLDkuNSwyMC45LDkuOSwyMC44LDEweiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMi43LDExLjJWOC41aDAuN2MwLDAsMCwyLDAsMi4xYzAuMSwwLDEsMCwxLjIsMGMtMC4zLTMuOC0zLjItNC44LTYtNC44aC0zLjN2Mi43aDAuNGMwLjIsMCwwLjQsMCwwLjUsMC4xYzAuMiwwLDAuMywwLjEsMC40LDAuM2MwLjEsMC4xLDAuMiwwLjMsMC4zLDAuNEMxNyw5LjQsMTcsOS42LDE3LDkuOGMwLDAuMiwwLDAuNC0wLjEsMC42Yy0wLjEsMC4yLTAuMiwwLjQtMC4zLDAuNWMtMC4xLDAuMS0wLjIsMC4yLTAuNCwwLjJjLTAuMSwwLTAuMywwLjEtMC41LDAuMWgtMC40djUuM2gzLjNjMi45LDAsNS45LTAuOSw2LTUuM0gyMi43eiBNMTkuNSwxMS4yaC0yLjFWOC41aDIuMVY5YzAsMC0xLjMsMC0xLjQsMGMwLDAuMSwwLDAuMywwLDAuNGMwLjEsMCwxLjMsMCwxLjMsMFYxMGMwLDAtMS4yLDAtMS4zLDBjMCwwLjEsMCwwLjUsMCwwLjZjMC4xLDAsMS40LDAsMS40LDBWMTEuMnogTTIxLjgsMTEuMmMwLDAtMC4yLTAuNS0wLjItMC42Yy0wLjEsMC0wLjgsMC0wLjksMGMwLDAuMS0wLjIsMC42LTAuMiwwLjZoLTAuN2wxLjEtMi43aDAuN2wxLjEsMi43SDIxLjh6Ii8+PC9nPjwvZz48L3N2Zz4=)}.bg-jcb{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU3XzJfIiBjbGFzcz0ic3QxMyIgZD0iTTMsMGgzMGMxLjcsMCwzLDEuMywzLDN2MTZjMCwxLjctMS4zLDMtMywzSDNjLTEuNywwLTMtMS4zLTMtM1YzQzAsMS4zLDEuMywwLDMsMHoiLz48Zz48ZyBpZD0iZzYzMjciPjxwYXRoIGlkPSJwYXRoNjMzOCIgY2xhc3M9InN0MCIgZD0iTTIyLjcsMTIuNWgxLjNjMCwwLDAuMSwwLDAuMiwwYzAuMy0wLjEsMC41LTAuMywwLjUtMC42YzAtMC4zLTAuMi0wLjUtMC41LTAuNmMwLDAtMC4xLDAtMC4yLDBoLTEuM1YxMi41TDIyLjcsMTIuNXoiLz48cGF0aCBpZD0icGF0aDYzNDkiIGNsYXNzPSJzdDAiIGQ9Ik0yMy45LDRjLTEuMywwLTIuMywxLTIuMywyLjN2Mi40aDMuM2MwLjEsMCwwLjIsMCwwLjIsMGMwLjcsMCwxLjMsMC40LDEuMywxLjFjMCwwLjUtMC40LDEtMS4xLDEuMXYwYzAuOCwwLjEsMS4zLDAuNSwxLjMsMS4xYzAsMC43LTAuNiwxLjItMS41LDEuMmgtMy42VjE4SDI1YzEuMywwLDIuMy0xLDIuMy0yLjNWNEwyMy45LDRMMjMuOSw0eiIvPjxwYXRoIGlkPSJwYXRoNjM2MCIgY2xhc3M9InN0MCIgZD0iTTI0LjUsMTBjMC0wLjMtMC4yLTAuNS0wLjUtMC42YzAsMC0wLjEsMC0wLjEsMGgtMS4ydjEuMWgxLjJjMCwwLDAuMSwwLDAuMSwwQzI0LjMsMTAuNSwyNC41LDEwLjMsMjQuNSwxMHoiLz48L2c+PHBhdGggaWQ9InBhdGg2MzcxIiBjbGFzcz0ic3QwIiBkPSJNMTEsNEM5LjcsNCw4LjcsNSw4LjcsNi4zdjUuOGMwLjcsMC4zLDEuMywwLjUsMiwwLjVjMC44LDAsMS4yLTAuNSwxLjItMS4yVjguN2gydjIuN2MwLDEuMS0wLjcsMS45LTIuOSwxLjljLTEuMywwLTIuNC0wLjMtMi40LTAuM1YxOGgzLjRjMS4zLDAsMi4zLTEsMi4zLTIuM1Y0QzE0LjQsNCwxMSw0LDExLDR6Ii8+PHBhdGggaWQ9InBhdGg2Mzg0IiBjbGFzcz0ic3QwIiBkPSJNMTcuNSw0Yy0xLjMsMC0yLjMsMS0yLjMsMi4zdjMuMWMwLjYtMC41LDEuNi0wLjgsMy4zLTAuN2MwLjksMCwxLjgsMC4zLDEuOCwwLjN2MWMtMC41LTAuMi0xLTAuNS0xLjgtMC41Yy0xLjMtMC4xLTIsMC41LTIsMS42YzAsMS4xLDAuOCwxLjcsMiwxLjZjMC43LTAuMSwxLjMtMC4zLDEuOC0wLjV2MWMwLDAtMC45LDAuMi0xLjgsMC4zYy0xLjcsMC4xLTIuNy0wLjItMy4zLTAuN1YxOGgzLjRjMS4zLDAsMi4zLTEsMi4zLTIuM1Y0QzIwLjksNCwxNy41LDQsMTcuNSw0eiIvPjwvZz48L3N2Zz4=)}.bg-maestro{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzUzXzNfIiBjbGFzcz0ic3Q0IiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxjaXJjbGUgY2xhc3M9InN0OCIgY3g9IjE0IiBjeT0iMTEiIHI9IjYiLz48Y2lyY2xlIGlkPSJFbGxpcHNlXzhfY29weV8zXyIgY2xhc3M9InN0OSIgY3g9IjIyIiBjeT0iMTEiIHI9IjYiLz48cGF0aCBpZD0iUm91bmRlZF9SZWN0YW5nbGVfMjVfM18iIGNsYXNzPSJzdDEwIiBkPSJNMTgsNmMtMi44LDEuNS0zLjgsNC45LTIuMyw3LjZjMC40LDAuOCwxLDEuNCwxLjcsMS45YzAuMiwwLjIsMC41LDAuMywwLjcsMC40bDAuMSwwYzIuNy0xLjQsMy43LTQuOSwyLjMtNy42QzE5LjgsNy40LDE5LDYuNSwxOCw2Ii8+PC9zdmc+)}.bg-mastercard{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzUzXzRfIiBjbGFzcz0ic3QzIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxjaXJjbGUgY2xhc3M9InN0NSIgY3g9IjE0IiBjeT0iMTEiIHI9IjYiLz48Y2lyY2xlIGlkPSJFbGxpcHNlXzhfY29weV80XyIgY2xhc3M9InN0NiIgY3g9IjIyIiBjeT0iMTEiIHI9IjYiLz48cGF0aCBpZD0iUm91bmRlZF9SZWN0YW5nbGVfMjVfNF8iIGNsYXNzPSJzdDciIGQ9Ik0xOCw2TDE4LDZjLTIuOCwxLjUtMy44LDQuOS0yLjMsNy42YzAuNCwwLjgsMSwxLjQsMS43LDEuOWMwLjIsMC4yLDAuNSwwLjMsMC43LDAuNGwwLjEsMGMyLjctMS40LDMuNy00LjksMi4zLTcuNkMxOS44LDcuNCwxOSw2LjUsMTgsNiIvPjwvc3ZnPg==)}.bg-mol{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfMTJfIiBjbGFzcz0ic3QyNiIgZD0iTTMsMGgzMGMxLjcsMCwzLDEuMywzLDN2MTZjMCwxLjctMS4zLDMtMywzSDNjLTEuNywwLTMtMS4zLTMtM1YzQzAsMS4zLDEuMywwLDMsMHoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjYuOSwxMy4xYy0wLjUsMC0wLjYtMC4xLTAuNi0wLjZjMC0xLjEsMC0yLjIsMC0zLjNjMC0xLjItMC4yLTEuNC0xLjQtMS40Yy0yLDAtNC4xLDAtNi4xLDBjLTEuMSwwLTIuNSwxLjQtMi41LDIuNWMwLDEuMiwwLDIuNCwwLDMuNmMtMC4yLDAtMC4xLTAuMy0wLjMtMC4zYy0xLTAuMS0wLjgtMC45LTAuOC0xLjVjMC0xLjMsMC0yLjUtMC45LTMuNkMxNCw4LDEzLjcsNy44LDEzLjIsNy44Yy0yLjEsMC00LjIsMC02LjMsMEM2LDcuOCw1LjcsOC4xLDUuNyw5YzAsMS42LDAsMy4yLDAsNC44YzAsMC43LDAuMywxLjEsMC45LDEuMWMwLjYsMCwwLjktMC40LDAuOS0xLjFjMC0xLDAtMiwwLTNjMC0xLjIsMC0xLjIsMS4yLTEuMmMwLjYsMCwwLjcsMC4yLDAuNywwLjdjMCwxLjEsMCwyLjIsMCwzLjNjMCwwLjgsMC4zLDEuMywxLDEuM2MwLjYsMCwwLjktMC40LDAuOS0xLjJjMC0xLjIsMC0yLjMsMC0zLjVjMC0wLjQsMC4xLTAuNiwwLjYtMC42YzAuOSwwLDEuNCwwLjUsMS40LDEuNGMwLDAuOSwwLDEuOCwwLDIuN2MwLDAuOCwwLjMsMS4xLDEuMSwxLjFjMi4yLDAsNC40LDAsNi42LDBjMC4zLDAsMC41LDAsMC43LTAuMmMwLjUtMC42LDEuMS0xLjEsMS41LTEuOGMwLjEtMS4xLDAtMi4yLDAtMy4zYzAtMC4xLTAuMi0wLjQsMC4yLTAuNWMwLjgsMC4xLDAuOSwwLjYsMC45LDEuM2MtMC4xLDEuMSwwLDIuMywwLDMuNGMwLDAuOCwwLjMsMSwxLjEsMWMwLjksMCwxLjktMC4xLDIuOCwwYzEuNSwwLjIsMi4xLTAuOSwzLTEuOUMyOS43LDEzLjEsMjguMywxMywyNi45LDEzLjF6IE0yMS41LDEyYzAsMC45LTAuNywxLjQtMS44LDEuNGMtMS41LDAtMS41LDAtMS41LTEuNWMwLDAsMC0wLjEsMC0wLjFjMC0wLjQsMC0wLjgsMC0xLjJjMC0wLjgsMC43LTEuMywxLjctMS4zYzEuNiwwLDEuNiwwLDEuNiwxLjZDMjEuNSwxMS4zLDIxLjUsMTEuNywyMS41LDEyeiIvPjwvc3ZnPg==)}.bg-paypal{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU4XzFfIiBjbGFzcz0ic3QxMyIgZD0iTTMsMGgzMGMxLjcsMCwzLDEuMywzLDN2MTZjMCwxLjctMS4zLDMtMywzSDNjLTEuNywwLTMtMS4zLTMtM1YzQzAsMS4zLDEuMywwLDMsMHoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjMsOS45YzAsMC4zLDAsMC41LTAuMSwwLjhjLTAuMiwxLjgtMS45LDMuMi0zLjcsM2gtMC4zYy0wLjIsMC0wLjQsMC4yLTAuNSwwLjRMMTgsMTYuNmMwLDAuMi0wLjIsMC40LTAuNSwwLjRoLTEuNGMtMC4yLDAtMC4zLTAuMS0wLjMtMC4zYzAsMCwwLDAsMCwwbDAuNy00LjRsMCwwaDEuMWMyLjMsMC4yLDQuNC0xLjUsNC43LTMuOEMyMi44LDguOCwyMyw5LjMsMjMsOS45eiBNMTUuOSwxMmMwLTAuMywwLjItMC42LDAuNi0wLjZjMCwwLDAuMSwwLDAuMSwwaDEuMWMyLjMsMCwzLjYtMSw0LTMuMmMwLjQtMi4xLTEuMS0zLjItMy0zLjJIMTVjLTAuMywwLTAuNSwwLjItMC41LDAuNWMtMS4yLDcuNC0xLjUsOS4zLTEuNSw5LjljMCwwLjIsMC4xLDAuMywwLjMsMC4zYzAsMCwwLDAsMCwwaDJMMTUuOSwxMnoiLz48L3N2Zz4=)}.bg-poli{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfOV8iIGNsYXNzPSJzdDMxIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxnIGlkPSJwb2xpXzFfIj48cGF0aCBpZD0icG9saS1sb2dvXzFfIiBjbGFzcz0ic3QwIiBkPSJNMTguNSwxNC44YzAuMy0wLjEsMC43LTAuNCwxLTAuNmMwLjgtMC43LDEuNy0yLDEuNi0zLjVDMjEsOSwyMC4xLDcuOSwxOSw3LjNjMC4zLDAuMSwwLjYsMC4zLDAuOSwwLjVjMC43LDAuNiwxLjMsMS41LDEuMywyLjhjMCwxLjctMC45LDIuOS0xLjgsMy43YzAuMy0wLjEsMC41LTAuNCwwLjctMC43YzAuNi0wLjcsMS4yLTEuOCwxLjItMy4xYzAtMS44LTEtMi45LTIuMi0zLjZjMC40LDAuMSwwLjgsMC40LDEsMC42YzAuNywwLjYsMS40LDEuNywxLjMsMy4xYy0wLjEsMS40LTAuNywyLjUtMS42LDMuNGMtMC45LDAuOC0yLDEuNC0zLjQsMS41Yy0wLjEsMC0wLjMsMC0wLjUsMGMtMi4xLTAuMi0zLjYtMS41LTMuOC0zLjZjMC0wLjIsMC0wLjQsMC0wLjZjMC4xLTEuMywwLjctMi4zLDEuNS0zLjFjMC44LTAuOSwxLjktMS41LDMuNC0xLjZDMTcsNi42LDE3LDYuNCwxNyw2LjNjMC41LDAuNSwxLjEsMS4xLDEuNywxLjdjLTAuNywwLjQtMS41LDAuOC0yLjIsMS4yYzAtMC4xLDAtMC4zLDAuMS0wLjRjLTEuMiwwLjItMi4zLDEuMS0yLjUsMi40Yy0wLjMsMS41LDAuOCwyLjcsMi4yLDIuN2MxLjUsMCwyLjgtMS4xLDMtMi41YzAuMi0xLjEtMC4zLTEuOC0wLjktMi4zYzAuNiwwLjQsMS4yLDEsMS4xLDJjLTAuMSwxLjYtMS42LDIuOS0zLjEsMi45Yy0wLjgsMC0xLjYtMC40LTIuMS0xYzAuNSwwLjcsMS40LDEuMSwyLjQsMWMwLjgtMC4xLDEuNC0wLjQsMS45LTAuOWMwLjUtMC41LDAuOS0xLjEsMS0xLjhjMC0wLjMsMC0wLjYsMC0wLjhjLTAuMS0wLjgtMC42LTEuMi0xLjEtMS43YzAuNiwwLjUsMS4zLDEuMiwxLjMsMi4zYy0wLjEsMS42LTEuNiwzLTMuMiwzLjFjLTEuMSwwLjEtMS43LTAuMy0yLjMtMC44YzAuNSwwLjcsMS41LDEsMi42LDAuOGMxLjUtMC4yLDIuOC0xLjUsMy0zYzAuMS0xLjQtMC42LTItMS4yLTIuN2MwLjcsMC41LDEuMywxLjEsMS40LDIuMmMwLDEtMC40LDEuOS0xLDIuNWMtMSwxLTIuOCwxLjYtNC4zLDAuN2MxLjIsMC45LDMuMiwwLjQsNC4yLTAuNWMwLjctMC43LDEuMy0xLjYsMS4yLTIuOWMtMC4xLTEuMS0wLjctMS42LTEuNC0yLjJjMC43LDAuNCwxLjQsMS4xLDEuNSwyLjFjMC4xLDEuNC0wLjUsMi40LTEuMywzLjFjLTAuOSwwLjgtMi4yLDEuMy0zLjcsMC45YzIuNCwwLjgsNC43LTEuMSw1LTMuMWMwLjItMS41LTAuNS0yLjQtMS4zLTNjLTAuMS0wLjEtMC4xLTAuMS0wLjItMC4yYzEsMC41LDEuOSwxLjcsMS42LDMuNGMtMC40LDItMi40LDMuNi00LjksMy4yYzAuNCwwLjEsMC44LDAuMSwxLjIsMC4xYzEuMi0wLjEsMi4yLTAuNiwyLjgtMS4zYzAuNy0wLjgsMS4yLTEuNywxLjEtMy4xYy0wLjEtMS4yLTAuOC0xLjgtMS42LTIuNWMwLjQsMC4xLDAuNywwLjQsMC45LDAuN2MwLjQsMC41LDAuOCwxLjEsMC44LDEuOWMwLjEsMS40LTAuNiwyLjUtMS4zLDMuMmMtMC44LDAuOC0xLjgsMS4zLTMuMSwxLjNjMi4xLDAuMSwzLjQtMS4yLDQuMS0yLjZjMC40LTAuOCwwLjUtMiwwLjItMi44Yy0wLjMtMC44LTAuOS0xLjQtMS42LTEuOGMxLjEsMC42LDIuMSwxLjcsMS45LDMuNWMtMC4xLDAuNy0wLjMsMS4yLTAuNiwxLjdjLTAuNiwxLTEuNiwxLjgtMi44LDIuMmMwLjgtMC4yLDEuNi0wLjcsMi4yLTEuM2MwLjctMC44LDEuMy0xLjgsMS4yLTMuMmMwLTEuNS0xLTIuNC0xLjktM2MwLDAsMCwwLDAsMGMxLDAuNSwxLjgsMS40LDIsMi44QzIxLjIsMTIuNCwxOS44LDE0LDE4LjUsMTQuOCIvPjxwYXRoIGlkPSJwb2xpLXR4dF8xXyIgY2xhc3M9InN0MzQiIGQ9Ik04LDExLjRjMCwwLDAsMCwwLjEsMGMwLjcsMCwwLjktMC4yLDEtMC4zYzAuMi0wLjIsMC4yLTAuNywwLjItMS4xYzAtMC40LDAtMC43LTAuMy0xQzguOSw4LjgsOC40LDguNyw4LDguN2wwLDAuMUw4LDExLjRMOCwxMS40eiBNNS42LDE1LjRWNy4yaDIuMWMwLjgsMCwxLjUsMCwxLjksMC4xYzAuNCwwLjEsMC45LDAuMiwxLjEsMC40YzAuMywwLjIsMC42LDAuNSwwLjgsMC45YzAuMiwwLjQsMC4zLDAuOSwwLjMsMS41YzAsMC45LTAuMiwxLjctMC43LDIuMWMtMC41LDAuNS0xLjYsMC43LTIuNSwwLjdIOHYyLjVINS42eiBNMjcuNCwxNS4zSDIyVjcuMmgyLjZ2NS43aDIuN1YxNS4zeiBNMzAuNCwxNS40aC0yLjVWMTBoMi41VjE1LjR6IE0zMC40LDkuNGgtMi42VjcuMmgyLjZWOS40eiIvPjwvZz48L3N2Zz4=)}.bg-qiwi{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfMTFfIiBjbGFzcz0ic3QyOCIgZD0iTTMsMGgzMGMxLjcsMCwzLDEuMywzLDN2MTZjMCwxLjctMS4zLDMtMywzSDNjLTEuNywwLTMtMS4zLTMtM1YzQzAsMS4zLDEuMywwLDMsMHoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTAuOSwxNC44YzAuMSwwLjMsMC4yLDAuNSwwLjQsMC43YzAuMiwwLjIsMC40LDAuNCwwLjYsMC41YzAuMiwwLjEsMC41LDAuMywwLjcsMC4zYzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4xYzAuMSwwLDAuMiwwLjEsMC4zLDAuM2MwLDAuMi0wLjEsMC4zLTAuMywwLjNjLTAuMiwwLTAuMy0wLjEtMC41LTAuMWMtMC45LTAuMS0xLjctMC42LTIuNC0xLjJjLTAuMS0wLjEtMC4yLTAuMi0wLjMtMC40UzkuNiwxNSw5LjUsMTQuOWMtMC42LTAuMS0xLjItMC40LTEuNi0wLjhjLTAuNC0wLjUtMC43LTEuMS0wLjgtMS43QzYuOSwxMS43LDcsMTEsNy4yLDEwLjJDNy40LDksOC42LDgsOS45LDhjMC40LDAsMC44LDAuMSwxLjEsMC4yYzAuMywwLjEsMC43LDAuMywwLjksMC42YzAsMCwwLDAsMCwwQzEyLDguOSwxMi4yLDksMTIuMiw5LjFjMCwwLDAsMC4xLDAsMC4xYzAsMCwwLjEsMC4xLDAuMSwwLjFzMCwwLDAsMC4xczAsMC4xLDAuMSwwLjFjMCwwLDAsMCwwLDBjMCwwLjEsMC4xLDAuMiwwLjEsMC4zczAuMSwwLjIsMC4xLDAuM2MwLjEsMC4zLDAuMiwwLjYsMC4yLDAuOWMwLjEsMC44LTAuMSwxLjctMC40LDIuNGMtMC4yLDAuMy0wLjQsMC42LTAuNywwLjhDMTEuNSwxNC41LDExLjIsMTQuNywxMC45LDE0Ljh6IE05LjcsOC44QzkuNiw4LjksOS40LDguOSw5LjIsOUM5LjEsOS4xLDksOS4yLDguOSw5LjNDOC44LDkuNCw4LjcsOS41LDguNiw5LjdjLTAuMSwwLjMtMC4yLDAuNS0wLjIsMC44Yy0wLjEsMC4zLTAuMSwwLjYtMC4xLDFjMCwwLjcsMC4xLDEuNSwwLjUsMi4xQzksMTMuOCw5LjIsMTQsOS41LDE0LjFjMC4yLDAsMC4zLDAuMSwwLjUsMC4xYzAuMSwwLDAuMiwwLDAuMy0wLjFjMC4xLDAsMC4yLDAsMC4zLTAuMWMwLjEtMC4xLDAuMS0wLjEsMC4yLTAuMmMwLjEtMC4xLDAuMi0wLjIsMC4zLTAuM2MwLTAuMSwwLjEtMC4yLDAuMS0wLjJjMC40LTEsMC41LTIuMSwwLjItMy4yYy0wLjEtMC4zLTAuMi0wLjYtMC40LTAuOGMtMC4yLTAuMi0wLjQtMC4zLTAuNi0wLjVDMTAuMiw4LjgsMTAsOC44LDkuNyw4LjhDOS44LDguOCw5LjgsOC44LDkuNyw4LjhMOS43LDguOEw5LjcsOC44eiBNMTQuNyw4LjJjMC40LDAsMC44LDAsMS4xLDBjMC4xLDAuMSwwLjEsMC4zLDAsMC40YzAsMS43LDAsMy42LDAsNS40YzAsMC4xLDAsMC4zLDAsMC40YzAsMC4xLDAsMC4yLDAsMC40Yy0wLjIsMC0wLjQsMC0wLjYsMGMtMC4yLDAtMC40LDAtMC42LDBDMTQuNiwxMi42LDE0LjYsMTAuNCwxNC43LDguMkMxNC42LDguMiwxNC43LDguMiwxNC43LDguMkwxNC43LDguMnogTTE3LjUsOC4yaDEuMWMwLjEsMC4yLDAuMSwwLjQsMC4yLDAuNWMwLjMsMS4zLDAuNywyLjYsMSwzLjljMC4xLDAsMC0wLjEsMC4xLTAuMXMwLTAuMSwwLTAuMWMwLTAuMSwwLjEtMC4yLDAuMS0wLjNjMC4xLTAuMiwwLjEtMC40LDAuMi0wLjVjMC4xLTAuNCwwLjItMC43LDAuMy0xLjFzMC4yLTAuNywwLjMtMS4xYzAuMi0wLjMsMC4yLTAuOCwwLjQtMS4xaDAuNWMwLjIsMC4zLDAuMiwwLjgsMC40LDEuMWMwLjEsMC40LDAuMiwwLjcsMC4zLDEuMWMwLjIsMC43LDAuNSwxLjUsMC43LDIuMmMwLjEtMC4yLDAuMS0wLjQsMC4yLTAuNWMwLTAuMiwwLjEtMC40LDAuMS0wLjVjMC4yLTAuOCwwLjQtMS41LDAuNi0yLjJjMC4xLTAuNCwwLjItMC43LDAuMy0xLjFjMC4zLDAsMC42LDAsMSwwYzAsMC4zLTAuMSwwLjYtMC4yLDAuOGMwLDAuMy0wLjIsMC41LTAuMiwwLjhjLTAuMiwwLjUtMC4zLDEuMS0wLjUsMS42Yy0wLjEsMC42LTAuMywxLjEtMC40LDEuN2MtMC4xLDAuMy0wLjIsMC42LTAuMiwwLjhjLTAuMSwwLjMtMC4xLDAuNS0wLjMsMC44aC0wLjdjLTAuMi0wLjMtMC4yLTAuNy0wLjQtMWMtMC4zLTEtMC43LTIuMS0xLTMuMWMtMC4xLDAuMi0wLjEsMC4zLTAuMiwwLjVjMCwwLjItMC4xLDAuNC0wLjIsMC41Yy0wLjEsMC40LTAuMiwwLjctMC4zLDFjLTAuMSwwLjMtMC4yLDAuNy0wLjMsMWMtMC4xLDAuMy0wLjIsMC43LTAuNCwxYy0wLjIsMC0wLjQsMC0wLjcsMEMxOS4xLDE0LjUsMTksMTQuMywxOSwxNGMtMC4xLTAuMy0wLjEtMC42LTAuMi0wLjhjLTAuMS0wLjYtMC4zLTEuMS0wLjQtMS43Yy0wLjItMC41LTAuMy0xLjEtMC41LTEuNmMtMC4xLTAuMy0wLjItMC41LTAuMi0wLjhDMTcuNSw4LjgsMTcuNCw4LjUsMTcuNSw4LjJDMTcuNSw4LjIsMTcuNSw4LjIsMTcuNSw4LjJMMTcuNSw4LjJ6IE0yNi44LDguMmMwLjQsMCwwLjgsMCwxLjEsMEMyOCw4LjUsMjgsOC43LDI4LDl2NWMwLDAuMywwLDAuNSwwLDAuOGMtMC4zLDAtMC42LDAtMC45LDBjLTAuMSwwLTAuMiwwLTAuMywwYy0wLjEtMC4zLTAuMS0wLjUsMC0wLjhWOUMyNi42LDguNywyNi43LDguNSwyNi44LDguMkMyNi43LDguMiwyNi44LDguMiwyNi44LDguMnoiLz48L3N2Zz4=)}.bg-safetypay{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfMTBfIiBjbGFzcz0ic3QyOSIgZD0iTTMsMGgzMGMxLjcsMCwzLDEuMywzLDN2MTZjMCwxLjctMS4zLDMtMywzSDNjLTEuNywwLTMtMS4zLTMtM1YzQzAsMS4zLDEuMywwLDMsMHoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTgsNGwtNyw3bDcsN2w3LTdMMTgsNHogTTE2LjYsMTUuM2wtMi4xLTIuMWwyLjEtMi4xbC0yLjEtMi4xbDIuMS0yLjFMMTguOCw5bDIuMSwyLjFMMTYuNiwxNS4zeiBNMjIuOSwxMS44bC0zLjUsMy41bC0wLjgtMC44bDMuNS0zLjVsLTMuNS0zLjVsMC44LTAuOGw0LjMsNC4zTDIyLjksMTEuOEwyMi45LDExLjhMMjIuOSwxMS44eiIvPjwvc3ZnPg==)}.bg-sepa{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU2X2NvcHlfMl8zXyIgY2xhc3M9InN0MjUiIGQ9Ik0zLDBoMzBjMS43LDAsMywxLjMsMywzdjE2YzAsMS43LTEuMywzLTMsM0gzYy0xLjcsMC0zLTEuMy0zLTNWM0MwLDEuMywxLjMsMCwzLDB6Ii8+PGc+PHBhdGggY2xhc3M9InN0MCIgZD0iTTExLjIsOS44SDkuNWMwLTAuMiwwLTAuNC0wLjEtMC42QzkuMyw5LjEsOSw5LDguNiw5QzguMyw5LDgsOSw3LjcsOS4xQzcuNSw5LjMsNy40LDkuNSw3LjUsOS43YzAsMC4yLDAsMC40LDAuMiwwLjVjMC4xLDAuMSwwLjIsMC4xLDAuNCwwLjFsMC4zLDBjMC43LDAsMS4yLDAuMSwxLjQsMC4xYzAuNSwwLDAuOSwwLjIsMS4zLDAuNWMwLjIsMC4yLDAuMywwLjUsMC40LDAuOGMwLDAuMiwwLDAuNCwwLDAuNmMwLDAuNCwwLDAuOC0wLjIsMS4yYy0wLjIsMC41LTAuNiwwLjgtMS4zLDAuOWMtMC40LDAuMS0wLjgsMC4xLTEuMywwLjFjLTAuNywwLTEuMywwLTItMC4yYy0wLjQtMC4xLTAuOC0wLjQtMC45LTAuOGMtMC4xLTAuNC0wLjEtMC44LTAuMS0xLjJoMS43YzAsMC4xLDAsMC4xLDAsMC4xYzAsMC4yLDAuMSwwLjQsMC4yLDAuNkM3LjgsMTMsNy45LDEzLDgsMTNoMC42YzAuMiwwLDAuNCwwLDAuNi0wLjFjMC4xLDAsMC4zLTAuMiwwLjMtMC4zYzAtMC4xLDAtMC4yLDAtMC4zYzAtMC4yLTAuMS0wLjUtMC4zLTAuNWMtMC40LTAuMS0wLjctMC4xLTEuMS0wLjFjLTAuNSwwLTAuOS0wLjEtMS4xLTAuMWMtMC40LDAtMC44LTAuMy0xLjEtMC42Yy0wLjItMC40LTAuMy0wLjgtMC4yLTEuMmMwLTAuMywwLTAuNywwLjEtMWMwLjEtMC4yLDAuMi0wLjQsMC40LTAuNkM2LjYsNy45LDcsNy43LDcuMyw3LjdjMC40LDAsMC44LDAsMS4yLDBjMC41LDAsMSwwLDEuNSwwLjFjMC43LDAuMiwxLjEsMC43LDEuMSwxLjdDMTEuMiw5LjUsMTEuMiw5LjYsMTEuMiw5Ljh6IE0xOC42LDE0LjRWNy42aDMuNGMwLjQsMCwwLjcsMCwxLjEsMC4xYzAuNSwwLjEsMC45LDAuNSwxLjEsMS4xYzAuMSwwLjQsMC4yLDAuOCwwLjEsMS4zYzAsMC41LDAsMS0wLjIsMS41Yy0wLjIsMC42LTAuNywxLTEuMywxYy0wLjEsMC0wLjQsMC0xLDBsLTAuMywwaC0xLjF2MS43SDE4LjZ6IE0yMC40LDExLjFoMS4xYzAuMiwwLDAuNCwwLDAuNy0wLjFjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0wLjIsMC0wLjQsMC0wLjVjMC0wLjIsMC0wLjQtMC4xLTAuNmMtMC4xLTAuMi0wLjMtMC4zLTAuNS0wLjRjLTAuMSwwLTAuMiwwLTAuNCwwaC0xLjFMMjAuNCwxMS4xTDIwLjQsMTEuMXogTTI4LjEsMTMuMmgtMi40bC0wLjMsMS4yaC0xLjlsMi02LjdoMi43bDIsNi43aC0xLjhMMjguMSwxMy4yeiBNMjcuOCwxMS45TDI2LjksOWwtMC44LDIuOUgyNy44eiIvPjxwYXRoIGNsYXNzPSJzdDM2IiBkPSJNMTQsOS44aDMuN2wwLDBsLTAuNCwxbDAsMGgtMy42bDAsMGMwLDAuMSwwLDAuMiwwLDAuMmMwLDAuMSwwLDAuMiwwLDAuNGwwLDBIMTdsMCwwbC0wLjUsMWwwLDBIMTRsMCwwYzAuNywxLjEsMi4yLDEuNCwzLjMsMC43YzAuMi0wLjEsMC40LTAuMywwLjUtMC40bC0wLjEsMHYxLjJsMCwwYy0xLjYsMS0zLjcsMC42LTQuNy0wLjljLTAuMS0wLjItMC4yLTAuMy0wLjMtMC41bDAsMGgtMS4ybDAsMGwwLjQtMWwwLDBoMC41bDAsMGMwLTAuMSwwLTAuMiwwLTAuM2MwLTAuMSwwLTAuMiwwLTAuM2wwLDBoLTFsMCwwbDAuNS0xbDAsMGgwLjhsMCwwYzAuMi0wLjYsMC43LTEuMSwxLjItMS41YzEuMy0wLjksMy4xLTAuNyw0LjIsMC4zbDAsMGwtMC40LDAuOGwwLDBjLTAuOC0xLTIuNC0xLjItMy40LTAuNEMxNC4zLDkuMywxNC4xLDkuNSwxNCw5LjhMMTQsOS44TDE0LDkuOEwxNCw5Ljh6Ii8+PC9nPjwvc3ZnPg==)}.bg-sofort{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU2X2NvcHlfMV8iIGNsYXNzPSJzdDMwIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMC43LDVjLTEuMS0wLjEtMi4yLDAuMS0zLjMsMC41Yy0xLjMsMC43LTIuMiwxLjktMi42LDMuNGMtMC4xLDAuMy0wLjIsMC43LTAuMiwxLjFjMCwwLjMsMCwwLjYsMC4yLDAuOGMwLjIsMC4zLDAuNCwwLjYsMC43LDAuOGMwLjMsMC4yLDAuNywwLjQsMS4xLDAuNWwwLjUsMC4xYzAuMywwLjEsMC42LDAuMiwwLjcsMC4yYzAuMSwwLDAuMiwwLjEsMC4zLDAuMWMwLjEsMC4xLDAuMiwwLjEsMC4zLDAuM2MwLDAuMSwwLjEsMC4yLDAuMSwwLjJjMCwwLjEsMCwwLjItMC4xLDAuM2MtMC4xLDAuMi0wLjMsMC40LTAuNSwwLjVjLTAuNCwwLjEtMC44LDAuMi0xLjMsMC4xSDkuMkw4LDE3aDhjMS4yLDAsMi40LTAuMSwzLjUtMC41YzEuNi0wLjYsMi44LTIsMy4xLTMuN2MwLjItMC43LDAuMS0xLjQtMC4yLTJjLTAuNC0wLjYtMS4xLTEtMS44LTEuMWwtMC40LTAuMWwtMC42LTAuMmMtMC4yLDAtMC40LTAuMi0wLjUtMC4zQzE5LDguOSwxOC45LDguNywxOSw4LjVjMC4xLTAuMiwwLjItMC40LDAuNC0wLjVjMC4zLTAuMSwwLjUtMC4yLDAuOC0wLjJoNC43YzAsMCwwLjEtMC4xLDAuMS0wLjFjMC44LTEuMSwxLjgtMiwzLTIuN0gyMC43TDIwLjcsNXoiLz48L3N2Zz4=)}.bg-tenpay{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfOF8iIGNsYXNzPSJzdDMyIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxwYXRoIGlkPSJUZW5wYXktMl8xXyIgY2xhc3M9InN0MCIgZD0iTTcuNCwxMy42aDFWOS45aDEuNFY5SDZ2MC45aDEuNFYxMy42eiBNMTAuNiwxMi42YzAuMSwwLjIsMC4yLDAuNCwwLjQsMC42YzAuMiwwLjIsMC40LDAuMywwLjYsMC40YzAuMiwwLjEsMC41LDAuMSwwLjgsMC4xYzAuMiwwLDAuNSwwLDAuNy0wLjFjMC4yLTAuMSwwLjUtMC4yLDAuNy0wLjNsLTAuMy0wLjZjLTAuMSwwLjEtMC4zLDAuMS0wLjQsMC4yYy0wLjEsMC0wLjMsMC4xLTAuNSwwLjFjLTAuMiwwLTAuNS0wLjEtMC43LTAuMmMtMC4yLTAuMS0wLjMtMC4zLTAuNC0wLjZoMi40YzAtMC4xLDAtMC4xLDAtMC4yYzAtMC4xLDAtMC4yLDAtMC4zYzAtMC4yLDAtMC41LTAuMS0wLjdjLTAuMS0wLjItMC4yLTAuNC0wLjMtMC41Yy0wLjEtMC4yLTAuMy0wLjMtMC41LTAuNGMtMC41LTAuMi0wLjktMC4yLTEuNCwwYy0wLjIsMC4xLTAuNCwwLjItMC42LDAuNGMtMC4yLDAuMi0wLjMsMC40LTAuNCwwLjZjLTAuMSwwLjItMC4yLDAuNS0wLjIsMC44QzEwLjQsMTIuMSwxMC41LDEyLjQsMTAuNiwxMi42TDEwLjYsMTIuNnogTTExLjUsMTEuNWMwLTAuMiwwLjEtMC40LDAuMy0wLjVjMC4xLTAuMSwwLjMtMC4yLDAuNS0wLjJjMC4yLDAsMC40LDAuMSwwLjUsMC4yYzAuMSwwLjEsMC4yLDAuMywwLjIsMC41TDExLjUsMTEuNUwxMS41LDExLjV6IE0xNC44LDEzLjZoMXYtMi4zYzAuMS0wLjEsMC4yLTAuMiwwLjMtMC4zYzAuMS0wLjEsMC4yLTAuMSwwLjQtMC4xYzAuMiwwLDAuMywwLDAuNCwwLjJjMC4xLDAuMiwwLjEsMC4zLDAuMSwwLjV2Mmgxdi0yLjJjMC0wLjQtMC4xLTAuNy0wLjMtMUMxNy43LDEwLjEsMTcuMywxMCwxNywxMGMtMC4yLDAtMC41LDAuMS0wLjcsMC4yYy0wLjIsMC4xLTAuNCwwLjItMC41LDAuNGgwbC0wLjEtMC41aC0wLjlMMTQuOCwxMy42TDE0LjgsMTMuNnogTTIwLjEsMTMuM2MwLjIsMC4yLDAuNSwwLjQsMC45LDAuNGMwLjIsMCwwLjQsMCwwLjYtMC4xYzAuMi0wLjEsMC40LTAuMiwwLjUtMC40YzAuMS0wLjIsMC4zLTAuNCwwLjMtMC42YzAuMS0wLjMsMC4xLTAuNSwwLjEtMC44YzAtMC4yLDAtMC41LTAuMS0wLjdjLTAuMS0wLjItMC4yLTAuNC0wLjMtMC42Yy0wLjEtMC4yLTAuMy0wLjMtMC40LTAuNGMtMC4yLTAuMS0wLjQtMC4xLTAuNi0wLjFjLTAuMiwwLTAuNCwwLTAuNiwwLjFjLTAuMiwwLjEtMC4zLDAuMi0wLjUsMC4zaDBsLTAuMS0wLjRoLTAuOXY0LjhoMXYtMUwyMC4xLDEzLjN6IE0yMC4xLDExLjJjMC4yLTAuMiwwLjQtMC4zLDAuNy0wLjNjMC40LDAsMC42LDAuMywwLjYsMC45YzAsMC4zLDAsMC42LTAuMiwwLjhjLTAuMSwwLjItMC4zLDAuMi0wLjUsMC4yYy0wLjIsMC0wLjQtMC4xLTAuNi0wLjJMMjAuMSwxMS4yTDIwLjEsMTEuMnogTTIzLjMsMTMuMWMwLjEsMC4xLDAuMSwwLjIsMC4yLDAuM2MwLjEsMC4xLDAuMiwwLjIsMC40LDAuMmMwLjIsMC4xLDAuMywwLjEsMC41LDAuMWMwLjIsMCwwLjUsMCwwLjctMC4xYzAuMi0wLjEsMC40LTAuMiwwLjYtMC4zaDBsMC4xLDAuNGgwLjl2LTJjMC0wLjQtMC4xLTAuOS0wLjQtMS4yQzI1LjksMTAuMSwyNS41LDEwLDI1LDEwYy0wLjMsMC0wLjYsMC0wLjksMC4xYy0wLjMsMC4xLTAuNSwwLjItMC44LDAuM2wwLjQsMC43YzAuMi0wLjEsMC40LTAuMiwwLjYtMC4yYzAuMi0wLjEsMC4zLTAuMSwwLjUtMC4xYzAuMiwwLDAuNCwwLDAuNSwwLjFjMC4xLDAuMSwwLjIsMC4yLDAuMiwwLjRjLTAuNCwwLTAuNywwLjEtMS4xLDAuMWMtMC4zLDAtMC41LDAuMS0wLjcsMC4zYy0wLjIsMC4xLTAuMywwLjItMC40LDAuNGMtMC4xLDAuMi0wLjEsMC4zLTAuMSwwLjVDMjMuMywxMi44LDIzLjMsMTIuOSwyMy4zLDEzLjFMMjMuMywxMy4xeiBNMjQuMywxMi40YzAuMS0wLjEsMC4xLTAuMSwwLjItMC4yYzAuMS0wLjEsMC4zLTAuMSwwLjQtMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMXYwLjZjLTAuMSwwLjEtMC4zLDAuMi0wLjQsMC4yYy0wLjEsMC4xLTAuMywwLjEtMC40LDAuMWMtMC4xLDAtMC4yLDAtMC40LTAuMWMtMC4xLTAuMS0wLjEtMC4xLTAuMS0wLjNDMjQuMywxMi41LDI0LjMsMTIuNCwyNC4zLDEyLjRMMjQuMywxMi40eiBNMjcuNywxNC4xbC0wLjIsMC44YzAuMSwwLDAuMiwwLDAuMiwwLjFjMC4xLDAsMC4yLDAsMC4zLDBjMC4yLDAsMC40LDAsMC42LTAuMWMwLjItMC4xLDAuMy0wLjEsMC40LTAuM2MwLjEtMC4xLDAuMy0wLjMsMC4zLTAuNGMwLjEtMC4yLDAuMi0wLjQsMC4zLTAuNmwxLjQtMy42aC0xbC0wLjUsMS41Yy0wLjEsMC4yLTAuMSwwLjQtMC4yLDAuNWMtMC4xLDAuMi0wLjEsMC40LTAuMiwwLjVoMGMtMC4xLTAuMi0wLjEtMC40LTAuMi0wLjVDMjksMTIsMjksMTEuOCwyOC45LDExLjZsLTAuNi0xLjVoLTFsMS41LDMuNGwtMC4xLDAuMmMtMC4xLDAuMS0wLjEsMC4yLTAuMywwLjNjLTAuMSwwLjEtMC4zLDAuMS0wLjUsMC4xQzI3LjksMTQuMiwyNy44LDE0LjIsMjcuNywxNC4xTDI3LjcsMTQuMUwyNy43LDE0LjF6Ii8+PC9zdmc+)}.bg-trustpay{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfNV8iIGNsYXNzPSJzdDIxIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxnIGlkPSJ0cnVzdHBheSI+PHBhdGggaWQ9IlhNTElEXzY4NV8iIGQ9Ik0yMC44LDEzLjRjLTAuNCwwLTAuNywwLTEuMSwwYzAuNC0xLjgsMC43LTMuNiwxLjEtNS40YzAuOSwwLDEuOCwwLDIuNywwYzAuMiwwLDAuNCwwLjEsMC42LDAuMWMwLjMsMC4xLDAuNiwwLjQsMC42LDAuN2MwLjEsMC43LTAuMSwxLjMtMC41LDEuOWMtMC40LDAuNS0wLjksMC42LTEuNCwwLjZjLTAuNCwwLTAuOSwwLTEuMywwYy0wLjEsMC0wLjIsMC0wLjIsMC4xQzIxLjEsMTIuMiwyMC45LDEyLjgsMjAuOCwxMy40eiBNMjEuNCwxMC41YzAuNCwwLDAuNywwLDEuMSwwYzAuNiwwLDAuOC0wLjIsMS0wLjhjMC0wLjEsMC0wLjEsMC0wLjJjMC0wLjItMC4xLTAuNC0wLjMtMC40Yy0wLjUtMC4xLTEtMC4xLTEuNS0wLjFDMjEuNiw5LjUsMjEuNSwxMCwyMS40LDEwLjV6IE0yNy40LDEzLjRjLTAuMywwLTAuNiwwLTEsMGMwLTAuMSwwLTAuMSwwLTAuMmMtMC4yLDAuMS0wLjUsMC4yLTAuNywwLjJjLTAuMywwLTAuNywwLjEtMSwwYy0wLjUtMC4xLTAuNy0wLjUtMC42LTEuMWMwLjEtMC43LDAuNy0xLjIsMS40LTEuM2MwLjQtMC4xLDAuOC0wLjEsMS4yLTAuMmMwLjEsMCwwLjIsMCwwLjItMC4yYzAtMC4xLDAtMC4xLDAtMC4yYzAtMC4yLDAtMC40LTAuMy0wLjRjLTAuMiwwLTAuMywwLTAuNSwwYy0wLjMsMC0wLjUsMC4xLTAuNiwwLjRjLTAuMywwLTAuNiwwLTEsMGMwLTAuNCwwLjQtMC45LDAuOC0xLjFjMC41LTAuMiwxLTAuMiwxLjQtMC4yYzAuMiwwLDAuNCwwLjEsMC42LDAuMWMwLjQsMC4xLDAuNSwwLjQsMC41LDAuOUMyNy44LDExLjQsMjcuNiwxMi4zLDI3LjQsMTMuNEMyNy40LDEzLjMsMjcuNCwxMy40LDI3LjQsMTMuNHogTTI2LjcsMTEuNmMtMC40LDAuMS0wLjgsMC4xLTEuMSwwLjJjLTAuMywwLjEtMC41LDAuMy0wLjUsMC42YzAsMC4xLDAsMC4yLDAuMiwwLjNjMC40LDAuMiwxLDAsMS4yLTAuNEMyNi42LDEyLDI2LjcsMTEuOCwyNi43LDExLjZ6IE0zMCwxMi4zYzAuMy0wLjUsMC41LTEsMC44LTEuNmMwLjItMC40LDAuNC0wLjgsMC42LTEuMWMwLTAuMSwwLjEtMC4xLDAuMi0wLjFjMC4zLDAsMC42LDAsMSwwYy0wLjEsMC4yLTAuMiwwLjQtMC4zLDAuNmMtMC43LDEuMy0xLjUsMi42LTIuMiwzLjljMCwwLDAsMCwwLDAuMUMyOS40LDE0LjksMjksMTUsMjgsMTVjMCwwLDAsMC0wLjEsMGMwLjEtMC4zLDAuMS0wLjUsMC4yLTAuOGMwLjEsMCwwLjMsMCwwLjQsMGMwLjMsMCwwLjYtMC4zLDAuNy0wLjZjMCwwLDAtMC4xLDAtMC4xYy0wLjMtMS4xLTAuNS0yLjMtMC42LTMuNGMwLTAuMiwwLTAuNCwwLTAuNmMwLjQsMCwwLjgsMCwxLjEsMEMyOS43LDEwLjQsMjkuOCwxMS4zLDMwLDEyLjNDMjkuOSwxMi4zLDMwLDEyLjMsMzAsMTIuM3oiLz48cGF0aCBpZD0iWE1MSURfNjc4XyIgY2xhc3M9InN0MCIgZD0iTTE3LDEwLjZjLTAuMywwLTAuNywwLTEsMGMwLTAuMSwwLTAuMSwwLTAuMWMwLTAuMi0wLjEtMC4zLTAuMi0wLjNjLTAuMiwwLTAuNSwwLTAuNywwYy0wLjEsMC0wLjIsMC0wLjIsMC4xYy0wLjEsMC4xLTAuMSwwLjItMC4xLDAuM2MwLDAuMSwwLjEsMC4yLDAuMiwwLjJjMC40LDAuMSwwLjcsMC4yLDEuMSwwLjNjMC4xLDAsMC4yLDAuMSwwLjMsMC4xYzAuNSwwLjIsMC43LDAuNiwwLjUsMS4yYy0wLjIsMC42LTAuNywwLjktMS4zLDFjLTAuNSwwLjEtMSwwLjEtMS41LTAuMWMtMC41LTAuMS0wLjgtMC41LTAuOC0xLjFjMC0wLjEsMC0wLjIsMC4yLTAuMmMwLjMsMCwwLjUsMCwwLjgsMGMwLjEsMCwwLjEsMCwwLjEsMC4xYzAsMC4zLDAuMSwwLjQsMC40LDAuNGMwLjIsMCwwLjQsMCwwLjcsMGMwLjEsMCwwLjIsMCwwLjItMC4xYzAuMi0wLjEsMC4yLTAuMiwwLjItMC40YzAtMC4yLTAuMS0wLjItMC4zLTAuM2MtMC40LTAuMS0wLjctMC4yLTEuMS0wLjNjLTAuMSwwLTAuMi0wLjEtMC4zLTAuMWMtMC40LTAuMi0wLjUtMC40LTAuNS0wLjhjMC4xLTAuOSwwLjYtMS4zLDEuNC0xLjRjMC40LDAsMC44LDAsMS4xLDBjMC4yLDAsMC40LDAuMSwwLjUsMC4yQzE3LDkuNywxNy4xLDEwLjIsMTcsMTAuNnogTTEzLjEsOS40Yy0wLjEsMC40LTAuMSwwLjgtMC4yLDEuMWMtMC4yLDAuOS0wLjQsMS44LTAuNSwyLjdjMCwwLjEtMC4xLDAuMS0wLjEsMC4xYy0wLjMsMC0wLjYsMC0wLjksMGMwLTAuMSwwLTAuMiwwLTAuM2MtMC4yLDAuMS0wLjQsMC4yLTAuNiwwLjNjLTAuNCwwLjEtMC45LDAuMS0xLjMsMEM5LjEsMTMuMyw5LDEzLjEsOSwxMi44YzAtMC40LDAuMS0wLjgsMC4xLTEuMmMwLjEtMC42LDAuMy0xLjMsMC40LTEuOWMwLTAuMSwwLjEtMC4yLDAuMi0wLjJjMC4zLDAsMC42LDAsMC45LDBjLTAuMSwwLjMtMC4xLDAuNi0wLjIsMC45Yy0wLjEsMC42LTAuMiwxLjEtMC4zLDEuN2MtMC4xLDAuNCwwLjEsMC42LDAuNSwwLjZjMC43LDAsMC45LTAuMywxLTAuOGMwLjEtMC43LDAuMy0xLjUsMC40LTIuMmMwLTAuMSwwLjEtMC4yLDAuMi0wLjJDMTIuNSw5LjUsMTIuOCw5LjQsMTMuMSw5LjR6IE0xMS40LDEzLjFMMTEuNCwxMy4xTDExLjQsMTMuMUwxMS40LDEzLjF6IE00LjYsMTMuNGMtMC40LDAtMC43LDAtMS4xLDBDMy44LDExLjksNCwxMC40LDQuMyw5QzMuOCw5LDMuMyw5LDIuNyw5YzAuMS0wLjMsMC4xLTAuNiwwLjItMC45QzIuOSw4LjEsMyw4LDMsOGMwLjQsMCwwLjgsMCwxLjIsMGMwLjUsMCwwLjksMCwxLjQsMGMwLjUsMCwxLDAsMS41LDBjMCwwLDAuMSwwLDAuMSwwQzcuMiw4LjMsNy4yLDguNiw3LjEsOC45QzcuMSw4LjksNyw5LDYuOSw5QzYuNSw5LDYuMSw5LDUuNiw5QzUuNSw5LDUuNSw5LDUuNCw5LjFDNS4yLDEwLjUsNC45LDExLjksNC42LDEzLjRDNC42LDEzLjMsNC42LDEzLjQsNC42LDEzLjR6IE0xOS4zLDguNWMtMC4xLDAuMy0wLjEsMC42LTAuMiwxYzAuMiwwLDAuNCwwLDAuNywwYy0wLjEsMC4zLTAuMSwwLjYtMC4yLDAuOWMtMC4yLDAtMC40LDAtMC43LDBjLTAuMSwwLjUtMC4yLDAuOS0wLjMsMS4zYzAsMC4yLTAuMSwwLjQtMC4xLDAuNmMtMC4xLDAuMywwLDAuNCwwLjMsMC40YzAuMSwwLDAuMiwwLDAuMywwYzAsMC4zLTAuMSwwLjUtMC4xLDAuN2MwLDAtMC4xLDAuMS0wLjEsMC4xYy0wLjMsMC0wLjcsMC0xLDBjLTAuMywwLTAuNS0wLjItMC40LTAuNmMwLjEtMC41LDAuMi0xLDAuMy0xLjVjMC4xLTAuNCwwLjEtMC43LDAuMi0xLjFjLTAuMiwwLTAuMywwLTAuNSwwYzAuMS0wLjMsMC4xLTAuNSwwLjItMC44YzAsMCwwLjEtMC4xLDAuMS0wLjFjMC40LDAsMC40LDAsMC41LTAuNGMwLTAuMSwwLTAuMSwwLTAuMmMwLjEtMC40LDAuMS0wLjQsMC41LTAuNEMxOC45LDguNSwxOS4xLDguNSwxOS4zLDguNXogTTcuNyw5LjRjMCwwLjEsMCwwLjMtMC4xLDAuNEM4LDkuNCw4LjUsOS4zLDksOS40QzksOS43LDguOSwxMCw4LjksMTAuNGMtMC4yLDAtMC40LDAtMC42LDBjLTAuNCwwLjEtMC42LDAuMy0wLjcsMC43Yy0wLjEsMC41LTAuMiwwLjktMC40LDEuNGMtMC4xLDAuMy0wLjEsMC41LTAuMiwwLjhjMCwwLTAuMSwwLjEtMC4xLDAuMWMtMC4zLDAtMC42LDAtMSwwYzAuMS0wLjUsMC4yLTEsMC4zLTEuNWMwLjItMC44LDAuMy0xLjUsMC41LTIuM2MwLTAuMSwwLjEtMC4yLDAuMi0wLjJDNy4yLDkuNSw3LjUsOS40LDcuNyw5LjR6Ii8+PC9nPjwvc3ZnPg==)}.bg-unionpay{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzUyXzNfIiBjbGFzcz0ic3QxNCIgZD0iTTMsMGgzMGMxLjcsMCwzLDEuMywzLDN2MTZjMCwxLjctMS4zLDMtMywzSDNjLTEuNywwLTMtMS4zLTMtM1YzQzAsMS4zLDEuMywwLDMsMHoiLz48Zz48Zz48cGF0aCBjbGFzcz0ic3QxNiIgZD0iTTI0LjksMTZoLTAuM2wxLTMuNkgyNmwwLjEtMC40djAuNGMwLDAuMiwwLjIsMC41LDAuNywwLjRoMC42bDAuMi0wLjdoLTAuMmMtMC4xLDAtMC4yLDAtMC4yLTAuMXYtMC40aC0xLjFsMCwwYy0wLjMsMC0xLjQsMC0xLjYsMC4xQzI0LjMsMTEuOSwyNCwxMiwyNCwxMmwwLjEtMC40aC0xbC0wLjIsMC43bC0xLDMuNmgtMC4ybC0wLjIsMC43aDJsLTAuMSwwLjJoMWwwLjEtMC4yaDAuM0wyNC45LDE2eiBNMjMuNywxNmgtMC44bDAuMi0wLjhoMC44TDIzLjcsMTZ6IE0yNC4xLDE0LjVjMCwwLTAuMiwwLTAuNCwwLjFjLTAuMiwwLjEtMC41LDAuMi0wLjUsMC4ybDAuMy0wLjloMC44TDI0LjEsMTQuNXogTTI0LjEsMTMuMmMtMC4yLDAuMS0wLjUsMC4yLTAuNSwwLjJsMC4zLTAuOWgwLjhsLTAuMiwwLjdDMjQuNSwxMy4xLDI0LjMsMTMuMSwyNC4xLDEzLjJ6IE0yNS42LDEzLjhoMS4ybC0wLjIsMC42aC0xLjJMMjUuMiwxNWgxbC0wLjgsMS4xYy0wLjEsMC4xLTAuMSwwLjEtMC4yLDAuMWMtMC4xLDAtMC4xLDAuMS0wLjIsMC4xaC0wLjNMMjQuNiwxN2gwLjhjMC40LDAsMC42LTAuMiwwLjgtMC40bDAuNS0wLjhsMC4xLDAuOGMwLDAuMSwwLjEsMC4yLDAuMiwwLjNjMC4xLDAsMC4yLDAuMSwwLjMsMC4xczAuMiwwLDAuMywwaDAuNGwwLjItMC44SDI4Yy0wLjEsMC0wLjIsMC0wLjItMC4xczAtMC4xLDAtMC4ybC0wLjEtMC44aC0wLjVsMC4yLTAuM2gxLjJsMC4yLTAuNmgtMS4xbDAuMi0wLjZoMS4xbDAuMi0wLjdoLTMuMkwyNS42LDEzLjh6IE0xNS44LDE2LjJsMC4zLTAuOWgxLjFsMC4yLTAuN2gtMS4xbDAuMi0wLjZoMS4xbDAuMi0wLjdIMTVMMTQuOCwxNGgwLjZsLTAuMiwwLjZoLTAuNmwtMC4yLDAuN0gxNWwtMC4zLDEuMmMtMC4xLDAuMiwwLDAuMiwwLjEsMC4zYzAuMSwwLjEsMC4xLDAuMSwwLjIsMC4yYzAuMSwwLDAuMiwwLjEsMC4zLDAuMWgxLjNsMC4yLTAuOGwtMC42LDAuMUMxNi4xLDE2LjMsMTUuOCwxNi4zLDE1LjgsMTYuMnogTTE1LjksMTEuN2wtMC4zLDAuNWMtMC4xLDAuMS0wLjEsMC4yLTAuMiwwLjJjLTAuMSwwLTAuMSwwLTAuMiwwaC0wLjFsLTAuMiwwLjdoMC41YzAuMiwwLDAuNC0wLjEsMC41LTAuMWMwLjEtMC4xLDAuMSwwLDAuMi0wLjFsMC4yLTAuMmgxLjVsMC4yLTAuN2gtMS4xbDAuMi0wLjRIMTUuOXogTTE4LjIsMTYuMmMwLDAsMC0wLjEsMC0wLjJsMC40LTEuNGgxLjVjMC4yLDAsMC40LDAsMC41LDBjMC4xLDAsMC4yLTAuMSwwLjMtMC4xYzAuMS0wLjEsMC4yLTAuMiwwLjMtMC4yYzAuMS0wLjEsMC4yLTAuMywwLjMtMC42bDAuNS0xLjhoLTEuNmMwLDAtMC41LDAuMS0wLjcsMC4ycy0wLjUsMC4zLTAuNSwwLjNsMC4xLTAuNWgtMWwtMS4zLDQuNkMxNywxNi41LDE3LDE2LjYsMTcsMTYuN3MwLjEsMC4yLDAuMiwwLjJjMC4xLDAuMSwwLjIsMC4xLDAuMywwLjFjMC4xLDAsMC4zLDAsMC41LDBoMC43bDAuMi0wLjhsLTAuNiwwQzE4LjMsMTYuMiwxOC4yLDE2LjIsMTguMiwxNi4yeiBNMTkuMiwxMi41aDEuNmwtMC4xLDAuNGMwLDAtMC44LDAtMC45LDBDMTkuMywxMywxOSwxMy4yLDE5LDEzLjJMMTkuMiwxMi41eiBNMTguOSwxMy41aDEuNmwtMC4xLDAuM2MwLDAtMC4xLDAtMC4yLDBoLTEuM0wxOC45LDEzLjV6IE0yMC40LDE0LjljMCwwLjEsMCwwLjEtMC4xLDAuMWMwLDAtMC4xLDAtMC4yLDBIMjB2LTAuNGgtMC45bDAsMS45YzAsMC4xLDAsMC4yLDAuMSwwLjNjMC4xLDAuMSwwLjQsMC4xLDAuOCwwLjFoMC42bDAuMi0wLjdsLTAuNSwwaC0wLjJjMCwwLTAuMSwwLTAuMS0wLjFjMCwwLTAuMSwwLTAuMS0wLjF2LTAuNWwwLjUsMGMwLjMsMCwwLjQtMC4xLDAuNS0wLjJzMC4xLTAuMiwwLjItMC4zbDAuMS0wLjRoLTAuN0wyMC40LDE0Ljl6IE05LjIsNS4xYy0wLjksMC0xLjEsMC0xLjIsMGMwLDAuMi0wLjYsMy0wLjYsM0M3LjMsOC42LDcuMiw5LDYuOSw5LjNDNi43LDkuNCw2LjUsOS41LDYuMiw5LjVjLTAuNCwwLTAuNi0wLjItMC42LTAuNlY4LjhMNS43LDhjMCwwLDAuNi0yLjYsMC43LTIuOWMwLDAsMCwwLDAsMEM1LjIsNSw1LDUsNSw1YzAsMCwwLDAuMiwwLDAuMkw0LjMsOC4xTDQuMiw4LjNMNC4xLDkuMWMwLDAuMiwwLjEsMC40LDAuMSwwLjZjMC4zLDAuNSwxLjEsMC42LDEuNiwwLjZjMC42LDAsMS4yLTAuMSwxLjYtMC40YzAuNy0wLjQsMC44LTEsMS0xLjZsMC4xLTAuM0M4LjUsOC4xLDkuMSw1LjQsOS4yLDUuMUM5LjIsNS4xLDkuMiw1LjEsOS4yLDUuMXogTTExLjQsNy4yYy0wLjIsMC0wLjQsMC0wLjcsMC4yYy0wLjEsMC4xLTAuMiwwLjEtMC4zLDAuMmwwLjEtMC4zbC0wLjEtMC4xQzkuOSw3LjMsOS44LDcuNCw5LjMsNy40bC0wLjEsMEM5LjIsNy45LDkuMiw4LjMsOC45LDkuM0M4LjksOS42LDguOCwxMCw4LjcsMTAuM2wwLDAuMWMwLjUsMCwwLjcsMCwxLjEsMGwwLTAuMWMwLjEtMC4zLDAuMS0wLjQsMC4yLTFjMC4xLTAuMywwLjItMC45LDAuMi0xLjFjMC4xLTAuMSwwLjItMC4xLDAuMy0wLjFjMC4yLDAsMC4yLDAuMiwwLjIsMC4zYzAsMC4yLTAuMSwwLjYtMC4yLDFsLTAuMSwwLjNjLTAuMSwwLjItMC4xLDAuNC0wLjEsMC42bDAsMGMwLjUsMCwwLjYsMCwxLjEsMGwwLjEtMC4xYzAuMS0wLjUsMC4xLTAuNiwwLjItMS4zbDAuMS0wLjNjMC4xLTAuNiwwLjItMC45LDAuMS0xLjJDMTEuOSw3LjMsMTEuNyw3LjIsMTEuNCw3LjJ6IE0xMy45LDcuOUMxMy42LDcuOSwxMy40LDgsMTMuMiw4Yy0wLjIsMC0wLjMsMC4xLTAuNiwwLjFsMCwwbDAsMGMwLDAuMi0wLjEsMC40LTAuMSwwLjZjMCwwLjItMC4xLDAuNS0wLjIsMC44Yy0wLjEsMC4zLTAuMSwwLjMtMC4xLDAuNGMwLDAuMS0wLjEsMC4yLTAuMSwwLjRsMCwwdjBjMC4yLDAsMC40LDAsMC42LDBzMC4zLDAsMC42LDBsMCwwbDAsMGMwLTAuMiwwLjEtMC4zLDAuMS0wLjRjMC0wLjEsMC4xLTAuMywwLjItMC43YzAuMS0wLjIsMC4xLTAuNCwwLjEtMC42QzEzLjcsOC4zLDEzLjgsOC4xLDEzLjksNy45TDEzLjksNy45TDEzLjksNy45eiBNMTUuMywxMC41YzAuNSwwLDEtMC4xLDEuNC0wLjZjMC4zLTAuMywwLjQtMC44LDAuNS0xYzAuMi0wLjcsMC0xLTAuMS0xLjJjLTAuMi0wLjMtMC42LTAuNC0xLTAuNGMtMC4yLDAtMC44LDAtMS4zLDAuNWMtMC4zLDAuMy0wLjUsMC44LTAuNiwxLjJjLTAuMSwwLjQtMC4yLDEuMiwwLjUsMS40QzE0LjgsMTAuNCwxNS4xLDEwLjUsMTUuMywxMC41eiBNMTUuMyw4LjlDMTUuNCw4LjQsMTUuNSw4LDE1LjksOGMwLjMsMCwwLjMsMC4zLDAuMiwwLjhjMCwwLjEtMC4xLDAuNS0wLjIsMC43Yy0wLjEsMC4xLTAuMiwwLjItMC4zLDAuMmMwLDAtMC4yLDAtMC4yLTAuM0MxNS4yLDkuMywxNS4yLDkuMSwxNS4zLDguOXogTTI0LjksOC45Yy0wLjEsMC40LTAuMiwxLjIsMC41LDEuNGMwLjIsMC4xLDAuNCwwLjEsMC42LDAuMWMwLjIsMCwwLjQtMC4xLDAuNi0wLjNjMCwwLjEsMCwwLjEtMC4xLDAuMmwwLDBjMC41LDAsMC42LDAsMS4yLDBsMC4xLDBjMC4xLTAuNSwwLjEtMC45LDAuMy0xLjhjMC4xLTAuNCwwLjItMC44LDAuMy0xLjNsMC0wLjFjLTAuNSwwLjEtMC43LDAuMS0xLjIsMC4ybDAsMGMwLDAuMSwwLDAuMSwwLDAuMWMtMC4xLTAuMS0wLjItMC4yLTAuNC0wLjNjLTAuMi0wLjEtMC44LDAtMS4yLDAuNUMyNS4yLDguMSwyNSw4LjUsMjQuOSw4Ljl6IE0yNiw5QzI2LjIsOC40LDI2LjMsOCwyNi42LDhjMC4yLDAsMC4zLDAuMiwwLjMsMC42YzAsMC4xLDAsMC4yLTAuMSwwLjNjMCwwLjItMC4xLDAuMy0wLjEsMC41YzAsMC4xLTAuMSwwLjItMC4xLDAuM2MtMC4xLDAuMS0wLjMsMC4yLTAuNCwwLjJjMCwwLTAuMiwwLTAuMi0wLjNDMjYsOS4zLDI2LDkuMSwyNiw5eiBNMTguNCwxMC40TDE4LjQsMTAuNGMwLjEtMC4zLDAuMS0wLjQsMC4yLTFjMC4xLTAuMywwLjItMC45LDAuMi0xLjFjMC4xLTAuMSwwLjItMC4xLDAuMy0wLjFjMC4yLDAsMC4yLDAuMiwwLjIsMC4zYzAsMC4yLTAuMSwwLjYtMC4yLDFsLTAuMSwwLjNjLTAuMSwwLjItMC4xLDAuNC0wLjEsMC42bDAsMGMwLjUsMCwwLjYsMCwxLjEsMGwwLjEtMC4xYzAuMS0wLjUsMC4xLTAuNiwwLjItMS4zbDAuMS0wLjNjMC4xLTAuNiwwLjItMC45LDAuMS0xLjJjLTAuMS0wLjMtMC40LTAuMy0wLjYtMC4zYy0wLjIsMC0wLjQsMC0wLjcsMC4yYy0wLjEsMC4xLTAuMiwwLjEtMC4zLDAuMmwwLjEtMC4zTDE5LDcuMmMtMC41LDAuMS0wLjcsMC4xLTEuMiwwLjJsMCwwYy0wLjEsMC41LTAuMSwwLjktMC4zLDEuOGMtMC4xLDAuMy0wLjIsMC43LTAuMiwxLjFsMCwwLjFDMTcuOCwxMC40LDE4LDEwLjQsMTguNCwxMC40eiBNMjIuMSwxMC40YzAtMC4yLDAuMi0xLjEsMC4yLTEuMXMwLjItMC43LDAuMi0wLjdjMCwwLDAuMS0wLjEsMC4xLTAuMWgwLjFjMC43LDAsMS41LDAsMi4xLTAuNWMwLjQtMC4zLDAuNy0wLjgsMC44LTEuNGMwLTAuMSwwLjEtMC4zLDAuMS0wLjVjMC0wLjItMC4xLTAuNC0wLjItMC42Yy0wLjMtMC41LTAuOS0wLjUtMS43LTAuNWgtMC4zYy0wLjksMC0xLjMsMC0xLjQsMGMwLDAuMSwwLDAuMiwwLDAuMmwtMC4zLDEuNmMwLDAtMC44LDMuNC0wLjgsMy41QzIxLjYsMTAuNCwyMS45LDEwLjQsMjIuMSwxMC40eiBNMjIuNyw3LjZMMjMuMSw2VjUuOVY1LjlsMC4xLDBjMCwwLDAuNywwLjEsMC44LDAuMWMwLjMsMC4xLDAuNCwwLjQsMC4zLDAuOGMtMC4xLDAuMy0wLjMsMC42LTAuNiwwLjhjLTAuMiwwLjEtMC41LDAuMS0wLjgsMC4xaC0wLjJMMjIuNyw3LjZ6IE0zMS45LDcuM0wzMS45LDcuM2MtMC42LDAuMS0wLjcsMC4xLTEuMiwwLjFsMCwwdjBsMCwwYy0wLjQsMC45LTAuMywwLjctMC42LDEuNGMwLDAsMC0wLjEsMC0wLjFMMzAsNy4zbC0wLjEtMC4xYy0wLjYsMC4xLTAuNiwwLjEtMS4xLDAuMmwwLDBjMCwwLDAsMCwwLDAuMWwwLDBjMC4xLDAuMywwLjEsMC4zLDAuMSwwLjhjMCwwLjMsMC4xLDAuNSwwLjEsMC44YzAuMSwwLjQsMC4xLDAuNiwwLjEsMS4zYy0wLjMsMC42LTAuNCwwLjgtMC44LDEuM2wwLDBsLTAuMiwwLjRjMCwwLjEtMC4xLDAuMS0wLjEsMC4xYzAsMC0wLjEsMC0wLjIsMGgtMC4xbC0wLjIsMC43aDAuN2MwLjQsMCwwLjYtMC4yLDAuOC0wLjRsMC40LTAuOGwwLDBsMC4xLTAuMUMyOS44LDExLjEsMzEuOSw3LjMsMzEuOSw3LjN6IE0xMy45LDdjLTAuMi0wLjItMC43LTAuMS0xLDAuMWMtMC4zLDAuMi0wLjMsMC41LTAuMSwwLjZjMC4yLDAuMSwwLjcsMC4xLDAuOS0wLjFDMTQuMSw3LjUsMTQuMSw3LjIsMTMuOSw3eiIvPjwvZz48L2c+PC9zdmc+)}.bg-visa{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzUyXzJfIiBjbGFzcz0ic3QxIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMSwxNUg4LjlMNy40LDguN0M3LjMsOC41LDcuMSw4LjIsNi45LDguMUM2LjMsNy44LDUuNyw3LjUsNSw3LjRWNy4yaDMuM2MwLjQsMCwwLjgsMC4zLDAuOSwwLjhsMC44LDQuNWwyLjEtNS4zaDJMMTEsMTV6IE0xNS4zLDE1aC0ybDEuNi03LjhoMkwxNS4zLDE1eiBNMTkuNCw5LjNjMC4xLTAuNCwwLjQtMC43LDAuOC0wLjdjMC43LTAuMSwxLjMsMC4xLDEuOSwwLjRsMC4zLTEuN0MyMS45LDcuMSwyMS4zLDcsMjAuNyw3Yy0xLjksMC0zLjMsMS4xLTMuMywyLjZjMC4xLDEsMC44LDEuOCwxLjcsMi4xYzAuOCwwLjQsMSwwLjYsMSwxYy0wLjEsMC41LTAuNiwwLjktMS4xLDAuOGMwLDAsMCwwLDAsMGMtMC43LDAtMS40LTAuMi0yLTAuNWwtMC4zLDEuN2MwLjcsMC4zLDEuNCwwLjQsMi4xLDAuNGMyLjEsMC4xLDMuNS0xLDMuNS0yLjZDMjIuMSwxMC4zLDE5LjQsMTAuMiwxOS40LDkuM0wxOS40LDkuM0wxOS40LDkuM3ogTTI5LDE1bC0xLjYtNy44aC0xLjdjLTAuNCwwLTAuNywwLjItMC44LDAuNkwyMi4xLDE1aDJsMC40LTEuMUgyN2wwLjIsMS4xTDI5LDE1TDI5LDE1eiBNMjYuMSw5LjNsMC42LDIuOUgyNUwyNi4xLDkuM3oiLz48L3N2Zz4=)}.bg-webmoney{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU2X2NvcHkiIGNsYXNzPSJzdDIyIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxwYXRoIGlkPSJDb21iaW5lZC1TaGFwZSIgY2xhc3M9InN0MCIgZD0iTTE4LDQuM2MxLjEsMCwyLjEsMC4yLDMsMC43YzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4ybC0wLjYsMC42bC0wLjktMWwtMS42LDEuNGwtMS0xbC0zLDIuNmwxLjksMi4xbC0wLjcsMC42bDEuOSwyLjFsLTAuNywwLjZsMi43LDIuOWwxLjYtMS40bDEuNCwxLjVjLTAuMywwLjItMC42LDAuNC0wLjksMC42Yy0xLDAuNi0yLjEsMC45LTMuNCwwLjljLTMuOCwwLTYuOC0zLTYuOC02LjdDMTEuMSw3LjMsMTQuMiw0LjMsMTgsNC4zeiBNMTYuNywxMC42bDEuNi0xLjRsMS41LDEuNmwtMS42LDEuNEwxNi43LDEwLjZMMTYuNywxMC42eiBNMTcuOSwxMy40bDEuNi0xLjVsMS41LDEuNkwxOS4zLDE1TDE3LjksMTMuNEwxNy45LDEzLjR6IE0xNS42LDcuOGwxLjYtMS40TDE4LjYsOEwxNyw5LjRMMTUuNiw3Ljh6IE0xOC41LDcuMUwxOS44LDZsMS4xLDEuMmwtMS4yLDEuMUwxOC41LDcuMXogTTIwLjcsMTJsMS4yLTEuMWwxLjEsMS4ybC0xLjIsMS4xTDIwLjcsMTJ6IE0yMS44LDE0LjVsMS4yLTEuMWwxLjEsMS4ybC0xLjIsMS4xTDIxLjgsMTQuNUwyMS44LDE0LjV6IE0yMi4zLDguOWwwLjgtMC43TDIzLjgsOUwyMyw5LjdMMjIuMyw4Ljl6IE0yMS4yLDYuNUwyMiw1LjhsMC43LDAuOEwyMiw3LjNMMjEuMiw2LjV6IE0yMy4zLDExLjNsMC44LTAuN2wwLjcsMC44TDI0LDEyLjFMMjMuMywxMS4zTDIzLjMsMTEuM3ogTTE5LjcsOS41bDEuMi0xLjFMMjIsOS42bC0xLjIsMS4xTDE5LjcsOS41eiIvPjwvc3ZnPg==)}.bg-yandex{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfNl8iIGNsYXNzPSJzdDI0IiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxnPjxwYXRoIGlkPSJzdmdfMyIgY2xhc3M9InN0MCIgZD0iTTEwLjMsNi40YzAuMSwwLDAuMywwLDAuNCwwYzAuMiwwLDAuNCwwLDAuNSwwYzAsMC4xLDAsMC4xLDAsMC4yYy0wLjcsMS45LTEuNCwzLjgtMi4xLDUuN2MwLDAuMSwwLDAuMSwwLDAuMmMwLDEsMCwxLjksMCwyLjljLTAuMSwwLTAuMiwwLTAuMiwwYy0wLjIsMC0wLjQsMC0wLjYsMGMwLTEsMC0yLjEsMC0zLjFDNy42LDEwLjgsNyw5LjIsNi40LDcuNmMwLTAuMS0wLjEtMC4zLTAuMS0wLjRjMC4yLDAsMC41LDAsMC43LDBjMC4xLDAsMC4yLDAsMC4yLDAuMWMwLjMsMSwwLjcsMiwxLDNjMC4xLDAuNCwwLjMsMC44LDAuNCwxLjJjMC4xLTAuNSwwLjMtMS4xLDAuNS0xLjZDOS41LDguNyw5LjksNy41LDEwLjMsNi40eiIvPjxwYXRoIGlkPSJYTUxJRF8xMzYwXyIgY2xhc3M9InN0MzUiIGQ9Ik0xNy43LDExYzAsMS41LDAsMywwLDQuNWMwLDAtMC4xLDAtMC4xLDAuMWMtMC4zLDAtMC41LDAtMC44LDBjMC0xLjUsMC0yLjksMC00LjRjLTAuMS0wLjItMC4yLTAuNC0wLjQtMC40Yy0wLjMtMC4xLTAuNywwLTEsMC4yYzAsMS40LDAsMi44LDAsNC4yYzAsMC4yLDAsMC4zLDAsMC41Yy0wLjMsMC0wLjUsMC0wLjgsMGMwLDAtMC4xLDAtMC4xLTAuMWMwLTEuOCwwLTMuNiwwLTUuNGMwLjEsMCwwLjEsMCwwLjIsMGMwLjIsMCwwLjUsMCwwLjcsMGMwLDAuMSwwLDAuMiwwLDAuM2MwLjEtMC4xLDAuMi0wLjEsMC4zLTAuMmMwLDAsMC4xLDAsMC4xLDBsMCwwYzAuNC0wLjIsMC45LTAuMiwxLjMtMC4xQzE3LjUsMTAuMSwxNy44LDEwLjYsMTcuNywxMXogTTEzLjYsMTUuNGMwLDAuMS0wLjEsMC4xLTAuMSwwLjFjLTAuMSwwLTAuMywwLTAuNCwwYzAtMC4xLTAuMS0wLjEtMC4xLTAuMmMwLTAuMS0wLjEtMC4yLTAuMS0wLjJjLTAuMiwwLjMtMC41LDAuNS0wLjksMC41Yy0wLjMsMC4xLTAuNy0wLjEtMC45LTAuM2MtMC4yLTAuMi0wLjQtMC41LTAuNS0wLjdjMC0wLjEsMC0wLjEtMC4xLTAuMmMwLDAsMC0wLjEsMC0wLjFjMC0wLjEsMC0wLjEsMC0wLjJjMC0wLjIsMC0wLjUsMC0wLjdjMC0wLjIsMC4xLTAuNCwwLjEtMC41YzAuMS0wLjMsMC4zLTAuNiwwLjYtMC44YzAuNC0wLjQsMS4xLTAuMywxLjYtMC4xYzAtMC4zLDAtMC41LDAtMC41YzAtMC4xLDAtMC4zLTAuMS0wLjRjMCwwLDAtMC4xLDAtMC4xYy0wLjEtMC4yLTAuMi0wLjQtMC4zLTAuNGMtMC4yLTAuMS0wLjQsMC0wLjYsMGMwLDAtMC4xLDAtMC4xLDBjMCwwLTAuMSwwLTAuMSwwLjFjLTAuMSwwLjEtMC4zLDAuMi0wLjQsMC4xYzAtMC4xLTAuMS0wLjItMC4xLTAuMmMtMC4xLTAuMS0wLjItMC4zLTAuMi0wLjRjMCwwLDAuMSwwLDAuMS0wLjFjMC4yLTAuMSwwLjMtMC4xLDAuNS0wLjJsMCwwdjBjMC4yLTAuMSwwLjUtMC4xLDAuOC0wLjFjMC4xLDAsMC4zLDAsMC40LDAuMWMwLjMsMC4xLDAuNSwwLjMsMC43LDAuNWMwLDAsMCwwLjEsMC4xLDAuMWMwLDAuMSwwLjEsMC4xLDAuMSwwLjJjMCwwLDAsMC4xLDAsMC4xYzAsMCwwLDAuMSwwLDAuMWMwLDAuMSwwLDAuMSwwLDAuMmMwLDAuMiwwLDAuNCwwLjEsMC41QzEzLjYsMTIuOSwxMy42LDE0LjIsMTMuNiwxNS40eiBNMTIuNywxMi43Yy0wLjEtMC4xLTAuNy0wLjQtMS0wLjFjLTAuNCwwLjQtMC40LDEtMC40LDEuM2MwLDAuMiwwLjIsMSwwLjcsMWMwLjUsMCwwLjctMC4zLDAuNy0wLjNDMTIuNywxNC41LDEyLjcsMTMuNSwxMi43LDEyLjd6IE0xMi43LDEyLjdDMTIuNywxMi43LDEyLjcsMTIuNywxMi43LDEyLjdDMTIuNywxMi43LDEyLjcsMTIuNywxMi43LDEyLjd6IE0yNiwxMS42QzI2LDEyLDI2LDEyLjUsMjYsMTIuOWMtMC4yLDAtMS44LDAtMi4zLTAuMWMwLDAuMiwwLDAuNCwwLDAuN2MwLDAuMSwwLDAuMSwwLDAuMmMwLDAsMCwwLjEsMCwwLjFjMCwwLDAsMC4xLDAsMC4xYzAsMC4xLDAuMSwwLjIsMC4xLDAuMmMwLjEsMC4zLDAuNCwwLjUsMC43LDAuNmMwLjQsMC4xLDAuOCwwLDEuMi0wLjFjMCwwLDAsMC4xLDAsMC4xYzAsMC4xLDAsMC4xLDAsMC4yYzAsMC4xLDAsMC4xLDAuMSwwLjJjMCwwLDAsMC4xLDAsMC4xYy0wLjMsMC4yLTAuNywwLjMtMSwwLjNjLTAuNCwwLjEtMC44LDAtMS4xLTAuM2MtMC4zLTAuMi0wLjQtMC40LTAuNi0wLjdjMCwwLDAtMC4xLDAtMC4xYzAtMC4xLTAuMS0wLjEtMC4xLTAuMmMwLTAuMSwwLTAuMS0wLjEtMC4yYzAsMCwwLTAuMSwwLTAuMWMtMC4xLTAuMy0wLjEtMC42LTAuMS0wLjljMC0wLjMsMC0wLjYsMC0xYzAtMC4yLDAuMS0wLjQsMC4xLTAuNmMwLTAuMSwwLTAuMiwwLjEtMC4zYzAsMCwwLTAuMSwwLTAuMWMwLDAsMC0wLjEsMC0wLjFjMC0wLjEsMC0wLjEsMC4xLTAuMmMwLTAuMSwwLjEtMC4xLDAuMS0wLjJjMC4xLTAuMiwwLjMtMC41LDAuNS0wLjZsMCwwYzAuNC0wLjMsMC45LTAuMywxLjMtMC4xYzAuMiwwLjEsMC4zLDAuMiwwLjQsMC40YzAuMSwwLjEsMC4yLDAuMywwLjIsMC41YzAsMC4xLDAuMSwwLjIsMC4xLDAuNGMwLDAuMSwwLDAuMSwwLDAuMkMyNS45LDExLjQsMjUuOSwxMS41LDI2LDExLjZ6IE0yNC41LDEwLjVjLTAuNS0wLjEtMC43LDAuOC0wLjcsMS44YzAuMy0wLjEsMS4yLTAuMSwxLjMtMC4xQzI1LjEsMTAuNiwyNC42LDEwLjUsMjQuNSwxMC41eiBNMjkuNSwxNC44YzAtMC4xLTAuMS0wLjItMC4xLTAuM2MtMC4xLTAuMy0wLjMtMC42LTAuNC0xYzAtMC4xLTAuMS0wLjItMC4xLTAuM2MtMC4xLTAuMi0wLjEtMC4zLTAuMi0wLjVjMC0wLjEtMC4xLTAuMS0wLjEtMC4yYzAuMS0wLjEsMC4xLTAuMywwLjItMC40YzAuMS0wLjEsMC4xLTAuMiwwLjItMC40YzAuMS0wLjEsMC4xLTAuMiwwLjItMC40YzAuMS0wLjEsMC4xLTAuMywwLjItMC40YzAuMS0wLjEsMC4xLTAuMiwwLjEtMC4zYzAuMS0wLjEsMC4xLTAuMiwwLjItMC40YzAtMC4xLDAuMS0wLjIsMC4xLTAuNGMwLDAsMCwwLDAsMGMtMC4yLDAtMC40LDAtMC43LDBjLTAuMSwwLTAuMSwwLjEtMC4yLDAuMmMwLDAsMCwwLjEtMC4xLDAuMWMwLDAuMSwwLDAuMS0wLjEsMC4yYzAsMCwwLDAuMS0wLjEsMC4xYzAsMC4xLDAsMC4xLTAuMSwwLjJjMCwwLDAsMC4xLTAuMSwwLjFjLTAuMSwwLjItMC4xLDAuMy0wLjIsMC41YzAsMCwwLDAuMSwwLDAuMWMwLDAsMCwwLjEtMC4xLDAuMWMwLDAuMS0wLjEsMC4yLTAuMSwwLjNjLTAuMS0wLjEtMC4xLTAuMi0wLjEtMC40YzAsMCwwLTAuMS0wLjEtMC4xYzAtMC4xLDAtMC4xLTAuMS0wLjJjMCwwLDAtMC4xLTAuMS0wLjFjMC0wLjEtMC4xLTAuMi0wLjEtMC4zYzAtMC4xLTAuMS0wLjItMC4xLTAuM2MwLDAsMC0wLjEtMC4xLTAuMWMwLTAuMS0wLjEtMC4yLTAuMS0wLjNjLTAuMS0wLjEtMC4zLDAtMC41LDBjLTAuMSwwLTAuMywwLTAuNCwwLjFsMCwwYzAuMSwwLjEsMC4xLDAuMiwwLjEsMC4zYzAsMC4xLDAuMSwwLjIsMC4xLDAuM2MwLDAuMSwwLjEsMC4yLDAuMSwwLjNjMC4xLDAuMSwwLjEsMC4zLDAuMiwwLjRjMCwwLjEsMC4xLDAuMiwwLjEsMC4zYzAuMSwwLjMsMC4yLDAuNSwwLjQsMC44YzAuMSwwLjEsMCwwLjIsMCwwLjNjMCwwLjEtMC4xLDAuMS0wLjEsMC4yYzAsMC4xLTAuMSwwLjItMC4xLDAuM2MwLDAuMS0wLjEsMC4yLTAuMSwwLjNjMCwwLjEtMC4xLDAuMi0wLjEsMC4yYzAsMC4xLTAuMSwwLjEtMC4xLDAuMmMwLDAuMS0wLjEsMC4yLTAuMSwwLjNjMCwwLjEtMC4xLDAuMi0wLjEsMC4zYzAsMC4xLTAuMSwwLjItMC4xLDAuMmMwLDAuMS0wLjEsMC4yLTAuMSwwLjNjMCwwLjEtMC4xLDAuMi0wLjEsMC4zYzAsMC4xLDAsMC4xLTAuMSwwLjJjMCwwLDAuMSwwLDAuMSwwLjFjMC4yLDAsMC41LDAsMC43LDBjMC0wLjEsMC4xLTAuMiwwLjEtMC4zYzAtMC4xLDAtMC4xLDAuMS0wLjJjMCwwLDAtMC4xLDAuMS0wLjFjMCwwLDAtMC4xLDAtMC4xYzAtMC4xLDAtMC4xLDAuMS0wLjJjMCwwLDAtMC4xLDAuMS0wLjFjMCwwLDAtMC4xLDAtMC4xYzAuMS0wLjMsMC4yLTAuNSwwLjMtMC44YzAtMC4xLDAtMC4xLDAuMS0wLjJjMCwwLDAsMCwwLjEsMGMwLDAuMSwwLjEsMC4zLDAuMSwwLjRjMCwwLDAsMC4xLDAuMSwwLjFjMCwwLDAsMC4xLDAsMC4xYzAsMC4xLDAsMC4xLDAuMSwwLjJjMCwwLDAsMC4xLDAuMSwwLjFjMCwwLjEsMCwwLjEsMC4xLDAuMmMwLDAuMSwwLjEsMC4yLDAuMSwwLjNjMCwwLjEsMC4xLDAuMiwwLjEsMC4zYzAsMC4xLDAsMC4xLDAuMSwwLjJjMCwwLDAsMC4xLDAsMC4xYzAsMCwwLjEsMC4xLDAuMiwwLjFjMC4yLDAsMC40LDAsMC43LDBjMCwwLDAtMC4xLDAuMS0wLjFjLTAuMS0wLjEtMC4xLTAuMy0wLjItMC40QzI5LjUsMTQuOSwyOS41LDE0LjksMjkuNSwxNC44eiBNMjIsNy4zYzAsMi43LDAsNS40LDAsOC4xYzAsMC0wLjEsMC0wLjEsMC4xYy0wLjIsMC0wLjMsMC0wLjUsMGMtMC4xLTAuMS0wLjEtMC4yLTAuMi0wLjNjLTAuMywwLjMtMC43LDAuNS0xLjIsMC40Yy0wLjMsMC0wLjctMC4yLTAuOS0wLjVjLTAuMS0wLjEtMC4yLTAuMy0wLjMtMC41YzAtMC4xLTAuMS0wLjItMC4xLTAuMmMwLDAsMC0wLjEsMC0wLjFjMCwwLDAtMC4xLDAtMC4xYzAsMCwwLTAuMSwwLTAuMWMwLTAuMSwwLTAuMSwwLTAuMmMtMC4xLTAuNC0wLjEtMC44LTAuMS0xLjNjMC0wLjMsMC0wLjYsMC4xLTAuOWMwLTAuMSwwLTAuMSwwLTAuMmMwLDAsMC0wLjEsMC0wLjFjMCwwLDAtMC4xLDAtMC4xYzAtMC4xLDAtMC4xLDAuMS0wLjJjMC0wLjEsMC4xLTAuMiwwLjEtMC4zYzAtMC4xLDAuMS0wLjEsMC4xLTAuMmMwLjEtMC4zLDAuNC0wLjQsMC42LTAuNmMwLjQtMC4yLDAuOS0wLjIsMS40LDBjMC0wLjksMC0xLjgsMC0yLjhDMjEuNCw3LjIsMjEuNyw3LjIsMjIsNy4zQzIyLDcuMiwyMiw3LjIsMjIsNy4zeiBNMjEuMSwxNC43YzAtMC4yLDAtMi43LDAtNGMwLDAsMCwwLDAsMGMtMC4yLTAuMS0wLjUtMC4zLTAuOS0wLjJjLTEsMC4zLTEuMiw0LjEsMC4xLDQuM0MyMC40LDE0LjksMjAuOCwxNC45LDIxLjEsMTQuN3ogTTIxLjIsNy4yTDIxLjIsNy4yQzIxLjIsNy4yLDIxLjIsNy4yLDIxLjIsNy4yTDIxLjIsNy4yeiIvPjwvZz48L3N2Zz4=)}.bg-klarna{background-image:url(data:image/svg+xml;base64,PHN2ZyBpZD0nS2xhcm5hJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczNicgaGVpZ2h0PScyMic+PHN0eWxlPi5zdDF7ZmlsbDojZmZmfTwvc3R5bGU+PHBhdGggaWQ9J1JvdW5kZWRfUmVjdGFuZ2xlXzUyXzZfJyBkPSdNMyAwaDMwYzEuNyAwIDMgMS4zIDMgM3YxNmMwIDEuNy0xLjMgMy0zIDNIM2MtMS43IDAtMy0xLjMtMy0zVjNjMC0xLjcgMS4zLTMgMy0zeicgZmlsbD0nI2ViNmY5MycvPjxnIHRyYW5zZm9ybT0ndHJhbnNsYXRlKDIwIDQ0KSc+PHBhdGggaWQ9J1NoYXBlXzFfJyBjbGFzcz0nc3QxJyBkPSdNLTEwLjEtMzYuMWgtMS40YzAgMS4xLS41IDIuMi0xLjQgMi44bC0uNS40IDIuMSAyLjloMS43bC0xLjktMi42Yy45LTEgMS40LTIuMiAxLjQtMy41eicvPjxwYXRoIGlkPSdSZWN0YW5nbGUtcGF0aF8xXycgY2xhc3M9J3N0MScgZD0nTS0xNS0zNi4xaDEuNHY2LjFILTE1eicvPjxwYXRoIGNsYXNzPSdzdDEnIGQ9J00tOS4yLTM2LjFoMS4zdjYuMWgtMS4zek0zLjgtMzQuNGMtLjUgMC0xIC4yLTEuMy42di0uNUgxLjN2NC4yaDEuM3YtMi4yYzAtLjYuNC0xIDEtMXMuOS4zLjkuOXYyLjJoMS4zdi0yLjdjLS4yLS44LS45LTEuNS0yLTEuNXpNLTMuOC0zNC4ydi4zYy0uNC0uMi0uOC0uNC0xLjMtLjQtMS4yIDAtMi4yIDEtMi4yIDIuMiAwIDEuMiAxIDIuMiAyLjIgMi4yLjUgMCAuOS0uMSAxLjMtLjR2LjNoMS4zdi00LjJoLTEuM3pNLTUtMzEuMWMtLjYgMC0xLjEtLjUtMS4xLTEuMSAwLS42LjUtMS4xIDEuMS0xLjFzMS4xLjUgMS4xIDEuMWMuMS43LS40IDEuMS0xLjEgMS4xek0tLjYtMzMuN3YtLjVoLTEuM3Y0LjJoMS4zdi0yYzAtLjcuNy0xIDEuMi0xdi0xLjJjLS40IDAtLjkuMi0xLjIuNXpNOS42LTM0LjJ2LjNjLS40LS4yLS44LS40LTEuMy0uNC0xLjIgMC0yLjIgMS0yLjIgMi4yIDAgMS4yIDEgMi4yIDIuMiAyLjIuNSAwIC45LS4xIDEuMy0uNHYuM2gxLjN2LTQuMkg5LjZ6bS0xLjIgMy4xYy0uNiAwLTEuMS0uNS0xLjEtMS4xIDAtLjYuNS0xLjEgMS4xLTEuMS42IDAgMS4xLjUgMS4xIDEuMS4xLjctLjQgMS4xLTEuMSAxLjF6TTEyLjItMzEuNWMtLjQgMC0uOC40LS44LjhzLjQuOC44LjguOC0uNC44LS44YzAtLjUtLjQtLjgtLjgtLjh6Jy8+PC9nPjwvc3ZnPg==)}.bg-eps{background-image:url(data:image/svg+xml;base64,PHN2ZyBpZD0iS2xhcm5hIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDM2IDIyIj4gIDx0aXRsZT5pY29uLWVwczwvdGl0bGU+ICA8cGF0aCBpZD0iUm91bmRlZF9SZWN0YW5nbGVfNTIiIGRhdGEtbmFtZT0iUm91bmRlZCBSZWN0YW5nbGUgNTIiIGQ9Ik0zLDBIMzNhMywzLDAsMCwxLDMsM1YxOWEzLDMsMCwwLDEtMywzSDNhMywzLDAsMCwxLTMtM1YzQTMsMywwLDAsMSwzLDBaIiBmaWxsPSIjZjFmMGYyIi8+ICA8Zz4gICAgPGc+ICAgICAgPHBhdGggZD0iTTI3LjYzLDExLjM3SDI1LjU3YS40OC40OCwwLDAsMSwwLS45NWgzLjMyVjguODRIMjUuNDdhMi4wNSwyLjA1LDAsMCwwLTIsMi4wNWgwYTIuMDUsMi4wNSwwLDAsMCwyLDIuMDZoMi4yMWEuNDcuNDcsMCwxLDEsMCwuOTRIMjNhNCw0LDAsMCwxLTEuNDcsMS42OWg2LjA2YTIuMTEsMi4xMSwwLDAsMCwyLjEtMi4xMWgwQTIuMSwyLjEsMCwwLDAsMjcuNjMsMTEuMzdaIiBmaWxsPSIjNzE3MDZmIi8+ICAgICAgPHBhdGggZD0iTTIyLjY4LDEyLjIxaDBhMy4zNywzLjM3LDAsMCwwLTMuMzctMy4zN2gwYTMuMjksMy4yOSwwLDAsMC0zLjI2LDMuMzd2Ni45NGgxLjU4VjE1LjU4aDEuNjhBMy4zNywzLjM3LDAsMCwwLDIyLjY4LDEyLjIxWm0tMS41OC0uMDVhMS43MiwxLjcyLDAsMCwxLTEuNzMsMS43M0gxNy42M1YxMi4xNmExLjc0LDEuNzQsMCwxLDEsMy40NywwWiIgZmlsbD0iIzcxNzA2ZiIvPiAgICA8L2c+ICAgIDxnPiAgICAgIDxwYXRoIGQ9Ik05LjIyLDUuNzlhMS40NywxLjQ3LDAsMCwxLDIuOTQsMHYuODRoMS4zN1Y1LjY5YTIuODQsMi44NCwwLDAsMC01LjY4LDB2Ljk0SDkuMjJaIiBmaWxsPSIjYzgwMjZlIi8+ICAgICAgPHBhdGggZD0iTTE1LjIxLDEzLjg5VjkuMTNhMS40MywxLjQzLDAsMCwwLTEuNDQtMS40NEg3LjcxQTEuNDQsMS40NCwwLDAsMCw2LjI3LDkuMTN2Ni4wNmExLjQ1LDEuNDUsMCwwLDAsMS40NCwxLjQ0aDYuMDZhMS40NSwxLjQ1LDAsMCwwLDEuMzktMUgxMC42OWEzLjM3LDMuMzcsMCwwLDEtMy4zNy0zLjM3aDBhMy4zNywzLjM3LDAsMCwxLDMuMzctMy4zN2gwYTMuMzcsMy4zNywwLDAsMSwzLjM3LDMuMzdWMTNIOS4yYTEuNzIsMS43MiwwLDAsMCwxLjU0Ljk0aDQuNDdaIiBmaWxsPSIjYzgwMjZlIi8+ICAgICAgPHBhdGggZD0iTTEwLjc0LDEwLjQyYTEuNzMsMS43MywwLDAsMC0xLjU0Ljk1aDMuMDlBMS43NCwxLjc0LDAsMCwwLDEwLjc0LDEwLjQyWiIgZmlsbD0iI2M4MDI2ZSIvPiAgICA8L2c+ICA8L2c+PC9zdmc+)}.bg-bancontact{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNiIgaGVpZ2h0PSIxNiI+ICAgIDxwYXRoIGQ9Ik0yIDBoMjJjMS4xIDAgMiAuOSAyIDJ2MTJjMCAxLjEtLjkgMi0yIDJIMmMtMS4xIDAtMi0uOS0yLTJWMkMwIC45LjkgMCAyIDB6IiBmaWxsPSIjZjBmM2Y1Ij48L3BhdGg+ICAgIDxwYXRoIGQ9Ik0yMS4zIDZoLTYuNmwtMy41IDRINC43bDEuNi0xLjloLTNjLS41IDAtMSAuNS0xIDF2Mi4xYzAgLjYuNCAxIDEgMWgxMS40Yy41IDAgMS4zLS4zIDEuNy0uOEwyMS4zIDZ6IiBmaWxsPSIjMDA0ZTkxIj48L3BhdGg+ICAgIDxwYXRoIGQ9Ik0yMi42IDMuN2MuNSAwIDEgLjUgMSAxdjIuMWMwIC42LS40IDEtMSAxaC0zTDIxLjMgNmgtNi42bC0zLjUgNEg0LjdsNC44LTUuNWMuNC0uNCAxLjEtLjggMS43LS44aDExLjR6IiBmaWxsPSIjZmQwIj48L3BhdGg+PC9zdmc+)}.bg-knet{background-image:url(data:image/svg+xml;base64,PHN2ZyBpZD0nS2xhcm5hLXNtYWxsJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNicgaGVpZ2h0PScxNic+ICAgIDxzdHlsZT4uc3Qye2ZpbGw6I2ZmZn08L3N0eWxlPiAgICA8cGF0aCBkPSdNMiAwaDIyYzEuMSAwIDIgLjkgMiAydjEyYzAgMS4xLS45IDItMiAySDJjLTEuMSAwLTItLjktMi0yVjJDMCAuOS45IDAgMiAweicgZmlsbD0nIzAwNzhkYycvPiAgICA8cGF0aCBmaWxsPScjZmZlMTAwJyBkPSdNMjEuNiA3LjRsLTMuOS0yLjkgMy44LTIuM2gtNy42bC0zLjIgMi4xVjIuMkg1LjZ2NS4yaDUuMVY0LjhsMy4yIDIuNnonLz4gICAgPHBhdGggY2xhc3M9J3N0MicgZD0nTTYuMyAxMi44djEuNWgtLjR2LTEuNGMwLS41LS4yLS43LS43LS43LS4yIDAtLjMuMS0uNS4yLS4xLjEtLjIuMy0uMi41djEuNEg0di0yLjRoLjR2LjRjLjEtLjEuMi0uMi40LS4zLjEtLjEuMy0uMS41LS4xLjYtLjEgMSAuMiAxIC45ek0xMy43IDEyLjJjLjIuMi4zLjYuMyAxaC0yLjFjMCAuMy4xLjUuMi42LjEuMS4zLjIuNi4yLjIgMCAuNC0uMS41LS4xLjEtLjEuMi0uMi4zLS40aC41Yy0uMS4yLS4yLjQtLjQuNi0uMi4yLS41LjMtLjkuM3MtLjctLjEtLjktLjMtLjQtLjUtLjQtLjkuMS0uNi4zLS45Yy4yLS4yLjUtLjQuOS0uNC42LS4xLjkgMCAxLjEuM3ptLTEuNS4xYy0uMS4xLS4yLjMtLjMuNmgxLjdjLS4xLS41LS4zLS44LS44LS44LS4zIDAtLjUuMS0uNi4yek0yMC45IDExLjloLjV2LjNoLS41djEuNWMwIC4xIDAgLjIuMS4yIDAgMCAuMS4xLjIuMWguM3YuM2gtLjRjLS4yIDAtLjQtLjEtLjUtLjItLjEtLjEtLjEtLjItLjEtLjR2LTEuNWgtLjN2LS4zaC4zdi0uNmwuNC0uMnYuOHpNMCA5LjRoMjZ2LjRIMHonLz48L3N2Zz4=)}.bg-fawry{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczNicgaGVpZ2h0PScyMic+ICAgIDxzdHlsZT4uc3Qye2ZpbGw6IzAxNmQ5Yn08L3N0eWxlPiAgICA8cGF0aCBpZD0nUm91bmRlZF9SZWN0YW5nbGVfNTJfNl8nIGQ9J00zIDBoMzBjMS43IDAgMyAxLjMgMyAzdjE2YzAgMS43LTEuMyAzLTMgM0gzYy0xLjcgMC0zLTEuMy0zLTNWM2MwLTEuNyAxLjMtMyAzLTN6JyBmaWxsPScjZmVkMzAxJy8+ICAgIDxnIGlkPSd5eEFZeXkudGlmJz48cGF0aCBkPSdNMy4xIDEzLjRjLS41LS44LS44LTEuNy0uNy0yLjYuMS0xLjYuOS0yLjkgMi40LTMuNy44LS40IDEuNi0uNiAyLjQtLjUuOCAwIDEuNS4yIDIuMS43IDAgLjIuMS40IDAgLjUgMCAuNS0uMi45LS41IDEuMy0uMS4zLS4zLjUtLjUuOC0uMS4xLS4xLjIgMCAuM2guMmMuMyAwIC41IDAgLjgtLjEuMSAwIC4xIDAgLjEuMSAwIC4yIDAgLjMtLjEuNSAwIC4xIDAgLjIuMS4ycy4yIDAgLjItLjFjLjUtLjcuOS0xLjMgMS0yLjEuMy40LjQuOS41IDEuNC4zIDEuNS0uMSAyLjktMS4yIDQtLjguOC0xLjcgMS4yLTIuOCAxLjMtMSAuMS0xLjktLjEtMi44LS43LjQgMCAuNy0uMSAxLS4zLjgtLjMgMS40LS44IDIuMS0xLjMuMyAwIC40LS4xLjUtLjEuMSAwIC4yLjIuMy4zLjEuMS4xLjIuMy4xLjIgMCAuMS0uMi4xLS4zbC4zLTIuMWMwLS4yIDAtLjMtLjMtLjMtLjUgMC0xLjEuMS0xLjYuMS0uMiAwLS40IDAtLjYuMS0uMSAwLS4yIDAtLjIuMS0uMS4xIDAgLjIuMS4zbC4zLjNjLjEuMS4xLjEgMCAuMi0uNi41LTEuMi45LTEuOSAxLjItLjMuMi0uNy4zLTEgLjRoLS42eicgZmlsbD0nI2ZkZmRmZCcvPiAgICAgICAgPHBhdGggY2xhc3M9J3N0MicgZD0nTTIyLjYgMTAuN2MtLjIuNi0uNCAxLjItLjYgMS45LS4xLjMtLjIuNC0uNS40aC0uNGMtLjMgMC0uNC0uMS0uNS0uNC0uMy0uOS0uNi0xLjctLjktMi42LS4xLS4yLS4xLS4zLS4yLS41di0uMmMwLS4xIDAtLjIuMS0uMmguOGMuMiAwIC4zLjIuNC40LjEuNS4zIDEgLjQgMS40IDAgLjEgMCAuMi4xLjMuMi0uNi4zLTEuMS41LTEuNy4yLS4yLjItLjMuNi0uM2guNWMuMyAwIC40LjEuNS4zLjEuNS4zIDEgLjQgMS40IDAgLjEgMCAuMi4xLjMuMS0uNS4zLS45LjQtMS40IDAtLjEuMS0uMy4xLS40LjEtLjIuMi0uMy40LS4zaC43Yy4xIDAgLjIuMS4yLjJ2LjJjLS4zIDEtLjcgMi0xIDMtLjEuMy0uMi40LS41LjRoLS40Yy0uMyAwLS40LS4xLS41LS40LS4zLS41LS41LTEuMS0uNy0xLjggMCAuMSAwIDAgMCAwek0zLjEgMTMuNGguNmMuNC0uMS43LS4yIDEtLjQuNy0uMyAxLjMtLjggMS44LTEuMi4xLS4xLjEtLjEgMC0uMmwtLjMtLjNjLS4xLS4xLS4yLS4xLS4xLS4zIDAtLjEuMi0uMS4yLS4xLjIgMCAuNCAwIC42LS4xLjUgMCAxLjEtLjEgMS42LS4xLjIgMCAuMy4xLjMuM2wtLjMgMi4xYzAgLjEgMCAuMy0uMS4zcy0uMi0uMS0uMy0uMWMwLS4xLS4xLS4zLS4yLS4zcy0uMi4yLS4zLjNjLS42LjUtMS4zIDEtMi4xIDEuMy0uMy4xLS43LjItMSAuMy0uNi0uNS0xLS45LTEuNC0xLjV6TTI5LjkgOS4yaC4zYy4yIDAgLjMuMS4zLjMuMS4zLjIuNy4zIDEgLjEuMy4yLjUuMy44LjEuMi4xLjMuMy41bC4xLjFjLjIuMS4yLjEuMi0uMS4yLS43LjQtMS40LjYtMi4yLjEtLjMuMS0uMy40LS4zaC41Yy4yIDAgLjMuMS4yLjMtLjIuNy0uNCAxLjQtLjYgMi0uMS41LS4zLjktLjQgMS40LS4xLjMtLjIuNS0uNC44LS4yLjQtLjYuNS0xIC42aC0uOGMtLjEgMC0uMiAwLS4yLS4xLS4yLS4xLS4yLS42IDAtLjdIMzAuNmMuMy4xLjUtLjEuNi0uMyAwIDAgLjEtLjEuMS0uMi4xLS4yLjEtLjItLjEtLjItLjQtLjEtLjgtLjMtMS0uNi0uMi0uNC0uNC0uNy0uNS0xLjEtLjEtLjUtLjMtLjktLjQtMS40di0uMmMwLS4xLjEtLjIuMi0uMi4xLS4yLjMtLjIuNC0uMnpNMTIuNCAxMS4xVjkuNmMwLS4yIDAtLjUuMS0uNy4yLS41LjUtLjggMS4xLS45LjUtLjEgMS0uMSAxLjYgMCAuNCAwIC40LjEuNC41di4yYzAgLjEtLjEuMi0uMi4yaC0xLjFjLS40LjEtLjUuMi0uNS42LS4xLjQtLjEuNC4zLjRoLjhjLjIgMCAuMy4xLjMuM3YuMmMwIC4yLS4xLjMtLjMuM2gtMWMtLjEgMC0uMiAwLS4yLjJ2MS45YzAgLjMgMCAuMy0uMy4zaC0uNmMtLjMgMC0uMy0uMS0uMy0uMy0uMS0uNi0uMS0xLjItLjEtMS43ek0yNi4xIDExLjFWOS41YzAtLjMgMC0uMy4zLS4zaC42Yy4yIDAgLjMgMCAuMy4zIDAgLjEgMCAuMS4xLjEuNC0uMy44LS40IDEuMy0uNC4zLS4xLjMgMCAuMy4ydi40YzAgLjItLjEuMi0uMy4yaC0uNmMtLjQgMC0uNi4yLS44LjUtLjEuMSAwIC4xIDAgLjJ2Mi4xYzAgLjEtLjEuMS0uMi4xaC0uN2MtLjIgMC0uMy0uMS0uMy0uM3YtMS41ek0xMC43IDguOGMtLjEuOC0uNSAxLjUtMSAyLjEgMCAuMS0uMS4xLS4yLjFzLS4xLS4yLS4xLS4yYzAtLjIgMC0uMy4xLS41IDAtLjEgMC0uMS0uMS0uMS0uMyAwLS41IDAtLjguMWgtLjJjLS4xLS4xLS4xLS4yIDAtLjMuMi0uMi40LS41LjUtLjguMi0uNC40LS44LjUtMS4zdi0uNWMuNS4yIDEgLjcgMS4zIDEuNHpNMTguMiA5LjJjLS42LS4yLTEuMi0uMS0xLjkgMC0uMSAwLS4zLjEtLjQuMi0uMi4yLS4zLjQtLjMuNiAwIC4yLjEuMy4yLjNoLjRjLjIgMCAuNC0uMS41LS4yLjItLjEuMy0uMS41LS4yaC40Yy4zIDAgLjUuMi41LjYgMCAuMSAwIC4xLS4xLjFoLS45Yy0uMyAwLS42IDAtLjguMS0uMy4xLS42LjItLjguNS0uNC42LS4xIDEuMy41IDEuNi43LjMgMS4zLjMgMiAwbC4xLS4xaC4xYy4xLjIuMS4yLjMuMmguNWMuMyAwIC4zIDAgLjMtLjN2LTEtMWMwLS43LS4zLTEuMi0xLjEtMS40em0tLjQgMi45Yy0uMi4xLS40LjEtLjYuMWgtLjNjLS4yLS4xLS4zLS4yLS4zLS40cy4yLS4zLjQtLjRoMWMuMSAwIC4xIDAgLjEuMSAwIC41LjEuNC0uMy42eicvPiAgICA8L2c+PC9zdmc+)} +.alternative-selector input{margin:0;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.alternative-selector input:active+label div.alternative-icon{opacity:.9}.alternative-selector input:checked+label div.alternative-icon{-webkit-filter:none;-moz-filter:none;filter:none}.alternative-selector label:hover *{-webkit-filter:brightness(1.2) grayscale(.5) opacity(.9);-moz-filter:brightness(1.2) grayscale(.5) opacity(.9);filter:brightness(1.2) grayscale(.5) opacity(.9)}.alternative-icon{display:inline-block;width:4em;height:3em;-webkit-transition:all .1s ease-in;-moz-transition:all .1s ease-in;transition:all .1s ease-in;-webkit-filter:brightness(1) grayscale(.8) opacity(.7);-moz-filter:brightness(1) grayscale(.8) opacity(.7);filter:brightness(1) grayscale(.8) opacity(.7)}.alternative-selector h2{display:inline-block;margin:0 0 0 10px;vertical-align:middle}div.alternative-selector label{cursor:pointer}div.alternative-selector>div{margin-bottom:10px}div.alternative-selector>div:last-child{margin-bottom:0}div.cko-alternative-form{padding-left:2em}#apm-container{margin-bottom:20px}#apm-container div[data-role=collapsible]{border-bottom:1px solid #ccc;cursor:pointer;padding:15px}#apm-container div[aria-selected=true],#apm-container div[data-role=collapsible]:focus,#apm-container div[data-role=collapsible]:hover{background-color:#f1f1f1}#apm-container div.cko-apm:last-child{border-bottom:none!important}#apm-container div[data-role=trigger]{cursor:pointer}#apm-container div[data-role=content]{padding:1rem 2rem}.cko-apm.paypal{display:block!important}.bg-apm{background-repeat:no-repeat;background-position:center center;background-size:contain;vertical-align:middle;display:inline-block;width:45px;height:30px;margin-right:10px}.bg-alipay{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfM18iIGNsYXNzPSJzdDE3IiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxwYXRoIGNsYXNzPSJzdDE4IiBkPSJNMjAuMiwxMi40YzAuNy0xLjMsMS4zLTIuNiwxLjctNGgtNFY3LjFoNVY2LjJoLTVWNGgtMi4zdjIuMmgtNXYwLjhoNXYxLjRoLTQuMnYwLjdoOC4xYy0wLjMsMC45LTAuNywxLjgtMS4yLDIuN2MtMS45LTAuNi0zLjgtMS01LjgtMS4xYy0zLjksMC00LjcsMS45LTQuNSwzLjZjMC4xLDEuNCwxLjIsMy40LDQuNCwzLjRjMi43LTAuMSw1LjItMS40LDYuOC0zLjZjMi44LDEuMiw1LjcsMi44LDcuOCwzLjl2LTMuM0MyNC44LDE0LDIyLjUsMTMuMiwyMC4yLDEyLjR6IE0xMiwxNi41Yy0yLjcsMC0zLjEtMS41LTMuMi0yLjRjMC0wLjgsMC41LTIuMiwzLjYtMi4yYzEuNywwLjIsMy40LDAuNyw1LDEuNEMxNi4yLDE0LjgsMTQuMywxNi41LDEyLDE2LjVMMTIsMTYuNXoiLz48L3N2Zz4=)}.bg-amex{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU1XzJfIiBjbGFzcz0ic3QyIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMywxMmgyLjd2MC42aC0xLjl2MC42aDEuOHYwLjZoLTEuOHYwLjZoMS45VjE1SDIzVjEyeiBNMzAuOSwxMy4yYzEsMCwxLjEsMC41LDEuMSwxYzAsMC41LTAuNSwwLjktMSwwLjljMCwwLDAsMCwwLDBoLTEuN3YtMC42aDEuM2MwLjIsMCwwLjYsMCwwLjYtMC4zYzAtMC4xLTAuMS0wLjItMC4zLTAuMmMtMC4xLDAtMC41LDAtMC42LDBjLTAuOSwwLTEuMS0wLjQtMS4xLTAuOWMwLTAuNSwwLjQtMC45LDAuOS0wLjljMCwwLDAuMSwwLDAuMSwwaDEuN3YwLjZoLTEuM2MtMC4zLDAtMC42LDAtMC42LDAuM2MwLDAuMiwwLjIsMC4yLDAuMywwLjJDMzAuNCwxMy4xLDMwLjgsMTMuMiwzMC45LDEzLjJMMzAuOSwxMy4yeiBNMjcuOCwxMy4yYzEsMCwxLjEsMC41LDEuMSwxYzAsMC41LTAuNSwwLjktMSwwLjljMCwwLDAsMCwwLDBoLTEuN3YtMC42aDEuM2MwLjIsMCwwLjYsMCwwLjYtMC4zYzAtMC4xLTAuMS0wLjItMC4zLTAuMmMtMC4xLDAtMC41LDAtMC42LDBjLTAuOSwwLTEuMS0wLjQtMS4xLTAuOWMwLTAuNSwwLjQtMC45LDAuOS0wLjljMCwwLDAuMSwwLDAuMSwwaDEuN3YwLjZoLTEuM2MtMC4zLDAtMC42LDAtMC42LDAuM2MwLDAuMiwwLjIsMC4yLDAuMywwLjJDMjcuMywxMy4xLDI3LjcsMTMuMiwyNy44LDEzLjJMMjcuOCwxMy4yeiBNMTgsMTJoLTIuOWwtMC45LDAuOUwxMy4zLDEySDEwdjNoMy4xbDEtMWwxLDFoMS42di0xaDEuMWMwLjUsMC4xLDEuMS0wLjIsMS4yLTAuN2MwLTAuMSwwLTAuMiwwLTAuM2MwLTAuNS0wLjQtMC45LTAuOC0wLjlDMTguMSwxMiwxOC4xLDEyLDE4LDEyeiBNMTIuOCwxNC40aC0xLjl2LTAuNmgxLjh2LTAuNmgtMS44di0wLjZoMmwwLjgsMC44TDEyLjgsMTQuNHogTTE1LjksMTQuN2wtMS4yLTEuMmwxLjItMS4yVjE0Ljd6IE0xNy44LDEzLjRoLTF2LTAuN2gxYzAuMiwwLDAuNCwwLjEsMC40LDAuM2MwLDAuMi0wLjEsMC40LTAuMywwLjRDMTcuOSwxMy40LDE3LjgsMTMuNCwxNy44LDEzLjRMMTcuOCwxMy40eiBNMjIsMTMuNmMwLjQtMC4xLDAuNi0wLjUsMC42LTAuOGMwLTAuNS0wLjQtMC44LTAuOS0wLjhjMCwwLTAuMSwwLTAuMSwwaC0yLjF2M2gwLjh2LTEuMWgxLjFjMC4yLDAsMC40LDAuMiwwLjQsMC41YzAsMCwwLDAsMCwwbDAsMC41aDAuOGwwLTAuNmMwLjEtMC4zLTAuMS0wLjYtMC40LTAuN0MyMi4xLDEzLjYsMjIuMSwxMy42LDIyLDEzLjZMMjIsMTMuNnogTTIxLjMsMTMuM2gtMXYtMC43aDFjMC4yLDAsMC40LDAuMSwwLjQsMC4zYzAsMCwwLDAsMCwwQzIxLjgsMTMuMiwyMS42LDEzLjMsMjEuMywxMy4zTDIxLjMsMTMuM3ogTTIwLjksMTFWOGgtMC44djNIMjAuOXogTTEzLjMsOEgxNnYwLjZoLTEuOXYwLjZIMTZ2MC42aC0xLjh2MC42SDE2VjExaC0yLjdWOHogTTE5LjEsOS42YzAuNC0wLjEsMC42LTAuNSwwLjYtMC44YzAtMC41LTAuNC0wLjgtMC45LTAuOGMwLDAtMC4xLDAtMC4xLDBoLTIuMnYzaDAuOFY5LjloMS4xYzAuMiwwLDAuNCwwLjIsMC40LDAuNWMwLDAsMCwwLDAsMGwwLDAuNmgwLjhsMC0wLjZjMC4xLTAuMy0wLjEtMC42LTAuNC0wLjdDMTkuMiw5LjYsMTkuMSw5LjYsMTkuMSw5LjZMMTkuMSw5LjZ6IE0xOC40LDkuM2gtMVY4LjZoMWMwLjIsMCwwLjQsMC4xLDAuNSwwLjNjMCwwLDAsMCwwLDBDMTguOCw5LjIsMTguNyw5LjMsMTguNCw5LjNMMTguNCw5LjN6IE0xMS40LDhsLTEsMmwtMS0ySDh2Mi45TDYuNiw4SDUuNUw0LDExaDAuOWwwLjMtMC43aDEuN0w3LjIsMTFoMS43VjguOEwxMCwxMWgwLjhsMS4xLTIuMlYxMWgwLjhWOEgxMS40TDExLjQsOHogTTUuNSw5LjdsMC41LTFsMC41LDFINS41TDUuNSw5Ljd6IE0yOS41LDh2Mi4xTDI4LjEsOGgtMS4ydjIuOEwyNS41LDhoLTEuMWwtMS4xLDIuM2MwLDAtMC41LDAtMC41LDBjLTAuMywwLTAuNi0wLjQtMC41LTAuN2MwLDAsMCwwLDAsMFY5LjRjMC0wLjcsMC40LTAuOCwxLTAuOGgwLjVWOGgtMS4xYy0wLjgsMC4xLTEuNCwwLjktMS4yLDEuOGMwLjEsMC43LDAuNiwxLjIsMS4zLDEuMmgxLjFsMC4zLTAuN2gxLjdsMC4zLDAuN2gxLjZWOC44bDEuNSwyLjJoMS4xVjhIMjkuNUwyOS41LDh6IE0yNC40LDkuN2wwLjUtMWwwLjUsMUgyNC40TDI0LjQsOS43eiIvPjwvc3ZnPg==)}.bg-applepay{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5XzFfIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxwYXRoIGlkPSJBcHBsZV8xXyIgY2xhc3M9InN0MCIgZD0iTTExLjcsMTFjMCwwLjgsMC41LDEuNiwxLjMsMS45Yy0wLjIsMC41LTAuNCwwLjktMC43LDEuM2MtMC4zLDAuNi0wLjgsMS0xLjUsMS4xYy0wLjcsMC0wLjktMC40LTEuNi0wLjRzLTEsMC40LTEuNiwwLjRjLTAuNy0wLjEtMS4yLTAuNi0xLjUtMS4yQzUuMiwxMyw0LjUsMTAuOSw1LjQsOS41YzAuNC0wLjcsMS4yLTEuMiwyLTEuMkM4LDguNCw4LjUsOC41LDkuMSw4LjdjMC42LTAuMiwxLjItMC40LDEuOS0wLjRjMC43LDAsMS40LDAuNCwxLjgsMC45QzEyLjEsOS42LDExLjcsMTAuMiwxMS43LDExIE0xMC40LDcuNUMxMC44LDcuMSwxMSw2LjUsMTAuOSw2Yy0wLjYsMC0xLjEsMC4zLTEuNCwwLjdDOS4xLDcuMSw4LjksNy42LDksOC4yQzkuNSw4LjIsMTAuMSw3LjksMTAuNCw3LjUiLz48cGF0aCBpZD0iUGF5XzFfIiBjbGFzcz0ic3QwIiBkPSJNMTUuNCw2LjhjMC4zLDAsMC42LTAuMSwwLjgtMC4xYzAuMywwLDAuNy0wLjEsMSwwYzAuNSwwLDAuOSwwLjEsMS40LDAuMmMwLjMsMC4xLDAuNywwLjMsMC45LDAuNWMwLjIsMC4yLDAuNCwwLjQsMC41LDAuN2MwLjEsMC4zLDAuMiwwLjYsMC4yLDFjMCwwLjQtMC4xLDAuOC0wLjIsMS4xYy0wLjIsMC4zLTAuNCwwLjYtMC43LDAuOGMtMC4zLDAuMi0wLjYsMC40LTEsMC41Yy0wLjQsMC4xLTAuOCwwLjItMS4zLDAuMmMtMC4zLDAtMC43LDAtMS0wLjF2My42aC0wLjZWNi44TDE1LjQsNi44TDE1LjQsNi44eiBNMTYsMTEuMWMwLjIsMCwwLjMsMC4xLDAuNSwwLjFjMC4yLDAsMC40LDAsMC42LDBjMC43LDAsMS4zLTAuMSwxLjgtMC41YzAuNC0wLjQsMC43LTEsMC42LTEuNmMwLTAuMy0wLjEtMC42LTAuMi0wLjljLTAuMS0wLjItMC4zLTAuNC0wLjUtMC42Yy0wLjItMC4yLTAuNS0wLjMtMC43LTAuNGMtMC4zLTAuMS0wLjYtMC4xLTEtMC4xYy0wLjIsMC0wLjUsMC0wLjcsMGMtMC4yLDAtMC40LDAtMC41LDAuMUwxNiwxMS4xTDE2LDExLjFMMTYsMTEuMXogTTI1LjEsMTMuOGMwLDAuMiwwLDAuNSwwLDAuN2MwLDAuMiwwLDAuNSwwLjEsMC43aC0wLjZsLTAuMS0wLjloMGMtMC4xLDAuMS0wLjIsMC4yLTAuMywwLjRjLTAuMSwwLjEtMC4zLDAuMi0wLjQsMC4zYy0wLjIsMC4xLTAuNCwwLjItMC42LDAuMmMtMC4yLDAuMS0wLjQsMC4xLTAuNywwLjFjLTAuMywwLTAuNSwwLTAuOC0wLjFjLTAuMi0wLjEtMC40LTAuMi0wLjYtMC40Yy0wLjEtMC4yLTAuMy0wLjMtMC4zLTAuNWMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjZjMC0wLjcsMC4zLTEuMywwLjktMS43YzAuOS0wLjQsMS45LTAuNiwyLjgtMC42di0wLjJjMC0wLjIsMC0wLjQsMC0wLjVjMC0wLjItMC4xLTAuNC0wLjItMC42QzI0LjEsMTAsMjQsOS44LDIzLjgsOS43Yy0wLjMtMC4xLTAuNi0wLjItMC45LTAuMmMtMC4zLDAtMC41LDAtMC44LDAuMWMtMC4zLDAuMS0wLjUsMC4yLTAuNywwLjNsLTAuMi0wLjRjMC4zLTAuMiwwLjYtMC4zLDAuOS0wLjRDMjIuMyw5LjEsMjIuNyw5LDIzLDljMC40LDAsMC43LDAuMSwxLjEsMC4yYzAuMywwLjEsMC41LDAuMywwLjYsMC42YzAuMiwwLjIsMC4zLDAuNSwwLjMsMC44YzAuMSwwLjMsMC4xLDAuNiwwLjEsMC44TDI1LjEsMTMuOEwyNS4xLDEzLjhMMjUuMSwxMy44eiBNMjQuNSwxMmMtMC4zLDAtMC43LDAtMSwwYy0wLjMsMC0wLjcsMC4xLTEsMC4yYy0wLjMsMC4xLTAuNiwwLjMtMC44LDAuNWMtMC4yLDAuMi0wLjMsMC42LTAuMywwLjljMCwwLjQsMC4xLDAuNywwLjQsMC45YzAuMiwwLjIsMC41LDAuMywwLjksMC4zYzAuMiwwLDAuNSwwLDAuNy0wLjFjMC4yLTAuMSwwLjQtMC4yLDAuNS0wLjNjMC4xLTAuMSwwLjMtMC4yLDAuNC0wLjRjMC4xLTAuMSwwLjItMC4zLDAuMi0wLjRjMC0wLjEsMC4xLTAuMiwwLjEtMC40TDI0LjUsMTJMMjQuNSwxMkwyNC41LDEyeiBNMjYuMyw5LjJsMS42LDMuOWMwLjEsMC4yLDAuMiwwLjQsMC4yLDAuN3MwLjEsMC40LDAuMiwwLjZoMGMwLjEtMC4yLDAuMS0wLjQsMC4yLTAuNnMwLjItMC41LDAuMy0wLjdsMS41LTMuOUgzMWwtMS44LDQuNGMtMC4yLDAuNC0wLjMsMC45LTAuNSwxLjNjLTAuMSwwLjQtMC4zLDAuNy0wLjUsMWMtMC4xLDAuMy0wLjMsMC42LTAuNSwwLjhjLTAuMiwwLjItMC40LDAuNC0wLjYsMC42Yy0wLjIsMC4yLTAuNCwwLjMtMC43LDAuNUMyNi4yLDE3LjksMjYuMSwxOCwyNiwxOGwtMC4yLTAuNWMwLjItMC4xLDAuNC0wLjIsMC41LTAuM2MwLjItMC4xLDAuNC0wLjMsMC42LTAuNGMwLjItMC4yLDAuNC0wLjQsMC41LTAuNmMwLjItMC4zLDAuNC0wLjYsMC41LTAuOWMwLTAuMSwwLjEtMC4yLDAuMS0wLjNjMC0wLjEsMC0wLjItMC4xLTAuM2wtMi4zLTUuNkwyNi4zLDkuMkwyNi4zLDkuMnoiLz48L3N2Zz4=)}.bg-astro{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU2X2NvcHlfMl8yXyIgY2xhc3M9InN0MjciIGQ9Ik0zLDBoMzBjMS43LDAsMywxLjMsMywzdjE2YzAsMS43LTEuMywzLTMsM0gzYy0xLjcsMC0zLTEuMy0zLTNWM0MwLDEuMywxLjMsMCwzLDB6Ii8+PGc+PHBhdGggY2xhc3M9InN0MCIgZD0iTTUuOSwxNC44YzAuMS0wLjIsMC4yLTAuNCwwLjItMC43QzYuOCwxMiw3LjYsOS44LDguMyw3LjZjMC4xLTAuMiwwLjItMC40LDAuMi0wLjdjMC0wLjEsMC0wLjEsMC4xLTAuMWMwLjQsMCwwLjcsMCwxLjEsMGMwLjEsMCwwLjEsMCwwLjEsMC4xYzAuNCwxLjMsMC45LDIuNiwxLjMsMy45YzAuNCwxLjMsMC45LDIuNiwxLjMsMy45YzAsMCwwLDAuMSwwLDAuMWMtMC40LDAtMC43LDAtMSwwYzAsMC0wLjEsMC0wLjEtMC4xYy0wLjItMC41LTAuMy0xLTAuNS0xLjVjLTAuMS0wLjMtMC4yLTAuNi0wLjMtMC45YzAtMC4xLDAtMC4xLTAuMS0wLjFjLTAuOSwwLTEuOCwwLTIuNywwYy0wLjEsMC0wLjEsMC0wLjEsMC4xQzcuNSwxMy4yLDcuMiwxNCw3LDE0LjhjMCwwLjEtMC4xLDAuMS0wLjEsMC4xQzYuNSwxNC45LDYuMiwxNC45LDUuOSwxNC44QzUuOSwxNC44LDUuOSwxNC44LDUuOSwxNC44eiBNOS4yLDcuOEM4LjksOS4xLDguNCwxMC4zLDgsMTEuNWMwLjgsMCwxLjYsMCwyLjQsMEMxMCwxMC4zLDkuNSw5LjEsOS4yLDcuOHoiLz48cGF0aCBkPSJNMTcuMyw1YzAuMSwwLDAuMywwLDAuNCwwLjFjMC43LDAuMSwxLjMsMC4zLDEuOSwwLjZjMS4xLDAuNSwyLjEsMS4yLDIuOSwyYzAsMCwwLDAsMC4xLDAuMWMtMC4xLDAtMC4yLDAtMC4zLDBjLTAuOC0wLjYtMS42LTEuMS0yLjYtMS41Yy0wLjctMC4zLTEuNS0wLjUtMi4yLTAuNWMtMS4yLTAuMS0yLjIsMC4yLTMuMywwLjhjLTAuNiwwLjQtMS4yLDAuOC0xLjcsMS4zQzEyLjUsOCwxMi4zLDgsMTIsOGMtMC40LDAtMC45LDAtMS4zLDBjMCwwLTAuMSwwLTAuMSwwYzAsMCwwLjEtMC4xLDAuMS0wLjFjMS4zLTEuNCwyLjgtMi4zLDQuNi0yLjdjMC40LTAuMSwwLjktMC4yLDEuNC0wLjJjMCwwLDAuMSwwLDAuMSwwQzE2LjksNSwxNy4xLDUsMTcuMyw1eiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yNS41LDEyYzAtMC43LDAuMi0xLjQsMC42LTJjMC41LTAuNiwxLjEtMC45LDEuOC0xYzAuNi0wLjEsMS4xLDAsMS42LDAuMmMwLjcsMC4zLDEuMSwwLjgsMS4zLDEuNWMwLjMsMC45LDAuMywxLjktMC4xLDIuN2MtMC40LDAuOS0xLjEsMS4zLTIsMS41Yy0wLjYsMC4xLTEuMiwwLTEuOC0wLjNjLTAuNy0wLjQtMS4xLTEtMS4zLTEuOEMyNS42LDEyLjYsMjUuNiwxMi4zLDI1LjUsMTJ6IE0zMC4xLDEyYzAtMC4yLTAuMS0wLjUtMC4xLTAuN2MtMC4xLTAuNC0wLjMtMC44LTAuNy0xLjFjLTAuNy0wLjYtMS44LTAuNC0yLjMsMC40Yy0wLjMsMC41LTAuNCwxLTAuNCwxLjVjMCwwLjUsMC4xLDEsMC40LDEuNGMwLjYsMSwxLjksMSwyLjYsMEMzMCwxMywzMC4xLDEyLjUsMzAuMSwxMnoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTYuNSwxMC4xQzE2LjMsMTAsMTYsOS45LDE1LjgsOS44Yy0wLjMtMC4xLTAuNi0wLjEtMC45LDBjLTAuMywwLjEtMC41LDAuMy0wLjUsMC42YzAsMC4zLDAuMSwwLjYsMC4zLDAuN2MwLjMsMC4yLDAuNSwwLjMsMC44LDAuNGMwLjMsMC4xLDAuNywwLjMsMSwwLjZjMC40LDAuMywwLjUsMC44LDAuNSwxLjNjLTAuMSwwLjgtMC42LDEuMy0xLjQsMS41Yy0wLjgsMC4yLTEuNSwwLjEtMi4yLTAuMmMtMC4xLDAtMC4xLTAuMS0wLjItMC4xYzAuMS0wLjMsMC4yLTAuNSwwLjItMC44YzAsMCwwLjEsMCwwLjEsMC4xYzAuNSwwLjIsMC45LDAuNCwxLjQsMC4zYzAuMywwLDAuNS0wLjEsMC43LTAuM2MwLjMtMC4zLDAuMy0wLjksMC0xLjJjLTAuMi0wLjItMC40LTAuMy0wLjctMC40Yy0wLjMtMC4xLTAuNy0wLjMtMS0wLjVjLTAuMy0wLjItMC41LTAuNS0wLjYtMC45Yy0wLjEtMC42LDAuMS0xLjMsMC43LTEuN0MxNC41LDkuMSwxNC45LDksMTUuMyw5YzAuNCwwLDAuOSwwLjEsMS4zLDAuM2MwLjEsMC4xLDAuMSwwLjEsMC4xLDAuMkMxNi42LDkuNywxNi42LDkuOSwxNi41LDEwLjF6Ii8+PHBhdGggY2xhc3M9InN0MCIgZD0iTTIxLDkuMWMwLDAuMywwLDAuNSwwLDAuOGMtMC41LDAtMSwwLTEuNSwwYzAsMCwwLDAsMCwwLjFjMCwxLjEsMCwyLjEsMCwzLjJjMCwwLjIsMCwwLjQsMC4xLDAuNWMwLjEsMC4zLDAuMywwLjQsMC42LDAuNGMwLjIsMCwwLjQsMCwwLjcsMGMwLDAuMiwwLDAuNCwwLDAuNWMwLDAuMiwwLDAuMi0wLjIsMC4zYy0wLjQsMC4xLTAuNywwLjEtMS4xLDBjLTAuNi0wLjEtMS0wLjUtMS4xLTEuMWMwLTAuMi0wLjEtMC41LTAuMS0wLjdjMC0xLDAtMi4xLDAtMy4xYzAsMCwwLTAuMSwwLTAuMWMtMC4zLDAtMC42LDAtMC45LDBjMC0wLjMsMC0wLjUsMC0wLjhjMC4zLDAsMC42LDAsMC45LDBjMC0wLjEsMC0wLjIsMC0wLjNjMC0wLjIsMC0wLjUsMC0wLjdjMCwwLDAtMC4xLDAtMC4xYzAuMy0wLjEsMC42LTAuMiwxLTAuM2MwLDAuNSwwLDAuOSwwLDEuNEMyMCw5LjEsMjAuNSw5LjEsMjEsOS4xeiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMi4yLDkuMWMwLjMsMCwwLjYsMCwwLjksMGMwLDAuNCwwLDAuOCwwLDEuMWMwLDAsMCwwLDAsMGMwLDAsMC0wLjEsMC0wLjFjMC4yLTAuNiwwLjYtMSwxLjItMS4xYzAuMiwwLDAuMywwLDAuNSwwQzI1LDksMjUsOSwyNSw5LjFjMCwwLjMsMCwwLjYsMCwwLjljMCwwLDAsMCwwLDBjLTAuMiwwLTAuNCwwLTAuNywwYy0wLjUsMC4xLTAuOCwwLjUtMSwwLjljLTAuMSwwLjMtMC4xLDAuNi0wLjEsMC45YzAsMSwwLDEuOSwwLDIuOWMwLDAsMCwwLjEsMCwwLjFjLTAuMywwLTAuNywwLTEuMSwwQzIyLjIsMTIuOSwyMi4yLDExLDIyLjIsOS4xeiIvPjwvZz48L3N2Zz4=)}.bg-boleto{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfMl8iIGQ9Ik0zLDBoMzBjMS43LDAsMywxLjMsMywzdjE2YzAsMS43LTEuMywzLTMsM0gzYy0xLjcsMC0zLTEuMy0zLTNWM0MwLDEuMywxLjMsMCwzLDB6Ii8+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzYxXzFfIiBjbGFzcz0ic3QwIiBkPSJNMTQsMTZWNmg0YzAuNywwLDEuMywwLjEsMS45LDAuM2MwLjUsMC4yLDAuOSwwLjUsMS4xLDAuOWMwLjMsMC40LDAuNCwwLjgsMC40LDEuM2MwLDAuNC0wLjEsMC44LTAuNCwxLjJjLTAuMywwLjQtMC43LDAuNy0xLjEsMC45YzAuNiwwLjEsMS4xLDAuNSwxLjUsMC45YzAuMywwLjQsMC41LDEsMC41LDEuNWMwLDAuNS0wLjEsMC45LTAuMywxLjNjLTAuMiwwLjQtMC40LDAuNy0wLjgsMC45Yy0wLjQsMC4yLTAuNywwLjQtMS4yLDAuNUMxOS4yLDE2LDE4LjYsMTYsMTgsMTZMMTQsMTZMMTQsMTZ6IE0xNS40LDEwLjJoMi4zYzAuNCwwLDAuOSwwLDEuMy0wLjFjMC4zLTAuMSwwLjYtMC4zLDAuOC0wLjVDMjAsOS4zLDIwLjEsOSwyMC4xLDguN2MwLTAuMy0wLjEtMC42LTAuMy0wLjljLTAuMi0wLjMtMC40LTAuNC0wLjctMC41Yy0wLjUtMC4xLTEuMS0wLjItMS42LTAuMWgtMi4xTDE1LjQsMTAuMkwxNS40LDEwLjJMMTUuNCwxMC4yeiBNMTUuNCwxNC44SDE4YzAuMywwLDAuNiwwLDEsMGMwLjMsMCwwLjYtMC4xLDAuOC0wLjNjMC4yLTAuMSwwLjQtMC4zLDAuNS0wLjZjMC4xLTAuMywwLjItMC41LDAuMi0wLjhjMC0wLjctMC41LTEuNC0xLjEtMS42Yy0wLjUtMC4xLTEtMC4yLTEuNS0wLjJoLTIuNFYxNC44TDE1LjQsMTQuOEwxNS40LDE0Ljh6Ii8+PC9zdmc+)}.bg-diners{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU0XzFfIiBjbGFzcz0ic3QxMiIgZD0iTTMsMGgzMGMxLjcsMCwzLDEuMywzLDN2MTZjMCwxLjctMS4zLDMtMywzSDNjLTEuNywwLTMtMS4zLTMtM1YzQzAsMS4zLDEuMywwLDMsMHoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTkuMSwxOGgtMi40Yy0zLjctMC4xLTYuNy0zLjItNi42LTYuOUM5LjgsNy40LDEyLjYsNC4yLDE2LjMsNGgyLjdjMy44LDAsNi45LDMuMiw2LjksN2MwLDAsMCwwLDAsMHYwLjFDMjUuOSwxNC45LDIyLjksMTcuOSwxOS4xLDE4eiBNMTYuOCw1LjJjLTMuMi0wLjEtNS44LDIuNC01LjksNS42Yy0wLjEsMy4yLDIuNCw1LjgsNS42LDUuOWMzLjIsMC4xLDUuOC0yLjQsNS45LTUuNmMwLTAuMSwwLTAuMSwwLTAuMkMyMi41LDcuOSwxOS45LDUuMywxNi44LDUuMkwxNi44LDUuMnogTTE3LjcsMTQuOVY3LjJjMi4xLDAuNiwzLjQsMi43LDIuOCw0LjhDMjAuMiwxMy40LDE5LjEsMTQuNSwxNy43LDE0LjlMMTcuNywxNC45eiBNMTUuOSwxNC45Yy0yLjEtMC42LTMuMy0yLjgtMi44LTQuOWMwLjMtMS40LDEuNC0yLjUsMi44LTIuOVYxNC45eiIvPjwvc3ZnPg==)}.bg-discover{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU2XzFfIiBjbGFzcz0ic3QxMSIgZD0iTTMsMGgzMGMxLjcsMCwzLDEuMywzLDN2MTZjMCwxLjctMS4zLDMtMywzSDNjLTEuNywwLTMtMS4zLTMtM1YzQzAsMS4zLDEuMywwLDMsMHoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjkuOSwxMS4zaC0wLjNWOS45aDAuM2MwLjQtMC4xLDAuNywwLjIsMC44LDAuNWMwLDAuMSwwLDAuMSwwLDAuMmMwLDAuNC0wLjMsMC43LTAuNiwwLjhDMzAsMTEuMywyOS45LDExLjMsMjkuOSwxMS4zTDI5LjksMTEuM3ogTTMxLjYsMTAuNWMwLTAuNy0wLjUtMS40LTEuMy0xLjRjLTAuMSwwLTAuMiwwLTAuMywwaC0xLjN2NC44aDAuOVYxMmgwLjFsMS4yLDEuOUgzMmwtMS40LTJDMzEuMiwxMS44LDMxLjcsMTEuMiwzMS42LDEwLjVMMzEuNiwxMC41TDMxLjYsMTAuNXogTTI1LjcsMTMuOWgyLjV2LTAuOGgtMS42di0xLjNoMS41VjExaC0xLjVWOS45aDEuNlY5LjFoLTIuNUwyNS43LDEzLjlMMjUuNywxMy45TDI1LjcsMTMuOXogTTIzLjEsMTIuM2wtMS4yLTMuMkgyMWwxLjksNC45aDAuNWwxLjktNC45aC0wLjlMMjMuMSwxMi4zTDIzLjEsMTIuM3ogTTEyLjcsMTEuNWMwLDEuMywxLDIuNCwyLjMsMi41YzAuNCwwLDAuOC0wLjEsMS4xLTAuM3YtMS4xYy0wLjIsMC4zLTAuNiwwLjUtMSwwLjVjLTAuOCwwLTEuNS0wLjYtMS41LTEuNWMwLDAsMCwwLDAsMHYtMC4xYzAtMC45LDAuNi0xLjYsMS40LTEuN2MwLjQsMCwwLjgsMC4yLDEuMSwwLjVWOS40Yy0wLjMtMC4yLTAuNy0wLjMtMS4xLTAuM2MtMS4zLTAuMS0yLjMsMC45LTIuNCwyLjJDMTIuNywxMS40LDEyLjcsMTEuNCwxMi43LDExLjVMMTIuNywxMS41TDEyLjcsMTEuNXogTTExLjEsMTAuOWMtMC41LTAuMi0wLjctMC4zLTAuNy0wLjZjMC0wLjMsMC4zLTAuNiwwLjYtMC41YzAsMCwwLDAsMCwwYzAuMywwLDAuNSwwLjIsMC43LDAuNGwwLjUtMC42QzExLjgsOS4yLDExLjQsOSwxMC45LDljLTAuNywwLTEuNCwwLjUtMS40LDEuM3YwLjFjMCwwLjYsMC40LDEuMiwxLjEsMS4zYzAuMiwwLjEsMC40LDAuMiwwLjYsMC4zYzAuMiwwLjEsMC4zLDAuMywwLjMsMC41YzAsMC40LTAuMywwLjctMC42LDAuN2gtMC4xYy0wLjQsMC0wLjgtMC4zLTAuOS0wLjZMOS4zLDEzYzAuMywwLjYsMC45LDAuOSwxLjUsMC45YzAuOCwwLDEuNS0wLjYsMS41LTEuNGMwLDAsMCwwLDAsMHYtMC4yQzEyLjQsMTEuNywxMi4xLDExLjQsMTEuMSwxMC45TDExLjEsMTAuOUwxMS4xLDEwLjl6IE04LjEsMTMuOWgwLjlWOS4xSDguMVYxMy45TDguMSwxMy45eiBNNi4zLDEyLjdDNiwxMyw1LjYsMTMuMSw1LjEsMTMuMUg0LjlWOS45aDAuM2MwLjQsMCwwLjksMC4xLDEuMiwwLjRjMC4zLDAuMywwLjUsMC43LDAuNSwxLjJDNi44LDExLjksNi42LDEyLjQsNi4zLDEyLjdMNi4zLDEyLjd6IE01LjMsOS4xSDR2NC44aDEuM2MwLjYsMCwxLjItMC4yLDEuNi0wLjVjMC41LTAuNSwwLjgtMS4xLDAuOC0xLjhjMC4xLTEuMy0wLjktMi4zLTIuMi0yLjRINS4zTDUuMyw5LjF6IE0xOC43LDljLTEuMywwLTIuNCwxLjEtMi40LDIuNWMwLDAsMCwwLDAsMGMwLDEuMywxLDIuNCwyLjQsMi41YzEuMywwLDIuNC0xLjEsMi40LTIuNGMwLDAsMCwwLDAsMEMyMS4yLDEwLjIsMjAuMSw5LjEsMTguNyw5TDE4LjcsOUwxOC43LDl6Ii8+PC9zdmc+)}.bg-enets{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU1XzNfIiBjbGFzcz0ic3QxNSIgZD0iTTMsMGgzMGMxLjcsMCwzLDEuMywzLDN2MTZjMCwxLjctMS4zLDMtMywzSDNjLTEuNywwLTMtMS4zLTMtM1YzQzAsMS4zLDEuMywwLDMsMHoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTUuNCwxMS44QzE1LjQsMTEuOCwxNS40LDExLjgsMTUuNCwxMS44Yy0wLjEtMC4xLTAuMS0wLjEtMC4yLTAuMmMtMC40LTAuOC0wLjgtMS42LTEuMi0yLjNjLTAuMy0wLjYtMC43LTEuMy0xLTEuOWMwLTAuMS0wLjEtMC4xLTAuMi0wLjFjLTAuNCwwLTAuOSwwLTEuMywwYy0wLjIsMC0wLjIsMC4xLTAuMiwwLjJjMCwyLjEsMCw0LjIsMCw2LjJjMCwwLjEsMC4xLDAuMiwwLjIsMC4yYzAuMywwLDAuNSwwLDAuOCwwYzAuMiwwLDAuMiwwLDAuMi0wLjJjMC0xLjQsMC0yLjgsMC00LjJjMC0wLjEsMC0wLjEsMC0wLjJjMCwwLjEsMC4xLDAuMSwwLjEsMC4yYzAuMywwLjYsMC42LDEuMSwwLjksMS43YzAuNSwwLjksMSwxLjgsMS40LDIuN2MwLDAuMSwwLjEsMC4xLDAuMiwwLjFjMC40LDAsMC45LDAsMS4zLDBjMC4xLDAsMC4yLDAsMC4yLTAuMmMwLTIuMSwwLTQuMiwwLTYuM2MwLTAuMiwwLTAuMi0wLjItMC4yYy0wLjIsMC0wLjUsMC0wLjcsMGMtMC4yLDAtMC4yLDAtMC4yLDAuMmMwLDEuNCwwLDIuOCwwLDQuMUMxNS40LDExLjYsMTUuNCwxMS43LDE1LjQsMTEuOHogTTE5LDguM0MxOSw4LjMsMTksOC4zLDE5LDguM2MwLjksMCwxLjYsMCwyLjQsMGMwLjEsMCwwLjIsMCwwLjItMC4yYzAtMC4zLDAtMC41LDAtMC44YzAtMC4yLDAtMC4yLTAuMi0wLjJjLTEuMiwwLTIuNSwwLTMuNywwYy0wLjIsMC0wLjIsMC4xLTAuMiwwLjJjMCwwLjMsMCwwLjUsMCwwLjhjMCwxLjgsMCwzLjYsMCw1LjRjMCwwLjIsMCwwLjIsMC4yLDAuMmMxLjMsMCwyLjcsMCw0LDBjMC4xLDAsMC4yLTAuMSwwLjItMC4yYzAtMC4zLDAtMC41LDAtMC44YzAtMC4yLDAtMC4yLTAuMi0wLjJjLTAuOCwwLTEuNiwwLTIuNCwwYy0wLjEsMC0wLjEsMC0wLjIsMGMwLTAuNiwwLTEuMSwwLTEuN2MwLjEsMCwwLjEsMCwwLjIsMGMwLjYsMCwxLjEsMCwxLjcsMGMwLjEsMCwwLjIsMCwwLjItMC4yYzAtMC4zLDAtMC41LDAtMC44YzAtMC4yLDAtMC4yLTAuMi0wLjJjLTAuNiwwLTEuMiwwLTEuNywwYy0wLjEsMC0wLjEsMC0wLjIsMEMxOSw5LjIsMTksOC44LDE5LDguM3ogTTcuNSw3Yy0wLjMsMC0wLjUsMC0wLjgsMC4xQzUuOSw3LjMsNS4zLDcuNyw0LjgsOC4zQzQuMSw5LjEsMy45LDEwLDQsMTFjMC4xLDAuOSwwLjYsMS43LDEuMywyLjJjMC44LDAuNiwxLjgsMC45LDIuOCwwLjdjMC43LTAuMSwxLjMtMC41LDEuOC0wLjljMC4zLTAuMywwLjMtMC43LDAtMC45Yy0wLjMtMC4zLTAuNy0wLjMtMC45LDBjLTAuNSwwLjUtMS4xLDAuNy0xLjgsMC42Yy0wLjQtMC4xLTAuOC0wLjItMS4yLTAuNWMtMC41LTAuNS0wLjgtMS4xLTAuNy0xLjhDNS40LDkuOCw1LjYsOS40LDUuOSw5QzYuNCw4LjUsNyw4LjMsNy43LDguNEM4LjIsOC40LDguNiw4LjYsOSw5YzAuMiwwLjIsMC43LDAuMywxLDBjMC4yLTAuMiwwLjItMC43LDAtMC45QzkuOCw4LDkuOCw3LjksOS43LDcuOUM5LjEsNy4zLDguMyw3LjEsNy41LDd6IE0yOS42LDEzLjljMC4zLDAsMC43LTAuMSwxLTAuMWMwLjYtMC4xLDEtMC40LDEuMy0xYzAuMi0wLjMsMC4yLTAuNywwLjItMWMwLTAuNS0wLjItMC45LTAuNi0xLjJjLTAuNC0wLjMtMC44LTAuNi0xLjItMC44Yy0wLjItMC4yLTAuNS0wLjMtMC43LTAuNWMtMC4zLTAuMi0wLjItMC42LDAuMS0wLjhjMC4zLTAuMiwwLjctMC4yLDEuMS0wLjFjMC40LDAuMSwwLjcsMC4yLDEsMC40YzAuMiwwLjEsMC4yLDAsMC4yLTAuMmMwLTAuMywwLTAuNiwwLTAuOGMwLTAuMi0wLjEtMC4yLTAuMi0wLjNjLTAuNC0wLjEtMC43LTAuMi0xLjEtMC4yYy0wLjYsMC0xLjIsMC0xLjcsMC4yYy0wLjQsMC4yLTAuNywwLjQtMC45LDAuOGMtMC4yLDAuMy0wLjIsMC42LTAuMiwxYzAsMC42LDAuMywxLjEsMC44LDEuNWMwLjUsMC40LDEsMC43LDEuNSwxYzAuMiwwLjEsMC4zLDAuMywwLjMsMC42YzAsMC4zLTAuMiwwLjUtMC41LDAuNmMtMC41LDAuMS0xLDAuMS0xLjQtMC4xYy0wLjMtMC4xLTAuNS0wLjItMC43LTAuM2MtMC4yLTAuMS0wLjMsMC0wLjMsMC4xYzAsMC4yLDAsMC41LDAsMC43YzAsMC4xLDAuMSwwLjIsMC4yLDAuM2MwLjEsMC4xLDAuMiwwLjEsMC4zLDAuMUMyOC42LDEzLjgsMjkuMSwxMy45LDI5LjYsMTMuOXogTTI0LDguM2MwLDAuMSwwLDAuMSwwLDAuMmMwLDEuNywwLDMuNCwwLDVjMCwwLjIsMCwwLjIsMC4yLDAuMmMwLjQsMCwwLjgsMCwxLjIsMGMwLjIsMCwwLjIsMCwwLjItMC4yYzAtMS43LDAtMy40LDAtNWMwLTAuMSwwLTAuMSwwLTAuMmMwLjEsMCwwLjEsMCwwLjIsMGMwLjUsMCwxLjEsMCwxLjYsMGMwLjIsMCwwLjIsMCwwLjItMC4yYzAtMC4zLDAtMC41LDAtMC44YzAtMC4xLTAuMS0wLjItMC4yLTAuMmMwLDAtMC4xLDAtMC4xLDBjLTEuNiwwLTMuMywwLTQuOSwwYzAsMC0wLjEsMC0wLjEsMGMtMC4xLDAtMC4yLDAuMS0wLjIsMC4yYzAsMC4zLDAsMC41LDAsMC44YzAsMC4xLDAuMSwwLjIsMC4yLDAuMmMwLjUsMCwxLjEsMCwxLjYsMEMyMy45LDguMywyNCw4LjMsMjQsOC4zeiBNOCwxMS4yYzAuNiwwLDEuMSwwLDEuNywwYzAuMywwLDAuNC0wLjEsMC42LTAuM2MwLjItMC41LTAuMS0xLTAuNi0xYy0xLjEsMC0yLjIsMC0zLjMsMGMtMC40LDAtMC43LDAuMi0wLjcsMC42YzAsMC41LDAuMywwLjcsMC42LDAuN0M2LjgsMTEuMiw3LjQsMTEuMiw4LDExLjJ6Ii8+PC9zdmc+)}.bg-gpay{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfN18iIGNsYXNzPSJzdDIzIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxnIGlkPSJHUGF5LUxpZ2h0LXRoZW1lZC1idXR0b25zIj48ZyBpZD0iR1BBWS0tLVNWR3MiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xODUuMDAwMDAwLCAtNDAwLjAwMDAwMCkiPjxnIGlkPSJHUGF5LUJyYW5kLU1hcmsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE4NS4wMDAwMDAsIDQwMC4wMDAwMDApIj48ZyBpZD0iR1BheSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4yNjE0NzQsIDAuMjYxNDc0KSI+PGcgaWQ9IlBheSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTcuNjE1MDY5LCAwLjgyNTcwNikiPjxwYXRoIGlkPSJGaWxsLTEiIGNsYXNzPSJzdDAiIGQ9Ik0tMC42LDcuM3YyLjZIMWMwLjQsMCwwLjctMC4xLDAuOS0wLjRjMC4zLTAuMywwLjQtMC42LDAuNC0wLjljMC0wLjMtMC4xLTAuNi0wLjQtMC45QzEuNyw3LjQsMS40LDcuMywxLDcuM0wtMC42LDcuM0wtMC42LDcuM3ogTS0wLjYsMTAuOHYzaC0xVjYuNEgxYzAuNiwwLDEuMiwwLjIsMS42LDAuNmMwLjUsMC40LDAuNywxLDAuNywxLjZjMCwwLjYtMC4yLDEuMi0wLjcsMS42Yy0wLjQsMC40LTEsMC42LTEuNiwwLjZMLTAuNiwxMC44TC0wLjYsMTAuOHoiLz48cGF0aCBpZD0iRmlsbC0zIiBjbGFzcz0ic3QwIiBkPSJNNC4zLDEyLjNjMCwwLjIsMC4xLDAuNSwwLjMsMC42YzAuMiwwLjIsMC41LDAuMiwwLjcsMC4yYzAuNCwwLDAuOC0wLjEsMS4xLTAuNGMwLjMtMC4zLDAuNS0wLjYsMC41LTEuMWMtMC4zLTAuMi0wLjctMC40LTEuMi0wLjRjLTAuNCwwLTAuNywwLjEtMSwwLjNDNC40LDExLjcsNC4zLDEyLDQuMywxMi4zIE01LjUsOC41YzAuNywwLDEuMywwLjIsMS43LDAuNmMwLjQsMC40LDAuNiwwLjksMC42LDEuNnYzLjFINi45di0wLjdoMEM2LjUsMTMuNyw2LDE0LDUuMywxNGMtMC42LDAtMS0wLjItMS40LTAuNWMtMC40LTAuMy0wLjYtMC43LTAuNi0xLjJjMC0wLjUsMC4yLTAuOSwwLjYtMS4zYzAuNC0wLjMsMC45LTAuNSwxLjYtMC41YzAuNiwwLDEsMC4xLDEuNCwwLjN2LTAuMmMwLTAuMy0wLjEtMC42LTAuNC0wLjhDNi4zLDkuNSw2LDkuNCw1LjYsOS40Yy0wLjUsMC0xLDAuMi0xLjMsMC43TDMuNSw5LjVDMy45LDguOSw0LjYsOC41LDUuNSw4LjUiLz48ZyBpZD0iR3JvdXAtNyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTUuMDg0OTIzLCAzLjc1OTQ0NykiPjxwb2x5Z29uIGlkPSJGaWxsLTUiIGNsYXNzPSJzdDAiIHBvaW50cz0iLTIsNSAtNS4yLDEyLjMgLTYuMiwxMi4zIC01LDkuNyAtNy4xLDUgLTYuMSw1IC00LjUsOC42IC00LjUsOC42IC0zLDUgIi8+PC9nPjwvZz48ZyBpZD0iRyI+PHBhdGggaWQ9IkZpbGwtOCIgY2xhc3M9InN0MCIgZD0iTTEzLjIsMTFjMC0wLjMsMC0wLjYtMC4xLTAuOWgtNHYxLjZoMi4zYy0wLjEsMC41LTAuNCwxLTAuOSwxLjN2MS4xaDEuNEMxMi43LDEzLjQsMTMuMiwxMi4zLDEzLjIsMTEiLz48cGF0aCBpZD0iRmlsbC0xMCIgY2xhc3M9InN0MCIgZD0iTTkuMSwxNS4yYzEuMiwwLDIuMS0wLjQsMi44LTFMMTAuNSwxM2MtMC40LDAuMy0wLjksMC40LTEuNSwwLjRjLTEuMSwwLTIuMS0wLjgtMi40LTEuOEg1LjJ2MS4xQzUuOSwxNC4yLDcuNCwxNS4yLDkuMSwxNS4yIi8+PHBhdGggaWQ9IkZpbGwtMTIiIGNsYXNzPSJzdDAiIGQ9Ik02LjYsMTEuN2MtMC4xLTAuMy0wLjEtMC41LTAuMS0wLjhjMC0wLjMsMC0wLjYsMC4xLTAuOFY5SDUuMmMtMC4zLDAuNi0wLjUsMS4yLTAuNSwxLjljMCwwLjcsMC4yLDEuMywwLjUsMS45TDYuNiwxMS43eiIvPjxwYXRoIGlkPSJGaWxsLTE0IiBjbGFzcz0ic3QwIiBkPSJNOS4xLDguM2MwLjYsMCwxLjIsMC4yLDEuNiwwLjZ2MGwxLjItMS4yQzExLjIsNywxMC4yLDYuNiw5LjEsNi42Yy0xLjcsMC0zLjEsMS0zLjgsMi40bDEuNCwxLjFDNyw5LDcuOSw4LjMsOS4xLDguMyIvPjwvZz48L2c+PC9nPjwvZz48L2c+PC9zdmc+)}.bg-ideal{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU2X2NvcHlfMl8xXyIgY2xhc3M9InN0MTkiIGQ9Ik0zLDBoMzBjMS43LDAsMywxLjMsMywzdjE2YzAsMS43LTEuMywzLTMsM0gzYy0xLjcsMC0zLTEuMy0zLTNWM0MwLDEuMywxLjMsMCwzLDB6Ii8+PGc+PHJlY3QgeD0iMTEuNCIgeT0iMTEuOSIgY2xhc3M9InN0MCIgd2lkdGg9IjIuNyIgaGVpZ2h0PSI0LjUiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTQuMyw5LjdjMCwwLjktMC43LDEuNS0xLjUsMS41Yy0wLjksMC0xLjUtMC43LTEuNS0xLjVjMC0wLjksMC43LTEuNSwxLjUtMS41QzEzLjYsOC4xLDE0LjMsOC44LDE0LjMsOS43eiIvPjxnPjxnPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xOS4zLDMuNkg5LjV2MTQuOWg5Ljh2MGMyLjEsMCwzLjgtMC42LDUtMS42YzEuNS0xLjIsMi4yLTMuMiwyLjItNS44YzAtMS4zLTAuMi0yLjQtMC42LTMuNGMtMC40LTAuOS0wLjktMS43LTEuNi0yLjNDMjMuMSw0LjIsMjEuMywzLjYsMTkuMywzLjZDMTkuMywzLjYsMTkuMywzLjYsMTkuMywzLjZ6IE0xOS4xLDQuNmMxLjksMCwzLjUsMC41LDQuNiwxLjVjMS4yLDEuMSwxLjksMi44LDEuOSw1YzAsNC4zLTIuMSw2LjQtNi40LDYuNGMtMC4zLDAtNy44LDAtOC42LDBjMC0wLjksMC0xMiwwLTEyLjlDMTEuMyw0LjYsMTguOCw0LjYsMTkuMSw0LjZ6Ii8+PC9nPjwvZz48Zz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTYsMTAuNmMwLjEsMCwwLjEsMCwwLjItMC4xYzAsMCwwLjEtMC4xLDAuMS0wLjJjMC0wLjEsMC0wLjMsMC0wLjVjMC0wLjIsMC0wLjMsMC0wLjRjMC0wLjEtMC4xLTAuMi0wLjEtMC4yYy0wLjEtMC4xLTAuMS0wLjEtMC4yLTAuMWMwLDAtMC4yLDAtMC40LDBjMCwwLTAuMSwwLTAuMiwwdjEuNmMwLjEsMCwwLjMsMCwwLjMsMEMxNS44LDEwLjYsMTUuOSwxMC42LDE2LDEwLjZ6Ii8+PHBhdGggY2xhc3M9InN0MCIgZD0iTTIwLjgsMTBjMC4xLDAsMC40LDAsMC41LDBjMC0wLjEtMC4yLTAuNS0wLjMtMC43QzIxLDkuNSwyMC45LDkuOSwyMC44LDEweiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMi43LDExLjJWOC41aDAuN2MwLDAsMCwyLDAsMi4xYzAuMSwwLDEsMCwxLjIsMGMtMC4zLTMuOC0zLjItNC44LTYtNC44aC0zLjN2Mi43aDAuNGMwLjIsMCwwLjQsMCwwLjUsMC4xYzAuMiwwLDAuMywwLjEsMC40LDAuM2MwLjEsMC4xLDAuMiwwLjMsMC4zLDAuNEMxNyw5LjQsMTcsOS42LDE3LDkuOGMwLDAuMiwwLDAuNC0wLjEsMC42Yy0wLjEsMC4yLTAuMiwwLjQtMC4zLDAuNWMtMC4xLDAuMS0wLjIsMC4yLTAuNCwwLjJjLTAuMSwwLTAuMywwLjEtMC41LDAuMWgtMC40djUuM2gzLjNjMi45LDAsNS45LTAuOSw2LTUuM0gyMi43eiBNMTkuNSwxMS4yaC0yLjFWOC41aDIuMVY5YzAsMC0xLjMsMC0xLjQsMGMwLDAuMSwwLDAuMywwLDAuNGMwLjEsMCwxLjMsMCwxLjMsMFYxMGMwLDAtMS4yLDAtMS4zLDBjMCwwLjEsMCwwLjUsMCwwLjZjMC4xLDAsMS40LDAsMS40LDBWMTEuMnogTTIxLjgsMTEuMmMwLDAtMC4yLTAuNS0wLjItMC42Yy0wLjEsMC0wLjgsMC0wLjksMGMwLDAuMS0wLjIsMC42LTAuMiwwLjZoLTAuN2wxLjEtMi43aDAuN2wxLjEsMi43SDIxLjh6Ii8+PC9nPjwvZz48L3N2Zz4=)}.bg-jcb{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU3XzJfIiBjbGFzcz0ic3QxMyIgZD0iTTMsMGgzMGMxLjcsMCwzLDEuMywzLDN2MTZjMCwxLjctMS4zLDMtMywzSDNjLTEuNywwLTMtMS4zLTMtM1YzQzAsMS4zLDEuMywwLDMsMHoiLz48Zz48ZyBpZD0iZzYzMjciPjxwYXRoIGlkPSJwYXRoNjMzOCIgY2xhc3M9InN0MCIgZD0iTTIyLjcsMTIuNWgxLjNjMCwwLDAuMSwwLDAuMiwwYzAuMy0wLjEsMC41LTAuMywwLjUtMC42YzAtMC4zLTAuMi0wLjUtMC41LTAuNmMwLDAtMC4xLDAtMC4yLDBoLTEuM1YxMi41TDIyLjcsMTIuNXoiLz48cGF0aCBpZD0icGF0aDYzNDkiIGNsYXNzPSJzdDAiIGQ9Ik0yMy45LDRjLTEuMywwLTIuMywxLTIuMywyLjN2Mi40aDMuM2MwLjEsMCwwLjIsMCwwLjIsMGMwLjcsMCwxLjMsMC40LDEuMywxLjFjMCwwLjUtMC40LDEtMS4xLDEuMXYwYzAuOCwwLjEsMS4zLDAuNSwxLjMsMS4xYzAsMC43LTAuNiwxLjItMS41LDEuMmgtMy42VjE4SDI1YzEuMywwLDIuMy0xLDIuMy0yLjNWNEwyMy45LDRMMjMuOSw0eiIvPjxwYXRoIGlkPSJwYXRoNjM2MCIgY2xhc3M9InN0MCIgZD0iTTI0LjUsMTBjMC0wLjMtMC4yLTAuNS0wLjUtMC42YzAsMC0wLjEsMC0wLjEsMGgtMS4ydjEuMWgxLjJjMCwwLDAuMSwwLDAuMSwwQzI0LjMsMTAuNSwyNC41LDEwLjMsMjQuNSwxMHoiLz48L2c+PHBhdGggaWQ9InBhdGg2MzcxIiBjbGFzcz0ic3QwIiBkPSJNMTEsNEM5LjcsNCw4LjcsNSw4LjcsNi4zdjUuOGMwLjcsMC4zLDEuMywwLjUsMiwwLjVjMC44LDAsMS4yLTAuNSwxLjItMS4yVjguN2gydjIuN2MwLDEuMS0wLjcsMS45LTIuOSwxLjljLTEuMywwLTIuNC0wLjMtMi40LTAuM1YxOGgzLjRjMS4zLDAsMi4zLTEsMi4zLTIuM1Y0QzE0LjQsNCwxMSw0LDExLDR6Ii8+PHBhdGggaWQ9InBhdGg2Mzg0IiBjbGFzcz0ic3QwIiBkPSJNMTcuNSw0Yy0xLjMsMC0yLjMsMS0yLjMsMi4zdjMuMWMwLjYtMC41LDEuNi0wLjgsMy4zLTAuN2MwLjksMCwxLjgsMC4zLDEuOCwwLjN2MWMtMC41LTAuMi0xLTAuNS0xLjgtMC41Yy0xLjMtMC4xLTIsMC41LTIsMS42YzAsMS4xLDAuOCwxLjcsMiwxLjZjMC43LTAuMSwxLjMtMC4zLDEuOC0wLjV2MWMwLDAtMC45LDAuMi0xLjgsMC4zYy0xLjcsMC4xLTIuNy0wLjItMy4zLTAuN1YxOGgzLjRjMS4zLDAsMi4zLTEsMi4zLTIuM1Y0QzIwLjksNCwxNy41LDQsMTcuNSw0eiIvPjwvZz48L3N2Zz4=)}.bg-maestro{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzUzXzNfIiBjbGFzcz0ic3Q0IiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxjaXJjbGUgY2xhc3M9InN0OCIgY3g9IjE0IiBjeT0iMTEiIHI9IjYiLz48Y2lyY2xlIGlkPSJFbGxpcHNlXzhfY29weV8zXyIgY2xhc3M9InN0OSIgY3g9IjIyIiBjeT0iMTEiIHI9IjYiLz48cGF0aCBpZD0iUm91bmRlZF9SZWN0YW5nbGVfMjVfM18iIGNsYXNzPSJzdDEwIiBkPSJNMTgsNmMtMi44LDEuNS0zLjgsNC45LTIuMyw3LjZjMC40LDAuOCwxLDEuNCwxLjcsMS45YzAuMiwwLjIsMC41LDAuMywwLjcsMC40bDAuMSwwYzIuNy0xLjQsMy43LTQuOSwyLjMtNy42QzE5LjgsNy40LDE5LDYuNSwxOCw2Ii8+PC9zdmc+)}.bg-mastercard{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzUzXzRfIiBjbGFzcz0ic3QzIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxjaXJjbGUgY2xhc3M9InN0NSIgY3g9IjE0IiBjeT0iMTEiIHI9IjYiLz48Y2lyY2xlIGlkPSJFbGxpcHNlXzhfY29weV80XyIgY2xhc3M9InN0NiIgY3g9IjIyIiBjeT0iMTEiIHI9IjYiLz48cGF0aCBpZD0iUm91bmRlZF9SZWN0YW5nbGVfMjVfNF8iIGNsYXNzPSJzdDciIGQ9Ik0xOCw2TDE4LDZjLTIuOCwxLjUtMy44LDQuOS0yLjMsNy42YzAuNCwwLjgsMSwxLjQsMS43LDEuOWMwLjIsMC4yLDAuNSwwLjMsMC43LDAuNGwwLjEsMGMyLjctMS40LDMuNy00LjksMi4zLTcuNkMxOS44LDcuNCwxOSw2LjUsMTgsNiIvPjwvc3ZnPg==)}.bg-mol{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfMTJfIiBjbGFzcz0ic3QyNiIgZD0iTTMsMGgzMGMxLjcsMCwzLDEuMywzLDN2MTZjMCwxLjctMS4zLDMtMywzSDNjLTEuNywwLTMtMS4zLTMtM1YzQzAsMS4zLDEuMywwLDMsMHoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjYuOSwxMy4xYy0wLjUsMC0wLjYtMC4xLTAuNi0wLjZjMC0xLjEsMC0yLjIsMC0zLjNjMC0xLjItMC4yLTEuNC0xLjQtMS40Yy0yLDAtNC4xLDAtNi4xLDBjLTEuMSwwLTIuNSwxLjQtMi41LDIuNWMwLDEuMiwwLDIuNCwwLDMuNmMtMC4yLDAtMC4xLTAuMy0wLjMtMC4zYy0xLTAuMS0wLjgtMC45LTAuOC0xLjVjMC0xLjMsMC0yLjUtMC45LTMuNkMxNCw4LDEzLjcsNy44LDEzLjIsNy44Yy0yLjEsMC00LjIsMC02LjMsMEM2LDcuOCw1LjcsOC4xLDUuNyw5YzAsMS42LDAsMy4yLDAsNC44YzAsMC43LDAuMywxLjEsMC45LDEuMWMwLjYsMCwwLjktMC40LDAuOS0xLjFjMC0xLDAtMiwwLTNjMC0xLjIsMC0xLjIsMS4yLTEuMmMwLjYsMCwwLjcsMC4yLDAuNywwLjdjMCwxLjEsMCwyLjIsMCwzLjNjMCwwLjgsMC4zLDEuMywxLDEuM2MwLjYsMCwwLjktMC40LDAuOS0xLjJjMC0xLjIsMC0yLjMsMC0zLjVjMC0wLjQsMC4xLTAuNiwwLjYtMC42YzAuOSwwLDEuNCwwLjUsMS40LDEuNGMwLDAuOSwwLDEuOCwwLDIuN2MwLDAuOCwwLjMsMS4xLDEuMSwxLjFjMi4yLDAsNC40LDAsNi42LDBjMC4zLDAsMC41LDAsMC43LTAuMmMwLjUtMC42LDEuMS0xLjEsMS41LTEuOGMwLjEtMS4xLDAtMi4yLDAtMy4zYzAtMC4xLTAuMi0wLjQsMC4yLTAuNWMwLjgsMC4xLDAuOSwwLjYsMC45LDEuM2MtMC4xLDEuMSwwLDIuMywwLDMuNGMwLDAuOCwwLjMsMSwxLjEsMWMwLjksMCwxLjktMC4xLDIuOCwwYzEuNSwwLjIsMi4xLTAuOSwzLTEuOUMyOS43LDEzLjEsMjguMywxMywyNi45LDEzLjF6IE0yMS41LDEyYzAsMC45LTAuNywxLjQtMS44LDEuNGMtMS41LDAtMS41LDAtMS41LTEuNWMwLDAsMC0wLjEsMC0wLjFjMC0wLjQsMC0wLjgsMC0xLjJjMC0wLjgsMC43LTEuMywxLjctMS4zYzEuNiwwLDEuNiwwLDEuNiwxLjZDMjEuNSwxMS4zLDIxLjUsMTEuNywyMS41LDEyeiIvPjwvc3ZnPg==)}.bg-paypal{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU4XzFfIiBjbGFzcz0ic3QxMyIgZD0iTTMsMGgzMGMxLjcsMCwzLDEuMywzLDN2MTZjMCwxLjctMS4zLDMtMywzSDNjLTEuNywwLTMtMS4zLTMtM1YzQzAsMS4zLDEuMywwLDMsMHoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjMsOS45YzAsMC4zLDAsMC41LTAuMSwwLjhjLTAuMiwxLjgtMS45LDMuMi0zLjcsM2gtMC4zYy0wLjIsMC0wLjQsMC4yLTAuNSwwLjRMMTgsMTYuNmMwLDAuMi0wLjIsMC40LTAuNSwwLjRoLTEuNGMtMC4yLDAtMC4zLTAuMS0wLjMtMC4zYzAsMCwwLDAsMCwwbDAuNy00LjRsMCwwaDEuMWMyLjMsMC4yLDQuNC0xLjUsNC43LTMuOEMyMi44LDguOCwyMyw5LjMsMjMsOS45eiBNMTUuOSwxMmMwLTAuMywwLjItMC42LDAuNi0wLjZjMCwwLDAuMSwwLDAuMSwwaDEuMWMyLjMsMCwzLjYtMSw0LTMuMmMwLjQtMi4xLTEuMS0zLjItMy0zLjJIMTVjLTAuMywwLTAuNSwwLjItMC41LDAuNWMtMS4yLDcuNC0xLjUsOS4zLTEuNSw5LjljMCwwLjIsMC4xLDAuMywwLjMsMC4zYzAsMCwwLDAsMCwwaDJMMTUuOSwxMnoiLz48L3N2Zz4=)}.bg-poli{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfOV8iIGNsYXNzPSJzdDMxIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxnIGlkPSJwb2xpXzFfIj48cGF0aCBpZD0icG9saS1sb2dvXzFfIiBjbGFzcz0ic3QwIiBkPSJNMTguNSwxNC44YzAuMy0wLjEsMC43LTAuNCwxLTAuNmMwLjgtMC43LDEuNy0yLDEuNi0zLjVDMjEsOSwyMC4xLDcuOSwxOSw3LjNjMC4zLDAuMSwwLjYsMC4zLDAuOSwwLjVjMC43LDAuNiwxLjMsMS41LDEuMywyLjhjMCwxLjctMC45LDIuOS0xLjgsMy43YzAuMy0wLjEsMC41LTAuNCwwLjctMC43YzAuNi0wLjcsMS4yLTEuOCwxLjItMy4xYzAtMS44LTEtMi45LTIuMi0zLjZjMC40LDAuMSwwLjgsMC40LDEsMC42YzAuNywwLjYsMS40LDEuNywxLjMsMy4xYy0wLjEsMS40LTAuNywyLjUtMS42LDMuNGMtMC45LDAuOC0yLDEuNC0zLjQsMS41Yy0wLjEsMC0wLjMsMC0wLjUsMGMtMi4xLTAuMi0zLjYtMS41LTMuOC0zLjZjMC0wLjIsMC0wLjQsMC0wLjZjMC4xLTEuMywwLjctMi4zLDEuNS0zLjFjMC44LTAuOSwxLjktMS41LDMuNC0xLjZDMTcsNi42LDE3LDYuNCwxNyw2LjNjMC41LDAuNSwxLjEsMS4xLDEuNywxLjdjLTAuNywwLjQtMS41LDAuOC0yLjIsMS4yYzAtMC4xLDAtMC4zLDAuMS0wLjRjLTEuMiwwLjItMi4zLDEuMS0yLjUsMi40Yy0wLjMsMS41LDAuOCwyLjcsMi4yLDIuN2MxLjUsMCwyLjgtMS4xLDMtMi41YzAuMi0xLjEtMC4zLTEuOC0wLjktMi4zYzAuNiwwLjQsMS4yLDEsMS4xLDJjLTAuMSwxLjYtMS42LDIuOS0zLjEsMi45Yy0wLjgsMC0xLjYtMC40LTIuMS0xYzAuNSwwLjcsMS40LDEuMSwyLjQsMWMwLjgtMC4xLDEuNC0wLjQsMS45LTAuOWMwLjUtMC41LDAuOS0xLjEsMS0xLjhjMC0wLjMsMC0wLjYsMC0wLjhjLTAuMS0wLjgtMC42LTEuMi0xLjEtMS43YzAuNiwwLjUsMS4zLDEuMiwxLjMsMi4zYy0wLjEsMS42LTEuNiwzLTMuMiwzLjFjLTEuMSwwLjEtMS43LTAuMy0yLjMtMC44YzAuNSwwLjcsMS41LDEsMi42LDAuOGMxLjUtMC4yLDIuOC0xLjUsMy0zYzAuMS0xLjQtMC42LTItMS4yLTIuN2MwLjcsMC41LDEuMywxLjEsMS40LDIuMmMwLDEtMC40LDEuOS0xLDIuNWMtMSwxLTIuOCwxLjYtNC4zLDAuN2MxLjIsMC45LDMuMiwwLjQsNC4yLTAuNWMwLjctMC43LDEuMy0xLjYsMS4yLTIuOWMtMC4xLTEuMS0wLjctMS42LTEuNC0yLjJjMC43LDAuNCwxLjQsMS4xLDEuNSwyLjFjMC4xLDEuNC0wLjUsMi40LTEuMywzLjFjLTAuOSwwLjgtMi4yLDEuMy0zLjcsMC45YzIuNCwwLjgsNC43LTEuMSw1LTMuMWMwLjItMS41LTAuNS0yLjQtMS4zLTNjLTAuMS0wLjEtMC4xLTAuMS0wLjItMC4yYzEsMC41LDEuOSwxLjcsMS42LDMuNGMtMC40LDItMi40LDMuNi00LjksMy4yYzAuNCwwLjEsMC44LDAuMSwxLjIsMC4xYzEuMi0wLjEsMi4yLTAuNiwyLjgtMS4zYzAuNy0wLjgsMS4yLTEuNywxLjEtMy4xYy0wLjEtMS4yLTAuOC0xLjgtMS42LTIuNWMwLjQsMC4xLDAuNywwLjQsMC45LDAuN2MwLjQsMC41LDAuOCwxLjEsMC44LDEuOWMwLjEsMS40LTAuNiwyLjUtMS4zLDMuMmMtMC44LDAuOC0xLjgsMS4zLTMuMSwxLjNjMi4xLDAuMSwzLjQtMS4yLDQuMS0yLjZjMC40LTAuOCwwLjUtMiwwLjItMi44Yy0wLjMtMC44LTAuOS0xLjQtMS42LTEuOGMxLjEsMC42LDIuMSwxLjcsMS45LDMuNWMtMC4xLDAuNy0wLjMsMS4yLTAuNiwxLjdjLTAuNiwxLTEuNiwxLjgtMi44LDIuMmMwLjgtMC4yLDEuNi0wLjcsMi4yLTEuM2MwLjctMC44LDEuMy0xLjgsMS4yLTMuMmMwLTEuNS0xLTIuNC0xLjktM2MwLDAsMCwwLDAsMGMxLDAuNSwxLjgsMS40LDIsMi44QzIxLjIsMTIuNCwxOS44LDE0LDE4LjUsMTQuOCIvPjxwYXRoIGlkPSJwb2xpLXR4dF8xXyIgY2xhc3M9InN0MzQiIGQ9Ik04LDExLjRjMCwwLDAsMCwwLjEsMGMwLjcsMCwwLjktMC4yLDEtMC4zYzAuMi0wLjIsMC4yLTAuNywwLjItMS4xYzAtMC40LDAtMC43LTAuMy0xQzguOSw4LjgsOC40LDguNyw4LDguN2wwLDAuMUw4LDExLjRMOCwxMS40eiBNNS42LDE1LjRWNy4yaDIuMWMwLjgsMCwxLjUsMCwxLjksMC4xYzAuNCwwLjEsMC45LDAuMiwxLjEsMC40YzAuMywwLjIsMC42LDAuNSwwLjgsMC45YzAuMiwwLjQsMC4zLDAuOSwwLjMsMS41YzAsMC45LTAuMiwxLjctMC43LDIuMWMtMC41LDAuNS0xLjYsMC43LTIuNSwwLjdIOHYyLjVINS42eiBNMjcuNCwxNS4zSDIyVjcuMmgyLjZ2NS43aDIuN1YxNS4zeiBNMzAuNCwxNS40aC0yLjVWMTBoMi41VjE1LjR6IE0zMC40LDkuNGgtMi42VjcuMmgyLjZWOS40eiIvPjwvZz48L3N2Zz4=)}.bg-qiwi{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfMTFfIiBjbGFzcz0ic3QyOCIgZD0iTTMsMGgzMGMxLjcsMCwzLDEuMywzLDN2MTZjMCwxLjctMS4zLDMtMywzSDNjLTEuNywwLTMtMS4zLTMtM1YzQzAsMS4zLDEuMywwLDMsMHoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTAuOSwxNC44YzAuMSwwLjMsMC4yLDAuNSwwLjQsMC43YzAuMiwwLjIsMC40LDAuNCwwLjYsMC41YzAuMiwwLjEsMC41LDAuMywwLjcsMC4zYzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4xYzAuMSwwLDAuMiwwLjEsMC4zLDAuM2MwLDAuMi0wLjEsMC4zLTAuMywwLjNjLTAuMiwwLTAuMy0wLjEtMC41LTAuMWMtMC45LTAuMS0xLjctMC42LTIuNC0xLjJjLTAuMS0wLjEtMC4yLTAuMi0wLjMtMC40UzkuNiwxNSw5LjUsMTQuOWMtMC42LTAuMS0xLjItMC40LTEuNi0wLjhjLTAuNC0wLjUtMC43LTEuMS0wLjgtMS43QzYuOSwxMS43LDcsMTEsNy4yLDEwLjJDNy40LDksOC42LDgsOS45LDhjMC40LDAsMC44LDAuMSwxLjEsMC4yYzAuMywwLjEsMC43LDAuMywwLjksMC42YzAsMCwwLDAsMCwwQzEyLDguOSwxMi4yLDksMTIuMiw5LjFjMCwwLDAsMC4xLDAsMC4xYzAsMCwwLjEsMC4xLDAuMSwwLjFzMCwwLDAsMC4xczAsMC4xLDAuMSwwLjFjMCwwLDAsMCwwLDBjMCwwLjEsMC4xLDAuMiwwLjEsMC4zczAuMSwwLjIsMC4xLDAuM2MwLjEsMC4zLDAuMiwwLjYsMC4yLDAuOWMwLjEsMC44LTAuMSwxLjctMC40LDIuNGMtMC4yLDAuMy0wLjQsMC42LTAuNywwLjhDMTEuNSwxNC41LDExLjIsMTQuNywxMC45LDE0Ljh6IE05LjcsOC44QzkuNiw4LjksOS40LDguOSw5LjIsOUM5LjEsOS4xLDksOS4yLDguOSw5LjNDOC44LDkuNCw4LjcsOS41LDguNiw5LjdjLTAuMSwwLjMtMC4yLDAuNS0wLjIsMC44Yy0wLjEsMC4zLTAuMSwwLjYtMC4xLDFjMCwwLjcsMC4xLDEuNSwwLjUsMi4xQzksMTMuOCw5LjIsMTQsOS41LDE0LjFjMC4yLDAsMC4zLDAuMSwwLjUsMC4xYzAuMSwwLDAuMiwwLDAuMy0wLjFjMC4xLDAsMC4yLDAsMC4zLTAuMWMwLjEtMC4xLDAuMS0wLjEsMC4yLTAuMmMwLjEtMC4xLDAuMi0wLjIsMC4zLTAuM2MwLTAuMSwwLjEtMC4yLDAuMS0wLjJjMC40LTEsMC41LTIuMSwwLjItMy4yYy0wLjEtMC4zLTAuMi0wLjYtMC40LTAuOGMtMC4yLTAuMi0wLjQtMC4zLTAuNi0wLjVDMTAuMiw4LjgsMTAsOC44LDkuNyw4LjhDOS44LDguOCw5LjgsOC44LDkuNyw4LjhMOS43LDguOEw5LjcsOC44eiBNMTQuNyw4LjJjMC40LDAsMC44LDAsMS4xLDBjMC4xLDAuMSwwLjEsMC4zLDAsMC40YzAsMS43LDAsMy42LDAsNS40YzAsMC4xLDAsMC4zLDAsMC40YzAsMC4xLDAsMC4yLDAsMC40Yy0wLjIsMC0wLjQsMC0wLjYsMGMtMC4yLDAtMC40LDAtMC42LDBDMTQuNiwxMi42LDE0LjYsMTAuNCwxNC43LDguMkMxNC42LDguMiwxNC43LDguMiwxNC43LDguMkwxNC43LDguMnogTTE3LjUsOC4yaDEuMWMwLjEsMC4yLDAuMSwwLjQsMC4yLDAuNWMwLjMsMS4zLDAuNywyLjYsMSwzLjljMC4xLDAsMC0wLjEsMC4xLTAuMXMwLTAuMSwwLTAuMWMwLTAuMSwwLjEtMC4yLDAuMS0wLjNjMC4xLTAuMiwwLjEtMC40LDAuMi0wLjVjMC4xLTAuNCwwLjItMC43LDAuMy0xLjFzMC4yLTAuNywwLjMtMS4xYzAuMi0wLjMsMC4yLTAuOCwwLjQtMS4xaDAuNWMwLjIsMC4zLDAuMiwwLjgsMC40LDEuMWMwLjEsMC40LDAuMiwwLjcsMC4zLDEuMWMwLjIsMC43LDAuNSwxLjUsMC43LDIuMmMwLjEtMC4yLDAuMS0wLjQsMC4yLTAuNWMwLTAuMiwwLjEtMC40LDAuMS0wLjVjMC4yLTAuOCwwLjQtMS41LDAuNi0yLjJjMC4xLTAuNCwwLjItMC43LDAuMy0xLjFjMC4zLDAsMC42LDAsMSwwYzAsMC4zLTAuMSwwLjYtMC4yLDAuOGMwLDAuMy0wLjIsMC41LTAuMiwwLjhjLTAuMiwwLjUtMC4zLDEuMS0wLjUsMS42Yy0wLjEsMC42LTAuMywxLjEtMC40LDEuN2MtMC4xLDAuMy0wLjIsMC42LTAuMiwwLjhjLTAuMSwwLjMtMC4xLDAuNS0wLjMsMC44aC0wLjdjLTAuMi0wLjMtMC4yLTAuNy0wLjQtMWMtMC4zLTEtMC43LTIuMS0xLTMuMWMtMC4xLDAuMi0wLjEsMC4zLTAuMiwwLjVjMCwwLjItMC4xLDAuNC0wLjIsMC41Yy0wLjEsMC40LTAuMiwwLjctMC4zLDFjLTAuMSwwLjMtMC4yLDAuNy0wLjMsMWMtMC4xLDAuMy0wLjIsMC43LTAuNCwxYy0wLjIsMC0wLjQsMC0wLjcsMEMxOS4xLDE0LjUsMTksMTQuMywxOSwxNGMtMC4xLTAuMy0wLjEtMC42LTAuMi0wLjhjLTAuMS0wLjYtMC4zLTEuMS0wLjQtMS43Yy0wLjItMC41LTAuMy0xLjEtMC41LTEuNmMtMC4xLTAuMy0wLjItMC41LTAuMi0wLjhDMTcuNSw4LjgsMTcuNCw4LjUsMTcuNSw4LjJDMTcuNSw4LjIsMTcuNSw4LjIsMTcuNSw4LjJMMTcuNSw4LjJ6IE0yNi44LDguMmMwLjQsMCwwLjgsMCwxLjEsMEMyOCw4LjUsMjgsOC43LDI4LDl2NWMwLDAuMywwLDAuNSwwLDAuOGMtMC4zLDAtMC42LDAtMC45LDBjLTAuMSwwLTAuMiwwLTAuMywwYy0wLjEtMC4zLTAuMS0wLjUsMC0wLjhWOUMyNi42LDguNywyNi43LDguNSwyNi44LDguMkMyNi43LDguMiwyNi44LDguMiwyNi44LDguMnoiLz48L3N2Zz4=)}.bg-safetypay{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfMTBfIiBjbGFzcz0ic3QyOSIgZD0iTTMsMGgzMGMxLjcsMCwzLDEuMywzLDN2MTZjMCwxLjctMS4zLDMtMywzSDNjLTEuNywwLTMtMS4zLTMtM1YzQzAsMS4zLDEuMywwLDMsMHoiLz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTgsNGwtNyw3bDcsN2w3LTdMMTgsNHogTTE2LjYsMTUuM2wtMi4xLTIuMWwyLjEtMi4xbC0yLjEtMi4xbDIuMS0yLjFMMTguOCw5bDIuMSwyLjFMMTYuNiwxNS4zeiBNMjIuOSwxMS44bC0zLjUsMy41bC0wLjgtMC44bDMuNS0zLjVsLTMuNS0zLjVsMC44LTAuOGw0LjMsNC4zTDIyLjksMTEuOEwyMi45LDExLjhMMjIuOSwxMS44eiIvPjwvc3ZnPg==)}.bg-sepa{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU2X2NvcHlfMl8zXyIgY2xhc3M9InN0MjUiIGQ9Ik0zLDBoMzBjMS43LDAsMywxLjMsMywzdjE2YzAsMS43LTEuMywzLTMsM0gzYy0xLjcsMC0zLTEuMy0zLTNWM0MwLDEuMywxLjMsMCwzLDB6Ii8+PGc+PHBhdGggY2xhc3M9InN0MCIgZD0iTTExLjIsOS44SDkuNWMwLTAuMiwwLTAuNC0wLjEtMC42QzkuMyw5LjEsOSw5LDguNiw5QzguMyw5LDgsOSw3LjcsOS4xQzcuNSw5LjMsNy40LDkuNSw3LjUsOS43YzAsMC4yLDAsMC40LDAuMiwwLjVjMC4xLDAuMSwwLjIsMC4xLDAuNCwwLjFsMC4zLDBjMC43LDAsMS4yLDAuMSwxLjQsMC4xYzAuNSwwLDAuOSwwLjIsMS4zLDAuNWMwLjIsMC4yLDAuMywwLjUsMC40LDAuOGMwLDAuMiwwLDAuNCwwLDAuNmMwLDAuNCwwLDAuOC0wLjIsMS4yYy0wLjIsMC41LTAuNiwwLjgtMS4zLDAuOWMtMC40LDAuMS0wLjgsMC4xLTEuMywwLjFjLTAuNywwLTEuMywwLTItMC4yYy0wLjQtMC4xLTAuOC0wLjQtMC45LTAuOGMtMC4xLTAuNC0wLjEtMC44LTAuMS0xLjJoMS43YzAsMC4xLDAsMC4xLDAsMC4xYzAsMC4yLDAuMSwwLjQsMC4yLDAuNkM3LjgsMTMsNy45LDEzLDgsMTNoMC42YzAuMiwwLDAuNCwwLDAuNi0wLjFjMC4xLDAsMC4zLTAuMiwwLjMtMC4zYzAtMC4xLDAtMC4yLDAtMC4zYzAtMC4yLTAuMS0wLjUtMC4zLTAuNWMtMC40LTAuMS0wLjctMC4xLTEuMS0wLjFjLTAuNSwwLTAuOS0wLjEtMS4xLTAuMWMtMC40LDAtMC44LTAuMy0xLjEtMC42Yy0wLjItMC40LTAuMy0wLjgtMC4yLTEuMmMwLTAuMywwLTAuNywwLjEtMWMwLjEtMC4yLDAuMi0wLjQsMC40LTAuNkM2LjYsNy45LDcsNy43LDcuMyw3LjdjMC40LDAsMC44LDAsMS4yLDBjMC41LDAsMSwwLDEuNSwwLjFjMC43LDAuMiwxLjEsMC43LDEuMSwxLjdDMTEuMiw5LjUsMTEuMiw5LjYsMTEuMiw5Ljh6IE0xOC42LDE0LjRWNy42aDMuNGMwLjQsMCwwLjcsMCwxLjEsMC4xYzAuNSwwLjEsMC45LDAuNSwxLjEsMS4xYzAuMSwwLjQsMC4yLDAuOCwwLjEsMS4zYzAsMC41LDAsMS0wLjIsMS41Yy0wLjIsMC42LTAuNywxLTEuMywxYy0wLjEsMC0wLjQsMC0xLDBsLTAuMywwaC0xLjF2MS43SDE4LjZ6IE0yMC40LDExLjFoMS4xYzAuMiwwLDAuNCwwLDAuNy0wLjFjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0wLjIsMC0wLjQsMC0wLjVjMC0wLjIsMC0wLjQtMC4xLTAuNmMtMC4xLTAuMi0wLjMtMC4zLTAuNS0wLjRjLTAuMSwwLTAuMiwwLTAuNCwwaC0xLjFMMjAuNCwxMS4xTDIwLjQsMTEuMXogTTI4LjEsMTMuMmgtMi40bC0wLjMsMS4yaC0xLjlsMi02LjdoMi43bDIsNi43aC0xLjhMMjguMSwxMy4yeiBNMjcuOCwxMS45TDI2LjksOWwtMC44LDIuOUgyNy44eiIvPjxwYXRoIGNsYXNzPSJzdDM2IiBkPSJNMTQsOS44aDMuN2wwLDBsLTAuNCwxbDAsMGgtMy42bDAsMGMwLDAuMSwwLDAuMiwwLDAuMmMwLDAuMSwwLDAuMiwwLDAuNGwwLDBIMTdsMCwwbC0wLjUsMWwwLDBIMTRsMCwwYzAuNywxLjEsMi4yLDEuNCwzLjMsMC43YzAuMi0wLjEsMC40LTAuMywwLjUtMC40bC0wLjEsMHYxLjJsMCwwYy0xLjYsMS0zLjcsMC42LTQuNy0wLjljLTAuMS0wLjItMC4yLTAuMy0wLjMtMC41bDAsMGgtMS4ybDAsMGwwLjQtMWwwLDBoMC41bDAsMGMwLTAuMSwwLTAuMiwwLTAuM2MwLTAuMSwwLTAuMiwwLTAuM2wwLDBoLTFsMCwwbDAuNS0xbDAsMGgwLjhsMCwwYzAuMi0wLjYsMC43LTEuMSwxLjItMS41YzEuMy0wLjksMy4xLTAuNyw0LjIsMC4zbDAsMGwtMC40LDAuOGwwLDBjLTAuOC0xLTIuNC0xLjItMy40LTAuNEMxNC4zLDkuMywxNC4xLDkuNSwxNCw5LjhMMTQsOS44TDE0LDkuOEwxNCw5Ljh6Ii8+PC9nPjwvc3ZnPg==)}.bg-sofort{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU2X2NvcHlfMV8iIGNsYXNzPSJzdDMwIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMC43LDVjLTEuMS0wLjEtMi4yLDAuMS0zLjMsMC41Yy0xLjMsMC43LTIuMiwxLjktMi42LDMuNGMtMC4xLDAuMy0wLjIsMC43LTAuMiwxLjFjMCwwLjMsMCwwLjYsMC4yLDAuOGMwLjIsMC4zLDAuNCwwLjYsMC43LDAuOGMwLjMsMC4yLDAuNywwLjQsMS4xLDAuNWwwLjUsMC4xYzAuMywwLjEsMC42LDAuMiwwLjcsMC4yYzAuMSwwLDAuMiwwLjEsMC4zLDAuMWMwLjEsMC4xLDAuMiwwLjEsMC4zLDAuM2MwLDAuMSwwLjEsMC4yLDAuMSwwLjJjMCwwLjEsMCwwLjItMC4xLDAuM2MtMC4xLDAuMi0wLjMsMC40LTAuNSwwLjVjLTAuNCwwLjEtMC44LDAuMi0xLjMsMC4xSDkuMkw4LDE3aDhjMS4yLDAsMi40LTAuMSwzLjUtMC41YzEuNi0wLjYsMi44LTIsMy4xLTMuN2MwLjItMC43LDAuMS0xLjQtMC4yLTJjLTAuNC0wLjYtMS4xLTEtMS44LTEuMWwtMC40LTAuMWwtMC42LTAuMmMtMC4yLDAtMC40LTAuMi0wLjUtMC4zQzE5LDguOSwxOC45LDguNywxOSw4LjVjMC4xLTAuMiwwLjItMC40LDAuNC0wLjVjMC4zLTAuMSwwLjUtMC4yLDAuOC0wLjJoNC43YzAsMCwwLjEtMC4xLDAuMS0wLjFjMC44LTEuMSwxLjgtMiwzLTIuN0gyMC43TDIwLjcsNXoiLz48L3N2Zz4=)}.bg-tenpay{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfOF8iIGNsYXNzPSJzdDMyIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxwYXRoIGlkPSJUZW5wYXktMl8xXyIgY2xhc3M9InN0MCIgZD0iTTcuNCwxMy42aDFWOS45aDEuNFY5SDZ2MC45aDEuNFYxMy42eiBNMTAuNiwxMi42YzAuMSwwLjIsMC4yLDAuNCwwLjQsMC42YzAuMiwwLjIsMC40LDAuMywwLjYsMC40YzAuMiwwLjEsMC41LDAuMSwwLjgsMC4xYzAuMiwwLDAuNSwwLDAuNy0wLjFjMC4yLTAuMSwwLjUtMC4yLDAuNy0wLjNsLTAuMy0wLjZjLTAuMSwwLjEtMC4zLDAuMS0wLjQsMC4yYy0wLjEsMC0wLjMsMC4xLTAuNSwwLjFjLTAuMiwwLTAuNS0wLjEtMC43LTAuMmMtMC4yLTAuMS0wLjMtMC4zLTAuNC0wLjZoMi40YzAtMC4xLDAtMC4xLDAtMC4yYzAtMC4xLDAtMC4yLDAtMC4zYzAtMC4yLDAtMC41LTAuMS0wLjdjLTAuMS0wLjItMC4yLTAuNC0wLjMtMC41Yy0wLjEtMC4yLTAuMy0wLjMtMC41LTAuNGMtMC41LTAuMi0wLjktMC4yLTEuNCwwYy0wLjIsMC4xLTAuNCwwLjItMC42LDAuNGMtMC4yLDAuMi0wLjMsMC40LTAuNCwwLjZjLTAuMSwwLjItMC4yLDAuNS0wLjIsMC44QzEwLjQsMTIuMSwxMC41LDEyLjQsMTAuNiwxMi42TDEwLjYsMTIuNnogTTExLjUsMTEuNWMwLTAuMiwwLjEtMC40LDAuMy0wLjVjMC4xLTAuMSwwLjMtMC4yLDAuNS0wLjJjMC4yLDAsMC40LDAuMSwwLjUsMC4yYzAuMSwwLjEsMC4yLDAuMywwLjIsMC41TDExLjUsMTEuNUwxMS41LDExLjV6IE0xNC44LDEzLjZoMXYtMi4zYzAuMS0wLjEsMC4yLTAuMiwwLjMtMC4zYzAuMS0wLjEsMC4yLTAuMSwwLjQtMC4xYzAuMiwwLDAuMywwLDAuNCwwLjJjMC4xLDAuMiwwLjEsMC4zLDAuMSwwLjV2Mmgxdi0yLjJjMC0wLjQtMC4xLTAuNy0wLjMtMUMxNy43LDEwLjEsMTcuMywxMCwxNywxMGMtMC4yLDAtMC41LDAuMS0wLjcsMC4yYy0wLjIsMC4xLTAuNCwwLjItMC41LDAuNGgwbC0wLjEtMC41aC0wLjlMMTQuOCwxMy42TDE0LjgsMTMuNnogTTIwLjEsMTMuM2MwLjIsMC4yLDAuNSwwLjQsMC45LDAuNGMwLjIsMCwwLjQsMCwwLjYtMC4xYzAuMi0wLjEsMC40LTAuMiwwLjUtMC40YzAuMS0wLjIsMC4zLTAuNCwwLjMtMC42YzAuMS0wLjMsMC4xLTAuNSwwLjEtMC44YzAtMC4yLDAtMC41LTAuMS0wLjdjLTAuMS0wLjItMC4yLTAuNC0wLjMtMC42Yy0wLjEtMC4yLTAuMy0wLjMtMC40LTAuNGMtMC4yLTAuMS0wLjQtMC4xLTAuNi0wLjFjLTAuMiwwLTAuNCwwLTAuNiwwLjFjLTAuMiwwLjEtMC4zLDAuMi0wLjUsMC4zaDBsLTAuMS0wLjRoLTAuOXY0LjhoMXYtMUwyMC4xLDEzLjN6IE0yMC4xLDExLjJjMC4yLTAuMiwwLjQtMC4zLDAuNy0wLjNjMC40LDAsMC42LDAuMywwLjYsMC45YzAsMC4zLDAsMC42LTAuMiwwLjhjLTAuMSwwLjItMC4zLDAuMi0wLjUsMC4yYy0wLjIsMC0wLjQtMC4xLTAuNi0wLjJMMjAuMSwxMS4yTDIwLjEsMTEuMnogTTIzLjMsMTMuMWMwLjEsMC4xLDAuMSwwLjIsMC4yLDAuM2MwLjEsMC4xLDAuMiwwLjIsMC40LDAuMmMwLjIsMC4xLDAuMywwLjEsMC41LDAuMWMwLjIsMCwwLjUsMCwwLjctMC4xYzAuMi0wLjEsMC40LTAuMiwwLjYtMC4zaDBsMC4xLDAuNGgwLjl2LTJjMC0wLjQtMC4xLTAuOS0wLjQtMS4yQzI1LjksMTAuMSwyNS41LDEwLDI1LDEwYy0wLjMsMC0wLjYsMC0wLjksMC4xYy0wLjMsMC4xLTAuNSwwLjItMC44LDAuM2wwLjQsMC43YzAuMi0wLjEsMC40LTAuMiwwLjYtMC4yYzAuMi0wLjEsMC4zLTAuMSwwLjUtMC4xYzAuMiwwLDAuNCwwLDAuNSwwLjFjMC4xLDAuMSwwLjIsMC4yLDAuMiwwLjRjLTAuNCwwLTAuNywwLjEtMS4xLDAuMWMtMC4zLDAtMC41LDAuMS0wLjcsMC4zYy0wLjIsMC4xLTAuMywwLjItMC40LDAuNGMtMC4xLDAuMi0wLjEsMC4zLTAuMSwwLjVDMjMuMywxMi44LDIzLjMsMTIuOSwyMy4zLDEzLjFMMjMuMywxMy4xeiBNMjQuMywxMi40YzAuMS0wLjEsMC4xLTAuMSwwLjItMC4yYzAuMS0wLjEsMC4zLTAuMSwwLjQtMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMXYwLjZjLTAuMSwwLjEtMC4zLDAuMi0wLjQsMC4yYy0wLjEsMC4xLTAuMywwLjEtMC40LDAuMWMtMC4xLDAtMC4yLDAtMC40LTAuMWMtMC4xLTAuMS0wLjEtMC4xLTAuMS0wLjNDMjQuMywxMi41LDI0LjMsMTIuNCwyNC4zLDEyLjRMMjQuMywxMi40eiBNMjcuNywxNC4xbC0wLjIsMC44YzAuMSwwLDAuMiwwLDAuMiwwLjFjMC4xLDAsMC4yLDAsMC4zLDBjMC4yLDAsMC40LDAsMC42LTAuMWMwLjItMC4xLDAuMy0wLjEsMC40LTAuM2MwLjEtMC4xLDAuMy0wLjMsMC4zLTAuNGMwLjEtMC4yLDAuMi0wLjQsMC4zLTAuNmwxLjQtMy42aC0xbC0wLjUsMS41Yy0wLjEsMC4yLTAuMSwwLjQtMC4yLDAuNWMtMC4xLDAuMi0wLjEsMC40LTAuMiwwLjVoMGMtMC4xLTAuMi0wLjEtMC40LTAuMi0wLjVDMjksMTIsMjksMTEuOCwyOC45LDExLjZsLTAuNi0xLjVoLTFsMS41LDMuNGwtMC4xLDAuMmMtMC4xLDAuMS0wLjEsMC4yLTAuMywwLjNjLTAuMSwwLjEtMC4zLDAuMS0wLjUsMC4xQzI3LjksMTQuMiwyNy44LDE0LjIsMjcuNywxNC4xTDI3LjcsMTQuMUwyNy43LDE0LjF6Ii8+PC9zdmc+)}.bg-trustpay{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfNV8iIGNsYXNzPSJzdDIxIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxnIGlkPSJ0cnVzdHBheSI+PHBhdGggaWQ9IlhNTElEXzY4NV8iIGQ9Ik0yMC44LDEzLjRjLTAuNCwwLTAuNywwLTEuMSwwYzAuNC0xLjgsMC43LTMuNiwxLjEtNS40YzAuOSwwLDEuOCwwLDIuNywwYzAuMiwwLDAuNCwwLjEsMC42LDAuMWMwLjMsMC4xLDAuNiwwLjQsMC42LDAuN2MwLjEsMC43LTAuMSwxLjMtMC41LDEuOWMtMC40LDAuNS0wLjksMC42LTEuNCwwLjZjLTAuNCwwLTAuOSwwLTEuMywwYy0wLjEsMC0wLjIsMC0wLjIsMC4xQzIxLjEsMTIuMiwyMC45LDEyLjgsMjAuOCwxMy40eiBNMjEuNCwxMC41YzAuNCwwLDAuNywwLDEuMSwwYzAuNiwwLDAuOC0wLjIsMS0wLjhjMC0wLjEsMC0wLjEsMC0wLjJjMC0wLjItMC4xLTAuNC0wLjMtMC40Yy0wLjUtMC4xLTEtMC4xLTEuNS0wLjFDMjEuNiw5LjUsMjEuNSwxMCwyMS40LDEwLjV6IE0yNy40LDEzLjRjLTAuMywwLTAuNiwwLTEsMGMwLTAuMSwwLTAuMSwwLTAuMmMtMC4yLDAuMS0wLjUsMC4yLTAuNywwLjJjLTAuMywwLTAuNywwLjEtMSwwYy0wLjUtMC4xLTAuNy0wLjUtMC42LTEuMWMwLjEtMC43LDAuNy0xLjIsMS40LTEuM2MwLjQtMC4xLDAuOC0wLjEsMS4yLTAuMmMwLjEsMCwwLjIsMCwwLjItMC4yYzAtMC4xLDAtMC4xLDAtMC4yYzAtMC4yLDAtMC40LTAuMy0wLjRjLTAuMiwwLTAuMywwLTAuNSwwYy0wLjMsMC0wLjUsMC4xLTAuNiwwLjRjLTAuMywwLTAuNiwwLTEsMGMwLTAuNCwwLjQtMC45LDAuOC0xLjFjMC41LTAuMiwxLTAuMiwxLjQtMC4yYzAuMiwwLDAuNCwwLjEsMC42LDAuMWMwLjQsMC4xLDAuNSwwLjQsMC41LDAuOUMyNy44LDExLjQsMjcuNiwxMi4zLDI3LjQsMTMuNEMyNy40LDEzLjMsMjcuNCwxMy40LDI3LjQsMTMuNHogTTI2LjcsMTEuNmMtMC40LDAuMS0wLjgsMC4xLTEuMSwwLjJjLTAuMywwLjEtMC41LDAuMy0wLjUsMC42YzAsMC4xLDAsMC4yLDAuMiwwLjNjMC40LDAuMiwxLDAsMS4yLTAuNEMyNi42LDEyLDI2LjcsMTEuOCwyNi43LDExLjZ6IE0zMCwxMi4zYzAuMy0wLjUsMC41LTEsMC44LTEuNmMwLjItMC40LDAuNC0wLjgsMC42LTEuMWMwLTAuMSwwLjEtMC4xLDAuMi0wLjFjMC4zLDAsMC42LDAsMSwwYy0wLjEsMC4yLTAuMiwwLjQtMC4zLDAuNmMtMC43LDEuMy0xLjUsMi42LTIuMiwzLjljMCwwLDAsMCwwLDAuMUMyOS40LDE0LjksMjksMTUsMjgsMTVjMCwwLDAsMC0wLjEsMGMwLjEtMC4zLDAuMS0wLjUsMC4yLTAuOGMwLjEsMCwwLjMsMCwwLjQsMGMwLjMsMCwwLjYtMC4zLDAuNy0wLjZjMCwwLDAtMC4xLDAtMC4xYy0wLjMtMS4xLTAuNS0yLjMtMC42LTMuNGMwLTAuMiwwLTAuNCwwLTAuNmMwLjQsMCwwLjgsMCwxLjEsMEMyOS43LDEwLjQsMjkuOCwxMS4zLDMwLDEyLjNDMjkuOSwxMi4zLDMwLDEyLjMsMzAsMTIuM3oiLz48cGF0aCBpZD0iWE1MSURfNjc4XyIgY2xhc3M9InN0MCIgZD0iTTE3LDEwLjZjLTAuMywwLTAuNywwLTEsMGMwLTAuMSwwLTAuMSwwLTAuMWMwLTAuMi0wLjEtMC4zLTAuMi0wLjNjLTAuMiwwLTAuNSwwLTAuNywwYy0wLjEsMC0wLjIsMC0wLjIsMC4xYy0wLjEsMC4xLTAuMSwwLjItMC4xLDAuM2MwLDAuMSwwLjEsMC4yLDAuMiwwLjJjMC40LDAuMSwwLjcsMC4yLDEuMSwwLjNjMC4xLDAsMC4yLDAuMSwwLjMsMC4xYzAuNSwwLjIsMC43LDAuNiwwLjUsMS4yYy0wLjIsMC42LTAuNywwLjktMS4zLDFjLTAuNSwwLjEtMSwwLjEtMS41LTAuMWMtMC41LTAuMS0wLjgtMC41LTAuOC0xLjFjMC0wLjEsMC0wLjIsMC4yLTAuMmMwLjMsMCwwLjUsMCwwLjgsMGMwLjEsMCwwLjEsMCwwLjEsMC4xYzAsMC4zLDAuMSwwLjQsMC40LDAuNGMwLjIsMCwwLjQsMCwwLjcsMGMwLjEsMCwwLjIsMCwwLjItMC4xYzAuMi0wLjEsMC4yLTAuMiwwLjItMC40YzAtMC4yLTAuMS0wLjItMC4zLTAuM2MtMC40LTAuMS0wLjctMC4yLTEuMS0wLjNjLTAuMSwwLTAuMi0wLjEtMC4zLTAuMWMtMC40LTAuMi0wLjUtMC40LTAuNS0wLjhjMC4xLTAuOSwwLjYtMS4zLDEuNC0xLjRjMC40LDAsMC44LDAsMS4xLDBjMC4yLDAsMC40LDAuMSwwLjUsMC4yQzE3LDkuNywxNy4xLDEwLjIsMTcsMTAuNnogTTEzLjEsOS40Yy0wLjEsMC40LTAuMSwwLjgtMC4yLDEuMWMtMC4yLDAuOS0wLjQsMS44LTAuNSwyLjdjMCwwLjEtMC4xLDAuMS0wLjEsMC4xYy0wLjMsMC0wLjYsMC0wLjksMGMwLTAuMSwwLTAuMiwwLTAuM2MtMC4yLDAuMS0wLjQsMC4yLTAuNiwwLjNjLTAuNCwwLjEtMC45LDAuMS0xLjMsMEM5LjEsMTMuMyw5LDEzLjEsOSwxMi44YzAtMC40LDAuMS0wLjgsMC4xLTEuMmMwLjEtMC42LDAuMy0xLjMsMC40LTEuOWMwLTAuMSwwLjEtMC4yLDAuMi0wLjJjMC4zLDAsMC42LDAsMC45LDBjLTAuMSwwLjMtMC4xLDAuNi0wLjIsMC45Yy0wLjEsMC42LTAuMiwxLjEtMC4zLDEuN2MtMC4xLDAuNCwwLjEsMC42LDAuNSwwLjZjMC43LDAsMC45LTAuMywxLTAuOGMwLjEtMC43LDAuMy0xLjUsMC40LTIuMmMwLTAuMSwwLjEtMC4yLDAuMi0wLjJDMTIuNSw5LjUsMTIuOCw5LjQsMTMuMSw5LjR6IE0xMS40LDEzLjFMMTEuNCwxMy4xTDExLjQsMTMuMUwxMS40LDEzLjF6IE00LjYsMTMuNGMtMC40LDAtMC43LDAtMS4xLDBDMy44LDExLjksNCwxMC40LDQuMyw5QzMuOCw5LDMuMyw5LDIuNyw5YzAuMS0wLjMsMC4xLTAuNiwwLjItMC45QzIuOSw4LjEsMyw4LDMsOGMwLjQsMCwwLjgsMCwxLjIsMGMwLjUsMCwwLjksMCwxLjQsMGMwLjUsMCwxLDAsMS41LDBjMCwwLDAuMSwwLDAuMSwwQzcuMiw4LjMsNy4yLDguNiw3LjEsOC45QzcuMSw4LjksNyw5LDYuOSw5QzYuNSw5LDYuMSw5LDUuNiw5QzUuNSw5LDUuNSw5LDUuNCw5LjFDNS4yLDEwLjUsNC45LDExLjksNC42LDEzLjRDNC42LDEzLjMsNC42LDEzLjQsNC42LDEzLjR6IE0xOS4zLDguNWMtMC4xLDAuMy0wLjEsMC42LTAuMiwxYzAuMiwwLDAuNCwwLDAuNywwYy0wLjEsMC4zLTAuMSwwLjYtMC4yLDAuOWMtMC4yLDAtMC40LDAtMC43LDBjLTAuMSwwLjUtMC4yLDAuOS0wLjMsMS4zYzAsMC4yLTAuMSwwLjQtMC4xLDAuNmMtMC4xLDAuMywwLDAuNCwwLjMsMC40YzAuMSwwLDAuMiwwLDAuMywwYzAsMC4zLTAuMSwwLjUtMC4xLDAuN2MwLDAtMC4xLDAuMS0wLjEsMC4xYy0wLjMsMC0wLjcsMC0xLDBjLTAuMywwLTAuNS0wLjItMC40LTAuNmMwLjEtMC41LDAuMi0xLDAuMy0xLjVjMC4xLTAuNCwwLjEtMC43LDAuMi0xLjFjLTAuMiwwLTAuMywwLTAuNSwwYzAuMS0wLjMsMC4xLTAuNSwwLjItMC44YzAsMCwwLjEtMC4xLDAuMS0wLjFjMC40LDAsMC40LDAsMC41LTAuNGMwLTAuMSwwLTAuMSwwLTAuMmMwLjEtMC40LDAuMS0wLjQsMC41LTAuNEMxOC45LDguNSwxOS4xLDguNSwxOS4zLDguNXogTTcuNyw5LjRjMCwwLjEsMCwwLjMtMC4xLDAuNEM4LDkuNCw4LjUsOS4zLDksOS40QzksOS43LDguOSwxMCw4LjksMTAuNGMtMC4yLDAtMC40LDAtMC42LDBjLTAuNCwwLjEtMC42LDAuMy0wLjcsMC43Yy0wLjEsMC41LTAuMiwwLjktMC40LDEuNGMtMC4xLDAuMy0wLjEsMC41LTAuMiwwLjhjMCwwLTAuMSwwLjEtMC4xLDAuMWMtMC4zLDAtMC42LDAtMSwwYzAuMS0wLjUsMC4yLTEsMC4zLTEuNWMwLjItMC44LDAuMy0xLjUsMC41LTIuM2MwLTAuMSwwLjEtMC4yLDAuMi0wLjJDNy4yLDkuNSw3LjUsOS40LDcuNyw5LjR6Ii8+PC9nPjwvc3ZnPg==)}.bg-unionpay{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzUyXzNfIiBjbGFzcz0ic3QxNCIgZD0iTTMsMGgzMGMxLjcsMCwzLDEuMywzLDN2MTZjMCwxLjctMS4zLDMtMywzSDNjLTEuNywwLTMtMS4zLTMtM1YzQzAsMS4zLDEuMywwLDMsMHoiLz48Zz48Zz48cGF0aCBjbGFzcz0ic3QxNiIgZD0iTTI0LjksMTZoLTAuM2wxLTMuNkgyNmwwLjEtMC40djAuNGMwLDAuMiwwLjIsMC41LDAuNywwLjRoMC42bDAuMi0wLjdoLTAuMmMtMC4xLDAtMC4yLDAtMC4yLTAuMXYtMC40aC0xLjFsMCwwYy0wLjMsMC0xLjQsMC0xLjYsMC4xQzI0LjMsMTEuOSwyNCwxMiwyNCwxMmwwLjEtMC40aC0xbC0wLjIsMC43bC0xLDMuNmgtMC4ybC0wLjIsMC43aDJsLTAuMSwwLjJoMWwwLjEtMC4yaDAuM0wyNC45LDE2eiBNMjMuNywxNmgtMC44bDAuMi0wLjhoMC44TDIzLjcsMTZ6IE0yNC4xLDE0LjVjMCwwLTAuMiwwLTAuNCwwLjFjLTAuMiwwLjEtMC41LDAuMi0wLjUsMC4ybDAuMy0wLjloMC44TDI0LjEsMTQuNXogTTI0LjEsMTMuMmMtMC4yLDAuMS0wLjUsMC4yLTAuNSwwLjJsMC4zLTAuOWgwLjhsLTAuMiwwLjdDMjQuNSwxMy4xLDI0LjMsMTMuMSwyNC4xLDEzLjJ6IE0yNS42LDEzLjhoMS4ybC0wLjIsMC42aC0xLjJMMjUuMiwxNWgxbC0wLjgsMS4xYy0wLjEsMC4xLTAuMSwwLjEtMC4yLDAuMWMtMC4xLDAtMC4xLDAuMS0wLjIsMC4xaC0wLjNMMjQuNiwxN2gwLjhjMC40LDAsMC42LTAuMiwwLjgtMC40bDAuNS0wLjhsMC4xLDAuOGMwLDAuMSwwLjEsMC4yLDAuMiwwLjNjMC4xLDAsMC4yLDAuMSwwLjMsMC4xczAuMiwwLDAuMywwaDAuNGwwLjItMC44SDI4Yy0wLjEsMC0wLjIsMC0wLjItMC4xczAtMC4xLDAtMC4ybC0wLjEtMC44aC0wLjVsMC4yLTAuM2gxLjJsMC4yLTAuNmgtMS4xbDAuMi0wLjZoMS4xbDAuMi0wLjdoLTMuMkwyNS42LDEzLjh6IE0xNS44LDE2LjJsMC4zLTAuOWgxLjFsMC4yLTAuN2gtMS4xbDAuMi0wLjZoMS4xbDAuMi0wLjdIMTVMMTQuOCwxNGgwLjZsLTAuMiwwLjZoLTAuNmwtMC4yLDAuN0gxNWwtMC4zLDEuMmMtMC4xLDAuMiwwLDAuMiwwLjEsMC4zYzAuMSwwLjEsMC4xLDAuMSwwLjIsMC4yYzAuMSwwLDAuMiwwLjEsMC4zLDAuMWgxLjNsMC4yLTAuOGwtMC42LDAuMUMxNi4xLDE2LjMsMTUuOCwxNi4zLDE1LjgsMTYuMnogTTE1LjksMTEuN2wtMC4zLDAuNWMtMC4xLDAuMS0wLjEsMC4yLTAuMiwwLjJjLTAuMSwwLTAuMSwwLTAuMiwwaC0wLjFsLTAuMiwwLjdoMC41YzAuMiwwLDAuNC0wLjEsMC41LTAuMWMwLjEtMC4xLDAuMSwwLDAuMi0wLjFsMC4yLTAuMmgxLjVsMC4yLTAuN2gtMS4xbDAuMi0wLjRIMTUuOXogTTE4LjIsMTYuMmMwLDAsMC0wLjEsMC0wLjJsMC40LTEuNGgxLjVjMC4yLDAsMC40LDAsMC41LDBjMC4xLDAsMC4yLTAuMSwwLjMtMC4xYzAuMS0wLjEsMC4yLTAuMiwwLjMtMC4yYzAuMS0wLjEsMC4yLTAuMywwLjMtMC42bDAuNS0xLjhoLTEuNmMwLDAtMC41LDAuMS0wLjcsMC4ycy0wLjUsMC4zLTAuNSwwLjNsMC4xLTAuNWgtMWwtMS4zLDQuNkMxNywxNi41LDE3LDE2LjYsMTcsMTYuN3MwLjEsMC4yLDAuMiwwLjJjMC4xLDAuMSwwLjIsMC4xLDAuMywwLjFjMC4xLDAsMC4zLDAsMC41LDBoMC43bDAuMi0wLjhsLTAuNiwwQzE4LjMsMTYuMiwxOC4yLDE2LjIsMTguMiwxNi4yeiBNMTkuMiwxMi41aDEuNmwtMC4xLDAuNGMwLDAtMC44LDAtMC45LDBDMTkuMywxMywxOSwxMy4yLDE5LDEzLjJMMTkuMiwxMi41eiBNMTguOSwxMy41aDEuNmwtMC4xLDAuM2MwLDAtMC4xLDAtMC4yLDBoLTEuM0wxOC45LDEzLjV6IE0yMC40LDE0LjljMCwwLjEsMCwwLjEtMC4xLDAuMWMwLDAtMC4xLDAtMC4yLDBIMjB2LTAuNGgtMC45bDAsMS45YzAsMC4xLDAsMC4yLDAuMSwwLjNjMC4xLDAuMSwwLjQsMC4xLDAuOCwwLjFoMC42bDAuMi0wLjdsLTAuNSwwaC0wLjJjMCwwLTAuMSwwLTAuMS0wLjFjMCwwLTAuMSwwLTAuMS0wLjF2LTAuNWwwLjUsMGMwLjMsMCwwLjQtMC4xLDAuNS0wLjJzMC4xLTAuMiwwLjItMC4zbDAuMS0wLjRoLTAuN0wyMC40LDE0Ljl6IE05LjIsNS4xYy0wLjksMC0xLjEsMC0xLjIsMGMwLDAuMi0wLjYsMy0wLjYsM0M3LjMsOC42LDcuMiw5LDYuOSw5LjNDNi43LDkuNCw2LjUsOS41LDYuMiw5LjVjLTAuNCwwLTAuNi0wLjItMC42LTAuNlY4LjhMNS43LDhjMCwwLDAuNi0yLjYsMC43LTIuOWMwLDAsMCwwLDAsMEM1LjIsNSw1LDUsNSw1YzAsMCwwLDAuMiwwLDAuMkw0LjMsOC4xTDQuMiw4LjNMNC4xLDkuMWMwLDAuMiwwLjEsMC40LDAuMSwwLjZjMC4zLDAuNSwxLjEsMC42LDEuNiwwLjZjMC42LDAsMS4yLTAuMSwxLjYtMC40YzAuNy0wLjQsMC44LTEsMS0xLjZsMC4xLTAuM0M4LjUsOC4xLDkuMSw1LjQsOS4yLDUuMUM5LjIsNS4xLDkuMiw1LjEsOS4yLDUuMXogTTExLjQsNy4yYy0wLjIsMC0wLjQsMC0wLjcsMC4yYy0wLjEsMC4xLTAuMiwwLjEtMC4zLDAuMmwwLjEtMC4zbC0wLjEtMC4xQzkuOSw3LjMsOS44LDcuNCw5LjMsNy40bC0wLjEsMEM5LjIsNy45LDkuMiw4LjMsOC45LDkuM0M4LjksOS42LDguOCwxMCw4LjcsMTAuM2wwLDAuMWMwLjUsMCwwLjcsMCwxLjEsMGwwLTAuMWMwLjEtMC4zLDAuMS0wLjQsMC4yLTFjMC4xLTAuMywwLjItMC45LDAuMi0xLjFjMC4xLTAuMSwwLjItMC4xLDAuMy0wLjFjMC4yLDAsMC4yLDAuMiwwLjIsMC4zYzAsMC4yLTAuMSwwLjYtMC4yLDFsLTAuMSwwLjNjLTAuMSwwLjItMC4xLDAuNC0wLjEsMC42bDAsMGMwLjUsMCwwLjYsMCwxLjEsMGwwLjEtMC4xYzAuMS0wLjUsMC4xLTAuNiwwLjItMS4zbDAuMS0wLjNjMC4xLTAuNiwwLjItMC45LDAuMS0xLjJDMTEuOSw3LjMsMTEuNyw3LjIsMTEuNCw3LjJ6IE0xMy45LDcuOUMxMy42LDcuOSwxMy40LDgsMTMuMiw4Yy0wLjIsMC0wLjMsMC4xLTAuNiwwLjFsMCwwbDAsMGMwLDAuMi0wLjEsMC40LTAuMSwwLjZjMCwwLjItMC4xLDAuNS0wLjIsMC44Yy0wLjEsMC4zLTAuMSwwLjMtMC4xLDAuNGMwLDAuMS0wLjEsMC4yLTAuMSwwLjRsMCwwdjBjMC4yLDAsMC40LDAsMC42LDBzMC4zLDAsMC42LDBsMCwwbDAsMGMwLTAuMiwwLjEtMC4zLDAuMS0wLjRjMC0wLjEsMC4xLTAuMywwLjItMC43YzAuMS0wLjIsMC4xLTAuNCwwLjEtMC42QzEzLjcsOC4zLDEzLjgsOC4xLDEzLjksNy45TDEzLjksNy45TDEzLjksNy45eiBNMTUuMywxMC41YzAuNSwwLDEtMC4xLDEuNC0wLjZjMC4zLTAuMywwLjQtMC44LDAuNS0xYzAuMi0wLjcsMC0xLTAuMS0xLjJjLTAuMi0wLjMtMC42LTAuNC0xLTAuNGMtMC4yLDAtMC44LDAtMS4zLDAuNWMtMC4zLDAuMy0wLjUsMC44LTAuNiwxLjJjLTAuMSwwLjQtMC4yLDEuMiwwLjUsMS40QzE0LjgsMTAuNCwxNS4xLDEwLjUsMTUuMywxMC41eiBNMTUuMyw4LjlDMTUuNCw4LjQsMTUuNSw4LDE1LjksOGMwLjMsMCwwLjMsMC4zLDAuMiwwLjhjMCwwLjEtMC4xLDAuNS0wLjIsMC43Yy0wLjEsMC4xLTAuMiwwLjItMC4zLDAuMmMwLDAtMC4yLDAtMC4yLTAuM0MxNS4yLDkuMywxNS4yLDkuMSwxNS4zLDguOXogTTI0LjksOC45Yy0wLjEsMC40LTAuMiwxLjIsMC41LDEuNGMwLjIsMC4xLDAuNCwwLjEsMC42LDAuMWMwLjIsMCwwLjQtMC4xLDAuNi0wLjNjMCwwLjEsMCwwLjEtMC4xLDAuMmwwLDBjMC41LDAsMC42LDAsMS4yLDBsMC4xLDBjMC4xLTAuNSwwLjEtMC45LDAuMy0xLjhjMC4xLTAuNCwwLjItMC44LDAuMy0xLjNsMC0wLjFjLTAuNSwwLjEtMC43LDAuMS0xLjIsMC4ybDAsMGMwLDAuMSwwLDAuMSwwLDAuMWMtMC4xLTAuMS0wLjItMC4yLTAuNC0wLjNjLTAuMi0wLjEtMC44LDAtMS4yLDAuNUMyNS4yLDguMSwyNSw4LjUsMjQuOSw4Ljl6IE0yNiw5QzI2LjIsOC40LDI2LjMsOCwyNi42LDhjMC4yLDAsMC4zLDAuMiwwLjMsMC42YzAsMC4xLDAsMC4yLTAuMSwwLjNjMCwwLjItMC4xLDAuMy0wLjEsMC41YzAsMC4xLTAuMSwwLjItMC4xLDAuM2MtMC4xLDAuMS0wLjMsMC4yLTAuNCwwLjJjMCwwLTAuMiwwLTAuMi0wLjNDMjYsOS4zLDI2LDkuMSwyNiw5eiBNMTguNCwxMC40TDE4LjQsMTAuNGMwLjEtMC4zLDAuMS0wLjQsMC4yLTFjMC4xLTAuMywwLjItMC45LDAuMi0xLjFjMC4xLTAuMSwwLjItMC4xLDAuMy0wLjFjMC4yLDAsMC4yLDAuMiwwLjIsMC4zYzAsMC4yLTAuMSwwLjYtMC4yLDFsLTAuMSwwLjNjLTAuMSwwLjItMC4xLDAuNC0wLjEsMC42bDAsMGMwLjUsMCwwLjYsMCwxLjEsMGwwLjEtMC4xYzAuMS0wLjUsMC4xLTAuNiwwLjItMS4zbDAuMS0wLjNjMC4xLTAuNiwwLjItMC45LDAuMS0xLjJjLTAuMS0wLjMtMC40LTAuMy0wLjYtMC4zYy0wLjIsMC0wLjQsMC0wLjcsMC4yYy0wLjEsMC4xLTAuMiwwLjEtMC4zLDAuMmwwLjEtMC4zTDE5LDcuMmMtMC41LDAuMS0wLjcsMC4xLTEuMiwwLjJsMCwwYy0wLjEsMC41LTAuMSwwLjktMC4zLDEuOGMtMC4xLDAuMy0wLjIsMC43LTAuMiwxLjFsMCwwLjFDMTcuOCwxMC40LDE4LDEwLjQsMTguNCwxMC40eiBNMjIuMSwxMC40YzAtMC4yLDAuMi0xLjEsMC4yLTEuMXMwLjItMC43LDAuMi0wLjdjMCwwLDAuMS0wLjEsMC4xLTAuMWgwLjFjMC43LDAsMS41LDAsMi4xLTAuNWMwLjQtMC4zLDAuNy0wLjgsMC44LTEuNGMwLTAuMSwwLjEtMC4zLDAuMS0wLjVjMC0wLjItMC4xLTAuNC0wLjItMC42Yy0wLjMtMC41LTAuOS0wLjUtMS43LTAuNWgtMC4zYy0wLjksMC0xLjMsMC0xLjQsMGMwLDAuMSwwLDAuMiwwLDAuMmwtMC4zLDEuNmMwLDAtMC44LDMuNC0wLjgsMy41QzIxLjYsMTAuNCwyMS45LDEwLjQsMjIuMSwxMC40eiBNMjIuNyw3LjZMMjMuMSw2VjUuOVY1LjlsMC4xLDBjMCwwLDAuNywwLjEsMC44LDAuMWMwLjMsMC4xLDAuNCwwLjQsMC4zLDAuOGMtMC4xLDAuMy0wLjMsMC42LTAuNiwwLjhjLTAuMiwwLjEtMC41LDAuMS0wLjgsMC4xaC0wLjJMMjIuNyw3LjZ6IE0zMS45LDcuM0wzMS45LDcuM2MtMC42LDAuMS0wLjcsMC4xLTEuMiwwLjFsMCwwdjBsMCwwYy0wLjQsMC45LTAuMywwLjctMC42LDEuNGMwLDAsMC0wLjEsMC0wLjFMMzAsNy4zbC0wLjEtMC4xYy0wLjYsMC4xLTAuNiwwLjEtMS4xLDAuMmwwLDBjMCwwLDAsMCwwLDAuMWwwLDBjMC4xLDAuMywwLjEsMC4zLDAuMSwwLjhjMCwwLjMsMC4xLDAuNSwwLjEsMC44YzAuMSwwLjQsMC4xLDAuNiwwLjEsMS4zYy0wLjMsMC42LTAuNCwwLjgtMC44LDEuM2wwLDBsLTAuMiwwLjRjMCwwLjEtMC4xLDAuMS0wLjEsMC4xYzAsMC0wLjEsMC0wLjIsMGgtMC4xbC0wLjIsMC43aDAuN2MwLjQsMCwwLjYtMC4yLDAuOC0wLjRsMC40LTAuOGwwLDBsMC4xLTAuMUMyOS44LDExLjEsMzEuOSw3LjMsMzEuOSw3LjN6IE0xMy45LDdjLTAuMi0wLjItMC43LTAuMS0xLDAuMWMtMC4zLDAuMi0wLjMsMC41LTAuMSwwLjZjMC4yLDAuMSwwLjcsMC4xLDAuOS0wLjFDMTQuMSw3LjUsMTQuMSw3LjIsMTMuOSw3eiIvPjwvZz48L2c+PC9zdmc+)}.bg-visa{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzUyXzJfIiBjbGFzcz0ic3QxIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMSwxNUg4LjlMNy40LDguN0M3LjMsOC41LDcuMSw4LjIsNi45LDguMUM2LjMsNy44LDUuNyw3LjUsNSw3LjRWNy4yaDMuM2MwLjQsMCwwLjgsMC4zLDAuOSwwLjhsMC44LDQuNWwyLjEtNS4zaDJMMTEsMTV6IE0xNS4zLDE1aC0ybDEuNi03LjhoMkwxNS4zLDE1eiBNMTkuNCw5LjNjMC4xLTAuNCwwLjQtMC43LDAuOC0wLjdjMC43LTAuMSwxLjMsMC4xLDEuOSwwLjRsMC4zLTEuN0MyMS45LDcuMSwyMS4zLDcsMjAuNyw3Yy0xLjksMC0zLjMsMS4xLTMuMywyLjZjMC4xLDEsMC44LDEuOCwxLjcsMi4xYzAuOCwwLjQsMSwwLjYsMSwxYy0wLjEsMC41LTAuNiwwLjktMS4xLDAuOGMwLDAsMCwwLDAsMGMtMC43LDAtMS40LTAuMi0yLTAuNWwtMC4zLDEuN2MwLjcsMC4zLDEuNCwwLjQsMi4xLDAuNGMyLjEsMC4xLDMuNS0xLDMuNS0yLjZDMjIuMSwxMC4zLDE5LjQsMTAuMiwxOS40LDkuM0wxOS40LDkuM0wxOS40LDkuM3ogTTI5LDE1bC0xLjYtNy44aC0xLjdjLTAuNCwwLTAuNywwLjItMC44LDAuNkwyMi4xLDE1aDJsMC40LTEuMUgyN2wwLjIsMS4xTDI5LDE1TDI5LDE1eiBNMjYuMSw5LjNsMC42LDIuOUgyNUwyNi4xLDkuM3oiLz48L3N2Zz4=)}.bg-webmoney{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU2X2NvcHkiIGNsYXNzPSJzdDIyIiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxwYXRoIGlkPSJDb21iaW5lZC1TaGFwZSIgY2xhc3M9InN0MCIgZD0iTTE4LDQuM2MxLjEsMCwyLjEsMC4yLDMsMC43YzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4ybC0wLjYsMC42bC0wLjktMWwtMS42LDEuNGwtMS0xbC0zLDIuNmwxLjksMi4xbC0wLjcsMC42bDEuOSwyLjFsLTAuNywwLjZsMi43LDIuOWwxLjYtMS40bDEuNCwxLjVjLTAuMywwLjItMC42LDAuNC0wLjksMC42Yy0xLDAuNi0yLjEsMC45LTMuNCwwLjljLTMuOCwwLTYuOC0zLTYuOC02LjdDMTEuMSw3LjMsMTQuMiw0LjMsMTgsNC4zeiBNMTYuNywxMC42bDEuNi0xLjRsMS41LDEuNmwtMS42LDEuNEwxNi43LDEwLjZMMTYuNywxMC42eiBNMTcuOSwxMy40bDEuNi0xLjVsMS41LDEuNkwxOS4zLDE1TDE3LjksMTMuNEwxNy45LDEzLjR6IE0xNS42LDcuOGwxLjYtMS40TDE4LjYsOEwxNyw5LjRMMTUuNiw3Ljh6IE0xOC41LDcuMUwxOS44LDZsMS4xLDEuMmwtMS4yLDEuMUwxOC41LDcuMXogTTIwLjcsMTJsMS4yLTEuMWwxLjEsMS4ybC0xLjIsMS4xTDIwLjcsMTJ6IE0yMS44LDE0LjVsMS4yLTEuMWwxLjEsMS4ybC0xLjIsMS4xTDIxLjgsMTQuNUwyMS44LDE0LjV6IE0yMi4zLDguOWwwLjgtMC43TDIzLjgsOUwyMyw5LjdMMjIuMyw4Ljl6IE0yMS4yLDYuNUwyMiw1LjhsMC43LDAuOEwyMiw3LjNMMjEuMiw2LjV6IE0yMy4zLDExLjNsMC44LTAuN2wwLjcsMC44TDI0LDEyLjFMMjMuMywxMS4zTDIzLjMsMTEuM3ogTTE5LjcsOS41bDEuMi0xLjFMMjIsOS42bC0xLjIsMS4xTDE5LjcsOS41eiIvPjwvc3ZnPg==)}.bg-yandex{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZpc2EiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzYgMjIiIHdpZHRoPSIzNnB4IiBoZWlnaHQ9IjIycHgiPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN0MHtmaWxsOiNGRkZGRkY7fS5zdDF7ZmlsbDojMjI0REJBO30uc3Qye2ZpbGw6IzAwN0VDRDt9LnN0M3tmaWxsOiMzNTNBNDg7fS5zdDR7ZmlsbDojMzEzMTU5O30uc3Q1e2ZpbGw6I0U4MkMzMDt9LnN0NntmaWxsOiNFQ0EyMUQ7fS5zdDd7ZmlsbDojRjM2RDFFO30uc3Q4e2ZpbGw6I0Q5MkUyODt9LnN0OXtmaWxsOiM0Mjk5REE7fS5zdDEwe2ZpbGw6IzZDNkRCOTt9LnN0MTF7ZmlsbDojRjE5RTBDO30uc3QxMntmaWxsOiMyMTgzQ0I7fS5zdDEze2ZpbGw6IzI0NjRCNDt9LnN0MTR7ZmlsbDojMzM3QTgzO30uc3QxNXtmaWxsOiNENDQ2M0Q7fS5zdDE2e2ZpbGw6I0ZERkRGRjt9LnN0MTd7ZmlsbDojMDA5RkUzO30uc3QxOHtmaWxsOiNGNUY2RkE7fS5zdDE5e2ZpbGw6I0M1MkI3MTt9LnN0MjB7ZmlsbDojMDAwMjY4O30uc3QyMXtmaWxsOiMxOUFFRkY7fS5zdDIye2ZpbGw6IzEwNkRCMzt9LnN0MjN7ZmlsbDojNDI4NUY0O30uc3QyNHtmaWxsOiNFMjM0NDI7fS5zdDI1e2ZpbGw6IzA3MjY5NDt9LnN0MjZ7ZmlsbDojNzUzMDc5O30uc3QyN3tmaWxsOiNCQTMwMkM7fS5zdDI4e2ZpbGw6IzNCNjZBRDt9LnN0Mjl7ZmlsbDojMDA5RkM5O30uc3QzMHtmaWxsOiNGRjk1MDA7fS5zdDMxe2ZpbGw6IzQwNTc4Nzt9LnN0MzJ7ZmlsbDojMDA1NkFEO30uc3QzM3tmaWxsOiNGRjAwMDc7fS5zdDM0e2ZpbGw6IzEzMTQxMzt9LnN0MzV7ZmlsbDojMDIwMjAyO30uc3QzNntmaWxsOiNGRkJDMDA7fTwvc3R5bGU+PHBhdGggaWQ9IlJvdW5kZWRfUmVjdGFuZ2xlXzU5X2NvcHlfNl8iIGNsYXNzPSJzdDI0IiBkPSJNMywwaDMwYzEuNywwLDMsMS4zLDMsM3YxNmMwLDEuNy0xLjMsMy0zLDNIM2MtMS43LDAtMy0xLjMtMy0zVjNDMCwxLjMsMS4zLDAsMywweiIvPjxnPjxwYXRoIGlkPSJzdmdfMyIgY2xhc3M9InN0MCIgZD0iTTEwLjMsNi40YzAuMSwwLDAuMywwLDAuNCwwYzAuMiwwLDAuNCwwLDAuNSwwYzAsMC4xLDAsMC4xLDAsMC4yYy0wLjcsMS45LTEuNCwzLjgtMi4xLDUuN2MwLDAuMSwwLDAuMSwwLDAuMmMwLDEsMCwxLjksMCwyLjljLTAuMSwwLTAuMiwwLTAuMiwwYy0wLjIsMC0wLjQsMC0wLjYsMGMwLTEsMC0yLjEsMC0zLjFDNy42LDEwLjgsNyw5LjIsNi40LDcuNmMwLTAuMS0wLjEtMC4zLTAuMS0wLjRjMC4yLDAsMC41LDAsMC43LDBjMC4xLDAsMC4yLDAsMC4yLDAuMWMwLjMsMSwwLjcsMiwxLDNjMC4xLDAuNCwwLjMsMC44LDAuNCwxLjJjMC4xLTAuNSwwLjMtMS4xLDAuNS0xLjZDOS41LDguNyw5LjksNy41LDEwLjMsNi40eiIvPjxwYXRoIGlkPSJYTUxJRF8xMzYwXyIgY2xhc3M9InN0MzUiIGQ9Ik0xNy43LDExYzAsMS41LDAsMywwLDQuNWMwLDAtMC4xLDAtMC4xLDAuMWMtMC4zLDAtMC41LDAtMC44LDBjMC0xLjUsMC0yLjksMC00LjRjLTAuMS0wLjItMC4yLTAuNC0wLjQtMC40Yy0wLjMtMC4xLTAuNywwLTEsMC4yYzAsMS40LDAsMi44LDAsNC4yYzAsMC4yLDAsMC4zLDAsMC41Yy0wLjMsMC0wLjUsMC0wLjgsMGMwLDAtMC4xLDAtMC4xLTAuMWMwLTEuOCwwLTMuNiwwLTUuNGMwLjEsMCwwLjEsMCwwLjIsMGMwLjIsMCwwLjUsMCwwLjcsMGMwLDAuMSwwLDAuMiwwLDAuM2MwLjEtMC4xLDAuMi0wLjEsMC4zLTAuMmMwLDAsMC4xLDAsMC4xLDBsMCwwYzAuNC0wLjIsMC45LTAuMiwxLjMtMC4xQzE3LjUsMTAuMSwxNy44LDEwLjYsMTcuNywxMXogTTEzLjYsMTUuNGMwLDAuMS0wLjEsMC4xLTAuMSwwLjFjLTAuMSwwLTAuMywwLTAuNCwwYzAtMC4xLTAuMS0wLjEtMC4xLTAuMmMwLTAuMS0wLjEtMC4yLTAuMS0wLjJjLTAuMiwwLjMtMC41LDAuNS0wLjksMC41Yy0wLjMsMC4xLTAuNy0wLjEtMC45LTAuM2MtMC4yLTAuMi0wLjQtMC41LTAuNS0wLjdjMC0wLjEsMC0wLjEtMC4xLTAuMmMwLDAsMC0wLjEsMC0wLjFjMC0wLjEsMC0wLjEsMC0wLjJjMC0wLjIsMC0wLjUsMC0wLjdjMC0wLjIsMC4xLTAuNCwwLjEtMC41YzAuMS0wLjMsMC4zLTAuNiwwLjYtMC44YzAuNC0wLjQsMS4xLTAuMywxLjYtMC4xYzAtMC4zLDAtMC41LDAtMC41YzAtMC4xLDAtMC4zLTAuMS0wLjRjMCwwLDAtMC4xLDAtMC4xYy0wLjEtMC4yLTAuMi0wLjQtMC4zLTAuNGMtMC4yLTAuMS0wLjQsMC0wLjYsMGMwLDAtMC4xLDAtMC4xLDBjMCwwLTAuMSwwLTAuMSwwLjFjLTAuMSwwLjEtMC4zLDAuMi0wLjQsMC4xYzAtMC4xLTAuMS0wLjItMC4xLTAuMmMtMC4xLTAuMS0wLjItMC4zLTAuMi0wLjRjMCwwLDAuMSwwLDAuMS0wLjFjMC4yLTAuMSwwLjMtMC4xLDAuNS0wLjJsMCwwdjBjMC4yLTAuMSwwLjUtMC4xLDAuOC0wLjFjMC4xLDAsMC4zLDAsMC40LDAuMWMwLjMsMC4xLDAuNSwwLjMsMC43LDAuNWMwLDAsMCwwLjEsMC4xLDAuMWMwLDAuMSwwLjEsMC4xLDAuMSwwLjJjMCwwLDAsMC4xLDAsMC4xYzAsMCwwLDAuMSwwLDAuMWMwLDAuMSwwLDAuMSwwLDAuMmMwLDAuMiwwLDAuNCwwLjEsMC41QzEzLjYsMTIuOSwxMy42LDE0LjIsMTMuNiwxNS40eiBNMTIuNywxMi43Yy0wLjEtMC4xLTAuNy0wLjQtMS0wLjFjLTAuNCwwLjQtMC40LDEtMC40LDEuM2MwLDAuMiwwLjIsMSwwLjcsMWMwLjUsMCwwLjctMC4zLDAuNy0wLjNDMTIuNywxNC41LDEyLjcsMTMuNSwxMi43LDEyLjd6IE0xMi43LDEyLjdDMTIuNywxMi43LDEyLjcsMTIuNywxMi43LDEyLjdDMTIuNywxMi43LDEyLjcsMTIuNywxMi43LDEyLjd6IE0yNiwxMS42QzI2LDEyLDI2LDEyLjUsMjYsMTIuOWMtMC4yLDAtMS44LDAtMi4zLTAuMWMwLDAuMiwwLDAuNCwwLDAuN2MwLDAuMSwwLDAuMSwwLDAuMmMwLDAsMCwwLjEsMCwwLjFjMCwwLDAsMC4xLDAsMC4xYzAsMC4xLDAuMSwwLjIsMC4xLDAuMmMwLjEsMC4zLDAuNCwwLjUsMC43LDAuNmMwLjQsMC4xLDAuOCwwLDEuMi0wLjFjMCwwLDAsMC4xLDAsMC4xYzAsMC4xLDAsMC4xLDAsMC4yYzAsMC4xLDAsMC4xLDAuMSwwLjJjMCwwLDAsMC4xLDAsMC4xYy0wLjMsMC4yLTAuNywwLjMtMSwwLjNjLTAuNCwwLjEtMC44LDAtMS4xLTAuM2MtMC4zLTAuMi0wLjQtMC40LTAuNi0wLjdjMCwwLDAtMC4xLDAtMC4xYzAtMC4xLTAuMS0wLjEtMC4xLTAuMmMwLTAuMSwwLTAuMS0wLjEtMC4yYzAsMCwwLTAuMSwwLTAuMWMtMC4xLTAuMy0wLjEtMC42LTAuMS0wLjljMC0wLjMsMC0wLjYsMC0xYzAtMC4yLDAuMS0wLjQsMC4xLTAuNmMwLTAuMSwwLTAuMiwwLjEtMC4zYzAsMCwwLTAuMSwwLTAuMWMwLDAsMC0wLjEsMC0wLjFjMC0wLjEsMC0wLjEsMC4xLTAuMmMwLTAuMSwwLjEtMC4xLDAuMS0wLjJjMC4xLTAuMiwwLjMtMC41LDAuNS0wLjZsMCwwYzAuNC0wLjMsMC45LTAuMywxLjMtMC4xYzAuMiwwLjEsMC4zLDAuMiwwLjQsMC40YzAuMSwwLjEsMC4yLDAuMywwLjIsMC41YzAsMC4xLDAuMSwwLjIsMC4xLDAuNGMwLDAuMSwwLDAuMSwwLDAuMkMyNS45LDExLjQsMjUuOSwxMS41LDI2LDExLjZ6IE0yNC41LDEwLjVjLTAuNS0wLjEtMC43LDAuOC0wLjcsMS44YzAuMy0wLjEsMS4yLTAuMSwxLjMtMC4xQzI1LjEsMTAuNiwyNC42LDEwLjUsMjQuNSwxMC41eiBNMjkuNSwxNC44YzAtMC4xLTAuMS0wLjItMC4xLTAuM2MtMC4xLTAuMy0wLjMtMC42LTAuNC0xYzAtMC4xLTAuMS0wLjItMC4xLTAuM2MtMC4xLTAuMi0wLjEtMC4zLTAuMi0wLjVjMC0wLjEtMC4xLTAuMS0wLjEtMC4yYzAuMS0wLjEsMC4xLTAuMywwLjItMC40YzAuMS0wLjEsMC4xLTAuMiwwLjItMC40YzAuMS0wLjEsMC4xLTAuMiwwLjItMC40YzAuMS0wLjEsMC4xLTAuMywwLjItMC40YzAuMS0wLjEsMC4xLTAuMiwwLjEtMC4zYzAuMS0wLjEsMC4xLTAuMiwwLjItMC40YzAtMC4xLDAuMS0wLjIsMC4xLTAuNGMwLDAsMCwwLDAsMGMtMC4yLDAtMC40LDAtMC43LDBjLTAuMSwwLTAuMSwwLjEtMC4yLDAuMmMwLDAsMCwwLjEtMC4xLDAuMWMwLDAuMSwwLDAuMS0wLjEsMC4yYzAsMCwwLDAuMS0wLjEsMC4xYzAsMC4xLDAsMC4xLTAuMSwwLjJjMCwwLDAsMC4xLTAuMSwwLjFjLTAuMSwwLjItMC4xLDAuMy0wLjIsMC41YzAsMCwwLDAuMSwwLDAuMWMwLDAsMCwwLjEtMC4xLDAuMWMwLDAuMS0wLjEsMC4yLTAuMSwwLjNjLTAuMS0wLjEtMC4xLTAuMi0wLjEtMC40YzAsMCwwLTAuMS0wLjEtMC4xYzAtMC4xLDAtMC4xLTAuMS0wLjJjMCwwLDAtMC4xLTAuMS0wLjFjMC0wLjEtMC4xLTAuMi0wLjEtMC4zYzAtMC4xLTAuMS0wLjItMC4xLTAuM2MwLDAsMC0wLjEtMC4xLTAuMWMwLTAuMS0wLjEtMC4yLTAuMS0wLjNjLTAuMS0wLjEtMC4zLDAtMC41LDBjLTAuMSwwLTAuMywwLTAuNCwwLjFsMCwwYzAuMSwwLjEsMC4xLDAuMiwwLjEsMC4zYzAsMC4xLDAuMSwwLjIsMC4xLDAuM2MwLDAuMSwwLjEsMC4yLDAuMSwwLjNjMC4xLDAuMSwwLjEsMC4zLDAuMiwwLjRjMCwwLjEsMC4xLDAuMiwwLjEsMC4zYzAuMSwwLjMsMC4yLDAuNSwwLjQsMC44YzAuMSwwLjEsMCwwLjIsMCwwLjNjMCwwLjEtMC4xLDAuMS0wLjEsMC4yYzAsMC4xLTAuMSwwLjItMC4xLDAuM2MwLDAuMS0wLjEsMC4yLTAuMSwwLjNjMCwwLjEtMC4xLDAuMi0wLjEsMC4yYzAsMC4xLTAuMSwwLjEtMC4xLDAuMmMwLDAuMS0wLjEsMC4yLTAuMSwwLjNjMCwwLjEtMC4xLDAuMi0wLjEsMC4zYzAsMC4xLTAuMSwwLjItMC4xLDAuMmMwLDAuMS0wLjEsMC4yLTAuMSwwLjNjMCwwLjEtMC4xLDAuMi0wLjEsMC4zYzAsMC4xLDAsMC4xLTAuMSwwLjJjMCwwLDAuMSwwLDAuMSwwLjFjMC4yLDAsMC41LDAsMC43LDBjMC0wLjEsMC4xLTAuMiwwLjEtMC4zYzAtMC4xLDAtMC4xLDAuMS0wLjJjMCwwLDAtMC4xLDAuMS0wLjFjMCwwLDAtMC4xLDAtMC4xYzAtMC4xLDAtMC4xLDAuMS0wLjJjMCwwLDAtMC4xLDAuMS0wLjFjMCwwLDAtMC4xLDAtMC4xYzAuMS0wLjMsMC4yLTAuNSwwLjMtMC44YzAtMC4xLDAtMC4xLDAuMS0wLjJjMCwwLDAsMCwwLjEsMGMwLDAuMSwwLjEsMC4zLDAuMSwwLjRjMCwwLDAsMC4xLDAuMSwwLjFjMCwwLDAsMC4xLDAsMC4xYzAsMC4xLDAsMC4xLDAuMSwwLjJjMCwwLDAsMC4xLDAuMSwwLjFjMCwwLjEsMCwwLjEsMC4xLDAuMmMwLDAuMSwwLjEsMC4yLDAuMSwwLjNjMCwwLjEsMC4xLDAuMiwwLjEsMC4zYzAsMC4xLDAsMC4xLDAuMSwwLjJjMCwwLDAsMC4xLDAsMC4xYzAsMCwwLjEsMC4xLDAuMiwwLjFjMC4yLDAsMC40LDAsMC43LDBjMCwwLDAtMC4xLDAuMS0wLjFjLTAuMS0wLjEtMC4xLTAuMy0wLjItMC40QzI5LjUsMTQuOSwyOS41LDE0LjksMjkuNSwxNC44eiBNMjIsNy4zYzAsMi43LDAsNS40LDAsOC4xYzAsMC0wLjEsMC0wLjEsMC4xYy0wLjIsMC0wLjMsMC0wLjUsMGMtMC4xLTAuMS0wLjEtMC4yLTAuMi0wLjNjLTAuMywwLjMtMC43LDAuNS0xLjIsMC40Yy0wLjMsMC0wLjctMC4yLTAuOS0wLjVjLTAuMS0wLjEtMC4yLTAuMy0wLjMtMC41YzAtMC4xLTAuMS0wLjItMC4xLTAuMmMwLDAsMC0wLjEsMC0wLjFjMCwwLDAtMC4xLDAtMC4xYzAsMCwwLTAuMSwwLTAuMWMwLTAuMSwwLTAuMSwwLTAuMmMtMC4xLTAuNC0wLjEtMC44LTAuMS0xLjNjMC0wLjMsMC0wLjYsMC4xLTAuOWMwLTAuMSwwLTAuMSwwLTAuMmMwLDAsMC0wLjEsMC0wLjFjMCwwLDAtMC4xLDAtMC4xYzAtMC4xLDAtMC4xLDAuMS0wLjJjMC0wLjEsMC4xLTAuMiwwLjEtMC4zYzAtMC4xLDAuMS0wLjEsMC4xLTAuMmMwLjEtMC4zLDAuNC0wLjQsMC42LTAuNmMwLjQtMC4yLDAuOS0wLjIsMS40LDBjMC0wLjksMC0xLjgsMC0yLjhDMjEuNCw3LjIsMjEuNyw3LjIsMjIsNy4zQzIyLDcuMiwyMiw3LjIsMjIsNy4zeiBNMjEuMSwxNC43YzAtMC4yLDAtMi43LDAtNGMwLDAsMCwwLDAsMGMtMC4yLTAuMS0wLjUtMC4zLTAuOS0wLjJjLTEsMC4zLTEuMiw0LjEsMC4xLDQuM0MyMC40LDE0LjksMjAuOCwxNC45LDIxLjEsMTQuN3ogTTIxLjIsNy4yTDIxLjIsNy4yQzIxLjIsNy4yLDIxLjIsNy4yLDIxLjIsNy4yTDIxLjIsNy4yeiIvPjwvZz48L3N2Zz4=)}.bg-klarna{background-image:url(data:image/svg+xml;base64,PHN2ZyBpZD0nS2xhcm5hJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczNicgaGVpZ2h0PScyMic+PHN0eWxlPi5zdDF7ZmlsbDojZmZmfTwvc3R5bGU+PHBhdGggaWQ9J1JvdW5kZWRfUmVjdGFuZ2xlXzUyXzZfJyBkPSdNMyAwaDMwYzEuNyAwIDMgMS4zIDMgM3YxNmMwIDEuNy0xLjMgMy0zIDNIM2MtMS43IDAtMy0xLjMtMy0zVjNjMC0xLjcgMS4zLTMgMy0zeicgZmlsbD0nI2ViNmY5MycvPjxnIHRyYW5zZm9ybT0ndHJhbnNsYXRlKDIwIDQ0KSc+PHBhdGggaWQ9J1NoYXBlXzFfJyBjbGFzcz0nc3QxJyBkPSdNLTEwLjEtMzYuMWgtMS40YzAgMS4xLS41IDIuMi0xLjQgMi44bC0uNS40IDIuMSAyLjloMS43bC0xLjktMi42Yy45LTEgMS40LTIuMiAxLjQtMy41eicvPjxwYXRoIGlkPSdSZWN0YW5nbGUtcGF0aF8xXycgY2xhc3M9J3N0MScgZD0nTS0xNS0zNi4xaDEuNHY2LjFILTE1eicvPjxwYXRoIGNsYXNzPSdzdDEnIGQ9J00tOS4yLTM2LjFoMS4zdjYuMWgtMS4zek0zLjgtMzQuNGMtLjUgMC0xIC4yLTEuMy42di0uNUgxLjN2NC4yaDEuM3YtMi4yYzAtLjYuNC0xIDEtMXMuOS4zLjkuOXYyLjJoMS4zdi0yLjdjLS4yLS44LS45LTEuNS0yLTEuNXpNLTMuOC0zNC4ydi4zYy0uNC0uMi0uOC0uNC0xLjMtLjQtMS4yIDAtMi4yIDEtMi4yIDIuMiAwIDEuMiAxIDIuMiAyLjIgMi4yLjUgMCAuOS0uMSAxLjMtLjR2LjNoMS4zdi00LjJoLTEuM3pNLTUtMzEuMWMtLjYgMC0xLjEtLjUtMS4xLTEuMSAwLS42LjUtMS4xIDEuMS0xLjFzMS4xLjUgMS4xIDEuMWMuMS43LS40IDEuMS0xLjEgMS4xek0tLjYtMzMuN3YtLjVoLTEuM3Y0LjJoMS4zdi0yYzAtLjcuNy0xIDEuMi0xdi0xLjJjLS40IDAtLjkuMi0xLjIuNXpNOS42LTM0LjJ2LjNjLS40LS4yLS44LS40LTEuMy0uNC0xLjIgMC0yLjIgMS0yLjIgMi4yIDAgMS4yIDEgMi4yIDIuMiAyLjIuNSAwIC45LS4xIDEuMy0uNHYuM2gxLjN2LTQuMkg5LjZ6bS0xLjIgMy4xYy0uNiAwLTEuMS0uNS0xLjEtMS4xIDAtLjYuNS0xLjEgMS4xLTEuMS42IDAgMS4xLjUgMS4xIDEuMS4xLjctLjQgMS4xLTEuMSAxLjF6TTEyLjItMzEuNWMtLjQgMC0uOC40LS44LjhzLjQuOC44LjguOC0uNC44LS44YzAtLjUtLjQtLjgtLjgtLjh6Jy8+PC9nPjwvc3ZnPg==)}.bg-eps{background-image:url(data:image/svg+xml;base64,PHN2ZyBpZD0iS2xhcm5hIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDM2IDIyIj4gIDx0aXRsZT5pY29uLWVwczwvdGl0bGU+ICA8cGF0aCBpZD0iUm91bmRlZF9SZWN0YW5nbGVfNTIiIGRhdGEtbmFtZT0iUm91bmRlZCBSZWN0YW5nbGUgNTIiIGQ9Ik0zLDBIMzNhMywzLDAsMCwxLDMsM1YxOWEzLDMsMCwwLDEtMywzSDNhMywzLDAsMCwxLTMtM1YzQTMsMywwLDAsMSwzLDBaIiBmaWxsPSIjZjFmMGYyIi8+ICA8Zz4gICAgPGc+ICAgICAgPHBhdGggZD0iTTI3LjYzLDExLjM3SDI1LjU3YS40OC40OCwwLDAsMSwwLS45NWgzLjMyVjguODRIMjUuNDdhMi4wNSwyLjA1LDAsMCwwLTIsMi4wNWgwYTIuMDUsMi4wNSwwLDAsMCwyLDIuMDZoMi4yMWEuNDcuNDcsMCwxLDEsMCwuOTRIMjNhNCw0LDAsMCwxLTEuNDcsMS42OWg2LjA2YTIuMTEsMi4xMSwwLDAsMCwyLjEtMi4xMWgwQTIuMSwyLjEsMCwwLDAsMjcuNjMsMTEuMzdaIiBmaWxsPSIjNzE3MDZmIi8+ICAgICAgPHBhdGggZD0iTTIyLjY4LDEyLjIxaDBhMy4zNywzLjM3LDAsMCwwLTMuMzctMy4zN2gwYTMuMjksMy4yOSwwLDAsMC0zLjI2LDMuMzd2Ni45NGgxLjU4VjE1LjU4aDEuNjhBMy4zNywzLjM3LDAsMCwwLDIyLjY4LDEyLjIxWm0tMS41OC0uMDVhMS43MiwxLjcyLDAsMCwxLTEuNzMsMS43M0gxNy42M1YxMi4xNmExLjc0LDEuNzQsMCwxLDEsMy40NywwWiIgZmlsbD0iIzcxNzA2ZiIvPiAgICA8L2c+ICAgIDxnPiAgICAgIDxwYXRoIGQ9Ik05LjIyLDUuNzlhMS40NywxLjQ3LDAsMCwxLDIuOTQsMHYuODRoMS4zN1Y1LjY5YTIuODQsMi44NCwwLDAsMC01LjY4LDB2Ljk0SDkuMjJaIiBmaWxsPSIjYzgwMjZlIi8+ICAgICAgPHBhdGggZD0iTTE1LjIxLDEzLjg5VjkuMTNhMS40MywxLjQzLDAsMCwwLTEuNDQtMS40NEg3LjcxQTEuNDQsMS40NCwwLDAsMCw2LjI3LDkuMTN2Ni4wNmExLjQ1LDEuNDUsMCwwLDAsMS40NCwxLjQ0aDYuMDZhMS40NSwxLjQ1LDAsMCwwLDEuMzktMUgxMC42OWEzLjM3LDMuMzcsMCwwLDEtMy4zNy0zLjM3aDBhMy4zNywzLjM3LDAsMCwxLDMuMzctMy4zN2gwYTMuMzcsMy4zNywwLDAsMSwzLjM3LDMuMzdWMTNIOS4yYTEuNzIsMS43MiwwLDAsMCwxLjU0Ljk0aDQuNDdaIiBmaWxsPSIjYzgwMjZlIi8+ICAgICAgPHBhdGggZD0iTTEwLjc0LDEwLjQyYTEuNzMsMS43MywwLDAsMC0xLjU0Ljk1aDMuMDlBMS43NCwxLjc0LDAsMCwwLDEwLjc0LDEwLjQyWiIgZmlsbD0iI2M4MDI2ZSIvPiAgICA8L2c+ICA8L2c+PC9zdmc+)}.bg-bancontact{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNiIgaGVpZ2h0PSIxNiI+ICAgIDxwYXRoIGQ9Ik0yIDBoMjJjMS4xIDAgMiAuOSAyIDJ2MTJjMCAxLjEtLjkgMi0yIDJIMmMtMS4xIDAtMi0uOS0yLTJWMkMwIC45LjkgMCAyIDB6IiBmaWxsPSIjZjBmM2Y1Ij48L3BhdGg+ICAgIDxwYXRoIGQ9Ik0yMS4zIDZoLTYuNmwtMy41IDRINC43bDEuNi0xLjloLTNjLS41IDAtMSAuNS0xIDF2Mi4xYzAgLjYuNCAxIDEgMWgxMS40Yy41IDAgMS4zLS4zIDEuNy0uOEwyMS4zIDZ6IiBmaWxsPSIjMDA0ZTkxIj48L3BhdGg+ICAgIDxwYXRoIGQ9Ik0yMi42IDMuN2MuNSAwIDEgLjUgMSAxdjIuMWMwIC42LS40IDEtMSAxaC0zTDIxLjMgNmgtNi42bC0zLjUgNEg0LjdsNC44LTUuNWMuNC0uNCAxLjEtLjggMS43LS44aDExLjR6IiBmaWxsPSIjZmQwIj48L3BhdGg+PC9zdmc+)}.bg-knet{background-image:url(data:image/svg+xml;base64,PHN2ZyBpZD0nS2xhcm5hLXNtYWxsJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNicgaGVpZ2h0PScxNic+ICAgIDxzdHlsZT4uc3Qye2ZpbGw6I2ZmZn08L3N0eWxlPiAgICA8cGF0aCBkPSdNMiAwaDIyYzEuMSAwIDIgLjkgMiAydjEyYzAgMS4xLS45IDItMiAySDJjLTEuMSAwLTItLjktMi0yVjJDMCAuOS45IDAgMiAweicgZmlsbD0nIzAwNzhkYycvPiAgICA8cGF0aCBmaWxsPScjZmZlMTAwJyBkPSdNMjEuNiA3LjRsLTMuOS0yLjkgMy44LTIuM2gtNy42bC0zLjIgMi4xVjIuMkg1LjZ2NS4yaDUuMVY0LjhsMy4yIDIuNnonLz4gICAgPHBhdGggY2xhc3M9J3N0MicgZD0nTTYuMyAxMi44djEuNWgtLjR2LTEuNGMwLS41LS4yLS43LS43LS43LS4yIDAtLjMuMS0uNS4yLS4xLjEtLjIuMy0uMi41djEuNEg0di0yLjRoLjR2LjRjLjEtLjEuMi0uMi40LS4zLjEtLjEuMy0uMS41LS4xLjYtLjEgMSAuMiAxIC45ek0xMy43IDEyLjJjLjIuMi4zLjYuMyAxaC0yLjFjMCAuMy4xLjUuMi42LjEuMS4zLjIuNi4yLjIgMCAuNC0uMS41LS4xLjEtLjEuMi0uMi4zLS40aC41Yy0uMS4yLS4yLjQtLjQuNi0uMi4yLS41LjMtLjkuM3MtLjctLjEtLjktLjMtLjQtLjUtLjQtLjkuMS0uNi4zLS45Yy4yLS4yLjUtLjQuOS0uNC42LS4xLjkgMCAxLjEuM3ptLTEuNS4xYy0uMS4xLS4yLjMtLjMuNmgxLjdjLS4xLS41LS4zLS44LS44LS44LS4zIDAtLjUuMS0uNi4yek0yMC45IDExLjloLjV2LjNoLS41djEuNWMwIC4xIDAgLjIuMS4yIDAgMCAuMS4xLjIuMWguM3YuM2gtLjRjLS4yIDAtLjQtLjEtLjUtLjItLjEtLjEtLjEtLjItLjEtLjR2LTEuNWgtLjN2LS4zaC4zdi0uNmwuNC0uMnYuOHpNMCA5LjRoMjZ2LjRIMHonLz48L3N2Zz4=)}.bg-fawry{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczNicgaGVpZ2h0PScyMic+ICAgIDxzdHlsZT4uc3Qye2ZpbGw6IzAxNmQ5Yn08L3N0eWxlPiAgICA8cGF0aCBpZD0nUm91bmRlZF9SZWN0YW5nbGVfNTJfNl8nIGQ9J00zIDBoMzBjMS43IDAgMyAxLjMgMyAzdjE2YzAgMS43LTEuMyAzLTMgM0gzYy0xLjcgMC0zLTEuMy0zLTNWM2MwLTEuNyAxLjMtMyAzLTN6JyBmaWxsPScjZmVkMzAxJy8+ICAgIDxnIGlkPSd5eEFZeXkudGlmJz48cGF0aCBkPSdNMy4xIDEzLjRjLS41LS44LS44LTEuNy0uNy0yLjYuMS0xLjYuOS0yLjkgMi40LTMuNy44LS40IDEuNi0uNiAyLjQtLjUuOCAwIDEuNS4yIDIuMS43IDAgLjIuMS40IDAgLjUgMCAuNS0uMi45LS41IDEuMy0uMS4zLS4zLjUtLjUuOC0uMS4xLS4xLjIgMCAuM2guMmMuMyAwIC41IDAgLjgtLjEuMSAwIC4xIDAgLjEuMSAwIC4yIDAgLjMtLjEuNSAwIC4xIDAgLjIuMS4ycy4yIDAgLjItLjFjLjUtLjcuOS0xLjMgMS0yLjEuMy40LjQuOS41IDEuNC4zIDEuNS0uMSAyLjktMS4yIDQtLjguOC0xLjcgMS4yLTIuOCAxLjMtMSAuMS0xLjktLjEtMi44LS43LjQgMCAuNy0uMSAxLS4zLjgtLjMgMS40LS44IDIuMS0xLjMuMyAwIC40LS4xLjUtLjEuMSAwIC4yLjIuMy4zLjEuMS4xLjIuMy4xLjIgMCAuMS0uMi4xLS4zbC4zLTIuMWMwLS4yIDAtLjMtLjMtLjMtLjUgMC0xLjEuMS0xLjYuMS0uMiAwLS40IDAtLjYuMS0uMSAwLS4yIDAtLjIuMS0uMS4xIDAgLjIuMS4zbC4zLjNjLjEuMS4xLjEgMCAuMi0uNi41LTEuMi45LTEuOSAxLjItLjMuMi0uNy4zLTEgLjRoLS42eicgZmlsbD0nI2ZkZmRmZCcvPiAgICAgICAgPHBhdGggY2xhc3M9J3N0MicgZD0nTTIyLjYgMTAuN2MtLjIuNi0uNCAxLjItLjYgMS45LS4xLjMtLjIuNC0uNS40aC0uNGMtLjMgMC0uNC0uMS0uNS0uNC0uMy0uOS0uNi0xLjctLjktMi42LS4xLS4yLS4xLS4zLS4yLS41di0uMmMwLS4xIDAtLjIuMS0uMmguOGMuMiAwIC4zLjIuNC40LjEuNS4zIDEgLjQgMS40IDAgLjEgMCAuMi4xLjMuMi0uNi4zLTEuMS41LTEuNy4yLS4yLjItLjMuNi0uM2guNWMuMyAwIC40LjEuNS4zLjEuNS4zIDEgLjQgMS40IDAgLjEgMCAuMi4xLjMuMS0uNS4zLS45LjQtMS40IDAtLjEuMS0uMy4xLS40LjEtLjIuMi0uMy40LS4zaC43Yy4xIDAgLjIuMS4yLjJ2LjJjLS4zIDEtLjcgMi0xIDMtLjEuMy0uMi40LS41LjRoLS40Yy0uMyAwLS40LS4xLS41LS40LS4zLS41LS41LTEuMS0uNy0xLjggMCAuMSAwIDAgMCAwek0zLjEgMTMuNGguNmMuNC0uMS43LS4yIDEtLjQuNy0uMyAxLjMtLjggMS44LTEuMi4xLS4xLjEtLjEgMC0uMmwtLjMtLjNjLS4xLS4xLS4yLS4xLS4xLS4zIDAtLjEuMi0uMS4yLS4xLjIgMCAuNCAwIC42LS4xLjUgMCAxLjEtLjEgMS42LS4xLjIgMCAuMy4xLjMuM2wtLjMgMi4xYzAgLjEgMCAuMy0uMS4zcy0uMi0uMS0uMy0uMWMwLS4xLS4xLS4zLS4yLS4zcy0uMi4yLS4zLjNjLS42LjUtMS4zIDEtMi4xIDEuMy0uMy4xLS43LjItMSAuMy0uNi0uNS0xLS45LTEuNC0xLjV6TTI5LjkgOS4yaC4zYy4yIDAgLjMuMS4zLjMuMS4zLjIuNy4zIDEgLjEuMy4yLjUuMy44LjEuMi4xLjMuMy41bC4xLjFjLjIuMS4yLjEuMi0uMS4yLS43LjQtMS40LjYtMi4yLjEtLjMuMS0uMy40LS4zaC41Yy4yIDAgLjMuMS4yLjMtLjIuNy0uNCAxLjQtLjYgMi0uMS41LS4zLjktLjQgMS40LS4xLjMtLjIuNS0uNC44LS4yLjQtLjYuNS0xIC42aC0uOGMtLjEgMC0uMiAwLS4yLS4xLS4yLS4xLS4yLS42IDAtLjdIMzAuNmMuMy4xLjUtLjEuNi0uMyAwIDAgLjEtLjEuMS0uMi4xLS4yLjEtLjItLjEtLjItLjQtLjEtLjgtLjMtMS0uNi0uMi0uNC0uNC0uNy0uNS0xLjEtLjEtLjUtLjMtLjktLjQtMS40di0uMmMwLS4xLjEtLjIuMi0uMi4xLS4yLjMtLjIuNC0uMnpNMTIuNCAxMS4xVjkuNmMwLS4yIDAtLjUuMS0uNy4yLS41LjUtLjggMS4xLS45LjUtLjEgMS0uMSAxLjYgMCAuNCAwIC40LjEuNC41di4yYzAgLjEtLjEuMi0uMi4yaC0xLjFjLS40LjEtLjUuMi0uNS42LS4xLjQtLjEuNC4zLjRoLjhjLjIgMCAuMy4xLjMuM3YuMmMwIC4yLS4xLjMtLjMuM2gtMWMtLjEgMC0uMiAwLS4yLjJ2MS45YzAgLjMgMCAuMy0uMy4zaC0uNmMtLjMgMC0uMy0uMS0uMy0uMy0uMS0uNi0uMS0xLjItLjEtMS43ek0yNi4xIDExLjFWOS41YzAtLjMgMC0uMy4zLS4zaC42Yy4yIDAgLjMgMCAuMy4zIDAgLjEgMCAuMS4xLjEuNC0uMy44LS40IDEuMy0uNC4zLS4xLjMgMCAuMy4ydi40YzAgLjItLjEuMi0uMy4yaC0uNmMtLjQgMC0uNi4yLS44LjUtLjEuMSAwIC4xIDAgLjJ2Mi4xYzAgLjEtLjEuMS0uMi4xaC0uN2MtLjIgMC0uMy0uMS0uMy0uM3YtMS41ek0xMC43IDguOGMtLjEuOC0uNSAxLjUtMSAyLjEgMCAuMS0uMS4xLS4yLjFzLS4xLS4yLS4xLS4yYzAtLjIgMC0uMy4xLS41IDAtLjEgMC0uMS0uMS0uMS0uMyAwLS41IDAtLjguMWgtLjJjLS4xLS4xLS4xLS4yIDAtLjMuMi0uMi40LS41LjUtLjguMi0uNC40LS44LjUtMS4zdi0uNWMuNS4yIDEgLjcgMS4zIDEuNHpNMTguMiA5LjJjLS42LS4yLTEuMi0uMS0xLjkgMC0uMSAwLS4zLjEtLjQuMi0uMi4yLS4zLjQtLjMuNiAwIC4yLjEuMy4yLjNoLjRjLjIgMCAuNC0uMS41LS4yLjItLjEuMy0uMS41LS4yaC40Yy4zIDAgLjUuMi41LjYgMCAuMSAwIC4xLS4xLjFoLS45Yy0uMyAwLS42IDAtLjguMS0uMy4xLS42LjItLjguNS0uNC42LS4xIDEuMy41IDEuNi43LjMgMS4zLjMgMiAwbC4xLS4xaC4xYy4xLjIuMS4yLjMuMmguNWMuMyAwIC4zIDAgLjMtLjN2LTEtMWMwLS43LS4zLTEuMi0xLjEtMS40em0tLjQgMi45Yy0uMi4xLS40LjEtLjYuMWgtLjNjLS4yLS4xLS4zLS4yLS4zLS40cy4yLS4zLjQtLjRoMWMuMSAwIC4xIDAgLjEuMSAwIC41LjEuNC0uMy42eicvPiAgICA8L2c+PC9zdmc+)} diff --git a/view/frontend/web/css/frames/single.css b/view/frontend/web/css/frames/single.css index 68e6cb26..949f147c 100644 --- a/view/frontend/web/css/frames/single.css +++ b/view/frontend/web/css/frames/single.css @@ -61,6 +61,7 @@ } #checkoutcom_card_payment_frm .error-message { + display: block; color: #C9501C; font-size: 1.2rem; margin: 8px 0 0 1px; diff --git a/view/frontend/web/css/frames/single.min.css b/view/frontend/web/css/frames/single.min.css index f5ddf687..d7053b63 100644 --- a/view/frontend/web/css/frames/single.min.css +++ b/view/frontend/web/css/frames/single.min.css @@ -13,4 +13,4 @@ * @link https://docs.checkout.com/ */ -#checkoutcom_card_payment_frm *,#checkoutcom_card_payment_frm ::after,#checkoutcom_card_payment_frm ::before{box-sizing:border-box}#checkoutcom_card_payment_frm html{padding:1rem;background-color:#fff;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif}#checkoutcom_card_payment_frm iframe{width:100%}#checkoutcom_card_payment_frm .one-liner{display:flex;flex-direction:column}#checkoutcom_card_payment_frm .card-frame{border:solid 1px #13395e;border-radius:3px;width:100%;margin-bottom:8px;height:40px;box-shadow:0 1px 3px 0 rgba(19,57,94,.2)}#checkoutcom_card_payment_frm .card-frame.frame--rendered{opacity:1}#checkoutcom_card_payment_frm .card-frame.frame--rendered.frame--focus{border:solid 1px #13395e;box-shadow:0 2px 5px 0 rgba(19,57,94,.15)}#checkoutcom_card_payment_frm .card-frame.frame--rendered.frame--invalid{border:solid 1px #d96830;box-shadow:0 2px 5px 0 rgba(217,104,48,.15)}#checkoutcom_card_payment_frm .error-message{color:#c9501c;font-size:1.2rem;margin:8px 0 0 1px;font-weight:300}#checkoutcom_card_payment_frm .success-payment-message{color:#13395e;line-height:1.4}#checkoutcom_card_payment_frm .token{color:#b35e14;font-size:.9rem;font-family:monospace}@media screen and (min-width:31rem){#checkoutcom_card_payment_frm .one-liner{flex-direction:row}#checkoutcom_card_payment_frm .card-frame{margin-bottom:0}} +#checkoutcom_card_payment_frm *,#checkoutcom_card_payment_frm ::after,#checkoutcom_card_payment_frm ::before{box-sizing:border-box}#checkoutcom_card_payment_frm html{padding:1rem;background-color:#fff;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif}#checkoutcom_card_payment_frm iframe{width:100%}#checkoutcom_card_payment_frm .one-liner{display:flex;flex-direction:column}#checkoutcom_card_payment_frm .card-frame{border:1px solid #13395e;border-radius:3px;width:100%;margin-bottom:8px;height:40px;box-shadow:0 1px 3px 0 rgba(19,57,94,.2)}#checkoutcom_card_payment_frm .card-frame.frame--rendered{opacity:1}#checkoutcom_card_payment_frm .card-frame.frame--rendered.frame--focus{border:1px solid #13395e;box-shadow:0 2px 5px 0 rgba(19,57,94,.15)}#checkoutcom_card_payment_frm .card-frame.frame--rendered.frame--invalid{border:1px solid #d96830;box-shadow:0 2px 5px 0 rgba(217,104,48,.15)}#checkoutcom_card_payment_frm .error-message{display:block;color:#c9501c;font-size:1.2rem;margin:8px 0 0 1px;font-weight:300}#checkoutcom_card_payment_frm .success-payment-message{color:#13395e;line-height:1.4}#checkoutcom_card_payment_frm .token{color:#b35e14;font-size:.9rem;font-family:monospace}@media screen and (min-width:31rem){#checkoutcom_card_payment_frm .one-liner{flex-direction:row}#checkoutcom_card_payment_frm .card-frame{margin-bottom:0}} diff --git a/view/frontend/web/css/paypal/paypal-express.css b/view/frontend/web/css/paypal/paypal-express.css new file mode 100644 index 00000000..ab551c94 --- /dev/null +++ b/view/frontend/web/css/paypal/paypal-express.css @@ -0,0 +1,3 @@ +#minicart-paypal-button-container { + margin-top: 10px; +} diff --git a/view/frontend/web/css/paypal/paypal-review.css b/view/frontend/web/css/paypal/paypal-review.css new file mode 100644 index 00000000..f7efe4b0 --- /dev/null +++ b/view/frontend/web/css/paypal/paypal-review.css @@ -0,0 +1,29 @@ +.checkoutcom-paypal-review .box .box-title { + display: block; + margin: 0 0 20px; + padding: 0 0 10px; + width: 100%; + box-sizing: border-box; +} + +.checkoutcom-paypal-review .box .box-title span { + font-weight: 300; + line-height: 1.2; + font-size: 18px; +} + +.checkoutcom-paypal-review .box-order-shipping-method .item { + display: block; +} + +@media screen and (min-width: 769px) { + .checkoutcom-paypal-review .boxes { + display: grid; + gap: 4%; + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .checkoutcom-paypal-review .box .box-title { + border-bottom: 1px solid #C5C5C5; + } +} diff --git a/view/frontend/web/js/frames/single.js b/view/frontend/web/js/frames/single.js index 26011c9e..e8c423d1 100755 --- a/view/frontend/web/js/frames/single.js +++ b/view/frontend/web/js/frames/single.js @@ -36,6 +36,27 @@ define( return this.F; }, + getLogos: function () { + var logos = {}; + + logos['card-number'] = { + src: 'card', + alt: __('Card number logo') + }; + + logos['expiry-date'] = { + src: 'exp-date', + alt: __('Expiry date logo') + }; + + logos['cvv'] = { + src: 'cvv', + alt: __('CVV logo') + }; + + return logos; + }, + getErrors: function () { var errors = { 'card-number': __('Please enter a valid card number'), @@ -46,19 +67,27 @@ define( return errors; }, - getErrorMessage: function (event) { + onValidationChanged: function (event) { + var e = event.element; + if (event.isValid || event.isEmpty) { - return ''; + this.clearErrorMessage(e); + } else { + this.setErrorMessage(e); } + }, - return this.getErrors()[event.element]; + clearErrorMessage: function (el) { + var targetSelector = '#' + this.formId + ' .error-message__' + el; + var message = document.querySelector(targetSelector); + message.textContent = ''; }, - onValidationChanged: function (event) { - var targetSelector = '.error-message'; - var errorMessage = document.querySelector(targetSelector); - errorMessage.textContent = this.getErrorMessage(event); - } + setErrorMessage: function (el) { + var targetSelector = '#' + this.formId + ' .error-message__' + el; + var message = document.querySelector(targetSelector); + message.textContent = this.getErrors()[el]; + }, }; } ); diff --git a/view/frontend/web/js/frames/single.min.js b/view/frontend/web/js/frames/single.min.js index d8981181..668c8b19 100755 --- a/view/frontend/web/js/frames/single.min.js +++ b/view/frontend/web/js/frames/single.min.js @@ -14,9 +14,4 @@ * @link https://docs.checkout.com/ */ -define(["jquery","mage/translate"],function (e,t) { - "use strict";return{load:function (e,t) { - return this.F=e,this.formId=t,this.F.addEventHandler(this.F.Events.FRAME_VALIDATION_CHANGED,this.onValidationChanged.bind(this)),this.F},getErrors:function () { - return{"card-number":t("Please enter a valid card number"),"expiry-date":t("Please enter a valid expiry date"),cvv:t("Please enter a valid CVV code")}},getErrorMessage:function (e) { - return e.isValid||e.isEmpty?"":this.getErrors()[e.element]},onValidationChanged:function (e) { - document.querySelector(".error-message").textContent=this.getErrorMessage(e)}}}); +define(["jquery","mage/translate"],function(e,r){return{load:function(e,r){return this.F=e,this.formId=r,this.F.addEventHandler(this.F.Events.FRAME_VALIDATION_CHANGED,this.onValidationChanged.bind(this)),this.F},getLogos:function(){var e={};return e["card-number"]={src:"card",alt:r("Card number logo")},e["expiry-date"]={src:"exp-date",alt:r("Expiry date logo")},e.cvv={src:"cvv",alt:r("CVV logo")},e},getErrors:function(){return{"card-number":r("Please enter a valid card number"),"expiry-date":r("Please enter a valid expiry date"),cvv:r("Please enter a valid CVV code")}},getErrorMessage:function(e){return e.isValid||e.isEmpty?"":this.getErrors()[e.element]},onValidationChanged:function(e){var r=e.element;e.paymentMethod;var t="#"+this.formId+" .icon-container.payment-method";document.querySelector(t),e.isValid||e.isEmpty?this.clearErrorMessage(r):this.setErrorMessage(r)},clearErrorMessage:function(e){var r="#"+this.formId+" .error-message__"+e;document.querySelector(r).textContent=""},setErrorMessage:function(e){var r="#"+this.formId+" .error-message__"+e;document.querySelector(r).textContent=this.getErrors()[e]}}}); diff --git a/view/frontend/web/js/model/checkout-utilities.js b/view/frontend/web/js/model/checkout-utilities.js new file mode 100644 index 00000000..e929b396 --- /dev/null +++ b/view/frontend/web/js/model/checkout-utilities.js @@ -0,0 +1,59 @@ +/** + * Checkout.com + * Authorized and regulated as an electronic money institution + * by the UK Financial Conduct Authority (FCA) under number 900816. + * + * PHP version 7 + * + * @category Magento2 + * @package Checkout.com + * @author Platforms Development Team + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ + +define([ + 'jquery', + 'CheckoutCom_Magento2/js/view/payment/utilities', + 'Magento_Checkout/js/model/step-navigator', + 'Magento_Checkout/js/action/set-payment-information' +], function ($, Utilities, StepNavigator, setPaymentInformationAction) { + 'use strict'; + + const PAYMENT_STEP_CODE = 'payment'; + + return { + + /** + * Workaround to refresh payment method information when guest customer + * go back to shipping step & change his email address + * + * @param {UiClass} Component + * @public + */ + initSubscribers: function (Component) { + const code = Component.getCode(); + + StepNavigator.steps.subscribe((steps) => { + if (this.getCurrentCheckoutStep(steps) === PAYMENT_STEP_CODE && + Utilities.methodIsSelected(code)) { + setPaymentInformationAction(Component.messageContainer, { + method: code + }); + } + }); + }, + + /** + * Return current checkout step code + * + * @param {Array} steps + * @return string + * @public + */ + getCurrentCheckoutStep: function (steps) { + return steps[StepNavigator.getActiveItemIndex()]['code']; + } + }; +}); diff --git a/view/frontend/web/js/view/payment/applepay-utilities.js b/view/frontend/web/js/view/payment/applepay-utilities.js index 6b748a2f..98dd2365 100644 --- a/view/frontend/web/js/view/payment/applepay-utilities.js +++ b/view/frontend/web/js/view/payment/applepay-utilities.js @@ -24,6 +24,9 @@ define( 'use strict'; return { + applePayDefaultVersion: 5, + applePayVersion: 14, + /** * Is Virtual. * @@ -200,6 +203,21 @@ define( } else { return ""; } + }, + + /** + * Check if applepay version is supported + */ + initializeApplePaySession (paymentRequest) { + if (!ApplePaySession.supportsVersion(this.applePayVersion) && !ApplePaySession.supportsVersion(this.applePayDefaultVersion)) { + return false; + } + + const versionToUse = ApplePaySession.supportsVersion(this.applePayVersion) + ? this.applePayVersion + : this.applePayDefaultVersion; + + return new ApplePaySession(versionToUse, paymentRequest); } }; } diff --git a/view/frontend/web/js/view/payment/cart/checkoutcom_applepay_cart.js b/view/frontend/web/js/view/payment/cart/checkoutcom_applepay_cart.js index 3478cec1..2df27c05 100644 --- a/view/frontend/web/js/view/payment/cart/checkoutcom_applepay_cart.js +++ b/view/frontend/web/js/view/payment/cart/checkoutcom_applepay_cart.js @@ -15,26 +15,24 @@ define([ "jquery", - "Magento_Checkout/js/view/payment/default", + "Magento_Customer/js/customer-data", "CheckoutCom_Magento2/js/view/payment/utilities", "CheckoutCom_Magento2/js/view/payment/applepay-utilities", "Magento_Checkout/js/model/full-screen-loader", "Magento_Checkout/js/model/payment/additional-validators", "Magento_Checkout/js/action/redirect-on-success", - "Magento_Checkout/js/model/shipping-service", "Magento_Customer/js/model/customer", "Magento_Customer/js/model/authentication-popup", 'Magento_Checkout/js/model/quote', "mage/translate", ], function ( $, - Component, + customerData, Utilities, ApplePayUtilities, FullScreenLoader, AdditionalValidators, RedirectOnSuccessAction, - shippingService, Customer, AuthPopup, Quote, @@ -120,10 +118,6 @@ "email" ], }; - - // Start the payment session - Utilities.log(paymentRequest); - var session = new ApplePaySession(12, paymentRequest); } else { var paymentRequest = { currencyCode: Utilities.getQuoteCurrency(), @@ -148,10 +142,22 @@ ], shippingMethods: [], }; + } + + // Start the payment session + Utilities.log(paymentRequest); + var session = ApplePayUtilities.initializeApplePaySession(paymentRequest); + + if (!session) { + Utilities.log('Your browser is not compatible with the Apple Pay version. Please use the most updated OS system and browsers.'); + customerData.set('messages', { + messages: [{ + type: 'error', + text: __('Your browser is not compatible with the Apple Pay version. Please use the most updated OS system and browsers.') + }] + }); - // Start the payment session - Utilities.log(paymentRequest); - var session = new ApplePaySession(12, paymentRequest); + return false; } // Merchant Validation diff --git a/view/frontend/web/js/view/payment/method-renderer/checkoutcom_apm.js b/view/frontend/web/js/view/payment/method-renderer/checkoutcom_apm.js index 460008a1..5ff0a041 100755 --- a/view/frontend/web/js/view/payment/method-renderer/checkoutcom_apm.js +++ b/view/frontend/web/js/view/payment/method-renderer/checkoutcom_apm.js @@ -18,13 +18,14 @@ define( 'jquery', 'Magento_Checkout/js/view/payment/default', 'CheckoutCom_Magento2/js/view/payment/utilities', + 'CheckoutCom_Magento2/js/model/checkout-utilities', 'Magento_Checkout/js/model/full-screen-loader', 'Magento_Checkout/js/model/payment/additional-validators', 'Magento_Checkout/js/model/quote', 'mage/translate', 'jquery/ui' ], - function ($, Component, Utilities, FullScreenLoader, AdditionalValidators, Quote, __) { + function ($, Component, Utilities, CheckoutUtilities, FullScreenLoader, AdditionalValidators, Quote, __) { 'use strict'; window.checkoutConfig.reloadOnBillingAddress = true; @@ -45,6 +46,7 @@ define( initialize: function () { this._super(); Utilities.loadCss('apm', 'apm'); + CheckoutUtilities.initSubscribers(this); }, /** diff --git a/view/frontend/web/js/view/payment/method-renderer/checkoutcom_apple_pay.js b/view/frontend/web/js/view/payment/method-renderer/checkoutcom_apple_pay.js index e0399fe7..08f7b431 100755 --- a/view/frontend/web/js/view/payment/method-renderer/checkoutcom_apple_pay.js +++ b/view/frontend/web/js/view/payment/method-renderer/checkoutcom_apple_pay.js @@ -16,8 +16,10 @@ define( [ 'jquery', + 'ko', 'Magento_Checkout/js/view/payment/default', 'CheckoutCom_Magento2/js/view/payment/utilities', + 'CheckoutCom_Magento2/js/model/checkout-utilities', "CheckoutCom_Magento2/js/view/payment/applepay-utilities", 'Magento_Checkout/js/model/full-screen-loader', 'Magento_Checkout/js/model/payment/additional-validators', @@ -26,8 +28,10 @@ define( ], function ( $, + ko, Component, Utilities, + CheckoutUtilities, ApplePayUtilities, FullScreenLoader, AdditionalValidators, @@ -42,8 +46,9 @@ define( { defaults: { template: 'CheckoutCom_Magento2/payment/' + METHOD_ID + '.html', - button_target: '#ckoApplePayButton', - redirectAfterPlaceOrder: false + buttonClass: 'apple-pay-button-', + redirectAfterPlaceOrder: false, + canPayWithApplePay: ko.observable(false) }, /** @@ -52,7 +57,9 @@ define( initialize: function () { this._super(); Utilities.setEmail(); + CheckoutUtilities.initSubscribers(this); Utilities.loadCss('apple-pay', 'apple-pay'); + this.launchApplePay(); return this; }, @@ -99,7 +106,7 @@ define( * * @return {array} */ - processSupportedNetworks: function(networksEnabled) { + processSupportedNetworks: function (networksEnabled) { if (networksEnabled.includes("mada") && !(Utilities.getStoreCountry() === "SA")) { networksEnabled.splice(networksEnabled.indexOf("mada"), 1); } @@ -112,8 +119,8 @@ define( * * @return {string} */ - getCountryCode: function() { - return Utilities.getStoreCountry() === "SA" ? "SA" : window.checkoutConfig.defaultCountryId; + getCountryCode: function () { + return Utilities.getStoreCountry() === "SA" ? "SA" : window.checkoutConfig.defaultCountryId; }, /** @@ -175,7 +182,7 @@ define( ); }, - setBilling: function(shippingDetails, billingDetails) { + setBilling: function (shippingDetails, billingDetails) { let requestBody = { address: { country_id: billingDetails.countryCode.toUpperCase(), @@ -199,204 +206,204 @@ define( * @return {bool} */ launchApplePay: function () { - // Prepare the parameters - var self = this; - - // Apply the button style - $(self.button_target) - .addClass('apple-pay-button-' + self.getValue('button_style')); + this.buttonClass = `${this.buttonClass}${this.getValue('button_style')}`; // Check if the session is available if (window.ApplePaySession) { - var merchantIdentifier = self.getValue('merchant_id'); - var promise = ApplePaySession.canMakePaymentsWithActiveCard(merchantIdentifier); - promise.then( - function (canMakePayments) { - if (canMakePayments) { - $(self.button_target).css('display', 'block'); - } else { - Utilities.showMessage( - 'warning', - __('Apple Pay is available but not currently active.'), - METHOD_ID - ); - } - } - ).catch( - function (error) { - Utilities.log(error); - } - ); + const merchantIdentifier = this.getValue('merchant_id'); + const canMakePayments = ApplePaySession.canMakePayments(merchantIdentifier); + + this.canPayWithApplePay(canMakePayments); + if (!canMakePayments) { + Utilities.showMessage( + 'warning', + __('Apple Pay is available but not currently active.'), + METHOD_ID + ); + } } else { - $(self.button_target).css('display', 'none'); + this.canPayWithApplePay(false); Utilities.showMessage( 'warning', __('Apple Pay is not available for this browser.'), METHOD_ID ); } + }, - // Handle the events - $(self.button_target).click( - function (evt) { - if (Utilities.methodIsSelected(METHOD_ID)) { - // Validate T&C submission - if (!AdditionalValidators.validate()) { - return; - } + placeOrder: function () { + let self = this; - // Prepare the parameters - var runningTotal = Utilities.getQuoteValue(); - - // Build the payment request - if (ApplePayUtilities.getIsVirtual()) { - var paymentRequest = { - currencyCode: Utilities.getQuoteCurrency(), - countryCode: self.getCountryCode(), - total: { - label: Utilities.getStoreName(), - amount: runningTotal - }, - supportedNetworks: self.getSupportedNetworks(), - merchantCapabilities: self.getMerchantCapabilities(), - requiredBillingContactFields: [ - "postalAddress", - "name", - "phone", - "email" - ], - requiredShippingContactFields: [ - "phone", - "email" - ], - }; - } else { - var paymentRequest = { - currencyCode: Utilities.getQuoteCurrency(), - countryCode: self.getCountryCode(), - total: { - label: Utilities.getStoreName(), - amount: runningTotal - }, - supportedNetworks: self.getSupportedNetworks(), - merchantCapabilities: self.getMerchantCapabilities() - }; - } + if (Utilities.methodIsSelected(METHOD_ID)) { + Utilities.setEmail(); - // Start the payment session - Utilities.log(paymentRequest); - var session = new ApplePaySession(14, paymentRequest); - - // Merchant Validation - session.onvalidatemerchant = function (event) { - var promise = self.performValidation(event.validationURL); - promise.then( - function (merchantSession) { - session.completeMerchantValidation(merchantSession); - } - ).catch( - function (error) { - Utilities.log(error); - } - ); - } + // Validate T&C submission + if (!AdditionalValidators.validate()) { + return; + } - // Shipping contact - session.onshippingcontactselected = function (event) { - var status = ApplePaySession.STATUS_SUCCESS; + // Prepare the parameters + var runningTotal = Utilities.getQuoteValue(); + + // Build the payment request + if (ApplePayUtilities.getIsVirtual()) { + var paymentRequest = { + currencyCode: Utilities.getQuoteCurrency(), + countryCode: this.getCountryCode(), + total: { + label: Utilities.getStoreName(), + amount: runningTotal + }, + supportedNetworks: this.getSupportedNetworks(), + merchantCapabilities: this.getMerchantCapabilities(), + requiredBillingContactFields: [ + "postalAddress", + "name", + "phone", + "email" + ], + requiredShippingContactFields: [ + "phone", + "email" + ], + }; + } else { + var paymentRequest = { + currencyCode: Utilities.getQuoteCurrency(), + countryCode: this.getCountryCode(), + total: { + label: Utilities.getStoreName(), + amount: runningTotal + }, + supportedNetworks: this.getSupportedNetworks(), + merchantCapabilities: this.getMerchantCapabilities() + }; + } - // Shipping info - var shippingOptions = []; + // Start the payment session + Utilities.log(paymentRequest); + var session = ApplePayUtilities.initializeApplePaySession(paymentRequest); - var newTotal = { - type: 'final', - label: ap['storeName'], - amount: runningTotal - }; + if (!session) { + Utilities.log('Your browser is not compatible with the Apple Pay version'); - session.completeShippingContactSelection(status, shippingOptions, newTotal, self.getLineItems()); - } + Utilities.showMessage( + 'error', + __('Your browser is not compatible with the Apple Pay version. Please use the most updated OS system and browsers.'), + METHOD_ID + ); - // Shipping method selection - session.onshippingmethodselected = function (event) { - var status = ApplePaySession.STATUS_SUCCESS; - var newTotal = { - type: 'final', - label: ap['storeName'], - amount: runningTotal - }; + return false; + } - session.completeShippingMethodSelection(status, newTotal, self.getLineItems()); + // Merchant Validation + session.onvalidatemerchant = function (event) { + var promise = self.performValidation(event.validationURL); + promise.then( + function (merchantSession) { + session.completeMerchantValidation(merchantSession); + } + ).catch( + function (error) { + Utilities.log(error); } + ); + } - // Payment method selection - session.onpaymentmethodselected = function (event) { - var newTotal = { - type: 'final', - label: Utilities.getStoreName(), - amount: runningTotal - }; + // Shipping contact + session.onshippingcontactselected = function (event) { + var status = ApplePaySession.STATUS_SUCCESS; - session.completePaymentMethodSelection(newTotal, self.getLineItems()); - } + // Shipping info + var shippingOptions = []; - // Payment method authorization - session.onpaymentauthorized = function (event) { - // Prepare the payload - var payload = { - methodId: METHOD_ID, - cardToken: event.payment.token, - source: METHOD_ID - }; - - if (ApplePayUtilities.getIsVirtual()) { - self.setBilling( - event.payment.shippingContact, - event.payment.billingContact - ); + var newTotal = { + type: 'final', + label: ap['storeName'], + amount: runningTotal + }; + + session.completeShippingContactSelection(status, shippingOptions, newTotal, self.getLineItems()); + } + + // Shipping method selection + session.onshippingmethodselected = function (event) { + var status = ApplePaySession.STATUS_SUCCESS; + var newTotal = { + type: 'final', + label: ap['storeName'], + amount: runningTotal + }; + + session.completeShippingMethodSelection(status, newTotal, self.getLineItems()); + } + + // Payment method selection + session.onpaymentmethodselected = function (event) { + var newTotal = { + type: 'final', + label: Utilities.getStoreName(), + amount: runningTotal + }; + + session.completePaymentMethodSelection(newTotal, self.getLineItems()); + } + + // Payment method authorization + session.onpaymentauthorized = function (event) { + // Prepare the payload + var payload = { + methodId: METHOD_ID, + cardToken: event.payment.token, + source: METHOD_ID + }; + + if (ApplePayUtilities.getIsVirtual()) { + self.setBilling( + event.payment.shippingContact, + event.payment.billingContact + ); + } + + // Send the request + var promise = self.sendPaymentRequest(payload); + promise.then( + function (data) { + var status; + if (data.success) { + status = ApplePaySession.STATUS_SUCCESS; + } else { + status = ApplePaySession.STATUS_FAILURE; } - // Send the request - var promise = self.sendPaymentRequest(payload); - promise.then( - function (data) { - var status; - if (data.success) { - status = ApplePaySession.STATUS_SUCCESS; - } else { - status = ApplePaySession.STATUS_FAILURE; - } - - session.completePayment(status); - - if (data.success && data.url) { - // Redirect to success page - FullScreenLoader.startLoader(); - // Handle 3DS redirection - window.location.href = data.url; - } else { - // Normal redirection - RedirectOnSuccessAction.execute(); - } - Utilities.cleanCustomerShippingAddress(); - } - ).catch( - function (error) { - Utilities.log(error); - } - ); - } + session.completePayment(status); - // Session cancellation - session.oncancel = function (event) { - Utilities.log(event); + if (data.success && data.url) { + // Redirect to success page + FullScreenLoader.startLoader(); + // Handle 3DS redirection + window.location.href = data.url; + } else { + // Normal redirection + RedirectOnSuccessAction.execute(); + } + Utilities.cleanCustomerShippingAddress(); + } + ).catch( + function (error) { + Utilities.log(error); } + ); + } - // Begin session - session.begin(); - } + // Session cancellation + session.oncancel = function (event) { + Utilities.log(event); } - ); + + // Begin session + session.begin(); + } } } ); diff --git a/view/frontend/web/js/view/payment/method-renderer/checkoutcom_card_payment.js b/view/frontend/web/js/view/payment/method-renderer/checkoutcom_card_payment.js index 0f4fcea7..02e726d1 100755 --- a/view/frontend/web/js/view/payment/method-renderer/checkoutcom_card_payment.js +++ b/view/frontend/web/js/view/payment/method-renderer/checkoutcom_card_payment.js @@ -19,14 +19,16 @@ define( 'ko', 'Magento_Checkout/js/view/payment/default', 'CheckoutCom_Magento2/js/view/payment/utilities', + 'CheckoutCom_Magento2/js/model/checkout-utilities', 'CheckoutCom_Magento2/js/frames/multi', 'CheckoutCom_Magento2/js/frames/single', 'Magento_Checkout/js/model/payment/additional-validators', 'Magento_Customer/js/model/customer', 'Magento_Checkout/js/model/quote', + 'Magento_Checkout/js/model/full-screen-loader', 'framesjs' ], - function ($, ko, Component, Utilities, FramesMulti, FramesSingle, AdditionalValidators, Customer, Quote) { + function ($, ko, Component, Utilities, CheckoutUtilities, FramesMulti, FramesSingle, AdditionalValidators, Customer, Quote, FullScreenLoader) { 'use strict'; window.checkoutConfig.reloadOnBillingAddress = true; const METHOD_ID = 'checkoutcom_card_payment'; @@ -48,7 +50,8 @@ define( redirectAfterPlaceOrder: false, allowPlaceOrder: ko.observable(false), isCoBadged: ko.observable(false), - tooltipVisible: ko.observable(false) + tooltipVisible: ko.observable(false), + cardLabels: Utilities.getCardLabels(METHOD_ID) }, /** @@ -58,6 +61,7 @@ define( this._super(); Utilities.loadCss(this.getFormLayout(), 'frames'); Utilities.setEmail(); + CheckoutUtilities.initSubscribers(this); return this; }, @@ -111,9 +115,6 @@ define( return Customer.isLoggedIn(); }, - /** - * @return {void} - */ initEvents: function () { var self = this; @@ -125,8 +126,6 @@ define( } ); - self.getCkoPaymentForm(); - // Option click event $('.payment-method input[type="radio"]').on('click', function () { self.allowPlaceOrder(false); @@ -139,9 +138,6 @@ define( }); }, - /** - * @return {void} - */ handleFormState: function () { if (Utilities.methodIsSelected(METHOD_ID)) { this.getCkoPaymentForm(); @@ -150,8 +146,6 @@ define( /** * Gets the payment form styles - * - * @return {void} */ getFormStyles: function () { var formStyles = this.getValue('payment_form_styles'); @@ -173,8 +167,6 @@ define( /** * Gets the payment form layout - * - * @return {void} */ getFormLayout: function () { return this.getValue('payment_form_layout'); @@ -182,8 +174,6 @@ define( /** * Gets the module images path - * - * @return {void} */ getImagesPath: function () { return window.checkoutConfig.payment.checkoutcom_magento2.checkoutcom_data.images_path; @@ -191,8 +181,6 @@ define( /** * Gets the payment form - * - * @return {void} */ getCkoPaymentForm: function () { // Prepare the needed variables @@ -215,7 +203,7 @@ define( debug: Boolean(self.getValue('debug') && self.getValue('console_logging')), schemeChoice: true, modes: [ Frames.modes.FEATURE_FLAG_SCHEME_CHOICE], - localization: Utilities.getShopLanguage(), + localization: Utilities.getCardPlaceholders(METHOD_ID), style: (formStyles) ? formStyles : {} } ); @@ -229,7 +217,6 @@ define( /** * Loads a Frames component. - * @return {void} */ addFramesComponent: function (framesInstance) { if (this.getFormLayout() == 'multi') { @@ -243,8 +230,6 @@ define( /** * Removes the payment form - * - * @return {void} */ removeCkoPaymentForm: function () { // Remove the events @@ -263,7 +248,6 @@ define( /** * Add events to Frames. - * @return {void} */ addFramesEvents: function () { var self = this; @@ -272,23 +256,25 @@ define( Frames.addEventHandler( Frames.Events.READY, function() { - var valid = Utilities.getBillingAddress() != null; + const billingAddress = Utilities.getBillingAddress(); + self.checkBillingAdressCustomerName(billingAddress); - if(valid) { - cardholderName = Utilities.getCustomerName(); - } + Quote.billingAddress.subscribe(function (newBillingAddress){ + self.checkBillingAdressCustomerName(newBillingAddress); + }); } ) // Card validation changed event Frames.addEventHandler( Frames.Events.CARD_VALIDATION_CHANGED, - function (event) { - var valid = Frames.isCardValid() + function () { + const valid = Frames.isCardValid() if (valid) { if(cardholderName.length === 0) { - if(Utilities.getBillingAddress()) { - cardholderName = Utilities.getCustomerName(); + const billingAddress = Utilities.getBillingAddress(); + if (billingAddress) { + cardholderName = Utilities.getCustomerNameByBillingAddress(billingAddress); } } @@ -297,12 +283,9 @@ define( name: cardholderName }; } - - // Submit the payment form - Frames.submitCard(); } - self.allowPlaceOrder(false); + self.allowPlaceOrder(valid); } ); @@ -317,9 +300,6 @@ define( // Enable the submit form Frames.enableSubmitForm(); - - // Set allowPlaceOrder to true only when tokenized. - self.allowPlaceOrder(true); } ); @@ -327,41 +307,65 @@ define( Frames.addEventHandler( Frames.Events.CARD_BIN_CHANGED, function (event) { - self.preferredScheme = event.scheme; + self.preferredScheme = event.preferred_scheme; self.isCoBadged(event.isCoBadged); } ); }, - /** - * @return {void} - */ placeOrder: function () { if (Utilities.methodIsSelected(METHOD_ID)) { + Utilities.setEmail(); + // Validate the order placement if (AdditionalValidators.validate() && Frames.isCardValid()) { - // Prepare the payload - var payload = { - methodId: METHOD_ID, - cardToken: this.cardToken, - cardBin: this.cardBin, - saveCard: this.saveCard, - preferredScheme: this.preferredScheme, - source: METHOD_ID - }; - - // Place the order - Utilities.placeOrder(payload, METHOD_ID); - Utilities.cleanCustomerShippingAddress(); + // Start the loader + FullScreenLoader.startLoader(); + // Submit the payment form + Frames.submitCard().then((response) => { + // Prepare the payload + const payload = { + methodId: METHOD_ID, + cardToken: response.token, + cardBin: response.bin, + saveCard: this.saveCard, + preferredScheme: response.preferred_scheme, + source: METHOD_ID + }; + + // Place the order + Utilities.placeOrder(payload, METHOD_ID, false); + Utilities.cleanCustomerShippingAddress(); + }).catch(function () { + FullScreenLoader.stopLoader(); + }); } } }, - /** - * @return {void} - */ toggleTooltip: function () { this.tooltipVisible(!this.tooltipVisible()); + }, + + /** + * @param {object} billingAddress + */ + checkBillingAdressCustomerName: function (billingAddress) { + const valid = billingAddress !== null; + + if (valid) { + cardholderName = Utilities.getCustomerNameByBillingAddress(billingAddress); + this.setCardHolderName(cardholderName); + } + }, + + /** + * @param {string} cardholderName + */ + setCardHolderName: function (cardholderName) { + Frames.cardholder = { + name: cardholderName + }; } } ); diff --git a/view/frontend/web/js/view/payment/method-renderer/checkoutcom_google_pay.js b/view/frontend/web/js/view/payment/method-renderer/checkoutcom_google_pay.js index d8f7861c..2669d1af 100755 --- a/view/frontend/web/js/view/payment/method-renderer/checkoutcom_google_pay.js +++ b/view/frontend/web/js/view/payment/method-renderer/checkoutcom_google_pay.js @@ -18,6 +18,7 @@ define( 'jquery', 'Magento_Checkout/js/view/payment/default', 'CheckoutCom_Magento2/js/view/payment/utilities', + 'CheckoutCom_Magento2/js/model/checkout-utilities', 'Magento_Checkout/js/model/full-screen-loader', 'Magento_Checkout/js/model/payment/additional-validators', 'Magento_Checkout/js/action/redirect-on-success', @@ -25,7 +26,7 @@ define( 'googlepayjs', ], function( - $, Component, Utilities, FullScreenLoader, AdditionalValidators, + $, Component, Utilities, ChekcoutUtilities, FullScreenLoader, AdditionalValidators, RedirectOnSuccessAction, __) { 'use strict'; window.checkoutConfig.reloadOnBillingAddress = true; @@ -46,6 +47,7 @@ define( initialize: function() { this._super(); Utilities.setEmail(); + ChekcoutUtilities.initSubscribers(this); Utilities.loadCss('google-pay', 'google-pay'); return this; @@ -95,6 +97,8 @@ define( $(self.button_target).click( function(evt) { if (Utilities.methodIsSelected(METHOD_ID)) { + Utilities.setEmail(); + // Validate T&C submission if (!AdditionalValidators.validate()) { return; diff --git a/view/frontend/web/js/view/payment/method-renderer/checkoutcom_klarna.js b/view/frontend/web/js/view/payment/method-renderer/checkoutcom_klarna.js new file mode 100755 index 00000000..be0db9fa --- /dev/null +++ b/view/frontend/web/js/view/payment/method-renderer/checkoutcom_klarna.js @@ -0,0 +1,282 @@ +/** + * Checkout.com + * Authorized and regulated as an electronic money institution + * by the UK Financial Conduct Authority (FCA) under number 900816. + * + * PHP version 7 + * + * @category Magento2 + * @package Checkout.com + * @author Platforms Development Team + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ + +define([ + 'jquery', + 'knockout', + 'Magento_Checkout/js/view/payment/default', + 'CheckoutCom_Magento2/js/view/payment/utilities', + 'CheckoutCom_Magento2/js/model/checkout-utilities', + 'Magento_Checkout/js/model/full-screen-loader', + 'Magento_Checkout/js/model/payment/additional-validators', + 'Magento_Checkout/js/model/quote', + 'mage/translate', + 'mage/url', +], function($, ko, Component, Utilities, CheckoutUtilities, FullScreenLoader, + AdditionalValidators, Quote, __, Url) { + 'use strict'; + + window.checkoutConfig.reloadOnBillingAddress = true; + const METHOD_ID = 'checkoutcom_klarna'; + let loadEvents = true; + let loaded = false; + + return Component.extend({ + defaults: { + template: 'CheckoutCom_Magento2/payment/' + METHOD_ID + + '.html', + }, + placeOrderEnable: ko.observable(false), + buttonId: METHOD_ID + '_btn', + chkKlarnaClientToken: null, + chkKlarnaContextId: null, + chkKlarnaApiUrl: 'https://x.klarnacdn.net/kp/lib/v1/api.js', + + /** + * @return {void} + */ + initialize: function() { + this._super(); + + const scriptPromise = this.klarnaScriptLoader(); + + scriptPromise.then(() => { + CheckoutUtilities.initSubscribers(this); + + // Manage billing address change + let self = this; + let prevAddress; + Quote.billingAddress.subscribe( + function (newAddress) { + if (!newAddress || !prevAddress || newAddress.getKey() !== prevAddress.getKey()) { + prevAddress = newAddress; + if (newAddress) { + self.getKlarnaContextDatas(Quote.billingAddress().countryId); + } + } + } + ); + + this.getKlarnaContextDatas(); + }).catch((error) => { + Utilities.log(error); + }); + }, + + /** + * Load klarna script witch promise + * @returns {Promise} + * @constructor + */ + klarnaScriptLoader: function() { + return new Promise((resolve, reject) => { + const klarnaScript = document.querySelector( + `script[src*="${this.chkKlarnaApiUrl}"]`); + + if (klarnaScript) { + resolve(); + return; + } + + const script = document.createElement('script'); + + script.addEventListener('load', () => { + resolve(); + }); + + script.addEventListener('error', () => { + reject('Something wrong happened with Klarna script load'); + }); + + this.buildScript(script); + }); + }, + + /** + * Build Klarna script + * @param script + */ + buildScript: function(script) { + const scriptUrl = new URL(this.chkKlarnaApiUrl); + + script.type = 'text/javascript'; + script.src = scriptUrl; + + document.head.appendChild(script); + }, + + /** + * @return {string} + */ + getCode: function() { + return METHOD_ID; + }, + + /** + * @param {string} field + * @return {string} + */ + getValue: function(field) { + return Utilities.getValue(METHOD_ID, field); + }, + + /** + * @return {void} + */ + checkLastPaymentMethod: function() { + return Utilities.checkLastPaymentMethod(); + }, + + /** + * @return {Promise} + */ + getKlarnaContextDatas: function(countryId = '') { + const self = this; + Utilities.clearMessages(METHOD_ID); + fetch(Url.build('checkout_com/klarna/context'), { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-Requested-With': 'XMLHttpRequest', + }, + body: JSON.stringify({ + country: countryId + }), + }).then(response => response.json()).then(response => { + // Error on context request + if (response.content.error) { + self.placeOrderEnable(false); + Utilities.showMessage('error', response.content.error, METHOD_ID); + return; + } + + // Store given token + this.chkKlarnaClientToken = response.content.partner_metadata.client_token; + this.chkKlarnaContextId = response.content.id; + + // Init klarna api + Klarna.Payments.init({ + client_token: this.chkKlarnaClientToken, + }); + + // Load the klarna, check if context (res_form) allow purchase + Klarna.Payments.load( + { + container: '#klarna-payments-container', + }, + {}, + function(res) { + if (res.show_form === true) { + // Display method + self.placeOrderEnable(true); + } else { + self.placeOrderEnable(false); + Utilities.showMessage('error', + __('Something went wrong with klarna method. Please choose another method.'), + METHOD_ID); + } + }, + ); + }).catch((response) => { + // Here we know that klarna is disallowed for this context + Utilities.log(response); + Utilities.showMessage('error', + __('Something went wrong with klarna method. Please choose another method.'), + METHOD_ID); + }); + }, + + /** + * Display the Klarna popin + */ + authorizePayment: function() { + const self = this; + + // Retrieve current quote datas in order to give billing informations to Klarna + $.ajax({ + type: 'POST', + url: Url.build('checkout_com/klarna/getCustomerDatas'), + data: { + quote_id: window.checkoutConfig.quoteItemData[0].quote_id, + form_key: window.checkoutConfig.formKey, + store_id: window.checkoutConfig.quoteData.store_id, + }, + success: function(data) { + + // Launch klarna popin with retrieved customer datas + Klarna.Payments.authorize( + {}, + { + billing_address: { + given_name: data.billing.firstname, + family_name: data.billing.lastname, + email: data.billing.email || + Utilities.getEmail(), + street_address: data.billing.street, + postal_code: data.billing.postcode, + city: data.billing.city, + region: data.billing.region, + phone: data.billing.phone, + country: data.billing.country_id.toLowerCase(), + }, + }, + function(res) { + if (res.approved === true) { + self.placeOrder(); + } else { + Utilities.showMessage('error', + __('Your payment has failed. Please try again.'), + METHOD_ID); + } + }, + ); + }, + error: self.placeOrderEnable(false), + }); + }, + + /** + * @return {void} + */ + placeOrder: function() { + FullScreenLoader.startLoader(); + + if (Utilities.methodIsSelected(METHOD_ID) && + this.chkKlarnaContextId) { + const data = { + methodId: METHOD_ID, + contextPaymentId: this.chkKlarnaContextId, + }; + + // Place the order + if (AdditionalValidators.validate()) { + Utilities.placeOrder( + data, + METHOD_ID, + function() { + Utilities.log(__('Success')); + }, + function() { + Utilities.log(__('Fail')); + }, + ); + Utilities.cleanCustomerShippingAddress(); + } + + FullScreenLoader.stopLoader(); + } + }, + }); +}); diff --git a/view/frontend/web/js/view/payment/method-renderer/checkoutcom_paypal.js b/view/frontend/web/js/view/payment/method-renderer/checkoutcom_paypal.js new file mode 100755 index 00000000..d5b64e46 --- /dev/null +++ b/view/frontend/web/js/view/payment/method-renderer/checkoutcom_paypal.js @@ -0,0 +1,165 @@ +/** + * Checkout.com + * Authorized and regulated as an electronic money institution + * by the UK Financial Conduct Authority (FCA) under number 900816. + * + * PHP version 7 + * + * @category Magento2 + * @package Checkout.com + * @author Platforms Development Team + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ + +define([ + 'jquery', + 'knockout', + 'Magento_Checkout/js/view/payment/default', + 'CheckoutCom_Magento2/js/view/payment/utilities', + 'CheckoutCom_Magento2/js/model/checkout-utilities', + 'CheckoutCom_Magento2/js/view/payment/paypal-utilities', + 'Magento_Checkout/js/model/full-screen-loader', + 'Magento_Checkout/js/model/payment/additional-validators', + 'Magento_Checkout/js/model/quote', + 'mage/translate', + 'mage/url', +], function ($, ko, Component, Utilities, CheckoutUtilities, PaypalUtilities, FullScreenLoader, AdditionalValidators, Quote, __, Url) { + 'use strict'; + + window.checkoutConfig.reloadOnBillingAddress = true; + const METHOD_ID = 'checkoutcom_paypal'; + let loadEvents = true; + let loaded = false; + + return Component.extend({ + defaults: { + template: 'CheckoutCom_Magento2/payment/' + METHOD_ID + + '.html', + }, + paypalScriptUrl: 'https://www.paypal.com/sdk/js', + placeOrderEnable: ko.observable(false), + buttonId: METHOD_ID + '_btn', + chkPayPalOrderid: null, + chkPayPalContextId: null, + + /** + * @return {void} + */ + initialize: function () { + this._super(); + + this.paypalCheckoutConfig = { + paypalScriptUrl: this.paypalScriptUrl, + clientId: this.getValue('checkout_client_id'), + merchantId: this.getValue('merchant_id'), + partnerAttributionId: this.getValue('checkout_partner_attribution_id'), + ...window.paypalCheckoutConfig + } + + const scriptPromise = PaypalUtilities.paypalScriptLoader(this.paypalCheckoutConfig); + + scriptPromise.then(() => { + this.placeOrderEnable(true); + }).catch((error) => { + Utilities.log(error); + }); + + CheckoutUtilities.initSubscribers(this); + }, + + /** + * @param {HTMLDivElement} element + * @return {void} + */ + renderPaypalButton: function (element) { + paypal.Buttons({ + createOrder: async () => { + return await this._getPaypalOrderId(); + }, + onApprove: async (data) => { + this.placeOrder(); + }, + }).render(element); + }, + + /** + * @return {string} + */ + getCode: function () { + return METHOD_ID; + }, + + /** + * @param {string} field + * @return {string} + */ + getValue: function (field) { + return Utilities.getValue(METHOD_ID, field); + }, + + /** + * @return {void} + */ + checkLastPaymentMethod: function () { + return Utilities.checkLastPaymentMethod(); + }, + + /** + * @return {Promise} + */ + _getPaypalOrderId: function () { + return fetch(Url.build('checkout_com/paypal/context'), { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-Requested-With': 'XMLHttpRequest' + }, + }) + .then(response => response.json()) + .then(response => { + this.chkPayPalContextId = response.content.id; + this.chkPayPalOrderid = response.content.partner_metadata.order_id; + + return this.chkPayPalOrderid; + }) + .catch((response) => { + Utilities.log(response); + Utilities.showMessage('error', __('Something went wrong with paypal method. Please choose another method.'), METHOD_ID); + }); + }, + + /** + * @return {void} + */ + placeOrder: function () { + FullScreenLoader.startLoader(); + + if (Utilities.methodIsSelected(METHOD_ID) && + this.chkPayPalContextId) { + let data = { + methodId: METHOD_ID, + contextPaymentId: this.chkPayPalContextId, + }; + + // Place the order + if (AdditionalValidators.validate()) { + Utilities.placeOrder( + data, + METHOD_ID, + function () { + Utilities.log(__('Success')); + }, + function () { + Utilities.log(__('Fail')); + }, + ); + Utilities.cleanCustomerShippingAddress(); + } + + FullScreenLoader.stopLoader(); + } + }, + }); +}); diff --git a/view/frontend/web/js/view/payment/method-renderer/checkoutcom_paypal_express.js b/view/frontend/web/js/view/payment/method-renderer/checkoutcom_paypal_express.js new file mode 100755 index 00000000..cd0916b9 --- /dev/null +++ b/view/frontend/web/js/view/payment/method-renderer/checkoutcom_paypal_express.js @@ -0,0 +1,158 @@ +/** + * Checkout.com + * Authorized and regulated as an electronic money institution + * by the UK Financial Conduct Authority (FCA) under number 900816. + * + * PHP version 7 + * + * @category Magento2 + * @package Checkout.com + * @author Platforms Development Team + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ + +define([ + 'jquery', + 'ko', + 'uiComponent', + 'CheckoutCom_Magento2/js/view/payment/utilities', + 'CheckoutCom_Magento2/js/view/payment/paypal-utilities', + 'Magento_Customer/js/customer-data', + 'mage/url', +], function ($, ko, Component, Utilities, PaypalUtilities, CustomerData, Url) { + 'use strict'; + + return Component.extend({ + isVisible: ko.observable(false), + chkPayPalOrderid: null, + chkPayPalContextId: null, + paypalScriptUrl: 'https://www.paypal.com/sdk/js', + paypalExpressInitialized: false, + allowedCurrencies: window.checkoutConfig.payment.checkoutcom_magento2.checkoutcom_data.paypal_allowed_currencies, + + /** + * @return {void} + */ + initialize: function () { + this._super(); + this.cartData = CustomerData.get('cart'); + this.customer = CustomerData.get('customer'); + + Utilities.loadCss('paypal-express', 'paypal'); + this._loadPaypalScript(); + this._dataListeners(); + }, + + /** + * @return {void} + */ + _loadPaypalScript: function () { + if (this._canUsePaypalExpress() && !this.paypalExpressInitialized) { + const { + checkout_client_id, + merchant_id, + checkout_partner_attribution_id + } = this.cartData().checkoutcom_paypal; + + this.paypalCheckoutConfig = { + paypalScriptUrl: this.paypalScriptUrl, + clientId: checkout_client_id, + merchantId: merchant_id, + partnerAttributionId: checkout_partner_attribution_id, + ...window.paypalCheckoutConfig + } + + const scriptPromise = PaypalUtilities.paypalScriptLoader(this.paypalCheckoutConfig); + + scriptPromise.then(() => { + this._initializePaypalExpressButton(); + }).catch((error) => { + Utilities.log(error); + }); + } + }, + + /** + * @return {void} + */ + _dataListeners: function () { + this.cartData.subscribe((newCartData) => { + this._loadPaypalScript(); + }); + }, + + /** + * @return {void} + */ + _initializePaypalExpressButton: function () { + this.isVisible(this.cartData().summary_count > 0); + + this.cartData.subscribe((newCartData) => { + this.isVisible(newCartData.summary_count > 0); + }); + + this.paypalExpressInitialized = true; + }, + + /** + * @param {HTMLDivElement} $el + * @return {void} + */ + renderPaypalButton: async function ($el) { + paypal.Buttons({ + createOrder: async () => { + return await this._getPaypalOrderId(); + }, + onApprove: async (data) => { + // Redirect on paypal reviex page (express checkout) + window.location.href = Url.build( + 'checkout_com/paypal/review/contextId/' + + this.chkPayPalContextId); + }, + }).render($el); + }, + + /** + * @return {void} + */ + _canUsePaypalExpress: function () { + const checkoutPaypalConfig = this.cartData().hasOwnProperty('checkoutcom_paypal') ? + this.cartData().checkoutcom_paypal : + null; + const currentQuoteCurrencyCode = window.checkoutConfig.hasOwnProperty('quoteData') ? + window.checkoutConfig.quoteData.quote_currency_code : + null; + + return checkoutPaypalConfig + && (this.cartData().isGuestCheckoutAllowed || this.customer.fullname) + && checkoutPaypalConfig['active'] === '1' + && checkoutPaypalConfig[this.context] === '1' + && this.allowedCurrencies.includes(currentQuoteCurrencyCode); + }, + + /** + * @return {Promise} + */ + _getPaypalOrderId: function () { + return fetch(Url.build('checkout_com/paypal/context'), { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-Requested-With': 'XMLHttpRequest' + }, + body: JSON.stringify({ + forceAuthorizeMode: 0 + }), + }) + .then(response => response.json()) + .then(response => { + this.chkPayPalContextId = response.content.id; + this.chkPayPalOrderid = response.content.partner_metadata.order_id; + + return this.chkPayPalOrderid; + }); + } + }); +}); diff --git a/view/frontend/web/js/view/payment/method-renderer/checkoutcom_paypal_review.js b/view/frontend/web/js/view/payment/method-renderer/checkoutcom_paypal_review.js new file mode 100755 index 00000000..fdf7b45a --- /dev/null +++ b/view/frontend/web/js/view/payment/method-renderer/checkoutcom_paypal_review.js @@ -0,0 +1,80 @@ +/** + * Checkout.com + * Authorized and regulated as an electronic money institution + * by the UK Financial Conduct Authority (FCA) under number 900816. + * + * PHP version 7 + * + * @category Magento2 + * @package Checkout.com + * @author Platforms Development Team + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ + +define([ + 'jquery', + 'CheckoutCom_Magento2/js/view/payment/utilities', +], function ($, Utilities) { + 'use strict'; + + $.widget('checkoutCom.paypalReviewPlaceorder', { + + /** + * @return {void} + */ + _create: function () { + this.editAddressForm = this.element.find('.form-address-edit'); + this.submitButton = this.element.find(this.options.buttonSelector); + + Utilities.loadCss('paypal-review', 'paypal'); + this._eventListeners(); + + if (!this.editAddressForm.validation('isValid')) { + this.submitButton.attr('disabled', 'true'); + } + }, + + /** + * @return {void} + */ + _eventListeners () { + this.submitButton.on('click', (event) => { + this.placeOrder(event); + }); + }, + + /** + * @param {jQuery.Event} event + * @return {void} + */ + placeOrder: function (event) { + $('body').trigger('processStart'); + + if (this.options.chkPayPalContextId) { + const submitButton = $(event.currentTarget); + const data = { + methodId: this.options.methodId, + contextPaymentId: this.options.chkPayPalContextId, + }; + + // Place the order + Utilities.placeOrder( + data, + this.options.methodId, + false + ) + .then(() => { + $('body').trigger('processStop'); + }); + + Utilities.cleanCustomerShippingAddress(); + } else { + $('body').trigger('processStop'); + } + }, + }); + + return $.checkoutCom.paypalReviewPlaceorder; +}); diff --git a/view/frontend/web/js/view/payment/method-renderer/checkoutcom_vault.js b/view/frontend/web/js/view/payment/method-renderer/checkoutcom_vault.js index 54311ef5..2385c70a 100755 --- a/view/frontend/web/js/view/payment/method-renderer/checkoutcom_vault.js +++ b/view/frontend/web/js/view/payment/method-renderer/checkoutcom_vault.js @@ -13,16 +13,15 @@ * @link https://docs.checkout.com/ */ -define( - [ +define([ 'jquery', 'Magento_Checkout/js/view/payment/default', 'CheckoutCom_Magento2/js/view/payment/utilities', + 'CheckoutCom_Magento2/js/model/checkout-utilities', 'Magento_Checkout/js/model/payment/additional-validators', 'Magento_Checkout/js/model/full-screen-loader', 'mage/translate' - ], - function ($, Component, Utilities, AdditionalValidators, FullScreenLoader, __) { + ], function ($, Component, Utilities, CheckoutUtilities, AdditionalValidators, FullScreenLoader, __) { 'use strict'; window.checkoutConfig.reloadOnBillingAddress = true; const METHOD_ID = 'checkoutcom_vault'; @@ -44,6 +43,7 @@ define( initialize: function () { this._super(); Utilities.setEmail(); + CheckoutUtilities.initSubscribers(this); Utilities.loadCss('vault', 'vault'); return this; @@ -251,6 +251,8 @@ define( */ placeOrder: function () { if (Utilities.methodIsSelected(METHOD_ID)) { + Utilities.setEmail(); + if (AdditionalValidators.validate()) { // Prepare the payload var payload = { diff --git a/view/frontend/web/js/view/payment/paypal-utilities.js b/view/frontend/web/js/view/payment/paypal-utilities.js new file mode 100644 index 00000000..cf55d17b --- /dev/null +++ b/view/frontend/web/js/view/payment/paypal-utilities.js @@ -0,0 +1,74 @@ +/** + * Checkout.com + * Authorized and regulated as an electronic money institution + * by the UK Financial Conduct Authority (FCA) under number 900816. + * + * PHP version 7 + * + * @category Magento2 + * @package Checkout.com + * @author Platforms Development Team + * @copyright 2010-present Checkout.com + * @license https://opensource.org/licenses/mit-license.html MIT License + * @link https://docs.checkout.com/ + */ + +define([ + 'jquery', + "CheckoutCom_Magento2/js/view/payment/utilities" +], function($, Utilities) { + 'use strict'; + + return { + + /** + * @public + * @param {Object} config + * @return {Promise} + */ + paypalScriptLoader: function (config) { + return new Promise((resolve, reject) => { + const paypalScript = document.querySelector(`script[src*="${config.paypalScriptUrl}"]`); + + if (paypalScript) { + resolve(); + return; + } + + const script = document.createElement('script'); + + script.addEventListener('load', () => { + resolve(); + }); + + script.addEventListener('error', () => { + reject('Something wrong happened with paypal script load'); + }); + + this.buildScript(script, config); + }); + }, + + /** + * @public + * @param {HTMLScriptElement} script + * @param {Object} config + */ + buildScript: function (script, config) { + const scriptUrl = new URL(config.paypalScriptUrl); + scriptUrl.searchParams.append('client-id', config.clientId); + scriptUrl.searchParams.append('merchant-id', config.merchantId); + scriptUrl.searchParams.append('intent', config.intent); + scriptUrl.searchParams.append('commit', config.commit); + scriptUrl.searchParams.append('currency', Utilities.getQuoteCurrency()); + scriptUrl.searchParams.append('disable-funding', 'credit,card,sepa'); + + script.type = 'text/javascript'; + script.src = scriptUrl; + script.dataset.pageType = config.pageType; + script.dataset.partnerAttributionId = config.partnerAttributionId; + + document.head.appendChild(script); + } + }; +}); diff --git a/view/frontend/web/js/view/payment/utilities.js b/view/frontend/web/js/view/payment/utilities.js index 61e78c8a..1c511ae7 100755 --- a/view/frontend/web/js/view/payment/utilities.js +++ b/view/frontend/web/js/view/payment/utilities.js @@ -33,6 +33,7 @@ define( const KEY_DATA = 'checkoutcom_data'; return { + /** * Gets a field value. * @@ -70,8 +71,12 @@ define( var cssPath = window.checkoutConfig.payment.checkoutcom_magento2.checkoutcom_data.css_path; cssPath += folderPath + '/' + fileName + ext; - // Append the CSS file - $('head').append(''); + const css = document.createElement('link'); + css.rel = 'stylesheet'; + css.media = 'all'; + css.href = cssPath; + + document.head.appendChild(css); }, /** @@ -208,49 +213,37 @@ define( }, /** - * Gets the card form language fallback. + * Get card form labels * * @return {string} */ - getLangageFallback: function () { - return Config[KEY_DATA].user.language_fallback; + getCardLabels: function (KEY) { + return { + cardNumberLabel: Config[KEY].card_number_label ? + Config[KEY].card_number_label : __('Card number'), + expiryDateLabel: Config[KEY].expiration_date_label ? + Config[KEY].expiration_date_label : __('Expiration Date'), + cvvLabel: Config[KEY].cvv_label ? + Config[KEY].cvv_label : __('Card Verification Number') + } }, /** - * Get the card form shop language + * Get card form placeholders * * @return {string} */ - getShopLanguage: function () { - let mageShopLanguage = Config[KEY_DATA].store.language; - let framesLanguage; - switch (mageShopLanguage) { - case 'nl_NL': - framesLanguage = 'NL-NL'; - break; - case 'en_GB': - framesLanguage = 'EN-GB'; - break; - case 'fr_FR': - framesLanguage = 'FR-FR'; - break; - case 'de_DE': - framesLanguage = 'DE-DE'; - break; - case 'it_IT': - framesLanguage = 'IT-IT'; - break; - case 'ko_KR': - framesLanguage = 'KR-KR'; - break; - case 'es_ES': - framesLanguage = 'ES-ES'; - break; - default: - framesLanguage = this.getLangageFallback().toUpperCase().split("_").join('-'); + getCardPlaceholders: function (KEY) { + return { + cardNumberPlaceholder: Config[KEY].card_number_placeholder ? + Config[KEY].card_number_placeholder : __('Card number'), + expiryMonthPlaceholder: Config[KEY].expiration_date_month_placeholder ? + Config[KEY].expiration_date_month_placeholder : __('MM'), + expiryYearPlaceholder: Config[KEY].expiration_date_year_placeholder ? + Config[KEY].expiration_date_year_placeholder : __('YY'), + cvvPlaceholder: Config[KEY].cvv_placeholder ? + Config[KEY].cvv_placeholder : __('CVV') } - - return framesLanguage; }, /** @@ -275,11 +268,10 @@ define( /** * Customer name. * - * @param {bool} return in object format. - * @return {mixed} The billing address. + * @param {object} billingAddress + * @return {string} */ - getCustomerName: function () { - var billingAddress = this.getBillingAddress(); + getCustomerNameByBillingAddress: function (billingAddress) { var customerName = ''; if (billingAddress && billingAddress.firstname && billingAddress.lastname) { customerName += billingAddress.firstname; @@ -369,21 +361,12 @@ define( messageContainer.show(); }, - /** - * Show response code. - */ - showResponseCode: function (type, message, methodId) { - var messageContainer = this.getMethodContainer(methodId).find('.message-response-code'); - messageContainer.addClass('message-' + type + ' ' + type); - messageContainer.append('
Response Code: ' + __(message) + '
'); - messageContainer.show(); - }, - /** * Clear all messages. */ clearMessages: function (methodId) { var messageContainer = this.getMethodContainer(methodId).find('.message'); + messageContainer.removeClass('message-warning warning message-error error'); messageContainer.hide(); messageContainer.empty(); }, @@ -416,22 +399,24 @@ define( methodIsSelected: function (idSelector) { var id = idSelector.replace('#', ''); var selected = CheckoutData.getSelectedPaymentMethod(); - return id == selected || selected == null; + return id === selected || selected === null; }, /** * Place a new order. * - * @return {void} + * @return {JQuery.ajax} */ - placeOrder: function (payload, methodId) { + placeOrder: function (payload, methodId, startLoader = true) { var self = this; - // Start the loader - FullScreenLoader.startLoader(); + if (startLoader) { + // Start the loader + FullScreenLoader.startLoader(); + } // Send the request - $.ajax({ + return $.ajax({ type: 'POST', url: self.getUrl('payment/placeorder'), data: payload, @@ -442,10 +427,6 @@ define( if (data.debugMessage) { self.showDebugMessage('error', data.debugMessage, methodId); } - if (data.responseCode) { - self.showResponseCode('error', data.responseCode, methodId); - } - self.allowPlaceOrder(methodId + '_btn', false) } else if (data.success && data.url) { // Handle 3DS redirection window.location.href = data.url; @@ -466,7 +447,7 @@ define( */ cleanCustomerShippingAddress: function() { CheckoutData.setNewCustomerShippingAddress(null); - } + }, }; } ); diff --git a/view/frontend/web/template/checkout/minicart/paypalbutton.html b/view/frontend/web/template/checkout/minicart/paypalbutton.html new file mode 100644 index 00000000..2dbae2bc --- /dev/null +++ b/view/frontend/web/template/checkout/minicart/paypalbutton.html @@ -0,0 +1,16 @@ + + + +
+
+
+
+
+ diff --git a/view/frontend/web/template/payment/checkoutcom_apple_pay.html b/view/frontend/web/template/payment/checkoutcom_apple_pay.html index e78e0e28..4d33d841 100755 --- a/view/frontend/web/template/payment/checkoutcom_apple_pay.html +++ b/view/frontend/web/template/payment/checkoutcom_apple_pay.html @@ -14,10 +14,10 @@ -->
+ data-bind="css: {'_active': (getCode() == isChecked())}, attr: {'id': getCode() + '_container'}">
+ data-bind="attr: {'id': getCode()}, value: getCode(), checked: isChecked, click: selectPaymentMethod, visible: isRadioButtonVisible()" /> @@ -34,20 +34,21 @@
-
- - - - -
+
+ + + + +
-
-
- -
-
+
diff --git a/view/frontend/web/template/payment/checkoutcom_card_payment.html b/view/frontend/web/template/payment/checkoutcom_card_payment.html index 7f9c0edf..927d74b1 100755 --- a/view/frontend/web/template/payment/checkoutcom_card_payment.html +++ b/view/frontend/web/template/payment/checkoutcom_card_payment.html @@ -61,13 +61,17 @@
-

+
+ + + +
@@ -87,7 +91,7 @@
@@ -103,7 +107,7 @@
diff --git a/view/frontend/web/template/payment/checkoutcom_klarna.html b/view/frontend/web/template/payment/checkoutcom_klarna.html new file mode 100755 index 00000000..689d4504 --- /dev/null +++ b/view/frontend/web/template/payment/checkoutcom_klarna.html @@ -0,0 +1,66 @@ + + +
+
+ + +
+ +
+ + + + + + +
+
+
+ + +
+ + + +
+ + +
+ + + +
+ +
+
+ +
+
+
+
+
diff --git a/view/frontend/web/template/payment/checkoutcom_paypal.html b/view/frontend/web/template/payment/checkoutcom_paypal.html new file mode 100755 index 00000000..1de1e6dc --- /dev/null +++ b/view/frontend/web/template/payment/checkoutcom_paypal.html @@ -0,0 +1,57 @@ + + +
+
+ + +
+ +
+ + + + + + +
+
+
+ + +
+ + + +
+ + +
+ + + +
+ + +
+
+
+ +
+
diff --git a/view/frontend/web/template/payment/checkoutcom_paypal_express.html b/view/frontend/web/template/payment/checkoutcom_paypal_express.html new file mode 100644 index 00000000..8fa31163 --- /dev/null +++ b/view/frontend/web/template/payment/checkoutcom_paypal_express.html @@ -0,0 +1,24 @@ + + + +
+
+
+
+
+